Code

add latex formula renderer
authorbuliabyak <buliabyak@users.sourceforge.net>
Mon, 1 May 2006 05:17:14 +0000 (05:17 +0000)
committerbuliabyak <buliabyak@users.sourceforge.net>
Mon, 1 May 2006 05:17:14 +0000 (05:17 +0000)
share/extensions/Makefile.am
share/extensions/eqtexsvg.inx [new file with mode: 0644]
share/extensions/eqtexsvg.py [new file with mode: 0644]

index 0fe2b6cd1d0052f84929a58b8dea7b48e1a58510..293a313a9ab9b692c982c3945082530b03938846 100644 (file)
@@ -47,10 +47,11 @@ extensions = \
        svg_and_media_zip_output.py \
        dxf_outlines.py \
        fig2svg.sh \
-    cspsubdiv.py \
-    flatten.py \
-    measure.py \
-    gimp_xcf.py
+       cspsubdiv.py \
+       flatten.py \
+       measure.py \
+       gimp_xcf.py \
+       eqtexsvg.py
 
 otherstuff =
 
@@ -92,10 +93,11 @@ modules = \
        extractimage.inx \
        svg_and_media_zip_output.inx \
        dxf_outlines.inx \
-    fig_input.inx \
-    flatten.inx \
-    measure.inx \
-    gimp_xcf.inx
+       fig_input.inx \
+       flatten.inx \
+       measure.inx \
+       gimp_xcf.inx \
+       eqtexsvg.inx
 
 extension_SCRIPTS = \
        $(extensions)
diff --git a/share/extensions/eqtexsvg.inx b/share/extensions/eqtexsvg.inx
new file mode 100644 (file)
index 0000000..819f30a
--- /dev/null
@@ -0,0 +1,19 @@
+<inkscape-extension>
+    <_name>LaTeX formula</_name>
+    <id>org.inkscape.effect.eqtexsvg</id>
+       <dependency type="executable" location="extensions">eqtexsvg.py</dependency>
+       <dependency type="executable" location="extensions">inkex.py</dependency>
+       <dependency type="executable" location="path">latex</dependency>
+       <dependency type="executable" location="path">dvips</dependency>
+       <dependency type="executable" location="path">pstoedit</dependency>
+       <param name="formule" type="string" _gui-text="LaTeX formula: ">\lim_{n \to \infty}\sum_{k=1}^n \frac{1}{k^2}= \frac{\pi^2}{6}</param>
+    <effect>
+               <object-type>all</object-type>
+                <effects-menu>
+                      <submenu _name="Render"/>
+               </effects-menu>
+    </effect>
+    <script>
+        <command reldir="extensions" interpreter="python">eqtexsvg.py</command>
+    </script>
+</inkscape-extension>
diff --git a/share/extensions/eqtexsvg.py b/share/extensions/eqtexsvg.py
new file mode 100644 (file)
index 0000000..8828c8b
--- /dev/null
@@ -0,0 +1,121 @@
+#!/usr/bin/env python
+# -*- coding: cp1252 -*-
+"""
+EQTEXSVG.py
+functions for converting LATEX equation string into SVG path
+This extension need, to work properly :
+    - a TEX/LATEX distribution (MiKTEX ...)
+    - pstoedit software: <http://www.pstoedit.net/pstoedit>
+
+Copyright (C) 2006 Julien Vitard, julienvitard@gmail.com
+
+- I will try to code XML parsing, not the hard way ;-)
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+"""
+
+import inkex, os, tempfile
+
+def create_equation_tex(filename, equation):
+       tex = open(filename, 'w')
+       tex.write("""%% processed with EqTeXSVG.py
+\documentclass{article}
+       
+\\thispagestyle{empty}
+\\begin{document}
+""")
+       tex.write("$$\n")
+       tex.write(equation)
+       tex.write("\n$$\n")
+       tex.write("\end{document}\n")
+       tex.close()
+
+def svg_open(self,filename):
+# parsing of SVG file with the equation 
+# real parsing XML to use!!!! it will be easier !!!
+        svg = open(filename, 'r')
+        svg_lines = svg.readlines()
+
+# trip top/bottom lines from svg file
+        svg_lines.pop(0)
+        svg_lines.pop(1)
+        svg_lines.pop(len(svg_lines)-1)
+
+        group = self.document.createElement('svg:g')
+        self.document.documentElement.appendChild(group)
+
+# deleting "<g... >" "</g>" "<path d=" and "/>" from svg_lines
+        nodegroup=''
+        s_nodegroup_path=''
+        
+        for i in range(1,len(svg_lines)):
+            if svg_lines[i].find("<g") != -1:
+                nodegroup=svg_lines[i].split("<g")
+                nodegroup=nodegroup[1].split(" >")
+                nodegroup=nodegroup[0]+'\n'
+            elif svg_lines[i].find("<path d=") != -1:
+                s_nodegroup_path=svg_lines[i].split("<path d=")
+                s_nodegroup_path=s_nodegroup_path[1]                
+            elif svg_lines[i].find("/>") != -1:
+                s_nodegroup_path=s_nodegroup_path+'"\n'
+            elif svg_lines[i].find("</g>") != -1:
+                nodegroup_svg = self.document.createElement('svg:g')
+                nodegroup_svg.setAttribute('style',nodegroup)
+                nodegroup_path = self.document.createElement('svg:path')
+                nodegroup_path.setAttribute('d',s_nodegroup_path)
+                group.appendChild(nodegroup_svg)                               
+                nodegroup_svg.appendChild(nodegroup_path)
+            else:
+                s_nodegroup_path=s_nodegroup_path+svg_lines[i]
+
+class EQTEXSVG(inkex.Effect):
+       def __init__(self):
+               inkex.Effect.__init__(self)
+               self.OptionParser.add_option("-f", "--formule",
+                                               action="store", type="string", 
+                                               dest="formule", default=10.0,
+                                               help="Formule LaTeX")
+       def effect(self):
+               
+               base_file = os.path.join(tempfile.gettempdir(), "inkscape-latex.tmp")
+               latex_file = base_file + ".tex"
+               create_equation_tex(latex_file, self.options.formule)
+
+               out_file = os.path.join(tempfile.gettempdir(), "inkscape-latex.tmp.output")
+               os.system('latex -output-directory=' + tempfile.gettempdir() + ' ' + latex_file + '> ' + out_file)
+
+               ps_file = base_file + ".ps"
+               dvi_file = base_file + ".dvi"
+               svg_file = base_file + ".svg"
+               os.system('dvips -q -f -E -D 600 -y 5000 -o ' + ps_file + ' ' + dvi_file)
+               os.system('pstoedit -f svg -dt -ssp ' + ps_file + ' ' + svg_file + '>> ' + out_file)
+
+               # ouvrir le svg et remplacer #7F7F7F par #000000
+               svg_open(self, svg_file)
+
+             # clean up
+               aux_file = base_file + ".aux"
+               log_file = base_file + ".log"
+               os.remove(latex_file)
+               os.remove(aux_file)
+               os.remove(log_file)
+               os.remove(dvi_file)
+               os.remove(ps_file)
+               os.remove(svg_file)
+               os.remove(out_file)
+               
+e = EQTEXSVG()
+e.affect()