#if defined(_WIN32)
# define WIN32_LEAN_AND_MEAN 1
# include <windows.h>
# define DLLHANDLE HMODULE
# define LOADERLIB "p6loader.dll"
# define LOADLIB(fn) LoadLibraryA((fn))
# define LOADSYMBOL(h,s) GetProcAddress((HMODULE)(h),(s))
# define FREELIB(h) FreeLibrary((HMODULE)(h))
#else
# include <errno.h>
# include <dlfcn.h>
# define DLLHANDLE void*
# define LOADERLIB "libp6loader.so"
# define LOADLIB(fn) dlopen((fn),RTLD_NOW)
# define LOADSYMBOL(h,s) dlsym((h),(s))
# define FREELIB(h) !dlclose((h))
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <memory>
#include "filestream.h"
#include "p6xjr.h"
using namespace P6R;
{
public:
{
if (!ppIface) return eAccessFault;
*ppIface = NULL;
if(iid == IID_p6ICom) *ppIface =
static_cast<p6IDataStream*
>(
this);
else if(iid == IID_p6IDataStream) *ppIface =
static_cast<p6IDataStream*
>(
this);
else return eNoInterface;
return eOk;
}
{
return m_cRef++;
}
{
if(0 == (tmp = (--m_cRef))) { delete this; }
return tmp;
}
{
return eOk;
}
{
if (m_cBuffer && cData+1 > m_cBuffer)
{
free( m_pBuffer );
m_pBuffer = NULL;
m_cBuffer = 0;
}
if (!m_pBuffer)
{
m_pBuffer = (
P6CHAR*) malloc(cData+1);
m_cBuffer = cData;
}
if (m_pBuffer)
{
memcpy( m_pBuffer, pData, cData+1 );
m_pBuffer[cData] = '\0';
printf( m_pBuffer );
}
return eOk;
}
{
CConsoleStream *pObj = NULL;
if (NULL != (pObj = new (std::nothrow) CConsoleStream() ))
{
if (
P6FAILED(err = pObj->queryInterface( iid, ppIface )))
delete pObj;
}
return err;
}
CConsoleStream() : m_cRef(0), m_pBuffer(NULL), m_cBuffer(0) {;}
virtual ~CConsoleStream() { if (m_pBuffer) free(m_pBuffer); }
protected:
};
{
CFileStream *pObj = NULL;
"<?xml version='1.0' encoding='ISO-8859-1'?>\n" \
"<xsl:stylesheet version='2.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'\n" \
" xmlns:p6r='http://www.p6r.com/XSLT/extensions'>\n" \
"<xsl:output method='html' use-character-maps='latin1-accented-letters latin1-symbols'/>\n" \
"<xsl:output name='altchars' method='html' use-character-maps='latin1-entities'/>\n" \
" \n" \
"<xsl:character-map name='NBSP'>\n" \
" <xsl:output-character character=' ' string='&nbsp;'/>\n" \
"</xsl:character-map>\n" \
"<xsl:character-map name='latin1-accented-letters'>\n" \
" <xsl:output-character character='À' string='&Agrave;'/>\n" \
" <xsl:output-character character='Á' string='&Aacute;'/>\n" \
" <xsl:output-character character='Â' string='&Acirc;'/>\n" \
" <xsl:output-character character='Ã' string='&Atilde;'/>\n" \
" <xsl:output-character character='Ä' string=''/>\n" \
"</xsl:character-map>\n" \
" \n " \
"<xsl:character-map name='latin1-symbols'>\n" \
" <xsl:output-character character='¡' string='&iexcl;'/>\n" \
" <xsl:output-character character='¢' string='&cent;'/>\n" \
" <xsl:output-character character='£' string='&pound;'/>\n" \
" <xsl:output-character character='¤' string='Henry the Great Dane'/>\n" \
"</xsl:character-map>\n" \
" \n " \
"<xsl:character-map name='latin1-entities' " \
" use-character-maps='latin1-accented-letters NBSP latin1-symbols'/>\n" \
" \n " \
"<xsl:template match='/'>\n" \
"<HTML><BODY>\n" \
" <P>Now is the Átime to test £ this character *Ä* mapping thing</P>\n" \
"<ul>\n" \
"<li><p6r:number value='(1,44,33)' format='Hi there-%1$-what is %2$ new?,%3$' /></li>\n" \
"<li><p6r:number value='//name/@id' format='1>%1$,2>%2$,3>%3$,4>%4$'/></li>\n" \
"<li><p6r:number value='(234567)' lang=\"'es-es'\" format='Property costs +%1$ euros'/></li>\n" \
"<li><p6r:number value='/staff/@sku'/></li>\n" \
"<xsl:number count='name | staff' level='multiple' format='[1.1(a)]' />" \
"<xsl:copy-abc-today version='6.1'>\n" \
" <xsl:comment>Version 6.1 should not print</xsl:comment>\n" \
" <xsl:fallback>\n" \
" <xsl:comment>Fallback 1 in version 6.1 element should work</xsl:comment>\n" \
" </xsl:fallback>\n" \
" <xsl:fallback>\n" \
" <xsl:comment>Fallback 2 in version 6.1 element should work</xsl:comment>\n" \
" </xsl:fallback>\n" \
"</xsl:copy-abc-today>\n" \
"</ul>" \
"<xsl:text>AÃ start text element ¡¢£end text element £</xsl:text>"\
"<P><xsl:text> Replace this char [¤] with a simple text string </xsl:text>\n" \
"</BODY></HTML>\n" \
" \n" \
"<xsl:result-document href='charmap1.html' format='altchars'>\n" \
"<HTML><BODY>\n" \
" <xsl:text> ABCDEFGH   IJKL Â MNOPQR ¡ STUVWXYZ </xsl:text>\n" \
"</BODY></HTML>\n" \
"</xsl:result-document>\n" \
"<xsl:fallback>\n" \
" <xsl:comment>This should be ignored</xsl:comment>\n" \
"</xsl:fallback>\n" \
"</xsl:template></xsl:stylesheet>";
"<?xml version='1.0' encoding='UTF-8' ?>\n" \
"<staff sku='03'>" \
"<employee>" \
" <name id='55'>Henry Joseph</name>" \
" <name id='2'>Irvin Joseph</name>" \
" <name id='345'>Izzy Joseph</name>" \
" <name id='11'>Basil Joseph</name>" \
" <name id='99'>Mark Joseph</name>" \
" <name id='73'>Jim Susoy</name>" \
"</employee>" \
"</staff>";
{
printf( "Error: p6IXSLT Initialize failed\n" );
return err;
}
if (NULL != (pObj = new (std::nothrow) CFileStream() ))
{
pObj->initialize( "example-xslt4.html" );
if (
P6FAILED( err = pObj->queryInterface( IID_p6IDataStream, (
P6VOID**)&pOutStream )))
{
delete pObj;
return err;
}
else cpOut1 = pOutStream;
}
if (NULL != (pObj = new (std::nothrow) CFileStream() ))
{
pObj->initialize( "example-xslt4-warn.txt" );
if (
P6FAILED( err = pObj->queryInterface( IID_p6IDataStream, (
P6VOID**)&pOutStream )))
{
delete pObj;
return err;
}
else cpOut2 = pOutStream;
}
err = cpXSLT->initialize( P6XSLT_NOFLAGS, cpOut2 );
if (
P6SUCCEEDED( err )) err = cpXSLT->compileTemplates( pTemplate, cpOut2 );
bufSize = (
P6UINT32) strlen( pXMLData );
if (
P6SUCCEEDED( err )) err = cpXSLT->startTransform( cpOut1, pXMLData, bufSize,
P6TRUE );
return err;
}
int main(int argc,char *argv[])
{
{
{
err = runXSLT( cpDataStream );
printf( "runXSLT result: [ %x ]\n", err );
}
else printf("ERROR: Failed to initialize the loader [ %x ]\n", err );
}
else printf( "ERROR: Failed to create CConsoleStream [ %x ]\n", err );
return err;
}