mathcat 0.7.5

MathCAT: Math Capable Assistive Technology ('Speech and braille from MathML')
Documentation
---
- include: "../../definitions.yaml"


# If an "intent" is used, the 'terse:medium:verbose' speech for the intent name is given here for a prefix||infix||postfix||function fixity
# If only one ":" is used, it the first part is used for 'terse' and the second part is used for 'medium' and 'verbose'
# If no ":"s are used, the same speech is used for all forms
# If bracketing words make sense, they are separated with ";"s
# Intent mappings must specify whether they are "prefix", "infix", "postfix", or "function" with an "=" sign
# If there are multiple fixities (e.g., see transpose), they are separated with "||
#   for readability, spaces can be used around any of the delimiter characters
# Note: if there are multiple fixities, the first one is used if the fixity is not given in the intent
- IntentMappings: {
    "indexed-by": "infix= ; indeks; akhir indeks",

    "absolute-value": "function= ; nilai mutlak: nilai mutlak dari: nilai mutlak dari; akhir nilai mutlak",
    "binomial": "infix=binomial; memilih; end binomial",
    "dimension-product": "infix=kali",
    "limit": "prefix=raja-arvo: raja-arvo kun: raja-arvo kun",
    "lim-sup": "prefix=lim sup as: the limit superior as: the limit superior as",
    "lim-inf": "prefix=lim inf as: the limit inferior as : the limit inferior as",
    "minus": "infix=kurang || prefix=negatif",
    "plus": "infix=tambah || prefix=positif",

    "transpose": "postfix=transpose || function=transpose",
    "norm": "function=; norma: norma: norma dari; end norm",
    "trace": "function=;jejak : jejak: jejak dari; end trace",
    "dimension": "function=; dimensi : dimensi: dimensi dari; end dimension",
    "homomorphism": "function= ; homomorfisme : homomorfisme: homomorfisme dari; end homomorphism",
    "kernel": "function= ; kernel : kernel: kernel dari; end kernel",
    "vector": "function= ; vector || prefix=vector",
    "cross-product": "infix=cross: cross product: cross product",
    "dot-product": "infix=dot: dot product: dot:dot product",

    "divergence": "function= ; div: divergence: divergence; end divergence",
    "curl": "function= ; curl; end curl",
    "gradient": "function= ; grad: gradient: gradient; end gradient",
    "laplacian": "function=lahplahsian",   # speech engines don't do a good job with "laplacian"
  }

- NavigationParts: {
    "large-op": "base, lower limit, upper limit",
    "mfrac": "numerator;denominator",
    "fraction": "numerator;denominator",
    "msqrt": "root",
    "square-root": "root",
    "mroot": "root;root index",
    "root": "root;root index",
    "msub": "base;subscript",
    "sub": "base;subscript",
    "msup": "base;superscript",
    "say-super": "base;superscript",
    "skip-super": "base;superscript",
    "power": "base;exponent",
    "msubsup": "base;subscript;superscript",
    "munder": "base;under limit",
    "mover": "base;upper limit",
    "munderover": "base;under limit;upper limit",

    # words for moving into and out of one of the parts (e.g., "move right 'out of' numerator, 'in' denominator")
    # it's a hack to put them here, but at least they are grouped with the other navigation parts
    "in": "in",
    "out": "out of",
  }


- SIPrefixes: {
    "Q": "quetta", "R": "ronna", "Y": "yotta", "Z": "zetta", "E": "exa", "P": "peta", "T": "tera", "G": "giga", "M": "mega", "k": "kilo", "h": "hekto", "da": "deka",
    "d": "desi", "c": "senti", "m": "mili", "µ": "mikro", "n": "nano", "p": "piko", "f": "femto", "a": "atto", "z": "zepto", "y": "yocto", "r": "ronto", "q": "quekto"
  }

# this is a list of all units that accept SIPrefixes
# from www.bipm.org/documents/20126/41483022/SI-Brochure-9-EN.pdf
#   Prefixes may be used with any of the 29 SI units with special names
#   The SI prefixes can be used with several of accepted units, but not, for example, with the non-SI units of time.
- SIUnits: {
    # base units
    "A": "amp",
    "cd": "candela",
    "K": "kelvin", "K": "kelvin", # U+212A
    "g": "gram",
    "m": "meter",     # British spelling works for US also
    "mol": "mole",
    "s": "detik",     # "sec" not actually legal

    # derived units
    "Bq": "becquerel",
    "C": "coulomb",
    "°C": "derajat celsius", "℃": "derajat celsius", # should only take negative powers
    "F": "farad",
    "Gy": "gray",
    "H": "henry",
    "Hz": "hertz",
    "J": "joule",
    "kat": "kattel",
    "lm": "lumen",
    "lx": "lux",
    "N": "newton",
    "Ω": "ohm", "Ω": "ohm",       # Greek Cap letter, U+2126 OHM SIGN
    "Pa": "pascal",
    "S": "siemens",
    "Sv": "sievert",
    "T": "tesla",
    "V": "volt",
    "W": "watt",
    "Wb": "weber",

    # accepted (plus a few variants) that take SI prefixes
    "l": "liter", "L": "liter", "â„“": "liter",  # Should only take negative powers; British spelling works for US also
    "t": "metric ton",           # should only take positive powers
    "Da": "dalton",
    "Np": "neper",               # should only take negative powers
    "u": "satuan massa atom",    # 'u' is correct: https://en.wikipedia.org/wiki/Dalton_(unit)
    "eV": "elektronvolt",
    "rad": "radian",             # should only take negative powers
    "sr": "sterradion",          # should only take negative powers      
  
    # others that take a prefix
    "a": "annum",               # should only take positive powers
    "as": "arcsecond",          # see en.wikipedia.org/wiki/Minute_and_second_of_arc

    # technically wrong, but used in practice with SI Units
    "b": "bit",               # should only take positive powers
    "B": "byte",              # should only take positive powers
    "Bd": "baud",             # should only take positive powers
  }


- UnitsWithoutPrefixes: {
    # time
    "″": "detik", "\"": "detik",
    "′": "menit", "'": "menit","min": "menit",
    "h": "jam", "hr": "jam", "Hr": "jam",
    "d": "hari", "dy": "hari",
    "w": "minggu", "wk": "minggu",
    "y": "tahun", "yr": "tahun",    

    # angles
    "°": "derajat", "deg": "derajat", # should only take negative powers
    "arcmin": "arcminute",
    "amin": "arcminute",
    "am": "arcminute",
    "MOA": "arcminute",
    "arcsec": "arcsecond",
    "asec": "arcsecond",

    # distance
    "au": "satuan astronomi", "AU": "satuan astronomi",
    "ltyr": "tahun cahaya", "ly": "tahun cahaya",
    "pc": "parsec",
    "Ã…": "angstrom", "â„«": "angstrom",           # U+00C5 and U+212B
    "fm": "fermi",

    # others
    "ha": "hektar",
    # "B": "bel",    # "B" more commonly means bytes
    "dB": "decibel", # already logarithmic, so not used with SI prefixes

    "amu": "satuan massa atom",
    "atm": "atmosfir",
    "bar": "bar",
    "cal": "kalori",
    "Ci": "curie",
    "grad": "gradien",
    "M": "molar",
    "R": "roentgen",
    "rpm": "revolusi per menit",
    "â„§": "m-h-o",
    "dyn": "dyne",
    "erg": "erg",

    # powers of 2 used with bits and bytes
    "Kib": "kibi-bit", "Mib": "mebi-bit", "Gib": "gibi-bit", "Tib": "tebi-bit", "Pib": "pebi-bit", "Eib": "exbi-bit", "Zib": "zebi-bit", "Yib": "yobi-bit",
    "KiB": "kibi-byte", "MiB": "mebi-byte", "GiB": "gibi-byte", "TiB": "tebi-byte", "PiB": "pebi-byte", "EiB": "exbi-byte", "ZiB": "zebi-byte", "YiB": "yobi-byte",
  }

  # this will only be used if the language is English, so it can be empty for other countries
- EnglishUnits: {
    # length
    "in": "inci",
    "ft": "kaki",
    "mi": "mil",
    "rd": "rod",
    "li": "link",
    "ch": "chain",

    # area
    "sq in": "inci persegi", "sq. in": "inci persegi", "sq. in.": "inci persegi",
    "sq ft": "kaki persegi", "sq. ft": "kaki persegi", "sq. ft.": "kaki persegi",
    "sq yd": "yard persegi", "sq. yd": "yard persegi", "sq. yd.": "yard persegi",
    "sq mi": "mil persegi", "sq. mi": "mil persegi", "sq. mi.": "mil persegi",
    "ac": "acre",
    "FBM": "kaki papan",

    # volume
    "cu in": "inci kubik", "cu. in": "inci kubik", "cu. in.": "inci kubik",
    "cu ft": "kaki kubik", "cu. ft": "kaki kubik", "cu. ft.": "kaki kubik",
    "cu yd": "yard kubik", "cu. yd": "yard kubik", "cu. yd.": "yard kubik",
    "bbl": "barel", "BBL": "barel",
    "pk": "takar",
    "bu": "gantang",
    "tsp": "sendok teh",
    "tbl": "sendok makan",

    # liquid
    "fl dr": "dram cairan",
    "fl oz": "ons cairan",
    "gi": "gill",
    "cp": "cangkir", "cangkir": "cangkir",
    "pt": "pint",
    "qt": "kuart",
    "gal": "galon",

    # weight
    "gr": "butir",
    "dr": "dram",
    "oz": "ons", "â„¥": "ons",
    "lb": "pon",
    "cwt": "seratus kilogram",
    "dwt": "pennyweight",
    "oz t": "ons troy",
    "lb t": "pon troy",

    # energy
    "hp": "daya kuda",
    "BTU": "BTU",
    "°F": "derajat fahrenheit", "℉": "derajat fahrenheit",

    # other
    "mph": "mil per jam",
    "mpg": "mil per galon",
  }

- PluralForms: {
  # FIX: this needs to be flushed out
    "inch": "inci", "inci persegi": "inci persegi", "inci kubik": "inci kubik",
    "foot": "kaki", "kaki persegi": "kaki persegi", "kaki kubik": "kaki kubik",
    "board foot": "kaki papan",
    "degree celsius": "derajat celcius",
    "degree fahrenheit": "derajat fahrenheit",
    "hertz": "hertz",
    "siemens": "siemens",
    "revolution per minute": "putaran per menit",
    "mile per hour": "mil per jam",
    "mile per gallon": "mil per galon",
  }

# Lines starting with "#" are a comment
# Each definition in this file is of the form
# - name: { "...", "..." "..." }
# For numbers, 
# - name: [] "...", "..." "..." ]


# ----------------  Cardinal and Ordinal Numbers  --------------------------
# The following definitions are used to convert numbers to words
# The are mainly used for ordinals, of which there are two cases:
# 1. Regular ordinals: first, second, third, ...
# 2. Ordinals used in the denominator of fractions (e.g, one half, one third)
#    When used in the denominator of fractions, a plural version might be
#    used (e.g., two halves, two thirds)
# Although a lot of languages are regular after a few entries, for generality,
# the following lists should be filled out even though they are the same
# or easily derived from others in many languages (e.g, an 's' is added for plurals).
# The larger ordinal numbers (e.g, millionth) is used when there are only
# '0's after that decimal place (e.g., 23000000).:w

# All definitions start 0, 10, 100, etc.

# The definitions for the "ones" should extend until a regular pattern begins
#   The minimum length is 10.

# For English, a regular pattern starts at twenty
- NumbersOnes: [
        "nol", "satu", "dua", "tiga", "empat", "lima", "enam", "tujuh", "delapan", "sembilan",
        "sepuluh", "sebelas", "dua belas", "tiga belas", "empat belas", "lima belas", "enam belas",
        "tujuh belas", "delapan belas", "sembilan belas"
    ]

- NumbersOrdinalOnes: [
        "nol", "satu", "dua", "tiga", "empat", "lima", "enam", "tujuh", "delapan", "sembilan",
        "sepuluh", "sebelas", "dua belas", "tiga belas", "empat belas", "lima belas", "enam belas",
        "tujuh belas", "delapan belas", "sembilan belas"
    ]

- NumbersOrdinalPluralOnes: [
        "nol", "satu", "dua", "tiga", "empat", "lima", "enam", "tujuh", "delapan", "sembilan",
        "sepuluh", "sebelas", "dua belas", "tiga belas", "empat belas", "lima belas", "enam belas",
        "tujuh belas", "delapan belas", "sembilan belas"
    ]

    # stop when regularity begins
- NumbersOrdinalFractionalOnes: [
        "pernol", "persatu", "perdua"
    ]

    # stop when regularity begins
- NumbersOrdinalFractionalPluralOnes: [
        "pernol", "persatu", "perdua"
    ]


    # What to use for multiples of 10
- NumbersTens: [
        "", "sepuluh", "dua puluh", "tiga puluh", "empat puluh", "lima puluh", "enam puluh", "tujuh puluh", "delapan puluh", "sembilan puluh"
    ]

- NumbersOrdinalTens: [
        "", "sepuluh", "dua puluh", "tiga puluh", "empat puluh", "lima puluh", "enam puluh", "tujuh puluh", "delapan puluh", "sembilan puluh"
    ]

- NumbersOrdinalPluralTens: [
        "", "persepuluh", "dua puluh", "tiga puluh", "empat puluh", "lima puluh", "enam puluh", "tujuh puluh", "delapan puluh", "sembilan puluh"
    ]


- NumbersHundreds: [
      "", "seratus", "dua ratus", "tiga ratus", "empat ratus", "lima ratus",
        "enam ratus", "tujuh ratus", "delapan ratus", "sembilan ratus"
    ]

- NumbersOrdinalHundreds: [
      "", "seratus", "dua ratus", "tiga ratus", "empat ratus", "lima ratus",
        "enam ratus", "tujuh ratus", "delapan ratus", "sembilan ratus"
    ]

- NumbersOrdinalPluralHundreds: [
      "", "seratus", "dua ratus", "tiga ratus", "empat ratus", "lima ratus",
        "enam ratus", "tujuh ratus", "delapan ratus", "sembilan ratus"
    ]
      

    # At this point, hopefully the language is regular. If not, code needs to be written
- NumbersLarge: [
        "", "ribu", "juta", "miliar", "triliun", "kuadriliun",
        "kuintiliun", "sekstiliun", "septiliun", "oktiliun", "noniliun"
    ]
      
- NumbersOrdinalLarge: [
        "", "ribu", "juta", "miliar", "triliun", "kuadriliun",
        "kuintiliun", "sekstiliun", "septiliun", "oktiliun", "noniliun"
    ]
      
- NumbersOrdinalPluralLarge: [
        "", "ribu", "juta", "miliar", "triliun", "kuadriliun",
        "kuintiliun", "sekstiliun", "septiliun", "oktiliun", "noniliun"
    ]