/* * Copyright (C) 2007-2019 Xagasoft, All rights reserved. * * This file is part of the libbu++ library and is released under the * terms of the license contained in the file LICENSE. */ #ifndef BU_TEXT_H #define BU_TEXT_H #include "bu/config.h" namespace Bu { class TextBuilder; /** * Represents a string of text. Human readable language. This should be * used any time you're dealing with actual text and not just binary * data. If you neeed to transport raw binary data then consider using * Blob and BlobBuilder. * * Text objects should be considered immutable. If you need to construct * a Text object dynamically take a look at TextBuilder, and for * serialization take a look at TextStream. * * A Text object is a sequence of Unicode code points. A code point is not * one to one with a character. A single character can be represented with * multilpe code points. In addition, a code point can also represent * formatting or display inforamtion. * */ class Text { public: class iterator; class const_iterator; typedef char32_t CodePoint; public: Text(); Text( const CodePoint *rSrc ); Text( const Text &rSrc ); Text( const TextBuilder &rSrc ); virtual ~Text(); bool isEmpty() const; bool isBmpOnly() const; int32_t getSize() const; int32_t getSizeInBytes() const; CodePoint operator[]( int32_t iIndex ) const; CodePoint *getData() const; // Text transform( (CodePoint *)(*pCallback)( CodePoint * ) ); private: CodePoint *pData; bool bIsBmpOnly; int32_t iSize; }; typedef Text::CodePoint CodePoint; } #endif