// Copyright 2020 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef FOOMATIC_SHELL_SCANNER_H_
#define FOOMATIC_SHELL_SCANNER_H_

#include "foomatic_shell/grammar.h"

#include <memory>
#include <string>
#include <vector>

namespace foomatic_shell {

// Converts a script into a sequences of Tokens.  See the struct Token defined
// in grammar.h.
class Scanner {
 public:
  // Constructor. |data| is a reference to the input buffer. The input buffer
  // must be constant and valid during the lifetime of this object.
  explicit Scanner(const std::string& data);

  ~Scanner();
  Scanner(const Scanner&) = delete;
  Scanner(Scanner&&) = delete;

  // Parses the input given in the constructor and stores the resultant
  // sequence in |tokens|. Returns true when succeed. Otherwise it stops
  // on the first error and returns false. |tokens| must not be nullptr.
  bool ParseWholeInput(std::vector<Token>* tokens);

  // Returns the current position of the scanner as an iterator of the string
  // given in the constructor. It is used to report a position of the error
  // when the method ParseWholeInput(...) fails.
  std::string::const_iterator GetPosition() const;

  // Returns an error message if the call ParseWholeInput(...) failed.
  // Returns an empty string if the call succeeded.
  const std::string& GetMessage() const { return message_; }

 private:
  bool ParseLiteralString(std::vector<Token>* tokens);
  bool ParseExecutedString(std::vector<Token>* tokens);
  bool ParseInterpretedString(std::vector<Token>* tokens);
  bool ParseNativeString(std::vector<Token>* tokens);
  class Input;
  std::unique_ptr<Input> data_;
  std::string message_;
};

}  // namespace foomatic_shell

#endif  // FOOMATIC_SHELL_SCANNER_H_
