* src/casefiddle.c (Fupcase_region): Add arg ‘region-noncontiguous-p’.

If non-nil, operate on multiple chunks.  (Bug#23655)

* src/search.c (Freplace_match): Use Qnil for new arg of Fupcase_region.
This commit is contained in:
Juri Linkov 2016-06-06 00:23:21 +03:00
parent efde23dcdd
commit 66d5c75e2d
2 changed files with 21 additions and 4 deletions

View file

@ -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;
}

View file

@ -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));