Implementation Details

Unicode support

Ferry uses platform specific API to handle Unicode data. On MS Windows Uniscribe is used.

UTF8 encoding

Ferry uses UTF8 encoding to store text data internally. Ferry is tolerant about malformed UTF8 data.

API

Thread-safety & reentrancy

Ferry library is designed for use in multi-threaded applications.

The table below classifies Ferry public API regarding thread-safety and reentrancy.
Ferry global functions
fe::DecoratorStub
fe::DecoratorFilterStub
fe::EditorFacadeListenerStub
fe::EditorFacadePeerBase
fe::FeError
fe::PeerBase
Thread-safe & reentrant.
fe::CachingTextIterator
fe::CharClassConfigurator
fe::EditorFacadeListenerProxy
fe::enc_traits_utf16
fe::enc_traits_utf8
fe::ProxyBase
fe::SingleItemStringSource
fe::TextIteratorProxy
fe::UTF32Iterator
fe::ActionGroupTrigger
fe::ReadOnlyTrigger
Thread-unsafe & non-reentrant.
fe::IEditorFacade
Ferry Core library provides thread-safe & reentrant implementation - fe::EditorFacadePeerBase.
fe::IExtension
fe::IExtensionFactory
fe::IDecoratorExtensionFactory
fe::IScintillaDecoratorFactory
fe::ITextScalerFactory
fe::ICharacterDecoratorFactory
fe::IColorerDecoratorFactory
Ferry Extensions library provides thread-safe & reentrant implementations of these interfaces.

User-supplied implementations of these interfaces, intended for use with Ferry API only, may be thread-unsafe & non-reentrant.

fe::IDecorator
fe::IDecoratorFilter
fe::IDecoratorListener
fe::IFontEnumerator
fe::IFontMapper
fe::IPluggable
fe::IStringSource
fe::ISubstringDecorator
fe::ISubstringFiller
Ferry Core library and Ferry Extensions library provide thread-unsafe & non-reentrant implementations of these interfaces.

User-supplied implementations of these interfaces, intended for use with Ferry API only, may be thread-unsafe & non-reentrant as well.

fe::ITextIterator
There is a number of default implementations of this interface. Though the only one is thread-safe and reentrant. It is available through fe::EditorFacadePeerBase::createTextIterator() call.
fe::IEditorFacadeListener
fe::IEditorFacadeTask
User-supplied implementations of these interfaces, intended for use with Ferry API only, may be thread-unsafe & non-reentrant.
fe::ICharacterClass
fe::ICharacterClassBuilder
Objects of fe::ICharacterClassBuilder type created with fe::ICharacterDecoratorFactory::createCharacterClassBuilder() calls applyed on the factory created with Fe_CreateCharacterDecoratorFactory() call are thread-safe and reentrant.

fe::ICharacterClassBuilder::createCharacterClass() called on such objects returns pointer to thread-safe and reentrant implementation of fe::ICharacterClass interface.

User-supplied implementations of these interfaces, intended for use with Ferry API only, may be thread-unsafe & non-reentrant.

Default keyboard shortcuts

Ctrl+CCopy selected text to a clipboard.
Ctrl+XCut selected text to a clipboard.
Ctrl+VCopy text from a clipboard at the cursor position.
Ctrl+ZUndo last editing action.
Ctrl+Shift+ZReapply last editing action.
Ctrl+YReapply last editing action.
RightMove cursor to the next character.
Ctrl+RightMove cursor to the next word.
Shift+RightMove cursor to the next character and expand selection.
Ctrl+Shift+RightMove cursor to the next word and expand selection.
LeftMove cursor to the previous character.
Ctrl+LeftMove cursor to the previous word.
Shift+LeftMove cursor to the previous character and expand selection.
Ctrl+Shift+LeftMove cursor to the previous word and expand selection.
EndMove cursor to the last character in the current text line.
Ctrl+EndMove cursor to the last character in the text.
Shift+EndMove cursor to the last character in the current text line and expand selection.
Ctrl+Shift+EndMove cursor to the last character in the text and expand selection.
HomeMove cursor to the first character in the current text line.
Ctrl+HomeMove cursor to the first character in the text.
Shift+HomeMove cursor to the first character in the current text line and expand selection.
Ctrl+Shift+HomeMove cursor to the first character in the text and expand selection.
UpMove cursor one text line up.
Ctrl+UpMove cursor one page up.
PageUpMove cursor one page up.
Shift+UpMove cursor one text line up and expand selection.
Ctrl+Shift+UpMove cursor one page up and expand selection.
Shift+PageUpMove cursor one page up and expand selection.
DownMove cursor one text line down.
Ctrl+DownMove cursor one page down.
PageDownMove cursor one page down.
Shift+DownMove cursor one text line down and expand selection.
Ctrl+Shift+DownMove cursor one page down and expand selection.
Shift+PageDownMove cursor one page down and expand selection.
DeleteDeletes selected text. If selection is empty deletes a number of characters that shape a single grapheme cluster starting from the current character.
Note:
See http://www.catch22.net/tuts/editor18.asp and http://blogs.msdn.com/michkap/archive/2005/12/21/506248.aspx for difference between Delete and Backspace explained.
BackspaceDeletes selected text. If selection is empty deletes the previous character.
EnterDeletes selected text if any and inserts hard text line break at the cursor position.
InsertSwitchs between overtype or insert text editing mode.

Generated on Tue Nov 18 21:08:22 2008 for Ferry by doxygen 1.5.7.1
http://sourceforge.net