Class: Anpo::PO

Inherits:
Array
  • Object
show all
Defined in:
lib/anpo.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(io = nil) ⇒ PO

Returns a new instance of PO.



330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
# File 'lib/anpo.rb', line 330

def initialize(io = nil)
  super()
  @caches = []
  @header = nil
  @msg = {}

  if io
    _self = self
    proc_new_entry = proc do |buf|
      ent = POEntry.new(buf)
      set_on_changed(ent)

      if ent.is_header?
        if @header
          STDERR.print("duplicate header\n" + ent.to_s)
        else
          @header = ent
        end
      elsif ent.msgid.nil?
        @caches.push(ent)
      else
        push(ent)
      end
    end

    buffer = []
    while (l = io.gets)
      if l == "\n"
        proc_new_entry.call(buffer)
        buffer = []
      else
        buffer.push(l)
      end
    end

    proc_new_entry.call(buffer)
  else
    @header = POEntry.new
    set_on_changed(@header)
    @header.msgid = ""
    @header.msgstr = "\n"
  end
end

Class Method Details

.parse(input, mode = "r", _opt = {}, &block) ⇒ Object



283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
# File 'lib/anpo.rb', line 283

def self.parse(input, mode = "r", _opt = {}, &block)
  po = nil
  if input.is_a?(IO)
    po = PO.new(input)
  elsif FileTest.exists?(input.to_s)
    File.open(input.to_s, mode) do |f|
      po = PO.new(f)
    end
  end

  if block
    block.call(po)
    nil
  else
    po
  end
end

Instance Method Details

#<<(*args) ⇒ Object



122
123
124
125
# File 'lib/anpo.rb', line 122

def <<(*args)
  super
  @dirty = true
end

#append(*args) ⇒ Object



127
128
129
130
# File 'lib/anpo.rb', line 127

def append(*args)
  super
  @dirty = true
end

#clear(*args) ⇒ Object



132
133
134
135
# File 'lib/anpo.rb', line 132

def clear(*args)
  super
  @dirty = true
end

#collect!(*args) ⇒ Object



137
138
139
140
# File 'lib/anpo.rb', line 137

def collect!(*args)
  super
  @dirty = true
end

#compact!(*args) ⇒ Object



142
143
144
145
# File 'lib/anpo.rb', line 142

def compact!(*args)
  super
  @dirty = true
end

#concat(*args) ⇒ Object



147
148
149
150
# File 'lib/anpo.rb', line 147

def concat(*args)
  super
  @dirty = true
end

#delete(*args) ⇒ Object



152
153
154
155
# File 'lib/anpo.rb', line 152

def delete(*args)
  super
  @dirty = true
end

#delete_at(*args) ⇒ Object



157
158
159
160
# File 'lib/anpo.rb', line 157

def delete_at(*args)
  super
  @dirty = true
end

#delete_by_ids(deleteids) ⇒ Object



322
323
324
325
326
327
328
# File 'lib/anpo.rb', line 322

def delete_by_ids(deleteids)
  ids = collect { |e| e.msgid }

  raise unless (deleteids - ids).empty?

  delete_if { |e| deleteids.include?(e.msgid) }
end

#delete_if(*args) ⇒ Object



162
163
164
165
# File 'lib/anpo.rb', line 162

def delete_if(*args)
  super
  @dirty = true
end

#entry(id) ⇒ Object



301
302
303
# File 'lib/anpo.rb', line 301

def entry(id)
  find { |e| e.msgid == id }
end

#fill(*args) ⇒ Object



167
168
169
170
# File 'lib/anpo.rb', line 167

def fill(*args)
  super
  @dirty = true
end

#filter!(*args) ⇒ Object



172
173
174
175
# File 'lib/anpo.rb', line 172

def filter!(*args)
  super
  @dirty = true
end

#filter_by_ids(keepids, _force = false) ⇒ Object



314
315
316
317
318
319
320
# File 'lib/anpo.rb', line 314

def filter_by_ids(keepids, _force = false)
  ids = collect { |e| e.msgid }

  raise unless (keepids - ids).empty?

  keep_if { |e| keepids.include?(e.msgid) }
end

#flatten!(*args) ⇒ Object



177
178
179
180
# File 'lib/anpo.rb', line 177

def flatten!(*args)
  super
  @dirty = true
end

#insert(*args) ⇒ Object



182
183
184
185
# File 'lib/anpo.rb', line 182

def insert(*args)
  super
  @dirty = true
end

#keep_if(*args) ⇒ Object



187
188
189
190
# File 'lib/anpo.rb', line 187

def keep_if(*args)
  super
  @dirty = true
end

#map!(*args) ⇒ Object



192
193
194
195
# File 'lib/anpo.rb', line 192

def map!(*args)
  super
  @dirty = true
end

#msgObject



272
273
274
275
276
277
278
279
280
281
# File 'lib/anpo.rb', line 272

def msg
  if @dirty
    @msg.clear
    each do |e|
      @msg[e.msgid] = e.msgstr
    end
    @dirty = false
  end
  @msg
end

#new_entry(msgid, msgstr, comments = nil) ⇒ Object



305
306
307
308
309
310
311
312
# File 'lib/anpo.rb', line 305

def new_entry(msgid, msgstr, comments = nil)
  poe = POEntry.new
  set_on_changed(poe)
  poe.msgid = msgid
  poe.msgstr = msgstr
  poe.comments = comments || []
  push(poe)
end

#pop(*args) ⇒ Object



197
198
199
200
# File 'lib/anpo.rb', line 197

def pop(*args)
  super
  @dirty = true
end

#prepend(*args) ⇒ Object



202
203
204
205
# File 'lib/anpo.rb', line 202

def prepend(*args)
  super
  @dirty = true
end

#push(*args) ⇒ Object



207
208
209
210
# File 'lib/anpo.rb', line 207

def push(*args)
  super
  @dirty = true
end

#reject!(*args) ⇒ Object



212
213
214
215
# File 'lib/anpo.rb', line 212

def reject!(*args)
  super
  @dirty = true
end

#replace(*args) ⇒ Object



217
218
219
220
# File 'lib/anpo.rb', line 217

def replace(*args)
  super
  @dirty = true
end

#reverse!(*args) ⇒ Object



222
223
224
225
# File 'lib/anpo.rb', line 222

def reverse!(*args)
  super
  @dirty = true
end

#rotate!(*args) ⇒ Object



227
228
229
230
# File 'lib/anpo.rb', line 227

def rotate!(*args)
  super
  @dirty = true
end

#select!(*args) ⇒ Object



232
233
234
235
# File 'lib/anpo.rb', line 232

def select!(*args)
  super
  @dirty = true
end

#shift(*args) ⇒ Object



237
238
239
240
# File 'lib/anpo.rb', line 237

def shift(*args)
  super
  @dirty = true
end

#shuffle!(*args) ⇒ Object



242
243
244
245
# File 'lib/anpo.rb', line 242

def shuffle!(*args)
  super
  @dirty = true
end

#slice!(*args) ⇒ Object



247
248
249
250
# File 'lib/anpo.rb', line 247

def slice!(*args)
  super
  @dirty = true
end

#sort!(*args) ⇒ Object



252
253
254
255
# File 'lib/anpo.rb', line 252

def sort!(*args)
  super
  @dirty = true
end

#sort_by!(*args) ⇒ Object



257
258
259
260
# File 'lib/anpo.rb', line 257

def sort_by!(*args)
  super
  @dirty = true
end

#to_csv(opts = {}) ⇒ Object



378
379
380
381
382
383
384
385
386
# File 'lib/anpo.rb', line 378

def to_csv(opts = {})
  # CSV.new(StringIO.new, opts)
  csvstr = CSV.generate(opts) do |csv|
    ([@header] + self + @caches).each do |e|
      csv << [e.comments_to_s.chop, e.msgid, e.msgstr]
    end
  end
  CSV.new(StringIO.new(csvstr))
end

#to_s(with_cache = true) ⇒ Object



374
375
376
# File 'lib/anpo.rb', line 374

def to_s(with_cache = true)
  ([@header] + self + (with_cache ? @caches : [])).collect { |e| e.to_s }.join("\n").to_s
end

#uniq!(*args) ⇒ Object



262
263
264
265
# File 'lib/anpo.rb', line 262

def uniq!(*args)
  super
  @dirty = true
end

#unshift(*args) ⇒ Object



267
268
269
270
# File 'lib/anpo.rb', line 267

def unshift(*args)
  super
  @dirty = true
end