๐Ÿš€ go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fj.editor.emacs
Article #410

Re: a simple tategaki typesetter

#410
From: Takashi Ikeda
Date: Thu, 18 Mar 1999 00:00
393 lines
17018 bytes
ๆฑ ็”ฐใงใ™ใ€‚

satoru@isoternet.org (Satoru Takabayashi) writes:

> hiroki-t@is.aist-nara.ac.jp wrote:
> 
> >  ใ€€ ใ€€ใ‹ ใƒœ ใ™ ใ„ ้–“ ๆฉŸ ๅŒ– ไฝฟ ๅŒ– ใช ๆฅ  ใ€€ ใ€€ใ‹ ใ† ไฝœ ใซ  ใ€€ ใ€€ๅคง ใ“
> > ๅพก  ใ€€๏ผŸ ๏ฝœ  ใ‚œใพ ใฎ ใ‚’ ใ™ ใ† ใซ ใ„ ใช ใ“  ใ€€ใฃ ใช ใฃ ใฏ ๅฝ“  ใ€€ๅญฆ ใ‚“
> > ๆ„  ใ€€ ใ€€ใƒ‰ ไบบ ใ™ ใ“ ใจ ใ‚‹ ไบบ ้–ข ๆฐฃ ใ„ ใ‚Œ  ใ€€ใŸ ใ‚‚ ใฆ ใช ๅˆ†  ใ€€ใง ใซ
> > ่ฆ‹  ใ€€ ใ€€ใŒ ้–“  ใ‚œใจ ใ‚Š ใช ใŒ ใ™ ใŒ ใจ ใ‚’  ใ€€ใฎ ใฎ ใฟ ใ‚‰  ใ€€ ใ€€ใ™ ใก
> > ๅพก  ใ€€ ใ€€ใฉ ๅทฅ ใ‚ญ ใ‚’ ใพ ใ‚Š ไบบ ใ‚‹ ใ— ็œŸ ไฝœ  ใ€€ใง ใง ใพ ใช Eใ€€ ใ€€ ใ‚œใฏ
> > ๆ„Ÿ  ใ€€ ใ€€ใ† ๅญฆ ๏ฝœ ่€ƒ ใ ใ— ้–“ ใ“ ใฆ ใซ ใ‚Š  ใ€€ๅฐ‘ ใ™ ใ— ใ mใ€€ ใ€€ ใ€€ ใ‚œ
> > ๆƒณ  ใ€€ ใ€€ใ— ใซ ใƒœ ใˆ ็’ฐ ใฆ ใง ใจ ใ ๆ—ฅ ๅง‹  ใ€€ใช ใŒ ใŸ ใ† aใ€€ ใ€€ ใ€€็މ
> > ใช  ใ€€ ใ€€ใฆ ๅ‰‡ ๏ฝœ ใฆ ๅขƒ ๆฌฒ ใ‚ ใฏ ใพ ๆœฌ ใ‚  ใ€€ใ‹  ๏ฝ€ ใ‚œใช cใ€€ ใ€€ ใ€€่ถŠ
> > ใฉ  ใ€€ ใ€€ๆจ™ ใฃ ใƒ‰ ใ„ ใŒ ใ— ใ‚‹ ๅ˜ ใ— ่ชž ใฆ  ใ€€ใ‚‰ ใก ็ตถ ใฎ sใ€€ ใ€€ ใ€€๏ผ 
> >  ๏ฝ€ ใ€€ ใ€€ๆบ– ใŸ ใ‚„ ใช ไฝฟ ใ„ ใจ ใซ ใŸ ๅ‡ฆ ใ‹  ใ€€ใš ใ‚‡ ๅฏพ ใง  ใ€€ ใ€€ ใ€€ๅฅˆ
> > ใŠ  ใ€€ ใ€€ใซ  ๏ฝ€ใƒž ใ„ ใ„ ใ‚‚ ใ„ ๆŠ€  ใ‚œ็† ใ‚‰  ใ€€้ฉš ใฃ ่ชฐ  ๏ฝ€ใฏ  ใ€€ ใ€€่‰ฏ
> > ๆฐ—  ใ€€ ใ€€ใช ใ‚‚ ใ‚ฆ ใ‹ ใซ ใฎ ใ† ่ก“ ็ธฆ ใ‚’  ๏ฝ€ ใ€€ใ„ ใจ ใ‹ ้Š ็ธฆ  ใ€€ ใ€€ๅ…ˆ
> > ่ปฝ  ใ€€ ใ€€ใ‚‰ ใฃ ใ‚น ใ‚‰ ใ ใง ใ“ ็š„ ๆ›ธ ใ— ใ‚„  ใ€€ใฆ ๆŽข ใŒ ใณ ๆ›ธ  ใ€€ ใ€€็ซฏ
> > ใซ  ใ€€ ใ€€ใช ใจ ใช ใง ใ„ ใ™ ใจ ใช ใ ใฆ ใฏ  ใ€€ใ„ ใ— ๆ—ข ใง ใ  ใ€€ ใ€€็ง‘
> > ใฉ  ใ€€ ใ€€ใ„ ไฝฟ ใฉ ใฏ ใฎ  ใ‚œใ‚’ ใ“ ใซ ใ„ ใ‚Š  ใ€€ใพ ใŸ ใซ ใ“ ใŒ  ใ€€ ใ€€ๅญฆ
> > ใ†  ใ€€ ใ€€ใฎ ใ„ ใฏ ใช ใฏ ็พ ่€ƒ ใจ ้™ ใ‚‹ ็ธฆ  ใ€€ใ™ ้™ ไฝœ ใ‚“ ๅ‡บ  ใ€€ ใ€€ๆŠ€
> > ใž  ใ€€ ใ€€ใง ๆ˜“ ใ ใ„  ๏ฝ€ๅœจ ใˆ ใง ใ‚‰ ใจ ๆ›ธ  ใ€€ ใ‚œใ‚Š ใฃ ใช ๆฅ  ใ€€ ใ€€่ก“
> >  ใ‚œ ใ€€ ใ€€ใ— ใ„ ใฎ ใ‹ ไฝฟ ใฎ ใฆ ใฏ ใš ใฏ ใ  ใ€€ ใ€€ใง ใฆ ใ‚‚ ใ‚‹  ใ€€ ใ€€ๅคง
> >  ใ€€ ใ€€ ใ€€ใ‚‡ ใ‚ญ ไพ‹ ใจ ใ† ่จˆ ่ฆ ใช  ๏ฝ€่จ€ ใŒ  ใ€€ ใ€€ใฏ ใ„ ใฎ ใ‚ˆ  ใ€€ ใ€€ๅญฆ
> >  ใ€€ ใ€€ ใ€€ใ† ๏ฝœ ใง ๆ€ ไบบ ็ฎ— ๆ ผ ใ ๆ–‡ ใˆ ๅ‡บ  ใ€€ ใ€€ใช ใ ใ‚’ ใ†  ใ€€ ใ€€้™ข
> 
> tategaki.el ใฎใ‚ณใƒกใƒณใƒˆใซใ‚ˆใ‚‹ใจ
> 
> | * emacs-version ใŒ 20.x ไปฅไธŠใงใชใ„ใจๅ‹•ใใพใ›ใ‚“ใ€‚

19็ณปใงใ‚‚ๅ‹•ใใ‚‚ใฎใ‚’ไฝœใฃใฆใฟใพใ—ใŸใ€‚ใฒใ‚‡ใฃใจใ™ใ‚‹ใจ18ใ‚‚โ€ฆ
ใƒ‘ใƒƒใƒใ™ใ‚‹ใปใฉใฎใ‚‚ใฎใงใ‚‚ใชใ„ใฎใง็›ดๆŽฅ้€ใ‚Šใพใ™ใ€‚
ใŸใ ใ€ใ“ใฎelใฏใƒใ‚ฐใฃใฆใ„ใฆใ€regionๅ†…ใ ใ‘ใ‚’ๅฏพ่ฑกใซใ™ใ‚‹่จณใงใฏใชใใ€region
ไปฅ้™ใซใ‚‚ๅฝฑ้Ÿฟใ‚’ไธŽใˆใฆใ—ใพใ„ใพใ™ใ€‚ๅฝนๆ‰€ใชใฉใซๆๅ‡บใ™ใ‚‹้š›ใซใฏๆณจๆ„ใŒๅฟ…่ฆใงใ—ใ‚‡
ใ†ใญใ€‚

ใœใ‚“ใœใ‚“ใ‚ณใƒกใƒณใƒˆใ‚’่งฆใฃใฆใพใ›ใ‚“ใŒใ€ใ‚ˆใ—ใชใซโ€ฆ

# ใ‚ใจใ€ใƒใ‚ฐใฃใฆใŸใ‚‰็›ดใ™ใชใ‚Šใผใใซๅ ฑๅ‘Šใ™ใ‚‹ใชใ‚Šrmใ™ใ‚‹ใชใ‚Š่ชญใฟ้ฃ›ใฐใ™ใชใ‚Š
้ฉๅฝ“ใซๅ‡ฆ็†ใ—ใฆไธ‹ใ•ใ„ใ€‚


;;; tategaki.el --- a simple ็ธฆ
;;                           ๆ›ธ
;;                           ใ typesetter

;;; Copyright (C) 1999 Tamakoshi Hiroki <hiroki-t@is.aist-nara.ac.jp>

;;; Last modified on Mon Mar 15 03:34:17 1999

;; Author: Tamakoshi Hiroki <hiroki-t@is.aist-nara.ac.jp>
;; Maintainer: Tamakoshi Hiroki <hiroki-t@is.aist-nara.ac.jp>
;; Created: 10 Mar 1999
;; Version: 1.0
;; Keywords: wp

;;; Commentary:
;; 1. Set region, and invoke the program by typing M-x tategaki-region.
;; 2. Then it asks the number of letters in one line, please answer.
;; 3. The result is what you will see.
;;
;; 1. ็ฏ„ๅ›ฒใ‚’ๆŒ‡ๅฎšใ—ใฆใ€M-x tategaki-region ใ—ใฆไธ‹ใ•ใ„ใ€‚
;; 2. ไธ€่กŒใฎๅญ—ๆ•ฐใ‚’่žใ„ใฆใใ‚‹ใฎใงๅ…ฅๅŠ›ใ—ใพใ™ใ€‚
;; 3. ็ธฆๆ›ธใใซๆ•ดๅฝขใ•ใ‚Œใพใ™ใ€‚

;;; Features:
;; * ใƒผ ใ‚’ ๏ฝœ ใซใ€โ†‘ ใ‚’ โ†’ ใซใ™ใ‚‹ใชใฉ 90 ๅบฆๅ›ž่ปขใ—ใŸใจใใซๆญฃใ—ใใชใ‚‹ใ‚ˆใ†ใซ
;;   ๅค‰ๆ›ใ—ใพใ™ใ€‚ๅฅ่ชญ็‚นใชใฉใ‚‚ๅŒๆง˜ใงใ™ใ€‚
;; * ็ฆๅ‰‡ๅ‡ฆ็†ใ‚‚ใ—ใพใ™ใ€‚
;; * ็ฉบ่กŒ(ๆญฃ็ขบใซใฏไบŒใค้€ฃ็ถšใ—ใŸ \n)ใŒใ‚ใ‚‹ๅ ดๅˆใ€ใใ‚Œใ‚’ๆฎต่ฝใฎๅŒบๅˆ‡ใ‚Šใจใ—ใฆ
;;   ๅ‰ใฎๆ–‡ใฎๆœ€ๅพŒใงๅผทๅˆถ็š„ใซๆ”น่กŒใ—ใพใ™ใ€‚

;;; Tips:
;; * HTML ใฎไธญใงใฏ <pre> </pre> ใงๅ›ฒใ‚ใฐๅคงไฝ“ใ†ใพใ่ฆ‹ใ‚‰ใ‚Œใ‚‹ใ‚ˆใ†ใงใ™ใ€‚
;; * TeX ใงใฏ็ด ็›ดใซ pTeX ใ‚’ไฝฟใ„ใพใ—ใ‚‡ใ†ใ€‚
;; * ็ธฆๆ›ธใใฎใƒกใƒผใƒซใ‚‚ไน™ใชใ‚‚ใฎใงใ™ใ€‚

;;; Bugs:
;; * ็ต„็‰ˆใฎๆ–นๆณ•ใฏใ„ใ„ๅŠ ๆธ›ใงใ™ใ€‚
;; * ๅคšใใฎๅค‰ๆ›ไธ่ƒฝใช่จ˜ๅทใŒใ‚ใ‚Šใพใ™ใ€‚ไพ‹ใˆใฐ ( ) ใซๅฏพๅฟœใ™ใ‚‹ใ€
;;   ็ธฆๆ›ธใใซไฝฟใˆใ‚‹่จ˜ๅทใŒๅญ˜ๅœจใ—ใพใ›ใ‚“(ใ‚ใ‚Œใฐๆ•™ใˆใฆไธ‹ใ•ใ„)ใ€‚
;; * 12ๆœˆ ใฏ 12
;;           ๆœˆ ใจใ™ในใใงใ—ใ‚‡ใ†ใŒใ€ใ‚„ใฃใฆใ„ใพใ›ใ‚“ใ€‚
;; * emacs-version ใŒ 20.x ไปฅไธŠใงใชใ„ใจๅ‹•ใใพใ›ใ‚“ใ€‚

;;; A simple sample                          ใ› ใฎ ใ™ ใช ๏ผŸ ใ ๆ—ฅ  ใ€€ใ“
;;                                           ใง ๅผท ใ‚ˆ ใ‚“ ็ธฆ ใ  ๆœฌ  ใ€€ใ‚“
;; ใ“ใ‚“ใซใกใฏใ€‚                              ใ™ ใ„  ใ‚œใฆ ๆ›ธ ใจ ่ชž  ใ€€ใซ
;;                                            ใ‚œๆ–‡ ใ‚  ๏ฝ€ใ ๆ€ ใฏ  ใ€€ใก
;; ๆ—ฅๆœฌ่ชžใฏใ‚„ใฏใ‚Š็ธฆๆ›ธใใ ใจ                   ใ€€ๅŒ– ใ‚‹ ็—… ใŒ ใ„ ใ‚„  ใ€€ใฏ
;; ๆ€ใ„ใพใ›ใ‚“ใ‹๏ผŸ                  โ†’         ใ€€ใฎ ใ„ ใ‚“ ๅ‡บ ใพ ใฏ  ใ€€ ใ‚œ
;; ็ธฆๆ›ธใใŒๅ‡บๆฅใชใ„ใชใ‚“ใฆใ€                   ใ€€ใŠ ใฏ ใง ๆฅ ใ› ใ‚Š  ใ€€ ใ€€
;; ็—…ใ‚“ใงใ„ใพใ™ใ‚ˆใ€‚ใ‚ใ‚‹ใ„ใฏ                   ใ€€ไป• ่ฅฟ ใ„ ใช ใ‚“ ็ธฆ  ใ€€ ใ€€
;; ่ฅฟๆฌงใฎๅผทใ„ๆ–‡ๅŒ–ใฎใŠไป•็€ใ›ใงใ™ใ€‚             ใ€€็€ ๆฌง ใพ ใ„ ใ‹ ๆ›ธ  ใ€€ ใ€€

;;; Feature Work:
;; 12ๆœˆใ€(1) ใชใฉใซๅฏพๅฟœใ™ใ‚‹ใ€‚
;; *, โ—‹, ใƒป ใชใฉใงใ‚คใƒณใƒ‡ใƒณใƒˆใ‚’ๆƒใˆใ‚‹ใ€‚
;; ็ธฆๆ›ธใใซใ—ใŸใ‚‚ใฎใ‚’ๆจชๆ›ธใใซๆˆปใ™ๆฉŸๆง‹ใ‚’่€ƒใˆใ‚‹ใ€‚

;;; History:
;; 1999ๅนด03ๆœˆ15ๆ—ฅ: ใชใ‚“ใจใชใๅ…ฌ้–‹ใ—ใฆใฟใ‚‹ใ€‚
;;                 http://mimi.aist-nara.ac.jp/~hiroki-t/Distribution/Tategaki/

;;; Code:

(defvar tategaki-tmp-buffer " *Tategaki tmp*")

(defun tategaki-emu-substring (string start &optional end)
  (let ((buffer (get-buffer-create " *tategaki-emu-substring*")))
    (save-excursion
      (set-buffer buffer)
      (erase-buffer)
      (insert string)
      (goto-char (point-min))
      (forward-char start)
      (format "%s"
	      (prog1
		  (if (not end)
		      (buffer-substring (point) (point-max))
		    (let ((point (point)))
		      (goto-char (point-min))
		      (forward-char end)
		      (buffer-substring point (point)))
		    )
		(kill-buffer buffer))))))

(defun tategaki-emu-length (string)
  (and (listp string) (setq string (nth 1 string)))
  (let ((buffer (get-buffer-create " *tategaki-emu-length*")))
    (save-excursion
      (set-buffer buffer)
      (erase-buffer)
      (insert string)
      (let ((n 0))
	(goto-char (point-min))
	(while (not (eobp))
	  (forward-char)
	  (setq n (1+ n)))
	(kill-buffer buffer)
	n
	))))

(defun tategaki-get-string (number start end)
  (let ((string (buffer-substring start end)))
    (kill-buffer (get-buffer-create tategaki-tmp-buffer))
    (get-buffer-create tategaki-tmp-buffer)
    (save-excursion
      (set-buffer tategaki-tmp-buffer)
      (insert string)
      (goto-char (point-min))
      (let* ((str (let ((tmp '())
			(start-point (point-min)))
		    (while (search-forward "\n\n" nil t 1)
		      (setq tmp (cons (tategaki-emu-buffer-substring start-point
							(- (point) 2))
				      tmp))
		      (save-excursion (insert (make-string number ? )))
		      (setq start-point (point)))
		    (setq tmp (cons (buffer-substring (point) (point-max))
				    tmp))
		    tmp))
	     (purged (let ((tmp '()))
		       (while str
			 (erase-buffer)
			 (insert (car str))
			 (goto-char (point-min))
			 (replace-string "\n" "")
			 (setq tmp (cons (buffer-substring (point-min)
							   (point-max))
					 tmp))
			 (setq str (cdr str)))
		       tmp)))
	(kill-buffer tategaki-tmp-buffer)
	purged))))

(defvar tategaki-tobe-converted-letters
  '(("ใ€‚" " ใ‚œ" t) ("ใ€" " ๏ฝ€" t) ("ใƒผ" "๏ฝœ") ("๏ฝœ" "โ€•")
    ("โ†’" "โ†“") ("โ†" "โ†‘") ("โ†‘" "โ†’") ("โ†“" "โ†")
    ("ใ€Œ" " โ”" t) ("ใ€" (if (bolp)
			   (insert "โ””")
			 (backward-delete-char 1)
			 (insert "โ”” ")) )
    ("๏ผœ" "โˆง") ("๏ผž" "โˆจ") (":" "โ€ฅ") ("๏ผš" "โ€ฅ") ("โ€ฅ" "๏ผš")
    )
  )

(defun tategaki-convert-letter (letter)
  (let ((hit (assoc letter tategaki-tobe-converted-letters)))
    (if hit
	(progn
	  (if (stringp (nth 1 hit))
	      (insert (nth 1 hit))
	    (eval (nth 1 hit)))
	  (if (= 3 (tategaki-emu-length hit))
	      (cons t (nth 2 hit))
	    (cons t nil)))
      nil)))

(defun tategaki-insert-car-of-divided-sentence (divided)
  (let ((tmp divided)
	(half-slipp nil))
    (while tmp
      (let ((substr (car tmp)))
	(if (string= "" substr)
	    (insert " ใ€€")
	  (if half-slipp
	      ()
	    (insert " "))
	  (setq half-slipp nil)
;;	  (let ((result (tategaki-convert-letter (aref substr 0))))
	  (let ((result (tategaki-convert-letter (tategaki-emu-substring substr 0 1))))
	    (if result
		(setq half-slipp (cdr result))
	      (insert (tategaki-emu-substring substr 0 1))
	      (if (= 1 (string-width (tategaki-emu-substring substr 0 1)))
		  (progn (insert "ใ€€") (setq half-slipp t)))
	      ))
	  ))
      (setq tmp (cdr tmp)))))

(defun tategaki-all-null-string (list)
  (or (null list)
      (and (string= "" (car list))
	   (tategaki-all-null-string (cdr list)))))

(defun tategaki-divide-string-to-pieces (number string)
  (let ((divided (if (string= "" string)
		     (list (make-string (1+ number) ? ))
		   '())))
    (while (not (string= "" string))
      (let* ((limit (min number (tategaki-emu-length string)))
	     (substr (tategaki-emu-substring string 0 limit))
	     (kinsokup
	      (if (< limit (tategaki-emu-length string))
		  (let ((nextletter (tategaki-emu-substring string limit (1+ limit))))
		    (or (string="ใ€‚" nextletter)
			(string="ใ€" nextletter)
			(string="ใ€" nextletter)
			))
		nil)))
	(setq divided (cons (if kinsokup
				(concat substr (tategaki-emu-substring string limit
							  (1+ limit)))
			      (concat substr
				      (make-string (- (+ number 1)
						      (tategaki-emu-length substr))
						   ? )))
			    divided)
	      string (tategaki-emu-substring string (if kinsokup (1+ limit) limit)))))
    divided))

(defun tategaki-region-aux (number string newlinep)
  (let ((divided (tategaki-divide-string-to-pieces number string)))
    (while (not (tategaki-all-null-string divided))
      (tategaki-insert-car-of-divided-sentence divided)
      (let ((tmp '()))
	(while divided
	  (setq tmp (cons (if (string= "" (car divided))
			      ""
			    (tategaki-emu-substring (car divided) 1))
			  tmp))
	  (setq divided (cdr divided)))
	(setq divided (reverse tmp)))
      ; the next sentence doesn't work. very curious.
;       (setq divided (mapcar (function (lambda (s)
; 					(if (string= "" s)
; 					    ()
; 					  (setq s (substring s 1)))))
; 			    divided))
      (if newlinep (insert "\n")
;      (if (not newlinep) (insert "\n")
	(let ((before (format "%s" (buffer-substring 
		       (if (bobp)
			   ""
			 (save-excursion (backward-char) (point)) (point))))))
;; ใ‚“โ€ฆ
;;	  (if (or (string= "ใ‚œ" before)
;;		  (string= "๏ฝ€" before)
;;		  (string= "โ”" before)
;;		  (string= "ใ€€" before)
;;		  )
;;	      (delete-char 1))
	  (forward-line)))
      )))

(defun tategaki-finalize (start)
  (let* ((zure-regexp "ใ‚œ\\|๏ฝ€\\|โ”"))
    (save-excursion
      (goto-char start)
      (while (search-forward-regexp zure-regexp nil t)
	(if (eolp) () (delete-char 1))))
  ))

(defun tategaki-region (number start end)
  (interactive "nLine width: \nr")
  (let ((strings (tategaki-get-string number start end))
	(newlinep t))
    (delete-region start end)
    (while strings
      (tategaki-region-aux number (car strings) newlinep)
      (setq newlinep nil)
      (goto-char start)
      (setq strings (cdr strings)))
    (tategaki-finalize start)
    ))

(provide 'tategaki)

;;; tategaki.el ends here


> ใจใฎใ“ใจใงใ€ๆ‰‹ๅ…ƒใฎ็’ฐๅขƒใงใฏๅ‹•ใ‹ใ›ใพใ›ใ‚“ใ€‚ใใ‚„ใ—ใ„ใฎใง perl ใง
> ไผผใŸใ‚ˆใ†ใชใƒ•ใ‚ฃใƒซใ‚ฟใ‚’ไฝœใฃใฆใฟใพใ—ใŸใ€‚

ๆ™ฎๅŠใ‚’ใ‹ใญใฆใ€Rubyใงใ‚‚ไฝœใฃใฆใฟใพใ—ใŸใ€‚ใ‚„ใฏใ‚Šใ€EUCใงใ—ใ‹ๅ‹•ใใพใ›ใ‚“ใ€‚ใ
ใ‚Œใจ็ฆๅ‰‡ๅ‡ฆ็†ใ‚‚ใ—ใพใ›ใ‚“ใ€‚ๅŠ่ง’ใ‚ซใƒŠใชใฉใฏใ‚‚ใฃใฆใฎใปใ‹ใงใ—ใ‚‡ใ†โ€ฆ

  % nkf -e foobar.txt | ruby tategaki.rb

ใจใ‹ใงไฝฟใฃใฆไธ‹ใ•ใ„ใ€‚

ใ“ใฃใกใ‚‚็„กไฟ่จผใงใ™ใ€‚ใฉใ†ใž้ฉๅฝ“ใซใ€‚

#!/usr/local/bin/ruby -Ke

$column   = 20
$tateyoko = {
    "-" => "| ",
    "ใƒผ" => "๏ฝœ",
    "๏ฝœ" => "โ€•",
    "โ†’" => "โ†“",
    "โ†" => "โ†‘",
    "โ†‘" => "โ†’",
    "โ†“" => "โ†",
    "ใ€" => "โ””",
    "๏ผœ" => "โˆง",
    "๏ผž" => "โˆจ",
    ": " => "โ€ฅ",
    "๏ผš" => "โ€ฅ",
    "โ€ฅ" => "๏ผš"
		}
$zure_chars = {
    "ใ€‚" => "ใ‚œ",
    "ใ€" => "๏ฝ€",
    "ใ€Œ" => "โ”"
}

w = readlines.join.gsub!("\n", "")
w.gsub!("^[ \t]+", "")
w.gsub!("\s", "")
chars = w.split("")
lines = []
s = 0
i = 0
while s < chars.length
  if s + $column > chars.length then
    lines[i] = chars[s,chars.length] + (" "*(s + $column - chars.length)).split("")      
  else
    lines[i] = chars[s,$column]
  end
  i += 1
  s += $column
end
count = i
lines.reverse!
for i in 0..($column-1)
  for j in 0..(count-1)
    c = lines[j][0]
    if c =~ /^[\x20-\x7e]/ then
      if $tateyoko[c] then 
	print $tateyoko[c], " "
      else
	print c, "  "
      end
    elsif c =~ /^[\xa1-\xfe]/ then
      if $tateyoko[c] then
	print $tateyoko[c], " "
      elsif $zure_chars[c] then
	print " ", $zure_chars[c]
      else
	print c, " "
      end
    end
    lines[j] = lines[j][1,(lines[j].length-1)]
  end
  print "\n"
end


takashi ikeda cercine@kcn.ne.jp
                                chemicals
Technical Details
Message-ID: <m2sob3du3l.fsf@kcn.ne.jp>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <lzovhg3ewcq.fsf@kmserver.aist-nara.ac.jp> <7cie2i$jpd$1@vega2.aichi-u.ac.jp>

Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS
X-Google-Thread: 10eba4,31ca5aaa33f2e671
X-Google-Attributes: gid10eba4,public
X-Google-Thread: 10fe86,2e0e669784f264a5,start
X-Google-Attributes: gid10fe86,public
X-Google-Thread: 1107f7,31ca5aaa33f2e671
X-Google-Attributes: gid1107f7,public
X-Google-Thread: f9898,3ba4fd057be66f09
X-Google-Attributes: gidf9898,public
X-Google-Thread: ff358,31ca5aaa33f2e671
X-Google-Attributes: gidff358,public
From: Takashi Ikeda <cercine@kcn.ne.jp>
Subject: Re: a simple tategaki typesetter
Date: 1999/03/18
Message-ID: <m2sob3du3l.fsf@kcn.ne.jp>
X-Deja-AN: 456060316
References: <lzovhg3ewcq.fsf@kmserver.aist-nara.ac.jp> <7cie2i$jpd$1@vega2.aichi-u.ac.jp>
Content-Type: text/plain; charset=ISO-2022-JP
Organization: KCN-Net
Mime-Version: 1.0 (generated by tm-edit 7.106)
Newsgroups: fj.editor.emacs,fj.editor.mule,fj.editor.xemacs,fj.comp.lang.perl,fj.comp.lang.ruby