diff --git a/Addons.xcu b/Addons.xcu index 67d87a0..d9f7e03 100644 --- a/Addons.xcu +++ b/Addons.xcu @@ -9,6 +9,44 @@ ePublishing + + + + Journals + Журналы + + + + + ePublishing.journals.makeUpIssue + + + _self + + + + Compose articles into issue template + Собрать статьи в шаблон выпуска + + + + + com.example.addon1:Command1 + + + + + + _self + + + Update articles' last page number + Обновить номера последних страниц статей + + + + + @@ -40,8 +78,31 @@ _self - + + + + LanguageTool + + + + + .uno:SpellingAndGrammarDialog + + + Check Text + + + _self + + + com.sun.star.text.TextDocument + + + + + + diff --git a/ePublishing/journals.xba b/ePublishing/journals.xba new file mode 100644 index 0000000..5ed129a --- /dev/null +++ b/ePublishing/journals.xba @@ -0,0 +1,1010 @@ + + +' Globalscope.BasicLibraries.LoadLibrary( "MRILib" ) +' Mri curStyle + +Dim templateName As String +Dim EIFN As String +Dim PHA As String +Dim PQ As String +Dim imagesRelativePath As String +Dim allImagesRelativePath As String +Dim path As String +Dim sectionName As String + +Sub makeUpIssue + turnOffTracking + Dim description As String + description = "Вы уверены, что хотите запустить сборку выпуска ?" + If NOT confirm(description) Then + Exit Sub + EndIf + + EIFN = "ЭиФН" + PHA = "ФА" + PQ = "ВФ" + imagesRelativePath = "/Links/Header/" + allImagesRelativePath = "/Links/Header-icons/" + + Dim statusIndicator as Object + statusIndicator = ThisComponent.getCurrentController.StatusIndicator + Dim oViewCursor As Object + Dim oTextCursor As Object + Dim articleEndPosition As Object + oViewCursor = ThisComponent.CurrentController.getViewCursor() + Dim page As String + Dim firstPage As String + + Dim tmp As String + + sectionName = "" + Dim nSections As Long + oFilename = ThisComponent.Location + + 'Exit if no sections in document or document not saved + If oFilename = "" Then + MsgBox "Сначала сохраните выпуск в папке с файлами статьей" + Exit Sub + End If + + templateName = "" + Dim docUserProperties As Object + docUserProperties = ThisComponent.DocumentProperties.UserDefinedProperties + If docUserProperties.getPropertySetInfo.hasPropertyByName("template") Then + templateName = docUserProperties.template + EndIf + + GlobalScope.BasicLibraries.loadLibrary("Tools") + path=DirectoryNameoutofPath(ThisComponent.getURL(),"/") + + + ' Add article for each section + 'Go to article first page + page = findFirstPageWithStyle("Первая страница статьи") + firstPage = page + oViewCursor.jumpToPage(page) + oTextCursor = oViewCursor.Text.createTextCursorByRange(oViewCursor) + statusIndicator.Start("Сборка выпуска начата, подождите",30) + For i = 1 To 25 + 'Find section file + FilePath = findArticleFile(path,i) + If FilePath="" Then + Exit For + EndIF + 'Add Article + If FileExists(FilePath) Then + oViewCursor.goToRange(oTextCursor,false) + 'Вставить разрыв страницы, если его не было. + oTextCursor.BreakType = 4 + 'Задать стиль первой страницы + If NOT IsEmpty(oTextCursor.NumberingRules) Then + noNumbering + EndIf + setArticlePageStyles(i) + setAritclePageHeaders(i) + page = oViewCursor.getPage() + InsertArticle(FilePath) + turnOffTracking + statusIndicator.setValue(i) + oTextCursor = oViewCursor.Text.createTextCursorByRange(oViewCursor) + oViewCursor.Text.insertControlCharacter(oTextCursor.End,com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK,False) + oTextCursor.collapseToEnd() + + 'set page to next article page number + 'oViewCursor.goToRange(oTextCursor,false) + End If + + fileType = Right(FilePath, 3) + 'Go to first page + oViewCursor.jumpToPage(page) + If fileType = "doc" Then + 'Remove blank page at start + sendRM() + End If + sectionName = getSectionX(sectionName) + setArticleUniqPageStyles(i) + oViewCursor.jumpToPage(page) + setAtricleVars(i) + oViewCursor.jumpToPage(page) + takeWidowLinesIn() + oViewCursor.jumpToPage(page) + ' takeWidowOrphans() + 'Set section name + + + If templateName = "" Then + updateUserField("leftHeader" + i , sectionName ) + ElseIf templateName = PHA Then + updateUserField("leftHeader" + i , sectionName ) + ElseIf templateName = EIFN Then + updateUserField("rightHeader" + i , getArticleHeader() ) + updateUserField("leftHeader" + i , getAuthor ) + EndIf + + + Next i + statusIndicator.setValue(26) + 'remove last empty page + oViewCursor.jumpToPage(page) + oViewCursor.jumpToPage(lastPageNum(i)) + removeEmptyPage() + statusIndicator.setValue(28) + 'Set pageNums + setPageNumbers() + statusIndicator.setValue(29) + + 'Globalscope.BasicLibraries.LoadLibrary( "MRILib" ) + ' Mri oViewCursor + 'Задать нумерацию сносок на каждую главу + 'ThisComponent.FootnoteSettings.FootnoteCounting=1 + 'setHeadingsOutlineLevels + statusIndicator.end() +End Sub + +Sub setPageNumbers() + updateLastPageFields() +End Sub + + +Sub setPageNumbersDeprecated() + Dim oVeiwCursor As Object + Dim pageNum as Integer + Dim firstPage as String + oViewCursor = ThisComponent.CurrentController.getViewCursor() + oViewCursor.jumpToFirstPage() + firstPage = findFirstPageWithStyle("Статья 1 стр.1") + oViewCursor.jumpToPage(firstPage) + For i = 1 To 25 + pageNum = lastPageNum(i) + 'msgBox pageNum + If pageNum = -1 Then + Exit For + End If + updateUserField("article" + i + "LastPage", CStr(pageNum) ) + Next i + +End Sub + +Sub setAtricleVars(i) + 'updateUserField("article" + i + "LastPage", CStr(getArticleLastPage()) ) + updateUserField("article" + i + "UDK", getUDK()) + updateUserField("author" + i + "Copyright", getCopyright() ) + 'updateUserField("rightHeader" + i , getTitleHeader() ) +End Sub + +Function lastPageNum(i) + Dim docLastPage As Integer + Dim curPageNum As Integer + Dim oViewCursor As Object + curPageNum = -1 + oViewCursor = ThisComponent.CurrentController.getViewCursor() + Dim oSavePosition As Object + oSavePosition = oViewCursor.Text.createTextCursorByRange(oViewCursor) + oViewCursor.jumpToLastPage() + oViewCursor.jumpToEndOfPage() + docLastPage = CInt(oViewCursor.getPage()) + oViewCursor.goToRange(oSavePosition,false) + If CInt(oViewCursor.getPage()) = docLastPage Then + lastPageNum = -1 + Exit Function + End If + Dim curPageStyleName As String + curPageStyleName = oViewCursor.PageStyleName + + Do Until InStr(curPageStyleName,"Статья " + CStr(i)) = 0 + curPageNum = CInt(oViewCursor.getPage()) + If curPageNum = docLastPage Then + Exit Do + End If + If curPageNum = 0 Then + MsgBox "Произошла ошибка при нахождении последней страницы статьи" + Exit Do + End If + + oViewCursor.jumpToNextPage() + curPageStyleName = getNextPageStyleName() + If InStr(curPageStyleName,"Статья " + CStr(i+1) + " стр.1") = 1 Then + Exit Do + End If + Loop + lastPageNum = curPageNum +End Function + +Function getUDK() + 'Globalscope.BasicLibraries.LoadLibrary( "MRILib" ) + Dim oViewCursor As Object + Dim oSavePosition As Object + Dim title As String + Dim foundUDK As String + oViewCursor = ThisComponent.CurrentController.getViewCursor() + oSavePosition = oViewCursor.Text.createTextCursorByRange(oViewCursor) + oViewCursor.jumpToStartOfPage() + getFirstTextInStyle("УДК") + foundUDK = oViewCursor.Text.createTextCursorByRange(oViewCursor).getString() + If foundUDK = "" Then + getUDK = "Задать УДК" + Else + getUDK = foundUDK + backspace + sendRM + End If + oViewCursor.goToRange(oSavePosition, false) +End Function + +Function getCopyright() + Dim oViewCursor As Object + Dim oSavePosition As Object + Dim authors As String + Dim finalName As String + Dim tmpStr As String + oViewCursor = ThisComponent.CurrentController.getViewCursor() + oSavePosition = oViewCursor.Text.createTextCursorByRange(oViewCursor) + getFirstTextInStyle("Автор") + authors = oViewCursor.Text.createTextCursorByRange(oViewCursor).getString() + If authors <> "" Then + finalName = Trim(authors) + If Len(finalName) >= 1 Then + If Right(finalName, 1) = "." Then + getCopyright = "© " + finalName + oViewCursor.goToRange(oSavePosition, false) + Exit Function + EndIf + EndIf + If Len(authors) >= 4 Then + leftSide = Right(authors,Len(authors)-4) + rightSide = Left(authors,4) + finalName = Trim(leftSide) + " " + rightSide + If Right(finalName, 1) <> "." Then + getCopyright = "© " + Trim(authors) + Else + getCopyright = "© " + finalName + EndIf + oViewCursor.goToRange(oSavePosition, false) + Exit Function + Else + getCopyright = "© " + "Фамилия И.О." + EndIf + End If + oViewCursor.goToRange(oSavePosition, false) +End Function + +Function getAuthor() + Dim oViewCursor As Object + Dim oSavePosition As Object + Dim authors As String + oViewCursor = ThisComponent.CurrentController.getViewCursor() + oSavePosition = oViewCursor.Text.createTextCursorByRange(oViewCursor) + getFirstTextInStyle("Автор") + authors = oViewCursor.Text.createTextCursorByRange(oViewCursor).getString() + If authors <> "" Then + getAuthor = authors + Else + getAuthor = "Фамилия И.О." + End If + oViewCursor.goToRange(oSavePosition, false) +End Function + +Function getArticleHeader() + Dim oViewCursor As Object + Dim oSavePosition As Object + Dim authors As String + oViewCursor = ThisComponent.CurrentController.getViewCursor() + oSavePosition = oViewCursor.Text.createTextCursorByRange(oViewCursor) + getFirstTextInStyle("Заголовок 2") + articleHeader = oViewCursor.Text.createTextCursorByRange(oViewCursor).getString() + If articleHeader <> "" Then + getArticleHeader = articleHeader + Else + getArticleHeader = "Название статьи" + End If + oViewCursor.goToRange(oSavePosition, false) +End Function + +Function getSectionX(section) + Dim oViewCursor As Object + Dim oSavePosition As Object + Dim startPage As String + Dim endPage As String + If section = "" Then + section = "Задайте название радела!" + End If + oViewCursor = ThisComponent.CurrentController.getViewCursor() + startPage = oViewcursor.getPage() + oSavePosition = oViewCursor.Text.createTextCursorByRange(oViewCursor) + getFirstTextInStyle("Заголовок 1") + endPage = oViewCursor.getPage() + If CInt(startPage) <= CInt(endPage) Then + If Len(oViewCursor.Text.createTextCursorByRange(oViewCursor).getString()) > 1 Then + section = oViewCursor.Text.createTextCursorByRange(oViewCursor).getString() + End If + section = UCase(Left(section, 1)) + LCase(Right(section,Len(section)-1)) + End If + getSectionX = section + oViewCursor.goToRange(oSavePosition, false) +End Function + +Function getTitleHeader() + Dim oViewCursor As Object + Dim oSavePosition As Object + Dim title As String + oViewCursor = ThisComponent.CurrentController.getViewCursor() + oSavePosition = oViewCursor.Text.createTextCursorByRange(oViewCursor) + getFirstTextInStyle("Автор") + authors = oViewCursor.Text.createTextCursorByRange(oViewCursor).getString() + getFirstTextInStyle("Заголовок 2") + title = oViewCursor.Text.createTextCursorByRange(oViewCursor).getString() + getTitleHeader = authors + " " + title + oViewCursor.goToRange(oSavePosition, false) + getUDK = title +End Function + + + +Sub setArticlePageStyles(i) + Dim oViewCursor As Object + Dim oTextCursor As Object + Dim oText As Object + Dim page As String + Dim pageNum As Long + Dim pageStyles As Object + Dim articleFirstPageStyle As Object + Dim newPageStyleName As String + Dim articleFirstPageStyleName As String + Dim curStyle As Object + Dim tmpStyleName As String + Dim firstName As String + Dim newName As String + Dim newFirstName As String + pageStyles = ThisComponent.StyleFamilies.getByName("PageStyles") + firstName = "Первая страница статьи" + newName = "Статья " + CStr(i) + newFirstName = newName + " стр.1" + + oViewCursor = ThisComponent.CurrentController.getViewCursor() + oTextCursor = oViewCursor.Text.createTextCursorByRange(oViewCursor) + 'set starndard first page style name (need for cloning) + oTextCursor.PageDescName = firstName + 'clone starndard first page style + createPageStyleByExample(newFirstName) + ' set cloned style to first page + oTextCursor.PageDescName = newFirstName + 'get current first page style name + curStyle = pageStyles.getByName(oViewCursor.pageStyleName) + setFirstPageMetadata(curStyle,i) + '1 left/right style + ' create new para for next page + oTextCursor.Text.insertControlCharacter(oTextCursor.End,com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK,False) + oTextCursor.BreakType = 4 + 'clone 1 left/right style + createPageStyleByExample(newName) + 'set followStyle to previous style + curStyle.FollowStyle = newName + 'set new curStyle + curStyle = pageStyles.getByName(oViewCursor.pageStyleName) + oTextCursor.goLeft(1,true) + oTextCursor.String = "" + +End Sub + +Sub setFirstPageMetadata(curStyle,i) + Dim oViewCursor As Object + Dim oSavePosition As Object + Dim savePageName As String + oViewCursor = ThisComponent.CurrentController.getViewCursor() + oSavePosition = oViewCursor.Text.createTextCursorByRange(oViewCursor) + + savePageName = oSavePosition.PageStyleName + + oViewCursor.Text.insertControlCharacter(oViewCursor.End,com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK,False) + oTextCursor = oViewCursor.Text.createTextCursorByRange(oViewCursor) + oTextCursor.BreakType = 4 + oTextCursor.PageDescName = savePageName + + If templateName = "" Then + setDefaultFirstPageMetadata(curStyle,i) + ElseIf templateName = PHA Then + setPHAFirstPageMetadata(curStyle,i) + ElseIf templateName = EIFN Then + setEIFNFirstPageMetadata(curStyle,i) + EndIf + + oViewCursor.goToRange(oSavePosition, false) + oViewCursor.jumpToPreviousPage() + sendRM() +End Sub + +Sub setDefaultFirstPageMetadata(curStyle,i) + Dim oViewCursor As Object + Dim oHeaderTable As Object + Dim oFooterTable As Object + Dim rightHeaderCell As Object + Dim leftHeaderCell As Object + oViewCursor = ThisComponent.CurrentController.getViewCursor() + 'curStyle.HeaderText + oHeaderTable = curStyle.HeaderText.CreateEnumeration().nextElement + 'leftHeaderCell + leftHeaderCell = oHeaderTable.getCellByPosition(0,0).getStart() + oViewCursor.goToRange(leftHeaderCell, false) + 'go to page number place + oViewCursor.gotoEndOfLine(false) + oViewCursor.goright(1,false) + oViewCursor.gotoEndOfLine(false) + insertUserField(oViewCursor,"article" + i + "LastPage","00" ) + oViewCursor.goright(1,false) + 'Добавить УДК + insertUserField(oViewCursor,"article" + i + "UDK","УДК "+ i + "." + i) + + 'rightHeaderCell + rightHeaderCell = oHeaderTable.getCellByPosition(1,0).getStart() + oViewCursor.goToRange(rightHeaderCell, false) + 'go to page number 1st place + oViewCursor.gotoEndOfLine(false) + oViewCursor.goright(1,false) + oViewCursor.gotoEndOfLine(false) + insertUserField(oViewCursor,"article" + i + "LastPage","00" ) + ' go to page number 2nd place + oViewCursor.goright(1,false) + oViewCursor.gotoEndOfLine(false) + insertUserField(oViewCursor,"article" + i + "LastPage","00" ) + 'Footer without table + oViewCursor.goToRange(curStyle.FooterText.End, false) + insertUserField(oViewCursor,"author" + i + "Copyright","© Фамилия И.О. " + i ) + +End Sub + +Sub setPHAFirstPageMetadata(curStyle,i) + Dim oViewCursor As Object + Dim oHeader As Object + Dim oFooterTable As Object + + oViewCursor = ThisComponent.CurrentController.getViewCursor() + oHeader = curStyle.HeaderText.CreateEnumeration().nextElement + If oHeader.supportsService("com.sun.star.text.TextTable") Then + oAnchor = oHeader.getCellByPosition(0,0).getStart() + Else + oAnchor = oHeader + EndIf + + oViewCursor.goToRange(oAnchor, false) + 'go to page number place + oViewCursor.gotoEndOfLine(false) + oViewCursor.goright(1,false) + oViewCursor.gotoEndOfLine(false) + insertUserField(oViewCursor,"article" + i + "LastPage","00" ) + oViewCursor.goright(1,false) + 'Добавить УДК + insertUserField(oViewCursor,"article" + i + "UDK","УДК "+ i + "." + i) + oViewCursor.goright(1,false) + oViewCursor.gotoEndOfLine(false) + insertUserField(oViewCursor,"article" + i + "LastPage","00" ) + + oViewCursor.goToRange(curStyle.FooterText.End, false) + insertUserField(oViewCursor,"author" + i + "Copyright","© Фамилия И.О. " + i ) + +End Sub + +Sub setEIFNFirstPageMetadata(curStyle,i) + Dim oViewCursor As Object + Dim oHeaderTable As Object + Dim oFooterTable As Object + Dim rightHeaderCell As Object + Dim leftHeaderCell As Object + oViewCursor = ThisComponent.CurrentController.getViewCursor() + 'curStyle.HeaderText + oHeaderTable = curStyle.HeaderText.CreateEnumeration().nextElement + 'leftHeaderCell + leftHeaderCell = oHeaderTable.getCellByPosition(0,0).getStart() + oViewCursor.goToRange(leftHeaderCell, false) + 'go to page number place + oViewCursor.gotoEndOfLine(false) + oViewCursor.goright(1,false) + oViewCursor.gotoEndOfLine(false) + insertUserField(oViewCursor,"article" + i + "LastPage","00" ) + oViewCursor.goright(1,false) + 'Добавить УДК + insertUserField(oViewCursor,"article" + i + "UDK","УДК "+ i + "." + i) + + 'rightHeaderCell + rightHeaderCell = oHeaderTable.getCellByPosition(1,0).getStart() + oViewCursor.goToRange(rightHeaderCell, false) + 'go to page number 1st place + oViewCursor.gotoEndOfLine(false) + oViewCursor.goright(1,false) + oViewCursor.gotoEndOfLine(false) + insertUserField(oViewCursor,"article" + i + "LastPage","00" ) + ' go to page number 2nd place + oViewCursor.goright(1,false) + oViewCursor.gotoEndOfLine(false) + + insertUserField(oViewCursor,"article" + i + "Num","" + i ) + + oFooterTableLeft = curStyle.FooterTextLeft.CreateEnumeration().nextElement + rightHeaderCell = oFooterTableLeft.getCellByPosition(1,0).getStart() + oViewCursor.goToRange(rightHeaderCell, false) + insertUserField(oViewCursor,"author" + i + "Copyright","© Фамилия И.О. " + i ) + 'TODO!!!!SECOND PAGE + oFooterTableRight = curStyle.FooterTextRight.CreateEnumeration().nextElement + leftHeaderCell = oFooterTableRight.getCellByPosition(0,0).getStart() + oViewCursor.goToRange(leftHeaderCell, false) + insertUserField(oViewCursor,"author" + i + "Copyright","© Фамилия И.О. " + i ) + +End Sub + +Sub setAritclePageHeaders(i) + Dim oViewCursor As Object + Dim oSavePosition As Object + Dim rightHeaderTable As Object + Dim leftHeaderTable As Object + Dim headerCell As Object + Dim leftHeaderCell As Object + Dim curStyleName As String + Dim curStyle As Object + Dim page As String + Dim pageStyles As Object + Dim articleStartPosition As Object + oViewCursor = ThisComponent.CurrentController.getViewCursor() + oSavePosition = oViewCursor.Text.createTextCursorByRange(oViewCursor) + pageStyles = ThisComponent.StyleFamilies.getByName("PageStyles") + page = findFirstPageWithStyle("Статья " + i + " стр.1") + oViewCursor.jumpToPage(page) + articleStartPosition = oViewCursor.Text.createTextCursorByRange(oViewCursor) + + 'create new para for next page + oViewCursor.Text.insertControlCharacter(oViewCursor.End,com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK,False) + oTextCursor = oViewCursor.Text.createTextCursorByRange(oViewCursor) + 'insert page break + oTextCursor.BreakType = 4 + + 'create new para for next page + oViewCursor.Text.insertControlCharacter(oViewCursor.End,com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK,False) + oTextCursor = oViewCursor.Text.createTextCursorByRange(oViewCursor) + 'insert page break + oTextCursor.BreakType = 4 + + If templateName <> PQ Then + If templateName = EIFN Then + copySectionIcon(i) + EndIf + curStyle = pageStyles.getByName(oViewCursor.pageStyleName) + + rightHeaderTable = curStyle.HeaderTextRight.CreateEnumeration().nextElement + leftHeaderTable = curStyle.HeaderTextLeft.CreateEnumeration().nextElement + + rightHeaderCell = rightHeaderTable.getCellByPosition(0,0).getStart() + oViewCursor.goToRange(rightHeaderCell, false) + If templateName = "" Then + insertUserField(oViewCursor,"rightHeader" + i ,"Фамилия И.О. Название статьи" + i ) + ElseIf templateName = PHA Then + insertUserField(oViewCursor,"rightHeader" + i ,"Фамилия И.О. Название статьи" + i ) + ElseIf templateName = EIFN Then + insertUserField(oViewCursor,"rightHeader" + i ,"Название статьи " + i ) + rightHeaderCell = rightHeaderTable.getCellByPosition(2,0).getStart() + oViewCursor.goToRange(rightHeaderCell, false) + insertLinkedImage(CStr(i),"headerImageRight") + oViewCursor.jumpToStartOfPage() + EndIf + + + If templateName = "" Then + leftHeaderCell = leftHeaderTable.getCellByPosition(1,0).getStart() + oViewCursor.goToRange(leftHeaderCell, false) + insertUserField(oViewCursor,"leftHeader" + i ,"Название раздела" + i ) + ElseIf templateName = PHA Then + leftHeaderCell = leftHeaderTable.getCellByPosition(1,0).getStart() + oViewCursor.goToRange(leftHeaderCell, false) + insertUserField(oViewCursor,"leftHeader" + i ,"Название раздела" + i ) + ElseIf templateName = EIFN Then + leftHeaderCell = leftHeaderTable.getCellByPosition(2,0).getStart() + oViewCursor.goToRange(leftHeaderCell, false) + insertUserField(oViewCursor,"leftHeader" + i ,"И.О. Фамилия" + i ) + leftHeaderCell = leftHeaderTable.getCellByPosition(0,0).getStart() + oViewCursor.goToRange(leftHeaderCell, false) + insertLinkedImage(CStr(i),"headerImageLeft") + oViewCursor.jumpToStartOfPage() + EndIf + EndIf + oViewCursor.goToRange(articleStartPosition, false) + backspace() + backspace() + backspace() + + oViewCursor.goToRange(oSavePosition, false) + +End Sub + +Sub setArticleUniqPageStyles(i) + Dim firstPageName As String + Dim pageName As String + Dim curPageNum As Integer + Dim prevPageNum As String + Dim leftPageNum As Long + Dim docPages As Long + Dim articlePages As Long + Dim previousPageStyle As Object + Dim pageStyles As Object + Dim curPageStyle As Object + Dim curPageStyleName As String + Dim nextStyle As Object + Dim clonedStyle As Object + Dim clonedStyleName As String + Dim oViewCursor As Object + oViewCursor = ThisComponent.CurrentController.getViewCursor() + pageStyles = ThisComponent.StyleFamilies.getByName("PageStyles") + 'Constants + articlePageNum = 1 + + pageName = "Статья " + CStr(i) + firstPageName = pageName + " стр.1" + + curPageStyleName = oViewCursor.PageStyleName + + Do Until InStr(curPageStyleName,pageName) = 0 + newPageName = pageName + " стр." + articlePageNum + curPageNum = CInt(oViewCursor.getPage()) + ' Если мы находимся на первой странице статьи + If InStr(curPageStyleName, firstPageName) = 1 Then + curPageStyle = pageStyles.getByName(curPageStyleName) + previousPageStyle = curPageStyle + ElseIf InStr(curPageStyleName, pageName) = 1 Then + createPageStyleByExample(newPageName) + previousPageStyle.FollowStyle = newPageName + curPageStyle = pageStyles.getByName(newPageName) + curPageStyle.FollowStyle = pageName + previousPageStyle = curPageStyle + ElseIf oViewCursor.getPage() <> curPageNum Then + 'Прили в конец. + MsgBox "Статья закончилась!" + Exit Sub + Else + Exit Sub + End If + 'Iterate article page number + articlePageNum = articlePageNum + 1 + 'GO TO NEXT PAGE + oViewCursor.jumpToNextPage() + curPageStyleName = getNextPageStyleName() + Loop + +End Sub + +Sub takeWidowLinesIn + Dim oViewCursor As Object + oViewCursor = ThisComponent.CurrentController.getViewCursor() + curPageStyleName = getNextPageStyleName() + Do Until InStr(curPageStyleName,"Статья") = 0 + takeLineIn() + oViewCursor.jumpToNextPage() + curPageStyleName = getNextPageStyleName() + Loop +End Sub + +Sub takeDownOrpahns + Dim oViewCursor As Object + oViewCursor = ThisComponent.CurrentController.getViewCursor() + curPageStyleName = getNextPageStyleName() + Do Until InStr(curPageStyleName,"Статья") = 0 + takeLineIn + oViewCursor.jumpToNextPage() + curPageStyleName = getNextPageStyleName() + Loop +End Sub + +Sub takeLineIn + Globalscope.BasicLibraries.LoadLibrary( "Publishing" ) + Dim oViewCursor As Object + Dim oTextCursor As Object + dim oEndPage As Object + Dim lineCounter As Integer + lineCounter = 0 + oViewCursor = ThisComponent.CurrentController.getViewCursor() + 'If page is less than 4 rows then shrink content + oViewCursor.jumpToEndOfPage() + oEnd = oViewCursor.getPosition() + oViewCursor.jumpToStartOfPage() + 'Если в таблице - выходим + oTextCursor = oViewCursor.Text.createTextCursorByRange(oViewCursor) + If NOT IsEmpty(oTextCursor.TextTable) Then + Exit Sub + End If + oViewCursor.jumpToStartOfPage() + ' Идем конец строки, закончился ли параграф + lineCounter = lineCounter + 1 + Do Until lineCounter = 4 + 'Test for empty line at 3 row + oViewCursor.goToEndOfLine(false) + If oEnd.X = oViewCursor.getPosition().X AND oEnd.Y = oViewCursor.getPosition().Y Then + shrinkPageContent() + Exit Sub + End If + oViewCursor.goRight(1,false) + 'If empty para then remove it and shrink content + If oEnd.X = oViewCursor.getPosition().X AND oEnd.Y = oViewCursor.getPosition().Y Then + oViewCursor.goLeft(1,false) + 'sendRM() + shrinkPageContent() + Exit Sub + End If + lineCounter = lineCounter + 1 + Loop + 'Count page lines + + oViewCursor.jumpToStartOfPage() + oTextCursor = oViewCursor.Text.createTextCursorByRange(oViewCursor) + 'If It is a start of paragraph then there is no line to take in + If oTextCursor.isStartOfParagraph() Then + 'Nothing to Do + Exit Sub + End If + oViewCursor.goToEndOfLine(false) + oTextCursor = oViewCursor.Text.createTextCursorByRange(oViewCursor) + 'If it is a last line of paragraph + If oTextCursor.isEndOfParagraph() Then + shrinkPageContent() + Exit Sub + End If + oViewCursor.goToEndOfLine(false) + oTextCursor = oViewCursor.Text.createTextCursorByRange(oViewCursor) + 'If it is a last line of paragraph + If oTextCursor.isEndOfParagraph() Then + shrinkPageContent() + Exit Sub + End If +End Sub + +Function getNextPageStyleName() + dim curPageStyleName as String + dim startPageStyleName as String + dim startPageStyle as Object + dim pageStyles as Object + dim followStyle as String + dim oViewCursor as Object + dim oTextCursor as Object + oViewCursor = ThisComponent.CurrentController.getViewCursor() + pageStyles = ThisComponent.StyleFamilies.getByName("PageStyles") + startPageStyleName = oViewCursor.PageStyleName + startPageStyle = pageStyles.getByName(startPageStyleName) + followStyle = startPageStyle.FollowStyle + oTextCursor = oViewCursor.Text.createTextCursorByRange(oViewCursor) + If oTextCursor.isStartOfParagraph() Then + getNextPageStyleName = oViewCursor.PageStyleName + Exit Function + EndIf + oViewCursor.Text.insertControlCharacter(oViewCursor.End,com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK,False) + oTextCursor = oViewCursor.Text.createTextCursorByRange(oViewCursor) + oTextCursor.goRight(1,false) + oViewCursor.goToRange(oTextCursor,false) + getNextPageStyleName = oViewCursor.pageStyleName + oViewCursor.goLeft(1,false) + backspace() +End Function + +Function findArticleFile(path,i) +Dim NextFile As String +Dim TestName As String +Dim endChars(2) As String +endChars(0) = "_" +endChars(1) = "." +endChars(2) = " " +Dim FoundPosition As Long +Dim EndChar As String +NextFile = Dir(path+"/", 0) + While NextFile <> "" + For j = LBound(endChars) To UBound(endChars) + TestName = CStr(i)+endChars(j) + FoundPosition = InStr(NextFile, TestName) + If FoundPosition = 1 Then + findArticleFile = path+"/"+NextFile + Exit Function + End If + Next + NextFile = Dir + Wend + + +findArticleFile = "" +End Function + +Function InsertArticle(oFileName) + Dim document as Object + Dim dispatcher as object + Dim fileType as String + Dim oFilter as String + Dim args2(1) as new com.sun.star.beans.PropertyValue + document = ThisComponent.CurrentController.Frame + dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") + fileType = Right(oFileName, 3) + If fileType = "odt" Then + oFilter = "writer8" + ElseIf fileType = "doc" Then + oFilter = "MS Word 97" + End If + args2(0).Name = "Name" + args2(0).Value = oFileName + args2(1).Name = "Filter" + args2(1).Value = oFilter + dispatcher.executeDispatch(document, ".uno:InsertDoc", "", 0, args2()) +End Function + + + +Sub getChapter + Dim testText As String + testText = getFirstTextInStyle("Заголовок 1") +End Sub + + +Function getFirstTextInStyle(styleName) + Dim oViewCursor As Object + Dim curPage As Long + Dim foundPage As Long + oViewCursor = ThisComponent.CurrentController.getViewCursor() + curPage = oViewCursor.getPage + getFirstTextInStyleDispatch(styleName) + foundPage = oViewCursor.getPage + If foundPage >= curPage Then + getFirstTextInStyle = oViewCursor.String + Exit Function + End If + getFirstTextInStyle = "" +End Function + +Sub setHeadingsOutlineLevels + + setHeadingOutlineLevel(1,"Заголовок 1") + setHeadingOutlineLevel(2,"Заголовок 2") +End Sub + + +Sub setHeadingOutlineLevel(num,targetStyleName) + Dim oViewCursor As Object + Dim oText As Object + Dim curText As Object + oViewCursor = ThisComponent.CurrentController.getViewCursor() + oViewCursor.jumpToFirstPage + getFirstTextInStyleDispatch(targetStyleName) + While True + curText = oViewCursor.Text.createTextCursorByRange(oViewCursor) + If IsNull(oText) Then + oText = curText + ElseIf oText.Text.compareRegionStarts(oText,curText) = 0 AND oText.Text.compareRegionEnds(oText,curText) = 0 Then + Exit Sub + End If + oViewCursor.OutlineLevel = num + getFirstTextInStyleDispatch(targetStyleName) + Wend +End Sub + +sub getFirstTextInStyleDispatch(styleName) + dim document as object + dim dispatcher as object + document = ThisComponent.CurrentController.Frame + dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") + dim args1(21) as new com.sun.star.beans.PropertyValue + args1(0).Name = "SearchItem.StyleFamily" + args1(0).Value = 2 + args1(1).Name = "SearchItem.CellType" + args1(1).Value = 0 + args1(2).Name = "SearchItem.RowDirection" + args1(2).Value = true + args1(3).Name = "SearchItem.AllTables" + args1(3).Value = false + args1(4).Name = "SearchItem.SearchFiltered" + args1(4).Value = false + args1(5).Name = "SearchItem.Backward" + args1(5).Value = false + args1(6).Name = "SearchItem.Pattern" + args1(6).Value = true + args1(7).Name = "SearchItem.Content" + args1(7).Value = false + args1(8).Name = "SearchItem.AsianOptions" + args1(8).Value = false + args1(9).Name = "SearchItem.AlgorithmType" + args1(9).Value = 0 + args1(10).Name = "SearchItem.SearchFlags" + args1(10).Value = 65536 + args1(11).Name = "SearchItem.SearchString" + args1(11).Value = styleName + args1(12).Name = "SearchItem.ReplaceString" + args1(12).Value = styleName + args1(13).Name = "SearchItem.Locale" + args1(13).Value = 255 + args1(14).Name = "SearchItem.ChangedChars" + args1(14).Value = 2 + args1(15).Name = "SearchItem.DeletedChars" + args1(15).Value = 2 + args1(16).Name = "SearchItem.InsertedChars" + args1(16).Value = 2 + args1(17).Name = "SearchItem.TransliterateFlags" + args1(17).Value = 1280 + args1(18).Name = "SearchItem.Command" + args1(18).Value = 0 + args1(19).Name = "SearchItem.SearchFormatted" + args1(19).Value = false + args1(20).Name = "SearchItem.AlgorithmType2" + args1(20).Value = 1 + args1(21).Name = "Quiet" + args1(21).Value = true + dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1()) +end Sub + +sub insertLinkedImage(articleNum,styleName) +rem ---------------------------------------------------------------------- +rem define variables +dim document as object +dim dispatcher as object + +document = ThisComponent.CurrentController.Frame +dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") + +dim args2(3) as new com.sun.star.beans.PropertyValue +args2(0).Name = "FileName" +args2(0).Value = path + imagesRelativePath + articleNum + ".jpg" +args2(1).Name = "FilterName" +args2(1).Value = "<Все форматы>" +args2(2).Name = "AsLink" +args2(2).Value = true +args2(3).Name = "Style" +args2(3).Value = styleName + +dispatcher.executeDispatch(document, ".uno:InsertGraphic", "", 0, args2()) + + +end sub + +Sub copySectionIcon(articleNum) + FileCopy( path + allImagesRelativePath + getImageFileName(), path + imagesRelativePath + articleNum + ".jpg") + +End Sub + + + +Function getImageFileName() + + Select Case UCase(sectionName) + Case "АРХИВ" + getImageFileName = "ARCHIVE.jpg" + Case "СИТУАЦИОННЫЕ ИССЛЕДОВАНИЯ" + getImageFileName = "CASE_STUDIES.jpg" + Case "МЕЖДИСЦИПЛИНАРНЫЕ ИССЛЕДОВАНИЯ" + getImageFileName = "INTERDISCIPLINARY.jpg" + Case "ПАНЕЛЬНАЯ ДИСКУССИЯ" + getImageFileName = "PANEL_DISCUSSION.jpg" + Case "ОБЗОРЫ КНИГ" + getImageFileName = "BOOK_REVIEWS.jpg" + Case "РЕДАКЦИОННАЯ СТАТЬЯ" + getImageFileName = "EDITORIAL.jpg" + Case "ЯЗЫК И СОЗНАНИЕ" + getImageFileName = "LANGUAGE.jpg" + Case "ПЕРСПЕКТИВА" + getImageFileName = "VISTA.jpg" + Case "ЭПИСТЕМОЛОГИЯ И ПОЗНАНИЕ" + getImageFileName = "EPISTEMOLOGY.jpg" + Case Else + getImageFileName = "EDITORIAL.jpg" + End Select +End Function + +sub noNumbering + 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 ---------------------------------------------------------------------- + dim args1(0) as new com.sun.star.beans.PropertyValue + Wait 500 + dispatcher.executeDispatch(document, ".uno:RemoveBullets", "", 0, args1()) + Wait 500 +end sub + + + + + + + + \ No newline at end of file diff --git a/ePublishing/script.xlb b/ePublishing/script.xlb index b36d6f3..7cb4547 100644 --- a/ePublishing/script.xlb +++ b/ePublishing/script.xlb @@ -2,5 +2,6 @@ +