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;
        }
        public void ConvertTest()
        {
            string msg = "EnglishWordConverter.Convert 測試失敗: ";

            EnglishWordConverter target = new EnglishWordConverter();

            ContextTagManager context = new ContextTagManager();

            // 測試刪節號。
            string             text      = "...";
            Stack <char>       charStack = new Stack <char>(text);
            List <BrailleWord> expected  = new List <BrailleWord>();
            BrailleWord        brWord    = new BrailleWord(text, "040404");

            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, "2026");
            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, "26");
            expected.Clear();
            expected.Add(brWord);
            actual = target.Convert(charStack, context);
            CollectionAssert.AreEqual(expected, actual, msg + text);
            charStack.Clear();

            // 測試大寫字母(不用加大寫記號,因為延後到整行調整時才處理)。
            text      = "A";
            charStack = new Stack <char>(text);
            brWord    = new BrailleWord(text, "01");
            expected.Clear();
            expected.Add(brWord);
            actual = target.Convert(charStack, context);
            CollectionAssert.AreEqual(expected, actual, msg + text);
            charStack.Clear();

            // 測試數字
            text      = "6";
            charStack = new Stack <char>(text);
            brWord    = new BrailleWord(text, "16");    // 下位點。
            expected.Clear();
            expected.Add(brWord);
            actual = target.Convert(charStack, context);
            CollectionAssert.AreEqual(expected, actual, msg + text);
            charStack.Clear();
        }
Exemplo n.º 4
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.º 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);
            }
        }