]> git.lyx.org Git - lyx.git/blob - src/mathed/texify
c4dad63ebcff55ab7b46852a3ff5d03d1006ac8d
[lyx.git] / src / mathed / texify
1 #!/usr/bin/tclsh
2
3 # Script built on an idea of Jules Bean to extract "what TeX would do" from
4 # a given macro.
5 #
6 # Call it with  texify '\macro' [...] to get a line per item giving ascent,
7 # descent, width and the primitives that TeX would use to typeset the item
8
9 # Original script:
10 #\batchmode
11 #\def\entails{$1}
12 #\edef\temp{\entails}
13 #\message{\string\meaning\temp}
14 #\setbox5=\box{$\entails$}
15 #\showbox5
16 #\bye
17
18 set filebase texifytmp
19 set hboxexp {^\\hbox.([0-9.]+)\+([0-9.]+).x([0-9.]+)}
20 set fontexp {^\.+\\ten([a-z]+) (.*)$}
21
22 foreach item $::argv {
23         set font    unknown
24         set char    {}
25         set value   0
26         set ascent  0
27         set descent 0
28         set widht   0
29
30         set f [open $filebase.tex w 0600]
31         puts $f "\\nonstopmode"
32         puts $f "\\setbox5=\\hbox\{\$$item\$\}"
33         puts $f "\\showbox5"
34         puts $f ""
35         puts $f "\\end"
36         close $f
37
38         if {[catch {exec tex $filebase.tex} err]} {
39                 #puts "Error: '$err'"
40         }
41
42         set f [open $filebase.log r]
43         while {![eof $f]} {
44                 gets $f line
45                 regexp $hboxexp $line dummy ascent descent width
46                 regexp $fontexp $line dummy font char
47         }
48         close $f
49
50         if {![string equal $font "unknown"]} {
51                 if {[string equal -length 2 $char {^^}]} {
52                         scan $char "%c%c%c" dummy1 dummy2 value
53                         set value [expr {$value - 64}]
54                 } else {
55                         scan $char "%c" value
56                 }
57         }
58
59         puts [list $ascent $descent $width $font $value $char]
60 }