Blame tools/api_conv.pl

Packit Service 612474
#!/usr/bin/perl -plw
Packit Service 612474
use strict;
Packit Service 612474
Packit Service 612474
BEGIN {
Packit Service 612474
	%::const = map { $_ => 1 } (
Packit Service 612474
		# constants in xcb.h
Packit Service 612474
		"XCBNone",
Packit Service 612474
		"XCBCopyFromParent",
Packit Service 612474
		"XCBCurrentTime",
Packit Service 612474
		"XCBNoSymbol",
Packit Service 612474
		"XCBError",
Packit Service 612474
		"XCBReply",
Packit Service 612474
		# renamed constants
Packit Service 612474
		"XCBButtonAny",
Packit Service 612474
		"XCBButton1",
Packit Service 612474
		"XCBButton2",
Packit Service 612474
		"XCBButton3",
Packit Service 612474
		"XCBButton4",
Packit Service 612474
		"XCBButton5",
Packit Service 612474
		"XCBHostInsert",
Packit Service 612474
		"XCBHostDelete",
Packit Service 612474
		"XCBGlxGC_GL_CURRENT_BIT",
Packit Service 612474
		"XCBGlxGC_GL_POINT_BIT",
Packit Service 612474
		"XCBGlxGC_GL_LINE_BIT",
Packit Service 612474
		"XCBGlxGC_GL_POLYGON_BIT",
Packit Service 612474
		"XCBGlxGC_GL_POLYGON_STIPPLE_BIT",
Packit Service 612474
		"XCBGlxGC_GL_PIXEL_MODE_BIT",
Packit Service 612474
		"XCBGlxGC_GL_LIGHTING_BIT",
Packit Service 612474
		"XCBGlxGC_GL_FOG_BIT",
Packit Service 612474
		"XCBGlxGC_GL_DEPTH_BUFFER_BIT",
Packit Service 612474
		"XCBGlxGC_GL_ACCUM_BUFFER_BIT",
Packit Service 612474
		"XCBGlxGC_GL_STENCIL_BUFFER_BIT",
Packit Service 612474
		"XCBGlxGC_GL_VIEWPORT_BIT",
Packit Service 612474
		"XCBGlxGC_GL_TRANSFORM_BIT",
Packit Service 612474
		"XCBGlxGC_GL_ENABLE_BIT",
Packit Service 612474
		"XCBGlxGC_GL_COLOR_BUFFER_BIT",
Packit Service 612474
		"XCBGlxGC_GL_HINT_BIT",
Packit Service 612474
		"XCBGlxGC_GL_EVAL_BIT",
Packit Service 612474
		"XCBGlxGC_GL_LIST_BIT",
Packit Service 612474
		"XCBGlxGC_GL_TEXTURE_BIT",
Packit Service 612474
		"XCBGlxGC_GL_SCISSOR_BIT",
Packit Service 612474
		"XCBGlxGC_GL_ALL_ATTRIB_BITS",
Packit Service 612474
		"XCBGlxRM_GL_RENDER",
Packit Service 612474
		"XCBGlxRM_GL_FEEDBACK",
Packit Service 612474
		"XCBGlxRM_GL_SELECT",
Packit Service 612474
	);
Packit Service 612474
	open(CONST, shift) or die "failed to open constants list: $!";
Packit Service 612474
	while(<CONST>)
Packit Service 612474
	{
Packit Service 612474
		chomp;
Packit Service 612474
		die "invalid constant name: \"$_\"" unless /^XCB[A-Za-z0-9_]*$/;
Packit Service 612474
		$::const{$_} = 1;
Packit Service 612474
	}
Packit Service 612474
	close(CONST);
Packit Service 612474
}
Packit Service 612474
Packit Service 612474
sub convert($$)
Packit Service 612474
{
Packit Service 612474
	local $_ = shift;
Packit Service 612474
	my ($fun) = @_;
Packit Service 612474
Packit Service 612474
	return "xcb_generate_id" if /^xcb_[a-z0-9_]+_new$/ or /^XCB[A-Z0-9]+New$/;
Packit Service 612474
	return "uint$1_t" if /^CARD(8|16|32)$/;
Packit Service 612474
	return "int$1_t" if /^INT(8|16|32)$/;
Packit Service 612474
	return "uint8_t" if $_ eq 'BOOL' or $_ eq 'BYTE';
Packit Service 612474
	return $_ if /^[A-Z0-9]*_[A-Z0-9_]*$/ or !/^XCB(.+)/;
Packit Service 612474
	my $const = defined $::const{$_};
Packit Service 612474
	$_ = $1;
Packit Service 612474
Packit Service 612474
	s/^(GX|RandR|XFixes|XP|XvMC|ScreenSaver)(.)/uc($1) . "_" . $2/e unless /^ScreenSaver(?:Reset|Active)$/;
Packit Service 612474
Packit Service 612474
	my %abbr = (
Packit Service 612474
		"Iter" => "iterator",
Packit Service 612474
		"Req" => "request",
Packit Service 612474
		"Rep" => "reply",
Packit Service 612474
	);
Packit Service 612474
Packit Service 612474
	my $word;
Packit Service 612474
	if(/CHAR2B|INT64|FLOAT32|FLOAT64|BOOL32|STRING8/)
Packit Service 612474
	{
Packit Service 612474
		$word = qr/[A-Z](?:[A-Z0-9]*|[a-z]*)/;
Packit Service 612474
	} else {
Packit Service 612474
		$word = qr/[0-9]+|[A-Z](?:[A-Z]*|[a-z]*)/;
Packit Service 612474
	}
Packit Service 612474
	s/($word)_?(?=[0-9A-Z]|$)/"_" . ($abbr{$1} or lc($1))/eg;
Packit Service 612474
Packit Service 612474
	s/^_shape_shape_/_shape_/;
Packit Service 612474
	s/^_xf_?86_dri/_xf86dri/;
Packit Service 612474
	$_ = "_family_decnet" if $_ eq "_family_de_cnet";
Packit Service 612474
	return "XCB" . uc($_) if $const;
Packit Service 612474
Packit Service 612474
	$_ .= "_t" unless $fun or /_id$/;
Packit Service 612474
Packit Service 612474
	return "xcb" . $_;
Packit Service 612474
}
Packit Service 612474
Packit Service 612474
s/^(\s*#\s*include\s*<)X11\/XCB\//$1xcb\//;
Packit Service 612474
s/([_A-Za-z][_A-Za-z0-9]*)([ \t]*\()?/convert($1, defined $2) . ($2 or "")/eg;