const wxChar* wxURI::ParseFragment(const wxChar* uri) { wxASSERT(uri != NULL); // fragment = *( pchar / "/" / "?" ) if (*uri == wxT('#')) { ++uri; while(*uri) { if (IsUnreserved(*uri) || IsSubDelim(*uri) || *uri == wxT(':') || *uri == wxT('@') || *uri == wxT('/') || *uri == wxT('?')) m_fragment += *uri++; else if (IsEscape(uri)) { m_fragment += *uri++; m_fragment += *uri++; m_fragment += *uri++; } else Escape(m_fragment, *uri++); } //mark the server as valid m_fields |= wxURI_FRAGMENT; } return uri; }
const wxChar* wxURI::ParseQuery(const wxChar* uri) { wxASSERT(uri != NULL); // query = *( pchar / "/" / "?" ) if (*uri == wxT('?')) { ++uri; while(*uri && *uri != wxT('#')) { if (IsUnreserved(*uri) || IsSubDelim(*uri) || *uri == wxT(':') || *uri == wxT('@') || *uri == wxT('/') || *uri == wxT('?')) m_query += *uri++; else if (IsEscape(uri)) { m_query += *uri++; m_query += *uri++; m_query += *uri++; } else Escape(m_query, *uri++); } //mark the server as valid m_fields |= wxURI_QUERY; } return uri; }
bool CTUI::Run(int delay) { if (m_bQuit) return false; timeout(delay); // Handle keys chtype key = getch(); if (key != static_cast<chtype>(ERR)) // Input available? { if (!m_pWinManager->HandleKey(key) && IsEscape(key)) return false; } Move(m_CursorPos.first, m_CursorPos.second); while (!m_QueuedDrawWidgets.empty()) { CWidget *w = m_QueuedDrawWidgets.front(); m_QueuedDrawWidgets.pop_front(); // Draw after widget has been removed from queue, this way the widget or childs from the // widget can queue themselves while being drawn. w->Draw(); if (m_QueuedDrawWidgets.empty()) DoUpdate(); // Commit real drawing after last widget } return true; }
char *config_StringUnescape( char *psz_string ) { char *psz_src = psz_string; char *psz_dst = psz_string; if( !psz_src ) return NULL; while( *psz_src ) { if( IsEscape( psz_src ) ) psz_src++; *psz_dst++ = *psz_src++; } *psz_dst = '\0'; return psz_string; }
bool WLex::GetValue(String *pStr) { if(m_bEOF) { return false; } m_bEOL = false; pStr->resize(0); int ch; for(;;) { ch = getc(m_File); if(ch == EOF) { m_bEOL = m_bEOF = true; break; } if(ch == '\n') { m_bEOL = true; break; } if(IsEscape(ch)) { int chx = getc(m_File); if(chx == EOF) { m_bEOF = true; break; } pStr->append(1, char(ch)); continue; } if(IsDelimiter(ch)) { break; } pStr->append(1, char(ch)); } return pStr->length() > 0; }
/** * This function will return a pointer after the end of a string element. * It will search the closing element which is * } for { (it will handle nested { ... }) * " for " * ' for ' */ static const char *ChainGetEnd( const char *psz_string ) { const char *p = psz_string; char c; if( !psz_string ) return NULL; /* Look for a opening character */ SKIPSPACE( p ); for( ;; p++) { if( *p == '\0' || *p == ',' || *p == '}' ) return p; if( *p == '{' || *p == '"' || *p == '\'' ) break; } /* Set c to the closing character */ if( *p == '{' ) c = '}'; else c = *p; p++; /* Search the closing character, handle nested {..} */ for( ;; ) { if( *p == '\0') return p; if( IsEscape( p ) ) p += 2; else if( *p == c ) return ++p; else if( *p == '{' && c == '}' ) p = ChainGetEnd( p ); else p++; } }
const wxChar* wxURI::ParseUserInfo(const wxChar* uri) { wxASSERT(uri != NULL); //copy of the uri - used for figuring out //length of each component const wxChar* uricopy = uri; // userinfo = *( unreserved / pct-encoded / sub-delims / ":" ) while(*uri && *uri != wxT('@') && *uri != wxT('/') && *uri != wxT('#') && *uri != wxT('?')) { if(IsUnreserved(*uri) || IsSubDelim(*uri) || *uri == wxT(':')) m_userinfo += *uri++; else if (IsEscape(uri)) { m_userinfo += *uri++; m_userinfo += *uri++; m_userinfo += *uri++; } else Escape(m_userinfo, *uri++); } if(*uri == wxT('@')) { //valid userinfo m_fields |= wxURI_USERINFO; uricopy = ++uri; } else m_userinfo = wxEmptyString; return uricopy; }
bool WLex::IsSpecial(int ch) const { return IsDelimiter(ch) || IsEscape(ch) || ch == '\n'; }
const wxChar* wxURI::ParsePath(const wxChar* uri, bool bReference, bool bNormalize) { wxASSERT(uri != NULL); //copy of the uri - used for figuring out //length of each component const wxChar* uricopy = uri; /// hier-part = "//" authority path-abempty /// / path-absolute /// / path-rootless /// / path-empty /// /// relative-part = "//" authority path-abempty /// / path-absolute /// / path-noscheme /// / path-empty /// /// path-abempty = *( "/" segment ) /// path-absolute = "/" [ segment-nz *( "/" segment ) ] /// path-noscheme = segment-nz-nc *( "/" segment ) /// path-rootless = segment-nz *( "/" segment ) /// path-empty = 0<pchar> /// /// segment = *pchar /// segment-nz = 1*pchar /// segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" ) /// ; non-zero-length segment without any colon ":" /// /// pchar = unreserved / pct-encoded / sub-delims / ":" / "@" if (*uri == wxT('/')) { m_path += *uri++; while(*uri && *uri != wxT('#') && *uri != wxT('?')) { if( IsUnreserved(*uri) || IsSubDelim(*uri) || *uri == wxT(':') || *uri == wxT('@') || *uri == wxT('/')) m_path += *uri++; else if (IsEscape(uri)) { m_path += *uri++; m_path += *uri++; m_path += *uri++; } else Escape(m_path, *uri++); } if (bNormalize) { wxStringBufferLength theBuffer(m_path, m_path.length() + 1); #if wxUSE_STL wxTmemcpy(theBuffer, m_path.c_str(), m_path.length()+1); #endif Normalize(theBuffer, true); theBuffer.SetLength(wxStrlen(theBuffer)); } //mark the path as valid m_fields |= wxURI_PATH; } else if(*uri) //Relative path { if (bReference) { //no colon allowed while(*uri && *uri != wxT('#') && *uri != wxT('?')) { if(IsUnreserved(*uri) || IsSubDelim(*uri) || *uri == wxT('@') || *uri == wxT('/')) m_path += *uri++; else if (IsEscape(uri)) { m_path += *uri++; m_path += *uri++; m_path += *uri++; } else Escape(m_path, *uri++); } } else { while(*uri && *uri != wxT('#') && *uri != wxT('?')) { if(IsUnreserved(*uri) || IsSubDelim(*uri) || *uri == wxT(':') || *uri == wxT('@') || *uri == wxT('/')) m_path += *uri++; else if (IsEscape(uri)) { m_path += *uri++; m_path += *uri++; m_path += *uri++; } else Escape(m_path, *uri++); } } if (uri != uricopy) { if (bNormalize) { wxStringBufferLength theBuffer(m_path, m_path.length() + 1); #if wxUSE_STL wxTmemcpy(theBuffer, m_path.c_str(), m_path.length()+1); #endif Normalize(theBuffer); theBuffer.SetLength(wxStrlen(theBuffer)); } //mark the path as valid m_fields |= wxURI_PATH; } } return uri; }
const wxChar* wxURI::ParseServer(const wxChar* uri) { wxASSERT(uri != NULL); //copy of the uri - used for figuring out //length of each component const wxChar* uricopy = uri; // host = IP-literal / IPv4address / reg-name // IP-literal = "[" ( IPv6address / IPvFuture ) "]" if (*uri == wxT('[')) { ++uri; //some compilers don't support *&ing a ++* if (ParseIPv6address(uri) && *uri == wxT(']')) { ++uri; m_hostType = wxURI_IPV6ADDRESS; wxStringBufferLength theBuffer(m_server, uri - uricopy); wxTmemcpy(theBuffer, uricopy, uri-uricopy); theBuffer.SetLength(uri-uricopy); } else { uri = uricopy; ++uri; //some compilers don't support *&ing a ++* if (ParseIPvFuture(uri) && *uri == wxT(']')) { ++uri; m_hostType = wxURI_IPVFUTURE; wxStringBufferLength theBuffer(m_server, uri - uricopy); wxTmemcpy(theBuffer, uricopy, uri-uricopy); theBuffer.SetLength(uri-uricopy); } else uri = uricopy; } } else { if (ParseIPv4address(uri)) { m_hostType = wxURI_IPV4ADDRESS; wxStringBufferLength theBuffer(m_server, uri - uricopy); wxTmemcpy(theBuffer, uricopy, uri-uricopy); theBuffer.SetLength(uri-uricopy); } else uri = uricopy; } if(m_hostType == wxURI_REGNAME) { uri = uricopy; // reg-name = *( unreserved / pct-encoded / sub-delims ) while(*uri && *uri != wxT('/') && *uri != wxT(':') && *uri != wxT('#') && *uri != wxT('?')) { if(IsUnreserved(*uri) || IsSubDelim(*uri)) m_server += *uri++; else if (IsEscape(uri)) { m_server += *uri++; m_server += *uri++; m_server += *uri++; } else Escape(m_server, *uri++); } } //mark the server as valid m_fields |= wxURI_SERVER; return uri; }