0

コードから無関係な開始タブを削除して、よりきれいに表示する関数を作成しようとしています。のように、私は私の関数がこれを回したいと思います:

    <div>
      <div>
       <p>Blah</p>
      </div>
    </div>

これに:

<div>
  <div>
   <p>Blah</p>
  </div>
</div>

(このすべての目標は、左側に揃えられたpreタグに表示されるフォーマットされたコードを貼り付けることができるRailsパーシャルを作成することです)。

これまでのところ、私はこれを持っていますが、それはエラーであり、理由はわかりません。これまでgsubを使用したことがないので、問題があると思います(ただし、デバッグノートは最初の「終了」行も指します)。

def tab_stripped(code)
  # find number of tabs in first line
  char_array = code.split(//)
  counter = 0
  char_array.each do |c|
    counter ++ if c == "\t"
    break if c != "\t"
  end

  # delete that number of tabs from the beginning of each line
  start_tabs = ""
  counter.times do 
    start_tabs += "\t"
      end
  code.gsub!(start_tabs, '')
  code
end

何か案は?

4

1 に答える 1

4

私の個人的なライブラリからの1つ(マイナーな変更を加えたもの):

class String
  def unindent; gsub(/^#{scan(/^\s+/).min}/, "") end
end

それはあなたが求めているものよりも一般的です。タブだけでなくスペースも処理し、最初の行ではなく、インデントが最も少ない行に調整されます。

puts <<X.unindent
    <div>
      <div>
       <p>Blah</p>
      </div>
    </div>
X

与える:

<div>
  <div>
   <p>Blah</p>
  </div>
</div>
于 2013-02-06T01:38:41.910 に答える