' Reverts the number style applied to the paragraph style default. ' That is, each paragraph in the selection will have the number style set to the ' numbering style defined for the paragraph style of the paragraph. Sub RevertNumberStyleSel oDoc = ThisComponent oText = oDoc.Text ' Select all current selections as cursors, and expect that maybe nothing is selected Dim oCursors(), i% If Not CreateSelectedTextIterator( oDoc, oCursors()) Then 'Get Cursor at current location oViewCursor = oDoc.CurrentController.getViewCursor() oTextCursor = oText.createTextCursorByRange(oViewCursor.getStart()) RevertNumberStyle( oDoc, oTextCursor ) Else ' THe sanity control is because there is an error condition I don't fully understand ' that sometimes results in an infinite loop. So rather we limit it to a fixed number ' of possible paragraphs. sanity = 0 For i% = LBound(oCursors()) To UBound(oCursors()) oCurStart = oCursors(i%,0) oCurEnd = oCursors(i%,1 ) Do RevertNumberStyle( oDoc, oCurStart ) sanity = sanity+1 Loop Until ( Not oCurStart.gotoNextParagraph( False ) ) _ OR ( oText.compareRegionStarts( oCurStart, oCurEnd ) <= 0 ) _ OR ( sanity > 10000 ) Next i% If Sanity > 10000 Then MsgBox "Sanity Control Reached" End If End If End Sub ' Reverts the number style at the particular TextCursor Sub RevertNumberStyle( oDoc as Object, oTextCursor as Object ) ' Get list of Paragraph Styles oStyleFamilies = oDoc.StyleFamilies oParaStyles = oStyleFamilies.getByName( "ParagraphStyles" ) ' Get Style for current paragraph oParaStyle = oParaStyles.getByName( oTextCursor.paraStyleName ) ' Set current paragraph numbering style to one defined in ParaStyle oTextCursor.NumberingStyleName = oParaStyle.NumberingStyleName End Sub '****************************************************************** ' The following are support functions, they aren't really part of ' the logic of the macro, but nonetheless are essential to their ' operation. Thanks to Andrew Pitonyak '****************************************************************** '****************************************************************** 'Modified from Andrew Pitonyak 'sPrompt : how to ask if should iterate over the entire text 'oCursors() : Has the return cursors 'Returns true if should iterate and false if should not Function CreateSelectedTextIterator(oDoc As Object, oCursors()) As Boolean Dim oSelections As Object, oSel As Object, oText As Object Dim lSelCount As Long, lWhichSelection As Long Dim oLCursor As Object, oRCursor As Object CreateSelectedTextIterator = True oText = oDoc.Text If Not IsAnythingSelected(ThisComponent) Then oCursors = DimArray() CreateSelectedTextIterator = False Else oSelections = ThisComponent.getCurrentSelection() lSelCount = oSelections.getCount() oCursors = DimArray(lSelCount - 1, 1) For lWhichSelection = 0 To lSelCount - 1 oSel = oSelections.getByIndex(lWhichSelection) 'If I want to know if NO text is selected, I could 'do the following: 'oLCursor = oText.CreateTextCursorByRange(oSel) 'If oLCursor.isCollapsed() Then ... oLCursor = GetLeftMostCursor(oSel, oText) oRCursor = GetRightMostCursor(oSel, oText) oCursors(lWhichSelection, 0) = oLCursor oCursors(lWhichSelection, 1) = oRCursor Next End If End Function '****************************************************************** 'From Andrew Pitonyak Function IsAnythingSelected(oDoc As Object) As Boolean Dim oSelections As Object, oSel As Object, oText As Object, oCursor As Object IsAnythingSelected = False If IsNull(oDoc) Then Exit Function ' The current selection in the current controller. 'If there is no current controller, it returns NULL. oSelections = oDoc.getCurrentSelection() If IsNull(oSelections) Then Exit Function If oSelections.getCount() = 0 Then Exit Function If oSelections.getCount() > 1 Then IsAnythingSelected = True Else oSel = oSelections.getByIndex(0) oCursor = oDoc.Text.CreateTextCursorByRange(oSel) If Not oCursor.IsCollapsed() Then IsAnythingSelected = True End If End Function '****************************************************************** 'Author: Andrew Pitonyak 'email: andrew@pitonyak.org 'oSelection is a text selection or cursor range 'oText is the text object Function GetLeftMostCursor(oSel As Object, oText As Object) As Object Dim oRange As Object, oCursor As Object If oText.compareRegionStarts(oSel.getEnd(), oSel) >= 0 Then oRange = oSel.getEnd() Else oRange = oSel.getStart() End If oCursor = oText.CreateTextCursorByRange(oRange) oCursor.goRight(0, False) GetLeftMostCursor = oCursor End Function '****************************************************************** 'Author: Andrew Pitonyak 'email: andrew@pitonyak.org 'oSelection is a text selection or cursor range 'oText is the text object Function GetRightMostCursor(oSel As Object, oText As Object) As Object Dim oRange As Object, oCursor As Object If oText.compareRegionStarts(oSel.getEnd(), oSel) >= 0 Then oRange = oSel.getStart() Else oRange = oSel.getEnd() End If oCursor = oText.CreateTextCursorByRange(oRange) oCursor.goLeft(0, False) GetRightMostCursor = oCursor End Function