xref: /freebsd/contrib/lyaml/ext/yaml/yaml.c (revision 151bd3516b541823b16793460d73916e63d2b9c1)
1 /*
2  * yaml.c, LibYAML binding for Lua
3  * Written by Andrew Danforth, 2009
4  *
5  * Copyright (C) 2014-2022 Gary V. Vaughan
6  * Copyright (C) 2009 Andrew Danforth
7  *
8  * Permission is hereby granted, free of charge, to any person obtaining a copy
9  * of this software and associated documentation files (the "Software"), to deal
10  * in the Software without restriction, including without limitation the rights
11  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12  * copies of the Software, and to permit persons to whom the Software is
13  * furnished to do so, subject to the following conditions:
14  *
15  * The above copyright notice and this permission notice shall be included in
16  * all copies or substantial portions of the Software.
17  *
18  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24  * THE SOFTWARE.
25  *
26  * Portions of this software were inspired by Perl's YAML::LibYAML module by
27  * Ingy d�t Net <ingy@cpan.org>
28  *
29  */
30 
31 #include <string.h>
32 #include <stdlib.h>
33 
34 #include <lualib.h>
35 
36 #include "lyaml.h"
37 
38 #include "bootstrap.h"
39 
40 #define MYNAME		"yaml"
41 #define MYVERSION	MYNAME " library for " LUA_VERSION " / " VERSION
42 
43 #define LYAML__STR_1(_s)	(#_s + 1)
44 #define LYAML_STR_1(_s)		LYAML__STR_1(_s)
45 
46 static const luaL_Reg R[] =
47 {
48 #define MENTRY(_s) {LYAML_STR_1(_s), (_s)}
49 	MENTRY( Pemitter	),
50 	MENTRY( Pparser		),
51 	MENTRY( Pscanner	),
52 #undef MENTRY
53 	{NULL, NULL}
54 };
55 
56 LUALIB_API int
luaopen_yaml(lua_State * L)57 luaopen_yaml (lua_State *L)
58 {
59    parser_init (L);
60    scanner_init (L);
61 
62    luaL_register(L, "yaml", R);
63 
64    lua_pushliteral(L, MYVERSION);
65    lua_setfield(L, -2, "version");
66 
67    return 1;
68 }
69 
70 FLUA_MODULE(yaml);
71