void CodeEditorComponent::mouseDoubleClick (const MouseEvent& e) { CodeDocument::Position tokenStart (getPositionAt (e.x, e.y)); CodeDocument::Position tokenEnd (tokenStart); if (e.getNumberOfClicks() > 2) { tokenStart.setLineAndIndex (tokenStart.getLineNumber(), 0); tokenEnd.setLineAndIndex (tokenStart.getLineNumber() + 1, 0); } else { while (CharacterFunctions::isLetterOrDigit (tokenEnd.getCharacter())) tokenEnd.moveBy (1); tokenStart = tokenEnd; while (tokenStart.getIndexInLine() > 0 && CharacterFunctions::isLetterOrDigit (tokenStart.movedBy (-1).getCharacter())) tokenStart.moveBy (-1); } moveCaretTo (tokenEnd, false); moveCaretTo (tokenStart, true); }
const bool CtrlrLuaMethodCodeEditor::isMouseOverUrl(CodeDocument::Position &position, String *url) { if (position.getPosition() >= document.getNumCharacters()) { return (false); } int moveLeft=0; while (!CharacterFunctions::isWhitespace(position.getCharacter())) { if (position.getPosition() <= 0) break; position.moveBy(-1); moveLeft++; } int start = position.getPosition(); position.setPosition (position.getPosition()+moveLeft); while (!CharacterFunctions::isWhitespace(position.getCharacter())) { if (position.getPosition() >= document.getNumCharacters()) break; position.moveBy(1); } int end = position.getPosition(); const String word = document.getTextBetween (CodeDocument::Position(document, start), CodeDocument::Position(document, end)).trim(); if (word.startsWith ("http://")) { if (url) { *url = word; } return (URL::isProbablyAWebsiteURL (word)); } return (false); }
const CodeDocument::Position CodeDocument::Position::movedBy (const int characterDelta) const { CodeDocument::Position p (*this); p.moveBy (characterDelta); return p; }