rwdgutenberg 0.12 → 0.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (115) hide show
  1. data/code/01rwdcore/01rwdcore.rb +6 -6
  2. data/code/01rwdcore/02helptexthashbegin.rb +14 -2
  3. data/code/01rwdcore/03helptexthash.rb +18 -20
  4. data/code/01rwdcore/jumplinkcommand.rb +14 -4
  5. data/code/01rwdcore/openhelpwindow.rb +7 -0
  6. data/code/01rwdcore/runhelpabout.rb +6 -1
  7. data/code/01rwdcore/runtab.rb +15 -0
  8. data/code/01rwdcore/selectiontab.rb +2 -0
  9. data/code/01rwdcore/setuphelpaboutoptions.rb +2 -0
  10. data/code/01rwdcore/setuptinkerdocuments.rb +1 -0
  11. data/code/01rwdcore/test_cases.rb +100 -51
  12. data/code/01rwdcore/test_harness.rb +8 -1
  13. data/code/01rwdcore/uploadreturns.rb +3 -0
  14. data/code/dd0viewphoto/dd0viewphoto.rb +2 -0
  15. data/code/superant.com.gutenberg/0uninstallapplet.rb +2 -0
  16. data/code/superant.com.gutenberg/changegutenbergname.rb +0 -0
  17. data/code/superant.com.gutenberg/clearbookscreendisplay.rb +0 -0
  18. data/code/superant.com.gutenberg/cleargutenbergfiles.rb +0 -0
  19. data/code/superant.com.gutenberg/cleargutrecordfiles.rb +0 -0
  20. data/code/superant.com.gutenberg/copyfilename.rb +0 -0
  21. data/code/superant.com.gutenberg/createnewnote.rb +1 -1
  22. data/code/superant.com.gutenberg/deletegutenbergrecord.rb +0 -0
  23. data/code/superant.com.gutenberg/gutenbergcreatefile.rb +0 -0
  24. data/code/superant.com.gutenberg/helptexthashload.rb +0 -0
  25. data/code/superant.com.gutenberg/listnamerecord.rb +0 -0
  26. data/code/superant.com.gutenberg/listtextfilesgutenberg.rb +0 -0
  27. data/code/superant.com.gutenberg/loadbookrecord.rb +0 -0
  28. data/code/superant.com.gutenberg/loadconfigurationrecord.rb +0 -0
  29. data/code/superant.com.gutenberg/loadconfigurationvariables.rb +0 -0
  30. data/code/superant.com.gutenberg/openhelpwindow.rb +41 -0
  31. data/code/superant.com.gutenberg/runbackwindow.rb +0 -0
  32. data/code/superant.com.gutenberg/rungutenbergwindow.rb +0 -0
  33. data/code/superant.com.gutenberg/rwdgutenbergbackward.rb +0 -0
  34. data/code/superant.com.gutenberg/rwdtinkerversion.rb +0 -0
  35. data/code/superant.com.gutenberg/saveconfigurationrecord.rb +0 -0
  36. data/code/superant.com.gutenberg/savegutenbergrecord.rb +0 -0
  37. data/code/superant.com.library/marcsearch.rb +30 -0
  38. data/code/superant.com.rwdtinkerbackwindow/changelocale.rb +84 -0
  39. data/code/superant.com.rwdtinkerbackwindow/initiateapplets.rb +30 -102
  40. data/code/superant.com.rwdtinkerbackwindow/installgemapplet.rb +2 -0
  41. data/code/superant.com.rwdtinkerbackwindow/listgemzips.rb +2 -0
  42. data/code/superant.com.rwdtinkerbackwindow/listinstalledfiles.rb +3 -1
  43. data/code/superant.com.rwdtinkerbackwindow/listzips.rb +4 -0
  44. data/code/superant.com.rwdtinkerbackwindow/loadconfigurationrecord.rb +3 -1
  45. data/code/superant.com.rwdtinkerbackwindow/openhelpwindowtinkerwin2.rb +3 -1
  46. data/code/superant.com.rwdtinkerbackwindow/showlocaleoptions.rb +9 -0
  47. data/code/superant.com.rwdtinkerbackwindow/viewappletcontents.rb +1 -0
  48. data/code/superant.com.rwdtinkerbackwindow/viewlogfile.rb +8 -5
  49. data/code/zz0applicationend/zz0end.rb +2 -1
  50. data/configuration/rwdtinker.dist +3 -2
  51. data/configuration/rwdwgutenberg.dist +3 -3
  52. data/configuration/tinkerwin2variables.dist +4 -8
  53. data/gui/tinkerbackwindows/superant.com.backgutenberg/30booklistutilities.rwd +1 -1
  54. data/gui/tinkerbackwindows/superant.com.backgutenberg/40marctab.rwd +26 -0
  55. data/gui/tinkerbackwindows/superant.com.backgutenberg/67viewconfiguration.rwd +1 -1
  56. data/gui/tinkerbackwindows/superant.com.tinkerbackwindow/70rwddiagnostics.rwd +1 -1
  57. data/gui/tinkerbackwindows/superant.com.tinkerbackwindow/80localechanger.rwd +17 -0
  58. data/init.rb +53 -156
  59. data/installed/rwdwgutenberg.inf +0 -1
  60. data/lang/en/rwdcore/en.po +197 -0
  61. data/lang/es/rwdcore/es.po +184 -0
  62. data/lang/fr/rwdcore/fr.po +169 -0
  63. data/lang/hi/rwdcore/hi.po +173 -0
  64. data/lang/ja/rwdcore/ja.po +171 -0
  65. data/lang/nl/rwdcore/nl.po +169 -0
  66. data/lib/marc.rb +38 -0
  67. data/lib/marc/constants.rb +14 -0
  68. data/lib/marc/controlfield.rb +47 -0
  69. data/lib/marc/datafield.rb +163 -0
  70. data/lib/marc/dublincore.rb +79 -0
  71. data/lib/marc/exception.rb +9 -0
  72. data/lib/marc/reader.rb +186 -0
  73. data/lib/marc/record.rb +147 -0
  74. data/lib/marc/subfield.rb +31 -0
  75. data/lib/marc/writer.rb +87 -0
  76. data/lib/marc/xmlreader.rb +103 -0
  77. data/lib/marc/xmlwriter.rb +155 -0
  78. data/lib/rwdtinker/rwdcodedir.rb +56 -0
  79. data/lib/rwdtinker/rwdguidir.rb +57 -0
  80. data/lib/rwdtinker/rwdlangdir.rb +60 -0
  81. data/lib/rwdtinker/rwdtinkertools.rb +2 -1
  82. data/lib/zip/ioextras.rb +43 -2
  83. data/lib/zip/stdrubyext.rb +5 -5
  84. data/lib/zip/tempfile_bugfixed.rb +2 -2
  85. data/lib/zip/zip.rb +618 -149
  86. data/lib/zip/zipfilesystem.rb +59 -8
  87. data/lib/zip/ziprequire.rb +32 -3
  88. data/lib/zmarc.rb +140 -0
  89. data/lib/zoom.so +0 -0
  90. data/rwd_files/HowTo_Gutenberg.txt +8 -1
  91. data/rwd_files/HowTo_Tinker.txt +29 -6
  92. data/rwd_files/Tinkerhelptexthash.txt +84 -0
  93. data/rwd_files/log/rwdtinker.log +0 -2080
  94. data/rwd_files/rwdapplications.html +23 -1
  95. data/rwd_files/rwdgutenberghelpfiles.txt +11 -4
  96. data/rwdconfig.dist +4 -2
  97. data/tests/makedist-rwdwgutenberg.rb +1 -1
  98. data/tests/makedist.rb +1 -1
  99. data/zips/rwdwfoldeditor-0.07.zip +0 -0
  100. data/zips/{rwdwgutenberg-0.12.zip → rwdwgutenberg-0.13.zip} +0 -0
  101. data/zips/rwdwhypernote-0.16.zip +0 -0
  102. data/zips/rwdwmovies-0.98.zip +0 -0
  103. data/zips/tinkerbellw-0.04.zip +0 -0
  104. data/zips/{wrubyslippers-1.07.zip → wrubyslippers-1.08.zip} +0 -0
  105. metadata +39 -14
  106. data/code/01rwdcore/04helptextend.rb +0 -6
  107. data/code/superant.com.gutenberg/openhelpwindowgutenberg.rb +0 -35
  108. data/code/superant.com.rwdtinkerbackwindow/helptexthashtinkerwin2.rb +0 -61
  109. data/lang/en/rwdcore/languagefile.rb +0 -59
  110. data/lang/es/rwdcore/languagefile-es.rb +0 -63
  111. data/lang/fr/rwdcore/languagefile.rb +0 -65
  112. data/lang/jp/rwdcore/languagefile.rb +0 -73
  113. data/lang/nl/rwdcore/languagefile.rb +0 -76
  114. data/rwdgutenberg.rb +0 -1
  115. data/zips/rwdwfoldeditor-0.05.zip +0 -0
@@ -0,0 +1,171 @@
1
+ # English Language files for RwdTinker core
2
+
3
+ msgid "error_message_id_unknown"
4
+ msgstr ""
5
+
6
+ msgid "applet_installed"
7
+ msgstr ""
8
+
9
+ msgid "application_version"
10
+ msgstr "アプリケーションのバージョン"
11
+
12
+ msgid "cancel"
13
+ msgstr "とりけし"
14
+
15
+ msgid "clickfor_version"
16
+ msgstr "バージョンをクリックして"
17
+
18
+
19
+ msgid "clickbelowtoviewlistof_zip"
20
+ msgstr ""
21
+
22
+
23
+ msgid "documents"
24
+ msgstr "ドキュメント"
25
+
26
+ msgid "edit"
27
+ msgstr "しゅうろく"
28
+
29
+ msgid "file_name"
30
+ msgstr "ファイル名"
31
+
32
+ msgid "fill_record"
33
+ msgstr ""
34
+
35
+ msgid "help"
36
+ msgstr "ヘルプ"
37
+
38
+ msgid "help_about"
39
+ msgstr "約ヘルプ"
40
+
41
+ msgid "install_applet"
42
+ msgstr "インストール (rwdtinker) アプレット"
43
+
44
+ msgid "jumptoapplication_location"
45
+ msgstr "Jump to Application Location"
46
+
47
+ msgid "list_applets"
48
+ msgstr "アプレットを削除"
49
+
50
+ msgid "listappletsinthegem_directory"
51
+ msgstr "リストアプレット で Gem ディレクトリ"
52
+
53
+ msgid "listappletsavailablefor_installation"
54
+ msgstr "一覧アプレットインストールが可能"
55
+
56
+ msgid "list_files"
57
+ msgstr "リストファイル"
58
+
59
+ msgid "list_installed_gems "
60
+ msgstr "かきつらねる"
61
+
62
+ msgid "list_photos"
63
+ msgstr "写真一覧"
64
+
65
+ msgid "list_zips"
66
+ msgstr "zipファイル一覧"
67
+
68
+ msgid "listzipdirappletsavailable"
69
+ msgstr "一覧 (zip directory) アプレットのインストールが可能"
70
+
71
+ msgid "menu_panel"
72
+ msgstr "メニュー画面"
73
+
74
+ msgid "module_unknown"
75
+ msgstr "未知のモジュール"
76
+
77
+ msgid "next"
78
+ msgstr "次の"
79
+
80
+ msgid "open"
81
+ msgstr "あける"
82
+
83
+ msgid "open_document"
84
+ msgstr "オープンドキュメント"
85
+
86
+ msgid "openselectedhelp_about"
87
+ msgstr "オープンのヘルプに関する選択"
88
+
89
+ msgid "reload_variables"
90
+ msgstr "リロード変数"
91
+
92
+ msgid "remove_applet"
93
+ msgstr "アプレットを削除"
94
+
95
+ msgid "return"
96
+ msgstr "復帰"
97
+
98
+ msgid "rwdtinker_window_2"
99
+ msgstr "RwdTinker ウィンドウ2"
100
+
101
+ msgid "rwdtinker"
102
+ msgstr "RwdTinker"
103
+
104
+ msgid "rwdtinker_back_window"
105
+ msgstr "RwdTinker 後ろの窓"
106
+
107
+ msgid "rwdtinker_help"
108
+ msgstr "RwdTinker ヘルプ"
109
+
110
+ msgid "rwdtinker_help_window"
111
+ msgstr "RwdTinker ウィンドウヘルプ"
112
+
113
+ msgid "showjump_links"
114
+ msgstr "表示移動リンク"
115
+
116
+ msgid "showdocument_list"
117
+ msgstr "文書の一覧を表示する"
118
+
119
+ msgid "showhelpabout_links"
120
+ msgstr "リンクについてヘルプを表示する"
121
+
122
+ msgid "save"
123
+ msgstr "保存する"
124
+
125
+ msgid "save_changes"
126
+ msgstr "変更を保存"
127
+
128
+ msgid "selection_panel"
129
+ msgstr "せんた&#12367"
130
+
131
+ msgid "selection_tab"
132
+ msgstr "タブメニュー"
133
+
134
+ msgid "tinker_logo"
135
+ msgstr "Tinker ロゴ"
136
+
137
+ msgid "tinkerback_window"
138
+ msgstr "Tinker Back Window"
139
+
140
+ msgid "viewapplet_contents"
141
+ msgstr ""
142
+
143
+ msgid "viewalreadyinstalled_applications"
144
+ msgstr ""
145
+
146
+ msgid "viewinstalled_text"
147
+ msgstr ""
148
+
149
+ msgid "view_platform"
150
+ msgstr "表示プラットフォーム"
151
+
152
+ msgid "viewplatform_information"
153
+ msgstr "プラットフォームの情報を表示"
154
+
155
+ msgid "viewlogger_information"
156
+ msgstr ""
157
+
158
+ msgid "view_event"
159
+ msgstr "けんかい ぎょうじょ"
160
+
161
+ msgid "viewinstall_text"
162
+ msgstr "ビューをインストールテキスト"
163
+
164
+ msgid "viewlistinstall_files"
165
+ msgstr "リストファイルをインストール"
166
+
167
+ msgid "view_photo"
168
+ msgstr "写真の表示"
169
+
170
+ msgid "window"
171
+ msgstr "ウィンドウ"
@@ -0,0 +1,169 @@
1
+ # Language files for RwdTinker core
2
+
3
+ msgid "error_message_id_unknown"
4
+ msgstr ""
5
+
6
+ msgid "applet_installed"
7
+ msgstr "Applet geinstalleerd"
8
+
9
+ msgid "application_version"
10
+ msgstr "Application Version"
11
+
12
+ msgid "cancel"
13
+ msgstr "Annuleren"
14
+
15
+ msgid "clickfor_version"
16
+ msgstr "Klier hier voor de Versie"
17
+
18
+ msgid "clickbelowtoviewlistof_zip"
19
+ msgstr "click below to view lists of zips"
20
+
21
+ msgid "documents"
22
+ msgstr "Documenten"
23
+
24
+ msgid "edit"
25
+ msgstr "edit"
26
+
27
+ msgid "file_name"
28
+ msgstr "File Name:"
29
+
30
+ msgid "fill_record"
31
+ msgstr "Fill Record"
32
+
33
+ msgid "help"
34
+ msgstr "Help"
35
+
36
+ msgid "help_about"
37
+ msgstr "Help About"
38
+
39
+ msgid "install_applet"
40
+ msgstr "install (rwdtinker) applet"
41
+
42
+ msgid "jumptoapplication_location"
43
+ msgstr "Jump to Application Location"
44
+
45
+ msgid "list_applets"
46
+ msgstr "Remove Applets"
47
+
48
+ msgid "listappletsinthegem_directory"
49
+ msgstr "List applets in the Gem Directory"
50
+
51
+ msgid "listappletsavailablefor_installation"
52
+ msgstr "List applets available for installation"
53
+
54
+ msgid "list_files"
55
+ msgstr "List Files"
56
+
57
+ msgid "list_installed_gems "
58
+ msgstr "List installed Gems"
59
+
60
+ msgid "list_photos"
61
+ msgstr "List Photos"
62
+
63
+ msgid "list_zips"
64
+ msgstr "List Zips"
65
+
66
+ msgid "listzipdirappletsavailable"
67
+ msgstr "List (zip directory) applets available for installation"
68
+
69
+ msgid "menu_panel"
70
+ msgstr "Menu Panel"
71
+
72
+ msgid "module_unknown"
73
+ msgstr "Module onbekend"
74
+
75
+ msgid "next"
76
+ msgstr "Volgende"
77
+
78
+ msgid "open"
79
+ msgstr "Openen"
80
+
81
+ msgid "open_document"
82
+ msgstr "Open Document"
83
+
84
+ msgid "openselectedhelp_about"
85
+ msgstr "Open selected help about"
86
+
87
+ msgid "reload_variables"
88
+ msgstr "Reload Variables"
89
+
90
+ msgid "remove_applet"
91
+ msgstr "remove applet"
92
+
93
+ msgid "return"
94
+ msgstr "Return"
95
+
96
+ msgid "rwdtinker_window_2"
97
+ msgstr "RwdTinker Window 2"
98
+
99
+ msgid "rwdtinker"
100
+ msgstr "RwdTinker"
101
+
102
+ msgid "rwdtinker_back_window"
103
+ msgstr '"RwdTinker Back Venster"'
104
+
105
+ msgid "rwdtinker_help"
106
+ msgstr "RwdTinker Help"
107
+
108
+ msgid "rwdtinker_help_window"
109
+ msgstr "RWDTinker Help Venster"
110
+
111
+ msgid "showjump_links"
112
+ msgstr "Show Jump Links"
113
+
114
+ msgid "showdocument_list"
115
+ msgstr "Show Document List"
116
+
117
+ msgid "showhelpabout_links"
118
+ msgstr "Show Help About Links"
119
+
120
+ msgid "save"
121
+ msgstr "Opslaan"
122
+
123
+ msgid "save_changes"
124
+ msgstr "Save Changes"
125
+
126
+ msgid "selection_panel"
127
+ msgstr '"Selectie Paneel"'
128
+
129
+ msgid "selection_tab"
130
+ msgstr "Menu Tab"
131
+
132
+ msgid "tinker_logo"
133
+ msgstr "Tinker Logo"
134
+
135
+ msgid "tinkerback_window"
136
+ msgstr "Tinker Back Window"
137
+
138
+ msgid "viewapplet_contents"
139
+ msgstr "View Applet Contents"
140
+
141
+ msgid "viewalreadyinstalled_applications"
142
+ msgstr "View already installed GEM applications"
143
+
144
+ msgid "viewinstalled_text"
145
+ msgstr "View Install Text"
146
+
147
+ msgid "view_platform"
148
+ msgstr "view platform"
149
+
150
+ msgid "viewplatform_information"
151
+ msgstr "View Platform Information"
152
+
153
+ msgid "viewlogger_information"
154
+ msgstr "View Logger Information"
155
+
156
+ msgid "view_event"
157
+ msgstr "View event"
158
+
159
+ msgid "viewinstall_text"
160
+ msgstr "View Install Text"
161
+
162
+ msgid "viewlistinstall_files"
163
+ msgstr "View List of Installed Files"
164
+
165
+ msgid "view_photo"
166
+ msgstr "View Photo"
167
+
168
+ msgid "window"
169
+ msgstr "Venster"
data/lib/marc.rb ADDED
@@ -0,0 +1,38 @@
1
+ #marc is a ruby library for reading and writing MAchine Readable Cataloging
2
+ #(MARC). More information about MARC can be found at <http://www.loc.gov/marc>.
3
+ #
4
+ #USAGE
5
+ #
6
+ # require 'marc'
7
+ #
8
+ # # reading records from a batch file
9
+ # reader = MARC::Reader.new('marc.dat')
10
+ # for record in reader
11
+ # puts record['245']['a']
12
+ # end
13
+ #
14
+ # # creating a record
15
+ # record = MARC::Record.new()
16
+ # record.add_field(MARC::DataField.new('100', '0', ' ', ['a', 'John Doe']))
17
+ #
18
+ # # writing a record
19
+ # writer = MARC::Writer.new('marc.dat')
20
+ # writer.write(record)
21
+ # writer.close()
22
+ #
23
+ # # writing a record as XML
24
+ # writer = MARC::XMLWriter.new('marc.xml')
25
+ # writer.write(record)
26
+ # writer.close()
27
+
28
+ require 'lib/marc/constants'
29
+ require 'lib/marc/record'
30
+ require 'lib/marc/datafield'
31
+ require 'lib/marc/controlfield'
32
+ require 'lib/marc/subfield'
33
+ require 'lib/marc/reader'
34
+ require 'lib/marc/writer'
35
+ require 'lib/marc/exception'
36
+ require 'lib/marc/xmlwriter'
37
+ require 'lib/marc/xmlreader'
38
+ require 'lib/marc/dublincore'
@@ -0,0 +1,14 @@
1
+ module MARC
2
+
3
+ # constants used in MARC21 reading/writing
4
+ LEADER_LENGTH = 24
5
+ DIRECTORY_ENTRY_LENGTH = 12
6
+ SUBFIELD_INDICATOR = 0x1F.chr
7
+ END_OF_FIELD = 0x1E.chr
8
+ END_OF_RECORD = 0x1D.chr
9
+
10
+ # constants used in XML reading/writing
11
+ MARC_NS = "http://www.loc.gov/MARC21/slim"
12
+ MARC_XSD = "http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"
13
+
14
+ end
@@ -0,0 +1,47 @@
1
+ module MARC
2
+
3
+ # MARC records contain control fields, each of which has a
4
+ # tag and value. Tags for control fields must be in the
5
+ # 001-009 range.
6
+
7
+ class ControlField
8
+
9
+ # the tag value (007, 008, etc)
10
+ attr_accessor :tag
11
+
12
+ # the value of the control field
13
+ attr_accessor :value
14
+
15
+ # The constructor which must be passed a tag value and
16
+ # an optional value for the field.
17
+
18
+ def initialize(tag,value='')
19
+ @tag = tag
20
+ @value = value
21
+ if tag.to_i > 9
22
+ raise MARC::Exception.new(), "tag must be greater than 009"
23
+ end
24
+ end
25
+
26
+ # Two control fields are equal if their tags and values are equal.
27
+
28
+ def ==(other)
29
+ if @tag != other.tag
30
+ return false
31
+ elsif @value != other.value
32
+ return false
33
+ end
34
+ return true
35
+ end
36
+
37
+ def to_s
38
+ return "#{tag} #{value}"
39
+ end
40
+
41
+ def =~(regex)
42
+ return self.to_s =~ regex
43
+ end
44
+
45
+ end
46
+
47
+ end
@@ -0,0 +1,163 @@
1
+ require 'lib/marc/subfield'
2
+ require 'lib/marc/record'
3
+
4
+ module MARC
5
+
6
+ # MARC records contain data fields, each of which has a tag,
7
+ # indicators and subfields. Tags for data fields must be in
8
+ # the range 010-999.
9
+ # Accessor attributes: tag, indicator1, indicator2
10
+ #
11
+ # DataField mixes in Enumerable to enable access to it's constituent
12
+ # Subfield objects. For instance, if you have a DataField representing
13
+ # a 856 tag, and want to find all 'z' subfields:
14
+ #
15
+ # subfield_z = field.find_all {|subfield| subfield.code == 'z'}
16
+ #
17
+ # Also, the accessor 'subfields' is an array of MARC::Subfield objects
18
+ # which can be accessed or modified by the client directly if
19
+ # neccesary.
20
+
21
+ class DataField
22
+ include Enumerable
23
+
24
+ # The tag for the field
25
+ attr_accessor :tag
26
+
27
+ # The first indicator
28
+ attr_accessor :indicator1
29
+
30
+ # The second indicator
31
+ attr_accessor :indicator2
32
+
33
+ # A list of MARC::Subfield objects
34
+ attr_accessor :subfields
35
+
36
+
37
+ # Create a new field with tag, indicators and subfields.
38
+ # Subfields are passed in as comma separated list of
39
+ # MARC::Subfield objects,
40
+ #
41
+ # field = MARC::DataField.new('245','0','0',
42
+ # MARC::Subfield.new('a', 'Consilience :'),
43
+ # MARC::Subfield.new('b', 'the unity of knowledge ',
44
+ # MARC::Subfield.new('c', 'by Edward O. Wilson.'))
45
+ #
46
+ # or using a shorthand:
47
+ #
48
+ # field = MARC::DataField.new('245','0','0',
49
+ # ['a', 'Consilience :'],['b','the unity of knowledge ',
50
+ # ['c', 'by Edward O. Wilson.'] )
51
+
52
+ def initialize(tag, i1=' ', i2=' ', *subfields)
53
+ @tag = tag
54
+ # can't allow nil to be passed in or else it'll
55
+ # screw us up later when we try to encode
56
+ @indicator1 = i1 == nil ? ' ' : i1
57
+ @indicator2 = i2 == nil ? ' ' : i2
58
+ @subfields = []
59
+
60
+ # must use MARC::ControlField for tags < 010
61
+ if @tag.to_i < 10 and not @tag =~ /[A-z]/
62
+ raise MARC::Exception.new(),
63
+ "MARC::DataField objects can't have tags < 010"
64
+ end
65
+
66
+ # allows MARC::Subfield objects to be passed directly
67
+ # or a shorthand of ['a','Foo'], ['b','Bar']
68
+ subfields.each do |subfield|
69
+ case subfield
70
+ when MARC::Subfield
71
+ @subfields.push(subfield)
72
+ when Array
73
+ if subfield.length > 2
74
+ raise MARC::Exception.new(),
75
+ "arrays must only have 2 elements"
76
+ end
77
+ @subfields.push(
78
+ MARC::Subfield.new(subfield[0],subfield[1]))
79
+ else
80
+ raise MARC::Exception.new(),
81
+ "invalid subfield type #{subfield.class}"
82
+ end
83
+ end
84
+ end
85
+
86
+
87
+ # Returns a string representation of the field such as:
88
+ # 245 00 $aConsilience :$bthe unity of knowledge $cby Edward O. Wilson.
89
+
90
+ def to_s
91
+ str = "#{tag} "
92
+ str += "#{indicator1}#{indicator2} "
93
+ @subfields.each { |subfield| str += subfield.to_s }
94
+ return str
95
+ end
96
+
97
+
98
+ # Add a subfield (MARC::Subfield) to the field
99
+ # field.append(MARC::Subfield.new('a','Dave Thomas'))
100
+
101
+ def append(subfield)
102
+ @subfields.push(subfield)
103
+ end
104
+
105
+
106
+ # You can iterate through the subfields in a Field:
107
+ # field.each {|s| print s}
108
+
109
+ def each
110
+ for subfield in subfields
111
+ yield subfield
112
+ end
113
+ end
114
+
115
+
116
+ # You can lookup subfields with this shorthand. Note it
117
+ # will return a string and not a MARC::Subfield object.
118
+ # subfield = field['a']
119
+
120
+ def [](code)
121
+ subfield = self.find {|s| s.code == code}
122
+ return subfield.value if subfield
123
+ return
124
+ end
125
+
126
+
127
+ # Two fields are equal if their tag, indicators and
128
+ # subfields are all equal.
129
+
130
+ def ==(other)
131
+ if @tag != other.tag
132
+ return false
133
+ elsif @indicator1 != other.indicator1
134
+ return false
135
+ elsif @indicator2 != other.indicator2
136
+ return false
137
+ elsif @subfields != other.subfields
138
+ return false
139
+ end
140
+ return true
141
+ end
142
+
143
+
144
+ # To support regex matching with fields
145
+ #
146
+ # if field =~ /Huckleberry/ ...
147
+
148
+ def =~(regex)
149
+ return self.to_s =~ regex
150
+ end
151
+
152
+
153
+ # to get the field as a string, without the tag and indicators
154
+ # useful in situations where you want a legible version of the field
155
+ #
156
+ # print record['245'].value
157
+
158
+ def value
159
+ return(@subfields.map {|s| s.value} .join '')
160
+ end
161
+
162
+ end
163
+ end