# liblouis: Portuguese Grade 1 Braille Table
#
# -----------
#-index-name: Portuguese, uncontracted
#-display-name: Portuguese uncontracted braille
#
#+locale:pt
#+type:literary
#+contraction:no
#+grade:1
#
# TODO: Please correct the metadata above. It is not meant to be
# accurate nor complete. It hasn't been verified by the table
# author yet. It is merely an attempt by the liblouis maintainers
# to get some sensible initial values in place.
#
# TODO: Please add a reference to official documentation about
# the implemented braille code. Preferably submit the documents
# to https://github.com/liblouis/braille-specs.
# -----------
#
#  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>.

space \x00a0 a
include spaces.uti
include text_nabcc.dis

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

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
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 
include digits6Dots.uti # Must come after letters.
include litdigits6Dots.uti # Must come after letters.

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

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

