| File: Recognition\SrgsGrammar\SrgsOneOf.cs | Web Access |
| Project: src\runtime\src\libraries\System.Speech\src\System.Speech.csproj (System.Speech) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Collections.ObjectModel; using System.Diagnostics; using System.Speech.Internal; using System.Speech.Internal.SrgsParser; using System.Text; using System.Xml; namespace System.Speech.Recognition.SrgsGrammar { [Serializable] [DebuggerDisplay("{DebuggerDisplayString ()}")] [DebuggerTypeProxy(typeof(OneOfDebugDisplay))] public class SrgsOneOf : SrgsElement, IOneOf { #region Constructors public SrgsOneOf() { } public SrgsOneOf(params string[] items) : this() { ArgumentNullException.ThrowIfNull(items); for (int i = 0; i < items.Length; i++) { if (items[i] == null) { throw new ArgumentNullException(nameof(items), SR.Get(SRID.ParamsEntryNullIllegal)); } _items.Add(new SrgsItem(items[i])); } } public SrgsOneOf(params SrgsItem[] items) : this() { ArgumentNullException.ThrowIfNull(items); for (int i = 0; i < items.Length; i++) { SrgsItem item = items[i]; if (item == null) { throw new ArgumentNullException(nameof(items), SR.Get(SRID.ParamsEntryNullIllegal)); } _items.Add(item); } } #endregion #region public Method public void Add(SrgsItem item) { ArgumentNullException.ThrowIfNull(item); Items.Add(item); } #endregion #region public Properties // ISSUE: Do we need more constructors? Take a look at RuleElementCollection.AddOneOf methods. [Bug# 37115] public Collection<SrgsItem> Items { get { return _items; } } #endregion #region internal Methods internal override void WriteSrgs(XmlWriter writer) { // Write <one-of>...</one-of> writer.WriteStartElement("one-of"); foreach (SrgsItem element in _items) { element.WriteSrgs(writer); } writer.WriteEndElement(); } internal override string DebuggerDisplayString() { StringBuilder sb = new("SrgsOneOf Count = "); sb.Append(_items.Count); return sb.ToString(); } #endregion #region Protected Properties /// <summary> /// Allows the Srgs Element base class to implement /// features requiring recursion in the elements tree. /// </summary> internal override SrgsElement[] Children { get { SrgsElement[] elements = new SrgsElement[_items.Count]; int i = 0; foreach (SrgsItem item in _items) { elements[i++] = item; } return elements; } } #endregion #region Private Fields private SrgsItemList _items = new(); #endregion #region Private Types // Used by the debugger display attribute internal class OneOfDebugDisplay { public OneOfDebugDisplay(SrgsOneOf oneOf) { _items = oneOf._items; } [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)] public SrgsItem[] AKeys { get { SrgsItem[] items = new SrgsItem[_items.Count]; for (int i = 0; i < _items.Count; i++) { items[i] = _items[i]; } return items; } } private Collection<SrgsItem> _items; } #endregion } }