OLD | NEW |
1 // Protocol Buffers - Google's data interchange format | 1 // Protocol Buffers - Google's data interchange format |
2 // Copyright 2008 Google Inc. All rights reserved. | 2 // Copyright 2008 Google Inc. All rights reserved. |
3 // https://developers.google.com/protocol-buffers/ | 3 // https://developers.google.com/protocol-buffers/ |
4 // | 4 // |
5 // Redistribution and use in source and binary forms, with or without | 5 // Redistribution and use in source and binary forms, with or without |
6 // modification, are permitted provided that the following conditions are | 6 // modification, are permitted provided that the following conditions are |
7 // met: | 7 // met: |
8 // | 8 // |
9 // * Redistributions of source code must retain the above copyright | 9 // * Redistributions of source code must retain the above copyright |
10 // notice, this list of conditions and the following disclaimer. | 10 // notice, this list of conditions and the following disclaimer. |
(...skipping 647 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
658 // Helper class for collecting comments and putting them in the right places. | 658 // Helper class for collecting comments and putting them in the right places. |
659 // | 659 // |
660 // This basically just buffers the most recent comment until it can be decided | 660 // This basically just buffers the most recent comment until it can be decided |
661 // exactly where that comment should be placed. When Flush() is called, the | 661 // exactly where that comment should be placed. When Flush() is called, the |
662 // current comment goes into either prev_trailing_comments or detached_comments. | 662 // current comment goes into either prev_trailing_comments or detached_comments. |
663 // When the CommentCollector is destroyed, the last buffered comment goes into | 663 // When the CommentCollector is destroyed, the last buffered comment goes into |
664 // next_leading_comments. | 664 // next_leading_comments. |
665 class CommentCollector { | 665 class CommentCollector { |
666 public: | 666 public: |
667 CommentCollector(string* prev_trailing_comments, | 667 CommentCollector(string* prev_trailing_comments, |
668 vector<string>* detached_comments, | 668 std::vector<string>* detached_comments, |
669 string* next_leading_comments) | 669 string* next_leading_comments) |
670 : prev_trailing_comments_(prev_trailing_comments), | 670 : prev_trailing_comments_(prev_trailing_comments), |
671 detached_comments_(detached_comments), | 671 detached_comments_(detached_comments), |
672 next_leading_comments_(next_leading_comments), | 672 next_leading_comments_(next_leading_comments), |
673 has_comment_(false), | 673 has_comment_(false), |
674 is_line_comment_(false), | 674 is_line_comment_(false), |
675 can_attach_to_prev_(true) { | 675 can_attach_to_prev_(true) { |
676 if (prev_trailing_comments != NULL) prev_trailing_comments->clear(); | 676 if (prev_trailing_comments != NULL) prev_trailing_comments->clear(); |
677 if (detached_comments != NULL) detached_comments->clear(); | 677 if (detached_comments != NULL) detached_comments->clear(); |
678 if (next_leading_comments != NULL) next_leading_comments->clear(); | 678 if (next_leading_comments != NULL) next_leading_comments->clear(); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
730 ClearBuffer(); | 730 ClearBuffer(); |
731 } | 731 } |
732 } | 732 } |
733 | 733 |
734 void DetachFromPrev() { | 734 void DetachFromPrev() { |
735 can_attach_to_prev_ = false; | 735 can_attach_to_prev_ = false; |
736 } | 736 } |
737 | 737 |
738 private: | 738 private: |
739 string* prev_trailing_comments_; | 739 string* prev_trailing_comments_; |
740 vector<string>* detached_comments_; | 740 std::vector<string>* detached_comments_; |
741 string* next_leading_comments_; | 741 string* next_leading_comments_; |
742 | 742 |
743 string comment_buffer_; | 743 string comment_buffer_; |
744 | 744 |
745 // True if any comments were read into comment_buffer_. This can be true even | 745 // True if any comments were read into comment_buffer_. This can be true even |
746 // if comment_buffer_ is empty, namely if the comment was "/**/". | 746 // if comment_buffer_ is empty, namely if the comment was "/**/". |
747 bool has_comment_; | 747 bool has_comment_; |
748 | 748 |
749 // Is the comment in the comment buffer a line comment? | 749 // Is the comment in the comment buffer a line comment? |
750 bool is_line_comment_; | 750 bool is_line_comment_; |
751 | 751 |
752 // Is it still possible that we could be reading a comment attached to the | 752 // Is it still possible that we could be reading a comment attached to the |
753 // previous token? | 753 // previous token? |
754 bool can_attach_to_prev_; | 754 bool can_attach_to_prev_; |
755 }; | 755 }; |
756 | 756 |
757 } // namespace | 757 } // namespace |
758 | 758 |
759 bool Tokenizer::NextWithComments(string* prev_trailing_comments, | 759 bool Tokenizer::NextWithComments(string* prev_trailing_comments, |
760 vector<string>* detached_comments, | 760 std::vector<string>* detached_comments, |
761 string* next_leading_comments) { | 761 string* next_leading_comments) { |
762 CommentCollector collector(prev_trailing_comments, detached_comments, | 762 CommentCollector collector(prev_trailing_comments, detached_comments, |
763 next_leading_comments); | 763 next_leading_comments); |
764 | 764 |
765 if (current_.type == TYPE_START) { | 765 if (current_.type == TYPE_START) { |
766 // Ignore unicode byte order mark(BOM) if it appears at the file | 766 // Ignore unicode byte order mark(BOM) if it appears at the file |
767 // beginning. Only UTF-8 BOM (0xEF 0xBB 0xBF) is accepted. | 767 // beginning. Only UTF-8 BOM (0xEF 0xBB 0xBF) is accepted. |
768 if (TryConsume((char)0xEF)) { | 768 if (TryConsume((char)0xEF)) { |
769 if (!TryConsume((char)0xBB) || !TryConsume((char)0xBF)) { | 769 if (!TryConsume((char)0xBB) || !TryConsume((char)0xBF)) { |
770 AddError("Proto file starts with 0xEF but not UTF-8 BOM. " | 770 AddError("Proto file starts with 0xEF but not UTF-8 BOM. " |
(...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1130 if (!Letter::InClass(text.at(0))) | 1130 if (!Letter::InClass(text.at(0))) |
1131 return false; | 1131 return false; |
1132 if (!AllInClass<Alphanumeric>(text.substr(1))) | 1132 if (!AllInClass<Alphanumeric>(text.substr(1))) |
1133 return false; | 1133 return false; |
1134 return true; | 1134 return true; |
1135 } | 1135 } |
1136 | 1136 |
1137 } // namespace io | 1137 } // namespace io |
1138 } // namespace protobuf | 1138 } // namespace protobuf |
1139 } // namespace google | 1139 } // namespace google |
OLD | NEW |