質問箱/5026

カテゴリデザイン・CSS・スキン
サマリ定義ルールに追加したい
バージョン1.4.7
投稿者kyo
状態質問
投稿日2010-11-14 (日) 20:40:51

質問

default.ini.php にあるユーザ定義ルールに追加するのではなく、
"-"で<li>要素 や "*"で<h>要素のように本来の定義ルールに新たな要素を追加したいと思うのですが、どこをいじったらいいのか分からなく困っています。

例えば ==サブタイトル== と記述すると <span class="subtitle">サブタイトル</span> と置き換えるようにするなどです。

よろしくお願いします。

回答

  • 質問箱/4496, 質問箱/4335, 質問箱/4213 -- 2010-11-14 (日) 22:44:09
  • 回答ありがとうございます。上記ページをそれぞれ見たのですが、phpの知識があまりなく、質問内容のように置き換えることができません。よろしければ詳しく教えてもらえると助かります。 -- kyo 2010-11-15 (月) 11:01:49
    • 自分も定義ルールの追加に興味を持っている方の者なのですが、具体的にどれをやってみて、どううまくいかなかったかを書くと返答しやすいのではないかと思いますよ。 -- Qn? 2010-11-16 (火) 01:15:01
  • dev:PukiWiki/1.4/ちょっと便利に/インライン要素が展開される整形済みテキスト行, dev:PukiWiki/1.4/ちょっと便利に/インライン・マルチラインコメント, dev:PukiWiki/1.4/ちょっと便利に/見出しとリストの拡張 -- 2010-11-16 (火) 14:27:14
  • レベル不足を実感しているのなら、まずはプラグインを自作して実現するほうが、メンテナンスやアップデートなどが楽でいいとは思うのですが・・・ -- 2010-11-16 (火) 23:13:56
    • 行単位(ブロック要素)のルールを本体に追加するには、lib/convert_html.phpを改造する必要があります。
      795a796,818
      > class subtitle extends Element
      > {
      >       function subtitle(& $root, $text)
      >       {
      >               parent::Element();
      >
      >               $text = ltrim(substr($text, 1));
      >
      >               if ($text != '')
      >                       $this->last = & $this->last->insert(new Inline($text));
      >       }
      >
      >       function canContain($obj)
      >       {
      >               return is_a($obj, 'Inline');
      >       }
      >
      >       function toString()
      >       {
      >               return $this->wrap(parent::toString(), 'span'. ' class="subtitle"');
      >       }
      > }
      >
      807c830,831
      <               '<' => 'BQuote');
      ---
      >               '<' => 'BQuote',
      >               '=' => 'subtitle');
      例えばデフォルト状態にこの差分をあてたなら、行頭に"="があれば次にブロック要素が出てくるまでのインライン要素が<span class="subtitle">の内側に入れられます。
      ただ、リストのように複雑な事をしたいならば質問箱/4528に書かれているようなHTMLタグとそれに呼応する各classの入れ子関係まで考慮に入れなければいけない場合もあるので、格段に難易度が上がります。 -- 2010-11-16 (火) 23:13:56
    • 定義ルールと同じようなインライン要素のルールを本体に追加するには、lib/make_link.phpを改造する必要があります。
      lib/make_link.phpを改造してAutoAlias機能を本体に組み込む例: 質問箱/4436 -- 2010-11-16 (火) 23:13:56
    • ただ最初にも言いましたが、プラグインだけでは実現しづらい事(AutoLinkなどの開始・終了タグがない可変ルールや、他wikiの整形ルールを取り込むなど)をしたいというのでない限り、ほぼ同等の事をプラグイン経由で本体に組み込む形で実現できるので、ユーザ定義ルールで使っていた記法をそのまま維持したい特別な理由がない限りいきなり挑戦するメリットがあまりありません。 -- 2010-11-16 (火) 23:13:56
  • みなさん回答ありがとうございます。上記の通り改造すると正常に動いたのですが、現在の状態では
    =小見出し
    テキスト
    と記述すると
    <span class="subtitle">小見出し テキスト</span>
    なってしまうのですが、<h>要素のように
    *見出し
    テキスト
    と記述すると
    <h3>見出し</h3>
    <p>テキスト</p>
    となるようにできないでしょうか?質問ばかりですみません。 -- kyo 2010-11-19 (金) 18:01:02
  • クラス関数のcanContainで入れ子の可否を定義しています。上の例ではInlineクラス(ブロック要素に該当しなかった==インライン要素を担当)が以降の行に来た場合のみTRUEを返して許可しています。見出しや水平線のように次の行は必ず新しいブロック要素とするには、HeadingクラスやHRuleクラスのcanContain関数のように常にFALSEを返せば実現できます。ただ、おかしな定義をすると不正なHTML構造に変換されてしまうので、自分自身を含めたブロック要素を許可する場合には注意が必要です。(これ以上は、上の回答と話がかぶるので省きます) -- 2010-11-19 (金) 22:09:54


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-11-19 (金) 22:25:26
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.256 sec.

OSDN