aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMattias Andrée <maandree@operamail.com>2014-05-31 09:06:20 +0200
committerMattias Andrée <maandree@operamail.com>2014-05-31 09:06:20 +0200
commitbb6c9003f7ced247e11926d878fcd95f57791a01 (patch)
treeff876d68d6a6af5ed541e0118b8a0e183131a9de
parentsort error codes by name (diff)
downloadlibgamma-bb6c9003f7ced247e11926d878fcd95f57791a01.tar.gz
libgamma-bb6c9003f7ced247e11926d878fcd95f57791a01.tar.bz2
libgamma-bb6c9003f7ced247e11926d878fcd95f57791a01.tar.xz
reduce code duplication
Signed-off-by: Mattias Andrée <maandree@operamail.com>
-rwxr-xr-xsrc/extract/libgamma-method-extract213
1 files changed, 100 insertions, 113 deletions
diff --git a/src/extract/libgamma-method-extract b/src/extract/libgamma-method-extract
index 6477c8a..9e76681 100755
--- a/src/extract/libgamma-method-extract
+++ b/src/extract/libgamma-method-extract
@@ -24,120 +24,107 @@ with open(os.path.dirname(sys.argv[0]) + '/../lib/libgamma-method.h', 'rb') as f
data = file.read()
data = data.decode('utf-8', 'error')
+
+def list_define(prefix, *blacklist):
+ global data
+ test1 = lambda line : line.startswith('#define ' + prefix)
+ test2 = lambda line : line.split(' ')[1] not in [prefix + b for b in list(blacklist)]
+ test3 = lambda line : not line.endswith('_H')
+ defs = [line for line in data.split('\n') if test1(line) and test2(line) and test3(line)]
+ print('\n'.join([d.split(' ')[1] for d in defs]))
+
+def list_enum(prefix, *blacklist):
+ global data
+ test1 = lambda line : line.strip().startswith(prefix)
+ test2 = lambda line : line.split(' ')[1] not in [prefix + b for b in list(blacklist)]
+ defs = [line for line in data.split('\n') if test1(line) and test2(line)]
+ print('\n'.join([d.strip().split(' ')[0].rstrip(',') for d in defs]))
+
+def list_struct(name):
+ global data
+ data = data[data.find('\ntypedef struct ' + name):]
+ data = data[:data.find('\n}')]
+ test1 = lambda line : line.startswith(' ') and line.endswith(';')
+ test2 = lambda line : ' * ' not in line
+ defs = [line for line in data.split('\n') if test1(line) and test2(line)]
+ print('\n'.join([d.strip().split(' : ')[0].split(' ')[-1].rstrip(';') for d in defs]))
+
+
+def type_struct(name):
+ global data
+ data = data[data.find('\ntypedef struct ' + name):]
+ data = data[:data.find('\n}')]
+ test1 = lambda line : line.startswith(' ')
+ test2 = lambda line : ' * ' not in line
+ test3 = lambda line : line.strip().split(' : ')[0].split(' ')[-1].rstrip(';') == sys.argv[3]
+ defs = [line for line in data.split('\n') if test1(line) and test2(line) and test3(line)]
+ line = defs[0].strip().rstrip(';')
+ if ' : ' in line:
+ line = line.split(' : ')
+ line[0] = ' '.join(line[0].split(' ')[:-1])
+ print(':'.join(line))
+ else:
+ print(' '.join(line.split(' ')[:-1]))
+
+
+def doc_define():
+ global data
+ i = data.find('\n#define ' + sys.argv[2])
+ data = data[:i]
+ i = data.rfind('\n */')
+ data = data[:i]
+ i = data.rfind('/**\n')
+ data = data[i + len('/**\n'):]
+ data = [line[3:] for line in data.split('\n')]
+ print('\n'.join(data))
+
+def doc_enum():
+ global data
+ while '\n ' in data:
+ data = data.replace('\n ', '\n')
+ i = data.find('\n' + sys.argv[2])
+ data = data[:i]
+ i = data.rfind('\n*/')
+ data = data[:i]
+ i = data.rfind('/**\n')
+ data = data[i + len('/**\n'):]
+ data = [line[2:] for line in data.split('\n')]
+ print('\n'.join(data))
+
+def doc_struct(name):
+ global data
+ data = data[data.find('\ntypedef struct ' + name):]
+ data = data[:data.find('\n}')]
+ test1 = lambda line : line.startswith(' ')
+ test2 = lambda line : ' * ' not in line
+ test3 = lambda line : line.strip().split(' : ')[0].split(' ')[-1].rstrip(';') == sys.argv[2]
+ defs = [line for line in data.split('\n') if test1(line) and test2(line) and test3(line)]
+ line = defs[0]
+ i = data.find('\n' + line)
+ data = data[:i]
+ while '\n ' in data:
+ data = data.replace('\n ', '\n')
+ i = data.rfind('\n*/')
+ data = data[:i]
+ i = data.rfind('/**\n')
+ data = data[i + len('/**\n'):]
+ data = [line[2:] for line in data.split('\n')]
+ print('\n'.join(data))
+
+
if sys.argv[1] == '--list':
- if sys.argv[2] == '--method':
- test1 = lambda line : line.startswith('#define LIBGAMMA_METHOD_')
- test2 = lambda line : line.split(' ')[1] not in ('LIBGAMMA_METHOD_MAX', 'LIBGAMMA_METHOD_COUNT')
- test3 = lambda line : not line.endswith('_H')
- defs = [line for line in data.split('\n') if test1(line) and test2(line) and test3(line)]
- print('\n'.join([d.split(' ')[1] for d in defs]))
- elif sys.argv[2] == '--info':
- test1 = lambda line : line.startswith('#define LIBGAMMA_CRTC_INFO_')
- test2 = lambda line : not line.split(' ')[1] == 'LIBGAMMA_CRTC_INFO_COUNT'
- defs = [line for line in data.split('\n') if test1(line) and test2(line)]
- print('\n'.join([d.split(' ')[1] for d in defs]))
- elif sys.argv[2] == '--connector':
- test1 = lambda line : line.strip().startswith('LIBGAMMA_CONNECTOR_TYPE_')
- test2 = lambda line : not line.split(' ')[1] == 'LIBGAMMA_CONNECTOR_TYPE_COUNT'
- defs = [line for line in data.split('\n') if test1(line) and test2(line)]
- print('\n'.join([d.strip().split(' ')[0].rstrip(',') for d in defs]))
- elif sys.argv[2] == '--subpixel':
- test1 = lambda line : line.strip().startswith('LIBGAMMA_SUBPIXEL_ORDER_')
- test2 = lambda line : not line.split(' ')[1] == 'LIBGAMMA_SUBPIXEL_ORDER_COUNT'
- defs = [line for line in data.split('\n') if test1(line) and test2(line)]
- print('\n'.join([d.strip().split(' ')[0].rstrip(',') for d in defs]))
- elif sys.argv[2] == '--info-t':
- data = data[data.find('\ntypedef struct libgamma_crtc_information'):]
- data = data[:data.find('\n}')]
- test1 = lambda line : line.startswith(' ') and line.endswith(';')
- test2 = lambda line : ' * ' not in line
- defs = [line for line in data.split('\n') if test1(line) and test2(line)]
- print('\n'.join([d.strip().split(' ')[-1].rstrip(';') for d in defs]))
- elif sys.argv[2] == '--cap-t':
- data = data[data.find('\ntypedef struct libgamma_method_capabilities'):]
- data = data[:data.find('\n}')]
- test1 = lambda line : line.startswith(' ') and line.endswith(';')
- test2 = lambda line : ' * ' not in line
- defs = [line for line in data.split('\n') if test1(line) and test2(line)]
- print('\n'.join([d.strip().split(' : ')[0].split(' ')[-1].rstrip(';') for d in defs]))
+ if sys.argv[2] == '--method': list_define('LIBGAMMA_METHOD_', 'MAX', 'COUNT')
+ elif sys.argv[2] == '--info': list_define('LIBGAMMA_CRTC_INFO_', 'COUNT')
+ elif sys.argv[2] == '--connector': list_enum('LIBGAMMA_CONNECTOR_TYPE_', 'COUNT')
+ elif sys.argv[2] == '--subpixel': list_enum('LIBGAMMA_SUBPIXEL_ORDER_', 'COUNT')
+ elif sys.argv[2] == '--info-t': list_struct('libgamma_crtc_information')
+ elif sys.argv[2] == '--cap-t': list_struct('libgamma_method_capabilities')
elif sys.argv[1] == '--type':
- if sys.argv[2] == '--info-t':
- data = data[data.find('\ntypedef struct libgamma_crtc_information'):]
- data = data[:data.find('\n}')]
- test1 = lambda line : line.startswith(' ')
- test2 = lambda line : ' * ' not in line
- test3 = lambda line : line.strip().split(' ')[-1] == sys.argv[3] + ';'
- defs = [line for line in data.split('\n') if test1(line) and test2(line) and test3(line)]
- print('\n'.join([' '.join(d.strip().split(' ')[:-1]) for d in defs]))
- elif sys.argv[2] == '--cap-t':
- data = data[data.find('\ntypedef struct libgamma_method_capabilities'):]
- data = data[:data.find('\n}')]
- test1 = lambda line : line.startswith(' ')
- test2 = lambda line : ' * ' not in line
- test3 = lambda line : line.strip().split(' : ')[0].split(' ')[-1].rstrip(';') == sys.argv[3]
- defs = [line for line in data.split('\n') if test1(line) and test2(line) and test3(line)]
- line = defs[0].strip().rstrip(';')
- if ' : ' in line:
- line = line.split(' : ')
- line[0] = ' '.join(line[0].split(' ')[:-1])
- print(':'.join(line))
- else:
- print(' '.join(line.split(' ')[:-1]))
+ if sys.argv[2] == '--info-t': type_struct('libgamma_crtc_information')
+ elif sys.argv[2] == '--cap-t': type_struct('libgamma_method_capabilities')
else:
- if sys.argv[1] in ('--method', '--info'):
- i = data.find('\n#define ' + sys.argv[2])
- data = data[:i]
- i = data.rfind('\n */')
- data = data[:i]
- i = data.rfind('/**\n')
- data = data[i + len('/**\n'):]
- data = [line[3:] for line in data.split('\n')]
- print('\n'.join(data))
- elif sys.argv[1] in ('--connector', '--subpixel'):
- while '\n ' in data:
- data = data.replace('\n ', '\n')
- i = data.find('\n' + sys.argv[2])
- data = data[:i]
- i = data.rfind('\n*/')
- data = data[:i]
- i = data.rfind('/**\n')
- data = data[i + len('/**\n'):]
- data = [line[2:] for line in data.split('\n')]
- print('\n'.join(data))
- elif sys.argv[1] == '--info-t':
- data = data[data.find('\ntypedef struct libgamma_crtc_information'):]
- data = data[:data.find('\n}')]
- test1 = lambda line : line.startswith(' ')
- test2 = lambda line : ' * ' not in line
- test3 = lambda line : line.strip().split(' ')[-1] == sys.argv[2] + ';'
- defs = [line for line in data.split('\n') if test1(line) and test2(line) and test3(line)]
- line = defs[0]
- i = data.find('\n' + line)
- data = data[:i]
- while '\n ' in data:
- data = data.replace('\n ', '\n')
- i = data.rfind('\n*/')
- data = data[:i]
- i = data.rfind('/**\n')
- data = data[i + len('/**\n'):]
- data = [line[2:] for line in data.split('\n')]
- print('\n'.join(data))
- elif sys.argv[1] == '--cap-t':
- data = data[data.find('\ntypedef struct libgamma_method_capabilities'):]
- data = data[:data.find('\n}')]
- test1 = lambda line : line.startswith(' ')
- test2 = lambda line : ' * ' not in line
- test3 = lambda line : line.strip().split(' : ')[0].split(' ')[-1].rstrip(';') == sys.argv[2]
- defs = [line for line in data.split('\n') if test1(line) and test2(line) and test3(line)]
- line = defs[0]
- i = data.find('\n' + line)
- data = data[:i]
- while '\n ' in data:
- data = data.replace('\n ', '\n')
- i = data.rfind('\n*/')
- data = data[:i]
- i = data.rfind('/**\n')
- data = data[i + len('/**\n'):]
- data = [line[2:] for line in data.split('\n')]
- print('\n'.join(data))
+ if sys.argv[1] in ('--method', '--info'): doc_define()
+ elif sys.argv[1] in ('--connector', '--subpixel'): doc_enum()
+ elif sys.argv[1] == '--info-t': doc_struct('libgamma_crtc_information')
+ elif sys.argv[1] == '--cap-t': doc_struct('libgamma_method_capabilities')