Skip to content

Commit 02d9946

Browse files
committed
Fix KLC parsing (#35)
1 parent 6bc764e commit 02d9946

File tree

1 file changed

+23
-7
lines changed

1 file changed

+23
-7
lines changed

src/KlcParse.hs

+23-7
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ klcLayout = many >$> mconcat $
8383
<|> set' _parseKeys <$> klcKeys
8484
<|> set' _parseLigatures <$> try ligatures
8585
<|> set' _parseDeadKeys <$> try deadKey
86+
<|> (∅) <$ try descriptions
87+
<|> (∅) <$ try languageNames
8688
<|> (∅) <$ try keyName
8789
<|> (∅) <$ try endKbd
8890
<|> (try nameValue >>= (uncurry field >$> set' _parseInformation))
@@ -93,6 +95,7 @@ klcLayout = many >$> mconcat $
9395
field Logger m String String m Information
9496
field "COPYRIGHT" = pure set' _copyright Just
9597
field "COMPANY" = pure set' _company Just
98+
field "LOCALENAME" = const (pure (∅))
9699
field "LOCALEID" = pure set' _localeId Just
97100
field "VERSION" = pure set' _version Just
98101
field f = const $ (∅) <$ tell ["unknown field ‘" f ""]
@@ -159,14 +162,15 @@ ligatures = do
159162
["LIGATURE"] readLine
160163
catMaybes <$> many (try ligature)
161164

162-
ligature (Logger m, Parser m) m (Maybe (Pos, Int, String))
163-
ligature = runMaybeT $ do
164-
sc:i:chars lift readLine
165+
ligature (Logger m, Parser m, MonadFail m) m (Maybe (Pos, Int, String))
166+
ligature = do
167+
sc:i:chars readLine
165168
guard (not (null chars))
166-
pos parseShortcutPos sc
167-
i' maybe (tellMaybeT ["unknown index ‘" i ""]) pure $ readMaybe ('0':'x':i)
168-
s mapMaybe letterToChar <$> traverse parseLetter chars
169-
pure (pos, i', s)
169+
runMaybeT $ do
170+
pos parseShortcutPos sc
171+
i' maybe (tellMaybeT ["unknown index ‘" i ""]) pure $ readMaybe ('0':'x':i)
172+
s mapMaybe letterToChar <$> traverse parseLetter chars
173+
pure (pos, i', s)
170174
where
171175
letterToChar (Char c) = Just c
172176
letterToChar _ = Nothing
@@ -189,6 +193,18 @@ keyName = do
189193
['K':'E':'Y':'N':'A':'M':'E':_] readLine
190194
many (try nameValue)
191195

196+
descriptions (Parser m, MonadFail m) m ()
197+
descriptions = do
198+
["DESCRIPTIONS"] readLine
199+
many (some hexDigitChar *> spacing *> endLine)
200+
pure ()
201+
202+
languageNames (Parser m, MonadFail m) m ()
203+
languageNames = do
204+
["LANGUAGENAMES"] readLine
205+
many (some hexDigitChar *> spacing *> endLine)
206+
pure ()
207+
192208
endKbd (Parser m, MonadFail m) m ()
193209
endKbd = do
194210
["ENDKBD"] readLine

0 commit comments

Comments
 (0)