46 lines
878 B
Cython
46 lines
878 B
Cython
#cython: language_level=3
|
|
|
|
'''
|
|
Created on 25 mars 2016
|
|
|
|
@author: coissac
|
|
'''
|
|
|
|
from obitools3.utils cimport __etag__
|
|
import re
|
|
|
|
|
|
__ret__ = re.compile(b'''(([^ ]+)=('[^']*'|"[^"]*"|[^;]+); *)+?''')
|
|
|
|
|
|
cpdef tuple parseHeader(bytes header):
|
|
cdef list m
|
|
cdef dict tags
|
|
cdef bytes definition
|
|
cdef bytes ident
|
|
cdef bytes second
|
|
|
|
m=header[1:-1].split(maxsplit=1)
|
|
|
|
ident=m[0]
|
|
if len(ident)>1 and ident[-2:-1] == b';':
|
|
ident = ident[:-1]
|
|
|
|
if len(m)==1:
|
|
tags={}
|
|
definition=b''
|
|
else:
|
|
second=m[1]
|
|
m = __ret__.findall(second)
|
|
|
|
if m:
|
|
tags = dict([(a[1],__etag__(a[2])) for a in m])
|
|
definition = second.split(m[-1][0],1)[1].strip()
|
|
else:
|
|
tags = {}
|
|
definition = second.strip()
|
|
|
|
return ident,tags,definition
|
|
|
|
|