meteor 0.9.7.4 → 0.9.7.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. data/lib/meteor.rb +556 -110
  2. metadata +3 -3
data/lib/meteor.rb CHANGED
@@ -18,12 +18,12 @@
18
18
  # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19
19
  #
20
20
  # @author Yasumasa Ashida
21
- # @version 0.9.7.4
21
+ # @version 0.9.7.5
22
22
  #
23
23
 
24
24
  module Meteor
25
25
 
26
- VERSION = "0.9.7.4"
26
+ VERSION = "0.9.7.5"
27
27
 
28
28
  RUBY_VERSION_1_9_0 = '1.9.0'
29
29
 
@@ -303,7 +303,7 @@ module Meteor
303
303
  end
304
304
  end
305
305
 
306
- alias child element
306
+ alias :child :element
307
307
 
308
308
  #
309
309
  # get child element using selector like css3(CSS3のようにセレクタを用いて子要素を取得する)
@@ -336,8 +336,9 @@ module Meteor
336
336
  #
337
337
  # @overload attr(attr)
338
338
  # set attribute of element (要素の属性をセットする)
339
- # @param [Hash] attr attribute map (属性)
339
+ # @param [Hash] attr attribute (属性)
340
340
  # @return [Meteor::Element] element (要素)
341
+ # @deprecated
341
342
  # @overload attr(attr_name,attr_value)
342
343
  # set attribute of element (要素の属性をセットする)
343
344
  # @param [String] attr_name attribute name (属性名)
@@ -352,11 +353,37 @@ module Meteor
352
353
  @parser.attr(self, attrs,*args)
353
354
  end
354
355
 
356
+ #
357
+ # set attribute of element (要素の属性をセットする)
358
+ # @param [Hash] attr attribute (属性)
359
+ # @return [Meteor::Element] element (要素)
360
+ #
361
+ def attr=(attr)
362
+ @parser.attr(self,attr)
363
+ end
364
+
365
+ #
366
+ # set attribute map (要素マップをセットする)
367
+ # @params [Hash] attr_map attributes (属性マップ)
368
+ # @return [Meteor::Element] element (要素)
369
+ def attrs=(attrs)
370
+ @parser.attrs(self,attrs)
371
+ end
372
+
373
+ #
374
+ # get attribute map (属性マップを取得する)
375
+ # @return [Hash] attribute map (属性マップ)
376
+ #
377
+ def attrs
378
+ @parser.attrs(self)
379
+ end
380
+
355
381
  #
356
382
  # @overload attr_map(attr_map)
357
383
  # set attribute map (属性マップをセットする)
358
384
  # @param [Meteor::AttributeMap] attr_map attribute map (属性マップ)
359
385
  # @return [Meteor::Element] element (要素)
386
+ # @deprecated
360
387
  # @overload attr_map()
361
388
  # get attribute map (属性マップを取得する)
362
389
  # @return [Meteor::AttributeMap] attribute map (属性マップ)
@@ -365,6 +392,15 @@ module Meteor
365
392
  @parser.attr_map(self, *args)
366
393
  end
367
394
 
395
+ #
396
+ # set attribute map (属性マップをセットする)
397
+ # @param [Meteor::AttributeMap] attr_map attribute map (属性マップ)
398
+ # @return [Meteor::Element] element (要素)
399
+ #
400
+ def attr_map=(attr_map)
401
+ @parser.attr_map(self,attr_map)
402
+ end
403
+
368
404
  #
369
405
  # @overload content(content,entity_ref=true)
370
406
  # set content of element (要素の内容をセットする)
@@ -384,8 +420,8 @@ module Meteor
384
420
  end
385
421
 
386
422
  #
387
- # set content of element (内容をセットする)
388
- # @param [String] value content (内容)
423
+ # set content of element (要素の内容をセットする)
424
+ # @param [String] value content (要素の内容)
389
425
  # @return [Meteor::Element] element (要素)
390
426
  #
391
427
  def content=(value)
@@ -403,7 +439,7 @@ module Meteor
403
439
  end
404
440
 
405
441
  #
406
- # 属性の値を取得する
442
+ # get attribute value (属性の値を取得する)
407
443
  # @param [String] name attribute name (属性の名前)
408
444
  # @return [String] attribute value (属性の値)
409
445
  #
@@ -471,7 +507,7 @@ module Meteor
471
507
  attr_accessor :content_type #[String] content type (コンテントタイプ)
472
508
  attr_accessor :kaigyo_code #[String] newline (改行コード)
473
509
  attr_accessor :charset #[String] charset (文字コード)
474
- attr_accessor :character_encoding #[String] character encoding (エンコーディング)
510
+ attr_accessor :character_encoding #[String] character encoding (文字エンコーディング)
475
511
  #attr_accessor :document #[String] document (ドキュメント)
476
512
  end
477
513
 
@@ -506,6 +542,8 @@ module Meteor
506
542
  @recordable = false
507
543
  end
508
544
 
545
+ private :initialize_0
546
+
509
547
  #
510
548
  # initializer (イニシャライザ)
511
549
  # @param [Meteor::AttributeMap] attr_map attribute map (属性マップ)
@@ -516,6 +554,8 @@ module Meteor
516
554
  @recordable = attr_map.recordable
517
555
  end
518
556
 
557
+ private :initialize_1
558
+
519
559
  #
520
560
  # set a couple of attribute name and attribute value (属性名と属性値を対としてセットする)
521
561
  # @param [String] name attribute name (属性名)
@@ -630,6 +670,8 @@ module Meteor
630
670
  @recordable = false
631
671
  end
632
672
 
673
+ private :initialize_0
674
+
633
675
  #
634
676
  # initializer (イニシャライザ)
635
677
  # @param [Meteor::AttributeMap] attr_map attribute map (属性マップ)
@@ -641,6 +683,8 @@ module Meteor
641
683
  @recordable = attr_map.recordable
642
684
  end
643
685
 
686
+ private :initialize_1
687
+
644
688
  #
645
689
  # set a couple of attribute name and attribute value (属性名と属性値を対としてセットする)
646
690
  # @param [String] name attribute name (属性名)
@@ -721,17 +765,24 @@ module Meteor
721
765
  SLASH = '/'
722
766
  ENC_UTF8 = 'UTF-8'
723
767
 
768
+ attr_accessor :base_type #[FixNum] default type of parser (デフォルトのパーサ・タイプ)
724
769
  attr_accessor :base_dir #[String] base directory (基準ディレクトリ)
725
- attr_accessor :base_encoding #[String] default character encoding (デフォルトエンコーディング)
770
+ attr_accessor :base_enc #[String] default character encoding (デフォルトエンコーディング)
771
+
772
+ alias :base_encoding :base_enc
726
773
 
727
774
  #
728
775
  # initializer (イニシャライザ)
729
776
  # @overload initialize()
730
777
  # @overload initialize(bs_dir)
731
778
  # @param [String] bs_dir base directory (基準ディレクトリ)
732
- # @overload initialize(bs_dir,bs_encoding)
779
+ # @overload initialize(bs_dir,bs_enc)
780
+ # @param [String] bs_dir base directory (基準ディレクトリ)
781
+ # @param [String] bs_enc default character encoding (デフォルトエンコーディング)
782
+ # @overload initialize(bs_type,bs_dir,bs_enc)
783
+ # @param [FixNum] bs_type default type of parser (デフォルトのパーサ・タイプ)
733
784
  # @param [String] bs_dir base directory (基準ディレクトリ)
734
- # @param [String] bs_encoding default character encoding (デフォルトエンコーディング)
785
+ # @param [String] bs_enc default character encoding (デフォルト文字エンコーディング)
735
786
  #
736
787
  def initialize(*args)
737
788
  case args.length
@@ -741,6 +792,8 @@ module Meteor
741
792
  initialize_1(args[0])
742
793
  when 2 then
743
794
  initialize_2(args[0], args[1])
795
+ when 3 then
796
+ initialize_3(args[0],args[1],args[2])
744
797
  else
745
798
  raise ArgumentError
746
799
  end
@@ -752,7 +805,7 @@ module Meteor
752
805
  def initialize_0
753
806
  @cache = Hash.new
754
807
  @base_dir = CURRENT_DIR
755
- @base_encoding = ENC_UTF8
808
+ @base_enc = ENC_UTF8
756
809
  end
757
810
 
758
811
  private :initialize_0
@@ -764,7 +817,7 @@ module Meteor
764
817
  def initialize_1(bs_dir)
765
818
  @cache = Hash.new
766
819
  @base_dir = bs_dir
767
- @base_encoding = ENC_UTF8
820
+ @base_enc = ENC_UTF8
768
821
  end
769
822
 
770
823
  private :initialize_1
@@ -772,51 +825,103 @@ module Meteor
772
825
  #
773
826
  # イニシャライザ
774
827
  # @param [String] bs_dir base directory (基準ディレクトリ)
775
- # @param [String] bs_encoding default character encoding (デフォルトエンコーディング)
828
+ # @param [String] bs_enc default character encoding (デフォルト文字エンコーディング)
776
829
  #
777
- def initialize_2(bs_dir, bs_encoding)
830
+ def initialize_2(bs_dir, bs_enc)
778
831
  @cache = Hash.new
779
832
  @base_dir = bs_dir
780
- @base_encoding = bs_encoding
833
+ @base_enc = bs_enc
781
834
  end
782
835
 
783
- private :initialize_1
836
+ private :initialize_2
837
+
838
+ #
839
+ # イニシャライザ
840
+ # @paeam [FixNum] bs_type default type of parser (デフォルトのパーサ・タイプ)
841
+ # @param [String] bs_dir base directory (基準ディレクトリ)
842
+ # @param [String] bs_enc default character encoding (デフォルト文字エンコーディング)
843
+ #
844
+ def initialize_3(bs_type , bs_dir, bs_enc)
845
+ @cache = Hash.new
846
+ @base_type = bs_type
847
+ @base_dir = bs_dir
848
+ @base_enc = bs_enc
849
+ end
850
+
851
+ private :initialize_3
852
+
853
+ #
854
+ # set options (オプションをセットする)
855
+ # @param [Hash] opts option (オプション)
856
+ # @option opts [String] :base_dir base directory (基準ディレクトリ)
857
+ # @option opts [String] :base_enc default character encoding (デフォルト文字エンコーディング)
858
+ # @option opts [FixNum] :base_type default type of parser (デフォルトのパーサ・タイプ)
859
+ #
860
+ def options=(opts)
861
+ if opts.kind_of?(Hash)
862
+ if opts.include?(:base_dir)
863
+ @base_dir = opts[:base_dir]
864
+ end
865
+ if opts.include?(:base_enc)
866
+ @base_enc = opts[:base_enc]
867
+ end
868
+ if opts.include?(:base_type)
869
+ @base_type= opts[:base_type]
870
+ end
871
+ else
872
+ raise ArgumentError
873
+ end
874
+ end
784
875
 
785
876
  #
786
- #@overload parser(type,relative_path,encoding)
877
+ #@overload bind(relative_path,enc)
787
878
  # generate parser (パーサを作成する)
788
- # @param [Fixnum] type type of parser (パーサのタイプ)
789
879
  # @param [String] relative_path relative file path (相対ファイルパス)
790
- # @param [String] encoding character encoding (エンコーディング)
880
+ # @param [String] enc character encoding (文字エンコーディング)
791
881
  # @return [Meteor::Parser] parser (パーサ)
792
- #@overload parser(type,relative_path)
882
+ #@overload bind(relative_path)
793
883
  # generate parser (パーサを作成する)
794
- # @param [Fixnum] type type of parser (パーサのタイプ)
795
884
  # @param [String] relative_path relative file path (相対ファイルパス)
796
885
  # @return [Meteor::Parser] parser (パーサ)
797
- #@overload parser(key)
798
- # get parser (パーサを取得する)
799
- # @param [String] key identifier (キー)
886
+ #@overload bind(type,relative_path,enc)
887
+ # generate parser (パーサを作成する)
888
+ # @param [Fixnum] type type of parser (パーサ・タイプ)
889
+ # @param [String] relative_path relative file path (相対ファイルパス)
890
+ # @param [String] enc character encoding (文字エンコーディング)
800
891
  # @return [Meteor::Parser] parser (パーサ)
801
- def parser(*args)
892
+ #@overload bind(type,relative_path)
893
+ # generate parser (パーサを作成する)
894
+ # @param [Fixnum] type type of parser (パーサ・タイプ)
895
+ # @param [String] relative_path relative file path (相対ファイルパス)
896
+ # @return [Meteor::Parser] parser (パーサ)
897
+ #
898
+ def bind(*args)
802
899
  case args.length
803
900
  when 1 then
804
- parser_1(args[0])
901
+ bind_1(args[0])
805
902
  when 2 then
806
- parser_2(args[0], args[1])
903
+ if args[0].kind_of?(Fixnum)
904
+ bind_2_n(args[0], args[1])
905
+ elsif args[0].kind_of?(String)
906
+ bind_2_s(args[0], args[1])
907
+ else
908
+ raise ArgumentError
909
+ end
807
910
  when 3 then
808
- parser_3(args[0], args[1], args[2])
911
+ bind_3(args[0], args[1], args[2])
912
+ else
913
+ raise ArgumentError
809
914
  end
810
915
  end
811
916
 
812
917
  #
813
918
  # generate parser (パーサを作成する)
814
- # @param [Fixnum] type type of parser (パーサのタイプ)
919
+ # @param [Fixnum] type type of parser (パーサ・タイプ)
815
920
  # @param [String] relative_path relative file path (相対ファイルパス)
816
- # @param [String] encoding character encoding (エンコーディング)
921
+ # @param [String] enc character encoding (文字エンコーディング)
817
922
  # @return [Meteor::Parser] parser(パーサ)
818
923
  #
819
- def parser_3(type, relative_path, encoding)
924
+ def bind_3(type, relative_path, enc)
820
925
 
821
926
  paths = File.split(relative_path)
822
927
 
@@ -836,36 +941,36 @@ module Meteor
836
941
  case type
837
942
  when Parser::HTML then
838
943
  html = Meteor::Ml::Html::ParserImpl.new()
839
- html.read(File.expand_path(relative_path, @base_dir), encoding)
944
+ html.read(File.expand_path(relative_path, @base_dir), enc)
840
945
  @cache[relative_url] = html
841
946
  when Parser::XHTML then
842
947
  xhtml = Meteor::Ml::Xhtml::ParserImpl.new()
843
- xhtml.read(File.expand_path(relative_path, @base_dir), encoding)
948
+ xhtml.read(File.expand_path(relative_path, @base_dir), enc)
844
949
  @cache[relative_url] = xhtml
845
950
  when Parser::HTML5 then
846
951
  html5 = Meteor::Ml::Html5::ParserImpl.new()
847
- html5.read(File.expand_path(relative_path, @base_dir), encoding)
952
+ html5.read(File.expand_path(relative_path, @base_dir), enc)
848
953
  @cache[relative_url] = html5
849
954
  when Parser::XHTML5 then
850
955
  xhtml5 = Meteor::Ml::Xhtml5::ParserImpl.new()
851
- xhtml5.read(File.expand_path(relative_path, @base_dir), encoding)
956
+ xhtml5.read(File.expand_path(relative_path, @base_dir), enc)
852
957
  @cache[relative_url] = xhtml5
853
958
  when Parser::XML then
854
959
  xml = Meteor::Ml::Xml::ParserImpl.new()
855
- xml.read(File.expand_path(relative_path, @base_dir), encoding)
960
+ xml.read(File.expand_path(relative_path, @base_dir), enc)
856
961
  @cache[relative_url] = xml
857
962
  end
858
963
  end
859
964
 
860
- private :parser_3
965
+ private :bind_3
861
966
 
862
967
  #
863
968
  # generate parser (パーサを作成する)
864
- # @param [Fixnum] type type of parser(パーサのタイプ)
969
+ # @param [Fixnum] type type of parser(パーサ・タイプ)
865
970
  # @param [String] relative_path relative file path (相対ファイルパス)
866
971
  # @return [Meteor::Parser] parser (パーサ)
867
972
  #
868
- def parser_2(type, relative_path)
973
+ def bind_2_n(type, relative_path)
869
974
 
870
975
  paths = File.split(relative_path)
871
976
 
@@ -885,29 +990,158 @@ module Meteor
885
990
  case type
886
991
  when Parser::HTML then
887
992
  html = Meteor::Ml::Html::ParserImpl.new()
888
- html.read(File.expand_path(relative_path, @base_dir), @base_encoding)
993
+ html.read(File.expand_path(relative_path, @base_dir), @base_enc)
994
+ @cache[relative_url] = html
995
+ when Parser::XHTML then
996
+ xhtml = Meteor::Ml::Xhtml::ParserImpl.new()
997
+ xhtml.read(File.expand_path(relative_path, @base_dir), @base_enc)
998
+ @cache[relative_url] = xhtml
999
+ when Parser::HTML5 then
1000
+ html5 = Meteor::Ml::Html5::ParserImpl.new()
1001
+ html5.read(File.expand_path(relative_path, @base_dir), @base_enc)
1002
+ @cache[relative_url] = html5
1003
+ when Parser::XHTML5 then
1004
+ xhtml5 = Meteor::Ml::Xhtml5::ParserImpl.new()
1005
+ xhtml5.read(File.expand_path(relative_path, @base_dir), @base_enc)
1006
+ @cache[relative_url] = xhtml5
1007
+ when Parser::XML then
1008
+ xml = Meteor::Ml::Xml::ParserImpl.new()
1009
+ xml.read(File.expand_path(relative_path, @base_dir), @base_enc)
1010
+ @cache[relative_url] = xml
1011
+ end
1012
+
1013
+ end
1014
+
1015
+ private :bind_2_n
1016
+
1017
+ #
1018
+ # generate parser (パーサを作成する)
1019
+ # @param [String] relative_path relative file path (相対ファイルパス)
1020
+ # @param [String] enc character encoding (文字エンコーディング)
1021
+ # @return [Meteor::Parser] parser (パーサ)
1022
+ #
1023
+ def bind_2_s(relative_path,enc)
1024
+
1025
+ paths = File.split(relative_path)
1026
+
1027
+ if paths.length == 1 then
1028
+ relative_url = File.basename(paths[0], ABST_EXT_NAME)
1029
+ else
1030
+ if CURRENT_DIR.eql?(paths[0]) then
1031
+ paths.delete_at 0
1032
+ paths[paths.length - 1] = File.basename(paths[paths.length - 1], ABST_EXT_NAME)
1033
+ relative_url = paths.join(SLASH)
1034
+ else
1035
+ paths[paths.length - 1] = File.basename(paths[paths.length - 1], ABST_EXT_NAME)
1036
+ relative_url = paths.join(SLASH)
1037
+ end
1038
+ end
1039
+
1040
+ case @base_type
1041
+ when Parser::HTML then
1042
+ html = Meteor::Ml::Html::ParserImpl.new()
1043
+ html.read(File.expand_path(relative_path, @base_dir), enc)
1044
+ @cache[relative_url] = html
1045
+ when Parser::XHTML then
1046
+ xhtml = Meteor::Ml::Xhtml::ParserImpl.new()
1047
+ xhtml.read(File.expand_path(relative_path, @base_dir), enc)
1048
+ @cache[relative_url] = xhtml
1049
+ when Parser::HTML5 then
1050
+ html5 = Meteor::Ml::Html5::ParserImpl.new()
1051
+ html5.read(File.expand_path(relative_path, @base_dir), enc)
1052
+ @cache[relative_url] = html5
1053
+ when Parser::XHTML5 then
1054
+ xhtml5 = Meteor::Ml::Xhtml5::ParserImpl.new()
1055
+ xhtml5.read(File.expand_path(relative_path, @base_dir), enc)
1056
+ @cache[relative_url] = xhtml5
1057
+ when Parser::XML then
1058
+ xml = Meteor::Ml::Xml::ParserImpl.new()
1059
+ xml.read(File.expand_path(relative_path, @base_dir), enc)
1060
+ @cache[relative_url] = xml
1061
+ end
1062
+
1063
+ end
1064
+
1065
+ private :bind_2_s
1066
+
1067
+ #
1068
+ # generate parser (パーサを作成する)
1069
+ # @param [String] relative_path relative file path (相対ファイルパス)
1070
+ # @return [Meteor::Parser] parser (パーサ)
1071
+ #
1072
+ def bind_1(relative_path)
1073
+
1074
+ paths = File.split(relative_path)
1075
+
1076
+ if paths.length == 1 then
1077
+ relative_url = File.basename(paths[0], ABST_EXT_NAME)
1078
+ else
1079
+ if CURRENT_DIR.eql?(paths[0]) then
1080
+ paths.delete_at 0
1081
+ paths[paths.length - 1] = File.basename(paths[paths.length - 1], ABST_EXT_NAME)
1082
+ relative_url = paths.join(SLASH)
1083
+ else
1084
+ paths[paths.length - 1] = File.basename(paths[paths.length - 1], ABST_EXT_NAME)
1085
+ relative_url = paths.join(SLASH)
1086
+ end
1087
+ end
1088
+
1089
+ case @base_type
1090
+ when Parser::HTML then
1091
+ html = Meteor::Ml::Html::ParserImpl.new()
1092
+ html.read(File.expand_path(relative_path, @base_dir), @base_enc)
889
1093
  @cache[relative_url] = html
890
1094
  when Parser::XHTML then
891
1095
  xhtml = Meteor::Ml::Xhtml::ParserImpl.new()
892
- xhtml.read(File.expand_path(relative_path, @base_dir), @base_encoding)
1096
+ xhtml.read(File.expand_path(relative_path, @base_dir), @base_enc)
893
1097
  @cache[relative_url] = xhtml
894
1098
  when Parser::HTML5 then
895
1099
  html5 = Meteor::Ml::Html5::ParserImpl.new()
896
- html5.read(File.expand_path(relative_path, @base_dir), @base_encoding)
1100
+ html5.read(File.expand_path(relative_path, @base_dir), @base_enc)
897
1101
  @cache[relative_url] = html5
898
1102
  when Parser::XHTML5 then
899
1103
  xhtml5 = Meteor::Ml::Xhtml5::ParserImpl.new()
900
- xhtml5.read(File.expand_path(relative_path, @base_dir), @base_encoding)
1104
+ xhtml5.read(File.expand_path(relative_path, @base_dir), @base_enc)
901
1105
  @cache[relative_url] = xhtml5
902
1106
  when Parser::XML then
903
1107
  xml = Meteor::Ml::Xml::ParserImpl.new()
904
- xml.read(File.expand_path(relative_path, @base_dir), @base_encoding)
1108
+ xml.read(File.expand_path(relative_path, @base_dir), @base_enc)
905
1109
  @cache[relative_url] = xml
1110
+ else
1111
+ raise ArgumentError
906
1112
  end
907
1113
 
908
1114
  end
909
1115
 
910
- private :parser_2
1116
+ private :bind_1
1117
+
1118
+ #
1119
+ #@overload parser(key)
1120
+ # get parser (パーサを取得する)
1121
+ # @param [String] key identifier (キー)
1122
+ # @return [Meteor::Parser] parser (パーサ)
1123
+ #@overload parser(type,relative_path,enc)
1124
+ # generate parser (パーサを作成する)
1125
+ # @param [Fixnum] type type of parser (パーサ・タイプ)
1126
+ # @param [String] relative_path relative file path (相対ファイルパス)
1127
+ # @param [String] enc character encoding (エンコーディング)
1128
+ # @return [Meteor::Parser] parser (パーサ)
1129
+ # @deprecated
1130
+ #@overload parser(type,relative_path)
1131
+ # generate parser (パーサを作成する)
1132
+ # @param [Fixnum] type type of parser (パーサ・タイプ)
1133
+ # @param [String] relative_path relative file path (相対ファイルパス)
1134
+ # @return [Meteor::Parser] parser (パーサ)
1135
+ # @deprecated
1136
+ def parser(*args)
1137
+ case args.length
1138
+ when 1 then
1139
+ parser_1(args[0])
1140
+ when 2,3 then
1141
+ bind(args)
1142
+ end
1143
+ #parser_1(key)
1144
+ end
911
1145
 
912
1146
  #
913
1147
  # get parser (パーサを取得する)
@@ -941,38 +1175,99 @@ module Meteor
941
1175
  parser_1(key).root_element
942
1176
  end
943
1177
 
1178
+
1179
+ # @overload bind_str(type, relative_url, doc)
1180
+ # generate parser (パーサを作成する)
1181
+ # @param [Fixnum] type type of parser (パーサ・タイプ)
1182
+ # @param [String] relative_url relative URL (相対URL)
1183
+ # @param [String] doc document (ドキュメント)
1184
+ # @return [Meteor::Parser] parser (パーサ)
1185
+ # @overload bind_str(relative_url, doc)
1186
+ # generate parser (パーサを作成する)
1187
+ # @param [String] relative_url relative URL (相対URL)
1188
+ # @param [String] doc document (ドキュメント)
1189
+ # @return [Meteor::Parser] parser (パーサ)
1190
+ #
1191
+ def bind_str(*args)
1192
+ case args.length
1193
+ when 2 then
1194
+ bind_str_2(args[0],args[1])
1195
+ when 3 then
1196
+ bind_str_3(args[0],args[1],args[2])
1197
+ else
1198
+ raise ArgumentError
1199
+ end
1200
+ end
1201
+
944
1202
  #
945
1203
  # generate parser (パーサを作成する)
946
- # @param [Fixnum] type type of parser (パーサのタイプ)
1204
+ # @param [Fixnum] type type of parser (パーサ・タイプ)
947
1205
  # @param [String] relative_url relative URL (相対URL)
948
- # @param [String] document document (ドキュメント)
1206
+ # @param [String] doc document (ドキュメント)
949
1207
  # @return [Meteor::Parser] parser (パーサ)
950
1208
  #
951
- def parser_str(type, relative_url, document)
1209
+ def bind_str_3(type, relative_url, doc)
952
1210
  case type
953
1211
  when Parser::HTML then
954
1212
  html = Meteor::Ml::Html::ParserImpl.new()
955
- html.parse(document)
1213
+ html.parse(doc)
1214
+ @cache[relative_url] = html
1215
+ when Parser::XHTML then
1216
+ xhtml = Meteor::Ml::Xhtml::ParserImpl.new()
1217
+ xhtml.parse(doc)
1218
+ @cache[relative_url] = xhtml
1219
+ when Parser::HTML5 then
1220
+ html5 = Meteor::Ml::Html5::ParserImpl.new()
1221
+ html5.parse(doc)
1222
+ @cache[relative_url] = html5
1223
+ when Parser::XHTML5 then
1224
+ xhtml5 = Meteor::Ml::Xhtml5::ParserImpl.new()
1225
+ xhtml5.parse(doc)
1226
+ @cache[relative_url] = xhtml5
1227
+ when Parser::XML then
1228
+ xml = Meteor::Ml::Xml::ParserImpl.new()
1229
+ xml.parse(doc)
1230
+ @cache[relative_url] = xml
1231
+ end
1232
+ end
1233
+
1234
+ private :bind_str_3
1235
+
1236
+ #
1237
+ # generate parser (パーサを作成する)
1238
+ # @param [String] relative_url relative URL (相対URL)
1239
+ # @param [String] doc document (ドキュメント)
1240
+ # @return [Meteor::Parser] parser (パーサ)
1241
+ #
1242
+ def bind_str_2(relative_url, doc)
1243
+ case @base_type
1244
+ when Parser::HTML then
1245
+ html = Meteor::Ml::Html::ParserImpl.new()
1246
+ html.parse(doc)
956
1247
  @cache[relative_url] = html
957
1248
  when Parser::XHTML then
958
1249
  xhtml = Meteor::Ml::Xhtml::ParserImpl.new()
959
- xhtml.parse(document)
1250
+ xhtml.parse(doc)
960
1251
  @cache[relative_url] = xhtml
961
1252
  when Parser::HTML5 then
962
1253
  html5 = Meteor::Ml::Html5::ParserImpl.new()
963
- html5.parse(document)
1254
+ html5.parse(doc)
964
1255
  @cache[relative_url] = html5
965
1256
  when Parser::XHTML5 then
966
1257
  xhtml5 = Meteor::Ml::Xhtml5::ParserImpl.new()
967
- xhtml5.parse(document)
1258
+ xhtml5.parse(doc)
968
1259
  @cache[relative_url] = xhtml5
969
1260
  when Parser::XML then
970
1261
  xml = Meteor::Ml::Xml::ParserImpl.new()
971
- xml.parse(document)
1262
+ xml.parse(doc)
972
1263
  @cache[relative_url] = xml
973
1264
  end
974
1265
  end
975
1266
 
1267
+ private :bind_str_2
1268
+
1269
+ alias :paraser_str :bind_str
1270
+
976
1271
  #
977
1272
  # set parser (パーサをセットする)
978
1273
  # @param [String] key identifier (キー)
@@ -993,6 +1288,63 @@ module Meteor
993
1288
 
994
1289
  end
995
1290
 
1291
+ #
1292
+ # Element Factory Class (要素ファクトリクラス)
1293
+ #
1294
+ class ElementFactory
1295
+
1296
+ @@pf = Meteor::ParserFactory.new
1297
+
1298
+ #
1299
+ # set options (オプションをセットする)
1300
+ # @param [Hash] opts option (オプション)
1301
+ # @option opts [String] :base_dir base directory (基準ディレクトリ)
1302
+ # @option opts [String] :base_enc default character encoding (デフォルト文字エンコーディング)
1303
+ # @option opts [FixNum] :base_type default type of parser (デフォルトのパーサ・タイプ)
1304
+ #
1305
+ def self.options=(opts)
1306
+ @@pf.options = opts
1307
+ end
1308
+
1309
+ #
1310
+ #@overload bind(type,relative_path,enc)
1311
+ # generate parser (パーサを作成する)
1312
+ # @param [Fixnum] type type of parser (パーサ・タイプ)
1313
+ # @param [String] relative_path relative file path (相対ファイルパス)
1314
+ # @param [String] enc character encoding (エンコーディング)
1315
+ # @return [Meteor::Parser] parser (パーサ)
1316
+ #@overload bind(type,relative_path)
1317
+ # generate parser (パーサを作成する)
1318
+ # @param [Fixnum] type type of parser (パーサ・タイプ)
1319
+ # @param [String] relative_path relative file path (相対ファイルパス)
1320
+ # @return [Meteor::Parser] parser (パーサ)
1321
+ #
1322
+ def self.bind(*args)
1323
+ @@pf.bind(*args)
1324
+ end
1325
+
1326
+ #
1327
+ # generate parser (パーサを作成する)
1328
+ # @param [Fixnum] type type of parser (パーサ・タイプ)
1329
+ # @param [String] relative_url relative URL (相対URL)
1330
+ # @param [String] document document (ドキュメント)
1331
+ # @return [Meteor::Parser] parser (パーサ)
1332
+ #
1333
+ def self.bind_str(type, relative_url, document)
1334
+ @@pf.bind_str(type,relative_url,document)
1335
+ end
1336
+
1337
+ #
1338
+ # get root element (ルート要素を取得する)
1339
+ # @param [String] key identifier (キー)
1340
+ # @return [Meteor::RootElement] root element (ルート要素)
1341
+ #
1342
+ def self.element(key)
1343
+ @@pf.element(key)
1344
+ end
1345
+
1346
+ end
1347
+
996
1348
  module Hook
997
1349
 
998
1350
  #
@@ -1444,27 +1796,35 @@ module Meteor
1444
1796
  #
1445
1797
  # read file , set in parser (ファイルを読み込み、パーサにセットする)
1446
1798
  # @param [String] file_path absolute path of input file (入力ファイルの絶対パス)
1447
- # @param [String] encoding character encoding of input file (入力ファイルの文字コード)
1799
+ # @param [String] enc character encoding of input file (入力ファイルの文字コード)
1448
1800
  #
1449
- def read(file_path, encoding)
1801
+ def read(file_path, enc)
1450
1802
 
1451
1803
  #try {
1452
- @character_encoding = encoding
1804
+ @character_encoding = enc
1453
1805
  #ファイルのオープン
1454
- if ParserFactory::ENC_UTF8.eql?(encoding) then
1455
- #io = File.open(file_path,MODE_BF << encoding)
1806
+ if ParserFactory::ENC_UTF8.eql?(enc) then
1807
+ #io = File.open(file_path,MODE_BF << enc)
1456
1808
  io = File.open(file_path, MODE_UTF8)
1457
1809
  else
1458
- io = File.open(file_path, '' << MODE_BF << encoding << MODE_AF)
1810
+ io = File.open(file_path, '' << MODE_BF << enc << MODE_AF)
1459
1811
  end
1460
1812
 
1461
1813
  #読込及び格納
1462
- @root.document = io.read
1814
+ parse(io.read)
1463
1815
 
1464
1816
  #ファイルのクローズ
1465
1817
  io.close
1466
1818
  end
1467
1819
 
1820
+ #
1821
+ # set document in parser (ドキュメントをパーサにセットする)
1822
+ # @param [String] document document (ドキュメント)
1823
+ #
1824
+ def parse(document)
1825
+ @root.document = document
1826
+ end
1827
+
1468
1828
  #
1469
1829
  # get element (要素を取得する)
1470
1830
  # @overload element(tag)
@@ -1675,7 +2035,7 @@ module Meteor
1675
2035
 
1676
2036
  def element_with_1(tag)
1677
2037
 
1678
- @elm_ = Element.new(tag)
2038
+ @elm_ = Meteor::Element.new(tag)
1679
2039
  #属性
1680
2040
  @elm_.attributes = @res[2]
1681
2041
  #内容
@@ -1701,7 +2061,7 @@ module Meteor
1701
2061
 
1702
2062
  def element_without_1(tag)
1703
2063
  #要素
1704
- @elm_ = Element.new(tag)
2064
+ @elm_ = Meteor::Element.new(tag)
1705
2065
  #属性
1706
2066
  @elm_.attributes = @res[1]
1707
2067
  #全体
@@ -1786,7 +2146,7 @@ module Meteor
1786
2146
  case @res.captures.length
1787
2147
  when FOUR
1788
2148
  #要素
1789
- @elm_ = Element.new(tag)
2149
+ @elm_ = Meteor::Element.new(tag)
1790
2150
  #属性
1791
2151
  @elm_.attributes = @res[1]
1792
2152
  #内容
@@ -1807,7 +2167,7 @@ module Meteor
1807
2167
 
1808
2168
  when FIVE
1809
2169
  #要素
1810
- @elm_ = Element.new(tag)
2170
+ @elm_ = Meteor::Element.new(tag)
1811
2171
  #属性
1812
2172
  @elm_.attributes = @res[2]
1813
2173
  #内容
@@ -1828,7 +2188,7 @@ module Meteor
1828
2188
 
1829
2189
  when THREE,SIX
1830
2190
  #内容
1831
- @elm_ = Element.new(tag)
2191
+ @elm_ = Meteor::Element.new(tag)
1832
2192
  #属性
1833
2193
  @elm_.attributes = @res[1].chop
1834
2194
  #内容
@@ -1908,7 +2268,7 @@ module Meteor
1908
2268
  def element_without_3_1(tag, closer)
1909
2269
 
1910
2270
  #要素
1911
- @elm_ = Element.new(tag)
2271
+ @elm_ = Meteor::Element.new(tag)
1912
2272
  #属性
1913
2273
  @elm_.attributes = @res[1]
1914
2274
  #全体
@@ -2226,7 +2586,7 @@ module Meteor
2226
2586
  case @res.captures.length
2227
2587
  when FOUR
2228
2588
  #要素
2229
- @elm_ = Element.new(tag)
2589
+ @elm_ = Meteor::Element.new(tag)
2230
2590
  #属性
2231
2591
  @elm_.attributes = @res[1]
2232
2592
  #内容
@@ -2249,7 +2609,7 @@ module Meteor
2249
2609
  @elm_.parser = self
2250
2610
  when FIVE
2251
2611
  #要素
2252
- @elm_ = Element.new(tag)
2612
+ @elm_ = Meteor::Element.new(tag)
2253
2613
  #属性
2254
2614
  @elm_.attributes = @res[2]
2255
2615
  #内容
@@ -2273,7 +2633,7 @@ module Meteor
2273
2633
 
2274
2634
  when THREE,SIX
2275
2635
  #要素
2276
- @elm_ = Element.new(tag)
2636
+ @elm_ = Meteor::Element.new(tag)
2277
2637
  #属性
2278
2638
  @elm_.attributes = @res[1].chop
2279
2639
  #要素
@@ -2362,7 +2722,7 @@ module Meteor
2362
2722
  def element_without_5_1(tag, closer)
2363
2723
 
2364
2724
  #要素
2365
- @elm_ = Element.new(tag)
2725
+ @elm_ = Meteor::Element.new(tag)
2366
2726
  #属性
2367
2727
  @elm_.attributes = @res[1]
2368
2728
  #全体
@@ -2619,25 +2979,29 @@ module Meteor
2619
2979
  # @param [String] attr_name attribute name (属性名)
2620
2980
  # @return [String] attribute value (属性値)
2621
2981
  #
2622
- def attr(elm, attrs,*args)
2623
- if attrs.kind_of?(String)
2982
+ def attr(elm, attr,*args)
2983
+ if attr.kind_of?(String)
2624
2984
  case args.length
2625
2985
  when ZERO
2626
- get_attr_value(elm, attrs)
2986
+ get_attr_value(elm, attr)
2627
2987
  when ONE
2628
2988
  elm.document_sync = true
2629
- set_attribute_3(elm, attrs,args[0])
2989
+ set_attribute_3(elm, attr,args[0])
2630
2990
  end
2631
2991
 
2632
- elsif attrs.kind_of?(Hash) && attrs.size == 1
2992
+ elsif attr.kind_of?(Hash) && attr.size == 1
2633
2993
  elm.document_sync = true
2634
- set_attribute_3(elm, attrs.keys[0], attrs.values[0])
2994
+ set_attribute_3(elm, attr.keys[0], attr.values[0])
2995
+ #elsif attrs.kind_of?(Hash) && attrs.size >= 1
2996
+ # elm.document_sync = true
2997
+ # attrs.each{|name,value|
2998
+ # set_attribute_3(elm,name,value)
2999
+ # }
2635
3000
  else
2636
3001
  raise ArgumentError
2637
3002
  end
2638
3003
  end
2639
3004
 
2640
-
2641
3005
  #
2642
3006
  # set attribute of element (要素の属性を編集する)
2643
3007
  # @param [Meteor::Element] elm element (要素)
@@ -2718,6 +3082,69 @@ module Meteor
2718
3082
 
2719
3083
  private :get_attr_value_
2720
3084
 
3085
+ #
3086
+ # @overload attrs(elm,attrs)
3087
+ # @param
3088
+ #
3089
+ # @overload attrs(elm)
3090
+ #
3091
+ def attrs(elm,*args)
3092
+ case args.length
3093
+ when ZERO
3094
+ get_attrs(elm)
3095
+ when ONE
3096
+ if args[0].kind_of?(Hash)
3097
+ if args[0].size == 1
3098
+ elm.document_sync = true
3099
+ set_attribute_3(elm, args[0].keys[0], args[0].values[0])
3100
+ elsif args[0].size >= 1
3101
+ set_attrs(elm, args[0])
3102
+ else
3103
+ raise ArgumentError
3104
+ end
3105
+ else
3106
+ raise ArgumentError
3107
+ end
3108
+ else
3109
+ raise ArgumentError
3110
+ end
3111
+ end
3112
+
3113
+ #
3114
+ # get attribute map (属性マップを取得する)
3115
+ # @param [Meteor::Element] elm element (要素)
3116
+ # @return [Hash] attribute map (属性マップ)
3117
+ #
3118
+ def get_attrs(elm)
3119
+ attrs = Hash.new
3120
+
3121
+ elm.attributes.scan(@@pattern_get_attrs_map) do |a, b|
3122
+ attrs.store(a, unescape(b))
3123
+ end
3124
+
3125
+ attrs
3126
+ end
3127
+
3128
+ private :get_attrs
3129
+
3130
+ #
3131
+ # set attribute map (要素に属性マップをセットする)
3132
+ # @param [Meteor::Element] elm element (要素)
3133
+ # @param [Hash] attr_map attribute map (属性マップ)
3134
+ # @return [Meteor::Element] element (要素)
3135
+ #
3136
+ def set_attrs(elm, attr_map)
3137
+ if !elm.cx then
3138
+ elm.document_sync = true
3139
+ attr_map.each do |name, value|
3140
+ set_attribute_3(elm, name, value)
3141
+ end
3142
+ end
3143
+ elm
3144
+ end
3145
+
3146
+ private :set_attrs
3147
+
2721
3148
  #
2722
3149
  # @overload attr_map(elm,attr_map)
2723
3150
  # set attribute map (属性マップをセットする)
@@ -2729,15 +3156,15 @@ module Meteor
2729
3156
  # @param [Meteor::Element] elm element (要素)
2730
3157
  # @return [Meteor::AttributeMap] attribute map (属性マップ)
2731
3158
  #
2732
- def attr_map(*args)
3159
+ def attr_map(elm,*args)
2733
3160
  case args.length
3161
+ when ZERO
3162
+ get_attr_map(elm)
2734
3163
  when ONE
2735
- get_attr_map(args[0])
2736
- when TWO
2737
- #if args[0].kind_of?(Meteor::Element) && args[1].kind_of?(Meteor::AttributeMap) then
2738
- args[0].document_sync = true
2739
- set_attr_map(args[0], args[1])
2740
- #end
3164
+ #if elm.kind_of?(Meteor::Element) && args[0].kind_of?(Meteor::AttributeMap) then
3165
+ elm.document_sync = true
3166
+ set_attr_map(elm, args[0])
3167
+ #end
2741
3168
  else
2742
3169
  raise ArgumentError
2743
3170
  end
@@ -2961,7 +3388,7 @@ module Meteor
2961
3388
 
2962
3389
  if @res then
2963
3390
  #要素
2964
- @elm_ = Element.new(tag)
3391
+ @elm_ = Meteor::Element.new(tag)
2965
3392
 
2966
3393
  @elm_.cx = true
2967
3394
  #属性
@@ -3296,22 +3723,22 @@ module Meteor
3296
3723
  #
3297
3724
  # read file , set in parser (ファイルを読み込み、パーサにセットする)
3298
3725
  # @param [String] file_path absolute path of input file (入力ファイルの絶対パス)
3299
- # @param [String] encoding character encoding of input file (入力ファイルの文字コード)
3726
+ # @param [String] enc character encoding of input file (入力ファイルの文字コード)
3300
3727
  #
3301
- def read(file_path, encoding)
3728
+ def read(file_path, enc)
3302
3729
 
3303
3730
  #try {
3304
- @character_encoding = encoding
3731
+ @character_encoding = enc
3305
3732
  #ファイルのオープン
3306
3733
 
3307
3734
  #読込及び格納
3308
3735
  io = open(file_path, MODE)
3309
- @root.document = io.read
3736
+ parse(io.read)
3310
3737
  #@root.document = @root.document.kconv(get_encoding(), Kconv.guess(@root.document))
3311
3738
  enc = Kconv.guess(@root.document)
3312
3739
  #enc = get_encoding
3313
3740
  if !Kconv::UTF8.equal?(enc) then
3314
- @root.document = @root.document.kconv(Kconv::UTF8, enc)
3741
+ parse(@root.document.kconv(Kconv::UTF8, enc))
3315
3742
  end
3316
3743
 
3317
3744
  #ファイルのクローズ
@@ -3700,12 +4127,11 @@ module Meteor
3700
4127
  #
3701
4128
  # read file , set in parser (ファイルを読み込み、パーサにセットする)
3702
4129
  # @param [String] filePath file path (ファイルパス)
3703
- # @param [String] encoding character encoding (エンコーディング)
4130
+ # @param [String] enc character encoding (エンコーディング)
3704
4131
  #
3705
- def read(file_path, encoding)
3706
- super(file_path, encoding)
3707
- analyze_ml()
3708
- end
4132
+ #def read(file_path, enc)
4133
+ # super(file_path, enc)
4134
+ #end
3709
4135
 
3710
4136
  #
3711
4137
  # analyze document (ドキュメントをパースする)
@@ -3817,7 +4243,7 @@ module Meteor
3817
4243
  private :element_1
3818
4244
 
3819
4245
  def element_without_1(tag)
3820
- @elm_ = Element.new(tag)
4246
+ @elm_ = Meteor::Element.new(tag)
3821
4247
  #属性
3822
4248
  @elm_.attributes = @res[1]
3823
4249
  #空要素検索用パターン
@@ -4123,6 +4549,27 @@ module Meteor
4123
4549
 
4124
4550
  private :get_attr_value_r
4125
4551
 
4552
+ #
4553
+ # get attribute map (属性マップを取得する)
4554
+ # @param [Meteor::Element] elm element (要素)
4555
+ # @return [Hash] attribute map (属性マップ)
4556
+ #
4557
+ def get_attrs(elm)
4558
+ attrs = Hash.new
4559
+
4560
+ elm.attributes.scan(@@pattern_get_attrs_map) do |a, b|
4561
+ attrs.store(a, unescape(b))
4562
+ end
4563
+
4564
+ elm.attributes.scan(@@pattern_get_attrs_map2) do |a|
4565
+ attrs.store(a[0], TRUE)
4566
+ end
4567
+
4568
+ attrs
4569
+ end
4570
+
4571
+ private :get_attrs
4572
+
4126
4573
  #
4127
4574
  # get attribute map of element (要素の属性マップを取得する)
4128
4575
  # @param [Meteor::Element] elm element (要素)
@@ -4136,7 +4583,7 @@ module Meteor
4136
4583
  end
4137
4584
 
4138
4585
  elm.attributes.scan(@@pattern_get_attrs_map2) do |a|
4139
- attrs.store(a, TRUE)
4586
+ attrs.store(a[0], TRUE)
4140
4587
  end
4141
4588
 
4142
4589
  attrs.recordable = true
@@ -4464,12 +4911,11 @@ module Meteor
4464
4911
  #
4465
4912
  # read file , set in parser (ファイルを読み込み、パーサにセットする)
4466
4913
  # @param file_path file path (ファイルパス)
4467
- # @param encoding encoding character encoding (エンコーディング)
4914
+ # @param enc character encoding (エンコーディング)
4468
4915
  #
4469
- def read(file_path, encoding)
4470
- super(file_path, encoding)
4471
- analyze_ml()
4472
- end
4916
+ #def read(file_path, enc)
4917
+ # super(file_path, enc)
4918
+ #end
4473
4919
 
4474
4920
  #
4475
4921
  # analyze document (ドキュメントをパースする)
@@ -5120,18 +5566,18 @@ module Meteor
5120
5566
  # set document in parser (ドキュメントをパーサにセットする)
5121
5567
  # @param [String] document document (ドキュメント)
5122
5568
  #
5123
- def parse(document)
5124
- @root.document = document
5125
- end
5569
+ #def parse(document)
5570
+ # @root.document = document
5571
+ #end
5126
5572
 
5127
5573
  #
5128
5574
  # read file , set in parser (ファイルを読み込み、パーサにセットする)
5129
5575
  # @param file_path file path (ファイルパス)
5130
- # @param encoding character encoding (エンコーディング)
5576
+ # @param enc character encoding (エンコーディング)
5131
5577
  #
5132
- def read(file_path, encoding)
5133
- super(file_path, encoding)
5134
- end
5578
+ #def read(file_path, enc)
5579
+ # super(file_path, enc)
5580
+ #end
5135
5581
 
5136
5582
  # get content type (コンテントタイプを取得する)
5137
5583
  # @return [Streing] content type (コンテントタイプ)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: meteor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.7.4
4
+ version: 0.9.7.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-11 00:00:00.000000000 Z
12
+ date: 2013-02-09 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: A lightweight (X)HTML(5) & XML parser
15
15
  email: ys.ashida@gmail.com
@@ -58,7 +58,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
58
58
  version: '0'
59
59
  requirements: []
60
60
  rubyforge_project: meteor
61
- rubygems_version: 1.8.24
61
+ rubygems_version: 1.8.25
62
62
  signing_key:
63
63
  specification_version: 3
64
64
  summary: A lightweight (X)HTML(5) & XML parser