Ref:
  • Message-id: <14486.64637.495091.178067@sunma2.mat.ucm.es>
  •  
    Dear Mr. Brauer et al:
    I am a priest in our religion, Zoroastrianism (Zarathushtri). Our religion is one of the oldest and was the state religion og Iran (Persia) from Cyrus The Great in 4th century BC to almost 630 AD. Cyrus, as you may know, released the Jews from Nebuchadnezzar in Babylon.
    Our scripture language is called Avesta and it is written, like Hebrew, from right to left. I am interested in R2L and BIDI technologies but am quite a novice in both of them.
     
    One of my friends directed me to your 2 year old message shown below:
     
    =====================
    Hi

    quite a while ago, I asked about the possibility of having TRUE R2L
    (or BIDI) support for Hebrew or any other R2L language with in
    Mule. However it turned out that, while there will be or is a
    rewritten display engine for GNU emacs (20.5), to rewrite the display
    engine for xemacs is far more complicated and will not be done any
    time soon.

    Now I have a relatively simple question, which has nothing to do with
    Mule, the iso-8859-8 is sufficient for my purpose: The basic primitive
    idea is to write text with iso-885908 characters but L2R.
    (The idea to have the cursor at the right and putting it to the left
    visual mode) causes more problem than benefits)

    However for TeX purpose the text has to be converted.
    In the following sense:
    Invert the order of words in a given
    line and the order of the letter in a given word.: Example

    Hello word.
    gives
    .drow olleH



    For example the following will do it:

    (defun ivrit-revers-region (arg)
    &quot;Does the same as ivrit-revers-buffer but only in marked regions&quot;
      (interactive &quot;p&quot;)
      (if (or (and
       (boundp 'zmacs-region-active-p) zmacs-region-active-p)
      (and (boundp 'transient-mark-mode) transient-mark-mode mark-active))
          (save-restriction
            (save-excursion
              (narrow-to-region (point) (mark)) ;new finish here1
      (goto-char (point-min))
      (let ((begl 0)(endl 0)(not-end t))
        (while not-end
          (setq begl (point))
          (end-of-line)
          (setq endl (point))
          (if (/= begl endl)
      (let ((str (buffer-substring begl endl)))
        (kill-region begl endl)
        (insert (revers-string str))))
          (setq not-end (eq (forward-line 1) 0))))))))

    (defun revers-string (str)
    (interactive)
      (if (&lt; (length str) 2)
        str
        (concat (revers-string (substring str 1)) (substring str 0 1))))

    Or another possibility (given to me by Ehud Karni) is

    (defun invert-line (&amp;optional arg)
    &quot;Inverse line (right-left) if arg given, inverse arg chars&quot;
      (interactive &quot;p&quot;)
           (let* ((pos (point))
                  (eos (progn (if (&lt; arg 2)
                                  (end-of-line) (goto-col (1+ arg))) (point)))
                  (str (buffer-substring (progn (beginning-of-line) (point)) eos)))
               (insert-string (invert-string str))
               (delete-char (length str))
               (goto-char pos)))


    (defun invert-all-lines (&amp;optional arg)
    &quot;Invert (right-left) all the lines in the buffer,
    if arg given, inverse arg characters in each lines&quot;
      (interactive &quot;p&quot;)
           (goto-char (point-min))
           (let* ((eol 0)
                  (bol 0)
                  (str &quot;&quot;))
               (while (not (eobp))
                   (setq bol (point))
                   (end-of-line)
                   (if arg
                       (goto-col arg)
                       (end-of-line))
                   (setq eol (point))
                   (setq str (buffer-substring bol eol))
                   (delete-region bol eol)
                   (insert-string (invert-string str))
                   (forward-line 1))))


    (defun invert-string (STR)
    &quot;Invert STRING (right-left) of any length&quot;
           (invert-sub-string 0 (length STR))  ;invert the whole string
           STR)


    Anyhow my question is simple but may be the answer is not so simple.
    It is possible to modify these functions such that the only applies for
    strings which have at least 2 characters however all the characters
    have to be in the octal representation &gt; 127. That would mean that
    ASCII text remains unchanged but Hebrew text, &gt; 127 will be changed.
    The function iso-unaccentuate does precisely this, ie changes only
    characters above 127. I tried to modify the reverse functions
    mentioned above accordingly, but without success.


    Does anybody has an idea?

    Thanks in advance

    ===========================================
    The code suggested is exactly what I need to incorporate.
     
    My objective is to do the following:
    1. we have a large number of English transliteration of our scriptures available in Internet but not in our original language Avesta.
    2. I would like to use these transliterations in English from left to right and invert them as you suggest in your message above word by word first within a para and then letter by letter within a word. For instance, per your above message:
     
    Hello Word.
     
    becomes
     
    .droW olleH
     
    3. If I can do this, then I copy the inverted transliteration in a Word document, select all and change the font from say Arial to Avesta and I will have a first cut of the whole page into Avesta which then I will have to edit for the final Avesta document.
     
    Questions to you or anyone who can help us:
    1. How can I use this code? I am familiar with Microsoft Visual Basic in Excel or Access and can use a subroutine in a cell in Excel or a text box in Access to take as argument a page of the transliteration and invert it with your code.
    2. Is this code in your message will work in Visual Basic?
    3. Can you suggest a better way to do so. We have documents and documents to invert.
    4. If not, can you suggest someone else who can help us?
    5. I have Windows XP Professional. Does Microsoft has any support like this in Windows?
     
    First of all, I am not sure if I am sending this to the correct people. If not, please accept my sincere apologies. And if so, could you please forward this message to the right people.
     
    This help will be a big step forward for us in our research.
     
    Thanking you in advance,
    Soli P. Dastur, Sarasota, Florida, USA