Class: IsoDoc::Convert
- Defined in:
- lib/isodoc/css.rb,
lib/isodoc/init.rb,
lib/isodoc/convert.rb
Direct Known Subclasses
HeadlessHtmlConvert, HtmlConvert, PdfConvert, PresentationXMLConvert, WordConvert, XslfoPdfConvert
Constant Summary collapse
- AGENCIES =
%w(ISO IEC ITU IETF NIST OGC IEEE BIPM BSI BS JIS IANA UN W3C IHO CSA IEV) .freeze
Constants included from Function::Utils
Function::Utils::CLAUSE_ANCESTOR, Function::Utils::DOCTYPE_HDR, Function::Utils::HUGESTRICT, Function::Utils::LABELLED_ANCESTOR_ELEMENTS, Function::Utils::NOTE_CONTAINER_ANCESTOR
Constants included from Function::ToWordHtml
Function::ToWordHtml::TOP_ELEMENTS
Constants included from Function::Table
Constants included from Function::Section
Function::Section::TERM_CLAUSE
Constants included from Function::References
Function::References::SKIP_DOCID
Constants included from Function::Lists
Constants included from Function::Inline
Constants included from Function::Cleanup
Function::Cleanup::FIGURE_WITH_FOOTNOTES, Function::Cleanup::TABLENOTE_CSS
Constants included from Function::Blocks
Function::Blocks::EXAMPLE_TBL_ATTR, Function::Blocks::EXAMPLE_TD_ATTR
Instance Attribute Summary collapse
-
#bibrender ⇒ Object
Returns the value of attribute bibrender.
-
#doctype ⇒ Object
Returns the value of attribute doctype.
-
#i18n ⇒ Object
Returns the value of attribute i18n.
-
#meta ⇒ Object
Returns the value of attribute meta.
-
#options ⇒ Object
Returns the value of attribute options.
-
#reqt_models ⇒ Object
Returns the value of attribute reqt_models.
-
#requirements_processor ⇒ Object
Returns the value of attribute requirements_processor.
-
#tempfile_cache ⇒ Object
Returns the value of attribute tempfile_cache.
-
#wordcoverpage ⇒ Object
Returns the value of attribute wordcoverpage.
-
#wordintropage ⇒ Object
Returns the value of attribute wordintropage.
-
#xrefs ⇒ Object
Returns the value of attribute xrefs.
Instance Method Summary collapse
- #agency?(text) ⇒ Boolean
- #bibrenderer(options = {}) ⇒ Object
- #convert(input_filename, file = nil, debug = false, output_filename = nil) ⇒ Object
- #convert1(docxml, filename, dir) ⇒ Object
- #convert1_namespaces(html) ⇒ Object
- #convert_i18n_init(docxml) ⇒ Object
- #convert_i18n_init1(docxml) ⇒ Object
- #convert_init(file, input_filename, debug) ⇒ Object
- #convert_scss(filename, stylesheet, stripwordcss) ⇒ Object
-
#default_file_locations(_options) ⇒ Object
none for this parent gem, but will be populated in child gems which have access to stylesheets &c.
- #default_fonts(_options) ⇒ Object
- #extract_preprocess_xslt(docxml) ⇒ Object
- #fonts_options ⇒ Object
-
#generate_css(filename, stripwordcss) ⇒ Object
stripwordcss if HTML stylesheet, !stripwordcss if DOC stylesheet.
- #html_doc_path(*file) ⇒ Object
- #i18n_init(lang, script, locale, i18nyaml = nil) ⇒ Object
- #init_arrangement(options) ⇒ Object
- #init_covers(options) ⇒ Object
- #init_fonts(options) ⇒ Object
- #init_i18n(options) ⇒ Object
- #init_locations(options) ⇒ Object
- #init_processing ⇒ Object
- #init_rendering(options) ⇒ Object
- #init_stylesheets(options) ⇒ Object
- #init_toc(options) ⇒ Object
-
#initialize(options) ⇒ Convert
constructor
htmlstylesheet: Generic stylesheet for HTML htmlstylesheet_override: Override stylesheet for HTML wordstylesheet: Generic stylesheet for Word wordstylesheet_override: Override stylesheet for Word standardsheet: Stylesheet specific to Standard header: Header file for Word htmlcoverpage: Cover page for HTML wordcoverpage: Cover page for Word htmlintropage: Introductory page for HTML wordintropage: Introductory page for Word normalfontsize: Font size for body text smallerfontsize: Font size for smaller than body text monospacefontsize: Font size for monospace font footnotefontsize: Font size for footnotes i18nyaml: YAML file for internationalisation of text ulstyle: list style in Word CSS for unordered lists olstyle: list style in Word CSS for ordered lists bodyfont: font to use for body text headerfont: font to use for header text monospace: font to use for monospace text suppressheadingnumbers: suppress heading numbers for clauses scripts: Scripts file for HTML scripts_override: Override scripts file for HTML scripts_pdf: Scripts file for PDF (not used in XSLT PDF) datauriimage: Encode images in HTML output as data URIs breakupurlsintables: whether to insert spaces in URLs in tables every 40-odd chars sectionsplit: split up HTML output on sections bare: do not insert any prefatory material (coverpage, boilerplate) tocfigures: add ToC for figures toctables: add ToC for tables tocrecommendations: add ToC for rcommendations fonts: fontist fonts to install fontlicenseagreement: fontist font license agreement modspecidentifierbase: base prefix for any Modspec identifiers sourcehighlighter: whether to apply sourcecode highlighting semantic_xml_insert: whether to insert into presentation XML a copy of semantic XML output_formats: hash of supported output formats and suffixes.
- #l10n(expr, lang = @lang, script = @script, locale = @locale) ⇒ Object
- #localpath(path) ⇒ Object
- #metadata_init(lang, script, locale, i18n) ⇒ Object
- #middle_clause(_docxml = nil) ⇒ Object
- #options_preprocess(options) ⇒ Object
-
#populate_css ⇒ Object
run this after @meta is populated.
-
#precompiled_style_or_original(stylesheet_path) ⇒ Object
Check if already compiled version(.css) exists, if not, return original scss file.
- #preprocess_xslt(docxml) ⇒ Object
- #scss_fontheader(is_html_css) ⇒ Object
-
#swap_renderer(oldklass, newklass, file, input_filename, debug) ⇒ Object
use a different class than self for rendering, as a result of document-specific criteria but pass on any singleton methods defined on top of the self instance.
- #target_pdf(node) ⇒ Object
- #tmpfilesdir_suffix ⇒ Object
- #tmpimagedir_suffix ⇒ Object
- #toc_init(docxml) ⇒ Object
- #xref_init(lang, script, _klass, i18n, options) ⇒ Object
Methods included from ClassUtils
#case_strict, #case_strict1, #case_with_markup, #date_range, #liquid, #nearest_block_parent, #ns, #start_of_sentence, #to_xml
Methods included from Function::Utils
#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
Methods included from Function::ToWordHtml
#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, #set_termdomain, #tmpimagedir, #top_element_render
Methods included from Function::Terms
#admitted_term_parse, #definition_parse, #deprecated_term_parse, #modification_parse, #para_then_remainder, #term_parse, #termdef_parse, #termdocsource_parse, #termnote_delim, #termnote_parse, #termref_parse
Methods included from Function::Table
#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
Methods included from Function::Section
#abstract, #acknowledgements, #annex, #annex_attrs, #annex_name, #clause, #clause_attrs, #clause_name, #clause_parse, #clause_parse_subtitle, #clause_parse_title, #clause_parse_title1, #clause_title_depth, #clausedelim, #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, #single_term_clause?, #symbols_abbrevs, #symbols_parse, #table_of_contents, #terms_defs, #terms_parse, #variant_title
Methods included from Function::References
#bibitem_ref_code, #bibitem_ref_code_prep, #biblio_list, #bibliography, #bibliography_parse, #bibliography_xpath, #bracket_if_num, #docid_l10n, #docid_prefix, #implicit_reference, #iso_bibitem_entry_attrs, #no_identifier, #nonstd_bibitem, #norm_ref, #norm_ref_xpath, #omit_docid_prefix, #pref_ref_code, #pref_ref_code_parse, #reference_format, #render_identifier, #standard?, #std_bibitem_entry, #unbracket, #unbracket1
Methods included from Function::Lists
#dl_attrs, #dl_parse, #dl_parse1, #dl_parse_notes, #dt_dd?, #dt_parse, #li_parse, #list_title_parse, #ol_attrs, #ol_depth, #ol_parse, #ol_style, #ul_attrs, #ul_parse
Methods included from Function::Inline
#add_parse, #asciimath_parse, #bookmark_parse, #br_parse, #callout_parse, #del_parse, #em_parse, #eref_parse, #error_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, #no_locality_parse, #origin_parse, #page_break, #pagebreak_parse, #rb_parse, #rt_parse, #ruby_parse, #section_break, #smallcap_parse, #span_parse, #stem_parse, #strike_parse, #strong_parse, #sub_parse, #suffix_url, #sup_parse, #termrefelem_parse, #text_parse, #tt_parse, #underline_parse, #xref_parse
Methods included from Function::Form
#form_parse, #input_parse, #label_parse, #option_parse, #select_parse, #text_input, #textarea_parse
Methods included from Function::Cleanup
#admonition_cleanup, #cleanup, #example_cleanup, #figure_aside_process, #figure_cleanup, #figure_get_or_make_dl, #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
Methods included from Function::Blocks
#admonition_attrs, #admonition_class, #admonition_name, #admonition_name_parse, #admonition_parse, #annotation_parse, #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_key, #figure_name_parse, #figure_parse, #figure_parse1, #formula_attrs, #formula_parse, #formula_parse1, #keep_style, #note_attrs, #note_delim, #note_p_parse, #note_parse, #note_parse1, #para_attrs, #para_class, #para_parse, #passthrough_parse, #permission_parse, #pre_parse, #pseudocode_attrs, #pseudocode_parse, #quote_attribution, #quote_parse, #recommendation_name, #recommendation_parse, #recommendation_parse1, #reqt_attrs, #requirement_parse, #source_parse, #sourcecode_attrs, #sourcecode_name_parse, #sourcecode_parse, #sourcecode_parse1, #svg_parse, #toc_parse
Constructor Details
#initialize(options) ⇒ Convert
htmlstylesheet: Generic stylesheet for HTML htmlstylesheet_override: Override stylesheet for HTML wordstylesheet: Generic stylesheet for Word wordstylesheet_override: Override stylesheet for Word standardsheet: Stylesheet specific to Standard header: Header file for Word htmlcoverpage: Cover page for HTML wordcoverpage: Cover page for Word htmlintropage: Introductory page for HTML wordintropage: Introductory page for Word normalfontsize: Font size for body text smallerfontsize: Font size for smaller than body text monospacefontsize: Font size for monospace font footnotefontsize: Font size for footnotes i18nyaml: YAML file for internationalisation of text ulstyle: list style in Word CSS for unordered lists olstyle: list style in Word CSS for ordered lists bodyfont: font to use for body text headerfont: font to use for header text monospace: font to use for monospace text suppressheadingnumbers: suppress heading numbers for clauses scripts: Scripts file for HTML scripts_override: Override scripts file for HTML scripts_pdf: Scripts file for PDF (not used in XSLT PDF) datauriimage: Encode images in HTML output as data URIs breakupurlsintables: whether to insert spaces in URLs in tables
every 40-odd chars
sectionsplit: split up HTML output on sections bare: do not insert any prefatory material (coverpage, boilerplate) tocfigures: add ToC for figures toctables: add ToC for tables tocrecommendations: add ToC for rcommendations fonts: fontist fonts to install fontlicenseagreement: fontist font license agreement modspecidentifierbase: base prefix for any Modspec identifiers sourcehighlighter: whether to apply sourcecode highlighting semantic_xml_insert: whether to insert into presentation XML
a copy of semantic XML
output_formats: hash of supported output formats and suffixes
55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/isodoc/convert.rb', line 55 def initialize() # rubocop:disable Lint/MissingSuper @options = () init_stylesheets(@options) init_covers(@options) init_toc(@options) init_fonts(@options) init_processing init_locations(@options) init_i18n(@options) init_rendering(@options) init_arrangement(@options) end |
Instance Attribute Details
#bibrender ⇒ Object
Returns the value of attribute bibrender.
12 13 14 |
# File 'lib/isodoc/convert.rb', line 12 def bibrender @bibrender end |
#doctype ⇒ Object
Returns the value of attribute doctype.
12 13 14 |
# File 'lib/isodoc/convert.rb', line 12 def doctype @doctype end |
#i18n ⇒ Object
Returns the value of attribute i18n.
12 13 14 |
# File 'lib/isodoc/convert.rb', line 12 def i18n @i18n end |
#meta ⇒ Object
Returns the value of attribute meta.
12 13 14 |
# File 'lib/isodoc/convert.rb', line 12 def @meta end |
#options ⇒ Object
Returns the value of attribute options.
12 13 14 |
# File 'lib/isodoc/convert.rb', line 12 def @options end |
#reqt_models ⇒ Object
Returns the value of attribute reqt_models.
12 13 14 |
# File 'lib/isodoc/convert.rb', line 12 def reqt_models @reqt_models end |
#requirements_processor ⇒ Object
Returns the value of attribute requirements_processor.
12 13 14 |
# File 'lib/isodoc/convert.rb', line 12 def requirements_processor @requirements_processor end |
#tempfile_cache ⇒ Object
Returns the value of attribute tempfile_cache.
12 13 14 |
# File 'lib/isodoc/convert.rb', line 12 def tempfile_cache @tempfile_cache end |
#wordcoverpage ⇒ Object
Returns the value of attribute wordcoverpage.
12 13 14 |
# File 'lib/isodoc/convert.rb', line 12 def wordcoverpage @wordcoverpage end |
#wordintropage ⇒ Object
Returns the value of attribute wordintropage.
12 13 14 |
# File 'lib/isodoc/convert.rb', line 12 def wordintropage @wordintropage end |
#xrefs ⇒ Object
Returns the value of attribute xrefs.
12 13 14 |
# File 'lib/isodoc/convert.rb', line 12 def xrefs @xrefs end |
Instance Method Details
#agency?(text) ⇒ Boolean
140 141 142 |
# File 'lib/isodoc/init.rb', line 140 def agency?(text) self.class::AGENCIES.include?(text) end |
#bibrenderer(options = {}) ⇒ Object
88 89 90 91 |
# File 'lib/isodoc/convert.rb', line 88 def bibrenderer( = {}) ::Relaton::Render::IsoDoc::General.new(.merge(language: @lang, i18nhash: @i18n.get)) end |
#convert(input_filename, file = nil, debug = false, output_filename = nil) ⇒ Object
163 164 165 166 167 168 169 170 171 172 173 |
# File 'lib/isodoc/convert.rb', line 163 def convert(input_filename, file = nil, debug = false, output_filename = nil) file = File.read(input_filename, encoding: "utf-8") if file.nil? @openmathdelim, @closemathdelim = extract_delims(file) docxml, filename, dir = convert_init(file, input_filename, debug) result = convert1(docxml, filename, dir) debug and return result output_filename ||= "#{filename}.#{@suffix}" postprocess(result, output_filename, dir) FileUtils.rm_rf dir end |
#convert1(docxml, filename, dir) ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/isodoc/convert.rb', line 97 def convert1(docxml, filename, dir) @xrefs.parse docxml noko do |xml| xml.html lang: @lang.to_s do |html| convert1_namespaces(html.parent) info docxml, nil populate_css html.head { |head| define_head head, filename, dir } make_body(html, docxml) end end.join("\n") end |
#convert1_namespaces(html) ⇒ Object
93 94 95 |
# File 'lib/isodoc/convert.rb', line 93 def convert1_namespaces(html) html.add_namespace("epub", "http://www.idpf.org/2007/ops") end |
#convert_i18n_init(docxml) ⇒ Object
143 144 145 146 147 148 149 150 151 |
# File 'lib/isodoc/convert.rb', line 143 def convert_i18n_init(docxml) convert_i18n_init1(docxml) i18n_init(@lang, @script, @locale) @bibrender ||= bibrenderer @reqt_models = requirements_processor .new({ default: "default", lang: @lang, script: @script, locale: @locale, labels: @i18n.get, modspecidentifierbase: @modspecidentifierbase }) end |
#convert_i18n_init1(docxml) ⇒ Object
153 154 155 156 157 158 159 160 161 |
# File 'lib/isodoc/convert.rb', line 153 def convert_i18n_init1(docxml) lang = docxml.at(ns("//bibdata/language")) and @lang = lang.text if script = docxml.at(ns("//bibdata/script")) @script = script.text elsif lang @script = ::Metanorma::Utils::default_script(@lang) end locale = docxml.at(ns("//bibdata/locale")) and @locale = locale.text end |
#convert_init(file, input_filename, debug) ⇒ Object
110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/isodoc/convert.rb', line 110 def convert_init(file, input_filename, debug) docxml = Nokogiri::XML(file, &:huge) filename, dir = init_file(input_filename, debug) docxml.root.default_namespace = "" convert_i18n_init(docxml) (@lang, @script, @locale, @i18n) xref_init(@lang, @script, self, @i18n, { locale: @locale, bibrender: @bibrender }) docxml = preprocess_xslt(docxml) toc_init(docxml) [docxml, filename, dir] end |
#convert_scss(filename, stylesheet, stripwordcss) ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/isodoc/css.rb', line 77 def convert_scss(filename, stylesheet, stripwordcss) require "sassc" require "isodoc/sassc_importer" [File.join(Gem.loaded_specs["isodoc"].full_gem_path, "lib", "isodoc"), File.dirname(filename)].each do |name| SassC.load_paths << name end SassC::Engine.new(scss_fontheader(stripwordcss) + stylesheet, syntax: :scss, importer: SasscImporter) .render end |
#default_file_locations(_options) ⇒ Object
none for this parent gem, but will be populated in child gems which have access to stylesheets &c
48 49 50 |
# File 'lib/isodoc/css.rb', line 48 def default_file_locations() {} end |
#default_fonts(_options) ⇒ Object
38 39 40 41 42 43 44 |
# File 'lib/isodoc/css.rb', line 38 def default_fonts() { bodyfont: "Arial", headerfont: "Arial", monospacefont: "Courier New", } end |
#extract_preprocess_xslt(docxml) ⇒ Object
134 135 136 137 138 139 140 141 |
# File 'lib/isodoc/convert.rb', line 134 def extract_preprocess_xslt(docxml) docxml.xpath(ns("//metanorma-extension/render/preprocess-xslt")) .each_with_object([]) do |x, m| formats = x["format"]&.split(",") || [] !formats.empty? && !formats.include?(@format.to_s) and next m << x.children.to_xml end end |
#fonts_options ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/isodoc/css.rb', line 52 def { "bodyfont" => [:bodyfont] || "Arial", "headerfont" => [:headerfont] || "Arial", "monospacefont" => [:monospacefont] || "Courier New", "normalfontsize" => [:normalfontsize], "monospacefontsize" => [:monospacefontsize], "smallerfontsize" => [:smallerfontsize], "footnotefontsize" => [:footnotefontsize], } end |
#generate_css(filename, stripwordcss) ⇒ Object
stripwordcss if HTML stylesheet, !stripwordcss if DOC stylesheet
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/isodoc/css.rb', line 92 def generate_css(filename, stripwordcss) filename.nil? and return nil filename = precompiled_style_or_original(filename) stylesheet = File.read(filename, encoding: "UTF-8") stylesheet = populate_template(stylesheet, :word) stylesheet.gsub!(/(\s|\{)mso-[^:]+:[^;]+;/m, "\\1") if stripwordcss stylesheet.gsub!(/--/, "-DOUBLE_HYPHEN_ESCAPE-") unless stripwordcss File.extname(filename) == ".scss" and stylesheet = convert_scss(filename, stylesheet, stripwordcss) Tempfile.open([File.basename(filename, ".*"), "css"], mode: File::BINARY | File::SHARE_DELETE, encoding: "utf-8") do |f| f.write(stylesheet) f end end |
#html_doc_path(*file) ⇒ Object
76 77 78 79 80 81 82 |
# File 'lib/isodoc/convert.rb', line 76 def html_doc_path(*file) file.each do |f| ret = File.join(@libdir, File.join("html", f)) File.exist?(ret) and return ret end nil end |
#i18n_init(lang, script, locale, i18nyaml = nil) ⇒ Object
12 13 14 15 |
# File 'lib/isodoc/init.rb', line 12 def i18n_init(lang, script, locale, i18nyaml = nil) @i18n = I18n.new(lang, script, locale: locale, i18nyaml: i18nyaml || @i18nyaml) end |
#init_arrangement(options) ⇒ Object
54 55 56 57 58 |
# File 'lib/isodoc/init.rb', line 54 def init_arrangement() @sectionsplit = [:sectionsplit] == "true" @bare = [:bare] @semantic_xml_insert = [:semanticxmlinsert] != "false" end |
#init_covers(options) ⇒ Object
108 109 110 111 112 113 114 115 116 117 118 |
# File 'lib/isodoc/init.rb', line 108 def init_covers() @header = [:header] @htmlcoverpage = [:htmlcoverpage] @wordcoverpage = [:wordcoverpage] @htmlintropage = [:htmlintropage] @wordintropage = [:wordintropage] @scripts = [:scripts] || File.join(File.dirname(__FILE__), "base_style", "scripts.html") @scripts_pdf = [:scripts_pdf] @scripts_override = [:scripts_override] end |
#init_fonts(options) ⇒ Object
99 100 101 102 103 104 105 106 |
# File 'lib/isodoc/init.rb', line 99 def init_fonts() @normalfontsize = [:normalfontsize] @smallerfontsize = [:smallerfontsize] @monospacefontsize = [:monospacefontsize] @footnotefontsize = [:footnotefontsize] @fontist_fonts = [:fonts] @fontlicenseagreement = [:fontlicenseagreement] end |
#init_i18n(options) ⇒ Object
60 61 62 63 64 65 66 |
# File 'lib/isodoc/init.rb', line 60 def init_i18n() @i18nyaml = [:i18nyaml] @lang = [:language] || "en" @script = [:script] || "Latn" @locale = [:locale] @localizenumber = [:localizenumber] end |
#init_locations(options) ⇒ Object
68 69 70 71 72 73 74 75 76 |
# File 'lib/isodoc/init.rb', line 68 def init_locations() @libdir ||= File.dirname(__FILE__) @baseassetpath = [:baseassetpath] @tmpimagedir_suffix = tmpimagedir_suffix @tmpfilesdir_suffix = tmpfilesdir_suffix @sourcefilename = [:sourcefilename] @files_to_delete = [] @tempfile_cache = [] end |
#init_processing ⇒ Object
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/isodoc/init.rb', line 78 def init_processing @termdomain = "" @termexample = false @note = false @sourcecode = false @footnotes = [] @comments = [] @in_footnote = false @in_comment = false @in_table = false @in_figure = false @seen_footnote = Set.new @c = HTMLEntities.new @openmathdelim = "`" @closemathdelim = "`" @maxwidth = 1200 @maxheight = 800 @bookmarks_allocated = { "X" => true } @fn_bookmarks = {} end |
#init_rendering(options) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/isodoc/init.rb', line 41 def init_rendering() @ulstyle = [:ulstyle] @olstyle = [:olstyle] @datauriimage = [:datauriimage] @suppressheadingnumbers = [:suppressheadingnumbers] @break_up_urls_in_tables = [:breakupurlsintables] @suppressasciimathdup = [:suppressasciimathdup] @aligncrosselements = [:aligncrosselements] @modspecidentifierbase = [:modspecidentifierbase] @sourcehighlighter = [:sourcehighlighter] @output_formats = [:output_formats] || {} end |
#init_stylesheets(options) ⇒ Object
120 121 122 123 124 125 126 |
# File 'lib/isodoc/init.rb', line 120 def init_stylesheets() @htmlstylesheet_name = [:htmlstylesheet] @wordstylesheet_name = [:wordstylesheet] @htmlstylesheet_override_name = [:htmlstylesheet_override] @wordstylesheet_override_name = [:wordstylesheet_override] @standardstylesheet_name = [:standardstylesheet] end |
#init_toc(options) ⇒ Object
128 129 130 131 132 133 134 |
# File 'lib/isodoc/init.rb', line 128 def init_toc() @htmlToClevels = 2 @wordToClevels = 2 @tocfigures = [:tocfigures] @toctables = [:toctables] @tocrecommendations = [:tocrecommendations] end |
#l10n(expr, lang = @lang, script = @script, locale = @locale) ⇒ Object
17 18 19 |
# File 'lib/isodoc/init.rb', line 17 def l10n(expr, lang = @lang, script = @script, locale = @locale) @i18n.l10n(expr, lang, script, locale) end |
#localpath(path) ⇒ Object
19 20 21 22 23 24 |
# File 'lib/isodoc/css.rb', line 19 def localpath(path) return path if %r{^[A-Z]:|^/|^file:/}.match?(path) return path unless (@sourcedir || @localdir) && path File.(File.join((@sourcedir || @localdir), path)) end |
#metadata_init(lang, script, locale, i18n) ⇒ Object
3 4 5 |
# File 'lib/isodoc/init.rb', line 3 def (lang, script, locale, i18n) @meta = Metadata.new(lang, script, locale, i18n) end |
#middle_clause(_docxml = nil) ⇒ Object
175 176 177 178 |
# File 'lib/isodoc/convert.rb', line 175 def middle_clause(_docxml = nil) "//clause[parent::sections][not(@type = 'scope')]" \ "[not(descendant::terms)][not(descendant::references)]" end |
#options_preprocess(options) ⇒ Object
32 33 34 35 36 37 38 39 |
# File 'lib/isodoc/init.rb', line 32 def () .merge!(default_fonts()) do |_, old, new| old || new end.merge!(default_file_locations()) do |_, old, new| old || new end end |
#populate_css ⇒ Object
run this after @meta is populated
27 28 29 30 31 32 33 34 35 36 |
# File 'lib/isodoc/css.rb', line 27 def populate_css @htmlstylesheet = generate_css(localpath(@htmlstylesheet_name), true) @wordstylesheet = generate_css(localpath(@wordstylesheet_name), false) @standardstylesheet = generate_css(localpath(@standardstylesheet_name), false) @htmlstylesheet_override_name and @htmlstylesheet_override = File.open(localpath(@htmlstylesheet_override_name)) @wordstylesheet_override_name and @wordstylesheet_override = File.open(localpath(@wordstylesheet_override_name)) end |
#precompiled_style_or_original(stylesheet_path) ⇒ Object
Check if already compiled version(.css) exists,
if not, return original scss file. During release
we compile scss into css files in order to not depend on scss
6 7 8 9 10 11 12 13 14 15 16 17 |
# File 'lib/isodoc/css.rb', line 6 def precompiled_style_or_original(stylesheet_path) # Already have compiled stylesheet, use it return stylesheet_path if stylesheet_path.nil? || File.extname(stylesheet_path) == ".css" basename = File.basename(stylesheet_path, ".*") compiled_path = File.join(File.dirname(stylesheet_path), "#{basename}.css") return stylesheet_path unless File.file?(compiled_path) compiled_path end |
#preprocess_xslt(docxml) ⇒ Object
123 124 125 126 127 128 129 130 131 132 |
# File 'lib/isodoc/convert.rb', line 123 def preprocess_xslt(docxml) sheets = extract_preprocess_xslt(docxml) sheets.each do |x| docxml = Nokogiri::XSLT(x).transform(docxml) end docxml rescue ::Error => e require "debug" binding.b end |
#scss_fontheader(is_html_css) ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/isodoc/css.rb', line 64 def scss_fontheader(is_html_css) b = [:bodyfont] || "Arial" h = [:headerfont] || "Arial" m = [:monospacefont] || "Courier New" ns = [:normalfontsize] || (is_html_css ? "1.0em" : "12.0pt") ms = [:monospacefontsize] || (is_html_css ? "0.8em" : "11.0pt") ss = [:smallerfontsize] || (is_html_css ? "0.9em" : "10.0pt") fs = [:footnotefontsize] || (is_html_css ? "0.9em" : "9.0pt") "$bodyfont: #{b};\n$headerfont: #{h};\n$monospacefont: #{m};\n"\ "$normalfontsize: #{ns};\n$monospacefontsize: #{ms};\n"\ "$smallerfontsize: #{ss};\n$footnotefontsize: #{fs};\n" end |
#swap_renderer(oldklass, newklass, file, input_filename, debug) ⇒ Object
use a different class than self for rendering, as a result of document-specific criteria but pass on any singleton methods defined on top of the self instance
189 190 191 192 193 194 195 196 197 198 |
# File 'lib/isodoc/convert.rb', line 189 def swap_renderer(oldklass, newklass, file, input_filename, debug) ref = oldklass # avoid oldklass == self for indirection of methods oldklass.singleton_methods.each do |x| newklass.define_singleton_method(x) do |*args| ref.public_send(x, *args) end end oldklass.singleton_methods.empty? or newklass.convert_init(file, input_filename, debug) end |
#target_pdf(node) ⇒ Object
180 181 182 183 184 |
# File 'lib/isodoc/convert.rb', line 180 def target_pdf(node) if node["target"].include?("#") then node["target"].sub("#", ".pdf#") else "##{node['target']}" end end |
#tmpfilesdir_suffix ⇒ Object
72 73 74 |
# File 'lib/isodoc/convert.rb', line 72 def tmpfilesdir_suffix "_#{SecureRandom.hex(8)}_files" end |
#tmpimagedir_suffix ⇒ Object
68 69 70 |
# File 'lib/isodoc/convert.rb', line 68 def tmpimagedir_suffix "_#{SecureRandom.hex(8)}_images" end |
#toc_init(docxml) ⇒ Object
21 22 23 24 25 26 27 28 29 30 |
# File 'lib/isodoc/init.rb', line 21 def toc_init(docxml) @doctype = docxml.at(ns("//bibdata/ext/doctype"))&.text @xrefs.klass.doctype = @doctype x = "//metanorma-extension/presentation-metadata" \ "[name[text() = 'TOC Heading Levels']]/value" n = docxml.at(ns(x.sub("TOC", "DOC TOC"))) and @wordToClevels = n.text.to_i n = docxml.at(ns(x.sub("TOC", "HTML TOC"))) and @htmlToClevels = n.text.to_i end |
#xref_init(lang, script, _klass, i18n, options) ⇒ Object
7 8 9 10 |
# File 'lib/isodoc/init.rb', line 7 def xref_init(lang, script, _klass, i18n, ) html = HtmlConvert.new(language: @lang, script: @script) @xrefs = Xref.new(lang, script, html, i18n, ) end |