summaryrefslogtreecommitdiff
path: root/gobject/glib-mkenums.in
diff options
context:
space:
mode:
authorMatthias Klumpp <matthias@tenstral.net>2021-01-10 19:41:07 +0100
committerMatthias Klumpp <matthias@tenstral.net>2021-01-10 20:51:54 +0100
commit1261461840c4577cb2a269d0d671219ae86a7aa9 (patch)
treea3fd4f88f40d31faa3e49f11fc7f9ec309756141 /gobject/glib-mkenums.in
parentca28a3fc29c204c1ac05430a843e5ba0b73b2bc6 (diff)
downloadglib-1261461840c4577cb2a269d0d671219ae86a7aa9.tar.gz
mkenums: Support public/private trigraphs againwip/mak/mkenums-priv-trigraph
This change was previously implemented in 9ba17d511e325eec1e0c1c27cb4d37de4f12ac1e but got dropped during the Python conversion of the Perl script. See the commit message of this commit as well as https://bugzilla.gnome.org/show_bug.cgi?id=782162 for more information. This patch also adds a new test so we don't loose this feature again.
Diffstat (limited to 'gobject/glib-mkenums.in')
-rwxr-xr-xgobject/glib-mkenums.in29
1 files changed, 24 insertions, 5 deletions
diff --git a/gobject/glib-mkenums.in b/gobject/glib-mkenums.in
index c4242ad13..199868039 100755
--- a/gobject/glib-mkenums.in
+++ b/gobject/glib-mkenums.in
@@ -132,6 +132,7 @@ option_lowercase_name = '' # DEPRECATED. A lower case name to use as part
# guess where to put the underscores.
option_since = '' # User provided version info for the enum.
seenbitshift = 0 # Have we seen bitshift operators?
+seenprivate = False # Have we seen a private option?
enum_prefix = None # Prefix for this enumeration
enumname = '' # Name for this enumeration
enumshort = '' # $enumname without prefix
@@ -161,7 +162,7 @@ def parse_trigraph(opts):
return result
def parse_entries(file, file_name):
- global entries, enumindex, enumname, seenbitshift, flags
+ global entries, enumindex, enumname, seenbitshift, seenprivate, flags
looking_for_name = False
while True:
@@ -239,16 +240,33 @@ def parse_entries(file, file_name):
if flags is None and value is not None and '<<' in value:
seenbitshift = 1
+ if seenprivate:
+ continue
+
if options is not None:
options = parse_trigraph(options)
if 'skip' not in options:
entries.append((name, value, options.get('nick')))
else:
entries.append((name, value))
- elif re.match(r's*\#', line):
- pass
else:
- print_warning('Failed to parse "{}" in {}'.format(line, file_name))
+ m = re.match(r'''\s*
+ /\*< (([^*]|\*(?!/))*) >\s*\*/
+ \s*$''', line, flags=re.X)
+ if m:
+ options = m.groups()[0]
+ if options is not None:
+ options = parse_trigraph(options)
+ if 'private' in options:
+ seenprivate = True
+ continue
+ if 'public' in options:
+ seenprivate = False
+ continue
+ if re.match(r's*\#', line):
+ pass
+ else:
+ print_warning('Failed to parse "{}" in {}'.format(line, file_name))
return False
help_epilog = '''Production text substitutions:
@@ -464,7 +482,7 @@ if len(fhead) > 0:
write_output(prod)
def process_file(curfilename):
- global entries, flags, seenbitshift, enum_prefix
+ global entries, flags, seenbitshift, seenprivate, enum_prefix
firstenum = True
try:
@@ -542,6 +560,7 @@ def process_file(curfilename):
break
seenbitshift = 0
+ seenprivate = False
entries = []
# Now parse the entries