C/C++から文字列リテラルを記載のまま取り出すRubyコード

C/C++のソースコードから、文字列リテラルをそのまま取り出すRubyプログラム(1.9.x以降)を作ったので公開します。

文字列リテラルの抽出はgettextのxgettextコマンドでもできるけど、
xgettextの場合はタブを”\t”に変えたり、継続行の”\改行”を各行ごとに”行の内容”に変えたりするので、
ソースコードに書かれたまま取り出したいというちょっと目的に合わなかった。
ソースコードに書かれたままっていのうは、後で置換しやすくするため。
それは、また別の機会に書きます。

以下が抽出コード。もっときれいにかけるような気がするけど、まぁ30分くらいで書いたから、こんなもんでしょ。

#!ruby
# -*- coding : utf-8 -*-
#
# Extract all string literal from C/C++
# Author: Hiroki Najima (Nazy) 2012. h.najima at gmail dot com
# License: CC BY
#

strings = []

File.open(ARGV[0], "r") do |f|
  f.chars do |ch|
    case ch
    when '/'
      case f.getc
      when '*'
        until f.getc == '*' && f.getc == '/'
        end
      when '/'
        until f.getc == "\n"
        end
      end
    when '"'
      acc = ch
      f.chars do |ch|
        case ch
        when '\\'
          acc << ch << f.getc
        when '"'
          acc << ch
          break
        else
          acc << ch
        end
      end
      strings << acc
    when "'"
      f.chars do |ch|
        case ch
        when '\\'
          f.getc
        when "'"
          break
        end
      end
    else
      #print ch
    end
  end
end

Nazy の紹介

A software engineer.
カテゴリー: Programming, Ruby タグ: パーマリンク