forked from public/foundryvtt-wh4-lang-fr-fr
		
	
		
			
				
	
	
		
			63 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| --[[
 | |
| 	Licensed according to the included 'LICENSE' document
 | |
| 	Author: Thomas Harning Jr <harningt@gmail.com>
 | |
| ]]
 | |
| local lpeg = require("lpeg")
 | |
| local jsonutil = require("json.util")
 | |
| local merge = jsonutil.merge
 | |
| local util = require("json.decode.util")
 | |
| 
 | |
| -- Container module for other JavaScript types (bool, null, undefined)
 | |
| 
 | |
| local _ENV = nil
 | |
| 
 | |
| -- For null and undefined, use the util.null value to preserve null-ness
 | |
| local booleanCapture =
 | |
| 	lpeg.P("true") * lpeg.Cc(true)
 | |
| 	+ lpeg.P("false") * lpeg.Cc(false)
 | |
| 
 | |
| local nullCapture = lpeg.P("null")
 | |
| local undefinedCapture = lpeg.P("undefined")
 | |
| 
 | |
| local defaultOptions = {
 | |
| 	allowUndefined = true,
 | |
| 	null = jsonutil.null,
 | |
| 	undefined = jsonutil.undefined
 | |
| }
 | |
| 
 | |
| local modeOptions = {}
 | |
| 
 | |
| modeOptions.simple = {
 | |
| 	null = false,     -- Mapped to nil
 | |
| 	undefined = false -- Mapped to nil
 | |
| }
 | |
| modeOptions.strict = {
 | |
| 	allowUndefined = false
 | |
| }
 | |
| 
 | |
| local function mergeOptions(options, mode)
 | |
| 	jsonutil.doOptionMerge(options, false, 'others', defaultOptions, mode and modeOptions[mode])
 | |
| end
 | |
| 
 | |
| local function generateLexer(options)
 | |
| 	-- The 'or nil' clause allows false to map to a nil value since 'nil' cannot be merged
 | |
| 	options = options.others
 | |
| 	local valueCapture = (
 | |
| 		booleanCapture
 | |
| 		+ nullCapture * lpeg.Cc(options.null or nil)
 | |
| 	)
 | |
| 	if options.allowUndefined then
 | |
| 		valueCapture = valueCapture + undefinedCapture * lpeg.Cc(options.undefined or nil)
 | |
| 	else
 | |
| 		valueCapture = valueCapture + #undefinedCapture * util.denied("undefined", "others.allowUndefined")
 | |
| 	end
 | |
| 	return valueCapture
 | |
| end
 | |
| 
 | |
| local others = {
 | |
| 	mergeOptions = mergeOptions,	
 | |
| 	generateLexer = generateLexer
 | |
| }
 | |
| 
 | |
| return others
 |