void PodcastParser::ParseChannel(QXmlStreamReader* reader, Podcast* ret) const { while (!reader->atEnd()) { QXmlStreamReader::TokenType type = reader->readNext(); switch (type) { case QXmlStreamReader::StartElement: { const QStringRef name = reader->name(); if (name == "title") { ret->set_title(reader->readElementText()); } else if (name == "link" && reader->namespaceUri().isEmpty()) { ret->set_link(QUrl::fromEncoded(reader->readElementText().toAscii())); } else if (name == "description") { ret->set_description(reader->readElementText()); } else if (name == "owner" && reader->namespaceUri() == kItunesNamespace) { ParseItunesOwner(reader, ret); } else if (name == "image") { ParseImage(reader, ret); } else if (name == "copyright") { ret->set_copyright(reader->readElementText()); } else if (name == "link" && reader->namespaceUri() == kAtomNamespace && ret->url().isEmpty() && reader->attributes().value("rel") == "self") { ret->set_url(QUrl::fromEncoded(reader->readElementText().toAscii())); } else if (name == "item") { ParseItem(reader, ret); } else { Utilities::ConsumeCurrentElement(reader); } break; } case QXmlStreamReader::EndElement: return; default: break; } } }
void ReadCategoryXML(xmlNode * a_node) { xmlNode *cur_node=NULL; for (cur_node = a_node; cur_node; cur_node = cur_node->next) { if (cur_node->type==XML_ELEMENT_NODE){ //<Page> if(!xmlStrcasecmp(cur_node->name,(xmlChar*)"Page")){ if(numpage < MAX_ENC_PAGES-1){ numpage++; numtext=0; numimage=0; x=2; y=2; ParsePage(cur_node->properties); } else { LOG_ERROR("Too many Enc Pages, limit of %d hit", MAX_ENC_PAGES); return; } } //<Size> if(!xmlStrcasecmp(cur_node->name,(xmlChar*)"Size")) { if (cur_node->children != NULL) size = (xmlStrcasecmp ((xmlChar*)"Big", cur_node->children->content) == 0) ? 1 : 0; } //<Color> if(!xmlStrcasecmp(cur_node->name,(xmlChar*)"Color")){ ParseColor(cur_node->properties); if (cur_node->children != NULL) GetColorFromName (cur_node->children->content); } //<Text> if(!xmlStrcasecmp(cur_node->name,(xmlChar*)"Text")){ _Text *T=(_Text*)malloc(sizeof(_Text)); _Text *t=&Page[numpage].T; T->Next=NULL; ParseText(cur_node->properties); T->x=x; T->y=y; T->size=size; T->r=r; T->g=g; T->b=b; T->text=NULL; T->ref=NULL; lastextlen = 0; if (cur_node->children != NULL) { MY_XMLSTRCPY (&T->text, (char*)cur_node->children->content); lastextlen = strlen (T->text) * ((T->size) ? 11 : 8); x += lastextlen; } while (t->Next != NULL) t = t->Next; t->Next = T; } //<nl> if(!xmlStrcasecmp(cur_node->name,(xmlChar*)"nl")){ x=2; y+=(size)?18:15; } //<nlkx> if(!xmlStrcasecmp(cur_node->name,(xmlChar*)"nlkx")){ y+=(size)?18:15; x-=lastextlen; } //<Image> if(!xmlStrcasecmp(cur_node->name,(xmlChar*)"image")){ _Image *I=(_Image*)malloc(sizeof(_Image)); _Image *i=&Page[numpage].I; xposupdate=1; yposupdate=1; ParseImage(cur_node->properties); I->mouseover=mouseover; mouseover=0; while(i->Next!=NULL)i=i->Next; I->id=id; I->Next=NULL; if(!I->mouseover){ I->x=x; I->y=y; I->xend=x+xend; I->yend=y+yend; if(xposupdate) x+=xend; if(yposupdate) y+=yend-((size)?18:15); }else{ I->x=i->x; I->y=i->y; I->xend=i->xend; I->yend=i->yend; } I->u=u; I->v=v; I->uend=uend; I->vend=vend; i->Next=I; numimage++; } //<sImage> if(!xmlStrcasecmp(cur_node->name,(xmlChar*)"simage")){ _Image *I=(_Image*)malloc(sizeof(_Image)); _Image *i=&Page[numpage].I; int picsperrow,xtile,ytile; float ftsize; xposupdate=1; yposupdate=1; ParseSimage(cur_node->properties); picsperrow=isize/tsize; xtile=tid%picsperrow; ytile=tid/picsperrow; ftsize=(float)tsize/isize; #ifdef NEW_TEXTURES u = ftsize * xtile; v = ftsize * ytile; uend = u + ftsize; vend = v + ftsize; #else /* NEW_TEXTURES */ u=ftsize*xtile; v=-ftsize*ytile; uend=u+ftsize; vend=v-ftsize; #endif /* NEW_TEXTURES */ I->mouseover=mouseover; mouseover=0; while(i->Next!=NULL)i=i->Next; I->id=id; I->Next=NULL; if(!I->mouseover){ I->x=x; I->y=y; I->xend=x+(tsize*((float)ssize/100)); I->yend=y+(tsize*((float)ssize/100)); if(xposupdate) x+=(tsize*((float)ssize/100)); if(yposupdate) y+=(tsize*((float)ssize/100))-((size)?18:15); }else{ I->x=i->x; I->y=i->y; I->xend=i->xend; I->yend=i->yend; } I->u=u; I->v=v; I->uend=uend; I->vend=vend; i->Next=I; numimage++; } //<ddsImage> if(!xmlStrcasecmp(cur_node->name,(xmlChar*)"ddsimage")){ _Image *I=(_Image*)malloc(sizeof(_Image)); _Image *i=&Page[numpage].I; int picsperrow,xtile,ytile; float ftsize; xposupdate=1; yposupdate=1; ParseSimage(cur_node->properties); if(size==99) size=99; picsperrow=isize/tsize; xtile=tid%picsperrow; ytile=tid/picsperrow; ftsize=(float)tsize/isize; u=ftsize*xtile; v=ftsize*ytile; uend=u+ftsize; vend=v+ftsize; I->mouseover=mouseover; mouseover=0; while(i->Next!=NULL)i=i->Next; I->id=id; I->Next=NULL; if(!I->mouseover){ I->x=x; I->y=y; I->xend=x+(tsize*((float)ssize/100)); I->yend=y+(tsize*((float)ssize/100)); if(xposupdate) x+=(tsize*((float)ssize/100)); if(yposupdate) y+=(tsize*((float)ssize/100))-((size)?18:15); }else{ I->x=i->x; I->y=i->y; I->xend=i->xend; I->yend=i->yend; } I->u=u; I->v=v; I->uend=uend; I->vend=vend; i->Next=I; numimage++; } //<Pos> if(!xmlStrcasecmp(cur_node->name,(xmlChar*)"pos")){ ParsePos(cur_node->properties); } //<link> if(!xmlStrcasecmp(cur_node->name,(xmlChar*)"link")){ _Text *T=(_Text*)malloc(sizeof(_Text)); _Text *t=&Page[numpage].T; ParseLink(cur_node->properties); T->Next=NULL; T->x=x; T->y=y; T->size=size; T->r=r; T->g=g; T->b=b; T->text=NULL; T->ref=NULL; MY_XMLSTRCPY(&T->text, s); MY_XMLSTRCPY(&T->ref, ss); while(t->Next!=NULL)t=t->Next; t->Next=T; x+=strlen(T->text)*((T->size)?11:8); lastextlen=strlen(T->text)*((T->size)?11:8); #ifdef ENCYCL_NAVIGATION save_raw_page_link(T->ref, T->text, numpage); #endif } // See if this is the new maximum length. if(Page[numpage].max_y < y) { Page[numpage].max_y = y; } } ReadCategoryXML(cur_node->children); } }