1 """
   2     MoinMoin - "application/latex" Formatter
   3 
   4     Copyright (c) 2003 by João Neves <moin@silvaneves.org>
   5     Copyright (c) 2000, 2001, 2002 by Jürgen Hermann <jh@web.de>
   6     All rights reserved, see COPYING for details.
   7 
   8     $Id$
   9 """
  10 
  11 # Imports
  12 import sys
  13 from MoinMoin.formatter.base import FormatterBase
  14 from string import replace
  15 
  16 
  17 #############################################################################
  18 ### Plain Text Formatter
  19 #############################################################################
  20 
  21 class Formatter(FormatterBase):
  22     """
  23         Send text data.
  24     """
  25 
  26     hardspace = ' '
  27 
  28     def __init__(self, request, **kw):
  29         apply(FormatterBase.__init__, (self, request), kw)
  30 
  31     def text2latex(self, text):
  32         "Escape special characters."
  33         text = replace(text, '#', '\#');
  34         text = replace(text, '$', '\$');
  35         text = replace(text, '%', '\%');
  36         text = replace(text, '^', '\^{}');
  37         text = replace(text, '&', '\&');
  38         text = replace(text, '_', '\_');
  39         text = replace(text, '{', '\{');
  40         text = replace(text, '}', '\}');
  41         text = replace(text, '~', '\~{}');
  42         return text
  43 
  44     def startDocument(self, pagename):
  45         #line = "*" * (len(pagename)+2) + '\n'
  46         #return "%s %s \n%s" % (line, pagename, line)
  47         return """
  48 \\documentclass[portuguese,a4paper,12pt]{article}
  49 
  50 \\usepackage{babel}
  51 \\usepackage[latin9]{inputenc}
  52 \\usepackage{helvet}
  53 \\usepackage{graphicx}
  54 \\usepackage{multicol}
  55 \\usepackage{fullpage}
  56 \\usepackage{fancyhdr}
  57 \\usepackage{url}
  58 
  59 \\title{%s}
  60 
  61 \\author{ }
  62 
  63 \\date{ }
  64 
  65 \\renewcommand{\\theenumi}{\\arabic{enumi}}
  66 \\renewcommand{\\theenumii}{\\arabic{enumi}.\\arabic{enumii}}
  67 \\renewcommand{\\theenumiii}{\\arabic{enumi}.\\arabic{enumii}.\\arabic{enumiii}}
  68 \\renewcommand{\\theenumiv}{\\arabic{enumi}.\\arabic{enumii}.\\arabic{enumiii}.\\arabic{enumiv}}
  69 
  70 \\begin{document}
  71         """ % pagename
  72 
  73     def endDocument(self):
  74         return '\\end{document}\n'
  75 
  76     def sysmsg(self, text, **kw):
  77         #return '\n\n*** %s ***\n\n' % text
  78         return ''
  79 
  80     def pagelink(self, pagename, text=None, **kw):
  81         apply(FormatterBase.pagelink, (self, pagename, text), kw)
  82         return "%s" % (pagename,)
  83 
  84     def url(self, url, text=None, css=None, **kw):
  85         if text is None:
  86             return url
  87         else:
  88             url = replace(url, '\&', '&')
  89             return '%s (\url{%s})' % (text, url)
  90 
  91     def text(self, text):
  92         return self.text2latex(text)
  93 
  94     def rule(self, size=0):
  95         size = min(size, 10)
  96         ch = "---~=*+#####"[size]
  97         return '\\vrule \n'
  98 
  99     def strong(self, on):
 100         return ['{\\bf ', '}'][not on]
 101 
 102     def emphasis(self, on):
 103         return ['{\\em ', '}'][not on]
 104 
 105     def highlight(self, on):
 106         return ['{\\tt ', '}'][not on]
 107 
 108     def number_list(self, on, type=None, start=None):
 109         if on:
 110             text = "\\begin{enumerate}"
 111         else:
 112             text = '\\end{enumerate}\n'
 113         return text
 114 
 115     def bullet_list(self, on):
 116         return ['\\begin{itemize}\n', '\n\\end{itemize}\n'][not on]
 117 
 118     def listitem(self, on, **kw):
 119         self._in_li = on != 0
 120         if on:
 121             return '\\item '
 122         else:
 123             return ''
 124 
 125     def sup(self, on):
 126         return ['\\textsuperscript{', '}'][not on]
 127 
 128     def sub(self, on):
 129         return ['\\textsubscript{', '}'][not on]
 130 
 131     def code(self, on):
 132         return ['{\\tt ', '}'][not on]
 133 
 134     def preformatted(self, on):
 135         FormatterBase.preformatted(self, on)
 136         return ['\\begin{verbatim}', '\\end{verbatim}\n'][not on]
 137 
 138     def paragraph(self, on):
 139         FormatterBase.paragraph(self, on)
 140         return ['', '\n\n'][not on]
 141     
 142     def linebreak(self, preformatted=1):
 143         if preformatted==1:
 144             return '\n'
 145         else:
 146             return '\\newline'
 147     
 148     def heading(self, depth, title, **kw):
 149         if depth == 1:
 150             heading = 'section'
 151             return '\\%s{%s}' % (heading, title)
 152         elif depth == 2:
 153             heading = 'subsection'
 154             return '\n\\%s{%s}\n' % (heading, title)
 155         else:
 156             return '\n\n{\\bf %s}\n' % (title)
 157 
 158     def table(self, on, attrs={}):
 159         # !!! Need to handle issues of columns
 160         # I should need to build the table and dump the result on end
 161         return ''
 162 
 163     def table_row(self, on, attrs={}):
 164         return ''
 165 
 166     def table_cell(self, on, attrs={}):
 167         return ''
 168 
 169     def underline(self, on):
 170         return ['\\underline{', '}'][not on]
 171 
 172     def definition_list(self, on):
 173         return ['\\begin{definition}\n', '\\end{definition}\n'][not on]
 174 
 175     def definition_term(self, on, compact=0):
 176         return ['\\item[', '] '][not on]
 177 
 178     def definition_desc(self, on):
 179         return ''
 180 
 181     def image(self, **kw):
 182         # I am using alt for caption, but how to integrate the image?
 183         text = ''
 184         #if kw.has_key('alt'):
 185         #    text += '\\begin{picture}\n'
 186         #    text += '\\caption{%s}\n' % kw[alt]
 187         #    text += '\\end{picture}\n'
 188         return text
 189     

MoinMoin: formatter/application_latex.py (last edited 2007-10-29 19:22:01 by localhost)