Uspeo sam da napravim parsiranje. RAdi sve kako treba ako korsitim <lang></lang> i to mi cak radi posao posto se ti pomocni tagovi nece pojavljivati u izlaznom dokumentu. Medjutim imam problem, taj tag bi u svtvati reba da izgleda ovako:
nekitekst<lang id="en">nekitekst</lang>
U prvoj liniji prilozenog koda je regext koji match-uje <lang id="en"> ali mi ne uspeva da na isti nacin namestim da radi izraz za pretragu koji je definisan u promenljivoj $regex.
Trebalo bi da parsisa sa ovim id="en" (gde en moze biti bilo koja oznaka jezika) i da tu oznaku jezika mogu da procitam kako bih parsiranom segmentu naznacio da je u tom jeziku. U prilozenom kodu, promenljivoj $m_cur_lang treba da se dodeli procitana oznaka jezika.
Al' nece pa nece...
Kôd:
<pre>
<?php
echo preg_match ('#\<lang( (.)*)*\>#', ' <lang id="sr"> ');
$input = "nivo1<lang>nivo2<lang>nivo3<lang>nivo4</lang></lang>nivo2</lang>nivo1<lang>nivo2</lang>nivo1";
echo "input = $input\n";
$parsed = parseLang ($input, 'sr');
print_r ($parsed);
echo "result = " . joinLang ($parsed);
function parseLang ($p_input, $p_def_lang) {
$regex = '#\<lang\>((?:[^<]|\<(?!/?lang\>)|(?R))+)\</lang\>#';
if (preg_match ($regex, $p_input)) {
$split = preg_split ($regex, $p_input,2);
//tekuci nivo, prefiks
unset ($m_out);
$m_out['lang'] = $p_def_lang;
$m_out['value'] = $split[0];
$out[0] = $m_out;
// sledeci nivo po dubini
$m_input = $p_input;
if (strlen ($split[0]) > 0) $m_input = substr ($m_input, strlen ($split[0]));
if (strlen ($split[1]) > 0) $m_input = substr ($m_input, 0, - strlen ($split[1]));
$m_cur_lang = $p_def_lang; // ovde treba izvuci vrednost iz lang taga
$m_input = preg_replace ($regex, '$1', $m_input);
unset ($m_out);
$m_out[0] = parseLang ($m_input, $m_cur_lang);
$out[1] = $m_out;
// tekuci nivo, sufiks
unset ($m_out);
$m_out['lang'] = $p_def_lang;
$m_out = parseLang ($split[1], $m_out['lang']);
$out[2] = $m_out;
$m_result = $out;
} else {
$m_result['lang'] = $p_def_lang;
$m_result['value'] = $p_input;
}
return ($m_result);
}
function joinLang ($p_input) {
$m_result = '';
foreach ($p_input as $m_item) {
if (isset ($m_item['value'])) {
if (! empty ($m_item['value'])) {
$m_result .= '<lang' /* id="' . $m_item['lang'] . '"'*/ . '>' . $m_item['value'];
}
} else {
$m_result .= joinLang ($m_item);
}
}
$m_result .= '</lang>';
return ($m_result);
}
?>
</pre>