prepare method

void prepare()

extract the needed vars

Implementation

void prepare()
{
  vars = {};//reset the variables
  expressions = {};
  for(int i = 0; i < cplus.length; i++)
  {
    JrlLine line = JrlLine(datum: datum[i]);
    if(cminus[i].contains("-"))
    {
      var splitted = cminus[i].split("-");
      //print("- range!! ${cminus[i]} $splitted");
      line.addConstraint("kmin",boundaries: splitted);
    }
    else if(cplus[i].isEmpty) {}//do nothing
    else line.kminus=book.kpl.get(cminus[i])!;
    if(cplus[i].contains("-"))
    {
      var splitted = cplus[i].split("-");
      //print("+ range!! ${cplus[i]} $splitted");
      line.addConstraint("kplu",boundaries: splitted);
    }
    else if(cplus[i].isEmpty) {}//do nothing
    else line.kplus=book.kpl.get(cplus[i])!;
    if(line.kminus.number != "-1" && line.kminus.desc.isEmpty) print("Warning!! minus(${cminus[i]},${line.kminus.name},${line.kminus.number}) account probably erroneaous");
    if(line.kplus.number != "-1" &&line.kplus.desc.isEmpty) print("Warning!! plus(${cplus[i]},${line.kplus.name},${line.kminus.number}) account probably erroneaous");
    //print("set c+ to ${line.kplus} c- to ${line.kminus}");
    if(desc[i].contains("#"))
    {
      //check if it can be evaluated with expressions: ^0.2.3:
      //we need to extract the variables
      RegExp rex = RegExp(r"#(\w+)");
      //print("found matches for vars in desc: $rex");
      rex.allMatches(desc[i]).forEach((match)
      {
        //vars[match.group(1)!] = match.group(1);
        line.vars["desc"] ??= {};//initialise if needed
        if(!vars.containsKey(match.group(1))) line.vars["desc"][match.group(1)!] = match.group(1); //add only if not allready present?
      });
      //print("extracted varaibles : $vars");
    }

    RegExp expPresent = RegExp(r'[()]+');
    //print("checking for presence of $expPresent in ${desc[i]}");
    if(desc[i].contains(expPresent)) parseExpression(line,desc[i], expPresent);
    line.desc = desc[i];
    //print("ops perparer valuta '${valuta[i]}'");
    //valuta is either a vairable name or an expression can't be both....
    if(valuta[i].contains(expPresent)) parseExpression(line,valuta[i], expPresent);
    else if(valuta[i].contains("#"))
    {
      //we need to extract the variables
      RegExp rex = RegExp(r"#(\w+)");
      //print("matching ${rex.allMatches(valuta[i]).length}");
      rex.allMatches(valuta[i]).forEach((match)
      {
        vars[match.group(1)!] = match.group(1);
        line.valname = match.group(1);
      });
      line.valuta =-1;//force invalid value
    }
    else  if(valuta[i].isNotEmpty) line.setValuta(valuta[i]);
    if(mod[i].isNotEmpty) line.addConstraint("mode", mode:mod[i]);

    //print("added $line");
    preparedLines.add(line);
    //data.add( [name, date, cplus[i], cminus[i], "${desc[i]}", cur[i], valuta[i], mod[i]]);
  }
}