[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
CVS libidn/csharp/generate
From: |
libidn-commit |
Subject: |
CVS libidn/csharp/generate |
Date: |
Tue, 13 Mar 2007 10:56:55 +0100 |
Update of /home/jas/self/public-cvs/libidn/csharp/generate
In directory mocca:/home/jas/self/src/libidn/csharp/generate
Added Files:
AssemblyInfo.cs GenerateNFKC.cs GenerateRFC3454.cs HashSet.cs
Program.cs Tokenizer.cs
Log Message:
Add code to generate tables, from Alexander Gnauck <address@hidden>.
--- /home/jas/self/public-cvs/libidn/csharp/generate/AssemblyInfo.cs
2007/03/13 09:56:55 NONE
+++ /home/jas/self/public-cvs/libidn/csharp/generate/AssemblyInfo.cs
2007/03/13 09:56:55 1.1
/// <summary> Copyright (C) 2004 Free Software Foundation, Inc.
/// *
/// Author: Alexander Gnauck AG-Software
/// *
/// This file is part of GNU Libidn.
/// *
/// This library is free software; you can redistribute it and/or
/// modify it under the terms of the GNU Lesser General Public License
/// as published by the Free Software Foundation; either version 2.1 of
/// the License, or (at your option) any later version.
/// *
/// This library is distributed in the hope that it will be useful, but
/// WITHOUT ANY WARRANTY; without even the implied warranty of
/// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
/// Lesser General Public License for more details.
/// *
/// You should have received a copy of the GNU Lesser General Public
/// License along with this library; if not, write to the Free Software
/// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
/// USA
/// </summary>
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed
to COM
[assembly: Guid("6D72484E-39BA-4312-9B64-74FD5CB81001")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]---
/home/jas/self/public-cvs/libidn/csharp/generate/GenerateNFKC.cs 2007/03/13
09:56:55 NONE
+++ /home/jas/self/public-cvs/libidn/csharp/generate/GenerateNFKC.cs
2007/03/13 09:56:55 1.1
/// <summary> Copyright (C) 2004 Free Software Foundation, Inc.
/// *
/// Author: Alexander Gnauck AG-Software
/// *
/// This file is part of GNU Libidn.
/// *
/// This library is free software; you can redistribute it and/or
/// modify it under the terms of the GNU Lesser General Public License
/// as published by the Free Software Foundation; either version 2.1 of
/// the License, or (at your option) any later version.
/// *
/// This library is distributed in the hope that it will be useful, but
/// WITHOUT ANY WARRANTY; without even the implied warranty of
/// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
/// Lesser General Public License for more details.
/// *
/// You should have received a copy of the GNU Lesser General Public
/// License along with this library; if not, write to the Free Software
/// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
/// USA
/// </summary>
using System;
using System.IO;
using System.Collections;
using System.Text;
namespace gnu.inet.encoding.misc
{
public class GenerateNFKC
{
internal static string stripComment(string sIn)
{
int c = sIn.IndexOf('#');
if (c == -1)
{
return sIn;
}
else
{
return sIn.Substring(0, (c) - (0));
}
}
internal static string[] split(string sIn, char sep)
{
StringBuilder sb = new StringBuilder(sIn);
int c = 0;
for (int i = 0; i < sb.Length; i++)
{
if (sb[i] == sep)
{
c++;
}
}
string[] sOut = new string[c + 1];
c = 0;
int l = 0;
for (int i = 0; i < sb.Length; i++)
{
if (sb[i] == sep)
{
if (l >= i)
{
sOut[c] = "";
}
else
{
// TODO, check this
sOut[c] = sb.ToString(l, i-l);
}
l = i + 1;
c++;
}
}
if (l < sb.Length)
{
sOut[c] = sb.ToString(l, sb.Length - l);
}
return sOut;
}
internal static bool isCompatibilityMapping(string sIn)
{
return sIn.Length > 0 && sIn[0] == '<';
}
internal static string stripCompatibilityTag(string sIn)
{
return sIn.Substring(sIn.IndexOf('>') + 2);
}
internal static string toString(string sIn)
{
StringBuilder sOut = new StringBuilder();
string[] chars = split(sIn, ' ');
for (int i = 0; i < chars.Length; i++)
{
if (chars[i].Equals("005C"))
{
sOut.Append("\\\\");
}
else if (chars[i].Equals("0022"))
{
sOut.Append("\\\"");
}
else
{
sOut.Append("\\u");
sOut.Append(chars[i]);
}
}
return sOut.ToString();
}
internal static string decompose(string sIn, SortedList mappings)
{
StringBuilder sOut = new StringBuilder();
string[] c = split(sIn, ' ');
for (int i = 0; i < c.Length; i++)
{
if (mappings.ContainsKey(c[i]))
{
if (sOut.Length > 0)
{
sOut.Append(" ");
}
sOut.Append(decompose((string)mappings[c[i]], mappings));
}
else
{
if (sOut.Length > 0)
{
sOut.Append(" ");
}
sOut.Append(c[i]);
}
}
return sOut.ToString();
}
public static void Generate()
{
// Check if the unicode files exist
{
FileInfo f1 = new FileInfo("CompositionExclusions.txt");
FileInfo f2 = new FileInfo("UnicodeData.txt");
bool tmpBool;
if (File.Exists(f1.FullName))
tmpBool = true;
else
tmpBool = Directory.Exists(f1.FullName);
bool tmpBool2;
if (File.Exists(f2.FullName))
tmpBool2 = true;
else
tmpBool2 = Directory.Exists(f2.FullName);
if (!tmpBool || !tmpBool2)
{
Console.WriteLine("Unable to find UnicodeData.txt or
CompositionExclusions.txt.");
Console.WriteLine("Please download the latest version of
these file from:");
Console.WriteLine("http://www.unicode.org/Public/UNIDATA/");
System.Environment.Exit(1);
}
}
ArrayList exclusions = new ArrayList();
{
StreamReader r = new StreamReader("CompositionExclusions.txt",
System.Text.Encoding.Default);
string line;
while (null != (line = r.ReadLine()))
{
line = stripComment(line);
line = line.Trim();
if (line.Length == 0)
{
// Empty line
}
else if (line.Length == 4)
{
exclusions.Add(line);
}
else
{
// Skip code points > 0xffff
}
}
r.Close();
}
// Read UnicodeData
SortedList canonical = new SortedList();
SortedList compatibility = new SortedList();
SortedList combiningClasses = new SortedList();
{
StreamReader r = new StreamReader("UnicodeData.txt",
Encoding.Default);
string line;
while (null != (line = r.ReadLine()))
{
line = stripComment(line);
line = line.Trim();
if (line.Length == 0)
{
// Empty line
}
else
{
string[] f = split(line, ';');
if (f[0].Length == 4)
{
if (!f[5].Equals(""))
{
if (isCompatibilityMapping(f[5]))
{
compatibility[f[0]] =
stripCompatibilityTag(f[5]);
}
else
{
compatibility[f[0]] = f[5];
if (!exclusions.Contains(f[0]))
{
canonical[f[0]] = f[5];
}
}
}
if (!f[3].Equals("0"))
{
//UPGRADE_TODO: Method
'java.lang.Integer.parseInt' was converted to 'System.Convert.ToInt32' which
has a different behavior.
"ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073'"
combiningClasses[(int)System.Convert.ToInt32(f[0], 16)] = f[3];
}
}
else
{
// Skip code points > 0xffff
}
}
}
r.Close();
}
// Recursively apply compatibility mappings
while (true)
{
bool replaced = false;
IEnumerator i = new
HashSet(compatibility.Keys).GetEnumerator();
while (i.MoveNext())
{
string k = (string)i.Current;
string v = (string)compatibility[k];
string d = decompose(v, compatibility);
if (!d.Equals(v))
{
replaced = true;
compatibility[k] = d;
}
}
if (!replaced)
{
break;
}
}
// Eliminate duplicate mappings
SortedList compatibilityKeys = new SortedList();
ArrayList compatibilityMappings = new ArrayList();
{
IEnumerator i = new
HashSet(compatibility.Keys).GetEnumerator();
while (i.MoveNext())
{
string k = (string)i.Current;
string v = (string)compatibility[k];
int index = compatibilityMappings.IndexOf(v);
if (index == -1)
{
index = compatibilityMappings.Count;
compatibilityMappings.Add(v);
}
compatibilityKeys[k] = (int)index;
}
}
// Create composition tables
SortedList firstMap = new SortedList();
SortedList secondMap = new SortedList();
{
IEnumerator i = new HashSet(canonical.Keys).GetEnumerator();
while (i.MoveNext())
{
string k = (string)i.Current;
string v = (string)canonical[k];
string[] s = split(v, ' ');
if (s.Length == 2)
{
// If both characters have the same combining class,
they
// won't be combined (in the sequence AB, B is blocked
from
// A if both have the same combining class)
string cc1 =
(string)combiningClasses[(int)System.Convert.ToInt32(s[0], 16)];
string cc2 =
(string)combiningClasses[(int)System.Convert.ToInt32(s[1], 16)];
if (cc1 != null || (cc1 != null && cc1.Equals(cc2)))
{
// Ignore this composition
// TODO check this
//i.remove();
canonical.Remove(k);
continue;
}
if (firstMap.ContainsKey(s[0]))
{
int c = (int)firstMap[s[0]];
firstMap[s[0]] = (int)(c + 1);
}
else
{
firstMap[s[0]] = 1;
}
if (secondMap.ContainsKey(s[1]))
{
int c = (int)secondMap[s[1]];
secondMap[s[1]] = (int)(c + 1);
}
else
{
secondMap[s[1]] = 1;
}
}
else if (s.Length > 2)
{
Console.WriteLine("? wrong canonical mapping for " + k);
System.Environment.Exit(1);
}
}
}
[339 lines skipped]
--- /home/jas/self/public-cvs/libidn/csharp/generate/GenerateRFC3454.cs
2007/03/13 09:56:55 NONE
+++ /home/jas/self/public-cvs/libidn/csharp/generate/GenerateRFC3454.cs
2007/03/13 09:56:55 1.1
[634 lines skipped]
--- /home/jas/self/public-cvs/libidn/csharp/generate/HashSet.cs 2007/03/13
09:56:55 NONE
+++ /home/jas/self/public-cvs/libidn/csharp/generate/HashSet.cs 2007/03/13
09:56:55 1.1
[724 lines skipped]
--- /home/jas/self/public-cvs/libidn/csharp/generate/Program.cs 2007/03/13
09:56:55 NONE
+++ /home/jas/self/public-cvs/libidn/csharp/generate/Program.cs 2007/03/13
09:56:55 1.1
[762 lines skipped]
--- /home/jas/self/public-cvs/libidn/csharp/generate/Tokenizer.cs
2007/03/13 09:56:55 NONE
+++ /home/jas/self/public-cvs/libidn/csharp/generate/Tokenizer.cs
2007/03/13 09:56:55 1.1
[982 lines skipped]
- CVS libidn/csharp/generate, libidn-commit, 2007/03/13
- CVS libidn/csharp/generate,
libidn-commit <=
- CVS libidn/csharp/generate, libidn-commit, 2007/03/13
- CVS libidn/csharp/generate, libidn-commit, 2007/03/13
- CVS libidn/csharp/generate, libidn-commit, 2007/03/13
- CVS libidn/csharp/generate, libidn-commit, 2007/03/13
- CVS libidn/csharp/generate, libidn-commit, 2007/03/13