# liblouis: Portuguese Grade 1 Braille Table
#
#  Copyright (C) 2004-2008 ViewPlus Technologies, Inc. www.viewplus.com
#  Copyright (C) 2004-2006 JJB Software, Inc. www.jjb-software.com
#  Copyright (C) 2012 Mesar Hameed <mesar.hameed@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/>.

# Created by Leon Ungier <Leon.Ungier@ViewPlus.com>.

locale Portugal

include text_nabcc.dis

#--------------------- All chars definitions ------------------------------

space \t 0 tab            #  9
space \s 0 blank					# 32

punctuation ! 235				exclamation mark	33
punctuation " 236				double quote			34
sign # 3456-13					number sign				35
sign $ 56								dollar						36						x0024
sign % 456-356					percent						37
sign & 12346						ampersand					38
punctuation ' 3					apostrophe				39
punctuation ( 126-3			left parenthesis  40
punctuation ) 6-345			right parenthesis	41
punctuation * 35				asterisk					42
math + 235							plus							43
punctuation , 2					coma							44
punctuation - 36				hyphen-minus			45
punctuation . 3					point							46
math / 6-2							solidus						47
include digits6Dots.uti
punctuation : 25			colon					58		x003A
punctuation ;	23			semicolon			59		x003B
math < 246													60		x003C
math = 2356						equal sign		61		x003D
math > 135													62		x003E
punctuation ? 26										63		x003F
sign @ 156						commercial at	64		x0040

include latinLetterDef6Dots.uti

punctuation [ 12356-3		left square bracket			x005B
sign \\ 5-3							reverse solidus					x005C
punctuation ] 6-23456		right square bracket		x005D
sign ^ 4							circumflex accent				x005E
sign _ 46-36						low line								x005F
sign ` 26								grave accent						x0060

# a - z								# 97 - 122							x0061 - x007A

punctuation { 5-123		left curly bracket			x007B
sign | 456						vertical line						x007C
punctuation } 456-2		right curly bracket			x007D
sign ~ 5						tilde										x007E
sign \x0080 15-136-1235-135										x0080

space \X00A0 0				# no-break space													x00A0
sign ¢ 4-14						cent sign																	x00A2
sign £ 4-123					pound sign																x00A3
sign ¤ 45-15					currency sign															x00A4
sign ¥ 45-13456				yen	sign																	x00A5
sign § 234-234				paragraph	sign														x00A7
sign © 6-14-135-1234-13456-1235-24-1245-125-2345		copyright		x00A9
sign \x00AA 1					feminine ordinal indicator
punctuation « 6-236		left-pointing double quotation mark			x00AB
sign ° 356						degree sign																x00B0
sign ² 16-3456-12				superscript 2 sign												x00B2
sign ³ 16-3456-14				superscript 3 sign												x00B3
# sign \x00B4 35			acute accent
sign \x00B4 35					acute accent
sign \x00B5 46-134		# 181				µ micro sign									x00B5
sign \x00B6 346				#						¶ pilcrow sign								x00B6
sign ¹ 16-3456-1					superscript 1 sign												x00B9
sign \x00BA 135				masculine ordinal indicator
punctuation » 6-236		right-pointing double quotation mark		x00BB
sign ¼ 3456-2-145			vulgar fraction one quarter								x00BC
sign ½ 3456-2-12			vulgar fraction one half									x00BD
sign ¾ 3456-25-145		vulgar fraction 3 quarters				x00BE

uplow \x00C0\x00E0 1246			a with grave						x00C0 / 00E0
uplow Áá 12356							A with acute						x00C1 / 00E1
uplow Ââ 16									a with circumflex				x00C2 / 00E2
uplow \x00C3\x00E3 345			a with tilde						x00C3 / 00E3
uplow Åå 16									A with ring above				x00C5 / 00C4
uplow Ää 345								A with diaeresis				x00C4 / 00E4
uplow Çç 12346							letter c with cedilla		x00C7 / 00E7
uplow \x00C8\x00E8 2346		e with grave è					x00C8 / 00E8
uplow \x00C9\x00E9 123456		e with acute é					x00C9 / 00E9
uplow \x00CA\x00EA 126			e with circumflex				x00CA /	00EA
uplow \x00CC\x00EC 146				i with grave						x00CC	/ 00EC
uplow \x00CD\x00ED 34				i with acute						x00CD	/ 00ED
uplow \x00D2\x00F2 2456			o with grave ò					x00D2 / 00F2
uplow \x00D3\x00F3 346			o with acute ó					x00D3 / 00F3
uplow \x00D4\x00F4 1456			o with circumflex ô			x00D4 / 00F4
uplow \x00D5\x00F5 246			o with tilde						x00D5 / 00F5
uplow Öö 246								O with diaeresis				x00D6 / 00F6
uplow \X00DA\x00FA 23456		u with acute						x00DA / 00FA
uplow \x00DC\x00FC 1256			u with diaeresis				x00FC

uplow \x00D1\x00F1 12456			n with tilde


math ÷ 256			division sign															x00F7
math × 236			multiplication sign												x00D7

# this is for compiler
uplow \x0104\x0105 6			# a with ogonek
uplow \x0118\x0119 3456		# the letter e with ogonek


punctuation	\x2010 36						# 8208			hyphen
punctuation	\x2011 36						# 8209			non-breaking hyphen
punctuation	\x2012 36												figure dash
math	\x2013 36						# 8211			en dash (smart minus sign)
punctuation	\x2013 36-36				# 8211			en dash (smart minus sign)
punctuation	\x2014 36-36										em dash
sign \x2015 4-14														horizontal bar
punctuation	\x2018 56-236						# 8216			smart single left quotation mark
punctuation	\x2019 56-236						# 8217			smart single right quotation mark
sign \x20AC 4-15														Euro sign				x0080
punctuation	\x201C 56-236					# 8220			smart opening double quote
punctuation	\x201D 56-236					# 8221			smart closing double quote
punctuation	\x201E 56-236					# 8222			smart double low quotation mark
punctuation	\x201F 56-236					# 8223			double high reverse quotation mark

sign \x2022 246-135											bullet
punctuation \x2026 35-26-35	# 8230	smart ellipsis
sign \x2030 456-356-356									per mile sign
sign \x2190	246-25											leftwards arrow
sign \x2192 25-135											rightwards arrow
sign \x2194 246-25-135									left right arrow
sign \x2260 45-2356											not equal to
#-------------- end defintions ------------------------------------------


capsletter 46
# capsword 46-46-136			# uncomment if you don't want capitalization
begcapsword 46-46

emphclass italic
emphclass underline
emphclass bold
begemph italic 35
begemph bold 35
begemph underline 35
endemph italic 35
endemph bold 35
endemph underline 35
begcomp 5-2
endcomp 5-2

begnum ( 126
endnum ) 345
begnum [ 12356
endnum ] 23456
endnum \x00AA 1
endnum \x00BA 135
numsign 3456
midnum , 2
midnum . 3
midnum + 235-3456
midnum - 36-3456
midnum / 6-2-3456
midnum : 25-3456

endnum # 56-3456

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

always \s--\s 36-36	tiret

