diff options
Diffstat (limited to 'src/tafreader.cpp')
-rw-r--r-- | src/tafreader.cpp | 44 |
1 files changed, 30 insertions, 14 deletions
diff --git a/src/tafreader.cpp b/src/tafreader.cpp index 1187176..db465e9 100644 --- a/src/tafreader.cpp +++ b/src/tafreader.cpp | |||
@@ -8,6 +8,7 @@ Bu::TafReader::TafReader( Bu::Stream &sIn ) : | |||
8 | c( 0 ), | 8 | c( 0 ), |
9 | sIn( sIn ) | 9 | sIn( sIn ) |
10 | { | 10 | { |
11 | next(); next(); | ||
11 | } | 12 | } |
12 | 13 | ||
13 | Bu::TafReader::~TafReader() | 14 | Bu::TafReader::~TafReader() |
@@ -15,60 +16,74 @@ Bu::TafReader::~TafReader() | |||
15 | 16 | ||
16 | } | 17 | } |
17 | 18 | ||
18 | Bu::TafNode *Bu::TafReader::getNode() | 19 | Bu::TafGroup *Bu::TafReader::readGroup() |
19 | { | 20 | { |
20 | if( c == 0 ) next(); | ||
21 | TafNode *pNode = new TafNode(); | ||
22 | ws(); | 21 | ws(); |
23 | if( c != '{' ) | 22 | if( c != '{' ) |
24 | throw TafException("Expected '{'"); | 23 | throw TafException("Expected '{'"); |
25 | next(); | 24 | next(); |
26 | ws(); | 25 | ws(); |
27 | FString sName = readStr(); | 26 | FString sName = readStr(); |
28 | pNode->setName( sName ); | 27 | TafGroup *pGroup = new TafGroup( sName ); |
29 | next(); | 28 | next(); |
30 | //printf("Node[%s]:\n", sName.getStr() ); | 29 | //printf("Node[%s]:\n", sName.getStr() ); |
31 | 30 | ||
32 | nodeContent( pNode ); | 31 | groupContent( pGroup ); |
33 | 32 | ||
34 | if( c != '}' ) | 33 | if( c != '}' ) |
35 | throw TafException("Expected '}'"); | 34 | throw TafException("Expected '}'"); |
36 | 35 | ||
37 | next(); | 36 | next(); |
38 | 37 | ||
39 | return pNode; | 38 | return pGroup; |
40 | } | 39 | } |
41 | 40 | ||
42 | void Bu::TafReader::nodeContent( Bu::TafNode *pNode ) | 41 | void Bu::TafReader::groupContent( Bu::TafGroup *pGroup ) |
43 | { | 42 | { |
44 | for(;;) | 43 | for(;;) |
45 | { | 44 | { |
46 | ws(); | 45 | ws(); |
47 | if( c == '{' ) | 46 | if( c == '{' ) |
48 | pNode->addChild( getNode() ); | 47 | pGroup->addChild( readGroup() ); |
49 | else if( c == '}' ) | 48 | else if( c == '}' ) |
50 | return; | 49 | return; |
50 | else if( c == '/' && la == '*' ) | ||
51 | pGroup->addChild( readComment() ); | ||
51 | else | 52 | else |
52 | nodeProperty( pNode ); | 53 | pGroup->addChild( readProperty() ); |
53 | } | 54 | } |
54 | } | 55 | } |
55 | 56 | ||
56 | void Bu::TafReader::nodeProperty( Bu::TafNode *pNode ) | 57 | Bu::TafProperty *Bu::TafReader::readProperty() |
57 | { | 58 | { |
58 | FString sName = readStr(); | 59 | FString sName = readStr(); |
59 | ws(); | 60 | ws(); |
60 | if( c != '=' ) | 61 | if( c != '=' ) |
61 | { | 62 | { |
62 | //printf(" %s (true)\n", sName.getStr() ); | 63 | //printf(" %s (true)\n", sName.getStr() ); |
63 | pNode->setProperty( sName, "" ); | 64 | return new Bu::TafProperty( sName, "" ); |
64 | return; | ||
65 | } | 65 | } |
66 | next(); | 66 | next(); |
67 | FString sValue = readStr(); | 67 | FString sValue = readStr(); |
68 | pNode->setProperty( sName, sValue ); | 68 | return new Bu::TafProperty( sName, sValue ); |
69 | //printf(" %s = %s\n", sName.getStr(), sValue.getStr() ); | 69 | //printf(" %s = %s\n", sName.getStr(), sValue.getStr() ); |
70 | } | 70 | } |
71 | 71 | ||
72 | Bu::TafComment *Bu::TafReader::readComment() | ||
73 | { | ||
74 | next(); | ||
75 | FString sCmnt; | ||
76 | for(;;) | ||
77 | { | ||
78 | next(); | ||
79 | if( c == '*' && la == '/' ) | ||
80 | break; | ||
81 | sCmnt += c; | ||
82 | } | ||
83 | |||
84 | return new TafComment( sCmnt ); | ||
85 | } | ||
86 | |||
72 | Bu::FString Bu::TafReader::readStr() | 87 | Bu::FString Bu::TafReader::readStr() |
73 | { | 88 | { |
74 | ws(); | 89 | ws(); |
@@ -134,6 +149,7 @@ bool Bu::TafReader::isws() | |||
134 | 149 | ||
135 | void Bu::TafReader::next() | 150 | void Bu::TafReader::next() |
136 | { | 151 | { |
137 | sIn.read( &c, 1 ); | 152 | c = la; |
153 | sIn.read( &la, 1 ); | ||
138 | } | 154 | } |
139 | 155 | ||