def scopusRecordParser(record, header = None):
    """The parser [ScopusRecords](../classes/ScopusRecord.html#metaknowledge.scopus.ScopusRecord) use. This takes a line from [scopusParser()](#metaknowledge.scopus.scopusHandlers.scopusParser) and parses it as a part of the creation of a `ScopusRecord`.

    **Note** this is for csv files downloaded from scopus _not_ the text records as those are less complete. Also, Scopus uses double quotes (`"`) to quote strings, such as abstracts, in the csv so double quotes in the string must be escaped. For reasons not fully understandable by mortals they choose to use two double quotes in a row (`""`) to represent an escaped double quote. This parser does not unescape these quotes, but it does correctly handle their interacts with the outer double quotes.

    # Parameters

    _record_ : `str`

    > string ending with a newline containing the record's entry

    # Returns

    `dict`

    > A dictionary of the key-vaue pairs in the entry
    """
    if header is None:
        header = scopusHeader
    splitRecord = record[:-1].split(',')
    tagDict = {}
    quoted = False
    for key in reversed(header):
        currentVal = splitRecord.pop()
        if currentVal == '':
            pass
        elif currentVal[-1] == '"':
            if re.match(firstQuotingRegex, currentVal) is None:
                valString = ',' + currentVal[:-1]
                currentVal = splitRecord.pop()
                #double quotes (") are escaped by proceeding them with another double quote
                #So an entry containing:

                #',"stuff,""quoted"",more stuff,""more quoted""",'

                #would be a single string belonging to 1 column that looks like:

                #'stuff,"quoted",more stuff,"more quoted"'

                #We are not going to unescape the quotation marks but we do have to deal with them
                while re.match(innerQuotingRegex, currentVal) is None:
                    valString = ',' + currentVal + valString
                    currentVal = splitRecord.pop()
                valString = currentVal[1:] + valString
            else:
                try:
                    valString = currentVal[1:-1]
                except ValueError:
                    valString = currentVal[1:-1]
            tagDict[key] = valString
        else:
            tagDict[key] = currentVal
    return tagDict
The parser [ScopusRecords](../classes/ScopusRecord.html#metaknowledge.scopus.ScopusRecord) use. This takes a line from [scopusParser()](#metaknowledge.scopus.scopusHandlers.scopusParser) and parses it as a part of the creation of a `ScopusRecord`.

    **Note** this is for csv files downloaded from scopus _not_ the text records as those are less complete. Also, Scopus uses double quotes (`"`) to quote strings, such as abstracts, in the csv so double quotes in the string must be escaped. For reasons not fully understandable by mortals they choose to use two double quotes in a row (`""`) to represent an escaped double quote. This parser does not unescape these quotes, but it does correctly handle their interacts with the outer double quotes.

    # Parameters

    _record_ : `str`

    > string ending with a newline containing the record's entry

    # Returns

    `dict`

    > A dictionary of the key-vaue pairs in the entry