NAME

SWF::Element - Classes of SWF tags and elements.

SYNOPSIS

use SWF::Element;
use SWF::BinStream;

$swf_stream=SWF::BinStream::Write;
....
$rect=SWF::Element::RECT->new;
$rect->configure(Xmin=>0, Ymin=>0, Xmax=>100, Ymax=>100);
$rect->pack($swf_stream);
....

DESCRIPTION

SWF::Element module handles SWF tags and any other sub elements to create, configure, clone, pack to bit strings, and unpack from bit strings.

SWF::Element::*

SWF::Element class is a base class of SWF element, such as Tag, RECT, SHAPE, etc. Each SWF::Element object has one or more fields.

METHODS

$element=SWF::Element::* ->new([parameters]);

creates a new element. The new element is configured with parameters.

$element->clone;

duplicates the element.

$element->configure( [name[=>value, ...]] );

gets and sets fields of the element.

When calling without any parameter, the method returns all field names and values of the element as hash.

When calling with a field name, the method returns the field value of the element.

When calling with one or more pair of name and value, the method sets the field of the element and returns the element itself. If value is an array reference, recursively configure the field element.

$element->defined;

returns whether $element is defined or not. The $element is NOT defined if all of its field are not defined.

$element->dumper([\&outputsub, $indent]);

dumps the element as a perl script which can re-create the element. It can take the subroutine reference and initial indent width for output. The subroutine is called with the script string and the indent width. In default, prints the script to the selected filehandle (usually STDOUT).

$element->pack($stream);

writes the element to $stream as bit string SWF format. $stream should be SWF::BinStream::Write object.

$element->unpack($stream);

reads the bit string data from $stream and unpack the element. $stream should be SWF::BinStream::Read object.

$element->FieldName([configure parameters...]);

Each field of $element can access by field name. When calling without parameter, it returns the field object or value. when calling with parameters, it calls configure method to set the field with the parameters and returns the field object or value.

$element->FlagName([value]);

Some fields are sets of flags. A flag is not an object but a simple scalar value, and is accessed by flag accessor method. When calling without value, it returns the flag value. When calilng with the value, it sets proper bit(s) of the Flags field with the value and returns the flag value. Some flags are read only.

SWF::Element::Scalar derivatives

SWF::Element::Scalar derivatives represent a scalar field which have their own pack/unpack method.

SWF::Element::STRING    - null-terminated string.
SWF::Element::PSTRING   - pascal type string (string with its length).
SWF::Element::ID        - 16bit ID of SWF characters (shapes, bitmaps, sounds, etc.)
SWF::Element::Depth     - 16bit Depth of SWF characters.
SWF::Element::BinData   - Binary Data (described later).

METHODS

SWF::Element::Scalar inherits all methods of SWF::Element except any field/flag accessors. Here described the difference.

$scalar->configure([value])

When calling without any parameter, the method returns the value of the object. When calling with a value, the method sets the value to the object and returns the value.

$scalar->value

returns the value of the object.

SWF::Element::BinData

represents a binary data.

METHODS

It has the same methods as SWF::Element::Scalar. The other methods are described here.

$bindata->Length

returns the length of the data.

$bindata->add( string )

adds a string to the data.

$bindata->substr( offset [, length , [replace]] )

Extracts a substring out of the data. It behaves similar to CORE::substr.

$bindata->save( file )

saves the data to the file. It takes a file name or a file handle.

$bindata->load( file )

loads the data from the file. It takes a file name or a file handle.

SWF::Element::Array::*

SWF::Element::Array is a base class which represents an array of the SWF element. The SWF::Element::Array object is an array reference.

METHODS

SWF::Element::Array has all methods of SWF::Element except any field/flag accessors. Here described the difference.

$array->configure( list... )

adds list to the array. Each element of the list must be a proper element object or an array reference.

$array->new_element

creates a proper new element for the array. The new element is not add the array automatically. You should do 'push @$array, $new' if you want to add the new element.

SUBCLASSES

Here is the list of all subclasses representing the SWF element. 'SWF::Element::' is omitted from each class name. ex. RECT means SWF::Element::RECT class. '$' represents a simple scalar. The field whose class is '(Flags)' is a flag accessor handling bits in the Flags. '-' indicates it is read only. See 'Macromedia Flash (SWF) File Format Specifications' for further information about SWF elements and fields. You can get the document from http://www.macromedia.com/software/flash/open/licensing/fileformat/ .

Basic Types

RGB / RGBA

represents a color without/with alpha channel.

field    class
Red      $
Green    $
Blue     $
Alpha    $  - RGBA only 
RECT

represents a rectanglular region.

field    class
Xmin     $
Ymin     $
Xmax     $
Ymax     $
MATRIX

represents a matrix for scale, rotation, and translation.

field        class
ScaleX       $
ScaleY       $
RotateSkew0  $
RotateSkew1  $
TranslateX   $
TranslateY   $

There are three methods.

$matrix->scale([xscale, [yscale]]);

scales up and down by xscale and yscale for X-axis and Y-axis, respectively. If omitting yscale, xscale is used for both axis.

$matrix->moveto(x,y);

moves to (x, y).

$matrix->rotate(degree);

rotates degree degree.

CXFORM / CXFORMWITHALPHA

represents a color transform value.

field          class
Flags          $
  HasAddTerms  (Flags)
  HasMultTerms (Flags)
RedMultTerm    $
GreenMultTerm  $
BlueMultTerm   $
AlphaMultTerm  $  - CXFORMWITHALPHA only.
RedAddTerm     $
GreenAddTerm   $
BlueAddTerm    $
AlphaAddTerm   $  - CXFORMWITHALPHA only.

Usually it is not necessary to set HasAddTerms and HasMultTerms. They are set whether the terms are defined. When you want to reset CXFORM, reset both flags without defining any term as follows:

$cxform = SWF::Element::CXFORM->new;
$cxform->HasAddTerms(0);
$cxform->HasMultTerms(0);

or

$cxform = SWF::Element::CXFORM->new;
$cxform->Flags(0);

SWF Tags

Tag

A base class of all SWF tags. When it is unpacked from SWF stream, it is re-blessed the proper tag class.

$tag->lookahead_FieldName($stream)

You can read some field from the stream before unpacking the tag by lookahead_FieldName method. The field for which a lookahead method is prepared is marked with '*' in the lookahead column of the following tables. It should be run subsequently to parsing the tag header and before unpacking the tag data.

$tag->tag_number

returns the tag ID number.

$tag->tag_name

returns the tag name.

$tag->is_tagtype( $type )

returns true if $tag inherits a type $type.

Tag types        Tags

Definition       ImportAsset, DoInitAction
 + Shape         DefineShape/2/3, DefineMorphShape
 + Bitmap
 |  + LosslessBitmap   DefineBitsLossless/2
 |  + JPEG       DefineBits, JPEGTables, DefineBitsJPEG2/3
 + Font          DefineFont/2, DefineFontInfo/2
 + Text          DefineText/2, DefineEditText
 + Sound         DefineSound
 + Button        DefineButton/2, DefineButtonCxform, 
 |               DefineButtonSound
 + Sprite        DefineSprite
 + Video         DefineVideo, VideoFrame

DisplayList      PlaceObject/2, RemoveObject/2, ShowFrame

Control          SetBackgroundColor, FrameLabel, Protect,
                 EnableDebugger/2, ScriptLimits, SetTabIndex,
                 ExportAssets, ImportAssets, End

ValidInSprite    PlaceObject/2, RemoveObject/2, ShowFrame,
                 FrameLabel, StartSound, SoundStreamBlock,
                 SoundStreamHead/2, DoAction, End

ActionContainer  DoAction, DoInitAction, DefineButton/2,
                 PlaceObject2

 
Tag::Packed

represents packed tag.

field  class
Tag    $
Data   BinData
Tag::Unknown

represents the unknown tags.

field  class
Tag    $
Data   BinData

Display List

Tag::PlaceObject

places the object.

Type: DisplayList, ValidInSprite

field           class   lookahead
CharacterID     ID          *
Depth           $           *
Matrix          MATRIX
ColorTransform  CXFORM
Tag::PlaceObject2

places the object.

Type: DisplayList, ValidInSprite, ActionContainer

field                     class    lookahead
Flags                     $           *
  PlaceFlagMove           (Flags)
- PlaceFlagHasCharacter   (Flags)
- PlaceFlagHasMatrix      (Flags)
- PlaceFlagColorTransform (Flags)
- PlaceFlagHasRatio       (Flags)
- PlaceFlagHasName        (Flags)
- PlaceFlagClipDepth      (Flags)
- PlaceFlagClipActions    (Flags)
Depth                     $           *
CharacterID               ID          *
Matrix                    MATRIX
ColorTramsform            CXFORMWITHALPHA
Ratio                     $
Name                      STRING
ClipDepth                 $
ClipActions               Array::CLIPACTIONRECORDARRAY
Array::CLIPACTIONRECORDARRAY

An array of CLIPACTIONRECORD.

CLIPACTIONRECORD

represents a clip action triggered by clip event.

field                     class
EventFlags                $
  ClipEventConstruct      (EventFlags) - SWF7
  ClipEventKeyPress       (EventFlags) - SWF6 or higher
  ClipEventDragOut        (EventFlags) - SWF6 or higher
  ClipEventDragOver       (EventFlags) - SWF6 or higher
  ClipEventRollOut        (EventFlags) - SWF6 or higher
  ClipEventRollOver       (EventFlags) - SWF6 or higher
  ClipEventReleaseOutside (EventFlags) - SWF6 or higher
  ClipEventRelease        (EventFlags) - SWF6 or higher
  ClipEventPress          (EventFlags) - SWF6 or higher
  ClipEventInitialize     (EventFlags) - SWF6 or higher
  ClipEventData           (EventFlags)
  ClipEventKeyUp          (EventFlags)
  ClipEventKeyDown        (EventFlags)
  ClipEventMouseUp        (EventFlags)
  ClipEventMouseDown      (EventFlags)
  ClipEventMouseMove      (EventFlags)
  ClipEventUnload         (EventFlags)
  ClipEventEnterFrame     (EventFlags)
  ClipEventLoad           (EventFlags)
KeyCode                   $
Actions                   Array::ACTIONRECORDARRAY
Tag::RemoveObject / Tag::RemoveObject2

removes the object.

Type: DisplayList, ValidInSprite

field        class  lookahead
CharacterID  ID         *        - RemoveObject only
Depth        $          *
Tag::ShowFrame

shows current frame.

Type: DisplayList, ValidInSprite

Controls

Tag::SetBackgroundColor

sets the background color.

Type: Control

field            class
BackgroundColor  RGB
Tag::FrameLabel

sets the frame label.

Type: Control, ValidInSprite

field          class
Name           STRING
NameAnchorFlag $
Tag::Protect

prevents the file from editing in the authoring tool.

Type: Control

field     class  lookahead
Reserved  $          *      always 0 (?)
Password  STRING
Tag::End

marks the end of the file.

Type: Control, ValidInSprite
Tag::ExportAssets

exports SWF characters to use in other SWFs.

Type: Control

field   class
Assets  Array::ASSETARRAY
Tag::ImportAssets

imports SWF characters from another SWF.

Type: Control, Definition

field   class
URL     STRING
Assets  Array::ASSETARRAY
Array::ASSETARRAY

An array of ASSET.

ASSET

An ID and name pair of SWF character for export/import.

field   class
ID      ID
Name    STRING
Tag::EnableDebugger / 2

enables debugging. EnableDebugger is for SWF 5, and EnableDebugger2 is for SWF 6 or later.

Type: Control

field     class  lookahead
Reserved  $          *      always 0
Password  STRING
Tag::ScriptLimits

sets the maximum recurtion depth and ActionScript time-out.

Type: Control

field                class lookahead
MaxRecurtionDepth      $     *
ScriptTimeoutSeconds   $     *
Tag::SetTabIndex

sets the tab order of the object placed on the specified depth.

Type: Control

field     class  lookahead
Depth     Depth    *
TabIndex  $        *

Actions

Tag::DoAction

sets the frame action.

Type: ValidInSprite, ActionContainer

field    class
Actions  Array::ACTIONRECORDARRAY
Tag::DoInitAction

performs the actions to initialize a sprite.

Type: Definition, ActionContainer

field    class      lookahead
SpriteID ID             *
Actions  Array::ACTIONRECORDARRAY
Array::ACTIONRECORDARRAY

An array of ACTIONRECORD

ACTIONRECORD

Base class of action tags. Action tags without any parameter belongs this class.

field  class
Tag    ACTIONTagNumber

And it has a pseudo-field, 'LocalLabel', which can be used as destination of ActionIf, ActionJump, and ActionWaitForFrame/2, and CodeSize of DefineFunction. Label string must not start with digits and not contain '#'.

ACTIONTagNumber

represents an action tag number or name.

ACTIONRECORD::ActionUnknown

represents an undefined actiontag.

field  class
Tag    ACTIONTagNumber
Data   BinData
ACTIONRECORD::ActionGotoFrame

goes to the specified frame.

field  class
Tag    ACTIONTagNumber
Frame  $
ACTIONRECORD::ActionGetURL

directs the player to get the specified URL.

field         class
Tag           ACTIONTagNumber
UrlString     STRING
TargetString  STRING
ACTIONRECORD::ActionWaitForFrame

waits until the specified frame otherwise skip the specified number of actions.

field      class
Tag        ACTIONTagNumber
Frame      $
SkipCount  $[label]

unpack method calculate the destination of SkipCount, insert LocalLabel into the destination action, and set the SkipCount value to 'label#original value' such as 'A#45'. When the action is packed to SWF stream, '#' and the following letters are ignored.

ACTIONRECORD::ActionSetTarget

sets context of action.

field       class
Tag         ACTIONTagNumber
TargetName  STRING
ACTIONRECORD::ActionGotoLabel

goes to frame associated with the specified label.

field  class
Tag    ACTIONTagNumber
Label  STRING
ACTIONRECORD::ActionWaitForFrame2

waits until the frame specified in the stack otherwise skip the specified number of actions.

field      class
Tag        ACTIONTagNumber
SkipCount  $[label]

See also the note of WaitForFrame about the label.

ACTIONRECORD::ActionPush

pushes data on the stack.

field     class
Tag       ACTIONTagNumber
DataList  Array::ACTIONDATAARRAY
Array::ACTIONDATAARRAY

An array of ACTIONDATA

ACTIONDATA

A base class of data for action script. If you configure this element, the element is re-blessed with proper subclass.

$actiondata->configure([type => data])

sets the data and re-blessed itself to the type. Types are String, Property (FLASH 4 only), Register, Boolean, Double, Integer, Lookup.

ACTIONRECORD::ActionJump / ActionIf

branches action script always / if stack top is true.

field         class
BranchOffset  $[label]

unpack method calculate the destination of BranchOffset, insert LocalLabel into the destination action, and set the BranchOffset value to 'label#original value' such as 'A#45'. When the action is packed to SWF stream, '#' and the following letters are ignored.

ACTIONRECORD::ActionGetURL2

directs the player to get the URL specified in the stack.

field   class
Tag     ACTIONTagNumber
Method  $
ACTIONRECORD::ActionGotoFrame2

goes to the frame specified in the stack.

field    class
Tag      ACTIONTagNumber
PlayFlag $
ACTIONRECORD::ActionConstantPool

defines word set which can be referred by index.

field  class
Tag    ActionTagNumber
ConstantPool  Array::STRINGARRAY
Array::STRINGARRAY

an array of STRING.

ACTIONRECORD::ActionDefineFunction

defines a function.

field     class
Tag       ActionTagNumber
FunctionName  STRING
Params        Array::STRINGARRAY
CodeSize      $[label]

CodeSize can take the label which indicates the action next to the function definition.

ACTIONRECORD::ActionStoreRegister

stores the stack top to the register.

field     class
Tag       ActionTagNumber
Register  $
ACTIONRECORD::ActionWith

refers to the object on the top of stack for the script written in the CodeSize.

field      class
CodeSize   $[label]

CodeSize can take the label which indicates the action next to the end of the block.

ACTIONRECORD::ActionDefineFunction2

defines a function, which can use local registers.

field                   class
FuncitonName            STRING
RegisterCount           $
Flags                   $
  PreloadGlobalFlag     (Flags)
  PreloadParentFlag     (Flags)
  PreloadRootFlag       (Flags)
  SuppressSuperFlag     (Flags)
  PreloadSuperFlag      (Flags)
  SuppressArgumentsFlag (Flags)
  PreloadArgumentsFlag  (Flags)
  SuppressThisFlag      (Flags)
  PreloadThisFlag       (Flags)
Parameters              Array::REGISTERPARAMARRAY
CodeSize                $[label]

CodeSize can take the label which indicates the action next to the function definition.

Array::REGISTERPARAMARRAY

an array of REGISTERPARAM.

REGISTERPARAM

shows the correspondence of a register to a named parameter.

field      class
Register   $
ParamName  STRING
ACTIONRECORD::ActionTry

defines handlers for exception.

field         class
TrySize       $[label]
CatchSize     $[label]
FinallySize   $[label]
CatchName     STRING
CatchRegister $

TrySize, CatchSize, and FinallySize can take the label which indicates the action next to the end of each block. Either CatchName or CatchRegister should be set, not both.

ACTIONRECORD::ActionStrictMode

sets the strict mode (obsolete).

field       class
StrictMode  $

Shapes

Array::FILLSTYLEARRAY1 / 2 / 3

An array of fill styles. FILLSTYLEARRAY1 and 2 have FILLSTYLE1, and FILLSTYLEARRAY3 has FILLSTYLE3.

FILLSTYLE1 / 3

represents fill style of shapes. FILLSTYLE3 has alpha channels in its field elements.

field           class
FillStyleType   $
Color           RGB / RGBA
GradientMatrix  MATRIX
Gradient        Array::GRADIENT1 / 3
BitmapID        ID
BitmapMatrix    MATRIX
Array::LINESTYLEARRAY1 / 2 / 3

An array of line styles. LINESTYLEARRAY1 and 2 have LINESTYLE1, and LINESTYLEARRAY3 has LINESTYLE3.

LINESTYLE1 / 3

represents a line style of shapes. LINESTYLE3 has an alpha channel.

field  class
Width  $
Color  RGB / RGBA
SHAPE

represents a shape without styles for DefineFont/2, and DefineMorphShape.

field         class
ShapeRecords  Array::SHAPERECARRAY1
SHAPEWITHSTYLE1 / 2 / 3

represents a shape with styles. SHAPEWITHSTYLE3 has alpha channels.

field         class
FillStyles    Array::FILLSTYLEARRAY1 / 2 / 3
LineStyles    Array::LINESTYLEARRAY1 / 2 / 3
ShapeRecords  Array::SHAPERECARRAY1 / 2 / 3 
Array::SHAPERECORDARRAY1 / 2 / 3

An array of SHAPERECORD1 / 2 / 3.

SHAPERECORD1 / 2 / 3

is a base class of the edges of a shape. If you configure this element, the element is re-blessed with proper subclass.

SHAPERECORD1/2/3::STYLECHANGERECORD

represents a start point and style of new edge.

field       class
MoveDeltaX  $
MoveDeltaY  $
FillStyle0  $
FillStyle1  $
LineStyle   $
FillStyles  Array::FILLSTYLEARRAY2 / 3  - SHAPERECORD2/3 only
LineStyles  Array::LINESTYLEARRAY2 / 3  - SHAPERECORD2/3 only
SHAPERECORDn::STRAIGHTEDGERECORD

represents a straight edge. This is common subclass of SHAPERECORD1/2/3.

field   class
DeltaX  $
DeltaY  $
SHAPERECn::CURVEDEDGERECORD

represents a curved edge. This is common subclass of SHAPEREC1/2/3.

field          class
ControlDeltaX  $
ControlDeltaY  $
AnchorDeltaX   $
AnchorDeltaY   $
Tag::DefineShape / Tag::DefineShape2 / Tag::DefineShape3

defines shape. DefineShape2/3 can have more than 255 styles. DefineShape3 contains alpha channels.

Type: Shape

field        class     lookahead
ShapeID      ID            *
ShapeBounds  RECT
Shapes       SHAPEWITHSTYLE1 / 2 / 3

Gradients

Array::GRADIENT1 / 3

represents a gradient information. Each of them is an array of GRADRECORD1 / 3.

GRADRECORD1 / 3

represents one of the colors making gradient. GRADRECORD3 has an alpha channel.

field  class
Ratio  $
Color  RGB / RGBA

Bitmaps

Tag::DefineBits

defines JPEG image data.

Type: JPEG

field        class    lookahead
CharacterID  ID           *
JPEGImage    BinData
Tag::JPEGTable

defines JPEG encoding table.

Type: JPEG

field     class
JPEGData  BinData
Tag::DefineBitsJPEG2 / 3

defines JPEG data including both the encoding table and the image data. DefineBitsJPEG3 has an alpha data table.

Type: JPEG

field            class    lookahead
CharacterID      ID           *
JPEGData         BinData
BitmapAlphaData  BinData             - JPEG3 only.
Tag::DefineBitsLossless / Tag::DefineBitsLossless2

defines a loss-less bitmap. DefineBitsLossless2 contains alpha channels.

Type: LosslessBitmap

field                 class   lookahead
CharacterID           ID          *
BitmapFormat          $           *
BitmapWidth           $           *
BitmapHeight          $           *
BitmapColorTableSize  $           *
ZlibBitmapData        BinData

Morphing

Tag::DefineMorphShape

defines the start and end states of a morph sequence.

Type: Shape

field            class  lookahead
CharacterID      ID         *
StartBounds      RECT
EndBounds        RECT
MorphFillStyles  Array::MORPHFILLSTYLEARRAY
MorphLineStyles  Array::MORPHLINESTYLEARRAY
StartEdges       SHAPE
EndEdges         SHAPE
Array::MORPHFILLSTYLEARRAY

An array of MORPHFILLSTYLE.

MORPHFILLSTYLE

represents fill styles at start and end.

field                class
FillStyleType        $
StartColor           RGBA     (FillStyleType == 0x00)
EndColor             RGBA     (FillStyleType == 0x00)
StartGradientMatrix  MATRIX   (FillStyleType == 0x10[linear] or 0x12[radial])
EndGradientMatrix    MATRIX   (FillStyleType == 0x10[linear] or 0x12[radial])
Gradient             Array::MORPHGRADIENT
                              (FillStyleType == 0x10[linear] or 0x12[radial])
BitmapID             ID       (FillStyleType == 0x40[tiled] or 0x41[clipped])
StartBitmapMatrix    MATRIX   (FillStyleType == 0x40[tiled] or 0x41[clipped])
EndBitmapMatrix      MATRIX   (FillStyleType == 0x40[tiled] or 0x41[clipped])
Array::MORPHGRADIENT

An array of MORPHGRADRECORD.

MORPHGRADRECORD

represents one of the colors making gradient at start and end.

field      class
StartRatio $
StartColor RGBA
EndRatio   $
EndColor   RGBA
Array::MORPHLINESTYLEARRAY

An array of MORPHLINESTYLE.

MORPHLINESTYLE

represents a line style of shapes at start and end.

field      class
StartWidth $
StartColor RGBA
EndWidth   $
EndColor   RGBA

Fonts and Text

Tag::DefineFont

defines font glyphs.

Type: Font

field            class        lookahead
FontID           ID               *
GlyphShapeTable  GLYPHSHAPEARRAY1
Array::GLYPHSHAPEARRAY1 / 2

An array of SHAPE.

Tag::DefineFontInfo / 2

defines font information.

Type: Font

field                class    lookahead
FontID               ID           *
FontName             PSTRING
FontFlags            $
  FontFlagsSmallText (FontFlags)
  FontFlagsShiftJIS  (FontFlags)
  FontFlagsANSI      (FontFlags)
  FontFlagsItalic    (FontFlags)
  FontFlagsBold      (FontFlags)
- FontFlagsWideCodes (FontFlags)
LanguageCode         $                 - DefineFontInfo2 only
CodeTable            Array::FONTCODETABLE
Tag::DefineFont2

defines font glyphs and other information.

Type: Font

field                  class       lookahead
FontID                 ID              *
FontFlags              $               *
- FontFlagsHasLayout   (FontFlags)
  FontFlagsShiftJIS    (FontFlags)
  FontFlagsSmallText   (FontFlags)
  FontFlagsANSI        (FontFlags)
- FontFlagsWideOffsets (FontFlags)
  FontFlagsWideCodes   (FontFlags)
  FontFlagsItalic      (FontFlags)
  FontFlagsBold        (FontFlags)
LanguageCode           $               *
FontName               PSTRING
GlyphShapeTable        Array::GLYPHSHAPEARRAY2
CodeTable              Array::FONTCODETABLE
FontAscent             $
FontDescent            $
FontLeading            $
FontAdvanceTable       Array::FONTADVANCETABLE
FontBoundsTable        Array::FONTBOUNDSTABLE
FontKerningTable       FONTKERNINGTABLE
Array::FONTCODETABLE / FONTADVANCETABLE / FONTBOUNDSTABLE

are arrays of a code, an advance value, and a bounding box of each glyph corresponding to the shape table, respectively. A code and an advance value are scalar, and a bounding box is a RECT.

FONTKERNINGTABLE

represents a table of kerning pairs of the font. Each kerning pair is described as 'code1-code2'. For example, a pair of 'T'(code 84) and 'o'(111) is '84-111'.

$kern->configure([ pair [=> adjustment, ...]])

When calling without any parameter, it returns all kerning pair and its adjustment. When calling with a kerning pair, it returns the adjustment of the pair. When calling with the list of a kerning pair and its adjustment, it adds the kerning data to the table.

Tag::DefineText / Tag::DefineText2

defines text.

Type: Text

field         class   lookahead
CharacterID   ID          *
TextBounds    RECT
TextMatrix    MATRIX
TextRecords   Array::TEXTRECORDARRAY1 / 2
Array::TEXTRECORDARRAY1 / 2

An array of TEXTRECORD1 / 2

TEXTRECORD1 / 2

A base class of text records. If you configure this element, the element is re-blessed with proper subclass.

TEXTRECORD1/2

represents a text style and string.

field         class
FontID        ID
TextColor     RGB / RGBA
XOffset       $
YOffset       $
TextHeight    $
GlyphEntries  Array::GLYPHENTRYARRAY
Array::GLYPHENTRYARRAY

An array of GLYPHENTRY.

GLYPHENTRY

represents a glyph entry for a letter of the text.

field         class
GlyphIndex    $
GlyphAdvance  $ 
Tag::DefineEditText

defines an edit box.

Type: Text

field          class   lookahead
CharacterID    ID          *
Bounds         RECT
Flags          $
  WordWrap     (Flags)
  Multiline    (Flags)
  Password     (Flags)
  ReadOnly     (Flags)
- HasTextColor (Flags)
- HasMaxLength (Flags)
- HasFont      (Flags)
  AutoSize     (Flags)
- HasLayout    (Flags)
  NoSelect     (Flags)
  Border       (Flags)
  HTML         (Flags)
  UseOutlines  (Flags)
FontID         ID
FontHeight     $
TextColor      RGBA
MaxLength      $
Align          $
LeftMargin     $
RightMargin    $
Indent         $
Leading        $
VariableName   STRING
InitialText    STRING

Sounds

Tag::DefineSound

defines sound.

Type: Sound

field             class    lookahead
SoundID           ID           *
Flags             $            *
  SoundFormat     (Flags)
  SoundRate       (Flags)
  SoundSize       (Flags)
  SoundType       (Flags)
SoundSampleCount  $            *
SoundData         BinData
Tag::StartSound

starts playing sound.

Type: ValidInSprite

field      class      lookahead
SoundID    ID             *
SoundInfo  SOUNDINFO
SOUNDINFO

represents sound information.

field            class
SyncFlags        $
- HasInPoint     (SyncFlags)
- HasOutPoint    (SyncFlags)
- HasLoops       (SyncFlags)
- HasEnvelope    (SyncFlags)
  SyncNoMultiple (SyncFlags)
  SyncStop       (SyncFlags)
InPoint          $
OutPoint         $
LoopCount        $
EnvelopeRecords  Array::SOUNDENVELOPEARRAY
Array::SOUNDENVELOPEARRAY

An array of SOUNDENVELOPE.

SOUNDENVELOPE

represents sound envelope information.

field       class
Pos44       $
LeftLevel   $
RightLevel  $
Tag::SoundStreamHead / Tag::SoundStreamHead2

defines the format of streaming sound.

Type: ValidInSprite

field                    class   lookahead
Flags                    $           *
  PlaybackSoundRate      (Flags)
  PlaybackSoundSize      (Flags)
  PlaybackSoundType      (Flags)
  StreamSoundCompression (Flags)
  StreamSoundRate        (Flags)
  StreamSoundSize        (Flags)
  StreamSoundType        (Flags)
StreamSoundSampleCount   $           *
LatencySeek              $           *
Tag::SoundStreamBlock

defines the sound data which is interleaved with the frame.

Type: ValidInSprite

field            class
StreamSoundData  BinData

Buttons

Array::BUTTONRECORDARRAY1 / 2

An array of BUTTONRECORD1 / 2.

BUTTONRECORD1 / 2

represents a button character and associated button states.

field                 class
field                 class
ButtonStates          $
  ButtonStateHitTest  (ButtonStates)
  ButtonStateDown     (ButtonStates)
  ButtonStateOver     (ButtonStates)
  ButtonStateUp       (ButtonStates)
CharacterID           ID
PlaceDepth            $
PlaceMatrix           MATRIX
ColorTransform        CXFORMWITHALPHA - BUTTONRECORD2 only
Tag::Definebutton

defines a button character.

Type: Button, ActionContainer

field       class                      lookahead
ButtonID    ID                             *
Characters  Array::BUTTONRECORDARRAY1
Actions     Array::ACTIONRECORDARRAY
Tag::DefineButton2

defines a button character which has the actions triggered by any state stansition.

Type: Button, ActionContainer

field         class                      lookahead
ButtonID      ID                             *
Flags         $                              *
  TrackAsMenu (Flags)
Characters    Array::BUTTONRECORDARRAY2
Actions       Array::BUTTONCONDACTIONARRAY
Array::BUTTONCONDACTIONARRAY

An array of BUTTONCONDACTION.

BUTTONCONDACTION

represents actions and a button states condition which triggers off the actions.

field                    class
Condition                $
  CondKeyPress           (Condition)
  CondOverDownToIdle     (Condition)
  CondIdleToOverDown     (Condition)
  CondOutDownToIdle      (Condition)
  CondOutDownToOverDown  (Condition)
  CondOverDownToOutDown  (Condition)
  CondOverDownToOverUp   (Condition)
  CondOverUpToOverDown   (Condition)
  CondOverUpToIdle       (Condition)
  CondIdleToOverUp       (Condition)
Actions                  Array::ACTIONRECORDARRAY
Tag::DefineButtonCxform

defines the color transform for each shape and text character in a button.

Type: Button

field                 class  lookahead
ButtonID              ID         *
ButtonColorTransform  CXFORM
Tag::DefineButtonSound

defines the sound data for a button.

Type: Button

field             class      lookahead
ButtonID          ID             *
ButtonSoundChar0  ID             *
ButtonSoundInfo0  SOUNDINFO
ButtonSoundChar1  ID
ButtonSoundInfo1  SOUNDINFO
ButtonSoundChar2  ID
ButtonSoundInfo2  SOUNDINFO
ButtonSoundChar3  ID
ButtonSoundInfo3  SOUNDINFO

Sprites

Tag::DefineSprite

defines a sprite.

Type: Sprite

field              class           lookahead
SpriteID           ID                  *
FrameCount         $                   *
ControlTags        Array::TAGARRAY
(TagStream)        TAGSTREAM
$sprite->shallow_unpack($stream)

unpacks SpriteID and FrameCount from the stream, and prepare TagStream to parse later instead of unpacking all ControlTags.

Array::TAGARRAY

An array of SWF tags.

TAGSTREAM

A stream of the tags.

$tagstream->parse( \&callback )

parses the tag stream and calls &callback sub. See SWF::Parser for details of the tag callback sub.

Video

Tag::DefineVideoStream

defines a video character.

Type: Video

 field        class  lookahead
 CharacterID  ID         *
 NumFrames    $          *
 Width        $          *
 Height       $          *
 VideoFlags   $          *
 CodecID      $          *
Tag::VideoFrame

provides a single frame of video data for a video character.

Type: Video

 field      class   lookahead
 StreamID   ID          *
 FrameNum   $           *
 VideoData  BinData

LIMITATIONS

Not all tags have been tested yet.

No support of the SWF version control for the tags unless the version affects the tag structure.

Binary block data, such as bitmaps, sounds, and video, are neither decoded nor encoded.

COPYRIGHT

Copyright 2000 Yasuhiro Sasama (ySas), <ysas@nmt.ne.jp>

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

SEE ALSO

SWF::BinStream, SWF::Parser

SWF file format specification from Macromedia.

1 POD Error

The following errors were encountered while parsing the POD:

Around line 353:

You forgot a '=back' before '=head4'