Function: japanese-TeX-set-process-coding-system

japanese-TeX-set-process-coding-system is a byte-compiled function defined in tex-jp.el.

Signature

(japanese-TeX-set-process-coding-system PROCESS)

Documentation

Set proper coding system for japanese TeX PROCESS.

Source Code

;; Defined in ~/.emacs.d/elpa/auctex-14.1.2/tex-jp.el
;;; Coding system

(defun japanese-TeX-set-process-coding-system (process)
  "Set proper coding system for japanese TeX PROCESS."
  (with-current-buffer TeX-command-buffer
    (when japanese-TeX-mode
      ;; TeX-engine が ptex, jtex, uptex のいずれかである場合のみ考え
      ;; る。luatex-ja などの場合はそもそもただの LaTeX-mode でよく、
      ;; わざわざ japanese-LaTeX-mode にする必要がない。

      ;; FIXME: 以下の処理は tex engine を対象とする場合しか考えていない。
      ;; bibtex や mendex 等の補助ツールの場合は正しくない処理かもしれない。
      (let*
          ;; -kanji オプションありの時の文字コード。
          ((kanji (and japanese-TeX-use-kanji-opt-flag
                       (let ((str (japanese-TeX-get-encoding-string)))
                         (cond
                          ((equal str "euc") 'euc-jp)
                          ((equal str "jis") 'iso-2022-jp)
                          ((equal str "sjis") 'shift_jis)
                          ((equal str "utf8") 'utf-8)))))

           ;; process からの出力の文字コード。
           (dec (cond
                 ;; windows と mac の場合。
                 ((memq system-type '(windows-nt darwin))
                  (cond
                   ;; ptex なら mac は utf-8。
                   ;; windows で -kanji オプションありの時はその文字コード、
                   ;; なしの時は sjis。
                   ;; texlive 2018 からは sjis ではなく utf-8 になったので
                   ;; そちらに合わせる。
                   ((eq TeX-engine 'ptex)
                    (cond ((eq system-type 'darwin)
                           'utf-8)
                          ((and japanese-TeX-use-kanji-opt-flag kanji)
                           kanji)
                          (t 'utf-8)))
                   ;; jtex なら sjis に固定する。
                   ((eq TeX-engine 'jtex)
                    'shift_jis)
                   ;; uptex なら utf-8 に固定する。
                   (t
                    'utf-8)))
                 ;; unix の場合。
                 (t
                  ;; jtex なら euc に固定する。
                  (cond
                   ((eq TeX-engine 'jtex)
                    'euc-jp)
                   ;; それ以外は、uptex でも locale に従う。
                   ;; ただし、locale が日本語をサポートしない場合は
                   ;; euc に固定する。
                   (t
                    (let ((lcs locale-coding-system))
                      (if (and lcs (japanese-TeX-coding-ejsu lcs))
                          lcs 'euc-jp)))))))

           ;; process に与える入力の文字コード。
           (enc (cond
                 ;; ptex で -kanji オプションありなら、その文字コード。
                 ;; なしなら utf-8 か sjis。
                 ;; texlive 2018 で w32 でも utf-8 がデフォルトになっ
                 ;; たようなので、それに合わせる。
                 ((eq TeX-engine 'ptex)
                  (if (and japanese-TeX-use-kanji-opt-flag kanji)
                      kanji
                    'utf-8))
                 ;; jtex なら euc か sjis に固定する。
                 ((eq TeX-engine 'jtex)
                  (if (memq system-type '(windows-nt darwin))
                      'shift_jis 'euc-jp))
                 ;; uptex なら utf-8 に固定する。
                 (t
                  'utf-8))))

        ;; 改行コードを指定。
        (setq dec (coding-system-change-eol-conversion
                   dec
                   (if (eq system-type 'windows-nt) 'dos 'unix))
              enc (coding-system-change-eol-conversion
                   enc
                   (if (eq system-type 'windows-nt) 'dos 'unix)))

        ;; Customize 値があればそれを優先。
        (set-process-coding-system
         process
         (or TeX-japanese-process-output-coding-system dec)
         (or TeX-japanese-process-input-coding-system enc))))))