# 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
space \x00a0 a
include spaces.uti

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

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

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
