📄 vcalparser_v20.java
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3)
// Source File Name: VCalParser_V20.java
package android.syncml.pim.vcalendar;
import android.syncml.pim.VBuilder;
import java.io.*;
import java.util.Arrays;
import java.util.HashSet;
// Referenced classes of package android.syncml.pim.vcalendar:
// VCalParser
public class VCalParser_V20 extends VCalParser
{
public VCalParser_V20()
{
hasTZ = false;
}
public boolean parse(InputStream is, String encoding, VBuilder builder)
throws IOException
{
byte bytes[] = new byte[is.available()];
is.read(bytes);
String scStr = new String(bytes);
StringBuilder v10str = new StringBuilder("");
lines = splitProperty(scStr);
index = 0;
if("BEGIN:VCALENDAR".equals(lines[index]))
v10str.append("BEGIN:VCALENDAR\r\n");
else
return false;
index++;
if(!parseV20Calbody(lines, v10str) || index > lines.length - 1)
return false;
if(lines.length - 1 == index && "END:VCALENDAR".equals(lines[index]))
v10str.append("END:VCALENDAR\r\n");
else
return false;
return super.parse(new ByteArrayInputStream(v10str.toString().getBytes()), encoding, builder);
}
private boolean parseV20Calbody(String lines[], StringBuilder buffer)
{
for(; !"VERSION:2.0".equals(lines[index]); index++);
buffer.append("VERSION:1.0\r\n");
index++;
_L1:
String key;
String value;
if(index >= lines.length - 1)
break MISSING_BLOCK_LABEL_148;
String keyAndValue[] = lines[index].split(":", 2);
key = keyAndValue[0];
value = keyAndValue[1];
if(!"BEGIN".equals(key.trim()))
break MISSING_BLOCK_LABEL_129;
if(!key.equals(key.trim()))
return false;
index++;
if(!parseV20Component(value, buffer))
return false;
try
{
index++;
}
catch(ArrayIndexOutOfBoundsException e)
{
return false;
}
goto _L1
return true;
}
private boolean parseV20Component(String compName, StringBuilder buffer)
throws ArrayIndexOutOfBoundsException
{
String endTag = (new StringBuilder()).append("END:").append(compName).toString();
if(acceptableComponents.contains(compName))
{
if("VEVENT".equals(compName) || "VTODO".equals(compName))
{
buffer.append((new StringBuilder()).append("BEGIN:").append(compName).append("\r\n").toString());
for(; !endTag.equals(lines[index]); index++)
{
String propAndValue[] = lines[index].split(":", 2);
String propName = propAndValue[0].split(";", 2)[0];
String value = propAndValue[1];
if("".equals(lines[index]))
{
buffer.append("\r\n");
continue;
}
if(acceptableV20Props.contains(propName))
{
buffer.append((new StringBuilder()).append(propName).append(":").append(value).append("\r\n").toString());
continue;
}
if(!"BEGIN".equals(propName.trim()))
continue;
if(propName.equals(propName.trim()) && "VALARM".equals(value))
{
buffer.append("AALARM:default\r\n");
for(; !"END:VALARM".equals(lines[index]); index++);
} else
{
return false;
}
}
buffer.append((new StringBuilder()).append(endTag).append("\r\n").toString());
} else
{
if("VALARM".equals(compName))
return false;
if("VTIMEZONE".equals(compName))
do
{
if(!hasTZ)
{
String propAndValue[] = lines[index].split(":", 2);
String propName = propAndValue[0].split(";", 2)[0];
if("TZOFFSETFROM".equals(propName))
{
String value = propAndValue[1];
buffer.append((new StringBuilder()).append("TZ:").append(value).append("\r\n").toString());
hasTZ = true;
}
}
index++;
} while(!endTag.equals(lines[index]));
else
return false;
}
} else
{
for(; !endTag.equals(lines[index]); index++);
}
return true;
}
private String[] splitProperty(String scStr)
{
scStr = scStr.replaceAll("\r\n", "\n").replaceAll("\n ", "").replaceAll("\n\t", "");
String strs[] = scStr.split("\n");
return strs;
}
private static final String V10LINEBREAKER = "\r\n";
private static final HashSet acceptableComponents = new HashSet(Arrays.asList(new String[] {
"VEVENT", "VTODO", "VALARM", "VTIMEZONE"
}));
private static final HashSet acceptableV20Props = new HashSet(Arrays.asList(new String[] {
"DESCRIPTION", "DTEND", "DTSTART", "DUE", "COMPLETED", "RRULE", "STATUS", "SUMMARY", "LOCATION"
}));
private boolean hasTZ;
private String lines[];
private int index;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -