Dave Jarvis' Repositories

git clone https://repo.autonoma.ca/repo/keenwrite.git

Fix export file types

AuthorDaveJarvis <email>
Date2022-01-05 22:39:38 GMT-0800
Commit1faebe9b15ba61c9072cc2cb4e61adc6a6b31af2
Parentd3707d3
Delta43 lines added, 9 lines removed, 34-line increase
src/main/java/com/keenwrite/processors/ProcessorContext.java
}
- FileType getFileType() {
+ FileType getInputFileType() {
return lookup( getInputPath() );
}
src/main/java/com/keenwrite/processors/ProcessorFactory.java
import com.keenwrite.processors.markdown.MarkdownProcessor;
+import com.keenwrite.processors.r.InlineRProcessor;
+import com.keenwrite.processors.r.RVariableProcessor;
+import static com.keenwrite.ExportFormat.MARKDOWN_PLAIN;
+import static com.keenwrite.io.FileType.RMARKDOWN;
+import static com.keenwrite.io.FileType.SOURCE;
import static com.keenwrite.processors.IdentityProcessor.IDENTITY;
public static Processor<String> createProcessors(
final ProcessorContext context, final Processor<String> preview ) {
- return ProcessorFactory.createProcessor( context, preview );
+ return createProcessor( context, preview );
}
// to SVG. Without conversion would require client-side rendering of
// math (such as using the JavaScript-based KaTeX engine).
- final var successor = switch( context.getExportFormat() ) {
+ final var outputType = context.getExportFormat();
+
+ final var successor = switch( outputType ) {
case NONE -> preview;
case XHTML_TEX -> createXhtmlProcessor( context );
case APPLICATION_PDF -> createPdfProcessor( context );
default -> createIdentityProcessor( context );
};
- final var processor = switch( context.getFileType() ) {
- case SOURCE, RMARKDOWN -> createMarkdownProcessor( successor, context );
- default -> createPreformattedProcessor( successor );
- };
+ final var inputType = context.getInputFileType();
+ final Processor<String> processor;
+
+ if( preview == null && outputType == MARKDOWN_PLAIN ) {
+ processor = inputType == RMARKDOWN
+ ? createInlineRProcessor( successor, context )
+ : createMarkdownProcessor( successor, context );
+ }
+ else {
+ processor = inputType == SOURCE || inputType == RMARKDOWN
+ ? createMarkdownProcessor( successor, context )
+ : createPreformattedProcessor( successor );
+ }
return new ExecutorProcessor<>( processor );
return IDENTITY;
}
+
/**
* Instantiates a {@link Processor} responsible for parsing Markdown and
final Processor<String> successor,
final ProcessorContext context ) {
- final var dp = createDefinitionProcessor( successor, context );
+ final var dp = createVariableProcessor( successor, context );
return MarkdownProcessor.create( dp, context );
}
- private static Processor<String> createDefinitionProcessor(
+ private static Processor<String> createVariableProcessor(
final Processor<String> successor,
final ProcessorContext context ) {
return new VariableProcessor( successor, context );
+ }
+
+ /**
+ * Instantiates a processor capable of executing R statements (along with
+ * R variable references) and embedding the result into the document. This
+ * is useful for converting R Markdown documents into plain Markdown.
+ *
+ * @param successor {@link Processor} invoked after {@link InlineRProcessor}.
+ * @param context {@link Processor} configuration settings.
+ * @return An instance of {@link Processor} that performs variable
+ * interpolation, replacement, and execution of R statements.
+ */
+ private static Processor<String> createInlineRProcessor(
+ final Processor<String> successor, final ProcessorContext context ) {
+ final var irp = new InlineRProcessor( successor, context );
+ final var rvp = new RVariableProcessor( irp, context );
+ return createVariableProcessor( rvp, context );
}