<?
# Xini parser v1.0 by MC Solutions 2007, all righs reserved
/*
Samlpe file:
menu.xini:
!Structure=Text,Url
[Menu]
Item="Om firmaet","about.php"
Item="Kontakt firmaet","contact.php"
[Menu2]
Item="Bestil","order.php"
Item="Log ind","login.php","nisse","fisk"
[forside]
Titel="Bla bla bla"
BestilLink="Bla bla bla"
EOF
!Structure describes the name of the coma separated variables, used for generation an associative array.
Lines starting with ; or # are ignores ie. comments
The result of parsing the file ahead will be:
Array
(
[Menu] => Array
(
[0] => Array
(
[Text] => Om firmaet
[Url] => about.php
)
[1] => Array
(
[Text] => Kontakt firmaet
[Url] => contact.php
)
)
[Menu2] => Array
(
[0] => Array
(
[Text] => Bestil
[Url] => order.php
)
[1] => Array
(
[Text] => Log ind
[Url] => login.php
[0] => nisse
[1] => fisk
)
)
[forside] => Array
(
[Titel] => Bla bla bla
[BestilLink] => Bla bla bla
)
)
*/
class XiniParser
{
public function parse($file)
{
$data=preg_split("/\n/",file_get_contents($file));
foreach ($data as $number=>$line)
{
$tokkens=preg_split("/=|\ /",$line,-1,PREG_SPLIT_NO_EMPTY);
if (($tokkens[0]=="") or ($tokkens[0][0]=="#") or ($tokkens[0][0]==";"))
{
// Tom Linie eller kommentar
}
else if ($tokkens[0]=="!Structure")
{
//print "NEW STRUC:$line\n";
$struct=preg_split('/,/',$tokkens[1],-1,PREG_SPLIT_NO_EMPTY);
$keys=$struct;
} else if ($tokkens[0][0]=='[')
{
$block=preg_split('/\[|\]/',$line);
$block=$block[1];
} else {
$tokkens=preg_split("/=/",$line);
$values=preg_split('/","/',$tokkens[1]);
if (count($values)==1)
{
$value=substr($values[0],1,-1); // Remove tailing and heading "
} else {
$values[0]=substr($values[0],1);
$values[count($values)-1]=substr($values[count($values)-1],0,-1);
unset($value);
foreach ($values as $k=>$v)
{
if ($keys[$k]!="")
{
$value[$keys[$k]]=$v;
} else {
$value[]=$v;
}
}
}
if ($tokkens[0]=="Item")
{
$ret[$block][]=$value;
} else {
if (strpos($line,"="))
{
$ret[$block][$tokkens[0]]=$value;
// Value Assignments
} else
{
print "syntax error at line $number:`<i>$line</i>`<br>";
}
}
}
}
return $ret;
}
}
$xini=new XiniParser();
print_r($xini->parse('menu.xini'));
?>