ქართული გადატანების მოდული Microsoft Word-ისთვის

Microsoft Word-ს ნაგულისხმევად არ გააჩნია ქართული ენის ავტომატური გადატანების მხარდაჭერა. შედეგად, ტექსტის ორმხრივი გასწორებისას (Justify) სიტყვებს შორის ხშირად ჩნდება დიდი, უშნო გამოტოვებები.

ამ ხელსაწყოს (VBA მაკრო) ალგორითმი დაფუძნებულია ქართული სალიტერატურო ენის წესებზე: იგი ითვალისწინებს მარცვლების სტრუქტურას, იცავს კიდურა ხმოვნებს და არ აცალკევებს ჰარმონიულ თანხმოვანთკომპლექსებს (მაგ: ფხ, თხ, ცხ და ა.შ.).

როგორ მუშაობს? პროგრამა იყენებს ფარულ გადატანის ნიშნებს (Optional Hyphen). ეს ნიშნავს, რომ ტირე გამოჩნდება მხოლოდ მაშინ, როცა სიტყვა ხაზის ბოლოში მოხვდება. თუ ტექსტს დაავიწროებთ ან გააფართოებთ, ტირეები ავტომატურად გაქრება ან გადანაწილდება, რაც სრულყოფილ ვიზუალურ იერსახეს უნარჩუნებს დოკუმენტს.

📥 ნაბიჯი 1: კოდის კოპირება

დააკოპირეთ ქვემოთ მოცემული სრული კოდი (VBA Module):

VBA კოდი Word-ისთვის
Sub CreateGeorgianHyphenationForSelection()
    Dim regEx As Object
    Dim rng As Range
    Dim wordRng As Range
    Dim vowels As String
    Dim w As String
    Dim idx As Integer
    
    ' Check if text is selected
    If Selection.Type = wdSelectionIP Or Selection.Text = "" Then
        MsgBox "Please select the text block first!", vbExclamation, "No Text Selected"
        Exit Sub
    End If
    
    Set rng = Selection.Range
    
    ' RegExp initialization for single word validation
    Set regEx = CreateObject("VBScript.RegExp")
    regEx.Pattern = "^[" & ChrW(4304) & "-" & ChrW(4336) & "]+$"
    
    vowels = ChrW(4304) & ChrW(4308) & ChrW(4312) & ChrW(4317) & ChrW(4323)
    
    Application.ScreenUpdating = False
    
    ' Loop through each word in selection securely (handles tables and complex layouts)
    For Each wordRng In rng.Words
        w = Trim(wordRng.Text)
        
        ' Clean punctuation from the end of the word if any
        Do While Len(w) > 0
            If InStr(".,;:!?()""'[]{}«»-–—" & vbCr & vbLf & Chr(7), Right(w, 1)) > 0 Then
                w = Left(w, Len(w) - 1)
            Else
                Exit Do
            End If
        Loop
        
        ' Validate if it's a Georgian word and longer than 4 characters
        If regEx.Test(w) And Len(w) > 4 Then
            Dim vowelCount As Integer
            vowelCount = GetVowelCount(w, vowels)
            
            If vowelCount > 1 Then
                ' Process word from end to beginning
                For idx = Len(w) - 1 To 2 Step -1
                    If IsValidGeorgianHyphenationPoint(w, idx, vowels) Then
                        Dim hyphenRng As Range
                        ' Define local hyphen position inside the word range
                        Set hyphenRng = wordRng.Duplicate
                        hyphenRng.End = hyphenRng.Start + idx - 1
                        hyphenRng.Collapse wdCollapseEnd
                        
                        ' Insert native Soft Hyphen
                        hyphenRng.InsertBefore Chr(31)
                    End If
                Next idx
            End If
        End If
    Next wordRng
    
    Application.ScreenUpdating = True
    MsgBox "Georgian hyphenation applied to selection successfully!", vbInformation, "Success"
End Sub

Function GetVowelCount(w As String, vowels As String) As Integer
    Dim count As Integer, j As Integer
    count = 0
    For j = 1 To Len(w)
        If InStr(vowels, Mid(w, j, 1)) > 0 Then count = count + 1
    Next j
    GetVowelCount = count
End Function

Function IsValidGeorgianHyphenationPoint(w As String, idx As Integer, vowels As String) As Boolean
    Dim l As Integer
    l = Len(w)
    
    If idx = 2 And InStr(vowels, Left(w, 1)) > 0 Then
        IsValidGeorgianHyphenationPoint = False
        Exit Function
    End If
    If idx = l And InStr(vowels, Right(w, 1)) > 0 Then
        IsValidGeorgianHyphenationPoint = False
        Exit Function
    End If
    
    Dim vLeftIdx As Integer, vRightIdx As Integer
    Dim k As Integer
    
    vLeftIdx = 0
    For k = idx - 1 To 1 Step -1
        If InStr(vowels, Mid(w, k, 1)) > 0 Then
            vLeftIdx = k
            Exit For
        End If
    Next k
    
    vRightIdx = 0
    For k = idx To l
        If InStr(vowels, Mid(w, k, 1)) > 0 Then
            vRightIdx = k
            Exit For
        End If
    Next k
    
    If vLeftIdx = 0 Or vRightIdx = 0 Then
        IsValidGeorgianHyphenationPoint = False
        Exit Function
    End If
    
    Dim consBlock As String
    Dim consBlockLen As Integer
    consBlock = Mid(w, vLeftIdx + 1, vRightIdx - vLeftIdx - 1)
    consBlockLen = Len(consBlock)
    
    Dim leftConsCount As Integer
    leftConsCount = idx - vLeftIdx - 1
    
    Dim harmonic As String
    harmonic = "ფხ თხ ცხ ჩხ ბღ დღ ზღ ჯღ პყ ტყ წყ ჭყ"
    
    If consBlockLen = 0 Then
        If idx = vRightIdx Then
            IsValidGeorgianHyphenationPoint = True
            Exit Function
        End If
    End If
    
    If consBlockLen = 1 Then
        If leftConsCount = 0 Then
            IsValidGeorgianHyphenationPoint = True
            Exit Function
        End If
    End If
    
    If consBlockLen >= 2 Then
        Dim hCheck As String
        If consBlockLen >= 3 Then
            hCheck = Mid(consBlock, 2, 2)
            If InStr(harmonic, hCheck) > 0 Then
                If leftConsCount = 1 Then
                    IsValidGeorgianHyphenationPoint = True
                    Exit Function
                End If
                IsValidGeorgianHyphenationPoint = False
                Exit Function
            End If
        End If
        
        hCheck = Left(consBlock, 2)
        If InStr(harmonic, hCheck) > 0 Then
            If leftConsCount = 0 Then
                IsValidGeorgianHyphenationPoint = True
                Exit Function
            End If
            IsValidGeorgianHyphenationPoint = False
            Exit Function
        End If
        
        If leftConsCount = 1 Then
            IsValidGeorgianHyphenationPoint = True
            Exit Function
        End If
    End If
    
    IsValidGeorgianHyphenationPoint = False
End Function

Sub RemoveGeorgianHyphenationFromSelection()
    Dim rng As Range
    If Selection.Type = wdSelectionIP Or Selection.Text = "" Then
        MsgBox "Please select the text block first!", vbExclamation, "No Text Selected"
        Exit Sub
    End If
    Set rng = Selection.Range
    Application.ScreenUpdating = False
    With rng.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Text = "^-"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindStop
        .Format = False
        .Execute Replace:=wdReplaceAll
    End With
    Application.ScreenUpdating = True
    MsgBox "Hyphenation removed from selection successfully!", vbInformation, "Cleaned"
End Sub

🛠️ ნაბიჯი 2: ინსტალაციის ინსტრუქცია (როგორ ჩავსვათ Word-ში)

ფუნქციის ერთხელ ჩაშენების შემდეგ, იგი ხელმისაწვდომი იქნება ყველა ახალ თუ ძველ დოკუმენტში.

1. კოდის ინტეგრაცია

  1. გახსენით Microsoft Word.
  2. დააჭირეთ კლავიატურაზე Alt + F11 (თუ ლეპტოპით მუშაობთ და არ გაიხსნა, სცადეთ Fn + Alt + F11). გაიხსნება პროგრამირების (VBA) ფანჯარა.
  3. მარცხენა პანელში იპოვეთ გლობალური პროექტი სახელით Normal.
  4. დააწკაპუნეთ Normal-ზე მაუსის მარჯვენა ღილაკით, აირჩიეთ Insert > Module.
  5. გამოსულ ცარიელ თეთრ ფანჯარაში ჩასვით (Paste) ზემოთ კოპირებული კოდი და დახურეთ VBA-ის ფანჯარა.

2. მართვის ღილაკების გამოტანა Word-ის პანელზე

იმისთვის, რომ კოდი ერთი დაწკაპუნებით ამუშავდეს, გამოვიტანოთ ღილაკები მთავარ მენიუში:

  1. Word-ის ზედა პანელზე (Ribbon) ნებისმიერ ცარიელ ადგილას დააწკაპუნეთ მარჯვენა ღილაკით და აირჩიეთ Customize the Ribbon....
  2. მარჯვენა სვეტში მონიშნეთ რომელიმე ჩანართი (მაგალითად, Home ან Review), დააჭირეთ ქვემოთ ღილაკს New Group (შეგიძლიათ დაარქვათ „ქართული გადატანები“).
  3. მარცხენა ჩამოსაშლელი მენიუდან (“Choose commands from”) აირჩიეთ Macros.
  4. სიებში დაინახავთ ორ ახალ ბრძანებას:
    • Normal.Module1.CreateGeorgianHyphenationForSelection
    • Normal.Module1.RemoveGeorgianHyphenationFromSelection
  5. მონიშნეთ თითოეული და შუაში არსებული Add >> ღილაკით გადაიტანეთ თქვენს შექმნილ ახალ ჯგუფში.
  6. ღილაკებზე ხელახლა დაწკაპუნებით და Rename-ზე დაჭერით შეგიძლიათ შეუცვალოთ სახელი (მაგ: „გადატანის ჩართვა“ და „გადატანის გათიშვა“) და აირჩიოთ სასურველი ვიზუალური ხატულა (Icon).
  7. დააჭირეთ OK.

🚀 ნაბიჯი 3: როგორ გამოვიყენოთ?

  1. დოკუმენტში მონიშნეთ ტექსტის ის აბზაცი ან მთლიანი ბლოკი, სადაც გსურთ გადატანების ამუშავება.
  2. დააჭირეთ თქვენ მიერ შექმნილ ღილაკს „გადატანის ჩართვა“.
  3. მიეცით ტექსტს ორმხრივი გასწორება (Justify ან Ctrl + J) — სიტყვები ხაზის ბოლოში იდეალურად, წესების დაცვით გაიყოფა.
  4. თუ გადატანების გაუქმება და ტექსტის საწყის მდგომარეობაში დაბრუნება მოგინდებათ, კვლავ მონიშნეთ იგივე მონაკვეთი და დააჭირეთ ღილაკს „გადატანის გათიშვა“.