【ほぼ全員興味なし!】ツール作りのための超簡易設計:CSSソースコードを整形するアルゴリズム

CSSソースコードを整形するWEBツールを作りたいと思い、簡単な設計を書いてみました。実際に上から順番に処理をしていけば実装できます。javascriptで作りました。まだ、試験回数は圧倒的に少ないですが、割と整形できます。

実際に作ったHTMLソースコード整形WEBツール

以下、超簡易なアルゴリズム。

1.左右のスペースを削除(trim)

2.最初に出現する文字列から判断し分割する

※上が優先(「3-4」より「3-1」が優先される)。

下記「3-1」~「3-4」までに上から優先的に当てはまるものを探し、該当する文字列を抜き出して配列に格納する。文字列がなくなるまで「3-1」~「3-4」を繰り返す。

3-0.共通

文字列を抜き出すたびに左右のスペース・改行等を削除(trim)する。

3-1.「@・・・」(@mediaは除く)の場合(@タイプ)

最初に見つかる「@・・・;」を抜き出す。
@タイプの文字列として、抜き出した文字列とセットにして配列に格納する。

(格納例)
val: @charset “UTF-8”;
type:@

3-2.「/*・・・」の場合(コメントタイプ)

最初に見つかる「/*・・・*/」を抜き出す。
コメントタイプの文字列として、抜き出した文字列とセットにして配列に格納する。

(格納例)
val: /* header */
type:開始

3-3.「}」の場合(閉じタイプ)

最初に見つかる「}」を抜き出す
閉じタイプ(「}」1文字列)として、抜き出した文字列とセットにして配列に格納する。

(格納例)
val: }
type:閉じ

3-4.それ以外の場合(開始タイプまたはスタイルタイプ)

最初に見つかる「・・・{」と「・・・;」を抜き出す。
抜き出した文字列数でタイプを振り分ける。

  • 「・・・{」の方が少ない場合は、「3-4-1.「・・・{」の場合(開始タイプ)」のタイプ
  • 「・・・;」の方が少ない場合は、「3-4-2.「・・・;」の場合(スタイルタイプ)」のタイプ

3-4-1.「・・・{」の場合(開始タイプ)

最初に見つかる「・・・{」を抜き出す。
開始タイプの文字列として、抜き出した文字列とセットにして配列に格納する。

(格納例)
val: .class {
type:コメント

3-4-2.「・・・;」の場合(スタイルタイプ)

最初に見つかる「・・・;」を抜き出す。
スタイルタイプとして、抜き出した文字列とセットにして配列に格納する。

(格納例)
val: color: ‘red’;
type:スタイル

4.3で集めた配列を繋ぎ直す

3で集めた配列を必要に応じて改行やインデントを足しながら繋ぎ直す。1つ前の要素の情報等から改行やインデントを決める。「4-0」に関しては共通処理で、追加で各タイプの処理を行う。

下記インデントを追加と書いていますが、空のインデントを追加する場合もあります。シンプルにするためインデント追加と記している。

4-0.共通

  1. インデントの初期値は0個
  2. 1つ前の要素が開始タイプの場合、1つ分インデントを増やす。
  3. 自身が閉じタイプの場合、1つ分インデントを減らす。
  4. 1つ目の要素の場合は改行もインデントも追加しない

4-1.@タイプ

「@」の前に改行とインデントを追加。

4-2.開始タイプ

頭に改行とインデントを追加。

4-3.閉じタイプ

「}」の前に改行とインデントを追加。

4-4.コメントタイプ

「/*」の前に改行とインデントを追加。

    4-5.スタイルタイプ

    頭に改行とインデントを追加。
    ※スタイルの「:」の前はスペースなし、「:」の後ろはスペースありとする

    以上

    他の整形ツールはこちら

    ▼ ツール自身はこちらから