[valadoc] libvaladoc: gir-reader: accept π, >, <, &solidus;



commit e85e76dec1010dae4e01c859978ca2c3f02014b2
Author: Florian Brosch <flo brosch gmail com>
Date:   Fri Jan 6 01:02:25 2012 +0100

    libvaladoc: gir-reader: accept &pi;, &gt;, &lt;, &solidus;

 .../documentation/gtkdoccommentscanner.vala        |   49 +++++++++++++++++++-
 src/libvaladoc/markupwriter.vala                   |    2 +-
 2 files changed, 48 insertions(+), 3 deletions(-)
---
diff --git a/src/libvaladoc/documentation/gtkdoccommentscanner.vala b/src/libvaladoc/documentation/gtkdoccommentscanner.vala
index 5b8793c..fd16e3b 100644
--- a/src/libvaladoc/documentation/gtkdoccommentscanner.vala
+++ b/src/libvaladoc/documentation/gtkdoccommentscanner.vala
@@ -134,6 +134,51 @@ public class Valadoc.Gtkdoc.Scanner {
 	public Scanner () {
 	}
 
+	public static string unescape (string txt) {
+		StringBuilder builder = new StringBuilder ();
+		unowned string start = txt;
+		unowned string pos;
+		unichar c;
+
+		for (pos = txt; (c = pos.get_char ()) != '\0'; pos = pos.next_char ()) {
+			if (c == '&') {
+				if (pos.has_prefix ("&solidus;")) {
+					builder.append_len (start, (ssize_t) ((char*) pos - (char*) start));
+					start = (string) ((char*) pos + 9);
+					pos = (string) ((char*) pos + 8);
+					builder.append_unichar ('â');
+				} else if (pos.has_prefix ("&ast;")) {
+					builder.append_len (start, (ssize_t) ((char*) pos - (char*) start));
+					start = (string) ((char*) pos + 5);
+					pos = (string) ((char*) pos + 4);
+					builder.append_c ('*');
+				} else if (pos.has_prefix ("&pi;")) {
+					builder.append_len (start, (ssize_t) ((char*) pos - (char*) start));
+					start = (string) ((char*) pos + 4);
+					pos = (string) ((char*) pos + 3);
+					builder.append_unichar ('Ï');
+				} else if (pos.has_prefix ("&lt;")) {
+					builder.append_len (start, (ssize_t) ((char*) pos - (char*) start));
+					start = (string) ((char*) pos + 4);
+					pos = (string) ((char*) pos + 3);
+					builder.append_c ('<');
+				} else if (pos.has_prefix ("&gt;")) {
+					builder.append_len (start, (ssize_t) ((char*) pos - (char*) start));
+					start = (string) ((char*) pos + 4);
+					pos = (string) ((char*) pos + 3);
+					builder.append_c ('>');
+				}
+			}
+		} 
+
+		if (&txt == &start) {
+			return txt;
+		} else {
+			builder.append_len (start, (ssize_t) ((char*) pos - (char*) start));
+			return (owned) builder.str;
+		}
+	}
+
 	public void reset (string content) {
 		this.content = content;
 		this.tmp_token = null;
@@ -396,7 +441,7 @@ public class Valadoc.Gtkdoc.Scanner {
 						next_char ();
 						next_char ();
 						next_char ();
-						return new Token (TokenType.WORD, content, null, start, offset (this.pos, start), this.line, column_start, this.column);
+						return new Token (TokenType.WORD, unescape (content), null, start, offset (this.pos, start), this.line, column_start, this.column);
 					}
 				}
 			}
@@ -549,7 +594,7 @@ public class Valadoc.Gtkdoc.Scanner {
 			return null;
 		}
 
-		return new Token (TokenType.WORD, start.substring (0, len), null, start, offset (this.pos, start), this.line, column_start, this.column);
+		return new Token (TokenType.WORD, unescape (start.substring (0, len)), null, start, offset (this.pos, start), this.line, column_start, this.column);
 	}
 
 	private Token? gtkdoc_source_open_prefix () {
diff --git a/src/libvaladoc/markupwriter.vala b/src/libvaladoc/markupwriter.vala
index 7472d02..d463d0e 100755
--- a/src/libvaladoc/markupwriter.vala
+++ b/src/libvaladoc/markupwriter.vala
@@ -38,7 +38,7 @@ public class Valadoc.MarkupWriter {
 		unowned string pos;
 		unichar c;
 
-		for (pos = txt; (c = pos.get_char ()) != '\0'  ; pos = pos.next_char ()) {
+		for (pos = txt; (c = pos.get_char ()) != '\0'; pos = pos.next_char ()) {
 			switch (c) {
 			case '"':
 				builder.append_len (start, (ssize_t) ((char*) pos - (char*) start));



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]