From 89711b175e318ba17b9e1504382e16c88cafbeea Mon Sep 17 00:00:00 2001 From: Dmitry Mikhirev Date: Fri, 4 Jan 2013 15:53:08 +0400 Subject: better encapsulation in utf8 class --- lcdprint.cpp | 4 ++-- utf8.cpp | 56 +++++++++++++++++++++++++++++++++----------------------- utf8.h | 10 ++++++---- 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 -- cgit v1.2.1