source: trunk/SRC/Textoidl/textoidl.pro @ 372

Last change on this file since 372 was 372, checked in by pinsard, 16 years ago

improvements of headers (alignments)

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 5.9 KB
Line 
1;+
2; @file_comments
3; Convert a valid TeX string to a valid IDL string for plot labels.
4;
5; @categories
6; Text, String
7;
8; @param INPUTSTRING {in}{required}
9; TeX string to be converted.  Will not be modified.  old may be a string array.
10;
11; @keyword FONT
12; Set to 0 to use hardware font, -1 to use
13; vector.  Note that the only hardware font
14; supported is PostScript.
15;
16; @keyword TEX_SEQUENCES
17; return the available TeX sequences
18;
19; @keyword HELP
20; print out info on use of the function and exit.
21;
22; @restrictions
23;       - Use the procedure SHOWTEX to get a list of the available TeX
24;         control sequences. 
25;       - The only hardware font for which translation is available is
26;         PostScript.
27;       - The only device for which hardware font'
28;         translation is available is PostScript.'
29;       - The FONT keyword overrides the font selected'
30;         by !p.font'
31;
32; @examples
33;
34;   IDL> out = TeXtoIDL('\Gamma^2 + 5N_{ed}')
35;
36; The string out may be used in XYOUTS or other IDL text
37; display routines.  It will be an uppercase Gamma, with an
38; exponent of 2, then a plus sign, then an N with the subscript
39; "ed".
40;
41; @history
42;       $Log: textoidl.pro,v $
43;       Revision 1.7  2004/06/15 17:25:54  mcraig
44;       Fixed bug in regular expression, changed array notation to square brackets
45;
46;       Revision 1.6  2004/01/11 01:49:00  mcraig
47;       Changed format of one array to newer [] style to avoidf conflict with function name in astro library.
48;
49;       Revision 1.5  2001/11/23 21:10:55  mcraig
50;       Added backslash '\' to tex sequences in translation table to protect them during regexp search in strsplit.
51;
52;       Revision 1.4  1996/06/14 20:00:27  mcraig
53;       Updated Copyright info.
54;
55;       Revision 1.3  1996/05/09 00:22:17  mcraig
56;       Added error handling, cleaned up documentation.
57;
58;       Revision 1.2  1996/02/08 18:52:50  mcraig
59;       Added ability to use hardware fonts for PostScript device.
60;
61;       Revision 1.1  1996/01/31 18:47:37  mcraig
62;       Initial revision
63;
64;  Copyright (C) 1996 The Regents of the University of California, All
65;  Rights Reserved.  Written by Matthew W. Craig.
66;  See the file COPYRIGHT for restrictions on distrubting this code.
67;  This code comes with absolutely NO warranty; see DISCLAIMER for details.
68;
69; @version
70; $Id$
71;-
72FUNCTION textoidl, InputString, $
73                   FONT=fnt, $
74                   HELP=hlp, $
75                   TEX_SEQUENCES=tex_seq
76;
77  compile_opt idl2, strictarrsubs
78;
79
80;  Return to caller if there is an error.
81    On_error, 2
82;  We begin by deciding on the font.  PostScript = 0 means use vector.
83    PostScript = 0
84    IF n_elements(fnt) EQ 0 THEN BEGIN     ; get font from !p.font
85        IF !p.font NE -1 THEN BEGIN        ; User wants hardware font.
86            PostScript=1
87        ENDIF
88    ENDIF ELSE BEGIN                       ; get font from FONT keyword
89        IF fnt NE -1 THEN PostScript = 1
90    ENDELSE
91
92;  Bomb out if user wants non-PostScript hardware font.
93    IF (PostScript EQ 1) AND (!d.name NE 'PS') THEN BEGIN   
94                                              ; Device isn't postscript
95                                              ; and user wants hardware
96                                              ; font.  Not good.
97        print,'Warning: No translation for device: ',!d.name
98        return,InputString               
99    ENDIF
100   
101    IF keyword_set (tex_seq) THEN BEGIN
102        table=textable()
103        return,table[0,*]
104    ENDIF
105
106    IF keyword_set(hlp) OR (n_params() EQ 0) THEN BEGIN
107        print, '   Convert a TeX string to an IDL string'
108        print, '   new = TeXtoIDL(old)'
109        print, '     old = TeX string to translate.                 in'
110        print, '     new = resulting IDL string.                    out'
111        print, '   Keywords:'
112        print, '      FONT       set to -1 to translate for vector fonts '
113        print, '                 (DEFAULT) .  Set to 0 to translate for'
114        print, '                 hardware font.'
115        print, '      /TEX_SEQUENCES -- return the available TeX sequences'
116        print, '      /HELP      print this message and exit.'
117        print, '   NOTES:  '
118        print, '      - Use SHOWTEX to obtain a list of the available'
119        print, '        TeX control sequences.'
120        print, '      - old may be a string array.  If so, new is too.'
121        print, '      - The only device for which hardware font'
122        print, '        translation is available is PostScript.'
123        print, '      - The FONT keyword overrides the font selected'
124        print, '        by !p.font'
125        return, -1
126    ENDIF
127   
128; PostScript has been set to 1 if PostScript fonts are desired.
129    strn = InputString
130    table = textable(POSTSCRIPT=PostScript)
131   
132;   Greek sub/superscripts need to be protected by putting braces
133;   around them if they are unbraced.  This will have the result the
134;   it will be difficult to use \ as a sub/superscript.  Get over it.
135
136;   V2.11 Must include the '\' in from of translation table TeX
137;   sequences to ensure that strsplit properly treats the '\' in the
138;   TeX sequence. Since strsplit is doing a regexp replace, and '\' is
139;   special in regexps, need to escape it.
140    strn =  strtrans(strn, '\^'+'\'+table[0, *], '^{'+table[0, *]+'}')
141    strn =  strtrans(strn, '\_'+'\'+table[0, *], '_{'+table[0, *]+'}')
142
143;  First we translate Greek letters and the like.  This makes guessing
144;  alignment of sub/superscripts easier, as all special characters will then
145;  be one character long.
146
147;   V2.11 Must include the '\' in from of translation table TeX
148;   sequences to ensure that strsplit properly treats the '\' in the
149;   TeX sequence. Since strsplit is doing a regexp replace, and '\' is
150;   special in regexps, need to escape it.
151    strn = strtrans(strn, '\'+table[0, *], table[1, *])
152
153
154    FOR i = 0L, n_elements(strn)-1 DO BEGIN
155        strn[i] = translate_sub_super(strn[i]) ; Take care of sub/superscripts
156    ENDFOR
157
158    return,strn
159END
Note: See TracBrowser for help on using the repository browser.