summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: bdaf87f)
raw | patch | inline | side by side (parent: bdaf87f)
author | buliabyak <buliabyak@users.sourceforge.net> | |
Mon, 1 May 2006 05:17:14 +0000 (05:17 +0000) | ||
committer | buliabyak <buliabyak@users.sourceforge.net> | |
Mon, 1 May 2006 05:17:14 +0000 (05:17 +0000) |
share/extensions/Makefile.am | patch | blob | history | |
share/extensions/eqtexsvg.inx | [new file with mode: 0644] | patch | blob |
share/extensions/eqtexsvg.py | [new file with mode: 0644] | patch | blob |
index 0fe2b6cd1d0052f84929a58b8dea7b48e1a58510..293a313a9ab9b692c982c3945082530b03938846 100644 (file)
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 =
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
--- /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
--- /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()