どこでもんじょ原稿形式
| 項目 |
値 |
| 版 |
1 |
| 符号化 |
UTF-8 |
| 基礎文法 |
CommonMark系Markdown |
| 組方向 |
横(既定) |
| 試験中 |
方向: 縦(プレビューと PDF の骨格) |
1. 記法
(* ISO/IEC 14977風EBNF *)
原稿 = [ 前付 ], 本文 ;
前付 = "---", 改行, { 設定, 改行 }, "---", 改行 ;
設定 = キー, 空白, ":", 空白, 値 ;
本文 = { 標準ブロック | 拡張ブロック } ;
標準ブロック = ? CommonMark系Markdownブロック ? ;
改行 = "\n" | "\r\n" ;
空白 = { " " | "\t" } ;
非空文字列 = ? 1文字以上の改行を含まないUnicode文字列 ? ;
値 = ? 改行を含まないUnicode文字列 ? ;
正整数 = 非零数字, { 数字 } ;
数字 = "0" | 非零数字 ;
非零数字 = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
識別子 = ? 空白・構文区切り文字を含まない1文字以上のUnicode文字列 ? ;
2. Markdown
| 構造 |
構文 |
| 見出し |
#〜######+空白+本文 |
| 段落 |
空行区切り |
| 強調 |
*文字* |
| 強い強調 |
**文字** |
| 強調+強い強調 |
***文字*** |
| 打ち消し |
~~文字~~ |
| 行内コード |
`文字` |
| リンク |
[表示](URL) |
| 画像 |
 |
| 箇条書き |
- 項目 / * 項目 |
| チェック |
- [x] 項目 / - [ ] 項目 |
| 引用 |
> 本文 |
| コードブロック |
言語 … |
| 表 |
パイプ区切り+区切り行 |
| 水平線 |
--- |
| 行内数式 |
$…$ |
| 独立数式 |
$ 改行 … 改行 $ |
見出し = ( "#" | "##" | "###" | "####" | "#####" | "######" ), " ", 非空文字列 ;
行内数式 = "quot;, 非空文字列, "quot; ;
独立数式 = "$", 改行, 非空文字列, 改行, "$" ;
3. フロントマター
キー =
"題" | "題名"
| "紙" | "用紙" | "判型"
| "行送り方向"
| "方向"
| "文字サイズ" | "字数" | "本文幅" | "行数"
| "段組"
| "第1頁側"
| "内余白" | "外余白"
| "左柱" | "右柱"
| "ノンブル位置"
| "目次深さ" | "tocDepth"
| "h1番号様式" | "h2番号様式" | "h3番号様式"
| "h1前" | "h1後"
| "段落間糊Pt" | "段落間糊PlusPt" | "段落間糊MinusPt"
| "コードブロック前空きem" | "コード文字サイズ倍率"
| "箇条字下げ" | "箇条字下げEm"
| "分綴" | "分綴言語規則" | "Hyphenopoly"
| "全角追加" | "全角除外"
| "二桁数一枡"
| "超連結認識プロトコル" ;
判型 = 判型名 | ミリ寸法 ;
判型名 = "A3" | "A4" | "A5" | "A6" | "B4" | "B5" | "B6" ;
ミリ寸法 = 正整数, [ "mm" ], ("×" | "x"), 正整数, [ "mm" ] ;
行送り方向 = "長辺" | "短辺" ;
方向 = "横" | "縦" ;
段組 = "1" | "2" ;
第1頁側 = "右" | "左" ;
柱内容 = "なし" | "文書題" | "章題" | "節題" ;
ノンブル位置 = "下中央" | "下小口" | "下のど" | "上中央" | "上小口" | "上のど" | "なし" ;
目次深さ = "1" | "2" | "3" | "4" | "5" | "6" ;
入切 = "入" | "切" ;
ポイント長さ = 数値, "pt" ;
エム長さ = 数値, "em" ;
数値 = [ "-" ], 数字, { 数字 }, [ ".", 数字, { 数字 } ] ;
命令列 = 命令本体, { ( ";" | ";" ), 命令本体 } ;
| 正規キー |
別名 |
値域 |
題 |
題名 |
値 |
紙 |
用紙, 判型 |
判型(向きを含まない) |
行送り方向 |
— |
長辺 / 短辺 |
方向 |
— |
横 / 縦(縦 は試験中) |
文字サイズ |
— |
正数(pt) |
字数 |
— |
正整数 |
本文幅 |
— |
正数(mm) |
行数 |
— |
正整数 |
段組 |
— |
1 / 2 |
第1頁側 |
— |
右 / 左 |
内余白 |
— |
非負数(mm) |
外余白 |
— |
非負数(mm) |
左柱 |
— |
柱内容 |
右柱 |
— |
柱内容 |
ノンブル位置 |
— |
下中央 / 下小口 / 下のど / 上中央 / 上小口 / 上のど / なし |
目次深さ |
tocDepth |
1〜6 |
h1番号様式 |
— |
{h1}を含み得る文字列 |
h2番号様式 |
— |
{h1}, {h2}を含み得る文字列 |
h3番号様式 |
— |
{h1}, {h2}, {h3}を含み得る文字列 |
h1前 |
— |
命令列 |
h1後 |
— |
命令列 |
段落間糊Pt |
— |
ポイント長さ |
段落間糊PlusPt |
— |
ポイント長さ |
段落間糊MinusPt |
— |
ポイント長さ |
コードブロック前空きem |
— |
エム長さ |
コード文字サイズ倍率 |
— |
正数 |
箇条字下げ |
箇条字下げEm |
非負数(em) |
分綴 |
— |
空白区切り分綴語列 |
分綴言語規則 |
Hyphenopoly |
カンマ区切り言語列 |
全角追加 |
— |
文字列 |
全角除外 |
— |
文字列 |
二桁数一枡 |
— |
入 / 切 |
超連結認識プロトコル |
— |
カンマ/空白区切りスキーム名 |
第一見出し番号 := 置換("h1番号様式", "{h1}", 第一見出し連番)
第二見出し番号 := 置換(置換("h2番号様式", "{h1}", 第一見出し連番), "{h2}", 第二見出し連番)
第三見出し番号 := 置換(置換(置換("h3番号様式", "{h1}", 第一見出し連番), "{h2}", 第二見出し連番), "{h3}", 第三見出し連番)
見出し前後の手書き命令種 = 既定命令種 ⇒ 既定命令を注入しない
伸行小 ≡ 伸行中 ≡ 伸行大 (* 重複判定時のみ *)
見出し前=切 ⇒ 当該h1のh1前を注入しない
見出し後=切 ⇒ 当該h1のh1後を注入しない
4. コメント命令
命令 = "<!--", 空白, 命令本体, 空白, "-->" ;
複合命令 = "<!--", 空白, 命令本体,
{ 空白, ( ";" | ";" ), 空白, 命令本体 },
[ 空白, ( ";" | ";" ) ], 空白, "-->" ;
命令本体 =
改頁命令
| 紙面命令
| 伸行命令
| 上浮抑制命令
| 字下げ命令
| ぶら下げ命令
| 見出し番号命令
| 見出し既定切命令
| 類開始 | 類終了
| 組み方命令
| 分綴開始 | 分綴終了
| 分綴言語開始 | 分綴言語終了
| 浮開始 | 浮終了
| 回込開始 | 回込終了
| 割注命令
| 超連結自動認識命令 ;
改頁命令 = "改頁" | "pbr" ;
紙面命令 = "紙面", 空白, ":", 空白, 紙面属性列 ;
伸行命令 = "伸行小" | "伸行中" | "伸行大" | "伸行"
| "vfil" | "vfill" | "vfilll" | "縦埋め" ;
上浮抑制命令 = "上浮抑制" | "suppressfloats" ;
字下げ命令 = "段落字下げ", 空白, ":", 空白, [ 長さ ] ;
ぶら下げ命令 = "段落ぶら下げ", 空白, ":", 空白, [ 長さ ] ;
長さ = 数値, ( "em" | "マス" ) ;
見出し番号命令 = "見出し番号", 空白, ":", 空白, ( "有" | "無" ) ;
見出し既定切命令 = "見出し前=切" | "見出し後=切" ;
類開始 = "類", 空白, ( ":" | ":" ), 空白, 類名列 ;
類終了 = "/類", 空白, ( ":" | ":" ), 空白, 類名列 ;
類名列 = 識別子, { " ", 識別子 } ;
組み方命令 = "組み方", 空白, ":", 空白, ( "欧文" | "和文" | "切" | "自動" ) ;
分綴開始 = "分綴", 空白, ":", 空白, 分綴語列 ;
分綴終了 = "/分綴", 空白, ":", 空白, 分綴語列 ;
分綴言語開始 = "分綴言語", 空白, ":", 空白, 言語列 ;
分綴言語終了 = "/分綴言語", 空白, ":", 空白, 言語列 ;
分綴語列 = 非空文字列 ;
言語列 = 非空文字列 ;
浮開始 = ( "浮" | "float" ), [ 空白, 浮属性列 ] ;
浮終了 = "/浮" | "/float" ;
回込開始 = "回込", [ 空白, 回込属性列 ] ;
回込終了 = "/回込" ;
割注命令 = "割注", 空白, ( ":" | ":" ), 空白, 入切 ;
超連結自動認識命令 = "超連結自動認識", 空白, ( ":" | ":" ), 空白, 入切 ;
4.1 紙面属性
紙面属性列 = 紙面属性, { 空白, 紙面属性 } ;
紙面属性 = 属性名, "=", 属性値 ;
属性名 = "段組" | "columns" | "方向" | "文字サイズ" | "字数" | "本文幅" | "行数" ;
属性値 = '"', 値, '"' | "'", 値, "'" | 値 ;
| 属性 |
値域 |
単位 |
段組, columns |
1 / 2 |
— |
方向 |
横 / 縦(縦 は試験中) |
— |
文字サイズ |
正数 |
pt |
字数 |
正整数 |
字 |
本文幅 |
正数 |
mm |
行数 |
正整数 |
行 |
紙面属性の発効頁 = 次頁
推奨並び = 改頁, 紙面
4.2 伸行
| 入力 |
正規形 |
強度 |
伸行小, vfil |
伸行小 |
1 |
伸行, 伸行中, vfill, 縦埋め |
伸行中 |
2 |
伸行大, vfilll |
伸行大 |
3 |
伸行集合 := 当該頁にある伸行の集合
最大強度 := 最大({ 伸行.強度 | 伸行 ∈ 伸行集合 })
配分対象 := { 伸行 ∈ 伸行集合 | 伸行.強度 = 最大強度 }
各 伸行 ∈ 配分対象 の伸長量 := 頁残余 / |配分対象|
各 伸行 ∈ (伸行集合 − 配分対象) の伸長量 := 0
4.3 状態遷移
| 命令 |
遷移 |
段落字下げ:値 |
字下げ := 値 |
段落字下げ: |
字下げ := 1em |
段落ぶら下げ:値 |
ぶら下げ := 値 |
段落ぶら下げ: |
ぶら下げ := 既定値 |
見出し番号:無 |
見出し番号状態 := 無効 |
見出し番号:有 |
見出し番号状態 := 有効 |
組み方:値 |
組み方 := 値 |
組み方:自動 |
組み方 := 既定値 |
分綴:値 |
分綴集合 := 分綴集合 ∪ 値 |
/分綴:値 |
分綴集合 := 分綴集合 − 値 |
分綴言語:値 |
分綴言語集合 := 分綴言語集合 ∪ 値 |
/分綴言語:値 |
分綴言語集合 := 分綴言語集合 − 値 |
割注:入 |
割注 := 有効 |
割注:切 |
割注 := 無効 |
超連結自動認識:入 |
超連結自動認識 := 有効 |
超連結自動認識:切 |
超連結自動認識 := 無効 |
見出し番号状態 = 無効 ⇒ 見出し番号を非表示 ∧ 番号カウンタを進めない ∧ 目次には含める
5. 行内拡張
行内拡張 = 伸空 | 固定幅空き | 脚注 | 後注参照 | 索引項目 | ルビ | キャプション | 相互参照 | 創作漢字 | 下線 | 装飾範囲 ;
伸空 = "<", 伸空タグ, "></", 伸空タグ, ">" ;
伸空タグ = "Fil" | "Fill" | "Filll" | "fil" | "fill" | "filll" ;
固定幅空き = "<Skip", [ 空白, "em=\"", 数値, "\"" ], "></Skip>"
| "<skip", [ 空白, "em=\"", 数値, "\"" ], "></skip>" ;
脚注 = "^[", 非空文字列, "]" ;
後注参照 = "[^", 識別子, "]" ;
後注定義 = "[^", 識別子, "]:", 空白, 非空文字列 ;
索引項目 = "[[", [ 読み, "@" ], 語, [ "|", 表示文字列 ], "]]" ;
読み = 非空文字列 ;
語 = 非空文字列 ;
表示文字列 = 非空文字列 ;
ルビ = "<ruby>", ルビ内容, "</ruby>" ;
ルビ内容 = 親文字, "<rt>", ルビ文字, "</rt>",
{ 親文字, "<rt>", ルビ文字, "</rt>" } ;
キャプション = "[", キャプション本文, "](", 種, [ ":", 標 ], ")" ;
相互参照 = '<Ref t="', 種, '" l="', 標, '">', 代替表示, "</Ref>" ;
創作漢字 = '<GW c="', グリフ符号, '">', 代替表示, "</GW>" ;
下線 = "<u>", 非空文字列, "</u>" ;
装飾範囲 = '<span class="', 類名列, '">', 非空文字列, "</span>" ;
親文字 = 非空文字列 ;
ルビ文字 = 非空文字列 ;
キャプション本文 = 非空文字列 ;
種 = 識別子 ;
標 = 識別子 ;
代替表示 = 非空文字列 ;
グリフ符号 = 識別子 ;
5.1 伸空・固定幅空き
| 入力 |
正規形 |
強度 |
<Fil></Fil> |
伸空小 |
1 |
<Fill></Fill> |
伸空中 |
2 |
<Filll></Filll> |
伸空大 |
3 |
| 入力 |
意味 |
<Skip em="1"></Skip> |
固定幅空き(em)。\hskip 相当。伸空とは別 |
伸空集合 := 当該行にある伸空の集合
最大強度 := 最大({ 伸空.強度 | 伸空 ∈ 伸空集合 })
配分対象 := { 伸空 ∈ 伸空集合 | 伸空.強度 = 最大強度 }
自然幅 := 伸空の幅を零とした当該行の幅
残余幅 := 最大(0, 行幅 − 自然幅)
各 伸空 ∈ 配分対象 の伸長量 := 残余幅 / |配分対象|
各 伸空 ∈ (伸空集合 − 配分対象) の伸長量 := 0
5.1.1 割り注
割注 = 有効 ∧ 全角普通文字のみの入れ子なし(…) ⇒ 二行組
対象外の括弧・コード・ルビ・数式・HTML内 ⇒ 通常組み。警告なし
5.1.2 超連結自動認識
超連結自動認識 = 有効 ∧ 裸の通信プロトコルURL ⇒ 行内コード化。表示は原文のまま
http(s) ⇒ 簡易紙面・本紙面・PDF でクリック可。リンク先のみ Punycode/パーセント調節
ftp / smb / afp / onion 等 ⇒ コード化のみ
www.のみ・相対URL・mailto / tel・javascript: ⇒ 対象外
超連結認識プロトコル ⇒ 既定スキームに加えて認識するスキーム名
初期 超連結自動認識 := 切
5.2 脚注・後注
脚注 ⇒ 参照出現頁の下部へ配置
後注参照.識別子 = 後注定義.識別子
5.2 索引
| 入力 |
読み |
語 |
表示 |
[[語]] |
自動 |
語 |
語 |
[[語|表示]] |
自動 |
語 |
表示 |
[[かな@語|表示]] |
かな |
語 |
表示 |
5.3 採番・参照
キャプション.番号 := 1 + 個数({ 前置キャプション | 前置キャプション.種 = キャプション.種 })
キャプション.出力 := キャプション.種 + キャプション.番号 + " " + キャプション.本文
相互参照.参照先 := 一意({ キャプション |
キャプション.種 = 相互参照.種属性 ∧ キャプション.標 = 相互参照.標属性 })
参照先あり ⇒ 相互参照.出力 := 参照先.種 + 参照先.番号; リンク先 := 参照先
参照先なし ⇒ 相互参照.出力 := 代替表示; 警告 := 未解決参照
| 制約 |
論理式 |
| 標付きキャプションの一意性 |
∀甲,乙: (甲.種=乙.種 ∧ 甲.標=乙.標) ⇒ 甲=乙 |
| 前方参照 |
許可 |
| 標なしキャプション |
採番する、参照不可 |
| 図キャプション |
画像と別行 |
| 表キャプション |
対応表の直前。空行可。他ブロック不可 |
| 画像代替文 |
単独では採番しない |
5.4 画像
画像参照 = "" ;
画像ソース = ローカル参照 | 外部URL | dataURL ;
ローカル参照 = ? ファイル名(一時品タブ) ? ;
外部URL = "http://" | "https://", 許可ホスト, … ;
| 取得経路 |
条件 |
| 一時品タブ |
ファイル名参照。blob 経由で描画 |
| data URL |
許可 MIME・サイズ上限内 |
| 同一オリジン |
相対 URL・自サイト絶対 URL |
| 許可ホスト |
下表のホスト(*.r2.dev はサブドメイン一致) |
| R2 プロキシ |
r2.dev / *.r2.dev → /api/image-proxy?url= へ書き換え |
許可画像ホスト
| ホスト |
i.imgur.com |
i.ibb.co |
i.postimg.cc |
ik.imagekit.io |
images.unsplash.com |
imagedelivery.net |
placehold.co |
r2.dev |
*.r2.dev |
res.cloudinary.com |
ucarecdn.com |
| 制約 |
内容 |
| 許可外ホスト |
PDF 埋め込み不可。警告 |
| SVG 実体 |
content-type と実バイトを優先判定。拡張子 .svg でも実体がラスタ(例: ImageKit の WebP 自動変換)ならベクタ埋め込み不可 |
| R2 |
原稿には公開 URL を記載。取得時に image-proxy へ変換 |
6. ブロック拡張
拡張ブロック = 浮ブロック | 回込ブロック | 目次ブロック | 索引ブロック | 後注ブロック | タグブロック ;
浮ブロック = 浮開始命令, 改行, 本文, 改行, 浮終了命令 ;
浮開始命令 = "<!--", 空白, 浮開始, 空白, "-->" ;
浮終了命令 = "<!--", 空白, 浮終了, 空白, "-->" ;
浮属性列 = 浮属性, { 空白, 浮属性 } ;
浮属性 = 浮位置 | 浮様式 ;
浮位置 = ( "位置" | "position" | "data-position" | "data-float-position" ),
"=", 属性値 ;
浮様式 = "style", "=", 属性値 ;
回込ブロック = 回込開始命令, 改行, 本文, 改行, 回込終了命令 ;
回込開始命令 = "<!--", 空白, 回込開始, 空白, "-->" ;
回込終了命令 = "<!--", 空白, 回込終了, 空白, "-->" ;
回込属性列 = 回込属性, { 空白, 回込属性 } ;
回込属性 = 回込側 | 回込幅 ;
回込側 = "側", "=", 属性値 ;
回込幅 = "幅", "=", 属性値 ;
目次ブロック = '<div class="目次"', [ 空白, 'data-depth="', 目次深さ, '"' ], "/>" ;
索引ブロック = '<div class="索引"/>' ;
後注ブロック = '<div class="後注"/>' ;
タグブロック = ? div, span等のHTMLブロック ? ;
| 構造 |
意味 |
浮…/浮 |
囲まれた内容を浮動体化 |
位置="上" |
上部候補 |
位置="下" |
下部候補 |
位置="htbp" |
h/t/b/p候補 |
style="text-align: center;" |
中央揃え |
回込…/回込 |
原稿位置の図または表の横へ本文を流す。浮きとは別 |
側="頭" / 側="末" |
図版を置く側。省略時は末 |
幅="12字" |
省略時は行長の半分。本文との間は1字 |
<div class="目次"/> |
目次生成 |
<div class="目次" data-depth="値"/> |
指定深さの目次生成 |
<div class="索引"/> |
索引生成 |
<div class="後注"/> |
後注一覧生成 |
回込.初版 = 単段横組
回込.二段組 = 全幅へ落とす
回込.縦組 = 未対応
7. 見出し番号
| 入力 |
既定出力 |
# 章 |
第1章 章 |
## 節 |
1-1 節 |
### 項 |
1-1.1 項 |
8. 出力
| 形式 |
内容 |
| Markdown |
入力原稿 .md(設定・様式もフロントマターに含まれる) |
| HTML |
組版済み紙面 |
| 頁付文字列 |
.md。タグ付き PDF と同じ構造群の読順。柱・ノンブルは含めない |
| docx |
構造書出。見た目再現はしない。数式は Word 数式/OMML。画像は media 埋め込み。ページ数上限なし |
| PDF |
指定判型の組版結果(クライアント完結) |
| タグ付きPDF |
設定「タグ付きPDF」が入のとき、見出し・段落・図・内部リンクの文書構造タグを付与。既定は切。柱・ノンブルは本文の読み上げ対象外。PDF/UA 適合表明ではない |
8.1 一発
公開 Markdown の URL から紙面と PDF を作る入口。パスは /1(旧 /from-url も互換)。許可ホストの MD を markdown-proxy で取得する。紙面・設定 UI は通常アプリと同じ。編集器・原稿管理・IndexedDB 永続化は持たない。
9. 正規化
| 入力 |
正規形 |
題名 |
題 |
用紙, 判型 |
紙 |
tocDepth |
目次深さ |
箇条字下げEm |
箇条字下げ |
Hyphenopoly |
分綴言語規則 |
pbr |
改頁 |
縦埋め, vfill, 伸行 |
伸行中 |
vfil |
伸行小 |
vfilll |
伸行大 |
<Fil></Fil>, fil |
伸空小 |
<Fill></Fill>, fill |
伸空中 |
<Filll></Filll>, filll |
伸空大 |
suppressfloats |
上浮抑制 |
float, /float |
浮, /浮 |
10. 最小完全例
---
題: 例示文書
紙: B5
方向: 横
段組: 1
h1前: 改頁
---
# 表紙
<!-- 類:文字中央 ゴシック 太め -->
例示文書
<!-- /類:文字中央 ゴシック 太め -->
<!-- 伸行 -->
# 本文
構成を<Ref t="図" l="構成図">図「構成図」</Ref>に示す^[脚注]。
<!-- 浮 位置="上" -->

[構成図](図:構成図)
<!-- /浮 -->
[[こうせい@構成|構成]]
<div class="索引"/>