From 166a2e780039eb379a72dadfee330d1fb332348f Mon Sep 17 00:00:00 2001 From: James Brechtel Date: Tue, 19 May 2026 23:28:37 -0400 Subject: [PATCH] Handles UTF8 recipe files --- src/Roux/RecipeIndex.hs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Roux/RecipeIndex.hs b/src/Roux/RecipeIndex.hs index 89cb8c1..5293786 100644 --- a/src/Roux/RecipeIndex.hs +++ b/src/Roux/RecipeIndex.hs @@ -9,8 +9,11 @@ module Roux.RecipeIndex ( ) where import Data.Aeson (ToJSON (..), camelTo2, defaultOptions, fieldLabelModifier, genericToJSON) +import qualified Data.ByteString as BS import Data.Text (Text) import qualified Data.Text as T +import qualified Data.Text.Encoding as T +import qualified Data.Text.Encoding.Error as T import GHC.Generics (Generic) import System.Directory (listDirectory) import System.FilePath (takeBaseName, takeExtension, ()) @@ -39,8 +42,9 @@ scanRecipes dir = do -- | Load and parse a single recipe file. loadRecipe :: FilePath -> FilePath -> IO RecipeInfo loadRecipe dir filename = do - content <- readFile (dir filename) - let parsed = parseCookFile (T.pack content) + bs <- BS.readFile (dir filename) + let content = T.decodeUtf8With T.lenientDecode bs + parsed = parseCookFile content title = case parsed of Right r -> extractTitle r filename Left _err -> T.pack (takeBaseName filename)