test 0.1.4

This commit is contained in:
Alexander Zhirov 2023-03-26 00:31:25 +03:00
parent d9ee8336bd
commit 5b3141cb16
1 changed files with 68 additions and 51 deletions

View File

@ -11,7 +11,7 @@ class Config
private:
static Config config;
string path;
Partition[string] partitions;
ConfigSection[string] sections;
bool readed = false;
const string pattern = "^( |\\t)*(((\\w(\\w|-)+)(( |\\t)*(=>|=){1}"
~ "( |\\t)*)(?!\\/(\\/|\\*))(([^ >\"'=\\n\\t#;].*?)|(\"(.+)\")"
@ -35,22 +35,39 @@ private:
auto regular = regex(this.pattern, "m");
// if main section
string sectionName = "[]";
while (!configuration.eof())
{
string line = configuration.readln();
auto match = matchFirst(line, regular);
if (match)
{
int group = 5;
if (match[group].length)
// if again main section
if (match[20].length)
{
if (match[group][0] == '\'')
group = 10;
else if (match[group][0] == '\"')
group = 8;
sectionName = match[20];
continue;
}
this.properties[match[1]] = PP(match[1], match[group]);
}
// if other section
if (match[17].length)
{
sectionName = match[18];
continue;
}
// values
int group = 11;
if (match[group][0] == '\'')
group = 14;
else if (match[group][0] == '\"')
group = 16;
if (sectionName !in this.sections)
this.sections[sectionName] = ConfigSection(sectionName);
this.sections[sectionName].add(ConfigParameter(match[4], match[group]));
}
}
try {
@ -94,16 +111,56 @@ public:
readConfig();
}
Partition part(string partishion = "")
@property ConfigSection section(string section = "[]")
{
return sections[section];
}
}
struct ConfigSection
{
private string name = "[]";
private ConfigParameter[string] parameters;
/**
* Checking for the presence of a partition
* Returns: true if the parameter is missing, otherwise false
*/
@property bool empty()
{
return this.parameters.length == 0;
}
/**
* Get the parameter value
* Params:
* key = parameter from the configuration file
* Returns: the value of the parameter in the PP structure view
*/
ConfigParameter key(string key)
{
return key in this.parameters ? this.parameters[key] : ConfigParameter();
}
/**
* Get all keys and their values
* Returns: collection of properties structures PP
*/
ConfigParameter[string] keys()
{
return this.parameters;
}
void add(ConfigParameter parameter)
{
this.parameters[parameter.property] = parameter;
}
}
/**
* Parameter and its value with the ability to convert to the desired data type
*/
struct Parameter
struct ConfigParameter
{
private string property;
private string value;
@ -139,43 +196,3 @@ struct Parameter
}
}
}
struct Partition
{
private string name = "[]";
private Parameter[string] parameters;
/**
* Checking for the presence of a partition
* Returns: true if the parameter is missing, otherwise false
*/
@property bool empty()
{
return this.parameters.length == 0;
}
/**
* Get the parameter value
* Params:
* key = parameter from the configuration file
* Returns: the value of the parameter in the PP structure view
*/
Parameter key(string key)
{
return key in this.parameters ? this.parameters[key] : Parameter();
}
/**
* Get all keys and their values
* Returns: collection of properties structures PP
*/
Parameter[string] keys()
{
return this.parameters;
}
bool add(Parameter parameter)
{
}
}