diff options
Diffstat (limited to 'src/sisudoc/io_out')
-rw-r--r-- | src/sisudoc/io_out/rgx.d | 7 | ||||
-rw-r--r-- | src/sisudoc/io_out/text.d | 65 |
2 files changed, 33 insertions, 39 deletions
diff --git a/src/sisudoc/io_out/rgx.d b/src/sisudoc/io_out/rgx.d index b4bec5f..f54deda 100644 --- a/src/sisudoc/io_out/rgx.d +++ b/src/sisudoc/io_out/rgx.d @@ -88,10 +88,8 @@ static template spineRgxOut() { static inline_notes_al_special = ctRegex!(`【(?:[*+]\s+)(.+?)】`, "mg"); // TODO remove match when special footnotes are implemented static inline_notes_al_gen = ctRegex!(`【.+?】`, "m"); static inline_notes_al_gen_text = ctRegex!(`【(?P<text>.+?)】`, "m"); - static inline_notes_al_all_note = ctRegex!(`【(?P<num>\d+|(?:[*]|[+])+)\s+(?P<note>.+?)\s*(≫\s\d+)?\s*】`, "mg"); // ocn of origin would be useful in endnote section - static inline_notes_al_regular_number_note = ctRegex!(`【(?P<num>\d+)\s+(?P<note>.+?)\s*(≫\s\d+)?\s*】`, "mg"); // ocn of origin would be useful in endnote section - // static inline_notes_al_all_note = ctRegex!(`【(?P<num>\d+|(?:[*]|[+])+)\s+(?P<note>.+?)\s*】`, "mg"); - // static inline_notes_al_regular_number_note = ctRegex!(`【(?P<num>\d+)\s+(?P<note>.+?)\s*】`, "mg"); + static inline_notes_al_all_note = ctRegex!(`【(?P<num>\d+|(?:[*]|[+])+)\s+(?P<note>.+?)\s*】`, "mg"); + static inline_notes_al_regular_number_note = ctRegex!(`【(?P<num>\d+)\s+(?P<note>.+?)\s*】`, "mg"); static inline_notes_al_special_char_note = ctRegex!(`【(?P<char>(?:[*]|[+])+)\s+(?P<note>.+?)】`, "mg"); static inline_al_delimiter_open_regular = ctRegex!(`【\s`, "m"); static inline_al_delimiter_open_symbol_star = ctRegex!(`【[*]\s`, "m"); @@ -112,6 +110,7 @@ static template spineRgxOut() { static inline_link_seg_and_hash = ctRegex!(`┥(?P<text>.+?)┝┤(?P<link>(?P<seg>[^/#├]*)#(?P<hash>.+?))├`, "mg"); static inline_link_clean = ctRegex!(`┤(?:.+?)├|[┥┝]`, "mg"); static inline_link_toc_to_backmatter = ctRegex!(`┤#(?P<link>endnotes|bibliography|bookindex|glossary|blurb)├`, "mg"); + static find_bookindex_ocn_link_and_comma = ctRegex!(`[, ]*┥.+?┝┤#?\S+?├`, "mg"); static url = ctRegex!(`https?://`, "mg"); static uri = ctRegex!(`(?:https?|git)://`, "mg"); static uri_identify_components = ctRegex!(`(?P<type>(?:https?|git)://)(?P<path>\S+?/)(?P<file>[^/]+)$`, "mg"); diff --git a/src/sisudoc/io_out/text.d b/src/sisudoc/io_out/text.d index da0e2b6..9401bae 100644 --- a/src/sisudoc/io_out/text.d +++ b/src/sisudoc/io_out/text.d @@ -66,8 +66,7 @@ template outputText() { string newlines = "\n\n"; template special_characters_and_font_face() { string code(string _txt){ - _txt = _txt - .replaceAll(rgx.nbsp_char, " "); + _txt = _txt.replaceAll(rgx.nbsp_char, " "); return _txt; } string general(string _txt) { @@ -89,21 +88,16 @@ template outputText() { return _txt; } string links_and_images(string _txt){ - if (_txt.matchFirst(rgx.inline_link)) { + if (_txt.match(rgx.inline_link)) { foreach (m; _txt.matchAll(rgx.inline_link)) { - if (m.captures[3] == "0") { - _txt = _txt - .replaceFirst(rgx.inline_link, (m.captures[1])); - } else { - _txt = _txt - .replaceFirst(rgx.inline_link, (m.captures[1] ~ " ≫" ~ m.captures[3])); - } + _txt = (m.captures[3] == "0") + ? _txt.replaceFirst(rgx.inline_link, (m.captures[1])) + : _txt.replaceFirst(rgx.inline_link, (m.captures[1] ~ " ≫" ~ m.captures[3])); } } if (_txt.matchFirst(rgx.inline_image)) { foreach (m; _txt.matchAll(rgx.inline_image)) { - _txt = _txt - .replaceFirst(rgx.inline_image, (m.captures[3])); + _txt = _txt.replaceFirst(rgx.inline_image, (m.captures[3])); } } return _txt; @@ -114,28 +108,22 @@ template outputText() { string _notes; string _ocn; string general_munge; - if (obj.metainfo.ocn == 0 || doc_matters.opt.action.ocn_off) { - _ocn = ""; - } else { - _ocn = "「" ~ obj.metainfo.ocn.to!string ~ "」" ~ newline; - } + _ocn = (obj.metainfo.ocn == 0 || doc_matters.opt.action.ocn_off) + ? "" : "「" ~ obj.metainfo.ocn.to!string ~ "」" ~ newline; if (_txt.matchFirst(rgx.inline_notes_al_gen)) { foreach (m; _txt.matchAll(rgx.inline_notes_al_regular_number_note)) { - _notes ~= newlines ~ m["num"] ~ ". " ~ m["note"]; + _notes ~= newlines ~ m["num"] ~ ". " + ~ special_characters_and_font_face!().general(m["note"].replaceAll(rgx.inline_link, ("$1"))); } } _txt = _txt.replaceAll(rgx.inline_notes_al_regular_number_note, "[$1]"); - if (obj.metainfo.is_a == "code") { - _txt = special_characters_and_font_face!().code(_txt); - } else { - _txt = special_characters_and_font_face!().general(_txt); - } + _txt = (obj.metainfo.is_a == "code") + ? special_characters_and_font_face!().code(_txt) + : special_characters_and_font_face!().general(_txt); _txt = special_characters_and_font_face!().links_and_images(_txt); - if (obj.metainfo.is_a == "heading") { - general_munge = newline ~ _txt ~ _notes ~ newline ~ _ocn ~ newline; - } else { - general_munge = _txt ~ _notes ~ newline ~ _ocn ~ newline; - } + general_munge = (obj.metainfo.is_a == "heading") + ? newline ~ _txt ~ _notes ~ newline ~ _ocn ~ newline + : _txt ~ _notes ~ newline ~ _ocn ~ newline; return general_munge; } string toc(O,M)(O obj, M doc_matters) { @@ -164,7 +152,9 @@ template outputText() { default: break; } - _txt = _txt.replaceAll(rgx.inline_link, (_spaces ~ "$1 ≫ $3")); + _txt = (doc_matters.opt.action.ocn_off) + ? _txt.replaceAll(rgx.inline_link, (_spaces ~ "$1")) + : _txt.replaceAll(rgx.inline_link, (_spaces ~ "$1 ≫ $3")); return _txt ~ newline; } string heading(O,M)(O obj, M doc_matters) { @@ -308,19 +298,24 @@ template outputText() { string _ocn; _ocn = "「" ~ obj.metainfo.ocn.to!string ~ "」"; string _txt = obj.text; + string _parent_ocn; _txt = _txt - .replaceFirst(rgx.inline_link, ("$1")) - .replaceFirst(rgx.inline_superscript, ("$1")); - _txt = special_characters_and_font_face!().general(_txt); + .replaceAll(rgx.inline_link, ("$1")) // consider + .replaceFirst(rgx.inline_superscript, ("$1")); + _parent_ocn = (obj.metainfo.parent_ocn == 0 || doc_matters.opt.action.ocn_off) + ? "" : " ≫" ~ obj.metainfo.parent_ocn.to!string; + _txt = special_characters_and_font_face!().general(_txt) ~ _parent_ocn; return _txt ~ newlines; } string bookindex(O,M)(O obj, M doc_matters) { // puts(obj.metainfo.is_a); // return obj.metainfo.is_a; string _txt = obj.text; - _txt = _txt - .replaceAll(rgx.inline_link, ("≫$1")) - .replaceAll(regex("\\s*\\\\"), ""); + _txt = (doc_matters.opt.action.ocn_off) + ? _txt.replaceAll(rgx.find_bookindex_ocn_link_and_comma, "") + .replaceAll(regex("\\s*\\\\"), "") + : _txt.replaceAll(rgx.inline_link, ("≫$1")) + .replaceAll(regex("\\s*\\\\"), ""); _txt = special_characters_and_font_face!().general(_txt); return _txt ~ newlines; } |