1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef TOOLS_GN_SUBSTUTITION_LIST_H
6#define TOOLS_GN_SUBSTUTITION_LIST_H
7
8#include <string>
9#include <vector>
10
11#include "tools/gn/substitution_pattern.h"
12
13// Represents a list of strings with {{substitution_patterns}} in them.
14class SubstitutionList {
15 public:
16  SubstitutionList();
17  ~SubstitutionList();
18
19  bool Parse(const Value& value, Err* err);
20  bool Parse(const std::vector<std::string>& values,
21             const ParseNode* origin,
22             Err* err);
23
24  // Makes a SubstitutionList from the given hardcoded patterns.
25  static SubstitutionList MakeForTest(
26      const char* a,
27      const char* b = NULL,
28      const char* c = NULL);
29
30  const std::vector<SubstitutionPattern>& list() const { return list_; }
31
32  // Returns a list of all substitution types used by the patterns in thist
33  // list, with the exception of LITERAL.
34  const std::vector<SubstitutionType>& required_types() const {
35    return required_types_;
36  }
37
38  void FillRequiredTypes(SubstitutionBits* bits) const;
39
40 private:
41  std::vector<SubstitutionPattern> list_;
42
43  std::vector<SubstitutionType> required_types_;
44};
45
46#endif  // TOOLS_GN_SUBSTUTITION_LIST_H
47