/* The html looks like: <li> <object type="text/sitemap"> <param name="Name" value="Main Page"> <param name="Local" value="0789729717_main.html"> <param name="ImageNumber" value="12"> </object> <ul> ... children ... </ul> <li> ... siblings ... */ static bool VisitChmTocItem(EbookTocVisitor *visitor, HtmlElement *el, UINT cp, int level) { CrashIf(el->tag != Tag_Object || level > 1 && (!el->up || el->up->tag != Tag_Li)); ScopedMem<WCHAR> name, local; for (el = el->GetChildByTag(Tag_Param); el; el = el->next) { if (Tag_Param != el->tag) continue; ScopedMem<WCHAR> attrName(el->GetAttribute("name")); ScopedMem<WCHAR> attrVal(el->GetAttribute("value")); if (attrName && attrVal && cp != CP_CHM_DEFAULT) { ScopedMem<char> bytes(str::conv::ToCodePage(attrVal, CP_CHM_DEFAULT)); attrVal.Set(str::conv::FromCodePage(bytes, cp)); } if (!attrName || !attrVal) /* ignore incomplete/unneeded <param> */; else if (str::EqI(attrName, L"Name")) name.Set(attrVal.StealData()); else if (str::EqI(attrName, L"Local")) { // remove the ITS protocol and any filename references from the URLs if (str::Find(attrVal, L"::/")) attrVal.Set(str::Dup(str::Find(attrVal, L"::/") + 3)); local.Set(attrVal.StealData()); } } if (!name) return false; visitor->Visit(name, local, level); return true; }
nsresult nsSVGElement::AddMappedSVGValue(nsIAtom* aName, nsISupports* aValue, PRInt32 aNamespaceID) { nsresult rv; nsCOMPtr<nsISVGValue> svg_value = do_QueryInterface(aValue); svg_value->AddObserver(this); nsAttrValue attrVal(svg_value); if (aNamespaceID == kNameSpaceID_None) { rv = mMappedAttributes.SetAndTakeAttr(aName, attrVal); NS_ENSURE_SUCCESS(rv, rv); } else { nsCOMPtr<nsINodeInfo> ni; ni = mNodeInfo->NodeInfoManager()->GetNodeInfo(aName, nsnull, aNamespaceID); NS_ENSURE_TRUE(ni, NS_ERROR_OUT_OF_MEMORY); rv = mMappedAttributes.SetAndTakeAttr(ni, attrVal); NS_ENSURE_SUCCESS(rv, rv); } return NS_OK; }
/* The html looks like: <li> <object type="text/sitemap"> <param name="Keyword" value="- operator"> <param name="Name" value="Subtraction Operator (-)"> <param name="Local" value="html/vsoprsubtract.htm"> <param name="Name" value="Subtraction Operator (-)"> <param name="Local" value="html/js56jsoprsubtract.htm"> </object> <ul> ... optional children ... </ul> <li> ... siblings ... */ static bool VisitChmIndexItem(EbookTocVisitor *visitor, HtmlElement *el, UINT cp, int level) { CrashIf(!el->NameIs("li")); el = el->GetChildByName("object"); if (!el) return false; StrVec references; ScopedMem<TCHAR> keyword, name; for (el = el->GetChildByName("param"); el; el = el->next) { if (!el->NameIs("param")) continue; ScopedMem<TCHAR> attrName(el->GetAttribute("name")); ScopedMem<TCHAR> attrVal(el->GetAttribute("value")); #ifdef UNICODE if (attrName && attrVal && cp != CP_CHM_DEFAULT) { ScopedMem<char> bytes(str::conv::ToCodePage(attrVal, CP_CHM_DEFAULT)); attrVal.Set(str::conv::FromCodePage(bytes, cp)); } #endif if (!attrName || !attrVal) /* ignore incomplete/unneeded <param> */; else if (str::EqI(attrName, _T("Keyword"))) keyword.Set(attrVal.StealData()); else if (str::EqI(attrName, _T("Name"))) { name.Set(attrVal.StealData()); // some CHM documents seem to use a lonely Name instead of Keyword if (!keyword) keyword.Set(str::Dup(name)); } else if (str::EqI(attrName, _T("Local")) && name) { // remove the ITS protocol and any filename references from the URLs if (str::Find(attrVal, _T("::/"))) attrVal.Set(str::Dup(str::Find(attrVal, _T("::/")) + 3)); references.Append(name.StealData()); references.Append(attrVal.StealData()); } } if (!keyword) return false; if (references.Count() == 2) { visitor->visit(keyword, references.At(1), level); return true; } visitor->visit(keyword, NULL, level); for (size_t i = 0; i < references.Count(); i += 2) { visitor->visit(references.At(i), references.At(i + 1), level + 1); } return true; }
/* The html looks like: <li> <object type="text/sitemap"> <param name="Keyword" value="- operator"> <param name="Name" value="Subtraction Operator (-)"> <param name="Local" value="html/vsoprsubtract.htm"> <param name="Name" value="Subtraction Operator (-)"> <param name="Local" value="html/js56jsoprsubtract.htm"> </object> <ul> ... optional children ... </ul> <li> ... siblings ... */ static bool VisitChmIndexItem(EbookTocVisitor *visitor, HtmlElement *el, UINT cp, int level) { CrashIf(el->tag != Tag_Object || level > 1 && (!el->up || el->up->tag != Tag_Li)); WStrVec references; ScopedMem<WCHAR> keyword, name; for (el = el->GetChildByTag(Tag_Param); el; el = el->next) { if (Tag_Param != el->tag) continue; ScopedMem<WCHAR> attrName(el->GetAttribute("name")); ScopedMem<WCHAR> attrVal(el->GetAttribute("value")); if (attrName && attrVal && cp != CP_CHM_DEFAULT) { ScopedMem<char> bytes(str::conv::ToCodePage(attrVal, CP_CHM_DEFAULT)); attrVal.Set(str::conv::FromCodePage(bytes, cp)); } if (!attrName || !attrVal) /* ignore incomplete/unneeded <param> */; else if (str::EqI(attrName, L"Keyword")) keyword.Set(attrVal.StealData()); else if (str::EqI(attrName, L"Name")) { name.Set(attrVal.StealData()); // some CHM documents seem to use a lonely Name instead of Keyword if (!keyword) keyword.SetCopy(name); } else if (str::EqI(attrName, L"Local") && name) { // remove the ITS protocol and any filename references from the URLs if (str::Find(attrVal, L"::/")) attrVal.SetCopy(str::Find(attrVal, L"::/") + 3); references.Append(name.StealData()); references.Append(attrVal.StealData()); } } if (!keyword) return false; if (references.Count() == 2) { visitor->Visit(keyword, references.At(1), level); return true; } visitor->Visit(keyword, nullptr, level); for (size_t i = 0; i < references.Count(); i += 2) { visitor->Visit(references.At(i), references.At(i + 1), level + 1); } return true; }
/* The html looks like: <li> <object type="text/sitemap"> <param name="Name" value="Main Page"> <param name="Local" value="0789729717_main.html"> <param name="ImageNumber" value="12"> </object> <ul> ... children ... </ul> <li> ... siblings ... */ static bool VisitChmTocItem(EbookTocVisitor *visitor, HtmlElement *el, UINT cp, int level) { CrashIf(!el->NameIs("li")); el = el->GetChildByName("object"); if (!el) return false; ScopedMem<TCHAR> name, local; for (el = el->GetChildByName("param"); el; el = el->next) { if (!el->NameIs("param")) continue; ScopedMem<TCHAR> attrName(el->GetAttribute("name")); ScopedMem<TCHAR> attrVal(el->GetAttribute("value")); #ifdef UNICODE if (attrName && attrVal && cp != CP_CHM_DEFAULT) { ScopedMem<char> bytes(str::conv::ToCodePage(attrVal, CP_CHM_DEFAULT)); attrVal.Set(str::conv::FromCodePage(bytes, cp)); } #endif if (!attrName || !attrVal) /* ignore incomplete/unneeded <param> */; else if (str::EqI(attrName, _T("Name"))) name.Set(attrVal.StealData()); else if (str::EqI(attrName, _T("Local"))) { // remove the ITS protocol and any filename references from the URLs if (str::Find(attrVal, _T("::/"))) attrVal.Set(str::Dup(str::Find(attrVal, _T("::/")) + 3)); local.Set(attrVal.StealData()); } } if (!name) return false; visitor->visit(name, local, level); return true; }
nsresult HTMLImageElement::AfterSetAttr(int32_t aNameSpaceID, nsIAtom* aName, const nsAttrValue* aValue, bool aNotify) { if (aNameSpaceID == kNameSpaceID_None && mForm && (aName == nsGkAtoms::name || aName == nsGkAtoms::id) && aValue && !aValue->IsEmptyString()) { // add the image to the hashtable as needed MOZ_ASSERT(aValue->Type() == nsAttrValue::eAtom, "Expected atom value for name/id"); mForm->AddImageElementToTable(this, nsDependentAtomString(aValue->GetAtomValue())); } // Handle src/srcset/crossorigin updates. If aNotify is false, we are coming // from the parser or some such place; we'll get bound after all the // attributes have been set, so we'll do the image load from BindToTree. nsAttrValueOrString attrVal(aValue); if (aName == nsGkAtoms::src && aNameSpaceID == kNameSpaceID_None && !aValue) { // SetAttr handles setting src since it needs to catch img.src = // img.src, so we only need to handle the unset case if (InResponsiveMode()) { if (mResponsiveSelector && mResponsiveSelector->Content() == this) { mResponsiveSelector->SetDefaultSource(NullString()); } QueueImageLoadTask(true); } else { // Bug 1076583 - We still behave synchronously in the non-responsive case CancelImageRequests(aNotify); } } else if (aName == nsGkAtoms::srcset && aNameSpaceID == kNameSpaceID_None && IsSrcsetEnabled()) { PictureSourceSrcsetChanged(this, attrVal.String(), aNotify); } else if (aName == nsGkAtoms::sizes && aNameSpaceID == kNameSpaceID_None && HTMLPictureElement::IsPictureEnabled()) { PictureSourceSizesChanged(this, attrVal.String(), aNotify); } else if (aName == nsGkAtoms::crossorigin && aNameSpaceID == kNameSpaceID_None && aNotify) { // Force a new load of the image with the new cross origin policy. if (InResponsiveMode()) { // per spec, full selection runs when this changes, even though // it doesn't directly affect the source selection QueueImageLoadTask(true); } else { // Bug 1076583 - We still use the older synchronous algorithm in // non-responsive mode. Force a new load of the image with the // new cross origin policy. ForceReload(aNotify); } } return nsGenericHTMLElement::AfterSetAttr(aNameSpaceID, aName, aValue, aNotify); }
bool CsvChunkLoader::loadChunk(boost::shared_ptr<Query>& query, size_t chunkIndex) { // Must do EOF check *before* nextImplicitChunkPosition() call, or // we risk stepping out of bounds. if (_csvParser.empty()) { int ch = ::getc(fp()); if (ch == EOF) { return false; } ::ungetc(ch, fp()); } // Reposition and make sure all is cool. nextImplicitChunkPosition(MY_CHUNK); enforceChunkOrder("csv loader"); // Initialize a chunk and chunk iterator for each attribute. Attributes const& attrs = schema().getAttributes(); size_t nAttrs = attrs.size(); vector< boost::shared_ptr<ChunkIterator> > chunkIterators(nAttrs); for (size_t i = 0; i < nAttrs; i++) { Address addr(i, _chunkPos); MemChunk& chunk = getLookaheadChunk(i, chunkIndex); chunk.initialize(array(), &schema(), addr, attrs[i].getDefaultCompressionMethod()); chunkIterators[i] = chunk.getIterator(query, ChunkIterator::NO_EMPTY_CHECK | ConstChunkIterator::SEQUENTIAL_WRITE); } char const *field = 0; int rc = 0; bool sawData = false; bool sawEof = false; while (!chunkIterators[0]->end()) { _column = 0; array()->countCell(); // Parse and write out a line's worth of fields. NB if you // have to 'continue;' after a writeItem() call, make sure the // iterator (and possibly the _column) gets incremented. // for (size_t i = 0; i < nAttrs; ++i) { try { // Handle empty tag... if (i == emptyTagAttrId()) { attrVal(i).setBool(true); chunkIterators[i]->writeItem(attrVal(i)); ++(*chunkIterators[i]); // ...but don't increment _column. continue; } // Parse out next input field. rc = _csvParser.getField(field); if (rc == CsvParser::END_OF_FILE) { sawEof = true; break; } if (rc == CsvParser::END_OF_RECORD) { // Got record terminator, but we have more attributes! throw USER_EXCEPTION(SCIDB_SE_IMPORT_ERROR, SCIDB_LE_OP_INPUT_TOO_FEW_FIELDS) << _csvParser.getFileOffset() << _csvParser.getRecordNumber() << _column; } if (rc > 0) { // So long as we never call _csvParser.setStrict(true), we should never see this. throw USER_EXCEPTION(SCIDB_SE_IMPORT_ERROR, SCIDB_LE_CSV_PARSE_ERROR) << _csvParser.getFileOffset() << _csvParser.getRecordNumber() << _column << csv_strerror(rc); } SCIDB_ASSERT(rc == CsvParser::OK); SCIDB_ASSERT(field); sawData = true; // Process input field. if (mightBeNull(field) && attrs[i].isNullable()) { int8_t missingReason = parseNullField(field); if (missingReason >= 0) { attrVal(i).setNull(missingReason); chunkIterators[i]->writeItem(attrVal(i)); ++(*chunkIterators[i]); _column += 1; continue; } } if (converter(i)) { Value v; v.setString(field); const Value* vp = &v; (*converter(i))(&vp, &attrVal(i), NULL); chunkIterators[i]->writeItem(attrVal(i)); } else { TypeId const &tid = typeIdOfAttr(i); if (attrs[i].isNullable() && (*field == '\0' || (iswhitespace(field) && IS_NUMERIC(tid)))) { // [csv2scidb compat] With csv2scidb, empty strings (or for numeric // fields, whitespace) became nulls if the target attribute was // nullable. We keep the same behavior. (We should *not* do this for // TSV, that format requires explicit nulls!) attrVal(i).setNull(); } else { StringToValue(tid, field, attrVal(i)); } chunkIterators[i]->writeItem(attrVal(i)); } } catch (Exception& ex) { _badField = field; _fileOffset = _csvParser.getFileOffset(); array()->handleError(ex, chunkIterators[i], i); } _column += 1; ++(*chunkIterators[i]); } if (sawEof) { break; } // We should be at EOL now, otherwise there are too many fields on this line. Post a // warning: it seems useful not to complain too loudly about this or to abort the load, but // we do want to mention it. // rc = _csvParser.getField(field); if (!_tooManyWarning && (rc != CsvParser::END_OF_RECORD)) { _tooManyWarning = true; query->postWarning(SCIDB_WARNING(SCIDB_LE_OP_INPUT_TOO_MANY_FIELDS) << _csvParser.getFileOffset() << _csvParser.getRecordNumber() << _column); } array()->completeShadowArrayRow(); // done with cell/record } for (size_t i = 0; i < nAttrs; i++) { if (chunkIterators[i]) { chunkIterators[i]->flush(); } } return sawData; }