Browse Source

2009-12-14 Marek Habersack <[email protected]>

	* AspParser.cs: PlainText should calculate the boundaries of
	text using character offset, not line offset. Fixes bug #562286
	InternalLineOffset and Internal properties need not exist.

	* AspGenerator.cs: AspParser inner parser constructor takes 5
	parameters now - accepts character offset of the current outer
	parser's position.

2009-12-14  Marek Habersack  <[email protected]>

	* Makefile (TEST_RESOURCE_FILES): added
	Test/mainsoft/NunitWebResources/NestedParserFileText.aspx

svn path=/trunk/mcs/; revision=148378
Marek Habersack 16 years ago
parent
commit
3190bde9ae

+ 5 - 0
mcs/class/System.Web/ChangeLog

@@ -1,3 +1,8 @@
+2009-12-14  Marek Habersack  <[email protected]>
+
+	* Makefile (TEST_RESOURCE_FILES): added
+	Test/mainsoft/NunitWebResources/NestedParserFileText.aspx
+
 2009-11-13  Marek Habersack  <[email protected]>
 
 	* Makefile (TEST_RESOURCE_FILES): added

+ 2 - 1
mcs/class/System.Web/Makefile

@@ -193,7 +193,8 @@ TEST_RESOURCE_FILES = \
 	Test/mainsoft/NunitWebResources/OneLetterIdentifierInCodeRender.aspx \
 	Test/mainsoft/NunitWebResources/GlobalResourcesLocalization.aspx \
 	Test/mainsoft/NunitWebResources/TableSections_Bug551666.aspx \
-	Test/mainsoft/NunitWebResources/TableSections_Bug551666.aspx.cs
+	Test/mainsoft/NunitWebResources/TableSections_Bug551666.aspx.cs \
+	Test/mainsoft/NunitWebResources/NestedParserFileText.aspx
 
 RESX_DIST =  resources/TranslationResources.resx
 ifneq (1, $(FRAMEWORK_VERSION_MAJOR))

+ 11 - 5
mcs/class/System.Web/System.Web.Compilation/AspGenerator.cs

@@ -817,7 +817,9 @@ namespace System.Web.Compilation
 
 		void ParseAttributeTag (string code, ILocation location)
 		{
-			AspParser parser = new AspParser ("@@attribute_tag@@", new StringReader (code), location.BeginLine - 1, location as AspParser);
+			AspParser outerParser = location as AspParser;
+			int positionOffset = outerParser != null ? outerParser.BeginPosition : 0;
+			AspParser parser = new AspParser ("@@attribute_tag@@", new StringReader (code), location.BeginLine - 1, positionOffset, outerParser);
 			parser.Error += new ParseErrorHandler (ParseError);
 			parser.TagParsed += new TagParsedHandler (TagParsed);
 			parser.TextParsed += new TextParsedHandler (TextParsed);
@@ -1084,7 +1086,7 @@ namespace System.Web.Compilation
 				FlushText (true);
 				return;
 			}
-			
+
 			IList blocks = SplitTextIntoBlocks (text);
 			foreach (TextBlock block in blocks) {
 				switch (block.Type) {
@@ -1113,8 +1115,10 @@ namespace System.Web.Compilation
 							condEndif = true;
 						} else
 							condEndif = false;
-						
-						AspParser parser = new AspParser ("@@comment_code@@", new StringReader (blockToParse), location.BeginLine - 1, location as AspParser);
+
+						AspParser outerParser = location as AspParser;
+						int positionOffset = outerParser != null ? outerParser.BeginPosition : 0;
+						AspParser parser = new AspParser ("@@comment_code@@", new StringReader (blockToParse), location.BeginLine - 1, positionOffset, outerParser);
 						parser.Error += new ParseErrorHandler (ParseError);
 						parser.TagParsed += new TagParsedHandler (TagParsed);
 						parser.TextParsed += new TextParsedHandler (TextParsed);
@@ -1555,7 +1559,9 @@ namespace System.Web.Compilation
 			
 			void DoParse (string str)
 			{
-				AspParser parser = new AspParser ("@@code_render@@", new StringReader (str), location.BeginLine - 1, location as AspParser);
+				AspParser outerParser = location as AspParser;
+				int positionOffset = outerParser != null ? outerParser.BeginPosition : 0;
+				AspParser parser = new AspParser ("@@code_render@@", new StringReader (str), location.BeginLine - 1, positionOffset, outerParser);
 				parser.Error += new ParseErrorHandler (ParseError);
 				parser.TagParsed += new TagParsedHandler (TagParsed);
 				parser.TextParsed += new TextParsedHandler (TextParsed);

+ 21 - 21
mcs/class/System.Web/System.Web.Compilation/AspParser.cs

@@ -63,6 +63,7 @@ namespace System.Web.Compilation
 		StringReader fileReader;
 		bool _internal;
 		int _internalLineOffset;
+		int _internalPositionOffset;
 		AspParser outer;
 		
 		EventHandlerList events = new EventHandlerList ();
@@ -96,11 +97,12 @@ namespace System.Web.Compilation
 			tokenizer = new AspTokenizer (this.fileReader);
 		}
 
-		public AspParser (string filename, TextReader input, int startLineOffset, AspParser outer)
+		public AspParser (string filename, TextReader input, int startLineOffset, int positionOffset, AspParser outer)
 			: this (filename, input)
 		{
 			this._internal = true;
 			this._internalLineOffset = startLineOffset;
+			this._internalPositionOffset = positionOffset;
 			this.outer = outer;
 		}
 		
@@ -112,11 +114,19 @@ namespace System.Web.Compilation
 				return checksum.Hash;
 			}
 		}
+
+		public int BeginPosition {
+			get { return beginPosition; }
+		}
+
+		public int EndPosition {
+			get { return endPosition; }
+		}
 		
 		public int BeginLine {
 			get {
-				if (Internal)
-					return beginLine + InternalLineOffset;
+				if (_internal)
+					return beginLine + _internalLineOffset;
 
 				return beginLine;
 			}
@@ -128,8 +138,8 @@ namespace System.Web.Compilation
 
 		public int EndLine {
 			get {
-				if (Internal)
-					return endLine + InternalLineOffset;
+				if (_internal)
+					return endLine + _internalLineOffset;
 				return endLine;
 			}
 		}
@@ -138,22 +148,12 @@ namespace System.Web.Compilation
 			get { return endColumn; }
 		}
 
-		public bool Internal {
-			get { return _internal; }
-			set { _internal = value; }
-		}
-
-		public int InternalLineOffset {
-			get { return _internalLineOffset; }
-			set { _internalLineOffset = value; }
-		}
-		
 		public string FileText {
 			get {
 				string ret = null;
 				
-				if (Internal && outer != null)
-					ret = outer.FileText;
+				if (_internal && outer != null)
+				 	ret = outer.FileText;
 				
 				if (ret == null && fileText != null)
 					ret = fileText;
@@ -170,9 +170,9 @@ namespace System.Web.Compilation
 				string text = FileText;
 				int start, len;
 				
-				if (Internal && outer != null) {
-					start = beginPosition + InternalLineOffset;
-					len = (endPosition + InternalLineOffset) - start;
+				if (_internal && outer != null) {
+					start = beginPosition + _internalPositionOffset;
+					len = (endPosition + _internalPositionOffset) - start;
 				} else {
 					start = beginPosition;
 					len = endPosition - beginPosition;
@@ -187,7 +187,7 @@ namespace System.Web.Compilation
 
 		public string Filename {
 			get {
-				if (Internal && outer != null)
+				if (_internal && outer != null)
 					return outer.Filename;
 				
 				return filename;

+ 10 - 0
mcs/class/System.Web/System.Web.Compilation/ChangeLog

@@ -1,3 +1,13 @@
+2009-12-14  Marek Habersack  <[email protected]>
+
+	* AspParser.cs: PlainText should calculate the boundaries of
+	text using character offset, not line offset. Fixes bug #562286
+	InternalLineOffset and Internal properties need not exist.
+
+	* AspGenerator.cs: AspParser inner parser constructor takes 5
+	parameters now - accepts character offset of the current outer
+	parser's position.
+
 2009-12-08  Marek Habersack  <[email protected]>
 
 	* TemplateControlCompiler.cs: GetConverterForMember looks up

+ 8 - 0
mcs/class/System.Web/Test/System.Web.Compilation/TemplateControlCompilerTest.cs

@@ -80,6 +80,7 @@ namespace MonoTests.System.Web.Compilation {
 			WebTest.CopyResource (GetType (), "ExpressionInListControl.aspx", "ExpressionInListControl.aspx");
 			WebTest.CopyResource (GetType (), "PreprocessorDirectivesInMarkup.aspx", "PreprocessorDirectivesInMarkup.aspx");
 			WebTest.CopyResource (GetType (), "OneLetterIdentifierInCodeRender.aspx", "OneLetterIdentifierInCodeRender.aspx");
+			WebTest.CopyResource (GetType (), "NestedParserFileText.aspx", "NestedParserFileText.aspx");
 #endif
 		}
 		
@@ -246,6 +247,13 @@ namespace MonoTests.System.Web.Compilation {
 
 			HtmlDiff.AssertAreEqual (originalHtml, renderedHtml, "#A1");
 		}
+
+		[Test (Description="Bug #562286")]
+		public void NestedParserFileText ()
+		{
+			// Just test if it doesn't throw an exception
+			new WebTest ("NestedParserFileText.aspx").Run ();
+		}
 #endif		
 		[Test (Description="Bug #323719")]
 		public void TagsNestedInClientTag ()

+ 25 - 0
mcs/class/System.Web/Test/mainsoft/NunitWebResources/NestedParserFileText.aspx

@@ -0,0 +1,25 @@
+<%@ Page Language="C#" %>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+	<title>Bug #526286</title>
+</head>
+<body>
+	<form id="form1" runat="server">
+	<h1>Test</h1>
+					<!--
+						<div style="color:red; margin:30px; clear:both; font-size:30px">
+							Извините, но Ваш браузер устарел, мешает прогрессу, и система Tercio.CMS под него не адаптирована.<br>
+							Установите <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9ae91ebe-3385-447c-8a30-081805b2f90b&displaylang=en" title="скачать IE7">последнюю</a> версию браузера от Microsoft,
+							или попробуйте другие достйные (мнение проффесионалов - лучшие) альтернативы:
+							<ul style="margin-left:50px; margin-bottom:20px;">
+								<li><a href="http://mozilla.ru/">Mozilla FireFox</a></li>
+								<li><a href="http://opera.com/">Opera</a></li>
+								<li><a href="http://www.apple.com/safari/download/">Сафари</a></li>
+							</ul>
+						</div>
+					-->
+	<p>Test test test</p>
+	</form>
+</body>
+</html>