# 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 en-chardefs.cti English 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
noback always ( 36
postpunc ) 36
word ) 36
noback 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
noback 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
noback always . 256
postpunc ; 56-23
word ; 56-23
midnum : 5-2
postpunc : 5-2
always : 5-2
postpunc ! 456
noback always ! 456
midnum / 456-34
always / 456-34
always < 5-13
always = 25-25
always > 46-2
always + 5-235
postpunc ? 236
word ? 236
noback 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.
