{-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE OverloadedStrings #-} -- | Parsing SPLIT records. module Bio.PDB.EventParser.ParseSPLIT(parseSPLIT) where import qualified Data.ByteString.Char8 as BS import Bio.PDB.EventParser.PDBEvents import Bio.PDB.EventParser.PDBParsingAbstractions --------------- {{{ SPLIT records {-- COLUMNS DATA TYPE FIELD DEFINITION ---------------------------------------------------------------------------------- 1 - 6 Record name "SPLIT " 9 - 10 Continuation continuation Allows concatenation of multiple records. 12 - 15 IDcode idCode ID code of related entry. 17 - 20 IDcode idCode ID code of related entry. 22 - 25 IDcode idCode ID code of related entry. 27 – 30 IDcode idCode ID code of related entry. 32 - 35 IDcode idCode ID code of related entry. 37 - 40 IDcode idCode ID code of related entry. 42 - 45 IDcode idCode ID code of related entry. 47 - 50 IDcode idCode ID code of related entry. 52 - 55 IDcode idCode ID code of related entry. 57 - 60 IDcode idCode ID code of related entry. 62 - 65 IDcode idCode ID code of related entry. 67 - 70 IDcode idCode ID code of related entry. 72 - 75 IDcode idCode ID code of related entry. 77 - 80 IDcode idCode ID code of related entry. --} titleFields = [(6, mKeyword "record header" "SPLIT "), (8, mSpc 2), (10, dInt "continuation" 0), (80, pStr "PDB id codes needed for whole complex")] {-# SPECIALIZE parseSPLIT :: BS.ByteString -> Int -> IO [PDBEvent] #-} -- | Parses a SPLIT record: -- -- Arguments: -- -- (1) input line -- -- (2) input line number -- -- Result is a monad action returning a list of 'PDBEvent's. parseSPLIT :: (Monad m) => BS.ByteString -> Int -> m [PDBEvent] parseSPLIT line line_no = return $ if null errs then [result] else errs where -- parse (fields, errs) = parseFields titleFields line line_no [fRec, fSpc, fCont, fCodeString] = fields -- unpack fields IFInt cont = fCont IFStr codeString = fCodeString codes = filter (/="") $ BS.split ' ' codeString result = SPLIT cont codes -- NOTE: consecutive "SPLIT" records should be merged into a single multiline entry with SUCH method --------------- }}} SPLIT records