From 97b317410345d56c274ad58f044d15cb06b8eca3 Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Sat, 13 Jul 2019 20:53:44 -0400 Subject: xmls, css, codeblocks linenumbers --- src/doc_reform/meta/metadoc_from_src.d | 2 + src/doc_reform/meta/object_setter.d | 1 + src/doc_reform/meta/rgx.d | 2 +- src/doc_reform/output/xmls.d | 34 ++++- src/doc_reform/output/xmls_css.d | 231 ++++++++++++++++++++++++++++++++- 5 files changed, 259 insertions(+), 11 deletions(-) (limited to 'src/doc_reform') diff --git a/src/doc_reform/meta/metadoc_from_src.d b/src/doc_reform/meta/metadoc_from_src.d index 944189e..ec1e01a 100644 --- a/src/doc_reform/meta/metadoc_from_src.d +++ b/src/doc_reform/meta/metadoc_from_src.d @@ -3357,6 +3357,7 @@ template DocReformDocAbstraction() { "code block status: closed" ); assertions_flag_types_block_status_none_or_closed(obj_type_status); + static auto rgx = Rgx(); if (obj_type_status["quote"] == TriState.closing) { obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]); an_object["bookindex_nugget"] @@ -3584,6 +3585,7 @@ template DocReformDocAbstraction() { comp_obj_code.metainfo.object_number_type = obj_cite_digits.type; comp_obj_code.metainfo.syntax = an_object["syntax"]; comp_obj_code.metainfo.attrib = an_object["attrib"]; + comp_obj_code.code_block.linenumbers = (an_object["attrib"].match(rgx.code_numbering)) ? true : false; comp_obj_code.tags.html_segment_anchor_tag_is = tag_in_seg["seg_lv4"]; comp_obj_code.tags.epub_segment_anchor_tag_is = tag_in_seg["seg_lv1_to_4"]; comp_obj_code.text = an_object["substantive"]; diff --git a/src/doc_reform/meta/object_setter.d b/src/doc_reform/meta/object_setter.d index 6a95bcf..0ce74fd 100644 --- a/src/doc_reform/meta/object_setter.d +++ b/src/doc_reform/meta/object_setter.d @@ -101,6 +101,7 @@ template ObjectSetter() { } struct DocObj_CodeBlock_ { string syntax = ""; + bool linenumbers = false; } struct DocObj_Stow_ { string[] link = []; diff --git a/src/doc_reform/meta/rgx.d b/src/doc_reform/meta/rgx.d index 50665e1..926f2c6 100644 --- a/src/doc_reform/meta/rgx.d +++ b/src/doc_reform/meta/rgx.d @@ -100,7 +100,7 @@ static template DocReformRgxInit() { static block_curly_table_open = ctRegex!(`^table(?:[(](?P[ a-zA-Z0-9;:,]*)[)])?[{][ ]*$`); static block_curly_table_close = ctRegex!(`^([}]table)`); static block_curly_table_special_markup = ctRegex!(`^[{]table[(](?P(?:(h);)?(?P(?:[, ]+[0-9]+)+))[)][}]`, "mg"); - static code_numbering = ctRegex!(`(?P\bnumber\b)`); + static code_numbering = ctRegex!(`(?P\blinenumber\b|\bnumber\b|\blnr\b)`); static table_head_instructions = ctRegex!(`(?:(?Ph);)?(?:[ ]+c(?P[0-9]):)?(?P(?:[, ]+[0-9]+[lr]?)+)`); static table_col_widths_and_alignment = ctRegex!(`(?P[0-9]+)(?P[lr]?)`); static table_col_widths = ctRegex!(`(?P[0-9]+)`); diff --git a/src/doc_reform/output/xmls.d b/src/doc_reform/output/xmls.d index 164613b..84028df 100644 --- a/src/doc_reform/output/xmls.d +++ b/src/doc_reform/output/xmls.d @@ -1164,23 +1164,49 @@ template outputXHTMLs() { assert(obj.metainfo.is_of_type == "block"); assert(obj.metainfo.is_a == "code"); string o; + string codelines(string _txt) { + string _codelines; + if (obj.code_block.linenumbers) { + string[] _block_lines = (_txt).split(rgx.br_newlines_linebreaks); + _codelines = "
\n";
+          foreach (k, _line; _block_lines) {
+            if (k == 1) {
+              _codelines ~= format(q"┃    %s
+    ┃",
+                _line,
+              );
+            } else {
+              _codelines ~= format(q"┃    %s
+    ┃",
+                _line,
+              );
+            }
+          }
+          _codelines ~= "  
"; + } else { + _codelines = "
\n";
+          _codelines ~= _txt;
+          _codelines ~= "  
"; + } + return _codelines; + } if (!(obj.metainfo.identifier.empty)) { o = format(q"┃
-

%s

+

%s

┃", obj.metainfo.identifier, (doc_matters.opt.action.ocn_off) ? "" : ((obj.metainfo.object_number.empty) ? "" : obj.metainfo.identifier), obj.metainfo.is_a, obj.metainfo.identifier, - _txt + codelines(_txt) ); } else { o = format(q"┃
-

%s

+

%s

┃", obj.metainfo.is_a, - _txt + codelines(_txt) ); } return o; diff --git a/src/doc_reform/output/xmls_css.d b/src/doc_reform/output/xmls_css.d index 2c5697f..2ced969 100644 --- a/src/doc_reform/output/xmls_css.d +++ b/src/doc_reform/output/xmls_css.d @@ -609,7 +609,14 @@ template DocReformCss() { clear : both; color : #555555; } - p.code { + pre.codeline { + display : table; + clear : both; + table-layout : fixed; + margin-left : 5%%; + margin-right : 5%%; + width : 90%%; + white-space : pre-wrap; border-style : none; border-radius : 5px 5px 5px 5px; box-shadow : 0 2px 5px #AAAAAA inset; @@ -627,6 +634,36 @@ template DocReformCss() { font-size : 95%%; line-height : 100%%; } + pre.codeline::before { + counter-reset : linenum; + } + pre.codeline span.tr { + display : table-row; + counter-increment : linenum; + } + pre.codeline span.th { + display : table-cell; + user-select : none; + -moz-user-select : none; + -webkit-user-select : none; + padding : 0.5em 0.5em; + /* background-color : #666666; */ + } + pre.codeline span.th::before { + content : counter(linenum) "."; + color : #999999; + text-align : right; + display : block; + } + pre.codeline span.th { + width : 4em; + } + pre.codeline code { + display : table-cell; + } + p.code { + border-style : none; + } p.spaced { white-space: pre; } p.block { white-space : pre; @@ -1276,7 +1313,14 @@ template DocReformCss() { clear : both; color : #555555; } - p.code { + pre.codeline { + display : table; + clear : both; + table-layout : fixed; + margin-left : 5%%; + margin-right : 5%%; + width : 90%%; + white-space : pre-wrap; border-style : none; border-radius : 5px 5px 5px 5px; box-shadow : 0 2px 5px #AAAAAA inset; @@ -1294,6 +1338,35 @@ template DocReformCss() { font-size : 95%%; line-height : 100%%; } + pre.codeline::before { + counter-reset : linenum; + } + pre.codeline span.tr { + display : table-row; + counter-increment : linenum; + } + pre.codeline span.th { + display : table-cell; + user-select : none; + -moz-user-select : none; + -webkit-user-select : none; + padding : 0.5em 0.5em; + } + pre.codeline span.th::before { + content : counter(linenum) "."; + color : #999999; + text-align : right; + display : block; + } + pre.codeline span.th { + width : 4em; + } + pre.codeline code { + display : table-cell; + } + p.code { + border-style : none; + } p.spaced { white-space: pre; } p.block { white-space : pre; @@ -1947,7 +2020,14 @@ template DocReformCss() { clear : both; color : #555555; } - p.code { + pre.codeline { + display : table; + clear : both; + table-layout : fixed; + margin-left : 5%%; + margin-right : 5%%; + width : 90%%; + white-space : pre-wrap; border-style : none; border-radius : 5px 5px 5px 5px; box-shadow : 0 2px 5px #AAAAAA inset; @@ -1965,6 +2045,36 @@ template DocReformCss() { font-size : 95%%; line-height : 100%%; } + pre.codeline::before { + counter-reset : linenum; + } + pre.codeline span.tr { + display : table-row; + counter-increment : linenum; + } + pre.codeline span.th { + display : table-cell; + user-select : none; + -moz-user-select : none; + -webkit-user-select : none; + padding : 0.5em 0.5em; + /* background-color : #666666; */ + } + pre.codeline span.th::before { + content : counter(linenum) "."; + color : #999999; + text-align : right; + display : block; + } + pre.codeline span.th { + width : 4em; + } + pre.codeline code { + display : table-cell; + } + p.code { + border-style : none; + } p.spaced { white-space: pre; } p.block { white-space : pre; @@ -2542,7 +2652,14 @@ template DocReformCss() { clear : both; color : #555555; } - p.code { + pre.codeline { + display : table; + clear : both; + table-layout : fixed; + margin-left : 5%%; + margin-right : 5%%; + width : 90%%; + white-space : pre-wrap; border-style : none; border-radius : 5px 5px 5px 5px; box-shadow : 0 2px 5px #AAAAAA inset; @@ -2560,6 +2677,35 @@ template DocReformCss() { font-size : 95%%; line-height : 100%%; } + pre.codeline::before { + counter-reset : linenum; + } + pre.codeline span.tr { + display : table-row; + counter-increment : linenum; + } + pre.codeline span.th { + display : table-cell; + user-select : none; + -moz-user-select : none; + -webkit-user-select : none; + padding : 0.5em 0.5em; + } + pre.codeline span.th::before { + content : counter(linenum) "."; + color : #999999; + text-align : right; + display : block; + } + pre.codeline span.th { + width : 4em; + } + pre.codeline code { + display : table-cell; + } + p.code { + border-style : none; + } p.spaced { white-space: pre; } p.block { white-space : pre; @@ -3139,7 +3285,14 @@ template DocReformCss() { clear : both; color : #555555; } - p.code { + pre.codeline { + display : table; + clear : both; + table-layout : fixed; + margin-left : 5%%; + margin-right : 5%%; + width : 90%%; + white-space : pre-wrap; border-style : none; border-radius : 5px 5px 5px 5px; box-shadow : 0 2px 5px #AAAAAA inset; @@ -3157,6 +3310,36 @@ template DocReformCss() { font-size : 95%%; line-height : 100%%; } + pre.codeline::before { + counter-reset : linenum; + } + pre.codeline span.tr { + display : table-row; + counter-increment : linenum; + } + pre.codeline span.th { + display : table-cell; + user-select : none; + -moz-user-select : none; + -webkit-user-select : none; + padding : 0.5em 0.5em; + /* background-color : #666666; */ + } + pre.codeline span.th::before { + content : counter(linenum) "."; + color : #999999; + text-align : right; + display : block; + } + pre.codeline span.th { + width : 4em; + } + pre.codeline code { + display : table-cell; + } + p.code { + border-style : none; + } p.spaced { white-space: pre; } p.block { white-space : pre; @@ -3624,7 +3807,14 @@ template DocReformCss() { clear : both; color : #555555; } - p.code { + pre.codeline { + display : table; + clear : both; + table-layout : fixed; + margin-left : 5%%; + margin-right : 5%%; + width : 90%%; + white-space : pre-wrap; border-style : none; border-radius : 5px 5px 5px 5px; box-shadow : 0 2px 5px #AAAAAA inset; @@ -3642,6 +3832,35 @@ template DocReformCss() { font-size : 95%%; line-height : 100%%; } + pre.codeline::before { + counter-reset : linenum; + } + pre.codeline span.tr { + display : table-row; + counter-increment : linenum; + } + pre.codeline span.th { + display : table-cell; + user-select : none; + -moz-user-select : none; + -webkit-user-select : none; + padding : 0.5em 0.5em; + } + pre.codeline span.th::before { + content : counter(linenum) "."; + color : #999999; + text-align : right; + display : block; + } + pre.codeline span.th { + width : 4em; + } + pre.codeline code { + display : table-cell; + } + p.code { + border-style : none; + } p.spaced { white-space: pre; } p.block { white-space : pre; -- cgit v1.2.3