rwdgutenberg 0.12 → 0.13
Sign up to get free protection for your applications and to get access to all the features.
- data/code/01rwdcore/01rwdcore.rb +6 -6
- data/code/01rwdcore/02helptexthashbegin.rb +14 -2
- data/code/01rwdcore/03helptexthash.rb +18 -20
- data/code/01rwdcore/jumplinkcommand.rb +14 -4
- data/code/01rwdcore/openhelpwindow.rb +7 -0
- data/code/01rwdcore/runhelpabout.rb +6 -1
- data/code/01rwdcore/runtab.rb +15 -0
- data/code/01rwdcore/selectiontab.rb +2 -0
- data/code/01rwdcore/setuphelpaboutoptions.rb +2 -0
- data/code/01rwdcore/setuptinkerdocuments.rb +1 -0
- data/code/01rwdcore/test_cases.rb +100 -51
- data/code/01rwdcore/test_harness.rb +8 -1
- data/code/01rwdcore/uploadreturns.rb +3 -0
- data/code/dd0viewphoto/dd0viewphoto.rb +2 -0
- data/code/superant.com.gutenberg/0uninstallapplet.rb +2 -0
- data/code/superant.com.gutenberg/changegutenbergname.rb +0 -0
- data/code/superant.com.gutenberg/clearbookscreendisplay.rb +0 -0
- data/code/superant.com.gutenberg/cleargutenbergfiles.rb +0 -0
- data/code/superant.com.gutenberg/cleargutrecordfiles.rb +0 -0
- data/code/superant.com.gutenberg/copyfilename.rb +0 -0
- data/code/superant.com.gutenberg/createnewnote.rb +1 -1
- data/code/superant.com.gutenberg/deletegutenbergrecord.rb +0 -0
- data/code/superant.com.gutenberg/gutenbergcreatefile.rb +0 -0
- data/code/superant.com.gutenberg/helptexthashload.rb +0 -0
- data/code/superant.com.gutenberg/listnamerecord.rb +0 -0
- data/code/superant.com.gutenberg/listtextfilesgutenberg.rb +0 -0
- data/code/superant.com.gutenberg/loadbookrecord.rb +0 -0
- data/code/superant.com.gutenberg/loadconfigurationrecord.rb +0 -0
- data/code/superant.com.gutenberg/loadconfigurationvariables.rb +0 -0
- data/code/superant.com.gutenberg/openhelpwindow.rb +41 -0
- data/code/superant.com.gutenberg/runbackwindow.rb +0 -0
- data/code/superant.com.gutenberg/rungutenbergwindow.rb +0 -0
- data/code/superant.com.gutenberg/rwdgutenbergbackward.rb +0 -0
- data/code/superant.com.gutenberg/rwdtinkerversion.rb +0 -0
- data/code/superant.com.gutenberg/saveconfigurationrecord.rb +0 -0
- data/code/superant.com.gutenberg/savegutenbergrecord.rb +0 -0
- data/code/superant.com.library/marcsearch.rb +30 -0
- data/code/superant.com.rwdtinkerbackwindow/changelocale.rb +84 -0
- data/code/superant.com.rwdtinkerbackwindow/initiateapplets.rb +30 -102
- data/code/superant.com.rwdtinkerbackwindow/installgemapplet.rb +2 -0
- data/code/superant.com.rwdtinkerbackwindow/listgemzips.rb +2 -0
- data/code/superant.com.rwdtinkerbackwindow/listinstalledfiles.rb +3 -1
- data/code/superant.com.rwdtinkerbackwindow/listzips.rb +4 -0
- data/code/superant.com.rwdtinkerbackwindow/loadconfigurationrecord.rb +3 -1
- data/code/superant.com.rwdtinkerbackwindow/openhelpwindowtinkerwin2.rb +3 -1
- data/code/superant.com.rwdtinkerbackwindow/showlocaleoptions.rb +9 -0
- data/code/superant.com.rwdtinkerbackwindow/viewappletcontents.rb +1 -0
- data/code/superant.com.rwdtinkerbackwindow/viewlogfile.rb +8 -5
- data/code/zz0applicationend/zz0end.rb +2 -1
- data/configuration/rwdtinker.dist +3 -2
- data/configuration/rwdwgutenberg.dist +3 -3
- data/configuration/tinkerwin2variables.dist +4 -8
- data/gui/tinkerbackwindows/superant.com.backgutenberg/30booklistutilities.rwd +1 -1
- data/gui/tinkerbackwindows/superant.com.backgutenberg/40marctab.rwd +26 -0
- data/gui/tinkerbackwindows/superant.com.backgutenberg/67viewconfiguration.rwd +1 -1
- data/gui/tinkerbackwindows/superant.com.tinkerbackwindow/70rwddiagnostics.rwd +1 -1
- data/gui/tinkerbackwindows/superant.com.tinkerbackwindow/80localechanger.rwd +17 -0
- data/init.rb +53 -156
- data/installed/rwdwgutenberg.inf +0 -1
- data/lang/en/rwdcore/en.po +197 -0
- data/lang/es/rwdcore/es.po +184 -0
- data/lang/fr/rwdcore/fr.po +169 -0
- data/lang/hi/rwdcore/hi.po +173 -0
- data/lang/ja/rwdcore/ja.po +171 -0
- data/lang/nl/rwdcore/nl.po +169 -0
- data/lib/marc.rb +38 -0
- data/lib/marc/constants.rb +14 -0
- data/lib/marc/controlfield.rb +47 -0
- data/lib/marc/datafield.rb +163 -0
- data/lib/marc/dublincore.rb +79 -0
- data/lib/marc/exception.rb +9 -0
- data/lib/marc/reader.rb +186 -0
- data/lib/marc/record.rb +147 -0
- data/lib/marc/subfield.rb +31 -0
- data/lib/marc/writer.rb +87 -0
- data/lib/marc/xmlreader.rb +103 -0
- data/lib/marc/xmlwriter.rb +155 -0
- data/lib/rwdtinker/rwdcodedir.rb +56 -0
- data/lib/rwdtinker/rwdguidir.rb +57 -0
- data/lib/rwdtinker/rwdlangdir.rb +60 -0
- data/lib/rwdtinker/rwdtinkertools.rb +2 -1
- data/lib/zip/ioextras.rb +43 -2
- data/lib/zip/stdrubyext.rb +5 -5
- data/lib/zip/tempfile_bugfixed.rb +2 -2
- data/lib/zip/zip.rb +618 -149
- data/lib/zip/zipfilesystem.rb +59 -8
- data/lib/zip/ziprequire.rb +32 -3
- data/lib/zmarc.rb +140 -0
- data/lib/zoom.so +0 -0
- data/rwd_files/HowTo_Gutenberg.txt +8 -1
- data/rwd_files/HowTo_Tinker.txt +29 -6
- data/rwd_files/Tinkerhelptexthash.txt +84 -0
- data/rwd_files/log/rwdtinker.log +0 -2080
- data/rwd_files/rwdapplications.html +23 -1
- data/rwd_files/rwdgutenberghelpfiles.txt +11 -4
- data/rwdconfig.dist +4 -2
- data/tests/makedist-rwdwgutenberg.rb +1 -1
- data/tests/makedist.rb +1 -1
- data/zips/rwdwfoldeditor-0.07.zip +0 -0
- data/zips/{rwdwgutenberg-0.12.zip → rwdwgutenberg-0.13.zip} +0 -0
- data/zips/rwdwhypernote-0.16.zip +0 -0
- data/zips/rwdwmovies-0.98.zip +0 -0
- data/zips/tinkerbellw-0.04.zip +0 -0
- data/zips/{wrubyslippers-1.07.zip → wrubyslippers-1.08.zip} +0 -0
- metadata +39 -14
- data/code/01rwdcore/04helptextend.rb +0 -6
- data/code/superant.com.gutenberg/openhelpwindowgutenberg.rb +0 -35
- data/code/superant.com.rwdtinkerbackwindow/helptexthashtinkerwin2.rb +0 -61
- data/lang/en/rwdcore/languagefile.rb +0 -59
- data/lang/es/rwdcore/languagefile-es.rb +0 -63
- data/lang/fr/rwdcore/languagefile.rb +0 -65
- data/lang/jp/rwdcore/languagefile.rb +0 -73
- data/lang/nl/rwdcore/languagefile.rb +0 -76
- data/rwdgutenberg.rb +0 -1
- 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 "せんたく"
|
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
|