diff --git a/src/main/java/com/shuzijun/leetcode/plugin/manager/CodeManager.java b/src/main/java/com/shuzijun/leetcode/plugin/manager/CodeManager.java index 47264215..e72a5eae 100644 --- a/src/main/java/com/shuzijun/leetcode/plugin/manager/CodeManager.java +++ b/src/main/java/com/shuzijun/leetcode/plugin/manager/CodeManager.java @@ -48,7 +48,7 @@ public static void openCode(Question question, Project project) { } else { if (getQuestion(question, codeTypeEnum, project)) { - question.setContent(CommentUtils.createComment(question.getContent(), codeTypeEnum)); + question.setContent(CommentUtils.createComment(question.getContent(), codeTypeEnum,config)); FileUtils.saveFile(file, VelocityUtils.convert(config.getCustomTemplate(), question)); FileUtils.openFileEditorAndSaveState(file,project,question,fillPath,true); } @@ -312,7 +312,7 @@ private static String getContent(JSONObject jsonObject) { sb.append(""); } sb.append(""); - sb.append("\\n"); + sb.append("
"); } sb.append("
  • \uD83D\uDC4D "+jsonObject.getInteger("likes")+"
  • \uD83D\uDC4E "+jsonObject.getInteger("dislikes")+"
  • "); return sb.toString(); diff --git a/src/main/java/com/shuzijun/leetcode/plugin/model/CodeTypeEnum.java b/src/main/java/com/shuzijun/leetcode/plugin/model/CodeTypeEnum.java index 3f38b020..1a4d68cd 100644 --- a/src/main/java/com/shuzijun/leetcode/plugin/model/CodeTypeEnum.java +++ b/src/main/java/com/shuzijun/leetcode/plugin/model/CodeTypeEnum.java @@ -7,25 +7,25 @@ * @author shuzijun */ public enum CodeTypeEnum { - JAVA("Java", "java", ".java", "//"), - PYTHON("Python", "python", ".py", "# "), - CPP("C++", "cpp", ".cpp", "//"), - PYTHON3("Python3", "python3", ".py", "# "), - C("C", "c", ".c", "//"), - CSHARP("C#", "csharp", ".cs", "//"), - JAVASCRIPT("JavaScript", "javascript", ".js", "//"), - RUBY("Ruby", "ruby", ".rb", "#"), - SWIFT("Swift", "swift", ".swift", "///"), - GO("Go", "golang", ".go", "//"), - SCALA("Scala", "scala", ".scala", "//"), - KOTLIN("Kotlin", "kotlin", ".kt", "//"), - RUST("Rust", "rust", ".rs", "//"), - PHP("PHP", "php", ".php", "//"), - BASH("Bash", "bash", ".sh", "#"), - MYSQL("MySQL", "mysql", ".sql", "#"), - ORACLE("Oracle", "oraclesql", ".sql", "#"), - MSSQLSERVER("MS SQL Server", "mssql", ".sql", "#"), - TypeScript("TypeScript", "typescript", ".ts", "//"), + JAVA("Java", "java", ".java", "//", "/**\n%s\n*/"), + PYTHON("Python", "python", ".py", "# ","\"\"\"\n%s\n\"\"\""), + CPP("C++", "cpp", ".cpp", "//", "/**\n%s\n*/"), + PYTHON3("Python3", "python3", ".py", "# ","\"\"\"\n%s\n\"\"\""), + C("C", "c", ".c", "//", "/**\n%s\n*/"), + CSHARP("C#", "csharp", ".cs", "//", "/**\n%s\n*/"), + JAVASCRIPT("JavaScript", "javascript", ".js", "//", "/**\n%s\n*/"), + RUBY("Ruby", "ruby", ".rb", "#","=begin\n%s\n=end"), + SWIFT("Swift", "swift", ".swift", "///", "/**\n%s\n*/"), + GO("Go", "golang", ".go", "//", "/**\n%s\n*/"), + SCALA("Scala", "scala", ".scala", "//", "/**\n%s\n*/"), + KOTLIN("Kotlin", "kotlin", ".kt", "//", "/**\n%s\n*/"), + RUST("Rust", "rust", ".rs", "//", "/**\n%s\n*/"), + PHP("PHP", "php", ".php", "//", "/**\n%s\n*/"), + BASH("Bash", "bash", ".sh", "#",": '\n%s\n'"), + MYSQL("MySQL", "mysql", ".sql", "#", "/**\n%s\n*/"), + ORACLE("Oracle", "oraclesql", ".sql", "#", "/**\n%s\n*/"), + MSSQLSERVER("MS SQL Server", "mssql", ".sql", "#", "/**\n%s\n*/"), + TypeScript("TypeScript", "typescript", ".ts", "//", "/**\n%s\n*/"), ; @@ -33,12 +33,14 @@ public enum CodeTypeEnum { private String langSlug; private String suffix; private String comment; + private String multiLineComment; - CodeTypeEnum(String type, String langSlug, String suffix, String comment) { + CodeTypeEnum(String type, String langSlug, String suffix, String comment, String multiLineComment) { this.type = type; this.langSlug = langSlug; this.suffix = suffix; this.comment = comment; + this.multiLineComment = multiLineComment; } private static Map MAP = new HashMap(); @@ -70,4 +72,8 @@ public static CodeTypeEnum getCodeTypeEnumByLangSlug(String langSlug) { public String getComment() { return comment; } + + public String getMultiLineComment() { + return multiLineComment; + } } diff --git a/src/main/java/com/shuzijun/leetcode/plugin/model/Config.java b/src/main/java/com/shuzijun/leetcode/plugin/model/Config.java index 35c24c7e..bb69e198 100644 --- a/src/main/java/com/shuzijun/leetcode/plugin/model/Config.java +++ b/src/main/java/com/shuzijun/leetcode/plugin/model/Config.java @@ -95,6 +95,16 @@ public class Config { */ private Boolean questionEditor = true; + /** + * Content Multiline Comment + */ + private Boolean multilineComment = false; + + /** + * html Content + */ + private Boolean htmlContent = false; + private List favoriteList; public String getId() { @@ -321,6 +331,22 @@ public void setQuestionEditor(Boolean questionEditor) { this.questionEditor = questionEditor; } + public Boolean getMultilineComment() { + return multilineComment; + } + + public void setMultilineComment(Boolean multilineComment) { + this.multilineComment = multilineComment; + } + + public Boolean getHtmlContent() { + return htmlContent; + } + + public void setHtmlContent(Boolean htmlContent) { + this.htmlContent = htmlContent; + } + public boolean isModified(Config config){ if(config ==null){ return false; @@ -343,6 +369,10 @@ public boolean isModified(Config config){ return false; if (questionEditor != null ? !questionEditor.equals(config.questionEditor) : config.questionEditor != null) return false; + if (multilineComment != null ? !multilineComment.equals(config.multilineComment) : config.multilineComment != null) + return false; + if (htmlContent != null ? !htmlContent.equals(config.htmlContent) : config.htmlContent != null) + return false; return levelColour != null ? levelColour.equals(config.levelColour) : config.levelColour == null; } diff --git a/src/main/java/com/shuzijun/leetcode/plugin/setting/SettingUI.form b/src/main/java/com/shuzijun/leetcode/plugin/setting/SettingUI.form index d3b4a901..4d342bcb 100644 --- a/src/main/java/com/shuzijun/leetcode/plugin/setting/SettingUI.form +++ b/src/main/java/com/shuzijun/leetcode/plugin/setting/SettingUI.form @@ -136,6 +136,27 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/com/shuzijun/leetcode/plugin/setting/SettingUI.java b/src/main/java/com/shuzijun/leetcode/plugin/setting/SettingUI.java index 8be20688..45cb6fd3 100644 --- a/src/main/java/com/shuzijun/leetcode/plugin/setting/SettingUI.java +++ b/src/main/java/com/shuzijun/leetcode/plugin/setting/SettingUI.java @@ -57,6 +57,8 @@ public class SettingUI { private JPanel codeTemplate; private JPanel templateConstant; private JCheckBox jcefCheckBox; + private JCheckBox multilineCheckBox; + private JCheckBox htmlContentCheckBox; private Editor fileNameEditor = null; @@ -186,6 +188,8 @@ private void loadSetting() { jcefCheckBox.setSelected(config.getJcef()); questionEditorCheckBox.setSelected(config.getQuestionEditor()); + multilineCheckBox.setSelected(config.getMultilineComment()); + htmlContentCheckBox.setSelected(config.getHtmlContent()); } else { Color[] colors = new Config().getFormatLevelColour(); easyLabel.setForeground(colors[0]); @@ -254,6 +258,8 @@ public void process(Config config) { config.setEnglishContent(englishContentBox.isSelected()); config.setJcef(jcefCheckBox.isSelected()); config.setQuestionEditor(questionEditorCheckBox.isSelected()); + config.setMultilineComment(multilineCheckBox.isSelected()); + config.setHtmlContent(htmlContentCheckBox.isSelected()); } diff --git a/src/main/java/com/shuzijun/leetcode/plugin/utils/CommentUtils.java b/src/main/java/com/shuzijun/leetcode/plugin/utils/CommentUtils.java index faa46e25..2c82cd3f 100644 --- a/src/main/java/com/shuzijun/leetcode/plugin/utils/CommentUtils.java +++ b/src/main/java/com/shuzijun/leetcode/plugin/utils/CommentUtils.java @@ -1,7 +1,8 @@ package com.shuzijun.leetcode.plugin.utils; import com.shuzijun.leetcode.plugin.model.CodeTypeEnum; -import org.apache.commons.lang.StringUtils; +import com.shuzijun.leetcode.plugin.model.Config; +import org.apache.commons.lang3.StringUtils; import org.jsoup.Jsoup; import java.util.regex.Matcher; @@ -14,14 +15,22 @@ public class CommentUtils { private static final Pattern subPattern = Pattern.compile("(?)?([0-9abcdeghijklmnoprstuvwxyz\\+\\-\\*=\\(\\)\\.\\/]+)()??"); - public static String createComment(String html, CodeTypeEnum codeTypeEnum) { + public static String createComment(String html, CodeTypeEnum codeTypeEnum, Config config) { + html = html.replaceAll("(\\r\\n|\\r|\\n|\\n\\r)", "\\\\n").replaceAll(" "," "); + if(config.getHtmlContent()) { + if(config.getMultilineComment()){ + return String.format(codeTypeEnum.getMultiLineComment(),html.replaceAll("\\\\n", "\n")); + }else { + return codeTypeEnum.getComment() + html.replaceAll("\\\\n", "\n" + codeTypeEnum.getComment()); + } + } Matcher subMatcher = subPattern.matcher(html); while (subMatcher.find()) { String subStr = SuperscriptUtils.getSup(subMatcher.group(2)); html = html.replace(subMatcher.group(), "" + subStr + ""); } - html = html.replaceAll("(\\r\\n|\\r|\\n|\\n\\r)", "\\\\n").replaceAll(" "," "); - String body = codeTypeEnum.getComment() + Jsoup.parse(html).text().replaceAll("\\\\n", "\n" + codeTypeEnum.getComment()); + String comment = config.getMultilineComment()?"":codeTypeEnum.getComment(); + String body = comment + Jsoup.parse(html).text().replaceAll("\\\\n", "\n" + comment); String[] lines = body.split("\n"); StringBuilder sb = new StringBuilder(); for (String line : lines) { @@ -31,12 +40,19 @@ public static String createComment(String html, CodeTypeEnum codeTypeEnum) { } else { StringBuilder lineBuilder = new StringBuilder(line); for (int i = c; i > 0; i--) { - lineBuilder.insert(80 * i, "\n" + codeTypeEnum.getComment()); + int idx = 80 * i; + while (idx > (80 * i - 20)) { + if (isSplit(lineBuilder.charAt(idx - 1))) { + break; + } + idx = idx - 1; + } + lineBuilder.insert(idx, "\n" + comment); } sb.append(lineBuilder).append("\n"); } } - return sb.toString(); + return config.getMultilineComment()?String.format(codeTypeEnum.getMultiLineComment(),sb):sb.toString(); } public static String createSubmissions(String html) { @@ -49,4 +65,11 @@ public static String createSubmissions(String html) { pageData = pageData.replaceAll("status_code: parseInt\\('\\d+', \\d+\\),", ""); return pageData; } + + private static boolean isSplit(char c) { + if (c == 34 || c == 39 || (c >= 65 && c <= 90) || (c >= 97 && c <= 122)) { + return false; + } + return true; + } }