Skip to content

Commit 082f4d4

Browse files
committed
feature-format-matrix - use single document for any one feature
1 parent 3da4b18 commit 082f4d4

File tree

29 files changed

+82
-276
lines changed

29 files changed

+82
-276
lines changed

dev-docs/feature-format-matrix/_tabulator.qmd

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ var table = new Tabulator("#features-formats-table", {
2929
{title:"PDF", field: "pdf", formatter: "html"},
3030
{title:"Typst", field: "typst", formatter: "html"},
3131
{title:"Docx", field: "docx", formatter: "html"},
32-
{title:"Docusaurus", field: "docusaurus", formatter: "html"},
32+
{title:"Docusaurus", field: "docusaurus-md", formatter: "html"},
3333
{title:"RevealJS", field: "revealjs", formatter: "html"},
3434
{title:"Pptx", field: "pptx", formatter: "html"},
3535
{title:"Beamer", field: "beamer", formatter: "html"},
+32-79
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import yaml
22
import json
3-
import base64
3+
import glob
44

55
class Trie:
66

@@ -24,7 +24,7 @@ def json(self):
2424
def tabulator_leaf(self):
2525
result = {}
2626
for v in self.values:
27-
result[v["format"]] = v["file"]
27+
result[v["format"]] = v["table_cell"]
2828
return result
2929

3030
def tabulator(self):
@@ -52,88 +52,41 @@ def size(self):
5252
return 1
5353
return sum([v.size() for v in self.children.values()])
5454

55-
def render_features_formats_table(filename):
56-
s = yaml.load(open(filename), Loader=yaml.SafeLoader)
57-
58-
features = Trie()
59-
for l in s:
60-
features.insert(l["feature"].split("/"), l)
61-
62-
formats = {}
63-
for l in s:
64-
formats[l["format"]] = features.depth() + len(formats) - 1
65-
66-
n_columns = features.depth() + len(formats)
6755

68-
table_cells = list(list(None for _ in range(n_columns)) for _ in range(features.size()))
69-
table_headers = list(None for _ in range(n_columns))
70-
71-
def add_spanners(node, row, col):
72-
# if node.children:
73-
# print("<<<")
74-
# print(row, col)
75-
# print(json.dumps(node.json(), indent=2))
76-
# print(">>>")
77-
for k, v in node.children.items():
78-
# print("::::", row, col)
79-
table_cells[row][col] = "<td class='spanner' rowspan='%s'><div class='inner_spanner'>%s</div></td>" % (v.size(), k)
80-
for i in range(row+1, row + v.size()):
81-
table_cells[i][col] = ""
82-
add_spanners(v, row, col + 1)
83-
row += v.size()
84-
def add_headers():
85-
for k, i in formats.items():
86-
table_headers[i] = "<th>%s</th>" % k
87-
def add_entries(node, row, col):
88-
for v in node.values:
89-
content = "[{{< fa link >}}](%s/%s.qmd)" % (v["feature"], v["format"])
90-
# content = "<a href='%s'><i class='fa-solid fa-link' aria-label='link'></i></a>" % v.get("file", "%s/%s.qmd" % (v["feature"], v["format"]))
91-
# encode as base64
92-
b64 = base64.encodebytes(content.encode("utf-8"))
93-
table_cells[row][formats[v["format"]]] = "<td><span data-qmd-base64='%s'></span></td>" % b64.decode("utf-8").strip()
94-
for _, v in node.children.items():
95-
add_entries(v, row, col + 1)
96-
row += v.size()
97-
add_spanners(features, 0, 0)
98-
add_entries(features, 0, 0)
99-
add_headers()
100-
table_headers[0] = '<th colspan="%s">↓ Features \\ Formats → </th>' % features.depth()
101-
for i in range(1, features.depth()):
102-
table_headers[i] = ""
103-
104-
def render_table():
105-
html = []
106-
html.append("```{=html}\n<table class='features-formats-table'>")
107-
html.append("<tr class='header-row'>")
108-
for h in table_headers:
109-
if h is None:
110-
html.append("<th></th>")
56+
def extract_metadata_from_file(file):
57+
with open(file, "r") as f:
58+
lines = f.readlines()
59+
start = None
60+
end = None
61+
for i, line in enumerate(lines):
62+
if line.strip() == "---":
63+
if start is None:
64+
start = i
11165
else:
112-
html.append(h)
113-
html.append("</tr>")
114-
for row in table_cells:
115-
html.append("<tr>")
116-
for d in row:
117-
if d is None:
118-
html.append("<td></td>")
119-
else:
120-
html.append(d)
121-
html.append("</tr>")
122-
html.append("</table>\n```\n")
123-
return "\n".join(html)
124-
return render_table()
125-
import glob
66+
end = i
67+
metadata = yaml.load("".join(lines[start+1:end]), Loader=yaml.SafeLoader)
68+
return metadata
69+
raise ValueError("No metadata found in file %s" % file)
70+
71+
def table_cell(entry, _feature, _format_name, _format_config):
72+
return "<a href='%s' target='_blank'><i class='fa-solid fa-link' aria-label='link'></i></a>" % entry
12673

12774
def render_features_formats_data():
12875
trie = Trie()
129-
for entry in glob.glob("qmd-files/**/*.qmd", recursive=True):
130-
feature = entry.split("/")[1:]
131-
format = feature.pop().split(".")[0]
132-
trie.insert(feature, {
133-
"feature": "/".join(feature),
134-
"format": format,
135-
"file": "<a href='%s' target='_blank'><i class='fa-solid fa-link' aria-label='link'></i></a>" % entry
136-
})
76+
for entry in glob.glob("qmd-files/**/document.qmd", recursive=True):
77+
feature = entry.split("/")[1:-1]
78+
front_matter = extract_metadata_from_file(entry)
79+
try:
80+
format = front_matter["format"]
81+
except KeyError:
82+
raise Exception("No format found in %s" % entry)
83+
for format_name, format_config in format.items():
84+
trie.insert(feature, {
85+
"feature": "/".join(feature),
86+
"format": format_name,
87+
"format_config": format_config,
88+
"table_cell": table_cell(entry, feature, format_name, format_config)
89+
})
13790
entries = trie.tabulator()
13891

13992
return "```{=html}\n<script type='text/javascript'>\nvar tableData = %s;\n</script>\n```\n" % json.dumps(entries, indent=2)

dev-docs/feature-format-matrix/index.qmd

+6
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@ format: html
44
title: Features x Formats
55
---
66

7+
<!--
8+
If you're adding a new format to the table, you need to edit
9+
the object constructor in the script tag in _tabulator.qmd,
10+
specifically the `columns` field.
11+
-->
12+
713
::: column-screen-inset
814

915
{{< include _tabulator.qmd >}}

dev-docs/feature-format-matrix/qmd-files/callout/docusaurus.qmd dev-docs/feature-format-matrix/qmd-files/callout/document.qmd

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
---
22
title: Callouts
3-
format: docusaurus-md
3+
format:
4+
docusaurus-md: {}
45
_quarto:
56
tests:
67
docusaurus-md:

dev-docs/feature-format-matrix/qmd-files/code-annotation/docusaurus.qmd dev-docs/feature-format-matrix/qmd-files/code-annotation/document.qmd

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
---
2-
format: docusaurus-md
2+
format:
3+
docusaurus-md: {}
34
code-annotations: true
45
code-line-numbers: true
56
---

dev-docs/feature-format-matrix/qmd-files/code-folding/docusaurus.qmd dev-docs/feature-format-matrix/qmd-files/code-folding/document.qmd

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
---
22
title: Code fold
33
format:
4-
docusaurus-md:
5-
code-fold: true
4+
docusaurus-md: {}
5+
code-fold: true
66
---
77

88
```{r}

dev-docs/feature-format-matrix/qmd-files/code-line-numbers/docusaurus.qmd dev-docs/feature-format-matrix/qmd-files/code-line-numbers/document.qmd

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
---
22
title: "Plot Test"
3-
format: docusaurus-md
3+
format:
4+
docusaurus-md: {}
45
code-line-numbers: true
56
knitr:
67
opts_chunk:

dev-docs/feature-format-matrix/qmd-files/crossref/block/callout/pdf.qmd dev-docs/feature-format-matrix/qmd-files/crossref/block/callout/document.qmd

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
---
2-
format: pdf
2+
format:
3+
markdown: {}
4+
html: {}
5+
pdf: {}
36
---
47

58
::: {#nte-1 .callout-note}

dev-docs/feature-format-matrix/qmd-files/crossref/block/callout/html.qmd

-11
This file was deleted.

dev-docs/feature-format-matrix/qmd-files/crossref/block/callout/markdown.qmd

-11
This file was deleted.

dev-docs/feature-format-matrix/qmd-files/crossref/custom/docusaurus.qmd

-26
This file was deleted.

dev-docs/feature-format-matrix/qmd-files/crossref/float/caption-location-bottom/docusaurus.qmd dev-docs/feature-format-matrix/qmd-files/crossref/float/caption-location-bottom/document.qmd

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
format:
3-
docusaurus-md:
4-
cap-location: bottom
3+
docusaurus-md: {}
4+
cap-location: bottom
55
---
66

77
::: {#tbl-1}

dev-docs/feature-format-matrix/qmd-files/crossref/float/caption-location-top/docusaurus.qmd dev-docs/feature-format-matrix/qmd-files/crossref/float/caption-location-top/document.qmd

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
format:
3-
docusaurus-md:
4-
cap-location: top
3+
docusaurus-md: {}
4+
cap-location: top
55
---
66

77
![This is the caption](image.jpg){#fig-1}

dev-docs/feature-format-matrix/qmd-files/crossref/float/code-listing/html.qmd dev-docs/feature-format-matrix/qmd-files/crossref/float/code-listing/document.qmd

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
---
2-
format: html
2+
format:
3+
docusaurus-md: {}
4+
html: {}
5+
pdf: {}
36
---
47

58
## Crossreferenceable Code Listings

dev-docs/feature-format-matrix/qmd-files/crossref/float/code-listing/docusaurus.qmd

-11
This file was deleted.

dev-docs/feature-format-matrix/qmd-files/crossref/float/code-listing/executable/html.qmd dev-docs/feature-format-matrix/qmd-files/crossref/float/code-listing/executable/document.qmd

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
---
2-
format: html
2+
format:
3+
pdf: {}
4+
html: {}
35
---
46

57
## Crossreferenceable Code Listings from Executable Code Cells

dev-docs/feature-format-matrix/qmd-files/crossref/float/code-listing/executable/pdf.qmd

-26
This file was deleted.

dev-docs/feature-format-matrix/qmd-files/crossref/float/code-listing/pdf.qmd

-11
This file was deleted.

dev-docs/feature-format-matrix/qmd-files/crossref/float/custom/docusaurus.qmd dev-docs/feature-format-matrix/qmd-files/crossref/float/custom/document.qmd

+2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ crossref:
55
- kind: float
66
key: dia
77
reference-prefix: Diagram
8+
format:
9+
docusaurus-md: {}
810
---
911

1012
::: {#dia-1}

dev-docs/feature-format-matrix/qmd-files/crossref/float/figure/markdown.qmd dev-docs/feature-format-matrix/qmd-files/crossref/float/figure/document.qmd

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
---
2-
format: markdown
2+
format:
3+
docusaurus-md: {}
4+
docx: {}
5+
html: {}
6+
markdown: {}
7+
pdf: {}
38
---
49

510
## Crossreferenceable "Figure"s

dev-docs/feature-format-matrix/qmd-files/crossref/float/figure/docusaurus.qmd

-8
This file was deleted.

0 commit comments

Comments
 (0)