Remap document IDs.

This commit is contained in:
Sergio Martínez Portela 2023-06-20 00:09:08 +02:00
parent d6c8b9f3db
commit dee465f6af
2 changed files with 24 additions and 8 deletions

View File

@ -6,11 +6,15 @@ import os
@ops_cache.cache @ops_cache.cache
def gen(headline_id, graph): def gen(headline_id, graph, doc_to_headline_remapping):
reference_node = headline_id reference_node = headline_id
linked_from_internal = set() linked_from_internal = set()
g = copy.deepcopy(graph) g = copy.deepcopy(graph)
if 'id:' + reference_node in doc_to_headline_remapping:
reference_node = doc_to_headline_remapping['id:' + reference_node].split(':', 1)[1]
centered_graph = { reference_node: g[reference_node] } centered_graph = { reference_node: g[reference_node] }
for l in g[reference_node]['links']: for l in g[reference_node]['links']:
lt = l['target'] lt = l['target']
@ -28,6 +32,9 @@ def gen(headline_id, graph):
new_nodes = False new_nodes = False
removed = set() removed = set()
for k, v in g.items(): for k, v in g.items():
if 'id:' + k in doc_to_headline_remapping:
k = doc_to_headline_remapping['id:' + k].split(':', 1)[1]
for link in v["links"]: for link in v["links"]:
if link["target"].startswith("id:"): if link["target"].startswith("id:"):
link["target"] = link["target"][3:] link["target"] = link["target"][3:]
@ -68,6 +75,9 @@ def gen(headline_id, graph):
# One more round for the rest, not requiring "in" # One more round for the rest, not requiring "in"
for k, v in g.items(): for k, v in g.items():
if 'id:' + k in doc_to_headline_remapping:
k = doc_to_headline_remapping['id:' + k].split(':', 1)[1]
backlinked = False backlinked = False
for link in v["links"]: for link in v["links"]:
if link["target"].startswith("id:"): if link["target"].startswith("id:"):

View File

@ -310,6 +310,7 @@ def regen_all(src_top, dest_top, *, docs=None, db=None):
endpath = os.path.join(dest_top, main_headline.doc.id + ".node.html") endpath = os.path.join(dest_top, main_headline.doc.id + ".node.html")
with open(endpath, "wt") as f: with open(endpath, "wt") as f:
f.write(render_as_document(main_headline, main_headline.doc, headlineLevel=0, graph=full_graph_info, f.write(render_as_document(main_headline, main_headline.doc, headlineLevel=0, graph=full_graph_info,
doc_to_headline_remapping=doc_to_headline_remapping,
title=org_rw.token_list_to_plaintext(main_headline.title.contents))) title=org_rw.token_list_to_plaintext(main_headline.title.contents)))
# Render all headlines # Render all headlines
@ -319,6 +320,7 @@ def regen_all(src_top, dest_top, *, docs=None, db=None):
# Render HTML # Render HTML
with open(endpath, "wt") as f: with open(endpath, "wt") as f:
f.write(render_as_document(headline, headline.doc, headlineLevel=0, graph=full_graph_info, f.write(render_as_document(headline, headline.doc, headlineLevel=0, graph=full_graph_info,
doc_to_headline_remapping=doc_to_headline_remapping,
title=org_rw.token_list_to_plaintext(headline.title.contents))) title=org_rw.token_list_to_plaintext(headline.title.contents)))
files_generated += 1 files_generated += 1
@ -326,6 +328,7 @@ def regen_all(src_top, dest_top, *, docs=None, db=None):
index_endpath = os.path.join(dest_top, "index.html") index_endpath = os.path.join(dest_top, "index.html")
with open(index_endpath, "wt") as f: with open(index_endpath, "wt") as f:
f.write(render_as_document(headline, headline.doc, headlineLevel=0, graph=full_graph_info, f.write(render_as_document(headline, headline.doc, headlineLevel=0, graph=full_graph_info,
doc_to_headline_remapping=doc_to_headline_remapping,
title=org_rw.token_list_to_plaintext(headline.title.contents))) title=org_rw.token_list_to_plaintext(headline.title.contents)))
files_generated += 1 files_generated += 1
@ -653,7 +656,7 @@ def render_inline(tree, f, headline, graph):
return ''.join(acc) return ''.join(acc)
def render_as_document(headline, doc, headlineLevel, graph, title): def render_as_document(headline, doc, headlineLevel, graph, title, doc_to_headline_remapping):
if isinstance(headline.parent, org_rw.Headline): if isinstance(headline.parent, org_rw.Headline):
topLevelHeadline = headline.parent topLevelHeadline = headline.parent
while isinstance(topLevelHeadline.parent, org_rw.Headline): while isinstance(topLevelHeadline.parent, org_rw.Headline):
@ -676,7 +679,9 @@ def render_as_document(headline, doc, headlineLevel, graph, title):
</html> </html>
""" """
else: else:
return as_document(render(headline, doc, graph=graph, headlineLevel=headlineLevel), title, render_toc(doc)) return as_document(render(headline, doc, graph=graph, headlineLevel=headlineLevel,
doc_to_headline_remapping=doc_to_headline_remapping),
title, render_toc(doc))
def render_toc(doc): def render_toc(doc):
acc = ['<ul class="toc">'] acc = ['<ul class="toc">']
@ -704,15 +709,15 @@ def render_toc_headline(headline, acc):
def render_connections(headline_id, content, graph): def render_connections(headline_id, content, graph, doc_to_headline_remapping):
# if headline_id != 'aa29be89-70e7-4465-91ed-361cf0ce62f2': # if headline_id != 'aa29be89-70e7-4465-91ed-361cf0ce62f2':
# return # return
logging.info("Generating centered graph for {}".format(headline_id)) logging.info("Generating centered graph for {}".format(headline_id))
svg = gen_centered_graph.gen(headline_id, graph['nodes']) svg = gen_centered_graph.gen(headline_id, graph['nodes'], doc_to_headline_remapping)
content.append("<div class='connections'>{}</div>".format(svg)) content.append("<div class='connections'>{}</div>".format(svg))
def render(headline, doc, graph, headlineLevel): def render(headline, doc, graph, headlineLevel, doc_to_headline_remapping):
try: try:
dom = headline.as_dom() dom = headline.as_dom()
except: except:
@ -723,10 +728,11 @@ def render(headline, doc, graph, headlineLevel):
content = [] content = []
render_tree(dom, content, headline, graph) render_tree(dom, content, headline, graph)
if headline.id and headlineLevel == 0: if headline.id and headlineLevel == 0:
render_connections(headline.id, content, graph) render_connections(headline.id, content, graph, doc_to_headline_remapping=doc_to_headline_remapping)
for child in headline.children: for child in headline.children:
content.append(render(child, doc, headlineLevel=headlineLevel+1, graph=graph)) content.append(render(child, doc, headlineLevel=headlineLevel+1, graph=graph,
doc_to_headline_remapping=doc_to_headline_remapping))
if headline.state is None: if headline.state is None:
state = "" state = ""