docbook 0.1.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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +5 -0
- data/CLAUDE.md +19 -0
- data/CODE_OF_CONDUCT.md +10 -0
- data/README.adoc +335 -0
- data/Rakefile +12 -0
- data/docs/.lycheeignore +33 -0
- data/docs/Gemfile +10 -0
- data/docs/INDEX.adoc +67 -0
- data/docs/_config.yml +186 -0
- data/docs/advanced/element-classes.adoc +185 -0
- data/docs/advanced/frontend-customization.adoc +193 -0
- data/docs/advanced/index.adoc +14 -0
- data/docs/advanced/templates.adoc +123 -0
- data/docs/features/element-coverage.adoc +373 -0
- data/docs/features/html-output/data-model.adoc +285 -0
- data/docs/features/html-output/directory-mode.adoc +180 -0
- data/docs/features/html-output/index.adoc +90 -0
- data/docs/features/html-output/single-file-mode.adoc +125 -0
- data/docs/features/index-generation.adoc +197 -0
- data/docs/features/index.adoc +63 -0
- data/docs/features/numbering.adoc +183 -0
- data/docs/features/toc-generation.adoc +150 -0
- data/docs/features/xinclude/fragid-schemes.adoc +287 -0
- data/docs/features/xinclude/index.adoc +119 -0
- data/docs/features/xinclude/text-includes.adoc +123 -0
- data/docs/features/xinclude/xml-includes.adoc +167 -0
- data/docs/getting-started/index.adoc +50 -0
- data/docs/getting-started/installation.adoc +113 -0
- data/docs/getting-started/quick-start.adoc +161 -0
- data/docs/guides/converting-article.adoc +188 -0
- data/docs/guides/converting-book.adoc +192 -0
- data/docs/guides/index.adoc +12 -0
- data/docs/guides/roundtrip-testing.adoc +129 -0
- data/docs/interfaces/cli/format-command.adoc +109 -0
- data/docs/interfaces/cli/index.adoc +73 -0
- data/docs/interfaces/cli/roundtrip-command.adoc +125 -0
- data/docs/interfaces/cli/to-html-command.adoc +178 -0
- data/docs/interfaces/cli/validate-command.adoc +104 -0
- data/docs/interfaces/index.adoc +101 -0
- data/docs/interfaces/ruby-api/html-output.adoc +186 -0
- data/docs/interfaces/ruby-api/index.adoc +111 -0
- data/docs/interfaces/ruby-api/parsing.adoc +202 -0
- data/docs/interfaces/ruby-api/xinclude.adoc +162 -0
- data/docs/interfaces/ruby-api/xref-resolution.adoc +156 -0
- data/docs/lychee.toml +42 -0
- data/docs/reference/cli-options.adoc +155 -0
- data/docs/reference/content-block-types.adoc +243 -0
- data/docs/reference/glossary.adoc +119 -0
- data/docs/reference/index.adoc +12 -0
- data/docs/reference/supported-elements.adoc +749 -0
- data/docs/understanding/architecture.adoc +145 -0
- data/docs/understanding/content-pipeline.adoc +102 -0
- data/docs/understanding/data-models.adoc +156 -0
- data/docs/understanding/index.adoc +34 -0
- data/exe/docbook +7 -0
- data/frontend/dist/app.css +1 -0
- data/frontend/dist/app.iife.js +24 -0
- data/frontend/package-lock.json +1445 -0
- data/frontend/package.json +22 -0
- data/frontend/src/App.vue +230 -0
- data/frontend/src/app.ts +8 -0
- data/frontend/src/components/AppSidebar.vue +116 -0
- data/frontend/src/components/AppendixSection.vue +39 -0
- data/frontend/src/components/BlockRenderer.vue +358 -0
- data/frontend/src/components/ChapterSection.vue +32 -0
- data/frontend/src/components/ContentRenderer.vue +13 -0
- data/frontend/src/components/EbookContainer.vue +147 -0
- data/frontend/src/components/EbookTopBar.vue +116 -0
- data/frontend/src/components/PartSection.vue +44 -0
- data/frontend/src/components/ReferenceEntry.vue +80 -0
- data/frontend/src/components/SearchModal.vue +286 -0
- data/frontend/src/components/SectionContent.vue +31 -0
- data/frontend/src/components/SettingsPanel.vue +236 -0
- data/frontend/src/components/TocTreeItem.vue +135 -0
- data/frontend/src/composables/useEbookStore.ts +191 -0
- data/frontend/src/composables/useSearch.ts +249 -0
- data/frontend/src/env.d.ts +7 -0
- data/frontend/src/stores/documentStore.ts +221 -0
- data/frontend/src/stores/uiStore.ts +98 -0
- data/frontend/src/styles.css +253 -0
- data/frontend/tsconfig.json +24 -0
- data/frontend/tsconfig.node.json +11 -0
- data/frontend/vite.config.ts +30 -0
- data/lib/docbook/cli.rb +123 -0
- data/lib/docbook/document.rb +67 -0
- data/lib/docbook/elements/abbrev.rb +16 -0
- data/lib/docbook/elements/acknowledgements.rb +22 -0
- data/lib/docbook/elements/address.rb +18 -0
- data/lib/docbook/elements/alt.rb +16 -0
- data/lib/docbook/elements/annotation.rb +18 -0
- data/lib/docbook/elements/appendix.rb +34 -0
- data/lib/docbook/elements/article.rb +31 -0
- data/lib/docbook/elements/att.rb +15 -0
- data/lib/docbook/elements/attribution.rb +20 -0
- data/lib/docbook/elements/audioobject.rb +18 -0
- data/lib/docbook/elements/author.rb +18 -0
- data/lib/docbook/elements/bibliography.rb +24 -0
- data/lib/docbook/elements/bibliomixed.rb +40 -0
- data/lib/docbook/elements/biblioref.rb +20 -0
- data/lib/docbook/elements/blockquote.rb +26 -0
- data/lib/docbook/elements/book.rb +36 -0
- data/lib/docbook/elements/buildtarget.rb +16 -0
- data/lib/docbook/elements/callout.rb +22 -0
- data/lib/docbook/elements/calloutlist.rb +22 -0
- data/lib/docbook/elements/caution.rb +30 -0
- data/lib/docbook/elements/chapter.rb +62 -0
- data/lib/docbook/elements/citation.rb +16 -0
- data/lib/docbook/elements/citerefentry.rb +26 -0
- data/lib/docbook/elements/citetitle.rb +20 -0
- data/lib/docbook/elements/classname.rb +16 -0
- data/lib/docbook/elements/code.rb +16 -0
- data/lib/docbook/elements/colophon.rb +22 -0
- data/lib/docbook/elements/computeroutput.rb +18 -0
- data/lib/docbook/elements/copyright.rb +17 -0
- data/lib/docbook/elements/danger.rb +28 -0
- data/lib/docbook/elements/date.rb +16 -0
- data/lib/docbook/elements/dedication.rb +22 -0
- data/lib/docbook/elements/dir.rb +16 -0
- data/lib/docbook/elements/emphasis.rb +18 -0
- data/lib/docbook/elements/entry.rb +30 -0
- data/lib/docbook/elements/entrytbl.rb +22 -0
- data/lib/docbook/elements/equation.rb +26 -0
- data/lib/docbook/elements/example.rb +30 -0
- data/lib/docbook/elements/fieldsynopsis.rb +21 -0
- data/lib/docbook/elements/figure.rb +28 -0
- data/lib/docbook/elements/filename.rb +16 -0
- data/lib/docbook/elements/firstname.rb +16 -0
- data/lib/docbook/elements/firstterm.rb +18 -0
- data/lib/docbook/elements/footnote.rb +22 -0
- data/lib/docbook/elements/footnoteref.rb +21 -0
- data/lib/docbook/elements/foreignphrase.rb +18 -0
- data/lib/docbook/elements/formalpara.rb +20 -0
- data/lib/docbook/elements/function.rb +16 -0
- data/lib/docbook/elements/glossary.rb +24 -0
- data/lib/docbook/elements/glossdef.rb +18 -0
- data/lib/docbook/elements/glossentry.rb +26 -0
- data/lib/docbook/elements/glosssee.rb +18 -0
- data/lib/docbook/elements/glossseealso.rb +18 -0
- data/lib/docbook/elements/glossterm.rb +18 -0
- data/lib/docbook/elements/holder.rb +16 -0
- data/lib/docbook/elements/honorific.rb +16 -0
- data/lib/docbook/elements/imagedata.rb +29 -0
- data/lib/docbook/elements/imageobject.rb +22 -0
- data/lib/docbook/elements/important.rb +30 -0
- data/lib/docbook/elements/index.rb +26 -0
- data/lib/docbook/elements/indexdiv.rb +22 -0
- data/lib/docbook/elements/indexentry.rb +22 -0
- data/lib/docbook/elements/indexterm.rb +34 -0
- data/lib/docbook/elements/info.rb +25 -0
- data/lib/docbook/elements/informalexample.rb +24 -0
- data/lib/docbook/elements/informalfigure.rb +20 -0
- data/lib/docbook/elements/inlinemediaobject.rb +22 -0
- data/lib/docbook/elements/itemizedlist.rb +21 -0
- data/lib/docbook/elements/legalnotice.rb +22 -0
- data/lib/docbook/elements/link.rb +26 -0
- data/lib/docbook/elements/listitem.rb +32 -0
- data/lib/docbook/elements/literal.rb +16 -0
- data/lib/docbook/elements/literallayout.rb +22 -0
- data/lib/docbook/elements/mediaobject.rb +26 -0
- data/lib/docbook/elements/msg.rb +20 -0
- data/lib/docbook/elements/msgexplan.rb +22 -0
- data/lib/docbook/elements/msgset.rb +22 -0
- data/lib/docbook/elements/note.rb +30 -0
- data/lib/docbook/elements/orderedlist.rb +23 -0
- data/lib/docbook/elements/orgname.rb +16 -0
- data/lib/docbook/elements/para.rb +61 -0
- data/lib/docbook/elements/paragraph_like.rb +18 -0
- data/lib/docbook/elements/parameter.rb +16 -0
- data/lib/docbook/elements/part.rb +38 -0
- data/lib/docbook/elements/personname.rb +22 -0
- data/lib/docbook/elements/phrase.rb +20 -0
- data/lib/docbook/elements/preface.rb +58 -0
- data/lib/docbook/elements/primary.rb +16 -0
- data/lib/docbook/elements/procedure.rb +24 -0
- data/lib/docbook/elements/productname.rb +18 -0
- data/lib/docbook/elements/productnumber.rb +16 -0
- data/lib/docbook/elements/programlisting.rb +28 -0
- data/lib/docbook/elements/property.rb +16 -0
- data/lib/docbook/elements/pubdate.rb +16 -0
- data/lib/docbook/elements/publishername.rb +16 -0
- data/lib/docbook/elements/quotation.rb +24 -0
- data/lib/docbook/elements/quote.rb +18 -0
- data/lib/docbook/elements/refentry.rb +32 -0
- data/lib/docbook/elements/refentrytitle.rb +16 -0
- data/lib/docbook/elements/reference.rb +26 -0
- data/lib/docbook/elements/refmeta.rb +29 -0
- data/lib/docbook/elements/refmiscinfo.rb +16 -0
- data/lib/docbook/elements/refname.rb +16 -0
- data/lib/docbook/elements/refnamediv.rb +22 -0
- data/lib/docbook/elements/refpurpose.rb +16 -0
- data/lib/docbook/elements/refsect1.rb +22 -0
- data/lib/docbook/elements/refsect2.rb +22 -0
- data/lib/docbook/elements/refsect3.rb +22 -0
- data/lib/docbook/elements/refsection.rb +32 -0
- data/lib/docbook/elements/releaseinfo.rb +16 -0
- data/lib/docbook/elements/remark.rb +20 -0
- data/lib/docbook/elements/replaceable.rb +16 -0
- data/lib/docbook/elements/row.rb +15 -0
- data/lib/docbook/elements/screen.rb +28 -0
- data/lib/docbook/elements/secondary.rb +16 -0
- data/lib/docbook/elements/sect1.rb +26 -0
- data/lib/docbook/elements/sect2.rb +24 -0
- data/lib/docbook/elements/sect3.rb +24 -0
- data/lib/docbook/elements/sect4.rb +24 -0
- data/lib/docbook/elements/sect5.rb +22 -0
- data/lib/docbook/elements/section.rb +66 -0
- data/lib/docbook/elements/see.rb +16 -0
- data/lib/docbook/elements/seealso.rb +18 -0
- data/lib/docbook/elements/set.rb +26 -0
- data/lib/docbook/elements/setindex.rb +24 -0
- data/lib/docbook/elements/sidebar.rb +22 -0
- data/lib/docbook/elements/simplesect.rb +32 -0
- data/lib/docbook/elements/step.rb +26 -0
- data/lib/docbook/elements/substeps.rb +18 -0
- data/lib/docbook/elements/subtitle.rb +16 -0
- data/lib/docbook/elements/surname.rb +16 -0
- data/lib/docbook/elements/table.rb +24 -0
- data/lib/docbook/elements/tag.rb +20 -0
- data/lib/docbook/elements/tbody.rb +15 -0
- data/lib/docbook/elements/term.rb +37 -0
- data/lib/docbook/elements/tertiary.rb +16 -0
- data/lib/docbook/elements/textobject.rb +18 -0
- data/lib/docbook/elements/tfoot.rb +15 -0
- data/lib/docbook/elements/tgroup.rb +21 -0
- data/lib/docbook/elements/thead.rb +15 -0
- data/lib/docbook/elements/tip.rb +30 -0
- data/lib/docbook/elements/title.rb +16 -0
- data/lib/docbook/elements/toc.rb +24 -0
- data/lib/docbook/elements/tocdiv.rb +22 -0
- data/lib/docbook/elements/tocentry.rb +20 -0
- data/lib/docbook/elements/topic.rb +26 -0
- data/lib/docbook/elements/type.rb +16 -0
- data/lib/docbook/elements/uri.rb +16 -0
- data/lib/docbook/elements/userinput.rb +18 -0
- data/lib/docbook/elements/variable.rb +16 -0
- data/lib/docbook/elements/variablelist.rb +19 -0
- data/lib/docbook/elements/varlistentry.rb +17 -0
- data/lib/docbook/elements/version.rb +16 -0
- data/lib/docbook/elements/videoobject.rb +18 -0
- data/lib/docbook/elements/warning.rb +30 -0
- data/lib/docbook/elements/xref.rb +18 -0
- data/lib/docbook/elements/year.rb +16 -0
- data/lib/docbook/elements.rb +204 -0
- data/lib/docbook/models/document_metadata.rb +30 -0
- data/lib/docbook/models/document_root.rb +33 -0
- data/lib/docbook/models/index_entry.rb +28 -0
- data/lib/docbook/models/reading_position.rb +22 -0
- data/lib/docbook/models/section_number.rb +18 -0
- data/lib/docbook/models/section_root.rb +29 -0
- data/lib/docbook/models/toc_node.rb +24 -0
- data/lib/docbook/models.rb +16 -0
- data/lib/docbook/output/data.rb +196 -0
- data/lib/docbook/output/html.rb +1450 -0
- data/lib/docbook/output/index_generator.rb +281 -0
- data/lib/docbook/output.rb +8 -0
- data/lib/docbook/services/document_builder.rb +258 -0
- data/lib/docbook/services/element_to_hash.rb +287 -0
- data/lib/docbook/services/index_generator.rb +134 -0
- data/lib/docbook/services/numbering_service.rb +186 -0
- data/lib/docbook/services/toc_generator.rb +138 -0
- data/lib/docbook/services.rb +14 -0
- data/lib/docbook/templates/document.html.liquid +20 -0
- data/lib/docbook/templates/partials/_head.liquid +39 -0
- data/lib/docbook/templates/partials/_scripts.liquid +10 -0
- data/lib/docbook/version.rb +5 -0
- data/lib/docbook/xinclude_resolver.rb +217 -0
- data/lib/docbook/xref_resolver.rb +78 -0
- data/lib/docbook.rb +17 -0
- data/sig/docbook.rbs +4 -0
- metadata +385 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: a64ef89c39e9981b971c18bca30eda85a2ab034f3c5a176d32ae55fc6c311c09
|
|
4
|
+
data.tar.gz: '0931c9d12ced953ea69c9538af2a9c3f320d2ee9135c3d9247b4a0b1bca1786f'
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 04e31fbc21354f7aa37acc67c08d3d6c107916ea255bc90c015d8316624a3c2eb65ca2f64aba6cf12ab78a1dc85ea5ddad0394b42339458cc7939b912ae9fc09
|
|
7
|
+
data.tar.gz: f0524cb42079fa8909d25a75358658a6e1528a280f95ec426617b9da9441c959976ca776fc267ff86aa66aaa309c2c27db77874acef39b3c2eb4455a0139c9b2
|
data/CHANGELOG.md
ADDED
data/CLAUDE.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
## Critical Rules
|
|
4
|
+
|
|
5
|
+
### NEVER HANDLE RAW XML ELEMENTS
|
|
6
|
+
You MUST NOT handle raw XML elements (such as those from Nokogiri) in HTML processing code. Any violation will be considered a serious error.
|
|
7
|
+
|
|
8
|
+
**Rule:** All HTML generation must go through the Docbook model classes only. If the Docbook models are insufficient, they MUST be improved to support the required functionality.
|
|
9
|
+
|
|
10
|
+
**Why:** Handling raw XML bypasses the abstraction layer and creates brittle, non-portable code that doesn't work with the established model infrastructure.
|
|
11
|
+
|
|
12
|
+
**How to apply:** When processing XML content for HTML output, always use the Lutaml::Model-based Docbook element classes (in `lib/docbook/elements/`). If an element type is not supported in the models, add it to the appropriate element class rather than processing raw XML nodes.
|
|
13
|
+
|
|
14
|
+
### Examples
|
|
15
|
+
- **WRONG:** `node.xpath('...')` or `Nokogiri::XML::Node` manipulation in HTML generation
|
|
16
|
+
- **RIGHT:** Use element classes like `Docbook::Elements::InformalFigure`, `Docbook::Elements::MediaObject`, etc.
|
|
17
|
+
|
|
18
|
+
### Image Path Resolution
|
|
19
|
+
Image paths should be resolved using the Docbook element's xml:base when available, per the Docbook spec. The `process_image` method in Html class handles this by searching parent paths as a fallback when xml:base is not preserved by the parser.
|
data/CODE_OF_CONDUCT.md
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Code of Conduct
|
|
2
|
+
|
|
3
|
+
"docbook" follows [The Ruby Community Conduct Guideline](https://www.ruby-lang.org/en/conduct) in all "collaborative space", which is defined as community communications channels (such as mailing lists, submitted patches, commit comments, etc.):
|
|
4
|
+
|
|
5
|
+
* Participants will be tolerant of opposing views.
|
|
6
|
+
* Participants must ensure that their language and actions are free of personal attacks and disparaging personal remarks.
|
|
7
|
+
* When interpreting the words and actions of others, participants should always assume good intentions.
|
|
8
|
+
* Behaviour which can be reasonably considered harassment will not be tolerated.
|
|
9
|
+
|
|
10
|
+
If you have any concerns about behaviour within this project, please contact us at ["ronald.tse@ribose.com"](mailto:"ronald.tse@ribose.com").
|
data/README.adoc
ADDED
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
= DocBook
|
|
2
|
+
:toc:
|
|
3
|
+
:toclevels: 2
|
|
4
|
+
|
|
5
|
+
== Purpose
|
|
6
|
+
|
|
7
|
+
DocBook is a Ruby gem for parsing, transforming, and generating HTML from
|
|
8
|
+
DocBook 5 XML documents. It provides a complete toolkit for working with
|
|
9
|
+
DocBook documents including XInclude resolution, validation, formatting, and
|
|
10
|
+
high-quality HTML output.
|
|
11
|
+
|
|
12
|
+
Key features:
|
|
13
|
+
|
|
14
|
+
* **DocBook XML Parsing**: Full support for DocBook 5 elements via lutaml-model
|
|
15
|
+
* **XInclude Resolution**: Resolve XInclude references in DocBook documents
|
|
16
|
+
* **HTML Output**: Generate professional HTML documentation with Vue 3 SPA
|
|
17
|
+
* **CLI Tools**: Format, validate, and convert DocBook documents
|
|
18
|
+
|
|
19
|
+
== Installation
|
|
20
|
+
|
|
21
|
+
Add to your application Gemfile:
|
|
22
|
+
|
|
23
|
+
[source,ruby]
|
|
24
|
+
----
|
|
25
|
+
gem 'docbook'
|
|
26
|
+
----
|
|
27
|
+
|
|
28
|
+
Then execute:
|
|
29
|
+
|
|
30
|
+
[source,bash]
|
|
31
|
+
----
|
|
32
|
+
$ bundle install
|
|
33
|
+
----
|
|
34
|
+
|
|
35
|
+
Or install directly:
|
|
36
|
+
|
|
37
|
+
[source,bash]
|
|
38
|
+
----
|
|
39
|
+
$ gem install docbook
|
|
40
|
+
----
|
|
41
|
+
|
|
42
|
+
== Quick start
|
|
43
|
+
|
|
44
|
+
=== Convert DocBook XML to HTML
|
|
45
|
+
|
|
46
|
+
[source,bash]
|
|
47
|
+
----
|
|
48
|
+
$ docbook to-html input.xml -o output.html
|
|
49
|
+
----
|
|
50
|
+
|
|
51
|
+
=== With XInclude resolution
|
|
52
|
+
|
|
53
|
+
[source,bash]
|
|
54
|
+
----
|
|
55
|
+
$ docbook to-html --xinclude input.xml -o output.html
|
|
56
|
+
----
|
|
57
|
+
|
|
58
|
+
=== Format DocBook XML
|
|
59
|
+
|
|
60
|
+
[source,bash]
|
|
61
|
+
----
|
|
62
|
+
$ docbook format input.xml -o output.xml
|
|
63
|
+
----
|
|
64
|
+
|
|
65
|
+
=== Validate DocBook XML
|
|
66
|
+
|
|
67
|
+
[source,bash]
|
|
68
|
+
----
|
|
69
|
+
$ docbook validate input.xml
|
|
70
|
+
input.xml: valid
|
|
71
|
+
----
|
|
72
|
+
|
|
73
|
+
=== Ruby API
|
|
74
|
+
|
|
75
|
+
[source,ruby]
|
|
76
|
+
----
|
|
77
|
+
require 'docbook'
|
|
78
|
+
|
|
79
|
+
# Parse a DocBook document
|
|
80
|
+
article = Docbook::Elements::Article.from_xml(File.read('input.xml'))
|
|
81
|
+
|
|
82
|
+
# Convert to HTML
|
|
83
|
+
html_output = Docbook::Output::Html.new(article).to_html
|
|
84
|
+
|
|
85
|
+
# Write to file
|
|
86
|
+
File.write('output.html', html_output)
|
|
87
|
+
----
|
|
88
|
+
|
|
89
|
+
== CLI Commands
|
|
90
|
+
|
|
91
|
+
=== to-html
|
|
92
|
+
|
|
93
|
+
Convert DocBook XML to HTML with Vue 3 SPA output.
|
|
94
|
+
|
|
95
|
+
[source,bash]
|
|
96
|
+
----
|
|
97
|
+
# Basic usage
|
|
98
|
+
$ docbook to-html INPUT -o OUTPUT
|
|
99
|
+
|
|
100
|
+
# With XInclude resolution
|
|
101
|
+
$ docbook to-html --xinclude INPUT -o OUTPUT
|
|
102
|
+
|
|
103
|
+
# Output to stdout
|
|
104
|
+
$ docbook to-html INPUT
|
|
105
|
+
----
|
|
106
|
+
|
|
107
|
+
Options:
|
|
108
|
+
|
|
109
|
+
* `-o, --output FILE`: Output file (default: stdout)
|
|
110
|
+
* `--xinclude`: Resolve XIncludes before processing
|
|
111
|
+
|
|
112
|
+
=== format
|
|
113
|
+
|
|
114
|
+
Format/prettify DocBook XML documents.
|
|
115
|
+
|
|
116
|
+
[source,bash]
|
|
117
|
+
----
|
|
118
|
+
# Basic usage
|
|
119
|
+
$ docbook format INPUT -o OUTPUT
|
|
120
|
+
|
|
121
|
+
# With XInclude resolution
|
|
122
|
+
$ docbook format --xinclude INPUT -o OUTPUT
|
|
123
|
+
----
|
|
124
|
+
|
|
125
|
+
Options:
|
|
126
|
+
|
|
127
|
+
* `-o, --output FILE`: Output file (default: stdout)
|
|
128
|
+
* `--xinclude`: Resolve XIncludes before processing
|
|
129
|
+
|
|
130
|
+
=== validate
|
|
131
|
+
|
|
132
|
+
Validate DocBook XML for well-formedness.
|
|
133
|
+
|
|
134
|
+
[source,bash]
|
|
135
|
+
----
|
|
136
|
+
$ docbook validate input.xml
|
|
137
|
+
input.xml: valid
|
|
138
|
+
----
|
|
139
|
+
|
|
140
|
+
Returns exit code 0 if valid, exit code 1 with error messages if invalid.
|
|
141
|
+
|
|
142
|
+
=== roundtrip
|
|
143
|
+
|
|
144
|
+
Round-trip test DocBook XML files (parse and re-serialize).
|
|
145
|
+
|
|
146
|
+
[source,bash]
|
|
147
|
+
----
|
|
148
|
+
$ docbook roundtrip input1.xml input2.xml
|
|
149
|
+
input1.xml: OK
|
|
150
|
+
input2.xml: OK
|
|
151
|
+
2 files, 0 failures
|
|
152
|
+
----
|
|
153
|
+
|
|
154
|
+
== HTML Output Features
|
|
155
|
+
|
|
156
|
+
The HTML output is a self-contained Vue 3 SPA that works with `file://` protocol
|
|
157
|
+
(no server required).
|
|
158
|
+
|
|
159
|
+
=== Vue 3 SPA
|
|
160
|
+
|
|
161
|
+
* **Pre-compiled Vue 3**: No build step required at runtime
|
|
162
|
+
* **FlexSearch**: Full-text search across all headings
|
|
163
|
+
* **Collapsible TOC**: Hierarchical table of contents with expand/collapse
|
|
164
|
+
* **Keyboard navigation**: Press `/` to search, `Esc` to close
|
|
165
|
+
|
|
166
|
+
=== Theme Support
|
|
167
|
+
|
|
168
|
+
* **Dark mode**: Toggle between light, dark, and system preference
|
|
169
|
+
* **Font selection**: Sans-serif (Inter) and serif (Merriweather) options
|
|
170
|
+
* **Persistent settings**: Theme and font preferences saved to localStorage
|
|
171
|
+
|
|
172
|
+
=== Document Structure
|
|
173
|
+
|
|
174
|
+
* **Chapter numbering**: Roman numerals for chapters (I, II, III...)
|
|
175
|
+
* **Appendix numbering**: "Appendix A", "Appendix B", etc.
|
|
176
|
+
* **Section numbering**: Dot notation (1.1, 1.2, 2.1...)
|
|
177
|
+
* **Part organization**: Parts contain chapters, appendices, and references
|
|
178
|
+
|
|
179
|
+
=== Content Types
|
|
180
|
+
|
|
181
|
+
The HTML output supports rendering of:
|
|
182
|
+
|
|
183
|
+
* Paragraphs and formal paragraphs
|
|
184
|
+
* Ordered and unordered lists
|
|
185
|
+
* Variable lists
|
|
186
|
+
* Figures and media objects
|
|
187
|
+
* Tables with headers and footers
|
|
188
|
+
* Code blocks with syntax highlighting
|
|
189
|
+
* Block quotations
|
|
190
|
+
* Admonitions (note, warning, caution, important, tip, danger)
|
|
191
|
+
* Bibliography and glossary
|
|
192
|
+
* Procedure steps
|
|
193
|
+
* Sidebars
|
|
194
|
+
|
|
195
|
+
== Ruby API
|
|
196
|
+
|
|
197
|
+
=== Parsing DocBook Documents
|
|
198
|
+
|
|
199
|
+
[source,ruby]
|
|
200
|
+
----
|
|
201
|
+
require 'docbook'
|
|
202
|
+
|
|
203
|
+
# Parse from file
|
|
204
|
+
article = Docbook::Elements::Article.from_xml(File.read('article.xml'))
|
|
205
|
+
|
|
206
|
+
# Parse book with parts
|
|
207
|
+
book = Docbook::Elements::Book.from_xml(File.read('book.xml'))
|
|
208
|
+
|
|
209
|
+
# Parse with XInclude resolution
|
|
210
|
+
xml_string = File.read('main.xml')
|
|
211
|
+
resolved = Docbook::XIncludeResolver.resolve_string(xml_string, base_path: 'main.xml')
|
|
212
|
+
docbook_doc = Docbook::Document.from_xml(resolved.to_xml)
|
|
213
|
+
----
|
|
214
|
+
|
|
215
|
+
=== Document Types
|
|
216
|
+
|
|
217
|
+
The gem automatically detects and parses:
|
|
218
|
+
|
|
219
|
+
* `article` - Article documents
|
|
220
|
+
* `book` - Book documents with parts, chapters, appendices
|
|
221
|
+
* `chapter` - Chapter documents
|
|
222
|
+
* `section` - Section documents
|
|
223
|
+
* `refentry` - Reference manual pages
|
|
224
|
+
|
|
225
|
+
=== HTML Output
|
|
226
|
+
|
|
227
|
+
[source,ruby]
|
|
228
|
+
----
|
|
229
|
+
require 'docbook'
|
|
230
|
+
|
|
231
|
+
# Create HTML output
|
|
232
|
+
article = Docbook::Elements::Article.from_xml(File.read('input.xml'))
|
|
233
|
+
html_output = Docbook::Output::Html.new(article).to_html
|
|
234
|
+
|
|
235
|
+
# Write to file
|
|
236
|
+
File.write('output.html', html_output)
|
|
237
|
+
----
|
|
238
|
+
|
|
239
|
+
=== Document Model
|
|
240
|
+
|
|
241
|
+
Access document structure through the element model:
|
|
242
|
+
|
|
243
|
+
[source,ruby]
|
|
244
|
+
----
|
|
245
|
+
book = Docbook::Elements::Book.from_xml(File.read('book.xml'))
|
|
246
|
+
|
|
247
|
+
# Access book elements
|
|
248
|
+
book.info.title.content # Book title
|
|
249
|
+
book.part # Array of parts
|
|
250
|
+
book.chapter # Array of top-level chapters
|
|
251
|
+
book.appendix # Array of appendices
|
|
252
|
+
book.glossary # Array of glossaries
|
|
253
|
+
book.bibliography # Array of bibliographies
|
|
254
|
+
|
|
255
|
+
# Access part contents
|
|
256
|
+
book.part.each do |part|
|
|
257
|
+
puts part.title.content
|
|
258
|
+
part.chapter.each do |chapter|
|
|
259
|
+
puts " #{chapter.title.content}"
|
|
260
|
+
end
|
|
261
|
+
end
|
|
262
|
+
----
|
|
263
|
+
|
|
264
|
+
== Building the Vue Frontend
|
|
265
|
+
|
|
266
|
+
The HTML output uses a pre-compiled Vue 3 frontend. To rebuild after
|
|
267
|
+
frontend changes:
|
|
268
|
+
|
|
269
|
+
[source,bash]
|
|
270
|
+
----
|
|
271
|
+
cd frontend
|
|
272
|
+
npm install
|
|
273
|
+
npm run build
|
|
274
|
+
----
|
|
275
|
+
|
|
276
|
+
This generates the Vue bundle in `lib/docbook/frontend/dist/`.
|
|
277
|
+
|
|
278
|
+
The bundle is automatically included when generating HTML output through the Ruby API.
|
|
279
|
+
|
|
280
|
+
== Development
|
|
281
|
+
|
|
282
|
+
After checking out the repo, run `bin/setup` to install dependencies:
|
|
283
|
+
|
|
284
|
+
[source,bash]
|
|
285
|
+
----
|
|
286
|
+
bin/setup
|
|
287
|
+
----
|
|
288
|
+
|
|
289
|
+
Run the test suite:
|
|
290
|
+
|
|
291
|
+
[source,bash]
|
|
292
|
+
----
|
|
293
|
+
bundle exec rake spec
|
|
294
|
+
----
|
|
295
|
+
|
|
296
|
+
Run specific test files:
|
|
297
|
+
|
|
298
|
+
[source,bash]
|
|
299
|
+
----
|
|
300
|
+
bundle exec rspec spec/output/html_spec.rb
|
|
301
|
+
bundle exec rspec spec/cli_spec.rb
|
|
302
|
+
----
|
|
303
|
+
|
|
304
|
+
== Architecture
|
|
305
|
+
|
|
306
|
+
The gem follows a modular architecture:
|
|
307
|
+
|
|
308
|
+
* **Parser**: Uses lutaml-model for DocBook element mapping
|
|
309
|
+
* **XInclude Resolver**: Nokogiri-based XInclude processing
|
|
310
|
+
* **HTML Generator**: Ruby-based HTML transformation with Vue 3 SPA
|
|
311
|
+
* **CLI**: Thor-based command-line interface
|
|
312
|
+
|
|
313
|
+
=== Element Classes
|
|
314
|
+
|
|
315
|
+
The gem defines element classes for all major DocBook 5 elements:
|
|
316
|
+
|
|
317
|
+
* **Structural**: article, book, chapter, part, section, appendix, preface
|
|
318
|
+
* **Block**: para, formalpara, blockquote, literallayout
|
|
319
|
+
* **Lists**: orderedlist, itemizedlist, variablelist
|
|
320
|
+
* **Links**: link, xref, uri
|
|
321
|
+
* **Inline**: emphasis, code, literal, filename, classname, function
|
|
322
|
+
* **Media**: mediaobject, figure, table
|
|
323
|
+
* **Admonitions**: note, warning, caution, important, tip, danger
|
|
324
|
+
* **Bibliography**: bibliography, bibliomixed
|
|
325
|
+
* **Glossary**: glossary, glossentry
|
|
326
|
+
* **Metadata**: info, title, author, copyright
|
|
327
|
+
|
|
328
|
+
== Contributing
|
|
329
|
+
|
|
330
|
+
Bug reports and pull requests are welcome on GitHub at
|
|
331
|
+
https://github.com/metanorma/metanorma-docbook.
|
|
332
|
+
|
|
333
|
+
== License
|
|
334
|
+
|
|
335
|
+
Copyright Ribose. https://opensource.org/licenses/MIT[MIT License].
|
data/Rakefile
ADDED
data/docs/.lycheeignore
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Lychee ignore patterns
|
|
2
|
+
# These link types are valid but lychee can't verify them
|
|
3
|
+
|
|
4
|
+
# Ignore .adoc source files
|
|
5
|
+
\.adoc$
|
|
6
|
+
|
|
7
|
+
# Ignore .html files with inconsistent paths
|
|
8
|
+
\.html$
|
|
9
|
+
|
|
10
|
+
# Ignore file:// URLs
|
|
11
|
+
file://
|
|
12
|
+
|
|
13
|
+
# Ignore directory links
|
|
14
|
+
file://.*/docbook/$
|
|
15
|
+
file://.*/docbook/.*/$
|
|
16
|
+
file://.*/docs/$
|
|
17
|
+
file://.*/docs/.*/$
|
|
18
|
+
|
|
19
|
+
# Ignore example domain links
|
|
20
|
+
http://example\.com/.*
|
|
21
|
+
http://a\.com/.*
|
|
22
|
+
http://b\.com/.*
|
|
23
|
+
|
|
24
|
+
# Ignore GitHub-specific links
|
|
25
|
+
https://github\.com/[^/]+/[^/]+/edit/.*
|
|
26
|
+
https://github\.com/[^/]+/[^/]+/blob/.*
|
|
27
|
+
|
|
28
|
+
# Ignore mailto links
|
|
29
|
+
mailto:.*
|
|
30
|
+
|
|
31
|
+
# Ignore localhost
|
|
32
|
+
http://localhost:.*
|
|
33
|
+
http://127\.0\.0\.1:.*
|
data/docs/Gemfile
ADDED
data/docs/INDEX.adoc
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: default
|
|
3
|
+
title: Home
|
|
4
|
+
nav_order: 1
|
|
5
|
+
description: "Metanorma DocBook: Parse, transform, and generate HTML from DocBook 5 XML"
|
|
6
|
+
permalink: /
|
|
7
|
+
---
|
|
8
|
+
= Metanorma DocBook Documentation
|
|
9
|
+
:toc: macro
|
|
10
|
+
:toclevels: 2
|
|
11
|
+
|
|
12
|
+
[.lead]
|
|
13
|
+
Metanorma DocBook is a Ruby gem for parsing, accessing, and converting DocBook 5 XML documents to interactive HTML.
|
|
14
|
+
|
|
15
|
+
toc::[]
|
|
16
|
+
|
|
17
|
+
== Welcome
|
|
18
|
+
|
|
19
|
+
Metanorma DocBook helps you:
|
|
20
|
+
|
|
21
|
+
* **Parse** DocBook 5 XML into Ruby object models using 149 element classes
|
|
22
|
+
* **Convert** DocBook to self-contained HTML with a Vue 3 interactive reader
|
|
23
|
+
* **Resolve** XIncludes with text fragid extensions (`search=`, `line=`, `char=`)
|
|
24
|
+
* **Validate** and **format** DocBook XML from the command line
|
|
25
|
+
|
|
26
|
+
== Quick Navigation
|
|
27
|
+
|
|
28
|
+
=== By Your Role
|
|
29
|
+
|
|
30
|
+
**Developer**::
|
|
31
|
+
Start with link:getting-started/ruby-api/[Ruby API] to integrate DocBook parsing into your applications.
|
|
32
|
+
|
|
33
|
+
**Technical Writer**::
|
|
34
|
+
Start with link:guides/converting-book/[Converting a Book] to convert DocBook documents to HTML.
|
|
35
|
+
|
|
36
|
+
**DevOps**::
|
|
37
|
+
Start with link:interfaces/cli/[CLI Reference] for command-line usage in pipelines.
|
|
38
|
+
|
|
39
|
+
=== By Task
|
|
40
|
+
|
|
41
|
+
**Convert DocBook to HTML**::
|
|
42
|
+
link:getting-started/quick-start/#to-html[Quick Start: to-html] | link:interfaces/cli/to-html-command[CLI: to-html] | link:interfaces/ruby-api/html-output[Ruby API: HTML Output]
|
|
43
|
+
|
|
44
|
+
**Resolve XIncludes**::
|
|
45
|
+
link:features/xinclude/text-includes[Text Includes] | link:features/xinclude/fragid-schemes[fragid Schemes] | link:interfaces/ruby-api/xinclude[Ruby API]
|
|
46
|
+
|
|
47
|
+
**Format and validate XML**::
|
|
48
|
+
link:interfaces/cli/format-command[format] | link:interfaces/cli/validate-command[validate]
|
|
49
|
+
|
|
50
|
+
=== By Document Type
|
|
51
|
+
|
|
52
|
+
link:guides/converting-book[**Book**]:: Multi-part books with chapters, appendices, glossary, and index
|
|
53
|
+
link:guides/converting-article[**Article**]:: Standalone articles with sections
|
|
54
|
+
link:reference/supported-elements[**Reference pages**]:: RefEntry manual pages
|
|
55
|
+
|
|
56
|
+
== Learning Path
|
|
57
|
+
|
|
58
|
+
. *Get Started (5 minutes)* -- link:getting-started/installation[Install] and link:getting-started/quick-start[try basic commands]
|
|
59
|
+
. *Learn Interfaces (15 minutes)* -- link:interfaces/cli/[CLI] or link:interfaces/ruby-api/[Ruby API]
|
|
60
|
+
. *Explore Features (30 minutes)* -- link:features/html-output/[HTML output], link:features/xinclude/[XInclude], link:features/numbering[Numbering]
|
|
61
|
+
. *Understand Internals (as needed)* -- link:understanding/architecture[Architecture], link:understanding/data-models[Data Models]
|
|
62
|
+
|
|
63
|
+
== Getting Help
|
|
64
|
+
|
|
65
|
+
**Found a bug?**:: link:https://github.com/metanorma/docbook/issues[Report an issue on GitHub]
|
|
66
|
+
|
|
67
|
+
**Have a question?**:: Check link:reference/glossary[Glossary] or search this documentation
|
data/docs/_config.yml
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
# Jekyll configuration for Metanorma DocBook documentation
|
|
2
|
+
# Uses Just the Docs theme - https://just-the-docs.com/
|
|
3
|
+
|
|
4
|
+
# Site settings
|
|
5
|
+
title: Metanorma DocBook Documentation
|
|
6
|
+
description: Parse, transform, and generate HTML from DocBook 5 XML documents
|
|
7
|
+
url: https://www.metanorma.org
|
|
8
|
+
baseurl: /docbook
|
|
9
|
+
|
|
10
|
+
# Repository
|
|
11
|
+
repository: metanorma/docbook
|
|
12
|
+
|
|
13
|
+
# Theme
|
|
14
|
+
theme: just-the-docs
|
|
15
|
+
remote_theme: just-the-docs/just-the-docs@v0.7.0
|
|
16
|
+
color_scheme: light
|
|
17
|
+
|
|
18
|
+
# AsciiDoc support
|
|
19
|
+
asciidoc: {}
|
|
20
|
+
asciidoctor:
|
|
21
|
+
attributes:
|
|
22
|
+
idprefix: ''
|
|
23
|
+
idseparator: '-'
|
|
24
|
+
source-highlighter: rouge
|
|
25
|
+
icons: font
|
|
26
|
+
experimental: true
|
|
27
|
+
sectanchors: true
|
|
28
|
+
linkattrs: true
|
|
29
|
+
sectnums: true
|
|
30
|
+
toc: left
|
|
31
|
+
toclevels: 3
|
|
32
|
+
|
|
33
|
+
# Search configuration
|
|
34
|
+
search_enabled: true
|
|
35
|
+
search:
|
|
36
|
+
heading_level: 3
|
|
37
|
+
previews: 3
|
|
38
|
+
preview_words_before: 5
|
|
39
|
+
preview_words_after: 10
|
|
40
|
+
tokenizer_separator: /[\s/]+/
|
|
41
|
+
rel_url: true
|
|
42
|
+
button: true
|
|
43
|
+
|
|
44
|
+
# Navigation
|
|
45
|
+
nav_sort: case_insensitive
|
|
46
|
+
nav_fold: true
|
|
47
|
+
|
|
48
|
+
# External links
|
|
49
|
+
aux_links:
|
|
50
|
+
"Source":
|
|
51
|
+
- "https://github.com/metanorma/docbook"
|
|
52
|
+
"Report Issues":
|
|
53
|
+
- "https://github.com/metanorma/docbook/issues"
|
|
54
|
+
|
|
55
|
+
aux_links_new_tab: true
|
|
56
|
+
|
|
57
|
+
# Back to top
|
|
58
|
+
back_to_top: true
|
|
59
|
+
back_to_top_text: "Back to top"
|
|
60
|
+
|
|
61
|
+
# Heading anchors
|
|
62
|
+
heading_anchors: true
|
|
63
|
+
|
|
64
|
+
# Footer
|
|
65
|
+
footer_content: 'Copyright © 2025 Ribose. Distributed under the <a href="https://github.com/metanorma/docbook/blob/main/LICENSE.txt">BSD 2-Clause License</a>.'
|
|
66
|
+
|
|
67
|
+
# Footer last edit timestamp
|
|
68
|
+
last_edit_timestamp: true
|
|
69
|
+
last_edit_time_format: "%b %e %Y at %I:%M %p"
|
|
70
|
+
|
|
71
|
+
# Enable code copy button
|
|
72
|
+
enable_copy_code_button: true
|
|
73
|
+
|
|
74
|
+
# Callouts
|
|
75
|
+
callouts_level: quiet
|
|
76
|
+
callouts:
|
|
77
|
+
highlight:
|
|
78
|
+
color: yellow
|
|
79
|
+
important:
|
|
80
|
+
title: Important
|
|
81
|
+
color: blue
|
|
82
|
+
new:
|
|
83
|
+
title: New
|
|
84
|
+
color: green
|
|
85
|
+
note:
|
|
86
|
+
title: Note
|
|
87
|
+
color: purple
|
|
88
|
+
warning:
|
|
89
|
+
title: Warning
|
|
90
|
+
color: red
|
|
91
|
+
|
|
92
|
+
# Plugins
|
|
93
|
+
plugins:
|
|
94
|
+
- jekyll-asciidoc
|
|
95
|
+
- jekyll-seo-tag
|
|
96
|
+
- jekyll-sitemap
|
|
97
|
+
|
|
98
|
+
# Markdown settings (for any markdown files)
|
|
99
|
+
markdown: kramdown
|
|
100
|
+
kramdown:
|
|
101
|
+
input: GFM
|
|
102
|
+
hard_wrap: false
|
|
103
|
+
syntax_highlighter: rouge
|
|
104
|
+
|
|
105
|
+
# Collections for organizing content
|
|
106
|
+
collections:
|
|
107
|
+
getting-started:
|
|
108
|
+
permalink: "/:path/"
|
|
109
|
+
output: true
|
|
110
|
+
|
|
111
|
+
interfaces:
|
|
112
|
+
permalink: "/:collection/:path/"
|
|
113
|
+
output: true
|
|
114
|
+
|
|
115
|
+
features:
|
|
116
|
+
permalink: "/:collection/:path/"
|
|
117
|
+
output: true
|
|
118
|
+
|
|
119
|
+
understanding:
|
|
120
|
+
permalink: "/:collection/:path/"
|
|
121
|
+
output: true
|
|
122
|
+
|
|
123
|
+
advanced:
|
|
124
|
+
permalink: "/:collection/:path/"
|
|
125
|
+
output: true
|
|
126
|
+
|
|
127
|
+
guides:
|
|
128
|
+
permalink: "/:collection/:path/"
|
|
129
|
+
output: true
|
|
130
|
+
|
|
131
|
+
reference:
|
|
132
|
+
permalink: "/:collection/:path/"
|
|
133
|
+
output: true
|
|
134
|
+
|
|
135
|
+
# Just the Docs collection configuration
|
|
136
|
+
just_the_docs:
|
|
137
|
+
collections:
|
|
138
|
+
getting-started:
|
|
139
|
+
name: Getting Started
|
|
140
|
+
nav_fold: false
|
|
141
|
+
interfaces:
|
|
142
|
+
name: Interfaces
|
|
143
|
+
nav_fold: true
|
|
144
|
+
features:
|
|
145
|
+
name: Features
|
|
146
|
+
nav_fold: true
|
|
147
|
+
understanding:
|
|
148
|
+
name: Understanding
|
|
149
|
+
nav_fold: true
|
|
150
|
+
advanced:
|
|
151
|
+
name: Advanced
|
|
152
|
+
nav_fold: true
|
|
153
|
+
guides:
|
|
154
|
+
name: Guides
|
|
155
|
+
nav_fold: true
|
|
156
|
+
reference:
|
|
157
|
+
name: Reference
|
|
158
|
+
nav_fold: true
|
|
159
|
+
|
|
160
|
+
# Defaults
|
|
161
|
+
defaults:
|
|
162
|
+
- scope:
|
|
163
|
+
path: ""
|
|
164
|
+
type: getting-started
|
|
165
|
+
values:
|
|
166
|
+
layout: default
|
|
167
|
+
|
|
168
|
+
# Include additional files
|
|
169
|
+
include:
|
|
170
|
+
- "*.adoc"
|
|
171
|
+
|
|
172
|
+
# Exclude from processing
|
|
173
|
+
exclude:
|
|
174
|
+
- Gemfile
|
|
175
|
+
- Gemfile.lock
|
|
176
|
+
- node_modules
|
|
177
|
+
- vendor
|
|
178
|
+
- .sass-cache
|
|
179
|
+
- .jekyll-cache
|
|
180
|
+
- .bundle
|
|
181
|
+
- README.md
|
|
182
|
+
- LICENSE
|
|
183
|
+
- .git
|
|
184
|
+
- .gitignore
|
|
185
|
+
|
|
186
|
+
permalink: pretty
|