From 66d5c75e2dd9f4204b51a5d3299456ecc4ea6842 Mon Sep 17 00:00:00 2001 From: Juri Linkov Date: Mon, 6 Jun 2016 00:23:21 +0300 Subject: [PATCH] =?utf8?q?*=20src/casefiddle.c=20(Fupcase=5Fregion):=20Add?= =?utf8?q?=20arg=20=E2=80=98region-noncontiguous-p=E2=80=99.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit If non-nil, operate on multiple chunks. (Bug#23655) * src/search.c (Freplace_match): Use Qnil for new arg of Fupcase_region. --- src/casefiddle.c | 22 +++++++++++++++++++--- src/search.c | 3 ++- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/casefiddle.c b/src/casefiddle.c index 34a65edd008..6114a6f7857 100644 --- a/src/casefiddle.c +++ b/src/casefiddle.c @@ -294,15 +294,31 @@ casify_region (enum case_action flag, Lisp_Object b, Lisp_Object e) } } -DEFUN ("upcase-region", Fupcase_region, Supcase_region, 2, 2, "r", +DEFUN ("upcase-region", Fupcase_region, Supcase_region, 2, 3, + "(list (region-beginning) (region-end) (region-noncontiguous-p))", doc: /* Convert the region to upper case. In programs, wants two arguments. These arguments specify the starting and ending character numbers of the region to operate on. When used as a command, the text between point and the mark is operated on. See also `capitalize-region'. */) - (Lisp_Object beg, Lisp_Object end) + (Lisp_Object beg, Lisp_Object end, Lisp_Object region_noncontiguous_p) { - casify_region (CASE_UP, beg, end); + Lisp_Object bounds = Qnil; + + if (!NILP (region_noncontiguous_p)) + { + bounds = call1 (Fsymbol_value (intern ("region-extract-function")), + intern ("bounds")); + + while (CONSP (bounds)) + { + casify_region (CASE_UP, XCAR (XCAR (bounds)), XCDR (XCAR (bounds))); + bounds = XCDR (bounds); + } + } + else + casify_region (CASE_UP, beg, end); + return Qnil; } diff --git a/src/search.c b/src/search.c index f39df6784c3..7cb18a2059a 100644 --- a/src/search.c +++ b/src/search.c @@ -2691,7 +2691,8 @@ since only regular expressions have distinguished subexpressions. */) if (case_action == all_caps) Fupcase_region (make_number (search_regs.start[sub]), - make_number (newpoint)); + make_number (newpoint), + Qnil); else if (case_action == cap_initial) Fupcase_initials_region (make_number (search_regs.start[sub]), make_number (newpoint)); -- 2.39.2