diff options
Diffstat (limited to 'src/smlrenderervt100.cpp')
-rw-r--r-- | src/smlrenderervt100.cpp | 74 |
1 files changed, 65 insertions, 9 deletions
diff --git a/src/smlrenderervt100.cpp b/src/smlrenderervt100.cpp index 2b59d5f..5ab3d82 100644 --- a/src/smlrenderervt100.cpp +++ b/src/smlrenderervt100.cpp | |||
@@ -63,11 +63,67 @@ Bu::String SmlRendererVt100::getStyle( const StyleStack &sStyle ) | |||
63 | case stGreen: | 63 | case stGreen: |
64 | sRet += "\x1B[1;32m"; | 64 | sRet += "\x1B[1;32m"; |
65 | break; | 65 | break; |
66 | |||
67 | case stYellow: | ||
68 | sRet += "\x1B[1;33m"; | ||
69 | break; | ||
70 | |||
71 | case stBlue: | ||
72 | sRet += "\x1B[1;34m"; | ||
73 | break; | ||
74 | |||
75 | case stMagenta: | ||
76 | sRet += "\x1B[1;35m"; | ||
77 | break; | ||
78 | |||
79 | case stCyan: | ||
80 | sRet += "\x1B[1;36m"; | ||
81 | break; | ||
82 | |||
83 | case stWhite: | ||
84 | sRet += "\x1B[1;37m"; | ||
85 | break; | ||
66 | } | 86 | } |
67 | 87 | ||
68 | return sRet; | 88 | return sRet; |
69 | } | 89 | } |
70 | 90 | ||
91 | SmlRendererVt100::Style SmlRendererVt100::strToStyle( const Bu::String &sTag ) | ||
92 | { | ||
93 | if( sTag == "green" ) | ||
94 | { | ||
95 | return stGreen; | ||
96 | } | ||
97 | else if( sTag == "red" ) | ||
98 | { | ||
99 | return stRed; | ||
100 | } | ||
101 | else if( sTag == "yellow" ) | ||
102 | { | ||
103 | return stYellow; | ||
104 | } | ||
105 | else if( sTag == "blue" ) | ||
106 | { | ||
107 | return stBlue; | ||
108 | } | ||
109 | else if( sTag == "magenta" ) | ||
110 | { | ||
111 | return stMagenta; | ||
112 | } | ||
113 | else if( sTag == "cyan" ) | ||
114 | { | ||
115 | return stCyan; | ||
116 | } | ||
117 | else if( sTag == "white" ) | ||
118 | { | ||
119 | return stWhite; | ||
120 | } | ||
121 | else | ||
122 | { | ||
123 | return stNone; | ||
124 | } | ||
125 | } | ||
126 | |||
71 | void SmlRendererVt100::render( Bu::Formatter &f, const SmlNode *pNode ) | 127 | void SmlRendererVt100::render( Bu::Formatter &f, const SmlNode *pNode ) |
72 | { | 128 | { |
73 | Bu::String sCurLine; | 129 | Bu::String sCurLine; |
@@ -93,11 +149,16 @@ void SmlRendererVt100::render( Bu::Formatter &f, const SmlNode *pNode ) | |||
93 | { | 149 | { |
94 | // f << "Pop'd: " << (*sNode.peek())->getText() << f.nl; | 150 | // f << "Pop'd: " << (*sNode.peek())->getText() << f.nl; |
95 | Bu::String sTag = (*sNode.peek())->getText(); | 151 | Bu::String sTag = (*sNode.peek())->getText(); |
96 | if( sTag == "green" || sTag == "red" ) | 152 | Style s = strToStyle( sTag ); |
153 | if( sStyle.peek() == s ) | ||
97 | { | 154 | { |
98 | sStyle.pop(); | 155 | sStyle.pop(); |
99 | sNextToken += getStyle( sStyle ); | 156 | sNextToken += getStyle( sStyle ); |
100 | } | 157 | } |
158 | else | ||
159 | { | ||
160 | throw Bu::ExceptionBase("Close tag doesn't match open tag."); | ||
161 | } | ||
101 | sNode.peek()++; | 162 | sNode.peek()++; |
102 | continue; | 163 | continue; |
103 | } | 164 | } |
@@ -199,14 +260,9 @@ void SmlRendererVt100::render( Bu::Formatter &f, const SmlNode *pNode ) | |||
199 | { | 260 | { |
200 | // f << "Push'd: " << pNode->getText() << f.nl; | 261 | // f << "Push'd: " << pNode->getText() << f.nl; |
201 | Bu::String sTag = pNode->getText(); | 262 | Bu::String sTag = pNode->getText(); |
202 | if( sTag == "green" ) | 263 | Style s = strToStyle( sTag ); |
203 | { | 264 | if( s != 0 ) |
204 | sStyle.push( stGreen ); | 265 | sStyle.push( s ); |
205 | } | ||
206 | else if( sTag == "red" ) | ||
207 | { | ||
208 | sStyle.push( stRed ); | ||
209 | } | ||
210 | sNextToken += getStyle( sStyle ); | 266 | sNextToken += getStyle( sStyle ); |
211 | sNode.push( pNode->getChildren().begin() ); | 267 | sNode.push( pNode->getChildren().begin() ); |
212 | continue; | 268 | continue; |