View Single Post
  #15   Report Post  
Posted to microsoft.public.word.docmanagement
Peter T. Daniels Peter T. Daniels is offline
external usenet poster
 
Posts: 3,215
Default "Transpose" macro Hebrew / right-to-left text

Oh, I wasn't talking about typos in Hebrew -- though in Modern Hebrew
the problem you raise will rarely come up, as the vowel points are
rarely used (except in didactic texts and poetry).

So, thanks again to Graham for a transposing tool!

On Oct 11, 12:14Â*pm, "Tony Jollans" My forename at my surname dot
com wrote:
I think this is fraught with difficulty - almost by definition you are
dealing with complex scripts, and you really need to examine the selection
for combining characters. I don't know Hebrew, but just as an example,
consider the character בְ - this is a letter bet (ב) with a combining point
sheva (Ö°) below it - it is two characters (overlaid) in Word and swapping
them round - indeed doing anything with them other than treating them as a
single unit - is totally destructive.

I hope this shows up properly in your newsreader - if not, the characters
are U+5D1 (bet) and U+5B0 (sheva).

--
Enjoy,
Tony

Â*www.WordArticles.com

"Graham Mayor" wrote in message

...



OK, but a little more error handling wouldn't hurt (and it would be
possible to either put the cursor between the characters or select them,
but I haven't time to add that now. Maybe tomorrow).


Sub Transpose()
Dim oRng As Range
Dim sText As String
On Error GoTo ErrorHandler
If ActiveDocument.Characters.Count 2 Then
Â* Â*Set oRng = Selection.Range
Â* Â*If Len(oRng) 0 Then
Â* Â* Â* Â*MsgBox "You must place the cursor between the 2 characters to be
transposed!", _
Â* Â* Â* Â* Â* Â*vbCritical, "Transpose Characters"
Â* Â* Â* Â*Exit Sub
Â* Â*End If
Â* Â*With oRng
Â* Â* Â* Â*.Start = .Start - 1
Â* Â* Â* Â*.End = .End + 1
Â* Â* Â* Â*.Select
Â* Â* Â* Â*sText = .Text
Â* Â*End With
Â* Â*With Selection
Â* Â* Â* Â*If .Range.Characters(1).Case = 1 _
Â* Â* Â* Â* Â* Â*And .Range.Characters(2).Case = 0 Then
Â* Â* Â* Â* Â* Â*.TypeText UCase(Mid(sText, 2, 1)) & _
Â* Â* Â* Â* Â* Â*LCase(Mid(sText, 1, 1))
Â* Â* Â* Â*Else
Â* Â* Â* Â* Â* Â*.TypeText Mid(sText, 2, 1) & _
Â* Â* Â* Â* Â* Â*Mid(sText, 1, 1)
Â* Â* Â* Â*End If
Â* Â* Â* Â*.MoveLeft wdCharacter
Â* Â*End With
Else
Â* Â*MsgBox "Empty document", _
Â* Â*vbCritical, "Transpose Characters"
End If
End
ErrorHandler:
If Err.Number = 4248 Then
Â* Â*MsgBox "No document open", _
Â* Â*vbCritical, "Transpose Characters"
End If
End Sub


--

Graham Mayor - Â*Word MVP


My web sitewww.gmayor.com
Word MVP web sitehttp://word.mvps.org


Peter T. Daniels wrote:
I should Bookmark that in my browser ...


One other thing (I hoped to add this before you saw the thread
again!): can you make it work on two characters that the cursor is
between, rather than having to select the two characters?


On Oct 11, 9:48 am, "Graham Mayor" wrote:
http://www.gmayor.com/installing_macro.htm


--

Graham Mayor - Word MVP


My web sitewww.gmayor.com
Word MVP web sitehttp://word.mvps.org


Peter T. Daniels wrote:
Wow -- I don't think anyone's bothered to fix the _case_ where it's
involved in a transposition before! And Ctrl-T is the Hanging Indent
shortcut -- which I always do with either the Ruler or the Paragraph
Format tool, since anything automatic would have to be adjusted
anyway,so it will have its own perfectly intuitive command! Thanks!
Now to relocate the install-macro instructions ...


On Oct 11, 2:02 am, "Graham Mayor"
wrote:.


As for transposing two selected characters, that macro would work,
but I suspect the following refinement might suit the task better


Sub Transpose()
Dim sText As String
sText = Selection.Range.Text
If Len(sText) 2 Then
MsgBox "You must select 2 characters!", _
vbCritical, "Transpose Characters"
Exit Sub
End If
If Selection.Range.Characters(1).Case = 1 _
And Selection.Range.Characters(2).Case = 0 Then
Selection.TypeText UCase(Mid(sText, 2, 1)) & _
LCase(Mid(sText, 1, 1))
Else
Selection.TypeText Mid(sText, 2, 1) & _
Mid(sText, 1, 1)
End If
End Sub


--

Graham Mayor - Word MVP


My web sitewww.gmayor.com
Word MVP web sitehttp://word.mvps.org
--