diff options
Diffstat (limited to 'aconf/path/address/init.lua')
-rw-r--r-- | aconf/path/address/init.lua | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/aconf/path/address/init.lua b/aconf/path/address/init.lua new file mode 100644 index 0000000..c62487f --- /dev/null +++ b/aconf/path/address/init.lua @@ -0,0 +1,33 @@ +--[[ +Copyright (c) 2012-2015 Kaarle Ritvanen +See LICENSE file for license details +--]] + +local object = require('aconf.object') +local class = object.class + +local special = require('aconf.path.address.special') +local base = require('aconf.path.base') + + +local M = { + special={ + enum_keys=special.EnumKeys(), + value=special.Value(), + value_equals=special.ValueEquals + } +} + +local _special = {['#']=M.special.enum_keys, ['&']=M.special.value} + + +local AddressSyntax = class(base.Syntax) + +function AddressSyntax:get_special(comp) + if comp:sub(1, 1) == '@' then + return special.ValueEquals(#comp > 1 and comp:sub(2, -1) or nil) + end + return _special[comp] or object.super(self, AddressSyntax):get_special(comp) +end + +return AddressSyntax():export(M) |