Class: GetText::POEntry::Formatter

Inherits:
Object
  • Object
show all
Includes:
GetText::POFormat
Defined in:
lib/gettext/po_entry.rb

Constant Summary collapse

DEFAULT_MAX_LINE_WIDTH =
78

Constants included from GetText::POFormat

GetText::POFormat::EXTRACTED_COMMENT_MARK, GetText::POFormat::FLAG_MARK, GetText::POFormat::PREVIOUS_COMMENT_MARK, GetText::POFormat::REFERENCE_COMMENT_MARK, GetText::POFormat::TRANSLATOR_COMMENT_MARK

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(entry, options = {}) ⇒ Formatter

Returns a new instance of Formatter.

Parameters:

  • entry (POEntry)

    The entry to be formatted.

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :include_reference_comment (Bool) — default: true

    Includes reference comments in formatted string if true.

  • :max_line_width (Integer) — default: 78

    Wraps long lines that is longer than the :max_line_width. Don't break long lines if :max_line_width is less than 0 such as -1.

  • :encoding (Encoding) — default: nil

    Encodes to the specific encoding.



229
230
231
232
# File 'lib/gettext/po_entry.rb', line 229

def initialize(entry, options={})
  @entry = entry
  @options = fill_default_option_values(options)
end

Class Method Details

.escape(string) ⇒ Object



198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
# File 'lib/gettext/po_entry.rb', line 198

def escape(string)
  return "" if string.nil?

  string.gsub(/([\\"\t\n])/) do
    special_character = $1
    case special_character
    when "\t"
      "\\t"
    when "\n"
      "\\n"
    else
      "\\#{special_character}"
    end
  end
end

Instance Method Details

#formatObject



234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
# File 'lib/gettext/po_entry.rb', line 234

def format
  if @entry.obsolete?
    return format_obsolete_comment(@entry.comment)
  end

  str = ""
  str << format_translator_comment
  str << format_extracted_comment
  if @options[:include_reference_comment]
    str << format_reference_comment
  end
  str << format_flag_comment
  str << format_previous_comment

  # msgctxt, msgid, msgstr
  if @entry.msgctxt?
    if @entry.msgctxt.nil?
      no_msgctxt_message = "This POEntry is a kind of msgctxt " +
                             "but the msgctxt property is nil. " +
                             "msgid: #{@entry.msgid}"
      raise(NoMsgctxtError, no_msgctxt_message)
    end
    str << "msgctxt " << format_message(@entry.msgctxt)
  end

  str << "msgid " << format_message(@entry.msgid)
  if @entry.plural?
    if @entry.msgid_plural.nil?
      no_plural_message = "This POEntry is a kind of plural " +
                            "but the msgid_plural property is nil. " +
                            "msgid: #{@entry.msgid}"
      raise(NoMsgidPluralError, no_plural_message)
    end

    str << "msgid_plural " << format_message(@entry.msgid_plural)

    if @entry.msgstr.nil?
      str << "msgstr[0] \"\"\n"
      str << "msgstr[1] \"\"\n"
    else
      msgstrs = @entry.msgstr.split("\000", -1)
      msgstrs.each_with_index do |msgstr, index|
        str << "msgstr[#{index}] " << format_message(msgstr)
      end
    end
  else
    str << "msgstr "
    str << format_message(@entry.msgstr)
  end

  encode(str)
end