Я написал небольшую программу в MS Word VBA, которая предназначена для отображения комбинаций обычных символов с несколькими диакритическими знаками в списке. Программа хранит каждую комбинацию, составляющую один символ, в массиве, содержащем несколько под-массивов. Обычные символы, а также объединяющие диакритические знаки (например, акцентная могила на à) сохраняются с помощью их числового значения, в данном случае «0300». Когда я активирую список через ярлык набора (CTRL + SPACE), метод UserForm_activate()
проходит по массиву, объединяет содержимое каждого массива с помощью метода ChrW("&H" & arrayofArrays(i)(1)) & ...
до последнего символа и добавляет его в список.
Большинство шрифтов имеют проблемы с отображением этих символов, например, TNR:
Calibri фактически отображает их лучше, но не может отображать диакритические знаки "запятая над" и "острый"тональная метка рядом (как и должно быть). Вместо этого они явно мешают друг другу
См. Например, c , который должен выглядеть примерно так: c̓ ́
Calibri имеет эту проблему, даже когдавставка символа в документ, а не только при отображении его в списке. Хотя Times New Roman правильно вставляет каждую комбинацию.
Еще одна вещь, которая может быть связана с этим, заключается в том, что тот же макрос в macO иногда случайным образом отображает отображаемый символ в списке, что приводит к тому, что он даже удаленно не совпадает спредполагаемый символ, , но вы можете узнать больше об этой нерешенной проблеме здесь.
Мой код:
Файл: formBetacode
Option Explicit
Private Sub UserForm_Activate()
Dim i As Integer
For i = 0 To 37
Select Case UBound(betaArrayofArrays(i)) - LBound(betaArrayofArrays(i)) + 1
Case 2
lbResults.AddItem ChrW("&H" & betaArrayofArrays(i)(1)) 'adding the match to results
Case 3
lbResults.AddItem ChrW("&H" & betaArrayofArrays(i)(1)) & ChrW("&H" & betaArrayofArrays(i)(2))
Case 4
lbResults.AddItem ChrW("&H" & betaArrayofArrays(i)(1)) & ChrW("&H" & betaArrayofArrays(i)(2)) & ChrW("&H" & betaArrayofArrays(i)(3))
Case 5
lbResults.AddItem ChrW("&H" & betaArrayofArrays(i)(1)) & ChrW("&H" & betaArrayofArrays(i)(2)) & ChrW("&H" & betaArrayofArrays(i)(3)) & ChrW("&H" & betaArrayofArrays(i)(4))
Case 6
lbResults.AddItem ChrW("&H" & betaArrayofArrays(i)(1)) & ChrW("&H" & betaArrayofArrays(i)(2)) & ChrW("&H" & betaArrayofArrays(i)(3)) & ChrW("&H" & betaArrayofArrays(i)(4)) & ChrW("&H" & betaArrayofArrays(i)(5))
Case Else
MsgBox "Error"
End Select
Next i
End Sub
Файл: AutoExecuteобычный модуль (первая строка в массиве всегда содержит последовательность, с которой должен быть объединен символ (например, a: становится ä, o1? / становится œ̣́ и т. д. четвертым)
Option Explicit
Dim theApp As New InitClassModule
Public betaArrayofArrays(37) As Variant
'------------------------------------Initialization-------------------------
Sub AutoExec()
Set theApp.app = Word.Application
End Sub
Sub AutoOpen()
Set theApp.app = Word.Application
End Sub
'Add keybinding to this document Shorcut: CTRL+Space
Sub AddKeyBinding()
With Application
.CustomizationContext = ThisDocument
.KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyControl, wdKeySpacebar), _
KeyCategory:=wdKeyCategoryCommand, _
Command:="showForm"
End With
End Sub
'sub for launching the form
Sub showForm()
formBetacode.Show
End Sub
'-----------------------------FillingTheBetacodeArrayOfArrays------------------
Sub initBetaArrayofArrays()
'-----------------------LATIN-----------------------
'----A
betaArrayofArrays(0) = Array("a", "0061")
betaArrayofArrays(1) = Array("a:~/", "0061", "0308", "0303", "0301")
betaArrayofArrays(2) = Array("a|-/", "0061", "030A", "0304", "0301")
betaArrayofArrays(3) = Array("a-~/", "0061", "0304", "0303", "0301")
betaArrayofArrays(4) = Array("a:-/", "0061", "0308", "0304", "0301")
betaArrayofArrays(5) = Array("a@", "0061", "032F")
betaArrayofArrays(6) = Array("a3-", "01E3")
'----C
betaArrayofArrays(7) = Array("c)/", "0063", "0313", "0341")
'----E
betaArrayofArrays(8) = Array("e@", "0065", "032F")
betaArrayofArrays(9) = Array("e?/", "0065", "0323", "0301")
betaArrayofArrays(10) = Array("e?-/", "0065", "0323", "0304", "0301")
betaArrayofArrays(11) = Array("e(/", "0065", "031C", "0301")
betaArrayofArrays(12) = Array("e(-", "0065", "031C", "0304")
betaArrayofArrays(13) = Array("e(-/", "0065", "031C", "0304", "0301")
betaArrayofArrays(14) = Array("e1", "01DD")
betaArrayofArrays(15) = Array("e1/", "01DD", "0301")
betaArrayofArrays(16) = Array("e1~", "01DD", "0303")
betaArrayofArrays(17) = Array("e1~/", "01DD", "0303", "0301")
betaArrayofArrays(18) = Array("e1-~", "01DD", "0304", "0303")
betaArrayofArrays(19) = Array("e1-/", "01DD", "0304", "0301")
'----G
betaArrayofArrays(20) = Array("g)/", "0067", "0313", "0341")
'----O
betaArrayofArrays(21) = Array("o1-~/", "0153", "0304", "0303", "0301")
betaArrayofArrays(22) = Array("o1?", "0153", "0323")
betaArrayofArrays(23) = Array("o1(", "0153", "031C")
betaArrayofArrays(24) = Array("o1?/", "0153", "0323", "0301")
betaArrayofArrays(25) = Array("o1?~", "0153", "0323", "0303")
betaArrayofArrays(26) = Array("o1?-", "0153", "0323", "0304")
betaArrayofArrays(27) = Array("o1?-/", "0153", "0323", "0304", "0301")
betaArrayofArrays(28) = Array("o1?-~", "0153", "0323", "0304", "0303")
betaArrayofArrays(29) = Array("o1?~/", "0153", "0323", "0303", "0301")
betaArrayofArrays(30) = Array("o1?-~/", "0153", "0323", "0304", "0303", "0301")
betaArrayofArrays(31) = Array("o1(/", "0153", "031C", "0301")
betaArrayofArrays(32) = Array("o1(~", "0153", "031C", "0303")
betaArrayofArrays(33) = Array("o1(-", "0153", "031C", "0304")
betaArrayofArrays(34) = Array("o1(-~", "0153", "031C", "0304", "0303")
betaArrayofArrays(35) = Array("o1(-/", "0153", "031C", "0304", "0301")
betaArrayofArrays(36) = Array("o1(~/", "0153", "031C", "0303", "0301")
betaArrayofArrays(37) = Array("o1(-~/", "0153", "031C", "0304", "0303", "0301")
End Sub
Файл:InitClassModule
модуль класса явно
Option Explicit
Public WithEvents app As Word.Application
'Initializing the betaCollection when the document gets opened
Private Sub app_DocumentOpen(ByVal Doc As Document)
initBetaArrayofArrays
AddKeyBinding
End Sub
'Initializing the betaCollection when a new document gets created
Private Sub app_NewDocument(ByVal Doc As Document)
initBetaArrayofArrays
AddKeyBinding
End Sub