/*++ Copyright (c) 1997 Microsoft Corporation Module Name: html.cpp Abstract: This module contains simple HTML authoring functions. --*/ #define WIN32_LEAN_AND_MEAN #include #include #include #include #include "html.h" void WriteString( IN EXTENSION_CONTROL_BLOCK * pECB, IN LPCSTR lpsz ) { DWORD dwBytesWritten; dwBytesWritten = lstrlen( lpsz ); pECB->WriteClient( pECB->ConnID, (PVOID) lpsz, &dwBytesWritten, 0 ); } void HtmlCreatePage( IN EXTENSION_CONTROL_BLOCK * pECB, IN LPCSTR lpszTitle ) { WriteString( pECB, "\r\n\r\n" ); if ( lpszTitle ) { WriteString( pECB, "" ); HtmlWriteText( pECB, lpszTitle ); WriteString( pECB, "\r\n\r\n" ); } WriteString( pECB, "\r\n\r\n" ); } void HtmlEndPage( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "\r\n\r\n" ); WriteString( pECB, "\r\n" ); } void HtmlHeading( IN EXTENSION_CONTROL_BLOCK * pECB, IN int nHeading, IN LPCSTR lpszText ) { HtmlBeginHeading( pECB, nHeading ); HtmlWriteText( pECB, lpszText ); HtmlEndHeading( pECB, nHeading ); } void HtmlBeginHeading( IN EXTENSION_CONTROL_BLOCK * pECB, IN int nHeading ) { char szCode[16]; wsprintf( szCode, "", nHeading ); WriteString( pECB, szCode ); } void HtmlEndHeading( IN EXTENSION_CONTROL_BLOCK * pECB, IN int nHeading ) { char szCode[16]; wsprintf( szCode, "", nHeading ); WriteString( pECB, szCode ); } void HtmlWriteTextLine( IN EXTENSION_CONTROL_BLOCK * pECB, IN LPCSTR lpsz ) { HtmlWriteText( pECB, lpsz ); WriteString( pECB, "\r\n" ); } void HtmlWriteText( IN EXTENSION_CONTROL_BLOCK * pECB, IN LPCSTR lpsz ) { char szBuf[1028]; int nLen; int i; // // Build up enough data to make call to WriteString // worthwhile; convert special chars too. // nLen = 0; for ( i = 0; lpsz[i]; i++ ) { if ( lpsz[i] == '<' ) lstrcpy( &szBuf[nLen], "<" ); else if ( lpsz[i] == '>' ) lstrcpy( &szBuf[nLen], ">" ); else if ( lpsz[i] == '&' ) lstrcpy( &szBuf[nLen], "&" ); else if ( lpsz[i] == '\"' ) lstrcpy( &szBuf[nLen], """ ); else { szBuf[nLen] = lpsz[i]; szBuf[nLen + 1] = 0; } nLen += lstrlen( &szBuf[nLen] ); if ( nLen >= 1024 ) { WriteString( pECB, szBuf ); nLen = 0; } } if ( nLen ) WriteString( pECB, szBuf ); } void HtmlEndParagraph( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "

\r\n" ); } // // HtmlHyperLink adds a hyptertext link. lpszDoc is the destination // document, and lpszText is the display text. // // HtmlHyperLinkAndBookmark adds a hyperlink with a bookmark link. // HtmlBookmarkLink adds only a bookmark link. // void HtmlHyperLink( IN EXTENSION_CONTROL_BLOCK * pECB, IN LPCSTR lpszDoc, IN LPCSTR lpszText ) { WriteString( pECB, "" ); HtmlWriteText( pECB, lpszText ); WriteString( pECB, "\r\n" ); } void HtmlHyperLinkAndBookmark( IN EXTENSION_CONTROL_BLOCK * pECB, IN LPCSTR lpszDoc, IN LPCSTR lpszBookmark, IN LPCSTR lpszText ) { WriteString( pECB, "" ); HtmlWriteText( pECB, lpszText ); WriteString( pECB, "\r\n" ); } void HtmlBookmarkLink( IN EXTENSION_CONTROL_BLOCK * pECB, IN LPCSTR lpszBookmark, IN LPCSTR lpszText ) { HtmlHyperLinkAndBookmark( pECB, NULL, lpszBookmark, lpszText ); } // // The following support list formatting. // void HtmlBeginUnnumberedList( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "

    \r\n" ); } void HtmlBeginListItem( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "
  • " ); } void HtmlEndUnnumberedList( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "
" ); } void HtmlBeginNumberedList( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "
    " ); } void HtmlEndNumberedList( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "
" ); } void HtmlBeginDefinitionList( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "
" ); } void HtmlEndDefinitionList( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "
" ); } void HtmlDefinition( IN EXTENSION_CONTROL_BLOCK * pECB, IN LPCSTR lpszTerm, IN LPSTR lpszDef ) { int nStart, nEnd, nLen; char tcHolder; WriteString( pECB, "
" ); HtmlWriteText( pECB, lpszTerm ); WriteString( pECB, "\r\n" ); WriteString( pECB, "
" ); nStart = 0; nLen = lstrlen( lpszDef ); do { nEnd = nStart + 70; if ( nEnd >= nLen ) { HtmlWriteText( pECB, &lpszDef[nStart] ); WriteString( pECB, "\r\n" ); break; } while ( nEnd > nStart ) if ( lpszDef[nEnd] == ' ' ) break; if ( nEnd == nStart ) // too long! nEnd = nStart + 70; // write defintion segment tcHolder = lpszDef[nEnd]; lpszDef[nEnd] = 0; HtmlWriteText( pECB, &lpszDef[nStart] ); WriteString( pECB, "\r\n" ); lpszDef[nEnd] = tcHolder; nStart = nEnd; // skip excess whitespace while ( lpszDef[nStart] == ' ' ) nStart++; // pretty formatting if ( nStart < nLen ) WriteString( pECB, " " ); } while ( nStart < nLen ); } // For complex defintions void HtmlBeginDefinitionTerm( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "
" ); } void HtmlBeginDefinition( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "
" ); } // // Text formatting // void HtmlBeginPreformattedText( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "
" );
}


void 
HtmlEndPreformattedText( 
    IN EXTENSION_CONTROL_BLOCK * pECB 
)
{
    WriteString( pECB, "
" ); } void HtmlBeginBlockQuote( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "
" ); } void HtmlEndBlockQuote( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "
" ); } void HtmlBeginAddress( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "
" ); } void HtmlEndAddress( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "
" ); } void HtmlBeginDefine( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "" ); } void HtmlEndDefine( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "" ); } void HtmlBeginEmphasis( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "" ); } void HtmlEndEmphasis( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "" ); } void HtmlBeginCitation( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "" ); } void HtmlEndCitation( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "" ); } void HtmlBeginCode( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "" ); } void HtmlEndCode( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "" ); } void HtmlBeginKeyboard( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "" ); } void HtmlEndKeyboard( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "" ); } void HtmlBeginStatus( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "" ); } void HtmlEndStatus( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "" ); } void HtmlBeginStrong( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "" ); } void HtmlEndStrong( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "" ); } void HtmlBeginVariable( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "" ); } void HtmlEndVariable( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "" ); } void HtmlBold( IN EXTENSION_CONTROL_BLOCK * pECB, IN LPCSTR lpszText ) { HtmlBeginBold( pECB ); HtmlWriteText( pECB, lpszText ); HtmlEndBold( pECB ); } void HtmlBeginBold( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "" ); } void HtmlEndBold( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "" ); } void HtmlItalic( IN EXTENSION_CONTROL_BLOCK * pECB, IN LPCSTR lpszText ) { HtmlBeginItalic( pECB ); HtmlWriteText( pECB, lpszText ); HtmlEndItalic( pECB ); } void HtmlBeginItalic( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "" ); } void HtmlEndItalic( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "" ); } void HtmlFixed( IN EXTENSION_CONTROL_BLOCK * pECB, IN LPCSTR lpszText ) { HtmlBeginFixed( pECB ); HtmlWriteText( pECB, lpszText ); HtmlEndFixed( pECB ); } void HtmlBeginFixed( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "" ); } void HtmlEndFixed( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "" ); } void HtmlLineBreak( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "
\r\n" ); } void HtmlHorizontalRule( IN EXTENSION_CONTROL_BLOCK * pECB ) { WriteString( pECB, "\r\n
\r\n" ); } void HtmlImage( IN EXTENSION_CONTROL_BLOCK * pECB, IN LPCSTR lpszPicFile, IN LPCSTR lpszAltText ) { WriteString( pECB, "\""\r\n" ); } void HtmlPrintf( IN EXTENSION_CONTROL_BLOCK * pECB, IN LPCSTR lpszFormat, ... ) { char szBuf[8192]; va_list list; va_start( list, lpszFormat ); vsprintf( szBuf, lpszFormat, list ); WriteString( pECB, szBuf ); va_end( list ); }