# liblouis: Korean (Base table and chars)
#
# Based on the braille contraction table in BRLTTY
#
#  Copyright (C) 1995-2012 by The BRLTTY Team.
#  Copyright (C) 2012 by Samuel Thibault <samuel.thibault@ens-lyon.org>
#  Copyright (C) 2012 by Mesar Hameed <mesar.hameed@gmail.com>
#  Copyright (C) 2013 by Joseph Lee <joseph.lee22590@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 is missing CHITUEUM*, CEONGCHIEUMSIOS, PANSIOS, YESIEUNG, RINHIEUH and
# ARAEA for which I couldn't find documentation.  Please contact me to fix
# anything, as this table was generated from a C program.

## Comments:

# There are three files that are needed for displaying Korean chars:

# ko.cti, which contains punctuations, numbers and Unicode sign
# opcodes for Korean (Hangul) chars. This file also includes Korean
# dot/char patterns which are not affected by grade 1 and grade 2
# rules - that is, entries which are common to grade 1 and grade 2.
# The "universal" entries fixes an issue where some Korean conscenant
# dot patterns were confused with litdigit (although in the table, I
# put after digit), which was a concern raised by a number of Korean
# braille readers. For example, the conscenant dots fpr "ni-eun" is
# dots 14, which are same as number 3.

# ko-g1.ctb, uncontracted Korean table. Includes har/dot pairs used in
# Grade 1 rules. Mostly deals with "after digit" situations.

# ko-g2.ctb, contracted Korean braille. Includes same chars as ko1.ctb
# which has different dot patterns in grade 2. These are shorthands
# for uncontracted chars. Also includes certain strings which must be
# uncontracted and a number of multi-char ones which has shorthand dot
# patterns.

# As for the structure of the files: ko.cti is the base table from
# which ko-g1.ctb and ko-g2.ctb derives. Thus, unlike other tables,
# ko-g2.ctb does not include ko-g1.ctb. This would help me extend the
# table without major modifications - all I need to do is categorize
# whether an entry is universal or grade-specific, then add the
# entries in the appropriate file (if it is universal, then ko.cti
# will be modified; if it is grade-specific, ko-g1 or ko-g2 will be
# modified).

# Globals (used for punctuations and others):

include chardefs.cti All character definition opcodes
include braille-patterns.cti

# Braille indicators
numsign 3456  number sign, just a dots operand
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
begemphword italic 46-3
endemphword italic 46-36
emphletter italic 46-25
begemphphrase bold 456-456
endemphphrase bold before 456
lenemphphrase bold 4
begcomp 456-346
endcomp 456-156

# literary forms of the decimal digits
include litdigits6Dots.uti

# Letters are defined in chardefs.cti

# punctuation
prepunc ( 36
word ( 36
always ( 36
postpunc ) 36
word ) 36
always ) 36
prepunc " 236
postpunc " 356
word " 236
prepunc ` 236
prepunc ' 6-236
postpunc ' 356-3
word ' 4-3
word 'em = 
word 'tis =
word 'twas =
begnum # 3456 print number sign before number
midnum , 5
postpunc , 5
word , 5
always , 5
decpoint . 3
midnum - 36
hyphen - 36
always \s--\s 36-36
always \s-\s 36-36
midnum \x00ad 36
postpunc . 256
word . 256
always . 256
postpunc ; 56-23
word ; 56-23
midnum : 5-2
postpunc : 5-2
always : 5-2
postpunc ! 456
always ! 456
midnum / 456-34
always / 456-34
always < 5-13
always = 25-25
always > 46-2
always + 5-235
postpunc ? 236
word ? 236
always ? 236
endnum st 34
endnum nd 1345-145
endnum rd 1235-145
endnum 's 3-234
endnum th 1456
endnum 's 3-234
always % 356-1234
midnum ^ 45
always ^ 456-126
always ~ 36-36
always & 4-12346
midnum * 5-23
always * 35-35
prepunc [ 236-3
word [ 236-3
always [ 236-3
postpunc ] 6-356
word ] 6-356
always ] 6-356
prepunc { 236-23
word { 236-23
always { 236-23
postpunc } 56-356
word } 56-356
always } 56-356
always @ 4-1
always \\ 4-1256
always | 456-1256
always \s-\s 36
always ..." 5-5-5-356
always … 5-5-5
always ... 5-5-5
always ...' 5-5-5-356-3
repeated .... 0
repeated ____ 6-36-36-3
repeated ---- 36
always .\s.\s." 3-3-3-356
always .\s.\s. 3-3-3 . . .
begnum $ 256
always $ 4-256
always _ 6-36-36-3
always — 56-36-36-23

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

noback context "\e"$a *
always \\_ 56 letter sign before Roman page numbers
noback pass2 @56-56 @56
noback pass2 @3-56 @3


#Korean section:

#Detect English:
letsign 356

#Basic letter patterns (to be used in G1 and G2):
include ko-chars.cti


# For grade 1 and grade 2 rules not discussed here, see ko-g1.ctb and ko-g2.ctb.
