public PolicyConfig LoadDefaults() { ClassConfig.LoadDefaults(); StructConfig.LoadDefaults(); InterfaceConfig.LoadDefaults(); DelegateConfig.LoadDefaults(); MethodConfig.LoadDefaults(); EventConfig.LoadDefaults(); FieldConfig.LoadDefaults(); PropertyConfig.LoadDefaults(); EnumConfig.LoadDefaults(); SkipMerges = true; SkipBranches = true; SkipRollbacks = true; SkipUndeletes = true; return(this); }
public void ToggleRuleActivation(bool activate, bool recursive = true) { SkipMerges = activate; SkipBranches = activate; SkipRollbacks = activate; SkipUndeletes = activate; if (!recursive) { return; } ClassConfig.ToggleRuleActivation(activate); StructConfig.ToggleRuleActivation(activate); InterfaceConfig.ToggleRuleActivation(activate); DelegateConfig.ToggleRuleActivation(activate); MethodConfig.ToggleRuleActivation(activate); EventConfig.ToggleRuleActivation(activate); FieldConfig.ToggleRuleActivation(activate); PropertyConfig.ToggleRuleActivation(activate); EnumConfig.ToggleRuleActivation(activate); }
static void Process() { var skipFunctions = new HashSet <string> { "stbtt__find_table" }; var parameters = new ConversionParameters { InputPath = @"stb_truetype.h", Defines = new[] { "STB_TRUETYPE_IMPLEMENTATION" }, Namespace = "StbSharp", }; parameters.StructSource = n => { var result = new StructConfig { Name = n, Source = new SourceInfo { Class = "StbTrueType", StructType = StructType.StaticClass, Source = SourceFile } }; return(result); }; parameters.GlobalVariableSource = n => new BaseConfig { Name = n, Source = new SourceInfo { Class = "StbTrueType", Source = SourceFile, StructType = StructType.StaticClass } }; parameters.EnumSource = n => new BaseConfig { Name = string.Empty, Source = new SourceInfo { Class = "StbTrueType", Source = SourceFile, StructType = StructType.StaticClass } }; parameters.FunctionSource = n => { var fc = new FunctionConfig { Name = n.Name, Static = true, Source = new SourceInfo { Source = SourceFile, Class = "StbTrueType", StructType = StructType.StaticClass, } }; if (skipFunctions.Contains(n.Name)) { fc.Source.Source = null; } return(fc); }; var cp = new ClangParser(); var outputs = cp.Process(parameters); // Post processing Logger.Info("Post processing..."); foreach (var output in outputs) { var data = output.Value; data = Utility.ReplaceNativeCalls(data); data = data.Replace("(void *)(0)", "null"); data = data.Replace("stbtt_vertex* vertices = 0;", "stbtt_vertex* vertices = null;"); data = data.Replace("(flags & 16)?dx:-dx", "(flags & 16) != 0?dx:-dx"); data = data.Replace("(flags & 32)?dy:-dy", "(flags & 32) != 0?dy:-dy"); data = data.Replace("(vertices) == (0)", "vertices == null"); data = data.Replace("sizeof((vertices[0]))", "sizeof(stbtt_vertex)"); data = data.Replace("(int)(!(flags & 1))", "((flags & 1) != 0?0:1)"); data = data.Replace("vertices = 0;", "vertices = null;"); data = data.Replace("stbtt_vertex* comp_verts = 0;", "stbtt_vertex* comp_verts = null;"); data = data.Replace("stbtt_vertex* tmp = 0;", "stbtt_vertex* tmp = null;"); data = data.Replace(",)", ")"); data = data.Replace("+ +", "+"); data = data.Replace("(sizeof(stbtt__hheap_chunk) + size * count)", "((ulong)sizeof(stbtt__hheap_chunk)+ size * (ulong)(count))"); data = data.Replace("size * hh->num_remaining_in_head_chunk", "size * (ulong)hh->num_remaining_in_head_chunk"); data = data.Replace("sizeof((*z))", "sizeof(stbtt__active_edge)"); data = data.Replace("_next_ = 0;", "_next_ = null;"); data = data.Replace("sizeof((scanline[0]))", "sizeof(float)"); data = data.Replace("int c = (int)(((a)->y0) < ((b)->y0));", "int c = (int)(a->y0 < b->y0?1:0);"); data = data.Replace("sizeof((*e))", "sizeof(stbtt__edge)"); data = data.Replace("sizeof((**contour_lengths))", "sizeof(int)"); data = data.Replace("sizeof((points[0]))", "sizeof(stbtt__point)"); data = data.Replace("sizeof((*context))", "sizeof(stbrp_context)"); data = data.Replace("sizeof((*nodes))", "sizeof(stbrp_node)"); data = data.Replace("sizeof((*rects))", "sizeof(stbrp_rect)"); data = data.Replace("(int)(((a[0]) == (b[0])) && ((a[1]) == (b[1])));", "(int)(((a[0] == b[0]) && (a[1] == b[1]))?1:0);"); File.WriteAllText(output.Key, data); } }
static void Convert() { var cp = new ClangParser(); var skipStructs = new HashSet <string> { "nk_handle", "nk_user_font", "nk_font", "nk_allocator", "nk_clipboard", "nk_style_item_data", "nk_style_item", "nk_font_atlas", "nk_page_data", "nk_page_element", "nk_buffer", "nk_text_undo_state", "nk_property", "nk_property_variant", "nk_keyboard", "nk_mouse", "nk_draw_list", "nk_style", "nk_chart", "nk_command_custom", "nk_rp_context", "nk_context", "nk_page", "nk_pool", "nk_window", "nk_panel", "nk_config_stack_button_behavior_element", "nk_convert_config", "nk_user_font_glyph", "nk_popup_buffer", }; var treatAsClasses = new HashSet <string> { "nk_str", "nk_clipboard", "nk_context", "nk_font_atlas", "nk_buffer", "nk_text_undo_state", "nk_page_element", "nk_keyboard", "nk_mouse", "nk_input", "nk_draw_list", "nk_command_buffer", "nk_style", "nk_chart", "nk_panel", "nk_window", "nk_popup_state", "nk_page", "nk_text_edit", "nk_pool", "nk_table", "nk_list_view", "nk_convert_config", "nk_style_item", "nk_config_stack_style_item_element", "nk_style_text", "nk_popup_buffer", "nk_image", "nk_cursor", "nk_user_font", "nk_font", "nk_config_stack_user_font_element", "nk_font_config", "nk_baked_font", "nk_chart_slot", "nk_row_layout", "nk_edit_state", "nk_property_state", "nk_configuration_stacks", "nk_scroll", "nk_memory_status", "nk_menu_state", }; var skipGlobalVariables = new HashSet <string> { "nk_null_rect", "nk_red", "nk_green", "nk_blue", "nk_white", "nk_black", "nk_yellow", "nk_default_color_style", "nk_color_names", "nk_cursor_data", "hue_colors", }; var skipFunctions = new HashSet <string> { "nk_inv_sqrt", "nk_strmatch_fuzzy_text", "nk_strmatch_fuzzy_string", "nk_str_append_text_runes", "nk_str_append_str_runes", "nk_stricmp", "nk_strfilter", "nk_utf_validate", "nk_utf_decode_byte", "nk_utf_decode", "nk_utf_encode_byte", "nk_utf_encode", "nk_utf_len", "nk_utf_at", "nk_style_get_color_by_name", "nk_pool_init_fixed", "nk_init_custom", "nk_pool_init", "nk_pool_free", "nk_pool_alloc", "nk_create_page_element", "nk_link_page_element_into_freelist", "nk_free_page_element", "nk_create_panel", "nk_free_panel", "nk_create_table", "nk_free_table", "nk_init_fixed", "nk_init", "nk_free", "nk_create_window", "nk_free_window", "nk_buffer_init_default", "nk_str_init_default", "nk_str_init", "nk_font_atlas_init_default", "nk_font_atlas_init", "nk_font_atlas_init_custom", "nk_init_default", "nk_command_buffer_push", "nk__begin", "nk_command_buffer_init", "nk_command_buffer_reset", "nk__next", "nk_build", "nk_property_", "nk_font_atlas_add_default", "nk_stroke_polygon", "nk_fill_polygon", "nk_stroke_polyline", "nk_font_default_glyph_ranges", "nk_font_chinese_glyph_ranges", "nk_font_cyrillic_glyph_ranges", "nk_font_korean_glyph_ranges", }; var globalArrays = new HashSet <string> { "nk_utfbyte", "nk_utfmask", "nk_utfmin", "nk_utfmax", "nk_proggy_clean_ttf_compressed_data_base85", "nk_custom_cursor_data", "nk_cursor_data", }; var parameters = new ConversionParameters { InputPath = @"nuklear.h", Defines = new[] { "NK_IMPLEMENTATION", "NK_INCLUDE_DEFAULT_ALLOCATOR", "NK_INCLUDE_VERTEX_BUFFER_OUTPUT", "NK_INCLUDE_FONT_BAKING", "NK_INCLUDE_DEFAULT_FONT" }, Namespace = "NuklearSharp", }; parameters.StructSource = n => { var result = new StructConfig { Name = n, Source = new SourceInfo { Class = "Nuklear", StructType = StructType.StaticClass } }; if (!skipStructs.Contains(n) && !n.StartsWith("nk_command_")) { var sourceName = GetSourceName(n); result.Source.Source = @"..\..\..\..\..\NuklearSharp\Nuklear." + sourceName + ".Generated.cs"; } if (treatAsClasses.Contains(n) || n.StartsWith("nk_command_") || n.StartsWith("nk_style_") || n.StartsWith("nk_config_")) { result.StructType = StructType.Class; } else { result.StructType = StructType.Struct; } return(result); }; parameters.GlobalVariableSource = n => new BaseConfig { Name = n, Source = new SourceInfo { Class = "Nuklear", Source = @"..\..\..\..\..\NuklearSharp\Nuklear.GlobalVariables.Generated.cs", StructType = StructType.StaticClass } }; parameters.EnumSource = n => new BaseConfig { Name = string.Empty, Source = new SourceInfo { Class = "Nuklear", Source = @"..\..\..\..\..\NuklearSharp\Nuklear.Enums.Generated.cs", StructType = StructType.StaticClass } }; parameters.FunctionSource = n => { var fc = new FunctionConfig { Name = n.Name, Static = true, Source = new SourceInfo { Source = @"..\..\..\..\..\NuklearSharp\Nuklear.Utility.Generated.cs", Class = "Nuklear", StructType = StructType.StaticClass, } }; var parts = n.Signature.Split(','); var s = string.Empty; if (parts.Length > 0) { for (var i = 0; i < parts.Length; ++i) { var parts2 = parts[i].Trim().Split(' '); var typeName = parts2[0]; if (typeName.EndsWith("*")) { typeName = typeName.Substring(0, typeName.Length - 1); } var recordType = cp.Processor.GetRecordType(typeName); if (recordType != RecordType.None) { s = typeName; } break; } } if (!string.IsNullOrEmpty(s)) { var sourceName = GetSourceName(s); fc.Source.Source = @"..\..\..\..\..\NuklearSharp\Nuklear." + sourceName + ".Generated.cs"; } if (skipFunctions.Contains(n.Name)) { fc.Source.Source = null; } return(fc); }; parameters.TreatGlobalPointerAsArray = n => globalArrays.Contains(n); parameters.UseRefInsteadOfPointer = (f, t, n) => n == "custom" || f == "nk_unify" || n == "state" || n == "ws" || n == "size" || n == "glyph_count" || n == "width" || n == "height" || n == "value" || n == "val" || n == "cursor" || n == "len" || n == "select_begin" || n == "select_end"; parameters.CustomGlobalVariableProcessor += cpr => { if (cpr.Info.Spelling == "nk_proggy_clean_ttf_compressed_data_base85" || cpr.Info.Spelling == "nk_custom_cursor_data") { var sb = new StringBuilder(); sb.Append("{"); var start = cpr.Expression.IndexOf('\"') + 1; for (var i = start; i < cpr.Expression.Length; ++i) { var c = cpr.Expression[i]; if (c == '\"') { break; } if (i > start) { sb.Append(", "); } sb.AppendFormat("0x{0:X}", (int)c); } sb.Append("}"); cpr.Expression = "byte[] " + cpr.Info.Spelling + " = " + sb.ToString(); } }; parameters.FunctionHeaderProcessed = (fn, args) => { if (fn.Contains("nk_stricmpn") || fn.Contains("nk_tree_state_base") || fn.Contains("nk_tree_state_push") || fn.Contains("nk_tree_state_image_push") || fn.Contains("nk_group_scrolled_offset_begin") || fn.Contains("nk_parse_hex") || fn.Contains("nk_itoa") | fn.Contains("nk_string_float_limit") || fn.Contains("nk_text_clamp") || fn.Contains("nk_text_calculate_text_bounds") || fn.Contains("nk_str_") || fn.Contains("nk_draw_") || fn.Contains("nk_font_")) { return; } if (args.Length == 0 || !args[0].StartsWith("nk_context")) { return; } var sb = new StringFunctionBinding { Header = fn, Args = args, }; _bindings[fn] = sb; }; var outputs = cp.Process(parameters); // Post processing Logger.Info("Post processing..."); foreach (var output in outputs) { if (output.Key.Contains("GlobalVariables") || output.Key.Contains("Enums") /* || * output.Key.Contains("Commands\\") || * output.Key.Contains("Config\\") || * output.Key.Contains("Core\\") || * output.Key.Contains("Drawing\\") || * output.Key.Contains("Fonts\\") || * output.Key.Contains("InputSystem\\") || * output.Key.Contains("MemoryManagement\\") || * output.Key.Contains("RectPacts\\") || * output.Key.Contains("Styling\\") || * output.Key.Contains("TextEditing\\")*/) { continue; } var data = output.Value; // Post processing Logger.Info("Post processing '{0}'...", output.Key); data = PostProcess(data); File.WriteAllText(output.Key, data); } }