Skip to content

Commit

Permalink
Improve type definitions for enums
Browse files Browse the repository at this point in the history
  • Loading branch information
kleisauke committed Apr 30, 2024
1 parent d6cdcbb commit 26f51e8
Show file tree
Hide file tree
Showing 3 changed files with 265 additions and 261 deletions.
20 changes: 11 additions & 9 deletions build/gen_cpp_binding.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import re

from pyvips import Image, Introspect, GValue, Error, \
ffi, values_for_enum, values_for_flag, \
ffi, enum_dict, flags_dict, \
gobject_lib, type_map, type_name, \
type_from_name, nickname_find

Expand Down Expand Up @@ -244,20 +244,21 @@ def add_flag(gtype, a, b):

f.write(f' enum_<{name}>("{remove_prefix(name)}")')

for value in values_for_enum(gtype):
js_value = cppize(value)
values = enum_dict(gtype)
for key, _ in values.items():
js_key = cppize(key)
prefix = to_snake_case(name).upper()
if prefix == 'VIPS_BAND_FORMAT':
prefix = 'VIPS_FORMAT'
elif prefix == 'VIPS_IMAGE_TYPE':
prefix = 'VIPS_IMAGE'
cpp_value = prefix + '_' + js_value.upper()
cpp_value = prefix + '_' + js_key.upper()
if cpp_value == 'VIPS_INTERPRETATION_SRGB':
cpp_value = 'VIPS_INTERPRETATION_sRGB'
elif cpp_value == 'VIPS_INTERPRETATION_SCRGB':
cpp_value = 'VIPS_INTERPRETATION_scRGB'

f.write(f'\n .value("{js_value}", {cpp_value})')
f.write(f'\n .value("{js_key}", {cpp_value})')

f.write(';\n\n')

Expand All @@ -266,12 +267,13 @@ def add_flag(gtype, a, b):

f.write(f' enum_<{name}>("{remove_prefix(name)}")')

for value in values_for_flag(gtype):
js_value = cppize(value)
values = flags_dict(gtype)
for key, _ in values.items():
js_key = cppize(key)
prefix = to_snake_case(name).upper()
cpp_value = prefix + '_' + js_value.upper()
cpp_value = prefix + '_' + js_key.upper()

f.write(f'\n .value("{js_value}", {cpp_value})')
f.write(f'\n .value("{js_key}", {cpp_value})')

f.write(';\n\n')

Expand Down
22 changes: 12 additions & 10 deletions build/gen_type_declarations.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import xml.etree.ElementTree as ET

from pyvips import Introspect, GValue, Error, \
ffi, values_for_enum, values_for_flag, \
ffi, enum_dict, flags_dict, \
gobject_lib, type_map, type_name, \
type_from_name, nickname_find

Expand Down Expand Up @@ -271,10 +271,10 @@ def add_flag(gtype, a, b):
name = remove_prefix(name)
if name in xml_enums:
node = xml_enums[name]
values = values_for_enum(gtype)
values = enum_dict(gtype)
elif name in xml_flags:
node = xml_flags[name]
values = values_for_flag(gtype)
values = flags_dict(gtype)
else:
continue

Expand All @@ -289,25 +289,27 @@ def add_flag(gtype, a, b):

f.write(f'{indent}enum {name} {{\n')

for i, value in enumerate(values):
js_value = value.replace('-', '_')
if i == 0 and (js_value == 'error' or js_value == 'notset'):
for i, (key, value) in enumerate(values.items()):
js_key = key.replace('-', '_')
if i == 0 and (js_key == 'error' or js_key == 'notset'):
continue

member = node.find(f"goi:member[@name='{js_value}']", namespace)
member = node.find(f"goi:member[@name='{js_key}']", namespace)
member_doc = member.find('goi:doc', namespace)
if member_doc is not None:
text = member_doc.text[:1].upper() + member_doc.text[1:]
f.write(f'{indent} /**\n')
f.write(f'{indent} * {text}\n')
f.write(f'{indent} */\n')

f.write(f"{indent} {js_value} = '{value}'")
f.write(f'{indent} {js_key} = {value}')

if i != len(values) - 1:
f.write(',\n')
f.write(',')

f.write(f'\n{indent}}}\n\n')
f.write(f" // '{key}'\n")

f.write(f'{indent}}}\n\n')

f.write(f'{indent}//#endregion\n\n')

Expand Down
Loading

0 comments on commit 26f51e8

Please sign in to comment.