xspf 0.4 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +6 -0
- data/coverage/index.html +5 -5
- data/coverage/lib-xspf_rb.html +391 -390
- data/doc/created.rid +1 -1
- data/doc/fr_method_index.html +83 -82
- data/examples/convert_m3u_to_xspf.rb +13 -0
- data/examples/playlist-tiersen.m3u +10 -0
- data/lib/xspf.rb +2 -1
- data/lib/xspf2rdf.xsl +91 -0
- data/xspf-expanded.rb +10 -0
- metadata +5 -2
data/ChangeLog
CHANGED
data/coverage/index.html
CHANGED
@@ -149,7 +149,7 @@ table.report tr.dark {
|
|
149
149
|
</head>
|
150
150
|
<body>
|
151
151
|
<h3>C0 code coverage information</h3>
|
152
|
-
<p>Generated on
|
152
|
+
<p>Generated on Sun Dec 03 14:34:00 CET 2006 with <a href='http://eigenclass.org/hiki.rb?rcov'>rcov 0.7.0</a>
|
153
153
|
</p>
|
154
154
|
<hr /> <table class='report'>
|
155
155
|
<thead>
|
@@ -165,10 +165,10 @@ table.report tr.dark {
|
|
165
165
|
<tr class='light'>
|
166
166
|
<td>TOTAL</td>
|
167
167
|
<td class='value'>
|
168
|
-
<tt>
|
168
|
+
<tt>481</tt>
|
169
169
|
</td>
|
170
170
|
<td class='value'>
|
171
|
-
<tt>
|
171
|
+
<tt>322</tt>
|
172
172
|
</td>
|
173
173
|
<td>
|
174
174
|
<table cellspacing='0' cellpadding='0' align='right'>
|
@@ -208,10 +208,10 @@ table.report tr.dark {
|
|
208
208
|
<a href='lib-xspf_rb.html'>lib/xspf.rb</a>
|
209
209
|
</td>
|
210
210
|
<td class='value'>
|
211
|
-
<tt>
|
211
|
+
<tt>481</tt>
|
212
212
|
</td>
|
213
213
|
<td class='value'>
|
214
|
-
<tt>
|
214
|
+
<tt>322</tt>
|
215
215
|
</td>
|
216
216
|
<td>
|
217
217
|
<table cellspacing='0' cellpadding='0' align='right'>
|
data/coverage/lib-xspf_rb.html
CHANGED
@@ -554,7 +554,7 @@ span.run100 {
|
|
554
554
|
</head>
|
555
555
|
<body>
|
556
556
|
<h3>C0 code coverage information</h3>
|
557
|
-
<p>Generated on
|
557
|
+
<p>Generated on Sun Dec 03 14:34:00 CET 2006 with <a href='http://eigenclass.org/hiki.rb?rcov'>rcov 0.7.0</a>
|
558
558
|
</p>
|
559
559
|
<hr /><pre><span class='marked0'>Code reported as executed by Ruby looks like this...
|
560
560
|
</span><span class='marked1'>and this: this line is also marked as covered.
|
@@ -578,10 +578,10 @@ span.run100 {
|
|
578
578
|
<a href='lib-xspf_rb.html'>lib/xspf.rb</a>
|
579
579
|
</td>
|
580
580
|
<td class='value'>
|
581
|
-
<tt>
|
581
|
+
<tt>481</tt>
|
582
582
|
</td>
|
583
583
|
<td class='value'>
|
584
|
-
<tt>
|
584
|
+
<tt>322</tt>
|
585
585
|
</td>
|
586
586
|
<td>
|
587
587
|
<table cellspacing='0' cellpadding='0' align='right'>
|
@@ -706,397 +706,398 @@ span.run100 {
|
|
706
706
|
</span><span class="marked1"><a name="line87" /> 87 VERSION_RDOC = 'Version for the XML document or _nil_ if not defined'
|
707
707
|
</span><span class="marked0"><a name="line88" /> 88 ENCODING_RDOC = 'Encoding of the XML document or _nil_ if not defined'
|
708
708
|
</span><span class="inferred1"><a name="line89" /> 89
|
709
|
-
</span><span class="marked0"><a name="line90" /> 90 OUTPUT_FORMATS = %w{ m3u html smil soundblox }
|
709
|
+
</span><span class="marked0"><a name="line90" /> 90 OUTPUT_FORMATS = %w{ m3u html smil rdf soundblox }
|
710
710
|
</span><span class="marked1"><a name="line91" /> 91 M3U_RDOC = 'Creates a .m3u playlist from the XSPF document. This method makes use of the official XSPF to M3U XSLT transformation by Lucas Gonze.'
|
711
711
|
</span><span class="marked0"><a name="line92" /> 92 HTML_RDOC = 'Outputs the playlist as an HTML page. This method makes use of the official XSPF to HTML XSLT transformation by Lucas Gonze.'
|
712
712
|
</span><span class="marked1"><a name="line93" /> 93 SMIL_RDOC = 'Creates a .smil playlist from the XSPF document. This method makes use of the official XSPF to SMIL XSLT transformation by Lucas Gonze.'
|
713
713
|
</span><span class="marked0"><a name="line94" /> 94 SOUNDBLOX_RDOC = 'Creates a SoundBlox playlist from the XSPF document. This method makes use of the official XSPF to SoundBlox XSLT tranformation by Lucas Gonze.'
|
714
|
-
</span><span class="
|
715
|
-
</span><span class="
|
716
|
-
</span><span class="marked1"><a name="line97" /> 97
|
717
|
-
</span><span class="
|
718
|
-
</span><span class="inferred1"><a name="line99" /> 99
|
719
|
-
</span><span class="
|
720
|
-
</span><span class="marked1"><a name="line101" />101
|
721
|
-
</span><span class="
|
722
|
-
</span><span class="inferred1"><a name="line103" />103
|
723
|
-
</span><span class="inferred0"><a name="line104" />104
|
724
|
-
</span><span class="inferred1"><a name="line105" />105
|
725
|
-
</span><span class="inferred0"><a name="line106" />106
|
726
|
-
</span><span class="inferred1"><a name="line107" />107 #
|
727
|
-
</span><span class="inferred0"><a name="line108" />108 #
|
728
|
-
</span><span class="
|
729
|
-
</span><span class="marked0"><a name="line110" />110
|
730
|
-
</span><span class="marked1"><a name="line111" />111
|
731
|
-
</span><span class="marked0"><a name="line112" />112
|
732
|
-
</span><span class="
|
733
|
-
</span><span class="
|
734
|
-
</span><span class="
|
735
|
-
</span><span class="
|
736
|
-
</span><span class="marked1"><a name="line117" />117
|
737
|
-
</span><span class="
|
738
|
-
</span><span class="
|
739
|
-
</span><span class="
|
740
|
-
</span><span class="
|
741
|
-
</span><span class="marked0"><a name="line122" />122 @playlist =
|
742
|
-
</span><span class="marked1"><a name="line123" />123
|
743
|
-
</span><span class="marked0"><a name="line124" />124
|
744
|
-
</span><span class="
|
745
|
-
</span><span class="
|
746
|
-
</span><span class="
|
747
|
-
</span><span class="inferred0"><a name="line128" />128
|
748
|
-
</span><span class="inferred1"><a name="line129" />129
|
749
|
-
</span><span class="
|
750
|
-
</span><span class="marked1"><a name="line131" />131
|
751
|
-
</span><span class="marked0"><a name="line132" />132
|
752
|
-
</span><span class="marked1"><a name="line133" />133
|
753
|
-
</span><span class="
|
754
|
-
</span><span class="inferred1"><a name="line135" />135
|
755
|
-
</span><span class="
|
756
|
-
</span><span class="
|
757
|
-
</span><span class="inferred0"><a name="line138" />138
|
758
|
-
</span><span class="
|
759
|
-
</span><span class="
|
760
|
-
</span><span class="
|
761
|
-
</span><span class="
|
762
|
-
</span><span class="inferred1"><a name="line143" />143
|
763
|
-
</span><span class="
|
764
|
-
</span><span class="marked1"><a name="line145" />145
|
765
|
-
</span><span class="marked0"><a name="line146" />146
|
766
|
-
</span><span class="
|
767
|
-
</span><span class="
|
768
|
-
</span><span class="marked1"><a name="line149" />149
|
769
|
-
</span><span class="marked0"><a name="line150" />150
|
770
|
-
</span><span class="
|
771
|
-
</span><span class="inferred0"><a name="line152" />152
|
772
|
-
</span><span class="inferred1"><a name="line153" />153
|
773
|
-
</span><span class="
|
774
|
-
</span><span class="marked1"><a name="line155" />155
|
775
|
-
</span><span class="marked0"><a name="line156" />156 xml
|
776
|
-
</span><span class="marked1"><a name="line157" />157 xml << REXML::
|
777
|
-
</span><span class="marked0"><a name="line158" />158 xml.
|
778
|
-
</span><span class="
|
779
|
-
</span><span class="inferred0"><a name="line160" />160
|
780
|
-
</span><span class="inferred1"><a name="line161" />161
|
781
|
-
</span><span class="
|
782
|
-
</span><span class="marked1"><a name="line163" />163
|
783
|
-
</span><span class="marked0"><a name="line164" />164
|
784
|
-
</span><span class="marked1"><a name="line165" />165
|
785
|
-
</span><span class="
|
786
|
-
</span><span class="inferred1"><a name="line167" />167
|
787
|
-
</span><span class="inferred0"><a name="line168" />168
|
788
|
-
</span><span class="
|
789
|
-
</span><span class="
|
790
|
-
</span><span class="
|
791
|
-
</span><span class="
|
792
|
-
</span><span class="inferred1"><a name="line173" />173
|
793
|
-
</span><span class="
|
794
|
-
</span><span class="marked1"><a name="line175" />175
|
795
|
-
</span><span class="marked0"><a name="line176" />176
|
796
|
-
</span><span class="marked1"><a name="line177" />177
|
797
|
-
</span><span class="marked0"><a name="line178" />178
|
798
|
-
</span><span class="
|
799
|
-
</span><span class="
|
800
|
-
</span><span class="marked1"><a name="line181" />181
|
801
|
-
</span><span class="marked0"><a name="line182" />182
|
802
|
-
</span><span class="marked1"><a name="line183" />183
|
803
|
-
</span><span class="marked0"><a name="line184" />184
|
804
|
-
</span><span class="marked1"><a name="line185" />185
|
805
|
-
</span><span class="marked0"><a name="line186" />186
|
806
|
-
</span><span class="marked1"><a name="line187" />187
|
807
|
-
</span><span class="marked0"><a name="line188" />188
|
808
|
-
</span><span class="marked1"><a name="line189" />189
|
809
|
-
</span><span class="marked0"><a name="line190" />190
|
810
|
-
</span><span class="marked1"><a name="line191" />191
|
811
|
-
</span><span class="marked0"><a name="line192" />192
|
812
|
-
</span><span class="marked1"><a name="line193" />193
|
813
|
-
</span><span class="marked0"><a name="line194" />194
|
814
|
-
</span><span class="marked1"><a name="line195" />195
|
815
|
-
</span><span class="marked0"><a name="line196" />196
|
816
|
-
</span><span class="marked1"><a name="line197" />197
|
817
|
-
</span><span class="marked0"><a name="line198" />198
|
818
|
-
</span><span class="
|
819
|
-
</span><span class="inferred0"><a name="line200" />200
|
820
|
-
</span><span class="inferred1"><a name="line201" />201 # FIXME Currently we only return the first "
|
821
|
-
</span><span class="inferred0"><a name="line202" />202 # FIXME Currently we only return the first "
|
822
|
-
</span><span class="inferred1"><a name="line203" />203 #
|
823
|
-
</span><span class="inferred0"><a name="line204" />204 # TODO Parse "
|
824
|
-
</span><span class="inferred1"><a name="line205" />205
|
825
|
-
</span><span class="inferred0"><a name="line206" />206
|
826
|
-
</span><span class="
|
827
|
-
</span><span class="marked0"><a name="line208" />208
|
828
|
-
</span><span class="
|
829
|
-
</span><span class="inferred0"><a name="line210" />210
|
830
|
-
</span><span class="
|
831
|
-
</span><span class="marked0"><a name="line212" />212
|
832
|
-
</span><span class="
|
833
|
-
</span><span class="inferred0"><a name="line214" />214
|
834
|
-
</span><span class="
|
835
|
-
</span><span class="marked0"><a name="line216" />216
|
836
|
-
</span><span class="marked1"><a name="line217" />217 MetaGen.add_method( self, "#{ae}
|
837
|
-
</span><span class="
|
838
|
-
</span><span class="inferred1"><a name="line219" />219
|
839
|
-
</span><span class="inferred0"><a name="line220" />220
|
840
|
-
</span><span class="inferred1"><a name="line221" />221
|
841
|
-
</span><span class="inferred0"><a name="line222" />222
|
842
|
-
</span><span class="inferred1"><a name="line223" />223 #
|
843
|
-
</span><span class="inferred0"><a name="line224" />224 #
|
844
|
-
</span><span class="
|
845
|
-
</span><span class="
|
846
|
-
</span><span class="
|
847
|
-
</span><span class="
|
848
|
-
</span><span class="
|
849
|
-
</span><span class="marked0"><a name="line230" />230
|
850
|
-
</span><span class="
|
851
|
-
</span><span class="inferred0"><a name="line232" />232
|
852
|
-
</span><span class="
|
853
|
-
</span><span class="marked0"><a name="line234" />234
|
854
|
-
</span><span class="
|
855
|
-
</span><span class="inferred0"><a name="line236" />236
|
856
|
-
</span><span class="
|
857
|
-
</span><span class="marked0"><a name="line238" />238
|
858
|
-
</span><span class="marked1"><a name="line239" />239 add_instance_variable(source, "#{ae}
|
859
|
-
</span><span class="
|
860
|
-
</span><span class="inferred1"><a name="line241" />241
|
861
|
-
</span><span class="
|
862
|
-
</span><span class="marked1"><a name="line243" />243
|
863
|
-
</span><span class="
|
864
|
-
</span><span class="
|
865
|
-
</span><span class="
|
866
|
-
</span><span class="inferred1"><a name="line247" />247
|
867
|
-
</span><span class="
|
868
|
-
</span><span class="
|
869
|
-
</span><span class="
|
870
|
-
</span><span class="
|
871
|
-
</span><span class="
|
872
|
-
</span><span class="marked1"><a name="line253" />253
|
873
|
-
</span><span class="
|
874
|
-
</span><span class="inferred1"><a name="line255" />255
|
875
|
-
</span><span class="
|
876
|
-
</span><span class="marked1"><a name="line257" />257
|
877
|
-
</span><span class="
|
878
|
-
</span><span class="inferred1"><a name="line259" />259
|
879
|
-
</span><span class="
|
880
|
-
</span><span class="marked1"><a name="line261" />261
|
881
|
-
</span><span class="marked0"><a name="line262" />262 eval('@' + ae.downcase + '
|
882
|
-
</span><span class="
|
883
|
-
</span><span class="inferred0"><a name="line264" />264
|
884
|
-
</span><span class="
|
885
|
-
</span><span class="
|
886
|
-
</span><span class="inferred1"><a name="line267" />267
|
887
|
-
</span><span class="
|
888
|
-
</span><span class="
|
889
|
-
</span><span class="inferred0"><a name="line270" />270
|
890
|
-
</span><span class="
|
891
|
-
</span><span class="
|
892
|
-
</span><span class="inferred1"><a name="line273" />273
|
893
|
-
</span><span class="
|
894
|
-
</span><span class="marked1"><a name="line275" />275
|
895
|
-
</span><span class="marked0"><a name="line276" />276
|
896
|
-
</span><span class="
|
897
|
-
</span><span class="
|
898
|
-
</span><span class="marked1"><a name="line279" />279
|
899
|
-
</span><span class="marked0"><a name="line280" />280
|
900
|
-
</span><span class="
|
901
|
-
</span><span class="inferred0"><a name="line282" />282
|
902
|
-
</span><span class="
|
903
|
-
</span><span class="
|
904
|
-
</span><span class="inferred1"><a name="line285" />285
|
905
|
-
</span><span class="
|
906
|
-
</span><span class="
|
907
|
-
</span><span class="
|
908
|
-
</span><span class="
|
909
|
-
</span><span class="
|
910
|
-
</span><span class="
|
911
|
-
</span><span class="
|
912
|
-
</span><span class="marked1"><a name="line293" />293
|
913
|
-
</span><span class="
|
914
|
-
</span><span class="inferred1"><a name="line295" />295
|
915
|
-
</span><span class="inferred0"><a name="line296" />296
|
916
|
-
</span><span class="
|
917
|
-
</span><span class="
|
918
|
-
</span><span class="
|
919
|
-
</span><span class="marked0"><a name="line300" />300
|
920
|
-
</span><span class="marked1"><a name="line301" />301 el.
|
921
|
-
</span><span class="marked0"><a name="line302" />302
|
922
|
-
</span><span class="
|
923
|
-
</span><span class="inferred0"><a name="line304" />304
|
924
|
-
</span><span class="inferred1"><a name="line305" />305
|
925
|
-
</span><span class="
|
926
|
-
</span><span class="
|
927
|
-
</span><span class="
|
928
|
-
</span><span class="marked1"><a name="line309" />309
|
929
|
-
</span><span class="marked0"><a name="line310" />310 el.
|
930
|
-
</span><span class="marked1"><a name="line311" />311 el.
|
931
|
-
</span><span class="marked0"><a name="line312" />312
|
932
|
-
</span><span class="
|
933
|
-
</span><span class="inferred0"><a name="line314" />314
|
934
|
-
</span><span class="inferred1"><a name="line315" />315
|
935
|
-
</span><span class="
|
936
|
-
</span><span class="
|
937
|
-
</span><span class="
|
938
|
-
</span><span class="
|
939
|
-
</span><span class="inferred0"><a name="line320" />320
|
940
|
-
</span><span class="inferred1"><a name="line321" />321
|
941
|
-
</span><span class="inferred0"><a name="line322" />322
|
942
|
-
</span><span class="
|
943
|
-
</span><span class="marked0"><a name="line324" />324
|
944
|
-
</span><span class="marked1"><a name="line325" />325
|
945
|
-
</span><span class="marked0"><a name="line326" />326
|
946
|
-
</span><span class="
|
947
|
-
</span><span class="
|
948
|
-
</span><span class="marked1"><a name="line329" />329
|
949
|
-
</span><span class="
|
950
|
-
</span><span class="
|
951
|
-
</span><span class="marked0"><a name="line332" />332
|
952
|
-
</span><span class="
|
953
|
-
</span><span class="
|
954
|
-
</span><span class="
|
955
|
-
</span><span class="inferred0"><a name="line336" />336
|
956
|
-
</span><span class="
|
957
|
-
</span><span class="
|
958
|
-
</span><span class="inferred1"><a name="line339" />339
|
959
|
-
</span><span class="inferred0"><a name="line340" />340
|
960
|
-
</span><span class="
|
961
|
-
</span><span class="
|
962
|
-
</span><span class="
|
963
|
-
</span><span class="
|
964
|
-
</span><span class="inferred1"><a name="line345" />345
|
965
|
-
</span><span class="
|
966
|
-
</span><span class="marked1"><a name="line347" />347
|
967
|
-
</span><span class="marked0"><a name="line348" />348
|
968
|
-
</span><span class="marked1"><a name="line349" />349 @
|
969
|
-
</span><span class="
|
970
|
-
</span><span class="
|
971
|
-
</span><span class="marked0"><a name="line352" />352 @
|
972
|
-
</span><span class="
|
973
|
-
</span><span class="
|
974
|
-
</span><span class="
|
975
|
-
</span><span class="inferred0"><a name="line356" />356
|
976
|
-
</span><span class="
|
977
|
-
</span><span class="marked0"><a name="line358" />358
|
978
|
-
</span><span class="marked1"><a name="line359" />359
|
979
|
-
</span><span class="
|
980
|
-
</span><span class="inferred1"><a name="line361" />361
|
981
|
-
</span><span class="
|
982
|
-
</span><span class="marked1"><a name="line363" />363
|
983
|
-
</span><span class="marked0"><a name="line364" />364
|
984
|
-
</span><span class="
|
985
|
-
</span><span class="inferred0"><a name="line366" />366
|
986
|
-
</span><span class="
|
987
|
-
</span><span class="marked0"><a name="line368" />368
|
988
|
-
</span><span class="marked1"><a name="line369" />369
|
989
|
-
</span><span class="marked0"><a name="line370" />370 xml.
|
990
|
-
</span><span class="
|
991
|
-
</span><span class="inferred0"><a name="line372" />372
|
992
|
-
</span><span class="inferred1"><a name="line373" />373
|
993
|
-
</span><span class="inferred0"><a name="line374" />374
|
994
|
-
</span><span class="
|
995
|
-
</span><span class="
|
996
|
-
</span><span class="
|
997
|
-
</span><span class="
|
998
|
-
</span><span class="inferred1"><a name="line379" />379
|
999
|
-
</span><span class="
|
1000
|
-
</span><span class="marked1"><a name="line381" />381
|
1001
|
-
</span><span class="
|
1002
|
-
</span><span class="
|
1003
|
-
</span><span class="marked0"><a name="line384" />384
|
1004
|
-
</span><span class="marked1"><a name="line385" />385
|
1005
|
-
</span><span class="marked0"><a name="line386" />386
|
1006
|
-
</span><span class="marked1"><a name="line387" />387
|
1007
|
-
</span><span class="marked0"><a name="line388" />388
|
1008
|
-
</span><span class="marked1"><a name="line389" />389
|
1009
|
-
</span><span class="marked0"><a name="line390" />390
|
1010
|
-
</span><span class="marked1"><a name="line391" />391
|
1011
|
-
</span><span class="marked0"><a name="line392" />392
|
1012
|
-
</span><span class="marked1"><a name="line393" />393
|
1013
|
-
</span><span class="marked0"><a name="line394" />394
|
1014
|
-
</span><span class="marked1"><a name="line395" />395
|
1015
|
-
</span><span class="marked0"><a name="line396" />396
|
1016
|
-
</span><span class="marked1"><a name="line397" />397
|
1017
|
-
</span><span class="
|
1018
|
-
</span><span class="
|
1019
|
-
</span><span class="marked0"><a name="line400" />400
|
1020
|
-
</span><span class="
|
1021
|
-
</span><span class="inferred0"><a name="line402" />402
|
1022
|
-
</span><span class="
|
1023
|
-
</span><span class="marked0"><a name="line404" />404
|
1024
|
-
</span><span class="marked1"><a name="line405" />405 MetaGen.add_method( self, "#{ae}
|
1025
|
-
</span><span class="
|
1026
|
-
</span><span class="inferred1"><a name="line407" />407
|
1027
|
-
</span><span class="inferred0"><a name="line408" />408
|
1028
|
-
</span><span class="inferred1"><a name="line409" />409
|
1029
|
-
</span><span class="inferred0"><a name="line410" />410
|
1030
|
-
</span><span class="inferred1"><a name="line411" />411 #
|
1031
|
-
</span><span class="inferred0"><a name="line412" />412 #
|
1032
|
-
</span><span class="
|
1033
|
-
</span><span class="
|
1034
|
-
</span><span class="
|
1035
|
-
</span><span class="
|
1036
|
-
</span><span class="
|
1037
|
-
</span><span class="marked0"><a name="line418" />418
|
1038
|
-
</span><span class="
|
1039
|
-
</span><span class="inferred0"><a name="line420" />420
|
1040
|
-
</span><span class="
|
1041
|
-
</span><span class="marked0"><a name="line422" />422
|
1042
|
-
</span><span class="marked1"><a name="line423" />423 add_instance_variable(tr, "#{ae.downcase}
|
1043
|
-
</span><span class="
|
1044
|
-
</span><span class="inferred1"><a name="line425" />425
|
1045
|
-
</span><span class="inferred0"><a name="line426" />426
|
1046
|
-
</span><span class="
|
1047
|
-
</span><span class="
|
1048
|
-
</span><span class="
|
1049
|
-
</span><span class="marked0"><a name="line430" />430
|
1050
|
-
</span><span class="
|
1051
|
-
</span><span class="inferred0"><a name="line432" />432
|
1052
|
-
</span><span class="
|
1053
|
-
</span><span class="marked0"><a name="line434" />434
|
1054
|
-
</span><span class="marked1"><a name="line435" />435 eval('@' + ae.downcase + '
|
1055
|
-
</span><span class="
|
1056
|
-
</span><span class="inferred1"><a name="line437" />437
|
1057
|
-
</span><span class="inferred0"><a name="line438" />438
|
1058
|
-
</span><span class="
|
1059
|
-
</span><span class="
|
1060
|
-
</span><span class="inferred1"><a name="line441" />441
|
1061
|
-
</span><span class="
|
1062
|
-
</span><span class="
|
1063
|
-
</span><span class="
|
1064
|
-
</span><span class="
|
1065
|
-
</span><span class="
|
1066
|
-
</span><span class="
|
1067
|
-
</span><span class="
|
1068
|
-
</span><span class="marked1"><a name="line449" />449
|
1069
|
-
</span><span class="marked0"><a name="line450" />450 el.
|
1070
|
-
</span><span class="marked1"><a name="line451" />451
|
1071
|
-
</span><span class="
|
1072
|
-
</span><span class="inferred1"><a name="line453" />453
|
1073
|
-
</span><span class="inferred0"><a name="line454" />454
|
1074
|
-
</span><span class="
|
1075
|
-
</span><span class="
|
1076
|
-
</span><span class="
|
1077
|
-
</span><span class="marked0"><a name="line458" />458
|
1078
|
-
</span><span class="marked1"><a name="line459" />459 el.
|
1079
|
-
</span><span class="marked0"><a name="line460" />460 el.
|
1080
|
-
</span><span class="marked1"><a name="line461" />461
|
1081
|
-
</span><span class="
|
1082
|
-
</span><span class="inferred1"><a name="line463" />463
|
1083
|
-
</span><span class="inferred0"><a name="line464" />464
|
1084
|
-
</span><span class="
|
1085
|
-
</span><span class="
|
1086
|
-
</span><span class="inferred1"><a name="line467" />467
|
1087
|
-
</span><span class="inferred0"><a name="line468" />468
|
1088
|
-
</span><span class="
|
1089
|
-
</span><span class="marked0"><a name="line470" />470
|
1090
|
-
</span><span class="
|
1091
|
-
</span><span class="
|
1092
|
-
</span><span class="marked1"><a name="line473" />473
|
1093
|
-
</span><span class="
|
1094
|
-
</span><span class="
|
1095
|
-
</span><span class="
|
1096
|
-
</span><span class="inferred1"><a name="line477" />477
|
1097
|
-
</span><span class="
|
1098
|
-
</span><span class="
|
1099
|
-
</span><span class="inferred0"><a name="line480" />480
|
714
|
+
</span><span class="marked1"><a name="line95" /> 95 RDF_RDOC = 'Creates a RDF feed from the XSPF document. This method makes use of the XSPF to RDF XSLT transformation by Libby Miller.'
|
715
|
+
</span><span class="inferred0"><a name="line96" /> 96
|
716
|
+
</span><span class="marked1"><a name="line97" /> 97 ATTRIBUTES.each do |attrib|
|
717
|
+
</span><span class="marked0"><a name="line98" /> 98 MetaGen.add_method(self, attrib, "@xspf.#{attrib}", eval(attrib.upcase + '_RDOC').to_s )
|
718
|
+
</span><span class="inferred1"><a name="line99" /> 99 end
|
719
|
+
</span><span class="inferred0"><a name="line100" />100
|
720
|
+
</span><span class="marked1"><a name="line101" />101 OUTPUT_FORMATS.each do |format|
|
721
|
+
</span><span class="marked0"><a name="line102" />102 MetaGen.add_output_format(self, format, eval(format.upcase + '_RDOC').to_s )
|
722
|
+
</span><span class="inferred1"><a name="line103" />103 end
|
723
|
+
</span><span class="inferred0"><a name="line104" />104
|
724
|
+
</span><span class="inferred1"><a name="line105" />105 #:startdoc:
|
725
|
+
</span><span class="inferred0"><a name="line106" />106
|
726
|
+
</span><span class="inferred1"><a name="line107" />107 # Creates a XSPF object from a file or string (parse mode) or from a hash or nil (generation mode).
|
727
|
+
</span><span class="inferred0"><a name="line108" />108 #
|
728
|
+
</span><span class="inferred1"><a name="line109" />109 # Possible keys in the hash: :version, :encoding
|
729
|
+
</span><span class="marked0"><a name="line110" />110 def initialize(source = nil)
|
730
|
+
</span><span class="marked1"><a name="line111" />111 if ( source.nil? || source.instance_of?(Hash) ) then
|
731
|
+
</span><span class="marked0"><a name="line112" />112 @version = if source.nil? || !source.has_key?(:version)
|
732
|
+
</span><span class="marked1"><a name="line113" />113 '1.0'
|
733
|
+
</span><span class="inferred0"><a name="line114" />114 else
|
734
|
+
</span><span class="marked1"><a name="line115" />115 source[:version]
|
735
|
+
</span><span class="inferred0"><a name="line116" />116 end
|
736
|
+
</span><span class="marked1"><a name="line117" />117 @encoding = if source.nil? || !source.has_key?(:encoding)
|
737
|
+
</span><span class="marked0"><a name="line118" />118 'UTF-8'
|
738
|
+
</span><span class="inferred1"><a name="line119" />119 else
|
739
|
+
</span><span class="marked0"><a name="line120" />120 source[:encoding]
|
740
|
+
</span><span class="inferred1"><a name="line121" />121 end
|
741
|
+
</span><span class="marked0"><a name="line122" />122 @playlist = nil
|
742
|
+
</span><span class="marked1"><a name="line123" />123 @playlist = if !source.nil? && source.has_key?(:playlist) then
|
743
|
+
</span><span class="marked0"><a name="line124" />124 if source[:playlist].instance_of?(XSPF::Playlist)
|
744
|
+
</span><span class="marked1"><a name="line125" />125 source[:playlist]
|
745
|
+
</span><span class="inferred0"><a name="line126" />126 else
|
746
|
+
</span><span class="marked1"><a name="line127" />127 raise(TypeError, 'You must pass a file/string (parsing mode) or a hash/nothing (generator mode) as argument to XSPF#new')
|
747
|
+
</span><span class="inferred0"><a name="line128" />128 end
|
748
|
+
</span><span class="inferred1"><a name="line129" />129 end
|
749
|
+
</span><span class="inferred0"><a name="line130" />130
|
750
|
+
</span><span class="marked1"><a name="line131" />131 elsif ( source.instance_of?(File) || source.instance_of?(String) ) then
|
751
|
+
</span><span class="marked0"><a name="line132" />132 @xspf = REXML::Document.new(source)
|
752
|
+
</span><span class="marked1"><a name="line133" />133 ATTRIBUTES.each do |attrib|
|
753
|
+
</span><span class="marked0"><a name="line134" />134 eval('@' + attrib + '= parse_' + attrib)
|
754
|
+
</span><span class="inferred1"><a name="line135" />135 end
|
755
|
+
</span><span class="inferred0"><a name="line136" />136
|
756
|
+
</span><span class="marked1"><a name="line137" />137 @playlist = XSPF::Playlist.new(self)
|
757
|
+
</span><span class="inferred0"><a name="line138" />138
|
758
|
+
</span><span class="inferred1"><a name="line139" />139 else
|
759
|
+
</span><span class="marked0"><a name="line140" />140 raise(TypeError, 'You must pass a file/string (parsing mode) or a hash/nothing (generator mode) as argument to XSPF#new')
|
760
|
+
</span><span class="inferred1"><a name="line141" />141 end
|
761
|
+
</span><span class="marked0"><a name="line142" />142 end
|
762
|
+
</span><span class="inferred1"><a name="line143" />143
|
763
|
+
</span><span class="inferred0"><a name="line144" />144 # A XSPF::Playlist object
|
764
|
+
</span><span class="marked1"><a name="line145" />145 def playlist
|
765
|
+
</span><span class="marked0"><a name="line146" />146 @playlist
|
766
|
+
</span><span class="marked1"><a name="line147" />147 end
|
767
|
+
</span><span class="inferred0"><a name="line148" />148
|
768
|
+
</span><span class="marked1"><a name="line149" />149 def playlist=(value)
|
769
|
+
</span><span class="marked0"><a name="line150" />150 raise(TypeError, 'The playlist must be an instance of XSPF::Playlist') unless value.instance_of?(XSPF::Playlist)
|
770
|
+
</span><span class="marked1"><a name="line151" />151 @playlist = value
|
771
|
+
</span><span class="inferred0"><a name="line152" />152 end
|
772
|
+
</span><span class="inferred1"><a name="line153" />153
|
773
|
+
</span><span class="inferred0"><a name="line154" />154 # Exports the XSPF object to XML
|
774
|
+
</span><span class="marked1"><a name="line155" />155 def to_xml
|
775
|
+
</span><span class="marked0"><a name="line156" />156 xml = REXML::Document.new
|
776
|
+
</span><span class="marked1"><a name="line157" />157 xml << REXML::XMLDecl.new(@version, @encoding)
|
777
|
+
</span><span class="marked0"><a name="line158" />158 xml << REXML::Document.new(@playlist.to_xml) unless @playlist.nil?
|
778
|
+
</span><span class="marked1"><a name="line159" />159 xml.to_s
|
779
|
+
</span><span class="inferred0"><a name="line160" />160 end
|
780
|
+
</span><span class="inferred1"><a name="line161" />161
|
781
|
+
</span><span class="inferred0"><a name="line162" />162 # The <playlist> section of the XSPF document (outputs XML code). This method is only used while parsing.
|
782
|
+
</span><span class="marked1"><a name="line163" />163 protected
|
783
|
+
</span><span class="marked0"><a name="line164" />164 def playlist_xml
|
784
|
+
</span><span class="marked1"><a name="line165" />165 @xspf.root
|
785
|
+
</span><span class="marked0"><a name="line166" />166 end
|
786
|
+
</span><span class="inferred1"><a name="line167" />167
|
787
|
+
</span><span class="inferred0"><a name="line168" />168 end
|
788
|
+
</span><span class="inferred1"><a name="line169" />169
|
789
|
+
</span><span class="marked0"><a name="line170" />170 class XSPF::Playlist < XSPF
|
790
|
+
</span><span class="inferred1"><a name="line171" />171
|
791
|
+
</span><span class="marked0"><a name="line172" />172 attr_reader :playlist
|
792
|
+
</span><span class="inferred1"><a name="line173" />173
|
793
|
+
</span><span class="inferred0"><a name="line174" />174 #:stopdoc:
|
794
|
+
</span><span class="marked1"><a name="line175" />175 ATTRIBUTES = %w{ xmlns version }
|
795
|
+
</span><span class="marked0"><a name="line176" />176 ELEMENTS = %w{ title creator annotation info location identifier image date license attribution extension }
|
796
|
+
</span><span class="marked1"><a name="line177" />177 ATTRIBUTE_AND_ELEMENT = %w{ link meta }
|
797
|
+
</span><span class="marked0"><a name="line178" />178 ATTRIBUTION_CHILD_ELEMENTS = %w{ location identifier }
|
798
|
+
</span><span class="marked1"><a name="line179" />179 EXTENSION_CHILD_ELEMENTS = %w{ application content }
|
799
|
+
</span><span class="inferred0"><a name="line180" />180
|
800
|
+
</span><span class="marked1"><a name="line181" />181 XMLNS_RDOC = 'The XML namespace. It must be http://xspf.org/ns/0/ for a valid XSPF document.'
|
801
|
+
</span><span class="marked0"><a name="line182" />182 XMLNS_DEFAULT = 'http://xspf.org/ns/0/'
|
802
|
+
</span><span class="marked1"><a name="line183" />183 VERSION_RDOC = 'The XSPF version. It may be 0 or 1, although 1 is strongly advised.'
|
803
|
+
</span><span class="marked0"><a name="line184" />184 VERSION_DEFAULT = '1'
|
804
|
+
</span><span class="marked1"><a name="line185" />185 TITLE_RDOC = 'A human-readable title for the playlist. xspf:playlist elements MAY contain exactly one.'
|
805
|
+
</span><span class="marked0"><a name="line186" />186 CREATOR_RDOC = 'Human-readable name of the entity (author, authors, group, company, etc) that authored the playlist. XSPF::Playlist objects MAY contain exactly one.'
|
806
|
+
</span><span class="marked1"><a name="line187" />187 ANNOTATION_RDOC = 'A human-readable comment on the playlist. This is character data, not HTML, and it may not contain markup. XSPF::Playlist objects elements MAY contain exactly one.'
|
807
|
+
</span><span class="marked0"><a name="line188" />188 INFO_RDOC = 'URL of a web page to find out more about this playlist. Likely to be homepage of the author, and would be used to find out more about the author and to find more playlists by the author. XSPF::Playlist objects MAY contain exactly one.'
|
808
|
+
</span><span class="marked1"><a name="line189" />189 LOCATION_RDOC = 'Source URL for this playlist. XSPF::Playlist objects MAY contain exactly one.'
|
809
|
+
</span><span class="marked0"><a name="line190" />190 IDENTIFIER_RDOC = 'Canonical ID for this playlist. Likely to be a hash or other location-independent name. MUST be a legal URN. XSPF::Playlist objects MAY contain exactly one.'
|
810
|
+
</span><span class="marked1"><a name="line191" />191 IMAGE_RDOC = 'URL of an image to display if XSPF::Playlist#image return nil. XSPF::Playlist objects MAY contain exactly one.'
|
811
|
+
</span><span class="marked0"><a name="line192" />192 DATE_RDOC = 'Creation date (not last-modified date) of the playlist, formatted as a XML schema dateTime. XSPF::Playlist objects MAY contain exactly one.'
|
812
|
+
</span><span class="marked1"><a name="line193" />193 LICENSE_RDOC = 'URL of a resource that describes the license under which this playlist was released. XSPF::Playlist objects MAY contain zero or one license element.'
|
813
|
+
</span><span class="marked0"><a name="line194" />194 ATTRIBUTION_RDOC = 'An ordered list of URIs. The purpose is to satisfy licenses allowing modification but requiring attribution. If you modify such a playlist, move its XSPF::Playlist#location or XSPF::Playlist#identifier element to the top of the items in the XSPF::Playlist#attribution element. XSPF::Playlist objects MAY contain exactly one attribution element. Please note that currently XSPF for Ruby does not parse the contents of XSPF::Playlist#attribution.'
|
814
|
+
</span><span class="marked1"><a name="line195" />195 EXTENSION_RDOC = 'The extension element allows non-XSPF XML to be included in XSPF documents without breaking XSPF validation. The purpose is to allow nested XML, which the meta and link elements do not. XSPF::Playlist objects MAY contain zero or more extension elements but currently XSPF for Ruby returns only the first one.'
|
815
|
+
</span><span class="marked0"><a name="line196" />196 LINK_REL_RDOC = 'The link element allows non-XSPF web resources to be included in XSPF documents without breaking XSPF validation. A valid _link_ element has a _rel_ attribute and a _content_ element, obtained with XSPF::Playlist#link_rel and XSPF::Playlist#link_content respectively. XSPF::Playlist objects MAY contain zero or more link elements, but currently XSPF for Ruby returns only the first one.'
|
816
|
+
</span><span class="marked1"><a name="line197" />197 LINK_CONTENT_RDOC = 'The link element allows non-XSPF web resources to be included in XSPF documents without breaking XSPF validation. A valid _link_ element has a _rel_ attribute and a _content_ element, obtained with XSPF::Playlist#link_rel and XSPF::Playlist#link_content respectively. XSPF::Playlist objects MAY contain zero or more meta elements, but currently XSPF for Ruby returns only the first one.'
|
817
|
+
</span><span class="marked0"><a name="line198" />198 META_REL_RDOC = 'The meta element allows non-XSPF metadata to be included in XSPF documents without breaking XSPF validation. A valid _meta_ element has a _rel_ attribute and a _content_ element, obtained with XSPF::Playlist#meta_rel and XSPF::Playlist#meta_content respectively. XSPF::Playlist objects MAY contain zero or more meta elements, but currently XSPF for Ruby returns only the first one.'
|
818
|
+
</span><span class="marked1"><a name="line199" />199 META_CONTENT_RDOC = 'The meta element allows non-XSPF metadata to be included in XSPF documents without breaking XSPF validation. A valid _meta_ element has a _rel_ attribute and a _content_ element, obtained with XSPF::Playlist#meta_rel and XSPF::Playlist#meta_content respectively. XSPF::Playlist objects MAY contain zero or more meta elements, but currently XSPF for Ruby returns only the first one.'
|
819
|
+
</span><span class="inferred0"><a name="line200" />200
|
820
|
+
</span><span class="inferred1"><a name="line201" />201 # FIXME Currently we only return the first "link"
|
821
|
+
</span><span class="inferred0"><a name="line202" />202 # FIXME Currently we only return the first "meta"
|
822
|
+
</span><span class="inferred1"><a name="line203" />203 # FIXME Currently we only return the first "extension"
|
823
|
+
</span><span class="inferred0"><a name="line204" />204 # TODO Parse "attribution"
|
824
|
+
</span><span class="inferred1"><a name="line205" />205 # TODO Parse "extension"
|
825
|
+
</span><span class="inferred0"><a name="line206" />206
|
826
|
+
</span><span class="inferred1"><a name="line207" />207 # Returns the value of the attribute or nil if the attribute is not present
|
827
|
+
</span><span class="marked0"><a name="line208" />208 ATTRIBUTES.each do |attrib|
|
828
|
+
</span><span class="marked1"><a name="line209" />209 MetaGen.add_method( self, attrib, "@playlist.root.attributes['#{attrib}']", eval(attrib.upcase + '_RDOC').to_s )
|
829
|
+
</span><span class="inferred0"><a name="line210" />210 end
|
830
|
+
</span><span class="inferred1"><a name="line211" />211
|
831
|
+
</span><span class="marked0"><a name="line212" />212 ELEMENTS.each do |element|
|
832
|
+
</span><span class="marked1"><a name="line213" />213 MetaGen.add_method( self, element, "@playlist.elements['#{element}'].text", eval(element.upcase + '_RDOC').to_s )
|
833
|
+
</span><span class="inferred0"><a name="line214" />214 end
|
834
|
+
</span><span class="inferred1"><a name="line215" />215
|
835
|
+
</span><span class="marked0"><a name="line216" />216 ATTRIBUTE_AND_ELEMENT.each do |ae|
|
836
|
+
</span><span class="marked1"><a name="line217" />217 MetaGen.add_method( self, "#{ae}_content", "@playlist.elements['#{ae}'].text", eval(ae.upcase + '_CONTENT_RDOC').to_s )
|
837
|
+
</span><span class="marked0"><a name="line218" />218 MetaGen.add_method( self, "#{ae}_rel", "@playlist.elements['#{ae}'].attributes['rel']", eval(ae.upcase + '_REL_RDOC').to_s )
|
838
|
+
</span><span class="inferred1"><a name="line219" />219 end
|
839
|
+
</span><span class="inferred0"><a name="line220" />220
|
840
|
+
</span><span class="inferred1"><a name="line221" />221 #:startdoc:
|
841
|
+
</span><span class="inferred0"><a name="line222" />222
|
842
|
+
</span><span class="inferred1"><a name="line223" />223 # Creates a XSPF::Playlist from a XSPF document (parse mode) or from a hash of values (generation mode)
|
843
|
+
</span><span class="inferred0"><a name="line224" />224 #
|
844
|
+
</span><span class="inferred1"><a name="line225" />225 # Possible keys in the hash: :xmlns, :version, :title, :creator, :annotation, :info, :location, :identifier, :image, :date, :license, :attribution, :extension, :link_rel, :link_content, :meta_rel, :meta_content
|
845
|
+
</span><span class="marked0"><a name="line226" />226 def initialize(source = nil)
|
846
|
+
</span><span class="inferred1"><a name="line227" />227
|
847
|
+
</span><span class="marked0"><a name="line228" />228 if ( source.instance_of?(Hash) || source.nil? ) then
|
848
|
+
</span><span class="inferred1"><a name="line229" />229
|
849
|
+
</span><span class="marked0"><a name="line230" />230 ATTRIBUTES.each do |attrib|
|
850
|
+
</span><span class="marked1"><a name="line231" />231 add_instance_variable(source, attrib)
|
851
|
+
</span><span class="inferred0"><a name="line232" />232 end
|
852
|
+
</span><span class="inferred1"><a name="line233" />233
|
853
|
+
</span><span class="marked0"><a name="line234" />234 ELEMENTS.each do |element|
|
854
|
+
</span><span class="marked1"><a name="line235" />235 add_instance_variable(source, element)
|
855
|
+
</span><span class="inferred0"><a name="line236" />236 end
|
856
|
+
</span><span class="inferred1"><a name="line237" />237
|
857
|
+
</span><span class="marked0"><a name="line238" />238 ATTRIBUTE_AND_ELEMENT.each do |ae|
|
858
|
+
</span><span class="marked1"><a name="line239" />239 add_instance_variable(source, "#{ae}_content" )
|
859
|
+
</span><span class="marked0"><a name="line240" />240 add_instance_variable(source, "#{ae}_rel" )
|
860
|
+
</span><span class="inferred1"><a name="line241" />241 end
|
861
|
+
</span><span class="inferred0"><a name="line242" />242
|
862
|
+
</span><span class="marked1"><a name="line243" />243 @tracklist = if ( !source.nil? && source.has_key?(:tracklist) && source[:tracklist].instance_of?(XSPF::Tracklist) )
|
863
|
+
</span><span class="marked0"><a name="line244" />244 source[:tracklist]
|
864
|
+
</span><span class="inferred1"><a name="line245" />245 else
|
865
|
+
</span><span class="marked0"><a name="line246" />246 nil
|
866
|
+
</span><span class="inferred1"><a name="line247" />247 end
|
867
|
+
</span><span class="inferred0"><a name="line248" />248
|
868
|
+
</span><span class="marked1"><a name="line249" />249 elsif source.instance_of?(XSPF) then
|
869
|
+
</span><span class="inferred0"><a name="line250" />250
|
870
|
+
</span><span class="marked1"><a name="line251" />251 @playlist = source.playlist_xml
|
871
|
+
</span><span class="inferred0"><a name="line252" />252
|
872
|
+
</span><span class="marked1"><a name="line253" />253 ATTRIBUTES.each do |attrib|
|
873
|
+
</span><span class="marked0"><a name="line254" />254 eval('@' + attrib.downcase + '= parse_' + attrib.downcase)
|
874
|
+
</span><span class="inferred1"><a name="line255" />255 end
|
875
|
+
</span><span class="inferred0"><a name="line256" />256
|
876
|
+
</span><span class="marked1"><a name="line257" />257 ELEMENTS.each do |element|
|
877
|
+
</span><span class="marked0"><a name="line258" />258 eval('@' + element.downcase + '= parse_' + element.downcase)
|
878
|
+
</span><span class="inferred1"><a name="line259" />259 end
|
879
|
+
</span><span class="inferred0"><a name="line260" />260
|
880
|
+
</span><span class="marked1"><a name="line261" />261 ATTRIBUTE_AND_ELEMENT.each do |ae|
|
881
|
+
</span><span class="marked0"><a name="line262" />262 eval('@' + ae.downcase + '_content = parse_' + ae.downcase + '_content')
|
882
|
+
</span><span class="marked1"><a name="line263" />263 eval('@' + ae.downcase + '_rel = parse_' + ae.downcase + '_rel')
|
883
|
+
</span><span class="inferred0"><a name="line264" />264 end
|
884
|
+
</span><span class="inferred1"><a name="line265" />265
|
885
|
+
</span><span class="marked0"><a name="line266" />266 @tracklist = XSPF::Tracklist.new(self)
|
886
|
+
</span><span class="inferred1"><a name="line267" />267
|
887
|
+
</span><span class="inferred0"><a name="line268" />268 else
|
888
|
+
</span><span class="marked1"><a name="line269" />269 raise(TypeError, 'You must pass a XSPF object (parsing mode) or a hash (generator mode) as argument to XSPF::Playlist#new')
|
889
|
+
</span><span class="inferred0"><a name="line270" />270 end
|
890
|
+
</span><span class="inferred1"><a name="line271" />271
|
891
|
+
</span><span class="marked0"><a name="line272" />272 end
|
892
|
+
</span><span class="inferred1"><a name="line273" />273
|
893
|
+
</span><span class="inferred0"><a name="line274" />274 # A XSPF::Tracklist object
|
894
|
+
</span><span class="marked1"><a name="line275" />275 def tracklist
|
895
|
+
</span><span class="marked0"><a name="line276" />276 @tracklist
|
896
|
+
</span><span class="marked1"><a name="line277" />277 end
|
897
|
+
</span><span class="inferred0"><a name="line278" />278
|
898
|
+
</span><span class="marked1"><a name="line279" />279 def tracklist=(value)
|
899
|
+
</span><span class="marked0"><a name="line280" />280 raise(TypeError, 'The tracklist must be an instance of XSPF::Tracklist') unless value.instance_of?(XSPF::Tracklist)
|
900
|
+
</span><span class="marked1"><a name="line281" />281 @tracklist = value
|
901
|
+
</span><span class="inferred0"><a name="line282" />282 end
|
902
|
+
</span><span class="inferred1"><a name="line283" />283
|
903
|
+
</span><span class="marked0"><a name="line284" />284 alias :<< :tracklist=
|
904
|
+
</span><span class="inferred1"><a name="line285" />285
|
905
|
+
</span><span class="inferred0"><a name="line286" />286 # Exports the XSPF::Playlist to XML (only the <playlist> section)
|
906
|
+
</span><span class="marked1"><a name="line287" />287 def to_xml
|
907
|
+
</span><span class="inferred0"><a name="line288" />288
|
908
|
+
</span><span class="marked1"><a name="line289" />289 xml = REXML::Element.new('playlist')
|
909
|
+
</span><span class="inferred0"><a name="line290" />290
|
910
|
+
</span><span class="marked1"><a name="line291" />291 ATTRIBUTES.each do |attrib|
|
911
|
+
</span><span class="inferred0"><a name="line292" />292 # TODO Sure there is a nicer way to do evaluate this condition...
|
912
|
+
</span><span class="marked1"><a name="line293" />293 unless eval('@' + attrib.downcase + '.nil?')
|
913
|
+
</span><span class="marked0"><a name="line294" />294 xml.attributes[attrib] = eval('@' + attrib.downcase)
|
914
|
+
</span><span class="inferred1"><a name="line295" />295 end
|
915
|
+
</span><span class="inferred0"><a name="line296" />296 end
|
916
|
+
</span><span class="inferred1"><a name="line297" />297
|
917
|
+
</span><span class="marked0"><a name="line298" />298 ELEMENTS.each do |element|
|
918
|
+
</span><span class="inferred1"><a name="line299" />299 # TODO Sure there is a nicer way to do evaluate this condition...
|
919
|
+
</span><span class="marked0"><a name="line300" />300 unless eval('@' + element.downcase + '.nil?')
|
920
|
+
</span><span class="marked1"><a name="line301" />301 el = REXML::Element.new(element)
|
921
|
+
</span><span class="marked0"><a name="line302" />302 el.add_text( eval('@' + element.downcase) )
|
922
|
+
</span><span class="marked1"><a name="line303" />303 xml.add_element(el)
|
923
|
+
</span><span class="inferred0"><a name="line304" />304 end
|
924
|
+
</span><span class="inferred1"><a name="line305" />305 end
|
925
|
+
</span><span class="inferred0"><a name="line306" />306
|
926
|
+
</span><span class="marked1"><a name="line307" />307 ATTRIBUTE_AND_ELEMENT.each do |ae|
|
927
|
+
</span><span class="inferred0"><a name="line308" />308 # TODO Sure there is a nicer way to do evaluate this condition...
|
928
|
+
</span><span class="marked1"><a name="line309" />309 unless eval('@' + ae.downcase + '_rel.nil? && @'+ ae.downcase + '_content.nil?')
|
929
|
+
</span><span class="marked0"><a name="line310" />310 el = REXML::Element.new(ae.downcase)
|
930
|
+
</span><span class="marked1"><a name="line311" />311 el.add_attribute('rel', eval('@' + ae.downcase + '_rel') )
|
931
|
+
</span><span class="marked0"><a name="line312" />312 el.add_text( eval('@' + ae.downcase + '_content') )
|
932
|
+
</span><span class="marked1"><a name="line313" />313 xml.add_element(el)
|
933
|
+
</span><span class="inferred0"><a name="line314" />314 end
|
934
|
+
</span><span class="inferred1"><a name="line315" />315 end
|
935
|
+
</span><span class="inferred0"><a name="line316" />316
|
936
|
+
</span><span class="marked1"><a name="line317" />317 xml << REXML::Document.new(@tracklist.to_xml)
|
937
|
+
</span><span class="inferred0"><a name="line318" />318
|
938
|
+
</span><span class="marked1"><a name="line319" />319 xml.to_s
|
939
|
+
</span><span class="inferred0"><a name="line320" />320
|
940
|
+
</span><span class="inferred1"><a name="line321" />321 end
|
941
|
+
</span><span class="inferred0"><a name="line322" />322
|
942
|
+
</span><span class="inferred1"><a name="line323" />323 # The <trackList> section of the XSPF document (outputs XML code). This method is only used while parsing.
|
943
|
+
</span><span class="marked0"><a name="line324" />324 protected
|
944
|
+
</span><span class="marked1"><a name="line325" />325 def tracklist_xml
|
945
|
+
</span><span class="marked0"><a name="line326" />326 @playlist.elements['trackList']
|
946
|
+
</span><span class="marked1"><a name="line327" />327 end
|
947
|
+
</span><span class="inferred0"><a name="line328" />328
|
948
|
+
</span><span class="marked1"><a name="line329" />329 private
|
949
|
+
</span><span class="marked0"><a name="line330" />330 def add_instance_variable(hash, var)
|
950
|
+
</span><span class="inferred1"><a name="line331" />331
|
951
|
+
</span><span class="marked0"><a name="line332" />332 if !hash.nil? && hash.has_key?(var.downcase.to_sym)
|
952
|
+
</span><span class="marked1"><a name="line333" />333 eval('@' + var.downcase + ' = \'' + hash[var.downcase.to_sym] + '\'')
|
953
|
+
</span><span class="inferred0"><a name="line334" />334 else
|
954
|
+
</span><span class="marked1"><a name="line335" />335 eval('@' + var.downcase + ' = defined?(' + var.upcase + '_DEFAULT) ? ' + var.upcase + '_DEFAULT : nil')
|
955
|
+
</span><span class="inferred0"><a name="line336" />336 end
|
956
|
+
</span><span class="inferred1"><a name="line337" />337
|
957
|
+
</span><span class="marked0"><a name="line338" />338 end
|
958
|
+
</span><span class="inferred1"><a name="line339" />339
|
959
|
+
</span><span class="inferred0"><a name="line340" />340 end
|
960
|
+
</span><span class="inferred1"><a name="line341" />341
|
961
|
+
</span><span class="marked0"><a name="line342" />342 class XSPF::Tracklist < XSPF::Playlist
|
962
|
+
</span><span class="inferred1"><a name="line343" />343
|
963
|
+
</span><span class="marked0"><a name="line344" />344 attr_reader :tracklist
|
964
|
+
</span><span class="inferred1"><a name="line345" />345
|
965
|
+
</span><span class="inferred0"><a name="line346" />346 # Creates a XSPF::Tracklist from a XSPF::Playlist (parse mode) or without parameters (generation mode)
|
966
|
+
</span><span class="marked1"><a name="line347" />347 def initialize(playlist=nil)
|
967
|
+
</span><span class="marked0"><a name="line348" />348 if (playlist.instance_of?(Hash) || playlist.nil?) then
|
968
|
+
</span><span class="marked1"><a name="line349" />349 @tracklist = ''
|
969
|
+
</span><span class="marked0"><a name="line350" />350 @tracks = []
|
970
|
+
</span><span class="inferred1"><a name="line351" />351 else
|
971
|
+
</span><span class="marked0"><a name="line352" />352 @tracklist = playlist.tracklist_xml
|
972
|
+
</span><span class="marked1"><a name="line353" />353 @tracks = @tracklist.elements.collect { |track| XSPF::Track.new(track) }
|
973
|
+
</span><span class="inferred0"><a name="line354" />354 end
|
974
|
+
</span><span class="marked1"><a name="line355" />355 end
|
975
|
+
</span><span class="inferred0"><a name="line356" />356
|
976
|
+
</span><span class="inferred1"><a name="line357" />357 # Returns an array XSPF::Track objects
|
977
|
+
</span><span class="marked0"><a name="line358" />358 def tracks
|
978
|
+
</span><span class="marked1"><a name="line359" />359 @tracks
|
979
|
+
</span><span class="marked0"><a name="line360" />360 end
|
980
|
+
</span><span class="inferred1"><a name="line361" />361
|
981
|
+
</span><span class="inferred0"><a name="line362" />362 # Adds a new XSPF::Track to the XSPF::Tracklist
|
982
|
+
</span><span class="marked1"><a name="line363" />363 def <<(track)
|
983
|
+
</span><span class="marked0"><a name="line364" />364 @tracks << track
|
984
|
+
</span><span class="marked1"><a name="line365" />365 end
|
985
|
+
</span><span class="inferred0"><a name="line366" />366
|
986
|
+
</span><span class="inferred1"><a name="line367" />367 # Exports the XSPF::Tracklist to XML (only the <trackList> section)
|
987
|
+
</span><span class="marked0"><a name="line368" />368 def to_xml
|
988
|
+
</span><span class="marked1"><a name="line369" />369 xml = REXML::Element.new('trackList')
|
989
|
+
</span><span class="marked0"><a name="line370" />370 @tracks.each { |t| xml << REXML::Document.new(t.to_xml) }
|
990
|
+
</span><span class="marked1"><a name="line371" />371 xml.to_s
|
991
|
+
</span><span class="inferred0"><a name="line372" />372 end
|
992
|
+
</span><span class="inferred1"><a name="line373" />373
|
993
|
+
</span><span class="inferred0"><a name="line374" />374 end
|
994
|
+
</span><span class="inferred1"><a name="line375" />375
|
995
|
+
</span><span class="marked0"><a name="line376" />376 class XSPF::Track
|
996
|
+
</span><span class="inferred1"><a name="line377" />377
|
997
|
+
</span><span class="marked0"><a name="line378" />378 attr_reader :track
|
998
|
+
</span><span class="inferred1"><a name="line379" />379
|
999
|
+
</span><span class="inferred0"><a name="line380" />380 #:stopdoc:
|
1000
|
+
</span><span class="marked1"><a name="line381" />381 ELEMENTS = %w{ location identifier title creator annotation info image album trackNum duration extension }
|
1001
|
+
</span><span class="marked0"><a name="line382" />382 ATTRIBUTE_AND_ELEMENT = %w{ link meta }
|
1002
|
+
</span><span class="inferred1"><a name="line383" />383
|
1003
|
+
</span><span class="marked0"><a name="line384" />384 LOCATION_RDOC = 'URL of resource to be rendered. Probably an audio resource, but MAY be any type of resource with a well-known duration, such as video, a SMIL document, or an XSPF document. The duration of the resource defined in this element defines the duration of rendering. XSPF::Track objects MAY contain zero or more location elements, but a user-agent MUST NOT render more than one of the named resources. Currently, XSPF for Ruby returns only the first location.'
|
1004
|
+
</span><span class="marked1"><a name="line385" />385 IDENTIFIER_RDOC = 'Canonical ID for this resource. Likely to be a hash or other location-independent name, such as a MusicBrainz identifier or isbn URN (if there existed isbn numbers for audio). MUST be a legal URN. XSPF::Track objects elements MAY contain zero or more identifier elements, but currently XSPF for Ruby returns only the first one.'
|
1005
|
+
</span><span class="marked0"><a name="line386" />386 TITLE_RDOC = 'Human-readable name of the track that authored the resource which defines the duration of track rendering. This value is primarily for fuzzy lookups, though a user-agent may display it. XSPF::Track objects MAY contain exactly one.'
|
1006
|
+
</span><span class="marked1"><a name="line387" />387 CREATOR_RDOC = 'Human-readable name of the entity (author, authors, group, company, etc) that authored the resource which defines the duration of track rendering. This value is primarily for fuzzy lookups, though a user-agent may display it. XSPF::Track objects MAY contain exactly one.'
|
1007
|
+
</span><span class="marked0"><a name="line388" />388 ANNOTATION_RDOC = 'A human-readable comment on the track. This is character data, not HTML, and it may not contain markup. XSPF::Track objects MAY contain exactly one.'
|
1008
|
+
</span><span class="marked1"><a name="line389" />389 INFO_RDOC = 'URL of a place where this resource can be bought or more info can be found.'
|
1009
|
+
</span><span class="marked0"><a name="line390" />390 IMAGE_RDOC = 'URL of an image to display for the duration of the track. XSPF::Track objects MAY contain exactly one.'
|
1010
|
+
</span><span class="marked1"><a name="line391" />391 ALBUM_RDOC = 'Human-readable name of the collection from which the resource which defines the duration of track rendering comes. For a song originally published as a part of a CD or LP, this would be the title of the original release. This value is primarily for fuzzy lookups, though a user-agent may display it. XSPF::Track objects MAY contain exactly one.'
|
1011
|
+
</span><span class="marked0"><a name="line392" />392 TRACKNUM_RDOC = 'Integer with value greater than zero giving the ordinal position of the media on the XSPF::Track#album. This value is primarily for fuzzy lookups, though a user-agent may display it. XSPF::Track objects MAY contain exactly one. It MUST be a valid XML Schema nonNegativeInteger.'
|
1012
|
+
</span><span class="marked1"><a name="line393" />393 DURATION_RDOC = 'The time to render a resource, in milliseconds. It MUST be a valid XML Schema nonNegativeInteger. This value is only a hint -- different XSPF generators will generate slightly different values. A user-agent MUST NOT use this value to determine the rendering duration, since the data will likely be low quality. XSPF::Track objects MAY contain exactly one duration element.'
|
1013
|
+
</span><span class="marked0"><a name="line394" />394 EXTENSION_RDOC = 'The extension element allows non-XSPF XML to be included in XSPF documents without breaking XSPF validation. The purpose is to allow nested XML, which the meta and link elements do not. XSPF::Track objects MAY contain zero or more extension elements, but currently XSPF for Ruby returns only the first one.'
|
1014
|
+
</span><span class="marked1"><a name="line395" />395 LINK_REL_RDOC = 'The link element allows non-XSPF web resources to be included in XSPF documents without breaking XSPF validation. A valid _link_ element has a _rel_ attribute and a _content_ element, obtained with XSPF::Track#link_rel and XSPF::Track#link_content respectively. XSPF::Track objects MAY contain zero or more link elements, but currently XSPF for Ruby returns only the first one.'
|
1015
|
+
</span><span class="marked0"><a name="line396" />396 LINK_CONTENT_RDOC = 'The link element allows non-XSPF web resources to be included in XSPF documents without breaking XSPF validation. A valid _link_ element has a _rel_ attribute and a _content_ element, obtained with XSPF::Track#link_rel and XSPF::Track#link_content respectively. XSPF::Track objects MAY contain zero or more meta elements, but currently XSPF for Ruby returns only the first one.'
|
1016
|
+
</span><span class="marked1"><a name="line397" />397 META_REL_RDOC = 'The meta element allows non-XSPF metadata to be included in XSPF documents without breaking XSPF validation. A valid _meta_ element has a _rel_ attribute and a _content_ element, obtained with XSPF::Track#meta_rel and XSPF::Track#meta_content respectively. XSPF::Track objects MAY contain zero or more meta elements, but currently XSPF for Ruby returns only the first one.'
|
1017
|
+
</span><span class="marked0"><a name="line398" />398 META_CONTENT_RDOC = 'The meta element allows non-XSPF metadata to be included in XSPF documents without breaking XSPF validation. A valid _meta_ element has a _rel_ attribute and a _content_ element, obtained with XSPF::Track#meta_rel and XSPF::Track#meta_content respectively. XSPF::Track objects MAY contain zero or more meta elements, but currently XSPF for Ruby returns only the first one.'
|
1018
|
+
</span><span class="inferred1"><a name="line399" />399
|
1019
|
+
</span><span class="marked0"><a name="line400" />400 ELEMENTS.each do |element|
|
1020
|
+
</span><span class="marked1"><a name="line401" />401 MetaGen.add_method( self, element, "@track.elements['#{element}'].text", eval(element.upcase + '_RDOC').to_s )
|
1021
|
+
</span><span class="inferred0"><a name="line402" />402 end
|
1022
|
+
</span><span class="inferred1"><a name="line403" />403
|
1023
|
+
</span><span class="marked0"><a name="line404" />404 ATTRIBUTE_AND_ELEMENT.each do |ae|
|
1024
|
+
</span><span class="marked1"><a name="line405" />405 MetaGen.add_method( self, "#{ae}_content", "@track.elements['#{ae}'].text", eval(ae.upcase + '_CONTENT_RDOC').to_s )
|
1025
|
+
</span><span class="marked0"><a name="line406" />406 MetaGen.add_method( self, "#{ae}_rel", "@track.elements['#{ae}'].attributes['rel']", eval(ae.upcase + '_REL_RDOC').to_s )
|
1026
|
+
</span><span class="inferred1"><a name="line407" />407 end
|
1027
|
+
</span><span class="inferred0"><a name="line408" />408
|
1028
|
+
</span><span class="inferred1"><a name="line409" />409 # :startdoc:
|
1029
|
+
</span><span class="inferred0"><a name="line410" />410
|
1030
|
+
</span><span class="inferred1"><a name="line411" />411 # Creates a XSPF::Track object from a <track> section of the XSPF document or from a hash of values
|
1031
|
+
</span><span class="inferred0"><a name="line412" />412 #
|
1032
|
+
</span><span class="inferred1"><a name="line413" />413 # Possible keys in the hash in generation mode: :location, :identifier, :title, :creator, :annotation, :info, :image, :album, :tracknum, :duration, :extension, :link_rel, :link_content, :meta_rel, :meta_content)
|
1033
|
+
</span><span class="marked0"><a name="line414" />414 def initialize(tr)
|
1034
|
+
</span><span class="inferred1"><a name="line415" />415
|
1035
|
+
</span><span class="marked0"><a name="line416" />416 if tr.instance_of?(Hash)
|
1036
|
+
</span><span class="inferred1"><a name="line417" />417
|
1037
|
+
</span><span class="marked0"><a name="line418" />418 ELEMENTS.each do |element|
|
1038
|
+
</span><span class="marked1"><a name="line419" />419 add_instance_variable(tr, element.downcase)
|
1039
|
+
</span><span class="inferred0"><a name="line420" />420 end
|
1040
|
+
</span><span class="inferred1"><a name="line421" />421
|
1041
|
+
</span><span class="marked0"><a name="line422" />422 ATTRIBUTE_AND_ELEMENT.each do |ae|
|
1042
|
+
</span><span class="marked1"><a name="line423" />423 add_instance_variable(tr, "#{ae.downcase}_content" )
|
1043
|
+
</span><span class="marked0"><a name="line424" />424 add_instance_variable(tr, "#{ae.downcase}_rel" )
|
1044
|
+
</span><span class="inferred1"><a name="line425" />425 end
|
1045
|
+
</span><span class="inferred0"><a name="line426" />426
|
1046
|
+
</span><span class="inferred1"><a name="line427" />427 else
|
1047
|
+
</span><span class="marked0"><a name="line428" />428 @track = tr
|
1048
|
+
</span><span class="inferred1"><a name="line429" />429
|
1049
|
+
</span><span class="marked0"><a name="line430" />430 ELEMENTS.each do |element|
|
1050
|
+
</span><span class="marked1"><a name="line431" />431 eval('@' + element.downcase + '= parse_' + element.downcase)
|
1051
|
+
</span><span class="inferred0"><a name="line432" />432 end
|
1052
|
+
</span><span class="inferred1"><a name="line433" />433
|
1053
|
+
</span><span class="marked0"><a name="line434" />434 ATTRIBUTE_AND_ELEMENT.each do |ae|
|
1054
|
+
</span><span class="marked1"><a name="line435" />435 eval('@' + ae.downcase + '_content = parse_' + ae.downcase + '_content')
|
1055
|
+
</span><span class="marked0"><a name="line436" />436 eval('@' + ae.downcase + '_rel = parse_' + ae.downcase + '_rel')
|
1056
|
+
</span><span class="inferred1"><a name="line437" />437 end
|
1057
|
+
</span><span class="inferred0"><a name="line438" />438 end
|
1058
|
+
</span><span class="inferred1"><a name="line439" />439
|
1059
|
+
</span><span class="marked0"><a name="line440" />440 end
|
1060
|
+
</span><span class="inferred1"><a name="line441" />441
|
1061
|
+
</span><span class="inferred0"><a name="line442" />442 # Exports the XSPF::Track to XML (only the <track> section)
|
1062
|
+
</span><span class="marked1"><a name="line443" />443 def to_xml
|
1063
|
+
</span><span class="inferred0"><a name="line444" />444
|
1064
|
+
</span><span class="marked1"><a name="line445" />445 xml = REXML::Element.new('track')
|
1065
|
+
</span><span class="inferred0"><a name="line446" />446
|
1066
|
+
</span><span class="marked1"><a name="line447" />447 ELEMENTS.each do |element|
|
1067
|
+
</span><span class="inferred0"><a name="line448" />448 # TODO Sure there is a nicer way to do evaluate this condition...
|
1068
|
+
</span><span class="marked1"><a name="line449" />449 unless eval('@' + element.downcase + '.nil?')
|
1069
|
+
</span><span class="marked0"><a name="line450" />450 el = REXML::Element.new(element)
|
1070
|
+
</span><span class="marked1"><a name="line451" />451 el.add_text( eval('@' + element.downcase) )
|
1071
|
+
</span><span class="marked0"><a name="line452" />452 xml.add_element(el)
|
1072
|
+
</span><span class="inferred1"><a name="line453" />453 end
|
1073
|
+
</span><span class="inferred0"><a name="line454" />454 end
|
1074
|
+
</span><span class="inferred1"><a name="line455" />455
|
1075
|
+
</span><span class="marked0"><a name="line456" />456 ATTRIBUTE_AND_ELEMENT.each do |ae|
|
1076
|
+
</span><span class="inferred1"><a name="line457" />457 # TODO Sure there is a nicer way to do evaluate this condition...
|
1077
|
+
</span><span class="marked0"><a name="line458" />458 unless eval('@' + ae.downcase + '_rel.nil? && @'+ ae.downcase + '_content.nil?')
|
1078
|
+
</span><span class="marked1"><a name="line459" />459 el = REXML::Element.new(ae.downcase)
|
1079
|
+
</span><span class="marked0"><a name="line460" />460 el.add_attribute('rel', eval('@' + ae.downcase + '_rel') )
|
1080
|
+
</span><span class="marked1"><a name="line461" />461 el.add_text( eval('@' + ae.downcase + '_content') )
|
1081
|
+
</span><span class="marked0"><a name="line462" />462 xml.add_element(el)
|
1082
|
+
</span><span class="inferred1"><a name="line463" />463 end
|
1083
|
+
</span><span class="inferred0"><a name="line464" />464 end
|
1084
|
+
</span><span class="inferred1"><a name="line465" />465
|
1085
|
+
</span><span class="marked0"><a name="line466" />466 xml.to_s
|
1086
|
+
</span><span class="inferred1"><a name="line467" />467
|
1087
|
+
</span><span class="inferred0"><a name="line468" />468 end
|
1088
|
+
</span><span class="inferred1"><a name="line469" />469
|
1089
|
+
</span><span class="marked0"><a name="line470" />470 private
|
1090
|
+
</span><span class="marked1"><a name="line471" />471 def add_instance_variable(hash, var)
|
1091
|
+
</span><span class="inferred0"><a name="line472" />472
|
1092
|
+
</span><span class="marked1"><a name="line473" />473 if hash.has_key?(var.downcase.to_sym)
|
1093
|
+
</span><span class="marked0"><a name="line474" />474 eval('@' + var.downcase + ' = \'' + hash[var.downcase.to_sym] + '\'')
|
1094
|
+
</span><span class="inferred1"><a name="line475" />475 else
|
1095
|
+
</span><span class="marked0"><a name="line476" />476 eval('@' + var.downcase + ' = defined?(' + var.upcase + '_DEFAULT) ? ' + var.upcase + '_DEFAULT : nil')
|
1096
|
+
</span><span class="inferred1"><a name="line477" />477 end
|
1097
|
+
</span><span class="inferred0"><a name="line478" />478
|
1098
|
+
</span><span class="marked1"><a name="line479" />479 end
|
1099
|
+
</span><span class="inferred0"><a name="line480" />480
|
1100
|
+
</span><span class="inferred1"><a name="line481" />481 end
|
1100
1101
|
</span></pre><hr /> <p>Generated using the <a href='http://eigenclass.org/hiki.rb?rcov'>rcov code coverage analysis tool for Ruby</a> version 0.7.0.</p><p>
|
1101
1102
|
<a href='http://validator.w3.org/check/referer'>
|
1102
1103
|
<img src='http://www.w3.org/Icons/valid-xhtml10' height='31' alt='Valid XHTML 1.0!' width='88' />
|