@@ -359,9 +359,32 @@ instance Pushable ReaderOptions where
359359 LuaUtil.addField "extensions" extensions
360360 LuaUtil.addField "standalone" standalone
361361 LuaUtil.addField "columns" columns
362− LuaUtil.addField "tabStop" tabStop
363− LuaUtil.addField "indentedCodeClasses" indentedCodeClasses
362+ LuaUtil.addField "tab_stop" tabStop
363+ LuaUtil.addField "indented_code_classes" indentedCodeClasses
364364 LuaUtil.addField "abbreviations" abbreviations
365− LuaUtil.addField "defaultImageExtension" defaultImageExtension
366− LuaUtil.addField "trackChanges" trackChanges
367− LuaUtil.addField "stripComments" stripComments
365+ LuaUtil.addField "default_image_extension" defaultImageExtension
366+ LuaUtil.addField "track_changes" trackChanges
367+ LuaUtil.addField "strip_comments" stripComments
368+
369+ -- add metatable
370+ let indexReaderOptions :: AnyValue -> AnyValue -> Lua Lua.NumResults
371+ indexReaderOptions _tbl (AnyValue key) = do
372+ Lua.ltype key >>= \case
373+ Lua.TypeString -> Lua.peek key >>= \case
374+ "defaultImageExtension" -> Lua.push defaultImageExtension
375+ "indentedCodeClasses" -> Lua.push indentedCodeClasses
376+ "stripComments" -> Lua.push stripComments
377+ "tabStop" -> Lua.push tabStop
378+ "trackChanges" -> Lua.push trackChanges
379+ _ -> Lua.pushnil
380+ _ -> Lua.pushnil
381+ return 1
382+ Lua.newtable
383+ LuaUtil.addFunction "__index" indexReaderOptions
384+ Lua.setmetatable (Lua.nthFromTop 2)
385+
386+-- | Dummy type to allow values of arbitrary Lua type.
387+newtype AnyValue = AnyValue StackIndex
388+
389+instance Peekable AnyValue where
390+ peek = return . AnyValue