Guitar
misc.h
Go to the documentation of this file.
1 #ifndef MISC_H
2 #define MISC_H
3 
4 #include <QApplication>
5 #include <QStringList>
6 #include <QDateTime>
7 #include <functional>
8 #include <vector>
9 #include <cstdint>
10 #include <QColor>
11 
12 #if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
13 #define _SkipEmptyParts QString::SkipEmptyParts
14 #else
15 #define _SkipEmptyParts Qt::SkipEmptyParts
16 #endif
17 
18 class QContextMenuEvent;
19 
20 class misc {
21 public:
22  static int stricmp(char const *s1, char const *s2)
23  {
24 #ifdef _WIN32
25  return ::stricmp(s1, s2);
26 #else
27  return ::strcasecmp(s1, s2);
28 #endif
29  }
30 
31  static int strnicmp(char const *s1, char const *s2, size_t n)
32  {
33 #ifdef _WIN32
34  return ::strnicmp(s1, s2, n);
35 #else
36  return ::strncasecmp(s1, s2, n);
37 #endif
38  }
39 
40  static QString getApplicationDir();
41  // static std::vector<std::string_view> splitLines(const QByteArray &ba);
42  static QStringList splitLines(QByteArray const &ba, std::function<QString(char const *ptr, size_t len)> const &tos);
43  static QStringList splitLines(QString const &text);
44  static std::vector<std::string_view> splitLinesV(const std::string_view &str, bool keep_newline);
45  static std::vector<std::string_view> splitLinesV(QByteArray const &ba, bool keep_newline);
46  static std::vector<std::string> splitLines(std::string_view const &str, bool keep_newline);
47  static std::vector<std::string_view> splitWords(std::string_view const &text);
48  static QStringList splitWords(QString const &text);
49  static QString getFileName(QString const &path);
50  static QString makeDateTimeString(const QDateTime &dt);
51  static bool starts_with(std::string const &str, std::string const &with);
52  static bool ends_with(std::string const &str, std::string const &with);
53  static std::string mid(std::string const &str, int start, int length = -1);
54  static QString normalizePathSeparator(QString const &str);
55  static QString joinWithSlash(QString const &left, QString const &right);
56  static void setFixedSize(QWidget *w);
57  static void drawFrame(QPainter *pr, int x, int y, int w, int h, QColor color_topleft, QColor color_bottomright = QColor());
58  static void dump(const uint8_t *ptr, size_t len);
59  static void dump(QByteArray const *in);
60  static bool isText(std::string const &mimetype);
61  static bool isImage(std::string const &mimetype);
62  static bool isSVG(std::string const &mimetype);
63  static bool isPSD(std::string const &mimetype);
64  static bool isPDF(std::string const &mimetype);
65  static QString abbrevBranchName(QString const &name);
66  static std::string makeProxyServerURL(std::string text);
67  static QString makeProxyServerURL(QString text);
68  static QPoint contextMenuPos(QWidget *w, QContextMenuEvent *e);
69  static bool isExecutable(QString const &cmd);
70 
71  static QString collapseWhitespace(QString const &source);
72  static bool isValidMailAddress(const QString &email);
73  static bool isValidMailAddress(std::string const &email);
74 
75  static std::string_view trimmed(std::string_view const &s);
76  static std::string_view trimQuotes(std::string_view s);
77  static std::string_view trimNewLines(std::string_view s);
78 
79  static std::string bin_to_hex_string(const void *begin, const void *end);
80  static std::vector<uint8_t> hex_string_to_bin(std::string_view const &s, const char *sep = nullptr);
81 
82  static int compare(uint8_t const *a, size_t n, uint8_t const *b, size_t m);
83  static int compare(std::vector<uint8_t> const &a, std::vector<uint8_t> const &b);
84 
85  static std::vector<std::string> vector_string(std::vector<std::string_view> const &v)
86  {
87  std::vector<std::string> out;
88  for (auto const &s : v) {
89  out.emplace_back(s);
90  }
91  return out;
92  }
93 
94  template <typename T>
95  static inline T toi(std::string_view const &s, size_t *consumed = nullptr)
96  {
97  T n = 0;
98  size_t i = 0;
99  bool sign = false;
100  if (!s.empty()) {
101  while (i < s.size() && isspace((unsigned char)s[i])) {
102  i++;
103  }
104  if (i < s.size()) {
105  if (s[i] == '+') {
106  i++;
107  } else if (s[i] == '-') {
108  sign = true;
109  i++;
110  }
111  }
112  while (i < s.size()) {
113  if (s[i] < '0' || s[i] > '9') break;
114  n = n * 10 + (s[i] - '0');
115  i++;
116  }
117  }
118  if (consumed) {
119  *consumed = i;
120  }
121  return sign ? -n : n;
122  }
123 };
124 
125 #endif // MISC_H
Definition: misc.h:20
static std::string_view trimQuotes(std::string_view s)
文字列の両端から空白文字と引用符を取り除く
Definition: misc.cpp:795
static bool isExecutable(QString const &cmd)
ファイルが実行可能か判定する
Definition: misc.cpp:699
static bool isSVG(std::string const &mimetype)
MIMEタイプがSVG画像を表すか判定する
Definition: misc.cpp:539
static int strnicmp(char const *s1, char const *s2, size_t n)
Definition: misc.h:31
static std::vector< uint8_t > hex_string_to_bin(std::string_view const &s, const char *sep=nullptr)
16進数文字列をバイナリデータに変換する
Definition: misc.cpp:883
static QString makeDateTimeString(const QDateTime &dt)
日時を文字列に変換する
Definition: misc.cpp:268
static std::vector< std::string_view > splitWords(std::string_view const &text)
文字列を単語に分割する
Definition: misc.cpp:179
static void dump(const uint8_t *ptr, size_t len)
メモリダンプを16進数で表示する
Definition: misc.cpp:462
static QString getApplicationDir()
アプリケーションのディレクトリパスを取得する
Definition: misc.cpp:20
static bool isImage(std::string const &mimetype)
MIMEタイプが画像ファイルを表すか判定する
Definition: misc.cpp:583
static void drawFrame(QPainter *pr, int x, int y, int w, int h, QColor color_topleft, QColor color_bottomright=QColor())
矩形のフレームを描画する。
Definition: misc.cpp:436
static std::vector< std::string > vector_string(std::vector< std::string_view > const &v)
Definition: misc.h:85
static void setFixedSize(QWidget *w)
ウィジェットのサイズを固定する
Definition: misc.cpp:413
static std::vector< std::string_view > splitLinesV(const std::string_view &str, bool keep_newline)
文字列を行に分割する。
Definition: misc.cpp:102
static bool isValidMailAddress(const QString &email)
文字列が有効なメールアドレスか判定する
Definition: misc.cpp:748
static bool starts_with(std::string const &str, std::string const &with)
文字列が指定の文字列で始まるか判定する
Definition: misc.cpp:303
static QString abbrevBranchName(QString const &name)
ブランチ名を短縮形に変換する。
Definition: misc.cpp:612
static bool isPSD(std::string const &mimetype)
MIMEタイプがPhotoshopファイルを表すか判定する
Definition: misc.cpp:554
static bool isPDF(std::string const &mimetype)
MIMEタイプがPDFファイルを表すか判定する
Definition: misc.cpp:568
static std::string_view trimNewLines(std::string_view s)
文字列の両端から改行文字を取り除く
Definition: misc.cpp:818
static std::string_view trimmed(std::string_view const &s)
文字列の両端から空白文字を取り除く
Definition: misc.cpp:777
static std::string mid(std::string const &str, int start, int length=-1)
文字列の一部分を取得する
Definition: misc.cpp:335
static QString normalizePathSeparator(QString const &str)
パスの区切り文字を正規化する
Definition: misc.cpp:381
static std::string bin_to_hex_string(const void *begin, const void *end)
バイナリデータを16進数文字列に変換する
Definition: misc.cpp:856
static int stricmp(char const *s1, char const *s2)
Definition: misc.h:22
static std::string makeProxyServerURL(std::string text)
プロキシサーバーURLを正規化する
Definition: misc.cpp:640
static QString getFileName(QString const &path)
パスからファイル名部分を取得する
Definition: misc.cpp:248
static bool ends_with(std::string const &str, std::string const &with)
文字列が指定の文字列で終わるか判定する
Definition: misc.cpp:317
static QStringList splitLines(QByteArray const &ba, std::function< QString(char const *ptr, size_t len)> const &tos)
QByteArrayの文字列を行に分割する。
Definition: misc.cpp:41
static QPoint contextMenuPos(QWidget *w, QContextMenuEvent *e)
コンテキストメニューを表示する位置を計算する
Definition: misc.cpp:683
static bool isText(std::string const &mimetype)
MIMEタイプがテキストファイルを表すか判定する
Definition: misc.cpp:526
static QString collapseWhitespace(QString const &source)
文字列内の連続する空白文字を1つのスペースにまとめる。
Definition: misc.cpp:713
static QString joinWithSlash(QString const &left, QString const &right)
2つのパスをスラッシュで結合する
Definition: misc.cpp:397
static int compare(uint8_t const *a, size_t n, uint8_t const *b, size_t m)
2つのバイナリデータを比較する
Definition: misc.cpp:920
static T toi(std::string_view const &s, size_t *consumed=nullptr)
Definition: misc.h:95