More improvements, now it generates usable Cairo bindings!
authorJan Vrany <jan.vrany@fit.cvut.cz>
Fri, 04 Jul 2008 08:35:55 +0000
changeset 3 110a9cbf8594
parent 2 cfd2c393abfe
child 4 fc74bd43a3eb
More improvements, now it generates usable Cairo bindings! Changes: - parser can now handle "foreign" typedefs, structs, unions and enums - generates structs as subclasses of ExternalStructure - functions now works with subclasses of ExternalStructure - minor fixes in ffiTypeMapping
Cface__CConstNode.st
Cface__CDefinitionParser.st
Cface__CDefinitionScanner.st
Cface__CNoNode.st
Cface__CNodeVisitor.st
Cface__CPointerNode.st
Cface__CTypeNode.st
Cface__CairoMapping.st
Cface__Generator.st
Cface__GeneratorCommand.st
Cface__SmalltalkXGenerator.st
Cface__TypeMapping.st
--- a/Cface__CConstNode.st	Thu Jul 03 22:00:07 2008 +0000
+++ b/Cface__CConstNode.st	Fri Jul 04 08:35:55 2008 +0000
@@ -97,10 +97,22 @@
 
 !CConstNode methodsFor:'testing'!
 
+isCCharNode
+    ^ type isCCharNode
+
+    "Created: / 04-07-2008 / 09:27:56 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
 isCConstNode
     ^ true
 
     "Created: / 17-02-2008 / 21:52:38 / janfrog"
+!
+
+isCStructNode
+    ^ type isCStructNode
+
+    "Created: / 04-07-2008 / 09:28:04 / Jan Vrany <vranyj1@fel.cvut.cz>"
 ! !
 
 !CConstNode methodsFor:'visiting'!
--- a/Cface__CDefinitionParser.st	Thu Jul 03 22:00:07 2008 +0000
+++ b/Cface__CDefinitionParser.st	Fri Jul 04 08:35:55 2008 +0000
@@ -15,7 +15,7 @@
 scannerClass
 	^Cface::CDefinitionScanner
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
 ! !
 
 !CDefinitionParser class methodsFor:'generated-comments'!
@@ -25,190 +25,218 @@
 	"%start DefinitionFile;
 
 DefinitionFile:
-	Generated  
-	Definition* 
-  	{ CDefinitionFileNode new
-	  		source: '1';
-			 	definitions: '2' } ;
+        Generated  
+        Definition* 
+        { CDefinitionFileNode new
+                        source: '1';
+                                definitions: '2' } ;
 
 Definition:       
-	  Function { '1' }		 
-	| Struct { '1' }		 
-	| Union { '1' }		 
-	| Enum { '1' }		 
-	| Typedef { '1' }		 
-	;
+          Function { '1' }               
+        | Struct { '1' }                 
+        | Union { '1' }          
+        | Enum { '1' }           
+        | Typedef { '1' }                
+        ;
 
 Generated:
-	""#Generated"" ""from:"" <file> 'file' { file value } 
-	;
+        ""#Generated"" ""from:"" <file> 'file' { file value } 
+        ;
 
 Function:
-	""("" ""function"" <name> 'name' ""("" Argument* 'arguments' "")"" Return 'return' "")"" 
-		{ CFunctionNode new 
-				cName:(name  value);
-				arguments:arguments;
-				return:return }
-	;
-	
-	
+        ""("" ""function"" <name> 'name' ""("" Argument* 'arguments' "")"" Return 'return' "")"" 
+                { CFunctionNode new 
+                                cName:(name  value);
+                                arguments:arguments;
+                                return:return }
+        ;
+        
+        
 Argument:
-	""("" ""argument"" ""("" Type 'type' "")"" <name> 'name' "")"" 
- 		{ (CArgumentNode new
-				cName:(name value);
-				type:type) }
-	;				
+        ""("" ""argument"" ""("" Type 'type' "")"" <name> 'name' "")"" 
+                { (CArgumentNode new
+                                cName:(name value);
+                                type:type) }
+        ;                               
 
 
 Return:
-	""("" ""return"" Type 'Type' "")"" { Type } 
-	;
+        ""("" ""return"" Type 'Type' "")"" { Type } 
+        ;
 
 FunctionPrototype:
-	""("" ""function-type"" <name> 'name' ""("" FunctionPrototypeArgument* 'arguments' "")"" Return 'return' "")"" 
-		{ CFunctionTypeNode new
-				cName:(name  value); 
-				arguments:arguments;
-				return:return } 
-	;
+        ""("" ""function-type"" <name> 'name' ""("" FunctionPrototypeArgument* 'arguments' "")"" Return 'return' "")"" 
+                { CFunctionTypeNode new
+                                cName:(name  value); 
+                                arguments:arguments;
+                                return:return } 
+        ;
 
 
 FunctionPrototypeArgument:
-	""("" ""argument"" ""("" Type  "")"" "")"" 
-		{ CArgumentNode new
-				cName:nil; 
-				type:'4' 	}
-	;
+        ""("" ""argument"" ""("" Type  "")"" "")"" 
+                { CArgumentNode new
+                                cName:nil; 
+                                type:'4'        }
+        ;
 
 Type:
-	  Const 
-		{ '1' } 
-	| BuiltinType
-		{ '1' }
-	| Pointer 
-		{ '1' } 
-	| Array
-		{ '1' } 
-	| FunctionPrototype	
-		{ '1' } 
-	| Struct
-		{ '1' }		
-	| Union
-		{ '1' }		
-	| Enum
-		{ '1' }		
-	| <name>
-		{ CUserDefinedTypeNode new cName: '1' value }
-	;
+          Const 
+                { '1' } 
+        | BuiltinType
+                { '1' }
+        | Pointer 
+                { '1' } 
+        | Array
+                { '1' } 
+        | FunctionPrototype     
+                { '1' } 
+        | Struct
+                { '1' }         
+        | Union
+                { '1' }         
+        | Enum
+                { '1' }         
+        | <name>
+                { CUserDefinedTypeNode new cName: '1' value }
+        ;
 
 BuiltinType:
-		""unsigned"" BuiltinType
-		{ CUnsignedNode new type: '2' } 		
+                ""unsigned"" BuiltinType
+                { CUnsignedNode new type: '2' }                 
   | ""long"" BuiltinType
-		{ CLongNode new type: '2' } 		
+                { CLongNode new type: '2' }             
   | ""short"" BuiltinType
-		{ CShortNode new type: '2' } 				
-	| ""int""
-		{ CIntNode new }
-	| ""char""
-		{ CCharNode new }					
-	| ""double""
-		{ CDoubleNode new }					
-	| ""float""
-		{ CFloatNode new }					
-	| ""void""
-		{ CVoidNode new }					
-	;
+                { CShortNode new type: '2' }                            
+        | ""int""
+                { CIntNode new }
+        | ""char""
+                { CCharNode new }                                       
+        | ""double""
+                { CDoubleNode new }                                     
+        | ""float""
+                { CFloatNode new }                                      
+        | ""void""
+                { CVoidNode new }                                       
+        ;
 
 
 
 Array:
-	""("" ""array"" ""("" Type "")"" <number> "")"" 
-		{ CArrayNode new
-				type:'4';
-				size:('1' value asNumber) } 
-	;
+        ""("" ""array"" ""("" Type "")"" <number> "")"" 
+                { CArrayNode new
+                                type:'4';
+                                size:('1' value asNumber) } 
+        ;
 
 Const:
-	""const"" Type 
-		{ CConstNode new type: '2' }
-	;
-	
-	
+        ""const"" Type 
+                { CConstNode new type: '2' }
+        ;
+        
+        
                                 
 Pointer:
-	""("" ""pointer-to"" Type "")"" 
-		{ CPointerNode new type:'3' } ;
+        ""("" ""pointer-to"" Type "")"" 
+                { CPointerNode new type:'3' } ;
 
 
 Struct:
-		""("" ""struct"" [ ""-foreign"" ] 'foreign' [ <name> ] 'name' StructField* 'fields' "")"" 
-		{ CStructNode new
-				cName:(name ifNotNil:[name value]);
-				fields:fields;
-				local:false;
-				foreign:(foreign notNil);
-				typedef:false
+                ""("" ""struct"" [ <name> ] 'name' StructField* 'fields' "")"" 
+                { CStructNode new
+                                cName:(name ifNotNil:[name value]);
+                                fields:fields;
+                                local:false;
+                                foreign:false;
+                                typedef:false
+
+ } 
+|                 ""("" ""struct-foreign"" [ <name> ] 'name' StructField* 'fields' "")"" 
+                { CStructNode new
+                                cName:(name ifNotNil:[name value]);
+                                fields:fields;
+                                local:false;
+                                foreign:true;
+                                typedef:false
 
  } 
 
-	;
+        ;
 
 
 
 Union:
-		""("" ""union"" [ ""-foreign"" ] 'foreign' [ <name> ] 'name' StructField* 'fields' "")"" 
-		{ CUnionNode new 
-				cName:(name ifNotNil:[name value]);
-				fields:fields;
-				local:false;
-				foreign:(foreign notNil);
-				typedef:false
+                ""("" ""union"" [ <name> ] 'name' StructField* 'fields' "")"" 
+                { CUnionNode new 
+                                cName:(name ifNotNil:[name value]);
+                                fields:fields;
+                                local:false;
+                                foreign: false;
+                                typedef:false
+                 } 
+    |   ""("" ""union-foreign"" [ <name> ] 'name' StructField* 'fields' "")"" 
+                { CUnionNode new 
+                                cName:(name ifNotNil:[name value]);
+                                fields:fields;
+                                local:false;
+                                foreign:true;
+                                typedef:false
  } 
-	;
+
+        ;
 
 
 
-	
+        
 StructField:
-	  ""("" ""field"" ""("" Type  "")"" <name>  "")""
-		{ CStructFieldNode new
-				cName:('6' value);
-				type:'4' }
-	;
-	
-		
+          ""("" ""field"" ""("" Type  "")"" <name>  "")""
+                { CStructFieldNode new
+                                cName:('6' value);
+                                type:'4' }
+        ;
+        
+                
 
 Enum:
-		""("" ""enum"" [ ""-foreign"" ] 'foreign' [ <name> ] 'name'EnumValue* 'fields' "")"" 
-		{ CEnumNode new
-				cName:(name ifNotNil:[name value]);
-				values:fields;
-				foreign:(foreign notNil);
-				typedef:false
-		}
-	
-	;
+                ""("" ""enum"" 'foreign' [ <name> ] 'name'EnumValue* 'fields' "")"" 
+                { CEnumNode new
+                                cName:(name ifNotNil:[name value]);
+                                values:fields;
+                                typedef:false
+                }
+        |       ""("" ""enum-foreign"" [ <name> ] 'name'EnumValue* 'fields' "")"" 
+                { CEnumNode new
+                                cName:(name ifNotNil:[name value]);
+                                values:fields;
+                                foreign: true;
+                                typedef:false
+                }
+
+        ;
 
 
 
 EnumValue:
-	""("" ""value"" ""("" <name> 'name' "")"" <number> 'number' "")""
-		{ (CEnumValueNode new 
-				cName:(name value);
-				intValue:(number value)) } ;
+        ""("" ""value"" ""("" <name> 'name' "")"" <number> 'number' "")""
+                { (CEnumValueNode new 
+                                cName:(name value);
+                                intValue:(number value)) } ;
 
 Typedef:
-	""("" ""typedef"" [ ""-foreign"" ] 'foreign' <name> 'name' Type 'type' "")"" 
-	{ CTypedefNode new
-			cName:(name value);
-			type:type;
-			foreign:(foreign isNil not) } ;
+        ""("" ""typedef"" 'foreign' <name> 'name' Type 'type' "")"" 
+        { CTypedefNode new
+                        cName:(name value);
+                        type:type} 
+    | ""("" ""typedef-foreign"" <name> 'name' Type 'type' "")"" 
+        { CTypedefNode new
+                        cName:(name value);
+                        type:type;
+                        foreign:true } 
 
-
+    ;
 "
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
 ! !
 
 !CDefinitionParser class methodsFor:'generated-starting states'!
@@ -220,9 +248,9 @@
 !
 
 startingStateForDefinitionFile
-	^1
+	^2
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 ! !
 
 !CDefinitionParser methodsFor:'accessing'!
@@ -240,7 +268,7 @@
         cName:((nodes at:6) value);
         type:(nodes at:4))
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForArgument2:nodes 
@@ -270,61 +298,61 @@
         type:(nodes at:4);
         size:((nodes at:1) value asNumber)
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForBuiltinType1:nodes 
     ^ CUnsignedNode new type:(nodes at:2)
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForBuiltinType2:nodes 
     ^ CLongNode new type:(nodes at:2)
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForBuiltinType3:nodes 
     ^ CShortNode new type:(nodes at:2)
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForBuiltinType4:nodes 
     ^ CIntNode new
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForBuiltinType5:nodes 
     ^ CCharNode new
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForBuiltinType6:nodes 
     ^ CDoubleNode new
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForBuiltinType7:nodes 
     ^ CFloatNode new
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForBuiltinType8:nodes 
     ^ CVoidNode new
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForConst1:nodes 
     ^ CConstNode new type:(nodes at:2)
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForDefBody1:nodes 
@@ -406,31 +434,31 @@
 reduceActionForDefinition1:nodes 
     ^ nodes at:1
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForDefinition2:nodes 
     ^ nodes at:1
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForDefinition3:nodes 
     ^ nodes at:1
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForDefinition4:nodes 
     ^ nodes at:1
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForDefinition5:nodes 
     ^ nodes at:1
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForDefinition6:nodes 
@@ -456,27 +484,26 @@
         source:(nodes at:1);
         definitions:(nodes at:2)
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForEnum1:nodes 
     ^ (CEnumNode new)
-        cName:((nodes at:4) ifNotNil:[ (nodes at:4) value ]);
-        values:(nodes at:5);
-        foreign:((nodes at:3) notNil);
+        cName:((nodes at:3) ifNotNil:[ (nodes at:3) value ]);
+        values:(nodes at:4);
         typedef:false
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForEnum2:nodes 
     ^ (CEnumNode new)
-        cName:((nodes at:4) value);
-        fields:(nodes at:5);
-        foreign:((nodes at:3) notNil);
+        cName:((nodes at:3) ifNotNil:[ (nodes at:3) value ]);
+        values:(nodes at:4);
+        foreign:true;
         typedef:false
 
-    "Modified: / 12-02-2008 / 23:05:21 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForEnumField1:nodes 
@@ -505,7 +532,7 @@
         cName:((nodes at:4) value);
         intValue:((nodes at:6) value))
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForFunction1:nodes 
@@ -514,7 +541,7 @@
         arguments:(nodes at:5);
         return:(nodes at:7)
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForFunctionArguments1:nodes 
@@ -537,7 +564,7 @@
         arguments:(nodes at:5);
         return:(nodes at:7)
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForFunctionPrototypeArgument1:nodes 
@@ -545,7 +572,7 @@
         cName:nil;
         type:(nodes at:4)
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForFunctionPrototypeArguments1:nodes 
@@ -565,7 +592,7 @@
 reduceActionForGenerated1:nodes 
     ^ (nodes at:3) value
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForGroup_____Function___Struct___Enum___Union___Typedef1:nodes 
@@ -685,7 +712,7 @@
 reduceActionForGroup______name_1:nodes 
     ^ nodes at:1
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForGroup______number_____name_1:nodes 
@@ -841,13 +868,13 @@
 reduceActionForOptional__Group______name_1:nodes 
     ^ nil
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForOptional__Group______name_2:nodes 
     ^ nodes at:1
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForOptional__Group______type_1:nodes 
@@ -901,7 +928,7 @@
 reduceActionForPointer1:nodes 
     ^ CPointerNode new type:(nodes at:3)
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForRepeat_Multiple___name_1:nodes 
@@ -921,7 +948,7 @@
 reduceActionForRepeat__Argument1:nodes 
     ^ OrderedCollection new
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForRepeat__Argument2:nodes 
@@ -929,13 +956,13 @@
         add:(nodes at:2);
         yourself
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForRepeat__Definition1:nodes 
     ^ OrderedCollection new
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForRepeat__Definition2:nodes 
@@ -943,7 +970,7 @@
         add:(nodes at:2);
         yourself
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForRepeat__EnumField1:nodes 
@@ -963,7 +990,7 @@
 reduceActionForRepeat__EnumValue1:nodes 
     ^ OrderedCollection new
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForRepeat__EnumValue2:nodes 
@@ -971,13 +998,13 @@
         add:(nodes at:2);
         yourself
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForRepeat__FunctionPrototypeArgument1:nodes 
     ^ OrderedCollection new
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForRepeat__FunctionPrototypeArgument2:nodes 
@@ -985,7 +1012,7 @@
         add:(nodes at:2);
         yourself
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForRepeat__Group_____Function___Struct___Enum___Union___Typedef1:nodes 
@@ -1033,7 +1060,7 @@
 reduceActionForRepeat__StructField1:nodes 
     ^ OrderedCollection new
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForRepeat__StructField2:nodes 
@@ -1041,35 +1068,35 @@
         add:(nodes at:2);
         yourself
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForReturn1:nodes 
     ^ nodes at:3
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForStruct1:nodes 
     ^ (CStructNode new)
-        cName:((nodes at:4) ifNotNil:[ (nodes at:4) value ]);
-        fields:(nodes at:5);
+        cName:((nodes at:3) ifNotNil:[ (nodes at:3) value ]);
+        fields:(nodes at:4);
         local:false;
-        foreign:((nodes at:3) notNil);
+        foreign:false;
         typedef:false
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForStruct2:nodes 
     ^ (CStructNode new)
-        cName:((nodes at:4) value);
-        fields:(nodes at:5);
+        cName:((nodes at:3) ifNotNil:[ (nodes at:3) value ]);
+        fields:(nodes at:4);
         local:false;
-        foreign:((nodes at:3) notNil);
+        foreign:true;
         typedef:false
 
-    "Modified: / 12-02-2008 / 23:05:21 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForStructField1:nodes 
@@ -1077,7 +1104,7 @@
         cName:((nodes at:6) value);
         type:(nodes at:4)
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForStructField2:nodes 
@@ -1161,64 +1188,72 @@
 reduceActionForType1:nodes 
     ^ nodes at:1
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForType2:nodes 
     ^ nodes at:1
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForType3:nodes 
     ^ nodes at:1
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForType4:nodes 
     ^ nodes at:1
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForType5:nodes 
     ^ nodes at:1
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForType6:nodes 
     ^ nodes at:1
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForType7:nodes 
     ^ nodes at:1
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForType8:nodes 
     ^ nodes at:1
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForType9:nodes 
     ^ CUserDefinedTypeNode new cName:(nodes at:1) value
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForTypedef1:nodes 
     ^ (CTypedefNode new)
-        cName:((nodes at:4) value);
-        type:(nodes at:5);
-        foreign:((nodes at:3) isNil not)
+        cName:((nodes at:3) value);
+        type:(nodes at:4)
+
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+reduceActionForTypedef2:nodes 
+    ^ (CTypedefNode new)
+        cName:((nodes at:3) value);
+        type:(nodes at:4);
+        foreign:true
+
+    "Created: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForTypedefEnum1:nodes 
@@ -1255,24 +1290,24 @@
 
 reduceActionForUnion1:nodes 
     ^ (CUnionNode new)
-        cName:((nodes at:4) ifNotNil:[ (nodes at:4) value ]);
-        fields:(nodes at:5);
+        cName:((nodes at:3) ifNotNil:[ (nodes at:3) value ]);
+        fields:(nodes at:4);
         local:false;
-        foreign:((nodes at:3) notNil);
+        foreign:false;
         typedef:false
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForUnion2:nodes 
     ^ (CUnionNode new)
-        cName:((nodes at:4) value);
-        fields:(nodes at:5);
+        cName:((nodes at:3) ifNotNil:[ (nodes at:3) value ]);
+        fields:(nodes at:4);
         local:false;
-        foreign:((nodes at:3) notNil);
+        foreign:true;
         typedef:false
 
-    "Modified: / 12-02-2008 / 23:05:21 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 reduceActionForUnionFields1:nodes 
@@ -1315,192 +1350,203 @@
 
 reduceTable
 	^#(
-#(31 1 #reduceActionForDefinition1:)
-#(31 1 #reduceActionForDefinition2:)
-#(31 1 #reduceActionForDefinition3:)
-#(31 1 #reduceActionForDefinition4:)
-#(31 1 #reduceActionForDefinition5:)
-#(32 8 #reduceActionForFunction1:)
-#(33 6 #reduceActionForStruct1:)
-#(34 6 #reduceActionForUnion1:)
-#(35 6 #reduceActionForEnum1:)
-#(36 6 #reduceActionForTypedef1:)
-#(37 0 #'reduceActionForRepeat__Definition1:')
-#(37 2 #'reduceActionForRepeat__Definition2:')
-#(38 3 #reduceActionForGenerated1:)
-#(39 7 #reduceActionForArgument1:)
-#(40 0 #'reduceActionForRepeat__Argument1:')
-#(40 2 #'reduceActionForRepeat__Argument2:')
-#(41 4 #reduceActionForReturn1:)
-#(42 1 #reduceActionForType1:)
-#(42 1 #reduceActionForType2:)
-#(42 1 #reduceActionForType3:)
-#(42 1 #reduceActionForType4:)
-#(42 1 #reduceActionForType5:)
-#(42 1 #reduceActionForType6:)
-#(42 1 #reduceActionForType7:)
-#(42 1 #reduceActionForType8:)
-#(42 1 #reduceActionForType9:)
-#(43 6 #reduceActionForFunctionPrototypeArgument1:)
-#(44 0 #'reduceActionForRepeat__FunctionPrototypeArgument1:')
-#(44 2 #'reduceActionForRepeat__FunctionPrototypeArgument2:')
-#(45 8 #reduceActionForFunctionPrototype1:)
-#(46 2 #reduceActionForConst1:)
-#(47 2 #reduceActionForBuiltinType1:)
-#(47 2 #reduceActionForBuiltinType2:)
-#(47 2 #reduceActionForBuiltinType3:)
-#(47 1 #reduceActionForBuiltinType4:)
-#(47 1 #reduceActionForBuiltinType5:)
-#(47 1 #reduceActionForBuiltinType6:)
-#(47 1 #reduceActionForBuiltinType7:)
-#(47 1 #reduceActionForBuiltinType8:)
-#(48 4 #reduceActionForPointer1:)
-#(49 7 #reduceActionForArray1:)
-#(50 2 #reduceActionForDefinitionFile1:)
-#(51 1 #'reduceActionForGroup_______foreign_1:')
-#(52 0 #'reduceActionForOptional__Group_______foreign_1:')
-#(52 1 #'reduceActionForOptional__Group_______foreign_2:')
-#(53 1 #'reduceActionForGroup______name_1:')
-#(54 0 #'reduceActionForOptional__Group______name_1:')
-#(54 1 #'reduceActionForOptional__Group______name_2:')
-#(55 7 #reduceActionForStructField1:)
-#(56 0 #'reduceActionForRepeat__StructField1:')
-#(56 2 #'reduceActionForRepeat__StructField2:')
-#(57 7 #reduceActionForEnumValue1:)
-#(58 0 #'reduceActionForRepeat__EnumValue1:')
-#(58 2 #'reduceActionForRepeat__EnumValue2:')
-#(61 1 #reduceFor:)
+#(34 1 #reduceFor:)
+#(35 8 #reduceActionForFunction1:)
+#(36 0 #'reduceActionForRepeat__Definition1:')
+#(36 2 #'reduceActionForRepeat__Definition2:')
+#(37 5 #reduceActionForUnion1:)
+#(37 5 #reduceActionForUnion2:)
+#(38 5 #reduceActionForEnum1:)
+#(38 5 #reduceActionForEnum2:)
+#(39 5 #reduceActionForTypedef1:)
+#(39 5 #reduceActionForTypedef2:)
+#(40 5 #reduceActionForStruct1:)
+#(40 5 #reduceActionForStruct2:)
+#(41 1 #reduceActionForDefinition1:)
+#(41 1 #reduceActionForDefinition2:)
+#(41 1 #reduceActionForDefinition3:)
+#(41 1 #reduceActionForDefinition4:)
+#(41 1 #reduceActionForDefinition5:)
+#(42 7 #reduceActionForArgument1:)
+#(43 0 #'reduceActionForRepeat__Argument1:')
+#(43 2 #'reduceActionForRepeat__Argument2:')
+#(44 4 #reduceActionForReturn1:)
+#(45 1 #reduceActionForType1:)
+#(45 1 #reduceActionForType2:)
+#(45 1 #reduceActionForType3:)
+#(45 1 #reduceActionForType4:)
+#(45 1 #reduceActionForType5:)
+#(45 1 #reduceActionForType6:)
+#(45 1 #reduceActionForType7:)
+#(45 1 #reduceActionForType8:)
+#(45 1 #reduceActionForType9:)
+#(46 6 #reduceActionForFunctionPrototypeArgument1:)
+#(47 0 #'reduceActionForRepeat__FunctionPrototypeArgument1:')
+#(47 2 #'reduceActionForRepeat__FunctionPrototypeArgument2:')
+#(48 8 #reduceActionForFunctionPrototype1:)
+#(49 2 #reduceActionForConst1:)
+#(50 2 #reduceActionForBuiltinType1:)
+#(50 2 #reduceActionForBuiltinType2:)
+#(50 2 #reduceActionForBuiltinType3:)
+#(50 1 #reduceActionForBuiltinType4:)
+#(50 1 #reduceActionForBuiltinType5:)
+#(50 1 #reduceActionForBuiltinType6:)
+#(50 1 #reduceActionForBuiltinType7:)
+#(50 1 #reduceActionForBuiltinType8:)
+#(51 4 #reduceActionForPointer1:)
+#(52 7 #reduceActionForArray1:)
+#(53 2 #reduceActionForDefinitionFile1:)
+#(54 1 #'reduceActionForGroup______name_1:')
+#(55 0 #'reduceActionForOptional__Group______name_1:')
+#(55 1 #'reduceActionForOptional__Group______name_2:')
+#(56 7 #reduceActionForStructField1:)
+#(57 0 #'reduceActionForRepeat__StructField1:')
+#(57 2 #'reduceActionForRepeat__StructField2:')
+#(58 7 #reduceActionForEnumValue1:)
+#(59 0 #'reduceActionForRepeat__EnumValue1:')
+#(59 2 #'reduceActionForRepeat__EnumValue2:')
+#(62 3 #reduceActionForGenerated1:)
 )
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 transitionTable
 	^#(
-#[1 0 13 0 8 0 17 0 38 0 21 0 50]
-#[1 0 13 0 8 0 17 0 38 0 25 0 50]
-#[0 0 29 0 9]
-#[1 0 46 0 10 0 33 0 37 0 46 0 59]
-#[0 0 0 0 59]
-#[0 0 0 0 59]
-#[0 0 37 0 30]
-#[1 0 41 0 10 0 45 0 31 0 49 0 32 0 53 0 33 0 57 0 34 0 61 0 35 0 65 0 36 0 170 0 59]
-#[0 0 54 0 10 0 59]
-#[1 0 69 0 7 0 73 0 11 0 77 0 15 0 81 0 17 0 85 0 21]
-#[0 0 50 0 10 0 59]
-#[0 0 6 0 10 0 59]
-#[0 0 10 0 10 0 59]
-#[0 0 14 0 10 0 59]
-#[0 0 18 0 10 0 59]
-#[0 0 22 0 10 0 59]
-#[1 0 89 0 19 0 178 0 27 0 93 0 51 0 97 0 52]
-#[0 0 101 0 27]
-#[1 0 178 0 10 0 178 0 12 0 89 0 19 0 178 0 27 0 93 0 51 0 105 0 52]
-#[1 0 178 0 10 0 178 0 12 0 89 0 19 0 178 0 27 0 93 0 51 0 109 0 52]
-#[1 0 178 0 10 0 178 0 12 0 89 0 19 0 178 0 27 0 93 0 51 0 113 0 52]
-#[0 0 174 0 10 0 12 0 27]
-#[0 0 182 0 10 0 12 0 27]
-#[0 0 117 0 27]
-#[0 0 121 0 10]
-#[1 0 190 0 10 0 190 0 12 0 125 0 27 0 129 0 53 0 133 0 54]
-#[1 0 190 0 10 0 190 0 12 0 125 0 27 0 129 0 53 0 137 0 54]
-#[1 0 190 0 10 0 190 0 12 0 125 0 27 0 129 0 53 0 141 0 54]
-#[1 0 145 0 2 0 149 0 3 0 153 0 4 0 157 0 10 0 161 0 13 0 165 0 14 0 169 0 20 0 173 0 22 0 177 0 24 0 181 0 25 0 185 0 27 0 189 0 33 0 193 0 34 0 197 0 35 0 201 0 42 0 205 0 45 0 209 0 46 0 213 0 47 0 217 0 48 0 221 0 49]
-#[1 0 62 0 10 0 62 0 12 0 225 0 40]
-#[0 0 186 0 10 0 12]
-#[0 0 194 0 10 0 12]
-#[1 0 202 0 10 0 202 0 12 0 229 0 56]
-#[1 0 214 0 10 0 214 0 12 0 233 0 58]
-#[1 0 202 0 10 0 202 0 12 0 237 0 56]
-#[1 0 145 0 2 0 149 0 3 0 153 0 4 0 161 0 13 0 165 0 14 0 169 0 20 0 173 0 22 0 177 0 24 0 241 0 47]
-#[1 0 145 0 2 0 149 0 3 0 153 0 4 0 161 0 13 0 165 0 14 0 169 0 20 0 173 0 22 0 177 0 24 0 245 0 47]
-#[1 0 145 0 2 0 149 0 3 0 153 0 4 0 161 0 13 0 165 0 14 0 169 0 20 0 173 0 22 0 177 0 24 0 249 0 47]
-#[1 0 253 0 1 0 77 0 15 0 81 0 17 0 85 0 21 1 1 0 23 1 5 0 26]
-#[0 0 142 0 12]
-#[0 0 146 0 12]
-#[0 0 150 0 12]
-#[0 0 154 0 12]
-#[0 0 158 0 12]
-#[1 0 145 0 2 0 149 0 3 0 153 0 4 0 157 0 10 0 161 0 13 0 165 0 14 0 169 0 20 0 173 0 22 0 177 0 24 0 181 0 25 0 185 0 27 0 189 0 33 0 193 0 34 0 197 0 35 1 9 0 42 0 205 0 45 0 209 0 46 0 213 0 47 0 217 0 48 0 221 0 49]
-#[0 0 106 0 12]
-#[0 0 94 0 12]
-#[0 0 98 0 12]
-#[0 0 102 0 12]
-#[0 1 13 0 12]
-#[0 0 90 0 12]
-#[0 0 74 0 12]
-#[0 0 78 0 12]
-#[0 0 82 0 12]
-#[0 0 86 0 12]
-#[1 1 17 0 10 1 21 0 12 1 25 0 39]
-#[1 1 29 0 10 1 33 0 12 1 37 0 55]
-#[1 1 41 0 10 1 45 0 12 1 49 0 57]
-#[1 1 29 0 10 1 53 0 12 1 37 0 55]
-#[0 0 130 0 12]
-#[0 0 134 0 12]
-#[0 0 138 0 12]
-#[0 1 57 0 27]
-#[1 0 145 0 2 0 149 0 3 0 153 0 4 0 157 0 10 0 161 0 13 0 165 0 14 0 169 0 20 0 173 0 22 0 177 0 24 0 181 0 25 0 185 0 27 0 189 0 33 0 193 0 34 0 197 0 35 1 61 0 42 0 205 0 45 0 209 0 46 0 213 0 47 0 217 0 48 0 221 0 49]
-#[0 1 65 0 10]
-#[0 0 126 0 12]
-#[0 0 42 0 10 0 59]
-#[0 1 69 0 5]
-#[1 1 73 0 10 1 77 0 41]
-#[0 0 66 0 10 0 12]
-#[0 1 81 0 16]
-#[0 0 34 0 10 0 12 0 59]
-#[0 0 206 0 10 0 12]
-#[0 1 85 0 18]
-#[0 0 38 0 10 0 12 0 59]
-#[0 0 218 0 10 0 12]
-#[0 0 30 0 10 0 12 0 59]
-#[0 1 89 0 10]
-#[0 1 93 0 12]
-#[1 0 145 0 2 0 149 0 3 0 153 0 4 0 157 0 10 0 161 0 13 0 165 0 14 0 169 0 20 0 173 0 22 0 177 0 24 0 181 0 25 0 185 0 27 0 189 0 33 0 193 0 34 0 197 0 35 1 97 0 42 0 205 0 45 0 209 0 46 0 213 0 47 0 217 0 48 0 221 0 49]
-#[0 1 101 0 10]
-#[0 1 105 0 6]
-#[0 1 109 0 12]
-#[0 1 113 0 10]
-#[0 1 117 0 10]
-#[1 0 114 0 10 0 114 0 12 1 121 0 44]
-#[0 0 162 0 12]
-#[0 1 125 0 12]
-#[1 0 145 0 2 0 149 0 3 0 153 0 4 0 157 0 10 0 161 0 13 0 165 0 14 0 169 0 20 0 173 0 22 0 177 0 24 0 181 0 25 0 185 0 27 0 189 0 33 0 193 0 34 0 197 0 35 1 129 0 42 0 205 0 45 0 209 0 46 0 213 0 47 0 217 0 48 0 221 0 49]
-#[1 0 145 0 2 0 149 0 3 0 153 0 4 0 157 0 10 0 161 0 13 0 165 0 14 0 169 0 20 0 173 0 22 0 177 0 24 0 181 0 25 0 185 0 27 0 189 0 33 0 193 0 34 0 197 0 35 1 133 0 42 0 205 0 45 0 209 0 46 0 213 0 47 0 217 0 48 0 221 0 49]
-#[0 0 26 0 10 0 59]
-#[1 0 145 0 2 0 149 0 3 0 153 0 4 0 157 0 10 0 161 0 13 0 165 0 14 0 169 0 20 0 173 0 22 0 177 0 24 0 181 0 25 0 185 0 27 0 189 0 33 0 193 0 34 0 197 0 35 1 137 0 42 0 205 0 45 0 209 0 46 0 213 0 47 0 217 0 48 0 221 0 49]
-#[0 1 141 0 27]
-#[1 1 145 0 10 1 149 0 12 1 153 0 43]
-#[0 1 157 0 28]
-#[0 1 161 0 12]
-#[0 1 165 0 12]
-#[0 1 169 0 12]
-#[0 1 173 0 12]
-#[0 1 177 0 5]
-#[1 1 73 0 10 1 181 0 41]
-#[0 0 118 0 10 0 12]
-#[0 1 185 0 12]
-#[0 1 189 0 27]
-#[0 0 70 0 12]
-#[0 1 193 0 27]
-#[0 1 197 0 28]
-#[0 1 201 0 10]
-#[0 1 205 0 12]
-#[0 0 166 0 12]
-#[0 1 209 0 12]
-#[0 1 213 0 12]
-#[0 1 217 0 12]
-#[1 0 145 0 2 0 149 0 3 0 153 0 4 0 157 0 10 0 161 0 13 0 165 0 14 0 169 0 20 0 173 0 22 0 177 0 24 0 181 0 25 0 185 0 27 0 189 0 33 0 193 0 34 0 197 0 35 1 221 0 42 0 205 0 45 0 209 0 46 0 213 0 47 0 217 0 48 0 221 0 49]
-#[0 0 122 0 12]
-#[0 0 58 0 10 0 12]
-#[0 0 198 0 10 0 12]
-#[0 0 210 0 10 0 12]
-#[0 1 225 0 12]
-#[0 1 229 0 12]
-#[0 0 110 0 10 0 12]
+#[1 0 13 0 9 0 17 0 53 0 21 0 62]
+#[1 0 13 0 9 0 25 0 53 0 21 0 62]
+#[0 0 29 0 10]
+#[0 0 0 0 60]
+#[1 0 14 0 11 0 33 0 36 0 14 0 60]
+#[0 0 0 0 60]
+#[0 0 37 0 33]
+#[1 0 41 0 11 0 45 0 35 0 49 0 37 0 53 0 38 0 57 0 39 0 61 0 40 0 65 0 41 0 186 0 60]
+#[0 0 226 0 11 0 60]
+#[1 0 69 0 8 0 73 0 15 0 77 0 17 0 81 0 18 0 85 0 19 0 89 0 20 0 93 0 21 0 97 0 27 0 101 0 28]
+#[0 0 54 0 11 0 60]
+#[0 0 62 0 11 0 60]
+#[0 0 66 0 11 0 60]
+#[0 0 70 0 11 0 60]
+#[0 0 58 0 11 0 60]
+#[0 0 18 0 11 0 60]
+#[0 0 105 0 30]
+#[0 0 109 0 30]
+#[1 0 194 0 11 0 194 0 13 0 113 0 30 0 117 0 54 0 121 0 55]
+#[1 0 194 0 11 0 194 0 13 0 113 0 30 0 117 0 54 0 125 0 55]
+#[1 0 194 0 11 0 194 0 13 0 113 0 30 0 117 0 54 0 129 0 55]
+#[0 0 133 0 30]
+#[1 0 194 0 11 0 194 0 13 0 113 0 30 0 117 0 54 0 137 0 55]
+#[1 0 194 0 11 0 194 0 13 0 113 0 30 0 117 0 54 0 141 0 55]
+#[1 0 194 0 11 0 194 0 13 0 113 0 30 0 117 0 54 0 145 0 55]
+#[1 0 149 0 1 0 153 0 2 0 157 0 3 0 161 0 5 0 165 0 7 0 169 0 11 0 173 0 12 0 177 0 23 0 181 0 24 0 185 0 26 0 189 0 30 0 193 0 37 0 197 0 38 0 201 0 40 0 205 0 45 0 209 0 48 0 213 0 49 0 217 0 50 0 221 0 51 0 225 0 52]
+#[0 0 229 0 11]
+#[0 0 190 0 11 0 13]
+#[0 0 198 0 11 0 13]
+#[1 0 218 0 11 0 218 0 13 0 233 0 59]
+#[1 0 218 0 11 0 218 0 13 0 237 0 59]
+#[1 0 206 0 11 0 206 0 13 0 241 0 57]
+#[1 0 149 0 1 0 153 0 2 0 157 0 3 0 161 0 5 0 165 0 7 0 169 0 11 0 173 0 12 0 177 0 23 0 181 0 24 0 185 0 26 0 189 0 30 0 193 0 37 0 197 0 38 0 201 0 40 0 245 0 45 0 209 0 48 0 213 0 49 0 217 0 50 0 221 0 51 0 225 0 52]
+#[1 0 206 0 11 0 206 0 13 0 249 0 57]
+#[1 0 206 0 11 0 206 0 13 0 253 0 57]
+#[1 0 206 0 11 0 206 0 13 1 1 0 57]
+#[1 0 149 0 1 0 153 0 2 0 157 0 3 0 161 0 5 0 165 0 7 0 173 0 12 0 177 0 23 0 181 0 24 1 5 0 50]
+#[1 0 149 0 1 0 153 0 2 0 157 0 3 0 161 0 5 0 165 0 7 0 173 0 12 0 177 0 23 0 181 0 24 1 9 0 50]
+#[1 0 149 0 1 0 153 0 2 0 157 0 3 0 161 0 5 0 165 0 7 0 173 0 12 0 177 0 23 0 181 0 24 1 13 0 50]
+#[0 0 162 0 13]
+#[0 0 158 0 13]
+#[1 1 17 0 4 0 77 0 17 0 81 0 18 0 85 0 19 0 93 0 21 1 21 0 25 0 97 0 27 0 101 0 28 1 25 0 29]
+#[0 0 166 0 13]
+#[0 0 170 0 13]
+#[0 0 174 0 13]
+#[1 0 149 0 1 0 153 0 2 0 157 0 3 0 161 0 5 0 165 0 7 0 169 0 11 0 173 0 12 0 177 0 23 0 181 0 24 0 185 0 26 0 189 0 30 0 193 0 37 0 197 0 38 0 201 0 40 1 29 0 45 0 209 0 48 0 213 0 49 0 217 0 50 0 221 0 51 0 225 0 52]
+#[0 0 122 0 13]
+#[0 0 114 0 13]
+#[0 0 118 0 13]
+#[0 0 110 0 13]
+#[0 1 33 0 13]
+#[0 0 106 0 13]
+#[0 0 90 0 13]
+#[0 0 94 0 13]
+#[0 0 98 0 13]
+#[0 0 102 0 13]
+#[1 0 78 0 11 0 78 0 13 1 37 0 43]
+#[1 1 41 0 11 1 45 0 13 1 49 0 58]
+#[1 1 41 0 11 1 53 0 13 1 49 0 58]
+#[1 1 57 0 11 1 61 0 13 1 65 0 56]
+#[0 1 69 0 13]
+#[1 1 57 0 11 1 73 0 13 1 65 0 56]
+#[1 1 57 0 11 1 77 0 13 1 65 0 56]
+#[1 1 57 0 11 1 81 0 13 1 65 0 56]
+#[0 0 146 0 13]
+#[0 0 150 0 13]
+#[0 0 154 0 13]
+#[0 1 85 0 30]
+#[0 1 89 0 11]
+#[1 0 149 0 1 0 153 0 2 0 157 0 3 0 161 0 5 0 165 0 7 0 169 0 11 0 173 0 12 0 177 0 23 0 181 0 24 0 185 0 26 0 189 0 30 0 193 0 37 0 197 0 38 0 201 0 40 1 93 0 45 0 209 0 48 0 213 0 49 0 217 0 50 0 221 0 51 0 225 0 52]
+#[0 0 142 0 13]
+#[0 0 42 0 11 0 60]
+#[1 1 97 0 11 1 101 0 13 1 105 0 42]
+#[0 1 109 0 22]
+#[0 0 30 0 11 0 13 0 60]
+#[0 0 222 0 11 0 13]
+#[0 0 34 0 11 0 13 0 60]
+#[0 1 113 0 16]
+#[0 0 26 0 11 0 13 0 60]
+#[0 0 210 0 11 0 13]
+#[0 0 38 0 11 0 60]
+#[0 0 22 0 11 0 13 0 60]
+#[0 0 50 0 11 0 13 0 60]
+#[0 0 46 0 11 0 13 0 60]
+#[0 1 117 0 11]
+#[1 0 149 0 1 0 153 0 2 0 157 0 3 0 161 0 5 0 165 0 7 0 169 0 11 0 173 0 12 0 177 0 23 0 181 0 24 0 185 0 26 0 189 0 30 0 193 0 37 0 197 0 38 0 201 0 40 1 121 0 45 0 209 0 48 0 213 0 49 0 217 0 50 0 221 0 51 0 225 0 52]
+#[0 1 125 0 13]
+#[0 1 129 0 14]
+#[1 1 133 0 11 1 137 0 44]
+#[0 0 82 0 11 0 13]
+#[0 1 141 0 11]
+#[0 1 145 0 11]
+#[1 0 130 0 11 0 130 0 13 1 149 0 47]
+#[0 1 153 0 13]
+#[0 0 178 0 13]
+#[0 1 157 0 11]
+#[0 1 161 0 6]
+#[0 1 165 0 13]
+#[0 1 169 0 30]
+#[1 0 149 0 1 0 153 0 2 0 157 0 3 0 161 0 5 0 165 0 7 0 169 0 11 0 173 0 12 0 177 0 23 0 181 0 24 0 185 0 26 0 189 0 30 0 193 0 37 0 197 0 38 0 201 0 40 1 173 0 45 0 209 0 48 0 213 0 49 0 217 0 50 0 221 0 51 0 225 0 52]
+#[1 1 177 0 11 1 181 0 13 1 185 0 46]
+#[0 1 189 0 31]
+#[1 0 149 0 1 0 153 0 2 0 157 0 3 0 161 0 5 0 165 0 7 0 169 0 11 0 173 0 12 0 177 0 23 0 181 0 24 0 185 0 26 0 189 0 30 0 193 0 37 0 197 0 38 0 201 0 40 1 193 0 45 0 209 0 48 0 213 0 49 0 217 0 50 0 221 0 51 0 225 0 52]
+#[1 0 149 0 1 0 153 0 2 0 157 0 3 0 161 0 5 0 165 0 7 0 169 0 11 0 173 0 12 0 177 0 23 0 181 0 24 0 185 0 26 0 189 0 30 0 193 0 37 0 197 0 38 0 201 0 40 1 197 0 45 0 209 0 48 0 213 0 49 0 217 0 50 0 221 0 51 0 225 0 52]
+#[0 0 10 0 11 0 60]
+#[0 1 201 0 13]
+#[0 1 205 0 13]
+#[0 1 209 0 14]
+#[1 1 133 0 11 1 213 0 44]
+#[0 0 134 0 11 0 13]
+#[0 1 217 0 13]
+#[0 1 221 0 13]
+#[0 1 225 0 13]
+#[0 1 229 0 31]
+#[0 1 233 0 30]
+#[0 1 237 0 11]
+#[0 1 241 0 13]
+#[0 0 182 0 13]
+#[0 1 245 0 30]
+#[0 0 86 0 13]
+#[0 1 249 0 13]
+#[0 1 253 0 13]
+#[1 0 149 0 1 0 153 0 2 0 157 0 3 0 161 0 5 0 165 0 7 0 169 0 11 0 173 0 12 0 177 0 23 0 181 0 24 0 185 0 26 0 189 0 30 0 193 0 37 0 197 0 38 0 201 0 40 2 1 0 45 0 209 0 48 0 213 0 49 0 217 0 50 0 221 0 51 0 225 0 52]
+#[0 0 138 0 13]
+#[0 2 5 0 13]
+#[0 0 214 0 11 0 13]
+#[0 0 202 0 11 0 13]
+#[0 2 9 0 13]
+#[0 0 74 0 11 0 13]
+#[0 2 13 0 13]
+#[0 0 126 0 11 0 13]
 )
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 ! !
 
 !CDefinitionParser class methodsFor:'documentation'!
--- a/Cface__CDefinitionScanner.st	Thu Jul 03 22:00:07 2008 +0000
+++ b/Cface__CDefinitionScanner.st	Fri Jul 04 08:35:55 2008 +0000
@@ -31,71 +31,71 @@
 <file>                  :       [\w-_/] [\w-_/.]* ;
 "
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
 ! !
 
 !CDefinitionScanner class methodsFor:'generated-initialization'!
 
 initializeKeywordMap
     keywordMap := Dictionary new.
-    #( #(27 'argument' 5)
-     #(27 'array' 26)
-     #(27 'char' 14)
-     #(27 'const' 25)
-     #(27 'double' 20)
-     #(27 'enum' 17)
-     #(27 'field' 16)
-     #(27 'float' 22)
-     #(27 'function' 11)
-     #(27 'int' 13)
-     #(27 'long' 3)
-     #(27 'return' 6)
-     #(27 'short' 4)
-     #(27 'struct' 21)
-     #(27 'typedef' 7)
-     #(27 'union' 15)
-     #(27 'unsigned' 2)
-     #(27 'value' 18)
-     #(27 'void' 24)
-     #(30 'argument' 5)
-     #(30 'array' 26)
-     #(30 'char' 14)
-     #(30 'const' 25)
-     #(30 'double' 20)
+    #( #(30 'argument' 14)
+     #(30 'array' 25)
+     #(30 'char' 5)
+     #(30 'const' 26)
+     #(30 'double' 12)
      #(30 'enum' 17)
      #(30 'field' 16)
-     #(30 'float' 22)
-     #(30 'function' 11)
-     #(30 'int' 13)
-     #(30 'long' 3)
+     #(30 'float' 23)
+     #(30 'function' 15)
+     #(30 'int' 7)
+     #(30 'long' 2)
      #(30 'return' 6)
-     #(30 'short' 4)
-     #(30 'struct' 21)
-     #(30 'typedef' 7)
-     #(30 'union' 15)
-     #(30 'unsigned' 2)
-     #(30 'value' 18)
-     #(30 'void' 24) ) 
+     #(30 'short' 3)
+     #(30 'struct' 28)
+     #(30 'typedef' 20)
+     #(30 'union' 21)
+     #(30 'unsigned' 1)
+     #(30 'value' 22)
+     #(30 'void' 24)
+     #(33 'argument' 14)
+     #(33 'array' 25)
+     #(33 'char' 5)
+     #(33 'const' 26)
+     #(33 'double' 12)
+     #(33 'enum' 17)
+     #(33 'field' 16)
+     #(33 'float' 23)
+     #(33 'function' 15)
+     #(33 'int' 7)
+     #(33 'long' 2)
+     #(33 'return' 6)
+     #(33 'short' 3)
+     #(33 'struct' 28)
+     #(33 'typedef' 20)
+     #(33 'union' 21)
+     #(33 'unsigned' 1)
+     #(33 'value' 22)
+     #(33 'void' 24) ) 
             do:[:each | 
                 (keywordMap at:each first ifAbsentPut:[ Dictionary new ]) at:(each at:2)
                     put:each last
             ].
     ^ keywordMap
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:44 / Jan Vrany <vranyj1@fel.cvut.cz>"
 ! !
 
 !CDefinitionScanner methodsFor:'generated-scanner'!
 
 scan1
     [
-        self recordMatch:#( 27 30 ).
+        self recordMatch:#( 30 33 ).
         self step.
         (currentCharacter isLetterOrDigit or:[ currentCharacter == $_ ])
     ] whileTrue.
     (currentCharacter between:$- and:$/) ifTrue:[
         [
-            self recordMatch:#( 30 ).
+            self recordMatch:#( 33 ).
             self step.
             (currentCharacter isLetterOrDigit 
                 or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
@@ -104,16 +104,16 @@
     ].
     ^ self reportLastMatch
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 scan2
     [
-        self recordMatch:#( 28 30 ).
+        self recordMatch:#( 31 33 ).
         self step.
         (currentCharacter isLetter) ifTrue:[
             [
-                self recordMatch:#( 28 30 ).
+                self recordMatch:#( 31 33 ).
                 self step.
                 (currentCharacter isLetter)
             ] whileTrue.
@@ -121,7 +121,7 @@
                 or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ]) 
                     ifTrue:[
                         [
-                            self recordMatch:#( 30 ).
+                            self recordMatch:#( 33 ).
                             self step.
                             (currentCharacter isLetterOrDigit 
                                 or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
@@ -134,7 +134,7 @@
     ] whileTrue.
     ((currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ]) ifTrue:[
         [
-            self recordMatch:#( 30 ).
+            self recordMatch:#( 33 ).
             self step.
             (currentCharacter isLetterOrDigit 
                 or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
@@ -143,7 +143,7 @@
     ].
     ^ self reportLastMatch
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 scan3
@@ -844,10 +844,13 @@
         or:[
             currentCharacter == $_ 
                 or:[
-                    (currentCharacter between:$a and:$e) 
+                    (currentCharacter between:$a and:$d) 
                         or:[
                             (currentCharacter between:$g and:$o) 
-                                or:[ (currentCharacter between:$q and:$z) ]
+                                or:[
+                                    (currentCharacter between:$q and:$r) 
+                                        or:[ (currentCharacter between:$v and:$z) ]
+                                ]
                         ]
                 ]
         ]) 
@@ -885,7 +888,7 @@
                                     (currentCharacter == $e) ifTrue:[
                                         self step.
                                         (currentCharacter == $d) ifTrue:[
-                                            ^ self recordAndReportMatch:#( 8 ).
+                                            ^ self recordAndReportMatch:#( 9 ).
                                         ].
                                         ^ self reportLastMatch
                                     ].
@@ -906,28 +909,19 @@
         ^ self reportLastMatch
     ].
     (currentCharacter == $() ifTrue:[
-        ^ self recordAndReportMatch:#( 10 ).
+        ^ self recordAndReportMatch:#( 11 ).
     ].
     (currentCharacter == $)) ifTrue:[
-        ^ self recordAndReportMatch:#( 12 ).
+        ^ self recordAndReportMatch:#( 13 ).
     ].
     (currentCharacter == $-) ifTrue:[
-        self recordMatch:#( 30 ).
+        self recordMatch:#( 33 ).
         self step.
-        ((currentCharacter between:$- and:$/) 
-            or:[
-                (currentCharacter between:$A and:$Z) 
-                    or:[
-                        currentCharacter == $_ 
-                            or:[
-                                (currentCharacter between:$a and:$e) 
-                                    or:[ (currentCharacter between:$g and:$z) ]
-                            ]
-                    ]
-            ]) 
+        (currentCharacter isLetter 
+            or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ]) 
                 ifTrue:[
                     [
-                        self recordMatch:#( 30 ).
+                        self recordMatch:#( 33 ).
                         self step.
                         (currentCharacter isLetterOrDigit 
                             or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
@@ -937,132 +931,155 @@
         (currentCharacter isXMLDigit) ifTrue:[
             ^ self scan2
         ].
-        (currentCharacter == $f) ifTrue:[
-            self recordMatch:#( 30 ).
+        ^ self reportLastMatch
+    ].
+    (currentCharacter == $/) ifTrue:[
+        [
+            self recordMatch:#( 33 ).
+            self step.
+            (currentCharacter isLetterOrDigit 
+                or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+        ] whileTrue.
+        ^ self reportLastMatch
+    ].
+    (currentCharacter == $e) ifTrue:[
+        self recordMatch:#( 30 33 ).
+        self step.
+        ((currentCharacter between:$0 and:$9) 
+            or:[
+                (currentCharacter between:$A and:$Z) 
+                    or:[
+                        currentCharacter == $_ 
+                            or:[
+                                (currentCharacter between:$a and:$m) 
+                                    or:[ (currentCharacter between:$o and:$z) ]
+                            ]
+                    ]
+            ]) 
+                ifTrue:[ ^ self scan1 ].
+        (currentCharacter between:$- and:$/) ifTrue:[
+            [
+                self recordMatch:#( 33 ).
+                self step.
+                (currentCharacter isLetterOrDigit 
+                    or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+            ] whileTrue.
+            ^ self reportLastMatch
+        ].
+        (currentCharacter == $n) ifTrue:[
+            self recordMatch:#( 30 33 ).
             self step.
             (currentCharacter isXMLDigit 
                 or:[
-                    (currentCharacter between:$- and:$/) 
+                    (currentCharacter between:$A and:$Z) 
                         or:[
-                            (currentCharacter between:$A and:$Z) 
+                            currentCharacter == $_ 
                                 or:[
-                                    currentCharacter == $_ 
-                                        or:[
-                                            (currentCharacter between:$a and:$n) 
-                                                or:[ (currentCharacter between:$p and:$z) ]
-                                        ]
+                                    (currentCharacter between:$a and:$t) 
+                                        or:[ (currentCharacter between:$v and:$z) ]
                                 ]
                         ]
                 ]) 
-                    ifTrue:[
+                    ifTrue:[ ^ self scan1 ].
+            (currentCharacter between:$- and:$/) ifTrue:[
+                [
+                    self recordMatch:#( 33 ).
+                    self step.
+                    (currentCharacter isLetterOrDigit 
+                        or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                ] whileTrue.
+                ^ self reportLastMatch
+            ].
+            (currentCharacter == $u) ifTrue:[
+                self recordMatch:#( 30 33 ).
+                self step.
+                ((currentCharacter between:$0 and:$9) 
+                    or:[
+                        (currentCharacter between:$A and:$Z) 
+                            or:[
+                                currentCharacter == $_ 
+                                    or:[
+                                        (currentCharacter between:$a and:$l) 
+                                            or:[ (currentCharacter between:$n and:$z) ]
+                                    ]
+                            ]
+                    ]) 
+                        ifTrue:[ ^ self scan1 ].
+                (currentCharacter between:$- and:$/) ifTrue:[
+                    [
+                        self recordMatch:#( 33 ).
+                        self step.
+                        (currentCharacter isLetterOrDigit 
+                            or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                    ] whileTrue.
+                    ^ self reportLastMatch
+                ].
+                (currentCharacter == $m) ifTrue:[
+                    self recordMatch:#( 30 33 ).
+                    self step.
+                    (currentCharacter isLetterOrDigit or:[ currentCharacter == $_ ]) ifTrue:[
+                        ^ self scan1
+                    ].
+                    (currentCharacter between:$. and:$/) ifTrue:[
                         [
-                            self recordMatch:#( 30 ).
+                            self recordMatch:#( 33 ).
                             self step.
                             (currentCharacter isLetterOrDigit 
                                 or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
                         ] whileTrue.
                         ^ self reportLastMatch
                     ].
-            (currentCharacter == $o) ifTrue:[
-                self recordMatch:#( 30 ).
-                self step.
-                ((currentCharacter between:$- and:$9) 
-                    or:[
-                        (currentCharacter between:$A and:$Z) 
+                    (currentCharacter == $-) ifTrue:[
+                        self recordMatch:#( 33 ).
+                        self step.
+                        ((currentCharacter between:$- and:$9) 
                             or:[
-                                currentCharacter == $_ 
+                                (currentCharacter between:$A and:$Z) 
                                     or:[
-                                        (currentCharacter between:$a and:$q) 
-                                            or:[ (currentCharacter between:$s and:$z) ]
-                                    ]
-                            ]
-                    ]) 
-                        ifTrue:[
-                            [
-                                self recordMatch:#( 30 ).
-                                self step.
-                                (currentCharacter isLetterOrDigit 
-                                    or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
-                            ] whileTrue.
-                            ^ self reportLastMatch
-                        ].
-                (currentCharacter == $r) ifTrue:[
-                    self recordMatch:#( 30 ).
-                    self step.
-                    (currentCharacter isXMLDigit 
-                        or:[
-                            (currentCharacter between:$- and:$/) 
-                                or:[
-                                    (currentCharacter between:$A and:$Z) 
-                                        or:[
-                                            currentCharacter == $_ 
-                                                or:[
-                                                    (currentCharacter between:$a and:$d) 
-                                                        or:[ (currentCharacter between:$f and:$z) ]
-                                                ]
-                                        ]
-                                ]
-                        ]) 
-                            ifTrue:[
-                                [
-                                    self recordMatch:#( 30 ).
-                                    self step.
-                                    (currentCharacter isLetterOrDigit 
-                                        or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
-                                ] whileTrue.
-                                ^ self reportLastMatch
-                            ].
-                    (currentCharacter == $e) ifTrue:[
-                        self recordMatch:#( 30 ).
-                        self step.
-                        (currentCharacter isXMLDigit 
-                            or:[
-                                (currentCharacter between:$- and:$/) 
-                                    or:[
-                                        (currentCharacter between:$A and:$Z) 
+                                        currentCharacter == $_ 
                                             or:[
-                                                currentCharacter == $_ 
-                                                    or:[
-                                                        (currentCharacter between:$a and:$h) 
-                                                            or:[ (currentCharacter between:$j and:$z) ]
-                                                    ]
+                                                (currentCharacter between:$a and:$e) 
+                                                    or:[ (currentCharacter between:$g and:$z) ]
                                             ]
                                     ]
                             ]) 
                                 ifTrue:[
                                     [
-                                        self recordMatch:#( 30 ).
+                                        self recordMatch:#( 33 ).
                                         self step.
                                         (currentCharacter isLetterOrDigit 
                                             or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
                                     ] whileTrue.
                                     ^ self reportLastMatch
                                 ].
-                        (currentCharacter == $i) ifTrue:[
-                            self recordMatch:#( 30 ).
+                        (currentCharacter == $f) ifTrue:[
+                            self recordMatch:#( 33 ).
                             self step.
-                            ((currentCharacter between:$- and:$9) 
+                            (currentCharacter isXMLDigit 
                                 or:[
-                                    (currentCharacter between:$A and:$Z) 
+                                    (currentCharacter between:$- and:$/) 
                                         or:[
-                                            currentCharacter == $_ 
+                                            (currentCharacter between:$A and:$Z) 
                                                 or:[
-                                                    (currentCharacter between:$a and:$f) 
-                                                        or:[ (currentCharacter between:$h and:$z) ]
+                                                    currentCharacter == $_ 
+                                                        or:[
+                                                            (currentCharacter between:$a and:$n) 
+                                                                or:[ (currentCharacter between:$p and:$z) ]
+                                                        ]
                                                 ]
                                         ]
                                 ]) 
                                     ifTrue:[
                                         [
-                                            self recordMatch:#( 30 ).
+                                            self recordMatch:#( 33 ).
                                             self step.
                                             (currentCharacter isLetterOrDigit 
                                                 or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
                                         ] whileTrue.
                                         ^ self reportLastMatch
                                     ].
-                            (currentCharacter == $g) ifTrue:[
-                                self recordMatch:#( 30 ).
+                            (currentCharacter == $o) ifTrue:[
+                                self recordMatch:#( 33 ).
                                 self step.
                                 ((currentCharacter between:$- and:$9) 
                                     or:[
@@ -1070,34 +1087,140 @@
                                             or:[
                                                 currentCharacter == $_ 
                                                     or:[
-                                                        (currentCharacter between:$a and:$m) 
-                                                            or:[ (currentCharacter between:$o and:$z) ]
+                                                        (currentCharacter between:$a and:$q) 
+                                                            or:[ (currentCharacter between:$s and:$z) ]
                                                     ]
                                             ]
                                     ]) 
                                         ifTrue:[
                                             [
-                                                self recordMatch:#( 30 ).
+                                                self recordMatch:#( 33 ).
                                                 self step.
                                                 (currentCharacter isLetterOrDigit 
                                                     or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
                                             ] whileTrue.
                                             ^ self reportLastMatch
                                         ].
-                                (currentCharacter == $n) ifTrue:[
-                                    self recordMatch:#( 19 30 ).
+                                (currentCharacter == $r) ifTrue:[
+                                    self recordMatch:#( 33 ).
                                     self step.
-                                    (currentCharacter isLetterOrDigit 
-                                        or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ]) 
+                                    (currentCharacter isXMLDigit 
+                                        or:[
+                                            (currentCharacter between:$- and:$/) 
+                                                or:[
+                                                    (currentCharacter between:$A and:$Z) 
+                                                        or:[
+                                                            currentCharacter == $_ 
+                                                                or:[
+                                                                    (currentCharacter between:$a and:$d) 
+                                                                        or:[ (currentCharacter between:$f and:$z) ]
+                                                                ]
+                                                        ]
+                                                ]
+                                        ]) 
                                             ifTrue:[
                                                 [
-                                                    self recordMatch:#( 30 ).
+                                                    self recordMatch:#( 33 ).
                                                     self step.
                                                     (currentCharacter isLetterOrDigit 
                                                         or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
                                                 ] whileTrue.
                                                 ^ self reportLastMatch
                                             ].
+                                    (currentCharacter == $e) ifTrue:[
+                                        self recordMatch:#( 33 ).
+                                        self step.
+                                        (currentCharacter isXMLDigit 
+                                            or:[
+                                                (currentCharacter between:$- and:$/) 
+                                                    or:[
+                                                        (currentCharacter between:$A and:$Z) 
+                                                            or:[
+                                                                currentCharacter == $_ 
+                                                                    or:[
+                                                                        (currentCharacter between:$a and:$h) 
+                                                                            or:[ (currentCharacter between:$j and:$z) ]
+                                                                    ]
+                                                            ]
+                                                    ]
+                                            ]) 
+                                                ifTrue:[
+                                                    [
+                                                        self recordMatch:#( 33 ).
+                                                        self step.
+                                                        (currentCharacter isLetterOrDigit 
+                                                            or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                                    ] whileTrue.
+                                                    ^ self reportLastMatch
+                                                ].
+                                        (currentCharacter == $i) ifTrue:[
+                                            self recordMatch:#( 33 ).
+                                            self step.
+                                            ((currentCharacter between:$- and:$9) 
+                                                or:[
+                                                    (currentCharacter between:$A and:$Z) 
+                                                        or:[
+                                                            currentCharacter == $_ 
+                                                                or:[
+                                                                    (currentCharacter between:$a and:$f) 
+                                                                        or:[ (currentCharacter between:$h and:$z) ]
+                                                                ]
+                                                        ]
+                                                ]) 
+                                                    ifTrue:[
+                                                        [
+                                                            self recordMatch:#( 33 ).
+                                                            self step.
+                                                            (currentCharacter isLetterOrDigit 
+                                                                or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                                        ] whileTrue.
+                                                        ^ self reportLastMatch
+                                                    ].
+                                            (currentCharacter == $g) ifTrue:[
+                                                self recordMatch:#( 33 ).
+                                                self step.
+                                                ((currentCharacter between:$- and:$9) 
+                                                    or:[
+                                                        (currentCharacter between:$A and:$Z) 
+                                                            or:[
+                                                                currentCharacter == $_ 
+                                                                    or:[
+                                                                        (currentCharacter between:$a and:$m) 
+                                                                            or:[ (currentCharacter between:$o and:$z) ]
+                                                                    ]
+                                                            ]
+                                                    ]) 
+                                                        ifTrue:[
+                                                            [
+                                                                self recordMatch:#( 33 ).
+                                                                self step.
+                                                                (currentCharacter isLetterOrDigit 
+                                                                    or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                                            ] whileTrue.
+                                                            ^ self reportLastMatch
+                                                        ].
+                                                (currentCharacter == $n) ifTrue:[
+                                                    self recordMatch:#( 18 33 ).
+                                                    self step.
+                                                    (currentCharacter isLetterOrDigit 
+                                                        or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ]) 
+                                                            ifTrue:[
+                                                                [
+                                                                    self recordMatch:#( 33 ).
+                                                                    self step.
+                                                                    (currentCharacter isLetterOrDigit 
+                                                                        or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                                                ] whileTrue.
+                                                                ^ self reportLastMatch
+                                                            ].
+                                                    ^ self reportLastMatch
+                                                ].
+                                                ^ self reportLastMatch
+                                            ].
+                                            ^ self reportLastMatch
+                                        ].
+                                        ^ self reportLastMatch
+                                    ].
                                     ^ self reportLastMatch
                                 ].
                                 ^ self reportLastMatch
@@ -1114,17 +1237,8 @@
         ].
         ^ self reportLastMatch
     ].
-    (currentCharacter == $/) ifTrue:[
-        [
-            self recordMatch:#( 30 ).
-            self step.
-            (currentCharacter isLetterOrDigit 
-                or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
-        ] whileTrue.
-        ^ self reportLastMatch
-    ].
     (currentCharacter == $f) ifTrue:[
-        self recordMatch:#( 27 30 ).
+        self recordMatch:#( 30 33 ).
         self step.
         (currentCharacter isXMLDigit 
             or:[
@@ -1143,7 +1257,7 @@
                 ifTrue:[ ^ self scan1 ].
         (currentCharacter between:$- and:$/) ifTrue:[
             [
-                self recordMatch:#( 30 ).
+                self recordMatch:#( 33 ).
                 self step.
                 (currentCharacter isLetterOrDigit 
                     or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
@@ -1151,7 +1265,7 @@
             ^ self reportLastMatch
         ].
         (currentCharacter == $r) ifTrue:[
-            self recordMatch:#( 27 30 ).
+            self recordMatch:#( 30 33 ).
             self step.
             (currentCharacter isXMLDigit 
                 or:[
@@ -1167,7 +1281,7 @@
                     ifTrue:[ ^ self scan1 ].
             (currentCharacter between:$- and:$/) ifTrue:[
                 [
-                    self recordMatch:#( 30 ).
+                    self recordMatch:#( 33 ).
                     self step.
                     (currentCharacter isLetterOrDigit 
                         or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
@@ -1175,7 +1289,7 @@
                 ^ self reportLastMatch
             ].
             (currentCharacter == $o) ifTrue:[
-                self recordMatch:#( 27 30 ).
+                self recordMatch:#( 30 33 ).
                 self step.
                 ((currentCharacter between:$0 and:$9) 
                     or:[
@@ -1191,7 +1305,7 @@
                         ifTrue:[ ^ self scan1 ].
                 (currentCharacter between:$- and:$/) ifTrue:[
                     [
-                        self recordMatch:#( 30 ).
+                        self recordMatch:#( 33 ).
                         self step.
                         (currentCharacter isLetterOrDigit 
                             or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
@@ -1199,14 +1313,14 @@
                     ^ self reportLastMatch
                 ].
                 (currentCharacter == $m) ifTrue:[
-                    self recordMatch:#( 27 30 ).
+                    self recordMatch:#( 30 33 ).
                     self step.
                     (currentCharacter isLetterOrDigit or:[ currentCharacter == $_ ]) ifTrue:[
                         ^ self scan1
                     ].
                     (currentCharacter between:$- and:$/) ifTrue:[
                         [
-                            self recordMatch:#( 30 ).
+                            self recordMatch:#( 33 ).
                             self step.
                             (currentCharacter isLetterOrDigit 
                                 or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
@@ -1214,7 +1328,7 @@
                         ^ self reportLastMatch
                     ].
                     (currentCharacter == $:) ifTrue:[
-                        ^ self recordAndReportMatch:#( 9 ).
+                        ^ self recordAndReportMatch:#( 10 ).
                     ].
                     ^ self reportLastMatch
                 ].
@@ -1223,7 +1337,7 @@
             ^ self reportLastMatch
         ].
         (currentCharacter == $u) ifTrue:[
-            self recordMatch:#( 27 30 ).
+            self recordMatch:#( 30 33 ).
             self step.
             ((currentCharacter between:$0 and:$9) 
                 or:[
@@ -1239,7 +1353,7 @@
                     ifTrue:[ ^ self scan1 ].
             (currentCharacter between:$- and:$/) ifTrue:[
                 [
-                    self recordMatch:#( 30 ).
+                    self recordMatch:#( 33 ).
                     self step.
                     (currentCharacter isLetterOrDigit 
                         or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
@@ -1247,7 +1361,7 @@
                 ^ self reportLastMatch
             ].
             (currentCharacter == $n) ifTrue:[
-                self recordMatch:#( 27 30 ).
+                self recordMatch:#( 30 33 ).
                 self step.
                 ((currentCharacter between:$0 and:$9) 
                     or:[
@@ -1263,7 +1377,7 @@
                         ifTrue:[ ^ self scan1 ].
                 (currentCharacter between:$- and:$/) ifTrue:[
                     [
-                        self recordMatch:#( 30 ).
+                        self recordMatch:#( 33 ).
                         self step.
                         (currentCharacter isLetterOrDigit 
                             or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
@@ -1271,7 +1385,7 @@
                     ^ self reportLastMatch
                 ].
                 (currentCharacter == $c) ifTrue:[
-                    self recordMatch:#( 27 30 ).
+                    self recordMatch:#( 30 33 ).
                     self step.
                     ((currentCharacter between:$0 and:$9) 
                         or:[
@@ -1287,7 +1401,7 @@
                             ifTrue:[ ^ self scan1 ].
                     (currentCharacter between:$- and:$/) ifTrue:[
                         [
-                            self recordMatch:#( 30 ).
+                            self recordMatch:#( 33 ).
                             self step.
                             (currentCharacter isLetterOrDigit 
                                 or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
@@ -1295,7 +1409,7 @@
                         ^ self reportLastMatch
                     ].
                     (currentCharacter == $t) ifTrue:[
-                        self recordMatch:#( 27 30 ).
+                        self recordMatch:#( 30 33 ).
                         self step.
                         (currentCharacter isXMLDigit 
                             or:[
@@ -1311,7 +1425,7 @@
                                 ifTrue:[ ^ self scan1 ].
                         (currentCharacter between:$- and:$/) ifTrue:[
                             [
-                                self recordMatch:#( 30 ).
+                                self recordMatch:#( 33 ).
                                 self step.
                                 (currentCharacter isLetterOrDigit 
                                     or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
@@ -1319,7 +1433,7 @@
                             ^ self reportLastMatch
                         ].
                         (currentCharacter == $i) ifTrue:[
-                            self recordMatch:#( 27 30 ).
+                            self recordMatch:#( 30 33 ).
                             self step.
                             (currentCharacter isXMLDigit 
                                 or:[
@@ -1335,7 +1449,7 @@
                                     ifTrue:[ ^ self scan1 ].
                             (currentCharacter between:$- and:$/) ifTrue:[
                                 [
-                                    self recordMatch:#( 30 ).
+                                    self recordMatch:#( 33 ).
                                     self step.
                                     (currentCharacter isLetterOrDigit 
                                         or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
@@ -1343,7 +1457,7 @@
                                 ^ self reportLastMatch
                             ].
                             (currentCharacter == $o) ifTrue:[
-                                self recordMatch:#( 27 30 ).
+                                self recordMatch:#( 30 33 ).
                                 self step.
                                 ((currentCharacter between:$0 and:$9) 
                                     or:[
@@ -1359,7 +1473,7 @@
                                         ifTrue:[ ^ self scan1 ].
                                 (currentCharacter between:$- and:$/) ifTrue:[
                                     [
-                                        self recordMatch:#( 30 ).
+                                        self recordMatch:#( 33 ).
                                         self step.
                                         (currentCharacter isLetterOrDigit 
                                             or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
@@ -1367,14 +1481,14 @@
                                     ^ self reportLastMatch
                                 ].
                                 (currentCharacter == $n) ifTrue:[
-                                    self recordMatch:#( 27 30 ).
+                                    self recordMatch:#( 30 33 ).
                                     self step.
                                     (currentCharacter isLetterOrDigit or:[ currentCharacter == $_ ]) ifTrue:[
                                         ^ self scan1
                                     ].
                                     (currentCharacter between:$. and:$/) ifTrue:[
                                         [
-                                            self recordMatch:#( 30 ).
+                                            self recordMatch:#( 33 ).
                                             self step.
                                             (currentCharacter isLetterOrDigit 
                                                 or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
@@ -1382,7 +1496,7 @@
                                         ^ self reportLastMatch
                                     ].
                                     (currentCharacter == $-) ifTrue:[
-                                        self recordMatch:#( 30 ).
+                                        self recordMatch:#( 33 ).
                                         self step.
                                         ((currentCharacter between:$- and:$9) 
                                             or:[
@@ -1397,7 +1511,7 @@
                                             ]) 
                                                 ifTrue:[
                                                     [
-                                                        self recordMatch:#( 30 ).
+                                                        self recordMatch:#( 33 ).
                                                         self step.
                                                         (currentCharacter isLetterOrDigit 
                                                             or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
@@ -1405,7 +1519,7 @@
                                                     ^ self reportLastMatch
                                                 ].
                                         (currentCharacter == $t) ifTrue:[
-                                            self recordMatch:#( 30 ).
+                                            self recordMatch:#( 33 ).
                                             self step.
                                             ((currentCharacter between:$- and:$9) 
                                                 or:[
@@ -1417,7 +1531,7 @@
                                                 ]) 
                                                     ifTrue:[
                                                         [
-                                                            self recordMatch:#( 30 ).
+                                                            self recordMatch:#( 33 ).
                                                             self step.
                                                             (currentCharacter isLetterOrDigit 
                                                                 or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
@@ -1425,7 +1539,7 @@
                                                         ^ self reportLastMatch
                                                     ].
                                             (currentCharacter == $y) ifTrue:[
-                                                self recordMatch:#( 30 ).
+                                                self recordMatch:#( 33 ).
                                                 self step.
                                                 ((currentCharacter between:$- and:$9) 
                                                     or:[
@@ -1440,7 +1554,7 @@
                                                     ]) 
                                                         ifTrue:[
                                                             [
-                                                                self recordMatch:#( 30 ).
+                                                                self recordMatch:#( 33 ).
                                                                 self step.
                                                                 (currentCharacter isLetterOrDigit 
                                                                     or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
@@ -1448,7 +1562,7 @@
                                                             ^ self reportLastMatch
                                                         ].
                                                 (currentCharacter == $p) ifTrue:[
-                                                    self recordMatch:#( 30 ).
+                                                    self recordMatch:#( 33 ).
                                                     self step.
                                                     (currentCharacter isXMLDigit 
                                                         or:[
@@ -1466,7 +1580,7 @@
                                                         ]) 
                                                             ifTrue:[
                                                                 [
-                                                                    self recordMatch:#( 30 ).
+                                                                    self recordMatch:#( 33 ).
                                                                     self step.
                                                                     (currentCharacter isLetterOrDigit 
                                                                         or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
@@ -1474,13 +1588,13 @@
                                                                 ^ self reportLastMatch
                                                             ].
                                                     (currentCharacter == $e) ifTrue:[
-                                                        self recordMatch:#( 1 30 ).
+                                                        self recordMatch:#( 4 33 ).
                                                         self step.
                                                         (currentCharacter isLetterOrDigit 
                                                             or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ]) 
                                                                 ifTrue:[
                                                                     [
-                                                                        self recordMatch:#( 30 ).
+                                                                        self recordMatch:#( 33 ).
                                                                         self step.
                                                                         (currentCharacter isLetterOrDigit 
                                                                             or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
@@ -1514,7 +1628,7 @@
         ^ self reportLastMatch
     ].
     (currentCharacter == $p) ifTrue:[
-        self recordMatch:#( 27 30 ).
+        self recordMatch:#( 30 33 ).
         self step.
         (currentCharacter isXMLDigit 
             or:[
@@ -1530,7 +1644,7 @@
                 ifTrue:[ ^ self scan1 ].
         (currentCharacter between:$- and:$/) ifTrue:[
             [
-                self recordMatch:#( 30 ).
+                self recordMatch:#( 33 ).
                 self step.
                 (currentCharacter isLetterOrDigit 
                     or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
@@ -1538,7 +1652,7 @@
             ^ self reportLastMatch
         ].
         (currentCharacter == $o) ifTrue:[
-            self recordMatch:#( 27 30 ).
+            self recordMatch:#( 30 33 ).
             self step.
             (currentCharacter isXMLDigit 
                 or:[
@@ -1554,7 +1668,7 @@
                     ifTrue:[ ^ self scan1 ].
             (currentCharacter between:$- and:$/) ifTrue:[
                 [
-                    self recordMatch:#( 30 ).
+                    self recordMatch:#( 33 ).
                     self step.
                     (currentCharacter isLetterOrDigit 
                         or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
@@ -1562,7 +1676,7 @@
                 ^ self reportLastMatch
             ].
             (currentCharacter == $i) ifTrue:[
-                self recordMatch:#( 27 30 ).
+                self recordMatch:#( 30 33 ).
                 self step.
                 ((currentCharacter between:$0 and:$9) 
                     or:[
@@ -1578,7 +1692,7 @@
                         ifTrue:[ ^ self scan1 ].
                 (currentCharacter between:$- and:$/) ifTrue:[
                     [
-                        self recordMatch:#( 30 ).
+                        self recordMatch:#( 33 ).
                         self step.
                         (currentCharacter isLetterOrDigit 
                             or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
@@ -1586,7 +1700,7 @@
                     ^ self reportLastMatch
                 ].
                 (currentCharacter == $n) ifTrue:[
-                    self recordMatch:#( 27 30 ).
+                    self recordMatch:#( 30 33 ).
                     self step.
                     ((currentCharacter between:$0 and:$9) 
                         or:[
@@ -1602,7 +1716,7 @@
                             ifTrue:[ ^ self scan1 ].
                     (currentCharacter between:$- and:$/) ifTrue:[
                         [
-                            self recordMatch:#( 30 ).
+                            self recordMatch:#( 33 ).
                             self step.
                             (currentCharacter isLetterOrDigit 
                                 or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
@@ -1610,7 +1724,7 @@
                         ^ self reportLastMatch
                     ].
                     (currentCharacter == $t) ifTrue:[
-                        self recordMatch:#( 27 30 ).
+                        self recordMatch:#( 30 33 ).
                         self step.
                         (currentCharacter isXMLDigit 
                             or:[
@@ -1626,7 +1740,7 @@
                                 ifTrue:[ ^ self scan1 ].
                         (currentCharacter between:$- and:$/) ifTrue:[
                             [
-                                self recordMatch:#( 30 ).
+                                self recordMatch:#( 33 ).
                                 self step.
                                 (currentCharacter isLetterOrDigit 
                                     or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
@@ -1634,7 +1748,7 @@
                             ^ self reportLastMatch
                         ].
                         (currentCharacter == $e) ifTrue:[
-                            self recordMatch:#( 27 30 ).
+                            self recordMatch:#( 30 33 ).
                             self step.
                             ((currentCharacter between:$0 and:$9) 
                                 or:[
@@ -1650,7 +1764,7 @@
                                     ifTrue:[ ^ self scan1 ].
                             (currentCharacter between:$- and:$/) ifTrue:[
                                 [
-                                    self recordMatch:#( 30 ).
+                                    self recordMatch:#( 33 ).
                                     self step.
                                     (currentCharacter isLetterOrDigit 
                                         or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
@@ -1658,14 +1772,14 @@
                                 ^ self reportLastMatch
                             ].
                             (currentCharacter == $r) ifTrue:[
-                                self recordMatch:#( 27 30 ).
+                                self recordMatch:#( 30 33 ).
                                 self step.
                                 (currentCharacter isLetterOrDigit or:[ currentCharacter == $_ ]) ifTrue:[
                                     ^ self scan1
                                 ].
                                 (currentCharacter between:$. and:$/) ifTrue:[
                                     [
-                                        self recordMatch:#( 30 ).
+                                        self recordMatch:#( 33 ).
                                         self step.
                                         (currentCharacter isLetterOrDigit 
                                             or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
@@ -1673,7 +1787,7 @@
                                     ^ self reportLastMatch
                                 ].
                                 (currentCharacter == $-) ifTrue:[
-                                    self recordMatch:#( 30 ).
+                                    self recordMatch:#( 33 ).
                                     self step.
                                     ((currentCharacter between:$- and:$9) 
                                         or:[
@@ -1688,7 +1802,7 @@
                                         ]) 
                                             ifTrue:[
                                                 [
-                                                    self recordMatch:#( 30 ).
+                                                    self recordMatch:#( 33 ).
                                                     self step.
                                                     (currentCharacter isLetterOrDigit 
                                                         or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
@@ -1696,7 +1810,7 @@
                                                 ^ self reportLastMatch
                                             ].
                                     (currentCharacter == $t) ifTrue:[
-                                        self recordMatch:#( 30 ).
+                                        self recordMatch:#( 33 ).
                                         self step.
                                         (currentCharacter isXMLDigit 
                                             or:[
@@ -1714,7 +1828,7 @@
                                             ]) 
                                                 ifTrue:[
                                                     [
-                                                        self recordMatch:#( 30 ).
+                                                        self recordMatch:#( 33 ).
                                                         self step.
                                                         (currentCharacter isLetterOrDigit 
                                                             or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
@@ -1722,13 +1836,13 @@
                                                     ^ self reportLastMatch
                                                 ].
                                         (currentCharacter == $o) ifTrue:[
-                                            self recordMatch:#( 23 30 ).
+                                            self recordMatch:#( 29 33 ).
                                             self step.
                                             (currentCharacter isLetterOrDigit 
                                                 or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ]) 
                                                     ifTrue:[
                                                         [
-                                                            self recordMatch:#( 30 ).
+                                                            self recordMatch:#( 33 ).
                                                             self step.
                                                             (currentCharacter isLetterOrDigit 
                                                                 or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
@@ -1755,23 +1869,1061 @@
         ].
         ^ self reportLastMatch
     ].
+    (currentCharacter == $s) ifTrue:[
+        self recordMatch:#( 30 33 ).
+        self step.
+        ((currentCharacter between:$0 and:$9) 
+            or:[
+                (currentCharacter between:$A and:$Z) 
+                    or:[
+                        currentCharacter == $_ 
+                            or:[
+                                (currentCharacter between:$a and:$s) 
+                                    or:[ (currentCharacter between:$u and:$z) ]
+                            ]
+                    ]
+            ]) 
+                ifTrue:[ ^ self scan1 ].
+        (currentCharacter between:$- and:$/) ifTrue:[
+            [
+                self recordMatch:#( 33 ).
+                self step.
+                (currentCharacter isLetterOrDigit 
+                    or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+            ] whileTrue.
+            ^ self reportLastMatch
+        ].
+        (currentCharacter == $t) ifTrue:[
+            self recordMatch:#( 30 33 ).
+            self step.
+            ((currentCharacter between:$0 and:$9) 
+                or:[
+                    (currentCharacter between:$A and:$Z) 
+                        or:[
+                            currentCharacter == $_ 
+                                or:[
+                                    (currentCharacter between:$a and:$q) 
+                                        or:[ (currentCharacter between:$s and:$z) ]
+                                ]
+                        ]
+                ]) 
+                    ifTrue:[ ^ self scan1 ].
+            (currentCharacter between:$- and:$/) ifTrue:[
+                [
+                    self recordMatch:#( 33 ).
+                    self step.
+                    (currentCharacter isLetterOrDigit 
+                        or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                ] whileTrue.
+                ^ self reportLastMatch
+            ].
+            (currentCharacter == $r) ifTrue:[
+                self recordMatch:#( 30 33 ).
+                self step.
+                (currentCharacter isXMLDigit 
+                    or:[
+                        (currentCharacter between:$A and:$Z) 
+                            or:[
+                                currentCharacter == $_ 
+                                    or:[
+                                        (currentCharacter between:$a and:$t) 
+                                            or:[ (currentCharacter between:$v and:$z) ]
+                                    ]
+                            ]
+                    ]) 
+                        ifTrue:[ ^ self scan1 ].
+                (currentCharacter between:$- and:$/) ifTrue:[
+                    [
+                        self recordMatch:#( 33 ).
+                        self step.
+                        (currentCharacter isLetterOrDigit 
+                            or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                    ] whileTrue.
+                    ^ self reportLastMatch
+                ].
+                (currentCharacter == $u) ifTrue:[
+                    self recordMatch:#( 30 33 ).
+                    self step.
+                    ((currentCharacter between:$0 and:$9) 
+                        or:[
+                            (currentCharacter between:$A and:$Z) 
+                                or:[
+                                    currentCharacter == $_ 
+                                        or:[
+                                            (currentCharacter between:$a and:$b) 
+                                                or:[ (currentCharacter between:$d and:$z) ]
+                                        ]
+                                ]
+                        ]) 
+                            ifTrue:[ ^ self scan1 ].
+                    (currentCharacter between:$- and:$/) ifTrue:[
+                        [
+                            self recordMatch:#( 33 ).
+                            self step.
+                            (currentCharacter isLetterOrDigit 
+                                or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                        ] whileTrue.
+                        ^ self reportLastMatch
+                    ].
+                    (currentCharacter == $c) ifTrue:[
+                        self recordMatch:#( 30 33 ).
+                        self step.
+                        ((currentCharacter between:$0 and:$9) 
+                            or:[
+                                (currentCharacter between:$A and:$Z) 
+                                    or:[
+                                        currentCharacter == $_ 
+                                            or:[
+                                                (currentCharacter between:$a and:$s) 
+                                                    or:[ (currentCharacter between:$u and:$z) ]
+                                            ]
+                                    ]
+                            ]) 
+                                ifTrue:[ ^ self scan1 ].
+                        (currentCharacter between:$- and:$/) ifTrue:[
+                            [
+                                self recordMatch:#( 33 ).
+                                self step.
+                                (currentCharacter isLetterOrDigit 
+                                    or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                            ] whileTrue.
+                            ^ self reportLastMatch
+                        ].
+                        (currentCharacter == $t) ifTrue:[
+                            self recordMatch:#( 30 33 ).
+                            self step.
+                            (currentCharacter isLetterOrDigit or:[ currentCharacter == $_ ]) ifTrue:[
+                                ^ self scan1
+                            ].
+                            (currentCharacter between:$. and:$/) ifTrue:[
+                                [
+                                    self recordMatch:#( 33 ).
+                                    self step.
+                                    (currentCharacter isLetterOrDigit 
+                                        or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                ] whileTrue.
+                                ^ self reportLastMatch
+                            ].
+                            (currentCharacter == $-) ifTrue:[
+                                self recordMatch:#( 33 ).
+                                self step.
+                                ((currentCharacter between:$- and:$9) 
+                                    or:[
+                                        (currentCharacter between:$A and:$Z) 
+                                            or:[
+                                                currentCharacter == $_ 
+                                                    or:[
+                                                        (currentCharacter between:$a and:$e) 
+                                                            or:[ (currentCharacter between:$g and:$z) ]
+                                                    ]
+                                            ]
+                                    ]) 
+                                        ifTrue:[
+                                            [
+                                                self recordMatch:#( 33 ).
+                                                self step.
+                                                (currentCharacter isLetterOrDigit 
+                                                    or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                            ] whileTrue.
+                                            ^ self reportLastMatch
+                                        ].
+                                (currentCharacter == $f) ifTrue:[
+                                    self recordMatch:#( 33 ).
+                                    self step.
+                                    (currentCharacter isXMLDigit 
+                                        or:[
+                                            (currentCharacter between:$- and:$/) 
+                                                or:[
+                                                    (currentCharacter between:$A and:$Z) 
+                                                        or:[
+                                                            currentCharacter == $_ 
+                                                                or:[
+                                                                    (currentCharacter between:$a and:$n) 
+                                                                        or:[ (currentCharacter between:$p and:$z) ]
+                                                                ]
+                                                        ]
+                                                ]
+                                        ]) 
+                                            ifTrue:[
+                                                [
+                                                    self recordMatch:#( 33 ).
+                                                    self step.
+                                                    (currentCharacter isLetterOrDigit 
+                                                        or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                                ] whileTrue.
+                                                ^ self reportLastMatch
+                                            ].
+                                    (currentCharacter == $o) ifTrue:[
+                                        self recordMatch:#( 33 ).
+                                        self step.
+                                        ((currentCharacter between:$- and:$9) 
+                                            or:[
+                                                (currentCharacter between:$A and:$Z) 
+                                                    or:[
+                                                        currentCharacter == $_ 
+                                                            or:[
+                                                                (currentCharacter between:$a and:$q) 
+                                                                    or:[ (currentCharacter between:$s and:$z) ]
+                                                            ]
+                                                    ]
+                                            ]) 
+                                                ifTrue:[
+                                                    [
+                                                        self recordMatch:#( 33 ).
+                                                        self step.
+                                                        (currentCharacter isLetterOrDigit 
+                                                            or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                                    ] whileTrue.
+                                                    ^ self reportLastMatch
+                                                ].
+                                        (currentCharacter == $r) ifTrue:[
+                                            self recordMatch:#( 33 ).
+                                            self step.
+                                            (currentCharacter isXMLDigit 
+                                                or:[
+                                                    (currentCharacter between:$- and:$/) 
+                                                        or:[
+                                                            (currentCharacter between:$A and:$Z) 
+                                                                or:[
+                                                                    currentCharacter == $_ 
+                                                                        or:[
+                                                                            (currentCharacter between:$a and:$d) 
+                                                                                or:[ (currentCharacter between:$f and:$z) ]
+                                                                        ]
+                                                                ]
+                                                        ]
+                                                ]) 
+                                                    ifTrue:[
+                                                        [
+                                                            self recordMatch:#( 33 ).
+                                                            self step.
+                                                            (currentCharacter isLetterOrDigit 
+                                                                or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                                        ] whileTrue.
+                                                        ^ self reportLastMatch
+                                                    ].
+                                            (currentCharacter == $e) ifTrue:[
+                                                self recordMatch:#( 33 ).
+                                                self step.
+                                                (currentCharacter isXMLDigit 
+                                                    or:[
+                                                        (currentCharacter between:$- and:$/) 
+                                                            or:[
+                                                                (currentCharacter between:$A and:$Z) 
+                                                                    or:[
+                                                                        currentCharacter == $_ 
+                                                                            or:[
+                                                                                (currentCharacter between:$a and:$h) 
+                                                                                    or:[ (currentCharacter between:$j and:$z) ]
+                                                                            ]
+                                                                    ]
+                                                            ]
+                                                    ]) 
+                                                        ifTrue:[
+                                                            [
+                                                                self recordMatch:#( 33 ).
+                                                                self step.
+                                                                (currentCharacter isLetterOrDigit 
+                                                                    or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                                            ] whileTrue.
+                                                            ^ self reportLastMatch
+                                                        ].
+                                                (currentCharacter == $i) ifTrue:[
+                                                    self recordMatch:#( 33 ).
+                                                    self step.
+                                                    ((currentCharacter between:$- and:$9) 
+                                                        or:[
+                                                            (currentCharacter between:$A and:$Z) 
+                                                                or:[
+                                                                    currentCharacter == $_ 
+                                                                        or:[
+                                                                            (currentCharacter between:$a and:$f) 
+                                                                                or:[ (currentCharacter between:$h and:$z) ]
+                                                                        ]
+                                                                ]
+                                                        ]) 
+                                                            ifTrue:[
+                                                                [
+                                                                    self recordMatch:#( 33 ).
+                                                                    self step.
+                                                                    (currentCharacter isLetterOrDigit 
+                                                                        or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                                                ] whileTrue.
+                                                                ^ self reportLastMatch
+                                                            ].
+                                                    (currentCharacter == $g) ifTrue:[
+                                                        self recordMatch:#( 33 ).
+                                                        self step.
+                                                        ((currentCharacter between:$- and:$9) 
+                                                            or:[
+                                                                (currentCharacter between:$A and:$Z) 
+                                                                    or:[
+                                                                        currentCharacter == $_ 
+                                                                            or:[
+                                                                                (currentCharacter between:$a and:$m) 
+                                                                                    or:[ (currentCharacter between:$o and:$z) ]
+                                                                            ]
+                                                                    ]
+                                                            ]) 
+                                                                ifTrue:[
+                                                                    [
+                                                                        self recordMatch:#( 33 ).
+                                                                        self step.
+                                                                        (currentCharacter isLetterOrDigit 
+                                                                            or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                                                    ] whileTrue.
+                                                                    ^ self reportLastMatch
+                                                                ].
+                                                        (currentCharacter == $n) ifTrue:[
+                                                            self recordMatch:#( 27 33 ).
+                                                            self step.
+                                                            (currentCharacter isLetterOrDigit 
+                                                                or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ]) 
+                                                                    ifTrue:[
+                                                                        [
+                                                                            self recordMatch:#( 33 ).
+                                                                            self step.
+                                                                            (currentCharacter isLetterOrDigit 
+                                                                                or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                                                        ] whileTrue.
+                                                                        ^ self reportLastMatch
+                                                                    ].
+                                                            ^ self reportLastMatch
+                                                        ].
+                                                        ^ self reportLastMatch
+                                                    ].
+                                                    ^ self reportLastMatch
+                                                ].
+                                                ^ self reportLastMatch
+                                            ].
+                                            ^ self reportLastMatch
+                                        ].
+                                        ^ self reportLastMatch
+                                    ].
+                                    ^ self reportLastMatch
+                                ].
+                                ^ self reportLastMatch
+                            ].
+                            ^ self reportLastMatch
+                        ].
+                        ^ self reportLastMatch
+                    ].
+                    ^ self reportLastMatch
+                ].
+                ^ self reportLastMatch
+            ].
+            ^ self reportLastMatch
+        ].
+        ^ self reportLastMatch
+    ].
+    (currentCharacter == $t) ifTrue:[
+        self recordMatch:#( 30 33 ).
+        self step.
+        ((currentCharacter between:$0 and:$9) 
+            or:[
+                (currentCharacter between:$A and:$Z) 
+                    or:[
+                        currentCharacter == $_ 
+                            or:[ (currentCharacter between:$a and:$x) or:[ currentCharacter == $z ] ]
+                    ]
+            ]) 
+                ifTrue:[ ^ self scan1 ].
+        (currentCharacter between:$- and:$/) ifTrue:[
+            [
+                self recordMatch:#( 33 ).
+                self step.
+                (currentCharacter isLetterOrDigit 
+                    or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+            ] whileTrue.
+            ^ self reportLastMatch
+        ].
+        (currentCharacter == $y) ifTrue:[
+            self recordMatch:#( 30 33 ).
+            self step.
+            ((currentCharacter between:$0 and:$9) 
+                or:[
+                    (currentCharacter between:$A and:$Z) 
+                        or:[
+                            currentCharacter == $_ 
+                                or:[
+                                    (currentCharacter between:$a and:$o) 
+                                        or:[ (currentCharacter between:$q and:$z) ]
+                                ]
+                        ]
+                ]) 
+                    ifTrue:[ ^ self scan1 ].
+            (currentCharacter between:$- and:$/) ifTrue:[
+                [
+                    self recordMatch:#( 33 ).
+                    self step.
+                    (currentCharacter isLetterOrDigit 
+                        or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                ] whileTrue.
+                ^ self reportLastMatch
+            ].
+            (currentCharacter == $p) ifTrue:[
+                self recordMatch:#( 30 33 ).
+                self step.
+                (currentCharacter isXMLDigit 
+                    or:[
+                        (currentCharacter between:$A and:$Z) 
+                            or:[
+                                currentCharacter == $_ 
+                                    or:[
+                                        (currentCharacter between:$a and:$d) 
+                                            or:[ (currentCharacter between:$f and:$z) ]
+                                    ]
+                            ]
+                    ]) 
+                        ifTrue:[ ^ self scan1 ].
+                (currentCharacter between:$- and:$/) ifTrue:[
+                    [
+                        self recordMatch:#( 33 ).
+                        self step.
+                        (currentCharacter isLetterOrDigit 
+                            or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                    ] whileTrue.
+                    ^ self reportLastMatch
+                ].
+                (currentCharacter == $e) ifTrue:[
+                    self recordMatch:#( 30 33 ).
+                    self step.
+                    ((currentCharacter between:$0 and:$9) 
+                        or:[
+                            (currentCharacter between:$A and:$Z) 
+                                or:[
+                                    currentCharacter == $_ 
+                                        or:[
+                                            (currentCharacter between:$a and:$c) 
+                                                or:[ (currentCharacter between:$e and:$z) ]
+                                        ]
+                                ]
+                        ]) 
+                            ifTrue:[ ^ self scan1 ].
+                    (currentCharacter between:$- and:$/) ifTrue:[
+                        [
+                            self recordMatch:#( 33 ).
+                            self step.
+                            (currentCharacter isLetterOrDigit 
+                                or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                        ] whileTrue.
+                        ^ self reportLastMatch
+                    ].
+                    (currentCharacter == $d) ifTrue:[
+                        self recordMatch:#( 30 33 ).
+                        self step.
+                        (currentCharacter isXMLDigit 
+                            or:[
+                                (currentCharacter between:$A and:$Z) 
+                                    or:[
+                                        currentCharacter == $_ 
+                                            or:[
+                                                (currentCharacter between:$a and:$d) 
+                                                    or:[ (currentCharacter between:$f and:$z) ]
+                                            ]
+                                    ]
+                            ]) 
+                                ifTrue:[ ^ self scan1 ].
+                        (currentCharacter between:$- and:$/) ifTrue:[
+                            [
+                                self recordMatch:#( 33 ).
+                                self step.
+                                (currentCharacter isLetterOrDigit 
+                                    or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                            ] whileTrue.
+                            ^ self reportLastMatch
+                        ].
+                        (currentCharacter == $e) ifTrue:[
+                            self recordMatch:#( 30 33 ).
+                            self step.
+                            ((currentCharacter between:$0 and:$9) 
+                                or:[
+                                    (currentCharacter between:$A and:$Z) 
+                                        or:[
+                                            currentCharacter == $_ 
+                                                or:[
+                                                    (currentCharacter between:$a and:$e) 
+                                                        or:[ (currentCharacter between:$g and:$z) ]
+                                                ]
+                                        ]
+                                ]) 
+                                    ifTrue:[ ^ self scan1 ].
+                            (currentCharacter between:$- and:$/) ifTrue:[
+                                [
+                                    self recordMatch:#( 33 ).
+                                    self step.
+                                    (currentCharacter isLetterOrDigit 
+                                        or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                ] whileTrue.
+                                ^ self reportLastMatch
+                            ].
+                            (currentCharacter == $f) ifTrue:[
+                                self recordMatch:#( 30 33 ).
+                                self step.
+                                (currentCharacter isLetterOrDigit or:[ currentCharacter == $_ ]) ifTrue:[
+                                    ^ self scan1
+                                ].
+                                (currentCharacter between:$. and:$/) ifTrue:[
+                                    [
+                                        self recordMatch:#( 33 ).
+                                        self step.
+                                        (currentCharacter isLetterOrDigit 
+                                            or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                    ] whileTrue.
+                                    ^ self reportLastMatch
+                                ].
+                                (currentCharacter == $-) ifTrue:[
+                                    self recordMatch:#( 33 ).
+                                    self step.
+                                    ((currentCharacter between:$- and:$9) 
+                                        or:[
+                                            (currentCharacter between:$A and:$Z) 
+                                                or:[
+                                                    currentCharacter == $_ 
+                                                        or:[
+                                                            (currentCharacter between:$a and:$e) 
+                                                                or:[ (currentCharacter between:$g and:$z) ]
+                                                        ]
+                                                ]
+                                        ]) 
+                                            ifTrue:[
+                                                [
+                                                    self recordMatch:#( 33 ).
+                                                    self step.
+                                                    (currentCharacter isLetterOrDigit 
+                                                        or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                                ] whileTrue.
+                                                ^ self reportLastMatch
+                                            ].
+                                    (currentCharacter == $f) ifTrue:[
+                                        self recordMatch:#( 33 ).
+                                        self step.
+                                        (currentCharacter isXMLDigit 
+                                            or:[
+                                                (currentCharacter between:$- and:$/) 
+                                                    or:[
+                                                        (currentCharacter between:$A and:$Z) 
+                                                            or:[
+                                                                currentCharacter == $_ 
+                                                                    or:[
+                                                                        (currentCharacter between:$a and:$n) 
+                                                                            or:[ (currentCharacter between:$p and:$z) ]
+                                                                    ]
+                                                            ]
+                                                    ]
+                                            ]) 
+                                                ifTrue:[
+                                                    [
+                                                        self recordMatch:#( 33 ).
+                                                        self step.
+                                                        (currentCharacter isLetterOrDigit 
+                                                            or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                                    ] whileTrue.
+                                                    ^ self reportLastMatch
+                                                ].
+                                        (currentCharacter == $o) ifTrue:[
+                                            self recordMatch:#( 33 ).
+                                            self step.
+                                            ((currentCharacter between:$- and:$9) 
+                                                or:[
+                                                    (currentCharacter between:$A and:$Z) 
+                                                        or:[
+                                                            currentCharacter == $_ 
+                                                                or:[
+                                                                    (currentCharacter between:$a and:$q) 
+                                                                        or:[ (currentCharacter between:$s and:$z) ]
+                                                                ]
+                                                        ]
+                                                ]) 
+                                                    ifTrue:[
+                                                        [
+                                                            self recordMatch:#( 33 ).
+                                                            self step.
+                                                            (currentCharacter isLetterOrDigit 
+                                                                or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                                        ] whileTrue.
+                                                        ^ self reportLastMatch
+                                                    ].
+                                            (currentCharacter == $r) ifTrue:[
+                                                self recordMatch:#( 33 ).
+                                                self step.
+                                                (currentCharacter isXMLDigit 
+                                                    or:[
+                                                        (currentCharacter between:$- and:$/) 
+                                                            or:[
+                                                                (currentCharacter between:$A and:$Z) 
+                                                                    or:[
+                                                                        currentCharacter == $_ 
+                                                                            or:[
+                                                                                (currentCharacter between:$a and:$d) 
+                                                                                    or:[ (currentCharacter between:$f and:$z) ]
+                                                                            ]
+                                                                    ]
+                                                            ]
+                                                    ]) 
+                                                        ifTrue:[
+                                                            [
+                                                                self recordMatch:#( 33 ).
+                                                                self step.
+                                                                (currentCharacter isLetterOrDigit 
+                                                                    or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                                            ] whileTrue.
+                                                            ^ self reportLastMatch
+                                                        ].
+                                                (currentCharacter == $e) ifTrue:[
+                                                    self recordMatch:#( 33 ).
+                                                    self step.
+                                                    (currentCharacter isXMLDigit 
+                                                        or:[
+                                                            (currentCharacter between:$- and:$/) 
+                                                                or:[
+                                                                    (currentCharacter between:$A and:$Z) 
+                                                                        or:[
+                                                                            currentCharacter == $_ 
+                                                                                or:[
+                                                                                    (currentCharacter between:$a and:$h) 
+                                                                                        or:[ (currentCharacter between:$j and:$z) ]
+                                                                                ]
+                                                                        ]
+                                                                ]
+                                                        ]) 
+                                                            ifTrue:[
+                                                                [
+                                                                    self recordMatch:#( 33 ).
+                                                                    self step.
+                                                                    (currentCharacter isLetterOrDigit 
+                                                                        or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                                                ] whileTrue.
+                                                                ^ self reportLastMatch
+                                                            ].
+                                                    (currentCharacter == $i) ifTrue:[
+                                                        self recordMatch:#( 33 ).
+                                                        self step.
+                                                        ((currentCharacter between:$- and:$9) 
+                                                            or:[
+                                                                (currentCharacter between:$A and:$Z) 
+                                                                    or:[
+                                                                        currentCharacter == $_ 
+                                                                            or:[
+                                                                                (currentCharacter between:$a and:$f) 
+                                                                                    or:[ (currentCharacter between:$h and:$z) ]
+                                                                            ]
+                                                                    ]
+                                                            ]) 
+                                                                ifTrue:[
+                                                                    [
+                                                                        self recordMatch:#( 33 ).
+                                                                        self step.
+                                                                        (currentCharacter isLetterOrDigit 
+                                                                            or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                                                    ] whileTrue.
+                                                                    ^ self reportLastMatch
+                                                                ].
+                                                        (currentCharacter == $g) ifTrue:[
+                                                            self recordMatch:#( 33 ).
+                                                            self step.
+                                                            ((currentCharacter between:$- and:$9) 
+                                                                or:[
+                                                                    (currentCharacter between:$A and:$Z) 
+                                                                        or:[
+                                                                            currentCharacter == $_ 
+                                                                                or:[
+                                                                                    (currentCharacter between:$a and:$m) 
+                                                                                        or:[ (currentCharacter between:$o and:$z) ]
+                                                                                ]
+                                                                        ]
+                                                                ]) 
+                                                                    ifTrue:[
+                                                                        [
+                                                                            self recordMatch:#( 33 ).
+                                                                            self step.
+                                                                            (currentCharacter isLetterOrDigit 
+                                                                                or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                                                        ] whileTrue.
+                                                                        ^ self reportLastMatch
+                                                                    ].
+                                                            (currentCharacter == $n) ifTrue:[
+                                                                self recordMatch:#( 8 33 ).
+                                                                self step.
+                                                                (currentCharacter isLetterOrDigit 
+                                                                    or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ]) 
+                                                                        ifTrue:[
+                                                                            [
+                                                                                self recordMatch:#( 33 ).
+                                                                                self step.
+                                                                                (currentCharacter isLetterOrDigit 
+                                                                                    or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                                                            ] whileTrue.
+                                                                            ^ self reportLastMatch
+                                                                        ].
+                                                                ^ self reportLastMatch
+                                                            ].
+                                                            ^ self reportLastMatch
+                                                        ].
+                                                        ^ self reportLastMatch
+                                                    ].
+                                                    ^ self reportLastMatch
+                                                ].
+                                                ^ self reportLastMatch
+                                            ].
+                                            ^ self reportLastMatch
+                                        ].
+                                        ^ self reportLastMatch
+                                    ].
+                                    ^ self reportLastMatch
+                                ].
+                                ^ self reportLastMatch
+                            ].
+                            ^ self reportLastMatch
+                        ].
+                        ^ self reportLastMatch
+                    ].
+                    ^ self reportLastMatch
+                ].
+                ^ self reportLastMatch
+            ].
+            ^ self reportLastMatch
+        ].
+        ^ self reportLastMatch
+    ].
+    (currentCharacter == $u) ifTrue:[
+        self recordMatch:#( 30 33 ).
+        self step.
+        ((currentCharacter between:$0 and:$9) 
+            or:[
+                (currentCharacter between:$A and:$Z) 
+                    or:[
+                        currentCharacter == $_ 
+                            or:[
+                                (currentCharacter between:$a and:$m) 
+                                    or:[ (currentCharacter between:$o and:$z) ]
+                            ]
+                    ]
+            ]) 
+                ifTrue:[ ^ self scan1 ].
+        (currentCharacter between:$- and:$/) ifTrue:[
+            [
+                self recordMatch:#( 33 ).
+                self step.
+                (currentCharacter isLetterOrDigit 
+                    or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+            ] whileTrue.
+            ^ self reportLastMatch
+        ].
+        (currentCharacter == $n) ifTrue:[
+            self recordMatch:#( 30 33 ).
+            self step.
+            (currentCharacter isXMLDigit 
+                or:[
+                    (currentCharacter between:$A and:$Z) 
+                        or:[
+                            currentCharacter == $_ 
+                                or:[
+                                    (currentCharacter between:$a and:$h) 
+                                        or:[ (currentCharacter between:$j and:$z) ]
+                                ]
+                        ]
+                ]) 
+                    ifTrue:[ ^ self scan1 ].
+            (currentCharacter between:$- and:$/) ifTrue:[
+                [
+                    self recordMatch:#( 33 ).
+                    self step.
+                    (currentCharacter isLetterOrDigit 
+                        or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                ] whileTrue.
+                ^ self reportLastMatch
+            ].
+            (currentCharacter == $i) ifTrue:[
+                self recordMatch:#( 30 33 ).
+                self step.
+                (currentCharacter isXMLDigit 
+                    or:[
+                        (currentCharacter between:$A and:$Z) 
+                            or:[
+                                currentCharacter == $_ 
+                                    or:[
+                                        (currentCharacter between:$a and:$n) 
+                                            or:[ (currentCharacter between:$p and:$z) ]
+                                    ]
+                            ]
+                    ]) 
+                        ifTrue:[ ^ self scan1 ].
+                (currentCharacter between:$- and:$/) ifTrue:[
+                    [
+                        self recordMatch:#( 33 ).
+                        self step.
+                        (currentCharacter isLetterOrDigit 
+                            or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                    ] whileTrue.
+                    ^ self reportLastMatch
+                ].
+                (currentCharacter == $o) ifTrue:[
+                    self recordMatch:#( 30 33 ).
+                    self step.
+                    ((currentCharacter between:$0 and:$9) 
+                        or:[
+                            (currentCharacter between:$A and:$Z) 
+                                or:[
+                                    currentCharacter == $_ 
+                                        or:[
+                                            (currentCharacter between:$a and:$m) 
+                                                or:[ (currentCharacter between:$o and:$z) ]
+                                        ]
+                                ]
+                        ]) 
+                            ifTrue:[ ^ self scan1 ].
+                    (currentCharacter between:$- and:$/) ifTrue:[
+                        [
+                            self recordMatch:#( 33 ).
+                            self step.
+                            (currentCharacter isLetterOrDigit 
+                                or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                        ] whileTrue.
+                        ^ self reportLastMatch
+                    ].
+                    (currentCharacter == $n) ifTrue:[
+                        self recordMatch:#( 30 33 ).
+                        self step.
+                        (currentCharacter isLetterOrDigit or:[ currentCharacter == $_ ]) ifTrue:[
+                            ^ self scan1
+                        ].
+                        (currentCharacter between:$. and:$/) ifTrue:[
+                            [
+                                self recordMatch:#( 33 ).
+                                self step.
+                                (currentCharacter isLetterOrDigit 
+                                    or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                            ] whileTrue.
+                            ^ self reportLastMatch
+                        ].
+                        (currentCharacter == $-) ifTrue:[
+                            self recordMatch:#( 33 ).
+                            self step.
+                            ((currentCharacter between:$- and:$9) 
+                                or:[
+                                    (currentCharacter between:$A and:$Z) 
+                                        or:[
+                                            currentCharacter == $_ 
+                                                or:[
+                                                    (currentCharacter between:$a and:$e) 
+                                                        or:[ (currentCharacter between:$g and:$z) ]
+                                                ]
+                                        ]
+                                ]) 
+                                    ifTrue:[
+                                        [
+                                            self recordMatch:#( 33 ).
+                                            self step.
+                                            (currentCharacter isLetterOrDigit 
+                                                or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                        ] whileTrue.
+                                        ^ self reportLastMatch
+                                    ].
+                            (currentCharacter == $f) ifTrue:[
+                                self recordMatch:#( 33 ).
+                                self step.
+                                (currentCharacter isXMLDigit 
+                                    or:[
+                                        (currentCharacter between:$- and:$/) 
+                                            or:[
+                                                (currentCharacter between:$A and:$Z) 
+                                                    or:[
+                                                        currentCharacter == $_ 
+                                                            or:[
+                                                                (currentCharacter between:$a and:$n) 
+                                                                    or:[ (currentCharacter between:$p and:$z) ]
+                                                            ]
+                                                    ]
+                                            ]
+                                    ]) 
+                                        ifTrue:[
+                                            [
+                                                self recordMatch:#( 33 ).
+                                                self step.
+                                                (currentCharacter isLetterOrDigit 
+                                                    or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                            ] whileTrue.
+                                            ^ self reportLastMatch
+                                        ].
+                                (currentCharacter == $o) ifTrue:[
+                                    self recordMatch:#( 33 ).
+                                    self step.
+                                    ((currentCharacter between:$- and:$9) 
+                                        or:[
+                                            (currentCharacter between:$A and:$Z) 
+                                                or:[
+                                                    currentCharacter == $_ 
+                                                        or:[
+                                                            (currentCharacter between:$a and:$q) 
+                                                                or:[ (currentCharacter between:$s and:$z) ]
+                                                        ]
+                                                ]
+                                        ]) 
+                                            ifTrue:[
+                                                [
+                                                    self recordMatch:#( 33 ).
+                                                    self step.
+                                                    (currentCharacter isLetterOrDigit 
+                                                        or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                                ] whileTrue.
+                                                ^ self reportLastMatch
+                                            ].
+                                    (currentCharacter == $r) ifTrue:[
+                                        self recordMatch:#( 33 ).
+                                        self step.
+                                        (currentCharacter isXMLDigit 
+                                            or:[
+                                                (currentCharacter between:$- and:$/) 
+                                                    or:[
+                                                        (currentCharacter between:$A and:$Z) 
+                                                            or:[
+                                                                currentCharacter == $_ 
+                                                                    or:[
+                                                                        (currentCharacter between:$a and:$d) 
+                                                                            or:[ (currentCharacter between:$f and:$z) ]
+                                                                    ]
+                                                            ]
+                                                    ]
+                                            ]) 
+                                                ifTrue:[
+                                                    [
+                                                        self recordMatch:#( 33 ).
+                                                        self step.
+                                                        (currentCharacter isLetterOrDigit 
+                                                            or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                                    ] whileTrue.
+                                                    ^ self reportLastMatch
+                                                ].
+                                        (currentCharacter == $e) ifTrue:[
+                                            self recordMatch:#( 33 ).
+                                            self step.
+                                            (currentCharacter isXMLDigit 
+                                                or:[
+                                                    (currentCharacter between:$- and:$/) 
+                                                        or:[
+                                                            (currentCharacter between:$A and:$Z) 
+                                                                or:[
+                                                                    currentCharacter == $_ 
+                                                                        or:[
+                                                                            (currentCharacter between:$a and:$h) 
+                                                                                or:[ (currentCharacter between:$j and:$z) ]
+                                                                        ]
+                                                                ]
+                                                        ]
+                                                ]) 
+                                                    ifTrue:[
+                                                        [
+                                                            self recordMatch:#( 33 ).
+                                                            self step.
+                                                            (currentCharacter isLetterOrDigit 
+                                                                or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                                        ] whileTrue.
+                                                        ^ self reportLastMatch
+                                                    ].
+                                            (currentCharacter == $i) ifTrue:[
+                                                self recordMatch:#( 33 ).
+                                                self step.
+                                                ((currentCharacter between:$- and:$9) 
+                                                    or:[
+                                                        (currentCharacter between:$A and:$Z) 
+                                                            or:[
+                                                                currentCharacter == $_ 
+                                                                    or:[
+                                                                        (currentCharacter between:$a and:$f) 
+                                                                            or:[ (currentCharacter between:$h and:$z) ]
+                                                                    ]
+                                                            ]
+                                                    ]) 
+                                                        ifTrue:[
+                                                            [
+                                                                self recordMatch:#( 33 ).
+                                                                self step.
+                                                                (currentCharacter isLetterOrDigit 
+                                                                    or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                                            ] whileTrue.
+                                                            ^ self reportLastMatch
+                                                        ].
+                                                (currentCharacter == $g) ifTrue:[
+                                                    self recordMatch:#( 33 ).
+                                                    self step.
+                                                    ((currentCharacter between:$- and:$9) 
+                                                        or:[
+                                                            (currentCharacter between:$A and:$Z) 
+                                                                or:[
+                                                                    currentCharacter == $_ 
+                                                                        or:[
+                                                                            (currentCharacter between:$a and:$m) 
+                                                                                or:[ (currentCharacter between:$o and:$z) ]
+                                                                        ]
+                                                                ]
+                                                        ]) 
+                                                            ifTrue:[
+                                                                [
+                                                                    self recordMatch:#( 33 ).
+                                                                    self step.
+                                                                    (currentCharacter isLetterOrDigit 
+                                                                        or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                                                ] whileTrue.
+                                                                ^ self reportLastMatch
+                                                            ].
+                                                    (currentCharacter == $n) ifTrue:[
+                                                        self recordMatch:#( 19 33 ).
+                                                        self step.
+                                                        (currentCharacter isLetterOrDigit 
+                                                            or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ]) 
+                                                                ifTrue:[
+                                                                    [
+                                                                        self recordMatch:#( 33 ).
+                                                                        self step.
+                                                                        (currentCharacter isLetterOrDigit 
+                                                                            or:[ (currentCharacter between:$- and:$/) or:[ currentCharacter == $_ ] ])
+                                                                    ] whileTrue.
+                                                                    ^ self reportLastMatch
+                                                                ].
+                                                        ^ self reportLastMatch
+                                                    ].
+                                                    ^ self reportLastMatch
+                                                ].
+                                                ^ self reportLastMatch
+                                            ].
+                                            ^ self reportLastMatch
+                                        ].
+                                        ^ self reportLastMatch
+                                    ].
+                                    ^ self reportLastMatch
+                                ].
+                                ^ self reportLastMatch
+                            ].
+                            ^ self reportLastMatch
+                        ].
+                        ^ self reportLastMatch
+                    ].
+                    ^ self reportLastMatch
+                ].
+                ^ self reportLastMatch
+            ].
+            ^ self reportLastMatch
+        ].
+        ^ self reportLastMatch
+    ].
     ^ self reportLastMatch
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 ! !
 
 !CDefinitionScanner methodsFor:'generated-tokens'!
 
 emptySymbolTokenId
-	^59
+	^60
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 errorTokenId
-	^60
+	^61
 
-    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
+    "Modified: / 04-07-2008 / 09:23:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
 ! !
 
 !CDefinitionScanner class methodsFor:'documentation'!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Cface__CNoNode.st	Fri Jul 04 08:35:55 2008 +0000
@@ -0,0 +1,24 @@
+"{ Package: 'cvut:fel/cface' }"
+
+"{ NameSpace: Cface }"
+
+CNode subclass:#CNoNode
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Cface-C AST'
+!
+
+!CNoNode methodsFor:'visiting'!
+
+acceptVisitor:aVisitor 
+    "Double dispatch back to the visitor, passing my type encoded in
+     the selector (visitor pattern)"
+
+    "stub code automatically generated - please change if required"
+
+    ^ aVisitor visitCNoNode:self
+
+    "Created: / 04-07-2008 / 09:12:44 / Jan Vrany <vranyj1@fel.cvut.cz>"
+! !
+
--- a/Cface__CNodeVisitor.st	Thu Jul 03 22:00:07 2008 +0000
+++ b/Cface__CNodeVisitor.st	Fri Jul 04 08:35:55 2008 +0000
@@ -144,6 +144,13 @@
     "Created: / 12-02-2008 / 22:14:55 / janfrog"
 !
 
+visitCNoNode: node
+
+    "nothing to do"
+
+    "Created: / 04-07-2008 / 09:13:03 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
 visitCPointerNode:anObject 
 
     self visit: anObject type
--- a/Cface__CPointerNode.st	Thu Jul 03 22:00:07 2008 +0000
+++ b/Cface__CPointerNode.st	Fri Jul 04 08:35:55 2008 +0000
@@ -51,11 +51,15 @@
 ffiTypeSymbol
     "Superclass Cface::CTypeNode says that I am responsible to implement this method"
     
-    ^(type isKindOf: CCharNode) 
-            ifTrue:[#charPointer]
-            ifFalse:[#pointer]
+    (type isCCharNode) 
+        ifTrue:[^#charPointer].
+    ((type isCStructNode) and:[type isAnonymous not]) 
+        ifTrue:[^type smalltalkClassNameWithNamespace].
+
+    ^#pointer
 
     "Created: / 03-07-2008 / 22:54:39 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified: / 04-07-2008 / 09:27:36 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 type
--- a/Cface__CTypeNode.st	Thu Jul 03 22:00:07 2008 +0000
+++ b/Cface__CTypeNode.st	Fri Jul 04 08:35:55 2008 +0000
@@ -28,6 +28,12 @@
 
 !CTypeNode methodsFor:'testing'!
 
+isCCharNode
+    ^ false
+
+    "Created: / 04-07-2008 / 09:26:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
 isCTypeNode
     ^ true
 
--- a/Cface__CairoMapping.st	Thu Jul 03 22:00:07 2008 +0000
+++ b/Cface__CairoMapping.st	Fri Jul 04 08:35:55 2008 +0000
@@ -33,6 +33,17 @@
     "Created: / 17-02-2008 / 20:52:26 / janfrog"
 !
 
+smalltalkClassForFunction:cFunction
+
+    ((cFunction cName endsWith:'create') 
+        and:[cFunction return isCPointerNode
+            and:[cFunction return type isCStructNode]]) ifTrue:
+                [^cFunction return type smalltalkClass].
+    ^super smalltalkClassForFunction:cFunction
+
+    "Created: / 04-07-2008 / 09:43:37 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
 smalltalkClassForType:cType 
     |cairoName|
 
--- a/Cface__Generator.st	Thu Jul 03 22:00:07 2008 +0000
+++ b/Cface__Generator.st	Fri Jul 04 08:35:55 2008 +0000
@@ -3,7 +3,7 @@
 "{ NameSpace: Cface }"
 
 CNodeVisitor subclass:#Generator
-	instanceVariableNames:'changeset'
+	instanceVariableNames:'changeset module'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Cface-Generators'
@@ -215,6 +215,20 @@
     "Created: #generateStructOrUnionCreateNULLPointerMethod: / 06-01-2008 / 16:09:47 / haja"
 ! !
 
+!Generator methodsFor:'accessing'!
+
+module
+    ^ module
+
+    "Created: / 04-07-2008 / 07:41:42 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+module:aString
+    module := aString.
+
+    "Created: / 04-07-2008 / 07:41:42 / Jan Vrany <vranyj1@fel.cvut.cz>"
+! !
+
 !Generator methodsFor:'initialization'!
 
 initialize
--- a/Cface__GeneratorCommand.st	Thu Jul 03 22:00:07 2008 +0000
+++ b/Cface__GeneratorCommand.st	Fri Jul 04 08:35:55 2008 +0000
@@ -3,7 +3,7 @@
 "{ NameSpace: Cface }"
 
 Object subclass:#GeneratorCommand
-	instanceVariableNames:'platform mappings definitions'
+	instanceVariableNames:'platform mappings definitions module'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Cface-Generators'
@@ -19,19 +19,30 @@
     cairoDir := '/home/janfrog/Projects/Cface/libcairo/'.
     cairoDefFile := cairoDir ,  'cairo.h.def'.  
 
+    (
+    
     Cface::Platform theInstance generatorCommand
         definitions: cairoDefFile asFilename;
         mappings: Cface::CairoMapping new;
-        process.
-
+        module:'libcairo.so';
+        process
+    
+    ) apply.
+    
     cairoPdfDefFile := cairoDir ,  'cairo-pdf.h.def'.  
-
+    
+    (
+    
     Cface::Platform theInstance generatorCommand
         definitions: cairoPdfDefFile asFilename;
         mappings: Cface::CairoMapping new;
+        module:'libcairo.so';
         process
+    
+    ) apply.
 
     "Created: / 03-07-2008 / 23:55:14 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified: / 04-07-2008 / 10:31:20 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 generateSubversion
@@ -75,6 +86,18 @@
     "Created: / 18-02-2008 / 15:35:04 / janfrog"
 !
 
+module
+    ^ module
+
+    "Created: / 04-07-2008 / 07:40:38 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+module:something
+    module := something.
+
+    "Created: / 04-07-2008 / 07:40:38 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
 platform
 
     platform ifNil:[platform := Cface::Platform theInstance].
@@ -110,10 +133,12 @@
 
     self platform typeResolver process: definitions.
     self platform typeMapper process: definitions using: self mappings.
-    ^self platform generator process: definitions.
+    ^self platform generator 
+        module: module;
+        process: definitions.
 
     "Created: / 18-02-2008 / 15:25:54 / janfrog"
-    "Modified: / 03-07-2008 / 21:00:44 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified: / 04-07-2008 / 07:40:53 / Jan Vrany <vranyj1@fel.cvut.cz>"
 ! !
 
 !GeneratorCommand class methodsFor:'documentation'!
--- a/Cface__SmalltalkXGenerator.st	Thu Jul 03 22:00:07 2008 +0000
+++ b/Cface__SmalltalkXGenerator.st	Fri Jul 04 08:35:55 2008 +0000
@@ -66,6 +66,8 @@
 
 visitCEnumNode: cEnumNode
 
+    cEnumNode foreign ifTrue:[^self].
+
     (changeset add: ClassDefinitionChange new)
         superClassName: 
             SharedPool fullName;
@@ -118,25 +120,35 @@
                     s tab; nextPut:$^; nextPutAll: cEnumValueNode cName])]
 
     "Created: / 03-07-2008 / 20:10:34 / Jan Vrany <vranyj1@fel.cvut.cz>"
-    "Modified: / 03-07-2008 / 22:07:20 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified: / 04-07-2008 / 09:24:44 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 visitCFunctionNode:functionNode
 
     (changeset add: MethodDefinitionChange new)
-        className: functionNode smalltalkClassNameWithNamespace , ' class';
-        category: 'external functions';
-        selector: functionNode smalltalkSelector;
+        className: (functionNode smalltalkClassNameWithNamespace , ' class') asSymbol;
+        category: 'primitives';
+        selector: ('prim' , functionNode smalltalkSelector capitalized);
         source:
             (String streamContents:
                 [:s|
-                s 
-                    nextPutAll: functionNode smalltalkSelector; cr; cr; tab;
+                | primSelector |
+                primSelector := ('prim' , functionNode smalltalkSelector capitalized) asSymbol.
+                functionNode arguments size > 0 
+                    ifTrue:
+                        [primSelector keywords with: functionNode arguments do:
+                            [:keyword :argument|
+                            s nextPutAll: keyword; space; nextPutAll: argument cName; space]]
+                    ifFalse:
+                        [s nextPutAll: primSelector].
+                s    cr; cr; tab;
                     nextPutAll: '<cdecl:';
                     space;
                     nextPutAll: functionNode return ffiTypeSymbol;
                     space;
+                    nextPut:$";
                     nextPutAll: functionNode cName;
+                    nextPut:$";
                     space;
                     nextPut:$(;
                     space.
@@ -145,15 +157,29 @@
                     s nextPutAll: argument type ffiTypeSymbol; space].
                 s 
                     nextPut:$);
-                    space;
-                    nextPut:$>])
+                    space.
+                module ifNotNil:[
+                    s
+                        nextPutAll:'module:';
+                        space;
+                        nextPut:$";
+                        nextPutAll: module;
+                        nextPut:$";
+                        space].
+                s
+                    nextPut:$>.
+                s cr; tab.
+                s nextPutAll:'self primitiveFailed'.
+                ]).
 
     "Created: / 03-07-2008 / 21:26:42 / Jan Vrany <vranyj1@fel.cvut.cz>"
-    "Modified: / 03-07-2008 / 23:42:47 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified: / 04-07-2008 / 08:36:25 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 visitCStructNode: cStructNode
 
+    cStructNode foreign ifTrue:[^self].
+
     cStructNode isAnonymous ifTrue:[^self].
 
     (changeset add: ClassDefinitionChange new)
@@ -167,7 +193,7 @@
             cStructNode smalltalkPackage.
 
     "Created: / 03-07-2008 / 21:31:31 / Jan Vrany <vranyj1@fel.cvut.cz>"
-    "Modified: / 03-07-2008 / 23:42:54 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified: / 04-07-2008 / 09:24:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 visitCTypedefNode: typedefNode
--- a/Cface__TypeMapping.st	Thu Jul 03 22:00:07 2008 +0000
+++ b/Cface__TypeMapping.st	Fri Jul 04 08:35:55 2008 +0000
@@ -110,9 +110,9 @@
     ^String streamContents:
         [:s|
         s nextPutAll:(self smalltalkize: cFunction cName).
-        cFunction arguments size > 1 ifTrue:
+        cFunction arguments size > 0 ifTrue:
             [s nextPut:$:].
-        cFunction arguments size > 2 ifTrue:
+        cFunction arguments size > 1 ifTrue:
             [(cFunction arguments copyFrom:2) do:
                 [:argument|
                 s 
@@ -120,7 +120,7 @@
                     nextPut:$:]]]
 
     "Created: / 17-02-2008 / 22:15:44 / janfrog"
-    "Modified: / 03-07-2008 / 22:30:01 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified: / 04-07-2008 / 08:28:35 / Jan Vrany <vranyj1@fel.cvut.cz>"
 ! !
 
 !TypeMapping methodsFor:'private - utilities'!