Skip to content

Instantly share code, notes, and snippets.

@takahashim
Created May 29, 2012 07:49
Show Gist options
  • Save takahashim/2823169 to your computer and use it in GitHub Desktop.
Save takahashim/2823169 to your computer and use it in GitHub Desktop.
mindoc coreフォーマット定義案 (RelaxNG Compact形式)
# mindoc core (draft v0.1)
#
# mindoc(minimal document material description language)(仮)とは、文書素材を記述するための言語で、
# 一般的な書籍のための文字情報を記述するために必要最低限な要素すら網羅していない、単なる素材程度のものしか
# 記述できない・記述させない言語です。その代わり、さまざまなフォーマットへの変換・逆変換は行いやすくなって
# います(はずです。また逆変換は要素を削るので「縮退」と言った方がいいかも)。
#
# このmindoc coreは電子書籍交換フォーマットv1.1のだいたいサブセットになっています(はずです)。
# 名前空間は別にしましたが。
default namespace = "http://mindoc.tatsu-zine.com"
start = html
html = element html {
head,
body,
attribute xml:lang { text }?
}
head = element head { (title | link )* }
link = element link {
attribute rel { "stylesheet" | "alternate_stylesheet" },
attribute href { text },
attribute type { text },
attribute media { text }?
}
title = element title { text }
## 本文(body)はblock-tagsのみではなくinline-tagsも許す(ためのtext-tagsを使用)
body = element body { text-tags*, common-attrs }
## block-tagsは見出しのみ (hrはportability高いだけど必要性低いので基本セットからは削除、画像もまずはinlineで)
block-tags = ( h1 | h2 | h3 | h4 | h5 | h6 )
## Inlineは改行・強調・リンク・ルビ・オブジェクト埋め込み(画像)とテキスト
## coreかどうかは交換フォーマットを参考にしてみる
inline-tags-core = ( br | em | ext-text | ruby )
inline-tags = ( inline-tags-core | object-tags | a )
text-tags = block-tags | inline-tags
## object-tagsはまずは画像のみ(audio、videoはあとで)
object-tags = img
## classとidは適宜
common-attrs = (class-attr | id-attr)
class-attr = attribute class { text }?
id-attr = attribute id { text }?
h1 = element h1 { inline-tags*, common-attrs }
h2 = element h2 { inline-tags*, common-attrs }
h3 = element h3 { inline-tags*, common-attrs }
h4 = element h4 { inline-tags*, common-attrs }
h5 = element h5 { inline-tags*, common-attrs }
h6 = element h6 { inline-tags*, common-attrs }
img = element img {
common-attrs,
attribute src { text },
attribute alt { text }?,
attribute longdesc { text }?,
attribute width { text }?,
attribute height { text }?
}
br = element br { common-attrs }
hr = element hr { common-attrs }
em = element em { inline-tags*, common-attrs }
a = element a {
inline-tags*,
common-attrs,
attribute href { text }?,
attribute target { text }?,
attribute title { text }?
}
## ルビはrbcとかは削り、rb/rtとrb/rt/rpの記述のみに限定
ruby = element ruby {
((rb, rt) | (rb, rp, rt, rp) )
}
rb = element rb { inline-tags* }
rt = element rt { inline-tags* }
rp = element rp { ext-text* }
ext-text = ( text | external_char )
## 外字はまずは交換フォーマットに準じる
external_char = element external_char {
attribute system { text }?,
attribute code { text }?,
attribute glyph_data { text }?,
attribute priority { text }?,
attribute alt { text }?
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment