Added archives menu
This commit is contained in:
parent
dbf6d1d49e
commit
03789e78c7
4 changed files with 442 additions and 1 deletions
36
Addons.xcu
36
Addons.xcu
|
@ -70,6 +70,42 @@
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
|
<node oor:name="Submenu">
|
||||||
|
<node oor:name="archiveMenu" oor:op="replace">
|
||||||
|
<prop oor:name="Title" oor:type="xs:string">
|
||||||
|
<value xml:lang="en">Archive</value>
|
||||||
|
<value xml:lang="ru">Архив</value>
|
||||||
|
</prop>
|
||||||
|
<node oor:name="Submenu">
|
||||||
|
<node oor:name="footnotesRecovery" oor:op="replace">
|
||||||
|
<prop oor:name="URL" oor:type="xs:string">
|
||||||
|
<value>macro:///ePublishing.Archive.convertBookmarksToFootnotes</value>
|
||||||
|
</prop>
|
||||||
|
<prop oor:name="Target" oor:type="xs:string">
|
||||||
|
<value>_self</value>
|
||||||
|
</prop>
|
||||||
|
<prop oor:name="Title" oor:type="xs:string">
|
||||||
|
<value/>
|
||||||
|
<value xml:lang="en">Recovery footnotes from text</value>
|
||||||
|
<value xml:lang="ru">Восстановление сносок из текста</value>
|
||||||
|
</prop>
|
||||||
|
</node>
|
||||||
|
<node oor:name="pageBreaksRecovery" oor:op="replace">
|
||||||
|
<prop oor:name="URL" oor:type="xs:string">
|
||||||
|
<value>macro:///ePublishing.Archive.convertIndesignPageBreaks</value>
|
||||||
|
</prop>
|
||||||
|
<prop oor:name="Target" oor:type="xs:string">
|
||||||
|
<value>_self</value>
|
||||||
|
</prop>
|
||||||
|
<prop oor:name="Title" oor:type="xs:string">
|
||||||
|
<value/>
|
||||||
|
<value xml:lang="en">PageBreaks recovery</value>
|
||||||
|
<value xml:lang="ru">Восстановление разрывов страниц</value>
|
||||||
|
</prop>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
<node oor:name="Submenu">
|
<node oor:name="Submenu">
|
||||||
<node oor:name="cleanConfigure" oor:op="replace">
|
<node oor:name="cleanConfigure" oor:op="replace">
|
||||||
<prop oor:name="Context" oor:type="xs:string">
|
<prop oor:name="Context" oor:type="xs:string">
|
||||||
|
|
401
ePublishing/Archive.xba
Normal file
401
ePublishing/Archive.xba
Normal file
|
@ -0,0 +1,401 @@
|
||||||
|
<?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 archMark2
|
||||||
|
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Sub resetNotesStyle
|
||||||
|
Dim oDescriptor 'The search descriptor
|
||||||
|
dim dispatcher as Object
|
||||||
|
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
|
||||||
|
dim document as Object
|
||||||
|
document = ThisComponent.CurrentController.Frame
|
||||||
|
Dim oViewCursor As Object 'View cursor
|
||||||
|
oViewCursor = ThisComponent.CurrentController.getViewCursor()
|
||||||
|
allNotes= thisComponent.FootNotes
|
||||||
|
for x = 0 to allNotes.Count -1
|
||||||
|
aNote = allNotes.getByIndex(x)
|
||||||
|
aNote.Anchor.CharStyleName="Footnote anchor"
|
||||||
|
oEnum = aNote.Text.createEnumeration()
|
||||||
|
Do While oEnum.hasMoreElements()
|
||||||
|
oCurPar = oEnum.nextElement()
|
||||||
|
oCurPar.ParaStyleName = "Footnote"
|
||||||
|
Loop
|
||||||
|
Next
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Sub createBidirectLink
|
||||||
|
Dim oSelections 'Contains all of the selections
|
||||||
|
Dim oAnchor1
|
||||||
|
Dim oAnchor2
|
||||||
|
|
||||||
|
If IsNull(ThisComponent) Then
|
||||||
|
MsgBox "Ничего не выбрано"
|
||||||
|
Exit Sub
|
||||||
|
End If
|
||||||
|
oSelections = ThisComponent.getCurrentSelection()
|
||||||
|
If IsNull(oSelections) Then
|
||||||
|
MsgBox "Ничего не выбрано"
|
||||||
|
Exit Sub
|
||||||
|
End If
|
||||||
|
objectsCount = oSelections.getCount() - 1
|
||||||
|
If oSelections.getCount() = 0 Then
|
||||||
|
MsgBox "Ничего не выбрано"
|
||||||
|
Exit Sub
|
||||||
|
End If
|
||||||
|
If oSelections.getCount() <= 2 Then
|
||||||
|
MsgBox "Нужно выделить два объекта, а не " + objectsCount
|
||||||
|
Exit Sub
|
||||||
|
End If
|
||||||
|
If oSelections.getCount() > 3 Then
|
||||||
|
MsgBox "Нужно выделить только два объекта, а не " + objectsCount
|
||||||
|
Exit Sub
|
||||||
|
End If
|
||||||
|
|
||||||
|
oAnchor1 = oSelections.getByIndex(1)
|
||||||
|
oAnchor2 = oSelections.getByIndex(2)
|
||||||
|
oAnchor1Name = RND_String()
|
||||||
|
oAnchor2Name = RND_String()
|
||||||
|
createAnchor(oAnchor1,oAnchor1Name)
|
||||||
|
createAnchor(oAnchor2,oAnchor2Name)
|
||||||
|
createLink(oAnchor1,oAnchor1.String,oAnchor2Name)
|
||||||
|
createLink(oAnchor2,oAnchor2.String,oAnchor1Name)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Sub createAnchor(targetRange as Object,anchorName as String)
|
||||||
|
dim oViewCursor as object
|
||||||
|
dim document as object
|
||||||
|
dim dispatcher as object
|
||||||
|
document = ThisComponent.CurrentController.Frame
|
||||||
|
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
|
||||||
|
oViewCursor = ThisComponent.CurrentController.getViewCursor()
|
||||||
|
oViewCursor.gotoRange(targetRange,false)
|
||||||
|
dim args1(0) as new com.sun.star.beans.PropertyValue
|
||||||
|
args1(0).Name = "Bookmark"
|
||||||
|
args1(0).Value = anchorName
|
||||||
|
dispatcher.executeDispatch(document, ".uno:InsertBookmark", "", 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("com.sun.star.frame.DispatchHelper")
|
||||||
|
oViewCursor = ThisComponent.CurrentController.getViewCursor()
|
||||||
|
oViewCursor.gotoRange(targetRange,false)
|
||||||
|
dim args2(4) as new com.sun.star.beans.PropertyValue
|
||||||
|
args2(0).Name = "Hyperlink.Text"
|
||||||
|
args2(0).Value = linkName
|
||||||
|
args2(1).Name = "Hyperlink.URL"
|
||||||
|
args2(1).Value = "#"+linkURL
|
||||||
|
args2(2).Name = "Hyperlink.Target"
|
||||||
|
args2(2).Value = ""
|
||||||
|
args2(3).Name = "Hyperlink.Name"
|
||||||
|
args2(3).Value = linkName
|
||||||
|
args2(4).Name = "Hyperlink.Type"
|
||||||
|
args2(4).Value = 1
|
||||||
|
dispatcher.executeDispatch(document, ".uno:SetHyperlink", "", 0, args2())
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Function RND_String
|
||||||
|
Dim OutputString As String
|
||||||
|
Dim TempString As String
|
||||||
|
Dim i as Long
|
||||||
|
|
||||||
|
OutputString=""
|
||||||
|
randomize
|
||||||
|
|
||||||
|
for i = 1 to 20
|
||||||
|
|
||||||
|
Select Case i
|
||||||
|
Case 5, 8, 11, 14
|
||||||
|
OutputString=OutputString+"-"
|
||||||
|
Case Else
|
||||||
|
TempString=Hex(int(rnd*256))
|
||||||
|
if len(TempString)<2 then TempString=TempString+"0"
|
||||||
|
OutputString=OutputString+TempString
|
||||||
|
End Select
|
||||||
|
next i
|
||||||
|
|
||||||
|
RND_String = OutputString
|
||||||
|
End Function
|
||||||
|
|
||||||
|
|
||||||
|
sub convertIndesignPageBreaks
|
||||||
|
|
||||||
|
document = ThisComponent.CurrentController.Frame
|
||||||
|
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
|
||||||
|
oViewCursor = thisComponent.getCurrentController.getViewCursor
|
||||||
|
oViewCursor.jumpToFirstPage
|
||||||
|
Dim args(0) as new com.sun.star.beans.PropertyValue
|
||||||
|
|
||||||
|
rem Turn off tracking changes to prevent infinite
|
||||||
|
args(0).Name = "TrackChanges"
|
||||||
|
args(0).Value = false
|
||||||
|
dispatcher.executeDispatch(document, ".uno:TrackChanges", "", 0, args())
|
||||||
|
|
||||||
|
Dim oSearch
|
||||||
|
Dim oTextCursor
|
||||||
|
Dim lineIndent
|
||||||
|
Dim firstLowercase As Boolean
|
||||||
|
Dim charNum As Long
|
||||||
|
Dim character As String
|
||||||
|
firstLowercase = false
|
||||||
|
|
||||||
|
oSearch = ThisComponent.createSearchDescriptor()
|
||||||
|
oSearch.SearchString = "---XYXYX---"
|
||||||
|
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 = ""
|
||||||
|
oTextCursor.BreakType = com.sun.star.style.BreakType.PAGE_BEFORE
|
||||||
|
|
||||||
|
'check first character
|
||||||
|
oTextCursor.goRight(1,true)
|
||||||
|
If (isLowerCase(oTextCursor.getString())) Then
|
||||||
|
oTextCursor.ParaFirstLineIndent = 0
|
||||||
|
firstLowercase = true
|
||||||
|
End If
|
||||||
|
'check last character
|
||||||
|
oTextCursor.goLeft(2,false)
|
||||||
|
oTextCursor.goLeft(1,true)
|
||||||
|
character = oTextCursor.getString()
|
||||||
|
If (character = " ") Then
|
||||||
|
oTextCursor.String=""
|
||||||
|
adjustLastLine(oTextCursor)
|
||||||
|
adjustFirstLine(oTextCursor)
|
||||||
|
EndIf
|
||||||
|
If (isLowerCase(character)) Then
|
||||||
|
If firstLowercase Then
|
||||||
|
oTextCursor.collapseToEnd()
|
||||||
|
oTextCursor.setString("-")
|
||||||
|
oTextCursor.collapseToEnd()
|
||||||
|
adjustLastLine(oTextCursor)
|
||||||
|
adjustFirstLine(oTextCursor)
|
||||||
|
EndIf
|
||||||
|
End If
|
||||||
|
oFound = ThisComponent.findNext(oFound.End, oSearch)
|
||||||
|
Loop
|
||||||
|
|
||||||
|
end Sub
|
||||||
|
|
||||||
|
Sub adjustLastLine(oTextCursor)
|
||||||
|
oTextCursor.ParaAdjust = 2
|
||||||
|
oTextCursor.ParaLastLineAdjust = 2
|
||||||
|
balancePara(oTextCursor)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Sub adjustFirstLine(oTextCursor)
|
||||||
|
oTextCursor.goRight(1,false)
|
||||||
|
oTextCursor.ParaFirstLineIndent = 0
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
|
||||||
|
Function isLowerCase(character)
|
||||||
|
If (character = "") Then
|
||||||
|
charNum = ASC(""+0)
|
||||||
|
Else
|
||||||
|
charNum = ASC(character)
|
||||||
|
End If
|
||||||
|
If ((charNum > 1071 AND charNum < 1104) Or (charNum > 60 AND charNum < 123)) Then
|
||||||
|
isLowerCase = true
|
||||||
|
Exit Function
|
||||||
|
EndIf
|
||||||
|
isLowerCase = false
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Sub balancePara(Optional targetPara As Object)
|
||||||
|
' Globalscope.BasicLibraries.LoadLibrary( "MRILib" )
|
||||||
|
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()
|
||||||
|
If NOT IsMissing(targetPara) Then
|
||||||
|
oViewCursor.goToRange(targetPara, false)
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
oTextCursor = oViewCursor.Text.createTextCursorByRange(oViewCursor)
|
||||||
|
oPara = oViewCursor.Text.createTextCursorByRange(oViewCursor)
|
||||||
|
'Go to start of para
|
||||||
|
oTextCursor.gotoStartOfParagraph(false)
|
||||||
|
'Get start position
|
||||||
|
oParaStart = oTextCursor.getStart()
|
||||||
|
'Go to end of para
|
||||||
|
oTextCursor.gotoEndOfParagraph(false)
|
||||||
|
'Get end position
|
||||||
|
oParaEnd = oTextCursor.getEnd()
|
||||||
|
'return Text cursor to start
|
||||||
|
oTextCursor.goToRange(oParaStart,false)
|
||||||
|
'oPara is full para cursor
|
||||||
|
oPara.goToRange(oParaStart,false)
|
||||||
|
oPara.goToRange(oParaEnd,true)
|
||||||
|
|
||||||
|
Do
|
||||||
|
'Not first iteration
|
||||||
|
If minLastLineLength <> 0 Then
|
||||||
|
If oPara.CharKerning < 30 Then
|
||||||
|
If(IsEmpty(oPara.CharKerning)) Then
|
||||||
|
oPara.CharKerning = 0
|
||||||
|
Else
|
||||||
|
oPara.CharKerning = oPara.CharKerning + 2
|
||||||
|
End If
|
||||||
|
Else
|
||||||
|
'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
|
||||||
|
'set initial line count
|
||||||
|
If initialLineCount = 0 Then
|
||||||
|
initialLineCount = lineCount
|
||||||
|
ElseIf lineCount > initialLineCount Then
|
||||||
|
'Undo last iteration as line overflow happened.
|
||||||
|
'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 < lineLen
|
||||||
|
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
|
||||||
|
Sub convertBookmarksToFootnotes()
|
||||||
|
Dim bookmarks as Object
|
||||||
|
Dim bookmarkName 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 = "footnote-"
|
||||||
|
backLinkSuffix = "-backlink"
|
||||||
|
|
||||||
|
bookmarkName = ThisComponent.Links.ElementNames(6)
|
||||||
|
bookmarks = ThisComponent.Links.getByName(bookmarkName)
|
||||||
|
' Mri bookmarks
|
||||||
|
bookmarkNames = bookmarks.getElementNames()
|
||||||
|
For i = LBound(bookmarkNames) To Ubound(bookmarkNames)
|
||||||
|
bookmarkName = bookmarkNames(i)
|
||||||
|
If InStr(bookmarkName, linkPrefix) = 1 Then
|
||||||
|
forwardLink = ""
|
||||||
|
backwardLink = ""
|
||||||
|
If InStr(bookmarkName, backLinkSuffix) > 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
|
||||||
|
|
||||||
|
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
|
||||||
|
'If msgbox( "NO SuCH LINK", 36 ) = 6 Then Stop
|
||||||
|
EndIf
|
||||||
|
forward = bookmarks.getByName(forwardLink)
|
||||||
|
backward = bookmarks.getByName(backwardLink)
|
||||||
|
oViewCursor.goToRange(forward.Anchor,false)
|
||||||
|
footNoteSign = oViewCursor.getString()
|
||||||
|
backspace
|
||||||
|
backspace
|
||||||
|
SendRM
|
||||||
|
oTextCursor = oViewCursor.Text.createTextCursorByRange(oViewCursor)
|
||||||
|
oTextCursor.gotoEndOfParagraph(false)
|
||||||
|
oTextCursor.gotoStartOfParagraph(true)
|
||||||
|
oViewCursor.goToRange(oTextCursor,true)
|
||||||
|
unoCut()
|
||||||
|
SendRM
|
||||||
|
oViewCursor.goToRange(backward.Anchor,false)
|
||||||
|
backspace
|
||||||
|
createFootnote
|
||||||
|
unoPaste()
|
||||||
|
oViewCursor.getText.setLabel(footNoteSign)
|
||||||
|
forward.dispose()
|
||||||
|
backward.dispose()
|
||||||
|
End sub
|
||||||
|
|
||||||
|
|
||||||
|
sub unoCut
|
||||||
|
dim document as object
|
||||||
|
dim dispatcher as object
|
||||||
|
document = ThisComponent.CurrentController.Frame
|
||||||
|
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
|
||||||
|
dispatcher.executeDispatch(document, ".uno:Cut", "", 0, Array())
|
||||||
|
end sub
|
||||||
|
|
||||||
|
sub unoPaste
|
||||||
|
dim document as object
|
||||||
|
dim dispatcher as object
|
||||||
|
document = ThisComponent.CurrentController.Frame
|
||||||
|
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
|
||||||
|
dispatcher.executeDispatch(document, ".uno:Paste", "", 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("com.sun.star.frame.DispatchHelper")
|
||||||
|
dispatcher.executeDispatch(document, ".uno:InsertFootnote", "", 0, Array())
|
||||||
|
end Sub
|
||||||
|
</script:module>
|
|
@ -419,4 +419,7 @@ Private Function confirm(description)
|
||||||
EndIf
|
EndIf
|
||||||
|
|
||||||
End Function
|
End Function
|
||||||
</script:module>
|
|
||||||
|
Sub Macro1
|
||||||
|
|
||||||
|
End Sub</script:module>
|
|
@ -7,4 +7,5 @@
|
||||||
<library:element library:name="Footnotes"/>
|
<library:element library:name="Footnotes"/>
|
||||||
<library:element library:name="TOCLinks"/>
|
<library:element library:name="TOCLinks"/>
|
||||||
<library:element library:name="Album"/>
|
<library:element library:name="Album"/>
|
||||||
|
<library:element library:name="Archive"/>
|
||||||
</library:library>
|
</library:library>
|
Loading…
Add table
Reference in a new issue