diff --git a/Redaction/Clean.xba b/Redaction/Clean.xba index 826d34e..cc99aa1 100644 --- a/Redaction/Clean.xba +++ b/Redaction/Clean.xba @@ -1,6 +1,6 @@ -Sub mark93 +Sub mark95 End Sub @@ -50,6 +50,7 @@ Private Sub makerUpMenu advancedCleaningDialog.getControl("convertFontsToCharStyles").Label = getTranslation("advancedMenuconvertFontsToCharStyles") advancedCleaningDialog.getControl("fixBrokenCharBackTransparent").Label = getTranslation("fixBrokenCharBackTransparentMenuItem") advancedCleaningDialog.getControl("removeNotTransparentBackgrounds").Label = getTranslation("removeNotTransparentBackgrounds") + advancedCleaningDialog.getControl("fixDiacriticKerning").Label = getTranslation("fixDiacriticKerning") advancedCleaningDialog.getControl("Cancel").Label = getTranslation("buttonCancel") advancedCleaningDialog.getControl("OK").Label = getTranslation("buttonOK") advancedCleaningDialog.getControl("buttonLoad").Label = getTranslation("buttonLoad") @@ -164,7 +165,9 @@ Private Sub cleanAccordingTo(dialog As Object) If dialog.getControl("removeNotTransparentBackgrounds").state = 1 Then fixColoredBackgroundInDoc() EndIf - + If dialog.getControl("fixDiacriticKerning").state = 1 Then + fixDiacriticKerning() + EndIf statusIndicator.end() saveAndreload() @@ -203,6 +206,8 @@ Private Sub quietCleaning saveAndreload() statusIndicator = ThisComponent.getCurrentController.statusIndicator unicodeSymbolsConversion + statusIndicator.Start(getTranslation("statusFixingDiacriticCharactersKerning"),100) + fixDiacriticKerning statusIndicator.Start(getTranslation("statusCleaningManualFormatting"),100) cleanFormatting statusIndicator.Start(getTranslation("statusReplaceWhiteBackground"),100) @@ -330,7 +335,7 @@ Private Sub unicodeSymbolsConversion 'Cyrillic unicode block range \u0400-\u04FF 'Basic Latin \u0020-\u007E 'Combining diacritical marks 0301 0304 0303 0323 032e 0331 035f - combiningDiacritic_Astra = "\u0301\u0303\u0304\u0323\u032e\u0331\u0341\u035f" + combiningDiacritic_Astra = "\u0301\u0303\u0304\u0308\u0323\u032e\u0331\u0341\u035f" Dim extendedLatinA_Astra As String extendedLatinA_Astra = "\u1e15\u1e17\u1e53\u0129\u0169" ' @@ -2118,4 +2123,63 @@ Function fixColoredBackgroundInDoc() As Boolean EndIf End Function + + +Sub fixDiacriticKerning + Dim oSearch As Object + Dim oFound As Object + Dim oPara As Object + turnOffTracking() + oSearch = ThisComponent.createSearchDescriptor() + oSearch.SearchString = "[\u0300-\u036F]" + oSearch.SearchRegularExpression=True + oSearch.searchAll=True + oFound = ThisComponent.findFirst(oSearch) + Do While Not IsNull(oFound) + oPara = oFound.TextParagraph + fixDiacriticKerningInPara(oPara) + oFound = ThisComponent.findNext(oFound.End, oSearch) + Loop +End Sub + +Sub fixDiacriticKerningInPara(oPara As Object) + Dim paraEnum As Object + Dim portion As Object + Dim prevPortion As Object + paraEnum = oPara.createEnumeration + If paraEnum.hasMoreElements Then + prevPortion = paraEnum.nextElement + While paraEnum.hasMoreElements + portion = paraEnum.nextElement + While isFirstCharDiacritic(portion) + moveFirstCharacter(portion, prevPortion) + Wend + prevPortion = portion + Wend + EndIf +End Sub + +Function isFirstCharDiacritic(portion As Object) As Boolean + isFirstCharDiacritic = false + Dim portionText As String + Dim diaLowBound As Long + Dim diaHighBound As Long + Dim charNum As Long + diaLowBound = 768 + diaHighBound = 879 + portionText = portion.String + If Len(portionText) = 0 Then + Exit Function + EndIf + charNum = Asc(portionText) + If charNum >= diaLowBound And charNum <= diaHighBound Then + isFirstCharDiacritic = true + EndIf +End Function + +Sub moveFirstCharacter(portion As Object, prevPortion As Object) + prevPortion.String = prevPortion.String & Left(portion.String,1) + portion.String = Right(portion.String,Len(portion.String) - 1) +End Sub + \ No newline at end of file diff --git a/Redaction/CleaningDialog.xdl b/Redaction/CleaningDialog.xdl index 317b762..af7ce20 100644 --- a/Redaction/CleaningDialog.xdl +++ b/Redaction/CleaningDialog.xdl @@ -1,10 +1,10 @@ - + - + - + @@ -20,7 +20,7 @@ - + @@ -30,6 +30,7 @@ - + + \ No newline at end of file diff --git a/Redaction/Configuration.xba b/Redaction/Configuration.xba index 62c8f70..a69134b 100644 --- a/Redaction/Configuration.xba +++ b/Redaction/Configuration.xba @@ -1,7 +1,7 @@ Public Const redactionExtensionName = "cleanAndValidate" -Public Const redactionExtensionVersion = "0.10.5" +Public Const redactionExtensionVersion = "0.10.8" Public Const template_name_monography = "Монография" Public Const template_name_pj = "Философский журнал" Public Const template_name_pq = "Вопросы философии" diff --git a/Redaction/Translations.xba b/Redaction/Translations.xba index 538d13e..51dd9dd 100644 --- a/Redaction/Translations.xba +++ b/Redaction/Translations.xba @@ -344,6 +344,12 @@ Function getRussian(identifier As String) As String Case "templateChosen" getRussian = "Выбран шаблон" Exit Function + Case "statusFixingDiacriticCharactersKerning" + getRussian = "Исправляем комбинирование с диакритическими символами" + Exit Function + Case "fixDiacriticKerning" + getRussian = "Исправить комбинирование с диакритическими символами" + Exit Function Case Else getRussian = "Перевод не найден" End Select @@ -670,6 +676,12 @@ Function getEnglish(identifier As String) As String Case "templateChosen" getEnglish = "Selected template" Exit Function + Case "statusFixingDiacriticCharactersKerning" + getEnglish = "Fixing the combination with diacritics " + Exit Function + Case "fixDiacriticKerning" + getEnglish = "Fix combining with diacritic characters" + Exit Function Case Else getEnglish = "No translation" End Select @@ -995,6 +1007,12 @@ Function getCroatian(identifier As String) As String Case "templateChosen" getCroatian = "Izabrani šablon" Exit Function + Case "statusFixingDiacriticCharactersKerning" + getCroatian = "Popravljanje kombinacije s dijakritičkim znakovima" + Exit Function + Case "fixDiacriticKerning" + getCroatian = "Ispravite kombiniranje s naglašenim likovima" + Exit Function Case Else getCroatian = "No translation" End Select @@ -1320,6 +1338,12 @@ Function getSerbian(identifier As String) As String Case "templateChosen" getSerbian = "Изабрани шаблон" Exit Function + Case "statusFixingDiacriticCharactersKerning" + getSerbian = "Ispravljanje kombinacije sa dijakritičkim znacima " + Exit Function + Case "fixDiacriticKerning" + getSerbian = "Ispravite kombiniranje s naglašenim likovima" + Exit Function Case Else getSerbian = "No translation" End Select @@ -1645,6 +1669,12 @@ Function getBosnian(identifier As String) As String Case "templateChosen" getBosnian = "Izabrani šablon" Exit Function + Case "statusFixingDiacriticCharactersKerning" + getBosnian = "Popravljanje kombinacije s dijakritičkim znakovima" + Exit Function + Case "fixDiacriticKerning" + getBosnian = "Ispravite kombiniranje s naglašenim likovima" + Exit Function Case Else getBosnian = "No translation" End Select diff --git a/description.xml b/description.xml index 63c2ecb..825899d 100644 --- a/description.xml +++ b/description.xml @@ -21,7 +21,7 @@ - + diff --git a/gradle.properties b/gradle.properties index 199950f..bc92a10 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1 +1 @@ -version=0.10.7 +version=0.10.8 diff --git a/translations.ods b/translations.ods index ac58eef..d685210 100644 Binary files a/translations.ods and b/translations.ods differ