(defun replace-pairs-region (Begin End Pairs) ;; modified xah
  (let ((case-fold-search nil) ($tempMapPoints nil) ($changeLog nil))
    (dotimes (i (length Pairs)) (push (char-to-string (+ #xe000 i)) $tempMapPoints))
    (save-excursion
      (save-restriction
        (narrow-to-region Begin End)
        (dotimes (i (length Pairs))
          (goto-char (point-min))
          (while (search-forward (elt (elt Pairs i) 0) nil t)
            (replace-match (elt $tempMapPoints i) t t)))
        (dotimes (i (length Pairs))
          (goto-char (point-min))
          (while (search-forward (elt $tempMapPoints i) nil t)
            (push (vector (point)
                          (elt (elt Pairs i) 0)
                          (elt (elt Pairs i) 1)) $changeLog)
            (replace-match (elt (elt Pairs i) 1) t t)))))
    $changeLog))

(defun al-bhed (*begin *end)
  (interactive
   (if (use-region-p)
       (list (region-beginning) (region-end))
     (list (line-beginning-position) (line-end-position))))
  (replace-pairs-region
   *begin
   *end
   '(
     ["a" "y"]
     ["b" "p"]
     ["c" "l"]
     ["d" "t"]
     ["e" "a"]
     ["f" "v"]
     ["g" "k"]
     ["h" "r"]
     ["i" "e"]
     ["j" "z"]
     ["k" "g"]
     ["l" "m"]
     ["m" "s"]
     ["n" "h"]
     ["o" "u"]
     ["p" "b"]
     ["q" "x"]
     ["r" "n"]
     ["s" "c"]
     ["t" "d"]
     ["u" "i"]
     ["v" "j"]
     ["w" "f"]
     ["x" "q"]
     ["y" "o"]
     ["z" "w"]
     ["A" "Y"]
     ["B" "P"]
     ["C" "L"]
     ["D" "T"]
     ["E" "A"]
     ["F" "V"]
     ["G" "K"]
     ["H" "R"]
     ["I" "E"]
     ["J" "Z"]
     ["K" "G"]
     ["L" "M"]
     ["M" "S"]
     ["N" "H"]
     ["O" "U"]
     ["P" "B"]
     ["Q" "X"]
     ["R" "N"]
     ["S" "C"]
     ["T" "D"]
     ["U" "I"]
     ["V" "J"]
     ["W" "F"]
     ["X" "Q"]
     ["Y" "O"]
     ["Z" "W"])))

(defun de-al-bhed (*begin *end)
  (interactive
   (if (use-region-p)
       (list (region-beginning) (region-end))
     (list (line-beginning-position) (line-end-position))))
  (replace-pairs-region
   *begin
   *end
   '(
     ["y" "a"]
     ["p" "b"]
     ["l" "c"]
     ["t" "d"]
     ["a" "e"]
     ["v" "f"]
     ["k" "g"]
     ["r" "h"]
     ["e" "i"]
     ["z" "j"]
     ["g" "k"]
     ["m" "l"]
     ["s" "m"]
     ["h" "n"]
     ["u" "o"]
     ["b" "p"]
     ["x" "q"]
     ["n" "r"]
     ["c" "s"]
     ["d" "t"]
     ["i" "u"]
     ["j" "v"]
     ["f" "w"]
     ["q" "x"]
     ["o" "y"]
     ["w" "z"]
     ["Y" "A"]
     ["P" "B"]
     ["L" "C"]
     ["T" "D"]
     ["A" "E"]
     ["V" "F"]
     ["K" "G"]
     ["R" "H"]
     ["E" "I"]
     ["Z" "J"]
     ["G" "K"]
     ["M" "L"]
     ["S" "M"]
     ["H" "N"]
     ["U" "O"]
     ["B" "P"]
     ["X" "Q"]
     ["N" "R"]
     ["C" "S"]
     ["D" "T"]
     ["I" "U"]
     ["J" "V"]
     ["F" "W"]
     ["Q" "X"]
     ["O" "Y"]
     ["W" "Z"])))

(defun redact (*begin *end)
  (interactive
   (if (use-region-p)
       (list (region-beginning) (region-end))
     (list (line-beginning-position) (line-end-position))))
  (replace-pairs-region
   *begin
   *end
   '(
     ["a" "x"]
     ["b" "x"]
     ["c" "x"]
     ["d" "x"]
     ["e" "x"]
     ["f" "x"]
     ["g" "x"]
     ["h" "x"]
     ["i" "x"]
     ["j" "x"]
     ["k" "x"]
     ["l" "x"]
     ["m" "x"]
     ["n" "x"]
     ["o" "x"]
     ["p" "x"]
     ["q" "x"]
     ["r" "x"]
     ["s" "x"]
     ["t" "x"]
     ["u" "x"]
     ["v" "x"]
     ["w" "x"]
     ["x" "x"]
     ["y" "x"]
     ["z" "x"]
     ["A" "x"]
     ["B" "x"]
     ["C" "x"]
     ["D" "x"]
     ["E" "x"]
     ["F" "x"]
     ["G" "x"]
     ["H" "x"]
     ["I" "x"]
     ["J" "x"]
     ["K" "x"]
     ["L" "x"]
     ["M" "x"]
     ["N" "x"]
     ["O" "x"]
     ["P" "x"]
     ["Q" "x"]
     ["R" "x"]
     ["S" "x"]
     ["T" "x"]
     ["U" "x"]
     ["V" "x"]
     ["W" "x"]
     ["X" "x"]
     ["Y" "x"]
     ["Z" "x"])))