[vlc-devel] [PATCH] java binding: automatic conversion tool for JNA

Cristian Maglie megabug at autistici.org
Sun Apr 6 17:49:57 CEST 2008


---
 bindings/java/extras/convert.py |   87 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 87 insertions(+), 0 deletions(-)
 create mode 100755 bindings/java/extras/convert.py

diff --git a/bindings/java/extras/convert.py b/bindings/java/extras/convert.py
new file mode 100755
index 0000000..6b753cb
--- /dev/null
+++ b/bindings/java/extras/convert.py
@@ -0,0 +1,87 @@
+#!/usr/bin/python
+"""
+vlc to jna almost-automatized interface converter.
+
+This program is free software. It comes without any warranty, to
+the extent permitted by applicable law. You can redistribute it
+and/or modify it under the terms of the Do What The Fuck You Want
+To Public License, Version 2, as published by Sam Hocevar. See
+http://sam.zoy.org/wtfpl/COPYING for more details. 
+
+"""
+
+import sys
+
+file = open('libvlc.h', 'r')
+
+parameter_parsing = False
+prototype_parsing = False
+
+types_map = [
+	["const ", ""],
+	["VLC_PUBLIC_API ", ""],
+	["char**", "String[] "],
+	["char **" , "String[] "],
+	["char*" , "String "],
+	["char *" , "String "],
+	["libvlc_instance_t *", "LibVlcInstance "],
+	["libvlc_exception_t *", "libvlc_exception_t "],
+	["libvlc_log_t *", "LibVlcLog "],
+	["libvlc_log_iterator_t *", "LibVlcLogIterator "],
+	["libvlc_log_message_t *", "libvlc_log_message_t "],
+	["unsigned", "int"],
+]
+
+def convert_prototype(proto, parameters):
+	#print proto
+	#print parameters
+	tokens = proto.split(",")
+	last = tokens.pop().split(")")
+	res = ''
+	for i in tokens:
+		param = parameters.pop(0)
+		if i.find(param)==-1:
+			res += i + " " + param + ","
+		else:
+			res += i + " ,"
+	if len(parameters):
+		param = parameters.pop(0)
+		if last[0].find(param)==-1:
+			res += last[0] + " " + param + ")" + last[1]
+		else:
+			res += last[0] + ")" + last[1]
+
+	for k,v in types_map:
+		res = res.replace(k,v)
+	print res
+
+for line in file.readlines():
+	if line.find("/**")!=-1:
+		parameters = []
+		parameter_parsing = True
+
+	if line.find("VLC_PUBLIC_API")!=-1:
+		if not parameters:
+			continue
+		prototype_line = ''
+		prototype_parsing = True
+
+	if parameter_parsing:
+		param_index = line.find("\param ")
+		if not param_index==-1:
+			parameter = line.split()[2]
+			parameters.append(parameter)
+		if line.find("*/")!=-1:
+			parameter_parsing = False
+
+	if prototype_parsing:
+		prototype_line += line.strip()
+		if line.find(");")!=-1:
+			prototype_parsing = False
+			convert_prototype(prototype_line, parameters)
+			parameters = None
+		continue
+
+	#sys.stdout.write(line)
+
+# vi:ts=4
-- 
1.5.4.5




More information about the vlc-devel mailing list