diff options
| -rw-r--r-- | org/output_xmls.org | 248 | ||||
| -rw-r--r-- | src/sdp/output_epub3.d | 31 | ||||
| -rw-r--r-- | src/sdp/output_html.d | 68 | ||||
| -rw-r--r-- | src/sdp/output_xmls.d | 99 | 
4 files changed, 233 insertions, 213 deletions
| diff --git a/org/output_xmls.org b/org/output_xmls.org index 08f32bb..017c346 100644 --- a/org/output_xmls.org +++ b/org/output_xmls.org @@ -25,7 +25,7 @@ template outputXHTMLs() {    struct outputXHTMLs {      auto rgx = Rgx();      <<xhtml_format_objects>> -<<xhtml_format_objects_code>> +    <<xhtml_format_objects_code>>    }  }  #+END_SRC @@ -70,12 +70,20 @@ import  #+name: xhtml_format_objects  #+BEGIN_SRC d -string special_characters(string _txt){ +string special_characters(O)( +  auto return ref const O    obj, +  string                     _txt +){    _txt = (_txt) -    .replaceAll(rgx.xhtml_ampersand,    "&") -    .replaceAll(rgx.xhtml_less_than,    "<") -    .replaceAll(rgx.xhtml_greater_than, ">") -    .replaceAll(rgx.xhtml_line_break,   "<br />"); +    .replaceAll(rgx.xhtml_ampersand,    "&") +    .replaceAll(rgx.xhtml_quotation,    """) +    .replaceAll(rgx.xhtml_less_than,    "<") +    .replaceAll(rgx.xhtml_greater_than, ">") +    .replaceAll(rgx.nbsp_char,          " "); +  if (!(obj.is_a == "code")) { +    _txt = (_txt) +      .replaceAll(rgx.xhtml_line_break,   "<br />"); +  }    return _txt;  }  #+END_SRC @@ -414,10 +422,9 @@ auto inline_notes_seg(O)(  #+BEGIN_SRC d  auto inline_markup_scroll(O)(    auto return ref const O  obj, +  string                   _txt,    string                   _suffix = ".html",  ) { -  string _txt = obj.text; -  _txt = special_characters(_txt);    _txt = inline_links(obj, _txt, _suffix, "scroll");    _txt = inline_notes_scroll(obj, _txt);    return _txt; @@ -430,10 +437,9 @@ auto inline_markup_scroll(O)(  #+BEGIN_SRC d  auto inline_markup_seg(O)(    auto return ref const O  obj, +  string                   _txt,    string                   _suffix = ".html",  ) { -  string _txt = obj.text; -  _txt = special_characters(_txt);    _txt = inline_links(obj, _txt, _suffix, "seg");    auto t = inline_notes_seg(obj, _txt);    return t; @@ -444,8 +450,9 @@ auto inline_markup_seg(O)(  #+name: xhtml_format_objects  #+BEGIN_SRC d -auto toc(O)( +auto toc_seg(O)(    auto return ref const O    obj, +  string                     _txt,  ) {    string o;    o = format(q"¶  <div class="substance"> @@ -456,7 +463,7 @@ auto toc(O)(    obj.is_a,    obj.indent_hang,    obj.indent_base, -  obj.text +  _txt,    );    return o;  } @@ -521,10 +528,11 @@ auto heading(O)(  #+BEGIN_SRC d  auto heading_scroll(O)(    auto return ref const O    obj, +  string                     _txt,    string                     _suffix = ".html",  ) {    auto tags = _xhtml_anchor_tags(obj.anchor_tags); -  string _txt = inline_markup_scroll(obj, _suffix); // issue +  _txt = inline_markup_scroll(obj, _txt, _suffix); // issue    string o = heading(obj, _txt);    return o;  } @@ -536,10 +544,11 @@ auto heading_scroll(O)(  #+BEGIN_SRC d  auto heading_seg(O)(    auto return ref const O    obj, +  string                     _txt,    string                     _suffix = ".html",  ) { -  auto t = inline_markup_seg(obj, _suffix); -  string _txt = t[0]; +  auto t = inline_markup_seg(obj, _txt, _suffix); +  _txt = t[0];    string[] _endnotes = t[1];    string o = heading(obj, _txt);    auto u = tuple( @@ -602,10 +611,11 @@ auto para(O)(  #+BEGIN_SRC d  auto para_scroll(O)(    auto return ref const O    obj, +  string                     _txt,    string                     _suffix = ".html",  ) {    auto tags = _xhtml_anchor_tags(obj.anchor_tags); -  string _txt = inline_markup_scroll(obj, _suffix); // issue +  _txt = inline_markup_scroll(obj, _txt, _suffix); // issue    string o = para(obj, _txt);    return o;  } @@ -617,10 +627,11 @@ auto para_scroll(O)(  #+BEGIN_SRC d  auto para_seg(O)(    auto return ref const O    obj, +  string                     _txt,    string                     _suffix = ".html",  ) { -  auto t = inline_markup_seg(obj, _suffix); -  string _txt = to!string(t[0]); +  auto t = inline_markup_seg(obj, _txt, _suffix); +  _txt = to!string(t[0]);    string[] _endnotes = t[1];    string o = para(obj, _txt);    auto u = tuple( @@ -675,10 +686,11 @@ auto quote(O)(  #+BEGIN_SRC d  auto quote_scroll(O)(    auto return ref const O    obj, +  string                     _txt,    string                     _suffix = ".html",  ) {    auto tags = _xhtml_anchor_tags(obj.anchor_tags); -  string _txt = inline_markup_scroll(obj, _suffix); // issue +  _txt = inline_markup_scroll(obj, _txt, _suffix); // issue    string o = quote(obj, _txt);    return o;  } @@ -690,10 +702,11 @@ auto quote_scroll(O)(  #+BEGIN_SRC d  auto quote_seg(O)(    auto return ref const O    obj, +  string                     _txt,    string                     _suffix = ".html",  ) { -  auto t = inline_markup_seg(obj, _suffix); -  string _txt = to!string(t[0]); +  auto t = inline_markup_seg(obj, _txt, _suffix); +  _txt = to!string(t[0]);    string[] _endnotes = t[1];    string o = quote(obj, _txt);    auto u = tuple( @@ -748,10 +761,11 @@ auto group(O)(  #+BEGIN_SRC d  auto group_scroll(O)(    auto return ref const O    obj, +  string                     _txt,    string                     _suffix = ".html",  ) {    auto tags = _xhtml_anchor_tags(obj.anchor_tags); -  string _txt = inline_markup_scroll(obj, _suffix); // issue +  _txt = inline_markup_scroll(obj, _txt, _suffix); // issue    string o = group(obj, _txt);    return o;  } @@ -763,10 +777,11 @@ auto group_scroll(O)(  #+BEGIN_SRC d  auto group_seg(O)(    auto return ref const O    obj, +  string                     _txt,    string                     _suffix = ".html",  ) { -  auto t = inline_markup_seg(obj, _suffix); -  string _txt = to!string(t[0]); +  auto t = inline_markup_seg(obj, _txt, _suffix); +  _txt = to!string(t[0]);    string[] _endnotes = t[1];    string o = group(obj, _txt);    auto u = tuple( @@ -817,10 +832,11 @@ auto block(O)(  #+BEGIN_SRC d  auto block_scroll(O)(    auto return ref const O    obj, +  string                     _txt,    string                     _suffix = ".html",  ) {    auto tags = _xhtml_anchor_tags(obj.anchor_tags); -  string _txt = inline_markup_scroll(obj, _suffix); // issue +  _txt = inline_markup_scroll(obj, _txt, _suffix); // issue    string o = block(obj, _txt);    return o;  } @@ -832,10 +848,11 @@ auto block_scroll(O)(  #+BEGIN_SRC d  auto block_seg(O)(    auto return ref const O    obj, +  string                     _txt,    string                     _suffix = ".html",  ) { -  auto t = inline_markup_seg(obj, _suffix); -  string _txt = to!string(t[0]); +  auto t = inline_markup_seg(obj, _txt, _suffix); +  _txt = to!string(t[0]);    string[] _endnotes = t[1];    string o = block(obj, _txt);    auto u = tuple( @@ -856,11 +873,6 @@ auto verse(O)(                           // using code from code block, review    string                     _txt,  ) {    _txt = font_face(_txt); -  _txt = (_txt) -    .replaceAll(rgx.newline, "<br />\n") -    .replaceAll(rgx.two_spaces, " " ~ " " ~ " " ~ " ") -    .replaceAll(rgx.nbsp_and_space, " " ~ " ") -    .replaceAll(rgx.strip_br, "");    string o;    if (obj.obj_cite_number.empty) {        o = format(q"¶  <div class="substance"> @@ -891,10 +903,11 @@ auto verse(O)(                           // using code from code block, review  #+BEGIN_SRC d  auto verse_scroll(O)(    auto return ref const O    obj, +  string                     _txt,    string                     _suffix = ".html",  ) {    auto tags = _xhtml_anchor_tags(obj.anchor_tags); -  string _txt = inline_markup_scroll(obj, _suffix); // issue +  _txt = inline_markup_scroll(obj, _txt, _suffix); // issue    string o = verse(obj, _txt);    return o;  } @@ -906,10 +919,11 @@ auto verse_scroll(O)(  #+BEGIN_SRC d  auto verse_seg(O)(    auto return ref const O    obj, +  string                     _txt,    string                     _suffix = ".html",  ) { -  auto t = inline_markup_seg(obj, _suffix); -  string _txt = to!string(t[0]); +  auto t = inline_markup_seg(obj, _txt, _suffix); +  _txt = to!string(t[0]);    string[] _endnotes = t[1];    string o = verse(obj, _txt);    auto u = tuple( @@ -924,40 +938,32 @@ auto verse_seg(O)(  #+name: xhtml_format_objects_code  #+BEGIN_SRC d -    auto code(O)( -      auto return ref const O  obj, -    ) { -      string _txt = obj.text; -      _txt = (_txt) -        .replaceAll(rgx.xhtml_ampersand, "&") -        .replaceAll(rgx.xhtml_quotation, """) -        .replaceAll(rgx.xhtml_less_than, "<") -        .replaceAll(rgx.xhtml_greater_than, ">") -        .replaceAll(rgx.nbsp_char, " "); -      string o; -      if (obj.obj_cite_number.empty) { -          o = format(q"¶  <div class="substance"> -        <p class="%s">%s</p> -    </div>¶", -          obj.is_a, -          _txt -        ); -      } else { -        o = format(q"¶  <div class="substance"> -      <label class="ocn"><a href="#%s" class="lnkocn">%s</a></label> -      <p class="%s" id="%s"> -%s -      </p> -    </div>¶", -          obj.obj_cite_number, -          obj.obj_cite_number, -          obj.is_a, -          obj.obj_cite_number, -          _txt -        ); -      } -      return o; -    } +auto code(O)( +  auto return ref const O  obj, +  string                   _txt, +) { +  string o; +  if (obj.obj_cite_number.empty) { +      o = format(q"¶  <div class="substance"> +    <p class="%s">%s</p> +</div>¶", +      obj.is_a, +      _txt +    ); +  } else { +    o = format(q"¶  <div class="substance"> +  <label class="ocn"><a href="#%s" class="lnkocn">%s</a></label> +  <p class="%s" id="%s">%s</p> +</div>¶", +      obj.obj_cite_number, +      obj.obj_cite_number, +      obj.is_a, +      obj.obj_cite_number, +      _txt +    ); +  } +  return o; +}  #+END_SRC  *** table @@ -1014,8 +1020,8 @@ auto tablarize(O)(  #+BEGIN_SRC d  auto table(O)(    auto return ref const O    obj, +  string                     _txt,  ) { -  string _txt = obj.text;    auto tags = _xhtml_anchor_tags(obj.anchor_tags);    _txt = font_face(_txt);    auto t = tablarize(obj, _txt); @@ -1049,6 +1055,7 @@ auto table(O)(  #+BEGIN_SRC d  auto endnote(O)(    auto return ref const O    obj, +  string                     _txt,  ) {    string o;    o = format(q"¶    <p class="%s" indent="h%si%s"> @@ -1057,7 +1064,7 @@ auto endnote(O)(      obj.is_a,      obj.indent_hang,      obj.indent_base, -    obj.text +    _txt    );    return o;  } @@ -1094,16 +1101,17 @@ void scroll(D,I)(    string suffix = ".html";    foreach (part; doc_matters.keys_seq.scroll) {      foreach (obj; doc_abstraction[part]) { +      string _txt = xhtml_format.special_characters(obj, obj.text);        switch (obj.use) {        case "frontmatter":          switch (obj.is_of) {          case "para":            switch (obj.is_a) {            case "heading": -            doc_html ~= xhtml_format.heading_scroll(obj, suffix); +            doc_html ~= xhtml_format.heading_scroll(obj, _txt, suffix);              break;            case "toc": -            doc_html ~= xhtml_format.para_scroll(obj, suffix); +            doc_html ~= xhtml_format.para_scroll(obj, _txt, suffix);              break;            default:              if ((doc_matters.opt_action_bool["debug"])) { @@ -1124,10 +1132,10 @@ void scroll(D,I)(          case "para":            switch (obj.is_a) {            case "heading": -            doc_html ~= xhtml_format.heading_scroll(obj, suffix); +            doc_html ~= xhtml_format.heading_scroll(obj, _txt, suffix);              break;            case "para": -            doc_html ~= xhtml_format.para_scroll(obj, suffix); +            doc_html ~= xhtml_format.para_scroll(obj, _txt, suffix);              break;            default:              if ((doc_matters.opt_action_bool["debug"])) { @@ -1139,24 +1147,24 @@ void scroll(D,I)(          case "block":            switch (obj.is_a) {            case "quote": -            doc_html ~= xhtml_format.quote_scroll(obj); +            doc_html ~= xhtml_format.quote_scroll(obj, _txt);              break;            case "group": -            doc_html ~= xhtml_format.group_scroll(obj); +            doc_html ~= xhtml_format.group_scroll(obj, _txt);              break;            case "block": -            doc_html ~= xhtml_format.block_scroll(obj); +            doc_html ~= xhtml_format.block_scroll(obj, _txt);              break;            case "poem":              break;            case "verse": -            doc_html ~= xhtml_format.verse_scroll(obj, suffix); +            doc_html ~= xhtml_format.verse_scroll(obj, _txt, suffix);              break;            case "code": -            doc_html ~= xhtml_format.code(obj); +            doc_html ~= xhtml_format.code(obj, _txt);              break;            case "table": -            doc_html ~= xhtml_format.table(obj); +            doc_html ~= xhtml_format.table(obj, _txt);              break;            default:              if ((doc_matters.opt_action_bool["debug"])) { @@ -1177,22 +1185,22 @@ void scroll(D,I)(          case "para":            switch (obj.is_a) {            case "heading": -            doc_html ~= xhtml_format.heading_scroll(obj, suffix); +            doc_html ~= xhtml_format.heading_scroll(obj, _txt, suffix);              break;            case "endnote": -            doc_html ~= xhtml_format.para_scroll(obj, suffix); +            doc_html ~= xhtml_format.para_scroll(obj, _txt, suffix);              break;            case "glossary": -            doc_html ~= xhtml_format.para_scroll(obj, suffix); +            doc_html ~= xhtml_format.para_scroll(obj, _txt, suffix);              break;            case "bibliography": -            doc_html ~= xhtml_format.para_scroll(obj, suffix); +            doc_html ~= xhtml_format.para_scroll(obj, _txt, suffix);              break;            case "bookindex": -            doc_html ~= xhtml_format.para_scroll(obj, suffix); +            doc_html ~= xhtml_format.para_scroll(obj, _txt, suffix);              break;            case "blurb": -            doc_html ~= xhtml_format.para_scroll(obj, suffix); +            doc_html ~= xhtml_format.para_scroll(obj, _txt, suffix);              break;            default:              if ((doc_matters.opt_action_bool["debug"])) { @@ -1276,6 +1284,7 @@ void seg(D,I)(    string suffix = ".html";    foreach (part; doc_matters.keys_seq.seg) {      foreach (obj; doc_abstraction[part]) { +      string _txt = xhtml_format.special_characters(obj, obj.text);        if (obj.is_a == "heading") {                            // all headings: frontmatter, body & backmatter          switch (obj.heading_lev_markup) {          case 0: .. case 3: @@ -1300,8 +1309,8 @@ void seg(D,I)(              top_level_headings[3] = "";              goto default;            default: -            auto t = xhtml_format.heading_seg(obj, suffix); -            top_level_headings[obj.heading_lev_markup] = t[0]; +            auto t = xhtml_format.heading_seg(obj, _txt, suffix); +            top_level_headings[obj.heading_lev_markup] = t[0]; // should probably have different css tagging (fontsize etc)              break;            }            break; @@ -1312,12 +1321,12 @@ void seg(D,I)(              // writeln(top_level_heading);              doc_html[segment_filename] ~= top_level_heading;            } -          auto t = xhtml_format.heading_seg(obj, suffix); +          auto t = xhtml_format.heading_seg(obj, _txt, suffix);            doc_html[segment_filename] ~= to!string(t[0]);            doc_html_endnotes[segment_filename] ~= t[1];            break;          case 5: .. case 7: -          auto t = xhtml_format.heading_seg(obj, suffix); +          auto t = xhtml_format.heading_seg(obj, _txt, suffix);            doc_html[segment_filename] ~= to!string(t[0]);            doc_html_endnotes[segment_filename] ~= t[1];            break; @@ -1340,7 +1349,7 @@ void seg(D,I)(            case "para":              switch (obj.is_a) {              case "toc": -              auto t = xhtml_format.para_seg(obj, suffix); +              auto t = xhtml_format.para_seg(obj, _txt, suffix);                doc_html[segment_filename] ~= to!string(t[0]);                break;              default: @@ -1362,7 +1371,7 @@ void seg(D,I)(            case "para":              switch (obj.is_a) {              case "para": -              auto t = xhtml_format.para_seg(obj, suffix); +              auto t = xhtml_format.para_seg(obj, _txt, suffix);                doc_html[segment_filename] ~= to!string(t[0]);                doc_html_endnotes[segment_filename] ~= t[1];                break; @@ -1376,32 +1385,32 @@ void seg(D,I)(            case "block":              switch (obj.is_a) {              case "quote": -              auto t = xhtml_format.quote_seg(obj, suffix); +              auto t = xhtml_format.quote_seg(obj, _txt, suffix);                doc_html[segment_filename] ~= to!string(t[0]);                doc_html_endnotes[segment_filename] ~= t[1];                break;              case "group": -              auto t = xhtml_format.group_seg(obj, suffix); +              auto t = xhtml_format.group_seg(obj, _txt, suffix);                doc_html[segment_filename] ~= to!string(t[0]);                doc_html_endnotes[segment_filename] ~= t[1];                break;              case "block": -              auto t = xhtml_format.block_seg(obj, suffix); +              auto t = xhtml_format.block_seg(obj, _txt, suffix);                doc_html[segment_filename] ~= to!string(t[0]);                doc_html_endnotes[segment_filename] ~= t[1];                break;              case "poem":                break;              case "verse": -              auto t = xhtml_format.verse_seg(obj, suffix); +              auto t = xhtml_format.verse_seg(obj, _txt, suffix);                doc_html[segment_filename] ~= to!string(t[0]);                doc_html_endnotes[segment_filename] ~= t[1]; // work on                break;              case "code": -              doc_html[segment_filename] ~= xhtml_format.code(obj); +              doc_html[segment_filename] ~= xhtml_format.code(obj, _txt);                break;              case "table": -              doc_html[segment_filename] ~= xhtml_format.table(obj); +              doc_html[segment_filename] ~= xhtml_format.table(obj, _txt);                doc_html_endnotes[segment_filename] ~= "";                break;              default: @@ -1423,26 +1432,26 @@ void seg(D,I)(            case "para":              switch (obj.is_a) {              case "endnote": -              auto t = xhtml_format.para_seg(obj, suffix); +              auto t = xhtml_format.para_seg(obj, _txt, suffix);                doc_html[segment_filename] ~= t[0];                break;              case "glossary": -              auto t = xhtml_format.para_seg(obj, suffix); +              auto t = xhtml_format.para_seg(obj, _txt, suffix);                doc_html[segment_filename] ~= t[0];                doc_html_endnotes[segment_filename] ~= t[1];                break;              case "bibliography": -              auto t = xhtml_format.para_seg(obj, suffix); +              auto t = xhtml_format.para_seg(obj, _txt, suffix);                doc_html[segment_filename] ~= t[0];                doc_html_endnotes[segment_filename] ~= t[1];                break;              case "bookindex": -              auto t = xhtml_format.para_seg(obj, suffix); +              auto t = xhtml_format.para_seg(obj, _txt, suffix);                doc_html[segment_filename] ~= t[0];                doc_html_endnotes[segment_filename] ~= t[1];                break;              case "blurb": -              auto t = xhtml_format.para_seg(obj, suffix); +              auto t = xhtml_format.para_seg(obj, _txt, suffix);                doc_html[segment_filename] ~= t[0];                doc_html_endnotes[segment_filename] ~= t[1];                break; @@ -1864,6 +1873,7 @@ void outputEPub3(D,I)(    string suffix = ".xhtml";    foreach (part; doc_matters.keys_seq.seg) {      foreach (obj; doc_abstraction[part]) { +      string _txt = xhtml_format.special_characters(obj, obj.text);        if (obj.is_a == "heading") {          switch (obj.heading_lev_markup) {          case 0: .. case 3: @@ -1899,12 +1909,12 @@ void outputEPub3(D,I)(            foreach (top_level_heading; top_level_headings) {              doc_epub3[segment_filename] ~= top_level_heading;            } -          auto t = xhtml_format.heading_seg(obj, suffix); +          auto t = xhtml_format.heading_seg(obj, _txt, suffix);            doc_epub3[segment_filename] ~= t[0];            doc_epub3_endnotes[segment_filename] ~= t[1];            break;          case 5: .. case 7: -          auto t = xhtml_format.heading_seg(obj, suffix); +          auto t = xhtml_format.heading_seg(obj, _txt, suffix);            doc_epub3[segment_filename] ~= t[0];            doc_epub3_endnotes[segment_filename] ~= t[1];            break; @@ -1927,7 +1937,7 @@ void outputEPub3(D,I)(            case "para":              switch (obj.is_a) {              case "toc": -              doc_epub3[segment_filename] ~= xhtml_format.toc(obj); +              doc_epub3[segment_filename] ~= xhtml_format.toc_seg(obj, _txt);                break;              default:                if ((doc_matters.opt_action_bool["debug"])) { @@ -1948,7 +1958,7 @@ void outputEPub3(D,I)(            case "para":              switch (obj.is_a) {              case "para": -              auto t = xhtml_format.para_seg(obj, suffix); +              auto t = xhtml_format.para_seg(obj, _txt, suffix);                doc_epub3[segment_filename] ~= t[0];                doc_epub3_endnotes[segment_filename] ~= t[1];                break; @@ -1962,32 +1972,32 @@ void outputEPub3(D,I)(            case "block":              switch (obj.is_a) {              case "quote": -              auto t = xhtml_format.quote_seg(obj, suffix); +              auto t = xhtml_format.quote_seg(obj, _txt, suffix);                doc_epub3[segment_filename] ~= to!string(t[0]);                doc_epub3_endnotes[segment_filename] ~= t[1];                break;              case "group": -              auto t = xhtml_format.group_seg(obj, suffix); +              auto t = xhtml_format.group_seg(obj, _txt, suffix);                doc_epub3[segment_filename] ~= to!string(t[0]);                doc_epub3_endnotes[segment_filename] ~= t[1];                break;              case "block": -              auto t = xhtml_format.block_seg(obj, suffix); +              auto t = xhtml_format.block_seg(obj, _txt, suffix);                doc_epub3[segment_filename] ~= to!string(t[0]);                doc_epub3_endnotes[segment_filename] ~= t[1];                break;              case "poem":                        // double check why both poem & verse                break;              case "verse": -              auto t = xhtml_format.verse_seg(obj, suffix); +              auto t = xhtml_format.verse_seg(obj, _txt, suffix);                doc_epub3[segment_filename] ~= to!string(t[0]);                doc_epub3_endnotes[segment_filename] ~= t[1];                break;              case "code": -              doc_epub3[segment_filename] ~= xhtml_format.code(obj); +              doc_epub3[segment_filename] ~= xhtml_format.code(obj, _txt);                break;              case "table": -              auto t = xhtml_format.para_seg(obj, suffix); +              auto t = xhtml_format.para_seg(obj, _txt, suffix);                doc_epub3[segment_filename] ~= t[0];                doc_epub3_endnotes[segment_filename] ~= t[1];                break; @@ -2010,26 +2020,26 @@ void outputEPub3(D,I)(            case "para":              switch (obj.is_a) {              case "endnote": -              auto t = xhtml_format.para_seg(obj, suffix); +              auto t = xhtml_format.para_seg(obj, _txt, suffix);                doc_epub3[segment_filename] ~= t[0];                break;              case "glossary": -              auto t = xhtml_format.para_seg(obj, suffix); +              auto t = xhtml_format.para_seg(obj, _txt, suffix);                doc_epub3[segment_filename] ~= t[0];                doc_epub3_endnotes[segment_filename] ~= t[1];                break;              case "bibliography": -              auto t = xhtml_format.para_seg(obj, suffix); +              auto t = xhtml_format.para_seg(obj, _txt, suffix);                doc_epub3[segment_filename] ~= t[0];                doc_epub3_endnotes[segment_filename] ~= t[1];                break;              case "bookindex": -              auto t = xhtml_format.para_seg(obj, suffix); +              auto t = xhtml_format.para_seg(obj, _txt, suffix);                doc_epub3[segment_filename] ~= t[0];                doc_epub3_endnotes[segment_filename] ~= t[1];                break;              case "blurb": -              auto t = xhtml_format.para_seg(obj, suffix); +              auto t = xhtml_format.para_seg(obj, _txt, suffix);                doc_epub3[segment_filename] ~= t[0];                doc_epub3_endnotes[segment_filename] ~= t[1];                break; diff --git a/src/sdp/output_epub3.d b/src/sdp/output_epub3.d index ea33f2e..3df1992 100644 --- a/src/sdp/output_epub3.d +++ b/src/sdp/output_epub3.d @@ -273,6 +273,7 @@ template outputEPub3() {      string suffix = ".xhtml";      foreach (part; doc_matters.keys_seq.seg) {        foreach (obj; doc_abstraction[part]) { +        string _txt = xhtml_format.special_characters(obj, obj.text);          if (obj.is_a == "heading") {            switch (obj.heading_lev_markup) {            case 0: .. case 3: @@ -308,12 +309,12 @@ template outputEPub3() {              foreach (top_level_heading; top_level_headings) {                doc_epub3[segment_filename] ~= top_level_heading;              } -            auto t = xhtml_format.heading_seg(obj, suffix); +            auto t = xhtml_format.heading_seg(obj, _txt, suffix);              doc_epub3[segment_filename] ~= t[0];              doc_epub3_endnotes[segment_filename] ~= t[1];              break;            case 5: .. case 7: -            auto t = xhtml_format.heading_seg(obj, suffix); +            auto t = xhtml_format.heading_seg(obj, _txt, suffix);              doc_epub3[segment_filename] ~= t[0];              doc_epub3_endnotes[segment_filename] ~= t[1];              break; @@ -336,7 +337,7 @@ template outputEPub3() {              case "para":                switch (obj.is_a) {                case "toc": -                doc_epub3[segment_filename] ~= xhtml_format.toc(obj); +                doc_epub3[segment_filename] ~= xhtml_format.toc_seg(obj, _txt);                  break;                default:                  if ((doc_matters.opt_action_bool["debug"])) { @@ -357,7 +358,7 @@ template outputEPub3() {              case "para":                switch (obj.is_a) {                case "para": -                auto t = xhtml_format.para_seg(obj, suffix); +                auto t = xhtml_format.para_seg(obj, _txt, suffix);                  doc_epub3[segment_filename] ~= t[0];                  doc_epub3_endnotes[segment_filename] ~= t[1];                  break; @@ -371,32 +372,32 @@ template outputEPub3() {              case "block":                switch (obj.is_a) {                case "quote": -                auto t = xhtml_format.quote_seg(obj, suffix); +                auto t = xhtml_format.quote_seg(obj, _txt, suffix);                  doc_epub3[segment_filename] ~= to!string(t[0]);                  doc_epub3_endnotes[segment_filename] ~= t[1];                  break;                case "group": -                auto t = xhtml_format.group_seg(obj, suffix); +                auto t = xhtml_format.group_seg(obj, _txt, suffix);                  doc_epub3[segment_filename] ~= to!string(t[0]);                  doc_epub3_endnotes[segment_filename] ~= t[1];                  break;                case "block": -                auto t = xhtml_format.block_seg(obj, suffix); +                auto t = xhtml_format.block_seg(obj, _txt, suffix);                  doc_epub3[segment_filename] ~= to!string(t[0]);                  doc_epub3_endnotes[segment_filename] ~= t[1];                  break;                case "poem":                        // double check why both poem & verse                  break;                case "verse": -                auto t = xhtml_format.verse_seg(obj, suffix); +                auto t = xhtml_format.verse_seg(obj, _txt, suffix);                  doc_epub3[segment_filename] ~= to!string(t[0]);                  doc_epub3_endnotes[segment_filename] ~= t[1];                  break;                case "code": -                doc_epub3[segment_filename] ~= xhtml_format.code(obj); +                doc_epub3[segment_filename] ~= xhtml_format.code(obj, _txt);                  break;                case "table": -                auto t = xhtml_format.para_seg(obj, suffix); +                auto t = xhtml_format.para_seg(obj, _txt, suffix);                  doc_epub3[segment_filename] ~= t[0];                  doc_epub3_endnotes[segment_filename] ~= t[1];                  break; @@ -419,26 +420,26 @@ template outputEPub3() {              case "para":                switch (obj.is_a) {                case "endnote": -                auto t = xhtml_format.para_seg(obj, suffix); +                auto t = xhtml_format.para_seg(obj, _txt, suffix);                  doc_epub3[segment_filename] ~= t[0];                  break;                case "glossary": -                auto t = xhtml_format.para_seg(obj, suffix); +                auto t = xhtml_format.para_seg(obj, _txt, suffix);                  doc_epub3[segment_filename] ~= t[0];                  doc_epub3_endnotes[segment_filename] ~= t[1];                  break;                case "bibliography": -                auto t = xhtml_format.para_seg(obj, suffix); +                auto t = xhtml_format.para_seg(obj, _txt, suffix);                  doc_epub3[segment_filename] ~= t[0];                  doc_epub3_endnotes[segment_filename] ~= t[1];                  break;                case "bookindex": -                auto t = xhtml_format.para_seg(obj, suffix); +                auto t = xhtml_format.para_seg(obj, _txt, suffix);                  doc_epub3[segment_filename] ~= t[0];                  doc_epub3_endnotes[segment_filename] ~= t[1];                  break;                case "blurb": -                auto t = xhtml_format.para_seg(obj, suffix); +                auto t = xhtml_format.para_seg(obj, _txt, suffix);                  doc_epub3[segment_filename] ~= t[0];                  doc_epub3_endnotes[segment_filename] ~= t[1];                  break; diff --git a/src/sdp/output_html.d b/src/sdp/output_html.d index 155ad48..509ae43 100644 --- a/src/sdp/output_html.d +++ b/src/sdp/output_html.d @@ -42,16 +42,17 @@ template outputHTML() {      string suffix = ".html";      foreach (part; doc_matters.keys_seq.scroll) {        foreach (obj; doc_abstraction[part]) { +        string _txt = xhtml_format.special_characters(obj, obj.text);          switch (obj.use) {          case "frontmatter":            switch (obj.is_of) {            case "para":              switch (obj.is_a) {              case "heading": -              doc_html ~= xhtml_format.heading_scroll(obj, suffix); +              doc_html ~= xhtml_format.heading_scroll(obj, _txt, suffix);                break;              case "toc": -              doc_html ~= xhtml_format.para_scroll(obj, suffix); +              doc_html ~= xhtml_format.para_scroll(obj, _txt, suffix);                break;              default:                if ((doc_matters.opt_action_bool["debug"])) { @@ -72,10 +73,10 @@ template outputHTML() {            case "para":              switch (obj.is_a) {              case "heading": -              doc_html ~= xhtml_format.heading_scroll(obj, suffix); +              doc_html ~= xhtml_format.heading_scroll(obj, _txt, suffix);                break;              case "para": -              doc_html ~= xhtml_format.para_scroll(obj, suffix); +              doc_html ~= xhtml_format.para_scroll(obj, _txt, suffix);                break;              default:                if ((doc_matters.opt_action_bool["debug"])) { @@ -87,24 +88,24 @@ template outputHTML() {            case "block":              switch (obj.is_a) {              case "quote": -              doc_html ~= xhtml_format.quote_scroll(obj); +              doc_html ~= xhtml_format.quote_scroll(obj, _txt);                break;              case "group": -              doc_html ~= xhtml_format.group_scroll(obj); +              doc_html ~= xhtml_format.group_scroll(obj, _txt);                break;              case "block": -              doc_html ~= xhtml_format.block_scroll(obj); +              doc_html ~= xhtml_format.block_scroll(obj, _txt);                break;              case "poem":                break;              case "verse": -              doc_html ~= xhtml_format.verse_scroll(obj, suffix); +              doc_html ~= xhtml_format.verse_scroll(obj, _txt, suffix);                break;              case "code": -              doc_html ~= xhtml_format.code(obj); +              doc_html ~= xhtml_format.code(obj, _txt);                break;              case "table": -              doc_html ~= xhtml_format.table(obj); +              doc_html ~= xhtml_format.table(obj, _txt);                break;              default:                if ((doc_matters.opt_action_bool["debug"])) { @@ -125,22 +126,22 @@ template outputHTML() {            case "para":              switch (obj.is_a) {              case "heading": -              doc_html ~= xhtml_format.heading_scroll(obj, suffix); +              doc_html ~= xhtml_format.heading_scroll(obj, _txt, suffix);                break;              case "endnote": -              doc_html ~= xhtml_format.para_scroll(obj, suffix); +              doc_html ~= xhtml_format.para_scroll(obj, _txt, suffix);                break;              case "glossary": -              doc_html ~= xhtml_format.para_scroll(obj, suffix); +              doc_html ~= xhtml_format.para_scroll(obj, _txt, suffix);                break;              case "bibliography": -              doc_html ~= xhtml_format.para_scroll(obj, suffix); +              doc_html ~= xhtml_format.para_scroll(obj, _txt, suffix);                break;              case "bookindex": -              doc_html ~= xhtml_format.para_scroll(obj, suffix); +              doc_html ~= xhtml_format.para_scroll(obj, _txt, suffix);                break;              case "blurb": -              doc_html ~= xhtml_format.para_scroll(obj, suffix); +              doc_html ~= xhtml_format.para_scroll(obj, _txt, suffix);                break;              default:                if ((doc_matters.opt_action_bool["debug"])) { @@ -211,6 +212,7 @@ template outputHTML() {      string suffix = ".html";      foreach (part; doc_matters.keys_seq.seg) {        foreach (obj; doc_abstraction[part]) { +        string _txt = xhtml_format.special_characters(obj, obj.text);          if (obj.is_a == "heading") {                            // all headings: frontmatter, body & backmatter            switch (obj.heading_lev_markup) {            case 0: .. case 3: @@ -235,8 +237,8 @@ template outputHTML() {                top_level_headings[3] = "";                goto default;              default: -              auto t = xhtml_format.heading_seg(obj, suffix); -              top_level_headings[obj.heading_lev_markup] = t[0]; +              auto t = xhtml_format.heading_seg(obj, _txt, suffix); +              top_level_headings[obj.heading_lev_markup] = t[0]; // should probably have different css tagging (fontsize etc)                break;              }              break; @@ -247,12 +249,12 @@ template outputHTML() {                // writeln(top_level_heading);                doc_html[segment_filename] ~= top_level_heading;              } -            auto t = xhtml_format.heading_seg(obj, suffix); +            auto t = xhtml_format.heading_seg(obj, _txt, suffix);              doc_html[segment_filename] ~= to!string(t[0]);              doc_html_endnotes[segment_filename] ~= t[1];              break;            case 5: .. case 7: -            auto t = xhtml_format.heading_seg(obj, suffix); +            auto t = xhtml_format.heading_seg(obj, _txt, suffix);              doc_html[segment_filename] ~= to!string(t[0]);              doc_html_endnotes[segment_filename] ~= t[1];              break; @@ -275,7 +277,7 @@ template outputHTML() {              case "para":                switch (obj.is_a) {                case "toc": -                auto t = xhtml_format.para_seg(obj, suffix); +                auto t = xhtml_format.para_seg(obj, _txt, suffix);                  doc_html[segment_filename] ~= to!string(t[0]);                  break;                default: @@ -297,7 +299,7 @@ template outputHTML() {              case "para":                switch (obj.is_a) {                case "para": -                auto t = xhtml_format.para_seg(obj, suffix); +                auto t = xhtml_format.para_seg(obj, _txt, suffix);                  doc_html[segment_filename] ~= to!string(t[0]);                  doc_html_endnotes[segment_filename] ~= t[1];                  break; @@ -311,32 +313,32 @@ template outputHTML() {              case "block":                switch (obj.is_a) {                case "quote": -                auto t = xhtml_format.quote_seg(obj, suffix); +                auto t = xhtml_format.quote_seg(obj, _txt, suffix);                  doc_html[segment_filename] ~= to!string(t[0]);                  doc_html_endnotes[segment_filename] ~= t[1];                  break;                case "group": -                auto t = xhtml_format.group_seg(obj, suffix); +                auto t = xhtml_format.group_seg(obj, _txt, suffix);                  doc_html[segment_filename] ~= to!string(t[0]);                  doc_html_endnotes[segment_filename] ~= t[1];                  break;                case "block": -                auto t = xhtml_format.block_seg(obj, suffix); +                auto t = xhtml_format.block_seg(obj, _txt, suffix);                  doc_html[segment_filename] ~= to!string(t[0]);                  doc_html_endnotes[segment_filename] ~= t[1];                  break;                case "poem":                  break;                case "verse": -                auto t = xhtml_format.verse_seg(obj, suffix); +                auto t = xhtml_format.verse_seg(obj, _txt, suffix);                  doc_html[segment_filename] ~= to!string(t[0]);                  doc_html_endnotes[segment_filename] ~= t[1]; // work on                  break;                case "code": -                doc_html[segment_filename] ~= xhtml_format.code(obj); +                doc_html[segment_filename] ~= xhtml_format.code(obj, _txt);                  break;                case "table": -                doc_html[segment_filename] ~= xhtml_format.table(obj); +                doc_html[segment_filename] ~= xhtml_format.table(obj, _txt);                  doc_html_endnotes[segment_filename] ~= "";                  break;                default: @@ -358,26 +360,26 @@ template outputHTML() {              case "para":                switch (obj.is_a) {                case "endnote": -                auto t = xhtml_format.para_seg(obj, suffix); +                auto t = xhtml_format.para_seg(obj, _txt, suffix);                  doc_html[segment_filename] ~= t[0];                  break;                case "glossary": -                auto t = xhtml_format.para_seg(obj, suffix); +                auto t = xhtml_format.para_seg(obj, _txt, suffix);                  doc_html[segment_filename] ~= t[0];                  doc_html_endnotes[segment_filename] ~= t[1];                  break;                case "bibliography": -                auto t = xhtml_format.para_seg(obj, suffix); +                auto t = xhtml_format.para_seg(obj, _txt, suffix);                  doc_html[segment_filename] ~= t[0];                  doc_html_endnotes[segment_filename] ~= t[1];                  break;                case "bookindex": -                auto t = xhtml_format.para_seg(obj, suffix); +                auto t = xhtml_format.para_seg(obj, _txt, suffix);                  doc_html[segment_filename] ~= t[0];                  doc_html_endnotes[segment_filename] ~= t[1];                  break;                case "blurb": -                auto t = xhtml_format.para_seg(obj, suffix); +                auto t = xhtml_format.para_seg(obj, _txt, suffix);                  doc_html[segment_filename] ~= t[0];                  doc_html_endnotes[segment_filename] ~= t[1];                  break; diff --git a/src/sdp/output_xmls.d b/src/sdp/output_xmls.d index 27b6585..347409e 100644 --- a/src/sdp/output_xmls.d +++ b/src/sdp/output_xmls.d @@ -31,12 +31,20 @@ template outputXHTMLs() {    mixin SiSUoutputRgxInit;    struct outputXHTMLs {      auto rgx = Rgx(); -    string special_characters(string _txt){ +    string special_characters(O)( +      auto return ref const O    obj, +      string                     _txt +    ){        _txt = (_txt) -        .replaceAll(rgx.xhtml_ampersand,    "&") -        .replaceAll(rgx.xhtml_less_than,    "<") -        .replaceAll(rgx.xhtml_greater_than, ">") -        .replaceAll(rgx.xhtml_line_break,   "<br />"); +        .replaceAll(rgx.xhtml_ampersand,    "&") +        .replaceAll(rgx.xhtml_quotation,    """) +        .replaceAll(rgx.xhtml_less_than,    "<") +        .replaceAll(rgx.xhtml_greater_than, ">") +        .replaceAll(rgx.nbsp_char,          " "); +      if (!(obj.is_a == "code")) { +        _txt = (_txt) +          .replaceAll(rgx.xhtml_line_break,   "<br />"); +      }        return _txt;      }      string font_face(string _txt){ @@ -313,26 +321,25 @@ template outputXHTMLs() {      }      auto inline_markup_scroll(O)(        auto return ref const O  obj, +      string                   _txt,        string                   _suffix = ".html",      ) { -      string _txt = obj.text; -      _txt = special_characters(_txt);        _txt = inline_links(obj, _txt, _suffix, "scroll");        _txt = inline_notes_scroll(obj, _txt);        return _txt;      }      auto inline_markup_seg(O)(        auto return ref const O  obj, +      string                   _txt,        string                   _suffix = ".html",      ) { -      string _txt = obj.text; -      _txt = special_characters(_txt);        _txt = inline_links(obj, _txt, _suffix, "seg");        auto t = inline_notes_seg(obj, _txt);        return t;      } -    auto toc(O)( +    auto toc_seg(O)(        auto return ref const O    obj, +      string                     _txt,      ) {        string o;        o = format(q"¶  <div class="substance"> @@ -343,7 +350,7 @@ template outputXHTMLs() {        obj.is_a,        obj.indent_hang,        obj.indent_base, -      obj.text +      _txt,        );        return o;      } @@ -395,19 +402,21 @@ template outputXHTMLs() {      }      auto heading_scroll(O)(        auto return ref const O    obj, +      string                     _txt,        string                     _suffix = ".html",      ) {        auto tags = _xhtml_anchor_tags(obj.anchor_tags); -      string _txt = inline_markup_scroll(obj, _suffix); // issue +      _txt = inline_markup_scroll(obj, _txt, _suffix); // issue        string o = heading(obj, _txt);        return o;      }      auto heading_seg(O)(        auto return ref const O    obj, +      string                     _txt,        string                     _suffix = ".html",      ) { -      auto t = inline_markup_seg(obj, _suffix); -      string _txt = t[0]; +      auto t = inline_markup_seg(obj, _txt, _suffix); +      _txt = t[0];        string[] _endnotes = t[1];        string o = heading(obj, _txt);        auto u = tuple( @@ -457,19 +466,21 @@ template outputXHTMLs() {      }      auto para_scroll(O)(        auto return ref const O    obj, +      string                     _txt,        string                     _suffix = ".html",      ) {        auto tags = _xhtml_anchor_tags(obj.anchor_tags); -      string _txt = inline_markup_scroll(obj, _suffix); // issue +      _txt = inline_markup_scroll(obj, _txt, _suffix); // issue        string o = para(obj, _txt);        return o;      }      auto para_seg(O)(        auto return ref const O    obj, +      string                     _txt,        string                     _suffix = ".html",      ) { -      auto t = inline_markup_seg(obj, _suffix); -      string _txt = to!string(t[0]); +      auto t = inline_markup_seg(obj, _txt, _suffix); +      _txt = to!string(t[0]);        string[] _endnotes = t[1];        string o = para(obj, _txt);        auto u = tuple( @@ -511,19 +522,21 @@ template outputXHTMLs() {      }      auto quote_scroll(O)(        auto return ref const O    obj, +      string                     _txt,        string                     _suffix = ".html",      ) {        auto tags = _xhtml_anchor_tags(obj.anchor_tags); -      string _txt = inline_markup_scroll(obj, _suffix); // issue +      _txt = inline_markup_scroll(obj, _txt, _suffix); // issue        string o = quote(obj, _txt);        return o;      }      auto quote_seg(O)(        auto return ref const O    obj, +      string                     _txt,        string                     _suffix = ".html",      ) { -      auto t = inline_markup_seg(obj, _suffix); -      string _txt = to!string(t[0]); +      auto t = inline_markup_seg(obj, _txt, _suffix); +      _txt = to!string(t[0]);        string[] _endnotes = t[1];        string o = quote(obj, _txt);        auto u = tuple( @@ -565,19 +578,21 @@ template outputXHTMLs() {      }      auto group_scroll(O)(        auto return ref const O    obj, +      string                     _txt,        string                     _suffix = ".html",      ) {        auto tags = _xhtml_anchor_tags(obj.anchor_tags); -      string _txt = inline_markup_scroll(obj, _suffix); // issue +      _txt = inline_markup_scroll(obj, _txt, _suffix); // issue        string o = group(obj, _txt);        return o;      }      auto group_seg(O)(        auto return ref const O    obj, +      string                     _txt,        string                     _suffix = ".html",      ) { -      auto t = inline_markup_seg(obj, _suffix); -      string _txt = to!string(t[0]); +      auto t = inline_markup_seg(obj, _txt, _suffix); +      _txt = to!string(t[0]);        string[] _endnotes = t[1];        string o = group(obj, _txt);        auto u = tuple( @@ -615,19 +630,21 @@ template outputXHTMLs() {      }      auto block_scroll(O)(        auto return ref const O    obj, +      string                     _txt,        string                     _suffix = ".html",      ) {        auto tags = _xhtml_anchor_tags(obj.anchor_tags); -      string _txt = inline_markup_scroll(obj, _suffix); // issue +      _txt = inline_markup_scroll(obj, _txt, _suffix); // issue        string o = block(obj, _txt);        return o;      }      auto block_seg(O)(        auto return ref const O    obj, +      string                     _txt,        string                     _suffix = ".html",      ) { -      auto t = inline_markup_seg(obj, _suffix); -      string _txt = to!string(t[0]); +      auto t = inline_markup_seg(obj, _txt, _suffix); +      _txt = to!string(t[0]);        string[] _endnotes = t[1];        string o = block(obj, _txt);        auto u = tuple( @@ -641,11 +658,6 @@ template outputXHTMLs() {        string                     _txt,      ) {        _txt = font_face(_txt); -      _txt = (_txt) -        .replaceAll(rgx.newline, "<br />\n") -        .replaceAll(rgx.two_spaces, " " ~ " " ~ " " ~ " ") -        .replaceAll(rgx.nbsp_and_space, " " ~ " ") -        .replaceAll(rgx.strip_br, "");        string o;        if (obj.obj_cite_number.empty) {            o = format(q"¶  <div class="substance"> @@ -670,19 +682,21 @@ template outputXHTMLs() {      }      auto verse_scroll(O)(        auto return ref const O    obj, +      string                     _txt,        string                     _suffix = ".html",      ) {        auto tags = _xhtml_anchor_tags(obj.anchor_tags); -      string _txt = inline_markup_scroll(obj, _suffix); // issue +      _txt = inline_markup_scroll(obj, _txt, _suffix); // issue        string o = verse(obj, _txt);        return o;      }      auto verse_seg(O)(        auto return ref const O    obj, +      string                     _txt,        string                     _suffix = ".html",      ) { -      auto t = inline_markup_seg(obj, _suffix); -      string _txt = to!string(t[0]); +      auto t = inline_markup_seg(obj, _txt, _suffix); +      _txt = to!string(t[0]);        string[] _endnotes = t[1];        string o = verse(obj, _txt);        auto u = tuple( @@ -726,8 +740,8 @@ template outputXHTMLs() {      }      auto table(O)(        auto return ref const O    obj, +      string                     _txt,      ) { -      string _txt = obj.text;        auto tags = _xhtml_anchor_tags(obj.anchor_tags);        _txt = font_face(_txt);        auto t = tablarize(obj, _txt); @@ -755,6 +769,7 @@ template outputXHTMLs() {      }      auto endnote(O)(        auto return ref const O    obj, +      string                     _txt,      ) {        string o;        o = format(q"¶    <p class="%s" indent="h%si%s"> @@ -763,20 +778,14 @@ template outputXHTMLs() {          obj.is_a,          obj.indent_hang,          obj.indent_base, -        obj.text +        _txt        );        return o;      }      auto code(O)(        auto return ref const O  obj, +      string                   _txt,      ) { -      string _txt = obj.text; -      _txt = (_txt) -        .replaceAll(rgx.xhtml_ampersand, "&") -        .replaceAll(rgx.xhtml_quotation, """) -        .replaceAll(rgx.xhtml_less_than, "<") -        .replaceAll(rgx.xhtml_greater_than, ">") -        .replaceAll(rgx.nbsp_char, " ");        string o;        if (obj.obj_cite_number.empty) {            o = format(q"¶  <div class="substance"> @@ -788,9 +797,7 @@ template outputXHTMLs() {        } else {          o = format(q"¶  <div class="substance">        <label class="ocn"><a href="#%s" class="lnkocn">%s</a></label> -      <p class="%s" id="%s"> -%s -      </p> +      <p class="%s" id="%s">%s</p>      </div>¶",            obj.obj_cite_number,            obj.obj_cite_number, | 
