-#########################################################################
-## ##
-## Ova datoteka sadr¾i pravila za generiranje MARC21 ISO 2709 izlazne ##
-## datoteke. Ulazni format je CDS/ISIS sa zapisima u UNIMARC-u. ##
-## ##
-##########################################################################
-# konvertira se ako postoji polje 200^a
+# Ova datoteka sadr¾i pravila za generiranje MARC21 ISO 2709 izlazne
+# datoteke. Ulazni format je CDS/ISIS izvorni format, sa zapisima u
+# UNIMARC formatu, sa vi¹estrukim odstupanjima od standarda.
+
+## lookup rezultat za sabrana djela
+my $sabrana;
+
+
+## konvertira se ako postoji polje 200^a
if ( rec('200','a') ) {
### LEADER
-# raspraviti 17,18
-# u nekim knji¾nicama koristi se 999a i 999b, a u nekima samo 999
-if ( rec('999') && first(rec('999')) =~ m/(pregledan|P)/i) {
+## LDR 05 - c = pregledan ; n = new
+## provjeriti za svaku bazu koje polje koristi
+## 999^aP - SFM
+
+if ( rec('999','a') && rec('999','a') =~ m/(pregledan|P)/i) {
marc_leader('05','c');
} else {
marc_leader('05','n');
}
-# moguæa je i oznaka "m" u 06 - odrediti kriterije
+## LDR 06 - a - language material
+
marc_leader('06','a');
- marc_leader('07','m');
- marc_leader('18','i');
-# pojasniti upotrebu 19 lidera!
+## LDR 07 - m - Monograph/item
-if ( rec('230') ) {
- marc_leader('19','r');
+if ( config() =~ m/fffi/ ) {
+ $sabrana =
+ lookup(
+ sub{ rec('A') },
+ 'fffi','sabrana',
+ sub { rec('B') },
+ sub { rec('000') }
+ );
+}
+
+if ( ! $sabrana ) {
+ marc_leader('07','m');
+} else {
+ marc_leader('07','c');
}
-### 001 - Voyager
+## LDR 17 - Encoding level ; 7 - minimal level
+ marc_leader('17','7');
-### 003
-# Pojasniti upotrebu polja
+## LDR 18 - i - isbd
+ marc_leader('18','i');
-### 007
-# pojasniti upotrebu polja
+## LDR 19
+# # - Not specified or not applicable; a - Set; b - Part with independent title; c - Part with dependent title
-marc_fixed('007',00,'ta');
+#if ( ( ! $sabrana ) && ( rec('230') || rec('231') || rec('232') || rec('233') ) ) {
+# marc_leader('19','a');
+#}
+
+if ( ( rec('230') || rec('231') || rec('232') || rec('233') ) ) {
+ marc_leader('19','a');
+}
-### 008
-# ¹to zapisati u polje kad datum nije poznat?
+### 008 - All materials
+## dodati sve moguce slucajeve za datum, popuniti ono sto nedostaje
+## provjereno: fi
-if ( rec('994','c') ) {
+if ( rec('994','c') =~ m/\d{8}/ ) {
marc_fixed('008','00',
regex('s/^\d\d//',
rec('994','c')
),
);
-} else {
+} elsif ( rec('994','c') =~ m/\d{6}/ ) {
+ marc_fixed('008', 00,
+ regex('s/^\d\d//',
+ rec('994','c')
+ ),
+ );
+ marc_fixed('008', '04',
+ '01'
+ );
+} elsif ( rec('994','c') =~ m/\d{4}/ ) {
marc_fixed('008', 00,
- '000101'
+ regex('s/^\d\d//',
+ rec('994','c')
+ ),
+ );
+ marc_fixed('008', '02',
+ '0101'
);
}
#)
#);
+## 008 06 - Type of date/Publication status
+
+## 008 07-10 - Date 1 -
+## srediti sve moguæe oznake za godine (06)
+## 210d kroz modify postaje 210c
+
+if ( rec('210','c') ) {
+ my $d1 = '';
+ my $d2 = '';
+ if ( rec('210','c') =~ m/(\?)/ ) {
+ marc_fixed('008','06','q');
+ if ( rec('210','c') =~ m/(\d{2})(--|__)/ ) {
+ $d1 = $1.'uu';
+ }
+ if ( rec('210','c') =~ m/(\d{3})(-|_)/ ) {
+ $d1 = $1.'u';
+ }
+ if ( rec('210','c') =~ m/(\d{4})/ ) {
+ $d1 = $1;
+ }
+ } elsif ( rec('210','c') =~ m/(\d{4})-/ ) {
+ if ( $sabrana ) {
+ marc_fixed('008','06','i');
+ } else {
+ marc_fixed('008','06','m');
+ }
+ if ( rec('210','c') =~ m/(\d{4})-/ ) {
+ $d1 = $1;
+ $d2 = '9999';
+ }
+ if ( rec('210','c') =~ m/-(\d{4})/ ) {
+ $d2 = $1;
+ }
+ } else {
+ marc_fixed('008','06','s');
+ if ( rec('210','c') =~ m/(\d{4})/ ) {
+ $d1 = $1;
+ }
+ }
+
+ marc_fixed('008','07',$d1); # 07-10 - Date 1
+ marc_fixed('008','11',$d2); # 07-10 - Date 1
+
+} else {
+ marc_fixed('008','06','n'); # 06 - n = unknown date
+ marc_fixed('008','07','uuuu');
+}
+
+
+## 008 11-14 - Date 2
+
+## 008 15-17 - Place of publication, production, or execution - ¹to ako nema 102?
+## raspraviti
+
+marc_fixed('008','15','xx');
+
+#marc_fixed('008','15',
+# lc ( rec('102') )
+#);
+
+#my $zemlja =
+# lookup(
+# sub { rec('B') },
+# 'kodovi','zemlje',
+# sub { rec('A') },
+# sub {
+# regex('s/[\s;:]/g',
+# rec('210','a')
+# )
+# },
+# );
+
+
+## 008 35-37 - Language
marc_fixed('008','35',
- first( lc(rec('101')) )
+ # first( lc(rec('101')) )
+ lc( frec('101'))
);
+
+## 008 38 - Modified record - razjasniti
+marc_fixed('008','38','|');
+## 008 39 - Cataloging source - d (other)
+marc_fixed('008','39','d');
-### 020
-# postoji modify -> drugi ISBN poèinje prefixom "ISBN" koji se mièe (sfb)
+### 008 - Books - raspraviti upotrebu ovih polja
+## 008 18-21 - Illustrations
+if ( rec('215','c') && rec('215','c') =~ m/ilustr/ ) {
+ marc_fixed('008','18','a')
+}
-marc('020','a',
- regex('s/ ISBN //g',
- rec('10')
- )
-);
+## 008 22 - Target audience
+marc_fixed('008','22','|');
+
+## 008 23 - Form of item
+
+## 008 24-27 - Nature of contents
+marc_fixed('008','24','||||');
+
+## 008 28 - Government publication
+marc_fixed('008','28','|');
+
+## 008 29 - Conference publication
+marc_fixed('008','29','|');
+## 008 30 - Festschrift
+marc_fixed('008','30','|');
-### 035$6
-# Privemeno koristimo 035$6 umjesto 035$9, zato ¹to marclint prijavljuje 9 kao gre¹ku.
-# marc 035a - System Number - Voyagerov ID (001)
-# polje 035$9 mo¾e sadr¾avati slova i razmake
+## 008 31 - Index
+marc_fixed('008','31','|');
-marc('035','6',
+## 008 32 - Undefined
+## 008 33 - Literary form
+marc_fixed('008','33','|');
+
+## 008 34 - Biography
+marc_fixed('008','34','|');
+
+### 020
+## modify za polje 10 -> drugi ISBN poèinje prefixom "ISBN" koji se mièe (pr. u sfb)
+
+if ( frec('10') ne ( frec('290') ) ) {
+ if ( rec('10','a') !~ /pogre/ ) {
+ marc('020','a',
+ # isbn_13(
+ regex('s/\s\s/ /g',
+ # regex('s/\(\d\)\(/$1 \(//g',
+ rec('10','a')
+ )
+ # )
+ );
+ }
+ if ( rec('10','a') =~ /pogre/ ) {
+ marc('020','z',
+ regex('s/\s\s/ /g',
+ rec('10','a')
+ )
+ );
+ }
+ marc('020','z',
+ rec('10','z')
+ );
+}
+
+#warn(
+# dump(
+# frec('10')
+# ),
+#);
+
+### 035$
+## marc 035a - System Number
+## polje mo¾e sadr¾avati slova i razmake, problem u pretra¾ivanju ako ima zagrade, kako bi trebalo po standardu
+
+marc('035','a',
join_with('',
-# config('input normalize path'),
-# config('name'),
- config(),
- ' L',
-# config('input name'),
-# id(),
-# rec('994','a'),
- rec('000')
+ # config('input normalize path'),
+ # config('name'),
+ 'HR-ZaFF ',
+ config(),
+ 'L-',
+ # config('input name'),
+ # id(),
+ # rec('994','a'),
+ rec('000')
)
);
### 040
-# za sve je isti
-# treba utvrditi toènu oznaku za ustanovu
+## za sve je isti
marc('040','a',
- 'HR FFZG'
+ 'HR-ZaFF'
);
-
marc('040','b',
'hrv'
);
-
+marc('040','c',
+ 'HR-ZaFF'
+);
marc('040','e',
- 'HR PPIAK'
+ 'ppiak'
);
-
-### 041
-
-# indikatori
-#
-# pretpostavke o indikatorima:
-#
-# 1. Ako postoji polje 300 i ono sadr¾i /Prijevod/ ili /Izv. stv. nasl./, i1 = 1
-# (Da li je napomena uvijek pisana?)
-#
-# 2. Podatak o prevodiocu u 200g. Problem: razlièiti oblici rijeèi, razlièiti jezici.
-#
-# 3. Ako u UDK oznaci postoji "=", bez zagrada, onda je to prijevod
-# (ako postoje zagrade pr. 94(=411.16) onda su to pomoæne oznake)
-# pr. 821.111-2=163.42 je prijevod engleske drame na HR.
-# to ima samo za knji¾evna djela, eseje....
-# ????
-
-
-#if ( rec('675') =~ m/\d=\d/ ) {
-if ( grep( m/prijevod/i, rec('300')) || grep( m/prevedeno/i, rec('300')) || grep( m/izv.*stv.*nasl/i, rec('300')) || grep( m/izvornik/i, rec('300')) || grep( m/preve/i, rec('200','f')) || grep( m/preve/i, rec('200','g')) || grep( m/prijevod/i, rec('200','f')) || grep( m/prijevod/i, rec('200','g')) ) {
+### 041 - indikatori
+## pretpostavke o indikatorima
+## 1. Ako postoji polje 300 i ono sadr¾i /Prijevod/ ili /Izv. stv. nasl./, i1 = 1
+## (Da li je napomena uvijek pisana?)
+## 2. Podatak o prevodiocu u 200g. Problem: razlièiti oblici rijeèi, razlièiti jezici.
+## 3. Ako u UDK oznaci postoji "=", bez zagrada, onda je to prijevod
+## (ako postoje zagrade pr. 94(=411.16) onda su to pomoæne oznake)
+## pr. 821.111-2=163.42 je prijevod engleske drame na HR.
+## to ima samo za knji¾evna djela, eseje....
+
+#if ( rec('675') =~ m/\d=\d/ ) ?
+
+if (
+ grep( m/prijevod/i, rec('300') )
+ || grep( m/nasl.*izv/i, rec('300') )
+# ( frec('300') =~ m/Prijevod/ )
+# || ( rec('300') =~ m/izvorni stvarni naslov/i )
+# || ( rec('300') =~ m/naslov izvornika/i )
+# grep( m/[prijevod|stvarni\snaslov]/i, rec('300') )
+) {
marc_indicators('041', 1, ' ');
-} else {
+ marc_repeatable_subfield('041','a',
+ map { lc($_) } rec('101')
+ );
+} elsif (
+ count( rec('101') ) > 1
+) {
marc_indicators('041', 0, ' ');
+ marc_repeatable_subfield('041','a',
+ map { lc($_) } rec('101')
+ );
}
-
-### 041
-# ponovljivo polje konvertira se u ponovljivo potpolje
-
-#_debug(2);
-
-marc_repeatable_subfield('041','a',
- rec('101')
-);
+ ### 041
+ ## ponovljivo polje (101) konvertira se u ponovljivo potpolje (041a)
+ ## polje se koristi kad ima vi¹e od jednog jezika, ili kad se radi o prijevodu
+ #_debug(2);
#_debug(0);
### 044
-
+## kako dobiti zemlju izdavanja?
### 080
-# 675 podpolja b, c, d ... - ¹to s njima ???
+## 675 podpolja b, c, d ... - ¹to s njima? - provjeriti za svaku bazu
+## fi: abcd
marc('080','a',
rec('675','a')
### 084 - other classification (R)
-# NSK ga koristi za struènu oznaku NSK iz polja 681
-# NSK konvertira polje 686 u 084, u skladu s LOC konv. tablicom
-# polje 686 koristi FFPS. jo¹ netko?
+## NSK ga koristi za struènu oznaku NSK iz polja 681
+## NSK konvertira polje 686 u 084, u skladu s LOC konv. tablicom
+## polje 686 koristi FFPS. jo¹ netko?
marc('084','a',
rec('686')
);
-### 100
-
-# I1 = 0 ako je pseudonim (ima 700a, nema 700b)
+### 100
+## I1 = 0 ako je pseudonim (ima 700a, nema 700b)
if ( rec('700','a') && ! rec('700','b') ) {
marc_indicators('100', 0, ' ');
)
);
+### formalna odrednica - iz 503 u 110, i1=0, i2=1
### 111 i 110
-# provjeriti ispise naslova iz svake baze - moguæe su gre¹ke.
-# ovo vrijedi za FFSFB
+## konverzija u 110 ili 111 ovisno o postojanju/nepostojanju nekih polja - provjeriti ispise naslova iz svake baze - moguæe su gre¹ke.
+## popraviti interpunkciju
+# ovo vrijedi za FFSFB
if ( rec('710','d') || rec('710','e') || rec('710','f') ) {
marc_indicators('111', 2, ' ');
),
'+',')',
);
-
-
} else {
-
-marc_indicators('110', 2, ' ');
-
-marc('110','a',
- rec('710','a')
-);
-
-marc('110','b',
- rec('710','b')
-);
-
- if ( rec('710','c') ) {
- marc('110','c',
- surround('(', ')', rec('710','c'))
+ marc_indicators('110', 2, ' ');
+ marc('110','a',
+ rec('710','a')
);
+ marc('110','b',
+ rec('710','b')
+ );
+ if ( rec('710','c') ) {
+ marc('110','c',
+ surround('(', ')', rec('710','c'))
+ );
}
-
}
-
-### 245
-
-# indikatori
-#
-# i1 = 0 za anonimne publikacije, i1 = 1 ako postoji 700 ili 710
-# i2 = pretpostavlja se na temelju èlana na poèetku naslova i jezika
-# treba nadopuniti i dati podatke na verifikaciju knji¾nièarima
+### 245 indikatori
+## i1 = 0 za anonimne publikacije, i1 = 1 ako postoji 700 ili 710
+## i2 = pretpostavlja se na temelju èlana na poèetku naslova i jezika
+## treba provjeriti
my $i1;
if ( rec('700') || rec('710') ) {
$i1 = 1;
-
} else {
$i1 = 0;
}
marc_indicators('245', $i1, 0);
-if ( ( rec('200','a') =~ m/^Die /) ||
- ( rec('200','a') =~ m/^Das /) ||
- ( rec('200','a') =~ m/^Der /) ||
- ( rec('200','a') =~ m/^The /) ) {
+if ( rec('200','a') =~ m/^Einen / ) {
+ marc_indicators('245', $i1, 6);
+}
+if ( rec('200','a') =~ m/^Eine / ) {
+ marc_indicators('245', $i1, 5);
+}
+if ( rec('200','a') =~ m/^(Die|Das|Der|Ein|Les|Los|The) / ) {
marc_indicators('245', $i1, 4);
}
-
-if ( ( rec('200','a') =~ m/^A /) && ( rec(101) =~ m/ENG/ ) ) {
+if ( rec('200','a') =~ m/^(Um|Un|An|La|Le|Lo|Il) / ) {
+ marc_indicators('245', $i1, 3);
+}
+if ( ( rec('101') =~ m/ENG/ ) && ( rec('200','a') =~ m/^A / ) ) {
marc_indicators('245', $i1, 2);
}
-
-if ( ( rec('200','a') =~ m/^An /) && ( rec(101) =~ m/ENG/ ) ) {
+if ( rec('200','a') =~ m/^L / ) {
+ marc_indicators('245', $i1, 2);
+}
+if ( rec('200','a') =~ m/^L'/ ) {
marc_indicators('245', $i1, 2);
}
-# podpolja i interpunkcije pripremljeni u modify
+
+### 245
+## postoji modify
+## da li treba makivati razmake u inicijalima?
#_debug(3);
marc_compose('245',
'a', suffix(
- ( ! ( rec('200','d') || rec('200','e') || rec('200','k') ) ) && ( rec('200','f') ) ? ' / ' :
- ( rec('200','d') ) ? ' = ' :
- ( rec('200','e') ) ? ' : ' :
- ( rec('200','k') ) ? ' ; ' :
- '',
+ ( ! ( rec('200','d') || rec('200','e') || rec('200','k') ) ) && ( rec('200','f') ) ? ' /' :
+ ( rec('200','d') ) ? ' =' :
+ ( rec('200','e') ) ? ' :' :
+ ( rec('200','k') ) ? ' ;' :
+ '.',
rec('200','a'),
),
'b', suffix(
- ( rec('200','d') && rec('200','f') ) ? ' / ' :
- ( rec('200','d') && rec('200','c') ) ? '. ' :
+ ( rec('200','d') && rec('200','f') ) ? ' /' :
+ ( rec('200','d') && rec('200','c') ) ? '.' :
'',
rec('200','d'),
),
'b', suffix(
- ( rec('200','e') && rec('200','f') ) ? ' / ' :
- ( rec('200','e') && rec('200','c') ) ? '. ' :
+ ( rec('200','e') && rec('200','f') ) ? ' /' :
+ ( rec('200','e') && rec('200','c') ) ? '.' :
'',
rec('200','e'),
),
'b', suffix(
- ( rec('200','k') && rec('200','f') ) ? ' / ' :
- ( rec('200','k') && rec('200','c') ) ? '. ' :
+ ( rec('200','k') && rec('200','f') ) ? ' /' :
+ ( rec('200','k') && rec('200','c') ) ? '.' :
'',
rec('200','k'),
),
'c', suffix(
( rec('200','f') && rec('200','c') ) ? '. ' :
'',
- rec('200','f'),
+ join_with(' ; ',
+ regex('s/(\S\.)\s(\S\.\s)/$1$2/g',
+ rec('200','f'),
+ ),
+ regex('s/(\S\.)\s(\S\.\s)/$1$2/g',
+ rec('200','g')
+ )
+ )
+ ),
+ ## append to last subfield
+ '+', suffix('.',
+ join_with(' / ',
+ rec('200','c'),
+ rec('200','x')
+ )
),
- '+', rec('200','c'),
);
-#marc_compose('245',
-# 'a', suffix(
-# ( ! rec('200','p') && ( rec('200','f') || rec('200','c') ) ) ? ' / ' :
-# ( ! rec('200','p') && rec('200','c') ) ? ' : ' :
-# '',
-# rec('200','a'),
-# ),
-# 'b', suffix(
-# ( rec('200','p') && rec('200','f') ) ? ' / ' :
-# ( rec('200','p') && rec('200','c') ) ? '. ' :
-# '',
-# rec('200','p'),
-# ),
-# 'c', suffix(
-# ( rec('200','f') && rec('200','c') ) ? '. ' :
-# '',
-# rec('200','f'),
-# ),
-# '+', rec('200','c'),
-#);
-
#_debug(0);
-#marc_compose('245',
-# 'a', suffix(
-# rec('200','b') ? '. ' :
-# rec('200','k') ? ' ; ' :
-# rec('200','d') ? ' = ' :
-# rec('200','e') ? ' : ' :
-# rec('200','f') ? ' / ' :
-# '.',
-# rec('200','a')
-# ),
-## 'h', rec('200','b'),
-# 'b', suffix(
-# ( rec('200','k') && rec('200','f') ) ? ' / ' :
-# ' ',
-# join_with(' ; ',
-# rec('200','k'),
-# ),
-# ),
-# 'b', suffix(
-# ( rec('200','d') && rec('200','f') ) ? ' / ' :
-# ' ',
-# rec('200','d'),
-# ),
-# 'b', suffix(
-# ( rec('200','e') && rec('200','f') ) ? ' / ' :
-# ' ',
-# join_with(' : ',
-# rec('200','e'),
-# ),
-# ),
-# 'c', rec('200','f'),
-## append to last subfield
-# '+', prefix('. ',
-# rec('200','c')
-# ),
-#);
-
-
-
+### 246
+## i1=1 ukoliko pravilo nalaze napomenu, ali napomenu necemo pisati ponovo u 500
+## i1=3 ako pravlo na nalze napomenu
+## vidi na wiki
+## i2 - pogledati za svaku bazu sto su ti naslovi, pa onda oderditi indikatoda oderditi indikatoree
+marc_indicators('246', 3, ' ');
+marc('246','a',
+ rec('532')
+);
### 250
-# zapisima koji nemaju potpolje, dodaje se ^a u modify - provjeriti
+## zapisima koji nemaju potpolje, dodaje se ^a u modify - provjeriti
marc_compose('250',
'a',suffix(
rec('205','f') ? ' / ' :
- ' ',
+ '',
rec('205','a')
),
'b', rec('205','f'),
);
-
-
### 260
-# ponovljiva potpolja u originalnom redosljedu
+## ponovljiva potpolja u originalnom redosljedu - priprema u modify
-marc_original_order('260', '210');
+ marc_original_order('260', '210');
### 300
-# urediti interpunkcije za sve kombinacije
+## urediti interpunkcije za sve kombinacije
marc('300','a',
suffix(
rec('215','c') ? ' : ' :
rec('215','d') ? ' ; ' :
rec('215','e') ? ' + ' :
- ' ',
+ '',
rec('215','a')
)
);
-
marc('300','b',
suffix(
( rec('215','c') && rec('215','d') ) ? ' ; ' :
( rec('215','c') && rec('215','e') ) ? ' + ' :
- ' ',
+ '',
rec('215','c')
)
);
-
marc('300','c',
suffix(
rec('215','e') ? ' + ' :
- ' ',
+ '',
rec('215','d')
)
);
-
marc('300','e',
rec('215','e')
);
-### 362
-# brojèani podaci za nakladnièku cjelinu
-# ???
+### 362 - brojèani podaci za nakladnièku cjelinu - to mi nemamo, polje se koristi samo za èasopise
+
+
+# if ( ! rec('225','z') ) {
-### 440
-# 2.ind. prema jeziku i èlanu
+# ako je naslov nakladnièke cjeline slo¾en, podatak se zapisuje u 490, s pripadajuæim 830
+
+#if ( frec('225','a') =~ m/[\/=:]/ ) {
+#
+##_debug(3);
+#
+#### 490
+### 490: Subfield _p is not allowed.
+#
+#marc_indicators('490','0',' ');
+#
+#marc_template(
+# from => 225, to => 490,
+# subfields_rename => [
+# 'a' => 'a',
+# 'x' => 'x',
+# 'v' => 'v',
+# 'h' => 'n',
+# 'i' => 'p',
+# 'w' => 'v',
+# ],
+# isis_template => [
+# 'a',
+# 'a ;|v',
+# 'a,|x ;|v',
+# 'a,|x ;|w',
+# 'a,|x.|h ;|w',
+# 'a.|h,|i ;|v',
+# 'a ;|v.|i',
+# 'a.|i ;|w',
+# 'a,|x',
+# # greske:
+# 'i ;|v',
+# 'i'
+# ],
+#);
+
+#marc_template(
+# from => 225, to => 490,
+# from => "{ z => 1 }",
+# to => "{ a => 1 }",
+#
+# marc_template => [
+# 'a',
+# ],
+#);
+
+# marc_indicators('830',' ','0');
+# i2 ovisi èlanu - popraviti
+#
+# marc('830','a',
+# regex('s/(^.*)\s\/\s(.*)/$1 ($2)/g',
+# rec('225','a')
+# )
+# );
+
+
+#} else {
+
+### 440 - indikatori
+## 2.ind. prema jeziku i èlanu, uskladiti s 245
marc_indicators('440', ' ', '0');
-if ( ( rec('225','a') =~ m/^Die /) ||
- ( rec('225','a') =~ m/^Das /) ||
- ( rec('225','a') =~ m/^The /) ) {
+if ( rec('225','a') =~ m/^Einen / ) {
+ marc_indicators('440', ' ', 6);
+}
+
+if ( rec('225','a') =~ m/^Eine / ) {
+ marc_indicators('440', ' ', 5);
+}
+
+if ( rec('225','a') =~ m/^(Die|Das|Der|Ein|Les|The) / ) {
marc_indicators('440', ' ', 4);
}
-if ( ( rec('225','a') =~ m/^A /) && ( rec(101) =~ m/ENG/ ) ) {
- marc_indicators('440', ' ', 2);
+if ( rec('225','a') =~ m/^(Um|Un|An|La|Le|Il) / ) {
+ marc_indicators('440', ' ', 3);
}
-if ( ( rec('225','a') =~ m/^An /) && ( rec(101) =~ m/ENG/ ) ) {
+if ( rec('225','a') =~ m/^(A|L') / ) {
marc_indicators('440', ' ', 2);
}
-#_debug(3);
+## 440v nije ponovljivo
+
+marc_template(
+ from => 225, to => 440,
+ subfields_rename => [
+ 'a' => 'a',
+ 'x' => 'x',
+ 'v' => 'v',
+ 'h' => 'n',
+ 'i' => 'p',
+ 'w' => 'v',
+ ],
+ isis_template => [
+ 'a',
+ 'a,|x',
+ 'a,|x ;|v',
+ 'a,|x.|i',
+ 'a,|x.|i ;|w',
+ 'a,|x.|h ;|w',
+ 'a,|x.|h,|i ;|w',
+ 'a,|x ;|v.|h ;|w',
+ 'a,|x ;|v.|h,|i ;|w',
+ 'a ;|v',
+ 'a ;|v.|i',
+ 'a ;|v.|h,|i',
+ 'a ;|w',
+ 'a ;|v.|i ;|w',
+ 'a ;|v.|h,|i ;|w',
+ 'a ;|v.|h ;|w',
+ 'a.|h,|i',
+ 'a.|h,|i ;|w',
+ 'a.|i',
+ 'a.|i ;|w',
+ # gre¹ke:
+ 'a ;|v ;|w',
+ 'a.|h',
+ 'a.|h ;|w',
+ 'a.|h ;|v',
+ 'h,|i',
+ 'h ;|v',
+ 'i ;|w',
+ 'v',
+ 'w',
+ ],
+);
+
+#}
+
+#marc_template(
+# from => 225, to => 490,
+# subfields_rename => [
+# 'a' => 'a',
+# 'x' => 'x',
+# 'v' => 'v',
+# 'h' => 'n',
+# 'i' => 'p',
+# 'w' => 'v',
+# ],
+# isis_template => [
+# 'a.|h,|i ;|w',
+# 'a.|h.|w',
+# 'a.|i ;|w',
+# 'a ;|v.|i',
+# 'a ;|v.|i ;|w',
+# 'a ;|v.|h,|i ;|w',
+# 'a ;|v.|h ;|w',
+# 'a ;|v ;|w',
+# #mozda greska:
+# 'a ;|v,|x ;|w',
+# 'a ;|v,|x.|p',
+# 'a,|x ;|v',
+# 'a,|x.|p ;|w',
+# ],
+# from => "{ a => 1, i => 1, w => 1, \"x\" => 1 }",
+# to => "{ a => 1, p => 1, v => 1, \"x\" => 1 }",
+#
+# marc_template => [
+# 'a',
+# 'a ;|v',
+# 'a,|x',
+# 'a.|n', # mozda greska
+# 'a.|n,|p',
+# 'a.|p',
+# 'a ;|v.|n',
+# 'a ;|v.|n,|p', # mozda greska
+# 'n,|p',
+# 'n ;|v', # mozda greska
+# 'p ;|v',
+# 'v',
+# 'x',
+# 'x ;|v' # greska
+# ],
+#);
-marc_original_order('440','225');
+## marc_compose za 440 radi samo kad polje ni potpolja nisu ponovljiva. ne zapisuje dobro drugo pojavljivanje ^v, tj. ^v iza ^p (iz 225^w)
#marc_compose('440',
# 'a', suffix(
-# rec('225','i') ? '. ' :
+# ( rec('225','v') ) ? ' ;' :
+# ( rec('225','w') ) ? ' ; ' :
+# ( rec('225','x') ) ? ',' :
+# ( rec('225','h') || rec('225','i') ) ? '.' :
+# '.',
+# frec('225','a')
+# ),
+# 'x',suffix(
+# ( rec('225','x') && ( rec('225','h') || rec('225','i') ) ) ? '.' :
# '',
-# rec('225','a'),
+# frec('225','x')
# ),
-# 'p', suffix(
-# ( ! rec('225','x') && rec('225','i') && rec('225','v') ) ? ' ; ' :
-# ( rec('225','i') && rec('225','x') ) ? ', ' :
+# 'v',suffix(
+# ( rec('225','v') && ( rec('225','h') || rec('225','i') ) ) ? '.' :
+# ( rec('225','v') && rec('225','w') ) ? ' ; ' :
# '',
-# rec('225','i'),
+# frec('225','v')
# ),
-# 'x', suffix(
-# ( rec('225','x') && rec('225','v') ) ? ' ; ' :
+# 'n',suffix(
+# ( rec('225','h') && rec('225','i') ) ? ',' :
+# ( rec('225','h') && rec('225','w') ) ? ' ; ' :
# '',
-# rec('225','x'),
+# frec('225','h')
# ),
-# 'v', rec('225','v'),
+# 'p',suffix(
+# ( rec('225','i') && rec('225','w') ) ? ' ; ' :
+# ( rec('225','i') && rec('225','x') ) ? ',' :
+# '',
+# frec('225','i')
+# ),
+## 225w treba ici u 440v, na kraj
+# '+', join_with(' ; ',
+# rec('225','w'),
+# )
#);
-## ovo radi samo kad 225 nije ponovljivo
+#marc_original_order('440','225');
+
#if (
# count( lookup(
# ) ) > 1
#) {
-#marc_compose('440',
-# 'a', suffix(
-# ( rec('225','x') ) ? ', ' :
-# ( rec('225','v') || rec('225','w') ) ? ' ; ' :
-# ( rec('225','h') || rec('225','i') ) ? '. ' :
-# '',
-# join_with(' / ',
-# join_with(' : ',
-# join_with(' = ',
-# rec('225','a'),
-# rec('225','d'),
-# ),
-# rec('225','e'),
-# ),
-# rec('225','f'),
-# ),
-# ),
-# 'x', suffix(
-# ( rec('225','x') && rec('225','v') ) ? ' ; ' :
-# ( rec('225','x') && ( rec('225','h') || rec('225','i') ) ) ? '. ' :
-# '',
-# rec('225','x'),
-# ),
-# 'v', suffix(
-# ( rec('225','v') && rec('225','h') || rec('225','i') ) ? '. ' :
-# '',
-# join_with('; ',
-# rec('225','v'),
-# )
-# ),
-# 'n', suffix(
-# ( rec('225','h') && rec('225','p') || rec('225','y') ) ? ', ' :
-# '',
-# rec('225','h'),
-# ),
-# 'p', suffix(
-# ( rec('225','i') && rec('225','x') ) ? ', ' :
-# ( rec('225','i') && rec('225','v') ) ? ' ; ' :
-# '',
-# rec('225','i'),
-# ),
-# 'x', suffix(
-# ( rec('225','y') && rec('225','v') ) ? ' ; ' :
-# '',
-# rec('225','y'),
-# ),
-# 'v', rec('225','w'),
-# );
-#
-# marc_compose('440',
-# 'a', suffix(
-# rec('225','k') ? ' ; ' :
-# '',
-# join_with(' / ',
-# rec('225','b'),
-# rec('225','j')
-# ),
-# ),
-# 'v',
-# rec('225','k'),
-# );
-#
-#
-# marc_compose('440',
-# 'a', suffix(
-# rec('225','s') ? ' ; ' :
-# '',
-# join_with(' / ',
-# rec('225','c'),
-# rec('225','r')
-# ),
-# ),
-# 'v',
-# rec('225','s'),
-# );
-
-#}
-
-#if ( rec('225','i') ) {
-# marc('440','p',
-# prefix('. ',
-# rec('225','i')
-# ),
-# );
-#}
-#
-#if ( rec('225','v') ) {
-# marc('440','v',
-# prefix(' ; ',
-# rec('225','v'),
-# ),
-# );
-#}
#_debug(0);
-### 50x
+### 500
marc('500','a',
rec('300')
);
### 502 - bilje¹ka o disertacijama
-# odgovarajuæeg polja nema u originalnim podacima. mo¾da se mo¾e pretpostaviti?
+## odgovarajuæeg polja nema u originalnim podacima. mo¾da se mo¾e pretpostaviti?
### 504
rec('320')
);
-## napomene uz konverziju polja 327 (sadrzaj):
-# NSK konvertira 327 (NP) u 501 (R)
-# u LOC konv. tablici stoji 327 (NP) u 505 (NR)
-# standard i validacije dopu¹taju 501 (R) i 505 (R)
-
-## 505
-# FFPS 327 - sadrzaj
-
-if ( config() =~ m/ffps/ || config() =~ m/fftu/ ) {
+### 505
+## FFPS 327 - sadrzaj
+## NSK konvertira 327 (NP) u 501 (R)
+## u LOC konv. tablici stoji 327 (NP) u 505 (NR)
+## standard i validacije dopu¹taju 501 (R) i 505 (R)
+## za svaku bazu posebno provjeriti sta je u poljima 327 i 330
+if ( config() =~ m/ffps|fftu/ ) {
marc_indicators('505', '0', ' ');
marc('505','a',
regex('s/\s*[\\r\\n]+\s*\**\s*/ ; /g',
);
}
-
-# NSK konvertira 330 (P) u 520 (P) = LOC konv. tablica
-
-
### 520
-# mo¾da i polje 520y - jezik napomene ako je uvijek isti jezik?
-
-# FFPS 330 (NP) - sa¾etak
+## NSK konvertira 330 (P) u 520 (P) = LOC konv. tablica
if ( config() =~ m/ffps/ ) {
marc('520','a',
regex('s/[\\r\\n]+/. /g',
}
### 526 - STUDY PROGRAM INFORMATION NOTE
-# provjeriti za svaku bazu sta je tocno u 996?
+## provjeriti za svaku bazu sta je u 996?
marc_indicators('526', 8, ' ');
rec('337','a')
);
-
-### 246
-
-marc_indicators('246', 1, 3);
-marc('246','a',
- rec('532')
-);
-
### 655
marc_indicators('655', ' ', 4);
);
### 653
+## da li ponovljivo polje ili potpolje, pogledati u Koha tags
-marc_indicators('653', 0, ' ');
+marc_indicators('653', ' ', ' ');
marc('653','a',
rec('610')
);
### 700
+## ako je u originalu ponovljivo polje treba bioti i konvertirano u ponovljivo !!
+## ako ima samo podpolje a onda je pseudonim - popraviti indikator
marc_indicators('700', 1, ' ');
-if ( rec('701') ) {
-marc('700','4',
- 'aut'
-);
-}
-
marc('700','a',
- join_with(', ',
- rec('701', 'a'),
- rec('701', 'b')
- )
+ rec('701', 'a'),
);
-
marc('700','a',
join_with(', ',
rec('701', 'c'),
rec('701', 'd')
)
);
-
marc('700','a',
join_with(', ',
rec('701', 'e'),
rec('701', 'f')
)
);
-
marc('700','a',
join_with(', ',
rec('701', 'g'),
rec('701', 'h')
)
);
-
-
marc('700','a',
- join_with(', ',
rec('702', 'a'),
- rec('702', 'b')
- )
);
-
-
-# ako je u originalu ponovljivo polje treba biti i konvertirano u ponovljivo !!
-
-
marc('700','a',
join_with(', ',
rec('702','c'),
rec('702','d')
)
);
-
marc('700','a',
join_with(', ',
rec('702','e'),
rec('702','f')
)
);
-
marc('700','a',
join_with(', ',
rec('702','g'),
#_debug(0);
-### 740
+### 740 - sta s tim?
marc_indicators('740', 0, ' ');
# };
-# generiranje zapisa o nakladnièkoj cjelini i povezivanje podreðenog zapisa s nadreðenim
+# -------------------------------------------------------------------
+### 760 w
+## generiranje zapisa o nakladnièkoj cjelini i povezivanje podreðenog zapisa s nadreðenim
-if (
- rec('225','a') # da li je nakladnièka cjelina?
-) {
-
-my $series_key =
-join_with('',
- rec('225','a'),
- rec('210','a'),
- rec('210','b'),
-);
-
-my $series = get( $series_key );
-
-if ($series) {
- warn "nije novi";
-} else {
-
-$series = join_with('',
- config(),
- 'LS',
- rec('000')
-);
-
-set( $series_key => $series );
-
-} # $series
-} # nakladnièka cjelina
-
-my $series_key = join_with('',
- rec('225','a'),
- rec('210','a'),
- rec('210','b'),
-);
+#if (
+# rec('225','a') # da li je nakladnièka cjelina?
+#) {
-if ($series_key) {
+#my $series_key =
+#join_with('',
+# rec('225','a'),
+# rec('210','a'),
+# rec('210','b'),
+#);
+#
+#my $series = get( $series_key );
+#
+#if ($series) {
+# warn "nije novi";
+#} else {
+#
+#$series = join_with('',
+# uc( config() ),
+# ' LS',
+# rec('000')
+#);
+#
+#set( $series_key => $series );
+#
+#} # $series
+#} # nakladnièka cjelina
+#
+#my $series_key = join_with('',
+# rec('225','a'),
+# rec('210','a'),
+# rec('210','b'),
+#);
+#
+#if ($series_key) {
+#
+# marc_indicators('760', 0, ' ');
+#
+# marc('760','t',
+# rec('225','a')
+# );
+# marc('760','w',
+# get( $series_key )
+# );
+#}
- marc_indicators('760', 0, ' ');
-
- marc('760','w',
- get( $series_key )
- );
-}
-### testing
+# ## testing
#
# my $dup_key = join_with('',
# rec('200','a'),
# rec('452','1')
# );
#
+# -------------------------------------------------------------------
+### 774 - Constituent Item Entry - to bi trebali koristiti ali ne koristimo jer NSK to koristi za ne¹to drugo
+### 787 - Nonspecific Relationship Entry
-### 852 - lokacija
-
-marc_indicators('852', 4, ' ');
-
-marc('852','j',
- join_with(' ',
- rec('990')
- )
-);
+#marc_indicators('787','0',' ');
+#
+#marc_compose('787',
+# 'g', rec('230','v'),
+# 't', rec('230','a'),
+# 'b', rec('240','a'),
+# 'd', rec('250','a'),
+# 'd', rec('250','d'),
+# 'h', rec('260','a'),
+# 'k', rec('270','a'),
+# 'n', join_with('. - ',
+# rec('280'),
+# ),
+# 'x', join_with(', ',
+# rec('290'),
+# )
+#);
+#marc_compose('787',
+# 'g', rec('231','v'),
+# 't', rec('231','a'),
+# 'b', rec('241','a'),
+# 'd', rec('251','a'),
+# 'd', rec('251','d'),
+# 'h', rec('261','a'),
+# 'k', rec('271','a'),
+# 'n', join_with('. - ',
+# rec('281'),
+# ),
+# 'x', join_with(', ',
+# rec('291'),
+# )
+#);
+#marc_compose('787',
+# 'g', rec('232','v'),
+# 't', rec('232','a'),
+# 'b', rec('242','a'),
+# 'd', rec('252','a'),
+# 'd', rec('252','d'),
+# 'h', rec('262','a'),
+# 'k', rec('272','a'),
+# 'n', join_with('. - ',
+# rec('282'),
+# ),
+# 'x', join_with(', ',
+# rec('292'),
+# )
+#);
+#marc_compose('787',
+# 'g', rec('233','v'),
+# 't', rec('233','a'),
+# 'b', rec('243','a'),
+# 'd', rec('253','a'),
+# 'h', rec('263','a'),
+# 'k', rec('273','a'),
+# 'n', join_with('. - ',
+# rec('283'),
+# ),
+# 'x', join_with(', ',
+# rec('293'),
+# )
+#);
+#
+### 852 - ne koristimo, koristimo 942 i 952
### 876 - item information - basic bibliographic unit
-
-marc('876','a',
- rec('991'),
-);
+#marc('876','a',
+# rec('991','t'),
+#);
### 886 - former marc
+# inicijale treba prebaciti u neko lokalno polje, a ovo polje nam ne treba
marc_indicators('886', 2, ' ');
-
marc('886','2',
'ffmarc'
);
-
marc('886','a',
'994'
);
-
marc('886','b',
join_with(''.
'##^a',
)
);
+### KOHA items
+
+marc('942','b',
+ 'LIB'
+);
+
+
+if ( grep( m/Posebni otisak/, rec('300') ) ) {
+ marc('942','c',
+ 'SEP'
+ );
+} else {
+ marc('942','c',
+ 'KNJ'
+ );
+}
+
+marc('942','d',
+ join_with(' | ',
+ rec('990')
+ )
+);
+if ( config() =~ m/ffan/ ) {
+ my $novasig1 =
+ lookup(
+ sub { rec('C') },
+ 'ffan','mapirano',
+ sub { rec('B') },
+ sub { rec('990') }
+ );
+ my $novasig2 =
+ lookup(
+ sub { rec('C') . ' ' . rec('D') },
+ 'ffan','starasig',
+ sub { rec('A') },
+ sub { rec('000') },
+ );
+ marc('942','h',
+ $novasig1
+ );
+ marc('942','i',
+ $novasig2
+ );
+}
+
+
+if ( config() =~ m/ffsf|ffpo|fffi/ ) {
+ my $sig1 =
+ lookup(
+ sub { rec('C') },
+ 'fffi','signature',
+ sub { rec('B') },
+ sub { frec('990') },
+ );
+ if ( rec('700','a') ) {
+ marc('942','h',
+ $sig1,
+ );
+ if ( rec('200','a') =~ m/^(The|Die|Das|Der|Ein|Les) / ) {
+ marc('942','i',
+ join_with(' ',
+ regex('s/(^.{3}).*/$1/',
+ uc ( rec('700','a') )
+ ),
+ regex('s/^.{4}(.{1}).*/$1/',
+ lc ( rec('200','a') )
+ )
+ )
+ );
+ } elsif ( rec('200','a') =~ m/^(Um|Un|An|La|Le|Il) / ) {
+ marc('942','i',
+ join_with(' ',
+ regex('s/(^.{3}).*/$1/',
+ uc ( rec('700','a') )
+ ),
+ regex('s/^.{3}(.{1}).*/$1/',
+ lc ( rec('200','a') )
+ )
+ )
+ );
+ } elsif ( rec('200','a') =~ m/^Eine / ) {
+ marc('942','i',
+ join_with(' ',
+ regex('s/(^.{3}).*/$1/',
+ uc ( rec('700','a') )
+ ),
+ regex('s/^.{5}(.{1}).*/$1/',
+ lc ( rec('200','a') )
+ )
+ )
+ );
+ } elsif ( rec('200','a') =~ m/^Einen / ) {
+ marc('942','i',
+ join_with(' ',
+ regex('s/(^.{3}).*/$1/',
+ uc ( rec('700','a') )
+ ),
+ regex('s/^.{6}(.{1}).*/$1/',
+ lc ( rec('200','a') )
+ )
+ )
+ );
+ } elsif ( rec('200','a') =~ m/^(A|L) / ) {
+ marc('942','i',
+ join_with(' ',
+ regex('s/(^.{3}).*/$1/',
+ uc ( rec('700','a') )
+ ),
+ regex('s/^.{2}(.{1}).*/$1/',
+ lc ( rec('200','a') )
+ )
+ )
+ );
+ } else {
+ marc('942','i',
+ join_with(' ',
+ regex('s/(^.{3}).*/$1/',
+ uc ( rec('700','a') )
+ ),
+ regex('s/(^.{1}).*/$1/',
+ lc ( rec('200','a') )
+ )
+ )
+ );
+ }
+ } elsif ( rec('710','a') ) {
+ marc('942','h',
+ $sig1,
+ );
+ if ( rec('200','a') =~ m/^(The|Die|Das|Der|Ein|Les) / ) {
+ marc('942','i',
+ join_with(' ',
+ regex('s/(^.{3}).*/$1/',
+ uc ( rec('710','a') )
+ ),
+ regex('s/^.{4}(.{1}).*/$1/',
+ lc ( rec('200','a') )
+ )
+ )
+ );
+ } elsif ( rec('200','a') =~ m/^(Um|Un|An|La|Le|Il) / ) {
+ marc('942','i',
+ join_with(' ',
+ regex('s/(^.{3}).*/$1/',
+ uc ( rec('710','a') )
+ ),
+ regex('s/^.{3}(.{1}).*/$1/',
+ lc ( rec('200','a') )
+ )
+ )
+ );
+ } elsif ( rec('200','a') =~ m/^Eine / ) {
+ marc('942','i',
+ join_with(' ',
+ regex('s/(^.{3}).*/$1/',
+ uc ( rec('710','a') )
+ ),
+ regex('s/^.{5}(.{1}).*/$1/',
+ lc ( rec('200','a') )
+ )
+ )
+ );
+ } elsif ( rec('200','a') =~ m/^Einen / ) {
+ marc('942','i',
+ join_with(' ',
+ regex('s/(^.{3}).*/$1/',
+ uc ( rec('710','a') )
+ ),
+ regex('s/^.{6}(.{1}).*/$1/',
+ lc ( rec('200','a') )
+ )
+ )
+ );
+ } elsif ( rec('200','a') =~ m/^(A|L) / ) {
+ marc('942','i',
+ join_with(' ',
+ regex('s/(^.{3}).*/$1/',
+ uc ( rec('710','a') )
+ ),
+ regex('s/^.{2}(.{1}).*/$1/',
+ lc ( rec('200','a') )
+ )
+ )
+ );
+ } else {
+ marc('942','i',
+ join_with(' ',
+ regex('s/(^.{3}).*/$1/',
+ uc ( rec('710','a') )
+ ),
+ regex('s/(^.{1}).*/$1/',
+ lc ( rec('200','a') )
+ )
+ )
+ );
+ }
+ } elsif ( rec('200','a') =~ m/^(The|Die|Das|Der|Ein|Les) / ) {
+ marc('942','h',
+ $sig1,
+ );
+ marc('942','i',
+ regex('s/^.{4}(.{3}).*/$1/',
+ uc ( rec('200','a') )
+ ),
+ );
+
+ } else {
+ marc('942','h',
+ $sig1,
+ );
+ marc('942','i',
+ regex('s/(^\w{3}).*/$1/',
+ uc ( rec('200','a') )
+ )
+ )
+ }
+} # if config()
+
+if ( ( rec('230') || rec('231') || rec('232') || rec('233') ) ) {
+ warn "nema primjeraka";
+} else {
+ marc('952','8',
+ rec('991','8')
+ );
+ marc('952','a',
+ rec('991','a')
+ );
+ marc('952','b',
+ rec('991','b')
+ );
+ marc('952','c',
+ rec('991','c'),
+ );
+ marc('952','i',
+ rec('991','i')
+ );
+ marc('952','y',
+ rec('991','y')
+ );
+}
} # polje 200a
+# } sig