source: trunk/TEXT2IDL/textoidl.pro @ 2

Last change on this file since 2 was 2, checked in by opalod, 22 years ago

Initial revision

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 5.3 KB
Line 
1;
2;+
3; NAME:
4;       TEXTOIDL
5; PURPOSE:
6;       Convert a valid TeX string to a valid IDL string for plot labels.
7; CATEGORY:
8;       text/strings
9; CALLING SEQUENCE:
10;       new = textoidl(old)
11; INPUTS:
12;       old            -- TeX string to be converted.  Will not be     in
13;                         modified.  old may be a string array.
14; KEYWORD PARAMETERS:
15;       FONT           -- Set to 0 to use hardware font, -1 to use
16;                         vector.  Note that the only hardware font
17;                         supported is PostScript.
18;       /TEX_SEQUENCES -- return the available TeX sequences
19;       /HELP          -- print out info on use of the function
20;                         and exit.
21; OUTPUTS:
22;       new            -- IDL string corresponding to old.             out
23; COMMON BLOCKS:
24; SIDE EFFECTS:
25; NOTES:
26;       - Use the procedure SHOWTEX to get a list of the available TeX
27;         control sequences. 
28;       - The only hardware font for which translation is available is
29;         PostScript.
30;       - The only device for which hardware font'
31;         translation is available is PostScript.'
32;       - The FONT keyword overrides the font selected'
33;         by !p.font'
34; EXAMPLE:
35;       out = TeXtoIDL('\Gamma^2 + 5N_{ed}')
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; MODIFICATION HISTORY:
41;       $Id$
42;       $Log$
43;       Revision 1.1  2002/09/11 10:17:16  opalod
44;       Initial revision
45;
46;       Revision 1.4  1996/06/14 20:00:27  mcraig
47;       Updated Copyright info.
48;
49;       Revision 1.3  1996/05/09 00:22:17  mcraig
50;       Added error handling, cleaned up documentation.
51;
52;       Revision 1.2  1996/02/08 18:52:50  mcraig
53;       Added ability to use hardware fonts for PostScript device.
54;
55;       Revision 1.1  1996/01/31 18:47:37  mcraig
56;       Initial revision
57;
58; RELEASE:
59;       $Name$
60;
61; COPYRIGHT:
62;  Copyright (C) 1996 The Regents of the University of California, All
63;  Rights Reserved.  Written by Matthew W. Craig.
64;  See the file COPYRIGHT for restrictions on distrubting this code.
65;  This code comes with absolutely NO warranty; see DISCLAIMER for details.
66;-
67;
68FUNCTION Textoidl, InputString, $
69                   FONT=fnt, $
70                   HELP=hlp, $
71                   TEX_SEQUENCES=tex_seq
72
73;  Return to caller if there is an error.
74    On_error, 2
75;  We begin by deciding on the font.  PostScript = 0 means use vector.
76    PostScript = 0
77    IF n_elements(fnt) EQ 0 THEN BEGIN     ; get font from !p.font
78        IF !p.font NE -1 THEN BEGIN        ; User wants hardware font.
79            PostScript=1
80        ENDIF
81    ENDIF ELSE BEGIN                       ; get font from FONT keyword
82        IF fnt NE -1 THEN PostScript = 1
83    ENDELSE
84
85;  Bomb out if user wants non-PostScript hardware font.
86    IF (PostScript EQ 1) AND (!d.name NE 'PS') THEN BEGIN   
87                                              ; Device isn't postscript
88                                              ; and user wants hardware
89                                              ; font.  Not good.
90        print,'Warning: No translation for device: ',!d.name
91        return,InputString               
92    ENDIF
93   
94    IF keyword_set (tex_seq) THEN BEGIN
95        table=textable()
96        return,table(0,*)
97    ENDIF
98
99    IF keyword_set(hlp) OR (n_params() EQ 0) THEN BEGIN
100        print, '   Convert a TeX string to an IDL string'
101        print, '   new = TeXtoIDL(old)'
102        print, '     old = TeX string to translate.                 in'
103        print, '     new = resulting IDL string.                    out'
104        print, '   Keywords:'
105        print, '      FONT       set to -1 to translate for vector fonts '
106        print, '                 (DEFAULT) .  Set to 0 to translate for'
107        print, '                 hardware font.'
108        print, '      /TEX_SEQUENCES -- return the available TeX sequences'
109        print, '      /HELP      print this message and exit.'
110        print, '   NOTES:  '
111        print, '      - Use SHOWTEX to obtain a list of the available'
112        print, '        TeX control sequences.'
113        print, '      - old may be a string array.  If so, new is too.'
114        print, '      - The only device for which hardware font'
115        print, '        translation is available is PostScript.'
116        print, '      - The FONT keyword overrides the font selected'
117        print, '        by !p.font'
118        return, -1
119    ENDIF
120   
121; PostScript has been set to 1 if PostScript fonts are desired.
122    strn = InputString
123    table = textable(POSTSCRIPT=PostScript)
124   
125;   Greek sub/superscripts need to be protected by putting braces
126;   around them if they are unbraced.  This will have the result the
127;   it will be difficult to use \ as a sub/superscript.  Get over it.
128    strn =  strtrans(strn, '^'+table(0, *), '^{'+table(0, *)+'}')
129    strn =  strtrans(strn, '_'+table(0, *), '_{'+table(0, *)+'}')
130
131;  First we translate Greek letters and the like.  This makes guessing
132;  alignment of sub/superscripts easier, as all special characters will then
133;  be one character long.
134    strn = strtrans(strn, table(0, *), table(1, *))
135
136    FOR i = 0L, n_elements(strn)-1 DO $
137      strn(i) = translate_sub_super(strn(i)) ; Take care of sub/superscripts
138
139    return,strn
140END
Note: See TracBrowser for help on using the repository browser.