**[[質問箱5/26]] [#c413687d] |RIGHT:70|LEFT:410|c |~カテゴリ|デザイン・CSS・スキン| |~サマリ|定義ルールに追加したい| |~バージョン|1.4.7| |~投稿者|[[kyo]]| |~状態|質問| |~投稿日|&new{2010-11-14 (日) 20:40:51};| ***質問 [#z04d9ffe] default.ini.php にあるユーザ定義ルールに追加するのではなく、~ "-"で<li>要素 や "*"で<h>要素のように本来の定義ルールに新たな要素を追加したいと思うのですが、どこをいじったらいいのか分からなく困っています。 例えば ==サブタイトル== と記述すると <span class="subtitle">サブタイトル</span> と置き換えるようにするなどです。 よろしくお願いします。 ***回答 [#iaf373b9] - [[質問箱4/496]], [[質問箱4/335]], [[質問箱4/213]] -- &new{2010-11-14 (日) 22:44:09}; - 回答ありがとうございます。上記ページをそれぞれ見たのですが、phpの知識があまりなく、質問内容のように置き換えることができません。よろしければ詳しく教えてもらえると助かります。 -- [[kyo]] &new{2010-11-15 (月) 11:01:49}; -- 自分も定義ルールの追加に興味を持っている方の者なのですが、具体的にどれをやってみて、どううまくいかなかったかを書くと返答しやすいのではないかと思いますよ。 -- [[Qn]] &new{2010-11-16 (火) 01:15:01}; - [[dev:PukiWiki/1.4/ちょっと便利に/インライン要素が展開される整形済みテキスト行]], [[dev:PukiWiki/1.4/ちょっと便利に/インライン・マルチラインコメント]], [[dev:PukiWiki/1.4/ちょっと便利に/見出しとリストの拡張]] -- &new{2010-11-16 (火) 14:27:14}; -- 上記ページも、[[質問箱4/496]]の解答欄にあったので拝見しました。今一番質問内容近いのは[[dev:PukiWiki/1.4/ちょっと便利に/インライン・マルチラインコメント]]かと思っているのですが・・・。知識が無くどうにもできない状態です。 -- [[kyo]] &new{2010-11-16 (火) 16:16:15}; - レベル不足を実感しているのなら、まずは[[プラグインを自作>dev:プラグイン/開発者向け]]して実現するほうが、メンテナンスやアップデートなどが楽でいいとは思うのですが・・・ -- &new{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">の内側に入れられます。~ ただ、リストのように複雑な事をしたいならば[[質問箱4/528]]に書かれているようなHTMLタグとそれに呼応する各classの入れ子関係まで考慮に入れなければいけない場合もあるので、格段に難易度が上がります。 -- &new{2010-11-16 (火) 23:13:56}; -- 定義ルールと同じようなインライン要素のルールを本体に追加するには、lib/make_link.phpを改造する必要があります。~ lib/make_link.phpを改造してAutoAlias機能を本体に組み込む例: [[質問箱4/436]] -- &new{2010-11-16 (火) 23:13:56}; -- ただ最初にも言いましたが、プラグインだけでは実現しづらい事(AutoLinkなどの開始・終了タグがない可変ルールや、他wikiの整形ルールを取り込むなど)をしたいというのでない限り、ほぼ同等の事をプラグイン経由で本体に組み込む形で実現できるので、ユーザ定義ルールで使っていた記法をそのまま維持したい特別な理由がない限りいきなり挑戦するメリットがあまりありません。 -- &new{2010-11-16 (火) 23:13:56}; - みなさん回答ありがとうございます。上記の通り改造すると正常に動いたのですが、現在の状態では =小見出し テキスト と記述すると <span class="subtitle">小見出し テキスト</span> なってしまうのですが、<h>要素のように *見出し テキスト と記述すると <h3>見出し</h3> <p>テキスト</p> となるようにできないでしょうか?質問ばかりですみません。 -- [[kyo]] &new{2010-11-19 (金) 18:01:02}; - クラス関数のcanContainで入れ子の可否を定義しています。上の例ではInlineクラス(ブロック要素に該当しなかった==インライン要素を担当)が以降の行に来た場合のみTRUEを返して許可しています。見出しや水平線のように次の行は必ず新しいブロック要素とするには、HeadingクラスやHRuleクラスのcanContain関数のように常にFALSEを返せば実現できます。ただ、おかしな定義をすると不正なHTML構造に変換されてしまうので、自分自身を含めたブロック要素を許可する場合には注意が必要です。(これ以上は、上の回答と話がかぶるので省きます) -- &new{2010-11-19 (金) 22:09:54}; #comment