annotate 3rdparty/maddy/paragraphparser.h @ 0:a4671277546c tip

created the repository for the thymian project
author ferencd
date Tue, 17 Aug 2021 11:19:54 +0200
parents
children
rev   line source
ferencd@0 1 /*
ferencd@0 2 * This project is licensed under the MIT license. For more information see the
ferencd@0 3 * LICENSE file.
ferencd@0 4 */
ferencd@0 5 #pragma once
ferencd@0 6
ferencd@0 7 // -----------------------------------------------------------------------------
ferencd@0 8
ferencd@0 9 #include <functional>
ferencd@0 10 #include <string>
ferencd@0 11
ferencd@0 12 #include "maddy/blockparser.h"
ferencd@0 13
ferencd@0 14 // -----------------------------------------------------------------------------
ferencd@0 15
ferencd@0 16 namespace maddy {
ferencd@0 17
ferencd@0 18 // -----------------------------------------------------------------------------
ferencd@0 19
ferencd@0 20 /**
ferencd@0 21 * ParagraphParser
ferencd@0 22 *
ferencd@0 23 * @class
ferencd@0 24 */
ferencd@0 25 class ParagraphParser : public BlockParser
ferencd@0 26 {
ferencd@0 27 public:
ferencd@0 28 /**
ferencd@0 29 * ctor
ferencd@0 30 *
ferencd@0 31 * @method
ferencd@0 32 * @param {std::function<void(std::string&)>} parseLineCallback
ferencd@0 33 * @param {std::function<std::shared_ptr<BlockParser>(const std::string& line)>} getBlockParserForLineCallback
ferencd@0 34 */
ferencd@0 35 ParagraphParser(
ferencd@0 36 std::function<void(std::string&)> parseLineCallback,
ferencd@0 37 std::function<std::shared_ptr<BlockParser>(const std::string& line)> getBlockParserForLineCallback
ferencd@0 38 )
ferencd@0 39 : BlockParser(parseLineCallback, getBlockParserForLineCallback)
ferencd@0 40 , isStarted(false)
ferencd@0 41 , isFinished(false)
ferencd@0 42 {}
ferencd@0 43
ferencd@0 44 /**
ferencd@0 45 * IsStartingLine
ferencd@0 46 *
ferencd@0 47 * If the line is not empty, it will be a paragraph.
ferencd@0 48 *
ferencd@0 49 * This block parser has to always run as the last one!
ferencd@0 50 *
ferencd@0 51 * @method
ferencd@0 52 * @param {const std::string&} line
ferencd@0 53 * @return {bool}
ferencd@0 54 */
ferencd@0 55 static bool
ferencd@0 56 IsStartingLine(const std::string& line)
ferencd@0 57 {
ferencd@0 58 return !line.empty();
ferencd@0 59 }
ferencd@0 60
ferencd@0 61 /**
ferencd@0 62 * IsFinished
ferencd@0 63 *
ferencd@0 64 * An empty line will end the paragraph.
ferencd@0 65 *
ferencd@0 66 * @method
ferencd@0 67 * @return {bool}
ferencd@0 68 */
ferencd@0 69 bool
ferencd@0 70 IsFinished() const override
ferencd@0 71 {
ferencd@0 72 return this->isFinished;
ferencd@0 73 }
ferencd@0 74
ferencd@0 75 protected:
ferencd@0 76 bool
ferencd@0 77 isInlineBlockAllowed() const override
ferencd@0 78 {
ferencd@0 79 return false;
ferencd@0 80 }
ferencd@0 81
ferencd@0 82 bool
ferencd@0 83 isLineParserAllowed() const override
ferencd@0 84 {
ferencd@0 85 return true;
ferencd@0 86 }
ferencd@0 87
ferencd@0 88 void
ferencd@0 89 parseBlock(std::string& line) override
ferencd@0 90 {
ferencd@0 91 if (!this->isStarted)
ferencd@0 92 {
ferencd@0 93 line = "<p>" + line + " ";
ferencd@0 94 this->isStarted = true;
ferencd@0 95 return;
ferencd@0 96 }
ferencd@0 97
ferencd@0 98 if (line.empty())
ferencd@0 99 {
ferencd@0 100 line += "</p>";
ferencd@0 101 this->isFinished = true;
ferencd@0 102 return;
ferencd@0 103 }
ferencd@0 104
ferencd@0 105 line += " ";
ferencd@0 106 }
ferencd@0 107
ferencd@0 108 private:
ferencd@0 109 bool isStarted;
ferencd@0 110 bool isFinished;
ferencd@0 111 }; // class ParagraphParser
ferencd@0 112
ferencd@0 113 // -----------------------------------------------------------------------------
ferencd@0 114
ferencd@0 115 } // namespace maddy