meteor 0.9.7.4 → 0.9.7.5

Sign up to get free protection for your applications and to get access to all the features.
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