@@ -611,7 +611,7 @@ WsjcppYamlParsebleLine::WsjcppYamlParsebleLine(int nLine) {
611611 m_sPrefix = " " ;
612612 m_bArrayItem = false ;
613613 m_sComment = " " ;
614- m_sName = " " ;
614+ m_sTagName = " " ;
615615 m_sValue = " " ;
616616 m_nNameQuotes = WSJCPP_YAML_QUOTES_NONE;
617617 m_nValueQuotes = WSJCPP_YAML_QUOTES_NONE;
@@ -665,7 +665,7 @@ bool WsjcppYamlParsebleLine::hasComment() {
665665// ---------------------------------------------------------------------
666666
667667std::string WsjcppYamlParsebleLine::getName () {
668- return m_sName ;
668+ return m_sTagName ;
669669}
670670
671671// ---------------------------------------------------------------------
@@ -677,7 +677,7 @@ WsjcppYamlQuotes WsjcppYamlParsebleLine::getNameQuotes() {
677677// ---------------------------------------------------------------------
678678
679679bool WsjcppYamlParsebleLine::isEmptyName () {
680- return m_sName .length () == 0 ;
680+ return m_sTagName .length () == 0 ;
681681}
682682
683683// ---------------------------------------------------------------------
@@ -721,7 +721,7 @@ bool WsjcppYamlParsebleLine::parseLine(const std::string &sLine, std::string &sE
721721 m_bArrayItem = false ;
722722 m_sPrefix = " " ;
723723 m_sComment = " " ;
724- m_sName = " " ;
724+ m_sTagName = " " ;
725725 m_sValue = " " ;
726726 m_bHasComment = false ;
727727 m_nNameQuotes = WSJCPP_YAML_QUOTES_NONE;
@@ -783,9 +783,8 @@ bool WsjcppYamlParsebleLine::parseLine(const std::string &sLine, std::string &sE
783783 state = WSJCPP_YAML_PARSER_LINE_STATE_VALUE;
784784 m_sValue += c;
785785 } else if (c == ' :' && state == WSJCPP_YAML_PARSER_LINE_STATE_VALUE) {
786- std::cout << m_sValue << std::endl;
787- if (m_sName.length () == 0 ) {
788- m_sName = m_sValue;
786+ if (m_sTagName.length () == 0 && this ->canTagName (m_sValue)) {
787+ m_sTagName = m_sValue;
789788 m_sValue = " " ; // reset value it was param name
790789 } else {
791790 m_sValue += c;
@@ -823,14 +822,14 @@ bool WsjcppYamlParsebleLine::parseLine(const std::string &sLine, std::string &sE
823822 }
824823 }*/
825824
826- m_sName = WsjcppCore::trim (m_sName );
827- if (m_sName .length () > 0 && m_sName [0 ] == ' "' ) {
825+ m_sTagName = WsjcppCore::trim (m_sTagName );
826+ if (m_sTagName .length () > 0 && m_sTagName [0 ] == ' "' ) {
828827 m_nNameQuotes = WSJCPP_YAML_QUOTES_DOUBLE;
829- m_sName = removeStringDoubleQuotes (m_sName );
828+ m_sTagName = removeStringDoubleQuotes (m_sTagName );
830829 }
831- if (m_sName .length () > 0 && m_sName [0 ] == ' \' ' ) {
830+ if (m_sTagName .length () > 0 && m_sTagName [0 ] == ' \' ' ) {
832831 m_nNameQuotes = WSJCPP_YAML_QUOTES_SINGLE;
833- m_sName = removeStringSingleQuotes (m_sName );
832+ m_sTagName = removeStringSingleQuotes (m_sTagName );
834833 }
835834
836835 m_sValue = WsjcppCore::trim (m_sValue);
@@ -844,12 +843,41 @@ bool WsjcppYamlParsebleLine::parseLine(const std::string &sLine, std::string &sE
844843 }
845844
846845 m_sComment = WsjcppCore::trim (m_sComment);
846+
847+ if (m_bArrayItem == false && m_sTagName.length () == 0 && m_sValue.length () > 0 ) {
848+ sError = " Value of name can be empty only for array-item (line: " + sLine + " )" ;
849+ return false ;
850+ }
847851 return true ;
848852}
849853
850854// ---------------------------------------------------------------------
851855
852856bool WsjcppYamlParsebleLine::canTagName (const std::string &sVal ) {
857+ std::string sTrim = sVal ;
858+ sTrim = WsjcppCore::trim (sTrim );
859+ int nLen = sTrim .length ();
860+ if (nLen == 0 ) {
861+ return false ;
862+ }
863+ if (sTrim .length () > 0 && sTrim [0 ] == ' "' && sTrim [nLen-1 ] == ' "' ) {
864+ return true ;
865+ }
866+ if (sTrim .length () > 0 && sTrim [0 ] == ' \' ' && sTrim [nLen-1 ] == ' \' ' ) {
867+ return true ;
868+ }
869+ // check illegal char
870+ for (int i = 0 ; i < nLen; i++) {
871+ char c = sTrim [i];
872+ if (
873+ c != ' -' && c != ' _'
874+ && (c < ' 0' || c > ' 9' )
875+ && (c < ' a' || c > ' z' )
876+ && (c < ' A' || c > ' Z' )
877+ ) {
878+ return false ;
879+ }
880+ }
853881 return true ;
854882}
855883
0 commit comments