Exemple #1
0
        private static string Map(string domainName, bool TransitionalProcessing, bool UseStd3AsciiRules, out bool error)
        {
            error = false;
            StringBuilder buffer = new StringBuilder();

            foreach (char c in domainName)
            {
                CodePointEntry entry = MappingTable.GetEntry(c);
                switch (entry.Status)
                {
                case CodePointStatus.Valid:
                    buffer.Append(c);
                    break;

                case CodePointStatus.Ignored:
                    break;

                case CodePointStatus.Mapped:
                    buffer.Append(entry.Mapping);
                    break;

                case CodePointStatus.Deviation:
                    if (TransitionalProcessing)
                    {
                        buffer.Append(entry.Mapping);
                    }
                    else
                    {
                        buffer.Append(c);
                    }
                    break;

                case CodePointStatus.Disallowed:
                    error = true;
                    return(string.Empty);

                case CodePointStatus.Disallowed_STD3_valid:
                    if (UseStd3AsciiRules)
                    {
                        error = true;
                        return(string.Empty);
                    }
                    goto case CodePointStatus.Valid;

                case CodePointStatus.Disallowed_STD3_mapped:
                    if (UseStd3AsciiRules)
                    {
                        error = true;
                        return(string.Empty);
                    }
                    goto case CodePointStatus.Mapped;
                }
            }
            return(buffer.ToString());
        }
Exemple #2
0
        public CodePointEntry GetEntry(char input)
        {
            CodePointEntry entry = new CodePointEntry();

            for (int i = 0; i < entries.Length; i++)
            {
                if (entries[i].Range.Contains(input))
                {
                    entry = entries[i];
                    break;
                }
            }

            return(entry);
        }
Exemple #3
0
        public void Load(Stream stream)
        {
            List <CodePointEntry> codePointEntries = new List <CodePointEntry>();
            StreamReader          reader           = new StreamReader(stream);

            while (!reader.EndOfStream)
            {
                CodePointEntry entry  = new CodePointEntry();
                string         input  = reader.ReadLine();
                string[]       result = GetTokens(input);

                if (result[1] == null)
                {
                    continue;
                }

                if (!entry.Range.Generate(result[0]))
                {
                    continue;
                }

                entry.Status = (CodePointStatus)Enum.Parse(typeof(CodePointStatus), result[1].FirstLetterToUpperCase());

                if (result[2] != null)
                {
                    entry.Mapping = new string(result[2].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Select((s) =>
                    {
                        return((char)int.Parse(s.Trim(), System.Globalization.NumberStyles.HexNumber));
                    }).ToArray());

                    if (result[3] != null)
                    {
                        entry.IDNA2008Status = (IDNA2008Status)Enum.Parse(typeof(IDNA2008Status), result[3]);
                    }
                }
                else
                {
                    entry.Mapping = string.Empty;
                }

                codePointEntries.Add(entry);
            }
            entries = codePointEntries.ToArray();
        }