aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Mikhirev2013-01-04 15:53:08 +0400
committerDmitry Mikhirev2013-01-04 15:53:08 +0400
commit89711b175e318ba17b9e1504382e16c88cafbeea (patch)
tree8fc5f99f9aa5345f19025dd83a715fd7171b7e95
parentc422b7d86232877d49934b87c88cb4b5971791fd (diff)
downloadbrainuino-89711b175e318ba17b9e1504382e16c88cafbeea.tar.gz
brainuino-89711b175e318ba17b9e1504382e16c88cafbeea.tar.bz2
brainuino-89711b175e318ba17b9e1504382e16c88cafbeea.tar.xz
brainuino-89711b175e318ba17b9e1504382e16c88cafbeea.zip
better encapsulation in utf8 class
-rw-r--r--lcdprint.cpp4
-rw-r--r--utf8.cpp56
-rw-r--r--utf8.h10
3 files changed, 41 insertions, 29 deletions
diff --git a/lcdprint.cpp b/lcdprint.cpp
index 8de92b3..af0eaeb 100644
--- a/lcdprint.cpp
+++ b/lcdprint.cpp
@@ -27,9 +27,9 @@ size_t uprint(char* rawstr, LiquidCrystal *lcd)
int i, j;
int numcodes = sizeof(charmap)/sizeof(charcode);
utf8 str = utf8(rawstr);
- char result[str.chars];
+ char result[str.chars()];
- for (i = 0; i < str.chars; i++) {
+ for (i = 0; i < str.chars(); i++) {
ucode = str.get();
if (ucode > 0x0000) {
if (ucode <= 0x007d) {
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;
+}
diff --git a/utf8.h b/utf8.h
index d10557d..9bab45b 100644
--- a/utf8.h
+++ b/utf8.h
@@ -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
@@ -26,13 +26,15 @@ class utf8 {
public:
utf8(char* string);
~utf8(void);
- uint16_t chars;
- uint16_t bytes;
int32_t get();
- char* string;
+ uint16_t chars();
+ uint16_t bytes();
private:
uint16_t _index;
+ uint16_t _chars;
+ uint16_t _bytes;
+ char* _string;
};
#endif