package Ġca . void star zero . is bd Ċ Ċ import Ġca . void star zero . is bd . title statement . ast .* Ċ import Ġca . void star zero . mar c . MAR C Field Ċ import Ġca . void star zero . mar c . field Data Ċ Ċ fun Ġclean Input ( input : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġval ĠREPLACE Ġ= Ġ 0 xff fd . to Char () ĊĠĠĠ Ġreturn Ġinput ĊĠĠĠĠĠĠĠ Ġ. replace (" Ġ= Ġ", Ġ"$ REPLACE =$ REPLACE ") ĊĠĠĠĠĠĠĠ Ġ. replace (" Ġ: Ġ", Ġ"$ REPLACE :$ REPLACE ") ĊĠĠĠĠĠĠĠ Ġ. replace (" Ġ/ Ġ", Ġ"$ REPLACE /$ REPLACE ") ĊĠĠĠĠĠĠĠ Ġ. replace (" Ġ; Ġ", Ġ"$ REPLACE ;$ REPLACE ") ĊĠĠĠĠĠĠĠ Ġ. replace (" ...", Ġ" ___ ") ĊĠĠĠĠĠĠĠ Ġ. remove Suffix (".") ĊĠĠĠĠĠĠĠ Ġ. trim () Ċ } Ċ Ċ fun Ġprepare ( input : ĠString ): ĠList < String > Ġ{ ĊĠĠĠ Ġreturn Ġdropped Periods ( clean Input ( input )) Ċ } Ċ Ċ fun Ġfind Periods ( input : ĠString ): ĠList < Int > Ġ{ ĊĠĠĠ Ġreturn Ġinput . map Indexed NotNull Ġ{ Ġi , Ġc Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ( c ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ'.' Ġ-> Ġi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġperiod Combin ations ( positions : ĠList < Int >): ĠList < List < Int >> Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ( positions ) Ġ{ ĊĠĠĠĠĠĠĠ Ġempty List < Int >() Ġ-> ĠlistOf ( emptyList ()) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrest Ġ= Ġperiod Combin ations ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpositions . sub List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpositions . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrest . map Ġ{ Ġit . plus ( positions [ 0 ]) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. plus ( rest ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġdropped Periods ( input : ĠString ): ĠList < String > Ġ{ ĊĠĠĠ Ġreturn Ġperiod Combin ations ( ĊĠĠĠĠĠĠĠ Ġfind Periods ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ). map Ġ{ Ġcombination Ġ-> ĊĠĠĠĠĠĠĠ Ġinput . filter Indexed Ġ{ Ġi , Ġ_ Ġ-> Ġi Ġ! in Ġcombination Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ // Ġidea Ġis Ġwe Ġwant Ġto Ġdetect Ġimpro per Ġpunctuation Ġand Ċ // Ġtry Ġto Ġcorrect Ġit Ġto Ġgive Ġa Ġbetter Ġparse . Ġthis Ġmay Ċ // Ġultimately Ġnot Ġbe Ġthe Ġright Ġway Ġto Ġdo Ġthis . Ċ fun Ġpunctuation Fixes ( input : ĠM ARC Field ): ĠM ARC Field Ġ{ ĊĠĠĠ Ġ// Ġif Ġcolon Ġat Ġsub field Ġboundary Ġis Ġmissing Ġpreceding Ġspace , Ġadd Ġit Ġin ĊĠĠĠ Ġval Ġwith Colon Spaces Ġ= Ġinput . sub fields . map Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( it . second . matches (" .* [^ Ġ] :$ ". to Regex ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield Data Ġ= Ġ Ġit . second . substring ( 0 , Ġit . second . length Ġ- Ġ 1 ) Ġ+ Ġ" Ġ:" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( it . first , Ġfield Data ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĠM ARC Field ( ĊĠĠĠĠĠĠĠ Ġinput . tag , ĊĠĠĠĠĠĠĠ Ġinput . indicators , ĊĠĠĠĠĠĠĠ Ġwith Colon Spaces ĊĠĠĠ Ġ) Ċ } Ċ Ċ fun Ġuses IS BD ( input : ĠM ARC Field ): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( input . sub fields . any Ġ{ Ġit . first Ġ== Ġ' c ' Ġ} ĊĠĠĠĠĠĠĠ Ġ&& Ġ! input . field Data (). contains (" Ġ/ Ġ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( input . sub fields . any Ġ{ Ġit . first Ġ== Ġ' b ' Ġ} ĊĠĠĠĠĠĠĠ Ġ&& Ġ! input . field Data (). contains (" Ġ: Ġ| Ġ= Ġ". to Regex ())) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġtrue ; Ċ } Ċ Ċ fun Ġsimple Parse ( input : ĠM ARC Field ): ĠTitle Statement Ġ{ ĊĠĠĠ Ġreturn ĠTitle Statement ( ĊĠĠĠĠĠĠĠ Ġtitles Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMono graph ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Pro per Ġ= ĠTitle Pro per ( input . sub fields . first OrNull { Ġit . first Ġ== Ġ' a ' Ġ} ?. second Ġ?: Ġ""), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġother Info Ġ= Ġinput . sub fields . filter Ġ{ Ġit . first Ġ== Ġ' b ' Ġ}. map Ġ{ ĠOther Info ( it . second ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġs ors Ġ= Ġinput . sub fields . filter Ġ{ Ġit . first Ġ== Ġ' c ' Ġ}. map Ġ{ ĠS OR ( it . second ) Ġ} ĊĠĠĠ Ġ) Ċ } Ċ