Files
MementoMori/kivy/core/spelling/spelling_osxappkit.py
thatscringebro abd15f28b6 Ajout du GUI
2022-08-08 16:31:52 -04:00

65 lines
2.4 KiB
Python

'''
AppKit Spelling: Implements spelling backend based on OSX's spellchecking
features provided by the ApplicationKit.
NOTE:
Requires pyobjc and setuptools to be installed!
`sudo easy_install pyobjc setuptools`
Developers should read:
http://developer.apple.com/mac/library/documentation/
Cocoa/Conceptual/SpellCheck/SpellCheck.html
http://developer.apple.com/cocoa/pyobjc.html
'''
from AppKit import NSSpellChecker, NSMakeRange
from kivy.core.spelling import SpellingBase, NoSuchLangError
class SpellingOSXAppKit(SpellingBase):
'''
Spelling backend based on OSX's spelling features provided by AppKit.
'''
def __init__(self, language=None):
self._language = NSSpellChecker.alloc().init()
super(SpellingOSXAppKit, self).__init__(language)
def select_language(self, language):
success = self._language.setLanguage_(language)
if not success:
err = 'AppKit Backend: No language "%s" ' % (language, )
raise NoSuchLangError(err)
def list_languages(self):
return list(self._language.availableLanguages())
def check(self, word):
# TODO Implement this!
# NSSpellChecker provides several functions that look like what we
# need, but they're a) slooow and b) return a strange result.
# Might be a snow leopard bug. Have to test further.
# See: http://paste.pocoo.org/show/217968/
if not word:
return None
err = 'check() not currently supported by the OSX AppKit backend'
raise NotImplementedError(err)
def suggest(self, fragment):
l = self._language
# XXX Both ways below work on OSX 10.6. It has not been tested on any
# other version, but it should work.
try:
# This is deprecated as of OSX 10.6, hence the try-except
return list(l.guessesForWord_(fragment))
except AttributeError:
# From 10.6 onwards you're supposed to do it like this:
checkrange = NSMakeRange(0, len(fragment))
g = l.\
guessesForWordRange_inString_language_inSpellDocumentWithTag_(
checkrange, fragment, l.language(), 0)
# Right, this was much easier, Apple! :-)
return list(g)