diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/minimacro.cpp | 17 | ||||
| -rw-r--r-- | src/minimacro.h | 63 | ||||
| -rw-r--r-- | src/tafreader.cpp | 16 |
3 files changed, 93 insertions, 3 deletions
diff --git a/src/minimacro.cpp b/src/minimacro.cpp new file mode 100644 index 0000000..274c13b --- /dev/null +++ b/src/minimacro.cpp | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2007 Xagasoft, All rights reserved. | ||
| 3 | * | ||
| 4 | * This file is part of the libbu++ library and is released under the | ||
| 5 | * terms of the license contained in the file LICENSE. | ||
| 6 | */ | ||
| 7 | |||
| 8 | #include "bu/minimacro.h" | ||
| 9 | |||
| 10 | Bu::MiniMacro::MiniMacro() | ||
| 11 | { | ||
| 12 | } | ||
| 13 | |||
| 14 | Bu::MiniMacro::~MiniMacro() | ||
| 15 | { | ||
| 16 | } | ||
| 17 | |||
diff --git a/src/minimacro.h b/src/minimacro.h new file mode 100644 index 0000000..e136015 --- /dev/null +++ b/src/minimacro.h | |||
| @@ -0,0 +1,63 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2007 Xagasoft, All rights reserved. | ||
| 3 | * | ||
| 4 | * This file is part of the libbu++ library and is released under the | ||
| 5 | * terms of the license contained in the file LICENSE. | ||
| 6 | */ | ||
| 7 | |||
| 8 | #ifndef BU_MINI_MACRO_H | ||
| 9 | #define BU_MINI_MACRO_H | ||
| 10 | |||
| 11 | namespace Bu | ||
| 12 | { | ||
| 13 | /** | ||
| 14 | * A processor for Libbu++ brand Mini Macros. These are really simple, but | ||
| 15 | * still fairly flexible. It's mainly text replacement, but with a few | ||
| 16 | * extras like filter functions and conditional text segments. So far we | ||
| 17 | * don't support loops or anything, I'm not sure we ever will. | ||
| 18 | * | ||
| 19 | * Anatomy of a mini macro: | ||
| 20 | * - Every macro begins with a two character code, the first character is | ||
| 21 | * always '{', the second character determines the operation to perform. | ||
| 22 | * - If the '{' is followed by a character that is not valid it is not | ||
| 23 | * considered for expansion and the characters are copied to the output. | ||
| 24 | * - Every macro ends with a closing '}' | ||
| 25 | * - Macro types: | ||
| 26 | * - '=': variable replacement. The '=' is immediatley followed by the | ||
| 27 | * name of the variable to replace, then any number of optional filter | ||
| 28 | * segments. | ||
| 29 | * - '?': conditional text. The '?' is immediately followed by the | ||
| 30 | * variable to test. This works two ways, the variable can be alone, in | ||
| 31 | * which case it's existance is tested, or it can be followed by a "=" | ||
| 32 | * and a string to compare to. This is then followed by a text segment | ||
| 33 | * that will be used if the test is true, and an optional text segment | ||
| 34 | * to be used if the test is false. | ||
| 35 | * - Segments: | ||
| 36 | * - Each segment is seperated by a colon. | ||
| 37 | * - Filter segments give the name of the filter, followed by | ||
| 38 | * parenthesies. Parameters may be provided within the parenthesies. | ||
| 39 | * - Text segments should always be quoted, but may contain any characters | ||
| 40 | * within the quotes, backslash is used as per C/ANSI/ISO standard. | ||
| 41 | * You can also quote any text using [" "] instead of quotes, which | ||
| 42 | * allows for nested strings. The [" token is only recognised within | ||
| 43 | * a macro. | ||
| 44 | * | ||
| 45 | *@verbatim | ||
| 46 | {=name:tolower()} | ||
| 47 | {=name:ccsplit("_"):toupper()} | ||
| 48 | {?name:"name exists and is {=name}"} | ||
| 49 | {?name:"{=name}":"no name!"} | ||
| 50 | {?name="bob":"You're named bob!":"Who are you? I only know bob..."} | ||
| 51 | @endverbatim | ||
| 52 | */ | ||
| 53 | class MiniMacro | ||
| 54 | { | ||
| 55 | public: | ||
| 56 | MiniMacro(); | ||
| 57 | virtual ~MiniMacro(); | ||
| 58 | |||
| 59 | private: | ||
| 60 | }; | ||
| 61 | }; | ||
| 62 | |||
| 63 | #endif | ||
diff --git a/src/tafreader.cpp b/src/tafreader.cpp index aaac8d7..7054581 100644 --- a/src/tafreader.cpp +++ b/src/tafreader.cpp | |||
| @@ -40,7 +40,7 @@ Bu::TafGroup *Bu::TafReader::readGroup() | |||
| 40 | if( c != '}' ) | 40 | if( c != '}' ) |
| 41 | throw TafException("Expected '}'"); | 41 | throw TafException("Expected '}'"); |
| 42 | 42 | ||
| 43 | next(); | 43 | //next(); |
| 44 | 44 | ||
| 45 | return pGroup; | 45 | return pGroup; |
| 46 | } | 46 | } |
| @@ -184,7 +184,17 @@ bool Bu::TafReader::isws() | |||
| 184 | 184 | ||
| 185 | void Bu::TafReader::next() | 185 | void Bu::TafReader::next() |
| 186 | { | 186 | { |
| 187 | c = la; | 187 | if( c == '}' ) |
| 188 | sIn.read( &la, 1 ); | 188 | { |
| 189 | sIn.read( &c, 1 ); | ||
| 190 | if( c != '}' ) | ||
| 191 | sIn.read( &la, 1 ); | ||
| 192 | } | ||
| 193 | else | ||
| 194 | { | ||
| 195 | c = la; | ||
| 196 | if( c != '}' ) | ||
| 197 | sIn.read( &la, 1 ); | ||
| 198 | } | ||
| 189 | } | 199 | } |
| 190 | 200 | ||
