Attachment 'latex2wiki.py'

Download

   1 """Translate a subset of LaTeX into MoinMoin wiki syntax.
   2 
   3 This program was originally written by Maxime Biais <maxime@biais.org>
   4 and then modified by Allen Downey <downey@allendowney.com>.  The
   5 original is available at http://wiki.loria.fr/wiki/Latex2wiki
   6 
   7 The primary limitation of this program is that it only recognizes
   8 Latex patterns if they appear on a single line, so {\tt this pattern}
   9 would get translated, but {\tt this
  10 pattern} would not.
  11 
  12 Other limitations include:
  13 
  14 1) It doesn't distinguish between itemize, enumerate and
  15 description; everything becomes itemize.
  16 
  17 2) It only recognizes the subset of Latex I use.
  18 
  19 3) It's not particularly efficient, but for the files I have
  20    translated, it doesn't matter.
  21 
  22 """
  23 
  24 #    Copyright (C) 2003, Maxime Biais <maxime@biais.org>
  25 #    Modified version Copyright 2005 Allen B. Downey
  26 #    Modified version for my latex text  2008 Reimar Bauer   
  27 #
  28 #    This program is free software; you can redistribute it and/or modify
  29 #    it under the terms of the GNU General Public License as published by
  30 #    the Free Software Foundation; either version 2 of the License, or
  31 #    (at your option) any later version.
  32 #
  33 #    This program is distributed in the hope that it will be useful,
  34 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
  35 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  36 #    GNU General Public License for more details.
  37 #
  38 #    You should have received a copy of the GNU General Public License
  39 #    along with this program; if not, write to the Free Software
  40 #    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  41 #
  42 
  43 import sys, re
  44 
  45 # rewrites is a list of rewrite rules.
  46 # The first entry in each line is a regular expression.
  47 # The second line is the format string
  48 # used to rewrite the line if the regexp matches.
  49 
  50 rewrites = [
  51     # comments
  52     (r"%.*", ""),
  53     # simple Latex commands we ignore
  54     (r"\\[^ {]*$", ""),
  55     # other Latex commands we ignore
  56     (r"\\label{.*}", ""),
  57     (r"\\index{.*}", ""),
  58     (r"\\documentclass{.*}", ""),
  59     (r"\\usepackage{.*}", ""),
  60     (r"\\newcommand{.*}", ""),
  61     (r"\\setlength{.*}", ""),
  62     # some characters that have to be quoted in Latex
  63     # that don't have to be quoted in wiki
  64     (r"(.*)\\#(.*)", "%s#%s"),
  65     (r"(.*)\\\$(.*)", "%s$%s"),
  66     (r"(.*)\\&(.*)", "%s&%s"),
  67     (r"(.*)\\_(.*)", "%s_%s"),
  68     # text formats
  69     (r"(.*)\\emph{([^}]*)}(.*)", "%s'''%s'''%s"),
  70     (r"(.*){\\sf ([^}]*)}(.*)", "%s`%s`%s"),
  71     (r"(.*){\\bf ([^}]*)}(.*)", "%s'''%s'''%s"),
  72     (r"(.*){\\em ([^}]*)}(.*)", "%s''%s''%s"),
  73     # urls (a url at the beginning of a line gets a special rule
  74     (r"^\\url{([^}]*)}(.*)", "%s %s"),
  75     (r"(.*)\\url{([^}]*)}(.*)", "%s %s %s"),
  76     (r"(.*){\\tt ([^}]*)}(.*)", "%s{{{%s}}}%s"),
  77     (r"(.*)\\texttt{([^}]*)}(.*)", "%s{{{%s}}}%s"),
  78     (r"(.*)\\textit{([^}]*)}(.*)", "%s''%s''%s"),
  79     (r"(.*)\\textbf{([^}]*)}(.*)", "%s'''%s'''%s"),
  80     
  81     (r"(.*)\\colorbox{silver}{([^}]*)}(.*)", "%s{{{%s}}}%s"),
  82     (r"(.*)\\colorbox{lightgray}{\\parbox{14.4cm}{(.*)", "%s{{{{{#!wiki blue %s"),
  83     #(r"(.*)\\includegraphics([^\[]*)([^\[]*)", "%s{{attachment:%s}} %s"),
  84     (r"(.*)\\includegraphics\[([$\]]*)([^\[]*)", "%s{{attachment:%s}} %s"),
  85     # arrow is a special command that appears in some of my files
  86     (r"(.*)\\arrow (.*)", "%s-->%s"),
  87     # footnotes get translated into parenthetical comments
  88     # (which some people think is a preferable style anyway)
  89     (r"(.*)\\footnote{(.*)}(.*)", "%s (footnote: %s) %s"),
  90     # all items become bulleted items (no unemerations)
  91     (r"\\item (.*)", " * %s"),
  92     # verbatim becomes code display
  93     (r"\\begin{verbatim}", "{{{{{"),
  94     (r"\\end{verbatim}", "}}}}}"),
  95     # listings becomes python code display
  96     (r"\\begin{lstlisting}(.*)", "{{{{{#!python %s" ),
  97     (r"\\end{lstlisting}", "}}}}}"),
  98     # all other latex environments are ignored
  99     (r"\\begin{.*}", ""),
 100     (r"\\end{.*}", ""),
 101     # turn Latex quotation marks into plain old quotation marks
 102     (r"(.*)``(.*)''(.*)", "%s\"%s\"%s"),
 103     # headings and title page entries
 104     (r"\\paragraph{(.*)}", "==== %s ===="),
 105     (r"\\subsubsection{(.*)}", "==== %s ===="),
 106     (r"\\subsection{(.*)}", "=== %s ==="),
 107     (r"\\section{(.*)}", "== %s =="),
 108     (r"\\chapter{(.*)}", "= Chapter %s ="),
 109     (r"\\title{(.*)}", "= %s ="),
 110     (r"\\author{(.*)}", "%s"),
 111     (r"\\date{(.*)}", "%s"),
 112     (r"\\caption{(.*)}", "(caption: %s)"),
 113    
 114     ]
 115 
 116 
 117 def apply_rewrites(line, rewrites):
 118     """apply each rewrite rule repeatedly and return the result"""
 119     for reg, format in rewrites:
 120         # keep applying each rule until it doesn't match.
 121         # compiling the reg would probably improve performance.
 122         while True:
 123             m = re.search(reg, line)
 124             if not m: break
 125             line = format % m.groups()
 126     return line
 127 
 128 
 129 def main(script, infile, outfile=None):
 130     in_stream = open(infile)
 131     if outfile:
 132         out_stream = open(outfile, 'w')
 133     else:
 134         out_stream = sys.stdout
 135 
 136     for line in in_stream:
 137         line = line.rstrip()
 138         line = apply_rewrites(line, rewrites)
 139         print >> out_stream, line
 140 
 141 if __name__ == '__main__':
 142     main(*sys.argv)

Attached Files

To refer to attachments on a page, use attachment:filename, as shown below in the list of files. Do NOT use the URL of the [get] link, since this is subject to change and can break easily.
  • [get | view] (2008-06-28 12:08:22, 8.1 KB) [[attachment:ArnicaTestSeite.htm]]
  • [get | view] (2008-05-09 17:05:26, 1.3 KB) [[attachment:AttachFile_config_patch.patch]]
  • [get | view] (2010-11-28 20:20:00, 237.6 KB) [[attachment:Bildschirmfoto.png]]
  • [get | view] (2010-03-15 23:32:08, 1.4 KB) [[attachment:DictColumns.zip]]
  • [get | view] (2012-02-05 12:57:40, 1812.4 KB) [[attachment:HelpOnArnica.zip]]
  • [get | view] (2008-07-17 19:33:36, 3264.0 KB) [[attachment:MoinMoins_GHOP_Grand_Prize_Winner.mpg]]
  • [get | view] (2009-06-22 22:46:07, 490.1 KB) [[attachment:New_street_station_to_Conservatoire_to_premier_inn.png]]
  • [get | view] (2009-06-22 22:59:17, 70.6 KB) [[attachment:New_street_station_to_Conservatoire_to_premier_inn_weg.png]]
  • [get | view] (2009-09-04 11:37:10, 3.4 KB) [[attachment:SlideShow.patch]]
  • [get | view] (2010-02-02 18:27:19, 293.8 KB) [[attachment:Solenoid_svg_edit.png]]
  • [get | view] (2009-04-13 17:51:57, 22.8 KB) [[attachment:SystemPages.png]]
  • [get | view] (2009-04-13 18:58:14, 1.4 KB) [[attachment:SystemPages.py]]
  • [get | view] (2008-10-19 04:19:34, 252.4 KB) [[attachment:TheSheep1.png]]
  • [get | view] (2008-07-28 08:12:08, 685.8 KB) [[attachment:UnderConstruction.zip]]
  • [get | view] (2008-06-28 18:54:51, 7.9 KB) [[attachment:UnifyParsersAndMacros.zip]]
  • [get | view] (2007-06-07 16:02:03, 0.3 KB) [[attachment:abc.png]]
  • [get | view] (2009-09-06 11:39:34, 10.0 KB) [[attachment:abc235.adraw]]
  • [get | view] (2008-12-22 09:09:36, 1.1 KB) [[attachment:advanced_s.patch]]
  • [get | view] (2008-09-15 07:51:42, 2.0 KB) [[attachment:align1.png]]
  • [get | view] (2008-06-24 01:17:08, 255.3 KB) [[attachment:arnica_example1.png]]
  • [get | view] (2008-06-22 19:38:31, 128.2 KB) [[attachment:arnica_example2.png]]
  • [get | view] (2008-06-22 19:38:47, 83.4 KB) [[attachment:arnica_example3.png]]
  • [get | view] (2008-06-28 12:14:10, 38.9 KB) [[attachment:arnica_example5.png]]
  • [get | view] (2009-08-31 22:33:27, 22.3 KB) [[attachment:attachfile.patch]]
  • [get | view] (2009-08-31 22:36:36, 96.8 KB) [[attachment:attachfile.png]]
  • [get | view] (2009-09-04 11:39:45, 11.7 KB) [[attachment:background_1024x768.png]]
  • [get | view] (2009-10-05 10:49:10, 7.2 KB) [[attachment:c.png]]
  • [get | view] (2010-12-15 19:05:12, 5.7 KB) [[attachment:collapsed.png]]
  • [get | view] (2010-12-15 19:11:15, 20.1 KB) [[attachment:collapsed1.png]]
  • [get | view] (2010-12-16 08:10:18, 20.2 KB) [[attachment:collapsed2.png]]
  • [get | view] (2009-08-08 10:43:37, 48.2 KB) [[attachment:coverage_2.0.txt]]
  • [get | view] (2008-05-17 11:49:27, 1.9 KB) [[attachment:dicts_change.patch]]
  • [get | view] (2010-01-10 13:11:22, 14.3 KB) [[attachment:editmoin]]
  • [get | view] (2008-11-09 19:21:14, 6.0 KB) [[attachment:example.svg]]
  • [get | view] (2009-05-12 17:17:50, 33.5 KB) [[attachment:example_swf.png]]
  • [get | view] (2008-01-15 14:29:43, 243.9 KB) [[attachment:firefox_pdf.png]]
  • [get | view] (2009-10-11 14:11:41, 61.2 KB) [[attachment:kscan_0004.png]]
  • [get | view] (2008-12-30 17:50:02, 5.1 KB) [[attachment:latex2wiki.py]]
  • [get | view] (2008-03-21 17:04:38, 1.0 KB) [[attachment:maketestwiki.patch]]
  • [get | view] (2007-02-24 11:18:51, 1.4 KB) [[attachment:minipage.py]]
  • [get | view] (2009-08-08 16:16:13, 20.1 KB) [[attachment:moin-1.9-xapian-dmilajevs.txt]]
  • [get | view] (2009-08-08 22:55:55, 60.7 KB) [[attachment:moin-1.9.txt]]
  • [get | view] (2009-08-09 22:33:56, 29.2 KB) [[attachment:moin-2.0-storage.txt]]
  • [get | view] (2008-09-26 12:49:52, 684.7 KB) [[attachment:moinapi_beispiele.zip]]
  • [get | view] (2012-02-21 21:10:00, 37.7 KB) [[attachment:moinmoin_rb.png]]
  • [get | view] (2008-05-18 10:03:02, 3.8 KB) [[attachment:my_search.py]]
  • [get | view] (2009-09-07 13:00:22, 11.9 KB) [[attachment:navibar.png]]
  • [get | view] (2009-02-03 19:36:33, 4.2 KB) [[attachment:nbsp.jpg]]
  • [get | view] (2010-10-20 17:07:23, 318.5 KB) [[attachment:night_at_N1.jpg]]
  • [get | view] (2009-08-07 07:28:05, 736.1 KB) [[attachment:output.txt]]
  • [get | view] (2010-03-09 23:12:49, 0.6 KB) [[attachment:planning.zip]]
  • [get | view] (2010-08-14 09:50:12, 556.6 KB) [[attachment:preliminary_minefield.txt]]
  • [get | view] (2010-12-16 08:41:41, 66.8 KB) [[attachment:quicklinks1.png]]
  • [get | view] (2010-12-16 08:41:58, 117.3 KB) [[attachment:quicklinks2.png]]
  • [get | view] (2010-12-18 21:21:00, 13.1 KB) [[attachment:quicklinks3.png]]
  • [get | view] (2009-08-11 22:38:30, 221.4 KB) [[attachment:search.txt]]
  • [get | view] (2008-05-18 09:46:53, 1.6 KB) [[attachment:slapd.conf]]
  • [get | view] (2010-12-02 16:34:36, 123.0 KB) [[attachment:sunset.png]]
  • [get | view] (2009-09-23 15:12:58, 111.7 KB) [[attachment:svg-edit_ie8_chromeframe.png]]
  • [get | view] (2009-08-23 22:38:40, 43.4 KB) [[attachment:svg-editor_current_css.png]]
  • [get | view] (2009-04-14 21:22:58, 1.8 KB) [[attachment:test_strings.py]]
  • [get | view] (2009-01-06 00:11:59, 1.7 KB) [[attachment:text_gedit.patch]]
  • [get | view] (2009-07-12 10:51:27, 528.3 KB) [[attachment:the_end.jpg]]
  • [get | view] (2010-12-21 20:24:32, 22.3 KB) [[attachment:toctest1.png]]
  • [get | view] (2010-12-01 07:37:26, 186.8 KB) [[attachment:transcluded_video.png]]
  • [get | view] (2010-12-01 07:29:11, 264.0 KB) [[attachment:urlproblem.png]]
  • [get | view] (2010-11-28 23:56:54, 57.2 KB) [[attachment:wanted.png]]
  • [get | view] (2008-05-18 09:45:08, 3.4 KB) [[attachment:wikiconfig_snippet.txt]]
  • [get | view] (2009-08-09 18:00:32, 3.6 KB) [[attachment:xapian.txt]]
 All files | Selected Files: delete move to page copy to page

You are not allowed to attach a file to this page.