Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 104046 Details for
Bug 229014
URL Links in Task editor include parens and other punctuation
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
updateed patch
clipboard.txt (text/plain), 9.42 KB, created by
Frank Becker
on 2008-06-06 16:24:23 EDT
(
hide
)
Description:
updateed patch
Filename:
MIME Type:
Creator:
Frank Becker
Created:
2008-06-06 16:24:23 EDT
Size:
9.42 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.mylyn.tasks.ui >Index: src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryTextViewerConfiguration.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryTextViewerConfiguration.java,v >retrieving revision 1.17 >diff -u -r1.17 RepositoryTextViewerConfiguration.java >--- src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryTextViewerConfiguration.java 1 Jun 2008 10:37:16 -0000 1.17 >+++ src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryTextViewerConfiguration.java 6 Jun 2008 20:21:46 -0000 >@@ -16,6 +16,7 @@ > import org.eclipse.core.runtime.IAdaptable; > import org.eclipse.jface.preference.JFacePreferences; > import org.eclipse.jface.resource.JFaceResources; >+import org.eclipse.jface.text.BadLocationException; > import org.eclipse.jface.text.IDocument; > import org.eclipse.jface.text.IRegion; > import org.eclipse.jface.text.TextAttribute; >@@ -30,9 +31,10 @@ > import org.eclipse.jface.text.presentation.PresentationReconciler; > import org.eclipse.jface.text.reconciler.IReconciler; > import org.eclipse.jface.text.rules.DefaultDamagerRepairer; >+import org.eclipse.jface.text.rules.ICharacterScanner; >+import org.eclipse.jface.text.rules.IPredicateRule; > import org.eclipse.jface.text.rules.IRule; > import org.eclipse.jface.text.rules.IToken; >-import org.eclipse.jface.text.rules.MultiLineRule; > import org.eclipse.jface.text.rules.RuleBasedScanner; > import org.eclipse.jface.text.rules.SingleLineRule; > import org.eclipse.jface.text.rules.Token; >@@ -42,6 +44,7 @@ > import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin; > import org.eclipse.mylyn.tasks.core.ITask; > import org.eclipse.mylyn.tasks.core.TaskRepository; >+import org.eclipse.mylyn.tasks.ui.AbstractRepositoryConnectorUi; > import org.eclipse.mylyn.tasks.ui.TaskHyperlink; > import org.eclipse.swt.SWT; > import org.eclipse.swt.custom.StyleRange; >@@ -105,7 +108,7 @@ > > private RepositoryTextScanner getDefaultScanner() { > if (scanner == null) { >- scanner = new RepositoryTextScanner(getMode()); >+ scanner = new RepositoryTextScanner(getMode(), taskRepository); > } > return scanner; > } >@@ -117,7 +120,14 @@ > } else if (mode == Mode.TASK_RELATION) { > return new IHyperlinkDetector[] { new TaskRelationHyperlinkDetector() }; > } >- return super.getHyperlinkDetectors(sourceViewer); >+ IHyperlinkDetector[] temp = super.getHyperlinkDetectors(sourceViewer); >+ IHyperlinkDetector[] erg = new IHyperlinkDetector[4]; >+ erg[0] = temp[0]; >+ erg[1] = temp[2]; >+ erg[2] = temp[3]; >+ erg[3] = temp[4]; >+ return erg; >+// return super.getHyperlinkDetectors(sourceViewer); > } > > @Override >@@ -244,32 +254,93 @@ > > private static class RepositoryTextScanner extends RuleBasedScanner { > >- public RepositoryTextScanner(Mode mode) { >+ public RepositoryTextScanner(Mode mode, TaskRepository repository) { > IToken bugToken = new Token(new TextAttribute(JFaceResources.getColorRegistry().get( > JFacePreferences.ACTIVE_HYPERLINK_COLOR))); > IToken quoteToken = new Token(new TextAttribute(CommonColors.TEXT_QUOTED)); >- IRule[] rules = new IRule[16]; >- rules[0] = (new SingleLineRule("http://", " ", bugToken)); >- rules[1] = (new SingleLineRule("https://", " ", bugToken)); >- rules[2] = (new SingleLineRule("bug#", " ", bugToken)); >- rules[3] = (new SingleLineRule("bug#", "", bugToken)); >- rules[4] = (new SingleLineRule("bug #", "", bugToken)); >- rules[5] = (new SingleLineRule("http://", "\n", bugToken)); >- rules[6] = (new SingleLineRule("https://", "\n", bugToken)); >- rules[7] = (new SingleLineRule("task#", " ", bugToken)); >- rules[8] = (new MultiLineRule("task#", "\n", bugToken)); >- rules[9] = (new MultiLineRule("task# ", " ", bugToken)); >- rules[10] = (new SingleLineRule("task #", "\n", bugToken)); >- rules[11] = (new SingleLineRule("*** This bug has been ", "***", bugToken)); >- rules[12] = (new SingleLineRule("http://", "", bugToken)); >- rules[13] = (new SingleLineRule("https://", "", bugToken)); >- rules[14] = (new MultiLineRule("task #", " ", bugToken)); >+ IRule[] rules = new IRule[3]; >+ rules[0] = (new TaskRule(repository, bugToken)); >+ rules[1] = (new SingleLineRule("*** This bug has been ", "***", bugToken)); > SingleLineRule quoteRule = new SingleLineRule(">", null, quoteToken, (char) 0, true); > quoteRule.setColumnConstraint(0); >- rules[15] = quoteRule; >+ rules[2] = quoteRule; > setRules(rules); > } > >+ public void addToOffset(int length) { >+ fOffset += length; >+ } >+ >+ public void addToTokenOffset(int length) { >+ fTokenOffset += length; >+ } >+ >+ public String getLineTextFromPos() { >+ int line; >+ try { >+ line = fDocument.getLineOfOffset(fOffset); >+ int start = fDocument.getLineOffset(line); >+ int length = fDocument.getLineLength(line); >+ String erg = fDocument.get(fOffset, length - (fOffset - start)); >+ return erg; >+ } catch (BadLocationException e) { >+ // TODO Auto-generated catch block >+ e.printStackTrace(); >+ } >+ return null; >+ } >+ >+ } >+ >+ private static class TaskRule implements IPredicateRule { >+ >+ private final IToken taskToken; >+ >+ private final TaskRepository repository; >+ >+ private final TaskUrlHyperlinkDetector urlHyperlinkDetector; >+ >+ public TaskRule(TaskRepository repository, IToken token) { >+ this.repository = repository; >+ this.taskToken = token; >+ urlHyperlinkDetector = new TaskUrlHyperlinkDetector(); >+ } >+ >+ public IToken evaluate(ICharacterScanner scanner, boolean resume) { >+ String text = ((RepositoryTextScanner) scanner).getLineTextFromPos(); >+ if (text == null || text.length() == 0) { >+ return Token.UNDEFINED; >+ } >+ >+ AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getConnectorUi(repository.getConnectorKind()); >+ if (connectorUi == null) { >+ return Token.UNDEFINED; >+ } >+ IHyperlink[] hyperlinks = connectorUi.findHyperlinks(repository, text, 0, 0); >+ if (hyperlinks == null || hyperlinks.length == 0) { >+ hyperlinks = urlHyperlinkDetector.findHyperlinks(text, 1, 0); >+ } >+ if (hyperlinks != null && hyperlinks.length > 0) { >+ IRegion aa = hyperlinks[0].getHyperlinkRegion(); >+ aa.getLength(); >+ if (aa.getOffset() > 0) { >+ ((RepositoryTextScanner) scanner).addToTokenOffset(aa.getOffset()); >+ } >+ ((RepositoryTextScanner) scanner).addToOffset(aa.getLength() + aa.getOffset()); >+ >+ return taskToken; >+ } >+ return Token.UNDEFINED; >+ } >+ >+ public IToken getSuccessToken() { >+ return taskToken; >+ } >+ >+ public IToken evaluate(ICharacterScanner scanner) { >+ return evaluate(scanner, false); >+ } >+ > } > > @Override >Index: src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskUrlHyperlinkDetector.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskUrlHyperlinkDetector.java,v >retrieving revision 1.3 >diff -u -r1.3 TaskUrlHyperlinkDetector.java >--- src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskUrlHyperlinkDetector.java 1 Mar 2008 21:38:51 -0000 1.3 >+++ src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskUrlHyperlinkDetector.java 6 Jun 2008 20:21:47 -0000 >@@ -35,8 +35,6 @@ > IDocument document = textViewer.getDocument(); > > int offset = region.getOffset(); >- >- String urlString = null; > if (document == null) { > return null; > } >@@ -52,6 +50,13 @@ > > int offsetInLine = offset - lineInfo.getOffset(); > >+ return findHyperlinks(line, offsetInLine, lineInfo.getOffset()); >+ } >+ >+ public IHyperlink[] findHyperlinks(String line, int offsetInLine, int offset) { >+ char doubleChar = ' '; >+ >+ String urlString = null; > boolean startDoubleQuote = false; > int urlOffsetInLine = 0; > int urlLength = 0; >@@ -68,10 +73,32 @@ > if (urlOffsetInLine > -1) { > ch = line.charAt(urlOffsetInLine); > } >- startDoubleQuote = ch == '"'; > } while (Character.isUnicodeIdentifierStart(ch)); > urlOffsetInLine++; > >+ switch (ch) { >+ case '"': >+ doubleChar = '"'; >+ break; >+ case '\'': >+ doubleChar = '\''; >+ break; >+ case '[': >+ doubleChar = ']'; >+ break; >+ case '(': >+ doubleChar = ')'; >+ break; >+ case '{': >+ doubleChar = '}'; >+ break; >+ >+ default: >+ doubleChar = ' '; >+ break; >+ } >+ startDoubleQuote = doubleChar != ' '; >+ > // Right to "://" > StringTokenizer tokenizer = new StringTokenizer(line.substring(urlSeparatorOffset + 3), > " \t\n\r\f<>", false); //$NON-NLS-1$ >@@ -93,7 +120,7 @@ > > if (startDoubleQuote) { > int endOffset = -1; >- int nextDoubleQuote = line.indexOf('"', urlOffsetInLine); >+ int nextDoubleQuote = line.indexOf(doubleChar, urlOffsetInLine); > int nextWhitespace = line.indexOf(' ', urlOffsetInLine); > if (nextDoubleQuote != -1 && nextWhitespace != -1) { > endOffset = Math.min(nextDoubleQuote, nextWhitespace); >@@ -109,6 +136,10 @@ > > // Set and validate URL string > try { >+ char lastChar = line.charAt(urlOffsetInLine + urlLength - 1); >+ if (lastChar == ',' || lastChar == '.') { >+ urlLength--; >+ } > urlString = line.substring(urlOffsetInLine, urlOffsetInLine + urlLength); > new URL(urlString); > } catch (MalformedURLException ex) { >@@ -116,7 +147,7 @@ > return null; > } > >- IRegion urlRegion = new Region(lineInfo.getOffset() + urlOffsetInLine, urlLength); >+ IRegion urlRegion = new Region(offset + urlOffsetInLine, urlLength); > return new IHyperlink[] { new TaskUrlHyperlink(urlRegion, urlString) }; > } > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 229014
:
101535
|
101536
|
101626
|
101629
| 104046 |
104047