309 lines
No EOL
9.5 KiB
XML
309 lines
No EOL
9.5 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="MakeUp" script:language="StarBasic" script:moduleType="normal">Sub markMakeUp1
|
|
End Sub
|
|
|
|
Sub incrementCharWidth()
|
|
changeCharWidth(1)
|
|
End Sub
|
|
|
|
Sub decrementCharWidth()
|
|
changeCharWidth(-1)
|
|
End Sub
|
|
|
|
Sub incrementKern()
|
|
changeKern(2)
|
|
End Sub
|
|
|
|
Sub decrementKern()
|
|
changeKern(-2)
|
|
End Sub
|
|
|
|
Sub balanceDoublePagesFootnotes
|
|
Dim oViewCursor As Object
|
|
oViewCursor = Thiscomponent.currentController.getViewCursor()
|
|
Dim leftHeight As Long
|
|
Dim rightHeight As Long
|
|
Dim odd As Integer
|
|
Dim rightPageNum As Integer
|
|
Dim leftPageNum As Integer
|
|
Dim startPage As Integer
|
|
Dim docPages As Integer
|
|
startPage = oViewCursor.getPage()
|
|
docPages = thiscomponent.currentController.pageCount
|
|
odd = startPage Mod 2
|
|
If startPage <> 1 AND (startPage <> docPages Or odd = 1) Then
|
|
If odd = 1 Then
|
|
rightPageNum = startPage
|
|
leftPageNum = startPage - 1
|
|
Else
|
|
leftPageNum = startPage
|
|
rightPageNum = startPage + 1
|
|
EndIf
|
|
If pageHasNotes(leftPageNum) And pageHasNotes(rightPageNum) Then
|
|
leftHeight = getFootnoteAreaHeight(leftPageNum)
|
|
rightHeight = getFootnoteAreaHeight(rightPageNum)
|
|
EndIf
|
|
MsgBox leftHeight & " " & rightHeight
|
|
EndIf
|
|
|
|
End Sub
|
|
|
|
|
|
Function getFootnoteAreaHeight(pageNumber As Integer)
|
|
Dim oViewCursor As Object
|
|
Dim fnAreaEnd As Object
|
|
Dim pageStyleName As String
|
|
Dim oStyles As Object
|
|
Dim newHeight As Integer
|
|
Dim initialHeight As Integer
|
|
oStyles = ThisComponent.StyleFamilies
|
|
Dim pageSTyles As Object
|
|
pageStyles = oStyles.getByName(oStyles.elementNames(2))
|
|
Dim pageStyle As Object
|
|
Dim decrement As Integer
|
|
Dim tmpPageNum As Integer
|
|
decrement = 10000
|
|
oViewCursor = Thiscomponent.currentController.getViewCursor()
|
|
oViewCursor.jumpToPage(pageNumber)
|
|
pageStyleName = getCurPageStyleName()
|
|
pageStyle = pageStyles.getByName(pageStyleName)
|
|
initialHeight = pageStyle.FootnoteHeight
|
|
If pageStyle.FootnoteHeight = 0 Then
|
|
pageStyle.FootnoteHeight = pageStyle.Height - pageStyle.TopMargin - pageStyle.BottomMargin
|
|
EndIf
|
|
'TODO ADD CHECK IF THERE IS A FOOTNOTE AREA ON PAGE
|
|
fnAreaEnd = getFNAreaEnd(pageNumber)
|
|
Dim savePageHeight As Long
|
|
savePageHeight = pageStyle.Height
|
|
Do While pageStyle.FootnoteHeight > 10
|
|
Do While pageStyle.FootnoteHeight < decrement
|
|
decrement = decrement / 2
|
|
Loop
|
|
newHeight = pageStyle.FootnoteHeight - decrement
|
|
pageStyle.FootnoteHeight = newHeight
|
|
tmpPageNum = getPageNumberVCurs(fnAreaEnd)
|
|
If tmpPageNum <> pageNumber Then
|
|
If decrement < 4 Then
|
|
pageStyle.FootnoteHeight = pageStyle.FootnoteHeight + decrement * 2
|
|
'Hack to force libreoffice to refresh page layout
|
|
tmpPageNum = getPageNumberVCurs(fnAreaEnd)
|
|
If tmpPageNum <> pageNumber Then
|
|
pageStyle.Height = savePageHeight + 100
|
|
pageStyle.Height = savePageHeight
|
|
EndIf
|
|
Exit Do
|
|
Else
|
|
newHeight = pageStyle.FootnoteHeight + decrement
|
|
decrement = decrement / 2
|
|
pageStyle.FootnoteHeight = newHeight
|
|
'Hack to force libreoffice to refresh page layout
|
|
tmpPageNum = getPageNumberVCurs(fnAreaEnd)
|
|
If tmpPageNum <> pageNumber Then
|
|
pageStyle.Height = savePageHeight + 100
|
|
pageStyle.Height = savePageHeight
|
|
EndIf
|
|
EndIf
|
|
EndIf
|
|
Loop
|
|
|
|
tmpPageNum = getPageNumberVCurs(fnAreaEnd)
|
|
If tmpPageNum <> pageNumber Then
|
|
pageStyle.FootnoteHeight = 0
|
|
MsgBox "Error"
|
|
Stop
|
|
EndIf
|
|
getFootnoteAreaHeight = pageStyle.FootnoteHeight
|
|
End Function
|
|
|
|
|
|
sub pageDialog
|
|
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 ----------------------------------------------------------------------
|
|
dispatcher.executeDispatch(document, ".uno:PageSettingDialog", "", 0, Array())
|
|
|
|
|
|
end sub
|
|
|
|
Function getPageNumberVCurs(cursor As object) As Integer
|
|
Dim oViewCursor As Object
|
|
Dim oSavePosition As Object
|
|
oViewCursor = Thiscomponent.currentController.getViewCursor()
|
|
oSavePosition = oViewCursor.Text.createTextCursorByRange(oViewCursor)
|
|
oViewCursor.goToRange(cursor.Start,false)
|
|
getPageNumberVCurs = oViewCursor.getPage()
|
|
oViewCursor.goToRange(oViewCursor, false)
|
|
End Function
|
|
|
|
|
|
Function pageHasNotes(pageNumber As Integer) As Boolean
|
|
Dim allNotes As Object
|
|
allNotes = thisComponent.FootNotes
|
|
Dim curNote As Object
|
|
Dim noteStartPage As Integer
|
|
Dim noteEndPage As Integer
|
|
Dim oEnum As Object
|
|
' Dim noteStartCursor As Object
|
|
Dim endtText As Object
|
|
pageHasNotes = false
|
|
Dim x As Integer
|
|
For x = 0 to allNotes.Count -1
|
|
curNote = allNotes.getByIndex(x)
|
|
noteEndPage = getPageNumberVCurs(curNote.Text.End)
|
|
If noteEndPage >= pageNumber Then
|
|
noteStartPage = getPageNumberVCurs(curNote.Text.Start)
|
|
If pageNumber = noteStartPage Or (noteStartPage < pageNumber And noteEndPage >= pageNumber) Then
|
|
pageHasNotes = true
|
|
Exit function
|
|
EndIf
|
|
EndIf
|
|
Next x
|
|
|
|
End Function
|
|
|
|
Function getFNAreaEnd(pageNumber As Integer)
|
|
Dim allNotes As Object
|
|
allNotes = thisComponent.FootNotes
|
|
Dim curNote As Object
|
|
Dim noteStartPage As Integer
|
|
Dim noteEndPage As Integer
|
|
Dim prevNote As Object
|
|
Dim oEnum As Object
|
|
' Dim noteStartCursor As Object
|
|
Dim endtText As Object
|
|
Dim pageHasNotes As Boolean
|
|
pageHasNotes = false
|
|
Dim x As Integer
|
|
For x = 0 to allNotes.Count -1
|
|
curNote = allNotes.getByIndex(x)
|
|
noteEndPage = getPageNumberVCurs(curNote.Text.End)
|
|
If noteEndPage >= pageNumber Then
|
|
noteStartPage = getPageNumberVCurs(curNote.Text.Start)
|
|
If pageNumber = noteStartPage Or (noteStartPage < pageNumber And noteEndPage >= pageNumber) Then
|
|
pageHasNotes = true
|
|
EndIf
|
|
If pageHasNotes AND pageNumber < noteStartPage Then
|
|
getFNAreaEnd = prevNote.Text.createTextCursorByRange(prevNote.Text.End)
|
|
Exit function
|
|
Endif
|
|
If pageHasNotes AND pageNumber < noteEndPage Then
|
|
getFNAreaEnd = getFNAreaEndInFootnote(curNote,pageNumber)
|
|
Exit function
|
|
EndIf
|
|
prevNote = curNote
|
|
EndIf
|
|
Next x
|
|
|
|
End Function
|
|
|
|
Function getFNAreaEndInFootnote(note As Object, pageNum As Integer)
|
|
Dim oViewCursor As Object
|
|
Dim oSavePosition As Object
|
|
Dim tmpPageNum As Integer
|
|
|
|
If getPageNumber(note.Text.Start) > pageNum Then
|
|
'ERROR Footnote starts after this page number
|
|
Exit Function
|
|
EndIf
|
|
oViewCursor = Thiscomponent.currentController.getViewCursor()
|
|
oSavePosition = oViewCursor.Text.createTextCursorByRange(oViewCursor)
|
|
oViewCursor.goToRange(note.Text.End,false)
|
|
Do
|
|
oViewCursor.gotoStartOfLine(false)
|
|
tmpPageNum = getPageNumber(oViewCursor)
|
|
If tmpPageNum <= pageNum Then
|
|
Exit Do
|
|
EndIf
|
|
oViewCursor.goLeft(1,false)
|
|
tmpPageNum = getPageNumber(oViewCursor)
|
|
Loop While tmpPageNum > pageNum
|
|
getFNAreaEndInFootnote = oViewCursor.Text.createTextCursorByRange(oViewCursor)
|
|
oViewCursor.goToRange(oSavePosition,false)
|
|
End Function
|
|
|
|
|
|
Sub getFNAreaStart
|
|
Dim pageNumber As Integer
|
|
pageNumber = getPageNumber(Thiscomponent.currentController.getViewCursor())
|
|
Dim allNotes As Object
|
|
allNotes = thisComponent.FootNotes
|
|
Dim aNote As Object
|
|
Dim oEnum As Object
|
|
Dim noteStart As Object
|
|
Dim noteEnd As Object
|
|
Dim x As Integer
|
|
For x = 0 to allNotes.Count -1
|
|
aNote = allNotes.getByIndex(x)
|
|
'oEnum = aNote.Text.createEnumeration()
|
|
noteStart = aNote.Text.createTextCursorByRange(aNote.Text.Start)
|
|
noteEnd = aNote.Text.createTextCursorByRange(aNote.Text.End)
|
|
If pageNumber = getPageNumber(noteStart) Then
|
|
MsgBox "Starts here " & x & " page number " & pageNumber
|
|
Exit sub
|
|
Endif
|
|
If pageNumber = getPageNumber(noteEnd) Then
|
|
MsgBox "ends here " + x
|
|
Exit sub
|
|
EndIf
|
|
|
|
'Do While oEnum.hasMoreElements()
|
|
' oCurPar = oEnum.nextElement()
|
|
'Loop
|
|
Next
|
|
'Globalscope.BasicLibraries.LoadLibrary("MRILib")
|
|
'mri ThisComponent
|
|
End Sub
|
|
|
|
|
|
Function changeCharWidth(delta As Integer) As Boolean
|
|
Dim oViewCursor As Object
|
|
Dim oTextCursor As Object
|
|
Dim charScale As Integer
|
|
oViewCursor = ThisComponent.CurrentController.getViewCursor()
|
|
If(IsEmpty(oViewCursor.charScaleWidth)) Then
|
|
charScale = 100
|
|
Else
|
|
charScale = oViewCursor.charScaleWidth
|
|
End If
|
|
oViewCursor = ThisComponent.CurrentController.getViewCursor()
|
|
oViewCursor.charScaleWidth = charScale + delta
|
|
End Function
|
|
|
|
Function changeKern(delta As Integer) As Boolean
|
|
Dim oViewCursor As Object
|
|
Dim oTextCursor As Object
|
|
Dim kerning As Integer
|
|
oViewCursor = ThisComponent.CurrentController.getViewCursor()
|
|
If(IsEmpty(oViewCursor.CharKerning)) Then
|
|
kerning = 0
|
|
Else
|
|
kerning = oViewCursor.CharKerning
|
|
End If
|
|
oViewCursor.CharKerning = kerning + delta
|
|
End Function
|
|
|
|
|
|
sub undoUno
|
|
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 ----------------------------------------------------------------------
|
|
dispatcher.executeDispatch(document, ".uno:Undo", "", 0, Array())
|
|
|
|
|
|
end sub
|
|
</script:module> |