From 60e34a2acd828681be9043ac710174aee6aba203 Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Mon, 7 Mar 2022 12:13:48 -0500 Subject: latex, pagebreaks, make headers - for book, article and manually set pagebreaks, not fully utilized but flexibility introduced --- src/doc_reform/io_out/latex.d | 66 ++++++++++++++++++++++++++++++++++++++++--- src/doc_reform/io_out/rgx.d | 2 ++ 2 files changed, 64 insertions(+), 4 deletions(-) (limited to 'src/doc_reform/io_out') diff --git a/src/doc_reform/io_out/latex.d b/src/doc_reform/io_out/latex.d index a939fd8..ef878fd 100644 --- a/src/doc_reform/io_out/latex.d +++ b/src/doc_reform/io_out/latex.d @@ -505,8 +505,60 @@ template outputLaTeX() { string _txt, O obj, M doc_matters, + string paper_size_orientation, string _part = "" ) { + string manual_breaks( + string test_for_break_level, + string _pg_break + ) { + if ((!(doc_matters.conf_make_meta.make.breaks.empty) + && (matchFirst(doc_matters.conf_make_meta.make.breaks, test_for_break_level))) + ) { // manually override defaults + if ((matchFirst(doc_matters.conf_make_meta.make.breaks, rgx.make_breakpage)) + && (matchFirst(doc_matters.conf_make_meta.make.breaks, rgx.make_breakcolumn)) + ) { + if (auto m = matchFirst(doc_matters.conf_make_meta.make.breaks, rgx.make_breakpage)) { + if (matchFirst(m.captures["breakpage"], test_for_break_level)) { + _pg_break = "\\clearpage\n"; + } else if (auto n = matchFirst(doc_matters.conf_make_meta.make.breaks, rgx.make_breakcolumn)) { + if (matchFirst(n.captures["breakcolumn"], test_for_break_level)) { + if ((paper_size_orientation == "a4.landscape") + || (paper_size_orientation == "b4.landscape") + || (paper_size_orientation == "a5.landscape") + || (paper_size_orientation == "letter.landscape") + || (paper_size_orientation == "legal.landscape") + ) { + _pg_break = "\\\\ \\columnbreak\n"; // "\\\\ \\newpage\n"; + } else { // portrait + _pg_break = "\\clearpage\n"; + } + } + } + } + } else if (auto m = matchFirst(doc_matters.conf_make_meta.make.breaks, rgx.make_breakpage)) { + if (matchFirst(m.captures["breakpage"], test_for_break_level)) { + _pg_break = "\\clearpage\n"; + } + } else if (auto m = matchFirst(doc_matters.conf_make_meta.make.breaks, rgx.make_breakcolumn)) { + if (matchFirst(m.captures["breakcolumn"], test_for_break_level)) { + if ((paper_size_orientation == "a4.landscape") + || (paper_size_orientation == "b4.landscape") + || (paper_size_orientation == "a5.landscape") + || (paper_size_orientation == "letter.landscape") + || (paper_size_orientation == "legal.landscape") + ) { + _pg_break = "\\\\ \\columnbreak\n"; // "\\\\ \\newpage\n"; + } else { // portrait + _pg_break = "\\clearpage\n"; + } + } + } + } else if (!(doc_matters.conf_make_meta.make.breaks.empty)) { + _pg_break = ""; + } + return _pg_break; + } if (obj.metainfo.is_a == "heading") { string _tex_para; string _pg_break; @@ -530,7 +582,13 @@ template outputLaTeX() { case 4: // 1 == section _columns = (_part != "bookindex") ? "" : "\n\\br\n\\begin{multicols}{2}"; - _pg_break = "\\clearpage\n"; + if (doc_matters.conf_make_meta.make.doc_type == "article") { // defaults for article + _pg_break = ""; + } else if (doc_matters.conf_make_meta.make.doc_type == "book") { // defaults for book + _pg_break = "\\clearpage\n"; + } else { + _pg_break = "\\clearpage\n"; + } _sect = "section"; _post = ""; _title_add = format(q"┃ @@ -1281,7 +1339,7 @@ string table(O,M)( case "para": switch (obj.metainfo.is_a) { case "heading": - _txt = _txt.heading(obj, doc_matters); + _txt = _txt.heading(obj, doc_matters, paper_size_orientation); goto default; case "toc": break; @@ -1302,7 +1360,7 @@ string table(O,M)( case "para": switch (obj.metainfo.is_a) { case "heading": - _txt = _txt.heading(obj, doc_matters); + _txt = _txt.heading(obj, doc_matters, paper_size_orientation); goto default; case "para": _txt = _txt.para(obj) @@ -1366,7 +1424,7 @@ string table(O,M)( if (part == "bookindex") { _multicolumns = true; } - _txt = _txt.heading(obj, doc_matters, part); + _txt = _txt.heading(obj, doc_matters, paper_size_orientation, part); goto default; case "endnote": assert(part == "endnotes"); /* uncomment code to reinstate endnotes in endnote section */ diff --git a/src/doc_reform/io_out/rgx.d b/src/doc_reform/io_out/rgx.d index 3aaf420..37ad39c 100644 --- a/src/doc_reform/io_out/rgx.d +++ b/src/doc_reform/io_out/rgx.d @@ -54,6 +54,8 @@ module doc_reform.io_out.rgx; static template spineRgxOut() { static struct RgxO { + static make_breakpage = ctRegex!(`new=(?P.+?)(?:;|$)`); + static make_breakcolumn = ctRegex!(`break=(?P.+?)(?:;|$)`,); static newline = ctRegex!("\n", "mg"); static space = ctRegex!(`[ ]`, "mg"); static spaces_keep = ctRegex!(`(?P^[ ]+|[ ]{2,})`, "mg"); // code, verse, block -- cgit v1.2.3