These web pages were produced by an alpha (preliminary) version of the “SFM2Web” program, version V0.46, written by Robert Hunt. See here for more information.
SFM2Web is available for free. It is licensed under the GNU GPL licence, version 3.0 or later. See here for more information about GPLv3.
You can download SFM2Web from here.
The release notes are immediately below, followed by the "read me" file, and the tutorial, and then the release history list. Finally the "to do" list is at the end.
ReleaseNotes.txt
- ReleaseNotes.txt for SFM2Web Program V0.46
- +—————————————————————————————-+
- You should download one the compressed archives (tar.bz2 is smallest, zip is the most
- commonly known) and extract the files and folders into a suitable place on your computer.
- After that, you should see the file
- ReadMe.txt
- for further instructions.
- The SFM2Web program requires that you have Python3 installed
- on your computer in order to run.
- +—————————————————————————————-+
- Copyright (C) 2009-2017 Robert Hunt
- Author: Robert Hunt Email: <[email protected]>
- License: See gpl-3.0.txt
- +—————————————————————————————-+
- SFM2Web is a Python3 program that converts materials encoded using SIL's Standard Format
- Marker format (see a very brief description at
- https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&item_id=glossary#sfm) into web
- pages. The program can convert a lexicon, interlinear texts, Bible books, a multilanguage
- phrasebook, and language lessons, etc. into xHTML pages with formatting determined by
- cascading stylesheets (CSS).
- These web pages may then be copied to a web server for publication to the Internet or to
- an intranet. But these aren't the only uses for the web pages. They can also be viewed on
- a local computer to view and/or check one's own work. Or they can be sent to a dictionary
- or translation consultant as a convenient way for him/her to review one's work,
- especially since the consultant can take advantage of the formatted dictionary and text
- pages, etc., and the side-by-side or interlinear displays of the Scriptures with back
- translation, complete with live links into the dictionary/lexicon. They can also be put
- onto a thumbdrive or burned onto optical media for distribution and viewing on computers
- without broadband internet access.
- +—————————————————————————————-+
- V0.46 in progress
- Handles + caller in cross-references
- Put Bible footnotes ABOVE cross-references
- Handle words of Jesus (wj) fields in Bibles
- Remove spurious errors if Bible glossary is not required
- Leave the cross-reference text in even if we can't liven it
- Delete the old output folder (and contents) if it already exists
- Make creating Pages subfolder most robust for different control configurations
- Fixed bug with invalid Bible chapter numbers
- Automatically converted USFM Bible markers like mt, s, q to mt1, s1, q1
- Allow section headings levels 3 & 4 for Bibles
- Allow list levels 1 & 2 for Bibles
- USFM Bible lines beginning with character markers are combined with the previous line
- Now recognizes nearly all paragraph level USFM codes on the import side
- Added initial handling for USFM Bible non-break and list-indent paragraphs
- Added comparison of Bible and BT digits
- Tidied up checking of most optional USFM Bible markers
- Improved information in error messages for Bible cross-reference errors
- Now handles some character formatting USFMs in Bible verses
- Handles irregular filenames for USFM Bible files
- Changed filenames/URLs for dictionary words from integers to the actual word
- (so that they can be more easily linked to from external sites)
- Improved handling of subscripted variants in the lexicons
- Creates a missing pictures file for the lexicon
- Information about previous releases can be found in the file
- ReleaseHistory.txt
- after you download the archive and extract the compressed files.
[Back to top of page]
ReadMe.txt
ReadMe.txt for SFM2Web Program V0.46
Last modified by: Robert Hunt Email: <[email protected]>
Copyright (C) 2009-2011 Robert Hunt
Author: Robert Hunt Email: <[email protected]>
License: See gpl-3.0.txt
Contents
0. Quickstart
To run SFM2Web to convert SFM files into web pages, you need to do the following:
a/ Ensure that you have Python3 installed on your computer
b/ Install SFM2Web
c/ Run SFM2Web
This should produce the web pages plus other output files
for the sample SFM database included
To now run SFM2Web on your own data:
d/ Edit Projects.txt
Change UseSampleData from True to False
Change other settings as desired
e/ Edit the other control files in the control files folders for each project
to suit your system and your needs
f/ Run SFM2Web
Check Logfiles/SFM2Web_log.txt for errors, correct any errors in your data
and see if any controls need changing, then repeat steps e and f above
This should produce the web pages plus other output files
depending on what you have specified
Once you have it working correctly, if you update your data:
g/ Just run SFM2Web again
to back up the existing web pages (if requested)
and then produce updated pages
[Back to ReadMe top]
1. Introduction
SFM2Web is a Python program that converts materials encoded using SIL's Standard Format Marker format (see a very brief description at https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&item_id=glossary#sfm) into web pages. The program can convert a lexicon, interlinear texts, Bible books, a multilanguage phrasebook, and language lessons, etc. into xHTML pages with formatting determined by cascading stylesheets (CSS).
These web pages may then be copied to a web server for publication to the Internet or to an intranet. But these aren't the only uses for the web pages. They can also be viewed on a local computer to view and/or check one's own work. Or they can be sent to a dictionary or translation consultant as a convenient way for him/her to review one's work, especially since the consultant can take advantage of the formatted dictionary and text pages, etc., and the side-by-side or interlinear displays of the Scriptures with back translation, complete with live links into the dictionary/lexicon. They can also be put onto a thumbdrive or burned onto optical media for distribution and viewing on computers without broadband internet access.
SFM2Web is not intended to be a multipurpose program – it is only intended to do one thing–that is to process SFM (text) files into cross-linked web pages. However, it can do a number of side jobs including:
a/ validating SFM files for missing fields, fields out of order, etc.
(This information can be found in the logfile)
b/ finding vernacular words (e.g., in lexicon examples, texts, and/or Bible)
that are mispelt or missing from the lexicon
(This information can be found in a created wordlist in the logfile folder)
c/ finding glosses that are mispelt or missing from the lexicon gloss language index
(This information can be found in a separate created wordlist) We have found many inconsistencies in our dictionary and Scripture files which this program has helped us to track down and correct.
The SFM2Web program is controlled by a number of control files which can be edited by a text editor, e.g., gedit or kwrite in Linux, or Wordpad in Windows. Once properly set up, the program can be run in a single click without operator decisions (apart from handling any new errors in the data) in order to produce an updated set of web pages.
NOTE: The user of the program is responsible concerning the copyright of any data which is published by running it through this program and then placing it on a web server. The author of SFM2Web takes no responsibility for the way that this program is used.
[Back to ReadMe top]
2. Intended users
SFM2Web is currently intended for medium-level computer users with a working knowledge of English.
However, if it needed to be set up for a less skilled or educated user, a linguist or computer technician could conceivably set up and test all of the control files, leaving the "naive" user a simple link/shortcut to click to run the program as lexical and/or other SFM data is updated.
[Back to ReadMe top]
3. Control Files
The SFM2Web control files are just simple text files (with the .txt file extension) that are usually found in the ControlFiles folder. You can edit them with any suitable text editor. (If the lines appear all messed up in MS-Notepad, try using MS-Wordpad or another editor that can also handle non-Windows linebreak conventions.)
The control files control the execution of the program. Each file contains a number of named fields that can contain True or False (or On or Off) or a text entry (such as a heading or a language name) or a number of fields separated by spaces (such as words to be ignored).
...to be expanded...
Note the SFM2Web can handle multiple sets of control files for different data sets or web site output styles. See below for more information about doing this (using the -c command line parameter).
[Back to ReadMe top]
4. Style templates
The style templates are just simple text files (with the .css file extension) that are usually found in the Templates/Stylesheets folder. You can edit them with any suitable text editor. (If the lines appear all messed up in MS-Notepad, try using MS-Wordpad or another editor that can also handle non-Windows linebreak conventions.)
...to be expanded...
Currently SFM2Web only handles one set of stylesheets for all generated web sites.
[Back to ReadMe top]
5. Polish
This program is not finished nor polished. You should regard it as a "proof-of-concept" only at this stage. It is not even an alpha version. Not all controls do anything in the program, some simply don't work at all or don't work properly yet, and most combinations of controls have not been tested.
If you see room for improvement in the program design, controls, algorithms, layout, styles, colours, etc., see CONTRIBUTIONS below.
You should also be aware that the techniques for guessing roots by removing combinations of affixes are very rudimentary, and will not work at all for some types of languages. What's more, even when they do work reasonably well, they are likely to give some incorrect results.
SFM2Web is developed on Linux with Python 3.1, and has not been tested on other operating systems yet. However, it has been designed in such a way that it should theoretically require few, if any, changes to run on other operating systems.
SFM2Web loads all of its data into memory for processing. If your computer has limited memory, the operating system might need to use a lot of temporary files on the hard disk and run quite slowly. There are no real plans to change this behaviour, since the program is considered to be a "server" type program, rather than a "data entry" type program. So if you have problems, copy your SFM files to a more powerful computer, and install and run SFM2Web from there. (Then you have to move the output files to your web server to make them "live" for the world to access.)
[On my computer with a 2,2GHz dual processor and 4GB of RAM, SFM2Web takes around ten minutes to run with a full lexicon and New Testament, using around 4% (200MB) of memory.]
The format of control files is not guaranteed to be compatible with future releases until V1.0 is released. After that point, the program will automatically issue warnings and helpful instructions concerning changes to the format of the control files.
SFM2Web output has only been tested on Firefox 3 thus far.
[Back to ReadMe top]
6. Use of log files
As mentioned in the introduction above, the three main log files can be used to help clean up the SFM data. Most errors related to the running of the program and the control files settings are stored in SFM2Web_log.txt (stored by default in the 'Logfiles' folder). This includes errors from validation and hierarchical checking if enabled. Vernacular words used in example sentences, etc. but which couldn't be located in the 'WordsNotInLexicon.txt' file in the same folder, and gloss language words (e.g., from the sentence translations) which couldn't be found in the reversal index are listing in the 'GlossesNotInLexicon.txt' file.
However, it's easily possible for these files to contain thousands – or even tens of thousands – of lines, especially for the lexicon. This is where it's helpful to filter the logfile(s) in order to view only the lines of interest. The 'grep' program (which is always included with GNU/Linux and which can be downloaded for Windows from <gnuwin32.sourceforge.net/packages/grep.htm> can be used for filtering.
For example, to only show lines from the log file containing validation errors, use:
grep -i validation SFM2Web_log.txt
More information on using SFM2Web for checking language data can be found below.
[Back to ReadMe top]
7. Python installation
This program requires Python 3.1 or better, which can be freely downloaded from
https://www.python.org/download/releases/3.1/
NOTE: Many Linux systems have Python 2 already installed. You can determine your Python
version by typing
python -V
from the command line. If you already have Python 2 and are installing Python 3
from source, you should use the ALTERNATE INSTALL instructions specified in the
ReadMe file (so that Python 2 and 3 can coexist without breaking your system).
[Back to ReadMe top]
8. Program installation
I haven't ever written an installer for a Python program yet! Maybe you can do it for me?
Currently, place the enclosed files and subfolders in folder somewhere, open a command window, navigate to your folder and run:
python3.1 SFM2Web.py
This should do a successful run using the test data. Now navigate to the ControlFiles folder and edit MainControls.txt, changing the setting for UseSampleData from True to False. Now edit all ofthe control files to suit your project. Run the program again exactly as above, looking at both the terminal output and the log file (in a folder called LogFiles by default) for issues that need to be addressed.
Once the setup files are customised for your situation, you shouldn't need to alter them to run the program again. If your data files have been updated, just run the program again and it will generate new web pages. (The old ones will be saved in a backup folder if you have specified this.) Just move the new pages over to your web server, and it will now display your most up-to-date data.
[Back to ReadMe top]
9. Command line parameters
SFM2Web can accept parameters from the command line. A list can be printed with:
python3.1 SFM2Web.py –help
Other parameters include:
–base=FOLDER To set the base directory for the program
so the program can easily be run from a different directory
(especially if running it via a script or batch file)
–folder=FOLDER To look for the project file in a different location
–project=PROJECT To use a different file instead of the default Projects.txt
–silent To produce minimal output (can also be set in Projects.txt)
–quiet To produce less output (can also be set in Projects.txt)
–informative To produce more output (can also be set in Projects.txt)
–verbose To produce even more output (can also be set in Projects.txt)
[Back to ReadMe top]
10. Internationalisation
Sorry, I don't really know much about internationalisation of the program itself.
The meta language for the control files is English. However, if a graphical front-end were to be created for editing the control files (see below), the internationalisation could be built-in at that level.
Program error messages and the program log are all in English. I don't plan to change this at this stage.
All HTML classnames and Id fields are in English and this is not planned to change.
Concerning the HTML generation, I've tried not to always assume that English will be the meta language of the created web pages. Specialised fonts can be specified by changing the stylesheet(s), either changing the templates in the Stylesheets folder of the program for permanent changes, or in the Stylesheets folder in the output folder for testing temporary changes. Some English text IS still within the program code for creating HTML but it is planned to remove all of this (moving it into setup files) as the code is reviewed and cleaned up.
Concerning the internationalisation of the input data handling, perhaps cleaning up the handling of punctuation in the SFM files would be a good start as different languages use different symbols. Maybe the control files should specify character sets, so these can be checked against the data. And no doubt, as soon as one or two people start trying the program on their data, dozens of issues are likely to arise.
[Back to ReadMe top]
11. Graphical interface
SFM2Web is a command line program. However, future addons could conceivably include a graphical editor for control line parameters and then automatically running the program. This might be more intuitive for some users.
[Back to ReadMe top]
12. Standards
SFM2Web uses standards as much as possible, both in interpreting its input files, and in creating its output files. However, by use of control files, it also has the flexibility to handle non-standard input files to some degree.
It should also be relatively easy for a Python programmer to adjust the scripts to handle special cases where the designed-in flexibility is still insufficient. (Of course, if the adjustments make the code more generally useful, it would be nice to submit them to the author so they can be added to the main code base for wider distribution – see below.)
The control files are UTF-8 text files. The encoding can be specified for the user's input files. The created web pages should all be valid xHTML 1.0 "strict" and the created stylesheets should all be valid CSS – verifiable for online pages by clicking the relevant icons included at the bottom of every page.
SFMs (Standard Format Markers) are a SIL standard for text files. SFM files use a backslash (\) followed immediately by a field name and some optional text. The fieldname must be terminated by a space, tab, or newline character (or in some cases, an asterisk). Most often, "record or paragraph level" fields will begin with the backslash in the first column of the line, however, some SFM documents or databases will allow backslash fields within the line, often to indicate "character" formatting. SFM is only a very weak standard in that it only specifies the markup format for and doesn't necessary specify the record or field structure of the file. Thus very often users freely define their own record structure plus many use their own "character" level markup schemes. Very often the closure of a field is not explicitly marked and is determined by the user to occur at the occurence of the next SFM, or at the end of the record, etc.
MDF (MultiDictionary Format???) is a SIL standard for dictionaries/lexicon databases. It is more specialised and more specified than SFM format as it clearly specifies which standard format markers must be used for which field, and somewhat specifies a hierarchical structure that indicates which SFMs must occur in each record and in what order. MDF files contain a few database controls at the top of the file, and then following that, a "record" structure where each record must begin with the same SFM.
USFM (Unified Standard Format Markers) is a UBS/SIL standard for Scripture markup. (See <https://ubs-icap.org/usfm>.) It is more specialised and more specified than SFM format as it specifies a large set of allowable "paragraph" markers, plus "character" markers which can occur within a "paragraph" field. Character markers are usually expected to be closed with a repeat of the marker followed by an asterisk, but may also be assume to close at the end of the "paragraph" level field.
The output of SFM2Web can be automatically packed and compressed into a ZIP archive ready to be transferred to your web server.
[Back to ReadMe top]
13. Compatibility
While this remains a "proof of concept" version (not even an alpha version), no effort will be made to retain compatibility of control files with older versions. Thus control fields may be renamed without any warning other than that either the program will produce a fatal error, or your web output simply might not look correct. Sorry, but that's life.
If ever V1.0 is released, any future changes to the control files will be documented and the program will automatically give warnings to the user.
[Back to ReadMe top]
14. Licensing
SFM2Web is licensed under the GNU General Public License V3.0. More details can be found in the file 'gpl-3.0.txt' included with this program. But you should at least be aware of the following:
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <www.gnu.org/licenses/>.
The sample data files are all Copyright (C) by SIL Philippines and are included only to demonstrate the use of the program. They may not be published on an Intranet except to demonstrate the output of the program, and they may certainly not be published on the Internet. Please note that the sample lexicon is only a portion of the real file.
[Back to ReadMe top]
15. Contributions
Contributions which make the code or control files more useful or flexible are welcomed. Also improvements to the xHTML templates and the CSS stylesheets. If you are willing to submit more attractive templates and/or stylesheets, these could possibly be included in the distribution as alternatives.
I don't know anything about merging "patches" to program files yet, so if you submit a "patch", either you have to be prepared to include instructions on how to use it, or else I will probably just merge it manually.
Please note that the structure of the prototype program is very tentative, as it will soon be tidied up and modularised. So don't try to do that yet. And once that's done, a test program suite should be written for quality control.
Also, if you are willing to contribute databases to be tested, particularly if they current fail to be processed yet follow a well-known or standard format, then that would be helpful. These can be treated confidentially. (However, the author is updating this program as a hobby / spare-time project, so no promises or deadlines can be given to any database contributors.)
[Back to ReadMe top]
16. Future plans
Making sure that it works easily for MDF lexicons is a priority. So is including more USFM Bible fields – so far it only contains the subset that the author has used in his project.
If someone would volunteer to done some of their artistic talent to the xHTML templates and CSS stylesheets, that would be great. Thus far the main focus has been on getting the program working and making it more generally useful, than in making it pretty.
It might perhaps be nice to include an option to produce output in ISO standard Open Document Format for offline use on an Intranet or on personal computers (but then I'd probably have to change the name of the program). That would also give a path for easy production of nicely formatted PDF files for printing or for hosting on the Internet.
[Back to ReadMe top]
17. Inspiration
This program was largely inspired by the SIL Lexique Pro software. (See <www.lexiquepro.com>.) Lexique Pro is able to take a SFM lexicon and index and display it, as well as export it in many forms, including MS-Word (TM) files, PDF files, and HTML files. It can also encrypt a lexical database for limited distribution.
Being also inspired by the Free Software Foundation, SFM2Web does not include encryption or other facilities to limit the distribution of lexical data. It is mainly intended for users or communities who are interested in making their data collections available to as many people as possible.
Finally, this program was inspired by the great prophet and teacher, Jesus Christ, who said, "Freely you have received, freely give." (Matthew 10:8b, NIV)
[Back to ReadMe top]
18. Comparison with other programs
Other programs which have overlapping functions with SFM2Web include:
a/ Lexique Pro (LexPro) from SIL (See <www.lexiquepro.com>.)
Lexique Pro is able to take a SFM lexicon and index and display it, as well
as export it in many forms, including MS-Word (TM) files, PDF files, and HTML
files. It can also encrypt a lexical database for limited distribution.
b/ Prophero from SIL (in development)
Prophero is able to take OurWord or USFM Bible files through an OSIS (XML) path
and produce an HTML or xHTML website with full concordancing and nice
highlighting.
c/ Paratext 7 (PT7) from UBS (in development)
Paratext is a full USFM Bible-editing and checking environment, but it can also
do an export to HTML (Use Tools/Export Project to HTML...). The user can choose
either the current book or all books and select the output folder. Everything
else is automatic.
Here is an attempt at a comparison between these four programs:
LexPro Prophero PT7 SFM2Web
Free (in cost) Y ? N Y
Freely available to all users Y ? N Y
Downloadable now Y N Y N (coming on sfm2web.sourceforge.net)
Full Unicode (with UTF-8 output) Y Y Y Y
INTERFACE
Graphical interface Y Y Y N (but could be built on as an additional program)
One click site update (once setup) N ? N Y
INPUT
Handles lexicon Y N N Y
MDF Y - - Y (hyphen/dash means not applicable)
Custom Y - - Y
Photos in lexicon Manual - - Auto
Sound files in lexicon Manual - - Auto
Classification system Moe-DDP - - Moe-DDP/HRAF-OCM
Aware of morphology ? - - Basic
Handles two lexicons for same lg N - - Y
Handles phonology N N N coming
Does some automatic analysis - - - coming
Handles grammar sketch N N N hopefully
Handles readers / literacy materials N N N Y
Handles interlinear texts N N N Y
Links texts to lexicon - - - Y
Links lexicon to texts - - - Y
Handles multilingual phrasebook N N N Y
Drawings in phrasebook - - - hopefully
Links phrasebook to lexicon - - - Y
Links lexicon to phrasebook - - - Y
Handles language lessons N N N Y
Sound clips in language lessons - - - coming
Links language lessons to lexicon - - - Y
Links lexicon to language lessons - - - Y
Handles health books N N N coming
Handles Bibles N Y Y Y
Inputs USFM files - Y Y Y
Handles one chapter per file - Y Y N
Inputs OSIS format files - Y N N
Inputs OurWord format files - Y N N
Does side-by-side version - N N Y
Does interlinear version - N N Y
Includes back matter - Y ??? Y (glossary)
Makes complete concordance - Y N Y
Makes topical concordance - N N Y
Links Bible text to lexicon - - - Y
Handles songbook N N N Y
Handles multiple languages on one site N Y N Y
OUTPUT
Automatically gathers statistics N N N Y
Uses frames / Javascript Y/N Y N Y/N
HTML output validates with w3.org N ? ? Strict xHTML
All formatting in CSS (Stylesheets) Most ? N Y
Can produce PDF files Y N N N
Can produce OpenOffice Writer files N N N N
Can produce MS-Word files Y N N N
Can encrypt output Y N N N
Can produce ZIP file for uploading N N N Y
Can produce ZIP files for downloading N N N Y
Auxilliary programs for CD autorun N Y N N
PROGRAM
Open source code (freely customizable) N N N Y
Platforms WIN WIN WIN ALL
Source language Delphi ??? ??? Python3
[Back to ReadMe top]
19. Using SFM2Web for checking Lexicons
If you use the SIL Toolbox program as your dictionary editor, it does not necessarily impose limitations and restrictions on the contents or orders of fields. This allows SFM databases to contain many kinds of format and structure errors. SFM2Web can help to discover and list these errors (for you to correct).
However, please be warned that a typical language learning dictionary with two to ten thousand entries, can generate many tens of thousands of warning messages. You should study #4 above about how to use 'grep' as a filter to only show lines of particular interest out of the log and wordlist files.
Note that SOLID from <https://projects.palaso.org> is also a tool for checking and cleaning up SFM databases and can be obtained from the SOLID home page.
More coming...
[Back to ReadMe top]
20. Using SFM2Web for checking Bibles
If you use the Paratext or Bibledit programs as Bible editors, they do not necessarily check your entered data—various checks have to be manually run. Also, they make no attempt to check across projects, e.g., to check that a Back Translation project conforms to the corresponding Vernacular project. SFM2Web can do many Scripture checks and can also be used to check that a Back Translation matches its vernacular source. It can also check that the book name abbreviations given in section and cross references are valid.
However, the same warning applies as for lexicons—the first time you run a check you may be discouraged to receive many hundreds of warning or error messages. The good news is that as you gradually reduce these warnings, the quality of your publication is improving.
More coming...
[Back to ReadMe top]
21. Handling multiple projects (on one site)
If you are using SFM2Web to combine several independant language projects onto one web site, SFM2Web can do this and even make an overall cover page. You should follow the following steps:
a/ Edit the Projects.txt file and add lines for
Project2Name = (your project name here—will show on cover page)
Project2ControlFileFolder = (folder path here)
b/ You can go up to project #9 but the numbers must be consecutive (starting from #1)
c/ Adjust the block of controls under "Overall cover pages" to your requirements
d/ Adjust each project's control files to your requirements
e/ Just run the program as normal and it should process each project in turn,
and then create the cover page(s).
[Back to ReadMe top]
22. Handling multiple sites (on one computer)
If you are using SFM2Web to make several independent web sites, this can be done by following these steps:
a/ Copy the Projects.txt file to a file of another name
e.g. Projects.Site2.txt
b/ Edit the new file to suit the new site
c/ Be sure to change the LogfileFolder control if you want the logfiles for each site
to be saved separately
d/ Run the program with the following command line
python3.1 SFM2Web.py -p Projects.Site2.txt
(python3.1 SFM2Web.py –help lists all available command line options)
[Back to top of page]
Tutorial.txt
- Tutorial.txt for SFM2Web Program 0.46
- +—————————————————————————————-+
- Copyright (C) 2009-2011 Robert Hunt
- Author: Robert Hunt Email: <[email protected]>
- License: See gpl-3.0.txt
- +—————————————————————————————-+
- CONTENTS
- ========
- 0. Audience
- 1. Introduction
- 2. The project control file
- 3. Control files
- 4. Style templates
- +—————————————————————————————-+
- This document isn't about how to install SFM2Web or it's Python3 requisite.
- You should look in ReadMe.txt for instructions about that.
- Rather, this tutorial is to help guide you through the main steps required to produce a
- web site from your SFM files.
- So before using this tutorial, you should already have the following:
- a/ Python3 installed on your computer
- b/ SFM2Web installed
- c/ You should have run SFM2Web to produce the demonstration web site
- from the sample SFM data provided
- d/ You should have your own SFM data file(s) ready.
- +—————————————————————————————-+
- SFM2Web is a Python program that converts materials encoded using SIL's Standard Format
- Marker format (see a very brief description at
- https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&item_id=glossary#sfm) into web
- pages. The program can convert a lexicon, interlinear texts, Bible books, a multilanguage
- phrasebook, and language lessons, etc. into xHTML pages with formatting determined by
- cascading stylesheets (CSS).
- These web pages may then be copied to a web server for publication to the Internet or to
- an intranet. But these aren't the only uses for the web pages. They can also be viewed on
- a local computer to view and/or check one's own work. Or they can be sent to a dictionary
- or translation consultant as a convenient way for him/her to review one's work,
- especially since the consultant can take advantage of the formatted dictionary and text
- pages, etc., and the side-by-side or interlinear displays of the Scriptures with back
- translation, complete with live links into the dictionary/lexicon. They can also be put
- onto a thumbdrive or burned onto optical media for distribution and viewing on computers
- without broadband internet access.
- SFM2Web is not intended to be a multipurpose program – it is only intended to do one
- thing–that is to process SFM (text) files into cross-linked web pages. However, it can
- do a number of side jobs including:
- a/ validating SFM files for missing fields, fields out of order, etc.
- (This information can be found in the logfile)
- b/ finding vernacular words (e.g., in lexicon examples, texts, and/or Bible)
- that are mispelt or missing from the lexicon
- (This information can be found in a created wordlist in the logfile folder)
- c/ finding glosses that are mispelt or missing from the lexicon gloss language index
- (This information can be found in a separate created wordlist)
- We have found many inconsistencies in our dictionary and Scripture files which this
- program has helped us to track down and correct.
- The SFM2Web program is controlled by a number of control files which can be edited by a
- text editor, e.g., gedit or kwrite in Linux, or Wordpad in Windows. Once properly set up,
- the program can be run in a single click without operator decisions (apart from handling
- any new errors in the data) in order to produce an updated set of web pages.
- NOTE: The user of the program is responsible concerning the copyright of any data which
- is published by running it through this program and then placing it on a web server. The
- author of SFM2Web takes no responsibility for the way that this program is used.
- +—————————————————————————————-+
- 2. The project control file
- To now run SFM2Web on your own data:
- d/ Edit Projects.txt
- Change UseSampleData from True to False
- Change other settings as desired
- e/ Edit the other control files in the control files folders for each project
- to suit your system and your needs
- f/ Run SFM2Web
- Check Logfiles/SFM2Web_log.txt for errors, correct any errors in your data
- and see if any controls need changing, then repeat steps e and f above
- This should produce the web pages plus other output files
- depending on what you have specified
- Once you have it working correctly, if you update your data:
- g/ Just run SFM2Web again
- to back up the existing web pages (if requested)
- and then produce updated pages
- +—————————————————————————————-+
- The SFM2Web control files are just simple text files (with the .txt file extension) that
- are usually found in the ControlFiles folder. You can edit them with any suitable text
- editor. (If the lines appear all messed up in MS-Notepad, try using MS-Wordpad or another
- editor that can also handle non-Windows linebreak conventions.)
- The control files control the execution of the program. Each file contains a number of
- named fields that can contain True or False (or On or Off) or a text entry (such as a
- heading or a language name) or a number of fields separated by spaces (such as words to
- be ignored).
- Note the SFM2Web can handle multiple sets of control files for different data sets or
- web site output styles. See below for more information about doing this (using the -c
- command line parameter).
- +—————————————————————————————-+
- The style templates are just simple text files (with the .css file extension) that are
- usually found in the Templates/Stylesheets folder. You can edit them with any suitable
- text editor. (If the lines appear all messed up in MS-Notepad, try using MS-Wordpad or
- another editor that can also handle non-Windows linebreak conventions.)
- Currently SFM2Web only handles one set of stylesheets for all generated web sites.
- +—————————————————————————————-+
- 9. Command line parameters
- SFM2Web can accept parameters from the command line. A list can be printed with:
- python3.1 SFM2Web.py –help
- Other parameters include:
- –base=FOLDER To set the base directory for the program
- so the program can easily be run from a different directory
- (especially if running it via a script or batch file)
- –folder=FOLDER To look for the project file in a different location
- –project=PROJECT To use a different file instead of the default Projects.txt
- –silent To produce minimal output (can also be set in Projects.txt)
- –quiet To produce less output (can also be set in Projects.txt)
- –informative To produce more output (can also be set in Projects.txt)
- –verbose To produce even more output (can also be set in Projects.txt)
- +—————————————————————————————-+
- 21. Handling multiple projects (on one site)
- If you are using SFM2Web to combine several independant language projects onto one web
- site, SFM2Web can do this and even make an overall cover page. You should follow the
- following steps:
- a/ Edit the Projects.txt file and add lines for
- Project2Name = (your project name here—will show on cover page)
- Project2ControlFileFolder = (folder path here)
- b/ You can go up to project #9 but the numbers must be consecutive (starting from #1)
- c/ Adjust the block of controls under "Overall cover pages" to your requirements
- d/ Adjust each project's control files to your requirements
- e/ Just run the program as normal and it should process each project in turn,
- and then create the cover page(s).
- +—————————————————————————————-+
- 22. Handling multiple sites (on one computer)
- If you are using SFM2Web to make several independent web sites, this can be done by
- following these steps:
- a/ Copy the Projects.txt file to a file of another name
- e.g. Projects.Site2.txt
- b/ Edit the new file to suit the new site
- c/ Be sure to change the LogfileFolder control if you want the logfiles for each site
- to be saved separately
- d/ Run the program with the following command line
- python3.1 SFM2Web.py -p Projects.Site2.txt
- (python3.1 SFM2Web.py –help lists all available command line options)
[Back to top of page]
ReleaseHistory.txt
- ReleaseHistory.txt for SFM2Web Program
- +—————————————————————————————-+
- Copyright (C) 2008-2011 Robert Hunt
- Author: Robert Hunt Email: <[email protected]>
- License: See gpl-3.0.txt
- Lists changes to the SFM2Web program versions
- with the latest listed first
- +—————————————————————————————-+
- V0.46 in progress
- See ReleaseNotes.txt
- V0.45 released 21/Apr/2011
- Changed CSS formatting for vernacular proper names
- Fixed HTML for bullets in lexicon indexes
- Added code to handle (optional) UTF Byte Order Markers
- Automatically sort lexicon index if variants were added
- Allowed program to continue if an input encoding error was discovered in an SFM file
- Fixed bug in processing of MDF formatting
- Removed doubled-up dummy IDs for complex Bible versions with verse ranges
- Removed links to Bible files which weren't available
- Fixed glossary bug causing halt if Lexicon2 was not present
- Fixed some confusion between VernacularLexicon filenames and Lexicon2
- Fixed some bugs and made some improvements in the Bible glossary handling
- Changed the Bible topical concordance handling
- Create a new list of Bible words not found anywhere (lexicon, glossary, lists)
- Added more warnings about spaces before or after lexeme words in dictionary
- Fixed bug where lexicon picture folder wasn't properly created
- Added a RootReduplication control to lexicon mappings files
- Added a hack for Matigsalug which uses \NEW in Scripture file in progress
- V0.44 released 8/Feb/2010
- Fixed bug with stylesheets not being created properly
- Added code to create the empty template folders (since Mercurial doesn't do it)
- Fixed debug bug in SampleData mode and path for some readers' pictures
- Allowed SFM2Web to change SFM markers on the fly as the lexicon databases are read
- Started handling newer MDF special characters (like —)
- Allowed MDF character formatting (using braces) in more dictionary field types
- Fixed non-validating XHTML pages with ampersand or em dash in popups (title field)
- Fixed bug where vernacular Bible words next to a footnote or xref marker were not found in the lexicon
- Added handling for SILP lexicon format dialectical variant fields
- Added an optional VernacularNames.txt list to remove spurious entries from the WordsNotInLexicon.txt lists
- Removed (invalid) Bible section heading live links to books which aren't actually included
- Created an internal index to the glossary and linked Bible words to the glossary entries
- Made glossary xrefs into live links to the vernacular Bible
- Reenabled code for finding reduplicated roots inside words (not sure why it was disabled a long time back)
- Added a manual parse mode to VernacularAffixes.txt to handle multiple words contracted into one
- Fixed handling of words joined by em dash in Bible links
- Removed lots of fatal error exits out of the code so it might possibly be more robust for dirty data
- V0.43 released 5/Nov/2009
- Added an isNumber check to prevent digits and numbers being unnecessarily adding to missing words/glosses lists
- Continued to rewrite and simplify the code for links within the lexicon(s)
- Adjusted main control flow to load all data first before creating web pages (allows easier links between lexicons)
- Added code to include lexicon lexeme variants into the main lexicon index
- Fixed some bugs in AUTO mode for lexicon index creation to make it more robust
- Moved the disclaimer text into the project file
- Fixed a few errors and deficiencies in the site statistics
- Removed improper links in healthbook introduction (which caused dead links from lexicon)
- Removed improper links to interlinear and side-by-side Bible versions when they shouldn't be included
- Improved checking for duplicate Bible book name abbreviations
- Included dummy links for unused or missing Bible verse numbers to allow consistent searching
- Improved handling of verse ranges in Bible concordances and cross references in order to reduce dead links
- Changed filename prefix for lexicon2 details from 'D' to 'E' (to more easily discover bugs with linking two lexicons)
- V0.42 released 21/Oct/2009
- Added a "Generic" subproject to do a simple (vanilla) display of generic Toolbox SFM databases
- Note that "Generic" is NOT included in "ALL".
- Improved handling of Bible verse ranges so topical concordance links, etc. work better
- Added [back to top] links after each file on About page
- Fixed bug with copyright notice when MakeAboutLanguagePage is turned off
- Fixed ugly display of some file sizes
- V0.41 released 15/Oct/2009
- Added a very basic genealogy subproject
- Added an optional banner logo at the top of each page
- Placed subproject headings in the log to help the operator interpret any following logged messages
- Made the popups for lexicon Previous Word and Next Word links show the actual lexeme
- Started restructuring some of the code for making fields containing lexicon links
- Added some MDF character formatting (fb:, fi:, and fv:) and a new LexiconBaseStyle control to enable it
- Added a Tutorial.txt file to help new users get started and added it and the release notes to the website
- Moved the HTML templates into the StyleSets folder
- Removed live links from Scripture cross-references to books which aren't included on the site
- Added variants of inflected forms to the word index in the lexicons
- Added a new LexiconName control and slightly changed the LexiconTerminology control
- Did quite a bit of cleaning up of HTML production and made data handling more robust in many cases
- Fixed a number of regressions (since V0.37) dealing with lexicon controls not working correctly
- Added vernacular and gloss language topic indexes to healthbooks
- Added a validity check to all HTML popup and most text fields
- Added a final check of all output files for broken internal links in Debug mode
- Wrote a faster HTML cleaning and checking routine plus eliminated superfluous runs of HTML compression on unfinished files
- V0.40 released 12/Sep/2009
- Added a Proto language index to the lexicon
- Corrected a number of xHTML validation errors (the new built-in HTML compression routine helps with off-line validation)
- Added code to create log files listing all vernacular Scripture footnotes and xrefs (for consistency checking and proof-reading)
- Changed the Scripture topical concordance to display vernacular book names
- Fixed a bug in Scripture concordances which allowed duplicate entries differing only by case (e.g., perhaps and Perhaps)
- Made Bible text replacements occur immediately after loading the files
- Tidied up footnote handling in Scripture BT check
- Moved some code into the new HTML.py module and added code for HTML checking and compression (but it's very slow for a big site)
- Allowed asterisk wild card in TextsFiles control in TextsControls.txt (and made the filename extension case insensitive)
- V0.39 released 29/Aug/2009 (available at https://sourceforge.net/projects/sfm2web/files)
- Tested (on Ubuntu Linux) with Python 3.1.1
- Corrected a number of xHTML validation errors
- Added healthbooks subproject
- Updated the ReadMe file and added reference to SOLID
- Made "See ...." entries in the Bible glossary into live links
- Properly removed some more word punctuation before creating the vernacular and BT concordance lists
- Disabled unfinished key terms concordance code (even if set in control files)
- Allowed separate encoding types for the various Bible files such as VernacularBible, BT, Notes, ReferenceBible
- Automatically create thumbnails for lexicon photos (on Linux operating systems with "convert" installed at least)
- Allowed Scripture files to define a character (in BibleControls.txt) which will be converted to a non-breaking space
- Fixed broken link from Introduction page to About page with multiple projects
- Added extra verbosity control command line parameters (silent, quiet, and informative)
- Added a command line parameter to specify the base directory (so SFM2Web can be operated from any directory)
- Added a command line parameter to specify the project file (and changed the parameter for the project file folder)
- Fixed regression where angle brackets were being left in Bible texts (instead of being changed to quote marks)
- Fixed the demonstration (SampleData) mode to log in the right place and to create output in SampleOutput folder
- Made SFM2Web more error resistant when automatically creating necessary folders (use makedirs instead of mkdir)
- V0.38 released 3/Aug/2009
- First commit to SourceForge Mercurial downloadable from https://sfm2web.hg.sourceforge.net:8000/hgroot/sfm2web
- Tested with the new Python 3.1
- Added an extra check to warn if homonym numbers in the lexicon are inconsistent or out of order
- Allowed the user to specific the sense number in lexicon picture names to reduce ambiguity
- Allowed BTCheckWords to have direction control markers for better control over checking
- Added a "download site" control to the MainControls.txt file
- Added a "site home" link control to the Projects.txt file
- Added MDF citation forms and subentry words to the lexicon vernacular word index
- Added option in Projects.txt for adding/removing the extra top-level folder in the compressed archives
- V0.37 released 28/Jun/2009
- Added a few extra little adjustments to make it easier to accept a SFM lexicon exported from FieldWorks
- Allowed NULL to be specified in lexicon mapping file to suppress built-in default fieldnames
- Implemented stylesets making it easier to chose a style for the web site (.css files)
- Greatly improved support for MDF lexicons
- Removed display of the specified language on every entry if the lexicon only contains words of one language
- Added check for illegal character sequences in Bible notes
- Added better checking for Bible chapter and verse numbers out of consecutive order
- Combined more lexicon fields (esp. user fields) onto the same line (connected by semicolons)
- Removed links to different lines of the same text if too many so that preference is given to links to several different texts
- Added second lexicon sub-project (allows two different display formats for the same or different SFM databases)
- V0.36 released 10/Jun/2009
- Fixed bug whereby some book names were missing before verse ranges in the Bible concordance indexes
- Removed ugly links on individual lexicon gloss language letters with non-unique links to vernacular
- Added code for readers (literacy material) subproject
- Allowed multiple gli (gloss introduction) and va (variant) fields for Matigsalug lexicon hack
- Fixed some unclosed xHTML span errors in lexicon details entries
- Started making some language lesson fields live
- Tidied up gloss fields after related words (e.g., synonyms and antonyms) in lexicon
- Add links from lexicon to songbook, phrasebook,language lesson, and Bible concordance pages
- Improved titles of songs and made vernacular lines into live links
- Added code to handle |v..|r for embedded vernacular words (with hot-links) in gloss language fields
- Save the songbook intro up one level in the file-system
- V0.35 released 2/Jun/2009
- Added some extra songbook fields, plus title (including first line) and tune indexes
- Added extra diagnostic information to missing words and missing glosses lists, and removed some extraneous things like digits
- Added missing words list and missing glosses to the site (intended for processing errors only – not for a production site)
- Added code to allow the POS entry number to be added to picture filenames to prevent multiple picture insertions into one lexicon entry
- Moved punctuation outside live Bible vernacular links
- Made phrasebook vernacular headings, lines, and vocab entries live
- Added more informative popup glosses to example sentence and vernacular definition words
- Added OCM HRAF and DDP4 category names to entries, plus separate subject indexes
- Moved the Matigsalug hack functions to a separate module
- Added tar.gz site compression (already had ZIP but it was unreliable)
- Prevented a few more recursive lexicon links (e.g., from example sentences and translations)
- Added more control over the program verbosity (in the Projects.txt control file)
- Allowed multiple (language) projects on one web site with overall cover pages
- Created a Projects.txt control file and moved some controls out of MainControls.txt
- Automatically create the logfile folder if it doesn't already exist
- Distinguished concordance and index filenames that would only otherwise be distinguished by case
- Allowed two levels of indexing for the lexicon index
- Allowed multiple lexicon SFM files
- Added sounds to the lexicon
- Added a phonemic field to the lexicon (phonetic was already there)
- Phonetic and Phonemic brackets are now specified in the lexicon control file
- Fixed glossary folder for SampleData
- Allowed a list of file extensions (instead of just one file extension) for lexicon photos
- V0.34 released 25/Mar/2009
- Got sample data working again (by updating control files)
- Added home and project links in left sidebar
- Added Songbook subproject
- Allowed # comments after boolean fields in control files
- Fixed some Bible xref data handling errors which caused the program to terminate
- Added lists of empty, completed, and partial Bible books
- Added Bible reference version
- Added new Bible and BackTranslation(BT) validation controls:
- CompareBTMarkersWithVernacular, CompareBTQuotesWithVernacular, CompareBTPunctuationCountWithVernacular
- CompareBTPunctuationOrderWithVernacular, CompareBTCharacterFieldOrderWithVernacular, CheckForIllegalCharacterSequences
- V0.33 released 31/Jan/2009
- Got sample data working again (by updating control files)
- Added some more debugging code
- V0.32 released 30/Nov/2008
- Added this file (ReleaseHistory.txt) to the "About" page
- Started sections on control files and style templates in ReadMe.txt
- Separated BT concordance entries into a separate folder to prevent overwriting
- Added note at top of log page
- V0.31 released 23/Nov/2008
- Added a BT concordance
- Gave separately named CSS classes to BT and Bible notes fields
- Added option to put log file onto site
- Uses non-break hyphens (U+2011) in verse ranges
[Back to top of page]
ToDo.txt
- TODO.txt in rough priority order (usually simplest or most interesting things first :)
- Add support for MDF |{tab} Tab character
- – Inserts an En-dash character
- — Inserts an Em-dash character
- Inserts a non-breaking space
- |{-} Inserts an optional hyphen
- |{_} Inserts a non-breaking hyphen
- Fix bug where mdash in popup is messed up when checking (Bible concordance???)
- Put Bible book name fast links at top of each page
- Combine entries onto one line in lexicon gloss language index (rather than on separate lines with a bullet)
- Add more next/previous links on things other than lexicon
- Put popups on left-sidebar links
- Do better labels/popups in PreviousWord/NextWord links
- Add section index in Songbook
- Check healthbook topic indexes are working – why open in new windows?
- Match separated forms e.g., cause_ me _to_cry before checking for BT errors
- Make the compare versions code handle two or three extra SFMs
- Also check lc compounds before checking BT words – is this working correctly?
- Remove links on single letters in lexicon index pages (with no details pages)
- Checkout and fix up lexicon indexes e.g., MS ke1 ke' ke2
- Put more liberal file permissions on Website before making archives???
- Work out how to do MDF citation forms
- Change lexicon2 to SLexicon or something – to allow default fields of different langauges
- Work on indexes for student dictionary
- Do links between the student and main lexicons
- Don't need other coloured icons and don't need so many sets
- Investigate MS words in the Bible that don't have links (not parsed?)
- Need to clean up layout of main pages and left-sidebars to be more consistent and useful
- Some ILEX index pages have only one entry!
- Improve marking of styles for headers and fields with TWO spans, e.g., span class="SemanticCategory">SC: + NBSpace + consonant</span
- Need more thought about ambiguity: re -> ra, rè and sulu -> sulu, sulù }
- Sort guessed roots by confidence (more guessing = less confidence) }
- Request other dictionaries and Scriptures for testing
- Look at stylesheets – do we need more/less individual stylesheets?
- Make key abbreviations live, e.g., 'Tag.' linking to a key page
- Check format of cross-language indexes to lexicon and add informative popups
- Break all large indexes into multiple letters
- Prevent pictures from being included if ambiguous (especially disallow duplicates)
- Allow Lexicon link to be live in left sidebar if gone to lexicon top index letters
- Add extra sorted column in phonology
- Add a set of minimum controls (that the user can start from and then slowly enable more features)
- Add a crude KT checking tool
- Add checks for trailing spaces on SFM lines in other projects (already done in Lexicon)
- Add a reference Bible project display page with a comparison to the Vernacular
- Do BTConcordanceWithParallelVernacular
- Add KT reference lists (as a translators/consultant tool)
- Look at KT stuff in the new Bibledit
- Do KT concordance (cover page already done)
- Try out Prophero and look more at https://www.e-alkitab.org/
- Use right-bar and tidy all HTML divisions
- Make entries live links in glossary
- Add previous/next buttons on texts and Bible pages, phrasebook
- Handle ambiguous word links properly (especially for glosses) by building intermediate pages
- Use compiler information(s) from control files
- Handle USFM 2.2 (released Oct08) Bibles more fully
- Remove hardcoded USFM xref and other markers from code
- Finish grammar writeup and phonology options
- Add character and punctuation sets for each language ???
- Have information pages for each of lexicon, Bible, language lessons, etc.
- Finish existing features TODO
- =============================
- Provide a downloadable version (zipped HTML, PDF?) on the website – done for individual projects only
- Handle frames properly (with/without JS???)
- Delete empty folders (e.g., Sounds, Pictures) in clean-up at end of program
- Design a program icon / logo
- Get validation working for texts and Bible
- Finish hierarchy check
- Add more statistics including disk file counts and sizes
- New features TODO
- =================
- Add automatic .AVI downloads in lexicon
- Make a favicon in the template
- Design an automatic way to make links live in ReadMe.txt
- Make a programmatically controlled robots.txt file in the template
- Can we do searching somehow? (Look at Python documentation local site)
- Find out what the Javascript stuff in Lexique Pro does and if JS is really needed for frames
- Allow parallel Bibles with other than vernacular plus BT
- Documentation TODO
- ==================
- Write up the tutorial
- Make a helpfile with a longer description and one or two examples for each possible control file field
- Web standards TODO
- ==================
- Format dates according to the locale
- Try to improve sound links (HTML5?)
- Check layout on IE, Opera, Chrome, etc.
- Check out Creative Commons licensing and have the program recommend one of these licenses
- Futuristic improvements TODO
- ========================
- Add ebook downloads (.epub) – see https://bookworm.oreilly.com/library and https://feedbooks.com
- Possibly add direct support for reading LIFT
- Add RDF/RDFa tagging (see <https://www.linuxjournal.com/article/9987>)
- Investigate namespaces: <html xmlns:osis="https://www.bibletechnologies.net/2003/OSIS/namespace" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="urn:nowhere">
- Program Structure TODO
- ======================
- Make HTML generation etc. more table driven or generic
- Remove any English meta-language stuff from the Python code
- Manually delete large DBs after no longer required to reduce memory footprint of program
- Tidy-up and improve error handling and logging
- Find a way to create photo thumbnails with a Python library call instead of using the external "convert" command (which only works for Linux)
- Tidyup code – refactor/split out loading, indexing, creating, misc pages, better
- Convert internally to Python 3.1 ordered dictionaries where helpful
- Put translations (gettext) into the code
- Write test suite for QA of future versions
- Matigsalug TODO
- ===============
- Add agriculture book
- Add DG book
- Add Matigsalug MP3 and PDF downloads
- Add special MS code to check roots starting with h and g (and h and ?)
- Why doesn't MS index bu live link to buwa? (All See links seem dead!)
- Convert all reader drawings and fix existing books
- Finish entering reader books and other literacy materials
- Fill out introduction page
- Enter and format a complete MS language lesson
- Enter/convert all language lessons
- How could one find the root of dagdahew? adj like mabbenes
- Add more Matigsalug compound words to the Bible concordance
- Add drawings to Phrasebook pages
- Start on Grammar subproject
[Back to top of page]