ampersand-3.1.0: src/Database/Design/Ampersand/Input/ADL1/LexerTexts.hs
module Database.Design.Ampersand.Input.ADL1.LexerTexts
( lexerCommentOperator
, lexerCorrectStrings
, lexerNestedComment
, lexerNonTerminatedString
, lexerStillOpenAtEOF
, lexerTabCharacter
, lexerTooManyClose
, lexerUnexpectedChar
, lexerUnexpectedClose
, lexerUnterminatedAtom
, lexerUnterminatedComment
, lexerUnterminatedPurpose
, lexerProblematicISO8601DateTime
, lexerUtfChar
) where
import Data.IORef
import System.IO.Unsafe
import Data.Maybe (fromMaybe)
data Language = English | Dutch deriving Eq
{-# NOINLINE language #-}
language :: IORef Language
language = unsafePerformIO (newIORef English)
data Arrow a b = a :-> b
infix 0 :->
select :: IORef Language -> [Arrow Language msg] -> msg
select languageRef table =
let lang = unsafePerformIO (readIORef languageRef)
convert (a :-> b) = (a, b)
in fromMaybe (error "Texts.select: unknown language")
(lookup lang (map convert table))
-- | Translates 'Unterminated comment' into the chosen language
lexerUnterminatedComment :: String -- ^ The translated string
lexerUnterminatedComment = select language
[ English :-> "Unterminated comment"
, Dutch :-> "Commentaar niet afgesloten"
]
-- | Translates 'Unterminated purpose' into the chosen language
lexerUnterminatedPurpose:: String -- ^ The translated string
lexerUnterminatedPurpose= select language
[ English :-> "Unterminated PURPOSE section"
, Dutch :-> "PURPOSE sectie niet afgesloten"
]
-- | Translates 'Unterminated atom' into the chosen language
lexerUnterminatedAtom :: String -- ^ The translated string
lexerUnterminatedAtom = select language
[ English :-> "Unterminated Atom literal"
, Dutch :-> "Atom literal niet afgesloten"
]
-- | Translates 'ProblematicISO8601DateTime' into the chosen language
lexerProblematicISO8601DateTime:: String
lexerProblematicISO8601DateTime = select language
[ English :-> "Incorrect DATETIME value (ISO 8601 standard)"
, Dutch :-> "foutieve DATETIME waarde (Zie ISO 8601)"
]
-- | Translates 'Unexpected character' into the chosen language
lexerUnexpectedChar :: Char -> String -- ^ The translated string
lexerUnexpectedChar c = select language
[ English :-> "Unexpected character '" ++ [c] ++ "'"
, Dutch :-> "Onverwachte letter '" ++ [c] ++ "'"
]
-- | Translates 'Unterminated string' into the chosen language
lexerNonTerminatedString :: String -- ^ The translated string
lexerNonTerminatedString = select language
[ English :-> "Unterminated string literal"
, Dutch :-> "String niet afgesloten"
]
-- | Translates 'Close bracket but no open bracket' into the chosen language
lexerTooManyClose :: Show a => a -> String -- ^ The translated string
lexerTooManyClose c = select language
[ English :-> "Close bracket " ++ show c ++ " but no open bracket"
, Dutch :-> "Haakje " ++ show c ++ " wordt gesloten maar nergens geopend"
]
-- | Translates 'Unexpected close bracket' into the chosen language
lexerUnexpectedClose :: Char -> Char -> [String]
lexerUnexpectedClose c1 c2 = select language
[ English :-> [ "Unexpected close bracket " ++ show c1
, "Expecting a close bracket for " ++ show c2
]
, Dutch :-> [ "Onverwacht sluithaakje " ++ show c1
, "Sluithaakje voor " ++ show c2 ++ " wordt nog verwacht"
]
]
-- | Translates 'Bracket is never closed' into the chosen language
lexerStillOpenAtEOF :: [String] -- ^ The brackets
-> String -- ^ The translated string
lexerStillOpenAtEOF [s] = select language
[ English :-> "Bracket " ++ s ++ " is never closed"
, Dutch :-> "Sluithaakje voor " ++ s ++ " wordt nog verwacht"
]
-- | Translates 'Brackets are never closed' into the chosen language
lexerStillOpenAtEOF xs = select language
[ English :-> "The following brackets are never closed: " ++ commasAnd xs
, Dutch :-> "De volgende haakjes worden nergens gesloten: " ++ kommasEn xs
]
-- | Gives string examples in the chosen language
lexerCorrectStrings :: String -- ^ The translated string
lexerCorrectStrings = select language
[ English :-> "Correct examples of Strings: \"Ampersand (&) is cool\" \"Helium is cool too!\" \"abc\\ndef\" \"\""
, Dutch :-> "Correcte voorbeelden van teksten: \"Ampersand (&) is geweldig\" \"Helium is ook geweldig!\" \"abc\\ndef\" \"\""
]
-- | Translates 'Tab character encountered' into the chosen language
lexerTabCharacter :: [String] -- ^ The translated strings
lexerTabCharacter = select language
[ English :-> [ "Tab character encountered; may cause problems with the layout rule"
, "Configure your editor to replace tabs by spaces"
]
, Dutch :-> [ "Tab karakters kunnen problemn opleveren met de layout rule"
, "Stel je editor zo in dat hij tabs vervangt door spaties"
]
]
-- | Translates 'Unrecognized character' into the chosen language
lexerUtfChar :: [String] -- ^ The translated strings
lexerUtfChar = select language
[ English :-> [ "Unrecognized character in the beginning of the file."
, "Is it saved with encoding UTF-8 without BOM?"
]
, Dutch :-> [ "Onbekend karakter in het begin van het bestand."
, "Is het bestand opgeslagen met encoding UTF-8 zonder BOM?"
]
]
-- | Translates 'Nested comment' into the chosen language
lexerNestedComment :: [String] -- ^ The translated strings
lexerNestedComment = select language
[ English :-> [ "Syntax coloring usually can not handle nested comments"
, "Some of your code may be in comments but not visibly so"
]
, Dutch :-> [ "Syntax kleuring van editor kan meestal niet overweg met genest commentaar"
, "Het kan zo zijn dat een deel van je code in commentaar staat maar dat je dat niet ziet"
]
]
-- | Translates 'Comment operator' into the chosen language
lexerCommentOperator :: [String] -- ^ The translated strings
lexerCommentOperator = select language
[ English :-> [ "Syntax coloring usually cannot handle names containing --"
, "If you wanted to start a comment, write spaces around --"
]
, Dutch :-> [ "Syntax kleuring van editor kan meestal niet overweg met namen die -- bevatten"
, "Als je commentaar wilde beginnen schrijf dan spaties voor en na --"
]
]
-- | Adds commas and 'and' in between each element of the list
commasAndLang :: String -- ^ The word to use for 'and'
-> [String] -- ^ The list of items to show
-> String -- ^ The result
commasAndLang _ [] = []
commasAndLang _ [x] = x
commasAndLang a (x:xs) = x ++ concatMap (", " ++) (init xs) ++ " " ++ a ++ " " ++ last xs
commasAnd :: [String] -> String
commasAnd = commasAndLang "and"
kommasEn :: [String] -> String
kommasEn = commasAndLang "en"