Dave Jarvis' Repositories

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

Add configurable diagram server name

AuthorDaveJarvis <email>
Date2021-05-16 12:36:13 GMT-0700
Commit8ab5b7b21782842e9af06ead98be093cb59bc3d2
Parent03abe48
src/main/java/com/keenwrite/constants/Constants.java
/**
* Default server name for rendering diagrams.
- * <p>
- * TODO: Make this a preference so that local installs are possible.
*/
public static final String DIAGRAM_SERVER_NAME = "kroki.io";
src/main/java/com/keenwrite/preferences/PreferencesController.java
Setting.of( title( KEY_IMAGES_RESIZE ),
booleanProperty( KEY_IMAGES_RESIZE ) )
+ ),
+ Group.of(
+ get( KEY_IMAGES_SERVER ),
+ Setting.of( label( KEY_IMAGES_SERVER ) ),
+ Setting.of( title( KEY_IMAGES_SERVER ),
+ stringProperty( KEY_IMAGES_SERVER ) )
)
),
src/main/java/com/keenwrite/preferences/Workspace.java
entry( KEY_IMAGES_ORDER, asStringProperty( PERSIST_IMAGES_DEFAULT ) ),
entry( KEY_IMAGES_RESIZE, asBooleanProperty( true ) ),
+ entry( KEY_IMAGES_SERVER, asStringProperty( DIAGRAM_SERVER_NAME ) ),
entry( KEY_DEF_PATH, asFileProperty( DEFINITION_DEFAULT ) ),
src/main/java/com/keenwrite/preferences/WorkspaceKeys.java
public static final Key KEY_IMAGES_ORDER = key( KEY_IMAGES, "order" );
public static final Key KEY_IMAGES_RESIZE = key( KEY_IMAGES, "resize" );
+ public static final Key KEY_IMAGES_SERVER = key( KEY_IMAGES, "server" );
public static final Key KEY_DEF = key( KEY_ROOT, "definition" );
src/main/java/com/keenwrite/processors/markdown/MarkdownProcessor.java
extensions.add( ImageLinkExtension.create( context ) );
extensions.add( TeXExtension.create( processor, context ) );
- extensions.add( FencedBlockExtension.create( processor ) );
+ extensions.add( FencedBlockExtension.create( processor, context ) );
extensions.add( CaretExtension.create( context ) );
extensions.add( DocumentOutlineExtension.create( processor ) );
src/main/java/com/keenwrite/processors/markdown/extensions/fences/FencedBlockExtension.java
package com.keenwrite.processors.markdown.extensions.fences;
+import com.keenwrite.preferences.Workspace;
import com.keenwrite.processors.DefinitionProcessor;
import com.keenwrite.processors.Processor;
+import com.keenwrite.processors.ProcessorContext;
import com.keenwrite.processors.markdown.MarkdownProcessor;
import com.keenwrite.processors.markdown.extensions.HtmlRendererAdapter;
import java.util.zip.Deflater;
-import static com.keenwrite.constants.Constants.DIAGRAM_SERVER_NAME;
import static com.keenwrite.events.StatusEvent.clue;
+import static com.keenwrite.preferences.WorkspaceKeys.KEY_IMAGES_SERVER;
import static com.vladsch.flexmark.html.HtmlRenderer.Builder;
import static com.vladsch.flexmark.html.renderer.LinkType.LINK;
private final Processor<String> mProcessor;
+ private final ProcessorContext mContext;
- public FencedBlockExtension( final Processor<String> processor ) {
+ public FencedBlockExtension(
+ final Processor<String> processor, final ProcessorContext context ) {
assert processor != null;
+ assert context != null;
mProcessor = processor;
+ mContext = context;
}
*/
public static FencedBlockExtension create(
- final Processor<String> processor ) {
- return new FencedBlockExtension( processor );
+ final Processor<String> processor, final ProcessorContext context ) {
+ return new FencedBlockExtension( processor, context );
}
final var text = mProcessor.apply( content );
final var encoded = encode( text );
- final var source = format(
- "https://%s/%s/svg/%s", DIAGRAM_SERVER_NAME, type, encoded );
+ final var source = getSourceUrl( type, encoded );
final var link = context.resolveLink( LINK, source, false );
private String encode( final String decoded ) {
return getUrlEncoder().encodeToString( compress( decoded.getBytes() ) );
+ }
+
+ private String getSourceUrl( final String type, final String encoded ) {
+ return
+ format( "https://%s/%s/svg/%s", getDiagramServerName(), type, encoded );
+ }
+
+ private Workspace getWorkspace() {
+ return mContext.getWorkspace();
+ }
+
+ private String getDiagramServerName() {
+ return getWorkspace().toString( KEY_IMAGES_SERVER );
}
}
src/main/resources/com/keenwrite/messages.properties
workspace.images.resize.desc=Scale images to fit the preview panel when resizing, automatically.
workspace.images.resize.title=Resize
+workspace.images.server=Diagram Server
+workspace.images.server.desc=Server used to generate diagrams (e.g., kroki.io).
+workspace.images.server.title=Name
workspace.definition=Variable
Delta36 lines added, 9 lines removed, 27-line increase