@amermathsoc/texml-to-html 18.0.0 → 18.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +30 -0
- package/README.md +4 -2
- package/lib/elements/abstract.js +1 -0
- package/lib/elements/app.js +2 -1
- package/lib/elements/attrib.js +2 -17
- package/lib/elements/book-meta-json.js +1 -1
- package/lib/elements/disp-formula-group.js +7 -0
- package/lib/elements/disp-quote.js +6 -3
- package/lib/elements/fig.js +7 -2
- package/lib/elements/formula.js +1 -2
- package/lib/elements/label.js +5 -49
- package/lib/elements/notes.js +1 -0
- package/lib/elements/ref-list.js +1 -1
- package/lib/elements/sec.js +4 -1
- package/lib/elements/secheading.js +3 -2
- package/lib/elements/statement.js +11 -0
- package/lib/elements/subtitle.js +1 -4
- package/lib/elements/tag.js +2 -2
- package/lib/elements/target.js +3 -6
- package/lib/elements/{subject.js → title-group.js} +3 -5
- package/lib/head.js +1 -1
- package/lib/postProcessing.js +81 -0
- package/lib/transformer.js +44 -14
- package/package.json +3 -1
- package/test/article.xml +40 -33
- package/test/book.xml +30 -7
- package/test/element-attrib.js +2 -2
- package/test/element-disp-quote.js +2 -1
- package/test/element-fig-subfig-label.js +2 -1
- package/test/element-fn.js +6 -3
- package/test/element-formula.js +63 -0
- package/test/element-front.js +2 -1
- package/test/{element-sec-app-front-matter-part-dedication-title-label.js → element-sec.js} +3 -1
- package/test/element-tag.js +5 -1
- package/test/element-tex-math.js +64 -0
- package/test/helper.js +4 -0
- package/test/postProcessing.js +45 -0
- package/test/snapshots/article--alttitle.html +121 -0
- package/test/snapshots/article--nometa.html +56 -0
- package/test/snapshots/article.html +561 -0
- package/test/snapshots/book.html +160 -0
- package/test/snapshots/texml-tests/LGR.html +104 -0
- package/test/snapshots/texml-tests/LGR.xml +82 -0
- package/test/snapshots/texml-tests/NLMnote.html +10 -0
- package/test/snapshots/texml-tests/NLMnote.xml +12 -0
- package/test/snapshots/texml-tests/OT1.html +61 -0
- package/test/snapshots/texml-tests/OT1.xml +39 -0
- package/test/snapshots/texml-tests/OT1ti.html +61 -0
- package/test/snapshots/texml-tests/OT1ti.xml +39 -0
- package/test/snapshots/texml-tests/OT1tt.html +60 -0
- package/test/snapshots/texml-tests/OT1tt.xml +38 -0
- package/test/snapshots/texml-tests/OT2.html +119 -0
- package/test/snapshots/texml-tests/OT2.xml +97 -0
- package/test/snapshots/texml-tests/OT4.html +68 -0
- package/test/snapshots/texml-tests/OT4.xml +46 -0
- package/test/snapshots/texml-tests/OT6.html +49 -0
- package/test/snapshots/texml-tests/OT6.xml +27 -0
- package/test/snapshots/texml-tests/T1.html +44 -0
- package/test/snapshots/texml-tests/T1.xml +22 -0
- package/test/snapshots/texml-tests/T4.html +48 -0
- package/test/snapshots/texml-tests/T4.xml +26 -0
- package/test/snapshots/texml-tests/T5.html +45 -0
- package/test/snapshots/texml-tests/T5.xml +23 -0
- package/test/snapshots/texml-tests/Uchar.html +9 -0
- package/test/snapshots/texml-tests/Uchar.xml +11 -0
- package/test/snapshots/texml-tests/Ucharcat.html +45 -0
- package/test/snapshots/texml-tests/Ucharcat.xml +23 -0
- package/test/snapshots/texml-tests/accent.html +54 -0
- package/test/snapshots/texml-tests/accent.xml +32 -0
- package/test/snapshots/texml-tests/algorithm.html +55 -0
- package/test/snapshots/texml-tests/algorithm.xml +35 -0
- package/test/snapshots/texml-tests/algorithmic.html +706 -0
- package/test/snapshots/texml-tests/algorithmic.xml +712 -0
- package/test/snapshots/texml-tests/algpseudocode.html +520 -0
- package/test/snapshots/texml-tests/algpseudocode.xml +538 -0
- package/test/snapshots/texml-tests/ams_measure.html +46 -0
- package/test/snapshots/texml-tests/ams_measure.xml +24 -0
- package/test/snapshots/texml-tests/amsart.html +66 -0
- package/test/snapshots/texml-tests/amsart.xml +39 -0
- package/test/snapshots/texml-tests/amscyr.html +53 -0
- package/test/snapshots/texml-tests/amscyr.xml +35 -0
- package/test/snapshots/texml-tests/amsfonts.html +41 -0
- package/test/snapshots/texml-tests/amsfonts.xml +21 -0
- package/test/snapshots/texml-tests/amsrefs.html +82 -0
- package/test/snapshots/texml-tests/amsrefs.xml +87 -0
- package/test/snapshots/texml-tests/amsthm.html +83 -0
- package/test/snapshots/texml-tests/amsthm.xml +61 -0
- package/test/snapshots/texml-tests/amsviet.html +42 -0
- package/test/snapshots/texml-tests/amsviet.xml +20 -0
- package/test/snapshots/texml-tests/appendix.html +69 -0
- package/test/snapshots/texml-tests/appendix.xml +43 -0
- package/test/snapshots/texml-tests/array.html +58 -0
- package/test/snapshots/texml-tests/array.xml +36 -0
- package/test/snapshots/texml-tests/arydshln.html +69 -0
- package/test/snapshots/texml-tests/arydshln.xml +47 -0
- package/test/snapshots/texml-tests/autoref.html +76 -0
- package/test/snapshots/texml-tests/autoref.xml +79 -0
- package/test/snapshots/texml-tests/begincsname.html +46 -0
- package/test/snapshots/texml-tests/begincsname.xml +24 -0
- package/test/snapshots/texml-tests/boldline.html +93 -0
- package/test/snapshots/texml-tests/boldline.xml +71 -0
- package/test/snapshots/texml-tests/book-app.html +22 -0
- package/test/snapshots/texml-tests/book-app.xml +26 -0
- package/test/snapshots/texml-tests/booktabs.html +7 -0
- package/test/snapshots/texml-tests/booktabs.xml +9 -0
- package/test/snapshots/texml-tests/boxes.html +54 -0
- package/test/snapshots/texml-tests/boxes.xml +32 -0
- package/test/snapshots/texml-tests/cases.html +13 -0
- package/test/snapshots/texml-tests/cases.xml +19 -0
- package/test/snapshots/texml-tests/cite.html +48 -0
- package/test/snapshots/texml-tests/cite.xml +40 -0
- package/test/snapshots/texml-tests/citesort.html +62 -0
- package/test/snapshots/texml-tests/citesort.xml +74 -0
- package/test/snapshots/texml-tests/cleveref.html +25 -0
- package/test/snapshots/texml-tests/cleveref.xml +28 -0
- package/test/snapshots/texml-tests/codes.html +7 -0
- package/test/snapshots/texml-tests/codes.xml +9 -0
- package/test/snapshots/texml-tests/colortbl.html +46 -0
- package/test/snapshots/texml-tests/colortbl.xml +24 -0
- package/test/snapshots/texml-tests/combinetoks.html +49 -0
- package/test/snapshots/texml-tests/combinetoks.xml +27 -0
- package/test/snapshots/texml-tests/constants.html +45 -0
- package/test/snapshots/texml-tests/constants.xml +23 -0
- package/test/snapshots/texml-tests/csstring.html +44 -0
- package/test/snapshots/texml-tests/csstring.xml +22 -0
- package/test/snapshots/texml-tests/detokenize.html +56 -0
- package/test/snapshots/texml-tests/detokenize.xml +34 -0
- package/test/snapshots/texml-tests/diacritics.html +41 -0
- package/test/snapshots/texml-tests/diacritics.xml +19 -0
- package/test/snapshots/texml-tests/dimexpr.html +42 -0
- package/test/snapshots/texml-tests/dimexpr.xml +20 -0
- package/test/snapshots/texml-tests/doi.html +6 -0
- package/test/snapshots/texml-tests/doi.xml +8 -0
- package/test/snapshots/texml-tests/drm.html +12 -0
- package/test/snapshots/texml-tests/drm.xml +76 -0
- package/test/snapshots/texml-tests/dz.html +25 -0
- package/test/snapshots/texml-tests/dz.xml +27 -0
- package/test/snapshots/texml-tests/edef.html +8 -0
- package/test/snapshots/texml-tests/edef.xml +10 -0
- package/test/snapshots/texml-tests/empheq.html +9 -0
- package/test/snapshots/texml-tests/empheq.xml +13 -0
- package/test/snapshots/texml-tests/enclose.html +27 -0
- package/test/snapshots/texml-tests/enclose.xml +45 -0
- package/test/snapshots/texml-tests/everyeof.html +42 -0
- package/test/snapshots/texml-tests/everyeof.xml +20 -0
- package/test/snapshots/texml-tests/expanded.html +44 -0
- package/test/snapshots/texml-tests/expanded.xml +22 -0
- package/test/snapshots/texml-tests/footnote.html +28 -0
- package/test/snapshots/texml-tests/footnote.xml +59 -0
- package/test/snapshots/texml-tests/frac.html +15 -0
- package/test/snapshots/texml-tests/frac.xml +21 -0
- package/test/snapshots/texml-tests/framebox.html +43 -0
- package/test/snapshots/texml-tests/framebox.xml +23 -0
- package/test/snapshots/texml-tests/glueexpr.html +42 -0
- package/test/snapshots/texml-tests/glueexpr.xml +20 -0
- package/test/snapshots/texml-tests/graphics.html +9 -0
- package/test/snapshots/texml-tests/graphics.xml +13 -0
- package/test/snapshots/texml-tests/gsm_l.html +35 -0
- package/test/snapshots/texml-tests/gsm_l.xml +71 -0
- package/test/snapshots/texml-tests/halign.html +78 -0
- package/test/snapshots/texml-tests/halign.xml +56 -0
- package/test/snapshots/texml-tests/hbox.html +11 -0
- package/test/snapshots/texml-tests/hbox.xml +17 -0
- package/test/snapshots/texml-tests/hello.html +38 -0
- package/test/snapshots/texml-tests/hello.xml +16 -0
- package/test/snapshots/texml-tests/hhline.html +101 -0
- package/test/snapshots/texml-tests/hhline.xml +79 -0
- package/test/snapshots/texml-tests/hline.html +40 -0
- package/test/snapshots/texml-tests/hline.xml +18 -0
- package/test/snapshots/texml-tests/href.html +6 -0
- package/test/snapshots/texml-tests/href.xml +8 -0
- package/test/snapshots/texml-tests/hyperams.html +43 -0
- package/test/snapshots/texml-tests/hyperams.xml +21 -0
- package/test/snapshots/texml-tests/hyperref.html +10 -0
- package/test/snapshots/texml-tests/hyperref.xml +12 -0
- package/test/snapshots/texml-tests/ifcondition.html +39 -0
- package/test/snapshots/texml-tests/ifcondition.xml +17 -0
- package/test/snapshots/texml-tests/ifcsname.html +40 -0
- package/test/snapshots/texml-tests/ifcsname.xml +18 -0
- package/test/snapshots/texml-tests/ifdefined.html +40 -0
- package/test/snapshots/texml-tests/ifdefined.xml +18 -0
- package/test/snapshots/texml-tests/ifdim.html +40 -0
- package/test/snapshots/texml-tests/ifdim.xml +18 -0
- package/test/snapshots/texml-tests/ifnum.html +40 -0
- package/test/snapshots/texml-tests/ifnum.xml +18 -0
- package/test/snapshots/texml-tests/ifprimitive.html +48 -0
- package/test/snapshots/texml-tests/ifprimitive.xml +26 -0
- package/test/snapshots/texml-tests/immediateassigned.html +44 -0
- package/test/snapshots/texml-tests/immediateassigned.xml +22 -0
- package/test/snapshots/texml-tests/immediateassignment.html +44 -0
- package/test/snapshots/texml-tests/immediateassignment.xml +22 -0
- package/test/snapshots/texml-tests/lastbox.html +40 -0
- package/test/snapshots/texml-tests/lastbox.xml +18 -0
- package/test/snapshots/texml-tests/lastnamedcs.html +40 -0
- package/test/snapshots/texml-tests/lastnamedcs.xml +18 -0
- package/test/snapshots/texml-tests/let.html +43 -0
- package/test/snapshots/texml-tests/let.xml +21 -0
- package/test/snapshots/texml-tests/letcharcode.html +41 -0
- package/test/snapshots/texml-tests/letcharcode.xml +19 -0
- package/test/snapshots/texml-tests/ligatures.html +69 -0
- package/test/snapshots/texml-tests/ligatures.xml +47 -0
- package/test/snapshots/texml-tests/list.html +12 -0
- package/test/snapshots/texml-tests/list.xml +14 -0
- package/test/snapshots/texml-tests/listings.html +46 -0
- package/test/snapshots/texml-tests/listings.xml +24 -0
- package/test/snapshots/texml-tests/longtable.html +61 -0
- package/test/snapshots/texml-tests/longtable.xml +39 -0
- package/test/snapshots/texml-tests/ltxcodes.html +1330 -0
- package/test/snapshots/texml-tests/ltxcodes.xml +1332 -0
- package/test/snapshots/texml-tests/ltxthm.html +6 -0
- package/test/snapshots/texml-tests/ltxthm.xml +8 -0
- package/test/snapshots/texml-tests/makecell.html +40 -0
- package/test/snapshots/texml-tests/makecell.xml +18 -0
- package/test/snapshots/texml-tests/maketitle.html +82 -0
- package/test/snapshots/texml-tests/maketitle.xml +67 -0
- package/test/snapshots/texml-tests/math.html +35 -0
- package/test/snapshots/texml-tests/math.xml +47 -0
- package/test/snapshots/texml-tests/mathscinet.html +41 -0
- package/test/snapshots/texml-tests/mathscinet.xml +19 -0
- package/test/snapshots/texml-tests/meaning.html +44 -0
- package/test/snapshots/texml-tests/meaning.xml +22 -0
- package/test/snapshots/texml-tests/metadata.html +125 -0
- package/test/snapshots/texml-tests/metadata.xml +137 -0
- package/test/snapshots/texml-tests/missingfile.html +3 -0
- package/test/snapshots/texml-tests/missingfile.xml +5 -0
- package/test/snapshots/texml-tests/muexpr.html +42 -0
- package/test/snapshots/texml-tests/muexpr.xml +20 -0
- package/test/snapshots/texml-tests/multicolumn.html +47 -0
- package/test/snapshots/texml-tests/multicolumn.xml +25 -0
- package/test/snapshots/texml-tests/multirow.html +47 -0
- package/test/snapshots/texml-tests/multirow.xml +25 -0
- package/test/snapshots/texml-tests/multirowcell.html +50 -0
- package/test/snapshots/texml-tests/multirowcell.xml +28 -0
- package/test/snapshots/texml-tests/multline.html +71 -0
- package/test/snapshots/texml-tests/multline.xml +55 -0
- package/test/snapshots/texml-tests/nameref.html +45 -0
- package/test/snapshots/texml-tests/nameref.xml +23 -0
- package/test/snapshots/texml-tests/noexpand.html +44 -0
- package/test/snapshots/texml-tests/noexpand.xml +22 -0
- package/test/snapshots/texml-tests/noindent.html +39 -0
- package/test/snapshots/texml-tests/noindent.xml +17 -0
- package/test/snapshots/texml-tests/null_cs.html +4 -0
- package/test/snapshots/texml-tests/null_cs.xml +6 -0
- package/test/snapshots/texml-tests/numexpr.html +48 -0
- package/test/snapshots/texml-tests/numexpr.xml +26 -0
- package/test/snapshots/texml-tests/parshape.html +41 -0
- package/test/snapshots/texml-tests/parshape.xml +19 -0
- package/test/snapshots/texml-tests/protected.html +47 -0
- package/test/snapshots/texml-tests/protected.xml +25 -0
- package/test/snapshots/texml-tests/quote.html +43 -0
- package/test/snapshots/texml-tests/quote.xml +21 -0
- package/test/snapshots/texml-tests/read.html +13 -0
- package/test/snapshots/texml-tests/read.xml +15 -0
- package/test/snapshots/texml-tests/refrange.html +126 -0
- package/test/snapshots/texml-tests/refrange.xml +110 -0
- package/test/snapshots/texml-tests/scantokens.html +45 -0
- package/test/snapshots/texml-tests/scantokens.xml +23 -0
- package/test/snapshots/texml-tests/secmeta.html +27 -0
- package/test/snapshots/texml-tests/secmeta.xml +39 -0
- package/test/snapshots/texml-tests/section.html +86 -0
- package/test/snapshots/texml-tests/section.xml +64 -0
- package/test/snapshots/texml-tests/showonlyrefs.html +95 -0
- package/test/snapshots/texml-tests/showonlyrefs.xml +85 -0
- package/test/snapshots/texml-tests/smash.html +41 -0
- package/test/snapshots/texml-tests/smash.xml +21 -0
- package/test/snapshots/texml-tests/strcmp.html +41 -0
- package/test/snapshots/texml-tests/strcmp.xml +19 -0
- package/test/snapshots/texml-tests/string.html +44 -0
- package/test/snapshots/texml-tests/string.xml +22 -0
- package/test/snapshots/texml-tests/sub_sup.html +50 -0
- package/test/snapshots/texml-tests/sub_sup.xml +28 -0
- package/test/snapshots/texml-tests/subcaption.html +54 -0
- package/test/snapshots/texml-tests/subcaption.xml +32 -0
- package/test/snapshots/texml-tests/subfig.html +45 -0
- package/test/snapshots/texml-tests/subfig.xml +23 -0
- package/test/snapshots/texml-tests/subfigure.html +44 -0
- package/test/snapshots/texml-tests/subfigure.xml +22 -0
- package/test/snapshots/texml-tests/tableofcontents.html +42 -0
- package/test/snapshots/texml-tests/tableofcontents.xml +95 -0
- package/test/snapshots/texml-tests/tabular.html +47 -0
- package/test/snapshots/texml-tests/tabular.xml +25 -0
- package/test/snapshots/texml-tests/tag.html +16 -0
- package/test/snapshots/texml-tests/tag.xml +20 -0
- package/test/snapshots/texml-tests/tcolorbox.html +43 -0
- package/test/snapshots/texml-tests/tcolorbox.xml +21 -0
- package/test/snapshots/texml-tests/textequation.html +55 -0
- package/test/snapshots/texml-tests/textequation.xml +33 -0
- package/test/snapshots/texml-tests/thm-restate.html +94 -0
- package/test/snapshots/texml-tests/thm-restate.xml +86 -0
- package/test/snapshots/texml-tests/tracingnodes.html +38 -0
- package/test/snapshots/texml-tests/tracingnodes.xml +16 -0
- package/test/snapshots/texml-tests/unexpanded.html +44 -0
- package/test/snapshots/texml-tests/unexpanded.xml +22 -0
- package/test/snapshots/texml-tests/unless.html +40 -0
- package/test/snapshots/texml-tests/unless.xml +18 -0
- package/test/snapshots/texml-tests/upgreek.html +79 -0
- package/test/snapshots/texml-tests/upgreek.xml +57 -0
- package/test/snapshots/texml-tests/uri.html +12 -0
- package/test/snapshots/texml-tests/uri.xml +14 -0
- package/test/snapshots/texml-tests/url.html +41 -0
- package/test/snapshots/texml-tests/url.xml +19 -0
- package/test/snapshots/texml-tests/vlist.html +48 -0
- package/test/snapshots/texml-tests/vlist.xml +28 -0
- package/test/snapshots/texml-tests/xcolor.html +50 -0
- package/test/snapshots/texml-tests/xcolor.xml +28 -0
- package/test/snapshots/updateTexmlSnapshots.js +14 -0
- package/texml-to-html.js +2 -2
- package/lib/elements/article-title.js +0 -26
- package/lib/elements/book-title.js +0 -26
- package/lib/elements/meta-name.js +0 -29
- package/lib/elements/meta-value.js +0 -27
- package/lib/elements/subj-group.js +0 -29
- package/lib/hacks.js +0 -43
- package/out.html +0 -696
- package/out2.html +0 -707
- package/test/element-inline-formula-disp-formula-tex-math.js +0 -98
- package/test/hacks.js +0 -39
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,36 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
## [18.2.0](https://github.com/AmerMathSoc/texml-to-html/compare/v18.1.0...v18.2.0) (2025-02-05)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* **attrib.js:** add data-ams-doc ([70fa67c](https://github.com/AmerMathSoc/texml-to-html/commit/70fa67ca59b92d1ff18900d430b107ceef7f2d9c)), closes [#462](https://github.com/AmerMathSoc/texml-to-html/issues/462)
|
|
11
|
+
* replace applyHacks() with fixContentModel() ([0cb4ae7](https://github.com/AmerMathSoc/texml-to-html/commit/0cb4ae7fbcdc4006b51d43b8cd0398dd4cbb2b30)), closes [#473](https://github.com/AmerMathSoc/texml-to-html/issues/473)
|
|
12
|
+
* revise tag and target in text equations ([d7244f6](https://github.com/AmerMathSoc/texml-to-html/commit/d7244f6a8212336754a112657b9e14bb9e0e20a9)), closes [#429](https://github.com/AmerMathSoc/texml-to-html/issues/429)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
* **app.js:** remove unused ternary path ([f459df1](https://github.com/AmerMathSoc/texml-to-html/commit/f459df12b6f4582138e001cb8c7ae0ddf5125ecd)), closes [#470](https://github.com/AmerMathSoc/texml-to-html/issues/470)
|
|
18
|
+
* **disp-quote.js:** remove outdated workaround ([390482a](https://github.com/AmerMathSoc/texml-to-html/commit/390482a82bd84762e3b8d1ec5191b38c50e29d02)), closes [#472](https://github.com/AmerMathSoc/texml-to-html/issues/472)
|
|
19
|
+
* **disp-quote:** footer is last child ([ee46ad7](https://github.com/AmerMathSoc/texml-to-html/commit/ee46ad7a326ac029ca03adbfe63da1d41bbc2798)), closes [#457](https://github.com/AmerMathSoc/texml-to-html/issues/457) [#463](https://github.com/AmerMathSoc/texml-to-html/issues/463)
|
|
20
|
+
* **formula.js:** remove whitespace clean-up ([6f673f4](https://github.com/AmerMathSoc/texml-to-html/commit/6f673f49e146e08b4647a12122f30ddac88f9e1b)), closes [#424](https://github.com/AmerMathSoc/texml-to-html/issues/424)
|
|
21
|
+
* **formula.js:** trim inner whitespace ([2ae7130](https://github.com/AmerMathSoc/texml-to-html/commit/2ae7130ef1d1d27f4e26a46686c7ec211936d0ec)), closes [#471](https://github.com/AmerMathSoc/texml-to-html/issues/471)
|
|
22
|
+
* remove book-title.js ([57610a8](https://github.com/AmerMathSoc/texml-to-html/commit/57610a8a86ba8e3409d78fcc0dfbe813f9d68b4d)), closes [#254](https://github.com/AmerMathSoc/texml-to-html/issues/254) [#448](https://github.com/AmerMathSoc/texml-to-html/issues/448)
|
|
23
|
+
* remove meta-name.js and meta-value.js ([2bbc8e0](https://github.com/AmerMathSoc/texml-to-html/commit/2bbc8e05b75b72d3f60968d9c891050b16935cde)), closes [#254](https://github.com/AmerMathSoc/texml-to-html/issues/254) [#448](https://github.com/AmerMathSoc/texml-to-html/issues/448)
|
|
24
|
+
* remove subject-group.js and subject.js ([9fefa46](https://github.com/AmerMathSoc/texml-to-html/commit/9fefa4616d0ebe2068e1dd0d1db56a83fae3ed8b)), closes [#254](https://github.com/AmerMathSoc/texml-to-html/issues/254) [#448](https://github.com/AmerMathSoc/texml-to-html/issues/448)
|
|
25
|
+
* revise label/title/etc handling ([804904a](https://github.com/AmerMathSoc/texml-to-html/commit/804904a4bf21878e302bc328a4bbdbee0bbe4f90)), closes [#467](https://github.com/AmerMathSoc/texml-to-html/issues/467) [#452](https://github.com/AmerMathSoc/texml-to-html/issues/452)
|
|
26
|
+
* **sec.js:** workaround nested book-app ([1ec8680](https://github.com/AmerMathSoc/texml-to-html/commit/1ec86805829838288453e8a2ff4140c11a79bc02)), closes [#460](https://github.com/AmerMathSoc/texml-to-html/issues/460)
|
|
27
|
+
|
|
28
|
+
## [18.1.0](https://github.com/AmerMathSoc/texml-to-html/compare/v18.0.0...v18.1.0) (2024-09-09)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
### Features
|
|
32
|
+
|
|
33
|
+
* **sec.js:** support style attribute ([84c7699](https://github.com/AmerMathSoc/texml-to-html/commit/84c769970c4841a696e681766a7348a8a6900b9e)), closes [#461](https://github.com/AmerMathSoc/texml-to-html/issues/461)
|
|
34
|
+
|
|
5
35
|
## [18.0.0](https://github.com/AmerMathSoc/texml-to-html/compare/v18.0.0-0...v18.0.0) (2024-08-16)
|
|
6
36
|
|
|
7
37
|
## [18.0.0-0](https://github.com/AmerMathSoc/texml-to-html/compare/v17.1.0...v18.0.0-0) (2024-08-13)
|
package/README.md
CHANGED
|
@@ -118,6 +118,7 @@ Beyond HTML element and attributes, texml-to-html stores data in custom `data-*`
|
|
|
118
118
|
- container is inside data-ams-doc="math block" elements
|
|
119
119
|
- ams-html uses these to generate the math panel DTs for equations
|
|
120
120
|
- app-group [from book-app-group]
|
|
121
|
+
- attribution [from attrib]
|
|
121
122
|
- data-ams-doc-contrib
|
|
122
123
|
- {@content-type} [expected: "authors", "editors", "translators", "contributors"]
|
|
123
124
|
- {@contrib-type} [expected: "author", "editor", "translator", "contributor"]
|
|
@@ -132,7 +133,7 @@ Beyond HTML element and attributes, texml-to-html stores data in custom `data-*`
|
|
|
132
133
|
- underline
|
|
133
134
|
- {disp-quote@specific-use}
|
|
134
135
|
- (inline-)graphic{@specific-use}
|
|
135
|
-
- {@style} [expected: theorem styles]
|
|
136
|
+
- {@style} [expected: theorem styles, sec styles]
|
|
136
137
|
- boxed (from boxed-text)
|
|
137
138
|
- data-ams-ref
|
|
138
139
|
- {@ref-type} [expected: bibr, fn, disp-formula, sec, fig, table, algorithm, list, statement]
|
|
@@ -247,10 +248,11 @@ The following provide a list from the reverse point of view.
|
|
|
247
248
|
- @notes-type => @data-ams-content-type (and role=dedication for dedications)
|
|
248
249
|
- use cases: dedication (articles), article and section notes (NOTI only), drm notice & epub note (books)
|
|
249
250
|
- toc-entry@specific-use => data-ams-ref
|
|
251
|
+
- attrib => data-ams-doc="attribution"
|
|
250
252
|
- attributes
|
|
251
253
|
- @disp-level => data-ams-doc-level [data-ams-doc-level is also added to some elements that lack disp-level]
|
|
252
254
|
- @content-type => data-ams-content-type
|
|
253
|
-
- @style => data-ams-style
|
|
255
|
+
- @style => data-ams-style [e.g., statement, sec]
|
|
254
256
|
- @specific-use => data-ams-specific-use [sometimes mapped to other attributes, e.g., style]
|
|
255
257
|
- @has-qed-box => data-ams-qed-box
|
|
256
258
|
- @position => data-ams-position
|
package/lib/elements/abstract.js
CHANGED
package/lib/elements/app.js
CHANGED
|
@@ -24,12 +24,13 @@ import mapAttributes from '../helpers/mapAttributes.js';
|
|
|
24
24
|
export default function (htmlParentNode, xmlnode) {
|
|
25
25
|
const section = this.createNode('section', '', {
|
|
26
26
|
role: 'doc-appendix',
|
|
27
|
-
'data-ams-doc-level':
|
|
27
|
+
'data-ams-doc-level': 1,
|
|
28
28
|
});
|
|
29
29
|
const titleChild = xmlnode.querySelector('title');
|
|
30
30
|
if (titleChild && titleChild.textContent.startsWith('Acknowledg'))
|
|
31
31
|
section.setAttribute('role', 'doc-acknowledgments');
|
|
32
32
|
htmlParentNode.appendChild(section);
|
|
33
33
|
mapAttributes(section, xmlnode);
|
|
34
|
+
this.createHeading(section, xmlnode);
|
|
34
35
|
this.passThrough(section, xmlnode);
|
|
35
36
|
};
|
package/lib/elements/attrib.js
CHANGED
|
@@ -20,22 +20,7 @@
|
|
|
20
20
|
* @param {Element} xmlnode
|
|
21
21
|
*/
|
|
22
22
|
export default function (htmlParentNode, xmlnode) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const footer = this.createNode('footer');
|
|
26
|
-
htmlParentNode.appendChild(footer);
|
|
27
|
-
actualParent = footer;
|
|
28
|
-
}
|
|
29
|
-
if (
|
|
30
|
-
xmlnode.parentNode.tagName === 'fig' ||
|
|
31
|
-
xmlnode.parentNode.tagName === 'fig-group'
|
|
32
|
-
) {
|
|
33
|
-
// NOTE there should be a figcaption element (cf. caption())
|
|
34
|
-
// NOTE so far this only occurs in mbk103, clrm067 to attribute graphics in figures
|
|
35
|
-
actualParent = htmlParentNode.querySelector(':scope>figcaption');
|
|
36
|
-
}
|
|
37
|
-
const span = this.createNode('span');
|
|
38
|
-
actualParent.insertAdjacentText('beforeend', ' '); // NOTE needed inside fig-caption
|
|
39
|
-
actualParent.appendChild(span);
|
|
23
|
+
const span = this.createNode('span', '', { 'data-ams-doc': 'attribution' });
|
|
24
|
+
htmlParentNode.appendChild(span);
|
|
40
25
|
this.passThrough(span, xmlnode);
|
|
41
26
|
};
|
|
@@ -115,7 +115,7 @@ export function generateBookJson(bookMetaNode) {
|
|
|
115
115
|
})
|
|
116
116
|
|
|
117
117
|
// book-title-group
|
|
118
|
-
const title = bookMetaNode.querySelector('book-title-group > book-title'); // NOTE title might contain
|
|
118
|
+
const title = bookMetaNode.querySelector('book-title-group > book-title'); // NOTE title might contain complex markup (no use case yet; however e.g. surv279 has math-as-unicode). See also head.js
|
|
119
119
|
const subtitle = bookMetaNode.querySelector('book-title-group > subtitle'); // NOTE subtitle might contain math-mode (no use case yet)
|
|
120
120
|
const alttitle = bookMetaNode.querySelector('book-title-group > alt-title') || title;
|
|
121
121
|
bookMetaJson.book.title = this.passthroughIntoHTMLString(title);
|
|
@@ -26,5 +26,12 @@ export default function (htmlParentNode, xmlnode) {
|
|
|
26
26
|
id: xmlnode.id,
|
|
27
27
|
});
|
|
28
28
|
htmlParentNode.appendChild(figure);
|
|
29
|
+
const label = xmlnode.querySelector(':scope>label');
|
|
30
|
+
if (label) {
|
|
31
|
+
const figcaption = this.createNode('figcaption');
|
|
32
|
+
figure.appendChild(figcaption);
|
|
33
|
+
this.redirectRecurseTheDom(figcaption, label);
|
|
34
|
+
}
|
|
35
|
+
|
|
29
36
|
this.passThrough(figure, xmlnode);
|
|
30
37
|
};
|
|
@@ -26,8 +26,11 @@ export default function (htmlParentNode, xmlnode) {
|
|
|
26
26
|
if (contentType === 'epigraph')
|
|
27
27
|
blockquote.setAttribute('role', 'doc-epigraph');
|
|
28
28
|
else blockquote.setAttribute('data-ams-style', specificUse);
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
htmlParentNode.appendChild(blockquote);
|
|
30
|
+
// handle attrib
|
|
31
|
+
const attrib = xmlnode.querySelector(':scope>attrib');
|
|
32
|
+
const footer = this.createNode('footer');
|
|
33
|
+
if (attrib) this.redirectRecurseTheDom(footer, attrib);
|
|
32
34
|
this.passThrough(blockquote, xmlnode);
|
|
35
|
+
if (attrib) blockquote.appendChild(footer);
|
|
33
36
|
};
|
package/lib/elements/fig.js
CHANGED
|
@@ -31,8 +31,9 @@ export default function (htmlParentNode, xmlnode) {
|
|
|
31
31
|
|
|
32
32
|
const label = xmlnode.querySelector(':scope>label');
|
|
33
33
|
const caption = xmlnode.querySelector(':scope>caption');
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
const attrib = xmlnode.querySelector(':scope>attrib');
|
|
35
|
+
|
|
36
|
+
if (label || caption || attrib) {
|
|
36
37
|
const figcaption = this.createNode('figcaption');
|
|
37
38
|
figure.appendChild(figcaption);
|
|
38
39
|
if (label) {
|
|
@@ -44,6 +45,10 @@ export default function (htmlParentNode, xmlnode) {
|
|
|
44
45
|
if (caption) {
|
|
45
46
|
this.passThrough(figcaption, caption);
|
|
46
47
|
}
|
|
48
|
+
if (attrib) {
|
|
49
|
+
figcaption.insertAdjacentText('beforeend', ' '); //NOTE figcaptioninline content
|
|
50
|
+
this.redirectRecurseTheDom(figcaption, attrib);
|
|
51
|
+
}
|
|
47
52
|
}
|
|
48
53
|
// process remaining children
|
|
49
54
|
this.passThrough(figure, xmlnode);
|
package/lib/elements/formula.js
CHANGED
|
@@ -46,7 +46,6 @@ export default function (htmlParentNode, xmlnode) {
|
|
|
46
46
|
const tagContainer = `<span hidden data-ams-doc="tags"></span>`; //NOTE we store copies of tags for easier re-use downstream (cf. tags.js) except for text equations
|
|
47
47
|
if (hasLinkedTag) span.insertAdjacentHTML('afterbegin', tagContainer)
|
|
48
48
|
this.passThrough(span, xmlnode);
|
|
49
|
-
// NOTE we (sometimes?) get extra whitespace from childnodes; needs test
|
|
50
49
|
const text = span.innerHTML;
|
|
51
|
-
span.innerHTML = text.
|
|
50
|
+
span.innerHTML = text.trim(); // NOTE: texml (sometimes) adds whitespace around the tex-math child; this causes undesired whitespace (e.g., theorem titles like `($x$)` becoming `( $x$ )`) TODO: revisit after AmerMathSoc/texml#234 is closed
|
|
52
51
|
};
|
package/lib/elements/label.js
CHANGED
|
@@ -14,58 +14,14 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import getParentLevel from '../helpers/getParentLevel.js';
|
|
18
|
-
|
|
19
17
|
/**
|
|
20
|
-
* label and title elements
|
|
18
|
+
* label and title elements, usually redirected
|
|
21
19
|
* @param {HTMLElement} htmlParentNode
|
|
22
20
|
* @param {Element} xmlnode
|
|
23
21
|
*/
|
|
24
22
|
export default function (htmlParentNode, xmlnode) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
// complex cases
|
|
31
|
-
|
|
32
|
-
// Decide container (h* or figcaption; wrapping header for subtitles)
|
|
33
|
-
const isStatement = xmlnode.parentNode.tagName === 'statement';
|
|
34
|
-
const isDispFormulaGroup = xmlnode.parentNode.tagName === 'disp-formula-group';
|
|
35
|
-
const level = getParentLevel(htmlParentNode) + 1;
|
|
36
|
-
const container = (isStatement || isDispFormulaGroup) ? this.createNode('figcaption', '') : this.createNode(`h${level}`, '');
|
|
37
|
-
htmlParentNode.appendChild(container);
|
|
38
|
-
|
|
39
|
-
// subtitle handling (assumes container is not figcaption)
|
|
40
|
-
const subtitleSibling = xmlnode.parentNode.querySelector(':scope>subtitle');
|
|
41
|
-
if (subtitleSibling && subtitleSibling.innerHTML.trim() !== '') {
|
|
42
|
-
// wrap heading in header
|
|
43
|
-
const header = this.createNode('header');
|
|
44
|
-
htmlParentNode.appendChild(header);
|
|
45
|
-
header.appendChild(container);
|
|
46
|
-
// recurse subtitle
|
|
47
|
-
this.recurseTheDom(header, subtitleSibling);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// Pull in label (if title+label and we're processing title)
|
|
51
|
-
const previousSibling = xmlnode.previousElementSibling;
|
|
52
|
-
if (previousSibling?.tagName === 'label' && previousSibling.innerHTML.trim() !== '') {
|
|
53
|
-
const labelSpan = this.createNode('span', '', { 'data-ams-doc': 'label' });
|
|
54
|
-
container.appendChild(labelSpan);
|
|
55
|
-
this.passThrough(labelSpan, previousSibling);
|
|
56
|
-
labelSpan.insertAdjacentText('afterend', ' '); // NOTE: adding (in HTML meaningful) space after label & before title to avoid them from smashing together.
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// CASE Book
|
|
60
|
-
const altTitle = xmlnode.parentNode.querySelector(':scope>alt-title');
|
|
61
|
-
const hasAltTitle = altTitle && altTitle.innerHTML !== xmlnode.innerHTML;
|
|
62
|
-
if (this.isBook && hasAltTitle) {
|
|
63
|
-
container.setAttribute('data-ams-doc-alttitle', container.textContent + altTitle.innerHTML); // NOTE assumes previousSibling handled first
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
// add main node and recurse
|
|
67
|
-
const actualSpan = this.createNode('span', '', { 'data-ams-doc': xmlnode.tagName });
|
|
68
|
-
container.appendChild(actualSpan);
|
|
69
|
-
// NOTE: no space after title/label if there's only one. Downstream might insert some (e.g., with inlined headings).
|
|
70
|
-
this.passThrough(actualSpan, xmlnode);
|
|
23
|
+
if (xmlnode.innerHTML.trim() === '') return;
|
|
24
|
+
const span = this.createNode('span', '', { 'data-ams-doc': xmlnode.tagName });
|
|
25
|
+
htmlParentNode.appendChild(span);
|
|
26
|
+
this.passThrough(span, xmlnode);
|
|
71
27
|
};
|
package/lib/elements/notes.js
CHANGED
package/lib/elements/ref-list.js
CHANGED
|
@@ -36,6 +36,7 @@ export default function (htmlParentNode, xmlnode) {
|
|
|
36
36
|
});
|
|
37
37
|
mapAttributes(section, xmlnode);
|
|
38
38
|
htmlParentNode.appendChild(section);
|
|
39
|
+
this.createHeading(section, xmlnode);
|
|
39
40
|
if (!isNestedRefList) {
|
|
40
41
|
section.setAttribute('role', 'doc-bibliography');
|
|
41
42
|
}
|
|
@@ -43,7 +44,6 @@ export default function (htmlParentNode, xmlnode) {
|
|
|
43
44
|
this.passThrough(section, xmlnode);
|
|
44
45
|
return;
|
|
45
46
|
}
|
|
46
|
-
this.recurseTheDom(section, xmlnode.querySelector('title'));
|
|
47
47
|
const dl = this.createNode('dl', '');
|
|
48
48
|
section.appendChild(dl);
|
|
49
49
|
xmlnode.querySelectorAll('ref').forEach(this.recurseTheDom.bind(null, dl));
|
package/lib/elements/sec.js
CHANGED
|
@@ -53,6 +53,8 @@ export default function (htmlParentNode, xmlnode) {
|
|
|
53
53
|
});
|
|
54
54
|
htmlParentNode.appendChild(section);
|
|
55
55
|
|
|
56
|
+
if (xmlnode.hasAttribute('style')) section.setAttribute('data-ams-style', xmlnode.getAttribute('style'));
|
|
57
|
+
|
|
56
58
|
if (specificUse === 'part') {
|
|
57
59
|
section.setAttribute('role', 'doc-part');
|
|
58
60
|
}
|
|
@@ -80,7 +82,8 @@ export default function (htmlParentNode, xmlnode) {
|
|
|
80
82
|
if (tagName === 'book-app-group') {
|
|
81
83
|
section.setAttribute('data-ams-doc', 'app-group');
|
|
82
84
|
}
|
|
83
|
-
if (tagName === 'book-app') section.setAttribute('role', 'doc-appendix');
|
|
85
|
+
if (tagName === 'book-app' && !xmlnode.parentNode.closest('book-app')) section.setAttribute('role', 'doc-appendix'); // TODO: revisit after AmerMathSoc/texml#223
|
|
84
86
|
|
|
87
|
+
this.createHeading(section, xmlnode);
|
|
85
88
|
this.passThrough(section, xmlnode);
|
|
86
89
|
};
|
|
@@ -25,16 +25,17 @@ export default function (htmlParentNode, xmlnode) {
|
|
|
25
25
|
const parentLevel = htmlParentNode.closest('[data-ams-doc-level]')?.getAttribute('data-ams-doc-level') || 5;
|
|
26
26
|
const span = this.createNode('span', '', {
|
|
27
27
|
'data-ams-doc': 'secheading',
|
|
28
|
-
'data-ams-doc-level': parseInt(parentLevel)+1,
|
|
28
|
+
'data-ams-doc-level': parseInt(parentLevel) + 1,
|
|
29
29
|
});
|
|
30
30
|
mapAttributes(span, xmlnode);
|
|
31
31
|
|
|
32
32
|
htmlParentNode.appendChild(span);
|
|
33
|
+
// NOTE: secheadings are re-written to headings downstream so we keep them flat here
|
|
33
34
|
const label = xmlnode.querySelector('label');
|
|
34
35
|
const title = xmlnode.querySelector('title');
|
|
35
36
|
if (label) {
|
|
36
37
|
this.passThrough(span, label);
|
|
37
|
-
if (title) span.insertAdjacentText('beforeend', ' ');
|
|
38
|
+
if (title) span.insertAdjacentText('beforeend', ' ');
|
|
38
39
|
}
|
|
39
40
|
if (!title) return;
|
|
40
41
|
this.passThrough(span, title);
|
|
@@ -27,5 +27,16 @@ export default function (htmlParentNode, xmlnode) {
|
|
|
27
27
|
});
|
|
28
28
|
mapAttributes(figure, xmlnode);
|
|
29
29
|
htmlParentNode.appendChild(figure);
|
|
30
|
+
|
|
31
|
+
const label = xmlnode.querySelector(':scope>label:not(:empty)');
|
|
32
|
+
const title = xmlnode.querySelector(':scope>title:not(:empty)');
|
|
33
|
+
if (label || title) {
|
|
34
|
+
const figcaption = this.createNode('figcaption');
|
|
35
|
+
figure.appendChild(figcaption);
|
|
36
|
+
this.redirectRecurseTheDom(figcaption, label);
|
|
37
|
+
if (label && title) figcaption.insertAdjacentText('beforeend', ' ');
|
|
38
|
+
this.redirectRecurseTheDom(figcaption, title);
|
|
39
|
+
}
|
|
40
|
+
|
|
30
41
|
this.passThrough(figure, xmlnode);
|
|
31
42
|
};
|
package/lib/elements/subtitle.js
CHANGED
|
@@ -14,15 +14,12 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import getParentLevel from '../helpers/getParentLevel.js';
|
|
18
|
-
|
|
19
17
|
/**
|
|
20
|
-
* subtitle element
|
|
18
|
+
* subtitle element, usually redirected
|
|
21
19
|
* @param {HTMLElement} htmlParentNode
|
|
22
20
|
* @param {Element} xmlnode
|
|
23
21
|
*/
|
|
24
22
|
export default function (htmlParentNode, xmlnode) {
|
|
25
|
-
// NOTE the subtitle is also touched in label.js (which creates a header as htmlParent)
|
|
26
23
|
const p = this.createNode('p', '', { 'data-ams-doc': 'subtitle' });
|
|
27
24
|
htmlParentNode.appendChild(p);
|
|
28
25
|
this.passThrough(p, xmlnode);
|
package/lib/elements/tag.js
CHANGED
|
@@ -37,11 +37,11 @@ export default function (htmlParentNode, xmlnode) {
|
|
|
37
37
|
}
|
|
38
38
|
// rarely, it appears in "text equations" (cf. formula.js, target.js)
|
|
39
39
|
else if (xmlnode.closest('disp-formula[content-type="text"]')) {
|
|
40
|
-
const span = this.createNode('span', '', { 'data-ams-doc': 'label'
|
|
40
|
+
const span = this.createNode('span', '', { 'data-ams-doc': 'label'});
|
|
41
41
|
if (xmlnode.getAttribute('parens') === 'yes') span.insertAdjacentText('afterbegin', '(')
|
|
42
42
|
this.passThrough(span, xmlnode);
|
|
43
43
|
if (xmlnode.getAttribute('parens') === 'yes') span.insertAdjacentText('beforeend', ')')
|
|
44
|
-
htmlParentNode.prepend(span);
|
|
44
|
+
htmlParentNode.prepend(span); //NOTE: we prepend to get left-side tags even when there is no target; but cf. AmerMathSoc/texml#232
|
|
45
45
|
}
|
|
46
46
|
// tag extraction
|
|
47
47
|
// if some tag in the equation is linked, we store all tags in a special element in the HTML parent
|
package/lib/elements/target.js
CHANGED
|
@@ -27,13 +27,10 @@ export default function (htmlParentNode, xmlnode) {
|
|
|
27
27
|
node2macro.apply(this, [htmlParentNode, xmlnode, `cssId{${xmlnode.id}}`, false]);
|
|
28
28
|
return;
|
|
29
29
|
}
|
|
30
|
-
// NOTE: inside a "text equation" we pass it through; the tag child will pick up the ID.
|
|
31
|
-
if (xmlnode.parentNode.tagName === 'disp-formula' && xmlnode.parentNode.getAttribute('content-type') === 'text') {
|
|
32
|
-
this.passThrough(htmlParentNode, xmlnode);
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
30
|
const span = this.createNode('span');
|
|
36
|
-
|
|
31
|
+
const isTextEquation = (xmlnode.parentNode.tagName === 'disp-formula' && xmlnode.parentNode.getAttribute('content-type') === 'text');
|
|
32
|
+
if (isTextEquation) htmlParentNode.prepend(span); // NOTE: inside a "text equation" we prepend to get a left-side label, but cf. also AmerMathSoc/texml#232
|
|
33
|
+
else htmlParentNode.appendChild(span);
|
|
37
34
|
mapAttributes(span, xmlnode);
|
|
38
35
|
this.passThrough(span, xmlnode);
|
|
39
36
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) 2025 American Mathematical Society
|
|
3
3
|
*
|
|
4
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
5
|
* you may not use this file except in compliance with the License.
|
|
@@ -15,12 +15,10 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
|
-
*
|
|
18
|
+
* title-group element mapped to h1
|
|
19
19
|
* @param {HTMLElement} htmlParentNode
|
|
20
20
|
* @param {Element} xmlnode
|
|
21
21
|
*/
|
|
22
22
|
export default function (htmlParentNode, xmlnode) {
|
|
23
|
-
|
|
24
|
-
htmlParentNode.appendChild(dd);
|
|
25
|
-
this.passThrough(dd, xmlnode);
|
|
23
|
+
this.createHeading(htmlParentNode, xmlnode);
|
|
26
24
|
};
|
package/lib/head.js
CHANGED
|
@@ -27,7 +27,7 @@ export const setHead = (xmldoc, htmldoc) => {
|
|
|
27
27
|
xmldoc.querySelector('front>article-meta>title-group>alt-title') ||
|
|
28
28
|
xmldoc.querySelector(
|
|
29
29
|
'book-meta>book-title-group>book-title, front>article-meta>title-group>article-title'
|
|
30
|
-
);
|
|
30
|
+
);// NOTE title might contain complex markup (no use case yet; however e.g. surv279 has math-as-unicode). See also book-meta-json.js
|
|
31
31
|
htmldoc.title = xmlTitle ? xmlTitle.textContent : 'AMS Publication';
|
|
32
32
|
|
|
33
33
|
const root = xmldoc.querySelector('article, book');
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2025 American Mathematical Society
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
// From https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Content_categories#phrasing_content
|
|
18
|
+
// Note: 'a', 'del', 'ins', 'link', 'map', 'meta' have additional constraints that we ignore since they shouldn't occur in our content
|
|
19
|
+
const phrasingContentTags = ['abbr', 'audio', 'b', 'bdo', 'br', 'button', 'canvas', 'cite', 'code', 'data', 'datalist', 'dfn', 'em', 'embed', 'i', 'iframe', 'img', 'input', 'kbd', 'label', 'mark', 'math', 'meter', 'noscript', 'object', 'output', 'picture', 'progress', 'q', 'ruby', 'samp', 'script', 'select', 'small', 'span', 'strong', 'sub', 'sup', 'svg', 'textarea', 'time', 'u', 'var', 'video', 'wbr', 'a', 'del', 'ins', 'link', 'map', 'meta']
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Checks if node is an element that is not phrasing content.
|
|
23
|
+
* @param {Node} node
|
|
24
|
+
* @returns Boolean
|
|
25
|
+
*/
|
|
26
|
+
const isProperFlow = node =>
|
|
27
|
+
node.nodeType === 1
|
|
28
|
+
&& !phrasingContentTags.includes(node.tagName.toLowerCase())
|
|
29
|
+
&& !node.tagName.includes('-');
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Helper to remove whitespace-only elements
|
|
33
|
+
* @param {HTMLElement} node
|
|
34
|
+
*/
|
|
35
|
+
const removeIfEmpty = node => {
|
|
36
|
+
if (node.innerHTML.trim() === '') node.remove();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Split paragraph node into multiple nodes if it contains non-phrasing content.
|
|
41
|
+
* @param {HTMLElement} node
|
|
42
|
+
*/
|
|
43
|
+
const splitAtNonPhrasing = node => {
|
|
44
|
+
const document = node.ownerDocument;
|
|
45
|
+
const tagName = node.tagName.toLowerCase();
|
|
46
|
+
const childNodes = [...node.childNodes];
|
|
47
|
+
const properFlowChild = childNodes.find(isProperFlow);
|
|
48
|
+
if (!properFlowChild) return;
|
|
49
|
+
let currentNode = node;
|
|
50
|
+
let index = 0
|
|
51
|
+
while (index < childNodes.length) {
|
|
52
|
+
const child = childNodes[index];
|
|
53
|
+
if (isProperFlow(child)) {
|
|
54
|
+
currentNode.insertAdjacentElement('afterend', child);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
currentNode.appendChild(child);
|
|
58
|
+
}
|
|
59
|
+
// continuation
|
|
60
|
+
index++;
|
|
61
|
+
if (!childNodes[index]) break;
|
|
62
|
+
if (isProperFlow(child) && !isProperFlow(childNodes[index])) {
|
|
63
|
+
const newNode = document.createElement(tagName);
|
|
64
|
+
child.insertAdjacentElement('afterend', newNode);
|
|
65
|
+
removeIfEmpty(currentNode);
|
|
66
|
+
currentNode = newNode;
|
|
67
|
+
}
|
|
68
|
+
else if (isProperFlow(child)) {
|
|
69
|
+
currentNode = child;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
removeIfEmpty(currentNode);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Wrapper around fixes for discrepancies between XML and HTML content models
|
|
77
|
+
* @param {Document} document
|
|
78
|
+
*/
|
|
79
|
+
export const fixContentModel = document => {
|
|
80
|
+
document.querySelectorAll('p').forEach(splitAtNonPhrasing);
|
|
81
|
+
}
|