Dave Jarvis' Repositories

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

Interpolate document metadata upon export

AuthorDaveJarvis <email>
Date2021-12-30 22:43:40 GMT-0800
Commit4c15564c55f1b073806ec1802302c8fd75bf5d87
Parent28aae82
Delta31 lines added, 20 lines removed, 11-line increase
src/main/java/com/keenwrite/util/InterpolatingMap.java
/**
+ * Interpolates a single text string based on values in this map.
+ *
+ * @param text The text string to interpolate.
+ * @return The text string with all variable definitions resolved.
+ */
+ public String interpolate( final String text ) {
+ assert text != null;
+
+ final var failures = new AtomicInteger();
+
+ return interpolate( text, createPattern(), failures );
+ }
+
+ /**
* Interpolates all values in the map that reference other values by way
* of key names. Performs a non-greedy match of key names delimited by
* definition tokens. This operation modifies the map directly.
*
* @return The number of failed substitutions.
*/
public int interpolate() {
- final var sigils = mOperator.getSigils();
- final var pattern = compile(
- format(
- "%s(.*?)%s", quote( sigils.getBegan() ), quote( sigils.getEnded() )
- )
- );
-
final var failures = new AtomicInteger();
for( final var k : keySet() ) {
- replace( k, interpolate( get( k ), pattern, failures ) );
+ replace( k, interpolate( get( k ), createPattern(), failures ) );
}
assert value != null;
assert pattern != null;
+ assert failures != null;
final var matcher = pattern.matcher( value );
return value;
+ }
+
+ private Pattern createPattern() {
+ final var sigils = mOperator.getSigils();
+ return compile( format(
+ "%s(.*?)%s", quote( sigils.getBegan() ), quote( sigils.getEnded() )
+ ) );
}
}
src/main/java/com/keenwrite/processors/VariableProcessor.java
*/
protected Map<String, String> getDefinitions() {
- return mContext.getInterpolatedMap();
+ return mContext.getInterpolatedDefinitions();
}
}
src/main/java/com/keenwrite/processors/XhtmlProcessor.java
import static com.keenwrite.io.HttpFacade.httpGet;
import static com.keenwrite.preferences.AppKeys.*;
-import static com.keenwrite.processors.text.TextReplacementFactory.replace;
import static com.keenwrite.util.ProtocolScheme.getProtocol;
import static com.whitemagicsoftware.keenquotes.Converter.CHARS;
*/
private Map<String, String> createMetaDataMap( final Document doc ) {
- final Map<String, String> map = new LinkedHashMap<>();
- final ListProperty<Map.Entry<String, String>> metadata = getMetaData();
+ final Map<String, String> result = new LinkedHashMap<>();
+ final var metadata = getMetaData();
+ final var map = mContext.getInterpolatedDefinitions();
- metadata.forEach( entry -> map.put(
- entry.getKey(), resolve( entry.getValue() ) )
+ metadata.forEach( entry -> result.put(
+ entry.getKey(), map.interpolate( entry.getValue() ) )
);
- map.put( "count", wordCount( doc ) );
+ result.put( "count", wordCount( doc ) );
- return map;
+ return result;
}
private boolean curl() {
return getWorkspace().getBoolean( KEY_TYPESET_TYPOGRAPHY_QUOTES );
- }
-
- private String resolve( final String value ) {
- return replace( value, mContext.getInterpolatedMap() );
}