From b7930391bf1981b68227bb1c286cd28630cfd544 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Tue, 5 Mar 2013 22:23:59 +0100 Subject: Move "libstorycode" back to this repository Keeping it separate, just for the sake of "harfatum", was causing a lot more awkwardness than it could ever solve, compared to just duplicating the code. --- .gitmodules | 3 - Makefile.am | 14 +- autogen.sh | 4 - configure.ac | 1 - libstorycode | 1 - src/frame.c | 3 +- src/render.c | 3 +- src/storycode.c | 392 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/storycode.h | 47 +++++++ src/wrap.c | 3 +- 10 files changed, 449 insertions(+), 22 deletions(-) delete mode 160000 libstorycode create mode 100644 src/storycode.c create mode 100644 src/storycode.h diff --git a/.gitmodules b/.gitmodules index 93a5aa7..f6fb2fb 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ [submodule "harfatum"] path = harfatum url = ssh://git@git.bitwiz.org.uk/harfatum.git -[submodule "libstorycode"] - path = libstorycode - url = ssh://git@git.bitwiz.org.uk/libstorycode.git diff --git a/Makefile.am b/Makefile.am index 3ee669c..d80325f 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,5 +1,5 @@ EXTRA_DIST = configure m4/gnulib-cache.m4 -SUBDIRS = lib libstorycode harfatum +SUBDIRS = lib harfatum ACLOCAL_AMFLAGS = -I m4 bin_PROGRAMS = src/colloquium @@ -8,17 +8,17 @@ AM_CFLAGS = -Wall AM_CPPFLAGS = -DDATADIR=\""$(datadir)"\" -I$(top_builddir)/lib \ -I$(top_srcdir)/lib LDADD = $(top_builddir)/lib/libgnu.la @IGNORE_UNUSED_LIBRARIES_CFLAGS@ \ - libstorycode/src/libstorycode.la harfatum/src/libharfatum.la + harfatum/src/libharfatum.la src_colloquium_SOURCES = src/colloquium.c src/render.c \ src/mainwindow.c src/presentation.c \ src/stylesheet.c src/loadsave.c src/frame.c \ - src/slideshow.c src/wrap.c + src/slideshow.c src/wrap.c src/storycode.c -INCLUDES = -Ilibstorycode/src -Iharfatum/src +INCLUDES = -Iharfatum/src EXTRA_DIST += src/presentation.h src/render.h src/wrap.h \ - src/stylesheet.h src/loadsave.h src/slideshow.h + src/stylesheet.h src/loadsave.h src/slideshow.h src/storycode.h colloquiumdir = $(datadir)/colloquium colloquium_DATA = data/colloquium.ui @@ -33,7 +33,7 @@ noinst_PROGRAMS = tests/render_test tests/render_test_sc1 TESTS = tests/render_test tests/render_test_sc1 tests_render_test_SOURCES = tests/render_test.c src/render.c src/frame.c \ - src/wrap.c + src/wrap.c src/storycode.c -tests_render_test_sc1_SOURCES = tests/render_test_sc1.c \ +tests_render_test_sc1_SOURCES = tests/render_test_sc1.c src/storycode.c \ src/render.c src/frame.c src/wrap.c diff --git a/autogen.sh b/autogen.sh index 03a0a31..aa52220 100755 --- a/autogen.sh +++ b/autogen.sh @@ -6,10 +6,6 @@ libtoolize --force --copy \ && automake --add-missing --copy --force \ && autoconf --force -pushd libstorycode -./autogen.sh -popd - pushd harfatum ./autogen.sh popd diff --git a/configure.ac b/configure.ac index 5dac98b..eff1f2a 100644 --- a/configure.ac +++ b/configure.ac @@ -69,6 +69,5 @@ LIBS="$LIBS $GDK_pixbuf_2_LIBS $LDFLAGS" AC_CONFIG_FILES(Makefile lib/Makefile) -AC_CONFIG_FILES(libstorycode/Makefile libstorycode/lib/Makefile) AC_CONFIG_FILES(harfatum/Makefile harfatum/lib/Makefile) AC_OUTPUT diff --git a/libstorycode b/libstorycode deleted file mode 160000 index bc5064b..0000000 --- a/libstorycode +++ /dev/null @@ -1 +0,0 @@ -Subproject commit bc5064bf99ae0cf53b27eba1341447809639ff99 diff --git a/src/frame.c b/src/frame.c index 4cbb432..ed6047a 100644 --- a/src/frame.c +++ b/src/frame.c @@ -29,8 +29,7 @@ #include #include -#include - +#include "storycode.h" #include "frame.h" diff --git a/src/render.c b/src/render.c index ed72fe0..3aa3d05 100644 --- a/src/render.c +++ b/src/render.c @@ -32,8 +32,7 @@ #include #include -#include - +#include "storycode.h" #include "stylesheet.h" #include "presentation.h" #include "frame.h" diff --git a/src/storycode.c b/src/storycode.c new file mode 100644 index 0000000..45638b4 --- /dev/null +++ b/src/storycode.c @@ -0,0 +1,392 @@ +/* + * storycode.c + * + * Copyright (c) 2012 Thomas White + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include + +#include "storycode.h" + + +struct _scblocklist +{ + int n_blocks; + int max_blocks; + + struct scblock *blocks; +}; + + +struct _scblocklistiterator +{ + int pos; +}; + + +static int allocate_blocks(SCBlockList *bl) +{ + struct scblock *blocks_new; + + blocks_new = realloc(bl->blocks, bl->max_blocks*sizeof(struct scblock)); + if ( blocks_new == NULL ) { + return 1; + } + bl->blocks = blocks_new; + + return 0; +} + + +SCBlockList *sc_block_list_new() +{ + SCBlockList *bl; + + bl = calloc(1, sizeof(SCBlockList)); + if ( bl == NULL ) return NULL; + + bl->n_blocks = 0; + bl->max_blocks = 64; + bl->blocks = NULL; + if ( allocate_blocks(bl) ) { + free(bl); + return NULL; + } + + return bl; +} + + +void sc_block_list_free(SCBlockList *bl) +{ + int i; + + for ( i=0; in_blocks; i++ ) { + free(bl->blocks[i].name); + free(bl->blocks[i].options); + free(bl->blocks[i].contents); + } + free(bl->blocks); + free(bl); +} + + +struct scblock *sc_block_list_first(SCBlockList *bl, + SCBlockListIterator **piter) +{ + SCBlockListIterator *iter; + + if ( bl->n_blocks == 0 ) return NULL; + + iter = calloc(1, sizeof(SCBlockListIterator)); + if ( iter == NULL ) return NULL; + + iter->pos = 0; + *piter = iter; + + return &bl->blocks[0]; +} + + +struct scblock *sc_block_list_next(SCBlockList *bl, SCBlockListIterator *iter) +{ + iter->pos++; + if ( iter->pos == bl->n_blocks ) { + free(iter); + return NULL; + } + + return &bl->blocks[iter->pos]; +} + + +static int sc_block_list_add(SCBlockList *bl, + char *name, char *options, char *contents) +{ + if ( bl->n_blocks == bl->max_blocks ) { + bl->max_blocks += 64; + if ( allocate_blocks(bl) ) return 1; + } + + bl->blocks[bl->n_blocks].name = name; + bl->blocks[bl->n_blocks].options = options; + bl->blocks[bl->n_blocks].contents = contents; + bl->n_blocks++; + + return 0; +} + + +static int get_subexpr(const char *sc, char *bk, char **pcontents, int *err) +{ + size_t ml; + int i; + int bct = 1; + int found = 0; + char *contents; + + *err = 0; + + ml = strlen(sc); + contents = malloc(ml+1); + if ( contents == NULL ) { + *err = -1; + return 0; + } + *pcontents = contents; + + for ( i=0; iname == NULL ) { + strcat(out, b->contents); + } else { + + if ( strcmp(blockname, b->name) != 0 ) { + strcat(out, "\\"); + strcat(out, b->name); + if ( b->options != NULL ) { + strcat(out, "["); + strcat(out, b->options); + strcat(out, "]"); + } + if ( b->contents != NULL ) { + strcat(out, "{"); + strcat(out, b->contents); + strcat(out, "}"); + } + + if ( (b->options == NULL) + && (b->contents == NULL) ) { + strcat(out, " "); + } + + } + + } + } + sc_block_list_free(bl); + + return out; +} + diff --git a/src/storycode.h b/src/storycode.h new file mode 100644 index 0000000..39ff18b --- /dev/null +++ b/src/storycode.h @@ -0,0 +1,47 @@ +/* + * storycode.h + * + * Copyright (c) 2012 Thomas White + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#ifndef STORYCODE_H +#define STORYCODE_H + +#ifdef HAVE_CONFIG_H +#include +#endif + +typedef struct _scblocklist SCBlockList; +typedef struct _scblocklistiterator SCBlockListIterator; + +struct scblock +{ + char *name; + char *options; + char *contents; +}; + +struct scblock *sc_block_list_first(SCBlockList *bl, + SCBlockListIterator **piter); +struct scblock *sc_block_list_next(SCBlockList *bl, SCBlockListIterator *iter); + +extern SCBlockList *sc_find_blocks(const char *sc, const char *blockname); +extern void sc_block_list_free(SCBlockList *bl); + +extern char *remove_blocks(const char *in, const char *blockname); + +#endif /* STORYCODE_H */ diff --git a/src/wrap.c b/src/wrap.c index 17713ec..6092fa3 100644 --- a/src/wrap.c +++ b/src/wrap.c @@ -31,8 +31,7 @@ #include #include -#include - +#include "storycode.h" #include "wrap.h" #include "frame.h" -- cgit v1.2.3