242 lines
No EOL
7.8 KiB
XML
242 lines
No EOL
7.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="TOCLinks" script:language="StarBasic" script:moduleType="normal">Sub makeOutlineLinks
|
|
Dim oViewCursor As Object
|
|
Dim i As Integer
|
|
oViewCursor = ThisComponent.CurrentController.getViewCursor()
|
|
oViewCursor.jumpToFirstPage()
|
|
For i = 1 To 10
|
|
makeLinksWithLevel(i)
|
|
Next i
|
|
MsgBox (getTranslation("OutlineLinksFinished"))
|
|
End Sub
|
|
|
|
|
|
Sub makeLinksWithLevel(level)
|
|
|
|
Dim heading() As Object
|
|
Dim outline() As Object
|
|
Dim oAnchor1Name As String
|
|
Dim oAnchor2Name As String
|
|
Dim message As String
|
|
Dim i As Integer
|
|
heading = getHeadingWithLevel(level)
|
|
outline = getOutlineWithLevel(level)
|
|
If Ubound(heading) <> -1 AND Ubound(outline) <> -1 Then
|
|
If (Ubound(outline) + 1) MOD (Ubound(heading) + 1 ) = 0 Then
|
|
For i = 0 To (Ubound(outline))
|
|
oAnchor2Name = "Outline " + level + "." + (i Mod (Ubound(heading) + 1))
|
|
If i <= Ubound(heading) Then
|
|
createAnchor(heading(i Mod (Ubound(heading) + 1)),oAnchor2Name)
|
|
EndIf
|
|
createLink(outline(i),"",oAnchor2Name)
|
|
Next i
|
|
Else
|
|
message = getTranslation("TOCErrorContentsNotMatchHeadings1") & " " & level & " (" & (Ubound(outline)+1) &") " & _
|
|
getTranslation("TOCErrorContentsNotMatchHeadings2") & " " & level & " " & _
|
|
getTranslation("TOCErrorContentsNotMatchHeadings3") & " (" & (Ubound(heading)+1) & ")"
|
|
showTOCLinksDialog(message, heading(), outline() )
|
|
EndIf
|
|
ElseIf Ubound(outline) = -1 Then
|
|
' MsgBox (getTranslation("TOCErrorNoContents1") & " " & level & " " & getTranslation("TOCErrorNoContents2"))
|
|
ElseIf Ubound(heading) = -1 Then
|
|
MsgBox getTranslation("TOCErrorNoHeadings1") & " " & level & " " & getTranslation("TOCErrorNoHeadings2")
|
|
EndIf
|
|
|
|
End Sub
|
|
|
|
Function getHeadingWithLevel(curNum)
|
|
Dim enum1Element As Object
|
|
Dim enum1 As Object
|
|
Dim enum2 As Object
|
|
Dim thisPortion As Object
|
|
Dim footnoteText As Object
|
|
Dim label As String
|
|
Dim labelNum As Integer
|
|
Dim i As Integer
|
|
Dim count As Integer
|
|
Dim cell As Object
|
|
Dim cellEnum As Object
|
|
Dim cellEnum2 As Object
|
|
Dim headingPar() As Object
|
|
enum1 = ThisComponent.Text.createEnumeration
|
|
While enum1.hasMoreElements
|
|
enum1Element = enum1.nextElement
|
|
If enum1Element.supportsService("com.sun.star.text.Paragraph") Then
|
|
If enum1Element.OutlineLevel = curNum Then
|
|
addToArray(headingPar(),enum1Element)
|
|
EndIf
|
|
|
|
ElseIf enum1Element.supportsService("com.sun.star.text.TextTable") Then
|
|
cellNames = enum1Element.cellNames
|
|
For i = LBound(cellNames) To Ubound(cellNames)
|
|
cell = enum1Element.getCellByName(cellNames(i))
|
|
cellEnum = cell.getText().createEnumeration()
|
|
While cellEnum.hasMoreElements
|
|
cellEnumElement = cellEnum.nextElement
|
|
If cellEnumElement.supportsService("com.sun.star.text.Paragraph") Then
|
|
If cellEnumElement.OutlineLevel = curNum Then
|
|
addToArray(headingPar(),cellEnumElement)
|
|
EndIf
|
|
|
|
EndIf
|
|
Wend
|
|
Next i
|
|
|
|
EndIf
|
|
Wend
|
|
getHeadingWithLevel = headingPar()
|
|
End Function
|
|
|
|
Function getOutlineWithLevel(curNum)
|
|
|
|
Dim enum1Element As Object
|
|
Dim enum1 As Object
|
|
Dim enum2 As Object
|
|
Dim thisPortion As Object
|
|
Dim footnoteText As Object
|
|
Dim label As String
|
|
Dim labelNum As Integer
|
|
Dim i As Integer
|
|
Dim count As Integer
|
|
Dim cell As Object
|
|
Dim cellEnum As Object
|
|
Dim cellEnum2 As Object
|
|
Dim par() As Object
|
|
Dim parName As String
|
|
Dim cellEnumElement As Object
|
|
parName = "Contents " + curNum
|
|
enum1 = ThisComponent.Text.createEnumeration
|
|
While enum1.hasMoreElements
|
|
enum1Element = enum1.nextElement
|
|
If enum1Element.supportsService("com.sun.star.text.Paragraph") Then
|
|
If enum1Element.ParaStyleName = parName Then
|
|
addToArray(par(),enum1Element)
|
|
EndIf
|
|
|
|
ElseIf enum1Element.supportsService("com.sun.star.text.TextTable") Then
|
|
cellNames = enum1Element.cellNames
|
|
For i = LBound(cellNames) To Ubound(cellNames)
|
|
cell = enum1Element.getCellByName(cellNames(i))
|
|
cellEnum = cell.getText().createEnumeration()
|
|
While cellEnum.hasMoreElements
|
|
cellEnumElement = cellEnum.nextElement
|
|
If cellEnumElement.supportsService("com.sun.star.text.Paragraph") Then
|
|
If cellEnumElement.ParaStyleName = parName Then
|
|
addToArray(par(),cellEnumElement)
|
|
EndIf
|
|
|
|
EndIf
|
|
Wend
|
|
Next i
|
|
Else
|
|
EndIf
|
|
Wend
|
|
getOutlineWithLevel = par()
|
|
End Function
|
|
|
|
|
|
Sub showTOCLinksDialog(message As String, heading() As Object, outline() As Object)
|
|
Dim pDialog As Object
|
|
Dim grid As Object
|
|
Dim headingsColumn As Object
|
|
Dim tocColumn As Object
|
|
Dim oGridControl As Object
|
|
Dim oColumnModel As Object
|
|
Dim oDataModel As Object
|
|
Dim rect As Object
|
|
Dim i As Integer
|
|
Dim j As Integer
|
|
Dim outlineCell As String
|
|
Dim headingCell As String
|
|
DialogLibraries.LoadLibrary("ePublishing")
|
|
pDialog = CreateUnoDialog( DialogLibraries.ePublishing.toc_links )
|
|
|
|
'grid = pDialog.getControl("grid")
|
|
grid = pDialog.Model.createInstance("com.sun.star.awt.grid.UnoControlGridModel")
|
|
grid.Name = "tocGrid"
|
|
grid.ShowColumnHeader = True
|
|
grid.ShowRowHeader = True
|
|
grid.VScroll = true
|
|
grid.Sizeable = true
|
|
grid.Step = 0
|
|
|
|
oColumnModel = createUnoService( "com.sun.star.awt.grid.DefaultGridColumnModel")
|
|
|
|
tocColumn = createUnoService( "com.sun.star.awt.grid.GridColumn")
|
|
tocColumn.Title = getTranslation("tocItemText")
|
|
tocColumn.ColumnWidth = 100
|
|
tocColumn.Resizeable = true
|
|
'tocColumn.Flexibility = true
|
|
|
|
oColumnModel.addColumn( tocColumn )
|
|
|
|
headingsColumn = createUnoService( "com.sun.star.awt.grid.GridColumn")
|
|
headingsColumn.Title = getTranslation("headingItemText")
|
|
headingsColumn.ColumnWidth = 100
|
|
headingsColumn.Resizeable = true
|
|
'headingsColumn.Flexibility = true
|
|
|
|
oColumnModel.addColumn( headingsColumn )
|
|
|
|
grid.ColumnModel = oColumnModel
|
|
'grid.Sizeable = False
|
|
'gridStep = 0
|
|
|
|
oDataModel = createUnoService( "com.sun.star.awt.grid.DefaultGridDataModel")
|
|
If Ubound(outline) > Ubound(heading) Then
|
|
For i = 0 To (Ubound(outline))
|
|
outlineCell = outline(i).getString()
|
|
j = i MOD (Ubound(heading) + 1)
|
|
headingCell = heading(j).getString()
|
|
oDataModel.addRow ( i+1 , Array(outlineCell, headingCell) )
|
|
Next
|
|
Else
|
|
For i = 0 To (Ubound(heading))
|
|
headingCell = heading(i).getString()
|
|
If i > Ubound(outline) Then
|
|
outlineCell = ""
|
|
Else
|
|
outlineCell = outline(i).getString()
|
|
EndIf
|
|
oDataModel.addRow ( i+1 , Array(outlineCell, headingCell) )
|
|
Next i
|
|
EndIf
|
|
grid.GridDataModel = oDataModel
|
|
|
|
oGridControl = createUnoService("com.sun.star.awt.grid.UnoControlGrid")
|
|
oGridControl.setModel(grid)
|
|
pDialog.addControl("gridtab", oGridControl)
|
|
rect = pDialog.getPosSize()
|
|
oGridControl.setPosSize(10,60,rect.Width - 20,rect.Height - 120, com.sun.star.awt.PosSize.POSSIZE)
|
|
|
|
|
|
|
|
|
|
pDialog.getControl("Ok").Label = getTranslation("buttonOk")
|
|
pDialog.getControl("message").SetText(message)
|
|
pDialog.Title = getTranslation("tocDialogLabel")
|
|
pDialog.Execute()
|
|
pDialog.dispose()
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
|
|
Sub addToArray(xArray(),vNextElement)
|
|
Dim iUB As Integer
|
|
Dim iLB As Integer
|
|
iLB = lBound(xArray())
|
|
iUB = uBound(xArray())
|
|
If iLB > iUB then
|
|
iUB = iLB
|
|
redim xArray(iLB To iUB)
|
|
Else
|
|
iUB = iUB +1
|
|
redim preserve xArray(iLB To iUB)
|
|
Endif
|
|
xArray(iUB) = vNextElement
|
|
End Sub
|
|
|
|
</script:module> |