epublishing/ePublishing/Archive.xba

884 lines
No EOL
26 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="Archive" script:language="StarBasic" script:moduleType="normal">Sub archMark20
End Sub
Sub resetNotesStyle
Dim oDescriptor As Object
Dim dispatcher As Object
Dim x As Integer
Dim oViewCursor As Object
Dim document As Object
Dim allNotes As Object
Dim aNote As Object
Dim oEnum As Object
Dim oCurPar As Object
dispatcher = createUnoService(&quot;com.sun.star.frame.DispatchHelper&quot;)
document = ThisComponent.CurrentController.Frame
oViewCursor = ThisComponent.CurrentController.getViewCursor()
allNotes = thisComponent.FootNotes
for x = 0 to allNotes.Count -1
aNote = allNotes.getByIndex(x)
aNote.Anchor.CharStyleName=&quot;Footnote anchor&quot;
oEnum = aNote.Text.createEnumeration()
Do While oEnum.hasMoreElements()
oCurPar = oEnum.nextElement()
oCurPar.ParaStyleName = &quot;Footnote&quot;
Loop
Next
End Sub
Sub createBidirectLink
Dim oSelections As Object
Dim oAnchor1 As Object
Dim oAnchor2 As Object
Dim oAnchor1Name As String
Dim oAnchor2Name As String
If IsNull(ThisComponent) Then
MsgBox getTranslation(&quot;bidirectLinkSuggestion&quot;)
Exit Sub
End If
oSelections = ThisComponent.getCurrentSelection()
If IsNull(oSelections) Then
MsgBox getTranslation(&quot;bidirectLinkSuggestion&quot;)
Exit Sub
End If
objectsCount = oSelections.getCount() - 1
If objectsCount &lt; 2 OR objectsCount &gt; 2 Then
MsgBox getTranslation(&quot;bidirectLinkSuggestion&quot;)
Exit Sub
End If
oAnchor1 = oSelections.getByIndex(1)
oAnchor2 = oSelections.getByIndex(2)
If isAnchorEmpty(oAnchor1) Or isAnchorEmpty(oAnchor2) Then
MsgBox getTranslation(&quot;bidirectLinkSuggestion&quot;)
Exit Sub
EndIf
oAnchor1Name = RND_String()
oAnchor2Name = RND_String()
createAnchor(oAnchor1,oAnchor1Name)
createAnchor(oAnchor2,oAnchor2Name)
createLink(oAnchor1,oAnchor1.String,oAnchor2Name)
createLink(oAnchor2,oAnchor2.String,oAnchor1Name)
End Sub
Function isAnchorEmpty(anchor As Object) As Boolean
Dim anchorName As String
anchorName = trim(anchor.String)
If Len(anchorName) = 0 Then
isAnchorEmpty = true
Exit Function
EndIf
If Len(anchorName) = 1 AND Chr(10) = anchorName Then
isAnchorEmpty = true
Exit Function
EndIf
isAnchorEmpty = false
End Function
Sub disposeBookmark(bookmarkName As String)
Dim bookmarks As Object
Dim bookmark As Object
Dim elementName As String
elementName = ThisComponent.Links.ElementNames(6)
bookmarks = ThisComponent.Links.getByName(elementName)
If bookmarks.hasByName(bookmarkName) Then
bookmark = bookmarks.getByName(bookmarkName)
bookmark.dispose()
EndIf
End Sub
Sub createAnchor(targetRange as Object,anchorName as String)
dim oViewCursor as object
dim document as object
dim dispatcher as Object
disposeBookMark(anchorName)
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService(&quot;com.sun.star.frame.DispatchHelper&quot;)
oViewCursor = ThisComponent.CurrentController.getViewCursor()
oViewCursor.gotoRange(targetRange,false)
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = &quot;Bookmark&quot;
args1(0).Value = anchorName
dispatcher.executeDispatch(document, &quot;.uno:InsertBookmark&quot;, &quot;&quot;, 0, args1())
End Sub
Sub createLink(targetRange as Object,linkName as String,linkURL as String)
dim oViewCursor as object
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService(&quot;com.sun.star.frame.DispatchHelper&quot;)
oViewCursor = ThisComponent.CurrentController.getViewCursor()
oViewCursor.gotoRange(targetRange,false)
&apos;Globalscope.BasicLibraries.LoadLibrary( &quot;MRILib&quot; )
&apos;Mri oViewCursor
oViewCursor.HyperlinkURL = &quot;#&quot; &amp; linkURL
oViewCursor.HyperLinkName = linkName
&apos;dim args2(4) as new com.sun.star.beans.PropertyValue
&apos;args2(0).Name = &quot;Hyperlink.Text&quot;
&apos;args2(0).Value = linkName
&apos;args2(1).Name = &quot;Hyperlink.URL&quot;
&apos;args2(1).Value = &quot;#&quot;+linkURL
&apos;args2(2).Name = &quot;Hyperlink.Target&quot;
&apos;args2(2).Value = &quot;&quot;
&apos;args2(3).Name = &quot;Hyperlink.Name&quot;
&apos;args2(3).Value = linkName
&apos;args2(4).Name = &quot;Hyperlink.Type&quot;
&apos;args2(4).Value = 1
&apos;dispatcher.executeDispatch(document, &quot;.uno:SetHyperlink&quot;, &quot;&quot;, 0, args2())
End Sub
Function RND_String
Dim OutputString As String
Dim TempString As String
Dim i as Long
OutputString=&quot;&quot;
randomize
For i = 1 to 20
Select Case i
Case 5, 8, 11, 14
OutputString=OutputString+&quot;-&quot;
Case Else
TempString=Hex(int(rnd*256))
If len(TempString) &lt; 2 Then
TempString=TempString+&quot;0&quot;
EndIf
OutputString=OutputString+TempString
End Select
next i
RND_String = OutputString
End Function
sub convertIndesignPageBreaks
Dim description As String
Dim pageBreakMarker As String
pageBreakMarker = &quot;---XYXYX---&quot;
description = getTranslation(&quot;convertIndesignPageBreaksConfirmation&quot;)
If NOT confirm(description) Then
Exit Sub
EndIf
turnOffTracking()
Dim oViewCursor As Object
oViewCursor = thisComponent.getCurrentController.getViewCursor
oViewCursor.jumpToFirstPage
Dim oSearch As Object
Dim oTextCursor As Object
Dim firstLowercase As Boolean
Dim firstBreak As Boolean
firstBreak = true
Dim charNum As Long
Dim prevParaLastCharacter As String
Dim oFound As Object
Dim pageNumber As Integer
Dim prevPageNumber As Integer
Dim nextPara As Object
Dim prevPara As Object
Dim nextParaFirstCharacter As String
firstLowercase = false
oSearch = ThisComponent.createSearchDescriptor()
oSearch.SearchString = pageBreakMarker
oSearch.SearchRegularExpression=True
oSearch.searchAll=True
oFound = ThisComponent.findFirst(oSearch)
Do While Not IsNull(oFound)
oTextCursor = oFound.Text.createTextCursor()
oTextCursor.gotoRange(oFound,false)
oTextCursor.gotoStartOfParagraph(false)
oTextCursor.gotoEndOfParagraph(true)
oTextCursor.goRight(1,true)
oTextCursor.String = &quot;&quot;
oTextCursor.BreakType = com.sun.star.style.BreakType.PAGE_BEFORE
&apos;Go to Start of new paragraph to shrink prev page if necessary
oViewCursor.goToRange(oTextCursor.End,false)
oViewCursor.goLeft(1,false)
&apos;
Wait 100
pageNumber = getPageNumber(oTextCursor.Text.createTextCursorByRange(oTextCursor.End))
If firstBreak Then
firstBreak = false
prevPageNumber = pageNumber
EndIf
If pageNumber - prevPageNumber &gt; 1 Then
shrinkPageContent
Wait 100
pageNumber = getPageNumber(oTextCursor.Text.createTextCursorByRange(oTextCursor.End))
EndIf
&apos;check first character
oTextCursor.goRight(1,true)
nextPara = oTextCursor.End
nextParaFirstCharacter = oTextCursor.getString()
If (isLowerCase(nextParaFirstCharacter)) Then
adjustFirstLine(nextPara)
firstLowercase = true
End If
&apos;check last character
oTextCursor.goLeft(2,false)
prevPara = oTextCursor.Start
oTextCursor.goLeft(1,true)
prevParaLastCharacter = oTextCursor.getString()
If (prevParaLastCharacter = &quot; &quot;) Then
&apos; oTextCursor.String=&quot;&quot;
&apos;last paragraph
adjustLastLine(prevPara)
adjustFirstLine(nextPara)
EndIf
If (isLowerCase(prevParaLastCharacter)) Then
If firstLowercase Then
oTextCursor.collapseToEnd()
oTextCursor.setString(&quot;-&quot;)
oTextCursor.collapseToEnd()
adjustLastLine(prevPara)
adjustFirstLine(nextPara)
EndIf
End If
If pageNumber - prevPageNumber &lt; 2 Then
&apos; stretchPrevPage(prevPara)
EndIf
prevPageNumber = pageNumber
oFound = ThisComponent.findNext(oFound.End, oSearch)
Loop
setUniqPageStyles
MsgBox getTranslation(&quot;convertIndesignPageBreaksFinish&quot;)
end Sub
Sub configureHeadings
configureArchiveHeading1
configureOtherArchiveHeadings
End Sub
Sub configureArchiveHeading1
Dim outline1() As Object
Dim oViewCursor As Object
Dim oSavePosition As Object
oViewCursor = thisComponent.getCurrentController.getViewCursor
oSavePosition = oViewCursor.Text.createTextCursorByRange(oViewCursor)
outline1 = getHeadingWithLevel(1)
Dim startViewPageNum As Integer
Dim pageNumberCursor As Object
Dim i As Integer
Dim j As Integer
Dim initialPageCount As Integer
initialPageCount = ThisComponent.currentController.pageCount
For i = LBound(outline1) To UBound(outline1)
oViewCursor.goToRange(outline1(i), false)
oViewCursor.jumpToEndOfPage()
pageNumberCursor = oViewCursor.Text.createTextCursorByRange(oViewCursor)
pageNumberCursor.goToStartOfWord(false)
startViewPageNum = getPageNumber(pageNumberCursor)
Do While startViewPageNum = getPageNumber(pageNumberCursor) And initialPageCount = ThisComponent.currentController.pageCount
outline1(i).ParaTopMargin = outline1(i).ParaTopMargin + 100
Loop
If outline1(i).ParaTopMargin &gt;= 100 Then
outline1(i).ParaTopMargin = outline1(i).ParaTopMargin - 100
EndIf
Next i
oViewCursor.goToRange(oSavePosition,false)
End Sub
Sub configureOtherArchiveHeadings
Dim outline1() As Object
Dim oViewCursor As Object
Dim oSavePosition As Object
oViewCursor = thisComponent.getCurrentController.getViewCursor
oSavePosition = oViewCursor.Text.createTextCursorByRange(oViewCursor)
Dim startViewPageNum As Integer
Dim pageNumberCursor As Object
Dim i As Integer
Dim j As Integer
Dim initialPageCount As Integer
initialPageCount = ThisComponent.currentController.pageCount
For j = 2 To 10
outline1 = getHeadingWithLevel(j)
For i = LBound(outline1) To UBound(outline1)
If outline1(i).BreakType &lt;&gt; 4 Then
oViewCursor.goToRange(outline1(i), false)
oViewCursor.jumpToEndOfPage()
pageNumberCursor = oViewCursor.Text.createTextCursorByRange(oViewCursor)
pageNumberCursor.goToStartOfWord(false)
startViewPageNum = getPageNumber(pageNumberCursor)
Do While startViewPageNum = getPageNumber(pageNumberCursor) And initialPageCount = ThisComponent.currentController.pageCount
outline1(i).ParaTopMargin = outline1(i).ParaTopMargin + 100
If (outline1(i).ParaTopMargin &gt; outline1(i).ParaBottomMargin) Then
Exit Do
EndIf
Loop
If outline1(i).ParaTopMargin &gt;= 100 Then
outline1(i).ParaTopMargin = outline1(i).ParaTopMargin - 100
EndIf
EndIf
Next i
Next j
oViewCursor.goToRange(oSavePosition,false)
End Sub
Sub stretchPrevPage()
&apos;Assumption hard breaks at start of stretching page and at start of next page
Dim pageCount As Integer
Dim curViewPageNum As Integer
Dim startViewPageNum As Integer
Dim successOperation As Boolean
Dim paragraphs() As Object
Dim outline1() As Object
Dim outline2() As Object
initialPageCount = thiscomponent.currentController.pageCount
Dim oViewCursor As Object
Dim textCursor As Object
Dim pageNumberCursor As Object
Dim oSavePosition As Object
Dim pageStartPosition As Object
Dim i As Integer
Dim curPara As Object
oViewCursor = thisComponent.getCurrentController.getViewCursor
oSavePosition = oViewCursor.Text.createTextCursorByRange(oViewCursor)
oViewCursor.goToRange(prevPara, false)
&apos;oViewCursor.goToStartOfLine(false)
pageNumberCursor = oViewCursor.Text.createTextCursorByRange(oViewCursor)
pageNumberCursor.goToStartOfWord(false)
&apos;Globalscope.BasicLibraries.LoadLibrary( &quot;MRILib&quot; )
&apos;MRI pageNumberCursor
oViewCursor.jumpToStartOfPage()
startViewPageNum = getPageNumber(pageNumberCursor)
textCursor = oViewCursor.Text.createTextCursorByRange(oViewCursor)
Do While oViewCursor.getPage() = startViewPageNum
curPara = textCursor.textParagraph
If curPara.outlineLevel = 1 Then
addToArray(outline1, curPara)
ElseIf curPara.outlineLevel = 2 Then
addToArray(outline2, curPara)
Else
addToArray(paragraphs, curPara)
EndIf
successOperation = textCursor.goToNextParagraph(false)
If NOT successOperation Then
Exit Do
EndIf
oViewCursor.goToRange(textCursor,false)
Loop
If UBound(outline1) &gt; -1 Then
Do While startViewPageNum = getPageNumber(pageNumberCursor)
For i = LBound(outline1) To UBound(outline1)
outline1(i).ParaTopMargin = outline1(i).ParaTopMargin + 100
Next i
Loop
For i = LBound(outline1) To UBound(outline1)
If outline1(i).ParaTopMargin &gt;= 100 Then
outline1(i).ParaTopMargin = outline1(i).ParaTopMargin - 100
EndIf
Next i
Exit Sub
EndIf
If UBound(outline2) &gt; -1 Then
Do While startViewPageNum = getPageNumber(pageNumberCursor)
For i = LBound(outline2) To UBound(outline2)
outline2(i).ParaTopMargin = outline2(i).ParaTopMargin + 100
If outline2(i).ParaTopMargin &gt; outline2(i).ParaBottomMargin Then
Exit Do
EndIf
Next i
Loop
For i = LBound(outline2) To UBound(outline2)
If outline2(i).ParaTopMargin &gt;= 100 Then
outline2(i).ParaTopMargin = outline2(i).ParaTopMargin - 100
EndIf
Next i
Exit Sub
EndIf
&apos;Globalscope.BasicLibraries.LoadLibrary( &quot;MRILib&quot; )
&apos;Mri curPara
Dim paraLineSpacing As Object
Dim tmpPageNum As Integer
tmpPageNum = getPageNumber(pageNumberCursor)
If UBound(paragraphs) &gt; -1 Then
Dim iterations As Integer
iterations = 0
Do While startViewPageNum = getPageNumber(pageNumberCursor)
For i = LBound(paragraphs) To UBound(paragraphs)
paraLineSpacing = paragraphs(i).paraLineSpacing
paraLineSpacing.Height = paraLineSpacing.Height + 5
paragraphs(i).paraLineSpacing = paraLineSpacing
Next i
iterations = iterations + 1
If iterations &gt; 4 Then
Exit Do
EndIf
tmpPageNum = getPageNumber(pageNumberCursor)
Loop
For i = LBound(paragraphs) To UBound(paragraphs)
paraLineSpacing = paragraphs(i).paraLineSpacing
paraLineSpacing.Height = paraLineSpacing.Height - 5
paragraphs(i).paraLineSpacing = paraLineSpacing
Next i
Exit Sub
EndIf
oViewCursor.goToRange(oSavePosition,false)
End Sub
Sub adjustLastLine(anchor As Object)
anchor.ParaAdjust = 2
&apos;anchor.ParaLastLineAdjust = 2
balancePara(anchor)
End Sub
Sub adjustFirstLine(anchor As Object)
anchor.ParaFirstLineIndent = 0
End Sub
Function isLowerCase(character As String) As Boolean
Dim charNum As Long
If (character = &quot;&quot;) Then
charNum = ASC(&quot;&quot;+0)
Else
charNum = ASC(character)
End If
If ((charNum &gt; 1071 AND charNum &lt; 1104) Or (charNum &gt; 60 AND charNum &lt; 123)) Then
isLowerCase = true
Exit Function
EndIf
isLowerCase = false
End Function
Sub balancePara(targetPara As Object)
&apos; Globalscope.BasicLibraries.LoadLibrary( &quot;MRILib&quot; )
Dim oViewCursor As Object
Dim oTextCursor As Object
Dim oPara As Object
Dim oParaStart As Object
Dim oParaEnd As Object
Dim paraLen As Integer
Dim lineCount As Integer
Dim initialLineCount As Integer
Dim lineLen As Integer
Dim mathExpect As Integer
Dim minLastLineLength As Integer
paraLen = 0
lineLen = 0
minLastLineLength = 0
initialLineCount = 0
oViewCursor = ThisComponent.CurrentController.getViewCursor()
oViewCursor.goToRange(targetPara, false)
oTextCursor = oViewCursor.Text.createTextCursorByRange(oViewCursor)
oPara = oViewCursor.Text.createTextCursorByRange(oViewCursor)
&apos;Go to start of para
oTextCursor.gotoStartOfParagraph(false)
&apos;Get start position
oParaStart = oTextCursor.getStart()
&apos;Go to end of para
oTextCursor.gotoEndOfParagraph(false)
&apos;Get end position
oParaEnd = oTextCursor.getEnd()
&apos;return Text cursor to start
oTextCursor.goToRange(oParaStart,false)
&apos;oPara is full para cursor
oPara.goToRange(oParaStart,false)
oPara.goToRange(oParaEnd,true)
Do
&apos;Not first iteration
If minLastLineLength &lt;&gt; 0 Then
If oPara.CharKerning &lt; 50 Then
If(IsEmpty(oPara.CharKerning)) Then
oPara.CharKerning = 0
Else
oPara.CharKerning = oPara.CharKerning + 2
End If
Else
&apos;Failed to balance para
Exit Sub
EndIf
EndIf
oViewCursor.goToRange(oParaStart,false)
oTextCursor.goToRange(oParaStart,false)
lineCount = 0
While NOT oTextCursor.isEndOfParagraph()
oViewCursor.gotoEndOfLine(true)
oTextCursor = oViewCursor.Text.createTextCursorByRange(oViewCursor)
lineLen = Len(oTextCursor.getString())
paraLen = paraLen + lineLen
lineCount = lineCount + 1
oViewCursor.collapseToEnd()
Wend
&apos;set initial line count
If initialLineCount = 0 Then
initialLineCount = lineCount
ElseIf lineCount &gt; initialLineCount Then
&apos;Undo last iteration as line overflow happened.
&apos;And exit
If(IsEmpty(oPara.CharKerning)) Then
oPara.CharKerning = 0
Else
oPara.CharKerning = oPara.CharKerning - 2
End If
Exit sub
EndIf
mathExpect = paraLen / lineCount
minLastLineLength = mathExpect * 0.9
Loop Until minLastLineLength &lt; lineLen
End Sub
Sub convertBookmarksToFootnotes()
Dim description As String
description = getTranslation(&quot;convertIndesignFoonotesConfirmation&quot;)
If NOT confirm(description) Then
Exit Sub
EndIf
Dim bookmarks as Object
Dim bookmarkName as String
Dim bookmarkNames() As String
Dim strStart As Integer
Dim linkPrefix As String
Dim backLinkSuffix As String
Dim backwardLink As String
Dim forwardLink As String
Dim forward As Object
Dim backward As Object
linkPrefix = &quot;footnote-&quot;
backLinkSuffix = &quot;-backlink&quot;
Dim i As Integer
bookmarkName = ThisComponent.Links.ElementNames(6)
bookmarks = ThisComponent.Links.getByName(bookmarkName)
bookmarkNames = bookmarks.getElementNames()
For i = LBound(bookmarkNames) To Ubound(bookmarkNames)
bookmarkName = bookmarkNames(i)
If InStr(bookmarkName, linkPrefix) = 1 Then
forwardLink = &quot;&quot;
backwardLink = &quot;&quot;
If InStr(bookmarkName, backLinkSuffix) &gt; 0 Then
forwardLink = Left(bookmarkName,Len(bookmarkName) - Len(backLinkSuffix))
backwardLink = bookmarkName
Else
forwardLink = bookmarkName
backwardLink = bookmarkName + backLinkSuffix
EndIf
convertLinkToFootnote(forwardLink,backwardLink)
EndIf
Next i
resetNotesStyle
MsgBox getTranslation(&quot;convertIndesignFootnotesFinish&quot;)
End Sub
Sub convertLinkToFootnote(forwardLink,backwardLink)
Dim bookMarkName As String
bookmarkName = ThisComponent.Links.ElementNames(6)
Dim bookmarks As Object
bookmarks = ThisComponent.Links.getByName(bookmarkName)
Dim forward As Object
Dim backward As Object
Dim oViewCursor As Object
Dim footNoteSign As String
oViewCursor = ThisComponent.CurrentController.getViewCursor()
Dim oTextCursor As Object
If NOT bookmarks.hasByName(forwardLink) OR NOT bookmarks.hasByName(backwardLink) Then
exit sub
&apos;If msgbox( &quot;NO SuCH LINK&quot;, 36 ) = 6 Then Stop
EndIf
forward = bookmarks.getByName(forwardLink)
backward = bookmarks.getByName(backwardLink)
oViewCursor.goToRange(forward.Anchor,false)
footNoteSign = oViewCursor.getString()
removeTextInFootnote()
oTextCursor = oViewCursor.Text.createTextCursorByRange(oViewCursor)
oTextCursor.gotoEndOfParagraph(false)
oTextCursor.gotoStartOfParagraph(true)
oViewCursor.goToRange(oTextCursor,true)
unoCut()
SendRM
oViewCursor.goToRange(backward.Anchor,false)
removeFootnoteSignInText
createFootnote
unoPaste()
oViewCursor.getText.setLabel(footNoteSign)
forward.dispose()
backward.dispose()
End Sub
Sub removeTextInFootnote
Dim oViewCursor As Object
Dim character As String
oViewCursor = ThisComponent.CurrentController.getViewCursor()
oViewCursor.goRight(1,true)
character = oViewCursor.String
Do While isLinkCharacter(character)
oViewCursor.String = &quot;&quot;
oViewCursor.goRight(1,true)
character = oViewCursor.String
Loop
If oViewCursor.String = &quot; &quot; Then
oViewCursor.String = &quot;&quot;
Else
oViewCursor.goLeft(1,false)
EndIf
oViewCursor.goLeft(1,true)
character = oViewCursor.String
Do While isLinkCharacter(character)
oViewCursor.String = &quot;&quot;
oViewCursor.goLeft(1,true)
character = oViewCursor.String
Loop
oViewCursor.goRight(1,false)
End Sub
Sub removeFootnoteSignInText
Dim oViewCursor As Object
Dim character As String
oViewCursor = ThisComponent.CurrentController.getViewCursor()
oViewCursor.goLeft(1,true)
character = oViewCursor.String
Do While isLinkCharacter(character)
oViewCursor.String = &quot;&quot;
oViewCursor.goLeft(1,true)
character = oViewCursor.String
Loop
oViewCursor.goRight(1,false)
End Sub
Function isLinkCharacter(character As String) As Boolean
Select Case character
Case &quot;[&quot;
isLinkCharacter = true
Exit Function
Case &quot;]&quot;
isLinkCharacter = true
Exit Function
Case &quot;0&quot;
isLinkCharacter = true
Exit Function
Case &quot;1&quot;
isLinkCharacter = true
Exit Function
Case &quot;2&quot;
isLinkCharacter = true
Exit Function
Case &quot;3&quot;
isLinkCharacter = true
Exit Function
Case &quot;4&quot;
isLinkCharacter = true
Exit Function
Case &quot;5&quot;
isLinkCharacter = true
Exit Function
Case &quot;6&quot;
isLinkCharacter = true
Exit Function
Case &quot;7&quot;
isLinkCharacter = true
Exit Function
Case &quot;8&quot;
isLinkCharacter = true
Exit Function
Case &quot;9&quot;
isLinkCharacter = true
Exit Function
Case Else
isLinkCharacter = false
End Select
End Function
sub unoCut
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService(&quot;com.sun.star.frame.DispatchHelper&quot;)
dispatcher.executeDispatch(document, &quot;.uno:Cut&quot;, &quot;&quot;, 0, Array())
end sub
sub unoPaste
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService(&quot;com.sun.star.frame.DispatchHelper&quot;)
dispatcher.executeDispatch(document, &quot;.uno:Paste&quot;, &quot;&quot;, 0, Array())
end sub
sub createFootnote
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;)
dispatcher.executeDispatch(document, &quot;.uno:InsertFootnote&quot;, &quot;&quot;, 0, Array())
end Sub
Dim oDialog
Sub onSelectMenuItem(oEvent)
oDialog.endExecute()
oDialog.model.Tag = oEvent.ActionCommand
End Sub
Sub replaceParaStyle
dim oldStyleName As String
dim oldStyle As Object
dim newStyleName As String
dim paragraphStyles As Object
dim userInput As Integer
Dim listBox As Object
Dim paraStyle As Object
Dim oViewCursor As Object
Dim enum1 As Object
Dim oTextCursor As Object
Dim i As Integer
oStyles = ThisComponent.StyleFamilies
paraStyles = oStyles.getByName(oStyles.elementNames(1))
oViewCursor = ThisComponent.CurrentController.getViewCursor()
oldStyleName = oViewCursor.ParaStyleName
paraStyleNames = paraStyles.ElementNames
Dim displayParaStyleNames(Ubound(paraStyleNames))
Dim sortedDPSN(Ubound(paraStyleNames))
displayParaStyleNames = paraStyleNames
Redim Preserve displayParaStyleNames(Ubound(paraStyleNames))
For i = LBound(displayParaStyleNames) To Ubound(displayParaStyleNames)
paraStyle = paraStyles.getByName(displayParaStyleNames(i))
displayParaStyleNames(i) = paraStyle.displayName
Next i
sortedDPSN = displayParaStyleNames
Redim Preserve sortedDPSN(Ubound(paraStyleNames))
subShellSort(sortedDPSN)
DialogLibraries.LoadLibrary(&quot;ePublishing&quot;)
oDialog = CreateUnoDialog( DialogLibraries.ePublishing.replaceParaStyle )
listBox = oDialog.getControl(&quot;ListBox1&quot;)
listBox.addItems(sortedDPSN , 0)
oDialog.Title = getTranslation(&quot;replaceParaStyleDialogTitle&quot;)
oDialog.Execute()
newStyleName = oDialog.model.Tag
If newStyleName=&quot;0&quot; or newStyleName=&quot;&quot; Then
Exit sub
EndIf
foundIndex = getIndex(displayParaStyleNames, newStyleName)
&apos;set style system name instead of display name
newStyleName = paraStyleNames(foundIndex)
If newStyleName = oldStyleName Then
MsgBox getTranslation(&quot;replaceParaStyleStylesEqualsNotification&quot;)
Exit sub
EndIf
If oldStyleName &lt;&gt; &quot;&quot; Then
oldStyle = paraStyles.getByName(oldStyleName)
If NOT oldStyle.isUserDefined Then
MsgBox getTranslation(&quot;replaceParaStyleCurrentStyleIsStandard&quot;)
Exit sub
EndIf
oldStyle.ParentStyle = newStyleName
paraStyles.removeByName(oldStyleName)
EndIf
oTextCursor = oViewCursor.Text.createTextCursorByRange(oViewCursor)
enum1 = oTextCursor.createEnumeration()
While enum1.hasMoreElements
enum1Element = enum1.nextElement
If enum1Element.supportsService(&quot;com.sun.star.text.Paragraph&quot;) Then
If enum1Element.ParaStyleName &lt;&gt; newStyleName Then
oldStyle = paraStyles.getByName(enum1Element.ParaStyleName)
oldStyle.ParentStyle = newStyleName
paraStyles.removeByName(enum1Element.ParaStyleName)
EndIf
EndIf
Wend
End Sub
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(array)
nLen = len(value)
while id &lt;= nRight
If array(id) = value Then
getIndex = id
exit Function
Else
id = id + 1
end if
wend
getIndex = -1
End Function
Sub subShellSort(mArray)
Dim n As Integer
Dim h As Integer
Dim i As Integer
Dim j As Integer
Dim t As String
Dim Ub As Integer
Dim LB As Integer
Lb = lBound(mArray)
Ub = uBound(mArray)
&apos; compute largest increment
n = Ub - Lb + 1
h = 1
If n &gt; 14 then
do while h &lt; n
h = 3 * h + 1
loop
h = h \ 3
h = h \ 3
End If
Do While h &gt; 0
For i = Lb + h to Ub
t = mArray(i)
For j = i - h to Lb step -h
If strComp(mArray(j), t, 0) &lt; 1 then
Exit For
EndIf
mArray(j + h) = mArray(j)
Next j
mArray(j + h) = t
Next i
h = h \ 3
Loop
End Sub
</script:module>