From 2731b33fe2d05fe3ebc3e2f98d39eacf7295d1e4 Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Sat, 16 Nov 2019 12:16:08 -0500 Subject: module & src renaming --- src/doc_reform/io_out/rgx.d | 114 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 src/doc_reform/io_out/rgx.d (limited to 'src/doc_reform/io_out/rgx.d') diff --git a/src/doc_reform/io_out/rgx.d b/src/doc_reform/io_out/rgx.d new file mode 100644 index 0000000..4d0801c --- /dev/null +++ b/src/doc_reform/io_out/rgx.d @@ -0,0 +1,114 @@ +/++ + regex: regular expressions used in sisu document parser ++/ +module doc_reform.io_out.rgx; +static template spineOutputRgxInit() { + import doc_reform.io_out.defaults; + static struct Rgx { + static newline = ctRegex!("\n", "mg"); + static space = ctRegex!(`[ ]`, "mg"); + static spaces_keep = ctRegex!(`(?P^[ ]+|[ ]{2,})`, "mg"); // code, verse, block + static spaces_line_start = ctRegex!(`^(?P[ ]+)`, "mg"); + static nbsp_char = ctRegex!(`░`, "mg"); + static src_pth_sst_or_ssm = ctRegex!(`^(?P[/]?(?:[a-zA-Z0-9._-]+/)*)(?P[a-zA-Z0-9._-]+[.](?Pss[tm]))$`); + static src_pth_pod_sst_or_ssm = ctRegex!(`^(?P[/]?(?:[a-zA-Z0-9._-]+/)*)media/text/[a-z]{2}/(?P[a-zA-Z0-9][a-zA-Z0-9._-]*?[.]ss[tm])$`); + static src_pth_contents = ctRegex!(`^(?P[/]?(?:[a-zA-Z0-9._-]+/)*)(?P[a-zA-Z0-9][a-zA-Z0-9._-]*)/pod[.]manifest$`); + static src_pth_zip = ctRegex!(`^(?P[/]?(?:[a-zA-Z0-9._-]+/)*)(?P[a-zA-Z0-9._-]+[.]zip)$`); + static src_pth_types = + ctRegex!(`^(?P[/]?[a-zA-Z0-9._-]+/)*(?P(?P[a-zA-Z0-9._-]+[.]ss[tm])|(?P[a-zA-Z0-9._-]+/pod[.]manifest)|(?P[a-zA-Z0-9._-]+[.]zip))$`); + static src_fn = + ctRegex!(`^([/]?(?:[a-zA-Z0-9._-]+/)*)(?P(?P[a-zA-Z0-9._-]+)[.](?Pss[tm]))$`); + static src_fn_master = ctRegex!(`^(?P/?(?:[a-zA-Z0-9._-]+/)*)(?P[a-zA-Z0-9._-]+[.]ssm)$`); + static src_fn_find_inserts = ctRegex!(`^(?P/?(?:[a-zA-Z0-9._-]+/)*)(?P[a-zA-Z0-9._-]+[.]ss[im])$`); + static insert_src_fn_ssi_or_sst = ctRegex!(`^<<\s*(?P[a-zA-Z0-9._-]+/)*(?P[a-zA-Z0-9._-]+[.]ss[ti])$`); + static src_base_parent_dir_name = ctRegex!(`[/](?P(?:[a-zA-Z0-9._-]+))(?:/media/text/[a-z]{2})$`); // formalizes dir structure + static src_formalised_file_path_parts = ctRegex!(`(?P(?:[/a-zA-Z0-9._-]+?)(?P[a-zA-Z0-9._-]+))(?:/media/text/[a-z]{2})$`); // formalizes dir structure + /+ line breaks +/ + static br_empty_line = ctRegex!(`\n[ ]*\n`, "mg"); + static br_newlines_linebreaks = ctRegex!(`[\n┘┙]`, "mg"); + static br_line = ctRegex!(`┘`, "mg"); + static br_nl = ctRegex!(`┙`, "mg"); + /+ inline markup footnotes endnotes +/ + static inline_notes_al = ctRegex!(`【(?:[*+]\s+|\s*)(.+?)】`, "mg"); + 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_regular = ctRegex!(`【(.+?)】`, "mg"); + static inline_notes_al_gen_text = ctRegex!(`【(?P.+?)】`, "m"); + static inline_notes_al_gen_ref = ctRegex!(`【(?P[*+]\s+)\s*(?P.+?)】`, "mg"); + static inline_notes_al_all_note = ctRegex!(`【(?P\d+|(?:[*]|[+])+)\s+(?P.+?)\s*】`, "mg"); + static inline_notes_al_regular_number_note = ctRegex!(`【(?P\d+)\s+(?P.+?)\s*】`, "mg"); + static inline_notes_al_special_char_note = ctRegex!(`【(?P(?:[*]|[+])+)\s+(?P.+?)】`, "mg"); + static inline_al_delimiter_open_regular = ctRegex!(`【\s`, "m"); + static inline_al_delimiter_open_symbol_star = ctRegex!(`【[*]\s`, "m"); + static inline_al_delimiter_open_symbol_plus = ctRegex!(`【[+]\s`, "m"); + static inline_text_and_note_al_ = ctRegex!(`(.+?(?:【[*+]*\s+.+?】|$))`, "mg"); + /+ inline markup links +/ + static inline_image = ctRegex!(`(?P
┥)☼(?P(?P[a-zA-Z0-9._-]+?\.(?:jpg|gif|png)),w(?P\d+)h(?P\d+))\s*(?P.*?┝┤.*?├)`, "mg");
+    static inline_image_without_dimensions                = ctRegex!(`(?P
┥)☼(?P(?P[a-zA-Z0-9._-]+?\.(?:jpg|gif|png)),w(?P0)h(?P0))\s*(?P.*?┝┤.*?├)`, "mg");
+    static inline_image_info                              = ctRegex!(`☼?(?P[a-zA-Z0-9._-]+?\.(?:jpg|gif|png)),w(?P\d+)h(?P\d+)`, "mg");
+    static inline_link_anchor                             = ctRegex!(`┃(?P\S+?)┃`, "mg"); // TODO *~text_link_anchor
+    static inline_link                                    = ctRegex!(`┥(?P.+?)┝┤(?P#?(\S+?))├`, "mg");
+    static inline_link_empty                              = ctRegex!(`┥(?P.+?)┝┤├`, "mg");
+    static inline_link_number                             = ctRegex!(`┥(?P.+?)┝┤(?P[0-9]+)├`, "mg"); // not used
+    static inline_link_number_only                        = ctRegex!(`(┥.+?┝)┤(?P[0-9]+)├`, "mg");
+    static inline_link_stow_uri                           = ctRegex!(`┥(?P.+?)┝┤(?P[^ 0-9#┥┝┤├][^ 0-9┥┝┤├]+)├`, "mg"); // will not stow (stowed links) or object number internal links
+    static inline_link_hash                               = ctRegex!(`┥(?P.+?)┝┤(?P#(?P\S+?))├`, "mg");
+    static inline_link_clean                              = ctRegex!(`┤(?:.+?)├|[┥┝]`, "mg");
+    static inline_link_toc_to_backmatter                  = ctRegex!(`┤#(?Pendnotes|bibliography|bookindex|glossary|blurb)├`, "mg");
+    static url                                            = ctRegex!(`https?://`, "mg");
+    static uri                                            = ctRegex!(`(?:https?|git)://`, "mg");
+    static uri_identify_components                        = ctRegex!(`(?P(?:https?|git)://)(?P\S+?/)(?P[^/]+)$`, "mg");
+    static inline_link_subtoc                             = ctRegex!(`^(?P[5-7])~ ┥(?P.+?)┝┤(?P.+?)├`, "mg");
+    static inline_link_fn_suffix                          = ctRegex!(`¤(.+?)(\.fnSuffix)`, "mg");
+    static inline_seg_link                                = ctRegex!(`(¤)(?:.+?)\.fnSuffix`, "mg");
+    static mark_internal_site_lnk                         = ctRegex!(`¤`, "mg");
+    static quotation_mark_sql_insert_delimiter            = ctRegex!("[']", "mg");
+    /+ inline markup font face mod +/
+    static inline_mark_emphasis                         = ctRegex!(`(?P[*])\{(?P.+?)\}[*]`, "mg");
+    static inline_mark_bold                             = ctRegex!(`(?P[!])\{(?P.+?)\}[!]`, "mg");
+    static inline_mark_underscore                       = ctRegex!(`(?P[_])\{(?P.+?)\}[_]`, "mg");
+    static inline_mark_italics                          = ctRegex!(`(?P[/])\{(?P.+?)\}[/]`, "mg");
+    static inline_mark_superscript                      = ctRegex!(`(?P\^)\{(?P.+?)\}\^`, "mg");
+    static inline_mark_subscript                        = ctRegex!(`(?P[,])\{(?P.+?)\}[,]`, "mg");
+    static inline_mark_strike                           = ctRegex!(`(?P[-])\{(?P.+?)\}[-]`, "mg");
+    static inline_mark_insert                           = ctRegex!(`(?P[+])\{(?P.+?)\}[+]`, "mg");
+    static inline_mark_mono                             = ctRegex!(`(?P[#])\{(?P.+?)\}[#]`, "mg");
+    static inline_mark_cite                             = ctRegex!(`(?P["])\{(?P.+?)\}["]`, "mg");
+    static inline_faces_line                              = ctRegex!(`^[*!/_]_ (?P.+?)((?: [\\]{2}|[~]#){0,2}$)`);
+    static inline_emphasis_line                           = ctRegex!(`^\*_ (?P.+?)(?P(?: [\\]{2}|[~]#){0,2}$)`);
+    static inline_bold_line                               = ctRegex!(`^!_ (?P.+?)(?P(?: [\\]{2}|[~]#){0,2}$)`);
+    static inline_italics_line                            = ctRegex!(`^/_ (?P.+?)(?P(?: [\\]{2}|[~]#){0,2}$)`);
+    static inline_underscore_line                         = ctRegex!(`^__ (?P.+?)(?P(?: [\\]{2}|[~]#){0,2}$)`);
+    /+ inline markup font face mod +/
+    static inline_emphasis                                = ctRegex!(`[*]┨(?P.+?)┣[*]`, "mg");
+    static inline_bold                                    = ctRegex!(`[!]┨(?P.+?)┣[!]`, "mg");
+    static inline_underscore                              = ctRegex!(`[_]┨(?P.+?)┣[_]`, "mg");
+    static inline_italics                                 = ctRegex!(`[/]┨(?P.+?)┣[/]`, "mg");
+    static inline_superscript                             = ctRegex!(`\^┨(?P.+?)┣\^`, "mg");
+    // static inline_superscript                             = ctRegex!(`[\^]┨(?P.+?)┣[\^]`, "mg");
+    static inline_subscript                               = ctRegex!(`[,]┨(?P.+?)┣[,]`, "mg");
+    static inline_strike                                  = ctRegex!(`[-]┨(?P.+?)┣[-]`, "mg");
+    static inline_insert                                  = ctRegex!(`[+]┨(?P.+?)┣[+]`, "mg");
+    static inline_mono                                    = ctRegex!(`[■]┨(?P.+?)┣[■]`, "mg");
+    static inline_cite                                    = ctRegex!(`[‖]┨(?P.+?)┣[‖]`, "mg");
+    static inline_fontface_clean                          = ctRegex!(`[*!_/^,+■‖-]┨|┣[*!_/^,+■‖-]`, "mg");
+    /+ table delimiters +/
+    static table_delimiter_col                           = ctRegex!("[ ]*[┊][ ]*", "mg");
+    static table_delimiter_row                           = ctRegex!("[ ]*\n", "mg");
+    static xhtml_ampersand                            = ctRegex!(`[&]`, "m");      // &
+    static xhtml_quotation                            = ctRegex!(`["]`, "m");      // "
+    static xhtml_less_than                            = ctRegex!(`[<]`, "m");      // <
+    static xhtml_greater_than                         = ctRegex!(`[>]`, "m");      // >
+    static xhtml_line_break                           = ctRegex!(` [\\]{2}`, "m"); // 
+ static latex_special_char = ctRegex!(`([%${}_#&\\])`); + static latex_special_char_for_escape = ctRegex!(`([%${}_#\\])`); + static latex_special_char_for_escape_and_braces = ctRegex!(`([&])`); + static latex_special_char_for_escape_url = ctRegex!(`([%])`); + static latex_special_char_escaped = ctRegex!(`\\([%${}_#\\])`); + static latex_special_char_escaped_braced = ctRegex!(`[{]\\([&])[}]`); + static latex_identify_inline_link = ctRegex!(`┥.+?┝┤\S+?├`, "mg"); + static latex_clean_internal_link = ctRegex!(`^(?:#|¤\S+?#)`, "m"); + static latex_identify_inline_fontface = ctRegex!(`\\([_#$]┨.+?┣)\\([_#$])`, "mg"); + static latex_clean_bookindex_linebreak = ctRegex!(`\s*\\\\\\\\\s*`, "m"); + } +} -- cgit v1.2.3