From be8efac78d067c138ad8dda03df4336e73f94887 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Sat, 8 Jan 2022 11:51:07 +0100 Subject: New upstream version 1.0 --- lib/unilbrk/u32-width-linebreaks.c | 80 +++++++++++++++++++++++++------------- 1 file changed, 53 insertions(+), 27 deletions(-) (limited to 'lib/unilbrk/u32-width-linebreaks.c') diff --git a/lib/unilbrk/u32-width-linebreaks.c b/lib/unilbrk/u32-width-linebreaks.c index 418d734..6101b0f 100644 --- a/lib/unilbrk/u32-width-linebreaks.c +++ b/lib/unilbrk/u32-width-linebreaks.c @@ -1,48 +1,49 @@ /* Line breaking of UTF-32 strings. - Copyright (C) 2001-2003, 2006-2018 Free Software Foundation, Inc. + Copyright (C) 2001-2003, 2006-2022 Free Software Foundation, Inc. Written by Bruno Haible , 2001. - This program is free software: you can redistribute it and/or - modify it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or (at your - option) any later version. - - or both in parallel, as here. - This program is distributed in the hope that it will be useful, + This file is free software. + It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". + You can redistribute it and/or modify it under either + - the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3, or (at your + option) any later version, or + - the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version, or + - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". + + This file 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 - Lesser General Public License for more details. + Lesser General Public License and the GNU General Public License + for more details. - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ + You should have received a copy of the GNU Lesser General Public + License and of the GNU General Public License along with this + program. If not, see . */ #include /* Specification. */ #include "unilbrk.h" +#include "unilbrk/internal.h" +#include "unilbrk/lbrktables.h" #include "uniwidth.h" -int -u32_width_linebreaks (const uint32_t *s, size_t n, - int width, int start_column, int at_end_columns, - const char *o, const char *encoding, - char *p) +static int +u32_width_linebreaks_internal (const uint32_t *s, size_t n, + int width, int start_column, int at_end_columns, + const char *o, const char *encoding, int cr, + char *p) { const uint32_t *s_end; char *last_p; int last_column; int piece_width; - u32_possible_linebreaks (s, n, encoding, p); + u32_possible_linebreaks_loop (s, n, encoding, cr, p); s_end = s + n; last_p = NULL; @@ -56,7 +57,8 @@ u32_width_linebreaks (const uint32_t *s, size_t n, if (o != NULL && *o != UC_BREAK_UNDEFINED) *p = *o; - if (*p == UC_BREAK_POSSIBLE || *p == UC_BREAK_MANDATORY) + if (*p == UC_BREAK_POSSIBLE + || *p == UC_BREAK_MANDATORY || *p == UC_BREAK_CR_BEFORE_LF) { /* An atomic piece of text ends here. */ if (last_p != NULL && last_column + piece_width > width) @@ -67,7 +69,7 @@ u32_width_linebreaks (const uint32_t *s, size_t n, } } - if (*p == UC_BREAK_MANDATORY) + if (*p == UC_BREAK_MANDATORY || *p == UC_BREAK_CR_BEFORE_LF) { /* uc is a line break character. */ /* Start a new piece at column 0. */ @@ -113,3 +115,27 @@ u32_width_linebreaks (const uint32_t *s, size_t n, return last_column + piece_width; } + +#undef u32_width_linebreaks + +int +u32_width_linebreaks (const uint32_t *s, size_t n, + int width, int start_column, int at_end_columns, + const char *o, const char *encoding, + char *p) +{ + return u32_width_linebreaks_internal (s, n, + width, start_column, at_end_columns, + o, encoding, -1, p); +} + +int +u32_width_linebreaks_v2 (const uint32_t *s, size_t n, + int width, int start_column, int at_end_columns, + const char *o, const char *encoding, + char *p) +{ + return u32_width_linebreaks_internal (s, n, + width, start_column, at_end_columns, + o, encoding, LBP_CR, p); +} -- cgit v1.2.3