void SVNTabBase::Compare ( const JString& rev, const JBoolean isPrev ) { SVNPrefsManager::Integration type; JString cmd; const JBoolean hasCmd = (SVNGetPrefsManager())->GetCommand(SVNPrefsManager::kDiffCmd, &type, &cmd); if (type == SVNPrefsManager::kCodeCrusader) { ExecuteJCCDiff(rev, isPrev); } else if (hasCmd) { JString r = rev; if (!r.IsEmpty()) { r.Prepend("-r "); } ExecuteDiff(cmd, r, isPrev); } }
JString JVMVarNode::GetFullName ( JBoolean* isPointer ) const { JString str; if (IsRoot()) { return str; } const JVMVarNode* parent = dynamic_cast<const JVMVarNode*>(GetVarParent()); const JString& name = GetName(); if (parent->IsRoot()) { str = "(" + name + ")"; } else if (name.IsEmpty()) { JIndex i; const JBoolean found = parent->FindChild(this, &i); assert( found ); str = parent->GetFullName(isPointer); if (!str.BeginsWith("(") || !str.EndsWith(")")) { str.PrependCharacter('('); str.AppendCharacter(')'); } str += "[" + JString(i-1, JString::kBase10) + "]"; } else if (name.BeginsWith("<")) { if (isPointer != NULL) { *isPointer = parent->IsPointer(); } str = parent->GetFullName(isPointer); } else if (name.BeginsWith("[")) { str = parent->GetFullName(isPointer) + name; } else if (name.BeginsWith("*")) { str = parent->GetPath() + "(" + name + ")"; } else { str = name; if (str.BeginsWith("static ")) { str.RemoveSubstring(1,7); } str.Prepend(parent->GetPath()); } return str; }
void JXFSBindingManager::Exec ( const JCharacter* fullProgramName, const JBoolean askForArgs ) { JXFSBindingManager* me = Instance(); JString cmd; JSplitPathAndName(fullProgramName, &(me->itsScriptPath), &cmd); #ifdef _J_UNIX cmd.Prepend("./"); #endif if (askForArgs && me->itsRunScriptDialog == NULL) { me->itsRunScriptDialog = new JXFSRunScriptDialog(cmd); assert( me->itsRunScriptDialog != NULL ); me->ListenTo(me->itsRunScriptDialog); me->itsRunScriptDialog->BeginDialog(); } else if (!askForArgs) { (JXGetApplication())->DisplayBusyCursor(); Exec(me->itsScriptPath, cmd, JFSBinding::kRunPlain); } }
void GMMIMEParser::ParseQuotedPrintable ( JString* text ) { // read until '=' // if next two characters are hex, then decode and replace // if next char is whitespace, then toss = --> '\n' // if neither of the above, just toss the '=', this is an error JIndex findex = 1; while (text->LocateNextSubstring("=", &findex)) { JSize size = text->GetLength(); if (findex < size) { JCharacter c = text->GetCharacter(findex + 1); if (isspace(c) || (c == '\n')) { JIndex rIndex = findex; if (text->LocateNextSubstring("\n", &rIndex)) { text->RemoveSubstring(findex, rIndex); } else { text->RemoveSubstring(findex, text->GetLength()); } } else if (findex < size - 1) { JString hex = text->GetSubstring(findex + 1, findex + 2); hex.Prepend("0x"); JInteger hexVal; if (hex.ConvertToInteger(&hexVal)) { text->RemoveSubstring(findex, findex + 2); c = (JCharacter)hexVal; text->InsertCharacter(c, findex); findex++; } else { text->RemoveSubstring(findex, findex); } } else { text->RemoveSubstring(findex, text->GetLength()); } } else { text->RemoveSubstring(findex, findex); } } }
JString CMLineAddressTable::BuildAddress ( const JString& addr ) { JString s = addr; JIndex i; if (s.LocateSubstring(" ", &i)) { s.RemoveSubstring(i, s.GetLength()); } s.Prepend("0x"); return s; }
void JXDocktab::UpdateActionMenu() { JXDockManager* dockMgr; if (!JXGetDockManager(&dockMgr)) { itsActionMenu->RemoveAllItems(); return; } while (itsActionMenu->GetItemCount() >= kShowFirstDockCmd) { itsActionMenu->RemoveItem(itsActionMenu->GetItemCount()); } JPtrArray<JXDockDirector>* dockList = dockMgr->GetDockList(); const JSize dockCount = dockList->GetElementCount(); for (JIndex i=1; i<=dockCount; i++) { JString itemText = ((dockList->NthElement(i))->GetWindow())->GetTitle(); itemText.Prepend(JGetString(kShowDockPrefixID)); itsActionMenu->AppendItem(itemText); } const JBoolean isDocked = (GetWindow())->IsDocked(); itsActionMenu->SetItemEnable(kUndockCmd, isDocked); itsActionMenu->SetItemEnable(kUndockAllCompartmentCmd, isDocked); itsActionMenu->SetItemEnable(kUndockAllDockCmd, isDocked); itsActionMenu->SetItemEnable(kUndockAllCmd, JI2B(dockCount > 0)); itsActionMenu->SetItemEnable(kDockAllDefConfigCmd, dockMgr->CanDockAll()); itsActionMenu->SetItemEnable(kUpdateWindowTypeMapCmd, (GetWindow())->HasWindowType()); if (isDocked) { itsActionMenu->SetItemText(kUpdateWindowTypeMapCmd, JGetString(kAddToWindowTypeMapID)); } else { itsActionMenu->SetItemText(kUpdateWindowTypeMapCmd, JGetString(kRemoveFromWindowTypeMapID)); } }
void XDLink::SetProgram ( const JCharacter* fileName ) { Send("detach"); // StopDebugger(); // avoid broadcasting DebuggerRestarted // StartDebugger(); itsProgramConfigFileName.Clear(); itsSourcePathList->DeleteAll(); JString fullName; if (!JConvertToAbsolutePath(fileName, NULL, &fullName) || !JFileReadable(fullName)) { const JString error = JGetString("ConfigFileUnreadable::XDLink"); Broadcast(UserOutput(error, kJTrue)); return; } else if (CMMDIServer::IsBinary(fullName)) { const JString error = JGetString("ConfigFileIsBinary::XDLink"); Broadcast(UserOutput(error, kJTrue)); return; } JString line; if (!CMMDIServer::GetLanguage(fullName, &line) || JStringCompare(line, "php", kJFalse) != 0) { const JString error = JGetString("ConfigFileWrongLanguage::XDLink"); Broadcast(UserOutput(error, kJTrue)); return; } JString path, name, suffix; JSplitPathAndName(fullName, &path, &name); JSplitRootAndSuffix(name, &itsProgramName, &suffix); itsProgramConfigFileName = fullName; ifstream input(fullName); while (1) { line = JReadLine(input); line.TrimWhitespace(); if (line.BeginsWith("source-path:")) { line.RemoveSubstring(1, 12); line.TrimWhitespace(); name = JCombinePathAndName(path, line); itsSourcePathList->Append(name); } else if (!line.IsEmpty() && !line.BeginsWith("code-medic:")) { line.Prepend("Unknown option: "); line.AppendCharacter('\n'); Broadcast(UserOutput(line, kJTrue)); } if (!input.good()) { break; } } XDSetProgramTask* task = new XDSetProgramTask(); assert( task != NULL ); task->Go(); }
JString JConvertToRelativePath ( const JCharacter* origPath, const JCharacter* origBase ) { // Check that they are both absolute paths. assert( origPath != NULL && origPath[0] == '/' && origBase != NULL && origBase[0] == '/' ); // Remove extra directory separators // and make sure that base ends with one. JString path = origPath; JCleanPath(&path); JString base = origBase; JCleanPath(&base); JAppendDirSeparator(&base); // Find and remove the matching directories at the beginning. // The while loop backs us up so we only consider complete directory names. JBoolean hadTDS = kJTrue; if (path.GetLastCharacter() != '/') { path.AppendCharacter('/'); hadTDS = kJFalse; } JSize matchLength = JCalcMatchLength(path, base); if (!hadTDS) { path.RemoveSubstring(path.GetLength(), path.GetLength()); } while (base.GetCharacter(matchLength) != '/') { matchLength--; } assert( matchLength >= 1 ); if (matchLength == 1) { return path; } if (matchLength > path.GetLength()) { base.RemoveSubstring(matchLength, matchLength); matchLength--; } path.RemoveSubstring(1, matchLength); base.RemoveSubstring(1, matchLength); if (base.IsEmpty()) { path.Prepend("./"); return path; } // The number of remaining directory separators in base // is the number of levels to go up. JSize upCount = 0; const JSize baseLength = base.GetLength(); for (JIndex i=1; i<=baseLength; i++) { if (base.GetCharacter(i) == '/') { upCount++; path.Prepend("../"); } } assert( upCount > 0 ); return path; }
JBoolean JGetTrueName ( const JCharacter* name, JString* trueName ) { trueName->Clear(); if (!JNameUsed(name)) { return kJFalse; } // check if it is a directory else if (JDirectoryExists(name)) { const JString currPath = JGetCurrentDirectory(); JError err = JChangeDirectory(name); if (!err.OK()) { return kJFalse; } *trueName = JGetCurrentDirectory(); err = JChangeDirectory(currPath); assert_ok( err ); return kJTrue; } // it is a file, socket, fifo, etc. else { JString origPath, fileName; JSplitPathAndName(name, &origPath, &fileName); // get true directory JString truePath; if (!JGetTrueName(origPath, &truePath)) { return kJFalse; } // resolve symbolic link JString target; if ((JGetSymbolicLinkTarget(name, &target)).OK()) { if (JIsRelativePath(target)) { target.Prepend(truePath); } return JGetTrueName(target, trueName); } else { *trueName = JCombinePathAndName(truePath, fileName); return kJTrue; } } }
void CBCompileDocument::AppendText ( const JString& origText ) { const JString* text = &origText; JBoolean deleteText = kJFalse; if (strchr(*text, kMultibyteMarker) != NULL) { JString* s = jnew JString(origText); assert( s != NULL ); text = s; deleteText = kJTrue; JSize length = s->GetLength(); for (JIndex i=1; i<=length; i++) { if (s->GetCharacter(i) == kMultibyteMarker && i <= length-2) { const unsigned char c1 = s->GetCharacter(i+1); const unsigned char c2 = s->GetCharacter(i+2); const JIndex u = (((unsigned int) (unsigned char) c1) << 8) | ((unsigned int) (unsigned char) c2); if (u == 32920 || u == 32921) { s->ReplaceSubstring(i, i+2, "'"); } else { std::cout << "jcc: AppendText: unicode: " << u << std::endl; s->ReplaceSubstring(i, i+2, "\x80"); } length -= 2; } } } const JBoolean isJavacError = javacOutputRegex.Match(*text); JIndexRange gccPrevLineRange, gccRange; const JBoolean isGCCError = JI2B(!isJavacError && gccErrorRegex.Match(*text, &gccRange)); JIndexRange flexRange; const JBoolean isFlexError = flexErrorRegex.Match(*text, &flexRange); JIndexRange bisonRange; const JBoolean isBisonError = bisonErrorRegex.Match(*text, &bisonRange); JIndexRange makeRange; const JBoolean isMakeError = JI2B( makeErrorRegex.Match(*text, &makeRange) && !text->EndsWith(makeIgnoreErrorStr) ); JArray<JIndexRange> absoftRangeList; const JBoolean isAbsoftError = absoftErrorRegex.Match(*text, &absoftRangeList); JArray<JIndexRange> maven2RangeList; const JBoolean isMaven2Error = maven2ErrorRegex.Match(*text, &maven2RangeList); JArray<JIndexRange> maven3RangeList; const JBoolean isMaven3Error = maven3ErrorRegex.Match(*text, &maven3RangeList); if (isGCCError && gccErrorRegex.Match(itsPrevLine, &gccPrevLineRange) && gccPrevLineRange == gccRange && JCompareMaxN(itsPrevLine, *text, gccRange.last, kJTrue)) { JString s = *text; s.RemoveSubstring(1, gccRange.last - 1); s.Prepend(" /"); // in front of 1 or 2 trailing newlines CBTextEditor* te = GetTextEditor(); te->SetCaretLocation(te->GetTextLength() - (theDoubleSpaceFlag ? 1 : 0)); te->Paste(s); } else if (!isJavacError && !isGCCError && gccErrorRegex.Match(itsPrevLine, &gccPrevLineRange) && text->BeginsWith(gccMultilinePrefix) && text->GetLength() > kGCCMultilinePrefixLength && !isspace(text->GetCharacter(kGCCMultilinePrefixLength+1))) { JString s = *text; s.RemoveSubstring(1, strlen(gccMultilinePrefix)); CBTextEditor* te = GetTextEditor(); te->SetCaretLocation(te->GetTextLength() - (theDoubleSpaceFlag ? 1 : 0)); te->Paste(s); } else { CBTextEditor* te = GetTextEditor(); const JIndex startIndex = te->GetTextLength() + 1; CBExecOutputDocument::AppendText(*text); if (theDoubleSpaceFlag) { te->Paste("\n"); } itsPrevLine = *text; // display file name in bold and activate Errors menu JIndexRange boldRange; if (isJavacError) { JArray<JIndexRange> javacMatchList; if (javacErrorRegex.Match(*text, &javacMatchList)) { const JIndexRange r = javacMatchList.GetElement(2); boldRange.Set(startIndex + r.first-1, startIndex + r.last-1); } } else if (isGCCError) { boldRange.Set(startIndex, startIndex + gccRange.first - 1); } else if (isFlexError) { boldRange.Set(startIndex+1, startIndex + flexRange.first); } else if (isBisonError) { boldRange.Set(startIndex+2, startIndex + bisonRange.first + 1); } else if (isMakeError) { boldRange.SetFirstAndLength(startIndex, text->GetLength()); } else if (isAbsoftError) { boldRange = absoftRangeList.GetElement(2); boldRange += startIndex-1; } else if (isMaven2Error) { boldRange = maven2RangeList.GetElement(2); boldRange += startIndex-1; } else if (isMaven3Error) { boldRange = maven3RangeList.GetElement(2); boldRange += startIndex-1; } if (!boldRange.IsEmpty()) { te->JTextEditor::SetFont(boldRange.first, boldRange.last, GetErrorFont(), kJTrue); if (!itsHasErrorsFlag) { itsHasErrorsFlag = kJTrue; itsErrorMenu->Activate(); JXWindow* window = GetWindow(); JString windowTitle = window->GetTitle(); windowTitle.SetCharacter(1, '!'); windowTitle.SetCharacter(2, '!'); windowTitle.SetCharacter(3, '!'); window->SetTitle(windowTitle); } } } if (deleteText) { jdelete text; } }
JString GMessageHeader::DecodeMIMEWord ( const JBoolean qType, JString* header, const JIndexRange range ) { JString temp; JIndex findex = range.first; // first ? '=?' JBoolean ok = header->LocateNextSubstring("?", &findex); if (!ok) { return temp; } findex++; // second ? '?Q' ok = header->LocateNextSubstring("?", &findex); if (!ok) { return temp; } // third ? 'Q?' findex++; ok = header->LocateNextSubstring("?", &findex); if (!ok || (findex > range.last)) { return temp; } JIndex endIndex = findex + 1; // final ? '?=' ok = header->LocateNextSubstring("?", &endIndex); if (!ok || (endIndex > range.last)) { return temp; } // so the encoded text is between findex and endIndex. if (qType) { JIndex dIndex = findex + 1; while (dIndex < endIndex) { JCharacter c = header->GetCharacter(dIndex); if (c == '=') { JString hex = header->GetSubstring(dIndex + 1, dIndex + 2); hex.Prepend("0x"); JInteger hexVal; if (hex.ConvertToInteger(&hexVal)) { c = (JCharacter)hexVal; temp.AppendCharacter(c); dIndex += 3; } } else if (c == '_') { temp.AppendCharacter(' '); dIndex++; } else { temp.AppendCharacter(c); dIndex++; } } } else { if (findex + 1 > header->GetLength()) { return temp; } if (endIndex - 1 < findex + 1) { return temp; } temp = header->GetSubstring(findex + 1, endIndex - 1); const std::string s(temp.GetCString(), temp.GetLength()); std::istringstream is(s); std::ostringstream os; JDecodeBase64(is, os); temp = os.str(); } return temp; }
void SMTPMessage::HandleAddresses() { JPtrArray<JString> names(JPtrArrayT::kForgetAll); GParseNameList(*itsTo, names); ReplaceAliases(names); while (!names.IsEmpty()) { JString* str = names.GetFirstElement(); if (!str->BeginsWith("<")) { str->Prepend("<"); str->Append(">"); } if (itsToNames->InsertSorted(str,kJFalse)) { names.RemoveElement(1); } else { names.DeleteElement(1); } } GParseNameList(*itsCC, names); ReplaceAliases(names); while (!names.IsEmpty()) { JString* str = names.GetFirstElement(); if (!str->BeginsWith("<")) { str->Prepend("<"); str->Append(">"); } JIndex findex; if (itsToNames->SearchSorted(str, JOrderedSetT::kFirstMatch, &findex)) { names.DeleteElement(1); } else { if (itsCcNames->InsertSorted(str,kJFalse)) { names.RemoveElement(1); } else { names.DeleteElement(1); } } } GParseNameList(*itsBCC, names); ReplaceAliases(names); while (!names.IsEmpty()) { JString* str = names.GetFirstElement(); if (!str->BeginsWith("<")) { str->Prepend("<"); str->Append(">"); } JIndex findex; if (itsToNames->SearchSorted(str, JOrderedSetT::kFirstMatch, &findex)) { names.DeleteElement(1); } else { if (itsCcNames->SearchSorted(str, JOrderedSetT::kFirstMatch, &findex)) { names.DeleteElement(1); } else { if (itsBccNames->InsertSorted(str,kJFalse)) { names.RemoveElement(1); } else { names.DeleteElement(1); } } } } }
JString JGetClosestDirectory ( const JCharacter* origDirName, const JBoolean requireWrite, const JCharacter* basePath ) { assert( !JStringEmpty(origDirName) ); JString workingDir; if (!JStringEmpty(basePath)) { workingDir = basePath; JAppendDirSeparator(&workingDir); } else { workingDir = JGetCurrentDirectory(); } JString dirName = origDirName; JString homeDir; JSize homeLength; if (origDirName[0] == '~' && !JExpandHomeDirShortcut(origDirName, &dirName, &homeDir, &homeLength)) { return JGetRootDirectory(); } else if (JIsRelativePath(origDirName)) { dirName.Prepend(workingDir); } assert( !JIsRelativePath(dirName) ); JString newDir, junkName; while (!JDirectoryExists(dirName) || !JCanEnterDirectory(dirName) || !JDirectoryReadable(dirName) || (requireWrite && !JDirectoryWritable(dirName))) { JStripTrailingDirSeparator(&dirName); if (JIsRootDirectory(dirName)) { break; } JSplitPathAndName(dirName, &newDir, &junkName); dirName = newDir; } // convert back to partial path, if possible if (origDirName[0] == '~' && dirName.BeginsWith(homeDir)) { dirName.ReplaceSubstring(1, homeDir.GetLength(), origDirName, homeLength); } else if (JIsRelativePath(origDirName) && dirName.GetLength() > workingDir.GetLength() && dirName.BeginsWith(workingDir)) { dirName.RemoveSubstring(1, workingDir.GetLength()); } return dirName; }