blob: 34e1eed730c15be3c86d1d5ca994342681bfc36d [file] [log] [blame]
/*
* Copyright 2000-2009 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.openapi.vcs.changes.issueLinks;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.vcs.IssueNavigationConfiguration;
import com.intellij.util.containers.Convertor;
import com.intellij.xml.util.XmlTagUtilBase;
import com.intellij.util.ui.UIUtil;
import java.util.List;
/**
* @author yole
*/
public class IssueLinkHtmlRenderer {
private IssueLinkHtmlRenderer() {
}
public static String formatTextIntoHtml(final Project project, final String c) {
return "<html><head>" + UIUtil.getCssFontDeclaration(UIUtil.getLabelFont()) + "</head><body>" +
formatTextWithLinks(project, c) + "</body></html>";
}
@SuppressWarnings({"HardCodedStringLiteral"})
public static String formatTextWithLinks(final Project project, final String c, final Convertor<String, String> convertor) {
if (c == null) return "";
String comment = XmlTagUtilBase.escapeString(c, false);
StringBuilder commentBuilder = new StringBuilder();
IssueNavigationConfiguration config = IssueNavigationConfiguration.getInstance(project);
final List<IssueNavigationConfiguration.LinkMatch> list = config.findIssueLinks(comment);
int pos = 0;
for(IssueNavigationConfiguration.LinkMatch match: list) {
TextRange range = match.getRange();
commentBuilder.append(convertor.convert(comment.substring(pos, range.getStartOffset()))).append("<a href=\"").append(match.getTargetUrl()).append("\">");
commentBuilder.append(range.substring(comment)).append("</a>");
pos = range.getEndOffset();
}
commentBuilder.append(convertor.convert(comment.substring(pos)));
comment = commentBuilder.toString();
return comment.replace("\n", "<br>");
}
@SuppressWarnings({"HardCodedStringLiteral"})
public static String formatTextWithLinks(final Project project, final String c) {
return formatTextWithLinks(project, c, Convertor.SELF);
}
}