wip, play with skylighting

This commit is contained in:
Dmitry Zuikov 2024-04-20 19:12:19 +03:00
parent 662d4d0a56
commit 7881981460
2 changed files with 44 additions and 1 deletions

View File

@ -946,6 +946,10 @@ executable test-playground
, unordered-containers
, resourcet
, text-icu >= 0.8.0.3
, skylighting-core
, skylighting
, skylighting-lucid
, text
executable test-pipe-mess

View File

@ -15,6 +15,16 @@ import Control.Monad.Trans.Cont
import Control.Monad
import UnliftIO
import Skylighting.Core
import Skylighting.Types
import Skylighting.Syntax
import Skylighting.Tokenizer
import Skylighting
import Data.Text (Text)
import Data.Text qualified as Text
import qualified Data.Text.IO as Text
-- желаемое поведение: добавить в новую версию A какое-нибудь поле так,
-- что бы предыдущие записи продолжали десериализоваться без этого поля,
-- а новое поле было бы пустым, если его нет -- в новой версии.
@ -104,9 +114,39 @@ testCont = do
liftIO $ print i
-- Функция для вывода токенов
printTokens :: [SourceLine] -> IO ()
printTokens = mapM_ printSourceLine
-- Вспомогательная функция для печати одной строки токенов
printSourceLine :: SourceLine -> IO ()
printSourceLine = mapM_ (putStrLn . show . tokenToText)
-- Преобразование токена в текст
tokenToText :: Token -> Text.Text
tokenToText (_,t) = t
main :: IO ()
main = do
let syntaxMap = defaultSyntaxMap
let maybeSyntax = lookupSyntax "haskell" syntaxMap
case maybeSyntax of
Nothing -> putStrLn "Синтаксис для Haskell не найден."
Just syntax -> do
-- Чтение кода из stdin или файла
code <- Text.getContents
-- Конфигурация токенизатора
let config = TokenizerConfig { traceOutput = False, syntaxMap = syntaxMap }
-- Токенизация кода
case tokenize config syntax code of
Left err -> putStrLn $ "Ошибка токенизации: " ++ show err
Right tokens -> do
mapM_ print tokens
main' :: IO ()
main' = do
print "1"
let a1 = serialise (A0 22) & deserialiseOrFail @A1
let a2 = serialise (A11 22) & deserialiseOrFail @A0
@ -126,6 +166,5 @@ main = do
print $ a1 <&> set a1Str (Just "JOPAKITA")
print $ a4 <&> set a1Str (Just "JOPAKITA")
pure ()