summaryrefslogtreecommitdiff
path: root/src/html.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/html.cpp')
-rw-r--r--src/html.cpp235
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("&lt;"); break;
+ case '>': return exporter.Put("&gt;"); break;
+ case '&': return exporter.Put("&amp;"); break;
+ default: return exporter.Put(c);
+ }
}
-void TexoProducerHTML::Put(const Texo &piece)
+
+bool TexoProducerHTML::StartCode()
{
- switch (piece.c) {
- case '<': exporter.Put("&lt;"); break;
- case '>': exporter.Put("&gt;"); break;
- case '&': exporter.Put("&amp;"); 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");
}