Added LineBreakHandler to resolve missing line breaks

pull/4293/head
Dan Dietz 2018-02-11 01:06:29 -04:00 zatwierdzone przez Matt Westcott
rodzic f28a4c4d2a
commit 54ad64e431
3 zmienionych plików z 47 dodań i 1 usunięć

Wyświetl plik

@ -276,6 +276,7 @@ Contributors
* Ben Weatherman
* Carlo Ascani
* Julian Gallo
* Dan Dietz
Translators
===========

Wyświetl plik

@ -215,11 +215,24 @@ class HorizontalRuleHandler(AtomicBlockEntityElementHandler):
return Entity('HORIZONTAL_RULE', 'IMMUTABLE', {})
class LineBreakHandler:
def handle_starttag(self, name, attrs, state, contentstate):
if state.current_block is None:
# ignore line breaks that exist at the top level
return
state.current_block.text += '\n'
def handle_endtag(self, name, state, contentstate):
pass
class HtmlToContentStateHandler(HTMLParser):
def __init__(self, features=()):
self.paragraph_handler = BlockElementHandler('unstyled')
self.element_handlers = HTMLRuleset({
'p': self.paragraph_handler
'p': self.paragraph_handler,
'br': LineBreakHandler(),
})
for feature in features:
rule = feature_registry.get_converter_rule('contentstate', feature)

Wyświetl plik

@ -436,6 +436,38 @@ class TestHtmlToContentState(TestCase):
}
})
def test_br_element_in_paragraph(self):
converter = ContentstateConverter(features=[])
result = json.loads(converter.from_database_format(
'''
<p>before<br/>after</p>
'''
))
self.assertContentStateEqual(result, {
'entityMap': {},
'blocks': [
{'key': '00000', 'inlineStyleRanges': [], 'entityRanges': [], 'depth': 0, 'text': 'before\nafter',
'type': 'unstyled'}
],
})
def test_br_element_between_paragraphs(self):
converter = ContentstateConverter(features=[])
result = json.loads(converter.from_database_format(
'''
<p>before</p>
<br />
<p>after</p>
'''
))
self.assertContentStateEqual(result, {
'entityMap': {},
'blocks': [
{'key': '00000', 'inlineStyleRanges': [], 'entityRanges': [], 'depth': 0, 'text': 'before', 'type': 'unstyled'},
{'key': '00000', 'inlineStyleRanges': [], 'entityRanges': [], 'depth': 0, 'text': 'after', 'type': 'unstyled'}
],
})
def test_block_element_in_empty_paragraph(self):
converter = ContentstateConverter(features=['hr'])
result = json.loads(converter.from_database_format(