📄 xslimportrule.cpp
字号:
/* * This file is part of the XSL implementation. * * Copyright (C) 2004, 2005, 2006, 2008 Apple Inc. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */#include "config.h"#include "XSLImportRule.h"#if ENABLE(XSLT)#include "CachedXSLStyleSheet.h"#include "DocLoader.h"#include "XSLStyleSheet.h"namespace WebCore {XSLImportRule::XSLImportRule(XSLStyleSheet* parent, const String& href) : StyleBase(parent) , m_strHref(href) , m_cachedSheet(0) , m_loading(false){}XSLImportRule::~XSLImportRule(){ if (m_styleSheet) m_styleSheet->setParent(0); if (m_cachedSheet) m_cachedSheet->removeClient(this);}XSLStyleSheet* XSLImportRule::parentStyleSheet() const{ return (parent() && parent()->isXSLStyleSheet()) ? static_cast<XSLStyleSheet*>(parent()) : 0;}void XSLImportRule::setXSLStyleSheet(const String& url, const String& sheet){ if (m_styleSheet) m_styleSheet->setParent(0); m_styleSheet = XSLStyleSheet::create(this, url); XSLStyleSheet* parent = parentStyleSheet(); if (parent) m_styleSheet->setParentStyleSheet(parent); m_styleSheet->parseString(sheet); m_loading = false; if (parent) parent->checkLoaded();}bool XSLImportRule::isLoading(){ return (m_loading || (m_styleSheet && m_styleSheet->isLoading()));}void XSLImportRule::loadSheet(){ DocLoader* docLoader = 0; StyleBase* root = this; StyleBase* parent; while ((parent = root->parent())) root = parent; if (root->isXSLStyleSheet()) docLoader = static_cast<XSLStyleSheet*>(root)->docLoader(); String absHref = m_strHref; XSLStyleSheet* parentSheet = parentStyleSheet(); if (!parentSheet->href().isNull()) // use parent styleheet's URL as the base URL absHref = KURL(KURL(parentSheet->href()), m_strHref).string(); // Check for a cycle in our import chain. If we encounter a stylesheet // in our parent chain with the same URL, then just bail. for (parent = this->parent(); parent; parent = parent->parent()) { if (parent->isXSLStyleSheet() && absHref == static_cast<XSLStyleSheet*>(parent)->href()) return; } m_cachedSheet = docLoader->requestXSLStyleSheet(absHref); if (m_cachedSheet) { m_cachedSheet->addClient(this); // If the imported sheet is in the cache, then setXSLStyleSheet gets called, // and the sheet even gets parsed (via parseString). In this case we have // loaded (even if our subresources haven't), so if we have a stylesheet after // checking the cache, then we've clearly loaded. if (!m_styleSheet) m_loading = true; }}} // namespace WebCore#endif // ENABLE(XSLT)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -