Class: Meteor::ParserFactory

Inherits:
Object
  • Object
show all
Defined in:
lib/meteor/parser_factory.rb

Overview

Parser Factory Class (パーサ・ファクトリ クラス)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeParserFactory #initialize(root) ⇒ ParserFactory #initialize(root, enc) ⇒ ParserFactory #initialize(type, root, enc) ⇒ ParserFactory

initializer (イニシャライザ)

Overloads:

  • #initialize(root) ⇒ ParserFactory

    Parameters:

    • root (String)

      root directory (基準ディレクトリ)

  • #initialize(root, enc) ⇒ ParserFactory

    Parameters:

    • root (String)

      root directory (基準ディレクトリ)

    • enc (String)

      default character encoding (デフォルトエンコーディング)

  • #initialize(type, root, enc) ⇒ ParserFactory

    Parameters:

    • type (FixNum, Symbol)

      default type of parser (デフォルトのパーサ・タイプ)

    • root (String)

      root directory (基準ディレクトリ)

    • enc (String)

      default character encoding (デフォルト文字エンコーディング)



43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/meteor/parser_factory.rb', line 43

def initialize(*args)
  case args.length
    when 0
      initialize_0
    when 1
      initialize_1(args[0])
    when 2
      initialize_2(args[0], args[1])
    when 3
      initialize_3(args[0],args[1],args[2])
    else
      raise ArgumentError
  end
end

Instance Attribute Details

#encString Also known as: base_enc, base_encoding

Returns default character encoding (デフォルトエンコーディング).

Returns:

  • (String)

    default character encoding (デフォルトエンコーディング)



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
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
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
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
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
# File 'lib/meteor/parser_factory.rb', line 15

class ParserFactory
  attr_accessor :type
  attr_accessor :root
  attr_accessor :enc

  alias_method :base_type, :type
  alias_method :base_type=, :type=
  alias_method :base_dir, :root
  alias_method :base_dir=, :root=
  alias_method :base_enc, :enc
  alias_method :base_enc=, :enc=

  alias_method :base_encoding, :enc
  alias_method :base_encoding=, :enc=

  #
  # initializer (イニシャライザ)
  # @overload initialize()
  # @overload initialize(root)
  #  @param [String] root root directory (基準ディレクトリ)
  # @overload initialize(root, enc)
  #  @param [String] root root directory (基準ディレクトリ)
  #  @param [String] enc default character encoding (デフォルトエンコーディング)
  # @overload initialize(type, root, enc)
  #  @param [FixNum,Symbol] type default type of parser (デフォルトのパーサ・タイプ)
  #  @param [String] root root directory (基準ディレクトリ)
  #  @param [String] enc default character encoding (デフォルト文字エンコーディング)
  #
  def initialize(*args)
    case args.length
      when 0
        initialize_0
      when 1
        initialize_1(args[0])
      when 2
        initialize_2(args[0], args[1])
      when 3
        initialize_3(args[0],args[1],args[2])
      else
        raise ArgumentError
    end
  end

  #
  # initializer (イニシャライザ)
  #
  def initialize_0
    @cache = Hash.new
    @root = "."
    @enc = "UTF-8"
  end

  private :initialize_0

  #
  # イニシャライザ
  # @param [String] root root directory (基準ディレクトリ)
  #
  def initialize_1(root)
    @cache = Hash.new
    @root = root
    @enc = "UTF-8"
  end

  private :initialize_1

  #
  # イニシャライザ
  # @param [String] root root directory (基準ディレクトリ)
  # @param [String] enc default character encoding (デフォルト文字エンコーディング)
  #
  def initialize_2(root, enc)
    @cache = Hash.new
    @root = root
    @enc = enc
  end

  private :initialize_2

  #
  # イニシャライザ
  # @param [FixNum,Symbol] type default type of parser (デフォルトのパーサ・タイプ)
  # @param [String] root root directory (基準ディレクトリ)
  # @param [String] enc default character encoding (デフォルト文字エンコーディング)
  #
  def initialize_3(type , root, enc)
    @cache = Hash.new
    @type = type
    @root = root
    @enc = enc
  end

  private :initialize_3

  #
  # set options (オプションをセットする)
  # @param [Hash] opts option (オプション)
  # @option opts [String] :root root directory (基準ディレクトリ)
  # @option @deprecated opts [String] :base_dir root directory (基準ディレクトリ)
  # @option opts [String] :enc default character encoding (デフォルト文字エンコーディング)
  # @option @deprecated opts [String] :base_enc default character encoding (デフォルト文字エンコーディング)
  # @option opts [FixNum,Symbol] :type default type of parser (デフォルトのパーサ・タイプ)
  # @option @deprecated opts [FixNum | Symbol] :base_type default type of parser (デフォルトのパーサ・タイプ)
  #
  def options=(opts)
    if opts.kind_of?(Hash)
      if opts.include?(:root)
        @root = opts[:root]
      elsif opts.include?(:base_dir)
        @root = opts[:base_dir]
      end
      if opts.include?(:enc)
        @enc = opts[:enc]
      elsif opts.include?(:base_enc)
        @enc = opts[:base_enc]
      end
      if opts.include?(:type)
        @type = opts[:type]
      elsif opts.include?(:base_type)
        @type = opts[:base_type]
      end
    else
      raise ArgumentError
    end
  end

  #
  #@overload link(relative_path,enc)
  # generate parser (パーサを作成する)
  # @param [String] relative_path relative file path (相対ファイルパス)
  # @param [String] enc character encoding (文字エンコーディング)
  # @return [Meteor::Parser] parser (パーサ)
  #@overload link(relative_path)
  # generate parser (パーサを作成する)
  # @param [String] relative_path relative file path (相対ファイルパス)
  # @return [Meteor::Parser] parser (パーサ)
  #@overload link(type,relative_path,enc)
  # generate parser (パーサを作成する)
  # @param [Fixnum,Symbol] type type of parser (パーサ・タイプ)
  # @param [String] relative_path relative file path (相対ファイルパス)
  # @param [String] enc character encoding (文字エンコーディング)
  # @return [Meteor::Parser] parser (パーサ)
  #@overload link(type,relative_path)
  # generate parser (パーサを作成する)
  # @param [Fixnum,Symbol] type type of parser (パーサ・タイプ)
  # @param [String] relative_path relative file path (相対ファイルパス)
  # @return [Meteor::Parser] parser (パーサ)
  #
  def link(*args)
    case args.length
      when 1
        link_1(args[0])
      when 2
        if args[0].kind_of?(Fixnum) || args[0].kind_of?(Symbol)
          link_2_n(args[0], args[1])
        elsif args[0].kind_of?(String)
          link_2_s(args[0], args[1])
        else
          raise ArgumentError
        end
      when 3
        link_3(args[0], args[1], args[2])
      else
        raise ArgumentError
    end
  end

  #
  # change relative path to relative url (相対パスを相対URLにする)
  # @param [String] path relative path (相対パス)
  # @return [String] relative url (相対URL)
  #
  def path_to_url(path)
    paths = File.split(path)

    if paths.length == 1
      return File.basename(paths[0], '.*')
    else
      if ".".eql?(paths[0])
        paths.delete_at 0
        paths[paths.length - 1] = File.basename(paths[paths.length - 1], '.*')
        return String.new('') << "/" << paths.join("/")
      else
        paths[paths.length - 1] = File.basename(paths[paths.length - 1], '.*')
        return String.new('') << "/" << paths.join("/")
      end
    end
  end

  private :path_to_url

  #
  # generate parser (パーサを作成する)
  # @param [Fixnum,Symbol] type type of parser (パーサ・タイプ)
  # @param [String] relative_path relative file path (相対ファイルパス)
  # @param [String] enc character encoding (文字エンコーディング)
  # @return [Meteor::Parser] parser(パーサ)
  #
  def link_3(type, relative_path, enc)

    relative_url = path_to_url(relative_path)

    case type
      when Parser::HTML4, :html4
        html4 = Meteor::Ml::Html4::ParserImpl.new
        html.read(File.expand_path(relative_path, @root), enc)
        @cache[relative_url] = html4
      when Parser::XHTML4, :xhtml4
        xhtml4 = Meteor::Ml::Xhtml4::ParserImpl.new
        xhtml4.read(File.expand_path(relative_path, @root), enc)
        @cache[relative_url] = xhtml4
      when Parser::HTML, :html, :html5
        html = Meteor::Ml::Html::ParserImpl.new
        html.read(File.expand_path(relative_path, @root), enc)
        @cache[relative_url] = html
      when Parser::XHTML, :xhtml, :xhtml5
        xhtml = Meteor::Ml::Xhtml::ParserImpl.new
        xhtml.read(File.expand_path(relative_path, @root), enc)
        @cache[relative_url] = xhtml
      when Parser::XML, :xml
        xml = Meteor::Ml::Xml::ParserImpl.new
        xml.read(File.expand_path(relative_path, @root), enc)
        @cache[relative_url] = xml
    end
  end

  private :link_3

  #
  # generate parser (パーサを作成する)
  # @param [Fixnum,Symbol] type type of parser(パーサ・タイプ)
  # @param [String] relative_path relative file path (相対ファイルパス)
  # @return [Meteor::Parser] parser (パーサ)
  #
  def link_2_n(type, relative_path)

    relative_url = path_to_url(relative_path)

    case type
      when Parser::HTML4, :html4
        ps = Meteor::Ml::Html4::ParserImpl.new
      when Parser::XHTML4, :xhtml4
        ps = Meteor::Ml::Xhtml4::ParserImpl.new
      when Parser::HTML, :html, :html5
        ps = Meteor::Ml::Html::ParserImpl.new
      when Parser::XHTML, :xhtml, :xhtml5
        ps = Meteor::Ml::Xhtml::ParserImpl.new
      when Parser::XML, :xml
        ps = Meteor::Ml::Xml::ParserImpl.new
    end

    ps.read(File.expand_path(relative_path, @root), @enc)
    @cache[relative_url] = ps

  end

  private :link_2_n

  #
  # generate parser (パーサを作成する)
  # @param [String] relative_path relative file path (相対ファイルパス)
  # @param [String] enc character encoding (文字エンコーディング)
  # @return [Meteor::Parser] parser (パーサ)
  #
  def link_2_s(relative_path,enc)

    relative_url = path_to_url(relative_path)

    case @type
      when Parser::HTML4, :html4
        ps = Meteor::Ml::Html4::ParserImpl.new
      when Parser::XHTML4, :xhtml4
        ps = Meteor::Ml::Xhtml4::ParserImpl.new
      when Parser::HTML, :html
        ps = Meteor::Ml::Html::ParserImpl.new
      when Parser::XHTML, :xhtml
        ps = Meteor::Ml::Xhtml::ParserImpl.new
      when Parser::XML, :xml
        ps = Meteor::Ml::Xml::ParserImpl.new
    end

    ps.read(File.expand_path(relative_path, @root), enc)
    @cache[relative_url] = ps

  end

  private :link_2_s

  #
  # generate parser (パーサを作成する)
  # @param [String] relative_path relative file path (相対ファイルパス)
  # @return [Meteor::Parser] parser (パーサ)
  #
  def link_1(relative_path)

    relative_url = path_to_url(relative_path)

    case @type
      when Parser::HTML4, :html4
        ps = Meteor::Ml::Html4::ParserImpl.new
      when Parser::XHTML, :xhtml
        ps = Meteor::Ml::Xhtml4::ParserImpl.new
      when Parser::HTML, :html
        ps = Meteor::Ml::Html::ParserImpl.new
      when Parser::XHTML, :xhtml
        ps = Meteor::Ml::Xhtml::ParserImpl.new
      when Parser::XML, :xml
        ps = Meteor::Ml::Xml::ParserImpl.new
      else
        raise ArgumentError
    end

    ps.read(File.expand_path(relative_path, @root), @enc)
    @cache[relative_url] = ps

  end

  private :link_1

  #
  #@overload parser(key)
  # get parser (パーサを取得する)
  # @param [String,Symbol] key identifier (キー)
  # @return [Meteor::Parser] parser (パーサ)
  #@overload parser(type,relative_path,enc)
  # generate parser (パーサを作成する)
  # @param [Fixnum] type type of parser (パーサ・タイプ)
  # @param [String] relative_path relative file path (相対ファイルパス)
  # @param [String] enc character encoding (エンコーディング)
  # @return [Meteor::Parser] parser (パーサ)
  # @deprecated
  #@overload parser(type,relative_path)
  # generate parser (パーサを作成する)
  # @param [Fixnum] type type of parser (パーサ・タイプ)
  # @param [String] relative_path relative file path (相対ファイルパス)
  # @return [Meteor::Parser] parser (パーサ)
  # @deprecated
  def parser(*args)
    case args.length
      when 1
        parser_1(args[0])
      when 2,3
        link(args)
    end
    # parser_1(key)
  end

  #
  # get parser (パーサを取得する)
  # @param [String] key identifier (キー)
  # @return [Meteor::Parser] parser (パーサ)
  #
  def parser_1(key)
    @pif = @cache[key.to_s]
    case @pif.doc_type
      when Meteor::Parser::HTML4
        Meteor::Ml::Html4::ParserImpl.new(@pif)
      when Meteor::Parser::XHTML4
        Meteor::Ml::Xhtml4::ParserImpl.new(@pif)
      when Meteor::Parser::HTML
        Meteor::Ml::Html::ParserImpl.new(@pif)
      when Meteor::Parser::XHTML
        Meteor::Ml::Xhtml::ParserImpl.new(@pif)
      when Meteor::Parser::XML
        Meteor::Ml::Xml::ParserImpl.new(@pif)
    end
  end

  private :parser_1

  #
  # get root element (ルート要素を取得する)
  # @param [String,Symbol] key identifier (キー)
  # @return [Meteor::RootElement] root element (ルート要素)
  #
  def element(key)
    parser_1(key).root_element
  end

  #
  # @overload link_str(type, relative_url, doc)
  #  generate parser (パーサを作成する)
  #  @param [Fixnum] type type of parser (パーサ・タイプ)
  #  @param [String] relative_url relative URL (相対URL)
  #  @param [String] doc document (ドキュメント)
  #  @return [Meteor::Parser] parser (パーサ)
  # @overload link_str(relative_url, doc)
  #  generate parser (パーサを作成する)
  #  @param [String] relative_url relative URL (相対URL)
  #  @param [String] doc document (ドキュメント)
  #  @return [Meteor::Parser] parser (パーサ)
  #
  def link_str(*args)
    case args.length
      when 2
        link_str_2(args[0],args[1])
      when 3
        link_str_3(args[0],args[1],args[2])
      else
        raise ArgumentError
    end
  end

  #
  # generate parser (パーサを作成する)
  # @param [Fixnum,Symbol] type type of parser (パーサ・タイプ)
  # @param [String] relative_url relative URL (相対URL)
  # @param [String] doc document (ドキュメント)
  # @return [Meteor::Parser] parser (パーサ)
  #
  def link_str_3(type, relative_url, doc)
    case type
      when Parser::HTML4, :html
        ps = Meteor::Ml::Html4::ParserImpl.new
      when Parser::XHTML4, :xhtml4
        ps = Meteor::Ml::Xhtml4::ParserImpl.new
      when Parser::HTML, :html
        ps = Meteor::Ml::Html::ParserImpl.new
      when Parser::XHTML, :xhtml
        ps = Meteor::Ml::Xhtml::ParserImpl.new
      when Parser::XML, :xml
        ps = Meteor::Ml::Xml::ParserImpl.new
    end

    ps.dcument = doc
    ps.parse
    @cache[relative_url] = ps
  end

  private :link_str_3

  #
  # generate parser (パーサを作成する)
  # @param [String] relative_url relative URL (相対URL)
  # @param [String] doc document (ドキュメント)
  # @return [Meteor::Parser] parser (パーサ)
  #
  def link_str_2(relative_url, doc)
    case @type
      when Parser::HTML4, :html4
        ps = Meteor::Ml::Html4::ParserImpl.new
      when Parser::XHTML, :xhtml
        ps = Meteor::Ml::Xhtml4::ParserImpl.new
      when Parser::HTML, :html
        ps = Meteor::Ml::Html::ParserImpl.new
      when Parser::XHTML, :xhtml
        ps = Meteor::Ml::Xhtml::ParserImpl.new
      when Parser::XML, :xml
        ps = Meteor::Ml::Xml::ParserImpl.new
    end

    ps.document = doc
    ps.parse
    @cache[relative_url] = ps
  end

  private :link_str_2

  alias :paraser_str :link_str

  #
  # set parser (パーサをセットする)
  # @param [String,Symbol] key identifier (キー)
  # @param [Meteor::Parser] ps parser (パーサ)
  #
  def []=(key, ps)
    @cache[key] = ps
  end

  #
  # get parser (パーサを取得する)
  # @param [String,Symbol] key identifier (キー)
  # @return [Meteor::Parser] parser (パーサ)
  #
  def [](key)
    self.parser(key)
  end
end

#rootString Also known as: base_dir

Returns root root directory (基準ディレクトリ).

Returns:

  • (String)

    root root directory (基準ディレクトリ)



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
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
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
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
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
# File 'lib/meteor/parser_factory.rb', line 15

class ParserFactory
  attr_accessor :type
  attr_accessor :root
  attr_accessor :enc

  alias_method :base_type, :type
  alias_method :base_type=, :type=
  alias_method :base_dir, :root
  alias_method :base_dir=, :root=
  alias_method :base_enc, :enc
  alias_method :base_enc=, :enc=

  alias_method :base_encoding, :enc
  alias_method :base_encoding=, :enc=

  #
  # initializer (イニシャライザ)
  # @overload initialize()
  # @overload initialize(root)
  #  @param [String] root root directory (基準ディレクトリ)
  # @overload initialize(root, enc)
  #  @param [String] root root directory (基準ディレクトリ)
  #  @param [String] enc default character encoding (デフォルトエンコーディング)
  # @overload initialize(type, root, enc)
  #  @param [FixNum,Symbol] type default type of parser (デフォルトのパーサ・タイプ)
  #  @param [String] root root directory (基準ディレクトリ)
  #  @param [String] enc default character encoding (デフォルト文字エンコーディング)
  #
  def initialize(*args)
    case args.length
      when 0
        initialize_0
      when 1
        initialize_1(args[0])
      when 2
        initialize_2(args[0], args[1])
      when 3
        initialize_3(args[0],args[1],args[2])
      else
        raise ArgumentError
    end
  end

  #
  # initializer (イニシャライザ)
  #
  def initialize_0
    @cache = Hash.new
    @root = "."
    @enc = "UTF-8"
  end

  private :initialize_0

  #
  # イニシャライザ
  # @param [String] root root directory (基準ディレクトリ)
  #
  def initialize_1(root)
    @cache = Hash.new
    @root = root
    @enc = "UTF-8"
  end

  private :initialize_1

  #
  # イニシャライザ
  # @param [String] root root directory (基準ディレクトリ)
  # @param [String] enc default character encoding (デフォルト文字エンコーディング)
  #
  def initialize_2(root, enc)
    @cache = Hash.new
    @root = root
    @enc = enc
  end

  private :initialize_2

  #
  # イニシャライザ
  # @param [FixNum,Symbol] type default type of parser (デフォルトのパーサ・タイプ)
  # @param [String] root root directory (基準ディレクトリ)
  # @param [String] enc default character encoding (デフォルト文字エンコーディング)
  #
  def initialize_3(type , root, enc)
    @cache = Hash.new
    @type = type
    @root = root
    @enc = enc
  end

  private :initialize_3

  #
  # set options (オプションをセットする)
  # @param [Hash] opts option (オプション)
  # @option opts [String] :root root directory (基準ディレクトリ)
  # @option @deprecated opts [String] :base_dir root directory (基準ディレクトリ)
  # @option opts [String] :enc default character encoding (デフォルト文字エンコーディング)
  # @option @deprecated opts [String] :base_enc default character encoding (デフォルト文字エンコーディング)
  # @option opts [FixNum,Symbol] :type default type of parser (デフォルトのパーサ・タイプ)
  # @option @deprecated opts [FixNum | Symbol] :base_type default type of parser (デフォルトのパーサ・タイプ)
  #
  def options=(opts)
    if opts.kind_of?(Hash)
      if opts.include?(:root)
        @root = opts[:root]
      elsif opts.include?(:base_dir)
        @root = opts[:base_dir]
      end
      if opts.include?(:enc)
        @enc = opts[:enc]
      elsif opts.include?(:base_enc)
        @enc = opts[:base_enc]
      end
      if opts.include?(:type)
        @type = opts[:type]
      elsif opts.include?(:base_type)
        @type = opts[:base_type]
      end
    else
      raise ArgumentError
    end
  end

  #
  #@overload link(relative_path,enc)
  # generate parser (パーサを作成する)
  # @param [String] relative_path relative file path (相対ファイルパス)
  # @param [String] enc character encoding (文字エンコーディング)
  # @return [Meteor::Parser] parser (パーサ)
  #@overload link(relative_path)
  # generate parser (パーサを作成する)
  # @param [String] relative_path relative file path (相対ファイルパス)
  # @return [Meteor::Parser] parser (パーサ)
  #@overload link(type,relative_path,enc)
  # generate parser (パーサを作成する)
  # @param [Fixnum,Symbol] type type of parser (パーサ・タイプ)
  # @param [String] relative_path relative file path (相対ファイルパス)
  # @param [String] enc character encoding (文字エンコーディング)
  # @return [Meteor::Parser] parser (パーサ)
  #@overload link(type,relative_path)
  # generate parser (パーサを作成する)
  # @param [Fixnum,Symbol] type type of parser (パーサ・タイプ)
  # @param [String] relative_path relative file path (相対ファイルパス)
  # @return [Meteor::Parser] parser (パーサ)
  #
  def link(*args)
    case args.length
      when 1
        link_1(args[0])
      when 2
        if args[0].kind_of?(Fixnum) || args[0].kind_of?(Symbol)
          link_2_n(args[0], args[1])
        elsif args[0].kind_of?(String)
          link_2_s(args[0], args[1])
        else
          raise ArgumentError
        end
      when 3
        link_3(args[0], args[1], args[2])
      else
        raise ArgumentError
    end
  end

  #
  # change relative path to relative url (相対パスを相対URLにする)
  # @param [String] path relative path (相対パス)
  # @return [String] relative url (相対URL)
  #
  def path_to_url(path)
    paths = File.split(path)

    if paths.length == 1
      return File.basename(paths[0], '.*')
    else
      if ".".eql?(paths[0])
        paths.delete_at 0
        paths[paths.length - 1] = File.basename(paths[paths.length - 1], '.*')
        return String.new('') << "/" << paths.join("/")
      else
        paths[paths.length - 1] = File.basename(paths[paths.length - 1], '.*')
        return String.new('') << "/" << paths.join("/")
      end
    end
  end

  private :path_to_url

  #
  # generate parser (パーサを作成する)
  # @param [Fixnum,Symbol] type type of parser (パーサ・タイプ)
  # @param [String] relative_path relative file path (相対ファイルパス)
  # @param [String] enc character encoding (文字エンコーディング)
  # @return [Meteor::Parser] parser(パーサ)
  #
  def link_3(type, relative_path, enc)

    relative_url = path_to_url(relative_path)

    case type
      when Parser::HTML4, :html4
        html4 = Meteor::Ml::Html4::ParserImpl.new
        html.read(File.expand_path(relative_path, @root), enc)
        @cache[relative_url] = html4
      when Parser::XHTML4, :xhtml4
        xhtml4 = Meteor::Ml::Xhtml4::ParserImpl.new
        xhtml4.read(File.expand_path(relative_path, @root), enc)
        @cache[relative_url] = xhtml4
      when Parser::HTML, :html, :html5
        html = Meteor::Ml::Html::ParserImpl.new
        html.read(File.expand_path(relative_path, @root), enc)
        @cache[relative_url] = html
      when Parser::XHTML, :xhtml, :xhtml5
        xhtml = Meteor::Ml::Xhtml::ParserImpl.new
        xhtml.read(File.expand_path(relative_path, @root), enc)
        @cache[relative_url] = xhtml
      when Parser::XML, :xml
        xml = Meteor::Ml::Xml::ParserImpl.new
        xml.read(File.expand_path(relative_path, @root), enc)
        @cache[relative_url] = xml
    end
  end

  private :link_3

  #
  # generate parser (パーサを作成する)
  # @param [Fixnum,Symbol] type type of parser(パーサ・タイプ)
  # @param [String] relative_path relative file path (相対ファイルパス)
  # @return [Meteor::Parser] parser (パーサ)
  #
  def link_2_n(type, relative_path)

    relative_url = path_to_url(relative_path)

    case type
      when Parser::HTML4, :html4
        ps = Meteor::Ml::Html4::ParserImpl.new
      when Parser::XHTML4, :xhtml4
        ps = Meteor::Ml::Xhtml4::ParserImpl.new
      when Parser::HTML, :html, :html5
        ps = Meteor::Ml::Html::ParserImpl.new
      when Parser::XHTML, :xhtml, :xhtml5
        ps = Meteor::Ml::Xhtml::ParserImpl.new
      when Parser::XML, :xml
        ps = Meteor::Ml::Xml::ParserImpl.new
    end

    ps.read(File.expand_path(relative_path, @root), @enc)
    @cache[relative_url] = ps

  end

  private :link_2_n

  #
  # generate parser (パーサを作成する)
  # @param [String] relative_path relative file path (相対ファイルパス)
  # @param [String] enc character encoding (文字エンコーディング)
  # @return [Meteor::Parser] parser (パーサ)
  #
  def link_2_s(relative_path,enc)

    relative_url = path_to_url(relative_path)

    case @type
      when Parser::HTML4, :html4
        ps = Meteor::Ml::Html4::ParserImpl.new
      when Parser::XHTML4, :xhtml4
        ps = Meteor::Ml::Xhtml4::ParserImpl.new
      when Parser::HTML, :html
        ps = Meteor::Ml::Html::ParserImpl.new
      when Parser::XHTML, :xhtml
        ps = Meteor::Ml::Xhtml::ParserImpl.new
      when Parser::XML, :xml
        ps = Meteor::Ml::Xml::ParserImpl.new
    end

    ps.read(File.expand_path(relative_path, @root), enc)
    @cache[relative_url] = ps

  end

  private :link_2_s

  #
  # generate parser (パーサを作成する)
  # @param [String] relative_path relative file path (相対ファイルパス)
  # @return [Meteor::Parser] parser (パーサ)
  #
  def link_1(relative_path)

    relative_url = path_to_url(relative_path)

    case @type
      when Parser::HTML4, :html4
        ps = Meteor::Ml::Html4::ParserImpl.new
      when Parser::XHTML, :xhtml
        ps = Meteor::Ml::Xhtml4::ParserImpl.new
      when Parser::HTML, :html
        ps = Meteor::Ml::Html::ParserImpl.new
      when Parser::XHTML, :xhtml
        ps = Meteor::Ml::Xhtml::ParserImpl.new
      when Parser::XML, :xml
        ps = Meteor::Ml::Xml::ParserImpl.new
      else
        raise ArgumentError
    end

    ps.read(File.expand_path(relative_path, @root), @enc)
    @cache[relative_url] = ps

  end

  private :link_1

  #
  #@overload parser(key)
  # get parser (パーサを取得する)
  # @param [String,Symbol] key identifier (キー)
  # @return [Meteor::Parser] parser (パーサ)
  #@overload parser(type,relative_path,enc)
  # generate parser (パーサを作成する)
  # @param [Fixnum] type type of parser (パーサ・タイプ)
  # @param [String] relative_path relative file path (相対ファイルパス)
  # @param [String] enc character encoding (エンコーディング)
  # @return [Meteor::Parser] parser (パーサ)
  # @deprecated
  #@overload parser(type,relative_path)
  # generate parser (パーサを作成する)
  # @param [Fixnum] type type of parser (パーサ・タイプ)
  # @param [String] relative_path relative file path (相対ファイルパス)
  # @return [Meteor::Parser] parser (パーサ)
  # @deprecated
  def parser(*args)
    case args.length
      when 1
        parser_1(args[0])
      when 2,3
        link(args)
    end
    # parser_1(key)
  end

  #
  # get parser (パーサを取得する)
  # @param [String] key identifier (キー)
  # @return [Meteor::Parser] parser (パーサ)
  #
  def parser_1(key)
    @pif = @cache[key.to_s]
    case @pif.doc_type
      when Meteor::Parser::HTML4
        Meteor::Ml::Html4::ParserImpl.new(@pif)
      when Meteor::Parser::XHTML4
        Meteor::Ml::Xhtml4::ParserImpl.new(@pif)
      when Meteor::Parser::HTML
        Meteor::Ml::Html::ParserImpl.new(@pif)
      when Meteor::Parser::XHTML
        Meteor::Ml::Xhtml::ParserImpl.new(@pif)
      when Meteor::Parser::XML
        Meteor::Ml::Xml::ParserImpl.new(@pif)
    end
  end

  private :parser_1

  #
  # get root element (ルート要素を取得する)
  # @param [String,Symbol] key identifier (キー)
  # @return [Meteor::RootElement] root element (ルート要素)
  #
  def element(key)
    parser_1(key).root_element
  end

  #
  # @overload link_str(type, relative_url, doc)
  #  generate parser (パーサを作成する)
  #  @param [Fixnum] type type of parser (パーサ・タイプ)
  #  @param [String] relative_url relative URL (相対URL)
  #  @param [String] doc document (ドキュメント)
  #  @return [Meteor::Parser] parser (パーサ)
  # @overload link_str(relative_url, doc)
  #  generate parser (パーサを作成する)
  #  @param [String] relative_url relative URL (相対URL)
  #  @param [String] doc document (ドキュメント)
  #  @return [Meteor::Parser] parser (パーサ)
  #
  def link_str(*args)
    case args.length
      when 2
        link_str_2(args[0],args[1])
      when 3
        link_str_3(args[0],args[1],args[2])
      else
        raise ArgumentError
    end
  end

  #
  # generate parser (パーサを作成する)
  # @param [Fixnum,Symbol] type type of parser (パーサ・タイプ)
  # @param [String] relative_url relative URL (相対URL)
  # @param [String] doc document (ドキュメント)
  # @return [Meteor::Parser] parser (パーサ)
  #
  def link_str_3(type, relative_url, doc)
    case type
      when Parser::HTML4, :html
        ps = Meteor::Ml::Html4::ParserImpl.new
      when Parser::XHTML4, :xhtml4
        ps = Meteor::Ml::Xhtml4::ParserImpl.new
      when Parser::HTML, :html
        ps = Meteor::Ml::Html::ParserImpl.new
      when Parser::XHTML, :xhtml
        ps = Meteor::Ml::Xhtml::ParserImpl.new
      when Parser::XML, :xml
        ps = Meteor::Ml::Xml::ParserImpl.new
    end

    ps.dcument = doc
    ps.parse
    @cache[relative_url] = ps
  end

  private :link_str_3

  #
  # generate parser (パーサを作成する)
  # @param [String] relative_url relative URL (相対URL)
  # @param [String] doc document (ドキュメント)
  # @return [Meteor::Parser] parser (パーサ)
  #
  def link_str_2(relative_url, doc)
    case @type
      when Parser::HTML4, :html4
        ps = Meteor::Ml::Html4::ParserImpl.new
      when Parser::XHTML, :xhtml
        ps = Meteor::Ml::Xhtml4::ParserImpl.new
      when Parser::HTML, :html
        ps = Meteor::Ml::Html::ParserImpl.new
      when Parser::XHTML, :xhtml
        ps = Meteor::Ml::Xhtml::ParserImpl.new
      when Parser::XML, :xml
        ps = Meteor::Ml::Xml::ParserImpl.new
    end

    ps.document = doc
    ps.parse
    @cache[relative_url] = ps
  end

  private :link_str_2

  alias :paraser_str :link_str

  #
  # set parser (パーサをセットする)
  # @param [String,Symbol] key identifier (キー)
  # @param [Meteor::Parser] ps parser (パーサ)
  #
  def []=(key, ps)
    @cache[key] = ps
  end

  #
  # get parser (パーサを取得する)
  # @param [String,Symbol] key identifier (キー)
  # @return [Meteor::Parser] parser (パーサ)
  #
  def [](key)
    self.parser(key)
  end
end

#typeFixNum, Symbol Also known as: base_type

Returns default type of parser (デフォルトのパーサ・タイプ).

Returns:

  • (FixNum, Symbol)

    default type of parser (デフォルトのパーサ・タイプ)



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
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
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
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
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
# File 'lib/meteor/parser_factory.rb', line 15

class ParserFactory
  attr_accessor :type
  attr_accessor :root
  attr_accessor :enc

  alias_method :base_type, :type
  alias_method :base_type=, :type=
  alias_method :base_dir, :root
  alias_method :base_dir=, :root=
  alias_method :base_enc, :enc
  alias_method :base_enc=, :enc=

  alias_method :base_encoding, :enc
  alias_method :base_encoding=, :enc=

  #
  # initializer (イニシャライザ)
  # @overload initialize()
  # @overload initialize(root)
  #  @param [String] root root directory (基準ディレクトリ)
  # @overload initialize(root, enc)
  #  @param [String] root root directory (基準ディレクトリ)
  #  @param [String] enc default character encoding (デフォルトエンコーディング)
  # @overload initialize(type, root, enc)
  #  @param [FixNum,Symbol] type default type of parser (デフォルトのパーサ・タイプ)
  #  @param [String] root root directory (基準ディレクトリ)
  #  @param [String] enc default character encoding (デフォルト文字エンコーディング)
  #
  def initialize(*args)
    case args.length
      when 0
        initialize_0
      when 1
        initialize_1(args[0])
      when 2
        initialize_2(args[0], args[1])
      when 3
        initialize_3(args[0],args[1],args[2])
      else
        raise ArgumentError
    end
  end

  #
  # initializer (イニシャライザ)
  #
  def initialize_0
    @cache = Hash.new
    @root = "."
    @enc = "UTF-8"
  end

  private :initialize_0

  #
  # イニシャライザ
  # @param [String] root root directory (基準ディレクトリ)
  #
  def initialize_1(root)
    @cache = Hash.new
    @root = root
    @enc = "UTF-8"
  end

  private :initialize_1

  #
  # イニシャライザ
  # @param [String] root root directory (基準ディレクトリ)
  # @param [String] enc default character encoding (デフォルト文字エンコーディング)
  #
  def initialize_2(root, enc)
    @cache = Hash.new
    @root = root
    @enc = enc
  end

  private :initialize_2

  #
  # イニシャライザ
  # @param [FixNum,Symbol] type default type of parser (デフォルトのパーサ・タイプ)
  # @param [String] root root directory (基準ディレクトリ)
  # @param [String] enc default character encoding (デフォルト文字エンコーディング)
  #
  def initialize_3(type , root, enc)
    @cache = Hash.new
    @type = type
    @root = root
    @enc = enc
  end

  private :initialize_3

  #
  # set options (オプションをセットする)
  # @param [Hash] opts option (オプション)
  # @option opts [String] :root root directory (基準ディレクトリ)
  # @option @deprecated opts [String] :base_dir root directory (基準ディレクトリ)
  # @option opts [String] :enc default character encoding (デフォルト文字エンコーディング)
  # @option @deprecated opts [String] :base_enc default character encoding (デフォルト文字エンコーディング)
  # @option opts [FixNum,Symbol] :type default type of parser (デフォルトのパーサ・タイプ)
  # @option @deprecated opts [FixNum | Symbol] :base_type default type of parser (デフォルトのパーサ・タイプ)
  #
  def options=(opts)
    if opts.kind_of?(Hash)
      if opts.include?(:root)
        @root = opts[:root]
      elsif opts.include?(:base_dir)
        @root = opts[:base_dir]
      end
      if opts.include?(:enc)
        @enc = opts[:enc]
      elsif opts.include?(:base_enc)
        @enc = opts[:base_enc]
      end
      if opts.include?(:type)
        @type = opts[:type]
      elsif opts.include?(:base_type)
        @type = opts[:base_type]
      end
    else
      raise ArgumentError
    end
  end

  #
  #@overload link(relative_path,enc)
  # generate parser (パーサを作成する)
  # @param [String] relative_path relative file path (相対ファイルパス)
  # @param [String] enc character encoding (文字エンコーディング)
  # @return [Meteor::Parser] parser (パーサ)
  #@overload link(relative_path)
  # generate parser (パーサを作成する)
  # @param [String] relative_path relative file path (相対ファイルパス)
  # @return [Meteor::Parser] parser (パーサ)
  #@overload link(type,relative_path,enc)
  # generate parser (パーサを作成する)
  # @param [Fixnum,Symbol] type type of parser (パーサ・タイプ)
  # @param [String] relative_path relative file path (相対ファイルパス)
  # @param [String] enc character encoding (文字エンコーディング)
  # @return [Meteor::Parser] parser (パーサ)
  #@overload link(type,relative_path)
  # generate parser (パーサを作成する)
  # @param [Fixnum,Symbol] type type of parser (パーサ・タイプ)
  # @param [String] relative_path relative file path (相対ファイルパス)
  # @return [Meteor::Parser] parser (パーサ)
  #
  def link(*args)
    case args.length
      when 1
        link_1(args[0])
      when 2
        if args[0].kind_of?(Fixnum) || args[0].kind_of?(Symbol)
          link_2_n(args[0], args[1])
        elsif args[0].kind_of?(String)
          link_2_s(args[0], args[1])
        else
          raise ArgumentError
        end
      when 3
        link_3(args[0], args[1], args[2])
      else
        raise ArgumentError
    end
  end

  #
  # change relative path to relative url (相対パスを相対URLにする)
  # @param [String] path relative path (相対パス)
  # @return [String] relative url (相対URL)
  #
  def path_to_url(path)
    paths = File.split(path)

    if paths.length == 1
      return File.basename(paths[0], '.*')
    else
      if ".".eql?(paths[0])
        paths.delete_at 0
        paths[paths.length - 1] = File.basename(paths[paths.length - 1], '.*')
        return String.new('') << "/" << paths.join("/")
      else
        paths[paths.length - 1] = File.basename(paths[paths.length - 1], '.*')
        return String.new('') << "/" << paths.join("/")
      end
    end
  end

  private :path_to_url

  #
  # generate parser (パーサを作成する)
  # @param [Fixnum,Symbol] type type of parser (パーサ・タイプ)
  # @param [String] relative_path relative file path (相対ファイルパス)
  # @param [String] enc character encoding (文字エンコーディング)
  # @return [Meteor::Parser] parser(パーサ)
  #
  def link_3(type, relative_path, enc)

    relative_url = path_to_url(relative_path)

    case type
      when Parser::HTML4, :html4
        html4 = Meteor::Ml::Html4::ParserImpl.new
        html.read(File.expand_path(relative_path, @root), enc)
        @cache[relative_url] = html4
      when Parser::XHTML4, :xhtml4
        xhtml4 = Meteor::Ml::Xhtml4::ParserImpl.new
        xhtml4.read(File.expand_path(relative_path, @root), enc)
        @cache[relative_url] = xhtml4
      when Parser::HTML, :html, :html5
        html = Meteor::Ml::Html::ParserImpl.new
        html.read(File.expand_path(relative_path, @root), enc)
        @cache[relative_url] = html
      when Parser::XHTML, :xhtml, :xhtml5
        xhtml = Meteor::Ml::Xhtml::ParserImpl.new
        xhtml.read(File.expand_path(relative_path, @root), enc)
        @cache[relative_url] = xhtml
      when Parser::XML, :xml
        xml = Meteor::Ml::Xml::ParserImpl.new
        xml.read(File.expand_path(relative_path, @root), enc)
        @cache[relative_url] = xml
    end
  end

  private :link_3

  #
  # generate parser (パーサを作成する)
  # @param [Fixnum,Symbol] type type of parser(パーサ・タイプ)
  # @param [String] relative_path relative file path (相対ファイルパス)
  # @return [Meteor::Parser] parser (パーサ)
  #
  def link_2_n(type, relative_path)

    relative_url = path_to_url(relative_path)

    case type
      when Parser::HTML4, :html4
        ps = Meteor::Ml::Html4::ParserImpl.new
      when Parser::XHTML4, :xhtml4
        ps = Meteor::Ml::Xhtml4::ParserImpl.new
      when Parser::HTML, :html, :html5
        ps = Meteor::Ml::Html::ParserImpl.new
      when Parser::XHTML, :xhtml, :xhtml5
        ps = Meteor::Ml::Xhtml::ParserImpl.new
      when Parser::XML, :xml
        ps = Meteor::Ml::Xml::ParserImpl.new
    end

    ps.read(File.expand_path(relative_path, @root), @enc)
    @cache[relative_url] = ps

  end

  private :link_2_n

  #
  # generate parser (パーサを作成する)
  # @param [String] relative_path relative file path (相対ファイルパス)
  # @param [String] enc character encoding (文字エンコーディング)
  # @return [Meteor::Parser] parser (パーサ)
  #
  def link_2_s(relative_path,enc)

    relative_url = path_to_url(relative_path)

    case @type
      when Parser::HTML4, :html4
        ps = Meteor::Ml::Html4::ParserImpl.new
      when Parser::XHTML4, :xhtml4
        ps = Meteor::Ml::Xhtml4::ParserImpl.new
      when Parser::HTML, :html
        ps = Meteor::Ml::Html::ParserImpl.new
      when Parser::XHTML, :xhtml
        ps = Meteor::Ml::Xhtml::ParserImpl.new
      when Parser::XML, :xml
        ps = Meteor::Ml::Xml::ParserImpl.new
    end

    ps.read(File.expand_path(relative_path, @root), enc)
    @cache[relative_url] = ps

  end

  private :link_2_s

  #
  # generate parser (パーサを作成する)
  # @param [String] relative_path relative file path (相対ファイルパス)
  # @return [Meteor::Parser] parser (パーサ)
  #
  def link_1(relative_path)

    relative_url = path_to_url(relative_path)

    case @type
      when Parser::HTML4, :html4
        ps = Meteor::Ml::Html4::ParserImpl.new
      when Parser::XHTML, :xhtml
        ps = Meteor::Ml::Xhtml4::ParserImpl.new
      when Parser::HTML, :html
        ps = Meteor::Ml::Html::ParserImpl.new
      when Parser::XHTML, :xhtml
        ps = Meteor::Ml::Xhtml::ParserImpl.new
      when Parser::XML, :xml
        ps = Meteor::Ml::Xml::ParserImpl.new
      else
        raise ArgumentError
    end

    ps.read(File.expand_path(relative_path, @root), @enc)
    @cache[relative_url] = ps

  end

  private :link_1

  #
  #@overload parser(key)
  # get parser (パーサを取得する)
  # @param [String,Symbol] key identifier (キー)
  # @return [Meteor::Parser] parser (パーサ)
  #@overload parser(type,relative_path,enc)
  # generate parser (パーサを作成する)
  # @param [Fixnum] type type of parser (パーサ・タイプ)
  # @param [String] relative_path relative file path (相対ファイルパス)
  # @param [String] enc character encoding (エンコーディング)
  # @return [Meteor::Parser] parser (パーサ)
  # @deprecated
  #@overload parser(type,relative_path)
  # generate parser (パーサを作成する)
  # @param [Fixnum] type type of parser (パーサ・タイプ)
  # @param [String] relative_path relative file path (相対ファイルパス)
  # @return [Meteor::Parser] parser (パーサ)
  # @deprecated
  def parser(*args)
    case args.length
      when 1
        parser_1(args[0])
      when 2,3
        link(args)
    end
    # parser_1(key)
  end

  #
  # get parser (パーサを取得する)
  # @param [String] key identifier (キー)
  # @return [Meteor::Parser] parser (パーサ)
  #
  def parser_1(key)
    @pif = @cache[key.to_s]
    case @pif.doc_type
      when Meteor::Parser::HTML4
        Meteor::Ml::Html4::ParserImpl.new(@pif)
      when Meteor::Parser::XHTML4
        Meteor::Ml::Xhtml4::ParserImpl.new(@pif)
      when Meteor::Parser::HTML
        Meteor::Ml::Html::ParserImpl.new(@pif)
      when Meteor::Parser::XHTML
        Meteor::Ml::Xhtml::ParserImpl.new(@pif)
      when Meteor::Parser::XML
        Meteor::Ml::Xml::ParserImpl.new(@pif)
    end
  end

  private :parser_1

  #
  # get root element (ルート要素を取得する)
  # @param [String,Symbol] key identifier (キー)
  # @return [Meteor::RootElement] root element (ルート要素)
  #
  def element(key)
    parser_1(key).root_element
  end

  #
  # @overload link_str(type, relative_url, doc)
  #  generate parser (パーサを作成する)
  #  @param [Fixnum] type type of parser (パーサ・タイプ)
  #  @param [String] relative_url relative URL (相対URL)
  #  @param [String] doc document (ドキュメント)
  #  @return [Meteor::Parser] parser (パーサ)
  # @overload link_str(relative_url, doc)
  #  generate parser (パーサを作成する)
  #  @param [String] relative_url relative URL (相対URL)
  #  @param [String] doc document (ドキュメント)
  #  @return [Meteor::Parser] parser (パーサ)
  #
  def link_str(*args)
    case args.length
      when 2
        link_str_2(args[0],args[1])
      when 3
        link_str_3(args[0],args[1],args[2])
      else
        raise ArgumentError
    end
  end

  #
  # generate parser (パーサを作成する)
  # @param [Fixnum,Symbol] type type of parser (パーサ・タイプ)
  # @param [String] relative_url relative URL (相対URL)
  # @param [String] doc document (ドキュメント)
  # @return [Meteor::Parser] parser (パーサ)
  #
  def link_str_3(type, relative_url, doc)
    case type
      when Parser::HTML4, :html
        ps = Meteor::Ml::Html4::ParserImpl.new
      when Parser::XHTML4, :xhtml4
        ps = Meteor::Ml::Xhtml4::ParserImpl.new
      when Parser::HTML, :html
        ps = Meteor::Ml::Html::ParserImpl.new
      when Parser::XHTML, :xhtml
        ps = Meteor::Ml::Xhtml::ParserImpl.new
      when Parser::XML, :xml
        ps = Meteor::Ml::Xml::ParserImpl.new
    end

    ps.dcument = doc
    ps.parse
    @cache[relative_url] = ps
  end

  private :link_str_3

  #
  # generate parser (パーサを作成する)
  # @param [String] relative_url relative URL (相対URL)
  # @param [String] doc document (ドキュメント)
  # @return [Meteor::Parser] parser (パーサ)
  #
  def link_str_2(relative_url, doc)
    case @type
      when Parser::HTML4, :html4
        ps = Meteor::Ml::Html4::ParserImpl.new
      when Parser::XHTML, :xhtml
        ps = Meteor::Ml::Xhtml4::ParserImpl.new
      when Parser::HTML, :html
        ps = Meteor::Ml::Html::ParserImpl.new
      when Parser::XHTML, :xhtml
        ps = Meteor::Ml::Xhtml::ParserImpl.new
      when Parser::XML, :xml
        ps = Meteor::Ml::Xml::ParserImpl.new
    end

    ps.document = doc
    ps.parse
    @cache[relative_url] = ps
  end

  private :link_str_2

  alias :paraser_str :link_str

  #
  # set parser (パーサをセットする)
  # @param [String,Symbol] key identifier (キー)
  # @param [Meteor::Parser] ps parser (パーサ)
  #
  def []=(key, ps)
    @cache[key] = ps
  end

  #
  # get parser (パーサを取得する)
  # @param [String,Symbol] key identifier (キー)
  # @return [Meteor::Parser] parser (パーサ)
  #
  def [](key)
    self.parser(key)
  end
end

Instance Method Details

#[](key) ⇒ Meteor::Parser

get parser (パーサを取得する)

Parameters:

  • key (String, Symbol)

    identifier (キー)

Returns:



489
490
491
# File 'lib/meteor/parser_factory.rb', line 489

def [](key)
  self.parser(key)
end

#[]=(key, ps) ⇒ Object

set parser (パーサをセットする)

Parameters:

  • key (String, Symbol)

    identifier (キー)

  • ps (Meteor::Parser)

    parser (パーサ)



480
481
482
# File 'lib/meteor/parser_factory.rb', line 480

def []=(key, ps)
  @cache[key] = ps
end

#element(key) ⇒ Meteor::RootElement

get root element (ルート要素を取得する)

Parameters:

  • key (String, Symbol)

    identifier (キー)

Returns:



390
391
392
# File 'lib/meteor/parser_factory.rb', line 390

def element(key)
  parser_1(key).root_element
end

generate parser (パーサを作成する) generate parser (パーサを作成する) generate parser (パーサを作成する) generate parser (パーサを作成する)

Parameters:

  • relative_path (String)

    relative file path (相対ファイルパス)

  • enc (String)

    character encoding (文字エンコーディング)

  • relative_path (String)

    relative file path (相対ファイルパス)

  • type (Fixnum, Symbol)

    type of parser (パーサ・タイプ)

  • relative_path (String)

    relative file path (相対ファイルパス)

  • enc (String)

    character encoding (文字エンコーディング)

  • type (Fixnum, Symbol)

    type of parser (パーサ・タイプ)

  • relative_path (String)

    relative file path (相対ファイルパス)

Returns:



163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
# File 'lib/meteor/parser_factory.rb', line 163

def link(*args)
  case args.length
    when 1
      link_1(args[0])
    when 2
      if args[0].kind_of?(Fixnum) || args[0].kind_of?(Symbol)
        link_2_n(args[0], args[1])
      elsif args[0].kind_of?(String)
        link_2_s(args[0], args[1])
      else
        raise ArgumentError
      end
    when 3
      link_3(args[0], args[1], args[2])
    else
      raise ArgumentError
  end
end

Overloads:

  • #link_str(type, relative_url, doc) ⇒ Meteor::Parser

    generate parser (パーサを作成する)

    Parameters:

    • type (Fixnum)

      type of parser (パーサ・タイプ)

    • relative_url (String)

      relative URL (相対URL)

    • doc (String)

      document (ドキュメント)

    Returns:

  • #link_str(relative_url, doc) ⇒ Meteor::Parser

    generate parser (パーサを作成する)

    Parameters:

    • relative_url (String)

      relative URL (相対URL)

    • doc (String)

      document (ドキュメント)

    Returns:



407
408
409
410
411
412
413
414
415
416
# File 'lib/meteor/parser_factory.rb', line 407

def link_str(*args)
  case args.length
    when 2
      link_str_2(args[0],args[1])
    when 3
      link_str_3(args[0],args[1],args[2])
    else
      raise ArgumentError
  end
end

#options=(opts) ⇒ Object

set options (オプションをセットする)

Parameters:

  • opts (Hash)

    option (オプション)

  • @deprecated (Hash)

    a customizable set of options

Options Hash (opts):

  • :root (String)

    root directory (基準ディレクトリ)

  • :enc (String)

    default character encoding (デフォルト文字エンコーディング)

  • :type (FixNum, Symbol)

    default type of parser (デフォルトのパーサ・タイプ)



119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# File 'lib/meteor/parser_factory.rb', line 119

def options=(opts)
  if opts.kind_of?(Hash)
    if opts.include?(:root)
      @root = opts[:root]
    elsif opts.include?(:base_dir)
      @root = opts[:base_dir]
    end
    if opts.include?(:enc)
      @enc = opts[:enc]
    elsif opts.include?(:base_enc)
      @enc = opts[:base_enc]
    end
    if opts.include?(:type)
      @type = opts[:type]
    elsif opts.include?(:base_type)
      @type = opts[:base_type]
    end
  else
    raise ArgumentError
  end
end

#parser(key) ⇒ Meteor::Parser #parser(type, relative_path, enc) ⇒ Meteor::Parser #parser(type, relative_path) ⇒ Meteor::Parser

Deprecated.

get parser (パーサを取得する) generate parser (パーサを作成する) generate parser (パーサを作成する)

Parameters:

  • key (String, Symbol)

    identifier (キー)

  • type (Fixnum)

    type of parser (パーサ・タイプ)

  • relative_path (String)

    relative file path (相対ファイルパス)

  • enc (String)

    character encoding (エンコーディング)

  • type (Fixnum)

    type of parser (パーサ・タイプ)

  • relative_path (String)

    relative file path (相対ファイルパス)

Returns:



352
353
354
355
356
357
358
359
360
# File 'lib/meteor/parser_factory.rb', line 352

def parser(*args)
  case args.length
    when 1
      parser_1(args[0])
    when 2,3
      link(args)
  end
  # parser_1(key)
end