mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-15 14:16:07 -06:00
Draw: fixed underline issue, Font documented
git-svn-id: svn://ultimatepp.org/upp/trunk@1385 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
80115590ba
commit
bacf2dc0ec
8 changed files with 752 additions and 397 deletions
|
|
@ -29,4 +29,4 @@ can be used, displaying textual information to the user.&]
|
|||
]_[*@3 desc])&]
|
||||
[s2;%% Constructor, error described as [%-*C@3 desc].&]
|
||||
[s1; &]
|
||||
[s0;%% ]
|
||||
[s0; ]
|
||||
|
|
@ -82,18 +82,23 @@ public:
|
|||
|
||||
enum {
|
||||
STDFONT,
|
||||
SCREEN_SERIF,
|
||||
SCREEN_SANS,
|
||||
SCREEN_FIXED,
|
||||
ROMAN,
|
||||
ARIAL,
|
||||
COURIER,
|
||||
SERIF,
|
||||
SANSSERIF,
|
||||
MONOSPACE,
|
||||
#ifdef PLATFORM_WIN32
|
||||
SYMBOL,
|
||||
WINGDINGS,
|
||||
TAHOMA,
|
||||
#endif
|
||||
OTHER,
|
||||
|
||||
// Backward compatibility:
|
||||
ROMAN = SERIF,
|
||||
ARIAL = SANSSERIF,
|
||||
COURIER = MONOSPACE,
|
||||
SCREEN_SERIF = SERIF,
|
||||
SCREEN_SANS = SANSSERIF,
|
||||
SCREEN_FIXED = MONOSPACE,
|
||||
};
|
||||
|
||||
int GetFace() const { return v.face; }
|
||||
|
|
@ -145,6 +150,10 @@ public:
|
|||
int GetOverhang() const { return Fi().overhang; }
|
||||
int GetAveWidth() const { return Fi().avewidth; }
|
||||
int GetMaxWidth() const { return Fi().maxwidth; }
|
||||
bool IsNormal(int ch) const;
|
||||
bool IsComposed(int ch) const;
|
||||
bool IsReplaced(int ch) const;
|
||||
bool IsMissing(int ch) const;
|
||||
int HasChar(int ch) const;
|
||||
int GetWidth(int c) const;
|
||||
int operator[](int c) const { return GetWidth(c); }
|
||||
|
|
@ -229,8 +238,10 @@ inline int GetStdFontCy() { return GetStdFontSize().cy
|
|||
|
||||
Font StdFont();
|
||||
|
||||
inline Font StdFont(int h) { return StdFont().Height(h); }
|
||||
inline Font StdFont(int h) { return StdFont().Height(h); }
|
||||
|
||||
|
||||
/*
|
||||
struct ScreenSans : public Font { ScreenSans(int n = 0) : Font(SCREEN_SANS, n) {} };
|
||||
struct ScreenSerif : public Font { ScreenSerif(int n = 0) : Font(SCREEN_SERIF, n) {} };
|
||||
struct ScreenFixed : public Font { ScreenFixed(int n = 0) : Font(SCREEN_FIXED, n) {} };
|
||||
|
|
@ -244,6 +255,23 @@ struct Symbol : public Font { Symbol(int n) : Font(SYMBOL, n) {} };
|
|||
struct WingDings : public Font { WingDings(int n) : Font(WINGDINGS, n) {} };
|
||||
struct Tahoma : public Font { Tahoma(int n) : Font(TAHOMA, n) {} };
|
||||
#endif
|
||||
*/
|
||||
|
||||
inline Font Serif(int n = 0) { return Font(Font::SCREEN_SERIF, n); }
|
||||
inline Font SansSerif(int n = 0) { return Font(Font::SCREEN_SANS, n); }
|
||||
inline Font Monospace(int n = 0) { return Font(Font::SCREEN_FIXED, n); }
|
||||
|
||||
inline Font Roman(int n = 0) { return Font(Font::SCREEN_SANS, n); }
|
||||
inline Font Arial(int n = 0) { return Font(Font::SCREEN_SERIF, n); }
|
||||
inline Font Courier(int n = 0) { return Font(Font::SCREEN_FIXED, n); }
|
||||
|
||||
inline Font ScreenSerif(int n = 0) { return Font(Font::SCREEN_SERIF, n); }
|
||||
inline Font ScreenSans(int n = 0) { return Font(Font::SCREEN_SANS, n); }
|
||||
inline Font ScreenFixed(int n = 0) { return Font(Font::SCREEN_FIXED, n); }
|
||||
|
||||
#ifdef PLATFORM_WIN32 // backward comaptibility
|
||||
inline Font Tahoma(int n = 0) { return Font(Font::TAHOMA, n); }
|
||||
#endif
|
||||
|
||||
Size GetTextSize(const wchar *text, Font font, int n = -1);
|
||||
Size GetTextSize(const WString& text, Font font);
|
||||
|
|
|
|||
|
|
@ -45,18 +45,19 @@ void Draw::DrawText(int x, int y, int angle, const wchar *text, Font font,
|
|||
else {
|
||||
int c = 1;
|
||||
int dd = 0;
|
||||
if(!dx)
|
||||
while(c < n) {
|
||||
GlyphInfo gi2 = GetGlyphInfo(font, text[i + c]);
|
||||
if(!gi2.IsNormal())
|
||||
break;
|
||||
c++;
|
||||
dd += gi.width;
|
||||
gi = gi2;
|
||||
}
|
||||
DrawTextOp(x + d, y, 0, text + i, font, ink, c, NULL);
|
||||
i += c - 1;
|
||||
while(c < n) {
|
||||
GlyphInfo gi2 = GetGlyphInfo(font, text[i + c]);
|
||||
if(!gi2.IsNormal())
|
||||
break;
|
||||
dd += dx ? dx[c] : gi.width;
|
||||
c++;
|
||||
gi = gi2;
|
||||
}
|
||||
DrawTextOp(x + d, y, 0, text + i, font, ink, c, dx);
|
||||
d += dd;
|
||||
i += c - 1;
|
||||
if(dx)
|
||||
dx += c - 1;
|
||||
}
|
||||
else
|
||||
if(gi.IsReplaced()) {
|
||||
|
|
@ -84,10 +85,7 @@ void Draw::DrawText(int x, int y, int angle, const wchar *text, Font font,
|
|||
}
|
||||
GlyphMetrics(gi, font, chr);
|
||||
}
|
||||
if(dx)
|
||||
d += *dx++;
|
||||
else
|
||||
d += gi.width;
|
||||
d += dx ? *dx++ : gi.width;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,343 +1,368 @@
|
|||
#include "Draw.h"
|
||||
|
||||
#define LLOG(x)
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
CommonFontInfo GetFontInfoSys(Font font);
|
||||
GlyphInfo GetGlyphInfoSys(Font font, int chr);
|
||||
void GetStdFontSys(String& name, int& height);
|
||||
Vector<FaceInfo> GetAllFacesSys();
|
||||
|
||||
bool Replace(Font fnt, int chr, Font& rfnt);
|
||||
|
||||
void Std(Font& font)
|
||||
{
|
||||
if(IsNull(font))
|
||||
font = StdFont();
|
||||
if(font.GetFace() == 0)
|
||||
font.Face(GetStdFont().GetFace());
|
||||
if(font.GetHeight() == 0)
|
||||
font.Height(GetStdFont().GetHeight());
|
||||
}
|
||||
|
||||
Size Font::StdFontSize;
|
||||
Font Font::AStdFont;
|
||||
|
||||
INITBLOCK {
|
||||
RichValue<Font>::Register();
|
||||
}
|
||||
|
||||
const Vector<FaceInfo>& Font::List()
|
||||
{
|
||||
static Vector<FaceInfo> *q;
|
||||
ONCELOCK {
|
||||
static Vector<FaceInfo> x;
|
||||
x = GetAllFacesSys();
|
||||
q = &x;
|
||||
}
|
||||
return *q;
|
||||
}
|
||||
|
||||
void sInitFonts()
|
||||
{
|
||||
Font::List();
|
||||
GetStdFont();
|
||||
}
|
||||
|
||||
INITBLOCK {
|
||||
sInitFonts();
|
||||
}
|
||||
|
||||
int Font::GetFaceCount()
|
||||
{
|
||||
return List().GetCount();
|
||||
}
|
||||
|
||||
String Font::GetFaceName(int index)
|
||||
{
|
||||
if(index == 0)
|
||||
return "STDFONT";
|
||||
const Vector<FaceInfo>& l = List();
|
||||
if(index >= 0 && index < l.GetCount())
|
||||
return l[index].name;
|
||||
return Null;
|
||||
}
|
||||
|
||||
dword Font::GetFaceInfo(int index)
|
||||
{
|
||||
const Vector<FaceInfo>& l = List();
|
||||
if(index >= 0 && index < l.GetCount())
|
||||
return l[index].info;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int FontFilter(int c)
|
||||
{
|
||||
return c >= 'a' && c <= 'z' || c >= '0' && c <= '9' ? c : c >= 'A' && c <= 'Z' ? ToLower(c) : 0;
|
||||
}
|
||||
|
||||
int Font::FindFaceNameIndex(const String& name) {
|
||||
if(name == "STDFONT")
|
||||
return 0;
|
||||
for(int i = 1; i < GetFaceCount(); i++)
|
||||
if(GetFaceName(i) == name)
|
||||
return i;
|
||||
String n = Filter(name, FontFilter);
|
||||
for(int i = 1; i < GetFaceCount(); i++)
|
||||
if(Filter(GetFaceName(i), FontFilter) == n)
|
||||
return i;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Font::SyncStdFont()
|
||||
{
|
||||
DrawLock __;
|
||||
StdFontSize = Size(AStdFont.GetAveWidth(), AStdFont().Bold().GetCy());
|
||||
}
|
||||
|
||||
void Font::SetStdFont(Font font)
|
||||
{
|
||||
DrawLock __;
|
||||
static bool x;
|
||||
InitStdFont();
|
||||
AStdFont = font;
|
||||
SyncStdFont();
|
||||
}
|
||||
|
||||
void Font::InitStdFont()
|
||||
{
|
||||
ONCELOCK {
|
||||
DrawLock __;
|
||||
List();
|
||||
AStdFont = Arial(12);
|
||||
String name;
|
||||
int height = 0;
|
||||
GetStdFontSys(name, height);
|
||||
int q = FindFaceNameIndex(name);
|
||||
if(q > 0) {
|
||||
AStdFont = Font(q, max(height, 1));
|
||||
SyncStdFont();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Font Font::GetStdFont()
|
||||
{
|
||||
InitStdFont();
|
||||
return AStdFont;
|
||||
}
|
||||
|
||||
Size Font::GetStdFontSize()
|
||||
{
|
||||
InitStdFont();
|
||||
return StdFontSize;
|
||||
}
|
||||
|
||||
Font StdFont()
|
||||
{
|
||||
return Font(0, 0);
|
||||
}
|
||||
|
||||
int Font::GetHeight() const
|
||||
{
|
||||
return v.height || v.face ? v.height : GetStdFont().GetHeight();
|
||||
}
|
||||
|
||||
String Font::GetFaceName() const {
|
||||
if(IsNull()) return String();
|
||||
if(GetFace() == 0)
|
||||
return "STDFONT";
|
||||
return GetFaceName(GetFace());
|
||||
}
|
||||
|
||||
dword Font::GetFaceInfo() const {
|
||||
if(IsNull()) return 0;
|
||||
return GetFaceInfo(GetFace());
|
||||
}
|
||||
|
||||
Font& Font::FaceName(const String& name) {
|
||||
int n = FindFaceNameIndex(name);
|
||||
Face(n < 0 ? 0xffff : n);
|
||||
return *this;
|
||||
}
|
||||
|
||||
void Font::Serialize(Stream& s) {
|
||||
int version = 1;
|
||||
s / version;
|
||||
if(version >= 1) {
|
||||
int f = GetFace();
|
||||
if(f > COURIER)
|
||||
f = -1;
|
||||
s / f;
|
||||
String name;
|
||||
if(f < 0) {
|
||||
name = GetFaceName();
|
||||
s % name;
|
||||
}
|
||||
if(s.IsLoading())
|
||||
if(f >= 0)
|
||||
Face(f);
|
||||
else
|
||||
FaceName(name);
|
||||
}
|
||||
else {
|
||||
String name = GetFaceName();
|
||||
s % name;
|
||||
if(s.IsLoading()) {
|
||||
FaceName(name);
|
||||
if(IsNull())
|
||||
Face(COURIER);
|
||||
}
|
||||
}
|
||||
s % v.flags % v.height % v.width;
|
||||
}
|
||||
|
||||
template<>
|
||||
String AsString(const Font& f) {
|
||||
if(IsNull(f)) return "<null>";
|
||||
String s = "<" + f.GetFaceName() + Format(":%d", f.GetHeight());
|
||||
if(f.IsBold())
|
||||
s += " Bold";
|
||||
if(f.IsItalic())
|
||||
s += " Italic";
|
||||
if(f.IsUnderline())
|
||||
s += " Underline";
|
||||
if(f.IsStrikeout())
|
||||
s += " Strikeout";
|
||||
return s + '>';
|
||||
}
|
||||
|
||||
struct CharEntry {
|
||||
int64 font;
|
||||
GlyphInfo info;
|
||||
word chr;
|
||||
};
|
||||
|
||||
CharEntry fc_cache_global[4093];
|
||||
|
||||
bool IsNormal(Font font, int chr)
|
||||
{
|
||||
DrawLock __;
|
||||
CharEntry& e = fc_cache_global[CombineHash(font.GetHashValue(), chr) % 4093];
|
||||
if(e.font == font.AsInt64() || e.chr == chr)
|
||||
return e.info.IsNormal();
|
||||
return GetGlyphInfoSys(font, chr).IsNormal();
|
||||
}
|
||||
|
||||
CharEntry GetGlyphEntry(Font font, int chr, unsigned hash)
|
||||
{
|
||||
DrawLock __;
|
||||
CharEntry& e = fc_cache_global[hash % 4093];
|
||||
if(e.font != font.AsInt64() || e.chr != chr) {
|
||||
e.font = font.AsInt64();
|
||||
e.chr = chr;
|
||||
e.info = GetGlyphInfoSys(font, chr);
|
||||
if(!e.info.IsNormal()) {
|
||||
ComposedGlyph cg;
|
||||
Font rfnt;
|
||||
if(Compose(font, chr, cg)) {
|
||||
e.info.lspc = -1;
|
||||
e.info.rspc = cg.basic_char;
|
||||
}
|
||||
else
|
||||
if(Replace(font, chr, rfnt)) {
|
||||
e.info.lspc = rfnt.GetFace();
|
||||
e.info.rspc = rfnt.GetHeight();
|
||||
}
|
||||
else
|
||||
e.info.lspc = -2;
|
||||
}
|
||||
}
|
||||
return e;
|
||||
}
|
||||
|
||||
thread__ CharEntry fc_cache[512];
|
||||
|
||||
GlyphInfo GetGlyphInfo(Font font, int chr)
|
||||
{
|
||||
Std(font);
|
||||
unsigned hash = CombineHash(font.GetHashValue(), chr);
|
||||
CharEntry& e = fc_cache[hash & 511];
|
||||
if(e.font != font.AsInt64() || e.chr != chr)
|
||||
e = GetGlyphEntry(font, chr, hash);
|
||||
return e.info;
|
||||
}
|
||||
|
||||
void GlyphMetrics(GlyphInfo& f, Font font, int chr)
|
||||
{
|
||||
if(f.IsReplaced())
|
||||
f = GetGlyphInfo(font().Face(f.lspc).Height(f.rspc), chr);
|
||||
if(f.IsComposed()) {
|
||||
f = GetGlyphInfo(font, f.rspc);
|
||||
if(f.IsComposedLM())
|
||||
f.rspc += f.width / 2;
|
||||
}
|
||||
}
|
||||
|
||||
GlyphInfo GetGlyphMetrics(Font font, int chr)
|
||||
{
|
||||
GlyphInfo f = GetGlyphInfo(font, chr);
|
||||
if(f.IsMissing())
|
||||
f = GetGlyphInfo(font, '?');
|
||||
GlyphMetrics(f, font, chr);
|
||||
return f;
|
||||
}
|
||||
|
||||
struct FontEntry {
|
||||
CommonFontInfo info;
|
||||
int64 font;
|
||||
};
|
||||
|
||||
thread__ FontEntry fi_cache[64];
|
||||
|
||||
const CommonFontInfo& GetFontInfo(Font font)
|
||||
{
|
||||
Std(font);
|
||||
unsigned hash = font.GetHashValue() & 63;
|
||||
FontEntry& e = fi_cache[hash];
|
||||
if(e.font != font.AsInt64()) {
|
||||
DrawLock __;
|
||||
e.font = font.AsInt64();
|
||||
e.info = GetFontInfoSys(font);
|
||||
}
|
||||
return e.info;
|
||||
}
|
||||
|
||||
int Font::GetWidth(int c) const {
|
||||
return GetGlyphMetrics(*this, c).width;
|
||||
}
|
||||
|
||||
int Font::GetLeftSpace(int c) const {
|
||||
return GetGlyphMetrics(*this, c).lspc;
|
||||
}
|
||||
|
||||
int Font::GetRightSpace(int c) const {
|
||||
return GetGlyphMetrics(*this, c).rspc;
|
||||
}
|
||||
|
||||
thread__ int64 lastFiFont = INT_MIN;
|
||||
thread__ CommonFontInfo lastFontInfo;
|
||||
thread__ int64 lastStdFont = INT_MIN;
|
||||
|
||||
const CommonFontInfo& Font::Fi() const
|
||||
{
|
||||
if(lastStdFont != AStdFont.AsInt64()) {
|
||||
lastFiFont = INT_MIN;
|
||||
lastStdFont = AStdFont.AsInt64();
|
||||
}
|
||||
if(AsInt64() == lastFiFont)
|
||||
return lastFontInfo;
|
||||
lastFontInfo = GetFontInfo(*this);
|
||||
lastFiFont = AsInt64();
|
||||
return lastFontInfo;
|
||||
}
|
||||
|
||||
FontInfo Font::Info() const
|
||||
{
|
||||
FontInfo h;
|
||||
h.font = *this;
|
||||
return h;
|
||||
}
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
#include "Draw.h"
|
||||
|
||||
#define LLOG(x)
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
CommonFontInfo GetFontInfoSys(Font font);
|
||||
GlyphInfo GetGlyphInfoSys(Font font, int chr);
|
||||
void GetStdFontSys(String& name, int& height);
|
||||
Vector<FaceInfo> GetAllFacesSys();
|
||||
|
||||
bool Replace(Font fnt, int chr, Font& rfnt);
|
||||
|
||||
void Std(Font& font)
|
||||
{
|
||||
if(IsNull(font))
|
||||
font = StdFont();
|
||||
if(font.GetFace() == 0)
|
||||
font.Face(GetStdFont().GetFace());
|
||||
if(font.GetHeight() == 0)
|
||||
font.Height(GetStdFont().GetHeight());
|
||||
}
|
||||
|
||||
Size Font::StdFontSize;
|
||||
Font Font::AStdFont;
|
||||
|
||||
INITBLOCK {
|
||||
RichValue<Font>::Register();
|
||||
}
|
||||
|
||||
const Vector<FaceInfo>& Font::List()
|
||||
{
|
||||
static Vector<FaceInfo> *q;
|
||||
ONCELOCK {
|
||||
static Vector<FaceInfo> x;
|
||||
x = GetAllFacesSys();
|
||||
q = &x;
|
||||
}
|
||||
return *q;
|
||||
}
|
||||
|
||||
void sInitFonts()
|
||||
{
|
||||
Font::List();
|
||||
GetStdFont();
|
||||
}
|
||||
|
||||
INITBLOCK {
|
||||
sInitFonts();
|
||||
}
|
||||
|
||||
int Font::GetFaceCount()
|
||||
{
|
||||
return List().GetCount();
|
||||
}
|
||||
|
||||
String Font::GetFaceName(int index)
|
||||
{
|
||||
if(index == 0)
|
||||
return "STDFONT";
|
||||
const Vector<FaceInfo>& l = List();
|
||||
if(index >= 0 && index < l.GetCount())
|
||||
return l[index].name;
|
||||
return Null;
|
||||
}
|
||||
|
||||
dword Font::GetFaceInfo(int index)
|
||||
{
|
||||
const Vector<FaceInfo>& l = List();
|
||||
if(index >= 0 && index < l.GetCount())
|
||||
return l[index].info;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int FontFilter(int c)
|
||||
{
|
||||
return c >= 'a' && c <= 'z' || c >= '0' && c <= '9' ? c : c >= 'A' && c <= 'Z' ? ToLower(c) : 0;
|
||||
}
|
||||
|
||||
int Font::FindFaceNameIndex(const String& name) {
|
||||
if(name == "STDFONT")
|
||||
return 0;
|
||||
for(int i = 1; i < GetFaceCount(); i++)
|
||||
if(GetFaceName(i) == name)
|
||||
return i;
|
||||
String n = Filter(name, FontFilter);
|
||||
for(int i = 1; i < GetFaceCount(); i++)
|
||||
if(Filter(GetFaceName(i), FontFilter) == n)
|
||||
return i;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Font::SyncStdFont()
|
||||
{
|
||||
DrawLock __;
|
||||
StdFontSize = Size(AStdFont.GetAveWidth(), AStdFont().Bold().GetCy());
|
||||
}
|
||||
|
||||
void Font::SetStdFont(Font font)
|
||||
{
|
||||
DrawLock __;
|
||||
static bool x;
|
||||
InitStdFont();
|
||||
AStdFont = font;
|
||||
SyncStdFont();
|
||||
}
|
||||
|
||||
void Font::InitStdFont()
|
||||
{
|
||||
ONCELOCK {
|
||||
DrawLock __;
|
||||
List();
|
||||
AStdFont = Arial(12);
|
||||
String name;
|
||||
int height = 0;
|
||||
GetStdFontSys(name, height);
|
||||
int q = FindFaceNameIndex(name);
|
||||
if(q > 0) {
|
||||
AStdFont = Font(q, max(height, 1));
|
||||
SyncStdFont();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Font Font::GetStdFont()
|
||||
{
|
||||
InitStdFont();
|
||||
return AStdFont;
|
||||
}
|
||||
|
||||
Size Font::GetStdFontSize()
|
||||
{
|
||||
InitStdFont();
|
||||
return StdFontSize;
|
||||
}
|
||||
|
||||
Font StdFont()
|
||||
{
|
||||
return Font(0, 0);
|
||||
}
|
||||
|
||||
int Font::GetHeight() const
|
||||
{
|
||||
return v.height || v.face ? v.height : GetStdFont().GetHeight();
|
||||
}
|
||||
|
||||
String Font::GetFaceName() const {
|
||||
if(IsNull()) return String();
|
||||
if(GetFace() == 0)
|
||||
return "STDFONT";
|
||||
return GetFaceName(GetFace());
|
||||
}
|
||||
|
||||
dword Font::GetFaceInfo() const {
|
||||
if(IsNull()) return 0;
|
||||
return GetFaceInfo(GetFace());
|
||||
}
|
||||
|
||||
Font& Font::FaceName(const String& name) {
|
||||
int n = FindFaceNameIndex(name);
|
||||
Face(n < 0 ? 0xffff : n);
|
||||
return *this;
|
||||
}
|
||||
|
||||
void Font::Serialize(Stream& s) {
|
||||
int version = 1;
|
||||
s / version;
|
||||
if(version >= 1) {
|
||||
int f = GetFace();
|
||||
if(f > COURIER)
|
||||
f = -1;
|
||||
s / f;
|
||||
String name;
|
||||
if(f < 0) {
|
||||
name = GetFaceName();
|
||||
s % name;
|
||||
}
|
||||
if(s.IsLoading())
|
||||
if(f >= 0)
|
||||
Face(f);
|
||||
else
|
||||
FaceName(name);
|
||||
}
|
||||
else {
|
||||
String name = GetFaceName();
|
||||
s % name;
|
||||
if(s.IsLoading()) {
|
||||
FaceName(name);
|
||||
if(IsNull())
|
||||
Face(COURIER);
|
||||
}
|
||||
}
|
||||
s % v.flags % v.height % v.width;
|
||||
}
|
||||
|
||||
template<>
|
||||
String AsString(const Font& f) {
|
||||
if(IsNull(f)) return "<null>";
|
||||
String s = "<" + f.GetFaceName() + Format(":%d", f.GetHeight());
|
||||
if(f.IsBold())
|
||||
s += " Bold";
|
||||
if(f.IsItalic())
|
||||
s += " Italic";
|
||||
if(f.IsUnderline())
|
||||
s += " Underline";
|
||||
if(f.IsStrikeout())
|
||||
s += " Strikeout";
|
||||
return s + '>';
|
||||
}
|
||||
|
||||
struct CharEntry {
|
||||
int64 font;
|
||||
GlyphInfo info;
|
||||
word chr;
|
||||
};
|
||||
|
||||
CharEntry fc_cache_global[4093];
|
||||
|
||||
bool IsNormal(Font font, int chr)
|
||||
{
|
||||
DrawLock __;
|
||||
CharEntry& e = fc_cache_global[CombineHash(font.GetHashValue(), chr) % 4093];
|
||||
if(e.font == font.AsInt64() || e.chr == chr)
|
||||
return e.info.IsNormal();
|
||||
return GetGlyphInfoSys(font, chr).IsNormal();
|
||||
}
|
||||
|
||||
CharEntry GetGlyphEntry(Font font, int chr, unsigned hash)
|
||||
{
|
||||
DrawLock __;
|
||||
CharEntry& e = fc_cache_global[hash % 4093];
|
||||
if(e.font != font.AsInt64() || e.chr != chr) {
|
||||
e.font = font.AsInt64();
|
||||
e.chr = chr;
|
||||
e.info = GetGlyphInfoSys(font, chr);
|
||||
if(!e.info.IsNormal()) {
|
||||
ComposedGlyph cg;
|
||||
Font rfnt;
|
||||
if(Compose(font, chr, cg)) {
|
||||
e.info.lspc = -1;
|
||||
e.info.rspc = cg.basic_char;
|
||||
}
|
||||
else
|
||||
if(Replace(font, chr, rfnt)) {
|
||||
e.info.lspc = rfnt.GetFace();
|
||||
e.info.rspc = rfnt.GetHeight();
|
||||
}
|
||||
else
|
||||
e.info.lspc = -2;
|
||||
}
|
||||
}
|
||||
return e;
|
||||
}
|
||||
|
||||
thread__ CharEntry fc_cache[512];
|
||||
|
||||
GlyphInfo GetGlyphInfo(Font font, int chr)
|
||||
{
|
||||
Std(font);
|
||||
unsigned hash = CombineHash(font.GetHashValue(), chr);
|
||||
CharEntry& e = fc_cache[hash & 511];
|
||||
if(e.font != font.AsInt64() || e.chr != chr)
|
||||
e = GetGlyphEntry(font, chr, hash);
|
||||
return e.info;
|
||||
}
|
||||
|
||||
bool Font::IsNormal(int ch) const
|
||||
{
|
||||
return GetGlyphInfo(*this, ch).IsNormal();
|
||||
}
|
||||
|
||||
bool Font::IsComposed(int ch) const
|
||||
{
|
||||
return GetGlyphInfo(*this, ch).IsComposed();
|
||||
}
|
||||
|
||||
bool Font::IsReplaced(int ch) const
|
||||
{
|
||||
return GetGlyphInfo(*this, ch).IsReplaced();
|
||||
}
|
||||
|
||||
bool Font::IsMissing(int ch) const
|
||||
{
|
||||
return GetGlyphInfo(*this, ch).IsMissing();
|
||||
}
|
||||
|
||||
int Font::HasChar(int ch) const
|
||||
{
|
||||
return !GetGlyphInfo(*this, ch).IsMissing();
|
||||
}
|
||||
|
||||
void GlyphMetrics(GlyphInfo& f, Font font, int chr)
|
||||
{
|
||||
if(f.IsReplaced())
|
||||
f = GetGlyphInfo(font().Face(f.lspc).Height(f.rspc), chr);
|
||||
if(f.IsComposed()) {
|
||||
f = GetGlyphInfo(font, f.rspc);
|
||||
if(f.IsComposedLM())
|
||||
f.rspc += f.width / 2;
|
||||
}
|
||||
}
|
||||
|
||||
GlyphInfo GetGlyphMetrics(Font font, int chr)
|
||||
{
|
||||
GlyphInfo f = GetGlyphInfo(font, chr);
|
||||
if(f.IsMissing())
|
||||
f = GetGlyphInfo(font, '?');
|
||||
GlyphMetrics(f, font, chr);
|
||||
return f;
|
||||
}
|
||||
|
||||
struct FontEntry {
|
||||
CommonFontInfo info;
|
||||
int64 font;
|
||||
};
|
||||
|
||||
thread__ FontEntry fi_cache[64];
|
||||
|
||||
const CommonFontInfo& GetFontInfo(Font font)
|
||||
{
|
||||
Std(font);
|
||||
unsigned hash = font.GetHashValue() & 63;
|
||||
FontEntry& e = fi_cache[hash];
|
||||
if(e.font != font.AsInt64()) {
|
||||
DrawLock __;
|
||||
e.font = font.AsInt64();
|
||||
e.info = GetFontInfoSys(font);
|
||||
}
|
||||
return e.info;
|
||||
}
|
||||
|
||||
int Font::GetWidth(int c) const {
|
||||
return GetGlyphMetrics(*this, c).width;
|
||||
}
|
||||
|
||||
int Font::GetLeftSpace(int c) const {
|
||||
return GetGlyphMetrics(*this, c).lspc;
|
||||
}
|
||||
|
||||
int Font::GetRightSpace(int c) const {
|
||||
return GetGlyphMetrics(*this, c).rspc;
|
||||
}
|
||||
|
||||
thread__ int64 lastFiFont = INT_MIN;
|
||||
thread__ CommonFontInfo lastFontInfo;
|
||||
thread__ int64 lastStdFont = INT_MIN;
|
||||
|
||||
const CommonFontInfo& Font::Fi() const
|
||||
{
|
||||
if(lastStdFont != AStdFont.AsInt64()) {
|
||||
lastFiFont = INT_MIN;
|
||||
lastStdFont = AStdFont.AsInt64();
|
||||
}
|
||||
if(AsInt64() == lastFiFont)
|
||||
return lastFontInfo;
|
||||
lastFontInfo = GetFontInfo(*this);
|
||||
lastFiFont = AsInt64();
|
||||
return lastFontInfo;
|
||||
}
|
||||
|
||||
FontInfo Font::Info() const
|
||||
{
|
||||
FontInfo h;
|
||||
h.font = *this;
|
||||
return h;
|
||||
}
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
|
|
|||
|
|
@ -182,16 +182,13 @@ Vector<FaceInfo> GetAllFacesSys()
|
|||
"serif",
|
||||
"sans-serif",
|
||||
"monospace",
|
||||
"serif",
|
||||
"sans-serif",
|
||||
"monospace",
|
||||
};
|
||||
|
||||
Vector<FaceInfo> list;
|
||||
for(int i = 0; i < __countof(basic_fonts); i++) {
|
||||
FaceInfo& fi = list.Add();
|
||||
fi.name = basic_fonts[i];
|
||||
fi.info = (i == 3 || i == 6) ? Font::SCALEABLE|Font::FIXEDPITCH : Font::SCALEABLE;
|
||||
fi.info = (i == 3) ? Font::SCALEABLE|Font::FIXEDPITCH : Font::SCALEABLE;
|
||||
}
|
||||
FcPattern *p = FcPatternCreate();
|
||||
FcObjectSet *os = FcObjectSetBuild(FC_FAMILY, FC_SPACING, FC_SCALABLE, (void *)0);
|
||||
|
|
|
|||
|
|
@ -209,14 +209,8 @@ Vector<FaceInfo> GetAllFacesSys()
|
|||
Win32_ForceFace(hdc, "Tahoma", "Tahoma");
|
||||
Win32_ForceFace(hdc, "Tahoma", "Tahoma");
|
||||
Win32_ForceFace(hdc, "Tahoma", "Tahoma");
|
||||
Win32_ForceFace(hdc, "Tahoma", "Tahoma");
|
||||
Win32_ForceFace(hdc, "Tahoma", "Tahoma");
|
||||
Win32_ForceFace(hdc, "Tahoma", "Tahoma");
|
||||
#else
|
||||
HDC hdc = CreateIC("DISPLAY", NULL, NULL, NULL);
|
||||
Win32_ForceFace(hdc, "Arial", NULL);
|
||||
Win32_ForceFace(hdc, "Times New Roman", "Arial");
|
||||
Win32_ForceFace(hdc, "Courier New", "Arial");
|
||||
Win32_ForceFace(hdc, "Times New Roman", "Arial");
|
||||
Win32_ForceFace(hdc, "Arial", "Arial");
|
||||
Win32_ForceFace(hdc, "Courier New", "Arial");
|
||||
|
|
|
|||
|
|
@ -1,13 +1,334 @@
|
|||
TITLE("Font")
|
||||
COMPRESSED
|
||||
120,156,189,90,9,115,219,182,18,254,43,232,180,205,200,142,236,240,180,100,169,237,196,241,209,106,154,216,25,31,233,235,120,44,11,34,33,11,45,69,234,17,144,28,191,76,242,219,187,0,72,10,148,120,72,178,251,236,177,69,145,216,19,187,223,98,1,222,90,232,135,31,140,166,241,189,81,243,211,57,33,35,60,11,248,221,45,117,156,118,23,91,110,247,239,223,47,14,187,187,111,27,7,206,142,224,98,2,23,187,101,218,109,215,54,29,235,0,254,153,182,105,185,150,237,152,109,235,208,105,219,118,219,232,120,1,102,236,238,54,176,218,237,174,32,178,128,200,106,185,150,217,114,218,78,219,180,91,109,11,104,45,195,176,140,150,229,154,142,221,182,220,142,79,152,119,119,139,219,118,119,247,242,0,136,108,33,9,152,27,230,129,229,180,28,203,176,13,203,1,81,102,187,237,152,45,183,109,31,30,28,116,60,60,229,52,10,19,89,212,52,45,179,59,52,91,93,208,249,219,183,111,251,166,99,40,13,28,96,102,26,14,168,106,194,61,195,177,90,166,123,104,28,186,109,179,
|
||||
109,216,192,220,109,25,110,103,138,99,60,41,55,221,173,53,189,101,116,40,39,192,98,247,181,105,182,128,228,160,121,240,189,233,180,192,208,182,237,184,237,150,1,194,45,203,178,109,203,180,173,195,67,203,61,112,91,157,49,193,62,137,239,110,191,220,127,253,241,244,124,239,230,10,221,50,179,251,123,103,0,191,103,81,200,197,167,244,104,7,221,254,104,24,123,134,241,182,97,236,27,251,150,235,238,160,196,213,234,62,186,79,175,222,26,72,144,46,30,116,22,143,22,196,211,152,206,49,39,171,228,125,33,243,136,49,250,16,126,194,193,140,92,63,77,201,121,212,71,43,183,50,210,159,202,36,55,81,198,244,236,226,252,122,112,255,169,143,146,139,162,49,66,240,135,104,78,240,48,32,125,148,94,213,139,249,229,254,151,187,87,119,183,204,234,202,251,136,50,132,145,23,133,94,76,56,81,94,66,124,140,57,18,97,22,211,33,17,95,9,194,211,41,129,89,15,61,130,162,17,226,228,51,223,71,61,73,157,138,110,162,49,102,200,131,73,154,2,191,233,19,138,166,36,198,34,
|
||||
232,16,14,125,49,82,186,67,200,154,147,152,83,32,65,143,148,143,81,76,189,241,96,79,61,196,67,26,80,78,9,219,79,116,76,62,148,40,198,163,152,134,15,136,17,224,128,3,132,57,7,13,103,92,232,24,101,10,75,125,149,134,215,99,33,47,142,9,155,70,161,47,73,159,24,4,30,26,37,166,11,142,4,148,11,37,209,40,138,39,194,188,17,6,51,105,232,147,207,104,176,135,8,246,198,57,58,97,39,155,18,143,142,168,151,12,155,11,237,165,188,24,140,128,63,22,77,8,132,13,241,201,136,134,82,2,12,3,61,65,4,104,52,153,128,87,4,47,214,17,6,26,210,78,244,229,139,229,30,186,157,150,99,184,63,65,196,119,251,72,216,30,24,221,221,52,158,145,10,243,206,213,245,137,8,141,187,187,78,231,231,116,16,186,226,224,103,28,251,232,215,155,158,82,52,21,62,124,66,211,0,115,97,222,62,58,198,33,2,39,225,128,147,88,61,59,137,241,163,96,74,248,21,247,133,132,125,224,91,46,252,242,226,195,209,121,137,104,70,98,58,146,194,171,121,28,
|
||||
93,246,142,222,151,241,192,33,27,236,173,203,233,248,226,230,178,119,122,89,194,11,252,28,177,41,76,167,191,6,171,171,63,63,188,187,40,213,234,105,50,140,130,132,203,215,175,249,240,188,134,104,67,19,2,209,232,169,41,86,169,21,50,46,51,198,83,46,143,134,28,167,243,209,11,71,145,160,24,71,43,209,39,104,229,99,21,84,66,132,187,132,114,201,252,119,80,209,195,95,9,63,3,139,143,163,25,124,111,12,118,50,52,132,104,135,124,244,80,1,192,81,29,2,53,232,208,121,101,3,26,59,41,130,92,18,62,139,67,133,16,225,108,50,36,113,154,62,131,189,16,79,32,222,241,28,211,64,192,195,254,34,208,203,52,62,7,138,65,3,84,169,208,89,226,222,21,23,48,208,71,234,179,74,113,193,114,161,247,218,134,219,42,95,179,39,197,6,3,239,12,45,146,145,187,25,105,149,189,103,48,36,213,174,39,70,15,26,128,138,140,3,122,226,120,176,251,188,41,91,97,94,105,191,148,91,192,71,27,1,58,45,6,12,118,53,39,133,186,119,51,31,9,5,148,135,
|
||||
52,28,205,194,66,115,148,36,95,35,46,68,50,172,21,23,254,99,20,251,125,36,63,170,162,66,48,252,183,162,130,134,34,143,147,186,55,140,102,188,36,62,144,40,150,209,100,72,67,53,22,28,36,174,227,39,52,10,240,195,74,93,104,183,160,46,152,118,86,23,10,224,235,172,247,159,211,147,143,189,235,227,223,82,8,51,84,141,31,236,169,137,96,26,28,166,72,88,4,131,199,71,239,79,143,222,189,63,45,101,51,138,9,9,158,16,243,176,76,109,212,160,178,152,2,142,205,137,7,21,21,41,23,52,17,217,127,128,162,24,207,8,135,69,208,78,149,76,9,189,215,127,126,92,22,42,2,84,160,38,75,0,152,73,84,133,133,160,112,88,64,56,20,49,86,193,247,248,226,195,199,139,171,211,19,141,235,205,224,245,224,53,154,49,146,20,113,88,71,120,145,79,196,10,2,230,99,26,49,130,38,20,150,111,176,88,120,15,83,19,202,4,192,158,16,36,128,91,205,153,120,74,62,83,198,197,197,98,64,90,25,86,18,62,155,154,14,68,97,69,168,11,188,150,41,217,
|
||||
209,162,49,181,73,139,74,185,214,46,10,237,252,128,198,78,54,36,201,244,52,71,115,153,41,107,126,117,30,254,70,232,195,152,63,75,61,197,98,77,5,245,148,26,75,66,9,33,245,138,254,65,125,62,126,150,158,146,195,70,106,74,45,31,5,89,170,36,130,36,48,228,74,192,87,141,162,122,188,118,17,44,87,95,47,128,74,185,124,21,44,141,12,189,20,110,224,252,69,49,151,107,106,181,128,157,193,146,90,91,224,172,141,225,53,102,41,252,86,202,229,64,188,212,40,29,201,107,140,186,18,38,0,232,106,148,141,228,186,177,179,83,101,194,90,186,167,171,182,68,253,244,107,185,5,27,168,174,207,71,52,252,11,48,22,90,139,104,78,101,71,35,64,43,16,189,91,65,229,17,145,152,44,75,43,215,35,18,121,242,5,54,51,170,159,239,31,7,175,114,139,13,13,114,54,170,164,225,106,21,133,254,99,121,217,80,165,116,138,72,219,168,157,135,162,151,83,92,118,135,10,173,64,47,52,165,159,73,192,222,248,17,103,149,1,150,96,214,54,150,228,192,234,101,13,81,
|
||||
136,133,110,160,32,22,64,217,70,6,190,139,2,63,215,138,172,103,156,32,91,238,58,150,89,159,71,91,50,87,132,117,236,21,243,97,20,5,207,212,190,96,102,4,215,194,169,25,46,77,205,10,32,113,28,80,111,11,155,21,97,189,75,183,22,144,146,214,137,72,5,108,229,216,101,17,47,233,218,27,128,157,56,128,46,125,11,227,51,218,122,7,63,71,140,70,93,39,72,19,179,149,167,11,4,189,164,179,197,202,229,111,2,149,106,11,47,100,180,245,206,126,142,24,141,186,78,144,38,102,43,103,23,8,122,142,179,1,207,211,27,18,215,1,192,103,33,19,87,208,70,249,111,168,76,162,55,51,152,97,49,193,111,88,42,29,154,68,159,64,39,83,1,231,231,81,120,20,114,122,20,80,204,200,118,216,171,51,168,159,193,23,16,184,169,200,188,192,173,38,180,76,228,51,103,85,204,230,155,100,42,195,40,28,236,97,16,2,255,149,24,185,125,32,118,162,101,67,238,83,15,203,237,113,177,163,175,141,147,91,225,227,104,22,248,192,130,139,205,201,153,160,125,28,19,40,
|
||||
234,208,110,203,190,54,93,9,84,174,141,89,90,126,75,251,45,221,182,130,101,48,211,235,100,213,66,120,85,244,162,76,109,45,60,95,75,54,19,159,3,241,173,53,88,193,216,205,148,200,129,219,214,74,172,96,79,77,71,146,222,188,38,12,162,16,194,6,98,37,94,1,150,120,9,89,196,89,147,199,233,156,164,232,162,105,90,108,221,106,226,111,109,98,113,54,214,216,41,246,174,16,29,45,165,178,102,200,90,118,44,250,122,201,124,209,193,15,94,109,213,113,213,238,106,151,236,234,86,109,158,235,82,202,118,118,243,29,26,143,244,93,77,181,153,139,122,35,181,47,78,153,4,150,57,196,130,175,237,33,52,179,67,71,128,47,193,225,124,22,4,85,248,162,14,17,163,88,76,253,90,61,184,214,127,151,71,67,202,21,208,127,189,56,72,59,112,156,28,109,38,123,102,162,57,26,205,2,97,8,163,208,134,211,209,147,48,91,245,224,18,76,229,49,91,110,183,80,58,64,30,237,84,246,228,121,195,101,107,248,47,219,158,89,94,177,65,166,181,141,234,209,102,14,107,170,
|
||||
19,223,164,69,246,198,56,124,128,108,90,10,164,202,35,129,43,240,38,196,212,255,4,230,170,96,38,120,146,75,35,205,63,243,136,22,159,3,100,92,86,179,168,191,96,43,115,132,136,55,29,10,115,132,21,37,72,194,87,107,163,229,84,163,134,118,22,178,56,119,198,108,121,127,173,178,141,206,98,226,103,248,109,100,79,182,197,68,157,93,73,44,108,18,90,54,26,173,17,27,165,54,125,247,162,54,125,247,127,52,9,38,254,56,154,76,113,44,166,253,49,202,31,254,86,38,185,216,21,199,108,44,223,125,120,225,221,209,140,239,134,8,183,216,199,2,6,218,17,116,233,250,79,32,248,243,10,51,48,216,176,28,167,69,164,174,122,100,215,122,199,176,252,70,204,226,56,187,23,82,158,230,175,20,1,200,148,28,181,55,179,221,47,5,94,77,64,246,220,11,40,162,218,229,214,4,53,10,9,68,111,230,119,252,86,20,43,168,236,101,187,121,35,125,35,182,185,254,121,177,157,216,179,138,101,186,51,70,137,51,52,152,150,2,19,64,19,239,247,104,143,18,142,235,249,33,
|
||||
91,17,137,185,36,113,30,202,215,112,72,213,82,71,177,236,35,245,169,193,120,201,142,231,218,139,17,184,174,205,89,13,140,238,55,73,196,99,245,126,148,82,43,141,66,113,253,41,41,36,73,236,139,215,166,212,189,202,154,81,224,105,165,250,75,58,90,114,236,163,156,153,75,213,242,191,171,17,150,179,84,89,151,152,170,31,72,222,253,3,118,76,35,136,
|
||||
|
||||
topic "Font";
|
||||
[2 $$0,0#00000000000000000000000000000000:Default]
|
||||
[i448;a25;kKO9;*@(64)2 $$1,0#37138531426314131252341829483380:class]
|
||||
[l288;2 $$2,0#27521748481378242620020725143825:desc]
|
||||
[a83;*R6 $$3,0#31310162474203024125188417583966:caption]
|
||||
[l288;i1121;b17;O9;~~~.1408;2 $$4,0#10431211400427159095818037425705:param]
|
||||
[i448;a25;kKO9;*@(64)2 $$5,0#37138531426314131252341829483370:item]
|
||||
[*+117 $$6,6#14700283458701402223321329925657:header]
|
||||
[0 $$7,0#96390100711032703541132217272105:end]
|
||||
[H6;0 $$8,0#05600065144404261032431302351956:begin]
|
||||
[{_}
|
||||
[ {{10000t/25b/25@3 [s0; [*@(229)4 Font]]}}&]
|
||||
[s7; &]
|
||||
[s1;:Font`:`:class: [@(0.0.255) class][@0 _Font_:_][@(0.0.255) private][@0 _][@3 AssignValueType
|
||||
No][@0 <Font, FONT`_V, ][_^Moveable^@0 Moveable][@0 <Font>_>]&]
|
||||
[s2;%% Font is a concrete class that describes the appearance of
|
||||
text. It is Moveable, has cheap copy operation and is Value convertible
|
||||
with rich`-Value abilities.&]
|
||||
[s2;%% It is storing several attributes to describe the text. The
|
||||
corresponding system font is stored in the form of face index
|
||||
`- each system font has specific index value. There are some
|
||||
predefined indexes for common fonts:&]
|
||||
[s0;%% &]
|
||||
[ {{2595:7405<256;^ [s2;l0; [* Font`::STDFONT]]
|
||||
::= [s2;l0;%% Standard GUI font defined by platform. Can be altered by
|
||||
Draw`::SetStdFont.]
|
||||
::^ [s2;l0; [* Font`::SERIF]]
|
||||
::= [s2;l0;%% Standard serif font.]
|
||||
::^ [s2;l0; [* Font`::SANSSERIF]]
|
||||
::= [s2;l0;%% Standard sans`-serif font.]
|
||||
::^ [s2;l0; [* Font`::MONOSPACE]]
|
||||
::= [s2;l0;%% Standard fixed pitch font.]}}&]
|
||||
[s2;%% &]
|
||||
[s2;%% Font also provides text metrics services.&]
|
||||
[s7; &]
|
||||
[s0; &]
|
||||
[ {{10000F(128)G(128)@1 [s0;%% [* Public Member List]]}}&]
|
||||
[s7; &]
|
||||
[s5;:Font`:`:GetFaceCount`(`): [@(0.0.255) static][@0 ][@(0.0.255) int][@0 _GetFaceCount()]&]
|
||||
[s2;%% Returns the number of face`-names available.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:GetFaceName`(int`): [@(0.0.255) static][@0 ][_^String^@0 String][@0 _GetFaceNam
|
||||
e(][@(0.0.255) int][@0 _][@3 index][@0 )]&]
|
||||
[s2;%% Returns the name of face [%-*@3 index].&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:FindFaceNameIndex`(const String`&`): [@(0.0.255) static][@0
|
||||
][@(0.0.255) int][@0 _FindFaceNameIndex(][@(0.0.255) const][@0 _][_^String^@0 String][@(0.0.255) `&
|
||||
][@0 _][@3 name][@0 )]&]
|
||||
[s2;%% Finds the face index of face`-[%-*@3 name].&]
|
||||
[s7;%% &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:GetFaceInfo`(int`): [@(0.0.255) static][@0 ][_^dword^@0 dword][@0 _GetFaceInfo(
|
||||
][@(0.0.255) int][@0 _][@3 index][@0 )]&]
|
||||
[s2;%% Returns the information about face [%-*@3 index] as combination
|
||||
of binary flags:&]
|
||||
[ {{2587:7413<256;^ [s0; [* Font`::FIXEDPITCH]]
|
||||
::= [s0;%% Font`-face is monospaced.]
|
||||
::^ [s0; [* Font`::SCALEABLE]]
|
||||
::= [s0;%% Font`-face is freely scalable (it is in vector format, e.g.
|
||||
Truetype).]}}&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:SetStdFont`(Font`): [@(0.0.255) static][@0 ][@(0.0.255) void][@0 _SetStdFont(][_^Font^@0 F
|
||||
ont][@0 _][@3 font][@0 )]&]
|
||||
[s2;%% Sets the standard font. U`+`+ sets the standard font to match
|
||||
host platform standard. This method can be used to change this
|
||||
default setting.&]
|
||||
[s7;%% &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:GetStdFont`(`): [@(0.0.255) static][@0 ][_^Font^@0 Font][@0 _GetStdFont()]&]
|
||||
[s2;%% Returns the standard font.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:GetStdFontSize`(`): [@(0.0.255) static][@0 ][_^Size^@0 Size][@0 _GetStdFontSize
|
||||
()]&]
|
||||
[s2;%% Returns metrics of standard font `- height and average width
|
||||
of glyphs.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:GetFace`(`)const: [@(0.0.255) int][@0 _GetFace()_][@(0.0.255) const]&]
|
||||
[s2;%% Face index of Font.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:GetHeight`(`)const: [@(0.0.255) int][@0 _GetHeight()_][@(0.0.255) const]&]
|
||||
[s2;%% Returns the requested height of font.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:GetWidth`(`)const: [@(0.0.255) int][@0 _GetWidth()_][@(0.0.255) const]&]
|
||||
[s2;%% Return the width of font or 0 for default width.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:GetFaceName`(`)const: [_^String^@0 String][@0 _GetFaceName()]_[@(0.0.255) cons
|
||||
t]&]
|
||||
[s2;%% Returns the face`-name text for current instance.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:GetFaceInfo`(`)const: [_^dword^@0 dword][@0 _GetFaceInfo()]_[@(0.0.255) const]&]
|
||||
[s2;%% Same as GetFaceInfo(GetFace()).&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:AsInt64`(`)const: [_^int64^@0 int64][@0 _AsInt64()]_[@(0.0.255) const]&]
|
||||
[s2;%% Returns 64`-bit number representing the font.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:Face`(int`): [_^Font^@0 Font][@(0.0.255) `&][@0 _Face(][@(0.0.255) int][@0 _][@3 n][@0 )
|
||||
]&]
|
||||
[s2;%% Sets the face index.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:Height`(int`): [_^Font^@0 Font][@(0.0.255) `&][@0 _Height(][@(0.0.255) int][@0 _][@3 n
|
||||
][@0 )]&]
|
||||
[s2;%% Sets the font height (in pixels/dots).&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:Width`(int`): [_^Font^@0 Font][@(0.0.255) `&][@0 _Width(][@(0.0.255) int][@0 _][@3 n
|
||||
][@0 )]&]
|
||||
[s2;%% Sets the font width. Use 0 for default width (in pixels/dots).&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:Bold`(`): [_^Font^@0 Font][@(0.0.255) `&][@0 _Bold()]&]
|
||||
[s5;:Font`:`:NoBold`(`): [_^Font^@0 Font][@(0.0.255) `&][@0 _NoBold()]&]
|
||||
[s5;:Font`:`:Bold`(bool`): [_^Font^@0 Font][@(0.0.255) `&][@0 _Bold(][@(0.0.255) bool][@0 _][@3 b
|
||||
][@0 )]&]
|
||||
[s5;:Font`:`:Italic`(`): [_^Font^@0 Font][@(0.0.255) `&][@0 _Italic()]&]
|
||||
[s5;:Font`:`:NoItalic`(`): [_^Font^@0 Font][@(0.0.255) `&][@0 _NoItalic()]&]
|
||||
[s5;:Font`:`:Italic`(bool`): [_^Font^@0 Font][@(0.0.255) `&][@0 _Italic(][@(0.0.255) bool][@0 _
|
||||
][@3 b][@0 )]&]
|
||||
[s5;:Font`:`:Underline`(`): [_^Font^@0 Font][@(0.0.255) `&][@0 _Underline()]&]
|
||||
[s5;:Font`:`:NoUnderline`(`): [_^Font^@0 Font][@(0.0.255) `&][@0 _NoUnderline()]&]
|
||||
[s5;:Font`:`:Underline`(bool`): [_^Font^@0 Font][@(0.0.255) `&][@0 _Underline(][@(0.0.255) bo
|
||||
ol][@0 _][@3 b][@0 )]&]
|
||||
[s5;:Font`:`:Strikeout`(`): [_^Font^@0 Font][@(0.0.255) `&][@0 _Strikeout()]&]
|
||||
[s5;:Font`:`:NoStrikeout`(`): [_^Font^@0 Font][@(0.0.255) `&][@0 _NoStrikeout()]&]
|
||||
[s5;:Font`:`:Strikeout`(bool`): [_^Font^@0 Font][@(0.0.255) `&][@0 _Strikeout(][@(0.0.255) bo
|
||||
ol][@0 _][@3 b][@0 )]&]
|
||||
[s2; Sets or unsets bold/italic/undeline/strikeout modes.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:NonAntiAliased`(`): [_^Font^@0 Font][@(0.0.255) `&][@0 _NonAntiAliased()]&]
|
||||
[s5;:Font`:`:NoNonAntiAliased`(`): [_^Font^@0 Font][@(0.0.255) `&][@0 _NoNonAntiAliased()]&]
|
||||
[s5;:Font`:`:NonAntiAliased`(bool`): [_^Font^@0 Font][@(0.0.255) `&][@0 _NonAntiAliased(][@(0.0.255) b
|
||||
ool][@0 _][@3 b][@0 )]&]
|
||||
[s2;%% Sets/unsets non`-anti`-aliased flag. This indicates that anti`-aliasing
|
||||
should not be used when painting the font.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:IsBold`(`)const: [@(0.0.255) bool][@0 _IsBold()_][@(0.0.255) const]&]
|
||||
[s5;:Font`:`:IsItalic`(`)const: [@(0.0.255) bool][@0 _IsItalic()_][@(0.0.255) const]&]
|
||||
[s5;:Font`:`:IsUnderline`(`)const: [@(0.0.255) bool][@0 _IsUnderline()_][@(0.0.255) const]&]
|
||||
[s5;:Font`:`:IsStrikeout`(`)const: [@(0.0.255) bool][@0 _IsStrikeout()_][@(0.0.255) const]&]
|
||||
[s2; Tests whether bold/italic/underline/strikeout is active.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:IsNonAntiAliased`(`)const: [@(0.0.255) bool][@0 _IsNonAntiAliased()_][@(0.0.255) c
|
||||
onst]&]
|
||||
[s2;%% True if NonAntiAliased is active.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:FaceName`(const String`&`): [_^Font^@0 Font][@(0.0.255) `&][@0 _FaceName(][@(0.0.255) c
|
||||
onst][@0 _][_^String^@0 String][@(0.0.255) `&][@0 _][@3 name][@0 )]&]
|
||||
[s2;%% Sets the face to [%-*@3 name]. If name is not valid face`-name,
|
||||
Font is set to Null.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:operator`(`)`(`)const: [_^Font^@0 Font]_[@(0.0.255) operator][@0 ()()]_[@(0.0.255) c
|
||||
onst]&]
|
||||
[s2;%% Returns a copy of Font. Useful to simplify notation when altering
|
||||
existing Font values.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:operator`(`)`(int`)const: [_^Font^@0 Font]_[@(0.0.255) operator][@0 ()(][@(0.0.255) i
|
||||
nt][@0 _][@3 n][@0 )_][@(0.0.255) const]&]
|
||||
[s2;%% Returns a copy of Font, with height changed to [%-*@3 n].&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:Serialize`(Stream`&`): [@(0.0.255) void][@0 _Serialize(][_^Stream^@0 Stream][@(0.0.255) `&
|
||||
][@0 _][@3 s][@0 )]&]
|
||||
[s2;%% Serializes the font value (face index is stored as face`-name
|
||||
text).&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:operator`=`=`(Font`)const: [@(0.0.255) bool][@0 _operator`=`=(][_^Font^@0 Font
|
||||
][@0 _][@3 f][@0 )_][@(0.0.255) const]&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:operator`!`=`(Font`)const: [@(0.0.255) bool][@0 _operator!`=(][_^Font^@0 Font][@0 _
|
||||
][@3 f][@0 )_][@(0.0.255) const]&]
|
||||
[s2;%% Compares two Font instances.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:GetHashValue`(`)const: [_^dword^@0 dword][@0 _GetHashValue()]_[@(0.0.255) cons
|
||||
t]&]
|
||||
[s2;%% Returns the font hash value.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:IsNull`(`)const: [@(0.0.255) bool][@0 _IsNull()_][@(0.0.255) const]&]
|
||||
[s2;%% True if Font is Null.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:GetAscent`(`)const: [@(0.0.255) int][@0 _GetAscent()_][@(0.0.255) const]&]
|
||||
[s2;%% Returns the character cell extend above the baseline.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:GetDescent`(`)const: [@(0.0.255) int][@0 _GetDescent()_][@(0.0.255) const]&]
|
||||
[s2;%% Returns the character cell extend below the baseline.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:GetCy`(`)const: [@(0.0.255) int][@0 _GetCy()_][@(0.0.255) const]&]
|
||||
[s2;%% Same as GetDescent() `+ GetAscent().&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:GetExternal`(`)const: [@(0.0.255) int][@0 _GetExternal()_][@(0.0.255) const]&]
|
||||
[s2;%% Returns the additional space that font description recommends
|
||||
to insert between two lines of text. Rarely used.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:GetInternal`(`)const: [@(0.0.255) int][@0 _GetInternal()_][@(0.0.255) const]&]
|
||||
[s2;%% Returns the mostly free space inside GetAscent value. Rarely
|
||||
used.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:GetHeight`(`)const: [@(0.0.255) int][@0 _GetHeight()_][@(0.0.255) const]&]
|
||||
[s2;%% Returns GetAscent() `+ GetDescent() `- the height of the line
|
||||
of text.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:GetLineHeight`(`)const: [@(0.0.255) int][@0 _GetLineHeight()_][@(0.0.255) cons
|
||||
t]&]
|
||||
[s2;%% Returns GetHeight() `+ GetExternal().&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:GetOverhang`(`)const: [@(0.0.255) int][@0 _GetOverhang()_][@(0.0.255) const]&]
|
||||
[s2;%% Returns overhang of font.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:GetAveWidth`(`)const: [@(0.0.255) int][@0 _GetAveWidth()_][@(0.0.255) const]&]
|
||||
[s2;%% Returns the average width of character.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:GetMaxWidth`(`)const: [@(0.0.255) int][@0 _GetMaxWidth()_][@(0.0.255) const]&]
|
||||
[s2;%% Returns the maximal width of character.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:IsNormal`(int`)const: [@(0.0.255) bool][@0 _IsNormal(][@(0.0.255) int][@0 _][@3 ch
|
||||
][@0 )_][@(0.0.255) const]&]
|
||||
[s2;%% Returns true if [%-*@3 ch] exists as regular glyph in the font.&]
|
||||
[s7;%% &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:IsComposed`(int`)const: [@(0.0.255) bool][@0 _IsComposed(][@(0.0.255) int][@0 _][@3 c
|
||||
h][@0 )_][@(0.0.255) const]&]
|
||||
[s2;%% Returns true if [%-*@3 ch].is to be rendered as composition
|
||||
of 2 other glyphs (ASCII letter and diacritical mark).&]
|
||||
[s7;%% &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:IsReplaced`(int`)const: [@(0.0.255) bool][@0 _IsReplaced(][@(0.0.255) int][@0 _][@3 c
|
||||
h][@0 )_][@(0.0.255) const]&]
|
||||
[s2;%% Returns true [%-*@3 ch] is to be rendered using character from
|
||||
some other font.&]
|
||||
[s7;%% &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:IsMissing`(int`)const: [@(0.0.255) bool][@0 _IsMissing(][@(0.0.255) int][@0 _][@3 c
|
||||
h][@0 )_][@(0.0.255) const]&]
|
||||
[s2;%% Returns true if [%-*@3 ch] cannot be rendered.&]
|
||||
[s7;%% &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:HasChar`(int`)const: [@(0.0.255) int][@0 _HasChar(][@(0.0.255) int][@0 _][@3 ch][@0 )
|
||||
_][@(0.0.255) const]&]
|
||||
[s2;%% Returns true if [%-*@3 ch] can be rendered (in any way).&]
|
||||
[s7;%% &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:GetWidth`(int`)const: [@(0.0.255) int][@0 _GetWidth(][@(0.0.255) int][@0 _][@3 c][@0 )
|
||||
_][@(0.0.255) const]&]
|
||||
[s2;%% Returns the total advance with of character [%-*@3 c] (encoded
|
||||
in unicode).&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:operator`[`]`(int`)const: [@(0.0.255) int][@0 _operator`[`](][@(0.0.255) int][@0 _
|
||||
][@3 c][@0 )_][@(0.0.255) const]&]
|
||||
[s2;%% Same as GetWidth([%-*@3 c]).&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:GetLeftSpace`(int`)const: [@(0.0.255) int][@0 _GetLeftSpace(][@(0.0.255) int][@0 _
|
||||
][@3 c][@0 )_][@(0.0.255) const]&]
|
||||
[s2;%% Describes the relation of left side of character cell and
|
||||
leftmost area painted for character [%-*@3 c]. Negative value means
|
||||
that character extends character cell, positive value means that
|
||||
there is a space inside the cell not used for glyph.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:GetRightSpace`(int`)const: [@(0.0.255) int][@0 _GetRightSpace(][@(0.0.255) int
|
||||
][@0 _][@3 c][@0 )_][@(0.0.255) const]&]
|
||||
[s2;%% Similar to GetLeftSpace for the right edge of character cell.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:IsFixedPitch`(`)const: [@(0.0.255) bool][@0 _IsFixedPitch()_][@(0.0.255) const
|
||||
]&]
|
||||
[s2;%% True if font is mono`-spaced.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:IsScaleable`(`)const: [@(0.0.255) bool][@0 _IsScaleable()_][@(0.0.255) const]&]
|
||||
[s2;%% True if font is freely scaleable.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:GetPath`(`)const: [_^String^@0 String][@0 _GetPath()]_[@(0.0.255) const]&]
|
||||
[s2;%% [/ POSIX specific:] Returns the path of font file.&]
|
||||
[s0; &]
|
||||
[ {{10000t/25b/25@1 [s0; [* Constructor Detail]]}}&]
|
||||
[s7; &]
|
||||
[s8;H0; &]
|
||||
[s5;:Font`:`:Font`(`): [@0 Font()]&]
|
||||
[s2;%% Initializes Font to STDFONT, default height, all attributes
|
||||
not active.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:Font`(int`,int`): [@0 Font(][@(0.0.255) int][@0 _][@3 face][@0 ,
|
||||
][@(0.0.255) int][@0 _][@3 height][@0 )]&]
|
||||
[s2;%% Initializes font to [%-*@3 face] index and [%-*@3 height].&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:Font`(const Nuller`&`): [@0 Font(][@(0.0.255) const][@0 _][_^Nuller^@0 Nuller][@(0.0.255) `&
|
||||
][@0 )]&]
|
||||
[s2;%% Sets the font Null.&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:operator Value`(`)const: [@0 operator_Value()]_[@(0.0.255) const]&]
|
||||
[s2;%% Converts the Font to the Value (font is rich Value).&]
|
||||
[s7; &]
|
||||
[s8; &]
|
||||
[s5;:Font`:`:Font`(const Value`&`): [@0 Font(][@(0.0.255) const][@0 _][_^Value^@0 Value][@(0.0.255) `&
|
||||
][@0 _][@3 q][@0 )]&]
|
||||
[s2;%% Converts the Value to the Font.&]
|
||||
[s0; ]
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
TITLE("FontInfo")
|
||||
COMPRESSED
|
||||
120,156,181,88,13,79,219,56,24,254,43,150,182,161,150,65,101,59,73,147,182,183,19,211,177,221,161,109,220,4,59,221,73,85,161,110,226,180,214,242,181,216,45,160,211,237,183,223,107,167,105,27,40,109,104,1,16,202,135,223,199,239,243,126,199,125,138,94,191,198,71,248,21,222,242,211,61,229,33,155,70,106,208,23,182,237,245,24,117,122,223,63,253,217,233,29,158,52,218,118,83,163,16,64,177,92,98,121,142,69,108,218,134,127,196,34,212,161,150,77,60,218,177,61,203,242,112,215,143,152,148,131,126,68,61,175,167,133,40,8,81,215,161,196,181,61,219,35,150,235,81,144,165,24,83,236,82,135,216,150,71,157,110,192,165,63,232,51,207,234,29,94,180,65,200,210,59,1,56,38,109,106,187,54,197,22,166,54,108,69,60,207,38,174,227,89,157,118,187,235,179,76,137,52,153,239,37,8,161,164,55,34,110,15,116,254,249,243,103,139,216,184,208,192,6,48,130,109,80,149,192,51,108,83,151,56,29,220,113,60,226,97,11,192,29,23,59,221,140,229,44,126,156,186,179,149,
|
||||
186,139,187,66,113,128,56,124,75,136,11,34,237,163,246,43,98,187,64,212,179,108,199,115,49,108,78,41,181,44,74,44,218,233,80,167,237,184,221,9,103,1,207,7,253,127,175,255,123,243,225,252,248,175,75,212,151,164,247,169,59,132,223,143,105,162,206,146,48,213,215,198,170,93,212,127,131,241,49,198,39,13,220,194,45,234,56,77,52,55,119,241,28,93,151,87,39,24,149,226,203,151,221,229,235,37,64,150,139,25,83,252,33,196,149,222,247,75,58,227,108,20,241,43,84,94,45,22,254,178,105,175,95,175,7,7,131,190,164,61,244,53,79,103,2,252,139,20,191,85,40,230,42,23,190,68,97,154,163,177,152,241,196,136,182,208,183,137,144,8,254,114,176,199,240,56,77,162,187,130,25,186,17,106,130,124,48,83,134,2,206,51,228,167,217,29,74,51,158,51,237,123,137,26,34,81,60,79,88,4,18,83,201,53,66,200,115,158,248,28,150,78,19,37,146,49,98,73,128,126,76,193,59,240,40,206,34,225,3,223,0,201,59,9,254,66,105,136,228,132,229,229,58,159,249,19,
|
||||
184,110,182,180,250,206,26,79,100,42,239,94,221,127,120,202,20,187,66,143,137,252,206,213,123,233,243,68,13,27,195,166,15,90,171,238,138,3,74,147,1,145,165,123,32,236,42,206,92,64,84,151,52,154,139,69,200,0,151,86,191,224,106,154,131,121,212,4,72,3,61,230,131,149,144,207,163,8,129,27,56,16,101,35,112,168,121,63,98,146,71,34,225,134,50,238,109,162,113,202,247,231,49,199,120,54,34,35,30,165,55,79,37,242,225,182,136,154,189,152,148,32,59,80,97,65,32,116,0,179,8,201,140,249,218,17,76,65,86,36,10,233,90,152,11,83,218,32,152,33,98,99,96,9,82,41,232,35,121,174,128,176,186,225,144,57,234,38,69,154,174,212,49,172,179,171,133,46,88,206,139,68,8,106,24,225,44,121,6,35,148,32,59,24,33,78,165,2,109,195,156,243,185,21,128,33,212,138,101,180,163,25,139,166,252,169,188,254,224,98,60,217,47,72,11,136,39,114,90,168,221,104,162,225,219,149,88,215,247,199,134,242,196,224,26,135,193,157,246,222,194,121,219,121,125,134,
|
||||
229,207,192,109,9,243,116,126,133,220,130,95,153,1,141,102,13,245,223,207,248,223,34,80,147,253,170,224,28,100,151,156,155,65,215,24,115,104,41,32,175,205,190,168,39,53,148,255,194,110,247,87,190,4,217,37,87,216,173,136,161,90,236,164,252,92,115,80,111,15,229,215,105,62,168,33,108,33,191,250,170,14,93,149,42,32,203,130,25,211,157,220,12,1,171,156,75,165,15,13,58,106,64,191,79,3,232,233,34,65,211,68,232,235,173,1,89,204,16,105,62,236,15,7,123,153,102,21,232,37,205,115,201,98,136,97,185,112,69,163,98,131,58,9,248,153,135,234,82,215,217,125,67,97,1,244,146,124,79,77,31,28,241,34,32,160,254,155,137,79,135,65,4,219,35,211,40,42,49,97,134,2,61,195,233,247,186,183,32,232,26,12,101,76,143,136,129,25,57,31,9,160,22,58,231,99,128,135,129,200,52,28,24,83,153,9,68,232,201,75,145,98,222,144,247,118,60,66,89,42,197,122,89,80,60,231,122,172,101,213,254,102,134,25,173,109,146,42,211,212,138,121,56,186,203,38,
|
||||
53,220,120,161,75,240,179,248,113,137,244,162,129,43,98,17,177,92,79,48,171,177,99,56,27,215,154,150,200,131,241,26,127,214,48,199,39,232,64,48,177,23,182,56,218,207,32,115,172,221,172,65,170,239,142,80,77,57,250,180,242,248,189,208,17,230,196,16,26,185,169,121,15,230,198,210,180,171,81,78,6,149,91,58,208,153,177,181,123,156,201,143,226,150,7,95,133,242,55,247,190,81,154,70,143,219,118,21,166,102,247,251,150,67,50,137,176,32,7,57,20,167,73,58,60,54,121,180,117,8,60,147,151,62,139,204,247,234,94,74,47,80,118,212,89,143,182,48,183,202,18,166,70,56,235,219,77,58,47,190,61,175,10,93,244,229,198,152,126,184,160,214,192,161,197,138,218,4,121,155,142,20,84,81,120,14,156,74,125,107,114,121,134,129,117,9,179,3,15,227,138,249,216,29,230,105,92,147,28,66,53,232,137,136,159,67,87,222,234,174,75,165,207,23,230,14,43,110,54,19,158,3,215,164,251,15,33,40,131,246,8,89,31,67,163,225,190,8,133,223,170,88,33,99,48,65,
|
||||
1,215,16,144,139,113,234,126,205,216,230,206,202,125,195,236,95,121,116,48,108,46,207,167,214,156,8,53,150,100,150,135,87,134,197,131,147,167,117,226,195,131,213,154,25,46,158,55,75,35,252,166,15,134,12,96,62,245,97,28,67,13,115,106,84,127,14,124,183,141,85,229,212,231,106,179,138,43,99,225,187,93,76,240,148,189,214,154,227,189,148,98,156,196,250,27,186,212,164,174,69,170,158,222,230,214,21,7,204,109,47,17,143,51,117,247,160,80,12,254,7,99,121,167,180,
|
||||
Loading…
Add table
Add a link
Reference in a new issue