File: active_support/vendor/i18n-0.4.1/i18n/gettext/po_parser.rb

Overview
Module Structure
Class Hierarchy
Code

Overview

Module Structure

  module: <Toplevel Module>
  module: GetText#15
  class: PoParser#17
inherits from
  Parser ( Racc )
has properties
method: _ / 1 #19
constant: Racc_arg #184
constant: Racc_token_to_s_table #200
constant: Racc_debug_parser #221
method: _reduce_none / 3 #323

Class Hierarchy

Object ( Builtin-Module )
Parser ( Racc )
  PoParser ( GetText ) #17

Code

   1  =begin
   2    poparser.rb - Generate a .mo
   3 
   4    Copyright (C) 2003-2009 Masao Mutoh <mutoh at highway.ne.jp>
   5 
   6    You may redistribute it and/or modify it under the same
   7    license terms as Ruby.
   8  =end
   9 
  10  #MODIFIED
  11  # removed include GetText etc
  12  # added stub translation method _(x)
  13  require 'racc/parser'
  14 
  15  module GetText
  16 
  17    class PoParser < Racc::Parser
  18 
  19      def _(x)
  20        x
  21      end
  22 
  23  module_eval <<'..end src/poparser.ry modeval..id7a99570e05', 'src/poparser.ry', 108
  24    def unescape(orig)
  25      ret = orig.gsub(/\\n/, "\n")
  26      ret.gsub!(/\\t/, "\t")
  27      ret.gsub!(/\\r/, "\r")
  28      ret.gsub!(/\\"/, "\"")
  29      ret
  30    end
  31    
  32    def parse(str, data, ignore_fuzzy = true)
  33      @comments = []
  34      @data = data
  35      @fuzzy = false
  36      @msgctxt = ""
  37      $ignore_fuzzy = ignore_fuzzy
  38 
  39      str.strip!
  40      @q = []
  41      until str.empty? do
  42        case str
  43        when /\A\s+/
  44          str = $'
  45        when /\Amsgctxt/
  46          @q.push [:MSGCTXT, $&]
  47          str = $'
  48        when /\Amsgid_plural/
  49          @q.push [:MSGID_PLURAL, $&]
  50          str = $'
  51        when /\Amsgid/
  52          @q.push [:MSGID, $&]
  53          str = $'
  54        when /\Amsgstr/
  55          @q.push [:MSGSTR, $&]
  56          str = $'
  57        when /\A\[(\d+)\]/
  58          @q.push [:PLURAL_NUM, $1]
  59          str = $'
  60        when /\A\#~(.*)/
  61          $stderr.print _("Warning: obsolete msgid exists.\n")
  62          $stderr.print "         #{$&}\n"
  63          @q.push [:COMMENT, $&]
  64          str = $'
  65        when /\A\#(.*)/
  66          @q.push [:COMMENT, $&]
  67          str = $'      
  68        when /\A\"(.*)\"/
  69          @q.push [:STRING, $1]
  70          str = $'
  71        else
  72          #c = str[0,1]
  73          #@q.push [:STRING, c]
  74          str = str[1..-1]
  75        end
  76      end 
  77      @q.push [false, '$end']
  78      if $DEBUG
  79        @q.each do |a,b|
  80        puts "[#{a}, #{b}]"
  81        end
  82      end
  83      @yydebug = true if $DEBUG
  84      do_parse
  85 
  86      if @comments.size > 0
  87        @data.set_comment(:last, @comments.join("\n"))
  88      end
  89      @data
  90    end
  91    
  92    def next_token
  93      @q.shift
  94    end
  95 
  96    def on_message(msgid, msgstr)
  97      if msgstr.size > 0
  98        @data[msgid] = msgstr
  99        @data.set_comment(msgid, @comments.join("\n"))
 100      end
 101      @comments.clear
 102      @msgctxt = ""
 103    end
 104        
 105    def on_comment(comment)
 106      @fuzzy = true if (/fuzzy/ =~ comment)
 107      @comments << comment
 108    end 
 109 
 110 
 111  ..end src/poparser.ry modeval..id7a99570e05
 112 
 113  ##### racc 1.4.5 generates ###
 114 
 115  racc_reduce_table = [
 116   0, 0, :racc_error,
 117   0, 10, :_reduce_none,
 118   2, 10, :_reduce_none,
 119   2, 10, :_reduce_none,
 120   2, 10, :_reduce_none,
 121   2, 12, :_reduce_5,
 122   1, 13, :_reduce_none,
 123   1, 13, :_reduce_none,
 124   4, 15, :_reduce_8,
 125   5, 16, :_reduce_9,
 126   2, 17, :_reduce_10,
 127   1, 17, :_reduce_none,
 128   3, 18, :_reduce_12,
 129   1, 11, :_reduce_13,
 130   2, 14, :_reduce_14,
 131   1, 14, :_reduce_15 ]
 132 
 133  racc_reduce_n = 16
 134 
 135  racc_shift_n = 26
 136 
 137  racc_action_table = [
 138       3,    13,     5,     7,     9,    15,    16,    17,    20,    17,
 139      13,    17,    13,    13,    11,    17,    23,    20,    13,    17 ]
 140 
 141  racc_action_check = [
 142       1,    16,     1,     1,     1,    12,    12,    12,    18,    18,
 143       7,    14,    15,     9,     3,    19,    20,    21,    23,    25 ]
 144 
 145  racc_action_pointer = [
 146     nil,     0,   nil,    14,   nil,   nil,   nil,     3,   nil,     6,
 147     nil,   nil,     0,   nil,     4,     5,    -6,   nil,     2,     8,
 148       8,    11,   nil,    11,   nil,    12 ]
 149 
 150  racc_action_default = [
 151      -1,   -16,    -2,   -16,    -3,   -13,    -4,   -16,    -6,   -16,
 152      -7,    26,   -16,   -15,    -5,   -16,   -16,   -14,   -16,    -8,
 153     -16,    -9,   -11,   -16,   -10,   -12 ]
 154 
 155  racc_goto_table = [
 156      12,    22,    14,     4,    24,     6,     2,     8,    18,    19,
 157      10,    21,     1,   nil,   nil,   nil,    25 ]
 158 
 159  racc_goto_check = [
 160       5,     9,     5,     3,     9,     4,     2,     6,     5,     5,
 161       7,     8,     1,   nil,   nil,   nil,     5 ]
 162 
 163  racc_goto_pointer = [
 164     nil,    12,     5,     2,     4,    -7,     6,     9,    -7,   -17 ]
 165 
 166  racc_goto_default = [
 167     nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil ]
 168 
 169  racc_token_table = {
 170   false => 0,
 171   Object.new => 1,
 172   :COMMENT => 2,
 173   :MSGID => 3,
 174   :MSGCTXT => 4,
 175   :MSGID_PLURAL => 5,
 176   :MSGSTR => 6,
 177   :STRING => 7,
 178   :PLURAL_NUM => 8 }
 179 
 180  racc_use_result_var = true
 181 
 182  racc_nt_base = 9
 183 
 184  Racc_arg = [
 185   racc_action_table,
 186   racc_action_check,
 187   racc_action_default,
 188   racc_action_pointer,
 189   racc_goto_table,
 190   racc_goto_check,
 191   racc_goto_default,
 192   racc_goto_pointer,
 193   racc_nt_base,
 194   racc_reduce_table,
 195   racc_token_table,
 196   racc_shift_n,
 197   racc_reduce_n,
 198   racc_use_result_var ]
 199 
 200  Racc_token_to_s_table = [
 201  '$end',
 202  'error',
 203  'COMMENT',
 204  'MSGID',
 205  'MSGCTXT',
 206  'MSGID_PLURAL',
 207  'MSGSTR',
 208  'STRING',
 209  'PLURAL_NUM',
 210  '$start',
 211  'msgfmt',
 212  'comment',
 213  'msgctxt',
 214  'message',
 215  'string_list',
 216  'single_message',
 217  'plural_message',
 218  'msgstr_plural',
 219  'msgstr_plural_line']
 220 
 221  Racc_debug_parser = true
 222 
 223  ##### racc system variables end #####
 224 
 225   # reduce 0 omitted
 226 
 227   # reduce 1 omitted
 228 
 229   # reduce 2 omitted
 230 
 231   # reduce 3 omitted
 232 
 233   # reduce 4 omitted
 234 
 235  module_eval <<'.,.,', 'src/poparser.ry', 25
 236    def _reduce_5( val, _values, result )
 237      @msgctxt = unescape(val[1]) + "\004"
 238     result
 239    end
 240  .,.,
 241 
 242   # reduce 6 omitted
 243 
 244   # reduce 7 omitted
 245 
 246  module_eval <<'.,.,', 'src/poparser.ry', 48
 247    def _reduce_8( val, _values, result )
 248      if @fuzzy and $ignore_fuzzy 
 249        if val[1] != ""
 250          $stderr.print _("Warning: fuzzy message was ignored.\n")
 251          $stderr.print "         msgid '#{val[1]}'\n"
 252        else
 253          on_message('', unescape(val[3]))
 254        end
 255        @fuzzy = false
 256      else
 257        on_message(@msgctxt + unescape(val[1]), unescape(val[3]))
 258      end
 259      result = ""
 260     result
 261    end
 262  .,.,
 263 
 264  module_eval <<'.,.,', 'src/poparser.ry', 65
 265    def _reduce_9( val, _values, result )
 266      if @fuzzy and $ignore_fuzzy
 267        if val[1] != ""
 268          $stderr.print _("Warning: fuzzy message was ignored.\n")
 269          $stderr.print "msgid = '#{val[1]}\n"
 270        else
 271          on_message('', unescape(val[3]))
 272        end
 273        @fuzzy = false
 274      else
 275        on_message(@msgctxt + unescape(val[1]) + "\000" + unescape(val[3]), unescape(val[4]))
 276      end
 277      result = ""
 278     result
 279    end
 280  .,.,
 281 
 282  module_eval <<'.,.,', 'src/poparser.ry', 76
 283    def _reduce_10( val, _values, result )
 284      if val[0].size > 0
 285        result = val[0] + "\000" + val[1]
 286      else
 287        result = ""
 288      end
 289     result
 290    end
 291  .,.,
 292 
 293   # reduce 11 omitted
 294 
 295  module_eval <<'.,.,', 'src/poparser.ry', 84
 296    def _reduce_12( val, _values, result )
 297      result = val[2]
 298     result
 299    end
 300  .,.,
 301 
 302  module_eval <<'.,.,', 'src/poparser.ry', 91
 303    def _reduce_13( val, _values, result )
 304      on_comment(val[0])
 305     result
 306    end
 307  .,.,
 308 
 309  module_eval <<'.,.,', 'src/poparser.ry', 99
 310    def _reduce_14( val, _values, result )
 311      result = val.delete_if{|item| item == ""}.join
 312     result
 313    end
 314  .,.,
 315 
 316  module_eval <<'.,.,', 'src/poparser.ry', 103
 317    def _reduce_15( val, _values, result )
 318      result = val[0]
 319     result
 320    end
 321  .,.,
 322 
 323   def _reduce_none( val, _values, result )
 324    result
 325   end
 326 
 327    end   # class PoParser
 328 
 329  end   # module GetText