<WVG> ::= ( 0 <character size WVG>) | ( 1 <standard WVG> ) <character size WVG> ::= <character size WVG header> <line elements> <standard WVG> ::= <standard WVG header> <elements>Common
<text code mode> ::= 0 | 1Character Size WVG Header; 0 for 7-bit GSM character set. 1 for 16-bit UCS-2<string length> ::= 'unsigned 8-bit integer'; number of GSM or UCS-2 characters ; GSM extension characters are counted as one character ; <string length> = 0 means null string<char> ::= 'unsigned 7 bit integer'; 7-bit GSM character value ; Extension table are supported but the Another Extension; and the ; Page Break are not supported.| unsigned 16 bit integer'; 16-bit UCS-2 value ; CR is supported but other control characters are not supported ; (ignored when processed).<mask> := 0 | 1 ; 0 for false, 1 for true <hint> := 0 | 1 ; 0 for false, 1 for true
<character size WVG header> ::= ( 0 ( <aspect ratio> <line element mask> <relative use> <parameters X-0> <parameters Y-0> ) )Character Size WVG Elements; standard header| ( 1 ( <line element mask> <relative use> <MaxXYInBits0> ) ); compact header. In this case, x and y grid are same, ; default peak value 1.0, default aspect ratio1:1. ; Note: character size WVG always use compact coordinate mode<line element mask> ::= <mask> ; true for at least one polyline element in the drawing <mask> ; true for at least one circular polyline element in the drawing <mask> ; true for at least one Bezier polyline element in the drawing <relative use> ::= 0 | 1 ; 0 for all points use absolute coordinates, ; 1 for at least one point uses relative coordinate (offset mode) <parameters X-0> ::= <MaxXInBits0> <peak description> <parameters Y-0> ::= <MaxYInBits0> <peak description> <MaxXInBits0> ::= <bits indicator > <MaxXInBits0> ::= <bits indicator > <MaxXYInBits0> ::= <bits indicator > <bits indicator> ::= 00…11 ; 00 for 3 bits (max value 7), 01 for 4 bits (max value 15) ; 10 for 5 bits (max value 31), 11 for 6 bits (max value 63) <peak description> ::= 00…11 ; 00: peak value 1.0, no peak position required ; 01: peak value 1.5, peak position 0.5 ; 10: peak value 1.5, peak position 0.3333 ; 11: peak value 1.5, peak position 0.6667
<line elements> ::= <number of line elements> <line element> { <line element> } <number of line elements> ::= 'unsigned 7-bit integer' ; maximum 127 elements <line element> ::= <line header> ( <polyline element> | <circular polyline element> |<Bezier polyline element> ) <line header> ::= <line element type> [ <point mode> ] ; appear when <relative use> = 1 <line element type> ::= ; empty, when <line element mask> = 100, 010 or 100 0 | 1 ; when <line element mask> = 011, 110, 110 or 101 ; 0 for the firstelement with mask value 1 in the <line element mask> ; 1 for the second element with mask value 1 in <line element mask> 00..11 ; 00 for polyline, 01 for circular polyline, 10 for Bezier polyline ; ( when <line element mask> = 111>) <point mode> ::= 0 | (1 <offset bit use>) ; 0 for use of absolute coordinate for <Next Point> ; 1 for using relative coordinate (offset mode) for <Next Point>Standard WVG Header
<standard WVG header> ::= <general info> <color configuration> <codec parameters> <animation settings> <general info> ::= <version> 0 | ( 1 <text code mode> <author string> <title string> <time stamp> ) <version> ::= 0000…1111 <author string> ::= 0 | (1 <string length> <char> { <char> } ) <title string> := 0 | (1 <string length> <char> { <char> } ) <time stamp> ::= 0 | (1 <year> <month> <day> <hour> <minute> <second> ) <year> ::='signed_13_bit_integer' <month> ::='unsigned_4_bit_integer' ; range 1-12 <day> ::= 'unsigned_5_bit_integer' ; range 1-31 <hour> ::= 'unsigned_5_bit_integer' ; range 0-23 <minute> ::= 'unsigned_6_bit_integer' ; range 0-59 <second> ::= 'unsigned_6_bit_integer' ; range 0-59>Color
<color configuration> ::= <color scheme> <default colors> <color scheme> ::= 00 ; black and white | 010 ; 2-bit gray scale | 011 ; 2-bit predefined color. 4 color value 00, 01, 10, 11 are ; mapped to RGB color (255,255,255), (255,0,0), ; (0,255,0) and (0,0,255) respectively | 100 ; 6-bit RGB color | 101 ; websafe color | 1100 <6-bit color palette> ; 6-bit RGB color using 2nd color palette | 1101 <8-bit color palette> ; websafe color using 2nd palette | 1110 ; for 12 bits color mode | 1111 ; for 24 bits color mode <6-bit color palette> ::= 00000…11111 ; A value equal to "number of color" - 1. ; Maximum 32 color entries {<6-bit RGB color>} ; specify color value from 0 to "number of color"-1 <8-bit color palette> ::= 0000000…1111111 ; A value equal to "number of color" - 1. ; Maximum 128 color entries { <8-bit websafe color> } ;specify color value from 0 to "number of color"-1 ; Note: the decoder will decide number of bits used by <indexed ; RGB/websafe color> <indexed color> use 1 to 7 bits if <number of ; color> is 2, 3…4, 5…8, 9…16, 17…32, 33…64, 65…128. <draw color> ::= <b/w color> ; when color scheme is 00 | <grayscale> ; when color scheme is 010 | <2-bit predefined color> ; when color scheme is 011 | <6-bit RGB color> ; when color scheme is 100 | <8-bit websafe color> ; when color scheme is 101 | <indexed RGB color> ; when color scheme is 1100 | <indexed websafe color> ; when color scheme is 1101 | <12 bit RGB color> ; when color scheme is 1110 | <24 bit RGB color> ; when color scheme is 1111 <b/w color> ::= 0 | ; white 1 ; black <grayscale> ::= 00…11 ; 00 for 24-bit RGB color (0,0,0), 01 for 24-bit RGB color (85,85,85) ; 10 for 24-bit RGB color (170,170,170), 11 for 24-bit RGB color (255,255,255) <2-bit predefined color> ::= 00…11 ;00 for 24-bit RGB color (255,255,255), 01 for 24-bit RGB color (255,0,0) ;10 for 24-bit RGB color (0,255,0), 11 for 24-bit RGB color (0,0,255) <6-bit RGB color> ::= <2-bit R> <2-bit G> <2-bit B> <indexed RGB color> ::= (0 | 1) | 00…11 | 000…111 | 0000…1111 | 00000…11111 ; map to 6-bit RGB color value defined in <6-bit color palette> <8-bit websafe color> ::= 00000000…11111111 ; See G.7 for websafe color palette definition <indexed websafe color> ::= (0 | 1) | 00…11 | 000…111 | 0000…1111 | 00000…11111 | 000000…111111 | 0000000…1111111 ; map to 8-bit websafe color value defined in <8-bit color palette> <2-bit R> ::= <2-bit color value> ; Red color value <2-bit G> ::= <2-bit color value> ; green color value <2-bit B> ::= <2-bit color value> ; blue color value <2-bit color value> ::= 00…11 ; 00, 01, 10 and 11 for color value 0, 85, 170 and 255 ; defined in 0-255 color range respectively <12-bit RGB color> ::= <4-bit R> <4-bit G> <4-bit B> ; <4-bit R> ::= <4-bit color value> ; Red color value <4-bit G> ::= <4-bit color value> ; green color value <4-bit B> ::= <4-bit color value> ; blue color value <4-bit color value> ::= 0000…1111 ; multiply by 17 to convert to 8 bit color value <24-bit RGB color> ::= <8-bit R> <8-bit G> <8-bit B> ; <8-bit R> ::= <8-bit color value> ; Red color value <8-bit G> ::= <8-bit color value> ; green color value <8-bit B> ::= <8-bit color value> ; blue color value <8-bit color value> ::= 00000000…1111111 ; intensity value of color value <default colors> := ( 0 | (1 <default line color>)) ; use black when first bit is 0 ( 0 | (1 <default fill color>)) ; use black when first bit is 0 ( 0 | (1 <background color>)) ; use white when first bit is 0 ; If above color(s) are not ; specified, use BLACK as <default line color> and <default fill color>, and use ; WHITE as <background color>. <default line color> ::= <draw color> <default fill color> ::= <draw color> <background color> ::= <draw color>Codec Parameters
<codec parameters> ::= <element mask> <attribute mask> <generic parameters> <coordinate parameters> <coordinate parameters> ::= ( 0 <flat coordinate parameters> ) ; flat coordinate mode | (1 <compact coordinate parameters> ) ; compact coordinate mode <element mask> ::= <mask> ; true for at least one local envelope element in the drawing <mask> ; true for at least one polyline element in the drawing <mask> ; true for at least one circular polyline element in the drawing <mask> ; true for at least one Bezier polyline element in the drawing <mask> ; true for at least one simple shape element in the drawing <mask> ; true for at least one reuse element in the drawing <mask> ; true for at least one group element in the drawing <mask> ; true for at least one animation element in the drawing (0 | (1 ; extension bit. 1 for rare masks are followed by <mask> ; true for at least one polygon element in the drawing <mask> ; true for at least one special shape element in the drawing <mask> ; true for at least one frame element in the drawing <mask> ; true for at least one text element in the drawing <mask> ; true for at least one extended element in the drawing ) ;The decoder should decide how many bits to be used by <element type> ) ; according to number of "1"s in the <element mask>. Number of bits ; used by <element type> can be 0 (if only one "1" in <element mask>), ; 1 (if 2 "1"s), 2 (if 3 or 4 "1"s), 3 (if 5-8 "1"s) or 4(if more than 8 ; "1"s). Value of <element type> that is to represent a specific element ; type is same as the order of the specific mask in the <element mask> ; that represents this type of element. For example, if <element mask> is ; 011000010, <element type> will use 2 bits and value 00, 01, 10 ; (11 is not used) represent polyline, circular polyline and animation ; elements respectively. ; Note that <mask> for local envelope has no meanings when in flat ; coordinate mode but still ; exists <attribute masks> ::= <line type mask> <line width mask> <line color mask> <fill mask> <line type mask> ::= <mask> ; true when at least one element uses line type attribute <line width mask> ::= <mask> ; true when at least one element uses line width attribute <fill mask> ::= <mask> ; true when at least one element uses fill attribute <line color mask> ::= <mask> ; true when at least one element uses line colorGeneric Parameters
<generic parameters> ::= (0 | (1 <angle resolution> <angle in bits> ) ; 0 for default (22.5 degree, 3 bits) (0 | (1 <scale resolution> <scale in bits> ) ; 0 for default (1/4, 3 bits) (0 | (1 <index in bits> ) ; 0 for default (both 3 bits) [<curve offset in bits> ] ; <curve offset in bits> appear when <mask> for <circular polyline element> ; or <polygon element> is true <angle resolution> ::= 00…11 ; 00 for angle unit is 1.40625 degree; 01 for angle unit is 5.625 degree ; 10 for angle unit is 11.25 degree; 11 for angle unit is 22.5 degree <angle in bits> ::= 000…111 ; number of bits used by <angle value> is from 1 to 8 bits <angle value> ::= 'signed angleInBits+1-bit integer' ; angle unit is decided by <angle resolution> ;0 degree is defined as positive direction of the X axis and ; positive angle value is clockwise. ; -180 degree is represented by maximum negative digit <scaleresolution> ::= 00..11 ; 00 for 1/4 as scale unit. 01 for 1/16 as scale unit ; 10 for 1/64 as scale unit; 11 for 1/256 as scale unit <scale in bits> ::= 0000…1111 ; number of bits used by <scale value> is from 1 to 16 bits <scale value> ::= 'signed scaleInBits+1-bits integer' ; scale unit is decided by <scale resolution> ; negative scale value means scaling at ; opposite direction <index in bits> ::= 0000…1111 ; number of bits used by <index> are from 1 to 16 bits <index> ::= <index value> <index value> ::= 'unsigned IndexInBits+1-bit integer' <curve offset in bits> ::= 0 | 1 ; 0 for using 4 bits (15 levels) ; 1 for using 5 bits (31 levels)Compact Coordinate Parameters
<compact coordinate parameters> ::= <aspect ratio> <TransXYInBits1> <parameters X-1> <parameters Y-1> <redefine resolution hint> <aspect ratio> ::= 00 | ; aspect ratio = 1:1 ( ( 01 ; aspect ratio = 4:3 | 10 ; aspect ratio = 16:9 | 1100 ; aspect ratio = 64:27 | 1101 ; aspect ration = 256:81 | 1110 ; aspect ration = 1024:243 | 1111 ; aspect ration = 4096:729 ) [ <display orientation> ] ; <display orientation> appears in standard WVG ) ; character size WVG uses landscape only <display orientation > ::= 0 | 1 ; 0 for landscape, 1 for portrait <parameters X-1> ::= <MaxXInBits1> <coordinate parameters> <parameters Y-1> ::= <MaxYInBits1> <coordinate parameters> <coordinate parameters> ::= 00 | ( <peak value> <peak position> <peak width> ) ; peak value default to 1.0 when 00 is defined <MaxXInBits1> ::= 00…11 ; Number of bits used by <X>. ; This determines the number of grid lines in the X direction. <MaxYInBits1> ::= 00…11 ; Number of bits used by <Y>. ; This determines the number of grid lines in the Y direction. ; 00 for 15, 01 for 31,10 for 63, 11 for 127 <peak value> ::= 01…11 ; 01 for 1.5, 10 for 2.0, 11 for 2.5 <peak position> ::= 0000…1100 ; 0-12. Peak position = value/12 from envelope left. | 1101 ; reserved | 1110 ; reserved | 1111 ; reserved <peak width> ::= 00…11 ; 00 for 0.3, 01 for 0.4, 10 for 0.5, 11 for 0.6 ;<peak width> value are to the scale of total global envelope width. ; 10 (0.5) and 11 (0.6) are not allowed when <peak value> is 11 (2.5) ; 11 (0.6) is not allowed when <peak value> is 10 (2.0) <redefine resolution hint> ::= <hint> ; true when at least one element uses 'redefine resolution'attribute <TransXYInBits1> ::= 00..11 ; number of bits to encode translation and center of transform ; 00 for 5 bits, 01 for 6 bits, 10 for 7 bits, 11 for 8 bits ; In global scope and at X axis, it uses unit of (global envelope width/ (number of X grid lines -1 )) ; In global scope and at Y axis, it uses unit of (global envelope height/ (number of Y grid lines -1 )) ; In local scope, its unit is same as local coordinate unit.Flat Coordinate Parameters
<flat coordinate parameters> ::= <drawing width> ( 0 | 1 (<drawing height>)) ; 0 means height = width <MaxXInBits2><MaxYInBits2> < XYAllPositive> <TransXYInBits2> <NumPointsInBits> <OffsetXInBitsLevel1> <OffsetYInBitsLevel1> <OffsetXInBitsLevel2> <OffsetYInBitsLevel2> <drawing width> ::= 'unsigned 16-bit integer' <drawing height> ::= 'unsigned 16-bit integer' <MaxXInBits2> ::= 'unsigned_4_bit_integer' ; number of bits to encode X coordination <MaxYInBits2> ::= 'unsigned_4_bit_integer' ; number of bits to encode Y coordination <XYAllPositive> ::= "unsigned_1_bit_integer' ; 0 means not all x/y are positive ; 1 means all x/y are positive <TransXYInBits2> ::= 'unsigned_4_bit_integer' ; number of bits to encode translation and center of transform <OffsetXInBitsLevel1> ::= 'unsigned_4_bit_integer' <OffsetYInBitsLevel1> ::= 'unsigned_4_bit_integer' <OffsetXInBitsLevel2> ::= 'unsigned_4_bit_integer' <OffsetYInBitsLevel2> ::= 'unsigned_4_bit_integer' <NumPointsInBits> ::= 'unsigned_4_bit_integer'Animation Settings
<animation settings> ::= [ <animation mode> ] ;appear when <animation element> exist <animation mode> ::= 0 | 1 ; 0 for simple animation; 1 for standard animationElement
<elements> := <number of elements> <element> { <element> } <number of elements> ::= (0 'unsigned 7-bit integer') | (1 'unsigned 15-bit integer') <element> := <element type> ( <basic element> | <frame element> | <group element> | <re-use element> | <animation element> | <extended element> | <local envelope element> ) <element type> ::= | 0…1 | 00..11 | 000…111 | 0000…1111 ; empty is allowed ; decided by <element mask>. Please refer to <element mask> <animation element> := <simple animation element> | <standard animation element> ; if <animation mode> is 0, all animation elements in the drawing are <simple animation element> ; if <animation mode> is 1, all animation elements in the drawing are <standard animation element> <basic element>::= <basic element header> ( <polyline element> | <circular polyline element> | <Bezier polyline element> | <polygon element> | <simple shape element> | <special shape element> | <text element> )Basic Element Header
<basic element header> ::= ( <offset bit use> ; when in flat coordinate mode | <resolution and offset bit> ) ; when in compact coordinate mode [ 0 | (1<attributes set> ) ] ; appears when <attribute masks> does not equal ; to 0000 ; 0 for using default attributes defined in <drawing header> ; 1 for using the following specific attributes <Offset Bit Use> ::= <Offset X Use><Offset Y Use> <Offset X Use> ::= 0 | 1 ; when in compact coordinate mode, 0 means offset X will use 3 bits., ; 1 means use 4 bits ; when in flat coordinate mode, 0 means offset X will use <OffsetXInBitsLevel1>, ; 1 means use <OffsetXInBitsLevel2> <Offset Y Use> ::= 0 | 1 ; when in compact coordinate mode, 0 means offset X will use 3 bits, ; 1 means use 4 bits ; when in flat coordinate mode, 0 means offset X will use <OffsetYInBitsLevel1>, ; 1 means use <OffsetYInBitsLevel2> <resolution and offset bit>::= (0 | (1<offset bit use> ) ; only when <redefine resolution hint> is false or in local scope ; 0 for absolute coordinate, 1 for relative coordinates | (0 (0 | (1<offset bit use> )) ; when <redefine resolution hint> is true and in global scope ; 0 for absolute coordinate, 1 for relative coordinates | ( 1 <coordinate resolution> <offset bit use> ) ; when <redefine resolution hint> is true and in global scope ; redefine resolution, always use relative coordinates <coordinate resolution> ::= 000…111 ; decide the grid line interval by a scale of width ; or height of the global envelope whichever is short. ; 0-7 for 1/27, 1/32, 1/38, 1/48, 1/64, ; 1/85, 1/128 and 1/160 respectivelyElement Attributes
<attribute set> ::= [ <line type> ] ; appear when <line type mask> is true [ <line width> ] ; appear when <line width mask> is true [ 0 | (1 <line color>) ] ; appear when <line color mask> is true and ; <line width> is not zero ; 0 for <default line color>, 1 for specified color [ 0 | (1 ; 0 for no fill; 1 for with fill (0 | (1 <fill color>)) ; 0 for <default fill color>, 1 for specified color ) ; appear when <fill mask> is true ] ; Note: line type and line width are not used by <text element> but ; still exist here. If not filled, then background of text output will ; be transparent. If filled, then fill color will be used as text background. <line width> ::= 00…11 ; 00 for no line, 01 for Fine, 10 for medium, 11 for thick ; 00 is only valid with fill <line type> ::= 00…11 ; 0 for solid, 1 for dash line, 2 for dotted line <fill color > ::= <draw color> <line color> ::= <draw color> <OverrideAttributeSet> ::= 0 | (1 <line type>) 0 | (1 <line width>) 0 | (1 <line color>) 0 | (1 <fill> ) 0 | (1 <fill color>) ; 0 for no overriding, 1 for overriding with specified attribute <fill> ::= 0 | 1 ; 0 means no fill, 1 means fillTransform
<Transform> ::= <TranslateX><TranslateY> 0 | (1 <Angle> <ScaleX><ScaleY> < CX>< CY>) ; optional other transforms <Angle> ::= 0 | (1 <Angle Value> ) ; 0 means angle will use default value which is 0 <TranslateX> ::= 0 | (1 <TranslateX Value> ) ; 0 means translate x will use default value which is 0 <TranslateX Value> ::= 'signed_TransXYInBits2_bit integer' ; when in flat coordinate mode | 'signed TransXYInBits1+5 bit integer' ; when in compact coordinate mode <TranslateY> ::= 0 | (1 <TranslateY Value> ) ; 0 means translate y will use default value which is 0 <TranslateY Value> ::= 'signed_TransXYInBits2_bit integer' ; when in flat coordinate mode | 'signed TransXYInBits1+5-bit integer' ; when in compact coordinate mode <ScaleX> ::= 0 | (1<Scale value> ) ; 0 means scale will use default value which is 1.0 <ScaleY>::= 0 | (1 <Scale value> ) ; 0 means scale will use default value which is same as ; absolute value of <ScaleX> <CX> ::= 0 | (1 <CX value> ) ; translation of rotation and scale center; 0 means it will use default ; value which is at the left border of the drawing (x=0 in the flat ; coordinate system or the global envelope) <CX value> ::= 'signed_TransXYInBits2_bit integer' ; when in flat coordinate mode | <X> ; when in compact coordinate mode <CY> ::= 0 | (1 <CY value> ) ; 0 means it will use default value which is ; (y=0 in the flat coordinate system or the global envelope) <CY value> ::= 'signed_TransXYInBits2_bit integer' ; when in flat coordinate mode | <Y> ; when in compact coordinate modePolyline Element
<polyline element> ::= [ <numberOfPoints> ] <First Point> { <Next Point> } [ <point terminator> ] ; specifies a start point, zero or many intermediate points and an end point. ; <numberOfPoints> appears only when in flat coordinate mode ; <point terminator> appears only when in compact coordinate mode <point terminator> ::= 111…111111 ; Absolute mode in character size WVG. Same number of ; bits of <MaxXInBits0> or <MaxXYInBits0> | 1111…1111111 ; Absolute mode in standard WVG. Same number of bits of ; <MaxXInBits1>or <MaxLocalXYInBits> | ( 100 | 1000 ) ; Offset mode (relative). ; use 100 when <Offset X Use> = 0 ; use 1000 when <Offset X Use> = 1Circular Polyline Element
<circular polyline element> ::= <curve hint> [ <numberOfPoints> ] <FirstPoint> <curve offset> <point> { <curve offset> <NextPoint> } [ <offset terminator> ] ; <numberOfPoints> appears only when use ; flat coordinate mode ; <offset terminator> appears only when use ; compact coordinate mode <curve hint> ::= <hint> <curve offset> ::= ( 0 | (1 <curve offset value>) ) ; when <curve hint> is true | <curve offset value> ; when <curve hint> is false <offset value> ::= 'signed 4-bit integer' ; when <curve offset in bits> = 0 ; or in character size WVG | 'signed 5-bit integer' ; when <curve offset in bits> = 1 ; Curve offset ratio r = e/L ; Where e is actual curve offset(can be positive or negative), ; L is distance between adjacent nodes ; We use a signed integer value v to represent. v = round(r*k); ; Where k = 2^n - 2 (n is number of bits used for <offset value>) <offset terminator> ::= ( 1 <curve offset bits>) ; when <curve hint> is true | < curve offset bits > ; when <curve hint> is false <curve offset bits> ::= 1000 ; when <curve offset in bits> = 0 | 10000 ; when <curve offset in bits> = 1Bezier Polyline Element
<Bezier polyline element> ::= [ <NumberOfPoints> ] <First Point> {<OnCurve> <Next Point>} [ 1 <point terminator>] ; Same data format for PolyBezCurve, and PolygonBezCurve ; <numberOfPoints> appears only when in flat coordinate moed ; "1 <point terminator>" appears only when in compact coordinate mode <NumberOfPoints> ::= 'unsigned_NumberOfPointsInBits_bit integer' <OnCurve> ::= 0 | 1 ; 0 - off curve ; 1 - on curvePolygon Element
<polygon element> ::= ( 00 <polyline element> ) | (01 <circular polyline element> ) | (10 <Bezier polyline element> )Simple Shape Element
<simple shape element> ::= (0 <rectangle element> ) | (1 <ellipse element> ) <rectangle element>::=<Point><Width><Height><rounded flag> <Angle> <ellipse element>::=<Point><Width><Height> <Angle> <Width> ::= <X> | <Offset X> ; <Offset X> is used when <Offset Bit Use> exists in the <basic element header> ; if the element is in global scope in compact coordinate mode, use unit of ; (global envelope width/ (number of X grid lines -1 )) <Height>::= 0 | (1 <HeightValue> ) ; 0 means the height is same as width, height will not be encoded <HeightValue> ::= <Y> | <Offset Y> ; <Offset Y> is used when <Offset Bit Use> exists in the <basic element header> ; if the element is in global scope in compact coordinate mode, use unit of ; (global envelope height/ (number of Y grid lines -1 )) <rounded flag> ::= 0 | 1 ; 0 for straight corner, 1 for rounded cornerSpecial Shape Element
<special shape element> ::= <point> <angle> 00 ( <vertex> < diameter > ; regular polygon | 01 ( <vertex> <vertex angle> < diameter > ; star | 10 ( <rectangle size> <rows> <columns> ) ; grid | 11 ; not used <diameter > ::= <X> | <Offset X> ; diameter of circle or vertex ; <Offset X> is used when <Offset Bit Use> exists in the <basic element header> ; if the element is in global scope in compact coordinate mode, use unit of ; (global envelope width/ (number of X grid lines -1 )) <rectangle size>::= <width> <height> <vertex> ::= 000…111 ; number of vertex = <vertex> + 3 <vertex angle> ::= 00…11 ; 00 for 0 degree, 01 for 36 degree ; 10 for 60 degree, 11 for 90 degree <rows> ::= 0000…1111 ; rows = <rows> + 1 <columns> ::= 0000…1111 ; columns = <columns> + 1Text Element
<text element> ::= <point> <font size> <angle> <text code mode> <string length> { <char> } ; <point> is top-left corner of the text. <font size> ::= <Y> | <Offset Y> ; <Offset Y> is used when <Offset Bit Use> exists in the <basic element ; header> ; if the element is in global scope in compact coordinate mode, use unit of ; (global envelope height/ (number of Y grid lines -1 ))Local Envelope Element
<local envelope element> ::= ( 0 <local envelope description> <point> ) ; local start ; <point> is top- left corner of the local envelope in global coordinates. ; Elements in the local envelope scope use local coordinates and measurements | 1 ; local end <local envelope description> ::= <coordinate resolution> <MaxLocalXYInBits> <MaxLocalXYInBits> ::= 00…11 ; 00 for 3 bits(max value 7), 01 for 4 bits (max value 15), ; 10 for 5 bits (max value 31), 11 for 6 bits (max value 63)Group Element
<group element> ::= (0 (0 | (1 <transform>) ) <display> ) ; start of group. Transform is optional | 1 ; end of group <display> ::= 0 | 1 ; 0 - no display when render; 1 - display when renderRe-use Element
<re-use element> ::= <element index> ; point to the element to be re-used ; only <basic element>,<group element> and ; <re-use element> can be reused <transform> ; re-use with transformation 0 | (1 <array parameter>) ; array. It should be performed as the last step 0 | (1 <OverrideAttributeSet> ) <element index> ::= <index value> ; the element sequence number in whole drawing. Start from 0. <array parameter> ::= <columns> [ <array width> ] <rows> [ < array height> ] ; <array height> indicates whole height of the array, appears when <rows> is non-zero ; element interval at X direction equals to <width>/<columns> ; <array width> indicates whole width of the array, appears when <colunms> is non-zero ; element interval at Y direction equals to <height>/<rows> ; The top left element in the array is at the position specified in <transform> <array width> ::= <X> ; if the element is in globale scope in compact coordinate mode, use unit of ; (global envelope width/ (number of X grid lines -1 )) <array height>::= 0 | (1 <Y> ) ; 0 means the height is same as width, height will not be encoded ; if the element is in globale scope in compact coordinate mode, use unit of ; (global envelope height/ (number of Y grid lines -1 ))Frame Element
<Frame> ::= <KeepLastFrameContentFlag><HasFilledColorFlag>[< fill color >] ; <fill color> is new background color for the frame <KeepLastFrameContentFlag>::='unsigned 1-bit integer' ; keep the image of the last frame on the screen, or clear it ; value 0 - Do not keep last frame content. ; value 1 - Keep last frame content. <HasFilledColorFlag> ::='unsigned 1-bit integer' ; value 0 - no filled color ; value 1 - has filled colorSimple Animation Element
<simple animation element> ::= <cycle type> ( 0 | ( 1 <visibility parameter> ) ( 0 | ( 1 <transform> ) ; begin transform ( 0 | ( 1 <transform> ) ; end transform ( 0 | 1 ) ; 0 for no bouncing. 1 for bouncing <rotation direction> <round rotation flag> <round rotation flag> ::= 0 | 1 ; 0 for no round rotation. ; 1 for round rotation and will override angles defined in <transform> <cycle type> ::= 0 | 1 ; 0 indicates short animation cycle; 1 indicates long animation cycle <visibility parameter> ::= <visibility timing> <visibility timing> ::= 0000…1111 | 00000000…11111111 ; One blinking cycle is divided into four equal time steps for short ; animation cycle or eight steps for long animation cycle. <visibility timing> is a map of time steps in ; which 0 represents invisible and 1 represents visible. Note that in above map, consequence time steps ; is from left to right, or from first order to later order in bit stream. <rotation direction> ::= 0 | 1 ; 1 for clockwise rotating. 0 for counter-clockwise rotatingStandard Animation Element
<standard animation element>::= <element index> <BeginTransform><EndTransform><Rotation Direction> <Round> 0 | (1 <BeginColor><EndColor> ) <BeginTime><Duration><ExistAfter> <BeginTransform> ::= 0 | (1<Transform> ) ; begin position ;0 - means use (start from) default transform: ; Angle=0, TranslateX=0, TranslateY=0, ScaleX=256, ScaleY=256, Cx=0, Cy=0 ;1 - means Transform follows <EndTransform> ::= 0 | (1 <Transform> ) ; end position ;0 - means use (end at) default transform ; Angle=0, TranslateX=0, TranslateY=0, ScaleX=256, ScaleY=256, Cx=0, Cy=0 ;1 - means Transform follows <Rotation Direction> ::= 0 | 1 ;0 - counter clockwise ;1 - clockwise <Round> ::= 0 | 1 ;0 - no rotation ;1 - rotate 360 degrees <BeginColor> ::= ( 0 | (1 <line color> ) ) ( 0 | (1 <fill color> ) ) ;0 - use default colors ;1 - use specified colors <EndColor> ::= ( 0 | (1 <line color> ) ) ( 0 | (1 <fill color> ) ) ;0 - use default colors ;1 - use specified colors <BeginTime> ::= 'unsigned 12-bit integer' ;<BeginTime> is in units of 10ms <Duration> ::= 'unsigned 12-bit integer' ; <Duration> is in units of 10ms <ExistAfter> :: = 0 | ( 1 <AnimationRepeat>) ; 0 - animation element will disappear after the animation is finished ; 1 - animation element will persist after the animation is finished <AnimationRepeat>::= 0 | ( 1 <Bouncing> ) ; 0 - no repeat, animated element will stay ; at <EndTransform> ; 1 - animation will repeat, duration will be <Duration> <Bouncing>:= 0 | 1 ; 0 - no bouncing, animation will repeat as from begin ; position to end position ; 1 - repeat with bouncing. Animation will be ; repeated as end position → ; begin position, then begin position→end position, ; then end position→begin position …Extended Element
<Extended> ::= <SizeOfSize><Size><ExtendedElementType>{<payload>} <SizeOfSize>::='unsigned_5_bit integer' ; the bit size of the Size field <Size>::='unsigned-<SizeOfSize>-bit integer' ; size of extended element data after ExtendedElementType, in bytes <ExtendedElementType>::='unsigned_8_bit integer' ; element type of extended element <payload>::='unsigned_8_bit integer' ; encoded extended element data. The size should be the same as the Size field of Extended, above.Position and Measurement
<First Point>::=<point> ; first point of a polyline or polygon (including circular and ; Bezier polygons) <Next Point> ::= <point> | ; when use absolute mode <Offset> ; when use offset mode ; in flat coordinate system, only offset mode is used. <point> ::= <X> <Y> <X> ::= 'signed MaxXInBits2-bit integer' ; when in flat coordinate mode and <XYAllPositive> = 0 | 'unsigned MaxXInBits2-bit integer' ; when in flat coordinate mode and <XYAllPositive> = 1 | 'unsigned MaxXInBits1+4-bit integer' ; when in compact coordinate mode and in global scope | 'unsigned MaxLocalXYInBits+3-bit integer' ; when in compact coordinate mode and in local scope | 'unsigned MaxXInBits0+3-bit integer' ; when in character size WVG (use standard header) | 'unsigned MaxXYBits0+3-bit integer' ; when in character size WVG (use compact header) <Y> ::= 'signed MaxYInBits2-bit integer' ; when in flat coordinate mode and <XYAllPositive> = 0 | 'unsigned MaxYInBits2-bit integer' ; when in flat coordinate mode and <XYAllPositive> = 1 | 'unsigned MaxYInBits1+4-bit integer' ; when in compact coordinate mode and in global scope | 'unsigned MaxLocalXYInBits+3-bit integer' ; when in compact coordinate mode and in local scope | 'unsigned MaxYInBits0+3-bit integer' ; when in character size WVG (use standard header) | 'unsigned MaxXYBits0+3-bit integer' ; when in character size WVG (use compact header) ; Note: in compact coordinate mode,<X> and <Y> do not use the maximum number of the unsigned integer <Offset> ::= <Offset X> <Offset Y> <Offset X> ::= <signed offset X> ; when used by <Next Point> | <unsigned offset X> ; when used in other cases <Offset Y> ::= <signed offset Y> ; when used by <Next Point> | <unsigned offset Y> ; when used in other cases <signed offset X> = 'signed OffsetXInBitsLevel1-bit integer' ;when in flat coordinate mode and <offset bit use> = 0 | 'signed OffsetXInBitsLevel2-bit integer' ;when in flat coordinate mode and <offset bit use> = 1 | 'signed 3-bit integer' ;when in compact coordinate mode and <offset bit use> = 0 | 'signed 4-bit integer' ;when in compact coordinate mode and <offset bit use> = 0 <signed offset Y> = 'signed OffsetYInBitsLevel1-bit integer' ;when in flat coordinate mode and <offset bit use> = 0 | 'signed OffsetYInBitsLevel2-bit integer' ;when in flat coordinate mode and <offset bit use> = 1 | 'signed 3-bit integer' ;when in compact coordinate mode and <offset bit use> = 0 | 'signed 4-bit integer' ;when in compact coordinate mode and <offset bit use> = 0 <unsigned offset X> ::= 'unsigned OffsetXInBitsLevel1-bit integer' ;when in flat coordinate mode and <offset bit use> = 0 | 'unsigned OffsetXInBitsLevel2-bit integer' ;when in flat coordinate mode and <offset bit use> = 1 | 'unsigned 3-bit integer' ;when in compact coordinate mode and <offset bit use> = 0 | 'unsigned 4-bit integer' ;when in compact coordinate mode and <offset bit use> = 1 <unsigned offset Y> ::= 'unsigned OffsetYInBitsLevel1-bit integer' ;when in flat coordinate mode and <offset bit use> = 0 | 'unsigned OffsetYInBitsLevel2-bit integer' ;when in flat coordinate mode and <offset bit use> = 1 | 'unsigned 3-bit integer' ;when in compact coordinate mode and <offset bit use> = 0 | 'unsigned 4-bit integer' ;when in compact coordinate mode and <offset bit use> = 1