From 0843de1752968c16803a687232ffaf0f47183225 Mon Sep 17 00:00:00 2001 From: Georgy Litvinov Date: Thu, 17 Oct 2019 00:11:21 +0300 Subject: [PATCH] More fixes. Clean is ready --- IPHRedaction/Clean.xba | 73 +++++- IPHRedaction/Validation.xba | 474 +----------------------------------- redaction.oxt | Bin 56405 -> 52764 bytes 3 files changed, 71 insertions(+), 476 deletions(-) diff --git a/IPHRedaction/Clean.xba b/IPHRedaction/Clean.xba index 04e913c..dec6070 100644 --- a/IPHRedaction/Clean.xba +++ b/IPHRedaction/Clean.xba @@ -15,12 +15,60 @@ disposePageBreaks disposeAllLinks disposeAllBookmarks - fixTableAnchors - + fixTableWidth + fixDrawingAnchors + loadArticleStyles statusIndicator.end() saveAndreload() End Sub +Private Sub loadArticleStyles + Dim dispatcher as object + Dim fileePath As String + Dim fileTest As Object + Dim fileName As String + Dim aArgs(0) As New com.sun.star.beans.PropertyValue + fileName = "Статья.ott" + filePath = getTemplatePath() & "/" & fileName + fileTest = CreateUnoService("com.sun.star.ucb.SimpleFileAccess") + If NOT fileTest.exists(filePath) Then + MsgBox "Файл стилей " & fileName & " не добавлен в Мои шаблоны. Не могу загрузить стили в текущий файл." + Exit Sub + EndIf + dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") + aArgs(0).Name = "OverwriteStyles" + aArgs(0).Value = True + ThisComponent.StyleFamilies.loadStylesFromURL( filePath, aArgs() ) +End Sub + +Private Sub AskAndReplace(SearchString, oReplaceString) + Dim SrchAttributes(0) as new com.sun.star.beans.PropertyValue + Dim ReplAttributes(0) as new com.sun.star.beans.PropertyValue + ReplaceFormatting(SearchString,oReplaceString,SrchAttributes,ReplAttributes, true) +End Sub + +Private Function getTemplatePath() as String + Dim ath as String + Dim settings As Object + Dim configProvider As Object + Dim params(0) As new com.sun.star.beans.PropertyValue + Dim convService As Object + + configProvider = createUnoService( "com.sun.star.configuration.ConfigurationProvider" ) + params(0).Name = "nodepath" + params(0).Value = "/org.openoffice.Office.Paths/Paths" + settings = configProvider.createInstanceWithArguments("com.sun.star.configuration.ConfigurationAccess", params() ) + + path = settings.Template.WritePath + convService = CreateUnoService("com.sun.star.util.PathSubstitution") + path = convService.substituteVariables(path, true) + path = ConvertToUrl(path) + getTemplatePath = path + +End Function + + + Private Sub disposeAllLinks() Dim SrchAttributes(0) as new com.sun.star.beans.PropertyValue SrchAttributes(0).Name = "CharStyleName" @@ -148,7 +196,7 @@ Private Sub cleanFormatting End Sub -Private Sub fixTableAnchors() +Private Sub fixTableWidth() Dim table As Object Dim tables As Object tables = ThisComponent.TextTables @@ -165,6 +213,20 @@ Private Sub fixTableAnchors() Next End Sub +Private Sub fixDrawingAnchors() + Dim drawing As Object + Dim drawings As Object + drawings = ThisComponent.DrawPage + Dim count As Long + count = drawings.getCount() + For i = 0 To count - 1 + drawing = drawings.getByIndex(i) + If drawing.AnchorType= com.sun.star.text.TextContentAnchorType.AT_PAGE Then + drawing.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PARAGRAPH + EndIf + Next +End Sub + Sub manualFontsToCharStyle Dim oDoc oDoc = Thiscomponent @@ -262,8 +324,6 @@ Private Sub doNotTrack dispatcher.executeDispatch(document, ".uno:ShowTrackedChanges", "", 0, args1()) End Sub - - Private Sub removeDirectFormatting Dim oDescriptor 'The search descriptor dim dispatcher as Object @@ -272,6 +332,9 @@ Private Sub removeDirectFormatting document = ThisComponent.CurrentController.Frame Dim oViewCursor As Object 'View cursor oViewCursor = ThisComponent.CurrentController.getViewCursor() + ' Globalscope.BasicLibraries.LoadLibrary( "MRILib" ) +' Mri oViewCursor + oViewCursor.jumpToFirstPage() oViewCursor.gotoStart(false) oViewCursor.gotoEnd(true) dispatcher.executeDispatch(document, ".uno:ResetAttributes", "", 0, Array()) diff --git a/IPHRedaction/Validation.xba b/IPHRedaction/Validation.xba index d0f6536..a14b16e 100644 --- a/IPHRedaction/Validation.xba +++ b/IPHRedaction/Validation.xba @@ -1,480 +1,12 @@ -Sub fixFrequentMistakes - Dim description As String - description = "Вы уверены, что хотите запустить исправление часто встречающихся ошибок?" - If NOT confirm(description) Then - Exit Sub - EndIf - saveDocument() - saveVersion("Перед выполнением макроса Ошибки") - StopTracking - Dim statusIndicator as Object - Dim NBSP As String - Dim space As String - NBSP = " " - space = " " - - statusIndicator = ThisComponent.getCurrentController.statusIndicator - statusIndicator.Start("Исправление ошибок начато, подождите",30) - 'Не должно быть символов табуляции - AskAndReplace("\t","") - 'Не должно быть подряд больше одного пробела - AskAndReplace("(?<=[:space:])[:space:]+","") - 'Не должно быть ни одного пробела в начале абзацев - AskAndReplace("^[:space:]+","") - 'Не должно быть пробелов в конце абзацев - AskAndReplace("[:space:]+$","") - 'Не должно быть пустых абзацев - AskAndReplace("^$","") - 'Не должно быть пробелов перед знаками пунктуации .,;:?!)]}»¡¿”‘’ - AskAndReplace("[:space:]+(?=[\.,;:?!\)\]\}»¡¿”‘’])","") - 'Между словом том и цифрой должен быть неразрывный пробел, а не обычный - AskAndReplace("(?<=\b[тТ](ом|\.))\ (?=[:digit:])",NBSP) - 'Между словом серия и цифрой должен быть неразрывный пробел, а не обычный - AskAndReplace("(?<=\b[сС](ерия|\.))\ +(?=[:digit:])",NBSP) - 'Между словом часть и цифрой должен быть неразрывный пробел, а не обычный - AskAndReplace("(?<=\b[чЧ](асть|\.))\ +(?=[:digit:])",NBSP) - 'Между числом и "г." должен быть неразрывный пробел, а не обычный - AskAndReplace("(?<=[0-9])[:space:]*г(?=\.)",NBSP & "г") - 'Между инициалами и Фамилией должен быть неразрывный пробел, а не обычный - AskAndReplace("(?<=[:upper:]\.[:space:][:upper:]\.)\ (?=[:upper:][:lower:]+)",NBSP) - 'Между Фамилией и инициалами должен быть неразрывный пробел, а не обычный - AskAndReplace("(?<=[:upper:][:lower:]{1,30})\ (?=[:upper:]\.[:space:][:upper:]\.)",NBSP) +Sub valButtonMark - 'Не должно быть пробелов после скобок [({ и кавычек «„ - AskAndReplace("(?<=[\(\[\{«„])[:space:]","") - 'Между "и" и "т." должен быть неразрывный пробел, а не обычный - AskAndReplace("(?<=\bи)\ (?=т\.)",NBSP) - 'Между "т." и "е./н./д./п./к." должен быть неразрывный пробел, а не обычный - AskAndReplace("(?<=\bт)\.\ ?(?=[ендпк]\.)","." & NBSP) - - 'Между буквами среднее тире должно обрамляться пробелами - AskAndReplace("(?<=[:alpha:])–(?=[:alpha:])",NBSP & "–" & NBSP) - 'Между буквами дефис-минус, цифровое тире и длинное тире заменяется на среднее тире - AskAndReplace("(?<=[:alpha:][:space:])[-‒—](?=[:space:][:alpha:])","–") - 'Между двумя цифрами и тире между ними не долнжо быть пробелов. А также тире должно быть цифровым - AskAndReplace("(?<=[:digit:])(?:[:space:])?[-‒–—](?:[:space:])?(?=[:digit:])","‒") - - 'Между двумя римскими цифрами и тире между ними не долнжо быть пробелов. А также тире должно быть средним - AskAndReplace("(?<=[MDCLXVI])(?:[:space:])?[-‒–—](?:[:space:])?(?=[MDCLXVI])","–") - - 'Между буквой и угловой открывающейся скобкой должен быть пробел - AskAndReplace("(?<=[:alpha:])<(?=…>)",space & "<") - 'Между угловой закрывающейся скобкой и буквой должен быть пробел - AskAndReplace("(?<=<…)>(?=[:alpha:])",">" & space) - statusIndicator.end() - saveAndreload() End Sub -Sub workaroundForDiacriticKerningBug - AskAndReplace("([:print:][\u0300-\u036F])","$1") -End Sub Sub validateButton - MsgBox "Validation works!" + MsgBox "Validation works!" End Sub -Sub executeCitationCorrection - StartTracking - AskAndReplace("(?<=[:alpha:])<(?=…>)"," <") - AskAndReplace("(?<=<…)>(?=[:alpha:])","> ") - AskAndReplace("(?<=[:alpha:])–(?=[:alpha:])"," – ") - StopTracking -End Sub - - -Sub executeRemoveConsequentSpaces - StartTracking - AskAndReplace("(?<=[:space:])[:space:]+","") - StopTracking -End Sub -Sub removeBadCharacters - StartTracking - AskAndReplace("[\uE000-\uF8FF]+","") - checkAllFootnotes - StopTracking - showTrackedChanges -End Sub - -Sub executeRemoveSpacesBeforeStops - StartTracking - AskAndReplace("[:space:]+(?=[\.,;:?!\)\]\}»¡¿”‘’])","") -'removed “ - StopTracking -End Sub - -Sub executeNumericDashBetweenNumbers - StartTracking - AskAndReplace("(?<=[:digit:])(?:[:space:])?[-‒–—](?:[:space:])?(?=[:digit:])","‒") - StopTracking -End Sub - -Sub executeReplaceLongDashWithSpacesBetweenWords - StartTracking - AskAndReplace("(?<=[:alpha:][:space:])[-‒—](?=[:space:][:alpha:])","–") - StopTracking -End Sub - -Sub executeRemoveSpacesAfterOpenedQuoteOrBracket - StartTracking - AskAndReplace("(?<=[\(\[\{«„])[:space:]","") - StopTracking -End Sub - - -Sub executeNonBreakingSpaceBetweenLastnameAndInitials - StartTracking - AskAndReplace("(?<=[^.!?][:space:][:upper:][:lower:]{1,30})\ (?=[:upper:]\.[:upper:]\.)"," ") - StopTracking -End Sub - - -Sub executeNonBreakingSpaceBetweenInitialsAndLastName - StartTracking - AskAndReplace("(?<=[:upper:]\.[:upper:]\.)\ (?=[:upper:][:lower:]+)"," ") - StopTracking -End Sub - -Sub executeNonBreakingSpaceBetweenEtc - StartTracking - AskAndReplace("(?<=\bи)\ (?=т\.)"," ") - AskAndReplace("(?<=\bт)\.\ ?(?=[ендпк]\.)",". ") - StopTracking -End Sub - -'Sub executeNonBreakingSpaceAfterPageOrVolume -' StartTracking -' AskAndReplace("(?<=\b[сСтТ]\.)[:space:](?=[:digit:])"," ") -' StopTracking -'End Sub - -Sub executeNonBreakingSpaceBetweenVol - StartTracking - AskAndReplace("(?<=\b[тТ](ом|\.))[:space:](?=[:digit:])"," ") - StopTracking -End Sub - -Sub executeNonBreakingSpaceBetweenSeries - StartTracking - AskAndReplace("(?<=\b[сС](ерия|\.))[:space:](?=[:digit:])"," ") - StopTracking -End Sub - -Sub executeNonBreakingSpaceBetweenPart - StartTracking - AskAndReplace("(?<=\b[чЧ](асть|\.))[:space:]+(?=[:digit:])"," ") - StopTracking -End Sub - - -Sub executeNonBreakingSpaceBetweenYear - StartTracking - AskAndReplace("(?<=[0-9])[:space:]*г(?=\.)"," г") - StopTracking -End Sub - -Sub StartTracking -dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") -document = ThisComponent.CurrentController.Frame -dim trackProperties(0) as new com.sun.star.beans.PropertyValue -trackProperties(0).Name = "TrackChanges" -trackProperties(0).Value = true -dispatcher.executeDispatch(document, ".uno:TrackChanges", "", 0, trackProperties()) -dim args1(0) as new com.sun.star.beans.PropertyValue -args1(0).Name = "ShowTrackedChanges" -args1(0).Value = true -dispatcher.executeDispatch(document, ".uno:ShowTrackedChanges", "", 0, args1()) -End Sub - -Sub StopTracking -dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") -document = ThisComponent.CurrentController.Frame -dim trackProperties(0) as new com.sun.star.beans.PropertyValue -trackProperties(0).Name = "TrackChanges" -trackProperties(0).Value = false -dispatcher.executeDispatch(document, ".uno:TrackChanges", "", 0, trackProperties()) -dim args1(0) as new com.sun.star.beans.PropertyValue -args1(0).Name = "ShowTrackedChanges" -args1(0).Value = true -dispatcher.executeDispatch(document, ".uno:ShowTrackedChanges", "", 0, args1()) -End Sub - - - -Sub executeRemoveWhiteBackground - Dim description As String - Dim searchPattern As String - searchPattern = "" - description = "Вы уверены, что хотите заменить белый фон на прозрачный в текущем документе?" - If NOT confirm(description) Then - Exit Sub - EndIf - Dim statusIndicator as Object - statusIndicator = ThisComponent.getCurrentController.statusIndicator - statusIndicator.Start("Замена белого фона на прозрачный начата",100) - Dim SrchAttributes(1) as new com.sun.star.beans.PropertyValue - Dim ReplAttributes(1) as new com.sun.star.beans.PropertyValue - SrchAttributes(0).Name = "CharBackTransparent" - SrchAttributes(0).Value = False - SrchAttributes(1).Name = "CharBackColor" - SrchAttributes(1).Value = 16777215 - ReplAttributes(0).Name = "CharBackTransparent" - ReplAttributes(0).Value = True - ReplAttributes(1).Name = "CharBackColor" - ReplAttributes(1).Value = -1 - setAttributesBySearchPattern(searchPattern,SrchAttributes,ReplAttributes) - statusIndicator.end() -End Sub - -Sub ReplaceEverywhere(SearchString,oReplaceString) -Dim oDoc,oText,oViewCursor,oStart,oEnd,oFind,FandR As Object -oDoc = ThisComponent -oText = oDoc.Text -Footnotes = oDoc.Footnotes -oViewCursor = oDoc.CurrentController.getViewCursor -oStart = oViewCursor.Text.createTextCursorByRange(oViewCursor.Start) -FandR = oDoc.createReplaceDescriptor -With FandR - .SearchString = SearchString - .ReplaceString = oReplaceString - .SearchRegularExpression=True - .searchAll=True -End With -If Not oViewCursor.isCollapsed then - oEnd = oViewCursor.Text.createTextCursorByRange(oViewCursor.End) -End If -If isEmpty(oEnd) then 'Do whole document. - oDoc.replaceAll(FandR) -Else 'Do selection. - Do - oFind = oDoc.FindNext(oStart.End,FandR) - If isNull(oFind) then - Exit Do - End If - If oViewCursor.Text.compareRegionEnds(oFind,oEnd) < 0 then - Exit Do - End If - oFind.setString(FandR.ReplaceString) - oFind = oDoc.FindNext(oFind.End,FandR) - Loop -EndIf -End Sub - - -Function IsAnythingSelected(oDoc As Object) As Boolean -Dim oSelections 'Contains all of the selections -Dim oSel -'Contains one specific selection -Dim oCursor -'Text cursor to check for a collapsed range -REM Assume nothing is selected -IsAnythingSelected = False -If IsNull(ThisComponent) Then - Exit Function -End If -' The current selection in the current controller. -'If there is no current controller, it returns NULL. -oSelections = ThisComponent.getCurrentSelection() -If IsNull(oSelections) Then - Exit Function -End If -If oSelections.getCount() = 0 Then - Exit Function -End If -If oSelections.getCount() > 1 Then - REM There is more than one selection so return True - IsAnythingSelected = True - Exit Function -End If -REM There is only one selection so obtain the first selection -oSel = oSelections.getByIndex(0) -lenght = Len(oSel.String) -If lenght > 0 Then - IsAnythingSelected = True -End If - -End Function - - -Sub AskAndReplace(SearchString, oReplaceString) -Dim SrchAttributes(0) as new com.sun.star.beans.PropertyValue -Dim ReplAttributes(0) as new com.sun.star.beans.PropertyValue -If IsAnythingSelected() Then - oSelections = ThisComponent.getCurrentSelection() - ReplaceInSelection(SearchString, oReplaceString) - thisComponent.currentController.select(oSelections) -Else -ReplaceFormatting(SearchString,oReplaceString,SrchAttributes,ReplAttributes, true) -' ReplaceEverywhere(SearchString, oReplaceString) -End If -End Sub - - - - -Sub ReplaceInSelection(SearchString,oReplaceString) -rem ---------------------------------------------------------------------- -rem define variables -dim document as object -dim dispatcher as object -rem ---------------------------------------------------------------------- -rem get access to the document -document = ThisComponent.CurrentController.Frame -dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") - -rem ---------------------------------------------------------------------- -dim args1(21) as new com.sun.star.beans.PropertyValue -args1(0).Name = "SearchItem.StyleFamily" -args1(0).Value = 2 -args1(1).Name = "SearchItem.CellType" -args1(1).Value = 0 -args1(2).Name = "SearchItem.RowDirection" -args1(2).Value = true -args1(3).Name = "SearchItem.AllTables" -args1(3).Value = false -args1(4).Name = "SearchItem.SearchFiltered" -args1(4).Value = false -args1(5).Name = "SearchItem.Backward" -args1(5).Value = false -args1(6).Name = "SearchItem.Pattern" -args1(6).Value = false -args1(7).Name = "SearchItem.Content" -args1(7).Value = false -args1(8).Name = "SearchItem.AsianOptions" -args1(8).Value = false -args1(9).Name = "SearchItem.AlgorithmType" -args1(9).Value = 1 -args1(10).Name = "SearchItem.SearchFlags" -args1(10).Value = 71680 -args1(11).Name = "SearchItem.SearchString" -args1(11).Value = SearchString -args1(12).Name = "SearchItem.ReplaceString" -args1(12).Value = oReplaceString -args1(13).Name = "SearchItem.Locale" -args1(13).Value = 255 -args1(14).Name = "SearchItem.ChangedChars" -args1(14).Value = 2 -args1(15).Name = "SearchItem.DeletedChars" -args1(15).Value = 2 -args1(16).Name = "SearchItem.InsertedChars" -args1(16).Value = 2 -args1(17).Name = "SearchItem.TransliterateFlags" -args1(17).Value = 1024 -args1(18).Name = "SearchItem.Command" -args1(18).Value = 3 -args1(19).Name = "SearchItem.SearchFormatted" -args1(19).Value = false -args1(20).Name = "SearchItem.AlgorithmType2" -args1(20).Value = 2 -args1(21).Name = "Quiet" -args1(21).Value = true - -dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1()) - - -end Sub - - - - - -sub insertSpecialCharacterInFont(sCharacter As String, sFont As String) -rem ---------------------------------------------------------------------- -rem define variables -dim document as object -dim dispatcher as object -rem ---------------------------------------------------------------------- -rem get access to the document -document = ThisComponent.CurrentController.Frame -dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") - -rem ---------------------------------------------------------------------- -dim args1(1) as new com.sun.star.beans.PropertyValue -args1(0).Name = "Symbols" -args1(0).Value = sCharacter -args1(1).Name = "FontName" -args1(1).Value = sFont - -dispatcher.executeDispatch(document, ".uno:InsertSymbol", "", 0, args1()) - -end Sub - - -Sub searchAndRemoveDirectFormatting(searchString) -oViewCursor = thisComponent.getCurrentController.getViewCursor -oViewCursor.jumpToFirstPage -oSearch = ThisComponent.createSearchDescriptor() -oSearch.SearchString = searchString -oSearch.SearchRegularExpression=True -oSearch.searchAll=True -oFound = ThisComponent.findFirst(oSearch) -Do While Not IsNull(oFound) - oTextCursor = oFound.Text.createTextCursor() - oFound.setString(oFound.getString) - oFound = ThisComponent.findNext(oFound.End, oSearch) -Loop -End Sub - - -sub RemoveStyleByName(styleName As String) -Dim oDoc as Object -Dim propertySetInfo As Object -oDoc = ThisComponent -oFamilies = thiscomponent.StyleFamilies -sElements() = oFamilies.getElementNames() -For i = 0 to oFamilies.count -1 - oFamily = oFamilies.getByName(sElements(i)) - For j = 0 to oFamily.getCount -1 - oStyle = oFamily.getByIndex(j) - - If oStyle.Name = styleName Then - oFamily.removeByName(oStyle.Name) - Exit For - EndIf - Next -Next -End Sub - -sub showTrackedChanges - dim document as object - dim dispatcher as object - document = ThisComponent.CurrentController.Frame - dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") - dispatcher.executeDispatch(document, ".uno:AcceptTrackedChanges", "", 0, Array()) - dim args2(0) as new com.sun.star.beans.PropertyValue - args2(0).Name = "ShowTrackedChanges" - args2(0).Value = true - dispatcher.executeDispatch(document, ".uno:ShowTrackedChanges", "", 0, args2()) - -end sub - -Sub checkAllFootnotes() - Dim footnotes As Object - Dim count as Integer - Dim charNum as Long - Dim char As Long - Dim label As String - Dim result As String - result = "" - footnotes = ThisComponent.Footnotes - count = footnotes.getCount - For i = 0 to count-1 - footnote = footnotes.getByIndex(i) -' Mri footnote - label = footnote.Label - charNum = Len(label) - For j = 1 to charNum - char = Asc(Right(Left(label,j),1)) - If char >= 57344 AND char <= 63743 then - result = result & "Символ "& Chr(char) &" сноски "& i &" находится в диапазоне для частного использования"& chr(10) - 'Mri footnote - 'footNote.setLabel(Left(label,j-1) & "*" & Right(label,charNum-j)) - End If - Next j - Next i - If result <> "" then - MsgBox result - EndIf -End Sub - + \ No newline at end of file diff --git a/redaction.oxt b/redaction.oxt index 0ab1c33ae5a5ee321fc90fdc5f22361237d87c22..a0117c994749b63c6118abf90b670fcc2c9f1ccd 100644 GIT binary patch delta 6069 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 PLpG-cfF8^L&FFssYN)5%