bool TcxFileWriter::StorePosition(double lat, double lon) { if (CurrentTag().compare(TCX_TAG_NAME_TRACKPOINT) != 0) return false; if (OpenTag(TCX_TAG_NAME_POSITION)) { WriteTagAndValue(TCX_TAG_NAME_LATITUDE, lat); WriteTagAndValue(TCX_TAG_NAME_LONGITUDE, lon); CloseTag(); return true; } return false; }
// Parse s in place i.e. we assume we can modify it. Must be 0-terminated. // The caller owns the memory for s. HtmlElement *HtmlParser::ParseInPlace(char *s, UINT codepage) { if (this->html) Reset(); this->html = s; this->codepage = codepage; HtmlPullParser parser(s, strlen(s)); HtmlToken *tok; while ((tok = parser.Next())) { char *tag = (char *)tok->s; if (tok->IsError()) { errorContext = tag; switch (tok->error) { case HtmlToken::UnclosedTag: return ParseError(ErrParsingElementName); case HtmlToken::InvalidTag: return ParseError(ErrParsingClosingElement); default: return ParseError(ErrParsingElement); } } if (!tok->IsTag()) { // ignore text content assert(tok->IsText()); continue; } char *tagEnd = tag + tok->nLen; if (!tok->IsEndTag()) { // note: call tok->NextAttr() before zero-terminating names and values AttrInfo *attr = tok->NextAttr(); *tagEnd = '\0'; StartTag(tag); while (attr) { char *name = (char *)attr->name; char *nameEnd = name + attr->nameLen; char *value = (char *)attr->val; char *valueEnd = value + attr->valLen; attr = tok->NextAttr(); *nameEnd = *valueEnd = '\0'; AppendAttr(name, value); } } if (!tok->IsStartTag() || IsTagSelfClosing(tok->tag)) { *tagEnd = '\0'; CloseTag(tag); } } return rootElement; }
bool TcxFileWriter::EndActivity() { if (CurrentTag().compare(TCX_TAG_NAME_ACTIVITY) == 0) return CloseTag(); return false; }
bool TcxFileWriter::EndTrackpoint() { if (CurrentTag().compare(TCX_TAG_NAME_TRACKPOINT) == 0) return CloseTag(); return false; }
bool TcxFileWriter::EndLap() { if (CurrentTag().compare(TCX_TAG_NAME_LAP) == 0) return CloseTag(); return false; }