<%- title = scheme .. "." .. type -%> 
<%+header.xml%>
<%
local table = require "table"

types = {
	list = "List",
	variable = "Variable",
	lazylist = "Mixed",
	enum = "Enumerator",
	reference = "Reference"
}

datatypes = {
	boolean = "Boolean",
	string = "String",
	uint = "Unsigned Integer",
	integer = "Integer",
	float = "Real Number",
	ipaddr = "IP-Address",
	ip4addr = "IPv4-Address",
	ip6addr = "IPv6-Address",
	ip4prefix = "IPv4-Prefix",
	ip6prefix = "IPv6-Prefix",
	hostname = "Hostname",
	host = "Host (Hostname or IP-Address)",
	directory = "Filesystem path (to directory)",
	file = "Filesystem path (to file)",
	macaddr = "MAC-Address",
	port = "Port",
	portrange = "Single Port or Portrange (First-Last)"
}

function _parse_ref( r )
	local k, v, h = r:match("([^.]+)%.([^.]+)%.([^.]+)")
	if not k then
		k, v = r:match("([^.]+)%.([^.]+)")
	end
	if k then
		if h then
			return self:_variable_target(k, v, h), true
		else
			return self:_section_filename(k, v)
		end
	end
end 

function _parse_dep( r, c, s, o )
	local ref  = { }
	local vars = {
		config  = c,
		section = s,
		option  = o
	}

	for v in r:gmatch("[^.]+") do
		ref[#ref+1] = (v:gsub( "%$(.+)", vars ))
	end
	
	if #ref < 2 then
		table.insert(ref, 1, s or '$section')
	end
	if #ref < 3 then
		table.insert(ref, 1, c or '$config')
	end

	return self:_variable_target(unpack(ref))
end

%>
<a name="top"></a>
<h1 class="section-title"><%=scheme-%>
<%-if package.title then%><dfn> - <%=package.title%></dfn><%end%></h1>
<h2 class="section-subtitle"><%=type-%>
<%-if section.title then%><dfn> - <%=section.title%></dfn><%end%></h2>
<div class="section-description"><%=section.description%></div>

<h3 class="section-attributes">Attributes:</h3>
<ul class="section-attributes-index">
<%- 
if section.required then %>
	<li class="section-attributes-required">required: <dfn>A section of this type is required.</dfn></li>
<% end
if section.unique then %>
	<li class="section-attributes-unique">unique: <dfn>There can be only one section of this type.</dfn></li>
<%- else -%>
	<li class="section-attributes-multiple">multiple: <dfn>There can be more than one section of this type.</dfn></li>
<% end
if section.dynamic then %> 
	<li class="section-attributes-dynamic">dynamic: <dfn>Sections of this type may contain user-defined options.</dfn></li>
<% end 
if section.named then %> 
	<li class="section-attributes-named">named: <dfn>Sections of this type require a name.</dfn></li>
<% end -%>
</ul>

<% if section.depends then %>
	<h3 class="section-depends">Requirements (one of):</h3>
	<ul class="section-depends-index">
		<% for i, d in ipairs(section.depends) do 
			local nf = false%>
		<li>
		<% for k2, v in luci.util.kspairs(d) do
			local t = _parse_dep(k2, scheme, type)
		%>
			<% if nf then %>and<% end %>
			<%if t then%><a href="<%=t%>"><%end%><%=k2%><%if t then%></a><%end%><%if v~=true then%>=<%=v%><%end%>
		<% nf = true
			end %>
		</li>
		<% end %>
	</ul>
<% end %>

<h3 class="section-variables">Variable Overview:</h3>
<table class="section-variables-index">
<% for k, v in luci.util.kspairs(package.variables[type]) do 
if v.required then%>
<tr class="section-variable-required">
	<th><a href="#variable.<%=k%>"><%=k%></a></th>
	<td><%=v.title%></td>
</tr>
<% end end
for k, v in luci.util.kspairs(package.variables[type]) do 
if not v.required then%>
<tr class="section-variable-mixed">
	<th><a href="#variable.<%=k%>"><%=k%></a></th>
	<td><%=v.title%></td>
</tr>
<% end end %>
</table>

<h3 class="section-variables">Options:</h3>
<%-
for i=0, 1 do
for k, v in luci.util.kspairs(package.variables[type]) do
if (i==0) == v.required then
%>
<hr />
<div class="variable-documentation">
	<a name="variable.<%=k%>"></a>
	<h4 class="variable-title"><%=k-%>
	<%-if v.title then%><dfn> - <%=v.title%></dfn><%end%></h4>
	<div class="variable-declaration">
	<div class="variable-description"><%=v.description%></div>
	<h5 class="variable-attributes">Attributes:</h5>
	<ul class="varaible-attributes-index">
	<% if v.required then %>
		<li class="variable-attribute-required"><strong>required</strong></li>
	<% end %>
		<li class="variable-attribute-type"><strong>Type:</strong> <%=types[v.type] or v.type%></li>
		<li class="variable-attribute-datatype"><strong>Datatype:</strong> <%=datatypes[v.datatype] or v.datatype%></li>
	<% if v.multival then %>
		<li class="variable-attribute-multiple"><strong>multiple values:</strong> space-separated</li>
	<% end %>
	</ul>
	<% if v.depends then %>
		<h5 class="variable-depends">Dependencies (one of):</h5>
		<ul class="variable-depends-index">
			<% for i, d in ipairs(v.depends) do 
				local nf = false %>
			<li>
			<% for k2, v in luci.util.kspairs(d) do
				local t = _parse_dep(k2, scheme, type, k)
			%>
				<% if nf then %>and<% end %>
				<%if t then%><a href="<%=t%>"><%end%><%=k2%><%if t then%></a><%end%><%if v~=true then%>=<%=v%><%end%>
			<% nf = true
			end %>
			</li>
			<% end %>
		</ul>
	<% end %>
	<% if v.type == "enum" then %>
		<h5 class="variable-values">Possible Values:</h5>
		<ul class="variable-values-index">
			<% for k, d in pairs(v.values) do %> 
			<li><strong><%=k%></strong><%if d then%> (<%=d%>)<%end%></li>
			<% end %>
		</ul>
	<% elseif v.type == "reference" then %>
		<h5 class="variable-reference">Value references:</h5>
		<ul class="variable-reference-index">
			<% for k, d in ipairs(v.valueof) do %> 
			<li>
			<% local t, x = _parse_ref(d)
			if t then %><%=x and "Value of" or "Section of type"%> <a href="<%=t%>"><% end %>
			<%=d%>
			<% if t then%></a><% end %>
			</li>
			<% end %>
		</ul>
	<% end %>
	</div>
	<a href="#top">&#8657;</a>
</div>
<% end end end -%>
<%+footer.xml%>