You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

90 lines
2.4 KiB
Python

# Copyright 2017 Martin Olejar
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import re
from string import printable
def is_string(data):
""" Check property string validity """
if not len(data):
return None
if data[-1] != 0:
return None
pos = 0
while pos < len(data):
posi = pos
while pos < len(data) and \
data[pos] != 0 and \
data[pos] in printable.encode() and \
data[pos] not in (ord('\r'), ord('\n')):
pos += 1
if data[pos] != 0 or pos == posi:
return None
pos += 1
return True
def extract_string(data, offset=0):
""" Extract string """
str_end = offset
while data[str_end] != 0:
str_end += 1
return data[offset:str_end].decode("ascii")
def line_offset(tabsize, offset, string):
offset = " " * (tabsize * offset)
return offset + string
def get_version_info(text):
ret = dict()
for line in text.split('\n'):
line = line.rstrip('\0')
if line and line.startswith('/ {'):
break
if line and line.startswith('//'):
line = line.replace('//', '').replace(':', '')
line = line.split()
if line[0] in ('version', 'last_comp_version', 'boot_cpuid_phys'):
ret[line[0]] = int(line[1], 0)
return ret
def strip_comments(text):
text = re.sub('//.*?(\r\n?|\n)|/\*.*?\*/', '\n', text, flags=re.S)
return text
def split_to_lines(text):
lines = []
mline = str()
for line in text.split('\n'):
line = line.replace('\t', ' ')
line = line.rstrip('\0')
line = line.rstrip(' ')
line = line.lstrip(' ')
if not line or line.startswith('/dts-'):
continue
if line.endswith('{') or line.endswith(';'):
line = line.replace(';', '')
lines.append(mline + line)
mline = str()
else:
mline += line + ' '
return lines