[wiki-etch] suppression
darcs-hash:20090304160004-bd074-7e2630d385522d14ea3ad6a52ad0669b2ddc1b2e.gz
This commit is contained in:
parent
4a1c67a459
commit
aa5e8cdc52
67 changed files with 0 additions and 15442 deletions
|
@ -1,340 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
MoinMoin - "text/latex" Formatter
|
||||
|
||||
Copyright 2005 Johannes Berg <johannes@sipsolutions.net>
|
||||
Copyright (c) 2003 by João Neves <moin@silvaneves.org>
|
||||
Copyright (c) 2000, 2001, 2002 by Jürgen Hermann <jh@web.de>
|
||||
|
||||
All rights reserved, see COPYING for details.
|
||||
"""
|
||||
|
||||
# Imports
|
||||
|
||||
import sys, re, time
|
||||
from MoinMoin.formatter.base import FormatterBase
|
||||
from MoinMoin.Page import Page
|
||||
|
||||
#############################################################################
|
||||
### LaTeX Formatter
|
||||
#############################################################################
|
||||
|
||||
class Formatter(FormatterBase):
|
||||
"""
|
||||
Send text data.
|
||||
"""
|
||||
|
||||
hardspace = ' '
|
||||
|
||||
def __init__(self, request, **kw):
|
||||
apply(FormatterBase.__init__, (self, request), kw)
|
||||
self.verbatim = False
|
||||
self.itemized = False
|
||||
|
||||
def text2latex(self, text):
|
||||
"Escape special characters if not in verbatim mode"
|
||||
if self.verbatim: return text
|
||||
text = text.replace('\\', '$\\backslash$ ');
|
||||
text = text.replace('$', r'\$');
|
||||
text = text.replace(r'\$\backslash\$', r'$\backslash$')
|
||||
text = text.replace('#', '\#');
|
||||
text = text.replace('%', '\%');
|
||||
text = text.replace('^', '\^{}');
|
||||
text = text.replace('&', '\&');
|
||||
text = text.replace('_', '\_');
|
||||
text = text.replace('{', '\{');
|
||||
text = text.replace('}', '\}');
|
||||
text = text.replace('~', '\~{}');
|
||||
text = text.replace('"', '\"');
|
||||
return text
|
||||
|
||||
def write_text(self, text):
|
||||
if self.item is None:
|
||||
return text
|
||||
else:
|
||||
self.item = (self.item[0], self.item[1]+text)
|
||||
return ''
|
||||
|
||||
def startDocument(self, pagename):
|
||||
extra_preamble = ''
|
||||
preamble_page = self.request.pragma.get('latex_preamble', None)
|
||||
if preamble_page is not None:
|
||||
extra_preamble = Page(self.request, preamble_page).get_raw_body()
|
||||
extra_preamble = re.sub(re.compile('^#'), '%', extra_preamble)
|
||||
import locale
|
||||
locale.setlocale(locale.LC_ALL,('fr_FR'))
|
||||
date = time.strftime("%A %d %B %Y", time.localtime()).capitalize()
|
||||
return """\\documentclass[a4paper,10pt]{article}
|
||||
|
||||
\\usepackage[english,french]{babel}
|
||||
\\usepackage[utf8]{inputenc}
|
||||
\\usepackage{times}
|
||||
\\usepackage[T1]{fontenc}
|
||||
\\usepackage{helvet}
|
||||
\\usepackage{graphicx}
|
||||
\\usepackage{multicol}
|
||||
\\usepackage{fullpage}
|
||||
\\usepackage{fancyhdr}
|
||||
\\usepackage{hyperref}
|
||||
\\usepackage{multirow}
|
||||
\\makeatletter
|
||||
\\DeclareRobustCommand*\\textsubscript[1]{%%
|
||||
\\@textsubscript{\\selectfont#1}}
|
||||
\\def\\@textsubscript#1{%%
|
||||
{\\m@th\\ensuremath{_{\\mbox{\\fontsize\\sf@size\\z@#1}}}}}
|
||||
\\makeatother
|
||||
|
||||
%% begin extra preamble inclusion %%
|
||||
%s
|
||||
|
||||
%% end extra preamble inclusion %%
|
||||
|
||||
\\title{%s}
|
||||
|
||||
\\author{ }
|
||||
|
||||
\\date{%s}
|
||||
|
||||
\\renewcommand{\\theenumi}{\\arabic{enumi}}
|
||||
\\renewcommand{\\theenumii}{\\arabic{enumi}.\\arabic{enumii}}
|
||||
\\renewcommand{\\theenumiii}{\\arabic{enumi}.\\arabic{enumii}.\\arabic{enumiii}}
|
||||
\\renewcommand{\\theenumiv}{\\arabic{enumi}.\\arabic{enumii}.\\arabic{enumiii}.\\arabic{enumiv}}
|
||||
|
||||
\\begin{document}
|
||||
\\maketitle
|
||||
\\tableofcontents
|
||||
\\newpage
|
||||
""" % (extra_preamble, pagename, date)
|
||||
|
||||
def endDocument(self):
|
||||
return '\\end{document}\n'
|
||||
|
||||
def sysmsg(self, text, **kw):
|
||||
return self.write_text('')
|
||||
|
||||
def pagelink(self, on, pagename, text=None, **kw):
|
||||
return self.write_text('')
|
||||
|
||||
def url(self, on, url=None, css=None, **kw):
|
||||
if not on:
|
||||
return self.write_text('}')
|
||||
url = url.replace('&', '\\&')
|
||||
return self.write_text('\\href{%s}{' % url)
|
||||
|
||||
def text(self, text):
|
||||
return self.write_text(self.text2latex(text))
|
||||
|
||||
def rule(self, size=0):
|
||||
size = min(size, 10)
|
||||
ch = "---~=*+#####"[size]
|
||||
return self.write_text('\\vrule \n')
|
||||
|
||||
def strong(self, on):
|
||||
return self.write_text(['{\\bf ', '}'][not on])
|
||||
|
||||
def emphasis(self, on):
|
||||
return self.write_text(['{\\em ', '}'][not on])
|
||||
|
||||
def highlight(self, on):
|
||||
return self.write_text(['{\\tt ', '}'][not on])
|
||||
|
||||
def number_list(self, on, type=None, start=None):
|
||||
self.itemized = on
|
||||
if on:
|
||||
text = "\\begin{enumerate}"
|
||||
else:
|
||||
text = '\\end{enumerate}\n'
|
||||
return self.write_text(text)
|
||||
|
||||
def bullet_list(self, on):
|
||||
self.itemized = on
|
||||
return self.write_text(['\\begin{itemize}\n', '\n\\end{itemize}\n'][not on])
|
||||
|
||||
def listitem(self, on, **kw):
|
||||
if not self.itemized: return ''
|
||||
self._in_li = on != 0
|
||||
if on:
|
||||
return self.write_text('\\item ')
|
||||
else:
|
||||
return ''
|
||||
|
||||
def sup(self, on):
|
||||
return self.write_text(['\\textsuperscript{', '}'][not on])
|
||||
|
||||
def sub(self, on):
|
||||
return self.write_text(['\\textsubscript{', '}'][not on])
|
||||
|
||||
def code(self, on):
|
||||
return self.write_text(['{\\tt ', '}'][not on])
|
||||
|
||||
def code_area(self, on, code_id, code_type='code', show=0, start=-1, step=-1):
|
||||
res = self.preformatted(on)
|
||||
self.verbatim = False
|
||||
return self.write_text(res)
|
||||
|
||||
def code_token(self, on, tok_type):
|
||||
return self.write_text('')
|
||||
|
||||
def code_line(self, on):
|
||||
return self.write_text('\n')
|
||||
|
||||
def preformatted(self, on):
|
||||
FormatterBase.preformatted(self, on)
|
||||
self.verbatim = on
|
||||
return self.write_text(['\\begin{verbatim}\n', '\\end{verbatim}\n'][not on])
|
||||
|
||||
def smiley(self, text):
|
||||
return self.write_text(self.text2latex(text))
|
||||
|
||||
def paragraph(self, on):
|
||||
FormatterBase.paragraph(self, on)
|
||||
return self.write_text(['', '\n\n'][not on])
|
||||
|
||||
def linebreak(self, preformatted=1):
|
||||
if preformatted==1:
|
||||
return self.write_text('\n')
|
||||
else:
|
||||
return self.write_text('\\newline')
|
||||
|
||||
def heading(self, on, depth, **kw):
|
||||
if depth == 1:
|
||||
rv = (r'\section{','}')
|
||||
elif depth == 2:
|
||||
rv = ('\\subsection{','}')
|
||||
elif depth == 3:
|
||||
rv = ('\\subsubsection{','}')
|
||||
else:
|
||||
rv = (r'\paragraph{','}',)
|
||||
return self.write_text(rv[not on])
|
||||
|
||||
rows = []
|
||||
row = []
|
||||
item = None
|
||||
|
||||
def table(self, on, attrs={}):
|
||||
def count_cols(row):
|
||||
cols = 0
|
||||
for cell in row:
|
||||
if cell[0].has_key('colspan'):
|
||||
cols += int(cell[0]['colspan'][1:-1])
|
||||
else:
|
||||
cols += 1
|
||||
return cols
|
||||
|
||||
if on:
|
||||
self.rows = []
|
||||
self.item = None
|
||||
self.row = []
|
||||
return ''
|
||||
# not on:
|
||||
if self.rows == []: return ''
|
||||
cols = count_cols(self.rows[0])
|
||||
rows = len(self.rows)
|
||||
_table = [[0 for i in xrange(0,cols)] for j in xrange(0,rows)]
|
||||
_rownum = -1
|
||||
for _row in self.rows:
|
||||
_rownum += 1
|
||||
_cellnum = -1
|
||||
for _cell in _row:
|
||||
_cellnum += 1
|
||||
|
||||
while _table[_rownum][_cellnum] is None or type(_table[_rownum][_cellnum]) == type(()):
|
||||
_cellnum += 1
|
||||
|
||||
if _cell[0].get('rowspan') == '"1"':
|
||||
del _cell[0]['rowspan']
|
||||
if _cell[0].get('colspan') == '"1"':
|
||||
del _cell[0]['colspan']
|
||||
|
||||
_rowspan = int(_cell[0].get('rowspan', '"1"')[1:-1])
|
||||
_colspan = int(_cell[0].get('colspan', '"1"')[1:-1])
|
||||
|
||||
for j in xrange(0,_rowspan):
|
||||
for i in xrange(0,_colspan):
|
||||
_table[_rownum+j][_cellnum+i] = None
|
||||
_table[_rownum+j][_cellnum] = ({'colspan':'"%d"'%_colspan},None)
|
||||
_table[_rownum][_cellnum] = _cell
|
||||
|
||||
|
||||
table = '\\begin{tabular}{|%s}\n' % (cols * 'l|')
|
||||
for _row in _table:
|
||||
row = ''
|
||||
cellnum = 0
|
||||
_lines = []
|
||||
_do_line = True
|
||||
for _cell in _row:
|
||||
cellnum+=1
|
||||
if _cell == 0:
|
||||
return 'INVALID TABLE'
|
||||
if _cell is None:
|
||||
if _do_line:
|
||||
_lines += [cellnum]
|
||||
continue
|
||||
_rowspan = int(_cell[0].get('rowspan', '"1"')[1:-1])
|
||||
_colspan = int(_cell[0].get('colspan', '"1"')[1:-1])
|
||||
format = '%s'
|
||||
if not (_cell[1] is None):
|
||||
_do_line = True
|
||||
_lines += [cellnum]
|
||||
else:
|
||||
_do_line = False
|
||||
_cell = (_cell[0], u'')
|
||||
if _rowspan > 1:
|
||||
format = r'\multirow{%d}*{%%s}' % _rowspan
|
||||
if _colspan > 1:
|
||||
format = r'\multicolumn{%d}{|l|}{ %s }' % (_colspan, format)
|
||||
row += (format+' & ') % _cell[1].replace('\n',' ')
|
||||
for l in _lines:
|
||||
table += r'\cline{%d-%d}' % (l,l)
|
||||
table += row[0:-3] + '\\\\ \n'
|
||||
table += '\\hline\\end{tabular}\n\n'
|
||||
return table
|
||||
|
||||
|
||||
def table_row(self, on, attrs={}):
|
||||
if not on:
|
||||
self.rows += [self.row]
|
||||
self.row = []
|
||||
return ''
|
||||
|
||||
def table_cell(self, on, attrs={}):
|
||||
if not on:
|
||||
self.row += [self.item]
|
||||
self.item = None
|
||||
else:
|
||||
self.item = (attrs,'')
|
||||
return ''
|
||||
|
||||
def underline(self, on):
|
||||
return self.write_text(['\\underline{', '}'][not on])
|
||||
|
||||
def definition_list(self, on):
|
||||
return self.write_text(['\\begin{description}\n', '\\end{description}\n'][not on])
|
||||
|
||||
def definition_term(self, on, compact=0):
|
||||
return self.write_text(['\\item[', '] '][not on])
|
||||
|
||||
def definition_desc(self, on):
|
||||
return self.write_text('')
|
||||
|
||||
def image(self, **kw):
|
||||
# I am using alt for caption, but how to integrate the image?
|
||||
text = ''
|
||||
#if kw.has_key('alt'):
|
||||
# text += '\\begin{picture}\n'
|
||||
# text += '\\caption{%s}\n' % kw[alt]
|
||||
# text += '\\end{picture}\n'
|
||||
return self.write_text(text)
|
||||
|
||||
def johill_sidecall_emit_latex(self, code):
|
||||
# nothing else for now
|
||||
return code
|
||||
|
||||
def open(self, on, **kw):
|
||||
return ""
|
||||
def close(self, on, **kw):
|
||||
return ""
|
||||
|
||||
# suckers who call this. we can't do raw HTML, so we ignore it
|
||||
def rawHTML(self, markup):
|
||||
return ''
|
|
@ -1,348 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
MoinMoin - "text/latex" Formatter
|
||||
|
||||
Copyright 2005 Johannes Berg <johannes@sipsolutions.net>
|
||||
Copyright (c) 2003 by João Neves <moin@silvaneves.org>
|
||||
Copyright (c) 2000, 2001, 2002 by Jürgen Hermann <jh@web.de>
|
||||
|
||||
All rights reserved, see COPYING for details.
|
||||
"""
|
||||
|
||||
# Imports
|
||||
|
||||
import sys, re, time
|
||||
from MoinMoin.formatter.base import FormatterBase
|
||||
from MoinMoin.Page import Page
|
||||
|
||||
#############################################################################
|
||||
### LaTeX Formatter
|
||||
#############################################################################
|
||||
|
||||
class Formatter(FormatterBase):
|
||||
"""
|
||||
Send text data.
|
||||
"""
|
||||
|
||||
hardspace = ' '
|
||||
|
||||
def __init__(self, request, **kw):
|
||||
apply(FormatterBase.__init__, (self, request), kw)
|
||||
self.verbatim = False
|
||||
self.itemized = False
|
||||
|
||||
def text2latex(self, text):
|
||||
"Escape special characters if not in verbatim mode"
|
||||
if self.verbatim: return text
|
||||
text = text.replace('\\', '$\\backslash$ ');
|
||||
text = text.replace('$', r'\$');
|
||||
text = text.replace(r'\$\backslash\$', r'$\backslash$')
|
||||
text = text.replace('#', '\#');
|
||||
text = text.replace('%', '\%');
|
||||
text = text.replace('^', '\^{}');
|
||||
text = text.replace('&', '\&');
|
||||
text = text.replace('_', '\_');
|
||||
text = text.replace('{', '\{');
|
||||
text = text.replace('}', '\}');
|
||||
text = text.replace('~', '\~{}');
|
||||
text = text.replace('"', '\"');
|
||||
return text
|
||||
|
||||
def write_text(self, text):
|
||||
if self.item is None:
|
||||
return text
|
||||
else:
|
||||
self.item = (self.item[0], self.item[1]+text)
|
||||
return ''
|
||||
|
||||
def startDocument(self, pagename):
|
||||
extra_preamble = ''
|
||||
preamble_page = self.request.pragma.get('latex_preamble', None)
|
||||
if preamble_page is not None:
|
||||
extra_preamble = Page(self.request, preamble_page).get_raw_body()
|
||||
extra_preamble = re.sub(re.compile('^#'), '%', extra_preamble)
|
||||
import locale
|
||||
locale.setlocale(locale.LC_ALL,('fr_FR'))
|
||||
date = time.strftime("%A %d %B %Y", time.localtime()).capitalize()
|
||||
return """\\documentclass[a4paper,10pt]{article}
|
||||
|
||||
\\usepackage[english,french]{babel}
|
||||
\\usepackage[utf8]{inputenc}
|
||||
\\usepackage{times}
|
||||
\\usepackage[T1]{fontenc}
|
||||
\\usepackage{helvet}
|
||||
\\usepackage{graphicx}
|
||||
\\usepackage{multicol}
|
||||
\\usepackage{fullpage}
|
||||
\\usepackage{fancyhdr}
|
||||
\\usepackage{hyperref}
|
||||
\\usepackage{multirow}
|
||||
\\makeatletter
|
||||
\\DeclareRobustCommand*\\textsubscript[1]{%%
|
||||
\\@textsubscript{\\selectfont#1}}
|
||||
\\def\\@textsubscript#1{%%
|
||||
{\\m@th\\ensuremath{_{\\mbox{\\fontsize\\sf@size\\z@#1}}}}}
|
||||
\\makeatother
|
||||
|
||||
%% begin extra preamble inclusion %%
|
||||
%s
|
||||
|
||||
%% end extra preamble inclusion %%
|
||||
|
||||
\\title{%s}
|
||||
|
||||
\\author{ }
|
||||
|
||||
\\date{%s}
|
||||
|
||||
\\renewcommand{\\theenumi}{\\arabic{enumi}}
|
||||
\\renewcommand{\\theenumii}{\\arabic{enumi}.\\arabic{enumii}}
|
||||
\\renewcommand{\\theenumiii}{\\arabic{enumi}.\\arabic{enumii}.\\arabic{enumiii}}
|
||||
\\renewcommand{\\theenumiv}{\\arabic{enumi}.\\arabic{enumii}.\\arabic{enumiii}.\\arabic{enumiv}}
|
||||
|
||||
\\begin{document}
|
||||
\\maketitle
|
||||
\\tableofcontents
|
||||
\\newpage
|
||||
""" % (extra_preamble, pagename, date)
|
||||
|
||||
def endDocument(self):
|
||||
return '\\end{document}\n'
|
||||
|
||||
def sysmsg(self, text, **kw):
|
||||
return self.write_text('')
|
||||
|
||||
def pagelink(self, on, pagename, page=None, **kw):
|
||||
if not on:
|
||||
apply(FormatterBase.pagelink, (self, on, pagename, page), kw)
|
||||
if page is None:
|
||||
page = Page(self.request, pagename, formatter=self);
|
||||
if page.exists():
|
||||
return self.write_text('\\footnote{http://crans.org%s}' % self.text2latex(page.url(request=self.request)))
|
||||
#return self.write_text('toto:%s[%s]' % (self.request.getScriptname(),page.url(request=self.request)))
|
||||
|
||||
return ''
|
||||
|
||||
def url(self, on, url=None, css=None, **kw):
|
||||
if on:
|
||||
self.save_url=url.replace('&', '\\&')
|
||||
return ''
|
||||
return self.write_text('\\footnote{%s}' % self.save_url)
|
||||
|
||||
def text(self, text):
|
||||
return self.write_text(self.text2latex(text))
|
||||
|
||||
def rule(self, size=0):
|
||||
size = min(size, 10)
|
||||
ch = "---~=*+#####"[size]
|
||||
return self.write_text('\\vrule \n')
|
||||
|
||||
def strong(self, on):
|
||||
return self.write_text(['{\\bf ', '}'][not on])
|
||||
|
||||
def emphasis(self, on):
|
||||
return self.write_text(['{\\em ', '}'][not on])
|
||||
|
||||
def highlight(self, on):
|
||||
return self.write_text(['{\\tt ', '}'][not on])
|
||||
|
||||
def number_list(self, on, type=None, start=None):
|
||||
self.itemized = on
|
||||
if on:
|
||||
text = "\\begin{enumerate}"
|
||||
else:
|
||||
text = '\\end{enumerate}\n'
|
||||
return self.write_text(text)
|
||||
|
||||
def bullet_list(self, on):
|
||||
self.itemized = on
|
||||
return self.write_text(['\\begin{itemize}\n', '\n\\end{itemize}\n'][not on])
|
||||
|
||||
def listitem(self, on, **kw):
|
||||
if not self.itemized: return ''
|
||||
self._in_li = on != 0
|
||||
if on:
|
||||
return self.write_text('\\item ')
|
||||
else:
|
||||
return ''
|
||||
|
||||
def sup(self, on):
|
||||
return self.write_text(['\\textsuperscript{', '}'][not on])
|
||||
|
||||
def sub(self, on):
|
||||
return self.write_text(['\\textsubscript{', '}'][not on])
|
||||
|
||||
def code(self, on):
|
||||
return self.write_text(['{\\tt ', '}'][not on])
|
||||
|
||||
def code_area(self, on, code_id, code_type='code', show=0, start=-1, step=-1):
|
||||
res = self.preformatted(on)
|
||||
self.verbatim = False
|
||||
return self.write_text(res)
|
||||
|
||||
def code_token(self, on, tok_type):
|
||||
return self.write_text('')
|
||||
|
||||
def code_line(self, on):
|
||||
return self.write_text('\n')
|
||||
|
||||
def preformatted(self, on):
|
||||
FormatterBase.preformatted(self, on)
|
||||
self.verbatim = on
|
||||
return self.write_text(['\\begin{verbatim}\n', '\\end{verbatim}\n'][not on])
|
||||
|
||||
def smiley(self, text):
|
||||
return self.write_text(self.text2latex(text))
|
||||
|
||||
def paragraph(self, on):
|
||||
FormatterBase.paragraph(self, on)
|
||||
return self.write_text(['', '\n\n'][not on])
|
||||
|
||||
def linebreak(self, preformatted=1):
|
||||
if preformatted==1:
|
||||
return self.write_text('\n')
|
||||
else:
|
||||
return self.write_text('\\newline')
|
||||
|
||||
def heading(self, on, depth, **kw):
|
||||
if depth == 1:
|
||||
rv = (r'\section{','}')
|
||||
elif depth == 2:
|
||||
rv = ('\\subsection{','}')
|
||||
elif depth == 3:
|
||||
rv = ('\\subsubsection{','}')
|
||||
else:
|
||||
rv = (r'\paragraph{','}',)
|
||||
return self.write_text(rv[not on])
|
||||
|
||||
rows = []
|
||||
row = []
|
||||
item = None
|
||||
|
||||
def table(self, on, attrs={}):
|
||||
def count_cols(row):
|
||||
cols = 0
|
||||
for cell in row:
|
||||
if cell[0].has_key('colspan'):
|
||||
cols += int(cell[0]['colspan'][1:-1])
|
||||
else:
|
||||
cols += 1
|
||||
return cols
|
||||
|
||||
if on:
|
||||
self.rows = []
|
||||
self.item = None
|
||||
self.row = []
|
||||
return ''
|
||||
# not on:
|
||||
if self.rows == []: return ''
|
||||
cols = count_cols(self.rows[0])
|
||||
rows = len(self.rows)
|
||||
_table = [[0 for i in xrange(0,cols)] for j in xrange(0,rows)]
|
||||
_rownum = -1
|
||||
for _row in self.rows:
|
||||
_rownum += 1
|
||||
_cellnum = -1
|
||||
for _cell in _row:
|
||||
_cellnum += 1
|
||||
|
||||
while _table[_rownum][_cellnum] is None or type(_table[_rownum][_cellnum]) == type(()):
|
||||
_cellnum += 1
|
||||
|
||||
if _cell[0].get('rowspan') == '"1"':
|
||||
del _cell[0]['rowspan']
|
||||
if _cell[0].get('colspan') == '"1"':
|
||||
del _cell[0]['colspan']
|
||||
|
||||
_rowspan = int(_cell[0].get('rowspan', '"1"')[1:-1])
|
||||
_colspan = int(_cell[0].get('colspan', '"1"')[1:-1])
|
||||
|
||||
for j in xrange(0,_rowspan):
|
||||
for i in xrange(0,_colspan):
|
||||
_table[_rownum+j][_cellnum+i] = None
|
||||
_table[_rownum+j][_cellnum] = ({'colspan':'"%d"'%_colspan},None)
|
||||
_table[_rownum][_cellnum] = _cell
|
||||
|
||||
|
||||
table = '\\begin{tabular}{|%s}\n' % (cols * 'l|')
|
||||
for _row in _table:
|
||||
row = ''
|
||||
cellnum = 0
|
||||
_lines = []
|
||||
_do_line = True
|
||||
for _cell in _row:
|
||||
cellnum+=1
|
||||
if _cell == 0:
|
||||
return 'INVALID TABLE'
|
||||
if _cell is None:
|
||||
if _do_line:
|
||||
_lines += [cellnum]
|
||||
continue
|
||||
_rowspan = int(_cell[0].get('rowspan', '"1"')[1:-1])
|
||||
_colspan = int(_cell[0].get('colspan', '"1"')[1:-1])
|
||||
format = '%s'
|
||||
if not (_cell[1] is None):
|
||||
_do_line = True
|
||||
_lines += [cellnum]
|
||||
else:
|
||||
_do_line = False
|
||||
_cell = (_cell[0], u'')
|
||||
if _rowspan > 1:
|
||||
format = r'\multirow{%d}*{%%s}' % _rowspan
|
||||
if _colspan > 1:
|
||||
format = r'\multicolumn{%d}{|l|}{ %s }' % (_colspan, format)
|
||||
row += (format+' & ') % _cell[1].replace('\n',' ')
|
||||
for l in _lines:
|
||||
table += r'\cline{%d-%d}' % (l,l)
|
||||
table += row[0:-3] + '\\\\ \n'
|
||||
table += '\\hline\\end{tabular}\n\n'
|
||||
return table
|
||||
|
||||
|
||||
def table_row(self, on, attrs={}):
|
||||
if not on:
|
||||
self.rows += [self.row]
|
||||
self.row = []
|
||||
return ''
|
||||
|
||||
def table_cell(self, on, attrs={}):
|
||||
if not on:
|
||||
self.row += [self.item]
|
||||
self.item = None
|
||||
else:
|
||||
self.item = (attrs,'')
|
||||
return ''
|
||||
|
||||
def underline(self, on):
|
||||
return self.write_text(['\\underline{', '}'][not on])
|
||||
|
||||
def definition_list(self, on):
|
||||
return self.write_text(['\\begin{description}\n', '\\end{description}\n'][not on])
|
||||
|
||||
def definition_term(self, on, compact=0):
|
||||
return self.write_text(['\\item[', '] '][not on])
|
||||
|
||||
def definition_desc(self, on):
|
||||
return self.write_text('')
|
||||
|
||||
def image(self, **kw):
|
||||
# I am using alt for caption, but how to integrate the image?
|
||||
text = ''
|
||||
#if kw.has_key('alt'):
|
||||
# text += '\\begin{picture}\n'
|
||||
# text += '\\caption{%s}\n' % kw[alt]
|
||||
# text += '\\end{picture}\n'
|
||||
return self.write_text(text)
|
||||
|
||||
def johill_sidecall_emit_latex(self, code):
|
||||
# nothing else for now
|
||||
return code
|
||||
|
||||
def open(self, on, **kw):
|
||||
return ""
|
||||
def close(self, on, **kw):
|
||||
return ""
|
||||
|
||||
# suckers who call this. we can't do raw HTML, so we ignore it
|
||||
def rawHTML(self, markup):
|
||||
return ''
|
|
@ -1,254 +0,0 @@
|
|||
# -*- coding: iso-8859-1 -*-
|
||||
"""
|
||||
MoinMoin - "text/plain" Formatter
|
||||
|
||||
@copyright: 2000, 2001, 2002 by Jürgen Hermann <jh@web.de>
|
||||
@copyright: 2006 by Stéphane Glondu <glondu@crans.org>
|
||||
@license: GNU GPL, see COPYING for details.
|
||||
"""
|
||||
|
||||
from MoinMoin.formatter.base import FormatterBase
|
||||
|
||||
class Formatter(FormatterBase):
|
||||
"""
|
||||
Send plain text data.
|
||||
"""
|
||||
|
||||
hardspace = u' '
|
||||
|
||||
def __init__(self, request, **kw):
|
||||
apply(FormatterBase.__init__, (self, request), kw)
|
||||
self._in_code_area = 0
|
||||
self._in_code_line = 0
|
||||
self._code_area_state = [0, -1, -1, 0]
|
||||
self._nested_lists = []
|
||||
self._did_para = False
|
||||
self._url = None
|
||||
self._text = None # XXX does not work with links in headings!!!!!
|
||||
|
||||
def startDocument(self, pagename):
|
||||
line = u"*" * (len(pagename)+2) + u'\n'
|
||||
self._did_para = True
|
||||
return u"%s %s \n%s\n" % (line, pagename, line)
|
||||
|
||||
def endDocument(self):
|
||||
return u'\n'
|
||||
|
||||
def sysmsg(self, on, **kw):
|
||||
return (u'\n\n*** ', u' ***\n\n')[not on]
|
||||
|
||||
def pagelink(self, on, pagename='', page=None, **kw):
|
||||
apply(FormatterBase.pagelink, (self, on, pagename, page), kw)
|
||||
return (u">>", u"<<") [not on]
|
||||
|
||||
def interwikilink(self, on, interwiki='', pagename='', **kw):
|
||||
if on:
|
||||
self._url = u"%s:%s" % (interwiki, pagename)
|
||||
self._text = []
|
||||
return u''
|
||||
else:
|
||||
if "".join(self._text) == self._url:
|
||||
res = u''
|
||||
else:
|
||||
res = u' [lien wiki]'
|
||||
self._url = None
|
||||
self._text = None
|
||||
return res
|
||||
|
||||
def url(self, on, url='', css=None, **kw):
|
||||
if on:
|
||||
self._url = url
|
||||
self._text = []
|
||||
return u''
|
||||
else:
|
||||
if "".join(self._text) == self._url:
|
||||
res = u''
|
||||
else:
|
||||
res = u' [cf wiki]'
|
||||
self._url = None
|
||||
self._text = None
|
||||
return res
|
||||
|
||||
def text(self, text):
|
||||
self._did_para = False
|
||||
if self._text is not None:
|
||||
self._text.append(text)
|
||||
return text
|
||||
|
||||
def rule(self, size=0):
|
||||
size = min(size, 10)
|
||||
ch = u"---~=*+#####"[size]
|
||||
return (ch * 79) + u'\n'
|
||||
|
||||
def strong(self, on):
|
||||
return u'*'
|
||||
|
||||
def emphasis(self, on):
|
||||
return u'/'
|
||||
|
||||
def highlight(self, on):
|
||||
return u''
|
||||
|
||||
def _list(self, on, bullet):
|
||||
if on:
|
||||
self._nested_lists.append(bullet)
|
||||
if self._did_para:
|
||||
self._did_para = False
|
||||
return u''
|
||||
else:
|
||||
return u'\n'
|
||||
else:
|
||||
self._nested_lists.pop()
|
||||
if self._did_para:
|
||||
return u''
|
||||
else:
|
||||
self._did_para = True
|
||||
return u'\n'
|
||||
|
||||
def number_list(self, on, type=None, start=None):
|
||||
return self._list(on, 1)
|
||||
|
||||
def bullet_list(self, on):
|
||||
return self._list(on, 0)
|
||||
|
||||
def listitem(self, on, **kw):
|
||||
if on:
|
||||
self._did_para = False
|
||||
if self._nested_lists:
|
||||
number = self._nested_lists[-1]
|
||||
if number:
|
||||
bullet = u'%d. ' % number
|
||||
self._nested_lists[-1] = number + 1
|
||||
else:
|
||||
bullet = u'-'
|
||||
return u' %s%s' % (u' ' * (len(self._nested_lists)-1), bullet)
|
||||
else:
|
||||
return u' - '
|
||||
else:
|
||||
if self._did_para:
|
||||
return u''
|
||||
else:
|
||||
self._did_para = True
|
||||
return u'\n'
|
||||
|
||||
def sup(self, on):
|
||||
return u'^'
|
||||
|
||||
def sub(self, on):
|
||||
return u'_'
|
||||
|
||||
def code(self, on):
|
||||
#return [unichr(0x60), unichr(0xb4)][not on]
|
||||
return u"'" # avoid high-ascii
|
||||
|
||||
def preformatted(self, on):
|
||||
FormatterBase.preformatted(self, on)
|
||||
snip = u'---%<'
|
||||
snip = snip + (u'-' * (78 - len(snip)))
|
||||
if on:
|
||||
return u'\n' + snip + u'\n'
|
||||
else:
|
||||
return snip + u'\n'
|
||||
|
||||
def small(self, on):
|
||||
return u''
|
||||
|
||||
def big(self, on):
|
||||
return u''
|
||||
|
||||
def code_area(self, on, code_id, code_type='code', show=0, start=-1, step=-1):
|
||||
snip = u'---CodeArea'
|
||||
snip = snip + (u'-' * (78 - len(snip)))
|
||||
if on:
|
||||
self._in_code_area = 1
|
||||
self._in_code_line = 0
|
||||
self._code_area_state = [show, start, step, start]
|
||||
return u'\n' + snip + u'\n'
|
||||
else:
|
||||
if self._in_code_line:
|
||||
return self.code_line(0) + snip + u'\n'
|
||||
return snip + u'\n'
|
||||
|
||||
def code_line(self, on):
|
||||
res = u''
|
||||
if not on or (on and self._in_code_line):
|
||||
res += u'\n'
|
||||
if on:
|
||||
if self._code_area_state[0]>0:
|
||||
res += u' %4d ' % ( self._code_area_state[3] )
|
||||
self._code_area_state[3] += self._code_area_state[2]
|
||||
self._in_code_line = on != 0
|
||||
return res
|
||||
|
||||
def code_token(self, on, tok_type):
|
||||
return ""
|
||||
|
||||
def paragraph(self, on):
|
||||
FormatterBase.paragraph(self, on)
|
||||
if on:
|
||||
self._did_para = False
|
||||
return u''
|
||||
else:
|
||||
if self._did_para or self._nested_lists:
|
||||
self._did_para = True
|
||||
return u'\n'
|
||||
else:
|
||||
self._did_para = True
|
||||
return u'\n\n'
|
||||
|
||||
def linebreak(self, preformatted=1):
|
||||
self._did_para = True
|
||||
return u'\n'
|
||||
|
||||
def smiley(self, text):
|
||||
return text
|
||||
|
||||
def heading(self, on, depth, **kw):
|
||||
if on:
|
||||
self._text = []
|
||||
return '\n\n'
|
||||
else:
|
||||
result = u'\n%s\n\n' % (u'=' * len("".join(self._text)))
|
||||
self._text = None
|
||||
return result
|
||||
|
||||
def table(self, on, attrs={}):
|
||||
return u''
|
||||
|
||||
def table_row(self, on, attrs={}):
|
||||
return u''
|
||||
|
||||
def table_cell(self, on, attrs={}):
|
||||
return u''
|
||||
|
||||
def underline(self, on):
|
||||
return u'_'
|
||||
|
||||
def definition_list(self, on):
|
||||
return u''
|
||||
|
||||
def definition_term(self, on, compact=0):
|
||||
result = u''
|
||||
if not compact: result = result + u'\n'
|
||||
if not on: result = result + u':\n'
|
||||
return result
|
||||
|
||||
def definition_desc(self, on):
|
||||
return [u' ', u'\n'][not on]
|
||||
|
||||
def image(self, **kw):
|
||||
if kw.has_key(u'alt'):
|
||||
return kw[u'alt']
|
||||
return u''
|
||||
|
||||
def lang(self, on, lang_name):
|
||||
return ''
|
||||
|
||||
def langAttr(self, lang=None):
|
||||
return {}
|
||||
|
||||
def open(self, tag, newline=False, attr=None):
|
||||
return u''
|
||||
|
||||
def close(self, tag, newline=False):
|
||||
return u''
|
Loading…
Add table
Add a link
Reference in a new issue