Add pinnacle#dump(), counterpart to pinnacle#highlight()
authorGreg Hurrell <greg@hurrell.net>
Tue, 4 Dec 2018 13:17:27 +0000 (14:17 +0100)
committerGreg Hurrell <greg@hurrell.net>
Tue, 4 Dec 2018 13:22:43 +0000 (14:22 +0100)
Oh what fun it is to program in Vimscript. That `filter` call needs to
use string comparison because "any string" == 0 despite the fact that
strings are truthy... The `filter` expression must return 0 or not-0.

Given that pinnacle#dump() will return a prefix key if applicable (term,
cterm or guiterm), make sure pinnacle#highlight() can consume
dictionaries with those keys.

README.md
autoload/pinnacle.vim
doc/pinnacle.txt

index 794e51bb5dbeb09144387ccd3f22c4f7b49a56d8..31dfb942a0f7c5b1b562d02fef13503dc942aa84 100644 (file)
--- a/README.md
+++ b/README.md
@@ -114,6 +114,11 @@ Other contributors that have submitted patches include (in alphabetical order):
 ## History<a name="pinnacle-history" href="#user-content-pinnacle-history"></a>
 
 
+### master (not yet released)<a name="pinnacle-master-not-yet-released" href="#user-content-pinnacle-master-not-yet-released"></a>
+
+- Added `pinnacle#dump()`.
+
+
 ### 0.3.1 (7 June 2017)<a name="pinnacle-031-7-june-2017" href="#user-content-pinnacle-031-7-june-2017"></a>
 
 - Fix another bug with augmentation of existing highlights.
index a495695df20f397e6b0a1a4343ad9f05d84513c6..4cdc44333514c292ea7f68440ad02585a5a1e920 100644 (file)
 "
 " # History
 "
+" ## master (not yet released)
+"
+" - Added `pinnacle#dump()`.
+"
 " ## 0.3.1 (7 June 2017)
 "
 " - Fix another bug with augmentation of existing highlights.
@@ -201,6 +205,27 @@ function! pinnacle#extract_component(group, component) abort
   return synIDattr(synIDtrans(hlID(a:group)), a:component)
 endfunction
 
+" Returns a dictionary representation of the specified highlight group.
+function! pinnacle#dump(highlight) abort
+  return filter({
+        \   'bg': pinnacle#extract_component(a:highlight, 'bg'),
+        \   'fg': pinnacle#extract_component(a:highlight, 'fg'),
+        \   s:prefix: join(
+        \     filter([
+        \       pinnacle#extract_component(a:highlight, 'bold') ? 'bold' : 0,
+        \       pinnacle#extract_component(a:highlight, 'inverse') ? 'inverse' : 0,
+        \       pinnacle#extract_component(a:highlight, 'italic') ? 'italic' : 0,
+        \       pinnacle#extract_component(a:highlight, 'reverse') ? 'reverse' : 0,
+        \       pinnacle#extract_component(a:highlight, 'standout') ? 'standout' : 0,
+        \       pinnacle#extract_component(a:highlight, 'undercurl') ? 'undercurl' : 0,
+        \       pinnacle#extract_component(a:highlight, 'underline') ? 'underline': 0
+        \     ], 'string(v:val) != "0"'),
+        \   ',')
+        \ }, 'v:val != ""')
+endfunction
+
+" Returns a string representation of a dictionary containing bg, fg, term, cterm
+" and guiterm entries.
 function! pinnacle#highlight(highlight) abort
   let l:result=[]
   if has_key(a:highlight, 'bg')
@@ -212,6 +237,12 @@ function! pinnacle#highlight(highlight) abort
   if has_key(a:highlight, 'term')
     call insert(l:result, s:prefix . '=' . a:highlight['term'])
   endif
+  if has_key(a:highlight, 'cterm')
+    call insert(l:result, s:prefix . '=' . a:highlight['cterm'])
+  endif
+  if has_key(a:highlight, 'guiterm')
+    call insert(l:result, s:prefix . '=' . a:highlight['guiterm'])
+  endif
   return join(l:result, ' ')
 endfunction
 
index 16b39017cd4866281c8d0529dd8aaaa91740b8df..9eff568b697aba2d3a66329208d29d6670f453dc 100644 (file)
@@ -117,6 +117,10 @@ order):
 
 HISTORY                                                       *pinnacle-history*
 
+master (not yet released) ~
+
+- Added `pinnacle#dump()`.
+
 0.3.1 (7 June 2017) ~
 
 - Fix another bug with augmentation of existing highlights.