git @ Cat's Eye Technologies Feedmark / 3a26cf6
Keep pushing renderer down, although this is not entirely pretty. Chris Pressey 3 months ago
6 changed file(s) with 39 addition(s) and 31 deletion(s). Raw diff Collapse all Expand all
77
88 import atomize
99
10 from feedmark.feeds import (
10 from ..feeds import (
1111 extract_feed_properties,
1212 extract_sections,
1313 construct_entry_url,
1414 )
15 from feedmark.formats.markdown import markdown_to_html5
15 from ..renderer import CleanMarkdownRenderer
16 from .markdown import markdown_to_html5
1617
1718
1819 def convert_section_to_entry(section, properties, markdown_links_base=None):
20 renderer = CleanMarkdownRenderer()
1921
2022 guid = properties["url"] + "/" + section.title
2123 updated = section.publication_date
2224
23 summary = atomize.Summary(markdown_to_html5(section.body), content_type="html")
25 summary = atomize.Summary(
26 markdown_to_html5(section.body_markdown(renderer)), content_type="html"
27 )
2428
2529 links = []
2630 entry_url = construct_entry_url(section)
100100 )
101101 md += "\n"
102102 md += markdownize_properties(section.properties, property_priority_order)
103 md += re.sub(r"^\n+", "", section.body)
103 md += re.sub(r"^\n+", "", section.body_markdown(renderer))
104104 md = re.sub(r"\n+$", "\n", md)
105105 md += "\n"
106106 md = re.sub(r"\n+$", "\n", md)
55 import json
66 import sys
77
8 from feedmark.loader import (
8 from .loader import (
99 read_document_from,
1010 read_refdex_from,
1111 convert_refdex_to_single_filename_refdex,
1212 )
13 from .renderer import CleanMarkdownRenderer
1314
1415
1516 def sys_main():
237238 if options.by_publication_date:
238239 from feedmark.feeds import construct_entry_url
239240
241 renderer = CleanMarkdownRenderer()
242
240243 dated_items = []
241244 for document in documents:
242245 for section in document.sections:
244247 "title": section.title,
245248 "images": section.images,
246249 "properties": section.properties,
247 "body": section.body,
250 "body": section.body_markdown(renderer),
248251 "url": construct_entry_url(section),
249252 }
250253 dated_items.append((section.publication_date, section_json))
66 import re
77
88 from marko.block import LinkRefDefs
9 from marko.element import Element
910
1011 from .formats.markdown import markdown_to_html5, markdown_to_html5_deep
1112 from .renderer import CleanMarkdownRenderer
4647 self.title = "Untitled"
4748 self.properties = OrderedDict()
4849
49 self.header_comment = []
50 self.preamble = []
50 self.header_comment: list(Element) = []
51 self.preamble: list(Element) = []
5152 self.sections: list(Section) = []
5253 self.link_ref_defs = LinkRefDefs()
5354
124125 self.document = None
125126 self.title = title
126127 self.properties = OrderedDict()
127 self._body_lines = []
128 self.body: list(Element) = []
128129 self.images = []
129130
130131 def __str__(self):
143144 else:
144145 raise NotImplementedError(kind)
145146
146 def add_to_body(self, line):
147 self._body_lines.append(line)
148
149147 def add_image(self, image_record):
150148 self.images.append(image_record)
151149
152 @property
153 def body(self):
154 return "\n".join(self._body_lines)
150 def body_markdown(self, renderer):
151 md = ""
152 for element in self.body:
153 md += renderer.render(element)
154 md += "\n"
155 md = re.sub(r"^\n+", "", md)
156 md = re.sub(r"\n+$", "\n", md)
157 return md
155158
156159 @property
157160 def publication_date(self):
176179 return re.sub(r"[\s\/\.\'-]+", "-", title)
177180
178181 def to_json_data(self, **kwargs):
182 renderer = CleanMarkdownRenderer()
183
184 body = self.body_markdown(renderer)
185 properties = self.properties
179186
180187 if kwargs.get("htmlize", False):
181 body = markdown_to_html5(self.body, link_ref_defs=kwargs["link_ref_defs"])
188 body = markdown_to_html5(body, link_ref_defs=kwargs["link_ref_defs"])
182189 properties = markdown_to_html5_deep(
183190 self.properties, link_ref_defs=kwargs["link_ref_defs"]
184191 )
185 else:
186 body = self.body
187 properties = self.properties
188192
189193 if kwargs.get("ordered", False):
190194 properties_list = []
104104 document.sections.append(section)
105105 section.document = document
106106 elif section:
107 section.add_to_body(renderer.render(child).strip())
107 section.body.append(child)
108108 else:
109109 document.preamble.append(child)
110110 elif isinstance(child, HTMLBlock) and not section:
132132 reading_images = False
133133 reading_properties = False
134134 if section:
135 text = renderer.render(child)
136 text = re.sub(r"^\n+", "", text)
137 text = re.sub(r"\n+$", "", text)
138 section.add_to_body(text)
135 section.body.append(child)
139136 else:
140137 document.preamble.append(child)
141138
354354 "sections": [
355355 {
356356 "anchor": "lo-logic-most-unintuitive-application-of-the-axiom-of-choice-mathoverflow",
357 "body": "\n",
357 "body": "",
358358 "images": [],
359359 "properties": {
360360 "url": "https://mathoverflow.net/questions/20882/most-unintuitive-application-of-the-axiom-of-choice"
363363 },
364364 {
365365 "anchor": "set-theory-set-theories-without-junk-theorems-mathoverflow",
366 "body": "\n",
366 "body": "",
367367 "images": [],
368368 "properties": {
369369 "url": "http://mathoverflow.net/questions/90820/set-theories-without-junk-theorems/90945#90945"
372372 },
373373 {
374374 "anchor": "the-origin-of-the-number-zero-history-smithsonian",
375 "body": "\n",
375 "body": "",
376376 "images": [],
377377 "properties": {
378378 "url": "https://www.smithsonianmag.com/history/origin-number-zero-180953392/"
381381 },
382382 {
383383 "anchor": "zajo-appler-apple-emulator-for-ms-dos-written-in-8088-assembly",
384 "body": "\n",
384 "body": "",
385385 "images": [],
386386 "properties": {"url": "https://github.com/zajo/appler"},
387387 "title": r"zajo/appler: Apple \]\[ emulator for MS-DOS, written in 8088 assembly",
388388 },
389389 {
390390 "anchor": "computational-complexitytheory",
391 "body": "\nThat is not a link.",
391 "body": "That is not a link.\n",
392392 "images": [],
393393 "properties": {},
394394 "title": r"Computational \[Complexity\]\(Theory\)",
439439 "sections": [
440440 {
441441 "anchor": "bubble-squeak",
442 "body": "\n\nHave you heard, [Bubble & Squeak]()?\n\n* property3: three\n* property4: four\n",
442 "body": "Have you heard, [Bubble & Squeak]()?\n\n* property3: three\n* property4: four\n",
443443 "images": [],
444444 "properties": {"property1": "one", "property2": "two"},
445445 "title": "Bubble & Squeak",
446446 },
447447 {
448448 "anchor": "filthy-rich-catflap",
449 "body": "\n\nIt seems that you have not heard.\n\n* property3: four\n",
449 "body": "It seems that you have not heard.\n\n* property3: four\n",
450450 "images": [],
451451 "properties": {"property3": "three"},
452452 "title": "Filthy Rich & Catflap",