Exemplo n.º 1
0
        public void RemoveConverter(WordConverter cvt)
        {
            // 移除已知的轉換器。

            if (cvt is ContextTagConverter)
            {
                m_ContextTagConverter = null;
                return;
            }
            if (cvt is ChineseWordConverter)
            {
                m_ChineseConverter = null;
                return;
            }
            if (cvt is EnglishWordConverter)
            {
                m_EnglishConverter = null;
                return;
            }
            if (cvt is MathConverter)
            {
                m_MathConverter = null;
                return;
            }
            if (cvt is PhoneticConverter)               // 音標轉換器.
            {
                m_PhoneticConverter = null;
                return;
            }

            m_Converters.Remove(cvt);
        }
Exemplo n.º 2
0
        private BrailleProcessor(ZhuyinReverseConverter zhuyinConverter)
        {
            m_Converters = new List <WordConverter>();

            m_ContextTagConverter = new ContextTagConverter();
            m_ChineseConverter    = new ChineseWordConverter(zhuyinConverter);
            m_EnglishConverter    = new EnglishWordConverter();
            m_MathConverter       = new MathConverter();
            m_CoordConverter      = new CoordinateConverter();
            m_TableConverter      = new TableConverter();
            m_PhoneticConverter   = new PhoneticConverter();

            m_Tags = new Hashtable();
            m_Tags.Add(TextTag.Name, "╴╴");             // key/value = 標籤/替換字元
            m_Tags.Add(TextTag.BookName, "﹏﹏");
            m_Tags.Add(TextTag.NumericItem, "#");
            m_Tags.Add(TextTag.OrgPageNumber, s_DashesForOrgPageNumber); // 原書頁碼
            m_Tags.Add(TextTag.Unit1End, new string('ˍ', 20));           // 大單元結束
            m_Tags.Add(TextTag.Unit2End, new string('﹍', 20));           // 小單元結束
            m_Tags.Add(TextTag.Unit3End, new string('﹋', 20));           // 小題結束
            m_Tags.Add(TextTag.BrailleComment, "★");                     // 點譯者註

            m_ContextTagManager = new ContextTagManager();

            m_InvalidChars   = new List <CharPosition>();
            m_ErrorMsg       = new StringBuilder();
            m_SuppressEvents = false;
        }
Exemplo n.º 3
0
        private void MainForm_Load(object sender, EventArgs e)
        {
            // 只需設定一次,且必須最早進行的初始化動作:建立點字轉換器物件,並指定點字對應表物件。
            string filePath = StrHelper.AppendSlash(Application.StartupPath);

            ChineseWordConverter chtCvt = new ChineseWordConverter(filePath + "ChineseBrailleTable.xml");
            EnglishWordConverter engCvt = new EnglishWordConverter(filePath + "EnglishBrailleTable.xml");

            m_Processer = new BrailleProcessor();
            m_Processer.AddWordConverter(chtCvt);
            m_Processer.AddWordConverter(engCvt);
        }
Exemplo n.º 4
0
        public EditCellForm()
        {
            InitializeComponent();

            Mode = EditCellMode.Edit;

            m_BrWord = new BrailleWord();

            // 以下動作不可移到 Form_Load 做,因為某些用到以下變數的事件會比它更早觸發。
            m_BrProcessor = BrailleProcessor.GetInstance();

            m_ChtWordCvt = m_BrProcessor.ChineseConverter;
            Debug.Assert(m_ChtWordCvt != null);
        }
Exemplo n.º 5
0
        public void AddConverter(WordConverter cvt)
        {
            // 設定已知的轉換器。

            if (cvt is ContextTagConverter)
            {
                m_ContextTagConverter = (ContextTagConverter)cvt;
                return;
            }
            if (cvt is ChineseWordConverter)
            {
                m_ChineseConverter = (ChineseWordConverter)cvt;
                return;
            }
            if (cvt is EnglishWordConverter)
            {
                m_EnglishConverter = (EnglishWordConverter)cvt;
                return;
            }
            if (cvt is MathConverter)   // 數學符號轉換器.
            {
                m_MathConverter = (MathConverter)cvt;
                return;
            }
            if (cvt is PhoneticConverter)               // 音標轉換器.
            {
                m_PhoneticConverter = (PhoneticConverter)cvt;
                return;
            }

            // 加入其他未知的轉換器。
            if (m_Converters.IndexOf(cvt) < 0)
            {
                m_Converters.Add(cvt);
            }
        }
        public void ConvertTest()
        {
            string msg = "ChineseWordConverter.Convert 測試失敗: ";

            var target = new ChineseWordConverter(
                new ZhuyinReverseConverter(new ZhuyinReverseConversionProvider()));

            ContextTagManager context = new ContextTagManager();

            // 測試結合韻。
            string             text      = "我";
            Stack <char>       charStack = new Stack <char>(text);
            List <BrailleWord> expected  = new List <BrailleWord>();
            BrailleWord        brWord    = new BrailleWord(text, " ㄨㄛˇ", "1208");

            expected.Add(brWord);
            List <BrailleWord> actual = target.Convert(charStack, context);

            CollectionAssert.AreEqual(expected, actual, msg + text);
            charStack.Clear();

            // 測試單音字:要在音調記號前加一個空方。
            text      = "智";
            charStack = new Stack <char>(text);
            brWord    = new BrailleWord(text, "ㄓ  ˋ", "013110");
            expected.Clear();
            expected.Add(brWord);
            actual = target.Convert(charStack, context);
            CollectionAssert.AreEqual(expected, actual, msg + text);
            charStack.Clear();

            // 測試無特殊規則的注音。
            text      = "你";
            charStack = new Stack <char>(text);
            brWord    = new BrailleWord(text, "ㄋㄧ ˇ", "1D2108");
            expected.Clear();
            expected.Add(brWord);
            actual = target.Convert(charStack, context);
            CollectionAssert.AreEqual(expected, actual, msg + text);
            charStack.Clear();

            // 測試標點符號。
            text      = ":";
            charStack = new Stack <char>(text);
            brWord    = new BrailleWord(text, "   ˉ", "1212");
            expected.Clear();
            expected.Add(brWord);
            actual = target.Convert(charStack, context);
            CollectionAssert.AreEqual(expected, actual, msg + text);
            charStack.Clear();

            // 測試全形空白
            text      = " ";
            charStack = new Stack <char>(text);
            brWord    = new BrailleWord(text, "   ˉ", "00");
            expected.Clear();
            expected.Add(brWord);
            actual = target.Convert(charStack, context);
            CollectionAssert.AreEqual(expected, actual, msg + text);
            charStack.Clear();

            // 測試簡體字。
            text      = "实";
            charStack = new Stack <char>(text);
            brWord    = new BrailleWord(text, "ㄕ  ˊ", "0A3102");
            expected.Clear();
            expected.Add(brWord);
            actual = target.Convert(charStack, context);
            CollectionAssert.AreEqual(expected, actual, msg + text);
            charStack.Clear();

            // 測試無法轉換的字元:/
            text      = "/";
            charStack = new Stack <char>(text);
            expected  = null;
            actual    = target.Convert(charStack, context);
            CollectionAssert.AreEqual(expected, actual, msg + text);
            charStack.Clear();
        }