Handle names of constants during API conversion.
authorJamey Sharp <jamey@minilop.net>
Mon, 18 Sep 2006 07:25:26 +0000 (00:25 -0700)
committerJamey Sharp <jamey@minilop.net>
Mon, 18 Sep 2006 07:25:26 +0000 (00:25 -0700)
Use an XSLT stylesheet to get a list of all the constant names.

tools/api_conv.pl
tools/const-names.xsl [new file with mode: 0644]

index 98402bf..2e6a1d0 100755 (executable)
@@ -1,6 +1,25 @@
 #!/usr/bin/perl -plw
 use strict;
 
+BEGIN {
+       %::const = map { $_ => 1 } (
+               "XCBNone",
+               "XCBCopyFromParent",
+               "XCBCurrentTime",
+               "XCBNoSymbol",
+               "XCBError",
+               "XCBReply",
+       );
+       open(CONST, shift) or die "failed to open constants list: $!";
+       while(<CONST>)
+       {
+               chomp;
+               die "invalid constant name: \"$_\"" unless /^XCB[A-Za-z0-9_]*$/;
+               $::const{$_} = 1;
+       }
+       close(CONST);
+}
+
 sub convert($$)
 {
        local $_ = shift;
@@ -10,6 +29,7 @@ sub convert($$)
        return "int$1_t" if /^INT(8|16|32)$/;
        return "uint8_t" if $_ eq 'BOOL' or $_ eq 'BYTE';
        return $_ if /_/ or !/^XCB(.+)/;
+       my $const = defined $::const{$_};
        $_ = $1;
 
        my %abbr = (
@@ -19,6 +39,9 @@ sub convert($$)
        );
 
        s/[A-Z](?:[A-Z0-9]*|[a-z0-9]*)(?=[A-Z]|$)/"_" . ($abbr{$&} or lc($&))/eg;
+
+       return "XCB" . uc($_) if $const;
+
        $_ .= "_t" unless $fun;
 
        return "xcb" . $_;
diff --git a/tools/const-names.xsl b/tools/const-names.xsl
new file mode 100644 (file)
index 0000000..5cff33e
--- /dev/null
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+  <xsl:output method="text"/>
+
+  <xsl:strip-space elements="*"/>
+
+  <xsl:variable name="nl"><xsl:text>
+</xsl:text></xsl:variable>
+
+  <xsl:template match="enum/item">
+    <xsl:value-of select="concat('XCB', /xcb/@extension-name, ../@name, @name, $nl)"/>
+  </xsl:template>
+
+  <xsl:template match="event|eventcopy|error|errorcopy">
+    <xsl:value-of select="concat('XCB', /xcb/@extension-name, @name, $nl)"/>
+  </xsl:template>
+
+  <xsl:template match="text()"/>
+
+</xsl:transform>