appy.gen: xhtml2odt: better management of 'div' tag (considered exactly like a 'p' tag).
This commit is contained in:
parent
791ee42164
commit
de8df53f42
|
@ -557,7 +557,6 @@ def onDelSession(sessionObject, container):
|
||||||
# The request comes from a guy whose session has expired.
|
# The request comes from a guy whose session has expired.
|
||||||
resp = rq.RESPONSE
|
resp = rq.RESPONSE
|
||||||
resp.expireCookie('__ac', path='/')
|
resp.expireCookie('__ac', path='/')
|
||||||
# If the request is a (secundary) Ajax request, we return an empty page.
|
|
||||||
resp.write('<center>For security reasons, your session has ' \
|
resp.write('<center>For security reasons, your session has ' \
|
||||||
'expired.</center>')
|
'expired.</center>')
|
||||||
|
|
||||||
|
|
1144
pod/test/Tests.rtf
1144
pod/test/Tests.rtf
File diff suppressed because it is too large
Load diff
|
@ -1,5 +1,5 @@
|
||||||
xhtmlInput = '''
|
xhtmlInput = '''
|
||||||
<p class="document">
|
<div class="document">
|
||||||
<p>Some <strong>bold</strong> and some <em>italic</em> text.</p>
|
<p>Some <strong>bold</strong> and some <em>italic</em> text.</p>
|
||||||
<p>A new paragraph.</p>
|
<p>A new paragraph.</p>
|
||||||
<p>A list with three items:</p>
|
<p>A list with three items:</p>
|
||||||
|
@ -9,5 +9,5 @@ xhtmlInput = '''
|
||||||
<li>the last item</li>
|
<li>the last item</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>A last paragraph.</p>
|
<p>A last paragraph.</p>
|
||||||
</p>
|
</div>
|
||||||
'''
|
'''
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
pod/test/results/xhtmlComplex7.odt
Normal file
BIN
pod/test/results/xhtmlComplex7.odt
Normal file
Binary file not shown.
|
@ -16,19 +16,19 @@ from appy.pod import *
|
||||||
|
|
||||||
# To which ODT tags do HTML tags correspond ?
|
# To which ODT tags do HTML tags correspond ?
|
||||||
HTML_2_ODT = {'h1':'h', 'h2':'h', 'h3':'h', 'h4':'h', 'h5':'h', 'h6':'h',
|
HTML_2_ODT = {'h1':'h', 'h2':'h', 'h3':'h', 'h4':'h', 'h5':'h', 'h6':'h',
|
||||||
'p':'p', 'b':'span', 'i':'span', 'strong':'span', 'strike':'span',
|
'p':'p', 'div': 'p', 'b':'span', 'i':'span', 'strong':'span',
|
||||||
'u':'span', 'em': 'span', 'sub': 'span', 'sup': 'span',
|
'strike':'span', 'u':'span', 'em': 'span', 'sub': 'span',
|
||||||
'br': 'line-break', 'div': 'span'}
|
'sup': 'span', 'br': 'line-break'}
|
||||||
DEFAULT_ODT_STYLES = {'b': 'podBold', 'strong':'podBold', 'i': 'podItalic',
|
DEFAULT_ODT_STYLES = {'b': 'podBold', 'strong':'podBold', 'i': 'podItalic',
|
||||||
'u': 'podUnderline', 'strike': 'podStrike',
|
'u': 'podUnderline', 'strike': 'podStrike',
|
||||||
'em': 'podItalic', 'sup': 'podSup', 'sub':'podSub',
|
'em': 'podItalic', 'sup': 'podSup', 'sub':'podSub',
|
||||||
'td': 'podCell', 'th': 'podHeaderCell'}
|
'td': 'podCell', 'th': 'podHeaderCell'}
|
||||||
INNER_TAGS = ('b', 'strong', 'i', 'u', 'em', 'sup', 'sub', 'span', 'div')
|
INNER_TAGS = ('b', 'strong', 'i', 'u', 'em', 'sup', 'sub', 'span')
|
||||||
TABLE_CELL_TAGS = ('td', 'th')
|
TABLE_CELL_TAGS = ('td', 'th')
|
||||||
OUTER_TAGS = TABLE_CELL_TAGS + ('li',)
|
OUTER_TAGS = TABLE_CELL_TAGS + ('li',)
|
||||||
# The following elements can't be rendered inside paragraphs
|
# The following elements can't be rendered inside paragraphs
|
||||||
NOT_INSIDE_P = XHTML_HEADINGS + XHTML_LISTS + ('table',)
|
NOT_INSIDE_P = XHTML_HEADINGS + XHTML_LISTS + ('table',)
|
||||||
NOT_INSIDE_P_OR_P = NOT_INSIDE_P + ('p',)
|
NOT_INSIDE_P_OR_P = NOT_INSIDE_P + ('p', 'div')
|
||||||
NOT_INSIDE_LIST = ('table',)
|
NOT_INSIDE_LIST = ('table',)
|
||||||
IGNORABLE_TAGS = ('meta', 'title', 'style')
|
IGNORABLE_TAGS = ('meta', 'title', 'style')
|
||||||
|
|
||||||
|
@ -37,7 +37,8 @@ class HtmlElement:
|
||||||
'''Every time an HTML element is encountered during the SAX parsing,
|
'''Every time an HTML element is encountered during the SAX parsing,
|
||||||
an instance of this class is pushed on the stack of currently parsed
|
an instance of this class is pushed on the stack of currently parsed
|
||||||
elements.'''
|
elements.'''
|
||||||
elemTypes = {'p':'para', 'li':'para','ol':'list','ul':'list'}
|
elemTypes = {'p':'para', 'div':'para', 'li':'para', 'ol':'list',
|
||||||
|
'ul':'list'}
|
||||||
def __init__(self, elem, attrs):
|
def __init__(self, elem, attrs):
|
||||||
self.elem = elem
|
self.elem = elem
|
||||||
# Keep "class" attribute (useful for finding the corresponding ODT
|
# Keep "class" attribute (useful for finding the corresponding ODT
|
||||||
|
@ -219,16 +220,6 @@ class XhtmlEnvironment(XmlEnvironment):
|
||||||
self.currentElements = [] # Stack of currently walked elements
|
self.currentElements = [] # Stack of currently walked elements
|
||||||
self.currentLists = [] # Stack of currently walked lists (ul or ol)
|
self.currentLists = [] # Stack of currently walked lists (ul or ol)
|
||||||
self.currentTables = [] # Stack of currently walked tables
|
self.currentTables = [] # Stack of currently walked tables
|
||||||
self.creatingRootParagraph = False
|
|
||||||
# Within the XHTML chunk given to this parser, there may be some
|
|
||||||
# content that is not enclosed within any tag (at "root" level). When I
|
|
||||||
# encounter such content, I will include it into a root paragraph with
|
|
||||||
# default style. This content may include sub-tags of course (span,
|
|
||||||
# div, img, a...) or may already be dumped entirely if I encounter
|
|
||||||
# "paragraph-style" sub-tags (h1, h2, p...). self.creatingRootParagraph
|
|
||||||
# tells me if I am still in a root paragraph. So when I encounter a
|
|
||||||
# "root" content I know if I must reopen a new paragraph or not, for
|
|
||||||
# example.
|
|
||||||
self.textNs = ns[OdfEnvironment.NS_TEXT]
|
self.textNs = ns[OdfEnvironment.NS_TEXT]
|
||||||
self.linkNs = ns[OdfEnvironment.NS_XLINK]
|
self.linkNs = ns[OdfEnvironment.NS_XLINK]
|
||||||
self.tableNs = ns[OdfEnvironment.NS_TABLE]
|
self.tableNs = ns[OdfEnvironment.NS_TABLE]
|
||||||
|
@ -467,10 +458,7 @@ class XhtmlParser(XmlParser):
|
||||||
e.res = e.res[:-len(startTag)]
|
e.res = e.res[:-len(startTag)]
|
||||||
else:
|
else:
|
||||||
# Dump the end tag. But dump some additional stuff if required.
|
# Dump the end tag. But dump some additional stuff if required.
|
||||||
if elem == 'div':
|
if elem in XHTML_LISTS:
|
||||||
# For "div" elements, we append a carriage return.
|
|
||||||
endTag = '<%s:line-break/>%s' % (e.textNs, endTag)
|
|
||||||
elif elem in XHTML_LISTS:
|
|
||||||
if len(e.currentLists) >= 1:
|
if len(e.currentLists) >= 1:
|
||||||
# We were in an inner list. So we must close the list-item
|
# We were in an inner list. So we must close the list-item
|
||||||
# tag that surrounds it.
|
# tag that surrounds it.
|
||||||
|
|
Loading…
Reference in a new issue