1 // -*- C++ -*- 2 /** 3 * \file Author.h 4 * This file is part of LyX, the document processor. 5 * Licence details can be found in the file COPYING. 6 * 7 * \author John Levon 8 * 9 * Full author contact details are available in file CREDITS. 10 */ 11 12 #ifndef AUTHOR_H 13 #define AUTHOR_H 14 15 #include "support/docstring.h" 16 17 #include <vector> 18 19 20 namespace lyx { 21 22 class Author { 23 public: 24 /// Author()25 Author() : used_(false), buffer_id_(0) {}; 26 /// 27 Author(docstring const & name, docstring const & email); 28 /// For when the \author line is missing (#9854) 29 Author(int buffer_id); 30 /// name()31 docstring name() const { return name_; } 32 /// email()33 docstring email() const { return email_; } 34 /// 35 docstring nameAndEmail() const; 36 /// bufferId()37 int bufferId() const { return buffer_id_; } 38 /// setBufferId(int buffer_id)39 void setBufferId(int buffer_id) const { buffer_id_ = buffer_id; } 40 /// setUsed(bool u)41 void setUsed(bool u) const { used_ = u; } 42 /// used()43 bool used() const { return used_; } 44 /// Was the author line not missing? 45 bool valid() const; 46 /// 47 friend std::istream & operator>>(std::istream & os, Author & a); 48 /// 49 friend std::ostream & operator<<(std::ostream & os, Author const & a); 50 51 private: 52 /// The author's name 53 docstring name_; 54 /// The author's email address 55 docstring email_; 56 /// 57 mutable bool used_; 58 /// The id of the author in the lyx-file 59 mutable int buffer_id_; 60 }; 61 62 63 class AuthorList { 64 public: 65 /// 66 AuthorList(); 67 /// 68 int record(Author const & a); 69 /// 70 void record(int id, Author const & a); 71 /// 72 void recordCurrentAuthor(Author const & a); 73 /// 74 Author const & get(int id) const; 75 /// 76 void sort(); 77 /// 78 typedef std::vector<Author> Authors; 79 /// 80 Authors::const_iterator begin() const; 81 /// 82 Authors::const_iterator end() const; 83 /// 84 friend 85 std::ostream & operator<<(std::ostream & os, AuthorList const & a); 86 private: 87 /// 88 Authors authors_; 89 }; 90 91 bool operator==(Author const & l, Author const & r); 92 93 std::ostream & operator<<(std::ostream & os, Author const & a); 94 95 std::istream & operator>>(std::istream & os, Author & a); 96 97 98 } // namespace lyx 99 100 #endif // AUTHOR_H 101