metanorma-document 0.2.9 → 0.3.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/.rubocop_todo.yml +72 -81
- data/CLAUDE.md +26 -0
- data/README.adoc +144 -0
- data/Rakefile +14 -2
- data/TODO.finalize/01-split-multi-class-files.md +8 -0
- data/TODO.finalize/02-remove-data-dist-iso-document-frontend.md +6 -0
- data/TODO.finalize/03-align-frontend-iife-and-gha-build.md +11 -0
- data/TODO.finalize/04-theme-per-flavor-config-driven.md +9 -0
- data/TODO.finalize/05-migrate-all-html-to-liquid.md +16 -0
- data/TODO.finalize/06-integrate-pubid-library.md +16 -0
- data/TODO.finalize/07-replace-relaton-models-with-relaton-bib.md +39 -0
- data/TODO.finalize/08-refactor-renderer-architecture.md +25 -0
- data/TODO.finalize/09-eliminate-code-smells.md +14 -0
- data/TODO.finalize/10-comprehensive-spec-coverage.md +24 -0
- data/TODO.finalize/11-config-driven-flavor-metadata.md +20 -0
- data/TODO.finalize/12-add-frozen-string-literal.md +6 -0
- data/TODO.finalize/13-extract-composition-from-god-class.md +96 -0
- data/TODO.finalize/14-config-driven-section-ordering.md +31 -0
- data/TODO.finalize/15-theme-directories-per-flavor.md +46 -0
- data/TODO.finalize/16-theme-lutaml-model-schema.md +44 -0
- data/data/javascripts/components/mn-footnotes.js +68 -0
- data/data/javascripts/components/mn-lightbox.js +18 -2
- data/data/javascripts/components/mn-shortcuts.js +2 -0
- data/data/javascripts/core/mn-navigation.js +8 -0
- data/data/javascripts/core/mn-theme.js +9 -9
- data/data/logos/oiml-logo-full-dark.svg +1 -0
- data/data/logos/oiml-logo-full-light.svg +1 -0
- data/data/logos/oiml-logo-icon-dark.svg +1 -0
- data/data/logos/oiml-logo-icon-light.svg +1 -0
- data/data/logos/oiml-logo.svg +1 -0
- data/data/logos/pdfa-logo.svg +31 -94
- data/data/stylesheets/base/_layout.css +3 -0
- data/data/stylesheets/base/_reset.css +3 -3
- data/data/stylesheets/base/_typography.css +0 -5
- data/data/stylesheets/components/bibliography.css +3 -3
- data/data/stylesheets/components/cover.css +3 -1
- data/data/stylesheets/components/figure.css +13 -1
- data/data/stylesheets/components/footnote.css +65 -5
- data/data/stylesheets/components/formula.css +44 -0
- data/data/stylesheets/components/header.css +17 -2
- data/data/stylesheets/components/inline.css +1 -1
- data/data/stylesheets/components/table.css +15 -2
- data/data/stylesheets/components/term.css +0 -1
- data/data/themes/bipm.yaml +60 -0
- data/data/themes/cc.yaml +43 -0
- data/data/themes/icc.yaml +39 -0
- data/data/themes/iec.yaml +44 -0
- data/data/themes/ieee.yaml +43 -0
- data/data/themes/ietf.yaml +45 -0
- data/data/themes/iho.yaml +46 -0
- data/data/themes/iso.yaml +40 -0
- data/data/themes/itu.yaml +45 -0
- data/data/themes/ogc.yaml +51 -0
- data/data/themes/oiml.yaml +56 -0
- data/data/themes/pdfa.yaml +44 -0
- data/data/themes/ribose.yaml +43 -0
- data/exe/metanorma-document +11 -0
- data/frontend/e2e/sample-html.test.ts +256 -0
- data/frontend/index.html +12 -0
- data/frontend/package-lock.json +4725 -0
- data/frontend/package.json +32 -0
- data/frontend/postcss.config.js +6 -0
- data/frontend/src/App.vue +79 -0
- data/frontend/src/app.ts +21 -0
- data/frontend/src/components/AppSidebar.vue +77 -0
- data/frontend/src/components/DocumentReader.vue +180 -0
- data/frontend/src/components/MirrorRenderer.vue +23 -0
- data/frontend/src/components/ReadingProgressBar.vue +29 -0
- data/frontend/src/components/TextRenderer.vue +131 -0
- data/frontend/src/components/TocItem.vue +57 -0
- data/frontend/src/components/TopBar.vue +49 -0
- data/frontend/src/components/__tests__/MirrorRenderer.test.ts +178 -0
- data/frontend/src/components/blocks/AdmonitionBlock.vue +74 -0
- data/frontend/src/components/blocks/ClauseBlock.vue +53 -0
- data/frontend/src/components/blocks/ExampleBlock.vue +21 -0
- data/frontend/src/components/blocks/FallbackBlock.vue +18 -0
- data/frontend/src/components/blocks/FigureBlock.vue +26 -0
- data/frontend/src/components/blocks/FootnotesBlock.vue +25 -0
- data/frontend/src/components/blocks/ListBlocks.vue +62 -0
- data/frontend/src/components/blocks/NoteBlock.vue +21 -0
- data/frontend/src/components/blocks/ParagraphBlock.vue +25 -0
- data/frontend/src/components/blocks/QuoteBlock.vue +25 -0
- data/frontend/src/components/blocks/ReviewBlock.vue +39 -0
- data/frontend/src/components/blocks/SourcecodeBlock.vue +52 -0
- data/frontend/src/components/blocks/TableBlock.vue +48 -0
- data/frontend/src/components/blocks/index.ts +36 -0
- data/frontend/src/stores/__tests__/documentStore.fixture.test.ts +272 -0
- data/frontend/src/stores/__tests__/documentStore.test.ts +143 -0
- data/frontend/src/stores/__tests__/ebookStore.test.ts +145 -0
- data/frontend/src/stores/__tests__/uiStore.test.ts +42 -0
- data/frontend/src/stores/documentStore.ts +153 -0
- data/frontend/src/stores/ebookStore.ts +179 -0
- data/frontend/src/stores/uiStore.ts +32 -0
- data/frontend/src/styles.css +156 -0
- data/frontend/src/types/__tests__/rendering-contract.test.ts +172 -0
- data/frontend/src/types/rendering-contract.ts +209 -0
- data/frontend/src/utils/__tests__/typeMetadata.test.ts +102 -0
- data/frontend/src/utils/typeMetadata.ts +121 -0
- data/frontend/tailwind.config.js +18 -0
- data/frontend/test/fixtures/iso-document.json +271 -0
- data/frontend/tmp/debug_e2e.cjs +46 -0
- data/frontend/tsconfig.json +25 -0
- data/frontend/tsconfig.node.json +11 -0
- data/frontend/vite.config.ts +37 -0
- data/frontend/vitest.e2e.config.ts +9 -0
- data/lib/metanorma/bipm_document/metadata/bipm_bibliographic_item.rb +0 -14
- data/lib/metanorma/bipm_document/metadata/depiction_element.rb +18 -0
- data/lib/metanorma/bipm_document/metadata.rb +1 -1
- data/lib/metanorma/document/cli.rb +116 -0
- data/lib/metanorma/document/components/ancillary_blocks/callout_annotation.rb +27 -0
- data/lib/metanorma/document/components/ancillary_blocks/sourcecode_block.rb +0 -65
- data/lib/metanorma/document/components/ancillary_blocks/sourcecode_body.rb +18 -0
- data/lib/metanorma/document/components/ancillary_blocks.rb +4 -0
- data/lib/metanorma/document/components/bib_data/bib_data.rb +7 -0
- data/lib/metanorma/document/components/blocks/classification_value.rb +21 -0
- data/lib/metanorma/document/components/blocks/permission_model.rb +28 -0
- data/lib/metanorma/document/components/blocks/recommendation_model.rb +28 -0
- data/lib/metanorma/document/components/blocks/requirement_base.rb +30 -0
- data/lib/metanorma/document/components/blocks/requirement_classification.rb +20 -0
- data/lib/metanorma/document/components/blocks/requirement_description.rb +43 -0
- data/lib/metanorma/document/components/blocks/requirement_inherit.rb +24 -0
- data/lib/metanorma/document/components/blocks/requirement_model.rb +0 -131
- data/lib/metanorma/document/components/blocks.rb +8 -7
- data/lib/metanorma/document/components/id_elements/image.rb +2 -0
- data/lib/metanorma/document/components/inline/asciimath_element.rb +2 -0
- data/lib/metanorma/document/components/inline/attribution_element.rb +2 -0
- data/lib/metanorma/document/components/inline/bcp14_element.rb +2 -0
- data/lib/metanorma/document/components/inline/biblio_tag_element.rb +2 -0
- data/lib/metanorma/document/components/inline/br_element.rb +2 -0
- data/lib/metanorma/document/components/inline/comma_element.rb +2 -0
- data/lib/metanorma/document/components/inline/concept_element.rb +2 -0
- data/lib/metanorma/document/components/inline/display_text_element.rb +2 -0
- data/lib/metanorma/document/components/inline/em_raw_element.rb +2 -0
- data/lib/metanorma/document/components/inline/enum_comma_element.rb +2 -0
- data/lib/metanorma/document/components/inline/eref_element.rb +2 -0
- data/lib/metanorma/document/components/inline/fmt_admitted_element.rb +4 -0
- data/lib/metanorma/document/components/inline/fmt_annotation_body_element.rb +4 -0
- data/lib/metanorma/document/components/inline/fmt_annotation_end_element.rb +4 -0
- data/lib/metanorma/document/components/inline/fmt_annotation_start_element.rb +4 -0
- data/lib/metanorma/document/components/inline/fmt_concept_element.rb +4 -0
- data/lib/metanorma/document/components/inline/fmt_definition_element.rb +4 -0
- data/lib/metanorma/document/components/inline/fmt_fn_body_element.rb +4 -0
- data/lib/metanorma/document/components/inline/fmt_fn_label_element.rb +4 -0
- data/lib/metanorma/document/components/inline/fmt_footnote_container_element.rb +4 -0
- data/lib/metanorma/document/components/inline/fmt_identifier_element.rb +4 -0
- data/lib/metanorma/document/components/inline/fmt_name_element.rb +4 -0
- data/lib/metanorma/document/components/inline/fmt_preferred_element.rb +4 -0
- data/lib/metanorma/document/components/inline/fmt_sourcecode_element.rb +4 -0
- data/lib/metanorma/document/components/inline/fmt_stem_element.rb +10 -0
- data/lib/metanorma/document/components/inline/fmt_termsource_element.rb +4 -0
- data/lib/metanorma/document/components/inline/fmt_title_element.rb +4 -0
- data/lib/metanorma/document/components/inline/fmt_xref_element.rb +4 -0
- data/lib/metanorma/document/components/inline/fmt_xref_label_element.rb +4 -0
- data/lib/metanorma/document/components/inline/fn_element.rb +2 -0
- data/lib/metanorma/document/components/inline/link_element.rb +2 -0
- data/lib/metanorma/document/components/inline/localized_string_element.rb +2 -0
- data/lib/metanorma/document/components/inline/localized_strings_element.rb +2 -0
- data/lib/metanorma/document/components/inline/location_element.rb +24 -0
- data/lib/metanorma/document/components/inline/math_element.rb +2 -0
- data/lib/metanorma/document/components/inline/name_with_id_element.rb +4 -0
- data/lib/metanorma/document/components/inline/rendered_display.rb +23 -0
- data/lib/metanorma/document/components/inline/rendered_math_element.rb +21 -0
- data/lib/metanorma/document/components/inline/semantic_content.rb +51 -0
- data/lib/metanorma/document/components/inline/semantic_math_element.rb +20 -0
- data/lib/metanorma/document/components/inline/semx_child_element.rb +2 -0
- data/lib/metanorma/document/components/inline/semx_element.rb +12 -1
- data/lib/metanorma/document/components/inline/small_cap_element.rb +2 -0
- data/lib/metanorma/document/components/inline/span_element.rb +10 -15
- data/lib/metanorma/document/components/inline/stem_inline_element.rb +7 -1
- data/lib/metanorma/document/components/inline/strong_raw_element.rb +2 -0
- data/lib/metanorma/document/components/inline/sub_element.rb +2 -0
- data/lib/metanorma/document/components/inline/sup_element.rb +2 -0
- data/lib/metanorma/document/components/inline/tab_element.rb +2 -0
- data/lib/metanorma/document/components/inline/title_with_annotation_element.rb +4 -0
- data/lib/metanorma/document/components/inline/tt_element.rb +2 -0
- data/lib/metanorma/document/components/inline/variant_title_element.rb +2 -0
- data/lib/metanorma/document/components/inline/vocabulary.rb +184 -0
- data/lib/metanorma/document/components/inline/xref_element.rb +10 -0
- data/lib/metanorma/document/components/inline.rb +12 -0
- data/lib/metanorma/document/components/multi_paragraph/quote_author_element.rb +20 -0
- data/lib/metanorma/document/components/multi_paragraph/quote_block.rb +0 -29
- data/lib/metanorma/document/components/multi_paragraph.rb +2 -0
- data/lib/metanorma/document/components/reference_elements/source_element.rb +0 -31
- data/lib/metanorma/document/components/reference_elements/source_modification.rb +21 -0
- data/lib/metanorma/document/components/reference_elements/source_origin.rb +28 -0
- data/lib/metanorma/document/components/reference_elements.rb +2 -2
- data/lib/metanorma/document/components/tables/col_element.rb +18 -0
- data/lib/metanorma/document/components/tables/col_group_element.rb +18 -0
- data/lib/metanorma/document/components/tables/table_block.rb +0 -22
- data/lib/metanorma/document/components/tables/table_body_section.rb +16 -0
- data/lib/metanorma/document/components/tables/table_foot_section.rb +16 -0
- data/lib/metanorma/document/components/tables/table_head_section.rb +16 -0
- data/lib/metanorma/document/components/tables/table_section.rb +0 -25
- data/lib/metanorma/document/components/tables.rb +5 -3
- data/lib/metanorma/document/relaton/address.rb +0 -27
- data/lib/metanorma/document/relaton/bib_item_locality.rb +3 -12
- data/lib/metanorma/document/relaton/copyright_association.rb +0 -10
- data/lib/metanorma/document/relaton/copyright_owner.rb +16 -0
- data/lib/metanorma/document/relaton/edition.rb +4 -7
- data/lib/metanorma/document/relaton/formatted_address.rb +29 -0
- data/lib/metanorma/document/relaton/logo_element.rb +18 -0
- data/lib/metanorma/document/relaton/organization.rb +0 -14
- data/lib/metanorma/document/relaton/phone.rb +3 -9
- data/lib/metanorma/document/relaton/place_type.rb +0 -13
- data/lib/metanorma/document/relaton/price_type.rb +3 -9
- data/lib/metanorma/document/relaton/region_element.rb +18 -0
- data/lib/metanorma/document/relaton.rb +6 -1
- data/lib/metanorma/document/version.rb +1 -1
- data/lib/metanorma/document.rb +2 -0
- data/lib/metanorma/html/asset_pipeline.rb +1 -0
- data/lib/metanorma/html/base_renderer.rb +284 -1057
- data/lib/metanorma/html/bipm_renderer.rb +15 -144
- data/lib/metanorma/html/cc_renderer.rb +1 -45
- data/lib/metanorma/html/component/base.rb +2 -14
- data/lib/metanorma/html/component/index_section.rb +41 -43
- data/lib/metanorma/html/drops/admonition_drop.rb +1 -4
- data/lib/metanorma/html/drops/biblio_entry_drop.rb +50 -0
- data/lib/metanorma/html/drops/block_element_drop.rb +7 -2
- data/lib/metanorma/html/drops/example_drop.rb +1 -4
- data/lib/metanorma/html/drops/figure_drop.rb +31 -22
- data/lib/metanorma/html/drops/footnote_drop.rb +1 -1
- data/lib/metanorma/html/drops/formula_drop.rb +45 -16
- data/lib/metanorma/html/drops/note_drop.rb +9 -7
- data/lib/metanorma/html/drops/sourcecode_drop.rb +12 -5
- data/lib/metanorma/html/drops.rb +2 -0
- data/lib/metanorma/html/flavor.rb +45 -0
- data/lib/metanorma/html/flavor_registry.rb +49 -0
- data/lib/metanorma/html/generator.rb +108 -31
- data/lib/metanorma/html/icc_renderer.rb +0 -39
- data/lib/metanorma/html/iec_renderer.rb +1 -44
- data/lib/metanorma/html/ieee_renderer.rb +1 -45
- data/lib/metanorma/html/ietf_renderer.rb +1 -48
- data/lib/metanorma/html/iho_renderer.rb +1 -46
- data/lib/metanorma/html/iso_renderer.rb +290 -343
- data/lib/metanorma/html/itu_renderer.rb +1 -45
- data/lib/metanorma/html/ogc_renderer.rb +15 -76
- data/lib/metanorma/html/oiml_renderer.rb +18 -38
- data/lib/metanorma/html/pdfa_renderer.rb +0 -39
- data/lib/metanorma/html/renderer_delegation.rb +21 -0
- data/lib/metanorma/html/renderers/block_renderer.rb +372 -0
- data/lib/metanorma/html/renderers/element_order_traversal.rb +34 -0
- data/lib/metanorma/html/renderers/inline_renderer.rb +642 -0
- data/lib/metanorma/html/renderers/pubid_renderer.rb +47 -0
- data/lib/metanorma/html/renderers/section_renderer.rb +193 -0
- data/lib/metanorma/html/renderers.rb +10 -0
- data/lib/metanorma/html/ribose_renderer.rb +1 -45
- data/lib/metanorma/html/standard_renderer.rb +344 -230
- data/lib/metanorma/html/templates/_audio.html.liquid +1 -0
- data/lib/metanorma/html/templates/_biblio_entry.html.liquid +1 -0
- data/lib/metanorma/html/templates/_bipm_cover.html.liquid +27 -0
- data/lib/metanorma/html/templates/_boilerplate.html.liquid +1 -0
- data/lib/metanorma/html/templates/_bookmark.html.liquid +1 -0
- data/lib/metanorma/html/templates/_br.html.liquid +1 -0
- data/lib/metanorma/html/templates/_definition_list.html.liquid +6 -0
- data/lib/metanorma/html/templates/_element.html.liquid +1 -0
- data/lib/metanorma/html/templates/_fn_marker.html.liquid +1 -0
- data/lib/metanorma/html/templates/_footnotes.html.liquid +6 -6
- data/lib/metanorma/html/templates/_formula.html.liquid +1 -1
- data/lib/metanorma/html/templates/_header.html.liquid +1 -1
- data/lib/metanorma/html/templates/_heading.html.liquid +1 -0
- data/lib/metanorma/html/templates/_image.html.liquid +1 -0
- data/lib/metanorma/html/templates/_inline_span.html.liquid +1 -0
- data/lib/metanorma/html/templates/_iso_cover.html.liquid +1 -1
- data/lib/metanorma/html/templates/_link.html.liquid +1 -0
- data/lib/metanorma/html/templates/_list.html.liquid +3 -0
- data/lib/metanorma/html/templates/_list_item.html.liquid +1 -0
- data/lib/metanorma/html/templates/_main_content.html.liquid +1 -0
- data/lib/metanorma/html/templates/_math_container.html.liquid +1 -0
- data/lib/metanorma/html/templates/_paragraph.html.liquid +1 -0
- data/lib/metanorma/html/templates/_prefatory_section.html.liquid +1 -0
- data/lib/metanorma/html/templates/_pubid_identifier.html.liquid +1 -0
- data/lib/metanorma/html/templates/_quote.html.liquid +4 -0
- data/lib/metanorma/html/templates/_ref_date.html.liquid +1 -0
- data/lib/metanorma/html/templates/_ref_title.html.liquid +1 -0
- data/lib/metanorma/html/templates/_section.html.liquid +5 -0
- data/lib/metanorma/html/templates/_standard_cover.html.liquid +31 -0
- data/lib/metanorma/html/templates/_standard_doc_title.html.liquid +3 -0
- data/lib/metanorma/html/templates/_stem_span.html.liquid +1 -0
- data/lib/metanorma/html/templates/_table.html.liquid +9 -0
- data/lib/metanorma/html/templates/_term_domain.html.liquid +1 -0
- data/lib/metanorma/html/templates/_term_example.html.liquid +1 -0
- data/lib/metanorma/html/templates/_term_note.html.liquid +1 -0
- data/lib/metanorma/html/templates/_term_number.html.liquid +1 -0
- data/lib/metanorma/html/templates/_term_source.html.liquid +1 -0
- data/lib/metanorma/html/templates/_term_text_note.html.liquid +1 -0
- data/lib/metanorma/html/templates/_video.html.liquid +1 -0
- data/lib/metanorma/html/templates/_wrapped_preface.html.liquid +1 -0
- data/lib/metanorma/html/templates/document.html.liquid +4 -0
- data/lib/metanorma/html/theme.rb +180 -107
- data/lib/metanorma/html.rb +16 -0
- data/lib/metanorma/ietf_document/metadata/ietf_bib_data_extension_type.rb +0 -25
- data/lib/metanorma/ietf_document/metadata/pi_settings.rb +32 -0
- data/lib/metanorma/ietf_document/metadata.rb +2 -0
- data/lib/metanorma/iso_document/metadata/doctype_element.rb +20 -0
- data/lib/metanorma/iso_document/metadata/iso_bib_data_extension_type.rb +0 -48
- data/lib/metanorma/iso_document/metadata/iso_bibliographic_item.rb +0 -72
- data/lib/metanorma/iso_document/metadata/iso_document_status.rb +0 -30
- data/lib/metanorma/iso_document/metadata/iso_localized_title.rb +4 -1
- data/lib/metanorma/iso_document/metadata/language_element.rb +18 -0
- data/lib/metanorma/iso_document/metadata/project_number.rb +22 -0
- data/lib/metanorma/iso_document/metadata/script_element.rb +18 -0
- data/lib/metanorma/iso_document/metadata/stage_element.rb +26 -0
- data/lib/metanorma/iso_document/metadata/stagename_element.rb +18 -0
- data/lib/metanorma/iso_document/metadata/structured_identifier.rb +0 -17
- data/lib/metanorma/iso_document/metadata/title_collection.rb +1 -0
- data/lib/metanorma/iso_document/metadata.rb +9 -4
- data/lib/metanorma/iso_document/terms/iso_term.rb +0 -13
- data/lib/metanorma/iso_document/terms/term_domain_element.rb +18 -0
- data/lib/metanorma/iso_document/terms.rb +1 -0
- data/lib/metanorma/itu_document/metadata/itu_bib_data_extension_type.rb +0 -37
- data/lib/metanorma/itu_document/metadata/meeting_date.rb +18 -0
- data/lib/metanorma/itu_document/metadata/meeting_element.rb +18 -0
- data/lib/metanorma/itu_document/metadata/study_period.rb +18 -0
- data/lib/metanorma/itu_document/metadata.rb +3 -4
- data/lib/metanorma/mirror/default_registry.rb +170 -0
- data/lib/metanorma/mirror/handler_registry.rb +60 -0
- data/lib/metanorma/mirror/handler_result.rb +37 -0
- data/lib/metanorma/mirror/handlers/admonition.rb +18 -0
- data/lib/metanorma/mirror/handlers/example.rb +21 -0
- data/lib/metanorma/mirror/handlers/figure.rb +53 -0
- data/lib/metanorma/mirror/handlers/formula.rb +35 -0
- data/lib/metanorma/mirror/handlers/inline/catalog.rb +57 -0
- data/lib/metanorma/mirror/handlers/inline/rich_html_renderer.rb +159 -0
- data/lib/metanorma/mirror/handlers/inline/text_extractor.rb +116 -0
- data/lib/metanorma/mirror/handlers/inline.rb +226 -0
- data/lib/metanorma/mirror/handlers/list.rb +110 -0
- data/lib/metanorma/mirror/handlers/note.rb +26 -0
- data/lib/metanorma/mirror/handlers/paragraph.rb +19 -0
- data/lib/metanorma/mirror/handlers/quote.rb +16 -0
- data/lib/metanorma/mirror/handlers/review.rb +19 -0
- data/lib/metanorma/mirror/handlers/section.rb +149 -0
- data/lib/metanorma/mirror/handlers/sourcecode.rb +27 -0
- data/lib/metanorma/mirror/handlers/structural.rb +68 -0
- data/lib/metanorma/mirror/handlers/table.rb +81 -0
- data/lib/metanorma/mirror/handlers/term.rb +100 -0
- data/lib/metanorma/mirror/handlers.rb +60 -0
- data/lib/metanorma/mirror/id_strategy/positional.rb +166 -0
- data/lib/metanorma/mirror/id_strategy/preserve.rb +12 -0
- data/lib/metanorma/mirror/id_strategy.rb +34 -0
- data/lib/metanorma/mirror/math_util.rb +53 -0
- data/lib/metanorma/mirror/metadata.rb +37 -0
- data/lib/metanorma/mirror/model/container.rb +47 -0
- data/lib/metanorma/mirror/model/factory.rb +52 -0
- data/lib/metanorma/mirror/model/guide.rb +25 -0
- data/lib/metanorma/mirror/model/leaf.rb +17 -0
- data/lib/metanorma/mirror/model/mark.rb +53 -0
- data/lib/metanorma/mirror/model/node.rb +47 -0
- data/lib/metanorma/mirror/model/soft_break.rb +33 -0
- data/lib/metanorma/mirror/model/text.rb +34 -0
- data/lib/metanorma/mirror/model.rb +16 -0
- data/lib/metanorma/mirror/output/builder.rb +39 -0
- data/lib/metanorma/mirror/output/formats/base_format.rb +90 -0
- data/lib/metanorma/mirror/output/formats/inline_format.rb +81 -0
- data/lib/metanorma/mirror/output/formats.rb +53 -0
- data/lib/metanorma/mirror/output/html_renderer.rb +95 -0
- data/lib/metanorma/mirror/output/html_renderers/block_renderers.rb +178 -0
- data/lib/metanorma/mirror/output/html_renderers/inline_renderer.rb +61 -0
- data/lib/metanorma/mirror/output/html_renderers/list_renderers.rb +96 -0
- data/lib/metanorma/mirror/output/html_renderers/mark_renderers.rb +41 -0
- data/lib/metanorma/mirror/output/html_renderers/section_renderers.rb +129 -0
- data/lib/metanorma/mirror/output/html_renderers/structural_renderers.rb +80 -0
- data/lib/metanorma/mirror/output/html_renderers/table_renderers.rb +87 -0
- data/lib/metanorma/mirror/output/html_renderers.rb +76 -0
- data/lib/metanorma/mirror/output/pipeline.rb +92 -0
- data/lib/metanorma/mirror/output/pipeline_context.rb +22 -0
- data/lib/metanorma/mirror/output.rb +14 -0
- data/lib/metanorma/mirror/rewriter.rb +121 -0
- data/lib/metanorma/mirror/safe_attr.rb +16 -0
- data/lib/metanorma/mirror/serialization/json_serializer.rb +25 -0
- data/lib/metanorma/mirror/serialization/yaml_serializer.rb +20 -0
- data/lib/metanorma/mirror/serialization.rb +10 -0
- data/lib/metanorma/mirror/transformer.rb +110 -0
- data/lib/metanorma/mirror.rb +31 -0
- data/lib/metanorma/standard_document/annotation.rb +37 -0
- data/lib/metanorma/standard_document/block_attributes.rb +15 -2
- data/lib/metanorma/standard_document/blocks/block_source.rb +0 -23
- data/lib/metanorma/standard_document/blocks/source_origin_element.rb +23 -0
- data/lib/metanorma/standard_document/blocks.rb +1 -1
- data/lib/metanorma/standard_document/terms/term_expression.rb +0 -31
- data/lib/metanorma/standard_document/terms/term_name_element.rb +29 -0
- data/lib/metanorma/standard_document/terms.rb +1 -0
- data/script/render_both.rb +18 -0
- metadata +272 -13
- data/.github/workflows/rake.yml +0 -21
- data/.github/workflows/release.yml +0 -25
- data/.github/workflows/roundtrip-samples.yml +0 -132
- data/.gitignore +0 -19
- data/.rspec +0 -3
- data/.rubocop.yml +0 -22
- data/Gemfile +0 -28
- data/bin/console +0 -15
- data/bin/setup +0 -8
- data/metanorma-document.gemspec +0 -35
|
@@ -8,15 +8,17 @@ module Metanorma
|
|
|
8
8
|
id = renderer.safe_attr(note, :id)
|
|
9
9
|
label = renderer.extract_block_label(note, "NOTE")
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
renderer.render_mixed_inline(note)
|
|
11
|
+
content_parts = []
|
|
12
|
+
if note.content && !note.content.empty?
|
|
13
|
+
note.content.each do |para|
|
|
14
|
+
content_parts << (renderer.render_paragraph(para) || "")
|
|
16
15
|
end
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
else
|
|
17
|
+
inline = renderer.render_mixed_inline(note)
|
|
18
|
+
content_parts << inline if inline
|
|
19
19
|
end
|
|
20
|
+
content_parts << (renderer.render_note_children(note) || "")
|
|
21
|
+
content_html = content_parts.join
|
|
20
22
|
|
|
21
23
|
new(
|
|
22
24
|
id: id,
|
|
@@ -6,20 +6,27 @@ module Metanorma
|
|
|
6
6
|
class SourcecodeDrop < BlockElementDrop
|
|
7
7
|
attr_reader :lang, :name_html, :code_html
|
|
8
8
|
|
|
9
|
+
def initialize(id: nil, lang: nil, name_html: nil, code_html: nil,
|
|
10
|
+
css_class: nil)
|
|
11
|
+
@id = id
|
|
12
|
+
@lang = lang
|
|
13
|
+
@name_html = name_html
|
|
14
|
+
@code_html = code_html
|
|
15
|
+
@css_class = css_class
|
|
16
|
+
end
|
|
17
|
+
|
|
9
18
|
def self.from_model(sc, renderer:)
|
|
10
19
|
id = renderer.safe_attr(sc, :id)
|
|
11
20
|
lang = renderer.safe_attr(sc, :lang)
|
|
12
21
|
|
|
13
22
|
name_html = if sc.name
|
|
14
|
-
renderer.
|
|
15
|
-
renderer.render_inline_element(sc.name)
|
|
16
|
-
end
|
|
23
|
+
renderer.render_inline_element(sc.name)
|
|
17
24
|
end
|
|
18
25
|
|
|
19
26
|
code_text = if sc.body&.content
|
|
20
|
-
sc.body.content
|
|
27
|
+
Array(sc.body.content).join
|
|
21
28
|
elsif sc.content
|
|
22
|
-
sc.content
|
|
29
|
+
Array(sc.content).join
|
|
23
30
|
else
|
|
24
31
|
""
|
|
25
32
|
end
|
data/lib/metanorma/html/drops.rb
CHANGED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Metanorma
|
|
4
|
+
module Html
|
|
5
|
+
# A flavor ties together the four concepts that identify a Metanorma
|
|
6
|
+
# document variant:
|
|
7
|
+
# - a symbolic name (used for theme loading, CSS class names)
|
|
8
|
+
# - a model class (the typed root class for the flavor)
|
|
9
|
+
# - a renderer class (the HTML renderer that handles the flavor)
|
|
10
|
+
# - an optional Pubid module (for parsing identifiers like ISO/IEC/etc.)
|
|
11
|
+
#
|
|
12
|
+
# Flavor centralizes flavor identity so BaseRenderer, PubidRenderer,
|
|
13
|
+
# and Generator all read from the same source of truth. Adding a new
|
|
14
|
+
# flavor is one Flavor entry in the registry, not three coordinated
|
|
15
|
+
# edits across three files.
|
|
16
|
+
class Flavor
|
|
17
|
+
attr_reader :name, :model_class, :renderer_class, :pubid_module
|
|
18
|
+
|
|
19
|
+
def initialize(name:, model_class:, renderer_class:, pubid_module: nil)
|
|
20
|
+
@name = name
|
|
21
|
+
@model_class = model_class
|
|
22
|
+
@renderer_class = renderer_class
|
|
23
|
+
@pubid_module = pubid_module
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Match by ancestry: a document whose class is the flavor's model
|
|
27
|
+
# class, or any descendant of it, belongs to this flavor. Walks
|
|
28
|
+
# parent classes via is_a? to support subclassing.
|
|
29
|
+
def matches?(document_class)
|
|
30
|
+
return false unless document_class.is_a?(Class)
|
|
31
|
+
|
|
32
|
+
# `<=` returns nil for unrelated classes; coerce to boolean.
|
|
33
|
+
!!(document_class <= model_class)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def pubid_module_const
|
|
37
|
+
return nil unless pubid_module
|
|
38
|
+
|
|
39
|
+
Object.const_get(pubid_module.to_s)
|
|
40
|
+
rescue NameError
|
|
41
|
+
nil
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Metanorma
|
|
4
|
+
module Html
|
|
5
|
+
# Registry of known flavors. Queried by:
|
|
6
|
+
# - Generator — to pick the renderer for a document
|
|
7
|
+
# - BaseRenderer — to resolve flavor_name for theme loading
|
|
8
|
+
# - PubidRenderer — to resolve the Pubid module
|
|
9
|
+
#
|
|
10
|
+
# Single source of truth for flavor identity. Adding a flavor is
|
|
11
|
+
# one Flavor entry via #register.
|
|
12
|
+
class FlavorRegistry
|
|
13
|
+
include Enumerable
|
|
14
|
+
|
|
15
|
+
def initialize
|
|
16
|
+
@flavors = []
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def register(flavor)
|
|
20
|
+
@flavors << flavor
|
|
21
|
+
self
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def each(&)
|
|
25
|
+
@flavors.each(&)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Returns the most-specific Flavor whose model_class matches the
|
|
29
|
+
# given document class (by ancestry). Most-specific = registered
|
|
30
|
+
# last. We scan in reverse so general flavors (registered first)
|
|
31
|
+
# only match if no more specific flavor does.
|
|
32
|
+
def find_for(document_class)
|
|
33
|
+
@flavors.reverse_each.find { |f| f.matches?(document_class) }
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def name_for(document_class)
|
|
37
|
+
find_for(document_class)&.name
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def renderer_for(document_class)
|
|
41
|
+
find_for(document_class)&.renderer_class
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def pubid_module_for(document_class)
|
|
45
|
+
find_for(document_class)&.pubid_module_const
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -3,39 +3,39 @@
|
|
|
3
3
|
module Metanorma
|
|
4
4
|
module Html
|
|
5
5
|
class Generator
|
|
6
|
-
@renderers = []
|
|
7
6
|
@tastes = []
|
|
8
7
|
@setup = false
|
|
9
8
|
|
|
10
9
|
class << self
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
# Returns the full FlavorRegistry built from setup!. Read-only
|
|
11
|
+
# access for BaseRenderer, PubidRenderer, and any consumer that
|
|
12
|
+
# needs flavor identity.
|
|
13
|
+
def flavors
|
|
14
|
+
setup! unless @setup
|
|
15
|
+
@flavors
|
|
13
16
|
end
|
|
14
17
|
|
|
15
|
-
# Register a taste: same document model, different renderer based
|
|
16
|
-
# When the document's first author publisher
|
|
17
|
-
# the taste renderer takes precedence over
|
|
18
|
+
# Register a taste: same document model, different renderer based
|
|
19
|
+
# on publisher. When the document's first author publisher
|
|
20
|
+
# abbreviation matches, the taste renderer takes precedence over
|
|
21
|
+
# the model-based renderer.
|
|
18
22
|
def register_taste(model_class, publisher_abbrev, renderer_class)
|
|
19
23
|
@tastes << [model_class, publisher_abbrev, renderer_class]
|
|
20
24
|
end
|
|
21
25
|
|
|
22
|
-
def generate(document, **
|
|
26
|
+
def generate(document, **)
|
|
23
27
|
setup! unless @setup
|
|
24
|
-
renderer_for(document).new.generate_full_document(document)
|
|
28
|
+
renderer_for(document).new.generate_full_document(document, **)
|
|
25
29
|
end
|
|
26
30
|
|
|
27
31
|
def renderer_for(document)
|
|
28
32
|
setup! unless @setup
|
|
29
33
|
|
|
30
|
-
# Check tastes first (publisher-based dispatch)
|
|
31
34
|
taste_renderer = find_taste(document)
|
|
32
35
|
return taste_renderer if taste_renderer
|
|
33
36
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
return renderer_class if document.is_a?(model_class)
|
|
37
|
-
end
|
|
38
|
-
BaseRenderer
|
|
37
|
+
flavor = @flavors.find_for(document.class)
|
|
38
|
+
flavor&.renderer_class || BaseRenderer
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
private
|
|
@@ -79,6 +79,7 @@ module Metanorma
|
|
|
79
79
|
return if @setup
|
|
80
80
|
|
|
81
81
|
@setup = true
|
|
82
|
+
@flavors = build_flavor_registry
|
|
82
83
|
|
|
83
84
|
# Trigger autoloads by referencing constants
|
|
84
85
|
BaseRenderer
|
|
@@ -97,27 +98,103 @@ module Metanorma
|
|
|
97
98
|
PdfaRenderer
|
|
98
99
|
RiboseRenderer
|
|
99
100
|
|
|
100
|
-
# Register renderers (most general first, most specific last)
|
|
101
|
-
register Metanorma::Document::Root, BaseRenderer
|
|
102
|
-
register Metanorma::StandardDocument::Root, StandardRenderer
|
|
103
|
-
register Metanorma::IsoDocument::Root, IsoRenderer
|
|
104
|
-
register Metanorma::BipmDocument::Root, BipmRenderer
|
|
105
|
-
register Metanorma::CcDocument::Root, CcRenderer
|
|
106
|
-
register Metanorma::IecDocument::Root, IecRenderer
|
|
107
|
-
register Metanorma::IeeeDocument::Root, IeeeRenderer
|
|
108
|
-
register Metanorma::IetfDocument::Root, IetfRenderer
|
|
109
|
-
register Metanorma::IhoDocument::Root, IhoRenderer
|
|
110
|
-
register Metanorma::ItuDocument::Root, ItuRenderer
|
|
111
|
-
register Metanorma::OgcDocument::Root, OgcRenderer
|
|
112
|
-
register Metanorma::OimlDocument::Root, OimlRenderer
|
|
113
|
-
register Metanorma::RiboseDocument::Root, RiboseRenderer
|
|
114
|
-
|
|
115
101
|
# Register tastes (publisher-based dispatch within same model)
|
|
116
|
-
register_taste Metanorma::IsoDocument::Root,
|
|
117
|
-
IccRenderer
|
|
102
|
+
register_taste Metanorma::IsoDocument::Root, "ICC", IccRenderer
|
|
118
103
|
register_taste Metanorma::RiboseDocument::Root, "PDF Association",
|
|
119
104
|
PdfaRenderer
|
|
120
105
|
end
|
|
106
|
+
|
|
107
|
+
# Single source of truth for flavor identity. Each Flavor ties
|
|
108
|
+
# together the model class, the renderer, the symbolic name, and
|
|
109
|
+
# (if applicable) the Pubid module. Adding a new flavor = one
|
|
110
|
+
# entry here.
|
|
111
|
+
def build_flavor_registry
|
|
112
|
+
FlavorRegistry.new.tap do |registry|
|
|
113
|
+
registry.register(Flavor.new(
|
|
114
|
+
name: nil,
|
|
115
|
+
model_class: Metanorma::Document::Root,
|
|
116
|
+
renderer_class: BaseRenderer,
|
|
117
|
+
))
|
|
118
|
+
registry.register(Flavor.new(
|
|
119
|
+
name: nil,
|
|
120
|
+
model_class: Metanorma::StandardDocument::Root,
|
|
121
|
+
renderer_class: StandardRenderer,
|
|
122
|
+
))
|
|
123
|
+
registry.register(Flavor.new(
|
|
124
|
+
name: :iso,
|
|
125
|
+
model_class: Metanorma::IsoDocument::Root,
|
|
126
|
+
renderer_class: IsoRenderer,
|
|
127
|
+
pubid_module: :"Pubid::Iso",
|
|
128
|
+
))
|
|
129
|
+
registry.register(Flavor.new(
|
|
130
|
+
name: :bipm,
|
|
131
|
+
model_class: Metanorma::BipmDocument::Root,
|
|
132
|
+
renderer_class: BipmRenderer,
|
|
133
|
+
))
|
|
134
|
+
registry.register(Flavor.new(
|
|
135
|
+
name: :cc,
|
|
136
|
+
model_class: Metanorma::CcDocument::Root,
|
|
137
|
+
renderer_class: CcRenderer,
|
|
138
|
+
))
|
|
139
|
+
registry.register(Flavor.new(
|
|
140
|
+
name: :iec,
|
|
141
|
+
model_class: Metanorma::IecDocument::Root,
|
|
142
|
+
renderer_class: IecRenderer,
|
|
143
|
+
pubid_module: :"Pubid::Iec",
|
|
144
|
+
))
|
|
145
|
+
registry.register(Flavor.new(
|
|
146
|
+
name: :ieee,
|
|
147
|
+
model_class: Metanorma::IeeeDocument::Root,
|
|
148
|
+
renderer_class: IeeeRenderer,
|
|
149
|
+
pubid_module: :"Pubid::Ieee",
|
|
150
|
+
))
|
|
151
|
+
registry.register(Flavor.new(
|
|
152
|
+
name: :ietf,
|
|
153
|
+
model_class: Metanorma::IetfDocument::Root,
|
|
154
|
+
renderer_class: IetfRenderer,
|
|
155
|
+
))
|
|
156
|
+
registry.register(Flavor.new(
|
|
157
|
+
name: :iho,
|
|
158
|
+
model_class: Metanorma::IhoDocument::Root,
|
|
159
|
+
renderer_class: IhoRenderer,
|
|
160
|
+
pubid_module: :"Pubid::Iho",
|
|
161
|
+
))
|
|
162
|
+
registry.register(Flavor.new(
|
|
163
|
+
name: :itu,
|
|
164
|
+
model_class: Metanorma::ItuDocument::Root,
|
|
165
|
+
renderer_class: ItuRenderer,
|
|
166
|
+
pubid_module: :"Pubid::Ithu",
|
|
167
|
+
))
|
|
168
|
+
registry.register(Flavor.new(
|
|
169
|
+
name: :ogc,
|
|
170
|
+
model_class: Metanorma::OgcDocument::Root,
|
|
171
|
+
renderer_class: OgcRenderer,
|
|
172
|
+
))
|
|
173
|
+
registry.register(Flavor.new(
|
|
174
|
+
name: :oiml,
|
|
175
|
+
model_class: Metanorma::OimlDocument::Root,
|
|
176
|
+
renderer_class: OimlRenderer,
|
|
177
|
+
pubid_module: :"Pubid::Oiml",
|
|
178
|
+
))
|
|
179
|
+
registry.register(Flavor.new(
|
|
180
|
+
name: :pdfa,
|
|
181
|
+
model_class: Metanorma::RiboseDocument::Root,
|
|
182
|
+
renderer_class: PdfaRenderer,
|
|
183
|
+
))
|
|
184
|
+
registry.register(Flavor.new(
|
|
185
|
+
name: :ribose,
|
|
186
|
+
model_class: Metanorma::RiboseDocument::Root,
|
|
187
|
+
renderer_class: RiboseRenderer,
|
|
188
|
+
))
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def safe_attr(node, attr_name)
|
|
193
|
+
return nil unless node.is_a?(Lutaml::Model::Serializable)
|
|
194
|
+
return nil unless node.class.attributes.key?(attr_name)
|
|
195
|
+
|
|
196
|
+
node.public_send(attr_name)
|
|
197
|
+
end
|
|
121
198
|
end
|
|
122
199
|
end
|
|
123
200
|
end
|
|
@@ -5,45 +5,6 @@ module Metanorma
|
|
|
5
5
|
# Renders ICC (International Color Consortium) taste documents to HTML.
|
|
6
6
|
# ICC brand: color management — dark charcoal + steel blue + warm gray
|
|
7
7
|
class IccRenderer < IsoRenderer
|
|
8
|
-
def flavor_publishers(_doc_id)
|
|
9
|
-
["ICC"]
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def flavor_publisher_name
|
|
13
|
-
"ICC"
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def publisher_logo_map
|
|
17
|
-
{}
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def theme
|
|
21
|
-
@theme ||= Theme.new.tap do |t|
|
|
22
|
-
t.primary = "#3a3f47"
|
|
23
|
-
t.accent = "#4a90c4"
|
|
24
|
-
t.accent_deep = "#3a78a8"
|
|
25
|
-
t.gradient = "linear-gradient(135deg, #2a2e34 0%, #3a3f47 50%, #4a5464 100%)"
|
|
26
|
-
t.primary_light = "#eef0f2"
|
|
27
|
-
t.accent_light = "#e4eef6"
|
|
28
|
-
t.warm = "#c4956a"
|
|
29
|
-
t.warm_light = "#faf3ec"
|
|
30
|
-
t.header_background = "linear-gradient(135deg, #2a2e34 0%, #3a3f47 40%, #4a5464 100%)"
|
|
31
|
-
t.cover_background = "linear-gradient(175deg, #1e2126 0%, #2a2e34 25%, #3a3f47 55%, #4a5464 85%, #4a90c4 100%)"
|
|
32
|
-
t.cover_before_bg = "background: radial-gradient(ellipse at 30% 20%, rgba(74,144,196,0.15) 0%, transparent 50%), radial-gradient(ellipse at 70% 80%, rgba(196,149,106,0.1) 0%, transparent 40%)"
|
|
33
|
-
t.cover_after_bg = "height: 3px; background: linear-gradient(90deg, transparent, #4a90c4, #c4956a, transparent)"
|
|
34
|
-
t.progress_bar_color = "#4a90c4"
|
|
35
|
-
t.note_border = "#4a90c4"
|
|
36
|
-
t.note_bg = "#e4eef6"
|
|
37
|
-
t.note_color = "#4a90c4"
|
|
38
|
-
t.example_border = "#3a3f47"
|
|
39
|
-
t.example_bg = "#eef0f2"
|
|
40
|
-
t.example_color = "#3a3f47"
|
|
41
|
-
t.admonition_border = "#c4956a"
|
|
42
|
-
t.admonition_color = "#c4956a"
|
|
43
|
-
t.footer_border_color = "#4a90c4"
|
|
44
|
-
t.cover_separator_color = "rgba(74,144,196,0.25)"
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
8
|
end
|
|
48
9
|
end
|
|
49
10
|
end
|
|
@@ -2,51 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
module Metanorma
|
|
4
4
|
module Html
|
|
5
|
-
# IEC brand: #0061a9 blue from logo
|
|
6
5
|
class IecRenderer < IsoRenderer
|
|
7
|
-
|
|
8
|
-
["IEC"]
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def flavor_publisher_name
|
|
12
|
-
"IEC"
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def publisher_logo_map
|
|
16
|
-
{ "IEC" => "iec-logo.svg" }
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def theme
|
|
20
|
-
@theme ||= Theme.new.tap do |t|
|
|
21
|
-
t.font_body = '"Crimson Pro", "Georgia", "Times New Roman", serif'
|
|
22
|
-
t.font_sans = '"IBM Plex Sans", "Helvetica Neue", Arial, sans-serif'
|
|
23
|
-
t.font_mono = '"IBM Plex Mono", "Fira Code", monospace'
|
|
24
|
-
t.font_url = "https://fonts.googleapis.com/css2?family=Crimson+Pro:ital,wght@0,300;0,400;0,500;0,600;0,700;1,400&family=IBM+Plex+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap"
|
|
25
|
-
t.primary = "#004a83"
|
|
26
|
-
t.accent = "#0061a9"
|
|
27
|
-
t.accent_deep = "#004a83"
|
|
28
|
-
t.gradient = "linear-gradient(135deg, #00305a 0%, #004a83 50%, #0061a9 100%)"
|
|
29
|
-
t.primary_light = "#ebf3f9"
|
|
30
|
-
t.accent_light = "#d9ecf7"
|
|
31
|
-
t.warm = "#d4a017"
|
|
32
|
-
t.warm_light = "#fdf6e8"
|
|
33
|
-
t.header_background = "linear-gradient(135deg, #00305a 0%, #004a83 40%, #0061a9 100%)"
|
|
34
|
-
t.cover_background = "linear-gradient(175deg, #001f3d 0%, #00305a 25%, #004a83 55%, #0061a9 85%, #3391c4 100%)"
|
|
35
|
-
t.cover_before_bg = "background: radial-gradient(ellipse at 20% 10%, rgba(0,97,169,0.2) 0%, transparent 50%), radial-gradient(ellipse at 80% 90%, rgba(212,160,23,0.1) 0%, transparent 40%)"
|
|
36
|
-
t.cover_after_bg = "height: 3px; background: linear-gradient(90deg, transparent, #0061a9, #d4a017, transparent)"
|
|
37
|
-
t.progress_bar_color = "#0061a9"
|
|
38
|
-
t.note_border = "#0061a9"
|
|
39
|
-
t.note_bg = "#d9ecf7"
|
|
40
|
-
t.note_color = "#0061a9"
|
|
41
|
-
t.example_border = "#004a83"
|
|
42
|
-
t.example_bg = "#ebf3f9"
|
|
43
|
-
t.example_color = "#004a83"
|
|
44
|
-
t.admonition_border = "#d4a017"
|
|
45
|
-
t.admonition_color = "#b8860b"
|
|
46
|
-
t.footer_border_color = "#0061a9"
|
|
47
|
-
t.cover_separator_color = "rgba(0,97,169,0.25)"
|
|
48
|
-
end
|
|
49
|
-
end
|
|
6
|
+
register_render Metanorma::IecDocument::Root, :render_document
|
|
50
7
|
end
|
|
51
8
|
end
|
|
52
9
|
end
|
|
@@ -2,52 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
module Metanorma
|
|
4
4
|
module Html
|
|
5
|
-
# Renders IeeeDocument components to HTML.
|
|
6
|
-
# Extends IsoRenderer with IEEE branding.
|
|
7
5
|
class IeeeRenderer < IsoRenderer
|
|
8
|
-
|
|
9
|
-
["IEEE"]
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def flavor_publisher_name
|
|
13
|
-
"IEEE"
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def publisher_logo_map
|
|
17
|
-
{}
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def theme
|
|
21
|
-
@theme ||= Theme.new.tap do |t|
|
|
22
|
-
t.font_body = '"Source Serif 4", "Georgia", serif'
|
|
23
|
-
t.font_sans = '"IBM Plex Sans", "Helvetica Neue", Arial, sans-serif'
|
|
24
|
-
t.font_mono = '"IBM Plex Mono", "Fira Code", monospace'
|
|
25
|
-
t.font_url = "https://fonts.googleapis.com/css2?family=Source+Serif+4:ital,opsz,wght@0,8..60,300..700;1,8..60,300..700&family=IBM+Plex+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap"
|
|
26
|
-
t.primary = "#006699"
|
|
27
|
-
t.accent = "#0099cc"
|
|
28
|
-
t.accent_deep = "#007ab3"
|
|
29
|
-
t.gradient = "linear-gradient(135deg, #003d5c 0%, #006699 50%, #0099cc 100%)"
|
|
30
|
-
t.primary_light = "#edf5fa"
|
|
31
|
-
t.accent_light = "#e0f2fc"
|
|
32
|
-
t.warm = "#c9982e"
|
|
33
|
-
t.warm_light = "#fdf8ec"
|
|
34
|
-
t.header_background = "linear-gradient(135deg, #003d5c 0%, #006699 50%, #0099cc 100%)"
|
|
35
|
-
t.cover_background = "linear-gradient(175deg, #002640 0%, #003d5c 30%, #006699 65%, #0099cc 100%)"
|
|
36
|
-
t.cover_before_bg = "background: radial-gradient(ellipse at 25% 15%, rgba(0,153,204,0.2) 0%, transparent 50%), radial-gradient(ellipse at 75% 85%, rgba(201,152,46,0.15) 0%, transparent 40%)"
|
|
37
|
-
t.cover_after_bg = "height: 3px; background: linear-gradient(90deg, transparent, #c9982e, transparent)"
|
|
38
|
-
t.progress_bar_color = "#0099cc"
|
|
39
|
-
t.note_border = "#0099cc"
|
|
40
|
-
t.note_bg = "#e0f2fc"
|
|
41
|
-
t.note_color = "#0099cc"
|
|
42
|
-
t.example_border = "#006699"
|
|
43
|
-
t.example_bg = "#edf5fa"
|
|
44
|
-
t.example_color = "#006699"
|
|
45
|
-
t.admonition_border = "#c9982e"
|
|
46
|
-
t.admonition_color = "#c9982e"
|
|
47
|
-
t.footer_border_color = "#0099cc"
|
|
48
|
-
t.cover_separator_color = "rgba(0,153,204,0.25)"
|
|
49
|
-
end
|
|
50
|
-
end
|
|
6
|
+
register_render Metanorma::IeeeDocument::Root, :render_document
|
|
51
7
|
end
|
|
52
8
|
end
|
|
53
9
|
end
|
|
@@ -2,55 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
module Metanorma
|
|
4
4
|
module Html
|
|
5
|
-
# Renders IetfDocument components to HTML.
|
|
6
|
-
# Extends IsoRenderer with IETF/RFC branding.
|
|
7
5
|
class IetfRenderer < IsoRenderer
|
|
8
|
-
|
|
9
|
-
["IETF"]
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def flavor_publisher_name
|
|
13
|
-
"IETF"
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def publisher_logo_map
|
|
17
|
-
{}
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def theme
|
|
21
|
-
@theme ||= Theme.new.tap do |t|
|
|
22
|
-
t.primary = "#333"
|
|
23
|
-
t.accent = "#c44536"
|
|
24
|
-
t.accent_deep = "#a3362b"
|
|
25
|
-
t.gradient = "linear-gradient(135deg, #1a1a1a 0%, #333 50%, #4d4d4d 100%)"
|
|
26
|
-
t.primary_light = "#f5f5f5"
|
|
27
|
-
t.accent_light = "#fdf0ee"
|
|
28
|
-
t.warm = "#c9982e"
|
|
29
|
-
t.warm_light = "#fdf8ec"
|
|
30
|
-
t.font_body = '"Roboto Slab", "Georgia", serif'
|
|
31
|
-
t.font_sans = '"Inter", "Helvetica Neue", Arial, sans-serif'
|
|
32
|
-
t.font_mono = '"JetBrains Mono", "Fira Code", monospace'
|
|
33
|
-
t.font_url = "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Roboto+Slab:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap"
|
|
34
|
-
t.header_background = "linear-gradient(135deg, #1a1a1a 0%, #333 50%, #4d4d4d 100%)"
|
|
35
|
-
t.cover_background = "linear-gradient(175deg, #0d0d0d 0%, #1a1a1a 30%, #333 65%, #4d4d4d 100%)"
|
|
36
|
-
t.cover_before_bg = "background: radial-gradient(ellipse at 30% 20%, rgba(196,69,54,0.15) 0%, transparent 50%), radial-gradient(ellipse at 70% 80%, rgba(77,77,77,0.2) 0%, transparent 40%)"
|
|
37
|
-
t.cover_after_bg = "height: 2px; background: linear-gradient(90deg, transparent, #c44536, transparent)"
|
|
38
|
-
t.progress_bar_color = "#c44536"
|
|
39
|
-
t.note_border = "#c44536"
|
|
40
|
-
t.note_bg = "#fdf0ee"
|
|
41
|
-
t.note_color = "#c44536"
|
|
42
|
-
t.example_border = "#333"
|
|
43
|
-
t.example_bg = "#f5f5f5"
|
|
44
|
-
t.example_color = "#333"
|
|
45
|
-
t.admonition_border = "#c9982e"
|
|
46
|
-
t.admonition_color = "#c9982e"
|
|
47
|
-
t.footer_border_color = "#c44536"
|
|
48
|
-
t.cover_separator_color = "rgba(196,69,54,0.25)"
|
|
49
|
-
t.extra_css = <<~CSS
|
|
50
|
-
.sourcecode pre { background: #1a1a1a; border-color: #333; color: #e0e0e0; }
|
|
51
|
-
CSS
|
|
52
|
-
end
|
|
53
|
-
end
|
|
6
|
+
register_render Metanorma::IetfDocument::Root, :render_document
|
|
54
7
|
end
|
|
55
8
|
end
|
|
56
9
|
end
|
|
@@ -2,53 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
module Metanorma
|
|
4
4
|
module Html
|
|
5
|
-
# IHO brand: #00AAA9 teal + #05164D navy + #FEDC5B gold from logo
|
|
6
5
|
class IhoRenderer < IsoRenderer
|
|
7
|
-
|
|
8
|
-
["IHO"]
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def flavor_publisher_name
|
|
12
|
-
"IHO"
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def publisher_logo_map
|
|
16
|
-
{ "IHO" => "iho-logo.svg" }
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def theme
|
|
20
|
-
@theme ||= Theme.new.tap do |t|
|
|
21
|
-
t.primary = "#05164D"
|
|
22
|
-
t.accent = "#00AAA9"
|
|
23
|
-
t.accent_deep = "#008887"
|
|
24
|
-
t.gradient = "linear-gradient(135deg, #03103a 0%, #05164D 50%, #00AAA9 100%)"
|
|
25
|
-
t.primary_light = "#eaf5f5"
|
|
26
|
-
t.accent_light = "#e0f7f6"
|
|
27
|
-
t.warm = "#FEDC5B"
|
|
28
|
-
t.warm_light = "#fff9e6"
|
|
29
|
-
t.sidebar_bg = "#f0f5f8"
|
|
30
|
-
t.font_body = '"Source Serif 4", "Georgia", serif'
|
|
31
|
-
t.font_sans = '"Source Sans 3", "Helvetica Neue", Arial, sans-serif'
|
|
32
|
-
t.font_mono = '"Source Code Pro", "Menlo", monospace'
|
|
33
|
-
t.font_url = "https://fonts.googleapis.com/css2?family=Source+Sans+3:ital,wght@0,400;0,500;0,600;0,700;1,400&family=Source+Serif+4:ital,wght@0,400;0,500;0,600;1,400&family=Source+Code+Pro:wght@400;500&display=swap"
|
|
34
|
-
t.header_background = "linear-gradient(135deg, #03103a 0%, #05164D 40%, #00AAA9 100%)"
|
|
35
|
-
t.cover_background = "linear-gradient(175deg, #020a20 0%, #03103a 25%, #05164D 55%, #008887 85%, #00AAA9 100%)"
|
|
36
|
-
t.cover_before_bg = "background: radial-gradient(ellipse at 30% 20%, rgba(0,170,169,0.2) 0%, transparent 50%), radial-gradient(ellipse at 70% 80%, rgba(254,220,91,0.1) 0%, transparent 40%)"
|
|
37
|
-
t.cover_after_bg = "height: 4px; background: linear-gradient(90deg, #00AAA9, #05164D, #FEDC5B, #00AAA9)"
|
|
38
|
-
t.progress_bar_color = "#00AAA9"
|
|
39
|
-
t.note_border = "#00AAA9"
|
|
40
|
-
t.note_bg = "#e0f7f6"
|
|
41
|
-
t.note_color = "#00AAA9"
|
|
42
|
-
t.example_border = "#05164D"
|
|
43
|
-
t.example_bg = "#eaf5f5"
|
|
44
|
-
t.example_color = "#008887"
|
|
45
|
-
t.admonition_border = "#FEDC5B"
|
|
46
|
-
t.admonition_bg = "#fff9e6"
|
|
47
|
-
t.admonition_color = "#b8860b"
|
|
48
|
-
t.footer_border_color = "#00AAA9"
|
|
49
|
-
t.cover_separator_color = "rgba(0,170,169,0.3)"
|
|
50
|
-
end
|
|
51
|
-
end
|
|
6
|
+
register_render Metanorma::IhoDocument::Root, :render_document
|
|
52
7
|
end
|
|
53
8
|
end
|
|
54
9
|
end
|