|
1 | 1 | using System; |
2 | 2 | using System.Collections.Generic; |
3 | 3 | using System.Linq; |
4 | | -using System.Text; |
5 | 4 | using Irony.Parsing; |
6 | 5 |
|
7 | 6 | namespace XLParser |
@@ -425,51 +424,35 @@ public static IEnumerable<ParserReference> GetParserReferences(this ParseTreeNod |
425 | 424 | default: |
426 | 425 | if (node.IsRange()) |
427 | 426 | { |
428 | | - var rangeStart = GetParserReferences(node.ChildNodes[0].SkipToRelevant()).ToArray(); |
429 | | - var rangeEnd = GetParserReferences(node.ChildNodes[2].SkipToRelevant()).ToArray(); |
430 | | - if (IsCellReference(rangeStart) && IsCellReference(rangeEnd)) |
| 427 | + var rangeStart = GetParserReferences(node.ChildNodes[0].SkipToRelevant()).First(); |
| 428 | + var rangeEnd = GetParserReferences(node.ChildNodes[2].SkipToRelevant()).First(); |
| 429 | + if (rangeStart.ReferenceType == ReferenceType.Cell && rangeEnd.ReferenceType == ReferenceType.Cell) |
431 | 430 | { |
432 | | - ParserReference range = rangeStart.First(); |
433 | | - range.MaxLocation = rangeEnd.First().MinLocation; |
| 431 | + ParserReference range = rangeStart; |
| 432 | + range.MaxLocation = rangeEnd.MinLocation; |
434 | 433 | range.ReferenceType = ReferenceType.CellRange; |
435 | 434 | range.ReferenceNode = node; |
436 | 435 | range.LocationString = node.Print(); |
437 | 436 | list.Add(range); |
| 437 | + break; |
438 | 438 | } |
439 | | - else if (IsTableReference(rangeStart) && IsTableReference(rangeEnd) && rangeStart.First().Name == rangeEnd.First().Name && rangeStart.First().TableColumns.Length == 1 && rangeEnd.First().TableColumns.Length == 1) |
| 439 | + if (rangeStart.ReferenceType == ReferenceType.Table && rangeEnd.ReferenceType == ReferenceType.Table && rangeStart.Name == rangeEnd.Name && rangeStart.TableColumns.Length == 1 && rangeEnd.TableColumns.Length == 1) |
440 | 440 | { |
441 | | - ParserReference range = rangeStart.First(); |
442 | | - range.TableColumns = rangeStart.First().TableColumns.Concat(rangeEnd.First().TableColumns).ToArray(); |
443 | | - range.TableSpecifiers = rangeStart.First().TableSpecifiers.SequenceEqual(rangeEnd.First().TableSpecifiers) ? range.TableSpecifiers : new string[0]; |
| 441 | + ParserReference range = rangeStart; |
| 442 | + range.TableColumns = rangeStart.TableColumns.Concat(rangeEnd.TableColumns).ToArray(); |
| 443 | + range.TableSpecifiers = rangeStart.TableSpecifiers.SequenceEqual(rangeEnd.TableSpecifiers) ? range.TableSpecifiers : new string[0]; |
444 | 444 | range.ReferenceNode = node; |
445 | 445 | range.LocationString = node.Print(); |
446 | 446 | list.Add(range); |
447 | | - } |
448 | | - else |
449 | | - { |
450 | | - list.AddRange(rangeStart); |
451 | | - list.AddRange(rangeEnd); |
| 447 | + break; |
452 | 448 | } |
453 | 449 | } |
454 | | - else |
455 | | - { |
456 | | - list.AddRange(node.GetReferenceNodes().SelectMany(x => x.GetParserReferences())); |
457 | | - } |
| 450 | + list.AddRange(node.GetReferenceNodes().SelectMany(x => x.GetParserReferences())); |
458 | 451 | break; |
459 | 452 | } |
460 | 453 | return list; |
461 | 454 | } |
462 | 455 |
|
463 | | - private static bool IsCellReference(IList<ParserReference> references) |
464 | | - { |
465 | | - return references.Count == 1 && references.First().ReferenceType == ReferenceType.Cell; |
466 | | - } |
467 | | - |
468 | | - private static bool IsTableReference(IList<ParserReference> references) |
469 | | - { |
470 | | - return references.Count == 1 && references.First().ReferenceType == ReferenceType.Table; |
471 | | - } |
472 | | - |
473 | 456 | /// <summary> |
474 | 457 | /// Whether or not this node represents a range |
475 | 458 | /// </summary> |
|
0 commit comments