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