void TTransCorpus::SaveTransScript(const TStr& OutFBase, const TStr& OrgLang,
        const TStr& TransLang, const TStrV& OrgFNmV, const TStrV& RefTransFNmV) {

    const int FNms = OrgFNmV.Len();
    IAssert(OrgFNmV.Len() == RefTransFNmV.Len());

    // make tokenize
    PSOut TokSOut = TFOut::New(OutFBase + "_tokenize.sh");
    for (int FNmN = 0; FNmN < FNms; FNmN++) {
        TokSOut->PutStrLn("tokenize.pl -lang=" + OrgLang + " " + 
            OrgFNmV[FNmN].GetFBase() + " " + 
            TStr::PutFExt(OrgFNmV[FNmN], ".tok").GetFBase());
        TokSOut->PutStrLn("tokenize.pl -lang=" + TransLang + " " + 
            RefTransFNmV[FNmN].GetFBase() + " " + 
            TStr::PutFExt(RefTransFNmV[FNmN], ".tok").GetFBase());           
    }
    TokSOut->Flush();

    // make align
    PSOut AlignSOut = TFOut::New(OutFBase + "_align.sh");
    for (int FNmN = 0; FNmN < FNms; FNmN++) {
        AlignSOut->PutStrLn("ssal -f " + 
            TStr::PutFExt(OrgFNmV[FNmN], ".tok").GetFBase() + " " + 
            TStr::PutFExt(RefTransFNmV[FNmN], ".tok").GetFBase());
        AlignSOut->PutStrLn("mv " + 
            TStr::PutFExt(OrgFNmV[FNmN], ".tok.al").GetFBase() + " " + 
            TStr::PutFExt(OrgFNmV[FNmN], ".al").GetFBase());
        AlignSOut->PutStrLn("mv " + 
            TStr::PutFExt(RefTransFNmV[FNmN], ".tok.al").GetFBase() + " " + 
            TStr::PutFExt(RefTransFNmV[FNmN], ".al").GetFBase());
    }
    AlignSOut->Flush();

    // make lowercase
    PSOut LcSOut = TFOut::New(OutFBase + "_lowercase.sh");
    for (int FNmN = 0; FNmN < FNms; FNmN++) {
        LcSOut->PutStrLn("lc-latin.pl " + 
            TStr::PutFExt(OrgFNmV[FNmN], ".al").GetFBase() + " " + 
            TStr::PutFExt(OrgFNmV[FNmN], ".lc").GetFBase());
        LcSOut->PutStrLn("lc-latin.pl " + 
            TStr::PutFExt(RefTransFNmV[FNmN], ".al").GetFBase() + " " + 
            TStr::PutFExt(RefTransFNmV[FNmN], ".lc").GetFBase());
    }
    LcSOut->Flush();

    // rest -- script
}