Momota.pw別館

Yuki_noeの進捗状況

Yuki_noeがだいたい完成?

どうも、百田變化です。

Yuki_noeの記法があらかた完成したので報告です。まだすべてのHTMLを表現できるような感じではありませんが、大体のことはできるようになっています。

基本文法は

# てってれー
てってれー
てってれー # てってれー[属性](主にid.class): てってけてってってー # てってれー[属性](主にid.class): てってけてってってー
てれっててってってー # てってれー[属性](主にid.class){ てってけてってってー
てれっててってってー } 普通の文章の中に[てってれー]を混ぜることで別の色を見せることもできるし、この装飾を*[別のもので]カバーすることもできます(ただしこのように簡単な注意書きみたいなものも書けますし、!(本当の脚注にすることもできます))。 つなげれば[リンク](#)になります。

この5つのみです。この記法を駆使して頑張っていくのがこの言語です。

あとは、見出しとして

# てってれー
てってれーな説明文
----------------
なかみー

 な感じでヘッダを表現します。

あとはMarkdown Extraなテーブルも実装しようと思っています。

何も記号をかかないで

section:
  header:
    h1: てってれー
  p: てってれーな中身

 のようにすることでHTMLタグをもっと簡単に表現することもできます。ここらへんはHamlとかを考えながらオレオレ記法にしています

もともとの考え方は「ブログを簡単に作りたい、レイアウトも文書も」というものなので、こういう風になります。

サンプル文書です

// コメントはこれでいいよね
   そしてインデントで認識もしてくれる仕様に
---
lang: ja
---
# Momota.pw^+^
Something new about web and others.
+ Home
+ Tech
  + Perl
  + Ruby
  + Javascript
  + HTML
  + CSS
  + Others
+ Illust
---------
  ##> タイトル
  time[2015-05-10]: yyyy.mm.dd
  ---------
  + リストの中に複数行入れたければ、
    前の行よりもインデントする。それだけ。
  インデントを戻せばそういうふうに閉じられる。##
  // ↑のようにするとセクションが閉じられる。前の行に繋げるのも可
  後は、サンプルとして置いておくものとかある
  article:
    hx: header
    // h1とかh2とかやっていくのが面倒くさいから、大体hxで対応できるようにするよ
    div.column[title=column][data-select=no]:
      まあなんというかHTMLを埋め込みたければこうすることができるよという話
      ちなみにブロック名の最初に:をつけるとフィルタになるようにする
      :HTML
        <p>こうすればHTMLを埋め込むのもかなり楽になるというわけだ</p>
    ちなみにRubyを入れてループすることも可能
    - 10.times do |i|
      ループ#{i}回目
      - if i <= 5
        さらに5回目以内
  後はですね、リストの中になんでも突っ込めたりセクションにできたりするやつです
  + 定義[名](スル):
    1. 物事の意味・内容を他と区別できるように、言葉で明確に限定すること。「敬語の用法を―する」
    2. 論理学で、概念の内包を明瞭にし、その外延を確定すること。通常、その概念が属する最も近い類と種差を挙げることによってできる。
    + ていぎいき【定義域】:
      -> 変域(へんいき)
  で、これまでにもリストとして使えるはずの「-」をRuby埋め込み用としてつかうなど、機能制限を大幅に設けてきました。
  そのため、hr(区切り線)にも、そのようなものを設けたいと思います。
  区切り線は
  ***********
  のみ。
  これは、markdownのヘッダを示す=や-などのものを避けるものとしてもそれなりに機能します。
  また、残った「=」はどうするかというと、はてな記法の「続きを読む記法」とかですね。
  あれはボク大好きなんです。だから拡張として、目印としての用法を考えて、残しておきます。
  区切りということになるのです。だから、電子書籍みたいなものにしたいなら、そこを改ページにする。
  長い記事で、たくさん分割して表示したいとき、区切り線にする。そういう用途です。好きに使って!
  で、思いついたんですよ。他の記法を綺麗に書く方法。
  > http://momota.pw:
    こういうふうにして引用すると:
      <blockquote cite="http://momota.pw">
        こういう風になります
      </blockquote>
    あとは、あれですね。リストを書くときに、リスト番号にそれをするというやつです
    1[a]. こういうふうにするのはいいですね。最初にリストのそれをいれます
    1. それで、リストの番号は何にしても構いません
    12[fixed]. 今のところはこういう設定にすればよいのではと考えていますがまあリストの数字を属性で変えるやつですね
    3. 何にしようがつきまといますはい
  ↓あ、フッタはそのまま書いてくださいです。もしくは著作権記号でも使いますか?
footer: © 2015 Momota Henka.

 見やすいようにちょっとだけ例外とか設けてありますがだいたいこの通りです。

これからパーサをきちんと作っていきたいと思っています。

よろしくです。

 

欠点とか見つけてもらいたい

Yuki_noeの記法とパーサについて

なんというか、そういうことです。


_global-header
#= Momota.pw^+^ _global-title.title
#: Something new about web and others.
  ##> a[#]: 記事のタイトル
            -title: 属性はこういうふうに指定できます。
            -data:
              -title: もちろん、こういうふうにすることもできます。
      -# ふと思ったんだけどでかいリンクを表現するのに
         タグ表記使うのってちょっと変な気がしませんか?
         ここは記号で表記すべき!
         そう思ったら自分でそういう記号を定義しましょう。
         そういうことができるようにYuki_noeは設計されています。
    : time[2015-04-23]: yyyy.mm.dd
      -# タグにはデフォルトの属性があるものが存在するから
         datetime=とか書かなくていいし、その時の動作は関数だから中身も気にしなくていい
         そしてコメントは複数行使える
  こういう感じに書くことができる。
  普通に文章を書くよりもいいのではないかと思い始めた。
  なんかやり方はHamlの色々をmarkdownにした後に属性のあたりをいじくったみたいになっていると思う
  ### こういうふうにインデントも他の中身もなしで見出しを定義することもできます
  そして内容もこういうふうにすることができます。
  また、閉じることもできます。
  あ、定義リストそれなりに使えます。
  + 百田變化
  : 特に本名を晒すことなく色々ネットで「するよ!」って言っておきながらなかなかしない人。
    もちろんこのYuki_noeも開発途中。
    [ろすさん](@lost_and_found)に出会ったときものすごく嬉しがっていた。
  1. 数字付きリストが使えます
  2. これを再現するためにASCII文字からアルファベットだけ取り除くという動作をしています。
     ゆくゆくはきちんと記法だけを補足したいと思っている
  ###
  - 10.times do |i|
    Rubyを埋め込むことで繰り返し処理(今で#{i}回目)をすることもできます。
  それだけでなく、HTMLもHamlより簡潔に、そしてインデントだけで表記することができます。
  ul:
    - 7.times do |i|
      li: a[#]: Momota#{i}
  コードを埋め込むこともできます。
  :code[Ruby]
    class Yuki_noe
      def self.load_file file_name
        File.open f_name, 'r:utf-8' do |f|
      end
    end
  また、リストなどを表記した時のリスト全体のidはそのままでは付けられませんので、
  _list:
    + .item: aaa
    + .item: bbb
    + .item: ccc
  というように空の物を使います。
  したがって、タグ名を省略した時にdivになることは保証されません。
  また、
  _list
  + aaa .item
  + bbb .item
  + ccc .item
  という風に書くこともできます。まとまりの最初の方とか行末につっこめるという。
$ © 2015 Momota Henka.
  -# フッタ

見りゃだいたい分かるように作ってます。

しかし、これ等幅フォントが使えるエディタがないと使えない上に読めない仕様なのですが、イマノジダイトウハバフォントクライアルヨネー

なかったらボクのやってきたことが全て無駄になるのでまあそういうことだと願い続けるのですが、

  • 記号を行の頭に書いてスペースを入れるとそういう風になる
  • 複数行いれたければ次の行にはスペースをその分入れる
  • 範囲指定として行頭に同じ記号を書く事がある

以上。

まあ普通の記法といえばこれだけなんですよね。

あとは

  • 関数名[引数]::関数名[引数]を使って関数を呼べるということ
  • -Rubyを使える

だけだったり。

これだけのことなので実装はそう難しくないはずなのですが、一行目から一回も戻らずに食べていくとするとものすごく面倒くさい。

戻りゃいいじゃないかと思うかもしれないのですが、これするとそれはそれで大量の変数とか色々必要になるんですねー

そして抽象構文木になおしてからHTMLにしようと思ったのですが、それはそれでおかしい。抽象構文木の集まりから関数を起動して、というところまで独自に定義できるようにすると怖いことになるので。

抽象構文木に直すくらいならHTMLにしてしまえばいいとの結論に至りました。

しかしその都度HTMLに直したりするとなると、ボクの作る思いパーサはどうせキャッシュを取らなければならないのに、大丈夫なのかという話になるんですね。


- 10.times do |i|
  + リスト#{i}

という感じでした時にli要素はいいのですがul要素をRubyのやつの外に置くか、Rubyを実行してから再度パースする必要がある。

これのどっちを取るのかという話で、キャッシュを取るとしたらパーサに何度も頼るわけにいかないしul要素をRubyの外に置くという話になるんですね

しかしこれ、記法を独自に書くときになるとユーザ側で独自に上の記法を支配しろという話になるので大変なんですね

まあそういうふうになるパーサをボクが書くことになるんですがどうしよう

あれです

そう、あれです

Yuki_noe(軽量マークアップ言語)つくってる百田變化です

「いくらでも拡張できる言語あったら、面白いよね」という発想から至りました

といってもあらかたの記号は使ってしまったのでマークアップとどこまで呼べるかというところではありますが。

考え方は単純。

記法を定義してそれにしたがってパースする。

そしてその時の色々からHTMLに変換する。それだけです。

それが難しいのではあるんですが。

とりあえず、やっていくことになります。