aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Buland <eichlan@xagasoft.com>2007-11-09 22:38:47 +0000
committerMike Buland <eichlan@xagasoft.com>2007-11-09 22:38:47 +0000
commit2ab64959d83ed2793d71ab3fa03b8ebdd4925902 (patch)
tree5417aeff1cadeb36793cfee3bc0733b2b6c77f44 /src
parentbb9c0dc8dd2c852d9b6e89b9fd883232019cea93 (diff)
downloadlibbu++-2ab64959d83ed2793d71ab3fa03b8ebdd4925902.tar.gz
libbu++-2ab64959d83ed2793d71ab3fa03b8ebdd4925902.tar.bz2
libbu++-2ab64959d83ed2793d71ab3fa03b8ebdd4925902.tar.xz
libbu++-2ab64959d83ed2793d71ab3fa03b8ebdd4925902.zip
Figured I might as well add single-line comments to taf, it now supports //
style comments.
Diffstat (limited to 'src')
-rw-r--r--src/tafnode.cpp10
-rw-r--r--src/tafnode.h4
-rw-r--r--src/tafreader.cpp41
-rw-r--r--src/tafreader.h2
-rw-r--r--src/tafwriter.cpp15
5 files changed, 56 insertions, 16 deletions
diff --git a/src/tafnode.cpp b/src/tafnode.cpp
index c04455b..ec51535 100644
--- a/src/tafnode.cpp
+++ b/src/tafnode.cpp
@@ -141,9 +141,10 @@ const Bu::FString &Bu::TafProperty::getValue() const
141 return sValue; 141 return sValue;
142} 142}
143 143
144Bu::TafComment::TafComment( const Bu::FString &sText ) : 144Bu::TafComment::TafComment( const Bu::FString &sText, bool bEOL ) :
145 TafNode( typeComment ), 145 TafNode( typeComment ),
146 sText( sText ) 146 sText( sText ),
147 bEOL( bEOL )
147{ 148{
148} 149}
149 150
@@ -156,3 +157,8 @@ const Bu::FString &Bu::TafComment::getText() const
156 return sText; 157 return sText;
157} 158}
158 159
160bool Bu::TafComment::isEOLStyle() const
161{
162 return bEOL;
163}
164
diff --git a/src/tafnode.h b/src/tafnode.h
index 585ba73..e2e1cc0 100644
--- a/src/tafnode.h
+++ b/src/tafnode.h
@@ -98,13 +98,15 @@ namespace Bu
98 class TafComment : public TafNode 98 class TafComment : public TafNode
99 { 99 {
100 public: 100 public:
101 TafComment( const Bu::FString &sText ); 101 TafComment( const Bu::FString &sText, bool bEOL=false );
102 virtual ~TafComment(); 102 virtual ~TafComment();
103 103
104 const Bu::FString &getText() const; 104 const Bu::FString &getText() const;
105 bool isEOLStyle() const;
105 106
106 private: 107 private:
107 Bu::FString sText; 108 Bu::FString sText;
109 bool bEOL;
108 }; 110 };
109} 111}
110 112
diff --git a/src/tafreader.cpp b/src/tafreader.cpp
index 5609f7c..efcb3d9 100644
--- a/src/tafreader.cpp
+++ b/src/tafreader.cpp
@@ -49,6 +49,8 @@ void Bu::TafReader::groupContent( Bu::TafGroup *pGroup )
49 return; 49 return;
50 else if( c == '/' && la == '*' ) 50 else if( c == '/' && la == '*' )
51 pGroup->addChild( readComment() ); 51 pGroup->addChild( readComment() );
52 else if( c == '/' && la == '/' )
53 pGroup->addChild( readComment( true ) );
52 else if( c == ':' ) 54 else if( c == ':' )
53 throw TafException("Encountered stray ':' in taf stream."); 55 throw TafException("Encountered stray ':' in taf stream.");
54 else 56 else
@@ -71,22 +73,43 @@ Bu::TafProperty *Bu::TafReader::readProperty()
71 //printf(" %s = %s\n", sName.getStr(), sValue.getStr() ); 73 //printf(" %s = %s\n", sName.getStr(), sValue.getStr() );
72} 74}
73 75
74Bu::TafComment *Bu::TafReader::readComment() 76Bu::TafComment *Bu::TafReader::readComment( bool bEOL )
75{ 77{
76 next();
77 FString sCmnt; 78 FString sCmnt;
78 for(;;) 79 next();
80 if( bEOL )
79 { 81 {
80 next(); 82 for(;;)
81 if( c == '*' && la == '/' )
82 { 83 {
83 next(); next(); 84 next();
84 break; 85 if( c == '\n' && la == '\r' )
86 {
87 next(); next();
88 break;
89 }
90 else if( c == '\n' || c == '\r' )
91 {
92 next();
93 break;
94 }
95 sCmnt += c;
96 }
97 }
98 else
99 {
100 for(;;)
101 {
102 next();
103 if( c == '*' && la == '/' )
104 {
105 next(); next();
106 break;
107 }
108 sCmnt += c;
85 } 109 }
86 sCmnt += c;
87 } 110 }
88 111
89 return new TafComment( sCmnt ); 112 return new TafComment( sCmnt, bEOL );
90} 113}
91 114
92Bu::FString Bu::TafReader::readStr() 115Bu::FString Bu::TafReader::readStr()
diff --git a/src/tafreader.h b/src/tafreader.h
index da285ab..f722ca4 100644
--- a/src/tafreader.h
+++ b/src/tafreader.h
@@ -23,7 +23,7 @@ namespace Bu
23 private: 23 private:
24 void groupContent( Bu::TafGroup *pNode ); 24 void groupContent( Bu::TafGroup *pNode );
25 Bu::TafProperty *readProperty(); 25 Bu::TafProperty *readProperty();
26 Bu::TafComment *readComment(); 26 Bu::TafComment *readComment( bool bEOL=false );
27 void ws(); 27 void ws();
28 bool isws(); 28 bool isws();
29 void next(); 29 void next();
diff --git a/src/tafwriter.cpp b/src/tafwriter.cpp
index b5690fc..c2fbc50 100644
--- a/src/tafwriter.cpp
+++ b/src/tafwriter.cpp
@@ -65,9 +65,18 @@ void Bu::TafWriter::writeProperty( const Bu::TafProperty *pProp )
65void Bu::TafWriter::writeComment( const Bu::TafComment *pComment ) 65void Bu::TafWriter::writeComment( const Bu::TafComment *pComment )
66{ 66{
67 ident(); 67 ident();
68 sOut.write("/*", 2 ); 68 if( pComment->isEOLStyle() )
69 sOut.write( pComment->getText().getStr(), pComment->getText().getSize() ); 69 {
70 sOut.write("*/ ", 3 ); 70 sOut.write("//", 2 );
71 sOut.write( pComment->getText().getStr(), pComment->getText().getSize() );
72 sOut.write("\n", 1 );
73 }
74 else
75 {
76 sOut.write("/*", 2 );
77 sOut.write( pComment->getText().getStr(), pComment->getText().getSize() );
78 sOut.write("*/ ", 3 );
79 }
71} 80}
72 81
73void Bu::TafWriter::writeString( const Bu::FString &str ) 82void Bu::TafWriter::writeString( const Bu::FString &str )