diff --git a/extension/latextext.inx b/extension/latextext.inx index be7025d..e877cf3 100644 --- a/extension/latextext.inx +++ b/extension/latextext.inx @@ -3,15 +3,12 @@ Text with Latex org.inkscape.render.latextext latextext.py - inkex.py + inkex amsmath,amssymb 0 10 1.0 - false - false - false all diff --git a/extension/latextext.py b/extension/latextext.py index 4cc9aa5..89b8902 100755 --- a/extension/latextext.py +++ b/extension/latextext.py @@ -36,9 +36,9 @@ u'rendltx': RENDLTX_NS, } -# uncocmment the following to register namespaces globally if newer LXML versions +# uncomment the following to register namespaces globally if newer LXML versions # are shipped with Inkscape on Windows, then remove 'nsmap=NSS' syntax -# etree.register_namespace("rendltx", RENDLTX_NS) +etree.register_namespace("rendltx", RENDLTX_NS) ###################### # logging functions @@ -70,7 +70,7 @@ def log_message(msg_level, *msg): print(*msg) else: for m in msg: - inkex.debug(m) + inkex.utils.debug(m) def set_log_level(l): @@ -97,7 +97,7 @@ class SvgTransformer: def _matmult(self, a, b): zip_b = zip(*b) # uncomment next line if python 3 : - # zip_b = list(zip_b) + zip_b = list(zip_b) return [[sum(ele_a * ele_b for ele_a, ele_b in zip(row_a, col_b)) for col_b in zip_b] for row_a in a] @@ -469,7 +469,7 @@ def run(self): if txt_empty: log_debug("Empty text element, skipping...") continue - if self.options.math and latex_string[0] is not '$': + if self.options.math and latex_string[0] != '$': latex_string = '$' + latex_string + '$' log_debug(latex_string) rendergroup = lat2svg.render(latex_string, self.options.preamble, self.options.packages, self.options.fontsize, self.options.scale) @@ -575,13 +575,13 @@ def render(self, latex_code, preamble_file=None, package_list="", fontsize=10, s cmd = [os.path.join(LATEX_PATH, 'pdflatex'), texfile_path] + latexOpts cmdlog = self._exec_command(cmd) except RuntimeError as error: - # TODO: cleanup excpetion handling and excception chains + # TODO: cleanup exception handling and exception chains log_error(cmdlog) raise RuntimeError() if not os.path.exists(os.path.join(tmp_path, 'tmp.pdf')): log_error("pdflatex didn't produce output ", os.path.join(tmp_path, 'tmp.pdf')) - # TODO: cleanup excpetion handling and excception chains + # TODO: cleanup exception handling and exception chains raise RuntimeError() # Convert PDF to SVG @@ -608,106 +608,102 @@ def render(self, latex_code, preamble_file=None, package_list="", fontsize=10, s # commandline options shared by standalone application and inkscape extension def add_options(parser): - parser.add_option("-o", "--outfile", dest="outfile", + parser.add_argument("-o", "--outfile", dest="outfile", help="write to output file or directory", metavar="FILE") - parser.add_option("-p", "--preamble", dest="preamble", + parser.add_argument("-p", "--preamble", dest="preamble", help="latex preamble file", metavar="FILE") - parser.add_option("-k", "--packages", dest="packages", + parser.add_argument("-k", "--packages", dest="packages", help="comma separated list of additional latex packages to be loaded", metavar="LIST") - parser.add_option("-f", "--fontsize", dest="fontsize", type="int", + parser.add_argument("-f", "--fontsize", dest="fontsize", type=int, help="latex base font size") - parser.add_option("-s", "--scale", dest="scale", type="float", + parser.add_argument("-s", "--scale", dest="scale", type=float, help="apply additional scaling") - parser.add_option("-d", "--depth", dest="depth", type="int", + parser.add_argument("-d", "--depth", dest="depth", type=int, help="maximum search depth for grouped text elements") - parser.add_option("-n", "--newline", dest="newline", - action="store_true", + parser.add_argument("-n", "--newline", dest="newline", + action="store_false", default=False, help="insert \\\\ at every line break") - parser.add_option("-m", "--math", dest="math", + parser.add_argument("-m", "--math", dest="math", action="store_true", help="encapsulate all text in math mode") - parser.add_option("-c", "--clean", + parser.add_argument("-c", "--clean", action="store_true", dest="clean", help="remove all renderings") + parser.add_argument("-l", "--log", type=inkex.Boolean, + action="store", dest="debug", default=False, + help="show log messages in inkscape") -if STANDALONE is False: - # Create an Inkscape extension - class RenderLatexEffect(inkex.Effect): - def __init__(self): - inkex.Effect.__init__(self) - add_options(self.OptionParser) - self.OptionParser.set_conflict_handler("resolve") - self.OptionParser.add_option("-l", "--log", type='inkbool', - action="store", dest="debug", default=False, - help="show log messages in inkscape") - self.OptionParser.add_option("-n", "--newline", dest="newline", - action="store", type='inkbool', - help="insert \newline at every line break") - self.OptionParser.add_option("-m", "--math", type='inkbool', - action="store", dest="math", - help="encapsulate all text in math mode") - - def effect(self): - if self.options.debug is True: - set_log_level(log_level_debug) - svgprocessor = SvgProcessor(self.document, self.options) - svgprocessor.run() -else: - # Create a standalone commandline application - def main_standalone(): - # parse commandline arguments - from optparse import OptionParser - parser = OptionParser(usage="usage: %prog [options] SVGfile(s)") - add_options(parser) - parser.add_option("-v", "--verbose", default=False, - action="store_true", dest="verbose") - (options, args) = parser.parse_args() - - if options.verbose is True: - set_log_level(log_level_debug) - - # expand wildcards - args = [glob.glob(arg) if '*' in arg else arg for arg in args] - - if len(args) < 1: - log_error('No input file specified! Call with -h argument for usage instructions.') - sys.exit(1) - elif len(args) > 2 and options.outfile and not os.path.isdir(options.outfile): - log_error('If more than one input file is specified -o/--outfile has to point to a directory.') - sys.exit(1) +class RenderLatexEffect(inkex.TextExtension): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.arg_parser.conflict_handler = "resolve" + add_options(self.arg_parser) - # main loop, run the SVG processor for each input file - for infile in args: - if options.outfile: - if os.path.isdir(options.outfile): - outfile = os.path.join(options.outfile, os.path.basename(infile)) - else: - outfile = options.outfile + def effect(self): + if self.options.debug is True: + set_log_level(log_level_debug) + svgprocessor = SvgProcessor(self.document, self.options) + svgprocessor.run() + + def process_element(self, text_node): + log_debug("test") + + +# Create a standalone commandline application +def main_standalone(): + # parse commandline arguments + from optparse import OptionParser + parser = OptionParser(usage="usage: %prog [options] SVGfile(s)") + add_options(parser) + parser.add_option("-v", "--verbose", default=False, + action="store_true", dest="verbose") + (options, args) = parser.parse_args() + + if options.verbose is True: + set_log_level(log_level_debug) + + # expand wildcards + args = [glob.glob(arg) if '*' in arg else arg for arg in args] + + if len(args) < 1: + log_error('No input file specified! Call with -h argument for usage instructions.') + sys.exit(1) + elif len(args) > 2 and options.outfile and not os.path.isdir(options.outfile): + log_error('If more than one input file is specified -o/--outfile has to point to a directory.') + sys.exit(1) + + # main loop, run the SVG processor for each input file + for infile in args: + if options.outfile: + if os.path.isdir(options.outfile): + outfile = os.path.join(options.outfile, os.path.basename(infile)) else: - outfile = infile + outfile = options.outfile + else: + outfile = infile - log_info("Rendering " + infile + " -> " + outfile) + log_info("Rendering " + infile + " -> " + outfile) - svgprocessor = SvgProcessor(infile, options) + svgprocessor = SvgProcessor(infile, options) - try: - result = svgprocessor.run() - except RuntimeError: - log_error("ERROR while rendering " + infile) - sys.exit(1) + try: + result = svgprocessor.run() + except RuntimeError: + log_error("ERROR while rendering " + infile) + sys.exit(1) - # write processed XML to a file - xmlstr = etree.tostring(result, pretty_print=True, xml_declaration=True) - f = open(outfile, 'w') - f.write(xmlstr.decode('utf-8')) - f.close() + # write processed XML to a file + xmlstr = etree.tostring(result, pretty_print=True, xml_declaration=True) + f = open(outfile, 'w') + f.write(xmlstr.decode('utf-8')) + f.close() if __name__ == "__main__": - if STANDALONE is False: + if not STANDALONE: # run the extension effect = RenderLatexEffect() - effect.affect() + effect.run() else: main_standalone() diff --git a/extension/latextext_gtk3.inx b/extension/latextext_gtk3.inx index 7a6763b..02eb021 100644 --- a/extension/latextext_gtk3.inx +++ b/extension/latextext_gtk3.inx @@ -4,7 +4,7 @@ org.inkscape.render.latextext_gtk3 latextext.py latextext_gtk3.py - inkex.py + inkex all diff --git a/extension/latextext_gtk3.py b/extension/latextext_gtk3.py index dfcb158..a5b2aeb 100755 --- a/extension/latextext_gtk3.py +++ b/extension/latextext_gtk3.py @@ -174,4 +174,4 @@ def effect(self): if __name__ == "__main__": effect = RenderLatexEffectGTK3() - effect.affect() + effect.run()