summaryrefslogtreecommitdiff
path: root/src/producer.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/producer.hpp')
-rw-r--r--src/producer.hpp180
1 files changed, 134 insertions, 46 deletions
diff --git a/src/producer.hpp b/src/producer.hpp
index f55cb91..6aacddf 100644
--- a/src/producer.hpp
+++ b/src/producer.hpp
@@ -10,7 +10,7 @@
*/
class TexoProducer {
public:
- TexoProducer(TexoExporter &exporter); // Setup exporter used for output.
+ TexoProducer(TexoExporter & exporter); // Setup exporter used for output.
virtual bool End(); // Notify producer, what input is ended.
@@ -37,22 +37,17 @@ public:
// Switch link to given or switch it off, if no one is given.
virtual bool Link(
- const ScriptVariable &link,
- const ScriptVariable &title
- );
+ const ScriptVariable & link, const ScriptVariable & title);
virtual bool Link();
- virtual bool PutImage(
- const ScriptVariable &src,
- const ScriptVariable &alt,
- const ScriptVariable &title
- );
+ virtual bool PutImage(const ScriptVariable & src,
+ const ScriptVariable & alt, const ScriptVariable & title);
virtual bool PutHorizontalRule();
protected:
- TexoExporter &exporter;
+ TexoExporter & exporter;
};
@@ -64,7 +59,7 @@ protected:
*/
class TexoProducerStrict: public TexoProducer {
public:
- TexoProducerStrict(TexoExporter &exporter);
+ TexoProducerStrict(TexoExporter & exporter);
bool End();
@@ -85,14 +80,11 @@ public:
bool Strike();
bool Underline();
- bool Link(const ScriptVariable &path, const ScriptVariable &title);
+ bool Link(const ScriptVariable & path, const ScriptVariable & title);
bool Link();
- bool PutImage(
- const ScriptVariable &src,
- const ScriptVariable &alt,
- const ScriptVariable &title
- );
+ bool PutImage(const ScriptVariable & src, const ScriptVariable & alt,
+ const ScriptVariable & title);
bool PutHorizontalRule();
@@ -123,47 +115,30 @@ protected:
virtual bool CloseUnderline() = 0;
virtual bool StartLink(
- const ScriptVariable &link,
- const ScriptVariable &title
- ) = 0;
+ const ScriptVariable & link, const ScriptVariable & title)
+ = 0;
virtual bool CloseLink(
- const ScriptVariable &link,
- const ScriptVariable &title
- ) = 0;
+ const ScriptVariable & link, const ScriptVariable & title)
+ = 0;
- virtual bool TruePutImage(
- const ScriptVariable &src,
- const ScriptVariable &alt,
- const ScriptVariable &title
- ) = 0;
+ virtual bool TruePutImage(const ScriptVariable & src,
+ const ScriptVariable & alt, const ScriptVariable & title)
+ = 0;
virtual bool TruePutHorizontalRule() = 0;
private:
- enum Block {
- block_none = 0,
- code,
- header,
- paragraph,
- quote
- } block;
+ enum Block { block_none = 0, code, header, paragraph, quote } block;
int header_level;
- enum Mod {
- bold,
- italic,
- link,
- mono,
- strike,
- underline
- } mods[6];
+ enum Mod { bold, italic, link, mono, strike, underline } mods[6];
int opened;
- const ScriptVariable *link_link;
- const ScriptVariable *link_title;
+ const ScriptVariable * link_link;
+ const ScriptVariable * link_title;
bool Start(); // Open paragraph if no block is opened.
@@ -178,7 +153,120 @@ private:
// Close all opened mods sequentially, down to (including) last,
// returning count of closed mods, or negative number in case of error.
- int CloseMods(Mod last);
+ int CloseMods(Mod last);
+
+ // Close all opened mods.
+ bool CloseMods();
+
+ bool Reopen(int closed);
+
+ bool IsOpened(Mod mod) const;
+};
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Texo Strict Producer
+ * Converts switch-signal interface of Texo Producer into
+ * sequence of start/close signals with disjoint modificator sections,
+ * as well as block sections, which are provided on top level.
+ */
+class TexoProducerStrict: public TexoProducer {
+public:
+ TexoProducerStrict(TexoExporter & exporter);
+
+
+ bool End();
+
+
+ bool Put(char c);
+
+
+ bool Code();
+ bool Header(int level);
+ bool Paragraph();
+ bool Quote();
+
+
+ bool Bold();
+ bool Italic();
+ bool Mono();
+ bool Strike();
+ bool Underline();
+
+ bool Link(const ScriptVariable & path, const ScriptVariable & title);
+ bool Link();
+
+ bool PutImage(const ScriptVariable & src, const ScriptVariable & alt,
+ const ScriptVariable & title);
+ bool PutHorizontalRule();
+
+
+protected:
+ virtual bool TruePut(char c) = 0;
+
+ virtual bool StartCode() = 0;
+ virtual bool StartHeader(int level) = 0;
+ virtual bool StartParagraph() = 0;
+ virtual bool StartQuote() = 0;
+
+ virtual bool CloseCode() = 0;
+ virtual bool CloseHeader(int level) = 0;
+ virtual bool CloseParagraph() = 0;
+ virtual bool CloseQuote() = 0;
+
+
+ virtual bool StartBold() = 0;
+ virtual bool StartItalic() = 0;
+ virtual bool StartMono() = 0;
+ virtual bool StartStrike() = 0;
+ virtual bool StartUnderline() = 0;
+
+ virtual bool CloseBold() = 0;
+ virtual bool CloseItalic() = 0;
+ virtual bool CloseMono() = 0;
+ virtual bool CloseStrike() = 0;
+ virtual bool CloseUnderline() = 0;
+
+ virtual bool StartLink(
+ const ScriptVariable & link, const ScriptVariable & title)
+ = 0;
+ virtual bool CloseLink(
+ const ScriptVariable & link, const ScriptVariable & title)
+ = 0;
+
+
+ virtual bool TruePutImage(const ScriptVariable & src,
+ const ScriptVariable & alt, const ScriptVariable & title)
+ = 0;
+ virtual bool TruePutHorizontalRule() = 0;
+
+
+private:
+ enum Block { block_none = 0, code, header, paragraph, quote } block;
+
+ int header_level;
+
+
+ enum Mod { bold, italic, link, mono, strike, underline } mods[6];
+ int opened;
+
+ const ScriptVariable * link_link;
+ const ScriptVariable * link_title;
+
+
+ bool Start(); // Open paragraph if no block is opened.
+
+ bool CloseBlock();
+
+ bool SwitchMod(Mod mod);
+
+ bool OpenMod(Mod mod);
+
+ bool CloseMod(Mod mod);
+
+ // Close all opened mods sequentially, down to (including) last,
+ // returning count of closed mods, or negative number in case of error.
+ int CloseMods(Mod last);
// Close all opened mods.
bool CloseMods();