Welcome to mirror list, hosted at ThFree Co, Russian Federation.

BaseParser.cs « UI « System.Web « referencesource « class « mcs - github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 1ecb550dadd54a0211ec00bc723164cf3d6c5dd3 (plain)
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 
    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;
        }
    }
}


}