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; }
public void ResetSharedInfo(ContextTag key, object obj) { ResetSharedInfo(key.ToString(), obj); }
public void RemoveSharedInfo(ContextTag key) { RemoveSharedInfo(key.ToString()); }
public T GetSharedInfo <T>(ContextTag key) { return(GetSharedInfo <T>(key.ToString())); }
/// <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); }