lazarus/components/aggpas/src/agg_gsv_text.pas
mattias 36a2b1ea07 added aggpas
git-svn-id: trunk@21942 -
2009-10-01 12:24:32 +00:00

975 lines
28 KiB
ObjectPascal

//----------------------------------------------------------------------------
// Anti-Grain Geometry - Version 2.4 (Public License)
// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
//
// Anti-Grain Geometry - Version 2.4 Release Milano 3 (AggPas 2.4 RM3)
// Pascal Port By: Milan Marusinec alias Milano
// milan@marusinec.sk
// http://www.aggpas.org
// Copyright (c) 2005-2006
//
// Permission to copy, use, modify, sell and distribute this software
// is granted provided this copyright notice appears in all copies.
// This software is provided "as is" without express or implied
// warranty, and with no claim as to its suitability for any purpose.
//
//----------------------------------------------------------------------------
// Contact: mcseem@antigrain.com
// mcseemagg@yahoo.com
// http://www.antigrain.com
//
// [Pascal Port History] -----------------------------------------------------
//
// 23.06.2006-Milano: ptrcomp adjustments
// 21.12.2005-Milano: Unit port establishment
//
{ agg_gsv_text.pas }
unit
agg_gsv_text ;
INTERFACE
{$I agg_mode.inc }
{$Q- }
{$R- }
uses
SysUtils ,
agg_basics ,
agg_vertex_source ,
agg_conv_stroke ,
agg_conv_transform ,
agg_trans_affine ,
agg_math_stroke ;
{ TYPES DEFINITION }
type
status = (
initial,
next_char,
start_glyph,
glyph );
//---------------------------------------------------------------gsv_text
gsv_text_ptr = ^gsv_text;
gsv_text = object(vertex_source )
m_x ,
m_y ,
m_start_x ,
m_width ,
m_height ,
m_space ,
m_line_space : double;
m_chr : array[0..1 ] of byte;
m_text ,
m_text_buf : pointer;
m_buf_size : unsigned;
m_cur_chr : int8u_ptr;
m_font ,
m_loaded_font : pointer;
m_loadfont_sz : unsigned;
m_status : status;
m_big_endian ,
m_flip : boolean;
m_indices : int8u_ptr;
m_glyphs ,
m_bglyph ,
m_eglyph : int8_ptr;
m_w ,
m_h : double;
constructor Construct;
destructor Destruct; virtual;
procedure font_ (font : pointer );
procedure flip_ (flip_y : boolean );
procedure load_font_ (_file_ : shortstring );
procedure size_ (height : double; width : double = 0.0 );
procedure space_ (space : double );
procedure line_space_ (line_space : double );
procedure start_point_(x ,y : double );
procedure text_ (text : PChar );
procedure rewind(path_id : unsigned ); virtual;
function vertex(x ,y : double_ptr ) : unsigned; virtual;
function _value(p : int8u_ptr ) : int16u;
end;
//--------------------------------------------------------gsv_text_outline
gsv_text_outline = object(vertex_source )
m_polyline : conv_stroke;
m_trans : conv_transform;
constructor Construct(text : gsv_text_ptr; trans : trans_affine_ptr );
destructor Destruct; virtual;
procedure width_(w : double );
procedure transformer_(trans : trans_affine_ptr );
procedure rewind(path_id : unsigned ); virtual;
function vertex(x ,y : double_ptr ) : unsigned; virtual;
end;
{ GLOBAL PROCEDURES }
IMPLEMENTATION
{ LOCAL VARIABLES & CONSTANTS }
const
gsv_default_font : array[0..4525 ] of int8u = (
$40,$00,$6c,$0f,$15,$00,$0e,$00,$f9,$ff,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$0d,$0a,$0d,$0a,$46,$6f,$6e,$74,$20,$28,
$63,$29,$20,$4d,$69,$63,$72,$6f,$50,$72,
$6f,$66,$20,$32,$37,$20,$53,$65,$70,$74,
$65,$6d,$62,$2e,$31,$39,$38,$39,$00,$0d,
$0a,$0d,$0a,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$02,$00,$12,$00,$34,$00,$46,$00,$94,$00,
$d0,$00,$2e,$01,$3e,$01,$64,$01,$8a,$01,
$98,$01,$a2,$01,$b4,$01,$ba,$01,$c6,$01,
$cc,$01,$f0,$01,$fa,$01,$18,$02,$38,$02,
$44,$02,$68,$02,$98,$02,$a2,$02,$de,$02,
$0e,$03,$24,$03,$40,$03,$48,$03,$52,$03,
$5a,$03,$82,$03,$ec,$03,$fa,$03,$26,$04,
$4c,$04,$6a,$04,$7c,$04,$8a,$04,$b6,$04,
$c4,$04,$ca,$04,$e0,$04,$ee,$04,$f8,$04,
$0a,$05,$18,$05,$44,$05,$5e,$05,$8e,$05,
$ac,$05,$d6,$05,$e0,$05,$f6,$05,$00,$06,
$12,$06,$1c,$06,$28,$06,$36,$06,$48,$06,
$4e,$06,$60,$06,$6e,$06,$74,$06,$84,$06,
$a6,$06,$c8,$06,$e6,$06,$08,$07,$2c,$07,
$3c,$07,$68,$07,$7c,$07,$8c,$07,$a2,$07,
$b0,$07,$b6,$07,$d8,$07,$ec,$07,$10,$08,
$32,$08,$54,$08,$64,$08,$88,$08,$98,$08,
$ac,$08,$b6,$08,$c8,$08,$d2,$08,$e4,$08,
$f2,$08,$3e,$09,$48,$09,$94,$09,$c2,$09,
$c4,$09,$d0,$09,$e2,$09,$04,$0a,$0e,$0a,
$26,$0a,$34,$0a,$4a,$0a,$66,$0a,$70,$0a,
$7e,$0a,$8e,$0a,$9a,$0a,$a6,$0a,$b4,$0a,
$d8,$0a,$e2,$0a,$f6,$0a,$18,$0b,$22,$0b,
$32,$0b,$56,$0b,$60,$0b,$6e,$0b,$7c,$0b,
$8a,$0b,$9c,$0b,$9e,$0b,$b2,$0b,$c2,$0b,
$d8,$0b,$f4,$0b,$08,$0c,$30,$0c,$56,$0c,
$72,$0c,$90,$0c,$b2,$0c,$ce,$0c,$e2,$0c,
$fe,$0c,$10,$0d,$26,$0d,$36,$0d,$42,$0d,
$4e,$0d,$5c,$0d,$78,$0d,$8c,$0d,$8e,$0d,
$90,$0d,$92,$0d,$94,$0d,$96,$0d,$98,$0d,
$9a,$0d,$9c,$0d,$9e,$0d,$a0,$0d,$a2,$0d,
$a4,$0d,$a6,$0d,$a8,$0d,$aa,$0d,$ac,$0d,
$ae,$0d,$b0,$0d,$b2,$0d,$b4,$0d,$b6,$0d,
$b8,$0d,$ba,$0d,$bc,$0d,$be,$0d,$c0,$0d,
$c2,$0d,$c4,$0d,$c6,$0d,$c8,$0d,$ca,$0d,
$cc,$0d,$ce,$0d,$d0,$0d,$d2,$0d,$d4,$0d,
$d6,$0d,$d8,$0d,$da,$0d,$dc,$0d,$de,$0d,
$e0,$0d,$e2,$0d,$e4,$0d,$e6,$0d,$e8,$0d,
$ea,$0d,$ec,$0d,$0c,$0e,$26,$0e,$48,$0e,
$64,$0e,$88,$0e,$92,$0e,$a6,$0e,$b4,$0e,
$d0,$0e,$ee,$0e,$02,$0f,$16,$0f,$26,$0f,
$3c,$0f,$58,$0f,$6c,$0f,$6c,$0f,$6c,$0f,
$6c,$0f,$6c,$0f,$6c,$0f,$6c,$0f,$6c,$0f,
$6c,$0f,$6c,$0f,$6c,$0f,$6c,$0f,$6c,$0f,
$6c,$0f,$6c,$0f,$6c,$0f,$6c,$0f,$10,$80,
$05,$95,$00,$72,$00,$fb,$ff,$7f,$01,$7f,
$01,$01,$ff,$01,$05,$fe,$05,$95,$ff,$7f,
$00,$7a,$01,$86,$ff,$7a,$01,$87,$01,$7f,
$fe,$7a,$0a,$87,$ff,$7f,$00,$7a,$01,$86,
$ff,$7a,$01,$87,$01,$7f,$fe,$7a,$05,$f2,
$0b,$95,$f9,$64,$0d,$9c,$f9,$64,$fa,$91,
$0e,$00,$f1,$fa,$0e,$00,$04,$fc,$08,$99,
$00,$63,$04,$9d,$00,$63,$04,$96,$ff,$7f,
$01,$7f,$01,$01,$00,$01,$fe,$02,$fd,$01,
$fc,$00,$fd,$7f,$fe,$7e,$00,$7e,$01,$7e,
$01,$7f,$02,$7f,$06,$7e,$02,$7f,$02,$7e,
$f2,$89,$02,$7e,$02,$7f,$06,$7e,$02,$7f,
$01,$7f,$01,$7e,$00,$7c,$fe,$7e,$fd,$7f,
$fc,$00,$fd,$01,$fe,$02,$00,$01,$01,$01,
$01,$7f,$ff,$7f,$10,$fd,$15,$95,$ee,$6b,
$05,$95,$02,$7e,$00,$7e,$ff,$7e,$fe,$7f,
$fe,$00,$fe,$02,$00,$02,$01,$02,$02,$01,
$02,$00,$02,$7f,$03,$7f,$03,$00,$03,$01,
$02,$01,$fc,$f2,$fe,$7f,$ff,$7e,$00,$7e,
$02,$7e,$02,$00,$02,$01,$01,$02,$00,$02,
$fe,$02,$fe,$00,$07,$f9,$15,$8d,$ff,$7f,
$01,$7f,$01,$01,$00,$01,$ff,$01,$ff,$00,
$ff,$7f,$ff,$7e,$fe,$7b,$fe,$7d,$fe,$7e,
$fe,$7f,$fd,$00,$fd,$01,$ff,$02,$00,$03,
$01,$02,$06,$04,$02,$02,$01,$02,$00,$02,
$ff,$02,$fe,$01,$fe,$7f,$ff,$7e,$00,$7e,
$01,$7d,$02,$7d,$05,$79,$02,$7e,$03,$7f,
$01,$00,$01,$01,$00,$01,$f1,$fe,$fe,$01,
$ff,$02,$00,$03,$01,$02,$02,$02,$00,$86,
$01,$7e,$08,$75,$02,$7e,$02,$7f,$05,$80,
$05,$93,$ff,$01,$01,$01,$01,$7f,$00,$7e,
$ff,$7e,$ff,$7f,$06,$f1,$0b,$99,$fe,$7e,
$fe,$7d,$fe,$7c,$ff,$7b,$00,$7c,$01,$7b,
$02,$7c,$02,$7d,$02,$7e,$fe,$9e,$fe,$7c,
$ff,$7d,$ff,$7b,$00,$7c,$01,$7b,$01,$7d,
$02,$7c,$05,$85,$03,$99,$02,$7e,$02,$7d,
$02,$7c,$01,$7b,$00,$7c,$ff,$7b,$fe,$7c,
$fe,$7d,$fe,$7e,$02,$9e,$02,$7c,$01,$7d,
$01,$7b,$00,$7c,$ff,$7b,$ff,$7d,$fe,$7c,
$09,$85,$08,$95,$00,$74,$fb,$89,$0a,$7a,
$00,$86,$f6,$7a,$0d,$f4,$0d,$92,$00,$6e,
$f7,$89,$12,$00,$04,$f7,$06,$81,$ff,$7f,
$ff,$01,$01,$01,$01,$7f,$00,$7e,$ff,$7e,
$ff,$7f,$06,$84,$04,$89,$12,$00,$04,$f7,
$05,$82,$ff,$7f,$01,$7f,$01,$01,$ff,$01,
$05,$fe,$00,$fd,$0e,$18,$00,$eb,$09,$95,
$fd,$7f,$fe,$7d,$ff,$7b,$00,$7d,$01,$7b,
$02,$7d,$03,$7f,$02,$00,$03,$01,$02,$03,
$01,$05,$00,$03,$ff,$05,$fe,$03,$fd,$01,
$fe,$00,$0b,$eb,$06,$91,$02,$01,$03,$03,
$00,$6b,$09,$80,$04,$90,$00,$01,$01,$02,
$01,$01,$02,$01,$04,$00,$02,$7f,$01,$7f,
$01,$7e,$00,$7e,$ff,$7e,$fe,$7d,$f6,$76,
$0e,$00,$03,$80,$05,$95,$0b,$00,$fa,$78,
$03,$00,$02,$7f,$01,$7f,$01,$7d,$00,$7e,
$ff,$7d,$fe,$7e,$fd,$7f,$fd,$00,$fd,$01,
$ff,$01,$ff,$02,$11,$fc,$0d,$95,$f6,$72,
$0f,$00,$fb,$8e,$00,$6b,$07,$80,$0f,$95,
$f6,$00,$ff,$77,$01,$01,$03,$01,$03,$00,
$03,$7f,$02,$7e,$01,$7d,$00,$7e,$ff,$7d,
$fe,$7e,$fd,$7f,$fd,$00,$fd,$01,$ff,$01,
$ff,$02,$11,$fc,$10,$92,$ff,$02,$fd,$01,
$fe,$00,$fd,$7f,$fe,$7d,$ff,$7b,$00,$7b,
$01,$7c,$02,$7e,$03,$7f,$01,$00,$03,$01,
$02,$02,$01,$03,$00,$01,$ff,$03,$fe,$02,
$fd,$01,$ff,$00,$fd,$7f,$fe,$7e,$ff,$7d,
$10,$f9,$11,$95,$f6,$6b,$fc,$95,$0e,$00,
$03,$eb,$08,$95,$fd,$7f,$ff,$7e,$00,$7e,
$01,$7e,$02,$7f,$04,$7f,$03,$7f,$02,$7e,
$01,$7e,$00,$7d,$ff,$7e,$ff,$7f,$fd,$7f,
$fc,$00,$fd,$01,$ff,$01,$ff,$02,$00,$03,
$01,$02,$02,$02,$03,$01,$04,$01,$02,$01,
$01,$02,$00,$02,$ff,$02,$fd,$01,$fc,$00,
$0c,$eb,$10,$8e,$ff,$7d,$fe,$7e,$fd,$7f,
$ff,$00,$fd,$01,$fe,$02,$ff,$03,$00,$01,
$01,$03,$02,$02,$03,$01,$01,$00,$03,$7f,
$02,$7e,$01,$7c,$00,$7b,$ff,$7b,$fe,$7d,
$fd,$7f,$fe,$00,$fd,$01,$ff,$02,$10,$fd,
$05,$8e,$ff,$7f,$01,$7f,$01,$01,$ff,$01,
$00,$f4,$ff,$7f,$01,$7f,$01,$01,$ff,$01,
$05,$fe,$05,$8e,$ff,$7f,$01,$7f,$01,$01,
$ff,$01,$01,$f3,$ff,$7f,$ff,$01,$01,$01,
$01,$7f,$00,$7e,$ff,$7e,$ff,$7f,$06,$84,
$14,$92,$f0,$77,$10,$77,$04,$80,$04,$8c,
$12,$00,$ee,$fa,$12,$00,$04,$fa,$04,$92,
$10,$77,$f0,$77,$14,$80,$03,$90,$00,$01,
$01,$02,$01,$01,$02,$01,$04,$00,$02,$7f,
$01,$7f,$01,$7e,$00,$7e,$ff,$7e,$ff,$7f,
$fc,$7e,$00,$7d,$00,$fb,$ff,$7f,$01,$7f,
$01,$01,$ff,$01,$09,$fe,$12,$8d,$ff,$02,
$fe,$01,$fd,$00,$fe,$7f,$ff,$7f,$ff,$7d,
$00,$7d,$01,$7e,$02,$7f,$03,$00,$02,$01,
$01,$02,$fb,$88,$fe,$7e,$ff,$7d,$00,$7d,
$01,$7e,$01,$7f,$07,$8b,$ff,$78,$00,$7e,
$02,$7f,$02,$00,$02,$02,$01,$03,$00,$02,
$ff,$03,$ff,$02,$fe,$02,$fe,$01,$fd,$01,
$fd,$00,$fd,$7f,$fe,$7f,$fe,$7e,$ff,$7e,
$ff,$7d,$00,$7d,$01,$7d,$01,$7e,$02,$7e,
$02,$7f,$03,$7f,$03,$00,$03,$01,$02,$01,
$01,$01,$fe,$8d,$ff,$78,$00,$7e,$01,$7f,
$08,$fb,$09,$95,$f8,$6b,$08,$95,$08,$6b,
$f3,$87,$0a,$00,$04,$f9,$04,$95,$00,$6b,
$00,$95,$09,$00,$03,$7f,$01,$7f,$01,$7e,
$00,$7e,$ff,$7e,$ff,$7f,$fd,$7f,$f7,$80,
$09,$00,$03,$7f,$01,$7f,$01,$7e,$00,$7d,
$ff,$7e,$ff,$7f,$fd,$7f,$f7,$00,$11,$80,
$12,$90,$ff,$02,$fe,$02,$fe,$01,$fc,$00,
$fe,$7f,$fe,$7e,$ff,$7e,$ff,$7d,$00,$7b,
$01,$7d,$01,$7e,$02,$7e,$02,$7f,$04,$00,
$02,$01,$02,$02,$01,$02,$03,$fb,$04,$95,
$00,$6b,$00,$95,$07,$00,$03,$7f,$02,$7e,
$01,$7e,$01,$7d,$00,$7b,$ff,$7d,$ff,$7e,
$fe,$7e,$fd,$7f,$f9,$00,$11,$80,$04,$95,
$00,$6b,$00,$95,$0d,$00,$f3,$f6,$08,$00,
$f8,$f5,$0d,$00,$02,$80,$04,$95,$00,$6b,
$00,$95,$0d,$00,$f3,$f6,$08,$00,$06,$f5,
$12,$90,$ff,$02,$fe,$02,$fe,$01,$fc,$00,
$fe,$7f,$fe,$7e,$ff,$7e,$ff,$7d,$00,$7b,
$01,$7d,$01,$7e,$02,$7e,$02,$7f,$04,$00,
$02,$01,$02,$02,$01,$02,$00,$03,$fb,$80,
$05,$00,$03,$f8,$04,$95,$00,$6b,$0e,$95,
$00,$6b,$f2,$8b,$0e,$00,$04,$f5,$04,$95,
$00,$6b,$04,$80,$0c,$95,$00,$70,$ff,$7d,
$ff,$7f,$fe,$7f,$fe,$00,$fe,$01,$ff,$01,
$ff,$03,$00,$02,$0e,$f9,$04,$95,$00,$6b,
$0e,$95,$f2,$72,$05,$85,$09,$74,$03,$80,
$04,$95,$00,$6b,$00,$80,$0c,$00,$01,$80,
$04,$95,$00,$6b,$00,$95,$08,$6b,$08,$95,
$f8,$6b,$08,$95,$00,$6b,$04,$80,$04,$95,
$00,$6b,$00,$95,$0e,$6b,$00,$95,$00,$6b,
$04,$80,$09,$95,$fe,$7f,$fe,$7e,$ff,$7e,
$ff,$7d,$00,$7b,$01,$7d,$01,$7e,$02,$7e,
$02,$7f,$04,$00,$02,$01,$02,$02,$01,$02,
$01,$03,$00,$05,$ff,$03,$ff,$02,$fe,$02,
$fe,$01,$fc,$00,$0d,$eb,$04,$95,$00,$6b,
$00,$95,$09,$00,$03,$7f,$01,$7f,$01,$7e,
$00,$7d,$ff,$7e,$ff,$7f,$fd,$7f,$f7,$00,
$11,$f6,$09,$95,$fe,$7f,$fe,$7e,$ff,$7e,
$ff,$7d,$00,$7b,$01,$7d,$01,$7e,$02,$7e,
$02,$7f,$04,$00,$02,$01,$02,$02,$01,$02,
$01,$03,$00,$05,$ff,$03,$ff,$02,$fe,$02,
$fe,$01,$fc,$00,$03,$ef,$06,$7a,$04,$82,
$04,$95,$00,$6b,$00,$95,$09,$00,$03,$7f,
$01,$7f,$01,$7e,$00,$7e,$ff,$7e,$ff,$7f,
$fd,$7f,$f7,$00,$07,$80,$07,$75,$03,$80,
$11,$92,$fe,$02,$fd,$01,$fc,$00,$fd,$7f,
$fe,$7e,$00,$7e,$01,$7e,$01,$7f,$02,$7f,
$06,$7e,$02,$7f,$01,$7f,$01,$7e,$00,$7d,
$fe,$7e,$fd,$7f,$fc,$00,$fd,$01,$fe,$02,
$11,$fd,$08,$95,$00,$6b,$f9,$95,$0e,$00,
$01,$eb,$04,$95,$00,$71,$01,$7d,$02,$7e,
$03,$7f,$02,$00,$03,$01,$02,$02,$01,$03,
$00,$0f,$04,$eb,$01,$95,$08,$6b,$08,$95,
$f8,$6b,$09,$80,$02,$95,$05,$6b,$05,$95,
$fb,$6b,$05,$95,$05,$6b,$05,$95,$fb,$6b,
$07,$80,$03,$95,$0e,$6b,$00,$95,$f2,$6b,
$11,$80,$01,$95,$08,$76,$00,$75,$08,$95,
$f8,$76,$09,$f5,$11,$95,$f2,$6b,$00,$95,
$0e,$00,$f2,$eb,$0e,$00,$03,$80,$03,$93,
$00,$6c,$01,$94,$00,$6c,$ff,$94,$05,$00,
$fb,$ec,$05,$00,$02,$81,$00,$95,$0e,$68,
$00,$83,$06,$93,$00,$6c,$01,$94,$00,$6c,
$fb,$94,$05,$00,$fb,$ec,$05,$00,$03,$81,
$03,$87,$08,$05,$08,$7b,$f0,$80,$08,$04,
$08,$7c,$03,$f9,$01,$80,$10,$00,$01,$80,
$06,$95,$ff,$7f,$ff,$7e,$00,$7e,$01,$7f,
$01,$01,$ff,$01,$05,$ef,$0f,$8e,$00,$72,
$00,$8b,$fe,$02,$fe,$01,$fd,$00,$fe,$7f,
$fe,$7e,$ff,$7d,$00,$7e,$01,$7d,$02,$7e,
$02,$7f,$03,$00,$02,$01,$02,$02,$04,$fd,
$04,$95,$00,$6b,$00,$8b,$02,$02,$02,$01,
$03,$00,$02,$7f,$02,$7e,$01,$7d,$00,$7e,
$ff,$7d,$fe,$7e,$fe,$7f,$fd,$00,$fe,$01,
$fe,$02,$0f,$fd,$0f,$8b,$fe,$02,$fe,$01,
$fd,$00,$fe,$7f,$fe,$7e,$ff,$7d,$00,$7e,
$01,$7d,$02,$7e,$02,$7f,$03,$00,$02,$01,
$02,$02,$03,$fd,$0f,$95,$00,$6b,$00,$8b,
$fe,$02,$fe,$01,$fd,$00,$fe,$7f,$fe,$7e,
$ff,$7d,$00,$7e,$01,$7d,$02,$7e,$02,$7f,
$03,$00,$02,$01,$02,$02,$04,$fd,$03,$88,
$0c,$00,$00,$02,$ff,$02,$ff,$01,$fe,$01,
$fd,$00,$fe,$7f,$fe,$7e,$ff,$7d,$00,$7e,
$01,$7d,$02,$7e,$02,$7f,$03,$00,$02,$01,
$02,$02,$03,$fd,$0a,$95,$fe,$00,$fe,$7f,
$ff,$7d,$00,$6f,$fd,$8e,$07,$00,$03,$f2,
$0f,$8e,$00,$70,$ff,$7d,$ff,$7f,$fe,$7f,
$fd,$00,$fe,$01,$09,$91,$fe,$02,$fe,$01,
$fd,$00,$fe,$7f,$fe,$7e,$ff,$7d,$00,$7e,
$01,$7d,$02,$7e,$02,$7f,$03,$00,$02,$01,
$02,$02,$04,$fd,$04,$95,$00,$6b,$00,$8a,
$03,$03,$02,$01,$03,$00,$02,$7f,$01,$7d,
$00,$76,$04,$80,$03,$95,$01,$7f,$01,$01,
$ff,$01,$ff,$7f,$01,$f9,$00,$72,$04,$80,
$05,$95,$01,$7f,$01,$01,$ff,$01,$ff,$7f,
$01,$f9,$00,$6f,$ff,$7d,$fe,$7f,$fe,$00,
$09,$87,$04,$95,$00,$6b,$0a,$8e,$f6,$76,
$04,$84,$07,$78,$02,$80,$04,$95,$00,$6b,
$04,$80,$04,$8e,$00,$72,$00,$8a,$03,$03,
$02,$01,$03,$00,$02,$7f,$01,$7d,$00,$76,
$00,$8a,$03,$03,$02,$01,$03,$00,$02,$7f,
$01,$7d,$00,$76,$04,$80,$04,$8e,$00,$72,
$00,$8a,$03,$03,$02,$01,$03,$00,$02,$7f,
$01,$7d,$00,$76,$04,$80,$08,$8e,$fe,$7f,
$fe,$7e,$ff,$7d,$00,$7e,$01,$7d,$02,$7e,
$02,$7f,$03,$00,$02,$01,$02,$02,$01,$03,
$00,$02,$ff,$03,$fe,$02,$fe,$01,$fd,$00,
$0b,$f2,$04,$8e,$00,$6b,$00,$92,$02,$02,
$02,$01,$03,$00,$02,$7f,$02,$7e,$01,$7d,
$00,$7e,$ff,$7d,$fe,$7e,$fe,$7f,$fd,$00,
$fe,$01,$fe,$02,$0f,$fd,$0f,$8e,$00,$6b,
$00,$92,$fe,$02,$fe,$01,$fd,$00,$fe,$7f,
$fe,$7e,$ff,$7d,$00,$7e,$01,$7d,$02,$7e,
$02,$7f,$03,$00,$02,$01,$02,$02,$04,$fd,
$04,$8e,$00,$72,$00,$88,$01,$03,$02,$02,
$02,$01,$03,$00,$01,$f2,$0e,$8b,$ff,$02,
$fd,$01,$fd,$00,$fd,$7f,$ff,$7e,$01,$7e,
$02,$7f,$05,$7f,$02,$7f,$01,$7e,$00,$7f,
$ff,$7e,$fd,$7f,$fd,$00,$fd,$01,$ff,$02,
$0e,$fd,$05,$95,$00,$6f,$01,$7d,$02,$7f,
$02,$00,$f8,$8e,$07,$00,$03,$f2,$04,$8e,
$00,$76,$01,$7d,$02,$7f,$03,$00,$02,$01,
$03,$03,$00,$8a,$00,$72,$04,$80,$02,$8e,
$06,$72,$06,$8e,$fa,$72,$08,$80,$03,$8e,
$04,$72,$04,$8e,$fc,$72,$04,$8e,$04,$72,
$04,$8e,$fc,$72,$07,$80,$03,$8e,$0b,$72,
$00,$8e,$f5,$72,$0e,$80,$02,$8e,$06,$72,
$06,$8e,$fa,$72,$fe,$7c,$fe,$7e,$fe,$7f,
$ff,$00,$0f,$87,$0e,$8e,$f5,$72,$00,$8e,
$0b,$00,$f5,$f2,$0b,$00,$03,$80,$09,$99,
$fe,$7f,$ff,$7f,$ff,$7e,$00,$7e,$01,$7e,
$01,$7f,$01,$7e,$00,$7e,$fe,$7e,$01,$8e,
$ff,$7e,$00,$7e,$01,$7e,$01,$7f,$01,$7e,
$00,$7e,$ff,$7e,$fc,$7e,$04,$7e,$01,$7e,
$00,$7e,$ff,$7e,$ff,$7f,$ff,$7e,$00,$7e,
$01,$7e,$ff,$8e,$02,$7e,$00,$7e,$ff,$7e,
$ff,$7f,$ff,$7e,$00,$7e,$01,$7e,$01,$7f,
$02,$7f,$05,$87,$04,$95,$00,$77,$00,$fd,
$00,$77,$04,$80,$05,$99,$02,$7f,$01,$7f,
$01,$7e,$00,$7e,$ff,$7e,$ff,$7f,$ff,$7e,
$00,$7e,$02,$7e,$ff,$8e,$01,$7e,$00,$7e,
$ff,$7e,$ff,$7f,$ff,$7e,$00,$7e,$01,$7e,
$04,$7e,$fc,$7e,$ff,$7e,$00,$7e,$01,$7e,
$01,$7f,$01,$7e,$00,$7e,$ff,$7e,$01,$8e,
$fe,$7e,$00,$7e,$01,$7e,$01,$7f,$01,$7e,
$00,$7e,$ff,$7e,$ff,$7f,$fe,$7f,$09,$87,
$03,$86,$00,$02,$01,$03,$02,$01,$02,$00,
$02,$7f,$04,$7d,$02,$7f,$02,$00,$02,$01,
$01,$02,$ee,$fe,$01,$02,$02,$01,$02,$00,
$02,$7f,$04,$7d,$02,$7f,$02,$00,$02,$01,
$01,$03,$00,$02,$03,$f4,$10,$80,$03,$80,
$07,$15,$08,$6b,$fe,$85,$f5,$00,$10,$fb,
$0d,$95,$f6,$00,$00,$6b,$0a,$00,$02,$02,
$00,$08,$fe,$02,$f6,$00,$0e,$f4,$03,$80,
$00,$15,$0a,$00,$02,$7e,$00,$7e,$00,$7d,
$00,$7e,$fe,$7f,$f6,$00,$0a,$80,$02,$7e,
$01,$7e,$00,$7d,$ff,$7d,$fe,$7f,$f6,$00,
$10,$80,$03,$80,$00,$15,$0c,$00,$ff,$7e,
$03,$ed,$03,$fd,$00,$03,$02,$00,$00,$12,
$02,$03,$0a,$00,$00,$6b,$02,$00,$00,$7d,
$fe,$83,$f4,$00,$11,$80,$0f,$80,$f4,$00,
$00,$15,$0c,$00,$ff,$f6,$f5,$00,$0f,$f5,
$04,$95,$07,$76,$00,$0a,$07,$80,$f9,$76,
$00,$75,$f8,$80,$07,$0c,$09,$f4,$f9,$0c,
$09,$f4,$03,$92,$02,$03,$07,$00,$03,$7d,
$00,$7b,$fc,$7e,$04,$7d,$00,$7a,$fd,$7e,
$f9,$00,$fe,$02,$06,$89,$02,$00,$06,$f5,
$03,$95,$00,$6b,$0c,$15,$00,$6b,$02,$80,
$03,$95,$00,$6b,$0c,$15,$00,$6b,$f8,$96,
$03,$00,$07,$ea,$03,$80,$00,$15,$0c,$80,
$f7,$76,$fd,$00,$03,$80,$0a,$75,$03,$80,
$03,$80,$07,$13,$02,$02,$03,$00,$00,$6b,
$02,$80,$03,$80,$00,$15,$09,$6b,$09,$15,
$00,$6b,$03,$80,$03,$80,$00,$15,$00,$f6,
$0d,$00,$00,$8a,$00,$6b,$03,$80,$07,$80,
$fd,$00,$ff,$03,$00,$04,$00,$07,$00,$04,
$01,$02,$03,$01,$06,$00,$03,$7f,$01,$7e,
$01,$7c,$00,$79,$ff,$7c,$ff,$7d,$fd,$00,
$fa,$00,$0e,$80,$03,$80,$00,$15,$0c,$00,
$00,$6b,$02,$80,$03,$80,$00,$15,$0a,$00,
$02,$7f,$01,$7d,$00,$7b,$ff,$7e,$fe,$7f,
$f6,$00,$10,$f7,$11,$8f,$ff,$03,$ff,$02,
$fe,$01,$fa,$00,$fd,$7f,$ff,$7e,$00,$7c,
$00,$79,$00,$7b,$01,$7e,$03,$00,$06,$00,
$02,$00,$01,$03,$01,$02,$03,$fb,$03,$95,
$0c,$00,$fa,$80,$00,$6b,$09,$80,$03,$95,
$00,$77,$06,$7a,$06,$06,$00,$09,$fa,$f1,
$fa,$7a,$0e,$80,$03,$87,$00,$0b,$02,$02,
$03,$00,$02,$7e,$01,$02,$04,$00,$02,$7e,
$00,$75,$fe,$7e,$fc,$00,$ff,$01,$fe,$7f,
$fd,$00,$fe,$02,$07,$8e,$00,$6b,$09,$80,
$03,$80,$0e,$15,$f2,$80,$0e,$6b,$03,$80,
$03,$95,$00,$6b,$0e,$00,$00,$7d,$fe,$98,
$00,$6b,$05,$80,$03,$95,$00,$75,$02,$7d,
$0a,$00,$00,$8e,$00,$6b,$02,$80,$03,$95,
$00,$6b,$10,$00,$00,$15,$f8,$80,$00,$6b,
$0a,$80,$03,$95,$00,$6b,$10,$00,$00,$15,
$f8,$80,$00,$6b,$0a,$00,$00,$7d,$02,$83,
$10,$80,$03,$95,$00,$6b,$09,$00,$03,$02,
$00,$08,$fd,$02,$f7,$00,$0e,$89,$00,$6b,
$03,$80,$03,$95,$00,$6b,$09,$00,$03,$02,
$00,$08,$fd,$02,$f7,$00,$0e,$f4,$03,$92,
$02,$03,$07,$00,$03,$7d,$00,$70,$fd,$7e,
$f9,$00,$fe,$02,$03,$89,$09,$00,$02,$f5,
$03,$80,$00,$15,$00,$f5,$07,$00,$00,$08,
$02,$03,$06,$00,$02,$7d,$00,$70,$fe,$7e,
$fa,$00,$fe,$02,$00,$08,$0c,$f6,$0f,$80,
$00,$15,$f6,$00,$fe,$7d,$00,$79,$02,$7e,
$0a,$00,$f4,$f7,$07,$09,$07,$f7,$03,$8c,
$01,$02,$01,$01,$05,$00,$02,$7f,$01,$7e,
$00,$74,$00,$86,$ff,$01,$fe,$01,$fb,$00,
$ff,$7f,$ff,$7f,$00,$7c,$01,$7e,$01,$00,
$05,$00,$02,$00,$01,$02,$03,$fe,$04,$8e,
$02,$01,$04,$00,$02,$7f,$01,$7e,$00,$77,
$ff,$7e,$fe,$7f,$fc,$00,$fe,$01,$ff,$02,
$00,$09,$01,$02,$02,$02,$03,$01,$02,$01,
$01,$01,$01,$02,$02,$eb,$03,$80,$00,$15,
$03,$00,$02,$7e,$00,$7b,$fe,$7e,$fd,$00,
$03,$80,$04,$00,$03,$7e,$00,$78,$fd,$7e,
$f9,$00,$0c,$80,$03,$8c,$02,$02,$02,$01,
$03,$00,$02,$7f,$01,$7d,$fe,$7e,$f9,$7d,
$ff,$7e,$00,$7d,$03,$7f,$02,$00,$03,$01,
$02,$01,$02,$fe,$0d,$8c,$ff,$02,$fe,$01,
$fc,$00,$fe,$7f,$ff,$7e,$00,$77,$01,$7e,
$02,$7f,$04,$00,$02,$01,$01,$02,$00,$0f,
$ff,$02,$fe,$01,$f9,$00,$0c,$eb,$03,$88,
$0a,$00,$00,$02,$00,$03,$fe,$02,$fa,$00,
$ff,$7e,$ff,$7d,$00,$7b,$01,$7c,$01,$7f,
$06,$00,$02,$02,$03,$fe,$03,$8f,$06,$77,
$06,$09,$fa,$80,$00,$71,$ff,$87,$fb,$79,
$07,$87,$05,$79,$02,$80,$03,$8d,$02,$02,
$06,$00,$02,$7e,$00,$7d,$fc,$7d,$04,$7e,
$00,$7d,$fe,$7e,$fa,$00,$fe,$02,$04,$85,
$02,$00,$06,$f9,$03,$8f,$00,$73,$01,$7e,
$07,$00,$02,$02,$00,$0d,$00,$f3,$01,$7e,
$03,$80,$03,$8f,$00,$73,$01,$7e,$07,$00,
$02,$02,$00,$0d,$00,$f3,$01,$7e,$f8,$90,
$03,$00,$08,$f0,$03,$80,$00,$15,$00,$f3,
$02,$00,$06,$07,$fa,$f9,$07,$78,$03,$80,
$03,$80,$04,$0c,$02,$03,$04,$00,$00,$71,
$02,$80,$03,$80,$00,$0f,$06,$77,$06,$09,
$00,$71,$02,$80,$03,$80,$00,$0f,$0a,$f1,
$00,$0f,$f6,$f8,$0a,$00,$02,$f9,$05,$80,
$ff,$01,$ff,$04,$00,$05,$01,$03,$01,$02,
$06,$00,$02,$7e,$00,$7d,$00,$7b,$00,$7c,
$fe,$7f,$fa,$00,$0b,$80,$03,$80,$00,$0f,
$00,$fb,$01,$03,$01,$02,$05,$00,$02,$7e,
$01,$7d,$00,$76,$03,$80,$10,$80,$10,$80,
$10,$80,$10,$80,$10,$80,$10,$80,$10,$80,
$10,$80,$10,$80,$10,$80,$10,$80,$10,$80,
$10,$80,$10,$80,$10,$80,$10,$80,$10,$80,
$10,$80,$10,$80,$10,$80,$10,$80,$10,$80,
$10,$80,$10,$80,$10,$80,$10,$80,$10,$80,
$10,$80,$10,$80,$10,$80,$10,$80,$10,$80,
$10,$80,$10,$80,$10,$80,$10,$80,$10,$80,
$10,$80,$10,$80,$10,$80,$10,$80,$10,$80,
$10,$80,$10,$80,$10,$80,$10,$80,$10,$80,
$10,$80,$0a,$8f,$02,$7f,$01,$7e,$00,$76,
$ff,$7f,$fe,$7f,$fb,$00,$ff,$01,$ff,$01,
$00,$0a,$01,$02,$01,$01,$05,$00,$f9,$80,
$00,$6b,$0c,$86,$0d,$8a,$ff,$03,$fe,$02,
$fb,$00,$ff,$7e,$ff,$7d,$00,$7b,$01,$7c,
$01,$7f,$05,$00,$02,$01,$01,$03,$03,$fc,
$03,$80,$00,$0f,$00,$fb,$01,$03,$01,$02,
$04,$00,$01,$7e,$01,$7d,$00,$76,$00,$8a,
$01,$03,$02,$02,$03,$00,$02,$7e,$01,$7d,
$00,$76,$03,$80,$03,$8f,$00,$74,$01,$7e,
$02,$7f,$04,$00,$02,$01,$01,$01,$00,$8d,
$00,$6e,$ff,$7e,$fe,$7f,$fb,$00,$fe,$01,
$0c,$85,$03,$8d,$01,$02,$03,$00,$02,$7e,
$01,$02,$03,$00,$02,$7e,$00,$74,$fe,$7f,
$fd,$00,$ff,$01,$fe,$7f,$fd,$00,$ff,$01,
$00,$0c,$06,$82,$00,$6b,$08,$86,$03,$80,
$0a,$0f,$f6,$80,$0a,$71,$03,$80,$03,$8f,
$00,$73,$01,$7e,$07,$00,$02,$02,$00,$0d,
$00,$f3,$01,$7e,$00,$7e,$03,$82,$03,$8f,
$00,$79,$02,$7e,$08,$00,$00,$89,$00,$71,
$02,$80,$03,$8f,$00,$73,$01,$7e,$03,$00,
$02,$02,$00,$0d,$00,$f3,$01,$7e,$03,$00,
$02,$02,$00,$0d,$00,$f3,$01,$7e,$03,$80,
$03,$8f,$00,$73,$01,$7e,$03,$00,$02,$02,
$00,$0d,$00,$f3,$01,$7e,$03,$00,$02,$02,
$00,$0d,$00,$f3,$01,$7e,$00,$7e,$03,$82,
$03,$8d,$00,$02,$02,$00,$00,$71,$08,$00,
$02,$02,$00,$06,$fe,$02,$f8,$00,$0c,$f6,
$03,$8f,$00,$71,$07,$00,$02,$02,$00,$06,
$fe,$02,$f9,$00,$0c,$85,$00,$71,$02,$80,
$03,$8f,$00,$71,$07,$00,$03,$02,$00,$06,
$fd,$02,$f9,$00,$0c,$f6,$03,$8d,$02,$02,
$06,$00,$02,$7e,$00,$75,$fe,$7e,$fa,$00,
$fe,$02,$04,$85,$06,$00,$02,$f9,$03,$80,
$00,$0f,$00,$f8,$04,$00,$00,$06,$02,$02,
$04,$00,$02,$7e,$00,$75,$fe,$7e,$fc,$00,
$fe,$02,$00,$05,$0a,$f9,$0d,$80,$00,$0f,
$f7,$00,$ff,$7e,$00,$7b,$01,$7e,$09,$00,
$f6,$fa,$04,$06,$08,$fa );
{ UNIT IMPLEMENTATION }
{ CONSTRUCT }
constructor gsv_text.Construct;
var
t : int;
begin
inherited Construct;
m_x :=0.0;
m_y :=0.0;
m_start_x :=0.0;
m_width :=10.0;
m_height :=0.0;
m_space :=0.0;
m_line_space :=0.0;
m_text :=@m_chr[0 ];
m_text_buf :=NIL;
m_buf_size :=0;
m_cur_chr :=@m_chr[0 ];
m_font :=@gsv_default_font[0 ];
m_loaded_font:=NIL;
m_loadfont_sz:=0;
m_status :=initial;
m_big_endian :=false;
m_flip :=false;
m_chr[0 ]:=0;
m_chr[1 ]:=0;
t:=1;
if byte(pointer(@t )^ ) = 0 then
m_big_endian:=true;
end;
{ DESTRUCT }
destructor gsv_text.Destruct;
begin
inherited Destruct;
if m_loaded_font <> NIL then
agg_freemem(m_loaded_font ,m_loadfont_sz );
if m_text_buf <> NIL then
agg_freemem(m_text_buf ,m_buf_size );
end;
{ FONT_ }
procedure gsv_text.font_;
begin
m_font:=font;
if m_font = NIL then
m_font:=m_loaded_font;
end;
{ FLIP_ }
procedure gsv_text.flip_;
begin
m_flip:=flip_y;
end;
{ LOAD_FONT_ }
procedure gsv_text.load_font_;
var
fd : file;
err : integer;
begin
if m_loaded_font <> NIL then
agg_freemem(m_loaded_font ,m_loadfont_sz );
{$I- }
err:=ioresult;
assignfile(fd ,_file_ );
reset (fd ,1 );
err:=ioresult;
if err = 0 then
begin
m_loadfont_sz:=filesize(fd );
if m_loadfont_sz > 0 then
begin
agg_getmem(m_loaded_font ,m_loadfont_sz );
blockread (fd ,m_loaded_font^ ,m_loadfont_sz );
m_font:=m_loaded_font;
end;
close(fd );
end;
end;
{ SIZE_ }
procedure gsv_text.size_;
begin
m_height:=height;
m_width :=width;
end;
{ SPACE_ }
procedure gsv_text.space_;
begin
m_space:=space;
end;
{ LINE_SPACE_ }
procedure gsv_text.line_space_;
begin
m_line_space:=line_space;
end;
{ START_POINT_ }
procedure gsv_text.start_point_;
begin
m_x:=x;
m_y:=y;
m_start_x:=x;
end;
{ TEXT_ }
procedure gsv_text.text_;
var
new_size : unsigned;
begin
if text = NIL then
begin
m_chr[0 ]:=0;
m_text :=@m_chr[0 ];
exit;
end;
new_size:=StrLen(text ) + 1;
if new_size > m_buf_size then
begin
if m_text_buf <> NIL then
agg_freemem(m_text_buf ,m_buf_size );
agg_getmem(m_text_buf ,new_size );
m_buf_size:=new_size;
end;
move(text^ ,m_text_buf^ ,new_size );
m_text:=m_text_buf;
end;
{ REWIND }
procedure gsv_text.rewind;
var
base_height : double;
begin
m_status:=initial;
if m_font = NIL then
exit;
m_indices:=m_font;
base_height:=_value(pointer(ptrcomp(m_indices ) + 4 * sizeof(int8u ) ) );
m_indices:=pointer(ptrcomp(m_indices ) + _value(m_indices ) );
m_glyphs :=pointer(ptrcomp(m_indices ) + 257 * 2 * sizeof(int8u ) );
m_h:= m_height / base_height;
if m_width = 0 then
m_w:=m_h
else
m_w:=m_width / base_height;
if m_flip then
m_h:=-m_h;
m_cur_chr:=m_text;
end;
{ VERTEX }
function gsv_text.vertex;
var
idx : unsigned;
yc ,yf : int8;
dx ,dy : int;
quit : boolean;
label
_nxch ,_strt ;
begin
quit:=false;
while not quit do
case m_status of
initial :
if m_font = NIL then
quit:=true
else
begin
m_status:=next_char;
goto _nxch;
end;
next_char :
_nxch:
if m_cur_chr^ = 0 then
quit:=true
else
begin
idx:=m_cur_chr^ and $FF;
inc(ptrcomp(m_cur_chr ) ,sizeof(int8u ) );
if idx = 13 then
begin
m_x:=m_start_x;
if m_flip then
m_y:=m_y - (-m_height - m_line_space )
else
m_y:=m_y - (m_height + m_line_space );
end
else
begin
idx:=idx shl 1;
m_bglyph:=pointer(ptrcomp(m_glyphs ) + _value(pointer(ptrcomp(m_indices ) + idx ) ) );
m_eglyph:=pointer(ptrcomp(m_glyphs ) + _value(pointer(ptrcomp(m_indices ) + idx + 2 ) ) );
m_status:=start_glyph;
goto _strt;
end;
end;
start_glyph :
_strt:
begin
x^:=m_x;
y^:=m_y;
m_status:=glyph;
result:=path_cmd_move_to;
exit;
end;
glyph :
if ptrcomp(m_bglyph ) >= ptrcomp(m_eglyph ) then
begin
m_status:=next_char;
m_x:=m_x + m_space;
end
else
begin
dx:=int(m_bglyph^ );
inc(ptrcomp(m_bglyph ) ,sizeof(int8u ) );
yc:=m_bglyph^;
inc(ptrcomp(m_bglyph ) ,sizeof(int8u ) );
yf:=yc and $80;
yc:=yc shl 1;
yc:=shr_int8(yc ,1 );
dy:=yc;
m_x:=m_x + (dx * m_w );
m_y:=m_y + (dy * m_h );
x^:=m_x;
y^:=m_y;
if yf <> 0 then
result:=path_cmd_move_to
else
result:=path_cmd_line_to;
exit;
end;
end;
result:=path_cmd_stop;
end;
{ _VALUE }
function gsv_text._value;
var
v : int16u;
begin
if m_big_endian then
begin
int16u_(v ).Low :=int8u_ptr(ptrcomp(p ) + 1 )^;
int16u_(v ).High:=p^;
end
else
begin
int16u_(v ).Low :=p^;
int16u_(v ).High:=int8u_ptr(ptrcomp(p ) + 1 )^;
end;
result:=v;
end;
{ CONSTRUCT }
constructor gsv_text_outline.Construct;
begin
m_polyline.Construct(text );
m_trans.Construct (@m_polyline ,trans );
end;
{ DESTRUCT }
destructor gsv_text_outline.Destruct;
begin
m_polyline.Destruct;
end;
{ WIDTH_ }
procedure gsv_text_outline.width_;
begin
m_polyline.width_(w );
end;
{ TRANSFORMER_ }
procedure gsv_text_outline.transformer_;
begin
m_trans.transformer_(trans );
end;
{ REWIND }
procedure gsv_text_outline.rewind;
begin
m_trans.rewind(path_id );
m_polyline.line_join_(round_join );
m_polyline.line_cap_ (round_cap );
end;
{ VERTEX }
function gsv_text_outline.vertex;
begin
result:=m_trans.vertex(x ,y );
end;
END.