Changeset 107
Author: poliklosio
(2010/06/18 11:53) Almost 2 years ago
CHANGES: PKinilib now does not treat empty value as an error; ADDITIONS: warning functionality added to PKini_file_holder (so far just 1 warning about empty value); FIXES: some tests of PKinilib now use strings instead of files; confusing names in PKinilib (those with "single line" changed; PKpreprocessed entry analyzer now expects values with no garbage at the end, garbage removal moved to preprocessor, where it should be;
{{{static const char_type defs[]={';','[',']','\\','=',0};static const char_type defs[]={';','[',']','\\','=',0};PKini_forbidden_chars(const string_type& _additional_in_sec_name,const string_type& _additional_in_key,const string_type& _additional_in_value):in_sec_name(unify_strings(_in_sec_name,in_sec_name_defaults())),in_key(unify_strings(_in_key,in_key_defaults())),_additional_in_sec_name,in_sec_name_defaults())),in_value(unify_strings(_in_value,in_value_defaults()))in_key(unify_strings(_additional_in_key,in_key_defaults())),in_value(unify_strings(_additional_in_value,in_value_defaults())){}{}#include "PKsingle_line_entry_analyzer.h"#include "PKpreprocessed_entry_analyzer.h"#include "PKsingle_line_entry_parser.h"#include "PKpreprocessed_entry_parser.h"{{//documentation needed;//different values of this enum tell PKini_file_holder when to write to//the opened file stream;//- NO_WRITE means that the stream is left unchanged;//- WRITE_LAZY means that changes to ini entries are written to the file// just before it is closed;//- WRITE_IMMEDIATELY tells to update the file contents immediately after// every change//.{{///for the details about the used ini specification read PKINILIBDOC.txt;{{// std::string err_msg;public PKsingle_line_semantic_events<char_type>public PKentry_analyzis_semantic_events<char_type>{{virtual void empty_line_found(){}{//std::cout<<"OMITTED_BYTES"<<// (unsigned)(file_format::OMITTED_BYTES)<<std::endl;}{return true;}{return true;}bool is_before_first_section_name=false;if(_current_section_name_buf.empty())is_before_first_section_name=true;no_error=assemble_line(_line,is_before_first_section_name,no_error=assemble_line(_line,_current_section_name_buf.empty(),{{PKsingle_line_entry_analyzer<char_type> analyzer(PKpreprocessed_entry_analyzer<char_type> analyzer({{const char_type end_line_chars[]={';','\n','\r',0};{end_line_pos=_line.length();}cur_pos,_line.length()-cur_pos);cur_pos,end_line_pos-cur_pos);{{{{{//std::cout<<"close_file_finally..."<<std::endl;{actualize_file();}{actualize_file();}{err_msg.reset_errors();}{err_msg.reset_errors();}{warning_msgs.reset_errors();}{return forbidden_chars;}{return forbidden_chars;}inline const std::string& PKini_file_holder<file_format>::{return err_msg.get_errors();}{return err_msg.get_errors();}{return err_msg.has_errors();}{return warning_msgs.get_errors();}{return warning_msgs.has_errors();}{separator("]["){}{{{{{{{//test incorrect files:PKTESTER_IS_TRUE(test_wrong_file("test_text_files/""wrong_section_name_backslash.ini"));PKTESTER_IS_TRUE(test_wrong_file("test_text_files/""wrong_section_name_closing_sq_bracket.ini"));PKTESTER_IS_TRUE(test_wrong_file("test_text_files/""wrong_section_name_equals.ini"));PKTESTER_IS_TRUE(test_wrong_file("test_text_files/""wrong_section_name_newline_cr.ini"));PKTESTER_IS_TRUE(test_wrong_file("test_text_files/""wrong_section_name_equals.ini"));{PKTESTER_IS_TRUE(test_section_name_line("[k]"));PKTESTER_IS_TRUE(test_section_name_line("[kg_fd_fd]"));PKTESTER_IS_TRUE(test_section_name_line("[_]"));PKTESTER_IS_TRUE(test_section_name_line("[kgfdfd]"));PKTESTER_IS_FALSE(test_section_name_line("[kgfd\\fd]"));PKTESTER_IS_FALSE(test_section_name_line("[jksaf]]"));PKTESTER_IS_FALSE(test_section_name_line("[fkdas=fds]"));PKTESTER_IS_FALSE(test_section_name_line("[fdsafs\nfdsafsdfds]"));PKTESTER_IS_FALSE(test_section_name_line("[fdsj[kj]"));PKTESTER_IS_FALSE(test_section_name_line("[fdsafj;fds]"));PKTESTER_IS_FALSE(test_section_name_line("[fdsa ]"));PKTESTER_IS_FALSE(test_section_name_line("[fdsa\tfds]"));PKTESTER_IS_FALSE(test_section_name_line("[\vfdsafds]"));PKTESTER_IS_FALSE(test_section_name_line("[fdsafds\r]"));PKTESTER_IS_TRUE(test_key_value_line("fdklsl=fdslfj"));PKTESTER_IS_TRUE(test_key_value_line("fdklsl= fdslfj"));PKTESTER_IS_TRUE(test_key_value_line("fdklsl=fdslfj "));PKTESTER_IS_TRUE(test_key_value_line("fdklsl=\t\tfdslfj "));PKTESTER_IS_TRUE(test_key_value_line("fdklsl= fdslfj "));PKTESTER_IS_TRUE(test_key_value_line("fdk_lsl=fdslfj"));PKTESTER_IS_TRUE(test_key_value_line("_fdk_lsl_=fdslfj"));PKTESTER_IS_TRUE(test_key_value_line("_=fdslfj"));PKTESTER_IS_TRUE(test_key_value_line("a=fdslfj"));PKTESTER_IS_TRUE(test_key_value_line("a="));PKTESTER_IS_FALSE(test_key_value_line(" fdklsl=fdslfj"));PKTESTER_IS_FALSE(test_key_value_line("fdklsl =fdslfj"));PKTESTER_IS_FALSE(test_key_value_line("fdk;lsl=fdslfj"));PKTESTER_IS_FALSE(test_key_value_line("fdk[lsl=fdslfj"));PKTESTER_IS_FALSE(test_key_value_line("fdklsl]=fdslfj"));PKTESTER_IS_FALSE(test_key_value_line("\\fdklsl=fdslfj"));PKTESTER_IS_FALSE(test_key_value_line("fd=klsl= fdslfj"));PKTESTER_IS_FALSE(test_key_value_line("fdkl\tsl=fdslfj"));PKTESTER_IS_FALSE(test_key_value_line("\vfdklsl=fdslfj"));PKTESTER_IS_FALSE(test_key_value_line("fdk\nlsl=fdslfj"));PKTESTER_IS_FALSE(test_key_value_line("fdk\rlsl=fdslfj"));PKTESTER_IS_FALSE(test_key_value_line("fdklsl=f;dslfj"));PKTESTER_IS_FALSE(test_key_value_line("fdklsl=fdsl[fj"));PKTESTER_IS_FALSE(test_key_value_line("fdklsl=fd]slfj"));PKTESTER_IS_FALSE(test_key_value_line("fdklsl=fd]s\\lfj"));PKTESTER_IS_FALSE(test_key_value_line("fdklsl=fd]s=lfj"));{{{{{