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 76588 Details for
Bug 200117
[api] support spell checking and hyperlink detection in the source editor of the Wiki Page Editor
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.
[patch]
make RepositoryViewerConfig public API and rename to TaskTextViewerConfig
clipboard.txt (text/plain), 19.33 KB, created by
Steffen Pingel
on 2007-08-21 18:26:22 EDT
(
hide
)
Description:
make RepositoryViewerConfig public API and rename to TaskTextViewerConfig
Filename:
MIME Type:
Creator:
Steffen Pingel
Created:
2007-08-21 18:26:22 EDT
Size:
19.33 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.mylyn.tasks.ui >Index: src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryViewerConfig.java >=================================================================== >RCS file: src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryViewerConfig.java >diff -N src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryViewerConfig.java >--- src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryViewerConfig.java 14 Aug 2007 20:55:38 -0000 1.13 >+++ /dev/null 1 Jan 1970 00:00:00 -0000 >@@ -1,191 +0,0 @@ >-/******************************************************************************* >- * Copyright (c) 2004, 2007 Mylyn project committers and others. >- * All rights reserved. This program and the accompanying materials >- * are made available under the terms of the Eclipse Public License v1.0 >- * which accompanies this distribution, and is available at >- * http://www.eclipse.org/legal/epl-v10.html >- *******************************************************************************/ >- >-package org.eclipse.mylyn.internal.tasks.ui.editors; >- >-import java.util.HashMap; >-import java.util.Map; >- >-import org.eclipse.core.runtime.IAdaptable; >-import org.eclipse.jface.text.IDocument; >-import org.eclipse.jface.text.TextAttribute; >-import org.eclipse.jface.text.hyperlink.DefaultHyperlinkPresenter; >-import org.eclipse.jface.text.hyperlink.IHyperlink; >-import org.eclipse.jface.text.hyperlink.IHyperlinkPresenter; >-import org.eclipse.jface.text.presentation.IPresentationReconciler; >-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.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; >-import org.eclipse.jface.text.source.ISourceViewer; >-import org.eclipse.mylyn.internal.tasks.ui.TaskListColorsAndFonts; >-import org.eclipse.mylyn.tasks.core.AbstractTask; >-import org.eclipse.mylyn.tasks.core.TaskList; >-import org.eclipse.mylyn.tasks.core.TaskRepository; >-import org.eclipse.mylyn.tasks.ui.TaskHyperlink; >-import org.eclipse.mylyn.tasks.ui.TasksUiPlugin; >-import org.eclipse.swt.SWT; >-import org.eclipse.swt.graphics.RGB; >-import org.eclipse.swt.widgets.Control; >-import org.eclipse.ui.editors.text.EditorsUI; >-import org.eclipse.ui.editors.text.TextSourceViewerConfiguration; >- >-/** >- * @author Rob Elves >- */ >-public class RepositoryViewerConfig extends TextSourceViewerConfiguration { >- >- private RepositoryTextScanner scanner = null; >- >- private boolean spellcheck = false; >- >- public RepositoryViewerConfig(boolean spellchecking) { >- super(EditorsUI.getPreferenceStore()); >- this.spellcheck = spellchecking; >- } >- >- @Override >- public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) { >- PresentationReconciler reconciler = new PresentationReconciler(); >- reconciler.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer)); >- >- DefaultDamagerRepairer dr = new DefaultDamagerRepairer(getDefaultScanner()); >- reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE); >- reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE); >- >- return reconciler; >- } >- >- private RepositoryTextScanner getDefaultScanner() { >- if (scanner == null) { >- scanner = new RepositoryTextScanner(); >- } >- return scanner; >- } >- >-// @Override >-// public IHyperlinkDetector[] getHyperlinkDetectors(ISourceViewer sourceViewer) { >-// List<IHyperlinkDetector> detectors = new ArrayList<IHyperlinkDetector>(); >-// detectors.addAll(Arrays.asList(TasksUiPlugin.getDefault().getTaskHyperlinkDetectors())); >-// return detectors.toArray(new IHyperlinkDetector[detectors.size()]); >-// } >- >- @Override >- @SuppressWarnings("unchecked") >- protected Map getHyperlinkDetectorTargets(final ISourceViewer sourceViewer) { >- IAdaptable context = new IAdaptable() { >- public Object getAdapter(Class adapter) { >- if(adapter==TaskRepository.class) { >- if(sourceViewer instanceof RepositoryTextViewer) { >- return ((RepositoryTextViewer) sourceViewer).getRepository(); >- } >- } >- return null; >- } >- }; >- >- Map targets = new HashMap(); >- targets.put("org.eclipse.ui.DefaultTextEditor", context); >- targets.put("org.eclipse.mylyn.tasks.ui.TaskEditor", context); >- return targets; >- } >- >- @Override >- public IHyperlinkPresenter getHyperlinkPresenter(final ISourceViewer sourceViewer) { >- return new DefaultHyperlinkPresenter(new RGB(0, 0, 200)) { >- @Override >- public void showHyperlinks(IHyperlink[] hyperlinks) { >- super.showHyperlinks(hyperlinks); >- >- if (hyperlinks != null && hyperlinks.length > 0 && hyperlinks[0] instanceof TaskHyperlink) { >- TaskHyperlink hyperlink = (TaskHyperlink) hyperlinks[0]; >- >- TaskList taskList = TasksUiPlugin.getTaskListManager().getTaskList(); >- String repositoryUrl = hyperlink.getRepository().getUrl(); >- >- AbstractTask task = taskList.getTask(repositoryUrl, hyperlink.getTaskId()); >- if (task == null) { >- task = taskList.getTaskByKey(repositoryUrl, hyperlink.getTaskId()); >- } >- >- if (task != null) { >- Control cursorControl = sourceViewer.getTextWidget().getDisplay().getCursorControl(); >- if (task.getTaskKey() == null) { >- cursorControl.setToolTipText(task.getSummary()); >- } else { >- cursorControl.setToolTipText(task.getTaskKey() + ": " + task.getSummary()); >- } >- } >- } >- } >- >- @Override >- public void hideHyperlinks() { >- Control cursorControl = sourceViewer.getTextWidget().getDisplay().getCursorControl(); >- if (cursorControl != null) { >- cursorControl.setToolTipText(null); >- } >- >- super.hideHyperlinks(); >- } >- >- public void uninstall() { >- // ignore >- super.uninstall(); >- } >- }; >- } >- >- @Override >- public int getHyperlinkStateMask(ISourceViewer sourceViewer) { >- return SWT.NONE; >- } >- >- @Override >- public IReconciler getReconciler(ISourceViewer sourceViewer) { >- if (spellcheck) { >- return super.getReconciler(sourceViewer); >- } else { >- return null; >- } >- } >- >- static class RepositoryTextScanner extends RuleBasedScanner { >- >- public RepositoryTextScanner() { >- IToken bugToken = new Token(new TextAttribute(TaskListColorsAndFonts.COLOR_HYPERLINK_TEXT)); >- IRule[] rules = new IRule[15]; >- 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[2] = (new MultiLineRule("bug#", " ", bugToken)); >-// rules[3] = (new MultiLineRule("bug #", " ", bugToken)); >-// rules[4] = (new SingleLineRule("bug #", "\n", 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)); >- setRules(rules); >- } >- >- } >- >-} >\ No newline at end of file >Index: src/org/eclipse/mylyn/tasks/ui/editors/TaskFormPage.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/TaskFormPage.java,v >retrieving revision 1.10 >diff -u -r1.10 TaskFormPage.java >--- src/org/eclipse/mylyn/tasks/ui/editors/TaskFormPage.java 20 Aug 2007 21:04:30 -0000 1.10 >+++ src/org/eclipse/mylyn/tasks/ui/editors/TaskFormPage.java 21 Aug 2007 22:27:48 -0000 >@@ -39,7 +39,6 @@ > import org.eclipse.jface.text.source.SourceViewer; > import org.eclipse.mylyn.internal.tasks.ui.TaskListColorsAndFonts; > import org.eclipse.mylyn.internal.tasks.ui.editors.RepositoryTextViewer; >-import org.eclipse.mylyn.internal.tasks.ui.editors.RepositoryViewerConfig; > import org.eclipse.mylyn.internal.tasks.ui.editors.TaskEditorActionContributor; > import org.eclipse.mylyn.tasks.core.TaskRepository; > import org.eclipse.swt.SWT; >@@ -266,7 +265,7 @@ > // order for > // Hyperlink colouring to work. (Presenter needs document object up > // front) >- RepositoryViewerConfig repositoryViewerConfig = new RepositoryViewerConfig(false); >+ TaskTextViewerConfig repositoryViewerConfig = new TaskTextViewerConfig(false); > commentViewer.configure(repositoryViewerConfig); > > IThemeManager themeManager = getSite().getWorkbenchWindow().getWorkbench().getThemeManager(); >@@ -386,7 +385,7 @@ > > // NOTE: Configuration must be applied before the document is set in order for > // Hyperlink coloring to work. (Presenter needs document object up front) >- TextSourceViewerConfiguration viewerConfig = new RepositoryViewerConfig(spellCheck); >+ TextSourceViewerConfiguration viewerConfig = new TaskTextViewerConfig(spellCheck); > commentViewer.configure(viewerConfig); > > commentViewer.setDocument(document, annotationModel); >Index: src/org/eclipse/mylyn/tasks/ui/editors/TaskTextViewerConfig.java >=================================================================== >RCS file: src/org/eclipse/mylyn/tasks/ui/editors/TaskTextViewerConfig.java >diff -N src/org/eclipse/mylyn/tasks/ui/editors/TaskTextViewerConfig.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/mylyn/tasks/ui/editors/TaskTextViewerConfig.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,193 @@ >+/******************************************************************************* >+ * Copyright (c) 2004, 2007 Mylyn project committers and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ *******************************************************************************/ >+ >+package org.eclipse.mylyn.tasks.ui.editors; >+ >+import java.util.HashMap; >+import java.util.Map; >+ >+import org.eclipse.core.runtime.IAdaptable; >+import org.eclipse.jface.text.IDocument; >+import org.eclipse.jface.text.TextAttribute; >+import org.eclipse.jface.text.hyperlink.DefaultHyperlinkPresenter; >+import org.eclipse.jface.text.hyperlink.IHyperlink; >+import org.eclipse.jface.text.hyperlink.IHyperlinkPresenter; >+import org.eclipse.jface.text.presentation.IPresentationReconciler; >+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.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; >+import org.eclipse.jface.text.source.ISourceViewer; >+import org.eclipse.mylyn.internal.tasks.ui.TaskListColorsAndFonts; >+import org.eclipse.mylyn.internal.tasks.ui.editors.RepositoryTextViewer; >+import org.eclipse.mylyn.tasks.core.AbstractTask; >+import org.eclipse.mylyn.tasks.core.TaskList; >+import org.eclipse.mylyn.tasks.core.TaskRepository; >+import org.eclipse.mylyn.tasks.ui.TaskHyperlink; >+import org.eclipse.mylyn.tasks.ui.TasksUiPlugin; >+import org.eclipse.swt.SWT; >+import org.eclipse.swt.graphics.RGB; >+import org.eclipse.swt.widgets.Control; >+import org.eclipse.ui.editors.text.EditorsUI; >+import org.eclipse.ui.editors.text.TextSourceViewerConfiguration; >+ >+/** >+ * @author Rob Elves >+ * @since 2.1 >+ */ >+public class TaskTextViewerConfig extends TextSourceViewerConfiguration { >+ >+ private RepositoryTextScanner scanner = null; >+ >+ private boolean spellcheck = false; >+ >+ public TaskTextViewerConfig(boolean spellchecking) { >+ super(EditorsUI.getPreferenceStore()); >+ this.spellcheck = spellchecking; >+ } >+ >+ @Override >+ public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) { >+ PresentationReconciler reconciler = new PresentationReconciler(); >+ reconciler.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer)); >+ >+ DefaultDamagerRepairer dr = new DefaultDamagerRepairer(getDefaultScanner()); >+ reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE); >+ reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE); >+ >+ return reconciler; >+ } >+ >+ private RepositoryTextScanner getDefaultScanner() { >+ if (scanner == null) { >+ scanner = new RepositoryTextScanner(); >+ } >+ return scanner; >+ } >+ >+// @Override >+// public IHyperlinkDetector[] getHyperlinkDetectors(ISourceViewer sourceViewer) { >+// List<IHyperlinkDetector> detectors = new ArrayList<IHyperlinkDetector>(); >+// detectors.addAll(Arrays.asList(TasksUiPlugin.getDefault().getTaskHyperlinkDetectors())); >+// return detectors.toArray(new IHyperlinkDetector[detectors.size()]); >+// } >+ >+ @Override >+ @SuppressWarnings("unchecked") >+ protected Map getHyperlinkDetectorTargets(final ISourceViewer sourceViewer) { >+ IAdaptable context = new IAdaptable() { >+ public Object getAdapter(Class adapter) { >+ if (adapter == TaskRepository.class) { >+ if (sourceViewer instanceof RepositoryTextViewer) { >+ return ((RepositoryTextViewer) sourceViewer).getRepository(); >+ } >+ } >+ return null; >+ } >+ }; >+ >+ Map targets = new HashMap(); >+ targets.put("org.eclipse.ui.DefaultTextEditor", context); >+ targets.put("org.eclipse.mylyn.tasks.ui.TaskEditor", context); >+ return targets; >+ } >+ >+ @Override >+ public IHyperlinkPresenter getHyperlinkPresenter(final ISourceViewer sourceViewer) { >+ return new DefaultHyperlinkPresenter(new RGB(0, 0, 200)) { >+ @Override >+ public void showHyperlinks(IHyperlink[] hyperlinks) { >+ super.showHyperlinks(hyperlinks); >+ >+ if (hyperlinks != null && hyperlinks.length > 0 && hyperlinks[0] instanceof TaskHyperlink) { >+ TaskHyperlink hyperlink = (TaskHyperlink) hyperlinks[0]; >+ >+ TaskList taskList = TasksUiPlugin.getTaskListManager().getTaskList(); >+ String repositoryUrl = hyperlink.getRepository().getUrl(); >+ >+ AbstractTask task = taskList.getTask(repositoryUrl, hyperlink.getTaskId()); >+ if (task == null) { >+ task = taskList.getTaskByKey(repositoryUrl, hyperlink.getTaskId()); >+ } >+ >+ if (task != null) { >+ Control cursorControl = sourceViewer.getTextWidget().getDisplay().getCursorControl(); >+ if (task.getTaskKey() == null) { >+ cursorControl.setToolTipText(task.getSummary()); >+ } else { >+ cursorControl.setToolTipText(task.getTaskKey() + ": " + task.getSummary()); >+ } >+ } >+ } >+ } >+ >+ @Override >+ public void hideHyperlinks() { >+ Control cursorControl = sourceViewer.getTextWidget().getDisplay().getCursorControl(); >+ if (cursorControl != null) { >+ cursorControl.setToolTipText(null); >+ } >+ >+ super.hideHyperlinks(); >+ } >+ >+ public void uninstall() { >+ // ignore >+ super.uninstall(); >+ } >+ }; >+ } >+ >+ @Override >+ public int getHyperlinkStateMask(ISourceViewer sourceViewer) { >+ return SWT.NONE; >+ } >+ >+ @Override >+ public IReconciler getReconciler(ISourceViewer sourceViewer) { >+ if (spellcheck) { >+ return super.getReconciler(sourceViewer); >+ } else { >+ return null; >+ } >+ } >+ >+ private static class RepositoryTextScanner extends RuleBasedScanner { >+ >+ public RepositoryTextScanner() { >+ IToken bugToken = new Token(new TextAttribute(TaskListColorsAndFonts.COLOR_HYPERLINK_TEXT)); >+ IRule[] rules = new IRule[15]; >+ 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[2] = (new MultiLineRule("bug#", " ", bugToken)); >+// rules[3] = (new MultiLineRule("bug #", " ", bugToken)); >+// rules[4] = (new SingleLineRule("bug #", "\n", 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)); >+ setRules(rules); >+ } >+ >+ } >+ >+} >Index: .refactorings/2007/8/34/refactorings.index >=================================================================== >RCS file: .refactorings/2007/8/34/refactorings.index >diff -N .refactorings/2007/8/34/refactorings.index >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ .refactorings/2007/8/34/refactorings.index 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,2 @@ >+1187734937104 Rename type 'RepositoryViewerConfig' >+1187734975225 Move compilation unit >Index: .refactorings/2007/8/34/refactorings.history >=================================================================== >RCS file: .refactorings/2007/8/34/refactorings.history >diff -N .refactorings/2007/8/34/refactorings.history >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ .refactorings/2007/8/34/refactorings.history 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,5 @@ >+<?xml version="1.0" encoding="utf-8"?> >+<session version="1.0"> >+<refactoring comment="Rename type 'org.eclipse.mylyn.internal.tasks.ui.editors.RepositoryViewerConfig' to 'TaskTextViewerConfig' - Original project: 'org.eclipse.mylyn.tasks.ui' - Original element: 'org.eclipse.mylyn.internal.tasks.ui.editors.RepositoryViewerConfig' - Renamed element: 'org.eclipse.mylyn.internal.tasks.ui.editors.TaskTextViewerConfig' - Update references to refactored element - Update textual occurrences in comments and strings" description="Rename type 'RepositoryViewerConfig'" flags="589830" id="org.eclipse.jdt.ui.rename.type" input="/src<org.eclipse.mylyn.internal.tasks.ui.editors{RepositoryViewerConfig.java[RepositoryViewerConfig" matchStrategy="1" name="TaskTextViewerConfig" qualified="false" references="true" similarDeclarations="false" stamp="1187734937104" textual="false" version="1.0"/> >+<refactoring comment="Move 1 elements(s) to 'org.eclipse.mylyn.tasks.ui/src/org.eclipse.mylyn.tasks.ui.editors' - Original project: 'org.eclipse.mylyn.tasks.ui' - Destination element: 'org.eclipse.mylyn.tasks.ui/src/org.eclipse.mylyn.tasks.ui.editors' - Original element: 'org.eclipse.mylyn.internal.tasks.ui.editors.TaskTextViewerConfig.java' - Update references to refactored element" description="Move compilation unit" destination="/src<org.eclipse.mylyn.tasks.ui.editors" element1="/src<org.eclipse.mylyn.internal.tasks.ui.editors{TaskTextViewerConfig.java" files="0" flags="589830" folders="0" id="org.eclipse.jdt.ui.move" policy="org.eclipse.jdt.ui.moveResources" qualified="false" references="true" stamp="1187734975225" units="1" version="1.0"/> >+</session>
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 Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 200117
:
76576
|
76577
| 76588 |
76589