Tech-invite3GPPspaceIETFspace
21222324252627282931323334353637384‑5x

Content for  TS 23.040  Word version:  18.0.0

Top   Top   Up   Prev   Next
0…   3…   3.3…   4…   8…   9…   9.2…   9.2.2.2…   9.2.2.3…   9.2.3…   9.2.3.12…   9.2.3.24   9.2.3.24.1…   9.2.3.24.10…   9.2.3.24.10.1.12…   9.2.3.24.10.2…   9.2.3.24.11…   9.2.3.25…   9.3…   10…   10.1.1…   10.1.3…   10.1.5…   10.1.7…   10.1.9…   10.1.11…   10.1.13…   10.1.15…   10.1.17…   10.2   10.2.1…   10.2.3…   10.2.5…   10.2.7…   10.3   11…   A…   C   C.1…   C.3…   C.5…   C.7…   C.9…   C.11…   C.13…   C.15…   D…   E…   F…   G…   G.2…   G.6   G.7   H…   I…   J…   K…

 

G.6  Data Format BNFp. 186

The following notation is used in the present document for BNF syntax:
< >
Enclose term names
|
Separates alternatives (exclusive OR)
[ ]
Square brackets enclose optional items in syntax descriptions.
{ }
{} Term enclosed is used zero or more times
()
() Enclose groups of alternative terms
From … to
;
Start with comments
0
Bit value 0 in bit stream
1
Bit value 1 in bit stream
' '
Terminator described by enclosed text
Notes for reading the BNF:
WVG (Wireless Vector Graphics)
<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 | 1
; 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
<character size WVG header> ::=
  ( 0  ( <aspect ratio> <line element mask> <relative use> 
  <parameters X-0> <parameters Y-0> ) )
; 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
Character Size WVG Elements
<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 color
Generic 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 animation
Element
<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 respectively
Element 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 fill
Transform
<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 mode
Polyline 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> = 1 
Circular 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> = 1
Bezier 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 curve
Polygon Element
Polygon element is actually a closed polyline (including circular and Bezier polyline)
<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 corner
Special 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> + 1
Text 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 render
Re-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 color
Simple 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 rotating
Standard 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
Up

Up   Top   ToC