diff options
author | Aleksey Veresov <aleksey@veresov.pro> | 2019-11-08 19:49:40 +0300 |
---|---|---|
committer | Aleksey Veresov <aleksey@veresov.pro> | 2019-11-08 19:49:40 +0300 |
commit | ed7a63015c1583d5544ac18bbaccaedc95f3e5e3 (patch) | |
tree | 9648d5a74bae9cbd90670a8bfa0af47189e4536f /src/html.cpp | |
parent | c6419eed96f2832b1de2b94d711552efaa9b172d (diff) | |
download | texo-ed7a63015c1583d5544ac18bbaccaedc95f3e5e3.tar texo-ed7a63015c1583d5544ac18bbaccaedc95f3e5e3.tar.xz texo-ed7a63015c1583d5544ac18bbaccaedc95f3e5e3.zip |
[texo] Full rewrite of inner representation.
Diffstat (limited to 'src/html.cpp')
-rw-r--r-- | src/html.cpp | 235 |
1 files changed, 100 insertions, 135 deletions
diff --git a/src/html.cpp b/src/html.cpp index f40b8bd..ed67781 100644 --- a/src/html.cpp +++ b/src/html.cpp @@ -2,188 +2,153 @@ TexoProducerHTML::TexoProducerHTML(TexoExporter &exporter): - TexoProducer(exporter), opened_block(none) + TexoProducerStrict(exporter) {} -void TexoProducerHTML::End() + +bool TexoProducerHTML::TruePut(char c) { - Close(); - opened_block = none; + switch (c) { + case '<': return exporter.Put("<"); break; + case '>': return exporter.Put(">"); break; + case '&': return exporter.Put("&"); break; + default: return exporter.Put(c); + } } -void TexoProducerHTML::Put(const Texo &piece) + +bool TexoProducerHTML::StartCode() { - switch (piece.c) { - case '<': exporter.Put("<"); break; - case '>': exporter.Put(">"); break; - case '&': exporter.Put("&"); break; - default: exporter.Put(piece.c); break; - } + return exporter.Put("\n<pre>\n"); } -void TexoProducerHTML::Put(const TexoHeader &piece) +bool TexoProducerHTML::StartHeader(int level) { - Close(); - if (piece.level <= 1) { - exporter.Put("\n<h6>\n"); - opened_block = header_6; - } else if (piece.level == 2) { - exporter.Put("\n<h5>\n"); - opened_block = header_5; - } else if (piece.level == 3) { - exporter.Put("\n<h4>\n"); - opened_block = header_4; - } else if (piece.level == 4) { - exporter.Put("\n<h3>\n"); - opened_block = header_3; - } else if (piece.level == 5) { - exporter.Put("\n<h2>\n"); - opened_block = header_2; + if (level <= 1) { + return exporter.Put("\n<h6>\n"); + } else if (level == 2) { + return exporter.Put("\n<h5>\n"); + } else if (level == 3) { + return exporter.Put("\n<h4>\n"); + } else if (level == 4) { + return exporter.Put("\n<h3>\n"); + } else if (level == 5) { + return exporter.Put("\n<h2>\n"); } else { - exporter.Put("\n<h1>\n"); - opened_block = header_1; + return exporter.Put("\n<h1>\n"); } } -void TexoProducerHTML::Put(const TexoParagraph &piece) +bool TexoProducerHTML::StartParagraph() { - Close(); - opened_block = paragraph; - exporter.Put("\n<p>\n"); + return exporter.Put("\n<p>\n"); } -void TexoProducerHTML::Put(const TexoCode &piece) +bool TexoProducerHTML::StartQuote() { - Close(); - opened_block = code; - exporter.Put("\n<pre>\n"); + return exporter.Put("\n<blockquote><p>\n"); } -void TexoProducerHTML::Put(const TexoQuote &piece) +bool TexoProducerHTML::CloseCode() { - Close(); - opened_block = quote; - exporter.Put("\n<blockquote><p>\n"); + return exporter.Put("\n</pre>\n"); } -void TexoProducerHTML::Put(const TexoMono &piece) +bool TexoProducerHTML::CloseHeader(int level) { - static bool closing = false; - if (closing) { - exporter.Put("</code>"); + if (level <= 1) { + return exporter.Put("\n</h6>\n"); + } else if (level == 2) { + return exporter.Put("\n</h5>\n"); + } else if (level == 3) { + return exporter.Put("\n</h4>\n"); + } else if (level == 4) { + return exporter.Put("\n</h3>\n"); + } else if (level == 5) { + return exporter.Put("\n</h2>\n"); } else { - exporter.Put("<code>"); + return exporter.Put("\n</h1>\n"); } - closing = !closing; } -void TexoProducerHTML::Put(const TexoBold &piece) +bool TexoProducerHTML::CloseParagraph() { - static bool closing = false; - if (closing) { - exporter.Put("</b>"); - } else { - exporter.Put("<b>"); - } - closing = !closing; + return exporter.Put("\n</p>\n"); } -void TexoProducerHTML::Put(const TexoItalic &piece) +bool TexoProducerHTML::CloseQuote() { - static bool closing = false; - if (closing) { - exporter.Put("</i>"); - } else { - exporter.Put("<i>"); - } - closing = !closing; + return exporter.Put("\n</p></blockquote>\n"); } -void TexoProducerHTML::Put(const TexoUnderline &piece) + +bool TexoProducerHTML::StartBold() { return exporter.Put("<b>"); } +bool TexoProducerHTML::StartItalic() { return exporter.Put("<i>"); } +bool TexoProducerHTML::StartMono() { return exporter.Put("<code>"); } +bool TexoProducerHTML::StartStrike() { return exporter.Put("<del>"); } +bool TexoProducerHTML::StartUnderline() { return exporter.Put("<ins>"); } + +bool TexoProducerHTML::CloseBold() { return exporter.Put("</b>"); } +bool TexoProducerHTML::CloseItalic() { return exporter.Put("</i>"); } +bool TexoProducerHTML::CloseMono() { return exporter.Put("</code>"); } +bool TexoProducerHTML::CloseStrike() { return exporter.Put("</del>"); } +bool TexoProducerHTML::CloseUnderline() { return exporter.Put("</ins>"); } + +bool TexoProducerHTML::StartLink( + const ScriptVariable &link, + const ScriptVariable &title +) { - static bool closing = false; - if (closing) { - exporter.Put("</ins>"); - } else { - exporter.Put("<ins>"); + bool ok = true; + if (link != "") { + ok = ok && exporter.Put("<a href='"); + ok = ok && exporter.Put(link); + if (title != "") { + ok = ok && exporter.Put("' title='"); + ok = ok && exporter.Put(title); + } + ok = ok && exporter.Put("'>"); } - closing = !closing; + return ok; } -void TexoProducerHTML::Put(const TexoStrike &piece) +bool TexoProducerHTML::CloseLink( + const ScriptVariable &link, + const ScriptVariable &title +) { - static bool closing = false; - if (closing) { - exporter.Put("</del>"); + if (link != "") { + return exporter.Put("</a>"); } else { - exporter.Put("<del>"); + return true; } - closing = !closing; } -void TexoProducerHTML::Put(const TexoImage &piece) -{ - if (piece.path != "") { - bool link = piece.link != ""; - bool title = piece.title != ""; - if (link) { - exporter.Put("<a href='"); - exporter.Put(piece.link); - if (title) { - exporter.Put("' title='"); - exporter.Put(piece.title); - } - exporter.Put("'>"); - } - exporter.Put("<img src='"); - exporter.Put(piece.path); - if (piece.alt != "") { - exporter.Put("' alt='"); - exporter.Put(piece.alt); - } - if (title) { - exporter.Put("' title='"); - exporter.Put(piece.title); - } - exporter.Put("'/>"); - if (link) { - exporter.Put("</a>"); - } - } -} -void TexoProducerHTML::Put(const TexoLink &piece) +bool TexoProducerHTML::TruePutImage( + const ScriptVariable &src, + const ScriptVariable &alt, + const ScriptVariable &title +) { - if (piece.text != "" && piece.link != "") { - exporter.Put("<a href='"); - exporter.Put(piece.link); - if (piece.title != "") { - exporter.Put("' title='"); - exporter.Put(piece.title); + bool ok = true; + if (src != "") { + ok = ok && exporter.Put("<img src='"); + ok = ok && exporter.Put(src); + if (alt != "") { + ok = ok && exporter.Put("' alt='"); + ok = ok && exporter.Put(alt); + } + if (title != "") { + ok = ok && exporter.Put("' title='"); + ok = ok && exporter.Put(title); } - exporter.Put("'>"); - exporter.Put(piece.text); - exporter.Put("</a>"); + ok = ok && exporter.Put("'/>"); } + return ok; } -void TexoProducerHTML::Put(const TexoHorizontalRule &piece) -{ - exporter.Put("\n<hr/>\n"); -} - -void TexoProducerHTML::Close() +bool TexoProducerHTML::TruePutHorizontalRule() { - switch (opened_block) { - case none: break; - case header_1: exporter.Put("\n</h1>\n"); break; - case header_2: exporter.Put("\n</h2>\n"); break; - case header_3: exporter.Put("\n</h3>\n"); break; - case header_4: exporter.Put("\n</h4>\n"); break; - case header_5: exporter.Put("\n</h5>\n"); break; - case header_6: exporter.Put("\n</h6>\n"); break; - case paragraph: exporter.Put("\n</p>\n"); break; - case quote: exporter.Put("\n</p></blockquote>\n"); break; - case code: exporter.Put("\n</pre>\n"); break; - } + return exporter.Put("\n<hr/>\n"); } |