/**
 * informas la traduksistemon, ke ni nun eniris/eniros novan dosieron.
 *
 * @param urlstring $dosiero la (interna) nomo de la nova dosiero,
 *                       eble ankaŭ relativa al la antaŭa loko.
 *                  se ne donita, ni prenas la nomon de tiu dosiero,
 *                  kiu vokas tiun funkcion.
 * @see eliru_dosieron()
 */
function eniru_dosieron($dosiero="") {
    global $traduko_dosieroj;

    //    echo "<!--\n eniru_dosieron(" . $dosiero . "); antauxe: " . var_export($traduko_dosieroj, true) . " -->";

    if ($dosiero == "") {
        $dosiero = absoluta_dosiernomo_al_interna(eltrovu_vokantan_dosieron());
    }

    $traduko_dosieroj[]=
        kunmetu_uri_relative($dosiero, end($traduko_dosieroj));

    //    echo "<!-- eniru_dosieron(...), poste: " .
    //        var_export($traduko_dosieroj, true) . " -->";
}
/**
 * Analizas ĉenon.
 *
 * Eblaj formato de ĉenoj:
 *
 * - ĉeno    (prenas ĝin el la lasta per
 *               {@link eniru_dosieron} anoncita dosiero)
 * - #ĉeno   (identa)
 * - dosiero#ĉeno  (prenas la dosieron en la sama dosierujo)
 * - dosierujo/dosiero#ĉeno  (iras al alia dosierujo, relative)
 * - /dosierujo/dosiero#ĉeno  (duon-absoluta, uzas la saman
 *                               "protokolon")
 * - proto:/dosierujo/dosiero#ĉeno  (indikas absolutan lokon)
 *
 * - ~#ĉeno  malatentas la dosieron de {@link eniru_dosieron},
 *             sed provas mem eltrovi, kiu dosiero vokas nin.
 *
 * @param tradcheno $origina_cheno la ĉeno analizenda
 * @param string|array  $baza_dosiero Se estas cxeno, uzenda en
 *                         ghisdatigo-moduso, tiam ni uzas tiun
 *                        (internan) nomon kiel bazon (por ĉiuj
 *                         formoj krom proto:/...)
 *                      Se estas array, ni uzas la lastan elementon
 *                      de gxi, krom en la '~#'-kazo, kiam ni prenas
 *                      la vokantan dosieron.
 *                      Se "" (aux ne donita), ni prenas la lastan 
 *                      elementon de $GLOBALS['traduko_dosieroj']
 *                      kiel bazo.
 * @return array  <code>
 *   array('dosiero' => tuta_dosiernomo,
 *         'cheno' => ĉeno),
 * </code>
 *    kie tuta_dosiernomo enhavas proto:/dosierujo/dosiero.
 */
function analizu_chenon($origina_cheno, $baza_dosiero = "")
{
    debug_echo("<!-- analizu_chenon('" . $origina_cheno . "', " . var_export($baza_dosiero, true) . ")-->");
    //     echo ("<!--(ac) origina_cheno: " . $origina_cheno .
    //           ($baza_dosiero? ", baza_dosiero: " . $origina_cheno : "") .
    //           " \n-->");
    list($dosiero, $cxeno) = explode('#', $origina_cheno, 2);
    debug_echo("<!--(ac) dosiero: " . $dosiero . ", cxeno: " . $cxeno . "\n-->");
    if ($dosiero == '~') {
        // formo "~#cheno"
        if (is_string($baza_dosiero)) {
            return array('dosiero' => $baza_dosiero, 'cheno' => $cxeno);
        }
        $abs_dosiero = eltrovu_vokantan_dosieron();
        $dosiero = absoluta_dosiernomo_al_interna($abs_dosiero);
        debug_echo("<!--(ac) dosiero: " . $dosiero . ", cxeno: " . $cxeno . "\n-->");
        return array('dosiero' => $dosiero, 'cheno' => $cxeno);
    }
    // if ~
    if (is_array($baza_dosiero)) {
        $baza_dosiero = end($baza_dosiero);
    }
    if (!$baza_dosiero) {
        darf_nicht_sein();
        $baza_dosiero = end($GLOBALS['traduko_dosieroj']) or $baza_dosiero = 'nedifinita:/nedifinita';
    }
    debug_echo("<!--(ac) baza_dosiero: " . $baza_dosiero . "\n-->");
    if ($cxeno == "") {
        // formo "ĉeno" sen #, do ĉeno estas en $dosiero
        return array('dosiero' => $baza_dosiero, 'cheno' => $dosiero);
    }
    return array('dosiero' => kunmetu_uri_relative($dosiero, $baza_dosiero), 'cheno' => $cxeno);
}
 /**
  * informas la traduksistemon, ke ni nun eniris/eniros novan dosieron.
  *
  * @param urlstring $dosiero la (interna) nomo de la nova dosiero,
  *                       eble ankaŭ relativa al la antaŭa loko.
  *                  se ne donita, ni prenas la nomon de tiu dosiero,
  *                  kiu vokas tiun funkcion.
  * @see eliru_dosieron()
  */
 function eniru_dosieron($dosiero)
 {
     if ($dosiero == "") {
         $dosiero = absoluta_dosiernomo_al_interna(eltrovu_vokantan_dosieron());
     } else {
         $dosiero = kunmetu_uri_relative($dosiero, $this->aktuala_dosiero());
     }
     $this->dosierstoko[] = $dosiero;
 }