Exemplo n.º 1
0
        private static Tekst BlokFormat(Queue <string> ulaz)
        {
            List <string> linije = new List <string>();
            string        linija;

            for (linija = ulaz.Dequeue(); !linija.Trim().StartsWith("}"); linija = ulaz.Dequeue())
            {
                linije.Add(linija);
            }

            int           uvlacenje = int.Parse(linija.TrimStart().Remove(0, 1).Trim());
            StringBuilder sb        = new StringBuilder();

            for (int i = 0; i < linije.Count; i++)
            {
                if (uvlacenje > 0)
                {
                    linije[i] = linije[i].Remove(0, uvlacenje);
                }
                sb.Append(linije[i]);
                sb.Append("\n");
            }
            string tekst = sb.ToString();

            List <Supstitucija> supstitucije = new List <Supstitucija>();

            for (linija = ulaz.Dequeue(); !linija.Trim().EndsWith(";"); linija = ulaz.Dequeue())
            {
                Queue <string> linijaQ = new Queue <string>(linija.Trim().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries));

                string kljuc      = linijaQ.Dequeue();
                ITekst vrijednost = LinijskiFormat(linijaQ);

                for (int poz = tekst.IndexOf(kljuc); poz >= 0; poz = tekst.IndexOf(kljuc, poz + 1))
                {
                    supstitucije.Add(new Supstitucija(poz, vrijednost, kljuc.Length));
                }
            }
            supstitucije.Sort((a, b) => a.pozicija.CompareTo(b.pozicija));

            List <ITekst> elementi = new List <ITekst>();
            int           pocetak  = 0;

            foreach (Supstitucija sups in supstitucije)
            {
                int duljinaLiterala = sups.pozicija - pocetak;
                if (duljinaLiterala > 0)
                {
                    elementi.Add(new Elementi.Literal(tekst.Substring(pocetak, duljinaLiterala)));
                }
                elementi.Add(sups.element);
                pocetak = sups.kraj;
            }
            if (pocetak < tekst.Length)
            {
                elementi.Add(new Elementi.Literal(tekst.Substring(pocetak)));
            }

            return(new Tekst(elementi));
        }
Exemplo n.º 2
0
        public static IEnumerable <KeyValuePair <string, ITekst> > IzStringa(Queue <string> ulaz)
        {
            List <KeyValuePair <string, ITekst> > rez = new List <KeyValuePair <string, ITekst> >();

            while (ulaz.Count > 0)
            {
                Queue <string> linija = new Queue <string>(ulaz.Dequeue().Trim().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries));
                if (linija.Count == 0)
                {
                    continue;
                }

                string kljuc     = linija.Dequeue();
                ITekst vrijedost = null;

                string format = linija.Dequeue();
                if (format == "=")
                {
                    vrijedost = JednostavanFormat(linija);
                }
                else if (format == ":=")
                {
                    vrijedost = LinijskiFormat(linija);
                }
                else if (format == "{")
                {
                    vrijedost = BlokFormat(ulaz);
                }
                else
                {
                    throw new FormatException();
                }

                rez.Add(new KeyValuePair <string, ITekst>(kljuc, vrijedost));
            }

            return(rez);
        }
Exemplo n.º 3
0
 private UvjetniLiteral(Formula uvjet, ITekst izlaz)
 {
     this.izlaz = izlaz;
     this.uvjet = uvjet;
 }
Exemplo n.º 4
0
 public Supstitucija(int pozicija, ITekst element, int duljina)
 {
     this.kraj     = pozicija + duljina;
     this.pozicija = pozicija;
     this.element  = element;
 }