Пример #1
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);
        }