diff --git a/Addons.xcu b/Addons.xcu index ad492f7..c33ea49 100644 --- a/Addons.xcu +++ b/Addons.xcu @@ -96,7 +96,7 @@ Uravnotežite posljednji redak - macro:///ePublishing.Archive.adjustLastLineCurPara + macro:///ePublishing.Archive.balanceCurParaLastLine _self diff --git a/ePublishing/Archive.xba b/ePublishing/Archive.xba index 5666518..2bcf2e3 100644 --- a/ePublishing/Archive.xba +++ b/ePublishing/Archive.xba @@ -1,6 +1,6 @@ -Sub archMark26 +Sub archMark27 End Sub @@ -172,6 +172,7 @@ sub convertIndesignPageBreaks Exit Sub EndIf turnOffTracking() + setZoomToSpeedUpTasks() balanceFootNotes() Dim oViewCursor As Object @@ -231,6 +232,7 @@ sub convertIndesignPageBreaks Wait 100 pageNumber = getPageNumber(oTextCursor.Text.createTextCursorByRange(oTextCursor.End)) EndIf + 'check first character oTextCursor.goRight(1,true) nextPara = oTextCursor.End @@ -261,9 +263,10 @@ sub convertIndesignPageBreaks EndIf End If - If pageNumber - prevPageNumber < 2 Then - 'stretchPrevPage(prevPara) - EndIf + + 'If pageNumber - prevPageNumber < 2 Then + 'stretchPrevPage(prevPara) + 'EndIf prevPageNumber = pageNumber oFound = ThisComponent.findNext(oFound.End, oSearch) @@ -458,6 +461,18 @@ Sub stretchPrevPage() oViewCursor.goToRange(oSavePosition,false) End Sub +Sub balanceCurParaLastLine() + Dim oViewCursor As Object + Dim oTextCursor As Object + Dim paraEnd As Object + Dim success As Boolean + Dim adjustType As Integer + fixViewCursor() + oViewCursor = ThisComponent.CurrentController.getViewCursor() + oViewCursor.ParaIsHyphenation = true + success = balanceParaTail(oViewCursor.Start, false) +End Sub + Sub adjustLastLineCurPara() Dim oViewCursor As Object Dim oTextCursor As Object @@ -477,7 +492,7 @@ Sub adjustLastLineCurPara() adjustType = oTextCursor.ParaAdjust hyph = oTextCursor.ParaIsHyphenation oTextCursor.ParaIsHyphenation = true - success = balanceParaTail(oTextCursor.Start) + success = balanceParaTail(oTextCursor.Start, true) If success And adjustType = 2 Then oTextCursor.ParaLastLineAdjust = 2 Else @@ -506,7 +521,7 @@ Sub balanceFootNote(textElement As Object) enum1Element = enum1.nextElement If enum1Element.supportsService("com.sun.star.text.Paragraph") Then oViewCursor.goToRange(enum1Element,false) - adjustLastLineCurPara() + balanceCurParaLastLine() EndIf Wend End Sub @@ -540,7 +555,7 @@ End Function -Function balanceParaTail(targetPara As Object) As Boolean +Function balanceParaTail(targetPara As Object, strictMode As Boolean) As Boolean Dim oViewCursor As Object Dim oTextCursor As Object Dim oContent As Object @@ -553,10 +568,10 @@ Function balanceParaTail(targetPara As Object) As Boolean oContentStart = getParaStart(oTextCursor) oContentEnd = getParaEnd(oTextCursor) oContent = getParaSelected(oContentStart,oContentEnd) - balanceParaTail = balanceContentTail(oContent) + balanceParaTail = balanceContentTail(oContent, strictMode) End Function -Function balanceContentTail(oContent As Object) As Boolean +Function balanceContentTail(oContent As Object, strictMode As Boolean) As Boolean ' Globalscope.BasicLibraries.LoadLibrary( "MRILib" ) balanceContentTail = false Dim oViewCursor As Object @@ -564,20 +579,18 @@ Function balanceContentTail(oContent As Object) As Boolean Dim lineCount As Integer Dim initialLineCount As Integer Dim lineLen As Integer + Dim initialLineLen As Integer Dim minLastLineLength As Integer Dim medianLen As Integer Dim paraLines() As Object - Dim decreaseKerningFailed As Boolean - Dim increaseKerningFailed As Boolean Dim fallBackSuccess As Boolean fallBackSuccess = false - decreaseKerningFailed = false - increaseKerningFailed = false oViewCursor = ThisComponent.CurrentController.getViewCursor() paraLen = Len(oContent.String) paraLines = getContentLines(oContent) initialLineCount = getParaLinesCount(paraLines) lineLen = getParaLineLength(paraLines, 0) + initialLineLen = lineLen medianLen = calculateMedianParaLen(oContent) minLastLineLength = medianLen * 0.93 @@ -600,9 +613,20 @@ Function balanceContentTail(oContent As Object) As Boolean 'Tightened last line but it is still smaller than we need fallBackSuccess = tryExpandPrevLines(oContent, minLastLineLength) If Not fallBackSuccess Then - oContent.CharKerning = initialCharKerning + If strictMode Then + oContent.CharKerning = initialCharKerning + balanceContentTail = false + Else + paraLines = getContentLines(oContent) + lineLen = getParaLineLength(paraLines,0) + If (lineLen < initialLineLen) Then + oContent.CharKerning = initialCharKerning + balanceContentTail = false + Else + balanceContentTail = true + EndIf + EndIf oViewCursor.collapseToEnd() - balanceContentTail = false Exit Function EndIf Exit Do @@ -657,10 +681,15 @@ End Function Function tryExpandPrevLines(oPara As Object, minLastLineLength As Integer) As Boolean Dim lineCount As Integer + Dim finishLineCount As Integer Dim initialLineCount As Integer Dim paraLine As Object + Dim finishLastline As Object Dim lineNum As Integer Dim failedLines() As Integer + Dim lastLineCharKerning As Integer + Dim paraLines() As Object + Dim lineCharKerning As Integer paraLines = getContentLines(oPara) lineLen = getParaLineLength(paraLines,0) initialLineCount = getParaLinesCount(paraLines) @@ -677,9 +706,16 @@ Function tryExpandPrevLines(oPara As Object, minLastLineLength As Integer) As Bo lineLen = getParaLineLength(paraLines,0) If lineNum > 1 And (lineCount <> initialLineCount Or paraLine.CharKerning > MAX_CHAR_KERNING) Then AddToArray(failedLines, lineNum) - decreaseCharKerning(paraLine) + lineCharKerning = decreaseCharKerning(paraLine) paraLines = getContentLines(oPara) lineCount = getParaLinesCount(paraLines) + If lineCount > initialLineCount Then + Do While lineCount > initialLineCount And lineCharKerning > MIN_CHAR_KERNING + lineCharKerning = decreaseCharKerning(paraLine) + paraLines = getContentLines(oPara) + lineCount = getParaLinesCount(paraLines) + Loop + EndIf lineLen = getParaLineLength(paraLines,0) lineNum = 0 ElseIf lineNum = 1 And paraLine.CharKerning > MAX_CHAR_KERNING Then @@ -692,8 +728,50 @@ Function tryExpandPrevLines(oPara As Object, minLastLineLength As Integer) As Bo Else tryExpandPrevLines = false EndIf + normalizeLastLine(oPara) + + End Function +Sub normalizeLastLine(oPara As Object) + Dim lineCount As Integer + Dim finishLineCount As Integer + Dim initialLineCount As Integer + Dim paraLine As Object + Dim finishLastline As Object + Dim lineNum As Integer + Dim failedLines() As Integer + Dim lastLineCharKerning As Integer + Dim paraLines() As Object + Dim oTextCursor As Object + oTextCursor = oPara.Text.createTextCursorByRange(oPara) + oTextCursor.collapseToEnd() + If ( oTextCursor.CharKerning > 0 ) Then + Exit Sub + EndIf + + 'increase last line kerning to 0 + paraLines = getContentLines(oPara) + lineCount = getParaLinesCount(paraLines) + finishLineCount = lineCount + finishLastline = paraLines(UBound(paraLines)) + 'try just set 0 char kerning to last line, reduce kerning if failed + lastLineCharKerning = 0 + finishLastline.CharKerning = lastLineCharKerning + paraLines = getContentLines(oPara) + lineCount = getParaLinesCount(paraLines) + If lineCount > finishLineCount Then + Do While lineCount > finishLineCount AND lastLineCharKerning > MIN_CHAR_KERNING + lastLineCharKerning = lastLineCharKerning - 2 + finishLastline.CharKerning = lastLineCharKerning + paraLines = getContentLines(oPara) + lineCount = getParaLinesCount(paraLines) + Loop + EndIf + +End Sub + + Function getParaLinesCount(paraLines() As Object) As Integer getParaLinesCount = UBound(paraLines) + 1 @@ -739,7 +817,7 @@ Function getContentLines(oContent As Object) As Variant getContentLines = paraLines End Function -Sub decreaseCharKerning(oPara As Object) +Function decreaseCharKerning(oPara As Object) As Integer Dim initialCharKerning As Integer Dim textExcerpts As Object Dim textExcerpt As Object @@ -750,9 +828,10 @@ Sub decreaseCharKerning(oPara As Object) If (initialCharKerning >= MIN_CHAR_KERNING) Then oPara.CharKerning = initialCharKerning - 2 EndIf -End Sub + decreaseCharKerning = initialCharKerning - 2 +End Function -Sub increaseCharKerning(oPara As Object) +Function increaseCharKerning(oPara As Object) As Integer Dim initialCharKerning As Integer Dim textExcerpts As Object Dim textExcerpt As Object @@ -761,7 +840,9 @@ Sub increaseCharKerning(oPara As Object) initialCharKerning = oPara.CharKerning EndIf oPara.CharKerning = initialCharKerning + 2 -End Sub + increaseCharKerning = initialCharKerning + 2 +End Function + Function lastLineIsNotBalanced(lineLen As Integer,minLastLineLength As Integer) As Boolean lastLineIsNotBalanced = true If lineLen = 0 Then @@ -1162,4 +1243,26 @@ Sub subShellSort(mArray) h = h \ 3 Loop End Sub + +sub setZoomToSpeedUpTasks + dim document as object + dim dispatcher as object + dim args1(2) as new com.sun.star.beans.PropertyValue + dim args2(1) as new com.sun.star.beans.PropertyValue + + document = ThisComponent.CurrentController.Frame + dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") + args1(0).Name = "Zoom.Value" + args1(0).Value = 60 + args1(1).Name = "Zoom.ValueSet" + args1(1).Value = 28703 + args1(2).Name = "Zoom.Type" + args1(2).Value = 0 + dispatcher.executeDispatch(document, ".uno:Zoom", "", 0, args1()) + args2(0).Name = "ViewLayout.Columns" + args2(0).Value = 1 + args2(1).Name = "ViewLayout.BookMode" + args2(1).Value = false + dispatcher.executeDispatch(document, ".uno:ViewLayout", "", 0, args2()) +end sub \ No newline at end of file diff --git a/ePublishing/Hyphenations.xba b/ePublishing/Hyphenations.xba index 0ad9425..48e670e 100644 --- a/ePublishing/Hyphenations.xba +++ b/ePublishing/Hyphenations.xba @@ -15,6 +15,7 @@ Private Sub convertHyphInDoc() statusIndicator = ThisComponent.getCurrentController.StatusIndicator statusIndicator.Start(getTranslation("hyphenationsInProgress"),10) turnOffTracking + setZoomToSpeedUpTasks() AcceptAllTrackedChanges convertHyphInText(ThisComponent.Text) ' Globalscope.BasicLibraries.LoadLibrary( "MRILib" ) diff --git a/ePublishing/journals.xba b/ePublishing/journals.xba index 9c7c1f0..6cb8553 100644 --- a/ePublishing/journals.xba +++ b/ePublishing/journals.xba @@ -29,6 +29,7 @@ Private Sub makeUpIssue If NOT confirm(description) Then Exit Sub EndIf + setZoomToSpeedUpTasks() EIFN = "ЭиФН" PHA = "ФА" @@ -1316,7 +1317,7 @@ Function shrinkPageContent() As Boolean decreaseContentCharHeight(targetContent(i), delta) EndIf If shrinkContentWithKerning(targetContent(i)) Then - balanceContentTail(targetContent(i)) + balanceContentTail(targetContent(i),false) EndIf If isContentPageChanged(initPosition, initPageNum) Then Exit Function