Function: encode-hz-region
encode-hz-region is an autoloaded, interactive and byte-compiled
function defined in china-util.el.gz.
Signature
(encode-hz-region BEG END)
Documentation
Encode the text in the current region to HZ.
Return the length of resulting text.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/language/china-util.el.gz
;;;###autoload
(defun encode-hz-region (beg end)
"Encode the text in the current region to HZ.
Return the length of resulting text."
(interactive "r")
(unless hz-category-table
(setq hz-category-table (make-category-table))
(with-category-table hz-category-table
(define-category ?c "hz encodable")
(map-charset-chars #'modify-category-entry 'ascii ?c)
(map-charset-chars #'modify-category-entry 'chinese-gb2312 ?c)))
(save-excursion
(save-restriction
(narrow-to-region beg end)
(with-category-table hz-category-table
;; ~ -> ~~
(goto-char (point-min))
(while (search-forward "~" nil t) (insert ?~))
;; ESC -> ESC ESC
(goto-char (point-min))
(while (search-forward "\e" nil t) (insert ?\e))
;; Non-ASCII-GB2312 -> \uXXXX
(goto-char (point-min))
(while (re-search-forward "\\Cc" nil t)
(let ((ch (preceding-char)))
(delete-char -1)
(insert (format (if (< ch #x10000) "\\u%04X" "\\U%08X") ch))))
;; Prefer chinese-gb2312 for Chinese characters.
(put-text-property (point-min) (point-max) 'charset 'chinese-gb2312)
(encode-coding-region (point-min) (point-max) 'iso-2022-7bit)
;; ESC $ B ... ESC ( B -> ~{ ... ~}
;; ESC ESC -> ESC
(goto-char (point-min))
(while (search-forward "\e" nil t)
(if (= (following-char) ?\e)
;; ESC ESC -> ESC
(delete-char 1)
(forward-char -1)
(if (looking-at "\e\\$A")
(progn
(delete-region (match-beginning 0) (match-end 0))
(insert hz-gb-designation)
(search-forward iso2022-ascii-designation nil 'move)
(delete-region (match-beginning 0) (match-end 0))
(insert hz-ascii-designation))))))
(- (point-max) (point-min)))))