# NAME
JKML - Just K markup language
# SYNOPSIS
use JKML;
decode_jkml(<<'...');
[
{
# heh.
input => "hoghoge",
expected => "hogehoge",
description => <<-EOF,
This markup language is human writable.
JKML supports following features:
* heredoc
* raw string.
* comments
EOF
regexp => r" ^^ \s+ ",
}
]
...
# DESCRIPTION
JKML is parser library for JKML. JKML is yet another markup language.
__This module is alpha state. Any API will change without notice.__
## What's difference between JSON?
JKML extends following features:
- Raw strings
- Comments
These features are very useful for writing test data.
# JKML and encoding
You MUST use UTF-8 for every JKML data.
# JKML Grammar
- Raw strings
JKML allows raw strings. Such as following:
raw_string =
"r'" .*? "'"
| 'r"' .*? '"'
| 'r"""' .*? '"""'
| "r'''" .*? "'''"
Every raw string literals does not care about non terminater characters.
r'hoge'
r"hoge"
r"""hoge"""
r'''hoge'''
- Comments
Perl5 style comemnt is allowed.
# comment
- String
String literal is compatible with JSON.
string = sqstring | dqstring
dqstring = '"' dqchar* '"'
sqstring = "'" sqchar* "'"
dqchar = unescaped | "'" | escaped
sqchar = unescaped | '"' | escaped
escaped = escape (
%x22 / ; " quotation mark U+0022
%x5C / ; \ reverse solidus U+005C
%x2F / ; / solidus U+002F
%x62 / ; b backspace U+0008
%x66 / ; f form feed U+000C
%x6E / ; n line feed U+000A
%x72 / ; r carriage return U+000D
%x74 / ; t tab U+0009
%x75 4HEXDIG ) ; uXXXX U+XXXX
escape = %x5C ; \
quotation-mark = %x22 ; "
unescaped = [^"'\]
- Number
Number literal is compatible with JSON. See JSON RFC.
3
3.14
3e14
- Map
Map literal's grammar is:
pair = string "=>" value
map = "{" "}"
| "{" pair ( "," pair )* ","? "}"
You can omit quotes for keys, if you don't want to type it.
You can use trailing comma unlike JS.
Examples:
{
a => 3,
"b" => 4,
}
- Array
array = "[" "]"
| "[" value ( "," value )* ","? "]"
Examples:
[1,2,3]
[1,2,3,]
- heredoc
Ruby style heredoc.
<<-TOC
hoghoge
TOC
- Value
value = map | array | string | raw_string | number | funcall
- Boolean
bool = "true" | "false"
- NULL
null = "null"
Will decode to `undef`.
- Function call
funcall = ident "(" value ")"
ident = [a-zA-Z_] [a-zA-Z0-9_]*
JKML supports some builtin functions.
# Builtin functions
- base64
Decode base64 string.
base64(string)
# AUTHOR
tokuhirom <
[email protected]>
# LICENSE
Copyright (C) tokuhirom
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
## JSON::Tiny LICENSE
This library uses JSON::Tiny's code. JSON::Tiny's license term is following:
Copyright 2012-2013 David Oswald.
This program is free software, you can redistribute it and/or modify it under the terms of the Artistic License version 2.0.
See
http://www.perlfoundation.org/artistic\_license\_2\_0 for more information.