chrisbra / Colorizer

color hex codes and color names
547 stars 30 forks source link

Has some issues with RGBA hex values #104

Closed oliv3r closed 9 months ago

oliv3r commented 9 months ago

I was super excited to give this a go; but while 1 color sort-of, showed up; I got the following error:

Colorizer: Some error occurred here:  Colorize: ['#\%(\x\{3}\|\x\{6}\|\x\{8\}\)\%(\>\|[-_]\)\@=', function('<SNR>145_PreviewColorHex'), 'colorizer_hex', 1, []]
Colorizer: Position: [0, 57, 21, 0]

on the following yaml

kibot:
  version: 1

global:
  environment:
    models_3d: '${KIPRJMOD}/packages3D'
  restore_project: true

preflight:
  run_drc: false
  run_erc: false
  set_text_variables:
    - name: 'VCS_PCB_DATE'
      command: 'date -d @$(git log -1 --format="%at" "${KIBOT_PCB_NAME}") -Idate'
    - name: 'VCS_PCB_TIMEDATE'
      command: 'date -d @$(git log -1 --format="%at" "${KIBOT_PCB_NAME}") -Iseconds'
    - name: 'VCS_PCB_HASH'
      command: 'git log -1 --format="%H" "${KIBOT_PCB_NAME}"'
      before: 'Git <'
      after: '>'
    - name: 'VCS_SCH_TIMEDATE'
      command: 'date -d @$(git log -1 --format="%at" "${KIBOT_SCH_NAME}") -Iseconds'
    - name: 'VCS_SCH_HASH'
      command: 'git log -1 --format="%H" "${KIBOT_SCH_NAME}"'
      before: 'Git <'
      after: '>'
    - name: 'VCS_TAG'
      command: 'git describe --always --dirty'
    - name: 'SHEETPATH' # Hack to avoid W082 Unknown sheetpath
      text: ''

outputs:
  - name: 'pdf_sch_print'
    comment: 'Exports the schematic to the most common exchange format. Suitable for printing.'
    type: 'pdf_sch_print'
    dir: 'outputs/pdf'
    options:
      all_pages: true
      background_color: false
      frame: true
      monochrome: false
  - name: 'pdf_pcb_print'
    comment: 'Exports the PCB to the most common exchange format. Suitable for printing.'
    type: 'pcb_print'
    dir: 'outputs/pdf'
    options:
      force_edge_cuts: true
      format: 'PDF'
      individual_page_scaling: false
      keep_temporal_files: false
      scaling: @KICAD_PDF_SCALING@
      pages:
        - sheet: 'PCB top'
          layers:
          - layer: 'F.Cu'
          - layer: 'F.Mask'
            color: '#14332440'
          - layer: 'F.SilkS'
            color: '#f2eda1ff'
        - sheet: 'Fabrication top'
          layers:
          - layer: 'F.Fab'
          - layer: 'F.Paste'
          - layer: 'F.Adhes'
          - layer: 'User.Comments'
        - sheet: 'Silkscreen top'
          layers:
          - layer: 'F.SilkS'
            color: '#00000000'
        - sheet: 'F.Cu'
          layers:
          - layer: 'F.Cu'
        - sheet: '%ln layer'
          repeat_for_layer: 'F.Cu'
          repeat_layers: 'inners'
          layers:
          - layer: 'F.Cu'
        - sheet: 'B.Cu'
          layers:
          - layer: 'B.Cu'
        - sheet: 'Silkscreen bottom'
          layers:
          - layer: 'B.SilkS'
            color: '#00000000'
          mirror: true
        - sheet: 'Fabrication bottom'
          layers:
          - layer: 'B.Fab'
          - layer: 'B.Paste'
          - layer: 'B.Adhes'
          - layer: 'User.Comments'
          mirror: true
        - sheet: 'PCB bottom'
          layers:
          - layer: 'B.Cu'
          - layer: 'B.Mask'
            color: '#14332440'
          - layer: 'B.SilkS'
            color: '#e8b2a7ff'
          - layer: 'User.Comments'
          mirror: true
      plot_sheet_reference: true

...
definitions:
  KICAD_PDF_SCALING: 1.5
chrisbra commented 9 months ago

14332440'

That is parsed as an hex value, which if of course invalid.

oliv3r commented 9 months ago

@chrisbra where is the mistake you say? It's an #RRGGBBAA hex value, colorizer's regex seems to accept it x\{8\} no? Ignoring the Alpha part is fine for the preview of course.

chrisbra commented 9 months ago

you are right. And I just tested it. It works fine for me. Are you potentially using some yml plugin, that modified the iskeyword setting?

chrisbra commented 9 months ago

If you manually search using the pattern: #\%(\x\{3}\|\x\{6}\|\x\{8\}\)\%(\>\|[-_]\)\@= what exactly is matched/highlighted in line 57?

oliv3r commented 9 months ago

My file has changed since a bit, but here's what the regex copy/pasted into vim's search mode does.

image image

As for iskeyword, I see vim-polyglot is using it a lot; but here's all addons I currently use: https://gitlab.com/olliver/dotfiles/-/tree/master/.local/share/vim/pack?ref_type=heads

chrisbra commented 9 months ago

can you try with the vim-polyglot plugin disabled please? It contains a yaml syntax script, not sure if this would cause it. I'll check it

chrisbra commented 9 months ago

And I still cannot reproduce. What is on line 112, column 30 Plase?

oliv3r commented 9 months ago

The second screenshots should show it no? It's the highlighted line. It's the first character after the quote, e.g. the # marker

chrisbra commented 9 months ago

Hm, I still cannot reproduce with this specific value. Can you step through the code? Run:

:breakadd func *PreviewColorHex
:ColorHighlight

This should drop you into the internal debugger. Step through the code using n (See also :h :debug) and remember the line where it throws an error. Try to show the related variables using e.g. :echo var.

That function is not that long: https://github.com/chrisbra/Colorizer/blob/2908e0683edd6a32065b4eff933623b67207ad17/autoload/Colorizer.vim#L987-L1023

oliv3r commented 9 months ago

I copied my original snippet to a file, and used that to debug, not sure which variable you'd like printed though :)

But E121: Undefined variable: s:colortable looks interesting?

function Colorizer#DoColor[73]..<SNR>158_PreviewColorHex
line 2: if <sid>IsInComment()
>n
function Colorizer#DoColor[73]..<SNR>158_PreviewColorHex
line 5: endif
>n
function Colorizer#DoColor[73]..<SNR>158_PreviewColorHex
line 6: let color = (a:match[0] == '#' ? a:match[1:] : a:match)
>n
function Colorizer#DoColor[73]..<SNR>158_PreviewColorHex
line 7: let pattern = color
>n
function Colorizer#DoColor[73]..<SNR>158_PreviewColorHex
line 8: if len(color) == 3
>n
function Colorizer#DoColor[73]..<SNR>158_PreviewColorHex
line 10: endif
>n
function Colorizer#DoColor[73]..<SNR>158_PreviewColorHex
line 11: if &t_Co == 8 && !s:HasGui()
>n
function Colorizer#DoColor[73]..<SNR>158_PreviewColorHex
line 21: endif
>n
function Colorizer#DoColor[73]..<SNR>158_PreviewColorHex
line 22: if len(split(pattern, '\zs')) == 8
>n
function Colorizer#DoColor[73]..<SNR>158_PreviewColorHex
line 24: let l = split(pattern, '..\zs')
>n
function Colorizer#DoColor[73]..<SNR>158_PreviewColorHex
line 25: call map(l, 'printf("%2d", "0x".v:val)')
>n
function Colorizer#DoColor[73]..<SNR>158_PreviewColorHex
line 26: let l[3] = string(str2float(l[3])/255)  " normalize to 0-1
>n
function Colorizer#DoColor[73]..<SNR>158_PreviewColorHex
line 27: let l = s:ApplyAlphaValue(l)
>n
Exception thrown: Vim(let):E121: Undefined variable: s:colortable
function Colorizer#DoColor[73]..<SNR>158_PreviewColorHex
line 27: End of function
>n
function Colorizer#DoColor
line 80: catch
>n
Exception caught: Vim(let):E121: Undefined variable: s:colortable
function Colorizer#DoColor
line 83: let error.=" Colorize: ". string(Pat)
>n
function Colorizer#DoColor
line 84: break
>n
Exception finished: Vim(let):E121: Undefined variable: s:colortable
:break made pending
function Colorizer#DoColor
line 86: finally
>n
function Colorizer#DoColor
line 87: if exists("s:extension")
>n
function Colorizer#DoColor
line 90: endif
>n
function Colorizer#DoColor
line 91: endtry
>n
:break resumed
function Colorizer#DoColor
line 93: endfor
>n
function Colorizer#DoColor
line 94: else
>n
function Colorizer#DoColor
line 98: for Pat in [ s:color_patterns_special.term, s:color_patterns_special.term_nroff ]
>n
function Colorizer#DoColor
line 99: let start = s:Reltime()
>n
function Colorizer#DoColor
line 100: if (s:CheckTimeout(Pat[0], a:force)) && !s:IsInComment()
>n
function Colorizer#DoColor
line 127: endif
>n
function Colorizer#DoColor
line 128: endfor
>n
function Colorizer#DoColor
line 98: for Pat in [ s:color_patterns_special.term, s:color_patterns_special.term_nroff ]
>n
function Colorizer#DoColor
line 99: let start = s:Reltime()
>n
function Colorizer#DoColor
line 100: if (s:CheckTimeout(Pat[0], a:force)) && !s:IsInComment()
>n
function Colorizer#DoColor
line 127: endif
>n
function Colorizer#DoColor
line 128: endfor
>n
function Colorizer#DoColor
line 98: for Pat in [ s:color_patterns_special.term, s:color_patterns_special.term_nroff ]
>n
function Colorizer#DoColor
line 128: endfor
>n
function Colorizer#DoColor
line 132: call s:SyntaxMatcher(s:color_syntax)
>n
function Colorizer#DoColor
line 133: if !exists("#FTColorizer#BufWinEnter#<buffer>") && empty(error)
>n
function Colorizer#DoColor
line 137: endif
>n
function Colorizer#DoColor
line 138: let s:relstop = s:Reltime(s:relstart)
>n
function Colorizer#DoColor
line 139: if !empty(error)
>n
function Colorizer#DoColor
line 141: call Colorizer#ColorOff()
>n
function Colorizer#DoColor
line 142: call s:Warn("Some error occurred here: ". error)
>n
Colorizer: Some error occurred here:  Colorize: ['#\%(\x\{3}\|\x\{6}\|\x\{8\}\)\%(\>\|[-_]\)\@=', function('<SNR>158_PreviewColorHex'), 'colorizer_hex', 1, []]
function Colorizer#DoColor
line 143: if exists("s:position")
>n
function Colorizer#DoColor
line 144: call s:Warn("Position: ". string(s:position))
>n
Colorizer: Position: [0, 57, 21, 0]
function Colorizer#DoColor
line 145: call matchadd('Color_Error', '\%'.s:position[1].'l\%'.s:position[2].'c.*\>')
>n
function Colorizer#DoColor
line 146: endif
chrisbra commented 9 months ago

oh, that is interesting. What Vim version is this? And what does :set t_Co? output?

oliv3r commented 9 months ago

t_Co=16777216

:version
VIM - Vi IMproved 9.1 (2024 Jan 02, compiled Jan 02 2024 18:36:25)
Compiled by Arch Linux
Huge version with GTK3 GUI.  Features included (+) or not (-):
+acl               +cryptv            +fork()            +modify_fname      +persistent_undo   -sun_workshop      +viminfo
+arabic            +cscope            +gettext           +mouse             +popupwin          +syntax            +virtualedit
+autocmd           +cursorbind        -hangul_input      +mouseshape        +postscript        +tag_binary        +visual
+autochdir         +cursorshape       +iconv             +mouse_dec         +printer           -tag_old_static    +visualextra
-autoservername    +dialog_con_gui    +insert_expand     +mouse_gpm         +profile           -tag_any_white     +vreplace
+balloon_eval      +diff              +ipv6              -mouse_jsbterm     -python            +tcl/dyn           +wildignore
+balloon_eval_term +digraphs          +job               +mouse_netterm     +python3/dyn       +termguicolors     +wildmenu
+browse            +dnd               +jumplist          +mouse_sgr         +quickfix          +terminal          +windows
++builtin_terms    -ebcdic            +keymap            -mouse_sysmouse    +reltime           +terminfo          +writebackup
+byte_offset       +emacs_tags        +lambda            +mouse_urxvt       +rightleft         +termresponse      +X11
+channel           +eval              +langmap           +mouse_xterm       +ruby/dyn          +textobjects       +xattr
+cindent           +ex_extra          +libcall           +multi_byte        +scrollbind        +textprop          -xfontset
+clientserver      +extra_search      +linebreak         +multi_lang        +signs             +timers            +xim
+clipboard         -farsi             +lispindent        -mzscheme          +smartindent       +title             -xpm
+cmdline_compl     +file_in_path      +listcmds          +netbeans_intg     -sodium            +toolbar           +xsmp_interact
+cmdline_hist      +find_in_path      +localmap          +num64             +sound             +user_commands     +xterm_clipboard
+cmdline_info      +float             +lua/dyn           +packages          +spell             +vartabs           -xterm_save
+comments          +folding           +menu              +path_extra        +startuptime       +vertsplit
+conceal           -footer            +mksession         +perl/dyn          +statusline        +vim9script        
chrisbra commented 9 months ago

Hm, I cannot see, why s:colortable wouldn't be defined. Anyway, I think I have fixed this issue now, by explicitly checking that the s:colortable var exists. Please check it.

oliv3r commented 9 months ago

Did a git pull, but no banana :( I closed all my other vim windows, no vim process was running, checked the git log, redid the :so vimbal, cause who knows`.

Entering Debug mode.  Type "cont" to continue.
function Colorizer#DoColor[73]..<SNR>159_PreviewColorHex
line 1: let s:position = getpos('.')
>n
function Colorizer#DoColor[73]..<SNR>159_PreviewColorHex
line 2: if <sid>IsInComment()
>
function Colorizer#DoColor[73]..<SNR>159_PreviewColorHex
line 5: endif
>
function Colorizer#DoColor[73]..<SNR>159_PreviewColorHex
line 6: let color = (a:match[0] == '#' ? a:match[1:] : a:match)
>
function Colorizer#DoColor[73]..<SNR>159_PreviewColorHex
line 7: let pattern = color
>
function Colorizer#DoColor[73]..<SNR>159_PreviewColorHex
line 8: if len(color) == 3
>
function Colorizer#DoColor[73]..<SNR>159_PreviewColorHex
line 10: endif
>
function Colorizer#DoColor[73]..<SNR>159_PreviewColorHex
line 11: if &t_Co == 8 && !s:HasGui()
>
function Colorizer#DoColor[73]..<SNR>159_PreviewColorHex
line 21: endif
>
function Colorizer#DoColor[73]..<SNR>159_PreviewColorHex
line 22: if len(split(pattern, '\zs')) == 8
>
function Colorizer#DoColor[73]..<SNR>159_PreviewColorHex
line 24: let l = split(pattern, '..\zs')
>
function Colorizer#DoColor[73]..<SNR>159_PreviewColorHex
line 25: call map(l, 'printf("%2d", "0x".v:val)')
>
function Colorizer#DoColor[73]..<SNR>159_PreviewColorHex
line 26: let l[3] = string(str2float(l[3])/255)  " normalize to 0-1
>
function Colorizer#DoColor[73]..<SNR>159_PreviewColorHex
line 27: let l = s:ApplyAlphaValue(l)
>
Exception thrown: Vim(let):E121: Undefined variable: s:colortable
function Colorizer#DoColor[73]..<SNR>159_PreviewColorHex
line 27: End of function
>
function Colorizer#DoColor
line 80: catch
>
Exception caught: Vim(let):E121: Undefined variable: s:colortable
function Colorizer#DoColor
line 83: let error.=" Colorize: ". string(Pat)
>
function Colorizer#DoColor
line 84: break
>
Exception finished: Vim(let):E121: Undefined variable: s:colortable
:break made pending
function Colorizer#DoColor
line 86: finally
>
function Colorizer#DoColor
line 87: if exists("s:extension")
>
function Colorizer#DoColor
line 90: endif
>
function Colorizer#DoColor
line 91: endtry
>
:break resumed
function Colorizer#DoColor
line 93: endfor
>
function Colorizer#DoColor
line 94: else
>
function Colorizer#DoColor
line 98: for Pat in [ s:color_patterns_special.term, s:color_patterns_special.term_nroff ]
>
function Colorizer#DoColor
line 99: let start = s:Reltime()
>
function Colorizer#DoColor
line 100: if (s:CheckTimeout(Pat[0], a:force)) && !s:IsInComment()
>
function Colorizer#DoColor
line 127: endif
>
function Colorizer#DoColor
line 128: endfor
>
function Colorizer#DoColor
line 98: for Pat in [ s:color_patterns_special.term, s:color_patterns_special.term_nroff ]
>
function Colorizer#DoColor
line 99: let start = s:Reltime()
>
function Colorizer#DoColor
line 100: if (s:CheckTimeout(Pat[0], a:force)) && !s:IsInComment()
>
function Colorizer#DoColor
line 127: endif
>
function Colorizer#DoColor
line 128: endfor
>
function Colorizer#DoColor
line 98: for Pat in [ s:color_patterns_special.term, s:color_patterns_special.term_nroff ]
>
function Colorizer#DoColor
line 128: endfor
>
function Colorizer#DoColor
line 132: call s:SyntaxMatcher(s:color_syntax)
>
function Colorizer#DoColor
line 133: if !exists("#FTColorizer#BufWinEnter#<buffer>") && empty(error)
>
function Colorizer#DoColor
line 137: endif
>
function Colorizer#DoColor
line 138: let s:relstop = s:Reltime(s:relstart)
>
function Colorizer#DoColor
line 139: if !empty(error)
>
function Colorizer#DoColor
line 141: call Colorizer#ColorOff()
>
function Colorizer#DoColor
line 142: call s:Warn("Some error occurred here: ". error)
>
Colorizer: Some error occurred here:  Colorize: ['#\%(\x\{3}\|\x\{6}\|\x\{8\}\)\%(\>\|[-_]\)\@=', function('<SNR>159_PreviewColorHex'), 'colorizer_hex', 1, []]
function Colorizer#DoColor
line 143: if exists("s:position")
>
function Colorizer#DoColor
line 144: call s:Warn("Position: ". string(s:position))
>
Colorizer: Position: [0, 57, 21, 0]
function Colorizer#DoColor
line 145: call matchadd('Color_Error', '\%'.s:position[1].'l\%'.s:position[2].'c.*\>')
>
function Colorizer#DoColor
line 146: endif
chrisbra commented 9 months ago
function Colorizer#DoColor[73]..<SNR>159_PreviewColorHex
line 27: let l = s:ApplyAlphaValue(l)
>
Exception thrown: Vim(let):E121: Undefined variable: s:colortable
function Colorizer#DoColor[73]..<SNR>159_PreviewColorHex

I would question that the git pull was successful. The ApplyAlphaValue() function looks like this: https://github.com/chrisbra/Colorizer/blob/7db0e0dd8adfccab35655f5b6db805caa0fef49a/autoload/Colorizer.vim#L2175-L2214

It should not be possible, that the s:colortable variable is undefined anymore. Can you please also check the output of :scriptnames and check, what scripts are loaded for Colorizer? And perhaps check:

:verbose :func <SNR>159_ApplyAlphaValue

and compare the function with the git function mentioned above.

You can also try to step into it, by :breakadd func *ApplyAlphaValue instead of the Preview function used before.

oliv3r commented 9 months ago

So this is interesting, I may have messed up my install, because it loads colorizer from /.config/vim/autoload/Colorizer.vim' instead of thepack` folder. I'll wipe things and try again.

So that was the issue, Initially, I did git clone https://github.com/chrisbra/Colorizer ~/.vim/pack/dist/start/colorizer, but for whatever reason I did the vimball install, but that messes things up of course, as it copies stuff into autoload, but a git pull, doesn't know and that gets loaded first, and then the git repo gets ignored. It works now!! Thank you!

chrisbra commented 9 months ago

ah, seems you did run the vimball install initially. you may need to clean up ~/.config/vim/autoload/Colorizer.vim, ~/.config/vim/plugin/ColorizerPlugin.vim and ~/.config/vim/doc/Colorizer.txt

chrisbra commented 9 months ago

ah perfect. Thanks for letting me know!