Template for terminating string of data
Inheritance: ICodeTemplate
        ICodeTemplate ParseCode(IList<LanguageElement> lines,
            ICollection<string> usedLanguages, out Priority priority)
        {
            ParsedLine header = lines[0].ParsedLine;

            priority = Priority.none;
            bool canBeRepeated = false;
            bool checkForProblems = true;
            bool endingCode = false;
            bool canBeDisAssembled = true;
            bool canBeAssembled = true;
            int indexMode = 1;
            bool itemList = false;
            byte endingByte = 0;
            int offsetMod = 4;

            #region Flags

            foreach (string item in header.flags)
            {
                if (item.StartsWith("language") || item.StartsWith("game"))
                {
                    string[] languagesS = item.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries);
                    for (int i = 1; i < languagesS.Length; i++)
                    {
                        usedLanguages.Add(languagesS[i].Trim());
                    }
                }
                else if (item.StartsWith("priority"))
                {
                    int index = item.IndexOf(':');
                    string priorityS = item.Substring(index + 1);
                    if (Enum.GetNames(typeof(Priority)).Contains(priorityS))
                    {
                        priority = (Priority)Enum.Parse(typeof(Priority), priorityS);
                    }
                    else
                    {
                        throw new FormatException("Error in enum priority: " + item);
                    }
                }
                else if (item.StartsWith("repeatable"))
                {
                    canBeRepeated = true;
                }
                else if (item.StartsWith("unsafe"))
                {
                    checkForProblems = false;
                }
                else if (item.StartsWith("end"))
                {
                    endingCode = true;
                }
                else if (item.StartsWith("noDisassembly"))
                {
                    canBeDisAssembled = false;
                }
                else if (item.StartsWith("noAssembly"))
                {
                    canBeAssembled = false;
                }
                else if (item.StartsWith("indexMode"))
                {
                    int index = item.IndexOf(':');
                    string indexModeS = item.Substring(index + 1);
                    indexMode = int.Parse(indexModeS);
                }
                else if (item.StartsWith("terminatingList"))
                {
                    int index = item.IndexOf(':');
                    string endingByteS = item.Substring(index + 1);
                    endingByte = (byte)int.Parse(endingByteS);
                    itemList = true;
                }
                else if (item.StartsWith("offsetMod"))
                {
                    int index = item.IndexOf(':');
                    string offsetModeS = item.Substring(index + 1);
                    offsetMod = (byte)int.Parse(offsetModeS);
                }
                else
                {
                    throw new FormatException("Unknown option " +
                        item + " in parameter " + header.name);
                }
            }
            #endregion

            //if (priority == Priority.none && header.number1 == 0)
            //{
            //    throw new Exception("ID has to be non-zero for default priority.");
            //}

            header.number2 = header.number2 * indexMode;

            List<TemplateParameter> parameters = new List<TemplateParameter>();
            for (int i = 1; i < lines.Count; i++)
            {
                ParsedLine line = lines[i].ParsedLine;
                line.number1 *= indexMode;
                line.number2 *= indexMode;
                TemplateParameter param = ParsedLine.ParseParameter(line);
                parameters.Add(param);
            }

            ICodeTemplate code;
            if (itemList)
            {
                code = new TerminatingStringTemplate(header.name, parameters, endingByte, offsetMod);
            }
            else
            {
                code = new CodeTemplate(header.name, header.number1, header.number2, parameters, canBeRepeated, checkForProblems, endingCode, offsetMod, canBeAssembled, canBeDisAssembled);
            }
            return code;
        }
 public static void WriteDoc(TextWriter writer, TerminatingStringTemplate template)
 {
     writer.WriteLine("{0} {1}1 {1}2 ... {1}N", (object)template.name, (object)template.parameter.name);
 }
 private static void WriteDoc(System.IO.TextWriter writer, TerminatingStringTemplate template)
 {
     writer.WriteLine("{0} {1}1 {1}2 ... {1}N", template.Name, template.Parameter.Name);
 }