static SAddLineResult AddLine(CKey inParent, CKey inCurrentArrayKey, CTokenLine line, ITreeBuildSupport inSupport, CBuildCommands inCommands) { SAddLineResult result = new SAddLineResult(); if (line.IsEmpty()) { if (line.Comments != null) { inCommands.SetNextLineComment(line.Comments.Text, line.Position.Line, inParent); } result.current_array_key = inCurrentArrayKey; } else if (line.IsRecordDivider()) { result.current_array_key = null; result.WasRecordDivider = true; } else if (line.IsCommandLine()) { result.current_array_key = ExecuteCommand(inParent, inCurrentArrayKey, line, inSupport, inCommands); } else if (line.Head != null) { result.current_array_key = inCurrentArrayKey; if (result.current_array_key == null) { result.current_array_key = CreateNewArrayKey(inParent, line, inCommands); } if (line.AdditionMode == EKeyAddingMode.AddUnique && result.current_array_key.IsKeyWithNamePresent(line.Head.Text)) { inSupport.GetLogger().LogError(EErrorCode.ElementWithNameAlreadyPresent, line); } result.last_key_add_mode = line.AdditionMode; result.last_record_key = CKey.Create(result.current_array_key, line, inSupport.GetLogger()); if (inCommands.IsNextLineCommentPresent) { result.last_record_key.AddComments(inCommands.PopNextLineComments(inParent)); } } else if (!line.IsTailEmpty) { //if (!line.IsNewArrayLine && line.TailLength == 1 && !inParent.IsArray) // inParent.AddTokenTail(line, true, inSupport.GetLogger()); //else { result.current_array_key = CreateNewArrayKey(inParent, line, inCommands); result.current_array_key.AddTokenTail(line, inSupport.GetLogger()); } } return(result); }
static SCollectResult Collect(CKey inParent, int inParentRank, List <CTokenLine> inLines, int inStartIndex, ITreeBuildSupport inSupport, CBuildCommands inCommands) { SAddLineResult current_state = new SAddLineResult(); int curr_rank = inParentRank + 1; bool rec_divider_was = false; int i = inStartIndex; while (i < inLines.Count) { int t = i; CTokenLine line = inLines[i]; if (!line.IsEmpty() || line.Comments != null) { if (line.Rank < curr_rank) { OnClosingKey(current_state.last_record_key, current_state.last_key_add_mode, inSupport); return(new SCollectResult { CurrentLineIndex = i, WasRecordDivider = rec_divider_was }); } else if (line.Rank > curr_rank) { if (current_state.last_record_key == null) { current_state.last_record_key = CreateNewArrayKey(inParent, line, inCommands); } SCollectResult collect_res = Collect(current_state.last_record_key, curr_rank, inLines, i, inSupport, inCommands); if (!collect_res.WasRecordDivider) { current_state.last_record_key.CheckOnOneArray(); } i = collect_res.CurrentLineIndex; } else { OnClosingKey(current_state.last_record_key, current_state.last_key_add_mode, inSupport); current_state = AddLine(inParent, current_state.current_array_key, line, inSupport, inCommands); if (current_state.WasRecordDivider) { rec_divider_was = true; } } } if (t == i) { i++; } } //if (!rec_divider_was && current_state.current_array_key != null) // current_state.current_array_key.CheckOnOneArray(); OnClosingKey(current_state.last_record_key, current_state.last_key_add_mode, inSupport); return(new SCollectResult { CurrentLineIndex = i, WasRecordDivider = rec_divider_was }); }