aboutsummaryrefslogtreecommitdiff
path: root/utf8.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'utf8.cpp')
-rw-r--r--utf8.cpp56
1 files changed, 33 insertions, 23 deletions
diff --git a/utf8.cpp b/utf8.cpp
index 745e888..d4e605e 100644
--- a/utf8.cpp
+++ b/utf8.cpp
@@ -1,7 +1,7 @@
/*
Brainuino Aleph
- Copyright (C) 2012 Dmitry Mikhirev
+ Copyright (C) 2012, 2013 Dmitry Mikhirev
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -22,20 +22,20 @@
utf8::utf8 (char* input)
{
- bytes = strlen(input);
- string = strdup(input);
- chars = 0;
- for (_index = 0; _index < bytes; _index++) {
- if ((string[_index] & 0x80) == 0x00) {
- chars++;
- } else if ((string[_index] & 0x20) == 0x00) {
- chars++;
+ _bytes = strlen(input);
+ _string = strdup(input);
+ _chars = 0;
+ for (_index = 0; _index < _bytes; _index++) {
+ if ((_string[_index] & 0x80) == 0x00) {
+ _chars++;
+ } else if ((_string[_index] & 0x20) == 0x00) {
+ _chars++;
_index ++;
- } else if ((string[_index] & 0x10) == 0x00) {
- chars++;
+ } else if ((_string[_index] & 0x10) == 0x00) {
+ _chars++;
_index += 2;
- } else if ((string[_index] & 0x08) == 0x00) {
- chars++;
+ } else if ((_string[_index] & 0x08) == 0x00) {
+ _chars++;
_index += 3;
}
}
@@ -44,24 +44,34 @@ utf8::utf8 (char* input)
utf8::~utf8 ()
{
- free(string);
+ free(_string);
}
int32_t utf8::get()
{
int32_t code;
- if ((string[_index] & 0x80) == 0) {
- code = int32_t(string[_index]);
+ if ((_string[_index] & 0x80) == 0) {
+ code = int32_t(_string[_index]);
_index++;
- } else if ((string[_index] & 0x20) == 0) {
- code = int32_t(string[_index] & 0x1f) << 6 | int32_t(string[_index+1] & 0x3f);
+ } else if ((_string[_index] & 0x20) == 0) {
+ code = int32_t(_string[_index] & 0x1f) << 6 | int32_t(_string[_index+1] & 0x3f);
_index += 2;
- } else if ((string[_index] & 0x10) == 0) {
- code = int32_t(string[_index] & 0xf) << 12 | int32_t(string[_index+1] & 0x3f) << 6 | int32_t(string[_index+2] & 0x3f);
+ } else if ((_string[_index] & 0x10) == 0) {
+ code = int32_t(_string[_index] & 0xf) << 12 | int32_t(_string[_index+1] & 0x3f) << 6 | int32_t(_string[_index+2] & 0x3f);
_index += 3;
- } else if ((string[_index] & 0x8) == 0) {
- code = int32_t(string[_index] & 0x7) << 18 | int32_t(string[_index+1] & 0x3f) << 12 | int32_t(string[_index+2] & 0x3f) << 6 | int32_t(string[_index+3] & 0x3f);
+ } else if ((_string[_index] & 0x8) == 0) {
+ code = int32_t(_string[_index] & 0x7) << 18 | int32_t(_string[_index+1] & 0x3f) << 12 | int32_t(_string[_index+2] & 0x3f) << 6 | int32_t(_string[_index+3] & 0x3f);
}
- if (_index >= bytes) _index = 0;
+ if (_index >= _bytes) _index = 0;
return code;
}
+
+uint16_t utf8::chars()
+{
+ return _chars;
+}
+
+uint16_t utf8::bytes()
+{
+ return _bytes;
+}