(Insert TipProposed template + minor manual clean) |
(rework and expand) |
||
Line 11: | Line 11: | ||
|category2= |
|category2= |
||
}} |
}} |
||
− | I recently found myself in want of a favicon. Not wanting to mess around with typical |
+ | I recently found myself in want of a favicon. Not wanting to mess around with typical WYSIWYG editors, I wrote a Bash script that generated a PPM file based on a data matrix corresponding to the individual pixels of the eventual favicon. By applying syntax highlightning to the data matrix, I effectively had a WYSIWYG display of the eventual image within Vim. |
The true favicon was a five color, 32x32 matrix, mixing the Swedish and German flags (that I indeed did some extensive editing on, trying a number of variations). The below gives a simplified version using a 7x5 Swedish flag with two colors. |
The true favicon was a five color, 32x32 matrix, mixing the Swedish and German flags (that I indeed did some extensive editing on, trying a number of variations). The below gives a simplified version using a 7x5 Swedish flag with two colors. |
||
Line 18: | Line 18: | ||
<pre> |
<pre> |
||
#!/bin/bash -u |
#!/bin/bash -u |
||
+ | # basic colors from rgb.txt |
||
− | |||
− | + | k = '0 0 0' |
|
− | + | b = '0 0 139' |
|
+ | g = '0 100 0' |
||
+ | c = '0 139 139' |
||
+ | r = '139 0 0' |
||
+ | m = '139 0 139' |
||
+ | y = '165 42 42' |
||
+ | w = '211 211 211' |
||
+ | K = '169 169 169' |
||
+ | B = '0 0 255' |
||
+ | G = '0 255 0' |
||
+ | C = '0 255 255' |
||
+ | R = '255 0 0' |
||
+ | M = '255 0 255' |
||
+ | Y = '255 255 0' |
||
+ | W = '255 255 255' |
||
function outputLine() { |
function outputLine() { |
||
Line 29: | Line 43: | ||
} |
} |
||
+ | # PNM header |
||
+ | # P1=PBM (B&W) P2=PGM (greyscale) P3=PMM (full-color) P4-P6=binary P7=PNM (any) |
||
echo 'P3' |
echo 'P3' |
||
+ | # with / height |
||
echo '7 5' |
echo '7 5' |
||
+ | # color depth |
||
echo '255' |
echo '255' |
||
Line 41: | Line 59: | ||
</pre> |
</pre> |
||
− | Syntax |
+ | Syntax highlighting to apply to the Vim buffer to make the matrix appear in solid colors: |
<pre> |
<pre> |
||
+ | if version < 600 |
||
− | + | syntax clear |
|
⚫ | |||
+ | elseif exists(b:current_syntax) |
||
⚫ | |||
+ | finish |
||
− | :hi Yellow guibg=#FFFF00 guifg=#FFFF00 |
||
+ | endif |
||
− | :hi Blue guibg=#006FFD guifg=#006FFD |
||
⚫ | |||
+ | syn region ppmOutputline |
||
− | Beware that I have mostly been a passive consumer of highlightning, and that the above is not necessarily the optimal way to achieve the wanted effect. |
||
+ | \ matchgroup=ppmKeyword |
||
+ | \ keepend |
||
+ | \ start=/^\s*outputline\>/ |
||
+ | \ end=/$/ |
||
+ | \ contains=ppmBlack,ppmDarkblue,ppmDarkgreen,ppmDarkcyan,ppmDarkred,ppmDarkmagenta, |
||
+ | \ppmBrown,ppmLightgrey,ppmDarkgrey,ppmBlue,ppmGreen,ppmCyan,ppmRed,ppmMagenta, |
||
+ | \ppmYellow,ppmWhite |
||
+ | |||
+ | syn match ppmBlack /\C k/ contained |
||
+ | syn match ppmDarkblue /\C b/ contained |
||
+ | syn match ppmDarkgreen /\C g/ contained |
||
+ | syn match ppmDarkcyan /\C c/ contained |
||
+ | syn match ppmDarkred /\C r/ contained |
||
+ | syn match ppmDarkmagenta /\C m/ contained |
||
+ | syn match ppmBrown /\C y/ contained |
||
+ | syn match ppmLightgrey /\C w/ contained |
||
+ | syn match ppmDarkgrey /\C K/ contained |
||
⚫ | |||
+ | syn match ppmGreen /\C G/ contained |
||
+ | syn match ppmRed /\C R/ contained |
||
+ | syn match ppmMagenta /\C M/ contained |
||
⚫ | |||
+ | syn match ppmWhite /\C W/ contained |
||
+ | |||
+ | hi ppmBlack ctermbg=Black ctermfg=LightGrey guibg=black guifg=white |
||
+ | hi ppmDarkblue ctermbg=DarkBlue ctermfg=LightGrey guibg=darkblue guifg=white |
||
+ | hi ppmDarkGreen ctermbg=DarkGreen ctermfg=LightGrey guibg=darkgreen guifg=white |
||
+ | hi ppmDarkCyan ctermbg=DarkCyan ctermfg=LightGrey guibg=darkcyan guifg=white |
||
+ | hi ppmDarkRed ctermbg=DarkRed ctermfg=LightGrey guibg=darkred guifg=white |
||
+ | hi ppmDarkMagenta ctermbg=DarkMagenta ctermfg=LightGrey guibg=darkmagenta guifg=white |
||
+ | hi ppmBrown ctermbg=Brown ctermfg=LightGrey guibg=brown guifg=white |
||
+ | hi ppmLightgrey ctermbg=LightGrey ctermfg=Black guibg=lightgrey guifg=black |
||
+ | hi ppmDarkgrey ctermbg=DarkGrey ctermfg=White guibg=darkgrey guifg=white |
||
+ | hi ppmBlue ctermbg=Blue ctermfg=White guibg=blue guifg=white |
||
+ | hi ppmCyan ctermbg=Cyan ctermfg=DarkGrey guibg=cyan guifg=white |
||
+ | hi ppmRed ctermbg=Red ctermfg=White guibg=red guifg=black |
||
+ | hi ppmMagenta ctermbg=Magenta ctermfg=White guibg=magenta guifg=black |
||
+ | hi ppmYellow ctermbg=Yellow ctermfg=DarkGrey guibg=yellow guifg=black |
||
+ | hi ppmWhite ctermbg=White ctermfg=DarkGrey guibg=white guifg=black |
||
+ | |||
+ | hi def link ppmKeyword Keyword |
||
+ | |||
⚫ | |||
A [http://www.aswedeingermany.de/50MetaInformation/50Favicon.html much larger write-up] with the full examples and some screen-shots is available. (I hope that the size justifies the external link.) The above should suffice to reproduce everything, however. |
A [http://www.aswedeingermany.de/50MetaInformation/50Favicon.html much larger write-up] with the full examples and some screen-shots is available. (I hope that the size justifies the external link.) The above should suffice to reproduce everything, however. |
||
==Comments== |
==Comments== |
||
+ | '''TODO:''' |
||
+ | * Include "sh" syntax for lines other than "outputline" |
||
+ | * Foreground: same as bg (for solid colors) or distinct from bg (to facilitate editing)? |
Revision as of 06:46, 27 August 2009
Proposed tip Please edit this page to improve it, or add your comments below (do not use the discussion page).
I recently found myself in want of a favicon. Not wanting to mess around with typical WYSIWYG editors, I wrote a Bash script that generated a PPM file based on a data matrix corresponding to the individual pixels of the eventual favicon. By applying syntax highlightning to the data matrix, I effectively had a WYSIWYG display of the eventual image within Vim.
The true favicon was a five color, 32x32 matrix, mixing the Swedish and German flags (that I indeed did some extensive editing on, trying a number of variations). The below gives a simplified version using a 7x5 Swedish flag with two colors.
Bash (output to be directed into a .ppm file):
#!/bin/bash -u # basic colors from rgb.txt k = '0 0 0' b = '0 0 139' g = '0 100 0' c = '0 139 139' r = '139 0 0' m = '139 0 139' y = '165 42 42' w = '211 211 211' K = '169 169 169' B = '0 0 255' G = '0 255 0' C = '0 255 255' R = '255 0 0' M = '255 0 255' Y = '255 255 0' W = '255 255 255' function outputLine() { for color in $* do eval echo "\$$color" done } # PNM header # P1=PBM (B&W) P2=PGM (greyscale) P3=PMM (full-color) P4-P6=binary P7=PNM (any) echo 'P3' # with / height echo '7 5' # color depth echo '255' # The below is the colored matrix. (Could be in a separate file.) outputLine B B Y B B B B outputLine B B Y B B B B outputLine Y Y Y Y Y Y Y outputLine B B Y B B B B outputLine B B Y B B B B
Syntax highlighting to apply to the Vim buffer to make the matrix appear in solid colors:
if version < 600 syntax clear elseif exists(b:current_syntax) finish endif syn region ppmOutputline \ matchgroup=ppmKeyword \ keepend \ start=/^\s*outputline\>/ \ end=/$/ \ contains=ppmBlack,ppmDarkblue,ppmDarkgreen,ppmDarkcyan,ppmDarkred,ppmDarkmagenta, \ppmBrown,ppmLightgrey,ppmDarkgrey,ppmBlue,ppmGreen,ppmCyan,ppmRed,ppmMagenta, \ppmYellow,ppmWhite syn match ppmBlack /\C k/ contained syn match ppmDarkblue /\C b/ contained syn match ppmDarkgreen /\C g/ contained syn match ppmDarkcyan /\C c/ contained syn match ppmDarkred /\C r/ contained syn match ppmDarkmagenta /\C m/ contained syn match ppmBrown /\C y/ contained syn match ppmLightgrey /\C w/ contained syn match ppmDarkgrey /\C K/ contained syn match ppmBlue /\C B/ contained syn match ppmGreen /\C G/ contained syn match ppmRed /\C R/ contained syn match ppmMagenta /\C M/ contained syn match ppmYellow /\C Y/ contained syn match ppmWhite /\C W/ contained hi ppmBlack ctermbg=Black ctermfg=LightGrey guibg=black guifg=white hi ppmDarkblue ctermbg=DarkBlue ctermfg=LightGrey guibg=darkblue guifg=white hi ppmDarkGreen ctermbg=DarkGreen ctermfg=LightGrey guibg=darkgreen guifg=white hi ppmDarkCyan ctermbg=DarkCyan ctermfg=LightGrey guibg=darkcyan guifg=white hi ppmDarkRed ctermbg=DarkRed ctermfg=LightGrey guibg=darkred guifg=white hi ppmDarkMagenta ctermbg=DarkMagenta ctermfg=LightGrey guibg=darkmagenta guifg=white hi ppmBrown ctermbg=Brown ctermfg=LightGrey guibg=brown guifg=white hi ppmLightgrey ctermbg=LightGrey ctermfg=Black guibg=lightgrey guifg=black hi ppmDarkgrey ctermbg=DarkGrey ctermfg=White guibg=darkgrey guifg=white hi ppmBlue ctermbg=Blue ctermfg=White guibg=blue guifg=white hi ppmCyan ctermbg=Cyan ctermfg=DarkGrey guibg=cyan guifg=white hi ppmRed ctermbg=Red ctermfg=White guibg=red guifg=black hi ppmMagenta ctermbg=Magenta ctermfg=White guibg=magenta guifg=black hi ppmYellow ctermbg=Yellow ctermfg=DarkGrey guibg=yellow guifg=black hi ppmWhite ctermbg=White ctermfg=DarkGrey guibg=white guifg=black hi def link ppmKeyword Keyword
A much larger write-up with the full examples and some screen-shots is available. (I hope that the size justifies the external link.) The above should suffice to reproduce everything, however.
Comments
TODO:
- Include "sh" syntax for lines other than "outputline"
- Foreground: same as bg (for solid colors) or distinct from bg (to facilitate editing)?