Class: IsoDoc::PresentationXMLConvert
- Inherits:
-
Convert
show all
- Defined in:
- lib/isodoc/presentation_xml_convert.rb,
lib/isodoc/presentation_function/math.rb,
lib/isodoc/presentation_function/refs.rb,
lib/isodoc/presentation_function/reqt.rb,
lib/isodoc/presentation_function/block.rb,
lib/isodoc/presentation_function/docid.rb,
lib/isodoc/presentation_function/erefs.rb,
lib/isodoc/presentation_function/image.rb,
lib/isodoc/presentation_function/index.rb,
lib/isodoc/presentation_function/terms.rb,
lib/isodoc/presentation_function/title.rb,
lib/isodoc/presentation_function/xrefs.rb,
lib/isodoc/presentation_function/inline.rb,
lib/isodoc/presentation_function/autonum.rb,
lib/isodoc/presentation_function/bibdata.rb,
lib/isodoc/presentation_function/section.rb,
lib/isodoc/presentation_function/concepts.rb,
lib/isodoc/presentation_function/metadata.rb,
lib/isodoc/presentation_function/sourcecode.rb
Constant Summary
collapse
- MATHML =
{ "m" => "http://www.w3.org/1998/Math/MathML" }.freeze
- SKIP_DOCID =
<<~XPATH.strip.freeze
@type = 'DOI' or @type = 'doi' or @type = 'ISSN' or @type = 'issn' or @type = 'ISBN' or @type = 'isbn' or starts-with(@type, 'ISSN.') or starts-with(@type, 'ISBN.') or starts-with(@type, 'issn.') or starts-with(@type, 'isbn.')
XPATH
- REQS =
%w(requirement recommendation permission).freeze
- SVG =
{ "m" => "http://www.w3.org/2000/svg" }.freeze
Constants inherited
from Convert
Convert::AGENCIES
Function::Utils::CLAUSE_ANCESTOR, Function::Utils::DOCTYPE_HDR, Function::Utils::HUGESTRICT, Function::Utils::LABELLED_ANCESTOR_ELEMENTS, Function::Utils::NOTE_CONTAINER_ANCESTOR
Function::ToWordHtml::TOP_ELEMENTS
Function::Table::SW
Function::Section::TERM_CLAUSE
Function::Lists::OL_STYLE
Function::Inline::SPAN_UNWRAP_CLASSES
Function::Cleanup::TABLENOTE_CSS
Function::Blocks::EXAMPLE_TBL_ATTR, Function::Blocks::EXAMPLE_TD_ATTR
Instance Attribute Summary
Attributes inherited from Convert
#bibrender, #doctype, #i18n, #meta, #options, #reqt_models, #requirements_processor, #tempfile_cache, #wordcoverpage, #wordintropage, #xrefs
Instance Method Summary
collapse
-
#add_id ⇒ Object
-
#address_precompose(bib) ⇒ Object
-
#address_precompose1(addr) ⇒ Object
-
#admits(elem) ⇒ Object
-
#admonition(docxml) ⇒ Object
-
#admonition1(elem) ⇒ Object
-
#admonition_delim(_elem) ⇒ Object
-
#admonition_label(elem, num) ⇒ Object
-
#admonition_numbered1(elem) ⇒ Object
-
#also_lbl ⇒ Object
-
#amend(docxml) ⇒ Object
we use this to eliminate the semantic amend blocks from rendering.
-
#amend1(elem) ⇒ Object
-
#anchor_id_postproc(node) ⇒ Object
-
#anchor_id_postprocess(node) ⇒ Object
-
#anchor_linkend(node, linkend) ⇒ Object
-
#anchor_linkend1(node) ⇒ Object
-
#anchor_value(id) ⇒ Object
-
#anchor_xref(node, target, container: false) ⇒ Object
-
#anchor_xref_full(num, title) ⇒ Object
-
#anchor_xref_short(node, target, container) ⇒ Object
-
#annex(docxml) ⇒ Object
-
#annex1(elem) ⇒ Object
-
#annex_delim(_elem) ⇒ Object
-
#annotations(elem) ⇒ Object
-
#asciimath_dup(node) ⇒ Object
-
#attachments_extract(docxml) ⇒ Object
-
#autonum(id, num) ⇒ Object
-
#bibdata(docxml) ⇒ Object
-
#bibdata_current(docxml) ⇒ Object
-
#bibdata_i18n(bib) ⇒ Object
-
#bibitem(xml, renderings) ⇒ Object
-
#bibitem_lookup(docxml) ⇒ Object
-
#bibitem_ref_code(bib) ⇒ Object
returns [metanorma, non-metanorma, DOI/ISSN/ISBN] identifiers.
-
#bibitem_ref_code_prep(bib) ⇒ Object
-
#biblio_ref_entry_code(ordinal, ids, _id, _standard, datefn, _bib) ⇒ Object
if ids is just a number, only use that ([1] Non-Standard) else, use both ordinal, as prefix, and ids.
-
#bibliography_bibitem_number(docxml) ⇒ Object
-
#bibliography_bibitem_number1(bibitem, idx, normative) ⇒ Object
-
#bibliography_bibitem_number_insert_pt(bibitem) ⇒ Object
-
#bibliography_bibitem_number_skip(bibitem) ⇒ Object
-
#bibliography_bibitem_tag(docxml) ⇒ Object
-
#bibliography_bibitem_tag1(ref, idx, norm) ⇒ Object
-
#bibrender_formattedref(formattedref, xml) ⇒ Object
-
#bibrender_item(xml, renderings) ⇒ Object
-
#bibrender_relaton(xml, renderings) ⇒ Object
-
#blank?(elem) ⇒ Boolean
-
#block(docxml) ⇒ Object
-
#block_delim ⇒ Object
-
#bracket_if_num(num) ⇒ Object
-
#callouts(elem) ⇒ Object
-
#can_conflate_eref_rendering?(refs) ⇒ Boolean
-
#can_conflate_xref_rendering?(locs) ⇒ Boolean
-
#capitalise_xref(node, linkend, label) ⇒ Object
-
#capitalise_xref1(node, linkend) ⇒ Object
-
#change_case(span, value, seen_space) ⇒ Object
-
#citeas(xmldoc) ⇒ Object
-
#citeas_cleanup(ref) ⇒ Object
-
#citestyle ⇒ Object
-
#cjk_extended_title(doc) ⇒ Object
-
#cjk_search ⇒ Object
-
#clause(docxml) ⇒ Object
-
#clause1(elem) ⇒ Object
-
#clausedelim ⇒ Object
-
#clausetitle(docxml) ⇒ Object
-
#combine_conflated_xref_locations(locs) ⇒ Object
Note % to entry and Note % to entry: cannot conflate as Note % to entry 1 and 2 So Notes 1 and 3, but Note 1 to entry and Note 3 to entry.
-
#combine_conflated_xref_locations_container(locs, ret) ⇒ Object
-
#combine_conn(list) ⇒ Object
-
#combine_xref_locations(node) ⇒ Object
-
#concept(docxml) ⇒ Object
-
#concept1(node) ⇒ Object
-
#concept1_linkmention(ref, renderterm, opts) ⇒ Object
-
#concept1_ref(_node, ref, opts) ⇒ Object
-
#concept1_ref_content(ref) ⇒ Object
-
#concept1_style(node, opts) ⇒ Object
-
#concept_render(node, defaults) ⇒ Object
-
#concept_render_init(node, defaults) ⇒ Object
-
#conditional_capitalize(text, seen_space) ⇒ Object
-
#conflate_xref_locations(locs) ⇒ Object
-
#conversions(docxml) ⇒ Object
-
#convert1(docxml, filename, dir) ⇒ Object
-
#copy_baselevel_termsource(docxml) ⇒ Object
-
#custom_charset(docxml) ⇒ Object
-
#custom_css(docxml) ⇒ Object
-
#date(docxml) ⇒ Object
-
#date1(elem) ⇒ Object
-
#date_note_process(bib) ⇒ Object
strip any fns in docidentifier before they are extracted for rendering.
-
#deprecates(elem) ⇒ Object
-
#designation(docxml) ⇒ Object
-
#designation1(desgn) ⇒ Object
-
#designation_annotate(desgn, name, orig) ⇒ Object
-
#designation_boldface(desgn) ⇒ Object
-
#designation_bookmarks(desgn, name) ⇒ Object
-
#designation_field(desgn, name, orig) ⇒ Object
-
#designation_grammar(desgn, name) ⇒ Object
-
#designation_localization(desgn, name, orig_desgn) ⇒ Object
-
#designation_pronunciation(desgn, name) ⇒ Object
-
#display_order(docxml) ⇒ Object
-
#display_order_at(docxml, xpath, idx) ⇒ Object
-
#display_order_xpath(docxml, xpath, idx) ⇒ Object
-
#dl(docxml) ⇒ Object
-
#dl1(elem) ⇒ Object
-
#docid_prefixes(docxml) ⇒ Object
-
#edition_translate(bibdata) ⇒ Object
does not allow %Spellout and %Ordinal in the ordinal expression to be mixed.
-
#embedable_semantic_xml(xml) ⇒ Object
-
#embedable_semantic_xml_attributes(xml) ⇒ Object
-
#embedable_semantic_xml_tags(xml) ⇒ Object
-
#emf_encode(img) ⇒ Object
-
#emf_to_svg(img) ⇒ Object
-
#empty_xml?(str) ⇒ Boolean
detect whether string which may contain XML markup is empty.
-
#enable_indexsect ⇒ Object
-
#eps2svg(img) ⇒ Object
-
#eps_to_svg(node) ⇒ Object
-
#eps_to_svg_from_node(node, target_path = nil) ⇒ Object
-
#eref(docxml) ⇒ Object
-
#eref2link(docxml) ⇒ Object
-
#eref2link1(node, href) ⇒ Object
-
#eref2xref(node) ⇒ Object
-
#eref_localities(refs, target, node) ⇒ Object
-
#eref_localities0(ref, _idx, target, node) ⇒ Object
-
#eref_localities1(opt) ⇒ Object
-
#eref_localities1_zh(opt) ⇒ Object
-
#eref_localities_conflated(refs, target, node) ⇒ Object
-
#eref_locality_delimiter(ref) ⇒ Object
-
#eref_locality_populate(type, node, number) ⇒ Object
-
#eref_locality_stack(ref, idx, target, node) ⇒ Object
-
#eref_locality_stack1(ref, target, node, ret) ⇒ Object
-
#eref_locality_stacks(refs, target, node) ⇒ Object
-
#eref_target(node) ⇒ Object
-
#eref_url(id) ⇒ Object
-
#eref_url_prep(id) ⇒ Object
-
#erefstack1(elem) ⇒ Object
-
#example(docxml) ⇒ Object
-
#example1(elem) ⇒ Object
-
#expand_citeas(text) ⇒ Object
-
#explicit_number_formatter(num, locale, options) ⇒ Object
-
#explicit_number_formatter_cfg(num, fmt) ⇒ Object
-
#explicit_number_formatter_signif(num, symbols) ⇒ Object
-
#extension_insert(xml, path = []) ⇒ Object
-
#extension_insert_pt(xml) ⇒ Object
-
#extract_custom_charsets(docxml) ⇒ Object
-
#extract_indexsee(val, terms, label) ⇒ Object
-
#extract_indexterms(terms) ⇒ Object
attributes are decoded into UTF-8, elements in extract_indexsee are still in entities.
-
#extract_indexterms_init(term) ⇒ Object
-
#figure(docxml) ⇒ Object
-
#figure1(elem) ⇒ Object
-
#figure_delim(_elem) ⇒ Object
-
#figure_fn(elem) ⇒ Object
move footnotes into key, and get rid of footnote reference since it is in diagram.
-
#figure_key(dlist) ⇒ Object
-
#figure_key_insert_pt(elem) ⇒ Object
-
#figure_label(elem) ⇒ Object
-
#figure_label?(elem) ⇒ Boolean
-
#figure_name(elem) ⇒ Object
-
#figuresource(elem) ⇒ Object
-
#floattitle(docxml) ⇒ Object
-
#floattitle1(elem) ⇒ Object
TODO not currently doing anything with the @depth attribute of floating-title.
-
#fmt_caption(label, elem, name, ids, delims) ⇒ Object
Remove “.blank?” tests if want empty delim placeholders for manipulation.
-
#fmt_caption2(label, elem, name, ids, delims) ⇒ Object
-
#fmt_caption_label_wrap(label) ⇒ Object
-
#fmt_xref_label(label, _number, ids) ⇒ Object
-
#fonts_metadata(xmldoc) ⇒ Object
-
#formula(docxml) ⇒ Object
-
#formula1(elem) ⇒ Object
-
#formula_where(dlist) ⇒ Object
-
#gather_all_ids(elem) ⇒ Object
-
#gather_xref_locations(node) ⇒ Object
-
#get_linkend(node) ⇒ Object
-
#hash_translate(bibdata, hash, xpath, lang = @lang) ⇒ Object
-
#hidden_items(docxml) ⇒ Object
-
#i18n_chain_boolean(value, entry) ⇒ Object
-
#i18n_safe(key) ⇒ Object
-
#i18n_tag(key, value) ⇒ Object
-
#i8n_name(hash, pref) ⇒ Object
-
#i8n_name1(hash, pref) ⇒ Object
-
#ident_fn(bib) ⇒ Object
-
#identifier(docxml) ⇒ Object
-
#imageconvert(docxml) ⇒ Object
-
#imgfile_suffix(uri, suffix) ⇒ Object
-
#implicit_number_formatter(num, locale) ⇒ Object
-
#implicit_reference(bib) ⇒ Object
reference not to be rendered because it is deemed implicit in the standards environment.
-
#index(xml) ⇒ Object
-
#index1(docxml, indexsect, index) ⇒ Object
-
#index1_cleanup(docxml) ⇒ Object
-
#index2bookmark(node) ⇒ Object
-
#index_entries(words, index, primary) ⇒ Object
-
#index_entries2(words, index, secondary) ⇒ Object
-
#index_entries_head(head, entries, opt) ⇒ Object
-
#index_entries_opt ⇒ Object
-
#index_entries_see(entries, label) ⇒ Object
-
#initialize(options) ⇒ PresentationXMLConvert
constructor
A new instance of PresentationXMLConvert.
-
#inline(docxml) ⇒ Object
-
#inline_format(docxml) ⇒ Object
-
#insert_biblio_tag(bib, ordinal, biblio, standard) ⇒ Object
-
#labelled_autonum(label, id, num) ⇒ Object
-
#large_notation_fmt(symbols, num) ⇒ Object
-
#large_notation_fmt1(num, notation, min, max) ⇒ Object
-
#loc2xref(entry) ⇒ Object
-
#locality_delimiter(_loc) ⇒ Object
-
#localize_maths(node, locale) ⇒ Object
symbols is merged into TwitterCldr::DataReaders::NumberDataReader.new(locale).symbols.
-
#localized_strings(docxml) ⇒ Object
-
#lower2cap(text) ⇒ Object
-
#mathml(docxml) ⇒ Object
-
#mathml1(node, locale) ⇒ Object
-
#mathml_number(node, locale) ⇒ Object
-
#mathml_number_to_number(node) ⇒ Object
-
#mathml_style_inherit(node) ⇒ Object
-
#maths_just_numeral(node) ⇒ Object
-
#merge_preferred_eligible?(first, second) ⇒ Boolean
-
#merge_preferred_eligible_prep(first, second) ⇒ Object
-
#merge_second_preferred(term) ⇒ Object
-
#merge_second_preferred1(desgns, term) ⇒ Object
-
#metadata(docxml) ⇒ Object
-
#metanorma_extension_insert_pt(xml) ⇒ Object
-
#middle_title(docxml) ⇒ Object
-
#missing_title(docxml) ⇒ Object
-
#mn_to_msup(node) ⇒ Object
convert any Ascii superscripts to correct(ish) MathML Not bothering to match times, base of 1.0 x 10^-20, just ^-20.
-
#move_norm_ref_to_sections(docxml) ⇒ Object
-
#move_norm_ref_to_sections_insert_pt(docxml) ⇒ Object
-
#multidef(_elem, defn, fmt_defn) ⇒ Object
-
#no_identifier(bib) ⇒ Object
-
#non_locality_elems(node) ⇒ Object
-
#norm_ref_entry_code(_ordinal, idents, _ids, _standard, datefn, _bib) ⇒ Object
-
#normalise_number(num) ⇒ Object
-
#note(docxml) ⇒ Object
-
#note1(elem) ⇒ Object
-
#note_delim(_elem) ⇒ Object
-
#note_label(elem) ⇒ Object
-
#num_precision(num) ⇒ Object
-
#num_totaldigits(num) ⇒ Object
-
#numberformat_extract(options) ⇒ Object
-
#numberformat_type(ret) ⇒ Object
-
#numeric_mathml?(node) ⇒ Boolean
-
#ol(docxml) ⇒ Object
-
#ol1(elem) ⇒ Object
-
#ol_depth(node) ⇒ Object
We don’t really want users to specify type of ordered list; we will use by default a fixed hierarchy as practiced by ISO (though not fully spelled out): a) 1) i) A) I).
-
#ol_label(elem) ⇒ Object
-
#origin(docxml) ⇒ Object
-
#passthrough(docxml) ⇒ Object
-
#passthrough1(elem, formats) ⇒ Object
-
#permission(docxml) ⇒ Object
-
#postprocess(result, filename, _dir) ⇒ Object
-
#preceding_floating_titles(node, idx) ⇒ Object
-
#preceding_floats(clause) ⇒ Object
-
#pref_ref_code(bib) ⇒ Object
-
#pref_ref_code_parse(bib) ⇒ Object
-
#preface_move(clauses, after, _doc) ⇒ Object
-
#preface_move1(clause, preface, float, prev, xpath) ⇒ Object
-
#preface_rearrange(doc) ⇒ Object
-
#prefix_bracketed_ref(text) ⇒ Object
-
#prefix_container(container, linkend, node, target) ⇒ Object
-
#prefix_container?(container, node) ⇒ Boolean
-
#prefix_container_fmt_xref_label(container, xref) ⇒ Object
-
#prefix_name(node, delims, label, elem) ⇒ Object
-
#prefix_name_defaults(node, delims, label) ⇒ Object
-
#prefix_name_labels(node) ⇒ Object
-
#prefix_name_postprocess(node, elem) ⇒ Object
-
#prefix_name_prep(node, elem) ⇒ Object
-
#prep_for_rendering(bib) ⇒ Object
-
#presmeta(name, value) ⇒ Object
-
#presmeta_insert_pt(xmldoc) ⇒ Object
-
#quote(docxml) ⇒ Object
-
#quote1(elem) ⇒ Object
-
#quotesource(docxml) ⇒ Object
-
#rearrange_clauses(docxml) ⇒ Object
-
#recommendation(docxml) ⇒ Object
-
#recommendation1(elem, type) ⇒ Object
-
#reference_name(ref) ⇒ Object
-
#reference_names(docxml) ⇒ Object
-
#references(docxml) ⇒ Object
-
#references_render(docxml) ⇒ Object
-
#reinsert_callout(xml) ⇒ Object
-
#related(docxml) ⇒ Object
-
#related1(node) ⇒ Object
-
#related1_prep(node) ⇒ Object
-
#related_designation1(desgn) ⇒ Object
-
#render_identifier(ident) ⇒ Object
-
#requirement(docxml) ⇒ Object
-
#requirement_render(docxml) ⇒ Object
-
#requirement_render1(node) ⇒ Object
-
#requirement_render_preprocessing(docxml) ⇒ Object
-
#resolve_comma_connectives(locs) ⇒ Object
-
#resolve_comma_connectives1(locs, locs1, add) ⇒ Object
-
#resolve_eref_connectives(locs) ⇒ Object
-
#resolve_to_connectives(locs) ⇒ Object
-
#rouge_css_location ⇒ Object
replace in local gem rather than specify overrides of default.
-
#ruby(docxml) ⇒ Object
-
#ruby1(elem) ⇒ Object
-
#save_attachment(attachment, dir) ⇒ Object
-
#section(docxml) ⇒ Object
parse annex after term, references, to deal with single-term and single-ref annexes.
-
#see_lbl ⇒ Object
-
#semantic_xml_insert(xml) ⇒ Object
-
#semx(node, label, element = "autonum") ⇒ Object
-
#semx_fmt_dup(elem) ⇒ Object
-
#semx_orig(node, orig = nil) ⇒ Object
-
#single_term_clause_retitle(elem) ⇒ Object
-
#single_term_clause_unnest(elem) ⇒ Object
-
#singledef(_elem, defn, fmt_defn) ⇒ Object
-
#skip_display_order?(node) ⇒ Boolean
-
#sort_indexterms(terms, see, also) ⇒ Object
-
#sortable(str) ⇒ Object
-
#source(docxml) ⇒ Object
-
#source1(elem) ⇒ Object
-
#source_highlight(elem) ⇒ Object
-
#source_label(elem) ⇒ Object
-
#source_lex(elem) ⇒ Object
-
#source_modification(mod) ⇒ Object
-
#source_remove_annotations(ret, elem) ⇒ Object
-
#source_remove_markup(elem) ⇒ Object
-
#source_restore_callouts(code, callouts) ⇒ Object
-
#source_restore_callouts_table(table, callouts) ⇒ Object
-
#source_restore_markup(wrapper, markup) ⇒ Object
-
#source_restore_markup_table(wrapper, markup) ⇒ Object
-
#sourcecode(docxml) ⇒ Object
-
#sourcecode1(elem) ⇒ Object
-
#sourcecode_table_to_elem(elem, tokens) ⇒ Object
-
#sourcehighlighter ⇒ Object
-
#sourcehighlighter_css(docxml) ⇒ Object
-
#standard?(bib) ⇒ Boolean
-
#strip_duplicate_ids(_node, sem_title, pres_title) ⇒ Object
remove ids duplicated between sem_title and pres_title index terms are assumed transferred to pres_title from sem_title.
-
#strip_index(docxml) ⇒ Object
-
#subfigure_delim ⇒ Object
-
#suffix_url(url) ⇒ Object
-
#svg_emf_double(img) ⇒ Object
-
#svg_extract(elem) ⇒ Object
-
#svg_impose_height_attr(node) ⇒ Object
-
#svg_prep(img) ⇒ Object
-
#svg_to_emf(node) ⇒ Object
-
#svg_to_emf_from_node(node, target_path = nil) ⇒ Object
-
#svg_wrap(elem) ⇒ Object
-
#svgmap_extract(elem) ⇒ Object
-
#table(docxml) ⇒ Object
-
#table1(elem) ⇒ Object
-
#table_delim ⇒ Object
-
#table_fn(elem) ⇒ Object
-
#table_fn1(table, fnote, idx) ⇒ Object
-
#table_long_strings_cleanup(docxml) ⇒ Object
-
#tablesource(elem) ⇒ Object
-
#tag_translate(tag, lang, value) ⇒ Object
-
#term(docxml) ⇒ Object
-
#term1(elem) ⇒ Object
-
#term_hash_init(hash, term, term2, term3, label) ⇒ Object
-
#termcleanup(docxml) ⇒ Object
-
#termcontainers(docxml) ⇒ Object
-
#termdefinition(docxml) ⇒ Object
-
#termdefinition1(elem) ⇒ Object
-
#termdomain(elem, fmt_defn) ⇒ Object
-
#termexample(docxml) ⇒ Object
-
#termnote(docxml) ⇒ Object
-
#termnote1(elem) ⇒ Object
-
#termnote_delim(_elem) ⇒ Object
-
#termnote_label(elem) ⇒ Object
-
#terms(docxml) ⇒ Object
-
#termsource(docxml) ⇒ Object
-
#termsource1(elem) ⇒ Object
-
#termsource_add_modification_text(mod) ⇒ Object
-
#termsource_designation(fmtsource) ⇒ Object
-
#termsource_label(elem, sources) ⇒ Object
-
#termsource_modification(elem) ⇒ Object
-
#termsource_status(status) ⇒ Object
-
#text_transform(docxml) ⇒ Object
-
#text_transform1(span) ⇒ Object
-
#to_xml_file(result, filename) ⇒ Object
-
#toc(docxml) ⇒ Object
-
#toc_metadata(docxml) ⇒ Object
-
#toc_refs(docxml) ⇒ Object
-
#toc_title(docxml) ⇒ Object
-
#toc_title_insert_pt(docxml) ⇒ Object
-
#transfer_id(old, new) ⇒ Object
-
#trim_hash(hash) ⇒ Object
-
#trim_hash1(hash) ⇒ Object
-
#twitter_cldr_localiser_symbols ⇒ Object
-
#ul(docxml) ⇒ Object
-
#ul1(elem) ⇒ Object
-
#unbracket(ident) ⇒ Object
-
#unbracket1(ident) ⇒ Object
-
#unnest_linkend(node) ⇒ Object
so not <origin bibitemid=“ISO7301” citeas=“ISO 7301”> <locality type=“section”><reference>3.1</reference></locality></origin>.
-
#unnumbered_clause?(elem) ⇒ Boolean
-
#unwrap_definition(_elem, fmt_defn) ⇒ Object
-
#variant(xml) ⇒ Object
there should be no //variant in bibdata now.
-
#variant1(node) ⇒ Object
-
#xml_encode_attr(str) ⇒ Object
-
#xref(docxml) ⇒ Object
-
#xref1(node) ⇒ Object
-
#xref_empty?(node) ⇒ Boolean
Methods inherited from Convert
#agency?, #bibrenderer, #connectives_spans, #convert, #convert1_namespaces, #convert_i18n_init, #convert_i18n_init1, #convert_init, #convert_scss, #default_file_locations, #default_fonts, #docid_l10n, #docid_prefix, #fonts_options, #generate_css, #html_doc_path, #i18n_init, #init_arrangement, #init_covers, #init_fonts, #init_i18n, #init_locations, #init_processing, #init_rendering, #init_stylesheets, #init_toc, #l10n, #localpath, #metadata_init, #middle_clause, #omit_docid_prefix, #options_preprocess, #populate_css, #precompiled_style_or_original, #scss_fontheader, #swap_renderer, #target_pdf, #tmpfilesdir_suffix, #tmpimagedir_suffix, #toc_init, #xref_init
Methods included from ClassUtils
#case_strict, #case_strict1, #case_with_markup, #date_range, #liquid, #nearest_block_parent, #ns, #start_of_sentence, #to_xml
#attr_code, #cleanup_entities, #date_range, #emf?, #empty2nil, #eps?, #external_path, #extract_delims, #from_xhtml, #get_clause_id, #get_note_container_id, #header_strip, #header_strip_elem?, #image_localfile, #insert_tab, #labelled_ancestor, #liquid, #noko, #ns, #numeric_escapes, #populate_template, #save_dataimage, #save_svg, #sentence_join, #start_of_sentence, #to_xhtml, #to_xhtml_fragment, #to_xhtml_prep, #to_xml
#body_attr, #boilerplate, #content, #cross_align, #define_head, #info, #init_dir, #init_file, #make_body, #make_body1, #make_body2, #make_body3, #note?, #parse, #rel_tmpimagedir, #tmpimagedir, #top_element_render
#admitted_term_parse, #definition_parse, #deprecated_term_parse, #modification_parse, #semx_admitted_term_parse, #semx_deprecated_term_parse, #semx_related_parse, #semx_term_parse, #semx_termref_parse, #term_parse, #termdef_parse, #termdocsource_parse, #termdomain_parse, #termnote_p_class, #termnote_parse, #termnote_parse1, #termref_parse
#colgroup, #make_tr_attr, #make_tr_attr_style, #table_attrs, #table_parse, #table_parse_core, #table_parse_tail, #table_title_parse, #tbody_parse, #tcaption, #tfoot_parse, #thead_parse, #tr_parse
#abstract, #acknowledgements, #annex_attrs, #annex_name, #clause_attrs, #clause_name, #clause_parse, #clause_parse_subtitle, #clause_parse_title, #clause_parse_title1, #clause_title_depth, #clausedelimspace, #colophon, #copyright_parse, #executivesummary, #feedback_parse, #foreword, #freestanding_title, #indexsect, #inline_header_title, #introduction, #is_clause?, #legal_parse, #license_parse, #preface, #preface_attrs, #preface_block, #preface_normal, #scope, #sections_names, #single_term_clause?, #symbols_abbrevs, #symbols_parse, #table_of_contents, #terms_defs, #terms_parse, #variant_title
#bibitem_entry, #biblio_list, #bibliography, #bibliography_parse, #bibliography_xpath, #iso_bibitem_entry_attrs, #norm_ref, #norm_ref_xpath, #reference_format
#dl_attrs, #dl_parse, #dl_parse1, #dl_parse_notes, #dt_dd?, #dt_parse, #li_parse, #list_title_parse, #ol_attrs, #ol_parse, #ol_style, #ul_attrs, #ul_parse
#add_parse, #asciimath_parse, #author_parse, #bookmark_parse, #br_parse, #callout_parse, #children_parse, #del_parse, #em_parse, #eref_parse, #error_parse, #floating_title_parse, #fmt_name_parse, #hr_parse, #image_body_parse, #image_parse, #image_title_parse, #index_parse, #index_xref_parse, #keyword_parse, #latexmath_parse, #link_parse, #location_parse, #mathml_parse, #name_parse, #no_locality_parse, #origin_parse, #page_break, #pagebreak_parse, #rb_parse, #rt_parse, #ruby_parse, #section_break, #semx_definition_parse, #semx_parse, #smallcap_parse, #span_parse, #stem_parse, #strike_parse, #strong_parse, #sub_parse, #sup_parse, #termrefelem_parse, #text_parse, #tt_parse, #underline_parse, #xref_label_parse, #xref_parse
#form_parse, #input_parse, #label_parse, #option_parse, #select_parse, #text_input, #textarea_parse
#admonition_cleanup, #cleanup, #example_cleanup, #figure_cleanup, #footnote_cleanup, #footnote_reference_format, #inline_header_cleanup, #merge_fnref_into_fn_text, #new_fullcolspan_row, #passthrough_cleanup, #remove_bottom_border, #symbols_cleanup, #table_cleanup, #table_footnote_cleanup, #table_footnote_cleanup_propagate, #table_footnote_reference_format, #table_get_or_make_tfoot, #table_note_cleanup, #textcleanup
#admonition_attrs, #admonition_class, #admonition_name, #admonition_name_in_first_para, #admonition_name_para_delim, #admonition_name_parse, #admonition_p_parse, #admonition_parse, #admonition_parse1, #annotation_parse, #attribution_parse, #block_body_first_elem, #columnbreak_parse, #cross_align_parse, #div_parse, #example_div_attr, #example_div_parse, #example_label, #example_parse, #example_table_attr, #example_table_parse, #figure_attrs, #figure_name_parse, #figure_parse, #figure_parse1, #formula_attrs, #formula_parse, #formula_parse1, #keep_style, #note_attrs, #note_p_class, #note_p_parse, #note_parse, #note_parse1, #para_attrs, #para_class, #para_parse, #passthrough_parse, #permission_parse, #pre_parse, #pseudocode_attrs, #pseudocode_parse, #quote_parse, #recommendation_name, #recommendation_parse, #recommendation_parse1, #reqt_attrs, #requirement_parse, #source_parse, #sourcecode_attrs, #sourcecode_name_parse, #sourcecode_parse, #sourcecode_parse1, #starts_with_para?, #svg_parse, #toc_parse
Constructor Details
Returns a new instance of PresentationXMLConvert.
16
17
18
19
20
|
# File 'lib/isodoc/presentation_xml_convert.rb', line 16
def initialize(options)
@format = :presentation
@suffix = "presentation.xml"
super
end
|
Instance Method Details
7
8
9
|
# File 'lib/isodoc/presentation_function/index.rb', line 7
def add_id
%(id="_#{UUIDTools::UUID.random_create}")
end
|
#address_precompose(bib) ⇒ Object
11
12
13
14
15
16
17
18
|
# File 'lib/isodoc/presentation_function/bibdata.rb', line 11
def address_precompose(bib)
bib.xpath(ns("//bibdata//address")).each do |b|
next if b.at(ns("./formattedAddress"))
x = address_precompose1(b)
b.children = "<formattedAddress>#{x}</formattedAddress>"
end
end
|
#address_precompose1(addr) ⇒ Object
20
21
22
23
24
25
26
27
28
|
# File 'lib/isodoc/presentation_function/bibdata.rb', line 20
def address_precompose1(addr)
ret = []
addr.xpath(ns("./street")).each { |s| ret << to_xml(s.children) }
a = addr.at(ns("./city")) and ret << to_xml(a.children)
addr.xpath(ns("./state")).each { |s| ret << to_xml(s.children) }
a = addr.at(ns("./country")) and ret << to_xml(a.children)
a = addr.at(ns("./postcode")) and ret[-1] += " #{to_xml a.children}"
ret.join("<br/>")
end
|
#admits(elem) ⇒ Object
122
|
# File 'lib/isodoc/presentation_function/concepts.rb', line 122
def admits(elem); end
|
#admonition(docxml) ⇒ Object
67
68
69
|
# File 'lib/isodoc/presentation_function/block.rb', line 67
def admonition(docxml)
docxml.xpath(ns("//admonition")).each { |f| admonition1(f) }
end
|
#admonition1(elem) ⇒ Object
71
72
73
74
75
76
77
78
79
80
|
# File 'lib/isodoc/presentation_function/block.rb', line 71
def admonition1(elem)
if elem["type"] == "box"
admonition_numbered1(elem)
elsif elem["notag"] == "true" || elem.at(ns("./name"))
prefix_name(elem, { label: admonition_delim(elem) }, nil, "name")
else
label = admonition_label(elem, nil)
prefix_name(elem, { label: admonition_delim(elem) }, label, "name")
end
end
|
#admonition_delim(_elem) ⇒ Object
96
97
98
|
# File 'lib/isodoc/presentation_function/block.rb', line 96
def admonition_delim(_elem)
""
end
|
#admonition_label(elem, num) ⇒ Object
88
89
90
91
92
93
94
|
# File 'lib/isodoc/presentation_function/block.rb', line 88
def admonition_label(elem, num)
lbl = if elem["type"] == "box" then @i18n.box
else @i18n.admonition[elem["type"]]&.upcase end
labelled_autonum(lbl, elem["id"], num)
end
|
#admonition_numbered1(elem) ⇒ Object
82
83
84
85
86
|
# File 'lib/isodoc/presentation_function/block.rb', line 82
def admonition_numbered1(elem)
label = admonition_label(elem, @xrefs.anchor(elem["id"], :label, false))
prefix_name(elem, { caption: block_delim }, label, "name")
end
|
117
118
119
|
# File 'lib/isodoc/presentation_function/index.rb', line 117
def also_lbl
@lang == "en" ? @i18n.see_also : "<em>#{@i18n.see_also}</em>"
end
|
#amend(docxml) ⇒ Object
we use this to eliminate the semantic amend blocks from rendering
141
142
143
|
# File 'lib/isodoc/presentation_function/block.rb', line 141
def amend(docxml)
docxml.xpath(ns("//amend")).each { |f| amend1(f) }
end
|
#amend1(elem) ⇒ Object
145
146
147
148
149
150
151
|
# File 'lib/isodoc/presentation_function/block.rb', line 145
def amend1(elem)
elem.xpath(ns("./locality | ./localityStack | ./autonumber | " \
"./classification | ./contributor")).each(&:remove)
elem.xpath(ns("./newcontent")).each { |a| a.name = "quote" }
elem.xpath(ns("./description")).each { |a| a.replace(a.children) }
elem.replace(elem.children)
end
|
#anchor_id_postproc(node) ⇒ Object
34
35
36
|
# File 'lib/isodoc/presentation_function/xrefs.rb', line 34
def anchor_id_postproc(node)
node["target"]
end
|
#anchor_id_postprocess(node) ⇒ Object
39
|
# File 'lib/isodoc/presentation_function/inline.rb', line 39
def anchor_id_postprocess(node); end
|
#anchor_linkend(node, linkend) ⇒ Object
20
21
22
23
24
25
26
27
28
29
30
31
32
|
# File 'lib/isodoc/presentation_function/xrefs.rb', line 20
def anchor_linkend(node, linkend)
node["style"] == "id" and
return anchor_id_postproc(node)
node["citeas"].nil? && node["bibitemid"] and
return citeas_cleanup(@xrefs.anchor(node["bibitemid"], :xref)) || "???"
node.at(ns("./location")) and
return combine_xref_locations(node) || "???"
node["target"] && node["droploc"] and
return anchor_value(node["target"]) || "???"
node["target"] && !/.#./.match(node["target"]) and
return anchor_linkend1(node) || "???"
linkend || "???"
end
|
#anchor_linkend1(node) ⇒ Object
38
39
40
41
42
43
|
# File 'lib/isodoc/presentation_function/xrefs.rb', line 38
def anchor_linkend1(node)
linkend = anchor_xref(node, node["target"])
container = @xrefs.anchor(node["target"], :container, false)
linkend = prefix_container(container, linkend, node, node["target"])
capitalise_xref(node, linkend, anchor_value(node["target"]))
end
|
#anchor_value(id) ⇒ Object
15
16
17
18
|
# File 'lib/isodoc/presentation_function/xrefs.rb', line 15
def anchor_value(id)
@xrefs.anchor(id, :bare_xref) || @xrefs.anchor(id, :label) ||
@xrefs.anchor(id, :value) || @xrefs.anchor(id, :xref)
end
|
#anchor_xref(node, target, container: false) ⇒ Object
45
46
47
48
49
50
51
52
53
54
55
|
# File 'lib/isodoc/presentation_function/xrefs.rb', line 45
def anchor_xref(node, target, container: false)
x = anchor_xref_short(node, target, container)
t = @xrefs.anchor(target, :title)
ret = case node["style"]
when "basic" then t
when "full" then anchor_xref_full(x, t)
when "short", nil then x
else @xrefs.anchor(target, node[:style].to_sym)
end
ret || x
end
|
#anchor_xref_full(num, title) ⇒ Object
65
66
67
68
|
# File 'lib/isodoc/presentation_function/xrefs.rb', line 65
def anchor_xref_full(num, title)
(!title.nil? && !title.empty?) or return nil
l10n("#{num}<span class='fmt-comma'>,</span> #{title}")
end
|
#anchor_xref_short(node, target, container) ⇒ Object
57
58
59
60
61
62
63
|
# File 'lib/isodoc/presentation_function/xrefs.rb', line 57
def anchor_xref_short(node, target, container)
if (l = node["label"]) && !container
v = anchor_value(target)
@i18n.l10n(%[<span class="fmt-element-name">#{l}</span> #{v}])
else @xrefs.anchor(target, :xref)
end
end
|
#annex(docxml) ⇒ Object
42
43
44
45
46
47
48
49
|
# File 'lib/isodoc/presentation_function/section.rb', line 42
def annex(docxml)
docxml.xpath(ns("//annex")).each do |f|
@xrefs.klass.single_term_clause?(f) and single_term_clause_retitle(f)
annex1(f)
@xrefs.klass.single_term_clause?(f) and single_term_clause_unnest(f)
end
@xrefs.parse_inclusions(clauses: true).parse(docxml)
end
|
#annex1(elem) ⇒ Object
51
52
53
54
55
56
57
58
59
60
61
|
# File 'lib/isodoc/presentation_function/section.rb', line 51
def annex1(elem)
lbl = @xrefs.anchor(elem["id"], :label, false)
t = elem.at(ns("./title")) and
t.children = "<strong>#{to_xml(t.children)}</strong>"
if unnumbered_clause?(elem)
prefix_name(elem, {}, nil, "title")
else
prefix_name(elem, { caption: annex_delim(elem) }, lbl, "title")
end
end
|
#annex_delim(_elem) ⇒ Object
63
64
65
|
# File 'lib/isodoc/presentation_function/section.rb', line 63
def annex_delim(_elem)
"<br/><br/>"
end
|
#annotations(elem) ⇒ Object
57
58
59
60
61
62
63
64
65
66
67
68
|
# File 'lib/isodoc/presentation_function/sourcecode.rb', line 57
def annotations(elem)
elem.at(ns("./annotation")) or return
ret = ""
elem.xpath(ns("./annotation")).each do |a|
a.remove
ret += <<~OUT
<dt id='#{a['id']}'><span class='c'>#{@callouts[a['id']]}</span></dt>
<dd>#{a.children.to_xml}</dd>
OUT
end
elem << "<dl><name>#{@i18n.key}</name>#{ret}</dl>"
end
|
#asciimath_dup(node) ⇒ Object
136
137
138
139
140
141
142
143
144
145
|
# File 'lib/isodoc/presentation_function/math.rb', line 136
def asciimath_dup(node)
@suppressasciimathdup || node.parent.at(ns("./asciimath")) and return
math = node.to_xml.gsub(/ xmlns=["'][^"']+["']/, "")
.gsub(%r{<[^:/>]+:}, "<").gsub(%r{</[^:/>]+:}, "</")
.gsub(%r{ data-metanorma-numberformat="[^"]+"}, "")
ret = Plurimath::Math.parse(math, "mathml").to_asciimath
node.next = "<asciimath>#{@c.encode(ret, :basic)}</asciimath>"
rescue StandardError => e
warn "Failure to convert MathML to AsciiMath\n#{node.parent.to_xml}\n#{e}"
end
|
19
20
21
22
23
24
25
26
27
|
# File 'lib/isodoc/presentation_function/metadata.rb', line 19
def (docxml)
docxml.at(ns("//metanorma-extension/attachment")) or return
dir = File.join(@localdir, "_#{@outputfile}_attachments")
FileUtils.rm_rf(dir)
FileUtils.mkdir_p(dir)
docxml.xpath(ns("//metanorma-extension/attachment")).each do |a|
save_attachment(a, dir)
end
end
|
#autonum(id, num) ⇒ Object
82
83
84
85
|
# File 'lib/isodoc/presentation_function/autonum.rb', line 82
def autonum(id, num)
/<semx/.match?(num) and return num "<semx element='autonum' source='#{id}'>#{num}</semx>"
end
|
#bibdata(docxml) ⇒ Object
5
6
7
8
9
|
# File 'lib/isodoc/presentation_function/bibdata.rb', line 5
def bibdata(docxml)
a = bibdata_current(docxml) or return
address_precompose(a)
bibdata_i18n(a)
end
|
#bibdata_current(docxml) ⇒ Object
30
31
32
33
34
35
36
37
38
|
# File 'lib/isodoc/presentation_function/bibdata.rb', line 30
def bibdata_current(docxml)
a = docxml.at(ns("//bibdata")) or return
{ language: @lang, script: @script, locale: @locale }.each do |k, v|
a.xpath(ns("./#{k}")).each do |l|
l.text == v and l["current"] = "true"
end
end
a
end
|
#bibdata_i18n(bib) ⇒ Object
40
41
42
43
44
45
|
# File 'lib/isodoc/presentation_function/bibdata.rb', line 40
def bibdata_i18n(bib)
hash_translate(bib, @i18n.get["doctype_dict"], "./ext/doctype")
hash_translate(bib, @i18n.get["stage_dict"], "./status/stage")
hash_translate(bib, @i18n.get["substage_dict"], "./status/substage")
edition_translate(bib)
end
|
#bibitem(xml, renderings) ⇒ Object
74
75
76
77
|
# File 'lib/isodoc/presentation_function/refs.rb', line 74
def bibitem(xml, renderings)
implicit_reference(xml) and xml["hidden"] = "true"
bibrender_item(xml, renderings)
end
|
#bibitem_lookup(docxml) ⇒ Object
34
35
36
37
38
39
|
# File 'lib/isodoc/presentation_xml_convert.rb', line 34
def bibitem_lookup(docxml)
@bibitem_lookup ||= docxml.xpath(ns("//references/bibitem"))
.each_with_object({}) do |b, m|
m[b["id"]] = b
end
end
|
#bibitem_ref_code(bib) ⇒ Object
returns [metanorma, non-metanorma, DOI/ISSN/ISBN] identifiers
29
30
31
32
33
34
|
# File 'lib/isodoc/presentation_function/docid.rb', line 29
def bibitem_ref_code(bib)
id, id1, id2, id3 = bibitem_ref_code_prep(bib)
id || id1 || id2 || id3 and return [id, id1, id2, id3]
bib["suppress_identifier"] == "true" and return [nil, nil, nil, nil]
[nil, no_identifier(bib), nil, nil]
end
|
#bibitem_ref_code_prep(bib) ⇒ Object
36
37
38
39
40
41
42
|
# File 'lib/isodoc/presentation_function/docid.rb', line 36
def bibitem_ref_code_prep(bib)
id = bib.at(ns("./docidentifier[@type = 'metanorma']"))
id1 = pref_ref_code(bib)
id2 = bib.at(ns("./docidentifier[#{SKIP_DOCID}]"))
id3 = bib.at(ns("./docidentifier[@type = 'metanorma-ordinal']"))
[id, id1, id2, id3]
end
|
#biblio_ref_entry_code(ordinal, ids, _id, _standard, datefn, _bib) ⇒ Object
if ids is just a number, only use that ([1] Non-Standard) else, use both ordinal, as prefix, and ids
187
188
189
190
191
192
193
194
195
196
197
|
# File 'lib/isodoc/presentation_function/refs.rb', line 187
def biblio_ref_entry_code(ordinal, ids, _id, _standard, datefn, _bib)
ret = ids[:ordinal] || ids[:metanorma] || "[#{ordinal}]"
if ids[:sdo]
ret = prefix_bracketed_ref(ret)
ret += "#{ids[:sdo]}#{datefn}, "
else
ret = prefix_bracketed_ref("#{ret}#{datefn}")
end
ret
end
|
#bibliography_bibitem_number(docxml) ⇒ Object
107
108
109
110
111
112
113
114
115
116
|
# File 'lib/isodoc/presentation_function/refs.rb', line 107
def bibliography_bibitem_number(docxml)
i = 0
docxml.xpath(ns("//references")).each do |r|
r.xpath(ns("./bibitem")).each do |b|
i = bibliography_bibitem_number1(b, i, r["normative"] == "true")
end
end
reference_names docxml
bibliography_bibitem_tag(docxml)
end
|
#bibliography_bibitem_number1(bibitem, idx, normative) ⇒ Object
118
119
120
121
122
123
124
125
126
127
128
129
|
# File 'lib/isodoc/presentation_function/refs.rb', line 118
def bibliography_bibitem_number1(bibitem, idx, normative)
ins = bibliography_bibitem_number_insert_pt(bibitem)
mn = bibitem.at(ns(".//docidentifier[@type = 'metanorma']")) and
/^\[?\d+\]?$/.match?(mn.text) and mn.remove if !bibliography_bibitem_number_skip(bibitem) && (!normative || mn)
idx += 1
ins.next =
"<docidentifier type='metanorma-ordinal'>[#{idx}]</docidentifier>"
end
idx
end
|
#bibliography_bibitem_number_insert_pt(bibitem) ⇒ Object
131
132
133
134
135
136
137
138
139
140
141
142
|
# File 'lib/isodoc/presentation_function/refs.rb', line 131
def bibliography_bibitem_number_insert_pt(bibitem)
bibitem.children.empty? and bibitem.add_child(" ")
unless d = bibitem.at(ns(".//docidentifier"))
d = bibitem.children.first
d.previous = " " and return d.previous
end
unless ins = d.previous_element
d.previous = " "
ins = d.previous
end
ins
end
|
#bibliography_bibitem_number_skip(bibitem) ⇒ Object
99
100
101
102
103
104
105
|
# File 'lib/isodoc/presentation_function/refs.rb', line 99
def bibliography_bibitem_number_skip(bibitem)
implicit_reference(bibitem) ||
bibitem.at(ns(".//docidentifier[@type = 'metanorma']")) ||
bibitem.at(ns(".//docidentifier[@type = 'metanorma-ordinal']")) ||
bibitem["suppress_identifier"] == "true" ||
bibitem["hidden"] == "true" || bibitem.parent["hidden"] == "true"
end
|
#bibliography_bibitem_tag(docxml) ⇒ Object
144
145
146
147
148
149
150
151
|
# File 'lib/isodoc/presentation_function/refs.rb', line 144
def bibliography_bibitem_tag(docxml)
[true, false].each do |norm|
i = 0
docxml.xpath(ns("//references[@normative = '#{norm}']")).each do |r|
i = bibliography_bibitem_tag1(r, i, norm)
end
end
end
|
#bibliography_bibitem_tag1(ref, idx, norm) ⇒ Object
153
154
155
156
157
158
159
160
161
|
# File 'lib/isodoc/presentation_function/refs.rb', line 153
def bibliography_bibitem_tag1(ref, idx, norm)
ref.xpath(ns("./bibitem")).each do |b|
implicit_reference(b) and next
b["suppress_identifier"] == "true" and next
idx += 1 unless b["hidden"]
insert_biblio_tag(b, idx, !norm, standard?(b))
end
idx
end
|
86
|
# File 'lib/isodoc/presentation_function/refs.rb', line 86
def bibrender_formattedref(formattedref, xml); end
|
#bibrender_item(xml, renderings) ⇒ Object
79
80
81
82
83
84
|
# File 'lib/isodoc/presentation_function/refs.rb', line 79
def bibrender_item(xml, renderings)
if (f = xml.at(ns("./formattedref"))) && xml.at(ns("./title")).nil?
bibrender_formattedref(f, xml)
else bibrender_relaton(xml, renderings)
end
end
|
#bibrender_relaton(xml, renderings) ⇒ Object
88
89
90
91
92
93
|
# File 'lib/isodoc/presentation_function/refs.rb', line 88
def bibrender_relaton(xml, renderings)
f = renderings[xml["id"]][:formattedref]
f &&= "<formattedref>#{f}</formattedref>"
x = xml.xpath(ns("./docidentifier | ./uri | ./note | ./biblio-tag"))
xml.children = "#{f}#{x.to_xml}"
end
|
#blank?(elem) ⇒ Boolean
121
122
123
|
# File 'lib/isodoc/presentation_function/metadata.rb', line 121
def blank?(elem)
elem.nil? || (elem.respond_to?(:empty?) && elem.empty?)
end
|
#block(docxml) ⇒ Object
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
# File 'lib/isodoc/presentation_xml_convert.rb', line 73
def block(docxml)
amend docxml
table docxml
figure docxml
sourcecode docxml
formula docxml
example docxml
note docxml
admonition docxml
source docxml
ul docxml
ol docxml
dl docxml
quote docxml
permission docxml
requirement docxml
recommendation docxml
requirement_render docxml
end
|
#block_delim ⇒ Object
17
18
19
|
# File 'lib/isodoc/presentation_function/block.rb', line 17
def block_delim
" — "
end
|
#bracket_if_num(num) ⇒ Object
51
52
53
54
55
56
|
# File 'lib/isodoc/presentation_function/docid.rb', line 51
def bracket_if_num(num)
num.nil? and return nil
num = to_xml(num.children).sub(/^\[/, "").sub(/\]$/, "")
/^\d+$/.match?(num) and return "[#{num}]"
num
end
|
#callouts(elem) ⇒ Object
35
36
37
38
39
|
# File 'lib/isodoc/presentation_function/sourcecode.rb', line 35
def callouts(elem)
elem.xpath(ns(".//callout")).each do |c|
@callouts[c["target"]] = c.children.to_xml
end
end
|
#can_conflate_eref_rendering?(refs) ⇒ Boolean
59
60
61
62
63
64
65
|
# File 'lib/isodoc/presentation_function/erefs.rb', line 59
def can_conflate_eref_rendering?(refs)
(refs.size > 1 &&
refs.all? { |r| r.name == "localityStack" } &&
refs.all? { |r| r.xpath(ns("./locality")).size == 1 }) or return false
first = refs.first.at(ns("./locality/@type")).text
refs.all? { |r| r.at(ns("./locality/@type")).text == first }
end
|
#can_conflate_xref_rendering?(locs) ⇒ Boolean
158
159
160
161
162
163
|
# File 'lib/isodoc/presentation_function/xrefs.rb', line 158
def can_conflate_xref_rendering?(locs)
@i18n.get["no_conflate_xref_locations"] == true and return false
(locs.all? { |l| l[:container].nil? } ||
locs.all? { |l| l[:container] == locs.first[:container] }) &&
locs.all? { |l| l[:type] == locs[0][:type] }
end
|
#capitalise_xref(node, linkend, label) ⇒ Object
165
166
167
168
169
170
171
172
|
# File 'lib/isodoc/presentation_function/xrefs.rb', line 165
def capitalise_xref(node, linkend, label)
linktext = linkend.gsub(/<[^<>]+>/, "")
(label && !label.empty? && /^#{Regexp.escape(label)}/.match?(linktext)) ||
linktext[0, 1].match?(/\p{Upper}/) and return linkend
node["case"] and
return Common::case_with_markup(linkend, node["case"], @script)
capitalise_xref1(node, linkend)
end
|
#capitalise_xref1(node, linkend) ⇒ Object
174
175
176
177
178
179
|
# File 'lib/isodoc/presentation_function/xrefs.rb', line 174
def capitalise_xref1(node, linkend)
if start_of_sentence(node)
Common::case_with_markup(linkend, "capital", @script)
else linkend
end
end
|
#change_case(span, value, seen_space) ⇒ Object
130
131
132
133
134
135
136
137
138
139
140
141
|
# File 'lib/isodoc/presentation_function/inline.rb', line 130
def change_case(span, value, seen_space)
span.traverse do |s|
s.text? or next
case value
when "uppercase" then s.replace s.text.upcase
when "lowercase" then s.replace s.text.downcase
when "capitalize"
s.replace conditional_capitalize(s.text, seen_space)
end
seen_space = /\s$/.match?(s.text)
end
end
|
#citeas(xmldoc) ⇒ Object
5
6
7
8
9
10
11
12
13
14
|
# File 'lib/isodoc/presentation_function/erefs.rb', line 5
def citeas(xmldoc)
xmldoc.xpath(ns("//eref | //origin | //quote//source | //link"))
.each do |e|
e["bibitemid"] && e["citeas"] or next
a = @xrefs.anchor(e["bibitemid"], :xref, false) or next
e["citeas"] = citeas_cleanup(a)
e.name == "link" && e.text.empty? and e.children = e["citeas"]
end
end
|
#citeas_cleanup(ref) ⇒ Object
16
17
18
19
20
21
22
23
|
# File 'lib/isodoc/presentation_function/erefs.rb', line 16
def citeas_cleanup(ref)
if /</.match?(ref)
xml = Nokogiri::XML("<root>#{ref}</root>")
xml.xpath("//semx").each { |x| x.replace(x.children) }
ref = to_xml(xml.at("//root").children)
end
ref
end
|
#citestyle ⇒ Object
95
96
97
|
# File 'lib/isodoc/presentation_function/refs.rb', line 95
def citestyle
nil
end
|
#cjk_extended_title(doc) ⇒ Object
64
65
66
67
68
69
70
71
72
73
74
75
|
# File 'lib/isodoc/presentation_function/title.rb', line 64
def cjk_extended_title(doc)
l = cjk_search
doc.xpath(ns("//bibdata/title[#{l}] | //floating-title[#{l}] | " \
"//fmt-title[@depth = '1' or not(@depth)][#{l}]"))
.each do |t|
t.text.size < 4 or next
t.traverse do |n|
n.text? or next
n.replace(@i18n.cjk_extend(n.text))
end
end
end
|
#cjk_search ⇒ Object
57
58
59
60
61
62
|
# File 'lib/isodoc/presentation_function/title.rb', line 57
def cjk_search
lang = %w(zh ja ko).map { |x| "@language = '#{x}'" }.join(" or ")
%(Hans Hant Jpan Hang Kore).include?(@script) and
lang += " or not(@language)"
lang
end
|
#clause(docxml) ⇒ Object
6
7
8
9
10
11
12
13
14
15
|
# File 'lib/isodoc/presentation_function/section.rb', line 6
def clause(docxml)
docxml.xpath(ns("//clause | //terms | //definitions | //references | " \
"//introduction | //foreword | //preface/abstract | " \
"//acknowledgements | //colophon | //indexsect "))
.each do |f|
f.parent.name == "annex" &&
@xrefs.klass.single_term_clause?(f.parent) and next
clause1(f)
end
end
|
#clause1(elem) ⇒ Object
29
30
31
32
33
34
35
36
37
38
39
40
|
# File 'lib/isodoc/presentation_function/section.rb', line 29
def clause1(elem)
level = @xrefs.anchor(elem["id"], :level, false) ||
(elem.ancestors("clause, annex").size + 1)
lbl = @xrefs.anchor(elem["id"], :label, !unnumbered_clause?(elem))
if unnumbered_clause?(elem) || !lbl
prefix_name(elem, {}, nil, "title")
else
prefix_name(elem, { caption: "<tab/>" }, "#{lbl}#{clausedelim}",
"title")
end
t = elem.at(ns("./fmt-title")) and t["depth"] = level
end
|
#clausedelim ⇒ Object
23
24
25
26
27
|
# File 'lib/isodoc/presentation_function/section.rb', line 23
def clausedelim
ret = super
ret && !ret.empty? or return ret
"<span class='fmt-autonum-delim'>#{ret}</span>"
end
|
#clausetitle(docxml) ⇒ Object
53
54
55
|
# File 'lib/isodoc/presentation_function/title.rb', line 53
def clausetitle(docxml)
cjk_extended_title(docxml)
end
|
#combine_conflated_xref_locations(locs) ⇒ Object
Note % to entry and Note % to entry: cannot conflate as Note % to entry 1 and 2 So Notes 1 and 3, but Note 1 to entry and Note 3 to entry
92
93
94
95
96
97
98
99
|
# File 'lib/isodoc/presentation_function/xrefs.rb', line 92
def combine_conflated_xref_locations(locs)
out = if locs.any? { |l| l[:elem]&.include?("%") }
locs.each { |l| l[:label] = @xrefs.anchor(l[:target], :xref) }
else
conflate_xref_locations(locs)
end
combine_conflated_xref_locations_container(locs, l10n(combine_conn(out)))
end
|
#combine_conflated_xref_locations_container(locs, ret) ⇒ Object
108
109
110
111
112
113
114
115
|
# File 'lib/isodoc/presentation_function/xrefs.rb', line 108
def combine_conflated_xref_locations_container(locs, ret)
container = @xrefs.anchor(locs.first[:node]["target"], :container,
false)
prefix_container?(container, locs.first[:node]) and
ret = prefix_container(container, ret, locs.first[:node],
locs.first[:node]["target"])
ret
end
|
#combine_conn(list) ⇒ Object
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
# File 'lib/isodoc/presentation_function/xrefs.rb', line 135
def combine_conn(list)
list.size == 1 and list.first[:label]
if list[1..].all? { |l| l[:conn] == "and" }
connectives_spans(@i18n.boolean_conj(list.map do |l|
loc2xref(l)
end, "and"))
elsif list[1..].all? { |l| l[:conn] == "or" }
connectives_spans(@i18n.boolean_conj(list.map do |l|
loc2xref(l)
end, "or"))
else
ret = loc2xref(list[0])
list[1..].each { |l| ret = i18n_chain_boolean(ret, l) }
ret
end
end
|
#combine_xref_locations(node) ⇒ Object
78
79
80
81
82
83
84
85
86
87
|
# File 'lib/isodoc/presentation_function/xrefs.rb', line 78
def combine_xref_locations(node)
locs = gather_xref_locations(node)
linkend = if can_conflate_xref_rendering?(locs)
combine_conflated_xref_locations(locs)
else
out = locs.each { |l| l[:label] = anchor_linkend1(l[:node]) }
l10n(combine_conn(out))
end
capitalise_xref(node, linkend, anchor_value(node["target"]))
end
|
#concept(docxml) ⇒ Object
3
4
5
6
7
|
# File 'lib/isodoc/presentation_function/concepts.rb', line 3
def concept(docxml)
@definition_ids = docxml.xpath(ns("//definitions//dt"))
.each_with_object({}) { |x, m| m[x["id"]] = true }
docxml.xpath(ns("//concept")).each { |f| concept1(f) }
end
|
#concept1(node) ⇒ Object
9
10
11
12
13
14
15
16
17
18
19
20
|
# File 'lib/isodoc/presentation_function/concepts.rb', line 9
def concept1(node)
node.ancestors("definition, termsource, related").empty? or return
xref = node&.at(ns("./xref/@target"))&.text or
return concept_render(node, ital: "true", ref: "true", bold: "false",
linkref: "true", linkmention: "false")
if @definition_ids[xref]
concept_render(node, ital: "false", ref: "false", bold: "false",
linkref: "true", linkmention: "false")
else concept_render(node, ital: "true", ref: "true", bold: "false",
linkref: "true", linkmention: "false")
end
end
|
#concept1_linkmention(ref, renderterm, opts) ⇒ Object
47
48
49
50
51
52
|
# File 'lib/isodoc/presentation_function/concepts.rb', line 47
def concept1_linkmention(ref, renderterm, opts)
(opts[:linkmention] == "true" && !renderterm.nil? && !ref.nil?) or return
ref2 = ref.clone
r2 = renderterm.clone
renderterm.replace(ref2).children = r2
end
|
#concept1_ref(_node, ref, opts) ⇒ Object
54
55
56
57
58
59
60
61
|
# File 'lib/isodoc/presentation_function/concepts.rb', line 54
def concept1_ref(_node, ref, opts)
ref.nil? and return
opts[:ref] == "false" and return ref.remove
concept1_ref_content(ref)
%w(xref eref).include? ref.name and get_linkend(ref)
opts[:linkref] == "false" && %w(xref eref).include?(ref.name) and
ref.replace(ref.children)
end
|
#concept1_ref_content(ref) ⇒ Object
63
64
65
66
67
68
69
70
71
72
|
# File 'lib/isodoc/presentation_function/concepts.rb', line 63
def concept1_ref_content(ref)
prev = "["
foll = "]"
non_locality_elems(ref).select do |c|
!c.text? || /\S/.match(c)
end.empty? and
(prev, foll = @i18n.term_defined_in.split("%"))
ref.previous = prev
ref.next = foll
end
|
#concept1_style(node, opts) ⇒ Object
32
33
34
35
36
37
38
|
# File 'lib/isodoc/presentation_function/concepts.rb', line 32
def concept1_style(node, opts)
r = node.at(ns(".//renderterm")) or return
opts[:ital] == "true" and r.children = "<em>#{to_xml(r.children)}</em>"
opts[:bold] == "true" and
r.children = "<strong>#{to_xml(r.children)}</strong>"
r.replace(r.children)
end
|
#concept_render(node, defaults) ⇒ Object
22
23
24
25
26
27
28
29
30
|
# File 'lib/isodoc/presentation_function/concepts.rb', line 22
def concept_render(node, defaults)
opts, render, ref = concept_render_init(node, defaults)
node&.at(ns("./refterm"))&.remove
ref && opts[:ref] != "false" and render&.next = " "
concept1_linkmention(ref, render, opts)
concept1_ref(node, ref, opts)
concept1_style(node, opts)
node.replace(node.children)
end
|
#concept_render_init(node, defaults) ⇒ Object
40
41
42
43
44
45
|
# File 'lib/isodoc/presentation_function/concepts.rb', line 40
def concept_render_init(node, defaults)
opts = %i(bold ital ref linkref linkmention)
.each_with_object({}) { |x, m| m[x] = node[x.to_s] || defaults[x] }
[opts, node.at(ns("./renderterm")),
node.at(ns("./xref | ./eref | ./termref"))]
end
|
#conditional_capitalize(text, seen_space) ⇒ Object
143
144
145
146
147
148
149
|
# File 'lib/isodoc/presentation_function/inline.rb', line 143
def conditional_capitalize(text, seen_space)
m = text.split(/(?<=\s)/)
((seen_space ? 0 : 1)...m.size).each do |i|
m[i] = m[i].capitalize
end
m.join
end
|
#conflate_xref_locations(locs) ⇒ Object
101
102
103
104
105
106
|
# File 'lib/isodoc/presentation_function/xrefs.rb', line 101
def conflate_xref_locations(locs)
out = locs.each { |l| l[:label] = anchor_value(l[:target]) }
label = @i18n.inflect(locs.first[:elem], number: "pl")
out[0][:label] = l10n("#{label} #{out[0][:label]}").strip
out
end
|
#conversions(docxml) ⇒ Object
41
42
43
44
45
46
47
48
49
50
|
# File 'lib/isodoc/presentation_xml_convert.rb', line 41
def conversions(docxml)
semantic_xml_insert(docxml)
metadata docxml
bibdata docxml
@xrefs.parse docxml
section docxml
block docxml
terms docxml
inline docxml
end
|
#convert1(docxml, filename, dir) ⇒ Object
22
23
24
25
26
27
28
29
30
31
32
|
# File 'lib/isodoc/presentation_xml_convert.rb', line 22
def convert1(docxml, filename, dir)
@outputdir = dir
@outputfile = Pathname.new(filename).basename.to_s
docid_prefixes(docxml) @xrefs.parse docxml
@xrefs.klass.meta = @meta
@xrefs.klass.info docxml, nil
conversions(docxml)
docxml.root["type"] = "presentation"
docxml.to_xml.gsub("<", "<").gsub(">", ">")
end
|
#copy_baselevel_termsource(docxml) ⇒ Object
112
113
114
115
116
117
118
119
120
|
# File 'lib/isodoc/presentation_function/terms.rb', line 112
def copy_baselevel_termsource(docxml)
docxml.xpath(ns("//term[termsource]")).each do |x|
s = x.xpath(ns("./termsource"))
s1 = x.at(ns("./fmt-termsource"))
s.each { |ss| s1 << ss.clone }
strip_duplicate_ids(nil, s, s1)
%w(status type).each { |a| s[0][a] and s1[a] = s[0][a] }
end
end
|
#custom_charset(docxml) ⇒ Object
151
152
153
154
155
156
157
|
# File 'lib/isodoc/presentation_function/inline.rb', line 151
def custom_charset(docxml)
charsets = (docxml)
docxml.xpath(ns("//span[@custom-charset]")).each do |s|
s["style"] ||= ""
s["style"] += ";font-family:#{charsets[s['custom-charset']]}"
end
end
|
#custom_css(docxml) ⇒ Object
11
12
13
14
15
16
17
18
|
# File 'lib/isodoc/presentation_function/sourcecode.rb', line 11
def custom_css(docxml)
ret = ""
@sourcehighlighter and ret += rouge_css_location
a = docxml.at(ns("//metanorma-extension/" \
"clause[title = 'user-css']/sourcecode")) and
ret += "\n#{to_xml(a.children)}"
ret
end
|
#date(docxml) ⇒ Object
98
99
100
101
102
103
|
# File 'lib/isodoc/presentation_function/inline.rb', line 98
def date(docxml)
(docxml.xpath(ns("//date")) -
docxml.xpath(ns("//bibdata/date | //bibitem//date"))).each do |d|
date1(d)
end
end
|
#date1(elem) ⇒ Object
105
106
107
108
|
# File 'lib/isodoc/presentation_function/inline.rb', line 105
def date1(elem)
elem["value"] && elem["format"] or return
elem.replace(@i18n.date(elem["value"], elem["format"].strip))
end
|
#date_note_process(bib) ⇒ Object
strip any fns in docidentifier before they are extracted for rendering
204
205
206
207
208
209
210
|
# File 'lib/isodoc/presentation_function/refs.rb', line 204
def date_note_process(bib)
ret = ident_fn(bib)
date_note = bib.at(ns("./note[@type = 'Unpublished-Status']"))
date_note.nil? and return ret
id = UUIDTools::UUID.random_create.to_s
"#{ret}<fn reference='#{id}'><p>#{date_note.content}</p></fn>"
end
|
#deprecates(elem) ⇒ Object
116
117
118
119
120
|
# File 'lib/isodoc/presentation_function/concepts.rb', line 116
def deprecates(elem)
elem.xpath(ns(".//semx[@element = 'deprecates']")).each do |t|
t.previous = @i18n.l10n("#{@i18n.deprecated}: ")
end
end
|
#designation(docxml) ⇒ Object
106
107
108
109
110
111
112
113
114
|
# File 'lib/isodoc/presentation_function/concepts.rb', line 106
def designation(docxml)
docxml.xpath(ns("//related")).each { |p| related_designation1(p) }
docxml.xpath(ns("//preferred | //admitted | //deprecates"))
.each { |p| designation1(p) }
docxml.xpath(ns("//fmt-preferred | //fmt-admitted | //fmt-deprecates"))
.each { |t| merge_second_preferred(t) }
docxml.xpath(ns("//fmt-deprecates")).each { |d| deprecates(d) }
docxml.xpath(ns("//fmt-admitted")).each { |d| admits(d) }
end
|
#designation1(desgn) ⇒ Object
162
163
164
165
166
167
168
169
170
171
172
|
# File 'lib/isodoc/presentation_function/concepts.rb', line 162
def designation1(desgn)
desgn.parent.name == "related" and return
out = desgn.parent.at(ns("./fmt-#{desgn.name}"))
d1 = semx_fmt_dup(desgn)
s = d1.at(ns("./termsource"))
name = d1.at(ns("./expression/name | ./letter-symbol/name | " \
"./graphical-symbol")) or return
designation_annotate(d1, name, desgn)
out << d1
s and out << s.wrap("<fmt-termsource></fmt-termsource>").parent
end
|
#designation_annotate(desgn, name, orig) ⇒ Object
174
175
176
177
178
179
180
181
182
183
184
|
# File 'lib/isodoc/presentation_function/concepts.rb', line 174
def designation_annotate(desgn, name, orig)
designation_boldface(desgn)
designation_field(desgn, name, orig)
designation_grammar(desgn, name)
designation_localization(desgn, name, orig)
designation_pronunciation(desgn, name)
designation_bookmarks(desgn, name)
desgn.children = name.children
end
|
#designation_boldface(desgn) ⇒ Object
186
187
188
189
190
|
# File 'lib/isodoc/presentation_function/concepts.rb', line 186
def designation_boldface(desgn)
desgn["element"] == "preferred" or return
name = desgn.at(ns("./expression/name | ./letter-symbol/name")) or return
name.children = "<strong>#{name.children}</strong>"
end
|
#designation_bookmarks(desgn, name) ⇒ Object
225
226
227
228
229
|
# File 'lib/isodoc/presentation_function/concepts.rb', line 225
def designation_bookmarks(desgn, name)
desgn.xpath(ns(".//bookmark")).each do |b|
name << b.remove
end
end
|
#designation_field(desgn, name, orig) ⇒ Object
192
193
194
195
196
197
|
# File 'lib/isodoc/presentation_function/concepts.rb', line 192
def designation_field(desgn, name, orig)
f = orig.xpath(ns("./field-of-application | ./usage-info"))
&.map { |u| to_xml(semx_fmt_dup(u)) }&.join(", ")
f&.empty? and return nil
name << "<span class='fmt-designation-field'>, <#{f}></span>"
end
|
#designation_grammar(desgn, name) ⇒ Object
199
200
201
202
203
204
205
206
207
208
209
210
|
# File 'lib/isodoc/presentation_function/concepts.rb', line 199
def designation_grammar(desgn, name)
g = desgn.at(ns("./expression/grammar")) or return
ret = []
g.xpath(ns("./gender | ./number")).each do |x|
ret << @i18n.grammar_abbrevs[x.text]
end
%w(isPreposition isParticiple isAdjective isVerb isAdverb isNoun)
.each do |x|
g.at(ns("./#{x}[text() = 'true']")) and ret << @i18n.grammar_abbrevs[x]
end
name << ", #{ret.join(', ')}"
end
|
#designation_localization(desgn, name, orig_desgn) ⇒ Object
212
213
214
215
216
217
218
|
# File 'lib/isodoc/presentation_function/concepts.rb', line 212
def designation_localization(desgn, name, orig_desgn)
loc = [desgn.at(ns("./expression/@language"))&.text,
desgn.at(ns("./expression/@script"))&.text,
orig_desgn.at("./@geographic-area")&.text].compact
loc.empty? and return
name << ", #{loc.join(' ')}"
end
|
#designation_pronunciation(desgn, name) ⇒ Object
220
221
222
223
|
# File 'lib/isodoc/presentation_function/concepts.rb', line 220
def designation_pronunciation(desgn, name)
f = desgn.at(ns("./expression/pronunciation")) or return
name << ", /#{to_xml(f.children)}/"
end
|
#display_order(docxml) ⇒ Object
107
108
109
110
111
112
113
114
115
116
117
118
|
# File 'lib/isodoc/presentation_function/section.rb', line 107
def display_order(docxml)
i = 0
d = @xrefs.clause_order(docxml)
%i(preface main annex back).each do |s|
d[s].each do |a|
i = if a[:multi]
display_order_xpath(docxml, a[:path], i)
else display_order_at(docxml, a[:path], i)
end
end
end
end
|
#display_order_at(docxml, xpath, idx) ⇒ Object
88
89
90
91
92
93
94
95
|
# File 'lib/isodoc/presentation_function/section.rb', line 88
def display_order_at(docxml, xpath, idx)
c = docxml.at(ns(xpath)) or return idx
skip_display_order?(c) and return idx
idx += 1
idx = preceding_floating_titles(c, idx)
c["displayorder"] = idx
idx
end
|
#display_order_xpath(docxml, xpath, idx) ⇒ Object
97
98
99
100
101
102
103
104
105
|
# File 'lib/isodoc/presentation_function/section.rb', line 97
def display_order_xpath(docxml, xpath, idx)
docxml.xpath(ns(xpath)).each do |c|
skip_display_order?(c) and next
idx += 1
idx = preceding_floating_titles(c, idx)
c["displayorder"] = idx
end
idx
end
|
#dl(docxml) ⇒ Object
153
154
155
|
# File 'lib/isodoc/presentation_function/block.rb', line 153
def dl(docxml)
docxml.xpath(ns("//dl")).each { |f| dl1(f) }
end
|
#dl1(elem) ⇒ Object
157
158
159
160
|
# File 'lib/isodoc/presentation_function/block.rb', line 157
def dl1(elem)
elem.at(ns("./name")) and
prefix_name(elem, {}, "", "name") end
|
#docid_prefixes(docxml) ⇒ Object
3
4
5
6
7
|
# File 'lib/isodoc/presentation_function/docid.rb', line 3
def docid_prefixes(docxml)
docxml.xpath(ns("//references/bibitem/docidentifier")).each do |i|
i.children = docid_prefix(i["type"], to_xml(i.children))
end
end
|
#edition_translate(bibdata) ⇒ Object
does not allow %Spellout and %Ordinal in the ordinal expression to be mixed
56
57
58
59
60
61
62
|
# File 'lib/isodoc/presentation_function/bibdata.rb', line 56
def edition_translate(bibdata)
x = bibdata.at(ns("./edition")) or return
/^\d+$/.match?(x.text) or return
@i18n.edition_ordinal or return
tag_translate(x, @lang, @i18n
.populate("edition_ordinal", { "var1" => x.text.to_i }))
end
|
#embedable_semantic_xml(xml) ⇒ Object
139
140
141
142
|
# File 'lib/isodoc/presentation_xml_convert.rb', line 139
def embedable_semantic_xml(xml)
xml = embedable_semantic_xml_tags(xml)
embedable_semantic_xml_attributes(xml)
end
|
#embedable_semantic_xml_attributes(xml) ⇒ Object
157
158
159
160
161
162
163
164
165
166
|
# File 'lib/isodoc/presentation_xml_convert.rb', line 157
def embedable_semantic_xml_attributes(xml)
Metanorma::Utils::anchor_attributes.each do |(tag_name, attr_name)|
tag_name == "*" or tag_name = "semantic__#{tag_name}"
xml.xpath("//#{tag_name}[@#{attr_name}]").each do |elem|
elem.attributes[attr_name].value =
"semantic__#{elem.attributes[attr_name].value}"
end
end
xml
end
|
144
145
146
147
148
149
150
151
152
153
154
155
|
# File 'lib/isodoc/presentation_xml_convert.rb', line 144
def embedable_semantic_xml_tags(xml)
ret = to_xml(xml)
.sub(/ xmlns=['"][^"']+['"]/, "") .split(/(?=[<> \t\r\n\f\v])/).map do |x|
case x
when /^<[^:]+:/ then x.sub(":", ":semantic__")
when /^<[^:]+$/ then x.sub(%r{(</?)([[:alpha:]])},
"\\1semantic__\\2")
else x end
end
Nokogiri::XML(ret.join).root
end
|
#emf_encode(img) ⇒ Object
132
133
134
135
136
137
|
# File 'lib/isodoc/presentation_function/image.rb', line 132
def emf_encode(img)
svg_prep(img)
img.children = "<emf src='#{img['src']}'/>"
img["src"] = ""
img
end
|
#emf_to_svg(img) ⇒ Object
145
146
147
148
149
150
151
|
# File 'lib/isodoc/presentation_function/image.rb', line 145
def emf_to_svg(img)
datauri_src = img.at(ns("./emf/@src")).text
Vectory::Emf.from_datauri(datauri_src)
.to_svg
.content
.sub(/<\?[^>]+>/, "")
end
|
#empty_xml?(str) ⇒ Boolean
detect whether string which may contain XML markup is empty
121
122
123
124
125
|
# File 'lib/isodoc/presentation_function/autonum.rb', line 121
def empty_xml?(str)
str.blank? and return true
x = Nokogiri::XML::DocumentFragment.parse(str)
x.to_str.strip.empty?
end
|
#enable_indexsect ⇒ Object
3
4
5
|
# File 'lib/isodoc/presentation_function/index.rb', line 3
def enable_indexsect
false
end
|
#eps2svg(img) ⇒ Object
110
111
112
113
114
115
116
117
118
|
# File 'lib/isodoc/presentation_function/image.rb', line 110
def eps2svg(img)
return unless eps?(img["mimetype"])
img["mimetype"] = "image/svg+xml"
if src = eps_to_svg(img)
img["src"] = src
img.children = ""
end
end
|
#eps_to_svg(node) ⇒ Object
153
154
155
156
157
158
159
160
161
162
|
# File 'lib/isodoc/presentation_function/image.rb', line 153
def eps_to_svg(node)
if !node.text.strip.empty? || %r{^data:}.match?(node["src"])
return eps_to_svg_from_node(node)
end
target_path = imgfile_suffix(node["src"], "svg")
return target_path if File.exist?(target_path)
eps_to_svg_from_node(node, target_path)
end
|
#eps_to_svg_from_node(node, target_path = nil) ⇒ Object
164
165
166
167
168
169
|
# File 'lib/isodoc/presentation_function/image.rb', line 164
def eps_to_svg_from_node(node, target_path = nil)
svg = Vectory::Eps.from_node(node).to_svg
return svg.write(target_path).path if target_path
svg.write.path
end
|
#eref(docxml) ⇒ Object
46
47
48
49
50
|
# File 'lib/isodoc/presentation_function/inline.rb', line 46
def eref(docxml)
docxml.xpath(ns("//eref")).each { |f| xref1(f) }
docxml.xpath(ns("//eref//xref")).each { |f| f.replace(f.children) }
docxml.xpath(ns("//erefstack")).each { |f| erefstack1(f) }
end
|
#eref2link(docxml) ⇒ Object
194
195
196
197
198
199
200
201
202
203
|
# File 'lib/isodoc/presentation_function/erefs.rb', line 194
def eref2link(docxml)
docxml.xpath(ns("//eref | //origin[not(termref)] | //quote//source"))
.each do |e|
href = eref_target(e) or next
e.xpath(ns("./locality | ./localityStack")).each(&:remove)
if href[:type] == :anchor then eref2xref(e)
else eref2link1(e, href)
end
end
end
|
#eref2link1(node, href) ⇒ Object
213
214
215
216
217
218
219
|
# File 'lib/isodoc/presentation_function/erefs.rb', line 213
def eref2link1(node, href)
url = href[:link]
att = href[:type] == :attachment ? "attachment='true'" : ""
repl = "<link #{att} target='#{url}'>#{node.children}</link>"
node["type"] == "footnote" and repl = "<sup>#{repl}</sup>"
node.replace(repl)
end
|
#eref2xref(node) ⇒ Object
205
206
207
208
209
210
211
|
# File 'lib/isodoc/presentation_function/erefs.rb', line 205
def eref2xref(node)
node.name = "xref"
node["target"] = node["bibitemid"]
node.delete("bibitemid")
node.delete("citeas")
node["type"] == "footnote" and node.wrap("<sup></sup>")
end
|
#eref_localities(refs, target, node) ⇒ Object
38
39
40
41
42
43
44
45
46
|
# File 'lib/isodoc/presentation_function/erefs.rb', line 38
def eref_localities(refs, target, node)
if can_conflate_eref_rendering?(refs)
l10n(", #{eref_localities_conflated(refs, target, node)}"
.gsub(/\s+/, " "))
else
ret = resolve_eref_connectives(eref_locality_stacks(refs, target, node))
l10n(ret.join.gsub(/\s+/, " "))
end
end
|
#eref_localities0(ref, _idx, target, node) ⇒ Object
154
155
156
157
158
159
160
161
162
|
# File 'lib/isodoc/presentation_function/erefs.rb', line 154
def eref_localities0(ref, _idx, target, node)
if ref["type"] == "whole" then @i18n.wholeoftext
else
eref_localities1({ target:, type: ref["type"], number: "sg",
from: ref.at(ns("./referenceFrom"))&.text,
upto: ref.at(ns("./referenceTo"))&.text, node:,
lang: @lang })
end
end
|
#eref_localities1(opt) ⇒ Object
172
173
174
175
176
177
178
179
180
|
# File 'lib/isodoc/presentation_function/erefs.rb', line 172
def eref_localities1(opt)
opt[:type] == "anchor" and return nil
opt[:lang] == "zh" and
return l10n(eref_localities1_zh(opt))
ret = eref_locality_populate(opt[:type], opt[:node], opt[:number])
ret += " #{opt[:from]}" if opt[:from]
ret += "–#{opt[:upto]}" if opt[:upto]
l10n(ret)
end
|
#eref_localities1_zh(opt) ⇒ Object
164
165
166
167
168
169
170
|
# File 'lib/isodoc/presentation_function/erefs.rb', line 164
def eref_localities1_zh(opt)
ret = "第#{opt[:from]}" if opt[:from]
ret += "–#{opt[:upto]}" if opt[:upto]
loc = eref_locality_populate(opt[:type], opt[:node], "sg")
ret += " #{loc}" unless opt[:node]["droploc"] == "true"
ret
end
|
#eref_localities_conflated(refs, target, node) ⇒ Object
48
49
50
51
52
53
54
55
56
57
|
# File 'lib/isodoc/presentation_function/erefs.rb', line 48
def eref_localities_conflated(refs, target, node)
droploc = node["droploc"]
node["droploc"] = true
ret = resolve_eref_connectives(eref_locality_stacks(refs, target,
node))
node.delete("droploc") unless droploc
eref_localities1({ target:, number: "pl",
type: refs.first.at(ns("./locality/@type")).text,
from: l10n(ret[1..].join), node:, lang: @lang })
end
|
#eref_locality_delimiter(ref) ⇒ Object
123
124
125
126
127
128
|
# File 'lib/isodoc/presentation_function/erefs.rb', line 123
def eref_locality_delimiter(ref)
if ref&.next_element&.name == "localityStack"
ref.next_element["connective"]
else locality_delimiter(ref)
end
end
|
#eref_locality_populate(type, node, number) ⇒ Object
182
183
184
185
186
187
188
189
190
191
192
|
# File 'lib/isodoc/presentation_function/erefs.rb', line 182
def eref_locality_populate(type, node, number)
node["droploc"] == "true" and return ""
loc = type.sub(/^locality:/, "")
ret = @i18n.locality[loc] || loc
number == "pl" and ret = @i18n.inflect(ret, number: "pl")
ret = case node["case"]
when "lowercase" then ret.downcase
else Metanorma::Utils.strict_capitalize_first(ret)
end
" #{ret}"
end
|
#eref_locality_stack(ref, idx, target, node) ⇒ Object
130
131
132
133
134
135
136
137
138
139
|
# File 'lib/isodoc/presentation_function/erefs.rb', line 130
def eref_locality_stack(ref, idx, target, node)
ret = []
if ref.name == "localityStack"
ret = eref_locality_stack1(ref, target, node, ret)
else
l = eref_localities0(ref, idx, target, node) and ret << l
end
ret[-1] == ", " and ret.pop
ret
end
|
#eref_locality_stack1(ref, target, node, ret) ⇒ Object
141
142
143
144
145
146
147
148
|
# File 'lib/isodoc/presentation_function/erefs.rb', line 141
def eref_locality_stack1(ref, target, node, ret)
ref.elements.each_with_index do |rr, j|
l = eref_localities0(rr, j, target, node) or next
ret << l
ret << locality_delimiter(rr) unless j == ref.elements.size - 1
end
ret
end
|
#eref_locality_stacks(refs, target, node) ⇒ Object
112
113
114
115
116
117
118
119
120
121
|
# File 'lib/isodoc/presentation_function/erefs.rb', line 112
def eref_locality_stacks(refs, target, node)
ret = refs.each_with_index.with_object([]) do |(r, i), m|
added = eref_locality_stack(r, i, target, node)
added.empty? and next
added.each { |a| m << a }
i == refs.size - 1 and next
m << eref_locality_delimiter(r)
end
ret.empty? ? ret : [", "] + ret
end
|
#eref_target(node) ⇒ Object
227
228
229
230
231
232
233
|
# File 'lib/isodoc/presentation_function/erefs.rb', line 227
def eref_target(node)
u = eref_url(node["bibitemid"]) or return nil
url = suffix_url(u[:link])
anchor = node.at(ns(".//locality[@type = 'anchor']"))
/^#/.match?(url) || !anchor and return { link: url, type: u[:type] }
{ link: "#{url}##{anchor.text.strip}", type: u[:type] }
end
|
#eref_url(id) ⇒ Object
240
241
242
243
244
245
246
247
248
249
250
251
|
# File 'lib/isodoc/presentation_function/erefs.rb', line 240
def eref_url(id)
b = eref_url_prep(id) or return nil
%i(attachment citation).each do |x|
u = b.at(ns("./uri[@type = '#{x}'][@language = '#{@lang}']")) ||
b.at(ns("./uri[@type = '#{x}']")) and return { link: u.text, type: x }
end
if b["hidden"] == "true"
u = b.at(ns("./uri")) or return nil
{ link: u.text, type: :citation }
else { link: "##{id}", type: :anchor }
end
end
|
#eref_url_prep(id) ⇒ Object
235
236
237
238
|
# File 'lib/isodoc/presentation_function/erefs.rb', line 235
def eref_url_prep(id)
@bibitem_lookup.nil? and return nil
@bibitem_lookup[id]
end
|
#erefstack1(elem) ⇒ Object
30
31
32
33
34
35
36
|
# File 'lib/isodoc/presentation_function/erefs.rb', line 30
def erefstack1(elem)
locs = elem.xpath(ns("./eref")).map do |e|
[e["connective"], to_xml(e)]
end.flatten
ret = resolve_eref_connectives(locs)
elem.replace(ret[1])
end
|
#example(docxml) ⇒ Object
38
39
40
|
# File 'lib/isodoc/presentation_function/block.rb', line 38
def example(docxml)
docxml.xpath(ns("//example")).each { |f| example1(f) }
end
|
#example1(elem) ⇒ Object
42
43
44
45
46
|
# File 'lib/isodoc/presentation_function/block.rb', line 42
def example1(elem)
n = @xrefs.get[elem["id"]]
lbl = labelled_autonum(@i18n.example, elem["id"], n&.dig(:label))
prefix_name(elem, { caption: block_delim }, lbl, "name")
end
|
#expand_citeas(text) ⇒ Object
25
26
27
28
|
# File 'lib/isodoc/presentation_function/erefs.rb', line 25
def expand_citeas(text)
text.nil? and return text
HTMLEntities.new.decode(text.gsub("&#x", "&#"))
end
|
70
71
72
73
74
75
76
77
78
|
# File 'lib/isodoc/presentation_function/math.rb', line 70
def explicit_number_formatter(num, locale, options)
ret = numberformat_type((options))
l = ret[:locale] || locale
precision, symbols, significant = explicit_number_formatter_cfg(num, ret)
n = normalise_number(num.text)
Plurimath::NumberFormatter.new(l)
.localized_number(n, precision:,
format: symbols.merge(significant:))
end
|
80
81
82
83
84
85
86
87
|
# File 'lib/isodoc/presentation_function/math.rb', line 80
def explicit_number_formatter_cfg(num, fmt)
symbols = .dup.transform_values do |v|
v.is_a?(String) ? HTMLEntities.new.decode(v) : v
end.merge(fmt)
symbols = large_notation_fmt(symbols, num.text)
[symbols[:precision] || num_precision(num.text), symbols,
explicit_number_formatter_signif(num, symbols)]
end
|
89
90
91
92
93
94
|
# File 'lib/isodoc/presentation_function/math.rb', line 89
def explicit_number_formatter_signif(num, symbols)
signif = symbols[:significant]
(symbols.keys & %i(precision digit_count)).empty? and
signif ||= num_totaldigits(num.text)
signif
end
|
#extension_insert(xml, path = []) ⇒ Object
35
36
37
38
39
40
41
|
# File 'lib/isodoc/presentation_function/metadata.rb', line 35
def extension_insert(xml, path = [])
ins = extension_insert_pt(xml)
path.each do |n|
ins = ins.at(ns("./#{n}")) || ins.add_child("<#{n}/>").first
end
ins
end
|
#extension_insert_pt(xml) ⇒ Object
43
44
45
46
47
48
49
50
51
|
# File 'lib/isodoc/presentation_function/metadata.rb', line 43
def extension_insert_pt(xml)
xml.at(ns("//metanorma-extension")) ||
xml.at(ns("//bibdata"))
&.after("<metanorma-extension> </metanorma-extension>")
&.next_element ||
xml.root.elements.first
.before("<metanorma-extension> </metanorma-extension>")
.previous_element
end
|
174
175
176
177
178
179
180
181
182
|
# File 'lib/isodoc/presentation_function/inline.rb', line 174
def (docxml)
docxml.xpath(ns("//presentation-metadata/custom-charset-font"))
.each_with_object({}) do |line, m|
line.text.split(",").map(&:strip).each do |x|
kv = x.split(":", 2)
m[kv[0]] = kv[1]
end
end
end
|
131
132
133
134
135
136
137
138
|
# File 'lib/isodoc/presentation_function/index.rb', line 131
def (val, terms, label)
terms.each_with_object(val) do |t, v|
term, term2, term3 = (t)
term_hash_init(v, term, term2, term3, label)
v[term][term2][term3][label] << to_xml(t.at(ns("./target"))&.children)
t.remove
end
end
|
attributes are decoded into UTF-8, elements in extract_indexsee are still in entities
149
150
151
152
153
154
155
156
157
158
|
# File 'lib/isodoc/presentation_function/index.rb', line 149
def (terms)
terms.each_with_object({}) do |t, v|
term, term2, term3 = (t)
to = t["to"] ? "to='#{t['to']}' " : ""
index2bookmark(t)
term_hash_init(v, term, term2, term3, :xref)
v[term][term2][term3][:xref] << "<xref target='#{t['id']}' " \
"#{to}pagenumber='true'/>"
end
end
|
160
161
162
163
164
|
# File 'lib/isodoc/presentation_function/index.rb', line 160
def (term)
%w(primary secondary tertiary).each_with_object([]) do |x, m|
m << to_xml(term.at(ns("./#{x}"))&.children)
end
end
|
7
8
9
10
11
12
13
|
# File 'lib/isodoc/presentation_function/image.rb', line 7
def figure(docxml)
docxml.xpath("//m:svg", SVG).each { |f| svg_wrap(f) }
docxml.xpath(ns("//image")).each { |f| (f) }
docxml.xpath(ns("//figure")).each { |f| figure1(f) }
docxml.xpath(ns("//svgmap")).each { |s| (s) }
imageconvert(docxml)
end
|
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/isodoc/presentation_function/image.rb', line 59
def figure1(elem)
elem["class"] == "pseudocode" || elem["type"] == "pseudocode" and
return sourcecode1(elem)
figure_fn(elem)
figure_key(elem.at(ns("./dl")))
lbl = @xrefs.anchor(elem["id"], :label, false)
lbl and a = autonum(elem["id"], lbl)
figname = figure_name(elem)
(elem.parent.name == "figure") && a and
a += subfigure_delim
lbl && figure_label?(elem) and s = "#{figname}#{a}"
prefix_name(elem, { caption: figure_delim(elem) }, l10n(s&.strip), "name")
end
|
51
52
53
|
# File 'lib/isodoc/presentation_function/image.rb', line 51
def figure_delim(_elem)
block_delim
end
|
move footnotes into key, and get rid of footnote reference since it is in diagram
75
76
77
78
79
80
81
82
83
|
# File 'lib/isodoc/presentation_function/image.rb', line 75
def figure_fn(elem)
fn = elem.xpath(ns(".//fn")) - elem.xpath(ns("./name//fn"))
fn.empty? and return
dl = figure_key_insert_pt(elem)
fn.each do |f|
dl.previous = "<dt><p><sup>#{f['reference']}</sup></p></dt>" \
"<dd>#{f.remove.children.to_xml}</dd>"
end
end
|
102
103
104
105
106
107
108
|
# File 'lib/isodoc/presentation_function/image.rb', line 102
def figure_key(dlist)
dlist or return
dlist["class"] = "formula_dl"
dlist.at(ns("./name")) and return
dlist.previous =
"<p keep-with-next='true'><strong>#{@i18n.key}</strong></p>"
end
|
85
86
87
88
89
|
# File 'lib/isodoc/presentation_function/image.rb', line 85
def figure_key_insert_pt(elem)
elem.at(ns("//dl/name"))&.next ||
elem.at(ns("//dl"))&.children&.first ||
elem.add_child("<dl> </dl>").first.children.first
end
|
96
97
98
99
100
|
# File 'lib/isodoc/presentation_function/image.rb', line 96
def figure_label(elem)
klass = elem["class"] || "figure"
klasslbl = @i18n.get[klass] || klass
lower2cap klasslbl
end
|
91
92
93
94
|
# File 'lib/isodoc/presentation_function/image.rb', line 91
def figure_label?(elem)
elem.at(ns("./figure")) && !elem.at(ns("./name")) and return false
true
end
|
55
56
57
|
# File 'lib/isodoc/presentation_function/image.rb', line 55
def figure_name(elem)
"<span class='fmt-element-name'>#{figure_label(elem)}</span> "
end
|
212
213
214
|
# File 'lib/isodoc/presentation_function/block.rb', line 212
def figuresource(elem)
source1(elem)
end
|
#floattitle(docxml) ⇒ Object
22
23
24
|
# File 'lib/isodoc/presentation_function/title.rb', line 22
def floattitle(docxml)
docxml.xpath(ns(".//floating-title")).each { |f| floattitle1(f) }
end
|
#floattitle1(elem) ⇒ Object
TODO not currently doing anything with the @depth attribute of floating-title
27
28
29
30
31
32
33
34
35
36
|
# File 'lib/isodoc/presentation_function/title.rb', line 27
def floattitle1(elem)
elem["id"] ||= "_#{UUIDTools::UUID.random_create}"
p = elem.dup
p.children = "<semx element='floating-title' source='#{elem['id']}'>" \
"#{to_xml(p.children)}</semx>"
elem.next = p
p.name = "p"
p["type"] = "floating-title"
transfer_id(elem, p)
end
|
#fmt_caption(label, elem, name, ids, delims) ⇒ Object
Remove “.blank?” tests if want empty delim placeholders for manipulation
128
129
130
131
132
133
134
135
|
# File 'lib/isodoc/presentation_function/autonum.rb', line 128
def fmt_caption(label, elem, name, ids, delims)
label = fmt_caption_label_wrap(label)
c = fmt_caption2(label, elem, name, ids, delims)
empty_xml?(c) and return
!delims[:label].blank? and
f = "<span class='fmt-label-delim'>#{delims[:label]}</span>"
"<fmt-#{elem}>#{c}#{f}</fmt-#{elem}>"
end
|
#fmt_caption2(label, elem, name, ids, delims) ⇒ Object
143
144
145
146
147
148
149
150
151
|
# File 'lib/isodoc/presentation_function/autonum.rb', line 143
def fmt_caption2(label, elem, name, ids, delims)
if name && !name.children.empty?
empty_xml?(label) or
d = "<span class='fmt-caption-delim'>#{delims[:caption]}</span>"
attr = " element='#{elem}' source='#{ids[:name]}'"
"#{label}#{d}<semx #{attr}>#{to_xml(name.children)}</semx>"
elsif label then label
end
end
|
#fmt_caption_label_wrap(label) ⇒ Object
137
138
139
140
141
|
# File 'lib/isodoc/presentation_function/autonum.rb', line 137
def fmt_caption_label_wrap(label)
empty_xml?(label) || %r{<span class=['"]fmt-caption-label['"]}.match?(label) or
label = "<span class='fmt-caption-label'>#{label}</span>"
label
end
|
#fmt_xref_label(label, _number, ids) ⇒ Object
98
99
100
101
102
103
104
105
106
107
|
# File 'lib/isodoc/presentation_function/autonum.rb', line 98
def fmt_xref_label(label, _number, ids)
label or return ""
x = @xrefs.anchor(ids[:elem], :xref, false) or return ""
ret = "<fmt-xref-label>#{x}</fmt-xref-label>"
container = @xrefs.anchor(ids[:elem], :container, false)
y = prefix_container_fmt_xref_label(container, x)
y != x and
ret += "<fmt-xref-label container='#{container}'>#{y}</fmt-xref-label>"
ret
end
|
65
66
67
68
69
70
71
72
73
|
# File 'lib/isodoc/presentation_function/metadata.rb', line 65
def fonts_metadata(xmldoc)
ins = presmeta_insert_pt(xmldoc)
@fontist_fonts and CSV.parse_line(@fontist_fonts, col_sep: ";")
.map(&:strip).reverse_each do |f|
ins.next = presmeta("fonts", f)
end
@fontlicenseagreement and
ins.next = presmeta("font-license-agreement", @fontlicenseagreement)
end
|
21
22
23
|
# File 'lib/isodoc/presentation_function/block.rb', line 21
def formula(docxml)
docxml.xpath(ns("//formula")).each { |f| formula1(f) }
end
|
25
26
27
28
29
|
# File 'lib/isodoc/presentation_function/block.rb', line 25
def formula1(elem)
formula_where(elem.at(ns("./dl")))
lbl = @xrefs.anchor(elem["id"], :label, false)
lbl.nil? || lbl.empty? or prefix_name(elem, {}, lbl, "name")
end
|
31
32
33
34
35
36
|
# File 'lib/isodoc/presentation_function/block.rb', line 31
def formula_where(dlist)
dlist or return
dlist["class"] = "formula_dl"
where = dlist.xpath(ns("./dt")).size > 1 ? @i18n.where : @i18n.where_one
dlist.previous = "<p keep-with-next='true'>#{where}</p>"
end
|
#gather_all_ids(elem) ⇒ Object
56
57
58
59
60
|
# File 'lib/isodoc/presentation_function/autonum.rb', line 56
def gather_all_ids(elem)
elem.xpath(".//*[@id]").each_with_object([]) do |i, m|
m << i["id"]
end
end
|
#gather_xref_locations(node) ⇒ Object
117
118
119
120
121
122
123
124
125
|
# File 'lib/isodoc/presentation_function/xrefs.rb', line 117
def gather_xref_locations(node)
node.xpath(ns("./location")).each_with_object([]) do |l, m|
type = @xrefs.anchor(l["target"], :type)
m << { conn: l["connective"], target: l["target"],
type:, node: l, elem: @xrefs.anchor(l["target"], :elem),
container: @xrefs.anchor(l["target"], :container, false) ||
%w(termnote).include?(type) }
end
end
|
#get_linkend(node) ⇒ Object
12
13
14
15
16
17
18
19
20
21
22
23
|
# File 'lib/isodoc/presentation_function/inline.rb', line 12
def get_linkend(node)
node["style"] == "id" and anchor_id_postprocess(node)
xref_empty?(node) or return
target = docid_l10n(node["target"]) ||
docid_l10n(expand_citeas(node["citeas"]))
link = anchor_linkend(node, target)
link += eref_localities(node.xpath(ns("./locality | ./localityStack")),
link, node)
non_locality_elems(node).each(&:remove)
node.add_child(cleanup_entities(link))
unnest_linkend(node)
end
|
#hash_translate(bibdata, hash, xpath, lang = @lang) ⇒ Object
47
48
49
50
51
52
|
# File 'lib/isodoc/presentation_function/bibdata.rb', line 47
def hash_translate(bibdata, hash, xpath, lang = @lang)
x = bibdata.at(ns(xpath)) or return
hash.is_a? Hash or return
hash[x.text] or return
tag_translate(x, lang, hash[x.text])
end
|
#hidden_items(docxml) ⇒ Object
47
48
49
50
51
52
53
54
55
|
# File 'lib/isodoc/presentation_function/refs.rb', line 47
def hidden_items(docxml)
docxml.xpath(ns("//references[bibitem/@hidden = 'true']")).each do |x|
x.at(ns("./bibitem[not(@hidden = 'true')]")) and next
x.elements.map(&:name).any? do |n|
!%w(title bibitem).include?(n)
end and next
x["hidden"] = "true"
end
end
|
#i18n_chain_boolean(value, entry) ⇒ Object
152
153
154
155
156
|
# File 'lib/isodoc/presentation_function/xrefs.rb', line 152
def i18n_chain_boolean(value, entry)
connectives_spans(@i18n.send("chain_#{entry[:conn]}")
.sub("%1", value)
.sub("%2", loc2xref(entry)))
end
|
#i18n_safe(key) ⇒ Object
90
91
92
|
# File 'lib/isodoc/presentation_function/metadata.rb', line 90
def i18n_safe(key)
key.to_s.gsub(/\s|\./, "_")
end
|
#i18n_tag(key, value) ⇒ Object
85
86
87
88
|
# File 'lib/isodoc/presentation_function/metadata.rb', line 85
def i18n_tag(key, value)
"<localized-string key='#{key}' language='#{@lang}'>#{value}" \
"</localized-string>"
end
|
#i8n_name(hash, pref) ⇒ Object
94
95
96
97
98
99
100
101
102
103
104
|
# File 'lib/isodoc/presentation_function/metadata.rb', line 94
def i8n_name(hash, pref)
case hash
when Hash then i8n_name1(hash, pref)
when Array
hash.reject { |a| blank?(a) }.each_with_object([])
.with_index do |(v1, g), i|
i8n_name(v1, "#{i18n_safe(k)}.#{i}").each { |x| g << x }
end
else [i18n_tag(pref, hash)]
end
end
|
#i8n_name1(hash, pref) ⇒ Object
106
107
108
109
110
111
112
113
114
115
116
117
118
|
# File 'lib/isodoc/presentation_function/metadata.rb', line 106
def i8n_name1(hash, pref)
hash.reject { |_k, v| blank?(v) }.each_with_object([]) do |(k, v), g|
case v
when Hash then i8n_name(v, i18n_safe(k)).each { |x| g << x }
when Array
v.reject { |a| blank?(a) }.each_with_index do |v1, i|
i8n_name(v1, "#{i18n_safe(k)}.#{i}").each { |x| g << x }
end
else
g << i18n_tag("#{pref}#{pref.empty? ? '' : '.'}#{i18n_safe(k)}", v)
end
end
end
|
#ident_fn(bib) ⇒ Object
212
213
214
215
|
# File 'lib/isodoc/presentation_function/refs.rb', line 212
def ident_fn(bib)
ret = bib.at(ns("./docidentifier//fn")) or return ""
to_xml(ret.remove)
end
|
#identifier(docxml) ⇒ Object
89
90
91
92
93
94
95
96
|
# File 'lib/isodoc/presentation_function/inline.rb', line 89
def identifier(docxml)
(docxml.xpath(ns("//identifier")) -
docxml.xpath(ns("//bibdata/identifier")) -
docxml.xpath(ns("//bibitema/identifier")))
.each do |n|
n.name = "tt"
end
end
|
#imageconvert(docxml) ⇒ Object
28
29
30
31
32
33
|
# File 'lib/isodoc/presentation_function/image.rb', line 28
def imageconvert(docxml)
docxml.xpath(ns("//image")).each do |f|
eps2svg(f)
svg_emf_double(f)
end
end
|
#imgfile_suffix(uri, suffix) ⇒ Object
196
197
198
|
# File 'lib/isodoc/presentation_function/image.rb', line 196
def imgfile_suffix(uri, suffix)
"#{File.join(File.dirname(uri), File.basename(uri, '.*'))}.#{suffix}"
end
|
42
43
44
45
46
47
48
49
|
# File 'lib/isodoc/presentation_function/math.rb', line 42
def implicit_number_formatter(num, locale)
num.ancestors("formula").empty? or return
fmt = { significant: num_totaldigits(num.text) }.compact
n = normalise_number(num.text)
@numfmt.localized_number(n, locale:, format: fmt,
precision: num_precision(num.text))
end
|
#implicit_reference(bib) ⇒ Object
reference not to be rendered because it is deemed implicit in the standards environment
219
220
221
|
# File 'lib/isodoc/presentation_function/refs.rb', line 219
def implicit_reference(bib)
bib["hidden"] == "true"
end
|
#index(xml) ⇒ Object
15
16
17
18
19
20
21
22
23
24
25
26
|
# File 'lib/isodoc/presentation_function/index.rb', line 15
def index(xml)
if enable_indexsect && xml.at(ns("//index"))
i = xml.at(ns("//indexsect")) ||
xml.root.add_child("<indexsect #{add_id}><title>#{@i18n.index}" \
"</title></indexsect>").first
index = sort_indexterms(xml.xpath(ns("//index")),
xml.xpath(ns("//index-xref[@also = 'false']")),
xml.xpath(ns("//index-xref[@also = 'true']")))
index1(xml, i, index)
else strip_index(xml)
end
end
|
#index1(docxml, indexsect, index) ⇒ Object
28
29
30
31
32
33
34
35
36
37
38
39
|
# File 'lib/isodoc/presentation_function/index.rb', line 28
def index1(docxml, indexsect, index)
c = indexsect.add_child("<ul></ul>").first
index.keys.sort.each do |k|
words = index[k].keys.each_with_object({}) do |w, v|
v[sortable(w).downcase] = w
end
words.keys.localize(@lang.to_sym).sort.to_a.each do |w|
c.add_child index_entries(words, index[k], w)
end
end
index1_cleanup(docxml)
end
|
#index1_cleanup(docxml) ⇒ Object
41
42
43
44
45
46
|
# File 'lib/isodoc/presentation_function/index.rb', line 41
def index1_cleanup(docxml)
docxml.xpath(ns("//indexsect//xref")).each do |x|
x.children.remove
end
@xrefs.bookmark_anchor_names(docxml)
end
|
#index2bookmark(node) ⇒ Object
173
174
175
176
177
178
|
# File 'lib/isodoc/presentation_function/index.rb', line 173
def index2bookmark(node)
node.name = "bookmark"
node.children.each(&:remove)
node["id"] = "_#{UUIDTools::UUID.random_create}"
node.delete("to")
end
|
#index_entries(words, index, primary) ⇒ Object
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/isodoc/presentation_function/index.rb', line 57
def index_entries(words, index, primary)
ret = index_entries_head(words[primary],
index.dig(words[primary], nil, nil),
index_entries_opt)
words2 = index[words[primary]]&.keys&.compact
&.each_with_object({}) { |w, v| v[w.downcase] = w }
unless words2.empty?
ret += "<ul>"
words2.keys.localize(@lang.to_sym).sort.to_a.each do |w|
ret += index_entries2(words2, index[words[primary]], w)
end
ret += "</ul>"
end
"#{ret}</li>"
end
|
#index_entries2(words, index, secondary) ⇒ Object
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
# File 'lib/isodoc/presentation_function/index.rb', line 73
def index_entries2(words, index, secondary)
ret = index_entries_head(words[secondary],
index.dig(words[secondary], nil),
index_entries_opt)
words3 = index[words[secondary]]&.keys&.compact
&.each_with_object({}) { |w, v| v[w.downcase] = w }
unless words3.empty?
ret += "<ul>"
words3.keys.localize(@lang.to_sym).sort.to_a.each do |w|
ret += (index_entries_head(words3[w],
index[words[secondary]][words3[w]],
index_entries_opt) + "</li>")
end
ret += "</ul>"
end
"#{ret}</li>"
end
|
#index_entries_head(head, entries, opt) ⇒ Object
91
92
93
94
95
96
97
98
99
100
|
# File 'lib/isodoc/presentation_function/index.rb', line 91
def index_entries_head(head, entries, opt)
ret = "<li>#{head}"
xref = entries&.dig(:xref)&.join(", ")
see = index_entries_see(entries, :see)
also = index_entries_see(entries, :also)
ret += "#{opt[:xref_lbl]} #{xref}" if xref
ret += "#{opt[:see_lbl]} #{see}" if see
ret += "#{opt[:also_lbl]} #{also}" if also
ret
end
|
#index_entries_opt ⇒ Object
53
54
55
|
# File 'lib/isodoc/presentation_function/index.rb', line 53
def index_entries_opt
{ xref_lbl: ", ", see_lbl: ", #{see_lbl}", also_lbl: ", #{also_lbl}" }
end
|
#index_entries_see(entries, label) ⇒ Object
102
103
104
105
106
107
108
109
110
111
|
# File 'lib/isodoc/presentation_function/index.rb', line 102
def index_entries_see(entries, label)
see_sort = entries&.dig(label) or return nil
x = see_sort.each_with_object({}) do |w, v|
v[sortable(w).downcase] = w
end
x.keys.localize(@lang.to_sym).sort.to_a.map do |k|
x[k]
end.join(", ")
end
|
#inline(docxml) ⇒ Object
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
# File 'lib/isodoc/presentation_xml_convert.rb', line 93
def inline(docxml)
bibitem_lookup(docxml) citeas docxml xref docxml
eref docxml origin docxml quotesource docxml eref2link docxml
mathml docxml
ruby docxml
variant docxml
identifier docxml
date docxml
passthrough docxml
inline_format docxml
end
|
110
111
112
113
|
# File 'lib/isodoc/presentation_function/inline.rb', line 110
def inline_format(docxml)
custom_charset(docxml)
text_transform(docxml)
end
|
#insert_biblio_tag(bib, ordinal, biblio, standard) ⇒ Object
163
164
165
166
167
168
169
170
171
172
173
|
# File 'lib/isodoc/presentation_function/refs.rb', line 163
def insert_biblio_tag(bib, ordinal, biblio, standard)
datefn = date_note_process(bib)
ids = bibitem_ref_code(bib)
idents = render_identifier(ids)
ret = if biblio then biblio_ref_entry_code(ordinal, idents, ids,
standard, datefn, bib)
else norm_ref_entry_code(ordinal, idents, ids, standard, datefn,
bib)
end
bib << "<biblio-tag>#{ret}</biblio-tag>"
end
|
#labelled_autonum(label, id, num) ⇒ Object
92
93
94
95
96
|
# File 'lib/isodoc/presentation_function/autonum.rb', line 92
def labelled_autonum(label, id, num)
elem = "<span class='fmt-element-name'>#{label}</span>"
num.blank? and return elem
l10n("#{elem} #{autonum(id, num)}")
end
|
#large_notation_fmt(symbols, num) ⇒ Object
96
97
98
99
100
101
102
103
104
105
|
# File 'lib/isodoc/presentation_function/math.rb', line 96
def large_notation_fmt(symbols, num)
n = symbols[:large_notation]
min = BigDecimal(symbols[:large_notation_min] || "1e-6")
max = BigDecimal(symbols[:large_notation_max] || "1e6")
n1 = large_notation_fmt1(num, n, min, max) and symbols[:notation] = n1
symbols.delete(:large_notation)
symbols.delete(:large_notation_min)
symbols.delete(:large_notation_max)
symbols
end
|
#large_notation_fmt1(num, notation, min, max) ⇒ Object
107
108
109
110
111
112
113
114
|
# File 'lib/isodoc/presentation_function/math.rb', line 107
def large_notation_fmt1(num, notation, min, max)
notation.nil? || notation == "nil" and return nil
val = BigDecimal(num).abs
val.zero? and return nil
val < min and return notation
val > max and return notation
nil
end
|
#loc2xref(entry) ⇒ Object
127
128
129
130
131
132
133
|
# File 'lib/isodoc/presentation_function/xrefs.rb', line 127
def loc2xref(entry)
if entry[:target]
"<xref nested='true' target='#{entry[:target]}'>#{entry[:label]}</xref>"
else
entry[:label]
end
end
|
#locality_delimiter(_loc) ⇒ Object
150
151
152
|
# File 'lib/isodoc/presentation_function/erefs.rb', line 150
def locality_delimiter(_loc)
", "
end
|
#localize_maths(node, locale) ⇒ Object
symbols is merged into TwitterCldr::DataReaders::NumberDataReader.new(locale).symbols
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
# File 'lib/isodoc/presentation_function/math.rb', line 21
def localize_maths(node, locale)
node.xpath(".//m:mn", MATHML).each do |x|
fmt = x["data-metanorma-numberformat"]
x.delete("data-metanorma-numberformat")
x.children =
if !fmt.nil? && !fmt.empty?
explicit_number_formatter(x, locale, fmt)
else implicit_number_formatter(x, locale)
end
rescue ArgumentError
rescue StandardError, RuntimeError => e
warn "Failure to localise MathML/mn\n#{node.parent.to_xml}\n#{e}"
end
end
|
#localized_strings(docxml) ⇒ Object
12
13
14
15
16
17
|
# File 'lib/isodoc/presentation_function/metadata.rb', line 12
def localized_strings(docxml)
a = docxml.at(ns("//bibdata")) or return
a.next =
"<localized-strings>#{i8n_name(trim_hash(@i18n.get), '').join}" \
"</localized-strings>"
end
|
#lower2cap(text) ⇒ Object
8
9
10
11
12
13
14
15
|
# File 'lib/isodoc/presentation_function/block.rb', line 8
def lower2cap(text)
text.nil? and return text
x = Nokogiri::XML("<a>#{text}</a>")
firsttext = x.at(".//text()[string-length(normalize-space(.))>0]") or return text
/^[[:upper:]][[:upper:]]/.match?(firsttext.text) and return text
firsttext.replace(firsttext.text.capitalize)
to_xml(x.root.children)
end
|
#mathml(docxml) ⇒ Object
9
10
11
12
13
14
15
16
17
|
# File 'lib/isodoc/presentation_function/math.rb', line 9
def mathml(docxml)
locale = @lang.to_sym
@numfmt = Plurimath::NumberFormatter
.new(locale, localize_number: @localizenumber,
localizer_symbols: )
docxml.xpath("//m:math", MATHML).each do |f| mathml1(f, locale)
end
end
|
#mathml1(node, locale) ⇒ Object
157
158
159
160
|
# File 'lib/isodoc/presentation_function/math.rb', line 157
def mathml1(node, locale)
mathml_style_inherit(node)
mathml_number(node, locale)
end
|
#mathml_number(node, locale) ⇒ Object
171
172
173
174
175
176
177
178
179
180
|
# File 'lib/isodoc/presentation_function/math.rb', line 171
def mathml_number(node, locale)
justnumeral = numeric_mathml?(node)
justnumeral or asciimath_dup(node)
localize_maths(node, locale)
if justnumeral
maths_just_numeral(node)
else
mn_to_msup(node)
end
end
|
#mathml_number_to_number(node) ⇒ Object
198
199
200
201
202
203
204
205
206
|
# File 'lib/isodoc/presentation_function/math.rb', line 198
def mathml_number_to_number(node)
(node.elements.size == 1 && node.elements.first.name == "mn") or return
repl = node.at("./m:mn", MATHML).children
if node.parent.name == "stem"
node.parent.replace(repl)
else
node.replace(repl)
end
end
|
#mathml_style_inherit(node) ⇒ Object
192
193
194
195
196
|
# File 'lib/isodoc/presentation_function/math.rb', line 192
def mathml_style_inherit(node)
node.at("./ancestor::xmlns:strong") or return
node.children =
"<mstyle mathvariant='bold'>#{node.children.to_xml}</mstyle>"
end
|
#maths_just_numeral(node) ⇒ Object
147
148
149
150
151
152
153
154
155
|
# File 'lib/isodoc/presentation_function/math.rb', line 147
def maths_just_numeral(node)
mn = node.at(".//m:mn", MATHML).children.text
.sub(/\^([0-9+-]+)$/, "<sup>\\1</sup>")
if node.parent.name == "stem"
node.parent.replace(mn)
else
node.replace(mn)
end
end
|
#merge_preferred_eligible?(first, second) ⇒ Boolean
144
145
146
147
148
149
150
151
152
|
# File 'lib/isodoc/presentation_function/concepts.rb', line 144
def merge_preferred_eligible?(first, second)
orig_first, orig_second, firstex, secondex =
merge_preferred_eligible_prep(first, second)
orig_first["geographic-area"] == orig_second["geographic-area"] &&
firstex["language"] == secondex["language"] &&
!orig_first.at(ns("./pronunciation | ./grammar | ./graphical-symbol")) &&
!orig_second.at(ns("./pronunciation | ./grammar | ./graphical-symbol")) &&
orig_first.name == "preferred" && orig_second.name == "preferred"
end
|
#merge_preferred_eligible_prep(first, second) ⇒ Object
154
155
156
157
158
159
160
|
# File 'lib/isodoc/presentation_function/concepts.rb', line 154
def merge_preferred_eligible_prep(first, second)
orig_first = semx_orig(first)
orig_second = semx_orig(second)
firstex = orig_first.at(ns("./expression")) || {}
secondex = orig_second.at(ns("./expression")) || {}
[orig_first, orig_second, firstex, secondex]
end
|
#merge_second_preferred(term) ⇒ Object
124
125
126
127
128
129
130
131
132
133
134
135
|
# File 'lib/isodoc/presentation_function/concepts.rb', line 124
def merge_second_preferred(term)
pref = nil
out = term.xpath(ns("./semx")).each_with_index
.with_object([]) do |(p, i), m|
if (i.zero? && (pref = p)) || merge_preferred_eligible?(pref, p)
m << p
else
p.wrap("<p></p>")
end
end
pref&.replace(merge_second_preferred1(out, term))
end
|
#merge_second_preferred1(desgns, term) ⇒ Object
137
138
139
140
141
142
|
# File 'lib/isodoc/presentation_function/concepts.rb', line 137
def merge_second_preferred1(desgns, term)
desgns[1..].each(&:remove)
ret = l10n(desgns.map { |x| to_xml(x) }.join("; "))
term.ancestors("fmt-related").empty? and ret = "<p>#{ret}</p>"
ret
end
|
3
4
5
6
7
8
9
10
|
# File 'lib/isodoc/presentation_function/metadata.rb', line 3
def metadata(docxml)
toc_metadata(docxml)
fonts_metadata(docxml)
(docxml)
localized_strings(docxml)
a = docxml.at(ns("//metanorma-extension")) or return
a.elements.empty? and a.remove
end
|
131
132
133
134
135
136
137
|
# File 'lib/isodoc/presentation_xml_convert.rb', line 131
def metanorma_extension_insert_pt(xml)
xml.at(ns("//metanorma-extension")) ||
xml.at(ns("//bibdata"))&.after("<metanorma-extension/>")
&.next_element ||
xml.root.elements.first.before("<metanorma-extension/>")
.previous_element
end
|
#middle_title(docxml) ⇒ Object
5
6
7
8
9
10
|
# File 'lib/isodoc/presentation_function/title.rb', line 5
def middle_title(docxml)
s = docxml.at(ns("//sections")) or return
t = @meta.get[:doctitle]
t.nil? || t.empty? and return
s.add_first_child "<p class='zzSTDTitle1'>#{t}</p>"
end
|
#missing_title(docxml) ⇒ Object
12
13
14
15
16
17
18
19
20
|
# File 'lib/isodoc/presentation_function/title.rb', line 12
def missing_title(docxml)
docxml.xpath(ns("//definitions[not(./title)]")).each do |d|
d.add_first_child "<title>#{@i18n.symbols}</title>"
end
docxml.xpath(ns("//foreword[not(./title)]")).each do |d|
d.add_first_child "<title>#{@i18n.foreword}</title>"
end
end
|
#mn_to_msup(node) ⇒ Object
convert any Ascii superscripts to correct(ish) MathML Not bothering to match times, base of 1.0 x 10^-20, just ^-20
164
165
166
167
168
169
|
# File 'lib/isodoc/presentation_function/math.rb', line 164
def mn_to_msup(node)
node.xpath(".//m:mn", MATHML).each do |n|
m = %r{^(.+)\^([0-9+-]+)$}.match(n.text) or next
n.replace("<msup><mn>#{m[1]}</mn><mn>#{m[2]}</mn></msup>")
end
end
|
#move_norm_ref_to_sections(docxml) ⇒ Object
30
31
32
33
34
35
36
37
|
# File 'lib/isodoc/presentation_function/refs.rb', line 30
def move_norm_ref_to_sections(docxml)
docxml.at(ns(@xrefs.klass.norm_ref_xpath)) or return
s = move_norm_ref_to_sections_insert_pt(docxml) or return
docxml.xpath(ns(@xrefs.klass.norm_ref_xpath)).each do |r|
r.at("./ancestor::xmlns:bibliography") or next
s << r.remove
end
end
|
#move_norm_ref_to_sections_insert_pt(docxml) ⇒ Object
39
40
41
42
43
44
45
|
# File 'lib/isodoc/presentation_function/refs.rb', line 39
def move_norm_ref_to_sections_insert_pt(docxml)
s = docxml.at(ns("//sections")) and return s
s = docxml.at(ns("//preface")) and
return s.after("<sections/>").next_element
docxml.at(ns("//annex | //bibliography"))&.before("<sections/>")
&.previous_element
end
|
#multidef(_elem, defn, fmt_defn) ⇒ Object
61
62
63
64
65
66
|
# File 'lib/isodoc/presentation_function/terms.rb', line 61
def multidef(_elem, defn, fmt_defn)
ret = defn.each_with_object([]) do |f, m|
m << "<li>#{to_xml(semx_fmt_dup(f))}</li>"
end
fmt_defn << "<ol>#{ret.join("\n")}</ol>"
end
|
#no_identifier(bib) ⇒ Object
44
45
46
47
48
49
|
# File 'lib/isodoc/presentation_function/docid.rb', line 44
def no_identifier(bib)
@i18n.no_identifier or return nil
id = Nokogiri::XML::Node.new("docidentifier", bib.document)
id << @i18n.no_identifier
id
end
|
#non_locality_elems(node) ⇒ Object
6
7
8
9
10
|
# File 'lib/isodoc/presentation_function/inline.rb', line 6
def non_locality_elems(node)
node.children.reject do |c|
%w{locality localityStack location}.include? c.name
end
end
|
#norm_ref_entry_code(_ordinal, idents, _ids, _standard, datefn, _bib) ⇒ Object
175
176
177
178
179
180
181
182
183
|
# File 'lib/isodoc/presentation_function/refs.rb', line 175
def norm_ref_entry_code(_ordinal, idents, _ids, _standard, datefn, _bib)
ret = (idents[:ordinal] || idents[:metanorma] || idents[:sdo]).to_s
(idents[:ordinal] || idents[:metanorma]) && idents[:sdo] and
ret += ", #{idents[:sdo]}"
ret += datefn
ret.empty? and return ret
idents[:sdo] and ret += ","
"#{ret} "
end
|
#normalise_number(num) ⇒ Object
36
37
38
39
40
|
# File 'lib/isodoc/presentation_function/math.rb', line 36
def normalise_number(num)
n = BigDecimal(num).to_s("F")
/\.\d/.match?(num) or n.sub!(/\.\d+$/, "")
n
end
|
#note(docxml) ⇒ Object
48
49
50
|
# File 'lib/isodoc/presentation_function/block.rb', line 48
def note(docxml)
docxml.xpath(ns("//note")).each { |f| note1(f) }
end
|
#note1(elem) ⇒ Object
56
57
58
59
60
|
# File 'lib/isodoc/presentation_function/block.rb', line 56
def note1(elem)
%w(bibdata bibitem).include?(elem.parent.name) ||
elem["notag"] == "true" or lbl = note_label(elem)
prefix_name(elem, { label: note_delim(elem) }, lbl, "name")
end
|
#note_delim(_elem) ⇒ Object
52
53
54
|
# File 'lib/isodoc/presentation_function/block.rb', line 52
def note_delim(_elem)
"<tab/>"
end
|
#note_label(elem) ⇒ Object
62
63
64
65
|
# File 'lib/isodoc/presentation_function/block.rb', line 62
def note_label(elem)
n = @xrefs.get[elem["id"]]
labelled_autonum(@i18n.note, elem["id"], n&.dig(:label))
end
|
#num_precision(num) ⇒ Object
116
117
118
119
120
121
122
|
# File 'lib/isodoc/presentation_function/math.rb', line 116
def num_precision(num)
precision = nil
/\.(?!\d+e)/.match?(num) and
precision = [:precision] ||
num.sub(/^.*\./, "").size
precision
end
|
#num_totaldigits(num) ⇒ Object
124
125
126
127
128
129
130
|
# File 'lib/isodoc/presentation_function/math.rb', line 124
def num_totaldigits(num)
totaldigits = nil
/\.(?=\d+e)/.match?(num) and
totaldigits = [:significant] ||
num.sub(/^0\./, ".").sub(/^.*\./, "").sub(/e.*$/, "").size
totaldigits
end
|
51
52
53
54
55
56
57
|
# File 'lib/isodoc/presentation_function/math.rb', line 51
def (options)
options.gsub!(/([a-z_]+)='/, %('\\1=))
CSV.parse_line(options, quote_char: "'").each_with_object({}) do |x, acc|
m = /^(.+?)=(.+)?$/.match(x) or next
acc[m[1].to_sym] = m[2].sub(/^(["'])(.+)\1$/, "\\2")
end
end
|
59
60
61
62
63
64
65
66
67
68
|
# File 'lib/isodoc/presentation_function/math.rb', line 59
def numberformat_type(ret)
%i(precision significant digit_count group_digits fraction_group_digits)
.each do |i|
ret[i] &&= ret[i].to_i
end
%i(notation exponent_sign number_sign locale).each do |i|
ret[i] &&= ret[i].to_sym
end
ret
end
|
#numeric_mathml?(node) ⇒ Boolean
182
183
184
185
186
187
188
189
190
|
# File 'lib/isodoc/presentation_function/math.rb', line 182
def numeric_mathml?(node)
m = {}
node.traverse do |x|
%w(mstyle mrow math text).include?(x.name) and next
m[x.name] ||= 0
m[x.name] += 1
end
m.keys.size == 1 && m["mn"] == 1
end
|
#ol(docxml) ⇒ Object
171
172
173
174
175
|
# File 'lib/isodoc/presentation_function/block.rb', line 171
def ol(docxml)
docxml.xpath(ns("//ol")).each { |f| ol1(f) }
@xrefs.list_anchor_names(docxml.xpath(ns(@xrefs.sections_xpath)))
docxml.xpath(ns("//ol/li")).each { |f| ol_label(f) }
end
|
#ol1(elem) ⇒ Object
190
191
192
193
194
|
# File 'lib/isodoc/presentation_function/block.rb', line 190
def ol1(elem)
elem["type"] ||= ol_depth(elem).to_s
elem.at(ns("./name")) and
prefix_name(elem, {}, "", "name") end
|
#ol_depth(node) ⇒ Object
We don’t really want users to specify type of ordered list; we will use by default a fixed hierarchy as practiced by ISO (though not fully spelled out): a) 1) i) A) I)
180
181
182
183
184
185
186
187
188
|
# File 'lib/isodoc/presentation_function/block.rb', line 180
def ol_depth(node)
depth = node.ancestors("ul, ol").size + 1
type = :alphabet
type = :arabic if [2, 7].include? depth
type = :roman if [3, 8].include? depth
type = :alphabet_upper if [4, 9].include? depth
type = :roman_upper if [5, 10].include? depth
type
end
|
#ol_label(elem) ⇒ Object
196
197
198
|
# File 'lib/isodoc/presentation_function/block.rb', line 196
def ol_label(elem)
elem["label"] = @xrefs.anchor(elem["id"], :label, false)
end
|
#origin(docxml) ⇒ Object
52
53
54
|
# File 'lib/isodoc/presentation_function/inline.rb', line 52
def origin(docxml)
docxml.xpath(ns("//origin[not(termref)]")).each { |f| xref1(f) }
end
|
#passthrough(docxml) ⇒ Object
159
160
161
162
163
164
|
# File 'lib/isodoc/presentation_function/inline.rb', line 159
def passthrough(docxml)
formats = @output_formats.keys
docxml.xpath(ns("//passthrough")).each do |p|
passthrough1(p, formats)
end
end
|
#passthrough1(elem, formats) ⇒ Object
166
167
168
169
170
171
172
|
# File 'lib/isodoc/presentation_function/inline.rb', line 166
def passthrough1(elem, formats)
(elem["formats"] && !elem["formats"].empty?) or elem["formats"] = "all"
f = elem["formats"].split(",")
(f - formats).size == f.size or f = "all"
f == ["all"] and f = formats.dup
elem["formats"] = " #{f.join(' ')} "
end
|
#permission(docxml) ⇒ Object
17
18
19
20
21
22
|
# File 'lib/isodoc/presentation_function/reqt.rb', line 17
def permission(docxml)
docxml.xpath(ns("//permission")).each do |f|
recommendation1(f, lower2cap(f["class"]) ||
lower2cap(@i18n.permission))
end
end
|
#postprocess(result, filename, _dir) ⇒ Object
168
169
170
171
|
# File 'lib/isodoc/presentation_xml_convert.rb', line 168
def postprocess(result, filename, _dir)
to_xml_file(result, filename)
@files_to_delete.each { |f| FileUtils.rm_rf f }
end
|
#preceding_floating_titles(node, idx) ⇒ Object
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
# File 'lib/isodoc/presentation_function/title.rb', line 38
def preceding_floating_titles(node, idx)
out = node.xpath("./preceding-sibling::*")
.reverse.each_with_object([]) do |p, m|
%w(note admonition p floating-title).include?(p.name) or break m
m << p
end
out.reject { |c| c["displayorder"] }.reverse_each do |c|
skip_display_order?(c) and next
c["displayorder"] = idx
idx += 1
end
idx
end
|
#preceding_floats(clause) ⇒ Object
77
78
79
80
81
82
83
84
85
86
87
|
# File 'lib/isodoc/presentation_function/title.rb', line 77
def preceding_floats(clause)
ret = []
p = clause
while prev = p.previous_element
if prev.name == "floating-title"
ret << prev
p = prev
else break end
end
ret
end
|
#pref_ref_code(bib) ⇒ Object
9
10
11
12
13
14
15
16
17
18
19
|
# File 'lib/isodoc/presentation_function/docid.rb', line 9
def pref_ref_code(bib)
bib["suppress_identifier"] == "true" and return nil
ret = bib.xpath(ns("./docidentifier[@scope = 'biblio-tag']"))
ret.empty? or return ret.map { |x| to_xml(x.children) }
ret = pref_ref_code_parse(bib) or return nil
ins = bib.at(ns("./docidentifier[last()]"))
ret.reverse_each do |r|
ins.next = "<docidentifier scope='biblio-tag'>#{docid_l10n(r)}</docidentifier>"
end
ret
end
|
#pref_ref_code_parse(bib) ⇒ Object
21
22
23
24
25
26
|
# File 'lib/isodoc/presentation_function/docid.rb', line 21
def pref_ref_code_parse(bib)
data, = @bibrender.parse(bib)
ret = data[:authoritative_identifier] or return nil
ret.empty? and return nil
ret
end
|
#preface_move(clauses, after, _doc) ⇒ Object
131
132
133
134
135
136
137
138
139
140
|
# File 'lib/isodoc/presentation_function/section.rb', line 131
def preface_move(clauses, after, _doc)
clauses.empty? and return
preface = clauses.first.parent
clauses.each do |clause|
float = preceding_floats(clause)
xpath = after.map { |n| "./self::xmlns:#{n}" }.join(" | ")
xpath.empty? and xpath = "./self::*[not(following-sibling::*)]"
preface_move1(clause, preface, float, nil, xpath)
end
end
|
#preface_move1(clause, preface, float, prev, xpath) ⇒ Object
142
143
144
145
146
147
148
149
150
151
152
153
|
# File 'lib/isodoc/presentation_function/section.rb', line 142
def preface_move1(clause, preface, float, prev, xpath)
preface.elements.each do |x|
((x.name == "floating-title" || x.at(xpath)) &&
xpath != "./self::*[not(following-sibling::*)]") or prev = x
x.at(xpath) or next
clause == prev and break
prev ||= preface.children.first
prev.next = clause
float.each { |n| prev.next = n }
break
end
end
|
#preface_rearrange(doc) ⇒ Object
120
121
122
123
124
125
126
127
128
129
|
# File 'lib/isodoc/presentation_function/section.rb', line 120
def preface_rearrange(doc)
preface_move(doc.xpath(ns("//preface/abstract")),
%w(foreword introduction clause acknowledgements), doc)
preface_move(doc.xpath(ns("//preface/foreword")),
%w(introduction clause acknowledgements), doc)
preface_move(doc.xpath(ns("//preface/introduction")),
%w(clause acknowledgements), doc)
preface_move(doc.xpath(ns("//preface/acknowledgements")),
%w(), doc)
end
|
#prefix_bracketed_ref(text) ⇒ Object
199
200
201
|
# File 'lib/isodoc/presentation_function/refs.rb', line 199
def prefix_bracketed_ref(text)
"#{text}<tab/>"
end
|
#prefix_container(container, linkend, node, target) ⇒ Object
3
4
5
6
7
8
9
10
11
12
13
|
# File 'lib/isodoc/presentation_function/xrefs.rb', line 3
def prefix_container(container, linkend, node, target)
prefix_container?(container, node) or return linkend
container_container = @xrefs.anchor(container, :container, false)
container_label =
prefix_container(container_container,
anchor_xref(node, container, container: true),
node, target)
l10n(connectives_spans(@i18n.nested_xref
.sub("%1", "<span class='fmt-xref-container'>#{container_label}</span>")
.sub("%2", linkend)))
end
|
#prefix_container?(container, node) ⇒ Boolean
70
71
72
73
74
75
76
|
# File 'lib/isodoc/presentation_function/xrefs.rb', line 70
def prefix_container?(container, node)
node["style"] == "modspec" and return false type = @xrefs.anchor(node["target"], :type)
container &&
get_note_container_id(node, type) != container &&
@xrefs.get[node["target"]]
end
|
#prefix_container_fmt_xref_label(container, xref) ⇒ Object
109
110
111
112
113
114
115
116
117
118
|
# File 'lib/isodoc/presentation_function/autonum.rb', line 109
def prefix_container_fmt_xref_label(container, xref)
container or return xref
container_container = @xrefs.anchor(container, :container, false)
container_label =
prefix_container_fmt_xref_label(container_container,
@xrefs.anchor(container, :xref, false))
l10n(connectives_spans(@i18n.nested_xref
.sub("%1", "<span class='fmt-xref-container'>#{container_label}</span>")
.sub("%2", xref)))
end
|
#prefix_name(node, delims, label, elem) ⇒ Object
3
4
5
6
7
8
9
10
11
12
|
# File 'lib/isodoc/presentation_function/autonum.rb', line 3
def prefix_name(node, delims, label, elem)
label, delims = prefix_name_defaults(node, delims, label)
name, ins, ids, number = prefix_name_prep(node, elem)
ins.next = fmt_xref_label(label, number, ids)
number and node["autonum"] = number.gsub(/<[^>]+>/, "")
!node.at(ns("./fmt-#{elem}")) &&
(c = fmt_caption(label, elem, name, ids, delims)) and ins.next = c
prefix_name_postprocess(node, elem)
end
|
#prefix_name_defaults(node, delims, label) ⇒ Object
14
15
16
17
18
|
# File 'lib/isodoc/presentation_function/autonum.rb', line 14
def prefix_name_defaults(node, delims, label)
label&.empty? and label = nil
delims.nil? and delims = {}
[label, delims]
end
|
#prefix_name_labels(node) ⇒ Object
29
30
31
32
|
# File 'lib/isodoc/presentation_function/autonum.rb', line 29
def prefix_name_labels(node)
{ elem: node["id"],
name: "_#{UUIDTools::UUID.random_create}" }
end
|
#prefix_name_postprocess(node, elem) ⇒ Object
34
35
36
37
38
|
# File 'lib/isodoc/presentation_function/autonum.rb', line 34
def prefix_name_postprocess(node, elem)
node.at(ns("./sentinel"))&.remove
strip_duplicate_ids(node, node.at(ns("./#{elem}")),
node.at(ns("./fmt-#{elem}")))
end
|
#prefix_name_prep(node, elem) ⇒ Object
20
21
22
23
24
25
26
27
|
# File 'lib/isodoc/presentation_function/autonum.rb', line 20
def prefix_name_prep(node, elem)
lbls = prefix_name_labels(node)
name = node.at(ns("./#{elem}")) and name["id"] = lbls[:name]
ins = name || node.add_first_child("<sentinel/>").elements.first
node["unnumbered"] or
number = @xrefs.anchor(node["id"], :value, false)&.strip
[name, ins, lbls, number]
end
|
#prep_for_rendering(bib) ⇒ Object
68
69
70
71
72
|
# File 'lib/isodoc/presentation_function/refs.rb', line 68
def prep_for_rendering(bib)
bib["suppress_identifier"] == true and
bib.xpath(ns("./docidentifier")).each(&:remove)
bib["type"] ||= "standard"
end
|
80
81
82
83
|
# File 'lib/isodoc/presentation_function/metadata.rb', line 80
def presmeta(name, value)
"<presentation-metadata><name>#{name}</name><value>#{value}</value>" \
"</presentation-metadata>"
end
|
75
76
77
78
|
# File 'lib/isodoc/presentation_function/metadata.rb', line 75
def presmeta_insert_pt(xmldoc)
xmldoc.at(ns("//presentation-metadata")) ||
extension_insert_pt(xmldoc).children.last
end
|
#quote(docxml) ⇒ Object
227
228
229
|
# File 'lib/isodoc/presentation_function/block.rb', line 227
def quote(docxml)
docxml.xpath(ns("//quote")).each { |f| quote1(f) }
end
|
#quote1(elem) ⇒ Object
231
232
233
234
235
236
237
238
239
240
241
242
243
|
# File 'lib/isodoc/presentation_function/block.rb', line 231
def quote1(elem)
author = elem.at(ns("./author"))
source = elem.at(ns("./source"))
author.nil? && source.nil? and return
p = "— "
p += author.remove.to_xml if author
p += ", " if author && source
if source
source.name = "eref"
p += source.remove.to_xml
end
elem << "<attribution><p>#{l10n p}</p></attribution>"
end
|
#quotesource(docxml) ⇒ Object
56
57
58
59
60
61
|
# File 'lib/isodoc/presentation_function/inline.rb', line 56
def quotesource(docxml)
docxml.xpath(ns("//quote//source")).each { |f| xref1(f) }
docxml.xpath(ns("//quote//source//xref")).each do |f|
f.replace(f.children)
end
end
|
#rearrange_clauses(docxml) ⇒ Object
155
156
157
158
|
# File 'lib/isodoc/presentation_function/section.rb', line 155
def rearrange_clauses(docxml)
preface_rearrange(docxml) toc_title(docxml)
end
|
#recommendation(docxml) ⇒ Object
3
4
5
6
7
8
|
# File 'lib/isodoc/presentation_function/reqt.rb', line 3
def recommendation(docxml)
docxml.xpath(ns("//recommendation")).each do |f|
recommendation1(f, lower2cap(f["class"]) ||
lower2cap(@i18n.recommendation))
end
end
|
#recommendation1(elem, type) ⇒ Object
24
25
26
27
28
|
# File 'lib/isodoc/presentation_function/reqt.rb', line 24
def recommendation1(elem, type)
lbl = @reqt_models.model(elem["model"])
.recommendation_label(elem, type, xrefs)
prefix_name(elem, {}, l10n(lbl), "name")
end
|
#reference_name(ref) ⇒ Object
22
23
24
25
26
27
28
|
# File 'lib/isodoc/presentation_function/refs.rb', line 22
def reference_name(ref)
ids = bibitem_ref_code(ref)
identifiers = render_identifier(ids)
reference = docid_l10n(identifiers[:metanorma] || identifiers[:sdo] ||
identifiers[:ordinal] || identifiers[:doi])
@xrefs.get[ref["id"]] = { xref: reference }
end
|
#reference_names(docxml) ⇒ Object
16
17
18
19
20
|
# File 'lib/isodoc/presentation_function/refs.rb', line 16
def reference_names(docxml)
docxml.xpath(ns("//bibitem[not(ancestor::bibitem)]")).each do |ref|
reference_name(ref)
end
end
|
#references(docxml) ⇒ Object
5
6
7
8
9
10
11
12
13
14
|
# File 'lib/isodoc/presentation_function/refs.rb', line 5
def references(docxml)
bibliography_bibitem_number(docxml)
renderings = references_render(docxml)
docxml.xpath(ns("//references/bibitem")).each do |x|
bibitem(x, renderings)
reference_name(x)
end
hidden_items(docxml)
move_norm_ref_to_sections(docxml)
end
|
#references_render(docxml) ⇒ Object
57
58
59
60
61
62
63
64
65
66
|
# File 'lib/isodoc/presentation_function/refs.rb', line 57
def references_render(docxml)
d = docxml.clone
d.remove_namespaces!
refs = d.xpath("//references/bibitem").each_with_object([]) do |b, m|
prep_for_rendering(b)
m << to_xml(b)
end.join
@bibrender.render_all("<references>#{refs}</references>",
type: citestyle)
end
|
#reinsert_callout(xml) ⇒ Object
129
130
131
|
# File 'lib/isodoc/presentation_function/sourcecode.rb', line 129
def reinsert_callout(xml)
"<span class='c'>#{to_xml(xml)}</span>"
end
|
74
75
76
|
# File 'lib/isodoc/presentation_function/concepts.rb', line 74
def related(docxml)
docxml.xpath(ns("//fmt-related/semx")).each { |f| related1(f) }
end
|
78
79
80
81
82
83
84
85
86
87
88
|
# File 'lib/isodoc/presentation_function/concepts.rb', line 78
def related1(node)
p, ref, orig = related1_prep(node)
label = @i18n.relatedterms[orig["type"]].upcase
if p && ref
node.children =(l10n("<p><strong>#{label}:</strong> " \
"<em>#{to_xml(p)}</em> (#{Common::to_xml(ref)})</p>"))
else
node.children = (l10n("<p><strong>#{label}:</strong> " \
"<strong>**RELATED TERM NOT FOUND**</strong></p>"))
end
end
|
90
91
92
93
94
95
|
# File 'lib/isodoc/presentation_function/concepts.rb', line 90
def related1_prep(node)
p = node.at(ns("./fmt-preferred"))&.children
ref = node.at(ns("./xref | ./eref | ./termref"))
orig = semx_orig(node)
[p, ref, orig]
end
|
97
98
99
100
101
102
103
104
|
# File 'lib/isodoc/presentation_function/concepts.rb', line 97
def related_designation1(desgn)
out = desgn.parent.at(ns("./fmt-#{desgn.name}"))
d1 = semx_fmt_dup(desgn)
%w(preferred admitted deprecates).each do |w|
d = d1.at(ns("./#{w}[last()]")) and d.after("<fmt-#{w}/>")
end
out << d1
end
|
#render_identifier(ident) ⇒ Object
71
72
73
74
75
76
|
# File 'lib/isodoc/presentation_function/docid.rb', line 71
def render_identifier(ident)
{ metanorma: bracket_if_num(ident[0]),
sdo: unbracket(ident[1]),
doi: unbracket(ident[2]),
ordinal: bracket_if_num(ident[3]) }
end
|
#requirement(docxml) ⇒ Object
10
11
12
13
14
15
|
# File 'lib/isodoc/presentation_function/reqt.rb', line 10
def requirement(docxml)
docxml.xpath(ns("//requirement")).each do |f|
recommendation1(f, lower2cap(f["class"]) ||
lower2cap(@i18n.requirement))
end
end
|
#requirement_render(docxml) ⇒ Object
34
35
36
37
38
39
40
41
42
43
|
# File 'lib/isodoc/presentation_function/reqt.rb', line 34
def requirement_render(docxml)
requirement_render_preprocessing(docxml)
REQS.each do |x|
REQS.each do |y|
docxml.xpath(ns("//#{x}//#{y}")).each { |r| requirement_render1(r) }
end
end
docxml.xpath(ns("//requirement | //recommendation | //permission"))
.each { |r| requirement_render1(r) }
end
|
#requirement_render1(node) ⇒ Object
45
46
47
48
|
# File 'lib/isodoc/presentation_function/reqt.rb', line 45
def requirement_render1(node)
node.replace(@reqt_models.model(node["model"])
.requirement_render1(node))
end
|
#requirement_render_preprocessing(docxml) ⇒ Object
30
|
# File 'lib/isodoc/presentation_function/reqt.rb', line 30
def requirement_render_preprocessing(docxml); end
|
#resolve_comma_connectives(locs) ⇒ Object
77
78
79
80
81
82
83
84
85
|
# File 'lib/isodoc/presentation_function/erefs.rb', line 77
def resolve_comma_connectives(locs)
locs1 = []
add = ""
until locs.empty?
locs, locs1, add = resolve_comma_connectives1(locs, locs1, add)
end
locs1 << add unless add.empty?
locs1
end
|
#resolve_comma_connectives1(locs, locs1, add) ⇒ Object
87
88
89
90
91
92
93
94
95
96
97
|
# File 'lib/isodoc/presentation_function/erefs.rb', line 87
def resolve_comma_connectives1(locs, locs1, add)
if [", ", " ", ""].include?(locs[1])
add += locs[0..2].join
locs.shift(3)
else
locs1 << add unless add.empty?
add = ""
locs1 << locs.shift
end
[locs, locs1, add]
end
|
#resolve_eref_connectives(locs) ⇒ Object
67
68
69
70
71
72
73
74
75
|
# File 'lib/isodoc/presentation_function/erefs.rb', line 67
def resolve_eref_connectives(locs)
locs = resolve_comma_connectives(locs)
locs = resolve_to_connectives(locs)
locs.size < 3 and return locs
locs = locs.each_slice(2).with_object([]) do |a, m|
m << { conn: a[0], label: a[1] }
end
[", ", combine_conn(locs)]
end
|
#resolve_to_connectives(locs) ⇒ Object
99
100
101
102
103
104
105
106
107
108
109
110
|
# File 'lib/isodoc/presentation_function/erefs.rb', line 99
def resolve_to_connectives(locs)
locs1 = []
until locs.empty?
if locs[1] == "to"
locs1 << connectives_spans(@i18n.chain_to.sub("%1", locs[0])
.sub("%2", locs[2]))
locs.shift(3)
else locs1 << locs.shift
end
end
locs1
end
|
#rouge_css_location ⇒ Object
replace in local gem rather than specify overrides of default
21
22
23
24
|
# File 'lib/isodoc/presentation_function/sourcecode.rb', line 21
def rouge_css_location
File.read(File.join(File.dirname(__FILE__), "..", "base_style",
"rouge.css"))
end
|
#ruby(docxml) ⇒ Object
184
185
186
187
188
189
|
# File 'lib/isodoc/presentation_function/inline.rb', line 184
def ruby(docxml)
(docxml.xpath(ns("//ruby")) - docxml.xpath(ns("//ruby//ruby")))
.each do |r|
ruby1(r)
end
end
|
#ruby1(elem) ⇒ Object
191
192
193
194
195
196
197
198
|
# File 'lib/isodoc/presentation_function/inline.rb', line 191
def ruby1(elem)
v = elem.at(ns("./pronunciation | ./annotation")).remove
elem.xpath(ns("./ruby")).each do |r|
ruby1(r)
end
t = elem.children.to_xml
elem.replace("<ruby><rb>#{t}</rb><rt>#{v['value']}</rt></ruby>")
end
|
#save_attachment(attachment, dir) ⇒ Object
29
30
31
32
33
|
# File 'lib/isodoc/presentation_function/metadata.rb', line 29
def save_attachment(attachment, dir)
n = File.join(dir, File.basename(attachment["name"]))
c = attachment.text.sub(%r{^data:[^;]+;(?:charset=[^;]+;)?base64,}, "")
File.open(n, "wb") { |f| f.write(Base64.decode64(c)) }
end
|
#section(docxml) ⇒ Object
parse annex after term, references, to deal with single-term and single-ref annexes
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/isodoc/presentation_xml_convert.rb', line 54
def section(docxml)
references docxml
rearrange_clauses docxml middle_title docxml
missing_title docxml annex docxml
clause docxml term docxml
clausetitle docxml floattitle docxml index docxml toc docxml
display_order docxml
end
|
113
114
115
|
# File 'lib/isodoc/presentation_function/index.rb', line 113
def see_lbl
@lang == "en" ? @i18n.see : "<em>#{@i18n.see}</em>"
end
|
#semantic_xml_insert(xml) ⇒ Object
122
123
124
125
126
127
128
129
|
# File 'lib/isodoc/presentation_xml_convert.rb', line 122
def semantic_xml_insert(xml)
@semantic_xml_insert or return
embed = embedable_semantic_xml(xml)
ins = metanorma_extension_insert_pt(xml)
ins = ins.at(ns("./metanorma")) || ins.add_child("<metanorma/>").first
ins = ins.add_child("<source/>").first
ins << embed
end
|
#semx(node, label, element = "autonum") ⇒ Object
75
76
77
78
79
80
|
# File 'lib/isodoc/presentation_function/autonum.rb', line 75
def semx(node, label, element = "autonum")
id = node["id"] || node[:id]
/<semx element='[^']+' source='#{id}'/.match?(label) and return label
l = stripsemx(label)
%(<semx element='#{element}' source='#{id}'>#{l}</semx>)
end
|
#semx_fmt_dup(elem) ⇒ Object
47
48
49
50
51
52
53
54
|
# File 'lib/isodoc/presentation_function/autonum.rb', line 47
def semx_fmt_dup(elem)
elem["id"] ||= "_#{UUIDTools::UUID.random_create}"
new = Nokogiri::XML(<<~XML).root
<semx xmlns='#{elem.namespace.href}' element='#{elem.name}' source='#{elem['original-id'] || elem['id']}'>#{to_xml(elem.children)}</semx>
XML
strip_duplicate_ids(nil, elem, new)
new
end
|
#semx_orig(node, orig = nil) ⇒ Object
87
88
89
90
|
# File 'lib/isodoc/presentation_function/autonum.rb', line 87
def semx_orig(node, orig = nil)
orig ||= node.parent.parent
orig.at(".//*[@id = '#{node['source']}']")
end
|
#single_term_clause_retitle(elem) ⇒ Object
67
68
69
70
71
72
73
|
# File 'lib/isodoc/presentation_function/section.rb', line 67
def single_term_clause_retitle(elem)
t = elem.at(ns("./terms | ./definitions | ./references"))
title1 = elem.at(ns("./title"))
title2 = t.at(ns("./title"))&.remove
!title1 && title2 and
elem.first_element_child.previous = title2
end
|
#single_term_clause_unnest(elem) ⇒ Object
75
76
77
78
79
80
81
82
|
# File 'lib/isodoc/presentation_function/section.rb', line 75
def single_term_clause_unnest(elem)
t = elem.at(ns("./terms | ./definitions | ./references"))
t.xpath(ns(".//clause | .//terms | .//definitions | .//references"))
.each do |c|
tit = c.at(ns("./fmt-title")) or next
tit["depth"] = tit["depth"].to_i - 1 unless tit["depth"] == "1"
end
end
|
#singledef(_elem, defn, fmt_defn) ⇒ Object
68
69
70
|
# File 'lib/isodoc/presentation_function/terms.rb', line 68
def singledef(_elem, defn, fmt_defn)
fmt_defn << semx_fmt_dup(defn.first)
end
|
#skip_display_order?(node) ⇒ Boolean
84
85
86
|
# File 'lib/isodoc/presentation_function/section.rb', line 84
def skip_display_order?(node)
node.name == "floating-title"
end
|
#sort_indexterms(terms, see, also) ⇒ Object
121
122
123
124
125
126
127
128
129
|
# File 'lib/isodoc/presentation_function/index.rb', line 121
def sort_indexterms(terms, see, also)
index = (terms)
index = (index, see, :see)
index = (index, also, :also)
index.keys.sort.each_with_object({}) do |k, v|
v[sortable(k)[0].upcase.transliterate] ||= {}
v[sortable(k)[0].upcase.transliterate][k] = index[k]
end
end
|
#sortable(str) ⇒ Object
48
49
50
51
|
# File 'lib/isodoc/presentation_function/index.rb', line 48
def sortable(str)
str or return " "
HTMLEntities.new.decode(Nokogiri::XML.fragment(str).text)
end
|
#source(docxml) ⇒ Object
200
201
202
203
204
205
206
|
# File 'lib/isodoc/presentation_function/block.rb', line 200
def source(docxml)
docxml.xpath(ns("//source/modification")).each do |f|
source_modification(f)
end
docxml.xpath(ns("//table/source")).each { |f| tablesource(f) }
docxml.xpath(ns("//figure/source")).each { |f| figuresource(f) }
end
|
#source1(elem) ⇒ Object
216
217
218
219
220
221
|
# File 'lib/isodoc/presentation_function/block.rb', line 216
def source1(elem)
while elem&.next_element&.name == "source"
elem << "; #{to_xml(elem.next_element.remove.children)}"
end
elem.children = l10n("[#{@i18n.source}: #{to_xml(elem.children).strip}]")
end
|
#source_highlight(elem) ⇒ Object
70
71
72
73
74
75
76
77
78
79
80
81
|
# File 'lib/isodoc/presentation_function/sourcecode.rb', line 70
def source_highlight(elem)
@highlighter or return
markup = source_remove_markup(elem)
p = source_lex(elem)
elem.children = if elem["linenums"] == "true"
r = sourcecode_table_to_elem(elem, p)
source_restore_markup_table(r, markup)
else
r = @highlighter[:formatter].format(p)
source_restore_markup(Nokogiri::XML.fragment(r), markup)
end
end
|
#source_label(elem) ⇒ Object
152
153
154
155
156
157
158
159
160
|
# File 'lib/isodoc/presentation_function/sourcecode.rb', line 152
def source_label(elem)
if !labelled_ancestor(elem) && lbl = @xrefs.anchor(elem["id"], :label, false)
s = labelled_autonum(lower2cap(@i18n.figure), elem["id"], lbl)&.strip
end
prefix_name(elem, { caption: block_delim }, s, "name")
end
|
#source_lex(elem) ⇒ Object
143
144
145
146
147
148
149
150
|
# File 'lib/isodoc/presentation_function/sourcecode.rb', line 143
def source_lex(elem)
lexer = Rouge::Lexer.find(elem["lang"] || "plaintext") ||
Rouge::Lexer.find("plaintext")
l = Rouge::Lexers::Escape.new(start: "{^^{", end: "}^^}", lang: lexer)
source = to_xml(elem.children).gsub(/</, "{^^{<").gsub(/>/, ">}^^}")
l.lang.reset!
l.lex(@c.decode(source))
end
|
#source_modification(mod) ⇒ Object
223
224
225
|
# File 'lib/isodoc/presentation_function/block.rb', line 223
def source_modification(mod)
termsource_modification(mod.parent)
end
|
#source_remove_annotations(ret, elem) ⇒ Object
90
91
92
93
94
95
96
|
# File 'lib/isodoc/presentation_function/sourcecode.rb', line 90
def source_remove_annotations(ret, elem)
ret[:ann] = elem.xpath(ns("./annotation")).each(&:remove)
ret[:call] = elem.xpath(ns("./callout")).each_with_object([]) do |c, m|
m << { xml: c.remove, line: c.line - elem.line }
end
ret
end
|
#source_remove_markup(elem) ⇒ Object
83
84
85
86
87
88
|
# File 'lib/isodoc/presentation_function/sourcecode.rb', line 83
def source_remove_markup(elem)
ret = {}
name = elem.at(ns("./name")) and ret[:name] = name.remove.to_xml
source_remove_annotations(ret, elem)
ret
end
|
#source_restore_callouts(code, callouts) ⇒ Object
109
110
111
112
113
114
115
116
117
|
# File 'lib/isodoc/presentation_function/sourcecode.rb', line 109
def source_restore_callouts(code, callouts)
text = to_xml(code)
text.split(/[\n\r]/).each_with_index do |c, i|
while !callouts.empty? && callouts[0][:line] == i
c.sub!(/\s+$/, " #{reinsert_callout(callouts[0][:xml])} ")
callouts.shift
end
end.join("\n")
end
|
#source_restore_callouts_table(table, callouts) ⇒ Object
119
120
121
122
123
124
125
126
127
|
# File 'lib/isodoc/presentation_function/sourcecode.rb', line 119
def source_restore_callouts_table(table, callouts)
table.xpath(".//td[@class = 'rouge-code']/sourcecode")
.each_with_index do |c, i|
while !callouts.empty? && callouts[0][:line] == i
c << " #{reinsert_callout(callouts[0][:xml])} "
callouts.shift
end
end
end
|
#source_restore_markup(wrapper, markup) ⇒ Object
98
99
100
101
|
# File 'lib/isodoc/presentation_function/sourcecode.rb', line 98
def source_restore_markup(wrapper, markup)
ret = source_restore_callouts(wrapper, markup[:call])
"#{markup[:name]}#{ret}#{markup[:ann]}"
end
|
#source_restore_markup_table(wrapper, markup) ⇒ Object
103
104
105
106
107
|
# File 'lib/isodoc/presentation_function/sourcecode.rb', line 103
def source_restore_markup_table(wrapper, markup)
source_restore_callouts_table(wrapper, markup[:call])
ret = to_xml(wrapper)
"#{markup[:name]}#{ret}#{markup[:ann]}"
end
|
#sourcecode(docxml) ⇒ Object
41
42
43
44
45
46
47
48
|
# File 'lib/isodoc/presentation_function/sourcecode.rb', line 41
def sourcecode(docxml)
sourcehighlighter_css(docxml)
@highlighter = sourcehighlighter
@callouts = {}
docxml.xpath(ns("//sourcecode")).each do |f|
sourcecode1(f)
end
end
|
#sourcecode1(elem) ⇒ Object
50
51
52
53
54
55
|
# File 'lib/isodoc/presentation_function/sourcecode.rb', line 50
def sourcecode1(elem)
source_highlight(elem)
source_label(elem)
callouts(elem)
annotations(elem)
end
|
#sourcecode_table_to_elem(elem, tokens) ⇒ Object
133
134
135
136
137
138
139
140
141
|
# File 'lib/isodoc/presentation_function/sourcecode.rb', line 133
def sourcecode_table_to_elem(elem, tokens)
r = Nokogiri::XML(@highlighter[:formatter_line].format(tokens)).root
r.xpath(".//td[@class = 'rouge-code']/pre").each do |pre|
%w(style).each { |n| elem[n] and pre[n] = elem[n] }
pre.name = "sourcecode"
pre.children = to_xml(pre.children).sub(/\s+$/, "")
end
r
end
|
#sourcehighlighter ⇒ Object
26
27
28
29
30
31
32
33
|
# File 'lib/isodoc/presentation_function/sourcecode.rb', line 26
def sourcehighlighter
@sourcehighlighter or return
Rouge::Formatter.enable_escape!
f = Rouge::Formatters::HTML.new
opts = { gutter_class: "rouge-gutter", code_class: "rouge-code" }
f1 = Rouge::Formatters::HTMLLineTable.new(f, opts)
{ formatter: f, formatter_line: f1 }
end
|
#sourcehighlighter_css(docxml) ⇒ Object
3
4
5
6
7
8
9
|
# File 'lib/isodoc/presentation_function/sourcecode.rb', line 3
def sourcehighlighter_css(docxml)
ret = custom_css(docxml)
ret.empty? and return
ins = extension_insert(docxml)
ins << "<source-highlighter-css>#{ret}" \
"</source-highlighter-css>"
end
|
#standard?(bib) ⇒ Boolean
227
228
229
230
231
232
233
234
235
|
# File 'lib/isodoc/presentation_function/refs.rb', line 227
def standard?(bib)
ret = false
bib.xpath(ns("./docidentifier")).each do |id|
id["type"].nil? ||
id.at(".//self::*[#{SKIP_DOCID} or @type = 'metanorma']") and next
ret = true
end
ret
end
|
#strip_duplicate_ids(_node, sem_title, pres_title) ⇒ Object
remove ids duplicated between sem_title and pres_title index terms are assumed transferred to pres_title from sem_title
64
65
66
67
68
69
70
71
72
73
|
# File 'lib/isodoc/presentation_function/autonum.rb', line 64
def strip_duplicate_ids(_node, sem_title, pres_title)
sem_title && pres_title or return
ids = gather_all_ids(pres_title)
sem_title.xpath(".//*[@id]").each do |x|
ids.include?(x["id"]) or next
x["original-id"] = x["id"]
x.delete("id")
end
sem_title.xpath(ns(".//index")).each(&:remove)
end
|
#strip_index(docxml) ⇒ Object
11
12
13
|
# File 'lib/isodoc/presentation_function/index.rb', line 11
def strip_index(docxml)
docxml.xpath(ns("//index | //index-xref | //indexsect")).each(&:remove)
end
|
46
47
48
49
|
# File 'lib/isodoc/presentation_function/image.rb', line 46
def subfigure_delim
""
end
|
#suffix_url(url) ⇒ Object
221
222
223
224
225
|
# File 'lib/isodoc/presentation_function/erefs.rb', line 221
def suffix_url(url)
url.nil? || %r{^https?://|^#}.match?(url) and return url
File.extname(url).empty? or return url
url.sub(/#{File.extname(url)}$/, ".html")
end
|
#svg_emf_double(img) ⇒ Object
120
121
122
123
124
125
126
127
128
129
130
|
# File 'lib/isodoc/presentation_function/image.rb', line 120
def svg_emf_double(img)
if emf?(img["mimetype"])
img = emf_encode(img)
img.add_first_child emf_to_svg(img)
elsif img["mimetype"] == "image/svg+xml"
src = svg_to_emf(img) or return
img.add_child("<emf/>")
img.elements.last["src"] = src
end
end
|
35
36
37
38
39
40
41
42
43
44
|
# File 'lib/isodoc/presentation_function/image.rb', line 35
def (elem)
return unless %r{^data:image/svg\+xml;}.match?(elem["src"])
return if elem.at("./m:svg", SVG)
svg = Base64.strict_decode64(elem["src"]
.sub(%r{^data:image/svg\+xml;(charset=[^;]+;)?base64,}, ""))
x = Nokogiri::XML.fragment(svg.sub(/<\?xml[^<>]*>/, ""), &:huge)
elem["src"] = ""
elem.children = x
end
|
#svg_impose_height_attr(node) ⇒ Object
188
189
190
191
192
193
194
|
# File 'lib/isodoc/presentation_function/image.rb', line 188
def svg_impose_height_attr(node)
e = node.elements&.first or return
(e.name == "svg" &&
(!node["height"] || node["height"] == "auto")) or return
node["height"] = e["height"]
node["width"] = e["width"]
end
|
#svg_prep(img) ⇒ Object
139
140
141
142
143
|
# File 'lib/isodoc/presentation_function/image.rb', line 139
def svg_prep(img)
img["mimetype"] = "image/svg+xml"
%r{^data:}.match?(img["src"]) or
img["src"] = Vectory::Emf.from_path(img["src"]).to_uri.content
end
|
#svg_to_emf(node) ⇒ Object
171
172
173
174
175
176
177
178
179
|
# File 'lib/isodoc/presentation_function/image.rb', line 171
def svg_to_emf(node)
@output_formats[:doc] or return
svg_impose_height_attr(node)
node.elements&.first&.name == "svg" || %r{^data:}.match?(node["src"]) and
return svg_to_emf_from_node(node)
target_path = imgfile_suffix(node["src"], "emf")
File.exist?(target_path) and return target_path
svg_to_emf_from_node(node, target_path)
end
|
#svg_to_emf_from_node(node, target_path = nil) ⇒ Object
181
182
183
184
185
186
|
# File 'lib/isodoc/presentation_function/image.rb', line 181
def svg_to_emf_from_node(node, target_path = nil)
emf = Vectory::Svg.from_node(node).to_emf
return emf.write(target_path).to_uri.content if target_path
emf.to_uri.content
end
|
#svg_wrap(elem) ⇒ Object
15
16
17
18
19
20
|
# File 'lib/isodoc/presentation_function/image.rb', line 15
def svg_wrap(elem)
return if elem.parent.name == "image"
elem.wrap("<image src='' mimetype='image/svg+xml' height='auto' " \
"width='auto'></image>")
end
|
22
23
24
25
26
|
# File 'lib/isodoc/presentation_function/image.rb', line 22
def (elem)
if f = elem.at(ns("./figure")) then elem.replace(f)
else elem.remove
end
end
|
#table(docxml) ⇒ Object
100
101
102
103
|
# File 'lib/isodoc/presentation_function/block.rb', line 100
def table(docxml)
table_long_strings_cleanup(docxml)
docxml.xpath(ns("//table")).each { |f| table1(f) }
end
|
#table1(elem) ⇒ Object
105
106
107
108
109
110
111
112
113
114
|
# File 'lib/isodoc/presentation_function/block.rb', line 105
def table1(elem)
table_fn(elem)
labelled_ancestor(elem) and return
elem["unnumbered"] && !elem.at(ns("./name")) and return
n = @xrefs.anchor(elem["id"], :label, false)
lbl = labelled_autonum(lower2cap(@i18n.table), elem["id"], n)
prefix_name(elem, { caption: table_delim }, l10n(lbl), "name")
end
|
#table_delim ⇒ Object
116
117
118
|
# File 'lib/isodoc/presentation_function/block.rb', line 116
def table_delim
block_delim
end
|
#table_fn(elem) ⇒ Object
131
132
133
134
135
136
|
# File 'lib/isodoc/presentation_function/block.rb', line 131
def table_fn(elem)
(elem.xpath(ns(".//fn")) - elem.xpath(ns("./name//fn")))
.each_with_index do |f, i|
table_fn1(elem, f, i)
end
end
|
#table_fn1(table, fnote, idx) ⇒ Object
138
|
# File 'lib/isodoc/presentation_function/block.rb', line 138
def table_fn1(table, fnote, idx); end
|
#table_long_strings_cleanup(docxml) ⇒ Object
120
121
122
123
124
125
126
127
128
129
|
# File 'lib/isodoc/presentation_function/block.rb', line 120
def table_long_strings_cleanup(docxml)
@break_up_urls_in_tables or return
docxml.xpath(ns("//td | //th")).each do |d|
d.traverse do |n|
n.text? or next
ret = Metanorma::Utils::break_up_long_str(n.text)
n.content = ret
end
end
end
|
#tablesource(elem) ⇒ Object
208
209
210
|
# File 'lib/isodoc/presentation_function/block.rb', line 208
def tablesource(elem)
source1(elem)
end
|
#tag_translate(tag, lang, value) ⇒ Object
64
65
66
67
68
69
|
# File 'lib/isodoc/presentation_function/bibdata.rb', line 64
def tag_translate(tag, lang, value)
tag["language"] = ""
tag.next = tag.dup
tag.next["language"] = lang
tag.next.children = value
end
|
#term(docxml) ⇒ Object
160
161
162
|
# File 'lib/isodoc/presentation_function/terms.rb', line 160
def term(docxml)
docxml.xpath(ns("//term")).each { |f| term1(f) }
end
|
#term1(elem) ⇒ Object
164
165
166
167
|
# File 'lib/isodoc/presentation_function/terms.rb', line 164
def term1(elem)
lbl = @xrefs.anchor(elem["id"], :label) or return
prefix_name(elem, {}, "#{lbl}#{clausedelim}", "name")
end
|
#term_hash_init(hash, term, term2, term3, label) ⇒ Object
166
167
168
169
170
171
|
# File 'lib/isodoc/presentation_function/index.rb', line 166
def term_hash_init(hash, term, term2, term3, label)
hash[term] ||= {}
hash[term][term2] ||= {}
hash[term][term2][term3] ||= {}
hash[term][term2][term3][label] ||= []
end
|
#termcleanup(docxml) ⇒ Object
15
16
17
18
19
20
21
22
23
24
|
# File 'lib/isodoc/presentation_function/terms.rb', line 15
def termcleanup(docxml)
docxml.xpath(ns("//term")).each do |t|
%w(preferred admitted deprecates related definition termsource)
.each do |w|
t.xpath(ns("./#{w}//fmt-name | ./#{w}//fmt-xref-label")).each(&:remove)
f = t.at(ns(".//fmt-#{w}"))
f&.children&.empty? and f.remove
end
end
end
|
#termcontainers(docxml) ⇒ Object
3
4
5
6
7
8
9
10
11
12
13
|
# File 'lib/isodoc/presentation_function/terms.rb', line 3
def termcontainers(docxml)
docxml.xpath(ns("//term")).each do |t|
%w(preferred admitted deprecates related definition termsource)
.each do |w|
d = t.at(ns("./#{w}[last()]")) and d.after("<fmt-#{w}/>")
end
end
docxml.xpath(ns("//termsource")).each do |s|
s["id"] ||= "_#{UUIDTools::UUID.random_create}"
end
end
|
#termdefinition(docxml) ⇒ Object
47
48
49
|
# File 'lib/isodoc/presentation_function/terms.rb', line 47
def termdefinition(docxml)
docxml.xpath(ns("//term[definition]")).each { |f| termdefinition1(f) }
end
|
#termdefinition1(elem) ⇒ Object
51
52
53
54
55
56
57
58
59
|
# File 'lib/isodoc/presentation_function/terms.rb', line 51
def termdefinition1(elem)
d = elem.xpath(ns("./definition"))
d1 = elem.at(ns("./fmt-definition"))
if d.size > 1 then multidef(elem, d, d1)
else singledef(elem, d, d1)
end
unwrap_definition(elem, d1)
termdomain(elem, d1)
end
|
#termdomain(elem, fmt_defn) ⇒ Object
81
82
83
84
85
86
|
# File 'lib/isodoc/presentation_function/terms.rb', line 81
def termdomain(elem, fmt_defn)
d = elem.at(ns(".//domain")) or return
p = fmt_defn.at(ns(".//p")) or return
d1 = semx_fmt_dup(d)
p.add_first_child "<#{to_xml(d1)}> "
end
|
#termexample(docxml) ⇒ Object
26
27
28
|
# File 'lib/isodoc/presentation_function/terms.rb', line 26
def termexample(docxml)
docxml.xpath(ns("//termexample")).each { |f| example1(f) }
end
|
#termnote(docxml) ⇒ Object
30
31
32
|
# File 'lib/isodoc/presentation_function/terms.rb', line 30
def termnote(docxml)
docxml.xpath(ns("//termnote")).each { |f| termnote1(f) }
end
|
#termnote1(elem) ⇒ Object
38
39
40
41
|
# File 'lib/isodoc/presentation_function/terms.rb', line 38
def termnote1(elem)
lbl = termnote_label(elem)
prefix_name(elem, { label: termnote_delim(elem) }, lower2cap(lbl), "name")
end
|
#termnote_delim(_elem) ⇒ Object
34
35
36
|
# File 'lib/isodoc/presentation_function/terms.rb', line 34
def termnote_delim(_elem)
l10n(": ")
end
|
#termnote_label(elem) ⇒ Object
43
44
45
|
# File 'lib/isodoc/presentation_function/terms.rb', line 43
def termnote_label(elem)
@xrefs.anchor(elem["id"], :label) || "???"
end
|
#terms(docxml) ⇒ Object
110
111
112
113
114
115
116
117
118
119
120
|
# File 'lib/isodoc/presentation_xml_convert.rb', line 110
def terms(docxml)
termcontainers docxml
termexample docxml
termnote docxml
termdefinition docxml
designation docxml
termsource docxml
concept docxml
related docxml
termcleanup docxml
end
|
#termsource(docxml) ⇒ Object
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
# File 'lib/isodoc/presentation_function/terms.rb', line 88
def termsource(docxml)
copy_baselevel_termsource(docxml)
docxml.xpath(ns("//fmt-termsource/termsource | //fmt-definition//termsource | //fmt-preferred//termsource | //fmt-admitted//termsource | //fmt-deprecates//termsource"))
.each do |f|
termsource_modification(f)
end
docxml.xpath(ns("//fmt-preferred//fmt-termsource | //fmt-admitted//fmt-termsource | //fmt-deprecates//fmt-termsource"))
.each do |f|
termsource_designation(f)
end
docxml.xpath(ns("//fmt-termsource/termsource | //fmt-definition//termsource | //fmt-preferred//termsource | //fmt-admitted//termsource | //fmt-deprecates//termsource"))
.each do |f|
f.parent and termsource1(f)
end
end
|
#termsource1(elem) ⇒ Object
122
123
124
125
126
127
128
129
|
# File 'lib/isodoc/presentation_function/terms.rb', line 122
def termsource1(elem)
ret = [semx_fmt_dup(elem)]
while elem&.next_element&.name == "termsource"
ret << semx_fmt_dup(elem.next_element.remove)
end
s = ret.map { |x| to_xml(x) }.map(&:strip).join("; ")
termsource_label(elem, s)
end
|
#termsource_add_modification_text(mod) ⇒ Object
142
143
144
145
146
147
148
149
150
151
|
# File 'lib/isodoc/presentation_function/terms.rb', line 142
def termsource_add_modification_text(mod)
mod or return
if mod.text.strip.empty?
mod.remove
return
end
mod.previous = " — "
mod.elements.size == 1 and mod.children = to_xml(mod.elements[0].children)
mod.replace(semx_fmt_dup(mod))
end
|
#termsource_designation(fmtsource) ⇒ Object
105
106
107
108
109
110
|
# File 'lib/isodoc/presentation_function/terms.rb', line 105
def termsource_designation(fmtsource)
p = fmtsource.previous_element
p&.name == "p" or return
p << " "
p << fmtsource.children
end
|
#termsource_label(elem, sources) ⇒ Object
131
132
133
|
# File 'lib/isodoc/presentation_function/terms.rb', line 131
def termsource_label(elem, sources)
elem.replace(l10n("[#{@i18n.source}: #{sources}]"))
end
|
#termsource_modification(elem) ⇒ Object
135
136
137
138
139
140
|
# File 'lib/isodoc/presentation_function/terms.rb', line 135
def termsource_modification(elem)
elem.xpath(".//text()[normalize-space() = '']").each(&:remove)
origin = elem.at(ns("./origin"))
s = termsource_status(elem["status"]) and origin.next = l10n(", #{s}")
termsource_add_modification_text(elem.at(ns("./modification")))
end
|
#termsource_status(status) ⇒ Object
153
154
155
156
157
158
|
# File 'lib/isodoc/presentation_function/terms.rb', line 153
def termsource_status(status)
case status
when "modified" then @i18n.modified
when "adapted" then @i18n.adapted
end
end
|
#text_transform(docxml) ⇒ Object
115
116
117
118
119
|
# File 'lib/isodoc/presentation_function/inline.rb', line 115
def text_transform(docxml)
docxml.xpath(ns("//span[contains(@style, 'text-transform')]")).each do |s|
text_transform1(s)
end
end
|
#text_transform1(span) ⇒ Object
121
122
123
124
125
126
127
128
|
# File 'lib/isodoc/presentation_function/inline.rb', line 121
def text_transform1(span)
m = span["style"].split(/;\s*/)
i = m.index { |x| /^text-transform/.match?(x) }
value = m[i].sub(/^text-transform:/, "")
change_case(span, value, true)
m[i] = "text-transform:none"
span["style"] = m.join(";")
end
|
#to_xml_file(result, filename) ⇒ Object
173
174
175
|
# File 'lib/isodoc/presentation_xml_convert.rb', line 173
def to_xml_file(result, filename)
File.open(filename, "w:UTF-8") { |f| f.write(result) }
end
|
#toc(docxml) ⇒ Object
160
161
162
|
# File 'lib/isodoc/presentation_function/section.rb', line 160
def toc(docxml)
toc_refs(docxml)
end
|
53
54
55
56
57
58
59
60
61
62
63
|
# File 'lib/isodoc/presentation_function/metadata.rb', line 53
def toc_metadata(docxml)
@tocfigures || @toctables || @tocrecommendations or return
ins = extension_insert(docxml)
@tocfigures and
ins << "<toc type='figure'><title>#{@i18n.toc_figures}</title></toc>"
@toctables and
ins << "<toc type='table'><title>#{@i18n.toc_tables}</title></toc>"
@tocfigures and
ins << "<toc type='recommendation'><title>#{@i18n.toc_recommendations}" \
"</title></toc>"
end
|
#toc_refs(docxml) ⇒ Object
164
165
166
167
168
169
|
# File 'lib/isodoc/presentation_function/section.rb', line 164
def toc_refs(docxml)
docxml.xpath(ns("//toc//xref[text()]")).each do |x|
lbl = @xrefs.anchor(x["target"], :label) or next
x.add_first_child "#{lbl}<span class='fmt-caption-delim'><tab/></span>"
end
end
|
#toc_title(docxml) ⇒ Object
89
90
91
92
93
94
95
96
|
# File 'lib/isodoc/presentation_function/title.rb', line 89
def toc_title(docxml)
docxml.at(ns("//preface/clause[@type = 'toc']")) and return
ins = toc_title_insert_pt(docxml) or return
id = UUIDTools::UUID.random_create.to_s
ins.previous = <<~CLAUSE
<clause type = 'toc' id='_#{id}'><fmt-title depth='1'>#{@i18n.table_of_contents}</fmt-title></clause>
CLAUSE
end
|
#toc_title_insert_pt(docxml) ⇒ Object
98
99
100
101
102
103
104
105
|
# File 'lib/isodoc/presentation_function/title.rb', line 98
def toc_title_insert_pt(docxml)
ins = docxml.at(ns("//preface")) ||
docxml.at(ns("//sections | //annex | //bibliography"))
&.before("<preface> </preface>")
&.previous_element or return nil
ins.children.empty? and ins << " "
ins.children.first
end
|
#transfer_id(old, new) ⇒ Object
40
41
42
43
44
45
|
# File 'lib/isodoc/presentation_function/autonum.rb', line 40
def transfer_id(old, new)
old["id"] or return
new["id"] = old["id"]
old["original-id"] = old["id"]
old.delete("id")
end
|
#trim_hash(hash) ⇒ Object
125
126
127
128
129
130
131
132
|
# File 'lib/isodoc/presentation_function/metadata.rb', line 125
def trim_hash(hash)
loop do
h_new = trim_hash1(hash)
break hash if hash == h_new
hash = h_new
end
end
|
#trim_hash1(hash) ⇒ Object
134
135
136
137
138
139
140
141
142
143
144
145
|
# File 'lib/isodoc/presentation_function/metadata.rb', line 134
def trim_hash1(hash)
hash.is_a?(Hash) or return hash
hash.each_with_object({}) do |(k, v), g|
blank?(v) and next
g[k] = case v
when Hash then trim_hash1(hash[k])
when Array
hash[k].map { |a| trim_hash1(a) }.reject { |a| blank?(a) }
else v
end
end
end
|
132
133
134
|
# File 'lib/isodoc/presentation_function/math.rb', line 132
def
{}
end
|
#ul(docxml) ⇒ Object
162
163
164
|
# File 'lib/isodoc/presentation_function/block.rb', line 162
def ul(docxml)
docxml.xpath(ns("//ul")).each { |f| ul1(f) }
end
|
#ul1(elem) ⇒ Object
166
167
168
169
|
# File 'lib/isodoc/presentation_function/block.rb', line 166
def ul1(elem)
elem.at(ns("./name")) and
prefix_name(elem, {}, "", "name") end
|
#unbracket(ident) ⇒ Object
64
65
66
67
68
69
|
# File 'lib/isodoc/presentation_function/docid.rb', line 64
def unbracket(ident)
if ident.respond_to?(:size)
ident.map { |x| unbracket1(x) }.join(" / ")
else unbracket1(ident)
end
end
|
#unbracket1(ident) ⇒ Object
58
59
60
61
62
|
# File 'lib/isodoc/presentation_function/docid.rb', line 58
def unbracket1(ident)
ident.nil? and return nil
ident.is_a?(String) or ident = to_xml(ident.children)
ident.sub(/^\[/, "").sub(/\]$/, "")
end
|
#unnest_linkend(node) ⇒ Object
so not <origin bibitemid=“ISO7301” citeas=“ISO 7301”> <locality type=“section”><reference>3.1</reference></locality></origin>
27
28
29
30
31
32
|
# File 'lib/isodoc/presentation_function/inline.rb', line 27
def unnest_linkend(node)
node.at(ns("./xref[@nested]")) or return
node.xpath(ns("./xref[@nested]")).each { |x| x.delete("nested") }
node.xpath(ns("./location | ./locationStack")).each(&:remove)
node.replace(node.children)
end
|
#unnumbered_clause?(elem) ⇒ Boolean
17
18
19
20
21
|
# File 'lib/isodoc/presentation_function/section.rb', line 17
def unnumbered_clause?(elem)
!elem.ancestors("boilerplate, metanorma-extension").empty? ||
@suppressheadingnumbers || elem["unnumbered"] ||
elem.at("./ancestor::*[@unnumbered = 'true']")
end
|
#unwrap_definition(_elem, fmt_defn) ⇒ Object
72
73
74
75
76
77
78
79
|
# File 'lib/isodoc/presentation_function/terms.rb', line 72
def unwrap_definition(_elem, fmt_defn)
fmt_defn.xpath(ns(".//semx[@element = 'definition']")).each do |d|
%w(verbal-definition non-verbal-representation).each do |e|
v = d&.at(ns("./#{e}"))
v&.replace(v.children)
end
end
end
|
#variant(xml) ⇒ Object
there should be no //variant in bibdata now
70
71
72
73
74
75
76
77
78
79
|
# File 'lib/isodoc/presentation_function/inline.rb', line 70
def variant(xml)
b = xml.xpath(ns("//bibdata//variant"))
(xml.xpath(ns("//variant")) - b).each { |f| variant1(f) }
(xml.xpath(ns("//variant[@remove = 'true']")) - b).each(&:remove)
(xml.xpath(ns("//variant")) - b).each do |v|
v.next&.name == "variant" or next
v.next = "/"
end
(xml.xpath(ns("//variant")) - b).each { |f| f.replace(f.children) }
end
|
#variant1(node) ⇒ Object
81
82
83
84
85
86
87
|
# File 'lib/isodoc/presentation_function/inline.rb', line 81
def variant1(node)
if !((!node["lang"] || node["lang"] == @lang) &&
(!node["script"] || node["script"] == @script)) &&
found_matching_variant_sibling(node)
node["remove"] = "true"
end
end
|
#xml_encode_attr(str) ⇒ Object
140
141
142
143
144
145
|
# File 'lib/isodoc/presentation_function/index.rb', line 140
def xml_encode_attr(str)
HTMLEntities.new.encode(str, :basic, :hexadecimal)
.gsub(/&#x([^;]+);/) do |_x|
"&#x#{$1.upcase};"
end
end
|
#xref(docxml) ⇒ Object
41
42
43
44
|
# File 'lib/isodoc/presentation_function/inline.rb', line 41
def xref(docxml)
docxml.xpath(ns("//xref")).each { |f| xref1(f) }
docxml.xpath(ns("//xref//xref")).each { |f| f.replace(f.children) }
end
|
#xref1(node) ⇒ Object
63
64
65
66
67
|
# File 'lib/isodoc/presentation_function/inline.rb', line 63
def xref1(node)
node.ancestors("related, definition, termsource").empty? or return
get_linkend(node)
end
|
#xref_empty?(node) ⇒ Boolean
34
35
36
37
|
# File 'lib/isodoc/presentation_function/inline.rb', line 34
def xref_empty?(node)
c1 = non_locality_elems(node).select { |c| !c.text? || /\S/.match(c) }
c1.empty?
end
|