# liblouis: Polish 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 & maintained by Leon Ungier <Leon.Ungier@ViewPlus.com>.

include text_nabcc.dis

# ----------- define all chars --------------------------------------

space \t 0 tab						#  9
space \x000A 0
space \x000D 0
space \s 0 blank					# 32
punctuation ! 235			exclamation sign   						x0021
punctuation " 356			double quote									x0022
sign # 3456						number sign										x0023
sign $ 256						dollar sign										x0024
sign % 4-356					percent sign									x0025
sign & 456-12346			ampersand											z0026
punctuation ' 3				apostrophe										x0027
punctuation ( 2356			left parenthesis						x0028
punctuation ) 2356			right parenthesis						x0029
sign * 35-35						asterisk										x002A
math + 235							plus												002B
punctuation , 2					coma												002C
punctuation - 36				hyphen-minus								002D
punctuation . 3					point												002E
math / 456-34						solidus											002F

include digits6Dots.uti

punctuation : 25				colon								x003A
punctuation ; 23				semicolon						x003B
punctuation < 5-13			less-than sign			x003C
math = 2356			equal sign					x003D
math > 46-2			greater-than sign		x003E
punctuation ? 26				question mark				x003F
sign @ 4-1			commercial at				x0040

include latinLetterDef6Dots.uti

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

# a - z								# 97 - 122								x0061-x007A

punctuation { 246				left curly bracket					x007B
sign | 56					vertical line								x007C
punctuation } 12456			right curly bracket					x007D
math ~ 256				tilde												x007E
sign \x0080 15-136-1235-135										x0080

space \X00A0 0		no-break space																x00A0
sign ¢ 4-14				cent sign																			x00A2
sign £ 45-123			pound sign																		x00A3
sign ¤ 45-15			currency sign																	x00A4
sign ¥ 45-13456		yen	sign																			x00A5
sign § 346				section sign																	x00A7
sign © 2356-6-14-2356		copyright																x00A9
punctuation « 236				left-pointing double angle quotation 		x00AB
punctuation \x00AD 36 soft hyphen
sign ° 4-356			degree sign																		x00B0
sign ² 4-6-126		superscript 2 sign														x00B2
sign ³ 4-6-146		superscript 3 sign														x00B3
sign µ 46-134			micro sign																		x00B5
sign ¶ 4-1234-345 pilcrow sign (paragraph)											x00B6
sign ¹ 1-27				superscript 1 sign														x00B9
punctuation » 356			right-pointing double angle quotation		x00BB
math ¼ 6-16-34-1456		vulgar fraction one quarter								x00BC
math ½ 6-16-34-126		vulgar fraction one half									x00BD
math ¾ 6-126-34-1456	vulgar fraction 3 quarters								x00BE

uplow \x00C0\x00E0 12356	letter a with grave							x00C0 / 00E0
uplow \x00C1\x00E1 12356			letter a with acute									x00E1
uplow \x00C2\x00E2 16					letter a with circumflex						x00E2
uplow \x00C3\x00E3 126		letter a with tilde											x00E3
uplow Ää 345				A with diaeresis											x00C4 / 00E4
uplow Åå 16					A with ring above											x00C5 / 00E5
uplow \x00C6\x00E6 6-345	ae															x00C6
uplow Çç 12346			letter c with cedilla									x00C7 / 00E7
uplow Èè 2346				e with grave													x00C8 / 00E8
uplow \x00C9\x00E9 123456		e with acute													x00E9
uplow \x00CA\x00EA 126			e with circumflex											x00EA
uplow \x00CB\x00EB 1246		e with diaeresis												x00EB
uplow \x00CD\x00ED 34			i with acute													x00ED
uplow \x00CE\x00EE 146		i with circumflex											x00EE
uplow \x00CF\x00EF 12456	i with diaeresis								x00CF / 00EF

uplow	\x00D3\x00F3	346 O with acute											x00D3 / 00F3
uplow \x00D4\x00F4 1456	o with circumflex													x00F4
uplow \x00D5\x00F5 246		o with tilde														x00F5
uplow Öö 246						O with diaeresis									x00D6 / 00F6
math × 236				multiplication sign											x00D7
uplow \x00D8\x00F8 246		o with stroke										x00D8 / 00F8

math ÷ 256				division sign										x00F7

uplow \x00DA\x00FA 23456			u with acute							x00DA / 00FA
uplow \x00DB\x00FB 156				u with circumflex					x00FB
uplow \x00DC\x00FC 1256				u with diaeresis					x00FC
uplow \x00DD\x00FD 12346			y with acute							x00DD / 00FD

# the letter a with ogonek -----------------------------------
uplow \x0104\x0105 16

# the letter c with acute
uplow \x0106\x0107 146

# the letter e with ogonek
uplow \x0118\x0119 156

# the letter l with stroke
uplow \x0141\x0142 126

# the letter n with acute
uplow \x0143\x0144 1456

# the letter s	with acute
# always	\x015A	246																	x015A
# always	\x015B	246
uplow \x015A\x015B 246

# the letter z	with acute
# always	\x0179	2346																x0179
# always	\x017A	2346
uplow \x0179\x017A 2346

# the letter z with dot above
# always	\x017B	12346																x017B
# always	\x017C	12346																x017C
uplow \x017B\x017C 12346

punctuation	\x2010 36		 # 8208			hyphen
punctuation	\x2011 36		 # 8209			non-breaking hyphen
punctuation	\x2013 36		 # 8211			smart minus sign
punctuation	\x2018 3		 # 8216			smart single left quotation mark
punctuation	\x2019 3		 # 8217			smart single right quotation mark

punctuation	\x201C 236	 # 8220			smart opening double quote
punctuation	\x201D 356	 # 8221			smart closing double quote
punctuation	\x201E 236	 # 8222			smart double low quotation mark
punctuation	\x201F 356	 # 8223			smart double high reverse quotation mark
punctuation  \x2026 3-3-3 # 8230		smart ellipsis

noback sign \X25CF 35-35	# 9679 black circle

# ------------------------------------------------------


capsletter 46			# single capital letter indicator
begcapsword 4-6			# a block of consecutive capital letters indicator

numsign 3456		#	number sign, just one operand
midnum , 3
midnum . 2
midnum + 235
midnum - 36
midnum / 256
midnum : 25
midnum = 2356

endnum # 56-3456

prepunc " 236
postpunc " 356

prepunc ' 6-236
postpunc ' 356-3
postpunc '' 356
postpunc ''' 356-3-356

repeated *** 16-16-16

prepunc `` 236
prepunc ` 6-236


repeated --- 36-36-36

repeated ___ 46-46-46

repeated ::: 25-25-25
repeated === 46-13-46-13-46-13
repeated ~~~ 4-156-4-156-4-156
always \s-\s 36-36
always \s-\scom 36-36-14-135-134
always ... 3-3-3
always .\s.\s. 3-3-3 . . .

always \s­\s 36-36

# special character sequences
literal :// URLs
literal www.

literal .com
literal .edu
literal .gov
literal .mil
literal .net
literal .org

literal .doc
literal .htm
literal .html
literal .tex
literal .txt

literal .gif
literal .jpg
literal .png
literal .wav

literal .tar
literal .zip
