summaryrefslogtreecommitdiff
path: root/src/smlrenderervt100.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/smlrenderervt100.cpp')
-rw-r--r--src/smlrenderervt100.cpp74
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
91SmlRendererVt100::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
71void SmlRendererVt100::render( Bu::Formatter &f, const SmlNode *pNode ) 127void 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;