コード例 #1
0
        public static void ParseCode(ZeusCodeSegment segment)
        {
            StringReader         reader;
            StringBuilder        builder;
            IZeusScriptingEngine engine;

            segment.ExtraData.Clear();

            // If this is a compiled template, don't try to parse it!
            if ((segment.Template.SourceType == ZeusConstants.SourceTypes.COMPILED) &&
                (segment.CachedAssembly != null))
            {
                return;
            }

            if (!segment.IsEmpty)
            {
                if (segment.Template.SourceType == ZeusConstants.SourceTypes.ENCRYPTED)
                {
                    reader = new StringReader(ZeusEncryption.Decrypt(segment.CodeUnparsed));
                }
                else
                {
                    reader = new StringReader(segment.CodeUnparsed);
                }

                builder = new StringBuilder();
                engine  = ZeusFactory.GetEngine(segment.Engine);

                if (segment.Mode == ZeusConstants.Modes.MARKUP)
                {
                    ParseMarkup(engine, segment, reader, builder);
                }
                else
                {
                    ParsePure(engine, segment, reader, builder);
                }
                segment.Code = builder.ToString();
            }
        }
コード例 #2
0
        public static void ParseCode(ZeusCodeSegment segment)
        {
            StringReader         reader;
            StringBuilder        builder;
            IZeusScriptingEngine engine;

            segment.ExtraData.Clear();

            // If this is a compiled template, don't try to parse it!
            if ((segment.Template.SourceType == ZeusConstants.SourceTypes.COMPILED) &&
                (segment.CachedAssembly != null))
            {
                return;
            }

            if (!segment.IsEmpty)
            {
                if (segment.Template.SourceType == ZeusConstants.SourceTypes.ENCRYPTED)
                {
                    reader = new StringReader(ZeusEncryption.Decrypt(segment.CodeUnparsed));
                }
                else
                {
                    reader = new StringReader(segment.CodeUnparsed);
                }

                builder = new StringBuilder();
                engine  = ZeusFactory.GetEngine(segment.Engine);

                if (segment.Mode == ZeusConstants.Modes.MARKUP)
                {
                    ParseMarkup(engine, segment, reader, builder);
                }
                else
                {
                    ParsePure(engine, segment, reader, builder);
                }

                segment.Code = builder.ToString();

                string language = segment.Language;
                if (language.Equals(ZeusConstants.Languages.CSHARP) || language.Equals(ZeusConstants.Languages.VBNET))
                {
                    /**/
                    IList <string> lisUsings = new List <string>();
                    //TODO:HuyNH change some code to modfify using statement
                    try
                    {
                        Regex regexObj = new Regex(ZeusConstants.Namespace.CSHARP_USING_REGEX);
                        if (language.Equals(ZeusConstants.Languages.VBNET))
                        {
                            regexObj = new Regex(ZeusConstants.Namespace.VBNET_IMPORT_REGEX);
                        }
                        Match matchResults = regexObj.Match(segment.Code);
                        while (matchResults.Success)
                        {
                            // matched text: matchResults.Value
                            // match start: matchResults.Index
                            // match length: matchResults.Length
                            lisUsings.Add(matchResults.Value);
                            matchResults = matchResults.NextMatch();
                        }
                    }
                    catch (ArgumentException ex)
                    {
                        // Syntax error in the regular expression
                    }

                    lisUsings = lisUsings.Distinct().ToList();

                    foreach (string usingStatement in lisUsings)
                    {
                        segment.Code = segment.Code.Replace(usingStatement, string.Empty);
                    }

                    foreach (string usingStatement in lisUsings)
                    {
                        segment.Code = usingStatement + "\n" + segment.Code;
                    }
                    /**/

                    //TODO:HuyNH remove more empty line;
                    segment.Code = Regex.Replace(segment.Code, "[\t ]+[\r\n]+", "\n", RegexOptions.Multiline);
                    segment.Code = Regex.Replace(segment.Code, "[\r\n]+", "\n", RegexOptions.Multiline);
                }
            }
        }