Beispiel #1
0
        public override void Format(FormattingInfo formattingInfo)
        {
            foreach (var item in formattingInfo.Format.Items)
            {
                if (item is LiteralText literalItem)
                {
                    m_Characters = m_Characters.Concat(item.ToEnumerable());
                    continue;
                }

                // Otherwise, the item must be a placeholder.
                var placeholder         = (Placeholder)item;
                var childFormattingInfo = formattingInfo.CreateChild(placeholder);

                var formatterName = childFormattingInfo.Placeholder.FormatterName;

                // Evaluate the named formatter (or, evaluate all "" formatters)
                foreach (var formatterExtension in FormatterExtensions)
                {
                    if (formatterExtension is IFormatterLiteralExtractor literalExtractor &&
                        formatterExtension.Names.Contains(formatterName))
                    {
                        literalExtractor.WriteAllLiterals(childFormattingInfo);
                    }
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// Format the <see cref="FormattingInfo" /> argument.
        /// </summary>
        /// <param name="formattingInfo"></param>
        public void Format(FormattingInfo formattingInfo)
        {
            // Before we start, make sure we have at least one source extension and one formatter extension:
            CheckForExtensions();
            if (formattingInfo.Format is null)
            {
                return;
            }

            foreach (var item in formattingInfo.Format.Items)
            {
                if (item is LiteralText literalItem)
                {
                    formattingInfo.Write(literalItem.ToString());
                    continue;
                }

                // Otherwise, the item must be a placeholder.
                var placeholder         = (Placeholder)item;
                var childFormattingInfo = formattingInfo.CreateChild(placeholder);
                try
                {
                    EvaluateSelectors(childFormattingInfo);
                }
                catch (Exception ex)
                {
                    // An error occurred while evaluation selectors
                    var errorIndex = placeholder.Format?.startIndex ?? placeholder.Selectors.Last().endIndex;
                    FormatError(item, ex, errorIndex, childFormattingInfo);
                    continue;
                }

                try
                {
                    EvaluateFormatters(childFormattingInfo);
                }
                catch (Exception ex)
                {
                    // An error occurred while evaluating formatters
                    var errorIndex = placeholder.Format?.startIndex ?? placeholder.Selectors.Last().endIndex;
                    FormatError(item, ex, errorIndex, childFormattingInfo);
                }
            }
        }