local changes
authorDobrica Pavlinusic <dpavlin@rot13.org>
Fri, 1 Aug 2008 23:41:47 +0000 (23:41 +0000)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Fri, 1 Aug 2008 23:41:47 +0000 (23:41 +0000)
git-svn-id: svn+ssh://mjesec/home/dpavlin/svn/webpac2/trunk@1095 07558da8-63fa-0310-ba24-9fe276d99e06

conf/log.conf
conf/mjesec.yml
conf/modify/common.pl
conf/normalize/ff-libri.pl
conf/normalize/ff-nakladnicka.pl
conf/validate/ffar-libri
conf/validate/ffet-libri
conf/validate/fffo-libri
conf/validate/ffiz-libri
conf/validate/ffpe-libri
t/2-input-excel.t

index fc1b8e2..abbd490 100644 (file)
@@ -41,7 +41,8 @@ log4perl.rootLogger=INFO, LOG, SCREEN
 #log4perl.logger.WebPAC.Input.DBF=DEBUG
 #log4perl.logger.WebPAC.Input.ISI=DEBUG
 #log4perl.logger.WebPAC.Input.XML=DEBUG
-log4perl.logger.WebPAC.Input.PDF=DEBUG
+#log4perl.logger.WebPAC.Input.PDF=DEBUG
+log4perl.logger.WebPAC.Input.Excel=DEBUG
 
 #log4perl.logger.WebPAC.Normalize.=DEBUG
 #log4perl.logger.WebPAC.Normalize.new=DEBUG
index 1781cf3..249af59 100644 (file)
@@ -147,132 +147,166 @@ databases:
       - to: efzg 
         credit: 10000
 
-#  # site with alternative databases
-#  'hr':
-#    name: 'Primjer za hrvatsko suèelje'
-#    links:
-#      - to: ffps
-#        credit: 10000
-#      - to: ffkk
-#        credit: 5000
-#      - to: emerald
-#        credit: 5000
 
+#  hazu:
+#    name: 'HAZU'
+#    input:
+#      - name: bib
+#        type: isis
+#        path: '/data/unizg/hazu/BIB'
+#        encoding: 'cp852'
+#        modify_file: 'conf/modify/common.pl'
+#        normalize:
+#          path: 'conf/normalize/minimal.pl'
+#
+#  sand:
+#    name: 'SAND'
+#    input:
+#      name: casopisi
+#      type: dbf
+#      path: '/data/unizg/casopisi/sys/cas2000.dbf'
+#      normalize:
+#        path: 'conf/normalize/common.pl'
+##      mapping_path: 'conf/input/dbf/cas2000.yml'
+#  
+#  hidra:
+#    name: 'HIDRA'
+#    input:
+#      - name: bib
+#        type: isis
+#        path: '/data/hidra/test/BIB'
+#        encoding: 'cp852'
+#        modify_file: 'conf/modify/common.pl'
+#        normalize:
+#          path: 'conf/normalize/minimal.pl'
+#
+#  efzg:
+#    name: 'EFZG'
+#    input:
+#      - name: crolist
+#        type: marc
+#        path: '/data/unizg/drustvene/efzg/unimarc.iso'
+#        encoding: 'ISO-8859-2'
+#        normalize:
+#          path: 'conf/normalize/minimal.pl'
+#  
+#  ipu:
+#    name: 'Institut za povijest umjetnosti'
+#    input:
+#      - name: bibl
+#        type: isis
+#        path: '/data/unizg/humanistika/ipu/20071115/bibl/BIBL'
+#        encoding: 'cp852'
+#        # modify_file: 'conf/modify/common.pl'
+#        normalize:
+#          path: 'conf/normalize/minimal.pl'
+#
+#  zvonar:
+#    name: 'HAZU Odsjek za povijesne znanosti'
+#    input:
+#      - name: libri
+#        type: isis
+#        path: '/data/unizg/humanistika/hazu-p/LIBRI'
+#        normalize:
+#          path: 'conf/normalize/minimal.pl'
+#      - name: peri
+#        type: isis
+#        path: '/data/unizg/humanistika/hazu-p/PERI'
+#        normalize:
+#          path: 'conf/normalize/minimal.pl'
+#
+#  stross:
+#    name: 'Strossmayerova galerija'
+#    input:
+#      - name: bib
+#        type: isis
+#        path: '/data/unizg/stross/BIB'
+#        normalize:
+#          path: 'conf/normalize/minimal.pl'
+#      
+#  koncar:
+#    name: 'Konèar'
+#    input:
+#      - name: unimar
+#        type: isis
+#        path: '/data/tehnika/koncar/UNIMAR'
+#        normalize:
+#          path: 'conf/normalize/minimal.pl'
+#      
+  datumi:
+    name: 'Nevaljali datumi'
+    input:
+      - name: tablica
+        type: excel
+        path: '/data/isis_data/greske/datum_unosa.xls'
+        encoding: 'windows-1250'
+        normalize:
+          - path: 'conf/normalize/common.pl'
+  
+#  ffps:
+#    name: 'Psihologija, Filozofski fakultet u Zagrebu'
+#    code: 'ps'
+#    url: 'http://www.knjiznice.ffzg.hr/psihologija'
+#    input:
+#      - name: libri
+#        type: isis
+#        path: '/backup/isis_backup/sunce2/isisdata/latest/LIBRI/'
+#        encoding: 'cp852'
+#        modify_file: 'conf/modify/common.pl'
+#        normalize:
+#          - path: 'conf/normalize/report-sorted-txt.pl'
+#    output:
+##      - module: 'Excel'
+##        path: '/data/isis_data/ps/reports/libri-nema-jezik.xls'
+#      - module: 'Sorted'
+#        path: 'out/report/mfn/ps/'
+##      - module: 'Excel'
+##        path: '/data/isis_data/ps/reports/autori-udk.xls'
 
-#  'ffps':
-#    name: 'Knji¾nica Odsjeka za psihologiju'
-#    links:
-#      - to: ffps
-#        credit: 10000
-
-#  'drustvene':
-#    name: 'Katalog knji¾nica dru¹tvenih znanosti'
-#    links:
-#      - to: efzg
-#        credit: 10000
-#      - to: eizg
-#        credit: 10000
-#      - to: efos
-#        credit: 10000
-#      - to: irmo
-#        credit: 10000
-#      - to: hika
-#        credit: 10000
-#      - to: iztzg
-#        credit: 10000
-#      - to: jzav
-#        credit: 10000
-#      - to: ijf 
-#        credit: 10000
-   
-#  'ecasopisi':
-#    name: 'Katalog elektronièkih èasopisa'
-#    links:
-#      - to: emerald
-#        credit: 10000
 
-  hazu:
-    name: 'HAZU'
+  ffiz:
+    name: 'Informacijske znanosti, Filozofski fakultet u Zagrebu'
     input:
-      - name: bib
+      - name: libri
         type: isis
-        path: '/data/unizg/hazu/BIB'
+        path: '/backup/isis_backup/A129-2/isisdata/latest/LIBRI/LIBRI'
         encoding: 'cp852'
         modify_file: 'conf/modify/common.pl'
         normalize:
-          path: 'conf/normalize/minimal.pl'
+          - path: 'conf/normalize/report-sorted-txt.pl'
+    output:
+#      - module: 'Excel'
+#        path: '/data/isis_data/iz/reports/libri-nema-jezik.xls'
+      - module: 'Sorted'
+        path: 'out/report/mfn/iz/'
+#      - module: 'Excel'
+#        path: '/data/isis_data/iz/reports/autori-udk.xls'
 
-  sand:
-    name: 'SAND'
-    input:
-      name: casopisi
-      type: dbf
-      path: '/data/unizg/casopisi/sys/cas2000.dbf'
-      normalize:
-        path: 'conf/normalize/common.pl'
-#      mapping_path: 'conf/input/dbf/cas2000.yml'
-  
-  hidra:
-    name: 'HIDRA'
+
+  casopisi:
+    name: 'Èasopisi u Knji¾nicama FF-a'
     input:
-      - name: bib
-        type: isis
-        path: '/data/hidra/test/BIB'
-        encoding: 'cp852'
-        modify_file: 'conf/modify/common.pl'
+      - name: ff
+        type: excel
+        path: '/data/isis_data/CASOPISI/svi-casopisi-FF.xls'
+        ncoding: 'utf-8'
         normalize:
-          path: 'conf/normalize/minimal.pl'
+          - path: 'conf/normalize/ff-casopisi-xls.pl'
+#          - path: 'conf/normalize/ff-casopisi-marc.pl'
+    output:
+      - module: 'Excel'
+        path: 'out/excel/casopisi-FF-dupli-knjiznice.xls'
 
-  efzg:
-    name: 'EFZG'
+  fflibri:
+    name: 'Filozofski fakultet u Zagrebu'
     input:
-      - name: crolist
+      - name: marc
         type: marc
-        path: '/data/unizg/drustvene/efzg/unimarc.iso'
+        path: 'out/marc/fflibri.marc'
         encoding: 'ISO-8859-2'
         normalize:
-          path: 'conf/normalize/minimal.pl'
-  
-  ipu:
-    name: 'Institut za povijest umjetnosti'
-    input:
-      - name: bibl
-        type: isis
-        path: '/data/unizg/humanistika/ipu/20071115/bibl/BIBL'
-        encoding: 'cp852'
-        # modify_file: 'conf/modify/common.pl'
-        normalize:
-          path: 'conf/normalize/minimal.pl'
-
-  zvonar:
-    name: 'HAZU Odsjek za povijesne znanosti'
-    input:
-      - name: libri
-        type: isis
-        path: '/data/unizg/humanistika/hazu-p/LIBRI'
-        normalize:
-          path: 'conf/normalize/minimal.pl'
-      - name: peri
-        type: isis
-        path: '/data/unizg/humanistika/hazu-p/PERI'
-        normalize:
-          path: 'conf/normalize/minimal.pl'
+          - path: 'conf/normalize/ff-libri-dupli.pl'
+    output:
+      - module: 'Excel'
+        path: 'out/excel/knjige-duplo.xls'
 
-  stross:
-    name: 'Strossmayerova galerija'
-    input:
-      - name: bib
-        type: isis
-        path: '/data/unizg/stross/BIB'
-        normalize:
-          path: 'conf/normalize/minimal.pl'
-       
-  koncar:
-    name: 'Konèar'
-    input:
-      - name: unimar
-        type: isis
-        path: '/data/tehnika/koncar/UNIMAR'
-        normalize:
-          path: 'conf/normalize/minimal.pl'
-       
index f513183..b924df5 100644 (file)
@@ -2,16 +2,27 @@
 
 # FFSF - nekoliko zaredanih ISBN, odvojenih s '. - '
 
+#10
+#  '*'
+#    'regex:^' => '^a'
+#    'regex:\(' => ' ('
+#    '  ISBN ' => '^z'
+#    '. - ' => '^a'
+#    ' ; ' => '^a'
+#    '; ' => '^a'
+#    ';' => '^a'
+#    'ISBN ' => ''
+##    '-' => ''
+
 10
   '*'
     'regex:^' => '^a'
     'regex:\(' => ' ('
-    '. - ' => '^a'
+    ' | ' => '^a'
     ' ; ' => '^a'
-    '; ' => '^a'
-    ';' => '^a'
+    '. - ' => '^a'
     'ISBN ' => ''
-#    '-' => ''
+
 
 101
   '*'
@@ -28,6 +39,8 @@
     '[The]' => 'The'
     '[Der]' => 'Der'
     '[Le]'  => 'Le'
+    '<' => ''
+    '>' => ''
   '^a'
     ' = ' => '^d'
     ' : ' => '^e'
     '. (' => '. ^e('
   '^e'
     ' : ' => ' : ^f'
+  '*'
+    'regex:$' => '.'
+
 
 
 # priprema za konverziju u 440
 
+#225
+#  '^a'
+#    ' / ' => ' /^z'
+#    ' : ' => ' :^z'
+#    ' = ' => ' =^z'
+#    '^w' => '^v'
+#    ' ; ' => '^v'
+
 225
   '^a'
     '^e' => ' : '
     '^f' => ' / '
     '^d' => ' = '
-    '^w' => '^v'
-    ' ; ' => '^v'
+    ' ; ' => '^v' 
+    ', ISSN ' => '^x'
   '^v'         
     '^e' => ' : '
   '^i'
     '^f' => ' / '
     '^e' => ' : '
-# provjeri ovo:
-  '^v'
+## provjeri ovo:
+  '^v' 
     '^f' => ' / '
     '^d' => ' = '
-
+  '*'
+    '^e' => '^a'
 #225
 #  '^a'
 #    '^v' => ' ; ^v'
 #    '[Le]'  => 'Le'
 
 
-230
-  '^a'
-    ' = ' => ' =^b'
-    ' : ' => ' :^b'
-    ' ; ' => ' ;^b'
-    '^e'  => ' :^b'
-    ' / ' => '^f'
-    '^d'  => ' =^b'
-    '^g'  => '^f'
-    '^k'  => ' ;^b'
-  '^b'
-    '^e'  => ' : '
-    ' / ' => '^f'
-    '^g'  => '^f'
-    '^k'  => ' ; '
-  '^f'
-    '^g' => ' ; '
-  '^v'
-    ' / ' => '^f'
 
 
 
-464
-  '^a'
-    '^f' => ' / '
-    '^g' => ', '
-
 
 
 #330
 #    'g'  => 'a'
 #    'g2' => 'f'
 
+230
+  '^a'
+    '^e' => ' : '
+    '^f' => ' / '
+
 250
-  '*'
-    'regex:^' => '^a'
+  '^a'
+    '^c' => ' : '
+    '^d' => ', '
+
+260
+  '^a'
+    '^c' => ' : '
+    '^d' => ' ; '
 
 
 270
-  '*'
-    'regex:^' => '^a'
   '^a'
     ' ; ' => '^v'
 
+231
+  '^a'
+    '^e' => ' : '
+    '^f' => ' / '
+
+251
+  '^a'
+    '^c' => ' : '
+    '^d' => ', '
+
+261
+  '^a'
+    '^c' => ' : '
+    '^d' => ' ; '
+
+
+271
+  '^a'
+    ' ; ' => '^v'
+
+232
+  '^a'
+    '^e' => ' : '
+    '^f' => ' / '
+
+252
+  '^a'
+    '^c' => ' : '
+    '^d' => ', '
+
+262
+  '^a'
+    '^c' => ' : '
+    '^d' => ' ; '
+
+
+272
+  '^a'
+    ' ; ' => '^v'
+
+233
+  '^a'
+    '^e' => ' : '
+    '^f' => ' / '
+
+253
+  '^a'
+    '^c' => ' : '
+    '^d' => ', '
+
+263
+  '^a'
+    '^c' => ' : '
+    '^d' => ' ; '
+
+
+273
+  '^a'
+    ' ; ' => '^v'
+
+
+464
+  '^a'
+    '^f' => ' / '
+    '^g' => ', '
+
+700
+  '^a'
+    '^b' => ', '
+
+701
+  '^a'
+    '^b' => ', '
+  'regex:$' => '^4aut'
+
+702
+  '^a'
+    '^b' => ', '
+
+990
+  '*'
+    '[' => ''
+    ']' => ''
+    'PE' => ''
+    'SF' => ''
+
+991
+  'regex:^' => '^8FIL^aFFZG^bFFZG^c7^ifil'
+  'regex:$' => '^yKNJ'
+
+220
+  'regex:^' => '^8FIL^aFFZG^bFFZG^c7^ifil'
+  'regex:$' => '^yKNJ'
+
+221
+  'regex:^' => '^8FIL^aFFZG^bFFZG^c7^ifil'
+  'regex:$' => '^yKNJ'
+
+222
+  'regex:^' => '^8FIL^aFFZG^bFFZG^c7^ifil'
+  'regex:$' => '^yKNJ'
+
+223
+  'regex:^' => '^8FIL^aFFZG^bFFZG^c7^ifil'
+  'regex:$' => '^yKNJ'
index 7a75e58..aa920a8 100644 (file)
@@ -1,10 +1,8 @@
-##########################################################################
-##                                                                     ##
-## 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.          ##
-##                                                                     ##      
-##########################################################################
+
+# 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.
+
 
 ## konvertira se ako postoji polje 200^a
 
@@ -15,7 +13,7 @@ if ( rec('200','a') ) {
 ## LDR 05 - c = pregledan ; n = new
 ## 999^aP - SFM
 
-if ( rec('999') && rec('999','a') =~ m/(pregledan|P)/i) {
+if ( rec('999','a') && rec('999','a') =~ m/(pregledan|P)/i) {
        marc_leader('05','c');
 } else {
        marc_leader('05','n');
@@ -29,38 +27,46 @@ if ( rec('999') && rec('999','a') =~ m/(pregledan|P)/i) {
 
        marc_leader('07','m');
 
-## LDR 17
+## LDR 17 - 3
        marc_leader('17','7');
 
 ## LDR 18 
        marc_leader('18','i');
 
 ## LDR 19 - razjasniti
+# nema vi¹e r, ima #, a, b ili c
 
-if ( rec('230') ) {
-       marc_leader('19','r');
+if ( rec('230') | rec('231') | rec('232') | rec('233') ) {
+       marc_leader('19','a');
 }
 
-### 001 - Voyager ID
-
-### 003 - razjasniti
-
-### 007 - razjasniti 
-
-marc_fixed('007',00,'ta');
-
 ### 008 - All materials
 ## dodati sve moguce slucajeve za datum, popuniti ono sto nedostaje
+## ostaviti prazno tamo gdje nema ni¹ta 
 
-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,
-               '000000'
+               regex('s/^\d\d//',
+                       rec('994','c')
+               ),
+       );
+       marc_fixed('008', '04',
+               '01'
+       );
+} elsif ( rec('994','c') =~ m/\d{4}/ ) {
+       marc_fixed('008', 00,
+               regex('s/^\d\d//',
+                       rec('994','c')
+               ),
+       );
+       marc_fixed('008', '02',
+               '0101'
        );
 }
 
@@ -74,23 +80,38 @@ if ( rec('994','c') ) {
 ## 008 06 - Type of date/Publication status
 ## dodati i ostale moguænosti
 ## 008 07-10 - Date 1 - iz 210d koji kroz modify postaje 210c
-
-my $year = rec('210','c');
+## srediti sve moguæe upitne godine
 
 if ( rec('210','c') ) {
-       marc_fixed('008','06','s');             # 06 - Type of date/Publication status, s = single know date
-       
-#      warn "## year = $year";
+       my $d1;
+       my $d2;
+       if ( rec('210','c') =~ m/\?/ ) {
+               marc_fixed('008','06','q');
+       } else {
+               marc_fixed('008','06','s');
+       }
+       if ( rec('210','c') =~ m/(\d{4})/ ) {
+               $d1 = $1;
+       } else {
+               $d1 = '';
+       }
+       if ( rec('210','c') =~ m/^.*-(\d{4})/ ) {
+               $d2 = $1;
+       } else {
+               $d2 = '',
+       }
+       if ( rec('210','c') =~ m/(\d{2})--/ ) {
+               $d1 = $1.'uu';
+               marc_fixed('008','06','u');
+       }
 
-       if ( $year =~ m/^(\d{4})/ ) {
-#      warn "## $1 ##\n";
-               marc_fixed('008','07',$1);              # 07-10 - Date 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 
@@ -98,76 +119,95 @@ if ( rec('210','c') ) {
 ## 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') 
-                       )
-               },
-       );
-
-warn (
-       dump ($zemlja)
-);
-
-if ( $year =~ m/^(\d{4})/ ) {
-       if ( $1 >= 1990 ) {
-               marc_fixed('008','15',
-                       lc ( $zemlja )
-
-               );
-#      } elsif ( dump( $zemlja ) eq 'hr' ) {
-#              marc_fixed('008','15','yu');
-       }
-}
+#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')) )               
        lc( frec('101'))                
 );
                                        
 ## 008 38 - Modified record - razjasniti
+marc_fixed('008','38','|');            
 
 ## 008 39 - Cataloging source - d (other)
-
 marc_fixed('008','39','d');            
 
 ### 008 - Books - raspraviti upotrebu ovih polja
 ## 008 18-21 - Illustrations
+if ( rec('215','c') && rec('215','c') =~ m/ilustr/ ) {
+       marc_fixed('008','18','a')
+}
+
 ## 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','|');
+
 ## 008 31 - Index
+marc_fixed('008','31','|');
+
 ## 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') ) ) {
-       marc('020','a', 
-               # isbn_13(
+       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',
-                       # regex('s/\(\d\)\(/$1 \(//g',
                                rec('10','a')
                        )
-               # )
-       ); 
+               );
+       }
+       marc('020','z',
+               rec('10','z')
+       );
+                       
 }
 
 #warn( 
@@ -181,12 +221,13 @@ if ( frec('10') ne ( frec('290') ) ) {
 ## marc 035a - System Number - Voyagerov ID (001) 
 ## polje 035$9 mo¾e sadr¾avati slova i razmake
 
-marc('035','6',
+marc('035','a',
 join_with('',
        # config('input normalize path'),
        # config('name'),
+       'HR-ZaFF ',
        config(),
-       ' L',
+       'L-',
        # config('input name'),
        # id(),
        # rec('994','a'),
@@ -196,10 +237,9 @@ join_with('',
 
 ### 040
 ## za sve je isti
-## treba utvrditi toènu oznaku za ustanovu
 
 marc('040','a',
-       'HR-ZgFF'
+       'HR-ZaFF'
 );
 
 marc('040','b',
@@ -207,7 +247,7 @@ marc('040','b',
 );
 
 marc('040','c',
-       'HR-ZgFF'
+       'HR-ZaFF'
 );
 
 marc('040','e',
@@ -297,6 +337,7 @@ marc('100','a',
        )
 );
 
+### formalna odrednica - iz 503 u 110, i1=0, i2=1
 
 ### 111 i 110
 ## konverzija u 110 ili 111 ovisno o postojanju/nepostojanju nekih polja - provjeriti ispise naslova iz svake baze - moguæe su gre¹ke.
@@ -371,15 +412,15 @@ if ( rec('700') || rec('710') ) {
        
 marc_indicators('245', $i1, 0);
 
-if     ( rec('200','a') =~ m/^Einen / ) {
+if ( rec('200','a') =~ m/^Einen / ) {
                marc_indicators('245', $i1, 6);
 } 
 
-if     ( rec('200','a') =~ m/^Eine / ) {
+if ( rec('200','a') =~ m/^Eine / ) {
                marc_indicators('245', $i1, 5);
 } 
 
-if     ( rec('200','a') =~ m/^(Die|Das|Der|Ein|Les|The) / ) {
+if ( rec('200','a') =~ m/^(Die|Das|Der|Ein|Les|The) / ) {
                marc_indicators('245', $i1, 4);
 } 
 
@@ -387,13 +428,18 @@ if ( rec('200','a') =~ m/^(Um|Un|An|La|Le|Il) / ) {
                marc_indicators('245', $i1, 3);
 } 
 
-if ( rec('200','a') =~ m/^(A|L') / ) { 
+if ( rec('200','a') =~ m/^(A|L) / ) { 
+               marc_indicators('245', $i1, 2);
+} 
+
+if ( rec('200','a') =~ m/^L'/ ) { 
                marc_indicators('245', $i1, 2);
 } 
 
 
 ### 245
 ## potpolja i interpunkcije pripremljeni u modify
+## da li treba makivati razmake u inicijalima?
 
 #_debug(3);
 
@@ -445,8 +491,12 @@ marc_compose('245',
 #_debug(0);
 
 ### 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', 1, 3);
+marc_indicators('246', 3, ' ');
 marc('246','a',
        rec('532')
 );
@@ -457,7 +507,7 @@ marc('246','a',
 marc_compose('250',
        'a',suffix(
                rec('205','f') ? ' / ' : 
-                       ' ',
+                       '',
                        rec('205','a')
        ),
        'b', rec('205','f'),
@@ -466,7 +516,7 @@ marc_compose('250',
 ### 260
 ## ponovljiva potpolja u originalnom redosljedu - priprema u modify
 
-marc_original_order('260', '210');
+       marc_original_order('260', '210');
 
 
 ### 300
@@ -494,7 +544,7 @@ marc('300','b',
 marc('300','c',
        suffix(
                rec('215','e') ? ' + ' :
-                       '',
+                       '.',
                        rec('215','d')
        )
 );
@@ -505,28 +555,95 @@ marc('300','e',
 
 ### 362 - brojèani podaci za nakladnièku cjelinu - razjasniti upotrebu
 
+# if ( ! rec('225','z')  ) {
+
+# 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, provjeriti
 
 marc_indicators('440', ' ', '0');
 
-if (   ( rec('225','a') =~ m/^Die /) || 
-       ( rec('225','a') =~ m/^Das /) || 
-       ( rec('225','a') =~ m/^The /) ) {
-               marc_indicators('440', ' ', 4);
+if ( rec('200','a') =~ m/^Einen / ) {
+               marc_indicators('440', ' ', 6);
 } 
 
-if (   ( rec('225','a') =~ m/^A /) && ( rec(101) =~ m/ENG/ ) ) {
-               marc_indicators('440', ' ', 2);
+if ( rec('200','a') =~ m/^Eine / ) {
+               marc_indicators('440', ' ', 5);
 } 
 
-if (   ( rec('225','a') =~ m/^An /) && ( rec(101) =~ m/ENG/ ) ) {
+if ( rec('200','a') =~ m/^(Die|Das|Der|Ein|Les|The) / ) {
+               marc_indicators('440', ' ', 4);
+} 
+
+if ( rec('200','a') =~ m/^(Um|Un|An|La|Le|Il) / ) { 
                marc_indicators('440', ' ', 3);
 } 
 
-#_debug(3);
+if ( rec('200','a') =~ m/^(A|L') / ) { 
+               marc_indicators('440', ' ', 2);
+} 
+
+## 440v nije ponovljivo
 
-### 440
 
 marc_template(
        from => 225, to => 440,
@@ -539,41 +656,88 @@ marc_template(
                'w' => 'v',
        ],
        isis_template => [
-               'a.|h,|i ;|w',
-               'a.|h.|w',
-               'a.|i ;|w',
+               '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',
-               #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 }",
+               'a.|h',
+               'a.|h ;|w',
+               'a.|h ;|v',
+               'h,|i',
+               'h ;|v',
+               'i ;|w',
+               'v',    
+               'w',
 
-       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_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_compose za 440 radi samo kad polje ni potpolja nisu ponovljiva. ne zapisuje dobro drugo pojavljivanje ^v, tj. ^v iza ^p (iz 225^w)
 
@@ -663,7 +827,7 @@ marc('504','a',
 ## u LOC konv. tablici stoji 327 (NP) u 505 (NR)
 ## standard i validacije dopu¹taju 501 (R) i 505 (R)
 
-if ( config() =~ m/ffps/ || config() =~ m/fftu/ ) {
+if ( config() =~ m/ffps|fftu/ ) {
        marc_indicators('505', '0', ' ');
        marc('505','a',
                regex('s/\s*[\\r\\n]+\s*\**\s*/ ; /g',
@@ -719,8 +883,9 @@ marc('655','a',
 );
 
 ### 653
+## da li ponovljivo polje ili potpolje, pogledati u Koha tags
 
-marc_indicators('653', 0, ' ');
+marc_indicators('653', ' ', ' ');
 marc('653','a',
        rec('610')
 );
@@ -733,17 +898,8 @@ marc('653','a',
 
 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',
@@ -769,10 +925,7 @@ marc('700','a',
 
 
 marc('700','a',
-       join_with(', ',
                rec('702', 'a'),
-               rec('702', 'b')
-       )
 );
 
 marc('700','a',
@@ -827,7 +980,7 @@ marc('740','a',
 #if (
 #      rec('225','a')  # da li je nakladnièka cjelina?
 #) {
-#
+
 #my $series_key =
 #join_with('',
 #      rec('225','a'),
@@ -862,6 +1015,9 @@ marc('740','a',
 #
 #      marc_indicators('760', 0, ' ');
 #      
+#      marc('760','t',
+#              rec('225','a')
+#      );
 #      marc('760','w',
 #              get( $series_key )
 #      );
@@ -888,20 +1044,82 @@ marc('740','a',
 #
 
 
-### 852 - signatura 
+### 774 - Constituent Item Entry
+### 787 - Nonspecific Relationship Entry 
 
-marc_indicators('852', 4, ' ');
+marc_indicators('787','0',' ');
 
-marc('852','j',
-       join_with(' ',
-               rec('990')
-       )
+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', 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', 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', 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', rec('293'),
+);
+
+
+
+### 852 - lokacija
+
+
+
+#marc('852','i',
+#      
+#);
+
+       
+
 ### 876 - item information - basic bibliographic unit
 
 marc('876','a',
-       rec('991'),
+       rec('991','t'),
 );
 
 ### 886 - former marc
@@ -930,5 +1148,244 @@ marc('886','b',
        )
 );
 
+### KOHA
+
+marc('942','b',
+       'LIB'
+);
+
+marc('942','c',
+       'KNJ'
+);
+
+marc('942','d',
+       join_with(' | ',
+               rec('990')
+       )
+);     
+
+if ( config() =~ m/ffiz/ ) {
+       my $novasig1 =
+               lookup(
+                       sub { rec('C') },
+                       'ffiz','mapirano',
+                       sub { rec('B') },
+                       sub { rec('990') }
+               );
+       my $novasig2 = 
+               lookup(
+                       sub { rec('C') . ' ' . rec('D') },
+                       'ffiz','starasig',
+                       sub { rec('A') },
+                       sub { rec('000') },
+               );
+       marc('942','h',
+               $novasig1
+       );
+       marc('942','i',
+               $novasig2
+       );
+}
+
+
+#if ( config() =~ m/ffsf|ffpo/ ) {
+#      my $sig1 = 
+#              lookup(
+#                      sub { rec('C') },
+#                      'ffiz','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()
+
+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
index e69c8f2..78e9bca 100644 (file)
@@ -14,7 +14,6 @@ if (
 #      ) ) > 1
 ) {
 
-
 my $series_key =
 join_with('',
        rec('225','a'),
@@ -25,7 +24,7 @@ join_with('',
 my $series = get( $series_key );
 
 if ( $series ) {
-       warn "nije novi";
+       warn "nije novi";
 } else {
 
 
@@ -174,8 +173,8 @@ marc_remove('260','c');
 
 #_debug(0);
 
-#marc_duplicate();
-#marc_remove('*');
+marc_duplicate();
+marc_remove('*');
 
 
 } # $series
index 7f4f0a1..0d73f3a 100644 (file)
@@ -1,9 +1,10 @@
 0 
+1
 10 
 101
 200 a! c d e f g k*
 205- 
-210 a* c* d 
+210 a* c* d!
 215 a c d e
 220
 221
index 352e2ae..fc4698a 100644 (file)
@@ -3,7 +3,7 @@
 101 
 200 a c d e* f g k 
 205 a!
-210 a c d 
+210 a* c* d 
 215 a c d e
 225 a e h i v w
 230 a e f v
index 373b357..058c080 100644 (file)
@@ -15,7 +15,7 @@
 210 a* c* d! 
 215 a c d e 
 216
-225 a! e f i v w
+225 a! e f i v w
 230 a e f v
 231 a e f v
 232 a e f v
index ee831c2..69aac63 100644 (file)
@@ -5,7 +5,7 @@
 205 a!
 210 a! c d 
 215 a c d e
-225 a e h i v w
+225 a e h i v w x
 230 a e f v
 231 a e f v
 232 a e f v
index 617b659..2fa577e 100644 (file)
@@ -1,7 +1,7 @@
 0 
 10 
 101 
-200 a! c d e f g* k
+200 a! c d e* f g* k
 205 a 
 210 a c d 
 215 a c d e 
index da57366..b46ebf2 100755 (executable)
@@ -13,16 +13,25 @@ use_ok( 'WebPAC::Input' );
 my $module = 'WebPAC::Input::Excel';
 diag "testing with $module";
 
-ok(my $input = new WebPAC::Input(
-       module => $module,
-       no_progress_bar => 1,
-       %LOG,
-), "new");
+our ($input,$db,$size);
 
-ok(my $db = $input->open(
-       path => "$abs_path/data/excel_95.xls"
-), "open");
-ok(my $size = $input->size, "size");
+sub open_xls {
+
+       ok($input = new WebPAC::Input(
+               module => $module,
+               no_progress_bar => 1,
+               %LOG,
+       ), "new $module");
+
+       my $path = shift;
+       $path = "$abs_path/data/$path";
+       ok(my $db = $input->open( path => $path ), "open $path");
+       ok($size = $input->size, "size $size");
+       return $db;
+}
+
+
+open_xls('excel_95.xls');
 
 foreach my $mfn ( 1 ... $size ) {
        my $rec = $input->fetch;
@@ -37,3 +46,8 @@ foreach my $mfn ( 1 ... $size ) {
        diag "rec: ", dump($rec), "\n" if $debug;
 }
 
+open_xls('stara-signatura.xls');
+
+foreach my $mfn ( 20 .. 23 ) {
+       diag dump( $input->fetch( $mfn ) ) if $debug;
+}