Beispiel #1
0
        public override bool Render(IInternalContextAdapter context, TextWriter writer)
        {
            bool result;

            if (this.referenceType == ReferenceType.Runt)
            {
                char[] array = this.rootString.ToCharArray();
                writer.Write(array, 0, array.Length);
                result = true;
            }
            else
            {
                object obj = this.Execute(null, context);
                if (this.escaped)
                {
                    StringBuilder stringBuilder = new StringBuilder();
                    stringBuilder.Append(this.escPrefix);
                    if (obj == null)
                    {
                        stringBuilder.Append("\\");
                    }
                    stringBuilder.Append(this.nullString);
                    char[] array = stringBuilder.ToString().ToCharArray();
                    writer.Write(array, 0, array.Length);
                    result = true;
                }
                else
                {
                    EventCartridge eventCartridge = context.EventCartridge;
                    if (eventCartridge != null && this.referenceStack != null)
                    {
                        obj = eventCartridge.ReferenceInsert(this.referenceStack, this.nullString, obj);
                    }
                    if (obj == null)
                    {
                        StringBuilder stringBuilder = new StringBuilder();
                        stringBuilder.Append(this.escPrefix);
                        stringBuilder.Append(this.escPrefix);
                        stringBuilder.Append(this.morePrefix);
                        stringBuilder.Append(this.nullString);
                        char[] array = stringBuilder.ToString().ToCharArray();
                        writer.Write(array, 0, array.Length);
                        if (this.referenceType != ReferenceType.Quiet && this.rsvc.GetBoolean("runtime.log.invalid.references", true))
                        {
                            this.rsvc.Warn(new ReferenceException("reference : template = " + context.CurrentTemplateName, this));
                        }
                        result = true;
                    }
                    else
                    {
                        StringBuilder stringBuilder = new StringBuilder();
                        stringBuilder.Append(this.escPrefix);
                        stringBuilder.Append(this.morePrefix);
                        stringBuilder.Append(obj);
                        char[] array = stringBuilder.ToString().ToCharArray();
                        writer.Write(array, 0, array.Length);
                        result = true;
                    }
                }
            }
            return(result);
        }
Beispiel #2
0
        /// <summary>
        /// gets the value of the reference and outputs it to the
        /// writer.
        /// </summary>
        /// <param name="context"> context of data to use in getting value </param>
        /// <param name="writer">  writer to render to </param>
        public override bool Render(IInternalContextAdapter context, TextWriter writer)
        {
            if (referenceType == ReferenceType.Runt)
            {
                writer.Write(rootString);
                return(true);
            }

            Object value = Execute(null, context);

            // if this reference is escaped (\$foo) then we want to do one of two things :
            // 1) if this is a reference in the context, then we want to print $foo
            // 2) if not, then \$foo  (its considered shmoo, not VTL)
            if (escaped)
            {
                StringBuilder b = new StringBuilder();
                b.Append(escPrefix);
                if (value == null)
                {
                    b.Append("\\");
                }
                b.Append(nullString);

                writer.Write(b);

                return(true);
            }

            // the normal processing

            // if we have an event cartridge, get a new value object
            EventCartridge eventCartridge = context.EventCartridge;

            if (eventCartridge != null && referenceStack != null)
            {
                value = eventCartridge.ReferenceInsert(referenceStack, nullString, value);
            }

            // if value is null...
            if (value == null)
            {
                // write prefix twice, because it's shmoo, so the \ don't escape each other...
                StringBuilder b = new StringBuilder();

                b.Append(escPrefix);
                b.Append(escPrefix);
                b.Append(morePrefix);
                b.Append(nullString);

                writer.Write(b);

                if (referenceType != ReferenceType.Quiet &&
                    runtimeServices.GetBoolean(RuntimeConstants.RUNTIME_LOG_REFERENCE_LOG_INVALID, true))
                {
                    runtimeServices.Warn(
                        new ReferenceException(string.Format("reference : template = {0}", context.CurrentTemplateName), this));
                }

                return(true);
            }
            else
            {
                // non-null processing
                StringBuilder b = new StringBuilder();
                b.Append(escPrefix);
                b.Append(morePrefix);
                b.Append(value);

                writer.Write(b);

                return(true);
            }
        }