blob: 870366bb9cecb5f256838fbbe3b09998e279ab93 [file] [log] [blame]
using Lucene.Net.Support;
using System;
using System.Text;
namespace Lucene.Net.Analysis.Hunspell
{
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// LUCENENET NOTE: This class was refactored from its Java counterpart.
// many hunspell dictionaries use this encoding, yet java/.NET does not have it?!?!
[ExceptionToClassNameConvention]
internal sealed class ISO8859_14Encoding : Encoding
{
private static readonly Decoder decoder = new ISO8859_14Decoder();
public override Decoder GetDecoder()
{
return new ISO8859_14Decoder();
}
public override string EncodingName => "iso-8859-14";
public override int CodePage => 28604;
public override int GetCharCount(byte[] bytes, int index, int count)
{
return decoder.GetCharCount(bytes, index, count);
}
public override int GetChars(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex)
{
return decoder.GetChars(bytes, byteIndex, byteCount, chars, charIndex);
}
public override int GetMaxCharCount(int byteCount)
{
return byteCount;
}
#region Encoding Not Implemented
public override int GetByteCount(char[] chars, int index, int count)
{
throw new NotImplementedException();
}
public override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex)
{
throw new NotImplementedException();
}
public override int GetMaxByteCount(int charCount)
{
throw new NotImplementedException();
}
#endregion
}
[ExceptionToClassNameConvention]
internal sealed class ISO8859_14Decoder : Decoder
{
internal static readonly char[] TABLE = new char[]
{
(char)0x00A0, (char)0x1E02, (char)0x1E03, (char)0x00A3, (char)0x010A, (char)0x010B, (char)0x1E0A, (char)0x00A7,
(char)0x1E80, (char)0x00A9, (char)0x1E82, (char)0x1E0B, (char)0x1EF2, (char)0x00AD, (char)0x00AE, (char)0x0178,
(char)0x1E1E, (char)0x1E1F, (char)0x0120, (char)0x0121, (char)0x1E40, (char)0x1E41, (char)0x00B6, (char)0x1E56,
(char)0x1E81, (char)0x1E57, (char)0x1E83, (char)0x1E60, (char)0x1EF3, (char)0x1E84, (char)0x1E85, (char)0x1E61,
(char)0x00C0, (char)0x00C1, (char)0x00C2, (char)0x00C3, (char)0x00C4, (char)0x00C5, (char)0x00C6, (char)0x00C7,
(char)0x00C8, (char)0x00C9, (char)0x00CA, (char)0x00CB, (char)0x00CC, (char)0x00CD, (char)0x00CE, (char)0x00CF,
(char)0x0174, (char)0x00D1, (char)0x00D2, (char)0x00D3, (char)0x00D4, (char)0x00D5, (char)0x00D6, (char)0x1E6A,
(char)0x00D8, (char)0x00D9, (char)0x00DA, (char)0x00DB, (char)0x00DC, (char)0x00DD, (char)0x0176, (char)0x00DF,
(char)0x00E0, (char)0x00E1, (char)0x00E2, (char)0x00E3, (char)0x00E4, (char)0x00E5, (char)0x00E6, (char)0x00E7,
(char)0x00E8, (char)0x00E9, (char)0x00EA, (char)0x00EB, (char)0x00EC, (char)0x00ED, (char)0x00EE, (char)0x00EF,
(char)0x0175, (char)0x00F1, (char)0x00F2, (char)0x00F3, (char)0x00F4, (char)0x00F5, (char)0x00F6, (char)0x1E6B,
(char)0x00F8, (char)0x00F9, (char)0x00FA, (char)0x00FB, (char)0x00FC, (char)0x00FD, (char)0x0177, (char)0x00FF
};
public override int GetCharCount(byte[] bytes, int index, int count)
{
return count;
}
public override int GetChars(byte[] bytesIn, int byteIndex, int byteCount, char[] charsOut, int charIndex)
{
int writeCount = 0;
int charPointer = charIndex;
for (int i = byteIndex; i < (byteIndex + byteCount); i++)
{
// Decode the value
char ch = (char)(bytesIn[i] & 0xff);
if (ch >= 0xA0)
{
ch = TABLE[ch - 0xA0];
}
// write the value to the correct buffer slot
charsOut[charPointer] = ch;
writeCount++;
charPointer++;
}
return writeCount;
}
}
}