// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
using System;
+using System.ComponentModel;
using System.Collections;
using System.Globalization;
using System.IO;
using System.Text;
using System.Web.Util;
+using System.Security.Cryptography;
namespace System.Web.Compilation
{
class AspParser : ILocation
{
+ static readonly object errorEvent = new object ();
+ static readonly object tagParsedEvent = new object ();
+ static readonly object textParsedEvent = new object ();
+
+#if NET_2_0
+ byte[] md5checksum;
+#endif
AspTokenizer tokenizer;
int beginLine, endLine;
int beginColumn, endColumn;
string fileText;
string verbatimID;
+ EventHandlerList events = new EventHandlerList ();
+
+ public event ParseErrorHandler Error {
+ add { events.AddHandler (errorEvent, value); }
+ remove { events.RemoveHandler (errorEvent, value); }
+ }
+
+ public event TagParsedHandler TagParsed {
+ add { events.AddHandler (tagParsedEvent, value); }
+ remove { events.RemoveHandler (tagParsedEvent, value); }
+ }
+
+ public event TextParsedHandler TextParsed {
+ add { events.AddHandler (textParsedEvent, value); }
+ remove { events.RemoveHandler (textParsedEvent, value); }
+ }
+
public AspParser (string filename, TextReader input)
{
this.filename = filename;
fileText = input.ReadToEnd ();
+#if NET_2_0
+ MD5 md5 = MD5.Create ();
+ md5checksum = md5.ComputeHash (Encoding.UTF8.GetBytes (fileText));
+#endif
StringReader reader = new StringReader (fileText);
tokenizer = new AspTokenizer (reader);
}
+#if NET_2_0
+ public byte[] MD5Checksum {
+ get { return md5checksum; }
+ }
+#endif
+
public int BeginLine {
get { return beginLine; }
}
string GetVerbatim (int token, string end)
{
StringBuilder vb_text = new StringBuilder ();
+ StringBuilder tmp = new StringBuilder ();
int i = 0;
if (tokenizer.Value.Length > 1){
}
end = end.ToLower (CultureInfo.InvariantCulture);
+
while (token != Token.EOF){
if (Char.ToLower ((char) token, CultureInfo.InvariantCulture) == end [i]){
if (++i >= end.Length)
break;
+ tmp.Append ((char) token);
token = tokenizer.get_token ();
continue;
} else if (i > 0) {
- for (int j = 0; j < i; j++)
- vb_text.Append (end [j]);
+ vb_text.Append (tmp.ToString ());
+ tmp.Remove (0, tmp.Length);
i = 0;
}
(varname ? TagType.CodeRenderExpression : TagType.CodeRender));
}
- public event ParseErrorHandler Error;
- public event TagParsedHandler TagParsed;
- public event TextParsedHandler TextParsed;
-
void OnError (string msg)
{
- if (Error != null)
- Error (this, msg);
+ ParseErrorHandler eh = events [errorEvent] as ParseErrorHandler;
+ if (eh != null)
+ eh (this, msg);
}
void OnTagParsed (TagType tagtype, string id, TagAttributes attributes)
{
- if (TagParsed != null)
- TagParsed (this, tagtype, id, attributes);
+ TagParsedHandler eh = events [tagParsedEvent] as TagParsedHandler;
+ if (eh != null)
+ eh (this, tagtype, id, attributes);
}
void OnTextParsed (string text)
{
- if (TextParsed != null)
- TextParsed (this, text);
+ TextParsedHandler eh = events [textParsedEvent] as TextParsedHandler;
+ if (eh != null)
+ eh (this, text);
}
}