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.
Files changed (271) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +5 -0
  3. data/CLAUDE.md +19 -0
  4. data/CODE_OF_CONDUCT.md +10 -0
  5. data/README.adoc +335 -0
  6. data/Rakefile +12 -0
  7. data/docs/.lycheeignore +33 -0
  8. data/docs/Gemfile +10 -0
  9. data/docs/INDEX.adoc +67 -0
  10. data/docs/_config.yml +186 -0
  11. data/docs/advanced/element-classes.adoc +185 -0
  12. data/docs/advanced/frontend-customization.adoc +193 -0
  13. data/docs/advanced/index.adoc +14 -0
  14. data/docs/advanced/templates.adoc +123 -0
  15. data/docs/features/element-coverage.adoc +373 -0
  16. data/docs/features/html-output/data-model.adoc +285 -0
  17. data/docs/features/html-output/directory-mode.adoc +180 -0
  18. data/docs/features/html-output/index.adoc +90 -0
  19. data/docs/features/html-output/single-file-mode.adoc +125 -0
  20. data/docs/features/index-generation.adoc +197 -0
  21. data/docs/features/index.adoc +63 -0
  22. data/docs/features/numbering.adoc +183 -0
  23. data/docs/features/toc-generation.adoc +150 -0
  24. data/docs/features/xinclude/fragid-schemes.adoc +287 -0
  25. data/docs/features/xinclude/index.adoc +119 -0
  26. data/docs/features/xinclude/text-includes.adoc +123 -0
  27. data/docs/features/xinclude/xml-includes.adoc +167 -0
  28. data/docs/getting-started/index.adoc +50 -0
  29. data/docs/getting-started/installation.adoc +113 -0
  30. data/docs/getting-started/quick-start.adoc +161 -0
  31. data/docs/guides/converting-article.adoc +188 -0
  32. data/docs/guides/converting-book.adoc +192 -0
  33. data/docs/guides/index.adoc +12 -0
  34. data/docs/guides/roundtrip-testing.adoc +129 -0
  35. data/docs/interfaces/cli/format-command.adoc +109 -0
  36. data/docs/interfaces/cli/index.adoc +73 -0
  37. data/docs/interfaces/cli/roundtrip-command.adoc +125 -0
  38. data/docs/interfaces/cli/to-html-command.adoc +178 -0
  39. data/docs/interfaces/cli/validate-command.adoc +104 -0
  40. data/docs/interfaces/index.adoc +101 -0
  41. data/docs/interfaces/ruby-api/html-output.adoc +186 -0
  42. data/docs/interfaces/ruby-api/index.adoc +111 -0
  43. data/docs/interfaces/ruby-api/parsing.adoc +202 -0
  44. data/docs/interfaces/ruby-api/xinclude.adoc +162 -0
  45. data/docs/interfaces/ruby-api/xref-resolution.adoc +156 -0
  46. data/docs/lychee.toml +42 -0
  47. data/docs/reference/cli-options.adoc +155 -0
  48. data/docs/reference/content-block-types.adoc +243 -0
  49. data/docs/reference/glossary.adoc +119 -0
  50. data/docs/reference/index.adoc +12 -0
  51. data/docs/reference/supported-elements.adoc +749 -0
  52. data/docs/understanding/architecture.adoc +145 -0
  53. data/docs/understanding/content-pipeline.adoc +102 -0
  54. data/docs/understanding/data-models.adoc +156 -0
  55. data/docs/understanding/index.adoc +34 -0
  56. data/exe/docbook +7 -0
  57. data/frontend/dist/app.css +1 -0
  58. data/frontend/dist/app.iife.js +24 -0
  59. data/frontend/package-lock.json +1445 -0
  60. data/frontend/package.json +22 -0
  61. data/frontend/src/App.vue +230 -0
  62. data/frontend/src/app.ts +8 -0
  63. data/frontend/src/components/AppSidebar.vue +116 -0
  64. data/frontend/src/components/AppendixSection.vue +39 -0
  65. data/frontend/src/components/BlockRenderer.vue +358 -0
  66. data/frontend/src/components/ChapterSection.vue +32 -0
  67. data/frontend/src/components/ContentRenderer.vue +13 -0
  68. data/frontend/src/components/EbookContainer.vue +147 -0
  69. data/frontend/src/components/EbookTopBar.vue +116 -0
  70. data/frontend/src/components/PartSection.vue +44 -0
  71. data/frontend/src/components/ReferenceEntry.vue +80 -0
  72. data/frontend/src/components/SearchModal.vue +286 -0
  73. data/frontend/src/components/SectionContent.vue +31 -0
  74. data/frontend/src/components/SettingsPanel.vue +236 -0
  75. data/frontend/src/components/TocTreeItem.vue +135 -0
  76. data/frontend/src/composables/useEbookStore.ts +191 -0
  77. data/frontend/src/composables/useSearch.ts +249 -0
  78. data/frontend/src/env.d.ts +7 -0
  79. data/frontend/src/stores/documentStore.ts +221 -0
  80. data/frontend/src/stores/uiStore.ts +98 -0
  81. data/frontend/src/styles.css +253 -0
  82. data/frontend/tsconfig.json +24 -0
  83. data/frontend/tsconfig.node.json +11 -0
  84. data/frontend/vite.config.ts +30 -0
  85. data/lib/docbook/cli.rb +123 -0
  86. data/lib/docbook/document.rb +67 -0
  87. data/lib/docbook/elements/abbrev.rb +16 -0
  88. data/lib/docbook/elements/acknowledgements.rb +22 -0
  89. data/lib/docbook/elements/address.rb +18 -0
  90. data/lib/docbook/elements/alt.rb +16 -0
  91. data/lib/docbook/elements/annotation.rb +18 -0
  92. data/lib/docbook/elements/appendix.rb +34 -0
  93. data/lib/docbook/elements/article.rb +31 -0
  94. data/lib/docbook/elements/att.rb +15 -0
  95. data/lib/docbook/elements/attribution.rb +20 -0
  96. data/lib/docbook/elements/audioobject.rb +18 -0
  97. data/lib/docbook/elements/author.rb +18 -0
  98. data/lib/docbook/elements/bibliography.rb +24 -0
  99. data/lib/docbook/elements/bibliomixed.rb +40 -0
  100. data/lib/docbook/elements/biblioref.rb +20 -0
  101. data/lib/docbook/elements/blockquote.rb +26 -0
  102. data/lib/docbook/elements/book.rb +36 -0
  103. data/lib/docbook/elements/buildtarget.rb +16 -0
  104. data/lib/docbook/elements/callout.rb +22 -0
  105. data/lib/docbook/elements/calloutlist.rb +22 -0
  106. data/lib/docbook/elements/caution.rb +30 -0
  107. data/lib/docbook/elements/chapter.rb +62 -0
  108. data/lib/docbook/elements/citation.rb +16 -0
  109. data/lib/docbook/elements/citerefentry.rb +26 -0
  110. data/lib/docbook/elements/citetitle.rb +20 -0
  111. data/lib/docbook/elements/classname.rb +16 -0
  112. data/lib/docbook/elements/code.rb +16 -0
  113. data/lib/docbook/elements/colophon.rb +22 -0
  114. data/lib/docbook/elements/computeroutput.rb +18 -0
  115. data/lib/docbook/elements/copyright.rb +17 -0
  116. data/lib/docbook/elements/danger.rb +28 -0
  117. data/lib/docbook/elements/date.rb +16 -0
  118. data/lib/docbook/elements/dedication.rb +22 -0
  119. data/lib/docbook/elements/dir.rb +16 -0
  120. data/lib/docbook/elements/emphasis.rb +18 -0
  121. data/lib/docbook/elements/entry.rb +30 -0
  122. data/lib/docbook/elements/entrytbl.rb +22 -0
  123. data/lib/docbook/elements/equation.rb +26 -0
  124. data/lib/docbook/elements/example.rb +30 -0
  125. data/lib/docbook/elements/fieldsynopsis.rb +21 -0
  126. data/lib/docbook/elements/figure.rb +28 -0
  127. data/lib/docbook/elements/filename.rb +16 -0
  128. data/lib/docbook/elements/firstname.rb +16 -0
  129. data/lib/docbook/elements/firstterm.rb +18 -0
  130. data/lib/docbook/elements/footnote.rb +22 -0
  131. data/lib/docbook/elements/footnoteref.rb +21 -0
  132. data/lib/docbook/elements/foreignphrase.rb +18 -0
  133. data/lib/docbook/elements/formalpara.rb +20 -0
  134. data/lib/docbook/elements/function.rb +16 -0
  135. data/lib/docbook/elements/glossary.rb +24 -0
  136. data/lib/docbook/elements/glossdef.rb +18 -0
  137. data/lib/docbook/elements/glossentry.rb +26 -0
  138. data/lib/docbook/elements/glosssee.rb +18 -0
  139. data/lib/docbook/elements/glossseealso.rb +18 -0
  140. data/lib/docbook/elements/glossterm.rb +18 -0
  141. data/lib/docbook/elements/holder.rb +16 -0
  142. data/lib/docbook/elements/honorific.rb +16 -0
  143. data/lib/docbook/elements/imagedata.rb +29 -0
  144. data/lib/docbook/elements/imageobject.rb +22 -0
  145. data/lib/docbook/elements/important.rb +30 -0
  146. data/lib/docbook/elements/index.rb +26 -0
  147. data/lib/docbook/elements/indexdiv.rb +22 -0
  148. data/lib/docbook/elements/indexentry.rb +22 -0
  149. data/lib/docbook/elements/indexterm.rb +34 -0
  150. data/lib/docbook/elements/info.rb +25 -0
  151. data/lib/docbook/elements/informalexample.rb +24 -0
  152. data/lib/docbook/elements/informalfigure.rb +20 -0
  153. data/lib/docbook/elements/inlinemediaobject.rb +22 -0
  154. data/lib/docbook/elements/itemizedlist.rb +21 -0
  155. data/lib/docbook/elements/legalnotice.rb +22 -0
  156. data/lib/docbook/elements/link.rb +26 -0
  157. data/lib/docbook/elements/listitem.rb +32 -0
  158. data/lib/docbook/elements/literal.rb +16 -0
  159. data/lib/docbook/elements/literallayout.rb +22 -0
  160. data/lib/docbook/elements/mediaobject.rb +26 -0
  161. data/lib/docbook/elements/msg.rb +20 -0
  162. data/lib/docbook/elements/msgexplan.rb +22 -0
  163. data/lib/docbook/elements/msgset.rb +22 -0
  164. data/lib/docbook/elements/note.rb +30 -0
  165. data/lib/docbook/elements/orderedlist.rb +23 -0
  166. data/lib/docbook/elements/orgname.rb +16 -0
  167. data/lib/docbook/elements/para.rb +61 -0
  168. data/lib/docbook/elements/paragraph_like.rb +18 -0
  169. data/lib/docbook/elements/parameter.rb +16 -0
  170. data/lib/docbook/elements/part.rb +38 -0
  171. data/lib/docbook/elements/personname.rb +22 -0
  172. data/lib/docbook/elements/phrase.rb +20 -0
  173. data/lib/docbook/elements/preface.rb +58 -0
  174. data/lib/docbook/elements/primary.rb +16 -0
  175. data/lib/docbook/elements/procedure.rb +24 -0
  176. data/lib/docbook/elements/productname.rb +18 -0
  177. data/lib/docbook/elements/productnumber.rb +16 -0
  178. data/lib/docbook/elements/programlisting.rb +28 -0
  179. data/lib/docbook/elements/property.rb +16 -0
  180. data/lib/docbook/elements/pubdate.rb +16 -0
  181. data/lib/docbook/elements/publishername.rb +16 -0
  182. data/lib/docbook/elements/quotation.rb +24 -0
  183. data/lib/docbook/elements/quote.rb +18 -0
  184. data/lib/docbook/elements/refentry.rb +32 -0
  185. data/lib/docbook/elements/refentrytitle.rb +16 -0
  186. data/lib/docbook/elements/reference.rb +26 -0
  187. data/lib/docbook/elements/refmeta.rb +29 -0
  188. data/lib/docbook/elements/refmiscinfo.rb +16 -0
  189. data/lib/docbook/elements/refname.rb +16 -0
  190. data/lib/docbook/elements/refnamediv.rb +22 -0
  191. data/lib/docbook/elements/refpurpose.rb +16 -0
  192. data/lib/docbook/elements/refsect1.rb +22 -0
  193. data/lib/docbook/elements/refsect2.rb +22 -0
  194. data/lib/docbook/elements/refsect3.rb +22 -0
  195. data/lib/docbook/elements/refsection.rb +32 -0
  196. data/lib/docbook/elements/releaseinfo.rb +16 -0
  197. data/lib/docbook/elements/remark.rb +20 -0
  198. data/lib/docbook/elements/replaceable.rb +16 -0
  199. data/lib/docbook/elements/row.rb +15 -0
  200. data/lib/docbook/elements/screen.rb +28 -0
  201. data/lib/docbook/elements/secondary.rb +16 -0
  202. data/lib/docbook/elements/sect1.rb +26 -0
  203. data/lib/docbook/elements/sect2.rb +24 -0
  204. data/lib/docbook/elements/sect3.rb +24 -0
  205. data/lib/docbook/elements/sect4.rb +24 -0
  206. data/lib/docbook/elements/sect5.rb +22 -0
  207. data/lib/docbook/elements/section.rb +66 -0
  208. data/lib/docbook/elements/see.rb +16 -0
  209. data/lib/docbook/elements/seealso.rb +18 -0
  210. data/lib/docbook/elements/set.rb +26 -0
  211. data/lib/docbook/elements/setindex.rb +24 -0
  212. data/lib/docbook/elements/sidebar.rb +22 -0
  213. data/lib/docbook/elements/simplesect.rb +32 -0
  214. data/lib/docbook/elements/step.rb +26 -0
  215. data/lib/docbook/elements/substeps.rb +18 -0
  216. data/lib/docbook/elements/subtitle.rb +16 -0
  217. data/lib/docbook/elements/surname.rb +16 -0
  218. data/lib/docbook/elements/table.rb +24 -0
  219. data/lib/docbook/elements/tag.rb +20 -0
  220. data/lib/docbook/elements/tbody.rb +15 -0
  221. data/lib/docbook/elements/term.rb +37 -0
  222. data/lib/docbook/elements/tertiary.rb +16 -0
  223. data/lib/docbook/elements/textobject.rb +18 -0
  224. data/lib/docbook/elements/tfoot.rb +15 -0
  225. data/lib/docbook/elements/tgroup.rb +21 -0
  226. data/lib/docbook/elements/thead.rb +15 -0
  227. data/lib/docbook/elements/tip.rb +30 -0
  228. data/lib/docbook/elements/title.rb +16 -0
  229. data/lib/docbook/elements/toc.rb +24 -0
  230. data/lib/docbook/elements/tocdiv.rb +22 -0
  231. data/lib/docbook/elements/tocentry.rb +20 -0
  232. data/lib/docbook/elements/topic.rb +26 -0
  233. data/lib/docbook/elements/type.rb +16 -0
  234. data/lib/docbook/elements/uri.rb +16 -0
  235. data/lib/docbook/elements/userinput.rb +18 -0
  236. data/lib/docbook/elements/variable.rb +16 -0
  237. data/lib/docbook/elements/variablelist.rb +19 -0
  238. data/lib/docbook/elements/varlistentry.rb +17 -0
  239. data/lib/docbook/elements/version.rb +16 -0
  240. data/lib/docbook/elements/videoobject.rb +18 -0
  241. data/lib/docbook/elements/warning.rb +30 -0
  242. data/lib/docbook/elements/xref.rb +18 -0
  243. data/lib/docbook/elements/year.rb +16 -0
  244. data/lib/docbook/elements.rb +204 -0
  245. data/lib/docbook/models/document_metadata.rb +30 -0
  246. data/lib/docbook/models/document_root.rb +33 -0
  247. data/lib/docbook/models/index_entry.rb +28 -0
  248. data/lib/docbook/models/reading_position.rb +22 -0
  249. data/lib/docbook/models/section_number.rb +18 -0
  250. data/lib/docbook/models/section_root.rb +29 -0
  251. data/lib/docbook/models/toc_node.rb +24 -0
  252. data/lib/docbook/models.rb +16 -0
  253. data/lib/docbook/output/data.rb +196 -0
  254. data/lib/docbook/output/html.rb +1450 -0
  255. data/lib/docbook/output/index_generator.rb +281 -0
  256. data/lib/docbook/output.rb +8 -0
  257. data/lib/docbook/services/document_builder.rb +258 -0
  258. data/lib/docbook/services/element_to_hash.rb +287 -0
  259. data/lib/docbook/services/index_generator.rb +134 -0
  260. data/lib/docbook/services/numbering_service.rb +186 -0
  261. data/lib/docbook/services/toc_generator.rb +138 -0
  262. data/lib/docbook/services.rb +14 -0
  263. data/lib/docbook/templates/document.html.liquid +20 -0
  264. data/lib/docbook/templates/partials/_head.liquid +39 -0
  265. data/lib/docbook/templates/partials/_scripts.liquid +10 -0
  266. data/lib/docbook/version.rb +5 -0
  267. data/lib/docbook/xinclude_resolver.rb +217 -0
  268. data/lib/docbook/xref_resolver.rb +78 -0
  269. data/lib/docbook.rb +17 -0
  270. data/sig/docbook.rbs +4 -0
  271. metadata +385 -0
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+
4
+ module Docbook
5
+ module Elements
6
+ class Uri < Lutaml::Model::Serializable
7
+ attribute :content, :string
8
+
9
+ xml do
10
+ element "uri"
11
+ mixed_content
12
+ map_content to: :content
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+
4
+ module Docbook
5
+ module Elements
6
+ class UserInput < Lutaml::Model::Serializable
7
+ attribute :content, :string
8
+ attribute :xml_id, Lutaml::Xml::W3c::XmlIdType
9
+
10
+ xml do
11
+ element "userinput"
12
+ mixed_content
13
+ map_content to: :content
14
+ map_attribute "xml:id", to: :xml_id
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+
4
+ module Docbook
5
+ module Elements
6
+ class Variable < Lutaml::Model::Serializable
7
+ attribute :content, :string
8
+
9
+ xml do
10
+ element "variable"
11
+ mixed_content
12
+ map_content to: :content
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+
4
+ module Docbook
5
+ module Elements
6
+ class VariableList < Lutaml::Model::Serializable
7
+ attribute :xml_id, Lutaml::Xml::W3c::XmlIdType
8
+ attribute :role, :string
9
+ attribute :varlistentry, Varlistentry, collection: true
10
+
11
+ xml do
12
+ element "variablelist"
13
+ map_attribute "xml:id", to: :xml_id
14
+ map_attribute "role", to: :role
15
+ map_element "varlistentry", to: :varlistentry
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+
4
+ module Docbook
5
+ module Elements
6
+ class Varlistentry < Lutaml::Model::Serializable
7
+ attribute :term, Term, collection: true
8
+ attribute :listitem, ListItem
9
+
10
+ xml do
11
+ element "varlistentry"
12
+ map_element "term", to: :term
13
+ map_element "listitem", to: :listitem
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+
4
+ module Docbook
5
+ module Elements
6
+ class Version < Lutaml::Model::Serializable
7
+ attribute :content, :string
8
+
9
+ xml do
10
+ element "version"
11
+ mixed_content
12
+ map_content to: :content
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+
4
+ module Docbook
5
+ module Elements
6
+ class VideoObject < Lutaml::Model::Serializable
7
+ attribute :content, :string
8
+ attribute :xml_id, Lutaml::Xml::W3c::XmlIdType
9
+
10
+ xml do
11
+ element "videoobject"
12
+ mixed_content
13
+ map_content to: :content
14
+ map_attribute "xml:id", to: :xml_id
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+
4
+ module Docbook
5
+ module Elements
6
+ class Warning < Lutaml::Model::Serializable
7
+ attribute :content, :string
8
+ attribute :xml_id, Lutaml::Xml::W3c::XmlIdType
9
+ attribute :role, :string
10
+ attribute :title, Title
11
+ attribute :para, Para, collection: true
12
+ attribute :programlisting, ProgramListing, collection: true
13
+ attribute :screen, Screen, collection: true
14
+ attribute :literallayout, LiteralLayout, collection: true
15
+
16
+ xml do
17
+ element "warning"
18
+ mixed_content
19
+ map_content to: :content
20
+ map_attribute "xml:id", to: :xml_id
21
+ map_attribute "role", to: :role
22
+ map_element "title", to: :title
23
+ map_element "para", to: :para
24
+ map_element "programlisting", to: :programlisting
25
+ map_element "screen", to: :screen
26
+ map_element "literallayout", to: :literallayout
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+
4
+ module Docbook
5
+ module Elements
6
+ class Xref < Lutaml::Model::Serializable
7
+ attribute :content, :string
8
+ attribute :linkend, :string
9
+
10
+ xml do
11
+ element "xref"
12
+ mixed_content
13
+ map_content to: :content
14
+ map_attribute "linkend", to: :linkend
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+
4
+ module Docbook
5
+ module Elements
6
+ class Year < Lutaml::Model::Serializable
7
+ attribute :content, :string
8
+
9
+ xml do
10
+ element "year"
11
+ mixed_content
12
+ map_content to: :content
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,204 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Docbook
4
+ module Elements
5
+ # Structural elements
6
+ autoload :Article, "#{__dir__}/elements/article"
7
+ autoload :Book, "#{__dir__}/elements/book"
8
+ autoload :Chapter, "#{__dir__}/elements/chapter"
9
+ autoload :Part, "#{__dir__}/elements/part"
10
+ autoload :Section, "#{__dir__}/elements/section"
11
+ autoload :Appendix, "#{__dir__}/elements/appendix"
12
+ autoload :Preface, "#{__dir__}/elements/preface"
13
+ autoload :SetIndex, "#{__dir__}/elements/setindex"
14
+ autoload :RefEntry, "#{__dir__}/elements/refentry"
15
+ autoload :RefSection, "#{__dir__}/elements/refsection"
16
+ autoload :RefSect1, "#{__dir__}/elements/refsect1"
17
+ autoload :RefSect2, "#{__dir__}/elements/refsect2"
18
+ autoload :RefSect3, "#{__dir__}/elements/refsect3"
19
+ autoload :Sect1, "#{__dir__}/elements/sect1"
20
+ autoload :Sect2, "#{__dir__}/elements/sect2"
21
+ autoload :Sect3, "#{__dir__}/elements/sect3"
22
+ autoload :Sect4, "#{__dir__}/elements/sect4"
23
+ autoload :Sect5, "#{__dir__}/elements/sect5"
24
+ autoload :Dedication, "#{__dir__}/elements/dedication"
25
+ autoload :Acknowledgements, "#{__dir__}/elements/acknowledgements"
26
+ autoload :Colophon, "#{__dir__}/elements/colophon"
27
+ autoload :Set, "#{__dir__}/elements/set"
28
+ autoload :Reference, "#{__dir__}/elements/reference"
29
+ autoload :Topic, "#{__dir__}/elements/topic"
30
+
31
+ # Metadata elements
32
+ autoload :Info, "#{__dir__}/elements/info"
33
+ autoload :Title, "#{__dir__}/elements/title"
34
+ autoload :Subtitle, "#{__dir__}/elements/subtitle"
35
+ autoload :Author, "#{__dir__}/elements/author"
36
+ autoload :PersonName, "#{__dir__}/elements/personname"
37
+ autoload :FirstName, "#{__dir__}/elements/firstname"
38
+ autoload :Surname, "#{__dir__}/elements/surname"
39
+ autoload :Honorific, "#{__dir__}/elements/honorific"
40
+ autoload :Copyright, "#{__dir__}/elements/copyright"
41
+ autoload :Year, "#{__dir__}/elements/year"
42
+ autoload :Holder, "#{__dir__}/elements/holder"
43
+ autoload :LegalNotice, "#{__dir__}/elements/legalnotice"
44
+ autoload :ReleaseInfo, "#{__dir__}/elements/releaseinfo"
45
+ autoload :PubDate, "#{__dir__}/elements/pubdate"
46
+ autoload :Date, "#{__dir__}/elements/date"
47
+ autoload :ProductName, "#{__dir__}/elements/productname"
48
+ autoload :ProductNumber, "#{__dir__}/elements/productnumber"
49
+ autoload :Version, "#{__dir__}/elements/version"
50
+
51
+ # Block elements
52
+ autoload :Para, "#{__dir__}/elements/para"
53
+ autoload :FormalPara, "#{__dir__}/elements/formalpara"
54
+ autoload :Simplesect, "#{__dir__}/elements/simplesect"
55
+ autoload :SimPara, "#{__dir__}/elements/paragraph_like"
56
+
57
+ # List elements
58
+ autoload :OrderedList, "#{__dir__}/elements/orderedlist"
59
+ autoload :ItemizedList, "#{__dir__}/elements/itemizedlist"
60
+ autoload :VariableList, "#{__dir__}/elements/variablelist"
61
+ autoload :ListItem, "#{__dir__}/elements/listitem"
62
+ autoload :Varlistentry, "#{__dir__}/elements/varlistentry"
63
+ autoload :Term, "#{__dir__}/elements/term"
64
+
65
+ # Link elements
66
+ autoload :Link, "#{__dir__}/elements/link"
67
+ autoload :Xref, "#{__dir__}/elements/xref"
68
+ autoload :Uri, "#{__dir__}/elements/uri"
69
+
70
+ # Inline elements
71
+ autoload :Emphasis, "#{__dir__}/elements/emphasis"
72
+ autoload :Property, "#{__dir__}/elements/property"
73
+ autoload :Code, "#{__dir__}/elements/code"
74
+ autoload :Literal, "#{__dir__}/elements/literal"
75
+ autoload :Filename, "#{__dir__}/elements/filename"
76
+ autoload :ClassName, "#{__dir__}/elements/classname"
77
+ autoload :Function, "#{__dir__}/elements/function"
78
+ autoload :Parameter, "#{__dir__}/elements/parameter"
79
+ autoload :Variable, "#{__dir__}/elements/variable"
80
+ autoload :Type, "#{__dir__}/elements/type"
81
+ autoload :Tag, "#{__dir__}/elements/tag"
82
+ autoload :Att, "#{__dir__}/elements/att"
83
+ autoload :Quote, "#{__dir__}/elements/quote"
84
+ autoload :Citation, "#{__dir__}/elements/citation"
85
+ autoload :CiterefEntry, "#{__dir__}/elements/citerefentry"
86
+ autoload :Citetitle, "#{__dir__}/elements/citetitle"
87
+ autoload :Abbrev, "#{__dir__}/elements/abbrev"
88
+ autoload :FirstTerm, "#{__dir__}/elements/firstterm"
89
+ autoload :Glossterm, "#{__dir__}/elements/glossterm"
90
+ autoload :ForeignPhrase, "#{__dir__}/elements/foreignphrase"
91
+ autoload :Phrase, "#{__dir__}/elements/phrase"
92
+ autoload :BuildTarget, "#{__dir__}/elements/buildtarget"
93
+ autoload :Dir, "#{__dir__}/elements/dir"
94
+ autoload :Replaceable, "#{__dir__}/elements/replaceable"
95
+
96
+ # Media elements
97
+ autoload :MediaObject, "#{__dir__}/elements/mediaobject"
98
+ autoload :ImageObject, "#{__dir__}/elements/imageobject"
99
+ autoload :ImageData, "#{__dir__}/elements/imagedata"
100
+ autoload :Alt, "#{__dir__}/elements/alt"
101
+ autoload :Figure, "#{__dir__}/elements/figure"
102
+ autoload :InformalFigure, "#{__dir__}/elements/informalfigure"
103
+ autoload :Inlinemediaobject, "#{__dir__}/elements/inlinemediaobject"
104
+ autoload :ProgramListing, "#{__dir__}/elements/programlisting"
105
+ autoload :Screen, "#{__dir__}/elements/screen"
106
+ autoload :ComputerOutput, "#{__dir__}/elements/computeroutput"
107
+ autoload :UserInput, "#{__dir__}/elements/userinput"
108
+ autoload :TextObject, "#{__dir__}/elements/textobject"
109
+ autoload :AudioObject, "#{__dir__}/elements/audioobject"
110
+ autoload :VideoObject, "#{__dir__}/elements/videoobject"
111
+
112
+ # Table elements
113
+ autoload :Table, "#{__dir__}/elements/table"
114
+ autoload :TGroup, "#{__dir__}/elements/tgroup"
115
+ autoload :THead, "#{__dir__}/elements/thead"
116
+ autoload :TBody, "#{__dir__}/elements/tbody"
117
+ autoload :TFoot, "#{__dir__}/elements/tfoot"
118
+ autoload :Row, "#{__dir__}/elements/row"
119
+ autoload :Entry, "#{__dir__}/elements/entry"
120
+ autoload :EntryTbl, "#{__dir__}/elements/entrytbl"
121
+
122
+ # Admonition elements
123
+ autoload :Note, "#{__dir__}/elements/note"
124
+ autoload :Warning, "#{__dir__}/elements/warning"
125
+ autoload :Caution, "#{__dir__}/elements/caution"
126
+ autoload :Important, "#{__dir__}/elements/important"
127
+ autoload :Tip, "#{__dir__}/elements/tip"
128
+ autoload :Danger, "#{__dir__}/elements/danger"
129
+
130
+ # Bibliography elements
131
+ autoload :Bibliography, "#{__dir__}/elements/bibliography"
132
+ autoload :Bibliomixed, "#{__dir__}/elements/bibliomixed"
133
+ autoload :Biblioref, "#{__dir__}/elements/biblioref"
134
+ autoload :OrgName, "#{__dir__}/elements/orgname"
135
+ autoload :PublisherName, "#{__dir__}/elements/publishername"
136
+
137
+ # Glossary elements
138
+ autoload :Glossary, "#{__dir__}/elements/glossary"
139
+ autoload :GlossEntry, "#{__dir__}/elements/glossentry"
140
+ autoload :GlossDef, "#{__dir__}/elements/glossdef"
141
+ autoload :GlossSee, "#{__dir__}/elements/glosssee"
142
+ autoload :GlossSeeAlso, "#{__dir__}/elements/glossseealso"
143
+
144
+ # Index elements
145
+ autoload :Index, "#{__dir__}/elements/index"
146
+ autoload :IndexTerm, "#{__dir__}/elements/indexterm"
147
+ autoload :IndexDiv, "#{__dir__}/elements/indexdiv"
148
+ autoload :IndexEntry, "#{__dir__}/elements/indexentry"
149
+ autoload :Primary, "#{__dir__}/elements/primary"
150
+ autoload :Secondary, "#{__dir__}/elements/secondary"
151
+ autoload :Tertiary, "#{__dir__}/elements/tertiary"
152
+ autoload :See, "#{__dir__}/elements/see"
153
+ autoload :SeeAlso, "#{__dir__}/elements/seealso"
154
+
155
+ # TOC elements
156
+ autoload :Toc, "#{__dir__}/elements/toc"
157
+ autoload :TocDiv, "#{__dir__}/elements/tocdiv"
158
+ autoload :TocEntry, "#{__dir__}/elements/tocentry"
159
+
160
+ # Footnote elements
161
+ autoload :Footnote, "#{__dir__}/elements/footnote"
162
+ autoload :FootnoteRef, "#{__dir__}/elements/footnoteref"
163
+
164
+ # Callout elements
165
+ autoload :Callout, "#{__dir__}/elements/callout"
166
+ autoload :CalloutList, "#{__dir__}/elements/calloutlist"
167
+
168
+ # Example / Equation elements
169
+ autoload :Example, "#{__dir__}/elements/example"
170
+ autoload :InformalExample, "#{__dir__}/elements/informalexample"
171
+ autoload :Equation, "#{__dir__}/elements/equation"
172
+
173
+ # Procedure elements
174
+ autoload :Procedure, "#{__dir__}/elements/procedure"
175
+ autoload :Step, "#{__dir__}/elements/step"
176
+ autoload :SubSteps, "#{__dir__}/elements/substeps"
177
+
178
+ # Sidebar
179
+ autoload :SideBar, "#{__dir__}/elements/sidebar"
180
+
181
+ # Remark
182
+ autoload :Remark, "#{__dir__}/elements/remark"
183
+
184
+ # Other elements
185
+ autoload :BlockQuote, "#{__dir__}/elements/blockquote"
186
+ autoload :Quotation, "#{__dir__}/elements/quotation"
187
+ autoload :Attribution, "#{__dir__}/elements/attribution"
188
+ autoload :MsgSet, "#{__dir__}/elements/msgset"
189
+ autoload :Msg, "#{__dir__}/elements/msg"
190
+ autoload :Msgexplan, "#{__dir__}/elements/msgexplan"
191
+ autoload :LiteralLayout, "#{__dir__}/elements/literallayout"
192
+ autoload :Address, "#{__dir__}/elements/address"
193
+ autoload :Annotation, "#{__dir__}/elements/annotation"
194
+
195
+ # RefEntry elements
196
+ autoload :RefMeta, "#{__dir__}/elements/refmeta"
197
+ autoload :RefNamediv, "#{__dir__}/elements/refnamediv"
198
+ autoload :RefPurpose, "#{__dir__}/elements/refpurpose"
199
+ autoload :RefName, "#{__dir__}/elements/refname"
200
+ autoload :RefEntryTitle, "#{__dir__}/elements/refentrytitle"
201
+ autoload :RefMiscInfo, "#{__dir__}/elements/refmiscinfo"
202
+ autoload :FieldSynopsis, "#{__dir__}/elements/fieldsynopsis"
203
+ end
204
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Docbook
4
+ module Models
5
+ # Document Metadata - document-level information
6
+ class DocumentMetadata < Lutaml::Model::Serializable
7
+ attribute :author, :string
8
+ attribute :author_name, :string
9
+ attribute :title, :string
10
+ attribute :subtitle, :string
11
+ attribute :productname, :string
12
+ attribute :version, :string
13
+ attribute :pubdate, :string
14
+ attribute :release_info, :string
15
+ attribute :abstract, :string
16
+
17
+ json do
18
+ map "author", to: :author
19
+ map "authorName", to: :author_name
20
+ map "title", to: :title
21
+ map "subtitle", to: :subtitle
22
+ map "productname", to: :productname
23
+ map "version", to: :version
24
+ map "pubdate", to: :pubdate
25
+ map "releaseInfo", to: :release_info
26
+ map "abstract", to: :abstract
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Docbook
4
+ module Models
5
+ # DocumentRoot - top-level document structure for Vue SPA
6
+ # Combines Lutaml XML models with Ruby-generated pre-computed data
7
+ class DocumentRoot < Lutaml::Model::Serializable
8
+ attribute :title, :string
9
+ attribute :metadata, DocumentMetadata
10
+ attribute :toc, TocNode, collection: true
11
+ attribute :sections, SectionRoot, collection: true
12
+ attribute :index, IndexEntry, collection: true
13
+ attribute :numbering, SectionNumber, collection: true
14
+ attribute :reading_position, ReadingPosition
15
+
16
+ # Version info for debugging
17
+ attribute :generator, :string
18
+ attribute :generated_at, :string
19
+
20
+ json do
21
+ map "title", to: :title
22
+ map "metadata", to: :metadata
23
+ map "toc", to: :toc
24
+ map "sections", to: :sections
25
+ map "index", to: :index
26
+ map "numbering", to: :numbering
27
+ map "readingPosition", to: :reading_position
28
+ map "generator", to: :generator
29
+ map "generatedAt", to: :generated_at
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Docbook
4
+ module Models
5
+ # Index Entry - represents a single entry in the generated index
6
+ class IndexEntry < Lutaml::Model::Serializable
7
+ attribute :primary, :string
8
+ attribute :secondary, :string, collection: true
9
+ attribute :tertiary, :string, collection: true
10
+ attribute :see_also, :string, collection: true
11
+ attribute :section_id, :string
12
+ attribute :section_title, :string
13
+
14
+ # Sort key for alphabetical ordering (lowercased, stripped)
15
+ attribute :sort_key, :string
16
+
17
+ json do
18
+ map "primary", to: :primary
19
+ map "secondary", to: :secondary
20
+ map "tertiary", to: :tertiary
21
+ map "seeAlso", to: :see_also
22
+ map "sectionId", to: :section_id
23
+ map "sectionTitle", to: :section_title
24
+ map "sortKey", to: :sort_key
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Docbook
4
+ module Models
5
+ # Reading Position - user's reading progress
6
+ class ReadingPosition < Lutaml::Model::Serializable
7
+ attribute :section_id, :string
8
+ attribute :percentage, :float
9
+ attribute :last_read_at, :string
10
+ attribute :reading_mode, :string # scroll, page, chapter, reference
11
+ attribute :scroll_position, :integer
12
+
13
+ json do
14
+ map "sectionId", to: :section_id
15
+ map "percentage", to: :percentage
16
+ map "lastReadAt", to: :last_read_at
17
+ map "readingMode", to: :reading_mode
18
+ map "scrollPosition", to: :scroll_position
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Docbook
4
+ module Models
5
+ # Section Number - pre-computed numbering for sections
6
+ class SectionNumber < Lutaml::Model::Serializable
7
+ attribute :id, :string
8
+ attribute :number, :string # "I", "1", "1.2", "A", etc.
9
+ attribute :type, :string # part, chapter, section, appendix, refentry
10
+
11
+ json do
12
+ map "id", to: :id
13
+ map "number", to: :number
14
+ map "type", to: :type
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Docbook
4
+ module Models
5
+ # SectionRoot - wraps a section's XML content with pre-computed metadata
6
+ # This combines the Lutaml model with Ruby-generated data (numbering, etc.)
7
+ class SectionRoot < Lutaml::Model::Serializable
8
+ attribute :id, :string
9
+ attribute :type, :string # chapter, section, appendix, part, reference, refentry
10
+ attribute :title, :string
11
+ attribute :number, :string # Pre-computed number like "I", "1.2", "A"
12
+
13
+ # Nested child sections
14
+ attribute :children, SectionRoot, collection: true
15
+
16
+ # For reference entries: the refname
17
+ attribute :refname, :string
18
+
19
+ json do
20
+ map "id", to: :id
21
+ map "type", to: :type
22
+ map "title", to: :title
23
+ map "number", to: :number
24
+ map "children", to: :children
25
+ map "refname", to: :refname
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Docbook
4
+ module Models
5
+ # TOC Node - represents a single entry in the table of contents
6
+ class TocNode < Lutaml::Model::Serializable
7
+ attribute :id, :string
8
+ attribute :title, :string
9
+ attribute :type, :string # part, chapter, section, appendix, reference
10
+ attribute :number, :string
11
+ attribute :children, TocNode, collection: true
12
+ attribute :page, :integer # Page number for PDF navigation
13
+
14
+ json do
15
+ map "id", to: :id
16
+ map "title", to: :title
17
+ map "type", to: :type
18
+ map "number", to: :number
19
+ map "children", to: :children
20
+ map "page", to: :page
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Docbook
4
+ module Models
5
+ # Pre-computed models for Vue SPA
6
+ MODELS_DIR = "#{__dir__}/models"
7
+
8
+ autoload :TocNode, "#{MODELS_DIR}/toc_node"
9
+ autoload :IndexEntry, "#{MODELS_DIR}/index_entry"
10
+ autoload :SectionNumber, "#{MODELS_DIR}/section_number"
11
+ autoload :ReadingPosition, "#{MODELS_DIR}/reading_position"
12
+ autoload :DocumentMetadata, "#{MODELS_DIR}/document_metadata"
13
+ autoload :SectionRoot, "#{MODELS_DIR}/section_root"
14
+ autoload :DocumentRoot, "#{MODELS_DIR}/document_root"
15
+ end
16
+ end