Last revision: 15-October-2026
The standard is a minimized version of HTML. In line with the goal of being simple to use and to implement, there is no use of CSS or scripting, and the tags and styles have been reduced to a small set. One does not need a full internet browser to display EPRW files. The simplified markup serves both to indicate how text is displayed and to provide contextual information for software use. To the minimal HTML support is added some additional special-case markup. For the most part, a properly formed EPRW file would display in a web browser in much the way one would expect it to show in any software that uses it. However, there are exceptions which are described in the rest of this document.
Directives are the top-level structure in an EPRW file. A directive will always end a previous paragraph. A few directives will provide context for all following paragraphs, such as #LANGUAGE (which see).
To provide a means of displaying a window into a large document, rather than software having to load the entire document for rendering any of it, the standard takes a paragraph-centric approach. This has two aspects. First, paragraphs are the outermost text structure that hold other HTML markup. A paragraph begins on each new line of the file, or where a paragraph tag is encountered. However the use of the #AUTOPARAGRAPH directive (which see) will allow paragraphs to comprise all text until a blank line or directive is encountered. Paragraphs will ignore any enclosing tags. For instance, blockquote tags must be within a paragraph, not around a paragraph. Second, all unclosed tags are implicitly closed at the end of a paragraph. This is because paragraphs may be independently accessed in any order and, thus, context from previous paragraphs may not be available. Well-formed text will be sure to close all opening tags by the end of the paragraph. This allows preview of the text in a browser to match what other software would show. Software using EPRW formatted files shouldn't propagate any tags across paragraphs in case of malformed text.
Note that display characteristics of text are all contained within the paragraph. However, contextual information may be supplied by previous directives or previous paragraphs. For instance the #LANGUAGE directive defines the language of all following paragraphs until explicitly changed. Likewise, a BCV key specified in an embedding will apply to the following paragraph unless it is overridden by another key embedding or a key directive. See following section about keys.
Files containing characters outside of the lower-ASCII range (values 32-126) should indicate that the file is UTF8 unicode by including a BOM marker at the start of the file, or by including the #UTF8 directive (which see) at the start of the file. Text that uses character values outside of this range in a file that has no UTF8 indicator will have undefined display results.
There are two types of markup: directives and tags. Directives begin with a pound sign (#) at the start of the line. No white space is allowed before a directive or else it will be treated as text. Be careful that no lines inadvertently start with a pound sign unless that line is a directive. Only one directive is allowed per line. Name and ID directives are required to appear before any text or any key directives (such as BCV and TOPIC).
Tags are either a subset of standard HTML tags, or EPRW-specific tags enclosed in angle brackets (< and >) that can appear within the text. Not all HTML tags are allowed, and not all tag attributes or styles are allowed for those tags. The tags that are allowed in EPRW files (and the valid attributes/styles) are described herein.
EPRW text uses the same special characters as HTML, with the addtion of the pound sign (#).
| Character | Meaning |
|---|---|
| # | Start of a directive, only when first character on a line. Considered a literal symbol if not the first character on a line. |
| < | Start of a tag. |
| > | End of a tag. Considered a literal symbol if outside of a tag. |
| & | Begins an HTML entity. See section on Entities, later in this document. |
| ; | Ends an HTML entity. Considered a literal symbol if outside of an entity. |
There are two types of keys used in markup: primary, and reference.
Primary keys are those to which a reference work can be opened directly. For instance, in a Bible app, if you enter a book/chapter/verse, you are providing a primary key and you will be taken to that location in the Bible.
Reference keys are those which refer to a key within text but are only used indirectly. Reference keys are typically used by clicking on them within text in the app.
For example, Genesis 1:1 is a primary key in a Bible. The text could include a topic key reference to "creation", which is different than the verse key. While primary topic key would be used for an encyclopedia article, you wouldn't use a primary topic key in Bible text.
Unless otherwise stated, keys defined by directives (such as #BCV or #STRONGS) are primary keys,
whereas keys defined by tags (such as <strongs>) are reference keys. Note that when using key references,
one should generally enclose any surrounding punctuation within the tags. The reason for this is that it provides a
larger target area for users to tap on small screens. If there are two key references in a row, the non-word
characters between them should usually be evenly split, or should favor the smaller reference, for the same
reasons. However, outside of whitespace and punctuation, key references should not include anything other
than the reference text itself. Example of user-friendly reference key usage:
(compare <bcv=Gen 1:27>Genesis 1:27,</bvc><bcv=Gen 2:7> 2:7).</bcv>
Note that the space separating the references is included with the second, smaller, reference - along with the closing
punctuation. We leave the trailing comma with the first reference since it is right next to the first reference and
probably would frustrate the user if they tapped the first reference and were off by a pixel. The smaller the reference, the
more useful is extra horizontal space as a tap/click target.
Directives must be on a line by themselves, and start with the pound sign (#). There must be no whitespace before this sign. Directives will automatically end a paragraph. Therefore, placing a directive in the middle of a paragraph will split it into two different paragraphs. Directives never translate directly into text - they are used to provide information to the software. The software may reveal this as text to the user, but the directives are invisible to the user in terms of displaying a document as text. Embeddings (discussed in the next section), on the other hand, are embedded in text and typically indicate text display characteristics, although some of them are purely informational for the software.
#ABBREVIATIONS
Optional
Format:
#ABBREVIATIONS
This directive starts an abbreviation section. The section is ended at the next directive. Each non-blank line in this section is an abbreviation definition of the format:
abbreviation = definition
Note that the abbreviation itself cannot include an equal sign (=).
Example:
#ABBREVIATIONS
acc.=according
AHT=Ancient Hebrew Tradition
Grk.=Greek
#ADDTOPIC
Optional
Format:
#ADDTOPIC:topic
This directive adds a topic to the following paragraph. This is used in conjunction with the #TOPIC directive. This directive does not alter the effects of any previous #TOPIC directive, and only affects the following paragraph. Example:
#ADDTOPIC:King David
#AUDIO
Optional
Format:
#AUDIO:filename
This directive includes an audio file. Supported file types are midi and mp3. This filename
is the same name referenced in a
Tag Meaning Title Recommended. The title of the tune Author The author of the tune Year The year the tune was written or published Type Required. Must be "mid" or "mp3". Indicates if the tune is a midi or mp3. Meter The meter of the tune.
Example:
#AUDIO:C:\music\Eventide.mid
<title>Eventide</title>
<author>William H. Monk</author>
<year>1861</year>
<type=mid>
<meter=10.10.10.10>
#AUTHOR
Optional
Format:
#AUTHOR: name
This indicates the author of the reference work. The name should be in the form: lastname, firstname.
Example:
#AUTHOR: Spurgeon, Charles
#AUTOPARAGRAPH
Optional
Format:
#AUTOPARAGRAPH
This indicates that lines are to be gathered together into paragraphs, with blank lines indicating the end of a paragraph. Otherwise, each non-blank line is treated as a separate paragraph. A directive will also end a paragraph.
#BCV
Optional
Format:
#BCV: book chapter:verse
Defines the start of a Bible verse. The next text to follow will be associated with this verse.
Example:
#BCV: Mark 1:1
#BIBLOS
Optional
Format:
#BIBLOS
Indicates that text marked as Greek with directives or tags, uses the Biblos font rather than unicode.
Example:
#BIBLOS
#CATEGORY
Required
Format:
#CATEGORY: cat
Defines what the category of the reference work is, where "cat" is the category.
Valid categories:
| Mnemonic | Meaning |
|---|---|
| Bible | A Bible translation. |
| Book | A book not matching one of the other categories. Organized by outline. |
| Commentary | A commentary on the Bible. |
| Lexicon | A language lexicon. |
| Maps | A pictorial atlas or other work. |
| Otherbcv | A reference work organized by Bible verse, but not a Bible or Commentary. |
| Topical | A reference work oriented by topics. |
#CONVERT_TRANSLITERATION
Optional
Format:
#CONVERT_TRANSLITERATION
For works containing transliterated Hebrew using upper ASCII characters, this tag
indicates that such text should be converted to UTF8 equivalent characters.
Example:
#CONVERT_TRANSLITERATION
#COPYRIGHT
Optional
Format:
#COPYRIGHT:text
where "text" is the short copyright text. The intention for this directive is to provide the copyright to include with any copied material from the work.
Example:
#COPYRIGHT: Copyright © 1999 by Darth Vader
#DEVOTIONAL
Optional
Format:
#DEVOTIONAL: mask
Indicates that this reference work qualifies as a "devotional". The mask indicates how to translate the current date/time to an outline key in the reference work. Each terminal node in the outline is a separate devotion.
Masks can be up to 16 characters long, consisting of one or more of the following fields. When the devotional is opened in the app, each field is replaced by a value corresponding to the current date and time and the result is used to position to an outline with that value.
| Field | Meaning |
|---|---|
| AM | Substitute "AM" if before noon, and "PM" after noon. |
| D | Current day of the month (eg 5) |
| MMM | Substitute current all-caps month (eg JANUARY) |
| Mmm | Substitute current init-capped month (eg January) |
| R | If used, this should be the only field used. It indicates to choose a random devotion. |
#FOOTNOTES
Optional
Format:
#FOOTNOTES:id=type
Defines a set of footnotes with a common appearance. "id" is the numeric footnote set ID and must be 1 or greater. The first footnote set should be assigned and ID of 1, the second should be 2, etc. "type" denotes the appearance of the footnote indicators. The following are valid type values:
| Type indicator | Meaning |
|---|---|
| loweralpha | Indicators are a-z |
| mixedalpha | Indicators are a-z and A-Z |
| numeric | Indicators integer numeric values |
| upperalpha | Indicators are A-Z |
#ID
Required
Format:
#ID:id
Indicates a unique numeric ID for this reference work. This value is assigned by the Erasmus Project.
Example:
#ID:12
#IMAGE
Optional
Format:
#IMAGE:filename
This directive includes an image file. Supported file types are jpeg. This filename
is the same name referenced in a
Example:
#IMAGE:c:\images\image1.jpg
<title>Egyptian Empire, 1450 B.C.</title>
<s>mile=0.88</s>
#INTERNAL
Optional
Format:
#INTERNAL
This directive indicates that this work contains data not intended for humans to read.
For instance, it could indicate a database of information for programmatic use.
Example:
#INTERNAL
#LANGUAGE
Optional
Format:
#LANGUAGE:language
Defines the default (primary) language for this reference work. The default language is "English". For reference works with multiple languages, choose the most common one, or the one considered to be the primary language. Note that each language also has a corresponding tag that can be used to change the language within a paragraph. The following are valid languages:
| Value | Meaning |
|---|---|
| Anglosaxon | Anglosaxon |
| Arabic | Arabic |
| Aramaic | Aramaic |
| Belgic | Belgic |
| Coptic | Coptic |
| Danish | Danish |
| Dutch | Dutch |
| English | English |
| Ethiopic | Ethiopic |
| French | French |
| German | German |
| Gothic | Gothic |
| Greek | Koine Greek |
| Hebrew | Hebrew |
| Icelandic | Icelandic |
| Irish | Irish |
| Italian | Italian |
| Latin | Latin |
| Maltese | Maltese |
| Persian | Persian |
| Portuguese | Portuguese |
| Samaritan | Samaritan |
| Saxon | Saxon |
| Scottish | Scottish |
| Spanish | Spanish |
| Transarabic | Transliterated Arabic |
| Transaramaic | Transliterated Aramaic |
| Transchaldee | Transliterated Chaldee |
| Transethiopic | Transliterated Ethiopic |
| Transgreek | Transliterated Greek |
| Transhebrew | Transliterated Hebrew |
| Transpersian | Transliterated Persian |
| Transsanscrit | Transliterated Sanscrit |
| Transsyriac | Transliterated Syriac |
| Teutonic | Any/all of the Teutonic languages not otherwise listed here |
| Welsh | Welsh |
#NOSEARCH
Optional
Format:
#NOSEARCH
Indicates that no search index should be generated for this work. Usually used with
internal reference works (see above).
Example:
#NOSEARCH
#NOTOPIC
Optional
Format:
#NOTOPIC
Indicates that the current text has no topical relation. It effectively disables any
preceding #TOPIC directives as if there were no preceding #TOPIC directives.
Example:
#NOTOPIC
#OUTLINE
Optional
Format:
#OUTLINE: level, text
Defines a new outline node or level. The outermost level is 1, the next inner level is 2, and so on. The text is what is shown in an outline in the app. The level specified should be the same level, a lower level, or one level higher than the last #OUTLINE directive's level.
Example:
#OUTLINE:1,Preface
Preface text
#OUTLINE:1,Chapter 1
#OUTLINE:2,Introduction
Introduction to chapter 1.
#OUTLINE:2,Conclusion
Conclusions to chapter 1
#OUTLINE:3:Epilog
Epilog text
#OUTLINE:1,Chapter 2
Chapter 2 text
#OUTLINE:1,Appendix
Appendix text
The foregoing would result in an outline resembling this in the app:
Preface
Chapter 1
Introduction
Conclusion
Chapter 2Epilog
#PUBLISHER
Optional
Format:
#PUBLISHER: text
Defines the name of the publisher of the work.
Example:
#PUBLISHER:Samuel Bagster and Sons, London
#REM
Optional
Format:
#REM:text
This directive indicates a remark. It is not part of the actual text, but a note by the person processing the data.
#SHORT
Required
Format:
#SHORT: name
Indicates an abbreviated name for this reference work. This must be unique from all other reference works, however it may match the full title.
Example:
#SHORT:KJV
#STRONGS
Required
Format:
#STRONGS:sn
Indicates an article on a Strong's number.
Example:
#STRONGS:g205
#TITLE
Required
Format:
#TITLE:name
Indicates the full title for this reference work. This must be unique from all other reference works, however it may match the short name.
Example:
#TITLE:King James Version
#TOPIC
Optional
Format:
#TOPIC:name
Indicates that the following text is associated with the topic specified by "name".
Example:
#TOPIC:Salvation
#UTF8
Optional
Format:
#UTF8
Indicates that the file is encoded as Unicode UTF8 format. Used if the file does not
begin with a BOM (Byte Order Mark) indication.
Example:
#UTF8
#VERSEMAP
Optional
Format:
#VERSEMAP
Indicates that the following text, up to the next directive, is a list of verse mapping
specifications. This is used in cases where the Bible/manuscript uses a versification
that differs from the "universal" chapter/verse scheme (ie that used in the KJV and most
other modern Bibles). Each line provides one mapping and has the format:
local=universal
where "local" is the chapter/verse used in this work and "universal" is how that verse
corresponds to the "universal" (KJV) chapter/verse. Note that in some cases part of a
local verse may correspond to one universal verse while another part corresponds to a different
universal verse. In these cases, the mapping is always for the correspondence at the start
of the local verse.
Example:
#VERSEMAP
Gen 32:10=Gen 32:9
Gen 32:11=Gen 32:10
#WORD
Optional
Format:
#WORD:language:text
Used in word databases. Indicates that the following text is a definition of a word.
"language" is the language of the word and "text" is the word being defined.
Example:
#WORD:English:Acquire
#WORD_MAPPING
Optional
Format:
#WORD_MAPPING
This directive begins the word map section. Each line in the section has the format:
alternate=word
where "alternate" is an alternate spelling of a word and "word" is the word that the alternate
maps to. This indicates that each occurrence of the alternate word should be interpreted as if
it had a <word> tag that maps it to the specified word. This is used to handle alternate
spellings for archaic words. Note that the specified words (both original and mapped) should
be normalized to all lowercase with no whitespace, apostrophes, or punctuation. This cannot be
used to map from one word to multiple words, or from multiple words to a single word.
Example:
#WORD_MAPPING
advauntage=advantage
colour=color
In this example, if the word "advauntage" is encountered, it is to be treated as equivalent
to:
<word=advantage>advauntage</word>
#WORDDATABASE
Optional
Format:
#WORDDATABASE:language
Indicates that the file is a word database for the specified language.
Example:
#WORDDATABASE:Greek
This section describes the HTML and erasmus-specific tags that can be embedded in text in an Erasmus Project source file. Some tags affect the display of text while others provide guidance for the software. Note that tags only apply to the text until another tag ends them or the end of the paragraph containing the tag. For instance, a language tag will change the language from the language specified by the last language tag. No tags will persist into the next paragraph.
Jesus loves me, this I know
| Attribute | Example | Description |
|---|---|---|
| face | face="courier" | Use the specified font. |
| size | size="24" | Set the font size to the specified size. The size can also be relative by preceding with a plus or minus to make it larger or smaller than the previous font size. |
| color | color="blue" | Set the font foreground color. A valid HTML color must be specified or else an RGB specification of the form: RGB(r,g,b). |
| Style | Description |
|---|---|
| direction:x | Set text direction to s. x is rtl for right-to-left and ltr for left-to-right (the default). |
| margin-left:x | Set left margin of paragraph to x. See description of measurements below. |
| margin-bottom:x | Set right margin of paragraph to x. See description of measurements below. |
| text-indent:x | Indent the first line to x. See description of measurements below. Note that the value can be negative to have the first line start to the left of the paragraph's left margin. |
| Example | Explanation |
|---|---|
| 10px | 10 pixels |
| 0 | 0 pixels |
| 2em | number of pixels equal to 2 characters of the current font |
| -25 | 25 pixels to the left. |
| Value | Meaning |
|---|---|
| rtl | Right to left |
| ltr | Left to right |
The following entities are supported in EPRW files:
&#RE;
&#RS;
&#TAB;
Á
á
Â
â
´
Æ
æ
À
à
&
Å
å
Ã
ã
Ä
ä
¦
•
Ç
ç
¸
¢
ˆ
©
¤
†
‡
&dbquo;
°
÷
É
é
Ê
ê
È
è
&emul;
Ð
ð
Ë
€
ƒ
½
¼
¾
>
…
Í
í
Î
î
¡
Ì
ì
¿
Ï
ï
«
“
‹
‘
<
¯
—
µ
·
–
¬
Ñ
ñ
Ó
ó
Ô
ô
Œ
œ
Ò
ò
ª
º
Ø
ø
Õ
õ
Ö
ö
¶
‰
±
£
»
”
®
›
’
‚
Š
š
§
­
²
³
&supl;
ß
þ
Þ
˜
˜
×
™
Ú
ú
Û
û
Ù
ù
¨
Ü
ü
Ý
ý
¥
Ÿ
ÿ
Transliterated languages indicate where a word in another language has been converted (transliterated) into Latin characters. This is typically only used for languages that have character glyphs different from Latin, such as Greek, Hebrew, and Arabic. Minor differences, such as accented characters and the use of ETH and/or THORN in anglosaxon, do not require transliteration.
The purpose of language tags is not to alter the display of the text (however, see #BIBLOS), but to mark the text for the benefit of the software using the document. For instance, it can be used to do language-specific searches.