Commit 728e4008 authored by Michal Nazarewicz's avatar Michal Nazarewicz
Browse files

Refactor common code in {upcase,downcase,capitalize}-word functions

* src/casefiddle.c (operate_on_word): Removed in favour of…
(casify_word) …new function which does what operate_on_word did plus
what all of the common code from *-word functions.
(upcase-word, downcase-word, capitalize-word): Move code common between
those functions (pretty much the whole body of those functions) into
casify_word and use that instead of now deleted operate_on_word.
parent 74c5b735
......@@ -376,22 +376,27 @@ character positions to operate on. */)
}
static Lisp_Object
operate_on_word (Lisp_Object arg, ptrdiff_t *newpoint)
casify_word (enum case_action flag, Lisp_Object arg)
{
Lisp_Object val;
ptrdiff_t farend;
Lisp_Object beg, end;
ptrdiff_t newpoint;
EMACS_INT iarg;
CHECK_NUMBER (arg);
iarg = XINT (arg);
farend = scan_words (PT, iarg);
if (!farend)
farend = iarg > 0 ? ZV : BEGV;
*newpoint = PT > farend ? PT : farend;
XSETFASTINT (val, farend);
newpoint = scan_words (PT, iarg);
if (!newpoint)
newpoint = iarg > 0 ? ZV : BEGV;
XSETFASTINT (beg, PT);
XSETFASTINT (end, newpoint);
if (PT > newpoint)
newpoint = PT;
casify_region (flag, beg, end);
return val;
SET_PT (newpoint);
}
DEFUN ("upcase-word", Fupcase_word, Supcase_word, 1, 1, "p",
......@@ -404,12 +409,7 @@ With negative argument, convert previous words but do not move.
See also `capitalize-word'. */)
(Lisp_Object arg)
{
Lisp_Object beg, end;
ptrdiff_t newpoint;
XSETFASTINT (beg, PT);
end = operate_on_word (arg, &newpoint);
casify_region (CASE_UP, beg, end);
SET_PT (newpoint);
casify_word (CASE_UP, arg);
return Qnil;
}
......@@ -422,12 +422,7 @@ is ignored when moving forward.
With negative argument, convert previous words but do not move. */)
(Lisp_Object arg)
{
Lisp_Object beg, end;
ptrdiff_t newpoint;
XSETFASTINT (beg, PT);
end = operate_on_word (arg, &newpoint);
casify_region (CASE_DOWN, beg, end);
SET_PT (newpoint);
casify_word (CASE_DOWN, arg);
return Qnil;
}
......@@ -443,12 +438,7 @@ is ignored when moving forward.
With negative argument, capitalize previous words but do not move. */)
(Lisp_Object arg)
{
Lisp_Object beg, end;
ptrdiff_t newpoint;
XSETFASTINT (beg, PT);
end = operate_on_word (arg, &newpoint);
casify_region (CASE_CAPITALIZE, beg, end);
SET_PT (newpoint);
casify_word (CASE_CAPITALIZE, arg);
return Qnil;
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment