epublishing/ePublishing/Books.xba
2020-05-08 16:35:26 +02:00

210 lines
No EOL
6.8 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Books" script:language="StarBasic" script:moduleType="normal">Sub markBooks3
End Sub
Sub makeUniquePages
Dim pageStyleBreaks As Variant
pageStyleBreaks = getPageStyleBreaks()
Dim pageCount As Integer
Dim i As Integer
&apos;Globalscope.BasicLibraries.LoadLibrary( &quot;MRILib&quot; )
pageCount = thiscomponent.currentController.pageCount
Dim styleNames(pageCount - 1) As String
For i = 0 To pageCount - 1
If i = 0 Then
EndIf
Next i
End Sub
Function getPageStyleBreaks()
Dim enum1 As Object
Dim enum1Element As Object
Dim pageStyleName As String
Dim pageNumber As Integer
Dim pageName As String
Dim oViewCursor As Object
Dim anchor As Object
Dim oSavePosition As Object
Dim pageStyleBreaks(1) As Variant
Dim pageStyleNames() As String
Dim pageNumbers() As Integer
oViewCursor = ThisComponent.CurrentController.getViewCursor()
enum1 = ThisComponent.Text.createEnumeration()
Dim i As Integer
i = 0
Dim first As Boolean
first = true
While enum1.hasMoreElements
enum1Element = enum1.nextElement
If enum1Element.supportsService(&quot;com.sun.star.text.Paragraph&quot;) OR enum1Element.supportsService(&quot;com.sun.star.text.TextTable&quot;) 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
pageStyleName = enum1Element.PageStyleName
addToArray(pageStyleNames(),pageStyleName)
oViewCursor.goToRange(enum1Element.Anchor,false)
addToArray(pageNumbers(),CInt(oViewCursor.Page))
first = false
ElseIf first Then
addToArray(pageStyleNames(), enum1Element.PageStyleName)
addToArray(pageNumbers(),1)
first = false
EndIf
EndIf
i = i + 1
Wend
pageStyleBreaks(0) = pageStyleNames
pageStyleBreaks(1) = pageNumbers
getPageStyleBreaks = pageStyleBreaks
End Function
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(&quot;PageStyles&quot;)
pageNum = 1
pageName = &quot;Страница издания&quot;
If NOT hasPageStyleWith(pageName) Then
MsgBox &quot;Ошибка. Стиль страниц &lt;&quot; &amp; pageName &amp; &quot;&gt; не найден.&quot;
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 + &quot; &quot;
If InStr(prevPageName, tmpName) = 1 Then
startNum = Right(prevPageName,Len(prevPageName) - Len(tmpName))
pageNum = CInt(startNum) + 1
EndIf
oViewCursor.jumpToNextPage()
EndIf
newPageName = pageName + &quot; &quot; + pageNum
createPageStyleByExample(newPageName)
If pageNum = 1 Then
oTextCursor = oViewCursor.Text.CreateTextCursorByRange(oViewCursor)
oViewCursor.PageDescName = newPageName
Else
previousPageStyle.FollowStyle = newPageName
EndIf
curPageStyle = pageStyles.getByName(newPageName)
&apos;Установим стиль следующей страницы в стандартное значение
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(&quot;com.sun.star.text.Paragraph&quot;) OR enum1Element.supportsService(&quot;com.sun.star.text.TextTable&quot;) 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(&quot;com.sun.star.text.Paragraph&quot;) OR enum1Element.supportsService(&quot;com.sun.star.text.TextTable&quot;) 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
sub testStyleCopy
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(&quot;com.sun.star.frame.DispatchHelper&quot;)
rem ----------------------------------------------------------------------
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = &quot;Param&quot;
args1(0).Value = &quot;alb2&quot;
args1(1).Name = &quot;Family&quot;
args1(1).Value = 8
dispatcher.executeDispatch(document, &quot;.uno:StyleNewByExample&quot;, &quot;&quot;, 0, args1())
end sub
</script:module>