From: ellson Date: Mon, 20 Oct 2008 01:53:17 +0000 (+0000) Subject: save work X-Git-Tag: LAST_LIBGRAPH~32^2~3073 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=aae83dad55a0e8fe6c4b50d6d07f22dcee217e6c;p=graphviz save work --- diff --git a/lib/inkpot/Makefile.am b/lib/inkpot/Makefile.am index cdfeaa498..45e9b4961 100644 --- a/lib/inkpot/Makefile.am +++ b/lib/inkpot/Makefile.am @@ -4,14 +4,14 @@ pdfdir = $(pkgdatadir)/doc/pdf pkgconfigdir = $(libdir)/pkgconfig - pkginclude_HEADERS = inkpot.h lib_LTLIBRARIES = libinkpot.la pkgconfig_DATA = libinkpot.pc bin_PROGRAMS = inkpot noinst_HEADERS = inkpot_scheme.h inkpot_xlate.h inkpot_value.h \ - inkpot_lib_define.h inkpot_lib_value.h inkpot_lib_scheme.h + inkpot_lib_define.h inkpot_lib_value.h \ + inkpot_lib_scheme.h inkpot_lib_string.h noinst_LTLIBRARIES = libinkpot_C.la man_MANS = inkpot.3 inkpot.1 @@ -26,17 +26,22 @@ libinkpot_C_la_DEPENDENCIES = $(top_builddir)/lib/rbtree/librbtree_C.la libinkpot_la_SOURCES = $(libinkpot_C_la_SOURCES) libinkpot_la_LIBADD = $(libinkpot_C_la_LIBADD) -libinkpot_la_DEPENDENCIES = $(libinkpot_C_la_DEPENDENCIES) libinkpot_la_LDFLAGS = -version-info $(VERSION_INFO) -no-undefined -inkpot_scheme.o inkpot_scheme.lo: inkpot_lib_define.h inkpot_lib_scheme.h -inkpot_value.o inkpot_value.lo: inkpot_lib_define.h inkpot_lib_value.h +inkpot_scheme.o inkpot_scheme.lo: inkpot_lib_define.h \ + inkpot_lib_scheme.h \ + inkpot_lib_string.h + +inkpot_value.o inkpot_value.lo: inkpot_lib_define.h \ + inkpot_lib_value.h inkpot_lib_value.h: inkpot_lib_define.h inkpot_lib_scheme.h: inkpot_lib_define.h +inkpot_lib_string.h: inkpot_lib_define.h + inkpot_lib_define.h: inkpot_lib.tcl inkpot_lib_procs.tcl \ $(builddir)/inkpot_lib_tk.dat \ $(builddir)/inkpot_lib_svg.dat \ @@ -69,7 +74,7 @@ inkpot.3.pdf: inkpot.3 CLEANFILES = inkpot_lib_*.dat EXTRA_DIST = $(man_MANS) $(pdf_DATA) Makefile.old *.tcl data/* \ - inkpot_lib_define.h inkpot_lib_value.h inkpot_lib_scheme.h + inkpot_lib_define.h inkpot_lib_value.h inkpot_lib_scheme.h inkpot_lib_string.h DISTCLEANFILES = $(pdf_DATA) \ - inkpot_lib_define.h inkpot_lib_value.h inkpot_lib_scheme.h + inkpot_lib_define.h inkpot_lib_value.h inkpot_lib_scheme.h inkpot_lib_string.h diff --git a/lib/inkpot/inkpot_lib.tcl b/lib/inkpot/inkpot_lib.tcl index b8f5b4c44..50f2c1639 100755 --- a/lib/inkpot/inkpot_lib.tcl +++ b/lib/inkpot/inkpot_lib.tcl @@ -1,10 +1,8 @@ #!/usr/bin/tclsh set comments 1 -set target_line_length 60 -set indent " " -set preamble "/*\n * DO NOT EDIT !!\n *\n * The files:\n *\tinkpot_lib_define.h\n *\tinkpot_lib_value.h\n *\tinkpot_lib_scheme.h\n * are generated as a matched set.\n */\n" +set preamble "/*\n * DO NOT EDIT !!\n *\n * The files:\n *\tinkpot_lib_define.h\n *\tinkpot_lib_value.h\n *\tinkpot_lib_scheme.h\n *\tinkpot_lib_string.h\n * are generated as a matched set.\n */\n" if {! $argc} {exit} @@ -14,12 +12,14 @@ source inkpot_lib_procs.tcl # merge input data foreach {lib} $argv { set f [open $lib r] - array set COLORS [read $f [file size $lib]] + foreach {color value} [read $f [file size $lib]] { + set COLORS($color) $value + } close $f foreach {scheme coding} $COLORS() {break} array unset COLORS {} - lappend ALL_STRINGS($scheme) scheme + set ALL_STRINGS($scheme) {} set ALL_SCHEMES($scheme) {} foreach {color} [array names COLORS] { @@ -35,63 +35,96 @@ foreach {lib} $argv { switch [llength $color] { 1 { - lappend ALL_STRINGS($color) color - map CV $color $value $scheme + set icolor $color + set range 1 + set index 0 } 2 { foreach {icolor index} $color {break} - lappend ALL_STRINGS($icolor) icolor - map ICRIV $icolor [list 0 $index $value] $scheme + set range 0 } 3 { foreach {icolor range index} $color {break} - lappend ALL_STRINGS($icolor) icolor - map ICRIV $icolor [list $range $index $value] $scheme + if {$range == 1} { + puts stderr "Weird. Unexpected range==1. I guess that means I can't use 1 as a flag! $color $value $scheme" + exit + } } default { - puts stderr "wrong number of keys in: \"$color\"" + puts stderr "Weird! Too many fields in: \"$color\"" + exit } } + map C_RIV $icolor [list $range $index $value] $scheme + set ALL_STRINGS($icolor) {} + } + array unset COLORS +} + +#------------------------------------------------- crunch some data ---------- + +# find all unique color_schemeset_range and list index_value +# find all unique value and list color_schemeset_range_index +foreach {m2} [mapm2 C_RIV] { + foreach {RIV schemes} $m2 {break} + foreach {range index value} $RIV {break} + foreach {m1} [map2m1 C_RIV $RIV] { + lappend ALL_COLORSCHEMESRANGES([list $m1 $range]) [list $index $value] + lappend ALL_VALUES($value) [list $m1 $range $index] } } +#share rangesets between aliases such as grey/0-100 and gray/0-100 +foreach {m1_range} [array names ALL_COLORSCHEMESRANGES] { + set rangeset [concat [lsort -dictionary -unique $ALL_COLORSCHEMESRANGES($m1_range)]] + lappend ALL_RANGESETS($rangeset) $m1_range +} #------------------------------------------------- write inkpot_lib_value.h set f [open inkpot_lib_value.h w] puts $f $preamble + +proc format_color {color range index} { + switch $range { + 0 { + set color $color$index + } + 1 { + if {$index} { + puts stderr "Weird! Color with range == 1 but index != 0. $color/$range/$index" + exit + } + # otherwise just $color + } + default { + set color $color$range/$index + } + } + return $color +} + # generate TAB_VALUES_24 -tab_initialize $f {set SZT_VALUES} {map2m1 CV $value} \ +tab_initialize $f {set SZT_VALUES} {set comment} \ "unsigned char TAB_VALUES_24\[SZT_VALUES_24\] = {" set SZT_VALUES 0 -foreach {value} [lsort -dictionary [map2 CV]] { +foreach {value} [lsort -dictionary [array names ALL_VALUES]] { foreach {r g b} $value {break} tab_elem [format "0x%02x,0x%02x,0x%02x," $r $g $b] + set comment [list] + foreach {m1_range_index} [lsort -unique $ALL_VALUES($value)] { + foreach {m1 range index} $m1_range_index {break} + foreach {color schemes} $m1 {break} + lappend comment [list $schemes [format_color $color $range $index]] + } tab_row set ALL_VALUES_coded($value) $SZT_VALUES incr SZT_VALUES } tab_finalize "};\n" - -# generate NONAME_VALUES_24 -tab_initialize $f {set SZT_NONAME_VALUES} {map2m1 ICRIV $range_index_value} \ - "unsigned char TAB_NONAME_VALUES_24\[SZT_NONAME_VALUES_24\] = {" -set SZT_NONAME_VALUES 0 -foreach {range_index_value} [lsort -dictionary [map2 ICRIV]] { - foreach {range index value} $range_index_value {break} - if {! [info exists ALL_VALUES_coded($value)]} { - foreach {r g b} $value {break} - tab_elem [format "0x%02x,0x%02x,0x%02x," $r $g $b] - tab_row - set ALL_VALUES_coded($value) [expr $SZT_NONAME_VALUES + $SZT_VALUES] - incr SZT_NONAME_VALUES - } -} -tab_finalize "};\n" close $f - -#------------------------------------------------- write inkpot_lib_scheme.h -set f [open inkpot_lib_scheme.h w] +#------------------------------------------------- write inkpot_lib_string.h +set f [open inkpot_lib_string.h w] puts $f $preamble # generate TAB_STRINGS @@ -106,22 +139,7 @@ foreach {string} [lsort -ascii [array names ALL_STRINGS]] { incr len tab_elem "\"$string\\0\"" tab_row - foreach {usage} $ALL_STRINGS($string) { - switch $usage { - scheme { - set ALL_SCHEME_STRINGS_coded($string) $SZT_STRINGS - } - icolor { - set ALL_ICOLOR_STRINGS_coded($string) $SZT_STRINGS - } - color { - set ALL_COLOR_STRINGS_coded($string) $SZT_STRINGS - } - default { - puts stderr "Unknown usage $usage for string \"$string\"" - } - } - } + set ALL_STRINGS_coded($string) $SZT_STRINGS incr SZW_STRINGS if {$len > $SZL_STRINGS} {set SZL_STRINGS $len} incr SZT_STRINGS $len @@ -130,92 +148,126 @@ tab_finalize "};\n" # don't count the null in the length of the longest string incr SZL_STRINGS -1 +close $f +#------------------------------------------------- write inkpot_lib_scheme.h +set f [open inkpot_lib_scheme.h w] +puts $f $preamble -foreach {m2} [lsort -dictionary [mapm2 ICRIV]] { - foreach {RIV schemes} $m2 {break} - foreach {range index value} $RIV {break} - foreach {m1} [map2m1 ICRIV $RIV] { - foreach {icolor schemes} $m1 {break} - lappend ALL_RANGES([list $icolor $range $schemes]) $m2 - } + +# generate TAB_SCHEMES +set SZT_SCHEMES 0 +tab_initialize $f {set SZT_SCHEMES} {set scheme} \ + "inkpot_scheme_t TAB_SCHEMES\[SZT_SCHEMES\] = {" +foreach {scheme} [lsort -ascii [array names ALL_SCHEMES]] { + tab_elem $ALL_STRINGS_coded($scheme), + tab_row + set ALL_SCHEMES_coded($scheme) [list $SZT_SCHEMES [expr 1 << $SZT_SCHEMES]] + incr SZT_SCHEMES } +tab_finalize "};\n" + # generate TAB_INDEXES set SZT_INDEXES 0 set index -1 -tab_initialize $f {set SZT_INDEXES} {list [map2m1 ICRIV $RIV] $size} \ +tab_initialize $f {set SZT_INDEXES} {set comment} \ "IDX_VALUES_t TAB_INDEXES\[SZT_INDEXES\] = {" -foreach {icolor_range_schemes} [lsort -ascii [array names ALL_RANGES]] { +foreach {rangeset} [lsort -dictionary [array names ALL_RANGESETS]] { + set size [llength $rangeset] + if {$size == 1} { + #simple non-indexed color + foreach {index_value} $rangeset {break} + foreach {index value} $index_value {break} + if {$index} { + puts stderr "Weird! Non-zero index $index for non-indexed color" + exit + } + set ALL_SIMPLECOLORS($value) $ALL_RANGESETS($rangeset) + continue + } tab_row - foreach {m2} $ALL_RANGES($icolor_range_schemes) { - foreach {RIV schemes} $m2 {break} - foreach {range index value} $RIV {break} + set found 0 + set first_szt_index $SZT_INDEXES + foreach {index_value} $rangeset { + foreach {index value} $index_value {break} + if {! $found} { + set min_index $index + set max_index $index + incr found + } { + if {$index < $min_index} {set min_index $index} + if {$index > $max_index} {set max_index $index} + } tab_elem $ALL_VALUES_coded($value), incr SZT_INDEXES } - set size [llength $ALL_RANGES($icolor_range_schemes)] - set ALL_RANGES_coded($icolor_range_schemes) [list $SZT_INDEXES $size] + set last_index $index + set comment [list] + foreach {m1_range} $ALL_RANGESETS($rangeset) { + foreach {m1 range} $m1_range {break} + if {$range} { + if {$range != $size} { + puts stderr "Weird! Range doesn't match size. $m1 $range != $size" + exit + } + } { + set range $size + } + foreach {color schemes} $m1 {break} + lappend comment [list $schemes $color/$range/$min_index-$max_index] + set ALL_RANGES_coded([list $m1 $range]) [list $first_szt_index $size] + } } tab_finalize "};\n" # generate TAB_RANGES set SZT_RANGES 0 -set last_icolor "" -tab_initialize $f {set SZT_RANGES} {list $icolor $schemes $cnt} \ +set last_color "" +tab_initialize $f {set SZT_RANGES} {list $schemes $color $cnt} \ "inkpot_range_t TAB_RANGES\[SZT_RANGES\] = {" -foreach {icolor_range_schemes} [lsort -dictionary [array names ALL_RANGES_coded]] { - foreach {icolor range schemes} $icolor_range_schemes {break} - foreach {first_idx size} $ALL_RANGES_coded($icolor_range_schemes) {break} - if {! [string equal $last_icolor $icolor]} { - tab_row - set cnt 0 - set last_icolor $icolor +foreach {m1_range} [lsort -ascii [array names ALL_RANGES_coded]] { + foreach {m1 range} $m1_range {break} + foreach {color schemes} $m1 {break} + foreach {first_idx size} $ALL_RANGES_coded($m1_range) {break} + if {! [string equal $last_color $color]} { + tab_row + set cnt 0 + set last_color $color + } + set scheme_bits 0 + foreach {scheme} $schemes { + foreach {scheme_idx scheme_bit} $ALL_SCHEMES_coded($scheme) {break} + set scheme_bits [expr $scheme_bits | $scheme_bit] } - set size [llength $ALL_RANGES($icolor_range_schemes)] - tab_elem "{$size,$first_idx}," + tab_elem "{$size,$first_idx,[format {0x%x} $scheme_bits]}," incr SZT_RANGES incr cnt } tab_finalize "};\n" - -# generate TAB_ICOLORS -set SZT_ICOLORS 0 -set last_icolor "" -tab_initialize $f {set SZT_ICOLORS} {list $icolor $schemes} \ - "inkpot_icolor_t TAB_ICOLORS\[SZT_ICOLORS\] = {" -foreach {icolor_range_schemes} [lsort -dictionary [array names ALL_RANGES_coded]] { - foreach {icolor range schemes} $icolor_range_schemes {break} - foreach {first_idx size} $ALL_RANGES_coded($icolor_range_schemes) {break} - if {! [string equal $last_icolor $icolor]} { - tab_elem "{$ALL_ICOLOR_STRINGS_coded($icolor),$first_idx}," - tab_row - set last_icolor $icolor +#accumulate altsets for all non-indexed colors +if {0} { +foreach {color} [lsort -ascii [map1 C_RIV]] { + set altset [list] + foreach {m2} [lsort -dictionary [map1m2 C_RIV $color]] { + foreach {RIV schemes} $m2 {break} + foreach {range index value} $RIV {break} + if {$range != 1 || $index != 0} {continue} + lappend altset $m2 + } + if {[llength $altset]} { + lappend ALL_ALTSETS($altset) $color } - set ALL_ICOLORS_coded($color) $SZT_ICOLORS - incr SZT_ICOLORS -} -tab_finalize "};\n" - - -# generate TAB_SCHEMES -set SZT_SCHEMES 0 -tab_initialize $f {set SZT_SCHEMES} {set scheme} \ - "inkpot_scheme_t TAB_SCHEMES\[SZT_SCHEMES\] = {" -foreach {scheme} [lsort -ascii [array names ALL_SCHEMES]] { -# tab_elem $f "{$ALL_SCHEME_STRINGS_coded($scheme),$ALL_INDEX_SCHEMES_coded($scheme)}," - tab_elem "{$ALL_SCHEME_STRINGS_coded($scheme)}," - tab_row - set ALL_SCHEMES_coded($scheme) [list $SZT_SCHEMES [expr 1 << $SZT_SCHEMES]] - incr SZT_SCHEMES } -tab_finalize "};\n" +} { -foreach {color} [lsort -ascii [map1 CV]] { - set altset [lsort -dictionary [map1m2 CV $color]] +foreach {color} [lsort -ascii [map1 C_RIV]] { + set altset [lsort -dictionary [map1m2 C_RIV $color]] lappend ALL_ALTSETS($altset) $color } + +} # generate TAB_ALTS set SZT_ALTS 0 @@ -229,8 +281,10 @@ foreach {altset} [lsort -dictionary [array names ALL_ALTSETS]] { puts stderr "shouldn't happen - has to be at least one alt in an altset" } 1 { - foreach {value_schemes} $altset {break} - foreach {value schemes} $value_schemes {break} + foreach {m2} $altset {break} + foreach {RIV schemes} $m2 {break} + foreach {range index value} $RIV {break} + if {$range != 1} {continue} set scheme_bits 0 foreach {scheme} $schemes { foreach {scheme_idx scheme_bit} $ALL_SCHEMES_coded($scheme) {break} @@ -243,8 +297,10 @@ foreach {altset} [lsort -dictionary [array names ALL_ALTSETS]] { } default { set first_idx $SZT_ALTS - foreach {value_schemes} $altset { - foreach {value schemes} $value_schemes {break} + foreach {m2} $altset { + foreach {RIV schemes} $m2 {break} + foreach {range index value} $RIV {break} + if {$range != 1} {continue} set scheme_bits 0 foreach {scheme} $schemes { foreach {scheme_idx scheme_bit} $ALL_SCHEMES_coded($scheme) {break} @@ -262,13 +318,14 @@ foreach {altset} [lsort -dictionary [array names ALL_ALTSETS]] { } tab_finalize "};\n" - +print_first ALL_ALTS_coded + # generate TAB_NAMES set SZT_NAMES 0 tab_initialize $f {set SZT_NAMES} {set color} \ "inkpot_name_t TAB_NAMES\[SZT_NAMES\] = {" -foreach {color} [map1 CV] { - tab_elem "{$ALL_COLOR_STRINGS_coded($color),$ALL_ALTS_coded($color)}," +foreach {color} [map1 C_RIV] { + tab_elem "{$ALL_STRINGS_coded($color),$ALL_ALTS_coded($color)}," tab_row set ALL_NAMES_coded($color) $SZT_NAMES incr SZT_NAMES @@ -280,8 +337,8 @@ tab_finalize "};\n" set SZT_TO_NAMES 0 tab_initialize $f {set SZT_TO_NAMES} {set alias_set} \ "IDX_NAMES_t TAB_TO_NAMES\[SZT_TO_NAMES\] = {" -foreach {m2} [mapm2 CV] { - set alias_set [mapm21 CV $m2] +foreach {m2} [mapm2 C_RIV] { + set alias_set [mapm21 C_RIV $m2] foreach {value schemeset} $m2 {break} set ALL_TO_NAMES_coded($value) $SZT_TO_NAMES set first_idx $SZT_TO_NAMES @@ -300,31 +357,27 @@ set SZT_VALUE_TO 0 tab_initialize $f {set SZT_VALUE_TO} {set ALL_TO_NAMES_coded($value)} \ "IDX_TO_NAMES_t TAB_VALUE_TO\[SZT_VALUE_TO\] = {" # NB - this sort order must match TAB_VALUES -foreach {value} [lsort -dictionary [map2 CV]] { +foreach {value} [lsort -dictionary [map2 C_RIV]] { tab_elem $ALL_TO_NAMES_coded($value), tab_row incr SZT_VALUE_TO } tab_finalize "};\n" -close $f - +close $f #------------------------------------------------- write inkpot_lib_define.h set f [open inkpot_lib_define.h w] puts $f $preamble set SZT_VALUES_24 [expr 3*$SZT_VALUES] -set SZT_NONAME_VALUES_24 [expr 3*$SZT_NONAME_VALUES] -incr SZT_VALUES $SZT_NONAME_VALUES puts $f "\#define SZL_STRINGS $SZL_STRINGS" puts $f "\#define SZW_STRINGS $SZW_STRINGS" puts $f "" foreach {i} { STRINGS SCHEMES NAMES ALTS VALUES VALUE_TO TO_NAMES - ICOLORS INDEXES RANGES NONAME_VALUES - VALUES_24 NONAME_VALUES_24 + INDEXES RANGES VALUES_24 } { if {[set SZT_$i] < 256} { set int "unsigned char"