Example #1
0
        /// <summary>
        /// 把編號的數字修正成上位點。
        /// 注意:此函式會把點字串列中的 # 點字物件刪除。
        /// </summary>
        /// <param name="brLine"></param>
        public static void FixNumbers(BrailleLine brLine, EnglishBrailleTable brTable)
        {
            BrailleWord brWord;
            bool        isNumberMode = false;
            string      brCode;

            int index = 0;

            while (index < brLine.WordCount)
            {
                brWord = brLine[index];
                if (brWord.Text == "#")
                {
                    isNumberMode = true;
                    brLine.Words.RemoveAt(index);
                    continue;
                }
                if (Char.IsDigit(brWord.Text[0]))
                {
                    if (isNumberMode)
                    {
                        // 把編號的數字改成上位點。
                        brCode = brTable.FindDigit(brWord.Text, true);
                        if (brWord.Cells.Count > 1)                             // 第 0 個 cell 可能是數字記號。
                        {
                            brWord.Cells[1] = BrailleCell.GetInstance(brCode);
                        }
                        else
                        {
                            brWord.Cells[0] = BrailleCell.GetInstance(brCode);
                        }
                    }
                }
                else
                {
                    if (isNumberMode && brWord.Text != "." && brWord.Text != "-" && brWord.Text != ",")
                    {
                        isNumberMode = false;
                    }
                }
                index++;
            }
        }
Example #2
0
        /// <summary>
        /// 把英數字轉換成點字。
        /// </summary>
        /// <param name="text">一個英數字或英文標點符號。</param>
        /// <returns>若指定的字串是中文字且轉換成功,則傳回轉換之後的點字物件,否則傳回 null。</returns>
        private BrailleWord InternalConvert(string text)
        {
            if (String.IsNullOrEmpty(text))
            {
                return(null);
            }

            BrailleWord brWord = new BrailleWord();

            brWord.Text = text;

            string brCode = null;

            // 如果是刪節號
            if (text == "...")
            {
                brCode = m_Table.Find(text);
                brWord.AddCell(brCode);
                return(brWord);
            }

            // 處理英文字母和數字。
            if (text.Length == 1)
            {
                char ch = text[0];
                if (CharHelper.IsAsciiLetter(ch))
                {
                    brCode = m_Table.FindLetter(text);
                    if (!String.IsNullOrEmpty(brCode))
                    {
                        brWord.AddCell(brCode);
                        return(brWord);
                        // 註:大寫記號和連續大寫記號在完成一行之後才處理。
                    }
                    throw new Exception("找不到對應的點字: " + text);
                }
                if (CharHelper.IsAsciiDigit(ch))
                {
                    brCode = m_Table.FindDigit(text, false);                            // 一般數字取下位點。
                    if (!String.IsNullOrEmpty(brCode))
                    {
                        brWord.AddCell(brCode);
                        return(brWord);
                    }
                    throw new Exception("找不到對應的點字: " + text);
                }
            }

            // 處理編號。
            if (text == "#")
            {
                // # 沒有對應的點字碼,只是用它來代表編號數字的開始,
                // 以便後續處理編號用(將編號數字轉成上位點)。
                return(brWord);
            }

            brCode = m_Table.Find(text);
            if (!String.IsNullOrEmpty(brCode))
            {
                brWord.AddCell(brCode);
                return(brWord);
            }

            brWord = null;
            return(null);
        }