From 717eccdc4a488cc4974e474c56a8365b9e2d5c01 Mon Sep 17 00:00:00 2001 From: Georgy Litvinov Date: Fri, 30 Apr 2021 13:55:27 +0200 Subject: [PATCH] Convert arabic,greek and chinese fonts with punctuation and spaces --- Redaction/Clean.xba | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/Redaction/Clean.xba b/Redaction/Clean.xba index 661b25b..eade9a5 100644 --- a/Redaction/Clean.xba +++ b/Redaction/Clean.xba @@ -1,6 +1,6 @@ -Sub mark78 +Sub mark79 End Sub @@ -295,7 +295,8 @@ Private Sub unicodeSymbolsConversion convertWLLatin2IPHAstra convertSymbol - + Dim sharedMarksRegExp As String + sharedMarksRegExp = "([\u0020-\u002f\u003a\u003b\u00A0\u2010\u2013\u2014]+)?" Dim newFontName As String newFontName = "IPH Astra Serif" Dim RAtts(2) as new com.sun.star.beans.PropertyValue @@ -324,7 +325,7 @@ Private Sub unicodeSymbolsConversion RAtts(0).Value = newFontName RAtts(1).Value = newFontName RAtts(2).Value = newFontName - unicodeConversionEverywhere("[\u0600-\u06ff\ufb50-\ufdff\ufe70-\ufeff]+",RAtts) + unicodeConversionEverywhere(sharedMarksRegExp & "[\u0600-\u06ff\ufb50-\ufdff\ufe70-\ufeff]+" & sharedMarksRegExp ,RAtts) 'Greek Tinos newFontName = "Tinos" @@ -333,7 +334,7 @@ Private Sub unicodeSymbolsConversion RAtts(2).Value = newFontName 'Greek and Coptic 0370—03FF 'Greek extended 1F00—1FFF - unicodeConversionEverywhere("[\u0370-\u03ff\u1f00-\u1fff]+",RAtts) + unicodeConversionEverywhere(sharedMarksRegExp & "[\u0370-\u03ff\u1f00-\u1fff]+" & sharedMarksRegExp,RAtts) 'DejaVu Sans Mathematical operators @@ -354,7 +355,7 @@ Private Sub unicodeSymbolsConversion '\u21d2 двойная стрелка вправо '3000—303F Символы и пунктуация ККЯ - unicodeConversionEverywhere("[\u21d2\u302b\uff00-\uffef]+",RAtts) + unicodeConversionEverywhere(sharedMarksRegExp & "[\u21d2\u302b\uff00-\uffef]+" & sharedMarksRegExp,RAtts) newFontName = "Noto Serif CJK SC" RAtts(0).Value = newFontName @@ -364,7 +365,7 @@ Private Sub unicodeSymbolsConversion '\u4e00—\u9fff Унифицированные идеограммы ККЯ '\u3400-\u4db7\u4e00—\u9ff1 Найдены в Noto Sans CJK SC '\u3000-\u302a\u302c-\u303f В Noto Sans CJK SC - unicodeConversionEverywhere("[\u3000-\u302a\u302c-\u303f\u3400-\u4db7\u4e00-\u9ff1]+",RAtts) + unicodeConversionEverywhere(sharedMarksRegExp & "[\u3000-\u302a\u302c-\u303f\u3400-\u4db7\u4e00-\u9ff1]+" & sharedMarksRegExp,RAtts) End Sub @@ -448,6 +449,8 @@ Private Sub fixFrequentMistakes config = initRedactionConfiguration() Dim NBSP As String Dim space As String + Dim latinPlusCyrillicLettersRegExp As String + latinPlusCyrillicLettersRegExp = "[\u0041-\u005a\u0061-\u007a\u0410-\u044f]" NBSP = " " space = " " 'Не должно быть символов табуляции @@ -465,18 +468,18 @@ Private Sub fixFrequentMistakes 'Не должно быть пробелов после скобок [({ и кавычек «„ AskAndReplace("(?<=[\(\[\{«„])[:space:]","") 'Между буквами среднее тире должно обрамляться пробелами - AskAndReplace("(?<=[:alpha:])–(?=[:alpha:])",NBSP & "–" & NBSP) + AskAndReplace("(?<=" & latinPlusCyrillicLettersRegExp & ")–(?=" & latinPlusCyrillicLettersRegExp & ")",NBSP & "–" & NBSP) 'Между буквами дефис-минус, цифровое тире и длинное тире заменяется на среднее тире - AskAndReplace("(?<=[:alpha:][:space:])[-‒—−](?=[:space:][:alpha:])","–") + AskAndReplace("(?<=" & latinPlusCyrillicLettersRegExp & "[:space:])[-‒—−](?=[:space:]" & latinPlusCyrillicLettersRegExp & ")","–") 'Между двумя цифрами и тире не долнжо быть пробелов. А также тире должно быть цифровым. 'Также проверяем, что перед искомым тире нет DOI '''''AskAndReplace("(?<!DOI[0-9. /XVI:-‒–—−-]{1,50})(?<=[:digit:])(?:[:space:])?[-‒–—−](?:[:space:])?(?=[:digit:])","‒") 'Между двумя римскими цифрами и тире между ними не долнжо быть пробелов. А также тире должно быть средним AskAndReplace("(?<=[MDCLXVI])(?:[:space:])?[-‒–—−](?:[:space:])?(?=[MDCLXVI])","–") 'Между буквой и угловой открывающейся скобкой должен быть пробел - AskAndReplace("(?<=[:alpha:])<(?=…>)",space & "<") + AskAndReplace("(?<=" & latinPlusCyrillicLettersRegExp & ")<(?=…>)",space & "<") 'Между угловой закрывающейся скобкой и буквой должен быть пробел - AskAndReplace("(?<=<…)>(?=[:alpha:])",">" & space) + AskAndReplace("(?<=<…)>(?=" & latinPlusCyrillicLettersRegExp & ")",">" & space) If config.getPropertyValue("fixes_russian_iph") = "true" Then 'между N. Y. не должно быть пробела