/// <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); }