Skip to content

Commit 36452de

Browse files
authored
Merge pull request #77 from Simon-Initiative/AUTHORING-2299-amp-escape
Authoring 2299 amp escape
2 parents 8874fa9 + 4077c47 commit 36452de

4 files changed

Lines changed: 19 additions & 15 deletions

File tree

src/main/java/edu/cmu/oli/assessment/InlineAssessmentDelivery.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -652,7 +652,7 @@ private String transformBodyContent(Resource resource, String content, String se
652652

653653
SAXBuilder builder = new SAXBuilder(XMLReaders.NONVALIDATING);
654654
builder.setExpandEntities(true);
655-
content = content.replaceAll("&(?!.{2,4};)", "&");
655+
content = AppUtils.escapeAmpersand(content);
656656
Document srcDoc = builder.build(new StringReader("<body unique_ref=\"m0\">" + content + "</body>"));
657657
root.addContent(srcDoc.getRootElement().detach());
658658
} catch (Exception ex) {

src/main/java/edu/cmu/oli/content/AppUtils.java

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636
import java.security.SecureRandom;
3737
import java.util.*;
3838
import java.util.concurrent.ConcurrentHashMap;
39+
import java.util.regex.Matcher;
40+
import java.util.regex.Pattern;
3941
import java.util.stream.Collectors;
4042

4143
/**
@@ -64,17 +66,20 @@ public static <T> T toClassObject(javax.json.JsonValue jsonValue, Class<T> class
6466
}
6567

6668
public static String escapeAmpersand(String data) {
67-
String[] split = data.split("\n");
68-
StringBuilder sb = new StringBuilder();
69-
for (int x = 0; x < split.length; x++) {
70-
String str = split[x];
71-
str = str.replaceAll("&(?!.{2,4};)", "&amp;");
72-
sb.append(str);
73-
if ((x + 1) < split.length) {
74-
sb.append("\n");
75-
}
69+
String val = data.replaceAll("\\n", "``!");
70+
String pattern = "(?s)(&lt;|<)!\\[CDATA\\[(.*?)\\]\\](&gt;|>)";
71+
Matcher m = Pattern.compile(pattern).matcher(val);
72+
List<String> cdataList = new ArrayList<>();
73+
while (m.find()){
74+
cdataList.add(m.group());
7675
}
77-
return sb.toString();
76+
val = val.replaceAll(pattern, "~~!");
77+
val = val.replaceAll("&(?!.{2,4};)", "&amp;");
78+
for(String cd : cdataList){
79+
val = val.replaceFirst("~~!", cd);
80+
}
81+
val = val.replaceAll("``!", "\n");
82+
return val;
7883
}
7984

8085
public static JsonElement createJsonElement(String value) {

src/main/java/edu/cmu/oli/content/contentfiles/writers/ResourceToXml.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.google.gson.JsonObject;
66
import com.google.gson.JsonParser;
77
import edu.cmu.oli.assessment.builders.Assessment2Transform;
8+
import edu.cmu.oli.content.AppUtils;
89
import edu.cmu.oli.content.configuration.Configurations;
910
import edu.cmu.oli.content.resource.builders.Json2Xml;
1011
import org.apache.commons.text.StringEscapeUtils;
@@ -114,12 +115,12 @@ public String resourceToXml(String type, String s) {
114115
cleanupGeneral(document);
115116

116117
String data = xmlOut.outputString(document);
117-
118+
data = AppUtils.escapeAmpersand(data);
118119
String[] split = data.split("\n");
119120
StringBuilder sb = new StringBuilder();
120121
for (String str : split) {
121122
str = StringEscapeUtils.unescapeXml(str);
122-
str = str.replaceAll("&(?!.{2,4};)", "&amp;").replaceAll("<m:math.*><!\\[CDATA\\[", "")
123+
str = str.replaceAll("<m:math.*><!\\[CDATA\\[", "")
123124
.replaceAll("\\]\\]>.*</m:math>", "");
124125
sb.append(str);
125126
sb.append("\n");

src/main/java/edu/cmu/oli/content/controllers/SVNSyncController.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -623,7 +623,6 @@ private void createResource(String packageId, Path resourceFile, JsonObject reso
623623
try {
624624
if (jsonCapable) {
625625
document = builder.build(new StringReader(fileString.trim()));
626-
//.replaceAll("&", "&amp;")));
627626
} else {
628627
document = builder.build(new StringReader(fileString.trim()));
629628
}
@@ -709,7 +708,6 @@ private void updateResource(String packageId, Path resourceFile, JsonObject reso
709708
try {
710709
if (jsonCapable) {
711710
document = builder.build(new StringReader(fileString.trim()));
712-
//.replaceAll("&", "&amp;")));
713711
} else {
714712
document = builder.build(new StringReader(fileString.trim()));
715713
}

0 commit comments

Comments
 (0)