From 488cce991eff6c93ff4d7ace15b6f82c28b140af Mon Sep 17 00:00:00 2001 From: Georgy Litvinov Date: Wed, 30 Oct 2019 16:14:31 +0300 Subject: [PATCH] New version with unicode fonts conversion --- IPHRedaction/Clean.xba | 103 ++++++++++++++++++++++++++++++----------- description.xml | 2 +- redaction.oxt | Bin 55670 -> 56241 bytes 3 files changed, 77 insertions(+), 28 deletions(-) diff --git a/IPHRedaction/Clean.xba b/IPHRedaction/Clean.xba index 9e4ba43..8dead38 100644 --- a/IPHRedaction/Clean.xba +++ b/IPHRedaction/Clean.xba @@ -1,6 +1,7 @@ -Private Sub markFxFxF +Sub markXXFXK + End Sub Sub cleanButton @@ -14,7 +15,7 @@ Sub cleanButton saveDocument doNotTrack statusIndicator.Start("Чистка документа начата, подождите",30) - + unicodeSymbolsConversion convertFontsToCharStyles cleanFormatting disposeAllLinks @@ -27,6 +28,54 @@ Sub cleanButton saveAndreload() End Sub +Private Sub unicodeSymbolsConversion + Dim newFontName As String + newFontName = "IPH Astra Serif" + Dim RAtts(2) as new com.sun.star.beans.PropertyValue + RAtts(0).Name = "CharFontName" + RAtts(1).Name = "CharFontNameComplex" + RAtts(2).Name = "CharFontNameAsian" + + 'Basic Astra + RAtts(0).Value = newFontName + RAtts(1).Value = newFontName + RAtts(2).Value = newFontName + 'Cyrillic unicode block range \u0400-\u04FF + 'Basic Latin \u0020-\u007E + 'Combining diacritical marks 0301 0304 0323 032e 0331 035f + 'General Punctuation \u2000-\u206f + unicodeConversionEverywhere("[\u0400-\u04FF,\u0020-\u007E,\u2000-\u206f,\u0301,\u0304,\u0323,\u032e,\u0331,\u035f]+",RAtts) + + 'Arabic Scheherazade + newFontName = "Scheherazade" + RAtts(0).Value = newFontName + RAtts(1).Value = newFontName + RAtts(2).Value = newFontName + unicodeConversionEverywhere("[\u0600-\u06FF]+",RAtts) + + 'Greek Tinos + newFontName = "Tinos" + RAtts(0).Value = newFontName + RAtts(1).Value = newFontName + RAtts(2).Value = newFontName + 'Greek and Coptic + unicodeConversionEverywhere("[\u0370-\u03FF]+",RAtts) + 'DejaVu Sans Mathematical operators + newFontName = "DejaVu Sans" + RAtts(0).Value = newFontName + RAtts(1).Value = newFontName + RAtts(2).Value = newFontName + '\u2200-\u22FF Mathematical operators + unicodeConversionEverywhere("[\u2200-\u22FF]+",RAtts) + +End Sub + +Private Sub unicodeConversionEverywhere(searchPattern,rAtts) + 'in text + setAttributesBySearchPattern(searchPattern,RAtts) + +End Sub + 'Replaces manual formatting text with font into character style with assigned font Private Sub convertFontsToCharStyles @@ -199,7 +248,7 @@ Private Sub disposeAllLinks() ReplAttributes(1).Value = "" ReplAttributes(2).Name = "CharStyleName" ReplAttributes(2).Value = ThisComponent.getStyleFamilies().getByIndex(0).ElementNames(0) - setAttributesBySearchPattern("",SrchAttributes,ReplAttributes) + setAttributesBySearchPattern("",ReplAttributes,SrchAttributes) End Sub Private Sub disposeAllBookmarks() @@ -236,42 +285,42 @@ Private Sub disposePageBreaks Wend End Sub -Private Sub setAttributesBySearchPattern(searchPattern As String, SrchAttributes, ReplAttributes) - +Sub setAttributesBySearchPattern(searchPattern As String,ReplAttributes, Optional SrchAttributes) + turnOffTracking + dim stringValue1 As String + dim stringValue2 As String Dim oSearch Dim oTextCursor As Object Dim oViewCursor As Object Dim lineIndent - dim stringValue1 As String - dim stringValue2 As String - Dim foundPatterns() As Object - document = ThisComponent.CurrentController.Frame + Dim replace As Boolean dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") oSearch = ThisComponent.createSearchDescriptor() oSearch.SearchString = searchPattern oSearch.SearchRegularExpression=True oSearch.SearchAll = True - oSearch.searchStyles = true - If Not IsEmpty(SrchAttributes(0).Value) Then - oSearch.SetSearchAttributes(SrchAttributes()) - End If + If Not IsMissing (SrchAttributes) Then + If Not IsEmpty(SrchAttributes(0).Value) Then + oSearch.searchStyles = true + oSearch.SetSearchAttributes(SrchAttributes()) + End If + EndIf oFound = ThisComponent.findFirst(oSearch) - Dim replace As Boolean - Do While Not IsNull(oFound) - replace = true - - For j = LBound(SrchAttributes) To Ubound(SrchAttributes) - If oFound.getPropertySetInfo.hasPropertyByName(SrchAttributes(j).Name) Then - stringValue1 = "" & oFound.getPropertyValue(SrchAttributes(j).Name) - stringValue2 = "" & SrchAttributes(j).Value - If stringValue1 <> stringValue2 Then + replace = true + If Not IsMissing(SrchAttributes) Then + For j = LBound(SrchAttributes) To Ubound(SrchAttributes) + If oFound.getPropertySetInfo.hasPropertyByName(SrchAttributes(j).Name) Then + stringValue1 = "" & oFound.getPropertyValue(SrchAttributes(j).Name) + stringValue2 = "" & SrchAttributes(j).Value + If stringValue1 <> stringValue2 Then + replace = replace AND False + EndIf + Else replace = replace AND False EndIf - Else - replace = replace AND False - EndIf - Next j + Next j + EndIf If replace then For i = LBound(ReplAttributes) To Ubound(ReplAttributes) If oFound.getPropertySetInfo.hasPropertyByName(ReplAttributes(i).Name) Then @@ -805,4 +854,4 @@ Private Function getStyleNames(oFamily,bLocalized as Boolean, _ Endif xArray(iUB) = vNextElement End Sub - \ No newline at end of file + diff --git a/description.xml b/description.xml index 21aaa1d..ad44f53 100644 --- a/description.xml +++ b/description.xml @@ -3,7 +3,7 @@ xmlns:dep="http://openoffice.org/extensions/description/2006" xmlns:xlink="http://www.w3.org/1999/xlink"> - + Redaction for publishing in Institute of philosophy diff --git a/redaction.oxt b/redaction.oxt index a4a8afc3998afda23268d3814b05d0a7ab14bef5..c16f653a46c2d27ef360c1f7dd8ac92b5d983b05 100644 GIT binary patch delta 10088 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 delta 9554 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