metanorma-document 0.3.0 → 0.4.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 +4 -4
- data/CLAUDE.md +3 -2
- data/Rakefile +30 -5
- data/frontend/dist/app.css +1 -0
- data/frontend/dist/app.iife.js +24 -0
- data/frontend/package-lock.json +7 -505
- data/frontend/tailwind.config.js +5 -0
- data/lib/metanorma/csa_document/root.rb +27 -0
- data/lib/metanorma/csa_document.rb +9 -0
- data/lib/metanorma/document/cli.rb +52 -0
- data/lib/metanorma/document/components/ancillary_blocks/sourcecode_body.rb +14 -0
- data/lib/metanorma/document/components/inline/comma_element.rb +3 -0
- data/lib/metanorma/document/components/inline/enum_comma_element.rb +3 -0
- data/lib/metanorma/document/components/inline/eref_element.rb +4 -1
- data/lib/metanorma/document/components/inline/fmt_termsource_element.rb +4 -2
- data/lib/metanorma/document/components/inline/math_element.rb +13 -7
- data/lib/metanorma/document/components/inline/vocabulary.rb +4 -0
- data/lib/metanorma/document/components/multi_paragraph/admonition_block.rb +6 -1
- data/lib/metanorma/document/components/paragraphs/paragraph_block.rb +3 -0
- data/lib/metanorma/document/components/reference_elements/callout.rb +3 -2
- data/lib/metanorma/document/components/tables/table_cell.rb +3 -0
- data/lib/metanorma/document/elements/input.rb +44 -0
- data/lib/metanorma/document/elements.rb +1 -0
- data/lib/metanorma/document/relaton/address.rb +5 -0
- data/lib/metanorma/document/relaton/affiliation.rb +3 -0
- data/lib/metanorma/document/relaton/bib_item_size.rb +8 -9
- data/lib/metanorma/document/relaton/bib_item_type.rb +3 -0
- data/lib/metanorma/document/relaton/bibliographic_date.rb +5 -0
- data/lib/metanorma/document/relaton/contact_method.rb +5 -0
- data/lib/metanorma/document/relaton/contribution_info.rb +6 -2
- data/lib/metanorma/document/relaton/contributor.rb +4 -0
- data/lib/metanorma/document/relaton/contributor_role.rb +3 -0
- data/lib/metanorma/document/relaton/copyright_association.rb +3 -0
- data/lib/metanorma/document/relaton/copyright_owner.rb +3 -0
- data/lib/metanorma/document/relaton/date_time.rb +3 -0
- data/lib/metanorma/document/relaton/document_identifier.rb +4 -0
- data/lib/metanorma/document/relaton/document_relation.rb +8 -0
- data/lib/metanorma/document/relaton/document_status.rb +4 -0
- data/lib/metanorma/document/relaton/formatted_address.rb +4 -0
- data/lib/metanorma/document/relaton/full_name.rb +14 -3
- data/lib/metanorma/document/relaton/keyword_type.rb +3 -0
- data/lib/metanorma/document/relaton/locality_stack.rb +6 -9
- data/lib/metanorma/document/relaton/localized_name.rb +8 -5
- data/lib/metanorma/document/relaton/logo_element.rb +5 -0
- data/lib/metanorma/document/relaton/medium_type.rb +5 -16
- data/lib/metanorma/document/relaton/org_identifier.rb +2 -0
- data/lib/metanorma/document/relaton/org_subdivision.rb +2 -0
- data/lib/metanorma/document/relaton/org_subdivision_identifier.rb +2 -0
- data/lib/metanorma/document/relaton/organization.rb +3 -0
- data/lib/metanorma/document/relaton/person.rb +7 -1
- data/lib/metanorma/document/relaton/person_identifier.rb +3 -0
- data/lib/metanorma/document/relaton/place_type.rb +5 -0
- data/lib/metanorma/document/relaton/region_element.rb +3 -9
- data/lib/metanorma/document/relaton/relaton_collection.rb +2 -0
- data/lib/metanorma/document/relaton/series_type.rb +7 -0
- data/lib/metanorma/document/relaton/typed_note.rb +4 -0
- data/lib/metanorma/document/relaton/typed_title_string.rb +4 -0
- data/lib/metanorma/document/relaton/typed_uri.rb +3 -8
- data/lib/metanorma/document/relaton/validity_type.rb +8 -10
- data/lib/metanorma/document/relaton/variant_full_name.rb +3 -0
- data/lib/metanorma/document/relaton/variant_org_name.rb +3 -0
- data/lib/metanorma/document/relaton/version_info.rb +5 -0
- data/lib/metanorma/document/relaton/vocab_id_type.rb +6 -12
- data/lib/metanorma/document/relaton.rb +0 -14
- data/lib/metanorma/document/version.rb +1 -1
- data/lib/metanorma/document.rb +1 -0
- data/lib/metanorma/html/base_renderer.rb +86 -234
- data/lib/metanorma/html/concerns/metadata_extraction.rb +61 -0
- data/lib/metanorma/html/concerns/presentation_validation.rb +61 -0
- data/lib/metanorma/html/concerns/svg_processing.rb +32 -0
- data/lib/metanorma/html/concerns/text_extraction.rb +93 -0
- data/lib/metanorma/html/concerns/toc_registry.rb +47 -0
- data/lib/metanorma/html/csa_renderer.rb +9 -0
- data/lib/metanorma/html/drops/figure_drop.rb +33 -10
- data/lib/metanorma/html/drops/sourcecode_drop.rb +3 -6
- data/lib/metanorma/html/flavor.rb +6 -1
- data/lib/metanorma/html/generator.rb +8 -1
- data/lib/metanorma/html/iso_renderer.rb +0 -142
- data/lib/metanorma/html/renderers/block_renderer.rb +10 -0
- data/lib/metanorma/html/renderers/element_order_traversal.rb +15 -1
- data/lib/metanorma/html/renderers/inline_renderer.rb +13 -75
- data/lib/metanorma/html/standard_renderer.rb +195 -35
- data/lib/metanorma/html.rb +1 -51
- data/lib/metanorma/iso_document/sections/iso_preface.rb +27 -13
- data/lib/metanorma/mirror/default_registry.rb +21 -0
- data/lib/metanorma/mirror/handlers/inline/catalog.rb +7 -12
- data/lib/metanorma/mirror/handlers/inline/rich_html_renderer.rb +2 -3
- data/lib/metanorma/mirror/handlers/sourcecode.rb +1 -1
- data/lib/metanorma/mirror/model/guide.rb +3 -2
- data/lib/metanorma/mirror/output/formats/inline_format.rb +64 -3
- data/lib/metanorma/mirror/output/pipeline.rb +1 -0
- data/lib/metanorma/mirror/output.rb +0 -2
- data/lib/metanorma/mirror/rewriter.rb +3 -1
- data/lib/metanorma/registers/setup.rb +10 -0
- data/lib/metanorma/standard_document/annotation_container.rb +2 -0
- data/lib/metanorma/standard_document/elements/input.rb +4 -25
- data/lib/metanorma/standard_document/metadata/metanorma_extension.rb +12 -2
- data/lib/metanorma/standard_document/metadata/presentation_metadata.rb +107 -0
- data/lib/metanorma/standard_document/metadata/semantic_metadata.rb +18 -0
- data/lib/metanorma/standard_document/metadata/unitsml/amount_of_substance.rb +19 -0
- data/lib/metanorma/standard_document/metadata/unitsml/base_quantity.rb +34 -0
- data/lib/metanorma/standard_document/metadata/unitsml/dimension.rb +39 -0
- data/lib/metanorma/standard_document/metadata/unitsml/dimension_set.rb +19 -0
- data/lib/metanorma/standard_document/metadata/unitsml/electric_current.rb +19 -0
- data/lib/metanorma/standard_document/metadata/unitsml/enumerated_root_unit.rb +23 -0
- data/lib/metanorma/standard_document/metadata/unitsml/length.rb +19 -0
- data/lib/metanorma/standard_document/metadata/unitsml/luminous_intensity.rb +19 -0
- data/lib/metanorma/standard_document/metadata/unitsml/mass.rb +19 -0
- data/lib/metanorma/standard_document/metadata/unitsml/namespace.rb +17 -0
- data/lib/metanorma/standard_document/metadata/unitsml/plane_angle.rb +19 -0
- data/lib/metanorma/standard_document/metadata/unitsml/prefix.rb +30 -0
- data/lib/metanorma/standard_document/metadata/unitsml/prefix_name.rb +21 -0
- data/lib/metanorma/standard_document/metadata/unitsml/prefix_set.rb +19 -0
- data/lib/metanorma/standard_document/metadata/unitsml/prefix_symbol.rb +21 -0
- data/lib/metanorma/standard_document/metadata/unitsml/quantity.rb +28 -0
- data/lib/metanorma/standard_document/metadata/unitsml/quantity_name.rb +21 -0
- data/lib/metanorma/standard_document/metadata/unitsml/quantity_set.rb +19 -0
- data/lib/metanorma/standard_document/metadata/unitsml/root_units.rb +19 -0
- data/lib/metanorma/standard_document/metadata/unitsml/thermodynamic_temperature.rb +19 -0
- data/lib/metanorma/standard_document/metadata/unitsml/time.rb +19 -0
- data/lib/metanorma/standard_document/metadata/unitsml/unit.rb +32 -0
- data/lib/metanorma/standard_document/metadata/unitsml/unit_name.rb +21 -0
- data/lib/metanorma/standard_document/metadata/unitsml/unit_set.rb +19 -0
- data/lib/metanorma/standard_document/metadata/unitsml/unit_symbol.rb +36 -0
- data/lib/metanorma/standard_document/metadata/unitsml/unit_system.rb +23 -0
- data/lib/metanorma/standard_document/metadata/unitsml/unitsml_root.rb +28 -0
- data/lib/metanorma/standard_document/metadata/unitsml.rb +39 -0
- data/lib/metanorma/standard_document/metadata.rb +4 -0
- data/lib/metanorma/standard_document/sections/misc_container.rb +8 -6
- data/lib/metanorma/standard_document/sections/sections.rb +7 -0
- data/lib/metanorma/un_document/blocks/un_admonition_block.rb +86 -0
- data/lib/metanorma/un_document/blocks.rb +9 -0
- data/lib/metanorma/un_document/root.rb +8 -0
- data/lib/metanorma/un_document/sections/un_abstract_section.rb +48 -0
- data/lib/metanorma/un_document/sections/un_preface.rb +19 -2
- data/lib/metanorma/un_document/sections.rb +1 -0
- data/lib/metanorma/un_document/un_text_element.rb +116 -0
- data/lib/metanorma/un_document.rb +2 -0
- data/script/benchmark_render.rb +35 -0
- data/tasks/roundtrip_samples.rake +1 -1
- metadata +63 -45
- data/.rubocop_todo.yml +0 -220
- data/TODO.finalize/01-split-multi-class-files.md +0 -8
- data/TODO.finalize/02-remove-data-dist-iso-document-frontend.md +0 -6
- data/TODO.finalize/03-align-frontend-iife-and-gha-build.md +0 -11
- data/TODO.finalize/04-theme-per-flavor-config-driven.md +0 -9
- data/TODO.finalize/05-migrate-all-html-to-liquid.md +0 -16
- data/TODO.finalize/06-integrate-pubid-library.md +0 -16
- data/TODO.finalize/07-replace-relaton-models-with-relaton-bib.md +0 -39
- data/TODO.finalize/08-refactor-renderer-architecture.md +0 -25
- data/TODO.finalize/09-eliminate-code-smells.md +0 -14
- data/TODO.finalize/10-comprehensive-spec-coverage.md +0 -24
- data/TODO.finalize/11-config-driven-flavor-metadata.md +0 -20
- data/TODO.finalize/12-add-frozen-string-literal.md +0 -6
- data/TODO.finalize/13-extract-composition-from-god-class.md +0 -96
- data/TODO.finalize/14-config-driven-section-ordering.md +0 -31
- data/TODO.finalize/15-theme-directories-per-flavor.md +0 -46
- data/TODO.finalize/16-theme-lutaml-model-schema.md +0 -44
- data/docs/html-renderer.adoc +0 -261
- data/lib/data/dist/iso_document/frontend/assets/index-mwzbzmnK.js +0 -22
- data/lib/data/dist/iso_document/frontend/assets/index-pGvKTNid.css +0 -1
- data/lib/data/dist/iso_document/frontend/assets/iso-red.svg +0 -53
- data/lib/data/dist/iso_document/frontend/index.html +0 -13
- data/lib/metanorma/document/relaton/bib_item_size_type.rb +0 -21
- data/lib/metanorma/document/relaton/bibliographic_date_type.rb +0 -22
- data/lib/metanorma/document/relaton/document_relation_type.rb +0 -31
- data/lib/metanorma/document/relaton/iso4217_code.rb +0 -17
- data/lib/metanorma/document/relaton/iso8601_date.rb +0 -17
- data/lib/metanorma/document/relaton/personal_identifier_type.rb +0 -21
- data/lib/metanorma/document/relaton/region_type.rb +0 -20
- data/lib/metanorma/document/relaton/series_type_type.rb +0 -21
- data/lib/metanorma/document/relaton/specific_locality_type.rb +0 -25
- data/lib/metanorma/document/relaton/title_type.rb +0 -21
- data/lib/metanorma/mirror/output/html_renderer.rb +0 -95
- data/lib/metanorma/mirror/output/html_renderers/block_renderers.rb +0 -178
- data/lib/metanorma/mirror/output/html_renderers/inline_renderer.rb +0 -61
- data/lib/metanorma/mirror/output/html_renderers/list_renderers.rb +0 -96
- data/lib/metanorma/mirror/output/html_renderers/mark_renderers.rb +0 -41
- data/lib/metanorma/mirror/output/html_renderers/section_renderers.rb +0 -129
- data/lib/metanorma/mirror/output/html_renderers/structural_renderers.rb +0 -80
- data/lib/metanorma/mirror/output/html_renderers/table_renderers.rb +0 -87
- data/lib/metanorma/mirror/output/html_renderers.rb +0 -76
- data/lib/metanorma/standard_document/annotation.rb +0 -37
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Metanorma
|
|
4
|
-
module Mirror
|
|
5
|
-
module Output
|
|
6
|
-
module HtmlRenderers
|
|
7
|
-
module TableRenderers
|
|
8
|
-
WRAPPER_TAGS = {
|
|
9
|
-
"table_head" => "thead",
|
|
10
|
-
"table_foot" => "tfoot",
|
|
11
|
-
"table_body" => "tbody",
|
|
12
|
-
}.freeze
|
|
13
|
-
|
|
14
|
-
def self.register(registry)
|
|
15
|
-
registry.register_node_handler("table",
|
|
16
|
-
instance_method(:render_table))
|
|
17
|
-
registry.register_node_handler("table_head",
|
|
18
|
-
instance_method(:render_table_section))
|
|
19
|
-
registry.register_node_handler("table_body",
|
|
20
|
-
instance_method(:render_table_section))
|
|
21
|
-
registry.register_node_handler("table_foot",
|
|
22
|
-
instance_method(:render_table_section))
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def render_table(node, depth: 0)
|
|
26
|
-
sections = node.content.grep(Model::Container)
|
|
27
|
-
|
|
28
|
-
HtmlRenderers.build do |doc|
|
|
29
|
-
attrs = { class: "mn-table" }
|
|
30
|
-
attrs[:id] = node.attrs["id"] if node.attrs["id"]
|
|
31
|
-
doc.div(attrs) do
|
|
32
|
-
if node.attrs["title"]
|
|
33
|
-
doc.div(class: "mn-table__header") do
|
|
34
|
-
doc.text node.attrs["title"]
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
doc.table do
|
|
38
|
-
sections.each do |section|
|
|
39
|
-
HtmlRenderers.embed(doc, build_table_section(section))
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def render_table_section(node, depth: 0)
|
|
47
|
-
build_table_section(node)
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
private
|
|
51
|
-
|
|
52
|
-
def build_table_section(section)
|
|
53
|
-
wrapper_tag = WRAPPER_TAGS[section.type] || "tbody"
|
|
54
|
-
cell_tag = wrapper_tag == "thead" ? "th" : "td"
|
|
55
|
-
|
|
56
|
-
HtmlRenderers.build do |doc|
|
|
57
|
-
doc.public_send(wrapper_tag) do
|
|
58
|
-
section.content.each do |row|
|
|
59
|
-
next unless row.is_a?(Model::Container) && row.type == "table_row"
|
|
60
|
-
|
|
61
|
-
doc.tr do
|
|
62
|
-
row.content.each do |cell|
|
|
63
|
-
next unless cell.is_a?(Model::Container)
|
|
64
|
-
|
|
65
|
-
HtmlRenderers.embed(doc, build_table_cell(cell, cell_tag))
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
def build_table_cell(cell, cell_tag)
|
|
74
|
-
HtmlRenderers.build do |doc|
|
|
75
|
-
attrs = {}
|
|
76
|
-
attrs[:colspan] = cell.attrs["colspan"] if cell.attrs["colspan"]
|
|
77
|
-
attrs[:rowspan] = cell.attrs["rowspan"] if cell.attrs["rowspan"]
|
|
78
|
-
doc.public_send(cell_tag, attrs) do
|
|
79
|
-
HtmlRenderers.embed(doc, render_inline(cell.content))
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
end
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "nokogiri"
|
|
4
|
-
|
|
5
|
-
module Metanorma
|
|
6
|
-
module Mirror
|
|
7
|
-
module Output
|
|
8
|
-
module HtmlRenderers
|
|
9
|
-
autoload :StructuralRenderers,
|
|
10
|
-
"#{__dir__}/html_renderers/structural_renderers"
|
|
11
|
-
autoload :SectionRenderers,
|
|
12
|
-
"#{__dir__}/html_renderers/section_renderers"
|
|
13
|
-
autoload :BlockRenderers, "#{__dir__}/html_renderers/block_renderers"
|
|
14
|
-
autoload :ListRenderers, "#{__dir__}/html_renderers/list_renderers"
|
|
15
|
-
autoload :TableRenderers, "#{__dir__}/html_renderers/table_renderers"
|
|
16
|
-
autoload :InlineRenderer, "#{__dir__}/html_renderers/inline_renderer"
|
|
17
|
-
autoload :MarkRenderers, "#{__dir__}/html_renderers/mark_renderers"
|
|
18
|
-
|
|
19
|
-
MODULES = %i[
|
|
20
|
-
StructuralRenderers
|
|
21
|
-
SectionRenderers
|
|
22
|
-
BlockRenderers
|
|
23
|
-
ListRenderers
|
|
24
|
-
TableRenderers
|
|
25
|
-
InlineRenderer
|
|
26
|
-
MarkRenderers
|
|
27
|
-
].freeze
|
|
28
|
-
|
|
29
|
-
def self.register_all(renderer_class)
|
|
30
|
-
MODULES.each do |mod_name|
|
|
31
|
-
const_get(mod_name).register(renderer_class)
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
# Build a single HTML root element via Nokogiri::HTML4::Builder.
|
|
36
|
-
# Returns the rendered HTML string.
|
|
37
|
-
def self.build(&)
|
|
38
|
-
builder = Nokogiri::HTML4::Builder.new(&)
|
|
39
|
-
builder.doc.root.to_html
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
# Build an HTML fragment (multiple roots permitted) via
|
|
43
|
-
# Nokogiri::HTML4::Builder. Returns the rendered HTML string.
|
|
44
|
-
def self.build_fragment(&)
|
|
45
|
-
fragment = Nokogiri::HTML4::DocumentFragment.parse("")
|
|
46
|
-
Nokogiri::HTML4::Builder.with(fragment, &)
|
|
47
|
-
fragment.to_html
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
# Embed a pre-rendered HTML string under the current builder node
|
|
51
|
-
# without re-escaping.
|
|
52
|
-
def self.embed(doc, html_string)
|
|
53
|
-
return if html_string.nil? || html_string.to_s.empty?
|
|
54
|
-
|
|
55
|
-
doc << Nokogiri::HTML4::DocumentFragment.parse(html_string.to_s)
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
# Wrap a pre-rendered HTML string in a tag. Used by mark handlers.
|
|
59
|
-
def self.wrap(tag, inner_html, **attrs)
|
|
60
|
-
Nokogiri::HTML4::Builder.new do |doc|
|
|
61
|
-
doc.public_send(tag, attrs) do
|
|
62
|
-
doc.parent.inner_html = inner_html.to_s
|
|
63
|
-
end
|
|
64
|
-
end.doc.root.to_html
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
# Escape text for safe inclusion in HTML body content.
|
|
68
|
-
def self.escape_text(text)
|
|
69
|
-
return "" unless text
|
|
70
|
-
|
|
71
|
-
CGI.escapeHTML(text.to_s)
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
end
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Metanorma
|
|
4
|
-
module StandardDocument
|
|
5
|
-
class AnnotationContainer < Lutaml::Model::Serializable
|
|
6
|
-
class Annotation < Lutaml::Model::Serializable
|
|
7
|
-
attribute :id, :string
|
|
8
|
-
attribute :reviewer, :string
|
|
9
|
-
attribute :from, :string
|
|
10
|
-
attribute :to, :string
|
|
11
|
-
attribute :type, :string
|
|
12
|
-
attribute :date, :string
|
|
13
|
-
attribute :paragraphs,
|
|
14
|
-
Metanorma::Document::Components::Paragraphs::ParagraphBlock,
|
|
15
|
-
collection: true
|
|
16
|
-
|
|
17
|
-
xml do
|
|
18
|
-
element "annotation"
|
|
19
|
-
map_attribute "id", to: :id
|
|
20
|
-
map_attribute "reviewer", to: :reviewer
|
|
21
|
-
map_attribute "from", to: :from
|
|
22
|
-
map_attribute "to", to: :to
|
|
23
|
-
map_attribute "type", to: :type
|
|
24
|
-
map_attribute "date", to: :date
|
|
25
|
-
map_element "p", to: :paragraphs
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
attribute :annotations, Annotation, collection: true
|
|
30
|
-
|
|
31
|
-
xml do
|
|
32
|
-
element "annotation-container"
|
|
33
|
-
map_element "annotation", to: :annotations
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|