Last active
December 12, 2016 14:05
-
-
Save vaiorabbit/9d2b9fcb684e3e73ee7a5d8e9c1f25d7 to your computer and use it in GitHub Desktop.
[Experimental] Collecting enum values from nuklear.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{'anonymous_enum_0': [('nk_false', 0), ('nk_true', 1)], | |
'nk_allocation_type': [('NK_BUFFER_FIXED', 0), ('NK_BUFFER_DYNAMIC', 1)], | |
'nk_anti_aliasing': [('NK_ANTI_ALIASING_OFF', 0), ('NK_ANTI_ALIASING_ON', 1)], | |
'nk_buffer_allocation_type': [('NK_BUFFER_FRONT', 0), | |
('NK_BUFFER_BACK', 1), | |
('NK_BUFFER_MAX', 2)], | |
'nk_button_behavior': [('NK_BUTTON_DEFAULT', 0), ('NK_BUTTON_REPEATER', 1)], | |
'nk_buttons': [('NK_BUTTON_LEFT', 0), | |
('NK_BUTTON_MIDDLE', 1), | |
('NK_BUTTON_RIGHT', 2), | |
('NK_BUTTON_MAX', 3)], | |
'nk_chart_event': [('NK_CHART_HOVERING', 1), ('NK_CHART_CLICKED', 2)], | |
'nk_chart_type': [('NK_CHART_LINES', 0), | |
('NK_CHART_COLUMN', 1), | |
('NK_CHART_MAX', 2)], | |
'nk_collapse_states': [('NK_MINIMIZED', 0), ('NK_MAXIMIZED', 1)], | |
'nk_color_format': [('NK_RGB', 0), ('NK_RGBA', 1)], | |
'nk_command_clipping': [('NK_CLIPPING_OFF', 0), ('NK_CLIPPING_ON', 1)], | |
'nk_command_type': [('NK_COMMAND_NOP', 0), | |
('NK_COMMAND_SCISSOR', 1), | |
('NK_COMMAND_LINE', 2), | |
('NK_COMMAND_CURVE', 3), | |
('NK_COMMAND_RECT', 4), | |
('NK_COMMAND_RECT_FILLED', 5), | |
('NK_COMMAND_RECT_MULTI_COLOR', 6), | |
('NK_COMMAND_CIRCLE', 7), | |
('NK_COMMAND_CIRCLE_FILLED', 8), | |
('NK_COMMAND_ARC', 9), | |
('NK_COMMAND_ARC_FILLED', 10), | |
('NK_COMMAND_TRIANGLE', 11), | |
('NK_COMMAND_TRIANGLE_FILLED', 12), | |
('NK_COMMAND_POLYGON', 13), | |
('NK_COMMAND_POLYGON_FILLED', 14), | |
('NK_COMMAND_POLYLINE', 15), | |
('NK_COMMAND_TEXT', 16), | |
('NK_COMMAND_IMAGE', 17)], | |
'nk_draw_list_stroke': [('NK_STROKE_OPEN', 0), ('NK_STROKE_CLOSED', 1)], | |
'nk_draw_vertex_layout_attribute': [('NK_VERTEX_POSITION', 0), | |
('NK_VERTEX_COLOR', 1), | |
('NK_VERTEX_TEXCOORD', 2), | |
('NK_VERTEX_ATTRIBUTE_COUNT', 3)], | |
'nk_draw_vertex_layout_format': [('NK_FORMAT_SCHAR', 0), | |
('NK_FORMAT_SSHORT', 1), | |
('NK_FORMAT_SINT', 2), | |
('NK_FORMAT_UCHAR', 3), | |
('NK_FORMAT_USHORT', 4), | |
('NK_FORMAT_UINT', 5), | |
('NK_FORMAT_FLOAT', 6), | |
('NK_FORMAT_DOUBLE', 7), | |
('NK_FORMAT_COLOR_BEGIN', 8), | |
('NK_FORMAT_R8G8B8', 8), | |
('NK_FORMAT_R16G15B16', 9), | |
('NK_FORMAT_R32G32B32', 10), | |
('NK_FORMAT_R8G8B8A8', 11), | |
('NK_FORMAT_R16G15B16A16', 12), | |
('NK_FORMAT_R32G32B32A32', 13), | |
('NK_FORMAT_R32G32B32A32_FLOAT', 14), | |
('NK_FORMAT_R32G32B32A32_DOUBLE', 15), | |
('NK_FORMAT_RGB32', 16), | |
('NK_FORMAT_RGBA32', 17), | |
('NK_FORMAT_COLOR_END', 17), | |
('NK_FORMAT_COUNT', 18)], | |
'nk_edit_events': [('NK_EDIT_ACTIVE', 1), | |
('NK_EDIT_INACTIVE', 2), | |
('NK_EDIT_ACTIVATED', 4), | |
('NK_EDIT_DEACTIVATED', 8), | |
('NK_EDIT_COMMITED', 16)], | |
'nk_edit_flags': [('NK_EDIT_DEFAULT', 0), | |
('NK_EDIT_READ_ONLY', 1), | |
('NK_EDIT_AUTO_SELECT', 2), | |
('NK_EDIT_SIG_ENTER', 4), | |
('NK_EDIT_ALLOW_TAB', 8), | |
('NK_EDIT_NO_CURSOR', 16), | |
('NK_EDIT_SELECTABLE', 32), | |
('NK_EDIT_CLIPBOARD', 64), | |
('NK_EDIT_CTRL_ENTER_NEWLINE', 128), | |
('NK_EDIT_NO_HORIZONTAL_SCROLL', 256), | |
('NK_EDIT_ALWAYS_INSERT_MODE', 512), | |
('NK_EDIT_MULTILINE', 2048), | |
('NK_EDIT_GOTO_END_ON_ACTIVATE', 4096)], | |
'nk_edit_types': [('NK_EDIT_SIMPLE', 512), | |
('NK_EDIT_FIELD', 608), | |
('NK_EDIT_BOX', 2664), | |
('NK_EDIT_EDITOR', 2152)], | |
'nk_font_atlas_format': [('NK_FONT_ATLAS_ALPHA8', 0), | |
('NK_FONT_ATLAS_RGBA32', 1)], | |
'nk_font_coord_type': [('NK_COORD_UV', 0), ('NK_COORD_PIXEL', 1)], | |
'nk_heading': [('NK_UP', 0), ('NK_RIGHT', 1), ('NK_DOWN', 2), ('NK_LEFT', 3)], | |
'nk_keys': [('NK_KEY_NONE', 0), | |
('NK_KEY_SHIFT', 1), | |
('NK_KEY_CTRL', 2), | |
('NK_KEY_DEL', 3), | |
('NK_KEY_ENTER', 4), | |
('NK_KEY_TAB', 5), | |
('NK_KEY_BACKSPACE', 6), | |
('NK_KEY_COPY', 7), | |
('NK_KEY_CUT', 8), | |
('NK_KEY_PASTE', 9), | |
('NK_KEY_UP', 10), | |
('NK_KEY_DOWN', 11), | |
('NK_KEY_LEFT', 12), | |
('NK_KEY_RIGHT', 13), | |
('NK_KEY_TEXT_INSERT_MODE', 14), | |
('NK_KEY_TEXT_REPLACE_MODE', 15), | |
('NK_KEY_TEXT_RESET_MODE', 16), | |
('NK_KEY_TEXT_LINE_START', 17), | |
('NK_KEY_TEXT_LINE_END', 18), | |
('NK_KEY_TEXT_START', 19), | |
('NK_KEY_TEXT_END', 20), | |
('NK_KEY_TEXT_UNDO', 21), | |
('NK_KEY_TEXT_REDO', 22), | |
('NK_KEY_TEXT_WORD_LEFT', 23), | |
('NK_KEY_TEXT_WORD_RIGHT', 24), | |
('NK_KEY_SCROLL_START', 25), | |
('NK_KEY_SCROLL_END', 26), | |
('NK_KEY_SCROLL_DOWN', 27), | |
('NK_KEY_SCROLL_UP', 28), | |
('NK_KEY_MAX', 29)], | |
'nk_layout_format': [('NK_DYNAMIC', 0), ('NK_STATIC', 1)], | |
'nk_modify': [('NK_FIXED', 0), ('NK_MODIFIABLE', 1)], | |
'nk_orientation': [('NK_VERTICAL', 0), ('NK_HORIZONTAL', 1)], | |
'nk_panel_flags': [('NK_WINDOW_BORDER', 1), | |
('NK_WINDOW_MOVABLE', 2), | |
('NK_WINDOW_SCALABLE', 4), | |
('NK_WINDOW_CLOSABLE', 8), | |
('NK_WINDOW_MINIMIZABLE', 16), | |
('NK_WINDOW_NO_SCROLLBAR', 32), | |
('NK_WINDOW_TITLE', 64), | |
('NK_WINDOW_SCROLL_AUTO_HIDE', 128), | |
('NK_WINDOW_BACKGROUND', 256)], | |
'nk_panel_set': [('NK_PANEL_SET_NONBLOCK', 240), | |
('NK_PANEL_SET_POPUP', 244), | |
('NK_PANEL_SET_SUB', 246)], | |
'nk_panel_type': [('NK_PANEL_WINDOW', 1), | |
('NK_PANEL_GROUP', 2), | |
('NK_PANEL_POPUP', 4), | |
('NK_PANEL_CONTEXTUAL', 16), | |
('NK_PANEL_COMBO', 32), | |
('NK_PANEL_MENU', 64), | |
('NK_PANEL_TOOLTIP', 128)], | |
'nk_popup_type': [('NK_POPUP_STATIC', 0), ('NK_POPUP_DYNAMIC', 1)], | |
'nk_show_states': [('NK_HIDDEN', 0), ('NK_SHOWN', 1)], | |
'nk_style_colors': [('NK_COLOR_TEXT', 0), | |
('NK_COLOR_WINDOW', 1), | |
('NK_COLOR_HEADER', 2), | |
('NK_COLOR_BORDER', 3), | |
('NK_COLOR_BUTTON', 4), | |
('NK_COLOR_BUTTON_HOVER', 5), | |
('NK_COLOR_BUTTON_ACTIVE', 6), | |
('NK_COLOR_TOGGLE', 7), | |
('NK_COLOR_TOGGLE_HOVER', 8), | |
('NK_COLOR_TOGGLE_CURSOR', 9), | |
('NK_COLOR_SELECT', 10), | |
('NK_COLOR_SELECT_ACTIVE', 11), | |
('NK_COLOR_SLIDER', 12), | |
('NK_COLOR_SLIDER_CURSOR', 13), | |
('NK_COLOR_SLIDER_CURSOR_HOVER', 14), | |
('NK_COLOR_SLIDER_CURSOR_ACTIVE', 15), | |
('NK_COLOR_PROPERTY', 16), | |
('NK_COLOR_EDIT', 17), | |
('NK_COLOR_EDIT_CURSOR', 18), | |
('NK_COLOR_COMBO', 19), | |
('NK_COLOR_CHART', 20), | |
('NK_COLOR_CHART_COLOR', 21), | |
('NK_COLOR_CHART_COLOR_HIGHLIGHT', 22), | |
('NK_COLOR_SCROLLBAR', 23), | |
('NK_COLOR_SCROLLBAR_CURSOR', 24), | |
('NK_COLOR_SCROLLBAR_CURSOR_HOVER', 25), | |
('NK_COLOR_SCROLLBAR_CURSOR_ACTIVE', 26), | |
('NK_COLOR_TAB_HEADER', 27), | |
('NK_COLOR_COUNT', 28)], | |
'nk_style_cursor': [('NK_CURSOR_ARROW', 0), | |
('NK_CURSOR_TEXT', 1), | |
('NK_CURSOR_MOVE', 2), | |
('NK_CURSOR_RESIZE_VERTICAL', 3), | |
('NK_CURSOR_RESIZE_HORIZONTAL', 4), | |
('NK_CURSOR_RESIZE_TOP_LEFT_DOWN_RIGHT', 5), | |
('NK_CURSOR_RESIZE_TOP_RIGHT_DOWN_LEFT', 6), | |
('NK_CURSOR_COUNT', 7)], | |
'nk_style_header_align': [('NK_HEADER_LEFT', 0), ('NK_HEADER_RIGHT', 1)], | |
'nk_style_item_type': [('NK_STYLE_ITEM_COLOR', 0), | |
('NK_STYLE_ITEM_IMAGE', 1)], | |
'nk_symbol_type': [('NK_SYMBOL_NONE', 0), | |
('NK_SYMBOL_X', 1), | |
('NK_SYMBOL_UNDERSCORE', 2), | |
('NK_SYMBOL_CIRCLE_SOLID', 3), | |
('NK_SYMBOL_CIRCLE_OUTLINE', 4), | |
('NK_SYMBOL_RECT_SOLID', 5), | |
('NK_SYMBOL_RECT_OUTLINE', 6), | |
('NK_SYMBOL_TRIANGLE_UP', 7), | |
('NK_SYMBOL_TRIANGLE_DOWN', 8), | |
('NK_SYMBOL_TRIANGLE_LEFT', 9), | |
('NK_SYMBOL_TRIANGLE_RIGHT', 10), | |
('NK_SYMBOL_PLUS', 11), | |
('NK_SYMBOL_MINUS', 12), | |
('NK_SYMBOL_MAX', 13)], | |
'nk_text_align': [('NK_TEXT_ALIGN_LEFT', 1), | |
('NK_TEXT_ALIGN_CENTERED', 2), | |
('NK_TEXT_ALIGN_RIGHT', 4), | |
('NK_TEXT_ALIGN_TOP', 8), | |
('NK_TEXT_ALIGN_MIDDLE', 16), | |
('NK_TEXT_ALIGN_BOTTOM', 32)], | |
'nk_text_alignment': [('NK_TEXT_LEFT', 17), | |
('NK_TEXT_CENTERED', 18), | |
('NK_TEXT_RIGHT', 20)], | |
'nk_text_edit_mode': [('NK_TEXT_EDIT_MODE_VIEW', 0), | |
('NK_TEXT_EDIT_MODE_INSERT', 1), | |
('NK_TEXT_EDIT_MODE_REPLACE', 2)], | |
'nk_text_edit_type': [('NK_TEXT_EDIT_SINGLE_LINE', 0), | |
('NK_TEXT_EDIT_MULTI_LINE', 1)], | |
'nk_tree_type': [('NK_TREE_NODE', 0), ('NK_TREE_TAB', 1)], | |
'nk_widget_layout_states': [('NK_WIDGET_INVALID', 0), | |
('NK_WIDGET_VALID', 1), | |
('NK_WIDGET_ROM', 2)], | |
'nk_widget_states': [('NK_WIDGET_STATE_MODIFIED', 2), | |
('NK_WIDGET_STATE_INACTIVE', 4), | |
('NK_WIDGET_STATE_ENTERED', 8), | |
('NK_WIDGET_STATE_HOVER', 16), | |
('NK_WIDGET_STATE_ACTIVED', 32), | |
('NK_WIDGET_STATE_LEFT', 64), | |
('NK_WIDGET_STATE_HOVERED', 18), | |
('NK_WIDGET_STATE_ACTIVE', 34)], | |
'nk_window_flags': [('NK_WINDOW_PRIVATE', 1024), | |
('NK_WINDOW_DYNAMIC', 1024), | |
('NK_WINDOW_ROM', 2048), | |
('NK_WINDOW_HIDDEN', 4096), | |
('NK_WINDOW_CLOSED', 8192), | |
('NK_WINDOW_MINIMIZED', 16384), | |
('NK_WINDOW_REMOVE_ROM', 32768)]} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Usage: | |
# $ PYTHONPATH=/usr/local/Cellar/llvm/3.9.0/lib/python2.7/site-packages python2 nuklear_parser.py path/to/nuklear.h > nuklear.ast | |
import os, pprint, sys | |
from clang.cindex import Config, CursorKind, Index, TranslationUnit, TranslationUnitLoadError | |
Config.set_library_path("/usr/local/Cellar/llvm/3.9.0/lib") | |
class ParseContext(object): | |
""" | |
Holds current parsing context. | |
""" | |
# Collection Mode | |
Decl_Unknown = 0 | |
Decl_Macro = 1 | |
Decl_Typedef = 2 | |
Decl_Enum = 3 | |
Decl_Struct = 4 | |
Decl_Function = 5 | |
def __init__(self): | |
self.collection_mode = ParseContext.Decl_Unknown | |
self.depth = 0 | |
self.decl_enums = {} | |
def push(self): | |
self.depth += 1 | |
def pop(self): | |
self.depth -= 1 | |
def add_decl_enum(self, name=None, values=[]): | |
if name == None or name == "": | |
name = "anonymous_enum_" + str(len(self.decl_enums)) | |
self.decl_enums[name] = values | |
def collect_decl_macro(ctx, cursor): | |
ctx.collection_mode = ParseContext.Decl_Macro | |
pass # TODO | |
ctx.collection_mode = ParseContext.Decl_Unknown | |
def collect_decl_typedef(ctx, cursor): | |
ctx.collection_mode = ParseContext.Decl_Typedef | |
pass # TODO | |
ctx.collection_mode = ParseContext.Decl_Unknown | |
def collect_decl_enum(ctx, cursor): | |
ctx.collection_mode = ParseContext.Decl_Enum | |
val = [] | |
ctx.push() | |
for child in cursor.get_children(): | |
if child.kind == CursorKind.ENUM_CONSTANT_DECL: | |
pair = (child.displayname, child.enum_value) | |
val.append(pair) | |
ctx.pop() | |
ctx.add_decl_enum(name=cursor.displayname, values=val) | |
ctx.collection_mode = ParseContext.Decl_Unknown | |
def collect_decl_struct(ctx, cursor): | |
ctx.collection_mode = ParseContext.Decl_Struct | |
pass # TODO | |
ctx.collection_mode = ParseContext.Decl_Unknown | |
def collect_decl_function(ctx, cursor): | |
ctx.collection_mode = ParseContext.Decl_Function | |
pass # TODO | |
ctx.collection_mode = ParseContext.Decl_Unknown | |
def collect_decl(ctx, cursor): | |
ctx.push() | |
for child in cursor.get_children(): | |
if child.kind == CursorKind.MACRO_DEFINITION: | |
collect_decl_macro(ctx, child) | |
elif child.kind == CursorKind.TYPEDEF_DECL: | |
collect_decl_typedef(ctx, child) | |
elif child.kind == CursorKind.ENUM_DECL: | |
collect_decl_enum(ctx, child) | |
elif child.kind in {CursorKind.STRUCT_DECL, CursorKind.UNION_DECL}: | |
collect_decl_struct(ctx, child) | |
elif child.kind == CursorKind.FUNCTION_DECL: | |
collect_decl_function(ctx, child) | |
else: | |
pass | |
ctx.pop() | |
if __name__ == "__main__": | |
ctx = ParseContext() | |
arg = ["-fsyntax-only", "-DNK_INCLUDE_DEFAULT_ALLOCATOR", "-DNK_INCLUDE_VERTEX_BUFFER_OUTPUT", "-DNK_INCLUDE_FONT_BAKING"] | |
opt = TranslationUnit.PARSE_INCOMPLETE | TranslationUnit.PARSE_SKIP_FUNCTION_BODIES | TranslationUnit.PARSE_DETAILED_PROCESSING_RECORD | |
idx = Index.create() | |
try: | |
tu = idx.parse(sys.argv[1], args=arg, unsaved_files=None, options=opt) | |
ctx.depth = 0 | |
collect_decl(ctx, tu.cursor) | |
except TranslationUnitLoadError as err: | |
print(err) | |
assert ctx.depth == 0 | |
pp = pprint.PrettyPrinter(depth=6) | |
pp.pprint(ctx.decl_enums) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment