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

#=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

EVA Alphabet

Presentation for TEI Conference 2026 in Vancouver, Canada

13 August 2026

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

IVTFFTEI
<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.")
ASCIIUNICODE
@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.
IVTFFXML
<-><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>
XMLTEI
<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

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

 

 

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>

 

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>

 

 

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&amp;isprofile=0&amp;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

FolioGraphicTentative InfoPlant 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