]> git.saurik.com Git - apt.git/blob - apt-pkg/deb/deblistparser.h
3884aafb9505b5b84cddc93f3707e568e1863892
[apt.git] / apt-pkg / deb / deblistparser.h
1 // -*- mode: cpp; mode: fold -*-
2 // Description /*{{{*/
3 // $Id: deblistparser.h,v 1.9 2001/02/20 07:03:17 jgg Exp $
4 /* ######################################################################
5
6 Debian Package List Parser - This implements the abstract parser
7 interface for Debian package files
8
9 ##################################################################### */
10 /*}}}*/
11 #ifndef PKGLIB_DEBLISTPARSER_H
12 #define PKGLIB_DEBLISTPARSER_H
13
14 #include <apt-pkg/pkgcachegen.h>
15 #include <apt-pkg/tagfile.h>
16 #include <apt-pkg/md5.h>
17 #include <apt-pkg/pkgcache.h>
18 #include <apt-pkg/macros.h>
19
20 #include <string>
21 #include <vector>
22
23 #ifndef APT_8_CLEANER_HEADERS
24 #include <apt-pkg/indexfile.h>
25 #endif
26
27 class FileFd;
28
29 class APT_HIDDEN debListParser : public pkgCacheGenerator::ListParser
30 {
31 public:
32
33 // Parser Helper
34 struct WordList
35 {
36 const char *Str;
37 unsigned char Val;
38 };
39
40 private:
41 /** \brief dpointer placeholder (for later in case we need it) */
42 void * const d;
43
44 protected:
45 pkgTagFile Tags;
46 pkgTagSection Section;
47 map_filesize_t iOffset;
48 std::string Arch;
49 std::vector<std::string> Architectures;
50 bool MultiArchEnabled;
51
52 virtual bool ParseStatus(pkgCache::PkgIterator &Pkg,pkgCache::VerIterator &Ver);
53 bool ParseDepends(pkgCache::VerIterator &Ver,const char *Tag,
54 unsigned int Type);
55 bool ParseProvides(pkgCache::VerIterator &Ver);
56 bool NewProvidesAllArch(pkgCache::VerIterator &Ver, std::string const &Package, std::string const &Version);
57 static bool GrabWord(std::string Word,WordList *List,unsigned char &Out);
58 APT_HIDDEN unsigned char ParseMultiArch(bool const showErrors);
59
60 public:
61
62 APT_PUBLIC static unsigned char GetPrio(std::string Str);
63
64 // These all operate against the current section
65 virtual std::string Package() APT_OVERRIDE;
66 virtual std::string Architecture() APT_OVERRIDE;
67 virtual bool ArchitectureAll() APT_OVERRIDE;
68 virtual std::string Version() APT_OVERRIDE;
69 virtual bool NewVersion(pkgCache::VerIterator &Ver) APT_OVERRIDE;
70 virtual std::string Description(std::string const &lang) APT_OVERRIDE;
71 virtual std::vector<std::string> AvailableDescriptionLanguages() APT_OVERRIDE;
72 virtual MD5SumValue Description_md5() APT_OVERRIDE;
73 virtual unsigned short VersionHash() APT_OVERRIDE;
74 virtual bool SameVersion(unsigned short const Hash, pkgCache::VerIterator const &Ver) APT_OVERRIDE;
75 virtual bool UsePackage(pkgCache::PkgIterator &Pkg,
76 pkgCache::VerIterator &Ver) APT_OVERRIDE;
77 virtual map_filesize_t Offset() APT_OVERRIDE {return iOffset;};
78 virtual map_filesize_t Size() APT_OVERRIDE {return Section.size();};
79
80 virtual bool Step() APT_OVERRIDE;
81
82 bool LoadReleaseInfo(pkgCache::RlsFileIterator &FileI,FileFd &File,
83 std::string const &section);
84
85 APT_PUBLIC static const char *ParseDepends(const char *Start,const char *Stop,
86 std::string &Package,std::string &Ver,unsigned int &Op);
87 APT_PUBLIC static const char *ParseDepends(const char *Start,const char *Stop,
88 std::string &Package,std::string &Ver,unsigned int &Op,
89 bool const &ParseArchFlags);
90 APT_PUBLIC static const char *ParseDepends(const char *Start,const char *Stop,
91 std::string &Package,std::string &Ver,unsigned int &Op,
92 bool const &ParseArchFlags, bool const &StripMultiArch);
93 APT_PUBLIC static const char *ParseDepends(const char *Start,const char *Stop,
94 std::string &Package,std::string &Ver,unsigned int &Op,
95 bool const &ParseArchFlags, bool const &StripMultiArch,
96 bool const &ParseRestrictionsList);
97
98 APT_PUBLIC static const char *ConvertRelation(const char *I,unsigned int &Op);
99
100 debListParser(FileFd *File, std::string const &Arch = "");
101 virtual ~debListParser();
102 };
103
104 class APT_HIDDEN debDebFileParser : public debListParser
105 {
106 private:
107 std::string DebFile;
108
109 public:
110 debDebFileParser(FileFd *File, std::string const &DebFile);
111 virtual bool UsePackage(pkgCache::PkgIterator &Pkg,
112 pkgCache::VerIterator &Ver) APT_OVERRIDE;
113 };
114
115 class APT_HIDDEN debTranslationsParser : public debListParser
116 {
117 public:
118 // a translation can never be a real package
119 virtual std::string Architecture() APT_OVERRIDE { return ""; }
120 virtual std::string Version() APT_OVERRIDE { return ""; }
121
122 debTranslationsParser(FileFd *File, std::string const &Arch = "")
123 : debListParser(File, Arch) {};
124 };
125
126 #endif