2021-06-23 10:26:22 +08:00
/ *
* This file is part of the LibreOffice project .
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License , v . 2 . 0 . If a copy of the MPL was not distributed with this
* file , You can obtain one at http : //mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice :
*
* Licensed to the Apache Software Foundation ( ASF ) under one or more
* contributor license agreements . See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership . The ASF licenses this file to you under the Apache
* License , Version 2 . 0 ( the " License " ) ; you may not use this file
* except in compliance with the License . You may obtain a copy of
* the License at http : //www.apache.org/licenses/LICENSE-2.0 .
* /
2019-04-15 10:23:03 +08:00
// Change the case of a selection, or current word from upper case,
// to first char upper case, to all lower case to upper case...
import com.sun.star.uno.UnoRuntime ;
import com.sun.star.frame.XModel ;
import com.sun.star.view.XSelectionSupplier ;
import com.sun.star.container.XIndexAccess ;
import com.sun.star.text.XText ;
import com.sun.star.text.XTextRange ;
import com.sun.star.text.XWordCursor ;
import com.sun.star.script.provider.XScriptContext ;
// return the new string based on the string passed in
String getNewString ( theString ) {
String newString ;
if ( theString = = null | | theString . length ( ) = = 0 ) {
return newString ;
}
// should we tokenize on "."?
if ( Character . isUpperCase ( theString . charAt ( 0 ) ) & & theString . length ( ) > = 2 & & Character . isUpperCase ( theString . charAt ( 1 ) ) ) { // first two chars are UC => first UC, rest LC
newString = theString . substring ( 0 , 1 ) . toUpperCase ( ) + theString . substring ( 1 ) . toLowerCase ( ) ;
} else if ( Character . isUpperCase ( theString . charAt ( 0 ) ) ) { // first char UC => all to LC
newString = theString . toLowerCase ( ) ;
} else { // all to UC.
newString = theString . toUpperCase ( ) ;
}
return newString ;
}
//the method that does the work
void capitalise ( ) {
// get the number of regions selected
count = xIndexAccess . getCount ( ) ;
if ( count > = 1 ) { //ie we have a selection
for ( i = 0 ; i < count ; i + + ) {
// get the i-th region selected
xTextRange = ( XTextRange )
UnoRuntime . queryInterface ( XTextRange . class , xIndexAccess . getByIndex ( i ) ) ;
System . out . println ( " string: " + xTextRange . getString ( ) ) ;
// get the selected string
theString = xTextRange . getString ( ) ;
if ( theString . length ( ) = = 0 ) {
// sadly we can have a selection where nothing is selected
// in this case we get the XWordCursor and make a selection!
xText = ( XText )
UnoRuntime . queryInterface ( XText . class , xTextRange . getText ( ) ) ;
xWordCursor = ( XWordCursor )
UnoRuntime . queryInterface ( XWordCursor . class , xText . createTextCursorByRange ( xTextRange ) ) ;
2021-06-23 10:26:22 +08:00
// move the Word cursor to the start of the word if it's not
2019-04-15 10:23:03 +08:00
// already there
if ( ! xWordCursor . isStartOfWord ( ) ) {
xWordCursor . gotoStartOfWord ( false ) ;
}
// move the cursor to the next word, selecting all chars
// in between
xWordCursor . gotoNextWord ( true ) ;
// get the selected string
theString = xWordCursor . getString ( ) ;
// get the new string
newString = getNewString ( theString ) ;
if ( newString ! = null ) {
// set the new string
xWordCursor . setString ( newString ) ;
// keep the current selection
xSelectionSupplier . select ( xWordCursor ) ;
}
} else {
newString = getNewString ( theString ) ;
if ( newString ! = null ) {
// set the new string
xTextRange . setString ( newString ) ;
// keep the current selection
xSelectionSupplier . select ( xTextRange ) ;
}
}
}
}
}
// The XSCRIPTCONTEXT variable is of type XScriptContext and is available to
// all BeanShell scripts executed by the Script Framework
xModel = ( XModel )
UnoRuntime . queryInterface ( XModel . class , XSCRIPTCONTEXT . getDocument ( ) ) ;
//the writer controller impl supports the css.view.XSelectionSupplier interface
xSelectionSupplier = ( XSelectionSupplier )
UnoRuntime . queryInterface ( XSelectionSupplier . class , xModel . getCurrentController ( ) ) ;
//see section 7.5.1 of developers' guide
xIndexAccess = ( XIndexAccess )
UnoRuntime . queryInterface ( XIndexAccess . class , xSelectionSupplier . getSelection ( ) ) ;
//call the method that does the work
capitalise ( ) ;
return 0 ;