#region Apache License // // Licensed to the Apache Software Foundation (ASF) under one or more // contributor license agreements. See the NOTICE file distributed with // this work for additional information regarding copyright ownership. // The ASF licenses this file to you under the Apache License, Version 2.0 // (the "License"); you may not use this file except in compliance with // the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #endregion using System; using System.Text; using System.IO; using log4net.Util; namespace log4net.Util.PatternStringConverters { /// /// Pattern converter for literal string instances in the pattern /// /// /// /// Writes the literal string value specified in the /// property to /// the output. /// /// /// Nicko Cadell internal class LiteralPatternConverter : PatternConverter { /// /// Set the next converter in the chain /// /// The next pattern converter in the chain /// The next pattern converter /// /// /// Special case the building of the pattern converter chain /// for instances. Two adjacent /// literals in the pattern can be represented by a single combined /// pattern converter. This implementation detects when a /// is added to the chain /// after this converter and combines its value with this converter's /// literal value. /// /// public override PatternConverter SetNext(PatternConverter pc) { LiteralPatternConverter literalPc = pc as LiteralPatternConverter; if (literalPc != null) { // Combine the two adjacent literals together Option = Option + literalPc.Option; // We are the next converter now return this; } return base.SetNext(pc); } /// /// Write the literal to the output /// /// the writer to write to /// null, not set /// /// /// Override the formatting behavior to ignore the FormattingInfo /// because we have a literal instead. /// /// /// Writes the value of /// to the output . /// /// override public void Format(TextWriter writer, object state) { writer.Write(Option); } /// /// Convert this pattern into the rendered message /// /// that will receive the formatted result. /// null, not set /// /// /// This method is not used. /// /// override protected void Convert(TextWriter writer, object state) { throw new InvalidOperationException("Should never get here because of the overridden Format method"); } } }