File: PageThemeParser.cs

package info (click to toggle)
mono 6.8.0.105%2Bdfsg-3.3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,284,512 kB
  • sloc: cs: 11,172,132; xml: 2,850,069; ansic: 671,653; cpp: 122,091; perl: 59,366; javascript: 30,841; asm: 22,168; makefile: 20,093; sh: 15,020; python: 4,827; pascal: 925; sql: 859; sed: 16; php: 1
file content (150 lines) | stat: -rw-r--r-- 4,977 bytes parent folder | download | duplicates (7)
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
//------------------------------------------------------------------------------
// <copyright file="PageThemeParser.cs" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>
//------------------------------------------------------------------------------

namespace System.Web.UI {

    using System;
    using System.Collections;
    using System.Collections.Specialized;
    using System.Globalization;
    using System.IO;
    using System.Reflection;
    using System.Text;
    using System.Web.Compilation;
    using System.Web.Util;
    using System.Web.UI;

    internal class PageThemeParser : BaseTemplateParser {

        internal const string defaultDirectiveName = "skin";
        private bool _mainDirectiveProcessed;
        private IList _skinFileList;
        private IList _cssFileList;
        private ControlBuilder _currentSkinBuilder;

        private VirtualPath _virtualDirPath;
        internal VirtualPath VirtualDirPath {
            get { return _virtualDirPath; }
        }

        internal PageThemeParser(VirtualPath virtualDirPath, IList skinFileList, IList cssFileList) {
            _virtualDirPath = virtualDirPath;
            _skinFileList = skinFileList;
            _cssFileList = cssFileList;
        }

        internal ICollection CssFileList {
            get { return _cssFileList; }
        }

        internal override Type DefaultBaseType {
            get {
                return typeof(PageTheme);
            }
        }

        internal override string DefaultDirectiveName {
            get {
                return defaultDirectiveName;
            }
        }

        /* code is not allowed in skin files */
        internal override bool IsCodeAllowed {
            get {
                return false;
            }
        }

        // The current processing controlbuilder for the ITemplate in the skin file.
        internal ControlBuilder CurrentSkinBuilder {
            get {
                return _currentSkinBuilder;
            }
            set {
                _currentSkinBuilder = value;
            }
        }

        internal override RootBuilder CreateDefaultFileLevelBuilder() {
            return new FileLevelPageThemeBuilder();
        }

        internal override void ParseInternal() {
            if (_skinFileList != null) {
                foreach(string virtualPath in _skinFileList) {
                    ParseFile(null /*physicalPath*/, virtualPath);
                }
            }

            AddSourceDependency(_virtualDirPath);
        }

        internal override void ProcessDirective(string directiveName, IDictionary directive) {
            if (directiveName == null ||
                directiveName.Length == 0 ||
                StringUtil.EqualsIgnoreCase(directiveName, DefaultDirectiveName)) {

                // Make sure the main directive was not already specified
                if (_mainDirectiveProcessed) {
                    ProcessError(SR.GetString(SR.Only_one_directive_allowed, DefaultDirectiveName));
                    return;
                }

                ProcessMainDirective(directive);
                _mainDirectiveProcessed = true;
            }
            else if (StringUtil.EqualsIgnoreCase(directiveName, "register")) {
                base.ProcessDirective(directiveName, directive);
            }
            else {
                ProcessError(SR.GetString(SR.Unknown_directive, directiveName));
                return;
            }
        }

        internal override bool ProcessMainDirectiveAttribute(string deviceName, string name,
            string value, IDictionary parseData) {

            switch (name) {

            // Fail on the following unsupported attributes.  Note that our base class
            // TemplateParser does support them, hence the special casing
            case "classname":
            case "compilationmode":
            case "inherits":
                ProcessError(SR.GetString(SR.Attr_not_supported_in_directive,
                        name, DefaultDirectiveName));
                return false;

            default:
                // We didn't handle the attribute.  Try the base class
                return base.ProcessMainDirectiveAttribute(deviceName, name, value, parseData);
            }
        }
    }

    internal class DesignTimePageThemeParser : PageThemeParser {
        private string _themePhysicalPath;

        internal DesignTimePageThemeParser(string virtualDirPath) : base(null, null, null) {
            _themePhysicalPath = virtualDirPath;
        }

        internal string ThemePhysicalPath {
            get {
                return _themePhysicalPath;
            }
        }

        // Parse the designtime theme content here.
        internal override void ParseInternal() {
            if (Text != null) {
                ParseString(Text, CurrentVirtualPath, Encoding.UTF8);
            }
        }
    }
}