Files
harbour-core/harbour/examples/hbxlsxml/xlsxml_y.prg
Viktor Szakats 09a69be3c5 2011-10-29 01:53 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* contrib/hbziparc/ziparc.prg
    % minor optimization to last change. checkme.

  - contrib/hbxlsxml
  + examples/hbxlsxml
    ! moved to examples. this code is not even close 
      to Harbour code quality and implements not .xls 
      file format but HTML format renamed to .xls. It's 
      not understood by lots of tools, it's not a standard.
      see details on list.
2011-10-28 23:53:51 +00:00

870 lines
28 KiB
Plaintext

/*
* $Id$
*/
/*
* Harbour Project source code:
*
* Copyright 2011 Fausto Di Creddo Trautwein, ftwein@yahoo.com.br
* www - http://www.xharbour.org http://harbour-project.org
*
* Thanks TO Robert F Greer, PHP original version
* http://sourceforge.net/projects/excelwriterxml/
*
* This program is free software; you can redistribute it AND/OR modify
* it under the terms of the GNU General PUBLIC License as published by
* the Free Software Foundation; either version 2, OR( at your option )
* any later version.
*
* This program 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 General PUBLIC License FOR more details.
*
* You should have received a copy of the GNU General PUBLIC License
* along WITH this software; see the file COPYING. IF NOT, write TO
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA( OR visit the web site http://www.gnu.org/ ).
*
* As a special exception, the Harbour Project gives permission FOR
* additional uses of the text contained IN its release of Harbour.
*
* The exception is that, IF you link the Harbour libraries WITH other
* files TO produce an executable, this does NOT by itself cause the
* resulting executable TO be covered by the GNU General PUBLIC License.
* Your use of that executable is IN no way restricted on account of
* linking the Harbour library code into it.
*
* This exception does NOT however invalidate any other reasons why
* the executable file might be covered by the GNU General PUBLIC License.
*
* This exception applies only TO the code released by the Harbour
* Project under the name Harbour. IF you copy code FROM other
* Harbour Project OR Free Software Foundation releases into a copy of
* Harbour, as the General PUBLIC License permits, the exception does
* NOT apply TO the code that you add IN this way. TO avoid misleading
* anyone as TO the status of such modified files, you must delete
* this exception notice FROM them.
*
* IF you write modifications of your own FOR Harbour, it is your choice
* whether TO permit this exception TO apply TO your modifications.
* IF you DO NOT wish that, delete this exception notice.
*
*/
/*----------------------------------------------------------------------*/
#include "hbclass.ch"
/*----------------------------------------------------------------------*/
CREATE CLASS ExcelWriterXML_Style
DATA id
DATA name
DATA useAlignment INIT .f.
DATA useFont INIT .f.
DATA useBorder INIT .f.
DATA useInterior INIT .f.
DATA valign
DATA halign
DATA rotate
DATA shrinktofit INIT 0
DATA verticaltext INIT 0
DATA wraptext INIT 0
DATA fontColor INIT 'Automatic'
DATA fontName
DATA fontFamily
DATA fontSize
DATA bold
DATA italic
DATA underline
DATA strikethrough
DATA shadow
DATA outline
DATA borderTop INIT {=>}
DATA borderBottom INIT {=>}
DATA borderLeft INIT {=>}
DATA borderRight INIT {=>}
DATA borderDL INIT {=>}
DATA borderDR INIT {=>}
DATA interiorColor
DATA interiorPattern
DATA interiorPatternColor
DATA numberFormat
DATA formatErrors INIT {=>}
DATA namedColorsIE INIT {=>}
METHOD new( id )
METHOD getID()
METHOD getStyleXML()
METHOD checkColor( color )
METHOD setName( name )
METHOD alignVertical( valign )
METHOD alignHorizontal( halign )
METHOD alignRotate( rotate )
METHOD alignShrinktofit()
METHOD alignVerticaltext()
METHOD alignWraptext()
METHOD setFontSize( fontSize )
METHOD setFontColor( fontColor )
METHOD setFontName( fontName )
METHOD setFontFamily( fontFamily )
METHOD setFontBold()
METHOD setFontItalic()
METHOD setFontStrikethrough()
METHOD setFontUnderline( uStyle )
METHOD setFontShadow()
METHOD setFontOutline()
METHOD border( position, weight, color, linestyle )
METHOD bgColor( color, pattern, patternColor )
METHOD bgPattern( pattern, color )
METHOD bgPatternColor( color )
METHOD setNumberFormat( formatString )
METHOD setNumberFormatDate()
METHOD setNumberFormatTime()
METHOD setNumberFormatDatetime()
ENDCLASS
/*----------------------------------------------------------------------*/
METHOD ExcelWriterXML_Style:New( id )
::id:= id
::namedColorsIE := getColorIE()
RETURN SELF
/*----------------------------------------------------------------------*/
METHOD ExcelWriterXML_Style:getID()
RETURN ::id
/*----------------------------------------------------------------------*/
METHOD ExcelWriterXML_Style:getStyleXML()
LOCAL fontcolor, positions, position, auxdata, pData, bLinestyle, bColor, bWeight, xml
LOCAL numberFormat
LOCAL name := ''
LOCAL valign := ''
LOCAL halign := ''
LOCAL rotate := ''
LOCAL shrinktofit := ''
LOCAL verticaltext := ''
LOCAL wraptext := ''
LOCAL bold := ''
LOCAL italic := ''
LOCAL strikethrough := ''
LOCAL underline := ''
LOCAL outline := ''
LOCAL shadow := ''
LOCAL fontName := ''
LOCAL fontFamily := ''
LOCAL fontSize := ''
LOCAL borders := ''
LOCAL interior := ''
LOCAL interiorColor := ''
LOCAL interiorPattern := ''
LOCAL interiorPatternColor := ''
IF ! empty( ::name )
name := 'ss:Name="'+::name+'"'
ENDIF
IF ::useAlignment
IF ! empty( ::valign )
valign := 'ss:Vertical="' + ::valign + '"'
ENDIF
IF ! empty( ::halign )
halign := 'ss:Horizontal="' + ::halign + '"'
ENDIF
IF ! empty( ::rotate )
rotate := 'ss:Rotate="' + ::rotate + '"'
ENDIF
IF ! empty( ::shrinktofit )
shrinktofit := 'ss:ShrinkToFit="1"'
ENDIF
IF ! empty( ::verticaltext )
verticaltext := 'ss:VerticalText="1"'
ENDIF
IF ! empty( ::wraptext )
wraptext := 'ss:WrapText="1"'
ENDIF
ENDIF
IF( ::useFont )
IF ! empty( ::fontColor )
fontColor := 'ss:Color="' + ::fontColor + '"'
ENDIF
IF ! empty( ::bold )
bold := 'ss:Bold="1"'
ENDIF
IF ! empty( ::italic )
italic := 'ss:Italic="1"'
ENDIF
IF ! empty( ::strikethrough )
strikethrough := 'ss:StrikeThrough="' + ::strikethrough + '"'
ENDIF
IF ! empty( ::underline )
underline := 'ss:Underline="' + ::underline + '"'
ENDIF
IF ! empty( ::outline )
outline := 'ss:Outline="1"'
ENDIF
IF ! empty( ::shadow )
shadow := 'ss:Shadow="1"'
ENDIF
IF ! empty( ::fontName )
fontName := 'ss:FontName="' + ::fontName + '"'
ENDIF
IF ! empty( ::fontFamily )
fontFamily := 'x:Family="' + ::fontFamily + '"'
ENDIF
IF ! empty( ::fontSize )
fontSize := 'ss:Size="' + ALLTRIM( STR( ::fontSize, 10 ) ) + '"'
ENDIF
ENDIF
IF ::useBorder
borders := ' <Borders>'+HB_OsNewLine()
positions := { ;
'Top' => ::borderTop, ;
'Bottom' => ::borderBottom, ;
'Left' => ::borderLeft, ;
'Right' => ::borderRight, ;
'DiagonalLeft' => ::borderDL, ;
'DiagonalRight' => ::borderDR }
auxdata := NIL
FOR EACH auxdata IN positions
position := auxdata:Key
pData := auxdata:Value
IF empty( pData )
LOOP
ENDIF
bLinestyle := IIF( hb_hPos( pData, 'LineStyle' ) > 0,;
'ss:LineStyle="' + pData[ 'LineStyle' ] + '"', ;
'' )
bColor := IIF( hb_hPos( pData, 'Color' ) > 0,;
'ss:Color="' + pData[ 'Color' ] + '"',;
'' )
bWeight := IIF( hb_hPos( pData, 'Weight' ) > 0,;
'ss:Weight="' + STR( pData[ 'Weight' ], 1 ) + '"',;
'' )
borders += '<Border ss:Position="' + position + '" ' + bLinestyle + ' ' + bColor + ' ' + bWeight + '/>' + HB_OsNewLine()
NEXT
borders += '</Borders>' + HB_OsNewLine()
ENDIF
IF ::useInterior
IF ! empty( ::interiorColor )
interiorColor := 'ss:Color="' + ::interiorColor + '"'
ENDIF
IF ! empty( ::interiorPattern )
interiorPattern := 'ss:Pattern="' + ::interiorPattern + '"'
ENDIF
IF ! empty( ::interiorPatternColor )
interiorPatternColor := 'ss:PatternColor="' + ::interiorPatternColor + '"'
ENDIF
interior := ' <Interior ' + interiorColor + ' ' + interiorPattern + ' ' + interiorPatternColor + '/>' + HB_OsNewLine()
ENDIF
IF ! empty( ::numberFormat )
numberFormat := ' <NumberFormat ss:Format="' + ::numberFormat + '"/>' + HB_OsNewLine()
ELSE
numberFormat := ' <NumberFormat/>' + HB_OsNewLine()
ENDIF
xml := ' <Style ss:ID="' + ::id + '" ' + name + '>' + HB_OsNewLine()
IF ::useAlignment
xml += ' <Alignment ' + valign + ' ' + halign + ' ' + rotate + ' ' + shrinktofit + ' ' + wraptext + ' ' + verticaltext + '/>' + HB_OsNewLine()
ENDIF
IF ::useBorder
xml += borders
ENDIF
IF ::useFont
xml += ' <Font ' +fontSize + ' ' + fontColor + ' ' + bold + ' ' + italic + ' ' + strikethrough + ' ' + underline + ' ' + shadow + ' ' + outline + ' ' + fontName + ' ' + fontFamily + '/>' + HB_OsNewLine()
ENDIF
IF ::useInterior
xml += interior
ENDIF
xml += numberFormat
xml += ' <Protection/>'+HB_OsNewLine()
xml += ' </Style>'+HB_OsNewLine()
RETURN( xml )
/*----------------------------------------------------------------------*/
METHOD ExcelWriterXML_Style:checkColor( color )
IF LEFT( color, 1 ) == "#"
RETURN color
ELSEIF hb_hPos( ::namedColorsIE, lower( color ) ) > 0
color := ::namedColorsIE[ lower( color ) ]
RETURN color
ELSE
RETURN ''
ENDIF
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD ExcelWriterXML_Style:setName( name )
::name := name
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD ExcelWriterXML_Style:alignVertical( valign )
IF ( valign != 'Automatic' .AND.;
valign != 'Top' .AND.;
valign != 'Bottom' .AND.;
valign != 'Center' )
RETURN NIL
ENDIF
::valign := valign
::useAlignment := .t.
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD ExcelWriterXML_Style:alignHorizontal( halign )
IF ( halign != 'Automatic' .AND.;
halign != 'Left' .AND.;
halign != 'Center' .AND.;
halign != 'Right' )
halign := 'Automatic'
ENDIF
::halign := halign
::useAlignment := .t.
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD ExcelWriterXML_Style:alignRotate( rotate )
IF !HB_IsNumeric( rotate )
RETURN NIL
ENDIF
IF abs( rotate ) > 90
rotate := rotate % 90
ENDIF
::rotate := ALLTRIM( STR( rotate, 3 ) )
::useAlignment := .t.
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD ExcelWriterXML_Style:alignShrinktofit()
::shrinktofit := 1
::useAlignment := .t.
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD ExcelWriterXML_Style:alignVerticaltext()
::verticaltext := 1
::useAlignment := .t.
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD ExcelWriterXML_Style:alignWraptext()
::wraptext := 1
::useAlignment := .t.
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD ExcelWriterXML_Style:setFontSize( fontSize )
IF ! HB_IsNumeric( fontSize )
fontSize := 10
ENDIF
IF fontSize <= 0
fontSize := 10
ENDIF
::fontSize := fontSize
::useFont := .t.
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD ExcelWriterXML_Style:setFontColor( fontColor )
fontColor := ::checkColor( fontColor )
IF LEFT( fontColor,1 ) != "#"
fontColor := 'Automatic'
ENDIF
::fontColor := fontColor
::useFont := .t.
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD ExcelWriterXML_Style:setFontName( fontName )
IF fontname == NIL
fontname := 'Arial'
ENDIF
::fontName := fontName
::useFont := .t.
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD ExcelWriterXML_Style:setFontFamily( fontFamily )
IF fontFamily == NIL
fontFamily:= 'Swiss'
ENDIF
IF ( fontFamily != 'Automatic' .AND.;
fontFamily != 'Decorative' .AND.;
fontFamily != 'Modern' .AND.;
fontFamily != 'Roman' .AND.;
fontFamily != 'Script' .AND.;
fontFamily != 'Swiss' )
RETURN NIL
ENDIF
::fontFamily := fontFamily
::useFont := .t.
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD ExcelWriterXML_Style:setFontBold()
::bold := 1
::useFont := .t.
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD ExcelWriterXML_Style:setFontItalic()
::italic := 1
::useFont := .t.
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD ExcelWriterXML_Style:setFontStrikethrough()
::strikethrough := 1
::useFont := .t.
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD ExcelWriterXML_Style:setFontUnderline( uStyle )
IF uStyle == NIL
uStyle := 'Single'
ENDIF
IF ( uStyle != 'None' .AND.;
uStyle != 'Single' .AND.;
uStyle != 'Double' .AND.;
uStyle != 'SingleAccounting' .AND.;
uStyle != 'DoubleAccounting' )
RETURN NIL
ENDIF
::underline := uStyle
::useFont := .t.
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD ExcelWriterXML_Style:setFontShadow()
::shadow := 1
::useFont := .t.
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD ExcelWriterXML_Style:setFontOutline()
::outline := 1
::useFont := .t.
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD ExcelWriterXML_Style:border( position,weight,color,linestyle )
LOCAL tmp
IF position == NIL
position := 'All' // All, Left, Top, Right, Bottom, DiagonalLeft, DiagonalRight
ENDIF
IF weight == NIL
weight := '1' // 0—Hairline, 1—Thin, 2—Medium, 3—Thick
ENDIF
IF color == NIL
color := 'Automatic' // Automatic, 6-hexadecimal digit number IN "#rrggbb" format OR it can be any of the Microsoft® Internet Explorer named colors
ENDIF
IF linestyle == NIL
linestyle := 'Continuous' // None, Continuous, Dash, Dot, DashDot, DashDotDot, SlantDashDot, Double
ENDIF
IF ( position != 'All' .AND.;
position != 'Left' .AND.;
position != 'Top' .AND.;
position != 'Right' .AND.;
position != 'Bottom' .AND.;
position != 'DiagonalLeft' .AND.;
position != 'DiagonalRight' )
position := 'All'
ENDIF
IF HB_IsNumeric( weight )
IF abs( weight ) > 3
weight := 3
ENDIF
ELSE
weight := 1
ENDIF
color:= ::checkColor( color )
IF LEFT( color,1 ) != "#"
color := 'Automatic'
ENDIF
IF ( linestyle != 'None' .AND.;
linestyle != 'Continuous' .AND.;
linestyle != 'Dash' .AND.;
linestyle != 'Dot' .AND.;
linestyle != 'DashDot' .AND.;
linestyle != 'DashDotDot' .AND.;
linestyle != 'SlantDashDot' .AND.;
linestyle != 'Double' )
linestyle:= 'Continuous'
ENDIF
tmp := { ;
'LineStyle' => linestyle,;
'Color' => color, ;
'Weight' => weight }
IF position == 'Top' .OR. position == 'All'
::borderTop := tmp
ENDIF
IF position == 'Bottom' .OR. position == 'All'
::borderBottom := tmp
ENDIF
IF position == 'Left' .OR. position == 'All'
::borderLeft := tmp
ENDIF
IF position == 'Right' .OR. position == 'All'
::borderRight := tmp
ENDIF
IF position == 'DiagonalLeft'
::borderDL := tmp
ENDIF
IF position == 'DiagonalRight'
::borderDR := tmp
ENDIF
::useBorder := .t.
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD ExcelWriterXML_Style:bgColor( color, pattern, patternColor )
IF color == NIL
color := 'Yellow'
ENDIF
IF pattern == NIL
pattern := 'Solid'
ENDIF
color := ::checkColor( color )
IF LEFT( color,1 ) != "#"
color := 'Yellow'
ENDIF
::interiorColor := color
IF pattern != 'None'
::bgPattern( pattern, patternColor )
ENDIF
::useInterior:= .t.
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD ExcelWriterXML_Style:bgPattern( pattern, color )
IF pattern == NIL
pattern := 'None'
ENDIF
IF ( pattern != 'None' .AND.;
pattern != 'Solid' .AND.;
pattern != 'Gray75' .AND.;
pattern != 'Gray50' .AND.;
pattern != 'Gray25' .AND.;
pattern != 'Gray125' .AND.;
pattern != 'Gray0625' .AND.;
pattern != 'HorzStripe' .AND.;
pattern != 'VertStripe' .AND.;
pattern != 'ReverseDiagStripe' .AND.;
pattern != 'DiagStripe' .AND.;
pattern != 'DiagCross' .AND.;
pattern != 'ThickDiagCross' .AND.;
pattern != 'ThinHorzStripe' .AND.;
pattern != 'ThinVertStripe' .AND.;
pattern != 'ThinReverseDiagStripe' .AND.;
pattern != 'ThinDiagStripe' .AND.;
pattern != 'ThinHorzCross' .AND.;
pattern != 'ThinDiagCross' )
pattern:= 'None'
ENDIF
::interiorPattern := pattern
IF color != NIL
::bgPatternColor( color )
ENDIF
::useInterior := .t.
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD ExcelWriterXML_Style:bgPatternColor( color )
IF color == NIL
color := 'Yellow'
ENDIF
IF color != 'Automatic'
color := ::checkColor( color )
IF LEFT( color,1 ) != "#"
color := 'Automatic'
ENDIF
ENDIF
::interiorPatternColor := color
::useInterior := .t.
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD ExcelWriterXML_Style:setNumberFormat( formatString )
::numberFormat := formatString
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD ExcelWriterXML_Style:setNumberFormatDate()
::setNumberFormat( 'mm/dd/yy' )
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD ExcelWriterXML_Style:setNumberFormatTime()
::setNumberFormat( 'hh:mm:ss' )
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD ExcelWriterXML_Style:setNumberFormatDatetime()
::setNumberFormat( 'mm/dd/yy\ hh:mm:ss' )
RETURN NIL
/*----------------------------------------------------------------------*/
FUNCTION getColorIE()
LOCAL hcolor:= { => }
hcolor[ 'aliceblue' ] := '#F0F8FF'
hcolor[ 'antiquewhite' ] := '#FAEBD7'
hcolor[ 'aqua' ] := '#00FFFF'
hcolor[ 'aquamarine' ] := '#7FFFD4'
hcolor[ 'azure' ] := '#F0FFFF'
hcolor[ 'beige' ] := '#F5F5DC'
hcolor[ 'bisque' ] := '#FFE4C4'
hcolor[ 'black' ] := '#000000'
hcolor[ 'blanchedalmond' ] := '#FFEBCD'
hcolor[ 'blue' ] := '#0000FF'
hcolor[ 'blueviolet' ] := '#8A2BE2'
hcolor[ 'brown' ] := '#A52A2A'
hcolor[ 'burlywood' ] := '#DEB887'
hcolor[ 'cadetblue' ] := '#5F9EA0'
hcolor[ 'chartreuse' ] := '#7FFF00'
hcolor[ 'chocolate' ] := '#D2691E'
hcolor[ 'coral' ] := '#FF7F50'
hcolor[ 'cornflowerblue' ] := '#6495ED'
hcolor[ 'cornsilk' ] := '#FFF8DC'
hcolor[ 'crimson' ] := '#DC143C'
hcolor[ 'cyan' ] := '#00FFFF'
hcolor[ 'darkblue' ] := '#00008B'
hcolor[ 'darkcyan' ] := '#008B8B'
hcolor[ 'darkgoldenrod' ] := '#B8860B'
hcolor[ 'darkgray' ] := '#A9A9A9'
hcolor[ 'darkgreen' ] := '#006400'
hcolor[ 'darkkhaki' ] := '#BDB76B'
hcolor[ 'darkmagenta' ] := '#8B008B'
hcolor[ 'darkolivegreen' ] := '#556B2F'
hcolor[ 'darkorange' ] := '#FF8C00'
hcolor[ 'darkorchid' ] := '#9932CC'
hcolor[ 'darkred' ] := '#8B0000'
hcolor[ 'darksalmon' ] := '#E9967A'
hcolor[ 'darkseagreen' ] := '#8FBC8F'
hcolor[ 'darkslateblue' ] := '#483D8B'
hcolor[ 'darkslategray' ] := '#2F4F4F'
hcolor[ 'darkturquoise' ] := '#00CED1'
hcolor[ 'darkviolet' ] := '#9400D3'
hcolor[ 'deeppink' ] := '#FF1493'
hcolor[ 'deepskyblue' ] := '#00BFFF'
hcolor[ 'dimgray' ] := '#696969'
hcolor[ 'dodgerblue' ] := '#1E90FF'
hcolor[ 'firebrick' ] := '#B22222'
hcolor[ 'floralwhite' ] := '#FFFAF0'
hcolor[ 'forestgreen' ] := '#228B22'
hcolor[ 'fuchsia' ] := '#FF00FF'
hcolor[ 'gainsboro' ] := '#DCDCDC'
hcolor[ 'ghostwhite' ] := '#F8F8FF'
hcolor[ 'gold' ] := '#FFD700'
hcolor[ 'goldenrod' ] := '#DAA520'
hcolor[ 'gray' ] := '#808080'
hcolor[ 'green' ] := '#008000'
hcolor[ 'greenyellow' ] := '#ADFF2F'
hcolor[ 'honeydew' ] := '#F0FFF0'
hcolor[ 'hotpink' ] := '#FF69B4'
hcolor[ 'indianred' ] := '#CD5C5C'
hcolor[ 'indigo' ] := '#4B0082'
hcolor[ 'ivory' ] := '#FFFFF0'
hcolor[ 'khaki' ] := '#F0E68C'
hcolor[ 'lavender' ] := '#E6E6FA'
hcolor[ 'lavenderblush' ] := '#FFF0F5'
hcolor[ 'lawngreen' ] := '#7CFC00'
hcolor[ 'lemonchiffon' ] := '#FFFACD'
hcolor[ 'lightblue' ] := '#ADD8E6'
hcolor[ 'lightcoral' ] := '#F08080'
hcolor[ 'lightcyan' ] := '#E0FFFF'
hcolor[ 'lightgoldenrodyellow' ] := '#FAFAD2'
hcolor[ 'lightgreen' ] := '#90EE90'
hcolor[ 'lightgrey' ] := '#D3D3D3'
hcolor[ 'lightpink' ] := '#FFB6C1'
hcolor[ 'lightsalmon' ] := '#FFA07A'
hcolor[ 'lightseagreen' ] := '#20B2AA'
hcolor[ 'lightskyblue' ] := '#87CEFA'
hcolor[ 'lightslategray' ] := '#778899'
hcolor[ 'lightsteelblue' ] := '#B0C4DE'
hcolor[ 'lightyellow' ] := '#FFFFE0'
hcolor[ 'lime' ] := '#00FF00'
hcolor[ 'limegreen' ] := '#32CD32'
hcolor[ 'linen' ] := '#FAF0E6'
hcolor[ 'magenta' ] := '#FF00FF'
hcolor[ 'maroon' ] := '#800000'
hcolor[ 'mediumaquamarine' ] := '#66CDAA'
hcolor[ 'mediumblue' ] := '#0000CD'
hcolor[ 'mediumorchid' ] := '#BA55D3'
hcolor[ 'mediumpurple' ] := '#9370DB'
hcolor[ 'mediumseagreen' ] := '#3CB371'
hcolor[ 'mediumslateblue' ] := '#7B68EE'
hcolor[ 'mediumspringgreen' ] := '#00FA9A'
hcolor[ 'mediumturquoise' ] := '#48D1CC'
hcolor[ 'mediumvioletred' ] := '#C71585'
hcolor[ 'midnightblue' ] := '#191970'
hcolor[ 'mintcream' ] := '#F5FFFA'
hcolor[ 'mistyrose' ] := '#FFE4E1'
hcolor[ 'moccasin' ] := '#FFE4B5'
hcolor[ 'navajowhite' ] := '#FFDEAD'
hcolor[ 'navy' ] := '#000080'
hcolor[ 'oldlace' ] := '#FDF5E6'
hcolor[ 'olive' ] := '#808000'
hcolor[ 'olivedrab' ] := '#6B8E23'
hcolor[ 'orange' ] := '#FFA500'
hcolor[ 'orangered' ] := '#FF4500'
hcolor[ 'orchid' ] := '#DA70D6'
hcolor[ 'palegoldenrod' ] := '#EEE8AA'
hcolor[ 'palegreen' ] := '#98FB98'
hcolor[ 'paleturquoise' ] := '#AFEEEE'
hcolor[ 'palevioletred' ] := '#DB7093'
hcolor[ 'papayawhip' ] := '#FFEFD5'
hcolor[ 'peachpuff' ] := '#FFDAB9'
hcolor[ 'peru' ] := '#CD853F'
hcolor[ 'pink' ] := '#FFC0CB'
hcolor[ 'plum' ] := '#DDA0DD'
hcolor[ 'powderblue' ] := '#B0E0E6'
hcolor[ 'purple' ] := '#800080'
hcolor[ 'red' ] := '#FF0000'
hcolor[ 'rosybrown' ] := '#BC8F8F'
hcolor[ 'royalblue' ] := '#4169E1'
hcolor[ 'saddlebrown' ] := '#8B4513'
hcolor[ 'salmon' ] := '#FA8072'
hcolor[ 'sandybrown' ] := '#F4A460'
hcolor[ 'seagreen' ] := '#2E8B57'
hcolor[ 'seashell' ] := '#FFF5EE'
hcolor[ 'sienna' ] := '#A0522D'
hcolor[ 'silver' ] := '#C0C0C0'
hcolor[ 'skyblue' ] := '#87CEEB'
hcolor[ 'slateblue' ] := '#6A5ACD'
hcolor[ 'slategray' ] := '#708090'
hcolor[ 'snow' ] := '#FFFAFA'
hcolor[ 'springgreen' ] := '#00FF7F'
hcolor[ 'steelblue' ] := '#4682B4'
hcolor[ 'tan' ] := '#D2B48C'
hcolor[ 'teal' ] := '#008080'
hcolor[ 'thistle' ] := '#D8BFD8'
hcolor[ 'tomato' ] := '#FF6347'
hcolor[ 'turquoise' ] := '#40E0D0'
hcolor[ 'violet' ] := '#EE82EE'
hcolor[ 'wheat' ] := '#F5DEB3'
hcolor[ 'white' ] := '#FFFFFF'
hcolor[ 'whitesmoke' ] := '#F5F5F5'
hcolor[ 'yellow' ] := '#FFFF00'
hcolor[ 'yellowgreen' ] := '#9ACD32'
RETURN hcolor
/*----------------------------------------------------------------------*/