cleanup (inspection "Java | Class structure | Utility class is not 'final'")
[idea/community.git] / platform / core-impl / src / com / intellij / codeInsight / documentation / PlatformDocumentationUtil.java
1 // Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package com.intellij.codeInsight.documentation;
3
4 import com.intellij.openapi.util.text.StringUtil;
5 import com.intellij.openapi.vfs.VirtualFile;
6 import com.intellij.openapi.vfs.VirtualFileManager;
7 import com.intellij.openapi.vfs.ex.http.HttpFileSystem;
8 import com.intellij.util.SmartList;
9 import org.jetbrains.annotations.NonNls;
10 import org.jetbrains.annotations.NotNull;
11 import org.jetbrains.annotations.Nullable;
12
13 import java.util.List;
14 import java.util.regex.Pattern;
15
16 public final class PlatformDocumentationUtil {
17   private static final @NonNls Pattern ourLtFixupPattern = Pattern.compile("<(?=[^/!\\p{Alpha}])");
18   private static final @NonNls String LT_ENTITY = "&lt;";
19
20   @Nullable
21   public static List<String> getHttpRoots(String @NotNull [] roots, String relPath) {
22     List<String> result = new SmartList<>();
23     for (String root : roots) {
24       VirtualFile virtualFile = VirtualFileManager.getInstance().findFileByUrl(root);
25       if (virtualFile != null) {
26         String url = getDocUrl(virtualFile, relPath);
27         if (url != null) result.add(url);
28       }
29     }
30
31     return result.isEmpty() ? null : result;
32   }
33
34   @Nullable
35   public static String getDocUrl(@NotNull VirtualFile root, String relPath) {
36     if (root.getFileSystem() instanceof HttpFileSystem) {
37       String url = StringUtil.trimEnd(root.getUrl(), "/index.html", true);
38       if (!url.endsWith("/")) {
39         url += "/";
40       }
41       return url + relPath;
42     }
43     else {
44       VirtualFile file = root.findFileByRelativePath(relPath);
45       return file == null ? null : file.getUrl();
46     }
47   }
48
49   /**
50    * Updates HTML contents for display in JEditorPane, which treats invalid HTML somewhat differently than popular browsers.
51    */
52   public static String fixupText(@NotNull CharSequence docText) {
53     return ourLtFixupPattern.matcher(docText).replaceAll(LT_ENTITY);
54   }
55 }