X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=lib%2Frfxswf.h;h=d7e186ee4fa683b7c577c7416d611d26e3c2e4a3;hb=e029c9c4c2ee6b4d944a7c46bd39d35d4aa56213;hp=43d4b87f849448e01805ec5f7e4d393d28ffb481;hpb=89aec8e68bdc64f14c934c58397f64a79a64a86f;p=swftools.git diff --git a/lib/rfxswf.h b/lib/rfxswf.h index 43d4b87..d7e186e 100644 --- a/lib/rfxswf.h +++ b/lib/rfxswf.h @@ -16,6 +16,8 @@ #include #include #include +#include +#include #include "../config.h" #define DEBUG_RFXSWF @@ -98,6 +100,10 @@ typedef struct _ActionTAG U8 tmp[4]; // store small operands here. } ActionTAG; +typedef struct _ActionMarker +{ + ActionTAG* atag; +} ActionMarker; typedef struct _SWF { U8 fileVersion; @@ -220,18 +226,14 @@ int swf_SetRGBA(TAG * t,RGBA * col); #define ST_TEMPLATECOMMAND 49 #define ST_GENERATOR3 51 #define ST_EXTERNALFONT 52 +#define ST_EXPORTASSETS 56 +#define ST_IMPORTASSETS 57 +#define ST_ENABLEDEBUGGER 58 #define ST_REFLEX 777 /* to identify generator software */ // Advanced Funtions -// swfdump.c - -void swf_DumpHeader(FILE * f,SWF * swf); -void swf_DumpMatrix(FILE * f,MATRIX * m); -void swf_DumpTag(FILE * f,TAG * t); -char* swf_TagGetName(TAG*tag); - // swfshape.c typedef struct _LINESTYLE @@ -252,20 +254,17 @@ typedef struct _SHAPE // NEVER access a Shape-Struct directly ! { LINESTYLE * data; U16 n; } linestyle; - // note: changes of shape structure - struct // lead to incompatible .efont formats + + struct { FILLSTYLE * data; U16 n; } fillstyle; - - S32 px; - S32 py; - + struct { U16 fill; U16 line; } bits; - + // used by Get/SetSimpleShape and glyph handling U8 * data; U32 bitlen; // length of data in bits } SHAPE, * LPSHAPE; @@ -301,33 +300,40 @@ int swf_ShapeSetEnd(TAG * t); // does not support wide characters ! -#define MAX_CHAR_PER_FONT 256 +#define MAX_CHAR_PER_FONT 512 + +typedef struct _KERNING +{ + U16 char1; + U16 char2; + U16 adjustment; +} SWFKERNING; typedef struct _SWFLAYOUT -{ S16 ascent; - S16 descent; - S16 leading; - SRECT bounds[MAX_CHAR_PER_FONT]; - struct - { U16 count; - U8 * data; // size = count*4 bytes - } kerning; +{ S16 ascent; + S16 descent; + S16 leading; + SRECT * bounds; + U16 kerningcount; + SWFKERNING * kerning; } SWFLAYOUT, * LPSWFLAYOUT; +typedef struct +{ S16 advance; + SHAPE * shape; +} SWFGLYPH; + typedef struct _SWFFONT -{ U16 id; +{ int id; // -1 = not set + U8 version; // 0 = not set, 1 = definefont, 2 = definefont2 U8 * name; SWFLAYOUT * layout; - + U16 numchars; + U16 maxascii; // highest mapped ascii value U8 flags; // bold/italic/unicode/ansi ... - - U16 codes[MAX_CHAR_PER_FONT]; - - struct - { U16 advance; - U16 gid; // Glyph-ID after DefineFont - SHAPE * shape; - } glyph[MAX_CHAR_PER_FONT]; + U16 * glyph2ascii; + int * ascii2glyph; + SWFGLYPH * glyph; } SWFFONT, * LPSWFFONT; typedef struct _FONTUSAGE @@ -353,9 +359,13 @@ int swf_FontUse(FONTUSAGE * use,U8 * s); int swf_FontSetDefine(TAG * t,SWFFONT * f); int swf_FontSetInfo(TAG * t,SWFFONT * f); +// the following two functions are obsolete and will be removed soon int swf_FontExport(int handle,SWFFONT * f); int swf_FontImport(int handle,SWFFONT * * f); +void swf_WriteFont(SWFFONT* font, char* filename); +SWFFONT* swf_ReadFont(char* filename); + void swf_FontFree(SWFFONT * f); U32 swf_TextGetWidth(SWFFONT * font,U8 * s,int scale); @@ -367,6 +377,13 @@ int swf_TextSetCharRecord(TAG * t,SWFFONT * font,U8 * s,int scale,U8 gbits,U8 ab int swf_TextPrintDefineText(TAG * t,SWFFONT * f); // Prints text defined in tag t with font f to stdout +// swfdump.c + +void swf_DumpHeader(FILE * f,SWF * swf); +void swf_DumpMatrix(FILE * f,MATRIX * m); +void swf_DumpTag(FILE * f,TAG * t); +char* swf_TagGetName(TAG*tag); +void swf_DumpFont(SWFFONT * font); // swfobject.c @@ -412,8 +429,30 @@ int swf_ObjectMove(TAG * t,U16 depth,MATRIX * m,CXFORM * cx); #define BC_PAGEUP 0x2000 #define BC_PAGEDOWN 0x2200 #define BC_TAB 0x2400 +#define BC_ESCAPE 0x3600 #define BC_SPACE 0x4000 +/* these are probably only valid with linux: + Ctrl-A 0x0200 + Ctrl-X 0x3000 + Ctrl-Y 0x3200 + Ctrl-Z 0x3400 + Escape/Ctrl-[ 0x3600 + Ctrl-\ 0x3800 + Ctrl-] 0x3a00 + Ctrl-^ 0x3c00 + Ctrl-/ 0x3e00 + */ + +/* everything above 0x4000 is standard ascii: + 0x4000 ' ' 0x4200 '!' 0x4600 '#' 0x4800 '$' 0x4a00 '%' 0x4c00 '&' ... + 0x6000 '0' ... 0x7200 '9' + 0x8000 '@' + 0x8200 'A' ... 0xb400 'Z' + ... + 0xfc00 '~' + */ + // Button Flag #define BF_TRACKMENU 0x01 @@ -471,8 +510,9 @@ void swf_uncgi(); // same behaviour as Steven Grimm's uncgi-library // swfaction.c -ActionTAG* swf_GetActions(TAG*tag); -void swf_SetActions(TAG*tag, ActionTAG*actions); +ActionTAG* swf_ActionGet(TAG*tag); +void swf_ActionFree(ActionTAG*tag); +void swf_ActionSet(TAG*tag, ActionTAG*actions); void swf_DumpActions(ActionTAG*atag, char*prefix); void swf_ActionEnumerateURLs(ActionTAG*atag, char*(*callback)(char*)); void swf_ActionEnumerateTargets(ActionTAG*atag, char*(*callback)(char*)); @@ -576,5 +616,7 @@ void action_If(U16 branch); void action_Call(); void action_GotoFrame2(U8 method); void swf_ActionEnd(); +ActionMarker action_setMarker(); +void action_fixjump(ActionMarker m1, ActionMarker m2); #endif