# Liblouis: Persian 8 dot computer Braille table
#
# Copyright (C) 2017 by Mohammadreza Rashad <mohammadreza5712@gmail.com>
#
#  This file is part of liblouis.
#
#  liblouis is free software: you can redistribute it and/or modify it
#  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.
#
#  liblouis is distributed in the hope that it will be useful, but
#  WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
#  Lesser General Public License for more details.
#
#  You should have received a copy of the GNU Lesser General Public
#  License along with liblouis. If not, see
#  <http://www.gnu.org/licenses/>.

space \t 67 tab
space \s 0 blank
space \x00a0 a unbreakable space
sign \x000a 78 newline
space \x000d 0 carriage return
sign \x200C 68 (نیم‌فاصله)

# Persian alphabets and diacritics 

sign \x0621 3 (ء)
sign \x0622 345 (آ)
sign \x0623 34 (أ)
sign \x0624 1256 (ؤ)
sign \x0625 347 (إ)
sign \x0626 13456 (ئ)
sign \x0627 1 (ا)
sign \x0628 12 (ب)
sign \x067E 1234 (پ)
sign \x0629 16 (ة)
sign \x062A 2345 (ت)
sign \x062B 1456 (ث)
sign \x062C 245 (ج)
sign \x0686 14 (چ)
sign \x062D 156 (ح)
sign \x062E 1346 (خ)
sign \x062F 145 (د)
sign \x0630 2346 (ذ)
sign \x0631 1235 (ر)
sign \x0632 1356 (ز)
sign \x0698 346 (ژ)
sign \x0633 234 (س)
sign \x0634 146 (ش)
sign \x0635 12346 (ص)
sign \x0636 1246 (ض)
sign \x0637 23456 (ط)
sign \x0638 123456 (ظ)
sign \x0639 12356 (ع)
sign \x063A 126 (غ)
sign \x0641 124 (ف)
sign \x0642 12345 (ق)
sign \x06A9 13 (ک)
sign \x0643 1378 (ك عربی)
sign \x06AF 1245 (گ)
sign \x0644 123 (ل)
sign \x0645 134 (م)
sign \x0646 1345 (ن)
sign \x0648 2456 (و)
sign \x0647 125 (ه)
sign \x06CC 24 (ی)
sign \x064A 24678 (ي عربی)
sign \x0649 135 (الف مقصوره)
sign \x064E 2 (َ)
sign \x0650 15 (ِ)
sign \x064F 136 (ُ)
sign \x064B 23 (ً)
sign \x064D 35 (ٍ)
sign \x064C 26 (ٌ)
sign \x0651 6 (ّ)
sign \x0652 25 (ْ)
sign \x0640 4567 (ـ)

# Persian Numerals

digit \x06F0 24578 (۰)
digit \x06F1 178 (۱)
digit \x06F2 1278 (۲)
digit \x06F3 1478 (۳)
digit \x06F4 14578 (۴)
digit \x06F5 1578 (۵)
digit \x06F6 12478 (۶)
digit \x06F7 124578 (۷)
digit \x06F8 12578 (۸)
digit \x06F9 2478 (۹)

# English letters

uplow Aa 17,18
uplow Bb 127,128
uplow Cc 147,148
uplow Dd 1457,1458
uplow Ee 157,158
uplow Ff 1247,1248
uplow Gg 12457,12458
uplow Hh 1257,1258
uplow Ii 247,248
uplow Jj 2457,2458
uplow Kk 137,138
uplow Ll 1237,1238
uplow Mm 1347,1348
uplow Nn 13457,13458
uplow Oo 1357,1358
uplow Pp 12347,12348
uplow Qq 123457,123458
uplow Rr 12357,12358
uplow Ss 2347,2348
uplow Tt 23457,23458
uplow Uu 1367,1368
uplow Vv 12367,12368
uplow Ww 24567,24568
uplow Xx 13467,13468
uplow Yy 134567,134568
uplow Zz 13567,13568

# Latin numerals

digit 0 35678
digit 1 278
digit 2 2378
digit 3 2578
digit 4 25678
digit 5 2678
digit 6 23578
digit 7 235678
digit 8 23678
digit 9 3578

# Other symbols

punctuation \x0021 235 (!)
sign \x0022 58 (")
sign \x0023 3456 (#)
sign \x0024 124678 ($)
math \x0025 1468 (%)
sign \x0026 123468 (&)
sign \x0027 38 (')
sign \x0028 23567 (()
sign \x0029 23568 ())
sign \x002A 168 (*)
math \x002B 2358 (+)
punctuation \x002C 28 (,)
sign \x002D 36 (-)
punctuation \x002E 256 (.)
math \x002F 348 (/)
punctuation \x003A 258 (:)
punctuation \x003B 238 (;)
math \x003C 1268 (<)
math \x003D 2356 (=)
math \x003E 3458 (>)
punctuation \x003F 14568 (?)
sign \x0040 47 (@)
punctuation \x005B 123567 ([)
sign \x005C 12568 (\)
punctuation \x005D 234568 (])
sign \x005E 457 (^)
sign \x005F 456 (_)
sign \x0060 48 (`)
sign \x007B 2468 ({)
sign \x007C 4568 (|)
sign \x007D 124568 (})
math \x007E 458 (~)
sign \x00A2 14678 (¢)
sign \x00A3 12378 (£)
sign \x00A5 1345678 (¥)
sign \x00A6 1567 (¦)
sign \x00A7 12345678 (§)
sign \x00A9 134678 (©)
punctuation \x00AB 236 («)
math \x00AC 134578 (¬)
sign \x00AE 234578 (®)
math \x00B0 34568 (°)
math \x00B1 34678 (±)
punctuation \x00BB 356 (»)
sign \x00B6 45678 (¶)
math \x00D7 2368 (×)
math \x00F7 2568 (÷)
punctuation \x060C 27 (،)
punctuation \x061B 237 (؛)
punctuation \x061F 14567 (؟)
math \x066A 1467 (٪)
math \x066B 5 (٫)
math \x066C 37 (٬)
sign \x2010 367 (‐)
sign \x201C 378 (“)
sign \x201D 678 (”)
sign \x2022 2467 (•)
sign \x2026 468 (…)
sign \x2030 145678 (‰)
sign \x20AC 13678 (€)
math \x2212 368 (−)
sign \x25E6 358 (◦)
sign \x25FE 3568 (◾)
sign \xFDFC 123578 (﷼)
noback sign \X25CF 168 (●) # 9679 black circle
