Files
libreoffice/xmloff/source/core/RDFaExportHelper.cxx
Release Engineers 6f90bae604 CWS-TOOLING: integrate CWS bjm02
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
2009-08-27 15:54:55 +00:00

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