Mercurial > thymian
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 |
