mirror of
https://git.femboyfinancial.jp/james/lipsync.git
synced 2024-11-24 11:42:00 -08:00
677 lines
21 KiB
C#
677 lines
21 KiB
C#
/*
|
||
* SymbolTable.cs
|
||
* Copyright (c) 2008-2009 kbinani
|
||
*
|
||
* This file is part of Boare.Lib.Vsq.
|
||
*
|
||
* Boare.Lib.Vsq is free software; you can redistribute it and/or
|
||
* modify it under the terms of the BSD License.
|
||
*
|
||
* Boare.Lib.Vsq 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.
|
||
*/
|
||
using System;
|
||
using System.IO;
|
||
using System.Text;
|
||
using System.Collections.Generic;
|
||
using System.Windows.Forms;
|
||
|
||
using bocoree;
|
||
|
||
namespace Boare.Lib.Vsq {
|
||
|
||
public class SymbolTable : ICloneable {
|
||
private Dictionary<string, string> m_dict;
|
||
private string m_name;
|
||
private bool m_enabled;
|
||
|
||
#region Static Field
|
||
private static SortedList<int, SymbolTable> s_table = new SortedList<int, SymbolTable>();
|
||
private static SymbolTable s_default_jp = null;
|
||
private static bool s_initialized = false;
|
||
public static readonly string[,] _KEY_JP = {
|
||
{"あ", "a"},
|
||
{"い", "i"},
|
||
{"う", "M"},
|
||
{"え", "e"},
|
||
{"お", "o"},
|
||
{"か", "k a"},
|
||
{"き", "k' i"},
|
||
{"く", "k M"},
|
||
{"け", "k e"},
|
||
{"こ", "k o"},
|
||
{"さ", "s a"},
|
||
{"し", "S i"},
|
||
{"す", "s M"},
|
||
{"せ", "s e"},
|
||
{"そ", "s o"},
|
||
{"た", "t a"},
|
||
{"ち", "tS i"},
|
||
{"つ", "ts M"},
|
||
{"て", "t e"},
|
||
{"と", "t o"},
|
||
{"な", "n a"},
|
||
{"に", "J i"},
|
||
{"ぬ", "n M"},
|
||
{"ね", "n e"},
|
||
{"の", "n o"},
|
||
{"は", "h a"},
|
||
{"ひ", "C i"},
|
||
{"ふ", @"p\ M"},
|
||
{"へ", "h e"},
|
||
{"ほ", "h o"},
|
||
{"ま", "m a"},
|
||
{"み", "m' i"},
|
||
{"む", "m M"},
|
||
{"め", "m e"},
|
||
{"も", "m o"},
|
||
{"や", "j a"},
|
||
{"ゆ", "j M"},
|
||
{"よ", "j o"},
|
||
{"ら", "4 a"},
|
||
{"り", "4' i"},
|
||
{"る", "4 M"},
|
||
{"れ", "4 e "},
|
||
{"ろ", "4 o"},
|
||
{"わ", "w a"},
|
||
{"ゐ", "w i"},
|
||
{"ゑ", "w e"},
|
||
{"を", "o"},
|
||
{"ぁ", "a"},
|
||
{"ぃ", "i"},
|
||
{"ぅ", "M"},
|
||
{"ぇ", "e"},
|
||
{"ぉ", "o"},
|
||
{"が", "g a"},
|
||
{"ぎ", "g' i"},
|
||
{"ぐ", "g M"},
|
||
{"げ", "g e"},
|
||
{"ご", "g o"},
|
||
{"ざ", "dz a"},
|
||
{"じ", "dZ i"},
|
||
{"ず", "dz M"},
|
||
{"ぜ", "dz e"},
|
||
{"ぞ", "dz o"},
|
||
{"だ", "d a"},
|
||
{"ぢ", "dZ i"},
|
||
{"づ", "dz M"},
|
||
{"で", "d e"},
|
||
{"ど", "d o"},
|
||
{"ば", "b a"},
|
||
{"び", "b' i"},
|
||
{"ぶ", "b M"},
|
||
{"べ", "b e"},
|
||
{"ぼ", "b o"},
|
||
{"ぱ", "p a"},
|
||
{"ぴ", "p' i"},
|
||
{"ぷ", "p M"},
|
||
{"ぺ", "p e"},
|
||
{"ぽ", "p o"},
|
||
{"いぇ", "j e"},
|
||
{"うぃ", "w i"},
|
||
{"うぇ", "w e"},
|
||
{"うぉ", "w o"},
|
||
{"きゃ", "k' a"},
|
||
{"きゅ", "k' M"},
|
||
{"きぇ", "k' e"},
|
||
{"きょ", "k' o"},
|
||
{"しゃ", "S a"},
|
||
{"しゅ", "S M"},
|
||
{"しぇ", "S e"},
|
||
{"しょ", "S o"},
|
||
{"ちゃ", "tS a"},
|
||
{"ちゅ", "tS M"},
|
||
{"ちぇ", "tS e"},
|
||
{"ちょ", "tS o"},
|
||
{"にゃ", "J a"},
|
||
{"にゅ", "J M"},
|
||
{"にぇ", "J e"},
|
||
{"にょ", "J o"},
|
||
{"ひゃ", "C a"},
|
||
{"ひゅ", "C M"},
|
||
{"ひぇ", "C e"},
|
||
{"ひょ", "C o"},
|
||
{"ふゃ", @"p\' a"},
|
||
{"ふぃ", @"p\' i"},
|
||
{"ふゅ", @"p\' M"},
|
||
{"ふぇ", @"p\ e"},
|
||
{"みゃ", "m' a"},
|
||
{"みゅ", "m' M"},
|
||
{"みぇ", "m' e"},
|
||
{"みょ", "m' o"},
|
||
{"りゃ", "4' a"},
|
||
{"りゅ", "4' M"},
|
||
{"りぇ", "4' e"},
|
||
{"りょ", "4' o"},
|
||
{"ぎゃ", "g' a"},
|
||
{"ぎゅ", "g' M"},
|
||
{"ぎぇ", "g' e"},
|
||
{"ぎょ", "g' o"},
|
||
{"じゃ", "dZ a"},
|
||
{"じゅ", "dZ M"},
|
||
{"じぇ", "dZ e"},
|
||
{"じょ", "dZ o"},
|
||
{"びゃ", "b' a"},
|
||
{"びゅ", "b' M"},
|
||
{"びぇ", "b' e"},
|
||
{"びょ", "b' o"},
|
||
{"ぴゃ", "p' a"},
|
||
{"ぴゅ", "p' M"},
|
||
{"ぴぇ", "p' e"},
|
||
{"ぴょ", "p' o"},
|
||
{"ふぁ", @"p\ a"},
|
||
{"ふぉ", @"p\ o"},
|
||
{"てゃ", "t' a"},
|
||
{"てぃ", "t' i"},
|
||
{"てゅ", "t' M"},
|
||
{"てぇ", "t' e"},
|
||
{"てょ", "t' o"},
|
||
{"でゃ", "d' a"},
|
||
{"でぃ", "d' i"},
|
||
{"でゅ", "d' M"},
|
||
{"でぇ", "d' e"},
|
||
{"でょ", "d' o"},
|
||
{"すぃ", "s i"},
|
||
{"ずぃ", "dz i"},
|
||
{"とぅ", "t M"},
|
||
{"どぅ", "d M"},
|
||
{"ゃ", "j a"},
|
||
{"ゅ", "j M"},
|
||
{"ょ", "j o"},
|
||
{"ん", "n"},
|
||
{"ア", "a"},
|
||
{"イ", "i"},
|
||
{"ウ", "M"},
|
||
{"エ", "e"},
|
||
{"オ", "o"},
|
||
{"カ", "k a"},
|
||
{"キ", "k' i"},
|
||
{"ク", "k M"},
|
||
{"ケ", "k e"},
|
||
{"コ", "k o"},
|
||
{"サ", "s a"},
|
||
{"シ", "S i"},
|
||
{"ス", "s M"},
|
||
{"セ", "s e"},
|
||
{"ソ", "s o"},
|
||
{"タ", "t a"},
|
||
{"チ", "tS i"},
|
||
{"ツ", "ts M"},
|
||
{"テ", "t e"},
|
||
{"ト", "t o"},
|
||
{"ナ", "n a"},
|
||
{"ニ", "J i"},
|
||
{"ヌ", "n M"},
|
||
{"ネ", "n e"},
|
||
{"ノ", "n o"},
|
||
{"ハ", "h a"},
|
||
{"ヒ", "C i"},
|
||
{"フ", @"p\ M"},
|
||
{"ヘ", "h e"},
|
||
{"ホ", "h o"},
|
||
{"マ", "m a"},
|
||
{"ミ", "m' i"},
|
||
{"ム", "m M"},
|
||
{"メ", "m e"},
|
||
{"モ", "m o"},
|
||
{"ヤ", "j a"},
|
||
{"ユ", "j M"},
|
||
{"ヨ", "j o"},
|
||
{"ラ", "4 a"},
|
||
{"リ", "4' i"},
|
||
{"ル", "4 M"},
|
||
{"レ", "4 e "},
|
||
{"ロ", "4 o"},
|
||
{"ワ", "w a"},
|
||
{"ヰ", "w i"},
|
||
{"ヱ", "w e"},
|
||
{"ヲ", "o"},
|
||
{"ァ", "a"},
|
||
{"ィ", "i"},
|
||
{"ゥ", "M"},
|
||
{"ェ", "e"},
|
||
{"ォ", "o"},
|
||
{"ガ", "g a"},
|
||
{"ギ", "g' i"},
|
||
{"グ", "g M"},
|
||
{"ゲ", "g e"},
|
||
{"ゴ", "g o"},
|
||
{"ザ", "dz a"},
|
||
{"ジ", "dZ i"},
|
||
{"ズ", "dz M"},
|
||
{"ゼ", "dz e"},
|
||
{"ゾ", "dz o"},
|
||
{"ダ", "d a"},
|
||
{"ヂ", "dZ i"},
|
||
{"ヅ", "dz M"},
|
||
{"デ", "d e"},
|
||
{"ド", "d o"},
|
||
{"バ", "b a"},
|
||
{"ビ", "b' i"},
|
||
{"ブ", "b M"},
|
||
{"ベ", "b e"},
|
||
{"ボ", "b o"},
|
||
{"パ", "p a"},
|
||
{"ピ", "p' i"},
|
||
{"プ", "p M"},
|
||
{"ペ", "p e"},
|
||
{"ポ", "p o"},
|
||
{"イェ", "j e"},
|
||
{"ウィ", "w i"},
|
||
{"ウェ", "w e"},
|
||
{"ウォ", "w o"},
|
||
{"キャ", "k' a"},
|
||
{"キュ", "k' M"},
|
||
{"キェ", "k' e"},
|
||
{"キョ", "k' o"},
|
||
{"シャ", "S a"},
|
||
{"シュ", "S M"},
|
||
{"シェ", "S e"},
|
||
{"ショ", "S o"},
|
||
{"チャ", "tS a"},
|
||
{"チュ", "tS M"},
|
||
{"チェ", "tS e"},
|
||
{"チョ", "tS o"},
|
||
{"ニャ", "J a"},
|
||
{"ニュ", "J M"},
|
||
{"ニェ", "J e"},
|
||
{"ニョ", "J o"},
|
||
{"ヒャ", "C a"},
|
||
{"ヒュ", "C M"},
|
||
{"ヒェ", "C e"},
|
||
{"ヒョ", "C o"},
|
||
{"フャ", @"p\' a"},
|
||
{"フィ", @"p\' i"},
|
||
{"フュ", @"p\' M"},
|
||
{"フェ", @"p\ e"},
|
||
{"ミャ", "m' a"},
|
||
{"ミュ", "m' M"},
|
||
{"ミェ", "m' e"},
|
||
{"ミョ", "m' o"},
|
||
{"リャ", "4' a"},
|
||
{"リュ", "4' M"},
|
||
{"リェ", "4' e"},
|
||
{"リョ", "4' o"},
|
||
{"ギャ", "g' a"},
|
||
{"ギュ", "g' M"},
|
||
{"ギェ", "g' e"},
|
||
{"ギョ", "g' o"},
|
||
{"ジャ", "dZ a"},
|
||
{"ジュ", "dZ M"},
|
||
{"ジェ", "dZ e"},
|
||
{"ジョ", "dZ o"},
|
||
{"ビャ", "b' a"},
|
||
{"ビュ", "b' M"},
|
||
{"ビェ", "b' e"},
|
||
{"ビョ", "b' o"},
|
||
{"ピャ", "p' a"},
|
||
{"ピュ", "p' M"},
|
||
{"ピェ", "p' e"},
|
||
{"ピョ", "p' o"},
|
||
{"ファ", @"p\ a"},
|
||
{"フォ", @"p\ o"},
|
||
{"テャ", "t' a"},
|
||
{"ティ", "t' i"},
|
||
{"テュ", "t' M"},
|
||
{"テェ", "t' e"},
|
||
{"テョ", "t' o"},
|
||
{"デャ", "d' a"},
|
||
{"ディ", "d' i"},
|
||
{"デュ", "d' M"},
|
||
{"デェ", "d' e"},
|
||
{"デョ", "d' o"},
|
||
{"スィ", "s i"},
|
||
{"ズィ", "dz i"},
|
||
{"トゥ", "t M"},
|
||
{"ドゥ", "d M"},
|
||
{"ャ", "j a"},
|
||
{"ュ", "j M"},
|
||
{"ョ", "j o"},
|
||
{"ン", "n"},
|
||
{"ヴ", "b M"},
|
||
{"a", "a"},
|
||
{"e", "e"},
|
||
{"i", "i"},
|
||
{"m", "n"},
|
||
{"n", "n"},
|
||
{"o", "o"},
|
||
{"u", "M"},
|
||
{"A", "a"},
|
||
{"E", "e"},
|
||
{"I", "i"},
|
||
{"M", "n"},
|
||
{"N", "n"},
|
||
{"O", "o"},
|
||
{"U", "M"},
|
||
{"ka", "k a"},
|
||
{"ki", "k' i"},
|
||
{"ku", "k M"},
|
||
{"ke", "k e"},
|
||
{"ko", "k o"},
|
||
{"kya", "k' a"},
|
||
{"kyu", "k' M"},
|
||
{"kyo", "k' o"},
|
||
{"sa", "s a"},
|
||
{"si", "s i"},
|
||
{"su", "s M"},
|
||
{"se", "s e"},
|
||
{"so", "s o"},
|
||
{"ta", "t a"},
|
||
{"ti", "t' i"},
|
||
{"tu", "t M"},
|
||
{"te", "t e"},
|
||
{"to", "t o"},
|
||
{"tya", "t' a"},
|
||
{"tyu", "t' M"},
|
||
{"tyo", "t' o"},
|
||
{"na", "n a"},
|
||
{"ni", "J i"},
|
||
{"nu", "n M"},
|
||
{"ne", "n e"},
|
||
{"no", "n o"},
|
||
{"nya", "J a"},
|
||
{"nyu", "J M"},
|
||
{"nyo", "J o"},
|
||
{"ha", "h a"},
|
||
{"hi", "C i"},
|
||
{"he", "h e"},
|
||
{"ho", "h o"},
|
||
{"hya", "C a"},
|
||
{"hyu", "C M"},
|
||
{"hyo", "C o"},
|
||
{"ma", "m a"},
|
||
{"mi", "m' i"},
|
||
{"mu", "m M"},
|
||
{"me", "m e"},
|
||
{"mo", "m o"},
|
||
{"mya", "m' a"},
|
||
{"myu", "m' M"},
|
||
{"myo", "m' o"},
|
||
{"ya", "j a"},
|
||
{"yu", "j M"},
|
||
{"ye", "j e"},
|
||
{"yo", "j o"},
|
||
{"ra", "4 a"},
|
||
{"ri", "4' i"},
|
||
{"ru", "4 M"},
|
||
{"re", "4 e"},
|
||
{"ro", "4 o"},
|
||
{"rya", "4' a"},
|
||
{"ryu", "4' M"},
|
||
{"ryo", "4' o"},
|
||
{"wa", "w a"},
|
||
{"wi", "w i"},
|
||
{"we", "w e"},
|
||
{"wo", "w o"},
|
||
{"ga", "g a"},
|
||
{"gi", "g' i"},
|
||
{"gu", "g M"},
|
||
{"ge", "g e"},
|
||
{"go", "g o"},
|
||
{"gya", "g' a"},
|
||
{"gyu", "g' M"},
|
||
{"gyo", "g' o"},
|
||
{"za", "dz a"},
|
||
{"zi", "dz i"},
|
||
{"zu", "dz M"},
|
||
{"ze", "dz e"},
|
||
{"zo", "dz o"},
|
||
{"da", "d a"},
|
||
{"di", "d' i"},
|
||
{"du", "d M"},
|
||
{"de", "d e"},
|
||
{"do", "d o"},
|
||
{"dya", "d' a"},
|
||
{"dyu", "d' M"},
|
||
{"dyo", "d' o"},
|
||
{"ba", "b a"},
|
||
{"bi", "b' i"},
|
||
{"bu", "b M"},
|
||
{"be", "b e"},
|
||
{"bo", "b o"},
|
||
{"bya", "b' a"},
|
||
{"byu", "b' M"},
|
||
{"byo", "b' o"},
|
||
{"pa", "p a"},
|
||
{"pi", "p' i"},
|
||
{"pu", "p M"},
|
||
{"pe", "p e"},
|
||
{"po", "p o"},
|
||
{"pya", "p' a"},
|
||
{"pyu", "p' M"},
|
||
{"pyo", "p' o"},
|
||
{"sha", "S a"},
|
||
{"shi", "S i"},
|
||
{"shu", "S M"},
|
||
{"sho", "S o"},
|
||
{"tsu", "ts M"},
|
||
{"cha", "tS a"},
|
||
{"chi", "tS i"},
|
||
{"chu", "tS M"},
|
||
{"cho", "tS o"},
|
||
{"fu", @"p\ M"},
|
||
{"ja", "dZ a"},
|
||
{"ji", "dZ i"},
|
||
{"ju", "dZ M"},
|
||
{"jo", "dZ o"},
|
||
};
|
||
#endregion
|
||
|
||
#region Static Method and Property
|
||
public static SymbolTable getSymbolTable( int index ) {
|
||
if ( !s_initialized ) {
|
||
loadDictionary();
|
||
}
|
||
if ( 0 <= index && index < s_table.Count ) {
|
||
return s_table[index];
|
||
} else {
|
||
return null;
|
||
}
|
||
}
|
||
|
||
public static void loadDictionary() {
|
||
#if DEBUG
|
||
Console.WriteLine( "SymbolTable.LoadDictionary()" );
|
||
#endif
|
||
s_default_jp = new SymbolTable( "DEFAULT_JP", _KEY_JP, true );
|
||
s_table.Clear();
|
||
s_table.Add( 0, s_default_jp );
|
||
int count = 0;
|
||
|
||
// 辞書フォルダからの読込み
|
||
string editor_path = VocaloSysUtil.getEditorPath2();
|
||
if ( editor_path.Length > 0 ) {
|
||
string path = Path.Combine( Path.GetDirectoryName( editor_path ), "UDIC" );
|
||
if ( !Directory.Exists( path ) ) {
|
||
return;
|
||
}
|
||
string[] files = Directory.GetFiles( path, "*.udc" );
|
||
for ( int i = 0; i < files.Length; i++ ) {
|
||
files[i] = Path.GetFileName( files[i] );
|
||
#if DEBUG
|
||
Console.WriteLine( " files[i]=" + files[i] );
|
||
#endif
|
||
count++;
|
||
string dict = Path.Combine( path, files[i] );
|
||
s_table.Add( count, new SymbolTable( dict, true, false ) );
|
||
}
|
||
}
|
||
|
||
// 起動ディレクトリ
|
||
string path2 = Path.Combine( Application.StartupPath, "udic" );
|
||
if ( Directory.Exists( path2 ) ) {
|
||
string[] files2 = Directory.GetFiles( path2, "*.eudc" );
|
||
for ( int i = 0; i < files2.Length; i++ ) {
|
||
files2[i] = Path.GetFileName( files2[i] );
|
||
#if DEBUG
|
||
Console.WriteLine( " files2[i]=" + files2[i] );
|
||
#endif
|
||
count++;
|
||
string dict = Path.Combine( path2, files2[i] );
|
||
s_table.Add( count, new SymbolTable( dict, false, false ) );
|
||
}
|
||
}
|
||
s_initialized = true;
|
||
}
|
||
|
||
|
||
public static bool attatch( string phrase, out string result ) {
|
||
#if DEBUG
|
||
Console.WriteLine( "SymbolTable.Attatch" );
|
||
Console.WriteLine( " phrase=" + phrase );
|
||
#endif
|
||
for ( int i = 0; i < s_table.Keys.Count; i++ ) {
|
||
int key = s_table.Keys[i];
|
||
if ( s_table[key].isEnabled() ) {
|
||
if ( s_table[key].attatchImp( phrase, out result ) ) {
|
||
return true;
|
||
}
|
||
}
|
||
}
|
||
result = "a";
|
||
return false;
|
||
}
|
||
|
||
public static int getCount() {
|
||
if ( !s_initialized ) {
|
||
loadDictionary();
|
||
}
|
||
return s_table.Count;
|
||
}
|
||
|
||
public static void changeOrder( KeyValuePair<string, bool>[] list ) {
|
||
#if DEBUG
|
||
Console.WriteLine( "SymbolTable.Sort()" );
|
||
#endif
|
||
SortedList<int, SymbolTable> buff = new SortedList<int, SymbolTable>();
|
||
foreach ( int key in s_table.Keys ) {
|
||
buff.Add( key, (SymbolTable)s_table[key].Clone() );
|
||
}
|
||
s_table.Clear();
|
||
for ( int i = 0; i < list.Length; i++ ) {
|
||
#if DEBUG
|
||
Console.WriteLine( " list[i]=" + list[i].Key + "," + list[i].Value );
|
||
#endif
|
||
for ( int j = 0; j < buff.Keys.Count; j++ ) {
|
||
int key = buff.Keys[j];
|
||
if ( buff[key].getName() == list[i].Key ) {
|
||
buff[key].setEnabled( list[i].Value );
|
||
s_table.Add( i, buff[key] );
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
public object Clone() {
|
||
SymbolTable ret = new SymbolTable();
|
||
ret.m_dict = new Dictionary<string, string>();
|
||
foreach ( string key in m_dict.Keys ) {
|
||
ret.m_dict.Add( key, m_dict[key] );
|
||
}
|
||
ret.m_name = m_name;
|
||
ret.m_enabled = m_enabled;
|
||
return ret;
|
||
}
|
||
|
||
private SymbolTable() {
|
||
}
|
||
|
||
public string getName() {
|
||
return m_name;
|
||
}
|
||
|
||
public bool isEnabled() {
|
||
return m_enabled;
|
||
}
|
||
|
||
public void setEnabled( bool value ){
|
||
m_enabled = value;
|
||
}
|
||
|
||
public SymbolTable( string path, bool is_udc_mode, bool enabled ) {
|
||
m_dict = new Dictionary<string, string>();
|
||
m_enabled = enabled;
|
||
if ( !File.Exists( path ) ) {
|
||
return;
|
||
}
|
||
m_name = Path.GetFileName( path );
|
||
cp932reader sr1 = null;
|
||
StreamReader sr2 = null;
|
||
try {
|
||
if ( is_udc_mode ) {
|
||
sr1 = new cp932reader( path );
|
||
if ( sr1 == null ) {
|
||
return;
|
||
}
|
||
} else {
|
||
sr2 = new StreamReader( path, Encoding.UTF8 );
|
||
if ( sr2 == null ) {
|
||
return;
|
||
}
|
||
}
|
||
string line;
|
||
int peek = (is_udc_mode) ? sr1.Peek() : sr2.Peek();
|
||
while ( peek >= 0 ) {
|
||
line = (is_udc_mode) ? sr1.ReadLine() : sr2.ReadLine();
|
||
if ( !line.StartsWith( "//" ) ) {
|
||
string[] spl = line.Split( "\t".ToCharArray(), 2, StringSplitOptions.RemoveEmptyEntries );
|
||
if ( spl.Length >= 2 ) {
|
||
if ( m_dict.ContainsKey( spl[0] ) ) {
|
||
bocoree.debug.push_log( "SymbolTable..ctor" );
|
||
bocoree.debug.push_log( " dictionary already contains key: " + spl[0] );
|
||
} else {
|
||
m_dict.Add( spl[0], spl[1] );
|
||
}
|
||
}
|
||
}
|
||
peek = (is_udc_mode) ? sr1.Peek() : sr2.Peek();
|
||
}
|
||
} catch ( Exception ex ) {
|
||
bocoree.debug.push_log( "SymbolTable..ctor" );
|
||
bocoree.debug.push_log( " " + ex );
|
||
} finally {
|
||
if ( sr1 != null ) {
|
||
sr1.Close();
|
||
}
|
||
if ( sr2 != null ) {
|
||
sr2.Close();
|
||
}
|
||
}
|
||
}
|
||
|
||
private bool attatchImp( string phrase, out string result ) {
|
||
string s = phrase.ToLower();
|
||
if ( m_dict.ContainsKey( s ) ) {
|
||
result = m_dict[s];
|
||
return true;
|
||
} else {
|
||
result = "a";
|
||
return false;
|
||
}
|
||
}
|
||
|
||
private SymbolTable( string name, string[,] key, bool enabled ) {
|
||
#if DEBUG
|
||
Console.WriteLine( "SymolTable.ctor(string,string[,])" );
|
||
Console.WriteLine( " key.GetLength(0)=" + key.GetLength( 0 ) );
|
||
#endif
|
||
m_enabled = enabled;
|
||
m_name = name;
|
||
m_dict = new Dictionary<string, string>();
|
||
for ( int i = 0; i < key.GetLength( 0 ); i++ ) {
|
||
if ( m_dict.ContainsKey( key[i, 0] ) ) {
|
||
#if DEBUG
|
||
throw new ApplicationException( "dictionary already contains key: " + key[i, 0] );
|
||
#endif
|
||
} else {
|
||
m_dict.Add( key[i, 0], key[i, 1] );
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|