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

punctuation ! 5					# 33
punctuation " 4					# 34
sign # 3456							# 35
sign $ 46								# 36
sign % 123456						% 37
sign & 12346						# 38
punctuation ' 6					# 39 apostrophe
punctuation ( 236				# 40
punctuation ) 356				# 41
sign * 35								# 42 asterisk
math + 235							# 43
punctuation , 2					# 44 comma
punctuation - 36				# 45 hyphen minus
punctuation . 3					# 46
math / 256							# 47

include digits6DotsPlusDot6.uti

punctuation : 25				# 58
punctuation ; 23				# 59
math < 56								# 60
math = 2356							# 61
math > 45								# 62
punctuation ? 26				# 63
sign @ 345							# 64

include latinLetterDef6Dots.uti

punctuation [ 123567					# 91
sign \\ 347										# 92 backslash
punctuation ] 234567					# 93
sign ^ 23467									# 94 circumflex accent
sign _ 456										# 95 underscore
sign ` 3458										# 96 grave accent

# a - z												# 97 - 122

punctuation { 12356						# 123
sign | 34											# 124 vertical line
punctuation } 23456						# 125
math ~ 2346										# 126

sign \x00A2 4-14						# ¢ cents sign
sign \x00A3 4-123						# £ pounds sign
sign \x00A5 4-13456					#	¥ yen sign
sign \x00A7 356							# § section sign
sign \x00A9 2356-46-14-2356 # 169				© copyright sign
punctuation \x00Ad 36				# 173				soft hyphen
sign \x00B0 4-356						# 176				° degrees sign
sign \x00B5 46-134					# 181				µ micro sign
sign \x00B6 346							#						¶ pilcrow sign
math \x00D7 4-236						#						× multiplication sign
math \x00F7 4-256						#						÷ division sign

punctuation \x2010 36					# 8208			hyphen
punctuation \x2013 56-36			# 8211			en dash
punctuation \x2014 6-36				# 8212			em dash
punctuation	\x2018 6-236			# 8216			smart single left quotation mark
punctuation	\x2019 6-356			# 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						# 9679			black circle




















