/// <summary>
        /// Preforms the post-parse procedure of the options.
        /// </summary>
        /// <param name="options">The raw options string to parse.</param>
        private void ParseOptions(string options)
        {
            if (options == null)
            {
                return;
            }
            var splittedOptions = options.Split(',');

            Options            = new ExpressionOptions();
            Options.AsKeyValue = new Dictionary <string, string>(splittedOptions.Length);
            foreach (var option in splittedOptions)
            {
                var keyValue = option.Split('=');
                Options.AsKeyValue.Add(keyValue[0].Trim(), keyValue.Length > 1? keyValue[1].Trim() : null);
            }
            Options.AsExpressions = new List <LatexExpression>();
            string          beginning = options;
            string          end;
            LatexExpression expr;
            int             index            = 0;
            bool            verbatimMode     = false;
            bool            whitespaceBefore = false;

            while ((expr = ReadFromTextReader(this, 0, ref index, ref verbatimMode,
                                              MathMode | ExprType == ExpressionType.InlineMath | ExprType == ExpressionType.BlockMath,
                                              Customization, beginning, null, out end, ref whitespaceBefore)) != null)
            {
                beginning = end;
                Options.AsExpressions.Add(expr);
            }
        }
 /// <summary>
 /// Initializes a new instance of the ExpressionOptions class.
 /// </summary>
 /// <param name="options">The options to copy from.</param>
 public ExpressionOptions(ExpressionOptions options)
 {
     if (options != null)
     {
         if (options.AsKeyValue != null)
         {
             AsKeyValue = new Dictionary <string, string>(options.AsKeyValue);
         }
         if (options.AsExpressions != null)
         {
             AsExpressions = new List <LatexExpression>(options.AsExpressions);
         }
     }
 }
 /// <summary>
 /// Initializes a new instance of the ExpressionOptions class.
 /// </summary>
 /// <param name="options">The options to copy from.</param>
 public ExpressionOptions(ExpressionOptions options)
 {
     if (options != null)
     {
         if (options.AsKeyValue != null)
         {
             AsKeyValue = new Dictionary<string, string>(options.AsKeyValue);
         }
         if (options.AsExpressions != null)
         {
             AsExpressions = new List<LatexExpression>(options.AsExpressions);
         }
     }
 }
 /// <summary>
 /// Initializes a new instance of the LatexExpression class and copies the specified expression data to it.
 /// </summary>
 /// <param name="expression">The expression to clone.</param>
 public LatexExpression(LatexExpression expression)
 {
     Parent        = expression.Parent;
     Name          = expression.Name;
     ExprType      = expression.ExprType;
     MathMode      = expression.MathMode;
     Customization = expression.Customization;
     if (expression.Options != null)
     {
         Options = new ExpressionOptions();
     }
     if (expression.Expressions != null)
     {
         Expressions = new List <List <LatexExpression> >(expression.Expressions);
     }
 }
 /// <summary>
 /// Preforms the post-parse procedure of the options.
 /// </summary>
 /// <param name="options">The raw options string to parse.</param>
 private void ParseOptions(string options)
 {
     if (options == null) { return; }
     var splittedOptions = options.Split(',');
     Options = new ExpressionOptions();
     Options.AsKeyValue = new Dictionary<string,string>(splittedOptions.Length);
     foreach (var option in splittedOptions)
     {
         var keyValue = option.Split('=');
         Options.AsKeyValue.Add(keyValue[0].Trim(), keyValue.Length > 1? keyValue[1].Trim() : null);
     }
     Options.AsExpressions = new List<LatexExpression>();
     string beginning = options;
     string end;
     LatexExpression expr;
     int index = 0;
     bool verbatimMode = false;
     bool whitespaceBefore = false;
     while ((expr = ReadFromTextReader(this, 0, ref index, ref verbatimMode,
         MathMode | ExprType == ExpressionType.InlineMath | ExprType == ExpressionType.BlockMath,
         Customization, beginning, null, out end, ref whitespaceBefore)) != null)
     {
         beginning = end;
         Options.AsExpressions.Add(expr);
     }
 }
 /// <summary>
 /// Initializes a new instance of the LatexExpression class and copies the specified expression data to it.
 /// </summary>
 /// <param name="expression">The expression to clone.</param>
 public LatexExpression(LatexExpression expression)
 {
     Parent = expression.Parent;
     Name = expression.Name;
     ExprType = expression.ExprType;
     MathMode = expression.MathMode;
     Customization = expression.Customization;
     if (expression.Options != null)
     {
         Options = new ExpressionOptions();
     }
     if (expression.Expressions != null)
     {
         Expressions = new List<List<LatexExpression>>(expression.Expressions);
     }
 }