15struct SConfigDefaultValue;
16struct SSpecialCategory;
18#define HYPRLANG_END_MAGIC 0x1337BEEF
60 return x == rhs.
x &&
y == rhs.
y;
64 return os <<
"[" << rhs.
x <<
", " << rhs.
y <<
"]";
86 void setError(
const std::string& err);
88 std::string errorStdString =
"";
89 const char* errorString =
nullptr;
148 const char*
key =
nullptr;
201 void* data =
nullptr;
202 std::string defaultVal =
"";
203 std::string lastVal =
"";
261 case CONFIGDATATYPE_EMPTY:
throw;
262 case CONFIGDATATYPE_INT:
return std::any(*
reinterpret_cast<INT*
>(m_pData));
263 case CONFIGDATATYPE_FLOAT:
return std::any(*
reinterpret_cast<FLOAT*
>(m_pData));
264 case CONFIGDATATYPE_STR:
return std::any(
reinterpret_cast<STRING>(m_pData));
265 case CONFIGDATATYPE_VEC2:
return std::any(*
reinterpret_cast<VEC2*
>(m_pData));
266 case CONFIGDATATYPE_CUSTOM:
return std::any(
reinterpret_cast<CUSTOMTYPE*
>(m_pData)->data);
283 CONFIGDATATYPE_EMPTY,
285 CONFIGDATATYPE_FLOAT,
288 CONFIGDATATYPE_CUSTOM,
290 eDataType m_eType = eDataType::CONFIGDATATYPE_EMPTY;
291 void* m_pData =
nullptr;
292 void defaultFrom(SConfigDefaultValue& ref);
293 void setFrom(std::any ref);
427 const char** cats =
nullptr;
429 retrieveKeysForCat(category, &cats, &len);
434 std::vector<std::string> result;
435 for (
size_t i = 0; i < len; ++i) {
436 result.push_back(cats[i]);
445 bool m_bCommenced =
false;
449 CParseResult parseLine(std::string line,
bool dynamic =
false);
450 CParseResult configSetValueSafe(
const std::string& command,
const std::string& value);
451 CParseResult parseVariable(
const std::string& lhs,
const std::string& rhs,
bool dynamic =
false);
453 void applyDefaultsToCat(SSpecialCategory& cat);
454 void retrieveKeysForCat(
const char* category,
const char*** out,
size_t* len);
463 template <
typename T>
470 std::println(
"CSimpleConfigValue: value not found");
479 const auto ANY = VAL->getValue();
480 const auto TYPE = std::type_index(ANY.type());
483 const bool STRINGEX = (
typeid(T) ==
typeid(std::string) && TYPE ==
typeid(
Hyprlang::STRING));
486 if (
typeid(T) != TYPE && !STRINGEX && !CUSTOMEX) {
487 std::println(
"CSimpleConfigValue: Mismatched type in CConfigValue<T>, got {} but has {}",
typeid(T).name(), TYPE.name());
494 return *(T*
const*)p_;
502 void*
const* p_ =
nullptr;
507 std::print(
"Impossible to implement ptr() of CConfigValue<std::string>");
534 std::print(
"Impossible to implement operator* of CConfigValue<Hyprlang::CUSTOMTYPE>, use ptr()");
540#ifndef HYPRLANG_INTERNAL
541#undef HYPRLANG_END_MAGIC
Definition hyprlang.hpp:184
~CConfigCustomValueType()
friend class CConfigValue
Definition hyprlang.hpp:205
void * getData()
Definition hyprlang.hpp:194
CConfigCustomValueType(PCONFIGCUSTOMVALUEHANDLERFUNC handler_, PCONFIGCUSTOMVALUEDESTRUCTOR dtor_, const char *defaultValue)
friend class CConfig
Definition hyprlang.hpp:206
Definition hyprlang.hpp:212
void *const * getDataStaticPtr() const
CConfigValue(const VEC2 value)
CConfigValue(CUSTOMTYPE &&value)
CConfigValue(const CConfigValue &)
CConfigValue(const STRING value)
std::any getValue() const
Definition hyprlang.hpp:259
CConfigValue(const FLOAT value)
CConfigValue(const INT value)
CConfigValue(CConfigValue &&)=delete
CConfigValue(CConfigValue &)=delete
CConfigValue(const CConfigValue &&)=delete
bool m_bSetByUser
Definition hyprlang.hpp:278
friend class CConfig
Definition hyprlang.hpp:296
Definition hyprlang.hpp:302
void addConfigValue(const char *name, const CConfigValue &value)
CParseResult parseDynamic(const char *command, const char *value)
void addSpecialConfigValue(const char *cat, const char *name, const CConfigValue &value)
CParseResult parseDynamic(const char *line)
std::any getSpecialConfigValue(const char *category, const char *name, const char *key=nullptr)
Definition hyprlang.hpp:405
CConfig(const char *configPath, const SConfigOptions &options)
void unregisterHandler(const char *name)
CConfigValue * getConfigValuePtr(const char *name)
std::vector< std::string > listKeysForSpecialCategory(const char *category)
Definition hyprlang.hpp:426
void removeSpecialCategory(const char *name)
bool specialCategoryExistsForKey(const char *category, const char *key)
CConfigValue * getSpecialConfigValuePtr(const char *category, const char *name, const char *key=nullptr)
std::any getConfigValue(const char *name)
Definition hyprlang.hpp:395
void registerHandler(PCONFIGHANDLERFUNC func, const char *name, SHandlerOptions options)
void addSpecialCategory(const char *name, SSpecialCategoryOptions options)
CParseResult parseFile(const char *file)
void removeSpecialConfigValue(const char *cat, const char *name)
Definition hyprlang.hpp:68
bool error
Definition hyprlang.hpp:70
const char * getError() const
Definition hyprlang.hpp:76
friend class CConfig
Definition hyprlang.hpp:91
void setError(const char *err)
T * ptr() const
Definition hyprlang.hpp:493
T operator*() const
Definition hyprlang.hpp:497
CSimpleConfigValue(CConfig *const pConfig, const char *val)
Definition hyprlang.hpp:466
#define HYPRLANG_END_MAGIC
Definition hyprlang.hpp:18
Definition hyprlang.hpp:20
const char * STRING
Definition hyprlang.hpp:40
int64_t INT
Definition hyprlang.hpp:30
CParseResult(* PCONFIGCUSTOMVALUEHANDLERFUNC)(const char *VALUE, void **data)
Definition hyprlang.hpp:174
SVector2D VEC2
Definition hyprlang.hpp:45
CConfigCustomValueType CUSTOMTYPE
Definition hyprlang.hpp:50
void(* PCONFIGCUSTOMVALUEDESTRUCTOR)(void **data)
Definition hyprlang.hpp:175
float FLOAT
Definition hyprlang.hpp:35
CParseResult(* PCONFIGHANDLERFUNC)(const char *COMMAND, const char *VALUE)
Definition hyprlang.hpp:173
Definition hyprlang.hpp:97
int __internal_struct_end
Definition hyprlang.hpp:123
int allowMissingConfig
Definition hyprlang.hpp:113
int pathIsStream
Definition hyprlang.hpp:120
int verifyOnly
Definition hyprlang.hpp:101
int throwAllErrors
Definition hyprlang.hpp:106
Definition hyprlang.hpp:129
bool allowFlags
Definition hyprlang.hpp:133
int __internal_struct_end
Definition hyprlang.hpp:136
Definition hyprlang.hpp:142
int __internal_struct_end
Definition hyprlang.hpp:167
const char * key
Definition hyprlang.hpp:148
int anonymousKeyBased
Definition hyprlang.hpp:164
int ignoreMissing
Definition hyprlang.hpp:153
Definition hyprlang.hpp:55
float y
Definition hyprlang.hpp:56
float x
Definition hyprlang.hpp:56
friend std::ostream & operator<<(std::ostream &os, const SVector2D &rhs)
Definition hyprlang.hpp:63
bool operator==(const SVector2D &rhs) const
Definition hyprlang.hpp:59