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 char const *stristr(const char *haystack, const char *needle)
41  {
42  size_t needle_len = strlen(needle);
43  for (const char *p = haystack; *p; p++) {
44  if (strnicmp(p, needle, needle_len) == 0) {
45  return p;
46  }
47  }
48  return nullptr;
49  }
50 
51  static QString getApplicationDir();
52  // static std::vector<std::string_view> splitLines(const QByteArray &ba);
53  static QStringList splitLines(QByteArray const &ba, std::function<QString(char const *ptr, size_t len)> const &tos);
54  static QStringList splitLines(QString const &text);
55  static std::vector<std::string_view> splitLinesV(const std::string_view &str, bool keep_newline);
56  static std::vector<std::string_view> splitLinesV(QByteArray const &ba, bool keep_newline);
57  static std::vector<std::string> splitLines(std::string_view const &str, bool keep_newline);
58  static std::vector<std::string_view> splitWords(std::string_view const &text);
59  static QStringList splitWords(QString const &text);
60  static QString getFileName(QString const &path);
61  static QString makeDateTimeString(const QDateTime &dt);
62  static bool starts_with(std::string const &str, std::string const &with);
63  static bool ends_with(std::string const &str, std::string const &with);
64  static std::string mid(std::string const &str, int start, int length = -1);
65  static QString normalizePathSeparator(QString const &str);
66  static QString joinWithSlash(QString const &left, QString const &right);
67  static void setFixedSize(QWidget *w);
68  static void drawFrame(QPainter *pr, int x, int y, int w, int h, QColor color_topleft, QColor color_bottomright = QColor());
69  static void dump(const uint8_t *ptr, size_t len);
70  static void dump(QByteArray const *in);
71  static bool isText(std::string const &mimetype);
72  static bool isImage(std::string const &mimetype);
73  static bool isSVG(std::string const &mimetype);
74  static bool isPSD(std::string const &mimetype);
75  static bool isPDF(std::string const &mimetype);
76  static QString abbrevBranchName(QString const &name);
77  static std::string makeProxyServerURL(std::string text);
78  static QString makeProxyServerURL(QString text);
79  static QPoint contextMenuPos(QWidget *w, QContextMenuEvent *e);
80  static bool isExecutable(QString const &cmd);
81 
82  static QString collapseWhitespace(QString const &source);
83  static bool isValidMailAddress(const QString &email);
84  static bool isValidMailAddress(std::string const &email);
85 
86  static std::string_view trimmed(std::string_view const &s);
87  static std::string_view trimQuotes(std::string_view s);
88  static std::string_view trimNewLines(std::string_view s);
89 
90  static std::string bin_to_hex_string(const void *begin, const void *end);
91  static std::vector<uint8_t> hex_string_to_bin(std::string_view const &s, const char *sep = nullptr);
92 
93  static int compare(uint8_t const *a, size_t n, uint8_t const *b, size_t m);
94  static int compare(std::vector<uint8_t> const &a, std::vector<uint8_t> const &b);
95 
96  static std::vector<std::string> vector_string(std::vector<std::string_view> const &v)
97  {
98  std::vector<std::string> out;
99  for (auto const &s : v) {
100  out.emplace_back(s);
101  }
102  return out;
103  }
104 
105  template <typename T>
106  static inline T toi(std::string_view const &s, size_t *consumed = nullptr)
107  {
108  T n = 0;
109  size_t i = 0;
110  bool sign = false;
111  if (!s.empty()) {
112  while (i < s.size() && isspace((unsigned char)s[i])) {
113  i++;
114  }
115  if (i < s.size()) {
116  if (s[i] == '+') {
117  i++;
118  } else if (s[i] == '-') {
119  sign = true;
120  i++;
121  }
122  }
123  while (i < s.size()) {
124  if (s[i] < '0' || s[i] > '9') break;
125  n = n * 10 + (s[i] - '0');
126  i++;
127  }
128  }
129  if (consumed) {
130  *consumed = i;
131  }
132  return sign ? -n : n;
133  }
134 };
135 
136 #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:96
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 char const * stristr(const char *haystack, const char *needle)
Definition: misc.h:40
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:106