2009-08-12 Bjoern Michaelsen #i101879# moved officeversion from envelope body to requestbody 2009-08-11 Bjoern Michaelsen #i103732# reverting changeset f3f527950572 2009-08-10 Bjoern Michaelsen cws bjm02: merging local minibranches 2009-08-10 Bjoern Michaelsen #i104128# remove additional duplication in svx headers, remove license header merge conflicts in svx headers 2009-08-10 Bjoern Michaelsen #i100484# fixed buildbreaker on win32 2009-08-10 Bjoern Michaelsen #i104128# remove duplication in svx headers 2009-08-04 Bjoern Michaelsen #i103913# fixed bookmark updating when moving numbered para 2009-08-03 Bjoern Michaelsen #i101879# include officeversion/productname in soaprequest 2009-07-31 Bjoern Michaelsen #i84926# Selecting all in blockmode automatically falls back to std mode 2009-07-31 Bjoern Michaelsen #i100484# operation on 'pCmpLine' may be undefined, thanks cmc 2009-07-29 Bjoern Michaelsen #i103059# fixing crash on empty enumeration 2009-07-29 Bjoern Michaelsen #i98659# fixing typo in usagetracking option tabpage 2009-07-29 Bjoern Michaelsen #i103732# not triggering loading of oooimprovement dll if usage tracking is disabled 2009-07-29 Bjoern Michaelsen #i103036# stlunosequence can be use simple array-pointers as iterators, fixing used type in xmloff 2009-07-29 Bjoern Michaelsen #i103036# stlunosequence can be use simple array-pointers as iterators 2009-07-29 Bjoern Michaelsen #i103182# completely removing unused functions in extensions/oooimprovement 2009-07-28 Bjoern Michaelsen cws bjm02: merged changes from master up to milestone DEV300_m53 2009-06-29 Bjoern Michaelsen #i103182# commenting out getFailedAttempts(..) for future use 2009-06-29 Bjoern Michaelsen #i103183# removed unused function sw::mark::CrossRefBookmark::IsLegalName(..) 2009-06-29 Bjoern Michaelsen #i103182# removing unused functions in extensions/oooimprovement 2009-06-24 Bjoern Michaelsen #i103059# not using enumeration for getByName/getByIndex 2009-06-24 Bjoern Michaelsen #i103059# not using enumeration for hasByName/GetCount/hasElements for performance reasons 2009-06-24 Bjoern Michaelsen #i103036# stlunosequence can be use simple array-pointers as iterators 2009-08-27 releng CWS-TOOLING: integrate CWS hr65 2009-08-26 Jens-Heiner Rechtien #i104521#: implement 'setcurrent'; document --hg option to 'create' 2009-08-26 Jens-Heiner Rechtien #i104521#: SOAP method setSCMName() doesn't return a value 2009-08-26 Jens-Heiner Rechtien #i104521#: implement [set|get]_scm() 2009-08-26 Jens-Heiner Rechtien #i104521#: implement --hg switch to 'cws create' 2009-08-27 vg CWS-TOOLING: integrate CWS hr64_DEV300 2009-07-21 13:24:57 +0200 hr r274189 : #i99576#: re-enable optimization for tabcont.cxx 2009-07-21 13:17:18 +0200 hr r274188 : #i99592: disable -xspace optimization for Solaris x86 and SunStudio 12, due to some mis-optimzation in sc and elsewhere. SunStudio 12 update 1 is OK, but needs a few unrelated changes which will be implemented in DEV300 code line 2009-08-27 releng CWS-TOOLING: integrate CWS sw32bf02 2009-08-25 15:52:04 +0200 hde r275366 : reactived testcases hit by issue 102752 2009-08-21 13:52:17 +0200 od r275245 : #i102921# delete files whose deletion has been forgotten in cws impress172 2009-08-21 11:20:47 +0200 od r275225 : CWS-TOOLING: rebase CWS sw32bf02 to trunk@275001 (milestone: DEV300:m55) 2009-08-20 16:21:30 +0200 od r275191 : #i92511# method <lcl_MoveAllLowerObjs(..)> - invalidation of cache for object rectangle inclusive spaces is needed. 2009-08-20 15:50:40 +0200 od r275188 : #i96726# method <SwPagePreView::DocSzChgd(..)> - trigger recalculation of page preview layout even if the count of pages is not changing 2009-08-20 12:37:32 +0200 od r275172 : #i100466# correction for showing and hiding redlines 2009-08-18 13:25:18 +0200 od r275100 : #i103817# method <XMLTextImportHelper::SetStyleAndAttrs(..) - assure that a heading applies the outline style, if no other list style is applied. 2009-08-18 13:21:38 +0200 od r275098 : #i103817# allow the outline style - list style for outline numbering - to be set directly at the paragraph 2009-08-17 14:13:02 +0200 od r275052 : #i103684# add missing documentation for new optional OutlineLevel attribute introduced in OOo 3.1 2009-08-17 14:00:25 +0200 od r275049 : #i100481# method <XMLTextFrameContext_Impl::CreateChildContext(..)># - correct condition for handling embedded documents and embedded math objects 2009-08-12 14:11:34 +0200 od r274891 : #i97379# assure that columns are not applied to fly frames, which represent graphics or embedded objects 2009-08-12 12:51:43 +0200 od r274889 : #i101870# method <SwTxtNode::_MakeNewTxtNode(..)> - perform action on different paragraph styles before applying new paragraph style 2009-08-12 12:24:44 +0200 od r274888 : #i101092# method <ViewShell::Paint(..)> - encapsulate paint of document background and document into pre and post drawing layer paint calls 2009-08-12 11:38:48 +0200 od r274886 : #i98766# minor adjustment in order to be warning free under Mac port builds 2009-08-12 11:33:54 +0200 od r274885 : #i99267# method <SwTabFrm::MakeAll()> - reset <bSplit> after forward move to assure that follows can be joined, if further space is available. 2009-08-12 11:11:49 +0200 od r274882 : #i98766# method <ViewShell::SmoothScroll(..) - disable smooth scroll for Mac port builds 2009-08-10 12:17:58 +0200 od r274801 : CWS-TOOLING: rebase CWS sw32bf02 to trunk@274622 (milestone: DEV300:m54) 2009-07-21 16:56:45 +0200 od r274206 : #i103685# method <SwTxtFormatter::NewTabPortion(..)> - adjust condition to apply automatic tab stop at left margin correctly in case that tab stops are not relative to indent 2009-07-10 11:53:53 +0200 od r273883 : #i102752 method <SwDrawContact::Modify(..)> - assure that a ShapePropertyChangeNotifier exists 2009-07-07 12:01:58 +0200 mst r273788 : #i103304# apply patch by dtardon to fix bogus conditional 2009-07-07 09:01:13 +0200 od r273767 : CWS-TOOLING: rebase CWS sw32bf02 to trunk@273468 (milestone: DEV300:m51) 2009-08-27 vg CWS-TOOLING: integrate CWS native264_DEV300 2009-08-13 11:58:58 +0200 is r274928 : #i104200# update to jre6u16 2009-08-27 vg CWS-TOOLING: integrate CWS automationdev300m54tables 2009-08-14 13:01:05 +0200 wg r274976 : i104224 2009-08-14 13:00:28 +0200 wg r274975 : i104224 2009-08-14 12:12:34 +0200 wg r274974 : i104222 2009-08-13 14:28:13 +0200 wg r274944 : i104205 2009-08-13 14:27:40 +0200 wg r274943 : i104205 2009-08-13 14:26:36 +0200 wg r274942 : i104205
219 lines
7.5 KiB
C++
219 lines
7.5 KiB
C++
/*************************************************************************
|
|
*
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* Copyright 2008 by Sun Microsystems, Inc.
|
|
*
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
|
*
|
|
* $RCSfile: RDFaExportHelper.cxx,v $
|
|
* $Revision: 1.1.2.4 $
|
|
*
|
|
* This file is part of OpenOffice.org.
|
|
*
|
|
* OpenOffice.org is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Lesser General Public License version 3
|
|
* only, as published by the Free Software Foundation.
|
|
*
|
|
* OpenOffice.org 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 Lesser General Public License version 3 for more details
|
|
* (a copy is included in the LICENSE file that accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* version 3 along with OpenOffice.org. If not, see
|
|
* <http://www.openoffice.org/license.html>
|
|
* for a copy of the LGPLv3 License.
|
|
*
|
|
************************************************************************/
|
|
|
|
#include "precompiled_xmloff.hxx"
|
|
|
|
#include "RDFaExportHelper.hxx"
|
|
|
|
#include "xmlnmspe.hxx"
|
|
|
|
#include <xmloff/xmlexp.hxx>
|
|
#include <xmloff/xmltoken.hxx>
|
|
|
|
#include <comphelper/stlunosequence.hxx>
|
|
#include <comphelper/stl_types.hxx>
|
|
|
|
#include <com/sun/star/rdf/Statement.hpp>
|
|
#include <com/sun/star/rdf/URIs.hpp>
|
|
#include <com/sun/star/rdf/URI.hpp>
|
|
#include <com/sun/star/rdf/XLiteral.hpp>
|
|
#include <com/sun/star/rdf/XRepositorySupplier.hpp>
|
|
#include <com/sun/star/rdf/XDocumentRepository.hpp>
|
|
|
|
#include <rtl/ustrbuf.hxx>
|
|
|
|
#include <boost/bind.hpp>
|
|
#include <boost/iterator_adaptors.hpp>
|
|
#ifndef BOOST_ITERATOR_ADAPTOR_DWA053000_HPP_ // from iterator_adaptors.hpp
|
|
// N.B.: the check for the header guard _of a specific version of boost_
|
|
// is here so this may work on different versions of boost,
|
|
// which sadly put the goods in different header files
|
|
#include <boost/iterator/transform_iterator.hpp>
|
|
#endif
|
|
|
|
#include <functional>
|
|
#include <algorithm>
|
|
|
|
|
|
using namespace ::com::sun::star;
|
|
|
|
namespace xmloff {
|
|
|
|
static const char s_prefix [] = "_:b";
|
|
|
|
static ::rtl::OUString
|
|
makeCURIE(SvXMLExport * i_pExport,
|
|
uno::Reference<rdf::XURI> const & i_xURI)
|
|
{
|
|
OSL_ENSURE(i_xURI.is(), "makeCURIE: null URI");
|
|
if (!i_xURI.is()) throw uno::RuntimeException();
|
|
|
|
const ::rtl::OUString Namespace( i_xURI->getNamespace() );
|
|
OSL_ENSURE(Namespace.getLength(), "makeCURIE: no namespace");
|
|
if (!Namespace.getLength()) throw uno::RuntimeException();
|
|
|
|
::rtl::OUStringBuffer buf;
|
|
buf.append( i_pExport->EnsureNamespace(Namespace) );
|
|
buf.append( static_cast<sal_Unicode>(':') );
|
|
// N.B.: empty LocalName is valid!
|
|
buf.append( i_xURI->getLocalName() );
|
|
|
|
return buf.makeStringAndClear();
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
|
|
RDFaExportHelper::RDFaExportHelper(SvXMLExport & i_rExport)
|
|
: m_rExport(i_rExport), m_xRepository(0), m_Counter(0)
|
|
{
|
|
const uno::Reference<rdf::XRepositorySupplier> xRS( m_rExport.GetModel(),
|
|
uno::UNO_QUERY);
|
|
OSL_ENSURE(xRS.is(), "AddRDFa: model is no rdf::XRepositorySupplier");
|
|
if (!xRS.is()) throw uno::RuntimeException();
|
|
m_xRepository.set(xRS->getRDFRepository(), uno::UNO_QUERY_THROW);
|
|
|
|
const uno::Reference<rdf::XURI> xLabel(
|
|
rdf::URI::createKnown(m_rExport.GetComponentContext(),
|
|
rdf::URIs::RDFS_LABEL));
|
|
m_RDFsLabel = xLabel->getStringValue();
|
|
}
|
|
|
|
::rtl::OUString
|
|
RDFaExportHelper::LookupBlankNode(
|
|
uno::Reference<rdf::XBlankNode> const & i_xBlankNode)
|
|
{
|
|
OSL_ENSURE(i_xBlankNode.is(), "null BlankNode?");
|
|
if (!i_xBlankNode.is()) throw uno::RuntimeException();
|
|
::rtl::OUString & rEntry(
|
|
m_BlankNodeMap[ i_xBlankNode->getStringValue() ] );
|
|
if (!rEntry.getLength())
|
|
{
|
|
::rtl::OUStringBuffer buf;
|
|
buf.appendAscii(s_prefix);
|
|
buf.append(++m_Counter);
|
|
rEntry = buf.makeStringAndClear();
|
|
}
|
|
return rEntry;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
|
|
void
|
|
RDFaExportHelper::AddRDFa(
|
|
uno::Reference<rdf::XMetadatable> const & i_xMetadatable)
|
|
{
|
|
try
|
|
{
|
|
uno::Sequence<rdf::Statement> stmts(
|
|
m_xRepository->getStatementRDFa(i_xMetadatable) );
|
|
|
|
if (0 == stmts.getLength())
|
|
{
|
|
return; // no RDFa
|
|
}
|
|
|
|
// all stmts have the same subject, so we only handle first one
|
|
const uno::Reference<rdf::XURI> xSubjectURI(stmts[0].Subject,
|
|
uno::UNO_QUERY);
|
|
const uno::Reference<rdf::XBlankNode> xSubjectBNode(stmts[0].Subject,
|
|
uno::UNO_QUERY);
|
|
if (!xSubjectURI.is() && !xSubjectBNode.is())
|
|
{
|
|
throw uno::RuntimeException();
|
|
}
|
|
static const sal_Unicode s_OpenBracket ('[');
|
|
static const sal_Unicode s_CloseBracket(']');
|
|
const ::rtl::OUString about( xSubjectURI.is()
|
|
? m_rExport.GetRelativeReference(xSubjectURI->getStringValue())
|
|
: ::rtl::OUStringBuffer().append(s_OpenBracket).append(
|
|
LookupBlankNode(xSubjectBNode)).append(s_CloseBracket)
|
|
.makeStringAndClear()
|
|
);
|
|
|
|
rdf::Statement* const iter
|
|
( ::std::partition( ::comphelper::stl_begin(stmts),
|
|
::comphelper::stl_end(stmts),
|
|
::boost::bind(&::rtl::OUString::equals, m_RDFsLabel,
|
|
::boost::bind(&rdf::XNode::getStringValue,
|
|
::boost::bind(&rdf::Statement::Predicate, _1))) ) );
|
|
|
|
if (iter != ::comphelper::stl_end(stmts))
|
|
{
|
|
// from iter to end, all stmts should have same object
|
|
const uno::Reference<rdf::XLiteral> xContent(
|
|
(*iter).Object, uno::UNO_QUERY_THROW );
|
|
const uno::Reference<rdf::XURI> xDatatype(xContent->getDatatype());
|
|
if (xDatatype.is())
|
|
{
|
|
const ::rtl::OUString datatype(
|
|
makeCURIE(&m_rExport, xDatatype) );
|
|
m_rExport.AddAttribute(XML_NAMESPACE_XHTML,
|
|
token::XML_DATATYPE, datatype);
|
|
}
|
|
if (iter != ::comphelper::stl_begin(stmts)) // there is rdfs:label
|
|
{
|
|
m_rExport.AddAttribute(XML_NAMESPACE_XHTML, token::XML_CONTENT,
|
|
xContent->getValue());
|
|
}
|
|
}
|
|
else
|
|
{
|
|
OSL_ENSURE(false,"invalid RDFa: every property is rdfs:label");
|
|
return;
|
|
}
|
|
|
|
::rtl::OUStringBuffer property;
|
|
::comphelper::intersperse(
|
|
::boost::make_transform_iterator(
|
|
iter, // omit RDFsLabel predicates!
|
|
::boost::bind(&makeCURIE, &m_rExport,
|
|
::boost::bind(&rdf::Statement::Predicate, _1))),
|
|
// argh, this must be the same type :(
|
|
::boost::make_transform_iterator(
|
|
::comphelper::stl_end(stmts),
|
|
::boost::bind(&makeCURIE, &m_rExport,
|
|
::boost::bind(&rdf::Statement::Predicate, _1))),
|
|
::comphelper::OUStringBufferAppender(property),
|
|
::rtl::OUString::createFromAscii(" "));
|
|
|
|
m_rExport.AddAttribute(XML_NAMESPACE_XHTML, token::XML_PROPERTY,
|
|
property.makeStringAndClear());
|
|
|
|
m_rExport.AddAttribute(XML_NAMESPACE_XHTML, token::XML_ABOUT, about);
|
|
}
|
|
catch (uno::Exception &)
|
|
{
|
|
OSL_ENSURE(false, "AddRDFa: exception");
|
|
}
|
|
}
|
|
|
|
} // namespace xmloff
|
|
|