0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

小道具:S式風記述からHTMLを生成

Last updated at Posted at 2023-04-01

HTML 生成用の記述

HTML の

< タグ 属性=値 ...> 内容 ... </タグ>

を置き換えた表記

(タグ [属性=値] 内容 ...)

から HTML 形式へ変換するツールです。

エラー チェックの類がほぼありません...

サンプル

入力ファイル
(!DOCTYPE html)
(html[lang=ja]
 (head
  (meta [charset=utf-8])
  (title "sample data")

  (@comment "このコメントは取り込まれて <!-- や --> なども反映するので注意")
  (#comment "このコメントは反映されない")

  (#comment """[ があると ]""" までを一括りとして反映する. "{path}" と表記してファイルも反映可能)
  (style """[
     body {
       background-color: snow;
     }
   ]"""))

 (body
  (@comment "--> <p>@comment による悪戯</p> <!--")
  (p クォートしなくても大丈夫だけど(br)空白や記号により意図しない結果になる場合あり)

  (#comment "ツールと同じプロセスで python が実行される")
  (@python "def test(): return 'OK'")

  (#comment "@ruby で <ruby> の生成")
  (p (ruby "漢字" (rp "(")(rt "かんじ")(rp ")")) "や"
     (ruby "漢" (rp "(")(rt "かん")(rp ")") "字" (rp "(")(rt "じ")(rp ")")) "は" (br)
     (@ruby "漢字:かんじ") "や" (@ruby "漢字:かん,じ") "表記になり、" (br)
     "コロンがないと、最後の" (@ruby "漢字") "が使用される")

  (#comment "以前実行した @python 内容を参照可能")
  (#comment "HTML 変数は実行前に None で初期化されていて、設定すると反映する")
  (p (@python "HTML = f'Python Test - exec(): {test()}'"))

  (#comment "$python では子プロセスとして実行するので @python の内容は使えない")
  ($python """[
     # このプログラムは stdin として送り込まれ、stdout が取り込まれる.
     indent = '  ' * 2
     print(indent + '<p>Python Test - run(): OK</p>')
   ]""")

  (#comment
    '(@while [判定変数 初期化] [更新1] [更新2]... 内容)'
    "初期化と更新は python を呼び出します")
  (table [border=1] [style="text-align: center"]
   (@while [fLine "fLine = True; nLine = 1"] ["nLine +=1; fLine = (nLine <= 3)"]
    (tr (@while [fCol "fCol = True; nCol = 1"] ["nCol += 1; fCol = (nCol <= 3)"]
     (td (@python "HTML = f'{nLine} * {nCol} = {nLine * nCol}'"))))))

  (#comment
    '(@unless [判定変数 初期化] [更新1] [更新2]... 内容)'
    '(@when [判定変数 初期化] [更新1] [更新2]... 内容)'
    "初期化と更新は python を呼び出します")
  (@when [flag "flag = True"] ["flag = False"] (p "when が実行された"))
  (@unless [flag] (p "unless が実行された"))

  (script """[
     // JavaScript: (予定)
     // End:
   ]""")))
出力結果
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title>sample data</title>
    <!-- このコメントは取り込まれて <!-- や --> なども反映するので注意 -->
    <style>
      body {
        background-color: snow;
      }
    </style>
  </head>
  <body>
    <!-- --> <p>@comment による悪戯</p> <!-- -->
    <p>クォートしなくても大丈夫だけど<br>空白や記号により意図しない結果になる場合あり</p>
    <p><ruby>漢字<rp>(</rp><rt>かんじ</rt><rp>)</rp></ruby><ruby><rp>(</rp><rt>かん</rt><rp>)</rp><rp>(</rp><rt></rt><rp>)</rp></ruby><br><ruby><rp>(</rp><rt>かんじ</rt><rp>)</rp></ruby><ruby><rp>(</rp><rt>かん</rt><rp>)</rp><rp>(</rp><rt></rt><rp>)</rp></ruby>表記になり、<br>コロンがないと、最後の<ruby><rp>(</rp><rt>かん</rt><rp>)</rp><rp>(</rp><rt></rt><rp>)</rp></ruby>が使用される</p>
    <p>Python Test - exec(): OK</p>
    <p>Python Test - run(): OK</p>
    <table border="1" style="text-align: center">
      <tr><td>1 * 1 = 1</td><td>1 * 2 = 2</td><td>1 * 3 = 3</td></tr>
      <tr><td>2 * 1 = 2</td><td>2 * 2 = 4</td><td>2 * 3 = 6</td></tr>
      <tr><td>3 * 1 = 3</td><td>3 * 2 = 6</td><td>3 * 3 = 9</td></tr>
    </table>
    <p>when が実行された</p>
    <p>unless が実行された</p>
    <script>
      // JavaScript: (予定)
      // End:
    </script>
  </body>
</html>

ソースコード

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?