aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libjin/Graphics/Font.h12
-rw-r--r--libjin/Graphics/TexFont.h18
-rw-r--r--libjin/Graphics/Unicode.cpp27
-rw-r--r--libjin/Graphics/Unicode.h43
4 files changed, 73 insertions, 27 deletions
diff --git a/libjin/Graphics/Font.h b/libjin/Graphics/Font.h
index 924dbc1..6c5a1fc 100644
--- a/libjin/Graphics/Font.h
+++ b/libjin/Graphics/Font.h
@@ -8,10 +8,6 @@ namespace jin
namespace graphics
{
- typedef unsigned int Codepoint;
-
- typedef std::vector<Codepoint> Sentence;
-
struct Page;
class Font
@@ -21,10 +17,10 @@ namespace graphics
virtual ~Font() {};
virtual void print(const Page* page, int x, int y) = 0;
- virtual void print(const Sentence& text, int x, int y, int lineheight, int spacing = 0) = 0;
- virtual Page* typeset(const Sentence& text, int lineheight, int spacing = 0) = 0;
- virtual void print(Unicode::Iterator& itor, int x, int y, int lineheight, int spacing = 0) = 0;
- virtual Page* typeset(Unicode::Iterator& itor, int lineheight, int spacing = 0) = 0;
+ virtual void print(const unicode::Sentence& text, int x, int y, int lineheight, int spacing = 0) = 0;
+ virtual Page* typeset(const unicode::Sentence& text, int lineheight, int spacing = 0) = 0;
+ virtual void print(unicode::Iterator& itor, int x, int y, int lineheight, int spacing = 0) = 0;
+ virtual Page* typeset(unicode::Iterator& itor, int lineheight, int spacing = 0) = 0;
};
diff --git a/libjin/Graphics/TexFont.h b/libjin/Graphics/TexFont.h
index 6639636..8cc79f5 100644
--- a/libjin/Graphics/TexFont.h
+++ b/libjin/Graphics/TexFont.h
@@ -20,25 +20,25 @@ namespace graphics
{
public:
/* create texture font from tilemap */
- static TexFont* createTexFont(const Bitmap* bitmap, const Sentence& codepoints, int cellw, int cellh, const math::Vector4<int>& spacing = math::Vector4<int>());
+ static TexFont* createTexFont(const Bitmap* bitmap, const unicode::Sentence& codepoints, int cellw, int cellh, const math::Vector4<int>& spacing = math::Vector4<int>());
/* create texture font from seperated glyphs */
- static TexFont* createTexFont(const Bitmap* bitmap, const Sentence& codepoints, Color mask, int cellh, const math::Vector4<int>& spacing = math::Vector4<int>());
+ static TexFont* createTexFont(const Bitmap* bitmap, const unicode::Sentence& codepoints, Color mask, int cellh, const math::Vector4<int>& spacing = math::Vector4<int>());
~TexFont();
- Page* typeset(const Sentence& text, int lineheight, int spacing = 0) override ;
+ Page* typeset(const unicode::Sentence& text, int lineheight, int spacing = 0) override ;
void print(const Page* page, int x, int y) override;
- void print(const Sentence& text, int x, int y, int linehgiht, int spacing = 0) override;
- void print(Unicode::Iterator& itor, int x, int y, int lineheight, int spacing = 0) override;
- Page* typeset(Unicode::Iterator& itor, int lineheight, int spacing = 0) override;
+ void print(const unicode::Sentence& text, int x, int y, int linehgiht, int spacing = 0) override;
+ void print(unicode::Iterator& itor, int x, int y, int lineheight, int spacing = 0) override;
+ Page* typeset(unicode::Iterator& itor, int lineheight, int spacing = 0) override;
private:
struct TexGlyph { unsigned short x, y, w, h;};
- TexFont(const Bitmap* bitmap, const Sentence& codepoints, int cellw, int cellh, const math::Vector4<int>& spacing);
- TexFont(const Bitmap* bitmap, const Sentence& codepoints, Color mask, int cellh, const math::Vector4<int>& spacing);
+ TexFont(const Bitmap* bitmap, const unicode::Sentence& codepoints, int cellw, int cellh, const math::Vector4<int>& spacing);
+ TexFont(const Bitmap* bitmap, const unicode::Sentence& codepoints, Color mask, int cellh, const math::Vector4<int>& spacing);
- std::map<Codepoint, TexGlyph> glyphs;
+ std::map<unicode::Codepoint, TexGlyph> glyphs;
};
diff --git a/libjin/Graphics/Unicode.cpp b/libjin/Graphics/Unicode.cpp
index 08fdcd0..8c2b77d 100644
--- a/libjin/Graphics/Unicode.cpp
+++ b/libjin/Graphics/Unicode.cpp
@@ -6,9 +6,21 @@ namespace jin
{
namespace graphics
{
+namespace unicode
+{
/* utf8 byte string to unicode codepoint */
static const char *utf8toCodepoint(const char *p, unsigned *res) {
+
+ }
+
+ /////////////////////////////////////////////////////////////////////////////
+ // decoders
+ /////////////////////////////////////////////////////////////////////////////
+
+ const void* Utf8::decode(const void* data, unsigned int length, Codepoint* res)
+ {
+ const char* p = (char*)data;
unsigned x, mask, shift;
switch (*p & 0xf0) {
case 0xf0: mask = 0x07; shift = 18; break;
@@ -32,10 +44,19 @@ namespace graphics
return p + 1;
}
- Codepoint Unicode::Iterator::operator*()
- {
+ const void* Utf16::decode(const void* data, unsigned int length, Codepoint* res)
+ {
+ }
+
+ /////////////////////////////////////////////////////////////////////////////
+ // iterator
+ /////////////////////////////////////////////////////////////////////////////
- }
+ Codepoint unicode::Iterator::operator*()
+ {
+ }
+
+}
}
} \ No newline at end of file
diff --git a/libjin/Graphics/Unicode.h b/libjin/Graphics/Unicode.h
index fcf17f8..ba4adf0 100644
--- a/libjin/Graphics/Unicode.h
+++ b/libjin/Graphics/Unicode.h
@@ -12,17 +12,45 @@ namespace unicode
typedef unsigned int Codepoint;
+ typedef std::vector<Codepoint> Sentence;
+
enum Encode
{
- UCS16, // unicode 16bits
+ UCS16, // unicode 16bits
+ UCS32, // unicode 32bits
UTF8, // utf-8
- UTF16 // utf-16
+ UTF16, // utf-16
+ ASCII, // ASCII
};
+ class Decoder
+ {
+ public:
+ virtual const void* decode(const void* data, unsigned int length, Codepoint* c) = 0;
+ };
+
+ class Utf8 : public Decoder
+ {
+ public:
+ const void* decode(const void* data, unsigned int length, Codepoint* c) override;
+ };
+
+ class Utf16 : public Decoder
+ {
+ public:
+ const void* decode(const void* data, unsigned int length, Codepoint* c) override;
+ };
+
+ class Ucs16 : public Decoder
+ {
+ public:
+ const void* decode(const void* data, unsigned int length, Codepoint* c) override;
+ };
+
class Iterator
{
public:
- Iterator(Encode encode, const char* data);
+ Iterator(Encode encode, const void* data, unsigned int length);
~Iterator();
Codepoint get();
@@ -35,13 +63,14 @@ namespace unicode
void operator = (const Iterator& itor);
private:
- const char* _data; // weak pointer
- unsigned int _len;
- const char* _p;
+ Decoder* _decoder;
+ const void* _data; // weak pointer
+ unsigned int _length;
+ const void* _p;
};
-}
+} // unicode
} // graphics
} // jin