Current section

Files

Jump to
cimg nif_tbl.py
Raw

nif_tbl.py

#!/usr/local/bin/python
# -*- coding: utf-8 -*-
################################################################################
# nif_tbl.py
# Description:
#
# Author: shozo fukuda
# Date: Mon Dec 6 07:36:25 2021
# Last revised: $Date$
# Application: Python 3.9
################################################################################
#<IMPORT>
import os,sys
import argparse
import re
#<CLASS>########################################################################
# Description:
# Dependencies:
################################################################################
class NifTbl:
def __init__(self, prefix="", namespace=""):
self.prefix = prefix
self.ns = namespace
self.func = []
self.col = 40
def parse(self, file):
name = None
for line in file:
match = re.search(r'\bDECL_NIF\s*\((.*)\)', line)
if match:
name = match.group(1)
continue
match = re.search(r'ality\s*!=\s*(\d+)', line)
if match and name != None:
ality = int(match.group(1))
self.func.append((name, ality))
name = None
continue
def mk_niftbl(self, output):
for name, ality in self.func:
erl_name = self.prefix + name
cxx_name = self.ns + name
print('{{"{erl_name}",{pad:{loc1}}{ality:2d}, {cxx_name},{pad:{loc2}}0}},'
.format(
erl_name=erl_name,
loc1=self.col-len(erl_name)-3,
ality=ality,
cxx_name=cxx_name,
loc2=self.col-len(cxx_name)-1,
pad=''),
file=output)
#<MAIN>#########################################################################
# Function:
# Description:
# Dependencies:
################################################################################
if __name__ == '__main__':
parser = argparse.ArgumentParser(description="Generate NIFs table")
parser.add_argument('src', type=argparse.FileType('r'),
help="src files")
parser.add_argument('--prefix', default="",
help="prefex for export name")
parser.add_argument('--ns', default="",
help="namespace for entry function")
parser.add_argument('-o', '--output', type=argparse.FileType('w'), default=sys.stdout,
help="output file")
args = parser.parse_args()
nif_tbl = NifTbl(args.prefix, args.ns)
nif_tbl.parse(args.src)
nif_tbl.mk_niftbl(args.output)
# nif_tbl.py