4

Ruby の文字列で ANSI エスケープ コード (エスケープ シーケンス) を選択するための正規表現を知っていますか? 私はこれについて話している:

http://ascii-table.com/ansi-escape-sequences.php

そして、よくテストされ、信頼できるものを探しています。

4

1 に答える 1

6

他のコードに基づいたコードがあります。かなり前のことで、ソースは忘れましたが、これかもしれませ。以下は、色付きの ANSI テキストをタグ付き HTML 形式に変換するために使用するコードです。

require "strscan"
class String
    def ansi2html
        ansi = StringScanner.new(self)
        html = StringIO.new
        until ansi.eos?
            if ansi.scan(/\e\[0?m/)
                html.print(%{</span>})
            elsif ansi.scan(/\e\[0?(\d+)m/)
                html.print(%{<span class="#{AnsiColor[ansi[1]]}">})
            else
                html.print(ansi.scan(/./m))
            end
        end
        html.string
    end
end

これは、マッピング ルールを定義するハッシュと一緒に使用されます。

class String
    AnsiColor = {
        "1" => "bold",
        "4" => "underline",
        "30" => "black",
        "31" => "red",
        "32" => "green",
        "33" => "yellow",
        "34" => "blue",
        "35" => "magenta",
        "36" => "cyan",
        "37" => "white",
        "40" => "bg-black",
        "41" => "bg-red",
        "42" => "bg-green",
        "43" => "bg-yellow",
        "44" => "bg-blue",
        "45" => "bg-magenta",
        "46" => "bg-cyan",
        "47" => "bg-white",
    }
end

私はこのように使用します:

"red \x1b[31mapple\x1b[0m".ansi2html
# => "red <span class=\"red\">apple</span>"

必要に応じて変更してください。

于 2013-11-10T13:25:30.583 に答える