Mercurial > MadButterfly
changeset 63:f4b792afa74e
m4 translator
author | Thinker K.F. Li <thinker@branda.to> |
---|---|
date | Tue, 12 Aug 2008 14:21:09 +0800 |
parents | 7d976d925431 |
children | c668c5c3ceae |
files | tools/foreach.m4 tools/mb_c_header.m4 tools/mb_c_source.m4 tools/svg2code.py |
diffstat | 4 files changed, 120 insertions(+), 24 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/foreach.m4 Tue Aug 12 14:21:09 2008 +0800 @@ -0,0 +1,10 @@ +divert([-1]) + +define([_arg1], [$1]) + +define([_foreach], [ifelse([$2], [()], [], +[define([$1], _arg1$2)$3[]_foreach([$1], (shift$2), [$3])])]) + +define([foreach], [pushdef([$1])_foreach($@)popdef([$1])]) + +divert[]dnl
--- a/tools/mb_c_header.m4 Tue Aug 12 08:48:16 2008 +0800 +++ b/tools/mb_c_header.m4 Tue Aug 12 14:21:09 2008 +0800 @@ -1,22 +1,30 @@ changequote(`[', `]')dnl -define([ADD_LINEAR_PAINT],[[ paint_t *$1; -]])dnl -define([ADD_RADIAL_PAINT],[[ paint_t *$1; -]])dnl -define([ADD_PATH],[[ shape_t *$1; -]])dnl -define([ADD_RECT],[[ shape_t *$1; -]])dnl -define([ADD_COORD],[[ coord_t *$1; -]])dnl -dnl -define([REF_STOPS],)dnl -define([ADD_STOP],)dnl -define([FILL_SHAPE],)dnl -define([STROKE_SHAPE],)dnl -define([FILL_SHAPE_WITH_PAINT],)dnl -define([STROKE_SHAPE_WITH_PAINT],)dnl -dnl +divert([-1]) + +define([ADD_LINEAR_PAINT],[[ + paint_t *$1; +]]) + +define([ADD_RADIAL_PAINT],[[ + paint_t *$1; +]]) +define([ADD_PATH],[ +[ shape_t *$1; +]]) +define([ADD_RECT],[ +[ shape_t *$1; +]]) +define([ADD_COORD],[ +[ coord_t *$1; +]]) +define([COLOR_STOP],[ ]) + +define([REF_STOPS],) +define([FILL_SHAPE],) +define([STROKE_SHAPE],) +define([FILL_SHAPE_WITH_PAINT],) +define([STROKE_SHAPE_WITH_PAINT],) + define([MADBUTTERFLY],[dnl [#ifndef __$1_H_ #define __$1_H_] @@ -24,9 +32,9 @@ [typedef struct $1 $1_t;] struct [$1] { -$2dnl +$2[]dnl }; [#endif /* __$1_H_ */] -])dnl -dnl \ No newline at end of file +]) +divert[]dnl
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/mb_c_source.m4 Tue Aug 12 14:21:09 2008 +0800 @@ -0,0 +1,76 @@ +changequote(`[', `]')dnl +include([foreach.m4])dnl +divert([-1]) + +define([COUNT],[pushdef([COUNT_N])define([COUNT_N],0)dnl +foreach([x],[($1)],[define([COUNT_N],incr(COUNT_N))])COUNT_N[]dnl +popdef([COUNT_N])[]]) + +define([STOP_FIELDS],[dnl +ifelse(COUNT($2),0,,[dnl +[ int n_$1_stops; + grad_stop_t *$1_stop; +]])dnl +]) + +define([IMPORT],[define([$1],[$2$1(][$][@)])]) + +define([D_COLOR_STOP],[{$2,$3,$4,$5,$6},]) + +define([D_ADD_LINEAR_PAINT],[dnl +ifelse(COUNT([$6]),0,,[dnl + static int n_$1_stops = COUNT([$6]); + static grad_stop_t $1_stops[[]] = {$6}; +])dnl +]) + +define([D_ADD_RADIAL_PAINT],[dnl +ifelse(COUNT([$5]),0,,[dnl + static int n_$1_stops = COUNT([$5]); +])dnl +]) + +define([D_REF_STOPS],[]); + +define([DECLARE_VARS], [divert([-1]) +IMPORT([ADD_LINEAR_PAINT], [D_]) +IMPORT([ADD_RADIAL_PAINT],[D_]) +IMPORT([REF_STOPS],[D_]) +IMPORT([COLOR_STOP],[D_]) +divert[]]) + +define([S_ADD_LINEAR_PAINT],[ + obj->$1 = mb_linear_new(rdman, $2, $3, $4, $5); +]) +define([S_ADD_RADIAL_PAINT],[ + obj->$1 = mb_radial_new(rdman, $2, $3, $4); +]) +define([S_REF_STOPS],[dnl +]) + +define([SETUP_VARS],[divert([-1]) +IMPORT([ADD_LINEAR_PAINT],[S_]) +IMPORT([ADD_RADIAL_PAINT],[S_]) +IMPORT([REF_STOPS],[S_]) +divert[]]) + +define([MADBUTTERFLY],[dnl +[#include <stdio.h> +#include "mb_types.h" +#include "redraw_man.h" +#include "shapes.h" +#include "paint.h" +#include "$1.h" + +$1_t *$1_new(redraw_mant_t *rdman) { + $1_t *obj;]DECLARE_VARS +$2[]dnl +[ + obj = ($1_t *)malloc(sizeof($1_t)); + if(obj == NULL) return NULL; +]SETUP_VARS +$2 +[ return obj; +}] +]) +divert[]dnl
--- a/tools/svg2code.py Tue Aug 12 08:48:16 2008 +0800 +++ b/tools/svg2code.py Tue Aug 12 14:21:09 2008 +0800 @@ -26,7 +26,7 @@ opacity = style_map['stop-opacity'] offset = node.getAttribute('offset') - print >> codefo, 'ADD_STOP([%s], [%f, %f, %f, %f], [%f])dnl' % ( + print >> codefo, '[COLOR_STOP([%s], %f, %f, %f, %f, %f)],' % ( parent_id, r, g, b, float(opacity), float(offset)) pass pass @@ -42,9 +42,10 @@ else: x1 = y1 = x2 = y2 = 0 pass - print >> codefo, 'ADD_LINEAR_PAINT([%s], [%f, %f, %f, %f])dnl' % ( + print >> codefo, 'ADD_LINEAR_PAINT([%s], %f, %f, %f, %f, [' % ( linear_id, x1, y1, x2, y2) translate_stops(linear, codefo, linear_id) + print >> codefo, '])dnl' href = linear.getAttributeNS(xlinkns, 'href').strip() if href and href[0] == '#': @@ -65,9 +66,10 @@ except: r = 0.5 pass - print >> codefo, 'ADD_RADIAL_PAINT([%s], [%f, %f], %f)dnl' % ( + print >> codefo, 'ADD_RADIAL_PAINT([%s], %f, %f, %f, [' % ( radial_id, cx, cy, r) translate_stops(radial, codefo, radial_id) + print >>codefo, '])dnl' href = radial.getAttributeNS(xlinkns, 'href').strip() if href[0] == '#':