#
#  Copyright (C) 2011 by Peter Engström <peter.engstrom@indexbraille.com>
#  Copyright (C) 2011 by Monk Jeremiah, Manastir Decani <visokidecani@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 3 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/>.
#
# -----------------------------------------------------------------------------
#
# 	SERBIAN
#	=======
# 	Authors:	Peter Engström, Index Braille <peter.engstrom@indexbraille.com>
#				Monk Jeremiah, Manastir Decani <visokidecani@gmail.com>
#
# 	Date: 		Note:
#	2011-03-28	Initial release
#	2011-04-04	Added more signs.
#	2015-08-28	Additions and fixes by Zvonimir Stanecic
#
#---------------------------------------------------------------------------------------

space \x00a0 a
include spaces.uti

#--------------------- ALL CHARS DEFINITIONS -------------------------------------------

punctuation ! 235					# EXCLAMATION MARK
punctuation • 3					# BULET
sign + 235							# PLUS SIGN
midnum + 235						# PLUS SIGN
punctuation ? 26					# QUESTION MARK
punctuation . 256					# FULL STOP
sign \x2026 3-3-3					# HORIZONTAL ELLIPSIS
punctuation , 2						# COMMA
punctuation ;	23					# SEMICOLON
punctuation : 25					# COLON
punctuation ­ 36
punctuation - 36					# HYPHEN-MINUS
punctuation ' 3	  					# APOSTROPHE
punctuation *	35					# ASTERISK
sign / 34							# SOLIDUS
sign \\ 16							# REVERSE SOLIDUS
punctuation ( 2356					# LEFT PARENTESIS
punctuation ) 2356					# RIGHT PARENTESIS
punctuation " 2356					# QUOTATION MARK
punctuation ” 356					# RIGHT QUOTATION MARK
punctuation – 36					# EM DASH
punctuation \x201E 236				# DOUBLE LOW-9 QUOTATION MARK
punctuation \x201C 356				# LEFT DOUBLE QUOTATION MARK




sign # 3456							# NUMBER SIGN
sign $ 256							# DOLLAR SIGN
sign & 4-12346						# AMPERSAND
sign < 5-246						# LESS-THAN SIGN
sign = 2356							# EQUAL SIGN
sign > 135-2						# GREATER-THAN SIGN
sign @ 345							# COMMERCIAL AT
punctuation [ 2356-3				# LEFT SQUARE BRACKET
punctuation ] 6-2356				# RIGHT SQUARE BRACKET
sign ^ 56							# CIRCUMFLEX ACCENT
sign _ 6-36							# LOW LINE (UNDERSCORE)
sign ` 4							# GRAVE ACCENT
punctuation { 2356-23				# LEFT CURLY BRACKET
sign | 4-123						# VERTICAL LINE
punctuation } 56-2356				# RIGHT CURLY BRACKET
sign ~ 56							# TILDE
sign € 26							# EURO
sign \x00A2 4						# CENT SIGN
sign \x00A3 6-123					# POUND SIGN
sign \x00A4 2356-1236-2356			# CURRENCY SIGN
sign \x00A7 346						# PARAGRAPH SIGN
sign \x00A9 12356-14-23456			# COPYRIGHT
punctuation \x00AB 2346-14-3		# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
sign \x00B0 356						# DEGREE SIGN
sign % 3456-245-356					# PERCENT SIGN
sign \x2030	3456-245-356-356		# PER MILL SIGN
sign \x00B2 34-23					# SUPERSCRIPT 2 SIGN
sign \x00B3 34-25					# SUPERSCRIPT 3 SIGN
sign \x00B9 34-2					# SUPERSCRIPT 1 SIGN
punctuation \x00BB 6-2356-2356		# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
sign \x00BC 3456-1-1256-145			# VULGAR FRACTION ONE QUARTER
sign \x00BD 3456-1-1256-12			# VULGAR FRACTION ONE HALF
sign \x00BE 3456-14-1256-145		# VULGAR FRACTION 3 QUARTERS
math \x00D7 56-36 					# MULTIPLICATION SIGN
math \x00F7 1256 					# DIVISION SIGN

#------------- NOT ASSIGNED ---------------------------------- 
#sign \x00A5 45-13456					# YEN SIGN
#sign \x00B4 1256						# ACUTE ACCENT
#sign \x00B5 46-134						# µ MICRO SIGN
#sign \x00B6 4-1234-345					# ¶ PILCROW SIGN
#uplow	\x00D3\x00F3 346				# LATIN CAPITAL LETTER O WITH ACUTE


include latinLetterDef6Dots.uti

include digits6Dots.uti # Must come after letters.
include litdigits6Dots.uti # Must come after letters.

uplow \x010C\x010D 16				# LATIN LETTER C WITH CARON
uplow \x0106\x0107 146				# LATIN LETTER C WITH ACUTE
uplow \x0110\x0111 1456				# LATIN LETTER D WITH STROKE
uplow \x0160\x0161 156				# LATIN LETTER S WITH CARON
uplow \x017D\x017E 2346				# LATIN LETTER Z WITH CARON
uplow \x008E\x009E 2346				# LATIN LETTER Z WITH CARON (ASCII)


#uplow \x00C0\x00E0 				# LATIN LETTER A WITH GRAVE
#uplow \x00C8\x00E8 				# LATIN LETTER E WITH GRAVE
#uplow \x00C9\x00E9 				# LATIN LETTER E WITH ACUTE
#uplow \x00CC\x00EC 				# LATIN LETTER I WITH GRAVE
#uplow \x00D2\x00F2 				# LATIN LETTER O WITH GRAVE
#uplow \x00DA\x00FA 				# LATIN LETTER U WITH ACUTE


#-------- SERBIAN CYRILLIC LETTERS -----------------------------------------------------


uplow \x0410\x0430 1				# CYRILLIC LETTER A
uplow \x0411\x0431 12				# CYRILLIC LETTER BE
uplow \x0426\x0446 14				# CYRILLIC LETTER TSE
uplow \x0427\x0447 16				# CYRILLIC LETTER CHE
uplow \x040B\x045B 146				# CYRILLIC LETTER TSHE
uplow \x0414\x0434 145				# CYRILLIC LETTER DE
uplow \x040F\x045F 12456			# CYRILLIC LETTER DZHE
uplow \x0402\x0452 1456				# CYRILLIC LETTER DJE
uplow \x0415\x0435 15				# CYRILLIC LETTER IE
uplow \x0424\x0444 124				# CYRILLIC LETTER EF
uplow \x0413\x0433 1245				# CYRILLIC LETTER GHE
uplow \x0425\x0445 125				# CYRILLIC LETTER HA
uplow \x0418\x0438 24				# CYRILLIC LETTER I
uplow \x0408\x0458 245				# CYRILLIC LETTER JE
uplow \x041A\x043A 13				# CYRILLIC LETTER KA
uplow \x041B\x043B 123				# CYRILLIC LETTER EL
uplow \x0409\x0459 126				# CYRILLIC LETTER LJE
uplow \x041C\x043C 134				# CYRILLIC LETTER EM
uplow \x041D\x043D 1345				# CYRILLIC LETTER EN
uplow \x040A\x045A 1246				# CYRILLIC LETTER NJE
uplow \x041E\x043E 135				# CYRILLIC LETTER O
uplow \x041F\x043F 1234				# CYRILLIC LETTER PE
uplow \x0420\x0440 1235				# CYRILLIC LETTER ER
uplow \x0421\x0441 234				# CYRILLIC LETTER ES
uplow \x0428\x0448 156				# CYRILLIC LETTER SHA
uplow \x0422\x0442 2345				# CYRILLIC LETTER TE
uplow \x0423\x0443 136				# CYRILLIC LETTER U
uplow \x0412\x0432 1236				# CYRILLIC LETTER VE
uplow \x0417\x0437 1356				# CYRILLIC LETTER ZE
uplow \x0416\x0436 2346				# CYRILLIC LETTER ZHE


#uplow \x0419\x0439 12346			# CYRILLIC LETTER SHORT I
#uplow \x0429\x0449 1346			# CYRILLIC LETTER SHCHA
#uplow \x042A\x044A 12356			# CYRILLIC LETTER HARD SIGN
#uplow \x042B\x044B 2346			# CYRILLIC LETTER YERU
#uplow \x042C\x044C 23456			# CYRILLIC LETTER SOFT SIGN
#uplow \x042D\x044D 246				# CYRILLIC LETTER E
#uplow \x042E\x044E 1256			# CYRILLIC LETTER YU
#uplow \x042F\x044F 1246 			# CYRILLIC LETTER YA
#uplow \x0401\x0451 16 				# CYRILLIC LETTER IO

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