################################################################################
# Copyright (c) 2007, 2008 Remy Suen 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
#
# Contributors:
#    Remy Suen <remy.suen@gmail.com> - initial API and implementation
#    Nick Boldt <codeslave@ca.ibm.com> - bug 206528, 209410
#    Dominik Goepel <dominik.goepel@gmx.de> - bug 216644
################################################################################

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}

