# Attributes and dot patterns for the printable ASCII characters
#
#  Copyright (C) 2008 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/>.

# Attributes and dot patterns for the printable ASCII characters

space \t 0 tab            #  9
space \x000A 0
space \x000D 0
space \x2002 0		EN SPACE
space \x2003 0		EM SPACE
space \x2004 0		THREE-PER-EM SPACE
space \x2005 0		FOUR-PER-EM SPACE
space \x2006 0		SIX-PER-EM SPACE
space \x2007 0		FIGURE SPACE
space \x2008 0		PUNCTUATION SPACE
space \x2009 0		THIN SPACE
space \x200a 0		HAIR SPACE
space \x202f 0		NARROW NO-BREAK SPACE
space \x205f 0		MEDIUM MATHEMATICAL SPACE
space \s 0 blank					# 32
punctuation ! 2346				# 33
punctuation " 5						# 34
sign # 3456								# 35
sign $ 1246								# 36
sign % 146								# 37
sign & 12346							# 38
punctuation ' 3						# 39 apostrophe
punctuation ( 2356				# 40
punctuation ) 2356				# 41

sign * 16									# 42
math + 346								# 43
punctuation , 6						# 44
punctuation - 36					# 45
punctuation . 256					# 256
punctuation / 34									# 47
include loweredDigits6Dots.uti
punctuation : 156					# 58
punctuation ; 56					# 59
math < 126								# 60
math = 123456							# 61
math > 345								# 62
punctuation ? 1456				# 63
sign @ 2346								# 64

include latinLetterDef6Dots.uti

punctuation [ 2467				# 91
sign \\ 12567							# 92
punctuation ] 124567			# 93
sign ^ 457								# 94 circumflex accent
sign _ 456								# 95 underscore
sign ` 4									# 96 grave accent
# a - z										# 97 - 122
punctuation { 246					# 123
sign | 1256								# 124
punctuation } 12456				# 125
math ~ 45									# 126

space \X00A0 0						# 160 no-break space
sign \x00A2 4-14					# 162 ¢ cents sign
sign \x00A3 4-123					# 163 £ pounds sign

sign \x00A5 4-13456				#	165 ¥ yen sign

sign § 4-234-3						# 167 section sign \x00A7

sign \x00A9 2356-6-14-2356 # 169	© copyright sign

punctuation \x00Ad 36-36			# 173	  soft hyphen

sign \x00B0 356						# 176	  ° degrees sign
sign \x00B4 3 						# 180 ´ accute accent !!!! used for apostrophe override
sign \x00B5 46-134				# 181		µ micro sign
sign \x00B6 4-1234-345		#	182	  ¶ pilcrow sign

sign \x00BC 3456-1-256 #Quarter
sign \x00BD 3456-1-23 #Half

math \x00D7 56-236				# 215		× multiplication sign

math \x00F7 56-256				# 247		÷ division sign

punctuation \x2010 36-36			# 8208  hyphen
punctuation \x2013 36-36		# 8211	en dash
punctuation \x2014 36-36		# 8212	em dash
punctuation – 36-36		# 150	En dash


punctuation	\x2018 6-236			# 8216	smart single left quotation mark
punctuation	\x2019 356-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

sign \x20AC 4-15					# 8364 Euro sign

