From 788198146066d05093839197b4fe9d6e3c49520e Mon Sep 17 00:00:00 2001 From: Dmitry Zuikov Date: Sat, 20 Apr 2024 19:12:19 +0300 Subject: [PATCH] wip, play with skylighting --- hbs2-tests/hbs2-tests.cabal | 4 +++ hbs2-tests/test/playground/Main.hs | 41 +++++++++++++++++++++++++++++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/hbs2-tests/hbs2-tests.cabal b/hbs2-tests/hbs2-tests.cabal index e6ba7a3e..0eb62ee5 100644 --- a/hbs2-tests/hbs2-tests.cabal +++ b/hbs2-tests/hbs2-tests.cabal @@ -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 diff --git a/hbs2-tests/test/playground/Main.hs b/hbs2-tests/test/playground/Main.hs index 426307b8..19fdd016 100644 --- a/hbs2-tests/test/playground/Main.hs +++ b/hbs2-tests/test/playground/Main.hs @@ -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 ()