• 追加された行はこの色です。
  • 削除された行はこの色です。
RIGHT:&tag(記法,機能,フレームワーク,思い付き,実装,目次);
RIGHT:[[:t/記法]] [[:t/Wiki]]

''「記法/」で始まるページを作成''
#lookup(記法/,* 新規作成 *);
記法案。それと記法の実装案。

#br
--------------------------------------------------

:いろいろな記法|
[[WikiCreole: List Of Wiki Markup>http://wikicreole.org/wiki/ListOfWikiMarkup]]
[[WikiMatrix - Compare them all>http://www.wikimatrix.org/syntax.php]]
記法

*目次 [#bce4256a]
#contents
----
#lsx(new=true);
記法定義は汎用記法のシンタックスシュガー。
- シンタックスシュガーは、記法のどの部分を汎用記法のどのパラメーターにするかを決める。
- %%シンタックスシュガーは、汎用記法のどのパラメーターをどんな値にするかを決める。%%

*関連 [#ecabb372]
#lsx(tag=記法,new=true,except=^記法(/.*)?$)
汎用記法は全ての要素を表現できる記法。要素クラス名をパラメーターとして受け取れる。

[[検索:記法]]
ToMarkdown()などを持つのはビルトイン要素。
プラグイン要素はそういった記法系に無い。汎用記法と、それにマッピングしたシンタックスシュガーでのみ表記できる。

*記法周辺のタグ [#d6ddbb53]
#tag(0,記法)


*記法とは [#k4a7b293]
RIGHT:[[:t/記法]]
----

機能呼び出し記法のシンタックスシュガー。
呼び出す機能ごとに定義。1つの機能呼び出しについて複数記法を定義していい。
#contents

 ----
**[[記法]] [#le6559d3]
記法は読むためのもの。書くためのものではない。

 *
 **
 ***
***%%[[:i/記法定義は記法→要素クラス→記法]]%% [#kd0df33a]
***[[:Done/記法定義の方法]] [#c461b16c]
***[[:i/ページの内容はコードと見なせる]] [#k0f09fd2]
記法はコードのようなもの。実行結果がページの閲覧時に組み込まれる。
他の言語のコードを書くのならシンタックスハイライトとか自動リンクとか。コンテンツ扱い。実行のようなことはしないで。

 &(...);
 #...

などのWiki特有の書き方のこと。
それと、これらの書き方で書かれたテキストのこと。
「マークダウン」などと同じ用途・目的。→[[キーワード:Markdown]] [[Google:Markdown]]

WikiTextもWikiFormatも同じ意味で使われていそう。
ここでは記法を含むテキストをWikiTextと言うことにしている。
***Markdownの特徴 [#t863970d]
%%[[http://space.hatena.ne.jp/pmint/entry/14218542507645637066]]%%

[[Google:Wiki-Notation]]
[[Google:Wiki-Format]]
[[Google:WikiText]]
[[Google:Wiki Formatted Text]]


実体は機能の呼び出し方(機能を呼び出したいときの書き方)。

→ [[X/Element/Notation]]
*思い付き [#eeb15ebb]

**Excel関数を参考に [#z9d21582]
**ページと見出しを、リンクする/されるの両方に [#nac80435]
ページ名を表す記法、見出しを表す記法を用意。
段落始めに書けばページ名や見出しを定義する。それ以外に書くと指定したページや見出しへのリンクになる。
**タブでインデントしたい [#k456a3d9]
テキストエディターを使うとインデントしやすくなる。

**見えない文字は無視したい [#m8bb29b6]
使うとすれば記法を越えない程度に。
空白を取り除いても同じ記法になるように。
**検索用クラスやめ [#ye1b8fdd]
「[[検索]]」に書かれているクラスを廃止。
Notationクラスで行う。


Notationの機能…
-検索式→オブジェクトの単行表現
-ページのテキスト→オブジェクトの複数行表現
-オブジェクト同士を比較したときの適合度算出
具象クラスが同じ場合も先祖が共通の場合も使える。
先祖が共通の場合は適合度がやや下がる。
クラスメソッド。
-オブジェクト→テキスト(HTML)

…といったことができる。
**機能は検索時の比較方法もメソッドとして持つ。 [#d92fef23]
色とか。色機能(色を示す表現を色オブジェクトに置き換える機能)色を示す記法機能。
 #FFF
 White

…などが
 #FFC

などと近く(高い適合率)になるように。

**ヘルプは初心者向けのみ [#cd5fccce]
詳細な説明なら定義ページを見ればいい。


**変換ルールはページ内で定義 [#a5b31f20]
記法→内部形式(Element系オブジェクト)のルール

[[RegExp]]→Element系クラス名

…という形式で定義。

1ページに1クラス分の複数書式を定義。ページ名と対応するクラスはハードコーディング(変更不可能)で良い。
それらをまとめたページを作れば記法定義の一覧になる。

変換前/後が何であるか、何をどうするのかの違い。
**いろいろな記法 [#o27efa4b]
-[[Markdown]]
いろんな記法が混ざってる。普段使いの文章をフォーマットするための記法。日常の文章から見出された記法。
-[[WikiCreole]]
各種Wikiの共通点。普段使いの文章と競合しないように選ばれてる。マークアップ言語。
-[[c2:TextFormattingRules]]
オリジナル。
-[[pukiwiki:整形ルール]]
PukiWikiの[[整形ルール]]。
-MediaWiki
メジャー。
WikiCreoleにも大きく影響してる。
----
-[[OwnNotation]]
Xの独自記法。
**参考に [#q2cbed3f]
[[WikiCreole: List Of Wiki Markup>http://wikicreole.org/wiki/ListOfWikiMarkup]]
[[WikiMatrix - Compare them all>http://www.wikimatrix.org/syntax.php]]
[[Help:Cheatsheet - Wikipedia, the free encyclopedia>http://en.wikipedia.org/wiki/Wikipedia%3ACheatsheet]]

でも、Notationを単なる 正規表現→機能名とパラメーター とすれば1ページにいくらでもまとめてもいいかも知れない。
例外がなければ。
**記法/ [#q2c84b08]

Notation定義を参照するときのキーは?
特定ページ、または特定のページ以下にあるページ集合?
*実装 [#lffa0e53]
#ls

[[埋め込み式ページ]]を応用して実装。
記法を、「機能呼び出し記法が書かれたページ」を埋め込むことで実現できる。
そうすれば記法→機能呼び出しをページで定義・カスタマイズできる。

…というのはパラメーターなしの機能呼び出しだけ。
ほとんどのNotationは記法/定義に書かないといけない。


**段落 [#r35fc6ff]
空行で段落の開始、終了。
段落末尾で段落の属性指定。実はどこに書いてもいい。

左寄せ、中寄せ、右寄せは段落属性。行単位ではないので行頭には書かない。
Wikitextコメントの中にさらに記法を書けば、これは見えない特殊な記述だとわかりやすい。


**いろいろな記法 [#kde70162]
-単行テキスト
-複数行テキスト
-メールアドレス
-URL
http:、https:、ftp:のほかtwitter:なども。
-数値と計算式とフォーマット
金額とか。
-日時と計算式
-時間(日時×2)と計算式
-選択・列挙型
文字列の列挙型、列挙されていない値は持てない。選択可能数1または任意個。
-ページ任意数
とフィルタリングルール。フィルタリングで特定のページだけを選択肢に。ユーザー限定など。
添付ファイル、添付イメージなどはページとして記述。


URL、ISBN、ASIN、電話番号、住所などを特別扱いに。
**どこでも記法 [#v38163d2]
-検索キーワードで
計画に織り込み済み。
-ページ名として
一行名がページ名なので。
動的な記法が問題。ページ名が動的に変わっては不便。
[[:t/?]]
-ページ名変更時のページ名として
ページ名変更UIによる。
[[:t/?]]


**特別なNotation [#l68ebc5d]
機能ではないもの。特別扱いする必要のあるもの。
-リンク
検索関連で特別扱い?
-埋め込み(埋め込みリンク)
埋め込み解消後のページをNotation解析対象にするので。
Notationを埋め込みで実装するので?
**種別、影響範囲 [#q1f49686]
WikiCreoleの実装にも適用。
影響範囲の小さい順に行修飾、文字修飾、段落…。
影響範囲が重なっている部分では、範囲の小さい記法が優先される。

以下、影響範囲の小さい順(優先度の高い順)
+行修飾、ライン
改行間の全てに影響。
行頭に書く。行頭を含むNotation。1行にしか影響しないのは行頭に書くものなので。書き方の問題。
 **見出し
+行修飾(連結)
行頭。で次の行も同じNotationならまとまる。というよりも前の行が同じなら連結。(もし衝突があったとしても)前の行の属性が優先されるので。
 -リスト
 -リスト
+文字修飾、インライン
どこからでも開始できる。
改行を越えて影響するため、行修飾よりも広範囲。
 //斜体//
+段落修飾、パラグラフ
空行(連続改行)間で有効。
空行後に書く。というか、空行が無くてもこのNotationからを段落とみなす。
少なくとも行頭に書く必要あり。このNotationだけで1行。というか改行を含むNotation。
 >>
 引用(brockquote)
 <<
%%末尾を&#x3c;&#x3c;で終わらせるようにすれば段落(空行)を越えられるが…→連結するなら、越えなくていい。%%
&#x3e;&#x3e; ... &#x3c;&#x3c;で空行を越える記法はスクロール不要な長さなら影響範囲が分かりやすくなる。長い場合は段落ごとに&#x3e;&#x3e;を書いたほうが分かりやすい。
斜体などの段落版があってもいい。
+%%段落修飾(連結)%%
%%段落修飾は全て連結可能にしていいはず。ゆえに段落修飾はどれも連結する。でも毎段落ごとにNotationが必要になるので、&#x3c;&#x3c;で終了させる形のほうが書くときの手間がかからない。→&#x3c;&#x3c;で閉じる?%%
+ページ
%%1ページ全体に影響。なので、どこに書いてもいいが専用欄を設けてもいい。%%
%%ページ冒頭か末尾に書くのが簡単?%%
→ページ/属性にする

----------------------------------------

行頭後・空行後に書くものは改行処理前に解釈。それ以外は改行処理をした上で解釈。ただ空行は残すので空行後の物は改行処理の後でもいい。
''改行→<br/>''をする設定でもしない設定でも、文字修飾は改行を越える。空行も越えられるが…→WikiCreoleに合わせて越えないようにする。影響範囲が分かりやすい。
**曖昧な記法を解釈 [#t13df52c]
書き手の意図を反映させるように。
記号の前後は必ず何らかの効果が現れるように。

 **リスト
で、
 …**太字**
のとき、

 …**B**B**… → …<b>B</b>B**…
 **B**… →<b>B</b>… または <li>B**…
 **…**B**… → <li>…<b>B</b>…
 **B**…**B**… →<b>B</b>…<b>B</b>… または <li>B<b>…</b>B**…

正しくは
 ****B** → <li><b>B</b>

ユーザーが入力した情報が失われてしまうのを防ぐため、余ったNotationは消さずに残す。

bとして解釈できる場合、行頭の**を2つの意味で捉える?
 **B** →<li><b>B</b>
他のケースで使いにくく(結果を予想できなく)なってしまいそう。



*設計 [#q2d61706]
**記法が含むもの [#mef1470f]
-記法
入れ子。
-機能呼び出し
--機能名と入力するデータ列
-機能呼び出し以外のマークアップ
もしあれば。
(これも結局機能として扱うので、結局機能と同じ)