diff options
Diffstat (limited to 'src/producer.hpp')
-rw-r--r-- | src/producer.hpp | 180 |
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(); |