void FileTransfer::parseFileList( const TagList& files ) { TagList::const_iterator it = files.begin(); for( ; it != files.end(); ++it ) { File f; Tag *t = (*it)->findChild( "name" ); f.name = t ? t->cdata() : EmptyString; t = (*it)->findChild( "desc" ); f.desc = t ? t->cdata() : EmptyString; t = (*it)->findChild( "date" ); f.date = t ? t->cdata() : EmptyString; t = (*it)->findChild( "size" ); f.size = t ? atoi( t->cdata().c_str() ) : -1; t = (*it)->findChild( "range" ); if( t ) { f.range = true; f.offset = t->hasAttribute( "offset" ) ? atoi( t->findAttribute( "offset" ).c_str() ) : -1; } t = (*it)->findChild( "hash", XMLNS, XMLNS_HASHES ); if( t ) { f.hash_algo = t->findAttribute( "algo" ); f.hash = t->cdata(); } m_files.push_back( f ); } }
void TagEditOrCloneAction::run() { shared_ptr<ZLDialog> dialog = ZLDialogManager::Instance().createDialog(ZLResourceKey(resourceKeyName())); TagList tags; BooksUtil::collectTagsFromLibrary(tags); std::vector<std::string> names; for (TagList::const_iterator it = tags.begin(); it != tags.end(); ++it) { if (!it->isNull()) { names.push_back((*it)->fullName()); } } TagNameEntry *tagNameEntry = new TagNameEntry(names, myTag->fullName()); dialog->addOption(ZLResourceKey("name"), tagNameEntry); TagIncludeSubtagsEntry *includeSubtagsEntry = new TagIncludeSubtagsEntry(); const Library &library = Library::Instance(); if (library.hasSubtags(myTag)) { if (!library.hasBooks(myTag)) { includeSubtagsEntry->setActive(false); } dialog->addOption(ZLResourceKey("includeSubtags"), includeSubtagsEntry); } dialog->addButton(ZLDialogManager::OK_BUTTON, true); dialog->addButton(ZLDialogManager::CANCEL_BUTTON, false); if (dialog->run()) { dialog->acceptValues(); onAccept(tagNameEntry->initialValue(), includeSubtagsEntry->initialState()); } }
void CDataIO::WriteTagList(const TagList& tagList) { uint32 uCount = (uint32)tagList.size(); ASSERT( uCount <= 0xFF ); WriteByte((uint8)uCount); for (TagList::const_iterator itTagList = tagList.begin(); itTagList != tagList.end(); ++itTagList) WriteTag(*itTagList); }
void MovieClip::setupFrame(const TagList& tags, bool skipAction) { TagList::const_iterator it = tags.begin(); while( it != tags.end() ) { ITag* tag = *it; tag->setup(*this, skipAction); ++it; } }
void CDataIO::writeTagList(const TagList& tagList) { uint32 count = (uint32)tagList.size(); ASSERT( count <= 0xFF ); writeByte(count); TagList::const_iterator it; for (it = tagList.begin(); it != tagList.end(); it++) writeTag(*it); }
void BooksUtil::collectTagsFromLibrary(TagList &tags) { const TagList &lTags = Library::Instance().tags(); TagSet tagSet; for (TagList::const_iterator it = lTags.begin(); it != lTags.end(); ++it) { shared_ptr<Tag> tag = *it; if (tag.isNull()) { tagSet.insert(tag); tags.push_back(tag); } else { TagList tagStack; do { tagStack.push_back(tag); tag = tag->parent(); } while (!tag.isNull() && tagSet.find(tag) == tagSet.end()); tagSet.insert(tagStack.begin(), tagStack.end()); tags.insert(tags.end(), tagStack.rbegin(), tagStack.rend()); } } }
int main( int /*argc*/, char** /*argv*/ ) { int fail = 0; std::string name; DataFormField *f; // ------- name = "empty field"; f = new DataFormField(); if( f->type() != DataFormField::TypeTextSingle ) { ++fail; fprintf( stderr, "test '%s' failed\n", name.c_str() ); } delete f; f = 0; // ------- name = "TypeBoolean field"; f = new DataFormField( DataFormField::TypeBoolean ); if( f->type() != DataFormField::TypeBoolean ) { ++fail; fprintf( stderr, "test '%s' failed\n", name.c_str() ); } delete f; f = 0; // ------- name = "2nd ctor"; f = new DataFormField( "fieldName", "fieldValue", "fieldLabel", DataFormField::TypeBoolean ); if( f->type() != DataFormField::TypeBoolean || f->name() != "fieldName" || f->value() != "fieldValue" || f->label() != "fieldLabel" ) { ++fail; fprintf( stderr, "test '%s' failed\n", name.c_str() ); } delete f; f = 0; // ------- name = "parse 0"; f = new DataFormField( 0 ); if( f->type() != DataFormField::TypeInvalid ) { ++fail; fprintf( stderr, "test '%s' failed\n", name.c_str() ); } delete f; f = 0; Tag*t; // ------- name = "set name"; f = new DataFormField(); f->setName( name ); if( f->name() != name ) { ++fail; fprintf( stderr, "test '%s' failed\n", name.c_str() ); } delete f; f = 0; // ------- name = "set required"; f = new DataFormField(); bool req = true; f->setRequired( req ); if( f->required() != req ) { ++fail; fprintf( stderr, "test '%s' failed\n", name.c_str() ); } delete f; f = 0; // ------- name = "set label"; f = new DataFormField(); f->setLabel( name ); if( f->label() != name ) { ++fail; fprintf( stderr, "test '%s' failed\n", name.c_str() ); } delete f; f = 0; // ------- name = "set value"; f = new DataFormField(); f->setValue( name ); if( f->value() != name ) { ++fail; fprintf( stderr, "test '%s' failed\n", name.c_str() ); } delete f; f = 0; // ------- name = "set values"; f = new DataFormField(); StringList val; val.push_back( "val 1" ); val.push_back( "val 2" ); val.push_back( "val 3" ); f->setValues( val ); if( f->values() != val ) { ++fail; fprintf( stderr, "test '%s' failed\n", name.c_str() ); } delete f; f = 0; // ------- name = "set values"; f = new DataFormField(); StringMultiMap opt; opt.insert( std::make_pair( "lock", "1" ) ); opt.insert( std::make_pair( "stock", "1" ) ); opt.insert( std::make_pair( "smoking barrel", "2" ) ); f->setOptions( opt ); if( f->options() != opt ) { ++fail; fprintf( stderr, "test '%s' failed\n", name.c_str() ); } delete f; f = 0; // ------- name = "parse Tag 1"; t = new Tag( "field"); t->addAttribute( "type", "fixed" ); new Tag( t, "value", "abc" ); f = new DataFormField( t ); Tag *ft = f->tag(); if( *ft != *t ) { ++fail; fprintf( stderr, "test '%s' failed\n", name.c_str() ); printf( "f->tag(): %s\n", f->tag()->xml().c_str() ); printf( " t: %s\n", t->xml().c_str() ); } delete f; delete t; delete ft; f = 0; // ------- t = new Tag( "field"); t->addAttribute( "type", "list-multi" ); t->addAttribute( "label", "blabla label" ); t->addAttribute( "var", "features" ); Tag *o = new Tag( t, "option" ); o->addAttribute( "label", "lock" ); new Tag( o, "value", "lock" ); o = new Tag( t, "option" ); o->addAttribute( "label", "stock" ); new Tag( o, "value", "stock" ); o = new Tag( t, "option" ); o->addAttribute( "label", "smoking barrel" ); new Tag( o, "value", "smoking barrel" ); new Tag( t, "value", "lock" ); new Tag( t, "value", "stock" ); f = new DataFormField( t ); Tag *r = f->tag(); name = "parse Tag 2.1"; if( r->name() != "field" || !r->hasAttribute( "type", "list-multi" ) ) { ++fail; fprintf( stderr, "test '%s' failed\n", name.c_str() ); printf( "f->tag(): %s\n", f->tag()->xml().c_str() ); printf( " t: %s\n", t->xml().c_str() ); } name = "parse Tag 2.2"; if( !r->hasAttribute( "label", "blabla label" ) || !r->hasAttribute( "var", "features" ) ) { ++fail; fprintf( stderr, "test '%s' failed\n", name.c_str() ); printf( "f->tag(): %s\n", f->tag()->xml().c_str() ); printf( " t: %s\n", t->xml().c_str() ); } name = "parse Tag 2.3"; if( !r->hasChild( "option" ) || !r->findChild( "option" )->hasAttribute( "label", "lock" ) ) { ++fail; fprintf( stderr, "test '%s' failed\n", name.c_str() ); printf( "f->tag(): %s\n", f->tag()->xml().c_str() ); printf( " t: %s\n", t->xml().c_str() ); } name = "parse Tag 2.4"; if( !r->hasChild( "option", "label", "stock" ) ) { ++fail; fprintf( stderr, "test '%s' failed\n", name.c_str() ); printf( "f->tag(): %s\n", f->tag()->xml().c_str() ); printf( " t: %s\n", t->xml().c_str() ); } name = "parse Tag 2.5"; if( !r->hasChild( "option", "label", "smoking barrel" ) ) { ++fail; fprintf( stderr, "test '%s' failed\n", name.c_str() ); printf( "f->tag(): %s\n", f->tag()->xml().c_str() ); printf( " t: %s\n", t->xml().c_str() ); } name = "parse Tag 2.6"; if( !r->findChild( "option" )->findChild( "value" ) ) { ++fail; fprintf( stderr, "test '%s' failed\n", name.c_str() ); printf( "f->tag(): %s\n", f->tag()->xml().c_str() ); printf( " t: %s\n", t->xml().c_str() ); } name = "parse Tag 2.7"; if( r->findChild( "option" )->findChild( "value" )->cdata() != "lock" ) { ++fail; fprintf( stderr, "test '%s' failed\n", name.c_str() ); printf( "f->tag(): %s\n", f->tag()->xml().c_str() ); printf( " t: %s\n", t->xml().c_str() ); } name = "parse Tag 2.8"; TagList l = r->children(); TagList::const_iterator it = l.begin(); for( ; it != l.end(); ++it ) { if( (*it)->name() == "option" && ( !(*it)->hasChildWithCData( "value", "lock" ) && !(*it)->hasChildWithCData( "value", "stock" ) && !(*it)->hasChildWithCData( "value", "smoking barrel" ) ) ) { ++fail; fprintf( stderr, "test '%s' failed\n", name.c_str() ); printf( "f->tag(): %s\n", f->tag()->xml().c_str() ); printf( " t: %s\n", t->xml().c_str() ); } } name = "parse Tag 2.9"; if( !r->hasChildWithCData( "value", "lock" ) || !r->hasChildWithCData( "value", "stock" ) ) { ++fail; fprintf( stderr, "test '%s' failed\n", name.c_str() ); printf( "f->tag(): %s\n", f->tag()->xml().c_str() ); printf( " t: %s\n", t->xml().c_str() ); } delete f; delete t; delete r; f = 0; // ------- name = "boolean duplicate <value/>"; f = new DataFormField( DataFormField::TypeBoolean ); f->setName( "name" ); f->setValue( "1" ); f->setLabel( "label" ); t = f->tag(); if( t->children().size() != 1 || t->xml() != "<field type='boolean' var='name' " "label='label'><value>1</value></field>" ) { ++fail; fprintf( stderr, "test '%s' failed: %s\n", name.c_str(), t->xml().c_str() ); } delete f; delete t; f = 0; t = 0; if( fail == 0 ) { printf( "DataFormField: OK\n" ); return 0; } else { fprintf( stderr, "DataFormField: %d test(s) failed\n", fail ); return 1; } }
void Tag::collectAncestors(shared_ptr<Tag> tag, TagList &parents) { for (; !tag.isNull(); tag = tag->parent()) { parents.push_back(tag); } std::reverse(parents.begin(), parents.end()); }
bool MovieClip::createFrames( Reader& reader, SWF& swf, MovieFrames &data ) { RECT empty = {FLT_MAX,FLT_MAX,-FLT_MAX,-FLT_MAX}; data._rectangle = empty; sbCalculateRectangle = true; // get all tags and build frame lists TagHeader header; ITag* tag = NULL; TagList* frame_tags = new TagList; TagList actionTags; do { header.read( reader ); const uint32_t code = header.code(); SWF::TagFactoryFunc factory = SWF::getTagFactory( code ); if (! factory ) { // no registered factory so skip this tag SWF_TRACE("*** SKIP *** "); header.print(); reader.skip( header.length() ); continue; } tag = factory( header ); SWF_ASSERT(tag); int32_t end_pos = reader.getCurrentPos() + tag->length(); bool keepTag = tag->read( reader, swf, data ); tag->print(); reader.align(); int32_t dif = end_pos - reader.getCurrentPos(); if( dif != 0 ) { SWF_TRACE("WARNING: tag not read correctly. trying to skip.\n"); reader.skip( dif ); } if (keepTag) { // collect action tags if (tag->code() == TAG_DO_ACTION) { actionTags.push_back(tag); } else { frame_tags->push_back( tag ); } } else { delete tag; } // create a new frame if ( TAG_SHOW_FRAME == code ) { SWF_TRACE("[%d] has %d tags\n", data._frames.size(), frame_tags->size()); // put action tags at the end of list in order to avoid callback error TagList::iterator it = actionTags.begin(); while (it != actionTags.end()) { frame_tags->push_back( *it ); ++it; } actionTags.clear(); data._frames.push_back( frame_tags ); frame_tags = new TagList; sbCalculateRectangle = false; } } while( header.code() != TAG_END ); delete frame_tags; return true; }