kbart, Sage, Taylor and Francis
[webpac2] / conf / normalize / ff-libri.pl
1
2 # Ova datoteka sadrĀ¾i pravila za generiranje MARC21 ISO 2709 izlazne
3 # datoteke. Ulazni format je CDS/ISIS izvorni format, sa zapisima u
4 # UNIMARC formatu, sa viĀ¹estrukim odstupanjima od standarda.
5
6
7 ## lookup rezultat za sabrana djela (probna procedura za filozofiju od koje se odustalo)
8 # my $sabrana;
9
10
11 ## sve skupa se konvertira tek ako postoji polje 200^a
12 if ( rec('200','a') ) {
13
14 ### LEADER
15
16 ## LDR 05 - n - new
17 marc_leader('05','n');
18
19 ## LDR 06 - a - language material 
20 marc_leader('06','a');
21
22 ## LDR 07 - m - Monograph/item
23 marc_leader('07','m');
24
25 # ovo je bila proba za filozofiju
26 # if ( config() =~ m/fffi/ ) { 
27 #       $sabrana = 
28 #               lookup(
29 #                       sub{ rec('A') },
30 #                       'fffi','sabrana',
31 #                       sub { rec('B') },
32 #                       sub { rec('000') }
33 #               );
34 # } 
35 #
36 # if ( ! $sabrana ) {
37 #       marc_leader('07','m');
38 # } else {
39 #       marc_leader('07','c');
40 # }
41
42 ## LDR 17 - Encoding level ; 7 - minimal level, u - unknown
43 marc_leader('17','u');
44
45 ## LDR 18 - i - isbd 
46 marc_leader('18','i');
47
48 ## LDR 19 - Multipart resource record level ; # - Not specified or not applicable, a - Set, b - Part with independent title, c - Part with dependent title 
49
50 #if ( ( ! $sabrana ) && ( rec('230') || rec('231') || rec('232') || rec('233') ) ) { 
51 #       marc_leader('19','a');
52 #}
53
54 if ( ( rec('230') || rec('231') || rec('232') || rec('233') ) ) { 
55         marc_leader('19','a');
56 }
57
58 ### 008 - All materials
59 ## dodati sve moguce slucajeve za datum, popuniti ono sto nedostaje
60 ## provjereno: fi
61
62 if ( rec('994','c') =~ m/\d{8}/ ) {
63         marc_fixed('008','00',
64                 regex('s/^\d\d//',
65                         rec('994','c')
66                 ),
67         );
68 } elsif ( rec('994','c') =~ m/\d{6}/ ) {
69         marc_fixed('008','00',
70                 regex('s/^\d\d//',
71                         rec('994','c')
72                 ),
73         );
74         marc_fixed('008','04',
75                 '01'
76         );
77 } elsif ( rec('994','c') =~ m/\d{4}/ ) {
78         marc_fixed('008', 00,
79                 regex('s/^\d\d//',
80                         rec('994','c')
81                 ),
82         );
83         marc_fixed('008','02',
84                 '0101'
85         );
86 } else {
87         marc_fixed('008','00',
88                 '010101'
89         );
90 }
91
92 #warn( dump(
93 #       regex('s/^\d\d//',
94 #               rec('994','c')
95 #       ),
96 #)
97 #);
98
99 ## 008 06 - Type of date/Publication status
100
101 ## 008 07-10 - Date 1
102 ## 008 11-14 - Date 2 
103 ## 210d kroz modify postaje 210c
104
105 if ( rec('210','c') ) {
106         my $d1 = '';
107         my $d2 = '';
108         if ( rec('210','c') =~ m/(\d{4})-/ ) {
109                 marc_fixed('008','06','m');
110                 if ( rec('210','c') =~ m/(\d{4})-/ ) {
111                         $d1 = $1;
112                         $d2 = '9999';
113                 }
114                 if ( rec('210','c') =~ m/-(\d{4})/ ) {
115                         $d2 = $1;
116                 }
117         } else {
118                 marc_fixed('008','06','s');
119                 if ( rec('210','c') =~ m/(\d{4})/ ) {
120                         $d1 = $1;
121                 }
122                 if ( rec('210','c') =~ m/(\d{2})(--|__)/ ) {
123                         $d1 = $1.'uu';
124                 } 
125                 if ( rec('210','c') =~ m/(\d{3})(-|_)/ ) {
126                         $d1 = $1.'u';
127                 }
128         }
129                 
130 #       if ( rec('210','c') =~ m/(\?)/ ) {
131 #               marc_fixed('008','06','q');
132 #               if ( rec('210','c') =~ m/(\d{2})(--|__)/ ) {
133 #                       $d1 = $1.'uu';
134 #               } 
135 #               if ( rec('210','c') =~ m/(\d{3})(-|_)/ ) {
136 #                       $d1 = $1.'u';
137 #               }
138 #               if ( rec('210','c') =~ m/(\d{4})/ ) {
139 #                       $d1 = $1;
140 #               }
141 #       } elsif ( rec('210','c') =~ m/(\d{4})-/ ) {
142 #               if ( $sabrana ) { 
143 #                       marc_fixed('008','06','i');
144 #               } else {
145 #                       marc_fixed('008','06','m');
146 #               }
147 #               marc_fixed('008','06','m')
148 #               if ( rec('210','c') =~ m/(\d{4})-/ ) {
149 #                       $d1 = $1;
150 #                       $d2 = '9999';
151 #               }
152 #               if ( rec('210','c') =~ m/-(\d{4})/ ) {
153 #                       $d2 = $1;
154 #               }
155 #       } else {
156 #               marc_fixed('008','06','s');
157 #               if ( rec('210','c') =~ m/(\d{4})/ ) {
158 #                       $d1 = $1;
159 #               }
160 #       }
161
162         marc_fixed('008','07',$d1);             # 07-10 - Date 1
163         marc_fixed('008','11',$d2);             # 07-10 - Date 1
164
165 } else {
166         marc_fixed('008','06','n');             # 06 - n = unknown date
167         marc_fixed('008','07','uuuu');
168 }
169
170
171
172 ## 008 15-17 - Place of publication, production, or execution - ako nema 102, popunjava se s |
173 marc_fixed('008','15','|||');
174
175 #marc_fixed('008','15', 
176 #       lc ( rec('102') ) 
177 #);
178
179 #my $zemlja = 
180 #       lookup(
181 #               sub { rec('B') },
182 #               'kodovi','zemlje',
183 #               sub { rec('A') },
184 #               sub { 
185 #                       regex('s/[\s;:]/g',
186 #                               rec('210','a') 
187 #                       )
188 #               },
189 #       );
190
191
192 ## 008 35-37 - Language
193 marc_fixed('008','35',
194         # first( lc(rec('101')) )               
195         lc( frec('101'))                
196 );
197                                         
198 ## 008 38 - Modified record
199 marc_fixed('008','38','|');             
200
201 ## 008 39 - Cataloging source - d (other)
202 marc_fixed('008','39','d');             
203
204 ### 008 - Books - raspraviti upotrebu ovih polja
205 ## 008 18-21 - Illustrations
206 if ( rec('215','c') && rec('215','c') =~ m/ilustr/ ) {
207         marc_fixed('008','18','a')
208 }
209
210 ## 008 22 - Target audience
211 marc_fixed('008','22','|');
212
213 ## 008 23 - Form of item
214 marc_fixed('008','23','|');
215
216 ## 008 24-27 - Nature of contents
217 marc_fixed('008','24','||||');
218
219 ## 008 28 - Government publication
220 marc_fixed('008','28','|');
221
222 ## 008 29 - Conference publication
223 marc_fixed('008','29','|');
224
225 ## 008 30 - Festschrift
226 marc_fixed('008','30','|');
227
228 ## 008 31 - Index
229 marc_fixed('008','31','|');
230
231 ## 008 32 - Undefined
232 ## 008 33 - Literary form
233 marc_fixed('008','33','|');
234
235 ## 008 34 - Biography
236 marc_fixed('008','34','|');
237
238 ### 020
239 ## postoji modify za polje 10 -> drugi ISBN poĆØinje prefixom "ISBN" koji se miĆØe (pr. u sfb)
240 #if ( frec('10') ne ( frec('290') ) ) {
241         if ( rec('10','a') !~ /pogre/ ) {
242                 marc('020','a', 
243                         # isbn_13(
244                                 regex('s/\s\s/ /g',
245                                 # regex('s/\(\d\)\(/$1 \(//g',
246                                         rec('10','a')
247                                 )
248                         # )
249                 ); 
250         }
251         if ( rec('10','a') =~ /pogre/ ) {
252                 marc('020','z',
253                         regex('s/\s\s/ /g',
254                                 rec('10','a')
255                         )
256                 );
257         }
258         marc('020','z',
259                 rec('10','z')
260         );
261 #}
262
263 #warn( 
264 #       dump(
265 #               frec('10')
266 #       ),
267 #);
268
269 ### 035$
270 ## marc 035a - System Number 
271 ## polje moĀ¾e sadrĀ¾avati slova i razmake
272 ## moguƦ problem u pretraĀ¾ivanju ako ima zagrade, kako bi trebalo po standardu
273
274 marc('035','a',
275 join_with('',
276         # config('input normalize path'),
277         # config('name'),
278         'HR-ZaFF ',
279         config(),
280         'L',
281         # config('input name'),
282         # id(),
283         # rec('994','a'),
284         rec('000')
285         )
286 );
287
288 ### 040
289 ## za sve je isti
290
291 marc('040','a',
292         'HR-ZaFF'
293 );
294 marc('040','b',
295         'hrv'
296 );
297 marc('040','c',
298         'HR-ZaFF'
299 );
300 marc('040','e',
301         'ppiak'
302 );
303
304 ### 041 - indikatori
305 ## pretpostavke o indikatorima
306 ## 1. Ako postoji polje 300 i ono sadrĀ¾i /Prijevod/ ili /Izv. stv. nasl./, i1 = 1
307 ## (Da li je napomena uvijek pisana?)
308 ## 2. Podatak o prevodiocu u 200g. Problem: razliĆØiti oblici rijeĆØi, razliĆØiti jezici.
309 ## 3. Ako u UDK oznaci postoji "=", bez zagrada, onda je to prijevod
310 ## (ako postoje zagrade pr. 94(=411.16) onda su to pomoƦne oznake)
311 ## pr. 821.111-2=163.42 je prijevod engleske drame na HR. 
312 ## to ima samo za knjiĀ¾evna djela, eseje.... 
313 ## ovo treba kasnije ispravljati
314
315 #if ( rec('675') =~ m/\d=\d/ ) ?
316
317 if ( 
318         grep( m/prijevod/i, rec('300') ) 
319         || grep( m/nasl.*izv/i, rec('300') ) 
320 #       ( frec('300') =~ m/Prijevod/ )
321 #       || ( rec('300') =~ m/izvorni stvarni naslov/i )
322 #       || ( rec('300') =~ m/naslov izvornika/i )
323 #       grep( m/[prijevod|stvarni\snaslov]/i, rec('300') ) 
324 ) {
325         marc_indicators('041', 1, ' ');
326         marc_repeatable_subfield('041','a',
327                 map { lc($_) } rec('101')
328         );
329 } elsif ( 
330         count( rec('101') ) > 1 
331 ) {
332         marc_indicators('041', 0, ' ');
333         marc_repeatable_subfield('041','a',
334                 map { lc($_) } rec('101')
335         );
336 }
337
338 ### 041
339 ## ponovljivo polje (101) konvertira se u ponovljivo potpolje (041a)
340 ## koristi se kad ima viĀ¹e od jednog jezika, ili kad se radi o prijevodu
341 ## nadopuniti
342
343 ### 044
344 ## koristi se kad ima viĀ¹e zemalja izdavanja
345
346 ### 080
347 ## 675 podpolja b, c, d ... - Ā¹to s njima? - provjeriti za svaku bazu
348 ## fi: abcd
349 ## sk: ima \r\n na kraju
350
351 marc('080','a',
352         rec('675','a')
353 );
354
355 marc('080','a',
356         rec('675','b')
357 );
358
359 marc('080','a',
360         rec('675','c')
361 );
362
363 marc('080','a',
364         rec('675','d')
365 );
366
367
368 ### 084 - other classification (R)
369 ## NSK ga koristi za struĆØnu oznaku NSK iz polja 681
370 ## NSK konvertira polje 686 u 084, u skladu s LOC konv. tablicom
371 ## polje 686 koristi FFPS. joĀ¹ netko?
372
373 marc('084','2',
374         'APA CC'
375 );
376 marc('084','a',
377         rec('686')
378 );
379
380 ### 100 
381 ## I1 = 0 ako je pseudonim (ima 700a, nema 700b)
382
383 if ( rec('700','a') && ! rec('700','b') ) {
384         marc_indicators('100', 0, ' ');
385 } else {
386         marc_indicators('100', 1, ' ');
387 }
388
389 marc('100','a',
390         join_with(', ',
391                 rec('700', 'a'),
392                 rec('700', 'b')
393         )
394 );
395
396 ### formalna odrednica - iz 503 u 110, i1=0, i2=1
397
398 ### 111 i 110
399 ## provjeriti za svaku bazu
400 ## konverzija u 110 ili 111 ovisno o postojanju/nepostojanju nekih polja - provjeriti ispise naslova iz svake zbirke - moguƦe su greĀ¹ke.
401 ## popraviti interpunkciju
402
403 # ovo vrijedi za FFSFB
404 if ( rec('710','d') || rec('710','e') || rec('710','f') ) {
405
406 marc_indicators('111', 2, ' ');
407
408 marc_compose('111',
409         'a', suffix(
410                 rec('710','b') ? '.' :
411                         '',
412                         rec('710','a'),
413         ),
414         'e', rec('710','b'),
415         'n', prefix(
416                 rec('710','d') ? '(' :
417                         '',
418                         rec('710','d')
419         ),
420         'd', prefix(
421                 ( ! rec('710','d') ) ? '(' :
422                 ( ! rec('710','e') ) ? '(' :
423                         '; ',
424                         rec('710','f'),
425         ),
426         'c', prefix(
427                 ( rec('710','e') && ( rec('710','d') || rec('710','f') ) ) ? '; ' :
428                 ( ! rec('710','d') && ! rec('710','f') )  ? '(' :
429                         '',
430                         rec('710','e'),
431         ),
432         '+',')',
433 );
434 } else {
435         marc_indicators('110', 2, ' ');
436         marc('110','a',
437                 rec('710','a')
438         );
439         marc('110','b',
440                 rec('710','b')
441         );
442         if ( rec('710','c') ) {
443                 marc('110','c',
444                         surround('(', ')', rec('710','c'))
445                 );
446         }
447 }
448
449 ### 245 indikatori
450 ## i1 = 0 za anonimne publikacije, i1 = 1 ako postoji 700 ili 710
451 ## i2 = pretpostavlja se na temelju ĆØlana na poĆØetku naslova i jezika
452 ## treba provjeriti
453
454 my $titleind1;
455
456 if ( rec('700') || rec('710') ) {
457         $titleind1 = 1;
458 } else {
459         $titleind1 = 0;
460 }
461         
462 marc_indicators('245', $titleind1, 0);
463
464 if ( rec('200','a') =~ m/^Einen / ) {
465         marc_indicators('245', $titleind1, 6);
466
467 if ( rec('200','a') =~ m/^Eine / ) {
468         marc_indicators('245', $titleind1, 5);
469
470 if ( rec('200','a') =~ m/^(Die|Das|Der|Ein|Les|Los|The) / ) {
471         marc_indicators('245', $titleind1, 4);
472
473 if ( rec('200','a') =~ m/^(Um|Un|An|La|Le|Lo|Il) / ) { 
474         marc_indicators('245', $titleind1, 3);
475
476 if ( ( rec('101') =~ m/ENG/ ) && ( rec('200','a') =~ m/^A / ) ) { 
477         marc_indicators('245', $titleind1, 2);
478 }
479 if ( rec('200','a') =~ m/^L / ) { 
480         marc_indicators('245', $titleind1, 2);
481
482 if ( rec('200','a') =~ m/^L'/ ) { 
483         marc_indicators('245', $titleind1, 2);
484
485
486
487 ### 245
488 ## postoji modify
489 ## da li treba makivati razmake u inicijalima?
490
491 #_debug(3);
492
493 marc_compose('245',
494         'a', suffix(
495                 ( ! ( rec('200','d') || rec('200','e') || rec('200','k') ) ) && ( rec('200','f') ) ? ' /' :  
496                 ( rec('200','d') ) ? ' =' :
497                 ( rec('200','e') ) ? ' :' :
498                 ( rec('200','k') ) ? ' ;' :
499                         '.', 
500                         rec('200','a'),
501         ),
502         'b', suffix(
503                 ( rec('200','d') && rec('200','f') ) ? ' /' : 
504                 ( rec('200','d') && rec('200','c') ) ? '.'  : 
505                         '',
506                         rec('200','d'),
507         ),
508         'b', suffix(
509                 ( rec('200','e') && rec('200','f') ) ? ' /' : 
510                 ( rec('200','e') && rec('200','c') ) ? '.'  : 
511                         '',
512                         rec('200','e'),
513         ),
514         'b', suffix(
515                 ( rec('200','k') && rec('200','f') ) ? ' /' : 
516                 ( rec('200','k') && rec('200','c') ) ? '.'  : 
517                         '',
518                         rec('200','k'),
519         ),
520         'c', suffix(
521                 ( rec('200','f') && rec('200','c') ) ? '. ' :
522                         '',
523                         join_with(' ; ',
524                                 regex('s/(\S\.)\s(\S\.\s)/$1$2/g',
525                                         rec('200','f'),
526                                 ),
527                                 regex('s/(\S\.)\s(\S\.\s)/$1$2/g',
528                                         rec('200','g')
529                                 )
530                         )
531         ),
532         ## append to last subfield
533         '+', suffix('.',
534                 join_with(' / ',
535                         rec('200','c'),
536                         rec('200','x')
537                 )
538         ),
539 );
540
541 #_debug(0);
542
543 ### 246
544 ## i1=1 ukoliko pravilo nalaĀ¾e napomenu, ali napomenu necemo pisati ponovo u 500
545 ## i1=3 ako pravlo na nalaĀ¾e napomenu
546 ## vidi na wiki
547 ## i2 - pogledati za svaku bazu sto su ti naslovi, pa onda oderditi indikatoda oderditi indikatoree
548 marc_indicators('246', 3, ' ');
549 marc('246','a',
550         rec('532')
551 );
552
553 ### 250
554 ## zapisima koji nemaju potpolje, dodaje se ^a u modify - provjeriti za svaku bazu
555 marc_compose('250',
556         'a',suffix(
557                 rec('205','f') ? ' / ' : 
558                         '',
559                         rec('205','a')
560         ),
561         'b', rec('205','f'),
562 );
563
564 ### 260
565 ## ponovljiva potpolja u originalnom redosljedu - priprema u modify
566 marc_original_order('260', '210');
567
568
569 ### 300
570 ## urediti interpunkcije za sve kombinacije
571 marc('300','a',
572         suffix(
573                 rec('215','c') ? ' : ' :
574                 rec('215','d') ? ' ; ' :
575                 rec('215','e') ? ' + ' :
576                         '',
577                         rec('215','a')
578         )
579 );
580 marc('300','b',
581         suffix(
582                 ( rec('215','c') && rec('215','d') ) ? ' ; ' :
583                 ( rec('215','c') && rec('215','e') ) ? ' + ' :
584                         '',
585                         rec('215','c')
586         )
587 );
588 marc('300','c',
589         suffix(
590                 rec('215','e') ? ' + ' :
591                         '',
592                         rec('215','d')
593         )
594 );
595 marc('300','e',
596         rec('215','e')
597 );
598
599 ### 362 - brojĆØani podaci za nakladniĆØku cjelinu - to mi nemamo, polje se koristi samo za ĆØasopise
600 ## i1 = 0 - formalizirani oblik navoda
601 ## i1 = 1 - neformalizirani
602 ## i2 nema
603
604 # if ( ! rec('225','z')  ) {
605
606 # ako je naslov nakladniĆØke cjeline sloĀ¾en, podatak se zapisuje u 490, s pripadajuƦim 830
607
608 #if (  frec('225','a') =~ m/[\/=:]/  ) {
609 #
610 ##_debug(3);
611 #
612 #### 490
613 ### 490: Subfield _p is not allowed. 
614 #
615 #marc_indicators('490','0',' ');
616 #
617 #marc_template(
618 #       from => 225, to => 490,
619 #       subfields_rename => [
620 #               'a' => 'a',
621 #               'x' => 'x',
622 #               'v' => 'v',
623 #               'h' => 'n',
624 #               'i' => 'p',
625 #               'w' => 'v',
626 #       ],
627 #       isis_template => [
628 #               'a',
629 #               'a ;|v',
630 #               'a,|x ;|v',
631 #               'a,|x ;|w',
632 #               'a,|x.|h ;|w',
633 #               'a.|h,|i ;|v',
634 #               'a ;|v.|i',
635 #               'a.|i ;|w',
636 #               'a,|x',
637 #               # greske:
638 #               'i ;|v',
639 #               'i'
640 #       ],
641 #);
642
643 #marc_template(
644 #       from => 225, to => 490,
645 #         from => "{ z => 1 }",
646 #           to => "{ a => 1 }",
647 #
648 #       marc_template => [
649 #               'a',
650 #       ],
651 #);
652
653 # marc_indicators('830',' ','0');
654 # i2 ovisi ĆØlanu - popraviti 
655 #
656 # marc('830','a',
657 #       regex('s/(^.*)\s\/\s(.*)/$1 ($2)/g',
658 #               rec('225','a')
659 #       )
660 # );
661
662
663 #} else {
664
665 ### 440 - indikatori
666 ## 2.ind. prema jeziku i ĆØlanu, uskladiti s 245
667
668 marc_indicators('440', ' ', '0');
669
670 if ( rec('225','a') =~ m/^Einen / ) {
671                 marc_indicators('440', ' ', 6);
672
673
674 if ( rec('225','a') =~ m/^Eine / ) {
675                 marc_indicators('440', ' ', 5);
676
677
678 if ( rec('225','a') =~ m/^(Die|Das|Der|Ein|Les|The) / ) {
679                 marc_indicators('440', ' ', 4);
680
681
682 if ( rec('225','a') =~ m/^(Um|Un|An|La|Le|Il) / ) { 
683                 marc_indicators('440', ' ', 3);
684
685
686 if ( rec('225','a') =~ m/^(A|L') / ) { 
687                 marc_indicators('440', ' ', 2);
688
689
690 ## 440v nije ponovljivo
691
692 marc_template(
693         from => 225, to => 440,
694         subfields_rename => [
695                 'a' => 'a',
696                 'x' => 'x',
697                 'v' => 'v',
698                 'h' => 'n',
699                 'i' => 'p',
700                 'w' => 'v',
701         ],
702         isis_template => [
703                 'a',
704                 'a,|x',
705                 'a,|x ;|v',
706                 'a,|x.|i',
707                 'a,|x.|i ;|w',
708                 'a,|x.|h ;|w',
709                 'a,|x.|h,|i ;|w',
710                 'a,|x ;|v.|h ;|w',
711                 'a,|x ;|v.|h,|i ;|w',
712                 'a ;|v',
713                 'a ;|v.|i',
714                 'a ;|v.|h,|i',
715                 'a ;|w',
716                 'a ;|v.|i ;|w',
717                 'a ;|v.|h,|i ;|w',
718                 'a ;|v.|h ;|w',
719                 'a.|h,|i',
720                 'a.|h,|i ;|w',
721                 'a.|i',
722                 'a.|i ;|w',
723                 # greĀ¹ke:
724                 'a ;|v ;|w',
725                 'a.|h',
726                 'a.|h ;|w',
727                 'a.|h ;|v',
728                 'h,|i',
729                 'h ;|v',
730                 'i ;|w',
731                 'v',    
732                 'w',
733         ],
734 );
735
736 #}
737
738 #marc_template(
739 #       from => 225, to => 490,
740 #       subfields_rename => [
741 #               'a' => 'a',
742 #               'x' => 'x',
743 #               'v' => 'v',
744 #               'h' => 'n',
745 #               'i' => 'p',
746 #               'w' => 'v',
747 #       ],
748 #       isis_template => [
749 #               'a.|h,|i ;|w',
750 #               'a.|h.|w',
751 #               'a.|i ;|w',
752 #               'a ;|v.|i',
753 #               'a ;|v.|i ;|w',
754 #               'a ;|v.|h,|i ;|w',
755 #               'a ;|v.|h ;|w',
756 #               'a ;|v ;|w',
757 #               #mozda greska:
758 #               'a ;|v,|x ;|w',
759 #               'a ;|v,|x.|p',
760 #               'a,|x ;|v',
761 #               'a,|x.|p ;|w',
762 #       ],
763 #         from => "{ a => 1, i => 1, w => 1, \"x\" => 1 }",
764 #           to => "{ a => 1, p => 1, v => 1, \"x\" => 1 }",
765 #
766 #       marc_template => [
767 #               'a',
768 #               'a ;|v',
769 #               'a,|x',
770 #               'a.|n',         # mozda greska 
771 #               'a.|n,|p',
772 #               'a.|p',
773 #               'a ;|v.|n',
774 #               'a ;|v.|n,|p',  # mozda greska
775 #               'n,|p',
776 #               'n ;|v',        # mozda greska
777 #               'p ;|v',
778 #               'v',
779 #               'x',
780 #               'x ;|v'         # greska
781 #       ],
782 #);
783
784
785 ## 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)
786
787 #marc_compose('440',
788 #       'a', suffix(
789 #               ( rec('225','v') ) ? ' ;' :
790 #               ( rec('225','w') ) ? ' ; ' :
791 #               ( rec('225','x') ) ? ',' :
792 #               ( rec('225','h') || rec('225','i') ) ? '.' :
793 #                       '.',
794 #                       frec('225','a')
795 #       ),
796 #       'x',suffix(
797 #               ( rec('225','x') && ( rec('225','h') || rec('225','i') ) ) ? '.' :
798 #                       '',
799 #                       frec('225','x')
800 #       ),
801 #       'v',suffix(
802 #               ( rec('225','v') && ( rec('225','h') || rec('225','i') ) ) ? '.' :
803 #               ( rec('225','v') && rec('225','w') ) ? ' ; ' :
804 #                       '',
805 #                       frec('225','v')
806 #       ),
807 #       'n',suffix(
808 #               ( rec('225','h') && rec('225','i') ) ? ',' :
809 #               ( rec('225','h') && rec('225','w') ) ? ' ; ' :
810 #                       '',
811 #                       frec('225','h')
812 #       ),
813 #       'p',suffix(
814 #               ( rec('225','i') && rec('225','w') ) ? ' ; ' :
815 #               ( rec('225','i') && rec('225','x') ) ? ',' :
816 #                       '',
817 #                       frec('225','i')
818 #       ),
819 ## 225w treba ici u 440v, na kraj
820 #       '+', join_with(' ; ',
821 #               rec('225','w'),
822 #       )
823 #);
824
825 #marc_original_order('440','225');
826
827
828 #if (
829 #       count( lookup(
830 #               sub { 1 },
831 #               'ffps','libri',
832 #               sub { rec('225','a') }
833 #       ) ) > 1
834 #) {
835
836
837 #_debug(0);
838
839
840 ### 500
841
842 marc('500','a',
843         rec('300')
844 );
845
846 marc('500','a',
847         rec('305')
848 );
849
850 marc('500','a',
851         rec('307')
852 );
853
854 marc('500','a',
855         rec('314')
856 );
857
858 ### 502 - biljeĀ¹ka o disertacijama
859 ## odgovarajuƦeg polja nema u originalnim podacima. moĀ¾da se moĀ¾e pretpostaviti?
860
861 ### 504
862
863 marc('504','a',
864         rec('320')
865 );
866
867 ### 505
868 ## FFPS 327 - sadrzaj
869 ## NSK konvertira 327 (NP) u 501 (R)
870 ## u LOC konv. tablici stoji 327 (NP) u 505 (NR)
871 ## standard i validacije dopuĀ¹taju 501 (R) i 505 (R)
872 ## za svaku bazu posebno provjeriti sta je u poljima 327 i 330
873 if ( config() =~ m/ffps|fftu/ ) {
874         marc_indicators('505', '0', ' ');
875         marc('505','a',
876                 regex('s/\s*[\\r\\n]+\s*\**\s*/ ; /g',
877                         rec('327')
878                 )       
879 );
880 }
881
882 if ( config() =~ m/ffan/ ) {
883         marc_indicators('505', '0', ' ');
884         marc('505','a',
885                 regex('s/[<>]//g',
886                         rec('330')
887                 )       
888 );
889 }
890
891 ### 520
892 ## NSK konvertira 330 (P) u 520 (P) = LOC konv. tablica
893 if ( config() =~ m/ffps/ ) { 
894         marc('520','a',
895                 regex('s/[\\r\\n]+/. /g',
896                         rec('330')
897                 )       
898         );
899 }
900
901 ### 526 - STUDY PROGRAM INFORMATION NOTE
902 ## u nekim bazame je to u 996 - provjeriti za svaku bazu sta je u 996?
903 marc_indicators('526', 8, ' ');
904 marc('526','a',
905         rec('996')
906 );
907
908 ### 538 - zahtjevi sustava
909 marc('538','a',
910         rec('337','a')
911 );
912
913 ### 653 - Index Term-Uncontrolled
914 ## da li ponovljivo polje ili potpolje, pogledati u Koha tags
915 marc_indicators('653', ' ', ' ');
916 marc('653','a',
917         rec('610')
918 );
919
920 ### 655 - Index Term-Genre/Form 
921 marc_indicators('655', ' ', 4);
922 marc('655','a',
923         rec('608')
924 );
925
926 #_debug(2);
927
928
929 ### 700
930 ## ako je u originalu ponovljivo polje treba bioti i konvertirano u ponovljivo !!
931 ## ako ima samo podpolje a onda je pseudonim - nakon konverzije treba provjeriti
932 if ( rec('701','a') =~ m/, / ) {
933         marc_indicators('700', 1, ' ');
934 } else {
935         marc_indicators('700', 0, ' ');
936 }
937
938 marc('700','a',
939         rec('701', 'a'),
940 );
941
942 marc('700','a',
943         join_with(', ',
944                 rec('701', 'c'),
945                 rec('701', 'd')
946         ),
947 );
948 marc('700','a',
949         join_with(', ',
950                 rec('701', 'e'),
951                 rec('701', 'f')
952         ),
953 );
954 marc('700','a',
955         join_with(', ',
956                 rec('701', 'g'),
957                 rec('701', 'h')
958         ),
959 );
960 marc('700','a',
961         rec('702','a'),
962 );
963 marc('700','a',
964         join_with(', ',
965                 rec('702','c'),
966                 rec('702','d')
967         )
968 );
969 marc('700','a',
970         join_with(', ',
971                 rec('702','e'),
972                 rec('702','f')
973         )
974 );
975 marc('700','a',
976         join_with(', ',
977                 rec('702','g'),
978                 rec('702','h')
979         )
980 );
981
982 #_debug(0);
983
984 ## eventualno nadopuniti 710 i 711 - provjetiti da li u podacima postoji u ISIS-u
985
986
987 ### 740 - Added Entry - Uncontrolled Related/Analytical Title 
988 ## raspraviti
989 ## nadopuniti prvi indikator prema ĆØlanovima
990 marc_indicators('740', '0', ' ');
991
992 # if ( ! rec('464') ) {
993 # marc('740','a',
994 #       rec('200','c')
995 # );
996
997 marc('740','a',
998         rec('200','k')
999 );
1000
1001 # } else {
1002
1003 #marc('740','a',
1004 #       rec('464','a')
1005 #);
1006
1007 # };
1008
1009 ### 760 w ---------------------------------------------
1010 ## generiranje zapisa o nakladniĆØkoj cjelini i povezivanje podreĆ°enog zapisa s nadreĆ°enim
1011
1012 #if (
1013 #       rec('225','a')  # da li je nakladniĆØka cjelina?
1014 #) {
1015
1016 #my $series_key =
1017 #join_with('',
1018 #       rec('225','a'),
1019 #       rec('210','a'),
1020 #       rec('210','b'),
1021 #);
1022 #
1023 #my $series = get( $series_key );
1024 #
1025 #if ($series) {
1026 #       warn "nije novi";
1027 #} else {
1028 #
1029 #$series = join_with('',
1030 #       uc( config() ),
1031 #       ' LS',
1032 #       rec('000')
1033 #);
1034 #
1035 #set( $series_key => $series );
1036 #
1037 #} # $series
1038 #} # nakladniĆØka cjelina
1039 #
1040 #my $series_key = join_with('',
1041 #       rec('225','a'),
1042 #       rec('210','a'),
1043 #       rec('210','b'),
1044 #);
1045 #
1046 #if ($series_key) {
1047 #
1048 #       marc_indicators('760', 0, ' ');
1049 #       
1050 #       marc('760','t',
1051 #               rec('225','a')
1052 #       );
1053 #       marc('760','w',
1054 #               get( $series_key )
1055 #       );
1056 #}
1057
1058 # ## testing
1059 #
1060 # my $dup_key = join_with('',
1061 #       rec('200','a'),
1062 #);
1063 #
1064 #if ($dup_key) {
1065 #       marc('995','a',
1066 #               get( $dup_key )
1067 #       );
1068 #}
1069 #
1070 #
1071 # marc_indicators('776', 0, ' ');
1072
1073 # marc('776','a',
1074 #       rec('452','1')
1075 # );
1076 #
1077 # -------------------------------------------------------------------
1078
1079 ### 774 - Constituent Item Entry - to bi trebali koristiti ali ne koristimo jer NSK to koristi za neĀ¹to drugo
1080 ### 787 - Nonspecific Relationship Entry 
1081
1082 #marc_indicators('787','0',' ');
1083 #
1084 #marc_compose('787',
1085 #       'g', rec('230','v'),
1086 #       't', rec('230','a'),
1087 #       'b', rec('240','a'),
1088 #       'd', rec('250','a'),
1089 #       'd', rec('250','d'),
1090 #       'h', rec('260','a'),
1091 #       'k', rec('270','a'),
1092 #       'n', join_with('. - ',
1093 #               rec('280'),
1094 #       ),
1095 #       'x', join_with(', ',
1096 #               rec('290'),
1097 #       )
1098 #);
1099 #marc_compose('787',
1100 #       'g', rec('231','v'),
1101 #       't', rec('231','a'),
1102 #       'b', rec('241','a'),
1103 #       'd', rec('251','a'),
1104 #       'd', rec('251','d'),
1105 #       'h', rec('261','a'),
1106 #       'k', rec('271','a'),
1107 #       'n', join_with('. - ',
1108 #               rec('281'),
1109 #       ),
1110 #       'x', join_with(', ',
1111 #               rec('291'),
1112 #       )
1113 #);
1114 #marc_compose('787',
1115 #       'g', rec('232','v'),
1116 #       't', rec('232','a'),
1117 #       'b', rec('242','a'),
1118 #       'd', rec('252','a'),
1119 #       'd', rec('252','d'),
1120 #       'h', rec('262','a'),
1121 #       'k', rec('272','a'),
1122 #       'n', join_with('. - ',
1123 #               rec('282'),
1124 #       ),
1125 #       'x', join_with(', ',
1126 #               rec('292'),
1127 #       )
1128 #);
1129 #marc_compose('787',
1130 #       'g', rec('233','v'),
1131 #       't', rec('233','a'),
1132 #       'b', rec('243','a'),
1133 #       'd', rec('253','a'),
1134 #       'h', rec('263','a'),
1135 #       'k', rec('273','a'),
1136 #       'n', join_with('. - ',
1137 #               rec('283'),
1138 #       ),
1139 #       'x', join_with(', ',
1140 #               rec('293'),
1141 #       )
1142 #);
1143
1144
1145 ### 852 - ne koristimo, koristimo  942 i 952
1146
1147 ### 876 - item information - basic bibliographic unit (R)
1148 ## da li ovdje zapisati stare inventarne brojeve?
1149 #marc('876','a',
1150 #       rec('991','t'),
1151 #);
1152
1153 ### 886 - former marc
1154 # inicijale treba prebaciti u neko lokalno polje, a ovo polje nam ne treba
1155 #
1156 # marc_indicators('886', 2, ' ');
1157 # marc('886','2',
1158 #       'ffmarc'
1159 # );
1160 # marc('886','a',
1161 #       '994'
1162 # );
1163 # marc('886','b',
1164 #       join_with(''.
1165 #               '##^a',
1166 #               join_with('',
1167 #                       prefix('^a',
1168 #                               rec('994','a'),
1169 #                       ),
1170 #                       prefix('^b',
1171 #                               rec('994','b')
1172 #                       )
1173 #               )
1174 #       )
1175 #);
1176
1177 ### KOHA items
1178
1179 marc('942','b',
1180         'LIB'
1181 );
1182
1183 if ( grep( m/Posebni otisak/, rec('300') ) ) {
1184         marc('942','c',
1185                 'SEP'
1186         );
1187 } else {
1188         marc('942','c',
1189                 'KNJ'
1190         );
1191 }
1192
1193 ## 990 u sk ima \r\n na kraju
1194
1195 marc('942','d',
1196         join_with(' | ',
1197                 rec('990')
1198         )
1199 );      
1200
1201 my $novasig1 =
1202         lookup(
1203                 sub { rec('C') },
1204                 'ffiz','mapirano',
1205                 sub { rec('B') },
1206                 sub { rec('990') }
1207         );
1208 my $novasig2 = 
1209         lookup(
1210                 sub { rec('C') . ' ' . rec('D') },
1211                 'ffiz','starasig',
1212                 sub { rec('A') },
1213                 sub { rec('000') },
1214         );
1215
1216 marc('942','h',
1217         $novasig1
1218 );
1219
1220 marc('942','i',
1221         $novasig2
1222 );
1223
1224 if ( config() =~ m/ffar/ ) {
1225         my $novasig1 =
1226                 lookup(
1227                         sub { rec('E') },
1228                         'ffar','mapirano',
1229                         sub { rec('A') },
1230                         sub { rec('000') }
1231                 );
1232         if ( $novasig1 ) {
1233                 marc('942','h',
1234                         $novasig1
1235                 );
1236         } else {
1237                 marc('942','h',
1238                         'ARH'
1239                 );
1240         }
1241
1242
1243 }
1244
1245 if ( config() =~ m/ffsf|ffpo|fffi|ffar|ffsk/ ) {
1246 #       my $sig1 = 
1247 #               lookup(
1248 #                       sub { rec('C') },
1249 #                       'fffi','signature',
1250 #                       sub { rec('B') },
1251 #                       sub { frec('990') },
1252 #               );
1253         if ( rec('700','a') ) {
1254 #               marc('942','h',
1255 #                       $sig1,
1256 #               );
1257                 if ( rec('200','a') =~ m/^(The|Die|Das|Der|Ein|Les) / ) {
1258                         marc('942','i',
1259                                 join_with(' ',
1260                                         regex('s/(^.{3}).*/$1/',
1261                                                 uc ( rec('700','a') )
1262                                         ),
1263                                         regex('s/^.{4}(.{1}).*/$1/',
1264                                                 lc ( rec('200','a') )
1265                                         )
1266                                 )
1267                         );
1268                 } elsif ( rec('200','a') =~ m/^(Um|Un|An|La|Le|Il) / ) {
1269                         marc('942','i',
1270                                 join_with(' ',
1271                                         regex('s/(^.{3}).*/$1/',
1272                                                 uc ( rec('700','a') )
1273                                         ),
1274                                         regex('s/^.{3}(.{1}).*/$1/',
1275                                                 lc ( rec('200','a') )
1276                                         )
1277                                 )
1278                         );
1279                 } elsif ( rec('200','a') =~ m/^Eine / ) {
1280                         marc('942','i',
1281                                 join_with(' ',
1282                                         regex('s/(^.{3}).*/$1/',
1283                                                 uc ( rec('700','a') )
1284                                         ),
1285                                         regex('s/^.{5}(.{1}).*/$1/',
1286                                                 lc ( rec('200','a') )
1287                                         )
1288                                 )
1289                         );
1290                 } elsif ( rec('200','a') =~ m/^Einen / ) {
1291                         marc('942','i',
1292                                 join_with(' ',
1293                                         regex('s/(^.{3}).*/$1/',
1294                                                 uc ( rec('700','a') )
1295                                         ),
1296                                         regex('s/^.{6}(.{1}).*/$1/',
1297                                                 lc ( rec('200','a') )
1298                                         )
1299                                 )
1300                         );
1301                 } elsif ( rec('200','a') =~ m/^(A|L) / ) {
1302                         marc('942','i',
1303                                 join_with(' ',
1304                                         regex('s/(^.{3}).*/$1/',
1305                                                 uc ( rec('700','a') )
1306                                         ),
1307                                         regex('s/^.{2}(.{1}).*/$1/',
1308                                                 lc ( rec('200','a') )
1309                                         )
1310                                 )
1311                         );
1312                 } else {
1313                         marc('942','i',
1314                                 join_with(' ',
1315                                         regex('s/(^.{3}).*/$1/',
1316                                                 uc ( rec('700','a') )
1317                                         ),
1318                                         regex('s/(^.{1}).*/$1/',
1319                                                 lc ( rec('200','a') )
1320                                         )
1321                                 )
1322                         );
1323                 }
1324         } elsif ( rec('710','a') ) {
1325 #               marc('942','h',
1326 #                       $sig1,
1327 #               );
1328                 if ( rec('200','a') =~ m/^(The|Die|Das|Der|Ein|Les) / ) {
1329                         marc('942','i',
1330                                 join_with(' ',
1331                                         regex('s/(^.{3}).*/$1/',
1332                                                 uc ( rec('710','a') )
1333                                         ),
1334                                         regex('s/^.{4}(.{1}).*/$1/',
1335                                                 lc ( rec('200','a') )
1336                                         )
1337                                 )
1338                         );
1339                 } elsif ( rec('200','a') =~ m/^(Um|Un|An|La|Le|Il) / ) {
1340                         marc('942','i',
1341                                 join_with(' ',
1342                                         regex('s/(^.{3}).*/$1/',
1343                                                 uc ( rec('710','a') )
1344                                         ),
1345                                         regex('s/^.{3}(.{1}).*/$1/',
1346                                                 lc ( rec('200','a') )
1347                                         )
1348                                 )
1349                         );
1350                 } elsif ( rec('200','a') =~ m/^Eine / ) {
1351                         marc('942','i',
1352                                 join_with(' ',
1353                                         regex('s/(^.{3}).*/$1/',
1354                                                 uc ( rec('710','a') )
1355                                         ),
1356                                         regex('s/^.{5}(.{1}).*/$1/',
1357                                                 lc ( rec('200','a') )
1358                                         )
1359                                 )
1360                         );
1361                 } elsif ( rec('200','a') =~ m/^Einen / ) {
1362                         marc('942','i',
1363                                 join_with(' ',
1364                                         regex('s/(^.{3}).*/$1/',
1365                                                 uc ( rec('710','a') )
1366                                         ),
1367                                         regex('s/^.{6}(.{1}).*/$1/',
1368                                                 lc ( rec('200','a') )
1369                                         )
1370                                 )
1371                         );
1372                 } elsif ( rec('200','a') =~ m/^(A|L) / ) {
1373                         marc('942','i',
1374                                 join_with(' ',
1375                                         regex('s/(^.{3}).*/$1/',
1376                                                 uc ( rec('710','a') )
1377                                         ),
1378                                         regex('s/^.{2}(.{1}).*/$1/',
1379                                                 lc ( rec('200','a') )
1380                                         )
1381                                 )
1382                         );
1383                 } else {
1384                         marc('942','i',
1385                                 join_with(' ',
1386                                         regex('s/(^.{3}).*/$1/',
1387                                                 uc ( rec('710','a') )
1388                                         ),
1389                                         regex('s/(^.{1}).*/$1/',
1390                                                 lc ( rec('200','a') )
1391                                         )
1392                                 )
1393                         );
1394                 }
1395         } elsif ( rec('200','a') =~ m/^(The|Die|Das|Der|Ein|Les) / ) {
1396 #               marc('942','h',
1397 #                       $sig1,
1398 #               );
1399                 marc('942','i',
1400                         regex('s/^.{4}(.{3}).*/$1/',
1401                                 uc ( rec('200','a') )
1402                         ),
1403                 );
1404                         
1405         } else {
1406 #               marc('942','h',
1407 #                       $sig1,
1408 #               );
1409                 marc('942','i',
1410                         regex('s/(^\w{3}).*/$1/',
1411                                 uc ( rec('200','a') )
1412                         )
1413                 )
1414         }
1415 } # if config() za oznaku primjerka
1416
1417 if ( ( rec('230') || rec('231') || rec('232') || rec('233') ) ) { 
1418         warn "skupni zapis - nema primjeraka";
1419 } else {
1420         marc('952','8',
1421                 rec('991','8')
1422         );
1423         marc('952','a',
1424                 rec('991','a')
1425         );
1426         marc('952','b',
1427                 rec('991','b')
1428         );
1429         marc('952','c',
1430                 rec('991','c'),
1431         );
1432         marc('952','i',
1433                 rec('991','i')
1434         );
1435         marc('952','y',
1436                 rec('991','y')
1437         );
1438 }
1439
1440 ### LOKALNA POLJA
1441 ## 1. da li je zapis pregledan ili nije i datum kad je pregledan
1442 ##    provjeriti za svaku bazu koje polje koristi
1443 ##    SFM:      999^aP
1444 ##    AN:       999 Pregledan
1445 ## raspraviti
1446
1447
1448
1449 } # polje 200a
1450 # } sig