Contributing

Add a transliteration system.

Interscript grows when contributors encode romanization systems from authority documents into the open-source corpus. This page walks through the process — it's more straightforward than it looks.

01

Find a system to add

Browse the catalogue to see what's already covered. Then check the issue tracker for requested systems. If the system you want isn't listed anywhere, open a new issue describing the authority document so maintainers can confirm scope.

02

Read the authority document

Most authority romanization tables are published as PDFs. Read carefully — the rules include edge cases (word-initial vs word-medial, before/after context, special characters). Note every rule with its source page number; you'll cite it in the map metadata.

If the authority document isn't freely available, look for secondary sources (Wikipedia, library science journals) that describe the rules. Cite the secondary source in those cases.

03

Write the map in ISC

Maps live in github.com/interscript/maps, named {authority}-{lang}-{source_script}-{dest_script}-{year}.isc (e.g. bgnpcgn-ukr-Cyrl-Latn-2019.isc).

# bgnpcgn-ukr-Cyrl-Latn-2019.isc
system "BGN-PCGN:ukr-Cyrl:Latn:2019" {

metadata {
  authority_id bgnpcgn
  id 2019
  language iso-639-2:ukr
  source_script Cyrl
  destination_script Latn
  name Romanization of Ukrainian (2019 Agreement)
  url https://assets.publishing.service.gov.uk/...
}

tests {
  "Алушта" -> "Alushta"
  "Борщагівка" -> "Borshchahivka"
}

stage main {
  run map.cyrllatn.stage.main
  parallel {
    sub "'" ""
  }
}
}

The format has more options (capture groups, before/after constraints, run rules that compose stages) — the corpus itself is the reference; see bgnpcgn-ukr-Cyrl-Latn-2019.isc for a fully-worked map.

04

Add test vectors

Every map ships with test directives — input → expected output pairs pulled from the authority document or real-world examples. These run against every engine — the Ruby interpreter and the TypeScript ISC runtime. Failures block merge.

Aim for at least 10 test vectors covering common cases, diacritics, edge cases, and (where applicable) word-boundary behavior. Cite source pages in code comments.

05

Open a pull request

Fork interscript/maps, push your branch, open a PR. The CI pipeline runs the test suite against every engine and re-checks the parity suite. Maintainers review the map against the source document; if rules are missing or wrong, they'll point out specific page numbers.

Once merged, the new system is automatically:

  • Available in the Ruby gem (next release)
  • Available in interscript-ts via the ISC runtime
  • Live on interscript.org (next site build)
  • Available through the REST API

Need help?

Open a GitHub issue with the authority document and what you've tried. The community is friendly and the maintainers are responsive.