bltxt記法

概要

 bltxt記法は、テキストをXMLのような階層関係がある構造( BLtxtクラス のインスタンス)へ変換するための記法です。

構成

 空行、平文、タグから構成されます。
 タグは左隅付き括弧(【)と右隅付き括弧(】)に囲まれます。
 二行以上連続する空行は、ひとつの空行と同じ扱いとします。
 末尾が改行で終わっても、終わらなくても、どちらでも構いません。

タグの種類

 タグには以下の種類があります。

文中タグ
文の中で用います。
文範囲タグ
文中の特定範囲を示すために用います。
行タグ
特定の一文あるいは単独のタグのみ示すのに用います。
行範囲タグ
特定の行の範囲を示すために用います。
含意タグ
文章に含めない情報を記述するのに用います。
含意範囲タグ
文章に含めない情報を特定の行の範囲について示すのに用います。

 タグは、タグ名と属性から成ります。
 タグ名は省略できません。
 属性は、タグ名に続けて記述します。省略することもできます。
 全角コロン(:)区切りで複数指定できます。

 属性を指定できるのは以下のタグのみです。

タグ

文中タグ

 左隅付き括弧(【)と右隅付き括弧(】)でタグ名や属性を挟みます。

 美しい【ルビ:薔薇:ばら】が咲いていた。

文範囲タグ

 文範囲開始タグと文範囲終了タグから成ります。

 文範囲開始タグは左隅付き括弧+全角パイプ(【|)と右隅付き括弧(】)でタグ名を挟みます。
 文範囲終了タグは左隅付き括弧(【)と全角パイプ+右隅付き括弧(|】)でタグ名を挟みます。

 文範囲開始タグと文範囲終了タグは、タグ名が同じである必要があります。
 文範囲開始タグと文範囲終了タグの間に、改行を含むことはできません。
 文範囲タグ同士で階層構造を作ることができます。

 今日は【|強調】重要【強調|】な日だ。

行タグ

 行タグは、左隅付き括弧+全角イコール(【=)と右隅付き括弧(】)でタグ名を挟みます。
 行タグに続けて文を続けることができます。省略も可能です。

【=見出し】はじめに
【=書影:999-1234567890】

行範囲タグ

 行範囲開始タグと行範囲終了タグから成ります。

 行範囲開始タグは左隅付き括弧+全角ハイフン(【-)と右隅付き括弧(】)でタグ名を挟みます。
 行範囲終了タグは左隅付き括弧(【)と全角ハイフン+右隅付き括弧(-】)でタグ名を挟みます。

 行範囲開始タグと行範囲終了タグは、タグ名が同じである必要があります。
 行範囲開始タグ、行範囲終了タグはそれぞれ一行で記述します。文中に記述することはできません。
 あるいは一行で行範囲開始タグと行範囲終了タグ、およびその内容を記述することもできます。
 行範囲タグ同士で階層構造を作ることができます。

【-囲み記事】
富士山麓にオウム鳴く。
【囲み記事-】

含意タグ

 含意タグは、左隅付き括弧+全角シャープ(【#)と右隅付き括弧(】)でタグ名を挟みます。

【#コメント】ここから重要

含意範囲タグ

 含意タグは、左隅付き括弧+全角アスタリスク(【*)と右隅付き括弧(】)でタグ名を挟みます。

 含意範囲開始タグと含意範囲終了タグから成ります。

 含意範囲開始タグは左隅付き括弧+全角ハイフン(【*)と右隅付き括弧(】)でタグ名を挟みます。
 含意範囲終了タグは左隅付き括弧(【)と全角ハイフン+右隅付き括弧(*】)でタグ名を挟みます。

【*註記】
 正確には、そのような事実があったか確かめられていない。
【註記*】

エスケープ

 タグの中で、属性値に以下を使用するときは全角アンダーバー(_)でエスケープしてください。カッコ内はエスケープした表現です。

 タグの外では以下をエスケープしてください。カッコ内はエスケープ後の表現です。

使用可能文字

 属性値には、改行コードを使用できません。

 タグ名には、以下の文字を使用できません。
 エスケープして使うこともできません。

XML化

 以下のタグを用いて XML化します。
 XML化には BLtxtクラス を利用してください。

blxml
ルートタグ。複数のブロック要素、段落、メタ要素のいずれかから成ります。
block
ブロック要素。複数の段落、メタ要素、下位ブロック要素から成ります。
行タグ、行範囲タグと対応します。
para
段落。複数の行から成ります。
meta
メタ要素。複数の段落、下位ブロック要素から成ります。
含意タグ、含意範囲タグと対応します。
line
行。複数の平文、インライン要素から成ります。
inline
インライン要素。複数の平文、下位インライン要素から成ります。
文中タグ、文範囲タグと対応します。
attrs, attr
属性。
各タグの属性と対応します。
text
平文。

 以下の属性を保持します。

tag
タグ名。
block, para, meta, inlineが保持します。
lnum
bltxt文書での行番号。
block, para, meta, inline, lineが保持します。
snum
同じタグ、同じタグ名での通番。
block, para, meta, inlineが保持します。

平文のXML化

 タグの無い行は、一行ごとにlineタグで囲みます。
 文字列はすべて textタグで囲みます。

 一行以上の空行区切りで、段落とみなします。段落をparaタグで囲みます。
 空行は、ひとつのみでも、複数でも、すべて段落区切りとみなします。

とりなくこえす、
ゆめさませ。

みよあけわたる、


ひんがしを。
<?xml version="1.0" encoding="UTF-8"?>
<bltxt>
  <para lnum="1" snum="1">
    <line lnum="1">
      <text>とりなくこえす、</text>
    </line>
    <line lnum="2">
      <text>ゆめさませ。</text>
    </line>
  </para>
  <para lnum="4" snum="2">
    <line lnum="4">
      <text>みよあけわたる、</text>
    </line>
  </para>
  <para lnum="7" snum="3">
    <line lnum="7">
      <text>ひんがしを。</text>
    </line>
  </para>
</bltxt>

文中タグのXML化

 文中タグは、inlineタグに変換します。
 属性値はattrs, attrタグとして inlineタグ内の先頭に保持します。

美しい【ルビ:薔薇:ばら】が咲いていた。
<?xml version="1.0" encoding="UTF-8"?>
<bltxt>
  <para lnum="1" snum="1">
    <line lnum="1">
      <text>美しい</text>
      <inline tag="ルビ" lnum="1" snum="1">
        <attrs>
          <attr>薔薇</attr>
          <attr>ばら</attr>
        </attrs>
      </inline>
      <text>が咲いていた。</text>
    </line>
  </para>
</bltxt>

文範囲タグのXML化

 文範囲タグも、inlineタグに変換します。
 開始タグと終了タグに囲まれた範囲は、textタグで囲みます。
 文範囲タグを入れ語にした場合、下位の inlineタグや textタグを保持します。
 これにより、階層構造を作ることができます。

ここが【|傍点】重要【傍点|】です。
【|強調】とても【|ルビ:インポータント】重要【ルビ|】ですよ。【強調|】
<?xml version="1.0" encoding="UTF-8"?>
<bltxt>
  <para lnum="2" snum="1">
    <line lnum="2">
      <text>ここが</text>
      <inline tag="傍点" lnum="2" snum="1">
        <text>重要</text>
      </inline>
      <text>です。</text>
    </line>
    <line lnum="3">
      <inline tag="強調" lnum="3" snum="1">
        <text>とても</text>
        <inline tag="ルビ" lnum="3" snum="1">
          <attrs>
            <attr>インポータント</attr>
          </attrs>
          <text>重要</text>
        </inline>
        <text>ですよ。</text>
      </inline>
    </line>
  </para>
</bltxt>

行タグのXML化

 行タグは blockタグに変換します。
 行タグの前後は、空行の有無にかかわらず段落区切りとみなします。
 行タグ同士で階層構造を作ることはできません。
 ただし後述する行範囲タグの下位とすることはできます。

【=見出し】トランプの遊び方

以下の画像を参照してください。
【=画像:howto.jpg】
<?xml version="1.0" encoding="UTF-8"?>
<bltxt>
  <block tag="見出し" lnum="1" snum="1">
    <para lnum="1" snum="1">
      <line lnum="1">
        <text>トランプの遊び方</text>
      </line>
    </para>
  </block>
  <para lnum="3" snum="2">
    <line lnum="3">
      <text>以下の画像を参照してください。</text>
    </line>
  </para>
  <block tag="画像" lnum="4" snum="1">
    <attrs>
      <attr>howto.jpg</attr>
    </attrs>
  </block>
</bltxt>

行範囲タグのXML化

 行範囲タグも blockタグに変換します。
 開始タグ、終了タグの前後は、空行の有無にかかわらず段落区切りとみなします。
 行範囲タグを入れ子にすることで、階層構造を作ることができます。

以下の記事を参照してください。

【-囲み記事】
リンカーンは次の言葉を残した。
【-引用:『リンカーン語録』】
人民の、
人民による、

人民のための政治。
【引用-】
【囲み記事-】
<?xml version="1.0" encoding="UTF-8"?>
<bltxt>
  <para lnum="1" snum="1">
    <line lnum="1">
      <text>以下の記事を参照してください。</text>
    </line>
  </para>
  <block tag="囲み記事" lnum="3" snum="1">
    <para lnum="3" snum="2">
      <line lnum="4">
        <text>リンカーンは次の言葉を残した。</text>
      </line>
    </para>
    <block tag="引用" lnum="5" snum="1">
      <attrs>
        <attr>『リンカーン語録』</attr>
      </attrs>
      <para lnum="5" snum="3">
        <line lnum="6">
          <text>人民の、</text>
        </line>
        <line lnum="7">
          <text>人民による、</text>
        </line>
      </para>
      <para lnum="9" snum="4">
        <line lnum="9">
          <text>人民のための政治。</text>
        </line>
      </para>
    </block>
  </block>
</bltxt>

含意タグのXML化

 含意タグは metaタグに変換します。
 行範囲タグ内に含意タグがあると、blockタグ内に metaタグを作成します。

【#タイトル】円周率の暗記
【#著者:山田太郎】

【#コメント:ここから囲み記事】
【-囲み記事】
【#コメント:3.14159265】
産医師異国に向かう。
【囲み記事-】
<?xml version="1.0" encoding="UTF-8"?>
<bltxt>
  <meta tag="タイトル" lnum="1" snum="1">
    <para lnum="1" snum="1">
      <line lnum="1">
        <text>円周率の暗記</text>
      </line>
    </para>
  </meta>
  <meta tag="著者" lnum="2" snum="1">
    <attrs>
      <attr>山田太郎</attr>
    </attrs>
  </meta>
  <meta tag="コメント" lnum="4" snum="1">
    <attrs>
      <attr>ここから囲み記事</attr>
    </attrs>
  </meta>
  <block tag="囲み記事" lnum="5" snum="1">
    <meta tag="コメント" lnum="6" snum="2">
      <attrs>
        <attr>3.14159265</attr>
      </attrs>
    </meta>
    <para lnum="6" snum="2">
      <line lnum="7">
        <text>産医師異国に向かう。</text>
      </line>
    </para>
  </block>
</bltxt>

含意範囲タグのXML化

 含意範囲タグはmetaタグに変換します。
 タグ名はmetaタグのtag属性として保持します。
 属性値はattrタグとしてmetaタグ内に保持します。
 行範囲タグ内にある含意タグは、その行範囲タグに対応する blockタグ内に metaタグを設けます。

 そして下人は高尾山へと姿を消した【註:消息】。

【*註記:消息】
 正確には、そのような事実があったか確かめられていない。
【註記*】

【-囲み記事】
 芥川龍之介の文章を参考とした。
【*コメント】
 要出典明記。
【コメント*】
【囲み記事-】
<?xml version="1.0" encoding="UTF-8"?>
<bltxt>
  <para lnum="1" snum="1">
    <line lnum="1">
      <text> そして下人は高尾山へと姿を消した</text>
      <inline tag="註" lnum="1" snum="1">
        <attrs>
          <attr>消息</attr>
        </attrs>
      </inline>
      <text>。</text>
    </line>
  </para>
  <meta tag="註記" lnum="3" snum="1">
    <attrs>
      <attr>消息</attr>
    </attrs>
    <para lnum="3" snum="2">
      <line lnum="4">
        <text> 正確には、そのような事実があったか確かめられていない。</text>
      </line>
    </para>
  </meta>
  <block tag="囲み記事" lnum="7" snum="1">
    <para lnum="7" snum="3">
      <line lnum="8">
        <text> 芥川龍之介の文章を参考とした。</text>
      </line>
    </para>
    <meta tag="コメント" lnum="9" snum="1">
      <para lnum="9" snum="4">
        <line lnum="10">
          <text> 要出典明記。</text>
        </line>
      </para>
    </meta>
  </block>
</bltxt>