avatar

570

Fix eBay's egregious breakage of HTML standards by including raw < and > characters in their title blocks. I'm sure I'll have to back this out some day, when they fix their page generator, so I've added a configuration option ebay.titleFix which defaults to 'true', and can be overridden to 'false' when eBay gets their code together.

[#183 state:resolved]
[#221 state:resolved]

by mrs, 24 Jul, 2008 09:08 AM
508 570  
77 
88 import com.jbidwatcher.util.config.JConfig;
99 import com.jbidwatcher.util.config.ErrorManagement;
10 import com.jbidwatcher.util.xml.XMLElement;
1011 
1112 import java.util.Vector;
1213 import java.util.List;
14 import java.util.regex.Matcher;
15 import java.util.regex.Pattern;
1316 
1417 /**
1518  * Created by IntelliJ IDEA.
------
4043 
4144   protected void parse(StringBuffer trueBuffer) {
4245     boolean inQuote=false, inTag=false, inComment=false;
43     boolean suspicious = false;
44     int firstClose=0;
45     int charStep, start=0;
4646     char ch, prev = '\0', next = '\0';
47     boolean spitNextTag = false;
4847 
49     trueBuffer = new StringBuffer(trueBuffer.toString().replaceAll("(<nobr>|</nobr>)", ""));
48     StringBuffer sb;
49     Matcher m;
50     if(JConfig.queryConfiguration("ebay.titleFix", "true").equals("true")) {
51       sb = new StringBuffer(trueBuffer.length());
52       m = Pattern.compile("<title>(.*)</title>").matcher(trueBuffer);
53       String quotedTitle = null;
54       while(m.find()) {
55         if(quotedTitle == null) quotedTitle = "<title>" + XMLElement.encodeString(m.group(1)) + "</title>";
56         m.appendReplacement(sb, quotedTitle);
57       }
58       m.appendTail(sb);
59       trueBuffer = sb;
60     }
61 
62     sb = new StringBuffer(trueBuffer.length());
63     m = Pattern.compile("(<nobr>|</nobr>)").matcher(trueBuffer);
64     while(m.find()) {
65       m.appendReplacement(sb, "");
66     }
67     m.appendTail(sb);
68     trueBuffer = sb;
69 
5070     int bufLen = trueBuffer.length();
51 
52     for(charStep=0; charStep<bufLen; charStep++) {
71     boolean spitNextTag = false;
72     int start = 0;
73     int firstClose = 0;
74     boolean suspicious = false;
75     for(int charStep = 0; charStep<bufLen; charStep++) {
5376       ch = trueBuffer.charAt(charStep);
5477 
5578       if(charStep>1) prev = trueBuffer.charAt(charStep-1);