diff --git a/ePublishing/Books.xba b/ePublishing/Books.xba new file mode 100644 index 0000000..8925e2c --- /dev/null +++ b/ePublishing/Books.xba @@ -0,0 +1,126 @@ + + +Sub markBooks3 +End Sub +Sub setUniqPageStyles + Dim prevPageName As String + Dim firstPageName As String + Dim pageName As String + Dim curPageNum As Integer + Dim prevPageNum As String + Dim leftPageNum As Long + Dim docPages As Long + Dim articlePages As Long + Dim previousPageStyle As Object + Dim pageStyles As Object + Dim curPageStyle As Object + Dim curPageStyleName As String + Dim nextStyle As Object + Dim clonedStyle As Object + Dim clonedStyleName As String + Dim oViewCursor As Object + Dim pageNum As Integer + Dim page As Integer + oViewCursor = ThisComponent.CurrentController.getViewCursor() + pageStyles = ThisComponent.StyleFamilies.getByName("PageStyles") + pageNum = 1 + pageName = "Страница издания" + + If NOT hasPageStyleWith(pageName) Then + MsgBox "Ошибка. Стиль страниц <" & pageName & "> не найден." + Exit Sub + EndIf + page = findFirstPageNumberWithStyle(pageName) + firstPage = page + oViewCursor.jumpToPage(page) + curPageStyleName = oViewCursor.PageStyleName + Do While StrComp(curPageStyleName,pageName,1) = 0 + If pageNum = 1 Then + oViewCursor.jumpToPreviousPage() + prevPageName = oViewCursor.PageStyleName + previousPageStyle = pageStyles.getByName(prevPageName) + tmpName = pageName + " " + If InStr(prevPageName, tmpName) = 1 Then + startNum = Right(prevPageName,Len(prevPageName) - Len(tmpName)) + pageNum = CInt(startNum) + 1 + EndIf + oViewCursor.jumpToNextPage() + EndIf + newPageName = pageName + " " + pageNum + + createPageStyleByExample(newPageName) + If pageNum = 1 Then + oTextCursor = oViewCursor.Text.CreateTextCursorByRange(oViewCursor) + oViewCursor.PageDescName = newPageName + + Else + previousPageStyle.FollowStyle = newPageName + EndIf + + curPageStyle = pageStyles.getByName(newPageName) + 'Установим стиль следующей страницы в стандартное значение + curPageStyle.FollowStyle = pageName + previousPageStyle = curPageStyle + oViewCursor.jumpToNextPage() + curPageStyleName = getNextPageStyleName() + pageNum = pageNum + 1 + Loop +End Sub + + +Function hasPageStyleWith(pageStyleName) + Dim enum1 As Object + Dim enum1Element As Object + Dim curPage As String + Dim curStyleName As String + Dim pageName As String + Dim oViewCursor As Object + Dim anchor As Object + enum1 = ThisComponent.Text.createEnumeration() + While enum1.hasMoreElements + enum1Element = enum1.nextElement + If enum1Element.supportsService("com.sun.star.text.Paragraph") OR enum1Element.supportsService("com.sun.star.text.TextTable") Then + If NOT IsMissing(enum1Element.PageDescName) AND NOT IsNull(enum1Element.PageDescName) Then + pageName = CStr(enum1Element.PageDescName) + If pageStyleName = pageName Then + hasPageStyleWith = true + Exit Function + EndIf + + EndIf + EndIf + Wend + hasPageStyleWith = false +End Function + +Function findFirstPageNumberWithStyle(pageStyleName) + Dim enum1 As Object + Dim enum1Element As Object + Dim curPage As String + Dim curStyleName As String + Dim pageName As String + Dim oViewCursor As Object + Dim anchor As Object + Dim oSavePosition As Object + oViewCursor = ThisComponent.CurrentController.getViewCursor() + oSavePosition = oViewCursor.Text.createTextCursorByRange(oViewCursor) + enum1 = ThisComponent.Text.createEnumeration() + While enum1.hasMoreElements + enum1Element = enum1.nextElement + If enum1Element.supportsService("com.sun.star.text.Paragraph") OR enum1Element.supportsService("com.sun.star.text.TextTable") Then + If NOT IsMissing(enum1Element.PageDescName) AND NOT IsNull(enum1Element.PageDescName) Then + pageName = CStr(enum1Element.PageDescName) + If pageStyleName = pageName Then + anchor = enum1Element.getAnchor() + oViewCursor.gotoRange(anchor,false) + findFirstPageNumberWithStyle = oViewCursor.getPage() + oViewCursor.goToRange(oSavePosition, false) + Exit Function + EndIf + + EndIf + EndIf + Wend + findFirstPageNumberWithStyle = -1 +End Function + \ No newline at end of file