CKDefinition parses .ckd ( CGIKit Definition ) file. CKComponent stores the result of parse and uses it for binding.
The format of CKD file is very different from Ruby or HTML Here, the format of CKD file is described as pseudo-BNF like Ruby’s document.
STMTS : (STMT)*
STMT : ELEMENT_NAME ':' ELEMENT_TYPE '{' ATTRS '}'
ATTRS : (ATTRIBUTE '=' VALUE TERM)*
ATTRIBUTE : ruby_method_name
VALUE : METHODS
| LITERAL
METHODS : ruby_method_name('.'ruby_method_name)*
| METHODS BLITERAL
LITERAL : 'true'
| 'false'
| DIGIT_SEQUENCE
| STRING
BLITERAL : ARRAY
: HASH
ARRAY : '[' DIGIT_SEQUENCE ']'
HASH : '[' LITERAL ']'
DIGIT_SEQUENCE : DIGIT+
DIGIT : [0-9]
STRING : ''' any_character* '''
| '"' any_character* '"'
ELEMENT_NAME : (LETTER | DIGIT | '_')+
ELEMENT_TYPE : ruby_class_name
LETTER : [A-Za-z]
TERM : ';'
| '\n'
ruby_method_name means Ruby’s Method Name: For example, ‘foo’, ‘to_s’ and ‘is_a?’. Also, ruby_class means Ruby’s Class Name: For instance, ‘CKString’ and ‘CKComponent’.
CKDefinition regards a part which begins from ’#’ to the end of the line as comment. In the next case, ’# foo bar comment’ is not interpreted by CKDefinition.
foo : CKString {
# foo bar comment
value = "foo";
}
parse
parse_ckd_file
pretty_print
Class CKDefinition::CKDParseError