Remark_TagParser.py

Back to Tag parsers

Remark/TagParsers/

# -*- coding: utf-8 -*-

# Description: Remark tag parser
# Detail: Parses the description-tag from the header, and tags based on names.
# Documentation: tag_parsers.txt

from Remark.TagParsers.Dictionary_TagParser import Dictionary_TagParser
from Remark.FileSystem import openFileUtf8, globalOptions

import string
import re
import codecs

class Remark_TagParser(object):
    def __init__(self, tagMap):
        self.dictionaryParser = Dictionary_TagParser(tagMap)

    def parse(self, fileName, maxLines, reporter):
        # Let the generic parser handle those tags
        # which can be found via regular expressions.
        tagSet = self.dictionaryParser.parse(fileName, maxLines, reporter)

        # This way we only have to handle the description.
        # The description is a file line which precedes
        # a row of equality signs.                 
        lineRegex = re.compile(r'[ \t]*((==+=)|(--+-))')
        previousLine = ''

        with openFileUtf8(fileName) as file:
            lineNumber = 0
            for fileLine in file:
                # Search for a description
                match = lineRegex.search(fileLine)
                if match != None:
                    # We have found a header!
                    tagSet['description'] = [previousLine.strip()]
                    break

                # We want to remember the previous line
                # to be able to give the description when
                # we detect a header line.
                previousLine = fileLine
                lineNumber += 1
                if lineNumber >= maxLines:
                    # All tags must appear within 'maxLines' lines. 
                    break
        return tagSet