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);
}
}
}
}
|