--- nono/lib/mystring.h 2026/04/29 17:04:28 1.1 +++ nono/lib/mystring.h 2026/04/29 17:04:54 1.1.1.4 @@ -1,8 +1,48 @@ // // nono -// Copyright (C) 2018 isaki@NetBSD.org +// Copyright (C) 2020 nono project +// Licensed under nono-license.txt // #pragma once +#include "header.h" +#include + extern std::string string_format(const char *fmt, ...) __printflike(1, 2); + +// 先頭の連続する空白文字列を取り除いた新しい文字列を返す +extern std::string string_ltrim(const std::string& str); + +// 末尾の連続する空白文字列を取り除く +extern void string_rtrim(std::string& str); + +// 末尾の連続する空白文字列を取り除く (char *版) +extern void rtrim(char *str); + +// 文字列中の ASCII 大文字を小文字にした新しい文字列を返す +extern std::string string_tolower(const std::string& str); + +// 文字列 lhs の先頭が rhs と大文字小文字の区別なしで一致すれば true を返す。 +// ASCII 専用。 +extern bool +starts_with_ignorecase(const std::string& lhs, const std::string& rhs); + +// 文字列 str (長さ len) を文字 c で分割したリストを返す +// (実際には以下2つのどちらかを呼ぶことになるはず)。 +// +// str に c が含まれてなければ str 全体が1つの要素。 +// c が str の先頭あるいは末尾にあれば、先頭(末尾) に空要素が出来る。 +// 連続する c は同一の区切りとはみなさない。 +// c は ',' のようなのを想定している。 +extern std::vector string_split(const char *str, int len, char c); + +// 文字列 str を文字 c で分割したリストを返す。 +static inline std::vector string_split(const char *str, char c) { + return string_split(str, strlen(str), c); +} +// 文字列 str を文字 c で分割したリストを返す。 +static inline std::vector string_split(const std::string& str, + char c) { + return string_split(str.c_str(), str.size(), c); +}