sts 0.5.2 → 0.5.3

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 (197) hide show
  1. checksums.yaml +4 -4
  2. data/.gitmodules +3 -0
  3. data/.rubocop.yml +3 -0
  4. data/.rubocop_todo.yml +17 -3
  5. data/CLAUDE.md +72 -0
  6. data/Gemfile +1 -1
  7. data/lib/sts/content_groups/helpers.rb +27 -0
  8. data/lib/sts/enum_values.rb +17 -0
  9. data/lib/sts/iso_sts/app.rb +26 -1
  10. data/lib/sts/iso_sts/app_group.rb +1 -0
  11. data/lib/sts/iso_sts/array.rb +1 -0
  12. data/lib/sts/iso_sts/back.rb +1 -0
  13. data/lib/sts/iso_sts/body.rb +4 -0
  14. data/lib/sts/iso_sts/bold.rb +23 -11
  15. data/lib/sts/iso_sts/caption.rb +1 -0
  16. data/lib/sts/iso_sts/content_groups/highlight_elements.rb +285 -0
  17. data/lib/sts/iso_sts/def.rb +1 -0
  18. data/lib/sts/iso_sts/def_item.rb +1 -0
  19. data/lib/sts/iso_sts/def_list.rb +1 -0
  20. data/lib/sts/iso_sts/disp_formula.rb +5 -1
  21. data/lib/sts/iso_sts/document_identification.rb +1 -0
  22. data/lib/sts/iso_sts/fig.rb +1 -0
  23. data/lib/sts/iso_sts/fn.rb +1 -0
  24. data/lib/sts/iso_sts/fn_group.rb +1 -0
  25. data/lib/sts/iso_sts/front.rb +3 -0
  26. data/lib/sts/iso_sts/graphic.rb +5 -0
  27. data/lib/sts/iso_sts/inline_formula.rb +1 -1
  28. data/lib/sts/iso_sts/iso_meta.rb +2 -1
  29. data/lib/sts/iso_sts/italic.rb +23 -11
  30. data/lib/sts/iso_sts/list.rb +1 -0
  31. data/lib/sts/iso_sts/list_item.rb +7 -4
  32. data/lib/sts/iso_sts/mathml2/math.rb +20 -18
  33. data/lib/sts/iso_sts/mixed_citation.rb +34 -10
  34. data/lib/sts/iso_sts/nat_meta.rb +1 -0
  35. data/lib/sts/iso_sts/non_normative_example.rb +5 -0
  36. data/lib/sts/iso_sts/non_normative_note.rb +1 -0
  37. data/lib/sts/iso_sts/paragraph.rb +32 -20
  38. data/lib/sts/iso_sts/permissions.rb +1 -0
  39. data/lib/sts/iso_sts/preformat.rb +8 -5
  40. data/lib/sts/iso_sts/ref.rb +1 -0
  41. data/lib/sts/iso_sts/ref_list.rb +1 -0
  42. data/lib/sts/iso_sts/reg_meta.rb +1 -0
  43. data/lib/sts/iso_sts/sec.rb +10 -0
  44. data/lib/sts/iso_sts/standard.rb +6 -0
  45. data/lib/sts/iso_sts/standard_cross_reference.rb +1 -0
  46. data/lib/sts/iso_sts/standard_identification.rb +1 -0
  47. data/lib/sts/iso_sts/std.rb +4 -4
  48. data/lib/sts/iso_sts/styled_content.rb +17 -15
  49. data/lib/sts/iso_sts/table.rb +1 -0
  50. data/lib/sts/iso_sts/table_wrap.rb +1 -0
  51. data/lib/sts/iso_sts/table_wrap_foot.rb +1 -0
  52. data/lib/sts/iso_sts/td.rb +32 -14
  53. data/lib/sts/iso_sts/term.rb +1 -1
  54. data/lib/sts/iso_sts/term_sec.rb +1 -0
  55. data/lib/sts/iso_sts/th.rb +32 -14
  56. data/lib/sts/iso_sts/title.rb +15 -7
  57. data/lib/sts/iso_sts/title_wrap.rb +1 -0
  58. data/lib/sts/iso_sts/tr.rb +1 -0
  59. data/lib/sts/iso_sts.rb +2 -0
  60. data/lib/sts/{niso_sts/mathml.rb → mathml.rb} +1 -3
  61. data/lib/sts/namespaces.rb +1 -0
  62. data/lib/sts/niso_sts/abstract.rb +1 -0
  63. data/lib/sts/niso_sts/ack.rb +1 -1
  64. data/lib/sts/niso_sts/address.rb +1 -0
  65. data/lib/sts/niso_sts/adoption.rb +1 -1
  66. data/lib/sts/niso_sts/adoption_front.rb +1 -0
  67. data/lib/sts/niso_sts/alternatives.rb +1 -4
  68. data/lib/sts/niso_sts/annotation.rb +1 -3
  69. data/lib/sts/niso_sts/app.rb +14 -1
  70. data/lib/sts/niso_sts/app_group.rb +5 -0
  71. data/lib/sts/niso_sts/author_comment.rb +1 -3
  72. data/lib/sts/niso_sts/author_notes.rb +1 -1
  73. data/lib/sts/niso_sts/award_group.rb +1 -0
  74. data/lib/sts/niso_sts/back.rb +5 -4
  75. data/lib/sts/niso_sts/bio.rb +1 -3
  76. data/lib/sts/niso_sts/body.rb +36 -0
  77. data/lib/sts/niso_sts/boxed_text.rb +5 -1
  78. data/lib/sts/niso_sts/break.rb +11 -0
  79. data/lib/sts/niso_sts/caption.rb +7 -1
  80. data/lib/sts/niso_sts/chem_struct_wrap.rb +1 -0
  81. data/lib/sts/niso_sts/citation_alternatives.rb +1 -0
  82. data/lib/sts/niso_sts/collab.rb +8 -0
  83. data/lib/sts/niso_sts/conference.rb +1 -0
  84. data/lib/sts/niso_sts/content_groups/body_elements.rb +50 -0
  85. data/lib/sts/niso_sts/content_groups/citation_elements.rb +74 -0
  86. data/lib/sts/niso_sts/content_groups/emphasized_text.rb +67 -0
  87. data/lib/sts/niso_sts/content_groups/highlight_elements.rb +51 -0
  88. data/lib/sts/niso_sts/content_groups/inside_cell.rb +116 -0
  89. data/lib/sts/niso_sts/content_groups/p_elements.rb +41 -0
  90. data/lib/sts/niso_sts/content_groups/para_level.rb +67 -0
  91. data/lib/sts/niso_sts/content_groups/styled_content_elements.rb +93 -0
  92. data/lib/sts/niso_sts/content_groups/table_group_attributes.rb +62 -0
  93. data/lib/sts/niso_sts/content_groups.rb +8 -0
  94. data/lib/sts/niso_sts/contrib.rb +1 -0
  95. data/lib/sts/niso_sts/contrib_group.rb +1 -0
  96. data/lib/sts/niso_sts/counts.rb +1 -0
  97. data/lib/sts/niso_sts/custom_meta.rb +1 -0
  98. data/lib/sts/niso_sts/date.rb +1 -0
  99. data/lib/sts/niso_sts/def_item.rb +9 -0
  100. data/lib/sts/niso_sts/def_list.rb +6 -1
  101. data/lib/sts/niso_sts/disp_formula_group.rb +3 -4
  102. data/lib/sts/niso_sts/disp_quote.rb +1 -1
  103. data/lib/sts/niso_sts/display_formula.rb +12 -0
  104. data/lib/sts/niso_sts/document_identification.rb +1 -0
  105. data/lib/sts/niso_sts/editing_instruction.rb +1 -3
  106. data/lib/sts/niso_sts/element_citation.rb +1 -1
  107. data/lib/sts/niso_sts/ext_link.rb +16 -2
  108. data/lib/sts/niso_sts/fig_group.rb +1 -0
  109. data/lib/sts/niso_sts/figure.rb +14 -1
  110. data/lib/sts/niso_sts/floats_group.rb +1 -4
  111. data/lib/sts/niso_sts/fn.rb +2 -1
  112. data/lib/sts/niso_sts/front.rb +1 -0
  113. data/lib/sts/niso_sts/funding_group.rb +1 -0
  114. data/lib/sts/niso_sts/glossary.rb +1 -1
  115. data/lib/sts/niso_sts/graphic.rb +2 -0
  116. data/lib/sts/niso_sts/ics.rb +2 -0
  117. data/lib/sts/niso_sts/index_term.rb +1 -0
  118. data/lib/sts/niso_sts/inline_formula.rb +11 -0
  119. data/lib/sts/niso_sts/institution_wrap.rb +1 -0
  120. data/lib/sts/niso_sts/kwd_group.rb +1 -0
  121. data/lib/sts/niso_sts/label.rb +3 -2
  122. data/lib/sts/niso_sts/list.rb +7 -2
  123. data/lib/sts/niso_sts/list_item.rb +7 -2
  124. data/lib/sts/niso_sts/media.rb +1 -0
  125. data/lib/sts/niso_sts/meta_note.rb +1 -1
  126. data/lib/sts/niso_sts/metadata_iso.rb +1 -1
  127. data/lib/sts/niso_sts/metadata_std.rb +16 -6
  128. data/lib/sts/niso_sts/milestone_end.rb +1 -3
  129. data/lib/sts/niso_sts/milestone_start.rb +1 -3
  130. data/lib/sts/niso_sts/mixed_citation.rb +22 -0
  131. data/lib/sts/niso_sts/monospace.rb +9 -0
  132. data/lib/sts/niso_sts/name.rb +1 -0
  133. data/lib/sts/niso_sts/nat_meta.rb +1 -0
  134. data/lib/sts/niso_sts/nested_kwd.rb +1 -0
  135. data/lib/sts/niso_sts/nlm_citation.rb +1 -1
  136. data/lib/sts/niso_sts/non_normative_example.rb +15 -2
  137. data/lib/sts/niso_sts/non_normative_note.rb +12 -2
  138. data/lib/sts/niso_sts/normative_example.rb +1 -1
  139. data/lib/sts/niso_sts/normative_note.rb +1 -1
  140. data/lib/sts/niso_sts/note.rb +1 -1
  141. data/lib/sts/niso_sts/notes.rb +1 -1
  142. data/lib/sts/niso_sts/notes_group.rb +1 -0
  143. data/lib/sts/niso_sts/open_access.rb +1 -4
  144. data/lib/sts/niso_sts/paragraph.rb +37 -7
  145. data/lib/sts/niso_sts/permissions.rb +1 -0
  146. data/lib/sts/niso_sts/preformat.rb +15 -0
  147. data/lib/sts/niso_sts/private_char.rb +1 -3
  148. data/lib/sts/niso_sts/pub_date.rb +2 -0
  149. data/lib/sts/niso_sts/publisher.rb +1 -0
  150. data/lib/sts/niso_sts/reference.rb +1 -0
  151. data/lib/sts/niso_sts/reference_list.rb +6 -1
  152. data/lib/sts/niso_sts/reference_standard.rb +2 -0
  153. data/lib/sts/niso_sts/reg_meta.rb +1 -0
  154. data/lib/sts/niso_sts/release_date.rb +9 -6
  155. data/lib/sts/niso_sts/ruby.rb +1 -0
  156. data/lib/sts/niso_sts/section.rb +39 -4
  157. data/lib/sts/niso_sts/speech.rb +1 -1
  158. data/lib/sts/niso_sts/standard.rb +3 -0
  159. data/lib/sts/niso_sts/standard_identification.rb +1 -1
  160. data/lib/sts/niso_sts/statement.rb +1 -1
  161. data/lib/sts/niso_sts/std_doc_meta.rb +1 -0
  162. data/lib/sts/niso_sts/std_org.rb +1 -0
  163. data/lib/sts/niso_sts/styled_content.rb +37 -0
  164. data/lib/sts/niso_sts/sub.rb +11 -0
  165. data/lib/sts/niso_sts/subj_group.rb +1 -0
  166. data/lib/sts/niso_sts/sup.rb +13 -0
  167. data/lib/sts/niso_sts/supplementary_material.rb +1 -0
  168. data/lib/sts/niso_sts/term_display.rb +1 -0
  169. data/lib/sts/niso_sts/term_section.rb +3 -3
  170. data/lib/sts/niso_sts/title.rb +20 -0
  171. data/lib/sts/niso_sts/trans_abstract.rb +1 -0
  172. data/lib/sts/niso_sts/underline.rb +5 -0
  173. data/lib/sts/niso_sts/uri.rb +2 -0
  174. data/lib/sts/niso_sts/verse_group.rb +1 -1
  175. data/lib/sts/niso_sts/volume_issue_group.rb +1 -4
  176. data/lib/sts/tbx_iso_tml/bold.rb +28 -1
  177. data/lib/sts/tbx_iso_tml/col.rb +10 -0
  178. data/lib/sts/tbx_iso_tml/definition.rb +16 -2
  179. data/lib/sts/tbx_iso_tml/example.rb +9 -1
  180. data/lib/sts/tbx_iso_tml/fn.rb +3 -2
  181. data/lib/sts/tbx_iso_tml/italic.rb +25 -1
  182. data/lib/sts/tbx_iso_tml/msup.rb +2 -1
  183. data/lib/sts/tbx_iso_tml/note.rb +11 -7
  184. data/lib/sts/tbx_iso_tml/source.rb +4 -0
  185. data/lib/sts/tbx_iso_tml/table.rb +1 -0
  186. data/lib/sts/tbx_iso_tml/table_wrap.rb +3 -0
  187. data/lib/sts/tbx_iso_tml/table_wrap_foot.rb +1 -0
  188. data/lib/sts/tbx_iso_tml/tbody.rb +9 -1
  189. data/lib/sts/tbx_iso_tml/td.rb +22 -8
  190. data/lib/sts/tbx_iso_tml/term.rb +9 -5
  191. data/lib/sts/tbx_iso_tml/tfoot.rb +5 -1
  192. data/lib/sts/tbx_iso_tml/th.rb +27 -6
  193. data/lib/sts/tbx_iso_tml/thead.rb +9 -1
  194. data/lib/sts/tbx_iso_tml/tr.rb +16 -0
  195. data/lib/sts/version.rb +1 -1
  196. data/lib/sts.rb +10 -0
  197. metadata +19 -3
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Shared method to inject body-elements content group into a model class.
4
+ # This is a subset of para_level containing exactly the elements allowed in <body>.
5
+ # Used by Body.
6
+ #
7
+ # Call inside the class body:
8
+ #
9
+ # ContentGroups.body_elements(self)
10
+ #
11
+ # And inside xml do ... end:
12
+ #
13
+ # ContentGroups.body_elements_mappings(self)
14
+
15
+ module Sts
16
+ module NisoSts
17
+ module ContentGroups
18
+ BODY_ELEMENTS = [
19
+ [:sec, "Sts::NisoSts::Section", "sec"],
20
+ [:term_sec, "Sts::NisoSts::TermSection", "term-sec"],
21
+ [:p, "Sts::NisoSts::Paragraph", "p"],
22
+ [:list, "Sts::NisoSts::List", "list"],
23
+ [:def_list, "Sts::NisoSts::DefList", "def-list"],
24
+ [:table_wrap, "Sts::TbxIsoTml::TableWrap", "table-wrap"],
25
+ [:fig, "Sts::NisoSts::Figure", "fig"],
26
+ [:non_normative_note, "Sts::NisoSts::NonNormativeNote",
27
+ "non-normative-note"],
28
+ [:non_normative_example, "Sts::NisoSts::NonNormativeExample",
29
+ "non-normative-example"],
30
+ [:preformat, "Sts::NisoSts::Preformat", "preformat"],
31
+ [:styled_content, "Sts::NisoSts::StyledContent", "styled-content"],
32
+ [:array, "Sts::NisoSts::SectionArray", "array"],
33
+ [:disp_formula, "Sts::NisoSts::DisplayFormula", "disp-formula"],
34
+ [:disp_formula_group, "Sts::NisoSts::DispFormulaGroup",
35
+ "disp-formula-group"],
36
+ [:editing_instruction, "Sts::NisoSts::EditingInstruction",
37
+ "editing-instruction"],
38
+ [:disp_quote, "Sts::NisoSts::DispQuote", "disp-quote"],
39
+ ].freeze
40
+
41
+ def self.body_elements(klass)
42
+ inject_elements(klass, BODY_ELEMENTS)
43
+ end
44
+
45
+ def self.body_elements_mappings(klass)
46
+ inject_element_mappings(klass, BODY_ELEMENTS)
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Shared method to inject citation-elements content group into a model class.
4
+ # This is the set of child elements shared by ElementCitation and NlmCitation.
5
+ #
6
+ # Call inside the class body:
7
+ #
8
+ # ContentGroups.citation_elements(self)
9
+ #
10
+ # And inside xml do ... end:
11
+ #
12
+ # ContentGroups.citation_elements_mappings(self)
13
+
14
+ module Sts
15
+ module NisoSts
16
+ module ContentGroups
17
+ # 4-tuple: [ruby_name, type_class_name, xml_element_name, collection?]
18
+ CITATION_ELEMENTS = [
19
+ [:publisher, "Sts::NisoSts::Publisher", "publisher", false],
20
+ [:person_group, "Sts::NisoSts::PersonGroup", "person-group", true],
21
+ [:article_title, "Sts::NisoSts::ArticleTitle", "article-title", false],
22
+ [:source, "Sts::NisoSts::Source", "source", false],
23
+ [:trans_source, "Sts::NisoSts::TransSource", "trans-source", false],
24
+ [:chapter_title, "Sts::NisoSts::ChapterTitle", "chapter-title", false],
25
+ [:data_title, "Sts::NisoSts::DataTitle", "data-title", false],
26
+ [:trans_title, "Sts::NisoSts::TransTitle", "trans-title", false],
27
+ [:trans_title_group, "Sts::NisoSts::TransTitleGroup",
28
+ "trans-title-group", false],
29
+ [:edition, "Sts::NisoSts::Edition", "edition", false],
30
+ [:volume, "Sts::NisoSts::Volume", "volume", false],
31
+ [:issue, "Sts::NisoSts::Issue", "issue", false],
32
+ [:pub_id, "Sts::NisoSts::PubId", "pub-id", true],
33
+ [:isbn, "Sts::NisoSts::Isbn", "isbn", false],
34
+ [:issn, "Sts::NisoSts::Issn", "issn", false],
35
+ [:issn_l, "Sts::NisoSts::IssnL", "issn-l", false],
36
+ [:fpage, "Sts::NisoSts::Fpage", "fpage", false],
37
+ [:lpage, "Sts::NisoSts::Lpage", "lpage", false],
38
+ [:page_range, "Sts::NisoSts::PageRange", "page-range", false],
39
+ [:elocation_id, "Sts::NisoSts::ElocationId", "elocation-id", false],
40
+ [:date, "Sts::NisoSts::Date", "date", false],
41
+ [:date_in_citation, "Sts::NisoSts::DateInCitation", "date-in-citation",
42
+ false],
43
+ [:access_date, "Sts::NisoSts::AccessDate", "access-date", false],
44
+ [:time_stamp, "Sts::NisoSts::TimeStamp", "time-stamp", false],
45
+ [:conf_name, "Sts::NisoSts::ConfName", "conf-name", false],
46
+ [:conf_date, "Sts::NisoSts::ConfDate", "conf-date", false],
47
+ [:conf_loc, "Sts::NisoSts::ConfLoc", "conf-loc", false],
48
+ [:conference, "Sts::NisoSts::Conference", "conference", false],
49
+ [:size, "Sts::NisoSts::Size", "size", false],
50
+ [:series, "Sts::NisoSts::Series", "series", false],
51
+ [:series_title, "Sts::NisoSts::SeriesTitle", "series-title", false],
52
+ [:series_text, "Sts::NisoSts::SeriesText", "series-text", false],
53
+ [:comment, "Sts::NisoSts::Comment", "comment", false],
54
+ [:annotation, "Sts::NisoSts::Annotation", "annotation", false],
55
+ [:patent, "Sts::NisoSts::Patent", "patent", false],
56
+ [:gov, "Sts::NisoSts::Gov", "gov", false],
57
+ [:aff, "Sts::NisoSts::Aff", "aff", true],
58
+ [:aff_alternatives, "Sts::NisoSts::AffAlternatives",
59
+ "aff-alternatives", false],
60
+ [:collab, "Sts::NisoSts::Collab", "collab", true],
61
+ [:etal, "Sts::NisoSts::Etal", "etal", false],
62
+ [:ext_link, "Sts::NisoSts::ExtLink", "ext-link", true],
63
+ ].freeze
64
+
65
+ def self.citation_elements(klass)
66
+ inject_elements(klass, CITATION_ELEMENTS)
67
+ end
68
+
69
+ def self.citation_elements_mappings(klass)
70
+ inject_element_mappings(klass, CITATION_ELEMENTS)
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../content_groups/helpers"
4
+
5
+ # Shared method to inject emphasized-text XSD content group into a model class.
6
+ # Call inside the class body (not inside xml do ... end):
7
+ #
8
+ # class MyElement < Lutaml::Model::Serializable
9
+ # Sts::NisoSts::ContentGroups.emphasized_text(self)
10
+ # ...
11
+ # end
12
+ #
13
+ # And inside xml do ... end:
14
+ #
15
+ # Sts::NisoSts::ContentGroups.emphasized_text_mappings(self)
16
+ #
17
+ module Sts
18
+ module NisoSts
19
+ module ContentGroups
20
+ extend ::Sts::ContentGroups::Helpers
21
+
22
+ # [ruby_name, type_class_name, xml_element_name]
23
+ EMPHASIZED_TEXT_ELEMENTS = [
24
+ [:bold, "Sts::TbxIsoTml::Bold", "bold"],
25
+ [:italic, "Sts::TbxIsoTml::Italic", "italic"],
26
+ [:monospace, "Sts::NisoSts::Monospace", "monospace"],
27
+ [:overline, "Sts::NisoSts::Overline", "overline"],
28
+ [:roman, "Sts::NisoSts::Roman", "roman"],
29
+ [:sans_serif, "Sts::NisoSts::SansSerif", "sans-serif"],
30
+ [:sc, "Sts::NisoSts::Sc", "sc"],
31
+ [:strike, "Sts::NisoSts::Strike", "strike"],
32
+ [:underline, "Sts::NisoSts::Underline", "underline"],
33
+ [:ruby, "Sts::NisoSts::Ruby", "ruby"],
34
+ [:sub, "Sts::NisoSts::Sub", "sub"],
35
+ [:sup, "Sts::NisoSts::Sup", "sup"],
36
+ [:styled_content, "Sts::NisoSts::StyledContent", "styled-content"],
37
+ [:named_content, "Sts::NisoSts::NamedContent", "named-content"],
38
+ [:target, "Sts::NisoSts::Target", "target"],
39
+ [:fn, "Sts::NisoSts::Fn", "fn"],
40
+ [:xref, "Sts::TbxIsoTml::Xref", "xref"],
41
+ [:ext_link, "Sts::NisoSts::ExtLink", "ext-link"],
42
+ [:uri, "Sts::NisoSts::Uri", "uri"],
43
+ [:email, "Sts::NisoSts::Email", "email"],
44
+ [:inline_graphic, "Sts::NisoSts::InlineGraphic", "inline-graphic"],
45
+ [:private_char, "Sts::NisoSts::PrivateChar", "private-char"],
46
+ [:inline_formula, "Sts::NisoSts::InlineFormula", "inline-formula"],
47
+ [:chem_struct, "Sts::NisoSts::ChemStruct", "chem-struct"],
48
+ [:tex_math, "Sts::NisoSts::TexMath", "tex-math"],
49
+ [:math, "Sts::TbxIsoTml::Math", "math"],
50
+ [:std, "Sts::NisoSts::ReferenceStandard", "std"],
51
+ [:std_ref, "Sts::NisoSts::StandardRef", "std-ref"],
52
+ [:related_article, "Sts::NisoSts::RelatedArticle", "related-article"],
53
+ [:related_object, "Sts::NisoSts::RelatedObject", "related-object"],
54
+ [:inline_supplementary_material,
55
+ "Sts::NisoSts::InlineSupplementaryMaterial", "inline-supplementary-material"],
56
+ ].freeze
57
+
58
+ def self.emphasized_text(klass)
59
+ inject_elements(klass, EMPHASIZED_TEXT_ELEMENTS)
60
+ end
61
+
62
+ def self.emphasized_text_mappings(klass)
63
+ inject_element_mappings(klass, EMPHASIZED_TEXT_ELEMENTS)
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Shared method to inject highlight-elements XSD content group into a model class.
4
+ # This is the set of child elements shared by Bold and Italic (excluding their
5
+ # self-referencing attribute, which each model declares separately).
6
+ #
7
+ # Call inside the class body:
8
+ #
9
+ # ContentGroups.highlight_elements(self)
10
+ #
11
+ # And inside xml do ... end:
12
+ #
13
+ # ContentGroups.highlight_elements_mappings(self)
14
+
15
+ module Sts
16
+ module NisoSts
17
+ module ContentGroups
18
+ HIGHLIGHT_ELEMENTS = [
19
+ [:sub, "Sts::NisoSts::Sub", "sub"],
20
+ [:sup, "Sts::NisoSts::Sup", "sup"],
21
+ [:monospace, "Sts::NisoSts::Monospace", "monospace"],
22
+ [:sc, "Sts::NisoSts::Sc", "sc"],
23
+ [:std_ref, "Sts::NisoSts::StandardRef", "std-ref"],
24
+ [:underline, "Sts::NisoSts::Underline", "underline"],
25
+ [:strike, "Sts::NisoSts::Strike", "strike"],
26
+ [:xref, "Sts::TbxIsoTml::Xref", "xref"],
27
+ [:ext_link, "Sts::NisoSts::ExtLink", "ext-link"],
28
+ [:fn, "Sts::NisoSts::Fn", "fn"],
29
+ [:styled_content, "Sts::NisoSts::StyledContent", "styled-content"],
30
+ [:array, "Sts::NisoSts::SectionArray", "array"],
31
+ [:break, "Sts::TbxIsoTml::TableBreak", "break"],
32
+ [:target, "Sts::NisoSts::Target", "target"],
33
+ [:overline, "Sts::NisoSts::Overline", "overline"],
34
+ [:roman, "Sts::NisoSts::Roman", "roman"],
35
+ [:sans_serif, "Sts::NisoSts::SansSerif", "sans-serif"],
36
+ [:ruby, "Sts::NisoSts::Ruby", "ruby"],
37
+ [:named_content, "Sts::NisoSts::NamedContent", "named-content"],
38
+ [:uri, "Sts::NisoSts::Uri", "uri"],
39
+ [:inline_formula, "Sts::NisoSts::InlineFormula", "inline-formula"],
40
+ ].freeze
41
+
42
+ def self.highlight_elements(klass)
43
+ inject_elements(klass, HIGHLIGHT_ELEMENTS)
44
+ end
45
+
46
+ def self.highlight_elements_mappings(klass)
47
+ inject_element_mappings(klass, HIGHLIGHT_ELEMENTS)
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,116 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Shared method to inject inside-cell XSD content group into a model class.
4
+ # This content group represents the elements allowed inside <td> and <th>.
5
+ #
6
+ # Call inside the class body:
7
+ #
8
+ # ContentGroups.inside_cell(self)
9
+ #
10
+ # And inside xml do ... end:
11
+ #
12
+ # ContentGroups.inside_cell_mappings(self)
13
+
14
+ module Sts
15
+ module NisoSts
16
+ module ContentGroups
17
+ INSIDE_CELL_ELEMENTS = [
18
+ [:bold, "Sts::TbxIsoTml::Bold", "bold"],
19
+ [:italic, "Sts::TbxIsoTml::Italic", "italic"],
20
+ [:xref, "Sts::TbxIsoTml::Xref", "xref"],
21
+ [:std, "Sts::NisoSts::ReferenceStandard", "std"],
22
+ [:list, "Sts::NisoSts::List", "list"],
23
+ [:inline_formula, "Sts::NisoSts::InlineFormula", "inline-formula"],
24
+ [:non_normative_note, "Sts::NisoSts::NonNormativeNote",
25
+ "non-normative-note"],
26
+ [:non_normative_example, "Sts::NisoSts::NonNormativeExample",
27
+ "non-normative-example"],
28
+ [:normative_note, "Sts::NisoSts::NormativeNote", "normative-note"],
29
+ [:normative_example, "Sts::NisoSts::NormativeExample",
30
+ "normative-example"],
31
+ [:notes_group, "Sts::NisoSts::NotesGroup", "notes-group"],
32
+ [:graphic, "Sts::NisoSts::Graphic", "graphic"],
33
+ [:def_list, "Sts::NisoSts::DefList", "def-list"],
34
+ [:p, "Sts::NisoSts::Paragraph", "p"],
35
+ [:fn, "Sts::TbxIsoTml::Fn", "fn"],
36
+ [:styled_content, "Sts::NisoSts::StyledContent", "styled-content"],
37
+ [:monospace, "Sts::NisoSts::Monospace", "monospace"],
38
+ [:underline, "Sts::NisoSts::Underline", "underline"],
39
+ [:sup, "Sts::NisoSts::Sup", "sup"],
40
+ [:sub, "Sts::NisoSts::Sub", "sub"],
41
+ [:break, "Sts::TbxIsoTml::TableBreak", "break"],
42
+ [:array, "Sts::NisoSts::SectionArray", "array"],
43
+ [:fig, "Sts::NisoSts::Figure", "fig"],
44
+ [:fig_group, "Sts::NisoSts::FigGroup", "fig-group"],
45
+ [:media, "Sts::NisoSts::Media", "media"],
46
+ [:disp_formula, "Sts::NisoSts::DisplayFormula", "disp-formula"],
47
+ [:disp_formula_group, "Sts::NisoSts::DispFormulaGroup",
48
+ "disp-formula-group"],
49
+ [:math, "Sts::TbxIsoTml::Math", "math"],
50
+ [:tex_math, "Sts::NisoSts::TexMath", "tex-math"],
51
+ [:chem_struct, "Sts::NisoSts::ChemStruct", "chem-struct"],
52
+ [:ext_link, "Sts::NisoSts::ExtLink", "ext-link"],
53
+ [:uri, "Sts::NisoSts::Uri", "uri"],
54
+ [:email, "Sts::NisoSts::Email", "email"],
55
+ [:sc, "Sts::NisoSts::Sc", "sc"],
56
+ [:overline, "Sts::NisoSts::Overline", "overline"],
57
+ [:roman, "Sts::NisoSts::Roman", "roman"],
58
+ [:sans_serif, "Sts::NisoSts::SansSerif", "sans-serif"],
59
+ [:strike, "Sts::NisoSts::Strike", "strike"],
60
+ [:ruby, "Sts::NisoSts::Ruby", "ruby"],
61
+ [:named_content, "Sts::NisoSts::NamedContent", "named-content"],
62
+ [:target, "Sts::NisoSts::Target", "target"],
63
+ [:entailed_term, "Sts::TbxIsoTml::EntailedTerm", "entailedTerm"],
64
+ [:inline_graphic, "Sts::NisoSts::InlineGraphic", "inline-graphic"],
65
+ [:private_char, "Sts::NisoSts::PrivateChar", "private-char"],
66
+ [:preformat, "Sts::NisoSts::Preformat", "preformat"],
67
+ [:alternatives, "Sts::NisoSts::Alternatives", "alternatives"],
68
+ [:address, "Sts::NisoSts::Address", "address"],
69
+ [:related_article, "Sts::NisoSts::RelatedArticle", "related-article"],
70
+ [:related_object, "Sts::NisoSts::RelatedObject", "related-object"],
71
+ [:index_term, "Sts::NisoSts::IndexTerm", "index-term"],
72
+ [:milestone_end, "Sts::NisoSts::MilestoneEnd", "milestone-end"],
73
+ [:milestone_start, "Sts::NisoSts::MilestoneStart", "milestone-start"],
74
+ ].freeze
75
+
76
+ def self.inside_cell(klass)
77
+ inject_elements(klass, INSIDE_CELL_ELEMENTS)
78
+ end
79
+
80
+ def self.inside_cell_mappings(klass)
81
+ inject_element_mappings(klass, INSIDE_CELL_ELEMENTS)
82
+ end
83
+
84
+ INSIDE_CELL_ATTRIBUTES = %i[id content_type style abbr axis headers scope
85
+ rowspan colspan align char charoff valign].freeze
86
+ INSIDE_CELL_ATTR_XML = {
87
+ id: "id", content_type: "content-type", style: "style",
88
+ abbr: "abbr", axis: "axis", headers: "headers", scope: "scope",
89
+ rowspan: "rowspan", colspan: "colspan", align: "align",
90
+ char: "char", charoff: "charoff", valign: "valign"
91
+ }.freeze
92
+
93
+ def self.inside_cell_attributes(klass)
94
+ INSIDE_CELL_ATTRIBUTES.each do |name|
95
+ opts = case name
96
+ when :align then { values: EnumValues::ALIGN }
97
+ when :valign then { values: EnumValues::VALIGN }
98
+ when :scope then { values: EnumValues::SCOPE }
99
+ else {}
100
+ end
101
+ klass.attribute name, :string, **opts
102
+ end
103
+ end
104
+
105
+ def self.inside_cell_attribute_mappings(klass, char_value_map: false)
106
+ INSIDE_CELL_ATTR_XML.each do |name, xml_name|
107
+ opts = {}
108
+ if char_value_map && name == :char
109
+ opts[:value_map] = { to: { empty: :empty } }
110
+ end
111
+ klass.map_attribute xml_name, to: name, **opts
112
+ end
113
+ end
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Shared method to inject p-elements XSD content group into a model class.
4
+ # Extends styled_content_elements with citation and funding elements.
5
+ # Used by Paragraph.
6
+ #
7
+ # Call inside the class body:
8
+ #
9
+ # ContentGroups.p_elements(self)
10
+ #
11
+ # And inside xml do ... end:
12
+ #
13
+ # ContentGroups.p_elements_mappings(self)
14
+
15
+ module Sts
16
+ module NisoSts
17
+ module ContentGroups
18
+ P_ELEMENTS_EXTRA = [
19
+ [:ref_list, "Sts::NisoSts::ReferenceList", "ref-list"],
20
+ [:citation_alternatives, "Sts::NisoSts::CitationAlternatives",
21
+ "citation-alternatives"],
22
+ [:element_citation, "Sts::NisoSts::ElementCitation",
23
+ "element-citation"],
24
+ [:mixed_citation, "Sts::NisoSts::MixedCitation", "mixed-citation"],
25
+ [:award_id, "Sts::NisoSts::AwardId", "award-id"],
26
+ [:funding_source, "Sts::NisoSts::FundingSource", "funding-source"],
27
+ [:open_access, "Sts::NisoSts::OpenAccess", "open-access"],
28
+ ].freeze
29
+
30
+ def self.p_elements(klass)
31
+ styled_content_elements(klass)
32
+ inject_elements(klass, P_ELEMENTS_EXTRA)
33
+ end
34
+
35
+ def self.p_elements_mappings(klass)
36
+ styled_content_elements_mappings(klass)
37
+ inject_element_mappings(klass, P_ELEMENTS_EXTRA)
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Shared method to inject para-level XSD content group into a model class.
4
+ # This content group represents the common block-level elements shared by
5
+ # Section, App, NonNormativeNote, NonNormativeExample, NormativeNote,
6
+ # NormativeExample, BoxedText, DispQuote, and Glossary.
7
+ #
8
+ # Call inside the class body:
9
+ #
10
+ # ContentGroups.para_level(self)
11
+ #
12
+ # And inside xml do ... end:
13
+ #
14
+ # ContentGroups.para_level_mappings(self)
15
+
16
+ module Sts
17
+ module NisoSts
18
+ module ContentGroups
19
+ PARA_LEVEL_ELEMENTS = [
20
+ [:p, "Sts::NisoSts::Paragraph", "p"],
21
+ [:array, "Sts::NisoSts::SectionArray", "array"],
22
+ [:list, "Sts::NisoSts::List", "list"],
23
+ [:def_list, "Sts::NisoSts::DefList", "def-list"],
24
+ [:preformat, "Sts::NisoSts::Preformat", "preformat"],
25
+ [:fig, "Sts::NisoSts::Figure", "fig"],
26
+ [:fig_group, "Sts::NisoSts::FigGroup", "fig-group"],
27
+ [:graphic, "Sts::NisoSts::Graphic", "graphic"],
28
+ [:media, "Sts::NisoSts::Media", "media"],
29
+ [:table_wrap, "Sts::TbxIsoTml::TableWrap", "table-wrap"],
30
+ [:disp_formula, "Sts::NisoSts::DisplayFormula", "disp-formula"],
31
+ [:disp_formula_group, "Sts::NisoSts::DispFormulaGroup",
32
+ "disp-formula-group"],
33
+ [:disp_quote, "Sts::NisoSts::DispQuote", "disp-quote"],
34
+ [:chem_struct_wrap, "Sts::NisoSts::ChemStructWrap", "chem-struct-wrap"],
35
+ [:supplementary_material, "Sts::NisoSts::SupplementaryMaterial",
36
+ "supplementary-material"],
37
+ [:editing_instruction, "Sts::NisoSts::EditingInstruction",
38
+ "editing-instruction"],
39
+ [:address, "Sts::NisoSts::Address", "address"],
40
+ [:alternatives, "Sts::NisoSts::Alternatives", "alternatives"],
41
+ [:non_normative_note, "Sts::NisoSts::NonNormativeNote",
42
+ "non-normative-note"],
43
+ [:non_normative_example, "Sts::NisoSts::NonNormativeExample",
44
+ "non-normative-example"],
45
+ [:normative_note, "Sts::NisoSts::NormativeNote", "normative-note"],
46
+ [:normative_example, "Sts::NisoSts::NormativeExample",
47
+ "normative-example"],
48
+ [:notes_group, "Sts::NisoSts::NotesGroup", "notes-group"],
49
+ [:related_article, "Sts::NisoSts::RelatedArticle", "related-article"],
50
+ [:related_object, "Sts::NisoSts::RelatedObject", "related-object"],
51
+ [:speech, "Sts::NisoSts::Speech", "speech"],
52
+ [:statement, "Sts::NisoSts::Statement", "statement"],
53
+ [:verse_group, "Sts::NisoSts::VerseGroup", "verse-group"],
54
+ [:math, "Sts::TbxIsoTml::Math", "math"],
55
+ [:tex_math, "Sts::NisoSts::TexMath", "tex-math"],
56
+ ].freeze
57
+
58
+ def self.para_level(klass)
59
+ inject_elements(klass, PARA_LEVEL_ELEMENTS)
60
+ end
61
+
62
+ def self.para_level_mappings(klass)
63
+ inject_element_mappings(klass, PARA_LEVEL_ELEMENTS)
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,93 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Shared method to inject styled-content-elements XSD content group into a model class.
4
+ # This is the largest content group, used by StyledContent and extended by p_elements.
5
+ #
6
+ # Call inside the class body:
7
+ #
8
+ # ContentGroups.styled_content_elements(self)
9
+ #
10
+ # And inside xml do ... end:
11
+ #
12
+ # ContentGroups.styled_content_elements_mappings(self)
13
+
14
+ module Sts
15
+ module NisoSts
16
+ module ContentGroups
17
+ STYLED_CONTENT_ELEMENTS = [
18
+ [:bold, "Sts::TbxIsoTml::Bold", "bold"],
19
+ [:italic, "Sts::TbxIsoTml::Italic", "italic"],
20
+ [:sub, "Sts::NisoSts::Sub", "sub"],
21
+ [:sup, "Sts::NisoSts::Sup", "sup"],
22
+ [:sc, "Sts::NisoSts::Sc", "sc"],
23
+ [:monospace, "Sts::NisoSts::Monospace", "monospace"],
24
+ [:underline, "Sts::NisoSts::Underline", "underline"],
25
+ [:overline, "Sts::NisoSts::Overline", "overline"],
26
+ [:roman, "Sts::NisoSts::Roman", "roman"],
27
+ [:sans_serif, "Sts::NisoSts::SansSerif", "sans-serif"],
28
+ [:strike, "Sts::NisoSts::Strike", "strike"],
29
+ [:xref, "Sts::TbxIsoTml::Xref", "xref"],
30
+ [:ext_link, "Sts::NisoSts::ExtLink", "ext-link"],
31
+ [:uri, "Sts::NisoSts::Uri", "uri"],
32
+ [:fn, "Sts::NisoSts::Fn", "fn"],
33
+ [:inline_formula, "Sts::NisoSts::InlineFormula", "inline-formula"],
34
+ [:break, "Sts::NisoSts::Break", "break"],
35
+ [:target, "Sts::NisoSts::Target", "target"],
36
+ [:named_content, "Sts::NisoSts::NamedContent", "named-content"],
37
+ [:styled_content, "Sts::NisoSts::StyledContent", "styled-content"],
38
+ [:array, "Sts::NisoSts::SectionArray", "array"],
39
+ [:std, "Sts::NisoSts::ReferenceStandard", "std"],
40
+ [:graphic, "Sts::NisoSts::Graphic", "graphic"],
41
+ [:inline_graphic, "Sts::NisoSts::InlineGraphic", "inline-graphic"],
42
+ [:private_char, "Sts::NisoSts::PrivateChar", "private-char"],
43
+ [:preformat, "Sts::NisoSts::Preformat", "preformat"],
44
+ [:fig, "Sts::NisoSts::Figure", "fig"],
45
+ [:fig_group, "Sts::NisoSts::FigGroup", "fig-group"],
46
+ [:media, "Sts::NisoSts::Media", "media"],
47
+ [:table_wrap, "Sts::TbxIsoTml::TableWrap", "table-wrap"],
48
+ [:boxed_text, "Sts::NisoSts::BoxedText", "boxed-text"],
49
+ [:chem_struct_wrap, "Sts::NisoSts::ChemStructWrap", "chem-struct-wrap"],
50
+ [:chem_struct, "Sts::NisoSts::ChemStruct", "chem-struct"],
51
+ [:list, "Sts::NisoSts::List", "list"],
52
+ [:def_list, "Sts::NisoSts::DefList", "def-list"],
53
+ [:disp_formula, "Sts::NisoSts::DisplayFormula", "disp-formula"],
54
+ [:disp_formula_group, "Sts::NisoSts::DispFormulaGroup",
55
+ "disp-formula-group"],
56
+ [:disp_quote, "Sts::NisoSts::DispQuote", "disp-quote"],
57
+ [:speech, "Sts::NisoSts::Speech", "speech"],
58
+ [:statement, "Sts::NisoSts::Statement", "statement"],
59
+ [:verse_group, "Sts::NisoSts::VerseGroup", "verse-group"],
60
+ [:non_normative_note, "Sts::NisoSts::NonNormativeNote",
61
+ "non-normative-note"],
62
+ [:non_normative_example, "Sts::NisoSts::NonNormativeExample",
63
+ "non-normative-example"],
64
+ [:normative_note, "Sts::NisoSts::NormativeNote", "normative-note"],
65
+ [:normative_example, "Sts::NisoSts::NormativeExample",
66
+ "normative-example"],
67
+ [:notes_group, "Sts::NisoSts::NotesGroup", "notes-group"],
68
+ [:supplementary_material, "Sts::NisoSts::SupplementaryMaterial",
69
+ "supplementary-material"],
70
+ [:address, "Sts::NisoSts::Address", "address"],
71
+ [:alternatives, "Sts::NisoSts::Alternatives", "alternatives"],
72
+ [:related_article, "Sts::NisoSts::RelatedArticle", "related-article"],
73
+ [:related_object, "Sts::NisoSts::RelatedObject", "related-object"],
74
+ [:math, "Sts::TbxIsoTml::Math", "math"],
75
+ [:tex_math, "Sts::NisoSts::TexMath", "tex-math"],
76
+ [:ruby, "Sts::NisoSts::Ruby", "ruby"],
77
+ [:email, "Sts::NisoSts::Email", "email"],
78
+ [:entailed_term, "Sts::TbxIsoTml::EntailedTerm", "entailedTerm"],
79
+ [:index_term, "Sts::NisoSts::IndexTerm", "index-term"],
80
+ [:milestone_end, "Sts::NisoSts::MilestoneEnd", "milestone-end"],
81
+ [:milestone_start, "Sts::NisoSts::MilestoneStart", "milestone-start"],
82
+ ].freeze
83
+
84
+ def self.styled_content_elements(klass)
85
+ inject_elements(klass, STYLED_CONTENT_ELEMENTS)
86
+ end
87
+
88
+ def self.styled_content_elements_mappings(klass)
89
+ inject_element_mappings(klass, STYLED_CONTENT_ELEMENTS)
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Shared method to inject table group attributes (id, content_type, style,
4
+ # align, char, charoff, valign) into table row/column models.
5
+ # Used by Thead, Tbody, Tfoot, Tr, Col, Colgroup in both NisoSts and IsoSts/TbxIsoTml.
6
+ #
7
+ # Call inside the class body:
8
+ #
9
+ # ContentGroups.table_group_attributes(self)
10
+ #
11
+ # And inside xml do ... end:
12
+ #
13
+ # ContentGroups.table_group_attribute_mappings(self, char_value_map: true)
14
+
15
+ module Sts
16
+ module NisoSts
17
+ module ContentGroups
18
+ TABLE_GROUP_ATTRS = %i[id content_type style align char charoff
19
+ valign].freeze
20
+ TABLE_GROUP_ATTR_XML = {
21
+ id: "id", content_type: "content-type", style: "style",
22
+ align: "align", char: "char", charoff: "charoff", valign: "valign"
23
+ }.freeze
24
+
25
+ TABLE_COL_EXTRA_ATTRS = %i[span width].freeze
26
+ TABLE_COL_EXTRA_ATTR_XML = { span: "span", width: "width" }.freeze
27
+
28
+ def self.table_group_attributes(klass)
29
+ TABLE_GROUP_ATTRS.each do |name|
30
+ opts = case name
31
+ when :align then { values: EnumValues::ALIGN }
32
+ when :valign then { values: EnumValues::VALIGN }
33
+ else {}
34
+ end
35
+ klass.attribute name, :string, **opts
36
+ end
37
+ end
38
+
39
+ def self.table_group_attribute_mappings(klass, char_value_map: false)
40
+ TABLE_GROUP_ATTR_XML.each do |name, xml_name|
41
+ opts = {}
42
+ if char_value_map && name == :char
43
+ opts[:value_map] = { to: { empty: :empty } }
44
+ end
45
+ klass.map_attribute xml_name, to: name, **opts
46
+ end
47
+ end
48
+
49
+ def self.table_col_attributes(klass)
50
+ table_group_attributes(klass)
51
+ TABLE_COL_EXTRA_ATTRS.each { |name| klass.attribute name, :string }
52
+ end
53
+
54
+ def self.table_col_attribute_mappings(klass, char_value_map: false)
55
+ table_group_attribute_mappings(klass, char_value_map: char_value_map)
56
+ TABLE_COL_EXTRA_ATTR_XML.each do |name, xml_name|
57
+ klass.map_attribute xml_name, to: name
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sts
4
+ module NisoSts
5
+ module ContentGroups
6
+ end
7
+ end
8
+ end
@@ -28,6 +28,7 @@ module Sts
28
28
 
29
29
  xml do
30
30
  element "contrib"
31
+ ordered
31
32
 
32
33
  map_attribute "contrib-type", to: :contrib_type
33
34
  map_attribute "corresp", to: :corresp
@@ -10,6 +10,7 @@ module Sts
10
10
 
11
11
  xml do
12
12
  element "contrib-group"
13
+ ordered
13
14
 
14
15
  map_attribute "content-type", to: :content_type
15
16
  map_attribute "id", to: :id
@@ -12,6 +12,7 @@ module Sts
12
12
 
13
13
  xml do
14
14
  element "counts"
15
+ ordered
15
16
 
16
17
  map_element "fig-count", to: :fig_count
17
18
  map_element "table-count", to: :table_count