| Author | DaveJarvis <email> |
|---|---|
| Date | 2021-12-30 22:43:40 GMT-0800 |
| Commit | 4c15564c55f1b073806ec1802302c8fd75bf5d87 |
| Parent | 28aae82 |
| Delta | 31 lines added, 20 lines removed, 11-line increase |
| /** | ||
| + * 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() ) | ||
| + ) ); | ||
| } | ||
| } | ||
| */ | ||
| protected Map<String, String> getDefinitions() { | ||
| - return mContext.getInterpolatedMap(); | ||
| + return mContext.getInterpolatedDefinitions(); | ||
| } | ||
| } |
| 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() ); | ||
| } | ||