source: trunk/TEXT2IDL/textoidl.pro @ 7

Last change on this file since 7 was 7, checked in by pinsard, 18 years ago

1st commit according to cerbere.lodyc.jussieu.fr:/usr/home/smasson/IDL_RD/

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