Skip to content
Eberhard Beilharz edited this page Feb 20, 2019 · 9 revisions

The Palaso repo is a collection of shared libraries that are used in SIL .NET applications, such as FieldWorks, WeSay, Bloom, SayMore, and many others. This document seeks to give an overview of the assemblies contained in the Palaso project and to help developers to determine which assembly is the most appropriate place to add new functionality. Many of the assemblies have a corresponding unit test assembly that have names that follow the pattern "AssemblyName.Tests". Although some of the assemblies in the Palaso repo use the "Palaso" namespace, the "SIL" namespace is preferred and should be used for all new assemblies. The "SIL" namespace was designed to mimic as closely as possible the "System" namespace in the .NET Base Class Library. For example, the "SIL.Windows.Forms" namespace purposefully mimics the "System.Windows.Forms" namespace.

SIL.Core contains fundamental classes that define commonly-used data types, extensions, interfaces, exceptions, events, and other functionality. It serves as the foundation for the rest of the libraries in the Palaso repo. The classes in SIL.Core are not specific to any domain and only serve to augment the .NET Class Library.

SIL.Windows.Forms contains Windows Forms classes for UI elements (controls and dialogs) that are commonly used across various SIL applications. SIL.Windows.Forms is similar to SIL.Core in that it does not contain classes that are specific to any domain.

SIL.WritingSystems contains classes for managing and persisting writing systems using the Locale Data Markup Language (LDML) format. This library also contains classes for processing IETF language tags and accessing the SIL Locale Data Repository (SLDR).

SIL.Windows.Forms.WritingSystems contains Windows Forms UI elements for displaying and editing writing systems as defined by the SIL.WritingSystems assembly.

SIL.Windows.Forms.Keyboarding provides an implementation of the SIL.Keyboarding.IKeyboardController interface (defined in SIL.Core) that can be used to support keyboard switching in Windows Forms applications. Currently, this library supports system and Keyman keyboards on Windows, and X keyboard extension (XKB) and Intelligent Input Bus (IBus) keyboards on Linux.

SIL.Windows.Forms.GeckoBrowserAdapter provides the GeckoFx implementation of the SIL.Windows.Forms.HtmlBrowser.IWebBrowser interface (defined in SIL.Windows.Forms). This allows the use of the Gecko engine as a browser control in Windows Forms applications through the SIL.Windows.Forms.HtmlBrowser.XWebBrowser class.

SIL.Archiving contains Windows Forms UI elements and classes for archiving data to REAP using the RAMP application.

SIL.Lexicon contains various lexicon utility classes that can be used across applications. Currently, this assembly contains classes for persisting lexicon settings that can be shared by different lexicon applications.

SIL.Scripture contains various Scripture utility classes that can be used across applications. For example, this assembly contains classes and interfaces for defining Scripture verse references.

SIL.Windows.Forms.Scripture contains Windows Forms UI elements for displaying Scripture.

SIL.DblBundle contains classes for building a Digital Bible Library (DBL) bundle.

SIL.Lift contains classes for reading and writing Lexicon Interchange FormaT (LIFT) data. This assembly currently supports LIFT 0.12.

SIL.Media contains Windows Forms UI elements and classes for processing audio on Windows and Linux. At some point, the Windows Forms UI elements in this assembly should be split off into a separate assembly.

SIL.DictionaryServices contains classes for defining a simple lexical model that can be used across applications.

SIL.TestUtilities contains convenience classes for developing unit tests.