X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=bindings%2Fcxx%2Fenums.py;h=380faf91d838dc68195fe623d73722e7b38b10d2;hb=879dd50fb6d5f810d3c5635c3264b2c08ad22a70;hp=bdf12bf64e6cf89f662d395da92b3766cc99878c;hpb=3532ed01256b986ecaf37ea5bb29d81465e2aa89;p=libsigrok.git diff --git a/bindings/cxx/enums.py b/bindings/cxx/enums.py index bdf12bf6..380faf91 100644 --- a/bindings/cxx/enums.py +++ b/bindings/cxx/enums.py @@ -26,16 +26,20 @@ index_file = sys.argv[1] # Get directory this script is in. dirname = os.path.dirname(os.path.realpath(__file__)) +outdirname = "bindings/cxx" +if not os.path.exists(os.path.join(outdirname, 'include/libsigrok')): + os.makedirs(os.path.join(outdirname, 'include/libsigrok')) + mapping = dict([ - ('sr_loglevel', 'LogLevel'), - ('sr_packettype', 'PacketType'), - ('sr_mq', 'Quantity'), - ('sr_unit', 'Unit'), - ('sr_mqflag', 'QuantityFlag'), - ('sr_configkey', 'ConfigKey'), - ('sr_datatype', 'DataType'), - ('sr_channeltype', 'ChannelType'), - ('sr_trigger_matches', 'TriggerMatchType')]) + ('sr_loglevel', ('LogLevel', 'Log verbosity level')), + ('sr_packettype', ('PacketType', 'Type of datafeed packet')), + ('sr_mq', ('Quantity', 'Measured quantity')), + ('sr_unit', ('Unit', 'Unit of measurement')), + ('sr_mqflag', ('QuantityFlag', 'Flag applied to measured quantity')), + ('sr_configkey', ('ConfigKey', 'Configuration key')), + ('sr_datatype', ('DataType', 'Configuration data type')), + ('sr_channeltype', ('ChannelType', 'Channel type')), + ('sr_trigger_matches', ('TriggerMatchType', 'Trigger match type'))]) index = ElementTree.parse(index_file) @@ -60,14 +64,15 @@ for compound in index.findall('compound'): if name in mapping: classes[member] = mapping[name] -header = open(os.path.join(dirname, 'include/libsigrok/enums.hpp'), 'w') -code = open(os.path.join(dirname, 'enums.cpp'), 'w') +header = open(os.path.join(outdirname, 'include/libsigrok/enums.hpp'), 'w') +code = open(os.path.join(outdirname, 'enums.cpp'), 'w') for file in (header, code): print >> file, "/* Generated file - edit enums.py instead! */" # Template for beginning of class declaration and public members. header_public_template = """ +/** {brief} */ class SR_API {classname} : public EnumValue {{ public: @@ -94,18 +99,26 @@ const {classname} *{classname}::get(int id) }} """ -for enum, classname in classes.items(): +def get_text(node): + return str.join('\n\n', + [p.text.rstrip() for p in node.findall('para')]) + +for enum, (classname, classbrief) in classes.items(): enum_name = enum.find('name').text - member_names = [m.find('name').text for m in enum.findall('enumvalue')] + members = enum.findall('enumvalue') + member_names = [m.find('name').text for m in members] trimmed_names = [re.sub("^SR_[A-Z]+_", "", n) for n in member_names] + briefs = [get_text(m.find('briefdescription')) for m in members] # Begin class and public declarations print >> header, header_public_template.format( - classname=classname, enumname=enum_name) + brief=classbrief, classname=classname, enumname=enum_name) # Declare public pointers for each enum value - for trimmed_name in trimmed_names: + for trimmed_name, brief in zip(trimmed_names, briefs): + if brief: + print >> header, '\t/** %s */' % brief print >> header, '\tstatic const %s * const %s;' % ( classname, trimmed_name)