Author: aolk
Date: 2005-06-14 11:38:49 -0400 (Tue, 14 Jun 2005)
New Revision: 45975

Added:
   trunk/winforms-tools/FDOxml2cs/
   trunk/winforms-tools/FDOxml2cs/AliasReader.cs
   trunk/winforms-tools/FDOxml2cs/ChangeLog
   trunk/winforms-tools/FDOxml2cs/CommentReader.cs
   trunk/winforms-tools/FDOxml2cs/FDOxml2cs.cs
   trunk/winforms-tools/FDOxml2cs/FDOxml2cs.csproj
   trunk/winforms-tools/FDOxml2cs/FDOxml2cs.sln
   trunk/winforms-tools/FDOxml2cs/GlobReader.cs
   trunk/winforms-tools/FDOxml2cs/MagicReader.cs
   trunk/winforms-tools/FDOxml2cs/MainReader.cs
   trunk/winforms-tools/FDOxml2cs/Makefile
   trunk/winforms-tools/FDOxml2cs/Match.cs
   trunk/winforms-tools/FDOxml2cs/MatchReader.cs
   trunk/winforms-tools/FDOxml2cs/MatchTypes.cs
   trunk/winforms-tools/FDOxml2cs/MimeType.cs
   trunk/winforms-tools/FDOxml2cs/MimeTypeReader.cs
   trunk/winforms-tools/FDOxml2cs/MimeUtils.cs
   trunk/winforms-tools/FDOxml2cs/SourceWriter.cs
   trunk/winforms-tools/FDOxml2cs/SubClassReader.cs
   trunk/winforms-tools/FDOxml2cs/SubMatchReader.cs
Log:
2005-06-14  Alexander Olk  <[EMAIL PROTECTED]>

        * AliasReader.cs, CommentReader.cs, FDOxml2cs.cs, GlobReader.cs,
          MagicReader.cs, MainReader.cs, Match.cs, MatchReader.cs, 
MatchTypes.cs,
          MimeType.cs, MimeTypeReader.cs, MimeUtils.cs, SourceWriter.cs,
          SubClassReader.cs, SubMatchReader.cs:
          Initial import of the Freedesktop.org mime xml to C# source converter


Added: trunk/winforms-tools/FDOxml2cs/AliasReader.cs
===================================================================
--- trunk/winforms-tools/FDOxml2cs/AliasReader.cs       2005-06-14 14:26:25 UTC 
(rev 45974)
+++ trunk/winforms-tools/FDOxml2cs/AliasReader.cs       2005-06-14 15:38:49 UTC 
(rev 45975)
@@ -0,0 +1,30 @@
+// Authors:
+//     Alexander Olk, <[EMAIL PROTECTED]>
+
+using System;
+using System.Xml;
+
+namespace FDOxml2cs
+{
+       public class AliasReader
+       {
+               XmlTextReader xtr;
+               
+               MimeType mt;
+               
+               public AliasReader( XmlTextReader xtr, MimeType mt )
+               {
+                       this.xtr = xtr;
+                       
+                       this.mt = mt;
+               }
+               
+               public void Start( )
+               {
+                       if ( xtr.HasAttributes )
+                       {
+                               mt.AliasTypes.Add( xtr.GetAttribute( "type" ) );
+                       }
+               }
+       }
+}

Added: trunk/winforms-tools/FDOxml2cs/ChangeLog
===================================================================
--- trunk/winforms-tools/FDOxml2cs/ChangeLog    2005-06-14 14:26:25 UTC (rev 
45974)
+++ trunk/winforms-tools/FDOxml2cs/ChangeLog    2005-06-14 15:38:49 UTC (rev 
45975)
@@ -0,0 +1,7 @@
+2005-06-14  Alexander Olk  <[EMAIL PROTECTED]>
+
+       * AliasReader.cs, CommentReader.cs, FDOxml2cs.cs, GlobReader.cs,
+         MagicReader.cs, MainReader.cs, Match.cs, MatchReader.cs, 
MatchTypes.cs,
+         MimeType.cs, MimeTypeReader.cs, MimeUtils.cs, SourceWriter.cs,
+         SubClassReader.cs, SubMatchReader.cs:
+         Initial import of the Freedesktop.org mime xml to C# source converter

Added: trunk/winforms-tools/FDOxml2cs/CommentReader.cs
===================================================================
--- trunk/winforms-tools/FDOxml2cs/CommentReader.cs     2005-06-14 14:26:25 UTC 
(rev 45974)
+++ trunk/winforms-tools/FDOxml2cs/CommentReader.cs     2005-06-14 15:38:49 UTC 
(rev 45975)
@@ -0,0 +1,58 @@
+// Authors:
+//     Alexander Olk, <[EMAIL PROTECTED]>
+
+using System;
+using System.Xml;
+
+namespace FDOxml2cs
+{
+       public class CommentReader
+       {
+               XmlTextReader xtr;
+               
+               MimeType mt;
+               
+               public CommentReader( XmlTextReader xtr, MimeType mt )
+               {
+                       this.xtr = xtr;
+                       this.mt = mt;
+               }
+               
+               public void Start( )
+               {
+                       bool hasLanguageAttribute = false;
+                       
+                       string language = "";
+                       
+                       if ( xtr.HasAttributes )
+                       {
+                               hasLanguageAttribute = true;
+                               
+                               language = xtr.GetAttribute( "xml:lang" );
+                       }
+                       
+                       xtr.Read( );
+                       
+                       if ( !hasLanguageAttribute )
+                       {
+                               string comment = xtr.Value;
+                               
+                               if ( comment.IndexOf( "\"" ) != -1 )
+                                       comment = comment.Replace( "\"", "\\\"" 
);
+                               
+                               mt.Comment = comment;
+                       }
+                       // currently disabled, need to look for some weird 
chars in the xml comments
+                       // System.Convert ?
+//                     else
+//                     {
+//                             string comment = xtr.Value;
+//
+//                             if ( comment.IndexOf ( "\"" ) != -1 )
+//                                     comment = comment.Replace( "\"", "\\\"" 
);
+//
+//                             mt.CommentsLanguage.Add( language, comment );
+//                     }
+               }
+       }
+}

Added: trunk/winforms-tools/FDOxml2cs/FDOxml2cs.cs
===================================================================
--- trunk/winforms-tools/FDOxml2cs/FDOxml2cs.cs 2005-06-14 14:26:25 UTC (rev 
45974)
+++ trunk/winforms-tools/FDOxml2cs/FDOxml2cs.cs 2005-06-14 15:38:49 UTC (rev 
45975)
@@ -0,0 +1,96 @@
+// Authors:
+//     Alexander Olk, <[EMAIL PROTECTED]>
+
+// TODO: add command line parameter for output path
+
+using System;
+using System.IO;
+
+namespace FDOxml2cs
+{
+       class FDOxml2csMain
+       {
+               public static string nameSpace = "System.Windows.Forms";
+               
+               static void PrintUsage( )
+               {
+                       string usage =
+                       "The freedesktop.org.xml file can be found 
at:\nhttp://cvs.freedesktop.org/mime/shared-mime-info/\n\n"; +
+                       "Usage: mono FDOxmls2cs.exe <--namespace NameSpace 
(optional)> <Freedesktop.org mime xml file(s) directory>\n\n" +
+                       "If you do not specify a directory FDOxmls2cs looks in 
the current working\ndirectory for the xml file(s).\n\n";
+                       
+                       Console.WriteLine( usage );
+                       
+                       System.Environment.Exit( 0 );
+               }
+               
+               static void CheckArgs( string[] args, ref string directory )
+               {
+                       if ( args[ 0 ] == "--help" )
+                       {
+                               PrintUsage( );
+                       }
+                       
+                       if ( args[ 0 ] == "--namespace" )
+                       {
+                               if ( args.Length == 1 )
+                               {
+                                       Console.WriteLine( "\nError: Please 
specify a namespace\n" );
+                                       
+                                       System.Environment.Exit( 0 );
+                               }
+                               
+                               nameSpace = args[ 1 ];
+                               
+                               if ( args.Length == 3 )
+                               {
+                                       directory = args[ 2 ];
+                               }
+                               
+                               return;
+                       }
+                       else
+                       {
+                               directory = args[ 0 ];
+                               
+                               if ( !Directory.Exists( directory ) )
+                               {
+                                       Console.WriteLine( "Directory \"" + 
directory + "\" not found..." );
+                                       
+                                       System.Environment.Exit( 0 );
+                               }
+                       }
+               }
+               
+               [STAThread]
+               static void Main( string[] args )
+               {
+                       Console.WriteLine( "FDOxml2cs - Convert Freedesktop.org 
mime xml files to C# source file." );
+                       Console.WriteLine( "\"mono FDOxml2cs.exe --help\" for 
help...\n" );
+                       
+                       string directory = Directory.GetCurrentDirectory( );
+                       
+                       if ( args.Length > 0 )
+                       {
+                               CheckArgs( args, ref directory );
+                       }
+                       
+                       MainReader mr = new MainReader( directory );
+                       
+                       mr.Start( );
+                       
+                       if ( MainReader.MainReaderSuccess )
+                       {
+                               SourceWriter sw = new SourceWriter( );
+                               
+                               sw.Start( );
+                               
+                               sw.Flush( );
+                               
+                               Console.WriteLine( "Success..." );
+                       }
+                       else
+                               Console.WriteLine( "No correct xml file 
found..." );
+               }
+       }
+}

Added: trunk/winforms-tools/FDOxml2cs/FDOxml2cs.csproj
===================================================================
--- trunk/winforms-tools/FDOxml2cs/FDOxml2cs.csproj     2005-06-14 14:26:25 UTC 
(rev 45974)
+++ trunk/winforms-tools/FDOxml2cs/FDOxml2cs.csproj     2005-06-14 15:38:49 UTC 
(rev 45975)
@@ -0,0 +1,51 @@
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"; 
DefaultTargets="Build">
+    <PropertyGroup>
+        <Configuration Condition=" '$(Configuration)' == '' 
">Debug</Configuration>
+        <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+        <ProductVersion>8.0.30703</ProductVersion>
+        <SchemaVersion>2.0</SchemaVersion>
+        <ProjectGuid>{120B4150-B502-4755-8886-5BC811F45698}</ProjectGuid>
+        <OutputType>Exe</OutputType>
+        <RootNamespace>FDOxml2cs</RootNamespace>
+        <AssemblyName>FDOxml2cs</AssemblyName>
+        <WarningLevel>4</WarningLevel>
+        <StartupObject/>
+    </PropertyGroup>
+    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 
'Debug|AnyCPU' ">
+        <DebugSymbols>true</DebugSymbols>
+        <DebugType>full</DebugType>
+        <Optimize>false</Optimize>
+        <OutputPath>bin\Debug\</OutputPath>
+        <DefineConstants>DEBUG;TRACE</DefineConstants>
+        <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
+    </PropertyGroup>
+    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 
'Release|AnyCPU' ">
+        <DebugSymbols>false</DebugSymbols>
+        <Optimize>true</Optimize>
+        <OutputPath>bin\Release\</OutputPath>
+        <DefineConstants>TRACE</DefineConstants>
+        <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
+    </PropertyGroup>
+    <ItemGroup>
+        <Reference Include="System"/>
+        <Reference Include="System.Xml"/>
+    </ItemGroup>
+    <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets"/>
+    <ItemGroup>
+        <Compile Include="AliasReader.cs"/>
+        <Compile Include="CommentReader.cs"/>
+        <Compile Include="FDOxml2cs.cs"/>
+        <Compile Include="GlobReader.cs"/>
+        <Compile Include="MagicReader.cs"/>
+        <Compile Include="MainReader.cs"/>
+        <Compile Include="Match.cs"/>
+        <Compile Include="MatchReader.cs"/>
+        <Compile Include="MatchTypes.cs"/>
+        <Compile Include="MimeType.cs"/>
+        <Compile Include="MimeTypeReader.cs"/>
+        <Compile Include="MimeUtils.cs"/>
+        <Compile Include="SourceWriter.cs"/>
+        <Compile Include="SubClassReader.cs"/>
+        <Compile Include="SubMatchReader.cs"/>
+    </ItemGroup>
+</Project>

Added: trunk/winforms-tools/FDOxml2cs/FDOxml2cs.sln
===================================================================
--- trunk/winforms-tools/FDOxml2cs/FDOxml2cs.sln        2005-06-14 14:26:25 UTC 
(rev 45974)
+++ trunk/winforms-tools/FDOxml2cs/FDOxml2cs.sln        2005-06-14 15:38:49 UTC 
(rev 45975)
@@ -0,0 +1,18 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FDOxml2cs", 
"FDOxml2cs.csproj", "{120B4150-B502-4755-8886-5BC811F45698}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Any CPU = Debug|Any CPU
+               Release|Any CPU = Release|Any CPU
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {120B4150-B502-4755-8886-5BC811F45698}.Debug|Any CPU.ActiveCfg 
= Debug|Any CPU
+               {120B4150-B502-4755-8886-5BC811F45698}.Debug|Any CPU.Build.0 = 
Debug|Any CPU
+               {120B4150-B502-4755-8886-5BC811F45698}.Release|Any 
CPU.ActiveCfg = Release|Any CPU
+               {120B4150-B502-4755-8886-5BC811F45698}.Release|Any CPU.Build.0 
= Release|Any CPU
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal

Added: trunk/winforms-tools/FDOxml2cs/GlobReader.cs
===================================================================
--- trunk/winforms-tools/FDOxml2cs/GlobReader.cs        2005-06-14 14:26:25 UTC 
(rev 45974)
+++ trunk/winforms-tools/FDOxml2cs/GlobReader.cs        2005-06-14 15:38:49 UTC 
(rev 45975)
@@ -0,0 +1,34 @@
+// Authors:
+//     Alexander Olk, <[EMAIL PROTECTED]>
+
+using System;
+using System.Xml;
+
+namespace FDOxml2cs
+{
+       public class GlobReader
+       {
+               XmlTextReader xtr;
+               
+               MimeType mt;
+               
+               public GlobReader( XmlTextReader xtr, MimeType mt )
+               {
+                       this.xtr = xtr;
+                       this.mt = mt;
+               }
+               
+               public void Start( )
+               {
+                       if ( xtr.HasAttributes )
+                       {
+//                             string pattern = xtr.GetAttribute( "pattern" );
+//
+//                             if ( pattern.StartsWith( "*" ) )
+//                                     pattern = pattern.Replace( "*", "" );
+                               
+                               mt.GlobPatterns.Add( xtr.GetAttribute( 
"pattern" ) );
+                       }
+               }
+       }
+}

Added: trunk/winforms-tools/FDOxml2cs/MagicReader.cs
===================================================================
--- trunk/winforms-tools/FDOxml2cs/MagicReader.cs       2005-06-14 14:26:25 UTC 
(rev 45974)
+++ trunk/winforms-tools/FDOxml2cs/MagicReader.cs       2005-06-14 15:38:49 UTC 
(rev 45975)
@@ -0,0 +1,54 @@
+// Authors:
+//     Alexander Olk, <[EMAIL PROTECTED]>
+
+using System;
+using System.Xml;
+
+namespace FDOxml2cs
+{
+       public class MagicReader
+       {
+               XmlTextReader xtr;
+               
+               MimeType mt;
+               
+               public MagicReader( XmlTextReader xtr, MimeType mt )
+               {
+                       this.xtr = xtr;
+                       this.mt = mt;
+               }
+               
+               public void Start( )
+               {
+                       if ( xtr.HasAttributes )
+                       {
+                               mt.MagicPriority = System.Convert.ToInt32( 
xtr.GetAttribute( "priority" ) );
+                       }
+                       
+                       while ( xtr.Read( ) )
+                       {
+                               switch ( xtr.NodeType )
+                               {
+                                       case XmlNodeType.Element:
+                                               if ( xtr.Name == "match" )
+                                               {
+                                                       Match m = new Match( );
+                                                       
+                                                       MatchReader mr = new 
MatchReader( xtr, m );
+                                                       
+                                                       mr.Start( );
+                                                       
+                                                       mt.Matches.Add( m );
+                                               }
+                                               break;
+                                               
+                                       case XmlNodeType.EndElement:
+                                               if ( xtr.Name == "magic" )
+                                                       return;
+                                               break;
+                                               
+                               }
+                       }
+               }
+       }
+}

Added: trunk/winforms-tools/FDOxml2cs/MainReader.cs
===================================================================
--- trunk/winforms-tools/FDOxml2cs/MainReader.cs        2005-06-14 14:26:25 UTC 
(rev 45974)
+++ trunk/winforms-tools/FDOxml2cs/MainReader.cs        2005-06-14 15:38:49 UTC 
(rev 45975)
@@ -0,0 +1,111 @@
+// Authors:
+//     Alexander Olk, <[EMAIL PROTECTED]>
+
+using System;
+using System.IO;
+using System.Xml;
+
+namespace FDOxml2cs
+{
+       public class MainReader
+       {
+               public static bool MainReaderSuccess = false;
+               
+               string path;
+               XmlTextReader xtr;
+               
+               public MainReader( string path )
+               {
+                       this.path = path;
+               }
+               
+               public void Start( )
+               {
+                       DirectoryInfo directoryInfo = new DirectoryInfo( path );
+                       
+                       FileInfo[] files = directoryInfo.GetFiles( );
+                       
+                       foreach ( FileInfo fi in files )
+                       {
+                               if ( fi.Extension.ToUpper( ) == ".XML" )
+                               {
+                                       if ( ReadXMLFile( fi ) )
+                                       {
+                                               MainReaderSuccess = true;
+                                               
+                                               Console.WriteLine( fi.Name + " 
success..." );
+                                       }
+                               }
+                       }
+               }
+               
+               private bool ReadXMLFile( FileInfo fi )
+               {
+                       xtr = new XmlTextReader( fi.FullName );
+                       
+                       if ( !CheckIfMimeFileIsCorrect( ) )
+                       {
+                               xtr.Close( );
+                               Console.WriteLine( fi.Name + " doesn't seem to 
be a correct freedesktop shared mime info file..." );
+                               return false;
+                       }
+                       
+                       Console.WriteLine( fi.Name + " seems to be a correct 
freedesktop shared mime info file..." );
+                       Console.WriteLine( "Start parsing..." );
+                       
+                       while ( xtr.Read( ) )
+                       {
+                               switch ( xtr.NodeType )
+                               {
+                                       case XmlNodeType.Element:
+                                               if ( xtr.Name == "mime-type" )
+                                               {
+                                                       MimeType mt = new 
MimeType( );
+                                                       
+                                                       MimeTypeReader mtr = 
new MimeTypeReader( xtr, mt );
+                                                       
+                                                       mtr.Start( );
+                                                       
+                                                       if ( 
!MimeUtils.CheckIfMimetypeExists( mt ) )
+                                                               
MimeUtils.mimeTypes.Add( mt );
+                                               }
+                                               break;
+                                               
+                                       case XmlNodeType.EndElement:
+                                               if ( xtr.Name == "mime-info" )
+                                                       break;
+                                               break;
+                               }
+                       }
+                       
+                       xtr.Close( );
+                       
+                       return true;
+               }
+               
+               private bool CheckIfMimeFileIsCorrect( )
+               {
+                       while ( xtr.Read( ) )
+                       {
+                               switch ( xtr.NodeType )
+                               {
+                                       case XmlNodeType.Element:
+                                               if ( xtr.Name == "mime-info" )
+                                               {
+                                                       if ( 
xtr.MoveToFirstAttribute( ) )
+                                                       {
+                                                               if ( xtr.Name 
== "xmlns" )
+                                                               {
+                                                                       if ( 
xtr.Value == "http://www.freedesktop.org/standards/shared-mime-info"; )
+                                                                               
return true;
+                                                               }
+                                                       }
+                                               }
+                                               break;
+                               }
+                       }
+                       
+                       return false;
+               }
+       }
+}

Added: trunk/winforms-tools/FDOxml2cs/Makefile
===================================================================
--- trunk/winforms-tools/FDOxml2cs/Makefile     2005-06-14 14:26:25 UTC (rev 
45974)
+++ trunk/winforms-tools/FDOxml2cs/Makefile     2005-06-14 15:38:49 UTC (rev 
45975)
@@ -0,0 +1,10 @@
+all: mono
+
+mono:
+       mcs -out:FDOxml2cs.exe AliasReader.cs CommentReader.cs FDOxml2cs.cs 
GlobReader.cs MagicReader.cs MainReader.cs Match.cs MatchReader.cs 
MatchTypes.cs MimeType.cs MimeTypeReader.cs MimeUtils.cs SourceWriter.cs 
SubClassReader.cs SubMatchReader.cs /r:System.Xml.dll
+
+dotnet:
+       csc -out:FDOxml2cs.exe AliasReader.cs CommentReader.cs FDOxml2cs.cs 
GlobReader.cs MagicReader.cs MainReader.cs Match.cs MatchReader.cs 
MatchTypes.cs MimeType.cs MimeTypeReader.cs MimeUtils.cs SourceWriter.cs 
SubClassReader.cs SubMatchReader.cs /r:System.Xml.dll
+
+clean:
+       rm FDOxml2cs.exe -r -f

Added: trunk/winforms-tools/FDOxml2cs/Match.cs
===================================================================
--- trunk/winforms-tools/FDOxml2cs/Match.cs     2005-06-14 14:26:25 UTC (rev 
45974)
+++ trunk/winforms-tools/FDOxml2cs/Match.cs     2005-06-14 15:38:49 UTC (rev 
45975)
@@ -0,0 +1,89 @@
+// Authors:
+//     Alexander Olk, <[EMAIL PROTECTED]>
+
+using System;
+using System.Collections;
+
+namespace FDOxml2cs
+{
+       public class Match
+       {
+               string matchvalue;
+               
+               MatchTypes matchType;
+               
+               int offset;
+               
+               int offsetEnd = -1;
+               
+               string mask = null;
+               
+               ArrayList subMatches = new ArrayList();
+               
+               public string MatchValue
+               {
+                       set {
+                               matchvalue = value;
+                       }
+                       
+                       get {
+                               return matchvalue;
+                       }
+               }
+               
+               public MatchTypes MatchType
+               {
+                       set {
+                               matchType = value;
+                       }
+                       
+                       get {
+                               return matchType;
+                       }
+               }
+               
+               public int Offset
+               {
+                       set {
+                               offset = value;
+                       }
+                       
+                       get {
+                               return offset;
+                       }
+               }
+               
+               public string Mask
+               {
+                       set {
+                               mask = value;
+                       }
+                       
+                       get {
+                               return mask;
+                       }
+               }
+               
+               public ArrayList Matches
+               {
+                       set {
+                               subMatches = value;
+                       }
+                       
+                       get {
+                               return subMatches;
+                       }
+               }
+               
+               public int OffsetEnd
+               {
+                       set {
+                               offsetEnd = value;
+                       }
+                       
+                       get {
+                               return offsetEnd;
+                       }
+               }
+       }
+}

Added: trunk/winforms-tools/FDOxml2cs/MatchReader.cs
===================================================================
--- trunk/winforms-tools/FDOxml2cs/MatchReader.cs       2005-06-14 14:26:25 UTC 
(rev 45974)
+++ trunk/winforms-tools/FDOxml2cs/MatchReader.cs       2005-06-14 15:38:49 UTC 
(rev 45975)
@@ -0,0 +1,105 @@
+// Authors:
+//     Alexander Olk, <[EMAIL PROTECTED]>
+
+using System;
+using System.Xml;
+
+namespace FDOxml2cs
+{
+       public class MatchReader
+       {
+               XmlTextReader xtr;
+               
+               Match m;
+               
+               public MatchReader( XmlTextReader xtr, Match m )
+               {
+                       this.xtr = xtr;
+                       
+                       this.m = m;
+               }
+               
+               public void Start( )
+               {
+                       if ( xtr.HasAttributes )
+                       {
+                               m.MatchValue = xtr.GetAttribute( "value" );
+                               
+                               string match_type = xtr.GetAttribute( "type" );
+                               
+                               if ( match_type == "string" )
+                                       m.MatchType = MatchTypes.TypeString;
+                               else
+                               if ( match_type == "host16" )
+                                       m.MatchType = MatchTypes.TypeHost16;
+                               else
+                               if ( match_type == "host32" )
+                                       m.MatchType = MatchTypes.TypeHost32;
+                               else
+                               if ( match_type == "big16" )
+                                       m.MatchType = MatchTypes.TypeBig16;
+                               else
+                               if ( match_type == "big32" )
+                                       m.MatchType = MatchTypes.TypeBig32;
+                               else
+                               if ( match_type == "little16" )
+                                       m.MatchType = MatchTypes.TypeLittle16;
+                               else
+                               if ( match_type == "little32" )
+                                       m.MatchType = MatchTypes.TypeLittle32;
+                               else
+                               if ( match_type == "byte" )
+                                       m.MatchType = MatchTypes.TypeByte;
+                               
+                               string offset = xtr.GetAttribute( "offset" );
+                               
+                               if ( offset.IndexOf( ":" ) != -1 )
+                               {
+                                       string[] split = offset.Split( new 
char[] { ':' } );
+                                       
+                                       if ( split.Length == 2 )
+                                       {
+                                               m.Offset = 
System.Convert.ToInt32( split[ 0 ] );
+                                               m.OffsetEnd = 
System.Convert.ToInt32( split[ 1 ] );
+                                       }
+                                       
+                               }
+                               else
+                                       m.Offset = System.Convert.ToInt32( 
offset );
+                               
+                               string mask = xtr.GetAttribute( "mask" );
+                               
+                               if ( mask != "" )
+                                       m.Mask = mask;
+                       }
+                       
+                       if ( xtr.IsEmptyElement )
+                               return;
+                       
+                       while ( xtr.Read( ) )
+                       {
+                               switch ( xtr.NodeType )
+                               {
+                                       case XmlNodeType.Element:
+                                               if ( xtr.Name == "match" )
+                                               {
+                                                       Match nm = new Match( );
+                                                       
+                                                       SubMatchReader mr = new 
SubMatchReader( xtr, nm );
+                                                       
+                                                       mr.Start( );
+                                                       
+                                                       m.Matches.Add( nm );
+                                               }
+                                               break;
+                                               
+                                       case XmlNodeType.EndElement:
+                                               if ( xtr.Name == "match" )
+                                                       return;
+                                               break;
+                                               
+                               }
+                       }
+               }
+       }
+}

Added: trunk/winforms-tools/FDOxml2cs/MatchTypes.cs
===================================================================
--- trunk/winforms-tools/FDOxml2cs/MatchTypes.cs        2005-06-14 14:26:25 UTC 
(rev 45974)
+++ trunk/winforms-tools/FDOxml2cs/MatchTypes.cs        2005-06-14 15:38:49 UTC 
(rev 45975)
@@ -0,0 +1,17 @@
+// Authors:
+//     Alexander Olk, <[EMAIL PROTECTED]>
+
+namespace FDOxml2cs
+{
+       public enum MatchTypes
+       {
+               TypeString,
+               TypeHost16,
+               TypeHost32,
+               TypeBig16,
+               TypeBig32,
+               TypeLittle16,
+               TypeLittle32,
+               TypeByte
+       }
+}

Added: trunk/winforms-tools/FDOxml2cs/MimeType.cs
===================================================================
--- trunk/winforms-tools/FDOxml2cs/MimeType.cs  2005-06-14 14:26:25 UTC (rev 
45974)
+++ trunk/winforms-tools/FDOxml2cs/MimeType.cs  2005-06-14 15:38:49 UTC (rev 
45975)
@@ -0,0 +1,116 @@
+// Authors:
+//     Alexander Olk, <[EMAIL PROTECTED]>
+
+using System;
+using System.Collections;
+using System.Collections.Specialized;
+
+namespace FDOxml2cs
+{
+       public class MimeType
+       {
+               string typeName;
+               
+               string comment; // default comment
+               
+               Hashtable commentsLanguage = new Hashtable(); // key: language 
(de, en); value: comment
+               
+               int magicPriority = 50;
+               
+               ArrayList matches = new ArrayList();
+               
+               StringCollection globPatterns = new StringCollection();
+               
+               StringCollection subClasses = new StringCollection();
+               
+               StringCollection aliasTypes = new StringCollection();
+               
+               public string TypeName
+               {
+                       set {
+                               typeName = value;
+                       }
+                       
+                       get {
+                               return typeName;
+                       }
+               }
+               
+               public string Comment
+               {
+                       set {
+                               comment = value;
+                       }
+                       
+                       get {
+                               return comment;
+                       }
+               }
+               
+               public Hashtable CommentsLanguage
+               {
+                       set {
+                               commentsLanguage = value;
+                       }
+                       
+                       get {
+                               return commentsLanguage;
+                       }
+               }
+               
+               public int MagicPriority
+               {
+                       set {
+                               magicPriority = value;
+                       }
+                       
+                       get {
+                               return magicPriority;
+                       }
+               }
+               
+               public ArrayList Matches
+               {
+                       set {
+                               matches = value;
+                       }
+                       
+                       get {
+                               return matches;
+                       }
+               }
+               
+               public StringCollection GlobPatterns
+               {
+                       set {
+                               globPatterns = value;
+                       }
+                       
+                       get {
+                               return globPatterns;
+                       }
+               }
+               
+               public StringCollection SubClasses
+               {
+                       set {
+                               subClasses = value;
+                       }
+                       
+                       get {
+                               return subClasses;
+                       }
+               }
+               
+               public StringCollection AliasTypes
+               {
+                       set {
+                               aliasTypes = value;
+                       }
+                       
+                       get {
+                               return aliasTypes;
+                       }
+               }
+       }
+}

Added: trunk/winforms-tools/FDOxml2cs/MimeTypeReader.cs
===================================================================
--- trunk/winforms-tools/FDOxml2cs/MimeTypeReader.cs    2005-06-14 14:26:25 UTC 
(rev 45974)
+++ trunk/winforms-tools/FDOxml2cs/MimeTypeReader.cs    2005-06-14 15:38:49 UTC 
(rev 45975)
@@ -0,0 +1,77 @@
+// Authors:
+//     Alexander Olk, <[EMAIL PROTECTED]>
+
+using System;
+using System.Xml;
+
+namespace FDOxml2cs
+{
+       public class MimeTypeReader
+       {
+               XmlTextReader xtr;
+               
+               MimeType mt;
+               
+               public MimeTypeReader( XmlTextReader xtr, MimeType mt )
+               {
+                       this.xtr = xtr;
+                       this.mt = mt;
+               }
+               
+               public void Start( )
+               {
+                       if ( xtr.HasAttributes )
+                       {
+                               mt.TypeName = xtr.GetAttribute( "type" );
+                       }
+                       
+                       while ( xtr.Read( ) )
+                       {
+                               switch ( xtr.NodeType )
+                               {
+                                       case XmlNodeType.Element:
+                                               if ( xtr.Name == "sub-class-of" 
)
+                                               {
+                                                       SubClassReader scr = 
new SubClassReader( xtr, mt );
+                                                       
+                                                       scr.Start( );
+                                               }
+                                               else
+                                               if ( xtr.Name == "comment" )
+                                               {
+                                                       CommentReader cr = new 
CommentReader( xtr, mt );
+                                                       
+                                                       cr.Start( );
+                                               }
+                                               else
+                                               if ( xtr.Name == "glob" )
+                                               {
+                                                       GlobReader gr = new 
GlobReader( xtr, mt );
+                                                       
+                                                       gr.Start( );
+                                               }
+                                               else
+                                               if ( xtr.Name == "magic" )
+                                               {
+                                                       MagicReader mr = new 
MagicReader( xtr, mt );
+                                                       
+                                                       mr.Start( );
+                                               }
+                                               else
+                                               if ( xtr.Name == "alias" )
+                                               {
+                                                       AliasReader ar = new 
AliasReader( xtr, mt );
+                                                       
+                                                       ar.Start( );
+                                               }
+                                               break;
+                                               
+                                       case XmlNodeType.EndElement:
+                                               if ( xtr.Name == "mime-type" )
+                                                       return;
+                                               break;
+                               }
+                       }
+               }
+       }
+}

Added: trunk/winforms-tools/FDOxml2cs/MimeUtils.cs
===================================================================
--- trunk/winforms-tools/FDOxml2cs/MimeUtils.cs 2005-06-14 14:26:25 UTC (rev 
45974)
+++ trunk/winforms-tools/FDOxml2cs/MimeUtils.cs 2005-06-14 15:38:49 UTC (rev 
45975)
@@ -0,0 +1,24 @@
+// Authors:
+//     Alexander Olk, <[EMAIL PROTECTED]>
+
+using System;
+using System.Collections;
+
+namespace FDOxml2cs
+{
+       public class MimeUtils
+       {
+               public static ArrayList mimeTypes = new ArrayList();
+               
+               public static bool CheckIfMimetypeExists( MimeType mt )
+               {
+                       foreach ( MimeType m in mimeTypes )
+                       {
+                               if ( m.TypeName == mt.TypeName )
+                                       return true;
+                       }
+                       
+                       return false;
+               }
+       }
+}

Added: trunk/winforms-tools/FDOxml2cs/SourceWriter.cs
===================================================================
--- trunk/winforms-tools/FDOxml2cs/SourceWriter.cs      2005-06-14 14:26:25 UTC 
(rev 45974)
+++ trunk/winforms-tools/FDOxml2cs/SourceWriter.cs      2005-06-14 15:38:49 UTC 
(rev 45975)
@@ -0,0 +1,564 @@
+// Authors:
+//     Alexander Olk, <[EMAIL PROTECTED]>
+
+using System;
+using System.Collections;
+using System.Collections.Specialized;
+
+namespace FDOxml2cs
+{
+       public class SourceWriter
+       {
+               StringCollection outputLines = new StringCollection();
+               
+               public SourceWriter( )
+               {
+                       InitOutput( );
+               }
+               
+               public StringCollection OutputLines
+               {
+                       set {
+                               outputLines = value;
+                       }
+                       
+                       get {
+                               return outputLines;
+                       }
+               }
+               
+               public void Start( )
+               {
+                       GenerateCode( );
+                       
+                       EndOutput( );
+               }
+               
+               private void GenerateCode( )
+               {
+                       GenerateAliases( );
+                       
+                       outputLines.Add( "" );
+                       
+                       GenerateSubClasses( );
+                       
+                       outputLines.Add( "" );
+                       
+                       GenerateGlobals( );
+                       
+                       outputLines.Add( "" );
+                       outputLines.Add( "\t\t\tMimeType mt = null;" );
+                       outputLines.Add( "" );
+                       
+                       GenerateMimeTypes( );
+                       
+                       outputLines.Add( "\t\t\tMatch match0 = null;" );
+                       outputLines.Add( "" );
+                       
+                       GenerateMatches( );
+               }
+               
+               private void GenerateMatches( )
+               {
+                       foreach ( MimeType mt in MimeUtils.mimeTypes )
+                       {
+                               if ( mt.Matches.Count > 0 )
+                               {
+                                       AddMatches( mt.Matches, mt, 0, null );
+                               }
+                       }
+               }
+               
+               private void GenerateMimeTypes( )
+               {
+                       foreach ( MimeType mt in MimeUtils.mimeTypes )
+                       {
+                               outputLines.Add( "\t\t\tmt = new MimeType();" );
+                               outputLines.Add( "\t\t\tmt.Comment = \"" + 
mt.Comment + "\";" );
+                               
+                               foreach ( DictionaryEntry de in 
mt.CommentsLanguage )
+                               {
+                                       outputLines.Add( 
"\t\t\tmt.CommentsLanguage.Add( \"" + de.Key + "\", \"" + de.Value + "\" );" );
+                               }
+                               
+                               outputLines.Add( "\t\t\tMimeTypes.Add( \"" + 
mt.TypeName + "\", mt );" );
+                               
+                               outputLines.Add( "" );
+                       }
+               }
+               
+               private void GenerateGlobals( )
+               {
+                       foreach ( MimeType mt in MimeUtils.mimeTypes )
+                       {
+                               foreach ( string s in mt.GlobPatterns )
+                               {
+                                       if ( s.IndexOf( "*" ) == -1 )
+                                       {
+                                               outputLines.Add( 
"\t\t\tGlobalLiterals.Add( \"" + s + "\", \"" + mt.TypeName + "\" );" );
+                                       }
+                                       else
+                                       if ( s.IndexOf( "*." ) == -1 )
+                                       {
+                                               outputLines.Add( 
"\t\t\tGlobalSufPref.Add( \"" + s + "\", \"" + mt.TypeName + "\" );" );
+                                       }
+                                       else
+                                       {
+                                               string gp = s.Replace( "*", "" 
);
+                                               
+                                               string[] gpsplit = gp.Split( 
new char[] { '.' } );
+                                               
+                                               if ( gpsplit.Length > 2 )
+                                                       outputLines.Add( 
"\t\t\tGlobalPatternsLong.Add( \"" + gp + "\", \"" + mt.TypeName + "\" );" );
+                                               else
+                                                       outputLines.Add( 
"\t\t\tGlobalPatternsShort.Add( \"" + gp + "\", \"" + mt.TypeName + "\" );" );
+                                       }
+                               }
+                       }
+               }
+               
+               private void GenerateSubClasses( )
+               {
+                       foreach ( MimeType mt in MimeUtils.mimeTypes )
+                       {
+                               foreach ( string s in mt.SubClasses )
+                               {
+                                       outputLines.Add( "\t\t\tSubClasses.Add( 
\"" + mt.TypeName + "\", \"" + s + "\" );" );
+                               }
+                       }
+               }
+               
+               private void GenerateAliases( )
+               {
+                       foreach ( MimeType mt in MimeUtils.mimeTypes )
+                       {
+                               foreach ( string s in mt.AliasTypes )
+                               {
+                                       outputLines.Add( "\t\t\tAliases.Add( 
\"" + mt.TypeName + "\", \"" + s + "\" );" );
+                               }
+                       }
+               }
+               
+               private void AddMatches( ArrayList matches, MimeType mimeType, 
int cookie, string lastmatchname )
+               {
+                       foreach ( Match match in matches )
+                       {
+                               string matchname = "";
+                               
+                               string tabs = new String( '\t', 3 + cookie );
+                               
+                               if ( cookie == 0 )
+                               {
+                                       outputLines.Add( tabs + "match0 = new 
Match();" );
+                                       outputLines.Add( tabs + 
"match0.MimeType = \"" + mimeType.TypeName + "\";" );
+                                       matchname = "match0";
+                               }
+                               else
+                               {
+                                       matchname = "match" + cookie;
+                                       if ( lastmatchname != null && 
lastmatchname != matchname )
+                                               outputLines.Add( tabs + "Match 
" + matchname + " = null;" );
+                                       
+                                       lastmatchname = matchname;
+                                       
+                                       outputLines.Add( tabs + matchname + " = 
new Match();" );
+                               }
+                               
+                               if ( cookie == 0 )
+                                       outputLines.Add( tabs + matchname + 
".Priority = " + mimeType.MagicPriority + ";" );
+                               
+                               outputLines.Add( tabs + matchname + ".Offset = 
" + match.Offset + ";" );
+                               outputLines.Add( tabs + matchname + 
".OffsetLength = " + ( match.OffsetEnd == -1 ? "1" : ( match.OffsetEnd - 
match.Offset ).ToString( ) ) + ";" );
+                               outputLines.Add( tabs + matchname + ".MatchType 
= MatchTypes." + match.MatchType + ";" );
+                               
+                               int word_size = -1;
+                               
+                               switch ( match.MatchType )
+                               {
+                                       case MatchTypes.TypeHost16:
+                                               word_size = 2;
+                                               break;
+                                       case MatchTypes.TypeHost32:
+                                               word_size = 4;
+                                               break;
+                                       default:
+                                               break;
+                               }
+                               
+                               if ( word_size != -1 )
+                               {
+                                       outputLines.Add( tabs + matchname + 
".WordSize = " + word_size + ";" );
+                               }
+                               
+                               if ( match.MatchType == MatchTypes.TypeString )
+                               {
+                                       byte[] bmatchvalue = 
MatchValueStringToByteArray( match.MatchValue );
+                                       
+                                       BuildByteArrays( tabs, matchname, 
bmatchvalue, match );
+                               }
+                               else
+                               {
+                                       byte[] bmatchvalue = 
MatchValueOtherToByteArray( match.MatchValue, match.MatchType );
+                                       
+                                       BuildByteArrays( tabs, matchname, 
bmatchvalue, match );
+                               }
+                               
+                               
+                               if ( match.Matches.Count != 0 )
+                               {
+                                       cookie++;
+                                       
+                                       outputLines.Add( "" );
+                                       outputLines.Add( tabs + "if ( " + 
matchname + ".Matches.Count > 0 )" );
+                                       outputLines.Add( tabs + "{" );
+                                       
+                                       AddMatches( match.Matches, null, 
cookie, matchname );
+                                       
+                                       outputLines.Add( tabs + "}" );
+                                       
+                                       cookie--;
+                               }
+                               
+                               if ( cookie == 0 )
+                               {
+                                       if ( mimeType.MagicPriority < 80 )
+                                               outputLines.Add( 
"\t\t\tMatchesBelow80.Add( match0 );" );
+                                       else
+                                               outputLines.Add( 
"\t\t\tMatches80Plus.Add( match0 );" );
+                               }
+                               else
+                                       outputLines.Add( tabs + "match" + ( 
cookie - 1 ).ToString( ) + ".Matches.Add( match" + cookie + " );" );
+                               
+                               outputLines.Add( "" );
+                       }
+               }
+               
+               private void BuildByteArrays( string tabs, string matchname, 
byte[] bmatchvalue, Match match )
+               {
+                       AddByteArray( tabs, matchname, bmatchvalue, 0 );
+                       
+                       if ( match.Mask != null )
+                       {
+                               byte[] bmask = HexStringToByteArray( match.Mask 
);
+                               
+                               AddByteArray( tabs, matchname, bmask, 1 );
+                       }
+               }
+               
+               private void AddByteArray( string tabs, string matchname, 
byte[] bmatchvalue, int btype  ) // 0 == ByteValue, 1 == mask
+               {
+                       string type_string = ".ByteValue";
+                       
+                       if ( btype == 1 )
+                               type_string = ".Mask";
+                       
+                       string outs = tabs + matchname + type_string + " = new 
byte[ " + bmatchvalue.Length + " ] { ";
+                       
+                       int counter = 0;
+                       
+                       foreach ( byte b in bmatchvalue )
+                       {
+                               if ( counter % 8 == 0 )
+                               {
+                                       outs += "\n" + tabs + "\t\t";
+                               }
+                               
+                               outs += b.ToString( ) + ", ";
+                               
+                               counter++;
+                       }
+                       
+                       outs = outs.Remove( outs.Length - 2, 2 );
+                       
+                       outs += " };";
+                       
+                       outputLines.Add( outs );
+               }
+               
+               private byte[] MatchValueOtherToByteArray( string match, 
MatchTypes matchType )
+               {
+                       byte[] retval = null;
+                       
+                       // hex
+                       if ( match.StartsWith( "0x" ) )
+                       {
+                               retval = HexStringToByteArray( match );
+                       }
+                       else
+                       {
+                               if ( matchType == MatchTypes.TypeByte )
+                               {
+                                       retval = new byte[ 1 ];
+                                       
+                                       retval[ 0 ] = System.Convert.ToByte( 
match );
+                               }
+                               else
+                               if ( matchType == MatchTypes.TypeHost16 || 
matchType == MatchTypes.TypeLittle16 )
+                               {
+                                       retval = new byte[ 2 ];
+                                       
+                                       UInt16 i16 = System.Convert.ToUInt16( 
OctalStringToInt( match ) );
+                                       
+                                       retval[ 0 ] = System.Convert.ToByte( 
i16 & 0x00FF );
+                                       retval[ 1 ] = System.Convert.ToByte( 
i16 >> 8 );
+                               }
+                               if ( matchType == MatchTypes.TypeBig16 )
+                               {
+                                       retval = new byte[ 2 ];
+                                       
+                                       UInt16 i16 = System.Convert.ToUInt16( 
OctalStringToInt( match ) );
+                                       
+                                       retval[ 0 ] = System.Convert.ToByte( 
i16 >> 8 );
+                                       retval[ 1 ] = System.Convert.ToByte( 
i16 & 0x00FF );
+                               }
+                               else
+                               if ( matchType == MatchTypes.TypeHost32 || 
matchType == MatchTypes.TypeLittle32 )
+                               {
+                                       retval = new byte[ 4 ];
+                                       
+                                       UInt32 i32 = OctalStringToInt( match );
+                                       
+                                       retval[ 0 ] = System.Convert.ToByte( 
i32 & 0x000000FF );
+                                       retval[ 1 ] = System.Convert.ToByte( ( 
i32 & 0x0000FF00 ) >> 8 );
+                                       retval[ 2 ] = System.Convert.ToByte( ( 
i32 & 0x00FF0000 ) >> 16 );
+                                       retval[ 3 ] = System.Convert.ToByte( ( 
i32 & 0xFF000000 ) >> 24 );
+                               }
+                               else
+                               if ( matchType == MatchTypes.TypeBig32 )
+                               {
+                                       retval = new byte[ 4 ];
+                                       
+                                       UInt32 i32 = OctalStringToInt( match );
+                                       
+                                       retval[ 0 ] = System.Convert.ToByte( ( 
i32 & 0xFF000000 ) >> 24 );
+                                       retval[ 1 ] = System.Convert.ToByte( ( 
i32 & 0x00FF0000 ) >> 16 );
+                                       retval[ 2 ] = System.Convert.ToByte( ( 
i32 & 0x0000FF00 ) >> 8 );
+                                       retval[ 3 ] = System.Convert.ToByte( 
i32 & 0x000000FF );
+                               }
+                       }
+                       
+                       return retval;
+               }
+               
+               private uint OctalStringToInt( string input )
+               {
+                       if ( input.Length == 0 )
+                               return 0;
+                       
+                       int result = input[ 0 ] - '0';
+                       
+                       if ( input.Length > 1 )
+                               for ( int i = 1; i < input.Length; i++ )
+                               {
+                                       char c = input[ i ];
+                                       result = 8 * result + ( c - '0' );
+                               }
+                       
+                       return (uint)result;
+               }
+               
+               private byte[] HexStringToByteArray( string match )
+               {
+                       ArrayList bytelist = new ArrayList( );
+                       
+                       string match_tmp = match.Replace( "0x", "" );
+                       
+                       for ( int i = 0; i < match_tmp.Length; i += 2 )
+                       {
+                               bytelist.Add( System.Convert.ToByte( 
match_tmp.Substring( i, 2 ), 16 ) );
+                       }
+                       
+                       byte[] retval = new byte[ bytelist.Count ];
+                       
+                       bytelist.CopyTo( retval );
+                       
+                       return retval;
+               }
+               
+               private byte[] MatchValueStringToByteArray( string match )
+               {
+                       ArrayList bytelist = new ArrayList( );
+                       
+                       int i = 0;
+                       int l = match.Length;
+                       
+                       while ( i < l )
+                       {
+                               char c = match[ i++ ];
+                               
+                               if ( c == '\\' )
+                               {
+                                       if ( i == l )
+                                       {
+                                               bytelist.Add( 
System.Convert.ToByte( '\\' ) );
+                                               break;
+                                       }
+                                       
+                                       c = match[ i++ ];
+                                       
+                                       switch ( c )
+                                       {
+                                               case 'n':
+                                                       bytelist.Add( 
System.Convert.ToByte( '\n' ) );
+                                                       break;
+                                               case 'r':
+                                                       bytelist.Add( 
System.Convert.ToByte( '\r' ) );
+                                                       break;
+                                               case 'b':
+                                                       bytelist.Add( 
System.Convert.ToByte( '\b' ) );
+                                                       break;
+                                               case 't':
+                                                       bytelist.Add( 
System.Convert.ToByte( '\t' ) );
+                                                       break;
+                                               case 'f':
+                                                       bytelist.Add( 
System.Convert.ToByte( '\f' ) );
+                                                       break;
+                                               case 'v':
+                                                       bytelist.Add( 
System.Convert.ToByte( '\v' ) );
+                                                       break;
+                                                       // octal
+                                               case '0':
+                                               case '1':
+                                               case '2':
+                                               case '3':
+                                               case '4':
+                                               case '5':
+                                               case '6':
+                                               case '7':
+                                                       int result = c - '0';
+                                                       
+                                                       if ( i < l )
+                                                       {
+                                                               c = match[ i++ 
];
+                                                               
+                                                               if ( c >= '0' 
&& c <= '7' )
+                                                               {
+                                                                       result 
= 8 * result + ( c - '0' );
+                                                                       
+                                                                       if ( i 
< l )
+                                                                       {
+                                                                               
c = match[ i++ ];
+                                                                               
+                                                                               
if ( c >= '0' && c <= '7' )
+                                                                               
{
+                                                                               
        result = 8 * result + ( c - '0' );
+                                                                               
}
+                                                                               
else
+                                                                               
        i--;
+                                                                       }
+                                                               }
+                                                               else
+                                                                       i--;
+                                                       }
+                                                       
+                                                       bytelist.Add( 
System.Convert.ToByte( result ) );
+                                                       break;
+                                                       // hex
+                                               case 'x':
+                                                       int byte_to_add = 
System.Convert.ToByte( 'x' );
+                                                       
+                                                       c = match[ i++ ];
+                                                       
+                                                       try
+                                                       {
+                                                               int tmp = 
System.Convert.ToByte( c.ToString( ), 16 );
+                                                               
+                                                               byte_to_add = 
tmp;
+                                                               
+                                                               if ( i < l )
+                                                               {
+                                                                       c = 
match[ i++ ];
+                                                                       
+                                                                       try
+                                                                       {
+                                                                               
tmp = System.Convert.ToByte( c.ToString( ), 16 );
+                                                                               
+                                                                               
byte_to_add = ( byte_to_add << 4 ) + tmp;
+                                                                       }
+                                                                       catch ( 
System.FormatException )
+                                                                       {
+                                                                               
i--;
+                                                                       }
+                                                               }
+                                                       }
+                                                       catch ( 
System.FormatException )
+                                                       {
+                                                               i--;
+                                                       }
+                                                       
+                                                       bytelist.Add( 
System.Convert.ToByte( byte_to_add ) );
+                                                       
+                                                       break;
+                                               default:
+                                                       bytelist.Add( 
System.Convert.ToByte( c ) );
+                                                       break;
+                                       }
+                               }
+                               else
+                                       bytelist.Add( System.Convert.ToByte( c 
) );
+                       }
+                       
+                       byte[] retval = new byte[ bytelist.Count ];
+                       
+                       bytelist.CopyTo( retval );
+                       
+                       return retval;
+               }
+               
+               private void InitOutput( )
+               {
+                       string date = DateTime.Now.ToString( );
+                       
+                       string begin_str =
+                       
+                       "#region generated code " + date + "\n\n" +
+                       "using System;\n" +
+                       "using System.Collections;\n" +
+                       "using System.Collections.Specialized;\n\n" +
+                       "namespace " + FDOxml2csMain.nameSpace + "\n" +
+                       "{\n" +
+                       "\tinternal struct MimeGenerated\n" +
+                       "\t{\n" +
+                       "\t\tpublic static NameValueCollection Aliases = new 
NameValueCollection();\n" +
+                       "\t\tpublic static NameValueCollection SubClasses = new 
NameValueCollection();\n\n" +
+                       "\t\tpublic static NameValueCollection 
GlobalPatternsShort = new NameValueCollection();\n" +
+                       "\t\tpublic static NameValueCollection 
GlobalPatternsLong = new NameValueCollection();\n" +
+                       "\t\tpublic static NameValueCollection GlobalLiterals = 
new NameValueCollection();\n" +
+                       "\t\tpublic static NameValueCollection GlobalSufPref = 
new NameValueCollection();\n" +
+                       "\t\tpublic static Hashtable MimeTypes = new 
Hashtable();\n\n" +
+                       "\t\tpublic static ArrayList Matches80Plus = new 
ArrayList();\n" +
+                       "\t\tpublic static ArrayList MatchesBelow80 = new 
ArrayList();\n\n" +
+                       "\t\tpublic static void Init()\n" +
+                       "\t\t{\n";
+                       
+                       outputLines.Add( begin_str );
+               }
+               
+               private void EndOutput( )
+               {
+                       string end_str =
+                       
+                       "\t\t}\n" +
+                       "\t}\n" +
+                       "}\n\n" +
+                       "#endregion\n";
+                       
+                       outputLines.Add( end_str );
+               }
+               
+               public void Flush( )
+               {
+                       Console.WriteLine( "Writing \"MimeGenerated.cs\"..." );
+                       
+                       System.IO.StreamWriter sw = new System.IO.StreamWriter( 
"MimeGenerated.cs" );
+                       
+                       foreach ( string s in outputLines )
+                       {
+                               sw.WriteLine( s );
+                       }
+                       
+                       sw.Close( );
+               }
+       }
+}
+

Added: trunk/winforms-tools/FDOxml2cs/SubClassReader.cs
===================================================================
--- trunk/winforms-tools/FDOxml2cs/SubClassReader.cs    2005-06-14 14:26:25 UTC 
(rev 45974)
+++ trunk/winforms-tools/FDOxml2cs/SubClassReader.cs    2005-06-14 15:38:49 UTC 
(rev 45975)
@@ -0,0 +1,29 @@
+// Authors:
+//     Alexander Olk, <[EMAIL PROTECTED]>
+
+using System;
+using System.Xml;
+
+namespace FDOxml2cs
+{
+       public class SubClassReader
+       {
+               XmlTextReader xtr;
+               
+               MimeType mt;
+               
+               public SubClassReader( XmlTextReader xtr, MimeType mt )
+               {
+                       this.xtr = xtr;
+                       this.mt = mt;
+               }
+               
+               public void Start( )
+               {
+                       if ( xtr.HasAttributes )
+                       {
+                               mt.SubClasses.Add( xtr.GetAttribute( "type" ) );
+                       }
+               }
+       }
+}

Added: trunk/winforms-tools/FDOxml2cs/SubMatchReader.cs
===================================================================
--- trunk/winforms-tools/FDOxml2cs/SubMatchReader.cs    2005-06-14 14:26:25 UTC 
(rev 45974)
+++ trunk/winforms-tools/FDOxml2cs/SubMatchReader.cs    2005-06-14 15:38:49 UTC 
(rev 45975)
@@ -0,0 +1,105 @@
+// Authors:
+//     Alexander Olk, <[EMAIL PROTECTED]>
+
+using System;
+using System.Xml;
+
+namespace FDOxml2cs
+{
+       public class SubMatchReader
+       {
+               XmlTextReader xtr;
+               
+               Match sm;
+               
+               public SubMatchReader( XmlTextReader xtr, Match sm )
+               {
+                       this.xtr = xtr;
+                       
+                       this.sm = sm;
+               }
+               
+               public void Start( )
+               {
+                       if ( xtr.HasAttributes )
+                       {
+                               sm.MatchValue = xtr.GetAttribute( "value" );
+                               
+                               string match_type = xtr.GetAttribute( "type" );
+                               
+                               if ( match_type == "string" )
+                                       sm.MatchType = MatchTypes.TypeString;
+                               else
+                               if ( match_type == "host16" )
+                                       sm.MatchType = MatchTypes.TypeHost16;
+                               else
+                               if ( match_type == "host32" )
+                                       sm.MatchType = MatchTypes.TypeHost32;
+                               else
+                               if ( match_type == "big16" )
+                                       sm.MatchType = MatchTypes.TypeBig16;
+                               else
+                               if ( match_type == "big32" )
+                                       sm.MatchType = MatchTypes.TypeBig32;
+                               else
+                               if ( match_type == "little16" )
+                                       sm.MatchType = MatchTypes.TypeLittle16;
+                               else
+                               if ( match_type == "little32" )
+                                       sm.MatchType = MatchTypes.TypeLittle32;
+                               else
+                               if ( match_type == "byte" )
+                                       sm.MatchType = MatchTypes.TypeByte;
+                               
+                               string offset = xtr.GetAttribute( "offset" );
+                               
+                               if ( offset.IndexOf( ":" ) != -1 )
+                               {
+                                       string[] split = offset.Split( new 
char[] { ':' } );
+                                       
+                                       if ( split.Length == 2 )
+                                       {
+                                               sm.Offset = 
System.Convert.ToInt32( split[ 0 ] );
+                                               sm.OffsetEnd = 
System.Convert.ToInt32( split[ 1 ] );
+                                       }
+                                       
+                               }
+                               else
+                                       sm.Offset = System.Convert.ToInt32( 
offset );
+                               
+                               string mask = xtr.GetAttribute( "mask" );
+                               
+                               if ( mask != "" )
+                                       sm.Mask = mask;
+                       }
+                       
+                       if ( xtr.IsEmptyElement )
+                               return;
+                       
+                       while ( xtr.Read( ) )
+                       {
+                               switch ( xtr.NodeType )
+                               {
+                                       case XmlNodeType.Element:
+                                               if ( xtr.Name == "match" )
+                                               {
+                                                       Match nm = new Match( );
+                                                       
+                                                       SubMatchReader mr = new 
SubMatchReader( xtr, nm );
+                                                       
+                                                       mr.Start( );
+                                                       
+                                                       sm.Matches.Add( nm );
+                                               }
+                                               break;
+                                               
+                                       case XmlNodeType.EndElement:
+                                               if ( xtr.Name == "match" )
+                                                       return;
+                                               break;
+                                               
+                               }
+                       }
+               }
+       }
+}

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to