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
12 import sys
13 from MoinMoin.formatter.base import FormatterBase
14 from string import replace
15
16
17
18
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
46
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
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
160
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
183 text = ''
184
185
186
187
188 return text
189