Files
harbour-core/extras/hbxlsxml/xlsxml_y.prg
Viktor Szakats 58faf91453 2016-01-14 19:17 UTC+0100 Viktor Szakats (vszakats users.noreply.github.com)
* *
    % remove brandings and homepage [1] from copyright header. Pass 1 - using script.
      [1] nobody has access to it anymore AFAIK - and it's also just
          a redirect since long
    ! update url in copyright header
    ; this should make the diff between 3.4 and 3.2 easier to manage
2016-01-14 19:18:17 +01:00

779 lines
24 KiB
Plaintext

/*
*
* Copyright 2011 Fausto Di Creddo Trautwein, ftwein@yahoo.com.br
*
* 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.txt. IF NOT, write TO
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA( OR visit the web site https://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
VAR id
VAR name
VAR useAlignment INIT .F.
VAR useFont INIT .F.
VAR useBorder INIT .F.
VAR useInterior INIT .F.
VAR valign
VAR halign
VAR rotate
VAR shrinktofit INIT 0
VAR verticaltext INIT 0
VAR wraptext INIT 0
VAR fontColor INIT "Automatic"
VAR fontName
VAR fontFamily
VAR fontSize
VAR bold
VAR italic
VAR underline
VAR strikethrough
VAR shadow
VAR outline
VAR borderTop INIT { => }
VAR borderBottom INIT { => }
VAR borderLeft INIT { => }
VAR borderRight INIT { => }
VAR borderDL INIT { => }
VAR borderDR INIT { => }
VAR interiorColor
VAR interiorPattern
VAR interiorPatternColor
VAR numberFormat
VAR formatErrors INIT { => }
VAR 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="' + hb_ntos( ::fontSize ) + '"'
ENDIF
ENDIF
IF ::useBorder
borders := " <Borders>" + hb_eol()
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="' + hb_ntos( pData[ "Weight" ] ) + '"', ;
"" )
borders += '<Border ss:Position="' + AllTrim( position + '" ' + bLinestyle + " " + bColor + " " + bWeight ) + "/>" + hb_eol()
NEXT
borders += "</Borders>" + hb_eol()
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 " + AllTrim( interiorColor + " " + interiorPattern + " " + interiorPatternColor ) + "/>" + hb_eol()
ENDIF
IF Empty( ::numberFormat )
numberFormat := " <NumberFormat/>" + hb_eol()
ELSE
numberFormat := ' <NumberFormat ss:Format="' + ::numberFormat + '"/>' + hb_eol()
ENDIF
xml := ' <Style ss:ID="' + ::id + '" ' + name + ">" + hb_eol()
IF ::useAlignment
xml += " <Alignment " + AllTrim( valign + " " + halign + " " + rotate + " " + shrinktofit + " " + wraptext + " " + verticaltext ) + "/>" + hb_eol()
ENDIF
IF ::useBorder
xml += borders
ENDIF
IF ::useFont
xml += " <Font " + AllTrim( fontSize + " " + fontColor + " " + bold + " " + italic + " " + strikethrough + " " + underline + " " + shadow + " " + outline + " " + fontName + " " + fontFamily ) + "/>" + hb_eol()
ENDIF
IF ::useInterior
xml += interior
ENDIF
xml += numberFormat
xml += " <Protection/>" + hb_eol()
xml += " </Style>" + hb_eol()
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 := hb_ntos( rotate )
::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 )
hb_default( @fontSize, 10 )
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 )
hb_default( @fontname, "Arial" )
::fontName := fontName
::useFont := .T.
RETURN NIL
METHOD ExcelWriterXML_Style:setFontFamily( fontFamily )
hb_default( @fontFamily, "Swiss" )
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 )
hb_default( @uStyle, "Single" )
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
hb_default( @position, "All" ) // All, Left, Top, Right, Bottom, DiagonalLeft, DiagonalRight
hb_default( @weight, 1 ) // 0-Hairline, 1-Thin, 2-Medium, 3-Thick
hb_default( @color, "Automatic" ) // Automatic, 6-hexadecimal digit number IN "#rrggbb" format OR it can be any of the MS Internet Explorer named colors
hb_default( @linestyle, "Continuous" ) // None, Continuous, Dash, Dot, DashDot, DashDotDot, SlantDashDot, Double
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 weight > 3 .OR. weight < 0
weight := 3
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 )
hb_default( @color, "Yellow" )
hb_default( @pattern, "Solid" )
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 )
hb_default( @pattern, "None" )
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 )
hb_default( @color, "Yellow" )
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
STATIC 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