Class: IsoDoc::Convert
Direct Known Subclasses
HeadlessHtmlConvert, HtmlConvert, PdfConvert, WordConvert, XslfoPdfConvert
Constant Summary
Constants included from Function::XrefSectGen
Function::XrefSectGen::SUBCLAUSES
Constants included from Function::XrefGen
Function::XrefGen::CHILD_EXAMPLES_XPATH, Function::XrefGen::CHILD_NOTES_XPATH, Function::XrefGen::CHILD_SECTIONS, Function::XrefGen::FIRST_LVL_REQ, Function::XrefGen::SECTIONS_XPATH
Constants included from Function::Utils
Function::Utils::CLAUSE_ANCESTOR, Function::Utils::DOCTYPE_HDR, Function::Utils::NOKOHEAD, Function::Utils::NOTE_CONTAINER_ANCESTOR
Constants included from Function::Table
Constants included from Function::Section
Function::Section::MIDDLE_CLAUSE, Function::Section::TERM_CLAUSE
Constants included from Function::References
Function::References::BIBLIOGRAPHY_XPATH, Function::References::ISO_PUBLISHER_XPATH
Constants included from Function::Lists
Constants included from Function::Cleanup
Function::Cleanup::FIGURE_WITH_FOOTNOTES
Constants included from Function::Blocks
Function::Blocks::EXAMPLE_TBL_ATTR, Function::Blocks::EXAMPLE_TD_ATTR
Instance Attribute Summary collapse
-
#labels ⇒ Object
Returns the value of attribute labels.
-
#options ⇒ Object
readonly
Returns the value of attribute options.
Instance Method Summary collapse
- #convert(filename, file = nil, debug = false) ⇒ Object
- #convert1(docxml, filename, dir) ⇒ Object
- #convert_init(file, filename, debug) ⇒ Object
-
#default_file_locations(_options) ⇒ Object
none for this parent gem, but will be populated in child gems which have access to stylesheets &c; e.g.
- #default_fonts(_options) ⇒ Object
-
#extract_fonts(options) ⇒ Object
extract fonts for use in generate_css.
- #generate_css(filename, stripwordcss, fontheader) ⇒ Object
- #html_doc_path(file) ⇒ Object
-
#initialize(options) ⇒ Convert
constructor
htmlstylesheet: Generic stylesheet for HTML wordstylesheet: Generic 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 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_pdf: Scripts file for PDF datauriimage: Encode images in HTML output as data URIs.
- #metadata_init(lang, script, labels) ⇒ Object
-
#populate_css ⇒ Object
run this after @meta is populated.
- #tmpimagedir_suffix ⇒ Object
Methods included from ClassUtils
Methods included from Function::XrefSectGen
#annex_name_lbl, #annex_names, #annex_names1, #back_anchor_names, #clause_names, #initial_anchor_names, #middle_section_asset_names, #preface_clause_name, #preface_names, #preface_names1, #section_names, #section_names1
Methods included from Function::XrefGen
#anchor, #anchor_names, #anchor_struct, #anchor_struct_label, #anchor_struct_xref, #example_anchor_names, #get_anchors, #hierarchical_asset_names, #hierarchical_figure_names, #hierarchical_formula_names, #hierarchical_permission_names, #hierarchical_permission_names1, #hierarchical_permission_names2, #hierarchical_table_names, #hierfigsep, #hiersep, #list_anchor_names, #list_item_anchor_names, #note_anchor_names, #sequential_asset_names, #sequential_figure_names, #sequential_formula_names, #sequential_permission_names, #sequential_permission_names1, #sequential_permission_names2, #sequential_table_names, #termexample_anchor_names, #termnote_anchor_names, #termnote_label
Methods included from Function::Utils
#attr_code, #date_range, #empty2nil, #extract_delims, #from_xhtml, #get_clause_id, #get_note_container_id, #header_strip, #image_localfile, #insert_tab, #labelled_ancestor, #liquid, #noko, #ns, #populate_template, #save_dataimage, #sentence_join, #to_xhtml, #to_xhtml_fragment
Methods included from Function::ToWordHtml
#body_attr, #boilerplate, #define_head, #in_sourcecode, #info, #init_file, #make_body, #make_body1, #make_body2, #make_body3, #middle, #middle_title, #note?, #parse, #rel_tmpimagedir, #set_termdomain, #tmpimagedir
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_parse, #termref_parse
Methods included from Function::Table
#make_table_attr, #make_tr_attr, #table_parse, #table_title_parse, #tbody_parse, #tcaption, #tfoot_parse, #thead_parse, #tr_parse
Methods included from Function::Section
#abstract, #acknowledgements, #annex, #annex_name, #clause, #clause_name, #clause_parse, #clause_parse_title, #clausedelim, #clausedelimspace, #copyright_parse, #feedback_parse, #foreword, #inline_header_title, #introduction, #legal_parse, #license_parse, #preface, #scope, #symbols_abbrevs, #symbols_parse, #terms_defs, #terms_defs_title, #terms_parse
Methods included from Function::References
#bibitem_ref_code, #biblio_list, #bibliography, #bibliography_parse, #date_note_process, #docid_l10n, #docid_prefix, #format_ref, #implicit_reference, #is_standard, #iso_bibitem_entry_attrs, #iso_title, #nonstd_bibitem, #norm_ref, #omit_docid_prefix, #prefix_bracketed_ref, #ref_entry_code, #reference_format, #reference_names, #render_identifier, #std_bibitem_entry
Methods included from Function::Lists
#dl_attr, #dl_parse, #dt_dd?, #dt_parse, #li_parse, #ol_depth, #ol_parse, #ol_style, #ul_parse
Methods included from Function::Inline
#anchor_linkend, #bookmark_parse, #br_parse, #callout_parse, #concept_parse, #em_parse, #eref_localities, #eref_parse, #error_parse, #get_linkend, #hr_parse, #image_parse, #image_title_parse, #index_parse, #keyword_parse, #link_parse, #page_break, #pagebreak_parse, #prefix_container, #section_break, #smallcap_parse, #stem_parse, #strike_parse, #strong_parse, #sub_parse, #sup_parse, #termrefelem_parse, #text_parse, #tt_parse, #xref_parse
Methods included from Function::I18n
#eref_localities1, #eref_localities1_zh, #i18n_init, l10n, #load_yaml
Methods included from Function::Cleanup
#admonition_cleanup, #break_up_long_strings, #break_up_long_strings1, #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, #remove_bottom_border, #symbols_cleanup, #table_cleanup, #table_footnote_cleanup, #table_footnote_reference_format, #table_get_or_make_tfoot, #table_long_strings_cleanup, #table_note_cleanup, #textcleanup
Methods included from Function::Blocks
#admonition_class, #admonition_name, #admonition_name_parse, #admonition_parse, #annotation_parse, #example_div_parse, #example_label, #example_parse, #example_table_attr, #example_table_parse, #figure_key, #figure_name_parse, #figure_parse, #formula_parse, #formula_parse1, #formula_where, #note_label, #note_p_parse, #note_parse, #note_parse1, #para_attrs, #para_class, #para_parse, #permission_parse, #pre_parse, #pseudocode_parse, #quote_attribution, #quote_parse, #recommendation_attributes, #recommendation_attributes1, #recommendation_labels, #recommendation_name, #recommendation_parse, #reqt_metadata_node, #requirement_component_parse, #requirement_parse, #requirement_skip_parse, #sourcecode_name_parse, #sourcecode_parse
Constructor Details
#initialize(options) ⇒ Convert
htmlstylesheet: Generic stylesheet for HTML wordstylesheet: Generic 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 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_pdf: Scripts file for PDF datauriimage: Encode images in HTML output as data URIs
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/isodoc/convert.rb', line 29 def initialize() @libdir = File.dirname(__FILE__) unless @libdir .merge!(default_fonts()) { |_, old, new| old || new }. merge!(default_file_locations()) { |_, old, new| old || new } @options = @files_to_delete = [] @tempfile_cache = [] @htmlstylesheet_name = [:htmlstylesheet] @wordstylesheet_name = [:wordstylesheet] @standardstylesheet_name = [:standardstylesheet] @header = [:header] @htmlcoverpage = [:htmlcoverpage] @wordcoverpage = [:wordcoverpage] @htmlintropage = [:htmlintropage] @wordintropage = [:wordintropage] @scripts = [:scripts] @scripts_pdf = [:scripts_pdf] @i18nyaml = [:i18nyaml] @ulstyle = [:ulstyle] @olstyle = [:olstyle] @datauriimage = [:datauriimage] @suppressheadingnumbers = [:suppressheadingnumbers] @termdomain = "" @termexample = false @note = false @sourcecode = false @anchors = {} @footnotes = [] @comments = [] @in_footnote = false @in_comment = false @in_table = false @in_figure = false @seen_footnote = Set.new @c = HTMLEntities.new @openmathdelim = "`" @closemathdelim = "`" @lang = "en" @script = "Latn" @maxwidth = 1200 @maxheight = 800 @wordToClevels = [:doctoclevels].to_i @wordToClevels = 2 if @wordToClevels == 0 @htmlToClevels = [:htmltoclevels].to_i @htmlToClevels = 2 if @htmlToClevels == 0 @bookmarks_allocated = {"X" => true} @fn_bookmarks = {} end |
Instance Attribute Details
#labels ⇒ Object
Returns the value of attribute labels.
9 10 11 |
# File 'lib/isodoc/convert.rb', line 9 def labels @labels end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
8 9 10 |
# File 'lib/isodoc/convert.rb', line 8 def @options end |
Instance Method Details
#convert(filename, file = nil, debug = false) ⇒ Object
171 172 173 174 175 176 177 178 179 |
# File 'lib/isodoc/convert.rb', line 171 def convert(filename, file = nil, debug = false) file = File.read(filename, encoding: "utf-8") if file.nil? @openmathdelim, @closemathdelim = extract_delims(file) docxml, filename, dir = convert_init(file, filename, debug) result = convert1(docxml, filename, dir) return result if debug postprocess(result, filename, dir) FileUtils.rm_rf dir end |
#convert1(docxml, filename, dir) ⇒ Object
143 144 145 146 147 148 149 150 151 152 153 154 |
# File 'lib/isodoc/convert.rb', line 143 def convert1(docxml, filename, dir) anchor_names docxml noko do |xml| xml.html **{ lang: "#{@lang}" } do |html| html.parent.add_namespace("epub", "http://www.idpf.org/2007/ops") info docxml, nil populate_css() html.head { |head| define_head head, filename, dir } make_body(html, docxml) end end.join("\n") end |
#convert_init(file, filename, debug) ⇒ Object
160 161 162 163 164 165 166 167 168 169 |
# File 'lib/isodoc/convert.rb', line 160 def convert_init(file, filename, debug) docxml = Nokogiri::XML(file) filename, dir = init_file(filename, debug) docxml.root.default_namespace = "" lang = docxml&.at(ns("//bibdata/language"))&.text || @lang script = docxml&.at(ns("//bibdata/script"))&.text || @script i18n_init(lang, script) (lang, script, @labels) [docxml, filename, dir] end |
#default_file_locations(_options) ⇒ Object
none for this parent gem, but will be populated in child gems which have access to stylesheets &c; e.g.
htmlstylesheet: html_doc_path("htmlstyle.scss"),
htmlcoverpage: html_doc_path("html_rsd_titlepage.html"),
htmlintropage: html_doc_path("html_rsd_intro.html"),
scripts: html_doc_path("scripts.html"),
wordstylesheet: html_doc_path("wordstyle.scss"),
standardstylesheet: html_doc_path("rsd.scss"),
header: html_doc_path("header.html"),
wordcoverpage: html_doc_path("word_rsd_titlepage.html"),
wordintropage: html_doc_path("word_rsd_intro.html"),
ulstyle: l3
olstyle: l2
111 112 113 |
# File 'lib/isodoc/convert.rb', line 111 def default_file_locations() {} end |
#default_fonts(_options) ⇒ Object
89 90 91 92 93 94 95 |
# File 'lib/isodoc/convert.rb', line 89 def default_fonts() { bodyfont: "Arial", headerfont: "Arial", monospacefont: "Courier", } end |
#extract_fonts(options) ⇒ Object
extract fonts for use in generate_css
116 117 118 119 120 121 |
# File 'lib/isodoc/convert.rb', line 116 def extract_fonts() b = [:bodyfont] || "Arial" h = [:headerfont] || "Arial" m = [:monospacefont] || "Courier" "$bodyfont: #{b};\n$headerfont: #{h};\n$monospacefont: #{m};\n" end |
#generate_css(filename, stripwordcss, fontheader) ⇒ Object
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/isodoc/convert.rb', line 127 def generate_css(filename, stripwordcss, fontheader) return nil unless filename stylesheet = File.read(filename, encoding: "UTF-8") stylesheet = populate_template(stylesheet, :word) stylesheet.gsub!(/(\s|\{)mso-[^:]+:[^;]+;/m, "\\1") if stripwordcss SassC.load_paths << File.join(Gem.loaded_specs['isodoc'].full_gem_path, "lib", "isodoc") SassC.load_paths << File.dirname(filename) engine = SassC::Engine.new(fontheader + stylesheet, syntax: :scss) Tempfile.open([File.basename(filename, ".*"), "css"], :encoding => "utf-8") do |f| f.write(engine.render) f end end |
#html_doc_path(file) ⇒ Object
123 124 125 |
# File 'lib/isodoc/convert.rb', line 123 def html_doc_path(file) File.join(@libdir, File.join("html", file)) end |
#metadata_init(lang, script, labels) ⇒ Object
156 157 158 |
# File 'lib/isodoc/convert.rb', line 156 def (lang, script, labels) @meta = Metadata.new(lang, script, labels) end |
#populate_css ⇒ Object
run this after @meta is populated
79 80 81 82 83 |
# File 'lib/isodoc/convert.rb', line 79 def populate_css @htmlstylesheet = generate_css(@htmlstylesheet_name, true, extract_fonts()) @wordstylesheet = generate_css(@wordstylesheet_name, false, extract_fonts()) @standardstylesheet = generate_css(@standardstylesheet_name, false, extract_fonts()) end |
#tmpimagedir_suffix ⇒ Object
85 86 87 |
# File 'lib/isodoc/convert.rb', line 85 def tmpimagedir_suffix "_images" end |