bibhtml  1.0
 All Classes Functions Variables Enumerations
bibstyle.hpp
1 
2 // bibhtml: Generates HTML page (with images) from BibTex files
3 // See: https://www.telecom-paris.fr/~elc/software/
4 //
5 // Copyright 2020 Eric Lecolinet (eric.lecolinet@gmail.com)
6 //
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
10 //
11 // http://www.apache.org/licenses/LICENSE-2.0
12 //
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
18 
19 #ifndef __BibStyle__
20 #define __BibStyle__
21 #include <iostream>
22 #include <fstream>
23 #include <vector>
24 #include <map>
25 #include "bibentry.hpp"
26 
27 class Bib;
28 
32 class FieldStyle {
33  friend class TypeStyle;
34  enum {None, Separator, Text, Link, Button} type{None};
35  BibFields::ID field{BibFields::none};
36  bool breakline{false};
37  std::string prefix, brprefix, name, img, suffix;
38 };
39 
40 
45 class TypeStyle {
46  friend class BibStyle;
47 
49  void parse(Bib&, std::string pattern);
50 
52  bool write(Bib&, std::ostream&, const BibEntry&, int number) const;
53 
54 private:
55  std::vector<FieldStyle*> fields;
56 };
57 
58 
69 class BibStyle {
70 public:
71  static BibStyle* createStyle(Bib&, const std::string& format);
72  static BibStyle* createStyle(Bib&, const BibEntry& styleRef);
73 
75  void write(Bib&, const std::string& filename, const BibEntries&) const;
76 
77 private:
78  TypeStyle defaultTypeStyle_;
79  std::map<BibTypes::ID, TypeStyle> typeStyles_;
80 };
81 
82 #endif