Add yamldumper utility
Just dumps YAML parser events to the console. Handy for a few things I'm pondering...
This commit is contained in:
parent
1e73d839f3
commit
36a7954df4
3 changed files with 120 additions and 1 deletions
12
SConstruct
12
SConstruct
|
@ -1,5 +1,5 @@
|
||||||
# SConstruct
|
# SConstruct
|
||||||
# vim: set ft=python:
|
# vim: set ft=python tw=80:
|
||||||
# Eryn Wells <eryn@erynwells.me>
|
# Eryn Wells <eryn@erynwells.me>
|
||||||
|
|
||||||
|
|
||||||
|
@ -114,6 +114,11 @@ common_env.Append(CCFLAGS=CCFLAGS)
|
||||||
common_env.Append(CFLAGS=['-std=c99'])
|
common_env.Append(CFLAGS=['-std=c99'])
|
||||||
common_env.Append(CXXFLAGS=['-std=c++11'])
|
common_env.Append(CXXFLAGS=['-std=c++11'])
|
||||||
|
|
||||||
|
# Separate base environment for building utilities. They're all written by me,
|
||||||
|
# so they need my usual flags, but each should have its own build environment
|
||||||
|
# derived from this one.
|
||||||
|
util_env = common_env.Clone()
|
||||||
|
|
||||||
# Add color error messages for clang
|
# Add color error messages for clang
|
||||||
if sys.stdout.isatty():
|
if sys.stdout.isatty():
|
||||||
if 'clang' in common_env['CC'] or 'clang' in common_env['CXX']:
|
if 'clang' in common_env['CC'] or 'clang' in common_env['CXX']:
|
||||||
|
@ -123,6 +128,7 @@ BUILD_DIR = Dir('#build')
|
||||||
LIB_DIR = Dir('#lib')
|
LIB_DIR = Dir('#lib')
|
||||||
SRC_DIR = Dir('#src')
|
SRC_DIR = Dir('#src')
|
||||||
TEST_DIR = Dir('#test')
|
TEST_DIR = Dir('#test')
|
||||||
|
UTIL_DIR = Dir('#util')
|
||||||
|
|
||||||
|
|
||||||
def create_env(name, appends=None):
|
def create_env(name, appends=None):
|
||||||
|
@ -198,6 +204,10 @@ for mode in build_modes:
|
||||||
do_sconscript(env, lib_env, LIB_DIR.Dir(lib), lib_out_dir)
|
do_sconscript(env, lib_env, LIB_DIR.Dir(lib), lib_out_dir)
|
||||||
env.Append(LIBPATH=[lib_out_dir])
|
env.Append(LIBPATH=[lib_out_dir])
|
||||||
|
|
||||||
|
for util in os.listdir(UTIL_DIR.abspath):
|
||||||
|
util_out_dir = out_dir.Dir('util').Dir(util)
|
||||||
|
do_sconscript(env, util_env.Clone(), UTIL_DIR.Dir(util), util_out_dir)
|
||||||
|
|
||||||
# Get test binaries.
|
# Get test binaries.
|
||||||
do_sconscript(env, env, TEST_DIR, out_dir.Dir('test'))
|
do_sconscript(env, env, TEST_DIR, out_dir.Dir('test'))
|
||||||
|
|
||||||
|
|
8
util/yamldumper/SConscript
Normal file
8
util/yamldumper/SConscript
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# SConscript
|
||||||
|
# vim: set ft=python:
|
||||||
|
# Eryn Wells <eryn@erynwells.me>
|
||||||
|
|
||||||
|
Import('env')
|
||||||
|
|
||||||
|
prog = env.Program('yamldumper', ['yamldumper.cc'], LIBS=['yaml'])
|
||||||
|
env.Alias('yamldumper', prog)
|
101
util/yamldumper/yamldumper.cc
Normal file
101
util/yamldumper/yamldumper.cc
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
/* yamldumper.cc
|
||||||
|
* vim: set tw=80:
|
||||||
|
* Eryn Wells <eryn@erynwells.me>
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* A small utility that reads a YAML file and dumps the parser events.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <cstdio>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#include "yaml.h"
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc,
|
||||||
|
char* argv[])
|
||||||
|
{
|
||||||
|
if (argc < 2) {
|
||||||
|
fprintf(stderr, "Usage: %s [yaml_file ...]\n", argv[0]);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool writeNewline = false;
|
||||||
|
for (int i = 1; i < argc; i++) {
|
||||||
|
if (writeNewline) {
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("--- %s\n", argv[i]);
|
||||||
|
|
||||||
|
yaml_parser_t parser;
|
||||||
|
yaml_parser_initialize(&parser);
|
||||||
|
|
||||||
|
FILE *f = fopen(argv[i], "rb");
|
||||||
|
if (!f) {
|
||||||
|
fprintf(stderr, "Couldn't open file.\n");
|
||||||
|
}
|
||||||
|
yaml_parser_set_input_file(&parser, f);
|
||||||
|
|
||||||
|
bool done = false;
|
||||||
|
yaml_event_t event;
|
||||||
|
while (!done) {
|
||||||
|
if (!yaml_parser_parse(&parser, &event)) {
|
||||||
|
fprintf(stderr, "Error parsing file.\n");
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (event.type) {
|
||||||
|
case YAML_NO_EVENT:
|
||||||
|
std::cout << "YAML_NO_EVENT\n";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case YAML_STREAM_START_EVENT:
|
||||||
|
std::cout << "YAML_STREAM_START_EVENT\n";
|
||||||
|
break;
|
||||||
|
case YAML_STREAM_END_EVENT:
|
||||||
|
std::cout << "YAML_STREAM_END_EVENT\n";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case YAML_DOCUMENT_START_EVENT:
|
||||||
|
std::cout << "YAML_DOCUMENT_START_EVENT\n";
|
||||||
|
break;
|
||||||
|
case YAML_DOCUMENT_END_EVENT:
|
||||||
|
std::cout << "YAML_DOCUMENT_END_EVENT\n";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case YAML_ALIAS_EVENT:
|
||||||
|
std::cout << "YAML_ALIAS_EVENT\n";
|
||||||
|
break;
|
||||||
|
case YAML_SCALAR_EVENT:
|
||||||
|
std::cout << "YAML_SCALAR_EVENT\n";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case YAML_SEQUENCE_START_EVENT:
|
||||||
|
std::cout << "YAML_SEQUENCE_START_EVENT\n";
|
||||||
|
break;
|
||||||
|
case YAML_SEQUENCE_END_EVENT:
|
||||||
|
std::cout << "YAML_SEQUENCE_END_EVENT\n";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case YAML_MAPPING_START_EVENT:
|
||||||
|
std::cout << "YAML_MAPPING_START_EVENT\n";
|
||||||
|
break;
|
||||||
|
case YAML_MAPPING_END_EVENT:
|
||||||
|
std::cout << "YAML_MAPPING_END_EVENT\n";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
done = (event.type == YAML_STREAM_END_EVENT);
|
||||||
|
yaml_event_delete(&event);
|
||||||
|
} /* while (!done) */
|
||||||
|
|
||||||
|
error:
|
||||||
|
yaml_parser_delete(&parser);
|
||||||
|
fclose(f);
|
||||||
|
writeNewline = true;
|
||||||
|
} /* for file : argv */
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue