# liblouis: Unofficial table used by some for studying classical and biblical Greek.
#
# -----------
#-index-name: Greek, international, English
#-display-name: Greek internationalized braille as used by English speakers
#
#+locale: grc
#+type: literary
#+dots: 6
#+contraction: no
#+direction: forward
#+region: en
#+system: grc-international-en
# ------------
#
#  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>
#  Copyright (C) 2019 Dave Mielke: <dave@mielke.cc>, [http://mielke.cc/]
#  Copyright (C) 2019 Μαρια Γεωργακαράκου <mylarynx@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/>.

# This braille code isn't used in Greece. We're not aware of any official
# documentation for it. It's based on a braille code developed by scholars to
# facilitate their study of classical and biblical Greek. It's possible that
# some people are still using it. Most of the data for this table came from
# Professor Panagiotis Antonopoulos, who was using the code for several years at
# Oxford back around 1980. The table also corresponds with the chapter "Greek
# (International)" on page 185 of
# http://liblouis.org/braille-specs/#world-braille-usage-3rd-edition.

space \t 7 tab
space \x00a0 9 unbreakable space
include spaces.uti

include loweredDigits6Dots.uti
include latinLetterDef6Dots.uti
punctuation , 6
punctuation ; 56
punctuation : 156
punctuation . 46
punctuation ! 2346
punctuation " 5
punctuation ' 3
punctuation ( 12356
punctuation ) 23456
punctuation - 36
sign _ 456
math < 126
math = 123456
math > 345
sign % 146
math + 346
math ~ 45
sign ` 4
sign & 12346
sign $ 1246
punctuation ? 1456
punctuation { 246
punctuation [ 2467
punctuation } 12456
punctuation ] 124567
sign ^ 457
sign @ 47
sign # 3456
sign \\ 12567
sign | 1256
math / 34
sign * 16

punctuation \x2011 36
punctuation \x2014 36-36
punctuation \x2019 3
punctuation \x201c 236
punctuation \x201d 356

# accented letters
letter \x00e9 4-15
letter \x00da 4-136
letter \x00f6 4-135
letter \x00e6 4-15
letter \x00e0 4-1
replace \x0088 # CHARACTER TABULATION SET 
replace \x0089 # CHARACTER TABULATION WITH JUSTIFICATION 
midnum \x0009 46
noback always ? 56
always / 0-456-34-0
always // 0-456-34-34-0

# Braille indicators

numsign 3456  number sign, just a dots operand
multind 56-6 letsign capsletter
capsletter 6
begcapsword 6-6
endcapsword 6-3
emphclass italic
emphclass underline
emphclass bold
begemphphrase italic 46-46
endemphphrase italic before 46
lenemphphrase italic 4
begemphphrase bold 456-456
endemphphrase bold before 456
lenemphphrase bold 4
begcomp 456-346
endcomp 456-156

# the decimal digits
include litdigits6Dots.uti

# Letters are defined in en-chardefs
# punctuation
prepunc ( 2356
postpunc ) 2356
prepunc " 236
postpunc " 356
prepunc ' 6-236
postpunc ' 356-3
word 'em = 
word 'tis =
word 'twas =
begnum # 4 print number sign before number
midnum , 2
postpunc , 2
decpoint . 46
midnum - 36
hyphen - 36
#capsnocont
postpunc . 256
postpunc ; 23
midnum : 25
postpunc : 25
postpunc ! 235
midnum / 34
always / 456-34
always < 5-13
always = 46-13
always > 46-2
postpunc ? 236
endnum % 4-356
midnum ^ 45
always ^ 456-126
always ~ 4-156
always & 456-12346
midnum * 4-16
always * 35-35
always [ 456-12356
always ] 456-23456
always { 6-2356
always } 2356-3
prepunc ` 6-236
always @ 4-1
always \\ 456-16
always | 456-1256
always \s-\s 36-36
always ... 3-3-3
always .\s.\s. 3-3-3 . . .
begnum $ 256
always $ 256-3456

# special character sequences
compbrl :// URLs
compbrl ()
compbrl www.
compbrl .com
compbrl .edu
compbrl .gov
compbrl .mil
compbrl .net
compbrl .org
# include countries.cti
compbrl .doc
compbrl .htm
compbrl .html
compbrl .tex
compbrl .txt
compbrl .gif
compbrl .jpg
compbrl .png
compbrl .wav
compbrl .tar
compbrl .zip

sign	\x00A7	12356-234-23456	# § SECTION SIGN 
sign	\x00A9	12356-14-23456	# © COPYRIGHT SIGN 
sign	\x25CF	12356-16-23456	# ● black circle

include grc-international-decomposed.uti
