static String cssPropertyName(const Identifier& propertyName, bool* hadPixelOrPosPrefix = 0) { DeprecatedString prop = propertyName; int i = prop.length(); if (!i) return prop; while (--i) { ::UChar c = prop[i].unicode(); if (c >= 'A' && c <= 'Z') prop.insert(i, '-'); } prop = prop.lower(); if (hadPixelOrPosPrefix) *hadPixelOrPosPrefix = false; if (prop.startsWith("css-")) prop = prop.mid(4); else if (prop.startsWith("pixel-")) { prop = prop.mid(6); if (hadPixelOrPosPrefix) *hadPixelOrPosPrefix = true; } else if (prop.startsWith("pos-")) { prop = prop.mid(4); if (hadPixelOrPosPrefix) *hadPixelOrPosPrefix = true; } else if (prop.startsWith("khtml-") || prop.startsWith("apple-") || prop.startsWith("webkit-")) prop.insert(0, '-'); return prop; }
DeprecatedStringList DeprecatedStringList::split(const DeprecatedString &separator, const DeprecatedString &s, bool allowEmptyEntries) { DeprecatedStringList result; int startPos = 0; int endPos; while ((endPos = s.find(separator, startPos)) != -1) { if (allowEmptyEntries || startPos != endPos) result.append(s.mid(startPos, endPos - startPos)); startPos = endPos + separator.length(); } if (allowEmptyEntries || startPos != (int)s.length()) result.append(s.mid(startPos)); return result; }
void SVGPatternElement::fillAttributesFromReferencePattern(const SVGPatternElement* target, KCanvasMatrix& patternTransformMatrix) const { DeprecatedString ref = String(href()->baseVal()).deprecatedString(); KRenderingPaintServer *refServer = getPaintServerById(document(), ref.mid(1)); if (!refServer || refServer->type() != PS_PATTERN) return; KRenderingPaintServerPattern *refPattern = static_cast<KRenderingPaintServerPattern *>(refServer); if (!hasAttribute(SVGNames::patternUnitsAttr)) { const AtomicString& value = target->getAttribute(SVGNames::patternUnitsAttr); if (value == "userSpaceOnUse") patternUnits()->setBaseVal(SVG_UNIT_TYPE_USERSPACEONUSE); else if (value == "objectBoundingBox") patternUnits()->setBaseVal(SVG_UNIT_TYPE_OBJECTBOUNDINGBOX); } if (!hasAttribute(SVGNames::patternContentUnitsAttr)) { const AtomicString& value = target->getAttribute(SVGNames::patternContentUnitsAttr); if (value == "userSpaceOnUse") patternContentUnits()->setBaseVal(SVG_UNIT_TYPE_USERSPACEONUSE); else if (value == "objectBoundingBox") patternContentUnits()->setBaseVal(SVG_UNIT_TYPE_OBJECTBOUNDINGBOX); } if (!hasAttribute(SVGNames::patternTransformAttr)) patternTransformMatrix = refPattern->patternTransform(); }
void SVGPatternElement::notifyAttributeChange() const { if (!m_paintServer || !m_paintServer->activeClient() || m_ignoreAttributeChanges) return; IntSize newSize = IntSize(lroundf(width()->baseVal()->value()), lroundf(height()->baseVal()->value())); if (m_tile && (m_tile->size() == newSize) || newSize.width() < 1 || newSize.height() < 1) return; m_ignoreAttributeChanges = true; // FIXME: This whole "target" idea seems completely broken to me // basically it seems we're effectively trying to change the "this" pointer // for the rest of the method... why don't we just? Or better yet, why don't // we call some method on the "target" and each target in the chain? -- ECS 11/21/05 // Find first pattern def that has children const SVGPatternElement* target = this; const Node *test = this; while(test && !test->hasChildNodes()) { DeprecatedString ref = String(target->href()->baseVal()).deprecatedString(); test = ownerDocument()->getElementById(String(ref.mid(1)).impl()); if (test && test->hasTagName(SVGNames::patternTag)) target = static_cast<const SVGPatternElement* >(test); } unsigned short savedPatternUnits = patternUnits()->baseVal(); unsigned short savedPatternContentUnits = patternContentUnits()->baseVal(); KCanvasMatrix patternTransformMatrix; if (patternTransform()->baseVal()->numberOfItems() > 0) patternTransformMatrix = KCanvasMatrix(patternTransform()->baseVal()->consolidate()->matrix()->matrix()); fillAttributesFromReferencePattern(target, patternTransformMatrix); drawPatternContentIntoTile(target, newSize, patternTransformMatrix); patternUnits()->setBaseVal(savedPatternUnits); patternContentUnits()->setBaseVal(savedPatternContentUnits); notifyClientsToRepaint(); m_ignoreAttributeChanges = false; }
bool HTMLFormElement::formData(FormData &form_data) const { DeprecatedCString enc_string = ""; // used for non-multipart data DeprecatedString str = m_acceptcharset.deprecatedString(); str.replace(',', ' '); DeprecatedStringList charsets = DeprecatedStringList::split(' ', str); TextEncoding encoding(InvalidEncoding); Frame *frame = document()->frame(); for (DeprecatedStringList::Iterator it = charsets.begin(); it != charsets.end(); ++it) { if ((encoding = TextEncoding((*it).latin1())).isValid()) break; } if (!encoding.isValid()) { if (frame) encoding = TextEncoding(frame->encoding().latin1()); else encoding = TextEncoding(Latin1Encoding); } for (unsigned i = 0; i < formElements.size(); ++i) { HTMLGenericFormElement* current = formElements[i]; FormDataList lst(encoding); if (!current->disabled() && current->appendFormData(lst, m_multipart)) { for (DeprecatedValueListConstIterator<FormDataListItem> it = lst.begin(); it != lst.end(); ++it) { if (!m_multipart) { // handle ISINDEX / <input name=isindex> special // but only if its the first entry if ( enc_string.isEmpty() && (*it).m_data == "isindex" ) { ++it; enc_string += encodeCString( (*it).m_data ); } else { if(!enc_string.isEmpty()) enc_string += '&'; enc_string += encodeCString((*it).m_data); enc_string += "="; ++it; enc_string += encodeCString((*it).m_data); } } else { DeprecatedCString hstr("--"); hstr += m_boundary.deprecatedString().latin1(); hstr += "\r\n"; hstr += "Content-Disposition: form-data; name=\""; hstr += (*it).m_data.data(); hstr += "\""; // if the current type is FILE, then we also need to // include the filename if (current->hasLocalName(inputTag) && static_cast<HTMLInputElement*>(current)->inputType() == HTMLInputElement::FILE) { DeprecatedString path = static_cast<HTMLInputElement*>(current)->value().deprecatedString(); // FIXME: This won't work if the filename includes a " mark, // or control characters like CR or LF. This also does strange // things if the filename includes characters you can't encode // in the website's character set. hstr += "; filename=\""; hstr += encoding.fromUnicode(path.mid(path.findRev('/') + 1), true); hstr += "\""; if (!static_cast<HTMLInputElement*>(current)->value().isEmpty()) { DeprecatedString mimeType = frame ? frame->mimeTypeForFileName(path).deprecatedString() : DeprecatedString(); if (!mimeType.isEmpty()) { hstr += "\r\nContent-Type: "; hstr += mimeType.ascii(); } } } hstr += "\r\n\r\n"; ++it; // append body form_data.appendData(hstr.data(), hstr.length()); const FormDataListItem &item = *it; size_t dataSize = item.m_data.size(); if (dataSize != 0) form_data.appendData(item.m_data, dataSize - 1); else if (!item.m_path.isEmpty()) form_data.appendFile(item.m_path); form_data.appendData("\r\n", 2); } } } } if (m_multipart) enc_string = ("--" + m_boundary.deprecatedString() + "--\r\n").ascii(); form_data.appendData(enc_string.data(), enc_string.length()); return true; }
void SelectionController::debugRenderer(RenderObject *r, bool selected) const { if (r->node()->isElementNode()) { Element *element = static_cast<Element *>(r->node()); fprintf(stderr, "%s%s\n", selected ? "==> " : " ", element->localName().deprecatedString().latin1()); } else if (r->isText()) { RenderText *textRenderer = static_cast<RenderText *>(r); if (textRenderer->stringLength() == 0 || !textRenderer->firstTextBox()) { fprintf(stderr, "%s#text (empty)\n", selected ? "==> " : " "); return; } static const int max = 36; DeprecatedString text = String(textRenderer->string()).deprecatedString(); int textLength = text.length(); if (selected) { int offset = 0; if (r->node() == m_sel.start().node()) offset = m_sel.start().offset(); else if (r->node() == m_sel.end().node()) offset = m_sel.end().offset(); int pos; InlineTextBox *box = textRenderer->findNextInlineTextBox(offset, pos); text = text.mid(box->m_start, box->m_len); DeprecatedString show; int mid = max / 2; int caret = 0; // text is shorter than max if (textLength < max) { show = text; caret = pos; } // too few characters to left else if (pos - mid < 0) { show = text.left(max - 3) + "..."; caret = pos; } // enough characters on each side else if (pos - mid >= 0 && pos + mid <= textLength) { show = "..." + text.mid(pos - mid + 3, max - 6) + "..."; caret = mid; } // too few characters on right else { show = "..." + text.right(max - 3); caret = pos - (textLength - show.length()); } show.replace('\n', ' '); show.replace('\r', ' '); fprintf(stderr, "==> #text : \"%s\" at offset %d\n", show.latin1(), pos); fprintf(stderr, " "); for (int i = 0; i < caret; i++) fprintf(stderr, " "); fprintf(stderr, "^\n"); } else { if ((int)text.length() > max) text = text.left(max - 3) + "..."; else text = text.left(max); fprintf(stderr, " #text : \"%s\"\n", text.latin1()); } } }