# HG changeset patch # User František Kučera # Date 1606157360 -3600 # Node ID 2080ee4dd2f929f79d3f6ad7e9f07caf264e9efe # Parent 54b44793e17d3cf202a6511fbeacdf4b2188909d simplify/unify the quoted and apostrophed values diff -r 54b44793e17d -r 2080ee4dd2f9 src/lib/INIReader.cpp --- a/src/lib/INIReader.cpp Mon Nov 23 19:40:48 2020 +0100 +++ b/src/lib/INIReader.cpp Mon Nov 23 19:49:20 2020 +0100 @@ -40,8 +40,7 @@ std::regex whitespacePattrern("\\s*"); std::regex commentPattrern("\\s*(;|#)\\s*(.*)"); std::regex sectionPattrern("\\s*\\[\\s*([^\\]]+)\\s*\\]\\s*(\\[\\s*([^\\]]+)\\s*\\])?\\s*((;|#)\\s*(.*))?"); - std::regex entryQuotesPattrern(/***/"\\s*(([^=\\]]+?[^=\\s\\]]*)(\\[([^\\]]+)\\])?)\\s*=\\s*\"([^']+)\"\\s*((;|#)\\s*(.*))?"); - std::regex entryApostrophesPattrern("\\s*(([^=\\]]+?[^=\\s\\]]*)(\\[([^\\]]+)\\])?)\\s*=\\s*'([^']+)'\\s*((;|#)\\s*(.*))?"); + std::regex entryQuotedPattrern("\\s*(([^=\\]]+?[^=\\s\\]]*)(\\[([^\\]]+)\\])?)\\s*=\\s*(\"|')((?:(?!\\5).)*)(\\5)\\s*((;|#)\\s*(.*))?"); std::regex entryPlainPattrern("\\s*(([^=\\]]+?[^=\\s\\]]*)(\\[([^\\]]+)\\])?)\\s*=\\s*(.*?)\\s*"); std::smatch match; @@ -79,15 +78,15 @@ // see , „[$i]“ means that the section is „locked“ // We may emit this information somehow later, but for now, it is just ignored. for (INIContentHandler* handler : handlers) handler->startSection(event); - } else if (std::regex_match(line, match, entryQuotesPattrern) || std::regex_match(line, match, entryApostrophesPattrern)) { + } else if (std::regex_match(line, match, entryQuotedPattrern)) { INIContentHandler::EntryEvent event; event.lineNumber = lineNumber; event.eventNumber = ++eventNumber; event.key = match[2]; event.subKey = match[4]; event.fullKey = match[1]; - event.value = match[5]; - if (match.size() == 9) event.comment = match[8]; + event.value = match[6]; + event.comment = match[10]; for (INIContentHandler* handler : handlers) handler->entry(event); } else if (std::regex_match(line, match, entryPlainPattrern)) { INIContentHandler::EntryEvent event;