Voynich TEI
Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026

Slides

Edition Website

GitHub
Hadleigh Jae Bills
Penn State Erie, The Behrend College
What is the Voynich Manuscript
Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026
- 15th century parchment book
- Written in an unknown, undeciphered script
- Contains six sections:
- Herbal
- Astronomical
- Biological
- Cosmological
- Pharmaceutical
- Recipies
Voynich Manuscript




Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026
- The Herbal Section of the Manuscript
- 129 Pages!
- Contain information about tentative plant identifications in a Site Index
Main Focus
Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026

Transliteration File
Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026
- Found here: https://www.voynich.nu/data/ZL3b-n.txt
- Created by René Zandbergen
- Complete transliteration
- Uses the EVA alphabet
- IVTFF Format
- Last updated May 5, 2025
#=IVTFF Eva- 2.0 M 5
# ZL transliteration file, updated from EVMT project
# Version 3b of 13/05/2025
#
<f1r> <! $Q=A $P=A $F=a $B=1 $I=T $L=A $H=1 $C=1 $X=V>
# page 1
# text only
# Currier's Language A, hand 1
# There is a key-like sequence in the right margin apparently added after
# the main text was written. Unclear in Petersen copies, but seems to be
# the roman alphabet. It starts at the end of the second line and it
# is not well aligned with the rest of the lines: a,b,c,d,e,f,g,h,
# i, (j is missing) k, (l,m,n are not readable),o,p,q,r
# There is non-Voynich text at bottom of folio: the signature
# of Jacobus de Tepenecz
#
# At the end of the paragraphs there are further words (right justified)
# as if they were the name of the author in a quotation.
#
# Next to the end of the 1st line there is a thick non-Voynich symbol
# resembling an underlined 29 (commented as @254; )
# The 2nd and 3rd paragraphs start with thick non-Voynich symbols.
#
<f1r.1,@P0> <%>fachys.ykal.ar.ataiin.shol.shory.[cth:oto]res.y.kor.sholdy<!@254;>
<f1r.2,+P0> sory.ckhar.or,y.kair.chtaiin.shar.ase.cthar.cthar,dan
<f1r.3,+P0> syaiir.sheky.or.ykaiin.shod.cthoary.cthes.daraiin.sy
<f1r.4,+P0> soiin.oteey.oteo[s:r],roloty.cthiar,daiin.okaiin.or.okan
<f1r.5,+P0> sair,y.chear.cthaiin.cphar.cfhaiin
<f1r.6,=Pt> ydaraishy<$>
#
<f1r.7,*P0> <%><!@252;>odar.{c'y}.shol.cphoy.oydar.sh.s.cfhoaiin.shodary
<f1r.8,+P0> yshey.shody.okchoy.otchol.chocthy.os,chy.dain.chor.kos
<f1r.9,+P0> daiin.shos.cfhol.shody
<f1r.10,=Pt> dain.os.teody<$>
#
<f1r.11,*P0> <%><!@253;>ydain.cphesaiin.ols.cphey.ytain.shoshy.cphodal,es
<f1r.12,+P0> oksho.kshoy.otairin.oteol.okan.shodain.sckhey.daiin
<f1r.13,+P0> shoy.ckhey.kodaiin.cphy.cphodaiils.cthey.sho.oldain.d
<f1r.14,+P0> dain.oiin.chol.odaiin.chodain.chdy.ok[a:o]in.d?n.cthy.kod
<f1r.15,+P0> daiin.shckhey.{ck}eo.r.char.shey.kol.chol.chol.kor.chal
<f1r.16,+P0> sho.chol.shodan.kshy.kchy.d.or.chodaiin.sho.koeam
<f1r.17,+P0> ycho.tchey.chekain.sheo,pshol.dydyd.cthy.dai[{cto}:@194;]y
<f1r.18,+P0> yto.shol.she.kodshey.cphealy.dar,ain.dain.ckhyds
<f1r.19,+P0> dchar.shcthaiin.okaiir.chey.@192;chy.@130;tol.cthols.dlo{ct}o
<f1r.20,+P0> shok.chor.chey.dain.ckhey
<f1r.21,=Pt> otol.daiiin<$>Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026
- Found here:
https://voynich.nu/Fonts/EVA2.ttf
https://www.voynich.nu/hist/gabriel/eva2_reference.pdf - "Extensible Voynich Alphabet"
- Designed by Gabriel Landini
- Able to transliterate the Voynich file to Voynichese
EVA Alphabet

Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026
- Found here: https://www.voynich.nu/software/ivtt/IVTFF_format.pdf
- Created by René Zandbergen
- Representation of existing and publicly available digital Voynich MS transliterations
- Consistent, standardized
- All files begin with "#=IVTFF"
IVTFF Format
Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026

Methods
Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026
- Zandbergen may update transliteration file
- I should be able to update my TEI file when this occurs
- Does not automatically update, must do by hand
Purpose
Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026
File Preparation
Python
Invisible XML
XSLT
CETEIcean
Eleventy
- Figure out formatting from IVTFF
- Determine the changes needed to make
File Preparation
| IVTFF | TEI |
|---|---|
| <f1r> | <surface n="f1r"> |
| <! > | <note type="inline"> |
| # | <note> |
| <f1r.1,@P0> | <line n="1" rendition="#At #P0"> |
| @128; | € |
| <-> | <figure/> |
| <%> | <milestone unit="block" type="start"/> |
| <$> | <milestone unit="block" type="end"/> |
Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026
- Creates unique TEI schema
- Adds 9 new attributes to <surface>
- quirePage
- quire
- folio
- bifolio
- illus
- language
- hand
- currier
- xtra
ODD File
<TEI xmlns="http://www.tei-c.org/ns/1.0" xml:lang="en" n="testms">
<teiHeader>
<fileDesc>
<titleStmt>
<title>Voynich TEI</title>
<author>Hadleigh Jae Bills</author>
</titleStmt>
<publicationStmt>
<publisher>TEI Consortium</publisher>
<availability status="free">
<licence target="http://creativecommons.org/licenses/by-sa/3.0/"> Distributed under a
Creative Commons Attribution-ShareAlike 3.0 Unported License</licence>
<licence target="http://www.opensource.org/licenses/BSD-2-Clause">
<p>Copyright 2013 TEI Consortium.</p>
<p>All rights reserved.</p>
<p>Redistribution and use in source and binary forms, with or without modification, are
permitted provided that the following conditions are met:</p>
<list>
<item>Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.</item>
<item>Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.</item>
</list>
<p>This software is provided by the copyright holders and contributors "as is" and any
express or implied warranties, including, but not limited to, the implied warranties
of merchantability and fitness for a particular purpose are disclaimed. In no event
shall the copyright holder or contributors be liable for any direct, indirect,
incidental, special, exemplary, or consequential damages (including, but not limited
to, procurement of substitute goods or services; loss of use, data, or profits; or
business interruption) however caused and on any theory of liability, whether in
contract, strict liability, or tort (including negligence or otherwise) arising in any
way out of the use of this software, even if advised of the possibility of such
damage.</p>
</licence>
<p>TEI material can be licensed differently depending on the use you intend to make of it.
Hence it is made available under both the CC+BY and BSD-2 licences. The CC+BY licence is
generally appropriate for usages which treat TEI content as data or documentation. The
BSD-2 licence is generally appropriate for usage of TEI content in a software
environment. For further information or clarification, please contact the <ref
target="mailto:info@tei-c.org">TEI Consortium</ref>.</p>
</availability>
</publicationStmt>
<sourceDesc>
<p>Written from scratch.</p>
</sourceDesc>
</fileDesc>
<encodingDesc>
<appInfo>
<application ident="RomaJS" version="1.3.2" when="2026-05-15T20:23:03.449Z">
<desc>File edited with <ref target="https://github.com/TEIC/romajs">RomaJS</ref></desc>
</application>
</appInfo>
</encodingDesc>
</teiHeader>
<text>
<body>
<p>TEI for manuscript description</p>
<schemaSpec ident="voynich-tei" start="TEI teiCorpus" prefix="voynich-tei" targetLang="en"
docLang="en">
<moduleRef key="header"/>
<moduleRef key="linking"/>
<moduleRef key="core"/>
<moduleRef key="tei"/>
<moduleRef key="textstructure"/>
<moduleRef key="namesdates"/>
<moduleRef key="transcr"/>
<moduleRef key="figures"/>
<moduleRef key="msdescription"/>
<moduleRef key="gaiji" include="g"/>
<elementSpec ident="surface" mode="change">
<attList>
<attDef ident="xml:id" mode="change" usage="req"/>
<attDef ident="quirePage" ns="voynich-tei" mode="add" usage="req">
<gloss>Quire Page</gloss>
<desc>Indicates the page number within a quire.</desc>
<valList type="closed">
<valItem ident="A">
<gloss>Page 1</gloss>
</valItem>
<valItem ident="B">
<gloss>Page 2</gloss>
</valItem>
<valItem ident="C">
<gloss>Page 3</gloss>
</valItem>
<valItem ident="D">
<gloss>Page 4</gloss>
</valItem>
<valItem ident="E">
<gloss>Page 5</gloss>
</valItem>
<valItem ident="F">
<gloss>Page 6</gloss>
</valItem>
<valItem ident="G">
<gloss>Page 7</gloss>
</valItem>
<valItem ident="H">
<gloss>Page 8</gloss>
</valItem>
<valItem ident="I">
<gloss>Page 9</gloss>
</valItem>
<valItem ident="J">
<gloss>Page 10</gloss>
</valItem>
<valItem ident="K">
<gloss>Page 11</gloss>
</valItem>
<valItem ident="L">
<gloss>Page 12</gloss>
</valItem>
<valItem ident="M">
<gloss>Page 13</gloss>
</valItem>
<valItem ident="N">
<gloss>Page 14</gloss>
</valItem>
<valItem ident="O">
<gloss>Page 15</gloss>
</valItem>
<valItem ident="P">
<gloss>Page 16</gloss>
</valItem>
<valItem ident="Q">
<gloss>Page 17</gloss>
</valItem>
<valItem ident="R">
<gloss>Page 18</gloss>
</valItem>
<valItem ident="S">
<gloss>Page 19</gloss>
</valItem>
<valItem ident="T">
<gloss>Page 20</gloss>
</valItem>
<valItem ident="U">
<gloss>Page 21</gloss>
</valItem>
<valItem ident="V">
<gloss>Page 22</gloss>
</valItem>
<valItem ident="W">
<gloss>Page 23</gloss>
</valItem>
<valItem ident="X">
<gloss>Page 24</gloss>
</valItem>
</valList>
</attDef>
<attDef ident="quire" ns="voynich-tei" mode="add" usage="req">
<gloss>Quire</gloss>
<desc>The quire within the manuscript.</desc>
<valList type="closed">
<valItem ident="A">
<gloss>Quire 1</gloss>
</valItem>
<valItem ident="B">
<gloss>Quire 2</gloss>
</valItem>
<valItem ident="C">
<gloss>Quire 3</gloss>
</valItem>
<valItem ident="D">
<gloss>Quire 4</gloss>
</valItem>
<valItem ident="E">
<gloss>Quire 5</gloss>
</valItem>
<valItem ident="F">
<gloss>Quire 6</gloss>
</valItem>
<valItem ident="G">
<gloss>Quire 7</gloss>
</valItem>
<valItem ident="H">
<gloss>Quire 8</gloss>
</valItem>
<valItem ident="I">
<gloss>Quire 9</gloss>
</valItem>
<valItem ident="J">
<gloss>Quire 10</gloss>
</valItem>
<valItem ident="K">
<gloss>Quire 11</gloss>
</valItem>
<valItem ident="L">
<gloss>Quire 12</gloss>
</valItem>
<valItem ident="M">
<gloss>Quire 13</gloss>
</valItem>
<valItem ident="N">
<gloss>Quire 14</gloss>
</valItem>
<valItem ident="O">
<gloss>Quire 15</gloss>
</valItem>
<valItem ident="Q">
<gloss>Quire 17</gloss>
</valItem>
<valItem ident="S">
<gloss>Quire 19</gloss>
</valItem>
<valItem ident="T">
<gloss>Quire 20</gloss>
</valItem>
</valList>
</attDef>
<attDef ident="folio" ns="voynich-tei" mode="add" usage="req">
<gloss>Folio</gloss>
<desc>The folio number within the quire.</desc>
<valList type="closed">
<valItem ident="a"></valItem>
<valItem ident="b"></valItem>
<valItem ident="c"></valItem>
<valItem ident="d"></valItem>
<valItem ident="e"></valItem>
<valItem ident="f"></valItem>
<valItem ident="u"></valItem>
<valItem ident="v"></valItem>
<valItem ident="w"></valItem>
<valItem ident="x"></valItem>
<valItem ident="y"></valItem>
<valItem ident="z"></valItem>
</valList>
</attDef>
<attDef ident="bifolio" ns="voynich-tei" mode="add" usage="req">
<gloss>Bifolio</gloss>
<desc>Bifolio number within quire. Counted outside to inside.</desc>
<valList type="closed">
<valItem ident="1">
<gloss>Bifolio 1</gloss>
</valItem>
<valItem ident="2">
<gloss>Bifolio 2</gloss>
</valItem>
<valItem ident="3">
<gloss>Bifolio 3</gloss>
</valItem>
<valItem ident="4">
<gloss>Bifolio 4</gloss>
</valItem>
<valItem ident="5">
<gloss>Bifolio 5</gloss>
</valItem>
<valItem ident="6">
<gloss>Bifolio 6</gloss>
</valItem>
</valList>
</attDef>
<attDef ident="illus" ns="voynich-tei" mode="add" usage="req">
<gloss>Illustration</gloss>
<desc>The illustration type within the manuscript.</desc>
<valList type="closed">
<valItem ident="A">
<gloss>Astronomical (Including Zodiac)</gloss>
</valItem>
<valItem ident="B">
<gloss>Biological</gloss>
</valItem>
<valItem ident="C">
<gloss>Cosmological</gloss>
</valItem>
<valItem ident="H">
<gloss>Herbal</gloss>
</valItem>
<valItem ident="P">
<gloss>Pharmaceutical</gloss>
</valItem>
<valItem ident="S">
<gloss>Marginal Stars Only</gloss>
</valItem>
<valItem ident="T">
<gloss>Text-Only Page</gloss>
</valItem>
<valItem ident="Z">
<gloss>Zodiac</gloss>
</valItem>
</valList>
</attDef>
<attDef ident="language" ns="voynich-tei" mode="add">
<gloss>Language</gloss>
<desc>Currier language of page and/or text section. See <ref target="https://voynich.nu/extra/img/curr_main.pdf">Papers on the Voynich Manuscript</ref> by Captain Prescott H. Currier.</desc>
<valList type="closed">
<valItem ident="A">
<gloss>Language A</gloss>
</valItem>
<valItem ident="B">
<gloss>Language B</gloss>
</valItem>
</valList>
</attDef>
<attDef ident="hand" ns="voynich-tei" mode="add" usage="req">
<gloss>Hand</gloss>
<desc>Writing hand used on page. See <ref target="https://muse.jhu.edu/pub/56/article/754633/pdf">How Many Glyphs and How Many Scribes? Digital Paleography and the Voynich Manuscript</ref> by Lisa Fagin Davis.</desc>
<valList type="closed">
<valItem ident="1">
<gloss>Scribe 1</gloss>
<desc versionDate="2026-05-29" xml:lang="en">The [h] character in Scribe 1 is distinguished by a sharp angle at the top of the first vertical as the quill changes direction, a bowed crossbar, a round loop, and a very slight foot at the base of the second vertical. The word-end [m] and [n] glyphs conclude with a backward flourish that stretches as far as the penultimate minim.</desc>
</valItem>
<valItem ident="2">
<gloss>Scribe 2</gloss>
<desc versionDate="2026-05-29" xml:lang="en">More cramped than Scribe 1, with a slightly slanted character. This scribe uses a horizontal, straight crossbar, an oval loop, and an upwardly angled final tick. The final backstroke of [m] and [n] is short, barely passing the final minim.</desc>
</valItem>
<valItem ident="3">
<gloss>Scribe 3</gloss>
<desc versionDate="2026-05-29" xml:lang="en">The [h] written by Scribe 3 is similar to that of Scribe 1, although slightly more compact. The final stroke of [m] and [n] curves back on itself, nearly touching the top of the final minim.</desc>
</valItem>
<valItem ident="4">
<gloss>Scribe 4</gloss>
<desc versionDate="2026-05-29" xml:lang="en">The [h] written by Scribe 4 has a perpendicular crossbar, an oversize loop, and a prominent final foot. The final stroke of [m] and [n] is tall, with only a slight curvature.</desc>
</valItem>
<valItem ident="5">
<gloss>Scribe 5</gloss>
<desc versionDate="2026-05-29" xml:lang="en">The [h] is tall and narrow, with a bowed cross-stroke that begins at the top of the vertical, and a minuscule tick at the foot of the second vertical. The [m] has a long, low finial that finishes above the penultimate minim.</desc>
</valItem>
<valItem ident="@">
<gloss>Scribe 2 and 3</gloss>
<desc versionDate="2026-05-29" xml:lang="en">The first twelve lines were written by Scribe 2, the rest Scribe 3.</desc>
</valItem>
</valList>
</attDef>
<attDef ident="currier" ns="voynich-tei" mode="add">
<gloss>Currier's Hand</gloss>
<desc>Currier’s hand used on this page. See <ref target="https://voynich.nu/extra/img/curr_main.pdf">Papers on the Voynich Manuscript</ref> and <ref target="https://voynich.nu/extra/img/curr_tabA.pdf">Table A</ref> by Captain Prescott H. Currier.</desc>
<valList type="closed">
<valItem ident="1">
<gloss>Hand 1</gloss>
</valItem>
<valItem ident="2">
<gloss>Hand 2</gloss>
</valItem>
<valItem ident="3">
<gloss>Hand 3</gloss>
</valItem>
<valItem ident="4">
<gloss>Hand 4</gloss>
</valItem>
<valItem ident="5">
<gloss>Hand 5</gloss>
</valItem>
<valItem ident="X">
<gloss>Hand X</gloss>
</valItem>
<valItem ident="Y">
<gloss>Hand Y</gloss>
<desc>Not in original IVTFF documentation, but is in Currier's table A.</desc>
</valItem>
<valItem ident="Z">
<gloss>Hand Z</gloss>
</valItem>
</valList>
</attDef>
<attDef ident="xtra" ns="voynich-tei" mode="add">
<gloss>Extra</gloss>
<desc>Has extraneous writing.</desc>
<valList type="closed">
<valItem ident="C">
<gloss>Color Annotation</gloss>
</valItem>
<valItem ident="M">
<gloss>Month Name</gloss>
</valItem>
<valItem ident="O">
<gloss>Other</gloss>
</valItem>
<valItem ident="S">
<gloss>Sequence of Characters or Numbers</gloss>
</valItem>
<valItem ident="V">
<gloss>Various (Combination)</gloss>
<desc versionDate="2026-05-29" xml:lang="en">Deprecated according to IVTFF documentation.</desc>
</valItem>
</valList>
</attDef>
</attList>
</elementSpec>
</schemaSpec>
</body>
</text>
</TEI>
Page number within a quire [A-X]
Quire within the manuscript [A-T]
Folio number within the quire [a-f , u-z]
Bifolio number within the quire [1-6]
Illustration type [A, B, C, H, P, S, T, Z]
Currier language of page and/or text section [A, B]
Writing hand used on this page [1, 2, 3, 4, 5, @]
Currier’s hand used on this page [1, 2, 3, 4, 5, X, Y, Z]
Has extraneous writing [C, M, O, S, V]
Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026
- IVTFF uses high ascii extentions
- Use a python script to change the ascii code to the unicode version
Python
def replace_symbols(input_file, output_file):
replacements = {
'@128;': '€',
'@130;': '‚',
'@131;': 'ƒ',
'@132;': '„',
# Continues on.
with open(input_file, "r", encoding="utf-8") as f:
content = f.read()
for old, new in replacements.items():
content = content.replace(old, new)
with open(output_file, "w", encoding="utf-8") as f:
f.write(content)
if __name__ == "__main__":
input_path = "../transliterationFiles/ZL3b-n.txt"
output_path = "../transliterationFiles/ZL3b-n_updated.txt"
replace_symbols(input_path, output_path)
print("Replacement complete.")| ASCII | UNICODE |
|---|---|
| @128; | € |
| @130; | ‚ |
| @131; | ƒ |
| @132; | „ |
Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026
- Takes the IVTFF formatting and transforms it into XML
Invisible XML
sourceDoc: droppedPrelude?, surface+.
-droppedPrelude: firstNote, note, note, dumbHash.
firstNote: -"#", -noteBody, -newline.
surface: (surfaceN; surfaceNros), extraInfo, quireInfo, newline, (pb; note; dumbHash; line)*.
@surfaceNros: lab, "f", "R", "o", "s", rab.
@surfaceN: lab, "f", [N]+, ["r";"v"], [N]*, rab.
-extraInfo: (space; AnyNotSpace)*.
quireInfo: -"<", -"!", space+, quire, space+, quirePage, (space+, folio)?, space+, bifolio, space+, illus, (space+, language)?, space+, hand, (space+, currier)?, (space+, xtra)?, -">".
quire: -"$Q=", ["A"-"Z"].
quirePage: -"$P=", ["A"-"Z"].
folio: -"$F=", ["a"-"z"].
bifolio: -"$B=", ["0"-"6"].
illus: -"$I=", ["A"-"Z"].
language: -"$L=", ("A";"B").
hand: -"$H=", ["0"-"9"; "@"].
currier: -"$C=", ["0"-"5"; "X"; "Y"; "Z"].
xtra: -"$X=", ["C";"M";"O";"S";"V"].
pb: -"#", space, -"page", space, pbnum, newline.
@pbnum: [N]+, (",", space?, [N]+)?.
note: -"#", space, noteBody, newline.
-noteBody: noteChar*.
-noteChar: ~[#d;#a].
line: (lineN; lineNros), rendition, lineBody, newline.
@lineNros: -lab, -"f", -"R", -"o", -"s", -".", [N]+, -",".
@lineN: -lab, -"f", -[N]+, -["r";"v"], -[N]*, -".", [N]+, -",".
@rendition: (at;ad;as;aq;an;am;al;ax), +"#", ["A"-"Z"], ["0";"1";"a"-"z"], -rab.
-lineBody: (space; comment; figure; milestone-start; milestone-end; ligature; choice; unclear; plainChar; dumbHand)+.
comment: -"<", -"!", commentChar*, -">".
-commentChar: ~[#d;#a;">"].
figure: -"<", (-"-"; -"~"), -">".
ligature: -"{", plainChar+, -"}".
milestone-start: -"<", -"%", -">".
milestone-end:-"<", -"$", -">".
unclear: "?".
choice: -"[", unclearAlt?, ( -":", unclearAlt?)+, -"]".
unclearAlt: (ligature; choiceChar)+.
-choiceChar: ~[#d;#a;#20;"<";"[";"]";":";"{";"}"].
-dumbHand: -"<", -"@", -"H", -"=", -[N], -">".
-at: -"@",+"#At ".
-ad: -"+",+"#Ad ".
-as: -"*",+"#As ".
-aq: -"=",+"#Aq ".
-an: -"&",+"#An ".
-am: -"~",+"#Am ".
-al: -"/",+"#Al ".
-ax: -"!",+"#Ax ".
-lab: -["<"].
-rab: -[">"].
-space: -[#20].
-keepSpace: [#20].
-newline: -#d?, -#a.
-AnyNotSpace: ~[#d;#a;#20].
-NotSpace: ~[#d;#a;#20;"<"].
-plainChar: ~[#d;#a;#20;"<";"{";"}";"[";"]";":";"?"].
-dumbHash: -"#", -newline.| IVTFF | XML |
|---|---|
| <-> | <figure/> |
| # | <note> |
| <! > | <comment> |
| <f1r.1,@P0> | <line lineN="1" rendition="#At #P0"> |
Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026
- Makes a proper TEI file
- Changes the element and attribute names to follow valid TEI encoding
XSLT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:math="http://www.w3.org/2005/xpath-functions/math"
xmlns:vn="voynich-tei"
xmlns="http://www.tei-c.org/ns/1.0"
exclude-result-prefixes="xs math"
version="3.0">
<xsl:output method="xml" indent="yes"/>
<!-- hjb: I ended up just making one teiHeader doc -->
<xsl:variable name="teiHeader" as="element(teiHeader)" select="doc('../xml/header/teiHeader.xml')//teiHeader"/>
<xsl:variable name="text" as="element(text)" select="doc('../xml/text/text.xml')//text"/>
<xsl:variable name="surfaceMetadata" select="doc('../xml/surfaceMetadata/surfaceMetadata.xml')"/>
<xsl:key
name="surfaceInfoById"
match="surfaceInfo"
use="@xml:id"/>
<!-- NAMESPACE!!! NON-TO-TEI-->
<xsl:template match="*">
<!-- Create a new element with the target namespace 'X' -->
<xsl:element name="{local-name()}">
<!-- Apply templates to copy attributes and child nodes -->
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="/">
<xsl:processing-instruction name="xml-model">
<xsl:text>href="../odd/out/voynich-tei.rng" type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"</xsl:text>
</xsl:processing-instruction>
<xsl:processing-instruction name="xml-model">
<xsl:text>href="../odd/out/voynich-tei.rng" type="application/xml" schematypens="http://purl.oclc.org/dsdl/schematron"</xsl:text>
</xsl:processing-instruction>
<xsl:processing-instruction name="xml-stylesheet">
<xsl:text>type="text/css" href="../evaFontCSS.css"</xsl:text>
</xsl:processing-instruction>
<TEI>
<xsl:apply-templates select="$teiHeader"/>
<xsl:apply-templates/>
<xsl:apply-templates select="$text"/>
</TEI>
</xsl:template>
<xsl:template match="sourceDoc">
<sourceDoc>
<xsl:apply-templates select="* except surface"/>
<xsl:for-each-group select="surface" group-by="quireInfo/quire">
<surfaceGrp type="quire" n="{quireInfo/quire}">
<xsl:for-each-group select="current-group()" group-by="quireInfo/folio">
<surfaceGrp type="folio" n="{quireInfo/folio}">
<!-- <xsl:message select="count(current-group())"/>-->
<xsl:apply-templates select="current-group()"/>
</surfaceGrp>
</xsl:for-each-group>
</surfaceGrp>
</xsl:for-each-group>
</sourceDoc>
</xsl:template>
<!-- 2026-05-05 We decided to add some attributes to the TEI via ODD for the surface element,
and then output this structure:
<surface xml:id="..."
quirePage="{quirePage}"
langCode="{language}"
bifolio="{bifolio}"
illus="{illus}"
hand="{hand}"
>
<pb n="213" />
TO MAKE THE PB: WE SHOULD REALLY GO BACK AND DO THIS IN IXML.
</surface>
-->
<xsl:template match="surface">
<xsl:variable name="surfaceID"
select="(@surfaceN,@surfaceNros)[1]"/>
<surface xml:id="{$surfaceID}">
<!-- Copy the Voynich attributes -->
<xsl:apply-templates select="quireInfo/*" mode="quireInfo"/>
<!-- Insert graphic and zone(s) -->
<xsl:for-each select="$surfaceMetadata/surfaceData/surfaceInfo[@id=$surfaceID]/*">
<xsl:element name="{local-name()}" namespace="http://www.tei-c.org/ns/1.0">
<xsl:copy-of select="@*"/>
</xsl:element>
</xsl:for-each>
<!-- Process the original children -->
<xsl:apply-templates/>
</surface>
</xsl:template>
<xsl:template match="*" mode="quireInfo">
<xsl:attribute name="vn:{name()}"><xsl:value-of select="."/></xsl:attribute>
</xsl:template>
<xsl:template match="firstNote">
<note>
<xsl:apply-templates/>
</note>
</xsl:template>
<xsl:template match="milestone-start">
<milestone unit="block" type="start"/>
</xsl:template>
<xsl:template match="milestone-end">
<milestone unit="block" type="end"/>
</xsl:template>
<xsl:template match="comment">
<note type="inline">
<xsl:apply-templates/>
</note>
</xsl:template>
<xsl:template match="unclearAlt">
<unclear>
<xsl:apply-templates/>
</unclear>
</xsl:template>
<xsl:template match="ligature">
<g><xsl:apply-templates/></g>
</xsl:template>
<xsl:template match="figure">
<figure type="inline">
<xsl:apply-templates/>
</figure>
</xsl:template>
<xsl:template match="quireInfo"/>
<!-- WHAT IS HAPPENING WITH XML:IDs ON SURFACE ELEMENTS? -->
<xsl:template match="@surfaceN">
<xsl:attribute name="xml:id">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="@surfaceNros">
<xsl:attribute name="xml:id">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="@lineN">
<xsl:attribute name="n">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="@lineNros">
<xsl:attribute name="n">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="@pbnum">
<xsl:attribute name="n">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="@rendition">
<xsl:attribute name="rendition">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<!-- This can definitely be done a different way but I don't know how -->
<xsl:template match="@xml:id">
<xsl:attribute name="xml:id">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="@hands">
<xsl:attribute name="hands">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="@notAfter">
<xsl:attribute name="notAfter">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="@notBefore">
<xsl:attribute name="notBefore">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="@when">
<xsl:attribute name="when">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="@ident">
<xsl:attribute name="ident">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="@type">
<xsl:attribute name="type">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="@target">
<xsl:attribute name="target">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="@resp">
<xsl:attribute name="resp">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="@sortKey">
<xsl:attribute name="sortKey">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="@url">
<xsl:attribute name="url">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="@ref">
<xsl:attribute name="ref">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<!-- -->
<xsl:template match="choice">
<xsl:choose>
<xsl:when test="count(unclearAlt)=1">
<xsl:apply-templates/>
</xsl:when>
<xsl:otherwise>
<choice>
<xsl:apply-templates/>
</choice>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>| XML | TEI |
|---|---|
| <comment> | <note type="outline"> |
| @lineN="1" | @n="1" |
| <milestone-start/> | <milestone unit="block" type="start"/> |
| <unclearAlt> | <unclear> |
Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026
- Allows TEI documents to be displayed in a web browser without first transforming them to HTML
- Javascript library
- Makes this work accessible
CETEIcean 🐳
<!DOCTYPE html>
<html>
<head>
<title>Voynich</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="css/tei.css">
<script src="js/CETEI.js"></script>
<script>
const c = new CETEI();
document.addEventListener("DOMContentLoaded", () => {
c.getHTML5("xml/outputTEI.xml", function (data) {
const output = document.getElementById("tei-output");
output.appendChild(data);
setupInlineNotes(output);
setupSurfaces();
});
});
function setupInlineNotes(root) {
root.querySelectorAll("tei-note[type='inline']").forEach(note => {
if (note.dataset.inlineNoteReady === "true") return;
const content = document.createElement("span");
content.className = "inline-note-content";
while (note.firstChild) {
content.appendChild(note.firstChild);
}
const icon = document.createElement("span");
icon.className = "inline-note-icon";
icon.textContent = "ⓘ";
icon.setAttribute("tabindex", "0");
icon.setAttribute("role", "button");
icon.setAttribute("aria-label", "Show inline note");
note.appendChild(icon);
note.appendChild(content);
note.dataset.inlineNoteReady = "true";
});
}
function setupSurfaces() {
document.querySelectorAll("tei-surface").forEach(surface => {
if (surface.dataset.surfaceReady === "true") return;
buildGraphicZoneWrapper(surface);
wrapSurfaceText(surface);
surface.dataset.surfaceReady = "true";
});
}
function buildGraphicZoneWrapper(surface) {
const graphic = surface.querySelector("tei-graphic:not([type='full'])");
const zones = surface.querySelectorAll("tei-zone");
if (!graphic) return;
const url = graphic.getAttribute("url");
if (!url) return;
const wrapper = document.createElement("div");
wrapper.className = "graphic-zone-wrapper";
const img = document.createElement("img");
img.src = url;
img.alt = graphic.getAttribute("alt") || getElementXmlId(surface) || "";
const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
svg.classList.add("zone-overlay");
const popup = document.createElement("div");
popup.className = "zone-popup";
popup.style.display = "none";
img.onload = () => {
svg.setAttribute(
"viewBox",
`0 0 ${img.naturalWidth} ${img.naturalHeight}`
);
};
zones.forEach(zone => {
const points = zone.getAttribute("points");
const corresp = zone.getAttribute("corresp");
if (!points) return;
const polygon = document.createElementNS(
"http://www.w3.org/2000/svg",
"polygon"
);
polygon.setAttribute("points", points);
polygon.classList.add("tei-zone-polygon");
polygon.addEventListener("click", event => {
event.stopPropagation();
popup.dataset.originalCorresp = corresp || "";
const itemHTML = getItemHTMLFromCorresp(corresp);
if (!itemHTML) {
popup.innerHTML = `
<button type="button" class="popup-close-button">×</button>
<strong>No item found for ${corresp || "this zone"}</strong>
`;
} else {
popup.innerHTML = `
<button type="button" class="popup-close-button">×</button>
${itemHTML}
`;
setupInlineNotes(popup);
activatePopupRefs(popup);
}
const rect = wrapper.getBoundingClientRect();
popup.style.left = `${event.clientX - rect.left + 20}px`;
popup.style.top = `${event.clientY - rect.top + 20}px`;
popup.style.display = "block";
activatePopupCloseButton(popup);
});
svg.appendChild(polygon);
});
popup.addEventListener("click", event => {
event.stopPropagation();
});
document.addEventListener("click", () => {
popup.style.display = "none";
});
wrapper.appendChild(img);
wrapper.appendChild(svg);
wrapper.appendChild(popup);
const oldGraphicParent = graphic.parentElement;
graphic.remove();
const insertionPoint = findSurfaceTextInsertionPoint(surface);
surface.insertBefore(wrapper, insertionPoint);
if (
oldGraphicParent &&
oldGraphicParent !== surface &&
oldGraphicParent.children.length === 0 &&
oldGraphicParent.textContent.trim() === ""
) {
oldGraphicParent.remove();
}
}
function findSurfaceTextInsertionPoint(surface) {
return [...surface.children].find(child => {
return (
child.matches &&
(
child.matches("tei-pb") ||
child.matches("tei-note") ||
child.matches("tei-line")
)
);
}) || null;
}
function wrapSurfaceText(surface) {
if (surface.querySelector(":scope > .surface-text")) return;
const textWrapper = document.createElement("div");
textWrapper.className = "surface-text";
copySurfaceMetadata(surface, textWrapper);
const childrenToMove = [...surface.children].filter(child => {
return (
child.matches &&
(
child.matches("tei-pb") ||
child.matches("tei-note") ||
child.matches("tei-line")
)
);
});
childrenToMove.forEach(child => {
textWrapper.appendChild(child);
});
if (childrenToMove.length) {
surface.appendChild(textWrapper);
}
}
function copySurfaceMetadata(surface, textWrapper) {
const quire = getNamespacedOrFallbackAttribute(surface, "vn", "quire");
if (quire) {
textWrapper.setAttribute("data-quire", quire);
}
const quirePage = getNamespacedOrFallbackAttribute(surface, "vn", "quirePage");
if (quirePage) {
textWrapper.setAttribute("data-quire-page", quirePage);
}
const folio = getNamespacedOrFallbackAttribute(surface, "vn", "folio");
if (folio) {
textWrapper.setAttribute("data-folio", folio);
}
const bifolio = getNamespacedOrFallbackAttribute(surface, "vn", "bifolio");
if (bifolio) {
textWrapper.setAttribute("data-bifolio", bifolio);
}
const illus = getNamespacedOrFallbackAttribute(surface, "vn", "illus");
if (illus) {
textWrapper.setAttribute("data-illus", illus);
}
const language = getNamespacedOrFallbackAttribute(surface, "vn", "language");
if (language) {
textWrapper.setAttribute("data-language", language);
}
const hand = getNamespacedOrFallbackAttribute(surface, "vn", "hand");
if (hand) {
textWrapper.setAttribute("data-hand", hand);
}
const currier = getNamespacedOrFallbackAttribute(surface, "vn", "currier");
if (currier) {
textWrapper.setAttribute("data-currier", currier);
}
const xtra = getNamespacedOrFallbackAttribute(surface, "vn", "xtra");
if (xtra) {
textWrapper.setAttribute("data-xtra", xtra);
}
}
function getNamespacedOrFallbackAttribute(el, namespacePrefix, localName) {
const kebabLocalName = localName.replace(/[A-Z]/g, letter => {
return `-${letter.toLowerCase()}`;
});
return (
el.getAttribute(`${namespacePrefix}:${localName}`) ||
el.getAttribute(`data-${namespacePrefix}-${localName}`) ||
el.getAttribute(`data-${namespacePrefix}-${kebabLocalName}`) ||
el.getAttribute(localName) ||
el.getAttribute(kebabLocalName)
);
}
function getItemHTMLFromCorresp(corresp) {
if (!corresp) return "";
const id = corresp.replace("#", "");
const items = document.querySelectorAll("tei-item");
for (const item of items) {
const itemId = getElementXmlId(item);
if (itemId === id) {
const clone = item.cloneNode(true);
clone.querySelectorAll("tei-graphic[type='full']").forEach(graphic => {
graphic.remove();
});
return clone.innerHTML;
}
}
return "";
}
function activatePopupRefs(popup) {
popup.querySelectorAll("[ref]").forEach(el => {
const ref = el.getAttribute("ref");
if (!ref || !ref.startsWith("#")) return;
el.classList.add("clickable-ref");
el.addEventListener("click", event => {
event.preventDefault();
event.stopPropagation();
const id = ref.replace("#", "");
const target = findElementByXmlId(id);
if (!target) {
popup.innerHTML = `
<button type="button" class="popup-close-button">×</button>
<button type="button" class="popup-back-button">← Back</button>
<strong>No information found</strong>
<p>Could not find an element with <code>xml:id="${id}"</code>.</p>
`;
activatePopupCloseButton(popup);
activatePopupBackButton(popup);
return;
}
const clone = target.cloneNode(true);
clone.querySelectorAll("tei-graphic[type='full']").forEach(graphic => {
graphic.remove();
});
popup.innerHTML = `
<button type="button" class="popup-close-button">×</button>
<button type="button" class="popup-back-button">← Back</button>
${clone.innerHTML}
`;
setupInlineNotes(popup);
activatePopupCloseButton(popup);
activatePopupBackButton(popup);
activatePopupRefs(popup);
});
});
}
function activatePopupBackButton(popup) {
const backButton = popup.querySelector(".popup-back-button");
if (!backButton) return;
backButton.addEventListener("click", event => {
event.stopPropagation();
const originalHTML = getItemHTMLFromCorresp(
popup.dataset.originalCorresp
);
popup.innerHTML = `
<button type="button" class="popup-close-button">×</button>
${originalHTML}
`;
setupInlineNotes(popup);
activatePopupCloseButton(popup);
activatePopupRefs(popup);
});
}
function activatePopupCloseButton(popup) {
const closeButton = popup.querySelector(".popup-close-button");
if (!closeButton) return;
closeButton.addEventListener("click", event => {
event.stopPropagation();
popup.style.display = "none";
});
}
function findElementByXmlId(id) {
const allElements = document.querySelectorAll("*");
for (const el of allElements) {
const elId = getElementXmlId(el);
if (elId === id) {
return el;
}
}
return null;
}
function getElementXmlId(el) {
return (
el.getAttribute("xml:id") ||
el.getAttribute("id") ||
el.getAttribute("data-xml-id")
);
}
</script>
</head>
<body>
{% include "layouts/navbar.html" %}
{{ content | safe }}
<main id="tei-output"></main>
{% include "layouts/footer.html" %}
</body>
</html>Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026
Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026
Instructions
Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026
- Go to the QR Code or this link: https://github.com/newtfire/voynichTEI
- Clone the repo in terminal
- This may take a second!
Gather Files
Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026


$ git clone https://github.com/newtfire/voynichTEI.git
MINGW64
user@computer
~/folder

- Created manually
- Basic information about the Voynich Manuscript and file
- Written in this xml file: https://github.com/newtfire/voynichTEI/blob/main/xml/header/teiHeader.xml
teiHeader
Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026
<teiHeader>
<fileDesc>
<titleStmt>
<title>Voynich Manuscript</title>
</titleStmt>
<publicationStmt>
<publisher>Unknown</publisher>
<pubPlace>[Central Europe?];[ca. 1401-1599?]</pubPlace>
</publicationStmt>
<sourceDesc>
<msDesc>
<msIdentifier>
<repository>Beinecke Rare Book and Manuscript Library</repository>
</msIdentifier>
<physDesc>
<bindingDesc>
<p><material>Goat</material> Skin</p>
</bindingDesc>
</physDesc>
<history>
<origin notAfter="1438" notBefore="1404">
<!-- https://www.voynich.nu/extra/carbon.html -->
<p>The origins of this manuscript are unknown, but it has been carbon dated to have been made sometime between <date notAfter="1438" notBefore="1404">1404 and 1438</date>.</p>
</origin>
<provenance>
<!-- https://www.voynich.nu/curricula.html -->
<p>Any history between <date notAfter="1576" notBefore="1404">1404 and 1576</date> is missing and unknown.</p>
</provenance>
<provenance>
<p>Owned by Rudolph II of Habsburg during his reign in Prague from <date notAfter="1611" notBefore="1576">1576 to 1611</date>. In <date when="1599">1599</date>, Karl Widemann sold Rudolph II several books, one of which was likely the Voynich Manuscript, but this is not confirmed.</p>
</provenance>
<provenance>
<p>Jacobus Horcicky de Tepenecz owned the manuscript in <date when="1622">1622</date>. This is noted in an inscription on folio 1r which reads <q>Jacobi de Tepenecz</q> under uv light. The manuscript was likely owned by someone else and given to him as a part of his inheritance.</p>
</provenance>
<provenance>
<p>Owned by Georgius Barschius potentially sometime between <date notAfter="1637" notBefore="1627">1627 and 1637</date>.</p>
</provenance>
<provenance>
<p>Johannes Marcus Marci of Kronland was gifted Barschius' alchemical library in <date when="1677">1677</date>, which included the Voynich Manuscript.</p>
</provenance>
<provenance>
<p>Wilfred M. Voynich acquired the manuscript in <date when="1912">1912</date> at the Villa Mondragone in Italy</p>
</provenance>
<provenance>
<!-- https://beinecke.library.yale.edu/collections/highlights/voynich-manuscript -->
<p>H. P. Kraus purchases the manuscript from Ethel Voynich, Wilfrid Voynich's widow.</p>
</provenance>
<provenance>
<p>Given to the Beinecke Library by H. P. Kraus</p>
</provenance>
</history>
<msContents>
<summary>The latest release of the Zandbergen-Landini transliteration of 1999 in the IVTFF 2.0 format. It is a complete transliteration, including all 5389 loci that have been identified in the MS. It uses the Eva alphabet, including the high-ascii extensions. The file has been corrected in numerous places. Some parts of the text inside folds of the pages still need to be added. </summary>
</msContents>
</msDesc>
</sourceDesc>
</fileDesc>
<encodingDesc>
<tagsDecl>
<rendition xml:id="P">Linear text in paragraphs</rendition>
<rendition xml:id="P0">Normal left-justified text</rendition>
<rendition xml:id="P1">Normal paragraph text that is significantly away from the left, typically due to a drawing, or some other text to its left</rendition>
<rendition xml:id="Pb">A free-floating set of lines in a non-standard location</rendition>
<rendition xml:id="Pc">A roughly centred line (compared to the previous line)</rendition>
<rendition xml:id="Pr">A (roughly) right-justified line</rendition>
<rendition xml:id="Pt">A right-justified ‘title’ which is on the same line as the previous item</rendition>
<rendition xml:id="L">Short piece of text, a word, or a character that is anywhere on the page. Mostly these are the so-called labels</rendition>
<rendition xml:id="L0">It is not clearly near any drawing element</rendition>
<rendition xml:id="La">A label of an astronomical or cosmological drawing element, which is not a star or a zodiac element</rendition>
<rendition xml:id="Lc">A label of a container in the pharmaceutical section</rendition>
<rendition xml:id="Lf">A label of a fragment of a herb in the pharmaceutical section</rendition>
<rendition xml:id="Ln">A label of a nymph in the biological section</rendition>
<rendition xml:id="Lp">A label of a large herb or plant drawing (in the herbal section)</rendition>
<rendition xml:id="Ls">A label of a star</rendition>
<rendition xml:id="Lt">A label of a tube or a tub in the biological section (essentially everything that is not a nymph)</rendition>
<rendition xml:id="Lx">Extraneous writing (e.g. in the margin)</rendition>
<rendition xml:id="Lz">A label of a zodiac element</rendition>
<rendition xml:id="C">Text along the circumference of a circle</rendition>
<rendition xml:id="Ca">The text runs anti-clockwise (only one case in the MS)</rendition>
<rendition xml:id="Cc">The text runs clockwise</rendition>
<rendition xml:id="R">Text along the radius of a circle</rendition>
<rendition xml:id="Ri">The text runs outside to inside (inwards)</rendition>
<rendition xml:id="Ro">The text runs inside to outside (outwards)</rendition>
<rendition xml:id="At">Position of locus is unrelated to previous item. The position of this locus is unrelated to the previous item, or not easily described by one of the following. This locator is always used for the first item on each page</rendition>
<rendition xml:id="Ad">Generally below the previous item. This is the most common case</rendition>
<rendition xml:id="As">At the start of the line below the previous item, but at the left margin, while the previous item was not</rendition>
<rendition xml:id="Aq">The locus is on the same line as the previous item but separated by some white space</rendition>
<rendition xml:id="An">Similar to AQ but along a circular line</rendition>
<rendition xml:id="Am">Similar to AQ but the vertical alignment is not very good</rendition>
<rendition xml:id="Al">This locus is to the right of, and above the previous locus</rendition>
<rendition xml:id="Ax">This locus refers to text that in reality does not exist in the manuscript</rendition>
</tagsDecl>
</encodingDesc>
</teiHeader>
- Created manually
- Use of <graphic> with URL pointing to IIIF image
- <zone points=""> to label the illustration of the plant
- Written in this xml file: https://github.com/newtfire/voynichTEI/blob/main/xml/surfaceMetadata/surfaceMetadata.xml
Graphics
Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026
<surfaceInfo id="f1v">
<graphic url="https://collections.library.yale.edu/iiif/2/1006077/full/,1000/0/default.jpg"/>
<zone corresp="#f1v_il" points="580,944 600,883 578,811 496,795 403,807 403,561 459,529 491,483 621,488 693,407 694,335 664,253 598,211 498,214 469,128 410,102 333,148 312,223 220,217 147,288 126,333 156,449 242,448 277,496 306,528 309,577 363,650 374,659 372,767 277,770 187,846 145,879 156,938 217,953"/>
</surfaceInfo>
- Created manually
- Information on illustrations, plants, and people
- Written in this xml file: https://github.com/newtfire/voynichTEI/blob/main/xml/text/text.xml
Site Index
Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026
<text>
<body>
<div type="voynich_team">
<listPerson>
<person xml:id="ebb">
<persName>Elisa Beshero-Bondar</persName>
<persName>
<forename>Elisa</forename>
<surname>Beshero-Bondar</surname>
</persName>
<occupation type="scholar">
<roleName>Program Chair, <ref
target="https://behrend.psu.edu/school-of-humanities-social-sciences/academic-programs/digital-media-arts-and-technology"
>Digital Media, Arts, and Technology (DIGIT)</ref>, Professor of Digital
Humanities, and Director of the <ref target="https://newtfire.org">Digital
Humanities Lab</ref> at <affiliation>Penn State Erie, The Behrend
College</affiliation>
</roleName>
</occupation>
<note>An active member of the Text Encoding Initiative (TEI), she has served since
2016 on the <ref target="http://www.tei-c.org/Activities/Council/">TEI Technical
Council</ref>, an eleven-member international committee that supervises
amendments to the <ref target="https://tei-c.org/guidelines/P5/">TEI
Guideline</ref>s.</note>
</person>
<person xml:id="hjb">
<persName>Hadleigh Jae Bills</persName>
<persName>
<forename>Hadleigh</forename>
<forename>Jae</forename>
<surname>Bills</surname>
<roleName>Research Assistant</roleName>
</persName>
<note resp="#hjb">Hadleigh Jae Bills is a student at Penn State Behrend. She is
working towards a B.A. in Digital Media, Arts, and Technology.</note>
</person>
</listPerson>
</div>
<div type="voynich_people">
<listPerson>
<person xml:id="elv">
<persName>Ethel Voynich</persName>
<persName>
<forename>Ethel</forename>
<forename>Lilian</forename>
<surname type="paternal">Boole</surname>
<surname>Voynich</surname>
<roleName>Researcher</roleName>
</persName>
<note resp="#hjb">Irish novelist, musician and revolutionary married to <persName
type="inline" ref="#wmv">Wilfrid Voynich</persName>. Studied the botanical
aspects of the manuscript.</note>
<note>
<ptr
target="https://ies.sas.ac.uk/research/research-projects/cultivate-mss-project/cast-characters/ethel-lilian-voynich-1864-1960-novelist-scholar"
/>
</note>
</person>
<person xml:id="hth">
<persName>Herman Theodor Holm</persName>
<persName>
<forename>Herman</forename>
<forename>Theodor</forename>
<surname>Holm</surname>
<roleName>Botanist</roleName>
</persName>
<note resp="#hjb">A botanist who built his career around studying plant life across
places like Greenland, Colorado, and the United States. After immigrating to the
U.S., he worked as a botanist for institutions like the United States National
Museum and the Department of Agriculture, continuing his focus on plant research.
He later earned his doctorate from the Catholic University of America and
eventually returned there as a professor of biological research.</note>
<note>
<ptr target="https://findingaids.lib.catholic.edu/repositories/2/resources/176"/>
<ptr
target="https://findingaids.lib.catholic.edu/repositories/2/resources/176/collection_organization"
/>
</note>
</person>
<person xml:id="hon">
<persName>Hugh O'Neill</persName>
<persName>
<forename>Hugh</forename>
<surname>O'Neill</surname>
<roleName>Botanist</roleName>
</persName>
<note resp="#hjb">A botanist from the Catholic University of America. Identified
plants in 1944, but what he identified are plants from the Americas, but the
Voynich Manuscript came before Christopher Columbus' voyages.</note>
<note>
<ptr target="https://voynichlanguage.fandom.com/wiki/Hugh_O%27Neill"/>
</note>
</person>
<person xml:id="rzn">
<persName>René Zandbergen</persName>
<persName>
<forename>René</forename>
<surname>Zandbergen</surname>
<roleName>Researcher</roleName>
</persName>
<note resp="#hjb">René Zandbergen, originally a satellite navigation engineer for the
European Space Agency, became deeply involved in studying the mysterious Voynich
Manuscript on the side. Starting in 1995, he joined an online community focused on
analyzing the manuscript’s strange and unreadable text. Over time, he helped
develop a standard way to transcribe its characters and created one of the most
widely used websites dedicated to researching the manuscript.</note>
<note>
<ptr target="https://independent.academia.edu/RenéZandbergen"/>
</note>
</person>
<person xml:id="tcp">
<persName>Theodore Petersen</persName>
<persName>
<forename>Theodore</forename>
<surname>Petersen</surname>
<roleName>Transcriptor</roleName>
</persName>
<note resp="#hjb">Fr. Petersen first made a full photocopy of the Voynich
manuscript’s photostats, then created a handwritten copy of the manuscript,
consulting the original in a New York safe deposit vault when passages were
especially difficult. He finished this work in 1944, adding notes on possible
meanings, marking unusual character sequences, highlighting common words, and
suggesting plant identifications in the herbal section based in part on Holm and
O’Neill’s research. He also compiled a complete concordance of the manuscript’s
words, though the writer had not seen it. Petersen remained a leading Voynich
expert until his death, after which his papers were passed to Friedman,
inventoried by Tiltman, and eventually housed at the George C. Marshall Library
and Archives in Lexington, Virginia.</note>
<note>
<ptr target="https://www.voynich.nu/solvers.html#petersen"/>
</note>
</person>
<person xml:id="wmv">
<persName>Wilfrid Voynich</persName>
<persName>
<forename>Wilfrid</forename>
<surname>Voynich</surname>
<roleName>Bookseller</roleName>
</persName>
<note resp="#hjb">A polish bookseller who bought the Voynich Manuscript from a Jesuit
library in Italy.</note>
<note>
<ptr
target="https://www.lindahall.org/about/news/scientist-of-the-day/wilfrid-voynich/"
/>
</note>
</person>
</listPerson>
</div>
<div type="herbal">
<list sortKey="illustrations">
<item xml:id="f1v_il">
<figure>
<graphic type="full"
url="https://collections.library.yale.edu/iiif/2/1006077/full/full/0/default.jpg"/>
<head>Illustration on f1v</head>
<figDesc>Potentially <name type="inline" ref="#belladonna">Belladonna</name>,
<name type="inline" ref="#solanum">Solanum</name>, or <name type="inline"
ref="#solatrium">Solatrium</name> suggested by <persName type="inline"
ref="#tcp">Theodore Petersen</persName>. Potentially <name type="inline"
ref="#belladonna">Belladonna</name> suggested by <persName type="inline"
ref="#elv">Ethel Voynich</persName>.</figDesc>
</figure>
</item>
<item xml:id="f2r_il">
<figure>
<graphic type="full"
url="https://collections.library.yale.edu/iiif/2/1006078/full/full/0/default.jpg"/>
<head>Illustration on f2r</head>
<figDesc>Potentially <name type="inline" ref="#cyanusSilvestris">Syanus
Silvestris</name> suggested by <persName type="inline" ref="#hon"
>O'Neill</persName>, or <name type="inline" ref="#centaurea"
>Centauria</name> suggested by <persName type="inline" ref="#hth"
>Holm</persName></figDesc>
</figure>
</item>
<item xml:id="f2v_il">
<figure>
<graphic type="full"
url="https://collections.library.yale.edu/iiif/2/1006079/full/full/0/default.jpg"/>
<head>Illustration on f2v</head>
<figDesc>Potentially <name type="inline" ref="#colocasia">Colocasia</name>
suggested by <persName type="inline" ref="#tcp">Petersen</persName> and
<persName type="inline" ref="#elv">Ethel Voynich</persName>. Potentially
<name type="inline" ref="#egyptianLotus">Egyptian Lotus</name> suggested by
<persName type="inline" ref="#tcp">Petersen</persName>. Potentially <name
type="inline" ref="#villarsia">Villarsia</name> or <name type="inline"
ref="#limnanthemum">Limnanthemum</name> suggested by <persName type="inline"
ref="#elv">Ethel Voynich</persName>. Potentially <name type="inline"
ref="#nymphoidesPeltata">Nymphoides Peltata</name> suggested by <persName
type="inline" ref="#rzn">Zandbergen</persName>.</figDesc>
</figure>
</item>
<item xml:id="f3r_il">
<figure>
<graphic type="full"
url="https://collections.library.yale.edu/iiif/2/1006080/full/full/0/default.jpg"/>
<head>Illustration on f3r</head>
<figDesc>Potentially <name type="inline" ref="#cretanDittany">Crassulatea (Cretan
Dittany)</name> suggested by <persName type="inline" ref="#tcp"
>Petersen</persName>. Potentially <name type="inline" ref="#Dictamnus"
>Dictamnus</name> suggested by <persName type="inline" ref="#elv">Ethel
Voynich</persName>.</figDesc>
</figure>
</item>
<item xml:id="f3v_il">
<figure>
<graphic type="full"
url="https://collections.library.yale.edu/iiif/2/1006081/full/full/0/default.jpg"/>
<head>Illustration on f3v</head>
<figDesc><name type="inline" ref="#unknown">Unknown</name>.</figDesc>
</figure>
</item>
<item xml:id="f4r_il">
<figure>
<graphic type="full"
url="https://collections.library.yale.edu/iiif/2/1006082/full/full/0/default.jpg"/>
<head>Illustration on f4r</head>
<figDesc>Potentially <name type="inline" ref="#hypericum">Hypericum</name>
suggested by <persName type="inline" ref="#hon">O'Neill</persName> and
<persName type="inline" ref="#elv">Ethel Voynich</persName>, or <name
type="inline" ref="#centauriumErythaea">Centaurium Erythaea</name>,
suggested by <persName type="inline" ref="#hon">O'Neill</persName></figDesc>
</figure>
</item>
<item xml:id="f4v_il">
<figure>
<graphic type="full"
url="https://collections.library.yale.edu/iiif/2/1006083/full/full/0/default.jpg"/>
<head>Illustration on f4v</head>
<figDesc>Potentially <name type="inline" ref="#ipomoeaTriloba">Convulvula
Ipomea</name> suggested by <persName type="inline" ref="#tcp"
>Petersen</persName> and <persName type="inline" ref="#elv">Ethel
Voynich</persName>. Potentially <name type="inline"
ref="#convolvulusScammonia">Scammonia</name> suggested by <persName
type="inline" ref="#elv">Ethel Voynich</persName>.</figDesc>
</figure>
</item>
<item xml:id="f5r_il">
<figure>
<graphic type="full"
url="https://collections.library.yale.edu/iiif/2/1006084/full/full/0/default.jpg"/>
<head>Illustration on f5r</head>
<figDesc>Potentially [Herba] Paris suggested by <persName type="inline" ref="#tcp"
>Petersen</persName> and <persName type="inline" ref="#elv">Ethel
Voynich</persName>. Potentially Indian Cucumber suggested by <persName
type="inline" ref="#tcp">Petersen</persName>.</figDesc>
</figure>
</item>
<item xml:id="f5v_il">
<figure>
<graphic type="full"
url="https://collections.library.yale.edu/iiif/2/1006085/full/full/0/default.jpg"/>
<head>Illustration on f5v</head>
<figDesc>Potentially Paretaria Urtica suggested by <persName type="inline"
ref="#hon">O'Neill</persName>.</figDesc>
</figure>
</item>
<item xml:id="f6r_il">
<figure>
<graphic type="full"
url="https://collections.library.yale.edu/iiif/2/1006086/full/full/0/default.jpg"/>
<head>Illustration on f6r</head>
<figDesc>Potentially Asclepiades, but with wrong leaves (of Pediculum) suggested
by <persName type="inline" ref="#tcp">Petersen</persName></figDesc>
</figure>
</item>
<item xml:id="f6v_il">
<figure>
<graphic type="full"
url="https://collections.library.yale.edu/iiif/2/1006087/full/full/0/default.jpg"/>
<head>Illustration on f6v</head>
<figDesc>Potentially blackgum tree?, arctium? Bidens(sp?)kyptis suggested by
<persName type="inline" ref="#hon">O'Neill</persName>.</figDesc>
</figure>
</item>
<item xml:id="f7r_il">
<figure>
<graphic type="full"
url="https://collections.library.yale.edu/iiif/2/1006088/full/full/0/default.jpg"/>
<head>Illustration on f7r</head>
<figDesc>Potentially Nymphaea alba suggested by <persName type="inline" ref="#tcp"
>Petersen</persName>.</figDesc>
</figure>
</item>
<item xml:id="f7v_il">
<figure>
<graphic type="full"
url="https://collections.library.yale.edu/iiif/2/1006089/full/full/0/default.jpg"/>
<head>Illustration on f7v</head>
<figDesc>Potentially polygonum persicaria, potentilla silvestris, or oculus
christi suggested by <persName type="inline" ref="#tcp"
>Petersen</persName>.</figDesc>
</figure>
</item>
</list>
<list sortKey="plants">
<item xml:id="belladonna">
<name>Atropa Bella-Donna</name>
<name type="genus">Atropa</name>
<name type="species">Atropa bella-donna</name>
<name type="family">Solanaceae</name>
<name>
<addName>Belladonna</addName>
<addName>Deadly Nightshade</addName>
<addName>Divale</addName>
<addName>Dwale</addName>
</name>
<desc resp="#hjb">A toxic perennial herbaceous plant native to Europe, North Africa,
and Western Asia.</desc>
<note resp="#hjb">Located in <ref target="#f1v">f1v</ref>.</note>
<note>
<ptr target="https://plants.ces.ncsu.edu/plants/atropa-bella-donna/"/>
<ptr target="https://species.wikimedia.org/wiki/Atropa_bella-donna"/>
<ptr target="https://www.gbif.org/species/144096243"/>
</note>
</item>
<item xml:id="centauriumErythaea">
<name>Centaurium Erythaea</name>
<name type="genus">Centaurium</name>
<name type="species">Centaurium Erythraea</name>
<name type="family">Gentianaceae</name>
<name>
<addName>European Centaury</addName>
<addName>Feverwort</addName>
</name>
<desc resp="#hjb">Often found in open woods, meadows and dry grasslands</desc>
<note resp="#hjb">Located in <ref target="#f4r">f4r</ref>.</note>
<note>
<ptr target="https://pfaf.org/user/Plant.aspx?LatinName=Centaurium+erythraea"/>
<ptr target="https://species.wikimedia.org/wiki/Centaurium_erythraea"/>
</note>
</item>
<item xml:id="colocasia">
<name>Colocasia</name>
<name type="genus">Colocasia</name>
<name type="family">Araceae</name>
<name>
<addName>Dasheen</addName>
<addName>Elephant's-ear</addName>
<addName>Taro</addName>
</name>
<desc resp="#hjb">Plant with massive leaves originating in Southeastern Asia</desc>
<note resp="#hjb">Located in <ref target="#f2v">f2v</ref>.</note>
<note>
<ptr target="https://species.wikimedia.org/wiki/Colocasia_Schott"/>
<ptr target="https://www.voynich.nu/extra/herb_oldid.html"/>
<ptr target="https://plants.ces.ncsu.edu/plants/colocasia/"/>
</note>
</item>
<item xml:id="convolvulusScammonia">
<name>Convolvulus Scammonia</name>
<name type="genus">Convolvulus</name>
<name type="species">Convolvulus Scammonia</name>
<name type="family">Convolvulaceae</name>
<name>
<addName>Scammony</addName>
</name>
<desc resp="#hjb">Twining plant native to Asia Minor</desc>
<note resp="#hjb">Located in <ref target="#f4v">f4v</ref>.</note>
<note>
<ptr target="https://species.wikimedia.org/wiki/Convolvulus_scammonia"/>
<ptr target="https://www.britannica.com/plant/Convolvulus-scammonia"/>
</note>
</item>
<item xml:id="cornflower">
<name>Cornflower</name>
<name type="genus">Centaurea</name>
<name type="species">Centaurea Cyanus</name>
<name type="family">Asteraceae</name>
<name>
<addName>Bachelor's Button</addName>
<addName>Bluebottle</addName>
</name>
<desc resp="#hjb">Grow as a weed in fields. Blue flowers.</desc>
<note resp="#hjb">Located in <ref target="#f2r">f2r</ref>.</note>
<note>
<ptr target="https://species.wikimedia.org/wiki/Centaurea_cyanus"/>
<ptr target="https://www.voynich.nu/extra/herb_oldid.html"/>
<ptr target="https://plants.ces.ncsu.edu/plants/centaurea-cyanus/"/>
</note>
</item>
<item xml:id="cretanDittany">
<name>Cretan Dittany</name>
<name type="genus">Origanum</name>
<name type="species">Origanum dictamnus</name>
<name type="family">Lamiaceae</name>
<desc resp="#hjb">A bushy sub-shrub with aromatic foliage native to rocky slopes on
the mountains of Crete.</desc>
<note resp="#hjb">Located in <ref target="#f3r">f3r</ref>.</note>
<note>
<ptr target="https://species.wikimedia.org/wiki/Origanum_dictamnus"/>
<ptr target="https://www.voynich.nu/extra/herb_oldid.html"/>
<ptr
target="https://www.missouribotanicalgarden.org/PlantFinder/PlantFinderDetails.aspx?taxonid=281581"
/>
</note>
</item>
<item xml:id="cyanusSilvestris">
<name>Cyanus Silvestris</name>
<desc resp="#hjb">Related to the <name type="inline" ref="#cornflower"
>Cornflower</name>.</desc>
<note resp="#hjb">Located in <ref target="#f2r">f2r</ref>.</note>
<note>
<ptr
target="https://upload.wikimedia.org/wikipedia/commons/2/2b/Landmarks_of_botanical_history%3B_a_study_of_certain_epochs_in_the_development_of_the_science_of_botany._Part_I.-Prior_to_1562_A._D_%28IA_cu31924024548392%29.pdf"
/>
</note>
</item>
<item xml:id="Dictamnus">
<name>Dictamnus</name>
<name type="genus">Dictamnus</name>
<name type="family">Rutaceae</name>
<desc resp="#hjb">A genus of plants.</desc>
<note resp="#hjb">Located in <ref target="#f3r">f3r</ref>.</note>
<note>
<ptr target="https://species.wikimedia.org/wiki/Dictamnus"/>
</note>
</item>
<item xml:id="egyptianLotus">
<name>Egyptian Lotus</name>
<name type="genus">Nymphaea</name>
<name type="species">Nymphaea lotus</name>
<name type="family">Nymphaeaceae</name>
<name>
<addName>White Lotus</addName>
</name>
<desc resp="#hjb">A robust night-blooming aquatic perennial plant that floats on the
surface of the water. Native to Africa and specific areas of Europe.</desc>
<note resp="#hjb">Located in <ref target="#f2v">f2v</ref>.</note>
<note>
<ptr target="https://species.wikimedia.org/wiki/Nymphaea_lotus"/>
<ptr target="https://www.voynich.nu/extra/herb_oldid.html"/>
<ptr target="https://www.gardenia.net/plant/nymphaea-lotus"/>
<ptr target="https://tropical.theferns.info/viewtropical.php?id=Nymphaea+lotus"/>
</note>
</item>
<item xml:id="hypericum">
<name>Hypericum</name>
<name type="genus">Hypericum</name>
<name type="family">Hypericaceae</name>
<name>
<addName>St. John's Wort</addName>
<addName>Goatweed</addName>
</name>
<desc resp="#hjb">A genus of flowering plants.</desc>
<note resp="#hjb">Located in <ref target="#f4r">f4r</ref></note>
<note>
<ptr target="https://species.wikimedia.org/wiki/Hypericum"/>
<ptr target="https://en.wikipedia.org/wiki/Hypericum"/>
</note>
</item>
<item xml:id="hyoscyamusNiger">
<name>Hyoscyamus Niger</name>
<name type="genus">Hyoscyamus</name>
<name type="species">Hyoscyamus niger</name>
<name type="family">Solanaceae</name>
<name>
<addName>Black Henbane</addName>
<addName>Henbane</addName>
<addName>Hog's Bean</addName>
<addName>Stinking Nightshade</addName>
<addName>Witches Herb</addName>
</name>
<desc resp="#hjb">Erect annual or biennial herb with coarse, hairy stems.</desc>
<note resp="#hjb">Located in <ref target="#f1v">f1v</ref>.</note>
<note>
<ptr target="https://species.wikimedia.org/wiki/Hyoscyamus_niger"/>
<ptr target="https://plants.ces.ncsu.edu/plants/hyoscyamus-niger/"/>
</note>
</item>
<item xml:id="ipomoeaTriloba">
<name>Ipomoea Triloba</name>
<name type="genus">Ipomoea</name>
<name type="species">Ipomoea triloba</name>
<name type="family">Convolvulaceae</name>
<name>
<addName>Little Bell</addName>
</name>
<desc resp="#hjb">Grows as a glabrous, climbing, perennial vine, with individuals
vines often twining together, arising from a tuber.</desc>
<note resp="#hjb">Located in <ref target="#f4v">f4v</ref>.</note>
<note>
<ptr target="https://www.worldfloraonline.org/taxon/wfo-0001297271"/>
<ptr target="https://levypreserve.org/plant-listings/ipomoea-triloba/"/>
</note>
</item>
<item xml:id="limnanthemum">
<name>Limnanthemum</name>
<name type="genus">Nymphoides</name>
<name type="family">Menyanthaceae</name>
<desc resp="#hjb">Previous name for the Nymphoides plant genus.</desc>
<note resp="#hjb">Located in <ref target="#f2v">f2v</ref>.</note>
<note>
<ptr
target="https://www.scribd.com/presentation/440509093/WHY-NAME-CHANGES-IN-PLANTS-pptx"
/>
</note>
</item>
<item xml:id="nymphoides">
<name>Nymphoides</name>
<name type="genus">Nymphoides</name>
<name type="family">Menyanthaceae</name>
<desc resp="#hjb">A genus of plant.</desc>
<note resp="#hjb">Located in <ref target="#f2v">f2v</ref>.</note>
<note>
<ptr target="https://species.wikimedia.org/wiki/Nymphoides"/>
</note>
</item>
<item xml:id="nymphoidesPeltata">
<name>Nymphoides Peltata</name>
<name type="genus">Nymphoides</name>
<name type="species">Nymphoides peltata</name>
<name type="family">Menyanthaceae</name>
<name>
<addName>Yellow floating heart</addName>
<addName>Water-fringe</addName>
</name>
<desc resp="#hjb">A rhizomatous, floating-leaf, aquatic perennial that looks like a
small water lily. Native to Europe and Asia.</desc>
<note resp="#hjb">Located in <ref target="#f2v">f2v</ref>.</note>
<note>
<ptr target="https://species.wikimedia.org/wiki/Nymphoides_peltata"/>
<ptr
target="https://www.missouribotanicalgarden.org/PlantFinder/PlantFinderDetails.aspx?taxonid=282718&isprofile=0&chr=48"
/>
</note>
</item>
<item xml:id="solanum">
<name>Solanum</name>
<name type="genus">Solanum</name>
<name type="family">Solanaceae</name>
<desc resp="#hjb">Genus in the nightshade family.</desc>
<note resp="#hjb">Located in <ref target="#f1v">f1v</ref>.</note>
<note>
<ptr target="https://species.wikimedia.org/wiki/Solanum"/>
<ptr target="https://plants.ces.ncsu.edu/plants/solanum/"/>
</note>
</item>
<item xml:id="solanumDulcamara">
<name>Solanum Dulcamara</name>
<name type="genus">Solanum</name>
<name type="species">Solanum Dulcamara</name>
<name type="family">Solanaceae</name>
<name>
<addName>Bitter Nightshade</addName>
<addName>Bittersweet</addName>
<addName>Bittersweet Nightshade</addName>
<addName>Blue Blindweed</addName>
<addName>Blue Nightshade</addName>
<addName>Climbing Nightshade</addName>
<addName>Devil's Apple</addName>
<addName>European Bittersweet</addName>
<addName>Fellonwort</addName>
<addName>Felonwood</addName>
<addName>Poisonous Nightshade</addName>
<addName>Scarlet Berry</addName>
<addName>Snakeberry</addName>
<addName>Soda Apple</addName>
<addName>Violet Bloom</addName>
<addName>Wolfgrape</addName>
<addName>Woody Nightshade</addName>
</name>
<desc resp="#hjb">perennial vine or scrambling shrub that has purple flowers during
summer and red berries during the summer and fall. The leaves and stems have an
unpleasant odor.</desc>
<note resp="#hjb">Located in <ref target="#f1v">f1v</ref>.</note>
<note>
<ptr target="https://species.wikimedia.org/wiki/Solanum_dulcamara"/>
<ptr target="https://plants.ces.ncsu.edu/plants/solanum-dulcamara/"/>
</note>
</item>
<item xml:id="solanumNigrum">
<name>Solanum Nigrum</name>
<name type="genus">Solanum</name>
<name type="species">Solanum Nigrum</name>
<name type="family">Solanaceae</name>
<name>
<addName>Blackberry Nightshade</addName>
<addName>Black Nightshade</addName>
<addName>Common Nightshade</addName>
<addName>European Black Nightshade</addName>
<addName>Garden Nightshade</addName>
<addName>Poisonberry</addName>
</name>
<desc resp="#hjb">Perennial herb that is an erect and dense shrub native to parts of
Europe, Asia, Macaronesia, and the North and Northeast portions of Africa.</desc>
<note resp="#hjb">Located in <ref target="#f1v">f1v</ref>.</note>
<note>
<ptr target="https://species.wikimedia.org/wiki/Solanum_nigrum"/>
<ptr target="https://plants.ces.ncsu.edu/plants/solanum-nigrum/"/>
</note>
</item>
<item xml:id="solatrium">
<name>Solatrium</name>
<desc resp="#hjb">A Dioscoridean name for <name type="inline" ref="#belladonna"
>Atropa Belladona</name>, <name type="inline" ref="#hyoscyamusNiger">Hyoscyamus
Niger</name>, <name type="inline" ref="#solanumNigrum">Solanum Nigrum</name>,
and/or <name type="inline" ref="#solanumDulcamara">Solanum
Dulcamara</name>.</desc>
<note resp="#hjb">Located in <ref target="#f1v">f1v</ref>.</note>
<note>
<ptr target="https://www.voynich.nu/q01/f001v_tr.txt"/>
</note>
</item>
<item xml:id="unknown">
<name>Unknown</name>
<desc resp="#hjb">This is when a plant is not identified.</desc>
</item>
<item xml:id="villarsia">
<name>Villarsia</name>
<name type="genus">Villarsia</name>
<name type="family">Menyanthaceae</name>
<desc resp="#hjb">Genus of plants.</desc>
<note resp="#hjb">Located in <ref target="#f2v">f2v</ref>.</note>
<note>
<ptr target="https://species.wikimedia.org/wiki/Villarsia"/>
</note>
</item>
</list>
</div>
</body>
</text>- Go to your python folder
- Run the replaceAscii.py file
- You should have ZL3b-n_updated.txt in transliterationFiles directory
Python
Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026

$ python replaceAscii.py
MINGW64
~/folder/voynichTEI/python
user@computer
(main)
$ cd python
MINGW64
~/folder/voynichTEI
user@computer
(main)
Replacement complete.
chey.@192;chy.@130;tol
chey.Àchy.‚tol
@192;
@130;
À
‚
- For Windows!
- Clone the Markup Blitz repo
- Go to markup-blitz directory
- Build JAR file
- Go to where you store bash aliases
- Mine: C: → Program Files → Git → etc → profile.d → aliases.sh
- Create alias
Markup Blitz
Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026

$ cd markup-blitz
MINGW64
~/folder
user@computer
MINGW64
~/folder
user@computer
$ git clone
https://github.com/GuntherRademacher/markup-blitz.git
MINGW64
~/folder/markup-blitz
(main)
user@computer
$ ./gradlew clean jar
alias blitz='java -jar ~/folder/markup-blitz/build/libs/markup-blitz.jar'
- Go to voynichTEI
- use markup-blitz to run Invisible XML over transliteration file
Invisible XML
Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026

$ blitz ixml/translit.ixml transliterationFiles/ZL3b-n_updated.txt > xml/outputXML.xml
MINGW64
~/folder/voynichTEI
user@computer
(main)
<surface surfaceN="f2r">
<quireInfo>
<quire>A</quire>
<quirePage>C</quirePage>
<folio>b</folio>
<bifolio>2</bifolio>
<illus>H</illus>
<language>A</language>
<hand>1</hand>
<currier>1</currier>
</quireInfo>
<pb pbnum="3"/>
<note>herbal</note>
<note>Currier's language A, hand 1</note>
<note>Plant ID: Cyanus segelis coeruleus (Kornblume), centaurea (cf. Holm)</note>
<note>Two paragraphs, top one cut in many places. 1 label near plant leaf</note>
<line lineN="1" rendition="#At #P0"><milestone-start/>kydainy.ypchol.daiin.otchal<figure/>ypchaiin.ckholsy</line><f2r> <! $Q=A $P=C $F=b $B=2 $I=H $L=A $H=1 $C=1>
# page 3
# herbal
# Currier's language A, hand 1
# Plant ID: Cyanus segelis coeruleus (Kornblume), centaurea (cf. Holm)
# Two paragraphs, top one cut in many places. 1 label near plant leaf
#
<f2r.1,@P0> <%>kydainy.ypchol.daiin.otchal<->ypchaiin.ckholsy- Open OxygenXML Editor
- Click on the XSLT Debugger Perspective
- Open xml/outputXML.xml and xslt/ixmlOut-to-TEI.xsl
- Put outputXML.xml into the XML input and ixmlOut-to-TEI.xsl in the XSL input
- Set the output to tei/outputTEI.xml
- Press the Run button (blue arrow)
- You now have a proper TEI file!
XSLT
Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026




Current Standing
Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026
- Graphics for the first two quires
- Tentative herb identifications for first quire
What is Done?
Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026
| Folio | Graphic | Tentative Info | Plant Info |
|---|---|---|---|
| f1 | ✓ | ✓ | ✓ |
| f2 | ✓ | ✓ | ✓ |
| f3 | ✓ | ✓ | ✓ |
| f4 | ✓ | ✓ | ✓ |
| f5 | ✓ | ✓ | |
| f6 | ✓ | ✓ | |
| f7 | ✓ | ✓ | |
| f8 | ✓ | ||
| f9 | ✓ | ||
| f10 | ✓ | ||
| f11 | ✓ | ||
| f12 | ✓ | ||
| f13 | ✓ | ||
| f14 | ✓ | ||
| f15 | ✓ |
- Some graphics do not yet have plant information under it
- All graphic and plant information for the rest of the herbal section
- Website could use a little love in CSS
What's Not Done?
Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026

Has graphic
Has tentative plants
Has information on plants

Has graphic
Has tentative plants
No information on plants

Has graphic
No tentative plants
No information on plants
- Finish the first two quires with information on the illustrations and plants
- Fix up the website
Current Goals
Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026
<surfaceGrp type="folio" n="b">
<surface xml:id="f2r"
vn:quire="A"
vn:quirePage="C"
vn:folio="b"
vn:bifolio="2"
vn:illus="H"
vn:language="A"
vn:hand="1"
vn:currier="1">
<graphic url="https://collections.library.yale.edu/iiif/2/1006078/full/,1000/0/default.jpg"/>
<zone corresp="#f2r_il"
points="289,915 364,970 520,931 507,871 433,872 427,769 438,700 442,664 470,632 508,640 539,647 636,629 647,588 619,502 597,472 643,422 651,357 638,310 539,306 503,263 462,257 422,252 489,195 506,179 575,160 601,119 589,72 546,46 483,60 471,87 482,144 475,162 450,185 438,204 393,253 361,303 350,329 350,219 357,145 388,96 393,60 337,46 295,70 293,101 331,135 333,346 276,283 250,226 274,188 272,153 211,145 174,160 170,196 197,221 222,243 250,288 325,377 340,415 307,395 247,326 193,297 150,299 118,363 152,403 287,425 275,487 163,465 118,537 168,599 308,618 369,638 397,670 390,864"/>
<pb n="3"/>
<note>herbal</note>
<note>Currier's language A, hand 1</note>
<note>Plant ID: Cyanus segelis coeruleus (Kornblume), centaurea (cf. Holm)</note>
<note>Two paragraphs, top one cut in many places. 1 label near plant leaf</note>
<line n="1" rendition="#At #P0">
<milestone unit="block" type="start"/>kydainy.ypchol.daiin.otchal<figure type="inline"/>ypchaiin.ckholsy</line>
<line n="2" rendition="#Ad #P0">dorchory<figure type="inline"/>chkar.s<figure type="inline"/>shor.cthy.<g>cto</g>
</line>
<line n="3" rendition="#Ad #P0">qotaiin<figure type="inline"/>cthey.y<figure type="inline"/>chor.chy.ydy<figure type="inline"/>chaiin</line>
<line n="4" rendition="#Ad #P0">
<g>c'o</g>aiidy<figure type="inline"/>chtod,dy<figure type="inline"/>cphy.dals<figure type="inline"/>chokaiin.d</line>
<line n="5" rendition="#Ad #P0">otochor.al<figure type="inline"/>shodaiin<figure type="inline"/>chol,dan<figure type="inline"/>ytchaiin.dan</line>
<line n="6" rendition="#Ad #P0">saiin.dain,d<figure type="inline"/>dkol.sor<figure type="inline"/>ytoldy<figure type="inline"/>dchol.dchy.cthy</line>
<line n="7" rendition="#Ad #P0">shor.ckhy.daiiny<figure type="inline"/>chol,dan<milestone unit="block" type="end"/>
</line>
<line n="8" rendition="#Ad #P0">
<milestone unit="block" type="start"/>kydain.shaiin.qoy.s.shol.fodan<figure type="inline"/>yksh.olsheey.daiildy</line>
<line n="9" rendition="#Ad #P0">dls,sho.kol.sheey.qokey.ykody.so<figure type="inline"/>chol,yky.dain.daiisol</line>
<line n="10" rendition="#Ad #P0">qo'ky.cholaiin.shol.sheky.daiin<figure type="inline"/>cthey.keol.saiin.e'a'iin</line>
<line n="11" rendition="#Ad #P0">ychain.dal.chy.dalor.shan.dan<figure type="inline"/>olsaiin.sheey.ckhor</line>
<line n="12" rendition="#Ad #P0">okol.chy.chor.cthor.yor.an.chan<figure type="inline"/>saiin.chety.chyky.sal</line>
<line n="13" rendition="#Ad #P0">sho.ykeey.chey.daiin.chcthy<milestone unit="block" type="end"/>
</line>
<line n="14" rendition="#At #Lp">ytoail</line>
<line n="15" rendition="#At #L0">ios.an.on</line>
</surface>
<surface xml:id="f2v"
vn:quire="A"
vn:quirePage="D"
vn:folio="b"
vn:bifolio="2"
vn:illus="H"
vn:language="A"
vn:hand="1"
vn:currier="1"
vn:xtra="O">
<graphic url="https://collections.library.yale.edu/iiif/2/1006079/full/,1000/0/default.jpg"/>
<zone corresp="#f2v_il"
points="90,891 75,921 84,943 685,947 694,924 684,895 506,876 491,703 496,664 468,654 456,581 508,596 575,564 628,458 628,351 553,286 517,276 528,225 551,202 572,169 631,152 640,141 597,101 612,34 568,52 516,45 463,41 469,81 489,115 485,175 503,217 491,276 392,270 314,297 258,360 250,436 259,515 318,575 381,613 409,614 435,601 473,728 469,885"/>
<pb n="4"/>
<note>herbal</note>
<note>Currier's language A, hand 1</note>
<note>Plant ID: Collocasia, Egyptian lotus, Nymphoides Peltata (R. Zandbergen)</note>
<note>Just 8 lines, all cut by plant</note>
<line n="1" rendition="#At #P0">
<milestone unit="block" type="start"/>kooiin.cheo,pchor.otaiin,odain.chor<figure type="inline"/>dair.shty</line>
<line n="2" rendition="#Ad #P0">kcho,kchy.sho.shol.qotcho.loeees.qoty<figure type="inline"/>chor.daiin</line>
<line n="3" rendition="#Ad #P0">otchy.chor.lshy.chol.chody.chodain<figure type="inline"/>chcthy.daiin</line>
<line n="4" rendition="#Ad #P0">sho.cholo.cheor.chodaiin<milestone unit="block" type="end"/>
</line>
<line n="5" rendition="#Ad #P0">
<milestone unit="block" type="start"/>kchor<note type="inline">mark above o</note>.shy.daiiin.ch<g>cko</g>m<figure type="inline"/>s,shey.dor,chol,daiin</line>
<line n="6" rendition="#Ad #P0">dor.chol.chor.chol.keol.chy.chty<figure type="inline"/>daiin.o,tchor.chan</line>
<line n="7" rendition="#Ad #P0">daiin.chotchey.qoteeey.chokeos<figure type="inline"/>chees.chr.cheaiin</line>
<line n="8" rendition="#Ad #P0">chokoishe.chor.cheol.chol.dolody<milestone unit="block" type="end"/>
</line>
</surface>
</surfaceGrp>Thank you!
Presentation for TEI Conference 2026 in Vancouver, Canada
13 August 2026
Voynich TEI
By Hadleigh Jae
Voynich TEI
- 143