From 59c5e6396c306f1f0ac8241ee32e02a772c46448 Mon Sep 17 00:00:00 2001 From: Georgy Litvinov Date: Mon, 11 May 2020 19:58:47 +0200 Subject: [PATCH] Unique page styles --- Addons.xcu | 38 ++--- ePublishing/Archive.xba | 8 +- ePublishing/Books.xba | 259 +++++++++++++++++++++++++++++++++-- ePublishing/Translations.xba | 6 + translations.ods | Bin 18890 -> 19057 bytes 5 files changed, 271 insertions(+), 40 deletions(-) diff --git a/Addons.xcu b/Addons.xcu index cb8d691..056cb00 100644 --- a/Addons.xcu +++ b/Addons.xcu @@ -238,29 +238,6 @@ - - - - Books - Книги - - - - - macro:///ePublishing.Books.setUniqPageStyles - - - _self - - - - Make page styles unique - Сделать стили страниц уникальными - - - - - @@ -298,6 +275,21 @@ + + + com.sun.star.text.TextDocument,com.sun.star.text.WebDocument + + + Set unique style for each page + Каждой странице уникальный стиль + + + macro:///ePublishing.Books.setUniqPageStyles + + + _self + + com.sun.star.text.TextDocument,com.sun.star.text.WebDocument diff --git a/ePublishing/Archive.xba b/ePublishing/Archive.xba index 10ff7fe..6ff92c5 100644 --- a/ePublishing/Archive.xba +++ b/ePublishing/Archive.xba @@ -494,15 +494,15 @@ Sub replaceParaStyle End Sub -Function getIndex(a, v) +Function getIndex(array As variant, value As variant) As Integer Dim id As Integer Dim nRight As Integer Dim nLen As Integer id = 0 - nRight = uBound(a) - nLen = len(v) + nRight = uBound(array) + nLen = len(value) while id <= nRight - if a(id) = v then + If array(id) = value Then getIndex = id exit Function Else diff --git a/ePublishing/Books.xba b/ePublishing/Books.xba index 587fbf2..834847d 100644 --- a/ePublishing/Books.xba +++ b/ePublishing/Books.xba @@ -1,25 +1,249 @@ -Sub markBooks3 +Sub markBooks5 End Sub -Sub makeUniquePages +Sub setUniqPageStyles Dim pageStyleBreaks As Variant + Dim filteredDupStyles As Variant pageStyleBreaks = getPageStyleBreaks() Dim pageCount As Integer - Dim i As Integer + Dim pageStyleNames() As String + Dim pageNumbers() As Integer + Dim pageStarts() As Object + Dim pageCounter As Integer + pageStyleNames = pageStyleBreaks(0) + pageNumbers = pageStyleBreaks(1) + pageStarts = pageStyleBreaks(2) 'Globalscope.BasicLibraries.LoadLibrary( "MRILib" ) pageCount = thiscomponent.currentController.pageCount - Dim styleNames(pageCount - 1) As String - For i = 0 To pageCount - 1 - If i = 0 Then - + Dim fullChain(pageCount - 1) As String + Dim dupNames() As String + Dim dupCounters() As Integer + Dim chainNum As Integer + Dim pageStyleFamily As Object + Dim pageStyle As Object + pageStyleFamily = ThisComponent.StyleFamilies.getByName("PageStyles") + chainNum = 0 + For pageCounter = 1 To pageCount + If pageNumbers(chainNum) = pageCounter Then + fullChain(pageCounter - 1) = pageStyleNames(chainNum) + If Ubound(pageNumbers) > chainNum Then + chainNum = chainNum + 1 + EndIf + Else + pageStyle = pageStyleFamily.getByName(fullChain(pageCounter - 1 - 1)) + fullChain(pageCounter - 1) = pageStyle.FollowStyle EndIf - Next i + Dim dupPosition As Integer + dupPosition = getIndex(dupNames, fullChain(pageCounter - 1) ) + If dupPosition = -1 Then + addToArray(dupNames, fullChain(pageCounter - 1)) + addToArray(dupCounters, 1) + Else + dupCounters(dupPosition) = dupCounters(dupPosition) + 1 + EndIf + Next pageCounter + + filteredDupStyles = filterPageStyleNames(dupNames,dupCounters) + filteredDupStyles = createDupNames(filteredDupStyles) + Dim duplicateNames() As String + Dim initNames() As String + Dim dupName As String + duplicateNames = filteredDupStyles(2) + initNames = filteredDupStyles(0) + createPageStyleClones(filteredDupStyles) + + chainNum = 0 + Dim curName As String + Dim pageStart As Object + Dim prevPageStyle As Object + Dim index As Integer + For pageCounter = 1 To pageCount + If pageNumbers(chainNum) = pageCounter Then + index = getIndex(initNames, pageStyleNames(chainNum)) + If index > -1 Then + pageStart = pageStarts(chainNum) + dupName = getDuplicate(duplicateNames(index)) + pageStart.pageDescName = dupName + fullChain(pageCounter - 1) = dupName + EndIf + If Ubound(pageNumbers) > chainNum Then + chainNum = chainNum + 1 + EndIf + Else + curName = fullChain(pageCounter - 1) + index = getIndex(initNames, curName) + If index > -1 Then + dupName = getDuplicate(duplicateNames(index)) + prevPageStyle = pageStyleFamily.getByName(fullChain(pageCounter - 1 - 1)) + prevPageStyle.FollowStyle = dupName + fullChain(pageCounter - 1) = dupName + EndIf + EndIf + Next pageCounter + MsgBox getTranslation(allPagesHaveUniqPageStyle) +End Sub + +Function getDuplicate(duplicateNames() As String) As String + Dim index As Integer + Dim dupName As String + For index = LBound(duplicateNames) To Ubound(duplicateNames) + dupName = duplicateNames(index) + If dupName <> "" Then + getDuplicate = dupName + duplicateNames(index) = "" + Exit Function + EndIf + Next index +End Function + + +Sub createPageStyleClones(filteredDupStyles As Variant) + 'Globalscope.BasicLibraries.LoadLibrary( "MRILib" ) + Dim oViewCursor As Object + Dim initialNames() As String + Dim dupNames() As Variant + Dim initialName As String + Dim style As Object + initialNames = filteredDupStyles(0) + dupNames = filteredDupStyles(2) + Dim pageStyleFamily As Object + pageStyleFamily = ThisComponent.StyleFamilies.getByName("PageStyles") + oViewCursor = ThisComponent.CurrentController.getViewCursor() + oViewCursor.goToEnd(False) + Dim index As Integer + Dim dupInedx As Integer + insertPageBreak() + Dim duplicates() As String + Dim duplicate As String + Dim pageStyleOriginals As Integer + Dim newStyle As Object + For index = LBound(initialNames) To Ubound(initialNames) + initialName = initialNames(index) + style = pageStyleFamily.getByName(initialName) + oViewCursor.PageDescName = style.Name + duplicates = dupNames(index) + For dupIndex = LBound(duplicates) To Ubound(duplicates) + duplicate = duplicates(dupIndex) + createPageStyleByExample(duplicate) + newStyle = pageStyleFamily.getByName(duplicate) + newStyle.FollowStyle = style.Name + Next + Next + backspace End Sub +Function createDupNames(dupStyles As Variant) As Variant + Dim newDupStyles(2) As Variant + Dim counters() As Integer + Dim initNames() As String + Dim initName As String + initNames = dupStyles(0) + counters = dupStyles(1) + Dim newDupNames() As Variant + Dim i As Integer + Dim nameIt As Integer + For i = LBound(counters) To UBound(counters) + ReDim newNames(counters(i) - 1) As String + addToArray(newDupNames, newNames) + + initName = initNames(i) + For nameIt = LBound(newNames) To UBound(newNames) + newNames(nameIt) = createDupName(initName, newDupNames) + newDupNames(UBound(newDupNames)) = newNames + Next nameIt + + Next i + + newDupStyles(0) = initNames + newDupStyles(1) = counters + newDupStyles(2) = newDupNames + createDupNames = newDupStyles +End Function + +Function createDupName(initName As String, newDupNames As Variant ) + Dim pageStyleFamily As Object + pageStyleFamily = ThisComponent.StyleFamilies.getByName("PageStyles") + Dim proposeName As String + Dim i As Integer + Dim postfix As String + Dim prefixName As String + prefixName = getPrefixName(initName) + For i = 1 To 10000 + proposeName = prefixName & i + If NOT pageStyleFamily.hasByName(proposeName) And Not IsInArrays(newDupNames, proposeName) Then + createDupName = proposeName + Exit Function + EndIf + Next i + +End Function + +Function getPrefixName(initName As String) As String + Dim num As Integer + Dim tmpName As String + tmpName = Trim(initName) + If tmpName = "" Then + getPrefixName = "" + Exit Function + EndIf + num = Asc(Right(tmpName, 1)) + Do while num >= 48 AND num <= 57 + tmpName = Trim(Left(tmpName, Len(tmpName) - 1)) + If tmpName = "" Then + getPrefixName = "" + Exit Function + EndIf + num = Asc(Right(tmpName, 1)) + Loop + If tmpName = "Статья" Then + Dim result As String + result = Trim(initName) & " стр." + getPrefixName = result + Exit Function + EndIf + If Len(tmpName) > 4 AND Right(tmpName,4) = "стр." Then + getPrefixName = tmpName + Exit Function + EndIf + getPrefixName = tmpName & " " +End Function + + +Function IsInArrays(newDupNames As Variant, proposeName As String) As Boolean + 'Globalscope.BasicLibraries.LoadLibrary( "MRILib" ) + Dim i As Integer + Dim names() As String + For i = LBound(newDupNames) To Ubound(newDupNames) + names = newDupNames(i) + If getIndex(names, proposeName) > -1 Then + IsInArrays = True + Exit Function + EndIf + Next i + IsInArrays = False +End Function + +Function filterPageStyleNames(names() As String, counters() As Integer) As Variant + Dim i As Integer + Dim filteredNames() As String + Dim filteredCounters() As Integer + For i=Lbound(counters) To Ubound(counters) + If counters(i) > 1 Then + addToArray(filteredNames, names(i)) + addToArray(filteredCounters, counters(i)) + EndIf + Next i + Dim filteredDups(1) As Variant + filteredDups(0) = filteredNames + filteredDups(1) = filteredCounters + filterPageStyleNames = filteredDups +End Function + + Function getPageStyleBreaks() Dim enum1 As Object @@ -30,12 +254,13 @@ Function getPageStyleBreaks() Dim oViewCursor As Object Dim anchor As Object Dim oSavePosition As Object - Dim pageStyleBreaks(1) As Variant + Dim pageStyleBreaks(2) As Variant Dim pageStyleNames() As String Dim pageNumbers() As Integer + Dim pageStarts() As Object oViewCursor = ThisComponent.CurrentController.getViewCursor() - enum1 = ThisComponent.Text.createEnumeration() +' Globalscope.BasicLibraries.LoadLibrary( "MRILib" ) Dim i As Integer i = 0 Dim first As Boolean @@ -43,15 +268,22 @@ Function getPageStyleBreaks() While enum1.hasMoreElements enum1Element = enum1.nextElement If enum1Element.supportsService("com.sun.star.text.Paragraph") OR enum1Element.supportsService("com.sun.star.text.TextTable") Then - If enum1Element.BreakType = com.sun.star.style.BreakType.PAGE_BEFORE AND NOT IsMissing(enum1Element.PageDescName) AND NOT IsNull(enum1Element.PageDescName) AND NOT IsEmpty(enum1Element.PageDescName) Then +' MRi enum1Element + If NOT isEmpty(enum1Element.PageDescName) And enum1Element.PageDescName <> "" Then pageStyleName = enum1Element.PageStyleName addToArray(pageStyleNames(),pageStyleName) - oViewCursor.goToRange(enum1Element.Anchor,false) + If enum1Element.supportsService("com.sun.star.text.Paragraph") Then + oViewCursor.goToRange(enum1Element.Anchor,false) + ElseIf enum1Element.supportsService("com.sun.star.text.TextTable") Then + oViewCursor.goToRange(enum1Element.getCellByPosition(0,0).getStart(),false) + EndIf addToArray(pageNumbers(),CInt(oViewCursor.Page)) + addToArray(pageStarts(),enum1Element) first = false ElseIf first Then addToArray(pageStyleNames(), enum1Element.PageStyleName) addToArray(pageNumbers(),1) + addToArray(pageStarts(),enum1Element) first = false EndIf @@ -60,10 +292,11 @@ Function getPageStyleBreaks() Wend pageStyleBreaks(0) = pageStyleNames pageStyleBreaks(1) = pageNumbers + pageStyleBreaks(2) = pageStarts getPageStyleBreaks = pageStyleBreaks End Function -Sub setUniqPageStyles +Sub setUniqPageStylesDEPRECATED Dim prevPageName As String Dim firstPageName As String Dim pageName As String diff --git a/ePublishing/Translations.xba b/ePublishing/Translations.xba index 5505160..50b1706 100644 --- a/ePublishing/Translations.xba +++ b/ePublishing/Translations.xba @@ -234,6 +234,9 @@ Function getRussian(identifier As String) As String Exit Function Case "PageConfigMM" getRussian = "мм" + Exit Function + Case "allPagesHaveUniqPageStyle" + getRussian = "Каждой странице в документе назначен уникальный стиль" Exit Function Case Else getRussian = "Перевод не найден" @@ -461,6 +464,9 @@ Function getEnglish(identifier As String) As String Exit Function Case "PageConfigMM" getEnglish = "mm" + Exit Function + Case "allPagesHaveUniqPageStyle" + getEnglish = "Every page in document now have unique page style" Exit Function Case Else getEnglish = "No translation" diff --git a/translations.ods b/translations.ods index d8a7a7db645ee193272c18666bdd21810d82bee1..39dfb6b8e2dc332d4ebb45b9bcdc920f7740c566 100644 GIT binary patch delta 14978 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 R|7nGwJV|1hJJEms`G2FG3CsWh delta 14835 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 B!~g&Q