1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
//------------------------------------------------------------------------------
// <copyright file="BaseParser.cs" company="Microsoft">
// Copyright (c) Microsoft Corporation. All rights reserved.
// </copyright>
//------------------------------------------------------------------------------
/*
* Implements the ASP.NET template parser
*
* Copyright (c) 1998 Microsoft Corporation
*/
/*********************************
Class hierarchy
BaseParser
DependencyParser
TemplateControlDependencyParser
PageDependencyParser
UserControlDependencyParser
MasterPageDependencyParser
TemplateParser
BaseTemplateParser
TemplateControlParser
PageParser
UserControlParser
MasterPageParser
PageThemeParser
ApplicationFileParser
**********************************/
namespace System.Web.UI {
using System;
using System.Collections;
using System.Reflection;
using System.Web.Compilation;
using System.Web.Hosting;
using System.Web.Util;
using System.Text.RegularExpressions;
using System.Web.RegularExpressions;
using System.Security.Permissions;
// Internal interface for Parser that have exteranl assembly dependency.
internal interface IAssemblyDependencyParser {
ICollection AssemblyDependencies { get; }
}
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public class BaseParser {
// The directory used for relative path calculations
private VirtualPath _baseVirtualDir;
internal VirtualPath BaseVirtualDir {
get { return _baseVirtualDir; }
}
// The virtual path to the file currently being processed
private VirtualPath _currentVirtualPath;
internal VirtualPath CurrentVirtualPath {
get { return _currentVirtualPath; }
set {
_currentVirtualPath = value;
// Can happen in the designer
if (value == null) return;
_baseVirtualDir = value.Parent;
}
}
internal string CurrentVirtualPathString {
get { return System.Web.VirtualPath.GetVirtualPathString(CurrentVirtualPath); }
}
private Regex _tagRegex;
// The 3.5 regex is used only when targeting 2.0/3.5 for backward compatibility (Dev10 bug 830783).
private readonly static Regex tagRegex35 = new TagRegex35();
// The 4.0 regex is used for web sites targeting 4.0 and above.
private readonly static Regex tagRegex40 = new TagRegex();
internal readonly static Regex directiveRegex = new DirectiveRegex();
internal readonly static Regex endtagRegex = new EndTagRegex();
internal readonly static Regex aspCodeRegex = new AspCodeRegex();
internal readonly static Regex aspExprRegex = new AspExprRegex();
internal readonly static Regex aspEncodedExprRegex = new AspEncodedExprRegex();
internal readonly static Regex databindExprRegex = new DatabindExprRegex();
internal readonly static Regex commentRegex = new CommentRegex();
internal readonly static Regex includeRegex = new IncludeRegex();
internal readonly static Regex textRegex = new TextRegex();
// Regexes used in DetectSpecialServerTagError
internal readonly static Regex gtRegex = new GTRegex();
internal readonly static Regex ltRegex = new LTRegex();
internal readonly static Regex serverTagsRegex = new ServerTagsRegex();
internal readonly static Regex runatServerRegex = new RunatServerRegex();
/*
* Turns relative virtual path into absolute ones
*/
internal VirtualPath ResolveVirtualPath(VirtualPath virtualPath) {
return VirtualPathProvider.CombineVirtualPathsInternal(CurrentVirtualPath, virtualPath);
}
private bool IsVersion40OrAbove() {
if (HostingEnvironment.IsHosted) {
// If we are running in a hosted environment, then we can simply check the target version.
return MultiTargetingUtil.IsTargetFramework40OrAbove;
}
else {
// Otherwise, we are in the designer, and thus should check using the type description provider.
// The new type TagRegex35 only exists when targeting 4.0 and above.
return TargetFrameworkUtil.IsSupportedType(typeof(TagRegex35));
}
}
internal Regex TagRegex {
get {
if (_tagRegex == null) {
_tagRegex = IsVersion40OrAbove() ? tagRegex40 : tagRegex35;
}
return _tagRegex;
}
}
}
}
|