Пример #1
0
 public TagBuilder CreateContextTag(string name, string display, string description)
 {
     _currentContext = new ContextTag()
     {
         Id = ++_id, Name = name, Description = description
     };
     _dbContext.Tags.AddOrUpdate(_currentContext);
     return(this);
 }
        public override List<BrailleWord> Convert(Stack<char> charStack, ContextTagManager context)
        {
            if (charStack.Count < 1)
                throw new ArgumentException("傳入空的字元堆疊!");

            char ch = charStack.Peek();

            if (ch != '<')
                return null;

            List<BrailleWord> brWordList = null; 

            char[] charBuf = charStack.ToArray();
            string s = new string(charBuf);
            bool isBeginTag;

			// 剖析字串是否為情境標籤,是則"進入"該情境標籤。
            ContextTag ctag = context.Parse(s, out isBeginTag);	

            if (ctag != null)
            {
                string tagName = ctag.TagName;
                if (isBeginTag == false)
                {
                    tagName = ctag.EndTagName;
                }

                // 轉換成控制字
                brWordList = new List<BrailleWord>();
                brWordList.Add(BrailleWord.CreateAsContextTag(tagName));

                // 將此標籤從堆疊中移除。
                for (int i = 0; i < tagName.Length; i++)
                {
                    charStack.Pop();
                }
            }
            return brWordList;
        }
Пример #3
0
 public void ResetSharedInfo(ContextTag key, object obj)
 {
     ResetSharedInfo(key.ToString(), obj);
 }
Пример #4
0
 public void RemoveSharedInfo(ContextTag key)
 {
     RemoveSharedInfo(key.ToString());
 }
Пример #5
0
 public T GetSharedInfo <T>(ContextTag key)
 {
     return(GetSharedInfo <T>(key.ToString()));
 }
Пример #6
0
        /// <summary>
        /// 從堆疊中讀取字元,把 ASCII 字元(半形的英數字)轉換成點字。
        /// </summary>
        /// <param name="charStack">輸入的 ASCII 字元堆疊。</param>
        /// <param name="context">情境物件。</param>
        /// <returns>傳回轉換後的點字物件串列,若串列為空串列,表示沒有成功轉換的字元。</returns>
        public override List <BrailleWord> Convert(Stack <char> charStack, ContextTagManager context)
        {
            if (charStack.Count < 1)
            {
                throw new ArgumentException("傳入空的字元堆疊!");
            }

            bool               done = false;
            char               ch;
            string             text;
            bool               isExtracted;     // 目前處理的字元是否已從堆疊中移出。
            BrailleWord        brWord;
            List <BrailleWord> brWordList = null;

            while (!done && charStack.Count > 0)
            {
                ch          = charStack.Peek(); // 只讀取但不從堆疊移走。
                isExtracted = false;

                // 如果在數學區塊中
                if (context.IsActive(ContextTagNames.Math))
                {
                    if (ch == '*' || ch == '.' || ch == ':')
                    {
                        break;                          // 以上符號須交給 MathConverter 處理。
                    }
                }

                // 如果在座標區塊中,'('、',' 和 ')' 必須交給 CoordinateConverter 處理。
                if (context.IsActive(ContextTagNames.Coordinate))
                {
                    if (ch == '(' || ch == ',' || ch == ')')
                    {
                        break;
                    }
                }

                // 如果是半形小於符號,先檢查是否為情境標籤。
                if (ch == '<')
                {
                    char[] charBuf = charStack.ToArray();
                    string s       = new string(charBuf);
                    if (ContextTag.StartsWithContextTag(s))
                    {
                        break;  // 情境標籤必須交給 ContextTagConverter 處理。
                    }
                }

                text = ch.ToString();

                // 處理特殊字元。
                isExtracted = ProcessSpecialEntity(charStack, ref text);

                if (!isExtracted)
                {
                    // 處理刪節號。
                    if (ch == '.' && charStack.Count >= 3)
                    {
                        charStack.Pop();
                        char ch2 = charStack.Pop();
                        char ch3 = charStack.Pop();
                        if (ch2 == '.' && ch3 == '.')   // 連續三個點: 刪節號
                        {
                            isExtracted = true;
                            text        = "...";
                        }
                        else
                        {
                            charStack.Push(ch3);
                            charStack.Push(ch2);
                            charStack.Push(ch);
                            isExtracted = false;
                        }
                    }
                    // Tab 字元視為一個空白。
                    if (ch == '\t')
                    {
                        text = " ";
                    }
                }

                brWord = InternalConvert(text);
                if (brWord == null)
                {
                    break;
                }

                if (!isExtracted)
                {
                    charStack.Pop();
                }

                brWord.Language = BrailleLanguage.English;

                if (context.IsActive(ContextTagNames.Coordinate))   // 若處於座標情境標籤內
                {
                    // 不加數字點位。
                    brWord.NoDigitCell = true;
                }
                else if (":".Equals(text) && context.IsActive(ContextTagNames.Time))                    // 處理時間的冒號。
                {
                    // 在冒號的點字前面加上 456 點。
                    BrailleCell cell = BrailleCell.GetInstance(new int[] { 4, 5, 6 });
                    brWord.Cells.Insert(0, cell);
                }

                if (brWordList == null)
                {
                    brWordList = new List <BrailleWord>();
                }
                brWordList.Add(brWord);
            }
            return(brWordList);
        }