# liblouis: French Grade 1 table

# Copyright (C) 1995-2004 by The BRLTTY Team. All rights reserved.
# Copyright (C) 2012 Nicolas Pitre <nico@cam.org>

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

# Définitions pour code braille français international unifié
# Par Nicolas Pitre <nico@cam.org>
# Référence: http://www.inlb.qc.ca/apropos/c2003unificationdubraille.aspx

# Uncontracted Unified French Table
# ----------------------------------

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 Çç 12346		c cédille
uplow Éé 123456		e accent aigu
uplow Àà 12356		a accent grave
uplow Èè 2346			e accent grave
uplow Ùù 23456		u accent grave
uplow Ââ 16				a accent circonflexe
uplow Êê 126			e accent circonflexe
uplow Îî 146			i accent circonflexe
uplow Ôô 1456			o accent circonflexe
uplow Ûû 156			u accent circonflexe
uplow Ëë 1246			e tréma
uplow Ïï 12456		i tréma
uplow Üü 1256			u tréma

#	uplow oe 246		oe ligatur
uplow \x0152\x0153 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 " 2356 	guillemt			
punctuation ( 236		parenthèse ouvrante
sign * 35						astérisque
punctuation ) 356		parenthèse fermante
punctuation ' 3			apostrophe
punctuation \x2019 3		apostrophe
math / 34						barre oblique
sign @ 345					arobas
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 + 6-235				plus		
math = 6-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 [ 45-236		crochet droit ouvrant   
punctuation ] 356-12		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 \x00B7 56
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

noback sign \X25CF 35	# 9679 black circle
