[tracker/rss-enclosures] SPARQL: Support \u escape sequence in string literals



commit e7e5adf852d12f17981993acb39c4f326a4188bc
Author: Jürg Billeter <j bitron ch>
Date:   Fri Nov 12 11:58:00 2010 +0100

    SPARQL: Support \u escape sequence in string literals

 src/libtracker-data/tracker-sparql-expression.vala |    6 ++++++
 src/libtracker-data/tracker-sparql-scanner.vala    |    9 +++++++++
 2 files changed, 15 insertions(+), 0 deletions(-)
---
diff --git a/src/libtracker-data/tracker-sparql-expression.vala b/src/libtracker-data/tracker-sparql-expression.vala
index ee015c8..ab59bb9 100644
--- a/src/libtracker-data/tracker-sparql-expression.vala
+++ b/src/libtracker-data/tracker-sparql-expression.vala
@@ -764,6 +764,12 @@ class Tracker.Sparql.Expression : Object {
 					case 't':
 						sb.append_c ('\t');
 						break;
+					case 'u':
+						char* ptr = (char*) p + 1;
+						unichar c = (((unichar) ptr[0].xdigit_value () * 16 + ptr[1].xdigit_value ()) * 16 + ptr[2].xdigit_value ()) * 16 + ptr[3].xdigit_value ();
+						sb.append_unichar (c);
+						p += 4;
+						break;
 					}
 					p++;
 				}
diff --git a/src/libtracker-data/tracker-sparql-scanner.vala b/src/libtracker-data/tracker-sparql-scanner.vala
index f8791e9..61b4782 100644
--- a/src/libtracker-data/tracker-sparql-scanner.vala
+++ b/src/libtracker-data/tracker-sparql-scanner.vala
@@ -695,6 +695,15 @@ public class Tracker.SparqlScanner : Object {
 							current++;
 							token_length_in_chars++;
 							break;
+						case 'u':
+							for (int i = 0; i < 4; i++) {
+								if (current + i + 1 >= end || !current[i + 1].isxdigit ()) {
+									throw new Sparql.Error.PARSE ("%d.%d: invalid escape sequence", line, column + token_length_in_chars);
+								}
+							}
+							current += 5;
+							token_length_in_chars += 5;
+							break;
 						default:
 							throw new Sparql.Error.PARSE ("%d.%d: invalid escape sequence", line, column + token_length_in_chars);
 						}



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