From 3047ed6100a56a529f26e43ada0a3fc3c3815c3e Mon Sep 17 00:00:00 2001 From: Aleksey Veresov Date: Fri, 8 Nov 2019 19:49:40 +0300 Subject: [texo] Full rewrite of inner representation. --- src/html.cpp | 235 +++++++++++++++++++++++++---------------------------------- 1 file changed, 100 insertions(+), 135 deletions(-) (limited to 'src/html.cpp') 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
\n");
 }
 
-void TexoProducerHTML::Put(const TexoHeader &piece)
+bool TexoProducerHTML::StartHeader(int level)
 {
-    Close();
-    if (piece.level <= 1) {
-        exporter.Put("\n
\n"); - opened_block = header_6; - } else if (piece.level == 2) { - exporter.Put("\n
\n"); - opened_block = header_5; - } else if (piece.level == 3) { - exporter.Put("\n

\n"); - opened_block = header_4; - } else if (piece.level == 4) { - exporter.Put("\n

\n"); - opened_block = header_3; - } else if (piece.level == 5) { - exporter.Put("\n

\n"); - opened_block = header_2; + if (level <= 1) { + return exporter.Put("\n

\n"); + } else if (level == 2) { + return exporter.Put("\n
\n"); + } else if (level == 3) { + return exporter.Put("\n

\n"); + } else if (level == 4) { + return exporter.Put("\n

\n"); + } else if (level == 5) { + return exporter.Put("\n

\n"); } else { - exporter.Put("\n

\n"); - opened_block = header_1; + return exporter.Put("\n

\n"); } } -void TexoProducerHTML::Put(const TexoParagraph &piece) +bool TexoProducerHTML::StartParagraph() { - Close(); - opened_block = paragraph; - exporter.Put("\n

\n"); + return exporter.Put("\n

\n"); } -void TexoProducerHTML::Put(const TexoCode &piece) +bool TexoProducerHTML::StartQuote() { - Close(); - opened_block = code; - exporter.Put("\n

\n");
+    return exporter.Put("\n

\n"); } -void TexoProducerHTML::Put(const TexoQuote &piece) +bool TexoProducerHTML::CloseCode() { - Close(); - opened_block = quote; - exporter.Put("\n

\n"); + return exporter.Put("\n

\n"); } -void TexoProducerHTML::Put(const TexoMono &piece) +bool TexoProducerHTML::CloseHeader(int level) { - static bool closing = false; - if (closing) { - exporter.Put(""); + if (level <= 1) { + return exporter.Put("\n

\n"); + } else if (level == 2) { + return exporter.Put("\n\n"); + } else if (level == 3) { + return exporter.Put("\n\n"); + } else if (level == 4) { + return exporter.Put("\n\n"); + } else if (level == 5) { + return exporter.Put("\n\n"); } else { - exporter.Put(""); + return exporter.Put("\n\n"); } - closing = !closing; } -void TexoProducerHTML::Put(const TexoBold &piece) +bool TexoProducerHTML::CloseParagraph() { - static bool closing = false; - if (closing) { - exporter.Put(""); - } else { - exporter.Put(""); - } - closing = !closing; + return exporter.Put("\n

\n"); } -void TexoProducerHTML::Put(const TexoItalic &piece) +bool TexoProducerHTML::CloseQuote() { - static bool closing = false; - if (closing) { - exporter.Put(""); - } else { - exporter.Put(""); - } - closing = !closing; + return exporter.Put("\n

\n"); } -void TexoProducerHTML::Put(const TexoUnderline &piece) + +bool TexoProducerHTML::StartBold() { return exporter.Put(""); } +bool TexoProducerHTML::StartItalic() { return exporter.Put(""); } +bool TexoProducerHTML::StartMono() { return exporter.Put(""); } +bool TexoProducerHTML::StartStrike() { return exporter.Put(""); } +bool TexoProducerHTML::StartUnderline() { return exporter.Put(""); } + +bool TexoProducerHTML::CloseBold() { return exporter.Put(""); } +bool TexoProducerHTML::CloseItalic() { return exporter.Put(""); } +bool TexoProducerHTML::CloseMono() { return exporter.Put(""); } +bool TexoProducerHTML::CloseStrike() { return exporter.Put(""); } +bool TexoProducerHTML::CloseUnderline() { return exporter.Put(""); } + +bool TexoProducerHTML::StartLink( + const ScriptVariable &link, + const ScriptVariable &title +) { - static bool closing = false; - if (closing) { - exporter.Put(""); - } else { - exporter.Put(""); + bool ok = true; + if (link != "") { + 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(""); + if (link != "") { + return exporter.Put(""); } else { - exporter.Put(""); + 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(""); - } - exporter.Put("");
-            exporter.Put(piece.alt);
-        }
-        if (title) {
-            exporter.Put(""); - if (link) { - exporter.Put(""); - } - } -} -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(""); - exporter.Put(piece.text); - exporter.Put(""); + ok = ok && exporter.Put("'/>"); } + return ok; } -void TexoProducerHTML::Put(const TexoHorizontalRule &piece) -{ - exporter.Put("\n
\n"); -} - -void TexoProducerHTML::Close() +bool TexoProducerHTML::TruePutHorizontalRule() { - switch (opened_block) { - case none: break; - case header_1: exporter.Put("\n\n"); break; - case header_2: exporter.Put("\n\n"); break; - case header_3: exporter.Put("\n\n"); break; - case header_4: exporter.Put("\n\n"); break; - case header_5: exporter.Put("\n\n"); break; - case header_6: exporter.Put("\n\n"); break; - case paragraph: exporter.Put("\n

\n"); break; - case quote: exporter.Put("\n

\n"); break; - case code: exporter.Put("\n
\n"); break; - } + return exporter.Put("\n
\n"); } -- cgit v1.2.3