ĕ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 2016 2017 Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableSafe5AMException type for the bad things that may happen while you use the library.5The value is greater than 59 and thus is invalid for 7.5The value is greater than 74 and thus is invalid for 7.:Provided text wasn't a correct media catalog number (MCN).&Provided text wasn't a valid CUE text."Provided text wasn't a valid ISRC.The track's International Standard Recording Code (ISRC). It must be 12 characters in length. The first five characters are alphanumeric, the last seven are numeric only.A type for things like title or performer that should have length between 1 and 80 characters as per spec. We also demand that it does not contain "V and newline characters, as it's not clear from the spec how to escape them properly.cDisc's Media Catalog Number (MCN), must be 13 characters long, all the characters must be numeric. This datatype is used to indicate duration and position in time. It contains number of frames. There are 75 frames in one second. Track datatype. Audio/Music (2352). Karaoke CD+G (2448).CD-ROM Mode1 data (cooked).CD-ROM Mode1 data (raw).CD-ROM XA Mode2 data.CD-ROM XA Mode2 data.CD-I Mode2 data.CD-I Mode2 data.3A track. Single track can have one or more indices.Flag: digital copy permitted.Flag: four channel audio..Flag: pre-emphasis enabled (audio track only).FFlag: serial copy management system (not supported by all recorders).Type datatype.9The track's International Standard Recording Code (ISRC).Title of the track.Performer of the track.Songwriter of the track.Track's pregap. .Starting time of track pregap, a.k.a. INDEX 0.!Collection of indices for the track starting with index 1. The index specifies the starting time of the track data. Index 1 is the only index that's stored in the disc's table of contents."Track's postgap.#*Enumeration of audio or file's data types.$FIntel binary file (least significant byte first). Use for data files.%HMotorola binary file (most significant file first). Use for data files.&*Audio AIFF file (44.1 kHz, 16 bit stereo).'*Audio WAVE file (44.1 kHz, 16 bit stereo).((Audio MP3 file (44.1 kHz 16 bit stereo).)OA file to be written. Single file can be divided into one or more tracks (see ).+ Name of file., Type of file.-!Collection of tracks in the file..2Entire CUE sheet, contains one or more files (see )).0!Disc's Media Catalog Number (see ).1MName of the file that contains the encoded CD-Text information for the disc.2Performer of the entire disc.3Title of the entire disc.4Songwriter of the entire disc.5BNumber of the first track. Typically 1, but may be greater than 1.6"Collection of files to be written.7 Construct  q from minutes, seconds, and frames. There are 75 frames per second. If number of seconds or frames is invalid,  or  will be thrown.8(Get minutes, seconds, and frames from a   value.9Render representation of   in mm:ss:ff format.:Make a . If the provided & value is not a valid MCN, throw the InvalidMcnException.;Get  from .<Make a . If the provided + value is not a valid CUE text, throw the  exception.=Get  from .>Make an , if the provided ' value is not a valid ISRC, throw the  exception.?Get  from .Check if the given  is a valid MCN.Check if the given S has valid length and contents to be used in a CUE sheet as performer, title, etc. A variant of ' that only permits ASCII letter chars.Scale down size of -generated stuff.File path generator.U  !"#$%&'()*+,-./01234567 Number of minutes, no limit here!Number of seconds, 0 59 inclusive Number of frames, 0 74 inclusive The result89:;<=>?@ABCDEFGHIJKL@  !"#$%&'()*+,-./0123456789:;<=>?@./0123456)*+,-#$%&'( !"  789:;<=>?%    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKL 2016 2017 Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableSafe!":zRender a CUE sheet as a lazy . All  values in the . will be UTF-8 encoded. Format a # padding it with zeros to 2 digits. Render a # as per the CUE specs. Render a   as per the CUE specs.z,Use CRLF sequence as end of line  separatorThe . to render The resultzzz 2016 2017 Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNone!"05[%#A helper data type for track flags.-Context of parsing. This is passed around in . We need all of this to signal parse errors on duplicate declarations of things that should only be declared once according to description of the format, to validate track numbers, etc.jCurrent state of CUE sheet we parse. When a part/parameter of CUE sheet is parsed, this thing is updated.>Temporary storage for parsed files (we can't store it in the .0 because it does not allow empty list of files). Similar to -, collection of tracks but for current file.SNumber of tracks we have parsed so far, to avoid traversing lists again and again.;Temporary storage for collection indices for current track.Similarly for indices.,Type of parser we use here, it's not public.{CThe enumeration of all failures that may happen during running of .| was used (should not happen)})Incorrect indentation (should not happen)~+We ran into an invalid media catalog number#We ran into an invalid text literalWe spotted a track out of orderWe ran into an invalid ISRC(We ran into an invalid number of seconds'We ran into an invalid number of frames%We spotted a track index out of orderuExtended error component with support for storing number of track declaration in which a parsing error has occurred.Parse a CUE sheet from a lazy .Parse a .2. The result is not returned, but written in the ."Parse a thing and then check if it's OK conceptually. If it's not OK, the error will be reported with position at the start of offending lexeme, otherwise the lexeme is parsed as usual. Of course if the lexeme has incorrect format, that is just reported and no additional check happens.If the first argument is { and we can parse the given command, fail pointing at the beginning of the command and report it as something unexpected.Indicate that the inner parser belongs to declaration of a track with the given index. The index of the track will be added to 2s to help the user find where the error happened..A labelled literal (a helper for common case).*String literal with support for quotation.Parse a .Case-insensitive symbol parser.A wrapper for lexemes.Space consumer (eats newlines).'Space consumer (does not eat newlines). Determine by ) if we have already parsed FLAGS command.6Apply given function to the first element of the list.Decode UTF-8 encoded  represented as a .%A dummy file. It's only here because .E can't have an empty list of files and it cannot be a bottom either.A dummy track, see .B{|}~&File name to include in error messagesCUE sheet to parse as a lazy  or result0Should we instantly fail when command is parsed?How to judge the resultName of the command to grab {|}~ {|}~-{ |}~ 2016 2017 Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNoneN  !"#$%&'()*+,-./0123456789:;<=>?z{|}~N./0123456)*+,-#$%&'( !"  789:;<=>?{|}~z      !"#$%&'()*+,-./001234456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~&cue-sheet-0.1.1-FiOYPXPJw4hJ7LlGtP1S4EText.CueSheet.TypesText.CueSheet.RenderText.CueSheet.Parser Data.Char IsAlphaNumB ByteString Text.CueSheetCueSheetExceptionInvalidSeconds InvalidFrames InvalidMcnInvalidCueText InvalidIsrcIsrcCueTextMcnCueTime CueTrackType CueTrackAudio CueTrackCdgCueTrackMode1_2048CueTrackMode1_2352CueTrackMode2_2336CueTrackMode2_2352CueTrackCdi2336CueTrackCdi2352CueTrackcueTrackDigitalCopyPermittedcueTrackFourChannelAudiocueTrackPreemphasisEnabledcueTrackSerialCopyManagement cueTrackType cueTrackIsrc cueTrackTitlecueTrackPerformercueTrackSongwritercueTrackPregapcueTrackPregapIndexcueTrackIndicescueTrackPostgap CueFileTypeBinaryMotorolaAiffWaveMP3CueFile cueFileName cueFileType cueFileTracksCueSheet cueCatalog cueCdTextFile cuePerformercueTitle cueSongwritercueFirstTrackNumbercueFiles fromMmSsFftoMmSsFf showMmSsFfmkMcnunMcn mkCueText unCueTextmkIsrcunIsrc$fExceptionCueSheetException$fArbitraryIsrc $fShowIsrc$fArbitraryCueText $fShowCueText$fArbitraryMcn $fShowMcn$fArbitraryCueTime$fArbitraryCueTrackType$fArbitraryCueTrack$fArbitraryCueFileType$fArbitraryCueFile$fArbitraryCueSheet$fShowCueFileType$fReadCueFileType$fEqCueFileType$fOrdCueFileType$fBoundedCueFileType$fEnumCueFileType$fGenericCueFileType$fShowCueTrackType$fReadCueTrackType$fEqCueTrackType$fOrdCueTrackType$fBoundedCueTrackType$fEnumCueTrackType$fGenericCueTrackType $fShowCueTime $fReadCueTime $fEqCueTime $fOrdCueTime$fGenericCueTime$fEqMcn$fOrdMcn $fGenericMcn $fEqCueText $fOrdCueText$fGenericCueText$fEqIsrc $fOrdIsrc $fGenericIsrc$fShowCueTrack $fEqCueTrack $fOrdCueTrack$fGenericCueTrack $fShowCueFile $fEqCueFile $fOrdCueFile$fGenericCueFile$fShowCueSheet $fEqCueSheet $fOrdCueSheet$fGenericCueSheet$fEqCueSheetException$fOrdCueSheetException$fShowCueSheetException$fReadCueSheetException$fGenericCueSheetExceptionrenderCueSheetCueParserFailure CueParserFailCueParserIndentationCueParserInvalidCatalogCueParserInvalidCueTextCueParserTrackOutOfOrderCueParserInvalidTrackIsrcCueParserInvalidSecondsCueParserInvalidFramesCueParserTrackIndexOutOfOrderEec parseCueSheet$$fShowErrorComponentCueParserFailure$fShowErrorComponentEec$fErrorComponentEec$fShowCueParserFailure$fEqCueParserFailure$fOrdCueParserFailure$fDataCueParserFailure$fGenericCueParserFailure $fShowEec$fEqEec$fOrdEec $fDataEec $fGenericEec#text-1.2.2.2-9RlRQEEESJb1LT1TjepTtHData.Text.InternalText isValidMcnisValidCueText isAlphaNum scaleDown'QuickCheck-2.9.2-3a8nWdLsV8cEn9LdMoftRmTest.QuickCheck.Arbitrary arbitraryfilepathbytestring-0.10.8.1Data.ByteString.Lazy.Internal formatNatbase GHC.NaturalNaturalrenderFileTyperenderTrackType CueTrackFlagContexttransformers-0.5.2.0 Control.Monad.Trans.State.StrictStateTcontextCueSheet contextFiles contextTrackscontextTrackCountcontextIndicescontextIndexCountParserGHC.Basefail pCueSheet withCheckfailAtIfghc-prim GHC.TypesTrueinTrack'megaparsec-5.3.0-LHWibr0TEASGx91LECwEBEText.Megaparsec.Error ParseError labelledLit stringLit naturalLitsymbollexemescnsc seenFlagschangingFirstOf decodeUtf8String dummyFile dummyTrackDCPFourCHPRESCMS pHeaderItempCatalog pCdTextFile pPerformerpTitle pSongwriterpRempFilepTrackpTrackHeaderItempFlagspFlagpIsrcpTrackPerformer pTrackTitlepTrackSongwriterpPregappPostgappIndexcueTime