public void writeInside(FileStream outfd)
{
var t = Time.gm(ts);
- outfd.printf(" <time>%s</time>\n", t.format("%Y-%m-%dT%H:%M:%SZ"));
+ outfd.printf(" <time>%s</time>\n", t.format("%Y-%m-%dT%H:%M:%S%z"));
}
}
outfd.flush();
}
+ public void dump()
+ {
+ write(stderr);
+ }
+
protected void writeTrack(FileStream outfd)
{
outfd.puts(" <trk>\n");
protected void writeEntries(FileStream outfd)
{
- outfd.puts(" <wpt>\n");
for (weak List<LogEntry> i = entries; i != null; i = i.next)
i.data.write(outfd);
- outfd.puts(" </wpt>\n");
}
protected void write(FileStream outfd)
public Log result = null;
LogParserState state = LogParserState.NONE;
string cur_text = "";
+ LogEntry cur_logentry = null;
+ TrackEntry cur_trackentry = null;
construct
{
void destroy()
{
cur_text = "";
+ cur_logentry = null;
+ cur_trackentry = null;
}
public bool parse(string content, ssize_t len = -1) throws MarkupError
{
- return context.parse(content, len);
+ string oldtz = Environment.get_variable("TZ");
+ Environment.set_variable("TZ", "UTC", true);
+ bool res = context.parse(content, len);
+ if (oldtz == null)
+ Environment.unset_variable("TZ");
+ else
+ Environment.set_variable("TZ", oldtz, true);
+ return res;
}
-
- /*
- outfd.puts(" <metadata>\n");
- outfd.printf(" <name>%s</name>\n", Markup.escape_text(title));
- outfd.puts(" </metadata>\n");
- if (track != null) writeTrack(outfd);
- if (entries != null) writeEntries(outfd);
- outfd.puts(" </gpx>\n");
- */
-
+ void parse_attrs(Waypoint w, string[] attr_names, string[] attr_values)
+ {
+ w.lat = 1000;
+ w.lon = 1000;
+ for (int i = 0; attr_names[i] != null; ++i)
+ {
+ if (attr_names[i] == "lat")
+ w.lat = attr_values[i].to_double();
+ else if (attr_names[i] == "lon")
+ w.lon = attr_values[i].to_double();
+ }
+ }
void start (MarkupParseContext context, string name,
string[] attr_names, string[] attr_values) throws MarkupError
} else if (name == "metadata") {
state = LogParserState.METADATA;
} else if (name == "wpt") {
+ cur_logentry = new LogEntry();
+ parse_attrs(cur_logentry, attr_names, attr_values);
+ result.entries.append(cur_logentry);
state = LogParserState.WPT;
- } else if (name == "trkseg") {
+ } else if (name == "trkpt") {
+ cur_trackentry = new TrackEntry();
+ parse_attrs(cur_trackentry, attr_names, attr_values);
+ result.track.append(cur_trackentry);
state = LogParserState.TRACK;
}
cur_text = "";
void end (MarkupParseContext context, string name) throws MarkupError
{
- if (name == "state")
- if (state == LogParserState.METADATA)
- result.title = cur_text;
+ if (name == "name")
+ {
+ switch (state)
+ {
+ case LogParserState.METADATA:
+ result.title = cur_text;
+ break;
+ case LogParserState.WPT:
+ cur_logentry.msg = cur_text;
+ break;
+ }
+ }
+ else if (name == "time")
+ {
+ Time t = Time();
+ t.strptime(cur_text, "%Y-%m-%dT%H:%M:%S%z");
+ if (state == LogParserState.WPT)
+ cur_logentry.ts = t.mktime();
+ else if (state == LogParserState.TRACK)
+ cur_trackentry.ts = t.mktime();
+ }
}
void text (MarkupParseContext context,