string PrfNormStr(string mark)
 {
     string type = string.Empty;
     pars = Lib.GetParsStr(Profile);
     switch (mark)
     {
         case "I":
             if (PrfSub("Б", "b%", "", out type)) goto OK_I;
             if (PrfSub("Б", "б%", "", out type)) goto OK_I;
             if (PrfSub("К", "k%A", "А", out type)) goto OK_I;
             if (PrfSub("К", "k%", "", out type)) goto OK_I;
             if (PrfSub("Ш", "h%", "", out type)) goto OK_I;
             if (PrfSub("Ш", "ш%", "", out type)) goto OK_I;
             if (PrfSub("Д", "d%A", "А", out type)) goto OK_I;
             if (PrfSub("У", "y%A", "А", out type)) goto OK_I;
             if (PrfSub("М", "м%", "", out type)) goto OK_I;
             if (PrfSub("С", "с%", "", out type)) goto OK_I;
             OK_I: mark += pars[0] + type;
             if (type == "" && pars.Count != 1
                 || Regex.IsMatch(type, @"\d") && pars.Count != 2) error(pars);
             break;
         case "[":
             if (PrfSub("[", "aY", "аУ", out type)) goto OK_U;
             if (PrfSub("[", "y", "У", out type)) goto OK_U;
             if (PrfSub("[", "ap", "аП", out type)) goto OK_U;
             if (PrfSub("[", "p", "П", out type)) goto OK_U;
             if (PrfSub("[", "e", "Э", out type)) goto OK_U;
             if (PrfSub("[", "l", "Л", out type)) goto OK_U;
             if (PrfSub("[", "ca", "Cа", out type)) goto OK_U;
             if (PrfSub("[", "cb", "Cб", out type)) goto OK_U;
             if (PrfSub("[", "c", "C", out type)) goto OK_U;
             OK_U: mark += pars[0] + type;
             if (pars.Count != 1) error(pars);
             break;
         case "L":
             if (pars.Count == 2) mark += pars[0] + "x" + pars[1];
             if (pars.Count == 3) mark += pars[0] + "x" + pars[1] + "x" + pars[2];
             if (pars.Count != 2 && pars.Count != 3) error(pars);
             break;
         case "—":
             if (pars.Count == 1) mark += pars[0];
             if (pars.Count == 2)
             {
                 double p0 = Lib.ToDouble(pars[0]);
                 double p1 = Lib.ToDouble(pars[1]);
                 if (p0 < p1) mark += pars[0] + "x" + pars[1];
                 else mark += pars[1] + "x" + pars[0];
             }
             break;
         case "Гн.[]":
         case "Гн.":
             if (pars.Count == 2) mark = "Гн." + pars[0] + "x" + pars[1].Replace(".0", "");
             if (pars.Count == 3)
             {
                 if(pars[0] == pars[1]) mark = "Гн." + pars[0] + "x" + pars[2].Replace(".0", "");
                 else mark = "Гн.[]" + pars[0] + "x" + pars[1] + "x" + pars[2].Replace(".0", "");
             }
             if (pars.Count != 2 && pars.Count != 3) error(pars);
             break;
         case "TK":
         case "TP":
             if(pars.Count >= 2) mark += pars[0] + "x" + pars[1];
             if (pars.Count == 3) mark += "x" + pars[2];
             if (pars.Count != 2 && pars.Count != 3) error(pars);
             break;
         case "IFC_BREP":
             if(pars.Count == 1) mark += "-" + pars[0];
             if (pars.Count > 1) error(pars);
             break;
         default: error(pars); break;
     }
     return mark;
 }