//========================================================================
//
// This file is under the GPLv2 or later license
//
// Copyright (C) 2005-2006 Kristian Høgsberg <krh@redhat.com>
// Copyright (C) 2005, 2018, 2019 Albert Astals Cid <aacid@kde.org>
// Copyright (C) 2018 Adam Reichold <adam.reichold@t-online.de>
// Copyright (C) 2019 Oliver Sander <oliver.sander@tu-dresden.de>
//
// To see a description of the changes please see the Changelog file that
// came with your tarball or type make ChangeLog if you are building from git
//
//========================================================================

#ifndef PAGELABELINFO_H
#define PAGELABELINFO_H

#include <limits.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <assert.h>
#include <string>
#include <vector>

#include "Object.h"

class PageLabelInfo {
public:
  PageLabelInfo(Object *tree, int numPages);

  PageLabelInfo(const PageLabelInfo &) = delete;
  PageLabelInfo& operator=(const PageLabelInfo &) = delete;

  bool labelToIndex(GooString *label, int *index) const;
  bool indexToLabel(int index, GooString *label) const;

private:
  void parse(Object *tree);

private:
  struct Interval {
    Interval(Object *dict, int baseA);

    std::string prefix;
    enum NumberStyle {
      None,
      Arabic,
      LowercaseRoman,
      UppercaseRoman,
      UppercaseLatin,
      LowercaseLatin
    } style;
    int first, base, length;
  };

  std::vector<Interval> intervals;
};

#endif
