lang_file_parser.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /*
  2. This file is part of Telegram Desktop,
  3. the official desktop application for the Telegram messaging service.
  4. For license and copyright information please follow this link:
  5. https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
  6. */
  7. #pragma once
  8. #include "lang/lang_keys.h"
  9. #include <set>
  10. #include <QtCore/QMap>
  11. namespace Lang {
  12. class FileParser {
  13. public:
  14. using Result = QMap<ushort, QString>;
  15. FileParser(const QString &file, const std::set<ushort> &request);
  16. FileParser(const QByteArray &content, Fn<void(QLatin1String key, const QByteArray &value)> callback);
  17. static QByteArray ReadFile(const QString &absolutePath, const QString &relativePath);
  18. const QString &errors() const;
  19. const QString &warnings() const;
  20. Result found() const {
  21. return _result;
  22. }
  23. private:
  24. void parse();
  25. bool error(const QString &text) {
  26. _errorsList.push_back(text);
  27. return false;
  28. }
  29. void warning(const QString &text) {
  30. _warningsList.push_back(text);
  31. }
  32. bool readKeyValue(const char *&from, const char *end);
  33. mutable QStringList _errorsList, _warningsList;
  34. mutable QString _errors, _warnings;
  35. const QByteArray _content;
  36. const std::set<ushort> _request;
  37. const Fn<void(QLatin1String key, const QByteArray &value)> _callback;
  38. Result _result;
  39. };
  40. } // namespace Lang