エントリー補足-はてなのスーパーpre記法(aa記法)でphpのソースの閉じタグ ?> を書かないでいたら、phpのソースがパースされない箇所が出てきたのだの巻


(08/12/17追記)
まだ部分的にスーパーpre記法(aa記法)でパース出来ないことがある。

とりあえず 末尾の||<の直前行に
#^\s\?>$#; (スペース一つあけてphpの閉じタグ?>を付ける
とするのが現時点で化けない最適解のようだ。

閉じタグが無い場合や、末尾?>の行頭にスペースをあけていない場合はソースの中身に依存して、パース出来るかは不定

 >||
 <?php
 class hoge(){
   function fuga(){
   }
 }
  ?>
 ||<

というように書くのが良いみたい。

はてなの人修正オシイ。

一応ここを確認する。 http://i.hatena.ne.jp/idea/22423


(08/12/15追記)

なんか他にも同様な現象の方がいるみたいです。

俺は何度かソースエントリーを更新したけど、なんども挙動が変わるので、
半ばあきらめました。


とりあえず、

  • 開始と終了のタグをきちんと付ける。
  • タグ直下の行頭の #^//上略$# みたいなところを #^\s//上略$# に書き換える。
  • 開始タグ、終了タグの直前・直後の空行を付けたり削ったりする。

とかいろいろやって調整していますが、何が悪さをしているのか不明。
おとなり日記の表示も消してみました。(日付をまたいで中身が変わるから。)


勝手な推測だと、終了部分の ||< の認識がうまくいっていない?


実ははてなのパーサーのシンタックスハイライト生成する部分の正規表現って、
すごいことになっているのかなあ?「手を入れるの超コエー。いまさら分割できないよー」みたいな。


(以上追記終わり)




ええと、以前のCodeIgniter関連のエントリーを見返していたら、
ブラウザ上でソースが欠落して表示される箇所を幾つか発見した。

最近はてなDiaryのパース方法が微妙に何か変わったのか、それともおとなり日記を表示するように設定を変えたからか、
原因はよくわからないし調べていないが、とにかく表示されなくなったソースが部分的にあったので泣きながら直した。



いつもスーパーpre記法(aa記法)で、


>|php|
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Hoge{
function Hoge{
なんかのソース
}
}
//下略

<

みたいに書いていて、ちゃんとソースがブラウザ上に表示されているのを確認していたのだけど、

なんか閉じタグが無いとパースされない部分が最近出てきたので、さっきエントリーを直した。



変更点

あくまでソースのおしり部分の表記を変えただけ(改行を増やしただけ)。(ロジックは変えていないです。)



>|php|
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Hoge{
function Hoge{
なんかのソース
}
}
//下略

<

みたいに空行2行開けるか、(開けたらうまくパースされたりするけど、そうとも限らない。また空行を開けなくてもうまくパースされるソースもある。)



>|php|
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Hoge{
function Hoge{
なんかのソース
}
}
//下略
?>

<

みたいにちゃんと閉じるかが必要みたい。




というわけで、ここ最近私のエントリーを見られた方、
一部ソースが見えなくなっている箇所があって、おかしいなと思われたかも知れません。


一応全部見直したので、見えるようになったはずです。残念な思いをした方はもう一度ご確認ください。



一応CodeIgniterのクラスとかのソース(というかPHP)は、
閉じタグ不要(むしろ無い方が意図しないヘッダ送信トラブルを防げて良い)のだけど、
この日記では便宜上一部閉じタグを追加しました。



頭とおしりは気にしないでください。


急にパースの挙動とアウトプットが変わるのは悲しいのねん。
俺のエントリーだけかもしれんが。