# liblouis: Vietnamese 6 dot braille table
#
# Based on the braille contraction modules in BRLTTY
#
# Copyright (C) 1995-2004 by The BRLTTY Team.
# Copyright (C) 2004 ViewPlus Technologies, Inc., www.viewplustech.com
# Copyright (C) 2004 Computers to Help People, Inc., www.chpi.org
# Copyright (C) 2015 Harri Pasanen <harri@mpaja.com>

# This file 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.

# This file 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 this file; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
# liblouis  comes with ABSOLUTELY NO WARRANTY.

# Created by Harri Pasanen harri@mpaja.com, based on fr-fr-g1.utb

# Vietnamese (UTF-8)

include text_nabcc.dis

space \t 0 tab          # 9
space \x000A 0
space \x000D 0
space \x00A0 0
space \s 0 blank                                # 32

include latinLetterDef6Dots.uti

uplow Đđ 2346  

uplow Áá 35-1          a accent grave
uplow Àà 56-1
uplow Ảả 26-1
uplow Ãã 36-1
uplow Ạạ 6-1
uplow Ăă 345
uplow Ắắ 35-345
uplow Ằằ 56-345
uplow Ẳẳ 26-345
uplow Ẵẵ 36-345
uplow Ặặ 6-345
uplow Ââ 16
uplow Ấấ 35-16
uplow Ầầ 56-16
uplow Ẩẩ 26-16
uplow Ẫẫ 36-16
uplow Ậậ 6-16
uplow Éé 35-15
uplow Èè 56-15
uplow Ẻẻ 26-15
uplow Ẽẽ 36-15
uplow Ẹẹ 6-15
uplow Êê 126
uplow Ếế 35-126
uplow Ềề 56-126
uplow Ểể 26-126
uplow Ễễ 36-126
uplow Ệệ 6-126
uplow Íí 35-24
uplow Ìì 56-24
uplow Ỉỉ 26-24
uplow Ĩĩ 36-24
uplow Ịị 6-24
uplow Óó 35-135
uplow Òò 56-135 
uplow Ỏỏ 26-135 
uplow Õõ 36-135
uplow Ọọ 6-135
uplow Ôô 1456
uplow Ốố 35-1456
uplow Ồồ 56-1456
uplow Ổổ 26-1456
uplow Ỗỗ 36-1456
uplow Ộộ 6-1456
uplow Ơơ 246
uplow Ớớ 35-246
uplow Ờờ 56-246
uplow Ởở 26-246
uplow Ỡỡ 36-246
uplow Ợợ 6-246
uplow Úú 35-136
uplow Ùù 56-136
uplow Ủủ 26-136
uplow Ũũ 36-136
uplow Ụụ 6-136
uplow Ưư 1256
uplow Ứứ 35-1256
uplow Ừừ 56-1256
uplow Ửử 26-1256
uplow Ữữ 36-1256
uplow Ựự 6-1256
uplow Ýý 35-13456
uplow Ỳỳ 56-13456
uplow Ỷỷ 26-13456
uplow Ỹỹ 36-13456
uplow Ỵỵ 6-13456

# TODO: below always list requires completion, not all combinations are yet enumerated
always iế 35-24-126
always iề 56-24-126
always iỂ 26-24-126
always iễ 36-24-126
always iệ 6-24-126
always oá 35-135-1
always oà 56-135-1
always oả 26-135-1
always oã 36-135-1
always oạ 6-135-1
always oắ 35-135-345
always oằ 56-135-345
always oẳ 26-135-345
always oẵ 36-135-345
always oặ 6-135-345
always uấ 35-136-16
always uầ 56-136-16
always uẩ 26-136-16
always uẫ 36-136-16
always uậ 6-136-16
always uế 35-136-126
always uề 56-136-126
always uể 26-136-126
always uễ 36-136-126
always uệ 6-136-126
always uyế 35-136-13456-126
always uyề 56-136-13456-126
always uyể 26-136-13456-126
always uyễ 36-136-13456-126
always uyệ 6-136-13456-126
always ướ 35-1256-246
always ườ 56-1256-246
always ưở 26-1256-246
always ưỡ 36-1256-246
always ượ 6-1256-246

punctuation , 2                 virgule
punctuation ; 23                point-virgule
punctuation : 25                deux-points
punctuation . 256               point
punctuation ? 26                point d'interrogation
punctuation ! 235               point d'exclamation
punctuation " 236      guillemt                        
punctuation " 356      guillemt                        
punctuation ( 2356               parenthèse ouvrante
punctuation ) 2356               parenthèse fermante
punctuation ' 3                 apostrophe
math / 34                                               barre oblique
sign % 346                                      pour cent
punctuation - 36                trait d'union
sign # 3456                                     dièse

# override zero
digit 0 3456
include digits6DotsPlusDot6.uti
litdigit 0 3456
include litdigits6DotsPlusDot6.uti

sign \x00A8 46                  diaeresis sign
math \x00F7 6-256               divisé par
        
math + 5-235                            plus            
math = 5-2356                           égal            
math × 6-35                                     multiplié par
math < 46-126                           inférieur à
math > 46-345                           supérieur à

sign © 5-14                                                     copyright
sign ° 5-135                                            degré
sign & 5-123456                                 perluète (et commercial)
sign ¢ 45-14                                            cent
sign € 45-15                                            euro                         
sign £ 45-123                                           livre                   
sign § 45-1234                                  paragraphe              
sign $ 4-234                                            dollar                  
sign ¥ 45-13456                                 yen                     
punctuation « 45-2356           guillemet français ouvrant  
punctuation » 2356-12           guillemet français fermant  
punctuation [ 46-126            crochet droit ouvrant   
punctuation ] 45-345            crochet droit fermant   
punctuation { 6-236                     accolade de gauche  
punctuation } 356-3                     accolade de droite   

sign ¹ 4-6-16                                           exposant 1                      
sign ² 4-6-126                                  exposant 2      
sign ³ 4-6-146                                  exposant 3
sign ¼ 6-16-34-1456                     un quart        
sign ½ 6-16-34-126                      un demi         
sign ¾ 6-126-34-1456            trois quarts   

capsletter 46                                                              indicateur de majuscule
begcapsword 46-46                                                   succession de majuscules

numsign 3456                                                    préfixe pour les chiffres
midnum \s 3                                                             espace entre les chiffres
midnum , 2
midnum . 256
midnum - 36
midnum + 346                                                    plus
midnum / 34
midnum : 25

sign \x00B8 45
# endnum # 56-3456

sign _ 456                                                              souligné

repeated ... 3-3-3                              points de suite
repeated --- 36-36-36
repeated ___ 456-456-456                                

always \s--\s 36-36     tiret

