appy.gen: xhtml2odt: better management of 'div' tag (considered exactly like a 'p' tag).
This commit is contained in:
		
							parent
							
								
									791ee42164
								
							
						
					
					
						commit
						de8df53f42
					
				
					 8 changed files with 587 additions and 590 deletions
				
			
		|  | @ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Gaetan Delannay
						Gaetan Delannay