summaryrefslogtreecommitdiff
path: root/src/jsapi-libdom.c
blob: 0f4ebc4cd020e126dbaf0fe197854901c647d5b1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/* binding output generator for jsapi(spidermonkey) to libdom 
 *
 * This file is part of nsgenjsbind.
 * Licensed under the MIT License,
 *                http://www.opensource.org/licenses/mit-license.php
 * Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>
 */

#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <stdbool.h>

#include "options.h"
#include "genjsbind-ast.h"
#include "webidl-ast.h"
#include "jsapi-libdom.h"

#define HDR_COMMENT_SEP     "\n * "
#define HDR_COMMENT_PREABLE "Generated by nsgenjsapi"

static int webidl_hdrcomments_cb(struct genbind_node *node, void *ctx)
{
	FILE *outfile = ctx;
	char *txt;
	txt = genbind_node_gettext(node);
	fprintf(outfile, HDR_COMMENT_SEP"%s",txt);
	return 0;
}

static int webidl_hdrcomment_cb(struct genbind_node *node, void *ctx)
{
	genbind_node_for_each_type(genbind_node_getnode(node),
				   GENBIND_NODE_TYPE_STRING, 
				   webidl_hdrcomments_cb, 
				   ctx);
	return 0;
}

static int 
output_header_comments(FILE *outfile, struct genbind_node *genbind_ast)
{
	fprintf(outfile, "/* "HDR_COMMENT_PREABLE);
	genbind_node_for_each_type(genbind_ast,
				   GENBIND_NODE_TYPE_HDRCOMMENT, 
				   webidl_hdrcomment_cb, 
				   outfile);
	fprintf(outfile,"\n */\n\n");
	return 0;
}

static int webidl_file_cb(struct genbind_node *node, void *ctx)
{
	struct webidl_node **webidl_ast = ctx;
	char *filename;

	filename = genbind_node_gettext(node);

	return webidl_parsefile(filename, webidl_ast);

}

static int 
read_webidl(struct genbind_node *genbind_ast, struct webidl_node **webidl_ast)
{
	return genbind_node_for_each_type(genbind_ast,
					  GENBIND_NODE_TYPE_WEBIDLFILE, 
					  webidl_file_cb, 
					  webidl_ast);

}

int jsapi_libdom_output(char *outfilename, struct genbind_node *genbind_ast)
{
        FILE *outfile = NULL;
	struct webidl_node *webidl_ast = NULL;
	int res;

	res = read_webidl(genbind_ast, &webidl_ast);
	if (res != 0) {
		fprintf(stderr, "Error reading Web IDL files\n");
		return 5;
	}

	if (options->verbose) {
		webidl_ast_dump(webidl_ast);
	}

        /* open output file */
	if (outfilename == NULL) {
		outfile = stdout;
	} else {
		outfile = fopen(outfilename, "w");
	}

	if (!outfile) {
		fprintf(stderr, "Error opening output %s: %s\n",
			outfilename, 
			strerror(errno));
		return 4;
	}

	output_header_comments(outfile, genbind_ast);

	/*	fprintf(outfile, " %s\n \n\n", genbind_ast->hdr_comments);

	fprintf(outfile, "%s", genbind_ast->preamble);

	fprintf(outfile, " interface %s \n\n", genbind_ast->ifname);
*/
	fclose(outfile);

	return 0;
}