1 /* 2 * RWebContentFileType.java 3 * 4 * Copyright (C) 2021 by RStudio, PBC 5 * 6 * Unless you have received this program directly from RStudio pursuant 7 * to the terms of a commercial license agreement with RStudio, then 8 * this program is licensed to you under the terms of version 3 of the 9 * GNU Affero General Public License. This program is distributed WITHOUT 10 * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT, 11 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the 12 * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details. 13 * 14 */ 15 package org.rstudio.studio.client.common.filetypes; 16 17 import com.google.gwt.resources.client.ImageResource; 18 import org.rstudio.core.client.command.AppCommand; 19 import org.rstudio.core.client.regex.Pattern; 20 import org.rstudio.studio.client.RStudioGinjector; 21 import org.rstudio.studio.client.common.reditor.EditorLanguage; 22 import org.rstudio.studio.client.workbench.commands.Commands; 23 24 import java.util.HashSet; 25 26 public class RWebContentFileType extends TextFileType 27 { RWebContentFileType(String id, String label, EditorLanguage editorLanguage, String defaultExtension, ImageResource icon, boolean isMarkdown)28 RWebContentFileType(String id, 29 String label, 30 EditorLanguage editorLanguage, 31 String defaultExtension, 32 ImageResource icon, 33 boolean isMarkdown) 34 { 35 this(id, label, editorLanguage, defaultExtension, icon, isMarkdown, true); 36 } 37 RWebContentFileType(String id, String label, EditorLanguage editorLanguage, String defaultExtension, ImageResource icon, boolean isMarkdown, boolean previewIsKnit)38 RWebContentFileType(String id, 39 String label, 40 EditorLanguage editorLanguage, 41 String defaultExtension, 42 ImageResource icon, 43 boolean isMarkdown, 44 boolean previewIsKnit) 45 { 46 this(id, label, editorLanguage, defaultExtension, icon, isMarkdown, previewIsKnit, false); 47 } 48 RWebContentFileType(String id, String label, EditorLanguage editorLanguage, String defaultExtension, ImageResource icon, boolean isMarkdown, boolean previewIsKnit, boolean sourceOnSave)49 RWebContentFileType(String id, 50 String label, 51 EditorLanguage editorLanguage, 52 String defaultExtension, 53 ImageResource icon, 54 boolean isMarkdown, 55 boolean previewIsKnit, 56 boolean sourceOnSave) 57 { 58 super(id, 59 label, 60 editorLanguage, 61 defaultExtension, 62 icon, 63 true, // word-wrap 64 sourceOnSave, 65 true, 66 true, 67 false, 68 !previewIsKnit, // preview-html 69 previewIsKnit, // knit-html 70 false, 71 true, 72 false, 73 true, 74 true, 75 false); 76 77 isMarkdown_ = isMarkdown; 78 } 79 80 @Override getSupportedCommands(Commands commands)81 public HashSet<AppCommand> getSupportedCommands(Commands commands) 82 { 83 HashSet<AppCommand> result = super.getSupportedCommands(commands); 84 result.add(commands.jumpTo()); 85 result.add(commands.jumpToMatching()); 86 result.add(commands.goToHelp()); 87 result.add(commands.goToDefinition()); 88 result.add(commands.insertRoxygenSkeleton()); 89 return result; 90 } 91 92 @Override getWordWrap()93 public boolean getWordWrap() 94 { 95 return RStudioGinjector.INSTANCE.getUserPrefs().softWrapRmdFiles().getValue(); 96 } 97 98 @Override getRnwStartPatternBegin()99 public Pattern getRnwStartPatternBegin() 100 { 101 if (isMarkdown_) 102 return RNW_START_PATTERN_MD; 103 else 104 return RNW_START_PATTERN_HTML; 105 } 106 107 @Override getRnwStartPatternEnd()108 public Pattern getRnwStartPatternEnd() 109 { 110 return null; 111 } 112 113 private final boolean isMarkdown_; 114 115 private static final Pattern RNW_START_PATTERN_MD = 116 Pattern.create("^`{3,}\\s*\\{r"); 117 private static final Pattern RNW_START_PATTERN_HTML = 118 Pattern.create("^\\<!--\\s*begin.rcode\\s*"); 119 120 } 121