summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Buland <eichlan@xagasoft.com>2012-02-08 10:52:30 -0700
committerMike Buland <eichlan@xagasoft.com>2012-02-08 10:52:30 -0700
commit105aa3262bde83a33394ec57401ecf53e8d81971 (patch)
tree14e2efb0410129551a3d2e895a11de0a1d6ff9d5 /src
parentb6a33cf4c6c66d364986d7f652c8574953fac4d9 (diff)
downloadstage-105aa3262bde83a33394ec57401ecf53e8d81971.tar.gz
stage-105aa3262bde83a33394ec57401ecf53e8d81971.tar.bz2
stage-105aa3262bde83a33394ec57401ecf53e8d81971.tar.xz
stage-105aa3262bde83a33394ec57401ecf53e8d81971.zip
Deflate support, more colors.
Diffstat (limited to 'src')
-rw-r--r--src/options.cpp15
-rw-r--r--src/options.h1
-rw-r--r--src/smlrenderervt100.cpp74
-rw-r--r--src/smlrenderervt100.h8
4 files changed, 89 insertions, 9 deletions
diff --git a/src/options.cpp b/src/options.cpp
index f8112c4..93a29bc 100644
--- a/src/options.cpp
+++ b/src/options.cpp
@@ -12,6 +12,8 @@
12#include <gats/gatsstream.h> 12#include <gats/gatsstream.h>
13#include <gats/types.h> 13#include <gats/types.h>
14 14
15#include <bu/deflate.h>
16
15#include "interfaceplugger.h" 17#include "interfaceplugger.h"
16 18
17using namespace Bu; 19using namespace Bu;
@@ -48,6 +50,8 @@ void Options::parse( int argc, char *argv[] )
48 50
49 opt.addOption( Bu::slot( this, &Options::smlTest ), "sml-test", 51 opt.addOption( Bu::slot( this, &Options::smlTest ), "sml-test",
50 "Test SML parser." ); 52 "Test SML parser." );
53 opt.addOption( Bu::slot( this, &Options::smlHelp ), "sml-help",
54 "Display SML help." );
51 opt.addOption( sCommand, "command", 55 opt.addOption( sCommand, "command",
52 "Set the command to execute once the game is loaded. " 56 "Set the command to execute once the game is loaded. "
53 "This does not work with all interfaces."); 57 "This does not work with all interfaces.");
@@ -124,6 +128,17 @@ int Options::smlTest( Bu::Array<Bu::String> aArgs )
124 return 0; 128 return 0;
125} 129}
126 130
131int Options::smlHelp( Bu::Array<Bu::String> aArgs )
132{
133 Bu::File fIn("sml-help.sml.gz", Bu::File::Read );
134 Bu::Deflate dIn( fIn );
135 char buf[4096];
136 buf[dIn.read( buf, 4096 )] = '\0';
137 printf("%s\n", buf );
138
139 return 0;
140}
141
127int Options::nonOption( Bu::Array<Bu::String> aArgs ) 142int Options::nonOption( Bu::Array<Bu::String> aArgs )
128{ 143{
129 sFile = aArgs[0]; 144 sFile = aArgs[0];
diff --git a/src/options.h b/src/options.h
index bf9825f..4ac030b 100644
--- a/src/options.h
+++ b/src/options.h
@@ -23,6 +23,7 @@ protected:
23 int version( Bu::Array<Bu::String> aArgs ); 23 int version( Bu::Array<Bu::String> aArgs );
24 int builtins( Bu::Array<Bu::String> aArgs ); 24 int builtins( Bu::Array<Bu::String> aArgs );
25 int smlTest( Bu::Array<Bu::String> aArgs ); 25 int smlTest( Bu::Array<Bu::String> aArgs );
26 int smlHelp( Bu::Array<Bu::String> aArgs );
26 int nonOption( Bu::Array<Bu::String> aArgs ); 27 int nonOption( Bu::Array<Bu::String> aArgs );
27 int printResult( Bu::Array<Bu::String> aArgs ); 28 int printResult( Bu::Array<Bu::String> aArgs );
28}; 29};
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;
diff --git a/src/smlrenderervt100.h b/src/smlrenderervt100.h
index ed5dd42..0f82ca9 100644
--- a/src/smlrenderervt100.h
+++ b/src/smlrenderervt100.h
@@ -14,8 +14,15 @@ public:
14private: 14private:
15 enum Style 15 enum Style
16 { 16 {
17 stNone = 0x000000,
18
17 stRed = 0x010001, 19 stRed = 0x010001,
18 stGreen = 0x010002, 20 stGreen = 0x010002,
21 stYellow = 0x010003,
22 stBlue = 0x010004,
23 stMagenta = 0x010005,
24 stCyan = 0x010006,
25 stWhite = 0x010007,
19 26
20 stColor = 0x01000f, 27 stColor = 0x01000f,
21 28
@@ -27,6 +34,7 @@ private:
27 void appendToken( Bu::Formatter &f, Bu::String &sCurLine, 34 void appendToken( Bu::Formatter &f, Bu::String &sCurLine,
28 Bu::String &sNextToken, int &iLineLen, int &iNextLen ); 35 Bu::String &sNextToken, int &iLineLen, int &iNextLen );
29 Bu::String getStyle( const StyleStack &sStyle ); 36 Bu::String getStyle( const StyleStack &sStyle );
37 Style strToStyle( const Bu::String &sStyle );
30}; 38};
31 39
32#endif 40#endif