================================================================================ CSS最小化アルゴリズム ================================================================================ 【ステップ1】 コメントとストリングを、preg_replace_callbackで一つ一つ検査していく。 ==> コメントは消す。 ==> ストリングはID化して保存しておく。 ================================================================================ 【ステップ2】 Calcを、preg_replace_callbackで一つ一つ検査していく。 CalcはID化して、Minifyして保存しておく。 ----------------------------------------- private function minifyCalc($str){ # "(" と ")" の両脇にスペースがあったら除く return preg_replace('/\s*([\(\)])\s*/','$1',$str); } ----------------------------------------- ================================================================================ 【ステップ3】 WhiteSpaceを普通のスペースに統一する。 ----------------------------------------- $s=preg_replace('/\s/',' ',$s); ----------------------------------------- 連続した複数のスペースを一つのスペースに変換する。 ----------------------------------------- $s=preg_replace('/\s{2,}/',' ',$s); ----------------------------------------- 各種記号の両脇にあるスペースを除去する。 ----------------------------------------- private function minifyFrag($str){ return preg_replace('/\s*([\*,>+~:;\!\{\}\(\)\[\]])\s*/','$1',$str); } ----------------------------------------- 最初と最後のスペースを除去する。 ----------------------------------------- $code=trim($code); ----------------------------------------- ブロック{...}の終わりにある ; を除去する。 ----------------------------------------- $s=preg_replace('/;}/','}',$s); ----------------------------------------- "0."で始まる小数の"0"を除去する。 ----------------------------------------- $s=preg_replace('/(?<=[-+:{}() ])0(?=\.[0-9])/','',$s); ----------------------------------------- ================================================================================ 【ステップ4】 ID化されたストリングとCalcを元に戻す。 ================================================================================ ================================================================================ 【ステップ5】 以下のように、(の前、)の後にスペースがないと動作しない。 --------------------------------------------------- @media(min-width:500px)and(max-width:550px){ --------------------------------------------------- そこでスペースを挿入して以下のようにする。 --------------------------------------------------- @media (min-width:500px) and (max-width:550px){ --------------------------------------------------- 方法 @media から { までを、preg_replace_callbackで一つ一つ抽出していく。 抽出したTextは以下の作業を行って元の位置に返す。 Convert all "(" to " (" Convert all ")" to ") " ================================================================================