From 00fa65a963e18370569ddc73423511b85e01e0aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jeschke?= Date: Wed, 18 Mar 2015 12:07:29 +0100 Subject: [PATCH] Added panicMode to address issue #22. --- .../rjeschke/txtmark/Configuration.java | 40 ++++++++++++++++--- .../github/rjeschke/txtmark/Processor.java | 12 +++++- 2 files changed, 44 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/github/rjeschke/txtmark/Configuration.java b/src/main/java/com/github/rjeschke/txtmark/Configuration.java index 53e3084..af4593d 100644 --- a/src/main/java/com/github/rjeschke/txtmark/Configuration.java +++ b/src/main/java/com/github/rjeschke/txtmark/Configuration.java @@ -24,6 +24,7 @@ package com.github.rjeschke.txtmark; public class Configuration { final boolean safeMode; + final boolean panicMode; final String encoding; final Decorator decorator; final BlockEmitter codeBlockEmitter; @@ -62,15 +63,11 @@ public class Configuration /** * Constructor. - * - * @param safeMode - * @param encoding - * @param decorator */ Configuration(final boolean safeMode, final String encoding, final Decorator decorator, final BlockEmitter codeBlockEmitter, final boolean forceExtendedProfile, final SpanEmitter specialLinkEmitter, - final boolean allowSpacesInFencedDelimiters) + final boolean allowSpacesInFencedDelimiters, final boolean panicMode) { this.safeMode = safeMode; this.encoding = encoding; @@ -79,6 +76,7 @@ public class Configuration this.forceExtendedProfile = forceExtendedProfile; this.specialLinkEmitter = specialLinkEmitter; this.allowSpacesInFencedDelimiters = allowSpacesInFencedDelimiters; + this.panicMode = panicMode; } /** @@ -100,6 +98,7 @@ public class Configuration public static class Builder { private boolean safeMode = false; + private boolean panicMode = false; private boolean forceExtendedProfile = false; private boolean allowSpacesInFencedDelimiters = true; private String encoding = "UTF-8"; @@ -236,6 +235,34 @@ public class Configuration return this; } + /** + * This allows you to enable 'panicMode'. When 'panicMode' is enabled, + * every {@code <} encountered will then be translated into {@code <} + * + * @param panic + * whether to enable or not + * @return This builder. + * @sine 0.12 + */ + public Builder setEnablePanicMode(final boolean panic) + { + this.panicMode = panic; + return this; + } + + /** + * This allows you to enable 'panicMode'. When 'panicMode' is enabled, + * every {@code <} encountered will then be translated into {@code <} + * + * @return This builder. + * @sine 0.12 + */ + public Builder enablePanicMode() + { + this.panicMode = true; + return this; + } + /** * Builds a configuration instance. * @@ -245,7 +272,8 @@ public class Configuration public Configuration build() { return new Configuration(this.safeMode, this.encoding, this.decorator, this.codeBlockEmitter, - this.forceExtendedProfile, this.specialLinkEmitter, this.allowSpacesInFencedDelimiters); + this.forceExtendedProfile, this.specialLinkEmitter, this.allowSpacesInFencedDelimiters, + this.panicMode); } } } diff --git a/src/main/java/com/github/rjeschke/txtmark/Processor.java b/src/main/java/com/github/rjeschke/txtmark/Processor.java index 32df5f6..ba5b2b1 100644 --- a/src/main/java/com/github/rjeschke/txtmark/Processor.java +++ b/src/main/java/com/github/rjeschke/txtmark/Processor.java @@ -631,8 +631,16 @@ public class Processor break; } default: - pos++; - sb.append((char)c); + if (c != '<' || !this.config.panicMode) + { + pos++; + sb.append((char)c); + } + else + { + pos += 4; + sb.append("<"); + } c = this.reader.read(); break; }