diff options
| author | Mike Buland <eichlan@xagasoft.com> | 2019-07-05 10:26:37 -0700 |
|---|---|---|
| committer | Mike Buland <eichlan@xagasoft.com> | 2019-07-05 10:26:37 -0700 |
| commit | 9cdf227b84a18141de527a0ad85344a20914b974 (patch) | |
| tree | c1cb3d0e15b8ce96c0d680e2ce8360e3e452fbfd /src | |
| parent | 14683979c43e17393dc4f902fe65ed22898b2bce (diff) | |
| download | libbu++-9cdf227b84a18141de527a0ad85344a20914b974.tar.gz libbu++-9cdf227b84a18141de527a0ad85344a20914b974.tar.bz2 libbu++-9cdf227b84a18141de527a0ad85344a20914b974.tar.xz libbu++-9cdf227b84a18141de527a0ad85344a20914b974.zip | |
Started work on Text and friends.
Text processing isn't trivial, and I want this iteration to be
significantly more robust. This time I/O will be seperated out into
codecs that will handle the encoding/decoding to/from different formats.
Diffstat (limited to 'src')
| -rw-r--r-- | src/unstable/text.cpp | 25 | ||||
| -rw-r--r-- | src/unstable/text.h | 64 | ||||
| -rw-r--r-- | src/unstable/textcodec.cpp | 0 | ||||
| -rw-r--r-- | src/unstable/textcodec.h | 0 | ||||
| -rw-r--r-- | src/unstable/textcodecutf8.cpp | 0 | ||||
| -rw-r--r-- | src/unstable/textcodecutf8.h | 0 |
6 files changed, 89 insertions, 0 deletions
diff --git a/src/unstable/text.cpp b/src/unstable/text.cpp index 73271f8..9e5670d 100644 --- a/src/unstable/text.cpp +++ b/src/unstable/text.cpp | |||
| @@ -5,4 +5,29 @@ | |||
| 5 | * terms of the license contained in the file LICENSE. | 5 | * terms of the license contained in the file LICENSE. |
| 6 | */ | 6 | */ |
| 7 | 7 | ||
| 8 | #include "bu/text.h" | ||
| 9 | #include <string.h> | ||
| 10 | |||
| 11 | Bu::Text::Text() : | ||
| 12 | pData( NULL ), | ||
| 13 | iSize( 0 ), | ||
| 14 | iCodePoints( 0 ) | ||
| 15 | { | ||
| 16 | } | ||
| 17 | |||
| 18 | Bu::Text::Text( const Text &rSrc ) : | ||
| 19 | pData( NULL ), | ||
| 20 | iSize( rSrc.iSize ), | ||
| 21 | iCodePoints( rSrc.iCodePoints ) | ||
| 22 | { | ||
| 23 | pData = new uint16_t[iSize]; | ||
| 24 | memcpy( pData, rSrc.pData, sizeof(uint16_t)*iSize ); | ||
| 25 | } | ||
| 26 | |||
| 27 | Bu::Text::~Text() | ||
| 28 | { | ||
| 29 | delete[] pData; | ||
| 30 | pData = NULL; | ||
| 31 | } | ||
| 32 | |||
| 8 | 33 | ||
diff --git a/src/unstable/text.h b/src/unstable/text.h index e69de29..1d623ff 100644 --- a/src/unstable/text.h +++ b/src/unstable/text.h | |||
| @@ -0,0 +1,64 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2007-2019 Xagasoft, All rights reserved. | ||
| 3 | * | ||
| 4 | * This file is part of the libbu++ library and is released under the | ||
| 5 | * terms of the license contained in the file LICENSE. | ||
| 6 | */ | ||
| 7 | |||
| 8 | #ifndef BU_TEXT_H | ||
| 9 | #define BU_TEXT_H | ||
| 10 | |||
| 11 | #include "bu/config.h" | ||
| 12 | |||
| 13 | namespace Bu | ||
| 14 | { | ||
| 15 | /** | ||
| 16 | * Represents a string of text. Human readable language. This should be | ||
| 17 | * used any time you're dealing with actual text and not just binary | ||
| 18 | * data. If you neeed to transport raw binary data then consider using | ||
| 19 | * Blob and BlobBuilder. | ||
| 20 | * | ||
| 21 | * Text objects should be considered immutable. If you need to construct | ||
| 22 | * a Text object dynamically take a look at TextBuilder, and for | ||
| 23 | * serialization take a look at TextStream. | ||
| 24 | * | ||
| 25 | * A Text object is a sequence of Unicode code points. A code point is not | ||
| 26 | * one to one with a character. A single character can be represented with | ||
| 27 | * multilpe code points. In addition, a code point can also represent | ||
| 28 | * formatting or display inforamtion. | ||
| 29 | * | ||
| 30 | * Internally all data is stored in UTF-16, which is a fair compromise for | ||
| 31 | * mose text. All characters from all modern natural languages fit within | ||
| 32 | * the Basic Multilingual Plane, which requires only a single 16 bit value | ||
| 33 | * to represent it. However, when iterating through or addressing data | ||
| 34 | * in the Text object all work is done on a code point basis. | ||
| 35 | */ | ||
| 36 | class Text | ||
| 37 | { | ||
| 38 | public: | ||
| 39 | class iterator; | ||
| 40 | class const_iterator; | ||
| 41 | typedef uint32_t CodePoint; | ||
| 42 | |||
| 43 | public: | ||
| 44 | Text(); | ||
| 45 | Text( const Text &rSrc ); | ||
| 46 | virtual ~Text(); | ||
| 47 | |||
| 48 | bool isEmpty() const; | ||
| 49 | bool isBmpOnly() const; | ||
| 50 | int32_t getSize() const; | ||
| 51 | int32_t getSizeInBytes() const; | ||
| 52 | |||
| 53 | uint16_t *getRawData() const; | ||
| 54 | // Text transform( (CodePoint *)(*pCallback)( CodePoint * ) ); | ||
| 55 | |||
| 56 | private: | ||
| 57 | uint16_t *pData; | ||
| 58 | int32_t iSize; | ||
| 59 | int32_t iCodePoints; | ||
| 60 | }; | ||
| 61 | typedef Text::CodePoint CodePoint; | ||
| 62 | } | ||
| 63 | |||
| 64 | #endif | ||
diff --git a/src/unstable/textcodec.cpp b/src/unstable/textcodec.cpp new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/unstable/textcodec.cpp | |||
diff --git a/src/unstable/textcodec.h b/src/unstable/textcodec.h new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/unstable/textcodec.h | |||
diff --git a/src/unstable/textcodecutf8.cpp b/src/unstable/textcodecutf8.cpp new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/unstable/textcodecutf8.cpp | |||
diff --git a/src/unstable/textcodecutf8.h b/src/unstable/textcodecutf8.h new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/unstable/textcodecutf8.h | |||
