from hachoir_parser import QueryParser
from hachoir_regex import PatternMatching
class HachoirPatternMatching(PatternMatching):
def __init__(self, categories=None, parser_ids=None):
PatternMatching.__init__(self)
# Load parser list
tags = []
if categories: tags += [ ("category", cat) for cat in categories ]
if parser_ids: tags += [ ("id", parser_id) for parser_id in parser_ids ]
if tags : tags += [ None ]
parser_list = QueryParser(tags)
# Create string patterns
for parser in parser_list:
for (magic, offset) in parser.getParserTags().get("magic",()):
self.addString(magic, (offset, parser))
# Create regex patterns
for parser in parser_list:
for (regex, offset) in parser.getParserTags().get("magic_regex",()):
self.addRegex(regex, (offset, parser))
self.commit()
def search(self, data):
for start, stop, item in PatternMatching.search(self, data):
yield (item.user[1], start*8 - item.user[0])
syntax highlighted by Code2HTML, v. 0.9.1