
Module: ppl/ppl Branch: prova Commit: bace9caed4ba2aba49450798390a526501db70bd URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=bace9caed4ba2...
Author: Abramo Bagnara abramo.bagnara@gmail.com Date: Mon Mar 23 22:16:56 2009 +0100
Added repeated char for left and right margin.
---
interfaces/C/tests/print_to_buffer.c | 55 +++++++++++++++++++++------------- src/c_stream.cc | 24 +++++++------- src/c_stream.h | 8 +++++ src/c_streambuf_format.cc | 5 +++ 4 files changed, 59 insertions(+), 33 deletions(-)
diff --git a/interfaces/C/tests/print_to_buffer.c b/interfaces/C/tests/print_to_buffer.c index 5de5698..87a81e4 100644 --- a/interfaces/C/tests/print_to_buffer.c +++ b/interfaces/C/tests/print_to_buffer.c @@ -31,9 +31,6 @@ print_ppl_##Name##_t_to_buffer(ppl_const_##Name##_t p, \ unsigned indent_depth, \ unsigned pfll, \ unsigned pll) { \ - char in[indent_depth + 1]; \ - memset(in, ' ', indent_depth); \ - in[indent_depth] = '\0'; \ struct ppl_io_format_settings settings = { \ 0, /* tr_in */ \ 0, /* tr_out */ \ @@ -46,26 +43,42 @@ print_ppl_##Name##_t_to_buffer(ppl_const_##Name##_t p, \ 0, /* top */ \ 0, /* bottom */ \ { \ - /* length, left, right, alignment, fill_char */ \ - { pfll, "", "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, /* FIRST */ \ - { pfll, "", "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, /* FIRSTLAST */ \ - { pll, in, "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, /* NEXT */ \ - { pll, in, "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, /* LAST */ \ - { 0, "", "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, /* CHOPPED_FIRST */ \ - { 0, "", "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, /* CHOPPED_NEXT */ \ - { pfll, "", "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, /* LONGER_FIRST */ \ - { pfll, "", "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, /* LONGER_FIRSTLAST */ \ - { pll, in, "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, /* LONGER_NEXT */ \ - { pll, in, "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, /* LONGER_LAST */ \ - { pfll, "", "", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, /* UNTERMINATED_FIRST */ \ - { pll, in, "", PPL_IO_FORMAT_ALIGN_LEFT, 0 } /* UNTERMINATED_NEXT */ \ - } \ + /* length, left, left_n, left_c, right_n, right_c right, alignment, fill_char */ \ + { 0, 0, ' ', 0, 0, ' ', "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, /* FIRST */ \ + { 0, 0, ' ', 0, 0, ' ', "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, /* FIRSTLAST */ \ + { 0, 0, ' ', 0, 0, ' ', "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, /* NEXT */ \ + { 0, 0, ' ', 0, 0, ' ', "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, /* LAST */ \ + { 0, 0, ' ', 0, 0, ' ', "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, /* CHOPPED_FIRST */ \ + { 0, 0, ' ', 0, 0, ' ', "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, /* CHOPPED_NEXT */ \ + { 0, 0, ' ', 0, 0, ' ', "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, /* LONGER_FIRST */ \ + { 0, 0, ' ', 0, 0, ' ', "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, /* LONGER_FIRSTLAST */ \ + { 0, 0, ' ', 0, 0, ' ', "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, /* LONGER_NEXT */ \ + { 0, 0, ' ', 0, 0, ' ', "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, /* LONGER_LAST */ \ + { 0, 0, ' ', 0, 0, ' ', "", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, /* UNTERMINATED_FIRST */ \ + { 0, 0, ' ', 0, 0, ' ', "", PPL_IO_FORMAT_ALIGN_LEFT, 0 } /* UNTERMINATED_NEXT */ \ + } \ }; \ - struct ppl_io_ostream* target = ppl_io_ostream_buffer_new(); \ - struct ppl_io_ostream* stream = ppl_io_ostream_format_new(target, &settings); \ - ppl_io_write_##NAME(stream, object); \ - ppl_io_ostream_delete(stream); \ + struct ppl_io_ostream *target, *stream; \ char *buf; \ + settings.lines[PPL_IO_FORMAT_LINE_FIRST].length = pfll; \ + settings.lines[PPL_IO_FORMAT_LINE_FIRSTLAST].length = pfll; \ + settings.lines[PPL_IO_FORMAT_LINE_LONGER_FIRST].length = pfll; \ + settings.lines[PPL_IO_FORMAT_LINE_LONGER_FIRSTLAST].length = pfll; \ + settings.lines[PPL_IO_FORMAT_LINE_UNTERMINATED_FIRST].length = pfll; \ + settings.lines[PPL_IO_FORMAT_LINE_NEXT].length = pll; \ + settings.lines[PPL_IO_FORMAT_LINE_LAST].length = pll; \ + settings.lines[PPL_IO_FORMAT_LINE_LONGER_NEXT].length = pll; \ + settings.lines[PPL_IO_FORMAT_LINE_LONGER_LAST].length = pll; \ + settings.lines[PPL_IO_FORMAT_LINE_UNTERMINATED_NEXT].length = pll; \ + settings.lines[PPL_IO_FORMAT_LINE_NEXT].left_n = indent_depth; \ + settings.lines[PPL_IO_FORMAT_LINE_LAST].left_n = indent_depth; \ + settings.lines[PPL_IO_FORMAT_LINE_LONGER_NEXT].left_n = indent_depth; \ + settings.lines[PPL_IO_FORMAT_LINE_LONGER_LAST].left_n = indent_depth; \ + settings.lines[PPL_IO_FORMAT_LINE_UNTERMINATED_NEXT].left_n = indent_depth; \ + target = ppl_io_ostream_buffer_new(); \ + stream = ppl_io_ostream_format_new(target, &settings); \ + ppl_io_write_##Name(stream, p); \ + ppl_io_ostream_delete(stream); \ ppl_io_ostream_buffer_get(target, &buf); \ ppl_io_ostream_delete(target); \ return buf; \ diff --git a/src/c_stream.cc b/src/c_stream.cc index 6b3b20b..11ea69e 100644 --- a/src/c_stream.cc +++ b/src/c_stream.cc @@ -34,18 +34,18 @@ ppl_io_format_settings ppl_io_format_default_settings = { 0, // bottom { // length, left, right, alignment, fill_char - { 80, 0, "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, // FIRST - { 80, 0, "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, // FIRSTLAST - { 80, 0, "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, // NEXT - { 80, 0, "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, // LAST - { 80, 0, "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, // CHOPPED_FIRST - { 80, 0, "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, // CHOPPED_NEXT - { 80, 0, "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, // LONGER_FIRST - { 80, 0, "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, // LONGER_FIRSTLAST - { 80, 0, "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, // LONGER_NEXT - { 80, 0, "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, // LONGER_LAST - { 80, 0, 0, PPL_IO_FORMAT_ALIGN_LEFT, 0 }, // UNTERMINATED_FIRST - { 80, 0, 0, PPL_IO_FORMAT_ALIGN_LEFT, 0 } // UNTERMINATED_NEXT + { 80, 0, 0, 0, 0, 0, "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, // FIRST + { 80, 0, 0, 0, 0, 0, "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, // FIRSTLAST + { 80, 0, 0, 0, 0, 0, "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, // NEXT + { 80, 0, 0, 0, 0, 0, "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, // LAST + { 80, 0, 0, 0, 0, 0, "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, // CHOPPED_FIRST + { 80, 0, 0, 0, 0, 0, "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, // CHOPPED_NEXT + { 80, 0, 0, 0, 0, 0, "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, // LONGER_FIRST + { 80, 0, 0, 0, 0, 0, "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, // LONGER_FIRSTLAST + { 80, 0, 0, 0, 0, 0, "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, // LONGER_NEXT + { 80, 0, 0, 0, 0, 0, "\n", PPL_IO_FORMAT_ALIGN_LEFT, 0 }, // LONGER_LAST + { 80, 0, 0, 0, 0, 0, 0, PPL_IO_FORMAT_ALIGN_LEFT, 0 }, // UNTERMINATED_FIRST + { 80, 0, 0, 0, 0, 0, 0, PPL_IO_FORMAT_ALIGN_LEFT, 0 } // UNTERMINATED_NEXT } };
diff --git a/src/c_stream.h b/src/c_stream.h index e8857ee..3c8454d 100644 --- a/src/c_stream.h +++ b/src/c_stream.h @@ -68,6 +68,14 @@ struct ppl_io_format_settings { unsigned int length; /* Left margin string */ const char *left; + /* Left margin repeated char count */ + unsigned int left_n; + /* Left margin repeated char */ + char left_c; + /* Right margin repeated char count */ + unsigned int right_n; + /* Right margin repeated char */ + unsigned int right_c; /* Right margin string */ const char *right; /* 0 left, 8 center, 16 right */ diff --git a/src/c_streambuf_format.cc b/src/c_streambuf_format.cc index 368a494..5d94ac6 100644 --- a/src/c_streambuf_format.cc +++ b/src/c_streambuf_format.cc @@ -145,6 +145,9 @@ bool c_streambuf_format::output_line(const char *s, unsigned int n, ppl_io_forma } if (settings->lines[type].left) stream << settings->lines[type].left; + unsigned int i; + for (i = 0; i < settings->lines[type].left_n; ++i) + stream.put(settings->lines[type].left_c); if (settings->lines[type].fill_char && n < settings->lines[type].length) { unsigned int left = 0; unsigned int right = 0; @@ -160,6 +163,8 @@ bool c_streambuf_format::output_line(const char *s, unsigned int n, ppl_io_forma } else stream.write(s, n); + for (i = 0; i < settings->lines[type].right_n; ++i) + stream.put(settings->lines[type].right_c); if (settings->lines[type].right) stream << settings->lines[type].right; switch (type) {