Commits

viteno  committed 486946a

2003-09-02 Martin Buchholz <martin@xemacs.org>

* studly.el (studlify-region):
Avoid infinite loop if region ends in middle of word.
Support non-ASCII characters.
Don't mess with the match data.

  • Participants
  • Parent commits e3df511

Comments (0)

Files changed (2)

+2003-09-02  Martin Buchholz  <martin@xemacs.org>
+
+	*  studly.el (studlify-region):
+	Avoid infinite loop if region ends in middle of word.
+	Support non-ASCII characters.
+	Don't mess with the match data.
+
 2003-03-30  Steve Youngs  <youngs@xemacs.org>
 
 	* Makefile (EARLY_GENERATED_LISP): Revert previous change.
   "Studlify-case the region"
   (interactive "*r")
   (save-excursion
-    (goto-char begin)
-    (setq begin (point))
-    (while (and (<= (point) end)
-		(not (looking-at "\\W*\\'")))
-      (forward-word 1)
-      (backward-word 1)
-      (setq begin (max (point) begin))
-      (forward-word 1)
-      (let ((offset 0)
-	    (word-end (min (point) end))
-	    c)
-	(goto-char begin)
-	(while (< (point) word-end)
-	  (setq offset (+ offset (following-char)))
-	  (forward-char 1))
-	(setq offset (+ offset (following-char)))
-	(goto-char begin)
-	(while (< (point) word-end)
-	  (setq c (following-char))
-	  (if (and (= (% (+ c offset) 4) 2)
-		   (let ((ch (following-char)))
-		     (or (and (>= ch ?a) (<= ch ?z))
-			 (and (>= ch ?A) (<= ch ?Z)))))
-	      (progn
-		(delete-char 1)
-		(insert (logxor c ? ))))
-	  (forward-char 1))
-	(setq begin (point))))))
+    (save-match-data
+      (goto-char begin)
+      (while (re-search-forward "\\w+" end t)
+	(let ((rnd (loop for pos from (match-beginning 0) to (match-end 0)
+		     sum (or (char-after pos) 0))))
+	  (loop for pos from (match-beginning 0) to (1- (match-end 0)) do
+	    (let ((c (char-after pos)))
+	      (when (= (% (+ c rnd) 4) 2)
+		(if (eq c (upcase c))
+		    (downcase-region pos (1+ pos))
+		  (upcase-region pos (1+ pos)))
+		(incf pos)))))))))
 
 (defun studlify-word (count)
   "Studlify-case the current word, or COUNT words if given an argument"