Using 21.2 beta 13 "Demeter" to display the file `ethio-util.el', I
see the following glitches on display of the gemination modifier (like
an umlaut). There are three instances of the gemination mark in
the last 14 lines of the attached function from the original file.
From a position where these gemination marks are displaying correctly,
moving the first gemination character to the top line by repeatedly
clicking the down arrow of the slidebar results in the bleeding of the
gemination mark as in the first png.
Moving the text down the display, one line at a time, will leave
a tail on a number of successive lines, and then clean the tail up,
until you reach a point some way down the display (about ten or twelve
lines down the display, when the tails stabilise, and subsequent
downward movement does not alter the tails, leaving them as in the
second png.
--
__ /__ Peter B. West p.west(a)uq.net.au
/
http://www.uq.net.au/~zzpwest
/ "Lord, to whom shall we go?"
(defun ethio-sera-to-fidel-buffer (&optional secondary force)
"Convert the current buffer from SERA to FIDEL.
The variable `ethio-primary-language' specifies the primary
language and `ethio-secondary-language' specifies the secondary.
If the 1st optional parameter SECONDARY is non-nil, assume the buffer
begins with the secondary language; otherwise with the primary
language.
If the 2nd optional parametr FORCE is non-nil, perform conversion even if the
buffer is read-only.
See also the descriptions of the variables
`ethio-use-colon-for-colon' and
`ethio-use-three-dot-question'."
(interactive "P")
(if (and buffer-read-only
(not force)
(not (y-or-n-p "Buffer is read-only. Force to convert? ")))
(error ""))
(let ((ethio-primary-language ethio-primary-language)
(ethio-secondary-language ethio-secondary-language)
(ethio-use-colon-for-colon ethio-use-colon-for-colon)
(ethio-use-three-dot-question ethio-use-three-dot-question)
;; The above four variables may be changed temporary
;; by tilde escapes during conversion. So we bind them to other
;; variables but of the same names.
(buffer-read-only nil)
(case-fold-search nil)
current-language
next-language)
(setq current-language
(if secondary
ethio-secondary-language
ethio-primary-language))
(goto-char (point-min))
(while (not (eobp))
(setq next-language
(cond
((eq current-language 'english)
(ethio-sera-to-fidel-english))
((eq current-language 'amharic)
(ethio-sera-to-fidel-ethio 'amharic))
((eq current-language 'tigrigna)
(ethio-sera-to-fidel-ethio 'tigrigna))
(t ; we don't know what to do
(ethio-sera-to-fidel-english))))
(setq current-language
(cond
;; when language tag is explicitly specified
((not (eq next-language 'toggle))
next-language)
;; found a toggle in a primary language section
((eq current-language ethio-primary-language)
ethio-secondary-language)
;; found a toggle in a secondary, third, fourth, ...
;; language section
(t
ethio-primary-language))))
;; If ethio-implicit-period-conversion is non-nil, the
;; Ethiopic dot "$(3%u(B" at the end of an Ethiopic sentence is
;; replaced with the Ethiopic full stop "$(3$i(B".
(if ethio-implicit-period-conversion
(progn
(goto-char (point-min))
(while (re-search-forward
"\\([$(3!!(B-$(3$a%)(B-$(3%e%n(B-$(3%r%s(B]\\)$(3%u(B\\([ \t]\\)"
nil t)
(replace-match "\\1$(3$i(B\\2"))
(goto-char (point-min))
(while (re-search-forward
"\\([$(3!!(B-$(3$a%)(B-$(3%e%n(B-$(3%r%s(B]\\)$(3%u(B$" nil t)
(replace-match "\\1$(3$i(B"))))
;; gemination
(goto-char (point-min))
(while (re-search-forward "\\ce$(3%s(B" nil 0)
(compose-region
(save-excursion (backward-char 2) (point))
(point)))
))