[glib/wip/mak/mkenums-priv-trigraph: 2/2] mkenums: Support public/private trigraph again




commit 7c84d8ef377208f770c4c063a2da5d9b472bca8f
Author: Matthias Klumpp <matthias tenstral net>
Date:   Sun Jan 10 19:41:07 2021 +0100

    mkenums: Support public/private trigraph again
    
    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.

 gobject/glib-mkenums.in | 29 ++++++++++++++++++++++++-----
 1 file 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


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]