void SourceEdit::TokenizeLine(const CStringW& line, CArray<CStringW>& tokens) { int i = 0; while (true) { // We are either at the start of the line, or the end of the previous token, // so scan forward to find the start of the next token. while (true) { if (i == line.GetLength()) return; WCHAR c = line.GetAt(i); if ((c != L' ') && (c != L'\t')) break; i++; } // Find the end of this token int j = line.Find(L" ",i); if (j == -1) { // No final delimiter, so this must be the last token if (i < line.GetLength()) tokens.Add(line.Mid(i)); return; } else { // Store this token and move to the end of it tokens.Add(line.Mid(i,j-i)); i = j; } } }
void Skein::Node::OverwriteBanner(CStringW& inStr) { // Does this text contain an Inform 7 banner? int i = inStr.Find(L"\nRelease "); if (i >= 0) { int release, serial, build; if (swscanf((LPCWSTR)inStr+i,L"\nRelease %d / Serial number %d / Inform 7 build %d",&release,&serial,&build) == 3) { // Replace the banner line with asterisks for (int j = i+1; j < inStr.GetLength(); j++) { if (inStr.GetAt(j) == '\n') break; inStr.SetAt(j,'*'); } } } }
int sproxy() { unsigned __int64 nFlags; BOOL bHasInvalid; CStringW wszUrl; CStringW wszOut; CStringA szNamespace; wchar_t **argvW = NULL ; int argc = 0 ; argvW = CommandLineToArgvW(GetCommandLineW(),&argc); if(argvW == NULL) { EmitError(IDS_SDL_CMDLINE_FAILURE, GetLastError()); return 1; } PreProcessCommandLine(argc, argvW, wszOut, szNamespace, &nFlags, &bHasInvalid); g_bUseWchar_t = ((nFlags & SPROXYFLAG_NOWCHAR_T) == 0); if ((nFlags & SPROXYFLAG_NOLOGO) == 0) { PrintHeader(); } if (nFlags & SPROXYFLAG_USAGE) { PrintUsage(true); GlobalFree(argvW); return 0; } ParseCommandLine(argc, argvW, wszUrl, bHasInvalid); GlobalFree(argvW); bHasInvalid = FALSE; if (wszUrl.IsEmpty()) { EmitCmdLineError(IDS_SDL_MISSING_OPTION, nFlags & SPROXYFLAG_WSDLINPUT ?"<wsdl_location>":"<discomap_location>"); bHasInvalid = TRUE; } if (bHasInvalid != FALSE) { printf("\r\n"); PrintUsage(); return 1; } if (nFlags & SPROXYFLAG_NOWARN) { SetEmitWarnings(false); } CHeapPtr<char> spSzNamespace; if (szNamespace && *szNamespace) { if (FAILED(CreateSafeCppName(&spSzNamespace, szNamespace))) { EmitErrorHr(E_OUTOFMEMORY); return 1; } } CoInitialize(NULL); HRESULT hr = S_OK; { CAutoPtr<CDiscoMapParser> dmParser; if(!(nFlags & SPROXYFLAG_WSDLINPUT)) { CComPtr<ISAXXMLReader> spDMReader; hr = CoCreateInstance(__uuidof(SAXXMLReader30), NULL, CLSCTX_ALL, __uuidof(ISAXXMLReader), (void **)&spDMReader); if (FAILED(hr)) { ATLTRACE( _T("CoCreateInstance failed!\n") ); return 1; } dmParser.Attach(new CDiscoMapParser(spDMReader, NULL, 0)); if(dmParser == NULL) { ATLTRACE(_T("Failed to create Discomap Parser : out of memory!\n")); return 1; } dmParser->SetDynamicAlloc(FALSE); hr = spDMReader->putContentHandler( dmParser ); if (FAILED(hr)) { ATLTRACE( _T("putContentHandler failed!\n") ); return 1; } CErrorHandler errDM; errDM.SetLocation(wszUrl); hr = spDMReader->putErrorHandler( &errDM); if (FAILED(hr)) { ATLTRACE( _T("putErrorHandler failed!\n") ); return 1; } g_pDMDoc = dmParser->GetDiscoMapDocument(); if (g_pDMDoc == NULL) { ATLTRACE( _T("failed to create document: out of memory!\n") ); return 1; } hr = g_pDMDoc->SetDocumentUri( wszUrl, wszUrl.GetLength()); if (FAILED(hr)) { ATLTRACE( _T("failed to set document uri: out of memory!\n") ); return 1; } g_wszFile = wszUrl; hr = spDMReader->parseURL( wszUrl ); if (FAILED(hr)) { ATLTRACE( _T("parseURL failed!\n") ); if ((hr == E_SAX_LOADFAILED) || (hr == E_SAX_FILENOTFOUND) || (hr == E_SAX_PATHNOTFOUND) || (hr == E_SAX_ACCESSDENIED)) { EmitError(IDS_SDL_FAILED_DM_OPEN, wszUrl); } EmitError(IDS_SDL_PROCESS_DM_FAILURE, wszUrl); return 1; } } if(nFlags & SPROXYFLAG_WSDLINPUT) g_wszFile = wszUrl; else g_wszFile = g_pDMDoc->GetWSDLFile(); CComPtr<ISAXXMLReader> spReader; hr = CoCreateInstance(__uuidof(SAXXMLReader30), NULL, CLSCTX_ALL, __uuidof(ISAXXMLReader), (void **)&spReader); if (FAILED(hr)) { ATLTRACE( _T("CoCreateInstance failed!\n") ); return 1; } CWSDLParser parser(spReader, NULL, 0); parser.SetDynamicAlloc(FALSE); hr = spReader->putContentHandler( &parser ); if (FAILED(hr)) { ATLTRACE( _T("putContentHandler failed!\n") ); return 1; } CErrorHandler err; err.SetLocation(g_wszFile); hr = spReader->putErrorHandler( &err ); if (FAILED(hr)) { ATLTRACE( _T("putErrorHandler failed!\n") ); return 1; } CWSDLDocument * pDoc = parser.GetWSDLDocument(); if (pDoc == NULL) { ATLTRACE( _T("failed to create document: out of memory!\n") ); return 1; } hr = pDoc->SetDocumentUri( g_wszFile, g_wszFile.GetLength()); if (FAILED(hr)) { ATLTRACE( _T("failed to set document uri: out of memory!\n") ); return 1; } wchar_t wszTmp[ATL_URL_MAX_URL_LENGTH]; if(g_wszFile.Find(L"://") != -1 && ((g_wszFile.Left(5)).MakeLower() != L"file:") ) { // The URL needs to be escaped only if it's not a local file if(AtlEscapeUrl(g_wszFile,wszTmp,0,ATL_URL_MAX_URL_LENGTH-1,ATL_URL_BROWSER_MODE) == FALSE) { ATLTRACE( _T("failed to escape uri!\n") ); return 1; } hr = spReader->parseURL( wszTmp ); } else { hr = spReader->parseURL( g_wszFile ); } if (FAILED(hr)) { ATLTRACE( _T("parseURL failed!\n") ); if ((hr == E_SAX_LOADFAILED) || (hr == E_SAX_FILENOTFOUND) || (hr == E_SAX_PATHNOTFOUND) || (hr == E_SAX_ACCESSDENIED)) { EmitError(IDS_SDL_FAILED_WSDL_OPEN, g_wszFile); } EmitError(IDS_SDL_PROCESS_FAILURE, g_wszFile); return 1; } CCodeTypeBuilder builder; CCodeProxy proxy; hr = builder.Initialize(parser.GetWSDLDocument(), &proxy); if (FAILED(hr)) { ATLTRACE( _T("builder.Initialize failed!\n") ); return PrintGenerateFailure(wszOut); } hr = builder.Build(); if (FAILED(hr)) { ATLTRACE( _T("builder.Build failed!\n") ); return PrintGenerateFailure(wszOut); } if (wszOut.IsEmpty()) { wszOut.Preallocate(proxy.GetServiceName().GetLength()+4); wszOut = (LPCSTR)proxy.GetServiceName(); wszOut.Append(L".h", 2); } Emit(IDS_SDL_SUCCESS, wszOut); CComObjectStack<CCppCodeGenerator> gen; hr = gen.Generate(wszOut, &proxy, (nFlags & SPROXYFLAG_NOPRAGMA) ? false : true, (nFlags & SPROXYFLAG_NOCLOBBER) ? true : false, (nFlags & SPROXYFLAG_NONAMESPACE) ? false : true, (nFlags & SPROXYFLAG_NOPROXY) ? false : true, spSzNamespace ? spSzNamespace : (szNamespace.IsEmpty() ? 0 : LPCSTR(szNamespace))); if (FAILED(hr)) { ATLTRACE( _T("gen.Generate failed!\n") ); return PrintGenerateFailure(wszOut); } } CoUninitialize(); return 0; }
void TabDoc::DecodeHTML(const char* filename, int scheme) { // Open the file CFile htmlFile; if (htmlFile.Open(filename,CFile::modeRead) == 0) return; // Read it into memory CString htmlText; int len = (int)htmlFile.GetLength(); htmlFile.Read(htmlText.GetBuffer(len),len); htmlText.ReleaseBuffer(len); // Convert from UTF-8 to Unicode CStringW html = TextFormat::UTF8ToUnicode(htmlText); // Get the body text int body1 = html.Find(L"<body"); if (body1 == -1) return; body1 = html.Find(L">",body1); if (body1 == -1) return; int body2 = html.Find(L"</body>"); if (body2 <= body1) return; CStringW bodyHtml = html.Mid(body1+1,body2-body1-1); // Create a DocText instance for this file DocText* mainDocText = new DocText(); mainDocText->file = filename; mainDocText->colourScheme = scheme; m_docTexts.Add(mainDocText); // Reserve space for the main text len = bodyHtml.GetLength(); mainDocText->body.Preallocate(len); // Scan the text, removing markup DocText* docText = mainDocText; bool ignore = false; bool white = false; const wchar_t* p1 = bodyHtml; const wchar_t* p2 = p1+len; while (p1 < p2) { // Look for a markup element if ((*p1 == L'<') && (iswalpha(*(p1+1)) || (*(p1+1) == L'/'))) { // Check for a closing markup element bool closing = false; if (*(p1+1) == L'/') { closing = true; p1++; } // Scan for a known markup element bool found = false; int i = 0; while (!found && (i < sizeof tags / sizeof tags[0])) { if (wcsncmp(p1+1,tags[i].name,tags[i].len) == 0) found = true; if (!found) i++; } ASSERT(found); // Remove the markup if (found && tags[i].remove) { ASSERT(!closing); // Remove everything until the closing element CStringW search; search.Format(L"</%s>",tags[i].name); p1 = wcsstr(p1,search); if (p1 != NULL) p1 += search.GetLength()-1; else p1 = p2; } else { // Remove just the element while ((p1 < p2) && (*p1 != L'>')) p1++; } ASSERT(*p1 == L'>'); // Add a carriage return for appropriate markup if (found && !closing && tags[i].cr && !ignore) docText->AddToBody(L'\n'); white = false; } else if ((*p1 == L'<') && (*(p1+1) == L'!')) { // Extract metadata from comments wchar_t meta1[256], meta2[256]; if (swscanf(p1,L"<!-- SEARCH TITLE \"%[^\"]",meta1) == 1) docText->title = meta1; else if (swscanf(p1,L"<!-- SEARCH SECTION \"%[^\"]",meta1) == 1) docText->section = meta1; else if (swscanf(p1,L"<!-- SEARCH SORT \"%[^\"]",meta1) == 1) docText->sort = meta1; else if (swscanf(p1,L"<!-- START EXAMPLE \"%[^\"]\" \"%[^\"]",meta1,meta2) == 2) { docText = new DocText(); docText->file = mainDocText->file + "#" + CStringA(meta2); docText->colourScheme = mainDocText->colourScheme; docText->title = "Example " + CStringA(meta1); docText->section = mainDocText->section; docText->sort = mainDocText->sort; docText->body.Preallocate(len/2); m_docTexts.Add(docText); } else if (wcsncmp(p1,L"<!-- END EXAMPLE -->",20) == 0) docText = mainDocText; else if (wcsncmp(p1,L"<!-- START IGNORE ",18) == 0) ignore = true; else if (wcsncmp(p1,L"<!-- END IGNORE -->",19) == 0) ignore = false; p1 = wcsstr(p1,L"-->"); if (p1 != NULL) p1 += 2; else p1 = p2; } else if (*p1 == L'&') { // Scan for a known literal bool found = false; int i = 0; while (!found && (i < sizeof literals / sizeof literals[0])) { if (wcsncmp(p1+1,literals[i].name,literals[i].len) == 0) found = true; if (!found) i++; } // Replace the literal if (found) { if (!ignore) docText->AddToBody(literals[i].replace); p1 += literals[i].len; } else { ASSERT(FALSE); if (!ignore) docText->AddToBody(*p1); } white = false; } else if (iswspace(*p1)) { if (!white && !ignore) docText->AddToBody(L' '); white = true; } else { if (!ignore) docText->AddToBody(*p1); white = false; } p1++; } /* CString bodyA(docText->body); AfxMessageBox(bodyA); */ }
ULONG CFormData::ProcessForm() { CStringA startPart = "--" + CStringA(m_sBoundary) + "\r\n"; Append(startPart); BOOL bHasFields = FALSE; //STLOG_WRITE("%s(%d): Ponto de apoio", __FUNCTION__, __LINE__); // Varrer os fields primeiro POSITION p1 = m_items.GetStartPosition(); while(p1) { CStringW key1; CFormItem *pAttr; m_items.GetNextAssoc(p1, key1, pAttr); if(!pAttr->m_bFile) { bHasFields = TRUE; CStringW s; s.Format(FIELD_BOUND, pAttr->m_name, pAttr->m_value); Append(CStringA(s)); } if(p1 != NULL) { startPart = "--" + CStringA(m_sBoundary) + "\r\n"; Append(startPart); } } //STLOG_WRITE("%s(%d): Ponto de apoio", __FUNCTION__, __LINE__); BOOL bFirst = TRUE; // Varrer os files p1 = m_items.GetStartPosition(); while(p1) { CStringW key1; CFormItem *pAttr; m_items.GetNextAssoc(p1, key1, pAttr); if(pAttr->m_bFile) { if(bFirst && bHasFields) { startPart = "--" + CStringA(m_sBoundary) + "\r\n"; Append(startPart); bFirst = FALSE; } CStringW sFileName = pAttr->m_value; if(sFileName.Find('\\') >= 0 || sFileName.Find('/') >= 0) { int pos = sFileName.ReverseFind('\\'); if(pos < 0) pos = sFileName.ReverseFind('/'); sFileName = sFileName.Mid(pos+1); } CStringW s; s.Format(FILE_BOUND, pAttr->m_name, sFileName, pAttr->m_mime); Append(CStringA(s)); Append("\r\n"); AppendFile(pAttr->m_value); Append("\r\n"); if(p1 != NULL) { startPart = "--" + CStringA(m_sBoundary) + "\r\n"; Append(startPart); } } } startPart = "--" + CStringA(m_sBoundary) + "--\r\n"; Append(startPart); //STLOG_WRITE("%s(%d): Ponto de apoio", __FUNCTION__, __LINE__); //STLOG_WRITE("%s(%d): Buffer: %s", __FUNCTION__, __LINE__, m_buffer.GetData()); return m_buffer.GetCount(); }
void Definition::GetAsNumber(Number<T>& n, StringMapW<T>* n2n) { CStringW str = m_value; str.Replace(L" ", L""); n.value = 0; n.unit = m_unit; n.sign = 0; if(n2n) { if(m_status == node) throw Exception(_T("expected value type")); if(StringMapW<T>::CPair* p = n2n->Lookup(str)) { n.value = p->m_value; return; } } if(m_status != number) throw Exception(_T("expected number")); n.sign = str.Find('+') == 0 ? 1 : str.Find('-') == 0 ? -1 : 0; str.TrimLeft(L"+-"); if(str.Find(L"0x") == 0) { if(n.sign) throw Exception(_T("hex values must be unsigned")); n.value = (T)wcstoul(str.Mid(2), NULL, 16); } else { CStringW num_string = m_value + m_unit; if(m_num_string != num_string) { Split sa(':', str); Split sa2('.', sa ? sa[sa-1] : L""); if(sa == 0 || sa2 == 0 || sa2 > 2) throw Exception(_T("invalid number")); float f = 0; for(size_t i = 0; i < sa; i++) { f *= 60; f += wcstoul(sa[i], NULL, 10); } if(sa2 > 1) f += (float)wcstoul(sa2[1], NULL, 10) / pow((float)10, sa2[1].GetLength()); if(n.unit == L"ms") { f /= 1000; n.unit = L"s"; } else if(n.unit == L"m") { f *= 60; n.unit = L"s"; } else if(n.unit == L"h") { f *= 3600; n.unit = L"s"; } m_num.value = f; m_num.unit = n.unit; m_num_string = num_string; n.value = (T)f; } else { n.value = (T)m_num.value; n.unit = m_num.unit; } if(n.sign) n.value *= n.sign; } }
HRESULT ProfileInfo::Read() { HRESULT hr = S_OK; LFile profileFile(m_csFilename); if (!profileFile.Exists()) hr = E_PM_FILE_NOTEXIST; if (SUCCEEDED(hr)) { LURESULT lr = profileFile.Open(); if (lr == LFILE_ERR_OPEN || lr == LFILE_ERR_ALREADY_OPEN) hr = E_PM_FILE_OPEN; } if (SUCCEEDED(hr)) { LBuffer fileBuffer(256); DWORD dwBytesRead; CStringW csLine; UINT uiLinesRead = 0; // Read BOM (first 2 bytes) LURESULT lr = profileFile.ReadRaw(&fileBuffer, 0, 2, &dwBytesRead); if (lr != S_OK) hr = E_PM_FILE_READ; bool bFirstBlock = true; if (SUCCEEDED(hr)) { do { lr = profileFile.ReadRaw(&fileBuffer, 0, fileBuffer.GetSize(), &dwBytesRead); if (lr != S_OK) hr = E_PM_FILE_READ; if (SUCCEEDED(hr) && bFirstBlock) { WCHAR *pIdent = (WCHAR *)fileBuffer.GetBuffer(); if (wcsncmp(pIdent, L"lpp_", 4) != 0) hr = E_PM_WRONG_FORMAT; bFirstBlock = false; } if (SUCCEEDED(hr)) { WCHAR *pBuffer = (WCHAR *)fileBuffer.GetBuffer(); UINT dwCharsRead = dwBytesRead / sizeof(WCHAR); for (int i = 0; i < dwCharsRead; ++i) { if (pBuffer[i] == L'\n') { CString csKey; CString csValue; //Ignore lines which begins with % or # if (csLine[0] != L'%' && csLine[0] != L'#') { int iBlankPos = csLine.Find(L'='); if (iBlankPos >= 0) { #ifdef _UNICODE csKey = csLine.Left(iBlankPos); csValue = csLine.Right(csLine.GetLength() - (iBlankPos+1)); #else CStringW csKeyW = csLine.Left(iBlankPos); int nLen = csKeyW.GetLength(); char *szRet = new char[nLen + 1]; WideCharToMultiByte(CP_ACP, 0, csKeyW, -1, szRet, nLen + 1, NULL, NULL); csKey = szRet; delete szRet; CStringW csValueW = csLine.Right(csLine.GetLength() - (iBlankPos+1)); nLen = csValueW.GetLength(); szRet = new char[nLen + 1]; WideCharToMultiByte(CP_ACP, 0, csValueW, -1, szRet, nLen + 1, NULL, NULL); csValue = szRet; delete szRet; #endif if (csKey == _T("lpp_id")) { m_iProfileID = _ttoi64((LPCTSTR)csValue); } else if (csKey == _T("lpp_version")) { m_iProfileVersion = _ttoi((LPCTSTR)csValue); } else if (csKey == _T("lpp_title")) { m_csTitle = csValue; } else if (csKey == _T("lpp_type")) { m_iProfileType = _ttoi((LPCTSTR)csValue); } else { m_aKeys.Add(csKey); m_aValues.Add(csValue); } } } csLine.Empty(); } else { csLine += pBuffer[i]; } } } } while (dwBytesRead == fileBuffer.GetSize()); } profileFile.Close(); } ExtractTargetFormat(); ExtractStorageDistribution(); return hr; }