{---# LANGUAGE PatternGuards #-} {-# LANGUAGE ScopedTypeVariables, OverloadedStrings #-} -- | Parsing CAVEAT records. module Bio.PDB.EventParser.ParseCAVEAT(parseCAVEAT) where import Prelude hiding(String) import qualified Data.ByteString.Char8 as BS import Bio.PDB.EventParser.PDBEvents import Bio.PDB.EventParser.PDBParsingAbstractions --------------- {{{ CAVEAT records {-- COLUMNS DATA TYPE FIELD DEFINITION --------------------------------------------------------------------------------------- 1 - 6 Record name "CAVEAT" 9 - 10 Continuation continuation Allows concatenation of multiple records. 12 - 15 IDcode idCode PDB ID code of this entry. 20 - 79 String comment Free text giving the reason for the CAVEAT. --} {-# INLINE caveatFields #-} caveatFields = [(6, mKeyword "record header" "CAVEAT"), (8, mSpc 2 ), (10, dInt "continuation" 0 ), (11, mSpc 1 ), (15, mStr "PDB entry id code" ), (19, mSpc 4 ), (79, mStr "comment" )] -- | Parses a CAVEAT record. -- -- Arguments: -- -- (1) input line -- -- (2) input line number -- parseCAVEAT :: (Monad m) => String -> Int -> m [PDBEvent] -- Result is a monad action returning a list of 'PDBEvent's. parseCAVEAT line line_no = return $ if null errs then [result] else errs where -- parse (fields, errs) = parseFields caveatFields line line_no [fRec, _, fCont, _, fPDBId, _, fComment] = fields IFInt cont = fCont IFStr pdbid = fPDBId IFStr comment = fComment -- unpack fields result = CAVEAT cont pdbid comment --------------- }}} CAVEAT records