From 8544864a963e9f9caafa3dad2708110ec6fc32ea Mon Sep 17 00:00:00 2001 From: RestorerZ Date: Sun, 9 Jan 2022 13:22:08 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=B4=D0=BE=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8?= =?UTF-8?q?=D0=B8=201.8.15?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Release/colo2css_v1815.vmb | 1488 ++++++++++++++++++++++++++++++++ Release/colo2css_v1815.vmb.zip | Bin 0 -> 14059 bytes Release/make_vba.txt | 4 + 3 files changed, 1492 insertions(+) create mode 100644 Release/colo2css_v1815.vmb create mode 100644 Release/colo2css_v1815.vmb.zip create mode 100644 Release/make_vba.txt diff --git a/Release/colo2css_v1815.vmb b/Release/colo2css_v1815.vmb new file mode 100644 index 0000000..0b011f9 --- /dev/null +++ b/Release/colo2css_v1815.vmb @@ -0,0 +1,1488 @@ +" Vimball Archiver by Charles E. Campbell +UseVimball +finish +autoload\colo2css.vim [[[1 +1025 +" colo2css.vim vim:ts=8:sts=2:sw=2:noet:sta +" Maintainer: Restorer, +" Last change: 09 Jan 2022 +" Version: 1.8.15 +" Description: преобразование цветовой схемы Vim в файл CSS +" converting a Vim color scheme to a CSS file +" URL: https://github.com/RestorerZ/Colo2CSS +" Copyright: © Restorer, 2022 +" License: MPL 2.0, http://mozilla.org/MPL/2.0/ + + + + + +let s:old_set = &cpoptions +set cpo&vim + +const s:NOT_RGB = + \ [['darkyellow','8B8B00'],['lightmagenta','FF8BFF'],['lightred','FF8B8B']] + +const s:WINSYS_COLO = { + \ 'SYS_SCROLLBAR':['Scrollbar', 'COLOR_SCROLLBAR', 0], + \ 'SYS_BACKGROUND':['Background', 'COLOR_BACKGROUND', 1], + \ 'SYS_DESKTOP':['Background', 'COLOR_DESKTOP', 1], + \ 'SYS_ACTIVECAPTION':['ActiveTitle', 'COLOR_ACTIVECAPTION', 2], + \ 'SYS_INACTIVECAPTION':['InactiveTitle', 'COLOR_INACTIVECAPTION', 3], + \ 'SYS_MENU':['Menu', 'COLOR_MENU', 4], + \ 'SYS_WINDOW':['Window', 'COLOR_WINDOW', 5], + \ 'SYS_WINDOWFRAME':['WindowFrame', 'COLOR_WINDOWFRAME', 6], + \ 'SYS_MENUTEXT':['MenuText', 'COLOR_MENUTEXT', 7], + \ 'SYS_WINDOWTEXT':['WindowText', 'COLOR_WINDOWTEXT', 8], + \ 'SYS_CAPTIONTEXT':['TitleText', 'COLOR_CAPTIONTEXT', 9], + \ 'SYS_ACTIVEBORDER':['ActiveBorder', 'COLOR_ACTIVEBORDER', 10], + \ 'SYS_INACTIVEBORDER':['InactiveBorder', 'COLOR_INACTIVEBORDER', 11], + \ 'SYS_APPWORKSPACE':['AppWorkspace', 'COLOR_APPWORKSPACE', 12], + \ 'SYS_HIGHLIGHT':['Hilight', 'COLOR_HIGHLIGHT', 13], + \ 'SYS_HIGHLIGHTTEXT':['HilightText', 'COLOR_HIGHLIGHTTEXT', 14], + \ 'SYS_3DFACE':['ButtonFace', 'COLOR_3DFACE', 15], + \ 'SYS_BTNFACE':['ButtonFace', 'COLOR_BTNFACE', 15], + \ 'SYS_3DSHADOW':['ButtonShadow', 'COLOR_3DSHADOW', 16], + \ 'SYS_BTNSHADOW':['ButtonShadow', 'COLOR_BTNSHADOW', 16], + \ 'SYS_GRAYTEXT':['GrayText', 'COLOR_GRAYTEXT', 17], + \ 'SYS_BTNTEXT':['ButtonText', 'COLOR_BTNTEXT', 18], + \ 'SYS_INACTIVECAPTIONTEXT':['InactiveTitleText', 'COLOR_INACTIVECAPTIONTEXT', 19], + \ 'SYS_3DHILIGHT':['ButtonHighlight', 'COLOR_3DHILIGHT', 20], + \ 'SYS_3DHIGHLIGHT':['ButtonHighlight', 'COLOR_3DHIGHLIGHT', 20], + \ 'SYS_BTNHILIGHT':['ButtonHighlight', 'COLOR_BTNHILIGHT', 20], + \ 'SYS_BTNHIGHLIGHT':['ButtonHighlight', 'COLOR_BTNHIGHLIGHT', 20], + \ 'SYS_3DDKSHADOW':['ButtonDkShadow', 'COLOR_3DDKSHADOW', 21], + \ 'SYS_3DLIGHT':['ButtonLight', 'COLOR_3DLIGHT', 22], + \ 'SYS_INFOTEXT':['InfoText', 'COLOR_INFOTEXT', 23], + \ 'SYS_INFOBK':['InfoWindow', 'COLOR_INFOBK', 24] + \ } + +const s:FNT_SIZE = ['h', 'w', 'W'] + +const s:HI_ARGS = ['gui', 'guifg', 'guibg', 'guisp', 'font'] + +const s:SPEC_ATTR = [['bold', 'wght'], ['italic', 'itlc'], + \ ['underline', 'undlne'], ['undercurl', 'undcrl'], + \ ['reverse', 'rvrs'], ['inverse', 'rvrs'], + \ ['strikethrough', 'skthro'], ['NONE', 'rset'], + \ ['standout', 'lum'], ['nocombine', 'ncomb']] + +const s:INIT_GRP = ['Normal', 'ColorColumn', 'Conceal', 'Cursor', 'CursorColumn', + \ 'CursorIM', 'CursorLine', 'CursorLineNr', 'DiffAdd', 'DiffChange', + \ 'DiffDelete', 'DiffText', 'Directory', 'EndOfBuffer', 'ErrorMsg', + \ 'FoldColumn', 'Folded', 'IncSearch', 'LineNr', 'LineNrAbove', + \ 'LineNrBelow', 'MatchParen', 'ModeMsg', 'MoreMsg', 'NonText', 'Pmenu', + \ 'PmenuSbar', 'PmenuSel', 'PmenuThumb', 'Question', 'QuickFixLine', + \ 'Search', 'SignColumn', 'SpecialKey', 'SpellBad', 'SpellCap', + \ 'SpellLocal', 'SpellRare', 'StatusLine', 'StatusLineNC', 'StatusLineTerm', + \ 'StatusLineTermNC', 'TabLine', 'TabLineFill', 'TabLineSel', 'Terminal', + \ 'Title', 'VertSplit', 'Visual', 'VisualNOS', 'WarningMsg', 'WildMenu', + \ 'lCursor'] + +let s:NME_TMP_BUF = 'Tmp_Colo2CSS' +lockvar s:NME_TMP_BUF +let s:is_norm = 0 +let s:bg_norm = '' +let s:fg_norm = '' +let s:old_val = {} + + + +function HiGroups2Buf() + set hidden lazyredraw nomore noshowcmd noruler nospell nowrapscan + set whichwrap& verbose=0 report=99999 shortmess=aAoOsStTWIcF + redir @u + silent highlight + redir END + execute 'edit ' .. s:NME_TMP_BUF + setlocal textwidth=0 + setlocal noautoindent noexpandtab formatoptions="" + setlocal noswapfile + setlocal buftype=nofile + put u + silent! global/ cleared$/delete + %substitute/xxx //e + silent! global/^\s\+\w\+/.-1join + silent! global/^\s*$/delete + call histdel("search", -1) +endfunction + +function GetEntry(bnr, lnr, cnr, offset, motion) + let @e = '' + if !setpos('.', [a:bnr, a:lnr, a:cnr, a:offset]) + execute 'normal "ey' .. a:motion + endif + return getreg('e') +endfunction + +function Dec2Hex(str) + let l:hexdig=[0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F'] + let l:hex='' + let l:num=str2nr(a:str, 10) + if !l:num + return 0 .. l:num + else + while l:num + let l:hex=l:hexdig[l:num%16] .. l:hex + let l:num/=16 + endwhile + endif + if 255 < str2nr(l:hex, 16) + return -1 + endif + return ((2 > len(l:hex)) ? 0 .. l:hex : l:hex) +endfunction + +function RGB2HSB(hexcolo) + if !empty(a:hexcolo) && (6 == len(a:hexcolo)) + let l:rr = str2nr(a:hexcolo[0:1], 16) + let l:gg = str2nr(a:hexcolo[2:3], 16) + let l:bb = str2nr(a:hexcolo[4:5], 16) + let l:max = max([l:rr, l:gg, l:bb]) + let l:min = min([l:rr, l:gg, l:bb]) + let l:rr /= 255.0 + let l:gg /= 255.0 + let l:bb /= 255.0 + let l:max /= 255.0 + let l:min /= 255.0 + let l:dlt = l:max - l:min + if l:max != l:min + if l:max == l:rr + let l:h = (l:gg - l:bb) / l:dlt + (l:gg < l:bb ? 6 : 0) + elseif l:max == l:gg + let l:h = (l:bb - l:rr) / l:dlt + 2 + elseif l:max == l:bb + let l:h = (l:rr - l:gg) / l:dlt + 4 + endif + let l:h = float2nr(ceil(l:h * 60)) + else + let l:h = 0 + endif + if 0 == l:max + let l:h = 0 + let l:s = 0 + else + let l:s = float2nr((l:dlt / l:max) * 100) + endif + let l:b = float2nr(l:max * 100) + return [l:h, l:s, l:b] + else + return -1 + endif +endfunction + +function HSB2RGB(h, s, b) + if ((360 >= a:h) && (0 <= a:h)) && ((100 >= a:s) && (0 <= a:s)) + \ && ((100 >= a:b) && (0 <= a:b)) + if 0 == a:s + return [ + \ float2nr(ceil(a:b * 2.55)), + \ float2nr(ceil(a:b * 2.55)), + \ float2nr(ceil(a:b * 2.55)) + \ ] + endif + let l:max = a:b / 100.0 + let l:chrm = (a:s * a:b) / 10000.0 + let l:min = l:max - l:chrm + if 300 <= a:h + let l:hdrtv = (a:h - 360) / 60.0 + elseif 300 > a:h + let l:hdrtv = a:h / 60.0 + endif + let l:idx = float2nr(floor(l:hdrtv)) + if 0 == l:idx + let l:rr = l:max + let l:gg = l:min + l:hdrtv * l:chrm + let l:bb = l:min + elseif 1 == l:idx + let l:rr = l:min - (l:hdrtv - 2) * l:chrm + let l:gg = l:max + let l:bb = l:min + elseif 2 == l:idx + let l:rr = l:min + let l:gg = l:max + let l:bb = l:min + (l:hdrtv - 2) * l:chrm + elseif 3 == l:idx + let l:rr = l:min + let l:gg = l:min - (l:hdrtv - 4) * l:chrm + let l:bb = l:max + elseif 4 == l:idx + let l:rr = l:min + (l:hdrtv - 4) * l:chrm + let l:gg = l:min + let l:bb = l:max + else + let l:rr = l:max + let l:gg = l:min + let l:bb = l:min - l:hdrtv * l:chrm + endif + return [ + \ float2nr(ceil(l:rr * 255)), + \ float2nr(ceil(l:gg * 255)), + \ float2nr(ceil(l:bb * 255)) + \ ] + endif + return -1 +endfunction + +function BrightColo(hexcolo, prcnt, lord) + let l:hexcolo = '' + let l:colo = trim(a:hexcolo, '#', 1) + let l:prcnt = (100 < a:prcnt ? 100 : 0 > a:prcnt ? 0 : a:prcnt) + let l:hsb = RGB2HSB(l:colo) + if 'l' ==? a:lord + if 99 <= l:hsb[2] + let l:hsb[1] = l:hsb[1] - l:prcnt + else + let l:hsb[2] = l:hsb[2] + l:prcnt + endif + elseif 'd' ==? a:lord + if 1 >= l:hsb[2] + let l:hsb[1] += l:prcnt + else + let l:hsb[2] -= l:prcnt + endif + endif + let l:hsb[1] = (100 < l:hsb[1] ? 100 : 0 > l:hsb[1] ? 0 : l:hsb[1]) + let l:hsb[2] = (100 < l:hsb[2] ? 100 : 0 > l:hsb[2] ? 0 : l:hsb[2]) + let l:rgb = HSB2RGB(l:hsb[0], l:hsb[1], l:hsb[2]) + let @u = '' + for l:cc in l:rgb + let @u = Dec2Hex(l:cc) + if -1 == (@u+0) + return -1 + endif + let l:hexcolo = l:hexcolo .. @u + endfor + return '#' .. l:hexcolo +endfunction + +function ColoStr2ColoNum(colostr) + if !empty(a:colostr) + for l:nrgb in s:NOT_RGB + if a:colostr ==? l:nrgb[0] + return l:nrgb[1] + endif + endfor + if 8023562 <= v:versionlong && exists('v:colornames') + if has_key(v:colornames, tolower(a:colostr)) + return toupper(v:colornames[tolower(a:colostr)][1:]) + endif + endif + let l:rgbcolo = '' + if has('win32') + if 0 <= stridx(toupper(a:colostr), 'SYS_', 0) + let l:rgbcolo = system( +\ "powershell Get-ItemProperty -Path 'Registry::HKCU\\Control Panel\\Colors' -Name " +\ .. s:WINSYS_COLO[toupper(a:colostr)][0] .. " ^| Select-Object -ExpandProperty " +\ .. s:WINSYS_COLO[toupper(a:colostr)][0]) + elseif filereadable($VIMRUNTIME .. '/rgb.txt') + let l:rgbcolo = + \ system("powershell Select-String -Path " + \ .. $VIMRUNTIME .. "\\rgb.txt -Pattern " .. "'\\t" + \ .. a:colostr .. "$'" .. " ^| " + \ .. "Select-Object -ExpandProperty Line") + endif + elseif has('unix') + if filereadable($VIMRUNTIME .. '/rgb.txt') + let l:rgbcolo = + \ system('grep -i -h -w -e "[[:space:]]' ..a:colostr.. '$" ' + \ ..$VIMRUNTIME .. '/rgb.txt') + endif + endif + if !empty(l:rgbcolo) + let l:hexcolo = '' + let l:rgbcolo = matchstr(l:rgbcolo, '\d\{1,3}\s\+\d\{1,3}\s\+\d\{1,3}') + while !empty(l:rgbcolo) + let @u = '' + let @u = matchstr(l:rgbcolo, '^\d\{1,3}') + let l:rgbcolo = substitute(l:rgbcolo, @u .. '\s*', '', '') + let @u = Dec2Hex(@u) + if -1 ==(@u+0) + return -1 + endif + let l:hexcolo = l:hexcolo .. @u + endwhile + return l:hexcolo + endif + endif + return -1 +endfunction + +function GetColor(coloval) + if !empty(a:coloval) + if '#' == a:coloval[0:0] + return toupper(a:coloval) + elseif 'bg' == tolower(a:coloval) || 'backgound' == tolower(a:coloval) + return 'bg' + elseif 'fg' == tolower(a:coloval) || 'foreground' == tolower(a:coloval) + return 'fg' + elseif 'NONE' == toupper(a:coloval) + return 'NONE' + elseif 0 <= match(a:coloval, '\w\+') + let @u = '' + let @u = ColoStr2ColoNum(a:coloval) + if !empty(@u) && -1 != (@u+0) + return '#' .. @u + endif + endif + endif + return -1 +endfunction + +function! colo2css#GetInitFont() + let @u = '' + let @u = getfontname() + if empty(@u) + if !has('X11') + let @u = &guifont + else + let @u = &guifontset + endif + if !empty(@u) + let l:cmm = match(@u, '\w,') + if 0 < l:cmm + let @u = strpart(@u, 0, l:cmm) + endif + endif + endif + return getreg('u') +endfunction + +function ParseFont(fntval) + if !empty(a:fntval) + let l:fnt = {} + if 'NONE' ==? a:fntval + let l:hifnt = colo2css#GetInitFont() + else + let l:hifnt = a:fntval + endif + if has('gui_win32') + let l:hifnt = substitute(l:hifnt, '\', '', 'g') + let l:cln = stridx(l:hifnt, ':') + if 0 < l:cln + let l:fnt['fntname'] = tr(l:hifnt[0:l:cln-1], '_', ' ') + elseif 0 > l:cln + let l:fnt['fntname'] = tr(l:hifnt, '_', ' ') + endif + for l:fntsze in s:FNT_SIZE + let l:sze = + \ matchlist( + \ l:hifnt, '\C\(:'..l:fntsze..'\)\(\d\{1,}\.\{,1}\d\{}\)') + if !empty(l:sze) + if 'h' == l:fntsze + let l:fnt['fnthght'] = l:sze[2] + continue + elseif 'w' ==# l:fntsze + let l:fnt['fntwdth'] = l:sze[2] + continue + elseif 'W' ==# l:fntsze + let l:fnt['fntwght'] = l:sze[2] + endif + endif + endfor + if 0 < stridx(l:hifnt, ':b') + let l:fnt['fntbold'] = 1 + endif + if 0 < stridx(l:hifnt, ':i') + let l:fnt['fntitlc'] = 1 + endif + if 0 < stridx(l:hifnt, ':u') + let l:fnt['fntundr'] = 1 + endif + if 0 < stridx(l:hifnt, ':s') + let l:fnt['fntsout'] = 1 + endif + return l:fnt + elseif has('gui_gtk2') || has('gui_gtk3') + let l:hifnt = substitute(l:hifnt, '\', '', 'g') + let l:fnt['fntname'] = substitute(l:hifnt, '\s\+\d\+$', '', '') + let l:fnt['fnthght'] = trim(matchstr(l:hifnt, '\s\d\+$'), ' ', 1) + return l:fnt + elseif has('X11') + let l:hifnt = split(l:hifnt, '-') + if !empty(l:hifnt[1]) && '*' != l:hifnt[1] + let l:fnt['fntname'] = l:hifnt[1] + endif + if 'bold' ==? l:hifnt[2] + let l:fnt['fntbold'] = 1 + endif + if 'i' ==? l:hifnt[3] || 'o' ==? l:hifnt[3] + let l:fnt['fntitlc'] = 1 + endif + if !empty(l:hifnt[4]) && '0' != l:hifnt[4] && '*' != l:hifnt[4] + let l:fnt['fntwdth'] = l:hifnt[4] + endif + if !empty(l:hifnt[7]) && '[' != l:hifnt[7][0:0] && '*' != l:hifnt[7] + let l:fnt['fnthght'] = l:hifnt[7] + endif + return l:fnt + elseif has ('gui_mac') + let l:hifnt = tr(l:hifnt, '_', ' ') + let l:hifnt = substitute(l:hifnt, '\', '', 'g') + let l:cln = stridx(l:hifnt, ':') + if 0 < l:cln + let l:fnt['fntname'] = l:hifnt[0:l:cln-1] + elseif 0 > l:cln + let l:fnt['fntname'] = l:hifnt + endif + let l:sze = matchlist(l:fnt, '\C\(:' ..s:FNT_SIZE[0]..'\)\(\d\{1,}\)') + if !empty(l:sze) + let l:fnt['fnthght'] = l:sze[2] + endif + return l:fnt + endif + endif + return -1 +endfunction + +function ParseHiArgs(grplnr) + if !empty(a:grplnr) + let l:hiattr = {} + let l:str = getline(a:grplnr) + for l:hiarg in s:HI_ARGS + let @u = '' + let l:pos = matchend(l:str, l:hiarg .. '=') + if 0 <= l:pos + if 'gui' == l:hiarg + let @u = GetEntry(0, a:grplnr, l:pos+1, 0, 'E') + let l:idx = 0 + while !empty(@u) || l:idx < len(s:SPEC_ATTR) + if 0 <= (stridx(@u, s:SPEC_ATTR[l:idx][0])) + let l:hiattr[s:SPEC_ATTR[l:idx][1]] = 1 + let @u = + \ substitute(@u, s:SPEC_ATTR[l:idx][0]..'\%(,\|\s\)\=', '', '') + endif + let l:idx += 1 + endwhile + elseif 'guifg' == l:hiarg || 'guibg' == l:hiarg || 'guisp' == l:hiarg + let l:pos2 = match(l:str, '\%( gui\| font\|$\)', l:pos) + if 0 < l:pos2 + let @u = GetEntry(0, a:grplnr, l:pos+1, 0, (l:pos2-l:pos)..'l') + if !empty(@u) + let @u = GetColor(@u) + if !empty(@u) && -1 != (@u+0) + if 'guifg' == l:hiarg + let l:hiattr['fgco'] = getreg('u') + elseif 'guibg' == l:hiarg + let l:hiattr['bgco'] = getreg('u') + elseif 'guisp' == l:hiarg + let l:hiattr['spco'] = getreg('u') + endif + endif + endif + endif + elseif 'font' == l:hiarg + let @u = GetEntry(0, a:grplnr, l:pos+1, 0, 'g_') + if !empty(@u) + let l:fnt = ParseFont(@u) + if !empty(l:fnt) && type(0) != type(l:fnt) + let l:hiattr['font'] = l:fnt + endif + endif + endif + elseif s:is_norm && 'font' == l:hiarg + let @u = colo2css#GetInitFont() + if !empty(@u) + let l:fnt = ParseFont(@u) + if !empty(l:fnt) && type(0) != type(l:fnt) + let l:hiattr['font'] = l:fnt + endif + endif + endif + endfor + return l:hiattr + elseif s:is_norm + let l:hiattr = {'font':''} + return l:hiattr + else + return -1 + endif +endfunction + +function HiAttr2CssDecl(hiattrval) + if !empty(a:hiattrval) + let l:cssdecl = [] + let l:fnt = {} + if has_key(a:hiattrval, 'font') + let l:fnt = a:hiattrval['font'] + endif + if !empty(l:fnt) + if has_key(l:fnt, 'fntname') + call add(l:cssdecl, 'font-family: "'..l:fnt['fntname']..'", monospace;') + endif + if has_key(l:fnt, 'fnthght') + if has('gui_win32') || has('gui_gtk2') || has('gui_gtk3') || has('gui_mac') + call add(l:cssdecl, 'font-size: '..l:fnt['fnthght']..'pt;') + elseif has('X11') + call add(l:cssdecl, 'font-size: '..(l:fnt['fnthght']/10)..'pt;') + endif + endif + if has_key(l:fnt, 'fntwdt') + if has('X11') + call add(l:cssdecl, 'font-stretch: '..(tr(l:fnt['fntwdt'], ' ', '-'))..';') + endif + endif + if has_key(l:fnt, 'fntwght') + call add(l:cssdecl, 'font-weight: '..l:fnt['fntwght']..';') + endif + if get(l:fnt, 'fntbold') + let l:idx = match(l:cssdecl, 'font-weight') + if 0 <= l:idx + let l:cssdecl[l:idx] = 'font-weight: bold;' + else + call add(l:cssdecl, 'font-weight: bold;') + endif + endif + if get(l:fnt, 'fntitlc') + call add(l:cssdecl, 'font-style: italic;') + endif + elseif s:is_norm + call add(l:cssdecl, 'font-family: monospace;') + endif + if get(a:hiattrval, 'wght') + let l:idx = match(l:cssdecl, 'font-weight') + if 0 <= l:idx + if 0 > match(l:cssdecl[l:idx], 'bold') + let l:cssdecl[l:idx] = 'font-weight: bold;' + endif + else + call add(l:cssdecl, 'font-weight: bold;') + endif + endif + if get(a:hiattrval, 'itlc') + let l:idx = match(l:cssdecl, 'font-style:') + if 0 <= l:idx + if 0 > match(l:cssdecl[l:idx], 'italic') + let l:cssdecl[l:idx] = 'font-style: italic;' + endif + else + call add(l:cssdecl, 'font-style: italic;') + endif + endif + if has_key(a:hiattrval, 'bgco') + let l:bgc = get(a:hiattrval, 'bgco') + if 'NONE' ==? l:bgc && !s:is_norm + call add(l:cssdecl, 'background-color: transparent;') + elseif 'bg' ==? l:bgc && !s:is_norm + if '' != s:bg_norm + call add(l:cssdecl, 'background-color: '..s:bg_norm..';') + else + return -1 + endif + elseif 'fg' ==? l:bgc && !s:is_norm + if '' != s:fg_norm + call add(l:cssdecl, 'background-color: '..s:fg_norm..';') + else + return -1 + endif + else + call add(l:cssdecl, 'background-color: '..l:bgc..';') + let s:bg_norm = s:is_norm ? l:bgc : s:bg_norm + endif + elseif s:is_norm + call add(l:cssdecl, 'background-color: transparent;') + let s:bg_norm = '#FFFFFF' + endif + if has_key(a:hiattrval, 'fgco') + let l:fgc = get(a:hiattrval, 'fgco') + if 'NONE' ==? l:fgc && !s:is_norm + call add(l:cssdecl, 'color: inherit;') + elseif 'bg' ==? l:fgc && !s:is_norm + if '' != s:bg_norm + call add(l:cssdecl, 'color: '..s:bg_norm..';') + else + return -1 + endif + elseif 'fg' ==? l:fgc && !s:is_norm + if '' != s:fg_norm + call add(l:cssdecl, 'color: '..s:fg_norm..';') + else + return -1 + endif + else + call add(l:cssdecl, 'color: '..l:fgc..';') + let s:fg_norm = s:is_norm ? l:fgc : s:fg_norm + endif + elseif s:is_norm + call add(l:cssdecl, 'color: inherit;') + let s:fg_norm = '#000000' + endif + if !empty(l:fnt) + if get(l:fnt, 'fntundr') + call add(l:cssdecl, 'text-decoration: underline;') + endif + if get(l:fnt, 'fntsout') + let l:idx = match(l:cssdecl, 'text-decoration') + if 0 <= l:idx + let l:cssdecl[l:idx] = trim(l:cssdecl[l:idx], ';', 2)..' line-throught;' + else + call add(l:cssdecl, 'text-decoration: line-throught;') + endif + endif + endif + if get(a:hiattrval, 'undlne') && !s:is_norm + let l:idx = match(l:cssdecl, 'text-decoration') + if 0 <= l:idx + if 0 > match(l:cssdecl[l:idx], 'underline') + let l:cssdecl[l:idx] = trim(l:cssdecl[l:idx], ';', 2)..' underline;' + endif + else + call add(l:cssdecl, 'text-decoration: underline;') + endif + endif + if get(a:hiattrval, 'skthro') && !s:is_norm + let l:idx = match(l:cssdecl, 'text-decoration') + if 0 <= l:idx + if 0 > match(l:cssdecl[l:idx], 'line-throught') + let l:cssdecl[l:idx] = trim(l:cssdecl[l:idx], ';', 2)..' line-throught;' + endif + else + call add(l:cssdecl, 'text-decoration: line-throught;') + endif + endif + if get(a:hiattrval, 'undcrl') && !s:is_norm + call add(l:cssdecl, + \ 'text-decoration: underline;' + \ .. ' -moz-text-decoration-line: underline; -moz-text-decoration-style: wavy;' + \ .. ' -webkit-text-decoration-line: underline; -webkit-text-decoration-style: wavy;' + \ .. ' text-decoration-line: underline; text-decoration-style: wavy;') + endif + if has_key(a:hiattrval, 'spco') && !s:is_norm + let l:tdc = get(a:hiattrval, 'spco') + if 'NONE' ==? l:tdc + call add(l:cssdecl, '-moz-text-decoration-color: currentColor;' + \ .. ' -webkit-text-decoration-color: currentColor;' + \ .. ' text-decoration-color: currentColor;') + elseif 'bg' ==? l:tdc + if '' != s:bg_norm + call add(l:cssdecl, + \ '-moz-text-decoration-color: '..s:bg_norm..';' + \ .. ' -webkit-text-decoration-color: '..s:bg_norm..';' + \ .. ' text-decoration-color: '..s:bg_norm..';') + else + return -1 + endif + elseif 'fg' ==? l:tdc + if '' != s:fg_norm + call add(l:cssdecl, + \ '-moz-text-decoration-color: '..s:fg_norm..';' + \ .. ' -webkit-text-decoration-color: '..s:fg_norm..';' + \ .. ' text-decoration-color: '..s:fg_norm..';') + else + return -1 + endif + else + call add(l:cssdecl, '-moz-text-decoration-color: '..l:tdc..';' + \ .. ' -webkit-text-decoration-color: '..l:tdc..';' + \ .. ' text-decoration-color: '..l:tdc..';') + endif + endif + if get(a:hiattrval, 'rvrs') && !s:is_norm + if '' != s:fg_norm && '' != s:bg_norm + let @i = -1 + let @f = '' + let @x = -1 + let @b = '' + let l:idx = match(l:cssdecl, '\BrightColo(@f, 20, 'l') + let @b = BrightColo(@b, 10, 'd') + else + let @F = @b + let @b = substitute(@f, '\c' .. @b, '', '') + let @f = substitute(@f, '\c' .. @b, '', '') + endif + if 0 <= @i + let l:cssdecl[@i] = 'color: ' .. @f .. ';' + else + call add(l:cssdecl, 'color: ' .. @f .. ';') + endif + if 0 <= @x + let l:cssdecl[@x] = 'background-color: ' .. @b .. ';' + else + call add(l:cssdecl, 'background-color: ' .. @b .. ';') + endif + else + return -1 + endif + endif + let l:cssdecl[0] = '{' .. l:cssdecl[0] + let l:cssdecl[-1] = l:cssdecl[-1] .. '}' + return l:cssdecl + endif + return -1 +endfunction + +function GetLnkGrp(grpname) + if !empty(a:grpname) + if !cursor(1,1) + let l:srchpat = 'links to\s\+' .. a:grpname .. '$' + let l:srchflgs = 'cnW' + let l:lnkgrpnm = '' + let l:lnr = 1 + while l:lnr + let l:fndlnr = search(l:srchpat, l:srchflgs, line('$')) + if l:fndlnr + let l:lnkgrpnm = GetEntry(0, l:fndlnr, 1, 0, 'iw') + if !empty(l:lnkgrpnm) + let @U = ' '..l:lnkgrpnm + endif + execute l:fndlnr'delete' + call GetLnkGrp(l:lnkgrpnm) + endif + let l:lnr = l:fndlnr + endwhile + return @U + endif + endif + return -1 +endfunction + +function HiGrpNme2CssSel(grpname) + if !empty(a:grpname) + let l:csssel = '' + let @u = '' + let l:csssel = GetLnkGrp(a:grpname) + if empty(l:csssel) + let l:csssel = s:is_norm ? '*, .'..a:grpname : '.'..a:grpname + elseif type(0) != type(l:csssel) + let l:csssel = substitute(l:csssel, '\%(\s\)\(\w\+\)', ', .\1', 'g') + let l:csssel = + \ s:is_norm ? '*, .'..a:grpname.. + \ l:csssel : + \ '.'..a:grpname.. + \ l:csssel + endif + return l:csssel + endif + return -1 +endfunction + +function HiGrpLn2CssRule(grpname, grplnr) + if !empty(a:grpname) && (a:grplnr || s:is_norm) + let l:cssrule = [] + let l:comgrp = a:grpname + let l:fndlnr = a:grplnr + call setpos('.', [0, l:fndlnr, 1, 0]) + while (search('links to ', 'cnW', l:fndlnr) == l:fndlnr) + let l:n = (matchlist(getline(l:fndlnr), '\(links to \)\(\w\+\)'))[2] + if l:comgrp ==? l:n + let l:pos = match(getline('.'), 'links to ') + call setpos('.', [0, l:fndlnr, l:pos, 0]) + normal d$ + break + endif + call setpos('.', [0, 1, 1, 0]) + let l:nfndlnr = search('^\<' ..l:n.. '\>', 'cW', line('$')) + if !l:nfndlnr + execute l:fndlnr'delete' + return -1 + endif + let l:comgrp = l:n + let l:fndlnr = l:nfndlnr + call setpos('.', [0, l:fndlnr, 1, 0]) + endwhile + let l:csssel = HiGrpNme2CssSel(l:comgrp) + if !empty(l:csssel) && type(0) != type(l:csssel) + call setpos('.', [0, 1, 1, 0]) + let l:fndlnr = search('^\<' ..l:comgrp.. '\>', 'cW', line('$')) + let l:hiattr = ParseHiArgs(l:fndlnr) + if !empty(l:hiattr) && type(0) != type(l:hiattr) + let l:cssdecl = HiAttr2CssDecl(l:hiattr) + if !empty(l:cssdecl) && type(0) != type(l:cssdecl) + call insert(l:cssrule, l:csssel) + let l:cssrule += l:cssdecl + endif + endif + endif + call deletebufline(s:NME_TMP_BUF, l:fndlnr) + return l:cssrule + endif + return -1 +endfunction + +function! colo2css#MainColo2Css(colofls, bgr, outdir, fnt) + if !empty(a:bgr) + let s:old_val = {'&bg':&bg} + execute('set background='..a:bgr) + endif + if !empty(a:colofls[0]) + if !empty(a:fnt) + let &guifont = a:fnt + if has('X11') + let &guifontset = a:fnt + endif + endif + set lines=999 columns=9999 eventignore=all + endif + for l:clch in a:colofls + if empty(l:clch) + if !has('gui') + exe "normal \" + echoerr "Работа подключаемого модуля возможна только в графической оболочке (ГИП, GUI)" + return -1 + endif + call extend(s:old_val, { + \ '&hidden':&hidden, + \ '&lazyredraw':&lazyredraw, + \ '&more':&more, + \ '&report':&report, + \ '&shortmess':&shortmess, + \ '&wrapscan':&wrapscan, + \ '&showcmd':&showcmd, + \ '&ruler':&ruler, + \ '&spell':&spell, + \ '&whichwrap':&whichwrap, + \ '&textwidth':&textwidth, + \ '&verbose':&verbose, + \ '@e':@e, + \ '@u':@u, + \ '@i':@i, + \ '@x':@x, + \ '@f':@f, + \ '@b':@b, + \ '@/':@/, + \ }) + if line("$") != 1 || getline(1) != "" + new + endif + augroup colo2css + autocmd BufWipeout Tmp_Colo2CSS callCleanUp(s:old_val) + \ | delfunction CleanUp + augroup END + else + highlight clear Normal + highlight clear + syntax reset + syntax clear + execute('silent colorscheme ' .. l:clch) + endif + call HiGroups2Buf() + if bufexists(s:NME_TMP_BUF) + let l:cssentries = [] + let s:is_norm = 1 + for l:grpname in s:INIT_GRP + call setpos('.', [0, 1, 1, 0]) + let l:fndlnr = search('^\<' ..l:grpname.. '\>', 'cW', line('$')) + if (!l:fndlnr && s:is_norm) || l:fndlnr + let l:cssrule = HiGrpLn2CssRule(l:grpname, l:fndlnr) + if !empty(l:cssrule) && type(0) != type(l:cssrule) + call add(l:cssentries, l:cssrule) + endif + endif + let s:is_norm = 0 + endfor + while getline(1) != "" + let l:fndlnr = line('.') + let l:grpname = GetEntry(0, l:fndlnr, 1, 0, 'iw') + if empty(l:grpname) + execute l:fndlnr'delete' + continue + else + let l:cssrule = HiGrpLn2CssRule(l:grpname, l:fndlnr) + if !empty(l:cssrule) && type(0) != type(l:cssrule) + call add(l:cssentries, l:cssrule) + endif + endif + endwhile + if !empty(l:cssentries) + let l:css_head = [] + if empty(l:clch) + let l:coloschm = (trim(execute('colorscheme'))) + if 0<=match(l:coloschm, '\cE121:') + let l:coloschm = 'unknown' + endif + else + let l:coloschm = l:clch + endif + call add(l:css_head, + \ '/* Этот файл CSS создан в программе Vim версии ' + \ .. v:version/100 .. '.' .. v:version%100 .. '.' + \ .. v:versionlong % float2nr(pow(10, (len(v:versionlong)-len(v:version)))) .. ' */') + call add(l:css_head, + \ '/* из файла цветовой схемы «' .. l:coloschm .. '» */') + call add(l:css_head, + \ '/* Для этого был использован подключаемый модуль «colo2css.vim» */') + call add(l:css_head, ' ') + call chdir(a:outdir) + let l:flnm = l:coloschm .. '_' .. &background .. '.css' + call writefile(map(l:css_head, 'v:val .. "\r"'), l:flnm) + for l:cssln in l:cssentries + call writefile(map(l:cssln, 'v:val .. "\r"'), l:flnm, 'a') + endfor + endif + execute 'bwipeout! ' s:NME_TMP_BUF + redraw! + else + return -1 + endif + endfor + if !empty(l:clch) + 0cquit! + endif +endfunction + +function CleanUp(oldval) + for [l:key, l:val] in items(a:oldval) + exe 'let ' .. l:key .. ' = ' .. '"' .. l:val .. '"' + endfor + unlet! s:NOT_RGB s:WINSYS_COLO s:FNT_SIZE s:SPEC_ATTR s:HI_ARGS s:INIT_GRP + unlet! s:NME_TMP_BUF s:is_norm s:bg_norm s:fg_norm s:old_val + delfunction HiGroups2Buf + delfunction GetEntry + delfunction GetLnkGrp + delfunction Dec2Hex + delfunction ColoStr2ColoNum + delfunction GetColor + delfunction ParseFont + delfunction ParseHiArgs + delfunction HiAttr2CssDecl + delfunction HiGrpNme2CssSel + delfunction HiGrpLn2CssRule + delfunction RGB2HSB + delfunction HSB2RGB + delfunction BrightColo + au! colo2css +endfunction + +let &cpo = s:old_set +unlet s:old_set + + +" This Source Code Form is subject to the terms of the Mozilla +" Public License, v. 2.0. If a copy of the MPL was not distributed +" with this file, You can obtain one at http://mozilla.org/MPL/2.0/ +" The Original Code is file colo2css.vim, https://github.com/RestorerZ/Colo2CSS +" The Initial Developer of the Original Code is Pavel Vitalievich Z. (also Restorer) +" All Rights Reserved. +plugin\LnchC2C.vim [[[1 +133 +" LnchC2C.vim vim:ts=8:sts=2:sw=2:noet:sta +" Maintainer: Restorer, +" Last change: 09 Jan 2022 +" Version: 1.4.9 +" Description: вызов функций командного файла Colo2Css.vim с требуемыми параметрами +" calling the functions of the Colo2Css.vim command file with the +" required parameters +" URL: https://github.com/RestorerZ/Colo2CSS +" Copyright: © Restorer, 2022 +" License: MPL 2.0, http://mozilla.org/MPL/2.0/ + + + + +let s:old_set = &cpoptions +set cpo&vim +if has('user_commands') && !has(':TOcss') + command! -nargs=* TOcss call Launch() +endif + +function GetArgs(c2cfl, ...) + let l:inargs = a:000[0] + let l:outargs = [[], '', '', ''] + for l:arg in l:inargs + if 'dark' ==# l:arg || 'light' ==# l:arg + let l:outargs[1] = l:arg + continue + endif + if l:arg->isdirectory() + let l:outargs[2] = l:arg + continue + endif + if 0 == index(l:inargs, l:arg) + if 'ALL' ==# l:arg + let l:outargs[0] += globpath(&runtimepath, 'colors/*.vim', 1, 1) + let l:outargs[0] += globpath(&packpath, 'pack/*/start/*/colors/*.vim', 1, 1) + let l:outargs[0] += globpath(&packpath, 'pack/*/opt/*/colors/*.vim', 1, 1) + continue + endif + let l:lstfls = split(l:arg, ',') + for l:clfl in l:lstfls + if 'vim' ==? l:clfl->fnamemodify(':e') + let l:outargs[0] += globpath(&runtimepath, 'colors/'..l:clfl, 1, 1) + let l:outargs[0] += globpath(&packpath, 'pack/*/start/*/colors/'..l:clfl, 1, 1) + let l:outargs[0] += globpath(&packpath, 'pack/*/opt/*/colors/'..l:clfl, 1, 1) + else + let l:outargs[0] += globpath(&runtimepath, 'colors/'..l:clfl..'.vim', 1, 1) + let l:outargs[0] += globpath(&packpath, 'pack/*/start/*/colors/'..l:clfl..'.vim', 1, 1) + let l:outargs[0] += globpath(&packpath, 'pack/*/opt/*/colors/'..l:clfl..'.vim', 1, 1) + endif + endfor + endif + endfor + if empty(l:outargs[0]) + let l:outargs[0] = [''] + else + call map(l:outargs[0], 'fnamemodify(v:val, ":t:r")') + call filter(l:outargs[0], '1 == count(l:outargs[0], v:val, v:true)') + if empty(l:outargs[3]) + let l:outargs[3] = colo2css#GetInitFont() + endif + endif + if empty(l:outargs[2]) + let l:wrtdir = getenv('HOME') + if v:null == l:wrtdir + let l:wrtdir = (getenv('MYVIMRC')->fnamemodify(':p:h')) + endif + if !isdirectory(l:wrtdir .. '/Colo2CSS') + if exists('*mkdir') && (mkdir(l:wrtdir .. '/Colo2CSS', '', '0o755')) + let l:outargs[2] = l:wrtdir .. '/Colo2CSS' + else + let l:outargs[2] = getenv('TEMP') + endif + else + let l:outargs[2] = l:wrtdir .. '/Colo2CSS' + endif + endif + return l:outargs +endfunction + +function! Launch(...) + let l:c2cfl = '' + let l:pths = split(&runtimepath, ',') + for l:pth in l:pths + if filereadable(l:pth .. '/autoload/colo2css.vim') + let l:c2cfl = l:pth .. '/autoload/colo2css.vim' + break + endif + endfor + if empty(l:c2cfl) + exe 'normal \' + echoerr "Не удалось найти файл colo2css.vim. Дальнейшая работа модуля невозможна" + echomsg "Для правильной работы подключаемого модуля файл colo2css.vim должен быть" + echomsg "скопирован в подкаталог autoload одного из каталогов," + echomsg "указанных в значении параметра 'runtimepath'" + return -1 + endif + let l:args = GetArgs(l:c2cfl, a:000) + if empty(l:args[0][0]) + silent runtime autoload/colo2css.vim + call colo2css#MainColo2Css(l:args[0], l:args[1], l:args[2], l:args[3]) + else + let l:cmdlns = ' -u NONE -U NONE -i NONE -N -n -S ' .. l:c2cfl + let l:cmdlnm = string(l:args[0])..', '..string(l:args[1]) + \ ..', '..string(l:args[2])..', '..string(l:args[3]) + let l:cmdlne = ')"' + if has('channel') && has('job') + let l:cmdlns = l:cmdlns .. ' -c "call colo2css#MainColo2Css(' + if has('win32') + let s:jb = job_start('gvim.exe' .. l:cmdlns .. l:cmdlnm .. l:cmdlne) + elseif has('unix') + let s:jb = job_start('vim -g' .. l:cmdlns .. l:cmdlnm .. l:cmdlne]) + endif + else + let l:cmdlns = l:cmdlns .. ' -c "call colo2css\#MainColo2Css(' + if has('win32') + silent execute('!start /min gvim.exe' .. l:cmdlns .. l:cmdlnm .. l:cmdlne) + elseif has('unix') + silent execute('!vim -g ' .. l:cmdlns .. l:cmdlnm .. l:cmdlne) + endif + endif + endif +endfunction +let &cpo = s:old_set +unlet s:old_set + + +" This Source Code Form is subject to the terms of the Mozilla +" Public License, v. 2.0. If a copy of the MPL was not distributed +" with this file, You can obtain one at http://mozilla.org/MPL/2.0/ +" The Original Code is file Lanuch.vim, https://github.com/RestorerZ/Colo2CSS +" The Initial Developer of the Original Code is Pavel Vitalievich Z. (also Restorer) +" All Rights Reserved. +doc\colo2css.rux [[[1 +160 +*ColorScheme2CSS.txt* Преобразование цветовых схем программы Vim в файлы CSS + + +Disclaimer on the text: +The English text is contained in the file colo2css.txt + + +Содержание + +1. Обзор подключаемого модуля |overview-colo2css| +2. Установка подключаемого модуля |installing-colo2css| +3. Использование подключаемого модуля |using-colo2css| +4. Обратная связь |feddback| +5. Лицензия и авторские права |license| + + +Преобразования цветовых схем программы «Редактор Vim» в готовые файлы CSS. + + +============================================================================== +1. Обзор подключаемого модуля *overview-colo2css* + +Данный подключаемый модуль предназначен для преобразования текущей цветовой +схемы программы «Редактор Vim» в готовый файл «каскадной таблицы стилей» +(Cascading Style Sheets, CSS). Файлы CSS, подготовленные этим подключаемым +модулем, соответствуют требованиям CSS Validation Service +(https://jigsaw.w3.org/css-validator/) и могут быть использованы для +подключения к документу (веб‐странице) HTML или XHTML. + +Подключаемый модуль может быть использован как для преобразования только +текущей цветовой схемы, так и для пакетной обработки нескольких файлов +цветовых схем редактора Vim. + +При конвертации цветовой схемы можно задать требуемый фон — тёмный или светлый +(dark or light). Также возможно указать каталог, куда будут записаны готовые +файлы CSS. + +Для работы этого подключаемого модуля требуется программа Vim версии 8.2 или +старше. Для преобразования цветовых схем используется вариант программы с +поддержкой графического интерфейса пользователя (ГИП, graphical user +interface, GUI). + +============================================================================== +2. Установка подключаемого модуля *installing-colo2css* + +Перед началом использования данного подключаемого модуля требуется разместить +поставляемые в его комплекте файлы в соответствующие каталоги. В комплект +поставки этого модуля входят следующие файлы: + +colo2css.vim — основной файл подключаемого модуля. Должен быть размещён в + подкаталоге «|autoload|» одного из каталогов, указанных в + значении параметра 'runtimepath'; +LnchC2C.vim — файл, предназначенный для запуска основного файла модуля. + Должен быть размещён в подкаталоге «|plugin|» одного из + каталогов, указанных в значении параметра 'runtimepath'; +colo2css.txt — файл документации на английском языке к этому модулю. Должен + быть размещён в подкаталоге «doc». См. |add-local-help|; +colo2css.rux — файл документации на русском языке к этому модулю. Должен быть + размещён в подкаталоге «doc». См. |add-local-help|. + +Если этот подключаемый модуль получен в виде готового пакета colo2css.vba.zip, +то установка указанных файлов будет выполнена автоматически. Подробнее об +использовании установочных пакетов смотрите раздел |pi_vimball.txt| и |packages|. + +При самостоятельной установке этого подключаемого модуля вручную, разместите +указанные выше файлы в соответствующие каталоги, и перезапустите программу Vim. + +============================================================================== +3. Использование подключаемого модуля *using-colo2css* + +После установки этого подключаемого модуля как описано в предыдущем параграфе, +модуль готов к использованию. Для его запуска необходимо в командной строке +редактора Vim набрать команду + +> + TOcss +< + +После нажатия клавиши будет создан файл CSS для текущей цветовой схемы +в подкаталоге «Colo2CSS» домашнего каталога пользователя. + +Чтобы использовать этот подключаемый модуль в расширенном режиме, необходимо +указать поддерживаемые этой командой аргументы. Аргументы команды разделяются +пробелом. + +Аргументы команды: + + :TOcss [[ALL | list_files] [dark | light] [outdir]] ~ +где + ALL Преобразовать все файлы цветовых схем, находящиеся в + подкаталоге «color» и расположенном в каталогах, указанных + в параметре 'runtimepath' и 'packpath'. + list_files Перечень файлов цветовых схем, которые требуется + преобразовать в файлы CSS. Если указано более одного + файла, то файлы разделяются символом запятой без пробелов. + В наименовании файлов не допускаются запятые и пробелы. + dark или light Фон, применяемый для цветовых схем при их загрузке в + редактор Vim и последующей конвертации. + outdir Каталог для готовых файлов CSS. Задаётся как абсолютный + маршрут. Каталог должен существовать и быть доступен для + записи. По умолчанию используется автоматически + создаваемый подкаталог «Colo2CSS» в каталоге пользователя. + +Примеры: + +> + TOcss light +< + +Будет выполнено преобразование текущей цветовой схемы с использованием +светлого фона. Результат будет сохранён в каталог ~/Colo2CSS (если этот +каталог отсутствует, то он будет создан автоматически в домашнем каталоге +пользователя). + +> + TOcss ALL d:\project\myhomepage\css +< + +Будет выполнено преобразование всех файлов цветовых схем, а готовые файлы CSS +сохранены в каталог «css», расположенный по маршруту d:\project\myhomepage. +Аргумент ALL указывается только прописными буквами. Каталог должен уже +существовать и быть доступен для записи. Если этого каталога нет, то результат +будет сохранён в каталоге C:\Users\\Colo2CSS. + +> + TOcss darkblue.vim,mustang,PaperColor.vim,desert dark e:\colorscheme +< + +Будет выполнено преобразование указанных файлов с включённым тёмным фоном, и +результат сохранён в «e:\colorscheme». Наименования файлов цветовых схем можно +указывать как с расширением «.vim», так и без него. Файлы отделяются друг от +друга символом запятой, пробелы и запятые в наименовании файлов не допустимы. +Между наименованием файла и символом запятой не должно быть пробела. + +============================================================================== +4. Обратная связь *feddback* + +Если есть пожелания, дополнения или замечания по работе этого подключаемого +модуля, связаться с автором можно по электронной почте: +mailto:restorers@users.sourceforge.net +Также можно оставить свои пожелания на веб‐странице этого подключаемого модуля: +https://github.com/RestorerZ/Colo2CSS +В этом же хранилище можно получить новые версии подключаемого модуля и +ознакомиться с его исходным кодом. + +============================================================================== +5. Лицензия *license* + +Для этого подключаемого модуля и всех его компонентов действует лицензия +Mozilla Public License, v. 2.0, http://mozilla.org/MPL/2.0/ +С текстом лицензии можно ознакомиться в файле LICENSE.txt, поставляемом с +данным подключаемым модулем или по указанной выше ссылке. Авторские права на +данный подключаемый модуль, его компоненты и документации к нему принадлежат +автору Павлу Витальевичу З. (псевдоним Restorer). Авторские права на сторонние +компоненты и их торговые марки, использованные в этом подключаемом модуле, +принадлежат их владельцам. + + + + vim:ft=help:tw=78:ts=8:noet:norl: +doc\colo2css.txt [[[1 +159 +*ColorScheme2CSS.txt* Converting color schemes of Vim to CSS files + + +Оговорка по тексту: +This is a machine translation of the Яandex service. I apologize for possible +mistakes. +Для тех, кто думает по‐русски (говорит и пишет) есть файл colo2css.rux + + +Table of contents + +1. Overview of the plugin |overview-colo2css| +2. Installing the plugin |installing-colo2css| +3. Using the plugin |using-colo2css| +4. Feedback |feddback| +5. License and Copyright |license| + + +Converting color schemes of the program Vim editor into ready-made CSS files. + + +============================================================================== +1. Overview of the plugin *overview-colo2css* + +This plugin is designed to convert the current color scheme of the program +Vim Editor into a ready-made Cascading Style Sheets (CSS) file. The CSS files +prepared by this plugin meet the requirements CSS Validation Service +(https://jigsaw.w3.org/css-validator/) and can be used to connect to an HTML +or XHTML document (web page). + +The plugin can be used both for converting only the current color scheme, and +for batch processing of several files of color schemes of the Vim editor. + +When converting a color scheme, you can set the desired background — dark or +light. It is also possible to specify the directory where the finished CSS +files will be written. + +This plugin requires a program Vim version 8.2 or older to work. To convert +color schemes, a variant of the program with support for a graphical user +interface (GUI) is used. + +============================================================================== +2. Installing the plugin *installing-colo2css* + +Before using this plugin, it is required to place the files supplied in its +package in the appropriate directories. The following files are included in +the package of this module: + +colo2css.vim — is the main file of the plugin. Must be placed in the + "|autoload|" subdirectory of one of the directories specified + in the value of the 'runtimepath' parameter. +LnchC2C.vim — file designed to run the main module file. Must be placed in the + "|plugin|" subdirectory of one of the directories specified in + the value of the 'runtimepath' parameter. +colo2css.txt - documentation file in English for this module. It should be + placed in the "doc" subdirectory. See |add-local-help|. +colo2css.rux - the documentation file in Russian for this module. Must be + placed in the "doc" subdirectory. See |add-local-help| + +If this plugin is received as a ready-made package colo2css.vba.zip, then the +installation of the specified files will be performed automatically. For more +information about using installation packages, see the section +|pi_vimball.txt| and |packages|. + +If you install this plugin manually yourself, place the above files in the +appropriate directories, and restart the Vim program. + +============================================================================== +3. Using the plugin *using-colo2css* + +After installing this plugin as described in the previous paragraph, the +module is ready for use. To run it, you need to type the command in the +command line of the Vim editor + +> + TOcss +< + +After pressing the key, a CSS file for the current color scheme will +be created in the "Colo2CSS" subdirectory of the user's home directory. + +To use this plugin in extended mode, you must specify the arguments supported +by this command. The command arguments are separated by a space. + +Command arguments: + + :TOcss [[ALL | list_files] [dark | light] [outdir]] ~ + +where + ALL Convert all color scheme files located in the "color" + subdirectory and located in the directories specified in + the 'runtimepath' and 'packpath' parameter. + list_files Is a list of color scheme files that you want to convert + to CSS files. If more than one file is specified, the + files are separated by a comma without spaces. Commas and + spaces are not allowed in the file names. + dark or light Background used for color schemes when they are loaded + into the Vim editor and then converted. + outdir Directory for ready-made CSS files. Set as an absolute + route. The directory must exist and be writable. By + default, the automatically created "Colo2CSS" subdirectory + in the user's directory is used. + +Examples: + +> + TOcss light +< + +The current color scheme will be converted using a light background. The +result will be saved to the ~/Colo2CSS directory (if this directory is +missing, it will be created automatically in the user's home directory). + +> + TOcss ALL d:\project\myhomepage\css +< + +All color scheme files will be converted, and the finished CSS files will be +saved to the "css" directory located along route d:\project\myhomepage. The +ALL argument is specified only in uppercase letters. The directory must +already exist and be writable. If this directory does not exist, the result +will be saved in the directory C:\Users\\Colo2CSS. + +> + TOcss darkblue.vim,mustang,PaperColor.vim,desert dark e:\colorscheme +< + +The conversion of the specified files with the dark background enabled will be +performed, and the result will be saved in "e:\colorscheme". The names of the +color scheme files can be specified with or without the ".vim" extension. +Files are separated from each other by a comma, spaces and commas in the file +names are not allowed. There should be no space between the file name and the +comma symbol. + +============================================================================== +4. Feedback *feddback* + +If you have any suggestions, additions or comments on the work of this +plugin, you can contact the author by e-mail: +mailto:restorers@users.sourceforge.net +You can also leave your wishes on the web page of this plugin: +https://github.com/RestorerZ/Colo2CSS +In the same repository, you can get new versions of the plugin and get +acquainted with its source code. + +============================================================================== +5. License *license* + +The Mozilla Public License, v. 2.0, http://mozilla.org/MPL/2.0/, is valid for +this plugin and all its components. +The license text can be found in the file LICENSE.txt, supplied with this +plugin or via the link above. The copyright for this plugin, its components +and documentation to it belong to the author Pavel Vitalyevich Z. (nikname +Restorer). The copyrights of third-party components and their trademarks used +in this plugin belong to their owners. + + + +vim:ft=help:tw=78:ts=8:noet:norl: diff --git a/Release/colo2css_v1815.vmb.zip b/Release/colo2css_v1815.vmb.zip new file mode 100644 index 0000000000000000000000000000000000000000..80372fa6aafa14134ed4023b70d96c2d03cdea8b GIT binary patch literal 14059 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