###############################################################################
# BRLTTY - A background process providing access to the console screen (when in
#          text mode) for a blind person using a refreshable braille display.
#
# Copyright (C) 2008-2023 by The BRLTTY Developers.
#
# BRLTTY comes with ABSOLUTELY NO WARRANTY.
#
# This is free software, placed under the terms of the
# GNU Lesser General Public License, as published by the Free Software
# Foundation; either version 2.1 of the License, or (at your option) any
# later version. Please see the file LICENSE-LGPL for details.
#
# Web Page: http://brltty.app/
#
# This software is maintained by Dave Mielke <dave@mielke.cc>.
###############################################################################

# This BRLTTY text subtable defines the braille representations
# for the Oriya script.

# Maintained by John J. Boyer, director@chpi.org, www.chpi.org
#
# This table is built and maintained by Leon Ungier <Leon.Ungier@ViewPlus.com>
# with help and guidance from Mohammed R. Ramadan <mramadan@nattiq.com>
#
# Converted from liblouis table by Samuel Thibault <samuel.thibault@ens-lyon.org>

# generated by ttbtest:
char \u0B01	(  3     )  # ⠄ ଁ [ORIYA SIGN CANDRABINDU]
char \u0B02	(    56  )  # ⠰ ଂ [ORIYA SIGN ANUSVARA]
char \u0B03	(     6  )  # ⠠ ଃ [ORIYA SIGN VISARGA]
char \u0B05	(1       )  # ⠁ ଅ [ORIYA LETTER A]
char \u0B06	(  345   )  # ⠜ ଆ [ORIYA LETTER AA]
char \u0B07	( 2 4    )  # ⠊ ଇ [ORIYA LETTER I]
char \u0B08	(  3 5   )  # ⠔ ଈ [ORIYA LETTER II]
char \u0B09	(1 3  6  )  # ⠥ ଉ [ORIYA LETTER U]
char \u0B0A	(12  56  )  # ⠳ ଊ [ORIYA LETTER UU]


char \u0B0F	(1   5   )  # ⠑ ଏ [ORIYA LETTER E]
char \u0B10	(  34    )  # ⠌ ଐ [ORIYA LETTER AI]


char \u0B13	(1 3 5   )  # ⠕ ଓ [ORIYA LETTER O]
char \u0B14	( 2 4 6  )  # ⠪ ଔ [ORIYA LETTER AU]
char \u0B15	(1 3     )  # ⠅ କ [ORIYA LETTER KA]
char \u0B16	(   4 6  )  # ⠨ ଖ [ORIYA LETTER KHA]
char \u0B17	(1234    )  # ⠏ ଗ [ORIYA LETTER GA]
char \u0B18	(12   6  )  # ⠣ ଘ [ORIYA LETTER GHA]
char \u0B19	(  34 6  )  # ⠬ ଙ [ORIYA LETTER NGA]
char \u0B1A	(1  4    )  # ⠉ ଚ [ORIYA LETTER CA]
char \u0B1B	(1    6  )  # ⠡ ଛ [ORIYA LETTER CHA]
char \u0B1C	( 2 45   )  # ⠚ ଜ [ORIYA LETTER JA]
char \u0B1D	(  3 56  )  # ⠴ ଝ [ORIYA LETTER JHA]
char \u0B1E	( 2  5   )  # ⠒ ଞ [ORIYA LETTER NYA]
char \u0B1F	( 23456  )  # ⠾ ଟ [ORIYA LETTER TTA]
char \u0B20	( 2 456  )  # ⠺ ଠ [ORIYA LETTER TTHA]
char \u0B21	(12 4 6  )  # ⠫ ଡ [ORIYA LETTER DDA]
char \u0B22	(123456  )  # ⠿ ଢ [ORIYA LETTER DDHA]
char \u0B23	(  3456  )  # ⠼ ଣ [ORIYA LETTER NNA]
char \u0B24	( 2345   )  # ⠞ ତ [ORIYA LETTER TA]
char \u0B25	(1  456  )  # ⠹ ଥ [ORIYA LETTER THA]
char \u0B26	(1  45   )  # ⠙ ଦ [ORIYA LETTER DA]
char \u0B27	( 234 6  )  # ⠮ ଧ [ORIYA LETTER DHA]
char \u0B28	(1 345   )  # ⠝ ନ [ORIYA LETTER NA]

char \u0B2A	(1234    )  # ⠏ ପ [ORIYA LETTER PA]
char \u0B2B	( 23 5   )  # ⠖ ଫ [ORIYA LETTER PHA]
char \u0B2C	(12      )  # ⠃ ବ [ORIYA LETTER BA]
char \u0B2D	(   45   )  # ⠘ ଭ [ORIYA LETTER BHA]
char \u0B2E	(1 34    )  # ⠍ ମ [ORIYA LETTER MA]
char \u0B2F	(1 3456  )  # ⠽ ଯ [ORIYA LETTER YA]
char \u0B30	(123 5   )  # ⠗ ର [ORIYA LETTER RA]

char \u0B32	(123     )  # ⠇ ଲ [ORIYA LETTER LA]
char \u0B33	(123   7 )  # ⡇ ଳ [ORIYA LETTER LLA]

char \u0B35	(123  6  )  # ⠧ ଵ [ORIYA LETTER VA]
char \u0B36	(1  4 6  )  # ⠩ ଶ [ORIYA LETTER SHA]
char \u0B37	(1234 6  )  # ⠯ ଷ [ORIYA LETTER SSA]
char \u0B38	( 234    )  # ⠎ ସ [ORIYA LETTER SA]
char \u0B39	(12  5   )  # ⠓ ହ [ORIYA LETTER HA]
char \u0B3D	( 2      )  # ⠂ ଽ [ORIYA SIGN AVAGRAHA]
char \u0B3E	(  345   )  # ⠜ ା [ORIYA VOWEL SIGN AA]
char \u0B3F	( 2 4    )  # ⠊ ି [ORIYA VOWEL SIGN I]
char \u0B40	(  3 5   )  # ⠔ ୀ [ORIYA VOWEL SIGN II]
char \u0B41	(1 3  6  )  # ⠥ ୁ [ORIYA VOWEL SIGN U]
char \u0B42	(12  56  )  # ⠳ ୂ [ORIYA VOWEL SIGN UU]


char \u0B47	(1   5   )  # ⠑ େ [ORIYA VOWEL SIGN E]
char \u0B48	(  34    )  # ⠌ ୈ [ORIYA VOWEL SIGN AI]


char \u0B4B	(1 3 5   )  # ⠕ ୋ [ORIYA VOWEL SIGN O]
char \u0B4C	( 2 4 6  )  # ⠪ ୌ [ORIYA VOWEL SIGN AU]
char \u0B4D	(   4    )  # ⠈ ୍ [ORIYA SIGN VIRAMA]

char \u0B66	( 2 45   )  # ⠚ ୦ [ORIYA DIGIT ZERO]
char \u0B67	(1       )  # ⠁ ୧ [ORIYA DIGIT ONE]
char \u0B68	(12      )  # ⠃ ୨ [ORIYA DIGIT TWO]
char \u0B69	(1  4    )  # ⠉ ୩ [ORIYA DIGIT THREE]
char \u0B6A	(1  45   )  # ⠙ ୪ [ORIYA DIGIT FOUR]
char \u0B6B	(1   5   )  # ⠑ ୫ [ORIYA DIGIT FIVE]
char \u0B6C	(12 4    )  # ⠋ ୬ [ORIYA DIGIT SIX]
char \u0B6D	(12 45   )  # ⠛ ୭ [ORIYA DIGIT SEVEN]
char \u0B6E	(12  5   )  # ⠓ ୮ [ORIYA DIGIT EIGHT]
char \u0B6F	( 2 4    )  # ⠊ ୯ [ORIYA DIGIT NINE]
