[valadoc] libvaladoc: .valadoc-importer: Fix encoding issues
- From: Florian Brosch <flobrosch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [valadoc] libvaladoc: .valadoc-importer: Fix encoding issues
- Date: Mon, 19 Nov 2012 01:46:06 +0000 (UTC)
commit c602f64b1d3443855fc0923a571bbdaf8b43e1f0
Author: Florian Brosch <flo brosch gmail com>
Date: Sat Nov 17 12:56:58 2012 +0100
libvaladoc: .valadoc-importer: Fix encoding issues
.../valadocdocumentationimporterscanner.vala | 37 +++++++++++---------
1 files changed, 20 insertions(+), 17 deletions(-)
---
diff --git a/src/libvaladoc/importer/valadocdocumentationimporterscanner.vala b/src/libvaladoc/importer/valadocdocumentationimporterscanner.vala
index 5f77e60..5c4a442 100644
--- a/src/libvaladoc/importer/valadocdocumentationimporterscanner.vala
+++ b/src/libvaladoc/importer/valadocdocumentationimporterscanner.vala
@@ -30,9 +30,8 @@ public class Valadoc.Importer.ValadocDocumentationScanner : Object, Scanner {
private Parser _parser;
private string _content;
- private int _index;
+ private unowned string _index;
private bool _stop;
- private int _last_index;
private int _last_line;
private int _last_column;
private int _line;
@@ -47,7 +46,6 @@ public class Valadoc.Importer.ValadocDocumentationScanner : Object, Scanner {
public virtual void reset () {
_stop = false;
- _last_index = 0;
_last_line = 0;
_last_column = 0;
_line = 0;
@@ -57,10 +55,11 @@ public class Valadoc.Importer.ValadocDocumentationScanner : Object, Scanner {
_current_string.erase (0, -1);
}
- public void scan (string _content) throws ParserError {
- this._content = _content;
- for (_index = 0; !_stop && _index < _content.length; _index++) {
- unichar c = _content[_index];
+ public void scan (string content) throws ParserError {
+ this._content = content;
+
+ for (_index = _content; !_stop && _index.get_char () != 0; _index = _index.next_char ()) {
+ unichar c = _index.get_char ();
accept (c);
}
}
@@ -78,26 +77,31 @@ public class Valadoc.Importer.ValadocDocumentationScanner : Object, Scanner {
}
public virtual string get_line_content () {
- int i = _index;
- while (i > 0 && _content[i-1] != '\n') {
- i--;
- }
StringBuilder builder = new StringBuilder ();
- while (i < _content.length && _content[i] != '\n') {
- unichar c = _content[i++];
+ weak string line_start = _index;
+ unichar c;
+
+ while ((char*) line_start > (char*) _content && line_start.prev_char ().get_char () != '\n') {
+ line_start = line_start.prev_char ();
+ }
+
+ while ((c = line_start.get_char ()) != '\n' && c != '\0') {
if (c == '\t') {
- builder.append (" ");
+ builder.append_c (' ');
} else {
builder.append_unichar (c);
}
+ line_start = line_start.next_char ();
}
+
return builder.str;
}
protected unichar get_next_char (int offset = 1) {
- return _content[_index + offset];
+ return _index.get_char (_index.index_of_nth_char (offset));
}
+
protected void accept (unichar c) throws ParserError {
_column++;
if (_skip == 0) {
@@ -166,7 +170,6 @@ public class Valadoc.Importer.ValadocDocumentationScanner : Object, Scanner {
_parser.accept_token (new Token.from_word (_current_string.str, get_begin (), get_end (-1)));
_current_string.erase (0, -1);
- _last_index = _index;
_last_line = _line;
_last_column = _column - 1;
}
@@ -177,8 +180,8 @@ public class Valadoc.Importer.ValadocDocumentationScanner : Object, Scanner {
_parser.accept_token (new Token.from_type (type, get_begin (), get_end (_skip)));
- _last_index = _index;
_last_line = _line;
_last_column = _column;
}
+
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]