# liblouis: Italiano
#
#  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/>.

include text_nabcc.dis

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

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

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

include digits6Dots.uti

punctuation : 25			colon					58		x003A
punctuation ;	23			semicolon			59		x003B
math < 56														60		x003C
math = 2356						equal sign		61		x003D
math > 45														62		x003E
punctuation ? 26										63		x003F
sign @ 345						commercial at	64		x0040

include latinLetterDef6Dots.uti
punctuation [ 12356			91
sign \\ 6								92
punctuation ] 23456			93
sign ^ 2346							94
sign _ 456							95 underscore
sign ` 345							96

# a - z								# 97 - 122							x0061 - x007A

punctuation { 12356			123
sign | 34				124
punctuation } 23456			125
sign ~ 2346			126
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 § 234-234				paragraph	sign														x00A7
sign © 2356-6-14-2356 copyright																	x00A9
punctuation « 236		left-pointing double quotation mark				x00AB
sign ° 356						degree sign																x00B0
sign ² 4-6-126				superscript 2 sign												x00B2
sign ³ 4-6-146				superscript 3 sign												x00B3
sign \x00B4 1256			acute accent
sign \x00B5 46-134		# 181				µ micro sign									x00B5
sign \x00B6 4-1234-345						¶ pilcrow sign								x00B6
sign ¹ 4-6-16					superscript 1 sign												x00B9
punctuation » 356		right-pointing double quotation mark			x00BB
sign ¼ 6-16-34-1456		vulgar fraction one quarter								x00BC
sign ½ 6-16-34-126		vulgar fraction one half									x00BD
sign ¾ 6-126-34-1456	vulgar fraction 3 quarters								x00BE
uplow	\x00D3\x00F3 346
math × 46-16 multiplication sign														hex 0x00d7
math ÷ 46-34 division sign																	hex 0x00f7

uplow	\x0104\x0105 16
uplow \x0106\x0107 146
uplow	\x0118\x0119 156
uplow	\x0141\x0142 126
uplow	\x0143\x0144 1456
uplow \x00C0\x00E0 12356				# a with grave
uplow \x00C8\x00E8 2346				# e with grave
uplow \x00C9\x00E9 123456				# e with acute
uplow \x00CC\x00EC 34				# i with grave above
uplow \x00D2\x00F2 346			# o with grave above
uplow \x00D9\x00F9 23456			# u with grave above

#----------------------------------------------------------------------------
numsign 3456		#	number sign, just one operand
capsletter 46
begcapsword 4-6

repeated *** 16-16-16
prepunc `` 236
prepunc " 236
postpunc " 356

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

repeated ­­­ 36-36-36
always \s­\s 36-36


# mathematical symbols
midnum ­ 36
endnum % 46
# 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
