############################################################################
# Copyright (c) 2007, 2008 Remy Suen and others.
#
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
#
# SPDX-License-Identifier: EPL-2.0
############################################################################

No_Operation_Privileges = {0}: Your name is not in my database of trusted users. You cannot tell me what to do.
Learn_Failure = An error has occurred while performing on a change on the keyword "{0}". I need a maintenance scheduled to review the cause of this error. Please contact rcjsuen.
Learn_Reply_Regex = (add )(.+)
Learn_Reply = The new keyword "{0}" has been stored. In the future, you can ask me about "{0}" and I will respond.
Learn_Conflict = The keyword "{0}" conflicts with a known command. You must use '~set' to replace the existing response, which is currently set to: {1}
Learn_Update_Regex = (set |update )(.+)
Learn_Update = The keyword "{0}" has been updated with the new reply in my database.
Learn_Remove_Regex = (remove )(.+)
Learn_Remove = The keyword "{0}" and its reply has been removed from my data bank.

Bug_Regex = (bug|bug |)([0-9]+)
Bug = Bug {0} - {1}

 status = webPage.substring(webPage.indexOf(BUG_STATUS_OPEN_TAG) + BUG_STATUS_OPEN_TAG.length(), webPage.indexOf(BUG_STATUS_CLOSE_TAG));
 resolution = webPage.substring(webPage.indexOf(RESOLUTION_OPEN_TAG) + RESOLUTION_OPEN_TAG.length(), webPage.indexOf(RESOLUTION_CLOSE_TAG));
 severity = webPage.substring(webPage.indexOf(BUG_SEVERITY_OPEN_TAG) + BUG_SEVERITY_OPEN_TAG.length(), webPage.indexOf(BUG_SEVERITY_CLOSE_TAG));
 assignee = webPage.substring(webPage.substring(0, webPage.indexOf(ASSIGNED_TO_CLOSE_TAG)).lastIndexOf('>') + 1, webPage.indexOf(ASSIGNED_TO_CLOSE_TAG));

BugContent_Regex = (bug|bug |)([0-9]+c[0-9]+)
# {0} = id
# {1} = url
# {2} = product
# {3} = component
# {4} = version
# {5} = platform
# {6} = os
# {7} = status
# {8} = resolution
# {9} = severity
# {10} = assignee
# {11} = summary
BugContent = Bug {0} - {1} - {2} / {3} / {4} - {5} / {6} - {7} / {8} / {9} / - Assignee: {10} - {11}
# For bugs that have no resolution, BugContent2 is used
BugContent2 = Bug {0} - {1} - {2} / {3} / {4} - {5} / {6} - {7} / {8} / - Assignee: {9} - {10}
Bug_Not_Found = Bug {0} does not exist. 

Javadoc_Regex = (api |javadoc )(.+)
Javadoc = Enter "SomeClass" to resolve as "org.eclipse.full.namespace.SomeClass - http://help.eclipse.org/stable/nftopic/.../org/eclipse/namespace/SomeClass.html"
Javadoc_NotFound = No javadocs found for class ''{0}''.
Javadoc_ResultsUnknown = The javadoc search results could not be processed.

NewsgroupSearch_Regex = (news |newsgroup )(.+)
NewsgroupSearch = Try searching the archives - http://www.eclipse.org/search/search.cgi?q={1}&cmd=Search%21&form=extended&wf=574a74&ps=10&m=all&t=5&ul=%2Fnewslists%2Fnews.{0}&wm=wrd&t=News&t=Mail
NewsgroupSearch_Invalid = To search newsgroups, enter ~news projectName some search terms, eg., ~news emf EObject
NewsgroupSearch_InvalidGroup = Newsgroup not found. Try ~news eclipse.parent.project search terms, eg., ~news eclipse.tools.emf EObject

Google_Regex = (g )(.+)
Google = Try googling - http://google.com/search?q={0}

Wiki_Regex = (wiki )(.+)
Wiki = Check out this wiki article - http://wiki.eclipse.org/{0}

EclipseHelp_Regex = (eh )(.+)
EclipseHelp = Check out the fine manual - http://help.eclipse.org/stable/advanced/searchView.jsp?&searchWord={0}

MessageList_Regex = (list)
MessageList = Check out the list of available messages and commands I provide - http://ecf.eclipse.org/~rcjsuen/messages.html - http://ecf.eclipse.org/~rcjsuen/commands.html

SearchPlugins_Regex = (searchplugins )(.+)
SearchPlugins = Try searching for plug-ins: http://www.eclipseplugincentral.com/modules.php?name=search&action=search&q={0} - http://www.eclipse-plugins.info/eclipse/search.jsp?query={0}

CQ_Regex = (cq|cq |)([0-9]+(c[0-9]+)?)
CQ = See CQ {0} - https://dev.eclipse.org/ipzilla/show_bug.cgi?id={1}

