Jump to content

Recommended Posts

Posted (edited)

@mLipok asked me to come up with an AutoIt example for this.

So here's what I came up with, including an added bonus.

#include <Array.au3>

Global $oMyError = ObjEvent('AutoIt.Error', '_ErrFunc')

Global $sLocale = 'en'
Global $sCountry = 'US'
Global $sWord = InputBox("Spell Checker", "File to check (empty for end)?")
While $sWord <> ""
    Global $vSpell = _OOo_SpellChecker($sWord, $sLocale, $sCountry)
    If $vSpell Then
        MsgBox(0, "Spell Checker", $sWord & " is valid")
    Else
        If MsgBox(4, "Spell Checker", $sWord & " is NOT valid. Would you like to see alternatives?") = 6 Then
            Global $aAlternatives = _OOo_SpellChecker($sWord, $sLocale, $sCountry, True)
            _ArrayDisplay($aAlternatives, "Spell Checker")
        EndIf
    EndIf
    $sWord = InputBox("Spell Checker", "File to check (empty for end)?")
WEnd

; #FUNCTION# ====================================================================================================================
; Name ..........: _OOo_SpellChecker
; Description ...: Checks a single word with the OpenOffice/LibreOffice spell checker to see if it is spelled correctly in a
;                  given locale.
; Syntax ........: _OOo_SpellChecker($sWord[, $sLocale = 'en'[, $sCountry = 'US'[, $bShowAlternatives = False]]])
; Parameters ....: $sWord             - a string value.
;                  $sLocale           - [optional] a string value. Default is 'en'.
;                  $sCountry          - [optional] a string value. Default is 'US'.
;                  $bShowAlternatives - [optional] a boolean value. Default is False.
; Return values .: On Success         - Returns True if the word is spelled correctly using the specified language, False
;                                       otherwise. If word is not spelled correctly and $bShowAlternatives is set to True,
;                                       an array of suggestions is returned.
;                  On Failure         - Returns 0 and sets @error and @extended:
;                  |                    @error    = 0 - Success (No error)
;                  |                                1 - General error
;                  |                                2 - Invalid type
;                  |                                3 - Invalid value
;                  |                                4 - No match found
;                  |                    @extended = number of offending parameter
; Author ........: GMK
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: https://www.openoffice.org/api/docs/common/ref/com/sun/star/linguistic2/XSpellChecker.html
;                  https://www.openoffice.org/api/docs/common/ref/com/sun/star/linguistic2/XSpellAlternatives.html
;                  http://www.loc.gov/standards/iso639-2/php/code_list.php
;                  https://www.iso.org/obp/ui/#search
; Example .......: Yes
; ===============================================================================================================================
Func _OOo_SpellChecker($sWord, $sLocale = 'en', $sCountry = 'US', $bShowAlternatives = False)
    Local Enum $eErr_Success, _
            $eErr_GeneralError, _
            $eErr_InvalidType, _
            $eErr_InvalidValue, _
            $eErr_NoMatch
    If Not IsString($sWord) Then Return SetError($eErr_InvalidType, 1, 0)
    If StringRegExp($sWord, '\d|\s') Then Return SetError($eErr_InvalidValue, 1, 0)
    If Not IsString($sLocale) Then Return SetError($eErr_InvalidType, 2, 0)
    If StringLen($sLocale) <> 2 Then Return SetError($eErr_InvalidValue, 2, 0)
    If Not IsString($sCountry) Then Return SetError($eErr_InvalidType, 3, 0)
    If StringLen($sCountry) <> 2 Then Return SetError($eErr_InvalidValue, 3, 0)
    Local $oSM = ObjCreate('com.sun.star.ServiceManager')
    If Not IsObj($oSM) Then Return SetError($eErr_GeneralError, 10, 0)
    Local $oLocale = $oSM.Bridge_GetStruct('com.sun.star.lang.Locale')
    If Not IsObj($oLocale) Then Return SetError($eErr_GeneralError, 11, 0)
    $oLocale.Language = $sLocale
    $oLocale.Country = $sCountry
    Local $oLinguService = $oSM.createInstance('com.sun.star.linguistic2.LinguServiceManager')
    If Not IsObj($oLinguService) Then Return SetError($eErr_GeneralError, 12, 0)
    Local $oSpellChecker = $oLinguService.getSpellChecker
    If Not IsObj($oSpellChecker) Then Return SetError($eErr_GeneralError, 13, 0)
    If Not $oSpellChecker.hasLocale($oLocale) Then Return SetError($eErr_NoMatch, 2, 0)
    Local $oPropertyValue = $oSM.Bridge_GetStruct('com.sun.star.beans.PropertyValue')
    If Not IsObj($oPropertyValue) Then Return SetError($eErr_GeneralError, 14, 0)
    Local $aPropertyValue[1] = [$oPropertyValue]
    Local $nRandom = Random(0, 0.5)
    Local $bReturn = $oSpellChecker.isValid($sWord, $nRandom, $aPropertyValue)
    If @error Then Return SetError($eErr_GeneralError, 15, 0)
    If Not $bReturn And $bShowAlternatives Then
        Local $oSpell = $oSpellChecker.spell($sWord, $nRandom, $aPropertyValue)
        If Not IsObj($oSpell) Then Return SetError($eErr_GeneralError, 16, 0)
        Local $aReturn = $oSpell.getAlternatives()
        Local $iAlternatives = UBound($aReturn)
        ReDim $aReturn[$iAlternatives + 1]
        $iAlternatives += 1
        For $i = $iAlternatives - 1 To 1 Step -1
            $aReturn[$i] = $aReturn[$i - 1]
        Next
        $aReturn[0] = $oSpell.getAlternativesCount()
        If @error Then Return SetError($eErr_GeneralError, 17, 0)
        Return SetError($eErr_Success, 0, $aReturn)
    EndIf
    Return SetError($eErr_Success, 0, $bReturn)
EndFunc

Func _ErrFunc($oError)
    ConsoleWrite(@ScriptName & ' (' & $oError.scriptline & ') : ==> COM Error intercepted !' & @CRLF & _
            @TAB & 'err.number is: ' & @TAB & @TAB & '0x' & Hex($oError.number) & @CRLF & _
            @TAB & 'err.windescription:' & @TAB & $oError.windescription & @CRLF & _
            @TAB & 'err.description is: ' & @TAB & $oError.description & @CRLF & _
            @TAB & 'err.source is: ' & @TAB & @TAB & $oError.source & @CRLF & _
            @TAB & 'err.helpfile is: ' & @TAB & $oError.helpfile & @CRLF & _
            @TAB & 'err.helpcontext is: ' & @TAB & $oError.helpcontext & @CRLF & _
            @TAB & 'err.lastdllerror is: ' & @TAB & $oError.lastdllerror & @CRLF & _
            @TAB & 'err.scriptline is: ' & @TAB & $oError.scriptline & @CRLF & _
            @TAB & 'err.retcode is: ' & @TAB & '0x' & Hex($oError.retcode) & @CRLF & @CRLF)
EndFunc   ;==>_ErrFunc

 

Edited by GMK
Edited tags
Posted (edited)

@GMK Thanks for this Function, this is very handy !

I just make a small modyfication for example:

#include <MsgBoxConstants.au3>
#include <Array.au3>
#include <WinAPILocale.au3>

Global $oMyError = ObjEvent('AutoIt.Error', '_ErrFunc')

_Example()
Func _Example()
    Local $sLocale = 'pl'
    Local $sCountry = 'PL'
    Local $sWord = InputBox("Spell Checker", "Type single word to check (empty for end) ?")
    While $sWord <> ""
        Global $vSpell = _OOo_SpellChecker($sWord, $sLocale, $sCountry)
        If @error Then
            MsgBox($MB_ICONERROR, '_OOo_SpellChecker', '@error = ' & @error & @CRLF & '@extended = ' & @extended)
        ElseIf $vSpell Then
            MsgBox($MB_OK, "Spell Checker", $sWord & " is valid")
        Else
            If MsgBox($MB_YESNO, "Spell Checker", $sWord & " is NOT valid. Would you like to see alternatives?") = $IDYES Then
                Global $aAlternatives = _OOo_SpellChecker($sWord, $sLocale, $sCountry, True)
                _ArrayDisplay($aAlternatives, "Spell Checker")
            EndIf
        EndIf
        $sWord = InputBox("Spell Checker", "File to check (empty for end)?")
    WEnd
EndFunc

 

ps.
Try to not use magic numbers.

 

EDIT:
Small mod:

Func _OOo_SpellChecker($sWord, $sLocale = 'en', $sCountry = 'US', $bShowAlternatives = False)
    Local Enum _
            $eErr_Success, _
            $eErr_GeneralError, _
            $eErr_InvalidType, _
            $eErr_InvalidValue, _
            $eErr_NoMatch

    If Not IsString($sWord) Then Return SetError($eErr_InvalidType, 1, 0)
    If StringRegExp($sWord, '\d|\s') Or $sWord = '' Then Return SetError($eErr_InvalidValue, 1, 0)
    If Not IsString($sLocale) Then Return SetError($eErr_InvalidType, 2, 0)
    If StringLen($sLocale) <> 2 Then Return SetError($eErr_InvalidValue, 2, 0)
    If Not IsString($sCountry) Then Return SetError($eErr_InvalidType, 3, 0)
    If StringLen($sCountry) <> 2 Then Return SetError($eErr_InvalidValue, 3, 0)

    Local $oSM = ObjCreate('com.sun.star.ServiceManager')
    If Not IsObj($oSM) Then Return SetError($eErr_GeneralError, 10, 0)

    Local $oLocale = $oSM.Bridge_GetStruct('com.sun.star.lang.Locale')
    If Not IsObj($oLocale) Then Return SetError($eErr_GeneralError, 11, 0)

    $oLocale.Language = $sLocale
    $oLocale.Country = $sCountry
    Local $oLinguService = $oSM.createInstance('com.sun.star.linguistic2.LinguServiceManager')
    If Not IsObj($oLinguService) Then Return SetError($eErr_GeneralError, 12, 0)

    Local $oSpellChecker = $oLinguService.getSpellChecker
    If Not IsObj($oSpellChecker) Then Return SetError($eErr_GeneralError, 13, 0)
    If Not $oSpellChecker.hasLocale($oLocale) Then Return SetError($eErr_NoMatch, 2, 0)

    Local $oPropertyValue = $oSM.Bridge_GetStruct('com.sun.star.beans.PropertyValue')
    If Not IsObj($oPropertyValue) Then Return SetError($eErr_GeneralError, 14, 0)

    Local $aPropertyValue[1] = [$oPropertyValue]
    Local $nRandom = Random(0, 0.5)
    Local $bReturn = $oSpellChecker.isValid($sWord, $nRandom, $aPropertyValue)
    If @error Then Return SetError($eErr_GeneralError, 15, 0)

    If Not $bReturn And $bShowAlternatives Then
        Local $oSpell = $oSpellChecker.spell($sWord, $nRandom, $aPropertyValue)
        If Not IsObj($oSpell) Then Return SetError($eErr_GeneralError, 16, 0)

        Local $aReturn = $oSpell.getAlternatives()
        Local $iAlternatives = UBound($aReturn)
        ReDim $aReturn[$iAlternatives + 1]
        $iAlternatives += 1
        For $i = $iAlternatives - 1 To 1 Step -1
            $aReturn[$i] = $aReturn[$i - 1]
        Next
        $aReturn[0] = $oSpell.getAlternativesCount()
        If @error Then Return SetError($eErr_GeneralError, 17, 0)
        Return SetError($eErr_Success, 0, $aReturn)
    EndIf

    Return SetError($eErr_Success, 0, $bReturn)
EndFunc   ;==>_OOo_SpellChecker

 

Edited by mLipok

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

Posted (edited)

Hey, I just wrote this to fulfill a request.  I had no standards in mind, nor did I write it to be included in the next release.  I'm not sure how often I'll use it, but hopefully others will find a use for it.

 

P.S. Glad you like it!

Edited by GMK
P.S.
Posted

I'm really grateful for this example.
But as usual, I just added my 2 cents, of course, not in order to upset you, I just simply shared my observations and ideas.
Sorry for the bad feelings.

mLipok

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

Posted

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...