Module: XX::Markup::InstanceMethods

Included in:
XX::Markup
Defined in:
lib/rcov/xx.rb

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(m, *a, &b) ⇒ Object



236
237
238
239
240
241
242
243
244
245
246
# File 'lib/rcov/xx.rb', line 236

def method_missing m, *a, &b
#--{{{
  m = m.to_s

  tag_name = m.sub! %r/_+$/, ''

  super unless tag_name

  __ tag_name, *a, &b
#--}}}
end

Instance Method Details

#_(tag_name, *a, &b) ⇒ Object Also known as: xx_tag, __, g__

–{{{



220
221
222
223
224
225
226
227
228
229
230
231
232
# File 'lib/rcov/xx.rb', line 220

def _ tag_name, *a, &b
#--{{{
  hashes, nothashes = a.partition{|x| Hash === x}

  doc = xx_doc
  element = ::REXML::Element::new "#{ tag_name }"

  hashes.each{|h| h.each{|k,v| element.add_attribute k.to_s, v}}
  nothashes.each{|nh| element << ::REXML::Text::new(nh.to_s)}

  doc.create element, &b
#--}}}
end

#xx_ancestorsObject

–}}}

Raises:



421
422
423
424
425
426
# File 'lib/rcov/xx.rb', line 421

def xx_ancestors
#--{{{
  raise Error, "no xx_which in effect" unless xx_which
  xx_class.xx_ancestors xx_which
#--}}}
end

#xx_any_(*objects, &b) ⇒ Object Also known as: x__, any__, h__



340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
# File 'lib/rcov/xx.rb', line 340

def xx_any_ *objects, &b
#--{{{
  doc = xx_doc
  nothing = %r/.^/m

  text =
    ::REXML::Text::new("",
      respect_whitespace=true, parent=nil, raw=true, entity_filter=nil, illegal=nothing
    )

  objects.each do |object|
    text << object.to_s if object
  end

  doc.create text, &b
#--}}}
end

#xx_cdata_(*objects, &b) ⇒ Object Also known as: cdata__, c__



360
361
362
363
364
365
366
367
368
369
370
371
372
# File 'lib/rcov/xx.rb', line 360

def xx_cdata_ *objects, &b
#--{{{
  doc = xx_doc

  cdata = ::REXML::CData::new ""

  objects.each do |object|
    cdata << object.to_s if object
  end

  doc.create cdata, &b
#--}}}
end

#xx_classObject



396
397
398
399
400
# File 'lib/rcov/xx.rb', line 396

def xx_class
#--{{{
  @xx_class ||= self.class
#--}}}
end

#xx_configObject

–}}}



427
428
429
430
431
# File 'lib/rcov/xx.rb', line 427

def xx_config
#--{{{
  xx_class.xx_config
#--}}}
end

#xx_config_for(*a, &b) ⇒ Object

–}}}



432
433
434
435
436
# File 'lib/rcov/xx.rb', line 432

def xx_config_for *a, &b
#--{{{
  xx_class.xx_config_for *a, &b
#--}}}
end

#xx_configure(*a, &b) ⇒ Object

–}}}



437
438
439
440
441
# File 'lib/rcov/xx.rb', line 437

def xx_configure *a, &b
#--{{{
  xx_class.xx_configure *a, &b
#--}}}
end

#xx_define_tag_method(*a, &b) ⇒ Object

–}}}



411
412
413
414
415
# File 'lib/rcov/xx.rb', line 411

def xx_define_tag_method *a, &b
#--{{{
  xx_class.xx_define_tag_method *a, &b
#--}}}
end

#xx_define_tmp_method(*a, &b) ⇒ Object

–}}}



406
407
408
409
410
# File 'lib/rcov/xx.rb', line 406

def xx_define_tmp_method *a, &b
#--{{{
  xx_class.xx_define_tmp_method *a, &b
#--}}}
end

#xx_docObject

–}}}



298
299
300
301
302
# File 'lib/rcov/xx.rb', line 298

def xx_doc
#--{{{
  @xx_docs.last rescue raise "no xx_doc in effect!"
#--}}}
end

#xx_markup_(*objects, &b) ⇒ Object Also known as: markup__



321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
# File 'lib/rcov/xx.rb', line 321

def xx_markup_ *objects, &b
#--{{{
  doc = xx_doc

  doc2 = ::REXML::Document::new ""

  objects.each do |object|
    (doc2.root ? doc2.root : doc2) << ::REXML::Document::new(object.to_s)
  end


  ret = doc.create doc2, &b
  puts doc2.to_s
  STDIN.gets
  ret
#--}}}
end

#xx_parse_attributes(string) ⇒ Object Also known as: a__



375
376
377
378
379
380
381
382
# File 'lib/rcov/xx.rb', line 375

def xx_parse_attributes string
#--{{{
  string = string.to_s
  tokens = string.split %r/,/o
  tokens.map{|t| t.sub!(%r/[^=]+=/){|key_eq| key_eq.chop << " : "}}
  xx_parse_yaml_attributes(tokens.join(','))
#--}}}
end

#xx_parse_yaml_attributes(string) ⇒ Object Also known as: y__

Raises:

  • (ArgumentError)


384
385
386
387
388
389
390
391
392
393
394
# File 'lib/rcov/xx.rb', line 384

def xx_parse_yaml_attributes string
#--{{{
  require "yaml"
  string = string.to_s
  string = "{" << string unless string =~ %r/^\s*[{]/o
  string = string << "}" unless string =~ %r/[}]\s*$/o
  obj = ::YAML::load string
  raise ArgumentError, "<#{ obj.class }> not Hash!" unless Hash === obj
  obj
#--}}}
end

#xx_remove_tag_method(*a, &b) ⇒ Object

–}}}



416
417
418
419
420
# File 'lib/rcov/xx.rb', line 416

def xx_remove_tag_method *a, &b
#--{{{
  xx_class.xx_tag_remove_method *a, &b
#--}}}
end

#xx_tag_method_name(*a, &b) ⇒ Object

–}}}



401
402
403
404
405
# File 'lib/rcov/xx.rb', line 401

def xx_tag_method_name *a, &b
#--{{{
  xx_class.xx_tag_method_name *a, &b
#--}}}
end

#xx_text_(*objects, &b) ⇒ Object Also known as: t__, text__

–}}}



303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
# File 'lib/rcov/xx.rb', line 303

def xx_text_ *objects, &b
#--{{{
  doc = xx_doc

  text =
    ::REXML::Text::new("",
      respect_whitespace=true, parent=nil
    )

  objects.each do |object|
    text << object.to_s if object
  end

  doc.create text, &b
#--}}}
end

#xx_which(*argv) ⇒ Object

–}}}



247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
# File 'lib/rcov/xx.rb', line 247

def xx_which *argv
#--{{{
  @xx_which = nil unless defined? @xx_which
  if argv.empty?
    @xx_which
  else
    xx_which = @xx_which
    begin
      @xx_which = argv.shift
      return yield
    ensure
      @xx_which = xx_which
    end
  end
#--}}}
end

#xx_with_doc_in_effect(*a, &b) ⇒ Object

–}}}



263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
# File 'lib/rcov/xx.rb', line 263

def xx_with_doc_in_effect *a, &b
#--{{{
  @xx_docs ||= []
  doc = ::XX::Document::new *a
  ddoc = doc.doc
  begin
    @xx_docs.push doc

    doctype = xx_config_for "doctype", xx_which
    if doctype
      unless ddoc.doctype
        doctype = ::REXML::DocType::new doctype unless
          ::REXML::DocType === doctype
        ddoc << doctype
      end
    end

    xmldecl = xx_config_for "xmldecl", xx_which
    if xmldecl
      if ddoc.xml_decl == ::REXML::XMLDecl::default
        xmldecl = ::REXML::XMLDecl::new xmldecl unless
          ::REXML::XMLDecl === xmldecl
        ddoc << xmldecl
        doc.xmldecl = ::REXML::XMLDecl
      end
    end

    b.call doc if b

    return doc
  ensure
    @xx_docs.pop
  end
#--}}}
end