##########################################################################
##									##
## 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

if ( rec('200','a') ) {

### LEADER
## raspraviti 17,18

## LDR 05 - c ili d - iz 999a ili 999b ili 999 - provjeriti za svaku knjiznicu

if ( rec('999') && rec('999','a') =~ m/(pregledan|P)/i) {
	marc_leader('05','c');
} else {
	marc_leader('05','n');
}

## LDR 06 - a ili m - odrediti kriterije

	marc_leader('06','a');

## LDR 07 - m

	marc_leader('07','m');

## LDR 17 i 18 - razjasniti

	marc_leader('18','i');

## LDR 19 - razjasniti

if ( rec('230') ) {
	marc_leader('19','r');
}

### 001 - Voyager

### 003 - razjasniti

### 007 - razjasniti 

marc_fixed('007',00,'ta');

### 008 - All materials
## 008 00 - datum - što kad datum nije poznat?

if ( rec('994','c') ) {
	marc_fixed('008','00',
		regex('s/^\d\d//',
			rec('994','c')
		),
	);
} else {
	marc_fixed('008', 00,
		'000101'
	);
}

#warn( dump(
# 	regex('s/^\d\d//',
#		rec('994','c')
#	),
#)
#);

## 008 06 - Type of date/Publication status - t - raspraviti

marc_fixed('008','06', 't');	

## 008 07-10 - Date 1 - iz 210d koji kroz modify postaje 210c

marc_fixed('008','07',
	rec('210','c')
);

## 008 11-14 - Date 2 

## 008 15-17 - Place of publication, production, or execution - što ako nema 102?

marc_fixed('008','15', 
	lc ( rec('102') ) 
); 				

## 008 35-37 - Language - što ako nema 101?

marc_fixed('008','35',
	first( lc(rec('101')) )		
);
					
## 008 38 - Modified record - razjasniti

## 008 39 - Cataloging source - d

marc_fixed('008','39','d');		

### 008 - Books - raspraviti upotrebu ovih polja
## 008 18-21 - Illustrations
## 008 22 - Target audience
## 008 23 - Form of item
## 008 24-27 - Nature of contents
## 008 28 - Government publication
## 008 29 - Conference publication
## 008 30 - Festschrift
## 008 31 - Index
## 008 32 - Undefined
## 008 33 - Literary form
## 008 34 - Biography

### 020
## modify -> drugi ISBN počinje prefixom "ISBN" koji se miče (sfb)

if ( frec('10') ne ( frec('290') ) ) {
	marc('020','a', 
		regex('s/-//g',
#		regex('s/\(\d\)\(/$1 \(//g',
			rec('10')
		)
	); 
}

#warn( 
#	dump(
#		frec('10')
#	),
#);

### 035$6
## Privemeno koristimo 035$6 umjesto 035$9, zato što marclint prijavljuje 9 kao grešku.
## marc 035a - System Number - Voyagerov ID (001) 
## polje 035$9 može sadržavati slova i razmake

marc('035','6',
join_with('',
#		config('input normalize path'),
#		config('name'),
		config(),
		' L',
#		config('input name'),
#		id(),
#		rec('994','a'),
		rec('000')
	)
);

### 040
## za sve je isti
## treba utvrditi točnu oznaku za ustanovu

marc('040','a',
	'HR FFZG'
);

marc('040','b',
	'hrv'
);

marc('040','e',
	'HR PPIAK'
);


### 041 - indikatori
## pretpostavke o indikatorima
## 1. Ako postoji polje 300 i ono sadrži /Prijevod/ ili /Izv. stv. nasl./, i1 = 1
## (Da li je napomena uvijek pisana?)
## 2. Podatak o prevodiocu u 200g. Problem: različiti oblici riječi, različiti jezici.
## 3. Ako u UDK oznaci postoji "=", bez zagrada, onda je to prijevod
## (ako postoje zagrade pr. 94(=411.16) onda su to pomoćne oznake)
## pr. 821.111-2=163.42 je prijevod engleske drame na HR. 
## to ima samo za književna djela, eseje.... 
## ????

#if ( rec('675') =~ m/\d=\d/ ) ??

if ( 
	grep( m/[prijevod|prevedeno|izv.*stv.*nasl|izvornik]/i, rec('300') ) || 
	grep( m/[preve|prijevod]/i, rec('200','f')) || 
	grep( m/[preve|prijevod]/i, rec('200','g'))  
) {
	marc_indicators('041', 1, ' ');
} else {
	marc_indicators('041', 0, ' ');
}

### 041
## ponovljivo polje (101) konvertira se u ponovljivo potpolje (041a)

#_debug(2);

marc_repeatable_subfield('041','a',
	map { lc($_) } rec('101')
);

#_debug(0);

### 044
## kako dobiti zemlju izdavanja?

### 080
## 675 podpolja b, c, d ... - što s njima? - provjeriti za svaku bazu

marc('080','a',
	rec('675','a')
);

marc('080','a',
	rec('675','b')
);

marc('080','a',
	rec('675','c')
);

marc('080','a',
	rec('675','d')
);


### 084 - other classification (R)
## NSK ga koristi za stručnu oznaku NSK iz polja 681
## NSK konvertira polje 686 u 084, u skladu s LOC konv. tablicom
## polje 686 koristi FFPS. još netko?

marc('084','a',
	rec('686')
);

### 100 
## I1 = 0 ako je pseudonim (ima 700a, nema 700b)

if ( rec('700','a') && ! rec('700','b') ) {
	marc_indicators('100', 0, ' ');
} else {
	marc_indicators('100', 1, ' ');
}

marc('100','a',
	join_with(', ',
		rec('700', 'a'),
		rec('700', 'b')
	)
);


### 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.

# ovo vrijedi za FFSFB
if ( rec('710','d') || rec('710','e') || rec('710','f') ) {

marc_indicators('111', 2, ' ');

marc_compose('111',
	'a', suffix(
		rec('710','b') ? '.' :
			'',
			rec('710','a'),
	),
	'e', rec('710','b'),
	'n', prefix(
		rec('710','d') ? '(' :
			'',
			rec('710','d')
	),
	'd', prefix(
		( ! rec('710','d') ) ? '(' :
		( ! rec('710','e') ) ? '(' :
			'; ',
			rec('710','f'),
	),
	'c', prefix(
		( rec('710','e') && ( rec('710','d') || rec('710','f') ) ) ? '; ' :
		( ! rec('710','d') && ! rec('710','f') )  ? '(' :
			'',
			rec('710','e'),
	),
	'+',')',
);


} else {
	
marc_indicators('110', 2, ' ');

marc('110','a',
	rec('710','a')
);

marc('110','b',
	rec('710','b')
);

	if ( rec('710','c') ) {
	marc('110','c',
		surround('(', ')', rec('710','c'))
	);
	}

}


### 245 indikatori
## i1 = 0 za anonimne publikacije, i1 = 1 ako postoji 700 ili 710
## i2 = pretpostavlja se na temelju člana na početku naslova i jezika
## treba provjeriti

my $i1;

if ( rec('700') || rec('710') ) {
	$i1 = 1;

} else {
	$i1 = 0;
}
	
marc_indicators('245', $i1, 0);

if 	( rec('200','a') =~ m/^Einen / ) {
		marc_indicators('245', $i1, 6);
} 

if 	( rec('200','a') =~ m/^Eine / ) {
		marc_indicators('245', $i1, 5);
} 

if 	( rec('200','a') =~ m/^(Die|Das|Der|Ein|Les|The) / ) {
		marc_indicators('245', $i1, 4);
} 

if ( rec('200','a') =~ m/^(Um|Un|An|La|Le|Il) / ) { 
		marc_indicators('245', $i1, 3);
} 

if ( rec('200','a') =~ m/^(A|L') / ) { 
		marc_indicators('245', $i1, 2);
} 


### 245
## potpolja i interpunkcije pripremljeni u modify

#_debug(3);

marc_compose('245',
	'a', suffix(
		( ! ( rec('200','d') || rec('200','e') || rec('200','k') ) ) && ( rec('200','f') ) ? ' /' :  
		( rec('200','d') ) ? ' =' :
		( rec('200','e') ) ? ' :' :
		( rec('200','k') ) ? ' ;' :
			'.', 
			rec('200','a'),
	),
	'b', suffix(
		( rec('200','d') && rec('200','f') ) ? ' /' : 
		( rec('200','d') && rec('200','c') ) ? '.'  : 
			'',
			rec('200','d'),
	),
	'b', suffix(
		( rec('200','e') && rec('200','f') ) ? ' /' : 
		( rec('200','e') && rec('200','c') ) ? '.'  : 
			'',
			rec('200','e'),
	),
	'b', suffix(
		( rec('200','k') && rec('200','f') ) ? ' /' : 
		( rec('200','k') && rec('200','c') ) ? '.'  : 
			'',
			rec('200','k'),
	),
	'c', suffix(
		( rec('200','f') && rec('200','c') ) ? '.' :
			'',
			join_with(' ; ',
				rec('200','f'),
				rec('200','g')
			)
	),
	## append to last subfield
	'+', suffix('.',
		rec('200','c'),
	),
);

#_debug(0);

### 246

marc_indicators('246', 1, 3);
marc('246','a',
	rec('532')
);

### 250
## zapisima koji nemaju potpolje, dodaje se ^a u modify - provjeriti

marc_compose('250',
	'a',suffix(
		rec('205','f') ? ' / ' : 
			' ',
			rec('205','a')
	),
	'b', rec('205','f'),
);

### 260
## ponovljiva potpolja u originalnom redosljedu - priprema u modify

marc_original_order('260', '210');


### 300
## urediti interpunkcije za sve kombinacije

marc('300','a',
	suffix(
		rec('215','c') ? ' : ' :
		rec('215','d') ? ' ; ' :
		rec('215','e') ? ' + ' :
			'',
			rec('215','a')
	)
);

marc('300','b',
	suffix(
		( rec('215','c') && rec('215','d') ) ? ' ; ' :
		( rec('215','c') && rec('215','e') ) ? ' + ' :
			'',
			rec('215','c')
	)
);

marc('300','c',
	suffix(
		rec('215','e') ? ' + ' :
			'',
			rec('215','d')
	)
);

marc('300','e',
	rec('215','e')
);

### 362 - brojčani podaci za nakladničku cjelinu - razjasniti upotrebu

### 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('225','a') =~ m/^A /) && ( rec(101) =~ m/ENG/ ) ) {
		marc_indicators('440', ' ', 2);
} 

if ( 	( rec('225','a') =~ m/^An /) && ( rec(101) =~ m/ENG/ ) ) {
		marc_indicators('440', ' ', 3);
} 

#_debug(3);

### 440

marc_template(
	from => 225, to => 440,
	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,|x ;|v',
		'a,|x.|p ;|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
		'v',
		'x',
	],
);


## marc_compose za 440 radi samo kad polje ni potpolja nisu ponovljiva. ne zapisuje dobro drugo pojavljivanje ^v, tj. ^v iza ^p (iz 225^w)

#marc_compose('440',
#	'a', suffix(
#		( rec('225','v') ) ? ' ;' :
#		( rec('225','w') ) ? ' ; ' :
#		( rec('225','x') ) ? ',' :
#		( rec('225','h') || rec('225','i') ) ? '.' :
#			'.',
#			frec('225','a')
#	),
#	'x',suffix(
#		( rec('225','x') && ( rec('225','h') || rec('225','i') ) ) ? '.' :
#			'',
#			frec('225','x')
#	),
#	'v',suffix(
#		( rec('225','v') && ( rec('225','h') || rec('225','i') ) ) ? '.' :
#		( rec('225','v') && rec('225','w') ) ? ' ; ' :
#			'',
#			frec('225','v')
#	),
#	'n',suffix(
#		( rec('225','h') && rec('225','i') ) ? ',' :
#		( rec('225','h') && rec('225','w') ) ? ' ; ' :
#			'',
#			frec('225','h')
#	),
#	'p',suffix(
#		( rec('225','i') && rec('225','w') ) ? ' ; ' :
#		( rec('225','i') && rec('225','x') ) ? ',' :
#			'',
#			frec('225','i')
#	),
## 225w treba ici u 440v, na kraj
#	'+', join_with(' ; ',
#		rec('225','w'),
#	)
#);

#marc_original_order('440','225');


#if (
#	count( lookup(
#		sub { 1 },
#		'ffps','libri',
#		sub { rec('225','a') }
#	) ) > 1
#) {


#_debug(0);


### 500

marc('500','a',
	rec('300')
);

marc('500','a',
	rec('305')
);

marc('500','a',
	rec('307')
);

marc('500','a',
	rec('314')
);

### 502 - bilješka o disertacijama
## odgovarajućeg polja nema u originalnim podacima. možda se može pretpostaviti?

### 504

marc('504','a',
	rec('320')
);

### 505
## FFPS 327 - sadrzaj
## NSK konvertira 327 (NP) u 501 (R)
## u LOC konv. tablici stoji 327 (NP) u 505 (NR)
## standard i validacije dopuštaju 501 (R) i 505 (R)

if ( config() =~ m/ffps/ || config() =~ m/fftu/ ) {
	marc_indicators('505', '0', ' ');
	marc('505','a',
		regex('s/\s*[\\r\\n]+\s*\**\s*/ ; /g',
			rec('327')
		)	
);
}

if ( config() =~ m/ffan/ ) {
	marc_indicators('505', '0', ' ');
	marc('505','a',
		regex('s/[<>]//g',
			rec('330')
		)	
);
}




### 520
## NSK konvertira 330 (P) u 520 (P) = LOC konv. tablica
## FFPS 330 (NP) - sažetak

if ( config() =~ m/ffps/ ) { 
	marc('520','a',
		regex('s/[\\r\\n]+/. /g',
			rec('330')
		)	
	);
}

### 526 - STUDY PROGRAM INFORMATION NOTE
## provjeriti za svaku bazu sta je u 996?

marc_indicators('526', 8, ' ');

marc('526','a',
	rec('996')
);

### 538 - zahtjevi sustava

marc('538','a',
	rec('337','a')
);

### 655

marc_indicators('655', ' ', 4);
marc('655','a',
	rec('608')
);

### 653

marc_indicators('653', 0, ' ');
marc('653','a',
	rec('610')
);

#_debug(2);


### 700
## ako je u originalu ponovljivo polje treba biti i konvertirano u ponovljivo !!

marc_indicators('700', 1, ' ');

if ( rec('701') ) { 
marc('700','4', 
	'aut'
); 
}

marc('700','a',
	join_with(', ',
		rec('701', 'a'),
		rec('701', 'b')
	)
);

marc('700','a',
	join_with(', ',
		rec('701', 'c'),
		rec('701', 'd')
	)
);

marc('700','a',
	join_with(', ',
		rec('701', 'e'),
		rec('701', 'f')
	)
);

marc('700','a',
	join_with(', ',
		rec('701', 'g'),
		rec('701', 'h')
	)
);


marc('700','a',
	join_with(', ',
		rec('702', 'a'),
		rec('702', 'b')
	)
);

marc('700','a',
	join_with(', ',
		rec('702','c'),
		rec('702','d')
	)
);

marc('700','a',
	join_with(', ',
		rec('702','e'),
		rec('702','f')
	)
);

marc('700','a',
	join_with(', ',
		rec('702','g'),
		rec('702','h')
	)
);

#_debug(0);


### 740 - nadopuniti

marc_indicators('740', 0, ' ');

# if ( ! rec('464') ) {
# marc('740','a',
# 	rec('200','c')
# );

marc('740','a',
	rec('200','k')
);

# } else {

#marc('740','a',
#	rec('464','a')
#);

# };


### 760 w
## generiranje zapisa o nakladničkoj cjelini i povezivanje podređenog zapisa s nadređenim

#if (
#	rec('225','a')	# da li je nakladnička cjelina?
#) {
#
#my $series_key =
#join_with('',
#	rec('225','a'),
#	rec('210','a'),
#	rec('210','b'),
#);
#
#my $series = get( $series_key );
#
#if ($series) {
#	warn "nije novi";
#} else {
#
#$series = join_with('',
#	uc( config() ),
#	' LS',
#	rec('000')
#);
#
#set( $series_key => $series );
#
#} # $series
#} # nakladnička cjelina
#
#my $series_key = join_with('',
#	rec('225','a'),
#	rec('210','a'),
#	rec('210','b'),
#);
#
#if ($series_key) {
#
#	marc_indicators('760', 0, ' ');
#	
#	marc('760','w',
#		get( $series_key )
#	);
#}

# ## testing
#
# my $dup_key = join_with('',
#	rec('200','a'),
#);
#
#if ($dup_key) {
#	marc('995','a',
#		get( $dup_key )
#	);
#}
#
#
# marc_indicators('776', 0, ' ');
# 
# marc('776','a',
#	rec('452','1')
# );
#


### 852 - signatura 

marc_indicators('852', 4, ' ');

marc('852','j',
	join_with(' ',
		rec('990')
	)
);

### 876 - item information - basic bibliographic unit

marc('876','a',
	rec('991'),
);

### 886 - former marc

marc_indicators('886', 2, ' ');

marc('886','2',
	'ffmarc'
);

marc('886','a',
	'994'
);

marc('886','b',
	join_with(''.
		'##^a',
		join_with('',
			prefix('^a',
				rec('994','a'),
			),
			prefix('^b',
				rec('994','b')
			)
		)
	)
);


} # polje 200a
