diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..5a080d1 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,2 @@ +github: [tlhunter] +custom: https://www.paypal.me/phobosrising/5 diff --git a/.gitignore b/.gitignore index 75693ab..0ce3f6c 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ sessions/* .netrwhist tags tags-ja +local.vimrc +spell diff --git a/README.md b/README.md index 3b4c7e1..91a35bc 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ![Screenshot](./screenshot.png "Screenshot of this .vimrc in action") This Vim configuration is meant to make Vim feel more like an IDE than a simple console-based text editor. -I use it mostly under with MacVIM and Linux GVim though I occasionally run it directly in a terminal. +This configuration is optimized for use with GVim though it certainly works in the terminal as well. ## Installation @@ -14,7 +14,7 @@ You can run `git pull` inside of `~/.vim` if you'd ever like to grab the latest ```bash cd ~ -git clone git://github.com/tlhunter/vimrc.git .vim +git clone git@github.com:tlhunter/vimrc.git .vim ln -s ~/.vim/vimrc ~/.vimrc # Optional, needed for some VIM installations ``` @@ -30,7 +30,6 @@ wget https://github.com/tlhunter/vimrc/archive/master.zip * Edit many files at the same time * File Browser on left side of screen -* Functions, Variables, Classes on right * Move between files in center screen * View status of the current GIT repo, if applicable * Additional features when running under MacVIM @@ -38,7 +37,7 @@ wget https://github.com/tlhunter/vimrc/archive/master.zip ### Leader Key -As of `v0.2.0`, the Leader key is now bound to `Space` (used to be `Comma`) +- Space ### Switching between files (Buffers) @@ -55,7 +54,6 @@ As of `v0.2.0`, the Leader key is now bound to `Space` (used to be `Comma`) * Use `n` to toggle the file browser * Use `Ctrl P` to perform a recursive fuzzy filename search * Use `a` and type a phrase to search to search based on content within your files (quote and escape if needed) -* Use `A` to close the open ack search results at the bottom of the screen ### File Browser (NERDTree) @@ -68,29 +66,3 @@ As of `v0.2.0`, the Leader key is now bound to `Space` (used to be `Comma`) * Use `?` if you'd like some NERDTree documentation * Use `o` to open the selected file in a new buffer * Use `t` to open the selected file in a new tab - -### Tabs - -* Use `Cmd t` (or `Alt t` in Linux GVim) to open a new tab -* Use `Cmd w` (or `Alt w` in Linux GVim) to close the current tab -* Use `Cmd 1` to `Cmd 9` (or `Alt 1` to `Alt 9` in Linux GVim) to navigate to the specified tab - -### Themes (ColorSchemes) - -There is a very large collection of colorschemes in this repository. -Many of them can be seen [here](http://vimcolors.com/). -Set the scheme using `:colorscheme NAME`. - -* Use `x` to switch to a random theme. - -### Text Navigation - -Other than the myriad of built-in methods for navigating text... - -* Use `b` to highlight and jump to previous words -* Use `w` to highlight and jump to following words - -### Copying and Pasting between OS - -* Use `c` to copy the highlighted text into the OS clipboard -* Use `v` to paste the OS clipboard into the document diff --git a/autoload/pathogen.vim b/autoload/pathogen.vim deleted file mode 100644 index be68389..0000000 --- a/autoload/pathogen.vim +++ /dev/null @@ -1,230 +0,0 @@ -" pathogen.vim - path option manipulation -" Maintainer: Tim Pope -" Version: 2.0 - -" Install in ~/.vim/autoload (or ~\vimfiles\autoload). -" -" For management of individually installed plugins in ~/.vim/bundle (or -" ~\vimfiles\bundle), adding `call pathogen#infect()` to your .vimrc -" prior to `fileype plugin indent on` is the only other setup necessary. -" -" The API is documented inline below. For maximum ease of reading, -" :set foldmethod=marker - -if exists("g:loaded_pathogen") || &cp - finish -endif -let g:loaded_pathogen = 1 - -" Point of entry for basic default usage. Give a directory name to invoke -" pathogen#runtime_append_all_bundles() (defaults to "bundle"), or a full path -" to invoke pathogen#runtime_prepend_subdirectories(). Afterwards, -" pathogen#cycle_filetype() is invoked. -function! pathogen#infect(...) abort " {{{1 - let source_path = a:0 ? a:1 : 'bundle' - if source_path =~# '[\\/]' - call pathogen#runtime_prepend_subdirectories(source_path) - else - call pathogen#runtime_append_all_bundles(source_path) - endif - call pathogen#cycle_filetype() -endfunction " }}}1 - -" Split a path into a list. -function! pathogen#split(path) abort " {{{1 - if type(a:path) == type([]) | return a:path | endif - let split = split(a:path,'\\\@,'edit',) -command! -bar -bang -count=1 -nargs=1 -complete=customlist,s:Findcomplete Vedit :execute s:find(,'edit',) -command! -bar -bang -count=1 -nargs=1 -complete=customlist,s:Findcomplete Vsplit :execute s:find(,'split',) -command! -bar -bang -count=1 -nargs=1 -complete=customlist,s:Findcomplete Vvsplit :execute s:find(,'vsplit',) -command! -bar -bang -count=1 -nargs=1 -complete=customlist,s:Findcomplete Vtabedit :execute s:find(,'tabedit',) -command! -bar -bang -count=1 -nargs=1 -complete=customlist,s:Findcomplete Vpedit :execute s:find(,'pedit',) -command! -bar -bang -count=1 -nargs=1 -complete=customlist,s:Findcomplete Vread :execute s:find(,'read',) -command! -bar -bang -count=1 -nargs=1 -complete=customlist,s:Findcomplete Vopen :execute s:find(,'edit',,'lcd') - -" vim:set ft=vim ts=8 sw=2 sts=2: diff --git a/bundle/ack/doc/ack.txt b/bundle/ack/doc/ack.txt deleted file mode 100644 index 4d57841..0000000 --- a/bundle/ack/doc/ack.txt +++ /dev/null @@ -1,38 +0,0 @@ -*ack.txt* Plugin that integrates ack with Vim - -============================================================================== -Author: Antoine Imbert *ack-author* -License: Same terms as Vim itself (see |license|) - -============================================================================== -INTRODUCTION *ack* - -This plugin is a front for the Perl module App::Ack. Ack can be used as a -replacement for grep. This plugin will allow you to run ack from vim, and -shows the results in a split window. - -:Ack [options] {pattern} [{directory}] *:Ack* - - Search recursively in {directory} (which defaults to the current - directory) for the {pattern}. Behaves just like the |:grep| command, but - will open the |Quickfix| window for you. - -:AckAdd [options] {pattern} [{directory}] *:AckAdd* - - Just like |:Ack| + |:grepadd|. Appends the |quickfix| with the results - -:LAck [options] {pattern} [{directory}] *:LAck* - - Just like |:Ack| + |:lgrep|. Searches, but opens in |location-list| - -:LAckAdd [options] {pattern} [{directory}] *:LAckAdd* - - Just like |:Ack| + |:lgrepadd|. Searches, but appends results to - |location-list| - -Files containing the search term will be listed in the split window, along -with the line number of the occurrence, once for each occurrence. on -a line in this window will open the file, and place the cursor on the matching -line. - -See http://search.cpan.org/~petdance/ack/ack for more information. diff --git a/bundle/ack/plugin/ack.vim b/bundle/ack/plugin/ack.vim deleted file mode 100644 index 1aecd51..0000000 --- a/bundle/ack/plugin/ack.vim +++ /dev/null @@ -1,50 +0,0 @@ -" NOTE: You must, of course, install the ack script -" in your path. -" On Ubuntu: -" sudo apt-get install ack-grep -" ln -s /usr/bin/ack-grep /usr/bin/ack -" With MacPorts: -" sudo port install p5-app-ack - -let g:ackprg="ack\\ -H\\ --nocolor\\ --nogroup" - -function! Ack(args) - let grepprg_bak=&grepprg - exec "set grepprg=" . g:ackprg - execute "silent! grep " . a:args - botright copen - let &grepprg=grepprg_bak - exec "redraw!" -endfunction - -function! AckAdd(args) - let grepprg_bak=&grepprg - exec "set grepprg=" . g:ackprg - execute "silent! grepadd " . a:args - botright copen - let &grepprg=grepprg_bak - exec "redraw!" -endfunction - -function! LAck(args) - let grepprg_bak=&grepprg - exec "set grepprg=" . g:ackprg - execute "silent! lgrep " . a:args - botright lopen - let &grepprg=grepprg_bak - exec "redraw!" -endfunction - -function! LAckAdd(args) - let grepprg_bak=&grepprg - exec "set grepprg=" . g:ackprg - execute "silent! lgrepadd " . a:args - botright lopen - let &grepprg=grepprg_bak - exec "redraw!" -endfunction - -command! -nargs=* -complete=file Ack call Ack() -command! -nargs=* -complete=file AckAdd call AckAdd() -command! -nargs=* -complete=file LAck call LAck() -command! -nargs=* -complete=file LAckAdd call LAckAdd() diff --git a/bundle/airline/.gitignore b/bundle/airline/.gitignore deleted file mode 100755 index 296f094..0000000 --- a/bundle/airline/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -doc/tags -*.lock -.vim-flavor diff --git a/bundle/airline/.travis.yml b/bundle/airline/.travis.yml deleted file mode 100755 index 9ed483e..0000000 --- a/bundle/airline/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: ruby -rvm: - - 1.9.3 -script: rake ci diff --git a/bundle/airline/Gemfile b/bundle/airline/Gemfile deleted file mode 100755 index 088f22e..0000000 --- a/bundle/airline/Gemfile +++ /dev/null @@ -1,2 +0,0 @@ -source 'https://rubygems.org/' -gem 'vim-flavor', '~> 1.1' diff --git a/bundle/airline/LICENSE b/bundle/airline/LICENSE deleted file mode 100755 index 9a5a8b7..0000000 --- a/bundle/airline/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (C) 2013-2014 Bailey Ling - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE -OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/bundle/airline/README.md b/bundle/airline/README.md deleted file mode 100755 index eaf1a47..0000000 --- a/bundle/airline/README.md +++ /dev/null @@ -1,220 +0,0 @@ -# vim-airline [![Build Status](https://travis-ci.org/bling/vim-airline.png)](https://travis-ci.org/bling/vim-airline) - -Lean & mean status/tabline for vim that's light as air. - -![img](https://github.com/bling/vim-airline/wiki/screenshots/demo.gif) - -# Features - -* Tiny core written with extensibility in mind ([open/closed principle][8]). -* Integrates with a variety of plugins, including: [vim-bufferline][6], [fugitive][4], [unite][9], [ctrlp][10], [minibufexpl][15], [gundo][16], [undotree][17], [nerdtree][18], [tagbar][19], [vim-gitgutter][29], [vim-signify][30], [syntastic][5], [eclim][34], [lawrencium][21], [virtualenv][31], [tmuxline][35]. -* Looks good with regular fonts and provides configuration points so you can use unicode or powerline symbols. -* Optimized for speed; it loads in under a millisecond. -* Extensive suite of themes for popular color schemes including [solarized][23] (dark and light), [tomorrow][24] (all variants), [base16][32] (all variants), [molokai][25], [jellybeans][26] and others; have a look at the [screenshots][14] in the wiki. -* Supports 7.2 as the minimum Vim version. -* The master branch tries to be as stable as possible, and new features are merged in only after they have gone through a [full regression test][33]. -* Unit testing suite. - -## Straightforward customization - -If you don't like the defaults, you can replace all sections with standard `statusline` syntax. Give your statusline that you've built over the years a face lift. - -![image](https://f.cloud.github.com/assets/306502/1009429/d69306da-0b38-11e3-94bf-7c6e3eef41e9.png) - -## Automatic truncation - -Sections and parts within sections can be configured to automatically hide when the window size shrinks. - -![image](https://f.cloud.github.com/assets/306502/1060831/05c08aac-11bc-11e3-8470-a506a3037f45.png) - -## Smarter tab line - -Automatically displays all buffers when there's only one tab open. - -![tabline](https://f.cloud.github.com/assets/306502/1072623/44c292a0-1495-11e3-9ce6-dcada3f1c536.gif) - -This is disabled by default; add the following to your vimrc to enable the extension: - - let g:airline#extensions#tabline#enabled = 1 - -Separators can be configured independently for the tabline, so here is how you can define "straight" tabs: - - let g:airline#extensions#tabline#left_sep = ' ' - let g:airline#extensions#tabline#left_alt_sep = '|' - -## Seamless integration - -vim-airline integrates with a variety of plugins out of the box. These extensions will be lazily loaded if and only if you have the other plugins installed (and of course you can turn them off). - -#### [ctrlp.vim][10] -![image](https://f.cloud.github.com/assets/306502/962258/7345a224-04ec-11e3-8b5a-f11724a47437.png) - -#### [unite.vim][9] -![image](https://f.cloud.github.com/assets/306502/962319/4d7d3a7e-04ed-11e3-9d59-ab29cb310ff8.png) - -#### [tagbar][19] -![image](https://f.cloud.github.com/assets/306502/962150/7e7bfae6-04ea-11e3-9e28-32af206aed80.png) - -#### [csv.vim][28] -![image](https://f.cloud.github.com/assets/306502/962204/cfc1210a-04eb-11e3-8a93-42e6bcd21efa.png) - -#### [syntastic][5] -![image](https://f.cloud.github.com/assets/306502/962864/9824c484-04f7-11e3-9928-da94f8c7da5a.png) - -#### hunks ([vim-gitgutter][29] & [vim-signify][30]) -![image](https://f.cloud.github.com/assets/306502/995185/73fc7054-09b9-11e3-9d45-618406c6ed98.png) - -#### [virtualenv][31] -![image](https://f.cloud.github.com/assets/390964/1022566/cf81f830-0d98-11e3-904f-cf4fe3ce201e.png) - -#### [tmuxline][35] -![image](https://f.cloud.github.com/assets/1532071/1559276/4c28fbac-4fc7-11e3-90ef-7e833d980f98.gif) - -#### [promptline][36] -![airline-promptline-sc](https://f.cloud.github.com/assets/1532071/1871900/7d4b28a0-789d-11e3-90e4-16f37269981b.gif) - -## Extras - -vim-airline also supplies some supplementary stand-alone extensions. In addition to the tabline extension mentioned earlier, there is also: - -#### whitespace -![image](https://f.cloud.github.com/assets/306502/962401/2a75385e-04ef-11e3-935c-e3b9f0e954cc.png) - -## Configurable and extensible - -#### Fine-tuned configuration - -Every section is composed of parts, and you can reorder and reconfigure them at will. - -![image](https://f.cloud.github.com/assets/306502/1073278/f291dd4c-14a3-11e3-8a83-268e2753f97d.png) - -Sections can contain accents, which allows for very granular control of visuals (see configuration [here](https://github.com/bling/vim-airline/issues/299#issuecomment-25772886)). - -![image](https://f.cloud.github.com/assets/306502/1195815/4bfa38d0-249d-11e3-823e-773cfc2ca894.png) - -#### Extensible pipeline - -Completely transform the statusline to your liking. Build out the statusline as you see fit by extracting colors from the current colorscheme's highlight groups. - -![allyourbase](https://f.cloud.github.com/assets/306502/1022714/e150034a-0da7-11e3-94a5-ca9d58a297e8.png) - -# Rationale - -There's already [powerline][2], why yet another statusline? - -* 100% vimscript; no python needed. - -What about [vim-powerline][1]? - -* vim-powerline has been deprecated in favor of the newer, unifying powerline, which is under active development; the new version is written in python at the core and exposes various bindings such that it can style statuslines not only in vim, but also tmux, bash, zsh, and others. - -# Where did the name come from? - -I wrote the initial version on an airplane, and since it's light as air it turned out to be a good name. Thanks for flying vim! - -# Installation - -This plugin follows the standard runtime path structure, and as such it can be installed with a variety of plugin managers: - -* [Pathogen][11] - * `git clone https://github.com/bling/vim-airline ~/.vim/bundle/vim-airline` -* [NeoBundle][12] - * `NeoBundle 'bling/vim-airline'` -* [Vundle][13] - * `Plugin 'bling/vim-airline'` -* [VAM][22] - * `call vam#ActivateAddons([ 'vim-airline' ])` -* manual - * copy all of the files into your `~/.vim` directory - -# Configuration - -`:help airline` - -The default setting of 'laststatus' is for the statusline to not appear until a split is created. If you want it to appear all the time, add the following to your vimrc: -`set laststatus=2` - -# Integrating with powerline fonts - -For the nice looking powerline symbols to appear, you will need to install a patched font. Instructions can be found in the official powerline [documentation][20]. Prepatched fonts can be found in the [powerline-fonts][3] repository. - -Finally, you can add the convenience variable `let g:airline_powerline_fonts = 1` to your vimrc which will automatically populate the `g:airline_symbols` dictionary with the powerline symbols. - -# FAQ - -Solutions to common problems can be found in the [Wiki][27]. - -# Performance - -Whoa! Everything got slow all of a sudden... - -vim-airline strives to make it easy to use out of the box, which means that by default it will look for all compatible plugins that you have installed and enable the relevant extension. - -Many optimizations have been made such that the majority of users will not see any performance degradation, but it can still happen. For example, users who routinely open very large files may want to disable the tagbar extension, as it can be very expensive to scan for the name of the current function. - -The [minivimrc][7] project has some helper mappings to troubleshoot performance related issues. - -# Screenshots - -A full list of screenshots for various themes can be found in the [Wiki][14]. - -# Bugs - -Tracking down bugs can take a very long time due to different configurations, versions, and operating systems. To ensure a timely response, please help me out by doing the following: - -* Reproduce it with this [minivimrc][7] repository to rule out any configuration conflicts. -* A link to your vimrc or a gist which shows how you configured the plugin(s). -* And so I can reproduce; your `:version` of vim, and the commit of vim-airline you're using. - -# Contributions - -Contributions and pull requests are welcome. Please take note of the following guidelines: - -* Adhere to the existing style as much as possible; notably, 2 space indents and long-form keywords. -* Keep the history clean! squash your branches before you submit a pull request. `pull --rebase` is your friend. -* Any changes to the core should be tested against Vim 7.2. -* If you submit a theme, please create a screenshot so it can be added to the [Wiki][14]. - -# License - -MIT License. Copyright (c) 2013-2014 Bailey Ling. - - -[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/bling/vim-airline/trend.png)](https://bitdeli.com/free "Bitdeli Badge") - -[1]: https://github.com/Lokaltog/vim-powerline -[2]: https://github.com/Lokaltog/powerline -[3]: https://github.com/Lokaltog/powerline-fonts -[4]: https://github.com/tpope/vim-fugitive -[5]: https://github.com/scrooloose/syntastic -[6]: https://github.com/bling/vim-bufferline -[7]: https://github.com/bling/minivimrc -[8]: http://en.wikipedia.org/wiki/Open/closed_principle -[9]: https://github.com/Shougo/unite.vim -[10]: https://github.com/kien/ctrlp.vim -[11]: https://github.com/tpope/vim-pathogen -[12]: https://github.com/Shougo/neobundle.vim -[13]: https://github.com/gmarik/vundle -[14]: https://github.com/bling/vim-airline/wiki/Screenshots -[15]: https://github.com/techlivezheng/vim-plugin-minibufexpl -[16]: https://github.com/sjl/gundo.vim -[17]: https://github.com/mbbill/undotree -[18]: https://github.com/scrooloose/nerdtree -[19]: https://github.com/majutsushi/tagbar -[20]: https://powerline.readthedocs.org/en/master/installation.html#patched-fonts -[21]: https://bitbucket.org/ludovicchabant/vim-lawrencium -[22]: https://github.com/MarcWeber/vim-addon-manager -[23]: https://github.com/altercation/solarized -[24]: https://github.com/chriskempson/tomorrow-theme -[25]: https://github.com/tomasr/molokai -[26]: https://github.com/nanotech/jellybeans.vim -[27]: https://github.com/bling/vim-airline/wiki/FAQ -[28]: https://github.com/chrisbra/csv.vim -[29]: https://github.com/airblade/vim-gitgutter -[30]: https://github.com/mhinz/vim-signify -[31]: https://github.com/jmcantrell/vim-virtualenv -[32]: https://github.com/chriskempson/base16-vim -[33]: https://github.com/bling/vim-airline/wiki/Test-Plan -[34]: http://eclim.org -[35]: https://github.com/edkolev/tmuxline.vim -[36]: https://github.com/edkolev/promptline.vim diff --git a/bundle/airline/Rakefile b/bundle/airline/Rakefile deleted file mode 100755 index 741cfc2..0000000 --- a/bundle/airline/Rakefile +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env rake - -task :default => [:test] - -task :ci => [:dump, :test] - -task :dump do - sh 'vim --version' -end - -task :test do - sh 'bundle exec vim-flavor test' -end - diff --git a/bundle/airline/autoload/airline.vim b/bundle/airline/autoload/airline.vim deleted file mode 100755 index 81cf3b5..0000000 --- a/bundle/airline/autoload/airline.vim +++ /dev/null @@ -1,172 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -let g:airline_statusline_funcrefs = get(g:, 'airline_statusline_funcrefs', []) - -let s:sections = ['a','b','c','gutter','x','y','z','warning'] -let s:inactive_funcrefs = [] - -function! airline#add_statusline_func(name) - call airline#add_statusline_funcref(function(a:name)) -endfunction - -function! airline#add_statusline_funcref(function) - if index(g:airline_statusline_funcrefs, a:function) >= 0 - echohl WarningMsg - echo 'The airline statusline funcref '.string(a:function).' has already been added.' - echohl NONE - return - endif - call add(g:airline_statusline_funcrefs, a:function) -endfunction - -function! airline#remove_statusline_func(name) - let i = index(g:airline_statusline_funcrefs, function(a:name)) - if i > -1 - call remove(g:airline_statusline_funcrefs, i) - endif -endfunction - -function! airline#add_inactive_statusline_func(name) - call add(s:inactive_funcrefs, function(a:name)) -endfunction - -function! airline#load_theme() - if exists('*airline#themes#{g:airline_theme}#refresh') - call airline#themes#{g:airline_theme}#refresh() - endif - - let palette = g:airline#themes#{g:airline_theme}#palette - call airline#themes#patch(palette) - - if exists('g:airline_theme_patch_func') - let Fn = function(g:airline_theme_patch_func) - call Fn(palette) - endif - - call airline#highlighter#load_theme() - call airline#extensions#load_theme() -endfunction - -function! airline#switch_theme(name) - try - let palette = g:airline#themes#{a:name}#palette "also lazy loads the theme - let g:airline_theme = a:name - catch - echohl WarningMsg | echo 'The specified theme cannot be found.' | echohl NONE - if exists('g:airline_theme') - return - else - let g:airline_theme = 'dark' - endif - endtry - - let w:airline_lastmode = '' - call airline#update_statusline() - call airline#load_theme() - - " this is required to prevent clobbering the startup info message, i don't know why... - call airline#check_mode(winnr()) -endfunction - -function! airline#switch_matching_theme() - if exists('g:colors_name') - try - let palette = g:airline#themes#{g:colors_name}#palette - call airline#switch_theme(g:colors_name) - return 1 - catch - for map in items(g:airline_theme_map) - if match(g:colors_name, map[0]) > -1 - call airline#switch_theme(map[1]) - return 1 - endif - endfor - endtry - endif - return 0 -endfunction - -function! airline#update_statusline() - for nr in filter(range(1, winnr('$')), 'v:val != winnr()') - call setwinvar(nr, 'airline_active', 0) - let context = { 'winnr': nr, 'active': 0, 'bufnr': winbufnr(nr) } - call s:invoke_funcrefs(context, s:inactive_funcrefs) - endfor - - unlet! w:airline_render_left - unlet! w:airline_render_right - for section in s:sections - unlet! w:airline_section_{section} - endfor - - let w:airline_active = 1 - let context = { 'winnr': winnr(), 'active': 1, 'bufnr': winbufnr(winnr()) } - call s:invoke_funcrefs(context, g:airline_statusline_funcrefs) -endfunction - -let s:contexts = {} -let s:core_funcrefs = [ - \ function('airline#extensions#apply'), - \ function('airline#extensions#default#apply') ] -function! s:invoke_funcrefs(context, funcrefs) - let builder = airline#builder#new(a:context) - let err = airline#util#exec_funcrefs(a:funcrefs + s:core_funcrefs, builder, a:context) - if err == 1 - let a:context.line = builder.build() - let s:contexts[a:context.winnr] = a:context - call setwinvar(a:context.winnr, '&statusline', '%!airline#statusline('.a:context.winnr.')') - endif -endfunction - -function! airline#statusline(winnr) - if has_key(s:contexts, a:winnr) - return '%{airline#check_mode('.a:winnr.')}'.s:contexts[a:winnr].line - endif - - " in rare circumstances this happens...see #276 - return '' -endfunction - -function! airline#check_mode(winnr) - let context = s:contexts[a:winnr] - - if get(w:, 'airline_active', 1) - let l:m = mode() - if l:m ==# "i" - let l:mode = ['insert'] - elseif l:m ==# "R" - let l:mode = ['replace'] - elseif l:m =~# '\v(v|V||s|S|)' - let l:mode = ['visual'] - else - let l:mode = ['normal'] - endif - let w:airline_current_mode = get(g:airline_mode_map, l:m, l:m) - else - let l:mode = ['inactive'] - let w:airline_current_mode = get(g:airline_mode_map, '__') - endif - - if g:airline_detect_modified && &modified - call add(l:mode, 'modified') - endif - - if g:airline_detect_paste && &paste - call add(l:mode, 'paste') - endif - - if &readonly || ! &modifiable - call add(l:mode, 'readonly') - endif - - let mode_string = join(l:mode) - if get(w:, 'airline_lastmode', '') != mode_string - call airline#highlighter#highlight_modified_inactive(context.bufnr) - call airline#highlighter#highlight(l:mode) - let w:airline_lastmode = mode_string - endif - - return '' -endfunction - diff --git a/bundle/airline/autoload/airline/builder.vim b/bundle/airline/autoload/airline/builder.vim deleted file mode 100755 index 5f4e080..0000000 --- a/bundle/airline/autoload/airline/builder.vim +++ /dev/null @@ -1,134 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -let s:prototype = {} - -function! s:prototype.split(...) - call add(self._sections, ['|', a:0 ? a:1 : '%=']) -endfunction - -function! s:prototype.add_section_spaced(group, contents) - call self.add_section(a:group, (g:airline_symbols.space).a:contents.(g:airline_symbols.space)) -endfunction - -function! s:prototype.add_section(group, contents) - call add(self._sections, [a:group, a:contents]) -endfunction - -function! s:prototype.add_raw(text) - call add(self._sections, ['', a:text]) -endfunction - -function! s:get_prev_group(sections, i) - let x = a:i - 1 - while x >= 0 - let group = a:sections[x][0] - if group != '' && group != '|' - return group - endif - let x = x - 1 - endwhile - return '' -endfunction - -function! s:prototype.build() - let side = 1 - let line = '' - let i = 0 - let length = len(self._sections) - let split = 0 - - while i < length - let section = self._sections[i] - let group = section[0] - let contents = section[1] - let prev_group = s:get_prev_group(self._sections, i) - - if group == '' - let line .= contents - elseif group == '|' - let side = 0 - let line .= contents - let split = 1 - else - if prev_group == '' - let line .= '%#'.group.'#' - elseif split - let line .= s:get_transitioned_seperator(self, prev_group, group, side) - let split = 0 - else - let line .= s:get_seperator(self, prev_group, group, side) - endif - let line .= s:get_accented_line(self, group, contents) - endif - - let i = i + 1 - endwhile - - if !self._context.active - let line = substitute(line, '%#.\{-}\ze#', '\0_inactive', 'g') - endif - return line -endfunction - -function! s:should_change_group(group1, group2) - if a:group1 == a:group2 - return 0 - endif - let color1 = airline#highlighter#get_highlight(a:group1) - let color2 = airline#highlighter#get_highlight(a:group2) - if has('gui_running') - return color1[1] != color2[1] || color1[0] != color2[0] - else - return color1[3] != color2[3] || color1[2] != color2[2] - endif -endfunction - -function! s:get_transitioned_seperator(self, prev_group, group, side) - let line = '' - call airline#highlighter#add_separator(a:prev_group, a:group, a:side) - let line .= '%#'.a:prev_group.'_to_'.a:group.'#' - let line .= a:side ? a:self._context.left_sep : a:self._context.right_sep - let line .= '%#'.a:group.'#' - return line -endfunction - -function! s:get_seperator(self, prev_group, group, side) - if s:should_change_group(a:prev_group, a:group) - return s:get_transitioned_seperator(a:self, a:prev_group, a:group, a:side) - else - return a:side ? a:self._context.left_alt_sep : a:self._context.right_alt_sep - endif -endfunction - -function! s:get_accented_line(self, group, contents) - if a:self._context.active - let contents = [] - let content_parts = split(a:contents, '__accent') - for cpart in content_parts - let accent = matchstr(cpart, '_\zs[^#]*\ze') - call add(contents, cpart) - endfor - let line = join(contents, a:group) - let line = substitute(line, '__restore__', a:group, 'g') - else - let line = substitute(a:contents, '%#__accent[^#]*#', '', 'g') - let line = substitute(line, '%#__restore__#', '', 'g') - endif - return line -endfunction - -function! airline#builder#new(context) - let builder = copy(s:prototype) - let builder._context = a:context - let builder._sections = [] - - call extend(builder._context, { - \ 'left_sep': g:airline_left_sep, - \ 'left_alt_sep': g:airline_left_alt_sep, - \ 'right_sep': g:airline_right_sep, - \ 'right_alt_sep': g:airline_right_alt_sep, - \ }, 'keep') - return builder -endfunction - diff --git a/bundle/airline/autoload/airline/debug.vim b/bundle/airline/autoload/airline/debug.vim deleted file mode 100755 index 28424a6..0000000 --- a/bundle/airline/autoload/airline/debug.vim +++ /dev/null @@ -1,50 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -function! airline#debug#profile1() - profile start airline-profile-switch.log - profile func * - profile file * - split - for i in range(1, 1000) - wincmd w - redrawstatus - endfor - profile pause - noautocmd qall! -endfunction - -function! airline#debug#profile2() - profile start airline-profile-cursor.log - profile func * - profile file * - edit blank - call setline(1, 'all your base are belong to us') - call setline(2, 'all your base are belong to us') - let positions = [[1,2], [2,2], [1,2], [1,1]] - for i in range(1, 1000) - for pos in positions - call cursor(pos[0], pos[1]) - redrawstatus - endfor - endfor - profile pause - noautocmd qall! -endfunction - -function! airline#debug#profile3() - profile start airline-profile-mode.log - profile func * - profile file * - - for i in range(1000) - startinsert - redrawstatus - stopinsert - redrawstatus - endfor - - profile pause - noautocmd qall! -endfunction - diff --git a/bundle/airline/autoload/airline/deprecation.vim b/bundle/airline/autoload/airline/deprecation.vim deleted file mode 100755 index cf7e787..0000000 --- a/bundle/airline/autoload/airline/deprecation.vim +++ /dev/null @@ -1,32 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -function! airline#deprecation#check() - if exists('g:airline_enable_fugitive') || exists('g:airline_fugitive_prefix') - echom 'The g:airline_enable_fugitive and g:airline_fugitive_prefix variables are obsolete. Please read the documentation about the branch extension.' - endif - - let tests = [ - \ [ 'g:airline_paste_symbol', 'g:airline_symbols.paste' ], - \ [ 'g:airline_readonly_symbol', 'g:airline_symbols.readonly' ], - \ [ 'g:airline_linecolumn_prefix', 'g:airline_symbols.linenr' ], - \ [ 'g:airline_branch_prefix', 'g:airline_symbols.branch' ], - \ [ 'g:airline_branch_empty_message', 'g:airline#extensions#branch#empty_message' ], - \ [ 'g:airline_detect_whitespace', 'g:airline#extensions#whitespace#enabled|show_message' ], - \ [ 'g:airline_enable_hunks', 'g:airline#extensions#hunks#enabled' ], - \ [ 'g:airline_enable_tagbar', 'g:airline#extensions#tagbar#enabled' ], - \ [ 'g:airline_enable_csv', 'g:airline#extensions#csv#enabled' ], - \ [ 'g:airline_enable_branch', 'g:airline#extensions#branch#enabled' ], - \ [ 'g:airline_enable_bufferline', 'g:airline#extensions#bufferline#enabled' ], - \ [ 'g:airline_enable_syntastic', 'g:airline#extensions#syntastic#enabled' ], - \ [ 'g:airline_enable_eclim', 'g:airline#extensions#eclim#enabled' ], - \ ] - for test in tests - if exists(test[0]) - let max = winwidth(0) - 16 - let msg = printf('The variable %s is deprecated and may not work in the future. It has been replaced with %s. Please read the documentation.', test[0], test[1]) - echom msg[:max].'...' - endif - endfor -endfunction - diff --git a/bundle/airline/autoload/airline/extensions.vim b/bundle/airline/autoload/airline/extensions.vim deleted file mode 100755 index 22a91cf..0000000 --- a/bundle/airline/autoload/airline/extensions.vim +++ /dev/null @@ -1,242 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -let s:ext = {} -let s:ext._theme_funcrefs = [] - -function! s:ext.add_statusline_func(name) dict - call airline#add_statusline_func(a:name) -endfunction -function! s:ext.add_statusline_funcref(function) dict - call airline#add_statusline_funcref(a:function) -endfunction -function! s:ext.add_inactive_statusline_func(name) dict - call airline#add_inactive_statusline_func(a:name) -endfunction -function! s:ext.add_theme_func(name) dict - call add(self._theme_funcrefs, function(a:name)) -endfunction - -let s:script_path = tolower(resolve(expand(':p:h'))) - -let s:filetype_overrides = { - \ 'nerdtree': [ 'NERD', '' ], - \ 'gundo': [ 'Gundo', '' ], - \ 'vimfiler': [ 'vimfiler', '%{vimfiler#get_status_string()}' ], - \ 'minibufexpl': [ 'MiniBufExplorer', '' ], - \ 'startify': [ 'startify', '' ], - \ 'vim-plug': [ 'Plugins', '' ], - \ } - -let s:filetype_regex_overrides = {} - -function! s:check_defined_section(name) - if !exists('w:airline_section_{a:name}') - let w:airline_section_{a:name} = g:airline_section_{a:name} - endif -endfunction - -function! airline#extensions#append_to_section(name, value) - call check_defined_section(a:name) - let w:airline_section_{a:name} .= a:value -endfunction - -function! airline#extensions#prepend_to_section(name, value) - call check_defined_section(a:name) - let w:airline_section_{a:name} = a:value . w:airline_section_{a:name} -endfunction - -function! airline#extensions#apply_left_override(section1, section2) - let w:airline_section_a = a:section1 - let w:airline_section_b = a:section2 - let w:airline_section_c = airline#section#create(['readonly']) - let w:airline_render_left = 1 - let w:airline_render_right = 0 -endfunction - -let s:active_winnr = -1 -function! airline#extensions#apply(...) - let s:active_winnr = winnr() - - if s:is_excluded_window() - return -1 - endif - - if &buftype == 'help' - call airline#extensions#apply_left_override('Help', '%f') - let w:airline_section_x = '' - let w:airline_section_y = '' - let w:airline_render_right = 1 - endif - - if &previewwindow - let w:airline_section_a = 'Preview' - let w:airline_section_b = '' - let w:airline_section_c = bufname(winbufnr(winnr())) - endif - - if has_key(s:filetype_overrides, &ft) - let args = s:filetype_overrides[&ft] - call airline#extensions#apply_left_override(args[0], args[1]) - endif - - for item in items(s:filetype_regex_overrides) - if match(&ft, item[0]) >= 0 - call airline#extensions#apply_left_override(item[1][0], item[1][1]) - endif - endfor -endfunction - -function! s:is_excluded_window() - for matchft in g:airline_exclude_filetypes - if matchft ==# &ft - return 1 - endif - endfor - - for matchw in g:airline_exclude_filenames - if matchstr(expand('%'), matchw) ==# matchw - return 1 - endif - endfor - - if g:airline_exclude_preview && &previewwindow - return 1 - endif - - return 0 -endfunction - -function! airline#extensions#load_theme() - call airline#util#exec_funcrefs(s:ext._theme_funcrefs, g:airline#themes#{g:airline_theme}#palette) -endfunction - -function! s:sync_active_winnr() - if exists('#airline') && winnr() != s:active_winnr - call airline#update_statusline() - endif -endfunction - -function! airline#extensions#load() - " non-trivial number of external plugins use eventignore=all, so we need to account for that - autocmd CursorMoved * call sync_active_winnr() - - call airline#extensions#quickfix#init(s:ext) - - if get(g:, 'loaded_unite', 0) - call airline#extensions#unite#init(s:ext) - endif - - if exists(':NetrwSettings') - call airline#extensions#netrw#init(s:ext) - endif - - if get(g:, 'loaded_vimfiler', 0) - let g:vimfiler_force_overwrite_statusline = 0 - endif - - if get(g:, 'loaded_ctrlp', 0) - call airline#extensions#ctrlp#init(s:ext) - endif - - if get(g:, 'command_t_loaded', 0) - call airline#extensions#commandt#init(s:ext) - endif - - if exists(':UndotreeToggle') - call airline#extensions#undotree#init(s:ext) - endif - - if (get(g:, 'airline#extensions#hunks#enabled', 1) && get(g:, 'airline_enable_hunks', 1)) - \ && (exists('g:loaded_signify') || exists('g:loaded_gitgutter') || exists('g:loaded_changes')) - call airline#extensions#hunks#init(s:ext) - endif - - if (get(g:, 'airline#extensions#tagbar#enabled', 1) && get(g:, 'airline_enable_tagbar', 1)) - \ && exists(':TagbarToggle') - call airline#extensions#tagbar#init(s:ext) - endif - - if (get(g:, 'airline#extensions#csv#enabled', 1) && get(g:, 'airline_enable_csv', 1)) - \ && (get(g:, 'loaded_csv', 0) || exists(':Table')) - call airline#extensions#csv#init(s:ext) - endif - - if exists(':VimShell') - let s:filetype_overrides['vimshell'] = ['vimshell','%{vimshell#get_status_string()}'] - let s:filetype_regex_overrides['^int-'] = ['vimshell','%{substitute(&ft, "int-", "", "")}'] - endif - - if (get(g:, 'airline#extensions#branch#enabled', 1) && get(g:, 'airline_enable_branch', 1)) - \ && (exists('*fugitive#head') || exists('*lawrencium#statusline') || - \ (get(g:, 'airline#extensions#branch#use_vcscommand', 0) && exists('*VCSCommandGetStatusLine'))) - call airline#extensions#branch#init(s:ext) - endif - - if (get(g:, 'airline#extensions#bufferline#enabled', 1) && get(g:, 'airline_enable_bufferline', 1)) - \ && exists('*bufferline#get_status_string') - call airline#extensions#bufferline#init(s:ext) - endif - - if isdirectory($VIRTUAL_ENV) && get(g:, 'airline#extensions#virtualenv#enabled', 1) - call airline#extensions#virtualenv#init(s:ext) - endif - - if (get(g:, 'airline#extensions#eclim#enabled', 1) && exists(':ProjectCreate')) - call airline#extensions#eclim#init(s:ext) - endif - - if (get(g:, 'airline#extensions#syntastic#enabled', 1) && get(g:, 'airline_enable_syntastic', 1)) - \ && exists(':SyntasticCheck') - call airline#extensions#syntastic#init(s:ext) - endif - - if (get(g:, 'airline#extensions#whitespace#enabled', 1) && get(g:, 'airline_detect_whitespace', 1)) - call airline#extensions#whitespace#init(s:ext) - endif - - if get(g:, 'airline#extensions#tabline#enabled', 0) - call airline#extensions#tabline#init(s:ext) - endif - - if get(g:, 'airline#extensions#tmuxline#enabled', 1) && exists(':Tmuxline') - call airline#extensions#tmuxline#init(s:ext) - endif - - if get(g:, 'airline#extensions#promptline#enabled', 1) && exists(':PromptlineSnapshot') && len(get(g:, 'airline#extensions#promptline#snapshot_file', '')) - call airline#extensions#promptline#init(s:ext) - endif - - if get(g:, 'airline#extensions#nrrwrgn#enabled', 1) && exists(':NR') == 2 - call airline#extensions#nrrwrgn#init(s:ext) - endif - - if (get(g:, 'airline#extensions#capslock#enabled', 1) && exists('*CapsLockStatusline')) - call airline#extensions#capslock#init(s:ext) - endif - - if (get(g:, 'airline#extensions#windowswap#enabled', 1) && get(g:, 'loaded_windowswap', 0)) - call airline#extensions#windowswap#init(s:ext) - endif - - if !get(g:, 'airline#extensions#disable_rtp_load', 0) - " load all other extensions, which are not part of the default distribution. - " (autoload/airline/extensions/*.vim outside of our s:script_path). - for file in split(globpath(&rtp, "autoload/airline/extensions/*.vim"), "\n") - " we have to check both resolved and unresolved paths, since it's possible - " that they might not get resolved properly (see #187) - if stridx(tolower(resolve(fnamemodify(file, ':p'))), s:script_path) < 0 - \ && stridx(tolower(fnamemodify(file, ':p')), s:script_path) < 0 - let name = fnamemodify(file, ':t:r') - if !get(g:, 'airline#extensions#'.name.'#enabled', 1) - continue - endif - try - call airline#extensions#{name}#init(s:ext) - catch - endtry - endif - endfor - endif -endfunction - diff --git a/bundle/airline/autoload/airline/extensions/branch.vim b/bundle/airline/autoload/airline/extensions/branch.vim deleted file mode 100755 index e97cae8..0000000 --- a/bundle/airline/autoload/airline/extensions/branch.vim +++ /dev/null @@ -1,122 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -let s:has_fugitive = exists('*fugitive#head') -let s:has_lawrencium = exists('*lawrencium#statusline') -let s:has_vcscommand = get(g:, 'airline#extensions#branch#use_vcscommand', 0) && exists('*VCSCommandGetStatusLine') - -if !s:has_fugitive && !s:has_lawrencium && !s:has_vcscommand - finish -endif - -let s:git_dirs = {} -function! s:get_git_branch(path) - if has_key(s:git_dirs, a:path) - return s:git_dirs[a:path] - endif - - let dir = fugitive#extract_git_dir(a:path) - if empty(dir) - let name = '' - else - try - let line = join(readfile(dir . '/HEAD')) - if strpart(line, 0, 16) == 'ref: refs/heads/' - let name = strpart(line, 16) - else - " raw commit hash - let name = strpart(line, 0, 7) - endif - catch - let name = '' - endtry - endif - - let s:git_dirs[a:path] = name - return name -endfunction - -function! airline#extensions#branch#head() - if exists('b:airline_head') && !empty(b:airline_head) - return b:airline_head - endif - - let b:airline_head = '' - let found_fugitive_head = 0 - - if s:has_fugitive && !exists('b:mercurial_dir') - let b:airline_head = fugitive#head(7) - let found_fugitive_head = 1 - - if empty(b:airline_head) && !exists('b:git_dir') - let b:airline_head = s:get_git_branch(expand("%:p:h")) - endif - endif - - if empty(b:airline_head) - if s:has_lawrencium - let b:airline_head = lawrencium#statusline() - endif - endif - - if empty(b:airline_head) - if s:has_vcscommand - call VCSCommandEnableBufferSetup() - if exists('b:VCSCommandBufferInfo') - let b:airline_head = get(b:VCSCommandBufferInfo, 0, '') - endif - endif - endif - - if empty(b:airline_head) || !found_fugitive_head && !s:check_in_path() - let b:airline_head = '' - endif - - if exists("g:airline#extensions#branch#displayed_head_limit") - let w:displayed_head_limit = g:airline#extensions#branch#displayed_head_limit - if len(b:airline_head) > w:displayed_head_limit - 1 - let b:airline_head = b:airline_head[0:w:displayed_head_limit - 1].'…' - endif - endif - - return b:airline_head -endfunction - -function! airline#extensions#branch#get_head() - let head = airline#extensions#branch#head() - let empty_message = get(g:, 'airline#extensions#branch#empty_message', - \ get(g:, 'airline_branch_empty_message', '')) - let symbol = get(g:, 'airline#extensions#branch#symbol', g:airline_symbols.branch) - return empty(head) - \ ? empty_message - \ : printf('%s%s', empty(symbol) ? '' : symbol.(g:airline_symbols.space), head) -endfunction - -function! s:check_in_path() - if !exists('b:airline_branch_path') - let root = get(b:, 'git_dir', get(b:, 'mercurial_dir', '')) - let bufferpath = resolve(fnamemodify(expand('%'), ':p')) - - if !filereadable(root) "not a file - " if .git is a directory, it's the old submodule format - if match(root, '\.git$') >= 0 - let root = expand(fnamemodify(root, ':h')) - else - " else it's the newer format, and we need to guesstimate - let pattern = '\.git\(\\\|\/\)modules\(\\\|\/\)' - if match(root, pattern) >= 0 - let root = substitute(root, pattern, '', '') - endif - endif - - let b:airline_file_in_root = stridx(bufferpath, root) > -1 - endif - return b:airline_file_in_root -endfunction - -function! airline#extensions#branch#init(ext) - call airline#parts#define_function('branch', 'airline#extensions#branch#get_head') - - autocmd BufReadPost * unlet! b:airline_file_in_root - autocmd CursorHold,ShellCmdPost,CmdwinLeave * unlet! b:airline_head -endfunction diff --git a/bundle/airline/autoload/airline/extensions/bufferline.vim b/bundle/airline/autoload/airline/extensions/bufferline.vim deleted file mode 100755 index 6dc97fe..0000000 --- a/bundle/airline/autoload/airline/extensions/bufferline.vim +++ /dev/null @@ -1,23 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -if !exists('*bufferline#get_status_string') - finish -endif - -let s:overwrite = get(g:, 'airline#extensions#bufferline#overwrite_variables', 1) - -function! airline#extensions#bufferline#init(ext) - if s:overwrite - highlight bufferline_selected gui=bold cterm=bold term=bold - highlight link bufferline_selected_inactive airline_c_inactive - let g:bufferline_inactive_highlight = 'airline_c' - let g:bufferline_active_highlight = 'bufferline_selected' - let g:bufferline_active_buffer_left = '' - let g:bufferline_active_buffer_right = '' - let g:bufferline_separator = g:airline_symbols.space - endif - - call airline#parts#define_raw('file', '%{bufferline#refresh_status()}'.bufferline#get_status_string()) -endfunction - diff --git a/bundle/airline/autoload/airline/extensions/capslock.vim b/bundle/airline/autoload/airline/extensions/capslock.vim deleted file mode 100755 index 689b561..0000000 --- a/bundle/airline/autoload/airline/extensions/capslock.vim +++ /dev/null @@ -1,14 +0,0 @@ -" MIT License. Copyright (c) 2014 Mathias Andersson. -" vim: et ts=2 sts=2 sw=2 -if !exists('*CapsLockStatusline') - finish -endif - -function! airline#extensions#capslock#status() - return CapsLockStatusline() == '[caps]' ? 'CAPS' : '' -endfunction - -function! airline#extensions#capslock#init(ext) - call airline#parts#define_function('capslock', 'airline#extensions#capslock#status') -endfunction - diff --git a/bundle/airline/autoload/airline/extensions/commandt.vim b/bundle/airline/autoload/airline/extensions/commandt.vim deleted file mode 100755 index e549f27..0000000 --- a/bundle/airline/autoload/airline/extensions/commandt.vim +++ /dev/null @@ -1,16 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -if !get(g:, 'command_t_loaded', 0) - finish -endif - -function! airline#extensions#commandt#apply(...) - if bufname('%') ==# 'GoToFile' - call airline#extensions#apply_left_override('CommandT', '') - endif -endfunction - -function! airline#extensions#commandt#init(ext) - call a:ext.add_statusline_func('airline#extensions#commandt#apply') -endfunction diff --git a/bundle/airline/autoload/airline/extensions/csv.vim b/bundle/airline/autoload/airline/extensions/csv.vim deleted file mode 100755 index 2c296ab..0000000 --- a/bundle/airline/autoload/airline/extensions/csv.vim +++ /dev/null @@ -1,31 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -if !get(g:, 'loaded_csv', 0) && !exists(':Table') - finish -endif - -let s:column_display = get(g:, 'airline#extensions#csv#column_display', 'Number') - -function! airline#extensions#csv#get_column() - if exists('*CSV_WCol') - if s:column_display ==# 'Name' - return '['.CSV_WCol('Name').CSV_WCol().']' - else - return '['.CSV_WCol().']' - endif - endif - return '' -endfunction - -function! airline#extensions#csv#apply(...) - if &ft ==# "csv" - call airline#extensions#prepend_to_section('gutter', - \ g:airline_left_alt_sep.' %{airline#extensions#csv#get_column()}') - endif -endfunction - -function! airline#extensions#csv#init(ext) - call a:ext.add_statusline_func('airline#extensions#csv#apply') -endfunction - diff --git a/bundle/airline/autoload/airline/extensions/ctrlp.vim b/bundle/airline/autoload/airline/extensions/ctrlp.vim deleted file mode 100755 index ef7da68..0000000 --- a/bundle/airline/autoload/airline/extensions/ctrlp.vim +++ /dev/null @@ -1,80 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -if !get(g:, 'loaded_ctrlp', 0) - finish -endif - -let s:color_template = get(g:, 'airline#extensions#ctrlp#color_template', 'insert') - -function! airline#extensions#ctrlp#generate_color_map(dark, light, white) - return { - \ 'CtrlPdark' : a:dark, - \ 'CtrlPlight' : a:light, - \ 'CtrlPwhite' : a:white, - \ 'CtrlParrow1' : [ a:light[1] , a:white[1] , a:light[3] , a:white[3] , '' ] , - \ 'CtrlParrow2' : [ a:white[1] , a:light[1] , a:white[3] , a:light[3] , '' ] , - \ 'CtrlParrow3' : [ a:light[1] , a:dark[1] , a:light[3] , a:dark[3] , '' ] , - \ } -endfunction - -function! airline#extensions#ctrlp#load_theme(palette) - if exists('a:palette.ctrlp') - let theme = a:palette.ctrlp - else - let s:color_template = has_key(a:palette, s:color_template) ? s:color_template : 'insert' - let theme = airline#extensions#ctrlp#generate_color_map( - \ a:palette[s:color_template]['airline_c'], - \ a:palette[s:color_template]['airline_b'], - \ a:palette[s:color_template]['airline_a']) - endif - for key in keys(theme) - call airline#highlighter#exec(key, theme[key]) - endfor -endfunction - -" Arguments: focus, byfname, regexp, prv, item, nxt, marked -function! airline#extensions#ctrlp#ctrlp_airline(...) - let b = airline#builder#new({'active': 1}) - if a:2 == 'file' - call b.add_section_spaced('CtrlPlight', 'by fname') - endif - if a:3 - call b.add_section_spaced('CtrlPlight', 'regex') - endif - if get(g:, 'airline#extensions#ctrlp#show_adjacent_modes', 1) - call b.add_section_spaced('CtrlPlight', a:4) - call b.add_section_spaced('CtrlPwhite', a:5) - call b.add_section_spaced('CtrlPlight', a:6) - else - call b.add_section_spaced('CtrlPwhite', a:5) - endif - call b.add_section_spaced('CtrlPdark', a:7) - call b.split() - call b.add_section_spaced('CtrlPdark', a:1) - call b.add_section_spaced('CtrlPdark', a:2) - call b.add_section_spaced('CtrlPlight', '%{getcwd()}') - return b.build() -endfunction - -" Argument: len -function! airline#extensions#ctrlp#ctrlp_airline_status(...) - let len = '%#CtrlPdark# '.a:1 - let dir = '%=%<%#CtrlParrow3#'.g:airline_right_sep.'%#CtrlPlight# '.getcwd().' %*' - return len.dir -endfunction - -function! airline#extensions#ctrlp#apply(...) - " disable statusline overwrite if ctrlp already did it - return match(&statusline, 'CtrlPwhite') >= 0 ? -1 : 0 -endfunction - -function! airline#extensions#ctrlp#init(ext) - let g:ctrlp_status_func = { - \ 'main': 'airline#extensions#ctrlp#ctrlp_airline', - \ 'prog': 'airline#extensions#ctrlp#ctrlp_airline_status', - \ } - call a:ext.add_statusline_func('airline#extensions#ctrlp#apply') - call a:ext.add_theme_func('airline#extensions#ctrlp#load_theme') -endfunction - diff --git a/bundle/airline/autoload/airline/extensions/default.vim b/bundle/airline/autoload/airline/extensions/default.vim deleted file mode 100755 index faa1fb6..0000000 --- a/bundle/airline/autoload/airline/extensions/default.vim +++ /dev/null @@ -1,81 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -let s:section_truncate_width = get(g:, 'airline#extensions#default#section_truncate_width', { - \ 'b': 79, - \ 'x': 60, - \ 'y': 88, - \ 'z': 45, - \ }) -let s:layout = get(g:, 'airline#extensions#default#layout', [ - \ [ 'a', 'b', 'c' ], - \ [ 'x', 'y', 'z', 'warning' ] - \ ]) - -function! s:get_section(winnr, key, ...) - if has_key(s:section_truncate_width, a:key) - if winwidth(a:winnr) < s:section_truncate_width[a:key] - return '' - endif - endif - let spc = g:airline_symbols.space - let text = airline#util#getwinvar(a:winnr, 'airline_section_'.a:key, g:airline_section_{a:key}) - let [prefix, suffix] = [get(a:000, 0, '%('.spc), get(a:000, 1, spc.'%)')] - return empty(text) ? '' : prefix.text.suffix -endfunction - -function! s:build_sections(builder, context, keys) - for key in a:keys - if key == 'warning' && !a:context.active - continue - endif - call s:add_section(a:builder, a:context, key) - endfor -endfunction - -if v:version >= 704 || (v:version >= 703 && has('patch81')) - function s:add_section(builder, context, key) - " i have no idea why the warning section needs special treatment, but it's - " needed to prevent separators from showing up - if a:key == 'warning' - call a:builder.add_raw('%(') - endif - call a:builder.add_section('airline_'.a:key, s:get_section(a:context.winnr, a:key)) - if a:key == 'warning' - call a:builder.add_raw('%)') - endif - endfunction -else - " older version don't like the use of %(%) - function s:add_section(builder, context, key) - if a:key == 'warning' - call a:builder.add_raw('%#airline_warning#'.s:get_section(a:context.winnr, a:key)) - else - call a:builder.add_section('airline_'.a:key, s:get_section(a:context.winnr, a:key)) - endif - endfunction -endif - -function! airline#extensions#default#apply(builder, context) - let winnr = a:context.winnr - let active = a:context.active - - if airline#util#getwinvar(winnr, 'airline_render_left', active || (!active && !g:airline_inactive_collapse)) - call s:build_sections(a:builder, a:context, s:layout[0]) - else - let text = s:get_section(winnr, 'c') - if empty(text) - let text = ' %f%m ' - endif - call a:builder.add_section('airline_c'.(a:context.bufnr), text) - endif - - call a:builder.split(s:get_section(winnr, 'gutter', '', '')) - - if airline#util#getwinvar(winnr, 'airline_render_right', 1) - call s:build_sections(a:builder, a:context, s:layout[1]) - endif - - return 1 -endfunction - diff --git a/bundle/airline/autoload/airline/extensions/eclim.vim b/bundle/airline/autoload/airline/extensions/eclim.vim deleted file mode 100755 index e2f6531..0000000 --- a/bundle/airline/autoload/airline/extensions/eclim.vim +++ /dev/null @@ -1,53 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -if !exists(':ProjectCreate') - finish -endif - -function! airline#extensions#eclim#creat_line(...) - if &filetype == "tree" - let builder = a:1 - call builder.add_section('airline_a', ' Project ') - call builder.add_section('airline_b', ' %f ') - call builder.add_section('airline_c', '') - return 1 - endif -endfunction - -function! airline#extensions#eclim#get_warnings() - let eclimList = eclim#display#signs#GetExisting() - - if !empty(eclimList) - " Remove any non-eclim signs (see eclim#display#signs#Update) - " First check for just errors since they are more important. - " If there are no errors, then check for warnings. - let errorList = filter(copy(eclimList), 'v:val.name =~ "^\\(qf_\\)\\?\\(error\\)$"') - - if (empty(errorList)) - " use the warnings - call filter(eclimList, 'v:val.name =~ "^\\(qf_\\)\\?\\(warning\\)$"') - let type = 'W' - else - " Use the errors - let eclimList = errorList - let type = 'E' - endif - - if !empty(eclimList) - let errorsLine = eclimList[0]['line'] - let errorsNumber = len(eclimList) - let errors = "[Eclim:" . type . " line:".string(errorsLine)." (".string(errorsNumber).")]" - if !exists(':SyntasticCheck') || SyntasticStatuslineFlag() == '' - return errors.(g:airline_symbols.space) - endif - endif - endif - return '' -endfunction - -function! airline#extensions#eclim#init(ext) - call airline#parts#define_function('eclim', 'airline#extensions#eclim#get_warnings') - call a:ext.add_statusline_func('airline#extensions#eclim#creat_line') -endfunction - diff --git a/bundle/airline/autoload/airline/extensions/example.vim b/bundle/airline/autoload/airline/extensions/example.vim deleted file mode 100755 index 4a1932d..0000000 --- a/bundle/airline/autoload/airline/extensions/example.vim +++ /dev/null @@ -1,54 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -" we don't actually want this loaded :P -finish - -" Due to some potential rendering issues, the use of the `space` variable is -" recommended. -let s:spc = g:airline_symbols.space - -" Extension specific variables can be defined the usual fashion. -if !exists('g:airline#extensions#example#number_of_cats') - let g:airline#extensions#example#number_of_cats = 42 -endif - -" First we define an init function that will be invoked from extensions.vim -function! airline#extensions#example#init(ext) - - " Here we define a new part for the plugin. This allows users to place this - " extension in arbitrary locations. - call airline#parts#define_raw('cats', '%{airline#extensions#example#get_cats()}') - - " Next up we add a funcref so that we can run some code prior to the - " statusline getting modifed. - call a:ext.add_statusline_func('airline#extensions#example#apply') - - " You can also add a funcref for inactive statuslines. - " call a:ext.add_inactive_statusline_func('airline#extensions#example#unapply') -endfunction - -" This function will be invoked just prior to the statusline getting modified. -function! airline#extensions#example#apply(...) - " First we check for the filetype. - if &filetype == "nyancat" - - " Let's say we want to append to section_c, first we check if there's - " already a window-local override, and if not, create it off of the global - " section_c. - let w:airline_section_c = get(w:, 'airline_section_c', g:airline_section_c) - - " Then we just append this extenion to it, optionally using separators. - let w:airline_section_c .= s:spc.g:airline_left_alt_sep.s:spc.'%{airline#extensions#example#get_cats()}' - endif -endfunction - -" Finally, this function will be invoked from the statusline. -function! airline#extensions#example#get_cats() - let cats = '' - for i in range(1, g:airline#extensions#example#number_of_cats) - let cats .= ' (,,,)=(^.^)=(,,,) ' - endfor - return cats -endfunction - diff --git a/bundle/airline/autoload/airline/extensions/hunks.vim b/bundle/airline/autoload/airline/extensions/hunks.vim deleted file mode 100755 index 968fd66..0000000 --- a/bundle/airline/autoload/airline/extensions/hunks.vim +++ /dev/null @@ -1,82 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -if !get(g:, 'loaded_signify', 0) && !get(g:, 'loaded_gitgutter', 0) && !get(g:, 'loaded_changes', 0) - finish -endif - -let s:non_zero_only = get(g:, 'airline#extensions#hunks#non_zero_only', 0) -let s:hunk_symbols = get(g:, 'airline#extensions#hunks#hunk_symbols', ['+', '~', '-']) - -function! s:get_hunks_signify() - let hunks = sy#repo#get_stats() - if hunks[0] >= 0 - return hunks - endif - return [] -endfunction - -function! s:is_branch_empty() - return exists('*airline#extensions#branch#head') && empty(airline#extensions#branch#head()) -endfunction - -function! s:get_hunks_gitgutter() - if !get(g:, 'gitgutter_enabled', 0) || s:is_branch_empty() - return '' - endif - return GitGutterGetHunkSummary() -endfunction - -function! s:get_hunks_changes() - if !get(b:, 'changes_view_enabled', 0) || s:is_branch_empty() - return [] - endif - let hunks = changes#GetStats() - for i in hunks - if i > 0 - return hunks - endif - endfor - return [] -endfunction - -function! s:get_hunks_empty() - return '' -endfunction - -let s:source_func = '' -function! s:get_hunks() - if empty(s:source_func) - if get(g:, 'loaded_signify', 0) - let s:source_func = 's:get_hunks_signify' - elseif exists('*GitGutterGetHunkSummary') - let s:source_func = 's:get_hunks_gitgutter' - elseif exists('*changes#GetStats') - let s:source_func = 's:get_hunks_changes' - else - let s:source_func = 's:get_hunks_empty' - endif - endif - return {s:source_func}() -endfunction - -function! airline#extensions#hunks#get_hunks() - if !get(w:, 'airline_active', 0) - return '' - endif - let hunks = s:get_hunks() - let string = '' - if !empty(hunks) - for i in [0, 1, 2] - if s:non_zero_only == 0 || hunks[i] > 0 - let string .= printf('%s%s ', s:hunk_symbols[i], hunks[i]) - endif - endfor - endif - return string -endfunction - -function! airline#extensions#hunks#init(ext) - call airline#parts#define_function('hunks', 'airline#extensions#hunks#get_hunks') -endfunction - diff --git a/bundle/airline/autoload/airline/extensions/netrw.vim b/bundle/airline/autoload/airline/extensions/netrw.vim deleted file mode 100755 index debb088..0000000 --- a/bundle/airline/autoload/airline/extensions/netrw.vim +++ /dev/null @@ -1,32 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -if !exists(':NetrwSettings') - finish -endif - -function! airline#extensions#netrw#apply(...) - if &ft == 'netrw' - let spc = g:airline_symbols.space - - call a:1.add_section('airline_a', spc.'netrw'.spc) - if exists('*airline#extensions#branch#get_head') - call a:1.add_section('airline_b', spc.'%{airline#extensions#branch#get_head()}'.spc) - endif - call a:1.add_section('airline_c', spc.'%f'.spc) - call a:1.split() - call a:1.add_section('airline_y', spc.'%{airline#extensions#netrw#sortstring()}'.spc) - return 1 - endif -endfunction - -function! airline#extensions#netrw#init(ext) - let g:netrw_force_overwrite_statusline = 0 - call a:ext.add_statusline_func('airline#extensions#netrw#apply') -endfunction - - -function! airline#extensions#netrw#sortstring() - let order = (g:netrw_sort_direction =~ 'n') ? '+' : '-' - return g:netrw_sort_by . (g:airline_symbols.space) . '[' . order . ']' -endfunction diff --git a/bundle/airline/autoload/airline/extensions/nrrwrgn.vim b/bundle/airline/autoload/airline/extensions/nrrwrgn.vim deleted file mode 100755 index 338f6e0..0000000 --- a/bundle/airline/autoload/airline/extensions/nrrwrgn.vim +++ /dev/null @@ -1,54 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -if !get(g:, 'loaded_nrrw_rgn', 0) - finish -endif - -function! airline#extensions#nrrwrgn#apply(...) - if exists(":WidenRegion") == 2 - let spc = g:airline_symbols.space - if !exists("*nrrwrgn#NrrwRgnStatus()") || empty(nrrwrgn#NrrwRgnStatus()) - call a:1.add_section('airline_a', printf('%s[Narrowed%s#%d]', spc, spc, b:nrrw_instn)) - let bufname=(get(b:, 'orig_buf', 0) ? bufname(b:orig_buf) : substitute(bufname('%'), '^Nrrwrgn_\zs.*\ze_\d\+$', submatch(0), '')) - call a:1.add_section('airline_c', spc.bufname.spc) - call a:1.split() - else - let dict=nrrwrgn#NrrwRgnStatus() - let vmode = { 'v': 'Char ', 'V': 'Line ', '': 'Block '} - let mode = dict.visual ? vmode[dict.visual] : vmode['V'] - let winwidth = winwidth(0) - if winwidth < 80 - let mode = mode[0] - endif - let title = (winwidth < 80 ? "Nrrw" : "Narrowed ") - let multi = (winwidth < 80 ? 'M' : 'Multi') - call a:1.add_section('airline_a', printf('[%s%s%s#%d]%s', (dict.multi ? multi : ""), - \ title, mode, b:nrrw_instn, spc)) - let name = dict.fullname - if name !=# '[No Name]' - if winwidth > 100 - " need some space - let name = fnamemodify(dict.fullname, ':~') - if strlen(name) > 8 - " shorten name - let name = substitute(name, '\(.\)[^/\\]*\([/\\]\)', '\1\2', 'g') - endif - else - let name = fnamemodify(dict.fullname, ':t') - endif - endif - let range=(dict.multi ? '' : printf("[%d-%d]", dict.start[1], dict.end[1])) - call a:1.add_section('airline_c', printf("%s %s %s", name, range, dict.enabled ? "\u2713" : '!')) - call a:1.split() - call a:1.add_section('airline_x', get(g:, 'airline_section_x').spc) - call a:1.add_section('airline_y', spc.get(g:, 'airline_section_y').spc) - call a:1.add_section('airline_z', spc.get(g:, 'airline_section_z')) - endif - return 1 - endif -endfunction - -function! airline#extensions#nrrwrgn#init(ext) - call a:ext.add_statusline_func('airline#extensions#nrrwrgn#apply') -endfunction diff --git a/bundle/airline/autoload/airline/extensions/promptline.vim b/bundle/airline/autoload/airline/extensions/promptline.vim deleted file mode 100755 index 50b9708..0000000 --- a/bundle/airline/autoload/airline/extensions/promptline.vim +++ /dev/null @@ -1,33 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -if !exists(':PromptlineSnapshot') - finish -endif - -if !exists('airline#extensions#promptline#snapshot_file') || !len('airline#extensions#promptline#snapshot_file') - finish -endif - -let s:prompt_snapshot_file = get(g:, 'airline#extensions#promptline#snapshot_file', '') -let s:color_template = get(g:, 'airline#extensions#promptline#color_template', 'normal') - -function! airline#extensions#promptline#init(ext) - call a:ext.add_theme_func('airline#extensions#promptline#set_prompt_colors') -endfunction - -function! airline#extensions#promptline#set_prompt_colors(palette) - let color_template = has_key(a:palette, s:color_template) ? s:color_template : 'normal' - let mode_palette = a:palette[color_template] - - if !has_key(g:, 'promptline_symbols') - let g:promptline_symbols = { - \ 'left' : g:airline_left_sep, - \ 'right' : g:airline_right_sep, - \ 'left_alt' : g:airline_left_alt_sep, - \ 'right_alt' : g:airline_right_alt_sep} - endif - - let promptline_theme = promptline#api#create_theme_from_airline(mode_palette) - call promptline#api#create_snapshot_with_theme(s:prompt_snapshot_file, promptline_theme) -endfunction diff --git a/bundle/airline/autoload/airline/extensions/quickfix.vim b/bundle/airline/autoload/airline/extensions/quickfix.vim deleted file mode 100755 index 2be4077..0000000 --- a/bundle/airline/autoload/airline/extensions/quickfix.vim +++ /dev/null @@ -1,37 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -let g:airline#extensions#quickfix#quickfix_text = 'Quickfix' -let g:airline#extensions#quickfix#location_text = 'Location' - -function! airline#extensions#quickfix#apply(...) - if &buftype == 'quickfix' - let w:airline_section_a = s:get_text() - let w:airline_section_b = '%{get(w:, "quickfix_title", "")}' - let w:airline_section_c = '' - let w:airline_section_x = '' - endif -endfunction - -function! airline#extensions#quickfix#init(ext) - call a:ext.add_statusline_func('airline#extensions#quickfix#apply') -endfunction - -function! s:get_text() - redir => buffers - silent ls - redir END - - let nr = bufnr('%') - for buf in split(buffers, '\n') - if match(buf, '\v^\s*'.nr) > -1 - if match(buf, '\cQuickfix') > -1 - return g:airline#extensions#quickfix#quickfix_text - else - return g:airline#extensions#quickfix#location_text - endif - endif - endfor - return '' -endfunction - diff --git a/bundle/airline/autoload/airline/extensions/syntastic.vim b/bundle/airline/autoload/airline/extensions/syntastic.vim deleted file mode 100755 index f7179af..0000000 --- a/bundle/airline/autoload/airline/extensions/syntastic.vim +++ /dev/null @@ -1,19 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -if !exists(':SyntasticCheck') - finish -endif - -function! airline#extensions#syntastic#get_warnings() - let errors = SyntasticStatuslineFlag() - if strlen(errors) > 0 - return errors.(g:airline_symbols.space) - endif - return '' -endfunction - -function! airline#extensions#syntastic#init(ext) - call airline#parts#define_function('syntastic', 'airline#extensions#syntastic#get_warnings') -endfunction - diff --git a/bundle/airline/autoload/airline/extensions/tabline.vim b/bundle/airline/autoload/airline/extensions/tabline.vim deleted file mode 100755 index bbab057..0000000 --- a/bundle/airline/autoload/airline/extensions/tabline.vim +++ /dev/null @@ -1,363 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -let s:formatter = get(g:, 'airline#extensions#tabline#formatter', 'default') -let s:excludes = get(g:, 'airline#extensions#tabline#excludes', []) -let s:tab_nr_type = get(g:, 'airline#extensions#tabline#tab_nr_type', 0) -let s:show_buffers = get(g:, 'airline#extensions#tabline#show_buffers', 1) -let s:show_tab_nr = get(g:, 'airline#extensions#tabline#show_tab_nr', 1) -let s:show_tab_type = get(g:, 'airline#extensions#tabline#show_tab_type', 1) -let s:show_close_button = get(g:, 'airline#extensions#tabline#show_close_button', 1) -let s:close_symbol = get(g:, 'airline#extensions#tabline#close_symbol', 'X') -let s:buffer_idx_mode = get(g:, 'airline#extensions#tabline#buffer_idx_mode', 0) -let s:buf_min_count = get(g:, 'airline#extensions#tabline#buffer_min_count', 0) -let s:tab_min_count = get(g:, 'airline#extensions#tabline#tab_min_count', 0) -let s:spc = g:airline_symbols.space - -let s:number_map = &encoding == 'utf-8' - \ ? { - \ '0': '⁰', - \ '1': '¹', - \ '2': '²', - \ '3': '³', - \ '4': '⁴', - \ '5': '⁵', - \ '6': '⁶', - \ '7': '⁷', - \ '8': '⁸', - \ '9': '⁹' - \ } - \ : {} - -function! airline#extensions#tabline#init(ext) - if has('gui_running') - set guioptions-=e - endif - - autocmd User AirlineToggledOn call s:toggle_on() - autocmd User AirlineToggledOff call s:toggle_off() - autocmd BufDelete * let s:current_bufnr = -1 - - call s:toggle_on() - call a:ext.add_theme_func('airline#extensions#tabline#load_theme') - if s:buffer_idx_mode - call s:define_buffer_idx_mode_mappings() - endif -endfunction - -function! s:toggle_off() - if exists('s:original_tabline') - let &tabline = s:original_tabline - let &showtabline = s:original_showtabline - endif -endfunction - -function! s:toggle_on() - let [ s:original_tabline, s:original_showtabline ] = [ &tabline, &showtabline ] - - set tabline=%!airline#extensions#tabline#get() - if s:buf_min_count <= 0 && s:tab_min_count <= 1 - set showtabline=2 - else - augroup airline_tabline - autocmd! - if s:show_buffers == 1 - autocmd BufEnter * call show_tabline(s:buf_min_count, len(s:get_buffer_list())) - autocmd BufUnload * call show_tabline(s:buf_min_count, len(s:get_buffer_list()) - 1) - else - autocmd TabEnter * call show_tabline(s:tab_min_count, tabpagenr('$')) - endif - augroup END - endif -endfunction - -function! airline#extensions#tabline#load_theme(palette) - let colors = get(a:palette, 'tabline', {}) - let l:tab = get(colors, 'airline_tab', a:palette.normal.airline_b) - let l:tabsel = get(colors, 'airline_tabsel', a:palette.normal.airline_a) - let l:tabtype = get(colors, 'airline_tabtype', a:palette.visual.airline_a) - let l:tabfill = get(colors, 'airline_tabfill', a:palette.normal.airline_c) - let l:tabmod = get(colors, 'airline_tabmod', a:palette.insert.airline_a) - if has_key(a:palette, 'normal_modified') && has_key(a:palette.normal_modified, 'airline_c') - let l:tabmodu = get(colors, 'airline_tabmod_unsel', a:palette.normal_modified.airline_c) - else - "Fall back to normal airline_c if modified airline_c isn't present - let l:tabmodu = get(colors, 'airline_tabmod_unsel', a:palette.normal.airline_c) - endif - - let l:tabhid = get(colors, 'airline_tabhid', a:palette.normal.airline_c) - call airline#highlighter#exec('airline_tab', l:tab) - call airline#highlighter#exec('airline_tabsel', l:tabsel) - call airline#highlighter#exec('airline_tabtype', l:tabtype) - call airline#highlighter#exec('airline_tabfill', l:tabfill) - call airline#highlighter#exec('airline_tabmod', l:tabmod) - call airline#highlighter#exec('airline_tabmod_unsel', l:tabmodu) - call airline#highlighter#exec('airline_tabhid', l:tabhid) -endfunction - -function! s:show_tabline(min_count, total_count) - if a:total_count >= a:min_count - if &showtabline != 2 - set showtabline=2 - endif - else - if &showtabline != 0 - set showtabline=0 - endif - endif -endfunction - -function! airline#extensions#tabline#get() - let curtabcnt = tabpagenr('$') - if curtabcnt != s:current_tabcnt - let s:current_tabcnt = curtabcnt - let s:current_bufnr = -1 " force a refresh... - endif - if s:show_buffers && curtabcnt == 1 - return s:get_buffers() - else - return s:get_tabs() - endif -endfunction - -function! airline#extensions#tabline#title(n) - let buflist = tabpagebuflist(a:n) - let winnr = tabpagewinnr(a:n) - return airline#extensions#tabline#get_buffer_name(buflist[winnr - 1]) -endfunction - -function! airline#extensions#tabline#get_buffer_name(nr) - return airline#extensions#tabline#{s:formatter}#format(a:nr, get(s:, 'current_buffer_list', s:get_buffer_list())) -endfunction - -function! s:get_buffer_list() - let buffers = [] - let cur = bufnr('%') - for nr in range(1, bufnr('$')) - if buflisted(nr) && bufexists(nr) - for ex in s:excludes - if match(bufname(nr), ex) - continue - endif - endfor - if getbufvar(nr, 'current_syntax') == 'qf' - continue - endif - call add(buffers, nr) - endif - endfor - - let s:current_buffer_list = buffers - return buffers -endfunction - -function! s:get_visible_buffers() - let buffers = s:get_buffer_list() - let cur = bufnr('%') - - let total_width = 0 - let max_width = 0 - - for nr in buffers - let width = len(airline#extensions#tabline#get_buffer_name(nr)) + 4 - let total_width += width - let max_width = max([max_width, width]) - endfor - - " only show current and surrounding buffers if there are too many buffers - let position = index(buffers, cur) - let vimwidth = &columns - if total_width > vimwidth && position > -1 - let buf_count = len(buffers) - - " determine how many buffers to show based on the longest buffer width, - " use one on the right side and put the rest on the left - let buf_max = vimwidth / max_width - let buf_right = 1 - let buf_left = max([0, buf_max - buf_right]) - - let start = max([0, position - buf_left]) - let end = min([buf_count, position + buf_right]) - - " fill up available space on the right - if position < buf_left - let end += (buf_left - position) - endif - - " fill up available space on the left - if end > buf_count - 1 - buf_right - let start -= max([0, buf_right - (buf_count - 1 - position)]) - endif - - let buffers = eval('buffers[' . start . ':' . end . ']') - - if start > 0 - call insert(buffers, -1, 0) - endif - - if end < buf_count - 1 - call add(buffers, -1) - endif - endif - - let g:current_visible_buffers = buffers - return buffers -endfunction - -let s:current_bufnr = -1 -let s:current_tabnr = -1 -let s:current_tabcnt = -1 -let s:current_tabline = '' -let s:current_modified = 0 -function! s:get_buffers() - let cur = bufnr('%') - if cur == s:current_bufnr - if !g:airline_detect_modified || getbufvar(cur, '&modified') == s:current_modified - return s:current_tabline - endif - endif - - let l:index = 1 - let b = s:new_builder() - let tab_bufs = tabpagebuflist(tabpagenr()) - for nr in s:get_visible_buffers() - if nr < 0 - call b.add_raw('%#airline_tabhid#...') - continue - endif - - if cur == nr - if g:airline_detect_modified && getbufvar(nr, '&modified') - let group = 'airline_tabmod' - else - let group = 'airline_tabsel' - endif - let s:current_modified = (group == 'airline_tabmod') ? 1 : 0 - else - if g:airline_detect_modified && getbufvar(nr, '&modified') - let group = 'airline_tabmod_unsel' - elseif index(tab_bufs, nr) > -1 - let group = 'airline_tab' - else - let group = 'airline_tabhid' - endif - endif - - if s:buffer_idx_mode - if len(s:number_map) > 0 - call b.add_section(group, s:spc . get(s:number_map, l:index, '') . '%(%{airline#extensions#tabline#get_buffer_name('.nr.')}%)' . s:spc) - else - call b.add_section(group, '['.l:index.s:spc.'%(%{airline#extensions#tabline#get_buffer_name('.nr.')}%)'.']') - endif - let l:index = l:index + 1 - else - call b.add_section(group, s:spc.'%(%{airline#extensions#tabline#get_buffer_name('.nr.')}%)'.s:spc) - endif - endfor - - call b.add_section('airline_tabfill', '') - call b.split() - call b.add_section('airline_tabfill', '') - call b.add_section('airline_tabtype', ' buffers ') - - let s:current_bufnr = cur - let s:current_tabline = b.build() - return s:current_tabline -endfunction - -function! s:select_tab(buf_index) - " no-op when called in the NERDTree buffer - if exists('t:NERDTreeBufName') && bufname('%') == t:NERDTreeBufName - return - endif - - let idx = a:buf_index - if g:current_visible_buffers[0] == -1 - let idx = idx + 1 - endif - - let buf = get(g:current_visible_buffers, idx, 0) - if buf != 0 - exec 'b!' . buf - endif -endfunction - -function! s:define_buffer_idx_mode_mappings() - noremap AirlineSelectTab1 :call select_tab(0) - noremap AirlineSelectTab2 :call select_tab(1) - noremap AirlineSelectTab3 :call select_tab(2) - noremap AirlineSelectTab4 :call select_tab(3) - noremap AirlineSelectTab5 :call select_tab(4) - noremap AirlineSelectTab6 :call select_tab(5) - noremap AirlineSelectTab7 :call select_tab(6) - noremap AirlineSelectTab8 :call select_tab(7) - noremap AirlineSelectTab9 :call select_tab(8) -endfunction - -function! s:new_builder() - let builder_context = { - \ 'active' : 1, - \ 'right_sep' : get(g:, 'airline#extensions#tabline#right_sep' , g:airline_right_sep), - \ 'right_alt_sep' : get(g:, 'airline#extensions#tabline#right_alt_sep', g:airline_right_alt_sep), - \ } - if get(g:, 'airline_powerline_fonts', 0) - let builder_context.left_sep = get(g:, 'airline#extensions#tabline#left_sep' , g:airline_left_sep) - let builder_context.left_alt_sep = get(g:, 'airline#extensions#tabline#left_alt_sep' , g:airline_left_alt_sep) - else - let builder_context.left_sep = get(g:, 'airline#extensions#tabline#left_sep' , ' ') - let builder_context.left_alt_sep = get(g:, 'airline#extensions#tabline#left_alt_sep' , '|') - endif - - return airline#builder#new(builder_context) -endfunction - -function! s:get_tabs() - let curbuf = bufnr('%') - let curtab = tabpagenr() - if curbuf == s:current_bufnr && curtab == s:current_tabnr - if !g:airline_detect_modified || getbufvar(curbuf, '&modified') == s:current_modified - return s:current_tabline - endif - endif - - let b = s:new_builder() - for i in range(1, tabpagenr('$')) - if i == curtab - let group = 'airline_tabsel' - if g:airline_detect_modified - for bi in tabpagebuflist(i) - if getbufvar(bi, '&modified') - let group = 'airline_tabmod' - endif - endfor - endif - let s:current_modified = (group == 'airline_tabmod') ? 1 : 0 - else - let group = 'airline_tab' - endif - let val = '%(' - if s:show_tab_nr - if s:tab_nr_type == 0 - let val .= ' %{len(tabpagebuflist('.i.'))}' - else - let val .= (g:airline_symbols.space).i - endif - endif - call b.add_section(group, val.'%'.i.'T %{airline#extensions#tabline#title('.i.')} %)') - endfor - - call b.add_raw('%T') - call b.add_section('airline_tabfill', '') - call b.split() - if s:show_close_button - call b.add_section('airline_tab', ' %999X'.s:close_symbol.' ') - endif - if s:show_tab_type - call b.add_section('airline_tabtype', ' tabs ') - endif - - let s:current_bufnr = curbuf - let s:current_tabnr = curtab - let s:current_tabline = b.build() - return s:current_tabline -endfunction diff --git a/bundle/airline/autoload/airline/extensions/tabline/default.vim b/bundle/airline/autoload/airline/extensions/tabline/default.vim deleted file mode 100755 index 4f1ed40..0000000 --- a/bundle/airline/autoload/airline/extensions/tabline/default.vim +++ /dev/null @@ -1,35 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -let s:fmod = get(g:, 'airline#extensions#tabline#fnamemod', ':~:.') -let s:fnamecollapse = get(g:, 'airline#extensions#tabline#fnamecollapse', 1) -let s:buf_nr_format = get(g:, 'airline#extensions#tabline#buffer_nr_format', '%s: ') -let s:buf_nr_show = get(g:, 'airline#extensions#tabline#buffer_nr_show', 0) -let s:buf_modified_symbol = g:airline_symbols.modified - -function! airline#extensions#tabline#default#format(bufnr, buffers) - let _ = '' - - let name = bufname(a:bufnr) - if empty(name) - let _ .= '[No Name]' - else - if s:fnamecollapse - let _ .= substitute(fnamemodify(name, s:fmod), '\v\w\zs.{-}\ze(\\|/)', '', 'g') - else - let _ .= fnamemodify(name, s:fmod) - endif - endif - - return airline#extensions#tabline#default#wrap_name(a:bufnr, _) -endfunction - -function! airline#extensions#tabline#default#wrap_name(bufnr, buffer_name) - let _ = s:buf_nr_show ? printf(s:buf_nr_format, a:bufnr) : '' - let _ .= substitute(a:buffer_name, '\\', '/', 'g') - - if getbufvar(a:bufnr, '&modified') == 1 - let _ .= s:buf_modified_symbol - endif - return _ -endfunction diff --git a/bundle/airline/autoload/airline/extensions/tabline/unique_tail.vim b/bundle/airline/autoload/airline/extensions/tabline/unique_tail.vim deleted file mode 100755 index e4a790d..0000000 --- a/bundle/airline/autoload/airline/extensions/tabline/unique_tail.vim +++ /dev/null @@ -1,27 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -function! airline#extensions#tabline#unique_tail#format(bufnr, buffers) - let duplicates = {} - let tails = {} - let map = {} - for nr in a:buffers - let name = bufname(nr) - if empty(name) - let map[nr] = '[No Name]' - else - let tail = fnamemodify(name, ':t') - if has_key(tails, tail) - let duplicates[nr] = nr - endif - let tails[tail] = 1 - let map[nr] = airline#extensions#tabline#default#wrap_name(nr, tail) - endif - endfor - - for nr in values(duplicates) - let map[nr] = airline#extensions#tabline#default#wrap_name(nr, fnamemodify(bufname(nr), ':p:.')) - endfor - - return map[a:bufnr] -endfunction diff --git a/bundle/airline/autoload/airline/extensions/tabline/unique_tail_improved.vim b/bundle/airline/autoload/airline/extensions/tabline/unique_tail_improved.vim deleted file mode 100755 index 3590fbb..0000000 --- a/bundle/airline/autoload/airline/extensions/tabline/unique_tail_improved.vim +++ /dev/null @@ -1,89 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -let s:skip_symbol = '…' - -function! airline#extensions#tabline#unique_tail_improved#format(bufnr, buffers) - if len(a:buffers) <= 1 " don't need to compare bufnames if has less than one buffer opened - return airline#extensions#tabline#default#format(a:bufnr, a:buffers) - endif - - let curbuf_tail = fnamemodify(bufname(a:bufnr), ':t') - let do_deduplicate = 0 - let path_tokens = {} - - for nr in a:buffers - let name = bufname(nr) - if !empty(name) && nr != a:bufnr && fnamemodify(name, ':t') == curbuf_tail " only perform actions if curbuf_tail isn't unique - let do_deduplicate = 1 - let tokens = reverse(split(substitute(fnamemodify(name, ':p:h'), '\\', '/', 'g'), '/')) - let token_index = 0 - for token in tokens - if token == '' | continue | endif - if token == '.' | break | endif - if !has_key(path_tokens, token_index) - let path_tokens[token_index] = {} - endif - let path_tokens[token_index][token] = 1 - let token_index += 1 - endfor - endif - endfor - - if do_deduplicate == 1 - let path = [] - let token_index = 0 - for token in reverse(split(substitute(fnamemodify(bufname(a:bufnr), ':p:h'), '\\', '/', 'g'), '/')) - if token == '.' | break | endif - let duplicated = 0 - let uniq = 1 - let single = 1 - if has_key(path_tokens, token_index) - let duplicated = 1 - if len(keys(path_tokens[token_index])) > 1 | let single = 0 | endif - if has_key(path_tokens[token_index], token) | let uniq = 0 | endif - endif - call insert(path, {'token': token, 'duplicated': duplicated, 'uniq': uniq, 'single': single}) - let token_index += 1 - endfor - - let buf_name = [curbuf_tail] - let has_uniq = 0 - let has_skipped = 0 - for token1 in reverse(path) - if !token1['duplicated'] && len(buf_name) > 1 - call insert(buf_name, s:skip_symbol) - let has_skipped = 0 - break - endif - - if has_uniq == 1 - call insert(buf_name, s:skip_symbol) - let has_skipped = 0 - break - endif - - if token1['uniq'] == 0 && token1['single'] == 1 - let has_skipped = 1 - else - if has_skipped == 1 - call insert(buf_name, s:skip_symbol) - let has_skipped = 0 - endif - call insert(buf_name, token1['token']) - endif - - if token1['uniq'] == 1 - let has_uniq = 1 - endif - endfor - - if has_skipped == 1 - call insert(buf_name, s:skip_symbol) - endif - - return airline#extensions#tabline#default#wrap_name(a:bufnr, join(buf_name, '/')) - else - return airline#extensions#tabline#default#format(a:bufnr, a:buffers) - endif -endfunction diff --git a/bundle/airline/autoload/airline/extensions/tagbar.vim b/bundle/airline/autoload/airline/extensions/tagbar.vim deleted file mode 100755 index 56919a8..0000000 --- a/bundle/airline/autoload/airline/extensions/tagbar.vim +++ /dev/null @@ -1,45 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -if !exists(':TagbarToggle') - finish -endif - -let s:flags = get(g:, 'airline#extensions#tagbar#flags', '') -let s:spc = g:airline_symbols.space - -" Arguments: current, sort, fname -function! airline#extensions#tagbar#get_status(...) - let builder = airline#builder#new({ 'active': a:1 }) - call builder.add_section('airline_a', s:spc.'Tagbar'.s:spc) - call builder.add_section('airline_b', s:spc.a:2.s:spc) - call builder.add_section('airline_c', s:spc.a:3.s:spc) - return builder.build() -endfunction - -function! airline#extensions#tagbar#inactive_apply(...) - if getwinvar(a:2.winnr, '&filetype') == 'tagbar' - return -1 - endif -endfunction - -let s:airline_tagbar_last_lookup_time = 0 -let s:airline_tagbar_last_lookup_val = '' -function! airline#extensions#tagbar#currenttag() - if get(w:, 'airline_active', 0) - if s:airline_tagbar_last_lookup_time != localtime() - let s:airline_tagbar_last_lookup_val = tagbar#currenttag('%s', '', s:flags) - let s:airline_tagbar_last_lookup_time = localtime() - endif - return s:airline_tagbar_last_lookup_val - endif - return '' -endfunction - -function! airline#extensions#tagbar#init(ext) - call a:ext.add_inactive_statusline_func('airline#extensions#tagbar#inactive_apply') - let g:tagbar_status_func = 'airline#extensions#tagbar#get_status' - - call airline#parts#define_function('tagbar', 'airline#extensions#tagbar#currenttag') -endfunction - diff --git a/bundle/airline/autoload/airline/extensions/tmuxline.vim b/bundle/airline/autoload/airline/extensions/tmuxline.vim deleted file mode 100755 index 363709b..0000000 --- a/bundle/airline/autoload/airline/extensions/tmuxline.vim +++ /dev/null @@ -1,26 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -if !exists(':Tmuxline') - finish -endif - -let s:tmuxline_snapshot_file = get(g:, 'airline#extensions#tmuxline#snapshot_file', '') -let s:color_template = get(g:, 'airline#extensions#tmuxline#color_template', 'normal') - -function! airline#extensions#tmuxline#init(ext) - call a:ext.add_theme_func('airline#extensions#tmuxline#set_tmux_colors') -endfunction - -function! airline#extensions#tmuxline#set_tmux_colors(palette) - let color_template = has_key(a:palette, s:color_template) ? s:color_template : 'normal' - let mode_palette = a:palette[color_template] - - let tmuxline_theme = tmuxline#api#create_theme_from_airline(mode_palette) - call tmuxline#api#set_theme(tmuxline_theme) - - if strlen(s:tmuxline_snapshot_file) - call tmuxline#api#snapshot(s:tmuxline_snapshot_file) - endif -endfunction - diff --git a/bundle/airline/autoload/airline/extensions/undotree.vim b/bundle/airline/autoload/airline/extensions/undotree.vim deleted file mode 100755 index f577ffd..0000000 --- a/bundle/airline/autoload/airline/extensions/undotree.vim +++ /dev/null @@ -1,27 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -if !exists(':UndotreeToggle') - finish -endif - -function! airline#extensions#undotree#apply(...) - if exists('t:undotree') - if &ft == 'undotree' - if exists('*t:undotree.GetStatusLine') - call airline#extensions#apply_left_override('undo', '%{t:undotree.GetStatusLine()}') - else - call airline#extensions#apply_left_override('undotree', '%f') - endif - endif - - if &ft == 'diff' && exists('*t:diffpanel.GetStatusLine') - call airline#extensions#apply_left_override('diff', '%{t:diffpanel.GetStatusLine()}') - endif - endif -endfunction - -function! airline#extensions#undotree#init(ext) - call a:ext.add_statusline_func('airline#extensions#undotree#apply') -endfunction - diff --git a/bundle/airline/autoload/airline/extensions/unite.vim b/bundle/airline/autoload/airline/extensions/unite.vim deleted file mode 100755 index d230b6f..0000000 --- a/bundle/airline/autoload/airline/extensions/unite.vim +++ /dev/null @@ -1,23 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -if !get(g:, 'loaded_unite', 0) - finish -endif - -function! airline#extensions#unite#apply(...) - if &ft == 'unite' - call a:1.add_section('airline_a', ' Unite ') - call a:1.add_section('airline_b', ' %{get(unite#get_context(), "buffer_name", "")} ') - call a:1.add_section('airline_c', ' %{unite#get_status_string()} ') - call a:1.split() - call a:1.add_section('airline_y', ' %{get(unite#get_context(), "real_buffer_name", "")} ') - return 1 - endif -endfunction - -function! airline#extensions#unite#init(ext) - let g:unite_force_overwrite_statusline = 0 - call a:ext.add_statusline_func('airline#extensions#unite#apply') -endfunction - diff --git a/bundle/airline/autoload/airline/extensions/virtualenv.vim b/bundle/airline/autoload/airline/extensions/virtualenv.vim deleted file mode 100755 index 27f847e..0000000 --- a/bundle/airline/autoload/airline/extensions/virtualenv.vim +++ /dev/null @@ -1,25 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -if !isdirectory($VIRTUAL_ENV) - finish -endif - -let s:spc = g:airline_symbols.space - -function! airline#extensions#virtualenv#init(ext) - call a:ext.add_statusline_func('airline#extensions#virtualenv#apply') -endfunction - -function! airline#extensions#virtualenv#apply(...) - if &filetype =~ "python" - if get(g:, 'virtualenv_loaded', 0) - let statusline = virtualenv#statusline() - else - let statusline = fnamemodify($VIRTUAL_ENV, ':t') - endif - call airline#extensions#append_to_section('x', - \ s:spc.g:airline_right_alt_sep.s:spc.statusline) - endif -endfunction - diff --git a/bundle/airline/autoload/airline/extensions/whitespace.vim b/bundle/airline/autoload/airline/extensions/whitespace.vim deleted file mode 100755 index 8657412..0000000 --- a/bundle/airline/autoload/airline/extensions/whitespace.vim +++ /dev/null @@ -1,103 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -" http://got-ravings.blogspot.com/2008/10/vim-pr0n-statusline-whitespace-flags.html - -" for backwards compatibility -if exists('g:airline_detect_whitespace') - let s:show_message = g:airline_detect_whitespace == 1 -else - let s:show_message = get(g:, 'airline#extensions#whitespace#show_message', 1) -endif - -let s:symbol = get(g:, 'airline#extensions#whitespace#symbol', g:airline_symbols.whitespace) -let s:default_checks = ['indent', 'trailing'] - -let s:trailing_format = get(g:, 'airline#extensions#whitespace#trailing_format', 'trailing[%s]') -let s:mixed_indent_format = get(g:, 'airline#extensions#whitespace#mixed_indent_format', 'mixed-indent[%s]') -let s:indent_algo = get(g:, 'airline#extensions#whitespace#mixed_indent_algo', 0) - -let s:max_lines = get(g:, 'airline#extensions#whitespace#max_lines', 20000) - -let s:enabled = get(g:, 'airline#extensions#whitespace#enabled', 1) - -function! s:check_mixed_indent() - if s:indent_algo == 1 - " [] - " spaces before or between tabs are not allowed - let t_s_t = '(^\t* +\t\s*\S)' - " ( x count) - " count of spaces at the end of tabs should be less then tabstop value - let t_l_s = '(^\t+ {' . &ts . ',}' . '\S)' - return search('\v' . t_s_t . '|' . t_l_s, 'nw') - else - return search('\v(^\t+ +)|(^ +\t+)', 'nw') - endif -endfunction - -function! airline#extensions#whitespace#check() - if &readonly || !&modifiable || !s:enabled || line('$') > s:max_lines - return '' - endif - - if !exists('b:airline_whitespace_check') - let b:airline_whitespace_check = '' - let checks = get(g:, 'airline#extensions#whitespace#checks', s:default_checks) - - let trailing = 0 - if index(checks, 'trailing') > -1 - let trailing = search('\s$', 'nw') - endif - - let mixed = 0 - if index(checks, 'indent') > -1 - let mixed = s:check_mixed_indent() - endif - - if trailing != 0 || mixed != 0 - let b:airline_whitespace_check = s:symbol - if s:show_message - if trailing != 0 - let b:airline_whitespace_check .= (g:airline_symbols.space).printf(s:trailing_format, trailing) - endif - if mixed != 0 - let b:airline_whitespace_check .= (g:airline_symbols.space).printf(s:mixed_indent_format, mixed) - endif - endif - endif - endif - return b:airline_whitespace_check -endfunction! - -function! airline#extensions#whitespace#toggle() - if s:enabled - augroup airline_whitespace - autocmd! - augroup END - augroup! airline_whitespace - let s:enabled = 0 - else - call airline#extensions#whitespace#init() - let s:enabled = 1 - endif - - if exists("g:airline#extensions#whitespace#enabled") - let g:airline#extensions#whitespace#enabled = s:enabled - if s:enabled && match(g:airline_section_warning, '#whitespace#check') < 0 - let g:airline_section_warning .= airline#section#create(['whitespace']) - call airline#update_statusline() - endif - endif - echo 'Whitespace checking: '.(s:enabled ? 'Enabled' : 'Disabled') -endfunction - -function! airline#extensions#whitespace#init(...) - call airline#parts#define_function('whitespace', 'airline#extensions#whitespace#check') - - unlet! b:airline_whitespace_check - augroup airline_whitespace - autocmd! - autocmd CursorHold,BufWritePost * unlet! b:airline_whitespace_check - augroup END -endfunction - diff --git a/bundle/airline/autoload/airline/extensions/windowswap.vim b/bundle/airline/autoload/airline/extensions/windowswap.vim deleted file mode 100755 index 2beb91c..0000000 --- a/bundle/airline/autoload/airline/extensions/windowswap.vim +++ /dev/null @@ -1,23 +0,0 @@ -" vim: et ts=2 sts=2 sw=2 - -if !exists('g:loaded_windowswap') - finish -endif - -let s:spc = g:airline_symbols.space - -if !exists('g:airline#extensions#windowswap#indicator_text') - let g:airline#extensions#windowswap#indicator_text = 'WS' -endif - -function! airline#extensions#windowswap#init(ext) - call airline#parts#define_function('windowswap', 'airline#extensions#windowswap#get_status') -endfunction - -function! airline#extensions#windowswap#get_status() - if WindowSwap#HasMarkedWindow() && WindowSwap#GetMarkedWindowNum() == winnr() - return g:airline#extensions#windowswap#indicator_text.s:spc - endif - return '' -endfunction - diff --git a/bundle/airline/autoload/airline/highlighter.vim b/bundle/airline/autoload/airline/highlighter.vim deleted file mode 100755 index 17a6cf5..0000000 --- a/bundle/airline/autoload/airline/highlighter.vim +++ /dev/null @@ -1,159 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -let s:is_win32term = (has('win32') || has('win64')) && !has('gui_running') -let s:separators = {} -let s:accents = {} - -function! s:gui2cui(rgb, fallback) - if a:rgb == '' - return a:fallback - endif - let rgb = map(matchlist(a:rgb, '#\(..\)\(..\)\(..\)')[1:3], '0 + ("0x".v:val)') - let rgb = [rgb[0] > 127 ? 4 : 0, rgb[1] > 127 ? 2 : 0, rgb[2] > 127 ? 1 : 0] - return rgb[0]+rgb[1]+rgb[2] -endfunction - -function! s:get_syn(group, what) - " need to pass in mode, known to break on 7.3.547 - let mode = has('gui_running') ? 'gui' : 'cterm' - let color = synIDattr(synIDtrans(hlID(a:group)), a:what, mode) - if empty(color) || color == -1 - let color = synIDattr(synIDtrans(hlID('Normal')), a:what, mode) - endif - if empty(color) || color == -1 - if has('gui_running') - let color = a:what ==# 'fg' ? '#000000' : '#FFFFFF' - else - let color = a:what ==# 'fg' ? 0 : 1 - endif - endif - return color -endfunction - -function! s:get_array(fg, bg, opts) - let fg = a:fg - let bg = a:bg - return has('gui_running') - \ ? [ fg, bg, '', '', join(a:opts, ',') ] - \ : [ '', '', fg, bg, join(a:opts, ',') ] -endfunction - -function! airline#highlighter#get_highlight(group, ...) - let fg = s:get_syn(a:group, 'fg') - let bg = s:get_syn(a:group, 'bg') - let reverse = has('gui_running') - \ ? synIDattr(synIDtrans(hlID(a:group)), 'reverse', 'gui') - \ : synIDattr(synIDtrans(hlID(a:group)), 'reverse', 'cterm') - \|| synIDattr(synIDtrans(hlID(a:group)), 'reverse', 'term') - return reverse ? s:get_array(bg, fg, a:000) : s:get_array(fg, bg, a:000) -endfunction - -function! airline#highlighter#get_highlight2(fg, bg, ...) - let fg = s:get_syn(a:fg[0], a:fg[1]) - let bg = s:get_syn(a:bg[0], a:bg[1]) - return s:get_array(fg, bg, a:000) -endfunction - -function! airline#highlighter#exec(group, colors) - let colors = a:colors - if s:is_win32term - let colors[2] = s:gui2cui(get(colors, 0, ''), get(colors, 2, '')) - let colors[3] = s:gui2cui(get(colors, 1, ''), get(colors, 3, '')) - endif - exec printf('hi %s %s %s %s %s %s %s %s', - \ a:group, - \ get(colors, 0, '') != '' ? 'guifg='.colors[0] : '', - \ get(colors, 1, '') != '' ? 'guibg='.colors[1] : '', - \ get(colors, 2, '') != '' ? 'ctermfg='.colors[2] : '', - \ get(colors, 3, '') != '' ? 'ctermbg='.colors[3] : '', - \ get(colors, 4, '') != '' ? 'gui='.colors[4] : '', - \ get(colors, 4, '') != '' ? 'cterm='.colors[4] : '', - \ get(colors, 4, '') != '' ? 'term='.colors[4] : '') -endfunction - -function! s:exec_separator(dict, from, to, inverse, suffix) - let l:from = airline#themes#get_highlight(a:from.a:suffix) - let l:to = airline#themes#get_highlight(a:to.a:suffix) - let group = a:from.'_to_'.a:to.a:suffix - if a:inverse - let colors = [ l:from[1], l:to[1], l:from[3], l:to[3] ] - else - let colors = [ l:to[1], l:from[1], l:to[3], l:from[3] ] - endif - let a:dict[group] = colors - call airline#highlighter#exec(group, colors) -endfunction - -function! airline#highlighter#load_theme() - for winnr in filter(range(1, winnr('$')), 'v:val != winnr()') - call airline#highlighter#highlight_modified_inactive(winbufnr(winnr)) - endfor - call airline#highlighter#highlight(['inactive']) - call airline#highlighter#highlight(['normal']) -endfunction - -function! airline#highlighter#add_separator(from, to, inverse) - let s:separators[a:from.a:to] = [a:from, a:to, a:inverse] - call exec_separator({}, a:from, a:to, a:inverse, '') -endfunction - -function! airline#highlighter#add_accent(accent) - let s:accents[a:accent] = 1 -endfunction - -function! airline#highlighter#highlight_modified_inactive(bufnr) - if getbufvar(a:bufnr, '&modified') - let colors = exists('g:airline#themes#{g:airline_theme}#palette.inactive_modified.airline_c') - \ ? g:airline#themes#{g:airline_theme}#palette.inactive_modified.airline_c : [] - else - let colors = exists('g:airline#themes#{g:airline_theme}#palette.inactive.airline_c') - \ ? g:airline#themes#{g:airline_theme}#palette.inactive.airline_c : [] - endif - - if !empty(colors) - call airline#highlighter#exec('airline_c'.(a:bufnr).'_inactive', colors) - endif -endfunction - -function! airline#highlighter#highlight(modes) - let p = g:airline#themes#{g:airline_theme}#palette - - " draw the base mode, followed by any overrides - let mapped = map(a:modes, 'v:val == a:modes[0] ? v:val : a:modes[0]."_".v:val') - let suffix = a:modes[0] == 'inactive' ? '_inactive' : '' - for mode in mapped - if exists('g:airline#themes#{g:airline_theme}#palette[mode]') - let dict = g:airline#themes#{g:airline_theme}#palette[mode] - for kvp in items(dict) - let mode_colors = kvp[1] - call airline#highlighter#exec(kvp[0].suffix, mode_colors) - - for accent in keys(s:accents) - if !has_key(p.accents, accent) - continue - endif - let colors = copy(mode_colors) - if p.accents[accent][0] != '' - let colors[0] = p.accents[accent][0] - endif - if p.accents[accent][2] != '' - let colors[2] = p.accents[accent][2] - endif - if len(colors) >= 5 - let colors[4] = get(p.accents[accent], 4, '') - else - call add(colors, get(p.accents[accent], 4, '')) - endif - call airline#highlighter#exec(kvp[0].suffix.'_'.accent, colors) - endfor - endfor - - " TODO: optimize this - for sep in items(s:separators) - call exec_separator(dict, sep[1][0], sep[1][1], sep[1][2], suffix) - endfor - endif - endfor -endfunction - diff --git a/bundle/airline/autoload/airline/init.vim b/bundle/airline/autoload/airline/init.vim deleted file mode 100755 index 021b3b2..0000000 --- a/bundle/airline/autoload/airline/init.vim +++ /dev/null @@ -1,114 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -function! s:check_defined(variable, default) - if !exists(a:variable) - let {a:variable} = a:default - endif -endfunction - -let s:loaded = 0 -function! airline#init#bootstrap() - if s:loaded - return - endif - let s:loaded = 1 - - let g:airline#init#bootstrapping = 1 - - call s:check_defined('g:airline_left_sep', get(g:, 'airline_powerline_fonts', 0)?"\ue0b0":">") - call s:check_defined('g:airline_left_alt_sep', get(g:, 'airline_powerline_fonts', 0)?"\ue0b1":">") - call s:check_defined('g:airline_right_sep', get(g:, 'airline_powerline_fonts', 0)?"\ue0b2":"<") - call s:check_defined('g:airline_right_alt_sep', get(g:, 'airline_powerline_fonts', 0)?"\ue0b3":"<") - call s:check_defined('g:airline_detect_modified', 1) - call s:check_defined('g:airline_detect_paste', 1) - call s:check_defined('g:airline_detect_iminsert', 0) - call s:check_defined('g:airline_inactive_collapse', 1) - call s:check_defined('g:airline_exclude_filenames', ['DebuggerWatch','DebuggerStack','DebuggerStatus']) - call s:check_defined('g:airline_exclude_filetypes', []) - call s:check_defined('g:airline_exclude_preview', 0) - - call s:check_defined('g:airline_mode_map', {}) - call extend(g:airline_mode_map, { - \ '__' : '------', - \ 'n' : 'NORMAL', - \ 'i' : 'INSERT', - \ 'R' : 'REPLACE', - \ 'v' : 'VISUAL', - \ 'V' : 'V-LINE', - \ 'c' : 'COMMAND', - \ '' : 'V-BLOCK', - \ 's' : 'SELECT', - \ 'S' : 'S-LINE', - \ '' : 'S-BLOCK', - \ }, 'keep') - - call s:check_defined('g:airline_theme_map', {}) - call extend(g:airline_theme_map, { - \ 'Tomorrow.*': 'tomorrow', - \ 'base16.*': 'base16', - \ 'mo[l|n]okai': 'molokai', - \ 'wombat.*': 'wombat', - \ '.*zenburn.*': 'zenburn', - \ '.*solarized.*': 'solarized', - \ }, 'keep') - - call s:check_defined('g:airline_symbols', {}) - call extend(g:airline_symbols, { - \ 'paste': get(g:, 'airline_paste_symbol', 'PASTE'), - \ 'readonly': get(g:, 'airline_readonly_symbol', get(g:, 'airline_powerline_fonts', 0) ? "\ue0a2" : 'RO'), - \ 'whitespace': get(g:, 'airline_powerline_fonts', 0) ? "\u2739" : '!', - \ 'linenr': get(g:, 'airline_linecolumn_prefix', get(g:, 'airline_powerline_fonts', 0) ? "\ue0a1" : ':' ), - \ 'branch': get(g:, 'airline_branch_prefix', get(g:, 'airline_powerline_fonts', 0) ? "\ue0a0" : ''), - \ 'modified': '+', - \ 'space': ' ', - \ }, 'keep') - - call airline#parts#define('mode', { - \ 'function': 'airline#parts#mode', - \ 'accent': 'bold', - \ }) - call airline#parts#define_function('iminsert', 'airline#parts#iminsert') - call airline#parts#define_function('paste', 'airline#parts#paste') - call airline#parts#define_function('filetype', 'airline#parts#filetype') - call airline#parts#define('readonly', { - \ 'function': 'airline#parts#readonly', - \ 'accent': 'red', - \ }) - call airline#parts#define_raw('file', '%f%m') - call airline#parts#define_raw('linenr', '%{g:airline_symbols.linenr}%#__accent_bold#%4l%#__restore__#') - call airline#parts#define_function('ffenc', 'airline#parts#ffenc') - call airline#parts#define_empty(['hunks', 'branch', 'tagbar', 'syntastic', 'eclim', 'whitespace','windowswap']) - call airline#parts#define_text('capslock', '') - - unlet g:airline#init#bootstrapping -endfunction - -function! airline#init#sections() - let spc = g:airline_symbols.space - if !exists('g:airline_section_a') - let g:airline_section_a = airline#section#create_left(['mode', 'paste', 'capslock', 'iminsert']) - endif - if !exists('g:airline_section_b') - let g:airline_section_b = airline#section#create(['hunks', 'branch']) - endif - if !exists('g:airline_section_c') - let g:airline_section_c = airline#section#create(['%<', 'file', spc, 'readonly']) - endif - if !exists('g:airline_section_gutter') - let g:airline_section_gutter = airline#section#create(['%=']) - endif - if !exists('g:airline_section_x') - let g:airline_section_x = airline#section#create_right(['tagbar', 'filetype']) - endif - if !exists('g:airline_section_y') - let g:airline_section_y = airline#section#create_right(['ffenc']) - endif - if !exists('g:airline_section_z') - let g:airline_section_z = airline#section#create(['windowswap', '%3p%%'.spc, 'linenr', ':%3c ']) - endif - if !exists('g:airline_section_warning') - let g:airline_section_warning = airline#section#create(['syntastic', 'eclim', 'whitespace']) - endif -endfunction - diff --git a/bundle/airline/autoload/airline/parts.vim b/bundle/airline/autoload/airline/parts.vim deleted file mode 100755 index b0356b1..0000000 --- a/bundle/airline/autoload/airline/parts.vim +++ /dev/null @@ -1,79 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -let s:parts = {} - -" PUBLIC API {{{ - -function! airline#parts#define(key, config) - let s:parts[a:key] = get(s:parts, a:key, {}) - if exists('g:airline#init#bootstrapping') - call extend(s:parts[a:key], a:config, 'keep') - else - call extend(s:parts[a:key], a:config, 'force') - endif -endfunction - -function! airline#parts#define_function(key, name) - call airline#parts#define(a:key, { 'function': a:name }) -endfunction - -function! airline#parts#define_text(key, text) - call airline#parts#define(a:key, { 'text': a:text }) -endfunction - -function! airline#parts#define_raw(key, raw) - call airline#parts#define(a:key, { 'raw': a:raw }) -endfunction - -function! airline#parts#define_minwidth(key, width) - call airline#parts#define(a:key, { 'minwidth': a:width }) -endfunction - -function! airline#parts#define_condition(key, predicate) - call airline#parts#define(a:key, { 'condition': a:predicate }) -endfunction - -function! airline#parts#define_accent(key, accent) - call airline#parts#define(a:key, { 'accent': a:accent }) -endfunction - -function! airline#parts#define_empty(keys) - for key in a:keys - call airline#parts#define_raw(key, '') - endfor -endfunction - -function! airline#parts#get(key) - return get(s:parts, a:key, {}) -endfunction - -" }}} - -function! airline#parts#mode() - return get(w:, 'airline_current_mode', '') -endfunction - -function! airline#parts#paste() - return g:airline_detect_paste && &paste ? g:airline_symbols.paste : '' -endfunction - -function! airline#parts#iminsert() - if g:airline_detect_iminsert && &iminsert && exists('b:keymap_name') - return toupper(b:keymap_name) - endif - return '' -endfunction - -function! airline#parts#readonly() - return &readonly ? g:airline_symbols.readonly : '' -endfunction - -function! airline#parts#filetype() - return &filetype -endfunction - -function! airline#parts#ffenc() - return printf('%s%s', &fenc, strlen(&ff) > 0 ? '['.&ff.']' : '') -endfunction - diff --git a/bundle/airline/autoload/airline/section.vim b/bundle/airline/autoload/airline/section.vim deleted file mode 100755 index 06d930f..0000000 --- a/bundle/airline/autoload/airline/section.vim +++ /dev/null @@ -1,73 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -call airline#init#bootstrap() -let s:spc = g:airline_symbols.space - -function! s:wrap_accent(part, value) - if exists('a:part.accent') - call airline#highlighter#add_accent(a:part.accent) - return '%#__accent_'.(a:part.accent).'#'.a:value.'%#__restore__#' - endif - return a:value -endfunction - -function! s:create(parts, append) - let _ = '' - for idx in range(len(a:parts)) - let part = airline#parts#get(a:parts[idx]) - let val = '' - - if exists('part.function') - let func = (part.function).'()' - elseif exists('part.text') - let func = '"'.(part.text).'"' - else - if a:append > 0 && idx != 0 - let val .= s:spc.g:airline_left_alt_sep.s:spc - endif - if a:append < 0 && idx != 0 - let val = s:spc.g:airline_right_alt_sep.s:spc.val - endif - if exists('part.raw') - let _ .= s:wrap_accent(part, val.(part.raw)) - continue - else - let _ .= s:wrap_accent(part, val.a:parts[idx]) - continue - endif - endif - - let minwidth = get(part, 'minwidth', 0) - - if a:append > 0 && idx != 0 - let partval = printf('%%{airline#util#append(%s,%s)}', func, minwidth) - elseif a:append < 0 && idx != len(a:parts) - 1 - let partval = printf('%%{airline#util#prepend(%s,%s)}', func, minwidth) - else - let partval = printf('%%{airline#util#wrap(%s,%s)}', func, minwidth) - endif - - if exists('part.condition') - let partval = substitute(partval, '{', '\="{".(part.condition)." ? "', '') - let partval = substitute(partval, '}', ' : ""}', '') - endif - - let val .= s:wrap_accent(part, partval) - let _ .= val - endfor - return _ -endfunction - -function! airline#section#create(parts) - return s:create(a:parts, 0) -endfunction - -function! airline#section#create_left(parts) - return s:create(a:parts, 1) -endfunction - -function! airline#section#create_right(parts) - return s:create(a:parts, -1) -endfunction - diff --git a/bundle/airline/autoload/airline/themes.vim b/bundle/airline/autoload/airline/themes.vim deleted file mode 100755 index 07e0324..0000000 --- a/bundle/airline/autoload/airline/themes.vim +++ /dev/null @@ -1,67 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -" generates a dictionary which defines the colors for each highlight group -function! airline#themes#generate_color_map(sect1, sect2, sect3, ...) - let palette = { - \ 'airline_a': [ a:sect1[0] , a:sect1[1] , a:sect1[2] , a:sect1[3] , get(a:sect1 , 4 , '') ] , - \ 'airline_b': [ a:sect2[0] , a:sect2[1] , a:sect2[2] , a:sect2[3] , get(a:sect2 , 4 , '') ] , - \ 'airline_c': [ a:sect3[0] , a:sect3[1] , a:sect3[2] , a:sect3[3] , get(a:sect3 , 4 , '') ] , - \ } - - if a:0 > 0 - call extend(palette, { - \ 'airline_x': [ a:1[0] , a:1[1] , a:1[2] , a:1[3] , get(a:1 , 4 , '' ) ] , - \ 'airline_y': [ a:2[0] , a:2[1] , a:2[2] , a:2[3] , get(a:2 , 4 , '' ) ] , - \ 'airline_z': [ a:3[0] , a:3[1] , a:3[2] , a:3[3] , get(a:3 , 4 , '' ) ] , - \ }) - else - call extend(palette, { - \ 'airline_x': [ a:sect3[0] , a:sect3[1] , a:sect3[2] , a:sect3[3] , '' ] , - \ 'airline_y': [ a:sect2[0] , a:sect2[1] , a:sect2[2] , a:sect2[3] , '' ] , - \ 'airline_z': [ a:sect1[0] , a:sect1[1] , a:sect1[2] , a:sect1[3] , '' ] , - \ }) - endif - - return palette -endfunction - -function! airline#themes#get_highlight(group, ...) - return call('airline#highlighter#get_highlight', [a:group] + a:000) -endfunction - -function! airline#themes#get_highlight2(fg, bg, ...) - return call('airline#highlighter#get_highlight2', [a:fg, a:bg] + a:000) -endfunction - -function! airline#themes#patch(palette) - for mode in keys(a:palette) - if !has_key(a:palette[mode], 'airline_warning') - let a:palette[mode]['airline_warning'] = [ '#000000', '#df5f00', 232, 166 ] - endif - endfor - - let a:palette.accents = get(a:palette, 'accents', {}) - let a:palette.accents.bold = [ '', '', '', '', 'bold' ] - let a:palette.accents.italic = [ '', '', '', '', 'italic' ] - - if !has_key(a:palette.accents, 'red') - let a:palette.accents.red = [ '#ff0000' , '' , 160 , '' ] - endif - if !has_key(a:palette.accents, 'green') - let a:palette.accents.green = [ '#008700' , '' , 22 , '' ] - endif - if !has_key(a:palette.accents, 'blue') - let a:palette.accents.blue = [ '#005fff' , '' , 27 , '' ] - endif - if !has_key(a:palette.accents, 'yellow') - let a:palette.accents.yellow = [ '#dfff00' , '' , 190 , '' ] - endif - if !has_key(a:palette.accents, 'orange') - let a:palette.accents.orange = [ '#df5f00' , '' , 166 , '' ] - endif - if !has_key(a:palette.accents, 'purple') - let a:palette.accents.purple = [ '#af00df' , '' , 128 , '' ] - endif -endfunction - diff --git a/bundle/airline/autoload/airline/themes/badwolf.vim b/bundle/airline/autoload/airline/themes/badwolf.vim deleted file mode 100755 index 41a25d1..0000000 --- a/bundle/airline/autoload/airline/themes/badwolf.vim +++ /dev/null @@ -1,52 +0,0 @@ -let s:N1 = [ '#141413' , '#aeee00' , 232 , 154 ] " blackestgravel & lime -let s:N2 = [ '#f4cf86' , '#45413b' , 222 , 238 ] " dirtyblonde & deepgravel -let s:N3 = [ '#8cffba' , '#242321' , 121 , 235 ] " saltwatertaffy & darkgravel -let s:N4 = [ '#666462' , 241 ] " mediumgravel - -let s:I1 = [ '#141413' , '#0a9dff' , 232 , 39 ] " blackestgravel & tardis -let s:I2 = [ '#f4cf86' , '#005fff' , 222 , 27 ] " dirtyblonde & facebook -let s:I3 = [ '#0a9dff' , '#242321' , 39 , 235 ] " tardis & darkgravel - -let s:V1 = [ '#141413' , '#ffa724' , 232 , 214 ] " blackestgravel & orange -let s:V2 = [ '#000000' , '#fade3e' , 16 , 221 ] " coal & dalespale -let s:V3 = [ '#000000' , '#b88853' , 16 , 137 ] " coal & toffee -let s:V4 = [ '#c7915b' , 173 ] " coffee - -let s:PA = [ '#f4cf86' , 222 ] " dirtyblonde -let s:RE = [ '#ff9eb8' , 211 ] " dress - -let s:IA = [ s:N2[1] , s:N3[1] , s:N2[3] , s:N3[3] , '' ] - -let g:airline#themes#badwolf#palette = {} - -let g:airline#themes#badwolf#palette.accents = { - \ 'red': [ '#ff2c4b' , '' , 196 , '' , '' ] - \ } - -let g:airline#themes#badwolf#palette.normal = airline#themes#generate_color_map(s:N1, s:N2, s:N3) -let g:airline#themes#badwolf#palette.normal_modified = { - \ 'airline_b': [ s:N2[0] , s:N4[0] , s:N2[2] , s:N4[1] , '' ] , - \ 'airline_c': [ s:V1[1] , s:N2[1] , s:V1[3] , s:N2[3] , '' ] } - - -let g:airline#themes#badwolf#palette.insert = airline#themes#generate_color_map(s:I1, s:I2, s:I3) -let g:airline#themes#badwolf#palette.insert_modified = { - \ 'airline_c': [ s:V1[1] , s:N2[1] , s:V1[3] , s:N2[3] , '' ] } -let g:airline#themes#badwolf#palette.insert_paste = { - \ 'airline_a': [ s:I1[0] , s:PA[0] , s:I1[2] , s:PA[1] , '' ] } - - -let g:airline#themes#badwolf#palette.replace = copy(airline#themes#badwolf#palette.insert) -let g:airline#themes#badwolf#palette.replace.airline_a = [ s:I1[0] , s:RE[0] , s:I1[2] , s:RE[1] , '' ] -let g:airline#themes#badwolf#palette.replace_modified = g:airline#themes#badwolf#palette.insert_modified - - -let g:airline#themes#badwolf#palette.visual = airline#themes#generate_color_map(s:V1, s:V2, s:V3) -let g:airline#themes#badwolf#palette.visual_modified = { - \ 'airline_c': [ s:V3[0] , s:V4[0] , s:V3[2] , s:V4[1] , '' ] } - - -let g:airline#themes#badwolf#palette.inactive = airline#themes#generate_color_map(s:IA, s:IA, s:IA) -let g:airline#themes#badwolf#palette.inactive_modified = { - \ 'airline_c': [ s:V1[1] , '' , s:V1[3] , '' , '' ] } - diff --git a/bundle/airline/autoload/airline/themes/base16.vim b/bundle/airline/autoload/airline/themes/base16.vim deleted file mode 100755 index 469435e..0000000 --- a/bundle/airline/autoload/airline/themes/base16.vim +++ /dev/null @@ -1,107 +0,0 @@ -if get(g:, 'airline#themes#base16#constant', 0) - let g:airline#themes#base16#palette = {} - - " Color palette - let s:gui_dark_gray = '#202020' - let s:cterm_dark_gray = 234 - let s:gui_med_gray_hi = '#303030' - let s:cterm_med_gray_hi = 236 - let s:gui_med_gray_lo = '#3a3a3a' - let s:cterm_med_gray_lo = 237 - let s:gui_light_gray = '#505050' - let s:cterm_light_gray = 239 - let s:gui_green = '#99cc99' - let s:cterm_green = 151 - let s:gui_blue = '#6a9fb5' - let s:cterm_blue = 67 - let s:gui_purple = '#aa759f' - let s:cterm_purple = 139 - let s:gui_orange = '#d28445' - let s:cterm_orange = 173 - let s:gui_red = '#ac4142' - let s:cterm_red = 131 - let s:gui_pink = '#d7afd7' - let s:cterm_pink = 182 - - " Normal mode - let s:N1 = [s:gui_dark_gray, s:gui_green, s:cterm_dark_gray, s:cterm_green] - let s:N2 = [s:gui_light_gray, s:gui_med_gray_lo, s:cterm_light_gray, s:cterm_med_gray_lo] - let s:N3 = [s:gui_green, s:gui_med_gray_hi, s:cterm_green, s:cterm_med_gray_hi] - let g:airline#themes#base16#palette.normal = airline#themes#generate_color_map(s:N1, s:N2, s:N3) - let g:airline#themes#base16#palette.normal_modified = { - \ 'airline_c': [s:gui_orange, s:gui_med_gray_hi, s:cterm_orange, s:cterm_med_gray_hi, ''], - \ } - - " Insert mode - let s:I1 = [s:gui_med_gray_hi, s:gui_blue, s:cterm_med_gray_hi, s:cterm_blue] - let s:I3 = [s:gui_blue, s:gui_med_gray_hi, s:cterm_blue, s:cterm_med_gray_hi] - let g:airline#themes#base16#palette.insert = airline#themes#generate_color_map(s:I1, s:N2, s:I3) - let g:airline#themes#base16#palette.insert_modified = copy(g:airline#themes#base16#palette.normal_modified) - let g:airline#themes#base16#palette.insert_paste = { - \ 'airline_a': [s:gui_dark_gray, s:gui_orange, s:cterm_dark_gray, s:cterm_orange, ''], - \ } - - " Replace mode - let g:airline#themes#base16#palette.replace = { - \ 'airline_a': [s:gui_dark_gray, s:gui_red, s:cterm_dark_gray, s:cterm_red, ''], - \ 'airline_c': [s:gui_red, s:gui_med_gray_hi, s:cterm_red, s:cterm_med_gray_hi, ''], - \ } - let g:airline#themes#base16#palette.replace_modified = copy(g:airline#themes#base16#palette.insert_modified) - - " Visual mode - let s:V1 = [s:gui_dark_gray, s:gui_pink, s:cterm_dark_gray, s:cterm_pink] - let s:V3 = [s:gui_pink, s:gui_med_gray_hi, s:cterm_pink, s:cterm_med_gray_hi] - let g:airline#themes#base16#palette.visual = airline#themes#generate_color_map(s:V1, s:N2, s:V3) - let g:airline#themes#base16#palette.visual_modified = copy(g:airline#themes#base16#palette.insert_modified) - - " Inactive window - let s:IA = [s:gui_dark_gray, s:gui_med_gray_hi, s:cterm_dark_gray, s:cterm_med_gray_hi, ''] - let g:airline#themes#base16#palette.inactive = airline#themes#generate_color_map(s:IA, s:IA, s:IA) - let g:airline#themes#base16#palette.inactive_modified = { - \ 'airline_c': [s:gui_orange, '', s:cterm_orange, '', ''], - \ } -else - function! airline#themes#base16#refresh() - let g:airline#themes#base16#palette = {} - - let g:airline#themes#base16#palette.accents = { - \ 'red': airline#themes#get_highlight('Constant'), - \ } - - let s:N1 = airline#themes#get_highlight2(['DiffText', 'bg'], ['DiffText', 'fg'], 'bold') - let s:N2 = airline#themes#get_highlight('Visual') - let s:N3 = airline#themes#get_highlight('CursorLine') - let g:airline#themes#base16#palette.normal = airline#themes#generate_color_map(s:N1, s:N2, s:N3) - - let group = airline#themes#get_highlight('vimCommand') - let g:airline#themes#base16#palette.normal_modified = { - \ 'statusline': [ group[0], '', group[2], '', '' ] - \ } - - let s:I1 = airline#themes#get_highlight2(['DiffAdded', 'bg'], ['DiffAdded', 'fg'], 'bold') - let s:I2 = airline#themes#get_highlight2(['DiffAdded', 'fg'], ['Normal', 'bg']) - let s:I3 = s:N3 - let g:airline#themes#base16#palette.insert = airline#themes#generate_color_map(s:I1, s:I2, s:I3) - let g:airline#themes#base16#palette.insert_modified = g:airline#themes#base16#palette.normal_modified - - let s:R1 = airline#themes#get_highlight2(['WarningMsg', 'bg'], ['WarningMsg', 'fg'], 'bold') - let s:R2 = s:N2 - let s:R3 = s:N3 - let g:airline#themes#base16#palette.replace = airline#themes#generate_color_map(s:R1, s:R2, s:R3) - let g:airline#themes#base16#palette.replace_modified = g:airline#themes#base16#palette.normal_modified - - let s:V1 = airline#themes#get_highlight2(['Normal', 'bg'], ['Constant', 'fg'], 'bold') - let s:V2 = airline#themes#get_highlight2(['Constant', 'fg'], ['Normal', 'bg']) - let s:V3 = s:N3 - let g:airline#themes#base16#palette.visual = airline#themes#generate_color_map(s:V1, s:V2, s:V3) - let g:airline#themes#base16#palette.visual_modified = g:airline#themes#base16#palette.normal_modified - - let s:IA = airline#themes#get_highlight2(['NonText', 'fg'], ['CursorLine', 'bg']) - let g:airline#themes#base16#palette.inactive = airline#themes#generate_color_map(s:IA, s:IA, s:IA) - let g:airline#themes#base16#palette.inactive_modified = { - \ 'airline_c': [ group[0], '', group[2], '', '' ] - \ } - endfunction - call airline#themes#base16#refresh() -endif - diff --git a/bundle/airline/autoload/airline/themes/bubblegum.vim b/bundle/airline/autoload/airline/themes/bubblegum.vim deleted file mode 100755 index f2378ce..0000000 --- a/bundle/airline/autoload/airline/themes/bubblegum.vim +++ /dev/null @@ -1,70 +0,0 @@ -" Color palette -let s:gui_dark_gray = '#303030' -let s:cterm_dark_gray = 236 -let s:gui_med_gray_hi = '#444444' -let s:cterm_med_gray_hi = 238 -let s:gui_med_gray_lo = '#3a3a3a' -let s:cterm_med_gray_lo = 237 -let s:gui_light_gray = '#b2b2b2' -let s:cterm_light_gray = 249 -let s:gui_green = '#afd787' -let s:cterm_green = 150 -let s:gui_blue = '#87afd7' -let s:cterm_blue = 110 -let s:gui_purple = '#afafd7' -let s:cterm_purple = 146 -let s:gui_orange = '#d7af5f' -let s:cterm_orange = 179 -let s:gui_red = '#d78787' -let s:cterm_red = 174 -let s:gui_pink = '#d7afd7' -let s:cterm_pink = 182 - -let g:airline#themes#bubblegum#palette = {} - -" Normal mode -let s:N1 = [s:gui_dark_gray, s:gui_green, s:cterm_dark_gray, s:cterm_green] -let s:N2 = [s:gui_light_gray, s:gui_med_gray_lo, s:cterm_light_gray, s:cterm_med_gray_lo] -let s:N3 = [s:gui_green, s:gui_med_gray_hi, s:cterm_green, s:cterm_med_gray_hi] -let g:airline#themes#bubblegum#palette.normal = airline#themes#generate_color_map(s:N1, s:N2, s:N3) -let g:airline#themes#bubblegum#palette.normal_modified = { - \ 'airline_c': [s:gui_orange, s:gui_med_gray_hi, s:cterm_orange, s:cterm_med_gray_hi, ''], - \ } - -" Insert mode -let s:I1 = [s:gui_med_gray_hi, s:gui_blue, s:cterm_med_gray_hi, s:cterm_blue] -let s:I3 = [s:gui_blue, s:gui_med_gray_hi, s:cterm_blue, s:cterm_med_gray_hi] -let g:airline#themes#bubblegum#palette.insert = airline#themes#generate_color_map(s:I1, s:N2, s:I3) -let g:airline#themes#bubblegum#palette.insert_modified = copy(g:airline#themes#bubblegum#palette.normal_modified) -let g:airline#themes#bubblegum#palette.insert_paste = { - \ 'airline_a': [s:gui_dark_gray, s:gui_orange, s:cterm_dark_gray, s:cterm_orange, ''], - \ } - -" Replace mode -let g:airline#themes#bubblegum#palette.replace = { - \ 'airline_a': [s:gui_dark_gray, s:gui_red, s:cterm_dark_gray, s:cterm_red, ''], - \ 'airline_c': [s:gui_red, s:gui_med_gray_hi, s:cterm_red, s:cterm_med_gray_hi, ''], - \ } -let g:airline#themes#bubblegum#palette.replace_modified = copy(g:airline#themes#bubblegum#palette.insert_modified) - -" Visual mode -let s:V1 = [s:gui_dark_gray, s:gui_pink, s:cterm_dark_gray, s:cterm_pink] -let s:V3 = [s:gui_pink, s:gui_med_gray_hi, s:cterm_pink, s:cterm_med_gray_hi] -let g:airline#themes#bubblegum#palette.visual = airline#themes#generate_color_map(s:V1, s:N2, s:V3) -let g:airline#themes#bubblegum#palette.visual_modified = copy(g:airline#themes#bubblegum#palette.insert_modified) - -" Inactive window -let s:IA = [s:gui_light_gray, s:gui_med_gray_hi, s:cterm_light_gray, s:cterm_med_gray_hi, ''] -let g:airline#themes#bubblegum#palette.inactive = airline#themes#generate_color_map(s:IA, s:IA, s:IA) -let g:airline#themes#bubblegum#palette.inactive_modified = { - \ 'airline_c': [s:gui_orange, '', s:cterm_orange, '', ''], - \ } - -" CtrlP -if !get(g:, 'loaded_ctrlp', 0) - finish -endif -let g:airline#themes#bubblegum#palette.ctrlp = airline#extensions#ctrlp#generate_color_map( - \ [ s:gui_orange, s:gui_med_gray_hi, s:cterm_orange, s:cterm_med_gray_hi, '' ] , - \ [ s:gui_orange, s:gui_med_gray_lo, s:cterm_orange, s:cterm_med_gray_lo, '' ] , - \ [ s:gui_dark_gray, s:gui_green, s:cterm_dark_gray, s:cterm_green, 'bold' ] ) diff --git a/bundle/airline/autoload/airline/themes/dark.vim b/bundle/airline/autoload/airline/themes/dark.vim deleted file mode 100755 index 217b2f1..0000000 --- a/bundle/airline/autoload/airline/themes/dark.vim +++ /dev/null @@ -1,102 +0,0 @@ -" Each theme is contained in its own file and declares variables scoped to the -" file. These variables represent the possible "modes" that airline can -" detect. The mode is the return value of mode(), which gets converted to a -" readable string. The following is a list currently supported modes: normal, -" insert, replace, visual, and inactive. -" -" Each mode can also have overrides. These are small changes to the mode that -" don't require a completely different look. "modified" and "paste" are two -" such supported overrides. These are simply suffixed to the major mode, -" separated by an underscore. For example, "normal_modified" would be normal -" mode where the current buffer is modified. -" -" The theming algorithm is a 2-pass system where the mode will draw over all -" parts of the statusline, and then the override is applied after. This means -" it is possible to specify a subset of the theme in overrides, as it will -" simply overwrite the previous colors. If you want simultaneous overrides, -" then they will need to change different parts of the statusline so they do -" not conflict with each other. -" -" First, let's define an empty dictionary and assign it to the "palette" -" variable. The # is a separator that maps with the directory structure. If -" you get this wrong, Vim will complain loudly. -let g:airline#themes#dark#palette = {} - -" First let's define some arrays. The s: is just a VimL thing for scoping the -" variables to the current script. Without this, these variables would be -" declared globally. Now let's declare some colors for normal mode and add it -" to the dictionary. The array is in the format: -" [ guifg, guibg, ctermfg, ctermbg, opts ]. See "help attr-list" for valid -" values for the "opt" value. -let s:N1 = [ '#00005f' , '#dfff00' , 17 , 190 ] -let s:N2 = [ '#ffffff' , '#444444' , 255 , 238 ] -let s:N3 = [ '#9cffd3' , '#202020' , 85 , 234 ] -let g:airline#themes#dark#palette.normal = airline#themes#generate_color_map(s:N1, s:N2, s:N3) - -" Here we define overrides for when the buffer is modified. This will be -" applied after g:airline#themes#dark#palette.normal, hence why only certain keys are -" declared. -let g:airline#themes#dark#palette.normal_modified = { - \ 'airline_c': [ '#ffffff' , '#5f005f' , 255 , 53 , '' ] , - \ } - - -let s:I1 = [ '#00005f' , '#00dfff' , 17 , 45 ] -let s:I2 = [ '#ffffff' , '#005fff' , 255 , 27 ] -let s:I3 = [ '#ffffff' , '#000080' , 15 , 17 ] -let g:airline#themes#dark#palette.insert = airline#themes#generate_color_map(s:I1, s:I2, s:I3) -let g:airline#themes#dark#palette.insert_modified = { - \ 'airline_c': [ '#ffffff' , '#5f005f' , 255 , 53 , '' ] , - \ } -let g:airline#themes#dark#palette.insert_paste = { - \ 'airline_a': [ s:I1[0] , '#d78700' , s:I1[2] , 172 , '' ] , - \ } - - -let g:airline#themes#dark#palette.replace = copy(g:airline#themes#dark#palette.insert) -let g:airline#themes#dark#palette.replace.airline_a = [ s:I2[0] , '#af0000' , s:I2[2] , 124 , '' ] -let g:airline#themes#dark#palette.replace_modified = g:airline#themes#dark#palette.insert_modified - - -let s:V1 = [ '#000000' , '#ffaf00' , 232 , 214 ] -let s:V2 = [ '#000000' , '#ff5f00' , 232 , 202 ] -let s:V3 = [ '#ffffff' , '#5f0000' , 15 , 52 ] -let g:airline#themes#dark#palette.visual = airline#themes#generate_color_map(s:V1, s:V2, s:V3) -let g:airline#themes#dark#palette.visual_modified = { - \ 'airline_c': [ '#ffffff' , '#5f005f' , 255 , 53 , '' ] , - \ } - - -let s:IA1 = [ '#4e4e4e' , '#1c1c1c' , 239 , 234 , '' ] -let s:IA2 = [ '#4e4e4e' , '#262626' , 239 , 235 , '' ] -let s:IA3 = [ '#4e4e4e' , '#303030' , 239 , 236 , '' ] -let g:airline#themes#dark#palette.inactive = airline#themes#generate_color_map(s:IA1, s:IA2, s:IA3) -let g:airline#themes#dark#palette.inactive_modified = { - \ 'airline_c': [ '#875faf' , '' , 97 , '' , '' ] , - \ } - - -" Accents are used to give parts within a section a slightly different look or -" color. Here we are defining a "red" accent, which is used by the 'readonly' -" part by default. Only the foreground colors are specified, so the background -" colors are automatically extracted from the underlying section colors. What -" this means is that regardless of which section the part is defined in, it -" will be red instead of the section's foreground color. You can also have -" multiple parts with accents within a section. -let g:airline#themes#dark#palette.accents = { - \ 'red': [ '#ff0000' , '' , 160 , '' ] - \ } - - -" Here we define the color map for ctrlp. We check for the g:loaded_ctrlp -" variable so that related functionality is loaded iff the user is using -" ctrlp. Note that this is optional, and if you do not define ctrlp colors -" they will be chosen automatically from the existing palette. -if !get(g:, 'loaded_ctrlp', 0) - finish -endif -let g:airline#themes#dark#palette.ctrlp = airline#extensions#ctrlp#generate_color_map( - \ [ '#d7d7ff' , '#5f00af' , 189 , 55 , '' ], - \ [ '#ffffff' , '#875fd7' , 231 , 98 , '' ], - \ [ '#5f00af' , '#ffffff' , 55 , 231 , 'bold' ]) - diff --git a/bundle/airline/autoload/airline/themes/durant.vim b/bundle/airline/autoload/airline/themes/durant.vim deleted file mode 100755 index 56be7ba..0000000 --- a/bundle/airline/autoload/airline/themes/durant.vim +++ /dev/null @@ -1,59 +0,0 @@ -let s:N1 = [ '#005f00' , '#afd700' , 22 , 148 ] -let s:N2 = [ '#93a1a1' , '#586e75' , 245 , 240 ] -let s:N3 = [ '#93a1a1' , '#073642' , 240 , 233 ] -let g:airline#themes#durant#palette.normal = airline#themes#generate_color_map(s:N1, s:N2, s:N3) - - -let g:airline#themes#durant#normal_modified = { - \ 'airline_c': [ '#ffffff' , '#5f005f' , 255 , 53 , '' ] , - \ } - - - -let s:I1 = [ '#ffffff' , '#00875f' , 255 , 29 ] -let s:I2 = [ '#9e9e9e' , '#303030' , 247 , 236 ] -let s:I3 = [ '#87d7ff' , '#005f87' , 117 , 24 ] -let g:airline#themes#durant#palette.insert = airline#themes#generate_color_map(s:I1, s:I2, s:I3) -let g:airline#themes#durant#palette.insert_modified = { - \ 'airline_c': [ '#ffffff' , '#5f005f' , 255 , 53 , '' ] , - \ } -let g:airline#themes#durant#palette.insert_paste = { - \ 'airline_a': [ s:I1[0] , '#d78700' , s:I1[2] , 172 , '' ] , - \ } - - -let g:airline#themes#durant#palette.replace = copy(g:airline#themes#durant#palette.insert) -let g:airline#themes#durant#palette.replace.airline_a = [ s:I2[0] , '#af0000' , s:I2[2] , 124 , '' ] - -let g:airline#themes#durant#palette.replace_modified = g:airline#themes#durant#palette.insert_modified - -let s:V1 = [ '#1a1a18' , '#ffffff' , 232 , 255 ] -let s:V2 = [ '#ffffff' , '#44403a' , 255, 238 ] -let s:V3 = [ '#90a680' , '#2e2d2a' , 64, 235 ] -let g:airline#themes#durant#palette.visual = airline#themes#generate_color_map(s:V1, s:V2, s:V3) -let g:airline#themes#durant#palette.visual_modified = { - \ 'airline_c': [ '#ffffff' , '#5f005f' , 255 , 53 , '' ] , - \ } - - -let s:IA1 = [ '#4e4e4e' , '#1c1c1c' , 239 , 234 , '' ] -let s:IA2 = [ '#4e4e4e' , '#262626' , 239 , 235 , '' ] -let s:IA3 = [ '#4e4e4e' , '#303030' , 239 , 236 , '' ] -let g:airline#themes#durant#palette.inactive = airline#themes#generate_color_map(s:IA1, s:IA2, s:IA3) -let g:airline#themes#durant#palette.inactive_modified = { - \ 'airline_c': [ '#875faf' , '' , 97 , '' , '' ] , - \ } - - -let g:airline#themes#durant#palette.accents = { - \ 'red': [ '#ff0000' , '' , 160 , '' ] - \ } - -if !get(g:, 'loaded_ctrlp', 0) - finish -endif - let g:airline#themes#durant#palette.ctrlp = airline#extensions#ctrlp#generate_color_map( - \ [ '#d7d7ff' , '#5f00af' , 189 , 55 , '' ], - \ [ '#ffffff' , '#875fd7' , 231 , 98 , '' ], - \ [ '#5f00af' , '#ffffff' , 55 , 231 , 'bold' ]) - diff --git a/bundle/airline/autoload/airline/themes/hybrid.vim b/bundle/airline/autoload/airline/themes/hybrid.vim deleted file mode 100755 index b0df844..0000000 --- a/bundle/airline/autoload/airline/themes/hybrid.vim +++ /dev/null @@ -1,58 +0,0 @@ -" vim-airline companion theme of Hybrid -" (https://github.com/w0ng/vim-hybrid) - -let g:airline#themes#hybrid#palette = {} - -function! airline#themes#hybrid#refresh() - let s:N1 = airline#themes#get_highlight('DiffAdd') - let s:N2 = airline#themes#get_highlight('CursorLine') - let s:N3 = airline#themes#get_highlight('PMenu') - let g:airline#themes#hybrid#palette.normal = airline#themes#generate_color_map(s:N1, s:N2, s:N3) - - let modified_group = airline#themes#get_highlight2(['Text', 'fg'], ['SpellRare', 'bg'], 'bold') - let g:airline#themes#hybrid#palette.normal_modified = { - \ 'airline_c': airline#themes#get_highlight2(['Text', 'fg'], ['SpellRare', 'bg'], 'bold') - \ } - - let warning_group = airline#themes#get_highlight('SpellRare') - let g:airline#themes#hybrid#palette.normal.airline_warning = warning_group - let g:airline#themes#hybrid#palette.normal_modified.airline_warning = warning_group - - let s:I1 = airline#themes#get_highlight2(['Text', 'fg'], ['DiffText', 'bg'], 'bold') - let s:I2 = airline#themes#get_highlight2(['Text', 'fg'], ['SpellLocal', 'bg'], 'bold') - let s:I3 = airline#themes#get_highlight2(['Text', 'fg'], ['SpellCap', 'bg'], 'bold') - let g:airline#themes#hybrid#palette.insert = airline#themes#generate_color_map(s:I1, s:I2, s:I3) - let g:airline#themes#hybrid#palette.insert_modified = g:airline#themes#hybrid#palette.normal_modified - let g:airline#themes#hybrid#palette.insert.airline_warning = g:airline#themes#hybrid#palette.normal.airline_warning - let g:airline#themes#hybrid#palette.insert_modified.airline_warning = g:airline#themes#hybrid#palette.normal_modified.airline_warning - - let s:R1 = airline#themes#get_highlight('DiffChange') - let s:R2 = s:N2 - let s:R3 = s:N3 - let g:airline#themes#hybrid#palette.replace = airline#themes#generate_color_map(s:R1, s:R2, s:R3) - let replace_group = airline#themes#get_highlight('SpellRare') - let g:airline#themes#hybrid#palette.replace_modified = g:airline#themes#hybrid#palette.normal_modified - let g:airline#themes#hybrid#palette.replace.airline_warning = g:airline#themes#hybrid#palette.normal.airline_warning - let g:airline#themes#hybrid#palette.replace_modified.airline_warning = g:airline#themes#hybrid#palette.replace_modified.airline_warning - - let s:V1 = airline#themes#get_highlight2(['Text', 'fg'], ['Folded', 'bg'], 'bold') - let s:V2 = airline#themes#get_highlight2(['Text', 'fg'], ['DiffDelete', 'bg'], 'bold') - let s:V3 = airline#themes#get_highlight2(['Text', 'fg'], ['Error', 'bg'], 'bold') - let g:airline#themes#hybrid#palette.visual = airline#themes#generate_color_map(s:V1, s:V2, s:V3) - let g:airline#themes#hybrid#palette.visual_modified = g:airline#themes#hybrid#palette.normal_modified - let g:airline#themes#hybrid#palette.visual.airline_warning = g:airline#themes#hybrid#palette.normal.airline_warning - let g:airline#themes#hybrid#palette.visual_modified.airline_warning = g:airline#themes#hybrid#palette.normal_modified.airline_warning - - let s:IA = airline#themes#get_highlight('StatusLineNC') - let g:airline#themes#hybrid#palette.inactive = airline#themes#generate_color_map(s:IA, s:IA, s:IA) - let g:airline#themes#hybrid#palette.inactive_modified = { - \ 'airline_c': [ modified_group[0], '', modified_group[2], '', '' ] - \ } - - let g:airline#themes#hybrid#palette.accents = { - \ 'red': airline#themes#get_highlight('Constant'), - \ } - -endfunction - -call airline#themes#hybrid#refresh() diff --git a/bundle/airline/autoload/airline/themes/jellybeans.vim b/bundle/airline/autoload/airline/themes/jellybeans.vim deleted file mode 100755 index 201068c..0000000 --- a/bundle/airline/autoload/airline/themes/jellybeans.vim +++ /dev/null @@ -1,52 +0,0 @@ -let g:airline#themes#jellybeans#palette = {} - -" The name of the function must be 'refresh'. -function! airline#themes#jellybeans#refresh() - " This theme is an example of how to use helper functions to extract highlight - " values from the corresponding colorscheme. It was written in a hurry, so it - " is very minimalistic. If you are a jellybeans user and want to make updates, - " please send pull requests. - - " Here are examples where the entire highlight group is copied and an airline - " compatible color array is generated. - let s:N1 = airline#themes#get_highlight('DbgCurrent', 'bold') - let s:N2 = airline#themes#get_highlight('Folded') - let s:N3 = airline#themes#get_highlight('NonText') - - let g:airline#themes#jellybeans#palette.accents = { - \ 'red': airline#themes#get_highlight('Constant'), - \ } - - let g:airline#themes#jellybeans#palette.normal = airline#themes#generate_color_map(s:N1, s:N2, s:N3) - let g:airline#themes#jellybeans#palette.normal_modified = { - \ 'airline_c': [ '#ffb964', '', 215, '', '' ] - \ } - - let s:I1 = airline#themes#get_highlight('DiffAdd', 'bold') - let s:I2 = s:N2 - let s:I3 = s:N3 - let g:airline#themes#jellybeans#palette.insert = airline#themes#generate_color_map(s:I1, s:I2, s:I3) - let g:airline#themes#jellybeans#palette.insert_modified = g:airline#themes#jellybeans#palette.normal_modified - - let s:R1 = airline#themes#get_highlight('WildMenu', 'bold') - let s:R2 = s:N2 - let s:R3 = s:N3 - let g:airline#themes#jellybeans#palette.replace = airline#themes#generate_color_map(s:R1, s:R2, s:R3) - let g:airline#themes#jellybeans#palette.replace_modified = g:airline#themes#jellybeans#palette.normal_modified - - " Sometimes you want to mix and match colors from different groups, you can do - " that with this method. - let s:V1 = airline#themes#get_highlight2(['TabLineSel', 'bg'], ['DiffDelete', 'bg'], 'bold') - let s:V2 = s:N2 - let s:V3 = s:N3 - let g:airline#themes#jellybeans#palette.visual = airline#themes#generate_color_map(s:V1, s:V2, s:V3) - let g:airline#themes#jellybeans#palette.visual_modified = g:airline#themes#jellybeans#palette.normal_modified - - " And of course, you can always do it manually as well. - let s:IA = [ '#444444', '#1c1c1c', 237, 234 ] - let g:airline#themes#jellybeans#palette.inactive = airline#themes#generate_color_map(s:IA, s:IA, s:IA) - let g:airline#themes#jellybeans#palette.inactive_modified = g:airline#themes#jellybeans#palette.normal_modified -endfunction - -call airline#themes#jellybeans#refresh() - diff --git a/bundle/airline/autoload/airline/themes/kalisi.vim b/bundle/airline/autoload/airline/themes/kalisi.vim deleted file mode 100755 index 78504fa..0000000 --- a/bundle/airline/autoload/airline/themes/kalisi.vim +++ /dev/null @@ -1,70 +0,0 @@ -" -" Colorscheme: Kalisi for airline. Inspired by powerline. -" Arthur Jaron -" hifreeo@gmail.com -" 24.10.2014 - -" Visual mode -let s:V1 = [ '#0087ff' , '#ffffff','33','231'] -let s:V2 = [ '#005faf' , '#5fafff','25','75'] -let s:V3 = [ '#87d7ff' , '#005faf','117','25'] - -" Replace mode -let s:R1 = [ '#d75fff' , '#ffffff','171','231'] -let s:R2 = [ '#5f005f' , '#d75fff','53','171'] -let s:R3 = [ '#ff87ff' , '#8700af','213','91'] - -let g:airline#themes#kalisi#palette = {} - - -function! airline#themes#kalisi#refresh() - - let s:StatusLine = airline#themes#get_highlight('StatusLine') - let s:StatusLineNC = airline#themes#get_highlight('StatusLineNC') - - " Insert mode - let s:I1 = [ '#ffffff' , '#e80000','231','160'] - let s:I2 = [ '#ff0000' , '#5f0000','196','52'] - let s:I3 = s:StatusLine - - " Normal mode - let s:N1 = [ '#005f00' , '#afd700','22','148'] - let s:N2 = [ '#afd700' , '#005f00','148','22'] - let s:N3 = s:StatusLine - - " Tabline Plugin - let g:airline#themes#kalisi#palette.tabline = { - \ 'airline_tab': ['#bcbcbc', '#005f00','250','22'], - \ 'airline_tabsel': ['#404042', '#A6DB29','238','148'], - \ 'airline_tabtype':['#afd700', '#204d20','148','22'], - \ 'airline_tabfill': s:StatusLine, - \ 'airline_tabhid': ['#c5c5c5', '#404042','251','238'], - \ 'airline_tabmod': ['#d7ff00', '#afd700','190','148'], - \ 'airline_tabmod_unsel': ['#d7ff00', '#005f00','190','22'] - \ } - - let g:airline#themes#kalisi#palette.normal = airline#themes#generate_color_map(s:N1, s:N2, s:N3) - let g:airline#themes#kalisi#palette.visual = airline#themes#generate_color_map(s:V1, s:V2, s:V3) - let g:airline#themes#kalisi#palette.insert = airline#themes#generate_color_map(s:I1, s:I2, s:I3) - let g:airline#themes#kalisi#palette.replace = airline#themes#generate_color_map(s:R1, s:R2, s:R3) - - " Inactive Mode - let s:IA = airline#themes#get_highlight('StatusLineNC') - let g:airline#themes#kalisi#palette.inactive = airline#themes#generate_color_map(s:IA, s:IA, s:IA) - let g:airline#themes#kalisi#palette.inactive_modified = { - \ 'airline_c': ['#d7ff00', s:IA[1],'190',s:IA[3]], - \ } - -endfunction - -call airline#themes#kalisi#refresh() - -if !get(g:, 'loaded_ctrlp', 0) - finish -endif -let g:airline#themes#kalisi#palette.ctrlp = airline#extensions#ctrlp#generate_color_map( - \ s:StatusLine, - \ ['#afd700', '#005f00','148','22'], - \ [ '#005f00' , '#afd700' , '22','148'] - \) - diff --git a/bundle/airline/autoload/airline/themes/kolor.vim b/bundle/airline/autoload/airline/themes/kolor.vim deleted file mode 100755 index e61f56f..0000000 --- a/bundle/airline/autoload/airline/themes/kolor.vim +++ /dev/null @@ -1,59 +0,0 @@ -let g:airline#themes#kolor#palette = {} - -let s:N1 = [ '#e2e2e2' , '#4f3598' , 254 , 56 ] -let s:N2 = [ '#ff5fd7' , '#242322' , 206 , 234 ] -let s:N3 = [ '#e2e2e2' , '#4a4a4a' , 254 , 238 ] - -let g:airline#themes#kolor#palette.normal = airline#themes#generate_color_map(s:N1, s:N2, s:N3) - -let g:airline#themes#kolor#palette.normal_modified = { - \ 'airline_c': [ '#e2e2e2' , '#4f3598' , 254 , 56 , '' ] , - \ } - - -let s:I1 = [ '#242322' , '#7eaefd' , 234 , 111 ] -let s:I2 = [ '#75d7d8' , '#242322' , 80 , 234 ] -let s:I3 = [ '#e2e2e2' , '#4a4a4a' , 254 , 238 ] -let g:airline#themes#kolor#palette.insert = airline#themes#generate_color_map(s:I1, s:I2, s:I3) -let g:airline#themes#kolor#palette.insert_modified = { - \ 'airline_c': [ '#242322' , '#7eaefd' , 234 , 111 , '' ] , - \ } - - -let g:airline#themes#kolor#palette.replace = copy(g:airline#themes#kolor#palette.insert) -let g:airline#themes#kolor#palette.replace.airline_a = [ s:I2[0] , '#005154' , s:I2[2] , 23 , '' ] -let g:airline#themes#kolor#palette.replace_modified = { - \ 'airline_c': [ '#e2e2e2' , '#005154' , 254 , 23 , '' ] , - \ } - - -let s:V1 = [ '#242322' , '#e6987a' , 234 , 180 ] -let s:V2 = [ '#dbc570' , '#242322' , 186 , 234 ] -let s:V3 = [ '#e2e2e2' , '#4a4a4a' , 254 , 238 ] -let g:airline#themes#kolor#palette.visual = airline#themes#generate_color_map(s:V1, s:V2, s:V3) -let g:airline#themes#kolor#palette.visual_modified = { - \ 'airline_c': [ '#242322' , '#e6987a' , 234 , 180 , '' ] , - \ } - - -let s:IA1 = [ '#b2b2b2' , '#4a4a4a' , 247 , 238 , '' ] -let s:IA2 = [ '#b2b2b2' , '#4a4a4a' , 247 , 238 ] -let s:IA3 = [ '#b2b2b2' , '#4a4a4a' , 247 , 238 , '' ] -let g:airline#themes#kolor#palette.inactive = airline#themes#generate_color_map(s:IA1, s:IA2, s:IA3) -let g:airline#themes#kolor#palette.inactive_modified = { - \ 'airline_c': [ '#875faf' , '' , 97 , '' , '' ] , - \ } - - -let g:airline#themes#kolor#palette.accents = { - \ 'red': [ '#d96e8a' , '' , 168 , '' ] - \ } - - -if !get(g:, 'loaded_ctrlp', 0) - finish -endif -let g:airline#themes#kolor#palette.ctrlp = airline#extensions#ctrlp#generate_color_map( - \ [ '#e2e2e2' , '#4a4a4a' , 254 , 238 , '' ], - \ [ '#e2e2e2' , '#242322' , 254 , 234 , '' ], - \ [ '#e2e2e2' , '#4f3598' , 254 , 56 , 'bold' ]) diff --git a/bundle/airline/autoload/airline/themes/laederon.vim b/bundle/airline/autoload/airline/themes/laederon.vim deleted file mode 100755 index 115c107..0000000 --- a/bundle/airline/autoload/airline/themes/laederon.vim +++ /dev/null @@ -1,62 +0,0 @@ -" vim-airline companion theme of Laederon -" (https://github.com/Donearm/Laederon) - -" Normal mode -let s:N1 = [ '#1a1a18' , '#ffffff' , 232 , 255 ] " blackestgravel & snow -let s:N2 = [ '#ffffff' , '#44403a' , 255, 238 ] " snow & deepgravel -let s:N3 = [ '#90a680' , '#2e2d2a' , 64, 235 ] " dilutedpaint & darkgravel -let s:N4 = [ '#777470' , 240 ] " gravel - -" Insert mode -let s:I1 = [ '#1a1a18' , '#1693a5' , 232 , 62 ] " blackestgravel & crystallake -let s:I2 = [ '#515744' , '#44403a' , 101 , 238 ] " lichen & deepgravel -let s:I3 = [ '#1693a5' , '#2e2d2a' , 39 , 235 ] " crystallake & darkgravel - -" Visual mode -let s:V1 = [ '#1a1a18' , '#ab3e5d' , 232 , 161 ] " blackestgravel & raspberry -let s:V2 = [ '#000000' , '#908571' , 16 , 252 ] " coal & winterterrain -let s:V3 = [ '#ab3e5d' , '#8c7f77' , 161 , 245 ] " raspberry & wetcoldterrain -let s:V4 = [ '#515744' , 101 ] " lichen - -" Replace mode -let s:RE = [ '#233e09' , 22 ] " oakleaf - -" Paste mode -let s:PA = [ '#ab3e5d' , 161 ] " raspberry - -let s:IA = [ s:N2[1] , s:N3[1] , s:N2[3], s:N3[3] , '' ] - - -let g:airline#themes#laederon#palette = {} - -let g:airline#themes#laederon#palette.accents = { - \ 'red': [ '#ef393d' , '' , 196 , '' , '' ] - \ } - -let g:airline#themes#laederon#palette.normal = airline#themes#generate_color_map(s:N1, s:N2, s:N3) -let g:airline#themes#laederon#palette.normal_modified = { - \ 'airline_a' : [ s:N2[0] , s:N4[0] , s:N2[2] , s:N4[1] , '' ] , - \ 'airline_c' : [ s:V1[1] , s:N2[1] , s:V1[3] , s:N2[3] , '' ] } - - -let g:airline#themes#laederon#palette.insert = airline#themes#generate_color_map(s:I1, s:I2, s:I3) -let g:airline#themes#laederon#palette.insert_modified = { - \ 'airline_c' : [ s:V2[1] , s:N2[1] , s:V2[3] , s:N2[3] , '' ] } -let g:airline#themes#laederon#palette.insert_paste = { - \ 'airline_a' : [ s:I1[0] , s:PA[0] , s:I1[2] , s:PA[1] , '' ] } - - -let g:airline#themes#laederon#palette.replace = copy(airline#themes#laederon#palette.insert) -let g:airline#themes#laederon#palette.replace.airline_a = [ s:I1[0] , s:RE[0] , s:I1[2] , s:RE[1] , '' ] -let g:airline#themes#laederon#palette.replace_modified = g:airline#themes#laederon#palette.insert_modified - - -let g:airline#themes#laederon#palette.visual = airline#themes#generate_color_map(s:V1, s:V2, s:V3) -let g:airline#themes#laederon#palette.visual_modified = { - \ 'airline_c' : [ s:V3[0] , s:V4[0] , s:V3[2] , s:V4[1] , '' ] } - - -let g:airline#themes#laederon#palette.inactive = airline#themes#generate_color_map(s:IA, s:IA, s:IA) -let g:airline#themes#laederon#palette.inactive_modified = { - \ 'airline_c' : [ s:V1[1] , '' , s:V1[3] , '' , '' ] } - diff --git a/bundle/airline/autoload/airline/themes/light.vim b/bundle/airline/autoload/airline/themes/light.vim deleted file mode 100755 index d9fe844..0000000 --- a/bundle/airline/autoload/airline/themes/light.vim +++ /dev/null @@ -1,45 +0,0 @@ -let g:airline#themes#light#palette = {} - -let s:N1 = [ '#ffffff' , '#005fff' , 255 , 27 ] -let s:N2 = [ '#000087' , '#00dfff' , 18 , 45 ] -let s:N3 = [ '#005fff' , '#afffff' , 27 , 159 ] -let g:airline#themes#light#palette.normal = airline#themes#generate_color_map(s:N1, s:N2, s:N3) -let g:airline#themes#light#palette.normal_modified = { - \ 'airline_c': [ '#df0000' , '#ffdfdf' , 160 , 224 , '' ] , - \ } - - -let s:I1 = [ '#ffffff' , '#00875f' , 255 , 29 ] -let s:I2 = [ '#005f00' , '#00df87' , 22 , 42 ] -let s:I3 = [ '#005f5f' , '#afff87' , 23 , 156 ] -let g:airline#themes#light#palette.insert = airline#themes#generate_color_map(s:I1, s:I2, s:I3) -let g:airline#themes#light#palette.insert_modified = { - \ 'airline_c': [ '#df0000' , '#ffdfdf' , 160 , 224 , '' ] , - \ } -let g:airline#themes#light#palette.insert_paste = { - \ 'airline_a': [ s:I1[0] , '#d78700' , s:I1[2] , 172 , '' ] , - \ } - - -let g:airline#themes#light#palette.replace = copy(g:airline#themes#light#palette.insert) -let g:airline#themes#light#palette.replace.airline_a = [ s:I2[0] , '#ff0000' , s:I1[2] , 196 , '' ] -let g:airline#themes#light#palette.replace_modified = g:airline#themes#light#palette.insert_modified - - -let s:V1 = [ '#ffffff' , '#ff5f00' , 255 , 202 ] -let s:V2 = [ '#5f0000' , '#ffaf00' , 52 , 214 ] -let s:V3 = [ '#df5f00' , '#ffff87' , 166 , 228 ] -let g:airline#themes#light#palette.visual = airline#themes#generate_color_map(s:V1, s:V2, s:V3) -let g:airline#themes#light#palette.visual_modified = { - \ 'airline_c': [ '#df0000' , '#ffdfdf' , 160 , 224 , '' ] , - \ } - - -let s:IA1 = [ '#666666' , '#b2b2b2' , 242 , 249 , '' ] -let s:IA2 = [ '#8a8a8a' , '#d0d0d0' , 245 , 252 , '' ] -let s:IA3 = [ '#a8a8a8' , '#ffffff' , 248 , 255 , '' ] -let g:airline#themes#light#palette.inactive = airline#themes#generate_color_map(s:IA1, s:IA2, s:IA3) -let g:airline#themes#light#palette.inactive_modified = { - \ 'airline_c': [ '#df0000' , '' , 160 , '' , '' ] , - \ } - diff --git a/bundle/airline/autoload/airline/themes/lucius.vim b/bundle/airline/autoload/airline/themes/lucius.vim deleted file mode 100755 index e386900..0000000 --- a/bundle/airline/autoload/airline/themes/lucius.vim +++ /dev/null @@ -1,56 +0,0 @@ -let g:airline#themes#lucius#palette = {} - -function! airline#themes#lucius#refresh() - - let s:N1 = airline#themes#get_highlight('StatusLine') - let s:N2 = airline#themes#get_highlight('Folded') - let s:N3 = airline#themes#get_highlight('CursorLine') - let g:airline#themes#lucius#palette.normal = airline#themes#generate_color_map(s:N1, s:N2, s:N3) - - let modified_group = airline#themes#get_highlight('Statement') - let g:airline#themes#lucius#palette.normal_modified = { - \ 'airline_c': [modified_group[0], '', modified_group[2], '', ''] - \ } - - let warning_group = airline#themes#get_highlight('DiffDelete') - let g:airline#themes#lucius#palette.normal.airline_warning = warning_group - let g:airline#themes#lucius#palette.normal_modified.airline_warning = warning_group - - let s:I1 = airline#themes#get_highlight('DiffAdd') - let s:I2 = s:N2 - let s:I3 = s:N3 - let g:airline#themes#lucius#palette.insert = airline#themes#generate_color_map(s:I1, s:I2, s:I3) - let g:airline#themes#lucius#palette.insert_modified = g:airline#themes#lucius#palette.normal_modified - let g:airline#themes#lucius#palette.insert.airline_warning = g:airline#themes#lucius#palette.normal.airline_warning - let g:airline#themes#lucius#palette.insert_modified.airline_warning = g:airline#themes#lucius#palette.normal_modified.airline_warning - - let s:R1 = airline#themes#get_highlight('DiffChange') - let s:R2 = s:N2 - let s:R3 = s:N3 - let g:airline#themes#lucius#palette.replace = airline#themes#generate_color_map(s:R1, s:R2, s:R3) - let g:airline#themes#lucius#palette.replace_modified = g:airline#themes#lucius#palette.normal_modified - let g:airline#themes#lucius#palette.replace.airline_warning = g:airline#themes#lucius#palette.normal.airline_warning - let g:airline#themes#lucius#palette.replace_modified.airline_warning = g:airline#themes#lucius#palette.normal_modified.airline_warning - - let s:V1 = airline#themes#get_highlight('Cursor') - let s:V2 = s:N2 - let s:V3 = s:N3 - let g:airline#themes#lucius#palette.visual = airline#themes#generate_color_map(s:V1, s:V2, s:V3) - let g:airline#themes#lucius#palette.visual_modified = g:airline#themes#lucius#palette.normal_modified - let g:airline#themes#lucius#palette.visual.airline_warning = g:airline#themes#lucius#palette.normal.airline_warning - let g:airline#themes#lucius#palette.visual_modified.airline_warning = g:airline#themes#lucius#palette.normal_modified.airline_warning - - let s:IA = airline#themes#get_highlight('StatusLineNC') - let g:airline#themes#lucius#palette.inactive = airline#themes#generate_color_map(s:IA, s:IA, s:IA) - let g:airline#themes#lucius#palette.inactive_modified = { - \ 'airline_c': [ modified_group[0], '', modified_group[2], '', '' ] - \ } - - let g:airline#themes#lucius#palette.accents = { - \ 'red': airline#themes#get_highlight('Constant'), - \ } - -endfunction - -call airline#themes#lucius#refresh() - diff --git a/bundle/airline/autoload/airline/themes/luna.vim b/bundle/airline/autoload/airline/themes/luna.vim deleted file mode 100755 index 879d862..0000000 --- a/bundle/airline/autoload/airline/themes/luna.vim +++ /dev/null @@ -1,92 +0,0 @@ -" vim-airline companion theme of Luna -" (https://github.com/Pychimp/vim-luna) - -let g:airline#themes#luna#palette = {} - -let g:airline#themes#luna#palette.accents = { - \ 'red': [ '#ffffff' , '' , 231 , '' , '' ], - \ } - - -let s:N1 = [ '#ffffff' , '#005252' , 231 , 36 ] -let s:N2 = [ '#ffffff' , '#003f3f' , 231 , 29 ] -let s:N3 = [ '#ffffff' , '#002b2b' , 231 , 23 ] -let g:airline#themes#luna#palette.normal = airline#themes#generate_color_map(s:N1, s:N2, s:N3) -let g:airline#themes#luna#palette.normal_modified = { - \ 'airline_c': [ '#ffffff' , '#450000' , 231 , 52 , '' ] , - \ } - - -let s:I1 = [ '#ffffff' , '#789f00' , 231 , 106 ] -let s:I2 = [ '#ffffff' , '#003f3f' , 231 , 29 ] -let s:I3 = [ '#ffffff' , '#002b2b' , 231 , 23 ] -let g:airline#themes#luna#palette.insert = airline#themes#generate_color_map(s:I1, s:I2, s:I3) -let g:airline#themes#luna#palette.insert_modified = { - \ 'airline_c': [ '#ffffff' , '#005e5e' , 255 , 52 , '' ] , - \ } -let g:airline#themes#luna#palette.insert_paste = { - \ 'airline_a': [ s:I1[0] , '#789f00' , s:I1[2] , 106 , '' ] , - \ } - - -let g:airline#themes#luna#palette.replace = copy(g:airline#themes#luna#palette.insert) -let g:airline#themes#luna#palette.replace.airline_a = [ s:I2[0] , '#920000' , s:I2[2] , 88 , '' ] -let g:airline#themes#luna#palette.replace_modified = g:airline#themes#luna#palette.insert_modified - -let s:V1 = [ '#ffff9a' , '#ff8036' , 222 , 208 ] -let s:V2 = [ '#ffffff' , '#003f3f' , 231 , 29 ] -let s:V3 = [ '#ffffff' , '#002b2b' , 231 , 23 ] -let g:airline#themes#luna#palette.visual = airline#themes#generate_color_map(s:V1, s:V2, s:V3) -let g:airline#themes#luna#palette.visual_modified = { - \ 'airline_c': [ '#ffffff' , '#450000' , 231 , 52 , '' ] , - \ } - -let s:IA = [ '#4e4e4e' , '#002b2b' , 59 , 23 , '' ] -let g:airline#themes#luna#palette.inactive = airline#themes#generate_color_map(s:IA, s:IA, s:IA) -let g:airline#themes#luna#palette.inactive_modified = { - \ 'airline_c': [ '#e20000' , '' , 166 , '' , '' ] , - \ } - -let g:airline#themes#luna#palette.tabline = { - \ 'airline_tab': ['#2aa198', '#003f3f', 231, 29, ''], - \ 'airline_tabsel': ['#ffffff', '#2e8b57', 231, 36, ''], - \ 'airline_tabtype': ['#ffffff', '#005252', 231, 36, ''], - \ 'airline_tabfill': ['#ffffff', '#002b2b', 231, 23, ''], - \ 'airline_tabmod': ['#ffffff', '#780000', 231, 88, ''], - \ } - -let s:WI = [ '#ffffff', '#5f0000', 231, 88 ] -let g:airline#themes#luna#palette.normal.airline_warning = [ - \ s:WI[0], s:WI[1], s:WI[2], s:WI[3] - \ ] - -let g:airline#themes#luna#palette.normal_modified.airline_warning = - \ g:airline#themes#luna#palette.normal.airline_warning - -let g:airline#themes#luna#palette.insert.airline_warning = - \ g:airline#themes#luna#palette.normal.airline_warning - -let g:airline#themes#luna#palette.insert_modified.airline_warning = - \ g:airline#themes#luna#palette.normal.airline_warning - -let g:airline#themes#luna#palette.visual.airline_warning = - \ g:airline#themes#luna#palette.normal.airline_warning - -let g:airline#themes#luna#palette.visual_modified.airline_warning = - \ g:airline#themes#luna#palette.normal.airline_warning - -let g:airline#themes#luna#palette.replace.airline_warning = - \ g:airline#themes#luna#palette.normal.airline_warning - -let g:airline#themes#luna#palette.replace_modified.airline_warning = - \ g:airline#themes#luna#palette.normal.airline_warning - - -if !get(g:, 'loaded_ctrlp', 0) - finish -endif -let g:airline#themes#luna#palette.ctrlp = airline#extensions#ctrlp#generate_color_map( - \ [ '#ffffff' , '#002b2b' , 231 , 23 , '' ] , - \ [ '#ffffff' , '#005252' , 231 , 36 , '' ] , - \ [ '#ffffff' , '#973d45' , 231 , 95 , '' ] ) - diff --git a/bundle/airline/autoload/airline/themes/molokai.vim b/bundle/airline/autoload/airline/themes/molokai.vim deleted file mode 100755 index 1998f00..0000000 --- a/bundle/airline/autoload/airline/themes/molokai.vim +++ /dev/null @@ -1,65 +0,0 @@ -let g:airline#themes#molokai#palette = {} - -let g:airline#themes#molokai#palette.accents = { - \ 'red': [ '#66d9ef' , '' , 81 , '' , '' ], - \ } - - -" Normal mode -let s:N1 = [ '#080808' , '#e6db74' , 232 , 144 ] " mode -let s:N2 = [ '#f8f8f0' , '#232526' , 253 , 16 ] " info -let s:N3 = [ '#f8f8f0' , '#465457' , 253 , 67 ] " statusline - -let g:airline#themes#molokai#palette.normal = airline#themes#generate_color_map(s:N1, s:N2, s:N3) -let g:airline#themes#molokai#palette.normal_modified = { - \ 'airline_c': [ '#080808' , '#e6db74' , 232 , 144 , '' ] , - \ } - - -" Insert mode -let s:I1 = [ '#080808' , '#66d9ef' , 232 , 81 ] -let s:I2 = [ '#f8f8f0' , '#232526' , 253 , 16 ] -let s:I3 = [ '#f8f8f0' , '#465457' , 253 , 67 ] - -let g:airline#themes#molokai#palette.insert = airline#themes#generate_color_map(s:I1, s:I2, s:I3) -let g:airline#themes#molokai#palette.insert_modified = { - \ 'airline_c': [ '#080808' , '#66d9ef' , 232 , 81 , '' ] , - \ } - - -" Replace mode -let g:airline#themes#molokai#palette.replace = copy(g:airline#themes#molokai#palette.insert) -let g:airline#themes#molokai#palette.replace.airline_a = [ s:I1[0] , '#ef5939' , s:I1[2] , 166 , '' ] -let g:airline#themes#molokai#palette.replace_modified = { - \ 'airline_c': [ '#080808' , '#ef5939' , 232 , 166 , '' ] , - \ } - - -" Visual mode -let s:V1 = [ '#080808' , '#fd971f' , 232 , 208 ] -let s:V2 = [ '#f8f8f0' , '#232526' , 253 , 16 ] -let s:V3 = [ '#f8f8f0' , '#465457' , 253 , 67 ] - -let g:airline#themes#molokai#palette.visual = airline#themes#generate_color_map(s:V1, s:V2, s:V3) -let g:airline#themes#molokai#palette.visual_modified = { - \ 'airline_c': [ '#080808' , '#fd971f' , 232 , 208 , '' ] , - \ } - - -" Inactive -let s:IA = [ '#1b1d1e' , '#465457' , 233 , 67 , '' ] -let g:airline#themes#molokai#palette.inactive = airline#themes#generate_color_map(s:IA, s:IA, s:IA) -let g:airline#themes#molokai#palette.inactive_modified = { - \ 'airline_c': [ '#f8f8f0' , '' , 253 , '' , '' ] , - \ } - - -" CtrlP -if !get(g:, 'loaded_ctrlp', 0) - finish -endif -let g:airline#themes#molokai#palette.ctrlp = airline#extensions#ctrlp#generate_color_map( - \ [ '#f8f8f0' , '#465457' , 253 , 67 , '' ] , - \ [ '#f8f8f0' , '#232526' , 253 , 16 , '' ] , - \ [ '#080808' , '#e6db74' , 232 , 144 , 'bold' ] ) - diff --git a/bundle/airline/autoload/airline/themes/monochrome.vim b/bundle/airline/autoload/airline/themes/monochrome.vim deleted file mode 100755 index 7dd1a17..0000000 --- a/bundle/airline/autoload/airline/themes/monochrome.vim +++ /dev/null @@ -1,15 +0,0 @@ -let g:airline#themes#monochrome#palette = {} - -function! airline#themes#monochrome#refresh() - let s:SL = airline#themes#get_highlight('StatusLine') - let g:airline#themes#monochrome#palette.normal = airline#themes#generate_color_map(s:SL, s:SL, s:SL) - let g:airline#themes#monochrome#palette.insert = g:airline#themes#monochrome#palette.normal - let g:airline#themes#monochrome#palette.replace = g:airline#themes#monochrome#palette.normal - let g:airline#themes#monochrome#palette.visual = g:airline#themes#monochrome#palette.normal - - let s:SLNC = airline#themes#get_highlight('StatusLineNC') - let g:airline#themes#monochrome#palette.inactive = airline#themes#generate_color_map(s:SLNC, s:SLNC, s:SLNC) -endfunction - -call airline#themes#monochrome#refresh() - diff --git a/bundle/airline/autoload/airline/themes/murmur.vim b/bundle/airline/autoload/airline/themes/murmur.vim deleted file mode 100755 index 08e4757..0000000 --- a/bundle/airline/autoload/airline/themes/murmur.vim +++ /dev/null @@ -1,82 +0,0 @@ -let g:airline#themes#murmur#palette = {} - -" Color palette -let s:cterm_termbg = 237 " Background for branch and file format blocks -let s:gui_termbg = '#5F5F5F' -let s:cterm_termfg = 144 " Foreground for branch and file format blocks -let s:gui_termfg = '#AFAF87' - -let s:cterm_termbg2 = 234 " Background for middle block -let s:gui_termbg2 = '#1C1C1C' -let s:cterm_termfg2 = 39 " Foreground for middle block -let s:gui_termfg2 = '#F5F5F5' - -let s:cterm_normalbg = 27 " Background for normal mode and file position blocks -let s:gui_normalbg = '#5F87FF' -let s:cterm_normalfg = 15 " Foreground for normal mode and file position blocks -let s:gui_normalfg = '#FFFFFF' - -let s:cterm_insertbg = 70 " Background for insert mode and file position blocks -let s:gui_insertbg = '#87AF5F' -let s:cterm_insertfg = 15 " Foreground for insert mode and file position blocks -let s:gui_insertfg = '#FFFFFF' - -let s:cterm_visualbg = 166 " Background for visual mode and file position blocks -let s:gui_visualbg = '#ff8c00' -let s:cterm_visualfg = 15 " Foreground for visual mode and file position blocks -let s:gui_visualfg = '#FFFFFF' - -let s:cterm_replacebg = 88 " Background for replace mode and file position blocks -let s:gui_replacebg = '#870000' -let s:cterm_replacefg = 15 " Foreground for replace mode and file position blocks -let s:gui_replacefg = '#FFFFFF' - -let s:cterm_alert = 88 " Modified file alert color -let s:gui_alert = '#870000' - -let s:cterm_inactivebg = 234 " Background for inactive mode -let s:gui_inactivebg = '#1C1C1C' -let s:cterm_inactivefg = 239 " Foreground for inactive mode -let s:gui_inactivefg = '#4E4E4E' - -" Branch and file format -let s:BB = [s:gui_termfg, s:gui_termbg, s:cterm_termfg, s:cterm_termbg] " Branch and file format blocks - -" Normal mode -let s:N1 = [s:gui_normalfg, s:gui_normalbg, s:cterm_normalfg, s:cterm_normalbg] " Outside blocks in normal mode -let s:N2 = [s:gui_termfg2, s:gui_termbg2, s:cterm_normalbg, s:cterm_termbg2] " Middle block -let g:airline#themes#murmur#palette.normal = airline#themes#generate_color_map(s:N1, s:BB, s:N2) -let g:airline#themes#murmur#palette.normal_modified = {'airline_c': [s:gui_alert, s:gui_termbg2, s:cterm_alert, s:cterm_termbg2, 'bold'] ,} - -" Insert mode -let s:I1 = [s:gui_insertfg, s:gui_insertbg, s:cterm_insertfg, s:cterm_insertbg] " Outside blocks in insert mode -let s:I2 = [s:gui_insertbg, s:gui_termbg2, s:cterm_insertbg, s:cterm_termbg2] " Middle block -let g:airline#themes#murmur#palette.insert = airline#themes#generate_color_map(s:I1, s:BB, s:I2) -let g:airline#themes#murmur#palette.insert_modified = {'airline_c': [s:gui_alert, s:gui_termbg2, s:cterm_alert, s:cterm_termbg2, 'bold'] ,} - -" Replace mode -let s:R1 = [s:gui_replacefg, s:gui_replacebg, s:cterm_replacefg, s:cterm_replacebg] " Outside blocks in replace mode -let s:R2 = [s:gui_termfg, s:gui_termbg2, s:cterm_termfg, s:cterm_termbg2] " Middle block -let g:airline#themes#murmur#palette.replace = airline#themes#generate_color_map(s:R1, s:BB, s:R2) -let g:airline#themes#murmur#palette.replace_modified = {'airline_c': [s:gui_alert, s:gui_termbg2, s:cterm_alert, s:cterm_termbg2, 'bold'] ,} - -" Visual mode -let s:V1 = [s:gui_visualfg, s:gui_visualbg, s:cterm_visualfg, s:cterm_visualbg] " Outside blocks in visual mode -let s:V2 = [s:gui_visualbg, s:gui_termbg2, s:cterm_visualbg, s:cterm_termbg2] " Middle block -let g:airline#themes#murmur#palette.visual = airline#themes#generate_color_map(s:V1, s:BB, s:V2) -let g:airline#themes#murmur#palette.visual_modified = {'airline_c': [s:gui_alert, s:gui_termbg2, s:cterm_alert, s:cterm_termbg2, 'bold'] ,} - -" Inactive mode -let s:IA1 = [s:gui_inactivefg, s:gui_inactivebg, s:cterm_inactivefg, s:cterm_inactivebg, ''] -let s:IA2 = [s:gui_inactivefg, s:gui_inactivebg, s:cterm_inactivefg, s:cterm_inactivebg, ''] -let s:IA3 = [s:gui_inactivefg, s:gui_inactivebg, s:cterm_inactivefg, s:cterm_inactivebg, ''] -let g:airline#themes#murmur#palette.inactive = airline#themes#generate_color_map(s:IA1, s:IA2, s:IA3) - -" CtrlP plugin colors -if !get(g:, 'loaded_ctrlp', 0) - finish -endif -let g:airline#themes#murmur#palette.ctrlp = airline#extensions#ctrlp#generate_color_map( - \ [s:gui_normalfg, s:gui_normalbg, s:cterm_normalfg, s:cterm_normalbg, ''], - \ [s:gui_termfg, s:gui_termbg, s:cterm_termfg, s:cterm_termbg, ''], - \ [s:gui_termfg2, s:gui_termbg2, s:cterm_termfg2, s:cterm_termbg2, 'bold']) diff --git a/bundle/airline/autoload/airline/themes/powerlineish.vim b/bundle/airline/autoload/airline/themes/powerlineish.vim deleted file mode 100755 index d550e11..0000000 --- a/bundle/airline/autoload/airline/themes/powerlineish.vim +++ /dev/null @@ -1,46 +0,0 @@ -" Theme to mimic the default colorscheme of powerline -" Not 100% the same so it's powerline... ish. -" -" Differences from default powerline: -" * Paste indicator isn't colored different -" * Far right hand section matches the color of the mode indicator -" -" Differences from other airline themes: -" * No color differences when you're in a modified buffer -" * Visual mode only changes the mode section. Otherwise -" it appears the same as normal mode - -" Normal mode " fg & bg -let s:N1 = [ '#005f00' , '#afd700' , 22 , 148 ] " darkestgreen & brightgreen -let s:N2 = [ '#9e9e9e' , '#303030' , 247 , 236 ] " gray8 & gray2 -let s:N3 = [ '#ffffff' , '#121212' , 231 , 233 ] " white & gray4 - -" Insert mode " fg & bg -let s:I1 = [ '#005f5f' , '#ffffff' , 23 , 231 ] " darkestcyan & white -let s:I2 = [ '#5fafd7' , '#0087af' , 74 , 31 ] " darkcyan & darkblue -let s:I3 = [ '#87d7ff' , '#005f87' , 117 , 24 ] " mediumcyan & darkestblue - -" Visual mode " fg & bg -let s:V1 = [ '#080808' , '#ffaf00' , 232 , 214 ] " gray3 & brightestorange - -" Replace mode " fg & bg -let s:RE = [ '#ffffff' , '#d70000' , 231 , 160 ] " white & brightred - -let g:airline#themes#powerlineish#palette = {} - -let g:airline#themes#powerlineish#palette.normal = airline#themes#generate_color_map(s:N1, s:N2, s:N3) - -let g:airline#themes#powerlineish#palette.insert = airline#themes#generate_color_map(s:I1, s:I2, s:I3) -let g:airline#themes#powerlineish#palette.insert_replace = { - \ 'airline_a': [ s:RE[0] , s:I1[1] , s:RE[1] , s:I1[3] , '' ] } - -let g:airline#themes#powerlineish#palette.visual = { - \ 'airline_a': [ s:V1[0] , s:V1[1] , s:V1[2] , s:V1[3] , '' ] } - -let g:airline#themes#powerlineish#palette.replace = copy(airline#themes#powerlineish#palette.normal) -let g:airline#themes#powerlineish#palette.replace.airline_a = [ s:RE[0] , s:RE[1] , s:RE[2] , s:RE[3] , '' ] - - -let s:IA = [ s:N2[1] , s:N3[1] , s:N2[3] , s:N3[3] , '' ] -let g:airline#themes#powerlineish#palette.inactive = airline#themes#generate_color_map(s:IA, s:IA, s:IA) - diff --git a/bundle/airline/autoload/airline/themes/raven.vim b/bundle/airline/autoload/airline/themes/raven.vim deleted file mode 100755 index 02bfd73..0000000 --- a/bundle/airline/autoload/airline/themes/raven.vim +++ /dev/null @@ -1,85 +0,0 @@ -let g:airline#themes#raven#palette = {} - -let g:airline#themes#raven#palette.accents = { - \ 'red': [ '#ff2121' , '' , 196 , '' , '' ], - \ } - -let s:N1 = [ '#c8c8c8' , '#2e2e2e' , 188 , 235 ] -let s:N2 = [ '#c8c8c8' , '#2e2e2e' , 188 , 235 ] -let s:N3 = [ '#c8c8c8' , '#2e2e2e' , 188 , 235 ] -let g:airline#themes#raven#palette.normal = airline#themes#generate_color_map(s:N1, s:N2, s:N3) -let g:airline#themes#raven#palette.normal_modified = { - \ 'airline_c': [ '#e25000' , '#2e2e2e' , 166 , 235 , '' ] , - \ } - -let s:I1 = [ '#11c279' , '#2e2e2e' , 36 , 235 ] -let s:I2 = [ '#11c279' , '#2e2e2e' , 36 , 235 ] -let s:I3 = [ '#11c279' , '#2e2e2e' , 36 , 235 ] -let g:airline#themes#raven#palette.insert = airline#themes#generate_color_map(s:I1, s:I2, s:I3) -let g:airline#themes#raven#palette.insert_modified = { - \ 'airline_c': [ '#e25000' , '#2e2e2e' , 166 , 235 , '' ] , - \ } -let g:airline#themes#raven#palette.insert_paste = { - \ 'airline_a': [ s:I1[0] , '#2e2e2e' , s:I1[2] , 235 , '' ] , - \ } - -let g:airline#themes#raven#palette.replace = copy(g:airline#themes#raven#palette.insert) -let g:airline#themes#raven#palette.replace.airline_a = [ '#e60000' , s:I1[1] , 160 , s:I1[3] , '' ] -let g:airline#themes#raven#palette.replace.airline_z = [ '#e60000' , s:I1[1] , 160 , s:I1[3] , '' ] -let g:airline#themes#raven#palette.replace_modified = g:airline#themes#raven#palette.insert_modified - -let s:V1 = [ '#6565ff' , '#2e2e2e' , 63 , 235 ] -let s:V2 = [ '#6565ff' , '#2e2e2e' , 63 , 235 ] -let s:V3 = [ '#6565ff' , '#2e2e2e' , 63 , 235 ] -let g:airline#themes#raven#palette.visual = airline#themes#generate_color_map(s:V1, s:V2, s:V3) -let g:airline#themes#raven#palette.visual_modified = { - \ 'airline_c': [ '#e25000' , '#2e2e2e' , 166 , 235 , '' ] , - \ } - -let s:IA = [ '#5e5e5e' , '#222222' , 59 , 235 , '' ] -let g:airline#themes#raven#palette.inactive = airline#themes#generate_color_map(s:IA, s:IA, s:IA) -let g:airline#themes#raven#palette.inactive_modified = { - \ 'airline_c': [ '#e25000' , '' , 166 , '' , '' ] , - \ } - -let g:airline#themes#raven#palette.tabline = { - \ 'airline_tab': ['#c8c8c8' , '#2e2e2e' , 188 , 235 , '' ], - \ 'airline_tabsel': ['#2e2e2e' , '#a4c639' , 235 , 149 , '' ], - \ 'airline_tabtype': ['#c8c8c8' , '#2e2e2e' , 188 , 235 , '' ], - \ 'airline_tabfill': ['#c8c8c8' , '#2e2e2e' , 188 , 235 , '' ], - \ 'airline_tabmod': ['#2e2e2e' , '#a4c639' , 235 , 149 , '' ], - \ } - -let s:WI = [ '#ff0000', '#2e2e2e', 196, 235 ] -let g:airline#themes#raven#palette.normal.airline_warning = [ - \ s:WI[0], s:WI[1], s:WI[2], s:WI[3] - \ ] - -let g:airline#themes#raven#palette.normal_modified.airline_warning = - \ g:airline#themes#raven#palette.normal.airline_warning - -let g:airline#themes#raven#palette.insert.airline_warning = - \ g:airline#themes#raven#palette.normal.airline_warning - -let g:airline#themes#raven#palette.insert_modified.airline_warning = - \ g:airline#themes#raven#palette.normal.airline_warning - -let g:airline#themes#raven#palette.visual.airline_warning = - \ g:airline#themes#raven#palette.normal.airline_warning - -let g:airline#themes#raven#palette.visual_modified.airline_warning = - \ g:airline#themes#raven#palette.normal.airline_warning - -let g:airline#themes#raven#palette.replace.airline_warning = - \ g:airline#themes#raven#palette.normal.airline_warning - -let g:airline#themes#raven#palette.replace_modified.airline_warning = - \ g:airline#themes#raven#palette.normal.airline_warning - -if !get(g:, 'loaded_ctrlp', 0) - finish -endif -let g:airline#themes#raven#palette.ctrlp = airline#extensions#ctrlp#generate_color_map( - \ [ '#c8c8c8' , '#2e2e2e' , 188 , 235 , '' ] , - \ [ '#c8c8c8' , '#2e2e2e' , 188 , 235 , '' ] , - \ [ '#2e2e2e' , '#a4c639' , 235 , 149 , '' ] ) diff --git a/bundle/airline/autoload/airline/themes/serene.vim b/bundle/airline/autoload/airline/themes/serene.vim deleted file mode 100755 index 9191c07..0000000 --- a/bundle/airline/autoload/airline/themes/serene.vim +++ /dev/null @@ -1,41 +0,0 @@ -let g:airline#themes#serene#palette = {} - -let s:guibg = '#080808' -let s:termbg = 232 -let s:termsep = 236 -let s:guisep = '#303030' - -let s:N1 = [ '#00dfff' , s:guibg , 45 , s:termbg ] -let s:N2 = [ '#ff5f00' , s:guibg , 202 , s:termbg ] -let s:N3 = [ '#767676' , s:guibg , 7 , s:termbg ] - -let g:airline#themes#serene#palette.normal = airline#themes#generate_color_map(s:N1, s:N2, s:N3) -let g:airline#themes#serene#palette.normal_modified = { - \ 'airline_c': [ '#df0000' , s:guibg, 160 , s:termbg , '' ] , - \ } - -let s:I1 = [ '#5fff00' , s:guibg , 82 , s:termbg ] -let s:I2 = [ '#ff5f00' , s:guibg , 202 , s:termbg ] -let s:I3 = [ '#767676' , s:guibg , 7 , s:termbg ] -let g:airline#themes#serene#palette.insert = airline#themes#generate_color_map(s:I1, s:I2, s:I3) -let g:airline#themes#serene#palette.insert_modified = copy(g:airline#themes#serene#palette.normal_modified) -let g:airline#themes#serene#palette.insert_paste = { - \ 'airline_a': [ s:I1[0] , '#d78700' , s:I1[2] , 172 , '' ] , - \ } - -let g:airline#themes#serene#palette.replace = { - \ 'airline_a': [ s:I1[0] , '#af0000' , s:I1[2] , 124 , '' ] , - \ } -let g:airline#themes#serene#palette.replace_modified = copy(g:airline#themes#serene#palette.normal_modified) - -let s:V1 = [ '#dfdf00' , s:guibg , 184 , s:termbg ] -let s:V2 = [ '#ff5f00' , s:guibg , 202 , s:termbg ] -let s:V3 = [ '#767676' , s:guibg , 7 , s:termbg ] -let g:airline#themes#serene#palette.visual = airline#themes#generate_color_map(s:V1, s:V2, s:V3) -let g:airline#themes#serene#palette.visual_modified = copy(g:airline#themes#serene#palette.normal_modified) - -let s:IA = [ '#4e4e4e' , s:guibg , 239 , s:termbg , '' ] -let s:IA2 = [ '#4e4e4e' , s:guisep , 239 , s:termsep , '' ] -let g:airline#themes#serene#palette.inactive = airline#themes#generate_color_map(s:IA, s:IA2, s:IA2) -let g:airline#themes#serene#palette.inactive_modified = copy(g:airline#themes#serene#palette.normal_modified) - diff --git a/bundle/airline/autoload/airline/themes/silver.vim b/bundle/airline/autoload/airline/themes/silver.vim deleted file mode 100755 index fd85edb..0000000 --- a/bundle/airline/autoload/airline/themes/silver.vim +++ /dev/null @@ -1,85 +0,0 @@ -let g:airline#themes#silver#palette = {} - -let g:airline#themes#silver#palette.accents = { - \ 'red': [ '#ff2121' , '' , 196 , '' , '' ], - \ } - -let s:N1 = [ '#414141' , '#e1e1e1' , 59 , 188 ] -let s:N2 = [ '#414141' , '#e1e1e1' , 59 , 188 ] -let s:N3 = [ '#414141' , '#e1e1e1' , 59 , 188 ] -let g:airline#themes#silver#palette.normal = airline#themes#generate_color_map(s:N1, s:N2, s:N3) -let g:airline#themes#silver#palette.normal_modified = { - \ 'airline_c': [ '#e25000' , '#e1e1e1' , 166 , 188 , '' ] , - \ } - -let s:I1 = [ '#0d935c' , '#e1e1e1' , 29 , 188 ] -let s:I2 = [ '#0d935c' , '#e1e1e1' , 29 , 188 ] -let s:I3 = [ '#0d935c' , '#e1e1e1' , 29 , 188 ] -let g:airline#themes#silver#palette.insert = airline#themes#generate_color_map(s:I1, s:I2, s:I3) -let g:airline#themes#silver#palette.insert_modified = { - \ 'airline_c': [ '#e25000' , '#e1e1e1' , 166 , 188 , '' ] , - \ } -let g:airline#themes#silver#palette.insert_paste = { - \ 'airline_a': [ s:I1[0] , '#e1e1e1' , s:I1[2] , 188 , '' ] , - \ } - -let g:airline#themes#silver#palette.replace = copy(g:airline#themes#silver#palette.insert) -let g:airline#themes#silver#palette.replace.airline_a = [ '#b30000' , s:I1[1] , 124 , s:I1[3] , '' ] -let g:airline#themes#silver#palette.replace.airline_z = [ '#b30000' , s:I1[1] , 124 , s:I1[3] , '' ] -let g:airline#themes#silver#palette.replace_modified = g:airline#themes#silver#palette.insert_modified - -let s:V1 = [ '#0000b3' , '#e1e1e1' , 19 , 188 ] -let s:V2 = [ '#0000b3' , '#e1e1e1' , 19 , 188 ] -let s:V3 = [ '#0000b3' , '#e1e1e1' , 19 , 188 ] -let g:airline#themes#silver#palette.visual = airline#themes#generate_color_map(s:V1, s:V2, s:V3) -let g:airline#themes#silver#palette.visual_modified = { - \ 'airline_c': [ '#e25000' , '#e1e1e1' , 166 , 188 , '' ] , - \ } - -let s:IA = [ '#a1a1a1' , '#dddddd' , 145 , 188 , '' ] -let g:airline#themes#silver#palette.inactive = airline#themes#generate_color_map(s:IA, s:IA, s:IA) -let g:airline#themes#silver#palette.inactive_modified = { - \ 'airline_c': [ '#e25000' , '' , 166 , '' , '' ] , - \ } - -let g:airline#themes#silver#palette.tabline = { - \ 'airline_tab': ['#414141' , '#e1e1e1' , 59 , 188 , '' ], - \ 'airline_tabsel': ['#e1e1e1' , '#007599' , 188 , 30 , '' ], - \ 'airline_tabtype': ['#414141' , '#e1e1e1' , 59 , 188 , '' ], - \ 'airline_tabfill': ['#414141' , '#e1e1e1' , 59 , 188 , '' ], - \ 'airline_tabmod': ['#e1e1e1' , '#007599' , 188 , 30 , '' ], - \ } - -let s:WI = [ '#ff0000', '#e1e1e1', 196, 188 ] -let g:airline#themes#silver#palette.normal.airline_warning = [ - \ s:WI[0], s:WI[1], s:WI[2], s:WI[3] - \ ] - -let g:airline#themes#silver#palette.normal_modified.airline_warning = - \ g:airline#themes#silver#palette.normal.airline_warning - -let g:airline#themes#silver#palette.insert.airline_warning = - \ g:airline#themes#silver#palette.normal.airline_warning - -let g:airline#themes#silver#palette.insert_modified.airline_warning = - \ g:airline#themes#silver#palette.normal.airline_warning - -let g:airline#themes#silver#palette.visual.airline_warning = - \ g:airline#themes#silver#palette.normal.airline_warning - -let g:airline#themes#silver#palette.visual_modified.airline_warning = - \ g:airline#themes#silver#palette.normal.airline_warning - -let g:airline#themes#silver#palette.replace.airline_warning = - \ g:airline#themes#silver#palette.normal.airline_warning - -let g:airline#themes#silver#palette.replace_modified.airline_warning = - \ g:airline#themes#silver#palette.normal.airline_warning - -if !get(g:, 'loaded_ctrlp', 0) - finish -endif -let g:airline#themes#silver#palette.ctrlp = airline#extensions#ctrlp#generate_color_map( - \ [ '#414141' , '#e1e1e1' , 59 , 188 , '' ] , - \ [ '#414141' , '#e1e1e1' , 59 , 188 , '' ] , - \ [ '#e1e1e1' , '#007599' , 188 , 30 , '' ] ) diff --git a/bundle/airline/autoload/airline/themes/simple.vim b/bundle/airline/autoload/airline/themes/simple.vim deleted file mode 100755 index a111a1c..0000000 --- a/bundle/airline/autoload/airline/themes/simple.vim +++ /dev/null @@ -1,46 +0,0 @@ -let g:airline#themes#simple#palette = {} - -let s:guibg = '#080808' -let s:guibg2 = '#1c1c1c' -let s:termbg = 232 -let s:termbg2= 234 - -let s:N1 = [ s:guibg , '#00dfff' , s:termbg , 45 ] -let s:N2 = [ '#ff5f00' , s:guibg2, 202 , s:termbg2 ] -let s:N3 = [ '#767676' , s:guibg, 243 , s:termbg] -let g:airline#themes#simple#palette.normal = airline#themes#generate_color_map(s:N1, s:N2, s:N3) -let g:airline#themes#simple#palette.normal_modified = { - \ 'airline_c': [ '#df0000' , s:guibg, 160 , s:termbg , '' ] , - \ } - - -let s:I1 = [ s:guibg, '#5fff00' , s:termbg , 82 ] -let s:I2 = [ '#ff5f00' , s:guibg2, 202 , s:termbg2 ] -let s:I3 = [ '#767676' , s:guibg, 243 , s:termbg ] -let g:airline#themes#simple#palette.insert = airline#themes#generate_color_map(s:I1, s:I2, s:I3) -let g:airline#themes#simple#palette.insert_modified = copy(g:airline#themes#simple#palette.normal_modified) -let g:airline#themes#simple#palette.insert_paste = { - \ 'airline_a': [ s:I1[0] , '#d78700' , s:I1[2] , 172 , '' ] , - \ } - - -let g:airline#themes#simple#palette.replace = { - \ 'airline_a': [ s:I1[0] , '#af0000' , s:I1[2] , 124 , '' ] , - \ } -let g:airline#themes#simple#palette.replace_modified = copy(g:airline#themes#simple#palette.normal_modified) - - -let s:V1 = [ s:guibg, '#dfdf00' , s:termbg , 184 ] -let s:V2 = [ '#ff5f00' , s:guibg2, 202 , s:termbg2 ] -let s:V3 = [ '#767676' , s:guibg, 243 , s:termbg ] -let g:airline#themes#simple#palette.visual = airline#themes#generate_color_map(s:V1, s:V2, s:V3) -let g:airline#themes#simple#palette.visual_modified = copy(g:airline#themes#simple#palette.normal_modified) - - -let s:IA = [ '#4e4e4e' , s:guibg , 239 , s:termbg , '' ] -let s:IA2 = [ '#4e4e4e' , s:guibg2 , 239 , s:termbg2 , '' ] -let g:airline#themes#simple#palette.inactive = airline#themes#generate_color_map(s:IA, s:IA2, s:IA2) -let g:airline#themes#simple#palette.inactive_modified = { - \ 'airline_c': [ '#df0000', '', 160, '', '' ] , - \ } - diff --git a/bundle/airline/autoload/airline/themes/sol.vim b/bundle/airline/autoload/airline/themes/sol.vim deleted file mode 100755 index 89ea505..0000000 --- a/bundle/airline/autoload/airline/themes/sol.vim +++ /dev/null @@ -1,90 +0,0 @@ -" vim-airline companion theme of Sol -" (https://github.com/Pychimp/vim-sol) - -let g:airline#themes#sol#palette = {} - -let g:airline#themes#sol#palette.accents = { - \ 'red': [ '#ffffff' , '' , 231 , '' , '' ], - \ } - -let s:N1 = [ '#343434' , '#a0a0a0' , 237 , 248 ] -let s:N2 = [ '#343434' , '#b3b3b3' , 237 , 250 ] -let s:N3 = [ '#343434' , '#c7c7c7' , 237 , 252 ] -let g:airline#themes#sol#palette.normal = airline#themes#generate_color_map(s:N1, s:N2, s:N3) -let g:airline#themes#sol#palette.normal_modified = { - \ 'airline_c': [ '#ffffff' , '#ff6868' , 237 , 209 , '' ] , - \ } - - -let s:I1 = [ '#eeeeee' , '#09643f' , 255 , 30 ] -let s:I2 = [ '#343434' , '#a3a3a3' , 237 , 249 ] -let s:I3 = [ '#343434' , '#b0b0b0' , 237 , 250 ] -let g:airline#themes#sol#palette.insert = airline#themes#generate_color_map(s:I1, s:I2, s:I3) -let g:airline#themes#sol#palette.insert_modified = { - \ 'airline_c': [ '#343434' , '#ffdbc7' , 237 , 216 , '' ] , - \ } -let g:airline#themes#sol#palette.insert_paste = { - \ 'airline_a': [ s:I1[0] , '#09643f' , s:I1[2] , 30 , '' ] , - \ } - - -let g:airline#themes#sol#palette.replace = copy(g:airline#themes#sol#palette.insert) -let g:airline#themes#sol#palette.replace.airline_a = [ s:I1[0] , '#ff2121' , s:I1[2] , 196 , '' ] -let g:airline#themes#sol#palette.replace.airline_z = [ s:I1[0] , '#ff2121' , s:I1[2] , 196 , '' ] -let g:airline#themes#sol#palette.replace_modified = g:airline#themes#sol#palette.insert_modified - -let s:V1 = [ '#ffff9a' , '#ff6003' , 222 , 202 ] -let s:V2 = [ '#343434' , '#a3a3a3' , 237 , 249 ] -let s:V3 = [ '#343434' , '#b0b0b0' , 237 , 250 ] -let g:airline#themes#sol#palette.visual = airline#themes#generate_color_map(s:V1, s:V2, s:V3) -let g:airline#themes#sol#palette.visual_modified = { - \ 'airline_c': [ '#343434' , '#ffdbc7' , 237 , 216 , '' ] , - \ } - -let s:IA = [ '#777777' , '#c7c7c7' , 244 , 251 , '' ] -let g:airline#themes#sol#palette.inactive = airline#themes#generate_color_map(s:IA, s:IA, s:IA) -let g:airline#themes#sol#palette.inactive_modified = { - \ 'airline_c': [ '#ff3535' , '' , 203 , '' , '' ] , - \ } - -let g:airline#themes#sol#palette.tabline = { - \ 'airline_tab': ['#343434', '#b3b3b3', 237, 250, ''], - \ 'airline_tabsel': ['#ffffff', '#004b9a', 231, 31 , ''], - \ 'airline_tabtype': ['#343434', '#a0a0a0', 237, 248, ''], - \ 'airline_tabfill': ['#343434', '#c7c7c7', 237, 251, ''], - \ 'airline_tabmod': ['#343434', '#ffdbc7', 237, 216, ''], - \ } - -let s:WI = [ '#eeeeee', '#e33900', 255, 166 ] -let g:airline#themes#sol#palette.normal.airline_warning = [ - \ s:WI[0], s:WI[1], s:WI[2], s:WI[3] - \ ] - -let g:airline#themes#sol#palette.normal_modified.airline_warning = - \ g:airline#themes#sol#palette.normal.airline_warning - -let g:airline#themes#sol#palette.insert.airline_warning = - \ g:airline#themes#sol#palette.normal.airline_warning - -let g:airline#themes#sol#palette.insert_modified.airline_warning = - \ g:airline#themes#sol#palette.normal.airline_warning - -let g:airline#themes#sol#palette.visual.airline_warning = - \ g:airline#themes#sol#palette.normal.airline_warning - -let g:airline#themes#sol#palette.visual_modified.airline_warning = - \ g:airline#themes#sol#palette.normal.airline_warning - -let g:airline#themes#sol#palette.replace.airline_warning = - \ g:airline#themes#sol#palette.normal.airline_warning - -let g:airline#themes#sol#palette.replace_modified.airline_warning = - \ g:airline#themes#sol#palette.normal.airline_warning - -if !get(g:, 'loaded_ctrlp', 0) - finish -endif -let g:airline#themes#sol#palette.ctrlp = airline#extensions#ctrlp#generate_color_map( - \ [ '#343434' , '#c7c7c7' , 237 , 251 , '' ] , - \ [ '#343434' , '#b3b3b3' , 237 , 250 , '' ] , - \ [ '#eeeeee' , '#007fff' , 255 , 27 , '' ] ) diff --git a/bundle/airline/autoload/airline/themes/solarized.vim b/bundle/airline/autoload/airline/themes/solarized.vim deleted file mode 100755 index 30ba47e..0000000 --- a/bundle/airline/autoload/airline/themes/solarized.vim +++ /dev/null @@ -1,176 +0,0 @@ -let g:airline#themes#solarized#palette = {} - -function! airline#themes#solarized#refresh() - """""""""""""""""""""""""""""""""""""""""""""""" - " Options - """""""""""""""""""""""""""""""""""""""""""""""" - let s:background = get(g:, 'airline_solarized_bg', &background) - let s:ansi_colors = get(g:, 'solarized_termcolors', 16) != 256 && &t_Co >= 16 ? 1 : 0 - let s:tty = &t_Co == 8 - - """""""""""""""""""""""""""""""""""""""""""""""" - " Colors - """""""""""""""""""""""""""""""""""""""""""""""" - " Base colors - let s:base03 = {'t': s:ansi_colors ? 8 : (s:tty ? '0' : 234), 'g': '#002b36'} - let s:base02 = {'t': s:ansi_colors ? '0' : (s:tty ? '0' : 235), 'g': '#073642'} - let s:base01 = {'t': s:ansi_colors ? 10 : (s:tty ? '0' : 240), 'g': '#586e75'} - let s:base00 = {'t': s:ansi_colors ? 11 : (s:tty ? '7' : 241), 'g': '#657b83'} - let s:base0 = {'t': s:ansi_colors ? 12 : (s:tty ? '7' : 244), 'g': '#839496'} - let s:base1 = {'t': s:ansi_colors ? 14 : (s:tty ? '7' : 245), 'g': '#93a1a1'} - let s:base2 = {'t': s:ansi_colors ? 7 : (s:tty ? '7' : 254), 'g': '#eee8d5'} - let s:base3 = {'t': s:ansi_colors ? 15 : (s:tty ? '7' : 230), 'g': '#fdf6e3'} - let s:yellow = {'t': s:ansi_colors ? 3 : (s:tty ? '3' : 136), 'g': '#b58900'} - let s:orange = {'t': s:ansi_colors ? 9 : (s:tty ? '1' : 166), 'g': '#cb4b16'} - let s:red = {'t': s:ansi_colors ? 1 : (s:tty ? '1' : 160), 'g': '#dc322f'} - let s:magenta = {'t': s:ansi_colors ? 5 : (s:tty ? '5' : 125), 'g': '#d33682'} - let s:violet = {'t': s:ansi_colors ? 13 : (s:tty ? '5' : 61 ), 'g': '#6c71c4'} - let s:blue = {'t': s:ansi_colors ? 4 : (s:tty ? '4' : 33 ), 'g': '#268bd2'} - let s:cyan = {'t': s:ansi_colors ? 6 : (s:tty ? '6' : 37 ), 'g': '#2aa198'} - let s:green = {'t': s:ansi_colors ? 2 : (s:tty ? '2' : 64 ), 'g': '#859900'} - - """""""""""""""""""""""""""""""""""""""""""""""" - " Simple mappings - " NOTE: These are easily tweakable mappings. The actual mappings get - " the specific gui and terminal colors from the base color dicts. - """""""""""""""""""""""""""""""""""""""""""""""" - " Normal mode - if s:background == 'dark' - let s:N1 = [s:base3, s:base1, 'bold'] - let s:N2 = [s:base2, (s:tty ? s:base01 : s:base00), ''] - let s:N3 = [s:base01, s:base02, ''] - else - let s:N1 = [s:base2, s:base00, 'bold'] - let s:N2 = [(s:tty ? s:base01 : s:base2), s:base1, ''] - let s:N3 = [s:base1, s:base2, ''] - endif - let s:NF = [s:orange, s:N3[1], ''] - let s:NW = [s:base3, s:orange, ''] - if s:background == 'dark' - let s:NM = [s:base1, s:N3[1], ''] - let s:NMi = [s:base2, s:N3[1], ''] - else - let s:NM = [s:base01, s:N3[1], ''] - let s:NMi = [s:base02, s:N3[1], ''] - endif - - " Insert mode - let s:I1 = [s:N1[0], s:yellow, 'bold'] - let s:I2 = s:N2 - let s:I3 = s:N3 - let s:IF = s:NF - let s:IM = s:NM - - " Visual mode - let s:V1 = [s:N1[0], s:magenta, 'bold'] - let s:V2 = s:N2 - let s:V3 = s:N3 - let s:VF = s:NF - let s:VM = s:NM - - " Replace mode - let s:R1 = [s:N1[0], s:red, ''] - let s:R2 = s:N2 - let s:R3 = s:N3 - let s:RM = s:NM - let s:RF = s:NF - - " Inactive, according to VertSplit in solarized - " (bg dark: base00; bg light: base0) - if s:background == 'dark' - let s:IA = [s:base02, s:base00, ''] - else - let s:IA = [s:base2, s:base0, ''] - endif - - """""""""""""""""""""""""""""""""""""""""""""""" - " Actual mappings - " WARNING: Don't modify this section unless necessary. - """""""""""""""""""""""""""""""""""""""""""""""" - let s:NFa = [s:NF[0].g, s:NF[1].g, s:NF[0].t, s:NF[1].t, s:NF[2]] - let s:IFa = [s:IF[0].g, s:IF[1].g, s:IF[0].t, s:IF[1].t, s:IF[2]] - let s:VFa = [s:VF[0].g, s:VF[1].g, s:VF[0].t, s:VF[1].t, s:VF[2]] - let s:RFa = [s:RF[0].g, s:RF[1].g, s:RF[0].t, s:RF[1].t, s:RF[2]] - - let g:airline#themes#solarized#palette.accents = { - \ 'red': s:NFa, - \ } - - let g:airline#themes#solarized#palette.inactive = airline#themes#generate_color_map( - \ [s:IA[0].g, s:IA[1].g, s:IA[0].t, s:IA[1].t, s:IA[2]], - \ [s:IA[0].g, s:IA[1].g, s:IA[0].t, s:IA[1].t, s:IA[2]], - \ [s:IA[0].g, s:IA[1].g, s:IA[0].t, s:IA[1].t, s:IA[2]]) - let g:airline#themes#solarized#palette.inactive_modified = { - \ 'airline_c': [s:NMi[0].g, '', s:NMi[0].t, '', s:NMi[2]]} - - let g:airline#themes#solarized#palette.normal = airline#themes#generate_color_map( - \ [s:N1[0].g, s:N1[1].g, s:N1[0].t, s:N1[1].t, s:N1[2]], - \ [s:N2[0].g, s:N2[1].g, s:N2[0].t, s:N2[1].t, s:N2[2]], - \ [s:N3[0].g, s:N3[1].g, s:N3[0].t, s:N3[1].t, s:N3[2]]) - - let g:airline#themes#solarized#palette.normal.airline_warning = [ - \ s:NW[0].g, s:NW[1].g, s:NW[0].t, s:NW[1].t, s:NW[2]] - - let g:airline#themes#solarized#palette.normal_modified = { - \ 'airline_c': [s:NM[0].g, s:NM[1].g, - \ s:NM[0].t, s:NM[1].t, s:NM[2]]} - - let g:airline#themes#solarized#palette.normal_modified.airline_warning = - \ g:airline#themes#solarized#palette.normal.airline_warning - - let g:airline#themes#solarized#palette.insert = airline#themes#generate_color_map( - \ [s:I1[0].g, s:I1[1].g, s:I1[0].t, s:I1[1].t, s:I1[2]], - \ [s:I2[0].g, s:I2[1].g, s:I2[0].t, s:I2[1].t, s:I2[2]], - \ [s:I3[0].g, s:I3[1].g, s:I3[0].t, s:I3[1].t, s:I3[2]]) - - let g:airline#themes#solarized#palette.insert.airline_warning = - \ g:airline#themes#solarized#palette.normal.airline_warning - - let g:airline#themes#solarized#palette.insert_modified = { - \ 'airline_c': [s:IM[0].g, s:IM[1].g, - \ s:IM[0].t, s:IM[1].t, s:IM[2]]} - - let g:airline#themes#solarized#palette.insert_modified.airline_warning = - \ g:airline#themes#solarized#palette.normal.airline_warning - - let g:airline#themes#solarized#palette.visual = airline#themes#generate_color_map( - \ [s:V1[0].g, s:V1[1].g, s:V1[0].t, s:V1[1].t, s:V1[2]], - \ [s:V2[0].g, s:V2[1].g, s:V2[0].t, s:V2[1].t, s:V2[2]], - \ [s:V3[0].g, s:V3[1].g, s:V3[0].t, s:V3[1].t, s:V3[2]]) - - let g:airline#themes#solarized#palette.visual.airline_warning = - \ g:airline#themes#solarized#palette.normal.airline_warning - - let g:airline#themes#solarized#palette.visual_modified = { - \ 'airline_c': [s:VM[0].g, s:VM[1].g, - \ s:VM[0].t, s:VM[1].t, s:VM[2]]} - - let g:airline#themes#solarized#palette.visual_modified.airline_warning = - \ g:airline#themes#solarized#palette.normal.airline_warning - - let g:airline#themes#solarized#palette.replace = airline#themes#generate_color_map( - \ [s:R1[0].g, s:R1[1].g, s:R1[0].t, s:R1[1].t, s:R1[2]], - \ [s:R2[0].g, s:R2[1].g, s:R2[0].t, s:R2[1].t, s:R2[2]], - \ [s:R3[0].g, s:R3[1].g, s:R3[0].t, s:R3[1].t, s:R3[2]]) - - let g:airline#themes#solarized#palette.replace.airline_warning = - \ g:airline#themes#solarized#palette.normal.airline_warning - - let g:airline#themes#solarized#palette.replace_modified = { - \ 'airline_c': [s:RM[0].g, s:RM[1].g, - \ s:RM[0].t, s:RM[1].t, s:RM[2]]} - - let g:airline#themes#solarized#palette.replace_modified.airline_warning = - \ g:airline#themes#solarized#palette.normal.airline_warning - - let g:airline#themes#solarized#palette.tabline = {} - - let g:airline#themes#solarized#palette.tabline.airline_tab = [ - \ s:I2[0].g, s:I2[1].g, s:I2[0].t, s:I2[1].t, s:I2[2]] - - let g:airline#themes#solarized#palette.tabline.airline_tabtype = [ - \ s:N2[0].g, s:N2[1].g, s:N2[0].t, s:N2[1].t, s:N2[2]] -endfunction - -call airline#themes#solarized#refresh() - diff --git a/bundle/airline/autoload/airline/themes/tomorrow.vim b/bundle/airline/autoload/airline/themes/tomorrow.vim deleted file mode 100755 index f382fc1..0000000 --- a/bundle/airline/autoload/airline/themes/tomorrow.vim +++ /dev/null @@ -1,44 +0,0 @@ -let g:airline#themes#tomorrow#palette = {} - -function! airline#themes#tomorrow#refresh() - let g:airline#themes#tomorrow#palette.accents = { - \ 'red': airline#themes#get_highlight('Constant'), - \ } - - let s:N1 = airline#themes#get_highlight2(['Normal', 'bg'], ['Directory', 'fg'], 'bold') - let s:N2 = airline#themes#get_highlight('Pmenu') - let s:N3 = airline#themes#get_highlight('CursorLine') - let g:airline#themes#tomorrow#palette.normal = airline#themes#generate_color_map(s:N1, s:N2, s:N3) - - let group = airline#themes#get_highlight('vimCommand') - let g:airline#themes#tomorrow#palette.normal_modified = { - \ 'airline_c': [ group[0], '', group[2], '', '' ] - \ } - - let s:I1 = airline#themes#get_highlight2(['Normal', 'bg'], ['MoreMsg', 'fg'], 'bold') - let s:I2 = airline#themes#get_highlight2(['MoreMsg', 'fg'], ['Normal', 'bg']) - let s:I3 = s:N3 - let g:airline#themes#tomorrow#palette.insert = airline#themes#generate_color_map(s:I1, s:I2, s:I3) - let g:airline#themes#tomorrow#palette.insert_modified = g:airline#themes#tomorrow#palette.normal_modified - - let s:R1 = airline#themes#get_highlight('Error', 'bold') - let s:R2 = s:N2 - let s:R3 = s:N3 - let g:airline#themes#tomorrow#palette.replace = airline#themes#generate_color_map(s:R1, s:R2, s:R3) - let g:airline#themes#tomorrow#palette.replace_modified = g:airline#themes#tomorrow#palette.normal_modified - - let s:V1 = airline#themes#get_highlight2(['Normal', 'bg'], ['Constant', 'fg'], 'bold') - let s:V2 = airline#themes#get_highlight2(['Constant', 'fg'], ['Normal', 'bg']) - let s:V3 = s:N3 - let g:airline#themes#tomorrow#palette.visual = airline#themes#generate_color_map(s:V1, s:V2, s:V3) - let g:airline#themes#tomorrow#palette.visual_modified = g:airline#themes#tomorrow#palette.normal_modified - - let s:IA = airline#themes#get_highlight2(['NonText', 'fg'], ['CursorLine', 'bg']) - let g:airline#themes#tomorrow#palette.inactive = airline#themes#generate_color_map(s:IA, s:IA, s:IA) - let g:airline#themes#tomorrow#palette.inactive_modified = { - \ 'airline_c': [ group[0], '', group[2], '', '' ] - \ } -endfunction - -call airline#themes#tomorrow#refresh() - diff --git a/bundle/airline/autoload/airline/themes/ubaryd.vim b/bundle/airline/autoload/airline/themes/ubaryd.vim deleted file mode 100755 index 70232ef..0000000 --- a/bundle/airline/autoload/airline/themes/ubaryd.vim +++ /dev/null @@ -1,64 +0,0 @@ -" vim-airline companion theme of Ubaryd -" (https://github.com/Donearm/Ubaryd) - -" Normal mode -let s:N1 = [ '#141413' , '#c7b386' , 232 , 252 ] " blackestgravel & bleaksand -let s:N2 = [ '#c7b386' , '#45413b' , 252, 238 ] " bleaksand & deepgravel -let s:N3 = [ '#b88853' , '#242321' , 137, 235 ] " toffee & darkgravel -let s:N4 = [ '#857f78' , 243 ] " gravel - -" Insert mode -let s:I1 = [ '#1a1a18' , '#fade3e' , 232 , 221 ] " blackestgravel & warmcorn -let s:I2 = [ '#c7b386' , '#45413b' , 252 , 238 ] " bleaksand & deepgravel -let s:I3 = [ '#f4cf86' , '#242321' , 222 , 235 ] " lighttannedskin & darkgravel - -" Visual mode -let s:V1 = [ '#1c1b1a' , '#9a4820' , 233 , 88 ] " blackgravel & warmadobe -let s:V2 = [ '#000000' , '#88633f' , 16 , 95 ] " coal & cappuccino -let s:V3 = [ '#88633f' , '#c7b386' , 95 , 252 ] " cappuccino & bleaksand -let s:V4 = [ '#c14c3d' , 160 ] " tannedumbrella - -" Replace mode -let s:RE = [ '#c7915b' , 173 ] " nut - -" Paste mode -let s:PA = [ '#f9ef6d' , 154 ] " bleaklemon - -let s:IA = [ s:N2[1], s:N3[1], s:N2[3], s:N3[3], '' ] - -let g:airline#themes#ubaryd#palette = {} - -let g:airline#themes#ubaryd#palette.accents = { - \ 'red': [ '#ff7400' , '' , 196 , '' , '' ], - \ } - -let g:airline#themes#ubaryd#palette.inactive = { - \ 'airline_a' : [ s:N2[1] , s:N3[1] , s:N2[3] , s:N3[3] , '' ] } - - -let g:airline#themes#ubaryd#palette.normal = airline#themes#generate_color_map(s:N1, s:N2, s:N3) -let g:airline#themes#ubaryd#palette.normal_modified = { - \ 'airline_a' : [ s:N2[0] , s:N4[0] , s:N2[2] , s:N4[1] , '' ] , - \ 'airline_c' : [ s:V1[1] , s:N2[1] , s:V1[3] , s:N2[3] , '' ] } - - -let g:airline#themes#ubaryd#palette.insert = airline#themes#generate_color_map(s:I1, s:I2, s:I3) -let g:airline#themes#ubaryd#palette.insert_modified = { - \ 'airline_c' : [ s:V2[1] , s:N2[1] , s:V2[3] , s:N2[3] , '' ] } -let g:airline#themes#ubaryd#palette.insert_paste = { - \ 'airline_a' : [ s:I1[0] , s:PA[0] , s:I1[2] , s:PA[1] , '' ] } - - -let g:airline#themes#ubaryd#palette.replace = copy(airline#themes#ubaryd#palette.insert) -let g:airline#themes#ubaryd#palette.replace.airline_a = [ s:I1[0] , s:RE[0] , s:I1[2] , s:RE[1] , '' ] -let g:airline#themes#ubaryd#palette.replace_modified = g:airline#themes#ubaryd#palette.insert_modified - - -let g:airline#themes#ubaryd#palette.visual = airline#themes#generate_color_map(s:V1, s:V2, s:V3) -let g:airline#themes#ubaryd#palette.visual_modified = { - \ 'airline_c' : [ s:V3[0] , s:V4[0] , s:V3[2] , s:V4[1] , '' ] } - -let g:airline#themes#ubaryd#palette.inactive = airline#themes#generate_color_map(s:IA, s:IA, s:IA) -let g:airline#themes#ubaryd#palette.inactive_modified = { - \ 'airline_c' : [ s:V1[1] , '' , s:V1[3] , '' , '' ] } - diff --git a/bundle/airline/autoload/airline/themes/understated.vim b/bundle/airline/autoload/airline/themes/understated.vim deleted file mode 100755 index b3e7917..0000000 --- a/bundle/airline/autoload/airline/themes/understated.vim +++ /dev/null @@ -1,43 +0,0 @@ -let g:airline#themes#understated#palette = {} - -let s:N1 = ['#FFFFFF', '#5F87FF', 15, 69] " Outside blocks in normal mode (mode and file position) -let s:N2 = ['#AFAF87', '#5F5F5F', 144, 59] " Next blocks inside (branch and file format) -let s:N3 = ['#AFAF87', '#5F5F5F', 144, 59] " The middle block - -let g:airline#themes#understated#palette.normal = airline#themes#generate_color_map(s:N1, s:N2, s:N3) -let g:airline#themes#understated#palette.normal_modified = {'airline_c': ['#ffffff', '#5f005f', 144, 59, 'bold'] ,} - -let s:I1 = ['#FFFFFF', '#87AF5F', 15, 107] " Outside blocks in normal mode (mode and file position) -let s:I2 = ['#AFAF87', '#5F5F5F', 144, 59] " Next blocks inside (branch and file format) -let s:I3 = ['#AFAF87', '#5F5F5F', 144, 59] " The middle block -let g:airline#themes#understated#palette.insert = airline#themes#generate_color_map(s:I1, s:I2, s:I3) -let g:airline#themes#understated#palette.insert_modified = {'airline_c': ['#AFAF87', '#5F5F5F', 144, 59, 'bold'] ,} -let g:airline#themes#understated#palette.insert_paste = {'airline_c': ['#AFAF87', '#5F5F5F', 144, 59, ''] ,} - -let g:airline#themes#understated#palette.replace = airline#themes#generate_color_map(s:I1, s:I2, s:I3) -let g:airline#themes#understated#palette.replace.airline_a = ['#FFFFFF', '#870000', 15, 88, ''] -let g:airline#themes#understated#palette.replace_modified = {'airline_c': ['#AFAF87', '#5F5F5F', 144, 59, 'bold'] ,} - -let s:V1 = ['#FFFFFF', '#AF5F00', 15, 130] -let s:V2 = ['#AFAF87', '#5F5F5F', 144, 59] -let s:V3 = ['#AFAF87', '#5F5F5F', 144, 59] -let g:airline#themes#understated#palette.visual = airline#themes#generate_color_map(s:V1, s:V2, s:V3) -let g:airline#themes#understated#palette.visual_modified = {'airline_c': [ '#AFAF87', '#5f005f', 144, 59, 'bold'] ,} - -let s:V1 = ['#080808', '#FFAF00', 232, 214] -let s:IA1 = ['#4E4E4E', '#1C1C1C', 239, 234, ''] -let s:IA2 = ['#4E4E4E', '#1C1C1C', 239, 234, ''] -let s:IA3 = ['#4E4E4E', '#1C1C1C', 239, 234, ''] -let g:airline#themes#understated#palette.inactive = airline#themes#generate_color_map(s:IA1, s:IA2, s:IA3) -let g:airline#themes#understated#palette.inactive_modified = {'airline_c': ['#4E4E4E', '', 239, '', 'bold'] ,} - -let g:airline#themes#understated#palette.accents = {'red': ['#FF0000', '', 88, '']} - -if !get(g:, 'loaded_ctrlp', 0) - finish -endif -let g:airline#themes#understated#palette.ctrlp = airline#extensions#ctrlp#generate_color_map( - \ ['#FFFFFF', '#1C1C1C', 15, 234, '' ], - \ ['#FFFFFF', '#262626', 15, 235, '' ], - \ ['#FFFFFF', '#303030', 15, 236, 'bold']) - diff --git a/bundle/airline/autoload/airline/themes/wombat.vim b/bundle/airline/autoload/airline/themes/wombat.vim deleted file mode 100755 index 39fdc4c..0000000 --- a/bundle/airline/autoload/airline/themes/wombat.vim +++ /dev/null @@ -1,90 +0,0 @@ -" vim-airline companion theme of Wombat -" looks great with wombat256 vim colorscheme - -" Normal mode -" [ guifg, guibg, ctermfg, ctermbg, opts ] -let s:N1 = [ '#141413' , '#CAE682' , 232 , 192 ] " mode -let s:N2 = [ '#CAE682' , '#32322F' , 192 , 236 ] " info -let s:N3 = [ '#CAE682' , '#242424' , 192 , 234 ] " statusline -let s:N4 = [ '#86CD74' , 113 ] " mode modified - -" Insert mode -let s:I1 = [ '#141413' , '#FDE76E' , 232 , 227 ] -let s:I2 = [ '#FDE76E' , '#32322F' , 227 , 236 ] -let s:I3 = [ '#FDE76E' , '#242424' , 227 , 234 ] -let s:I4 = [ '#FADE3E' , 221 ] - -" Visual mode -let s:V1 = [ '#141413' , '#B5D3F3' , 232 , 153 ] -let s:V2 = [ '#B5D3F3' , '#32322F' , 153 , 236 ] -let s:V3 = [ '#B5D3F3' , '#242424' , 153 , 234 ] -let s:V4 = [ '#7CB0E6' , 111 ] - -" Replace mode -let s:R1 = [ '#141413' , '#E5786D' , 232 , 173 ] -let s:R2 = [ '#E5786D' , '#32322F' , 173 , 236 ] -let s:R3 = [ '#E5786D' , '#242424' , 173 , 234 ] -let s:R4 = [ '#E55345' , 203 ] - -" Paste mode -let s:PA = [ '#94E42C' , 47 ] - -" Info modified -let s:IM = [ '#40403C' , 238 ] - -" Inactive mode -let s:IA = [ '#767676' , s:N3[1] , 243 , s:N3[3] , '' ] - -let g:airline#themes#wombat#palette = {} - -let g:airline#themes#wombat#palette.accents = { - \ 'red': [ '#E5786D' , '' , 203 , '' , '' ], - \ } - -let g:airline#themes#wombat#palette.normal = airline#themes#generate_color_map(s:N1, s:N2, s:N3) -let g:airline#themes#wombat#palette.normal_modified = { - \ 'airline_a': [ s:N1[0] , s:N4[0] , s:N1[2] , s:N4[1] , '' ] , - \ 'airline_b': [ s:N4[0] , s:IM[0] , s:N4[1] , s:IM[1] , '' ] , - \ 'airline_c': [ s:N4[0] , s:N3[1] , s:N4[1] , s:N3[3] , '' ] } - - -let g:airline#themes#wombat#palette.insert = airline#themes#generate_color_map(s:I1, s:I2, s:I3) -let g:airline#themes#wombat#palette.insert_modified = { - \ 'airline_a': [ s:I1[0] , s:I4[0] , s:I1[2] , s:I4[1] , '' ] , - \ 'airline_b': [ s:I4[0] , s:IM[0] , s:I4[1] , s:IM[1] , '' ] , - \ 'airline_c': [ s:I4[0] , s:N3[1] , s:I4[1] , s:N3[3] , '' ] } - - -let g:airline#themes#wombat#palette.visual = airline#themes#generate_color_map(s:V1, s:V2, s:V3) -let g:airline#themes#wombat#palette.visual_modified = { - \ 'airline_a': [ s:V1[0] , s:V4[0] , s:V1[2] , s:V4[1] , '' ] , - \ 'airline_b': [ s:V4[0] , s:IM[0] , s:V4[1] , s:IM[1] , '' ] , - \ 'airline_c': [ s:V4[0] , s:N3[1] , s:V4[1] , s:N3[3] , '' ] } - - -let g:airline#themes#wombat#palette.replace = airline#themes#generate_color_map(s:R1, s:R2, s:R3) -let g:airline#themes#wombat#palette.replace_modified = { - \ 'airline_a': [ s:R1[0] , s:R4[0] , s:R1[2] , s:R4[1] , '' ] , - \ 'airline_b': [ s:R4[0] , s:IM[0] , s:R4[1] , s:IM[1] , '' ] , - \ 'airline_c': [ s:R4[0] , s:N3[1] , s:R4[1] , s:N3[3] , '' ] } - - -let g:airline#themes#wombat#palette.insert_paste = { - \ 'airline_a': [ s:I1[0] , s:PA[0] , s:I1[2] , s:PA[1] , '' ] , - \ 'airline_b': [ s:PA[0] , s:IM[0] , s:PA[1] , s:IM[1] , '' ] , - \ 'airline_c': [ s:PA[0] , s:N3[1] , s:PA[1] , s:N3[3] , '' ] } - - -let g:airline#themes#wombat#palette.inactive = airline#themes#generate_color_map(s:IA, s:IA, s:IA) -let g:airline#themes#wombat#palette.inactive_modified = { - \ 'airline_c': [ s:N4[0] , '' , s:N4[1] , '' , '' ] } - - -if !get(g:, 'loaded_ctrlp', 0) - finish -endif -let g:airline#themes#wombat#palette.ctrlp = airline#extensions#ctrlp#generate_color_map( - \ [ '#DADADA' , '#242424' , 253 , 234 , '' ] , - \ [ '#DADADA' , '#40403C' , 253 , 238 , '' ] , - \ [ '#141413' , '#DADADA' , 232 , 253 , 'bold' ] ) - diff --git a/bundle/airline/autoload/airline/themes/zenburn.vim b/bundle/airline/autoload/airline/themes/zenburn.vim deleted file mode 100755 index 9883c21..0000000 --- a/bundle/airline/autoload/airline/themes/zenburn.vim +++ /dev/null @@ -1,44 +0,0 @@ -let g:airline#themes#zenburn#palette = {} - -function! airline#themes#zenburn#refresh() - let g:airline#themes#zenburn#palette.accents = { - \ 'red': airline#themes#get_highlight('Constant'), - \ } - - let s:N1 = airline#themes#get_highlight2(['DbgCurrent', 'bg'], ['Folded', 'fg'], 'bold') - let s:N2 = airline#themes#get_highlight('Folded') - let s:N3 = airline#themes#get_highlight('NonText') - - let g:airline#themes#zenburn#palette.normal = airline#themes#generate_color_map(s:N1, s:N2, s:N3) - let s:Nmod = airline#themes#get_highlight('Comment') - let g:airline#themes#zenburn#palette.normal_modified = { - \ 'airline_c': s:Nmod - \ } - - let s:I1 = airline#themes#get_highlight2(['DbgCurrent', 'bg'], ['String', 'fg'], 'bold') - let s:I2 = airline#themes#get_highlight2(['String', 'fg'], ['Folded', 'bg']) - let s:I3 = s:N3 - let g:airline#themes#zenburn#palette.insert = airline#themes#generate_color_map(s:I1, s:I2, s:I3) - let g:airline#themes#zenburn#palette.insert_modified = g:airline#themes#zenburn#palette.normal_modified - - let s:R1 = airline#themes#get_highlight2(['DbgCurrent', 'bg'], ['Comment', 'fg'], 'bold') - let s:R2 = airline#themes#get_highlight2(['Comment', 'fg'], ['Folded', 'bg']) - let s:R3 = s:N3 - let g:airline#themes#zenburn#palette.replace = airline#themes#generate_color_map(s:R1, s:R2, s:R3) - let g:airline#themes#zenburn#palette.replace_modified = g:airline#themes#zenburn#palette.normal_modified - - let s:V1 = airline#themes#get_highlight2(['DbgCurrent', 'bg'], ['Identifier', 'fg'], 'bold') - let s:V2 = airline#themes#get_highlight2(['Identifier', 'fg'], ['Folded', 'bg']) - let s:V3 = s:N3 - let g:airline#themes#zenburn#palette.visual = airline#themes#generate_color_map(s:V1, s:V2, s:V3) - let g:airline#themes#zenburn#palette.visual_modified = g:airline#themes#zenburn#palette.normal_modified - - let s:IA = airline#themes#get_highlight('NonText') - let g:airline#themes#zenburn#palette.inactive = airline#themes#generate_color_map(s:IA, s:IA, s:IA) - let g:airline#themes#zenburn#palette.inactive_modified = { - \ 'airline_c': s:Nmod - \ } -endfunction - -call airline#themes#zenburn#refresh() - diff --git a/bundle/airline/autoload/airline/util.vim b/bundle/airline/autoload/airline/util.vim deleted file mode 100755 index a04bd0b..0000000 --- a/bundle/airline/autoload/airline/util.vim +++ /dev/null @@ -1,64 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -call airline#init#bootstrap() -let s:spc = g:airline_symbols.space - -function! airline#util#wrap(text, minwidth) - if a:minwidth > 0 && winwidth(0) < a:minwidth - return '' - endif - return a:text -endfunction - -function! airline#util#append(text, minwidth) - if a:minwidth > 0 && winwidth(0) < a:minwidth - return '' - endif - let prefix = s:spc == "\ua0" ? s:spc : s:spc.s:spc - return empty(a:text) ? '' : prefix.g:airline_left_alt_sep.s:spc.a:text -endfunction - -function! airline#util#prepend(text, minwidth) - if a:minwidth > 0 && winwidth(0) < a:minwidth - return '' - endif - return empty(a:text) ? '' : a:text.s:spc.g:airline_right_alt_sep.s:spc -endfunction - -if v:version >= 704 - function! airline#util#getwinvar(winnr, key, def) - return getwinvar(a:winnr, a:key, a:def) - endfunction -else - function! airline#util#getwinvar(winnr, key, def) - let winvals = getwinvar(a:winnr, '') - return get(winvals, a:key, a:def) - endfunction -endif - -if v:version >= 704 - function! airline#util#exec_funcrefs(list, ...) - for Fn in a:list - let code = call(Fn, a:000) - if code != 0 - return code - endif - endfor - return 0 - endfunction -else - function! airline#util#exec_funcrefs(list, ...) - " for 7.2; we cannot iterate the list, hence why we use range() - " for 7.3-[97, 328]; we cannot reuse the variable, hence the {} - for i in range(0, len(a:list) - 1) - let Fn{i} = a:list[i] - let code = call(Fn{i}, a:000) - if code != 0 - return code - endif - endfor - return 0 - endfunction -endif - diff --git a/bundle/airline/doc/airline.txt b/bundle/airline/doc/airline.txt deleted file mode 100755 index ddc81ce..0000000 --- a/bundle/airline/doc/airline.txt +++ /dev/null @@ -1,793 +0,0 @@ -*airline.txt* Lean and mean status/tabline that's light as air -*airline* - _ _ _ _ ~ - __ _(_)_ __ ___ __ _(_)_ __| (_)_ __ ___ ~ - \ \ / / | '_ ` _ \ _____ / _` | | '__| | | '_ \ / _ \ ~ - \ V /| | | | | | |_____| (_| | | | | | | | | | __/ ~ - \_/ |_|_| |_| |_| \__,_|_|_| |_|_|_| |_|\___| ~ - ~ -============================================================================== -CONTENTS *airline-contents* - - 01. Intro ............................................... |airline-intro| - 02. Features ......................................... |airline-features| - 03. Name ................................................. |airline-name| - 04. Configuration ............................... |airline-configuration| - 05. Commands ......................................... |airline-commands| - 06. Customization ............................... |airline-customization| - 07. Extensions ..................................... |airline-extensions| - 08. Advanced Customization ............. |airline-advanced-customization| - 09. Funcrefs ......................................... |airline-funcrefs| - 10. Pipeline ......................................... |airline-pipeline| - 11. Writing Extensions ..................... |airline-writing-extensions| - 12. Writing Themes ..................................... |airline-themes| - 13. Troubleshooting ........................... |airline-troubleshooting| - 14. Contributions ............................... |airline-contributions| - 15. License ........................................... |airline-license| - -============================================================================== -INTRODUCTION *airline-intro* - -vim-airline is a fast and lightweight alternative to powerline, written -in 100% vimscript with no outside dependencies. - -============================================================================== -FEATURES *airline-features* - -* tiny core written with extensibility in mind. -* integrates with many popular plugins. -* looks good with regular fonts, and provides configuration points so you - can use unicode or powerline symbols. -* optimized for speed; it loads in under a millisecond. -* fully customizable; if you know a little 'statusline' syntax you can - tweak it to your needs. -* extremely easy to write themes. - -============================================================================== -NAME *airline-name* - -Where did the name come from? - -I wrote this on an airplane, and since it's light as air it turned out to be a -good name :-) - -============================================================================== -CONFIGURATION *airline-configuration* - -There are a couple configuration values available (shown with their default -values): - -* the separator used on the left side > - let g:airline_left_sep='>' -< -* the separator used on the right side > - let g:airline_right_sep='<' -< -* enable modified detection > - let g:airline_detect_modified=1 - -* enable paste detection > - let g:airline_detect_paste=1 -< -* enable iminsert detection > - let g:airline_detect_iminsert=0 -< -* determine whether inactive windows should have the left section collapsed to - only the filename of that buffer. > - let g:airline_inactive_collapse=1 -< -* themes are automatically selected based on the matching colorscheme. this - can be overridden by defining a value. > - let g:airline_theme= -< -* if you want to patch the airline theme before it gets applied, you can - supply the name of a function where you can modify the palette. > - let g:airline_theme_patch_func = 'AirlineThemePatch' - function! AirlineThemePatch(palette) - if g:airline_theme == 'badwolf' - for colors in values(a:palette.inactive) - let colors[3] = 245 - endfor - endif - endfunction -< -* enable/disable automatic population of the `g:airline_symbols` dictionary - with powerline symbols. > - let g:airline_powerline_fonts=0 -< -* define the set of text to display for each mode. > - let g:airline_mode_map = {} " see source for the defaults - - " or copy paste the following into your vimrc for shortform text - let g:airline_mode_map = { - \ '__' : '-', - \ 'n' : 'N', - \ 'i' : 'I', - \ 'R' : 'R', - \ 'c' : 'C', - \ 'v' : 'V', - \ 'V' : 'V', - \ '' : 'V', - \ 's' : 'S', - \ 'S' : 'S', - \ '' : 'S', - \ } -< -* define the set of filename match queries which excludes a window from having - its statusline modified > - let g:airline_exclude_filenames = [] " see source for current list -< -* define the set of filetypes which are excluded from having its window - statusline modified > - let g:airline_exclude_filetypes = [] " see source for current list -< -* defines whether the preview window should be excluded from have its window - statusline modified (may help with plugins which use the preview window - heavily) > - let g:airline_exclude_preview = 0 -< -============================================================================== -COMMANDS *airline-commands* - -:AirlineTheme {theme-name} *:AirlineTheme* - Displays or changes the current theme. - -:AirlineToggleWhitespace *:AirlineToggleWhitespace* - Toggles whitespace detection. - -:AirlineToggle *:AirlineToggle* - Toggles between the standard 'statusline' and airline. - -:AirlineRefresh *:AirlineRefresh* - Refreshes all highlight groups and redraws the statusline. - -============================================================================== -CUSTOMIZATION *airline-customization* - -The following are some unicode symbols for customizing the left/right -separators, as well as the powerline font glyths. - -Note: You must define the dictionary first before setting values. Also, it's a -good idea to check whether if it exists as to avoid accidentally overwritting -its contents. > - if !exists('g:airline_symbols') - let g:airline_symbols = {} - endif - - " unicode symbols - let g:airline_left_sep = '»' - let g:airline_left_sep = '▶' - let g:airline_right_sep = '«' - let g:airline_right_sep = '◀' - let g:airline_symbols.linenr = '␊' - let g:airline_symbols.linenr = '␤' - let g:airline_symbols.linenr = '¶' - let g:airline_symbols.branch = '⎇' - let g:airline_symbols.paste = 'ρ' - let g:airline_symbols.paste = 'Þ' - let g:airline_symbols.paste = '∥' - let g:airline_symbols.whitespace = 'Ξ' - - " powerline symbols - let g:airline_left_sep = '' - let g:airline_left_alt_sep = '' - let g:airline_right_sep = '' - let g:airline_right_alt_sep = '' - let g:airline_symbols.branch = '' - let g:airline_symbols.readonly = '' - let g:airline_symbols.linenr = '' - - " old vim-powerline symbols - let g:airline_left_sep = '⮀' - let g:airline_left_alt_sep = '⮁' - let g:airline_right_sep = '⮂' - let g:airline_right_alt_sep = '⮃' - let g:airline_symbols.branch = '⭠' - let g:airline_symbols.readonly = '⭤' - let g:airline_symbols.linenr = '⭡' -< - -For more intricate customizations, you can replace the predefined sections -with the usual statusline syntax. - -Note: If you define any section variables it will replace the default values -entirely. If you want to disable only certain parts of a section you can try -using variables defined in the |airline-configuration| or |airline-extensions| -section. -> - variable names default contents - ---------------------------------------------------------------------------- - let g:airline_section_a (mode, paste, iminsert) - let g:airline_section_b (hunks, branch) - let g:airline_section_c (bufferline or filename) - let g:airline_section_gutter (readonly, csv) - let g:airline_section_x (tagbar, filetype, virtualenv) - let g:airline_section_y (fileencoding, fileformat) - let g:airline_section_z (percentage, line number, column number) - let g:airline_section_warning (syntastic, whitespace) - - " here is an example of how you could replace the branch indicator with - " the current working directory, followed by the filename. - let g:airline_section_b = '%{getcwd()}' - let g:airline_section_c = '%t' -< -============================================================================== -EXTENSIONS *airline-extensions* - -Most extensions are enabled by default and lazily loaded when the -corresponding plugin (if any) is detected. - -By default, airline will attempt to load any extension it can find in the -'runtimepath'. On some systems this can result in an undersirable startup -cost. You can disable the check with the following flag. > - let g:airline#extensions#disable_rtp_load = 1 -< - Note: Third party plugins that rely on this behavior will be affected. You - will need to manually load them. - -------------------------------------- *airline-default* -The default extension understands all of the `g:` variables in the -|airline-configuration| section, however it also has some more fine-tuned -configuration values that you can use. - -* control which sections get truncated and at what width. > - let g:airline#extensions#default#section_truncate_width = { - \ 'b': 79, - \ 'x': 60, - \ 'y': 88, - \ 'z': 45, - \ } - - " Note: set to an empty dictionary to disable truncation. - let g:airline#extensions#default#section_truncate_width = {} -< -* configure the layout of the sections by specificing an array of two arrays - (first array is the left side, second array is the right side). > - let g:airline#extensions#default#layout = [ - \ [ 'a', 'b', 'c' ], - \ [ 'x', 'y', 'z', 'warning' ] - \ ] -< -------------------------------------- *airline-quickfix* -The quickfix extension is a simple built-in extension which determines -whether the buffer is a quickfix or location list buffer, and adjusts the -title accordingly. - -* configure the title text for quickfix buffers > - let g:airline#extensions#quickfix#quickfix_text = 'Quickfix' -< -* configure the title text for location list buffers > - let g:airline#extensions#quickfix#location_text = 'Location' -< - -------------------------------------- *airline-bufferline* -vim-bufferline - -* enable/disable bufferline integration > - let g:airline#extensions#bufferline#enabled = 1 -< -* determine whether bufferline will overwrite customization variables > - let g:airline#extensions#bufferline#overwrite_variables = 1 -< -------------------------------------- *airline-branch* -fugitive.vim -lawrencium -vcscommand - -* enable/disable fugitive/lawrencium integration > - let g:airline#extensions#branch#enabled = 1 -< -* change the text for when no branch is detected > - let g:airline#extensions#branch#empty_message = '' - -* use vcscommand.vim if available > - let g:airline#extensions#branch#use_vcscommand = 0 - -* truncate long branch names to a fixed length > - let g:airline#extensions#branch#displayed_head_limit = 10 - -------------------------------------- *airline-syntastic* -syntastic - -* enable/disable syntastic integration > - let g:airline#extensions#syntastic#enabled = 1 -< -------------------------------------- *airline-tagbar* -tagbar - -* enable/disable tagbar integration > - let g:airline#extensions#tagbar#enabled = 1 -< -* change how tags are displayed (:help tagbar-statusline) > - let g:airline#extensions#tagbar#flags = '' (default) - let g:airline#extensions#tagbar#flags = 'f' - let g:airline#extensions#tagbar#flags = 's' - let g:airline#extensions#tagbar#flags = 'p' -< -------------------------------------- *airline-csv* -csv.vim - -* enable/disable csv integration for displaying the current column. > - let g:airline#extensions#csv#enabled = 1 -< -* change how columns are displayed. > - let g:airline#extensions#csv#column_display = 'Number' (default) - let g:airline#extensions#csv#column_display = 'Name' -< -------------------------------------- *airline-hunks* -vim-gitgutter -vim-signify -changesPlugin - -* enable/disable showing a summary of changed hunks under source control. > - let g:airline#extensions#hunks#enabled = 1 -< -* enable/disable showing only non-zero hunks. > - let g:airline#extensions#hunks#non_zero_only = 0 -< -* set hunk count symbols. > - let g:airline#extensions#hunks#hunk_symbols = ['+', '~', '-'] -< -------------------------------------- *airline-ctrlp* -ctrlp - -* configure which mode colors should ctrlp window use (takes effect - only if the active airline theme doesn't define ctrlp colors) > - let g:airline#extensions#ctrlp#color_template = 'insert' (default) - let g:airline#extensions#ctrlp#color_template = 'normal' - let g:airline#extensions#ctrlp#color_template = 'visual' - let g:airline#extensions#ctrlp#color_template = 'replace' -< - -* configure whether to show the previous and next modes (mru, buffer, etc...) -> - let g:airline#extensions#ctrlp#show_adjacent_modes = 1 -< -------------------------------------- *airline-virtualenv* -virtualenv - -* enable/disable virtualenv integration > - let g:airline#extensions#virtualenv#enabled = 1 -< -------------------------------------- *airline-eclim* -eclim - -* enable/disable eclim integration, which works well with the - |airline-syntastic| extension. > - let g:airline#extensions#eclim#enabled = 1 - -------------------------------------- *airline-whitespace* -* enable/disable detection of whitespace errors. > - let g:airline#extensions#whitespace#enabled = 1 -< -* customize the type of mixed indent checking to perform. > - " must be all spaces or all tabs before the first non-whitespace character - let g:airline#extensions#whitespace#mixed_indent_algo = 0 (default) - - " certain number of spaces are allowed after tabs, but not in between - " this algorithm works well for /** */ style comments in a tab-indented file - let g:airline#extensions#whitespace#mixed_indent_algo = 1 -< -* customize the whitespace symbol. > - let g:airline#extensions#whitespace#symbol = '!' -< -* configure which whitespace checks to enable. > - let g:airline#extensions#whitespace#checks = [ 'indent', 'trailing' ] -< -* configure the maximum number of lines where whitespace checking is enabled. > - let g:airline#extensions#whitespace#max_lines = 20000 -< -* configure whether a message should be displayed. > - let g:airline#extensions#whitespace#show_message = 1 -< -* configure the formatting of the warning messages. > - let g:airline#extensions#whitespace#trailing_format = 'trailing[%s]' - let g:airline#extensions#whitespace#mixed_indent_format = 'mixed-indent[%s]' -< -------------------------------------- *airline-tabline* -* enable/disable enhanced tabline. > - let g:airline#extensions#tabline#enabled = 0 -< -* enable/disable displaying buffers with a single tab. > - let g:airline#extensions#tabline#show_buffers = 1 -< -* configure filename match rules to exclude from the tabline. > - let g:airline#extensions#tabline#excludes = [] -< -* configure how numbers are calculated in tab mode. > - let g:airline#extensions#tabline#tab_nr_type = 0 " # of splits (default) - let g:airline#extensions#tabline#tab_nr_type = 1 " tab number -< -* enable/disable displaying tab number in tabs mode. > - let g:airline#extensions#tabline#show_tab_nr = 1 - -* enable/disable displaying tab type (far right) - let g:airline#extensions#tabline#show_tab_type = 1 - -* enable/disable displaying index of the buffer. - -When enabled, numbers will be displayed in the tabline and mappings will be -exposed to allow you to select a buffer directly. Up to 9 mappings will be -exposed. - - let g:airline#extensions#tabline#buffer_idx_mode = 1 - nmap 1 AirlineSelectTab1 - nmap 2 AirlineSelectTab2 - nmap 3 AirlineSelectTab3 - nmap 4 AirlineSelectTab4 - nmap 5 AirlineSelectTab5 - nmap 6 AirlineSelectTab6 - nmap 7 AirlineSelectTab7 - nmap 8 AirlineSelectTab8 - nmap 9 AirlineSelectTab9 - - Note: Mappings will be ignored within a NERDTree buffer. - -* defines the name of a formatter for how buffer names are displayed. > - let g:airline#extensions#tabline#formatter = 'default' - - " here is how you can define a 'foo' formatter: - function! airline#extensions#tabline#foo#format(bufnr, buffers) - return fnamemodify(bufname(a:bufnr), ':t') - endfunction - let g:airline#extensions#tabline#formatter = 'foo' -< - Note: the following variables are only used by the 'default' formatter. - - * configure whether buffer numbers should be shown. > - let g:airline#extensions#tabline#buffer_nr_show = 0 -< - * configure how buffer numbers should be formatted with |printf|. > - let g:airline#extensions#tabline#buffer_nr_format = '%s: ' -< - * configure the formatting of filenames (see |filename-modifiers|). > - let g:airline#extensions#tabline#fnamemod = ':p:.' -< - * configure collapsing parent directories in buffer name. > - let g:airline#extensions#tabline#fnamecollapse = 1 - - " The `unique_tail` algorithm will display the tail of the filename, unless - " there is another file of the same name, in which it will display it along - " with the containing parent directory. - let g:airline#extensions#tabline#formatter = 'unique_tail' - - " The `unique_tail_improved` - another algorithm, that will smartly uniquify - " buffers names with similar filename, suppressing common parts of paths. - let g:airline#extensions#tabline#formatter = 'unique_tail_improved' -< -* configure the minimum number of buffers needed to show the tabline. > - let g:airline#extensions#tabline#buffer_min_count = 0 -< - Note: this setting only applies to a single tab and when `show_buffers` is - true. - -* configure the minimum number of tabs needed to show the tabline. > - let g:airline#extensions#tabline#tab_min_count = 0 -< - Note: this setting only applies when `show_buffers` is false. - -* configure separators for the tabline only. > - let g:airline#extensions#tabline#left_sep = '' - let g:airline#extensions#tabline#left_alt_sep = '' - let g:airline#extensions#tabline#right_sep = '' - let g:airline#extensions#tabline#right_alt_sep = '' - -* configure whether close button should be shown - let g:airline#extensions#tabline#show_close_button = 1 - -* configure symbol used to represent close button - let g:airline#extensions#tabline#close_symbol = 'X' - -< -Note: Enabling this extension will modify 'showtabline' and 'guioptions'. - -------------------------------------- *airline-tmuxline* -tmuxline - -* enable/disable tmuxline integration > - let g:airline#extensions#tmuxline#enabled = 0 -< -* configure which mode colors should be used in tmux statusline > - let airline#extensions#tmuxline#color_template = 'normal' (default) - let airline#extensions#tmuxline#color_template = 'insert' - let airline#extensions#tmuxline#color_template = 'visual' - let airline#extensions#tmuxline#color_template = 'replace' -< -* if specified, setting this option will trigger writing to the file whenever the - airline theme is applied, i.e. when :AirlineTheme is executed and on vim - startup > - airline#extensions#tmuxline#snapshot_file = "~/.tmux-statusline-colors.conf" -< -------------------------------------- *airline-promptline* -promptline - -* configure the path to the snapshot .sh file. Mandatory option. The created - file should be sourced by the shell on login > - " in .vimrc - airline#extensions#promptline#snapshot_file = "~/.shell_prompt.sh" - - " in .bashrc/.zshrc - [ -f ~/.shell_prompt.sh ] && source ~/.shell_prompt.sh -< -* enable/disable promptline integration > - let g:airline#extensions#promptline#enabled = 0 -< -* configure which mode colors should be used in prompt > - let airline#extensions#promptline#color_template = 'normal' (default) - let airline#extensions#promptline#color_template = 'insert' - let airline#extensions#promptline#color_template = 'visual' - let airline#extensions#promptline#color_template = 'replace' -< -------------------------------------- *airline-nrrwrgn* -NrrwRgn - -* enable/disable NrrwRgn integration > - let g:airline#extensions#nrrwrgn#enabled = 1 - -------------------------------------- *airline-capslock* -vim-capslock - -* enable/disable vim-capslock integration > - let g:airline#extensions#capslock#enabled = 1 - -------------------------------------- *airline-windowswap* -vim-windowswap - -* enable/disable vim-windowswap integration > - let g:airline#extensions#windowswap#enabled = 1 - -* set marked window indicator string > - let g:airline#extensions#windowswap#indicator_text = 'WS' -< -============================================================================== -ADVANCED CUSTOMIZATION *airline-advanced-customization* - -The defaults will accomodate the mass majority of users with minimal -configuration. However, if you want to reposition sections or contents you can -do so with built-in helper functions, which makes it possible to create -sections in a more declarative style. - -------------------------------------- *airline-parts* -A part is something that contains metadata that eventually gets rendered into -the statusline. You can define parts that contain constant strings or -functions. Defining parts is needed if you want to use features like automatic -insertion of separators or hiding based on window width. - -For example, this is how you would define a part function: > - call airline#parts#define_function('foo', 'GetFooText') -< -Here is how you would define a part that is visible only if the window width -greater than a minimum width. > - call airline#parts#define_minwidth('foo', 50) -< -Parts can be configured to be visible conditionally. > - call airline#parts#define_condition('foo', 'getcwd() =~ "work_dir"') -< -Note: Part definitions are combinative; e.g. the two examples above modify the -same `foo` part. - -Note: Look at the source code and tests for the full API. - -------------------------------------- *airline-predefined-parts* -Before is a list of parts that are predefined by vim-airline. - -* `mode` displays the current mode -* `iminsert` displays the current insert method -* `paste` displays the paste indicator -* `filetype` displays the file type -* `readonly` displays the read only indicator -* `file` displays the filename and modified indicator -* `ffenc` displays the file format and encoding - -And the following are defined for their respective extensions: - -`hunks`, `branch`, `tagbar`, `syntastic`, `whitespace` - -------------------------------------- *airline-accents* -Accents can be defined on any part, like so: > - call airline#parts#define_accent('foo', 'red') -< -This will override the colors of that part by using what is defined in that -particular accent. In the above example, the `red` accent is used, which means -regardless of which section the part is used in, it will have red foreground -colors instead of the section's default foreground color. - -The following accents are defined by default. Themes can define their variants -of the colors, but defaults will be provided if missing. > - bold, italic, red, green, blue, yellow, orange, purple -< -The defaults configure the mode and line number parts to be bold, and the -readonly part to be red. - -------------------------------------- *airline-sections* -Once a part is defined, you can use helper functions to generate the -statuslines for each section. For example, to use the part above, we could -define a section like this: > - function! AirlineInit() - let g:airline_section_a = airline#section#create(['mode', ' ', 'foo']) - let g:airline_section_b = airline#section#create_left(['ffenc','file']) - let g:airline_section_c = airline#section#create(['%{getcwd()}']) - endfunction - autocmd VimEnter * call AirlineInit() -< -This will create a section with the `mode`, followed by a space, and our `foo` -part in section `a`. Section `b` will have two parts with a left-side -separator. And section `c` will contain the current path. You may notice that -the space and cwd are not defined parts. For convenience, if a part of that -key does not exist, it will be inserted as is. The unit tests will be a good -resource for possibilities. - -Note: The use of |VimEnter| is important, because most extensions are lazily -loaded, so we must give them a chance to define their parts before we can use -them. - -Note: The `airline#section#create` function and friends will do its best to -create a section with the appropriate separators, but it only works for -function and text parts. Special 'statusline' items like %f or raw/undefined -parts will not work as it is not possible to inspect their widths/contents -before rendering to the statusline. - -============================================================================== -FUNCREFS *airline-funcrefs* - -vim-airline internally uses funcrefs to integrate with third party plugins, -and you can tap into this functionality to extend it for you needs. This is -the most powerful way to customize the statusline, and sometimes it may be -easier to go this route than the above methods. - -Every section can have two values. The default value is the global `g:` -variable which is used in the absense of a `w:` value. This makes it very easy -to override only certain parts of the statusline by only defining window-local -variables for a subset of all sections. - -------------------------------------- *add_statusline_func* -The following is an example of how you can extend vim-airline to support a -new plugin. > - function! MyPlugin(...) - if &filetype == 'MyPluginFileType' - let w:airline_section_a = 'MyPlugin' - let w:airline_section_b = '%f' - let w:airline_section_c = '%{MyPlugin#function()}' - let g:airline_variable_referenced_in_statusline = 'foo' - endif - endfunction - call airline#add_statusline_func('MyPlugin') -< -Notice that only the left side of the statusline is overwritten. This means -the right side (the line/column numbers, etc) will be intact. - -------------------------------------- *remove_statusline_func* -You can also remove a function as well, which is useful for when you want a -temporary override. > - call airline#remove_statusline_func('MyPlugin') -< - -============================================================================== -PIPELINE *airline-pipeline* - -Sometimes you want to do more than just use overrides. The statusline funcref -is invoked and passed two arguments. The first of these arguments is the -statusline builder. You can use this to build completely custom statuslines -to your liking. Here is an example: > -> - function! MyPlugin(...) - " first variable is the statusline builder - let builder = a:1 - - " WARNING: the API for the builder is not finalized and may change - call builder.add_section('Normal', '%f') - call builder.add_section('WarningMsg', '%{getcwd()}') - call builder.split() - call builder.add_section('airline_z', '%p%%') - - " tell the core to use the contents of the builder - return 1 - endfunction -< -The above example uses various example highlight groups to demonstrate -that you can use any combination from the loaded colorscheme. However, if -you want colors to change between modes, you should use one of the section -highlight groups, e.g. `airline_a` and `airline_b`. - -The second variable is the context, which is a dictionary containing various -values such as whether the statusline is active or not, and the window number. -> - context = { - 'winnr': 'the window number for the statusline', - 'active': 'whether the window is active or not', - 'bufnr': 'the current buffer for this window', - } -< -------------------------------------- *airline-pipeline-return-codes* -The pipeline accepts various return codes and can be used to determine the -next action. The following are the supported codes: > - 0 the default, continue on with the next funcref - -1 do not modify the statusline - 1 modify the statusline with the current contents of the builder -< -Note: Any value other than 0 will halt the pipeline and prevent the next -funcref from executing. - -============================================================================== -WRITING EXTENSIONS *airline-writing-extensions* - -For contributions into the plugin, here are the following guidelines: - -1. For simple 'filetype' checks, they can be added directly into the -`extensions.vim` file. - -2. Pretty much everything else should live as a separate file under the -`extensions/` directory. - - a. Inside `extensions.vim`, add a check for some variable or command that - is always available (these must be defined in `plugin/`, and _not_ - `autoload/` of the other plugin). If it exists, then initialize the - extension. This ensures that the extension is loaded if and only if the - user has the other plugin installed. Also, a check to - `airline#extensions#foo_plugin#enabled` should be performed to allow the - user to disable it. - - b. Configuration variables for the extension should reside in the - extension, e.g. `g:airline#extensions#foo_plugin#bar_variable`. - -See the source of |example.vim| for documented code of how to write one. -Looking at the other extensions is also a good resource. - -============================================================================== -WRITING THEMES *airline-themes* - -Themes are written "close to the metal" -- you will need to know some basic -VimL syntax to write a theme, but if you've written in any programming -language before it will be easy to pick up. - -The |dark.vim| theme fully documents this procedure and will guide you through -the process. The |jellybeans.vim| theme is another example of how to write a -theme, but instead of manually declaring colors, it extracts the values from -highlight groups. - -============================================================================== -TROUBLESHOOTING *airline-troubleshooting* - -Q. There are no colors. -A. You need to set up your terminal correctly. For more details, see - . Alternatively, if you want - to bypass the automatic detection of terminal colors, you can force Vim - into 256 color mode with this: > - set t_Co=256 -< -Q. The statusline does not appear until I create a split. -A. This is the default setting of 'laststatus'. If you want it to appear all - the time, add the following to your vimrc: > - set laststatus=2 -< -Q. Powerline symbols are not showing up. -A. First, you must install patched powerline fonts. Second, you must enable - unicode in vim. > - set encoding=utf-8 -< -Q. There is a pause when leaving insert mode. -A. Add the following to your vimrc. > - set ttimeoutlen=50 -< -Q. The colors look a little off for some themes. -A. Certain themes are derived from the active colorscheme by extracting colors - from predefined highlight groups. These airline themes will look good for - their intended matching colorschemes, but will be hit or miss when loaded - with other colorschemes. - - -Solutions to other common problems can be found in the Wiki: - - -============================================================================== -CONTRIBUTIONS *airline-contributions* - -Contributions and pull requests are welcome. - -============================================================================== -LICENSE *airline-license* - -MIT License. Copyright © 2013-2014 Bailey Ling. - - - vim:tw=78:ts=8:ft=help:norl: diff --git a/bundle/airline/plugin/airline.vim b/bundle/airline/plugin/airline.vim deleted file mode 100755 index d53c492..0000000 --- a/bundle/airline/plugin/airline.vim +++ /dev/null @@ -1,109 +0,0 @@ -" MIT License. Copyright (c) 2013-2014 Bailey Ling. -" vim: et ts=2 sts=2 sw=2 - -if &cp || v:version < 702 || (exists('g:loaded_airline') && g:loaded_airline) - finish -endif -let g:loaded_airline = 1 - -" autocmd VimEnter * call airline#deprecation#check() - -let s:airline_initialized = 0 -let s:airline_theme_defined = 0 -function! s:init() - if !s:airline_initialized - let s:airline_initialized = 1 - - call airline#init#bootstrap() - call airline#extensions#load() - call airline#init#sections() - - let s:airline_theme_defined = exists('g:airline_theme') - if s:airline_theme_defined || !airline#switch_matching_theme() - let g:airline_theme = get(g:, 'airline_theme', 'dark') - call airline#switch_theme(g:airline_theme) - endif - endif -endfunction - -function! s:on_window_changed() - if pumvisible() - return - endif - call init() - call airline#update_statusline() -endfunction - -function! s:on_colorscheme_changed() - call init() - if !s:airline_theme_defined - if airline#switch_matching_theme() - return - endif - endif - - " couldn't find a match, or theme was defined, just refresh - call airline#load_theme() -endfunction - -function airline#cmdwinenter(...) - call airline#extensions#apply_left_override('Command Line', '') -endfunction - -function! s:airline_toggle() - if exists("#airline") - augroup airline - au! - augroup END - augroup! airline - - if exists("s:stl") - let &stl = s:stl - endif - - silent doautocmd User AirlineToggledOff - else - let s:stl = &statusline - augroup airline - autocmd! - - autocmd CmdwinEnter * - \ call airline#add_statusline_func('airline#cmdwinenter') - \ | call on_window_changed() - autocmd CmdwinLeave * call airline#remove_statusline_func('airline#cmdwinenter') - - autocmd ColorScheme * call on_colorscheme_changed() - autocmd VimEnter,WinEnter,BufWinEnter,FileType,BufUnload,VimResized * - \ call on_window_changed() - - autocmd BufWritePost */autoload/airline/themes/*.vim - \ exec 'source '.split(globpath(&rtp, 'autoload/airline/themes/'.g:airline_theme.'.vim', 1), "\n")[0] - \ | call airline#load_theme() - augroup END - - silent doautocmd User AirlineToggledOn - - if s:airline_initialized - call on_window_changed() - endif - endif -endfunction - -function! s:get_airline_themes(a, l, p) - let files = split(globpath(&rtp, 'autoload/airline/themes/'.a:a.'*'), "\n") - return map(files, 'fnamemodify(v:val, ":t:r")') -endfunction -function! s:airline_theme(...) - if a:0 - call airline#switch_theme(a:1) - else - echo g:airline_theme - endif -endfunction -command! -nargs=? -complete=customlist,get_airline_themes AirlineTheme call airline_theme() -command! AirlineToggleWhitespace call airline#extensions#whitespace#toggle() -command! AirlineToggle call airline_toggle() -command! AirlineRefresh call airline#load_theme() | call airline#update_statusline() - -call airline_toggle() - diff --git a/bundle/airline/t/airline.vim b/bundle/airline/t/airline.vim deleted file mode 100755 index 78ab6d7..0000000 --- a/bundle/airline/t/airline.vim +++ /dev/null @@ -1,87 +0,0 @@ -let g:airline_theme = 'dark' -call airline#init#bootstrap() -call airline#init#sections() -source plugin/airline.vim - -function! MyFuncref(...) - call a:1.add_raw('hello world') - return 1 -endfunction - -function! MyIgnoreFuncref(...) - return -1 -endfunction - -function! MyAppend1(...) - call a:1.add_raw('hello') -endfunction - -function! MyAppend2(...) - call a:1.add_raw('world') -endfunction - -describe 'airline' - before - let g:airline_statusline_funcrefs = [] - end - - it 'should run user funcrefs first' - call airline#add_statusline_func('MyFuncref') - let &statusline = '' - call airline#update_statusline() - Expect airline#statusline(1) =~ 'hello world' - end - - it 'should not change the statusline with -1' - call airline#add_statusline_funcref(function('MyIgnoreFuncref')) - let &statusline = 'foo' - call airline#update_statusline() - Expect &statusline == 'foo' - end - - it 'should support multiple chained funcrefs' - call airline#add_statusline_func('MyAppend1') - call airline#add_statusline_func('MyAppend2') - call airline#update_statusline() - Expect airline#statusline(1) =~ 'helloworld' - end - - it 'should allow users to redefine sections' - let g:airline_section_a = airline#section#create(['mode', 'mode']) - call airline#update_statusline() - Expect airline#statusline(1) =~ '%{airline#util#wrap(airline#parts#mode(),0)}%#airline_a#%#airline_a_bold#%{airline#util#wrap(airline#parts#mode(),0)}%#airline_a#' - end - - it 'should remove funcrefs properly' - let c = len(g:airline_statusline_funcrefs) - call airline#add_statusline_func('MyIgnoreFuncref') - call airline#remove_statusline_func('MyIgnoreFuncref') - Expect len(g:airline_statusline_funcrefs) == c - end - - it 'should overwrite the statusline with active and inactive splits' - wincmd s - Expect airline#statusline(1) !~ 'inactive' - Expect airline#statusline(2) =~ 'inactive' - wincmd c - end - - it 'should collapse the inactive split if the variable is set true' - let g:airline_inactive_collapse = 1 - wincmd s - Expect getwinvar(2, '&statusline') !~ 'airline#parts#mode' - wincmd c - end - - it 'should not collapse the inactive split if the variable is set false' - let g:airline_inactive_collapse = 0 - wincmd s - Expect getwinvar(2, '&statusline') != 'airline#parts#mode' - wincmd c - end - - it 'should include check_mode' - Expect airline#statusline(1) =~ 'airline#check_mode' - end -end - diff --git a/bundle/airline/t/builder.vim b/bundle/airline/t/builder.vim deleted file mode 100755 index 57feb14..0000000 --- a/bundle/airline/t/builder.vim +++ /dev/null @@ -1,106 +0,0 @@ -let g:airline_theme = 'dark' -call airline#init#bootstrap() - -describe 'active builder' - before - let s:builder = airline#builder#new({'active': 1}) - end - - it 'should start with an empty statusline' - let stl = s:builder.build() - Expect stl == '' - end - - it 'should transition colors from one to the next' - call s:builder.add_section('Normal', 'hello') - call s:builder.add_section('Search', 'world') - let stl = s:builder.build() - Expect stl =~ '%#Normal#hello%#Normal_to_Search#>%#Search#world' - end - - it 'should reuse highlight group if background colors match' - highlight Foo1 ctermfg=1 ctermbg=2 - highlight Foo2 ctermfg=1 ctermbg=2 - call s:builder.add_section('Foo1', 'hello') - call s:builder.add_section('Foo2', 'world') - let stl = s:builder.build() - Expect stl =~ '%#Foo1#hello>world' - end - - it 'should switch highlight groups if foreground colors differ' - highlight Foo1 ctermfg=1 ctermbg=2 - highlight Foo2 ctermfg=2 ctermbg=2 - call s:builder.add_section('Foo1', 'hello') - call s:builder.add_section('Foo2', 'world') - let stl = s:builder.build() - Expect stl =~ '%#Foo1#hello%#Foo1_to_Foo2#>%#Foo2#world' - end - - it 'should split left/right sections' - call s:builder.split() - let stl = s:builder.build() - Expect stl =~ '%=' - end - - it 'after split, sections use the right separator' - call s:builder.split() - call s:builder.add_section('Normal', 'hello') - call s:builder.add_section('Search', 'world') - let stl = s:builder.build() - Expect stl =~ 'hello%#Normal_to_Search#<%#Search#world' - end - - it 'should not repeat the same highlight group' - call s:builder.add_section('Normal', 'hello') - call s:builder.add_section('Normal', 'hello') - let stl = s:builder.build() - Expect stl == '%#Normal#hello>hello' - end - - it 'should replace accent groups with the specified group' - call s:builder.add_section('Normal', '%#__accent_foo#hello') - let stl = s:builder.build() - Expect stl == '%#Normal#%#Normal_foo#hello' - end - - it 'should replace two accent groups with correct groups' - call s:builder.add_section('Normal', '%#__accent_foo#hello%#__accent_bar#world') - let stl = s:builder.build() - Expect stl =~ '%#Normal_foo#hello%#Normal_bar#world' - end - - it 'should special restore group should go back to previous group' - call s:builder.add_section('Normal', '%#__restore__#') - let stl = s:builder.build() - Expect stl !~ '%#__restore__#' - Expect stl =~ '%#Normal#' - end - - it 'should blend colors from the left through the split to the right' - call s:builder.add_section('Normal', 'hello') - call s:builder.split() - call s:builder.add_section('Search', 'world') - let stl = s:builder.build() - Expect stl =~ 'Normal_to_Search' - end -end - -describe 'inactive builder' - before - let s:builder = airline#builder#new({'active': 0}) - end - - it 'should transition colors from one to the next' - call s:builder.add_section('Normal', 'hello') - call s:builder.add_section('Search', 'world') - let stl = s:builder.build() - Expect stl =~ '%#Normal_inactive#hello%#Normal_to_Search_inactive#>%#Search_inactive#world' - end - - it 'should not render accents' - call s:builder.add_section('Normal', '%#__accent_foo#hello%#foo#foo%#__accent_bar#world') - let stl = s:builder.build() - Expect stl == '%#Normal_inactive#hello%#foo_inactive#fooworld' - end -end - diff --git a/bundle/airline/t/commands.vim b/bundle/airline/t/commands.vim deleted file mode 100755 index b56b881..0000000 --- a/bundle/airline/t/commands.vim +++ /dev/null @@ -1,33 +0,0 @@ -call airline#init#bootstrap() -call airline#init#sections() - -source plugin/airline.vim - -describe 'commands' - it 'should toggle off and on' - execute 'AirlineToggle' - Expect exists('#airline') to_be_false - execute 'AirlineToggle' - Expect exists('#airline') to_be_true - end - - it 'should toggle whitespace off and on' - call airline#extensions#load() - execute 'AirlineToggleWhitespace' - Expect exists('#airline_whitespace') to_be_false - execute 'AirlineToggleWhitespace' - Expect exists('#airline_whitespace') to_be_true - end - - it 'should display theme name with no args' - execute 'AirlineTheme simple' - Expect g:airline_theme == 'simple' - execute 'AirlineTheme dark' - Expect g:airline_theme == 'dark' - end - - it 'should have a refresh command' - Expect exists(':AirlineRefresh') to_be_true - end -end - diff --git a/bundle/airline/t/extensions_default.vim b/bundle/airline/t/extensions_default.vim deleted file mode 100755 index d6fc572..0000000 --- a/bundle/airline/t/extensions_default.vim +++ /dev/null @@ -1,33 +0,0 @@ -let g:airline_theme = 'dark' -call airline#init#bootstrap() -call airline#init#sections() -source plugin/airline.vim -call airline#load_theme() - -describe 'default' - before - let s:builder = airline#builder#new({'active': 1}) - end - - it 'should use the layout' - let g:airline#extensions#default#layout = [ - \ [ 'c', 'a', 'b', 'warning' ], - \ [ 'x', 'z', 'y' ] - \ ] - call airline#extensions#default#apply(s:builder, { 'winnr': 1, 'active': 1 }) - let stl = s:builder.build() - Expect stl =~ 'airline_c_to_airline_a' - Expect stl =~ 'airline_a_to_airline_b' - Expect stl =~ 'airline_b_to_airline_warning' - Expect stl =~ 'airline_x_to_airline_z' - Expect stl =~ 'airline_z_to_airline_y' - end - - it 'should only render warning section in active splits' - wincmd s - Expect airline#statusline(1) =~ 'warning' - Expect airline#statusline(2) !~ 'warning' - wincmd c - end -end - diff --git a/bundle/airline/t/highlighter.vim b/bundle/airline/t/highlighter.vim deleted file mode 100755 index a1ed490..0000000 --- a/bundle/airline/t/highlighter.vim +++ /dev/null @@ -1,21 +0,0 @@ -let g:airline_theme = 'dark' - -describe 'highlighter' - it 'should create separator highlight groups' - hi Foo1 ctermfg=1 ctermbg=2 - hi Foo2 ctermfg=3 ctermbg=4 - call airline#highlighter#add_separator('Foo1', 'Foo2', 0) - let hl = airline#highlighter#get_highlight('Foo1_to_Foo2') - Expect hl == [ '', '', '4', '2', '' ] - end - - it 'should populate accent colors' - Expect exists('g:airline#themes#dark#palette.normal.airline_c_red') to_be_false - Expect hlID('airline_c_red') == 0 - call airline#themes#patch(g:airline#themes#dark#palette) - call airline#highlighter#add_accent('red') - call airline#highlighter#highlight(['normal']) - Expect hlID('airline_c_red') != 0 - end -end - diff --git a/bundle/airline/t/init.vim b/bundle/airline/t/init.vim deleted file mode 100755 index 86efe58..0000000 --- a/bundle/airline/t/init.vim +++ /dev/null @@ -1,77 +0,0 @@ -let s:sections = ['a', 'b', 'c', 'gutter', 'x', 'y', 'z', 'warning'] - -function! s:clear() - for key in s:sections - unlet! g:airline_section_{key} - endfor -endfunction - -call airline#init#bootstrap() - -describe 'init sections' - before - call s:clear() - call airline#init#sections() - end - - after - call s:clear() - end - - it 'section a should have mode, paste, iminsert' - Expect g:airline_section_a =~ 'mode' - Expect g:airline_section_a =~ 'paste' - Expect g:airline_section_a =~ 'iminsert' - end - - it 'section b should be blank because no extensions are installed' - Expect g:airline_section_b == '' - end - - it 'section c should be file' - Expect g:airline_section_c == '%<%f%m %#__accent_red#%{airline#util#wrap(airline#parts#readonly(),0)}%#__restore__#' - end - - it 'section x should be filetype' - Expect g:airline_section_x == '%{airline#util#wrap(airline#parts#filetype(),0)}' - end - - it 'section y should be fenc and ff' - Expect g:airline_section_y =~ 'ff' - Expect g:airline_section_y =~ 'fenc' - end - - it 'section z should be line numbers' - Expect g:airline_section_z =~ '%3p%%' - Expect g:airline_section_z =~ '%4l' - Expect g:airline_section_z =~ '%3c' - end - - it 'should not redefine sections already defined' - for s in s:sections - let g:airline_section_{s} = s - endfor - call airline#init#bootstrap() - for s in s:sections - Expect g:airline_section_{s} == s - endfor - end - - it 'all default statusline extensions should be blank' - Expect airline#parts#get('hunks').raw == '' - Expect airline#parts#get('branch').raw == '' - Expect airline#parts#get('tagbar').raw == '' - Expect airline#parts#get('syntastic').raw == '' - Expect airline#parts#get('eclim').raw == '' - Expect airline#parts#get('whitespace').raw == '' - end -end - -describe 'init parts' - it 'should not redefine parts already defined' - call airline#parts#define_raw('linenr', 'bar') - call airline#init#sections() - Expect g:airline_section_z =~ 'bar' - end -end - diff --git a/bundle/airline/t/parts.vim b/bundle/airline/t/parts.vim deleted file mode 100755 index ee7c92e..0000000 --- a/bundle/airline/t/parts.vim +++ /dev/null @@ -1,39 +0,0 @@ -describe 'parts' - it 'overwrites existing values' - call airline#parts#define('foo', { 'test': '123' }) - Expect airline#parts#get('foo').test == '123' - call airline#parts#define('foo', { 'test': '321' }) - Expect airline#parts#get('foo').test == '321' - end - - it 'can define a function part' - call airline#parts#define_function('func', 'bar') - Expect airline#parts#get('func').function == 'bar' - end - - it 'can define a text part' - call airline#parts#define_text('text', 'bar') - Expect airline#parts#get('text').text == 'bar' - end - - it 'can define a raw part' - call airline#parts#define_raw('raw', 'bar') - Expect airline#parts#get('raw').raw == 'bar' - end - - it 'can define a minwidth' - call airline#parts#define_minwidth('mw', 123) - Expect airline#parts#get('mw').minwidth == 123 - end - - it 'can define a condition' - call airline#parts#define_condition('part', '1') - Expect airline#parts#get('part').condition == '1' - end - - it 'can define a accent' - call airline#parts#define_accent('part', 'red') - Expect airline#parts#get('part').accent == 'red' - end -end - diff --git a/bundle/airline/t/section.vim b/bundle/airline/t/section.vim deleted file mode 100755 index 034440c..0000000 --- a/bundle/airline/t/section.vim +++ /dev/null @@ -1,76 +0,0 @@ -function! SectionSpec() -endfunction - -describe 'section' - before - call airline#parts#define_text('text', 'text') - call airline#parts#define_raw('raw', 'raw') - call airline#parts#define_function('func', 'SectionSpec') - end - - it 'should be able to reference default parts' - let s = airline#section#create(['paste']) - Expect s == '%{airline#util#wrap(airline#parts#paste(),0)}' - end - - it 'should create sections with no separators' - let s = airline#section#create(['text', 'raw', 'func']) - Expect s == '%{airline#util#wrap("text",0)}raw%{airline#util#wrap(SectionSpec(),0)}' - end - - it 'should create left sections with separators' - let s = airline#section#create_left(['text', 'text']) - Expect s == '%{airline#util#wrap("text",0)}%{airline#util#append("text",0)}' - end - - it 'should create right sections with separators' - let s = airline#section#create_right(['text', 'text']) - Expect s == '%{airline#util#prepend("text",0)}%{airline#util#wrap("text",0)}' - end - - it 'should prefix with accent group if provided and restore afterwards' - call airline#parts#define('hi', { - \ 'raw': 'hello', - \ 'accent': 'red', - \ }) - let s = airline#section#create(['hi']) - Expect s == '%#__accent_red#hello%#__restore__#' - end - - it 'should accent functions' - call airline#parts#define_function('hi', 'Hello') - call airline#parts#define_accent('hi', 'bold') - let s = airline#section#create(['hi']) - Expect s == '%#__accent_bold#%{airline#util#wrap(Hello(),0)}%#__restore__#' - end - - it 'should parse out a section from the distro' - call airline#extensions#load() - let s = airline#section#create(['whitespace']) - Expect s =~ 'airline#extensions#whitespace#check' - end - - it 'should use parts as is if they are not found' - let s = airline#section#create(['asdf', 'func']) - Expect s == 'asdf%{airline#util#wrap(SectionSpec(),0)}' - end - - it 'should force add separators for raw and missing keys' - let s = airline#section#create_left(['asdf', 'raw']) - Expect s == 'asdf > raw' - let s = airline#section#create_left(['asdf', 'aaaa', 'raw']) - Expect s == 'asdf > aaaa > raw' - let s = airline#section#create_right(['raw', '%f']) - Expect s == 'raw < %f' - let s = airline#section#create_right(['%t', 'asdf', '%{getcwd()}']) - Expect s == '%t < asdf < %{getcwd()}' - end - - it 'should empty out parts that do not pass their condition' - call airline#parts#define_text('conditional', 'conditional') - call airline#parts#define_condition('conditional', '0') - let s = airline#section#create(['conditional']) - Expect s == '%{0 ? airline#util#wrap("conditional",0) : ""}' - end -end - diff --git a/bundle/airline/t/themes.vim b/bundle/airline/t/themes.vim deleted file mode 100755 index d735229..0000000 --- a/bundle/airline/t/themes.vim +++ /dev/null @@ -1,68 +0,0 @@ -describe 'themes' - after - highlight clear Foo - highlight clear Normal - end - - it 'should extract correct colors' - highlight Foo ctermfg=1 ctermbg=2 - let colors = airline#themes#get_highlight('Foo') - Expect colors[2] == '1' - Expect colors[3] == '2' - end - - it 'should extract from normal if colors unavailable' - highlight Normal ctermfg=100 ctermbg=200 - highlight Foo ctermbg=2 - let colors = airline#themes#get_highlight('Foo') - Expect colors[2] == '100' - Expect colors[3] == '2' - end - - it 'should flip target group if it is reversed' - highlight Foo ctermbg=222 ctermfg=103 term=reverse - let colors = airline#themes#get_highlight('Foo') - Expect colors[2] == '222' - Expect colors[3] == '103' - end - - it 'should pass args through correctly' - let hl = airline#themes#get_highlight('Foo', 'bold', 'italic') - Expect hl == ['', '', 0, 1, 'bold,italic'] - - let hl = airline#themes#get_highlight2(['Foo','bg'], ['Foo','fg'], 'italic', 'bold') - Expect hl == ['', '', 1, 0, 'italic,bold'] - end - - it 'should generate color map with mirroring' - let map = airline#themes#generate_color_map( - \ [ 1, 1, 1, 1, '1' ], - \ [ 2, 2, 2, 2, '2' ], - \ [ 3, 3, 3, 3, '3' ], - \ ) - Expect map.airline_a[0] == 1 - Expect map.airline_b[0] == 2 - Expect map.airline_c[0] == 3 - Expect map.airline_x[0] == 3 - Expect map.airline_y[0] == 2 - Expect map.airline_z[0] == 1 - end - - it 'should generate color map with full set of colors' - let map = airline#themes#generate_color_map( - \ [ 1, 1, 1, 1, '1' ], - \ [ 2, 2, 2, 2, '2' ], - \ [ 3, 3, 3, 3, '3' ], - \ [ 4, 4, 4, 4, '4' ], - \ [ 5, 5, 5, 5, '5' ], - \ [ 6, 6, 6, 6, '6' ], - \ ) - Expect map.airline_a[0] == 1 - Expect map.airline_b[0] == 2 - Expect map.airline_c[0] == 3 - Expect map.airline_x[0] == 4 - Expect map.airline_y[0] == 5 - Expect map.airline_z[0] == 6 - end -end - diff --git a/bundle/airline/t/util.vim b/bundle/airline/t/util.vim deleted file mode 100755 index 913de9d..0000000 --- a/bundle/airline/t/util.vim +++ /dev/null @@ -1,54 +0,0 @@ -call airline#init#bootstrap() - -function! Util1() - let g:count += 1 -endfunction -function! Util2() - let g:count += 2 -endfunction -function! Util3(...) - let g:count = a:0 -endfunction - -describe 'util' - before - let g:count = 0 - end - - it 'has append wrapper function' - Expect airline#util#append('', 0) == '' - Expect airline#util#append('1', 0) == ' > 1' - end - - it 'has prepend wrapper function' - Expect airline#util#prepend('', 0) == '' - Expect airline#util#prepend('1', 0) == '1 < ' - end - - it 'has getwinvar function' - Expect airline#util#getwinvar(1, 'asdf', '123') == '123' - call setwinvar(1, 'vspec', 'is cool') - Expect airline#util#getwinvar(1, 'vspec', '') == 'is cool' - end - - it 'has exec funcrefs helper functions' - call airline#util#exec_funcrefs([function('Util1'), function('Util2')]) - Expect g:count == 3 - - call airline#util#exec_funcrefs([function('Util3')], 1, 2, 3, 4) - Expect g:count == 4 - end - - it 'should ignore minwidth if less than 0' - Expect airline#util#append('foo', -1) == ' > foo' - Expect airline#util#prepend('foo', -1) == 'foo < ' - Expect airline#util#wrap('foo', -1) == 'foo' - end - - it 'should return empty if winwidth() > minwidth' - Expect airline#util#append('foo', 99999) == '' - Expect airline#util#prepend('foo', 99999) == '' - Expect airline#util#wrap('foo', 99999) == '' - end -end - diff --git a/bundle/coffee-script/.gitignore b/bundle/coffee-script/.gitignore deleted file mode 100644 index 1ff7b05..0000000 --- a/bundle/coffee-script/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -.*.sw[a-z] -.*.un~ -doc/tags - diff --git a/bundle/coffee-script/Copying.md b/bundle/coffee-script/Copying.md deleted file mode 100644 index 51cf8d1..0000000 --- a/bundle/coffee-script/Copying.md +++ /dev/null @@ -1,15 +0,0 @@ - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - Version 2, December 2004 - - Copyright (C) 2010 to 2012 Mick Koch - - Everyone is permitted to copy and distribute verbatim or modified - copies of this license document, and changing it is allowed as long - as the name is changed. - - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. You just DO WHAT THE FUCK YOU WANT TO. - - diff --git a/bundle/coffee-script/Makefile b/bundle/coffee-script/Makefile deleted file mode 100644 index e6ef409..0000000 --- a/bundle/coffee-script/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -REF = HEAD -VERSION = $(shell git describe --always $(REF)) - -ARCHIVE = vim-coffee-script-$(VERSION).zip -ARCHIVE_DIRS = after autoload compiler doc ftdetect ftplugin indent syntax - -# Don't do anything by default. -all: - -# Make vim.org zipball. -archive: - git archive $(REF) -o $(ARCHIVE) -- $(ARCHIVE_DIRS) - -# Remove zipball. -clean: - -rm -f $(ARCHIVE) - -# Build the list of syntaxes for @coffeeAll. -coffeeAll: - @grep -E 'syn (match|region)' syntax/coffee.vim |\ - grep -v 'contained' |\ - awk '{print $$3}' |\ - uniq - -.PHONY: all archive clean hash coffeeAll diff --git a/bundle/coffee-script/News.md b/bundle/coffee-script/News.md deleted file mode 100644 index 9706796..0000000 --- a/bundle/coffee-script/News.md +++ /dev/null @@ -1,18 +0,0 @@ -### Version 002 (December 5, 2011) - -Added binary numbers (0b0101) and fixed some bugs (#9, #62, #63, #65). - -### Version 001 (October 18, 2011) - -Removed deprecated `coffee_folding` option, added `coffee_compile_vert` option, -split out compiler, fixed indentation and syntax bugs, and added Haml support -and omnicompletion. - - - The coffee compiler is now a proper vim compiler that can be loaded with - `:compiler coffee`. - - The `coffee_compile_vert` option can now be set to split the CoffeeCompile - buffer vertically by default. - - CoffeeScript is now highlighted inside the `:coffeescript` filter in Haml. - - Omnicompletion (`:help compl-omni`) now uses JavaScript's dictionary to - complete words. - - We now have a fancy version number. diff --git a/bundle/coffee-script/Readme.md b/bundle/coffee-script/Readme.md deleted file mode 100644 index d557848..0000000 --- a/bundle/coffee-script/Readme.md +++ /dev/null @@ -1,599 +0,0 @@ -This project adds [CoffeeScript] support to vim. It covers syntax, indenting, -compiling, and more. - -![Screenshot](http://i.imgur.com/j1BhpZQ.png) - -[CoffeeScript]: http://coffeescript.org/ - -## Table of Contents - -- Installation - - [Requirements](#requirements) - - [Install using Pathogen](#install-using-pathogen) - - [Install using Vundle](#install-using-vundle) - - [Install from a Zip File](#install-from-a-zip-file) -- Coffee Commands - - [Compile to JavaScript](#compile-to-javascript) - - [Compile CoffeeScript Snippets](#coffeecompile-compile-coffeescript-snippets) - - [Live Preview Compiling](#coffeewatch-live-preview-compiling) - - [Run CoffeeScript Snippets](#coffeerun-run-coffeescript-snippets) - - [Lint your CoffeeScript](#coffeelint-lint-your-coffeescript) -- Extras - - [Literate CoffeeScript](#literate-coffeescript) - - [CoffeeScript in HTML](#coffeescript-in-html) - - [CoffeeScript in Haml](#coffeescript-in-haml) -- Configuration - - [Custom Autocmds](#custom-autocmds) - - [Configuration Variables](#configuration-variables) - - [Configure Syntax Highlighting](#configure-syntax-highlighting) - - [Tune Vim for CoffeeScript](#tune-vim-for-coffeescript) - -## Requirements - - - vim 7.4 or later - - coffee 1.2.0 or later - -## Install using Pathogen - -This project uses rolling releases based on git commits, so pathogen is a -natural fit for it. If you're already using pathogen, you can skip to step 4. - -1. Install [pathogen.vim] into `~/.vim/autoload/` (see [pathogen's - readme][install-pathogen] for more information.) - -[pathogen.vim]: http://www.vim.org/scripts/script.php?script_id=2332 -[install-pathogen]: https://github.com/tpope/vim-pathogen#installation - -2. Enable pathogen in your vimrc. Here's a bare-minimum vimrc that enables - all the features of `vim-coffee-script`: - - ```vim - call pathogen#infect() - syntax enable - filetype plugin indent on - ``` - - If you already have a vimrc built up, just make sure it contains these calls, - in this order. - -3. Create the directory `~/.vim/bundle/`: - - mkdir ~/.vim/bundle - -4. Clone the `vim-coffee-script` repo into `~/.vim/bundle/`: - - git clone https://github.com/kchmck/vim-coffee-script.git ~/.vim/bundle/vim-coffee-script/ - -Updating takes two steps: - -1. Change into `~/.vim/bundle/vim-coffee-script/`: - - cd ~/.vim/bundle/vim-coffee-script - -2. Pull in the latest changes: - - git pull - -## Install using Vundle - -1. [Install Vundle] into `~/.vim/bundle/`. - -[Install Vundle]: https://github.com/gmarik/vundle#quick-start - -2. Configure your vimrc for Vundle. Here's a bare-minimum vimrc that enables all - the features of `vim-coffee-script`: - - - ```vim - set nocompatible - filetype off - - set rtp+=~/.vim/bundle/vundle/ - call vundle#rc() - - Bundle 'kchmck/vim-coffee-script' - - syntax enable - filetype plugin indent on - ``` - - If you're adding Vundle to a built-up vimrc, just make sure all these calls - are in there and that they occur in this order. - -3. Open vim and run `:BundleInstall`. - -To update, open vim and run `:BundleInstall!` (notice the bang!) - -## Install from a Zip File - -1. Download the latest zip file from [vim.org][zip]. - -2. Extract the archive into `~/.vim/`: - - unzip -od ~/.vim/ ARCHIVE.zip - - This should create the files `~/.vim/autoload/coffee.vim`, - `~/.vim/compiler/coffee.vim`, etc. - -You can update the plugin using the same steps. - -[zip]: http://www.vim.org/scripts/script.php?script_id=3590 - -## Compile to JavaScript - -A `coffee` wrapper for use with `:make` is enabled automatically for coffee -files if no other compiler is loaded. To enable it manually, run - - :compiler coffee - -The `:make` command is then configured to use the `coffee` compiler and -recognize its errors. I've included a quick reference here but be sure to check -out [`:help :make`][make] for a full reference of the command. - - ![make](http://i.imgur.com/scUXmxR.png) - - ![make Result](http://i.imgur.com/eGIjEdn.png) - -[make]: http://vimdoc.sourceforge.net/htmldoc/quickfix.html#:make_makeprg - -Consider the full signature of a `:make` call as - - :[silent] make[!] [COFFEE-OPTIONS]... - -By default `:make` shows all compiler output and jumps to the first line -reported as an error. Compiler output can be hidden with a leading `:silent`: - - :silent make - -Line-jumping can be turned off by adding a bang: - - :make! - -`COFFEE-OPTIONS` given to `:make` are passed along to `coffee` (see also -[`coffee_make_options`](#coffee_make_options)): - - :make --bare --output /some/dir - -See the [full table of options](http://coffeescript.org/#usage) for a -list of all the options that `coffee` recognizes. - -*Configuration*: [`coffee_compiler`](#coffee_compiler), -[`coffee_make_options`](#coffee_make_options) - -#### The quickfix window - -Compiler errors are added to the [quickfix] list by `:make`, but the quickfix -window isn't automatically shown. The [`:cwindow`][cwindow] command will pop up -the quickfix window if there are any errors: - - :make - :cwindow - -This is usually the desired behavior, so you may want to add an autocmd to your -vimrc to do this automatically: - - autocmd QuickFixCmdPost * nested cwindow | redraw! - -The `redraw!` command is needed to fix a redrawing quirk in terminal vim, but -can removed for gVim. - -[quickfix]: http://vimdoc.sourceforge.net/htmldoc/quickfix.html#quickfix -[cwindow]: http://vimdoc.sourceforge.net/htmldoc/quickfix.html#:cwindow - -#### Recompile on write - -To recompile a file when it's written, add a `BufWritePost` autocmd to your -vimrc: - - autocmd BufWritePost *.coffee silent make! - -#### Cake and Cakefiles - -A `cake` compiler is also available with the call - - :compiler cake - -You can then use `:make` as above to run your Cakefile and capture any `coffee` -errors: - - :silent make build - -It runs within the current directory, so make sure you're in the directory of -your Cakefile before calling it. - -*Configuration*: [`coffee_cake`](#coffee_cake), -[`coffee_cake_options`](#coffee_cake_options) - -## CoffeeCompile: Compile CoffeeScript Snippets - -CoffeeCompile shows how the current file or a snippet of CoffeeScript is -compiled to JavaScript. - - :[RANGE] CoffeeCompile [vert[ical]] [WINDOW-SIZE] - -Calling `:CoffeeCompile` without a range compiles the whole file: - - ![CoffeeCompile](http://i.imgur.com/0zFG0l0.png) - - ![CoffeeCompile Result](http://i.imgur.com/bpiAxaa.png) - -Calling it with a range, like in visual mode, compiles only the selected snippet -of CoffeeScript: - - ![CoffeeCompile Snippet](http://i.imgur.com/x3OT3Ay.png) - - ![Compiled Snippet](http://i.imgur.com/J02j4T8.png) - -Each file gets its own CoffeeCompile buffer, and the same buffer is used for all -future calls of `:CoffeeCompile` on that file. It can be quickly closed by -hitting `q` in normal mode. - -Using `vert` opens the CoffeeCompile buffer vertically instead of horizontally -(see also [`coffee_compile_vert`](#coffee_compile_vert)): - - :CoffeeCompile vert - -By default the CoffeeCompile buffer splits the source buffer in half, but this -can be overridden by passing in a `WINDOW-SIZE`: - - :CoffeeCompile 4 - -*Configuration*: [`coffee_compiler`](#coffee_compiler`), -[`coffee_compile_vert`](#coffee_compile_vert) - -#### Quick syntax checking - -If compiling a snippet results in a compiler error, CoffeeCompile adds that -error to the [quickfix] list. - -[quickfix]: http://vimdoc.sourceforge.net/htmldoc/quickfix.html#quickfix - - ![Syntax Checking](http://i.imgur.com/RC8accF.png) - - ![Syntax Checking Result](http://i.imgur.com/gi1ON75.png) - -You can use this to quickly check the syntax of a snippet. - -## CoffeeWatch: Live Preview Compiling - -CoffeeWatch emulates using the Try CoffeeScript preview box on the [CoffeeScript -homepage][CoffeeScript]. - - ![CoffeeWatch](http://i.imgur.com/TRHdIMG.png) - - ![CoffeeWatch Result](http://i.imgur.com/rJbOeeS.png) - -CoffeeWatch takes the same options as CoffeeCompile: - - :CoffeeWatch [vert[ical]] [WINDOW-SIZE] - -After a source buffer is watched, leaving insert mode or saving the file fires -off a recompile of the CoffeeScript: - - ![Insert Mode](http://i.imgur.com/SBVcf4k.png) - - ![Recompile](http://i.imgur.com/pbPMog7.png) - -You can force recompilation by calling `:CoffeeWatch`. - -To get synchronized scrolling of the source buffer and CoffeeWatch buffer, set -[`'scrollbind'`](http://vimdoc.sourceforge.net/htmldoc/options.html#'scrollbind') -on each: - - :setl scrollbind - -*Configuration*: [`coffee_compiler`](#coffee_compiler), -[`coffee_watch_vert`](#coffee_watch_vert) - -## CoffeeRun: Run CoffeeScript Snippets - -CoffeeRun compiles the current file or selected snippet and runs the resulting -JavaScript. - - ![CoffeeRun](http://i.imgur.com/YSkHUuQ.png) - - ![CoffeeRun Output](http://i.imgur.com/wZQbggN.png) - -The command has two forms: - - :CoffeeRun [PROGRAM-OPTIONS]... - -This form applies when no `RANGE` is given or when the given range is `1,$` -(first line to last line). It allows passing `PROGRAM-OPTIONS` to your compiled -program. The filename is passed directly to `coffee` so you must save the file -for your changes to take effect. - - :RANGE CoffeeRun [COFFEE-OPTIONS]... - -This form applies with all other ranges. It compiles and runs the lines within -the given `RANGE` and any extra `COFFEE-OPTIONS` are passed to `coffee`. - -*Configuration*: [`coffee_compiler`](#coffee_compiler), -[`coffee_run_vert`](#coffee_run_vert) - -## CoffeeLint: Lint your CoffeeScript - -CoffeeLint runs [coffeelint](http://www.coffeelint.org/) (version 0.5.7 or later -required) on the current file and adds any issues to the [quickfix] list. - - ![CoffeeLint](http://i.imgur.com/UN8Nr5N.png) - - ![CoffeeLint Result](http://i.imgur.com/9hSIj3W.png) - - :[RANGE] CoffeeLint[!] [COFFEELINT-OPTIONS]... [ | cwindow] - -If a `RANGE` is given, only those lines are piped to `coffeelint`. Options given -in `COFFEELINT-OPTIONS` are passed to `coffeelint` (see also -[`coffee_lint_options`](#coffee_lint_options)): - - :CoffeeLint -f lint.json - -It behaves very similar to `:make`, described [above](#compile-to-javascript). - - :CoffeeLint! | cwindow - -*Configuration*: [`coffee_linter`](#coffee_linter), -[`coffee_lint_options`](#coffee_lint_options) - -## Literate CoffeeScript - -Literate CoffeeScript syntax and indent support is provided by -[vim-literate-coffeescript]. The `Coffee` commands detect when they're running -on a litcoffee file and pass the `--literate` flag to their respective tools, -but at this time the commands are not automatically loaded when a litcoffee file -is opened. - -[vim-literate-coffeescript]: https://github.com/mintplant/vim-literate-coffeescript - -To load them, run - - runtime ftplugin/coffee.vim - -while inside a litcoffee buffer. To do this automatically, add - - autocmd FileType litcoffee runtime ftplugin/coffee.vim - -to your vimrc. - -## CoffeeScript in HTML - -CoffeeScript is highlighted and indented within - -```html - -``` - -blocks in html files. - -## CoffeeScript in Haml - -CoffeeScript is highlighted within the `:coffeescript` filter in haml files: - -```haml -:coffeescript - console.log "hullo" -``` - -At this time, coffee indenting doesn't work in these blocks. - -## Custom Autocmds - -You can [define commands][autocmd-explain] to be ran automatically on these -custom events. - -In all cases, the name of the command running the event (`CoffeeCompile`, -`CoffeeWatch`, or `CoffeeRun`) is matched by the [`{pat}`][autocmd] argument. -You can match all commands with a `*` or only specific commands by separating -them with a comma: `CoffeeCompile,CoffeeWatch`. - -[autocmd-explain]: http://vimdoc.sourceforge.net/htmldoc/usr_40.html#40.3 -[autocmd]: http://vimdoc.sourceforge.net/htmldoc/autocmd.html#:autocmd - -#### CoffeeBufNew - -CoffeeBufNew is ran when a new scratch buffer is created. It's called from the -new buffer, so it can be used to do additional set up. - -```vim -augroup CoffeeBufNew - autocmd User * set wrap -augroup END -``` - -*Used By*: CoffeeCompile, CoffeeWatch, CoffeeRun - -#### CoffeeBufUpdate - -CoffeeBufUpdate is ran when a scratch buffer is updated with output from -`coffee`. It's called from the scratch buffer, so it can be used to alter the -compiled output. - -```vim -" Switch back to the source buffer after updating. -augroup CoffeeBufUpdate - autocmd User CoffeeCompile,CoffeeRun exec bufwinnr(b:coffee_src_buf) 'wincmd w' -augroup END -``` - -For example, to strip off the "Generated by" comment on the first line, put this -in your vimrc: - -```vim -function! s:RemoveGeneratedBy() - " If there was an error compiling, there's no comment to remove. - if v:shell_error - return - endif - - " Save cursor position. - let pos = getpos('.') - - " Remove first line. - set modifiable - 1 delete _ - set nomodifiable - - " Restore cursor position. - call setpos('.', pos) -endfunction - -augroup CoffeeBufUpdate - autocmd User CoffeeCompile,CoffeeWatch call s:RemoveGeneratedBy() -augroup END -``` - -*Used By*: CoffeeCompile, CoffeeWatch, CoffeeRun - -## Configuration Variables - -This is the full list of configuration variables available, with example -settings and default values. Use these in your vimrc to control the default -behavior. - -#### coffee\_indent\_keep\_current - -By default, the indent function matches the indent of the previous line if it -doesn't find a reason to indent or outdent. To change this behavior so it -instead keeps the [current indent of the cursor][98], use - - let coffee_indent_keep_current = 1 - -[98]: https://github.com/kchmck/vim-coffee-script/pull/98 - -*Default*: `unlet coffee_indent_keep_current` - -Note that if you change this after a coffee file has been loaded, you'll have to -reload the indent script for the change to take effect: - - unlet b:did_indent | runtime indent/coffee.vim - -#### coffee\_compiler - -Path to the `coffee` executable used by the `Coffee` commands: - - let coffee_compiler = '/usr/bin/coffee' - -*Default*: `'coffee'` (search `$PATH` for executable) - -#### coffee\_make\_options - -Options to pass to `coffee` with `:make`: - - let coffee_make_options = '--bare' - -*Default*: `''` (nothing) - -Note that `coffee_make_options` is embedded into `'makeprg'`, so `:compiler -coffee` must be ran after changing `coffee_make_options` for the changes to take -effect. - -#### coffee\_cake - -Path to the `cake` executable: - - let coffee_cake = '/opt/bin/cake' - -*Default*: `'cake'` (search `$PATH` for executable) - -#### coffee\_cake\_options - -Options to pass to `cake` with `:make`: - - let coffee_cake_options = 'build' - -*Default*: `''` (nothing) - -#### coffee\_linter - -Path to the `coffeelint` executable: - - let coffee_linter = '/opt/bin/coffeelint' - -*Default*: `'coffeelint'` (search `$PATH` for executable) - -#### coffee\_lint\_options - -Options to pass to `coffeelint`: - - let coffee_lint_options = '-f lint.json' - -*Default*: `''` (nothing) - -#### coffee\_compile\_vert - -Open the CoffeeCompile buffer with a vertical split instead of a horizontal -one: - - let coffee_compile_vert = 1 - -*Default*: `unlet coffee_compile_vert` - -#### coffee\_watch\_vert - -Open the CoffeeWatch buffer with a vertical split instead of a horizontal -one: - - let coffee_watch_vert = 1 - -*Default*: `unlet coffee_watch_vert` - -#### coffee\_run\_vert - -Open the CoffeeRun buffer with a vertical split instead of a horizontal -one: - - let coffee_run_vert = 1 - -*Default*: `unlet coffee_run_vert` - -## Configure Syntax Highlighting - -Add these lines to your vimrc to disable the relevant syntax group. - -#### Disable trailing whitespace error - -Trailing whitespace is highlighted as an error by default. This can be disabled -with: - - hi link coffeeSpaceError NONE - -#### Disable trailing semicolon error - -Trailing semicolons are considered an error (for help transitioning from -JavaScript.) This can be disabled with: - - hi link coffeeSemicolonError NONE - -#### Disable reserved words error - -Reserved words like `function` and `var` are highlighted as an error where -they're not allowed in CoffeeScript. This can be disabled with: - - hi link coffeeReservedError NONE - -## Tune Vim for CoffeeScript - -Changing these core settings can make vim more CoffeeScript friendly. - -#### Fold by indentation - -Folding by indentation works well for CoffeeScript functions and classes: - - ![Folding](http://i.imgur.com/gDgUBdO.png) - -To fold by indentation in CoffeeScript files, add this line to your vimrc: - - autocmd BufNewFile,BufReadPost *.coffee setl foldmethod=indent nofoldenable - -With this, folding is disabled by default but can be quickly toggled per-file -by hitting `zi`. To enable folding by default, remove `nofoldenable`: - - autocmd BufNewFile,BufReadPost *.coffee setl foldmethod=indent - -#### Two-space indentation - -To get standard two-space indentation in CoffeeScript files, add this line to -your vimrc: - - autocmd BufNewFile,BufReadPost *.coffee setl shiftwidth=2 expandtab diff --git a/bundle/coffee-script/Thanks.md b/bundle/coffee-script/Thanks.md deleted file mode 100644 index 8ddcf23..0000000 --- a/bundle/coffee-script/Thanks.md +++ /dev/null @@ -1,44 +0,0 @@ -Thanks to all bug reporters, and special thanks to those who have contributed -code: - - Brian Egan (brianegan): - Initial compiling support - - Ches Martin (ches): - Initial vim docs - - Chris Hoffman (cehoffman): - Add new keywoards from, to, and do - Highlight the - in negative integers - Add here regex highlighting, increase fold level for here docs - - David Wilhelm (bigfish): - CoffeeRun command - - Jay Adkisson (jayferd): - Support for eco templates - - Karl Guertin (grayrest) - Cakefiles are coffeescript - - Maciej Konieczny (narfdotpl): - Fix funny typo - - Matt Sacks (mattsa): - Javascript omni-completion - coffee_compile_vert option - - Nick Stenning (nickstenning): - Fold by indentation for coffeescript - - Simon Lipp (sloonz): - Trailing spaces are not error on lines containing only spaces - - Stéphan Kochen (stephank): - Initial HTML CoffeeScript highlighting - - Sven Felix Oberquelle (Svelix): - Haml CoffeeScript highlighting - - Wei Dai (clvv): - Fix the use of Vim built-in make command. diff --git a/bundle/coffee-script/Todo.md b/bundle/coffee-script/Todo.md deleted file mode 100644 index 3d4ffaa..0000000 --- a/bundle/coffee-script/Todo.md +++ /dev/null @@ -1 +0,0 @@ -- Don't highlight bad operator combinations diff --git a/bundle/coffee-script/after/indent/html.vim b/bundle/coffee-script/after/indent/html.vim deleted file mode 100644 index 10ca6ce..0000000 --- a/bundle/coffee-script/after/indent/html.vim +++ /dev/null @@ -1,33 +0,0 @@ -" Language: CoffeeScript -" Maintainer: Mick Koch -" URL: http://github.com/kchmck/vim-coffee-script -" License: WTFPL - -" Load the coffee and html indent functions. -unlet b:did_indent -runtime indent/coffee.vim -let s:coffeeIndentExpr = &l:indentexpr - -" Load html last so it can overwrite coffee settings. -unlet b:did_indent -runtime indent/html.vim -let s:htmlIndentExpr = &l:indentexpr - -" Inject our wrapper indent function. -setlocal indentexpr=GetCoffeeHtmlIndent(v:lnum) - -function! GetCoffeeHtmlIndent(curlinenum) - " See if we're inside a coffeescript block. - let scriptlnum = searchpair('', 'bWn') - let prevlnum = prevnonblank(a:curlinenum) - - " If we're in the script block and the previous line isn't the script tag - " itself, use coffee indenting. - if scriptlnum && scriptlnum != prevlnum - exec 'return ' s:coffeeIndentExpr - endif - - " Otherwise use html indenting. - exec 'return ' s:htmlIndentExpr -endfunction diff --git a/bundle/coffee-script/after/syntax/haml.vim b/bundle/coffee-script/after/syntax/haml.vim deleted file mode 100644 index 4c517eb..0000000 --- a/bundle/coffee-script/after/syntax/haml.vim +++ /dev/null @@ -1,13 +0,0 @@ -" Language: CoffeeScript -" Maintainer: Sven Felix Oberquelle -" URL: http://github.com/kchmck/vim-coffee-script -" License: WTFPL - -" Inherit coffee from html so coffeeComment isn't redefined and given higher -" priority than hamlInterpolation. -syn cluster hamlCoffeescript contains=@htmlCoffeeScript -syn region hamlCoffeescriptFilter matchgroup=hamlFilter -\ start="^\z(\s*\):coffee\z(script\)\?\s*$" -\ end="^\%(\z1 \| *$\)\@!" -\ contains=@hamlCoffeeScript,hamlInterpolation -\ keepend diff --git a/bundle/coffee-script/after/syntax/html.vim b/bundle/coffee-script/after/syntax/html.vim deleted file mode 100644 index 9e2eb3a..0000000 --- a/bundle/coffee-script/after/syntax/html.vim +++ /dev/null @@ -1,11 +0,0 @@ -" Language: CoffeeScript -" Maintainer: Mick Koch -" URL: http://github.com/kchmck/vim-coffee-script -" License: WTFPL - -" Syntax highlighting for text/coffeescript script tags -syn include @htmlCoffeeScript syntax/coffee.vim -syn region coffeeScript start=##me=s-1 keepend -\ contains=@htmlCoffeeScript,htmlScriptTag,@htmlPreproc -\ containedin=htmlHead diff --git a/bundle/coffee-script/autoload/coffee.vim b/bundle/coffee-script/autoload/coffee.vim deleted file mode 100644 index 04d5efb..0000000 --- a/bundle/coffee-script/autoload/coffee.vim +++ /dev/null @@ -1,54 +0,0 @@ -" Language: CoffeeScript -" Maintainer: Mick Koch -" URL: http://github.com/kchmck/vim-coffee-script -" License: WTFPL - -" Set up some common global/buffer variables. -function! coffee#CoffeeSetUpVariables() - " Path to coffee executable - if !exists('g:coffee_compiler') - let g:coffee_compiler = 'coffee' - endif - - " Options passed to coffee with make - if !exists('g:coffee_make_options') - let g:coffee_make_options = '' - endif - - " Path to cake executable - if !exists('g:coffee_cake') - let g:coffee_cake = 'cake' - endif - - " Extra options passed to cake - if !exists('g:coffee_cake_options') - let g:coffee_cake_options = '' - endif - - " Path to coffeelint executable - if !exists('g:coffee_linter') - let g:coffee_linter = 'coffeelint' - endif - - " Options passed to CoffeeLint - if !exists('g:coffee_lint_options') - let g:coffee_lint_options = '' - endif - - " Pass the litcoffee flag to tools in this buffer if a litcoffee file is open. - " Let the variable be overwritten so it can be updated if a different filetype - " is set. - if &filetype == 'litcoffee' - let b:coffee_litcoffee = '--literate' - else - let b:coffee_litcoffee = '' - endif -endfunction - -function! coffee#CoffeeSetUpErrorFormat() - CompilerSet errorformat=Error:\ In\ %f\\,\ %m\ on\ line\ %l, - \Error:\ In\ %f\\,\ Parse\ error\ on\ line\ %l:\ %m, - \SyntaxError:\ In\ %f\\,\ %m, - \%f:%l:%c:\ error:\ %m, - \%-G%.%# -endfunction diff --git a/bundle/coffee-script/compiler/cake.vim b/bundle/coffee-script/compiler/cake.vim deleted file mode 100644 index 0a3c703..0000000 --- a/bundle/coffee-script/compiler/cake.vim +++ /dev/null @@ -1,15 +0,0 @@ -" Language: CoffeeScript -" Maintainer: Mick Koch -" URL: http://github.com/kchmck/vim-coffee-script -" License: WTFPL - -if exists('current_compiler') - finish -endif - -let current_compiler = 'cake' -call coffee#CoffeeSetUpVariables() - -exec 'CompilerSet makeprg=' . escape(g:coffee_cake . ' ' . -\ g:coffee_cake_options . ' $*', ' ') -call coffee#CoffeeSetUpErrorFormat() diff --git a/bundle/coffee-script/compiler/coffee.vim b/bundle/coffee-script/compiler/coffee.vim deleted file mode 100644 index a70fa64..0000000 --- a/bundle/coffee-script/compiler/coffee.vim +++ /dev/null @@ -1,82 +0,0 @@ -" Language: CoffeeScript -" Maintainer: Mick Koch -" URL: http://github.com/kchmck/vim-coffee-script -" License: WTFPL - -" All this is needed to support compiling filenames with spaces, quotes, and -" such. The filename is escaped and embedded into the `makeprg` setting. -" -" Because of this, `makeprg` must be updated on every file rename. And because -" of that, `CompilerSet` can't be used because it doesn't exist when the -" rename autocmd is ran. So, we have to do some checks to see whether `compiler` -" was called locally or globally, and respect that in the rest of the script. - -if exists('current_compiler') - finish -endif - -let current_compiler = 'coffee' -call coffee#CoffeeSetUpVariables() - -" Pattern to check if coffee is the compiler -let s:pat = '^' . current_compiler - -" Get a `makeprg` for the current filename. -function! s:GetMakePrg() - return g:coffee_compiler . - \ ' -c' . - \ ' ' . b:coffee_litcoffee . - \ ' ' . g:coffee_make_options . - \ ' $*' . - \ ' ' . fnameescape(expand('%')) -endfunction - -" Set `makeprg` and return 1 if coffee is still the compiler, else return 0. -function! s:SetMakePrg() - if &l:makeprg =~ s:pat - let &l:makeprg = s:GetMakePrg() - elseif &g:makeprg =~ s:pat - let &g:makeprg = s:GetMakePrg() - else - return 0 - endif - - return 1 -endfunction - -" Set a dummy compiler so we can check whether to set locally or globally. -exec 'CompilerSet makeprg=' . current_compiler -" Then actually set the compiler. -call s:SetMakePrg() -call coffee#CoffeeSetUpErrorFormat() - -function! s:CoffeeMakeDeprecated(bang, args) - echoerr 'CoffeeMake is deprecated! Please use :make instead, its behavior ' . - \ 'is identical.' - sleep 5 - exec 'make' . a:bang a:args -endfunction - -" Compile the current file. -command! -bang -bar -nargs=* CoffeeMake -\ call s:CoffeeMakeDeprecated(, ) - -" Set `makeprg` on rename since we embed the filename in the setting. -augroup CoffeeUpdateMakePrg - autocmd! - - " Update `makeprg` if coffee is still the compiler, else stop running this - " function. - function! s:UpdateMakePrg() - if !s:SetMakePrg() - autocmd! CoffeeUpdateMakePrg - endif - endfunction - - " Set autocmd locally if compiler was set locally. - if &l:makeprg =~ s:pat - autocmd BufFilePost,BufWritePost call s:UpdateMakePrg() - else - autocmd BufFilePost,BufWritePost call s:UpdateMakePrg() - endif -augroup END diff --git a/bundle/coffee-script/doc/coffee-script.txt b/bundle/coffee-script/doc/coffee-script.txt deleted file mode 100644 index 1b43cf3..0000000 --- a/bundle/coffee-script/doc/coffee-script.txt +++ /dev/null @@ -1,4 +0,0 @@ -Please see the project readme for up-to-date docs: -https://github.com/kchmck/vim-coffee-script - - vim:tw=78:ts=8:ft=help:norl: diff --git a/bundle/coffee-script/ftdetect/coffee.vim b/bundle/coffee-script/ftdetect/coffee.vim deleted file mode 100644 index 5056929..0000000 --- a/bundle/coffee-script/ftdetect/coffee.vim +++ /dev/null @@ -1,17 +0,0 @@ -" Language: CoffeeScript -" Maintainer: Mick Koch -" URL: http://github.com/kchmck/vim-coffee-script -" License: WTFPL - -autocmd BufNewFile,BufRead *.coffee set filetype=coffee -autocmd BufNewFile,BufRead *Cakefile set filetype=coffee -autocmd BufNewFile,BufRead *.coffeekup,*.ck set filetype=coffee -autocmd BufNewFile,BufRead *._coffee set filetype=coffee - -function! s:DetectCoffee() - if getline(1) =~ '^#!.*\' - set filetype=coffee - endif -endfunction - -autocmd BufNewFile,BufRead * call s:DetectCoffee() diff --git a/bundle/coffee-script/ftplugin/coffee.vim b/bundle/coffee-script/ftplugin/coffee.vim deleted file mode 100644 index c44fe97..0000000 --- a/bundle/coffee-script/ftplugin/coffee.vim +++ /dev/null @@ -1,404 +0,0 @@ -" Language: CoffeeScript -" Maintainer: Mick Koch -" URL: http://github.com/kchmck/vim-coffee-script -" License: WTFPL - -if exists('b:did_ftplugin') - finish -endif - -let b:did_ftplugin = 1 -call coffee#CoffeeSetUpVariables() - -setlocal formatoptions-=t formatoptions+=croql -setlocal comments=:# commentstring=#\ %s -setlocal omnifunc=javascriptcomplete#CompleteJS - -" Create custom augroups. -augroup CoffeeBufUpdate | augroup END -augroup CoffeeBufNew | augroup END - -" Enable coffee compiler if a compiler isn't set already. -if !len(&l:makeprg) - compiler coffee -endif - -" Switch to the window for buf. -function! s:SwitchWindow(buf) - exec bufwinnr(a:buf) 'wincmd w' -endfunction - -" Create a new scratch buffer and return the bufnr of it. After the function -" returns, vim remains in the scratch buffer so more set up can be done. -function! s:ScratchBufBuild(src, vert, size) - if a:size <= 0 - if a:vert - let size = winwidth(bufwinnr(a:src)) / 2 - else - let size = winheight(bufwinnr(a:src)) / 2 - endif - endif - - if a:vert - vertical belowright new - exec 'vertical resize' size - else - belowright new - exec 'resize' size - endif - - setlocal bufhidden=wipe buftype=nofile nobuflisted noswapfile nomodifiable - nnoremap q :hide - - return bufnr('%') -endfunction - -" Replace buffer contents with text and delete the last empty line. -function! s:ScratchBufUpdate(buf, text) - " Move to the scratch buffer. - call s:SwitchWindow(a:buf) - - " Double check we're in the scratch buffer before overwriting. - if bufnr('%') != a:buf - throw 'unable to change to scratch buffer' - endif - - setlocal modifiable - silent exec '% delete _' - silent put! =a:text - silent exec '$ delete _' - setlocal nomodifiable -endfunction - -" Parse the output of coffee into a qflist entry for src buffer. -function! s:ParseCoffeeError(output, src, startline) - " Coffee error is always on first line? - let match = matchlist(a:output, - \ '^\(\f\+\|\[stdin\]\):\(\d\):\(\d\): error: \(.\{-}\)' . "\n") - - if !len(match) - return - endif - - " Consider the line number from coffee as relative and add it to the beginning - " line number of the range the command was called on, then subtract one for - " zero-based relativity. - call setqflist([{'bufnr': a:src, 'lnum': a:startline + str2nr(match[2]) - 1, - \ 'type': 'E', 'col': str2nr(match[3]), 'text': match[4]}], 'r') -endfunction - -" Reset source buffer variables. -function! s:CoffeeCompileResetVars() - " Variables defined in source buffer: - " b:coffee_compile_buf: bufnr of output buffer - " Variables defined in output buffer: - " b:coffee_src_buf: bufnr of source buffer - " b:coffee_compile_pos: previous cursor position in output buffer - - let b:coffee_compile_buf = -1 -endfunction - -function! s:CoffeeWatchResetVars() - " Variables defined in source buffer: - " b:coffee_watch_buf: bufnr of output buffer - " Variables defined in output buffer: - " b:coffee_src_buf: bufnr of source buffer - " b:coffee_watch_pos: previous cursor position in output buffer - - let b:coffee_watch_buf = -1 -endfunction - -function! s:CoffeeRunResetVars() - " Variables defined in CoffeeRun source buffer: - " b:coffee_run_buf: bufnr of output buffer - " Variables defined in CoffeeRun output buffer: - " b:coffee_src_buf: bufnr of source buffer - " b:coffee_run_pos: previous cursor position in output buffer - - let b:coffee_run_buf = -1 -endfunction - -" Clean things up in the source buffers. -function! s:CoffeeCompileClose() - " Switch to the source buffer if not already in it. - silent! call s:SwitchWindow(b:coffee_src_buf) - call s:CoffeeCompileResetVars() -endfunction - -function! s:CoffeeWatchClose() - silent! call s:SwitchWindow(b:coffee_src_buf) - silent! autocmd! CoffeeAuWatch * - call s:CoffeeWatchResetVars() -endfunction - -function! s:CoffeeRunClose() - silent! call s:SwitchWindow(b:coffee_src_buf) - call s:CoffeeRunResetVars() -endfunction - -" Compile the lines between startline and endline and put the result into buf. -function! s:CoffeeCompileToBuf(buf, startline, endline) - let src = bufnr('%') - let input = join(getline(a:startline, a:endline), "\n") - - " Coffee doesn't like empty input. - if !len(input) - " Function should still return within output buffer. - call s:SwitchWindow(a:buf) - return - endif - - " Pipe lines into coffee. - let output = system(g:coffee_compiler . - \ ' -scb' . - \ ' ' . b:coffee_litcoffee . - \ ' 2>&1', input) - - " Paste output into output buffer. - call s:ScratchBufUpdate(a:buf, output) - - " Highlight as JavaScript if there were no compile errors. - if v:shell_error - call s:ParseCoffeeError(output, src, a:startline) - setlocal filetype= - else - " Clear the quickfix list. - call setqflist([], 'r') - setlocal filetype=javascript - endif -endfunction - -" Peek at compiled CoffeeScript in a scratch buffer. We handle ranges like this -" to prevent the cursor from being moved (and its position saved) before the -" function is called. -function! s:CoffeeCompile(startline, endline, args) - if a:args =~ '\' - echoerr 'CoffeeCompile watch is deprecated! Please use CoffeeWatch instead' - sleep 5 - call s:CoffeeWatch(a:args) - return - endif - - " Switch to the source buffer if not already in it. - silent! call s:SwitchWindow(b:coffee_src_buf) - - " Bail if not in source buffer. - if !exists('b:coffee_compile_buf') - return - endif - - " Build the output buffer if it doesn't exist. - if bufwinnr(b:coffee_compile_buf) == -1 - let src = bufnr('%') - - let vert = exists('g:coffee_compile_vert') || a:args =~ '\' - let size = str2nr(matchstr(a:args, '\<\d\+\>')) - - " Build the output buffer and save the source bufnr. - let buf = s:ScratchBufBuild(src, vert, size) - let b:coffee_src_buf = src - - " Set the buffer name. - exec 'silent! file [CoffeeCompile ' . src . ']' - - " Clean up the source buffer when the output buffer is closed. - autocmd BufWipeout call s:CoffeeCompileClose() - " Save the cursor when leaving the output buffer. - autocmd BufLeave let b:coffee_compile_pos = getpos('.') - - " Run user-defined commands on new buffer. - silent doautocmd CoffeeBufNew User CoffeeCompile - - " Switch back to the source buffer and save the output bufnr. This also - " triggers BufLeave above. - call s:SwitchWindow(src) - let b:coffee_compile_buf = buf - endif - - " Fill the scratch buffer. - call s:CoffeeCompileToBuf(b:coffee_compile_buf, a:startline, a:endline) - " Reset cursor to previous position. - call setpos('.', b:coffee_compile_pos) - - " Run any user-defined commands on the scratch buffer. - silent doautocmd CoffeeBufUpdate User CoffeeCompile -endfunction - -" Update the scratch buffer and switch back to the source buffer. -function! s:CoffeeWatchUpdate() - call s:CoffeeCompileToBuf(b:coffee_watch_buf, 1, '$') - call setpos('.', b:coffee_watch_pos) - silent doautocmd CoffeeBufUpdate User CoffeeWatch - call s:SwitchWindow(b:coffee_src_buf) -endfunction - -" Continually compile a source buffer. -function! s:CoffeeWatch(args) - silent! call s:SwitchWindow(b:coffee_src_buf) - - if !exists('b:coffee_watch_buf') - return - endif - - if bufwinnr(b:coffee_watch_buf) == -1 - let src = bufnr('%') - - let vert = exists('g:coffee_watch_vert') || a:args =~ '\' - let size = str2nr(matchstr(a:args, '\<\d\+\>')) - - let buf = s:ScratchBufBuild(src, vert, size) - let b:coffee_src_buf = src - - exec 'silent! file [CoffeeWatch ' . src . ']' - - autocmd BufWipeout call s:CoffeeWatchClose() - autocmd BufLeave let b:coffee_watch_pos = getpos('.') - - silent doautocmd CoffeeBufNew User CoffeeWatch - - call s:SwitchWindow(src) - let b:coffee_watch_buf = buf - endif - - " Make sure only one watch autocmd is defined on this buffer. - silent! autocmd! CoffeeAuWatch * - - augroup CoffeeAuWatch - autocmd InsertLeave call s:CoffeeWatchUpdate() - autocmd BufWritePost call s:CoffeeWatchUpdate() - augroup END - - call s:CoffeeWatchUpdate() -endfunction - -" Run a snippet of CoffeeScript between startline and endline. -function! s:CoffeeRun(startline, endline, args) - silent! call s:SwitchWindow(b:coffee_src_buf) - - if !exists('b:coffee_run_buf') - return - endif - - if bufwinnr(b:coffee_run_buf) == -1 - let src = bufnr('%') - - let buf = s:ScratchBufBuild(src, exists('g:coffee_run_vert'), 0) - let b:coffee_src_buf = src - - exec 'silent! file [CoffeeRun ' . src . ']' - - autocmd BufWipeout call s:CoffeeRunClose() - autocmd BufLeave let b:coffee_run_pos = getpos('.') - - silent doautocmd CoffeeBufNew User CoffeeRun - - call s:SwitchWindow(src) - let b:coffee_run_buf = buf - endif - - if a:startline == 1 && a:endline == line('$') - let output = system(g:coffee_compiler . - \ ' ' . b:coffee_litcoffee . - \ ' ' . fnameescape(expand('%')) . - \ ' ' . a:args) - else - let input = join(getline(a:startline, a:endline), "\n") - - if !len(input) - return - endif - - let output = system(g:coffee_compiler . - \ ' -s' . - \ ' ' . b:coffee_litcoffee . - \ ' ' . a:args, input) - endif - - call s:ScratchBufUpdate(b:coffee_run_buf, output) - call setpos('.', b:coffee_run_pos) - - silent doautocmd CoffeeBufUpdate User CoffeeRun -endfunction - -" Run coffeelint on a file, and add any errors between startline and endline -" to the quickfix list. -function! s:CoffeeLint(startline, endline, bang, args) - let input = join(getline(a:startline, a:endline), "\n") - - if !len(input) - return - endif - - let output = system(g:coffee_linter . - \ ' -s --csv' . - \ ' ' . b:coffee_litcoffee . - \ ' ' . g:coffee_lint_options . - \ ' ' . a:args . - \ ' 2>&1', input) - - " Convert output into an array and strip off the csv header. - let lines = split(output, "\n")[1:] - let buf = bufnr('%') - let qflist = [] - - for line in lines - let match = matchlist(line, '^stdin,\(\d\+\),\d*,\(error\|warn\),\(.\+\)$') - - " Ignore unmatched lines. - if !len(match) - continue - endif - - " The 'type' will result in either 'E' or 'W'. - call add(qflist, {'bufnr': buf, 'lnum': a:startline + str2nr(match[1]) - 1, - \ 'type': toupper(match[2][0]), 'text': match[3]}) - endfor - - " Replace the quicklist with our items. - call setqflist(qflist, 'r') - - " If not given a bang, jump to first error. - if !len(a:bang) - silent! cc 1 - endif -endfunction - -" Complete arguments for Coffee* commands. -function! s:CoffeeComplete(cmd, cmdline, cursor) - let args = ['vertical'] - - " If no partial command, return all possibilities. - if !len(a:cmd) - return args - endif - - let pat = '^' . a:cmd - - for arg in args - if arg =~ pat - return [arg] - endif - endfor -endfunction - -" Set initial state variables if they don't exist -if !exists('b:coffee_compile_buf') - call s:CoffeeCompileResetVars() -endif - -if !exists('b:coffee_watch_buf') - call s:CoffeeWatchResetVars() -endif - -if !exists('b:coffee_run_buf') - call s:CoffeeRunResetVars() -endif - -command! -range=% -bar -nargs=* -complete=customlist,s:CoffeeComplete -\ CoffeeCompile call s:CoffeeCompile(, , ) -command! -bar -nargs=* -complete=customlist,s:CoffeeComplete -\ CoffeeWatch call s:CoffeeWatch() -command! -range=% -bar -nargs=* CoffeeRun -\ call s:CoffeeRun(, , ) -command! -range=% -bang -bar -nargs=* CoffeeLint -\ call s:CoffeeLint(, , , ) diff --git a/bundle/coffee-script/indent/coffee.vim b/bundle/coffee-script/indent/coffee.vim deleted file mode 100644 index 7bd82e3..0000000 --- a/bundle/coffee-script/indent/coffee.vim +++ /dev/null @@ -1,428 +0,0 @@ -" Language: CoffeeScript -" Maintainer: Mick Koch -" URL: http://github.com/kchmck/vim-coffee-script -" License: WTFPL - -if exists('b:did_indent') - finish -endif - -let b:did_indent = 1 - -setlocal autoindent -setlocal indentexpr=GetCoffeeIndent(v:lnum) -" Make sure GetCoffeeIndent is run when these are typed so they can be -" indented or outdented. -setlocal indentkeys+=0],0),0.,=else,=when,=catch,=finally - -" If no indenting or outdenting is needed, either keep the indent of the cursor -" (use autoindent) or match the indent of the previous line. -if exists('g:coffee_indent_keep_current') - let s:DEFAULT_LEVEL = '-1' -else - let s:DEFAULT_LEVEL = 'indent(prevnlnum)' -endif - -" Only define the function once. -if exists('*GetCoffeeIndent') - finish -endif - -" Keywords that begin a block -let s:BEGIN_BLOCK_KEYWORD = '\C^\%(if\|unless\|else\|for\|while\|until\|' -\ . 'loop\|switch\|when\|try\|catch\|finally\|' -\ . 'class\)\>\%(\s*:\)\@!' - -" An expression that uses the result of a statement -let s:COMPOUND_EXPRESSION = '\C\%([^-]-\|[^+]+\|[^/]/\|[:=*%&|^<>]\)\s*' -\ . '\%(if\|unless\|for\|while\|until\|loop\|switch\|' -\ . 'try\|class\)\>' - -" Combine the two above -let s:BEGIN_BLOCK = s:BEGIN_BLOCK_KEYWORD . '\|' . s:COMPOUND_EXPRESSION - -" Operators that begin a block but also count as a continuation -let s:BEGIN_BLOCK_OP = '[([{:=]$' - -" Begins a function block -let s:FUNCTION = '[-=]>$' - -" Operators that continue a line onto the next line -let s:CONTINUATION_OP = '\C\%(\<\%(is\|isnt\|and\|or\)\>\|' -\ . '[^-]-\|[^+]+\|[^-=]>\|[^.]\.\|[<*/%&|^,]\)$' - -" Ancestor operators that prevent continuation indenting -let s:CONTINUATION = s:CONTINUATION_OP . '\|' . s:BEGIN_BLOCK_OP - -" A closing bracket by itself on a line followed by a continuation -let s:BRACKET_CONTINUATION = '^\s*[}\])]\s*' . s:CONTINUATION_OP - -" A continuation dot access -let s:DOT_ACCESS = '^\.' - -" Keywords that break out of a block -let s:BREAK_BLOCK_OP = '\C^\%(return\|break\|continue\|throw\)\>' - -" A condition attached to the end of a statement -let s:POSTFIX_CONDITION = '\C\S\s\+\zs\<\%(if\|unless\|when\|while\|until\)\>' - -" A then contained in brackets -let s:CONTAINED_THEN = '\C[(\[].\{-}\.\{-\}[)\]]' - -" An else with a condition attached -let s:ELSE_COND = '\C^\s*else\s\+\<\%(if\|unless\)\>' - -" A single-line else statement (without a condition attached) -let s:SINGLE_LINE_ELSE = '\C^else\s\+\%(\<\%(if\|unless\)\>\)\@!' - -" Pairs of starting and ending keywords, with an initial pattern to match -let s:KEYWORD_PAIRS = [ -\ ['\C^else\>', '\C\<\%(if\|unless\|when\|else\s\+\%(if\|unless\)\)\>', -\ '\C\'], -\ ['\C^catch\>', '\C\', '\C\'], -\ ['\C^finally\>', '\C\', '\C\'] -\] - -" Pairs of starting and ending brackets -let s:BRACKET_PAIRS = {']': '\[', '}': '{', ')': '('} - -" Max lines to look back for a match -let s:MAX_LOOKBACK = 50 - -" Syntax names for strings -let s:SYNTAX_STRING = 'coffee\%(String\|AssignString\|Embed\|Regex\|Heregex\|' -\ . 'Heredoc\)' - -" Syntax names for comments -let s:SYNTAX_COMMENT = 'coffee\%(Comment\|BlockComment\|HeregexComment\)' - -" Syntax names for strings and comments -let s:SYNTAX_STRING_COMMENT = s:SYNTAX_STRING . '\|' . s:SYNTAX_COMMENT - -" Compatibility code for shiftwidth() as recommended by the docs, but modified -" so there isn't as much of a penalty if shiftwidth() exists. -if exists('*shiftwidth') - let s:ShiftWidth = function('shiftwidth') -else - function! s:ShiftWidth() - return &shiftwidth - endfunction -endif - -" Get the linked syntax name of a character. -function! s:SyntaxName(lnum, col) - return synIDattr(synID(a:lnum, a:col, 1), 'name') -endfunction - -" Check if a character is in a comment. -function! s:IsComment(lnum, col) - return s:SyntaxName(a:lnum, a:col) =~ s:SYNTAX_COMMENT -endfunction - -" Check if a character is in a string. -function! s:IsString(lnum, col) - return s:SyntaxName(a:lnum, a:col) =~ s:SYNTAX_STRING -endfunction - -" Check if a character is in a comment or string. -function! s:IsCommentOrString(lnum, col) - return s:SyntaxName(a:lnum, a:col) =~ s:SYNTAX_STRING_COMMENT -endfunction - -" Search a line for a regex until one is found outside a string or comment. -function! s:SearchCode(lnum, regex) - " Start at the first column and look for an initial match (including at the - " cursor.) - call cursor(a:lnum, 1) - let pos = search(a:regex, 'c', a:lnum) - - while pos - if !s:IsCommentOrString(a:lnum, col('.')) - return 1 - endif - - " Move to the match and continue searching (don't accept matches at the - " cursor.) - let pos = search(a:regex, '', a:lnum) - endwhile - - return 0 -endfunction - -" Search for the nearest previous line that isn't a comment. -function! s:GetPrevNormalLine(startlnum) - let curlnum = a:startlnum - - while curlnum - let curlnum = prevnonblank(curlnum - 1) - - " Return the line if the first non-whitespace character isn't a comment. - if !s:IsComment(curlnum, indent(curlnum) + 1) - return curlnum - endif - endwhile - - return 0 -endfunction - -function! s:SearchPair(startlnum, lookback, skip, open, close) - " Go to the first column so a:close will be matched even if it's at the - " beginning of the line. - call cursor(a:startlnum, 1) - return searchpair(a:open, '', a:close, 'bnW', a:skip, max([1, a:lookback])) -endfunction - -" Skip if a match -" - is in a string or comment -" - is a single-line statement that isn't immediately -" adjacent -" - has a postfix condition and isn't an else statement or compound -" expression -function! s:ShouldSkip(startlnum, lnum, col) - return s:IsCommentOrString(a:lnum, a:col) || - \ s:SearchCode(a:lnum, '\C\') && a:startlnum - a:lnum > 1 || - \ s:SearchCode(a:lnum, s:POSTFIX_CONDITION) && - \ getline(a:lnum) !~ s:ELSE_COND && - \ !s:SearchCode(a:lnum, s:COMPOUND_EXPRESSION) -endfunction - -" Search for the nearest and farthest match for a keyword pair. -function! s:SearchMatchingKeyword(startlnum, open, close) - let skip = 's:ShouldSkip(' . a:startlnum . ", line('.'), line('.'))" - - " Search for the nearest match. - let nearestlnum = s:SearchPair(a:startlnum, a:startlnum - s:MAX_LOOKBACK, - \ skip, a:open, a:close) - - if !nearestlnum - return [] - endif - - " Find the nearest previous line with indent less than or equal to startlnum. - let ind = indent(a:startlnum) - let lookback = s:GetPrevNormalLine(a:startlnum) - - while lookback && indent(lookback) > ind - let lookback = s:GetPrevNormalLine(lookback) - endwhile - - " Search for the farthest match. If there are no other matches, then the - " nearest match is also the farthest one. - let matchlnum = nearestlnum - - while matchlnum - let lnum = matchlnum - let matchlnum = s:SearchPair(matchlnum, lookback, skip, a:open, a:close) - endwhile - - return [nearestlnum, lnum] -endfunction - -" Strip a line of a trailing comment and surrounding whitespace. -function! s:GetTrimmedLine(lnum) - " Try to find a comment starting at the first column. - call cursor(a:lnum, 1) - let pos = search('#', 'c', a:lnum) - - " Keep searching until a comment is found or search returns 0. - while pos - if s:IsComment(a:lnum, col('.')) - break - endif - - let pos = search('#', '', a:lnum) - endwhile - - if !pos - " No comment was found so use the whole line. - let line = getline(a:lnum) - else - " Subtract 1 to get to the column before the comment and another 1 for - " column indexing -> zero-based indexing. - let line = getline(a:lnum)[:col('.') - 2] - endif - - return substitute(substitute(line, '^\s\+', '', ''), - \ '\s\+$', '', '') -endfunction - -" Get the indent policy when no special rules are used. -function! s:GetDefaultPolicy(curlnum) - " Check whether equalprg is being ran on existing lines. - if strlen(getline(a:curlnum)) == indent(a:curlnum) - " If not indenting an existing line, use the default policy. - return s:DEFAULT_LEVEL - else - " Otherwise let autoindent determine what to do with an existing line. - return '-1' - endif -endfunction - -function! GetCoffeeIndent(curlnum) - " Get the previous non-blank line (may be a comment.) - let prevlnum = prevnonblank(a:curlnum - 1) - - " Bail if there's no code before. - if !prevlnum - return -1 - endif - - " Bail if inside a multiline string. - if s:IsString(a:curlnum, 1) - let prevnlnum = prevlnum - exec 'return' s:GetDefaultPolicy(a:curlnum) - endif - - " Get the code part of the current line. - let curline = s:GetTrimmedLine(a:curlnum) - " Get the previous non-comment line. - let prevnlnum = s:GetPrevNormalLine(a:curlnum) - - " Check if the current line is the closing bracket in a bracket pair. - if has_key(s:BRACKET_PAIRS, curline[0]) - " Search for a matching opening bracket. - let matchlnum = s:SearchPair(a:curlnum, a:curlnum - s:MAX_LOOKBACK, - \ "s:IsCommentOrString(line('.'), col('.'))", - \ s:BRACKET_PAIRS[curline[0]], curline[0]) - - if matchlnum - " Match the indent of the opening bracket. - return indent(matchlnum) - else - " No opening bracket found (bad syntax), so bail. - exec 'return' s:GetDefaultPolicy(a:curlnum) - endif - endif - - " Check if the current line is the closing keyword in a keyword pair. - for pair in s:KEYWORD_PAIRS - if curline =~ pair[0] - " Find the nearest and farthest matches within the same indent level. - let matches = s:SearchMatchingKeyword(a:curlnum, pair[1], pair[2]) - - if len(matches) - " Don't force indenting/outdenting as long as line is already lined up - " with a valid match - return max([min([indent(a:curlnum), indent(matches[0])]), - \ indent(matches[1])]) - else - " No starting keyword found (bad syntax), so bail. - exec 'return' s:GetDefaultPolicy(a:curlnum) - endif - endif - endfor - - " Check if the current line is a `when` and not the first in a switch block. - if curline =~ '\C^when\>' && !s:SearchCode(prevnlnum, '\C\') - " Look back for a `when`. - while prevnlnum - if getline(prevnlnum) =~ '\C^\s*when\>' - " Indent to match the found `when`, but don't force indenting (for when - " indenting nested switch blocks.) - return min([indent(a:curlnum), indent(prevnlnum)]) - endif - - let prevnlnum = s:GetPrevNormalLine(prevnlnum) - endwhile - - " No matching `when` found (bad syntax), so bail. - exec 'return' s:GetDefaultPolicy(a:curlnum) - endif - - " If the previous line is a comment, use its indentation, but don't force - " indenting. - if prevlnum != prevnlnum - return min([indent(a:curlnum), indent(prevlnum)]) - endif - - let prevline = s:GetTrimmedLine(prevnlnum) - - " Always indent after these operators. - if prevline =~ s:BEGIN_BLOCK_OP - return indent(prevnlnum) + s:ShiftWidth() - endif - - " Indent if the previous line starts a function block, but don't force - " indenting if the line is non-blank (for empty function bodies.) - if prevline =~ s:FUNCTION - if strlen(getline(a:curlnum)) > indent(a:curlnum) - return min([indent(prevnlnum) + s:ShiftWidth(), indent(a:curlnum)]) - else - return indent(prevnlnum) + s:ShiftWidth() - endif - endif - - " Check if continuation indenting is needed. If the line ends in a slash, make - " sure it isn't a regex. - if prevline =~ s:CONTINUATION_OP && - \ !(prevline =~ '/$' && s:IsString(prevnlnum, col([prevnlnum, '$']) - 1)) - " Don't indent if the continuation follows a closing bracket. - if prevline =~ s:BRACKET_CONTINUATION - exec 'return' s:GetDefaultPolicy(a:curlnum) - endif - - let prevprevnlnum = s:GetPrevNormalLine(prevnlnum) - - " Don't indent if not the first continuation. - if prevprevnlnum && s:GetTrimmedLine(prevprevnlnum) =~ s:CONTINUATION - exec 'return' s:GetDefaultPolicy(a:curlnum) - endif - - " Continuation indenting seems to vary between programmers, so if the line - " is non-blank, don't override the indentation - if strlen(getline(a:curlnum)) > indent(a:curlnum) - exec 'return' s:GetDefaultPolicy(a:curlnum) - endif - - " Otherwise indent a level. - return indent(prevnlnum) + s:ShiftWidth() - endif - - " Check if the previous line starts with a keyword that begins a block. - if prevline =~ s:BEGIN_BLOCK - " Indent if the current line doesn't start with `then` and the previous line - " isn't a single-line statement. - if curline !~ '\C^\' && !s:SearchCode(prevnlnum, '\C\') && - \ prevline !~ s:SINGLE_LINE_ELSE - return indent(prevnlnum) + s:ShiftWidth() - else - exec 'return' s:GetDefaultPolicy(a:curlnum) - endif - endif - - " Indent a dot access if it's the first. - if curline =~ s:DOT_ACCESS - if prevline !~ s:DOT_ACCESS - return indent(prevnlnum) + s:ShiftWidth() - else - exec 'return' s:GetDefaultPolicy(a:curlnum) - endif - endif - - " Outdent if a keyword breaks out of a block as long as it doesn't have a - " postfix condition (and the postfix condition isn't a single-line statement.) - if prevline =~ s:BREAK_BLOCK_OP - if !s:SearchCode(prevnlnum, s:POSTFIX_CONDITION) || - \ s:SearchCode(prevnlnum, '\C\') && - \ !s:SearchCode(prevnlnum, s:CONTAINED_THEN) - " Don't force indenting. - return min([indent(a:curlnum), indent(prevnlnum) - s:ShiftWidth()]) - else - exec 'return' s:GetDefaultPolicy(a:curlnum) - endif - endif - - " Check if inside brackets. - let matchlnum = s:SearchPair(a:curlnum, a:curlnum - s:MAX_LOOKBACK, - \ "s:IsCommentOrString(line('.'), col('.'))", - \ '\[\|(\|{', '\]\|)\|}') - - " If inside brackets, indent relative to the brackets, but don't outdent an - " already indented line. - if matchlnum - return max([indent(a:curlnum), indent(matchlnum) + s:ShiftWidth()]) - endif - - " No special rules applied, so use the default policy. - exec 'return' s:GetDefaultPolicy(a:curlnum) -endfunction diff --git a/bundle/coffee-script/syntax/coffee.vim b/bundle/coffee-script/syntax/coffee.vim deleted file mode 100755 index eea5084..0000000 --- a/bundle/coffee-script/syntax/coffee.vim +++ /dev/null @@ -1,223 +0,0 @@ -" Language: CoffeeScript -" Maintainer: Mick Koch -" URL: http://github.com/kchmck/vim-coffee-script -" License: WTFPL - -" Bail if our syntax is already loaded. -if exists('b:current_syntax') && b:current_syntax == 'coffee' - finish -endif - -" Include JavaScript for coffeeEmbed. -syn include @coffeeJS syntax/javascript.vim -silent! unlet b:current_syntax - -" Highlight long strings. -syntax sync fromstart - -" CoffeeScript identifiers can have dollar signs. -setlocal isident+=$ - -" These are `matches` instead of `keywords` because vim's highlighting -" priority for keywords is higher than matches. This causes keywords to be -" highlighted inside matches, even if a match says it shouldn't contain them -- -" like with coffeeAssign and coffeeDot. -syn match coffeeStatement /\<\%(return\|break\|continue\|throw\)\>/ display -hi def link coffeeStatement Statement - -syn match coffeeRepeat /\<\%(for\|while\|until\|loop\)\>/ display -hi def link coffeeRepeat Repeat - -syn match coffeeConditional /\<\%(if\|else\|unless\|switch\|when\|then\)\>/ -\ display -hi def link coffeeConditional Conditional - -syn match coffeeException /\<\%(try\|catch\|finally\)\>/ display -hi def link coffeeException Exception - -syn match coffeeKeyword /\<\%(new\|in\|of\|by\|and\|or\|not\|is\|isnt\|class\|extends\|super\|do\)\>/ -\ display -" The `own` keyword is only a keyword after `for`. -syn match coffeeKeyword /\/ contained containedin=coffeeRepeat -\ display -hi def link coffeeKeyword Keyword - -syn match coffeeOperator /\<\%(instanceof\|typeof\|delete\)\>/ display -hi def link coffeeOperator Operator - -" The first case matches symbol operators only if they have an operand before. -syn match coffeeExtendedOp /\%(\S\s*\)\@<=[+\-*/%&|\^=!<>?.]\{-1,}\|[-=]>\|--\|++\|:/ -\ display -syn match coffeeExtendedOp /\<\%(and\|or\)=/ display -hi def link coffeeExtendedOp coffeeOperator - -" This is separate from `coffeeExtendedOp` to help differentiate commas from -" dots. -syn match coffeeSpecialOp /[,;]/ display -hi def link coffeeSpecialOp SpecialChar - -syn match coffeeBoolean /\<\%(true\|on\|yes\|false\|off\|no\)\>/ display -hi def link coffeeBoolean Boolean - -syn match coffeeGlobal /\<\%(null\|undefined\)\>/ display -hi def link coffeeGlobal Type - -" A special variable -syn match coffeeSpecialVar /\<\%(this\|prototype\|arguments\)\>/ display -hi def link coffeeSpecialVar Special - -" An @-variable -syn match coffeeSpecialIdent /@\%(\I\i*\)\?/ display -hi def link coffeeSpecialIdent Identifier - -" A class-like name that starts with a capital letter -syn match coffeeObject /\<\u\w*\>/ display -hi def link coffeeObject Structure - -" A constant-like name in SCREAMING_CAPS -syn match coffeeConstant /\<\u[A-Z0-9_]\+\>/ display -hi def link coffeeConstant Constant - -" A variable name -syn cluster coffeeIdentifier contains=coffeeSpecialVar,coffeeSpecialIdent, -\ coffeeObject,coffeeConstant - -" A non-interpolated string -syn cluster coffeeBasicString contains=@Spell,coffeeEscape -" An interpolated string -syn cluster coffeeInterpString contains=@coffeeBasicString,coffeeInterp - -" Regular strings -syn region coffeeString start=/"/ skip=/\\\\\|\\"/ end=/"/ -\ contains=@coffeeInterpString -syn region coffeeString start=/'/ skip=/\\\\\|\\'/ end=/'/ -\ contains=@coffeeBasicString -hi def link coffeeString String - -" A integer, including a leading plus or minus -syn match coffeeNumber /\i\@/ display -syn match coffeeNumber /\<0[bB][01]\+\>/ display -syn match coffeeNumber /\<0[oO][0-7]\+\>/ display -hi def link coffeeNumber Number - -" A floating-point number, including a leading plus or minus -syn match coffeeFloat /\i\@/ -\ display -hi def link coffeeReservedError Error - -" A normal object assignment -syn match coffeeObjAssign /@\?\I\i*\s*\ze::\@!/ contains=@coffeeIdentifier display -hi def link coffeeObjAssign Identifier - -syn keyword coffeeTodo TODO FIXME XXX contained -hi def link coffeeTodo Todo - -syn match coffeeComment /#.*/ contains=@Spell,coffeeTodo -hi def link coffeeComment Comment - -syn region coffeeBlockComment start=/####\@!/ end=/###/ -\ contains=@Spell,coffeeTodo -hi def link coffeeBlockComment coffeeComment - -" A comment in a heregex -syn region coffeeHeregexComment start=/#/ end=/\ze\/\/\/\|$/ contained -\ contains=@Spell,coffeeTodo -hi def link coffeeHeregexComment coffeeComment - -" Embedded JavaScript -syn region coffeeEmbed matchgroup=coffeeEmbedDelim -\ start=/`/ skip=/\\\\\|\\`/ end=/`/ keepend -\ contains=@coffeeJS -hi def link coffeeEmbedDelim Delimiter - -syn region coffeeInterp matchgroup=coffeeInterpDelim start=/#{/ end=/}/ contained -\ contains=@coffeeAll -hi def link coffeeInterpDelim PreProc - -" A string escape sequence -syn match coffeeEscape /\\\d\d\d\|\\x\x\{2\}\|\\u\x\{4\}\|\\./ contained display -hi def link coffeeEscape SpecialChar - -" A regex -- must not follow a parenthesis, number, or identifier, and must not -" be followed by a number -syn region coffeeRegex start=#\%(\%()\|\i\@> #{ == { { { } } } == } << " -" >> #{ == { abc: { def: 42 } } == } << " diff --git a/bundle/coffee-script/test/test-ops.coffee b/bundle/coffee-script/test/test-ops.coffee deleted file mode 100644 index 54be8db..0000000 --- a/bundle/coffee-script/test/test-ops.coffee +++ /dev/null @@ -1,90 +0,0 @@ -# Various operators -abc instanceof def -typeof abc -delete abc -abc::def - -abc + def -abc - def -abc * def -abc / def -abc % def -abc & def -abc | def -abc ^ def -abc >> def -abc << def -abc >>> def -abc ? def -abc && def -abc and def -abc || def -abc or def - -abc += def -abc -= def -abc *= def -abc /= def -abc %= def -abc &= def -abc |= def -abc ^= def -abc >>= def -abc <<= def -abc >>>= def -abc ?= def -abc &&= def -abc ||= def - -abc and= def -abc or= def - -abc.def.ghi -abc?.def?.ghi - -abc < def -abc > def -abc = def -abc == def -abc != def -abc <= def -abc >= def - -abc++ -abc-- -++abc ---abc - -# Nested operators -abc[def] = ghi -abc[def[ghi: jkl]] = 42 -@abc[def] = ghi - -abc["#{def = 42}"] = 42 -abc["#{def.ghi = 42}"] = 42 -abc["#{def[ghi] = 42}"] = 42 -abc["#{def['ghi']}"] = 42 - -# Object assignments -abc = - def: 123 - DEF: 123 - @def: 123 - Def: 123 - 'def': 123 - 42: 123 - -# Operators shouldn't be highlighted -vector= -wand= - -abc+++ -abc--- -abc ** def -abc &&& def -abc ^^ def -abc ===== def -abc <==== def -abc >==== def -abc +== def -abc =^= def diff --git a/bundle/coffee-script/test/test-reserved.coffee b/bundle/coffee-script/test/test-reserved.coffee deleted file mode 100644 index b841760..0000000 --- a/bundle/coffee-script/test/test-reserved.coffee +++ /dev/null @@ -1,27 +0,0 @@ -# Should be an error -function = 42 -var = 42 - -# Shouldn't be an error -abc.with = 42 -function: 42 -var: 42 - -# Keywords shouldn't be highlighted -abc.function -abc.do -abc.break -abc.true - -abc::function -abc::do -abc::break -abc::true - -abc:: function -abc. function - -# Numbers should be highlighted -def.42 -def .42 -def::42 diff --git a/bundle/coffee-script/test/test.haml b/bundle/coffee-script/test/test.haml deleted file mode 100644 index ae19fba..0000000 --- a/bundle/coffee-script/test/test.haml +++ /dev/null @@ -1,3 +0,0 @@ -:coffeescript - class Hello - # test diff --git a/bundle/coffee-script/test/test.html b/bundle/coffee-script/test/test.html deleted file mode 100644 index 3479145..0000000 --- a/bundle/coffee-script/test/test.html +++ /dev/null @@ -1,7 +0,0 @@ - - - diff --git a/bundle/colorscheme-switcher/INSTALL.md b/bundle/colorscheme-switcher/INSTALL.md deleted file mode 100755 index c46440e..0000000 --- a/bundle/colorscheme-switcher/INSTALL.md +++ /dev/null @@ -1,15 +0,0 @@ -# Installation instructions - -*Please note that the vim-colorscheme-switcher plug-in requires my vim-misc plug-in which is separately distributed.* - -There are two ways to install the vim-colorscheme-switcher plug-in and it's up to you which you prefer, both options are explained below. Please note that below are generic installation instructions while some Vim plug-ins may have external dependencies, please refer to the plug-in's [readme](README.md) for details. - -## Installation using ZIP archives - -Unzip the most recent ZIP archives of the [vim-colorscheme-switcher](http://peterodding.com/code/vim/downloads/colorscheme-switcher.zip) and [vim-misc](http://peterodding.com/code/vim/downloads/misc.zip) plug-ins inside your Vim profile directory (usually this is `~/.vim` on UNIX and `%USERPROFILE%\vimfiles` on Windows), restart Vim and execute the command `:helptags ~/.vim/doc` (use `:helptags ~\vimfiles\doc` instead on Windows). - -If you get warnings about overwriting existing files while unpacking the ZIP archives you probably don't need to worry about this because it's most likely caused by files like `README.md`, `INSTALL.md` and `addon-info.json`. If these files bother you then you can remove them after unpacking the ZIP archives, they are not required to use the plug-in. - -## Installation using a Vim plug-in manager - -If you prefer you can also use [Pathogen](http://www.vim.org/scripts/script.php?script_id=2332), [Vundle](https://github.com/gmarik/vundle) or a similar tool to install and update the [vim-colorscheme-switcher](https://github.com/xolox/vim-colorscheme-switcher) and [vim-misc](https://github.com/xolox/vim-misc) plug-ins using local clones of the git repositories. This takes a bit of work to set up the first time but it makes updating much easier, and it keeps each plug-in in its own directory which helps to keep your Vim profile uncluttered. diff --git a/bundle/colorscheme-switcher/README.md b/bundle/colorscheme-switcher/README.md deleted file mode 100755 index f448225..0000000 --- a/bundle/colorscheme-switcher/README.md +++ /dev/null @@ -1,96 +0,0 @@ -# Color scheme switcher for Vim - -The colorscheme switcher plug-in for the [Vim text editor] [vim] makes it easy to quickly switch between [colorschemes] [cs]. It defines commands and mappings to switch to the next and previous color schemes. - -## Installation - -Please refer to the [installation instructions] [howto-install] available on GitHub. Once you've installed the plug-in you can try it out by executing `:NextColorScheme` to switch to the next color scheme. - -If you didn't change the plug-in's configuration you can use the `F8` and `Shift-F8` keys to switch to the next/previous color scheme and `Control-F8` to switch to a random color scheme. - -## Commands - -### The `:NextColorScheme` command - -Switch to the next color scheme. After the last color scheme the cycle repeats from the first color scheme. - -### The `:PrevColorScheme` command - -Switch to the previous color scheme. After the first color scheme the cycle repeats from the last color scheme. - -### The `:RandomColorScheme` command - -Switch to a random color scheme. Because Vim doesn't actually expose random numbers the microseconds of the current time are used to improvise a source of randomness. It's nothing like real randomness but convincing enough for this plug-in :-). - -## Options - -The colorscheme switcher plug-in should work out of the box, but you can change the configuration defaults if you want to change how the plug-in works. - -### The `g:colorscheme_switcher_define_mappings` option - -By default the plug-in maps the following keys in insert and normal mode: - -- `F8` switches to the next color scheme -- `Shift-F8` switches to the previous color scheme - -To disable these mappings (e.g. because you're already using them for a different purpose) you can set the option `g:colorscheme_switcher_define_mappings` to 0 (false) in your [vimrc script] [vimrc]. - -### The `g:colorscheme_switcher_keep_background` option - -If you set this variable to 1 (true) and cycle to the next/previous color scheme, the plug-in will skip color schemes with a different ['background'] [bg]. By default this is set to 0 (false). - -This is useful when you want to see only light or dark color schemes, for example because the sun is shining (you'll want a light background) or because it's late at night (then you'll likely prefer a dark background). - -### The `g:colorscheme_switcher_exclude` option - -A list with names of color schemes to be ignored by the plug-in. By default the list is empty. Here's an example of how you can set this: - - :let g:colorscheme_switcher_exclude = ['default', 'test'] - -### The `g:colorscheme_switcher_exclude_builtins` option - -If you set this variable to 1 (true) the color schemes bundled with Vim (installed in `$VIMRUNTIME`) are ignored and instead only the color schemes that you specifically installed in your Vim profile are used. - -### The `g:colorscheme_switcher_command` option - -This option is a string specifying the Vim command used to switch between color schemes. It defaults to the [:colorscheme] [cs] command. You can set this option to integrate the vim-colorscheme-switcher plug-in with other plug-ins like [colorsupport.vim](https://github.com/vim-scripts/colorsupport.vim) and [guicolorscheme.vim](https://github.com/vim-scripts/guicolorscheme.vim). - -## See also - -The [vim-colorscheme-manager](https://github.com/Taverius/vim-colorscheme-manager) plug-in is an add-on for vim-colorscheme-switcher that adds features like more convenient blacklist management and automatic loading of the last used color scheme when Vim starts up or a session is loaded. - -## Known problems - -The way Vim color schemes are written isn't really compatible with the idea of quickly switching between lots of color schemes. In my opinion this is an ugly implementation detail of how Vim works internally, in other words I think it's a bug that should be fixed... Here are some references that explain the problem in some detail: - -- [Vim colorscheme leaves a wake of destruction when switching away](https://github.com/altercation/solarized/issues/102) -- [gVim: remove syntax highlighting groups](http://stackoverflow.com/questions/12915797/gvim-remove-syntax-highlighting-groups) - -Since this behavior hinders cycling through color schemes, the colorscheme switcher plug-in includes a workaround that should hide the problem: - -1. At startup a dictionary is created which will be used to remember links between highlighting groups; -2. Before and after loading a color scheme, the colorscheme switcher plug-in runs the [:highlight] [hi] command without any arguments to find links between highlighting groups. Each link that is found is added to the dictionary. Existing entries are updated. This is done by calling `xolox#colorscheme_switcher#find_links()`. -3. After loading a color scheme, the colorscheme switcher plug-in runs the [:highlight] [hi] command without any arguments to find highlighting groups in the state 'cleared'. For each of these groups, if they were previously linked, the link is restored. This is done by calling `xolox#colorscheme_switcher#restore_links()`. - -Probably this solution is still not perfect, but it's a lot better than the behavior out of the box: Before I implemented the steps above, when I would cycle through my color schemes, Vim would eventually end up with black text on a white background and nothing else! With the steps above, I can cycle as many times as I want and all of the color schemes I've checked so far look fine. - -## Contact - -If you have questions, bug reports, suggestions, etc. the author can be contacted at . The latest version is available at and . If you like this plug-in please vote for it on [Vim Online] [vim_online]. - -## License - -This software is licensed under the [MIT license] [mit]. -© 2015 Peter Odding <>. - - -[bg]: http://vimdoc.sourceforge.net/htmldoc/options.html#'background' -[cs]: http://vimdoc.sourceforge.net/htmldoc/syntax.html#:colorscheme -[dcs]: http://peterodding.com/code/vim/downloads/colorscheme-switcher.zip -[dms]: http://peterodding.com/code/vim/downloads/misc.zip -[hi]: http://vimdoc.sourceforge.net/htmldoc/syntax.html#:highlight -[howto-install]: https://github.com/xolox/vim-colorscheme-switcher/blob/master/INSTALL.md -[mit]: http://en.wikipedia.org/wiki/MIT_License -[vim]: http://www.vim.org/ -[vim_online]: http://www.vim.org/scripts/script.php?script_id=4586 -[vimrc]: http://vimdoc.sourceforge.net/htmldoc/starting.html#vimrc diff --git a/bundle/colorscheme-switcher/addon-info.json b/bundle/colorscheme-switcher/addon-info.json deleted file mode 100755 index 5cbe240..0000000 --- a/bundle/colorscheme-switcher/addon-info.json +++ /dev/null @@ -1 +0,0 @@ -{"vim_script_nr": 4586, "dependencies": {"vim-misc": {}}, "homepage": "http://peterodding.com/code/vim/colorscheme-switcher", "name": "vim-colorscheme-switcher"} \ No newline at end of file diff --git a/bundle/colorscheme-switcher/autoload/xolox/colorscheme_switcher.vim b/bundle/colorscheme-switcher/autoload/xolox/colorscheme_switcher.vim deleted file mode 100755 index add53aa..0000000 --- a/bundle/colorscheme-switcher/autoload/xolox/colorscheme_switcher.vim +++ /dev/null @@ -1,157 +0,0 @@ -" Vim plug-in -" Maintainer: Peter Odding -" Last Change: April 1, 2015 -" URL: http://peterodding.com/code/vim/colorscheme-switcher - -let g:xolox#colorscheme_switcher#version = '0.5.1' - -" Dictionary with previously seen links between highlighting groups. -if !exists('s:known_links') - let s:known_links = {} -endif - -function! xolox#colorscheme_switcher#next() " {{{1 - " Switch to the next color scheme. - return xolox#colorscheme_switcher#cycle(1) -endfunction - -function! xolox#colorscheme_switcher#previous() " {{{1 - " Switch to the previous color scheme. - return xolox#colorscheme_switcher#cycle(0) -endfunction - -function! xolox#colorscheme_switcher#random() " {{{1 - " Switch to a random color scheme. - let choices = xolox#colorscheme_switcher#find_names() - if exists('g:colors_name') - call filter(choices, 'v:val != g:colors_name') - endif - let original_background = &background - for i in range(len(choices)) - let index = xolox#colorscheme_switcher#random_number(len(choices)) - call xolox#colorscheme_switcher#switch_to(choices[index]) - if !xolox#misc#option#get('colorscheme_switcher_keep_background', 0) || &background == original_background - call xolox#misc#msg#info('colorscheme-switcher.vim %s: Loaded random color scheme (%s)', g:xolox#colorscheme_switcher#version, choices[index]) - return - endif - endfor - call xolox#misc#msg#debug('colorscheme-switcher.vim %s: Ran out of color schemes!', g:xolox#colorscheme_switcher#version) -endfunction - -function! xolox#colorscheme_switcher#cycle(forward) " {{{1 - " Switch to the next or previous color scheme. - let choices = xolox#colorscheme_switcher#find_names() - let index = exists('g:colors_name') ? index(choices, g:colors_name) : 0 - let original_background = &background - for i in range(len(choices)) - if a:forward - let index = (index + 1) % len(choices) - else - let index = (index ? index : len(choices)) - 1 - endif - call xolox#colorscheme_switcher#switch_to(choices[index]) - if !xolox#misc#option#get('colorscheme_switcher_keep_background', 0) || &background == original_background - call xolox#misc#msg#info('colorscheme-switcher.vim %s: Loaded color scheme %s (%i/%i)', g:xolox#colorscheme_switcher#version, choices[index], index, len(choices)) - return - endif - endfor - call xolox#misc#msg#debug('colorscheme-switcher.vim %s: Ran out of color schemes!', g:xolox#colorscheme_switcher#version) -endfunction - -function! xolox#colorscheme_switcher#find_names() " {{{1 - " Get a sorted list with the available color schemes. - let matches = {} - let exclude_list = xolox#misc#option#get('colorscheme_switcher_exclude', []) - let exclude_builtins = xolox#misc#option#get('colorscheme_switcher_exclude_builtins', 0) - for fname in split(globpath(&runtimepath, 'colors/*.vim'), '\n') - let name = fnamemodify(fname, ':t:r') - " Ignore names in the exclude list. - if index(exclude_list, name) == -1 - " Ignore color schemes bundled with Vim? - if !(exclude_builtins && xolox#misc#path#starts_with(fname, $VIMRUNTIME)) - let matches[name] = 1 - endif - endif - endfor - return sort(keys(matches), 1) -endfunction - -function! xolox#colorscheme_switcher#find_links() " {{{1 - " Find and remember links between highlighting groups. - call xolox#misc#msg#debug('colorscheme-switcher.vim %s: Using :highlight command to discover links between highlighting groups ..', g:xolox#colorscheme_switcher#version) - redir => listing - try - silent highlight - finally - redir END - endtry - for line in split(listing, "\n") - let tokens = split(line) - " We're looking for lines like "String xxx links to Constant" in the - " output of the :highlight command. - if len(tokens) == 5 && tokens[1] == 'xxx' && tokens[2] == 'links' && tokens[3] == 'to' - let fromgroup = tokens[0] - let togroup = tokens[4] - let s:known_links[fromgroup] = togroup - endif - endfor - call xolox#misc#msg#debug('colorscheme-switcher.vim %s: Found %i links between highlighting groups in output of :highlight command.', g:xolox#colorscheme_switcher#version, len(s:known_links)) -endfunction - -function! xolox#colorscheme_switcher#restore_links() " {{{1 - " Restore broken links between highlighting groups. - redir => listing - try - silent highlight - finally - redir END - endtry - let num_restored = 0 - for line in split(listing, "\n") - let tokens = split(line) - " We're looking for lines like "String xxx cleared" in the - " output of the :highlight command. - if len(tokens) == 3 && tokens[1] == 'xxx' && tokens[2] == 'cleared' - let fromgroup = tokens[0] - let togroup = get(s:known_links, fromgroup, '') - if !empty(togroup) - execute 'hi link' fromgroup togroup - let num_restored += 1 - endif - endif - endfor - call xolox#misc#msg#debug('colorscheme-switcher.vim %s: Restored %i links between highlighting groups.', g:xolox#colorscheme_switcher#version, num_restored) -endfunction - -function! xolox#colorscheme_switcher#switch_to(name) " {{{1 - " Switch to the given color scheme. - call xolox#colorscheme_switcher#find_links() - let command = xolox#misc#option#get('colorscheme_switcher_command', 'colorscheme') - execute command fnameescape(a:name) - " Set the global colors_name variable because some color scheme scripts fail - " to do so or use the wrong name (for example rainbow_autumn uses autumn). - let g:colors_name = a:name - " Enable the user to customize the loaded color scheme. - silent execute 'doautocmd ColorScheme' fnameescape(a:name) - " Restore syntax group links as the last step to make sure the syntax group - " links are not clobbered by user defined automatic commands. - call xolox#colorscheme_switcher#restore_links() - " It looks like terminal Vim has some peculiarities of its own and the - " following workaround may improve its behavior. Because I don't yet - " understand exactly how or why this works, I've decided to add the - " workaround but only apply it when it seems to be relevant (in - " terminal Vim). For details refer to issue #6 on GitHub: - " https://github.com/xolox/vim-colorscheme-switcher/issues/6 - if !has('gui_running') - let &syntax = &syntax - endif -endfunction - -function! xolox#colorscheme_switcher#random_number(limit) " {{{1 - " Generate a `random' number (for some definition of the word). - let components = split(reltimestr(reltime()), '\.') - let microseconds = components[-1] + 0 - return microseconds % a:limit -endfunction - -" vim: ts=2 sw=2 et fdm=marker diff --git a/bundle/colorscheme-switcher/doc/colorscheme-switcher.txt b/bundle/colorscheme-switcher/doc/colorscheme-switcher.txt deleted file mode 100755 index 650cf68..0000000 --- a/bundle/colorscheme-switcher/doc/colorscheme-switcher.txt +++ /dev/null @@ -1,197 +0,0 @@ -*colorscheme-switcher.txt* Color scheme switcher for Vim - -=============================================================================== -Contents ~ - - 1. Introduction |colorscheme-switcher-introduction| - 2. Installation |colorscheme-switcher-installation| - 3. Commands |colorscheme-switcher-commands| - 1. The |:NextColorScheme| command - 2. The |:PrevColorScheme| command - 3. The |:RandomColorScheme| command - 4. Options |colorscheme-switcher-options| - 1. The |g:colorscheme_switcher_define_mappings| option - 2. The |g:colorscheme_switcher_keep_background| option - 3. The |g:colorscheme_switcher_exclude| option - 4. The |g:colorscheme_switcher_exclude_builtins| option - 5. The |g:colorscheme_switcher_command| option - 5. See also |colorscheme-switcher-see-also| - 6. Known problems |colorscheme-switcher-known-problems| - 7. Contact |colorscheme-switcher-contact| - 8. License |colorscheme-switcher-license| - 9. References |colorscheme-switcher-references| - -=============================================================================== - *colorscheme-switcher-introduction* -Introduction ~ - -The colorscheme switcher plug-in for the Vim text editor makes it easy to -quickly switch between colorschemes (see |:colorscheme|). It defines commands -and mappings to switch to the next and previous color schemes. - -=============================================================================== - *colorscheme-switcher-installation* -Installation ~ - -Please refer to the installation instructions [1] available on GitHub. Once -you've installed the plug-in you can try it out by executing |:NextColorScheme| -to switch to the next color scheme. - -If you didn't change the plug-in's configuration you can use the 'F8' and -'Shift-F8' keys to switch to the next/previous color scheme and 'Control-F8' to -switch to a random color scheme. - -=============================================================================== - *colorscheme-switcher-commands* -Commands ~ - -------------------------------------------------------------------------------- -The *:NextColorScheme* command - -Switch to the next color scheme. After the last color scheme the cycle repeats -from the first color scheme. - -------------------------------------------------------------------------------- -The *:PrevColorScheme* command - -Switch to the previous color scheme. After the first color scheme the cycle -repeats from the last color scheme. - -------------------------------------------------------------------------------- -The *:RandomColorScheme* command - -Switch to a random color scheme. Because Vim doesn't actually expose random -numbers the microseconds of the current time are used to improvise a source of -randomness. It's nothing like real randomness but convincing enough for this -plug-in :-). - -=============================================================================== - *colorscheme-switcher-options* -Options ~ - -The colorscheme switcher plug-in should work out of the box, but you can change -the configuration defaults if you want to change how the plug-in works. - -------------------------------------------------------------------------------- -The *g:colorscheme_switcher_define_mappings* option - -By default the plug-in maps the following keys in insert and normal mode: - -- 'F8' switches to the next color scheme -- 'Shift-F8' switches to the previous color scheme - -To disable these mappings (e.g. because you're already using them for a -different purpose) you can set the option -|g:colorscheme_switcher_define_mappings| to 0 (false) in your |vimrc| script. - -------------------------------------------------------------------------------- -The *g:colorscheme_switcher_keep_background* option - -If you set this variable to 1 (true) and cycle to the next/previous color -scheme, the plug-in will skip color schemes with a different |'background'|. By -default this is set to 0 (false). - -This is useful when you want to see only light or dark color schemes, for -example because the sun is shining (you'll want a light background) or because -it's late at night (then you'll likely prefer a dark background). - -------------------------------------------------------------------------------- -The *g:colorscheme_switcher_exclude* option - -A list with names of color schemes to be ignored by the plug-in. By default the -list is empty. Here's an example of how you can set this: -> - :let g:colorscheme_switcher_exclude = ['default', 'test'] -< -------------------------------------------------------------------------------- -The *g:colorscheme_switcher_exclude_builtins* option - -If you set this variable to 1 (true) the color schemes bundled with Vim -(installed in '$VIMRUNTIME') are ignored and instead only the color schemes -that you specifically installed in your Vim profile are used. - -------------------------------------------------------------------------------- -The *g:colorscheme_switcher_command* option - -This option is a string specifying the Vim command used to switch between color -schemes. It defaults to the |:colorscheme| command. You can set this option to -integrate the vim-colorscheme-switcher plug-in with other plug-ins like -colorsupport.vim [2] and guicolorscheme.vim [3]. - -=============================================================================== - *colorscheme-switcher-see-also* -See also ~ - -The vim-colorscheme-manager [4] plug-in is an add-on for vim-colorscheme- -switcher that adds features like more convenient blacklist management and -automatic loading of the last used color scheme when Vim starts up or a session -is loaded. - -=============================================================================== - *colorscheme-switcher-known-problems* -Known problems ~ - -The way Vim color schemes are written isn't really compatible with the idea of -quickly switching between lots of color schemes. In my opinion this is an ugly -implementation detail of how Vim works internally, in other words I think it's -a bug that should be fixed... Here are some references that explain the problem -in some detail: - -- Vim colorscheme leaves a wake of destruction when switching away [5] -- gVim: remove syntax highlighting groups [6] - -Since this behavior hinders cycling through color schemes, the colorscheme -switcher plug-in includes a workaround that should hide the problem: - -1. At startup a dictionary is created which will be used to remember links - between highlighting groups; - -2. Before and after loading a color scheme, the colorscheme switcher plug-in - runs the |:highlight| command without any arguments to find links between - highlighting groups. Each link that is found is added to the dictionary. - Existing entries are updated. This is done by calling - 'xolox#colorscheme_switcher#find_links()'. - -3. After loading a color scheme, the colorscheme switcher plug-in runs the - |:highlight| command without any arguments to find highlighting groups in - the state 'cleared'. For each of these groups, if they were previously - linked, the link is restored. This is done by calling - 'xolox#colorscheme_switcher#restore_links()'. - -Probably this solution is still not perfect, but it's a lot better than the -behavior out of the box: Before I implemented the steps above, when I would -cycle through my color schemes, Vim would eventually end up with black text on -a white background and nothing else! With the steps above, I can cycle as many -times as I want and all of the color schemes I've checked so far look fine. - -=============================================================================== - *colorscheme-switcher-contact* -Contact ~ - -If you have questions, bug reports, suggestions, etc. the author can be -contacted at peter@peterodding.com. The latest version is available at -http://peterodding.com/code/vim/colorscheme-switcher/ and -http://github.com/xolox/vim-colorscheme-switcher. If you like this plug-in -please vote for it on Vim Online [7]. - -=============================================================================== - *colorscheme-switcher-license* -License ~ - -This software is licensed under the MIT license [8]. © 2015 Peter Odding -. - -=============================================================================== - *colorscheme-switcher-references* -References ~ - -[1] https://github.com/xolox/vim-colorscheme-switcher/blob/master/INSTALL.md -[2] https://github.com/vim-scripts/colorsupport.vim -[3] https://github.com/vim-scripts/guicolorscheme.vim -[4] https://github.com/Taverius/vim-colorscheme-manager -[5] https://github.com/altercation/solarized/issues/102 -[6] http://stackoverflow.com/questions/12915797/gvim-remove-syntax-highlighting-groups -[7] http://www.vim.org/scripts/script.php?script_id=4586 -[8] http://en.wikipedia.org/wiki/MIT_License - -vim: ft=help diff --git a/bundle/colorscheme-switcher/plugin/colorscheme-switcher.vim b/bundle/colorscheme-switcher/plugin/colorscheme-switcher.vim deleted file mode 100755 index 98bf443..0000000 --- a/bundle/colorscheme-switcher/plugin/colorscheme-switcher.vim +++ /dev/null @@ -1,42 +0,0 @@ -" Vim plug-in -" Maintainer: Peter Odding -" Last Change: June 25, 2014 -" URL: http://peterodding.com/code/vim/colorscheme-switcher - -" This Vim plug-in defines commands and key mappings to quickly switch between -" color schemes (with the same &background if so desired). - -if &cp || exists('g:loaded_colorscheme_switcher') - finish -endif - -" Make sure vim-misc is installed. -try - " The point of this code is to do something completely innocent while making - " sure the vim-misc plug-in is installed. We specifically don't use Vim's - " exists() function because it doesn't load auto-load scripts that haven't - " already been loaded yet (last tested on Vim 7.3). - call type(g:xolox#misc#version) -catch - echomsg "Warning: The vim-colorscheme-switcher plug-in requires the vim-misc plug-in which seems not to be installed! For more information please review the installation instructions in the readme (also available on the homepage and on GitHub). The vim-colorscheme-switcher plug-in will now be disabled." - let g:loaded_colorscheme_switcher = 1 - finish -endtry - -if xolox#misc#option#get('colorscheme_switcher_define_mappings', 1) - inoremap :NextColorScheme - nnoremap :NextColorScheme - inoremap :PrevColorScheme - nnoremap :PrevColorScheme - inoremap :RandomColorScheme - nnoremap :RandomColorScheme -endif - -command! -bar NextColorScheme call xolox#colorscheme_switcher#next() -command! -bar PrevColorScheme call xolox#colorscheme_switcher#previous() -command! -bar RandomColorScheme call xolox#colorscheme_switcher#random() - -" Don't reload the plug-in once it has loaded successfully. -let g:loaded_colorscheme_switcher = 1 - -" vim: ts=2 sw=2 et diff --git a/bundle/ctrlp/autoload/ctrlp.vim b/bundle/ctrlp/autoload/ctrlp.vim deleted file mode 100755 index a05013d..0000000 --- a/bundle/ctrlp/autoload/ctrlp.vim +++ /dev/null @@ -1,2400 +0,0 @@ -" ============================================================================= -" File: autoload/ctrlp.vim -" Description: Fuzzy file, buffer, mru, tag, etc finder. -" Author: Kien Nguyen -" Version: 1.79 -" ============================================================================= - -" ** Static variables {{{1 -" s:ignore() {{{2 -fu! s:ignore() - let igdirs = [ - \ '\.git', - \ '\.hg', - \ '\.svn', - \ '_darcs', - \ '\.bzr', - \ '\.cdv', - \ '\~\.dep', - \ '\~\.dot', - \ '\~\.nib', - \ '\~\.plst', - \ '\.pc', - \ '_MTN', - \ 'blib', - \ 'CVS', - \ 'RCS', - \ 'SCCS', - \ '_sgbak', - \ 'autom4te\.cache', - \ 'cover_db', - \ '_build', - \ ] - let igfiles = [ - \ '\~$', - \ '#.+#$', - \ '[._].*\.swp$', - \ 'core\.\d+$', - \ '\.exe$', - \ '\.so$', - \ '\.bak$', - \ '\.png$', - \ '\.jpg$', - \ '\.gif$', - \ '\.zip$', - \ '\.rar$', - \ '\.tar\.gz$', - \ ] - retu { - \ 'dir': '\v[\/]('.join(igdirs, '|').')$', - \ 'file': '\v'.join(igfiles, '|'), - \ } -endf -" Script local vars {{{2 -let [s:pref, s:bpref, s:opts, s:new_opts, s:lc_opts] = - \ ['g:ctrlp_', 'b:ctrlp_', { - \ 'abbrev': ['s:abbrev', {}], - \ 'arg_map': ['s:argmap', 0], - \ 'buffer_func': ['s:buffunc', {}], - \ 'by_filename': ['s:byfname', 0], - \ 'custom_ignore': ['s:usrign', s:ignore()], - \ 'default_input': ['s:deftxt', 0], - \ 'dont_split': ['s:nosplit', 'netrw'], - \ 'dotfiles': ['s:showhidden', 0], - \ 'extensions': ['s:extensions', []], - \ 'follow_symlinks': ['s:folsym', 0], - \ 'highlight_match': ['s:mathi', [1, 'CtrlPMatch']], - \ 'jump_to_buffer': ['s:jmptobuf', 'Et'], - \ 'key_loop': ['s:keyloop', 0], - \ 'lazy_update': ['s:lazy', 0], - \ 'match_func': ['s:matcher', {}], - \ 'match_window': ['s:mw', ''], - \ 'match_window_bottom': ['s:mwbottom', 1], - \ 'match_window_reversed': ['s:mwreverse', 1], - \ 'max_depth': ['s:maxdepth', 40], - \ 'max_files': ['s:maxfiles', 10000], - \ 'max_height': ['s:mxheight', 10], - \ 'max_history': ['s:maxhst', exists('+hi') ? &hi : 20], - \ 'mruf_default_order': ['s:mrudef', 0], - \ 'open_func': ['s:openfunc', {}], - \ 'open_multi': ['s:opmul', '1v'], - \ 'open_new_file': ['s:newfop', 'v'], - \ 'prompt_mappings': ['s:urprtmaps', 0], - \ 'regexp_search': ['s:regexp', 0], - \ 'root_markers': ['s:rmarkers', []], - \ 'split_window': ['s:splitwin', 0], - \ 'status_func': ['s:status', {}], - \ 'tabpage_position': ['s:tabpage', 'ac'], - \ 'use_caching': ['s:caching', 1], - \ 'user_command': ['s:usrcmd', ''], - \ 'validate': ['s:validate', ''], - \ 'working_path_mode': ['s:pathmode', 'ra'], - \ 'line_prefix': ['s:lineprefix', '> '], - \ 'open_single_match': ['s:opensingle', []], - \ }, { - \ 'open_multiple_files': 's:opmul', - \ 'regexp': 's:regexp', - \ 'reuse_window': 's:nosplit', - \ 'show_hidden': 's:showhidden', - \ 'switch_buffer': 's:jmptobuf', - \ }, { - \ 'root_markers': 's:rmarkers', - \ 'user_command': 's:usrcmd', - \ 'working_path_mode': 's:pathmode', - \ }] - -" Global options -let s:glbs = { 'magic': 1, 'to': 1, 'tm': 0, 'sb': 1, 'hls': 0, 'im': 0, - \ 'report': 9999, 'sc': 0, 'ss': 0, 'siso': 0, 'mfd': 200, 'ttimeout': 0, - \ 'gcr': 'a:blinkon0', 'ic': 1, 'lmap': '', 'mousef': 0, 'imd': 1 } - -" Keymaps -let [s:lcmap, s:prtmaps] = ['nn ', { - \ 'PrtBS()': ['', ''], - \ 'PrtDelete()': [''], - \ 'PrtDeleteWord()': [''], - \ 'PrtClear()': [''], - \ 'PrtSelectMove("j")': ['', ''], - \ 'PrtSelectMove("k")': ['', ''], - \ 'PrtSelectMove("t")': ['', ''], - \ 'PrtSelectMove("b")': ['', ''], - \ 'PrtSelectMove("u")': ['', ''], - \ 'PrtSelectMove("d")': ['', ''], - \ 'PrtHistory(-1)': [''], - \ 'PrtHistory(1)': [''], - \ 'AcceptSelection("e")': ['', '<2-LeftMouse>'], - \ 'AcceptSelection("h")': ['', '', ''], - \ 'AcceptSelection("t")': [''], - \ 'AcceptSelection("v")': ['', ''], - \ 'ToggleFocus()': [''], - \ 'ToggleRegex()': [''], - \ 'ToggleByFname()': [''], - \ 'ToggleType(1)': ['', ''], - \ 'ToggleType(-1)': ['', ''], - \ 'PrtExpandDir()': [''], - \ 'PrtInsert("c")': ['', ''], - \ 'PrtInsert()': [''], - \ 'PrtCurStart()': [''], - \ 'PrtCurEnd()': [''], - \ 'PrtCurLeft()': ['', '', ''], - \ 'PrtCurRight()': ['', ''], - \ 'PrtClearCache()': [''], - \ 'PrtDeleteEnt()': [''], - \ 'CreateNewFile()': [''], - \ 'MarkToOpen()': [''], - \ 'OpenMulti()': [''], - \ 'PrtExit()': ['', '', ''], - \ }] - -if !has('gui_running') - cal add(s:prtmaps['PrtBS()'], remove(s:prtmaps['PrtCurLeft()'], 0)) -en - -let s:compare_lim = 3000 - -let s:ficounts = {} - -let s:ccex = s:pref.'clear_cache_on_exit' - -" Regexp -let s:fpats = { - \ '^\(\\|\)\|\(\\|\)$': '\\|', - \ '^\\\(zs\|ze\|<\|>\)': '^\\\(zs\|ze\|<\|>\)', - \ '^\S\*$': '\*', - \ '^\S\\?$': '\\?', - \ } - -" Keypad -let s:kprange = { - \ 'Plus': '+', - \ 'Minus': '-', - \ 'Divide': '/', - \ 'Multiply': '*', - \ 'Point': '.', - \ } - -" Highlight groups -let s:hlgrps = { - \ 'NoEntries': 'Error', - \ 'Mode1': 'Character', - \ 'Mode2': 'LineNr', - \ 'Stats': 'Function', - \ 'Match': 'Identifier', - \ 'PrtBase': 'Comment', - \ 'PrtText': 'Normal', - \ 'PrtCursor': 'Constant', - \ } - -" lname, sname of the basic(non-extension) modes -let s:coretypes = [ - \ ['files', 'fil'], - \ ['buffers', 'buf'], - \ ['mru files', 'mru'], -\ ] - -" Get the options {{{2 -fu! s:opts(...) - unl! s:usrign s:usrcmd s:urprtmaps - for each in ['byfname', 'regexp', 'extensions'] | if exists('s:'.each) - let {each} = s:{each} - en | endfo - for [ke, va] in items(s:opts) - let {va[0]} = exists(s:pref.ke) ? {s:pref.ke} : va[1] - endfo - unl va - for [ke, va] in items(s:new_opts) - let {va} = {exists(s:pref.ke) ? s:pref.ke : va} - endfo - unl va - for [ke, va] in items(s:lc_opts) - if exists(s:bpref.ke) - unl {va} - let {va} = {s:bpref.ke} - en - endfo - " Match window options - cal s:match_window_opts() - " One-time values - if a:0 && a:1 != {} - unl va - for [ke, va] in items(a:1) - let opke = substitute(ke, '\(\w:\)\?ctrlp_', '', '') - if has_key(s:lc_opts, opke) - let sva = s:lc_opts[opke] - unl {sva} - let {sva} = va - en - endfo - en - for each in ['byfname', 'regexp'] | if exists(each) - let s:{each} = {each} - en | endfo - if !exists('g:ctrlp_tilde_homedir') | let g:ctrlp_tilde_homedir = 0 | en - if !exists('g:ctrlp_newcache') | let g:ctrlp_newcache = 0 | en - let s:maxdepth = min([s:maxdepth, 100]) - let s:glob = s:showhidden ? '.*\|*' : '*' - let s:igntype = empty(s:usrign) ? -1 : type(s:usrign) - let s:lash = ctrlp#utils#lash() - if s:keyloop - let [s:lazy, s:glbs['imd']] = [0, 0] - en - if s:lazy - cal extend(s:glbs, { 'ut': ( s:lazy > 1 ? s:lazy : 250 ) }) - en - " Extensions - if !( exists('extensions') && extensions == s:extensions ) - for each in s:extensions - exe 'ru autoload/ctrlp/'.each.'.vim' - endfo - en - " Keymaps - if type(s:urprtmaps) == 4 - cal extend(s:prtmaps, s:urprtmaps) - en -endf - -fu! s:match_window_opts() - let s:mw_pos = - \ s:mw =~ 'top\|bottom' ? matchstr(s:mw, 'top\|bottom') : - \ exists('g:ctrlp_match_window_bottom') ? ( s:mwbottom ? 'bottom' : 'top' ) - \ : 'bottom' - let s:mw_order = - \ s:mw =~ 'order:[^,]\+' ? matchstr(s:mw, 'order:\zs[^,]\+') : - \ exists('g:ctrlp_match_window_reversed') ? ( s:mwreverse ? 'btt' : 'ttb' ) - \ : 'btt' - let s:mw_max = - \ s:mw =~ 'max:[^,]\+' ? str2nr(matchstr(s:mw, 'max:\zs\d\+')) : - \ exists('g:ctrlp_max_height') ? s:mxheight - \ : 10 - let s:mw_min = - \ s:mw =~ 'min:[^,]\+' ? str2nr(matchstr(s:mw, 'min:\zs\d\+')) : 1 - let [s:mw_max, s:mw_min] = [max([s:mw_max, 1]), max([s:mw_min, 1])] - let s:mw_min = min([s:mw_min, s:mw_max]) - let s:mw_res = - \ s:mw =~ 'results:[^,]\+' ? str2nr(matchstr(s:mw, 'results:\zs\d\+')) - \ : min([s:mw_max, &lines]) - let s:mw_res = max([s:mw_res, 1]) -endf -"}}}1 -" * Open & Close {{{1 -fu! s:Open() - cal s:log(1) - cal s:getenv() - cal s:execextvar('enter') - sil! exe 'keepa' ( s:mw_pos == 'top' ? 'to' : 'bo' ) '1new ControlP' - cal s:buffunc(1) - let [s:bufnr, s:winw] = [bufnr('%'), winwidth(0)] - let [s:focus, s:prompt] = [1, ['', '', '']] - abc - if !exists('s:hstry') - let hst = filereadable(s:gethistloc()[1]) ? s:gethistdata() : [''] - let s:hstry = empty(hst) || !s:maxhst ? [''] : hst - en - for [ke, va] in items(s:glbs) | if exists('+'.ke) - sil! exe 'let s:glb_'.ke.' = &'.ke.' | let &'.ke.' = '.string(va) - en | endfo - if s:opmul != '0' && has('signs') - sign define ctrlpmark text=+> texthl=CtrlPMark - hi def link CtrlPMark Search - en - cal s:setupblank() -endf - -fu! s:Close() - cal s:buffunc(0) - if winnr('$') == 1 - bw! - el - try | bun! - cat | clo! | endt - cal s:unmarksigns() - en - for key in keys(s:glbs) | if exists('+'.key) - sil! exe 'let &'.key.' = s:glb_'.key - en | endfo - if exists('s:glb_acd') | let &acd = s:glb_acd | en - let g:ctrlp_lines = [] - if s:winres[1] >= &lines && s:winres[2] == winnr('$') - exe s:winres[0].s:winres[0] - en - unl! s:focus s:hisidx s:hstgot s:marked s:statypes s:cline s:init s:savestr - \ s:mrbs s:did_exp - cal ctrlp#recordhist() - cal s:execextvar('exit') - cal s:log(0) - let v:errmsg = s:ermsg - ec -endf -" * Clear caches {{{1 -fu! ctrlp#clr(...) - let [s:matches, g:ctrlp_new{ a:0 ? a:1 : 'cache' }] = [1, 1] -endf - -fu! ctrlp#clra() - let cadir = ctrlp#utils#cachedir() - if isdirectory(cadir) - let cafiles = split(s:glbpath(s:fnesc(cadir, 'g', ','), '**', 1), "\n") - let eval = '!isdirectory(v:val) && v:val !~ ''\v[\/]cache[.a-z]+$|\.log$''' - sil! cal map(s:ifilter(cafiles, eval), 'delete(v:val)') - en - cal ctrlp#clr() -endf - -fu! s:Reset(args) - let opts = has_key(a:args, 'opts') ? [a:args['opts']] : [] - cal call('s:opts', opts) - cal s:autocmds() - cal ctrlp#utils#opts() - cal s:execextvar('opts') -endf -" * Files {{{1 -fu! ctrlp#files() - let cafile = ctrlp#utils#cachefile() - if g:ctrlp_newcache || !filereadable(cafile) || s:nocache(cafile) - let [lscmd, s:initcwd, g:ctrlp_allfiles] = [s:lsCmd(), s:dyncwd, []] - " Get the list of files - if empty(lscmd) - if !ctrlp#igncwd(s:dyncwd) - cal s:InitCustomFuncs() - cal s:GlobPath(s:fnesc(s:dyncwd, 'g', ','), 0) - cal s:CloseCustomFuncs() - en - el - sil! cal ctrlp#progress('Indexing...') - try | cal s:UserCmd(lscmd) - cat | retu [] | endt - en - " Remove base directory - cal ctrlp#rmbasedir(g:ctrlp_allfiles) - if len(g:ctrlp_allfiles) <= s:compare_lim - cal sort(g:ctrlp_allfiles, 'ctrlp#complen') - en - cal s:writecache(cafile) - let catime = getftime(cafile) - el - let catime = getftime(cafile) - if !( exists('s:initcwd') && s:initcwd == s:dyncwd ) - \ || get(s:ficounts, s:dyncwd, [0, catime])[1] != catime - let s:initcwd = s:dyncwd - let g:ctrlp_allfiles = ctrlp#utils#readfile(cafile) - en - en - cal extend(s:ficounts, { s:dyncwd : [len(g:ctrlp_allfiles), catime] }) - retu g:ctrlp_allfiles -endf - -fu! s:InitCustomFuncs() - if s:igntype == 4 && has_key(s:usrign, 'func-init') && s:usrign['func-init'] != '' - exe call(s:usrign['func-init'], []) - en -endf - -fu! s:CloseCustomFuncs() - if s:igntype == 4 && has_key(s:usrign, 'func-close') && s:usrign['func-close'] != '' - exe call(s:usrign['func-close'], []) - en -endf - -fu! s:GlobPath(dirs, depth) - let entries = split(globpath(a:dirs, s:glob), "\n") - let [dnf, depth] = [ctrlp#dirnfile(entries), a:depth + 1] - cal extend(g:ctrlp_allfiles, dnf[1]) - if !empty(dnf[0]) && !s:maxf(len(g:ctrlp_allfiles)) && depth <= s:maxdepth - sil! cal ctrlp#progress(len(g:ctrlp_allfiles), 1) - cal s:GlobPath(join(map(dnf[0], 's:fnesc(v:val, "g", ",")'), ','), depth) - en -endf - -fu! s:UserCmd(lscmd) - let [path, lscmd] = [s:dyncwd, a:lscmd] - let do_ign = - \ type(s:usrcmd) == 4 && has_key(s:usrcmd, 'ignore') && s:usrcmd['ignore'] - if do_ign && ctrlp#igncwd(s:cwd) | retu | en - if exists('+ssl') && &ssl - let [ssl, &ssl, path] = [&ssl, 0, tr(path, '/', '\')] - en - if (has('win32') || has('win64')) && match(&shellcmdflag, "/") != -1 - let lscmd = substitute(lscmd, '\v(^|\&\&\s*)\zscd (/d)@!', 'cd /d ', '') - en - let path = exists('*shellescape') ? shellescape(path) : path - let g:ctrlp_allfiles = split(system(printf(lscmd, path)), "\n") - if exists('+ssl') && exists('ssl') - let &ssl = ssl - cal map(g:ctrlp_allfiles, 'tr(v:val, "\\", "/")') - en - if exists('s:vcscmd') && s:vcscmd - cal map(g:ctrlp_allfiles, 'tr(v:val, "/", "\\")') - en - if do_ign - if !empty(s:usrign) - let g:ctrlp_allfiles = ctrlp#dirnfile(g:ctrlp_allfiles)[1] - en - if &wig != '' - cal filter(g:ctrlp_allfiles, 'glob(v:val) != ""') - en - en -endf - -fu! s:lsCmd() - let cmd = s:usrcmd - if type(cmd) == 1 - retu cmd - elsei type(cmd) == 3 && len(cmd) >= 2 && cmd[:1] != ['', ''] - if s:findroot(s:dyncwd, cmd[0], 0, 1) == [] - retu len(cmd) == 3 ? cmd[2] : '' - en - let s:vcscmd = s:lash == '\' - retu cmd[1] - elsei type(cmd) == 4 && ( has_key(cmd, 'types') || has_key(cmd, 'fallback') ) - let fndroot = [] - if has_key(cmd, 'types') && cmd['types'] != {} - let [markrs, cmdtypes] = [[], values(cmd['types'])] - for pair in cmdtypes - cal add(markrs, pair[0]) - endfo - let fndroot = s:findroot(s:dyncwd, markrs, 0, 1) - en - if fndroot == [] - retu has_key(cmd, 'fallback') ? cmd['fallback'] : '' - en - for pair in cmdtypes - if pair[0] == fndroot[0] | brea | en - endfo - let s:vcscmd = s:lash == '\' - retu pair[1] - en -endf -" - Buffers {{{1 -fu! ctrlp#buffers(...) - let ids = sort(filter(range(1, bufnr('$')), '(empty(getbufvar(v:val, "&bt"))' - \ .' || s:isneovimterminal(v:val)) && getbufvar(v:val, "&bl")'), 's:compmreb') - if a:0 && a:1 == 'id' - retu ids - el - let bufs = [[], []] - for id in ids - let bname = bufname(id) - let ebname = bname == '' - let fname = fnamemodify(ebname ? '['.id.'*No Name]' : bname, ':.') - cal add(bufs[ebname], fname) - endfo - retu bufs[0] + bufs[1] - en -endf -" * MatchedItems() {{{1 -fu! s:MatchIt(items, pat, limit, exc) - let [lines, id] = [[], 0] - let pat = - \ s:byfname() ? map(split(a:pat, '^[^;]\+\\\@= 0 - cal add(lines, item) - en | cat | brea | endt - if a:limit > 0 && len(lines) >= a:limit | brea | en - endfo - let s:mdata = [s:dyncwd, s:itemtype, s:regexp, s:sublist(a:items, id, -1)] - retu lines -endf - -fu! s:MatchedItems(items, pat, limit) - let exc = exists('s:crfilerel') ? s:crfilerel : '' - let items = s:narrowable() ? s:matched + s:mdata[3] : a:items - if s:matcher != {} - let argms = - \ has_key(s:matcher, 'arg_type') && s:matcher['arg_type'] == 'dict' ? [{ - \ 'items': items, - \ 'str': a:pat, - \ 'limit': a:limit, - \ 'mmode': s:mmode(), - \ 'ispath': s:ispath, - \ 'crfile': exc, - \ 'regex': s:regexp, - \ }] : [items, a:pat, a:limit, s:mmode(), s:ispath, exc, s:regexp] - let lines = call(s:matcher['match'], argms, s:matcher) - el - let lines = s:MatchIt(items, a:pat, a:limit, exc) - en - let s:matches = len(lines) - unl! s:did_exp - retu lines -endf - -fu! s:SplitPattern(str) - let str = a:str - let s:savestr = str - if s:regexp - let pat = s:regexfilter(str) - el - let lst = split(str, '\zs') - if exists('+ssl') && !&ssl - cal map(lst, 'escape(v:val, ''\'')') - en - for each in ['^', '$', '.'] - cal map(lst, 'escape(v:val, each)') - endfo - en - if exists('lst') - let pat = '' - if !empty(lst) - if s:byfname() && index(lst, ';') > 0 - let fbar = index(lst, ';') - let lst_1 = s:sublist(lst, 0, fbar - 1) - let lst_2 = len(lst) - 1 > fbar ? s:sublist(lst, fbar + 1, -1) : [''] - let pat = s:buildpat(lst_1).';'.s:buildpat(lst_2) - el - let pat = s:buildpat(lst) - en - en - en - retu escape(pat, '~') -endf -" * BuildPrompt() {{{1 -fu! s:Render(lines, pat) - let [&ma, lines, s:res_count] = [1, a:lines, len(a:lines)] - let height = min([max([s:mw_min, s:res_count]), s:winmaxh]) - let pat = s:byfname() ? split(a:pat, '^[^;]\+\\\@' ).( s:byfname() ? 'd' : '>' ).'> ' - let str = escape(s:getinput(), '\') - let lazy = str == '' || exists('s:force') || !has('autocmd') ? 0 : s:lazy - if a:upd && !lazy && ( s:matches || s:regexp || exists('s:did_exp') - \ || str =~ '\(\\\(<\|>\)\|[*|]\)\|\(\\\:\([^:]\|\\:\)*$\)' ) - sil! cal s:Update(str) - en - sil! cal ctrlp#statusline() - " Toggling - let [hiactive, hicursor, base] = s:focus - \ ? ['CtrlPPrtText', 'CtrlPPrtCursor', base] - \ : ['CtrlPPrtBase', 'CtrlPPrtBase', tr(base, '>', '-')] - let hibase = 'CtrlPPrtBase' - " Build it - redr - let prt = copy(s:prompt) - cal map(prt, 'escape(v:val, ''"\'')') - exe 'echoh' hibase '| echon "'.base.'" - \ | echoh' hiactive '| echon "'.prt[0].'" - \ | echoh' hicursor '| echon "'.prt[1].'" - \ | echoh' hiactive '| echon "'.prt[2].'" | echoh None' - " Append the cursor at the end - if empty(prt[1]) && s:focus - exe 'echoh' hibase '| echon "_" | echoh None' - en -endf -" - SetDefTxt() {{{1 -fu! s:SetDefTxt() - if s:deftxt == '0' || ( s:deftxt == 1 && !s:ispath ) | retu | en - let txt = s:deftxt - if !type(txt) - let path = s:crfpath.s:lash(s:crfpath) - let txt = txt && !stridx(path, s:dyncwd) ? ctrlp#rmbasedir([path])[0] : '' - en - let s:prompt[0] = txt -endf -" ** Prt Actions {{{1 -" Editing {{{2 -fu! s:PrtClear() - if !s:focus | retu | en - unl! s:hstgot - let [s:prompt, s:matches] = [['', '', ''], 1] - cal s:BuildPrompt(1) -endf - -fu! s:PrtAdd(char) - unl! s:hstgot - let s:act_add = 1 - let s:prompt[0] .= a:char - cal s:BuildPrompt(1) - unl s:act_add -endf - -fu! s:PrtBS() - if !s:focus | retu | en - unl! s:hstgot - let [s:prompt[0], s:matches] = [substitute(s:prompt[0], '.$', '', ''), 1] - cal s:BuildPrompt(1) -endf - -fu! s:PrtDelete() - if !s:focus | retu | en - unl! s:hstgot - let [prt, s:matches] = [s:prompt, 1] - let prt[1] = matchstr(prt[2], '^.') - let prt[2] = substitute(prt[2], '^.', '', '') - cal s:BuildPrompt(1) -endf - -fu! s:PrtDeleteWord() - if !s:focus | retu | en - unl! s:hstgot - let [str, s:matches] = [s:prompt[0], 1] - let str = str =~ '\W\w\+$' ? matchstr(str, '^.\+\W\ze\w\+$') - \ : str =~ '\w\W\+$' ? matchstr(str, '^.\+\w\ze\W\+$') - \ : str =~ '\s\+$' ? matchstr(str, '^.*\S\ze\s\+$') - \ : str =~ '\v^(\S+|\s+)$' ? '' : str - let s:prompt[0] = str - cal s:BuildPrompt(1) -endf - -fu! s:PrtInsert(...) - if !s:focus | retu | en - let type = !a:0 ? '' : a:1 - if !a:0 - let type = s:insertstr() - if type == 'cancel' | retu | en - en - if type ==# 'r' - let regcont = s:getregs() - if regcont < 0 | retu | en - en - unl! s:hstgot - let s:act_add = 1 - let s:prompt[0] .= type ==# 'w' ? s:crword - \ : type ==# 'f' ? s:crgfile - \ : type ==# 's' ? s:regisfilter('/') - \ : type ==# 'v' ? s:crvisual - \ : type ==# 'c' ? s:regisfilter('+') - \ : type ==# 'r' ? regcont : '' - cal s:BuildPrompt(1) - unl s:act_add -endf - -fu! s:PrtExpandDir() - if !s:focus | retu | en - let str = s:getinput('c') - if str =~ '\v^\@(cd|lc[hd]?|chd)\s.+' && s:spi - let hasat = split(str, '\v^\@(cd|lc[hd]?|chd)\s*\zs') - let str = get(hasat, 1, '') - if str =~# '\v^[~$]\i{-}[\/]?|^#(\):(p|h|8|\~|\.|g?s+)' - let spc = str =~# '^%' ? s:crfile - \ : str =~# '^' ? s:crgfile - \ : str =~# '^' ? s:crword - \ : str =~# '^' ? s:crnbword : '' - let pat = '(:(p|h|8|\~|\.|g?s(.)[^\3]*\3[^\3]*\3))+' - let mdr = matchstr(str, '\v^[^:]+\zs'.pat) - let nmd = matchstr(str, '\v^[^:]+'.pat.'\zs.{-}$') - let str = fnamemodify(s:fnesc(spc, 'g'), mdr).nmd - en - en - if str == '' | retu | en - unl! s:hstgot - let s:act_add = 1 - let [base, seed] = s:headntail(str) - if str =~# '^[\/]' - let base = expand('/').base - en - let dirs = s:dircompl(base, seed) - if len(dirs) == 1 - let str = dirs[0] - elsei len(dirs) > 1 - let str .= s:findcommon(dirs, str) - en - let s:prompt[0] = exists('hasat') ? hasat[0].str : str - cal s:BuildPrompt(1) - unl s:act_add -endf -" Movement {{{2 -fu! s:PrtCurLeft() - if !s:focus | retu | en - let prt = s:prompt - if !empty(prt[0]) - let s:prompt = [substitute(prt[0], '.$', '', ''), matchstr(prt[0], '.$'), - \ prt[1] . prt[2]] - en - cal s:BuildPrompt(0) -endf - -fu! s:PrtCurRight() - if !s:focus | retu | en - let prt = s:prompt - let s:prompt = [prt[0] . prt[1], matchstr(prt[2], '^.'), - \ substitute(prt[2], '^.', '', '')] - cal s:BuildPrompt(0) -endf - -fu! s:PrtCurStart() - if !s:focus | retu | en - let str = join(s:prompt, '') - let s:prompt = ['', matchstr(str, '^.'), substitute(str, '^.', '', '')] - cal s:BuildPrompt(0) -endf - -fu! s:PrtCurEnd() - if !s:focus | retu | en - let s:prompt = [join(s:prompt, ''), '', ''] - cal s:BuildPrompt(0) -endf - -fu! s:PrtSelectMove(dir) - let wht = winheight(0) - let dirs = {'t': 'gg','b': 'G','j': 'j','k': 'k','u': wht.'k','d': wht.'j'} - exe 'keepj norm!' dirs[a:dir] - if s:nolim != 1 | let s:cline = line('.') | en - if line('$') > winheight(0) | cal s:BuildPrompt(0) | en -endf - -fu! s:PrtSelectJump(char) - let lines = copy(s:lines) - if s:byfname() - cal map(lines, 'split(v:val, ''[\/]\ze[^\/]\+$'')[-1]') - en - " Cycle through matches, use s:jmpchr to store last jump - let chr = escape(matchstr(a:char, '^.'), '.~') - let smartcs = &scs && chr =~ '\u' ? '\C' : '' - if match(lines, smartcs.'^'.chr) >= 0 - " If not exists or does but not for the same char - let pos = match(lines, smartcs.'^'.chr) - if !exists('s:jmpchr') || ( exists('s:jmpchr') && s:jmpchr[0] != chr ) - let [jmpln, s:jmpchr] = [pos, [chr, pos]] - elsei exists('s:jmpchr') && s:jmpchr[0] == chr - " Start of lines - if s:jmpchr[1] == -1 | let s:jmpchr[1] = pos | en - let npos = match(lines, smartcs.'^'.chr, s:jmpchr[1] + 1) - let [jmpln, s:jmpchr] = [npos == -1 ? pos : npos, [chr, npos]] - en - exe 'keepj norm!' ( jmpln + 1 ).'G' - if s:nolim != 1 | let s:cline = line('.') | en - if line('$') > winheight(0) | cal s:BuildPrompt(0) | en - en -endf -" Misc {{{2 -fu! s:PrtFocusMap(char) - cal call(( s:focus ? 's:PrtAdd' : 's:PrtSelectJump' ), [a:char]) -endf - -fu! s:PrtClearCache() - if s:itemtype == 0 - cal ctrlp#clr() - elsei s:itemtype > 2 - cal ctrlp#clr(s:statypes[s:itemtype][1]) - en - if s:itemtype == 2 - let g:ctrlp_lines = ctrlp#mrufiles#refresh() - el - cal ctrlp#setlines() - en - let s:force = 1 - cal s:BuildPrompt(1) - unl s:force -endf - -fu! s:PrtDeleteEnt() - if s:itemtype == 2 - cal s:PrtDeleteMRU() - elsei type(s:getextvar('wipe')) == 1 - cal s:delent(s:getextvar('wipe')) - en -endf - -fu! s:PrtDeleteMRU() - if s:itemtype == 2 - cal s:delent('ctrlp#mrufiles#remove') - en -endf - -fu! s:PrtExit() - if bufnr('%') == s:bufnr && bufname('%') == 'ControlP' - noa cal s:Close() - noa winc p - en -endf - -fu! s:PrtHistory(...) - if !s:focus || !s:maxhst | retu | en - let [str, hst, s:matches] = [join(s:prompt, ''), s:hstry, 1] - " Save to history if not saved before - let [hst[0], hslen] = [exists('s:hstgot') ? hst[0] : str, len(hst)] - let idx = exists('s:hisidx') ? s:hisidx + a:1 : a:1 - " Limit idx within 0 and hslen - let idx = idx < 0 ? 0 : idx >= hslen ? hslen > 1 ? hslen - 1 : 0 : idx - let s:prompt = [hst[idx], '', ''] - let [s:hisidx, s:hstgot, s:force] = [idx, 1, 1] - cal s:BuildPrompt(1) - unl s:force -endf -"}}}1 -" * Mappings {{{1 -fu! s:MapNorms() - if exists('s:nmapped') && s:nmapped == s:bufnr | retu | en - let pcmd = "nn \ \ \ :\cal \%s(\"%s\")\" - let cmd = substitute(pcmd, 'k%s', 'char-%d', '') - let pfunc = 'PrtFocusMap' - let ranges = [32, 33, 125, 126] + range(35, 91) + range(93, 123) - for each in [34, 92, 124] - exe printf(cmd, each, pfunc, escape(nr2char(each), '"|\')) - endfo - for each in ranges - exe printf(cmd, each, pfunc, nr2char(each)) - endfo - for each in range(0, 9) - exe printf(pcmd, each, pfunc, each) - endfo - for [ke, va] in items(s:kprange) - exe printf(pcmd, ke, pfunc, va) - endfo - let s:nmapped = s:bufnr -endf - -fu! s:MapSpecs() - if !( exists('s:smapped') && s:smapped == s:bufnr ) - " Correct arrow keys in terminal - if ( has('termresponse') && v:termresponse =~ "\" ) - \ || &term =~? '\vxterm|','\B ','\C ','\D '] - exe s:lcmap.' ['.each - endfo - en - en - for [ke, va] in items(s:prtmaps) | for kp in va - exe s:lcmap kp ':cal '.ke.'' - endfo | endfo - let s:smapped = s:bufnr -endf - -fu! s:KeyLoop() - let t_ve = &t_ve - set t_ve= - try - wh exists('s:init') && s:keyloop - redr - let nr = getchar() - let chr = !type(nr) ? nr2char(nr) : nr - if nr >=# 0x20 - cal s:PrtFocusMap(chr) - el - let cmd = matchstr(maparg(chr), ':\zs.\+\ze$') - exe ( cmd != '' ? cmd : 'norm '.chr ) - en - endw - fina - let &t_ve = t_ve - endt -endf -" * Toggling {{{1 -fu! s:ToggleFocus() - let s:focus = !s:focus - cal s:BuildPrompt(0) -endf - -fu! s:ToggleRegex() - let s:regexp = !s:regexp - cal s:PrtSwitcher() -endf - -fu! s:ToggleByFname() - if s:ispath - let s:byfname = !s:byfname - let s:mfunc = s:mfunc() - cal s:PrtSwitcher() - en -endf - -fu! s:ToggleType(dir) - let max = len(g:ctrlp_ext_vars) + 2 - let next = s:walker(max, s:itemtype, a:dir) - cal ctrlp#syntax() - cal ctrlp#setlines(next) - cal s:PrtSwitcher() -endf - -fu! s:ToggleKeyLoop() - let s:keyloop = !s:keyloop - if exists('+imd') - let &imd = !s:keyloop - en - if s:keyloop - let [&ut, s:lazy] = [0, 0] - cal s:KeyLoop() - elsei has_key(s:glbs, 'ut') - let [&ut, s:lazy] = [s:glbs['ut'], 1] - en -endf - -fu! s:ToggleMRURelative() - cal ctrlp#mrufiles#tgrel() - cal s:PrtClearCache() -endf - -fu! s:PrtSwitcher() - let [s:force, s:matches] = [1, 1] - cal s:BuildPrompt(1) - unl s:force -endf -" - SetWD() {{{1 -fu! s:SetWD(args) - if has_key(a:args, 'args') && stridx(a:args['args'], '--dir') >= 0 - \ && exists('s:dyncwd') - cal ctrlp#setdir(s:dyncwd) | retu - en - if has_key(a:args, 'dir') && a:args['dir'] != '' - cal ctrlp#setdir(a:args['dir']) | retu - en - let pmodes = has_key(a:args, 'mode') ? a:args['mode'] : s:pathmode - let [s:crfilerel, s:dyncwd] = [fnamemodify(s:crfile, ':.'), getcwd()] - if (!type(pmodes)) - let pmodes = - \ pmodes == 0 ? '' : - \ pmodes == 1 ? 'a' : - \ pmodes == 2 ? 'r' : - \ 'c' - en - let spath = pmodes =~ 'd' ? s:dyncwd : pmodes =~ 'w' ? s:cwd : s:crfpath - for pmode in split(pmodes, '\zs') - if ctrlp#setpathmode(pmode, spath) | retu | en - endfo -endf -" * AcceptSelection() {{{1 -fu! ctrlp#acceptfile(...) - let useb = 0 - if a:0 == 1 && type(a:1) == 4 - let [md, line] = [a:1['action'], a:1['line']] - let atl = has_key(a:1, 'tail') ? a:1['tail'] : '' - el - let [md, line] = [a:1, a:2] - let atl = a:0 > 2 ? a:3 : '' - en - if !type(line) - let [filpath, bufnr, useb] = [line, line, 1] - el - let filpath = fnamemodify(line, ':p') - if s:nonamecond(line, filpath) - let bufnr = str2nr(matchstr(line, '[\/]\?\[\zs\d\+\ze\*No Name\]$')) - let [filpath, useb] = [bufnr, 1] - el - let bufnr = bufnr('^'.filpath.'$') - en - en - cal s:PrtExit() - let tail = s:tail() - let j2l = atl != '' ? atl : matchstr(tail, '^ +\zs\d\+$') - if ( s:jmptobuf =~ md || ( !empty(s:jmptobuf) && s:jmptobuf !~# '\v^0$' && md =~ '[et]' ) ) && bufnr > 0 - \ && !( md == 'e' && bufnr == bufnr('%') ) - let [jmpb, bufwinnr] = [1, bufwinnr(bufnr)] - let buftab = ( s:jmptobuf =~# '[tTVH]' || s:jmptobuf > 1 ) - \ ? s:buftab(bufnr, md) : [0, 0] - en - " Switch to existing buffer or open new one - if exists('jmpb') && bufwinnr > 0 - \ && !( md == 't' && ( s:jmptobuf !~# toupper(md) || buftab[0] ) ) - exe bufwinnr.'winc w' - if j2l | cal ctrlp#j2l(j2l) | en - elsei exists('jmpb') && buftab[0] - \ && !( md =~ '[evh]' && s:jmptobuf !~# toupper(md) ) - exe 'tabn' buftab[0] - exe buftab[1].'winc w' - if j2l | cal ctrlp#j2l(j2l) | en - el - " Determine the command to use - let useb = bufnr > 0 && buflisted(bufnr) && ( empty(tail) || useb ) - let cmd = - \ md == 't' || s:splitwin == 1 ? ( useb ? 'tab sb' : 'tabe' ) : - \ md == 'h' || s:splitwin == 2 ? ( useb ? 'sb' : 'new' ) : - \ md == 'v' || s:splitwin == 3 ? ( useb ? 'vert sb' : 'vne' ) : - \ call('ctrlp#normcmd', useb ? ['b', 'bo vert sb'] : ['e']) - " Reset &switchbuf option - let [swb, &swb] = [&swb, ''] - " Open new window/buffer - let [fid, tail] = [( useb ? bufnr : filpath ), ( atl != '' ? ' +'.atl : tail )] - let args = [cmd, fid, tail, 1, [useb, j2l]] - cal call('s:openfile', args) - let &swb = swb - en -endf - -fu! s:SpecInputs(str) - if a:str =~ '\v^(\.\.([\/]\.\.)*[\/]?[.\/]*)$' && s:spi - let cwd = s:dyncwd - cal ctrlp#setdir(a:str =~ '^\.\.\.*$' ? - \ '../'.repeat('../', strlen(a:str) - 2) : a:str) - if cwd != s:dyncwd | cal ctrlp#setlines() | en - cal s:PrtClear() - retu 1 - elsei a:str == s:lash && s:spi - cal s:SetWD({ 'mode': 'rd' }) - cal ctrlp#setlines() - cal s:PrtClear() - retu 1 - elsei a:str =~ '^@.\+' && s:spi - retu s:at(a:str) - elsei a:str == '?' - cal s:PrtExit() - let hlpwin = &columns > 159 ? '| vert res 80' : '' - sil! exe 'bo vert h ctrlp-mappings' hlpwin '| norm! 0' - retu 1 - en - retu 0 -endf - -fu! s:AcceptSelection(action) - let [md, icr] = [a:action[0], match(a:action, 'r') >= 0] - let subm = icr || ( !icr && md == 'e' ) - if !subm && s:OpenMulti(md) != -1 | retu | en - let str = s:getinput() - if subm | if s:SpecInputs(str) | retu | en | en - " Get the selected line - let line = ctrlp#getcline() - if !subm && !s:itemtype && line == '' && line('.') > s:offset - \ && str !~ '\v^(\.\.([\/]\.\.)*[\/]?[.\/]*|/|\\|\?|\@.+)$' - cal s:CreateNewFile(md) | retu - en - if empty(line) | retu | en - " Do something with it - if s:openfunc != {} && has_key(s:openfunc, s:ctype) - let actfunc = s:openfunc[s:ctype] - let type = has_key(s:openfunc, 'arg_type') ? s:openfunc['arg_type'] : 'list' - el - if s:itemtype < 3 - let [actfunc, type] = ['ctrlp#acceptfile', 'dict'] - el - let [actfunc, exttype] = [s:getextvar('accept'), s:getextvar('act_farg')] - let type = exttype == 'dict' ? exttype : 'list' - en - en - let actargs = type == 'dict' ? [{ 'action': md, 'line': line, 'icr': icr }] - \ : [md, line] - cal call(actfunc, actargs) -endf -" - CreateNewFile() {{{1 -fu! s:CreateNewFile(...) - let [md, str] = ['', s:getinput('n')] - if empty(str) | retu | en - if s:argmap && !a:0 - " Get the extra argument - let md = s:argmaps(md, 1) - if md == 'cancel' | retu | en - en - let str = s:sanstail(str) - let [base, fname] = s:headntail(str) - if fname =~ '^[\/]$' | retu | en - if exists('s:marked') && len(s:marked) - " Use the first marked file's path - let path = fnamemodify(values(s:marked)[0], ':p:h') - let base = path.s:lash(path).base - let str = fnamemodify(base.s:lash.fname, ':.') - en - if base != '' | if isdirectory(ctrlp#utils#mkdir(base)) - let optyp = str | en | el | let optyp = fname - en - if !exists('optyp') | retu | en - let [filpath, tail] = [fnamemodify(optyp, ':p'), s:tail()] - if !stridx(filpath, s:dyncwd) | cal s:insertcache(str) | en - cal s:PrtExit() - let cmd = md == 'r' ? ctrlp#normcmd('e') : - \ s:newfop =~ '1\|t' || ( a:0 && a:1 == 't' ) || md == 't' ? 'tabe' : - \ s:newfop =~ '2\|h' || ( a:0 && a:1 == 'h' ) || md == 'h' ? 'new' : - \ s:newfop =~ '3\|v' || ( a:0 && a:1 == 'v' ) || md == 'v' ? 'vne' : - \ ctrlp#normcmd('e') - cal s:openfile(cmd, filpath, tail, 1) -endf -" * OpenMulti() {{{1 -fu! s:MarkToOpen() - if s:bufnr <= 0 || s:opmul == '0' - \ || ( s:itemtype > 2 && s:getextvar('opmul') != 1 ) - retu - en - let line = ctrlp#getcline() - if empty(line) | retu | en - let filpath = s:ispath ? fnamemodify(line, ':p') : line - if exists('s:marked') && s:dictindex(s:marked, filpath) > 0 - " Unmark and remove the file from s:marked - let key = s:dictindex(s:marked, filpath) - cal remove(s:marked, key) - if empty(s:marked) | unl s:marked | en - if has('signs') - exe 'sign unplace' key 'buffer='.s:bufnr - en - el - " Add to s:marked and place a new sign - if exists('s:marked') - let vac = s:vacantdict(s:marked) - let key = empty(vac) ? len(s:marked) + 1 : vac[0] - let s:marked = extend(s:marked, { key : filpath }) - el - let [key, s:marked] = [1, { 1 : filpath }] - en - if has('signs') - exe 'sign place' key 'line='.line('.').' name=ctrlpmark buffer='.s:bufnr - en - en - sil! cal ctrlp#statusline() -endf - -fu! s:OpenMulti(...) - let has_marked = exists('s:marked') - if ( !has_marked && a:0 ) || s:opmul == '0' || !s:ispath - \ || ( s:itemtype > 2 && s:getextvar('opmul') != 1 ) - retu -1 - en - " Get the options - let [nr, md] = [matchstr(s:opmul, '\d\+'), matchstr(s:opmul, '[thvi]')] - let [ur, jf] = [s:opmul =~ 'r', s:opmul =~ 'j'] - let md = a:0 ? a:1 : ( md == '' ? 'v' : md ) - let nopt = exists('g:ctrlp_open_multiple_files') - if !has_marked - let line = ctrlp#getcline() - if line == '' | retu | en - let marked = { 1 : fnamemodify(line, ':p') } - let [nr, ur, jf, nopt] = ['1', 0, 0, 1] - en - if ( s:argmap || !has_marked ) && !a:0 - let md = s:argmaps(md, !has_marked ? 2 : 0) - if md == 'c' - cal s:unmarksigns() - unl! s:marked - cal s:BuildPrompt(0) - elsei !has_marked && md =~ '[axd]' - retu s:OpenNoMarks(md, line) - en - if md =~ '\v^c(ancel)?$' | retu | en - let nr = nr == '0' ? ( nopt ? '' : '1' ) : nr - let ur = !has_marked && md == 'r' ? 1 : ur - en - let mkd = values(has_marked ? s:marked : marked) - cal s:sanstail(join(s:prompt, '')) - cal s:PrtExit() - if nr == '0' || md == 'i' - retu map(mkd, "s:openfile('bad', v:val, '', 0)") - en - let tail = s:tail() - let [emptytail, bufnr] = [empty(tail), bufnr('^'.mkd[0].'$')] - let useb = bufnr > 0 && buflisted(bufnr) && emptytail - " Move to a replaceable window - let ncmd = ( useb ? ['b', 'bo vert sb'] : ['e', 'bo vne'] ) - \ + ( ur ? [] : ['ignruw'] ) - let fst = call('ctrlp#normcmd', ncmd) - " Check if the current window has a replaceable buffer - let repabl = !( md == 't' && !ur ) && empty(bufname('%')) && empty(&l:ft) - " Commands for the rest of the files - let [ic, cmds] = [1, { 'v': ['vert sb', 'vne'], 'h': ['sb', 'new'], - \ 't': ['tab sb', 'tabe'] }] - let [swb, &swb] = [&swb, ''] - if md == 't' && ctrlp#tabcount() < tabpagenr() - let s:tabct = ctrlp#tabcount() - en - " Open the files - for va in mkd - let bufnr = bufnr('^'.va.'$') - if bufnr < 0 && getftype(va) == '' | con | en - let useb = bufnr > 0 && buflisted(bufnr) && emptytail - let snd = md != '' && has_key(cmds, md) ? - \ ( useb ? cmds[md][0] : cmds[md][1] ) : ( useb ? 'vert sb' : 'vne' ) - let cmd = ic == 1 && ( !( !ur && fst =~ '^[eb]$' ) || repabl ) ? fst : snd - let conds = [( nr != '' && nr > 1 && nr < ic ) || ( nr == '' && ic > 1 ), - \ nr != '' && nr < ic] - if conds[nopt] - if !buflisted(bufnr) | cal s:openfile('bad', va, '', 0) | en - el - cal s:openfile(cmd, useb ? bufnr : va, tail, ic == 1) - if jf | if ic == 1 - let crpos = [tabpagenr(), winnr()] - el - let crpos[0] += tabpagenr() <= crpos[0] - let crpos[1] += winnr() <= crpos[1] - en | en - let ic += 1 - en - endfo - if jf && exists('crpos') && ic > 2 - exe ( md == 't' ? 'tabn '.crpos[0] : crpos[1].'winc w' ) - en - let &swb = swb - unl! s:tabct -endf - -fu! s:OpenNoMarks(md, line) - if a:md == 'a' - let [s:marked, key] = [{}, 1] - for line in s:lines - let s:marked = extend(s:marked, { key : fnamemodify(line, ':p') }) - let key += 1 - endfo - cal s:remarksigns() - cal s:BuildPrompt(0) - elsei a:md == 'x' - let type = has_key(s:openfunc, 'arg_type') ? s:openfunc['arg_type'] : 'dict' - let argms = type == 'dict' ? [{ 'action': a:md, 'line': a:line }] - \ : [a:md, a:line] - cal call(s:openfunc[s:ctype], argms, s:openfunc) - elsei a:md == 'd' - let dir = fnamemodify(a:line, ':h') - if isdirectory(dir) - cal ctrlp#setdir(dir) - cal ctrlp#switchtype(0) - cal ctrlp#recordhist() - cal s:PrtClear() - en - en -endf -" ** Helper functions {{{1 -" Sorting {{{2 -fu! ctrlp#complen(...) - " By length - let [len1, len2] = [strlen(a:1), strlen(a:2)] - retu len1 == len2 ? 0 : len1 > len2 ? 1 : -1 -endf - -fu! s:compmatlen(...) - " By match length - let mln1 = s:shortest(s:matchlens(a:1, s:compat)) - let mln2 = s:shortest(s:matchlens(a:2, s:compat)) - retu mln1 == mln2 ? 0 : mln1 > mln2 ? 1 : -1 -endf - -fu! s:comptime(...) - " By last modified time - let [time1, time2] = [getftime(a:1), getftime(a:2)] - retu time1 == time2 ? 0 : time1 < time2 ? 1 : -1 -endf - -fu! s:compmreb(...) - " By last entered time (bufnr) - let [id1, id2] = [index(s:mrbs, a:1), index(s:mrbs, a:2)] - retu id1 == id2 ? 0 : id1 > id2 ? 1 : -1 -endf - -fu! s:compmref(...) - " By last entered time (MRU) - let [id1, id2] = [index(g:ctrlp_lines, a:1), index(g:ctrlp_lines, a:2)] - retu id1 == id2 ? 0 : id1 > id2 ? 1 : -1 -endf - -fu! s:comparent(...) - " By same parent dir - if !stridx(s:crfpath, s:dyncwd) - let [as1, as2] = [s:dyncwd.s:lash().a:1, s:dyncwd.s:lash().a:2] - let [loc1, loc2] = [s:getparent(as1), s:getparent(as2)] - if loc1 == s:crfpath && loc2 != s:crfpath | retu -1 | en - if loc2 == s:crfpath && loc1 != s:crfpath | retu 1 | en - retu 0 - en - retu 0 -endf - -fu! s:compfnlen(...) - " By filename length - let len1 = strlen(split(a:1, s:lash)[-1]) - let len2 = strlen(split(a:2, s:lash)[-1]) - retu len1 == len2 ? 0 : len1 > len2 ? 1 : -1 -endf - -fu! s:matchlens(str, pat, ...) - if empty(a:pat) || index(['^', '$'], a:pat) >= 0 | retu {} | en - let st = a:0 ? a:1 : 0 - let lens = a:0 >= 2 ? a:2 : {} - let nr = a:0 >= 3 ? a:3 : 0 - if nr > 20 | retu {} | en - if match(a:str, a:pat, st) >= 0 - let [mst, mnd] = [matchstr(a:str, a:pat, st), matchend(a:str, a:pat, st)] - let lens = extend(lens, { nr : [strlen(mst), mst] }) - let lens = s:matchlens(a:str, a:pat, mnd, lens, nr + 1) - en - retu lens -endf - -fu! s:shortest(lens) - retu min(map(values(a:lens), 'v:val[0]')) -endf - -fu! s:mixedsort(...) - if s:itemtype == 1 - let pat = '[\/]\?\[\d\+\*No Name\]$' - if a:1 =~# pat && a:2 =~# pat | retu 0 - elsei a:1 =~# pat | retu 1 - elsei a:2 =~# pat | retu -1 | en - en - let [cln, cml] = [ctrlp#complen(a:1, a:2), s:compmatlen(a:1, a:2)] - if s:ispath - let ms = [] - if s:res_count < 21 - let ms += [s:compfnlen(a:1, a:2)] - if s:itemtype !~ '^[12]$' | let ms += [s:comptime(a:1, a:2)] | en - if !s:itemtype | let ms += [s:comparent(a:1, a:2)] | en - en - if s:itemtype =~ '^[12]$' - let ms += [s:compmref(a:1, a:2)] - let cln = cml ? cln : 0 - en - let ms += [cml, 0, 0, 0] - let mp = call('s:multipliers', ms[:3]) - retu cln + ms[0] * mp[0] + ms[1] * mp[1] + ms[2] * mp[2] + ms[3] * mp[3] - en - retu cln + cml * 2 -endf - -fu! s:multipliers(...) - let mp0 = !a:1 ? 0 : 2 - let mp1 = !a:2 ? 0 : 1 + ( !mp0 ? 1 : mp0 ) - let mp2 = !a:3 ? 0 : 1 + ( !( mp0 + mp1 ) ? 1 : ( mp0 + mp1 ) ) - let mp3 = !a:4 ? 0 : 1 + ( !( mp0 + mp1 + mp2 ) ? 1 : ( mp0 + mp1 + mp2 ) ) - retu [mp0, mp1, mp2, mp3] -endf - -fu! s:compval(...) - retu a:1 - a:2 -endf -" Statusline {{{2 -fu! ctrlp#statusline() - if !exists('s:statypes') - let s:statypes = copy(s:coretypes) - if !empty(g:ctrlp_ext_vars) - cal map(copy(g:ctrlp_ext_vars), - \ 'add(s:statypes, [ v:val["lname"], v:val["sname"] ])') - en - en - let tps = s:statypes - let max = len(tps) - 1 - let nxt = tps[s:walker(max, s:itemtype, 1)][1] - let prv = tps[s:walker(max, s:itemtype, -1)][1] - let s:ctype = tps[s:itemtype][0] - let focus = s:focus ? 'prt' : 'win' - let byfname = s:ispath ? s:byfname ? 'file' : 'path' : 'line' - let marked = s:opmul != '0' ? - \ exists('s:marked') ? ' <'.s:dismrk().'>' : ' <->' : '' - if s:status != {} - let argms = - \ has_key(s:status, 'arg_type') && s:status['arg_type'] == 'dict' ? [{ - \ 'focus': focus, - \ 'byfname': byfname, - \ 'regex': s:regexp, - \ 'prev': prv, - \ 'item': s:ctype, - \ 'next': nxt, - \ 'marked': marked, - \ }] : [focus, byfname, s:regexp, prv, s:ctype, nxt, marked] - let &l:stl = call(s:status['main'], argms, s:status) - el - let item = '%#CtrlPMode1# '.s:ctype.' %*' - let focus = '%#CtrlPMode2# '.focus.' %*' - let byfname = '%#CtrlPMode1# '.byfname.' %*' - let regex = s:regexp ? '%#CtrlPMode2# regex %*' : '' - let slider = ' <'.prv.'>={'.item.'}=<'.nxt.'>' - let dir = ' %=%<%#CtrlPMode2# %{getcwd()} %*' - let &l:stl = focus.byfname.regex.slider.marked.dir - en -endf - -fu! s:dismrk() - retu has('signs') ? len(s:marked) : - \ '%<'.join(values(map(copy(s:marked), 'split(v:val, "[\\/]")[-1]')), ', ') -endf - -fu! ctrlp#progress(enum, ...) - if has('macunix') || has('mac') | sl 1m | en - let txt = a:0 ? '(press ctrl-c to abort)' : '' - if s:status != {} - let argms = has_key(s:status, 'arg_type') && s:status['arg_type'] == 'dict' - \ ? [{ 'str': a:enum }] : [a:enum] - let &l:stl = call(s:status['prog'], argms, s:status) - el - let &l:stl = '%#CtrlPStats# '.a:enum.' %* '.txt.'%=%<%#CtrlPMode2# %{getcwd()} %*' - en - redraws -endf -" *** Paths {{{2 -" Line formatting {{{3 -fu! s:formatline(str) - let str = a:str - if s:itemtype == 1 - let filpath = fnamemodify(str, ':p') - let bufnr = s:nonamecond(str, filpath) - \ ? str2nr(matchstr(str, '[\/]\?\[\zs\d\+\ze\*No Name\]$')) - \ : bufnr('^'.filpath.'$') - let idc = ( bufnr == bufnr('#') ? '#' : '' ) - \ . ( getbufvar(bufnr, '&ma') ? '' : '-' ) - \ . ( getbufvar(bufnr, '&ro') ? '=' : '' ) - \ . ( getbufvar(bufnr, '&mod') ? '+' : '' ) - let str .= idc != '' ? ' '.idc : '' - en - let cond = s:ispath && ( s:winw - 4 ) < s:strwidth(str) - retu s:lineprefix.( cond ? s:pathshorten(str) : str ) -endf - -fu! s:pathshorten(str) - retu matchstr(a:str, '^.\{9}').'...' - \ .matchstr(a:str, '.\{'.( s:winw - 16 ).'}$') -endf - -fu! s:offset(lines, height) - let s:offset = s:mw_order == 'btt' ? ( a:height - s:res_count ) : 0 - retu s:offset > 0 ? ( repeat([''], s:offset) + a:lines ) : a:lines -endf -" Directory completion {{{3 -fu! s:dircompl(be, sd) - if a:sd == '' | retu [] | en - if a:be == '' - let [be, sd] = [s:dyncwd, a:sd] - el - let be = a:be.s:lash(a:be) - let sd = be.a:sd - en - let dirs = split(globpath(s:fnesc(be, 'g', ','), a:sd.'*/'), "\n") - if a:be == '' - let dirs = ctrlp#rmbasedir(dirs) - en - cal filter(dirs, '!match(v:val, escape(sd, ''~$.\''))' - \ . ' && v:val !~ ''\v(^|[\/])\.{1,2}[\/]$''') - retu dirs -endf - -fu! s:findcommon(items, seed) - let [items, id, cmn, ic] = [copy(a:items), strlen(a:seed), '', 0] - cal map(items, 'strpart(v:val, id)') - for char in split(items[0], '\zs') - for item in items[1:] - if item[ic] != char | let brk = 1 | brea | en - endfo - if exists('brk') | brea | en - let cmn .= char - let ic += 1 - endfo - retu cmn -endf -" Misc {{{3 -fu! s:headntail(str) - let parts = split(a:str, '[\/]\ze[^\/]\+[\/:]\?$') - retu len(parts) == 1 ? ['', parts[0]] : len(parts) == 2 ? parts : [] -endf - -fu! s:lash(...) - retu ( a:0 ? a:1 : s:dyncwd ) !~ '[\/]$' ? s:lash : '' -endf - -fu! s:ispathitem() - retu s:itemtype < 3 || ( s:itemtype > 2 && s:getextvar('type') == 'path' ) -endf - -fu! ctrlp#igncwd(cwd) - retu ctrlp#utils#glob(a:cwd, 0) == '' || - \ ( s:igntype >= 0 && s:usrign(a:cwd, getftype(a:cwd)) ) -endf - -fu! ctrlp#dirnfile(entries) - let [items, cwd] = [[[], []], s:dyncwd.s:lash()] - for each in a:entries - let etype = getftype(each) - if s:igntype >= 0 && s:usrign(each, etype) | con | en - if etype == 'dir' - if s:showhidden | if each !~ '[\/]\.\{1,2}$' - cal add(items[0], each) - en | el - cal add(items[0], each) - en - elsei etype == 'link' - if s:folsym - let isfile = !isdirectory(each) - if s:folsym == 2 || !s:samerootsyml(each, isfile, cwd) - cal add(items[isfile], each) - en - en - elsei etype == 'file' - cal add(items[1], each) - en - endfo - retu items -endf - -fu! s:usrign(item, type) - if s:igntype == 1 | retu a:item =~ s:usrign | end - if s:igntype == 2 - if call(s:usrign, [a:item, a:type]) - retu 1 - end - elsei s:igntype == 4 - if has_key(s:usrign, a:type) && s:usrign[a:type] != '' - \ && a:item =~ s:usrign[a:type] - retu 1 - elsei has_key(s:usrign, 'func') && s:usrign['func'] != '' - \ && call(s:usrign['func'], [a:item, a:type]) - retu 1 - end - end - retu 0 -endf - -fu! s:samerootsyml(each, isfile, cwd) - let resolve = fnamemodify(resolve(a:each), ':p:h') - let resolve .= s:lash(resolve) - retu !( stridx(resolve, a:cwd) && ( stridx(a:cwd, resolve) || a:isfile ) ) -endf - -fu! ctrlp#rmbasedir(items) - let cwd = s:dyncwd.s:lash() - if a:items != [] && !stridx(a:items[0], cwd) - let idx = strlen(cwd) - retu map(a:items, 'strpart(v:val, idx)') - en - retu a:items -endf -" Working directory {{{3 -fu! s:getparent(item) - let parent = substitute(a:item, '[\/][^\/]\+[\/:]\?$', '', '') - if parent == '' || parent !~ '[\/]' - let parent .= s:lash - en - retu parent -endf - -fu! s:findroot(curr, mark, depth, type) - let [depth, fnd] = [a:depth + 1, 0] - if type(a:mark) == 1 - let fnd = s:glbpath(s:fnesc(a:curr, 'g', ','), a:mark, 1) != '' - elsei type(a:mark) == 3 - for markr in a:mark - if s:glbpath(s:fnesc(a:curr, 'g', ','), markr, 1) != '' - let fnd = 1 - brea - en - endfo - en - if fnd - if !a:type | cal ctrlp#setdir(a:curr) | en - retu [exists('markr') ? markr : a:mark, a:curr] - elsei depth > s:maxdepth - cal ctrlp#setdir(s:cwd) - el - let parent = s:getparent(a:curr) - if parent != a:curr - retu s:findroot(parent, a:mark, depth, a:type) - en - en - retu [] -endf - -fu! ctrlp#setpathmode(pmode, ...) - if a:pmode == 'c' || ( a:pmode == 'a' && stridx(s:crfpath, s:cwd) < 0 ) - if exists('+acd') | let [s:glb_acd, &acd] = [&acd, 0] | en - cal ctrlp#setdir(s:crfpath) - retu 1 - elsei a:pmode == 'r' - let spath = a:0 ? a:1 : s:crfpath - let markers = ['.git', '.hg', '.svn', '.bzr', '_darcs'] - if type(s:rmarkers) == 3 && !empty(s:rmarkers) - if s:findroot(spath, s:rmarkers, 0, 0) != [] | retu 1 | en - cal filter(markers, 'index(s:rmarkers, v:val) < 0') - en - if s:findroot(spath, markers, 0, 0) != [] | retu 1 | en - en - retu 0 -endf - -fu! ctrlp#setdir(path, ...) - let cmd = a:0 ? a:1 : 'lc!' - sil! exe cmd s:fnesc(a:path, 'c') - let [s:crfilerel, s:dyncwd] = [fnamemodify(s:crfile, ':.'), getcwd()] -endf -" Fallbacks {{{3 -fu! s:glbpath(...) - retu call('ctrlp#utils#globpath', a:000) -endf - -fu! s:fnesc(...) - retu call('ctrlp#utils#fnesc', a:000) -endf - -fu! ctrlp#setlcdir() - if exists('*haslocaldir') - cal ctrlp#setdir(getcwd(), haslocaldir() ? 'lc!' : 'cd!') - en -endf -" Highlighting {{{2 -fu! ctrlp#syntax() - if ctrlp#nosy() | retu | en - for [ke, va] in items(s:hlgrps) | cal ctrlp#hicheck('CtrlP'.ke, va) | endfo - if synIDattr(synIDtrans(hlID('Normal')), 'bg') !~ '^-1$\|^$' - sil! exe 'hi CtrlPLinePre '.( has("gui_running") ? 'gui' : 'cterm' ).'fg=bg' - en - sy match CtrlPNoEntries '^ == NO ENTRIES ==$' - if hlexists('CtrlPLinePre') - sy match CtrlPLinePre '^>' - en -endf - -fu! s:highlight(pat, grp) - if s:matcher != {} | retu | en - cal clearmatches() - if !empty(a:pat) && s:ispath - if s:regexp - let pat = substitute(a:pat, '\\\@ \\zs', 'g') - cal matchadd(a:grp, ( s:martcs == '' ? '\c' : '\C' ).pat) - el - let pat = a:pat - - " get original characters so we can rebuild pat - let chars = split(pat, '\[\^\\\?.\]\\{-}') - - " Build a pattern like /a.*b.*c/ from abc (but with .\{-} non-greedy - " matchers instead) - let pat = join(chars, '.\{-}') - " Ensure we match the last version of our pattern - let ending = '\(.*'.pat.'\)\@!' - " Case sensitive? - let beginning = ( s:martcs == '' ? '\c' : '\C' ).'^.*' - if s:byfname - " Make sure there are no slashes in our match - let beginning = beginning.'\([^\/]*$\)\@=' - end - - for i in range(len(chars)) - " Surround our current target letter with \zs and \ze so it only - " actually matches that one letter, but has all preceding and trailing - " letters as well. - " \zsa.*b.*c - " a\(\zsb\|.*\zsb)\ze.*c - let charcopy = copy(chars) - if i == 0 - let charcopy[i] = '\zs'.charcopy[i].'\ze' - let middle = join(charcopy, '.\{-}') - else - let before = join(charcopy[0:i-1], '.\{-}') - let after = join(charcopy[i+1:-1], '.\{-}') - let c = charcopy[i] - " for abc, match either ab.\{-}c or a.*b.\{-}c in that order - let cpat = '\(\zs'.c.'\|'.'.*\zs'.c.'\)\ze.*' - let middle = before.cpat.after - endif - - " Now we matchadd for each letter, the basic form being: - " ^.*\zsx\ze.*$, but with our pattern we built above for the letter, - " and a negative lookahead ensuring that we only highlight the last - " occurrence of our letters. We also ensure that our matcher is case - " insensitive or sensitive depending. - cal matchadd(a:grp, beginning.middle.ending) - endfor - en - - cal matchadd('CtrlPLinePre', '^>') - en -endf - -fu! s:dohighlight() - retu s:mathi[0] && exists('*clearmatches') && !ctrlp#nosy() -endf -" Prompt history {{{2 -fu! s:gethistloc() - let utilcadir = ctrlp#utils#cachedir() - let cache_dir = utilcadir.s:lash(utilcadir).'hist' - retu [cache_dir, cache_dir.s:lash(cache_dir).'cache.txt'] -endf - -fu! s:gethistdata() - retu ctrlp#utils#readfile(s:gethistloc()[1]) -endf - -fu! ctrlp#recordhist() - let str = join(s:prompt, '') - if empty(str) || !s:maxhst | retu | en - let hst = s:hstry - if len(hst) > 1 && hst[1] == str | retu | en - cal extend(hst, [str], 1) - if len(hst) > s:maxhst | cal remove(hst, s:maxhst, -1) | en - cal ctrlp#utils#writecache(hst, s:gethistloc()[0], s:gethistloc()[1]) -endf -" Signs {{{2 -fu! s:unmarksigns() - if !s:dosigns() | retu | en - for key in keys(s:marked) - exe 'sign unplace' key 'buffer='.s:bufnr - endfo -endf - -fu! s:remarksigns() - if !s:dosigns() | retu | en - for ic in range(1, len(s:lines)) - let line = s:ispath ? fnamemodify(s:lines[ic - 1], ':p') : s:lines[ic - 1] - let key = s:dictindex(s:marked, line) - if key > 0 - exe 'sign place' key 'line='.ic.' name=ctrlpmark buffer='.s:bufnr - en - endfo -endf - -fu! s:dosigns() - retu exists('s:marked') && s:bufnr > 0 && s:opmul != '0' && has('signs') -endf -" Lists & Dictionaries {{{2 -fu! s:ifilter(list, str) - let [rlist, estr] = [[], substitute(a:str, 'v:val', 'each', 'g')] - for each in a:list - try - if eval(estr) - cal add(rlist, each) - en - cat | con | endt - endfo - retu rlist -endf - -fu! s:dictindex(dict, expr) - for key in keys(a:dict) - if a:dict[key] == a:expr | retu key | en - endfo - retu -1 -endf - -fu! s:vacantdict(dict) - retu filter(range(1, max(keys(a:dict))), '!has_key(a:dict, v:val)') -endf - -fu! s:sublist(l, s, e) - retu v:version > 701 ? a:l[(a:s):(a:e)] : s:sublist7071(a:l, a:s, a:e) -endf - -fu! s:sublist7071(l, s, e) - let [newlist, id, ae] = [[], a:s, a:e == -1 ? len(a:l) - 1 : a:e] - wh id <= ae - cal add(newlist, get(a:l, id)) - let id += 1 - endw - retu newlist -endf -" Buffers {{{2 -fu! s:buftab(bufnr, md) - for tabnr in range(1, tabpagenr('$')) - if tabpagenr() == tabnr && a:md == 't' | con | en - let buflist = tabpagebuflist(tabnr) - if index(buflist, a:bufnr) >= 0 - for winnr in range(1, tabpagewinnr(tabnr, '$')) - if buflist[winnr - 1] == a:bufnr | retu [tabnr, winnr] | en - endfo - en - endfo - retu [0, 0] -endf - -fu! s:bufwins(bufnr) - let winns = 0 - for tabnr in range(1, tabpagenr('$')) - let winns += count(tabpagebuflist(tabnr), a:bufnr) - endfo - retu winns -endf - -fu! s:nonamecond(str, filpath) - retu a:str =~ '[\/]\?\[\d\+\*No Name\]$' && !filereadable(a:filpath) - \ && bufnr('^'.a:filpath.'$') < 1 -endf - -fu! ctrlp#normcmd(cmd, ...) - if a:0 < 2 && s:nosplit() | retu a:cmd | en - let norwins = filter(range(1, winnr('$')), - \ 'empty(getbufvar(winbufnr(v:val), "&bt")) || s:isneovimterminal(v:val)') - for each in norwins - let bufnr = winbufnr(each) - if empty(bufname(bufnr)) && empty(getbufvar(bufnr, '&ft')) - let fstemp = each | brea - en - endfo - let norwin = empty(norwins) ? 0 : norwins[0] - if norwin - if index(norwins, winnr()) < 0 - exe ( exists('fstemp') ? fstemp : norwin ).'winc w' - en - retu a:cmd - en - retu a:0 ? a:1 : 'bo vne' -endf - -fu! ctrlp#modfilecond(w) - retu &mod && !&hid && &bh != 'hide' && s:bufwins(bufnr('%')) == 1 && !&cf && - \ ( ( !&awa && a:w ) || filewritable(fnamemodify(bufname('%'), ':p')) != 1 ) -endf - -fu! s:nosplit() - retu !empty(s:nosplit) && match([bufname('%'), &l:ft, &l:bt], s:nosplit) >= 0 -endf - -fu! s:setupblank() - setl noswf nonu nobl nowrap nolist nospell nocuc wfh - setl fdc=0 fdl=99 tw=0 bt=nofile bh=unload - if v:version > 702 - setl nornu noudf cc=0 - en -endf - -fu! s:leavepre() - if exists('s:bufnr') && s:bufnr == bufnr('%') | bw! | en - if !( exists(s:ccex) && !{s:ccex} ) - \ && !( has('clientserver') && len(split(serverlist(), "\n")) > 1 ) - cal ctrlp#clra() - en -endf - -fu! s:checkbuf() - if !exists('s:init') && exists('s:bufnr') && s:bufnr > 0 - exe s:bufnr.'bw!' - en -endf - -fu! s:iscmdwin() - let ermsg = v:errmsg - sil! noa winc p - sil! noa winc p - let [v:errmsg, ermsg] = [ermsg, v:errmsg] - retu ermsg =~ '^E11:' -endf -" Arguments {{{2 -fu! s:at(str) - if a:str =~ '\v^\@(cd|lc[hd]?|chd).*' - let str = substitute(a:str, '\v^\@(cd|lc[hd]?|chd)\s*', '', '') - if str == '' | retu 1 | en - let str = str =~ '^%:.\+' ? fnamemodify(s:crfile, str[1:]) : str - let path = fnamemodify(expand(str, 1), ':p') - if isdirectory(path) - if path != s:dyncwd - cal ctrlp#setdir(path) - cal ctrlp#setlines() - en - cal ctrlp#recordhist() - cal s:PrtClear() - en - retu 1 - en - retu 0 -endf - -fu! s:tail() - if exists('s:optail') && !empty('s:optail') - let tailpref = s:optail !~ '^\s*+' ? ' +' : ' ' - retu tailpref.s:optail - en - retu '' -endf - -fu! s:sanstail(str) - let str = s:spi ? - \ substitute(a:str, '^\(@.*$\|\\\\\ze@\|\.\.\zs[.\/]\+$\)', '', 'g') : a:str - let [str, pat] = [substitute(str, '\\\\', '\', 'g'), '\([^:]\|\\:\)*$'] - unl! s:optail - if str =~ '\\\@= 0 - retu char - elsei char =~# "\\v\|\|\|\|\|\" - cal s:BuildPrompt(0) - retu 'cancel' - elsei char =~# "\" && a:args != [] - retu a:args[0] - en - retu call(a:func, a:args) -endf - -fu! s:getregs() - let char = s:textdialog('Insert from register: ') - if char =~# "\\v\|\|\|\|\|\" - cal s:BuildPrompt(0) - retu -1 - elsei char =~# "\" - retu s:getregs() - en - retu s:regisfilter(char) -endf - -fu! s:regisfilter(reg) - retu substitute(getreg(a:reg), "[\t\n]", ' ', 'g') -endf -" Misc {{{2 -fu! s:modevar() - let s:matchtype = s:mtype() - let s:ispath = s:ispathitem() - let s:mfunc = s:mfunc() - let s:nolim = s:getextvar('nolim') - let s:dosort = s:getextvar('sort') - let s:spi = !s:itemtype || s:getextvar('specinput') > 0 -endf - -fu! s:nosort() - retu s:matcher != {} || s:nolim == 1 || ( s:itemtype == 2 && s:mrudef ) - \ || ( s:itemtype =~ '\v^(1|2)$' && s:prompt == ['', '', ''] ) || !s:dosort -endf - -fu! s:byfname() - retu s:ispath && s:byfname -endf - -fu! s:narrowable() - retu exists('s:act_add') && exists('s:matched') && s:matched != [] - \ && exists('s:mdata') && s:mdata[:2] == [s:dyncwd, s:itemtype, s:regexp] - \ && s:matcher == {} && !exists('s:did_exp') -endf - -fu! s:getinput(...) - let [prt, spi] = [s:prompt, ( a:0 ? a:1 : '' )] - if s:abbrev != {} - let gmd = has_key(s:abbrev, 'gmode') ? s:abbrev['gmode'] : '' - let str = ( gmd =~ 't' && !a:0 ) || spi == 'c' ? prt[0] : join(prt, '') - if gmd =~ 't' && gmd =~ 'k' && !a:0 && matchstr(str, '.$') =~ '\k' - retu join(prt, '') - en - let [pf, rz] = [( s:byfname() ? 'f' : 'p' ), ( s:regexp ? 'r' : 'z' )] - for dict in s:abbrev['abbrevs'] - let dmd = has_key(dict, 'mode') ? dict['mode'] : '' - let pat = escape(dict['pattern'], '~') - if ( dmd == '' || ( dmd =~ pf && dmd =~ rz && !a:0 ) - \ || dmd =~ '['.spi.']' ) && str =~ pat - let [str, s:did_exp] = [join(split(str, pat, 1), dict['expanded']), 1] - en - endfo - if gmd =~ 't' && !a:0 - let prt[0] = str - el - retu str - en - en - retu spi == 'c' ? prt[0] : join(prt, '') -endf - -fu! s:strwidth(str) - retu exists('*strdisplaywidth') ? strdisplaywidth(a:str) : strlen(a:str) -endf - -fu! ctrlp#j2l(nr) - exe 'norm!' a:nr.'G' - sil! norm! zvzz -endf - -fu! s:maxf(len) - retu s:maxfiles && a:len > s:maxfiles -endf - -fu! s:regexfilter(str) - let str = a:str - for key in keys(s:fpats) | if str =~ key - let str = substitute(str, s:fpats[key], '', 'g') - en | endfo - retu str -endf - -fu! s:walker(m, p, d) - retu a:d >= 0 ? a:p < a:m ? a:p + a:d : 0 : a:p > 0 ? a:p + a:d : a:m -endf - -fu! s:delent(rfunc) - if a:rfunc == '' | retu | en - let [s:force, tbrem] = [1, []] - if exists('s:marked') - let tbrem = values(s:marked) - cal s:unmarksigns() - unl s:marked - en - if tbrem == [] && ( has('dialog_gui') || has('dialog_con') ) && - \ confirm("Wipe all entries?", "&OK\n&Cancel") != 1 - unl s:force - cal s:BuildPrompt(0) - retu - en - let g:ctrlp_lines = call(a:rfunc, [tbrem]) - cal s:BuildPrompt(1) - unl s:force -endf - -fu! s:isneovimterminal(buf) - retu has('nvim') && getbufvar(a:buf, "&bt") == "terminal" -endf -" Entering & Exiting {{{2 -fu! s:getenv() - let [s:cwd, s:winres] = [getcwd(), [winrestcmd(), &lines, winnr('$')]] - let [s:crword, s:crnbword] = [expand('', 1), expand('', 1)] - let [s:crgfile, s:crline] = [expand('', 1), getline('.')] - let [s:winmaxh, s:crcursor] = [min([s:mw_max, &lines]), getpos('.')] - let [s:crbufnr, s:crvisual] = [bufnr('%'), s:lastvisual()] - let s:crfile = bufname('%') == '' - \ ? '['.s:crbufnr.'*No Name]' : expand('%:p', 1) - let s:crfpath = expand('%:p:h', 1) - let s:mrbs = ctrlp#mrufiles#bufs() -endf - -fu! s:lastvisual() - let cview = winsaveview() - let [ovreg, ovtype] = [getreg('v'), getregtype('v')] - let [oureg, outype] = [getreg('"'), getregtype('"')] - sil! norm! gv"vy - let selected = s:regisfilter('v') - cal setreg('v', ovreg, ovtype) - cal setreg('"', oureg, outype) - cal winrestview(cview) - retu selected -endf - -fu! s:log(m) - if exists('g:ctrlp_log') && g:ctrlp_log | if a:m - let cadir = ctrlp#utils#cachedir() - let apd = g:ctrlp_log > 1 ? '>' : '' - sil! exe 'redi! >'.apd cadir.s:lash(cadir).'ctrlp.log' - el - sil! redi END - en | en -endf - -fu! s:buffunc(e) - if a:e && has_key(s:buffunc, 'enter') - cal call(s:buffunc['enter'], [], s:buffunc) - elsei !a:e && has_key(s:buffunc, 'exit') - cal call(s:buffunc['exit'], [], s:buffunc) - en -endf - -fu! s:openfile(cmd, fid, tail, chkmod, ...) - let cmd = a:cmd - if a:chkmod && cmd =~ '^[eb]$' && ctrlp#modfilecond(!( cmd == 'b' && &aw )) - let cmd = cmd == 'b' ? 'sb' : 'sp' - en - let cmd = cmd =~ '^tab' ? ctrlp#tabcount().cmd : cmd - let j2l = a:0 && a:1[0] ? a:1[1] : 0 - exe cmd.( a:0 && a:1[0] ? '' : a:tail ) s:fnesc(a:fid, 'f') - if j2l - cal ctrlp#j2l(j2l) - en - if !empty(a:tail) - sil! norm! zvzz - en - if cmd != 'bad' - cal ctrlp#setlcdir() - en -endf - -fu! ctrlp#tabcount() - if exists('s:tabct') - let tabct = s:tabct - let s:tabct += 1 - elsei !type(s:tabpage) - let tabct = s:tabpage - elsei type(s:tabpage) == 1 - let tabpos = - \ s:tabpage =~ 'c' ? tabpagenr() : - \ s:tabpage =~ 'f' ? 1 : - \ s:tabpage =~ 'l' ? tabpagenr('$') : - \ tabpagenr() - let tabct = - \ s:tabpage =~ 'a' ? tabpos : - \ s:tabpage =~ 'b' ? tabpos - 1 : - \ tabpos - en - retu tabct < 0 ? 0 : tabct -endf - -fu! s:settype(type) - retu a:type < 0 ? exists('s:itemtype') ? s:itemtype : 0 : a:type -endf -" Matching {{{2 -fu! s:matchfname(item, pat) - let parts = split(a:item, '[\/]\ze[^\/]\+$') - let mfn = match(parts[-1], a:pat[0]) - retu len(a:pat) == 1 ? mfn : len(a:pat) == 2 ? - \ ( mfn >= 0 && ( len(parts) == 2 ? match(parts[0], a:pat[1]) : -1 ) >= 0 - \ ? 0 : -1 ) : -1 -endf - -fu! s:matchtabs(item, pat) - retu match(split(a:item, '\t\+')[0], a:pat) -endf - -fu! s:matchtabe(item, pat) - retu match(split(a:item, '\t\+[^\t]\+$')[0], a:pat) -endf - -fu! s:buildpat(lst) - let pat = a:lst[0] - for item in range(1, len(a:lst) - 1) - let pat .= '[^'.a:lst[item - 1].']\{-}'.a:lst[item] - endfo - retu pat -endf - -fu! s:mfunc() - let mfunc = 'match' - if s:byfname() - let mfunc = 's:matchfname' - elsei s:itemtype > 2 - let matchtypes = { 'tabs': 's:matchtabs', 'tabe': 's:matchtabe' } - if has_key(matchtypes, s:matchtype) - let mfunc = matchtypes[s:matchtype] - en - en - retu mfunc -endf - -fu! s:mmode() - let matchmodes = { - \ 'match': 'full-line', - \ 's:matchfname': 'filename-only', - \ 's:matchtabs': 'first-non-tab', - \ 's:matchtabe': 'until-last-tab', - \ } - retu matchmodes[s:mfunc] -endf -" Cache {{{2 -fu! s:writecache(cafile) - if ( g:ctrlp_newcache || !filereadable(a:cafile) ) && !s:nocache() - cal ctrlp#utils#writecache(g:ctrlp_allfiles) - let g:ctrlp_newcache = 0 - en -endf - -fu! s:nocache(...) - if !s:caching - retu 1 - elsei s:caching > 1 - if !( exists(s:ccex) && !{s:ccex} ) || has_key(s:ficounts, s:dyncwd) - retu get(s:ficounts, s:dyncwd, [0, 0])[0] < s:caching - elsei a:0 && filereadable(a:1) - retu len(ctrlp#utils#readfile(a:1)) < s:caching - en - retu 1 - en - retu 0 -endf - -fu! s:insertcache(str) - let [data, g:ctrlp_newcache, str] = [g:ctrlp_allfiles, 1, a:str] - if data == [] || strlen(str) <= strlen(data[0]) - let pos = 0 - elsei strlen(str) >= strlen(data[-1]) - let pos = len(data) - 1 - el - let pos = 0 - for each in data - if strlen(each) > strlen(str) | brea | en - let pos += 1 - endfo - en - cal insert(data, str, pos) - cal s:writecache(ctrlp#utils#cachefile()) -endf -" Extensions {{{2 -fu! s:mtype() - retu s:itemtype > 2 ? s:getextvar('type') : 'path' -endf - -fu! s:execextvar(key) - if !empty(g:ctrlp_ext_vars) - cal map(filter(copy(g:ctrlp_ext_vars), - \ 'has_key(v:val, a:key)'), 'eval(v:val[a:key])') - en -endf - -fu! s:getextvar(key) - if s:itemtype > 2 - let vars = g:ctrlp_ext_vars[s:itemtype - 3] - retu has_key(vars, a:key) ? vars[a:key] : -1 - en - retu get(g:, 'ctrlp_' . s:matchtype . '_' . a:key, -1) -endf - -fu! ctrlp#getcline() - let [linenr, offset] = [line('.'), ( s:offset > 0 ? s:offset : 0 )] - retu !empty(s:lines) && !( offset && linenr <= offset ) - \ ? s:lines[linenr - 1 - offset] : '' -endf - -fu! ctrlp#getmarkedlist() - retu exists('s:marked') ? values(s:marked) : [] -endf - -fu! ctrlp#clearmarkedlist() - let s:marked = {} -endf - -fu! ctrlp#exit() - cal s:PrtExit() -endf - -fu! ctrlp#prtclear() - cal s:PrtClear() -endf - -fu! ctrlp#switchtype(id) - cal s:ToggleType(a:id - s:itemtype) -endf - -fu! ctrlp#nosy() - retu !( has('syntax') && exists('g:syntax_on') ) -endf - -fu! ctrlp#hicheck(grp, defgrp) - if !hlexists(a:grp) - exe 'hi link' a:grp a:defgrp - en -endf - -fu! ctrlp#call(func, ...) - retu call(a:func, a:000) -endf - -fu! ctrlp#getvar(var) - retu {a:var} -endf -"}}}1 -" * Initialization {{{1 -fu! ctrlp#setlines(...) - if a:0 | let s:itemtype = a:1 | en - cal s:modevar() - let types = ['ctrlp#files()', 'ctrlp#buffers()', 'ctrlp#mrufiles#list()'] - if !empty(g:ctrlp_ext_vars) - cal map(copy(g:ctrlp_ext_vars), 'add(types, v:val["init"])') - en - let g:ctrlp_lines = eval(types[s:itemtype]) -endf - -" Returns [lname, sname] -fu! s:CurTypeName() - if s:itemtype < 3 - return s:coretypes[s:itemtype] - else - return [s:getextvar("lname"), s:getextvar('sname')] - endif -endfu - -fu! s:ExitIfSingleCandidate() - if len(s:Update(s:prompt[0])) == 1 - call s:AcceptSelection('e') - call ctrlp#exit() - return 1 - endif - return 0 -endfu - -fu! ctrlp#init(type, ...) - if exists('s:init') || s:iscmdwin() | retu | en - let [s:ermsg, v:errmsg] = [v:errmsg, ''] - let [s:matches, s:init] = [1, 1] - cal s:Reset(a:0 ? a:1 : {}) - noa cal s:Open() - cal s:SetWD(a:0 ? a:1 : {}) - cal s:MapNorms() - cal s:MapSpecs() - cal ctrlp#syntax() - cal ctrlp#setlines(s:settype(a:type)) - cal s:SetDefTxt() - let curName = s:CurTypeName() - let shouldExitSingle = index(s:opensingle, curName[0])>=0 || index(s:opensingle, curName[1])>=0 - if shouldExitSingle && s:ExitIfSingleCandidate() - return 0 - endif - cal s:BuildPrompt(1) - if s:keyloop | cal s:KeyLoop() | en - return 1 -endf -" - Autocmds {{{1 -if has('autocmd') - aug CtrlPAug - au! - au BufEnter ControlP cal s:checkbuf() - au BufLeave ControlP noa cal s:Close() - au VimLeavePre * cal s:leavepre() - aug END -en - -fu! s:autocmds() - if !has('autocmd') | retu | en - if exists('#CtrlPLazy') - au! CtrlPLazy - en - if s:lazy - aug CtrlPLazy - au! - au CursorHold ControlP cal s:ForceUpdate() - aug END - en -endf -"}}} - -" vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2 diff --git a/bundle/ctrlp/plugin/ctrlp.vim b/bundle/ctrlp/plugin/ctrlp.vim deleted file mode 100755 index 5f5303f..0000000 --- a/bundle/ctrlp/plugin/ctrlp.vim +++ /dev/null @@ -1,70 +0,0 @@ -" ============================================================================= -" File: plugin/ctrlp.vim -" Description: Fuzzy file, buffer, mru, tag, etc finder. -" Author: Kien Nguyen -" ============================================================================= -" GetLatestVimScripts: 3736 1 :AutoInstall: ctrlp.zip - -if ( exists('g:loaded_ctrlp') && g:loaded_ctrlp ) || v:version < 700 || &cp - fini -en -let g:loaded_ctrlp = 1 - -let [g:ctrlp_lines, g:ctrlp_allfiles, g:ctrlp_alltags, g:ctrlp_alldirs, - \ g:ctrlp_allmixes, g:ctrlp_buftags, g:ctrlp_ext_vars, g:ctrlp_builtins] - \ = [[], [], [], [], {}, {}, [], 2] - -if !exists('g:ctrlp_map') | let g:ctrlp_map = '' | en -if !exists('g:ctrlp_cmd') | let g:ctrlp_cmd = 'CtrlP' | en - -com! -n=? -com=dir CtrlP cal ctrlp#init(0, { 'dir': }) -com! -n=? -com=dir CtrlPMRUFiles cal ctrlp#init(2, { 'dir': }) - -com! -bar CtrlPBuffer cal ctrlp#init(1) -com! -n=? CtrlPLastMode cal ctrlp#init(-1, { 'args': }) - -com! -bar CtrlPClearCache cal ctrlp#clr() -com! -bar CtrlPClearAllCaches cal ctrlp#clra() - -com! -bar ClearCtrlPCache cal ctrlp#clr() -com! -bar ClearAllCtrlPCaches cal ctrlp#clra() - -com! -bar CtrlPCurWD cal ctrlp#init(0, { 'mode': '' }) -com! -bar CtrlPCurFile cal ctrlp#init(0, { 'mode': 'c' }) -com! -bar CtrlPRoot cal ctrlp#init(0, { 'mode': 'r' }) - -exe 'nn (ctrlp) :'.g:ctrlp_cmd.'' - -if g:ctrlp_map != '' && !hasmapto('(ctrlp)') - exe 'map' g:ctrlp_map '(ctrlp)' -en - -cal ctrlp#mrufiles#init() - -com! -bar CtrlPTag cal ctrlp#init(ctrlp#tag#id()) -com! -bar CtrlPQuickfix cal ctrlp#init(ctrlp#quickfix#id()) - -com! -n=? -com=dir CtrlPDir - \ cal ctrlp#init(ctrlp#dir#id(), { 'dir': }) - -com! -n=? -com=buffer CtrlPBufTag - \ cal ctrlp#init(ctrlp#buffertag#cmd(0, )) - -com! -bar CtrlPBufTagAll cal ctrlp#init(ctrlp#buffertag#cmd(1)) -com! -bar CtrlPRTS cal ctrlp#init(ctrlp#rtscript#id()) -com! -bar CtrlPUndo cal ctrlp#init(ctrlp#undo#id()) - -com! -n=? -com=buffer CtrlPLine - \ cal ctrlp#init(ctrlp#line#cmd(1, )) - -com! -n=? -com=buffer CtrlPChange - \ cal ctrlp#init(ctrlp#changes#cmd(0, )) - -com! -bar CtrlPChangeAll cal ctrlp#init(ctrlp#changes#cmd(1)) -com! -bar CtrlPMixed cal ctrlp#init(ctrlp#mixed#id()) -com! -bar CtrlPBookmarkDir cal ctrlp#init(ctrlp#bookmarkdir#id()) - -com! -n=? -com=dir -bang CtrlPBookmarkDirAdd - \ cal ctrlp#call('ctrlp#bookmarkdir#add', '', ) - -" vim:ts=2:sw=2:sts=2 diff --git a/bundle/easymotion/.gitignore b/bundle/easymotion/.gitignore deleted file mode 100755 index 5d0b4ff..0000000 --- a/bundle/easymotion/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -doc/tags -tmp* -*.lock -.vim-flavor diff --git a/bundle/easymotion/.travis.yml b/bundle/easymotion/.travis.yml deleted file mode 100755 index 09f727d..0000000 --- a/bundle/easymotion/.travis.yml +++ /dev/null @@ -1,10 +0,0 @@ -language: ruby -rvm: - - 2.0.0 -before_script: - - bundle install - - bundle show -script: - - rake ci -install: - - git clone https://github.com/kana/vim-vspec.git diff --git a/bundle/easymotion/Gemfile b/bundle/easymotion/Gemfile deleted file mode 100755 index c562fee..0000000 --- a/bundle/easymotion/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org/' - -gem 'vim-flavor', '~> 1.1' -gem 'rake' diff --git a/bundle/easymotion/README.md b/bundle/easymotion/README.md deleted file mode 100755 index fdf1385..0000000 --- a/bundle/easymotion/README.md +++ /dev/null @@ -1,321 +0,0 @@ -Vim motion on speed! -===== -[![Build Status](https://travis-ci.org/Lokaltog/vim-easymotion.svg?branch=master)](https://travis-ci.org/Lokaltog/vim-easymotion) - -![Animated demonstration](https://f.cloud.github.com/assets/3797062/2039359/a8e938d6-899f-11e3-8789-60025ea83656.gif) - -About the authors -===== - -| Authors | | -|------------------|-------------------------------| -| Kim Silkebækken | https://github.com/Lokaltog | -| haya14busa | https://github.com/haya14busa | - -The EasyMotion project, revived! -====== - -Starting from version 2.0 [haya14busa](https://github.com/haya14busa) will be -taking over the project from [Lokaltog](https://github.com/Lokaltog). He's -improved the default motions, implemented many useful new features, and fixed -some bugs. - -EasyMotion is now completely - -- **Well-behaved**: It's consistent with the default motions of Vim and works - well in all modes. And it now supports repeating with the dot operator. -- **Configurable**: You can easily configure its behavior and map it to any key -- **Sophisticated**: Provide flawless, smooth and fast motions with minimal keystrokes - -Even though some default behaviors were modified and many new features were -added, I carefully considered backward compatibility. So those of you updating -from older versions can do so without worry and start benefitting immediately -from all the new features! - -Introduction -===== - -EasyMotion provides a much simpler way to use some motions in vim. It -takes the `` out of `w` or `f{char}` by -highlighting all possible choices and allowing you to press one key to -jump directly to the target. - -When one of the available motions is triggered, all visible text -preceding or following the cursor is faded, and motion targets are -highlighted. - -EasyMotion is triggered by the provided mappings. This readme only covers the -basics; please refer to -[`:help easymotion.txt`](https://github.com/Lokaltog/vim-easymotion/blob/master/doc/easymotion.txt#L86) -to see all the available mappings. - -Important notes -===== - -### Default bindings - -**The default leader has been changed to `` to avoid -conflicts with other plugins you may have installed.** This can easily be -changed back to pre-1.3 behavior by rebinding the leader in your vimrc: - -```vim -map (easymotion-prefix) -``` - -All motions will then be triggered with `` by default, e.g. -`s`, `gE`. - -### For users of the forked version - -SelectLines and SelectPhrase are not actually *motions*, so I've moved them into -separate plugins. - -- https://github.com/haya14busa/vim-easyoperator-line -- https://github.com/haya14busa/vim-easyoperator-phrase - -Usage example for the base features -===== - - Lorem ipsum dolor sit amet. - -Type `w`(`(easymotion-w)`) to trigger the word motion `w`. -When the motion is triggered, the text is updated (no braces are actually added, -the text is highlighted in red by default): - - Lorem {a}psum {b}olor {c}it {d}met. - -Press `c` to jump to the beginning of the word "sit": - - Lorem ipsum dolor sit amet. - -Similarly, if you're looking for an "o", you can use the `f` motion. -Type `fo`, and all "o" characters are highlighted: - - L{a}rem ipsum d{b}l{c}r sit amet. - -Press `b` to jump to the second "o": - - Lorem ipsum dolor sit amet. - -Jeffrey Way of Nettuts+ has also [written -a tutorial](http://net.tutsplus.com/tutorials/other/vim-essential-plugin-easymotion/) -about EasyMotion. - - -New features in version 2.0 -==== - -### Two key highlighting - -When EasyMotion runs out of single characters to highlight movement targets, it -now shows you immediately the keys you have to press. - -In previous versions you could not see the next character you would need to -press until you entered the first one. This made movement over long distances -less fluid. Now you can see at a glance exactly which characters to select to -get to your destination. - -### Bidirectional motions - -All motions now come in a bidirectional variants (e.g. `(easymotion-s)`, -`(easymotion-bd-w)` and so forth). -By default, you can already jump forward or backward with `s`. A useful -trick is to map `nmap s (easymotion-s)` to use `s` instead and save one -keystroke! - -### 2-character search motion - -You can now also perform a 2-character search, similar to [vim-seek](https://github.com/goldfeld/vim-seek)/[vim-sneak](https://github.com/justinmk/vim-sneak) with `(easymotion-s2)`. For example you can highlight all words that start with `fu`. - -![2-key-find-motion](https://f.cloud.github.com/assets/3797062/2039612/7cafcec8-89a5-11e3-8f2c-5f26a6b83efd.gif) - -```vim -" Gif config -nmap s (easymotion-s2) -nmap t (easymotion-t2) -``` - -### n-character search motion - -You can also search for `n` characters, which basically can be used to replace the default search of Vim. -It supports incremental highlighting and you can use `` and `` to scroll down/up a page. If you press -`` you get the usual EasyMotion highlighting and can jump to any matching target destination with a -single keystroke. - -What sounds complicated should become clear if you look at the following examples. - -![n-key-motion-scroll](https://f.cloud.github.com/assets/3797062/2039254/4fbf7276-899e-11e3-9bf3-1e446cabc097.gif) - -![replace-search](https://f.cloud.github.com/assets/3797062/2039751/64b72bd8-89a8-11e3-80ea-2a6b578040b2.gif) - -```vim -" Gif config -map / (easymotion-sn) -omap / (easymotion-tn) - -" These `n` & `N` mappings are options. You do not have to map `n` & `N` to EasyMotion. -" Without these mappings, `n` & `N` works fine. (These mappings just provide -" different highlight method and have some other features ) -map n (easymotion-next) -map N (easymotion-prev) -``` - -### Within line motion - -Every motion also has variants that are restricted to just the current line -(e.g. `(easymotion-sl)`, `(easymotion-bd-wl)`, etc...). This can be -helpful if you find the full search distracting or slows down vim. - -### hjkl motions - -EasyMotion can be configured to avoid repetitive use of the `h` `j` `k` and -`l` keys. - -![hjkl-motion](https://f.cloud.github.com/assets/3797062/2039413/d8b32ab2-89a0-11e3-894f-3e81db084cfd.gif) - -```vim -" Gif config -map l (easymotion-lineforward) -map j (easymotion-j) -map k (easymotion-k) -map h (easymotion-linebackward) - -let g:EasyMotion_startofline = 0 " keep cursor colum when JK motion -``` - -### Smartcase & Smartsign - -This setting makes EasyMotion work similarly to Vim's `smartcase` option for -global searches. - -```vim -let g:EasyMotion_smartcase = 1 -``` - -With this option set, `v` will match both `v` and `V`, but `V` will match `V` -only. Default: 0. - -```vim -let g:EasyMotion_use_smartsign_us = 1 " US layout -" or -let g:EasyMotion_use_smartsign_jp = 1 " JP layout -``` - -This applies the same concept, but for symbols and numerals. `1` will match `1` -and `!`; `!` matches `!` only. Default: 0. - - -### Migemo feature (for Japanese user) - -```vim -let g:EasyMotion_use_migemo = 1 -``` - - -Easymotion can match multibyte Japanese characters with alphabetical input. -For example, `sa` can search 'あ'. -This feature doesn't require cmigemo because Easymotion includes regex -patterns generated by cmigemo. However, installing `cmigemo` will make -2-character and n-character search motions to also support the migemo feature. -Default:0 - - -### Repeat motions - -#### Repeat the last motion - -`(easymotion-repeat)` - -#### Repeat the last find motion - -In a find motion (e.g. `(easymotion-s)`), type `` without -input characters to find the last motion again. - -#### Jump to next/previous match (even on next/previous page) - -* `(easymotion-next)` -* `(easymotion-prev)` - -#### Support for dot repeat - -This requires https://github.com/tpope/vim-repeat. - -You can use EasyMotion with operators and press `.` to repeat! -It is well-behaved, and consistent with the default behavior of Vim. - -![repeat-motion](https://f.cloud.github.com/assets/3797062/2039538/0aef66aa-89a4-11e3-8242-c27a5208cfca.gif) - -```vim -" Gif config - -" Require tpope/vim-repeat to enable dot repeat support -" Jump to anywhere with only `s{char}{target}` -" `s` repeat last find motion. -nmap s (easymotion-s) -" Bidirectional & within line 't' motion -omap t (easymotion-bd-tl) -" Use uppercase target labels and type as a lower case -let g:EasyMotion_use_upper = 1 - " type `l` and match `l`&`L` -let g:EasyMotion_smartcase = 1 -" Smartsign (type `3` and match `3`&`#`) -let g:EasyMotion_use_smartsign_us = 1 -``` - - -Installation ------------- -### Pathogen (https://github.com/tpope/vim-pathogen) -``` -git clone https://github.com/Lokaltog/vim-easymotion ~/.vim/bundle/vim-easymotion -``` - -### Vundle (https://github.com/gmarik/vundle) -``` -Plugin 'Lokaltog/vim-easymotion' -``` - -### NeoBundle (https://github.com/Shougo/neobundle.vim) -``` -NeoBundle 'Lokaltog/vim-easymotion' -``` - -Minimal Configuration Tutorial ------------------------------- -**I recommend configuring and map keys by yourself if you are true Vimmer.** - -**Please do not be satisfied with just installing vim-easymotion, configuring it yourself boost your productivity more and more!** - -Default `` prefix isn't easy to press, and I leave them just for backwards compatibility. -You should at least change prefix key like this `map (easymotion-prefix)` - -Minimal but useful vimrc example: - -``` -let g:EasyMotion_do_mapping = 0 " Disable default mappings - -" Bi-directional find motion -" Jump to anywhere you want with minimal keystrokes, with just one key binding. -" `s{char}{label}` -nmap s (easymotion-s) -" or -" `s{char}{char}{label}` -" Need one more keystroke, but on average, it may be more comfortable. -nmap s (easymotion-s2) - -" Turn on case sensitive feature -let g:EasyMotion_smartcase = 1 - -" JK motions: Line motions -map j (easymotion-j) -map k (easymotion-k) -``` -Now, all you need to remember is `s` and JK motions bindings, and it's good enough to boost your cursor speed! - -**`s`** is bidirectional find motion, you can move to anywhere with it. - -**`j`** & **`k`** make it easy to move to the lines. - -Of course you can use any key you want instead of `s` such as ``, `s`, etc... - -If you want to use more useful mappings, please see [:h easymotion.txt](https://github.com/Lokaltog/vim-easymotion/blob/master/doc/easymotion.txt) for more detail. diff --git a/bundle/easymotion/Rakefile b/bundle/easymotion/Rakefile deleted file mode 100755 index 63a3a36..0000000 --- a/bundle/easymotion/Rakefile +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env rake - -task :ci => [:dump, :test] - -task :dump do - sh 'vim --version' -end - -task :test do - sh 'bundle exec vim-flavor test' -end diff --git a/bundle/easymotion/autoload/EasyMotion.vim b/bundle/easymotion/autoload/EasyMotion.vim deleted file mode 100755 index 4135b4f..0000000 --- a/bundle/easymotion/autoload/EasyMotion.vim +++ /dev/null @@ -1,1538 +0,0 @@ -scriptencoding utf-8 -" EasyMotion - Vim motions on speed! -" -" Author: Kim Silkebækken -" haya14busa -" Source: https://github.com/Lokaltog/vim-easymotion -"============================================================================= -" Saving 'cpoptions' {{{ -let s:save_cpo = &cpo -set cpo&vim -" }}} -" Init: {{{ -function! EasyMotion#init() - call EasyMotion#highlight#load() - " Store previous motion info - let s:previous = {} - " Store previous operator-pending motion info for '.' repeat - let s:dot_repeat = {} - " Prepare 1-key Migemo Dictionary - let s:migemo_dicts = {} - let s:EasyMotion_is_active = 0 - call EasyMotion#reset() - " Anywhere regular expression: {{{ - let re = '\v' . - \ '(<.|^$)' . '|' . - \ '(.>|^$)' . '|' . - \ '(\l)\zs(\u)' . '|' . - \ '(_\zs.)' . '|' . - \ '(#\zs.)' - " 1. word - " 2. end of word - " 3. CamelCase - " 4. after '_' hoge_foo - " 5. after '#' hoge#foo - let g:EasyMotion_re_anywhere = get(g:, 'EasyMotion_re_anywhere', re) - - " Anywhere regular expression within line: - let re = '\v' . - \ '(<.|^$)' . '|' . - \ '(.>|^$)' . '|' . - \ '(\l)\zs(\u)' . '|' . - \ '(_\zs.)' . '|' . - \ '(#\zs.)' - let g:EasyMotion_re_line_anywhere = get(g:, 'EasyMotion_re_line_anywhere', re) - "}}} - " For other plugin - let s:EasyMotion_is_cancelled = 0 - " 0 -> Success - " 1 -> Cancel - let g:EasyMotion_ignore_exception = 0 - return "" -endfunction -"}}} -" Reset: {{{ -function! EasyMotion#reset() - let s:flag = { - \ 'within_line' : 0, - \ 'dot_repeat' : 0, - \ 'regexp' : 0, - \ 'bd_t' : 0, - \ 'find_bd' : 0, - \ 'linewise' : 0, - \ 'count_dot_repeat' : 0, - \ } - " regexp: -> regular expression - " This value is used when multi input find motion. If this values is - " 1, input text is treated as regexp.(Default: escaped) - " bd_t: -> bi-directional 't' motion - " This value is used to re-define regexp only for bi-directional 't' - " motion - " find_bd: -> bi-directional find motion - " This value is used to recheck the motion is inclusive or exclusive - " because 'f' & 't' forward find motion is inclusive, but 'F' & 'T' - " backward find motion is exclusive - " count_dot_repeat: -> dot repeat with count - " https://github.com/Lokaltog/vim-easymotion/issues/164 - let s:current = { - \ 'is_operator' : 0, - \ 'is_search' : 0, - \ 'dot_repeat_target_cnt' : 0, - \ 'dot_prompt_user_cnt' : 0, - \ 'changedtick' : 0, - \ } - " \ 'start_position' : [], - " \ 'cursor_position' : [], - - " is_operator: - " Store is_operator value first because mode(1) value will be - " changed by some operation. - " dot_* : - " These values are used when '.' repeat for automatically - " select marker/label characters.(Using count avoid recursive - " prompt) - " changedtick: - " :h b:changedtick - " This value is used to avoid side effect of overwriting buffer text - " which will change b:changedtick value. To overwrite g:repeat_tick - " value(defined tpope/vim-repeat), I can avoid this side effect of - " conflicting with tpope/vim-repeat - " start_position: - " Original, start cursor position. - " cursor_position: - " Usually, this values is same with start_position, but in - " visualmode and 'n' key motion, this value could be different. - return "" -endfunction "}}} - -" Motion Functions: {{{ -" -- Find Motion ------------------------- -" Note: {{{ -" num_strokes: -" The number of input characters. Currently provide 1, 2, or -1. -" '-1' means no limit. -" visualmode: -" Vim script couldn't detect the function is called in visual mode by -" mode(1), so tell whether it is in visual mode by argument explicitly -" direction: -" 0 -> forward -" 1 -> backward -" 2 -> bi-direction (handle forward & backward at the same time) }}} -function! EasyMotion#S(num_strokes, visualmode, direction) " {{{ - if a:direction == 1 - let is_inclusive = 0 - else - " Note: Handle bi-direction later because 'f' motion is inclusive but - " 'F' motion is exclusive - let is_inclusive = mode(1) ==# 'no' ? 1 : 0 - endif - let s:flag.find_bd = a:direction == 2 ? 1 : 0 - let re = s:findMotion(a:num_strokes, a:direction) - if s:handleEmpty(re, a:visualmode) | return | endif - call s:EasyMotion(re, a:direction, a:visualmode ? visualmode() : '', is_inclusive) - return s:EasyMotion_is_cancelled -endfunction " }}} -function! EasyMotion#T(num_strokes, visualmode, direction) " {{{ - if a:direction == 1 - let is_inclusive = 0 - else - " Note: Handle bi-direction later because 't' motion is inclusive but - " 'T' motion is exclusive - let is_inclusive = mode(1) ==# 'no' ? 1 : 0 - endif - let s:flag.find_bd = a:direction == 2 ? 1 : 0 - let re = s:findMotion(a:num_strokes, a:direction) - if s:handleEmpty(re, a:visualmode) | return | endif - if a:direction == 2 - let s:flag.bd_t = 1 - elseif a:direction == 1 - let re = s:convert_t_regexp(re, 1) " backward - else - let re = s:convert_t_regexp(re, 0) " forward - endif - call s:EasyMotion(re, a:direction, a:visualmode ? visualmode() : '', is_inclusive) - return s:EasyMotion_is_cancelled -endfunction " }}} -" -- Word Motion ------------------------- -function! EasyMotion#WB(visualmode, direction) " {{{ - "FIXME: inconsistent with default vim motion - "FIXED: -> EasyMotion#WBK() - let s:current.is_operator = mode(1) ==# 'no' ? 1: 0 - call s:EasyMotion('\(\<.\|^$\)', a:direction, a:visualmode ? visualmode() : '', 0) - return s:EasyMotion_is_cancelled -endfunction " }}} -function! EasyMotion#WBW(visualmode, direction) " {{{ - let s:current.is_operator = mode(1) ==# 'no' ? 1: 0 - call s:EasyMotion('\(\(^\|\s\)\@<=\S\|^$\)', a:direction, a:visualmode ? visualmode() : '', 0) - return s:EasyMotion_is_cancelled -endfunction " }}} -function! EasyMotion#WBK(visualmode, direction) " {{{ - " vim's iskeyword style word motion - let s:current.is_operator = mode(1) ==# 'no' ? 1: 0 - call s:EasyMotion('\(\(\<\|\>\|\s\)\@<=\S\|^$\)', a:direction, a:visualmode ? visualmode() : '', 0) - return s:EasyMotion_is_cancelled -endfunction " }}} -function! EasyMotion#E(visualmode, direction) " {{{ - let s:current.is_operator = mode(1) ==# 'no' ? 1: 0 - let is_inclusive = mode(1) ==# 'no' ? 1 : 0 - call s:EasyMotion('\(.\>\|^$\)', a:direction, a:visualmode ? visualmode() : '', is_inclusive) - return s:EasyMotion_is_cancelled -endfunction " }}} -function! EasyMotion#EW(visualmode, direction) " {{{ - let s:current.is_operator = mode(1) ==# 'no' ? 1: 0 - let is_inclusive = mode(1) ==# 'no' ? 1 : 0 - call s:EasyMotion('\(\S\(\s\|$\)\|^$\)', a:direction, a:visualmode ? visualmode() : '', is_inclusive) - return s:EasyMotion_is_cancelled -endfunction " }}} -function! EasyMotion#EK(visualmode, direction) " {{{ - " vim's iskeyword style word motion - let s:current.is_operator = mode(1) ==# 'no' ? 1: 0 - let is_inclusive = mode(1) ==# 'no' ? 1 : 0 - call s:EasyMotion('\(\S\(\>\|\<\|\s\)\@=\|^$\)', a:direction, a:visualmode ? visualmode() : '', is_inclusive) - return s:EasyMotion_is_cancelled -endfunction " }}} -" -- JK Motion --------------------------- -function! EasyMotion#JK(visualmode, direction) " {{{ - let s:current.is_operator = mode(1) ==# 'no' ? 1: 0 - let s:flag.linewise = 1 - - if g:EasyMotion_startofline - call s:EasyMotion('^\(\w\|\s*\zs\|$\)', a:direction, a:visualmode ? visualmode() : '', 0) - else - let c = col('.') - let pattern = printf('^.\{-}\zs\(\%%<%dv.\%%>%dv\|$\)', c + 1, c) - call s:EasyMotion(pattern, a:direction, a:visualmode ? visualmode() : '', 0) - endif - return s:EasyMotion_is_cancelled -endfunction " }}} -function! EasyMotion#Sol(visualmode, direction) " {{{ - let s:current.is_operator = mode(1) ==# 'no' ? 1: 0 - let s:flag.linewise = 1 - call s:EasyMotion('^\(.\|$\)', a:direction, a:visualmode ? visualmode() : '', '') - return s:EasyMotion_is_cancelled -endfunction " }}} -function! EasyMotion#Eol(visualmode, direction) " {{{ - let s:flag.linewise = 1 - let s:current.is_operator = mode(1) ==# 'no' ? 1: 0 - call s:EasyMotion('\(\w\|\s*\zs\|.\|^\)$', a:direction, a:visualmode ? visualmode() : '', '') - return s:EasyMotion_is_cancelled -endfunction " }}} -" -- Search Motion ----------------------- -function! EasyMotion#Search(visualmode, direction, respect_direction) " {{{ - let s:current.is_operator = mode(1) ==# 'no' ? 1: 0 - let search_direction = a:respect_direction ? - \ (a:direction == 1 ? v:searchforward : 1-v:searchforward) : - \ (a:direction) - call s:EasyMotion(@/, search_direction, a:visualmode ? visualmode() : '', 0) - return s:EasyMotion_is_cancelled -endfunction " }}} -" -- JumpToAnywhere Motion --------------- -function! EasyMotion#JumpToAnywhere(visualmode, direction) " {{{ - let s:current.is_operator = mode(1) ==# 'no' ? 1: 0 - call s:EasyMotion( g:EasyMotion_re_anywhere, a:direction, a:visualmode ? visualmode() : '', 0) - return s:EasyMotion_is_cancelled -endfunction " }}} -" -- Line Motion ------------------------- -function! EasyMotion#SL(num_strokes, visualmode, direction) " {{{ - let s:flag.within_line = 1 - call EasyMotion#S(a:num_strokes, a:visualmode, a:direction) - return s:EasyMotion_is_cancelled -endfunction " }}} -function! EasyMotion#TL(num_strokes, visualmode, direction) " {{{ - let s:flag.within_line = 1 - call EasyMotion#T(a:num_strokes, a:visualmode, a:direction) - return s:EasyMotion_is_cancelled -endfunction " }}} -function! EasyMotion#WBL(visualmode, direction) " {{{ - let s:flag.within_line = 1 - call EasyMotion#WBK(a:visualmode, a:direction) - return s:EasyMotion_is_cancelled -endfunction " }}} -function! EasyMotion#EL(visualmode, direction) " {{{ - let s:flag.within_line = 1 - call EasyMotion#EK(a:visualmode, a:direction) - return s:EasyMotion_is_cancelled -endfunction " }}} -function! EasyMotion#LineAnywhere(visualmode, direction) " {{{ - let s:flag.within_line = 1 - let s:current.is_operator = mode(1) ==# 'no' ? 1: 0 - let re = g:EasyMotion_re_line_anywhere - call s:EasyMotion(re, a:direction, a:visualmode ? visualmode() : '', 0) - return s:EasyMotion_is_cancelled -endfunction " }}} -" -- User Motion ------------------------- -function! EasyMotion#User(pattern, visualmode, direction, inclusive) " {{{ - let s:current.is_operator = mode(1) ==# 'no' ? 1: 0 - let is_inclusive = mode(1) ==# 'no' ? a:inclusive : 0 - let re = a:pattern - call s:EasyMotion(re, a:direction, a:visualmode ? visualmode() : '', is_inclusive) - return s:EasyMotion_is_cancelled -endfunction " }}} -" -- Repeat Motion ----------------------- -function! EasyMotion#Repeat(visualmode) " {{{ - " Repeat previous motion with previous targets - if !has_key(s:previous, 'regexp') - call s:Message("Previous targets doesn't exist") - let s:EasyMotion_is_cancelled = 1 - return s:EasyMotion_is_cancelled - endif - let re = s:previous.regexp - let direction = s:previous.direction - let s:flag.within_line = s:previous.line_flag - let s:flag.bd_t = s:previous.bd_t_flag - let s:current.is_operator = mode(1) ==# 'no' ? 1: 0 - " FIXME: is_inclusive value is inappropriate but handling this value is - " difficult and priorities is low because this motion maybe used usually - " as a 'normal' motion. - let is_inclusive = mode(1) ==# 'no' ? 1 : 0 - - call s:EasyMotion(re, direction, a:visualmode ? visualmode() : '', is_inclusive) - return s:EasyMotion_is_cancelled -endfunction " }}} -function! EasyMotion#DotRepeat() " {{{ - let cnt = v:count1 " avoid overwriting - - " Repeat previous '.' motion with previous targets and operator - if !has_key(s:dot_repeat, 'regexp') - call s:Message("Previous motion doesn't exist") - let s:EasyMotion_is_cancelled = 1 - return s:EasyMotion_is_cancelled - endif - - let re = s:dot_repeat.regexp - let direction = s:dot_repeat.direction - let is_inclusive = s:dot_repeat.is_inclusive - - for i in range(cnt) - " s:EasyMotion() always call reset s:flag & s:current - let s:flag.dot_repeat = 1 - let s:flag.within_line = s:dot_repeat.line_flag - let s:flag.bd_t = s:dot_repeat.bd_t_flag - let s:current.is_operator = 1 - - let s:flag.count_dot_repeat = (i > 0 ? 1 : 0) - silent call s:EasyMotion(re, direction, 0, is_inclusive) - endfor - return s:EasyMotion_is_cancelled -endfunction " }}} -function! EasyMotion#NextPrevious(visualmode, direction) " {{{ - " Move next/previous destination using previous motion regexp - let cnt = v:count1 " avoid overwriting - if !has_key(s:previous, 'regexp') - call s:Message("Previous targets doesn't exist") - let s:EasyMotion_is_cancelled = 1 - return s:EasyMotion_is_cancelled - endif - let re = s:previous.regexp - let search_direction = (a:direction >= 1 ? 'b' : '') - - if g:EasyMotion_move_highlight - call EasyMotion#highlight#attach_autocmd() - call EasyMotion#highlight#add_highlight(re, g:EasyMotion_hl_move) - endif - - if ! empty(a:visualmode) - " FIXME: blink highlight - silent exec 'normal! gv' - endif - - " Mark jump-list - if cnt > 1 - " Consider Next/Previous motions as jump motion :h jump-motion - " Note: It should add jumplist even if the count isn't given - " considering vim's default behavior of `n` & `N`, but just - " I don't want to do it without the count. Should I add a - " option? - normal! m` - endif - - " Jump - " @vimlint(EVL102, 1, l:_) - for _ in range(cnt) - keepjumps call searchpos(re, search_direction) - endfor - - normal! zv - - call EasyMotion#reset() - " -- Activate EasyMotion ----------------- {{{ - let s:EasyMotion_is_active = 1 - call EasyMotion#attach_active_autocmd() "}}} - return s:EasyMotion_is_cancelled -endfunction " }}} -" }}} -" Helper Functions: {{{ -" -- Message ----------------------------- -function! s:Message(message) " {{{ - echo 'EasyMotion: ' . a:message -endfunction " }}} -function! s:Prompt(message) " {{{ - echohl Question - echo a:message . ': ' - echohl None -endfunction " }}} -function! s:Throw(message) "{{{ - throw 'EasyMotion: ' . a:message -endfunction "}}} - -" -- Save & Restore values --------------- -function! s:SaveValue() "{{{ - if ! s:current.is_search - call EasyMotion#helper#VarReset('&scrolloff', 0) - endif - call EasyMotion#helper#VarReset('&modified', 0) - call EasyMotion#helper#VarReset('&modifiable', 1) - call EasyMotion#helper#VarReset('&readonly', 0) - call EasyMotion#helper#VarReset('&spell', 0) - call EasyMotion#helper#VarReset('&virtualedit', '') - " if &foldmethod !=# 'expr' - call EasyMotion#helper#VarReset('&foldmethod', 'manual') - " endif -endfunction "}}} -function! s:RestoreValue() "{{{ - call EasyMotion#helper#VarReset('&scrolloff') - call EasyMotion#helper#VarReset('&modified') - call EasyMotion#helper#VarReset('&modifiable') - call EasyMotion#helper#VarReset('&readonly') - call EasyMotion#helper#VarReset('&spell') - call EasyMotion#helper#VarReset('&virtualedit') - " if &foldmethod !=# 'expr' - call EasyMotion#helper#VarReset('&foldmethod') - " endif -endfunction "}}} -function! s:turn_off_hl_error() "{{{ - let s:error_hl = EasyMotion#highlight#capture('Error') - call EasyMotion#highlight#turn_off(s:error_hl) - let s:matchparen_hl = EasyMotion#highlight#capture('MatchParen') - call EasyMotion#highlight#turn_off(s:matchparen_hl) -endfunction "}}} -function! s:turn_on_hl_error() "{{{ - if exists('s:error_hl') - call EasyMotion#highlight#turn_on(s:error_hl) - unlet s:error_hl - endif - - if exists('s:matchparen_hl') - call EasyMotion#highlight#turn_on(s:matchparen_hl) - unlet s:matchparen_hl - endif -endfunction "}}} - -" -- Draw -------------------------------- -function! s:SetLines(lines, key) " {{{ - for [line_num, line] in a:lines - keepjumps call setline(line_num, line[a:key]) - endfor -endfunction " }}} - -" -- Get characters from user input ------ -function! s:GetChar() " {{{ - let char = getchar() - if char == 27 - " Escape key pressed - redraw - call s:Message('Cancelled') - return '' - endif - return nr2char(char) -endfunction " }}} - -" -- Find Motion Helper ------------------ -function! s:findMotion(num_strokes, direction) "{{{ - " Find Motion: S,F,T - let s:current.is_operator = mode(1) ==# 'no' ? 1: 0 - " store cursor pos because 'n' key find motion could be jump to offscreen - let s:current.original_position = [line('.'), col('.')] - let s:current.is_search = a:num_strokes == -1 ? 1: 0 - let s:flag.regexp = a:num_strokes == -1 ? 1 : 0 " TODO: remove? - - if g:EasyMotion_add_search_history && a:num_strokes == -1 - let s:previous['input'] = @/ - else - let s:previous['input'] = get(s:previous, 'input', '') - endif - let input = EasyMotion#command_line#GetInput( - \ a:num_strokes, s:previous.input, a:direction) - let s:previous['input'] = input - - " Check that we have an input char - if empty(input) - return '' - endif - - let re = s:convertRegep(input) - - if g:EasyMotion_add_search_history && a:num_strokes == -1 - let history_re = substitute(re, '\\c\|\\C', '', '') - let @/ = history_re "For textobject: 'gn' - call histadd('search', history_re) - endif - - return re -endfunction "}}} -function! s:convertRegep(input) "{{{ - " 1. regexp - " 2. migemo - " 3. smartsign - " 4. smartcase - let re = s:should_use_regexp() ? a:input : s:escape_regexp_char(a:input) - - " Convert space to match only start of spaces - if re ==# ' ' - let re = '\s\+' - endif - - if s:should_use_migemo(a:input) - let re = s:convertMigemo(re) - endif - - if s:should_use_smartsign(a:input) - let re = s:convertSmartsign(a:input) - endif - - let case_flag = EasyMotion#helper#should_case_sensitive( - \ a:input, s:current.is_search) ? '\c' : '\C' - let re = case_flag . re - return re -endfunction "}}} -function! s:convertMigemo(re) "{{{ - let re = a:re - - if len(re) > 1 - " System cmigemo - return EasyMotion#cmigemo#getMigemoPattern(re) - endif - - " EasyMotion migemo one key dict - if ! has_key(s:migemo_dicts, &l:encoding) - let s:migemo_dicts[&l:encoding] = EasyMotion#helper#load_migemo_dict() - endif - if re =~# '^\a$' - let re = get(s:migemo_dicts[&l:encoding], re, a:re) - endif - return re -endfunction "}}} -function! s:convertSmartsign(chars) "{{{ - " Convert given chars to smartsign string - " Example: 12 -> [1!][2@] - " a] -> a[]}] - - " Load smartsign dictionary - let smart_dict = s:load_smart_dict() - " Prepare converted string - let converted_str = '' - " Get `upper_sign` for each given chars - " Split chars into list - for char in split(a:chars, '\zs') - let upper_sign = s:get_escaped_group_char(smart_dict, char) - if upper_sign ==# '' - let converted_str .= s:escape_regexp_char(char) - else - " [1!] - let converted_str .= '[' . char . upper_sign . ']' - endif - endfor - return converted_str -endfunction "}}} -function! s:get_escaped_group_char(dict, char) "{{{ - " Get escaped char from given dictionary - " return '' if char is not find - " Used inside `[]` - return escape(get(a:dict, a:char, ''), '^') -endfunction "}}} -function! s:escape_regexp_char(char) "{{{ - return escape(a:char, '.$^~\[]*') -endfunction "}}} -function! s:convertSmartcase(re, char) "{{{ - let re = a:re - if a:char =~# '\U' "nonuppercase - return '\c' . re - else "uppercase - return '\C' . re - endif -endfunction "}}} -function! s:should_use_regexp() "{{{ - return g:EasyMotion_use_regexp == 1 && s:flag.regexp == 1 -endfunction "}}} -function! s:should_use_migemo(char) "{{{ - if ! g:EasyMotion_use_migemo || match(a:char, '\A') != -1 - return 0 - endif - - " TODO: use direction to improve - if s:flag.within_line == 1 - let first_line = line('.') - let end_line = line('.') - else - let first_line = line('w0') - let end_line = line('w$') - endif - - " Skip folded line and check if text include multibyte characters - for line in range(first_line, end_line) - if EasyMotion#helper#is_folded(line) - continue - endif - - if EasyMotion#helper#include_multibyte_char(getline(line)) == 1 - return 1 - endif - endfor - - return 0 -endfunction "}}} -function! s:should_use_smartsign(char) "{{{ - " Smartsign Dictionary exists? - " \A: non-alphabetic character - " Do not use smartsign for n-key find search motions - if (exists('g:EasyMotion_use_smartsign_us') || - \ exists('g:EasyMotion_use_smartsign_jp')) && - \ match(a:char, '\A') != -1 && - \ exists('s:current.is_search') && s:current.is_search == 0 - return 1 - else - return 0 - endif -endfunction "}}} -function! s:convert_t_regexp(re, direction) "{{{ - if a:direction == 0 "forward - return '\_.\ze\('.a:re.'\)' - elseif a:direction == 1 "backward - return '\('.a:re.'\)\@<=\_.' - endif -endfunction "}}} - -" -- Handle Visual Mode ------------------ -function! s:GetVisualStartPosition(c_pos, v_start, v_end, search_direction) "{{{ - let vmode = mode(1) - if vmode !~# "^[Vv\]" - call s:Throw('Unkown visual mode:'.vmode) - endif - - if vmode ==# 'V' "line-wise Visual - " Line-wise Visual {{{ - if a:v_start[0] == a:v_end[0] - if a:search_direction == '' - return a:v_start - elseif a:search_direction == 'b' - return a:v_end - else - call s:throw('Unkown search_direction') - endif - else - if a:c_pos[0] == a:v_start[0] - return a:v_end - elseif a:c_pos[0] == a:v_end[0] - return a:v_start - endif - endif - "}}} - else - " Character-wise or Block-wise Visual"{{{ - if a:c_pos == a:v_start - return a:v_end - elseif a:c_pos == a:v_end - return a:v_start - endif - - " virtualedit - if a:c_pos[0] == a:v_start[0] - return a:v_end - elseif a:c_pos[0] == a:v_end[0] - return a:v_start - elseif EasyMotion#helper#is_greater_coords(a:c_pos, a:v_start) == 1 - return a:v_end - else - return a:v_start - endif - "}}} - endif -endfunction "}}} - -" -- Others ------------------------------ -function! s:is_cmdwin() "{{{ - return bufname('%') ==# '[Command Line]' -endfunction "}}} -function! s:should_use_wundo() "{{{ - " wundu cannot use in command-line window and - " unless undolist is not empty - return ! s:is_cmdwin() && undotree().seq_last != 0 -endfunction "}}} -function! s:handleEmpty(input, visualmode) "{{{ - " if empty, reselect and return 1 - if empty(a:input) - if ! empty(a:visualmode) - silent exec 'normal! gv' - endif - let s:EasyMotion_is_cancelled = 1 " Cancel - return 1 - endif - return 0 -endfunction "}}} -function! s:load_smart_dict() "{{{ - if exists('g:EasyMotion_use_smartsign_us') - return g:EasyMotion#sticky_table#us - elseif exists('g:EasyMotion_use_smartsign_jp') - return g:EasyMotion#sticky_table#jp - else - return {} - endif -endfunction "}}} -function! EasyMotion#attach_active_autocmd() "{{{ - " Reference: https://github.com/justinmk/vim-sneak - augroup plugin-easymotion-active - autocmd! - autocmd InsertEnter,WinLeave,BufLeave - \ let s:EasyMotion_is_active = 0 - \ | autocmd! plugin-easymotion-active * - autocmd CursorMoved - \ autocmd plugin-easymotion-active CursorMoved - \ let s:EasyMotion_is_active = 0 - \ | autocmd! plugin-easymotion-active * - augroup END -endfunction "}}} -function! EasyMotion#is_active() "{{{ - return s:EasyMotion_is_active -endfunction "}}} -function! EasyMotion#activate(is_visual) "{{{ - let s:EasyMotion_is_active = 1 - call EasyMotion#attach_active_autocmd() - call EasyMotion#highlight#add_highlight(s:previous.regexp, - \ g:EasyMotion_hl_move) - call EasyMotion#highlight#attach_autocmd() - if a:is_visual == 1 - normal! gv - endif -endfunction "}}} -function! s:restore_cursor_state(visualmode) "{{{ - " -- Restore original cursor position/selection - if ! empty(a:visualmode) - silent exec 'normal! gv' - keepjumps call cursor(s:current.cursor_position) - else - keepjumps call cursor(s:current.original_position) - endif -endfunction " }}} -" Grouping Algorithms: {{{ -let s:grouping_algorithms = { -\ 1: 'SCTree' -\ , 2: 'Original' -\ } -" -- Single-key/closest target priority tree {{{ -" This algorithm tries to assign one-key jumps to all the targets closest to the cursor. -" It works recursively and will work correctly with as few keys as two. -function! s:GroupingAlgorithmSCTree(targets, keys) "{{{ - " Prepare variables for working - let targets_len = len(a:targets) - let keys_len = len(a:keys) - - let groups = {} - - let keys = reverse(copy(a:keys)) - - " Semi-recursively count targets {{{ - " We need to know exactly how many child nodes (targets) this branch will have - " in order to pass the correct amount of targets to the recursive function. - - " Prepare sorted target count list {{{ - " This is horrible, I know. But dicts aren't sorted in vim, so we need to - " work around that. That is done by having one sorted list with key counts, - " and a dict which connects the key with the keys_count list. - - let keys_count = [] - let keys_count_keys = {} - - let i = 0 - for key in keys - call add(keys_count, 0) - - let keys_count_keys[key] = i - - let i += 1 - endfor - " }}} - - let targets_left = targets_len - let level = 0 - let i = 0 - - while targets_left > 0 - " Calculate the amount of child nodes based on the current level - let childs_len = (level == 0 ? 1 : (keys_len - 1) ) - - for key in keys - " Add child node count to the keys_count array - let keys_count[keys_count_keys[key]] += childs_len - - " Subtract the child node count - let targets_left -= childs_len - - if targets_left <= 0 - " Subtract the targets left if we added too many too - " many child nodes to the key count - let keys_count[keys_count_keys[key]] += targets_left - - break - endif - - let i += 1 - endfor - - let level += 1 - endwhile - " }}} - " Create group tree {{{ - let i = 0 - let key = 0 - - call reverse(keys_count) - - for key_count in keys_count - if key_count > 1 - " We need to create a subgroup - " Recurse one level deeper - let groups[a:keys[key]] = s:GroupingAlgorithmSCTree(a:targets[i : i + key_count - 1], a:keys) - elseif key_count == 1 - " Assign single target key - let groups[a:keys[key]] = a:targets[i] - else - " No target - continue - endif - - let key += 1 - let i += key_count - endfor - " }}} - - " Finally! - return groups -endfunction "}}} -" }}} -" -- Original ---------------------------- {{{ -function! s:GroupingAlgorithmOriginal(targets, keys) - " Split targets into groups (1 level) - let targets_len = len(a:targets) - " let keys_len = len(a:keys) - - let groups = {} - - let i = 0 - let root_group = 0 - try - while root_group < targets_len - let groups[a:keys[root_group]] = {} - - for key in a:keys - let groups[a:keys[root_group]][key] = a:targets[i] - - let i += 1 - endfor - - let root_group += 1 - endwhile - catch | endtry - - " Flatten the group array - if len(groups) == 1 - let groups = groups[a:keys[0]] - endif - - return groups -endfunction -" }}} - -" -- Coord/key dictionary creation ------- {{{ -function! s:CreateCoordKeyDict(groups, ...) - " Dict structure: - " 1,2 : a - " 2,3 : b - let sort_list = [] - let coord_keys = {} - let group_key = a:0 == 1 ? a:1 : '' - - for [key, item] in items(a:groups) - let key = group_key . key - "let key = ( ! empty(group_key) ? group_key : key) - - if type(item) == type([]) " List - " Destination coords - - " The key needs to be zero-padded in order to - " sort correctly - let dict_key = printf('%05d,%05d', item[0], item[1]) - let coord_keys[dict_key] = key - - " We need a sorting list to loop correctly in - " PromptUser, dicts are unsorted - call add(sort_list, dict_key) - else - " Item is a dict (has children) - let coord_key_dict = s:CreateCoordKeyDict(item, key) - - " Make sure to extend both the sort list and the - " coord key dict - call extend(sort_list, coord_key_dict[0]) - call extend(coord_keys, coord_key_dict[1]) - endif - - unlet item - endfor - - return [sort_list, coord_keys] -endfunction -" }}} -" }}} -"}}} -" Core Functions: {{{ -function! s:PromptUser(groups) "{{{ - " Recursive - let group_values = values(a:groups) - - " -- If only one possible match, jump directly to it {{{ - if len(group_values) == 1 - if mode(1) ==# 'no' - " Consider jump to first match - " NOTE: matchstr() handles multibyte characters. - let s:dot_repeat['target'] = matchstr(g:EasyMotion_keys, '^.') - endif - redraw - return group_values[0] - endif - " }}} - - " -- Prepare marker lines ---------------- {{{ - let lines = {} - - let coord_key_dict = s:CreateCoordKeyDict(a:groups) - - let prev_col_num = 0 - for dict_key in sort(coord_key_dict[0]) - " NOTE: {{{ - " let g:EasyMotion_keys = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' - " Perform (easymotion-w) - " - " lines[line_num]['orig']: - " Lorem ipsum dolor sit amet consectetur adipisicing - " - " {target_char}: - " {L}orem {i}psum {d}olor {s}it {a}met {c}onsectetur {a}dipisicing - " - " lines[line_num]['marker'], {marker_chars}: - " {A}orem {B}psum {C}olor {D}it {E}met {F}onsectetur {G}dipisicing - " 2-key-combo: {marker_chars} could be 1 or 2 chars like {AB} - " - " }}} - - " Prepare original line and marker line {{{ - let [line_num, col_num] = split(dict_key, ',') - - let line_num = str2nr(line_num) - let col_num = str2nr(col_num) - if ! has_key(lines, line_num) - let current_line = getline(line_num) - let lines[line_num] = { - \ 'orig': current_line, - \ 'marker': current_line, - \ 'mb_compensation': 0, - \ } - " mb_compensation -> multibyte compensation - let prev_col_num = 0 - endif "}}} - - " Multibyte Compensation: {{{ - " Solve multibyte issues by matching the byte column - " number instead of the visual column - " Compensate for byte difference between marker - " character and target character - " - " This has to be done in order to match the correct - " column; \%c matches the byte column and not display - " column. - let col_num = max([prev_col_num + 1, - \ col_num - lines[line_num]['mb_compensation']]) - let prev_col_num = col_num - "}}} - - " Prepare marker characters {{{ - let marker_chars = coord_key_dict[1][dict_key] - let marker_chars_len = EasyMotion#helper#strchars(marker_chars) - "}}} - - " Replace {target} with {marker} & Highlight {{{ - let col_add = 0 " Column add byte length - " Disable two-key-combo feature? - let marker_max_length = g:EasyMotion_disable_two_key_combo == 1 - \ ? 1 : 2 - for i in range(min([marker_chars_len, marker_max_length])) - let marker_char = split(marker_chars, '\zs')[i] - " EOL {{{ - if strlen(lines[line_num]['marker']) < col_num + col_add - " Append marker chars if target is EOL - let lines[line_num]['marker'] .= ' ' - endif "}}} - - let target_col_regexp = '\%' . (col_num + col_add) . 'c.' - let target_char = matchstr(lines[line_num]['marker'], - \ target_col_regexp) - let space_len = strdisplaywidth(target_char) - \ - strdisplaywidth(marker_char) - " Substitute marker character - let substitute_expr = marker_char . repeat(' ', space_len) - - let lines[line_num]['marker'] = substitute( - \ lines[line_num]['marker'], - \ target_col_regexp, - \ escape(substitute_expr,'&'), - \ '') - - " Highlight targets {{{ - let _hl_group = - \ (marker_chars_len == 1) ? g:EasyMotion_hl_group_target - \ : (i == 0) ? g:EasyMotion_hl2_first_group_target - \ : g:EasyMotion_hl2_second_group_target - - if exists('*matchaddpos') - call EasyMotion#highlight#add_pos_highlight( - \ line_num, col_num + col_add, _hl_group) - else - call EasyMotion#highlight#add_highlight( - \ '\%' . line_num . 'l' . target_col_regexp, - \ _hl_group) - endif - "}}} - - " Add marker/target length difference for multibyte compensation - let lines[line_num]['mb_compensation'] += - \ strlen(target_char) - strlen(substitute_expr) - " Shift column - let col_add += strlen(marker_char) - endfor - "}}} - endfor - - let lines_items = items(lines) - " }}} - - " -- Put labels on targets & Get User Input & Restore all {{{ - " Save undo tree {{{ - let s:undo_file = tempname() - if s:should_use_wundo() - execute "wundo" s:undo_file - endif - "}}} - try - " Set lines with markers {{{ - call s:SetLines(lines_items, 'marker') - redraw "}}} - - " Get target character {{{ - call s:Prompt('Target key') - let char = s:GetChar() - "}}} - - " Convert uppercase {{{ - if g:EasyMotion_use_upper == 1 && match(g:EasyMotion_keys, '\l') == -1 - let char = toupper(char) - endif "}}} - - " Jump first target when Enter or Space key is pressed "{{{ - if (char ==# "\" && g:EasyMotion_enter_jump_first == 1) || - \ (char ==# "\" && g:EasyMotion_space_jump_first == 1) - " NOTE: matchstr() is multibyte aware. - let char = matchstr(g:EasyMotion_keys, '^.') - endif "}}} - - " For dot repeat {{{ - if mode(1) ==# 'no' - " Store previous target when operator pending mode - if s:current.dot_prompt_user_cnt == 0 - " Store - let s:dot_repeat['target'] = char - else - " Append target chars - let s:dot_repeat['target'] .= char - endif - endif "}}} - - finally - " Restore original lines - call s:SetLines(lines_items, 'orig') - - " Un-highlight targets {{{ - call EasyMotion#highlight#delete_highlight( - \ g:EasyMotion_hl_group_target, - \ g:EasyMotion_hl2_first_group_target, - \ g:EasyMotion_hl2_second_group_target, - \ ) - " }}} - - " Restore undo tree {{{ - if s:should_use_wundo() && filereadable(s:undo_file) - silent execute "rundo" s:undo_file - call delete(s:undo_file) - unlet s:undo_file - else - " Break undo history (undobreak) - let old_undolevels = &undolevels - set undolevels=-1 - keepjumps call setline('.', getline('.')) - let &undolevels = old_undolevels - unlet old_undolevels - " FIXME: Error occur by GundoToggle for undo number 2 is empty - keepjumps call setline('.', getline('.')) - endif "}}} - - redraw - endtry "}}} - - " -- Check if we have an input char ------ {{{ - if empty(char) - call s:Throw('Cancelled') - endif - " }}} - " -- Check if the input char is valid ---- {{{ - if ! has_key(a:groups, char) - call s:Throw('Invalid target') - endif - " }}} - - let target = a:groups[char] - - if type(target) == type([]) - " Return target coordinates - return target - else - " Prompt for new target character - let s:current.dot_prompt_user_cnt += 1 - return s:PromptUser(target) - endif -endfunction "}}} -function! s:DotPromptUser(groups) "{{{ - " Get char from previous target - let char = s:dot_repeat.target[s:current.dot_repeat_target_cnt] - " For dot repeat target chars - let s:current.dot_repeat_target_cnt += 1 - - let target = a:groups[char] - - if type(target) == type([]) - " Return target coordinates - return target - else - " Prompt for new target character - return s:PromptUser(target) - endif -endfunction "}}} -function! s:EasyMotion(regexp, direction, visualmode, is_inclusive) " {{{ - " Store s:current original_position & cursor_position {{{ - " current cursor pos. - let s:current.cursor_position = [line('.'), col('.')] - " original start position. This value could be changed later in visual - " mode - let s:current.original_position = - \ get(s:current, 'original_position', s:current.cursor_position) - "}}} - - let win_first_line = line('w0') " visible first line num - let win_last_line = line('w$') " visible last line num - - " Store the target positions list - " e.g. targets = [ [line, col], [line2, col2], ...] - let targets = [] - - " Store info for Repeat motion {{{ - if s:flag.dot_repeat != 1 - " Store Regular Expression - let s:previous['regexp'] = a:regexp - let s:previous['direction'] = a:direction - let s:previous['operator'] = v:operator - - " Note: 'is_inclusive' value could be changed later when - " bi-directional find motion depend on 'true' direction the cursor - " will move. - let s:previous['is_inclusive'] = a:is_inclusive - - " For special motion flag - let s:previous['line_flag'] = s:flag.within_line - let s:previous['bd_t_flag'] = s:flag.bd_t " bi-directional t motion - endif "}}} - - " To avoid side effect of overwriting buffer for tpope/repeat - " store current b:changedtick. Use this value later - let s:current.changedtick = b:changedtick - - try - " -- Reset properties -------------------- {{{ - " Save original value and set new value - call s:SaveValue() - call s:turn_off_hl_error() - " }}} - " Setup searchpos args {{{ - let search_direction = (a:direction >= 1 ? 'b' : '') - let search_stopline = a:direction >= 1 ? win_first_line : win_last_line - - if s:flag.within_line == 1 - let search_stopline = s:current.original_position[0] - endif - "}}} - - " Handle visual mode {{{ - if ! empty(a:visualmode) - " Decide at where visual mode start {{{ - normal! gv - let v_start = [line("'<"),col("'<")] " visual_start_position - let v_end = [line("'>"),col("'>")] " visual_end_position - - let v_original_pos = s:GetVisualStartPosition( - \ s:current.cursor_position, v_start, v_end, search_direction) - "}}} - - " Reselect visual text {{{ - keepjumps call cursor(v_original_pos) - exec "normal! " . a:visualmode - keepjumps call cursor(s:current.cursor_position) - "}}} - " Update s:current.original_position - " overwrite original start position - let s:current.original_position = v_original_pos - endif "}}} - - " Handle bi-directional t motion {{{ - if s:flag.bd_t == 1 - let regexp = s:convert_t_regexp(a:regexp, 1) "backward - else - let regexp = a:regexp - endif - "}}} - - " Handle dot repeat with count - if s:flag.count_dot_repeat - let cursor_char = EasyMotion#helper#get_char_by_coord(s:current.cursor_position) - if cursor_char =~# regexp - call add(targets, s:current.cursor_position) - endif - endif - - " Construct match dict {{{ - while 1 - " Note: searchpos() has side effect which jump cursor position. - " You can disable this side effect by add 'n' flags, - " but in this case, it's better to allows jump side effect - " to gathering matched targets coordinates. - let pos = searchpos(regexp, search_direction, search_stopline) - - " Reached end of search range - if pos == [0, 0] - break - endif - - " Skip folded lines {{{ - if EasyMotion#helper#is_folded(pos[0]) - if search_direction ==# 'b' - " FIXME: Hmm... I should use filter() - " keepjumps call cursor(foldclosed(pos[0]), 0) - else - keepjumps call cursor(foldclosedend(pos[0]+1), 0) - endif - continue - endif "}}} - - call add(targets, pos) - endwhile - "}}} - - " Handle bidirection "{{{ - " For bi-directional t motion {{{ - if s:flag.bd_t == 1 - let regexp = s:convert_t_regexp(a:regexp, 0) "forward - endif - "}}} - " Reconstruct match dict - if a:direction == 2 - " Forward - - " Jump back cursor_position - keepjumps call cursor(s:current.cursor_position[0], - \ s:current.cursor_position[1]) - - let targets2 = [] - if s:flag.within_line == 0 - let search_stopline = win_last_line - else - let search_stopline = s:current.cursor_position[0] - endif - while 1 - " TODO: refactoring - let pos = searchpos(regexp, '', search_stopline) - " Reached end of search range - if pos == [0, 0] - break - endif - - " Skip folded lines {{{ - if EasyMotion#helper#is_folded(pos[0]) - " Always forward - keepjumps call cursor(foldclosedend(pos[0]+1), 0) - continue - endif - "}}} - - call add(targets2, pos) - endwhile - " Merge match target dict"{{{ - let t1 = 0 " backward - let t2 = 0 " forward - let targets3 = [] - while t1 < len(targets) || t2 < len(targets2) - " Forward -> Backward -> F -> B -> ... - if t2 < len(targets2) - call add(targets3, targets2[t2]) - let t2 += 1 - endif - if t1 < len(targets) - call add(targets3, targets[t1]) - let t1 += 1 - endif - endwhile - let targets = targets3 - "}}} - endif - "}}} - " Handle no match"{{{ - let targets_len = len(targets) - if targets_len == 0 - call s:Throw('No matches') - endif - "}}} - - " Attach specific key as marker to gathered matched coordinates - let GroupingFn = function('s:GroupingAlgorithm' . s:grouping_algorithms[g:EasyMotion_grouping]) - let groups = GroupingFn(targets, split(g:EasyMotion_keys, '\zs')) - - " -- Shade inactive source --------------- {{{ - if g:EasyMotion_do_shade && targets_len != 1 && s:flag.dot_repeat != 1 - if a:direction == 1 " Backward - let shade_hl_re = s:flag.within_line - \ ? '^.*\%#' - \ : '\%'. win_first_line .'l\_.*\%#' - elseif a:direction == 0 " Forward - let shade_hl_re = s:flag.within_line - \ ? '\%#.*$' - \ : '\%#\_.*\%'. win_last_line .'l' - else " Both directions - let shade_hl_re = s:flag.within_line - \ ? '^.*\%#.*$' - \ : '\_.*' - endif - - call EasyMotion#highlight#add_highlight( - \ shade_hl_re, g:EasyMotion_hl_group_shade) - if g:EasyMotion_cursor_highlight - let cursor_hl_re = '\%#' - call EasyMotion#highlight#add_highlight(cursor_hl_re, - \ g:EasyMotion_hl_inc_cursor) - endif - endif - " }}} - - " -- Jump back before prompt for visual scroll {{{ - " Because searchpos() change current cursor position and - " if you just use cursor(s:current.cursor_position) to jump back, - " current line will become middle of line window - if ! empty(a:visualmode) - keepjumps call winrestview({'lnum' : win_first_line, 'topline' : win_first_line}) - else - " for adjusting cursorline - keepjumps call cursor(s:current.cursor_position) - endif - "}}} - - " -- Prompt user for target group/character {{{ - if s:flag.dot_repeat != 1 - let coords = s:PromptUser(groups) - else - let coords = s:DotPromptUser(groups) - endif - "}}} - - " -- Update cursor position -------------- {{{ - " First, jump back cursor to original position - keepjumps call cursor(s:current.original_position) - - " Consider EasyMotion as jump motion :h jump-motion - normal! m` - - " Update selection for visual mode {{{ - if ! empty(a:visualmode) - exec 'normal! ' . a:visualmode - endif - " }}} - - " For bi-directional motion, checking again whether the motion is - " inclusive is necessary. This value will might be updated later - let is_inclusive_check = a:is_inclusive - " For bi-directional motion, store 'true' direction for dot repeat - " to handling inclusive/exclusive motion - if a:direction == 2 - let true_direction = - \ EasyMotion#helper#is_greater_coords( - \ s:current.original_position, coords) > 0 ? - \ 0 : 1 - " forward : backward - else - let true_direction = a:direction - endif - - if s:flag.dot_repeat == 1 - " support dot repeat {{{ - " Use visual mode to emulate dot repeat - normal! v - - " Deal with exclusive {{{ - if s:dot_repeat.is_inclusive == 0 - " exclusive - if s:dot_repeat.true_direction == 0 "Forward - let coords[1] -= 1 - elseif s:dot_repeat.true_direction == 1 "Backward - " Shift visual selection to left by making cursor one key - " left. - normal! hoh - endif - endif "}}} - - " Jump to destination - keepjumps call cursor(coords[0], coords[1]) - - " Execute previous operator - let cmd = s:dot_repeat.operator - if s:dot_repeat.operator ==# 'c' - let cmd .= getreg('.') - endif - exec 'normal! ' . cmd - "}}} - else - " Handle inclusive & exclusive {{{ - " Overwrite inclusive flag for special case {{{ - if s:flag.find_bd == 1 && true_direction == 1 - " Note: For bi-directional find motion s(f) & t - " If true_direction is backward, the motion is 'exclusive' - let is_inclusive_check = 0 " overwrite - let s:previous.is_inclusive = 0 " overwrite - endif "}}} - if is_inclusive_check - " Note: {{{ - " Inclusive motion requires that we eat one more - " character to the right by forcing the motion to inclusive - " if we're using a forward motion because - " > :h exclusive - " > Note that when using ':' any motion becomes characterwise - " > exclusive. - " and EasyMotion use ':' - " See: h: o_v }}} - normal! v - endif " }}} - - if s:current.is_operator && s:flag.linewise - " TODO: Is there better solution? - " Maike it linewise - normal! V - endif - - " Adjust screen especially for visual scroll & offscreen search {{{ - " Otherwise, cursor line will move middle line of window - keepjumps call winrestview({'lnum' : win_first_line, 'topline' : win_first_line}) - - " Jump to destination - keepjumps call cursor(coords[0], coords[1]) - - " To avoid side effect of overwriting buffer {{{ - " for tpope/vim-repeat - " See: :h b:changedtick - if exists('g:repeat_tick') - if g:repeat_tick == s:current.changedtick - let g:repeat_tick = b:changedtick - endif - endif "}}} - endif - - " Set tpope/vim-repeat {{{ - if s:current.is_operator == 1 && - \ !(v:operator ==# 'y' && match(&cpo, 'y') == -1) - " Store previous info for dot repeat {{{ - let s:dot_repeat.regexp = a:regexp - let s:dot_repeat.direction = a:direction - let s:dot_repeat.line_flag = s:flag.within_line - let s:dot_repeat.is_inclusive = is_inclusive_check - let s:dot_repeat.operator = v:operator - let s:dot_repeat.bd_t_flag = s:flag.bd_t " Bidirectional t motion - let s:dot_repeat.true_direction = true_direction " Check inclusive - "}}} - silent! call repeat#set("\(easymotion-dotrepeat)") - endif "}}} - - " Highlight all the matches by n-key find motions {{{ - if s:current.is_search == 1 && s:current.is_operator == 0 - " It seems let &hlsearch=&hlsearch doesn't work when called - " in script, so use :h feedkeys() instead. - " Ref: :h v:hlsearch - " FIXME: doesn't work with `c` operator - call EasyMotion#helper#silent_feedkeys( - \ ":let &hlsearch=&hlsearch\", - \ 'hlsearch', 'n') - endif "}}} - - call s:Message('Jumping to [' . coords[0] . ', ' . coords[1] . ']') - let s:EasyMotion_is_cancelled = 0 " Success - "}}} - catch /^EasyMotion:.*/ - redraw - - " Show exception message - if g:EasyMotion_ignore_exception != 1 - echo v:exception - endif - - let s:previous['regexp'] = a:regexp - " -- Activate EasyMotion ----------------- {{{ - let s:EasyMotion_is_active = 1 - call EasyMotion#attach_active_autocmd() "}}} - - call s:restore_cursor_state(a:visualmode) - let s:EasyMotion_is_cancelled = 1 " Cancel - catch - call s:Message(v:exception . ' : ' . v:throwpoint) - call s:restore_cursor_state(a:visualmode) - let s:EasyMotion_is_cancelled = 1 " Cancel - finally - " -- Restore properties ------------------ {{{ - call s:RestoreValue() - call s:turn_on_hl_error() - call EasyMotion#reset() - " }}} - " -- Remove shading ---------------------- {{{ - call EasyMotion#highlight#delete_highlight() - " }}} - - if s:EasyMotion_is_cancelled == 0 " Success - " -- Landing Highlight ------------------- {{{ - if g:EasyMotion_landing_highlight - call EasyMotion#highlight#add_highlight(a:regexp, - \ g:EasyMotion_hl_move) - call EasyMotion#highlight#attach_autocmd() - endif "}}} - " -- Activate EasyMotion ----------------- {{{ - let s:EasyMotion_is_active = 1 - call EasyMotion#attach_active_autocmd() "}}} - endif - endtry -endfunction " }}} -"}}} -" }}} - -call EasyMotion#init() -" Restore 'cpoptions' {{{ -let &cpo = s:save_cpo -unlet s:save_cpo -" }}} -" vim: fdm=marker:et:ts=4:sw=4:sts=4 diff --git a/bundle/easymotion/autoload/EasyMotion/cmigemo.vim b/bundle/easymotion/autoload/EasyMotion/cmigemo.vim deleted file mode 100755 index 7c84e19..0000000 --- a/bundle/easymotion/autoload/EasyMotion/cmigemo.vim +++ /dev/null @@ -1,109 +0,0 @@ -"============================================================================= -" FILE: autoload/EasyMotion/cmigemo.vim -" AUTHOR: haya14busa -" License: MIT license {{{ -" Permission is hereby granted, free of charge, to any person obtaining -" a copy of this software and associated documentation files (the -" "Software"), to deal in the Software without restriction, including -" without limitation the rights to use, copy, modify, merge, publish, -" distribute, sublicense, and/or sell copies of the Software, and to -" permit persons to whom the Software is furnished to do so, subject to -" the following conditions: -" -" The above copyright notice and this permission notice shall be included -" in all copies or substantial portions of the Software. -" -" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -" IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -" CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -" TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -" SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -" }}} -"============================================================================= -scriptencoding utf-8 -" Saving 'cpoptions' {{{ -let s:save_cpo = &cpo -set cpo&vim -" }}} - -function! s:has_vimproc() "{{{ - if !exists('s:exists_vimproc') - try - silent call vimproc#version() - let s:exists_vimproc = 1 - catch - let s:exists_vimproc = 0 - endtry - endif - - return s:exists_vimproc -endfunction "}}} - -function! EasyMotion#cmigemo#system(...) "{{{ - return call(s:has_vimproc() ? 'vimproc#system' : 'system', a:000) -endfunction "}}} - -function! s:SearchDict2(name) "{{{ - let path = $VIM . ',' . &runtimepath - let dict = globpath(path, "dict/".a:name) - if dict == '' - let dict = globpath(path, a:name) - endif - if dict == '' - for path in [ - \ '/usr/local/share/migemo/', - \ '/usr/local/share/cmigemo/', - \ '/usr/local/share/', - \ '/usr/share/cmigemo/', - \ '/usr/share/', - \ ] - let path = path . a:name - if filereadable(path) - let dict = path - break - endif - endfor - endif - let dict = matchstr(dict, "^[^\]*") - return dict -endfunction "}}} - -function! s:SearchDict() "{{{ - for path in [ - \ 'migemo/'.&encoding.'/migemo-dict', - \ &encoding.'/migemo-dict', - \ 'migemo-dict', - \ ] - let dict = s:SearchDict2(path) - if dict != '' - return dict - endif - endfor - echoerr 'a dictionary for migemo is not found' - echoerr 'your encoding is '.&encoding -endfunction "}}} - -function! EasyMotion#cmigemo#getMigemoPattern(input) "{{{ - if !exists('s:migemodict') - let s:migemodict = s:SearchDict() - endif - - if has('migemo') - " Use migemo(). - return migemo(a:input) - elseif executable('cmigemo') - " Use cmigemo. - return EasyMotion#cmigemo#system('cmigemo -v -w "'.a:input.'" -d "'.s:migemodict.'"') - else - " Not supported - return a:input - endif -endfunction "}}} - -" Restore 'cpoptions' {{{ -let &cpo = s:save_cpo -unlet s:save_cpo -" }}} -" vim: fdm=marker:et:ts=4:sw=4:sts=4 diff --git a/bundle/easymotion/autoload/EasyMotion/command_line.vim b/bundle/easymotion/autoload/EasyMotion/command_line.vim deleted file mode 100755 index 9a80fd8..0000000 --- a/bundle/easymotion/autoload/EasyMotion/command_line.vim +++ /dev/null @@ -1,288 +0,0 @@ -"============================================================================= -" FILE: autoload/EasyMotion/command_line.vim -" AUTHOR: haya14busa -" Reference: https://github.com/osyo-manga/vim-over -" License: MIT license {{{ -" Permission is hereby granted, free of charge, to any person obtaining -" a copy of this software and associated documentation files (the -" "Software"), to deal in the Software without restriction, including -" without limitation the rights to use, copy, modify, merge, publish, -" distribute, sublicense, and/or sell copies of the Software, and to -" permit persons to whom the Software is furnished to do so, subject to -" the following conditions: -" -" The above copyright notice and this permission notice shall be included -" in all copies or substantial portions of the Software. -" -" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -" IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -" CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -" TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -" SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -" }}} -"============================================================================= -scriptencoding utf-8 -" Saving 'cpoptions' {{{ -let s:save_cpo = &cpo -set cpo&vim -" }}} - -" CommandLine: -let s:V = vital#of('easymotion') -let s:cmdline = s:V.import('Over.Commandline.Base') -let s:modules = s:V.import("Over.Commandline.Modules") -let s:search = s:cmdline.make() -let s:search.highlights.prompt = 'Question' - -" Add Module: {{{ -call s:search.connect('Exit') -call s:search.connect('Cancel') -call s:search.connect('Redraw') -call s:search.connect('DrawCommandline') -call s:search.connect('Delete') -call s:search.connect('CursorMove') -call s:search.connect('Paste') -call s:search.connect('BufferComplete') -call s:search.connect('InsertRegister') -call s:search.connect('ExceptionExit') -call s:search.connect(s:modules.get('ExceptionMessage').make('EasyMotion: ', 'echom')) -call s:search.connect(s:modules.get('History').make('/')) -call s:search.connect(s:modules.get('NoInsert').make_special_chars()) -call s:search.connect(s:modules.get('KeyMapping').make_emacs()) -call s:search.connect(s:modules.get('Doautocmd').make('EMCommandLine')) - -let s:module = { -\ "name" : "EasyMotion", -\} -function! s:module.on_char_pre(cmdline) - if a:cmdline.is_input("(em-scroll-f)") - call s:scroll(0) - call a:cmdline.setchar('') - elseif a:cmdline.is_input("(em-scroll-b)") - call s:scroll(1) - call a:cmdline.setchar('') - elseif a:cmdline.is_input("(em-jumpback)") - keepjumps call setpos('.', s:save_orig_pos) - let s:orig_pos = s:save_orig_pos - let s:orig_line_start = getpos('w0') - let s:orig_line_end = getpos('w$') - let s:direction = s:save_direction - call a:cmdline.setchar('') - elseif a:cmdline.is_input("(em-openallfold)") - " TODO: better solution - normal! zR - call a:cmdline.setchar('') - endif -endfunction -call s:search.connect(s:module) -"}}} - -" CommandLine Keymap: {{{ -function! s:search.keymapping() "{{{ - return { -\ "\" : { -\ "key" : "(buffer-complete)", -\ "noremap" : 1, -\ }, -\ "\" : { -\ "key" : "(em-scroll-f)", -\ "noremap" : 1, -\ }, -\ "\" : { -\ "key" : "(em-scroll-b)", -\ "noremap" : 1, -\ }, -\ "\" : { -\ "key" : "(em-jumpback)", -\ "noremap" : 1, -\ }, -\ "\" : { -\ "key" : "(em-openallfold)", -\ "noremap" : 1, -\ }, -\ "\" : { -\ "key" : "(exit)", -\ "noremap" : 1, -\ "lock" : 1, -\ }, -\ } -endfunction "}}} - -" Fins Motion CommandLine Mapping Command: {{{ -function! EasyMotion#command_line#cmap(args) - let lhs = s:as_keymapping(a:args[0]) - let rhs = s:as_keymapping(a:args[1]) - call s:search.cmap(lhs, rhs) -endfunction -function! EasyMotion#command_line#cnoremap(args) - let lhs = s:as_keymapping(a:args[0]) - let rhs = s:as_keymapping(a:args[1]) - call s:search.cnoremap(lhs, rhs) -endfunction -function! EasyMotion#command_line#cunmap(lhs) - let lhs = s:as_keymapping(a:lhs) - call s:search.cunmap(lhs) -endfunction -function! s:as_keymapping(key) - execute 'let result = "' . substitute(a:key, '\(<.\{-}>\)', '\\\1', 'g') . '"' - return result -endfunction -"}}} -"}}} - -" Event: {{{ -function! s:search.on_enter(cmdline) "{{{ - if s:num_strokes == -1 - call EasyMotion#highlight#delete_highlight() - call EasyMotion#helper#VarReset('&scrolloff', 0) - if g:EasyMotion_do_shade - call EasyMotion#highlight#add_highlight('\_.*', - \ g:EasyMotion_hl_group_shade) - endif - endif - if g:EasyMotion_cursor_highlight - call EasyMotion#highlight#add_highlight('\%#', - \ g:EasyMotion_hl_inc_cursor) - endif -endfunction "}}} -function! s:search.on_leave(cmdline) "{{{ - if s:num_strokes == -1 - call EasyMotion#highlight#delete_highlight(g:EasyMotion_hl_inc_search) - endif -endfunction "}}} -function! s:search.on_char(cmdline) "{{{ - if s:num_strokes == -1 - let re = s:search.getline() - if EasyMotion#helper#should_case_sensitive(re, 1) - let case_flag = '\c' - else - let case_flag = '\C' - endif - let re .= case_flag - if g:EasyMotion_inc_highlight - call s:inc_highlight(re) - endif - if g:EasyMotion_off_screen_search - call s:off_screen_search(re) - endif - elseif s:search.line.length() >= s:num_strokes - call s:search.exit() - endif -endfunction "}}} -"}}} - -" Main: -function! EasyMotion#command_line#GetInput(num_strokes, prev, direction) "{{{ - let s:num_strokes = a:num_strokes - - let s:prompt_base = s:getPromptMessage(a:num_strokes) - call s:search.set_prompt(s:prompt_base) - - " Screen: cursor position, first and last line - let s:orig_pos = getpos('.') - let s:orig_line_start = getpos('w0') - let s:orig_line_end = getpos('w$') - let s:save_orig_pos = deepcopy(s:orig_pos) - - " Direction: - let s:direction = a:direction == 1 ? 'b' : '' - let s:save_direction = deepcopy(s:direction) - - let input = s:search.get() - if input == '' && ! s:search.exit_code() - return a:prev - elseif s:search.exit_code() == 1 || s:search.exit_code() == -1 - call s:Cancell() - return '' - else - return input - endif -endfunction "}}} - -" Helper: -function! s:Cancell() " {{{ - call EasyMotion#highlight#delete_highlight() - call EasyMotion#helper#VarReset('&scrolloff') - keepjumps call setpos('.', s:save_orig_pos) - echo 'EasyMotion: Cancelled' - return '' -endfunction " }}} -function! s:getPromptMessage(num_strokes) "{{{ - if a:num_strokes == 1 - let prompt = substitute( - \ substitute(g:EasyMotion_prompt,'{n}', a:num_strokes, 'g'), - \ '(s)', '', 'g') - elseif a:num_strokes == -1 - let prompt = substitute( - \ substitute(g:EasyMotion_prompt, '{n}\s\{0,1}', '', 'g'), - \ '(s)', 's', 'g') - else - let prompt = substitute( - \ substitute(g:EasyMotion_prompt,'{n}', a:num_strokes, 'g'), - \ '(s)', 's', 'g') - endif - return prompt -endfunction "}}} - -function! s:off_screen_search(re) "{{{ - " First: search within visible screen range - call s:adjust_screen() - " Error occur when '\zs' without '!' - silent! let pos = searchpos(a:re, s:direction . 'n', s:orig_line_end[1]) - if pos != [0, 0] - " Restore cursor posision - keepjumps call setpos('.', s:orig_pos) - else - " Second: if there were no much, search off screen - silent! let pos = searchpos(a:re, s:direction) - if pos != [0, 0] - " Match - keepjumps call setpos('.', pos) - " Move cursor - if s:save_direction != 'b' - normal! zzH0 - else - normal! zzL0 - endif - else - " No much - call s:adjust_screen() - keepjumps call setpos('.', s:orig_pos) - endif - endif - " redraw -endfunction "}}} -function! s:adjust_screen() "{{{ - if s:save_direction != 'b' - " Forward - keepjumps call setpos('.', s:orig_line_start) - normal! zt - else - " Backward - keepjumps call setpos('.', s:orig_line_end) - normal! zb - endif -endfunction "}}} -function! s:scroll(direction) "{{{ - " direction: 0 -> forward, 1 -> backward - exec a:direction == 0 ? "normal! \" : "normal! \" - let s:orig_pos = getpos('.') - let s:orig_line_start = getpos('w0') - let s:orig_line_end = getpos('w$') - let s:direction = a:direction == 0 ? '' : 'b' -endfunction "}}} -function! s:inc_highlight(re) "{{{ - call EasyMotion#highlight#delete_highlight(g:EasyMotion_hl_inc_search) - if s:search.line.length() > 0 - " Error occur when '\zs' without '!' - silent! call EasyMotion#highlight#add_highlight(a:re, g:EasyMotion_hl_inc_search) - endif -endfunction "}}} - -" Restore 'cpoptions' {{{ -let &cpo = s:save_cpo -unlet s:save_cpo -" }}} -" vim: fdm=marker:et:ts=4:sw=4:sts=4 diff --git a/bundle/easymotion/autoload/EasyMotion/helper.vim b/bundle/easymotion/autoload/EasyMotion/helper.vim deleted file mode 100755 index 9cbee30..0000000 --- a/bundle/easymotion/autoload/EasyMotion/helper.vim +++ /dev/null @@ -1,167 +0,0 @@ -"============================================================================= -" FILE: autoload/EasyMotion/helper.vim -" AUTHOR: haya14busa -" License: MIT license {{{ -" Permission is hereby granted, free of charge, to any person obtaining -" a copy of this software and associated documentation files (the -" "Software"), to deal in the Software without restriction, including -" without limitation the rights to use, copy, modify, merge, publish, -" distribute, sublicense, and/or sell copies of the Software, and to -" permit persons to whom the Software is furnished to do so, subject to -" the following conditions: -" -" The above copyright notice and this permission notice shall be included -" in all copies or substantial portions of the Software. -" -" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -" IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -" CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -" TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -" SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -" }}} -"============================================================================= -scriptencoding utf-8 -" Saving 'cpoptions' {{{ -let s:save_cpo = &cpo -set cpo&vim -" }}} - -function! EasyMotion#helper#mode(flag) "{{{ - return mode(a:flag) == "\" ? "C-v" : mode(a:flag) -endfunction "}}} - -function! EasyMotion#helper#get_char_by_coord(coord) "{{{ - " @param coord: [lnum, col] or [bufnum, lnum, col, off] - if len(a:coord) == 4 - let [line_num, col_num] = [a:coord[1], a:coord[2]] - else - let [line_num, col_num] = a:coord - endif - let target_col_regexp = '\%' . (col_num) . 'c.' - return matchstr(getline(line_num), target_col_regexp) -endfunction "}}} - -function! EasyMotion#helper#is_greater_coords(coords1, coords2) "{{{ - " [line_num, col_num] < [line_num, col_num] - " - " coords1 < coords2 : return 1 - " coords1 > coords2 : return -1 - " coords1 == coords2 : return 0 - if a:coords1 == a:coords2 | return 0 | endif - - if a:coords1[0] < a:coords2[0] - return 1 - elseif a:coords1[0] > a:coords2[0] - return -1 - endif - - " Same line - if a:coords1[1] < a:coords2[1] - return 1 - elseif a:coords1[1] > a:coords2[1] - return -1 - endif -endfunction "}}} - -function! EasyMotion#helper#is_folded(line) "{{{ - " Return false if g:EasyMotion_skipfoldedline == 1 - " and line is start of folded lines - let _foldclosed = foldclosed(a:line) - return _foldclosed != -1 && - \ (g:EasyMotion_skipfoldedline == 1 || a:line != _foldclosed) -endfunction "}}} -function! EasyMotion#helper#should_case_sensitive(input, is_search) "{{{ - if !a:is_search - if g:EasyMotion_smartcase == 0 - return 0 - else - " return 1 if input didn't match uppercase letter - return match(a:input, '\u') == -1 - endif - endif - - if (g:EasyMotion_smartcase == 1 && match(a:input, '\u') == -1) || - \ (&ignorecase && &smartcase && match(a:input, '\u') == -1) || - \ (&ignorecase && !&smartcase) - return 1 - endif - return 0 -endfunction "}}} -function! EasyMotion#helper#silent_feedkeys(expr, name, ...) "{{{ - " Ref: - " https://github.com/osyo-manga/vim-over/blob/d51b028c29661d4a5f5b79438ad6d69266753711/autoload/over.vim#L6 - let mode = get(a:, 1, "m") - let name = "easymotion-" . a:name - let map = printf("(%s)", name) - if mode == "n" - let command = "nnoremap" - else - let command = "nmap" - endif - execute command "" map printf("%s:nunmap %s", a:expr, map) - if mode(1) !=# 'ce' - " FIXME: mode(1) !=# 'ce' exists only for the test - " :h feedkeys() doesn't work while runnning a test script - " https://github.com/kana/vim-vspec/issues/27 - call feedkeys(printf("\(%s)", name)) - endif -endfunction "}}} -function! EasyMotion#helper#VarReset(var, ...) "{{{ - if ! exists('s:var_reset') - let s:var_reset = {} - endif - - if a:0 == 0 && has_key(s:var_reset, a:var) - " Reset var to original value - " setbufvar( or bufname): '' or '%' can be used for the current buffer - call setbufvar('%', a:var, s:var_reset[a:var]) - elseif a:0 == 1 - " Save original value and set new var value - - let new_value = a:0 == 1 ? a:1 : '' - - " Store original value - let s:var_reset[a:var] = getbufvar("", a:var) - - " Set new var value - call setbufvar('%', a:var, new_value) - endif -endfunction "}}} - -" Migemo {{{ -function! EasyMotion#helper#load_migemo_dict() "{{{ - let enc = &l:encoding - if enc ==# 'utf-8' - return EasyMotion#migemo#utf8#load_dict() - elseif enc ==# 'cp932' - return EasyMotion#migemo#cp932#load_dict() - elseif enc ==# 'euc-jp' - return EasyMotion#migemo#eucjp#load_dict() - else - let g:EasyMotion_use_migemo = 0 - throw "Error: ".enc." is not supported. Migemo is made disabled." - endif -endfunction "}}} - -" EasyMotion#helper#strchars() {{{ -if exists('*strchars') - function! EasyMotion#helper#strchars(str) - return strchars(a:str) - endfunction -else - function! EasyMotion#helper#strchars(str) - return strlen(substitute(a:str, ".", "x", "g")) - endfunction -endif "}}} -function! EasyMotion#helper#include_multibyte_char(str) "{{{ - return strlen(a:str) != EasyMotion#helper#strchars(a:str) -endfunction "}}} -"}}} - -" Restore 'cpoptions' {{{ -let &cpo = s:save_cpo -unlet s:save_cpo -" }}} -" vim: fdm=marker:et:ts=4:sw=4:sts=4 diff --git a/bundle/easymotion/autoload/EasyMotion/highlight.vim b/bundle/easymotion/autoload/EasyMotion/highlight.vim deleted file mode 100755 index 7ca7e16..0000000 --- a/bundle/easymotion/autoload/EasyMotion/highlight.vim +++ /dev/null @@ -1,251 +0,0 @@ -"============================================================================= -" FILE: highlight.vim -" AUTHOR: haya14busa -" Reference: https://github.com/t9md/vim-smalls -" License: MIT license {{{ -" Permission is hereby granted, free of charge, to any person obtaining -" a copy of this software and associated documentation files (the -" "Software"), to deal in the Software without restriction, including -" without limitation the rights to use, copy, modify, merge, publish, -" distribute, sublicense, and/or sell copies of the Software, and to -" permit persons to whom the Software is furnished to do so, subject to -" the following conditions: -" -" The above copyright notice and this permission notice shall be included -" in all copies or substantial portions of the Software. -" -" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -" IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -" CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -" TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -" SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -" }}} -"============================================================================= -scriptencoding utf-8 -" Saving 'cpoptions' {{{ -let s:save_cpo = &cpo -set cpo&vim -" }}} - -function! EasyMotion#highlight#load() - "load -endfunction - -" -- Default highlighting ---------------- {{{ -let g:EasyMotion_hl_group_target = get(g:, - \ 'EasyMotion_hl_group_target', 'EasyMotionTarget') -let g:EasyMotion_hl2_first_group_target = get(g:, - \ 'EasyMotion_hl2_first_group_target', 'EasyMotionTarget2First') -let g:EasyMotion_hl2_second_group_target = get(g:, - \ 'EasyMotion_hl2_second_group_target', 'EasyMotionTarget2Second') -let g:EasyMotion_hl_group_shade = get(g:, - \ 'EasyMotion_hl_group_shade', 'EasyMotionShade') - -let g:EasyMotion_hl_inc_search = get(g:, - \ 'EasyMotion_hl_inc_search', 'EasyMotionIncSearch') -let g:EasyMotion_hl_inc_cursor = get(g:, - \ 'EasyMotion_hl_inc_cursor', 'EasyMotionIncCursor') -let g:EasyMotion_hl_move = get(g:, - \ 'EasyMotion_hl_move', 'EasyMotionMoveHL') - -let s:target_hl_defaults = { - \ 'gui' : ['NONE', '#ff0000' , 'bold'] - \ , 'cterm256': ['NONE', '196' , 'bold'] - \ , 'cterm' : ['NONE', 'red' , 'bold'] - \ } - -let s:target_hl2_first_defaults = { - \ 'gui' : ['NONE', '#ffb400' , 'bold'] - \ , 'cterm256': ['NONE', '11' , 'bold'] - \ , 'cterm' : ['NONE', 'yellow' , 'bold'] - \ } - -let s:target_hl2_second_defaults = { - \ 'gui' : ['NONE', '#b98300' , 'bold'] - \ , 'cterm256': ['NONE', '3' , 'bold'] - \ , 'cterm' : ['NONE', 'yellow' , 'bold'] - \ } - -let s:shade_hl_defaults = { - \ 'gui' : ['NONE', '#777777' , 'NONE'] - \ , 'cterm256': ['NONE', '242' , 'NONE'] - \ , 'cterm' : ['NONE', 'grey' , 'NONE'] - \ } - -let s:shade_hl_line_defaults = { - \ 'gui' : ['red' , '#FFFFFF' , 'NONE'] - \ , 'cterm256': ['red' , '242' , 'NONE'] - \ , 'cterm' : ['red' , 'grey' , 'NONE'] - \ } - -let s:target_hl_inc = { - \ 'gui' : ['NONE', '#7fbf00' , 'bold'] - \ , 'cterm256': ['NONE', '40' , 'bold'] - \ , 'cterm' : ['NONE', 'green' , 'bold'] - \ } -let s:target_hl_inc_cursor = { - \ 'gui' : ['#ACDBDA', '#121813' , 'bold'] - \ , 'cterm256': ['cyan' , '232' , 'bold'] - \ , 'cterm' : ['cyan' , 'black' , 'bold'] - \ } -let s:target_hl_move = { - \ 'gui' : ['#7fbf00', '#121813' , 'bold'] - \ , 'cterm256': ['green' , '15' , 'bold'] - \ , 'cterm' : ['green' , 'white' , 'bold'] - \ } -" }}} -function! EasyMotion#highlight#InitHL(group, colors) " {{{ - let group_default = a:group . 'Default' - - " Prepare highlighting variables - let guihl = printf('guibg=%s guifg=%s gui=%s', a:colors.gui[0], a:colors.gui[1], a:colors.gui[2]) - let ctermhl = &t_Co == 256 - \ ? printf('ctermbg=%s ctermfg=%s cterm=%s', a:colors.cterm256[0], a:colors.cterm256[1], a:colors.cterm256[2]) - \ : printf('ctermbg=%s ctermfg=%s cterm=%s', a:colors.cterm[0], a:colors.cterm[1], a:colors.cterm[2]) - - " Create default highlighting group - execute printf('hi default %s %s %s', group_default, guihl, ctermhl) - - " Check if the hl group exists - if hlexists(a:group) - redir => hlstatus | exec 'silent hi ' . a:group | redir END - - " Return if the group isn't cleared - if hlstatus !~ 'cleared' - return - endif - endif - - " No colors are defined for this group, link to defaults - execute printf('hi default link %s %s', a:group, group_default) -endfunction " }}} -function! EasyMotion#highlight#init() "{{{ - call EasyMotion#highlight#InitHL(g:EasyMotion_hl_group_target, s:target_hl_defaults) - call EasyMotion#highlight#InitHL(g:EasyMotion_hl2_first_group_target, s:target_hl2_first_defaults) - call EasyMotion#highlight#InitHL(g:EasyMotion_hl2_second_group_target, s:target_hl2_second_defaults) - call EasyMotion#highlight#InitHL(g:EasyMotion_hl_group_shade, s:shade_hl_defaults) - call EasyMotion#highlight#InitHL(g:EasyMotion_hl_inc_search, s:target_hl_inc) - call EasyMotion#highlight#InitHL(g:EasyMotion_hl_inc_cursor, s:target_hl_inc_cursor) - call EasyMotion#highlight#InitHL(g:EasyMotion_hl_move, s:target_hl_move) - if exists(':CSApprox') == 2 && g:EasyMotion_force_csapprox - "TODO: better solution or remove completly - CSApprox! - endif -endfunction "}}} - -" Reset highlighting after loading a new color scheme {{{ -augroup EasyMotionInitHL - autocmd! - autocmd ColorScheme * call EasyMotion#highlight#init() -augroup end -" }}} - -call EasyMotion#highlight#init() -" Init: {{{ -let s:h = {} -let s:h.ids = {} -let s:priorities = { - \ g:EasyMotion_hl_group_target : 1, - \ g:EasyMotion_hl2_first_group_target : 1, - \ g:EasyMotion_hl2_second_group_target : 1, - \ g:EasyMotion_hl_group_shade : 0, - \ g:EasyMotion_hl_inc_search : 1, - \ g:EasyMotion_hl_inc_cursor : 2, - \ g:EasyMotion_hl_move : 0, - \ } -for s:group in keys(s:priorities) - let s:h.ids[s:group] = [] -endfor -unlet s:group -"}}} - -function! EasyMotion#highlight#delete_highlight(...) "{{{ - let groups = !empty(a:000) ? a:000 : keys(s:priorities) - for group in groups - for id in s:h.ids[group] - silent! call matchdelete(id) - endfor - let s:h.ids[group] = [] - endfor -endfunction "}}} -function! EasyMotion#highlight#add_highlight(re, group) "{{{ - call add(s:h.ids[a:group], matchadd(a:group, a:re, s:priorities[a:group])) -endfunction "}}} -function! EasyMotion#highlight#add_pos_highlight(line_num, col_num, group) "{{{ - call add(s:h.ids[a:group], matchaddpos(a:group, [[a:line_num, a:col_num]], s:priorities[a:group])) -endfunction "}}} -function! EasyMotion#highlight#attach_autocmd() "{{{ - " Reference: https://github.com/justinmk/vim-sneak - augroup plugin-easymotion - autocmd! - autocmd InsertEnter,WinLeave,BufLeave - \ silent! call EasyMotion#highlight#delete_highlight() - \ | autocmd! plugin-easymotion * - autocmd CursorMoved - \ autocmd plugin-easymotion CursorMoved - \ silent! call EasyMotion#highlight#delete_highlight() - \ | autocmd! plugin-easymotion * - augroup END -endfunction "}}} -function! EasyMotion#highlight#add_color_group(new_groups) "{{{ - let s:priorities = extend(deepcopy(s:priorities), a:new_groups) - for group in keys(a:new_groups) - let s:h.ids[group] = [] - endfor -endfunction "}}} - -function! EasyMotion#highlight#capture(hlname) "{{{ - " Based On: https://github.com/t9md/vim-ezbar - " https://github.com/osyo-manga/vital-over - let hlname = a:hlname - if !hlexists(hlname) - return - endif - while 1 - let save_verbose = &verbose - let &verbose = 0 - try - redir => HL_SAVE - execute 'silent! highlight ' . hlname - redir END - finally - let &verbose = save_verbose - endtry - if !empty(matchstr(HL_SAVE, 'xxx cleared$')) - return '' - endif - " follow highlight link - let ml = matchlist(HL_SAVE, 'links to \zs.*') - if !empty(ml) - let hlname = ml[0] - continue - endif - break - endwhile - let HL_SAVE = substitute(matchstr(HL_SAVE, 'xxx \zs.*'), - \ '[ \t\n]\+', ' ', 'g') - return [hlname, HL_SAVE] -endfunction "}}} -function! EasyMotion#highlight#turn_off(hl) "{{{ - if type(a:hl) != type([]) - return - endif - execute 'highlight ' . a:hl[0] . ' NONE' -endfunction "}}} -function! EasyMotion#highlight#turn_on(hl) "{{{ - if type(a:hl) != type([]) - return - endif - execute 'highlight ' . a:hl[0] . ' ' . a:hl[1] -endfunction "}}} - -" Restore 'cpoptions' {{{ -let &cpo = s:save_cpo -unlet s:save_cpo -" }}} -" __END__ {{{ -" vim: expandtab softtabstop=4 shiftwidth=4 -" vim: foldmethod=marker -" }}} diff --git a/bundle/easymotion/autoload/EasyMotion/migemo/cp932.vim b/bundle/easymotion/autoload/EasyMotion/migemo/cp932.vim deleted file mode 100755 index 8d6e7d9..0000000 --- a/bundle/easymotion/autoload/EasyMotion/migemo/cp932.vim +++ /dev/null @@ -1,56 +0,0 @@ -function! EasyMotion#migemo#cp932#load_dict() - return { - \ 'a' : '\%([��ݕ��N��Ҋ{�b���]毛^�������w�܏��㦚@�o�C�����粕ӓ��J���l���V�Ȍl�ˆ��^���Мۜ��{���Q��z��鸈��W�E�B���{���M�Q榓k�w��{�\�����N�}�H���o���{���t����V�p�������A�֔\���H�Փ��a�ڏS�[矏N�����a�W���o㻓֏��~�ĔM���ؒg��禈������Ŋ��������[���N�Ύ����ҕ����a�e��}�y�R�����X���v���I���\����॑��Ő��V�a�z�\���e���X�~�d�V�E�����Y�эʊ늿�ߎӕT��瑀������剕Օ����P����]��J�ÓV���������쉐�˖ԋY�͈��������b���������般�HꙌ���������ǖ�����s����N��L�[����ӟ�䈮�����N�����z���������P�j�E�D���ɏ͏������W�쏺�H�����q蕚��V����襕��B���\���͈��ԑ�����~㪌Z����Q�s�ň��}�Ĉ��ǝ�ƈ����䒩�툤���@��r�b�����`�~�����q�g���ݝю鈩�[����脝��ōC���K��暖\�ؐԙ���z�Đ��•Ɉ����Œ��a�����S���㈢�Ҍ�ݕ����J�숫�r�G�}�����L�������j���򈡈��}�[�Y�ޝ����K�������g�������O���c������������&�ȁ��_�ڋ��͋��́����ˁ����܌�W���āN�L�M�O�f�`���������A�p�@a]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|Z\_s*\%(n\|i\_s*n\_s*c\)\|��\_s*�q\|��\_s*��\|�E\_s*�n\|�f\_s*��\|��\_s*��\|�M\_s*�V\_s*��\|��\_s*�T\|��\_s*��\|�Z\_s*�q\|��\_s*��\|�l\_s*��\|��\_s*��\|��\_s*��\|�^\_s*��\|��\_s*��\|��\_s*�w\|��\_s*[����]\|��\_s*�p\|��\_s*��\|��\_s*��\|L\_s*a\_s*r\_s*d\_s*i\_s*z\_s*a\_s*b\_s*a\_s*l\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*�{\|��\_s*\%(��\|��\_s*�q\)\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\_s*��\)\|�H\_s*�a\_s*�b\|H\_s*a\_s*l\_s*o\_s*r\_s*a\_s*g\_s*a\_s*l\_s*e\_s*s\|��\_s*�F\|��\_s*��\|��\_s*�`\|�^\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\|�D\_s*�`\|��\_s*[�������K]\|��\_s*�G\|��\_s*[�m�F]\|�\_s*�x\|��\_s*��\|��\_s*��\|��\_s*��\|�p\_s*\%([�ۓc]\|��\_s*�p\|��\_s*��\)\|��\_s*[�ɁX]\|E\_s*\%(s\|i\_s*n\_s*s\_s*t\_s*e\_s*i\_s*n\_s*i\_s*u\_s*m\)\|I\_s*\%(r\_s*i\_s*d\_s*a\_s*l\_s*e\_s*s\|P\_s*\%(�d\_s*�b\|�A\_s*�h\_s*��\_s*�X\)\|D\_s*�J\_s*�[\_s*�h\|C\_s*\%(�^\_s*�O\|�J\_s*�[\_s*�h\)\)\|�h\_s*\%(�o\_s*�d\_s*�b\|�b\_s*\%(�^\_s*�O\|�J\_s*�[\_s*�h\)\)\|��\_s*�~\|��\_s*��\|�c\_s*��\|�n\_s*��\_s*��\|�C\_s*[�^�l���m���]\|R\_s*u\_s*b\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|��\_s*��\_s*�a\_s*��\|��\_s*��\|��\_s*�n\|��\_s*[ꆔn��]\|M\_s*a\_s*l\_s*v\_s*a\_s*l\_s*e\_s*s\|�g\_s*��\_s*�v\_s*��\_s*A\|��\_s*��\| \_s*�A\_s*�N\_s*�V\_s*�A\_s*��\|�q\_s*�f\|��\_s*�f\|��\_s*�s\_s*��\_s*�x\_s*�Z\_s*�p\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*�Y\|��\_s*��\|G\_s*o\_s*l\_s*d\|��\_s*��\_s*\%(��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*�@\|�a\_s*��\_s*��\_s*�@\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|�Z\_s*��\_s*�g\_s*�L\_s*�b\_s*�c\_s*�l\|S\_s*\%(b\|i\_s*l\_s*v\_s*e\_s*r\)\|�g\_s*�p\_s*��\_s*�\\|��\_s*�p\_s*��\_s*�\\|�Z\_s*�@\|��\_s*��\_s*��\_s*��\|�I\_s*\%(��\|�M\_s*��\_s*�X\_s*�^\_s*��\|�h\_s*��\_s*�C\|��\_s*�O\_s*�X\_s*�g\_s*��\_s*�[\_s*��\|��\_s*\%(�g\_s*�L\_s*�[\|�^\_s*\%([�[�i]\|�l\_s*\%(�[\_s*�g\|�C\_s*�g\)\)\)\|�[\_s*\%([�N�K�T�g����]\|�j\_s*��\_s*�O\|�L\_s*�V\_s*��\|�u\_s*��\_s*�[\|�o\_s*�[\_s*�h\|�x\_s*��\_s*�W\_s*��\|�M\_s*��\_s*�X\_s*\%(�g\|�^\_s*��\)\|�]\_s*��\_s*�k\|�X\_s*\%(�`\_s*��\|�e\_s*�B\_s*��\|�^\_s*�[\|�g\_s*\%(��\_s*�A\|��\_s*��\_s*�A\)\)\|�h\_s*��\_s*�[\|�W\_s*\%([�F�[]\|�I\_s*��\_s*�W\)\|�f\_s*�B\_s*\%(�I\|�G\_s*��\_s*�X\|�V\_s*��\_s*��\|�g\_s*��\_s*�A\_s*��\)\|�^\_s*��\|�\\_s*\%(��\_s*�e\_s*�B\|��\_s*�C\_s*�Y\)\|�Z\_s*��\_s*�e\_s*�B\_s*�b\_s*�N\|��\_s*��\)\)\|�z\_s*��\|�o\_s*�C\_s*�g\|�n\_s*��\_s*�}\_s*�Q\_s*�h\_s*��\|��\_s*��\|�l\_s*�H\_s*\%(��\_s*��\_s*��\|�m\_s*�\\)\|�C\_s*\%(�[\_s*�W\_s*�X\|�I\_s*��\|�\\_s*�b\_s*�v\)\|�}\_s*��\_s*�h\_s*�D\_s*�[\_s*�N\|��\_s*\%(�z\_s*��\|��\_s*��\|��\_s*�p\)\|A\_s*\%([tlrImc]\|u\_s*s\_s*t\_s*r\_s*o\_s*b\_s*a\_s*i\_s*l\_s*e\_s*y\_s*a\_s*c\_s*e\_s*a\_s*e\|n\_s*t\_s*i\_s*m\_s*o\_s*n\_s*y\|K\_s*C\_s*L\|S\_s*C\_s*I\_s*I\|s\_s*t\_s*a\_s*t\_s*i\_s*n\_s*e\|�^\_s*�C\_s*�v\|T\_s*O\_s*K\|N\_s*S\_s*I\|V\_s*�V\_s*�X\_s*�e\_s*��\|L\_s*T\_s*�L\_s*�[\|��\_s*��\_s*�N\|E\_s*R\_s*A\|D\_s*S\_s*L\_s*��\_s*�f\_s*��\|�h\_s*��\_s*�C\_s*�u\|d\_s*a\|M\_s*��\_s*�W\_s*�I\|b\_s*s\_s*t\_s*r\_s*a\_s*c\_s*t\_s* \_s*C\_s*o\_s*n\_s*t\_s*r\_s*o\_s*l\_s* \_s*M\_s*o\_s*d\_s*e\_s*l\|�J\_s*�b\_s*�v\|�N\_s*��\_s*�X\|C\_s*�A\_s*�_\_s*�v\_s*�^\)\|�t\_s*�^\|�`\_s*\%([�S�^��]\|��\_s*��\_s*��\|�a\_s*\%(�^\|��\_s*��\_s*��\_s*��\)\|�^\_s*�C\_s*�v\|�s\_s*��\_s*�s\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*�N\|�h\_s*�G\_s*�L\_s*�X\_s*�p\_s*�[\_s*�g\|�^\_s*�c\_s*�R\_s*��\_s*�o\_s*�[\_s*�^\|�h\_s*��\_s*�C\_s*�u\|��\_s*��\_s*��\_s*��\|�J\_s*�b\_s*�v\|�N\_s*��\_s*�X\|��\_s*��\_s*��\_s*��\)\|��\_s*�p\|�G\_s*\%([�j���A�C�[]\|�b\_s*�`\|��\_s*\%(�h\_s*��\_s*��\|�W\_s*�F\_s*\%(��\|��\_s*�b\_s*�N\)\|�[\_s*��\)\|��\_s*�A\|�I\_s*��\_s*�A\|�X\_s*�e\|�v\_s*��\_s*��\)\)', - \ 'b' : '\%([���ݍ����x�f��t���ݖv�{�}�~�Ϟ��s�r�`���ڝ����p�ؖn�l�m�q�����b�Q�쟂�������ۙR廖g�e���䛖����O�E�庈��ꆉK�����㦖R���W�a�X��Z�U�`���Y��N��ϛ��˖S�c�]�f�h�T�^�d��d�ە����_�@��W敖͕ꊱ�����V�G�����J����ڙk�K�럑��㰙p�gꈕ���̕��V�ՙ��A�ğ��~�܍�燙��ᾙj�וؕ�糉•�粂בD�[�k�u�q�J�����������ڒ������ܐ[�W��᳓ؐߕ��ܖܘŕ��h�ᕷ���w�������ŕs�F���U�����򐁕����x�����ᕔ�F�~���o���@�����ԕ�捐l�L�J�x�ʕT�C�Z�z�[���ߞ�㢛��m�p�C�ޜ��r�F��{���q�n�֛�焕S蓔���I�a���l�ߕ[�L�e����ὕ��d�c�b�`�_�a���Γ��Z�r����ۖ������o�ɔ��z���e�����X�]�䛇���g���є��䊑����ы��I���s���������������@�[���bV���������鯝U���A�j���c�U���P�������������W���є��m���\�����e���}�����ޔ��ȉS�i�t��䕔|��ꀊL�����������{�~�}���ŝם��f�\�����Ҕ��Ԗ_�J���m�ה”d���H����ݔ֔ӔՔԔؖ��따������������n�t�k�l�����y�H�Ő�����m���n���\�΂��g�������ۉ���~�b�a�|�_�攞�{�o�n�m�o�p�u�r�A���q���xb]\|�\_s*\%(�\_s*�\|�\_s*�\|�\_s*�\|�\_s*�\|�\_s*�\)\|�b\_s*[�{�x�u�r�o]\|��\_s*[�ڂׂԂт�]\|�\_s*�\|��\_s*��\|�A\_s*��\|P\_s*a\_s*e\_s*o\_s*n\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|��\_s*��\|��\_s*�Z\|��\_s*��\|�r\_s*�r\|��\_s*��\|�\_s*�\|��\_s*�_\|��\_s*�_\|��\_s*��\|�E\_s*��\|�\_s*�\|��\_s*�C\|��\_s*��\|�X\_s*[���j]\|�R\_s*��\_s*�O\|F\_s*a\_s*g\_s*a\_s*l\_s*e\_s*s\|�z\_s*�c\|�\_s*��\|�u\_s*\%(��\|�l\_s*�b\_s*�N\|�V\_s*�l\_s*�}\)\|��\_s*�q\|�t\_s*�q\|��\_s*��\|�L\_s*[�O��]\|�\_s*�\|�V\_s*�A\_s*�O\|��\_s*[�ĘU]\|�\\_s*�D\|��\_s*[���D]\|��\_s*��\|�o\_s*��\_s*�\|��\_s*��\|��\_s*��\|S\_s*a\_s*n\_s*t\_s*a\_s*l\_s*a\_s*l\_s*e\_s*s\|�h\_s*��\|��\_s*[�q�@]\|�\\_s*��\|��\_s*[�Žq]\|�\_s*�\|��\_s*��\|��\_s*�q\|�c\_s*��\_s*��\_s*��\|�b\_s*��\_s*��\|R\_s*o\_s*s\_s*a\_s*l\_s*e\_s*s\|�K\_s*�N\|��\_s*�q\|��\_s*\%([�ъy�J]\|��\_s*��\_s*��\)\|�\_s*��\|�\_s*��\|��\_s*��\|A\_s*n\_s*n\_s*o\_s*n\_s*a\_s*c\_s*e\_s*a\_s*e\|�\_s*��\|��\_s*[���]\|�f\_s*��\_s*��\|�v\_s*��\_s*�R\_s*�M\|��\_s*��\_s*��\|�I\_s*�[\_s*�g\_s*�o\_s*�C\|��\_s*[�b��]\|�t\_s*�@\_s*�S\_s*�b\_s*�g\|�w\_s*�i\|�k\_s*��\|�y\_s*\%(�L\_s*��\|�e\_s*��\_s*�M\_s*�E\_s*�X\)\|�L\_s*�f\|�C\_s*�M\_s*��\_s*�X\|�a\_s*\%([�ʔ����^��]\|��\_s*�E\|�^\_s*�C\_s*�v\|�h\_s*��\_s*�C\_s*�u\|�J\_s*�b\_s*�v\|�N\_s*��\_s*�X\|�|\_s*�X\_s*�v\_s*��\_s*�C\_s*��\|��\_s*��\_s*��\_s*�m\_s*��\_s*��\_s*��\|��\_s*��\_s* \_s*�d\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*�N\)\|�z\_s*�E\_s*�f\|B\_s*\%([h�ʔ����^kiae]\|C\_s*��\_s*��\|N\_s*F\_s*(\_s*B\_s*a\_s*c\_s*k\_s*u\_s*s\_s*-\_s*N\_s*a\_s*u\_s*r\_s* \_s*F\_s*o\_s*r\_s*m\_s*)\|B\_s*C\|�^\_s*�C\_s*�v\|u\_s*r\_s*k\_s*i\_s*n\_s*a\_s* \_s*F\_s*a\_s*s\_s*o\|�t\_s*��\_s*�b\_s*�c\|�h\_s*��\_s*�C\_s*�u\|�J\_s*�b\_s*�v\|�N\_s*��\_s*�X\|M\_s*P\_s*�t\_s*�@\_s*�C\_s*��\|�X\_s*�v\_s*��\_s*�C\_s*��\|S\_s*\%(D\|�L\_s*�[\|�`\_s*��\_s*�[\_s*�i\|�A\_s*��\_s*�e\_s*�i\|�f\_s*�W\_s*�^\_s*��\)\|O\_s*X\_s*�Z\_s*�b\_s*�g\|I\_s*T\_s*N\_s*E\_s*T\|r\_s*o\_s*m\_s*i\_s*n\_s*e\|��\_s*��\_s*�N\|o\_s*\%(h\_s*r\_s*i\_s*u\_s*m\|v\_s*i\_s*n\_s*e\_s* \_s*S\_s*p\_s*o\_s*n\_s*g\_s*i\_s*f\_s*o\_s*r\_s*m\_s* \_s*E\_s*n\_s*c\_s*e\_s*p\_s*h\_s*a\_s*l\_s*o\_s*p\_s*a\_s*t\_s*h\_s*y\|o\_s*k\|r\_s*o\_s*n\)\)\|��\_s*�f\)', - \ 'c' : '\%([��a�������|�Ҝ��D����ޏn�s���}�������l�a��ʗ���ۗⵘ�ᶐs���Ќ����f�����َ�����řb���I���z���iꑍ����C���麌Z欉��䓚��৙}�Y���ɍ��`�n�����X���M���ȍ��������뜝�k�՞����ߌ�����������匣���Ӎ����������e�W�E�Q���������L�m�՘i�������Q�f���肝K�����ਗ਼�Ჟ�騟����}�{㝛����Ř��ҟ������L���`�t�i���B�R�������H��{ൟ������H�s秝���n�n�������˝J�ܔ���X���L�J�y�ߛ��b�}褜���r�R���t莘m�E��硍h�k���l�K����ᦜ������n�K�}��֞��\��@囍y��ෙ��Μˍ[⠍x����u�X�S�e倘������J�i�^���V�@���A����W����G�D�T�������`ᩍB��ԍp���]�P���I���z�t�_�����k�O�j�R�w�u�P�a�I�|�q�F�X�Z�s�m�r���c���D�ޞ��J�ܛ��͞��w�L�l���������܍���W�����ێ����ЛZ�Ö��s������烌��g���םs�ؑ������e������u����Čٌ̟��]�|����V�������x�֒���绌і�嚙��h���ʉz�njԌך➳���Ҕ�ȏ��˗��Z�������ꉟ��h�@���Z���X������N���ÖZ��驒L�L���Q�k�ŚT���G���i���֙�����↝B�ގE���ِېߐ����������C��G����ዙ��Н�[�T�����אɐ͐Ȑǝ��A�����⣛p蔞��t��d�C�N���ӟ׈��ߙ�Eᝎa���x������㙘��A�����_�b����a���J����ஓϛ��Ƙj�b�H��ⳙA�G�S���L⒑W�s�r��������D�J�A�L��񙒐�枙@�ۑM���H����l�F�K�����D�G�@�B��h�坡�ǑN�����d�D��������I���扙��|���œҝ�ᝩ��⫟Ő�ꎖ�����������v�R�ΐ����y���H�����������`�Ր��������ǍU���}�����[���������҂���z���K�M�z����ⱟJ��㖍������I�����H���E��z�b�o�����x�ܗ��A�ϕ��D�B��ӏ��~���������B䱌s���Z�Y�㙬��ᯞ���ӛ��M�֌N���v������K�@����{���^���Z��퐾�^����������鶔�ňʈ��U�Ñq�������C�~���X�V�T�R�U�W�S�܉_�w�o�^�������鿌~���G�F䇚��`�p�����Y�������۞����ƌI����Әޚ��P�M�������u���o�Ӎ����������c�������q�v�E�|―���ꋀ��Ῑ܌J�ɍC�g�����{�m�������X�؍H���ᜁ��v�㜜���ҙ��g���电�M���˂����捃����A�B������P������D���Y���`���L�������Z��迓��Ӟx���Z������l���W�������ȓ��������G�F�a�Ǝb����乗��M�E�Ε��s�C�F�n�����D�㈵㦋s�����]��Ŗl�^⚑����A潓��g���ߞΖ�儞����b���ɖΜ���臐w�p����d�����[��g�����謎�姎����^���G�������N���H���˒��ΐÎ������ᕹ���R����������K�\�ސˌ�K�Ž��������K����o���q�ҍ������t����������ϔ����O���ӎ��͚��͟��̍��b�A�j�P�֎��y�����ࡐ̝�咙��ݐ���┐Ԏ��^�ېΎގڎ����Y�ώՎˎΎɎԎߎЈޝ��i�S�G���CဋÎ����f�t偛W�V�z������题�����E�������f�����i�g�l�h�k�{��������蜕��婏o�F�����T��碏V�h�q�h�����F�J娏Q�K�����榚S����酝��n��������������S�X�K�U��ڏM�G�j���a�E�N�����O�D�C�A�L�R�T�W�I���H�B�@���M�����\�᭚�����忏w�{���v�x�s�⡏u�r�f�ݐ����Z���u���Vꐚp�y���曐P�]�A�������U�j�J��������f�Y�`�D����s橝ΐa�O��凓��c�j�c�ѐU�a�N�f�d��C�k���X���ĐL���T�Q�W�i�[�R�M�e�b�I�\�S�^�V���΋n�Z���o䜏���_�י|���䓏��w����򏎏����������ҟ����m䀛���u�L���Џ�������縐��מ�⪎™דɜ�����v���R�I���ߜ��c��B�_�џn���Ո䐯�����B辑����[�����K頏����[��␏���K♏����яҁ������u���i�]��疏֏Ӑ��Ԛ��А�躐���Ϗ��U���J���n���ސ��Ŝ܏��ߏ���Ꮟ����ُ������G���Ꮷ������ଞ������������������������͏Ǐ����ɏ����������Џˏ�暏Ώ��ďƏ��͏ڏ��؏ɏ����������T�l������\�e�g�����p�@�C�ܑ������D�I����冐B�����G���A�H�E�n❎o�m�o�w���v���L���U���������������h���n�ы��Ŏᎊ�t�r�@���{��������w���Ϛ`���������i�Аy�э��i�@�����E���J�X拎}�泛��n���y�o�N�Z�y���ٝ��f���j�{����~����|���{�o���ߘ��I�X�B�]�K�������V�g���u�������p����i���k���l��藘ʛ�Ɠ��j��⏎s��ꏎÎ��~��˔`���Œs��y�d�@���؎���䢊�Y�o�u�m���e�����ᘊ��y���NJ��r���݊��j���ƌy�����Ĉ�呁��e�A���i������������M�ʕr��P�T�M�v���ᚌ�ȍ��f�j�q�s�e�g�h�p�o�t�r����鹜��NJ����D�R���U�ğd��ᥛz�㕖�p�ȌڋA���ԓ�雛��_�B�ߗ��ދȋ�\�����Ί����͏ۋw�d�T��e�z�J�x���Ō`���ӌ^�����H���Ȕ����X��R㎎C���P���t������qK�Š������锯閟������@�����Њ��|��嶝^艔���噞J㹊��������{������歒S�������e顊��j舊����������s�Fጐ��d�P�}���g�����y�a�`�f����S�W���m���e����O���]�ݑ��ڙ̛����ň�����@����`�F�������O���P��\�[��g����ಉG�h���󓂞Њ����~�y�ۉ������}�q�����ɐ��͘����V�،����~ऐ����c���͌��b���w��u�x�v�i�X�Õ��L����ꖊ��G�K�Ə̓C魜S�R���Д߈����K�v���֓S哑t�������ݓk�������L�S�ښ��湛�誝����ᙚٚ]���d䡜����Q���I�v�n��跏ʜ������h���\�f�r�n�z�y�k�l�m�k�g�c�s�t�i�o�݉B�v�l�d���j�ߊg�q�u�p�m嵚��W������~�[�����Z�B���͙��G�r�q�ʟD�䠜j珞i������ƙd�^�񔐘��\�X����{�Ž\箊I�ؘ�����r�H�_���������j�~�F���׊@��E�m�����L�G���D�ŊA��������K����J����C�������I䯘��Yᷛe�p���՟��b�Nボ�錝A���Q���a��T㼛�㻛f�W�`�c洟a�����⻝q�j����鉙ɞ쏁㣎���V�늬�����M����ϊ�䅟��j���F�����r�������ȟ�綝��m���l���b���˙����_�x�����pᒔ����c�g����⭊��|�}�ۚ��ۊ��@�يΞ��؊��󊩐��Ҋ��@�����ʊ��Ş��̊��Ɋ��ƜA�L��萊ъ������ŠԊ׊��ՊĚ^���Ê��NJ����֊��͊������ϊ��w����x�s�q�P�g�ӊe�����a���㞎��ʼnؚĝ̎���d�ˉ��Z�Γ��ٌ����q�҃�����斉����v�q�Ўx�|�ۉԊ��Q���|����ўh�`��ܛ�����嘉������]�Ǝ؉�㟋�z�ɉÈՉʜ����F��荊����ЌC�a�{�����`�e�k�J�m�”ޚ썁�͉̉ώ����o����ז�◚D�S���l���όU���ґݙ͉щݙ��ljӌT��旞g�~�߉惕�砌����ĉ����ጜ����Ə�����戉Č͉ɂ����E�c���‹���ā����ى����q�S���G���B�J�H�x�w�[�`�T�I�r�������|�R�K�����V�F�O�^�Q�U�\�Z���A���Y�z���M�{�P�s�t�}���N�L�v�p�y���u���@�C�]���E�_�����~���D�􄩄��~���������������ԃ��q���X���W�ہA�C�F�N�Ջ��\�Ȑ��ߕϐڃJ�������������������R���V���Zc]\|�\_s*[�����]\|�b\_s*[�R�Z�N�V�J]\|��\_s*[�q����������]\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*�y\|��\_s*�m\|��\_s*�F\|��\_s*��\|��\_s*��\|�S\_s*��\|f\_s*o\_s*o\_s*t\_s* \_s*a\_s*n\_s*d\_s* \_s*m\_s*o\_s*u\_s*s\_s*e\_s* \_s*d\_s*i\_s*s\_s*e\_s*a\_s*s\_s*e\|��\_s*�C\|��\_s*��\|A\_s*\%(r\_s*c\_s*h\_s*i\_s*c\_s*h\_s*l\_s*a\_s*m\_s*y\_s*d\_s*e\_s*a\_s*e\|p\_s*i\_s*a\_s*l\_s*e\_s*s\)\|U\_s*m\_s*b\_s*e\_s*l\_s*l\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\|��\_s*��\|�}\_s*��\|��\_s*�@\|�O\_s*[�ȍ�]\|��\_s*[�ĘU]\|�P\_s*�y\|��\_s*��\|��\_s*[���X��]\|�~\_s*��\|�\_s*��\|�S\_s*[�Z��]\|��\_s*�h\|9\_s*[����]\|�^\_s*�{\|�Q\_s*�O\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*�|\|�T\_s*��\_s*��\|�T\_s*��\|��\_s*��\_s*��\|H\_s*e\_s*l\_s*l\_s*e\_s*b\_s*o\_s*r\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|��\_s*��\|J\_s*u\_s*g\_s*l\_s*a\_s*n\_s*d\_s*a\_s*l\_s*e\_s*s\|�Z\_s*��\|�n\_s*�_\|�s\_s*�q\|R\_s*h\_s*a\_s*m\_s*n\_s*a\_s*l\_s*e\_s*s\|�V\_s*��\|�]\_s*��\|�f\_s*[���l��]\|��\_s*�A\|�s\_s*[�m�E]\|��\_s*��\|L\_s*a\_s*\%(u\_s*r\_s*\%(a\_s*c\_s*e\_s*a\_s*e\|o\_s*i\_s*d\_s*e\_s*a\_s*e\)\|b\_s*i\_s*a\_s*t\_s*a\_s*e\|m\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\)\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|�~\_s*��\|��\_s*�t\_s*��\|��\_s*��\|��\_s*�_\|��\_s*�Y\|��\_s*��\|��\_s*��\|I\_s*\%(s\_s*o\_s*p\_s*y\_s*r\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|l\_s*l\_s*i\_s*c\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\)\|W\_s*i\_s*n\_s*t\_s*e\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|�`\_s*��\|�]\_s*[�X�]]\|�\_s*\%([�Ɨ���u�ʑ��Ɏ茓��]\|��\_s*��\|�[\_s*��\|��\_s*��\)\|��\_s*\%(�X\_s*��\_s*��\|��\_s*��\_s*��\)\|7\_s*��\|�V\_s*��\|��\_s*��\|4\_s*��\|�S\_s*[����]\|�R\_s*�{\|�\_s*�\|�h\_s*�t\|��\_s*[�ʈ�]\|��\_s*��\|�O\_s*\%(��\|��\_s*��\)\|�|\_s*[�“�]\|�A\_s*[�o��]\|��\_s*��\|B\_s*r\|��\_s*[�N�Y]\|�\_s*[���]\|�r\_s*[ꏎ�]\|�Q\_s*��\|��\_s*�Y\|�b\_s*��\|�c\_s*�e\|��\_s*��\|M\_s*\%(e\_s*t\_s*a\_s*c\_s*h\_s*l\_s*a\_s*m\_s*y\_s*d\_s*e\_s*a\_s*e\|u\_s*s\_s*a\_s*l\_s*e\_s*s\)\|Z\_s*i\_s*n\_s*g\_s*i\_s*b\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|S\_s*\%([eg]\|p\_s*e\_s*r\_s*m\_s*a\_s*t\_s*o\_s*p\_s*h\_s*y\_s*t\_s*a\|c\_s*i\_s*t\_s*a\_s*m\_s*i\_s*n\_s*e\_s*a\_s*e\)\|��\_s*\%(��\_s*�{\_s*\%(�I\|��\_s*�I\)\|��\_s*��\_s*�a\_s*��\_s*�W\)\|��\_s*�Z\|��\_s*�q\|�\_s*�\|�z\_s*��\|�R\_s*\%(�C\_s*�o\|��\_s*�q\|�z\_s*��\)\|�j\_s*��\|��\_s*��\_s*��\_s*��\|�r\_s*�C\|�b\_s*[����]\|��\_s*��\|�}\_s*��\|��\_s*\%(��\|�`\_s*��\)\|��\_s*[����]\|��\_s*��\|�V\_s*\%(��\|�l\_s*��\)\|��\_s*�q\|�|\_s*��\_s*��\|O\_s*x\_s*a\_s*l\_s*i\_s*d\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*[����]\|�\_s*�r\|�|\_s*��\|�\\_s*��\|�]\_s*��\|��\_s*�q\_s*��\|��\_s*[�a�y]\|��\_s*��\|��\_s*��\|E\_s*\%(b\_s*e\_s*n\_s*a\_s*l\_s*e\_s*s\|l\_s*a\_s*n\_s*a\_s*l\_s*e\_s*s\)\|��\_s*�R\_s*�q\|�\_s*�\|��\_s*��\|P\_s*\%(i\_s*p\_s*e\_s*r\_s*a\_s*\%(l\_s*e\_s*s\|c\_s*e\_s*a\_s*e\)\|t\_s*e\_s*r\_s*i\_s*d\_s*o\_s*s\_s*p\_s*e\_s*r\_s*m\_s*\%(a\_s*l\_s*e\_s*s\|i\_s*d\_s*a\_s*e\)\|o\_s*\%(t\_s*a\_s*s\_s*s\_s*i\_s*u\_s*m\|d\_s*o\_s*s\_s*t\_s*e\_s*m\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\)\)\|�y\_s*��\|�A\_s*�g\|�k\_s*�k\|�@\_s*��\|��\_s*�t\_s*��\|��\_s*\%(��\|�q\_s*��\)\|�\_s*�\|�\_s*�\|�Z\_s*\%(�c\|�C\_s*��\)\|��\_s*��\|��\_s*[���r]\|��\_s*\%([���_]\|�C\_s*��\|��\_s*�s\_s*��\_s*��\_s*�w\_s*�Z\_s*�p\_s*��\_s*�w\)\|�C\_s*[���G]\|(\_s*��\_s*)\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|�m\_s*\%(��\|��\_s*��\)\|�~\_s*��\_s*��\|�o\_s*�c\|�Y\_s*�t\|�_\_s*�o\|��\_s*�\|�B\_s*��\|�A\_s*��\|T\_s*\%(h\_s*a\_s*l\_s*i\_s*c\_s*t\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|u\_s*b\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\)\|��\_s*��\_s*��\_s*��\_s*��\_s*�u\|��\_s*��\_s*��\_s*�e\_s*�N\_s*�m\_s*�T\_s*�C\_s*�G\_s*��\_s*�X\|��\_s*��\|�X\_s*��\_s*�[\_s*�Y\|��\_s*�e\|�g\_s*��\_s*��\_s*�v\|��\_s*[�{��v�菻]\|��\_s*�G\_s*��\_s*��\_s*�Z\_s*�b\_s*�g\_s*�v\_s*�Z\_s*�@\|�T\_s*\%(��\_s*�`\_s*�[\_s*��\|�G\_s*��\|�C\_s*\%(�g\_s*�J\_s*�C\_s*��\|��\_s*�X\|�N\_s*\%([����]\|��\_s*\%(��\|�b\_s*�N\)\)\|�{\_s*\%(�E\_s*�Y\|�[\_s*�O\)\|�o\_s*\%(�[\|�l\_s*�e\_s*�B\_s*\%(�b\_s*�N\|�N\_s*�X\)\)\|��\_s*��\_s*�[\_s*��\|�_\_s*�[\|�t\_s*�@\_s*�[\|�l\_s*��\_s*�A\)\|�[\_s*\%(�e\_s*�B\_s*�t\_s*�B\_s*�P\_s*�[\_s*�V\_s*��\_s*��\|�N\_s*��\|�J\_s*\%(�X\|��\_s*�X\_s*�N\_s*\%(��\_s*�C\_s*�u\|��\_s*�v\_s*�V\_s*��\_s*��\)\)\|�L\_s*\%(��\_s*\%(��\_s*�[\|��\_s*�[\_s*\%(�^\_s*�[\|�V\_s*��\_s*��\)\)\|�b\_s*�g\)\)\)\|�}\_s*�h\_s*��\_s*�X\|��\_s*�\|�P\_s*\%([���A�C]\|�t\_s*�F\_s*�E\_s*�X\|�v\_s*�X\_s*�g\_s*��\_s*[����]\|�`\_s*��\_s*�b\_s*�v\|��\_s*\%(�^\_s*�E\_s*\%(��\|��\_s*�X\)\|�u\_s*��\_s*�b\_s*�W\)\|�[\_s*\%([�L�W�u�v�X��]\|�N\_s*�E\_s*�H\_s*�[\_s*�N\|�\\_s*��\|�^\_s*��\_s*��\_s*�O\|�p\_s*\%(�[\|�r\_s*��\_s*�e\_s*�B\)\|�V\_s*��\_s*�O\|��\_s*�[\)\|��\_s*\%(�g\|�x\_s*��\_s*�X\|�e\_s*�B\_s*�b\_s*�N\|�r\_s*\%(��\|�[\_s*�j\)\)\|�~\_s*\%(�J\_s*��\|�X\_s*�g\)\)\|�L\_s*\%(��\_s*�m\_s*��\|�v\_s*��\_s*�X\|�P\_s*��\|��\_s*\%([�C�[�A]\|��\_s*�F\|�r\_s*\%(�Y\_s*��\|�X\_s*��\)\|��\_s*\%(�X\|�b\_s*�g\)\|��\_s*�[\_s*�^\_s*�[\|��\_s*�\\_s*�[\|��\_s*\%(�[\|�E\_s*��\|�A\_s*�X\|�I\_s*�V\_s*�e\_s*�B\)\)\|�A\_s*\%(��\|�[\_s*��\|��\_s*�e\_s*�B\)\|�`\_s*��\|�g\_s*�T\_s*��\|��\_s*��\|�}\_s*�C\_s*��\|�b\_s*�J\|��\_s*�[\_s*�g\|��\_s*\%([�h�p�X�u����]\|�f\_s*\%(�B\|��\_s*�b\_s*�N\)\|�r\_s*\%([�A���l]\|�e\_s*\%(�B\|�[\_s*�V\_s*��\_s*��\)\)\|�x\_s*�c\|�o\_s*\%(��\_s*[�G�A]\|��\_s*�[\)\|�g\_s*��\|�V\_s*�[\|�T\_s*��\_s*��\|�^\_s*�s\_s*��\|�s\_s*\%(�g\_s*��\|�^\_s*\%(��\|��\_s*�Y\_s*��\)\)\|�v\_s*\%(��\|�V\_s*��\_s*��\|�e\_s*��\|�`\_s*��\)\|�Z\_s*\%(�C\|��\_s*�[\_s*��\)\|�b\_s*\%([�c�g�`�v]\|�T\_s*�o\|�X\_s*��\|�V\_s*\%(��\|��\_s*�O\|��\_s*\%(�[\|�u\_s*��\)\)\)\|�j\_s*\%(�I\_s*��\|�X\_s*�^\_s*�[\)\|�i\_s*��\|�m\_s*\%(��\|�[\_s*��\|�s\_s*�[\)\|�~\_s*�\\_s*�[\_s*��\|��\_s*\%(��\|��\_s*\%(��\|�b\_s*�g\)\)\|��\_s*\%(��\|�E\_s*�F\_s*�C\|��\_s*��\|��\_s*�C\_s*[���i]\|�b\_s*�g\)\|��\_s*�b\_s*�g\|��\_s*\%([�R�[�A]\|�o\_s*�[\|�u\_s*��\_s*�[\_s*�V\_s*��\_s*��\|�b\_s*�W\|��\_s*�O\)\|�Y\_s*��\)\|��\_s*\%(�R\|�X\_s*�g\|�V\_s*�^\_s*��\)\)\|��\_s*�p\|�`\_s*\%([�^�����}�A]\|��\_s*��\|��\_s*�[\|��\_s*�h\|��\_s*�j\_s*�[\|�R\_s*��\|�b\_s*\%([�v�N]\|�e\_s*��\_s*�I\|�^\_s*�S\_s*��\)\|�L\_s*\%(��\|�[\_s*�^\)\|��\_s*\%(�A\_s*�u\_s*��\|�[\_s*�C\_s*��\_s*�K\_s*��\)\|�[\_s*\%([�t�g�v�N�Y]\|�p\_s*�[\|�^\_s*�[\)\|�F\_s*\%([���X�J�R�A��]\|�U\_s*\%(��\|�[\_s*��\)\|��\_s*\%(�j\_s*�[\|�V\_s*�[\|�m\_s*�u\_s*�C\_s*��\)\|��\_s*\%(�[\|�X\_s*�g\|�b\_s*�V\_s*��\|��\_s*��\)\|��\_s*\%(�X\_s*�^\|��\_s*�R\_s*�t\)\|�r\_s*�`\_s*�F\_s*�t\|�_\_s*�[\|�`\_s*�F\_s*��\|�b\_s*\%([�g�N�J]\|�L\_s*��\_s*�O\)\|�C\_s*\%([�X��]\|�j\_s*�[\|�T\_s*�[\|�V\_s*��\_s*�O\)\|�[\_s*\%(��\|�U\_s*��\|�z\_s*�t\)\)\|��\_s*\%([�I�t�h�C���R���E]\|�c\_s*�l\|�N\_s*��\|�v\_s*�^\_s*�[\|�p\_s*�e\_s*�B\|�y\_s*\%(��\|�b\_s*�N\)\|�`\_s*��\|�l\_s*\%(��\|��\_s*�[\|��\_s*��\_s*�O\)\|�b\_s*\%([�N�g]\|�s\_s*�[\|�v\_s*\%(�}\_s*��\|��\_s*��\)\)\|�^\_s*\%(��\_s*[�C�[]\|��\_s*��\_s*�O\)\|��\_s*�}\_s*�[\_s*�X\|��\_s*��\_s*�W\|��\_s*��\|�[\_s*\%([�`�^�g���W]\|�r\_s*��\|�~\_s*\%(�[\|��\_s*�O\)\|��\_s*�[\|��\_s*\%([�Y�X]\|�g\_s*��\)\)\|��\_s*��\_s*�S\)\|��\_s*\%([���R]\|�C\_s*�X\|��\_s*�X\_s*�L\_s*�[\|�[\_s*\%(�N\|�T\_s*�[\|�J\_s*�[\|�L\_s*��\_s*�O\)\|�S\_s*��\|�b\_s*\%(�v\|�s\_s*�[\|�p\_s*�[\)\|��\_s*�\\)\)\|��\_s*�W\|��\_s*��\|��\_s*��\|��\_s*\%(��\|�Y\_s*��\_s*�`\_s*��\)\|�p\_s*��\|C\_s*\%([srdfDeRoa]\|��\_s*��\|�^\_s*��\_s*��\|y\_s*p\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|P\_s*\%(U\|S\_s*(\_s*C\_s*o\_s*n\_s*t\_s*i\_s*n\_s*u\_s*a\_s*t\_s*i\_s*o\_s*n\_s*-\_s*P\_s*a\_s*s\_s*s\_s*i\_s*n\_s*g\_s* \_s*S\_s*t\_s*y\_s*l\_s*e\_s*)\)\|u\_s*r\_s*i\_s*u\_s*m\|M\_s*\%(U\|�\\_s*��\_s*�O\)\|�^\_s*�C\_s*�v\|T\_s*\%(�X\_s*�L\_s*��\_s*��\|R\_s*L\_s*�L\_s*�[\)\|�V\_s*�F\_s*��\|S\_s*\%(V\_s*�t\_s*�@\_s*�C\_s*��\|�`\_s*��\_s*�[\_s*�i\|�A\_s*��\_s*�e\_s*�i\)\|�J\_s*�b\_s*�v\|�N\_s*��\_s*�X\|�R\_s*��\_s*�p\_s*�C\_s*��\|C\_s*\%(R\_s*(\_s*C\_s*r\_s*e\_s*e\_s*d\_s*e\_s*n\_s*c\_s*e\_s* \_s*C\_s*l\_s*e\_s*a\_s*r\_s*w\_s*a\_s*t\_s*e\_s*r\_s* \_s*R\_s*e\_s*v\_s*i\_s*v\_s*a\_s*l\_s*)\|D\_s*�J\_s*��\_s*��\)\|�h\_s*��\_s*�C\_s*�u\|+\_s*+\|L\_s*\%(X\|O\_s*S\|I\_s*S\_s*P\)\|E\_s*S\_s*P\|A\_s*\%(D\|S\_s*[LE]\)\|��\_s*��\_s*�N\|I\_s*S\_s*C\|h\_s*\%(l\_s*o\_s*r\_s*\%(a\_s*n\_s*t\_s*h\_s*a\_s*c\_s*e\_s*a\_s*e\|i\_s*n\_s*e\)\|r\_s*o\_s*m\_s*i\_s*u\_s*m\|a\_s*S\_s*e\_s*n\)\|O\_s*\%(B\_s*O\_s*L\|N\_s*T\_s*R\_s*O\_s*L\_s*�L\_s*�[\)\)\|�c\_s*\%(�@\_s*�[\|�B\_s*��\_s*��\|�F\_s*\%(�[\|��\_s*�j\_s*�[\|��\_s*��\)\)\|�Y\_s*�f\|�b\_s*\%([�^��]\|�l\_s*�\\_s*��\_s*�O\|�^\_s*�C\_s*�v\|�J\_s*�b\_s*�v\|�N\_s*��\_s*�X\|��\_s*�r\|�c\_s*�|\_s*�q\_s*�n\_s*�l\|�h\_s*��\_s*�C\_s*�u\|�{\_s*�{\|��\_s*��\_s*�N\|�n\_s*2\|��\_s*�b\_s*\%(��\|�n\_s*�X\_s*�g\_s*�A\)\|��\_s*��\)\)', - \ 'd' : '\%([�다�h�b���r�a���ךǏ������t�B�N���{�����c�j���ۓ��Ó��̊��ӓ������ՓœǙI�������~�U�k���N���ӝ����^���}�X������駁́ߓ����ԓ��ӓ��V���W�������֓������W�{�ޙ�x�g�z�𗯗Z�^���m�v�w�ˎ~�y�ǎ��F≓��B����H�D�s�M��ϙ��u���������b�\�B�a�d�ƂŃd�ߐh���ȍj�Γ`�������s�����n�ˌ���g�˒ݕt�ВËl�}�ϒޘA�Ãa���ߗ͒n��������I�L���֓|�Z��睏����J���N�M��Ӌ��ҋ����x�J�يړ_�x�Ԓ|���������F�ڒD�E�U璒���i�N��Օ����n�m���聄��������Гْ̖U���[�g�h�k�i�f�c���d�e�j���Ǟ񐆘Ǒ�䶝\�śP�֑�蚑ʑ��[�������T�������ÞS�ɚ��k�o���Ĝ팚�[�P�c�˂��������D���A�C�d\.�E�c���g�h�������\���B�����ƃh�������_�W�D�f���„t��d]\|�\_s*\%(�\_s*�\|�\_s*�\|�\_s*�\|�\_s*�\|�\_s*�\)\|�b\_s*[�h�f�d�a�_]\|��\_s*[�ǂłÂ���]\|�\_s*�\|�s\_s*�X\_s*��\|��\_s*��\|S\_s*a\_s*u\_s*r\_s*u\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|C\_s*\%(u\|o\_s*p\_s*p\_s*e\_s*r\)\|��\_s*�V\_s*��\|��\_s*��\|�@\_s*��\|�\_s*�\|�Y\_s*��\|�S\_s*�t\_s*��\|��\_s*��\|��\_s*��\|��\_s*[�t��]\|�\_s*��\|�\_s*�\|��\_s*[�I��]\|�\_s*�\|�m\_s*�b\|�x\_s*��\|��\_s*�q\|��\_s*�q\|�\_s*�\|��\_s*�K\|��\_s*�\|��\_s*�B\|�R\_s*��\|��\_s*��\|��\_s*�k\_s*�B\_s*��\|��\_s*\%([���Ɍ�]\|��\_s*�L\|��\_s*�V\_s*�c\|��\_s*\%(��\|��\_s*�b\)\)\|�T\_s*[���B]\|��\_s*��\|��\_s*�|\|��\_s*\%(��\_s*��\|�\_s*�f\_s*�[\_s*�^\_s*�x\_s*�[\_s*�X\)\|�R\_s*��\_s*��\_s*�r\_s*�A\|�Y\_s*\%(��\_s*�[\_s*�X\|�b\_s*�N\)\|�C\_s*��\_s*�J\|��\_s*��\|��\_s*�m\|��\_s*��\|�s\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|�n\_s*�[\_s*�O\|��\_s*��\_s*��\_s*��\_s*��\|�j\_s*��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*�q\|�L\_s*�q\_s*�q\|�c\_s*\%(�_\|�^\_s*�C\_s*�v\|�h\_s*��\_s*�C\_s*�u\|�J\_s*�b\_s*�v\|�b\_s*�u\_s*��\_s*��\_s*�h\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*�N\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\|�\\_s*�i\_s*��\|�[\_s*�b\_s*�P\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|D\_s*\%(b\|�^\_s*�C\_s*�v\|T\_s*\%(E\|P\_s*�\\_s*�t\_s*�g\|M\_s*�\\_s*�t\_s*�g\)\|M\_s*A\|�h\_s*��\_s*�C\_s*�u\|�J\_s*�b\_s*�v\|C\_s*\%(�J\_s*�[\_s*�h\|�u\_s*��\_s*��\_s*�h\)\|u\_s*b\_s*n\_s*i\_s*u\_s*m\|B\_s*\%(M\_s*S\|�T\_s*�[\_s*�o\)\|H\_s*C\_s*P\_s*\%(�T\_s*�[\_s*�o\|�N\_s*��\_s*�C\_s*�A\_s*��\_s*�g\)\|y\_s*\%(s\_s*p\_s*r\_s*o\_s*s\_s*i\_s*u\_s*m\|l\_s*a\_s*n\)\|r\_s* \_s*P\_s*e\_s*p\_s*p\_s*e\_s*r\|��\_s*��\_s*�N\|V\_s*D\_s*\%(�{\_s*�b\_s*�N\_s*�X\|�V\_s*��\_s*�b\_s*�v\|�P\_s*�[\_s*�X\|�f\_s*�b\_s*�L\|�h\_s*��\_s*�C\_s*�u\|�I\_s*�[\_s*�f\_s*�B\_s*�I\|�v\_s*��\_s*\%(�[\_s*��\_s*�[\|�C\_s*��\_s*�[\)\|��\_s*�b\_s*�N\|��\_s*�R\_s*�[\_s*�_\_s*�[\|�}\_s*��\_s*�`\|�r\_s*�f\_s*�I\)\|O\_s*S\|o\_s*\%(c\_s*u\_s*m\_s*e\_s*n\_s*t\_s* \_s*\%(T\_s*y\_s*p\_s*e\_s* \_s*D\_s*e\_s*f\_s*i\_s*n\_s*i\_s*t\_s*i\_s*o\_s*n\|O\_s*b\_s*j\_s*e\_s*c\_s*t\_s* \_s*M\_s*o\_s*d\_s*e\_s*l\)\|C\_s*o\_s*M\_s*o\)\|e\_s*\%(g\_s*e\_s*n\_s*e\_s*r\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\|l\_s*a\_s*w\_s*a\_s*r\_s*e\)\|E\_s*\%(C\|L\_s*�L\_s*�[\)\|I\_s*\%(P\_s*�X\_s*�C\_s*�b\_s*�`\|S\_s*K\)\|i\_s*\%(r\_s*e\_s*c\_s*t\_s* \_s*M\_s*e\_s*m\_s*o\_s*r\_s*y\_s* \_s*A\_s*c\_s*c\_s*e\_s*s\_s*s\|s\_s*t\_s*r\_s*i\_s*c\_s*t\_s* \_s*o\_s*f\_s* \_s*C\_s*o\_s*l\_s*u\_s*m\_s*b\_s*i\_s*a\|g\_s*i\_s*t\_s*a\_s*l\)\)\)', - \ 'e' : '\%([�ኙ����P�G���ҋ�`�ܐ�ݑ����傉��滌ӏ^�Λ�����x������V�x�{�y�󔌜▒厝t㈉z郉u�Չv���w�t�����d�_���Qঢ়o���H��̟����џH�����v���鴉�䆉������`��腖��b膞Ł܉���⥟��}�������|��������叉��͉�����������������l�����U�������~�����o���I�o�k���������t���Țz��瞱����i�͉j�o�ĉb�l��g�s�d�m繉e�r�f�h�n�c�i�ʉq���G�`���`�}�]㉈��Όd���l��˘��d����a�|��b�Ή�d�I�����������������������U�����́߁����Q���M�}���N���p�Ύ��I���ń��R�|�L���^�Ä��Ge]\|A\_s*\%([�ʔ��^��]\|V\_s*\%(�@\_s*��\|��\_s*�D\)\|B\_s*\%(�^\|C\_s*��\)\)\|�`\_s*\%([�ʔ��^��]\|�u\_s*\%(�@\_s*��\|��\_s*�D\)\|�a\_s*�^\)\|��\_s*\%(��\|��\_s*��\)\|�O\_s*��\_s*��\|M\_s*�T\_s*�C\_s*�Y\|�l\_s*�T\_s*�C\_s*�Y\|�G\_s*�X\_s*�q\|��\_s*��\|�g\_s*��\|�E\_s*��\|��\_s*��\_s*�q\|��\_s*�y\|��\_s*�x\|��\_s*�H\|�x\_s*�\|��\_s*[�s��]\|��\_s*��\|�g\_s*�q\|�k\_s*\%(�T\_s*�C\_s*�Y\|�k\_s*�T\_s*�C\_s*�Y\)\|L\_s*\%(�T\_s*�C\_s*�Y\|L\_s*\%(�T\_s*�C\_s*�Y\|��\_s*��\)\)\|��\_s*\%([��仕Q]\|�m\_s*��\)\|N\_s*��\| \_s*n\_s* \_s*�p\_s*�`\|�m\_s*\%([�‹ɋ�]\|��\_s*��\|�g\_s*�j\_s*�z\_s*�[\_s*��\)\|��\_s*��\|�Z\_s*��\|��\_s*�X\_s*�r\_s*�[\_s*�H\_s*�i\|�r\_s*\%([�g���ȋ�]\|�T\_s*�C\_s*�Y\|�m\_s*��\|�e\_s*��\_s*��\)\|S\_s*\%([����]\|�T\_s*�C\_s*�Y\|N\_s*��\|F\_s*��\_s*��\)\|�q\_s*[���y]\|X\_s*\%([���r]\|O\_s*��\|��\_s*�F\_s*��\)\|�w\_s*\%([���r��]\|��\_s*�F\_s*��\)\|�A\_s*��\|�\_s*��\|C\_s*\%(l\|h\_s*l\_s*o\_s*r\_s*i\_s*n\_s*e\)\|�C\_s*\%(�V\|�W\_s*��\)\|��\_s*�s\_s*��\_s*��\_s*�x\_s*��\_s*��\_s*�c\_s*�c\|��\_s*�[\_s*�N\_s*�X\_s*�e\_s*�[\_s*�V\_s*��\_s*��\|��\_s*\%(�B\|��\_s*�b\)\|�^\_s*\%(�B\|��\_s*�b\)\|��\_s*�[\_s*��\_s*\%(�s\_s*�A\_s*��\|�b\_s*�p\)\|��\_s*\%(�A\_s*��\|�E\_s*��\_s*�s\_s*�E\_s*��\|��\_s*�C\_s*�J\|�[\_s*\%(��\|�m\_s*�X\|�j\_s*�X\|�W\_s*\%(��\|�[\_s*��\)\|�h\_s*��\|��\_s*�J\|��\_s*\%(�X\|�V\_s*�A\)\|�t\_s*\%(��\_s*�e\_s*�X\|�H\_s*\%(��\_s*�A\|�j\_s*�A\_s*��\)\)\|�N\_s*��\_s*�b\_s*�h\|�J\_s*��\)\)\|��\_s*�W\|��\_s*��\|�d\_s*�q\_s*��\_s*\%(�C\_s*��\|�[\_s*��\)\|��\_s*�W\|�]\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|�S\_s*��\_s*��\_s*�T\|�J\_s*�v\_s*�Z\_s*��\_s*��\|�I\_s*\%(�[\|�C\_s*\%(��\_s*�[\|�Q\_s*��\)\)\|��\_s*�s\|�g\_s*��\|��\_s*�O\|��\_s*�Q\_s*��\|�d\_s*\%(�o\_s*�n\|�h\_s*��\_s*�C\_s*�u\|�c\_s*�x\_s*�[\_s*�^\|��\_s*��\_s*��\_s*��\|�J\_s*�b\_s*�v\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|�^\_s*�C\_s*�v\)\|�A\_s*\%([���C]\|�j\_s*�h\|�[\_s*\%([�}�X��]\|�E\_s*�B\_s*��\|��\_s*��\|�j\_s*�[\|�l\_s*�X\_s*�g\|�~\_s*��\|�V\_s*�[\|��\_s*�[\)\)\|��\_s*��\|E\_s*\%(r\|O\_s*F\|u\_s*\%(p\_s*o\_s*m\_s*a\_s*t\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\|r\_s*o\_s*p\_s*i\_s*u\_s*m\)\|U\_s*C\_s*�R\_s*�[\_s*�h\|P\_s*��\_s*�R\_s*�[\_s*�h\|�h\_s*��\_s*�C\_s*�u\|d\_s*i\_s*t\_s*i\_s*n\_s*g\_s* \_s*M\_s*A\_s*C\_s*r\_s*o\_s*S\|��\_s*�[\_s*��\|-\_s*m\_s*a\_s*i\_s*l\|�J\_s*�b\_s*�v\|�R\_s*�}\_s*�[\_s*�X\|N\_s*T\_s*E\_s*R\_s*�L\_s*�[\|�^\_s*�C\_s*�v\|i\_s*n\_s*s\_s*t\_s*e\_s*i\_s*n\_s*i\_s*u\_s*m\|S\_s*\%(P\|C\_s*�L\_s*�[\)\|l\_s*k\|m\_s*a\_s*c\_s*s\)\|�C\_s*\%([�u���A���[]\|�W\_s*�F\_s*�N\_s*�g\|�t\_s*�F\_s*�N\_s*[�g�^]\|�R\_s*\%(�[\_s*��\|��\_s*�C\_s*[�Y�U]\)\|�v\_s*�V\_s*��\_s*��\|�~\_s*��\_s*��\_s*\%(�[\_s*[�g�^]\|�C\_s*�^\)\|�x\_s*��\_s*\%(�g\|�^\_s*�[\)\|�m\_s*�b\_s*�N\|�l\_s*�[\_s*�u\_s*��\|�M\_s*��\_s*�X\|��\_s*�O\_s*\%(��\_s*��\_s*�h\|��\_s*�b\_s*�V\_s*��\)\|�b\_s*�`\|��\_s*\%(�[\|��\_s*��\_s*�O\|�t\_s*�H\_s*��\|�z\_s*��\)\|�O\_s*�W\_s*\%(�b\_s*�g\|�X\_s*�g\)\|�N\_s*\%(�X\|�A\_s*��\_s*�e\_s*�B\)\|�X\_s*�t\_s*�@\_s*�n\_s*��\|��\_s*[���A]\|��\_s*\%(�[\_s*\%(�X\|�U\_s*�[\|�T\_s*�[\)\|�C\_s*\%(��\|�U\_s*�[\|�T\_s*�[\)\|�u\_s*��\)\)\|�E\_s*\%(�[\|�W\_s*�F\_s*�[\_s*�k\)\)', - \ 'f' : '\%([���[�Ή������M�֓~���y�`���[脟T����͈�j�͊ȎD�^����J㬐�䔕����b�X�����ʙ��������앶�|�����������������t�y���M�D�����������⁃�����៻��������᳍Ę��W�o���K�����敖�lᆕ���p�������̐k⿕�谌�ꄜ��P�i霝c�������񕥕����h���u������C�����c�������ޔX���܊ܕ����t�e�������������w�t����X�����������s���b�•z�|�����ޘ��w�t�]�АU���㧘V�������o�\�v�ؕ���H��~��������[�������n���D�ҕ����B�y�G�z�o�t�{�ܕ��ݍ~�D���Y�u�@��缕����S��䘔��Y�}��䎙���ʖ|�ӂ��S���́��x�܋��ŕ��U��󕤕�F�U���ӄ��tf]\|�\_s*�\|�b\_s*�t\|��\_s*��\|��\_s*��\|�A\_s*�X\|��\_s*��\|��\_s*��\|E\_s*u\_s*p\_s*t\_s*e\_s*l\_s*e\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*��\_s*��\|��\_s*�i\|�}\_s*��\_s*��\|�C\_s*�f\|��\_s*\%(�C\|��\_s*[����]\)\|�_\_s*��\|��\_s*�C\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*�~\|��\_s*�c\|M\_s*y\_s*r\_s*t\_s*a\_s*l\_s*e\_s*s\|��\_s*[���R]\|��\_s*�t\|B\_s*u\_s*d\_s*d\_s*l\_s*e\_s*j\_s*a\_s*c\_s*e\_s*a\_s*e\|�k\_s*��\|G\_s*e\_s*r\_s*a\_s*n\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|�Q\_s*[�l�“�]\|�h\_s*��\|2\_s*\%([�l�“�]\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*��\|�~\_s*�~\_s*�~\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*�o\|I\_s*r\_s*o\_s*n\|��\_s*��\_s*��\_s*��\|�_\_s*��\_s*��\|�`\_s*��\|�z\_s*\%(��\_s*�C\_s*�G\|�C\_s*��\|��\_s*\%(�}\_s*\%(��\_s*�g\|��\_s*��\)\|��\_s*�A\_s*\%(�~\_s*�h\|��\_s*�f\_s*�q\_s*�h\)\)\)\|��\_s*�t\|��\_s*��\|�@\_s*�\\|��\_s*��\_s*��\|�C\_s*��\|�q\_s*\%(��\|��\_s*�[\_s*[�Y��]\)\|�P\_s*\%(�^\_s*��\_s*��\_s*��\_s*��\|��\_s*��\)\|��\_s*1\_s*�v\_s*�f\|��\_s*�s\|�n\_s*\%(�G\|��\_s*�u\_s*��\|��\_s*��\)\|�_\_s*��\_s*��\|�e\_s*\%(�P\|�J\_s*�b\_s*�v\|�^\_s*�C\_s*�v\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*�g\_s*��\|�G\_s*�t\)', - \ 'g' : '\%([���E�D��ĉ�愍��܍��Ό���ᘭ���Ֆ��@�W龚����o�X�ߔ쐺���n�S�������΍���ᴊ��r���c��������穚�������ꇟ|�����ߍ�������@���ᛈ����䲎��ތ�T�Ɍ����党I⺌Ɍ��w�����5�ݒ��ܝ�z�q�x��Z��ߟ������驌���������Q��������|���k�⚔�nj}�~�|�Yꖚ��P��Ê���q���F����ῌ��V�Ȍ����������������������R������Z���������Ă��C���푐���򕳕ȍ��I�q�Ƒ���䣌��΋������X���{�������j㸌S�Q�R�����ԋ��H�F�ٕ���O����h�[���g�炮�ߌ��N��ۋ����ًҚ�����⚝�����f��耋ʋ����ꟋČ�����C���z�邙F�‹ƋŋÍs�ኋs�t�C�`�U�Z�؋W�ً]�b�X��V�^��E㺙E��a�a���[���c�V���~���؞Fซ\�E鰋_�Y����雎��_�������W�d᥍m�A�Ԑ�݊��v�瑤�ʊ����Ō꓁��^�`���e�����q寊����I�P�}�d�j�k�h�����G��_�~��������팵�ћǘ�����ݙʊہ���꜋��܊���������ߌ����猎��怞ْ՚�罛|�{��Ӝ��ԙ��k�z�x�{�y�w���G�U��������N᳜����ȟ򛻈�R�P�n᫊Y�P�K�w䈊H�V�Q�Z�S�X�M�T�W�[�O�㛴��䃖�A���b�ϊ��|��M���`��P��G�ؙމʉ�딃���a���͉�䮏�����ɉ惕���ꏟ���@���⁄�������K�S�ԃ������҃��������ăσ����ǃ��ӃуɃ��̓˃Ճփ������ƒ��������΃Ã������ЃƃŃȃ����̃ʃ����M�O�Q�s�����Cg]\|�\_s*\%(�\_s*�\|�\_s*�\|�\_s*�\|�\_s*�\|�\_s*�\)\|�b\_s*[�S�Q�O�M�K]\|��\_s*[����������]\|�\_s*�\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*�~\|��\_s*��\|��\_s*�y\|P\_s*e\_s*r\_s*s\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\|��\_s*��\|��\_s*�s\_s*��\|��\_s*�q\|�H\_s*��\|��\_s*��\|��\_s*��\_s*��\|�~\_s*��\|�i\_s*\%([�ԉ�]\|�V\_s*��\)\|�P\_s*��\_s*��\|�]\_s*\%([�ÌΏ��B]\|�k\_s*��\)\|��\_s*[���`]\|�\_s*�\|�w\_s*�\|�i\_s*�F\|��\_s*��\|��\_s*��\|�m\_s*��\|��\_s*��\|��\_s*[����]\|��\_s*[���ō�]\|��\_s*��\|��\_s*�E\|�\_s*�\|�~\_s*��\_s*��\_s*�F\|�H\_s*��\|��\_s*[��Ս��i]\|�g\_s*�@\|�\_s*�\|�{\_s*��\|��\_s*\%([�알]\|�Z\_s*��\)\|��\_s*\%([�@����]\|�s\_s*��\_s*��\|��\_s*��\_s*�@\)\|A\_s*g\|S\_s*\%(c\_s*r\_s*o\_s*p\_s*h\_s*u\_s*l\_s*a\_s*r\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\|y\_s*m\_s*p\_s*e\_s*t\_s*a\_s*l\_s*a\_s*e\|i\_s*l\_s*v\_s*e\_s*r\)\|��\_s*�c\|��\_s*��\_s*�J\|��\_s*�t\|�L\_s*�q\|�Y\_s*��\|�\_s*�\|��\_s*��\|T\_s*y\_s*p\_s*a\_s*l\_s*e\_s*s\|��\_s*[��]\|��\_s*��\_s*��\|��\_s*��\|��\_s*�q\|��\_s*�^\|�b\_s*��\|��\_s*��\|�k\_s*�[\|�f\_s*\%(�n\_s*�q\_s*�n\|�a\_s*��\_s*��\_s*��\|��\_s*��\|�J\_s*�b\_s*�v\|�^\_s*�C\_s*�v\|�X\_s*�|\_s*�b\_s*�g\|�p\_s*��\|��\_s*��\_s*��\)\|�j\_s*��\_s*�[\_s*�Y\|�m\_s*�[\_s*��\|��\_s*�i\_s*��\_s*��\|�A\_s*��\_s*��\_s*�R\_s*��\_s*�i\_s*��\_s*��\|�q\_s*��\|�N\_s*�b\_s*�p\|��\_s*�q\|�n\_s*�{\_s*��\_s*�[\_s*�l\|��\_s*��\|�G\_s*�[\_s*�e\_s*�{\_s*��\|��\_s*�[\_s*�e\_s*�{\_s*��\|�C\_s*�F\_s*\%(�[\_s*�e\_s*�{\_s*��\|�e\_s*�{\_s*��\)\|��\_s*��\|G\_s*\%([dae]\|o\_s*m\_s*o\_s*r\_s*t\_s*e\_s*g\_s*a\_s*c\_s*e\_s*a\_s*e\|M\_s*\%(T\|D\_s*(\_s*G\_s*e\_s*r\_s*m\_s*a\_s*n\_s* \_s*N\_s*a\_s*t\_s*i\_s*o\_s*n\_s*a\_s*l\_s* \_s*R\_s*e\_s*s\_s*e\_s*a\_s*r\_s*c\_s*h\_s* \_s*C\_s*e\_s*n\_s*t\_s*e\_s*r\_s* \_s*f\_s*o\_s*r\_s* \_s*C\_s*o\_s*m\_s*p\_s*u\_s*t\_s*e\_s*r\_s* \_s*S\_s*c\_s*i\_s*e\_s*n\_s*c\_s*e\_s*)\)\|��\_s*��\|C\_s*L\|c\_s*c\|�J\_s*�b\_s*�v\|�^\_s*�C\_s*�v\|�X\_s*�|\_s*�b\_s*�g\|�p\_s*��\|P\_s*L\|n\_s*u\_s*s\|I\_s*\%(N\_s*A\_s*(\_s*t\_s*h\_s*e\_s* \_s*G\_s*e\_s*n\_s*e\_s*r\_s*i\_s*c\_s* \_s*I\_s*n\_s*t\_s*e\_s*r\_s*a\_s*c\_s*t\_s*i\_s*v\_s*e\_s* \_s*A\_s*p\_s*p\_s*l\_s*i\_s*c\_s*a\_s*t\_s*i\_s*o\_s*n\_s*)\|F\_s*\%(�t\_s*�@\_s*�C\_s*��\|�A\_s*�j\_s*��\)\)\|U\_s*I\|N\_s*U\|O\_s*�T\_s*�C\_s*��\|E\_s*T\_s*��\_s*�\\_s*�b\_s*�h\)\|�w\_s*\%(��\_s*��\_s*�h\|��\_s*�}\_s*��\)\|�h\_s*�C\_s*�c\|��\_s*�g\_s*�v\_s*��\|�[\_s*\%(��\_s*\%(�`\_s*��\|�j\_s*�E\_s*��\)\|��\_s*�N\_s*��\_s*�b\_s*�v\|�m\_s*�A\|��\_s*�g\_s*��\_s*�}\_s*��\|�l\_s*\%(�R\_s*��\|��\_s*\%(��\|��\_s*�X\_s*�g\)\)\)\|��\_s*\%(��\|�w\_s*�@\_s*��\)\|�W\_s*\%([�����W�O�m�i�I���[]\|�v\_s*�V\_s*�[\|�A\_s*��\|�C\_s*�h\|�b\_s*�h\|�^\_s*��\|�[\_s*��\|��\_s*�A\_s*��\|��\_s*�b\_s*�g\|�S\_s*��\|��\_s*\%(�t\|��\_s*\%(�h\|�f\_s*�B\_s*�[\_s*�m\)\)\|��\_s*\%(�[\|��\_s*�h\)\|�o\_s*��\_s*�V\_s*�[\|�u\_s*\%(��\|��\_s*��\_s*�^\_s*��\)\|�x\_s*\%(��\_s*�i\_s*�E\|��\_s*��\_s*��\)\|�l\_s*�b\_s*�g\|��\_s*\%(�b\_s*�g\|��\_s*�@\_s*��\_s*[�j�i]\|�o\_s*��\_s*[�j�i]\|�R\_s*\%(�[\_s*�\\|��\_s*�_\)\|��\_s*\%(�W\|�_\_s*�[\_s*�m\)\|�[\_s*\%(�W\|�[\_s*�b\_s*�g\)\)\|��\_s*\%(��\|�C\_s*\%(��\|��\_s*�Y\|�A\_s*��\_s*[�c�g]\)\|�R\_s*\%(��\|��\_s*�b\_s*�e\_s*�B\)\|�[\_s*�}\_s*��\)\|�j\_s*�[\|��\_s*\%([���l]\|�[\_s*�b\_s*�y\|��\_s*\%(�A\|�[\_s*�j\|�G\_s*�b\_s*�^\)\|�k\_s*\%(��\_s*�B\_s*�G\_s*�[\_s*��\|�r\_s*�G\_s*�[\_s*�u\)\)\|�F\_s*\%([�����t���}�l]\|�X\_s*�`\_s*��\_s*�[\|��\_s*�j\_s*��\|��\_s*\%(�[\_s*[�g���h]\|��\_s*\%(�h\|�f\_s*�B\_s*��\|�_\_s*�C\_s*��\)\)\|�~\_s*�j\|�j\_s*�[\|�m\_s*\%([�A�o]\|��\_s*�@\|��\_s*�[\_s*�Y\|�T\_s*�C\_s*�h\)\|��\_s*\%(�}\|�g\_s*\%(��\|��\_s*[�B�[]\)\|�_\_s*�[\)\)\)\)', - \ 'h' : '\%([Η�䀞��������L�N������{���w��ʔM���ܖS�Ŗy�j��壌u�������ׁ����󜓏c�����������]�K���g�֚��\✖{�x�j��c�����������ə�ᬖp�W���_���I�•���q�N�u�Y���ږQ���}䚑��N���闈������{�B�P��a����H��������K�A�O�f�D���G�̜d���M�O�E���v��L���C�󝻝��e�M�іk�M�~��O�۝e�Y�_�@����ꅜ��ƕ��n���ܒ��䐤���s�̕��J�������K��療�͌���������z�u���`�œL�K���������H�����Q�Q������ɕ����E憕��w����ǝ́ݕՕ��x�ҝG��⍖ݛQ���a�y�ْ؛i��͕���Û��z�˕r�������Ǖ•�������w�ӗ����ˌ�粂�̞��[�Ή������։A�~���y�`���[脟T�Ǐ͈�͊ȎD��^����J���㬐�䔕����b�X������䎟������앶�|�����������������t�y���M�D��������⁄���៻��������᳘��W�oB���K���敖�lᆕ���p�������̐k⿕�谌�ꄜ��i霘ŕ�������F�������Ӌ��h���u����ⷁ��������ޔX���܊ܕ��t�e���������w�t����X�������s���b�•|�����ޘ��w�t�]�АU���㧕����o�\�v�ؕ���H��~��������[�������n���ҕ����B�y�G�z�o�t�{�ܕ��ݍ~�D���Y�u�@��缕����S���x��Y�}�������V�_�~�Q�P�c���ݕA�S鯝ۏG��G�哘ǝ��|�ጄ�Չ��颕E�h�_�j�k�l㏟q�o���ĕn�p�m�g�i�׋����ʕf�g������R�ʒ��I�J���������������@���P��������v尗���z�h�啸���Ǐ��d�֐ċϏ������d�ΒP�ՓƑ��m���l1�P�u��ഁ����H�͏ݝf�ە��\�P�F�Ѝt鷑M���J焕S���АZ�O�z���n�I�Q�T䊌��Q�P��㟋��q���������W�j�G�E�g��ϏE�S���h������ꤊ��m���O�G�[�T�_�A�L���ѕN�D�J�L�C�Ȋ��l�J�C捍����r�M�K�u蹕U�H�~�q镕V��I�g�j�G�^�Y�~�Z�֙��d���[�ߕ]�W���\�{���_�u���y�i�w�����]�D�g����K��Γ�唛E��࿙���`�ݔߔ���B��ე����B�������ɞw������������혡���鏊�����]�X翔������枈��O���������澊�����|�������瀔�����O��ʎ������z�j�H���Ԍ�������㔈墏Ȑ��[�O�X���J��y������ّj��}�݋Е��o�����ޝ؏����՛��ދ@�@�T�m�����ה�������喗��I���j�Y���D���s���c�P�����Ĕ��J�`������e���]�똟�ƈ�n���n�G���|�F�ɐ�������ꡗI���z�y���t����妝p�������p�����S�����Ǘ����|杙�����b���r�@�؉���瞖z�d�X���x�X�򒌑����������\➁����^��⦔�����鼏��R�x�펾�њ�����虊���M�����ߍ��ϔ����A���ǝ������������唏��������R�����d�ʌv�}�є�������`��ڔ������񏉘o�@�W�����Iᢔ����@����������輔u�̝��ڛu�������v�i�`����ғ����t���\�E�C��p�Bᓔx�o�ޔy�w�W��p�r�q�s�D�z���W�֞��N����崔Νםa⛔����J���Í➷�^䗖}ፖ|���Y�K�唺�Ϟ��ٔ����͔�㆔הєŔ����Ǎ�ʔƔɔ̔Ĕ����Д����_�l�f�H�ǒp�ț�f�����Քb▗����t�����攇���j�ƞP�J���c���y�U�������h����H�ʔe�f��蘒[���������঎��c���Μ͔m���Ɯ���ꏐn�d����ډh�ޑ|���\��㵐��i�͂����������������������������������������������g�]�t������q�z�w�nh]\|�\_s*[�����]\|�b\_s*[�z�w�t�q�n]\|��\_s*[�قւӂЂ�]\|��\_s*��\|�q\_s*�K\|��\_s*��\|�\_s*��\|�m\_s*[�F�C]\|��\_s*�}\|��\_s*[�ΐ�]\|��\_s*�{\|�S\_s*��\|�_\_s*��\|�p\_s*�K\|��\_s*��\_s*�F\|�g\_s*[��]\|T\_s*r\_s*i\_s*u\_s*r\_s*i\_s*d\_s*a\_s*l\_s*e\_s*s\|�\_s*��\|�\_s*�@\|�a\_s*��\|��\_s*�q\|�|\_s*\%(�\\|��\_s*��\)\|��\_s*��\|��\_s*�q\|��\_s*��\|��\_s*��\|��\_s*�Z\|��\_s*��\|c\_s*l\_s*a\_s*u\_s*s\_s*t\_s*r\_s*o\_s*p\_s*h\_s*o\_s*b\_s*i\_s*a\|��\_s*��\|��\_s*��\|��\_s*��\|E\_s*\%(r\_s*i\_s*o\_s*c\_s*a\_s*u\_s*l\_s*a\_s*l\_s*e\_s*s\|u\_s*p\_s*t\_s*e\_s*l\_s*e\_s*a\_s*c\_s*e\_s*a\_s*e\)\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*�i\|��\_s*�C\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*�~\|f\_s*\%(o\_s*r\_s*t\_s*e\|e\_s*m\_s*t\_s*o\)\|��\_s*[���R]\|��\_s*�t\|�k\_s*��\|G\_s*e\_s*r\_s*a\_s*n\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|�h\_s*��\|��\_s*��\_s*��\|�~\_s*�~\_s*�~\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*��\|�]\_s*�c\_s*��\|��\_s*��\|��\_s*�I\|��\_s*�\|��\_s*��\_s*��\|��\_s*�@\|�_\_s*[����]\|�I\_s*��\|��\_s*��\|�i\_s*�a\|�\_s*�\|��\_s*\%([�l�o]\|��\_s*�o\_s*��\)\|��\_s*��\|��\_s*��\|�f\_s*��\|��\_s*�V\_s*�q\|�_\_s*[����]\|��\_s*�l\|��\_s*[�ƁX]\|��\_s*��\_s*\%(��\|��\_s*��\)\|A\_s*\%(s\|r\_s*s\_s*e\_s*n\_s*i\_s*c\|n\_s*g\_s*i\_s*o\_s*s\_s*p\_s*e\_s*r\_s*m\_s*a\_s*e\)\|��\_s*�f\_s*�]\|��\_s*��\_s*��\|��\_s*[�c��]\|��\_s*��\|��\_s*[�������B]\|��\_s*��\|��\_s*��\_s*��\|�h\_s*��\|�K\_s*�W\|��\_s*[�j�s]\|�e\_s*��\|�W\_s*��\|��\_s*�q\|��\_s*�q\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|�n\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|�`\_s*��\|��\_s*��\|N\_s*e\_s*l\_s*u\_s*m\_s*b\_s*o\_s*n\_s*a\_s*c\_s*e\_s*a\_s*e\|�o\_s*��\_s*�|\|��\_s*�E\|��\_s*��\|��\_s*[��]\|�y\_s*[�����t]\|�q\_s*[�f�C]\|��\_s*�t\|��\_s*��\_s*�l\|��\_s*��\|�x\_s*�q\|��\_s*�J\|��\_s*��\_s*��\|�Z\_s*��\|��\_s*��\|��\_s*�]\|�K\_s*[��q]\|�{\_s*\%(��\_s*��\|��\_s*��\)\|�E\_s*[���l]\|��\_s*�s\|�w\_s*��\|2\_s*\%([�l�“�]\|��\_s*��\|0\_s*��\)\|�Q\_s*\%([�l�“�]\|�O\_s*[�Γ�]\)\|�W\_s*�|\|8\_s*��\|�q\_s*��\|P\_s*\%(t\|o\_s*t\_s*a\_s*m\_s*o\_s*g\_s*e\_s*t\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\|l\_s*a\_s*t\_s*i\_s*n\_s*u\_s*m\)\|�C\_s*\%([��i�f����]\|��\_s*��\_s*��\|�f\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|R\_s*S\_s*I\|M\_s*\%(y\_s*r\_s*t\_s*a\_s*l\_s*e\_s*s\|e\_s*r\_s*c\_s*u\_s*r\_s*y\)\|�F\_s*��\|��\_s*�a\_s*�_\_s*��\|�E\_s*�[\_s*�S\|��\_s*\%(�[\|�y\_s*�[\_s*��\|�x\_s*�[\_s*��\|�C\_s*�X\_s*�}\_s*��\_s*�X\|�S\_s*�[\|�O\_s*�m\_s*�[\|�}\_s*�j\_s*\%(�e\|�X\_s*[�g��]\)\)\|��\_s*��\|�\\_s*�Z\_s*�i\_s*��\|��\_s*��\|��\_s*�`\|�C\_s*\%(�_\_s*��\_s*�S\|�X\_s*�p\_s*�j\_s*�A\|��\_s*�[\_s*��\|�G\_s*��\)\|�g\_s*\%(��\|�J\_s*�b\_s*�v\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(�W\|�a\_s*��\_s*��\_s*��\)\)\|�I\_s*\%([���[]\|�i\_s*�[\|�m\_s*��\|��\_s*�t\_s*��\_s*�[\_s*��\|�l\_s*\%(�X\_s*\%(�g\|�e\_s*�B\)\|�Q\_s*��\)\|�e\_s*��\|��\_s*�K\_s*�[\|�}\_s*�[\_s*�W\_s*��\)\|�A\_s*\%(��\_s*\%(��\|�x\_s*�[\_s*��\)\|�l\_s*�X\_s*�g\|��\_s*�[\|�_\_s*�}\_s*�[\_s*��\|�V\_s*�F\_s*�b\_s*�g\|�r\_s*�^\_s*�V\_s*�I\_s*��\|�[\_s*\%(�l\_s*�X\_s*�g\|�m\_s*��\_s*�N\_s*�[\_s*��\)\)\|�G\_s*\%(�f\_s*�B\|��\_s*��\_s*�P\|��\_s*\%(�i\|�[\_s*�k\)\|��\_s*�C\_s*�[\_s*�Y\|�N\_s*�g\_s*��\|��\_s*\%(�Q\_s*��\|��\_s*�F\|��\_s*�X\|�}\_s*��\|�~\_s*\%(�b\_s*�g\|�[\_s*�g\)\|�u\_s*��\_s*��\|�i\_s*��\_s*�f\_s*�X\|�L\_s*��\_s*�[\_s*��\)\|�m\_s*�N\|�b\_s*�`\|�C\_s*�`\)\|H\_s*\%([fsPeo]\|i\_s*m\_s*a\_s*n\_s*t\_s*a\_s*n\_s*d\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|�J\_s*�b\_s*�v\|T\_s*\%(M\_s*L\_s*�t\_s*�@\_s*�C\_s*��\|T\_s*P\_s*�T\_s*�[\_s*�o\)\|D\_s*D\_s*��\_s*�R\_s*�[\_s*�_\_s*�[\|u\_s*r\_s*d\|a\_s*\%(s\_s*s\_s*i\_s*u\_s*m\|f\_s*n\_s*i\_s*u\_s*m\|w\_s*a\_s*i\_s*i\)\|y\_s*\%(p\_s*e\_s*r\_s* \_s*T\_s*e\_s*x\_s*t\_s* \_s*M\_s*a\_s*r\_s*k\_s*u\_s*p\_s* \_s*L\_s*a\_s*n\_s*g\_s*u\_s*a\_s*g\_s*e\|d\_s*\%(n\_s*o\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|r\_s*\%(a\_s*s\_s*t\_s*i\_s*d\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|o\_s*\%(s\_s*t\_s*a\_s*c\_s*h\_s*y\_s*d\_s*a\_s*l\_s*e\_s*s\|g\_s*e\_s*n\)\)\)\)\)\|��\_s*[�╽�f]\)', - \ 'i' : '\%([����ʼn~��ꍘc�U�T���������n�������翔�䑌��폒������恍ݍ��������r�x�������É��j囚|���d�Q�U���|��軗��Ƒ������B�d���{��佈�S�\嫉�䆍��m�n�ؐF���A�t����F������泌Ìމ��L�����d�������ƜјJ���i��ꌒ��Օa�k�v����ɔžo���������֌��y������M�E���|�ځ��e�퐈�M����臐��Y���O�����ΖZ�}��x���א򌵉��M�Ձ��O䗚P�{���b�������~�N�}�z�c���c�t��硉Ɏ������䕟J����s�W���]�b�K�\���Tฐ��]�r����m�П��Ȉ��Z���Ԉ��T�M�ΚÉ����C����������m��覉@������u�B�A�A�ޛ���j�H���و�Ί�ֈ�Y�È�1�P�����D�y���I��D�R������۔џ��ʈዏ�H�ƍ֋U�������h�w�ψ͉]����}�u�b�v���]�Ό��≝�g�М�@�E���S��盈���B�Ο��ݑP�����R�҈Ȋ��ՉU�ג��ߛߘߛ��ږ����ˆ̈،܈Η��͜}�Ė��ˈ��ԍs਒_�ˑ��������ޗǓ��o�֗��D�K���~�������䏈ӈۈ��؈ً����їe�����X�J�z�ˁ����������ɂ�������D������聿�h�C�I���DŽy��i]\|E\_s*��\_s*�[\_s*��\|�a\_s*��\|J\_s*u\_s*n\_s*c\_s*a\_s*l\_s*e\_s*s\|��\_s*�R\|�c\_s*�J\|��\_s*��\_s*��\|�c\_s*��\|�G\_s*�s\|�\\_s*�Z\_s*��\|�Q\_s*�q\|�G\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|N\_s*a\_s*j\_s*a\_s*d\_s*a\_s*l\_s*e\_s*s\|��\_s*�G\|��\_s*��\|��\_s*�t\_s*��\|5\_s*[�“�]\|�T\_s*[�“�]\|��\_s*�E\|�r\_s*�U\|��\_s*��\|��\_s*�Y\|��\_s*�[\|��\_s*��\|�~\_s*��\|��\_s*��\_s*��\|�{\_s*��\|�o\_s*��\|��\_s*�g\|�Y\_s*[���q]\|�h\_s*[�‘�]\|�@\_s*��\|U\_s*r\_s*t\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\|�E\_s*[�c�R]\|P\_s*\%(o\_s*a\_s*l\_s*e\_s*s\|l\_s*u\_s*m\_s*b\_s*a\_s*g\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\)\|�a\_s*��\|�d\_s*\%(�`\_s*�r\_s*�s\|�u\_s*�d\)\|�C\_s*��\|�w\_s*�h\|��\_s*��\|�]\_s*[���o��Z]\|��\_s*��\|�K\_s*�{\|��\_s*�q\|�_\_s*��\|��\_s*��\_s*��\|��\_s*�r\_s*��\|G\_s*\%(l\_s*u\_s*m\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\|r\_s*a\_s*m\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\|i\_s*n\_s*k\_s*g\_s*o\_s*p\_s*s\_s*i\_s*d\_s*a\)\|��\_s*��\|�r\_s*��\|�s\_s*��\_s*��\|�o\_s*[�E����]\|�\_s*[�W�k]\|�C\_s*[�؎Q]\|��\_s*�\\|��\_s*��\_s*[�ΒY]\|�_\_s*�F\|�e\_s*��\|�p\_s*\%(��\|�g\_s*��\)\|��\_s*��\_s*��\|��\_s*��\|D\_s*i\_s*a\_s*p\_s*e\_s*n\_s*s\_s*i\_s*a\_s*l\_s*e\_s*s\|��\_s*[����]\|<\_s*=\_s*=\_s*>\|�K\_s*�v\_s*�\\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*�{\_s*�A\_s*�C\_s*�E\_s*�r\_s*�[\_s*�E\_s*�G\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*\%(��\_s*��\_s*��\_s*��\_s*�w\|�W\_s*��\_s*��\_s*�@\_s*�\\)\|�t\_s*��\_s*�U\_s*�t\_s*�[\_s*��\_s*�G\_s*��\_s*��\|��\_s*��\_s*�q\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*�^\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\)\|�A\_s*�[\_s*�@\|��\_s*��\_s*��\|�s\_s*\%([�”@��]\|�[\_s*��\)\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*�S\|��\_s*\%(�A\_s*��\|�V\_s*�t\|�[\_s*�h\|�E\_s*�f\)\|I\_s*\%([rPn]\|R\_s*Q\|�J\_s*�b\_s*�v\|C\_s*\%(�^\_s*�O\|�`\_s*�b\_s*�v\|�J\_s*�[\_s*�h\)\|l\_s*l\_s*i\_s*n\_s*o\_s*i\_s*s\|S\_s*\%(O\|B\_s*N\_s*\%(��\_s*��\|�R\_s*�[\_s*�h\)\|A\_s*�o\_s*�X\)\|d\_s*a\_s*h\_s*o\|D\_s*\%(�J\_s*�[\_s*�h\|E\_s*\%(�h\_s*��\_s*�C\_s*�u\|�f\_s*�o\_s*�C\_s*�X\|�P\_s*�[\_s*�u\_s*��\|�R\_s*��\_s*�g\_s*��\_s*�[\_s*��\)\)\|�^\_s*�[\_s*��\|T\_s*\%(�V\_s*�X\_s*�e\_s*��\|�o\_s*�u\_s*��\)\|o\_s*\%(w\_s*a\|d\_s*i\_s*n\_s*e\)\)\|�A\_s*\%(�C\|�[\_s*\%(��\_s*�B\_s*��\|�r\_s*��\)\|��\_s*\%(�v\_s*��\_s*��\_s*�v\_s*\%(�`\_s*��\|�e\_s*��\)\|�f\_s*�p\_s*��\_s*�_\_s*��\|�t\_s*�H\_s*��\_s*\%(��\_s*��\|�}\_s*�e\_s*�B\_s*�[\_s*�N\)\)\)\)', - \ 'j' : '\%([���󓈎ȓ��������ǎ����w�x�����H���Û�����K���������H�Ԙ�ᶙ��b�����i�u�@�v�ސn�Չ`�r�x�����o�s�q�w�p�t�l�ŏ��ғ�䴞`䥝�募��t�J����珊�R���������P�����ԟ��i�Uㅏ��{�o������媝m�h���鈐������Y�t��������Y����竐������j�g�@������Ï��ꏗ�����`������~�]�吷�꞊��󝵏������������������G�����A�ژh�G�Q榜휵���@���u���Q�x�h�m��n���p�q���m�m⢙Ï��|⡓���՟��~�[�x����{䤏��z���������y�}�������}��汎�������������G�����E�s���n�𘸏^�F�_�`���O�c�a�_�Y���[�b�]�\�Z�e�d�����m�����������莣���^���y�~�����������i���J玎�������Ȓn�����􎤎��~�������I�m�������V�����k�q���H�j�a�Z���d��������䢎������m���ݝ������������苎Ҏ׋Y�l���������������������D�u�E���`�������_�v�F�J�W�zj]\|�\_s*�\_s*�\|�b\_s*�W\|��\_s*��\|G\_s*\%(��\_s*��\|�p\_s*��\)\|Z\_s*\%(r\|i\_s*r\_s*c\_s*o\_s*n\_s*i\_s*u\_s*m\)\|D\_s*y\|�f\_s*\%(��\_s*��\|�p\_s*��\)\|�x\_s*�x\|��\_s*��\|�c\_s*��\_s*\%(��\_s*��\|�c\_s*��\)\|�Q\_s*��\|2\_s*��\|��\_s*�q\|�b\_s*��\_s*��\_s*��\_s*��\_s*��\_s*�M\_s*�h\_s*�p\_s*�\|k\_s*\$\_s*_\_s*{\_s*e\_s*f\_s*f\_s*}\_s*\$\|�[\_s*\%(��\|��\_s*��\)\|�`\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|�R\_s*�l\|�y\_s*�_\|��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*�r\_s*��\|��\_s*�v\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[���@�S����������]\|C\_s*a\_s*b\_s*o\_s*m\_s*b\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|��\_s*�q\|��\_s*��\|�P\_s*\%(�Q\|�O\_s*[�i��]\|�P\_s*��\|�U\_s*�i\|�W\_s*��\)\|�t\_s*��\|��\_s*��\|�R\_s*��\|1\_s*\%(0\|1\_s*��\|8\_s*��\|2\_s*��\)\|�\_s*�\|��\_s*��\|��\_s*��\|��\_s*��\|�O\_s*��\_s*��\|��\_s*��\|�G\_s*��\|��\_s*��\|��\_s*�q\|��\_s*��\_s*��\_s*��\_s*��\|�[\_s*��\_s*�[\|�G\_s*\%(�z\_s*�o\|��\_s*�R\|��\_s*�~\_s*��\|��\_s*�T\_s*��\_s*��\|�b\_s*�T\_s*�C\)\|�w\_s*\%(��\_s*�X\|�X\_s*�X\)\|�q\_s*��\_s*�l\_s*�X\|�`\_s*�Q\|�k\_s*��\_s*��\_s*�[\_s*\%(��\|��\_s*�w\_s*�Z\_s*�p\_s*��\_s*�w\_s*�@\_s*��\_s*�w\)\|�n\_s*\%(�C\_s*��\|��\_s*�y\_s*�[\_s*�j\_s*��\)\|��\_s*��\|��\_s*\%([�����j�i�[]\|�C\_s*��\|�G\_s*��\|��\_s*�m\|��\_s*�h\|�k\_s*\%(�X\|�V\_s*��\)\|�X\_s*�p\_s*�[\_s*�X\|�R\_s*[�r�u]\|�b\_s*�P\)\|�t\_s*\%(�@\_s*[���i]\|��\_s*[�I�A]\)\|J\_s*\%(R\_s*��\_s*��\_s*�{\|\.\_s*S\_s*\.\_s*\%(�o\_s*�b\_s*�n\|B\_s*a\_s*c\_s*h\)\|��\_s*�[\_s*�O\|�J\_s*�b\_s*�v\|C\_s*B\_s*�J\_s*�[\_s*�h\|-\_s*P\_s*O\_s*P\|�|\_s*�b\_s*�v\|P\_s*\%(G\_s*�t\_s*�@\_s*�C\_s*��\|E\_s*G\_s*�t\_s*�@\_s*�C\_s*��\)\|I\_s*S\_s*\%(�}\_s*�[\_s*�N\|�R\_s*�[\_s*�h\)\|a\_s*p\_s*a\_s*n\_s* \_s*A\_s*d\_s*v\_s*a\_s*n\_s*c\_s*e\_s*d\_s* \_s*I\_s*n\_s*s\_s*t\_s*i\_s*t\_s*u\_s*t\_s*e\_s* \_s*o\_s*f\_s* \_s*S\_s*c\_s*i\_s*e\_s*n\_s*c\_s*e\_s* \_s*a\_s*n\_s*d\_s* \_s*T\_s*e\_s*c\_s*h\_s*n\_s*o\_s*l\_s*o\_s*g\_s*y\|A\_s*\%(I\_s*S\_s*T\|N\_s*�R\_s*�[\_s*�h\|V\_s*A\_s*\%(�X\_s*�N\_s*��\_s*�v\_s*�g\|�A\_s*�v\_s*��\_s*�b\_s*�g\)\)\|U\_s*N\_s*E\_s*T\)\|�Y\_s*�{\_s*��\|�i\_s*\%(�Q\|�|\_s*�v\_s*�`\_s*�u\_s*�d\|��\_s*�[\_s*�O\|�J\_s*�b\_s*�v\|�|\_s*�b\_s*�v\|�h\_s*�b\_s*�b\_s*�o\_s*��\|�t\_s*\%(�r\|�m\_s*�j\_s*�n\)\|��\_s*��\)\|��\_s*\%([�n���_�m]\|��\_s*�Q\_s*��\|�[\_s*\%([���m]\|�Q\_s*��\_s*�g\|�f\_s*�B\_s*�b\_s*�g\)\|��\_s*\%(�O\|�J\_s*�[\|�P\_s*��\)\|�s\_s*�e\_s*��\|�b\_s*[�J�V]\)\|�C\_s*\%(�G\_s*\%([�i�X]\|��\_s*\%(�X\|�Z\_s*��\)\|�Y\_s*�X\)\|�F\_s*\%(�i\|��\_s*\%(�X\|�Z\_s*��\|�[\_s*��\)\|�[\_s*�K\_s*�[\|��\_s*\%(�N\|�T\_s*��\_s*��\)\)\)\|�z\_s*\%([�^�Z]\|��\_s*�w\|�z\_s*�o\|�A\_s*\%(��\|�L\_s*��\)\)\|��\_s*\%([�u�i]\|��\_s*\%(�O\|�_\_s*��\)\|�G\_s*��\|�A\_s*\%(�q\_s*��\|�L\_s*��\)\|�[\_s*�t\|�[\_s*\%([�g�h]\|�f\_s*��\|�[\_s*�t\)\|�V\_s*\%(�t\|��\_s*�A\)\|�Z\_s*�t\|�n\_s*[�i���l]\)\)', - \ 'k' : '\%([����a���|�єV�Ҝ��D����ޏn�s���ߐ��E�}���Ĉ����ۗ�ⵘ�ᶎ��s���Ќ����f�����ꎖ������I���z�Eꑍ��C��欉��䓚䢐�ৎ��u�S�}�Y┍��ɗ`�n�����X���M���ȍ������뜝�k���������������卭�Ӎ��������e�W�E�Q�������L�m�՘i���՝��Q�f���肝K�����ਗ਼�Ჟ�騟����}�{㝛������ҟ������L���`�t�i���B�����R�������H��{ൟ������H�s秝���n�n�������˝J�ܔ�����X���L�J�y�ߛ��b�M褜���r�R���t莘m�j�E��硍h�k���l�K����ᦜ������n�K�}��֞��\��囍y��ෙ��Μˍx����u�X�S�e倘����J�i�^���V�@���A����W����G�D�T����`ᩍB��ԍp�]�i�P���I���z�t�_���K�k�O�j�R�w�U�u�P�a�I�|�q�s�m�r���c���D�ޞ��J�ܛ����w�L�΍���������W������ێ����ЛZ�Ö��s������烌��g���םs���ؑ������e��Ⰿ������u����Čٌ̟��]�|����V�����x�֒���绌я�嚙��h���ʉz�q�njԌך➳�Ҕ�Ï��˗��Z�������ꉟ��h�@�Z���e����s�|�q���W���O�׏b����]�{�Ȍ��t��Ә����n�K���P�B�����^���_�[���r����K�{����������C�������ՙL��ٜš������������w�������_�J���]���p��[�����i���N���J����y�������ʌ�����㮛ӌ��@���ę�������F鄌������������������������������Ō����������|�w���Z���Dờl����c⠞f���a犌l�_�Ϝl���g�����۝k�ڙ��㋜��d��P�n�������������������������������������������������������r�z������壌u�殌e�k�\�g��b�Y�p���]�v�[�R�����ق���Ɣz���ɟK�M�z������ⱟJ��㖍򍥛������I�����H���E��z�b�o������x�ܗ��A���D�B��ӏ��~���������B䱌s���Z�Y�㙬��ᯞ���ӛ��M�ֈϏ��v���L�����K�@����{���^���Z�򏾓�^�����������鶔�ňʈ��U�Ñq���������C�~���ܒw�o�^������鿌~�G�F䇚����`�p���̏L�Y���������ƌI��ގԚ��P�M�����E���u���{�O�����o�Ӟ������c�������H�E�|―�Ĝ����Ῑ܌J�ɍC�g����m�������؍H�ᜁ��v�����g�����M���˙�����i���w�G�J�r���z��W���_���_���l�o�C∋̛����m�����G��摞��d��~������焌N��۟A�@���^�ϛ��l�ɝh�h�f�k�e�i�D���܁ʁ��I������灓�}�E�B�W���b�\���W�����M�������񁝁{�P�����R�U�A���������_�G�����偅�X��������L�J�d�󁃁��Z���]�Q�����F���S���H�O�C���a���c�V���K���⁘�����T�^�����Ɂ����[�|�ၐ�򁪁��N�߁Y���䉌�s�׍@�ܞ��X�����������a�n�݋j�����~�g�����������ݜv⯝v�����������R�Ջڋ��[������a�z�ҝ��Ћی��׋؋ы͋ՋӋϋًދԋߋ֋ΉR����䐝����_�蝨⦘��c�`篋��ы��������������������Nj����������|�y㳛I⸋�蝜��^�t⧜t����������⁙K���Í�⟍[�s�����w���O�����v�S��O�v��h➍F�����������p�Z���i�g�݋������������x�������Z�Nj����]䰋������񋧋��������o��運����d�����������������������q�k����髟_�p�k�����������溂X����}���t瓌��Ë����u�Ӌ����y�Z���P�����|�l�{�v�����u���������x�~�}���z���Y��M��q���J�ƟC�����P���k����؋W���k���d�q�b���H�P���_���b���ᡚy�ɌV���c�ڑ��限�E�K���Y���R�_眎����M�u������������{�G�L�D�I�a���Ί��N�����h���X�ߛ��֗���W�B�뛞�����D�؋Q����恟���㲊��韀�u�����H�����ҋS������U昊����،���r�r�ʝu����M���F���^�����������J���B���Q�i�P���X�O�����ᘊ��y���NJ��r���݊��j���ƌy���Ĉꁽ�e�A���i������������M�ʕr��P�T�M���v��������rᚌ���f�j�q�s�e�g�h�p�o�t�r���ƒb��鹜��NJ����D�R���U�ğd��ᥛz���p�ȌڋA���ԓ�雛��_�B�ߗ��ދȋ�\�����Ί����͏ۋw�d�T��e�z�J�x���Ō`���ӌ^�����H���Ȕ����X��R㎎C���P��������q�Š������锯閊����@�����Њ��|�ȁ�嶝^艔���噞J㹊��������{������歒S�����e顊��j舊����������s�Fጐ��d�P�}���g�����y�a�`�f����S�W���m���e����O���]�ݑ��ڙ̛���������@�����F�������O���k�P��\�[�����ಉG�h�@���󓂞Њ����~�y�ۍ\�������}�����ɐ��͘����V��،����~ऐ����c���͌��b���w��u�x�v�X�Õ��L����ꖊ��C�G�K�ƓC魜S�R���Д߈����K�v���֓S哑t�������ݓk�������L�S�ښ��湛�誝����ᙚٚ]���d䡜����Q���I�v�n��跏ʜ������h���\�f�r�n�z�y�k�l�m�k�g�c�s�t�i�o�݉B�v�l�d���j�ߊg�q�u�p�m嵚��W������~�[�����Z�B���͙��G�r�q�ʟD�䠜j珞i������ƙd�^�񔐘��\�X����{�Ž\箊I�ؘ�����r�H�_���������j�~�_�F���׊@��E�m�����L�G���D�ŊA��������K����J����C�������I䯘��Yᷛe�p���՟��b�Nボ�錝A���Q���a��T㼛�㻛f�W�`�c洟a�����⻝q�j����鉙ɞ쏁㣟��V�뙁�����M��ϊ�䅟��j�F�����r�������ȟ�綝��m���l���b���˙����_�x�����pᒔ����c�A�g����⭊��|�}�ۚ��ۊ��@�يΞ��؊��󊩐��ҊȊ��@�����ʊ��Ş��̊��Ɋ��ƜA�L��萊ъ������ŠԊ׊��ՊĚ^���Ê��NJ����֊͊������ϊ��w����x�s�q�P�g�ӊe�����a���㞎��ʼnؚĝ̎���d���ˉ��Z�Γ��ٌ����q�҃�����斉����v�q�Ўx���|�ۉԌ����Q���|����ўh�`��ܛ�����嘉������]�Ǝ؉�㟋�z�ɉÈՉʜ����F��荊����ЌC�a�{�����`�e�k�J�m�”ޚ썁�͉̉ώ����o����ז�◚D�S���l���όU���ґݙ͉щݙ��ljӌT��旞g�~�߉惕�砌����ĉ����ጜ����Ə�����戉Č͉��ۂ������߄��������V���R���`���i��K�N�~���q�ԃL�J���K���{�P��k]\|�\_s*[�����]\|�b\_s*[�R�P�N�L�J]\|��\_s*[�q����������]\|�O\_s*��\|��\_s*��\|��\_s*��\_s*��\|�\_s*�J\|�H\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*�y\|��\_s*�F\|��\_s*��\|��\_s*��\|�S\_s*��\|M\_s*e\_s*t\_s*a\_s*c\_s*h\_s*l\_s*a\_s*m\_s*y\_s*d\_s*e\_s*a\_s*e\|f\_s*o\_s*o\_s*t\_s* \_s*a\_s*n\_s*d\_s* \_s*m\_s*o\_s*u\_s*s\_s*e\_s* \_s*d\_s*i\_s*s\_s*e\_s*a\_s*s\_s*e\|�O\_s*�A\_s*��\|�\_s*�u\|�\_s*��\|��\_s*��\|S\_s*i\|�\_s*��\|�S\_s*[�Z��]\|9\_s*[����]\|�^\_s*�{\|�Q\_s*�O\|��\_s*��\|��\_s*�|\|�T\_s*��\_s*��\|L\_s*a\_s*u\_s*r\_s*\%(a\_s*c\_s*e\_s*a\_s*e\|o\_s*i\_s*d\_s*e\_s*a\_s*e\)\|�T\_s*��\|��\_s*��\|c\_s*r\_s*e\_s*s\_s*c\|��\_s*��\_s*��\|H\_s*e\_s*l\_s*l\_s*e\_s*b\_s*o\_s*r\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|J\_s*u\_s*g\_s*l\_s*a\_s*n\_s*d\_s*a\_s*l\_s*e\_s*s\|�Z\_s*��\|�n\_s*�_\|�s\_s*�q\|�B\_s*��\|�z\_s*�n\|��\_s*[�q�V��]\|��\_s*��\|�m\_s*�F\|�\\_s*�\|��\_s*��\_s*��\|X\_s*e\|�@\_s*��\|��\_s*�s\|��\_s*��\|�f\_s*�n\|�\_s*�\|�\_s*�z\|G\_s*o\_s*l\_s*d\|A\_s*\%(u\|r\_s*c\_s*h\_s*i\_s*c\_s*h\_s*l\_s*a\_s*m\_s*y\_s*d\_s*e\_s*a\_s*e\|s\_s*t\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|c\_s*a\_s*n\_s*t\_s*h\_s*a\_s*c\_s*e\_s*a\_s*e\)\|�\_s*��\_s*��\|��\_s*��\|R\_s*\%(h\_s*\%(o\_s*e\_s*a\_s*d\_s*a\_s*l\_s*e\_s*s\|a\_s*m\_s*n\_s*a\_s*l\_s*e\_s*s\)\|u\_s*n\_s*u\_s*n\_s*c\_s*u\_s*l\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|a\_s*n\_s*\%(u\_s*n\_s*c\_s*u\_s*l\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|a\_s*l\_s*e\_s*s\)\)\|��\_s*��\|�e\_s*[����]\|�o\_s*[����]\|�j\_s*[����]\|�{\_s*��\|�n\_s*��\|�X\_s*\%([���]\|��\_s*��\)\|��\_s*��\|��\_s*�Z\|��\_s*�q\|��\_s*�T\|�\_s*�\|�z\_s*��\|�\_s*�x\|�R\_s*\%(��\_s*�q\|�z\_s*��\)\|�j\_s*��\|��\_s*��\_s*��\_s*��\|�}\_s*��\|��\_s*\%(��\|�`\_s*��\)\|��\_s*��\|��\_s*[����]\|��\_s*��\|�V\_s*\%(��\|�l\_s*��\)\|��\_s*�q\|�|\_s*��\_s*��\|O\_s*x\_s*a\_s*l\_s*i\_s*d\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*��\|�t\_s*��\|�\_s*�r\|��\_s*�Z\|�|\_s*��\|�\\_s*��\|�]\_s*��\|��\_s*��\|��\_s*�q\_s*��\|��\_s*[�a�y]\|��\_s*��\|��\_s*��\|E\_s*\%(b\_s*e\_s*n\_s*a\_s*l\_s*e\_s*s\|l\_s*a\_s*n\_s*a\_s*l\_s*e\_s*s\)\|��\_s*�R\_s*�q\|�\_s*�\|��\_s*��\|��\_s*��\|�y\_s*��\|�A\_s*�g\|�g\_s*��\|��\_s*�t\_s*��\|C\_s*\%([ormdfa]\|h\_s*r\_s*o\_s*m\_s*i\_s*u\_s*m\|i\_s*r\_s*c\_s*a\_s*e\_s*a\_s*s\_s*t\_s*e\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|u\_s*r\_s*i\_s*u\_s*m\|e\_s*r\_s*c\_s*i\_s*d\_s*i\_s*p\_s*h\_s*y\_s*l\_s*l\_s*a\_s*c\_s*e\_s*a\_s*e\|y\_s*p\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\)\|��\_s*\%(��\|�q\_s*��\)\|�\_s*�\|�\_s*�\|�Z\_s*\%(�c\|�C\_s*��\)\|��\_s*��\|��\_s*[�{��v��]\|��\_s*\%(��\|��\_s*�s\_s*��\_s*��\_s*�w\_s*�Z\_s*�p\_s*��\_s*�w\)\|(\_s*��\_s*)\|��\_s*�q\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|�m\_s*\%(��\|��\_s*��\)\|�~\_s*��\_s*��\|�o\_s*�c\|�Y\_s*�t\|��\_s*[�I�v�_]\|��\_s*�_\|�B\_s*��\|T\_s*\%(h\_s*a\_s*l\_s*i\_s*c\_s*t\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|u\_s*b\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\)\|�m\_s*\%([�u�E]\|�[\_s*��\|�b\_s*\%([�g�N]\|�e\_s*�B\_s*��\_s*�O\|�J\_s*�[\|�L\_s*��\_s*�O\)\)\|�i\_s*\%(�b\_s*\%(�N\|�v\_s*\%(�T\_s*�b\_s*�N\|�U\_s*�b\_s*�N\)\)\|��\_s*�b\_s*�W\|�C\_s*[�t�g�c]\)\|�j\_s*\%(�[\|�b\_s*\%(�g\|�e\_s*�B\_s*��\_s*�O\)\)\|�z\_s*\%(�[\_s*\%(�~\_s*�[\|��\_s*�C\)\|��\_s*�C\_s*�j\)\|�t\_s*\%(�r\_s*��\_s*�C\|��\_s*�V\_s*�`\_s*��\_s*�t\)\|�n\_s*\%(��\|��\_s*�V\_s*��\_s*�[\|�[\_s*��\|�o\_s*��\_s*�t\_s*�X\_s*�N\|��\_s*�c\_s*�[\_s*��\|�`\_s*��\_s*�g\_s*�D\_s*��\_s*�A\_s*��\)\|�j\_s*\%([�_����]\|�J\_s*�b\_s*�v\|��\_s*��\_s*��\_s*��\_s*�n\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\)\|P\_s*\%(i\_s*p\_s*e\_s*r\_s*a\_s*\%(l\_s*e\_s*s\|c\_s*e\_s*a\_s*e\)\|a\_s*p\_s*a\_s*v\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|o\_s*\%(d\_s*o\_s*s\_s*t\_s*e\_s*m\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\|t\_s*a\_s*s\_s*s\_s*i\_s*u\_s*m\)\)\)', - \ 'l' : '\%([��H����F����D����B����@�����ႌ�P�Q���������ʁ��΁́Ƀ��ȃ����|�����L��l]\|�\_s*[�����]\|�b\_s*[�H�F�D�B�@]\|��\_s*[����������]\|�t\_s*��\|��\_s*��\_s*2\_s*��\_s*�@\|\.\_s*\.\_s*\.\|�f\_s*�F\|��\_s*�z\|��\_s*��\|�E\_s*�G\|��\_s*��\|�w\_s*�K\|�{\_s*��\|��\_s*��\|�_\_s*��\|��\_s*\%([�L�C�A�����u�{�g���E�X�R�S�O�[]\|�y\_s*�X\|��\_s*�[\_s*��\|�G\_s*�x\|��\_s*��\|�t\_s*�g\|��\_s*�J\|�x\_s*��\_s*�A\|�r\_s*\%(�[\|��\_s*�O\|�C\_s*\%(�X\_s*�g\|��\_s*�O\)\)\|�e\_s*�B\|�T\_s*��\_s*\%(�W\_s*�F\_s*��\_s*�X\|�[\_s*��\_s*�X\)\|�j\_s*�[\|�N\_s*��\_s*�A\_s*��\|�b\_s*\%([�W�^�e�g�N]\|�L\_s*\%(��\_s*�O\|�[\_s*�h\)\|�J\_s*�[\)\|�J\_s*�[\_s*��\|�P\_s*�[\_s*\%([�g�^��]\|�V\_s*��\_s*��\)\|�K\_s*�[\|�M\_s*��\_s*�O\|�W\_s*\%(�[\|�e\_s*�b\_s*�N\|�X\_s*�e\_s*�B\_s*\%(�N\|�b\_s*�N\)\|�J\_s*��\|�N\_s*�[\_s*��\|�b\_s*[�g�N]\)\|��\_s*��\|��\_s*\%([�S�O�_]\|�{\_s*\%(�N\|�b\_s*�N\)\|�o\_s*��\_s*�f\_s*�B\|�Y\_s*�f\_s*�[\_s*��\|��\_s*[�B�[]\|�W\_s*��\|�h\_s*��\)\|��\_s*\%(�A\_s*��\|�b\_s*�^\|�[\_s*�k\|�C\_s*��\|��\_s*\%([�\�X]\|�c\_s*�H\)\)\)\|\\\_s*L\_s*a\_s*T\_s*e\_s*X\|�k\_s*\%(�T\_s*�C\_s*�Y\|�k\_s*�T\_s*�C\_s*�Y\|�t\_s*�m\_s*�`\|��\_s*\%(��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\)\)\|��\_s*\%(��\_s*��\|��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\|A\_s*�s\_s*E\_s*�w\|��\_s*\%(��\_s*��\_s*��\_s*��\|�s\_s*��\_s*�w\|��\_s*��\_s*��\_s*�v\_s*��\_s*��\_s*��\_s*��\_s*��\)\)\|L\_s*\%([DP]\|�T\_s*�C\_s*�Y\|L\_s*�T\_s*�C\_s*�Y\|u\_s*\%(t\_s*e\_s*t\_s*i\_s*u\_s*m\|c\_s*i\_s*d\)\|i\_s*\%(t\_s*h\_s*i\_s*u\_s*m\|s\_s*p\|n\_s*u\_s*x\)\|E\_s*D\_s*��\_s*�C\_s*�g\|e\_s*m\_s*m\_s*a\|o\_s*\%(g\_s*i\_s*c\_s*a\_s*l\_s* \_s*U\_s*n\_s*i\_s*t\_s* \_s*N\_s*u\_s*m\_s*b\_s*e\_s*r\|u\_s*i\_s*s\_s*i\_s*a\_s*n\_s*a\)\|a\_s*\%(w\_s*r\_s*e\_s*n\_s*c\_s*i\_s*u\_s*m\|n\_s*t\_s*h\_s*a\_s*n\_s*u\_s*m\|T\_s*e\_s*X\)\|A\_s*N\)\|��\_s*��\_s*��\|�G\_s*��\|��\_s*\%([�B�Z�Y�U�T�X�_�|�������}�i�m���k�u�A�[]\|��\_s*�}\|��\_s*�h\_s*��\|��\_s*��\|�]\_s*�`\_s*�[\_s*��\|�R\_s*\%(��\_s*�X\|�s\_s*��\)\|�N\_s*�[\_s*�h\|�J\_s*\%(�[\|�I\_s*��\)\|�W\_s*[���[]\|�f\_s*[�B��]\|�h\_s*�J\_s*�C\_s*��\|�v\_s*�g\_s*��\|�p\_s*�[\_s*�[\|�O\_s*\%(�j\_s*��\|�i\_s*��\)\|�t\_s*\%([�G�g]\|�^\_s*�[\|�e\_s*�B\_s*��\_s*�O\)\|�e\_s*��\_s*[���V]\|�`\_s*�E\_s*��\|�\\_s*\%(�\\_s*�[\_s*��\|�O\_s*��\_s*�t\_s*�B\)\|�^\_s*�[\|�g\_s*\%([����]\|�}\_s*�X\|�A\_s*�j\_s*�A\|�O\_s*��\_s*�t\|�o\_s*��\_s*�X\_s*�L\_s*�[\)\|�I\_s*\%(�^\_s*�[\_s*��\|�l\_s*��\)\|�~\_s*\%(�e\_s*�b\_s*�h\|�b\_s*[�^�g]\)\|��\_s*\%(�[\_s*�W\_s*��\|�l\_s*��\|��\_s*�`\_s*�F\_s*�b\_s*��\)\|��\_s*�W\_s*��\|�L\_s*\%(�b\_s*�h\|��\_s*�[\_s*��\|�e\_s*��\_s*\%(�X\_s*�^\_s*�C\_s*��\|�V\_s*��\_s*�^\_s*�C\_s*��\)\)\|�G\_s*\%(�]\_s*��\|�[\_s*�W\_s*��\)\|�q\_s*�e\_s*��\_s*�V\_s*��\_s*�^\_s*�C\_s*��\|�l\_s*\%([�A��]\|�b\_s*�g\|�[\_s*�W\_s*��\)\|�j\_s*�A\|�x\_s*\%([����]\|��\_s*�A\|��\_s*�[\_s*�V\_s*��\_s*��\|��\_s*�e\)\|�r\_s*\%([�A�[]\|�h\_s*�[\|��\_s*�O\)\|��\_s*\%([�X�[]\|�u\_s*��\_s*��\_s*�[\_s*�i\|��\_s*��\|�h\_s*�~\_s*��\|�N\_s*�T\_s*��\_s*�u\_s*�[\_s*��\|�b\_s*�N\|�V\_s*�A\_s*��\|�~\_s*�G\_s*�[\_s*��\)\|��\_s*\%(�C\|��\_s*�O\_s*�E\_s*�F\)\|��\_s*\%(�B\_s*��\_s*�O\_s*�X\_s*�g\_s*��\|�@\_s*\%(�v\_s*�[\_s*��\|�C\_s*�A\_s*�T\_s*��\)\)\|�o\_s*\%(�e\_s*�B\|�^\_s*��\_s*�A\_s*\%(��\|�j\_s*�Y\_s*��\)\|�v\_s*�[\_s*��\|�C\_s*�A\_s*�T\_s*��\)\|�b\_s*\%([�h�s�v�^�N�`�g]\|�X\_s*��\)\)\)', - \ 'm' : '\%([ӊ�ߝ����ϙ~�E��ぞ���������I�J��䈐��Ўt�������u�q�v�U�p���ݑ���m�X�����ޖ��\���~���Җ����ߋ����̋��������b�f��{���e�����Җ۟��ٖ՟G������̞N���a�C�ܖS�֖іЖҖ����ێ�]���R�k�ᑔ�R�Ȗ͕�֞��G�̖Ύ��r������ݒ����W�Ϗ����ږӛR��ㅖG�̎����b�p�cᾖɖ˖�ǖȖʝ����Ŗ��Җ��ǖ�������ɓz��������������ї�㸋X���}���ٖ��V�񛘊[������|��r���m����籕S�}����絓ԘA�W�p�����~���׏@�����d����⚕ړk��J⥐���ĐI�ßz峒��������ۚ䖹�����ٖ��d�������Q����Z���x�x������������N���a�D�Y�K�I����������C���T�����Η����������������������X�O�̎S�Z������B���ݜD�X�����L�薦�ޑ��ْ��Á��v���p���x�z�E�G⊖����ɗΔF�����a�ϓ��r�ʘH�����韌Ύ��M倐�ᡞ��䪖��������s�{�S�A���Q���`�����֞�捐����v���P�閨��{�F�������Ŝ\���r�V�m�f���O�ϔ��[�[�p�����䖣�����Ȑg���ϖ�▕n�������aῖא\�ݟ{�f�B坏�㇓�㕓I帑��^�]�ߋ[���]�H�o�q�h������Ɖ������M���ϔ도�d�����h�ʉq�����������ږ��p��鞔C����䍕������̓h�|�{���Š�׈��w���l�e�����C�������d��ꠖq�x�f�����U��X���O�D�E�B��������K�j�i�~�ە��������בS�u�����Җ����K������w�Q�Җ��Ė����Ęd�G����簖��������ڞ_�a���J�Z�Ֆ�攉V�{顜���јԛ���I���ԙ��\�ݖ��ޖ��呾�G�����M�����������挫�D�󏫐�����������m�_�U䝔n�ݑ������ԕ������]�v�s���Җ����T�������֍��v�����ږ�ᄐ�ϐ^���d���șɎG�܂��������򃀁ʁ܁�������ځ}���́΁ށ�ȁ����聹�偅�惢�ˁ������ہ́⁈�~�Ɂ���߁݁��䁾���֖��������Z�������|�}�Ń~���M����m]\|�\_s*[�����]\|�b\_s*[�������~�}]\|��\_s*[���߂ނ݂�]\|�g\_s*[�����t]\|�o\_s*\%([��n�e]\|��\_s*��\|��\_s*��\)\|�\_s*�o\|��\_s*�y\_s*\%(��\|��\_s*��\)\|��\_s*\%([�p�e�n]\|��\_s*��\)\|��\_s*�\|��\_s*��\|��\_s*��\|��\_s*�z\_s*��\|�k\_s*�~\_s*��\|��\_s*��\|��\_s*�p\|��\_s*��\|��\_s*��\_s*��\|O\_s*l\_s*e\_s*a\_s*l\_s*e\_s*s\|��\_s*�R\|��\_s*��\_s*��\|�j\_s*�E\|��\_s*��\|��\_s*[�N����]\|�n\_s*��\_s*�F\|�t\_s*��\|�J\_s*��\_s*��\|�v\_s*�w\|��\_s*��\|�z\_s*��\_s*�q\|�v\_s*\%([�����p�L]\|�`\_s*��\|�H\_s*�q\)\|��\_s*��\|�U\_s*��\|6\_s*��\|��\_s*�c\|��\_s*�w\|��\_s*��\|��\_s*�]\_s*�q\|�\_s*�n\|B\_s*\%(e\_s*r\_s*b\_s*e\_s*r\_s*i\_s*d\_s*a\_s*c\_s*e\_s*a\_s*e\|i\_s*o\_s*r\_s*r\_s*a\_s*g\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\)\|�Y\_s*��\|��\_s*�q\|k\_s*\$\_s*_\_s*{\_s*i\_s*n\_s*f\_s*}\_s*\$\|�t\_s*�m\|A\_s*\%(b\_s*i\_s*e\_s*s\|p\_s*e\_s*t\_s*a\_s*l\_s*a\_s*e\|c\_s*r\_s*o\_s*s\_s*t\_s*i\_s*c\_s*h\_s*u\_s*m\)\|�R\_s*��\|�\_s*��\|�e\_s*��\|�_\_s*[���q�`]\|�d\_s*��\|��\_s*��\|��\_s*��\|�c\_s*[�q����]\|3\_s*[�“�]\|�R\_s*[�“�]\|�p\_s*[�����q]\|��\_s*��\|��\_s*��\|�c\_s*��\|�C\_s*[�_�]�z�����I�R]\|P\_s*o\_s*d\_s*o\_s*p\_s*h\_s*y\_s*l\_s*l\_s*a\_s*c\_s*e\_s*a\_s*e\|�y\_s*[�����Y]\|��\_s*�s\|�[\_s*�]\|��\_s*��\|��\_s*��\|�e\_s*�O\|R\_s*u\_s*t\_s*a\_s*l\_s*e\_s*s\|�s\_s*\%(��\|��\_s*[�_�]]\)\|��\_s*�l\_s*�}\_s*��\_s*�m\_s*�X\|��\_s*�X\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[�X�Ў���]\|��\_s*��\|�S\_s*��\|��\_s*�h\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|�{\_s*�B\|��\_s*�v\|��\_s*[�o����]\|��\_s*��\|�}\_s*�n\|L\_s*o\_s*g\_s*a\_s*n\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*��\|��\_s*�b\|��\_s*�m\|S\_s*\%(a\_s*p\_s*i\_s*n\_s*d\_s*a\_s*l\_s*e\_s*s\|c\_s*h\_s*i\_s*s\_s*a\_s*n\_s*d\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\)\|C\_s*\%(a\_s*s\_s*u\_s*a\_s*r\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\|e\_s*r\_s*a\_s*t\_s*o\_s*p\_s*y\_s*l\_s*l\_s*a\_s*c\_s*e\_s*a\_s*e\)\|�|\_s*\%(��\_s*�l\|��\_s*��\)\|H\_s*a\_s*m\_s*a\_s*m\_s*e\_s*l\_s*i\_s*d\_s*a\_s*l\_s*e\_s*s\|��\_s*[�V��]\|��\_s*�F\|�S\_s*�j\|��\_s*�q\|��\_s*[�����P]\|��\_s*��\_s*�N\|��\_s*�v\|��\_s*��\_s*��\_s*��\|�j\_s*�[\_s*��\_s*�j\_s*�b\_s*�N\|�P\_s*��\_s*��\|��\_s*�c\|�a\_s*�z\_s*[����]\|��\_s*��\_s*�q\|��\_s*��\_s*�]\|�s\_s*[�K��]\|��\_s*��\|��\_s*\%(��\_s*��\_s*��\_s*�h\_s*�q\_s*��\_s*��\_s*��\_s*��\|�{\_s*��\)\|�l\_s*\%(�g\_s*��\|�T\_s*�C\_s*�Y\|�r\_s*�|\_s*�c\_s*�n\_s*�r\|�k\_s*�T\_s*�C\_s*�Y\|��\_s*�D\|��\_s*��\_s*��\|��\_s*�b\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\)\|�v\_s*�Z\_s*�@\|��\_s*��\|�U\_s*�b\_s*�w\_s*��\_s*��\_s*�}\_s*�]\_s*�b\_s*�z\|�n\_s*�s\_s*�I\_s*��\_s*��\|��\_s*�s\_s*\%(��\_s*��\|��\_s*��\_s*��\)\|�C\_s*�m\|��\_s*��\|��\_s*��\|M\_s*\%([dgtnOo��]\|X\_s*�e\_s*��\_s*�r\|�T\_s*�C\_s*�Y\|S\_s*-\_s*D\_s*O\_s*S\|L\_s*�T\_s*�C\_s*�Y\|P\_s*3\_s*�v\_s*��\_s*\%(�[\_s*��\_s*�[\|�C\_s*��\_s*�[\)\|D\_s*\%(�v\_s*��\_s*�[\_s*��\_s*�[\|��\_s*�R\_s*�[\_s*�_\_s*�[\)\|c\_s*C\_s*a\_s*r\_s*t\_s*h\_s*y\|e\_s*\%(d\_s*u\_s*s\_s*a\_s*n\_s*d\_s*r\_s*a\_s*l\_s*e\_s*s\|i\_s*t\_s*n\_s*e\_s*r\_s*i\_s*u\_s*m\|t\_s*a\_s*F\_s*o\_s*n\_s*t\|n\_s*\%(y\_s*a\_s*n\_s*t\_s*h\_s*a\_s*l\_s*e\_s*s\|d\_s*e\_s*l\_s*e\_s*v\_s*i\_s*u\_s*m\)\|C\_s*a\_s*b\)\|u\_s*l\_s*e\|A\_s*C\_s*�A\_s*�h\_s*��\_s*�X\|a\_s*\%(g\_s*n\_s*\%(o\_s*l\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|e\_s*s\_s*i\_s*u\_s*m\)\|n\_s*\%(u\_s*\%(s\_s*c\_s*r\_s*i\_s*p\_s*t\_s* \_s*E\_s*d\_s*i\_s*t\_s*i\_s*n\_s*g\|e\_s*d\)\|g\_s*a\_s*n\_s*e\_s*s\_s*e\)\|r\_s*y\_s*l\_s*a\_s*n\_s*d\|i\_s*n\_s*e\|k\_s*e\_s*f\_s*i\_s*l\_s*e\|c\_s*\%(h\|i\_s*n\_s*t\_s*o\_s*s\_s*h\)\|s\_s*\%(s\_s*a\_s*c\_s*h\_s*u\_s*s\_s*e\_s*t\_s*t\_s*s\|t\_s*e\_s*r\_s*C\_s*a\_s*r\_s*d\)\)\|i\_s*\%(n\_s*n\_s*e\_s*s\_s*o\_s*t\_s*a\|s\_s*s\_s*\%(i\_s*s\_s*s\_s*i\_s*p\_s*p\_s*i\|o\_s*u\_s*r\_s*i\)\|c\_s*\%(r\_s*o\_s* \_s*S\_s*o\_s*f\_s*t\_s*w\_s*a\_s*r\_s*e\_s* \_s*A\_s*s\_s*s\_s*o\_s*c\_s*i\_s*a\_s*t\_s*e\_s*s\|h\_s*i\_s*g\_s*a\_s*n\)\)\|I\_s*\%(T\|P\_s*S\|M\_s*D\)\)\|�G\_s*��\)', - \ 'n' : '\%([݃���ɏC�҈�j�����M��l����A�j�������f���w�a�X��H�p�L�ՋH�]�`�k��c��䊉ѓ���o����ь���ْ��E�����{�J���W�@���ГT�K�鑥���͋X�I�N�����ӞG��c�I�X�^�]�\�_�������U�ޔW����ژ��Z�V�L���q��ہ|�Z�‚�Țˑ_�o�^�E����D�J�C�ꋑl�X�L���i���������s�M�JൔK���R�����_�Q�O�R�N���S�l���P��I�B�Q�ם������H���q����ǚ��\�啼�K���L刐@���z���X���ޓ����F�܍f�z�G�E�{�D���z�U�ѓh��Ɲ^吒S�����������L�����E���R�P�{�e�����֏��A�E���U�Д@���P���E��ɔB轟��W�����s�t��x�w�����Z�K���X�f�אn�E�͔D�F�C�l�����ʋѐ����V���_�����a���������玂Q�Ɠ����獐m�򎗉�2���O����r�W㊓��c����k�j�›�����D�T�l��S�V�Q�e�w���o���Ԏ������P�����Y���g糕�粓�Q�^�垙�����ĎC���������Ή������Y�ّӓ��H�a����Ë[�y����m�ܗG�X��Ɩ�Č`�Ɖr����ဗ��v����i�a�����������x�܏A���E�}�����V�Ύ����̔T�����R���f��훕����j����s�Ϟo�o��񁽁ˁ��K��⍉֚a�[���ߝ\�r�P���������n���T����ˆ��b�ޏ��L���ྒྷ�ލ؋������S���~���e�Ȅ��������������������������������������ޖ������������j�l�ʁ`���i�k�m���N�~��n]\|��\_s*��\|��\_s*�q\|��\_s*��\|�x\_s*�U\|��\_s*��\_s*��\|�\_s*��\_s*��\|�T\_s*[�|��]\|��\_s*�C\|�t\_s*��\|�g\_s*[���C]\|�j\_s*[����]\|��\_s*�]\|�L\_s*��\|��\_s*��\|�F\_s*�q\|��\_s*[�@���q]\|�P\_s*�q\|��\_s*�q\|��\_s*��\_s*��\|�h\_s*�V\|�q\_s*�|\|��\_s*�\_s*��\|��\_s*��\_s*��\|�m\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*�]\_s*�q\|�_\_s*��\|��\_s*�P\|I\_s*I\_s*��\|�^\_s*��\|��\_s*��\|��\_s*�\| \_s*2\_s* \_s*��\_s*��\_s*��\|M\_s*y\_s*r\_s*i\_s*s\_s*t\_s*i\_s*c\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*��\|��\_s*\%(�f\|��\_s*��\)\|�|\_s*�\|��\_s*�|\|��\_s*�T\|�s\_s*[����]\|P\_s*b\|L\_s*e\_s*a\_s*d\|�C\_s*[�ۑl]\|C\_s*\%(e\_s*l\_s*a\_s*s\_s*t\_s*r\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|a\_s*r\_s*y\_s*o\_s*p\_s*h\_s*y\_s*l\_s*l\_s*a\_s*l\_s*e\_s*s\)\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\)\|�|\_s*��\_s*��\|7\_s*[����]\|��\_s*��\|�n\_s*�k\|��\_s*��\|�s\_s*��\|��\_s*��\_s*�X\_s*�g\|T\_s*h\_s*e\_s* \_s*N\_s*e\_s*t\_s*w\_s*o\_s*r\_s*k\_s* \_s*I\_s*n\_s*f\_s*o\_s*r\_s*m\_s*a\_s*t\_s*i\_s*o\_s*n\_s* \_s*C\_s*e\_s*n\_s*t\_s*e\_s*r\|S\_s*o\_s*\%(l\_s*a\_s*n\_s*a\_s*l\_s*e\_s*s\|d\_s*i\_s*u\_s*m\)\|�R\_s*��\|�t\_s*�H\_s*��\_s*�E\_s*�m\_s*�C\_s*�}\_s*��\|��\_s*�[\_s*�m\_s*�b\_s*�V\_s*��\_s*�E\_s*�t\_s*�H\_s*��\_s*�E\_s*�m\_s*�C\_s*�}\_s*��\|�I\_s*��\_s*��\_s*�_\|�A\_s*��\_s*��\_s*�J\_s*�l\_s*�b\_s*�g\_s*��\_s*�[\_s*�N\|��\_s*��\|��\_s*�_\|�m\_s*\%([�_�n]\|�N\_s*�B\_s*�[\_s*��\|\.\_s*�x\_s*\.\|��\_s*��\_s*��\_s*��\|�h\_s*�e\_s*�s\_s*�x\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*\%(�w\_s*�s\|��\_s*��\_s*��\_s*��\|��\_s*�|\_s*�i\_s*��\_s*��\_s*��\_s*��\_s*��\|�v\_s*�r\|��\_s*��\_s*��\_s*��\)\|�d\_s*\%(��\_s*��\_s*��\_s*��\|�s\_s*��\_s*��\_s*��\_s*��\)\|��\_s*\%(�D\|�v\_s*��\)\)\|��\_s*�z\_s*��\|��\_s*��\|��\_s*��\|N\_s*\%([dpbaeoi]\|R\_s*Z\_s*I\|-\_s*g\_s*r\_s*a\_s*m\|G\_s*��\_s*�[\_s*�h\|H\_s*K\_s*\%(�z\_s*�[\_s*��\|��\_s*�W\_s*�I\)\|T\_s*T\|Y\_s*�_\_s*�E\|U\_s*L\_s*L\|A\_s*S\_s*A\|E\_s*\%(C\|p\_s*o\_s*c\_s*h\|m\_s*a\_s*c\_s*s\)\)\|��\_s*�f\|�G\_s*�k\)', - \ 'o' : '\%([��ݜ��b�S�M�o�N�O�Ì��Q�������j�w�d���Њd�Y���n�����n���x��������遌��s�s��ና{��≬�ݕL�ڜ����P����؋������y���߁W�S�V�T�R�U�X�����y�􋳙{�E⫝������e���}�t���c�C筞��[�҉���x���^拑����`�q�`�Ɗx���s���N��˗��u���B�b���d�e�������Ȋe�퐊��K�ȉ��򚙁������a�C���O�������݈җ�㱕������z�v�\�d�ʋ������U���K�������������{�|�����w���S�^�����g�]㠟i�����������Ҝ����}�D���ᜳ��[�a�����Q��_�������N�R�������V�M�������ן^�q�቉��r�S�B��������������������蜊׉����W�ꉞ�ʜ䉆���W�T�g�����E���c�T�ٖQ���P�������ѕ���}���ʼn������Y�[���”��u���N�|���Ǜ�ܚǕ��ĐD�V�����E���j�v�ɋN�O���j������؟Ɍ䏏�֒�������Y�~���������щ��I�������偝���a���Ɂ��J���O�́��փ��I��o]\|��\_s*��\_s*��\_s*��\|��\_s*�p\|�\_s*�u\|�\\_s*��\_s*��\|�S\_s*��\|�C\_s*��\_s*�C\_s*��\|��\_s*��\|��\_s*�@\|��\_s*��\|��\_s*�\_s*��\|��\_s*��\|�n\_s*��\|��\_s*��\|��\_s*��\|��\_s*[�]\|��\_s*��\|��\_s*��\|�T\_s*[������]\|��\_s*[���q]\|�f\_s*[����]\|��\_s*[����]\|�H\_s*��\|��\_s*��\|��\_s*�C\|G\_s*u\_s*t\_s*t\_s*i\_s*f\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|D\_s*i\_s*l\_s*l\_s*e\_s*n\_s*i\_s*a\_s*l\_s*e\_s*s\|H\_s*y\_s*p\_s*e\_s*r\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\|��\_s*��\|�\_s*�p\|��\_s*[�q����]\|��\_s*�N\_s*��\|�{\_s*��\_s*��\|��\_s*��\|��\_s*�b\|A\_s*l\_s*i\_s*s\_s*m\_s*a\_s*t\_s*a\_s*l\_s*e\_s*s\|�K\_s*��\|��\_s*�l\|�\_s*�c\|C\_s*o\_s*p\_s*t\_s*i\_s*d\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|�o\_s*��\_s*�U\_s*\%(��\|��\_s*��\)\|��\_s*�m\|��\_s*��\|��\_s*�]\|��\_s*�g\|��\_s*��\|��\_s*��\_s*��\_s*�P\|�A\_s*[�z�n]\|��\_s*[�H��]\|�}\_s*��\|��\_s*�F\|�w\_s*�n\_s*�}\|��\_s*��\|�z\_s*[���i�m�q�x]\|��\_s*��\|�c\_s*[�_����]\|��\_s*�O\|�]\_s*�c\_s*[�ꕃ]\|��\_s*[�~�C��]\|��\_s*\%(�c\|��\_s*��\_s*��\|��\_s*�V\_s*�c\)\|��\_s*��\|��\_s*[�����G��]\|��\_s*��\_s*��\|��\_s*�m\_s*��\_s*��\_s*��\_s*��\_s*\.\|�G\_s*[����]\|t\_s*h\_s*e\_s* \_s*O\_s*b\_s*j\_s*e\_s*c\_s*t\_s* \_s*M\_s*a\_s*n\_s*a\_s*g\_s*e\_s*m\_s*e\_s*n\_s*t\_s* \_s*G\_s*r\_s*o\_s*u\_s*p\|��\_s*��\_s*�d\_s*�@\|�E\_s*��\|��\_s*�~\|�E\_s*\%(�B\|�[\_s*\%(�Y\|��\_s*��\)\|��\_s*�{\_s*��\_s*�X\)\|�o\_s*��\|�A\_s*\%(��\|�U\_s*�[\|�E\_s*\%([�`�g]\|�^\_s*�[\)\)\|��\_s*�{\_s*�\\_s*�t\_s*�g\_s*�E\_s*�F\_s*�A\|��\_s*\%(��\_s*[�N��]\|��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\|�_\_s*��\_s*�a\|��\_s*�\_s*��\|��\_s*��\_s*�_\_s*�f\_s*�j\_s*��\_s*��\|�`\_s*��\_s*��\|��\_s*�K\_s*��\|�n\_s*\%([�r�^]\|�q\_s*�d\|\.\_s*�j\_s*\.\|�r\_s*�X\|��\_s*��\_s*�O\|��\_s*��\_s*��\_s*\%(�k\_s*��\_s*��\_s*��\|�v\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\)\)\|��\_s*��\|��\_s*�Z\_s*�q\|��\_s*��\|�_\_s*�f\|O\_s*\%([�^�rsS]\|h\_s*i\_s*o\|k\_s*l\_s*a\_s*h\_s*o\_s*m\_s*a\|b\_s*j\_s*e\_s*c\_s*t\_s*-\_s*O\_s*r\_s*i\_s*e\_s*n\_s*t\_s*e\_s*d\|O\_s*\%(D\_s*L\|P\_s*L\)\|M\_s*R\_s*O\_s*N\|A\_s*�N\_s*��\_s*�[\_s*�i\_s*�[\|C\_s*R\_s*�\\_s*�t\_s*�g\|r\_s*e\_s*g\_s*o\_s*n\|''\_s*R\_s*e\_s*i\_s*l\_s*l\_s*y\_s* \_s*J\_s*a\_s*p\_s*a\_s*n\|��\_s*��\_s*�O\|p\_s*e\_s*n\_s*W\_s*i\_s*n\_s*d\_s*o\_s*w\|x\_s*y\_s*g\_s*e\_s*n\)\)', - \ 'p' : '\%([�B�C�@����{�����s�ܕ��ە����y���~�Օҕ�糕ѕ�粛��ؕ����������z����C�U�ߕ[�i������ᢔ��������p�o�����Ǖ�ƔŔ���•������z�u�s�v�t���j�H�g�d���ς������Ղҁ}�{�Ճ��ӄ�����k����D�������E�_�v�|�Łj�i�݁��a�y�p�P�����Ӄ΃sp]\|�\_s*\%(�\_s*�\|�\_s*�\|�\_s*�\|�\_s*�\|�\_s*�\)\|�b\_s*[�|�y�v�s�p]\|��\_s*[�ۂ؂Ղ҂�]\|�\_s*�\|��\_s*�l\_s*��\|�\_s*�\|�O\_s*[�I�D]\|�\_s*�\|��\_s*�R\|��\_s*�D\_s*��\|�\_s*�\|��\_s*�`\|��\_s*��\|�\_s*�\|��\_s*�q\|�b\_s*\%(��\|��\_s*�n\)\|C\_s*y\_s*c\_s*l\_s*a\_s*n\_s*t\_s*h\_s*a\_s*l\_s*e\_s*s\|S\_s*y\_s*n\_s*a\_s*n\_s*t\_s*h\_s*a\_s*e\|�r\_s*��\|B\_s*r\_s*o\_s*m\_s*e\_s*l\_s*i\_s*a\_s*l\_s*e\_s*s\|L\_s*e\_s*a\_s*d\|��\_s*[�Ž���]\|�V\_s*\%(��\_s*�[\_s*�h\|��\_s*�V\_s*�r\_s*��\)\|�T\_s*\%(�[\_s*��\|�C\_s*\%([�Y�N�P�R]\|��\_s*�V\_s*�r\_s*��\|��\_s*�E\_s*��\|�L\_s*�b\_s*�N\)\)\|+\_s*��\|�z\_s*\%(��\|�X\_s*�Q\_s*��\)\|�q\_s*��\_s*�|\_s*��\|��\_s*\%(�z\|��\_s*�o\)\|�t\_s*\%(��\_s*�W\_s*�A\_s*��\|��\_s*\%(�C\_s*�W\_s*��\_s*�O\|�[\_s*\%(�Y\|�W\_s*��\_s*�O\)\)\|�^\_s*��\_s*�C\_s*��\|�H\_s*\%([�[���m�g]\|�{\_s*�X\|�r\_s*�A\|�X\_s*�t\_s*�@\_s*�[\|�j\_s*�[\)\|�@\_s*\%(�C\|��\_s*�I\|�[\_s*\%([�W�}]\|�~\_s*��\_s*�O\)\|��\_s*\%(�g\_s*��\|�^\_s*�Y\_s*[���}]\)\|��\_s*[�c�X]\|��\_s*�m\_s*�v\_s*�V\_s*�X\)\|�B\_s*\%([����]\|�W\_s*\%(�b\_s*�N\_s*�X\|�J\_s*��\)\|�[\_s*�r\_s*�[\|�b\_s*�V\_s*��\_s*�O\|��\_s*��\_s*��\|��\_s*�f\_s*��\_s*�t\_s*�B\_s*�A\|��\_s*\%([�X�[�A�p]\|�b\_s*[�v�p]\|�s\_s*\%(��\|�[\_s*�k\)\)\)\|�F\_s*\%(�[\_s*\%([�x�Y]\|�W\_s*��\_s*�O\)\|�C\_s*�Y\|��\_s*��\_s*��\|�j\_s*\%(��\|�b\_s*�N\_s*�X\|�L\_s*�A\|�[\_s*��\)\|�m\_s*\%(�L\_s*�V\|�[\_s*��\)\)\)\|�q\_s*��\|��\_s*��\|�^\_s*��\_s*�p\_s*�N\_s*��\|��\_s*��\|��\_s*��\_s*��\|�i\_s*�s\|�Z\_s*��\|��\_s*��\|��\_s*�Z\|��\_s*�`\|��\_s*��\|�^\_s*��\|�o\_s*\%(�g\|�k\_s*�@\|�b\_s*\%(�^\_s*�`\_s*�s\|�X\_s*�W\|��\_s*�f\_s*��\)\|��\_s*��\_s*��\_s*�r\_s*��\_s*��\_s*��\_s*��\_s*��\|�r\_s*�D\|�D\_s*�r\_s*�D\|��\_s*��\_s*�h\_s*��\_s*��\|��\_s*��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*\%(��\|��\_s*��\_s*��\)\)\|�i\_s*��\|�J\_s*��\_s*�E\_s*��\|��\_s*��\_s*��\|�d\_s*��\_s*��\|��\_s*��\_s*�^\|�o\_s*�e\_s*��\_s*��\|�\\_s*��\_s*�t\_s*��\|�_\_s*��\|��\_s*��\_s*[���a]\|��\_s*��\|��\_s*��\|P\_s*\%([umdCaor]\|K\_s*��\|D\_s*F\_s*�t\_s*�@\_s*�C\_s*��\|�R\_s*�[\_s*�h\|�^\_s*�C\_s*��\|\.\_s*S\_s*\.\|S\_s*\%(\.\|Y\_s*�E\_s*S\)\|I\_s*C\_s*�}\_s*�C\_s*�R\_s*��\|l\_s*\%(a\_s*t\_s*i\_s*n\_s*u\_s*m\|u\_s*t\_s*o\_s*n\_s*i\_s*u\_s*m\)\|E\_s*T\_s*�{\_s*�g\_s*��\|O\_s*S\_s*\%(�V\_s*�X\_s*�e\_s*��\|I\_s*X\|T\_s*��\_s*�\\_s*�b\_s*�h\)\|e\_s*\%(r\_s*l\|n\_s*\%(t\_s*\%(o\_s*x\_s*y\_s*l\_s*i\_s*d\_s*a\_s*e\|i\_s*u\_s*m\)\|n\_s*s\_s*y\_s*l\_s*v\_s*a\_s*n\_s*i\_s*a\)\)\|h\_s*o\_s*s\_s*p\_s*h\_s*o\_s*r\_s*u\_s*s\)\)', - \ 'q' : '\%([�z���ɟK�M�z�������՟J��㖍򍥛������I������H���E�d������z�b�o������x�ܗ��A���ϕ��D�C�B��ӊǏ��~�����������B䱌s���Z���Y�㙬��ᯞ���Ӊ��O�M�֌N�Ϗ��v����L�������K�@����{���^���Z�򏾓��^���A�����������鶊r��ňʈ��U�Ñq���𞀋������C�~���X�V�T�R�U�W�S�܉_�w�o�^�������鿌~�G�F䇚����`�p���̏L���Y�������۞����I���Ȋf�s��ގԚ��P�M�����E���u���{�[�O���֞��o�Ӎ����@�󞔐����ȓS�c�������������S�H�q�v�E�|―�Ĝ��v�ꋀ��Ῑ܌J�ɍC����g����틂�{�m�������{���X�؍H�������ᜁ���v�㜜���ҙ��g���电���M�͋��ˋ���������e�g�f�h��P�H�N��q]\|�\_s*�\|�b\_s*�N\|��\_s*��\|��\_s*��\|�\_s*�\|�~\_s*��\|�\_s*��\|��\_s*�S\|�S\_s*[�Z��]\|��\_s*��\_s*�x\|��\_s*��\|��\_s*�h\|9\_s*��\|��\_s*��\|�^\_s*�{\|��\_s*��\|�Q\_s*�O\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|�V\_s*�l\_s*��\|��\_s*�|\|�T\_s*��\_s*��\|L\_s*a\_s*u\_s*r\_s*\%(a\_s*c\_s*e\_s*a\_s*e\|o\_s*i\_s*d\_s*e\_s*a\_s*e\)\|�T\_s*��\|��\_s*��\|c\_s*r\_s*e\_s*s\_s*c\|�C\_s*��\|��\_s*[�{��]\|��\_s*��\_s*��\|K\_s*r\|H\_s*e\_s*l\_s*l\_s*e\_s*b\_s*o\_s*r\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|��\_s*\%([�ƕ����E������]\|�o\_s*��\)\|��\_s*��\|��\_s*�C\_s*�a\|J\_s*u\_s*g\_s*l\_s*a\_s*n\_s*d\_s*a\_s*l\_s*e\_s*s\|��\_s*��\|�Z\_s*��\|�n\_s*�_\|�s\_s*�q\|�B\_s*��\|�R\_s*��\_s*�q\|C\_s*\%(r\|h\_s*r\_s*o\_s*m\_s*i\_s*u\_s*m\)\|R\_s*h\_s*a\_s*m\_s*n\_s*a\_s*l\_s*e\_s*s\|�p\_s*��\_s*�`\|��\_s*�s\_s*�N\_s*��\|�`\_s*��\_s*��\_s*��\_s*��\_s*�}\|Q\_s*\%(I\_s*C\|R\_s*�R\_s*�[\_s*�h\|C\_s*�T\_s*�[\_s*�N\_s*��\|U\_s*O\_s*�J\_s*�[\_s*�h\)\|�w\_s*�x\|�R\_s*\%(�[\_s*��\_s*��\|��\_s*�e\_s*�B\_s*�t\_s*�@\_s*�C\_s*�A\)\|��\_s*��\_s*��\|�J\_s*\%(�U\_s*��\|�^\_s*�[\_s*��\|�X\_s*�o\|�[\_s*�k\_s*�[\_s*��\|�i\_s*�[\_s*�g\|�_\_s*�t\_s*�B\|��\_s*�e\|�h\_s*��\_s*�[\_s*[����]\|��\_s*\%(�`\_s*[�G�F]\|�e\_s*\%(�B\_s*�G\|�b\_s*�g\)\)\|��\_s*�^\_s*[���X��]\)\|��\_s*��\|�L\_s*\%(�g\|�u\_s*��\|�z\_s*�[\_s*�e\|�n\_s*�[\_s*�_\|��\_s*\%(�g\|�e\_s*�B\_s*��\_s*�O\)\|�[\_s*��\|�m\_s*��\|�b\_s*�V\_s*��\|��\_s*\%(�[\|�G\_s*��\)\)\)', - \ 'r' : '\%([ۛŘӛĚ̉h�_���R�{��]�Ә[�\���U�^�c���R�P�˞u�l�M�C�����L�属�譚N���d�יC�����R������O�c�YᑘL�S�Q�XᔘW�O�U�ĘT�R�N�b�@�F�࢔����G��m�e�d�i�b�I�E炍��䃟L�B��ڟ����׊a���e�U�x�v��Y���Z�Y���������t����X�F�䫗����ᖗ����w�������灟K�M����l�I瀗��q��ずw���Y�����Q�����r���Q���ݗ����@���B���������A��٘H��ḟ�����pᐗ�㾗ۗݗ��Z���~���K�����ಝ��_����×����ɌI���ʙ��Z�C���X����Y�V���g��×ڛ��Pᎊ}�֗���������������������ᅗ��P���X�a�������МH�W�˗����Ԝ���d�h�g�ҙz�ؗϙ�חїӗ՗��W���O���C�����͗����`����鲛�饗��؞���A���x��@�_���]���q�y���p�����֝����H�×�㇗ߗ��Ɨȗ��열�����ɋ��������ʗ̚i���ś�����胗��������������ؗ����ܘ���A��鋗������i����\�ߗ�仂�טJ���ə���V�������O�����g�T�p�R�E�Y㑟S�B�՛ۛn��A��ࣗ��a����茗����������E煚h����඗��p�����y�����q�Q����㡟I���S���ۗ�ᚘ����痋�����엇���t��f�f��逗ǂ炒�E���S�q���G�B���J�H�[�w�x�I�T�`�r�������K�R�|�F�V���O�W�^�X�U�\�Z���D�A���I�Y�z���M�{�P�s�t�}���N�L�v�p�y���u���@�C���]���E�_�����~���D�֍��㗅���X���������Q�σ���r]\|�\_s*[�����]\|�b\_s*[����������]\|��\_s*[������]\|��\_s*��\|��\_s*[�L��]\|�h\_s*[�E�ߎ�]\|6\_s*[����]\|��\_s*��\_s*��\|�E\_s*�G\|��\_s*��\|A\_s*\%(c\_s*t\_s*a\_s*e\_s*a\|p\_s*o\_s*p\_s*e\_s*t\_s*a\_s*l\_s*a\_s*e\)\|C\_s*\%(a\_s*l\_s*y\_s*c\_s*a\_s*n\_s*t\_s*h\_s*a\_s*c\_s*e\_s*a\_s*e\|h\_s*o\_s*r\_s*i\_s*p\_s*e\_s*t\_s*a\_s*l\_s*a\_s*e\)\|��\_s*[����]\|��\_s*\%(��\|�|\_s*��\)\|V\_s*e\_s*r\_s*t\_s*i\_s*c\_s*i\_s*l\_s*l\_s*a\_s*t\_s*a\_s*e\|O\_s*r\_s*c\_s*h\_s*i\_s*d\_s*a\_s*l\_s*e\_s*s\|M\_s*i\_s*c\_s*r\_s*o\_s*s\_s*p\_s*e\_s*r\_s*m\_s*a\_s*e\|L\_s*\%([ruia]\|e\_s*i\_s*t\_s*n\_s*e\_s*r\_s*i\_s*a\_s*l\_s*e\_s*s\|A\_s*N\_s*�P\_s*�[\_s*�u\_s*��\)\|�C\_s*��\|G\_s*\%(e\_s*n\_s*t\_s*i\_s*a\_s*n\_s*a\_s*l\_s*e\_s*s\|y\_s*\%(n\_s*a\_s*n\_s*d\_s*r\_s*a\_s*e\|m\_s*n\_s*o\_s*s\_s*p\_s*e\_s*r\_s*m\_s*a\_s*e\)\)\|��\_s*�W\_s*�f\_s*�[\_s*�^\_s*�x\_s*�[\_s*�X\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*�s\_s*��\_s*�w\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|�d\_s*�C\_s*��\_s*�M\_s*��\_s*��\_s*��\|��\_s*�k\_s*��\_s*\%(�w\_s*�d\_s*�C\_s*��\_s*�M\_s*��\_s*��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*�Z\_s*�b\_s*�g\_s*�v\_s*�Z\_s*�@\|��\_s*��\|�K\_s*��\|�g\_s*��\|�v\_s*��\|��\_s*��\|��\_s*�A\|��\_s*[���M]\|��\_s*��\|��\_s*��\_s*��\|�Q\_s*\%(�l\_s*��\_s*��\|��\_s*�^\)\|�q\_s*\%(�h\_s*�m\_s*�`\|��\_s*�c\|�r\_s*�|\_s*�Q\_s*�R\_s*�Q\_s*�b\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\)\|�@\_s*�\\_s*��\_s*��\_s*�P\_s*��\|��\_s*�A\_s*�I\|�F\_s*��\|R\_s*\%([bnfeauh]\|i\_s*c\_s*h\_s*a\_s*r\_s*d\_s* \_s*M\_s*\.\_s* \_s*S\_s*t\_s*a\_s*l\_s*l\_s*m\_s*a\_s*n\|C\_s*S\|S\_s*S\_s*��\_s*�[\_s*�_\|I\_s*S\_s*C\|A\_s*M\|O\_s*M\|E\_s*\%(M\_s*��\_s*��\|T\_s*U\_s*R\_s*N\_s*�L\_s*�[\|A\_s*D\_s*M\_s*E\)\)\|��\_s*�K\_s*�\\_s*��\|�A\_s*�[\_s*��\)', - \ 's' : '\%([��������}�[��T���y���}����Q��^�����������ǚ��i�����h��掞��y�{�G�O�ʗ��c���������������������ԛ��z��y��u�������߈��S�^���䛣�᜹�K�U���|���\�����}���a������x�����‘���ƜQ�sढ़w��柔�锚t���䇛q���~�H�x�����y�ܑ�䵑q�ȑ����B���J�v�t�������Ƒ��N����ⵑ��r�������|��s�w���p�n�m���y����絒F�\�n�u�L�M�������������N�d�Ƒ[��ꋑj�f�b�`�a���^��𕛑l�X�����􉈑c�Y���iઈ�g�לh�e�e�s�S����z������N�Z��驋��L�L���Q�k�ş��G���i����ↁ��ސِېڐߞ���@���������C��G�����S���ПƝ�[�T���אɐ͊֐Ȑǝ��A������I⣛p蔞��t����d�C�N���ӟ׈��ߛݙ���ܘ��x������㙘��A�����_�b����a���J������ஓϛ��Ƙj�b�H��ⳙA�G�S���L⒑W�s�r葁�������D�J���A�L��񙒐�枙@�ې�M���H����l�F�K���D�G�@�B��h���ǑN�������d�D���������牙��|�œҝ�ᝩ��⫟Ŗ�����������v�R呝y�H���������Ր������U���}�������[���������҂���ߝ�p�S爊��c���a���o�p���I�D�c�����E�R��䊔��T�����ωs��ꈝ��ؐ�������C�S��h�ᓩ�����]�T�\�����~�����u�y�����������齗V�������Œ��������s����v�ǐ��E���p�z����~�d���Ǘ�俑��Y�p�n���z�y��羝�裐���Ð������␕�΁�ʁ܁́�������ˁ��~�Ɂ���ځށ}��ȁ����́��݁��聹�后�����v袝x���������ž�谒N�ː��X���a�V���䐆����H�����������������ґ����]�Z������ʗ��������������������L�z�`��D�ߝX���z�i���擧�����A�B������P������D���Y�����`���L�������Z��迓��x���Z�x����w��圑����ȓ������G���F�a�Ǝb��乗��M�E�Ε��s�C�F���Z���n�����D�㈵㦋s�����]��Ŗl�^⚑�����A潓��g���Ζ�儞������ɖΏd����臐w�p����d�����[��g�����謎�姎��^���G�������N���H���˒��Ύ��܊m��������������\�ސːK�Ž��������K���o���q�҉����t�������ϔ����͚��͎��b�A�j���P�֎ٌ����ࡐ̝�咙��ݐ���┐Ԏ��^�Ύގڎ؎����Y�ώΎɎԎߎЈޝ��ȕi�S�G���CဋÎ����f�t偛W���V�z��������题����瑲���E�������f��������i�g�l�k�{�������蜕��婏o�F�����T��碏V�h�q���h�k�����F�J娏Q�K�����榊��S����酝��n�����������S�X�K�U��ڏM�G�j���a�E�N�����O�D�P�C�A�L�R�T�I���B�@���M�����᭚�����忏w�{�v�x�s�⡏t�u�r�f�����Z���u���Vꐚp�y���曐P�]�A���Ϝ����U�j�J��������f�Y�`�D����s橝ΐa�O��凓��c�j�c�ѐU�a�h�N�f�d��C�k���X���ĐL���T�Q�W�g�i�[�R�M�e�b�I�_�S���΋n�Z�����o䜏���_�י|���䓏��w�����b��򏎏����������ҟ����m䀛���u�L���Џ�������縐��מ�⪙ד��M�����v���R�����ߜ��c����B�_�џn���Տʈ䐯�����B辑����[����頏��[��␏ݚ����K♏����яҁ������u���i�]��疏ցj�i�Ӑ��Ԛ������Ϗ��U���J���n���ސ��Ŝ܏��ߏ�������ُ����Տ��G����������ଞ������ďޏ������������͏Ǐ����ɏ������������Џ��ۏ�暐��Ώ��̏ďƏ����͏ڏ����؏ɏ��ȏ������T�l������R�e�g�����p�@�C�ܑ��F�������D�I����冐B�������A�H�E❎o�o�w���v�����L���U�����������������n�юr���Ŏᎊ�t�r�@�����{���펦���Ϛ`���������i�Аy�э��i�@�����E����J�X拎}�泟���n���y�o�N�Z�y�z���ٛᝅ�f�׎��j�{��~����|���{�o���ߘ��I�X�B�]�K�������V�g���u�������p�`����i���k���q�l��藘ʛ�Ɠ��j��⏎s���_ꏎ���˔`���Œs��y�@���؎���䢊�o�u�e����ۚ~��礛��J�L��f�V�W�l�����Ȑ���������䰐囋�T��ᰗ����l�I�J���M����h���E�U�嶎��z�\�G�Ԟ��u���V���\���V���f�֟��X�M�ˍ��Ǐ�x���š�����皔��m��匈��^��꛽�O��@���՚N�����\�󎘊j���ې����ŒB睓N�@�d�q�b���P�m���b�q���嗝�W�����Ɣ��f���F��ⲝH�H�B�r���{�吷�W�vᵔu�t�ĉh�|�招��E�䋫�🛋t����剎������櫜��f�|��sट��E�a�`��㓝����������̜c���H�K�c�ߙӎ[�ǎW�Xㄐ��V�����������r�\�]�Z�P�R�Ӂ���3�Q�^O�R�U�S�Y�_�A�T�C�D�搔�@�F���D�N���Z����\�؛�������ԟ����˜�����G�Ɲ��r�ӎÎE�q�������淍K�ȍ���͙Pꎍ��`�B�ڛv�ɍ��V�ҍۍЍю��΍؍̍Ӎȍ֐čՍÍˍ��ҍٍ΍ō鑨�r��Şo焍��e�⩞��y���|�s�����k����w�����N���������������ʎh�S䳍�}�l�э��o���s�⍳�r���ԍ��đ����獸��������R���A��������m嬛O���������ÝL����������������������_�~��n�K�ዎ������������^�d�w�����@�����Y�����Y���ご�򄋄Z�Y�����������������Á������W�n�ŽO���y�ʁ��������`��f�e�����W�_�T�������Z�T�V�\�X�����R�Еbs]\|�\_s*[�����]\|�b\_s*[�\�Z�X�V�T]\|��\_s*[����������]\|�\_s*��\|�\\_s*\%(�H\|�I\_s*��\)\|�~\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*�g\|��\_s*��\|�v\_s*[�v�X]\|��\_s*�n\|�\_s*��\|��\_s*�c\|��\_s*��\|�B\_s*[�B�X]\|��\_s*�C\|��\_s*��\|U\_s*m\_s*b\_s*e\_s*l\_s*l\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\|��\_s*��\|�}\_s*��\|c\_s*e\_s*n\_s*t\_s*i\|��\_s*[�ĘU]\|�C\_s*��\|�\_s*��\|�}\_s*��\|�T\_s*��\|�G\_s*�Y\|�f\_s*��\|�V\_s*[�c��]\|V\_s*i\_s*o\_s*l\_s*a\_s*l\_s*e\_s*s\|N\_s*y\_s*m\_s*p\_s*h\_s*a\_s*e\_s*\%(a\_s*c\_s*e\_s*a\_s*e\|o\_s*i\_s*d\_s*e\_s*a\_s*e\)\|��\_s*�\|�\_s*��\|�b\_s*\%(�^\|��\_s*��\)\|�V\_s*��\|�]\_s*��\|��\_s*��\|�s\_s*[�m�E]\|L\_s*a\_s*\%(b\_s*i\_s*a\_s*t\_s*a\_s*e\|m\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\)\|��\_s*��\_s*��\|��\_s*��\|�~\_s*��\|��\_s*�t\_s*��\|��\_s*��\|��\_s*��\|��\_s*�_\|��\_s*�Y\|��\_s*��\|��\_s*��\|I\_s*\%(s\_s*o\_s*p\_s*y\_s*r\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|l\_s*l\_s*i\_s*c\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\)\|W\_s*i\_s*n\_s*t\_s*e\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|�`\_s*��\|��\_s*[�J��]\|�]\_s*[�X�]]\|��\_s*\%(�X\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%([�֌��ڎu]\|��\_s*��\)\|7\_s*��\|�V\_s*��\|4\_s*��\|�S\_s*[����]\|�R\_s*�{\|�h\_s*�t\|��\_s*�u\|��\_s*��\|�A\_s*[�o��]\|��\_s*[�N�Y]\|�\_s*[���]\|�r\_s*[ꏎ�]\|��\_s*��\|�c\_s*�e\|��\_s*��\|��\_s*\%(�_\|�C\_s*��\)\|Z\_s*i\_s*n\_s*g\_s*i\_s*b\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|��\_s*\%(��\_s*�{\_s*\%(�I\|��\_s*�I\)\|��\_s*��\_s*�a\_s*��\_s*�W\)\|��\_s*[�Η�]\|�\_s*�\|�\_s*��\|��\_s*��\|�e\_s*��\_s*��\|C\_s*\%([se]\|y\_s*c\_s*a\_s*d\_s*\%(i\_s*d\_s*a\_s*e\|o\_s*\%(p\_s*s\_s*i\_s*d\_s*a\|f\_s*i\_s*l\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\)\)\|h\_s*l\_s*o\_s*r\_s*a\_s*n\_s*t\_s*h\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*��\|D\_s*�X\|�^\_s*��\_s*��\|a\_s*\%(s\_s*s\_s*y\_s*t\_s*h\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|c\_s*t\_s*a\_s*l\_s*e\_s*s\)\)\|��\_s*�K\|�|\_s*[�“���]\|��\_s*�p\_s*��\|�G\_s*��\|��\_s*��\|��\_s*��\_s*\%(�X\_s*[�N��]\|��\_s*[�N��]\)\|�h\_s*�l\|�S\_s*��\_s*�g\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*�e\|��\_s*��\|��\_s*\%(�@\|��\_s*��\_s*��\)\|��\_s*��\|�G\_s*��\|�\_s*�q\|P\_s*\%(a\_s*r\_s*i\_s*e\_s*t\_s*a\_s*l\_s*e\_s*s\|t\_s*e\_s*r\_s*i\_s*d\_s*o\_s*s\_s*p\_s*e\_s*r\_s*m\_s*\%(a\_s*l\_s*e\_s*s\|i\_s*d\_s*a\_s*e\)\|r\_s*i\_s*m\_s*u\_s*l\_s*a\_s*l\_s*e\_s*s\)\|A\_s*\%(p\_s*i\_s*a\_s*l\_s*e\_s*s\|r\_s*a\_s*l\_s*e\_s*s\|n\_s*t\_s*i\_s*m\_s*o\_s*n\_s*y\)\|��\_s*[�T��]\|B\_s*\%(r\|�V\_s*�F\_s*��\)\|�g\_s*��\_s*�q\|��\_s*��\|�u\_s*��\|�A\_s*��\_s*�`\_s*��\_s*��\|�\\_s*��\_s*��\|M\_s*\%(e\_s*r\_s*c\_s*u\_s*r\_s*y\|u\_s*s\_s*a\_s*l\_s*e\_s*s\|a\_s*r\_s*q\_s*u\_s*i\_s*s\_s* \_s*d\_s*e\_s* \_s*S\_s*a\_s*d\_s*e\)\|D\_s*o\_s*n\_s*a\_s*t\_s*i\_s*o\_s*n\_s* \_s*A\_s*l\_s*p\_s*h\_s*o\_s*n\_s*s\_s*e\_s* \_s*F\_s*r\_s*a\_s*n\_s*c\_s*o\_s*i\_s*s\_s* \_s*d\_s*e\_s* \_s*S\_s*a\_s*d\_s*e\|��\_s*\%(�V\|�s\_s*\%(��\_s*��\|��\_s*��\_s*��\)\)\|T\_s*\%(e\_s*t\_s*r\_s*a\_s*c\_s*e\_s*n\_s*t\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|i\_s*n\|h\_s*e\_s* \_s*S\_s*i\_s*m\_s*p\_s*l\_s*e\_s* \_s*A\_s*P\_s*I\_s* \_s*f\_s*o\_s*r\_s* \_s*e\_s*v\_s*e\_s*n\_s*t\_s*-\_s*b\_s*a\_s*s\_s*e\_s*d\_s* \_s*X\_s*M\_s*L\_s* \_s*p\_s*a\_s*r\_s*s\_s*i\_s*n\_s*g\)\|�]\_s*�f\|�P\_s*�C\_s*�f\|�v\_s*��\_s*��\_s*��\_s*��\_s*��\_s*�w\_s*��\|�l\_s*�b\_s*�g\_s*�T\_s*�[\_s*�r\_s*�X\|�U\_s*\%(�b\_s*�N\|�N\_s*�Z\_s*��\|�r\_s*�[\_s*�l\|�E\_s*�o\_s*�[\|��\_s*�[\_s*�N\_s*��\_s*�E\_s*�g\|��\_s*�U\|��\_s*�c\|�C\_s*\%([����]\|��\_s*�[\|�f\_s*��\)\|�[\_s*\%([����]\|��\_s*��\)\)\|��\_s*��\|�[\_s*�~\|�i\_s*�g\_s*��\_s*�E\_s*��\|�]\_s*\%(��\|��\_s*�f\|�[\_s*\%(��\|��\_s*��\_s*�Q\_s*��\)\|�t\_s*�B\_s*�[\)\|�W\_s*\%(��\|�[\_s*\%([�O�N]\|��\_s*��\_s*[�X�Y]\)\|�O\_s*��\_s*��\_s*�g\|��\_s*\%(��\_s*��\|�O\_s*�V\_s*��\_s*�s\_s*�[\_s*��\|�e\_s*�[\_s*�[\)\)\|�r\_s*\%([�Ȏ�]\|�T\_s*�C\_s*�Y\|�r\_s*�T\_s*�C\_s*�Y\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|�t\_s*�m\|��\_s*\%(��\|��\_s*��\_s*��\_s*�`\_s*��\_s*��\_s*��\_s*��\)\|�h\_s*�b\_s*�o\_s*(\_s*S\_s*t\_s*r\_s*u\_s*c\_s*t\_s*u\_s*r\_s*e\_s* \_s*a\_s*n\_s*d\_s* \_s*I\_s*n\_s*t\_s*e\_s*r\_s*p\_s*r\_s*e\_s*t\_s*a\_s*t\_s*i\_s*o\_s*n\_s* \_s*o\_s*f\_s* \_s*C\_s*o\_s*m\_s*p\_s*u\_s*t\_s*e\_s*r\_s* \_s*P\_s*r\_s*o\_s*g\_s*r\_s*a\_s*m\_s*s\_s*)\|�|\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|�n\_s*�m\_s*�x\_s* \_s*�m\_s*�d\_s*�v\_s*�r\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*�u\)\|�G\_s*�X\|S\_s*\%([nrgmce��]\|G\_s*M\_s*L\|�T\_s*�C\_s*�Y\|S\_s*�T\_s*�C\_s*�Y\|F\_s*�}\_s*�K\_s*�W\_s*��\|Q\_s*U\_s*A\_s*R\_s*E\_s* \_s*E\_s*N\_s*I\_s*X\|K\_s*\%(K\|Y\_s* \_s*P\_s*e\_s*r\_s*f\_s*e\_s*c\_s*T\_s*V\_s*!\)\|a\_s*\%(r\_s*\%(r\_s*a\_s*c\_s*e\_s*n\_s*i\_s*a\_s*l\_s*e\_s*s\|g\_s*e\_s*n\_s*t\_s*o\_s*d\_s*o\_s*x\_s*a\_s*c\_s*e\_s*a\_s*e\)\|m\_s*a\_s*r\_s*i\_s*u\_s*m\)\|M\_s*\%(�v\_s*��\_s*�C\|�N\_s*��\_s*�u\)\|P\_s*\%(��\_s*�R\_s*�[\_s*�h\|A\_s*C\_s*E\_s*�L\_s*�[\)\|p\_s*\%(l\_s*u\_s*s\|e\_s*\%(r\_s*m\_s*a\_s*t\_s*o\_s*p\_s*h\_s*y\_s*t\_s*a\|c\_s*a\_s*l\_s*i\_s*t\_s*y\_s* \_s*S\_s*t\_s*o\_s*r\_s*e\_s* \_s*R\_s*e\_s*t\_s*a\_s*i\_s*l\_s*e\_s*r\_s* \_s*o\_s*f\_s* \_s*P\_s*r\_s*i\_s*v\_s*a\_s*t\_s*e\_s* \_s*L\_s*a\_s*b\_s*e\_s*l\_s* \_s*A\_s*p\_s*p\_s*a\_s*r\_s*e\_s*l\)\|a\_s*\%(t\_s*h\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\|r\_s*c\)\)\|H\_s*I\_s*F\_s*T\_s*�L\_s*�[\|C\_s*S\_s*I\|T\_s*\%(k\|A\_s*R\)\|h\_s*u\_s*g\_s*a\_s*r\_s*t\_s* \_s*A\_s*s\_s*s\_s*o\_s*c\_s*i\_s*a\_s*t\_s*e\_s*s\_s* \_s*S\_s*y\_s*s\_s*t\_s*e\_s*m\_s* \_s*I\_s*n\_s*t\_s*e\_s*r\_s*f\_s*a\_s*c\_s*e\|A\_s*\%(P\|S\_s*I\)\|i\_s*\%(m\_s*p\_s*l\_s*e\_s* \_s*K\_s*a\_s*n\_s*a\_s* \_s*t\_s*o\_s* \_s*K\_s*a\_s*n\_s*j\_s*i\_s* \_s*c\_s*o\_s*n\_s*v\_s*e\_s*r\_s*s\_s*i\_s*o\_s*n\_s* \_s*p\_s*r\_s*o\_s*g\_s*r\_s*a\_s*m\|l\_s*i\_s*c\_s*o\_s*n\)\|t\_s*r\_s*o\_s*n\_s*t\_s*i\_s*u\_s*m\|o\_s*\%(u\_s*t\_s*h\_s* \_s*\%(D\_s*a\_s*k\_s*o\_s*t\_s*a\|C\_s*a\_s*r\_s*o\_s*l\_s*i\_s*n\_s*a\)\|l\_s*a\_s*r\_s*i\_s*s\|f\_s*t\_s*w\_s*a\_s*r\_s*e\_s* \_s*R\_s*e\_s*s\_s*e\_s*a\_s*r\_s*c\_s*h\_s* \_s*A\_s*s\_s*s\_s*o\_s*c\_s*i\_s*a\_s*t\_s*e\_s*,\_s*I\_s*n\_s*c\_s*\.\)\|u\_s*\%(n\|l\_s*f\_s*u\_s*r\)\)\|��\_s*��\)', - \ 't' : '\%([Ĝ������R��牉ș��h���Ќ���☝��ω����i���מR���h�����|�������������������c���H����֓�騗���䄋�㜐C䃕����ۏQ榔y�����F�b����r�\����c�����͙��ʓՓך��c�����J������ٓؓڏx�J���Ś�ɍΖ����r���q�N���P�ь{�ԍǝ��ؗ�沖L௜{�ꂜՓ��“��Γ������W�ٟX�B�[�����ѓ�������w�䓄���������~��㫙ٚ���Ċ���U�j����㉱�}�b�馝��F�D����㛎���衞��Cẞ�T�Λ�⅞��M�D�����ğ�椈ꊛ�됀�z�c�����b�u�����ٓ��幓������������������铝�������~����鍓��������򓀓��������������˓t���O�O�̓��m��N�l�ےE�j�q�Ě��\�Z�g�\�莾���p�y�o�o�V�v���Ϗ\�p�{�n�l�n���Z���Ên�򖁞��i���^�y���r䷟��ː}�~�ēe��x�h�u�����r�l�W�P�Ȏ������W�����d�͖����o�R瘉���NནL���J�U��猓H�z���ћ�迟h�A�V�V�z�D�������C�U�A�����d�F�D�x�[���^�៓U�z���a�Z�W�L⽓Y�Q�I�N�G�P���O�c�S������L��ǒ��t�ɞq�ؚ��|��Y�B�h������������@���������稒����ఒ����A���e����ƜV��•��͕��皁�I���������T�P��ז��g�w�ΐى����W�h��іʏ`�t�I�␎���a�S���ڎB�ڐR����ȕ�p�A�n䆉��җ��I�~����焍ߑ��c�z�ߝ����旾���񕌋u���i�����d�͌��g����Q�ǒٚ�؍j�q��塔|�ȕ�ȓ`�B�\�����Չ���㔖�ꉌۑ����ԔԒ̒��v����׏I�Đ��ȒŒǛ��錼�ə��ݙ������������֒ߘ��r�s�s�n���U�T�ӑn�쑢���L���U�����Ό���C���U�֋ސT�Ĝ������ɏՔ��ːs�x���A���t�����y�Õ��Z㋓���ᶌp�k���l�ϐڒʍ��A����h�ՍJ����������Y�_���������Z�o�T���S���N���Ē������������N���Z��������m�֖����’������ޒ}�z���k���e玐��ŗ͓�ߝQ��E�������浖מ`�k�I⌒��O���Ւ����������P蠒����e���Ò�����隓C��U�ǒ����ݟ������l����L�y�’��kꓜ����j���L�K�ӝ���U�o�������{�⒳���\�_���񒝓����[�������������d���������������}���ޒ�����������渒������������x�a�Q�C�N�����I�Ԓ��J�n�����h���f���R�h�t���������n�p�o�m�~�n���@�������������ؒ��������r���p�U�T�u�Ռ��l���h�⚐�tꃒy�ƒw���o�n��v���qᗒv�������k�s��m�x����J�}���֓}�Ԑu���g�q�K���f�e�މ˞���M�o���R�ВLᷖ�非ٌ✔�����y�g栟����˘����l�|�]��漒K�^�ȏ̎]�D���M骓l�D����e�Ȓ@�i�h�g��Ⰽk�X�Y�S��ݛ̝E�Y�U�ԕۏ��X�I���H��蒎a����F�C�{�����}����C�J���F�מ��l��S�s韞����퓃��������ࣕY�ۈɐ���������Ғ����k�B���z�n�Ҋm�����������t�ԚK���p���ЋB�����ŗY����k���˜[�]����썰�͗����K�’e���ʖd休��s�b��饕����|�c�G�鎿�B�ٍ��k���e�d��뛹��k殔C�ĉF���b�W�V�O�������x�h�^���В|⹑��������t�M�闲�F�����������֜Ӝ`�d�H�[�t���؜��T�j�ݝ^���W�h�]������ßp�~���K�����ϓ̝����W�������`�^W�UႚV�J�Rἔ�C�V�Q�a�_�\杒O�S�X�W�Y�b�Z�d�ÒT�P�A�p�]�����鮓F���ѝF�U���V�f�{�������I����痑��~�x�����擑���H�\讖w�����ʝ���[���O���l���ߑړ����ܒ��Б⛔�E�ܑՑ͑����ۑґؑ��ݑ���ّё̑בޑ�΋��H���f��茘ǒ����������֚ꑫ�����—���]�l���o���N�O�ϗ��┭�蛀�S�����u�����N���ЍٚB�_�������P�c�B睘��S�����W���`�V���~�^�Γy���s�f������E������\��؃X�W�����ƃU���c�N�]�����������g�`�E�c���[�^�S�������������������ф����������e����������t]\|�\_s*[�����]\|�b\_s*[�g�e�c�`�^]\|��\_s*[�ƂÂ���]\|�\_s*��\|��\_s*�n\_s*��\|��\_s*[���]\|�\_s*�\|��\_s*�l\|��\_s*��\|��\_s*�V\|��\_s*��\|�i\_s*[���v]\|��\_s*�P\|�h\_s*��\|��\_s*��\|�D\_s*��\_s*��\|��\_s*[�Ŗ�]\|��\_s*[�q��]\|�W\_s*��\|��\_s*��\_s*�E\_s*��\|��\_s*��\|H\_s*y\_s*d\_s*r\_s*o\_s*c\_s*h\_s*a\_s*r\_s*i\_s*t\_s*a\_s*l\_s*e\_s*s\|��\_s*��\|�\_s*�x\|�G\_s*[�ߓ��h]\|��\_s*[����]\|�F\_s*�N\_s*��\|�i\_s*[�v�q]\|A\_s*c\_s*o\_s*n\_s*i\_s*t\_s*u\_s*m\|��\_s*��\|��\_s*�j\|��\_s*�j\|F\_s*e\|I\_s*r\_s*o\_s*n\|��\_s*��\|��\_s*��\|�g\_s*��\|�Z\_s*��\|�Q\_s*�~\_s*�S\|��\_s*\%(��\|��\_s*�q\)\|�S\_s*[���Z]\|��\_s*\%(��\|��\_s*�a\)\|�X\_s*��\|��\_s*�X\|�\_s*�J\|��\_s*�~\|�~\_s*�J\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[����]\|B\_s*a\_s*l\_s*a\_s*n\_s*o\_s*p\_s*h\_s*o\_s*r\_s*a\_s*l\_s*e\_s*s\|1\_s*\%(��\|0\_s*��\)\|�P\_s*\%(��\|�O\_s*��\)\|��\_s*��\|��\_s*�l\_s*��\|E\_s*\%(u\_s*p\_s*h\_s*o\_s*r\_s*b\_s*i\_s*a\_s*l\_s*e\_s*s\|r\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\)\|��\_s*\%(�v\|��\_s*�F\)\|�g\_s*��\|��\_s*��\|�`\_s*��\|��\_s*�w\|��\_s*\%(�V\_s*��\|��\_s*�F\)\|��\_s*\%([��]\|�[\_s*��\|��\_s*��\_s*�N\)\|��\_s*�v\|�r\_s*�q\|��\_s*�r\_s*�q\|��\_s*[�a��]\|��\_s*��\|��\_s*��\|�@\_s*��\_s*��\|�L\_s*�q\|�S\_s*��\|��\_s*��\|�]\_s*�h\|J\_s*i\_s*a\_s*n\_s*g\_s*s\_s*u\|�G\_s*��\|�u\_s*[�˔�]\|�k\_s*�J\|��\_s*�\|��\_s*�I\_s*�q\|��\_s*�a\|��\_s*�p\|��\_s*[����]\|�A\_s*��\|��\_s*��\_s*�\|��\_s*[���]\|��\_s*��\_s*�\\|��\_s*\%(�\\_s*��\|�A\_s*��\_s*[����]\)\|�t\_s*\%(��\|�{\_s*�V\)\|�h\_s*��\|�e\_s*��\|��\_s*��\|��\_s*[����]\|��\_s*�s\|��\_s*\%(�[\|��\_s*�q\)\|��\_s*�v\|��\_s*��\|�P\_s*��\|��\_s*��\|��\_s*\%(��\|�\_s*��\)\|�E\_s*��\|��\_s*��\|P\_s*\%(\.\_s*S\_s*\.\|o\_s*l\_s*y\_s*\%(g\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\|c\_s*a\_s*r\_s*p\_s*i\_s*c\_s*a\_s*e\)\|a\_s*n\_s*d\_s*a\_s*n\_s*a\_s*l\_s*e\_s*s\)\|�s\_s*��\|��\_s*��\|�E\_s*�w\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*�q\|�\\_s*[���V]\|�w\_s*��\|�\_s*��\|�i\_s*�K\|��\_s*��\_s*�p\|��\_s*�B\|M\_s*\%(e\_s*n\_s*i\_s*s\_s*p\_s*e\_s*r\_s*m\_s*a\_s*c\_s*e\_s*a\_s*e\|o\_s*n\_s*o\_s*\%(p\_s*e\_s*t\_s*a\_s*l\_s*a\_s*e\|c\_s*\%(h\_s*l\_s*a\_s*m\_s*y\_s*d\_s*e\_s*a\_s*e\|o\_s*t\_s*y\_s*l\_s*e\_s*d\_s*o\_s*n\_s*e\_s*a\_s*e\)\)\)\|��\_s*��\|��\_s*��\|��\_s*�q\|��\_s*��\|��\_s*��\|�f\_s*�B\_s*�X\|�R\_s*��\_s*��\|�\_s*�l\|�\\_s*\%(�[\_s*[�g���v]\|��\_s*�[\)\|�w\_s*�[\_s*�O\|�[\_s*[�C�����A]\|�Z\_s*\%(�I\|��\_s*�}\|��\_s*\%(��\|�j\_s*�A\_s*�X\)\|��\_s*�s\_s*\%(�[\|�X\_s*�g\)\)\|�V\_s*\%(��\|�b\_s*�N\|�X\_s*��\|�A\_s*�^\_s*�[\|�\\_s*�[\_s*��\_s*�X\|�I\_s*�h\_s*�A\|�[\_s*[�t�^]\)\|�T\_s*\%([�C��]\|�~\_s*��\_s*�O\|�E\_s*�U\_s*��\_s*�h\|��\_s*�u\_s*��\_s*�b\_s*�h\|�[\_s*\%([�h��]\|�e\_s*�B\|�X\_s*�g\_s*��\|�Y\_s*�f\_s*[�C�[�B]\|�}\_s*��\)\|�b\_s*�`\_s*��\_s*�[\|��\_s*\%(�N\|�_\_s*�[\|�L\_s*��\_s*�[\)\|��\_s*�h\_s*�}\_s*�C\_s*�h\)\|�|\_s*��\_s*�y\_s*�v\_s*�`\_s*�h\|�O\_s*\%(�a\_s*�y\|�A\_s*��\_s*��\)\|\\\_s*T\_s*e\_s*X\|��\_s*��\_s*��\|��\_s*��\_s*��\|�p\_s*��\|�s\_s*\%([����]\|��\_s*�E\|�j\_s*�W\_s*�O\|�]\_s*�[\_s*��\|�o\_s*�b\_s*�N\|�V\_s*��\_s*�c\|�u\_s*\%(�j\_s*��\_s*�[\_s*�X\|�Q\_s*�[\_s*��\|�h\_s*��\_s*�}\|�A\_s*�j\_s*��\)\|�b\_s*�o\_s*�^\_s*�h\_s*�o\|��\_s*��\|��\_s*��\_s*��\_s*�s\_s*��\_s*��\_s*��\|E\_s*�w\|��\_s*[�w��]\)\|T\_s*\%([bc��mliahe]\|r\_s*i\_s*m\_s*e\_s*n\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\|u\_s*n\_s*g\_s*s\_s*t\_s*e\_s*n\|�]\_s*�[\_s*��\|X\_s*T\_s*�t\_s*�@\_s*�C\_s*��\|�V\_s*��\_s*�c\|�o\_s*�b\_s*�N\|V\_s*\%(�j\_s*��\_s*�[\_s*�X\|�Q\_s*�[\_s*��\|�h\_s*��\_s*�}\|��\_s*�j\_s*�^\|�A\_s*�j\_s*��\|�V\_s*��\_s*�b\_s*�s\_s*��\_s*�O\)\|C\_s*P\|�R\_s*�[\_s*�h\|-\_s*C\_s*o\_s*d\_s*e\|O\_s*E\_s*I\_s*C\|A\_s*\%(C\|I\_s*N\_s*S\|B\_s*�L\_s*�[\)\|E\_s*L\)\|�d\_s*\%([���b]\|�C\_s*��\_s*�M\_s*��\_s*��\_s*��\)\)', - \ 'u' : '\%([��y����h�������f�[�l�e���񓴑a�؈����Ϗ��鎽�[�X���D�W�r䷙\��w���u���ќ��z���D鴑��ߚX�����i���^���R�忓��L�M�f��~���ӏ��r戉�楓]��揗w搉S�^�̗��É��򃑂��k�։\�u�����L�G�Q�m���P�O���H⣑��Q�m�����I��V�ߊ��a�������X�S�n�|�o�J���U�󎜚y�팻���ʉf�ژ��ⓐx���ԋ����ʏ��ϙ���܉��A�]りC���D�]��^�@����T�A��������m����S���Y�v�_�������Z�r����N�������T���T�ݗ��Ɠ��Z�J���j���J�ʼnF���A���L�n�ћa���L�ǎ�䥟������H�ӉE������Z���p�Q�G�����ˌ����̉K������Ꚗo�e���Y�^�I�������N�����҃EU���T��u]\|��\_s*��\|��\_s*��\|��\_s*��\|�T\_s*��\|��\_s*��\_s*��\|��\_s*��\|�H\_s*��\_s*�R\|��\_s*��\|�D\_s*\%(�k\_s*[�Lj�]\|��\_s*��\)\|��\_s*�i\|�e\_s*��\|��\_s*��\|�A\_s*��\|�y\_s*��\|��\_s*�y\_s*[����]\|��\_s*�\|��\_s*�[\|�\_s*��\|�\_s*��\|�\_s*��\|��\_s*�`\|��\_s*�c\_s*��\_s*��\|�W\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|�s\_s*��\_s*��\|��\_s*��\|�\_s*��\|A\_s*r\_s*i\_s*s\_s*t\_s*o\_s*l\_s*o\_s*c\_s*h\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|�`\_s*��\|��\_s*�C\_s*��\|�\_s*��\|�O\_s*�Y\|��\_s*��\|��\_s*[�C�B��]\|��\_s*\%(��\|��\_s*��\_s*��\)\|C\_s*u\_s*c\_s*u\_s*r\_s*b\_s*i\_s*t\_s*a\_s*l\_s*e\_s*s\|��\_s*��\|�c\_s*��\|�C\_s*�M\_s*��\_s*�X\|�I\_s*�}\_s*��\|��\_s*��\_s*�s\_s*�\\|��\_s*\%(�p\_s*��\|�L\_s*��\)\|�A\_s*\%([�X��]\|�O\_s*��\_s*�[\|�[\_s*\%(�V\_s*��\_s*��\|�W\_s*�F\_s*��\_s*�g\|�o\_s*��\)\|��\_s*�e\_s*�B\_s*��\_s*�b\_s*�g\|�|\_s*��\|�b\_s*\%(�v\|�p\_s*�[\|�V\_s*��\_s*�[\)\)\|�P\_s*\%(��\|��\_s*��\)\|�t\_s*\%(�{\_s*�[\_s*�g\|�^\_s*�[\_s*��\|�l\_s*�b\_s*�N\|�m\_s*�h\_s*�w\_s*\%(�t\_s*�F\_s*�A\_s*�[\|�}\_s*�K\_s*�W\_s*��\)\)\|��\_s*\%([�^�j�[]\|�g\_s*\%(��\_s*��\|��\_s*�q\_s*�g\)\|��\_s*\%(�A\|�V\_s*�[\_s*�Y\)\|�v\_s*�V\_s*��\_s*��\|�l\_s*�X\_s*�R\|�i\_s*\%(�J\_s*�C\_s*�g\|�C\_s*�e\_s*�b\_s*�h\)\|�r\_s*�L\_s*\%(�^\_s*�X\|�m\_s*��\)\)\)', - \ 'v' : '\%([���F���l�۔ńB�r���Ƀ�v]\|�\_s*�\_s*�\|�b\_s*��\|��\_s*��\|�\_s*�\|�`\_s*�F\_s*��\|��\_s*�^\| \_s*�r\_s*�N\_s*�g\_s*�[\_s*��\|��\_s*�o\|��\_s*�z\|�j\_s*�X\|��\_s*��\|�P\_s*�^\|��\_s*\%(�f\_s*�B\_s*��\|�M\_s*�i\|�j\_s*�X\|�Z\_s*��\_s*��\|�N\_s*�`\_s*��\|��\_s*�L\_s*��\_s*�[\_s*��\|��\_s*��\_s*�[\|�[\_s*�j\_s*��\)\|�u\_s*\%(��\|�]\_s*�[\_s*��\|�T\_s*�C\_s*��\|�l\_s*�b\_s*�N\|�S\_s*�[\_s*��\|�V\_s*�l\|��\_s*�[\_s*�O\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*�b\|�{\_s*\%(�X\_s*�g\_s*�[\_s*�N\|��\_s*�S\_s*��\|��\_s*\%([�K�{�g�^]\|�e\_s*\%(�b\_s*�N\_s*�X\|�[\_s*[�W��]\)\)\|��\_s*��\_s*�[\_s*��\|��\_s*��\_s*\%(�`\|�e\_s*�B\_s*�A\|�^\_s*��\_s*�[\)\|��\_s*�[\|�R\_s*�[\_s*�_\|�[\_s*\%([���g�O]\|��\_s*�g\|�h\_s*�r\_s*\%(��\|��\_s*�A\_s*��\)\|�p\_s*��\|�_\_s*�t\_s*�H\_s*��\|�J\_s*\%(��\|��\_s*�X\_s*�g\)\)\|�L\_s*��\_s*�u\_s*��\_s*��\|�C\_s*\%([�h�X]\|�W\_s*��\_s*�[\|�V\_s*��\_s*�O\)\)\|�w\_s*�b\_s*�g\|��\_s*��\_s*��\|��\_s*��\|�t\_s*\%(�@\_s*\%(��\|�h\_s*�[\_s*�c\)\|�H\_s*\%(��\|��\_s*\%(�N\|�J\_s*�[\)\)\|�F\_s*��\_s*��\_s*�[\_s*��\)\|�E\_s*\%(��\_s*\%(�f\_s*�B\_s*�~\_s*�[\_s*��\|�W\_s*\%(�~\_s*�[\_s*��\|�[\_s*�~\_s*��\|�I\_s*�X\_s*�g\_s*\%(�N\|�b\_s*�N\)\)\)\|�B\_s*\%(��\_s*�i\|��\_s*�X\)\|�H\_s*�b\_s*�J\|�C\_s*\%(��\_s*�X\|��\_s*�i\_s*�[\)\|�F\_s*\%(��\_s*�M\_s*��\_s*�E\_s*�X\|�k\_s*�X\)\)\|�r\_s*\%([�A���u�o�X�U]\|�K\_s*�[\|�n\_s*�[\_s*��\|�^\_s*�~\_s*��\|��\_s*\%(�b\_s*�W\|��\_s*�C\)\|�r\_s*\%(�A\_s*��\|�b\_s*�h\)\|�b\_s*\%(�N\|�L\_s*�[\)\|�Z\_s*��\_s*�e\|�N\_s*\%(�^\_s*�[\|�g\_s*\%(��\|��\_s*[�[�A]\)\)\|�V\_s*\%(��\_s*�X\|�\\_s*��\_s*�[\_s*�Y\)\|��\_s*\%([�`�X]\|�\\_s*��\|�e\_s*�[\_s*�W\|�Z\_s*��\_s*�g\)\|�l\_s*\%(�K\_s*�[\|�O\_s*��\_s*�b\_s*�g\)\|�j\_s*\%([�[��]\|��\_s*�f\_s*��\)\|��\_s*�[\|�G\_s*��\_s*�`\_s*��\_s*��\|�W\_s*\%(��\|�b\_s*�g\|�^\_s*�[\|��\_s*\%(��\|�i\_s*��\_s*�[\)\|��\_s*�A\_s*\%(��\|��\_s*�C\_s*\%(�Y\|�[\_s*�[\_s*�V\_s*��\_s*��\)\)\)\|�_\_s*��\|�f\_s*�I\|��\_s*\%(�S\|�k\_s*�[\_s*�u\)\|�I\_s*��\|��\_s*�W\_s*�A\_s*��\|�B\_s*�[\_s*�i\_s*�X\|�[\_s*\%(�{\|��\_s*�X\|�N\_s*��\|�i\_s*�X\)\)\|�x\_s*\%([�K����]\|�g\_s*�i\_s*��\|�C\_s*�_\_s*�[\|�[\_s*\%(��\|�_\_s*�[\)\|�e\_s*��\_s*��\|�b\_s*�Z\_s*��\|�X\_s*\%([�g�^�p]\|�r\_s*�I\)\|�N\_s*\%(�^\|�g\_s*��\)\|�W\_s*�^\_s*\%(�u\_s*��\|��\_s*�A\_s*��\)\|��\_s*\%([�B�[]\|�t\_s*�@\_s*�C\|�T\_s*�C\_s*��\)\|��\_s*\%(�i\|�V\_s*�e\_s*�B\|�[\_s*�i\|�j\_s*[�J�N]\)\|��\_s*\%(�f\|�x\_s*�b\_s*�g\|�_\_s*��\|��\_s*�[\_s*�k\|�T\_s*\%(�[\_s*�`\|�C\_s*��\)\|��\_s*�b\_s*�g\)\|�m\_s*��\|�j\_s*[�X���A]\|�l\_s*\%(�V\_s*��\_s*��\|�c\_s*�B\_s*�A\|�`\_s*�A\|�Y\_s*�G\_s*��\)\)\|�o\_s*\%([����]\|�C\_s*\%([�A�u���I]\|�p\_s*�[\|�^\_s*\%(��\|��\_s*�e\_s*�B\)\|�L\_s*��\_s*�O\|�U\_s*�[\|�V\_s*��\)\|�b\_s*�g\|�`\_s*�J\_s*��\|�M\_s*�i\|�K\_s*�{\_s*��\_s*�h\|��\_s*\%(�i\_s*�V\|�G\_s*�e\_s*�B\)\|�T\_s*��\|�X\_s*\%(�R\|�P\_s*�X\)\|�J\_s*��\_s*�X\|�P\_s*�[\_s*�V\_s*��\_s*��\|�L\_s*��\_s*�[\_s*��\|�E\_s*�`\_s*��\_s*�[\|��\_s*\%(��\|�G\_s*�[\_s*�V\_s*��\_s*��\|��\_s*�[\|�A\_s*\%(�u\_s*��\|��\_s*�g\)\|�b\_s*�h\|�f\_s*�[\_s*�V\_s*��\_s*��\)\|�k\_s*�A\_s*�c\|�j\_s*\%(��\|�[\_s*��\)\|��\_s*\%([���[]\|��\_s*��\|��\_s*�[\|��\_s*\%(�V\_s*�A\|�`\_s*�m\|�^\_s*�C\_s*��\)\)\|�[\_s*\%([�S�O]\|�`\_s*��\_s*��\|��\_s*�g\_s*�D\_s*�[\_s*�h\|�o\_s*��\|�{\_s*�X\|�x\_s*�i\|�e\_s*�B\_s*�J\_s*��\|�T\_s*�X\|�W\_s*\%(��\|�j\_s*�A\|��\_s*��\)\|�m\_s*��\|�j\_s*�A\|��\_s*��\_s*�g\|�~\_s*\%(��\_s*�I\_s*��\|�L\_s*��\_s*��\_s*�C\_s*�g\)\)\|�i\_s*\%(�L\_s*��\_s*��\_s*�[\|�W\_s*�E\_s*��\)\)\|�u\_s*\%(�C\|��\_s*\%(�h\|�b\_s*�h\)\|�[\_s*�h\_s*�D\_s*�[\)\|V\_s*\%(H\_s*L\_s*L\_s*(\_s*V\_s*e\_s*r\_s*y\_s* \_s*H\_s*i\_s*g\_s*h\_s* \_s*L\_s*e\_s*v\_s*e\_s*l\_s* \_s*L\_s*a\_s*n\_s*g\_s*u\_s*a\_s*g\_s*e\_s*)\|�]\_s*�[\_s*��\|�T\_s*�C\_s*��\|�l\_s*�b\_s*�N\|�S\_s*�[\_s*��\|J\_s*E\_s*-\_s*��\|�V\_s*�l\|��\_s*�[\_s*�O\|I\_s*S\_s*A\_s*�J\_s*�[\_s*�h\|i\_s*r\_s*g\_s*i\_s*n\_s*i\_s*a\|A\_s*X\|e\_s*r\_s*\%(m\_s*o\_s*n\_s*t\|i\_s*S\_s*i\_s*g\_s*n\)\|a\_s*n\_s*a\_s*d\_s*i\_s*u\_s*m\)\)', - \ 'w' : '\%([��������������ɒj�����Y��y����h�����ȃ҃��f�[�l�e���񓴑a�؈������鎽�[�X���D�W䷙\��w���u�ќ��z���D鴑��ߚX�����i���^���R�忓��L�M�f��~���ӏ��r戉�楓]��揗w搉S�^�̗��É��򃑂�k�։\�u�����L�G�Q�m���P�O���H⣑��Q�m�����I��V�ߊ��a�������X�S�n�|�o�J���U�󎜚y�팻���ʉf�ژ��ⓐx���ԋ����ʏ��ϙ�����A�]゜��D�]��^�@����T�A��������m����U�S���Y�v���������Z�r����N�������T���T�ݗ��Ɠ��Z�J���j���J�ʼnF���A���L�n�ћa���L�ǎ�䥟������ӉE������Z���p�Q�G�����ˌ����̉K������Ꚗo�e���Y�^�I����������܉������c��㘟|���͊��Ϗp���ԉЍЋƋZ�����ǁ������k�Y���e�o���n���m�܏Νt������s����f�����^�]�o�_�r�q�p�c���i���q��ǘj�n�Ȏ��F�G�d�̘e���Θc�Q�C崙N���Z��Д����ʒt�ሽ�g�f�h�a�Œ�f�Z�N��O�֔j���c���l��H���`���b�̔i�킗�����Ȕg�E��w]\|�\_s*[�������]\|�b\_s*[�����E����]\|��\_s*[������]\|��\_s*��\_s*�~\_s*�_\|��\_s*��\|��\_s*��\|��\_s*��\|�T\_s*��\|��\_s*��\_s*��\|��\_s*��\|�H\_s*��\_s*�R\|��\_s*��\|�D\_s*\%(�k\_s*[�Lj�]\|��\_s*��\)\|��\_s*�i\|�e\_s*��\|��\_s*��\|�A\_s*��\|�y\_s*��\|��\_s*�y\_s*[����]\|��\_s*�\|��\_s*�[\|�\_s*��\|�\_s*��\|�\_s*��\|��\_s*�c\_s*��\_s*��\|�W\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|�s\_s*��\_s*��\|��\_s*��\|�\_s*��\|A\_s*r\_s*i\_s*s\_s*t\_s*o\_s*l\_s*o\_s*c\_s*h\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|�`\_s*��\|��\_s*�C\_s*��\|�\_s*��\|�O\_s*�Y\|��\_s*��\|��\_s*[�C�B��]\|��\_s*\%(��\|��\_s*��\_s*��\)\|C\_s*u\_s*c\_s*u\_s*r\_s*b\_s*i\_s*t\_s*a\_s*l\_s*e\_s*s\|��\_s*��\|�c\_s*��\|��\_s*��\|�o\_s*�D\|��\_s*�Y\_s*��\|��\_s*��\|�i\_s*��\_s*�j\|(\_s*��\_s*)\|��\_s*[����]\|�R\_s*��\|�Y\_s*�z\|�x\_s*��\|Y\_s*\%(��\|�V\_s*��\_s*�c\|��\_s*�F\_s*��\)\|�x\_s*\%(��\|�V\_s*��\_s*�c\|��\_s*�F\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*[�R��]\|��\_s*��\|�a\_s*�t\|��\_s*��\_s*��\_s*�D\_s*�\|��\_s*\%(�`\|��\_s*�m\_s*��\_s*��\)\|�^\_s*�B\_s*��\_s*�D\|��\_s*\%(��\_s*��\_s*��\_s*�E\_s*��\_s*��\|��\_s*��\_s*��\_s*�E\_s*��\_s*��\)\|�u\_s*��\_s*�c\_s*�u\_s*��\_s*�N\|��\_s*��\_s*�O\|��\_s*\%(��\|�C\_s*�X\|�b\_s*�J\_s*�[\|�X\_s*\%(��\_s*�[\|��\_s*��\_s*�O\)\)\|��\_s*\%(�[\_s*�X\|��\_s*�N\_s*��\|�X\_s*�g\)\|��\_s*��\_s*��\_s*��\|��\_s*\%(�b\_s*\%([�v�p]\|�s\_s*��\_s*�O\)\|�C\_s*\%([�^�g]\|�e\_s*�B\_s*��\_s*�O\)\)\|�{\_s*��\_s*�t\|�t\_s*\%([���[]\|�@\_s*�C\_s*��\|�B\_s*\%(�[\_s*�g\|�b\_s*�`\)\)\|�z\_s*\%(�G\_s*[�C�[�A]\|�[\_s*��\|�C\_s*\%(�[\_s*\%(��\|��\_s*�[\)\|�b\_s*\%(�v\|�X\_s*��\|�p\_s*�[\|�g\_s*\%(�j\_s*�[\|�}\_s*��\)\)\)\|��\_s*\%(�C\|�b\_s*[�g�c]\)\)\|�x\_s*��\_s*�i\_s*�[\|W\_s*\%(S\|N\_s*N\|y\_s*o\_s*m\_s*i\_s*n\_s*g\|O\_s*W\_s*O\_s*W\|I\_s*\%(D\_s*E\|N\_s*T\_s*E\_s*R\_s*P\_s*(\_s*W\_s*i\_s*d\_s*g\_s*e\_s*t\_s* \_s*I\_s*n\_s*t\_s*e\_s*r\_s*p\_s*r\_s*e\_s*t\_s*e\_s*r\_s*)\)\|i\_s*\%(s\_s*c\_s*o\_s*n\_s*s\_s*i\_s*n\|d\_s*g\_s*e\_s*t\|n\_s*d\_s*o\_s*w\_s*s\)\|h\_s*\%(y\_s* \_s*d\_s*o\_s*n\_s*e\_s* \_s*i\_s*t\_s*?\|o\_s* \_s*d\_s*o\_s*n\_s*e\_s* \_s*i\_s*t\_s*?\)\|E\_s*B\_s*\%(�u\_s*��\_s*�E\_s*�U\|�}\_s*�K\_s*�W\_s*��\)\|e\_s*\%(s\_s*t\_s* \_s*V\_s*i\_s*r\_s*g\_s*i\_s*n\_s*i\_s*a\|b\_s*\%(�y\_s*�[\_s*�W\|��\_s*�W\_s*�I\|�R\_s*�~\_s*�b\_s*�N\|�T\_s*\%(�C\_s*�g\|�[\_s*\%(�o\|�r\_s*�X\)\)\|�h\_s*��\_s*�}\)\)\|a\_s*s\_s*h\_s*i\_s*n\_s*g\_s*t\_s*o\_s*n\|A\_s*V\_s*�t\_s*�@\_s*�C\_s*��\)\|�x\_s*��\|�v\_s*\%(�t\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\)\|�o\_s*��\_s*�^\_s*�[\|��\_s*\%(��\_s*��\_s*�c\_s*�u\_s*��\_s*�N\|�H\_s*��\_s*�t\|�B\_s*\%([�[��]\|��\_s*\%(��\|�w\_s*��\_s*��\)\)\|�F\_s*\%(��\_s*�_\_s*�[\_s*�X\|��\_s*�i\_s*�[\|�[\_s*�o\_s*�[\|�C\_s*��\)\|�@\_s*\%(�C\_s*[���X]\|�[\_s*�O\_s*�i\_s*�[\|��\_s*�_\|��\_s*\%(�^\_s*�[\|�L\_s*��\_s*�[\_s*��\)\)\)\|�_\_s*�u\_s*��\_s*��\_s*�[\|�^\_s*��\_s*�O\_s*�X\_s*�e\_s*��\|T\_s*\%(h\_s*e\_s* \_s*W\_s*o\_s*r\_s*l\_s*d\_s* \_s*W\_s*i\_s*d\_s*e\_s* \_s*W\_s*e\_s*b\_s* \_s*C\_s*o\_s*n\_s*s\_s*o\_s*r\_s*t\_s*i\_s*u\_s*m\|u\_s*n\_s*g\_s*s\_s*t\_s*e\_s*n\)\)', - \ 'x' : '\%([��H����F����D����B����@�������V���~��x]\|�\_s*[�����]\|�b\_s*[�H�F�D�B�@]\|��\_s*[����������]\|�V\_s*��\_s*\%(�z\_s*��\|�t\_s*�H\_s*��\)\|�w\_s*\%([����]\|�f\_s*[�C�[]\|��\_s*��\_s*��\_s*��\|�r\_s*�T\_s*�C\_s*�Y\|�k\_s*\%(��\_s*��\_s*��\|�T\_s*�C\_s*�Y\)\|�E\_s*�B\_s*��\_s*�h\_s*�E\|�[\_s*��\)\|X\_s*\%([����]\|C\_s*o\_s*n\_s*s\_s*o\_s*r\_s*t\_s*i\_s*u\_s*m\|�f\_s*[�C�[]\|P\_s*S\_s*(\_s*e\_s*X\_s*p\_s*a\_s*n\_s*s\_s*i\_s*o\_s*n\_s* \_s*P\_s*a\_s*s\_s*s\_s*i\_s*n\_s*g\_s* \_s*S\_s*t\_s*y\_s*l\_s*e\_s*)\|S\_s*�T\_s*�C\_s*�Y\|l\_s*i\_s*b\|L\_s*\%(i\_s*s\_s*p\|�T\_s*�C\_s*�Y\)\|e\_s*n\_s*o\_s*n\)\|�W\_s*�I\_s*��\|�[\_s*\%(�r\_s*�E\_s*�X\|��\_s*\%(�b\_s*�N\_s*�X\|�O\_s*��\_s*�t\_s*�B\)\)\|�n\_s*�r\_s*�G\_s*��\|�U\_s*\%(��\|�r\_s*�G\_s*��\)\|�L\_s*\%(�V\_s*\%(��\|��\_s*��\|��\_s*�g\_s*�[\_s*��\)\|�Z\_s*�m\_s*��\|�T\_s*��\_s*\%(�`\_s*��\|�^\_s*��\)\)\|E\_s*x\_s*t\_s*e\_s*n\_s*s\_s*i\_s*b\_s*l\_s*e\_s* \_s*M\_s*a\_s*r\_s*k\_s*u\_s*p\_s* \_s*L\_s*a\_s*n\_s*g\_s*u\_s*a\_s*g\_s*e\|�N\_s*\%(�V\_s*�[\|��\_s*�X\_s*�|\_s*�X\_s*�g\|�Z\_s*\%(�i\_s*�L\_s*�X\|�m\_s*�t\_s*�H\_s*��\)\|�U\_s*��\_s*�B\_s*�G\|�T\_s*\%(�C\|��\_s*\%(�g\_s*�X\|�`\_s*�b\_s*�y\|�e\_s*�B\_s*�b\_s*�y\)\)\|��\_s*�X\_s*�}\_s*�X\)\|�G\_s*\%(�N\_s*�X\|�b\_s*�N\_s*�X\)\)', - \ 'y' : '\%([։ߕ֍������H�V�ş�ꔗ����؊��Z���ݝ����g���Z�|�~�}�����Ĕ���ϑ��b���b���щx�X�����\���c���c�U���i�F��g�`ᇞ����՗x�揜J�L�Ȟ@�f�����uꡜ���y�����s�@����T��ᘟ���~���m������籝X�yꢗq�s�i�^�w�g�j�s�f��g�t匍��r�o�����חl�d�p�n�їw�z�m�Ï��h�^�S焛@�����㏜棟b���a�Ǘ_�P�`���]�r�Ĕ��S��㿉r���\�\�Q���P�a�����o�K�l�l�P�I�^椂��㒏����̎͒o�ɒ�����t沖L��u���V�K�ᛮ�|��w�䓎樏�ଉ�����������w��亗W���z�F����C�Q���������ޗC�G���E�P�Z�X�N�O�S�З[�H�I�֗F�Y�J�L�k��ሖ����@�g�V�h��O䥝��R埙`�����A懝����|�������M���g���J�䲃���ꍘc�U�T���������n�������翔�䑌���������恍ݍ��������r�x�������É��j囚|���d�Q�U���|��軗��Ƒ������B�d���{���Nj�佈��䆍��m�n�ؐF���A�t����F������泌Ìމ��L�����d�������ƜјJ���i��ꌒ��Փk�v����ɔžo���������֌��y������M�E���|�ځ��e�퐈�M����臐��Y���O�����ΖZ�}��x���א򌵉��M�Ձ��O䗚P�{���b�����w�����~�N�}�z�c���c��硉Ɏ��h�����䕟J����s�W���]�b�K�\���Tฐ��]�r����m�П��Ȉ��Z���Ԉ��T�D�M�Κ�I�����C��������m��覉@������u�B�A��A�ޛ���j�H���و�Ί�ֈ�È�1�P�����D�y���I��D�R�����۔џ��ʈዏ�H�ƍ֋U�������h�w�ψ͉]����}�u�b�v���]�Ό��≝�g�М���@�E���S��盈���B�Ο��ݑP�����R�҈Ȋ��U�ג��ߘߛ��ږ����ˆ̈،܈Η��͜}�Ė��ˈ��ԍs��਒_�ˑ��������ޗǓ��o�֗��D�K���~�������䏈ӈۈ��؈ً����e����Ԅ`���t�c���b�ّ������q���ۈŔs���M���l����h�E�`�_�ʗ�S�Q���n���a�_��–z�l���˗D���y������ي��VꞟK������o���Z�މv�N��u��������k����欎��淏��k�q�s�t�r�R�Кݓ@�D洗{�k����J�їT���׈Ջx�ۍN����❔������J�Ĝ\��̖��t�j熔W���쉮�ƕa����ߖ����ˎܓi�댭ውƔ��E�~������ₙ�u�E�~�����������v�F�����������J��Y�C�\���z��y]\|�\_s*[�ղ�]\|�b\_s*[�����C��]\|��\_s*[��䂢��]\|��\_s*��\_s*�b\|�^\_s*��\_s*�b\|�I\_s*��\|��\_s*��\|�B\_s*��\|�I\_s*��\|4\_s*\%([�“�����]\|��\_s*��\|��\_s*��\)\|��\_s*��\|�m\_s*�j\|��\_s*��\|��\_s*��\|�F\_s*��\|��\_s*��\|��\_s*[�q��]\|�j\_s*��\|�h\_s*�L\|�@\_s*��\|�V\_s*��\|��\_s*[���j]\|��\_s*[�q��]\|�i\_s*��\|�W\_s*��\|8\_s*��\|��\_s*��\|�t\_s*\%(��\|�^\_s*�[\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|�~\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|�S\_s*��\|L\_s*i\_s*l\_s*i\_s*\%(o\_s*p\_s*s\_s*i\_s*d\_s*a\|a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\)\|��\_s*\%(�Y\|��\_s*��\)\|��\_s*�M\|��\_s*��\|��\_s*��\|��\_s*��\|E\_s*\%(u\|��\_s*�[\_s*��\)\|�a\_s*��\|J\_s*u\_s*\%(l\_s*i\_s*a\_s*n\_s*i\_s*a\_s*l\_s*e\_s*s\|n\_s*c\_s*a\_s*l\_s*e\_s*s\)\|�c\_s*�J\|�c\_s*��\|�G\_s*�s\|�\\_s*�Z\_s*��\|�Q\_s*�q\|�G\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|N\_s*a\_s*j\_s*a\_s*d\_s*a\_s*l\_s*e\_s*s\|��\_s*�G\|��\_s*��\|��\_s*�t\_s*��\|5\_s*[�“�]\|�T\_s*[�“�]\|��\_s*�E\|�r\_s*�U\|��\_s*��\|��\_s*�Y\|��\_s*�[\|��\_s*��\|�~\_s*��\|��\_s*��\_s*��\|�{\_s*��\|�o\_s*��\|��\_s*�g\|�Y\_s*[���q]\|�h\_s*[�‘�]\|�@\_s*��\|U\_s*\%(��\|�^\_s*�[\_s*��\|r\_s*t\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\)\|�E\_s*[�c�R]\|�d\_s*\%(�`\_s*�r\_s*�s\|�u\_s*�d\)\|�C\_s*��\|�]\_s*[���o��Z]\|��\_s*��\|��\_s*�q\|�_\_s*��\|��\_s*��\_s*��\|��\_s*�r\_s*��\|G\_s*\%(l\_s*u\_s*m\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\|r\_s*a\_s*m\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\|i\_s*n\_s*k\_s*g\_s*o\_s*p\_s*s\_s*i\_s*d\_s*a\)\|��\_s*��\|��\_s*��\_s*��\|�r\_s*��\|�s\_s*��\_s*��\|�o\_s*[�E����]\|�\_s*[�W�k]\|�C\_s*[�؎Q]\|��\_s*�\\|��\_s*��\_s*[�ΒY]\|�_\_s*�F\|�e\_s*[����]\|�p\_s*\%([�꓍��]\|�g\_s*��\)\|��\_s*��\_s*��\|��\_s*[�ȉ���]\|D\_s*i\_s*a\_s*p\_s*e\_s*n\_s*s\_s*i\_s*a\_s*l\_s*e\_s*s\|�s\_s*[�”@]\|��\_s*�{\|��\_s*��\_s*��\|��\_s*��\|��\_s*�L\_s*�n\|��\_s*��\|��\_s*[�c��]\|R\_s*a\_s*f\_s*f\_s*l\_s*e\_s*s\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|��\_s*��\|��\_s*��\|��\_s*��\|�V\_s*�\\|�`\_s*�G\|��\_s*�{\_s*��\_s*��\|��\_s*�a\|T\_s*\%(h\_s*e\_s*l\_s*i\_s*g\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\|r\_s*o\_s*c\_s*h\_s*o\_s*d\_s*e\_s*n\_s*d\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\)\|M\_s*y\_s*r\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\|��\_s*��\_s*�t\|��\_s*��\|A\_s*r\_s*a\_s*c\_s*a\_s*l\_s*e\_s*s\|P\_s*\%(o\_s*a\_s*l\_s*e\_s*s\|l\_s*u\_s*m\_s*b\_s*a\_s*g\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\|r\_s*\%(o\_s*t\_s*e\_s*a\_s*l\_s*e\_s*s\|i\_s*n\_s*c\_s*i\_s*p\_s*e\_s*s\)\|a\_s*l\_s*m\_s*a\_s*l\_s*e\_s*s\)\|��\_s*�q\|��\_s*[���j]\|�x\_s*\%([�k��]\|�V\_s*��\_s*�c\)\|�G\_s*\%(�z\_s*�o\|�t\_s*�Q\_s*�j\_s*�[\|��\_s*��\_s*�@\_s*��\|�j\_s*�Z\_s*�C\|�[\_s*��\)\|��\_s*�C\)', - \ 'z' : '\%([�󉀉��ꑹ��������㔛������������������m�ґX�����f�h�ّ��������ۑ����Y���\�����]��萊��A�K㿑R��䒑U�W�N��征͑V陑T�P�Q�f�O�S�␨������ҐƐŐ��U�ӂ��ž����l�b齕�����A�Z�B������@笐��������C���t�Ó��|�~�D�}���ߍ������󓈎ȓ��������ǎ����w�x����c��H苎ҍ��׎��l�����������㒼�Ó�����K���������H�Ԙ�ᶙ��b�����i�u�@�v�ސn�Չ`�r�x�����o�s�q�w�p�t�l�ŏ��ғ�䴞`䥝�募��t�J����珊�R���������P�����ԟ��i�Uㅏ��{�o������媝m�h���鈐������Y�t��������Y����竐������j�g�@�ݖ�����Ï��ꏗ�����`������~�]��꞊��󝵏������������������G�����A�ژh�G�Q榜휵���@���u���Q�x�h�m��n���p�q���m�m⢙Ï��|⡓���՟��~�[�x����{䤏��z���������y�}�������}��汎�������������G�����E�s���n�𘸏^�F�_�`���O�c�a�_�Y���[�b�]�\�Z�e�d�������m�����������莣���^���y�~�����������i���J玎�������Ȓn�����􎤎��~�������I�m�������V�����k�q���H�j�a�Z���d��������䢎������m�������V�������␷��╍蛽�N���M�����赞��ƎL�G�R�Z�Q�S��ₜ�͛؜�k�O��槎S�b�Μ͎a�c�Z�ː��čϙ����܍ލ��ߍݍ�o������U��������������Y���������]���[�������G�w�Y�]��Z���U�W�[�x�ĄH��z]\|�\_s*\%(�\_s*�\|�\_s*�\|�\_s*�\|�\_s*�\|�\_s*�\)\|�b\_s*[�]�[�Y�W�U]\|��\_s*[����������]\|�\_s*�\|��\_s*��\|�o\_s*��\|��\_s*[�����q]\|�\_s*�\|��\_s*��\_s*��\|��\_s*��\|�O\_s*��\|��\_s*��\|��\_s*��\|�\_s*��\|�\_s*�\|��\_s*�p\|��\_s*�o\|�C\_s*�@\|�m\_s*��\|��\_s*��\|�k\_s*[�ߌY]\|�\_s*��\|��\_s*�s\|F\_s*i\_s*g\_s*u\_s*r\_s*e\|�\_s*�\|G\_s*\%(��\_s*��\|�p\_s*��\)\|D\_s*y\|�f\_s*\%(��\_s*��\|�p\_s*��\)\|�x\_s*�x\|��\_s*��\|�Q\_s*��\|2\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*�q\|J\_s*\%(I\_s*S\_s*�R\_s*�[\_s*�h\|�|\_s*�b\_s*�v\|R\_s*��\_s*��\_s*�{\)\|��\_s*�q\|�b\_s*��\_s*��\_s*��\_s*��\_s*��\_s*�M\_s*�h\_s*�p\_s*�\|k\_s*\$\_s*_\_s*{\_s*e\_s*f\_s*f\_s*}\_s*\$\|�[\_s*\%(��\|��\_s*��\)\|�`\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|�R\_s*�l\|�y\_s*�_\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*�r\_s*��\|��\_s*�v\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[���@�S����������]\|C\_s*a\_s*b\_s*o\_s*m\_s*b\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|�i\_s*\%(��\_s*�[\_s*�O\|�|\_s*�b\_s*�v\|�t\_s*�m\_s*�j\_s*�n\)\|��\_s*�q\|��\_s*��\|�P\_s*\%(�Q\|�O\_s*[�i��]\|�P\_s*��\|�U\_s*�i\|�W\_s*��\)\|�t\_s*��\|��\_s*��\|�R\_s*��\|1\_s*\%(0\|1\_s*��\|8\_s*��\|2\_s*��\)\|�\_s*�\|��\_s*��\|��\_s*��\|�\_s*�u\|�e\_s*��\|��\_s*��\|��\_s*��\|��\_s*�{\|�U\_s*��\_s*��\|��\_s*�H\|��\_s*��\|�T\_s*\%(��\_s*��\|��\_s*�|\_s*�[\_s*�j\_s*��\|��\_s*�S\_s*�T\)\|Z\_s*\%([r��]\|i\_s*\%(r\_s*c\_s*o\_s*n\_s*i\_s*u\_s*m\|n\_s*c\)\|�K\_s*��\_s*�_\_s*��\|�o\_s*�b\_s*�t\_s*�@\|I\_s*P\_s*�t\_s*�@\_s*�C\_s*��\)\|�V\_s*\%(�^\_s*�[\_s*��\|�I\_s*\%(��\|�j\_s*\%(�X\_s*�g\|�Y\_s*��\)\)\)\|�y\_s*\%([����]\|��\_s*��\|��\_s*��\_s*��\_s*��\)\|�`\_s*\%(�N\_s*��\_s*�X\|�A\_s*�m\_s*�[\_s*�[\|��\_s*�[\_s*��\_s*\%(�q\|�b\_s*�q\)\|��\_s*��\_s*�_\_s*�b\_s*�V\_s*��\|�S\_s*�C\_s*�l\_s*��\_s*��\_s*�C\_s*�[\_s*��\)\|�c\_s*\%(�@\_s*\%(��\_s*�g\_s*�D\_s*�X\_s*�g\_s*��\|�C\_s*�g\)\|�F\_s*\%(�i\_s*�[\|�b\_s*�y\_s*��\_s*��\|��\_s*�}\_s*�b\_s*�g\)\|�B\_s*\%(�N\_s*��\_s*�X\|�^\_s*�[\|�[\_s*�O\_s*��\_s*�[\|��\_s*\%(�o\_s*��\_s*��\|�}\_s*�[\_s*�}\_s*��\)\|�S\_s*�C\_s*�l\_s*��\)\)\)', - \ 'A' : '\%([��ݕ��N��Ҋ{�b���]毛^�������w�܏��㦚@�o�C�����粕ӓ��J���l���V�Ȍl�ˆ��^���Мۜ��{���Q��z��鸈��W�E�B���{���M�Q榓k�w��{�\�����N�}�H���o���{���t����V�p�������A�֔\���H�Փ��a�ڏS�[矏N�����a�W���o㻓֏��~�ĔM���ؒg��禈������Ŋ��������[���N�Ύ����ҕ����a�e��}�y�R�����X���v���I���\����॑��Ő��V�a�z�\���e���X�~�d�V�E�����Y�эʊ늿�ߎӕT��瑀������剕Օ����P����]��J�ÓV���������쉐�˖ԋY�͈��������b���������般�HꙌ���������ǖ�����s����N��L�[����ӟ�䈮�����N�����z���������P�j�E�D���ɏ͏������W�쏺�H�����q蕚��V����襕��B���\���͈��ԑ�����~㪌Z����Q�s�ň��}�Ĉ��ǝ�ƈ����䒩�툤���@��r�b�����`�~�����q�g���ݝю鈩�[����脝��ōC���K��暖\�ؐԙ���z�Đ��•Ɉ����Œ��a�����S���㈢�Ҍ�ݕ����J�숫�r�G�}�����L�������j���򈡈��}�[�Y�ޝ����K�������g�������O���c����������&�ȁ��_�ڋ��͋��́����ˁ����܌�W���āN�L�M�O�f�`���`�������A�p�@A]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|Z\_s*\%(n\|i\_s*n\_s*c\)\|��\_s*�q\|��\_s*��\|�E\_s*�n\|�f\_s*��\|��\_s*��\|�M\_s*�V\_s*��\|��\_s*�T\|��\_s*��\|�Z\_s*�q\|��\_s*��\|�l\_s*��\|��\_s*��\|��\_s*��\|�^\_s*��\|��\_s*��\|��\_s*�w\|��\_s*[����]\|��\_s*�p\|��\_s*��\|��\_s*��\|L\_s*a\_s*r\_s*d\_s*i\_s*z\_s*a\_s*b\_s*a\_s*l\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*�{\|��\_s*\%(��\|��\_s*�q\)\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\_s*��\)\|�H\_s*�a\_s*�b\|H\_s*a\_s*l\_s*o\_s*r\_s*a\_s*g\_s*a\_s*l\_s*e\_s*s\|��\_s*�F\|��\_s*��\|��\_s*�`\|�^\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\|�D\_s*�`\|a\_s*\%(t\_s*t\_s*o\|c\_s*c\_s*e\_s*n\_s*t\)\|��\_s*[�������K]\|��\_s*�G\|��\_s*[�m�F]\|�\_s*�x\|��\_s*��\|��\_s*��\|��\_s*��\|�p\_s*\%([�ۓc]\|��\_s*�p\|��\_s*��\)\|��\_s*[�ɁX]\|E\_s*\%(s\|i\_s*n\_s*s\_s*t\_s*e\_s*i\_s*n\_s*i\_s*u\_s*m\)\|I\_s*\%(r\_s*i\_s*d\_s*a\_s*l\_s*e\_s*s\|P\_s*\%(�d\_s*�b\|�A\_s*�h\_s*��\_s*�X\)\|D\_s*�J\_s*�[\_s*�h\|C\_s*\%(�^\_s*�O\|�J\_s*�[\_s*�h\)\)\|�h\_s*\%(�o\_s*�d\_s*�b\|�b\_s*\%(�^\_s*�O\|�J\_s*�[\_s*�h\)\)\|��\_s*�~\|��\_s*��\|�c\_s*��\|�n\_s*��\_s*��\|�C\_s*[�^�l���m���]\|R\_s*u\_s*b\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|��\_s*��\_s*�a\_s*��\|��\_s*��\|��\_s*�n\|��\_s*[ꆔn��]\|M\_s*a\_s*l\_s*v\_s*a\_s*l\_s*e\_s*s\|�g\_s*��\_s*�v\_s*��\_s*A\|��\_s*��\| \_s*�A\_s*�N\_s*�V\_s*�A\_s*��\|�q\_s*�f\|��\_s*�f\|��\_s*�s\_s*��\_s*�x\_s*�Z\_s*�p\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*�Y\|��\_s*��\|G\_s*o\_s*l\_s*d\|��\_s*��\_s*\%(��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*�@\|�a\_s*��\_s*��\_s*�@\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|�Z\_s*��\_s*�g\_s*�L\_s*�b\_s*�c\_s*�l\|S\_s*\%(b\|i\_s*l\_s*v\_s*e\_s*r\)\|�g\_s*�p\_s*��\_s*�\\|��\_s*�p\_s*��\_s*�\\|�Z\_s*�@\|��\_s*��\_s*��\_s*��\|�I\_s*\%(��\|�M\_s*��\_s*�X\_s*�^\_s*��\|�h\_s*��\_s*�C\|��\_s*�O\_s*�X\_s*�g\_s*��\_s*�[\_s*��\|��\_s*\%(�g\_s*�L\_s*�[\|�^\_s*\%([�[�i]\|�l\_s*\%(�[\_s*�g\|�C\_s*�g\)\)\)\|�[\_s*\%([�N�K�T�g����]\|�j\_s*��\_s*�O\|�L\_s*�V\_s*��\|�u\_s*��\_s*�[\|�o\_s*�[\_s*�h\|�x\_s*��\_s*�W\_s*��\|�M\_s*��\_s*�X\_s*\%(�g\|�^\_s*��\)\|�]\_s*��\_s*�k\|�X\_s*\%(�`\_s*��\|�e\_s*�B\_s*��\|�^\_s*�[\|�g\_s*\%(��\_s*�A\|��\_s*��\_s*�A\)\)\|�h\_s*��\_s*�[\|�W\_s*\%([�F�[]\|�I\_s*��\_s*�W\)\|�f\_s*�B\_s*\%(�I\|�G\_s*��\_s*�X\|�V\_s*��\_s*��\|�g\_s*��\_s*�A\_s*��\)\|�^\_s*��\|�\\_s*\%(��\_s*�e\_s*�B\|��\_s*�C\_s*�Y\)\|�Z\_s*��\_s*�e\_s*�B\_s*�b\_s*�N\|��\_s*��\)\)\|�z\_s*��\|�o\_s*�C\_s*�g\|�n\_s*��\_s*�}\_s*�Q\_s*�h\_s*��\|��\_s*��\|�l\_s*�H\_s*\%(��\_s*��\_s*��\|�m\_s*�\\)\|�C\_s*\%(�[\_s*�W\_s*�X\|�I\_s*��\|�\\_s*�b\_s*�v\)\|�}\_s*��\_s*�h\_s*�D\_s*�[\_s*�N\|��\_s*\%(�z\_s*��\|��\_s*��\|��\_s*�p\)\|�t\_s*�^\|��\_s*�p\|�G\_s*\%([�j���A�C�[]\|�b\_s*�`\|��\_s*\%(�h\_s*��\_s*��\|�W\_s*�F\_s*\%(��\|��\_s*�b\_s*�N\)\|�[\_s*��\)\|��\_s*�A\|�I\_s*��\_s*�A\|�X\_s*�e\|�v\_s*��\_s*��\)\)', - \ 'B' : '\%([���ݍ����x�f��t���ݖv�{�}�~�Ϟ��s�r�`���ڝ����p�ؖn�l�m�q�����b�Q�쟂�������ۙR廖g�e���䛖����O�E�庈��ꆉK�����㦖R���W�a�X��Z�U�`���Y��N��ϛ��˖S�c�]�f�h�T�^�d��d�ە����_�@��W敖͕ꊱ�����V�G�����J����ڙk�K�럑��㰙p�gꈕ���̕��V�ՙ��A�ğ��~�܍�燙��ᾙj�וؕ�糉•�粂בD�[�k�u�q�J�����������ڒ������ܐ[�W��᳓ؐߕ��ܖܘŕ��h�ᕷ���w�������ŕs�F���U�����򐁕����x�����ᕔ�F�~���o���@�����ԕ�捐l�L�J�x�ʕT�C�Z�z�[���ߞ�㢛��m�p�C�ޜ��r�F��{���q�n�֛�焕S蓔���I�a���l�ߕ[�L�e����ὕ��d�c�b�`�_�a���Γ��Z�r����ۖ������o�ɔ��z���e�����X�]�䛇���g���є��䊑����ы��I���s���������������@�[���bV���������鯝U���A�j���c�U���P�������������W���є��m���\�����e���}�����ޔ��ȉS�i�t��䕔|��ꀊL�����������{�~�}���ŝם��f�\�����Ҕ��Ԗ_�J���m�ה”d���H����ݔ֔ӔՔԔؖ��따������������n�t�k�l�����y�H�Ő�����m���n���\�΁g�������ۉ���~�b�a�|�_�攞�{�o�n�m�o�p�a�u�r�A���q���xB]\|�\_s*\%(�\_s*�\|�\_s*�\|�\_s*�\|�\_s*�\|�\_s*�\)\|�b\_s*[�{�x�u�r�o]\|��\_s*[�ڂׂԂт�]\|�\_s*�\|��\_s*��\|�A\_s*��\|P\_s*a\_s*e\_s*o\_s*n\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|��\_s*��\|��\_s*�Z\|��\_s*��\|�r\_s*�r\|��\_s*��\|�\_s*�\|��\_s*�_\|��\_s*�_\|��\_s*��\|�E\_s*��\|�\_s*�\|��\_s*�C\|��\_s*��\|�X\_s*[���j]\|�R\_s*��\_s*�O\|F\_s*a\_s*g\_s*a\_s*l\_s*e\_s*s\|�z\_s*�c\|�\_s*��\|�u\_s*\%(��\|�l\_s*�b\_s*�N\|�V\_s*�l\_s*�}\)\|��\_s*�q\|�t\_s*�q\|��\_s*��\|�L\_s*[�O��]\|�\_s*�\|�V\_s*�A\_s*�O\|��\_s*[�ĘU]\|b\_s*i\_s*o\_s*t\_s*o\_s*p\_s*e\|�\\_s*�D\|��\_s*[���D]\|��\_s*��\|�o\_s*��\_s*�\|��\_s*��\|��\_s*��\|S\_s*a\_s*n\_s*t\_s*a\_s*l\_s*a\_s*l\_s*e\_s*s\|�h\_s*��\|��\_s*[�q�@]\|�\\_s*��\|��\_s*[�Žq]\|�\_s*�\|��\_s*��\|��\_s*�q\|�c\_s*��\_s*��\_s*��\|�b\_s*��\_s*��\|R\_s*o\_s*s\_s*a\_s*l\_s*e\_s*s\|�K\_s*�N\|��\_s*�q\|��\_s*\%([�ъy�J]\|��\_s*��\_s*��\)\|�\_s*��\|�\_s*��\|��\_s*��\|A\_s*n\_s*n\_s*o\_s*n\_s*a\_s*c\_s*e\_s*a\_s*e\|�\_s*��\|��\_s*[���]\|�f\_s*��\_s*��\|�v\_s*��\_s*�R\_s*�M\|��\_s*��\_s*��\|�I\_s*�[\_s*�g\_s*�o\_s*�C\|��\_s*[�b��]\|�t\_s*�@\_s*�S\_s*�b\_s*�g\|�w\_s*�i\|�k\_s*��\|�y\_s*\%(�L\_s*��\|�e\_s*��\_s*�M\_s*�E\_s*�X\)\|�L\_s*�f\|�C\_s*�M\_s*��\_s*�X\|�z\_s*�E\_s*�f\|��\_s*�f\)', - \ 'C' : '\%([��a�������|�Ҝ��D����ޏn�s���}�������l�a��ʗ���ۗⵘ�ᶐs���Ќ����f�����َ�����řb���I���z���iꑍ����C���麌Z欉��䓚��৙}�Y���ɍ��`�n�����X���M���ȍ��������뜝�k�՞����ߌ�����������匣���Ӎ����������e�W�E�Q���������L�m�՘i�������Q�f���肝K�����ਗ਼�Ჟ�騟����}�{㝛����Ř��ҟ������L���`�t�i���B�R�������H��{ൟ������H�s秝���n�n�������˝J�ܔ���X���L�J�y�ߛ��b�}褜���r�R���t莘m�E��硍h�k���l�K����ᦜ������n�K�}��֞��\��@囍y��ෙ��Μˍ[⠍x����u�X�S�e倘������J�i�^���V�@���A����W����G�D�T�������`ᩍB��ԍp���]�P���I���z�t�_�����k�O�j�R�w�u�P�a�I�|�q�F�X�Z�s�m�r���c���D�ޞ��J�ܛ��͞��w�L�l���������܍���W�����ێ����ЛZ�Ö��s������烌��g���םs�ؑ������e������u����Čٌ̟��]�|����V�������x�֒���绌і�嚙��h���ʉz�njԌך➳���Ҕ�ȏ��˗��Z�������ꉟ��h�@���Z���X������N���ÖZ��驒L�L���Q�k�ŚT���G���i���֙�����↝B�ގE���ِېߐ����������C��G����ዙ��Н�[�T�����אɐ͐Ȑǝ��A�����⣛p蔞��t��d�C�N���ӟ׈��ߙ�Eᝎa���x������㙘��A�����_�b����a���J����ஓϛ��Ƙj�b�H��ⳙA�G�S���L⒑W�s�r��������D�J�A�L��񙒐�枙@�ۑM���H����l�F�K�����D�G�@�B��h�坡�ǑN�����d�D��������I���扙��|���œҝ�ᝩ��⫟Ő�ꎖ�����������v�R�ΐ����y���H�����������`�Ր��������ǍU���}�����[���������҂���z���K�M�z����ⱟJ��㖍������I�����H���E��z�b�o�����x�ܗ��A�ϕ��D�B��ӏ��~���������B䱌s���Z�Y�㙬��ᯞ���ӛ��M�֌N���v������K�@����{���^���Z��퐾�^����������鶔�ňʈ��U�Ñq�������C�~���X�V�T�R�U�W�S�܉_�w�o�^�������鿌~���G�F䇚��`�p�����Y�������۞����ƌI����Әޚ��P�M�������u���o�Ӎ����������c�������q�v�E�|―���ꋀ��Ῑ܌J�ɍC�g�����{�m�������X�؍H���ᜁ��v�㜜���ҙ��g���电�M���˂����捃����A�B������P������D���Y���`���L�������Z��迓��Ӟx���Z������l���W�������ȓ��������G�F�a�Ǝb����乗��M�E�Ε��s�C�F�n�����D�㈵㦋s�����]��Ŗl�^⚑����A潓��g���ߞΖ�儞����b���ɖΜ���臐w�p����d�����[��g�����謎�姎����^���G�������N���H���˒��ΐÎ������ᕹ���R����������K�\�ސˌ�K�Ž��������K����o���q�ҍ������t����������ϔ����O���ӎ��͚��͟��̍��b�A�j�P�֎��y�����ࡐ̝�咙��ݐ���┐Ԏ��^�ېΎގڎ����Y�ώՎˎΎɎԎߎЈޝ��i�S�G���CဋÎ����f�t偛W�V�z������题�����E�������f�����i�g�l�h�k�{��������蜕��婏o�F�����T��碏V�h�q�h�����F�J娏Q�K�����榚S����酝��n��������������S�X�K�U��ڏM�G�j���a�E�N�����O�D�C�A�L�R�T�W�I���H�B�@���M�����\�᭚�����忏w�{���v�x�s�⡏u�r�f�ݐ����Z���u���Vꐚp�y���曐P�]�A�������U�j�J��������f�Y�`�D����s橝ΐa�O��凓��c�j�c�ѐU�a�N�f�d��C�k���X���ĐL���T�Q�W�i�[�R�M�e�b�I�\�S�^�V���΋n�Z���o䜏���_�י|���䓏��w����򏎏����������ҟ����m䀛���u�L���Џ�������縐��מ�⪎™דɜ�����v���R�I���ߜ��c��B�_�џn���Ո䐯�����B辑����[�����K頏����[��␏���K♏����яҁ������u���i�]��疏֏Ӑ��Ԛ��А�躐���Ϗ��U���J���n���ސ��Ŝ܏��ߏ���Ꮟ����ُ������G���Ꮷ������ଞ������������������������͏Ǐ����ɏ����������Џˏ�暏Ώ��ďƏ��͏ڏ��؏ɏ����������T�l������\�e�g�����p�@�C�ܑ������D�I����冐B�����G���A�H�E�n❎o�m�o�w���v���L���U���������������h���n�ы��Ŏᎊ�t�r�@���{��������w���Ϛ`���������i�Аy�э��i�@�����E���J�X拎}�泛��n���y�o�N�Z�y���ٝ��f���j�{����~����|���{�o���ߘ��I�X�B�]�K�������V�g���u�������p����i���k���l��藘ʛ�Ɠ��j��⏎s��ꏎÎ��~��˔`���Œs��y�d�@���؎���䢊�Y�o�u�m���e�����ᘊ��y���NJ��r���݊��j���ƌy�����Ĉ�呁��e�A���i������������M�ʕr��P�T�M�v���ᚌ�ȍ��f�j�q�s�e�g�h�p�o�t�r����鹜��NJ����D�R���U�ğd��ᥛz�㕖�p�ȌڋA���ԓ�雛��_�B�ߗ��ދȋ�\�����Ί����͏ۋw�d�T��e�z�J�x���Ō`���ӌ^�����H���Ȕ����X��R㎎C���P���t������qK�Š������锯閟������@�����Њ��|��嶝^艔���噞J㹊��������{������歒S�������e顊��j舊����������s�Fጐ��d�P�}���g�����y�a�`�f����S�W���m���e����O���]�ݑ��ڙ̛����ň�����@����`�F�������O���P��\�[��g����ಉG�h���󓂞Њ����~�y�ۉ������}�q�����ɐ��͘����V�،����~ऐ����c���͌��b���w��u�x�v�i�X�Õ��L����ꖊ��G�K�Ə̓C魜S�R���Д߈����K�v���֓S哑t�������ݓk�������L�S�ښ��湛�誝����ᙚٚ]���d䡜����Q���I�v�n��跏ʜ������h���\�f�r�n�z�y�k�l�m�k�g�c�s�t�i�o�݉B�v�l�d���j�ߊg�q�u�p�m嵚��W������~�[�����Z�B���͙��G�r�q�ʟD�䠜j珞i������ƙd�^�񔐘��\�X����{�Ž\箊I�ؘ�����r�H�_���������j�~�F���׊@��E�m�����L�G���D�ŊA��������K����J����C�������I䯘��Yᷛe�p���՟��b�Nボ�錝A���Q���a��T㼛�㻛f�W�`�c洟a�����⻝q�j����鉙ɞ쏁㣎���V�늬�����M����ϊ�䅟��j���F�����r�������ȟ�綝��m���l���b���˙����_�x�����pᒔ����c�g����⭊��|�}�ۚ��ۊ��@�يΞ��؊��󊩐��Ҋ��@�����ʊ��Ş��̊��Ɋ��ƜA�L��萊ъ������ŠԊ׊��ՊĚ^���Ê��NJ����֊��͊������ϊ��w����x�s�q�P�g�ӊe�����a���㞎��ʼnؚĝ̎���d�ˉ��Z�Γ��ٌ����q�҃�����斉����v�q�Ўx�|�ۉԊ��Q���|����ўh�`��ܛ�����嘉������]�Ǝ؉�㟋�z�ɉÈՉʜ����F��荊����ЌC�a�{�����`�e�k�J�m�”ޚ썁�͉̉ώ����o����ז�◚D�S���l���όU���ґݙ͉щݙ��ljӌT��旞g�~�߉惕�砌����ĉ����ጜ����Ə�����戉Č͉ɂ��E�c���‹���ā����ى����q�S���G���B�J�H�x�w�[�`�T�I�r�������|�R�K�����V�F�O�^�Q�U�\�Z���A���Y�z���M�{�P�s�t�}���N�L�v�p�y���u���@�C�]���E�_�����~���D�􄩄��~���������������ԃ��q���X���W�ہA�C�F�N�Ջ��\�Ȑ��ߕϐڃJ�������������������R���V���Z�bC]\|�\_s*[�����]\|�b\_s*[�R�Z�N�V�J]\|��\_s*[�q����������]\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*�y\|��\_s*�m\|��\_s*�F\|��\_s*��\|��\_s*��\|�S\_s*��\|f\_s*o\_s*o\_s*t\_s* \_s*a\_s*n\_s*d\_s* \_s*m\_s*o\_s*u\_s*s\_s*e\_s* \_s*d\_s*i\_s*s\_s*e\_s*a\_s*s\_s*e\|��\_s*�C\|��\_s*��\|A\_s*\%(r\_s*c\_s*h\_s*i\_s*c\_s*h\_s*l\_s*a\_s*m\_s*y\_s*d\_s*e\_s*a\_s*e\|p\_s*i\_s*a\_s*l\_s*e\_s*s\)\|U\_s*m\_s*b\_s*e\_s*l\_s*l\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\|��\_s*��\|�}\_s*��\|��\_s*�@\|�O\_s*[�ȍ�]\|��\_s*[�ĘU]\|�P\_s*�y\|��\_s*��\|��\_s*[���X��]\|�~\_s*��\|�\_s*��\|�S\_s*[�Z��]\|��\_s*�h\|9\_s*[����]\|�^\_s*�{\|�Q\_s*�O\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*�|\|�T\_s*��\_s*��\|�T\_s*��\|��\_s*��\_s*��\|H\_s*e\_s*l\_s*l\_s*e\_s*b\_s*o\_s*r\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|��\_s*��\|J\_s*u\_s*g\_s*l\_s*a\_s*n\_s*d\_s*a\_s*l\_s*e\_s*s\|�Z\_s*��\|�n\_s*�_\|�s\_s*�q\|R\_s*h\_s*a\_s*m\_s*n\_s*a\_s*l\_s*e\_s*s\|�V\_s*��\|�]\_s*��\|�f\_s*[���l��]\|��\_s*�A\|�s\_s*[�m�E]\|��\_s*��\|L\_s*a\_s*\%(u\_s*r\_s*\%(a\_s*c\_s*e\_s*a\_s*e\|o\_s*i\_s*d\_s*e\_s*a\_s*e\)\|b\_s*i\_s*a\_s*t\_s*a\_s*e\|m\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\)\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|�~\_s*��\|��\_s*�t\_s*��\|��\_s*��\|��\_s*�_\|��\_s*�Y\|��\_s*��\|��\_s*��\|I\_s*\%(s\_s*o\_s*p\_s*y\_s*r\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|l\_s*l\_s*i\_s*c\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\)\|W\_s*i\_s*n\_s*t\_s*e\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|�`\_s*��\|�]\_s*[�X�]]\|�\_s*\%([�Ɨ���u�ʑ��Ɏ茓��]\|��\_s*��\|�[\_s*��\|��\_s*��\)\|��\_s*\%(�X\_s*��\_s*��\|��\_s*��\_s*��\)\|7\_s*��\|�V\_s*��\|��\_s*��\|4\_s*��\|�S\_s*[����]\|�R\_s*�{\|�\_s*�\|�h\_s*�t\|��\_s*[�ʈ�]\|��\_s*��\|�O\_s*\%(��\|��\_s*��\)\|�|\_s*[�“�]\|�A\_s*[�o��]\|��\_s*��\|B\_s*r\|��\_s*[�N�Y]\|�\_s*[���]\|�r\_s*[ꏎ�]\|�Q\_s*��\|��\_s*�Y\|�b\_s*��\|�c\_s*�e\|��\_s*��\|M\_s*\%(e\_s*t\_s*a\_s*c\_s*h\_s*l\_s*a\_s*m\_s*y\_s*d\_s*e\_s*a\_s*e\|u\_s*s\_s*a\_s*l\_s*e\_s*s\)\|Z\_s*i\_s*n\_s*g\_s*i\_s*b\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|S\_s*\%([eg]\|p\_s*e\_s*r\_s*m\_s*a\_s*t\_s*o\_s*p\_s*h\_s*y\_s*t\_s*a\|c\_s*i\_s*t\_s*a\_s*m\_s*i\_s*n\_s*e\_s*a\_s*e\)\|��\_s*\%(��\_s*�{\_s*\%(�I\|��\_s*�I\)\|��\_s*��\_s*�a\_s*��\_s*�W\)\|��\_s*�Z\|��\_s*�q\|�\_s*�\|�z\_s*��\|�R\_s*\%(�C\_s*�o\|��\_s*�q\|�z\_s*��\)\|�j\_s*��\|��\_s*��\_s*��\_s*��\|�r\_s*�C\|�b\_s*[����]\|��\_s*��\|�}\_s*��\|��\_s*\%(��\|�`\_s*��\)\|��\_s*[����]\|��\_s*��\|�V\_s*\%(��\|�l\_s*��\)\|��\_s*�q\|�|\_s*��\_s*��\|O\_s*x\_s*a\_s*l\_s*i\_s*d\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*[����]\|�\_s*�r\|�|\_s*��\|�\\_s*��\|�]\_s*��\|��\_s*�q\_s*��\|��\_s*[�a�y]\|��\_s*��\|��\_s*��\|E\_s*\%(b\_s*e\_s*n\_s*a\_s*l\_s*e\_s*s\|l\_s*a\_s*n\_s*a\_s*l\_s*e\_s*s\)\|��\_s*�R\_s*�q\|�\_s*�\|��\_s*��\|P\_s*\%(i\_s*p\_s*e\_s*r\_s*a\_s*\%(l\_s*e\_s*s\|c\_s*e\_s*a\_s*e\)\|t\_s*e\_s*r\_s*i\_s*d\_s*o\_s*s\_s*p\_s*e\_s*r\_s*m\_s*\%(a\_s*l\_s*e\_s*s\|i\_s*d\_s*a\_s*e\)\|o\_s*\%(t\_s*a\_s*s\_s*s\_s*i\_s*u\_s*m\|d\_s*o\_s*s\_s*t\_s*e\_s*m\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\)\)\|�y\_s*��\|�A\_s*�g\|�k\_s*�k\|�@\_s*��\|��\_s*�t\_s*��\|��\_s*\%(��\|�q\_s*��\)\|�\_s*�\|�\_s*�\|�Z\_s*\%(�c\|�C\_s*��\)\|��\_s*��\|��\_s*[���r]\|��\_s*\%([���_]\|�C\_s*��\|��\_s*�s\_s*��\_s*��\_s*�w\_s*�Z\_s*�p\_s*��\_s*�w\)\|�C\_s*[���G]\|(\_s*��\_s*)\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|�m\_s*\%(��\|��\_s*��\)\|�~\_s*��\_s*��\|�o\_s*�c\|�Y\_s*�t\|�_\_s*�o\|��\_s*�\|�B\_s*��\|�A\_s*��\|T\_s*\%(h\_s*a\_s*l\_s*i\_s*c\_s*t\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|u\_s*b\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\)\|��\_s*��\_s*��\_s*��\_s*��\_s*�u\|��\_s*��\_s*��\_s*�e\_s*�N\_s*�m\_s*�T\_s*�C\_s*�G\_s*��\_s*�X\|��\_s*��\|�X\_s*��\_s*�[\_s*�Y\|��\_s*�e\|�g\_s*��\_s*��\_s*�v\|c\_s*\%(e\_s*n\_s*t\_s*i\|r\_s*e\_s*s\_s*c\)\|��\_s*[�{��v�菻]\|��\_s*�G\_s*��\_s*��\_s*�Z\_s*�b\_s*�g\_s*�v\_s*�Z\_s*�@\|�T\_s*\%(��\_s*�`\_s*�[\_s*��\|�G\_s*��\|�C\_s*\%(�g\_s*�J\_s*�C\_s*��\|��\_s*�X\|�N\_s*\%([����]\|��\_s*\%(��\|�b\_s*�N\)\)\|�{\_s*\%(�E\_s*�Y\|�[\_s*�O\)\|�o\_s*\%(�[\|�l\_s*�e\_s*�B\_s*\%(�b\_s*�N\|�N\_s*�X\)\)\|��\_s*��\_s*�[\_s*��\|�_\_s*�[\|�t\_s*�@\_s*�[\|�l\_s*��\_s*�A\)\|�[\_s*\%(�e\_s*�B\_s*�t\_s*�B\_s*�P\_s*�[\_s*�V\_s*��\_s*��\|�N\_s*��\|�J\_s*\%(�X\|��\_s*�X\_s*�N\_s*\%(��\_s*�C\_s*�u\|��\_s*�v\_s*�V\_s*��\_s*��\)\)\|�L\_s*\%(��\_s*\%(��\_s*�[\|��\_s*�[\_s*\%(�^\_s*�[\|�V\_s*��\_s*��\)\)\|�b\_s*�g\)\)\)\|�}\_s*�h\_s*��\_s*�X\|��\_s*�\|�P\_s*\%([���A�C]\|�t\_s*�F\_s*�E\_s*�X\|�v\_s*�X\_s*�g\_s*��\_s*[����]\|�`\_s*��\_s*�b\_s*�v\|��\_s*\%(�^\_s*�E\_s*\%(��\|��\_s*�X\)\|�u\_s*��\_s*�b\_s*�W\)\|�[\_s*\%([�L�W�u�v�X��]\|�N\_s*�E\_s*�H\_s*�[\_s*�N\|�\\_s*��\|�^\_s*��\_s*��\_s*�O\|�p\_s*\%(�[\|�r\_s*��\_s*�e\_s*�B\)\|�V\_s*��\_s*�O\|��\_s*�[\)\|��\_s*\%(�g\|�x\_s*��\_s*�X\|�e\_s*�B\_s*�b\_s*�N\|�r\_s*\%(��\|�[\_s*�j\)\)\|�~\_s*\%(�J\_s*��\|�X\_s*�g\)\)\|�L\_s*\%(��\_s*�m\_s*��\|�v\_s*��\_s*�X\|�P\_s*��\|��\_s*\%([�C�[�A]\|��\_s*�F\|�r\_s*\%(�Y\_s*��\|�X\_s*��\)\|��\_s*\%(�X\|�b\_s*�g\)\|��\_s*�[\_s*�^\_s*�[\|��\_s*�\\_s*�[\|��\_s*\%(�[\|�E\_s*��\|�A\_s*�X\|�I\_s*�V\_s*�e\_s*�B\)\)\|�A\_s*\%(��\|�[\_s*��\|��\_s*�e\_s*�B\)\|�`\_s*��\|�g\_s*�T\_s*��\|��\_s*��\|�}\_s*�C\_s*��\|�b\_s*�J\|��\_s*�[\_s*�g\|��\_s*\%([�h�p�X�u����]\|�f\_s*\%(�B\|��\_s*�b\_s*�N\)\|�r\_s*\%([�A���l]\|�e\_s*\%(�B\|�[\_s*�V\_s*��\_s*��\)\)\|�x\_s*�c\|�o\_s*\%(��\_s*[�G�A]\|��\_s*�[\)\|�g\_s*��\|�V\_s*�[\|�T\_s*��\_s*��\|�^\_s*�s\_s*��\|�s\_s*\%(�g\_s*��\|�^\_s*\%(��\|��\_s*�Y\_s*��\)\)\|�v\_s*\%(��\|�V\_s*��\_s*��\|�e\_s*��\|�`\_s*��\)\|�Z\_s*\%(�C\|��\_s*�[\_s*��\)\|�b\_s*\%([�c�g�`�v]\|�T\_s*�o\|�X\_s*��\|�V\_s*\%(��\|��\_s*�O\|��\_s*\%(�[\|�u\_s*��\)\)\)\|�j\_s*\%(�I\_s*��\|�X\_s*�^\_s*�[\)\|�i\_s*��\|�m\_s*\%(��\|�[\_s*��\|�s\_s*�[\)\|�~\_s*�\\_s*�[\_s*��\|��\_s*\%(��\|��\_s*\%(��\|�b\_s*�g\)\)\|��\_s*\%(��\|�E\_s*�F\_s*�C\|��\_s*��\|��\_s*�C\_s*[���i]\|�b\_s*�g\)\|��\_s*�b\_s*�g\|��\_s*\%([�R�[�A]\|�o\_s*�[\|�u\_s*��\_s*�[\_s*�V\_s*��\_s*��\|�b\_s*�W\|��\_s*�O\)\|�Y\_s*��\)\|��\_s*\%(�R\|�X\_s*�g\|�V\_s*�^\_s*��\)\)\|��\_s*�p\|�`\_s*\%([�^�����}�A]\|��\_s*��\|��\_s*�[\|��\_s*�h\|��\_s*�j\_s*�[\|�R\_s*��\|�b\_s*\%([�v�N]\|�e\_s*��\_s*�I\|�^\_s*�S\_s*��\)\|�L\_s*\%(��\|�[\_s*�^\)\|��\_s*\%(�A\_s*�u\_s*��\|�[\_s*�C\_s*��\_s*�K\_s*��\)\|�[\_s*\%([�t�g�v�N�Y]\|�p\_s*�[\|�^\_s*�[\)\|�F\_s*\%([���X�J�R�A��]\|�U\_s*\%(��\|�[\_s*��\)\|��\_s*\%(�j\_s*�[\|�V\_s*�[\|�m\_s*�u\_s*�C\_s*��\)\|��\_s*\%(�[\|�X\_s*�g\|�b\_s*�V\_s*��\|��\_s*��\)\|��\_s*\%(�X\_s*�^\|��\_s*�R\_s*�t\)\|�r\_s*�`\_s*�F\_s*�t\|�_\_s*�[\|�`\_s*�F\_s*��\|�b\_s*\%([�g�N�J]\|�L\_s*��\_s*�O\)\|�C\_s*\%([�X��]\|�j\_s*�[\|�T\_s*�[\|�V\_s*��\_s*�O\)\|�[\_s*\%(��\|�U\_s*��\|�z\_s*�t\)\)\|��\_s*\%([�I�t�h�C���R���E]\|�c\_s*�l\|�N\_s*��\|�v\_s*�^\_s*�[\|�p\_s*�e\_s*�B\|�y\_s*\%(��\|�b\_s*�N\)\|�`\_s*��\|�l\_s*\%(��\|��\_s*�[\|��\_s*��\_s*�O\)\|�b\_s*\%([�N�g]\|�s\_s*�[\|�v\_s*\%(�}\_s*��\|��\_s*��\)\)\|�^\_s*\%(��\_s*[�C�[]\|��\_s*��\_s*�O\)\|��\_s*�}\_s*�[\_s*�X\|��\_s*��\_s*�W\|��\_s*��\|�[\_s*\%([�`�^�g���W]\|�r\_s*��\|�~\_s*\%(�[\|��\_s*�O\)\|��\_s*�[\|��\_s*\%([�Y�X]\|�g\_s*��\)\)\|��\_s*��\_s*�S\)\|��\_s*\%([���R]\|�C\_s*�X\|��\_s*�X\_s*�L\_s*�[\|�[\_s*\%(�N\|�T\_s*�[\|�J\_s*�[\|�L\_s*��\_s*�O\)\|�S\_s*��\|�b\_s*\%(�v\|�s\_s*�[\|�p\_s*�[\)\|��\_s*�\\)\)\|��\_s*�W\|��\_s*��\|��\_s*��\|��\_s*\%(��\|�Y\_s*��\_s*�`\_s*��\)\|�p\_s*��\|�c\_s*\%(�@\_s*�[\|�B\_s*��\_s*��\|�F\_s*\%(�[\|��\_s*�j\_s*�[\|��\_s*��\)\)\|�Y\_s*�f\)', - \ 'D' : '\%([�다�h�b���r�a���ךǏ������t�B�N���{�����c�j���ۓ��Ó��̊��ӓ������ՓœǙI�������~�U�k���N���ӝ����^���}�X������駁́ߓ����ԓ��ӓ��V���W�������֓������W�{�ޙ�x�g�z�𗯗Z�^���m�v�w�ˎ~�y�ǎ��F≓��B����H�D�s�M��ϙ��u���������b�\�B�a�d�ƂŃd�ߐh���ȍj�Γ`�������s�����n�ˌ���g�˒ݕt�ВËl�}�ϒޘA�Ãa���ߗ͒n��������I�L���֓|�Z��睏����J���N�M��Ӌ��ҋ����x�J�يړ_�x�Ԓ|���������F�ڒD�E�U璒���i�N��Օ����n�m���聄��������Гْ̖U���[�g�h�k�i�f�c���d�e�j���Ǟ񐆘Ǒ�䶝\�śP�֑�蚑ʑ��[�������T�������ÞS�ɚ��k�o���Ĝ팚�[�P�c�˂������D���A�C�d\.�E�c���g�h�������\���B�����Ƃc�h�������_�W�D�f���„t��D]\|�\_s*\%(�\_s*�\|�\_s*�\|�\_s*�\|�\_s*�\|�\_s*�\)\|�b\_s*[�h�f�d�a�_]\|��\_s*[�ǂłÂ���]\|�\_s*�\|�s\_s*�X\_s*��\|��\_s*��\|S\_s*a\_s*u\_s*r\_s*u\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|C\_s*\%(u\|o\_s*p\_s*p\_s*e\_s*r\)\|��\_s*�V\_s*��\|��\_s*��\|�@\_s*��\|�\_s*�\|�Y\_s*��\|�S\_s*�t\_s*��\|��\_s*��\|��\_s*��\|��\_s*[�t��]\|�\_s*��\|�\_s*�\|��\_s*[�I��]\|�\_s*�\|�m\_s*�b\|�x\_s*��\|��\_s*�q\|��\_s*�q\|�\_s*�\|��\_s*�K\|��\_s*�\|��\_s*�B\|�R\_s*��\|��\_s*��\|��\_s*�k\_s*�B\_s*��\|��\_s*\%([���Ɍ�]\|��\_s*�L\|��\_s*�V\_s*�c\|��\_s*\%(��\|��\_s*�b\)\)\|�T\_s*[���B]\|��\_s*��\|��\_s*�|\|��\_s*\%(��\_s*��\|�\_s*�f\_s*�[\_s*�^\_s*�x\_s*�[\_s*�X\)\|�R\_s*��\_s*��\_s*�r\_s*�A\|�Y\_s*\%(��\_s*�[\_s*�X\|�b\_s*�N\)\|�C\_s*��\_s*�J\|��\_s*��\|��\_s*�m\|��\_s*��\|�s\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|�n\_s*�[\_s*�O\|��\_s*��\_s*��\_s*��\_s*��\|�j\_s*��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*�q\|�L\_s*�q\_s*�q\|�\\_s*�i\_s*��\|�[\_s*�b\_s*�P\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\|d\_s*\%(b\_s*m\_s*s\|e\_s*c\_s*\%([ia]\|r\_s*e\_s*s\)\|o\_s*u\_s*b\_s*l\_s*e\_s* \_s*i\_s*n\_s*c\_s*o\_s*m\_s*e\_s*,\_s* \_s*n\_s*o\_s* \_s*k\_s*i\_s*d\_s*s\|i\_s*m\)\|��\_s*��\)', - \ 'E' : '\%([�ኙ����P�G���ҋ�`�ܐ�ݑ����傉��滌ӏ^�Λ�����x������V�x�{�y�󔌜▒厝t㈉z郉u�Չv���w�t�����d�_���Qঢ়o���H��̟����џH�����v���鴉�䆉������`��腖��b膞Ł܉���⥟��}�������|��������叉��͉�����������������l�����U�������~�����o���I�o�k���������t���Țz��瞱����i�͉j�o�ĉb�l��g�s�d�m繉e�r�f�h�n�c�i�ʉq���G�`���`�}�]㉈��Όd���l��˘��d����a�|��b�Ή�d�I�����������������������U�����́߁����Q���M�}�N���p�Ύ��I���łd���R�|�L���^�Ä��GE]\|A\_s*\%([�ʔ��^��]\|V\_s*\%(�@\_s*��\|��\_s*�D\)\|B\_s*\%(�^\|C\_s*��\)\)\|�`\_s*\%([�ʔ��^��]\|�u\_s*\%(�@\_s*��\|��\_s*�D\)\|�a\_s*�^\)\|��\_s*\%(��\|��\_s*��\)\|�O\_s*��\_s*��\|M\_s*�T\_s*�C\_s*�Y\|�l\_s*�T\_s*�C\_s*�Y\|�G\_s*�X\_s*�q\|��\_s*��\|�g\_s*��\|�E\_s*��\|��\_s*��\_s*�q\|��\_s*�y\|��\_s*�x\|��\_s*�H\|�x\_s*�\|��\_s*[�s��]\|��\_s*��\|�g\_s*�q\|�k\_s*\%(�T\_s*�C\_s*�Y\|�k\_s*�T\_s*�C\_s*�Y\)\|L\_s*\%(�T\_s*�C\_s*�Y\|L\_s*\%(�T\_s*�C\_s*�Y\|��\_s*��\)\)\|��\_s*\%([��仕Q]\|�m\_s*��\)\|N\_s*��\| \_s*n\_s* \_s*�p\_s*�`\|�m\_s*\%([�‹ɋ�]\|��\_s*��\|�g\_s*�j\_s*�z\_s*�[\_s*��\)\|��\_s*��\|�Z\_s*��\|��\_s*�X\_s*�r\_s*�[\_s*�H\_s*�i\|�r\_s*\%([�g���ȋ�]\|�T\_s*�C\_s*�Y\|�m\_s*��\|�e\_s*��\_s*��\)\|S\_s*\%([����]\|�T\_s*�C\_s*�Y\|N\_s*��\|F\_s*��\_s*��\)\|�q\_s*[���y]\|X\_s*\%([���r]\|O\_s*��\|��\_s*�F\_s*��\)\|�w\_s*\%([���r��]\|��\_s*�F\_s*��\)\|�A\_s*��\|�\_s*��\|C\_s*\%(l\|h\_s*l\_s*o\_s*r\_s*i\_s*n\_s*e\)\|�C\_s*\%(�V\|�W\_s*��\)\|��\_s*�s\_s*��\_s*��\_s*�x\_s*��\_s*��\_s*�c\_s*�c\|��\_s*�[\_s*�N\_s*�X\_s*�e\_s*�[\_s*�V\_s*��\_s*��\|��\_s*\%(�B\|��\_s*�b\)\|�^\_s*\%(�B\|��\_s*�b\)\|��\_s*�[\_s*��\_s*\%(�s\_s*�A\_s*��\|�b\_s*�p\)\|��\_s*\%(�A\_s*��\|�E\_s*��\_s*�s\_s*�E\_s*��\|��\_s*�C\_s*�J\|�[\_s*\%(��\|�m\_s*�X\|�j\_s*�X\|�W\_s*\%(��\|�[\_s*��\)\|�h\_s*��\|��\_s*�J\|��\_s*\%(�X\|�V\_s*�A\)\|�t\_s*\%(��\_s*�e\_s*�X\|�H\_s*\%(��\_s*�A\|�j\_s*�A\_s*��\)\)\|�N\_s*��\_s*�b\_s*�h\|�J\_s*��\)\)\|��\_s*�W\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|�d\_s*�q\_s*��\_s*\%(�C\_s*��\|�[\_s*��\)\|��\_s*�W\|�]\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|�S\_s*��\_s*��\_s*�T\|�J\_s*�v\_s*�Z\_s*��\_s*��\|�I\_s*\%(�[\|�C\_s*\%(��\_s*�[\|�Q\_s*��\)\)\|��\_s*�s\|�g\_s*��\|��\_s*�O\|��\_s*�Q\_s*��\|�A\_s*\%([���C]\|�j\_s*�h\|�[\_s*\%([�}�X��]\|�E\_s*�B\_s*��\|��\_s*��\|�j\_s*�[\|�l\_s*�X\_s*�g\|�~\_s*��\|�V\_s*�[\|��\_s*�[\)\)\|��\_s*��\|e\_s*\%(x\_s*a\|�R\_s*�}\_s*�[\_s*�X\|��\_s*�[\_s*�j\_s*��\_s*�O\)\|�C\_s*\%([�u���A���[]\|�W\_s*�F\_s*�N\_s*�g\|�t\_s*�F\_s*�N\_s*[�g�^]\|�R\_s*\%(�[\_s*��\|��\_s*�C\_s*[�Y�U]\)\|�v\_s*�V\_s*��\_s*��\|�~\_s*��\_s*��\_s*\%(�[\_s*[�g�^]\|�C\_s*�^\)\|�x\_s*��\_s*\%(�g\|�^\_s*�[\)\|�m\_s*�b\_s*�N\|�l\_s*�[\_s*�u\_s*��\|�M\_s*��\_s*�X\|��\_s*�O\_s*\%(��\_s*��\_s*�h\|��\_s*�b\_s*�V\_s*��\)\|�b\_s*�`\|��\_s*\%(�[\|��\_s*��\_s*�O\|�t\_s*�H\_s*��\|�z\_s*��\)\|�O\_s*�W\_s*\%(�b\_s*�g\|�X\_s*�g\)\|�N\_s*\%(�X\|�A\_s*��\_s*�e\_s*�B\)\|�X\_s*�t\_s*�@\_s*�n\_s*��\|��\_s*[���A]\|��\_s*\%(�[\_s*\%(�X\|�U\_s*�[\|�T\_s*�[\)\|�C\_s*\%(��\|�U\_s*�[\|�T\_s*�[\)\|�u\_s*��\)\)\|�E\_s*\%(�[\|�W\_s*�F\_s*�[\_s*�k\)\)', - \ 'F' : '\%([���[�Ή������M�֓~���y�`���[脟T����͈�j�͊ȎD�^����J㬐�䔕����b�X�����ʙ��������앶�|�����������������t�y���M�D�����������⁃�����៻��������᳍Ę��W�o���K�����敖�lᆕ���p�������̐k⿕�谌�ꄜ��P�i霝c�������񕥕����h���u������C�����c�������ޔX���܊ܕ����t�e�������������w�t����X�����������s���b�•z�|�����ޘ��w�t�]�АU���㧘V�������o�\�v�ؕ���H��~��������[�������n���D�ҕ����B�y�G�z�o�t�{�ܕ��ݍ~�D���Y�u�@��缕����S��䘔��Y�}��䎙���ʖ|�ӓS���́��x�܋��ŕ��U��e�󕤕��U���ӄ��tF]\|�\_s*�\|�b\_s*�t\|��\_s*��\|��\_s*��\|�A\_s*�X\|��\_s*��\|��\_s*��\|E\_s*u\_s*p\_s*t\_s*e\_s*l\_s*e\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*��\_s*��\|��\_s*�i\|�}\_s*��\_s*��\|�C\_s*�f\|��\_s*\%(�C\|��\_s*[����]\)\|�_\_s*��\|��\_s*�C\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*�~\|��\_s*�c\|M\_s*y\_s*r\_s*t\_s*a\_s*l\_s*e\_s*s\|��\_s*[���R]\|��\_s*�t\|B\_s*u\_s*d\_s*d\_s*l\_s*e\_s*j\_s*a\_s*c\_s*e\_s*a\_s*e\|�k\_s*��\|G\_s*e\_s*r\_s*a\_s*n\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|�Q\_s*[�l�“�]\|�h\_s*��\|2\_s*\%([�l�“�]\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*��\|�~\_s*�~\_s*�~\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*�o\|I\_s*r\_s*o\_s*n\|��\_s*��\_s*��\_s*��\|�_\_s*��\_s*��\|�`\_s*��\|�z\_s*\%(��\_s*�C\_s*�G\|�C\_s*��\|��\_s*\%(�}\_s*\%(��\_s*�g\|��\_s*��\)\|��\_s*�A\_s*\%(�~\_s*�h\|��\_s*�f\_s*�q\_s*�h\)\)\)\|��\_s*�t\|��\_s*��\|�@\_s*�\\|��\_s*��\_s*��\|�C\_s*��\|�q\_s*\%(��\|��\_s*�[\_s*[�Y��]\)\|�P\_s*\%(�^\_s*��\_s*��\_s*��\_s*��\|��\_s*��\)\|��\_s*1\_s*�v\_s*�f\|��\_s*�s\|�n\_s*\%(�G\|��\_s*�u\_s*��\|��\_s*��\)\|�_\_s*��\_s*��\|��\_s*�g\_s*��\|�G\_s*�t\|f\_s*\%(e\_s*m\_s*t\_s*o\|o\_s*\%(n\_s*t\_s*-\_s*f\_s*a\_s*m\_s*i\_s*l\_s*y\|r\_s*t\_s*e\)\)\)', - \ 'G' : '\%([���E�D��ĉ�愍��܍��Ό���ᘭ���Ֆ��@�W龚����o�X�ߔ쐺���n�S�������΍���ᴊ��r���c��������穚�������ꇟ|�����ߍ�������@���ᛈ����䲎��ތ�T�Ɍ����党I⺌Ɍ��w�����5�ݒ��ܝ�z�q�x��Z��ߟ������驌���������Q��������|���k�⚔�nj}�~�|�Yꖚ��P��Ê���q���F����ῌ��V�Ȍ����������������������R������Z���������Ă��C���푐���򕳕ȍ��I�q�Ƒ���䣌��΋������X���{�������j㸌S�Q�R�����ԋ��H�F�ٕ���O����h�[���g�炮�ߌ��N��ۋ����ًҚ�����⚝�����f��耋ʋ����ꟋČ�����C���z�邙F�‹ƋŋÍs�ኋs�t�C�`�U�Z�؋W�ً]�b�X��V�^��E㺙E��a�a���[���c�V���~���؞Fซ\�E鰋_�Y����雎��_�������W�d᥍m�A�Ԑ�݊��v�瑤�ʊ����Ō꓁��^�`���e�����q寊����I�P�}�d�j�k�h�����G��_�~��������팵�ћǘ�����ݙʊہ���꜋��܊���������ߌ����猎��怞ْ՚�罛|�{��Ӝ��ԙ��k�z�x�{�y�w���G�U��������N᳜����ȟ򛻈�R�P�n᫊Y�P�K�w䈊H�V�Q�Z�S�X�M�T�W�[�O�㛴��䃖�A���b�ϊ��|��M���`��P��G�ؙމʉ�딃���a���͉�䮏�����ɉ惕���ꏟ���@���⁄�f�����K�S�ԃ������҃��������ăσ����ǃ��ӃуɃ��̓˃Ճփ������ƒ��������΃Ã������ЃƃŃȃ����̃ʃ����M�O�Q�s�����CG]\|�\_s*\%(�\_s*�\|�\_s*�\|�\_s*�\|�\_s*�\|�\_s*�\)\|�b\_s*[�S�Q�O�M�K]\|��\_s*[����������]\|�\_s*�\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*�~\|��\_s*��\|��\_s*�y\|P\_s*e\_s*r\_s*s\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\|��\_s*��\|��\_s*�s\_s*��\|��\_s*�q\|�H\_s*��\|��\_s*��\|��\_s*��\_s*��\|�~\_s*��\|�i\_s*\%([�ԉ�]\|�V\_s*��\)\|�P\_s*��\_s*��\|�]\_s*\%([�ÌΏ��B]\|�k\_s*��\)\|��\_s*[���`]\|�\_s*�\|�w\_s*�\|�i\_s*�F\|��\_s*��\|��\_s*��\|�m\_s*��\|��\_s*��\|��\_s*[����]\|��\_s*[���ō�]\|��\_s*��\|��\_s*�E\|�\_s*�\|�~\_s*��\_s*��\_s*�F\|�H\_s*��\|��\_s*[��Ս��i]\|�g\_s*�@\|�\_s*�\|�{\_s*��\|��\_s*\%([�알]\|�Z\_s*��\)\|��\_s*\%([�@����]\|�s\_s*��\_s*��\|��\_s*��\_s*�@\)\|A\_s*g\|S\_s*\%(c\_s*r\_s*o\_s*p\_s*h\_s*u\_s*l\_s*a\_s*r\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\|y\_s*m\_s*p\_s*e\_s*t\_s*a\_s*l\_s*a\_s*e\|i\_s*l\_s*v\_s*e\_s*r\)\|��\_s*�c\|��\_s*��\_s*�J\|��\_s*�t\|�L\_s*�q\|�Y\_s*��\|�\_s*�\|��\_s*��\|T\_s*y\_s*p\_s*a\_s*l\_s*e\_s*s\|��\_s*[��]\|��\_s*��\_s*��\|��\_s*��\|��\_s*�q\|��\_s*�^\|�b\_s*��\|��\_s*��\|g\_s*\%(i\_s*g\_s*a\|h\_s*o\_s*s\_s*t\_s*s\_s*c\_s*r\_s*i\_s*p\_s*t\)\|�k\_s*�[\|�j\_s*��\_s*�[\_s*�Y\|��\_s*��\_s*��\_s*��\|�m\_s*�[\_s*��\|��\_s*�i\_s*��\_s*��\|�A\_s*��\_s*��\_s*�R\_s*��\_s*�i\_s*��\_s*��\|�q\_s*��\|�N\_s*�b\_s*�p\|��\_s*�q\|�n\_s*�{\_s*��\_s*�[\_s*�l\|��\_s*��\|�G\_s*�[\_s*�e\_s*�{\_s*��\|��\_s*�[\_s*�e\_s*�{\_s*��\|�C\_s*�F\_s*\%(�[\_s*�e\_s*�{\_s*��\|�e\_s*�{\_s*��\)\|��\_s*��\|�w\_s*\%(��\_s*��\_s*�h\|��\_s*�}\_s*��\)\|�h\_s*�C\_s*�c\|��\_s*�g\_s*�v\_s*��\|�[\_s*\%(��\_s*\%(�`\_s*��\|�j\_s*�E\_s*��\)\|��\_s*�N\_s*��\_s*�b\_s*�v\|�m\_s*�A\|��\_s*�g\_s*��\_s*�}\_s*��\|�l\_s*\%(�R\_s*��\|��\_s*\%(��\|��\_s*�X\_s*�g\)\)\)\|��\_s*\%(��\|�w\_s*�@\_s*��\)\|�W\_s*\%([�����W�O�m�i�I���[]\|�v\_s*�V\_s*�[\|�A\_s*��\|�C\_s*�h\|�b\_s*�h\|�^\_s*��\|�[\_s*��\|��\_s*�A\_s*��\|��\_s*�b\_s*�g\|�S\_s*��\|��\_s*\%(�t\|��\_s*\%(�h\|�f\_s*�B\_s*�[\_s*�m\)\)\|��\_s*\%(�[\|��\_s*�h\)\|�o\_s*��\_s*�V\_s*�[\|�u\_s*\%(��\|��\_s*��\_s*�^\_s*��\)\|�x\_s*\%(��\_s*�i\_s*�E\|��\_s*��\_s*��\)\|�l\_s*�b\_s*�g\|��\_s*\%(�b\_s*�g\|��\_s*�@\_s*��\_s*[�j�i]\|�o\_s*��\_s*[�j�i]\|�R\_s*\%(�[\_s*�\\|��\_s*�_\)\|��\_s*\%(�W\|�_\_s*�[\_s*�m\)\|�[\_s*\%(�W\|�[\_s*�b\_s*�g\)\)\|��\_s*\%(��\|�C\_s*\%(��\|��\_s*�Y\|�A\_s*��\_s*[�c�g]\)\|�R\_s*\%(��\|��\_s*�b\_s*�e\_s*�B\)\|�[\_s*�}\_s*��\)\|�j\_s*�[\|��\_s*\%([���l]\|�[\_s*�b\_s*�y\|��\_s*\%(�A\|�[\_s*�j\|�G\_s*�b\_s*�^\)\|�k\_s*\%(��\_s*�B\_s*�G\_s*�[\_s*��\|�r\_s*�G\_s*�[\_s*�u\)\)\|�F\_s*\%([�����t���}�l]\|�X\_s*�`\_s*��\_s*�[\|��\_s*�j\_s*��\|��\_s*\%(�[\_s*[�g���h]\|��\_s*\%(�h\|�f\_s*�B\_s*��\|�_\_s*�C\_s*��\)\)\|�~\_s*�j\|�j\_s*�[\|�m\_s*\%([�A�o]\|��\_s*�@\|��\_s*�[\_s*�Y\|�T\_s*�C\_s*�h\)\|��\_s*\%(�}\|�g\_s*\%(��\|��\_s*[�B�[]\)\|�_\_s*�[\)\)\)\)', - \ 'H' : '\%([Η�䀞��������L�N������{���w��ʔM���ܖS�Ŗy�j��壌u�������ׁ����󜓏c�����������]�K���g�֚��\✖{�x�j��c�����������ə�ᬖp�W���_���I�•���q�N�u�Y���ږQ���}䚑��N���闈������{�B�P��a����H��������K�A�O�f�D���G�̜d���M�O�E���v��L���C�󝻝��e�M�іk�M�~��O�۝e�Y�_�@����ꅜ��ƕ��n���ܒ��䐤���s�̕��J�������K��療�͌���������z�u���`�œL�K���������H�����Q�Q������ɕ����E憕��w����ǝ́ݕՕ��x�ҝG��⍖ݛQ���a�y�ْ؛i��͕���Û��z�˕r�������Ǖ•�������w�ӗ����ˌ�粂�̞��[�Ή������։A�~���y�`���[脟T�Ǐ͈�͊ȎD��^����J���㬐�䔕����b�X������䎟������앶�|�����������������t�y���M�D��������⁄���៻��������᳘��W�oB���K���敖�lᆕ���p�������̐k⿕�谌�ꄜ��i霘ŕ�������F�������Ӌ��h���u����ⷁ��������ޔX���܊ܕ��t�e���������w�t����X�������s���b�•|�����ޘ��w�t�]�АU���㧕����o�\�v�ؕ���H��~��������[�������n���ҕ����B�y�G�z�o�t�{�ܕ��ݍ~�D���Y�u�@��缕����S���x��Y�}�������V�_�~�Q�P�c���ݕA�S鯝ۏG��G�哘ǝ��|�ጄ�Չ��颕E�h�_�j�k�l㏟q�o���ĕn�p�m�g�i�׋����ʕf�g������R�ʒ��I�J���������������@���P��������v尗���z�h�啸���Ǐ��d�֐ċϏ������d�ΒP�ՓƑ��m���l1�P�u��ഁ����H�͏ݝf�ە��\�P�F�Ѝt鷑M���J焕S���АZ�O�z���n�I�Q�T䊌��Q�P��㟋��q���������W�j�G�E�g��ϏE�S���h������ꤊ��m���O�G�[�T�_�A�L���ѕN�D�J�L�C�Ȋ��l�J�C捍����r�M�K�u蹕U�H�~�q镕V��I�g�j�G�^�Y�~�Z�֙��d���[�ߕ]�W���\�{���_�u���y�i�w�����]�D�g����K��Γ�唛E��࿙���`�ݔߔ���B��ე����B�������ɞw������������혡���鏊�����]�X翔������枈��O���������澊�����|�������瀔�����O��ʎ������z�j�H���Ԍ�������㔈墏Ȑ��[�O�X���J��y������ّj��}�݋Е��o�����ޝ؏����՛��ދ@�@�T�m�����ה�������喗��I���j�Y���D���s���c�P�����Ĕ��J�`������e���]�똟�ƈ�n���n�G���|�F�ɐ�������ꡗI���z�y���t����妝p�������p�����S�����Ǘ����|杙�����b���r�@�؉���瞖z�d�X���x�X�򒌑����������\➁����^��⦔�����鼏��R�x�펾�њ�����虊���M�����ߍ��ϔ����A���ǝ������������唏��������R�����d�ʌv�}�є�������`��ڔ������񏉘o�@�W�����Iᢔ����@����������輔u�̝��ڛu�������v�i�`����ғ����t���\�E�C��p�Bᓔx�o�ޔy�w�W��p�r�q�s�D�z���W�֞��N����崔Νםa⛔����J���Í➷�^䗖}ፖ|���Y�K�唺�Ϟ��ٔ����͔�㆔הєŔ����Ǎ�ʔƔɔ̔Ĕ����Д����_�l�f�H�ǒp�ț�f�����Քb▗����t�����攇���j�ƞP�J���c���y�U�������h����H�ʔe�f��蘒[���������঎��c���Μ͔m���Ɯ���ꏐn�d����ډh�ޑ|���\��㵐��i�̈́��������������������������������������������g�]�t������g�q�z�w�nH]\|�\_s*[�����]\|�b\_s*[�z�w�t�q�n]\|��\_s*[�قւӂЂ�]\|��\_s*��\|�q\_s*�K\|��\_s*��\|�\_s*��\|�m\_s*[�F�C]\|��\_s*�}\|��\_s*[�ΐ�]\|��\_s*�{\|�S\_s*��\|�_\_s*��\|�p\_s*�K\|��\_s*��\_s*�F\|�g\_s*[��]\|T\_s*r\_s*i\_s*u\_s*r\_s*i\_s*d\_s*a\_s*l\_s*e\_s*s\|�\_s*��\|�\_s*�@\|�a\_s*��\|��\_s*�q\|�|\_s*\%(�\\|��\_s*��\)\|��\_s*��\|��\_s*�q\|��\_s*��\|��\_s*��\|��\_s*�Z\|h\_s*e\_s*c\_s*t\_s*o\|��\_s*��\|c\_s*l\_s*a\_s*u\_s*s\_s*t\_s*r\_s*o\_s*p\_s*h\_s*o\_s*b\_s*i\_s*a\|��\_s*��\|��\_s*��\|��\_s*��\|E\_s*\%(r\_s*i\_s*o\_s*c\_s*a\_s*u\_s*l\_s*a\_s*l\_s*e\_s*s\|u\_s*p\_s*t\_s*e\_s*l\_s*e\_s*a\_s*c\_s*e\_s*a\_s*e\)\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*�i\|��\_s*�C\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*�~\|f\_s*\%(o\_s*r\_s*t\_s*e\|e\_s*m\_s*t\_s*o\)\|��\_s*[���R]\|��\_s*�t\|�k\_s*��\|G\_s*e\_s*r\_s*a\_s*n\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|�h\_s*��\|��\_s*��\_s*��\|�~\_s*�~\_s*�~\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*��\|�]\_s*�c\_s*��\|��\_s*��\|��\_s*�I\|��\_s*�\|��\_s*��\_s*��\|��\_s*�@\|�_\_s*[����]\|�I\_s*��\|��\_s*��\|�i\_s*�a\|�\_s*�\|��\_s*\%([�l�o]\|��\_s*�o\_s*��\)\|��\_s*��\|��\_s*��\|�f\_s*��\|��\_s*�V\_s*�q\|�_\_s*[����]\|��\_s*�l\|��\_s*[�ƁX]\|��\_s*��\_s*\%(��\|��\_s*��\)\|A\_s*\%(s\|r\_s*s\_s*e\_s*n\_s*i\_s*c\|n\_s*g\_s*i\_s*o\_s*s\_s*p\_s*e\_s*r\_s*m\_s*a\_s*e\)\|��\_s*�f\_s*�]\|��\_s*��\_s*��\|��\_s*[�c��]\|��\_s*��\|��\_s*[�������B]\|��\_s*��\|��\_s*��\_s*��\|�h\_s*��\|�K\_s*�W\|��\_s*[�j�s]\|�e\_s*��\|�W\_s*��\|��\_s*�q\|��\_s*�q\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|�n\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|�`\_s*��\|��\_s*��\|N\_s*e\_s*l\_s*u\_s*m\_s*b\_s*o\_s*n\_s*a\_s*c\_s*e\_s*a\_s*e\|�o\_s*��\_s*�|\|��\_s*�E\|��\_s*��\|��\_s*[��]\|�y\_s*[�����t]\|�q\_s*[�f�C]\|��\_s*�t\|��\_s*��\_s*�l\|��\_s*��\|�x\_s*�q\|��\_s*�J\|��\_s*��\_s*��\|�Z\_s*��\|��\_s*��\|��\_s*�]\|�K\_s*[��q]\|�{\_s*\%(��\_s*��\|��\_s*��\)\|�E\_s*[���l]\|��\_s*�s\|�w\_s*��\|2\_s*\%([�l�“�]\|��\_s*��\|0\_s*��\)\|�Q\_s*\%([�l�“�]\|�O\_s*[�Γ�]\)\|�W\_s*�|\|8\_s*��\|�q\_s*��\|P\_s*\%(t\|o\_s*t\_s*a\_s*m\_s*o\_s*g\_s*e\_s*t\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\|l\_s*a\_s*t\_s*i\_s*n\_s*u\_s*m\)\|�C\_s*\%([��i�f����]\|��\_s*��\_s*��\|�f\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|R\_s*S\_s*I\|M\_s*\%(y\_s*r\_s*t\_s*a\_s*l\_s*e\_s*s\|e\_s*r\_s*c\_s*u\_s*r\_s*y\)\|�F\_s*��\|��\_s*�a\_s*�_\_s*��\|�E\_s*�[\_s*�S\|��\_s*\%(�[\|�y\_s*�[\_s*��\|�x\_s*�[\_s*��\|�C\_s*�X\_s*�}\_s*��\_s*�X\|�S\_s*�[\|�O\_s*�m\_s*�[\|�}\_s*�j\_s*\%(�e\|�X\_s*[�g��]\)\)\|��\_s*��\|�\\_s*�Z\_s*�i\_s*��\|��\_s*��\|��\_s*�`\|�C\_s*\%(�_\_s*��\_s*�S\|�X\_s*�p\_s*�j\_s*�A\|��\_s*�[\_s*��\|�G\_s*��\)\|�I\_s*\%([���[]\|�i\_s*�[\|�m\_s*��\|��\_s*�t\_s*��\_s*�[\_s*��\|�l\_s*\%(�X\_s*\%(�g\|�e\_s*�B\)\|�Q\_s*��\)\|�e\_s*��\|��\_s*�K\_s*�[\|�}\_s*�[\_s*�W\_s*��\)\|�A\_s*\%(��\_s*\%(��\|�x\_s*�[\_s*��\)\|�l\_s*�X\_s*�g\|��\_s*�[\|�_\_s*�}\_s*�[\_s*��\|�V\_s*�F\_s*�b\_s*�g\|�r\_s*�^\_s*�V\_s*�I\_s*��\|�[\_s*\%(�l\_s*�X\_s*�g\|�m\_s*��\_s*�N\_s*�[\_s*��\)\)\|�G\_s*\%(�f\_s*�B\|��\_s*��\_s*�P\|��\_s*\%(�i\|�[\_s*�k\)\|��\_s*�C\_s*�[\_s*�Y\|�N\_s*�g\_s*��\|��\_s*\%(�Q\_s*��\|��\_s*�F\|��\_s*�X\|�}\_s*��\|�~\_s*\%(�b\_s*�g\|�[\_s*�g\)\|�u\_s*��\_s*��\|�i\_s*��\_s*�f\_s*�X\|�L\_s*��\_s*�[\_s*��\)\|�m\_s*�N\|�b\_s*�`\|�C\_s*�`\)\|��\_s*[�╽�f]\)', - \ 'I' : '\%([����ʼn~��ꍘc�U�T���������n�������翔�䑌��폒������恍ݍ��������r�x�������É��j囚|���d�Q�U���|��軗��Ƒ������B�d���{��佈�S�\嫉�䆍��m�n�ؐF���A�t����F������泌Ìމ��L�����d�������ƜјJ���i��ꌒ��Օa�k�v����ɔžo���������֌��y������M�E���|�ځ��e�퐈�M����臐��Y���O�����ΖZ�}��x���א򌵉��M�Ձ��O䗚P�{���b�������~�N�}�z�c���c�t��硉Ɏ������䕟J����s�W���]�b�K�\���Tฐ��]�r����m�П��Ȉ��Z���Ԉ��T�M�ΚÉ����C����������m��覉@������u�B�A�A�ޛ���j�H���و�Ί�ֈ�Y�È�1�P�����D�y���I��D�R������۔џ��ʈዏ�H�ƍ֋U�������h�w�ψ͉]����}�u�b�v���]�Ό��≝�g�М�@�E���S��盈���B�Ο��ݑP�����R�҈Ȋ��ՉU�ג��ߛߘߛ��ږ����ˆ̈،܈Η��͜}�Ė��ˈ��ԍs਒_�ˑ��������ޗǓ��o�֗��D�K���~�������䏈ӈۈ��؈ً����їe�����X�J�z�ˁ����������Ɉ�����D������聿�h�C�I���DŽy��I]\|E\_s*��\_s*�[\_s*��\|�a\_s*��\|J\_s*u\_s*n\_s*c\_s*a\_s*l\_s*e\_s*s\|��\_s*�R\|�c\_s*�J\|��\_s*��\_s*��\|�c\_s*��\|�G\_s*�s\|�\\_s*�Z\_s*��\|�Q\_s*�q\|�G\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|N\_s*a\_s*j\_s*a\_s*d\_s*a\_s*l\_s*e\_s*s\|��\_s*�G\|��\_s*��\|��\_s*�t\_s*��\|5\_s*[�“�]\|�T\_s*[�“�]\|��\_s*�E\|�r\_s*�U\|��\_s*��\|��\_s*�Y\|��\_s*�[\|��\_s*��\|�~\_s*��\|��\_s*��\_s*��\|�{\_s*��\|�o\_s*��\|��\_s*�g\|�Y\_s*[���q]\|�h\_s*[�‘�]\|�@\_s*��\|U\_s*r\_s*t\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\|�E\_s*[�c�R]\|P\_s*\%(o\_s*a\_s*l\_s*e\_s*s\|l\_s*u\_s*m\_s*b\_s*a\_s*g\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\)\|�a\_s*��\|�d\_s*\%(�`\_s*�r\_s*�s\|�u\_s*�d\)\|�C\_s*��\|�w\_s*�h\|��\_s*��\|�]\_s*[���o��Z]\|��\_s*��\|�K\_s*�{\|��\_s*�q\|�_\_s*��\|��\_s*��\_s*��\|��\_s*�r\_s*��\|G\_s*\%(l\_s*u\_s*m\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\|r\_s*a\_s*m\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\|i\_s*n\_s*k\_s*g\_s*o\_s*p\_s*s\_s*i\_s*d\_s*a\)\|��\_s*��\|�r\_s*��\|�s\_s*��\_s*��\|�o\_s*[�E����]\|�\_s*[�W�k]\|�C\_s*[�؎Q]\|��\_s*�\\|��\_s*��\_s*[�ΒY]\|�_\_s*�F\|�e\_s*��\|�p\_s*\%(��\|�g\_s*��\)\|��\_s*��\_s*��\|��\_s*��\|D\_s*i\_s*a\_s*p\_s*e\_s*n\_s*s\_s*i\_s*a\_s*l\_s*e\_s*s\|��\_s*[����]\|<\_s*=\_s*=\_s*>\|�K\_s*�v\_s*�\\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*�{\_s*�A\_s*�C\_s*�E\_s*�r\_s*�[\_s*�E\_s*�G\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*\%(��\_s*��\_s*��\_s*��\_s*�w\|�W\_s*��\_s*��\_s*�@\_s*�\\)\|�t\_s*��\_s*�U\_s*�t\_s*�[\_s*��\_s*�G\_s*��\_s*��\|��\_s*��\_s*�q\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*�^\|��\_s*�m\_s*�[\_s*�h\|i\_s*\%(�A\_s*�v\_s*��\|P\_s*o\_s*d\|��\_s*�[\_s*�h\|M\_s*a\_s*c\|�m\_s*�[\_s*�h\)\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\)\|�A\_s*�[\_s*�@\|��\_s*��\_s*��\|�s\_s*\%([�”@��]\|�[\_s*��\)\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*�S\|��\_s*\%(�A\_s*��\|�V\_s*�t\|�[\_s*�h\|�E\_s*�f\)\|�A\_s*\%(�C\|�[\_s*\%(��\_s*�B\_s*��\|�r\_s*��\)\|��\_s*\%(�v\_s*��\_s*��\_s*�v\_s*\%(�`\_s*��\|�e\_s*��\)\|�f\_s*�p\_s*��\_s*�_\_s*��\|�t\_s*�H\_s*��\_s*\%(��\_s*��\|�}\_s*�e\_s*�B\_s*�[\_s*�N\)\)\)\)', - \ 'J' : '\%([���󓈎ȓ��������ǎ����w�x�����H���Û�����K���������H�Ԙ�ᶙ��b�����i�u�@�v�ސn�Չ`�r�x�����o�s�q�w�p�t�l�ŏ��ғ�䴞`䥝�募��t�J����珊�R���������P�����ԟ��i�Uㅏ��{�o������媝m�h���鈐������Y�t��������Y����竐������j�g�@������Ï��ꏗ�����`������~�]�吷�꞊��󝵏������������������G�����A�ژh�G�Q榜휵���@���u���Q�x�h�m��n���p�q���m�m⢙Ï��|⡓���՟��~�[�x����{䤏��z���������y�}�������}��汎�������������G�����E�s���n�𘸏^�F�_�`���O�c�a�_�Y���[�b�]�\�Z�e�d�����m�����������莣���^���y�~�����������i���J玎�������Ȓn�����􎤎��~�������I�m�������V�����k�q���H�j�a�Z���d��������䢎������m���ݝ������������苎Ҏ׋Y�l�������������������D�u�E���`�������_�i�v�F�J�W�zJ]\|�\_s*�\_s*�\|�b\_s*�W\|��\_s*��\|G\_s*\%(��\_s*��\|�p\_s*��\)\|Z\_s*\%(r\|i\_s*r\_s*c\_s*o\_s*n\_s*i\_s*u\_s*m\)\|D\_s*y\|�f\_s*\%(��\_s*��\|�p\_s*��\)\|�x\_s*�x\|��\_s*��\|�c\_s*��\_s*\%(��\_s*��\|�c\_s*��\)\|�Q\_s*��\|2\_s*��\|��\_s*�q\|�b\_s*��\_s*��\_s*��\_s*��\_s*��\_s*�M\_s*�h\_s*�p\_s*�\|k\_s*\$\_s*_\_s*{\_s*e\_s*f\_s*f\_s*}\_s*\$\|�[\_s*\%(��\|��\_s*��\)\|�`\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|�R\_s*�l\|�y\_s*�_\|��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*�r\_s*��\|��\_s*�v\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[���@�S����������]\|C\_s*a\_s*b\_s*o\_s*m\_s*b\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|��\_s*�q\|��\_s*��\|�P\_s*\%(�Q\|�O\_s*[�i��]\|�P\_s*��\|�U\_s*�i\|�W\_s*��\)\|�t\_s*��\|��\_s*��\|�R\_s*��\|1\_s*\%(0\|1\_s*��\|8\_s*��\|2\_s*��\)\|�\_s*�\|��\_s*��\|��\_s*��\|��\_s*��\|�O\_s*��\_s*��\|��\_s*��\|�G\_s*��\|��\_s*��\|��\_s*�q\|��\_s*��\_s*��\_s*��\_s*��\|j\_s*\%(T\_s*e\_s*X\|L\_s*a\_s*T\_s*e\_s*X\|B\_s*i\_s*b\_s*T\_s*e\_s*X\)\|�[\_s*��\_s*�[\|�G\_s*\%(�z\_s*�o\|��\_s*�R\|��\_s*�~\_s*��\|��\_s*�T\_s*��\_s*��\|�b\_s*�T\_s*�C\)\|�w\_s*\%(��\_s*�X\|�X\_s*�X\)\|�q\_s*��\_s*�l\_s*�X\|�`\_s*�Q\|�k\_s*��\_s*��\_s*�[\_s*\%(��\|��\_s*�w\_s*�Z\_s*�p\_s*��\_s*�w\_s*�@\_s*��\_s*�w\)\|�n\_s*\%(�C\_s*��\|��\_s*�y\_s*�[\_s*�j\_s*��\)\|��\_s*��\|��\_s*\%([�����j�i�[]\|�C\_s*��\|�G\_s*��\|��\_s*�m\|��\_s*�h\|�k\_s*\%(�X\|�V\_s*��\)\|�X\_s*�p\_s*�[\_s*�X\|�R\_s*[�r�u]\|�b\_s*�P\)\|�t\_s*\%(�@\_s*[���i]\|��\_s*[�I�A]\)\|�Y\_s*�{\_s*��\|��\_s*\%([�n���_�m]\|��\_s*�Q\_s*��\|�[\_s*\%([���m]\|�Q\_s*��\_s*�g\|�f\_s*�B\_s*�b\_s*�g\)\|��\_s*\%(�O\|�J\_s*�[\|�P\_s*��\)\|�s\_s*�e\_s*��\|�b\_s*[�J�V]\)\|�C\_s*\%(�G\_s*\%([�i�X]\|��\_s*\%(�X\|�Z\_s*��\)\|�Y\_s*�X\)\|�F\_s*\%(�i\|��\_s*\%(�X\|�Z\_s*��\|�[\_s*��\)\|�[\_s*�K\_s*�[\|��\_s*\%(�N\|�T\_s*��\_s*��\)\)\)\|�z\_s*\%([�^�Z]\|��\_s*�w\|�z\_s*�o\|�A\_s*\%(��\|�L\_s*��\)\)\|��\_s*\%([�u�i]\|��\_s*\%(�O\|�_\_s*��\)\|�G\_s*��\|�A\_s*\%(�q\_s*��\|�L\_s*��\)\|�[\_s*�t\|�[\_s*\%([�g�h]\|�f\_s*��\|�[\_s*�t\)\|�V\_s*\%(�t\|��\_s*�A\)\|�Z\_s*�t\|�n\_s*[�i���l]\)\)', - \ 'K' : '\%([����a���|�єV�Ҝ��D����ޏn�s���ߐ��E�}���Ĉ����ۗ�ⵘ�ᶎ��s���Ќ����f�����ꎖ������I���z�Eꑍ��C��欉��䓚䢐�ৎ��u�S�}�Y┍��ɗ`�n�����X���M���ȍ������뜝�k���������������卭�Ӎ��������e�W�E�Q�������L�m�՘i���՝��Q�f���肝K�����ਗ਼�Ჟ�騟����}�{㝛������ҟ������L���`�t�i���B�����R�������H��{ൟ������H�s秝���n�n�������˝J�ܔ�����X���L�J�y�ߛ��b�M褜���r�R���t莘m�j�E��硍h�k���l�K����ᦜ������n�K�}��֞��\��囍y��ෙ��Μˍx����u�X�S�e倘����J�i�^���V�@���A����W����G�D�T����`ᩍB��ԍp�]�i�P���I���z�t�_���K�k�O�j�R�w�U�u�P�a�I�|�q�s�m�r���c���D�ޞ��J�ܛ����w�L�΍���������W������ێ����ЛZ�Ö��s������烌��g���םs���ؑ������e��Ⰿ������u����Čٌ̟��]�|����V�����x�֒���绌я�嚙��h���ʉz�q�njԌך➳�Ҕ�Ï��˗��Z�������ꉟ��h�@�Z���e����s�|�q���W���O�׏b����]�{�Ȍ��t��Ә����n�K���P�B�����^���_�[���r����K�{����������C�������ՙL��ٜš������������w�������_�J���]���p��[�����i���N���J����y�������ʌ�����㮛ӌ��@���ę�������F鄌������������������������������Ō����������|�w���Z���Dờl����c⠞f���a犌l�_�Ϝl���g�����۝k�ڙ��㋜��d��P�n�������������������������������������������������������r�z������壌u�殌e�k�\�g��b�Y�p���]�v�[�R�����ق���Ɣz���ɟK�M�z������ⱟJ��㖍򍥛������I�����H���E��z�b�o������x�ܗ��A���D�B��ӏ��~���������B䱌s���Z�Y�㙬��ᯞ���ӛ��M�ֈϏ��v���L�����K�@����{���^���Z�򏾓�^�����������鶔�ňʈ��U�Ñq���������C�~���ܒw�o�^������鿌~�G�F䇚����`�p���̏L�Y���������ƌI��ގԚ��P�M�����E���u���{�O�����o�Ӟ������c�������H�E�|―�Ĝ����Ῑ܌J�ɍC�g����m�������؍H�ᜁ��v�����g�����M���˙�����i���w�G�J�r���z��W���_���_���l�o�C∋̛����m�����G��摞��d��~������焌N��۟A�@���^�ϛ��l�ɝh�h�f�k�e�i�D���܁ʁ��I������灓�}�E�B�W���b�\���W�����M�������񁝁{�P�����R�U�A���������_�G�����偅�X��������L�J�d�󁃁��Z���]�Q�����F���S���H�O�C���a���c�V���K���⁘�����T�^�����Ɂ����[�|�ၐ�򁪁��N�߁Y���䉌�s�׍@�ܞ��X�����������a�n�݋j�����~�g�����������ݜv⯝v�����������R�Ջڋ��[������a�z�ҝ��Ћی��׋؋ы͋ՋӋϋًދԋߋ֋ΉR����䐝����_�蝨⦘��c�`篋��ы��������������������Nj����������|�y㳛I⸋�蝜��^�t⧜t����������⁙K���Í�⟍[�s�����w���O�����v�S��O�v��h➍F�����������p�Z���i�g�݋������������x�������Z�Nj����]䰋������񋧋��������o��運����d�����������������������q�k����髟_�p�k�����������溂X����}���t瓌��Ë����u�Ӌ����y�Z���P�����|�l�{�v�����u���������x�~�}���z���Y��M��q���J�ƟC�����P���k����؋W���k���d�q�b���H�P���_���b���ᡚy�ɌV���c�ڑ��限�E�K���Y���R�_眎����M�u������������{�G�L�D�I�a���Ί��N�����h���X�ߛ��֗���W�B�뛞�����D�؋Q����恟���㲊��韀�u�����H�����ҋS������U昊����،���r�r�ʝu����M���F���^�����������J���B���Q�i�P���X�O�����ᘊ��y���NJ��r���݊��j���ƌy���Ĉꁽ�e�A���i������������M�ʕr��P�T�M���v��������rᚌ���f�j�q�s�e�g�h�p�o�t�r���ƒb��鹜��NJ����D�R���U�ğd��ᥛz���p�ȌڋA���ԓ�雛��_�B�ߗ��ދȋ�\�����Ί����͏ۋw�d�T��e�z�J�x���Ō`���ӌ^�����H���Ȕ����X��R㎎C���P��������q�Š������锯閊����@�����Њ��|�ȁ�嶝^艔���噞J㹊��������{������歒S�����e顊��j舊����������s�Fጐ��d�P�}���g�����y�a�`�f����S�W���m���e����O���]�ݑ��ڙ̛���������@�����F�������O���k�P��\�[�����ಉG�h�@���󓂞Њ����~�y�ۍ\�������}�����ɐ��͘����V��،����~ऐ����c���͌��b���w��u�x�v�X�Õ��L����ꖊ��C�G�K�ƓC魜S�R���Д߈����K�v���֓S哑t�������ݓk�������L�S�ښ��湛�誝����ᙚٚ]���d䡜����Q���I�v�n��跏ʜ������h���\�f�r�n�z�y�k�l�m�k�g�c�s�t�i�o�݉B�v�l�d���j�ߊg�q�u�p�m嵚��W������~�[�����Z�B���͙��G�r�q�ʟD�䠜j珞i������ƙd�^�񔐘��\�X����{�Ž\箊I�ؘ�����r�H�_���������j�~�_�F���׊@��E�m�����L�G���D�ŊA��������K����J����C�������I䯘��Yᷛe�p���՟��b�Nボ�錝A���Q���a��T㼛�㻛f�W�`�c洟a�����⻝q�j����鉙ɞ쏁㣟��V�뙁�����M��ϊ�䅟��j�F�����r�������ȟ�綝��m���l���b���˙����_�x�����pᒔ����c�A�g����⭊��|�}�ۚ��ۊ��@�يΞ��؊��󊩐��ҊȊ��@�����ʊ��Ş��̊��Ɋ��ƜA�L��萊ъ������ŠԊ׊��ՊĚ^���Ê��NJ����֊͊������ϊ��w����x�s�q�P�g�ӊe�����a���㞎��ʼnؚĝ̎���d���ˉ��Z�Γ��ٌ����q�҃�����斉����v�q�Ўx���|�ۉԌ����Q���|����ўh�`��ܛ�����嘉������]�Ǝ؉�㟋�z�ɉÈՉʜ����F��荊����ЌC�a�{�����`�e�k�J�m�”ޚ썁�͉̉ώ����o����ז�◚D�S���l���όU���ґݙ͉щݙ��ljӌT��旞g�~�߉惕�砌����ĉ����ጜ����Ə�����戉Č͉��ۂ����߄��������V���R���`���i���j�N�~���q�ԃL�J���K���{�P��K]\|�\_s*[�����]\|�b\_s*[�R�P�N�L�J]\|��\_s*[�q����������]\|�O\_s*��\|��\_s*��\|��\_s*��\_s*��\|�\_s*�J\|�H\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*�y\|��\_s*�F\|��\_s*��\|��\_s*��\|�S\_s*��\|M\_s*e\_s*t\_s*a\_s*c\_s*h\_s*l\_s*a\_s*m\_s*y\_s*d\_s*e\_s*a\_s*e\|f\_s*o\_s*o\_s*t\_s* \_s*a\_s*n\_s*d\_s* \_s*m\_s*o\_s*u\_s*s\_s*e\_s* \_s*d\_s*i\_s*s\_s*e\_s*a\_s*s\_s*e\|�O\_s*�A\_s*��\|�\_s*�u\|�\_s*��\|��\_s*��\|S\_s*i\|�\_s*��\|�S\_s*[�Z��]\|9\_s*[����]\|�^\_s*�{\|�Q\_s*�O\|��\_s*��\|��\_s*�|\|�T\_s*��\_s*��\|L\_s*a\_s*u\_s*r\_s*\%(a\_s*c\_s*e\_s*a\_s*e\|o\_s*i\_s*d\_s*e\_s*a\_s*e\)\|�T\_s*��\|��\_s*��\|c\_s*r\_s*e\_s*s\_s*c\|��\_s*��\_s*��\|H\_s*e\_s*l\_s*l\_s*e\_s*b\_s*o\_s*r\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|J\_s*u\_s*g\_s*l\_s*a\_s*n\_s*d\_s*a\_s*l\_s*e\_s*s\|�Z\_s*��\|�n\_s*�_\|�s\_s*�q\|�B\_s*��\|�z\_s*�n\|k\_s*i\_s*l\_s*o\|��\_s*[�q�V��]\|��\_s*��\|�m\_s*�F\|�\\_s*�\|��\_s*��\_s*��\|X\_s*e\|�@\_s*��\|��\_s*�s\|��\_s*��\|�f\_s*�n\|�\_s*�\|�\_s*�z\|G\_s*o\_s*l\_s*d\|A\_s*\%(u\|r\_s*c\_s*h\_s*i\_s*c\_s*h\_s*l\_s*a\_s*m\_s*y\_s*d\_s*e\_s*a\_s*e\|s\_s*t\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|c\_s*a\_s*n\_s*t\_s*h\_s*a\_s*c\_s*e\_s*a\_s*e\)\|�\_s*��\_s*��\|��\_s*��\|R\_s*\%(h\_s*\%(o\_s*e\_s*a\_s*d\_s*a\_s*l\_s*e\_s*s\|a\_s*m\_s*n\_s*a\_s*l\_s*e\_s*s\)\|u\_s*n\_s*u\_s*n\_s*c\_s*u\_s*l\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|a\_s*n\_s*\%(u\_s*n\_s*c\_s*u\_s*l\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|a\_s*l\_s*e\_s*s\)\)\|��\_s*��\|�e\_s*[����]\|�o\_s*[����]\|�j\_s*[����]\|�{\_s*��\|�n\_s*��\|�X\_s*\%([���]\|��\_s*��\)\|��\_s*��\|��\_s*�Z\|��\_s*�q\|��\_s*�T\|�\_s*�\|�z\_s*��\|�\_s*�x\|�R\_s*\%(��\_s*�q\|�z\_s*��\)\|�j\_s*��\|��\_s*��\_s*��\_s*��\|�}\_s*��\|��\_s*\%(��\|�`\_s*��\)\|��\_s*��\|��\_s*[����]\|��\_s*��\|�V\_s*\%(��\|�l\_s*��\)\|��\_s*�q\|�|\_s*��\_s*��\|O\_s*x\_s*a\_s*l\_s*i\_s*d\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*��\|�t\_s*��\|�\_s*�r\|��\_s*�Z\|�|\_s*��\|�\\_s*��\|�]\_s*��\|��\_s*��\|��\_s*�q\_s*��\|��\_s*[�a�y]\|��\_s*��\|��\_s*��\|E\_s*\%(b\_s*e\_s*n\_s*a\_s*l\_s*e\_s*s\|l\_s*a\_s*n\_s*a\_s*l\_s*e\_s*s\)\|��\_s*�R\_s*�q\|�\_s*�\|��\_s*��\|��\_s*��\|�y\_s*��\|�A\_s*�g\|�g\_s*��\|��\_s*�t\_s*��\|C\_s*\%([ormdfa]\|h\_s*r\_s*o\_s*m\_s*i\_s*u\_s*m\|i\_s*r\_s*c\_s*a\_s*e\_s*a\_s*s\_s*t\_s*e\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|u\_s*r\_s*i\_s*u\_s*m\|e\_s*r\_s*c\_s*i\_s*d\_s*i\_s*p\_s*h\_s*y\_s*l\_s*l\_s*a\_s*c\_s*e\_s*a\_s*e\|y\_s*p\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\)\|��\_s*\%(��\|�q\_s*��\)\|�\_s*�\|�\_s*�\|�Z\_s*\%(�c\|�C\_s*��\)\|��\_s*��\|��\_s*[�{��v��]\|��\_s*\%(��\|��\_s*�s\_s*��\_s*��\_s*�w\_s*�Z\_s*�p\_s*��\_s*�w\)\|(\_s*��\_s*)\|��\_s*�q\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|�m\_s*\%(��\|��\_s*��\)\|�~\_s*��\_s*��\|�o\_s*�c\|�Y\_s*�t\|��\_s*[�I�v�_]\|��\_s*�_\|�B\_s*��\|T\_s*\%(h\_s*a\_s*l\_s*i\_s*c\_s*t\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|u\_s*b\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\)\|�m\_s*\%([�u�E]\|�[\_s*��\|�b\_s*\%([�g�N]\|�e\_s*�B\_s*��\_s*�O\|�J\_s*�[\|�L\_s*��\_s*�O\)\)\|�i\_s*\%(�b\_s*\%(�N\|�v\_s*\%(�T\_s*�b\_s*�N\|�U\_s*�b\_s*�N\)\)\|��\_s*�b\_s*�W\|�C\_s*[�t�g�c]\)\|�j\_s*\%(�[\|�b\_s*\%(�g\|�e\_s*�B\_s*��\_s*�O\)\)\|�z\_s*\%(�[\_s*\%(�~\_s*�[\|��\_s*�C\)\|��\_s*�C\_s*�j\)\|�t\_s*\%(�r\_s*��\_s*�C\|��\_s*�V\_s*�`\_s*��\_s*�t\)\|�n\_s*\%(��\|��\_s*�V\_s*��\_s*�[\|�[\_s*��\|�o\_s*��\_s*�t\_s*�X\_s*�N\|��\_s*�c\_s*�[\_s*��\|�`\_s*��\_s*�g\_s*�D\_s*��\_s*�A\_s*��\)\|P\_s*\%(i\_s*p\_s*e\_s*r\_s*a\_s*\%(l\_s*e\_s*s\|c\_s*e\_s*a\_s*e\)\|a\_s*p\_s*a\_s*v\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|o\_s*\%(d\_s*o\_s*s\_s*t\_s*e\_s*m\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\|t\_s*a\_s*s\_s*s\_s*i\_s*u\_s*m\)\)\)', - \ 'L' : '\%([��H����F����D����B����@������P�Q���������ʁ��΁́Ƀ��k�ȃ����|�����L��L]\|�\_s*[�����]\|�b\_s*[�H�F�D�B�@]\|��\_s*[����������]\|�t\_s*��\|��\_s*��\_s*2\_s*��\_s*�@\|\.\_s*\.\_s*\.\|�f\_s*�F\|l\_s*-\_s*��\_s*��\_s*�g\_s*�[\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*�z\|��\_s*��\|�E\_s*�G\|��\_s*��\|�w\_s*�K\|�{\_s*��\|��\_s*��\|�_\_s*��\|��\_s*\%([�L�C�A�����u�{�g���E�X�R�S�O�[]\|�y\_s*�X\|��\_s*�[\_s*��\|�G\_s*�x\|��\_s*��\|�t\_s*�g\|��\_s*�J\|�x\_s*��\_s*�A\|�r\_s*\%(�[\|��\_s*�O\|�C\_s*\%(�X\_s*�g\|��\_s*�O\)\)\|�e\_s*�B\|�T\_s*��\_s*\%(�W\_s*�F\_s*��\_s*�X\|�[\_s*��\_s*�X\)\|�j\_s*�[\|�N\_s*��\_s*�A\_s*��\|�b\_s*\%([�W�^�e�g�N]\|�L\_s*\%(��\_s*�O\|�[\_s*�h\)\|�J\_s*�[\)\|�J\_s*�[\_s*��\|�P\_s*�[\_s*\%([�g�^��]\|�V\_s*��\_s*��\)\|�K\_s*�[\|�M\_s*��\_s*�O\|�W\_s*\%(�[\|�e\_s*�b\_s*�N\|�X\_s*�e\_s*�B\_s*\%(�N\|�b\_s*�N\)\|�J\_s*��\|�N\_s*�[\_s*��\|�b\_s*[�g�N]\)\|��\_s*��\|��\_s*\%([�S�O�_]\|�{\_s*\%(�N\|�b\_s*�N\)\|�o\_s*��\_s*�f\_s*�B\|�Y\_s*�f\_s*�[\_s*��\|��\_s*[�B�[]\|�W\_s*��\|�h\_s*��\)\|��\_s*\%(�A\_s*��\|�b\_s*�^\|�[\_s*�k\|�C\_s*��\|��\_s*\%([�\�X]\|�c\_s*�H\)\)\)\|\\\_s*L\_s*a\_s*T\_s*e\_s*X\|��\_s*��\_s*��\|�G\_s*��\|��\_s*\%([�B�Z�Y�U�T�X�_�|�������}�i�m���k�u�A�[]\|��\_s*�}\|��\_s*�h\_s*��\|��\_s*��\|�]\_s*�`\_s*�[\_s*��\|�R\_s*\%(��\_s*�X\|�s\_s*��\)\|�N\_s*�[\_s*�h\|�J\_s*\%(�[\|�I\_s*��\)\|�W\_s*[���[]\|�f\_s*[�B��]\|�h\_s*�J\_s*�C\_s*��\|�v\_s*�g\_s*��\|�p\_s*�[\_s*�[\|�O\_s*\%(�j\_s*��\|�i\_s*��\)\|�t\_s*\%([�G�g]\|�^\_s*�[\|�e\_s*�B\_s*��\_s*�O\)\|�e\_s*��\_s*[���V]\|�`\_s*�E\_s*��\|�\\_s*\%(�\\_s*�[\_s*��\|�O\_s*��\_s*�t\_s*�B\)\|�^\_s*�[\|�g\_s*\%([����]\|�}\_s*�X\|�A\_s*�j\_s*�A\|�O\_s*��\_s*�t\|�o\_s*��\_s*�X\_s*�L\_s*�[\)\|�I\_s*\%(�^\_s*�[\_s*��\|�l\_s*��\)\|�~\_s*\%(�e\_s*�b\_s*�h\|�b\_s*[�^�g]\)\|��\_s*\%(�[\_s*�W\_s*��\|�l\_s*��\|��\_s*�`\_s*�F\_s*�b\_s*��\)\|��\_s*�W\_s*��\|�L\_s*\%(�b\_s*�h\|��\_s*�[\_s*��\|�e\_s*��\_s*\%(�X\_s*�^\_s*�C\_s*��\|�V\_s*��\_s*�^\_s*�C\_s*��\)\)\|�G\_s*\%(�]\_s*��\|�[\_s*�W\_s*��\)\|�q\_s*�e\_s*��\_s*�V\_s*��\_s*�^\_s*�C\_s*��\|�l\_s*\%([�A��]\|�b\_s*�g\|�[\_s*�W\_s*��\)\|�j\_s*�A\|�x\_s*\%([����]\|��\_s*�A\|��\_s*�[\_s*�V\_s*��\_s*��\|��\_s*�e\)\|�r\_s*\%([�A�[]\|�h\_s*�[\|��\_s*�O\)\|��\_s*\%([�X�[]\|�u\_s*��\_s*��\_s*�[\_s*�i\|��\_s*��\|�h\_s*�~\_s*��\|�N\_s*�T\_s*��\_s*�u\_s*�[\_s*��\|�b\_s*�N\|�V\_s*�A\_s*��\|�~\_s*�G\_s*�[\_s*��\)\|��\_s*\%(�C\|��\_s*�O\_s*�E\_s*�F\)\|��\_s*\%(�B\_s*��\_s*�O\_s*�X\_s*�g\_s*��\|�@\_s*\%(�v\_s*�[\_s*��\|�C\_s*�A\_s*�T\_s*��\)\)\|�o\_s*\%(�e\_s*�B\|�^\_s*��\_s*�A\_s*\%(��\|�j\_s*�Y\_s*��\)\|�v\_s*�[\_s*��\|�C\_s*�A\_s*�T\_s*��\)\|�b\_s*\%([�h�s�v�^�N�`�g]\|�X\_s*��\)\)\)', - \ 'M' : '\%([ӊ�ߝ����ϙ~�E��ぞ���������I�J��䈐��Ўt�������u�q�v�U�p���ݑ���m�X�����ޖ��\���~���Җ����ߋ����̋��������b�f��{���e�����Җ۟��ٖ՟G������̞N���a�C�ܖS�֖іЖҖ����ێ�]���R�k�ᑔ�R�Ȗ͕�֞��G�̖Ύ��r������ݒ����W�Ϗ����ږӛR��ㅖG�̎����b�p�cᾖɖ˖�ǖȖʝ����Ŗ��Җ��ǖ�������ɓz��������������ї�㸋X���}���ٖ��V�񛘊[������|��r���m����籕S�}����絓ԘA�W�p�����~���׏@�����d����⚕ړk��J⥐���ĐI�ßz峒��������ۚ䖹�����ٖ��d�������Q����Z���x�x������������N���a�D�Y�K�I����������C���T�����Η����������������������X�O�̎S�Z������B���ݜD�X�����L�薦�ޑ��ْ��Á��v���p���x�z�E�G⊖����ɗΔF�����a�ϓ��r�ʘH�����韌Ύ��M倐�ᡞ��䪖��������s�{�S�A���Q���`�����֞�捐����v���P�閨��{�F�������Ŝ\���r�V�m�f���O�ϔ��[�[�p�����䖣�����Ȑg���ϖ�▕n�������aῖא\�ݟ{�f�B坏�㇓�㕓I帑��^�]�ߋ[���]�H�o�q�h������Ɖ������M���ϔ도�d�����h�ʉq�����������ږ��p��鞔C����䍕������̓h�|�{���Š�׈��w���l�e�����C�������d��ꠖq�x�f�����U��X���O�D�E�B��������K�j�i�~�ە��������בS�u�����Җ����K������w�Q�Җ��Ė����Ęd�G����簖��������ڞ_�a���J�Z�Ֆ�攉V�{顜���јԛ���I���ԙ��\�ݖ��ޖ��呾�G�����M�����������挫�D�󏫐�����������m�_�U䝔n�ݑ������ԕ������]�v�s���Җ����T�������֍��v�����ږ�ᄐ�ϐ^���d���șɎG�܌������򃀁ʁ܁�������ځ}���́΁ށ�ȁ����聹�偅�惢�ˁ������ہ́⁈�~�Ɂ���߁݁��䁾���֖��������Z���l�����|�}�Ń~���M����M]\|�\_s*[�����]\|�b\_s*[�������~�}]\|��\_s*[���߂ނ݂�]\|�g\_s*[�����t]\|�o\_s*\%([��n�e]\|��\_s*��\|��\_s*��\)\|�\_s*�o\|��\_s*�y\_s*\%(��\|��\_s*��\)\|��\_s*\%([�p�e�n]\|��\_s*��\)\|��\_s*�\|��\_s*��\|��\_s*��\|��\_s*�z\_s*��\|�k\_s*�~\_s*��\|��\_s*��\|��\_s*�p\|��\_s*��\|��\_s*��\_s*��\|O\_s*l\_s*e\_s*a\_s*l\_s*e\_s*s\|��\_s*�R\|��\_s*��\_s*��\|�j\_s*�E\|��\_s*��\|��\_s*[�N����]\|�n\_s*��\_s*�F\|�t\_s*��\|�J\_s*��\_s*��\|�v\_s*�w\|��\_s*��\|�z\_s*��\_s*�q\|�v\_s*\%([�����p�L]\|�`\_s*��\|�H\_s*�q\)\|��\_s*��\|�U\_s*��\|6\_s*��\|��\_s*�c\|��\_s*�w\|��\_s*��\|��\_s*�]\_s*�q\|�\_s*�n\|B\_s*\%(e\_s*r\_s*b\_s*e\_s*r\_s*i\_s*d\_s*a\_s*c\_s*e\_s*a\_s*e\|i\_s*o\_s*r\_s*r\_s*a\_s*g\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\)\|�Y\_s*��\|��\_s*�q\|k\_s*\$\_s*_\_s*{\_s*i\_s*n\_s*f\_s*}\_s*\$\|�t\_s*�m\|A\_s*\%(b\_s*i\_s*e\_s*s\|p\_s*e\_s*t\_s*a\_s*l\_s*a\_s*e\|c\_s*r\_s*o\_s*s\_s*t\_s*i\_s*c\_s*h\_s*u\_s*m\)\|�R\_s*��\|�\_s*��\|�e\_s*��\|�_\_s*[���q�`]\|�d\_s*��\|��\_s*��\|��\_s*��\|�c\_s*[�q����]\|3\_s*[�“�]\|�R\_s*[�“�]\|�p\_s*[�����q]\|��\_s*��\|��\_s*��\|�c\_s*��\|�C\_s*[�_�]�z�����I�R]\|P\_s*o\_s*d\_s*o\_s*p\_s*h\_s*y\_s*l\_s*l\_s*a\_s*c\_s*e\_s*a\_s*e\|�y\_s*[�����Y]\|��\_s*�s\|�[\_s*�]\|��\_s*��\|��\_s*��\|�e\_s*�O\|R\_s*u\_s*t\_s*a\_s*l\_s*e\_s*s\|�s\_s*\%(��\|��\_s*[�_�]]\)\|��\_s*�l\_s*�}\_s*��\_s*�m\_s*�X\|��\_s*�X\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[�X�Ў���]\|��\_s*��\|�S\_s*��\|��\_s*�h\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|�{\_s*�B\|��\_s*�v\|��\_s*[�o����]\|��\_s*��\|�}\_s*�n\|L\_s*o\_s*g\_s*a\_s*n\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*��\|��\_s*�b\|��\_s*�m\|S\_s*\%(a\_s*p\_s*i\_s*n\_s*d\_s*a\_s*l\_s*e\_s*s\|c\_s*h\_s*i\_s*s\_s*a\_s*n\_s*d\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\)\|C\_s*\%(a\_s*s\_s*u\_s*a\_s*r\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\|e\_s*r\_s*a\_s*t\_s*o\_s*p\_s*y\_s*l\_s*l\_s*a\_s*c\_s*e\_s*a\_s*e\)\|�|\_s*\%(��\_s*�l\|��\_s*��\)\|H\_s*a\_s*m\_s*a\_s*m\_s*e\_s*l\_s*i\_s*d\_s*a\_s*l\_s*e\_s*s\|��\_s*[�V��]\|��\_s*�F\|�S\_s*�j\|��\_s*�q\|��\_s*[�����P]\|��\_s*��\_s*�N\|��\_s*�v\|��\_s*��\_s*��\_s*��\|��\_s*-\_s*�q\_s*�m\_s*�`\|�j\_s*�[\_s*��\_s*�j\_s*�b\_s*�N\|�P\_s*��\_s*��\|��\_s*�c\|�a\_s*�z\_s*[����]\|��\_s*��\_s*�q\|��\_s*��\_s*�]\|�s\_s*[�K��]\|��\_s*��\|��\_s*\%(��\_s*��\_s*��\_s*�h\_s*�q\_s*��\_s*��\_s*��\_s*��\|�{\_s*��\)\|m\_s*\%(u\_s*l\_s*t\_s*i\_s*l\_s*i\_s*n\_s*g\_s*u\_s*a\_s*l\_s*i\_s*z\_s*a\_s*t\_s*i\_s*o\_s*n\|i\_s*\%(c\_s*r\_s*o\|l\_s*l\_s*i\)\|e\_s*\%(g\_s*a\|z\_s*z\_s*o\_s* \_s*\%(f\_s*o\_s*r\_s*t\_s*e\|p\_s*i\_s*a\_s*n\_s*o\)\)\|a\_s*\%(k\_s*e\_s*�t\_s*�@\_s*�C\_s*��\|d\_s*e\_s* \_s*i\_s*n\_s* \_s*J\_s*a\_s*p\_s*a\_s*n\)\)\|�v\_s*�Z\_s*�@\|��\_s*��\|�U\_s*�b\_s*�w\_s*��\_s*��\_s*�}\_s*�]\_s*�b\_s*�z\|�n\_s*�s\_s*�I\_s*��\_s*��\|��\_s*�s\_s*\%(��\_s*��\|��\_s*��\_s*��\)\|�C\_s*�m\|��\_s*��\|��\_s*��\|�G\_s*��\)', - \ 'N' : '\%([ɏC�҈�j�����M��l����A�j�������f���w�a�X��H�p�L�ՋH�]�`�k��c��䊉ѓ���o����ь���ْ��E�����{�J���W�@���ГT�K�鑥���͋X�I�N�����ӞG��c�I�X�^�]�\�_�������U�ޔW����ژ��Z�V�L���q��ہ|�Z�‚�Țˑ_�o�^�E����D�J�C�ꋑl�X�L���i���������s�M�JൔK���R�����_�Q�O�R�N���S�l���P��I�B�Q�ם������H���q����ǚ��\�啼�K���L刐@���z���X���ޓ����F�܍f�z�G�E�{�D���z�U�ѓh��Ɲ^吒S�����������L�����E���R�P�{�e�����֏��A�E���U�Д@���P���E��ɔB轟��W�����s�t��x�w�����Z�K���X�f�אn�E�͔D�F�C�l�����ʋѐ����V���_�����a���������玂Q�Ɠ����獐m�򎗉�2���O����r�W㊓��c����k�j�›�����D�T�l��S�V�Q�e�w���o���Ԏ������P�����Y���g糕�粓�Q�^�垙�����ĎC���������Ή������Y�ّӓ��H�a����Ë[�y����m�ܗG�X��Ɩ�Č`�Ɖr����ဗ��v����i�a�����������x�܏A���E�}�����V�Ύ����̔T�����R���f��훕����j����s�Ϟo�o��񁽁ˁ��K��⍉֚a�[���ߝ\�r�P���������n���T����ˆ��b�ޏ��L���ྒྷ�ލ؋������S���~���e�Ȅ��������������������������������������ޖ����������j�l�m�ʁ`���i�k�m���N�~��N]\|�\_s*[�����]\|�b\_s*[�m�l�k�j�i]\|��\_s*[�̂˂ʂɂ�]\|��\_s*��\|��\_s*�q\|��\_s*��\|�x\_s*�U\|��\_s*��\_s*��\|�\_s*��\_s*��\|�T\_s*[�|��]\|��\_s*�C\|�t\_s*��\|�g\_s*[���C]\|�j\_s*[����]\|��\_s*�]\|�L\_s*��\|��\_s*��\|�F\_s*�q\|��\_s*[�@���q]\|�P\_s*�q\|��\_s*�q\|��\_s*��\_s*��\|�h\_s*�V\|�q\_s*�|\|��\_s*�\_s*��\|��\_s*��\_s*��\|�m\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*�]\_s*�q\|�_\_s*��\|��\_s*�P\|I\_s*I\_s*��\|�^\_s*��\|��\_s*��\|��\_s*�\| \_s*2\_s* \_s*��\_s*��\_s*��\|M\_s*y\_s*r\_s*i\_s*s\_s*t\_s*i\_s*c\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*��\|��\_s*\%(�f\|��\_s*��\)\|�|\_s*�\|��\_s*�|\|��\_s*�T\|�s\_s*[����]\|P\_s*b\|L\_s*e\_s*a\_s*d\|�C\_s*[�ۑl]\|C\_s*\%(e\_s*l\_s*a\_s*s\_s*t\_s*r\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|a\_s*r\_s*y\_s*o\_s*p\_s*h\_s*y\_s*l\_s*l\_s*a\_s*l\_s*e\_s*s\)\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\)\|�|\_s*��\_s*��\|7\_s*[����]\|��\_s*��\|�n\_s*�k\|��\_s*��\|�s\_s*��\|��\_s*��\_s*�X\_s*�g\|T\_s*h\_s*e\_s* \_s*N\_s*e\_s*t\_s*w\_s*o\_s*r\_s*k\_s* \_s*I\_s*n\_s*f\_s*o\_s*r\_s*m\_s*a\_s*t\_s*i\_s*o\_s*n\_s* \_s*C\_s*e\_s*n\_s*t\_s*e\_s*r\|S\_s*o\_s*\%(l\_s*a\_s*n\_s*a\_s*l\_s*e\_s*s\|d\_s*i\_s*u\_s*m\)\|��\_s*\%(��\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\|�R\_s*��\|�t\_s*�H\_s*��\_s*�E\_s*�m\_s*�C\_s*�}\_s*��\|��\_s*�[\_s*�m\_s*�b\_s*�V\_s*��\_s*�E\_s*�t\_s*�H\_s*��\_s*�E\_s*�m\_s*�C\_s*�}\_s*��\|�I\_s*��\_s*��\_s*�_\|�A\_s*��\_s*��\_s*�J\_s*�l\_s*�b\_s*�g\_s*��\_s*�[\_s*�N\|��\_s*��\|��\_s*�_\|��\_s*�z\_s*��\|n\_s*\%(��\|a\_s*n\_s*o\|o\_s*t\_s* \_s*o\_s*r\)\|��\_s*��\|��\_s*��\|��\_s*�f\|�G\_s*�k\)', - \ 'O' : '\%([��ݜ��b�S�M�o�N�O�Ì��Q�������j�w�d���Њd�Y���n�����n���x��������遌��s�s��ና{��≬�ݕL�ڜ����P����؋������y���߁W�S�V�T�R�U�X�����y�􋳙{�E⫝������e���}�t���c�C筞��[�҉���x���^拑����`�q�`�Ɗx���s���N��˗��u���B�b���d�e�������Ȋe�퐊��K�ȉ��򚙁������a�C���O�������݈җ�㱕������z�v�\�d�ʋ������U���K�������������{�|�����w���S�^�����g�]㠟i�����������Ҝ����}�D���ᜳ��[�a�����Q��_�������N�R�������V�M�������ן^�q�቉��r�S�B��������������������蜊׉����W�ꉞ�ʜ䉆���W�T�g�����E���c�T�ٖQ���P�������ѕ���}���ʼn������Y�[���”��u���N�|���Ǜ�ܚǕ��ĐD�V�����E���j�v�ɋN�O���j������؟Ɍ䏏�֒�������Y�~���������щ��I�����偝���a���Ɂ��J�n���O�́��փ��I��O]\|��\_s*��\_s*��\_s*��\|��\_s*�p\|�\_s*�u\|�\\_s*��\_s*��\|�S\_s*��\|�C\_s*��\_s*�C\_s*��\|��\_s*��\|��\_s*�@\|��\_s*��\|��\_s*�\_s*��\|��\_s*��\|�n\_s*��\|��\_s*��\|��\_s*��\|��\_s*[�]\|��\_s*��\|��\_s*��\|�T\_s*[������]\|��\_s*[���q]\|�f\_s*[����]\|��\_s*[����]\|�H\_s*��\|��\_s*��\|��\_s*�C\|G\_s*u\_s*t\_s*t\_s*i\_s*f\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|D\_s*i\_s*l\_s*l\_s*e\_s*n\_s*i\_s*a\_s*l\_s*e\_s*s\|H\_s*y\_s*p\_s*e\_s*r\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\|��\_s*��\|�\_s*�p\|��\_s*[�q����]\|��\_s*�N\_s*��\|�{\_s*��\_s*��\|��\_s*��\|��\_s*�b\|A\_s*l\_s*i\_s*s\_s*m\_s*a\_s*t\_s*a\_s*l\_s*e\_s*s\|�K\_s*��\|��\_s*�l\|�\_s*�c\|C\_s*o\_s*p\_s*t\_s*i\_s*d\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|�o\_s*��\_s*�U\_s*\%(��\|��\_s*��\)\|��\_s*�m\|��\_s*��\|��\_s*�]\|��\_s*�g\|��\_s*��\|��\_s*��\_s*��\_s*�P\|�A\_s*[�z�n]\|��\_s*[�H��]\|�}\_s*��\|��\_s*�F\|�w\_s*�n\_s*�}\|��\_s*��\|�z\_s*[���i�m�q�x]\|��\_s*��\|�c\_s*[�_����]\|��\_s*�O\|�]\_s*�c\_s*[�ꕃ]\|��\_s*[�~�C��]\|��\_s*\%(�c\|��\_s*��\_s*��\|��\_s*�V\_s*�c\)\|��\_s*��\|��\_s*[�����G��]\|��\_s*��\_s*��\|��\_s*�m\_s*��\_s*��\_s*��\_s*��\_s*\.\|�G\_s*[����]\|t\_s*h\_s*e\_s* \_s*O\_s*b\_s*j\_s*e\_s*c\_s*t\_s* \_s*M\_s*a\_s*n\_s*a\_s*g\_s*e\_s*m\_s*e\_s*n\_s*t\_s* \_s*G\_s*r\_s*o\_s*u\_s*p\|��\_s*��\_s*�d\_s*�@\|�E\_s*��\|��\_s*�~\|�E\_s*\%(�B\|�[\_s*\%(�Y\|��\_s*��\)\|��\_s*�{\_s*��\_s*�X\)\|�o\_s*��\|�A\_s*\%(��\|�U\_s*�[\|�E\_s*\%([�`�g]\|�^\_s*�[\)\)\|��\_s*�{\_s*�\\_s*�t\_s*�g\_s*�E\_s*�F\_s*�A\|��\_s*\%(��\_s*[�N��]\|��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\|�_\_s*��\_s*�a\|��\_s*�\_s*��\|��\_s*��\_s*�_\_s*�f\_s*�j\_s*��\_s*��\|�`\_s*��\_s*��\|��\_s*�K\_s*��\|��\_s*��\|��\_s*�Z\_s*�q\|��\_s*��\|�_\_s*�f\)', - \ 'P' : '\%([�B�C�@����{�����s�ܕ��ە����y���~�Օҕ�糕ѕ�粛��ؕ����������z����C�U�ߕ[�i������ᢔ��������p�o�����Ǖ�ƔŔ���•������z�u�s�v�t���j�H�g�d���ω����Ղҁ}�{�Ճ��ӄ�����k����D�o�������E�_�v�|�Łj�i�݁��a�y�p�P�����Ӄ΃sP]\|�\_s*\%(�\_s*�\|�\_s*�\|�\_s*�\|�\_s*�\|�\_s*�\)\|�b\_s*[�|�y�v�s�p]\|��\_s*[�ۂ؂Ղ҂�]\|�\_s*�\|��\_s*�l\_s*��\|�\_s*�\|�O\_s*[�I�D]\|�\_s*�\|��\_s*�R\|��\_s*�D\_s*��\|�\_s*�\|��\_s*�`\|��\_s*��\|�\_s*�\|��\_s*�q\|�b\_s*\%(��\|��\_s*�n\)\|C\_s*y\_s*c\_s*l\_s*a\_s*n\_s*t\_s*h\_s*a\_s*l\_s*e\_s*s\|S\_s*y\_s*n\_s*a\_s*n\_s*t\_s*h\_s*a\_s*e\|�r\_s*��\|B\_s*r\_s*o\_s*m\_s*e\_s*l\_s*i\_s*a\_s*l\_s*e\_s*s\|L\_s*e\_s*a\_s*d\|��\_s*[�Ž���]\|�V\_s*\%(��\_s*�[\_s*�h\|��\_s*�V\_s*�r\_s*��\)\|�T\_s*\%(�[\_s*��\|�C\_s*\%([�Y�N�P�R]\|��\_s*�V\_s*�r\_s*��\|��\_s*�E\_s*��\|�L\_s*�b\_s*�N\)\)\|+\_s*��\|�z\_s*\%(��\|�X\_s*�Q\_s*��\)\|�q\_s*��\_s*�|\_s*��\|��\_s*\%(�z\|��\_s*�o\)\|�t\_s*\%(��\_s*�W\_s*�A\_s*��\|��\_s*\%(�C\_s*�W\_s*��\_s*�O\|�[\_s*\%(�Y\|�W\_s*��\_s*�O\)\)\|�^\_s*��\_s*�C\_s*��\|�H\_s*\%([�[���m�g]\|�{\_s*�X\|�r\_s*�A\|�X\_s*�t\_s*�@\_s*�[\|�j\_s*�[\)\|�@\_s*\%(�C\|��\_s*�I\|�[\_s*\%([�W�}]\|�~\_s*��\_s*�O\)\|��\_s*\%(�g\_s*��\|�^\_s*�Y\_s*[���}]\)\|��\_s*[�c�X]\|��\_s*�m\_s*�v\_s*�V\_s*�X\)\|�B\_s*\%([����]\|�W\_s*\%(�b\_s*�N\_s*�X\|�J\_s*��\)\|�[\_s*�r\_s*�[\|�b\_s*�V\_s*��\_s*�O\|��\_s*��\_s*��\|��\_s*�f\_s*��\_s*�t\_s*�B\_s*�A\|��\_s*\%([�X�[�A�p]\|�b\_s*[�v�p]\|�s\_s*\%(��\|�[\_s*�k\)\)\)\|�F\_s*\%(�[\_s*\%([�x�Y]\|�W\_s*��\_s*�O\)\|�C\_s*�Y\|��\_s*��\_s*��\|�j\_s*\%(��\|�b\_s*�N\_s*�X\|�L\_s*�A\|�[\_s*��\)\|�m\_s*\%(�L\_s*�V\|�[\_s*��\)\)\)\|�q\_s*��\|��\_s*��\|�^\_s*��\_s*�p\_s*�N\_s*��\|��\_s*��\|��\_s*��\_s*��\|�i\_s*�s\|�Z\_s*��\|��\_s*��\|��\_s*�Z\|��\_s*�`\|��\_s*��\|�^\_s*��\|�i\_s*��\|�J\_s*��\_s*�E\_s*��\|��\_s*��\_s*��\|�d\_s*��\_s*��\|��\_s*��\_s*�^\|�o\_s*�e\_s*��\_s*��\|�\\_s*��\_s*�t\_s*��\|�_\_s*��\|��\_s*��\_s*[���a]\|��\_s*��\|��\_s*��\|p\_s*\%(T\_s*e\_s*X\|H\_s*��\_s*�[\_s*�^\|e\_s*\%(t\_s*a\|r\_s*l\_s*�X\_s*�N\_s*��\_s*�v\_s*�g\)\|i\_s*\%(c\_s*o\|a\_s*n\_s*\%(o\|i\_s*s\_s*s\_s*i\_s*\%(m\_s*o\|s\_s*s\_s*i\_s*m\_s*o\)\)\)\)\)', - \ 'Q' : '\%([�z���ɟK�M�z�������՟J��㖍򍥛������I������H���E�d������z�b�o������x�ܗ��A���ϕ��D�C�B��ӊǏ��~�����������B䱌s���Z���Y�㙬��ᯞ���Ӊ��O�M�֌N�Ϗ��v����L�������K�@����{���^���Z�򏾓��^���A�����������鶊r��ňʈ��U�Ñq���𞀋������C�~���X�V�T�R�U�W�S�܉_�w�o�^�������鿌~�G�F䇚����`�p���̏L���Y�������۞����I���Ȋf�s��ގԚ��P�M�����E���u���{�[�O���֞��o�Ӎ����@�󞔐����ȓS�c�������������S�H�q�v�E�|―�Ĝ��v�ꋀ��Ῑ܌J�ɍC����g����틂�{�m�������{���X�؍H�������ᜁ���v�㜜���ҙ��g���电���M�͋��ˋ�������p�e�g�f�h��P�H�N��Q]\|�\_s*�\|�b\_s*�N\|��\_s*��\|��\_s*��\|�\_s*�\|�~\_s*��\|�\_s*��\|��\_s*�S\|�S\_s*[�Z��]\|��\_s*��\_s*�x\|��\_s*��\|��\_s*�h\|9\_s*��\|��\_s*��\|�^\_s*�{\|��\_s*��\|�Q\_s*�O\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|�V\_s*�l\_s*��\|��\_s*�|\|�T\_s*��\_s*��\|L\_s*a\_s*u\_s*r\_s*\%(a\_s*c\_s*e\_s*a\_s*e\|o\_s*i\_s*d\_s*e\_s*a\_s*e\)\|�T\_s*��\|��\_s*��\|c\_s*r\_s*e\_s*s\_s*c\|�C\_s*��\|��\_s*[�{��]\|��\_s*��\_s*��\|K\_s*r\|H\_s*e\_s*l\_s*l\_s*e\_s*b\_s*o\_s*r\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|��\_s*\%([�ƕ����E������]\|�o\_s*��\)\|��\_s*��\|��\_s*�C\_s*�a\|J\_s*u\_s*g\_s*l\_s*a\_s*n\_s*d\_s*a\_s*l\_s*e\_s*s\|��\_s*��\|�Z\_s*��\|�n\_s*�_\|�s\_s*�q\|�B\_s*��\|�R\_s*��\_s*�q\|C\_s*\%(r\|h\_s*r\_s*o\_s*m\_s*i\_s*u\_s*m\)\|R\_s*h\_s*a\_s*m\_s*n\_s*a\_s*l\_s*e\_s*s\|��\_s*�s\_s*�N\_s*��\|�`\_s*��\_s*��\_s*��\_s*��\_s*�}\|�w\_s*�x\|�R\_s*\%(�[\_s*��\_s*��\|��\_s*�e\_s*�B\_s*�t\_s*�@\_s*�C\_s*�A\)\|��\_s*��\_s*��\|�J\_s*\%(�U\_s*��\|�^\_s*�[\_s*��\|�X\_s*�o\|�[\_s*�k\_s*�[\_s*��\|�i\_s*�[\_s*�g\|�_\_s*�t\_s*�B\|��\_s*�e\|�h\_s*��\_s*�[\_s*[����]\|��\_s*\%(�`\_s*[�G�F]\|�e\_s*\%(�B\_s*�G\|�b\_s*�g\)\)\|��\_s*�^\_s*[���X��]\)\|��\_s*��\|�L\_s*\%(�g\|�u\_s*��\|�z\_s*�[\_s*�e\|�n\_s*�[\_s*�_\|��\_s*\%(�g\|�e\_s*�B\_s*��\_s*�O\)\|�[\_s*��\|�m\_s*��\|�b\_s*�V\_s*��\|��\_s*\%(�[\|�G\_s*��\)\)\)', - \ 'R' : '\%([ۛŘӛĚ̉h�_���R�{��]�Ә[�\���U�^�c���R�P�˞u�l�M�C�����L�属�譚N���d�יC�����R������O�c�YᑘL�S�Q�XᔘW�O�U�ĘT�R�N�b�@�F�࢔����G��m�e�d�i�b�I�E炍��䃟L�B��ڟ����׊a���e�U�x�v��Y���Z�Y���������t����X�F�䫗����ᖗ����w�������灟K�M����l�I瀗��q��ずw���Y�����Q�����r���Q���ݗ����@���B���������A��٘H��ḟ�����pᐗ�㾗ۗݗ��Z���~���K�����ಝ��_����×����ɌI���ʙ��Z�C���X����Y�V���g��×ڛ��Pᎊ}�֗���������������������ᅗ��P���X�a�������МH�W�˗����Ԝ���d�h�g�ҙz�ؗϙ�חїӗ՗��W���O���C�����͗����`����鲛�饗��؞���A���x��@�_���]���q�y���p�����֝����H�×�㇗ߗ��Ɨȗ��열�����ɋ��������ʗ̚i���ś�����胗��������������ؗ����ܘ���A��鋗������i����\�ߗ�仂�טJ���ə���V�������O�����g�T�p�R�E�Y㑟S�B�՛ۛn��A��ࣗ��a����茗����������E煚h����඗��p�����y�����q�Q����㡟I���S���ۗ�ᚘ����痋�����엇���t��f�f��逗ǂ�E���S�q���G�B���J�H�[�w�x�I�T�`�r�������K�R�|�F�V���O�W�^�X�U�\�Z���D�A���I�Y�z���M�{�P�s�t�}���N�L�v�p�y���u���@�C���]���E�_�����~���D�֍��㗅���X�q���������Q�σ���R]\|�\_s*[�����]\|�b\_s*[����������]\|��\_s*[������]\|��\_s*��\|��\_s*[�L��]\|�h\_s*[�E�ߎ�]\|6\_s*[����]\|��\_s*��\_s*��\|�E\_s*�G\|��\_s*��\|A\_s*\%(c\_s*t\_s*a\_s*e\_s*a\|p\_s*o\_s*p\_s*e\_s*t\_s*a\_s*l\_s*a\_s*e\)\|C\_s*\%(a\_s*l\_s*y\_s*c\_s*a\_s*n\_s*t\_s*h\_s*a\_s*c\_s*e\_s*a\_s*e\|h\_s*o\_s*r\_s*i\_s*p\_s*e\_s*t\_s*a\_s*l\_s*a\_s*e\)\|��\_s*[����]\|��\_s*\%(��\|�|\_s*��\)\|V\_s*e\_s*r\_s*t\_s*i\_s*c\_s*i\_s*l\_s*l\_s*a\_s*t\_s*a\_s*e\|O\_s*r\_s*c\_s*h\_s*i\_s*d\_s*a\_s*l\_s*e\_s*s\|M\_s*i\_s*c\_s*r\_s*o\_s*s\_s*p\_s*e\_s*r\_s*m\_s*a\_s*e\|L\_s*\%([ruia]\|e\_s*i\_s*t\_s*n\_s*e\_s*r\_s*i\_s*a\_s*l\_s*e\_s*s\|A\_s*N\_s*�P\_s*�[\_s*�u\_s*��\)\|�C\_s*��\|G\_s*\%(e\_s*n\_s*t\_s*i\_s*a\_s*n\_s*a\_s*l\_s*e\_s*s\|y\_s*\%(n\_s*a\_s*n\_s*d\_s*r\_s*a\_s*e\|m\_s*n\_s*o\_s*s\_s*p\_s*e\_s*r\_s*m\_s*a\_s*e\)\)\|��\_s*�W\_s*�f\_s*�[\_s*�^\_s*�x\_s*�[\_s*�X\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*�s\_s*��\_s*�w\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|�d\_s*�C\_s*��\_s*�M\_s*��\_s*��\_s*��\|��\_s*�k\_s*��\_s*\%(�w\_s*�d\_s*�C\_s*��\_s*�M\_s*��\_s*��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*�Z\_s*�b\_s*�g\_s*�v\_s*�Z\_s*�@\|��\_s*��\|�K\_s*��\|�g\_s*��\|r\_s*u\_s*b\_s*y\_s*�X\_s*�N\_s*��\_s*�v\_s*�g\|�v\_s*��\|��\_s*��\|��\_s*�A\|��\_s*[���M]\|��\_s*��\|��\_s*��\_s*��\|�Q\_s*\%(�l\_s*��\_s*��\|��\_s*�^\)\|�@\_s*�\\_s*��\_s*��\_s*�P\_s*��\|��\_s*�A\_s*�I\|�F\_s*��\|��\_s*�K\_s*�\\_s*��\|�A\_s*�[\_s*��\)', - \ 'S' : '\%([��������}�[��T���y���}����Q��^�����������ǚ��i�����h��掞��y�{�G�O�ʗ��c���������������������ԛ��z��y��u�������߈��S�^���䛣�᜹�K�U���|���\�����}���a������x�����‘���ƜQ�sढ़w��柔�锚t���䇛q���~�H�x�����y�ܑ�䵑q�ȑ����B���J�v�t�������Ƒ��N����ⵑ��r�������|��s�w���p�n�m���y����絒F�\�n�u�L�M�������������N�d�Ƒ[��ꋑj�f�b�`�a���^��𕛑l�X�����􉈑c�Y���iઈ�g�לh�e�e�s�S����z������N�Z��驋��L�L���Q�k�ş��G���i����ↁ��ސِېڐߞ���@���������C��G�����S���ПƝ�[�T���אɐ͊֐Ȑǝ��A������I⣛p蔞��t����d�C�N���ӟ׈��ߛݙ���ܘ��x������㙘��A�����_�b����a���J������ஓϛ��Ƙj�b�H��ⳙA�G�S���L⒑W�s�r葁�������D�J���A�L��񙒐�枙@�ې�M���H����l�F�K���D�G�@�B��h���ǑN�������d�D���������牙��|�œҝ�ᝩ��⫟Ŗ�����������v�R呝y�H���������Ր������U���}�������[���������҂���ߝ�p�S爊��c���a���o�p���I�D�c�����E�R��䊔��T�����ωs��ꈝ��ؐ�������C�S��h�ᓩ�����]�T�\�����~�����u�y�����������齗V�������Œ��������s����v�ǐ��E���p�z����~�d���Ǘ�俑��Y�p�n���z�y��羝�裐���Ð������␕�΁�ʁ܁́�������ˁ��~�Ɂ���ځށ}��ȁ����́��݁��聹�后�����v袝x���������ž�谒N�ː��X���a�V���䐆����H�����������������ґ����]�Z������ʗ��������������������L�z�`��D�ߝX���z�i���擧�����A�B������P������D���Y�����`���L�������Z��迓��x���Z�x����w��圑����ȓ������G���F�a�Ǝb��乗��M�E�Ε��s�C�F���Z���n�����D�㈵㦋s�����]��Ŗl�^⚑�����A潓��g���Ζ�儞������ɖΏd����臐w�p����d�����[��g�����謎�姎��^���G�������N���H���˒��Ύ��܊m��������������\�ސːK�Ž��������K���o���q�҉����t�������ϔ����͚��͎��b�A�j���P�֎ٌ����ࡐ̝�咙��ݐ���┐Ԏ��^�Ύގڎ؎����Y�ώΎɎԎߎЈޝ��ȕi�S�G���CဋÎ����f�t偛W���V�z��������题����瑲���E�������f��������i�g�l�k�{�������蜕��婏o�F�����T��碏V�h�q���h�k�����F�J娏Q�K�����榊��S����酝��n�����������S�X�K�U��ڏM�G�j���a�E�N�����O�D�P�C�A�L�R�T�I���B�@���M�����᭚�����忏w�{�v�x�s�⡏t�u�r�f�����Z���u���Vꐚp�y���曐P�]�A���Ϝ����U�j�J��������f�Y�`�D����s橝ΐa�O��凓��c�j�c�ѐU�a�h�N�f�d��C�k���X���ĐL���T�Q�W�g�i�[�R�M�e�b�I�_�S���΋n�Z�����o䜏���_�י|���䓏��w�����b��򏎏����������ҟ����m䀛���u�L���Џ�������縐��מ�⪙ד��M�����v���R�����ߜ��c����B�_�џn���Տʈ䐯�����B辑����[����頏��[��␏ݚ����K♏����яҁ������u���i�]��疏ցj�i�Ӑ��Ԛ������Ϗ��U���J���n���ސ��Ŝ܏��ߏ�������ُ����Տ��G����������ଞ������ďޏ������������͏Ǐ����ɏ������������Џ��ۏ�暐��Ώ��̏ďƏ����͏ڏ����؏ɏ��ȏ������T�l������R�e�g�����p�@�C�ܑ��F�������D�I����冐B�������A�H�E❎o�o�w���v�����L���U�����������������n�юr���Ŏᎊ�t�r�@�����{���펦���Ϛ`���������i�Аy�э��i�@�����E����J�X拎}�泟���n���y�o�N�Z�y�z���ٛᝅ�f�׎��j�{��~����|���{�o���ߘ��I�X�B�]�K�������V�g���u�������p�`����i���k���q�l��藘ʛ�Ɠ��j��⏎s���_ꏎ���˔`���Œs��y�@���؎���䢊�o�u�e����ۚ~��礛��J�L��f�V�W�l�����Ȑ���������䰐囋�T��ᰗ����l�I�J���M����h���E�U�嶎��z�\�G�Ԟ��u���V���\���V���f�֟��X�M�ˍ��Ǐ�x���š�����皔��m��匈��^��꛽�O��@���՚N�����\�󎘊j���ې����ŒB睓N�@�d�q�b���P�m���b�q���嗝�W�����Ɣ��f���F��ⲝH�H�B�r���{�吷�W�vᵔu�t�ĉh�|�招��E�䋫�🛋t����剎������櫜��f�|��sट��E�a�`��㓝����������̜c���H�K�c�ߙӎ[�ǎW�Xㄐ��V�����������r�\�]�Z�P�R�Ӂ���3�Q�^O�R�U�S�Y�_�A�T�C�D�搔�@�F���D�N���Z����\�؛�������ԟ����˜�����G�Ɲ��r�ӎÎE�q�������淍K�ȍ���͙Pꎍ��`�B�ڛv�ɍ��V�ҍۍЍю��΍؍̍Ӎȍ֐čՍÍˍ��ҍٍ΍ō鑨�r��Şo焍��e�⩞��y���|�s�����k����w�����N���������������ʎh�S䳍�}�l�э��o���s�⍳�r���ԍ��đ����獸��������R���A��������m嬛O���������ÝL����������������������_�~��n�K�ዎ������������^�d�w�����@�����Y�����Y���ご�򄋄Z�Y���������������Á������W�n�ŽO���y�ʁ��������`��f�e�����W�_�T�������Z�T�r�V�\�X�����R�ЕbS]\|�\_s*[�����]\|�b\_s*[�\�Z�X�V�T]\|��\_s*[����������]\|�\_s*��\|�\\_s*\%(�H\|�I\_s*��\)\|�~\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*�g\|��\_s*��\|�v\_s*[�v�X]\|��\_s*�n\|�\_s*��\|��\_s*�c\|��\_s*��\|�B\_s*[�B�X]\|��\_s*�C\|��\_s*��\|U\_s*m\_s*b\_s*e\_s*l\_s*l\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\|��\_s*��\|�}\_s*��\|c\_s*e\_s*n\_s*t\_s*i\|��\_s*[�ĘU]\|�C\_s*��\|�\_s*��\|�}\_s*��\|�T\_s*��\|�G\_s*�Y\|�f\_s*��\|�V\_s*[�c��]\|V\_s*i\_s*o\_s*l\_s*a\_s*l\_s*e\_s*s\|N\_s*y\_s*m\_s*p\_s*h\_s*a\_s*e\_s*\%(a\_s*c\_s*e\_s*a\_s*e\|o\_s*i\_s*d\_s*e\_s*a\_s*e\)\|��\_s*�\|�\_s*��\|�b\_s*\%(�^\|��\_s*��\)\|�V\_s*��\|�]\_s*��\|��\_s*��\|�s\_s*[�m�E]\|L\_s*a\_s*\%(b\_s*i\_s*a\_s*t\_s*a\_s*e\|m\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\)\|��\_s*��\_s*��\|��\_s*��\|�~\_s*��\|��\_s*�t\_s*��\|��\_s*��\|��\_s*��\|��\_s*�_\|��\_s*�Y\|��\_s*��\|��\_s*��\|I\_s*\%(s\_s*o\_s*p\_s*y\_s*r\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|l\_s*l\_s*i\_s*c\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\)\|W\_s*i\_s*n\_s*t\_s*e\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|�`\_s*��\|��\_s*[�J��]\|�]\_s*[�X�]]\|��\_s*\%(�X\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%([�֌��ڎu]\|��\_s*��\)\|7\_s*��\|�V\_s*��\|4\_s*��\|�S\_s*[����]\|�R\_s*�{\|�h\_s*�t\|��\_s*�u\|��\_s*��\|�A\_s*[�o��]\|��\_s*[�N�Y]\|�\_s*[���]\|�r\_s*[ꏎ�]\|��\_s*��\|�c\_s*�e\|��\_s*��\|��\_s*\%(�_\|�C\_s*��\)\|Z\_s*i\_s*n\_s*g\_s*i\_s*b\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|��\_s*\%(��\_s*�{\_s*\%(�I\|��\_s*�I\)\|��\_s*��\_s*�a\_s*��\_s*�W\)\|��\_s*[�Η�]\|�\_s*�\|�\_s*��\|��\_s*��\|�e\_s*��\_s*��\|C\_s*\%([se]\|y\_s*c\_s*a\_s*d\_s*\%(i\_s*d\_s*a\_s*e\|o\_s*\%(p\_s*s\_s*i\_s*d\_s*a\|f\_s*i\_s*l\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\)\)\|h\_s*l\_s*o\_s*r\_s*a\_s*n\_s*t\_s*h\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*��\|D\_s*�X\|�^\_s*��\_s*��\|a\_s*\%(s\_s*s\_s*y\_s*t\_s*h\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|c\_s*t\_s*a\_s*l\_s*e\_s*s\)\)\|��\_s*�K\|�|\_s*[�“���]\|��\_s*�p\_s*��\|�G\_s*��\|��\_s*��\|��\_s*��\_s*\%(�X\_s*[�N��]\|��\_s*[�N��]\)\|�h\_s*�l\|�S\_s*��\_s*�g\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*�e\|��\_s*��\|��\_s*\%(�@\|��\_s*��\_s*��\)\|��\_s*��\|�G\_s*��\|�\_s*�q\|P\_s*\%(a\_s*r\_s*i\_s*e\_s*t\_s*a\_s*l\_s*e\_s*s\|t\_s*e\_s*r\_s*i\_s*d\_s*o\_s*s\_s*p\_s*e\_s*r\_s*m\_s*\%(a\_s*l\_s*e\_s*s\|i\_s*d\_s*a\_s*e\)\|r\_s*i\_s*m\_s*u\_s*l\_s*a\_s*l\_s*e\_s*s\)\|A\_s*\%(p\_s*i\_s*a\_s*l\_s*e\_s*s\|r\_s*a\_s*l\_s*e\_s*s\|n\_s*t\_s*i\_s*m\_s*o\_s*n\_s*y\)\|s\_s*f\_s*o\_s*r\_s*z\_s*a\_s*n\_s*d\_s*o\|��\_s*[�T��]\|B\_s*\%(r\|�V\_s*�F\_s*��\)\|�g\_s*��\_s*�q\|��\_s*��\_s*��\|��\_s*��\|�u\_s*��\|�A\_s*��\_s*�`\_s*��\_s*��\|�\\_s*��\_s*��\|M\_s*\%(e\_s*r\_s*c\_s*u\_s*r\_s*y\|u\_s*s\_s*a\_s*l\_s*e\_s*s\|a\_s*r\_s*q\_s*u\_s*i\_s*s\_s* \_s*d\_s*e\_s* \_s*S\_s*a\_s*d\_s*e\)\|D\_s*o\_s*n\_s*a\_s*t\_s*i\_s*o\_s*n\_s* \_s*A\_s*l\_s*p\_s*h\_s*o\_s*n\_s*s\_s*e\_s* \_s*F\_s*r\_s*a\_s*n\_s*c\_s*o\_s*i\_s*s\_s* \_s*d\_s*e\_s* \_s*S\_s*a\_s*d\_s*e\|��\_s*\%(�V\|�s\_s*\%(��\_s*��\|��\_s*��\_s*��\)\)\|T\_s*\%(e\_s*t\_s*r\_s*a\_s*c\_s*e\_s*n\_s*t\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|i\_s*n\|h\_s*e\_s* \_s*S\_s*i\_s*m\_s*p\_s*l\_s*e\_s* \_s*A\_s*P\_s*I\_s* \_s*f\_s*o\_s*r\_s* \_s*e\_s*v\_s*e\_s*n\_s*t\_s*-\_s*b\_s*a\_s*s\_s*e\_s*d\_s* \_s*X\_s*M\_s*L\_s* \_s*p\_s*a\_s*r\_s*s\_s*i\_s*n\_s*g\)\|�]\_s*�f\|�P\_s*�C\_s*�f\|�v\_s*��\_s*��\_s*��\_s*��\_s*��\_s*�w\_s*��\|�l\_s*�b\_s*�g\_s*�T\_s*�[\_s*�r\_s*�X\|�U\_s*\%(�b\_s*�N\|�N\_s*�Z\_s*��\|�r\_s*�[\_s*�l\|�E\_s*�o\_s*�[\|��\_s*�[\_s*�N\_s*��\_s*�E\_s*�g\|��\_s*�U\|��\_s*�c\|�C\_s*\%([����]\|��\_s*�[\|�f\_s*��\)\|�[\_s*\%([����]\|��\_s*��\)\)\|��\_s*��\|�[\_s*�~\|�i\_s*�g\_s*��\_s*�E\_s*��\|�]\_s*\%(��\|��\_s*�f\|�[\_s*\%(��\|��\_s*��\_s*�Q\_s*��\)\|�t\_s*�B\_s*�[\)\|�W\_s*\%(��\|�[\_s*\%([�O�N]\|��\_s*��\_s*[�X�Y]\)\|�O\_s*��\_s*��\_s*�g\|��\_s*\%(��\_s*��\|�O\_s*�V\_s*��\_s*�s\_s*�[\_s*��\|�e\_s*�[\_s*�[\)\)\|�G\_s*�X\|��\_s*��\)', - \ 'T' : '\%([Ĝ������R��牉ș��h���Ќ���☝��ω����i���מR���h�����|�������������������c���H����֓�騗���䄋�㜐C䃕����ۏQ榔y�����F�b����r�\����c�����͙��ʓՓך��c�����J������ٓؓڏx�J���Ś�ɍΖ����r���q�N���P�ь{�ԍǝ��ؗ�沖L௜{�ꂜՓ��“��Γ������W�ٟX�B�[�����ѓ�������w�䓄���������~��㫙ٚ���Ċ���U�j����㉱�}�b�馝��F�D����㛎���衞��Cẞ�T�Λ�⅞��M�D�����ğ�椈ꊛ�됀�z�c�����b�u�����ٓ��幓������������������铝�������~����鍓��������򓀓��������������˓t���O�O�̓��m��N�l�ےE�j�q�Ě��\�Z�g�\�莾���p�y�o�o�V�v���Ϗ\�p�{�n�l�n���Z���Ên�򖁞��i���^�y���r䷟��ː}�~�ēe��x�h�u�����r�l�W�P�Ȏ������W�����d�͖����o�R瘉���NནL���J�U��猓H�z���ћ�迟h�A�V�V�z�D�������C�U�A�����d�F�D�x�[���^�៓U�z���a�Z�W�L⽓Y�Q�I�N�G�P���O�c�S������L��ǒ��t�ɞq�ؚ��|��Y�B�h������������@���������稒����ఒ����A���e����ƜV��•��͕��皁�I���������T�P��ז��g�w�ΐى����W�h��іʏ`�t�I�␎���a�S���ڎB�ڐR����ȕ�p�A�n䆉��җ��I�~����焍ߑ��c�z�ߝ����旾���񕌋u���i�����d�͌��g����Q�ǒٚ�؍j�q��塔|�ȕ�ȓ`�B�\�����Չ���㔖�ꉌۑ����ԔԒ̒��v����׏I�Đ��ȒŒǛ��錼�ə��ݙ������������֒ߘ��r�s�s�n���U�T�ӑn�쑢���L���U�����Ό���C���U�֋ސT�Ĝ������ɏՔ��ːs�x���A���t�����y�Õ��Z㋓���ᶌp�k���l�ϐڒʍ��A����h�ՍJ����������Y�_���������Z�o�T���S���N���Ē������������N���Z��������m�֖����’������ޒ}�z���k���e玐��ŗ͓�ߝQ��E�������浖מ`�k�I⌒��O���Ւ����������P蠒����e���Ò�����隓C��U�ǒ����ݟ������l����L�y�’��kꓜ����j���L�K�ӝ���U�o�������{�⒳���\�_���񒝓����[�������������d���������������}���ޒ�����������渒������������x�a�Q�C�N�����I�Ԓ��J�n�����h���f���R�h�t���������n�p�o�m�~�n���@�������������ؒ��������r���p�U�T�u�Ռ��l���h�⚐�tꃒy�ƒw���o�n��v���qᗒv�������k�s��m�x����J�}���֓}�Ԑu���g�q�K���f�e�މ˞���M�o���R�ВLᷖ�非ٌ✔�����y�g栟����˘����l�|�]��漒K�^�ȏ̎]�D���M骓l�D����e�Ȓ@�i�h�g��Ⰽk�X�Y�S��ݛ̝E�Y�U�ԕۏ��X�I���H��蒎a����F�C�{�����}����C�J���F�מ��l��S�s韞����퓃��������ࣕY�ۈɐ���������Ғ����k�B���z�n�Ҋm�����������t�ԚK���p���ЋB�����ŗY����k���˜[�]����썰�͗����K�’e���ʖd休��s�b��饕����|�c�G�鎿�B�ٍ��k���e�d��뛹��k殔C�ĉF���b�W�V�O�������x�h�^���В|⹑��������t�M�闲�F�����������֜Ӝ`�d�H�[�t���؜��T�j�ݝ^���W�h�]������ßp�~���K�����ϓ̝����W�������`�^W�UႚV�J�Rἔ�C�V�Q�a�_�\杒O�S�X�W�Y�b�Z�d�ÒT�P�A�p�]�����鮓F���ѝF�U���V�f�{�������I����痑��~�x�����擑���H�\讖w�����ʝ���[���O���l���ߑړ����ܒ��Б⛔�E�ܑՑ͑����ۑґؑ��ݑ���ّё̑בޑ�΋��H���f��茘ǒ����������֚ꑫ�����—���]�l���o���N�O�ϗ��┭�蛀�S�����u�����N���ЍٚB�_�������P�c�B睘��S���W���`�V���~�^�Γy���s�f������E������\��؃X�W�����ƃU���c�N�]�����������g�`�E�c���[�^�s�S�������������������ф����������e����������T]\|�\_s*[�����]\|�b\_s*[�g�e�c�`�^]\|��\_s*[�ƂÂ���]\|�\_s*��\|��\_s*�n\_s*��\|��\_s*[���]\|�\_s*�\|��\_s*�l\|��\_s*��\|��\_s*�V\|��\_s*��\|�i\_s*[���v]\|��\_s*�P\|�h\_s*��\|��\_s*��\|�D\_s*��\_s*��\|��\_s*[�Ŗ�]\|��\_s*[�q��]\|�W\_s*��\|��\_s*��\_s*�E\_s*��\|��\_s*��\|H\_s*y\_s*d\_s*r\_s*o\_s*c\_s*h\_s*a\_s*r\_s*i\_s*t\_s*a\_s*l\_s*e\_s*s\|��\_s*��\|�\_s*�x\|�G\_s*[�ߓ��h]\|��\_s*[����]\|�F\_s*�N\_s*��\|�i\_s*[�v�q]\|A\_s*c\_s*o\_s*n\_s*i\_s*t\_s*u\_s*m\|��\_s*��\|��\_s*�j\|��\_s*�j\|F\_s*e\|I\_s*r\_s*o\_s*n\|��\_s*��\|��\_s*��\|�g\_s*��\|�Z\_s*��\|�Q\_s*�~\_s*�S\|��\_s*\%(��\|��\_s*�q\)\|�S\_s*[���Z]\|��\_s*\%(��\|��\_s*�a\)\|�X\_s*��\|��\_s*�X\|�\_s*�J\|��\_s*�~\|�~\_s*�J\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[����]\|B\_s*a\_s*l\_s*a\_s*n\_s*o\_s*p\_s*h\_s*o\_s*r\_s*a\_s*l\_s*e\_s*s\|1\_s*\%(��\|0\_s*��\)\|�P\_s*\%(��\|�O\_s*��\)\|��\_s*��\|��\_s*�l\_s*��\|E\_s*\%(u\_s*p\_s*h\_s*o\_s*r\_s*b\_s*i\_s*a\_s*l\_s*e\_s*s\|r\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\)\|��\_s*\%(�v\|��\_s*�F\)\|�g\_s*��\|��\_s*��\|�`\_s*��\|��\_s*�w\|��\_s*\%(�V\_s*��\|��\_s*�F\)\|��\_s*\%([��]\|�[\_s*��\|��\_s*��\_s*�N\)\|��\_s*�v\|�r\_s*�q\|��\_s*�r\_s*�q\|��\_s*[�a��]\|��\_s*��\|��\_s*��\|�@\_s*��\_s*��\|�L\_s*�q\|�S\_s*��\|��\_s*��\|�]\_s*�h\|J\_s*i\_s*a\_s*n\_s*g\_s*s\_s*u\|�G\_s*��\|�u\_s*[�˔�]\|�k\_s*�J\|��\_s*�\|��\_s*�I\_s*�q\|��\_s*�a\|��\_s*�p\|��\_s*[����]\|�A\_s*��\|��\_s*��\_s*�\|��\_s*[���]\|��\_s*��\_s*�\\|��\_s*\%(�\\_s*��\|�A\_s*��\_s*[����]\)\|�t\_s*\%(��\|�{\_s*�V\)\|�h\_s*��\|�e\_s*��\|��\_s*��\|��\_s*[����]\|��\_s*�s\|��\_s*\%(�[\|��\_s*�q\)\|��\_s*�v\|��\_s*��\|�P\_s*��\|��\_s*��\|��\_s*\%(��\|�\_s*��\)\|�E\_s*��\|��\_s*��\|P\_s*\%(\.\_s*S\_s*\.\|o\_s*l\_s*y\_s*\%(g\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\|c\_s*a\_s*r\_s*p\_s*i\_s*c\_s*a\_s*e\)\|a\_s*n\_s*d\_s*a\_s*n\_s*a\_s*l\_s*e\_s*s\)\|�s\_s*��\|��\_s*��\|�E\_s*�w\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*�q\|�\\_s*[���V]\|�w\_s*��\|�\_s*��\|�i\_s*�K\|��\_s*��\_s*�p\|��\_s*�B\|M\_s*\%(e\_s*n\_s*i\_s*s\_s*p\_s*e\_s*r\_s*m\_s*a\_s*c\_s*e\_s*a\_s*e\|o\_s*n\_s*o\_s*\%(p\_s*e\_s*t\_s*a\_s*l\_s*a\_s*e\|c\_s*\%(h\_s*l\_s*a\_s*m\_s*y\_s*d\_s*e\_s*a\_s*e\|o\_s*t\_s*y\_s*l\_s*e\_s*d\_s*o\_s*n\_s*e\_s*a\_s*e\)\)\)\|��\_s*��\|��\_s*��\|��\_s*�q\|��\_s*��\|��\_s*��\|�f\_s*�B\_s*�X\|�R\_s*��\_s*��\|�\_s*�l\|�\\_s*\%(�[\_s*[�g���v]\|��\_s*�[\)\|�w\_s*�[\_s*�O\|�[\_s*[�C�����A]\|�Z\_s*\%(�I\|��\_s*�}\|��\_s*\%(��\|�j\_s*�A\_s*�X\)\|��\_s*�s\_s*\%(�[\|�X\_s*�g\)\)\|�V\_s*\%(��\|�b\_s*�N\|�X\_s*��\|�A\_s*�^\_s*�[\|�\\_s*�[\_s*��\_s*�X\|�I\_s*�h\_s*�A\|�[\_s*[�t�^]\)\|�T\_s*\%([�C��]\|�~\_s*��\_s*�O\|�E\_s*�U\_s*��\_s*�h\|��\_s*�u\_s*��\_s*�b\_s*�h\|�[\_s*\%([�h��]\|�e\_s*�B\|�X\_s*�g\_s*��\|�Y\_s*�f\_s*[�C�[�B]\|�}\_s*��\)\|�b\_s*�`\_s*��\_s*�[\|��\_s*\%(�N\|�_\_s*�[\|�L\_s*��\_s*�[\)\|��\_s*�h\_s*�}\_s*�C\_s*�h\)\|�|\_s*��\_s*�y\_s*�v\_s*�`\_s*�h\|�O\_s*\%(�a\_s*�y\|�A\_s*��\_s*��\)\|\\\_s*T\_s*e\_s*X\|��\_s*��\_s*��\|��\_s*��\_s*��\|t\_s*e\_s*\%(r\_s*a\|m\_s*p\_s*o\_s*r\_s*a\_s*r\_s*y\)\|�p\_s*��\|�d\_s*\%([���b]\|�C\_s*��\_s*�M\_s*��\_s*��\_s*��\)\)', - \ 'U' : '\%([��y����h�������f�[�l�e���񓴑a�؈����Ϗ��鎽�[�X���D�W�r䷙\��w���u���ќ��z���D鴑��ߚX�����i���^���R�忓��L�M�f��~���ӏ��r戉�楓]��揗w搉S�^�̗��É��򃑂��k�։\�u�����L�G�Q�m���P�O���H⣑��Q�m�����I��V�ߊ��a�������X�S�n�|�o�J���U�󎜚y�팻���ʉf�ژ��ⓐx���ԋ����ʏ��ϙ���܉��A�]りC���D�]��^�@����T�A��������m����S���Y�v�_�������Z�r����N�������T���T�ݗ��Ɠ��Z�J���j���J�ʼnF���A���L�n�ћa���L�ǎ�䥟������H�ӉE������Z���p�Q�G�����ˌ����̉K������Ꚗo�e���Y�^�I�����N�����t�҃E���T��U]\|��\_s*��\|��\_s*��\|��\_s*��\|�T\_s*��\|��\_s*��\_s*��\|��\_s*��\|�H\_s*��\_s*�R\|��\_s*��\|�D\_s*\%(�k\_s*[�Lj�]\|��\_s*��\)\|��\_s*�i\|�e\_s*��\|��\_s*��\|�A\_s*��\|�y\_s*��\|��\_s*�y\_s*[����]\|��\_s*�\|��\_s*�[\|�\_s*��\|�\_s*��\|�\_s*��\|��\_s*�`\|��\_s*�c\_s*��\_s*��\|�W\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|�s\_s*��\_s*��\|��\_s*��\|�\_s*��\|A\_s*r\_s*i\_s*s\_s*t\_s*o\_s*l\_s*o\_s*c\_s*h\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|�`\_s*��\|��\_s*�C\_s*��\|�\_s*��\|�O\_s*�Y\|��\_s*��\|��\_s*[�C�B��]\|��\_s*\%(��\|��\_s*��\_s*��\)\|C\_s*u\_s*c\_s*u\_s*r\_s*b\_s*i\_s*t\_s*a\_s*l\_s*e\_s*s\|��\_s*��\|�c\_s*��\|�C\_s*�M\_s*��\_s*�X\|�I\_s*�}\_s*��\|��\_s*��\_s*�s\_s*�\\|��\_s*\%(�p\_s*��\|�L\_s*��\)\|�A\_s*\%([�X��]\|�O\_s*��\_s*�[\|�[\_s*\%(�V\_s*��\_s*��\|�W\_s*�F\_s*��\_s*�g\|�o\_s*��\)\|��\_s*�e\_s*�B\_s*��\_s*�b\_s*�g\|�|\_s*��\|�b\_s*\%(�v\|�p\_s*�[\|�V\_s*��\_s*�[\)\)\|�P\_s*\%(��\|��\_s*��\)\|��\_s*\%([�^�j�[]\|�g\_s*\%(��\_s*��\|��\_s*�q\_s*�g\)\|��\_s*\%(�A\|�V\_s*�[\_s*�Y\)\|�v\_s*�V\_s*��\_s*��\|�l\_s*�X\_s*�R\|�i\_s*\%(�J\_s*�C\_s*�g\|�C\_s*�e\_s*�b\_s*�h\)\|�r\_s*�L\_s*\%(�^\_s*�X\|�m\_s*��\)\)\)', - \ 'V' : '\%([�F���l�u�۔ńB�r���Ƀ�V]\|�\_s*�\_s*�\|�b\_s*��\|��\_s*��\|�\_s*�\|v\_s*e\_s*r\_s*s\_s*u\_s*s\|��\_s*��\_s*�D\|�`\_s*�F\_s*��\|��\_s*�^\| \_s*�r\_s*�N\_s*�g\_s*�[\_s*��\|��\_s*�o\|��\_s*�z\|�j\_s*�X\|��\_s*��\|�P\_s*�^\|��\_s*\%(�f\_s*�B\_s*��\|�M\_s*�i\|�j\_s*�X\|�Z\_s*��\_s*��\|�N\_s*�`\_s*��\|��\_s*�L\_s*��\_s*�[\_s*��\|��\_s*��\_s*�[\|�[\_s*�j\_s*��\)\|��\_s*�b\|�{\_s*\%(�X\_s*�g\_s*�[\_s*�N\|��\_s*�S\_s*��\|��\_s*\%([�K�{�g�^]\|�e\_s*\%(�b\_s*�N\_s*�X\|�[\_s*[�W��]\)\)\|��\_s*��\_s*�[\_s*��\|��\_s*��\_s*\%(�`\|�e\_s*�B\_s*�A\|�^\_s*��\_s*�[\)\|��\_s*�[\|�R\_s*�[\_s*�_\|�[\_s*\%([���g�O]\|��\_s*�g\|�h\_s*�r\_s*\%(��\|��\_s*�A\_s*��\)\|�p\_s*��\|�_\_s*�t\_s*�H\_s*��\|�J\_s*\%(��\|��\_s*�X\_s*�g\)\)\|�L\_s*��\_s*�u\_s*��\_s*��\|�C\_s*\%([�h�X]\|�W\_s*��\_s*�[\|�V\_s*��\_s*�O\)\)\|�w\_s*�b\_s*�g\|��\_s*��\_s*��\|��\_s*��\|�t\_s*\%(�@\_s*\%(��\|�h\_s*�[\_s*�c\)\|�H\_s*\%(��\|��\_s*\%(�N\|�J\_s*�[\)\)\|�F\_s*��\_s*��\_s*�[\_s*��\)\|�E\_s*\%(��\_s*\%(�f\_s*�B\_s*�~\_s*�[\_s*��\|�W\_s*\%(�~\_s*�[\_s*��\|�[\_s*�~\_s*��\|�I\_s*�X\_s*�g\_s*\%(�N\|�b\_s*�N\)\)\)\|�B\_s*\%(��\_s*�i\|��\_s*�X\)\|�H\_s*�b\_s*�J\|�C\_s*\%(��\_s*�X\|��\_s*�i\_s*�[\)\|�F\_s*\%(��\_s*�M\_s*��\_s*�E\_s*�X\|�k\_s*�X\)\)\|�r\_s*\%([�A���u�o�X�U]\|�K\_s*�[\|�n\_s*�[\_s*��\|�^\_s*�~\_s*��\|��\_s*\%(�b\_s*�W\|��\_s*�C\)\|�r\_s*\%(�A\_s*��\|�b\_s*�h\)\|�b\_s*\%(�N\|�L\_s*�[\)\|�Z\_s*��\_s*�e\|�N\_s*\%(�^\_s*�[\|�g\_s*\%(��\|��\_s*[�[�A]\)\)\|�V\_s*\%(��\_s*�X\|�\\_s*��\_s*�[\_s*�Y\)\|��\_s*\%([�`�X]\|�\\_s*��\|�e\_s*�[\_s*�W\|�Z\_s*��\_s*�g\)\|�l\_s*\%(�K\_s*�[\|�O\_s*��\_s*�b\_s*�g\)\|�j\_s*\%([�[��]\|��\_s*�f\_s*��\)\|��\_s*�[\|�G\_s*��\_s*�`\_s*��\_s*��\|�W\_s*\%(��\|�b\_s*�g\|�^\_s*�[\|��\_s*\%(��\|�i\_s*��\_s*�[\)\|��\_s*�A\_s*\%(��\|��\_s*�C\_s*\%(�Y\|�[\_s*�[\_s*�V\_s*��\_s*��\)\)\)\|�_\_s*��\|�f\_s*�I\|��\_s*\%(�S\|�k\_s*�[\_s*�u\)\|�I\_s*��\|��\_s*�W\_s*�A\_s*��\|�B\_s*�[\_s*�i\_s*�X\|�[\_s*\%(�{\|��\_s*�X\|�N\_s*��\|�i\_s*�X\)\)\|�x\_s*\%([�K����]\|�g\_s*�i\_s*��\|�C\_s*�_\_s*�[\|�[\_s*\%(��\|�_\_s*�[\)\|�e\_s*��\_s*��\|�b\_s*�Z\_s*��\|�X\_s*\%([�g�^�p]\|�r\_s*�I\)\|�N\_s*\%(�^\|�g\_s*��\)\|�W\_s*�^\_s*\%(�u\_s*��\|��\_s*�A\_s*��\)\|��\_s*\%([�B�[]\|�t\_s*�@\_s*�C\|�T\_s*�C\_s*��\)\|��\_s*\%(�i\|�V\_s*�e\_s*�B\|�[\_s*�i\|�j\_s*[�J�N]\)\|��\_s*\%(�f\|�x\_s*�b\_s*�g\|�_\_s*��\|��\_s*�[\_s*�k\|�T\_s*\%(�[\_s*�`\|�C\_s*��\)\|��\_s*�b\_s*�g\)\|�m\_s*��\|�j\_s*[�X���A]\|�l\_s*\%(�V\_s*��\_s*��\|�c\_s*�B\_s*�A\|�`\_s*�A\|�Y\_s*�G\_s*��\)\)\|�o\_s*\%([����]\|�C\_s*\%([�A�u���I]\|�p\_s*�[\|�^\_s*\%(��\|��\_s*�e\_s*�B\)\|�L\_s*��\_s*�O\|�U\_s*�[\|�V\_s*��\)\|�b\_s*�g\|�`\_s*�J\_s*��\|�M\_s*�i\|�K\_s*�{\_s*��\_s*�h\|��\_s*\%(�i\_s*�V\|�G\_s*�e\_s*�B\)\|�T\_s*��\|�X\_s*\%(�R\|�P\_s*�X\)\|�J\_s*��\_s*�X\|�P\_s*�[\_s*�V\_s*��\_s*��\|�L\_s*��\_s*�[\_s*��\|�E\_s*�`\_s*��\_s*�[\|��\_s*\%(��\|�G\_s*�[\_s*�V\_s*��\_s*��\|��\_s*�[\|�A\_s*\%(�u\_s*��\|��\_s*�g\)\|�b\_s*�h\|�f\_s*�[\_s*�V\_s*��\_s*��\)\|�k\_s*�A\_s*�c\|�j\_s*\%(��\|�[\_s*��\)\|��\_s*\%([���[]\|��\_s*��\|��\_s*�[\|��\_s*\%(�V\_s*�A\|�`\_s*�m\|�^\_s*�C\_s*��\)\)\|�[\_s*\%([�S�O]\|�`\_s*��\_s*��\|��\_s*�g\_s*�D\_s*�[\_s*�h\|�o\_s*��\|�{\_s*�X\|�x\_s*�i\|�e\_s*�B\_s*�J\_s*��\|�T\_s*�X\|�W\_s*\%(��\|�j\_s*�A\|��\_s*��\)\|�m\_s*��\|�j\_s*�A\|��\_s*��\_s*�g\|�~\_s*\%(��\_s*�I\_s*��\|�L\_s*��\_s*��\_s*�C\_s*�g\)\)\|�i\_s*\%(�L\_s*��\_s*��\_s*�[\|�W\_s*�E\_s*��\)\)\|�u\_s*\%(�C\|��\_s*\%(�h\|�b\_s*�h\)\|�[\_s*�h\_s*�D\_s*�[\)\)', - \ 'W' : '\%([��������������ɒj�����Y��y����h�����ȃ҃��f�[�l�e���񓴑a�؈������鎽�[�X���D�W䷙\��w���u�ќ��z���D鴑��ߚX�����i���^���R�忓��L�M�f��~���ӏ��r戉�楓]��揗w搉S�^�̗��É��򃑂�k�։\�u�����L�G�Q�m���P�O���H⣑��Q�m�����I��V�ߊ��a�������X�S�n�|�o�J���U�󎜚y�팻���ʉf�ژ��ⓐx���ԋ����ʏ��ϙ�����A�]゜��D�]��^�@����T�A��������m����U�S���Y�v���������Z�r����N�������T���T�ݗ��Ɠ��Z�J���j���J�ʼnF���A���L�n�ћa���L�ǎ�䥟������ӉE������Z���p�Q�G�����ˌ����̉K������Ꚗo�e���Y�^�I����������܉������c��㘟|���͊��Ϗp���ԉЍЋƋZ�����ǁ������k�Y���e�o���n���m�܏Νt������s����f�����^�]�o�_�r�q�p�c���i���q��ǘj�n�Ȏ��F�G�d�̘e���Θc�Q�C崙N���Z��Д����ʒt�ሽ�g�f�h�a�Œ�f�Z�N��O�֔j���c���l��H���`���b�̔i�핝���Ȕg�v�E��W]\|�\_s*[�������]\|�b\_s*[�����E����]\|��\_s*[������]\|��\_s*��\_s*�~\_s*�_\|��\_s*��\|��\_s*��\|��\_s*��\|�T\_s*��\|��\_s*��\_s*��\|��\_s*��\|�H\_s*��\_s*�R\|��\_s*��\|�D\_s*\%(�k\_s*[�Lj�]\|��\_s*��\)\|��\_s*�i\|�e\_s*��\|��\_s*��\|�A\_s*��\|�y\_s*��\|��\_s*�y\_s*[����]\|��\_s*�\|��\_s*�[\|�\_s*��\|�\_s*��\|�\_s*��\|��\_s*�c\_s*��\_s*��\|�W\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|�s\_s*��\_s*��\|��\_s*��\|�\_s*��\|A\_s*r\_s*i\_s*s\_s*t\_s*o\_s*l\_s*o\_s*c\_s*h\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|�`\_s*��\|��\_s*�C\_s*��\|�\_s*��\|�O\_s*�Y\|��\_s*��\|��\_s*[�C�B��]\|��\_s*\%(��\|��\_s*��\_s*��\)\|C\_s*u\_s*c\_s*u\_s*r\_s*b\_s*i\_s*t\_s*a\_s*l\_s*e\_s*s\|��\_s*��\|�c\_s*��\|��\_s*��\|�o\_s*�D\|��\_s*�Y\_s*��\|��\_s*��\|�i\_s*��\_s*�j\|(\_s*��\_s*)\|��\_s*[����]\|�R\_s*��\|�Y\_s*�z\|�x\_s*��\|Y\_s*\%(��\|�V\_s*��\_s*�c\|��\_s*�F\_s*��\)\|�x\_s*\%(��\|�V\_s*��\_s*�c\|��\_s*�F\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*[�R��]\|��\_s*��\|�a\_s*�t\|��\_s*��\_s*��\_s*�D\_s*�\|��\_s*\%(�`\|��\_s*�m\_s*��\_s*��\)\|�^\_s*�B\_s*��\_s*�D\|��\_s*\%(��\_s*��\_s*��\_s*�E\_s*��\_s*��\|��\_s*��\_s*��\_s*�E\_s*��\_s*��\)\|�u\_s*��\_s*�c\_s*�u\_s*��\_s*�N\|��\_s*��\_s*�O\|��\_s*\%(��\|�C\_s*�X\|�b\_s*�J\_s*�[\|�X\_s*\%(��\_s*�[\|��\_s*��\_s*�O\)\)\|��\_s*\%(�[\_s*�X\|��\_s*�N\_s*��\|�X\_s*�g\)\|��\_s*��\_s*��\_s*��\|��\_s*\%(�b\_s*\%([�v�p]\|�s\_s*��\_s*�O\)\|�C\_s*\%([�^�g]\|�e\_s*�B\_s*��\_s*�O\)\)\|�{\_s*��\_s*�t\|�t\_s*\%([���[]\|�@\_s*�C\_s*��\|�B\_s*\%(�[\_s*�g\|�b\_s*�`\)\)\|�z\_s*\%(�G\_s*[�C�[�A]\|�[\_s*��\|�C\_s*\%(�[\_s*\%(��\|��\_s*�[\)\|�b\_s*\%(�v\|�X\_s*��\|�p\_s*�[\|�g\_s*\%(�j\_s*�[\|�}\_s*��\)\)\)\|��\_s*\%(�C\|�b\_s*[�g�c]\)\)\|�x\_s*��\_s*�i\_s*�[\|w\_s*e\_s*b\_s*�T\_s*\%(�C\_s*�g\|�[\_s*\%(�o\|�r\_s*�X\)\)\|�x\_s*��\|�o\_s*��\_s*�^\_s*�[\|��\_s*\%(��\_s*��\_s*�c\_s*�u\_s*��\_s*�N\|�H\_s*��\_s*�t\|�B\_s*\%([�[��]\|��\_s*\%(��\|�w\_s*��\_s*��\)\)\|�F\_s*\%(��\_s*�_\_s*�[\_s*�X\|��\_s*�i\_s*�[\|�[\_s*�o\_s*�[\|�C\_s*��\)\|�@\_s*\%(�C\_s*[���X]\|�[\_s*�O\_s*�i\_s*�[\|��\_s*�_\|��\_s*\%(�^\_s*�[\|�L\_s*��\_s*�[\_s*��\)\)\)\|�_\_s*�u\_s*��\_s*��\_s*�[\|�^\_s*��\_s*�O\_s*�X\_s*�e\_s*��\|T\_s*\%(h\_s*e\_s* \_s*W\_s*o\_s*r\_s*l\_s*d\_s* \_s*W\_s*i\_s*d\_s*e\_s* \_s*W\_s*e\_s*b\_s* \_s*C\_s*o\_s*n\_s*s\_s*o\_s*r\_s*t\_s*i\_s*u\_s*m\|u\_s*n\_s*g\_s*s\_s*t\_s*e\_s*n\)\)', - \ 'X' : '\%([��H����F����D����B����@���w���V���~��X]\|�\_s*[�����]\|�b\_s*[�H�F�D�B�@]\|��\_s*[����������]\|�V\_s*��\_s*\%(�z\_s*��\|�t\_s*�H\_s*��\)\|�W\_s*�I\_s*��\|�[\_s*\%(�r\_s*�E\_s*�X\|��\_s*\%(�b\_s*�N\_s*�X\|�O\_s*��\_s*�t\_s*�B\)\)\|�n\_s*�r\_s*�G\_s*��\|�U\_s*\%(��\|�r\_s*�G\_s*��\)\|�L\_s*\%(�V\_s*\%(��\|��\_s*��\|��\_s*�g\_s*�[\_s*��\)\|�Z\_s*�m\_s*��\|�T\_s*��\_s*\%(�`\_s*��\|�^\_s*��\)\)\|E\_s*x\_s*t\_s*e\_s*n\_s*s\_s*i\_s*b\_s*l\_s*e\_s* \_s*M\_s*a\_s*r\_s*k\_s*u\_s*p\_s* \_s*L\_s*a\_s*n\_s*g\_s*u\_s*a\_s*g\_s*e\|�N\_s*\%(�V\_s*�[\|��\_s*�X\_s*�|\_s*�X\_s*�g\|�Z\_s*\%(�i\_s*�L\_s*�X\|�m\_s*�t\_s*�H\_s*��\)\|�U\_s*��\_s*�B\_s*�G\|�T\_s*\%(�C\|��\_s*\%(�g\_s*�X\|�`\_s*�b\_s*�y\|�e\_s*�B\_s*�b\_s*�y\)\)\|��\_s*�X\_s*�}\_s*�X\)\|�G\_s*\%(�N\_s*�X\|�b\_s*�N\_s*�X\)\)', - \ 'Y' : '\%([։ߕ֍������H�V�ş�ꔗ����؊��Z���ݝ����g���Z�|�~�}�����Ĕ���ϑ��b���b���щx�X�����\���c���c�U���i�F��g�`ᇞ����՗x�揜J�L�Ȟ@�f�����uꡜ���y�����s�@����T��ᘟ���~���m������籝X�yꢗq�s�i�^�w�g�j�s�f��g�t匍��r�o�����חl�d�p�n�їw�z�m�Ï��h�^�S焛@�����㏜棟b���a�Ǘ_�P�`���]�r�Ĕ��S��㿉r���\�\�Q���P�a�����o�K�l�l�P�I�^椂��㒏����̎͒o�ɒ�����t沖L��u���V�K�ᛮ�|��w�䓎樏�ଉ�����������w��亗W���z�F����C�Q���������ޗC�G���E�P�Z�X�N�O�S�З[�H�I�֗F�Y�J�L�k��ሖ����@�g�V�h��O䥝��R埙`�����A懝����|�������M���g���J�䲃���ꍘc�U�T���������n�������翔�䑌���������恍ݍ��������r�x�������É��j囚|���d�Q�U���|��軗��Ƒ������B�d���{���Nj�佈��䆍��m�n�ؐF���A�t����F������泌Ìމ��L�����d�������ƜјJ���i��ꌒ��Փk�v����ɔžo���������֌��y������M�E���|�ځ��e�퐈�M����臐��Y���O�����ΖZ�}��x���א򌵉��M�Ձ��O䗚P�{���b�����w�����~�N�}�z�c���c��硉Ɏ��h�����䕟J����s�W���]�b�K�\���Tฐ��]�r����m�П��Ȉ��Z���Ԉ��T�D�M�Κ�I�����C��������m��覉@������u�B�A��A�ޛ���j�H���و�Ί�ֈ�È�1�P�����D�y���I��D�R�����۔џ��ʈዏ�H�ƍ֋U�������h�w�ψ͉]����}�u�b�v���]�Ό��≝�g�М���@�E���S��盈���B�Ο��ݑP�����R�҈Ȋ��U�ג��ߘߛ��ږ����ˆ̈،܈Η��͜}�Ė��ˈ��ԍs��਒_�ˑ��������ޗǓ��o�֗��D�K���~�������䏈ӈۈ��؈ً����e����Ԅ`���t�c���b�ّ������q���ۈŔs���M���l����h�E�`�_�ʗ�S�Q���n���a�_��–z�l���˗D���y������ي��VꞟK������o���Z�މv�N��u��������k����欎��淏��k�q�s�t�r�R�Кݓ@�D洗{�k����J�їT���׈Ջx�ۍN����❔������J�Ĝ\��̖��t�j熔W���쉮�ƕa����ߖ����ˎܓi�댭ውƔ��E�~�������x�u�E�~�����������v�F�����������J�҃C�\���z��Y]\|�\_s*[�ղ�]\|�b\_s*[�����C��]\|��\_s*[��䂢��]\|��\_s*��\_s*�b\|�^\_s*��\_s*�b\|�I\_s*��\|��\_s*��\|�B\_s*��\|�I\_s*��\|y\_s*o\_s*\%(t\_s*t\_s*a\|c\_s*t\_s*o\)\|4\_s*\%([�“�����]\|��\_s*��\|��\_s*��\)\|��\_s*��\|�m\_s*�j\|��\_s*��\|��\_s*��\|�F\_s*��\|��\_s*��\|��\_s*[�q��]\|�j\_s*��\|�h\_s*�L\|�@\_s*��\|�V\_s*��\|��\_s*[���j]\|��\_s*[�q��]\|�i\_s*��\|�W\_s*��\|8\_s*��\|��\_s*��\|�t\_s*\%(��\|�^\_s*�[\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|�~\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|�S\_s*��\|L\_s*i\_s*l\_s*i\_s*\%(o\_s*p\_s*s\_s*i\_s*d\_s*a\|a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\)\|��\_s*\%(�Y\|��\_s*��\)\|��\_s*�M\|��\_s*��\|��\_s*��\|��\_s*��\|E\_s*\%(u\|��\_s*�[\_s*��\)\|�a\_s*��\|J\_s*u\_s*\%(l\_s*i\_s*a\_s*n\_s*i\_s*a\_s*l\_s*e\_s*s\|n\_s*c\_s*a\_s*l\_s*e\_s*s\)\|�c\_s*�J\|�c\_s*��\|�G\_s*�s\|�\\_s*�Z\_s*��\|�Q\_s*�q\|�G\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|N\_s*a\_s*j\_s*a\_s*d\_s*a\_s*l\_s*e\_s*s\|��\_s*�G\|��\_s*��\|��\_s*�t\_s*��\|5\_s*[�“�]\|�T\_s*[�“�]\|��\_s*�E\|�r\_s*�U\|��\_s*��\|��\_s*�Y\|��\_s*�[\|��\_s*��\|�~\_s*��\|��\_s*��\_s*��\|�{\_s*��\|�o\_s*��\|��\_s*�g\|�Y\_s*[���q]\|�h\_s*[�‘�]\|�@\_s*��\|U\_s*\%(��\|�^\_s*�[\_s*��\|r\_s*t\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\)\|�E\_s*[�c�R]\|�d\_s*\%(�`\_s*�r\_s*�s\|�u\_s*�d\)\|�C\_s*��\|�]\_s*[���o��Z]\|��\_s*��\|��\_s*�q\|�_\_s*��\|��\_s*��\_s*��\|��\_s*�r\_s*��\|G\_s*\%(l\_s*u\_s*m\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\|r\_s*a\_s*m\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\|i\_s*n\_s*k\_s*g\_s*o\_s*p\_s*s\_s*i\_s*d\_s*a\)\|��\_s*��\|��\_s*��\_s*��\|�r\_s*��\|�s\_s*��\_s*��\|�o\_s*[�E����]\|�\_s*[�W�k]\|�C\_s*[�؎Q]\|��\_s*�\\|��\_s*��\_s*[�ΒY]\|�_\_s*�F\|�e\_s*[����]\|�p\_s*\%([�꓍��]\|�g\_s*��\)\|��\_s*��\_s*��\|��\_s*[�ȉ���]\|D\_s*i\_s*a\_s*p\_s*e\_s*n\_s*s\_s*i\_s*a\_s*l\_s*e\_s*s\|�s\_s*[�”@]\|��\_s*�{\|��\_s*��\_s*��\|��\_s*��\|��\_s*�L\_s*�n\|��\_s*��\|��\_s*[�c��]\|R\_s*a\_s*f\_s*f\_s*l\_s*e\_s*s\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|��\_s*��\|��\_s*��\|��\_s*��\|�V\_s*�\\|�`\_s*�G\|��\_s*�{\_s*��\_s*��\|��\_s*�a\|T\_s*\%(h\_s*e\_s*l\_s*i\_s*g\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\|r\_s*o\_s*c\_s*h\_s*o\_s*d\_s*e\_s*n\_s*d\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\)\|M\_s*y\_s*r\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\|��\_s*��\_s*�t\|��\_s*��\|A\_s*r\_s*a\_s*c\_s*a\_s*l\_s*e\_s*s\|P\_s*\%(o\_s*a\_s*l\_s*e\_s*s\|l\_s*u\_s*m\_s*b\_s*a\_s*g\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\|r\_s*\%(o\_s*t\_s*e\_s*a\_s*l\_s*e\_s*s\|i\_s*n\_s*c\_s*i\_s*p\_s*e\_s*s\)\|a\_s*l\_s*m\_s*a\_s*l\_s*e\_s*s\)\|��\_s*�q\|��\_s*[���j]\|�G\_s*\%(�z\_s*�o\|�t\_s*�Q\_s*�j\_s*�[\|��\_s*��\_s*�@\_s*��\|�j\_s*�Z\_s*�C\|�[\_s*��\)\|��\_s*�C\)', - \ 'Z' : '\%([�󉀉��ꑹ��������㔛������������������m�ґX�����f�h�ّ��������ۑ����Y���\�����]��萊��A�K㿑R��䒑U�W�N��征͑V陑T�P�Q�f�O�S�␨������ҐƐŐ��U�ӂ��ž����l�b齕�����A�Z�B������@笐��������C���t�Ó��|�~�D�}���ߍ������󓈎ȓ��������ǎ����w�x����c��H苎ҍ��׎��l�����������㒼�Ó�����K���������H�Ԙ�ᶙ��b�����i�u�@�v�ސn�Չ`�r�x�����o�s�q�w�p�t�l�ŏ��ғ�䴞`䥝�募��t�J����珊�R���������P�����ԟ��i�Uㅏ��{�o������媝m�h���鈐������Y�t��������Y����竐������j�g�@�ݖ�����Ï��ꏗ�����`������~�]��꞊��󝵏������������������G�����A�ژh�G�Q榜휵���@���u���Q�x�h�m��n���p�q���m�m⢙Ï��|⡓���՟��~�[�x����{䤏��z���������y�}�������}��汎�������������G�����E�s���n�𘸏^�F�_�`���O�c�a�_�Y���[�b�]�\�Z�e�d�������m�����������莣���^���y�~�����������i���J玎�������Ȓn�����􎤎��~�������I�m�������V�����k�q���H�j�a�Z���d��������䢎������m�������V�������␷��╍蛽�N���M�����赞��ƎL�G�R�Z�Q�S��ₜ�͛؜�k�O��槎S�b�Μ͎a�c�Z�ː��čϙ����܍ލ��ߍݍ�o������U��������������Y�������]���[�������G�w�Y�]��Z���U�y�W�[�x�ĄH��Z]\|�\_s*\%(�\_s*�\|�\_s*�\|�\_s*�\|�\_s*�\|�\_s*�\)\|�b\_s*[�]�[�Y�W�U]\|��\_s*[����������]\|�\_s*�\|��\_s*��\|�o\_s*��\|��\_s*[�����q]\|�\_s*�\|z\_s*e\_s*\%(t\_s*t\_s*a\|p\_s*t\_s*o\)\|��\_s*��\_s*��\|��\_s*��\|�O\_s*��\|��\_s*��\|��\_s*��\|�\_s*��\|�\_s*�\|��\_s*�p\|��\_s*�o\|�C\_s*�@\|�m\_s*��\|��\_s*��\|�k\_s*[�ߌY]\|�\_s*��\|��\_s*�s\|F\_s*i\_s*g\_s*u\_s*r\_s*e\|�\_s*�\|G\_s*\%(��\_s*��\|�p\_s*��\)\|D\_s*y\|�f\_s*\%(��\_s*��\|�p\_s*��\)\|�x\_s*�x\|��\_s*��\|�Q\_s*��\|2\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*�q\|J\_s*\%(I\_s*S\_s*�R\_s*�[\_s*�h\|�|\_s*�b\_s*�v\|R\_s*��\_s*��\_s*�{\)\|��\_s*�q\|�b\_s*��\_s*��\_s*��\_s*��\_s*��\_s*�M\_s*�h\_s*�p\_s*�\|k\_s*\$\_s*_\_s*{\_s*e\_s*f\_s*f\_s*}\_s*\$\|�[\_s*\%(��\|��\_s*��\)\|�`\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|�R\_s*�l\|�y\_s*�_\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*�r\_s*��\|��\_s*�v\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[���@�S����������]\|C\_s*a\_s*b\_s*o\_s*m\_s*b\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|�i\_s*\%(��\_s*�[\_s*�O\|�|\_s*�b\_s*�v\|�t\_s*�m\_s*�j\_s*�n\)\|��\_s*�q\|��\_s*��\|�P\_s*\%(�Q\|�O\_s*[�i��]\|�P\_s*��\|�U\_s*�i\|�W\_s*��\)\|�t\_s*��\|��\_s*��\|�R\_s*��\|1\_s*\%(0\|1\_s*��\|8\_s*��\|2\_s*��\)\|�\_s*�\|��\_s*��\|��\_s*��\|�\_s*�u\|�e\_s*��\|��\_s*��\|��\_s*��\|��\_s*�{\|�U\_s*��\_s*��\|��\_s*�H\|��\_s*��\|�T\_s*\%(��\_s*��\|��\_s*�|\_s*�[\_s*�j\_s*��\|��\_s*�S\_s*�T\)\|�V\_s*\%(�^\_s*�[\_s*��\|�I\_s*\%(��\|�j\_s*\%(�X\_s*�g\|�Y\_s*��\)\)\)\|�`\_s*\%(�N\_s*��\_s*�X\|�A\_s*�m\_s*�[\_s*�[\|��\_s*�[\_s*��\_s*\%(�q\|�b\_s*�q\)\|��\_s*��\_s*�_\_s*�b\_s*�V\_s*��\|�S\_s*�C\_s*�l\_s*��\_s*��\_s*�C\_s*�[\_s*��\)\|�c\_s*\%(�@\_s*\%(��\_s*�g\_s*�D\_s*�X\_s*�g\_s*��\|�C\_s*�g\)\|�F\_s*\%(�i\_s*�[\|�b\_s*�y\_s*��\_s*��\|��\_s*�}\_s*�b\_s*�g\)\|�B\_s*\%(�N\_s*��\_s*�X\|�^\_s*�[\|�[\_s*�O\_s*��\_s*�[\|��\_s*\%(�o\_s*��\_s*��\|�}\_s*�[\_s*�}\_s*��\)\|�S\_s*�C\_s*�l\_s*��\)\)\)', - \ } -endfunction diff --git a/bundle/easymotion/autoload/EasyMotion/migemo/eucjp.vim b/bundle/easymotion/autoload/EasyMotion/migemo/eucjp.vim deleted file mode 100755 index 9c9a3b2..0000000 --- a/bundle/easymotion/autoload/EasyMotion/migemo/eucjp.vim +++ /dev/null @@ -1,56 +0,0 @@ -function! EasyMotion#migemo#eucjp#load_dict() - return { - \ 'a' : '\%([���������Գ���ȯϾ�տ��ƭ�����޾���ӡ��Ť�������Ƭѫ������ͷ�ʷ��İ�Ϳ���������������������ø�������ܶ�������̵����ܵ���������驰��н�������ƪ��鷹ѻ�����ˢ��ǽ�����������ܽ����֦���½�Φ����ؽ����Ǯ�����Ȳ���䰵�Ǵ�������ռ��ݯ�м�������Թ���������ڹ����������ײ�Ϫ��ɽ��������������¹�ͽЮ���������ɷ������庾Ӻ̴������ɵ�����ఽ���������������;������ŷ�������°�����ֵ��ϰ�̣������Ԫƴ�����갮����������������������������ů��ۭ��μ������氰�ᄑϯ�����۸�ޫ��������ۦۥ���˾Ͼ������������������Լݷ�����ʸۣ��齶��ϰ����갥���欷�����԰ǰ��ްưð���Ȱ�����ī�ﰦ��������ð�������­���ҹ������Ӽ밫�Ƽ�������ǹ��������˽�����������������˰����ķ��°���մ���尤�Ը��ʻ�����������ᰢͭ�������˴������±޽�����ک�����г���󰸶�˰ب�Ĥ����������&�ʢ����ܶ��϶���΢����͢����޸姸���ơ��������ǡ�����򦡥��ѧ�a]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|Z\_s*\%(n\|i\_s*n\_s*c\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*ŷ\_s*��\|��\_s*ŵ\|��\_s*��\|��\_s*��\|��\_s*Ʀ\|��\_s*��\|��\_s*��\|��\_s*̾\|�\_s*̾\|��\_s*��\|��\_s*��\|��\_s*[��Ļ]\|��\_s*��\|��\_s*��\|��\_s*��\|L\_s*a\_s*r\_s*d\_s*i\_s*z\_s*a\_s*b\_s*a\_s*l\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*��\|��\_s*\%(��\|¹\_s*��\)\|��\_s*\%(��\|��\_s*��\_s*��\_s*ʪ\_s*��\)\|��\_s*��\_s*��\|H\_s*a\_s*l\_s*o\_s*r\_s*a\_s*g\_s*a\_s*l\_s*e\_s*s\|ޱ\_s*��\|��\_s*��\|Ʀ\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*¿\|��\_s*��\|��\_s*��\|��\_s*[������Ǭ]\|��\_s*��\|��\_s*[��ɧ]\|��\_s*��\|��\_s*��\|��\_s*��\|Ҹ\_s*��\|��\_s*\%([����]\|��\_s*��\|��\_s*��\)\|��\_s*[�ˡ�]\|E\_s*\%(s\|i\_s*n\_s*s\_s*t\_s*e\_s*i\_s*n\_s*i\_s*u\_s*m\)\|I\_s*\%(r\_s*i\_s*d\_s*a\_s*l\_s*e\_s*s\|P\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\)\|D\_s*��\_s*��\_s*��\|C\_s*\%(��\_s*��\|��\_s*��\_s*��\)\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\)\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*[ɿ�ͽ�������]\|R\_s*u\_s*b\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[������]\|M\_s*a\_s*l\_s*v\_s*a\_s*l\_s*e\_s*s\|��\_s*��\_s*��\_s*��\_s*A\|��\_s*��\| \_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|G\_s*o\_s*l\_s*d\|��\_s*ư\_s*\%(��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|°\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|S\_s*\%(b\|i\_s*l\_s*v\_s*e\_s*r\)\|��\_s*��\_s*��\_s*ǽ\|��\_s*��\_s*��\_s*ǽ\|��\_s*ˡ\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*\%([����]\|��\_s*\%(��\_s*��\|��\_s*��\)\)\)\|��\_s*\%([�������ȥ��]\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\)\)\|��\_s*��\_s*��\|��\_s*\%([����]\|��\_s*��\_s*��\)\|��\_s*��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\)\)\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*\%(��\_s*��\_s*��\|��\_s*ǽ\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\|��\_s*��\)\|A\_s*\%([tlrImc]\|u\_s*s\_s*t\_s*r\_s*o\_s*b\_s*a\_s*i\_s*l\_s*e\_s*y\_s*a\_s*c\_s*e\_s*a\_s*e\|n\_s*t\_s*i\_s*m\_s*o\_s*n\_s*y\|K\_s*C\_s*L\|S\_s*C\_s*I\_s*I\|s\_s*t\_s*a\_s*t\_s*i\_s*n\_s*e\|��\_s*��\_s*��\|T\_s*O\_s*K\|N\_s*S\_s*I\|V\_s*��\_s*��\_s*��\_s*��\|L\_s*T\_s*��\_s*��\|��\_s*��\_s*��\|E\_s*R\_s*A\|D\_s*S\_s*L\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|d\_s*a\|M\_s*��\_s*��\_s*��\|b\_s*s\_s*t\_s*r\_s*a\_s*c\_s*t\_s* \_s*C\_s*o\_s*n\_s*t\_s*r\_s*o\_s*l\_s* \_s*M\_s*o\_s*d\_s*e\_s*l\|��\_s*��\_s*��\|��\_s*��\_s*��\|C\_s*��\_s*��\_s*��\_s*��\)\|��\_s*Ͽ\|��\_s*\%([������]\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\|��\_s*\%([�˥ᥢ����]\|��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\)\)', - \ 'b' : '\%([���߹�������������������������������������ڽھ������������������˲������������ѳ����������̶���˦��꼰����汬�������˳ر˸��˹��˻˶����˺����������˴��˾����˵˿���������������������籸�����촳Ħ����˷ը����˫���������������ѹ���������ʽٷ��ҡ��������޺�����������������������˼������ūʥ��޽޼�����������޿������������������ʪ�ɲ�ʹʸ��̵�����������ʬ�������������������ק�������£����������͹�������ɵɤ�����ޣ�����ֱ�������ؾ��ݧ���������������ɴ�����졪�¡�����ɼǭ��֢���ʿ������������������ջ��������̤��������������������׹߾������������Ȣ�����®�Ӷ�˪����ȭ��ƯȫȪʵ��ɡüΥ��V̥����ȵ��ٶȶǢ��ʢ�Ļ�ʧ㱸�����Ȥ���������������˽�������������������ʱ��������������೭����������������ȹ���������Ȩؤ��Ƚ���������������ȼ㩺������������������Ȳ������ȴȳ�����������粽�ڱ��������������ĥŽ�У��ʩ�����ݲ���ߡá¡ݡ������ܥСϡΡСѥ֥ӧ����Ҧ¥�b]\|��\_s*\%(��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\)\|��\_s*[�ܥ٥֥ӥ�]\|��\_s*[�ܤ٤֤Ӥ�]\|��\_s*��\|��\_s*��\|�\_s*��\|P\_s*a\_s*e\_s*o\_s*n\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|�\_s*��\|��\_s*��\|��\_s*Ǥ\|��\_s*��\|��\_s*[����]\|��\_s*��\_s*ݰ\|F\_s*a\_s*g\_s*a\_s*l\_s*e\_s*s\|��\_s*��\|�\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|˭\_s*[����]\|��\_s*��\|ŷ\_s*�\_s*�\|��\_s*[��϶]\|׽\_s*˥\|��\_s*[̡˥]\|��\_s*Ҵ\|��\_s*Ƭ\_s*�\|��\_s*��\|��\_s*��\|S\_s*a\_s*n\_s*t\_s*a\_s*l\_s*a\_s*l\_s*e\_s*s\|��\_s*��\|ʼ\_s*[��ˡ]\|ɽ\_s*��\|��\_s*[�Ļ�]\|��\_s*��\|ȯ\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|R\_s*o\_s*s\_s*a\_s*l\_s*e\_s*s\|�\_s*�\|��\_s*��\|��\_s*\%([�ӳ�ϫ]\|��\_s*��\_s*��\)\|�\_s*��\|�\_s*��\|��\_s*��\|A\_s*n\_s*n\_s*o\_s*n\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*��\|��\_s*[����]\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*[����]\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*\%([��Ƚ�鷿��]\|��\_s*˦\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s* \_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\|B\_s*\%([h��Ƚ�鷿kiae]\|C\_s*ʼ\_s*��\|N\_s*F\_s*(\_s*B\_s*a\_s*c\_s*k\_s*u\_s*s\_s*-\_s*N\_s*a\_s*u\_s*r\_s* \_s*F\_s*o\_s*r\_s*m\_s*)\|B\_s*C\|��\_s*��\_s*��\|u\_s*r\_s*k\_s*i\_s*n\_s*a\_s* \_s*F\_s*a\_s*s\_s*o\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|M\_s*P\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|S\_s*\%(D\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|O\_s*X\_s*��\_s*��\_s*��\|I\_s*T\_s*N\_s*E\_s*T\|r\_s*o\_s*m\_s*i\_s*n\_s*e\|��\_s*��\_s*��\|o\_s*\%(h\_s*r\_s*i\_s*u\_s*m\|v\_s*i\_s*n\_s*e\_s* \_s*S\_s*p\_s*o\_s*n\_s*g\_s*i\_s*f\_s*o\_s*r\_s*m\_s* \_s*E\_s*n\_s*c\_s*e\_s*p\_s*h\_s*a\_s*l\_s*o\_s*p\_s*a\_s*t\_s*h\_s*y\|o\_s*k\|r\_s*o\_s*n\)\)\|��\_s*��\)', - \ 'c' : '\%([���²����ݰ���ť������������ޢ������ͷ°�������������Я⸿�Ƚ�Ҹ����Ǽ����ۻ�������ô�㪸��ۺ��������礷���򼷻쮱����������Ѻ���˹����Ϲ���ٹ������ʺ��ú��������̶�������������������縥���պ������������ۦ�Ĺ����ȹ���������ָ����벹�Һ����٬̫�������ޫ�޳��������䲬��������ު־�����������������������������������������ϹϺ�������٫��Ⱥ������ӫ����ִ�����������ӳ������������������Ӭ�����ص��������޸���ܺս�幡������������͹�䢹�̨����ɹ������ж���๫�ʹ����Ĺ�á�������񹸹��ۥ��������⫹���ֹѸ����������۹չ������̹��˹��عֹ���骹ݹҹ������Թιӹ�ĸ�������ë����������ӭ�͹����޺��������ݻ�����ջ��̼�Ե���ʴ����������Ը���������������������Ƹ۸���ž�������Ķ���ٸ�Ĩ��������������̱۸ɸָ���ܵ������ʽ�����ѻ�������������ᡵ�ǻ��۹��������ɯ����˻���í�ܦ岱���ӵ������ʡ�������޶��٣�໦��������������������������������Ҫ����ͼ���������������������������������������������ٰ���������������֣ڱ��������·����޷�����߫���������������ѩ���Ѣ�����������������������ߥ����������������ѡ����������������������٥Ѩ����������ڣ������������������������������������ݺ���������ګ���������̻�������������������������خ����ع���������������ɹ�������������������Ԥ�����ܯݬݮ��ܱܮ�ݫ������ʵ��ߪ�������������������������������ʤ������վ�߷�������ţ賷�Φۻ����Ү���������·��ط����״����򷬷���������ڶ�������˿��ֲ��̽�����ǰ̰�鶰��������פ��޺���������������ޱ�����Ϳ����������߸������������Ѧ�����庿����ܸ���ȷ������������ˮԢ������ʭ�Цչ����������ġ������ҵ׹�����������������޷��˹��ȸ�����Ң������ڹ��������׶�������ҿ�ȴ���ȷ����ͤ���Ա�������飼�������������ý�Ƴ������ħ����󻼲�������١��������Ĵ������ɸ¢ֺλ����������ߨߧ�¼Ȼ������ο�Ǧ�������ǧ��к�����尷樵Ԧ����������������ܰǢ���������������ܾ����������ؼ������������ż�Ĭ߼���ȼ����𮼻ꩼ�������ɨ���������ũ���������ż�������ʻ��������������������͸忬�ļ������������������ҼԺ������ա�����ĵ��������հ���ռ�������ޯ�κ���բ��ٱ�ؼ��ڷ�����������������������ּ�忼��м�ܼ�����Ѽ׼ͼм˼ּ�Ұ����ʵ�������ż�ެ������ոշ��ܤܣƵ��������������ý�������ʽȽͽɽܼ̿�����������꫽н���ܶ������������������ꪽ��������Ӵ֭�������ϼ����������������������ܽ�����µ�½�����������������������������������Ѯضآ߽�����������ؽ�޴�׽ٽ���䣽ֽ����߿���������������������������Ӣ��������������֪��ǿ������������п¿��������Ŀ˿��ӿ��¿��ǿ���ä���⿹���ƿ����������ʿ������ƿ�謹����������е��������������������������ؽ��������������޵�����������ַ����Ҿ�����������ľ���䬼������������ֹ᳻��������ļ�������������װ�������գ����ң�ط�����������������������Ӿԡ����������Ľ������ؾ����������������Ѿ�����ء�Ͼ��������޾�������������۾¾���騾��ľ㾩�������ܥ�����񾬽��������������Ͼɾ����˾�������ƴ�Ҿ;����о��ƾȾ��Ͼܾþھ˾�����������������������ԧ֤�ѿ�����°�������������濣���鿨�������������л����ػ����㭻�׶�������������������Ӷ��Ǽ�����ӡ���ܻ�������������������������ҿ��Ӻ���ǡ����ɦ�������������֬����寿����¶���ǻ���������������������л�������ף�㬰�Ԯ��Ƿ�Ȼ�ֻ����ѻ���ʻ�̼���������������������̦��Ż���������������ڻ�����ڼ���褴��������λ�Ƥ����������ڹ��ɳ�����߳��˹��ȷ�̢���ư��񢿱Ʊ����ʡ�ܢ��������������ᱵ������������𦪦ʹ�ǡˡҡԡơȡɡѡСա������ج�ɳ�����϶��������������Ѿʸܵ�ȿ����������ǣ�����ʶ�ͽ�����г����Ͼݵع�˵�����ۿ��ٸ��Ƿ����շ�����ͩ������Ϋ��������������������K�Ĵ�������ȱ�������١Ҥ���ҳ��ݢ��ٿ��Ȧ����۫滳�������ܾ��龹�ô���������������������������Ž��޳���������ڳ³����������������������귰������¦���������ǰ�����㡴����姢�������������������������റ����������ҳ��������ݲ��������ҳ����˿����������ڸ����ি�ԣ�����ϸ³ø�����֡١סʷ�����ŭƬ������ŨŬ�Ⱦ�Ť�״׳�����ᰥ��ɬ������Ŵ����ܷ�������̳������봢�Խ�����ڲ��������Ӿ��������������׳�������ڨƿ����ӽ�dzӡϡۡڡ̡͡γ��ȳijԳճʳ��߱��׳���ڼ����ȵҳֳѳ�����Т������Ӽ����뻳�����һר������ݥ�����������������ų�����Ъ�����������Ļ�����������ӳ���ܴ��������߳����ٳ����β����𳭳������dz��������򳬲������������Ԭ��٪�Хٺ������������ù���������٢��Ӳ�����ߵ������۸������������������Ұ���������楼������������������Ѵ���޾�˸�˧�����ӳ�������ޱ�ڿ����ͻ�ô������ÿ�����������ȡ�����ȴ���䯴�������԰�ݴ����۴���ڴ��������Դ�ա�����̴�����δ��˴���ע������Ӵ������Ĵִٴ��״�ӿ���Ŵ��ɴ����ش��ϴ������Ѵ��ش������Գҵ��ȴճƶ�������������Dz����μ����ŲͲ�ӻ�����۷紣�Ҳԥ�Ф�����������Ҳһ��ݲݲִ�������������������ּ���������������ȼڲ�桶���˲Űײ�����ӧ��������ҷ����ܴ���������ѫ�β������βϲѼ����н��������ӥ��������ѷ��������ϲӲ����ɲշ��������߲��������Ʋ��²�������Ⱦ���������Ƹϲˤ��㡦�ı��Ķ��Ƣ����۲ø�ҧ��姨�ৣ�����٧ا��������ӧ���ݧ�����᧷���������������짢�����ۧ秮�ܧ��ԧէާ觯���קѧڧ�֧䧡�����𧦧����ߧ맥�������ߨ���������Ƽ���֦��ҧ駹�����ݡ��������׶������������ܥ����������������������񥷡c]\|��\_s*[����������]\|��\_s*[����������]\|��\_s*[�Ҥ���������]\|��\_s*��\|��\_s*��\_s*Ⱦ\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*ϧ\|��\_s*��\|��\_s*��\|�\_s*��\|f\_s*o\_s*o\_s*t\_s* \_s*a\_s*n\_s*d\_s* \_s*m\_s*o\_s*u\_s*s\_s*e\_s* \_s*d\_s*i\_s*s\_s*e\_s*a\_s*s\_s*e\|��\_s*Ѥ\|��\_s*��\|A\_s*\%(r\_s*c\_s*h\_s*i\_s*c\_s*h\_s*l\_s*a\_s*m\_s*y\_s*d\_s*e\_s*a\_s*e\|p\_s*i\_s*a\_s*l\_s*e\_s*s\)\|U\_s*m\_s*b\_s*e\_s*l\_s*l\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\|��\_s*��\|��\_s*��\|��\_s*ˡ\|��\_s*[�ʺ�]\|��\_s*[��϶]\|ѱ\_s*��\|��\_s*��\|��\_s*[̱����]\|��\_s*��\|�\_s*��\|ɴ\_s*[߻��]\|��\_s*��\|9\_s*[����]\|�\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*��\|ŵ\_s*��\_s*��\|õ\_s*��\|��\_s*¢\_s*��\|H\_s*e\_s*l\_s*l\_s*e\_s*b\_s*o\_s*r\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|��\_s*��\|J\_s*u\_s*g\_s*l\_s*a\_s*n\_s*d\_s*a\_s*l\_s*e\_s*s\|ϻ\_s*��\|��\_s*��\|��\_s*��\|R\_s*h\_s*a\_s*m\_s*n\_s*a\_s*l\_s*e\_s*s\|Ϸ\_s*��\|˾\_s*Ĭ\|��\_s*[������]\|��\_s*Ϣ\|��\_s*[��Ǧ]\|��\_s*��\|L\_s*a\_s*\%(u\_s*r\_s*\%(a\_s*c\_s*e\_s*a\_s*e\|o\_s*i\_s*d\_s*e\_s*a\_s*e\)\|b\_s*i\_s*a\_s*t\_s*a\_s*e\|m\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\)\|��\_s*��\_s*��\|ʾ\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|ت\_s*ͺ\|��\_s*��\|��\_s*��\|I\_s*\%(s\_s*o\_s*p\_s*y\_s*r\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|l\_s*l\_s*i\_s*c\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\)\|W\_s*i\_s*n\_s*t\_s*e\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*ʸ\|��\_s*[����]\|�\_s*\%([��α���ֲ����˼���]\|��\_s*��\|Ǽ\_s*��\|��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\)\|7\_s*��\|��\_s*��\|ʸ\_s*��\|4\_s*��\|��\_s*[ʬ��]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[�̰�]\|��\_s*��\|��\_s*\%(̣\|��\_s*��\)\|��\_s*[����]\|͢\_s*[����]\|´\_s*��\|B\_s*r\|Ȼ\_s*[ϯϺ]\|�\_s*[���]\|��\_s*[���]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|M\_s*\%(e\_s*t\_s*a\_s*c\_s*h\_s*l\_s*a\_s*m\_s*y\_s*d\_s*e\_s*a\_s*e\|u\_s*s\_s*a\_s*l\_s*e\_s*s\)\|Z\_s*i\_s*n\_s*g\_s*i\_s*b\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|S\_s*\%([eg]\|p\_s*e\_s*r\_s*m\_s*a\_s*t\_s*o\_s*p\_s*h\_s*y\_s*t\_s*a\|c\_s*i\_s*t\_s*a\_s*m\_s*i\_s*n\_s*e\_s*a\_s*e\)\|³\_s*\%(��\_s*��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*�\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\|��\_s*ƻ\)\|��\_s*��\|Υ\_s*��\_s*Υ\_s*��\|��\_s*��\|��\_s*[����]\|��\_s*��\|��\_s*Ƭ\|��\_s*\%(��\|��\_s*��\)\|Ĺ\_s*[�]\|��\_s*��\|ŷ\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\|O\_s*x\_s*a\_s*l\_s*i\_s*d\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*[����]\|�\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*[����]\|̱\_s*��\|��\_s*��\|E\_s*\%(b\_s*e\_s*n\_s*a\_s*l\_s*e\_s*s\|l\_s*a\_s*n\_s*a\_s*l\_s*e\_s*s\)\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|P\_s*\%(i\_s*p\_s*e\_s*r\_s*a\_s*\%(l\_s*e\_s*s\|c\_s*e\_s*a\_s*e\)\|t\_s*e\_s*r\_s*i\_s*d\_s*o\_s*s\_s*p\_s*e\_s*r\_s*m\_s*\%(a\_s*l\_s*e\_s*s\|i\_s*d\_s*a\_s*e\)\|o\_s*\%(t\_s*a\_s*s\_s*s\_s*i\_s*u\_s*m\|d\_s*o\_s*s\_s*t\_s*e\_s*m\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\)\)\|��\_s*��\|Ϣ\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\)\|�\_s*�\|�\_s*�\|��\_s*\%(��\|Ϥ\_s*��\)\|��\_s*��\|��\_s*[����]\|��\_s*\%([����]\|��\_s*��\|��\_s*��\_s*Ω\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*[����]\|(\_s*��\_s*)\|��\_s*��\_s*��\|��\_s*ʼ\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\|�\_s*��\|��\_s*��\|��\_s*��\|ݣ\_s*��\|�\_s*��\|T\_s*\%(h\_s*a\_s*l\_s*i\_s*c\_s*t\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|u\_s*b\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\)\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*ƣ\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|ʬ\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*[�����׼꾽]\|ʣ\_s*��\_s*̿\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*\%([���]\|��\_s*\%(��\|��\_s*��\)\)\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*\%(��\|��\_s*��\_s*��\_s*\%(��\_s*��\|��\_s*��\)\)\|��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\)\|��\_s*\%(��\_s*\%(��\_s*��\|��\_s*��\_s*\%(��\_s*��\|��\_s*��\_s*��\)\)\|��\_s*��\)\)\)\|��\_s*��\_s*��\_s*��\|��\_s*�\|��\_s*\%([���]\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*[���]\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\)\|��\_s*\%([�����֥ץ���]\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\)\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\)\)\|��\_s*\%(��\_s*��\|��\_s*��\)\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*\%([������]\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\)\)\|��\_s*\%(��\|��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*\%([�ɥѥ��֥��]\|��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*\%([�����]\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\)\)\|��\_s*��\|��\_s*\%(��\_s*[����]\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\)\)\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\)\|��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*\%([�ĥȥ���]\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\)\)\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*\%(��\|��\_s*��\)\)\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*[���]\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*\%([������]\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\)\|��\_s*��\)\|��\_s*\%(��\|��\_s*��\|��\_s*��\_s*��\)\)\|��\_s*��\|��\_s*\%([�����ޥ�]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*\%([�ץ�]\|��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*\%([�եȥץ���]\|��\_s*��\|��\_s*��\)\|��\_s*\%([������������]\|��\_s*\%(��\|��\_s*��\)\|��\_s*\%(��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\)\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*\%([�ȥ���]\|��\_s*��\_s*��\)\|��\_s*\%([����]\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*��\|��\_s*��\)\)\|��\_s*\%([���եɥ��󥳥ꥦ]\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%([����]\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\)\)\|��\_s*\%(��\_s*[����]\|��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*\%([�����ȥॸ]\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*\%([����]\|��\_s*��\)\)\|��\_s*��\_s*��\)\|��\_s*\%([��]\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*��\)\|��\_s*��\)\)\|��\_s*ɸ\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\)\|��\_s*³\|C\_s*\%([srdfDeRoa]\|��\_s*��\|��\_s*��\_s*��\|y\_s*p\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|P\_s*\%(U\|S\_s*(\_s*C\_s*o\_s*n\_s*t\_s*i\_s*n\_s*u\_s*a\_s*t\_s*i\_s*o\_s*n\_s*-\_s*P\_s*a\_s*s\_s*s\_s*i\_s*n\_s*g\_s* \_s*S\_s*t\_s*y\_s*l\_s*e\_s*)\)\|u\_s*r\_s*i\_s*u\_s*m\|M\_s*\%(U\|��\_s*��\_s*��\)\|��\_s*��\_s*��\|T\_s*\%(��\_s*��\_s*��\_s*��\|R\_s*L\_s*��\_s*��\)\|��\_s*��\_s*��\|S\_s*\%(V\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|C\_s*\%(R\_s*(\_s*C\_s*r\_s*e\_s*e\_s*d\_s*e\_s*n\_s*c\_s*e\_s* \_s*C\_s*l\_s*e\_s*a\_s*r\_s*w\_s*a\_s*t\_s*e\_s*r\_s* \_s*R\_s*e\_s*v\_s*i\_s*v\_s*a\_s*l\_s*)\|D\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\|+\_s*+\|L\_s*\%(X\|O\_s*S\|I\_s*S\_s*P\)\|E\_s*S\_s*P\|A\_s*\%(D\|S\_s*[LE]\)\|��\_s*��\_s*��\|I\_s*S\_s*C\|h\_s*\%(l\_s*o\_s*r\_s*\%(a\_s*n\_s*t\_s*h\_s*a\_s*c\_s*e\_s*a\_s*e\|i\_s*n\_s*e\)\|r\_s*o\_s*m\_s*i\_s*u\_s*m\|a\_s*S\_s*e\_s*n\)\|O\_s*\%(B\_s*O\_s*L\|N\_s*T\_s*R\_s*O\_s*L\_s*��\_s*��\)\)\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\)\)\|ú\_s*��\|��\_s*\%([����]\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*2\|��\_s*��\_s*\%(��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\)\)', - \ 'd' : '\%([�������ñ��ӹ������ɾ�������ǯ����Ļ������Ч���������γ����������������ѪƯƺ���ߡ�����ѯƫ�������ƣ�ޡ���Ʒƴ�΢�ƼƵ��Ƴ��Ƹ��Ʋ��ƶưƹ��Ʊƻ��׸�����������۲�αͻϿ�������ظͻ��ڤɻ�����������ǩť��Ů����Ҵ��ޡ����ܬ���ѣ���žȤǥ���ɶ��ʹ˶���������¤��Դ������͸�������������ŵͿ�����Ϣ�ť�������ϼ����¼�êí������ǻ������������ïî���ն��Ե庲��ë�۴��������ݹ�������է��åæǶ�������������ʿ�����ϡ�����������������������ö��׼������������ԥ������������������ٽ��ձ����������ټ����Ωѵ����ί��۴�����̽п������Ѽ߱���ͤ���ľ����Ц������\.���ġ�ȡɢ���������ã����ȥɡ�����������Ǧ��ħբ�d]\|��\_s*\%(��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\)\|��\_s*[�ɥǥť¥�]\|��\_s*[�ɤǤŤ¤�]\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|S\_s*a\_s*u\_s*r\_s*u\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|C\_s*\%(u\|o\_s*p\_s*p\_s*e\_s*r\)\|��\_s*ŷ\_s*��\|Ʀ\_s*��\|ǡ\_s*��\|��\_s*��\|��\_s*��\|Ǵ\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[����]\|��\_s*��\|��\_s*��\|Ƭ\_s*[���]\|��\_s*��\|��\_s*��\|��\_s*��\|Ĵ\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*ã\|��\_s*��\|��\_s*��\|��\_s*��\_s*ã\_s*¿\|��\_s*\%([��˸�]\|ʿ\_s*��\|��\_s*ŷ\_s*��\|��\_s*\%(��\|��\_s*��\)\)\|ǵ\_s*[����]\|��\_s*��\|��\_s*��\|��\_s*\%(��\_s*ʪ\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|ʸ\_s*��\|��\_s*��\_s*��\|ȯ\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*ά\|��\_s*��\_s*��\|��\_s*��\|D\_s*\%(b\|��\_s*��\_s*��\|T\_s*\%(E\|P\_s*��\_s*��\_s*��\|M\_s*��\_s*��\_s*��\)\|M\_s*A\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|C\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|u\_s*b\_s*n\_s*i\_s*u\_s*m\|B\_s*\%(M\_s*S\|��\_s*��\_s*��\)\|H\_s*C\_s*P\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\)\|y\_s*\%(s\_s*p\_s*r\_s*o\_s*s\_s*i\_s*u\_s*m\|l\_s*a\_s*n\)\|r\_s* \_s*P\_s*e\_s*p\_s*p\_s*e\_s*r\|��\_s*��\_s*��\|V\_s*D\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\)\|O\_s*S\|o\_s*\%(c\_s*u\_s*m\_s*e\_s*n\_s*t\_s* \_s*\%(T\_s*y\_s*p\_s*e\_s* \_s*D\_s*e\_s*f\_s*i\_s*n\_s*i\_s*t\_s*i\_s*o\_s*n\|O\_s*b\_s*j\_s*e\_s*c\_s*t\_s* \_s*M\_s*o\_s*d\_s*e\_s*l\)\|C\_s*o\_s*M\_s*o\)\|e\_s*\%(g\_s*e\_s*n\_s*e\_s*r\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\|l\_s*a\_s*w\_s*a\_s*r\_s*e\)\|E\_s*\%(C\|L\_s*��\_s*��\)\|I\_s*\%(P\_s*��\_s*��\_s*��\_s*��\|S\_s*K\)\|i\_s*\%(r\_s*e\_s*c\_s*t\_s* \_s*M\_s*e\_s*m\_s*o\_s*r\_s*y\_s* \_s*A\_s*c\_s*c\_s*e\_s*s\_s*s\|s\_s*t\_s*r\_s*i\_s*c\_s*t\_s* \_s*o\_s*f\_s* \_s*C\_s*o\_s*l\_s*u\_s*m\_s*b\_s*i\_s*a\|g\_s*i\_s*t\_s*a\_s*l\)\)\)', - \ 'e' : '\%([��������ٱ稰��Զ�����������������콸ս���֦�����������廷�ٱܱ������������������ְױ����ر���Ԩ�ų���ɲ��С�������������ݩ��޽��޼�������������������ާ�����Ǣޱ���޻����ʥ������Ԥ�������ϱ������������ͱ��ն�����߱��������۪�б����������հ���������ܳ������ϱ����Ʊñ����ȱԱű�ƱӱDZɱϱı��̱������������޹�����з�ت�Ͳ���������±ݲ�þв��������������������������������΢ᢺ�����⧮�ޣ姯���Ѣм������ǧ㧳�ݧ������ŧ泌e]\|A\_s*\%([��Ƚ����]\|V\_s*\%(��\_s*��\|��\_s*ͥ\)\|B\_s*\%(��\|C\_s*��\)\)\|��\_s*\%([��Ƚ����]\|��\_s*\%(��\_s*��\|��\_s*ͥ\)\|��\_s*��\)\|��\_s*\%(��\|��\_s*��\)\|ɰ\_s*��\_s*��\|M\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*˹\_s*��\|��\_s*ʪ\|��\_s*��\|˦\_s*��\|��\_s*��\_s*��\|Լ\_s*��\|��\_s*��\|��\_s*ϩ\|��\_s*��\|��\_s*[�Ի�]\|��\_s*ƺ\|��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|L\_s*\%(��\_s*��\_s*��\|L\_s*\%(��\_s*��\_s*��\|��\_s*��\)\)\|��\_s*\%([���ɲ]\|��\_s*��\)\|N\_s*��\| \_s*n\_s* \_s*��\_s*��\|��\_s*\%([�Ķ˶�]\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%([�Ȼ��ʶ�]\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\)\|S\_s*\%([����]\|��\_s*��\_s*��\|N\_s*��\|F\_s*��\_s*��\)\|��\_s*[¿��]\|X\_s*\%([����]\|O\_s*��\|��\_s*��\_s*��\)\|��\_s*\%([������]\|��\_s*��\_s*��\)\|��\_s*ƻ\|�\_s*Ʀ\|C\_s*\%(l\|h\_s*l\_s*o\_s*r\_s*i\_s*n\_s*e\)\|��\_s*\%(Ϸ\|�\_s*��\)\|��\_s*��\_s*��\_s*®\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\)\|ݿ\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\_s*\%(��\_s*��\_s*��\|��\_s*��\)\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\)\)\|��\_s*��\_s*��\_s*��\|��\_s*��\)\)\|��\_s*��\|��\_s*Ĵ\|��\_s*��\_s*��\_s*\%(��\_s*��\|��\_s*��\)\|ȯ\_s*Ÿ\|ɾ\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|ɴ\_s*��\_s*��\_s*ŵ\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*\%(��\_s*��\|��\_s*��\)\)\|��\_s*��\|��\_s*ĥ\|��\_s*��\|��\_s*ò\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%([��]\|��\_s*��\|��\_s*\%([�ޥ���]\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\)\)\|��\_s*Ω\|E\_s*\%(r\|O\_s*F\|u\_s*\%(p\_s*o\_s*m\_s*a\_s*t\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\|r\_s*o\_s*p\_s*i\_s*u\_s*m\)\|U\_s*C\_s*��\_s*��\_s*��\|P\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|d\_s*i\_s*t\_s*i\_s*n\_s*g\_s* \_s*M\_s*A\_s*C\_s*r\_s*o\_s*S\|��\_s*��\_s*��\|-\_s*m\_s*a\_s*i\_s*l\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|N\_s*T\_s*E\_s*R\_s*��\_s*��\|��\_s*��\_s*��\|i\_s*n\_s*s\_s*t\_s*e\_s*i\_s*n\_s*i\_s*u\_s*m\|S\_s*\%(P\|C\_s*��\_s*��\)\|l\_s*k\|m\_s*a\_s*c\_s*s\)\|��\_s*\%([�֥����顼]\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*[�ȥ�]\|��\_s*\%(��\_s*��\|��\_s*��\_s*[����]\)\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*\%(��\_s*[�ȥ�]\|��\_s*��\)\|��\_s*��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\)\|��\_s*��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*[�䥢]\|��\_s*\%(��\_s*\%(��\|��\_s*��\|��\_s*��\)\|��\_s*\%(��\|��\_s*��\|��\_s*��\)\|��\_s*��\)\)\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\)\)', - \ 'f' : '\%([��ϼ�в�����ɮ������������˼��ݵ����ϰ�˴ϴʻ�ÿ����ū�����������߹����������ʷʵ��ʸ��ʯʭʶʲʱʬʴ�����ڸ��������������������޽ʥ޼����⵺�б����ƣ߬�����������������ѵ������ο���ʳ�������������ʰ��ز��ʧʨ��������ؿ����礢�����ı������ǹ���޴�ʤʢ������������ʣʡ��������������Դ������������������������������ҿ������Ϸ����������������������Ƨ����������н������Ҷ������꿣�ڿ�����������ʮ�߹�������ֿ�ʫ�������������������������ݤգ�Ŵ��Ϣ��٢޶���ʩ������ʦ��F�����է��f]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*ǹ\|��\_s*��\|��\_s*��\|E\_s*u\_s*p\_s*t\_s*e\_s*l\_s*e\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*\%(Ǥ\|��\_s*[����]\)\|��\_s*��\|Ƭ\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|M\_s*y\_s*r\_s*t\_s*a\_s*l\_s*e\_s*s\|��\_s*[�滳]\|��\_s*��\|B\_s*u\_s*d\_s*d\_s*l\_s*e\_s*j\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*��\|G\_s*e\_s*r\_s*a\_s*n\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|��\_s*[�ͤ���]\|��\_s*��\|2\_s*\%([�ͤ���]\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*Χ\_s*��\|I\_s*r\_s*o\_s*n\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\|��\_s*\%(��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\)\)\)\|��\_s*��\|��\_s*��\|��\_s*ǽ\|��\_s*��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\_s*[����]\)\|��\_s*\%(��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\)\|��\_s*1\_s*��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\)', - \ 'g' : '\%([���������Ʊ��亲�޺��и����Я������ǡ����¹���ɹ���������Ͽ��������й���ⶳ��������������������������ݶ�������蹡����������贻�������˸������Ӫ伸˸���ظ����5��Ķ�����ۻ��ٸ�ѻ����줴�����֡����������������������ɷ޷߷������ݱ���Ŵ�������ɧ��������ѷ�ʸ����������¸�����������������뻲�²����Ƥ�����������ʵ�ʹ����Ұ�¢��襸��ж�����鹶��ܶ�������溷����������ֶ��������򹰶����㼶������ȶ餰��������ݵ����۶�Է֪���������������̵��������Ƹ�����ߤ�������ѧ�ĶȶǶŹ�����Եյ��������ڵ��۵��õ��췷������Ѧ��»·赼��ĵ���������ۧີ�٦�������������ȱ��ⷸ��⧹ε������ߴ�����¦�̳����Ǹ����񷿷�����Ը����걳��������޽��˳̿�������������Ƭ�������︷�������������̴ݢ��������޴��������ḵ�����������������������س�����̳۳ٳܳڳش�㨳���ЩԶ�䳯���������ֽ�糳ӱ��⭳��������賩����������������������ֶ����������Ѵ��ݲ�ծ�������Ө����̲������´��ϲ�谽�����˲�����쾡��󡤬���紤�楬���֦������Ԧ��������ƦѦ����ɦ��զӦ˦��Ϧͦצئ������Ħ��¦����ЦŦ������ҦȦǦʦ����Φ̦����������Ԧ��ç�g]\|��\_s*\%(��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\)\|��\_s*[����������]\|��\_s*[����������]\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*Ƭ\_s*��\|��\_s*��\|��\_s*��\|P\_s*e\_s*r\_s*s\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*\%([�ֱ�]\|ŷ\_s*��\)\|��\_s*��\_s*��\|��\_s*\%([�Ÿо���]\|��\_s*��\)\|Ʀ\_s*[����]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[��¯]\|��\_s*[���ǹ�]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*[���׹��]\|��\_s*ϡ\|��\_s*��\|��\_s*��\|��\_s*\%([����]\|��\_s*��\)\|��\_s*\%([ˡƻ��]\|��\_s*��\_s*��\|ʹ\_s*��\_s*ˡ\)\|A\_s*g\|S\_s*\%(c\_s*r\_s*o\_s*p\_s*h\_s*u\_s*l\_s*a\_s*r\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\|y\_s*m\_s*p\_s*e\_s*t\_s*a\_s*l\_s*a\_s*e\|i\_s*l\_s*v\_s*e\_s*r\)\|��\_s*��\|��\_s*��\_s*ë\|��\_s*��\|�\_s*��\|��\_s*��\|��\_s*��\|��\_s*̾\|T\_s*y\_s*p\_s*a\_s*l\_s*e\_s*s\|��\_s*[��]\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|Ϣ\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\|G\_s*\%([dae]\|o\_s*m\_s*o\_s*r\_s*t\_s*e\_s*g\_s*a\_s*c\_s*e\_s*a\_s*e\|M\_s*\%(T\|D\_s*(\_s*G\_s*e\_s*r\_s*m\_s*a\_s*n\_s* \_s*N\_s*a\_s*t\_s*i\_s*o\_s*n\_s*a\_s*l\_s* \_s*R\_s*e\_s*s\_s*e\_s*a\_s*r\_s*c\_s*h\_s* \_s*C\_s*e\_s*n\_s*t\_s*e\_s*r\_s* \_s*f\_s*o\_s*r\_s* \_s*C\_s*o\_s*m\_s*p\_s*u\_s*t\_s*e\_s*r\_s* \_s*S\_s*c\_s*i\_s*e\_s*n\_s*c\_s*e\_s*)\)\|��\_s*��\|C\_s*L\|c\_s*c\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\|P\_s*L\|n\_s*u\_s*s\|I\_s*\%(N\_s*A\_s*(\_s*t\_s*h\_s*e\_s* \_s*G\_s*e\_s*n\_s*e\_s*r\_s*i\_s*c\_s* \_s*I\_s*n\_s*t\_s*e\_s*r\_s*a\_s*c\_s*t\_s*i\_s*v\_s*e\_s* \_s*A\_s*p\_s*p\_s*l\_s*i\_s*c\_s*a\_s*t\_s*i\_s*o\_s*n\_s*)\|F\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\)\)\|U\_s*I\|N\_s*U\|O\_s*��\_s*��\_s*��\|E\_s*T\_s*��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*\%(��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\)\)\)\|��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*\%([��른���Υʥ���]\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\)\)\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*[�˥�]\|��\_s*��\_s*[�˥�]\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*��\_s*��\)\)\|��\_s*\%(��\|��\_s*\%(��\|��\_s*��\|��\_s*��\_s*[�ĥ�]\)\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*\%([���]\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\)\|��\_s*\%([���ե�ޥ�]\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\_s*[�ȥ��]\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\_s*��\)\)\|��\_s*��\|��\_s*��\|��\_s*\%([����]\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*\%(��\|��\_s*[����]\)\|��\_s*��\)\)\)\)', - \ 'h' : '\%([��ά�������мۭϯƶ���������ش���Ǯ����˴��������ꥷֹ����٢��������ڣ��������þ�̷�ȸ�Լ�����������ƾ����������Ե��ұ���ٸ����ޤê����������׺����˲��������˯�������������ˣ˱�������˩��������ˬˢ߰��˥��˨��������ˮ˰˦������˭����ˤ��ڽھ��������Ӯ�������Ʊ�����������������������Ħ������������˫����ԾӬ�����ێ͸�½��Ш���۳ֱ�����׭׬̦������������������������������������������΢���������٨������ղʽ��������������������֢������ʾ��ʻ����������������򰵸͸�؎���ϼ�в������ر�����������˼��ݵ�ɾϰ�ϴʻ���ÿ����ū��������������߹����������ʷʵ��ʸ��ʯʭʶʲʱʬʴ�����ڸ����������������޽ʥ޼�����б����Bƣ߬���������������ѵ������ο���ʳ������������ʰ��زʩFʦʨ���յ�������ؿ���乢���������ǹ���޴�ʤ��������ʣʡ������������Դ��������������������������ҿ�������������������������Ƨ����������н������Ҷ�����꿣�ڿ�����������ʮ�߹�������ֿ�ʫ�����������������Վ���Ϸ����DzDZ������ɢ���ݽ���ɨ�����ڻ�����ײ����ɦ����������������گ�������������ٶ��������������ɳ����ߪ߫����̩���������ҷ�������������Ψ����ɢ�ʺ���ɽ��ź��ƶѽ���������ñ����¾��Ʒ��1������ඡ���ɩ�Ͼ��Ǽ�����ݱɧ�ҹ���������ɴ���ҿ�������ɪ粹����ɲɱ��桶���ڲ������Ÿ��ͨ妳����ѽ�ʹ���ɱ������������繰����͵��ע������ɯɥ��ɭɤ�ʴ���ɫݤ����̤��ɮɬ���ɶ�������ɷ��������ɿɺ��ɻ������ʼɼ��ɾɸʿɽ�������֡�ڡʡآ���羷�������۬�������զ����Ҹ���������������������壸��������������������������У�����ﴳ�����ɹ����������������ɰ̥������������������ݺ���������������㰤Ҏʻ���ȧ�۽ˡ�ȣ�ַ��ү������ꤾ���׼��׹Ȧ���������������������߶������������ھ�¦�����ൡá˵��ȫƯ��Ȫ�������������������IJ�Ը����ʧ����ȷ��������ȩ�������㳾��С�Ȱ��ϸ����ܥ��˧��������ʢ��ͪ�����ڼ�����������Ѷ�����������������Υȹ��������ȸ��ަ��ɡ�ڲ��������������չ������Ȥ��Һ��ý��������ҹ�Ȣȡ��򾾹�ٰ������®Ȼ��������и���������ݢ֯��ڦ��������������Ԧ��¬��ѳĽ�����̷׿޸��������������ȥȮ�������ϡ����ȭ˪�ȱ��ˡȰ����Ȭȯ�����ڴ�����������������ԯ����������أ��צ�����ɣ����������������������Գ����������߯ޢ�����������Ȩ������ź�ܹ������������ڵ������ȼ��������Ƚ�����������������ɺ�����������Ⱦ����ȿȺ�����ǿ�����������Ժ����������ı����������������۱����������Ŷ����ķ��������Ʊ�����ü����ҵ������਻���Գ������������������������ܱ�����ĥŽ��淿��ʤϣ訬�������������������������������������������ȡ��ա�����ҥۥإ�h]\|��\_s*[�Ύ͎̎ˎ�]\|��\_s*[�ۥإեҥ�]\|��\_s*[�ۤؤդҤ�]\|��\_s*��\|��\_s*��\|��\_s*Ļ\|��\_s*��\|��\_s*[���]\|��\_s*��\|��\_s*[�п�]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*�\|��\_s*��\_s*��\|��\_s*[����]\|T\_s*r\_s*i\_s*u\_s*r\_s*i\_s*d\_s*a\_s*l\_s*e\_s*s\|�\_s*��\|��\_s*ˡ\|��\_s*λ\|��\_s*��\|��\_s*\%(�\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|c\_s*l\_s*a\_s*u\_s*s\_s*t\_s*r\_s*o\_s*p\_s*h\_s*o\_s*b\_s*i\_s*a\|��\_s*��\|��\_s*��\|��\_s*��\|E\_s*\%(r\_s*i\_s*o\_s*c\_s*a\_s*u\_s*l\_s*a\_s*l\_s*e\_s*s\|u\_s*p\_s*t\_s*e\_s*l\_s*e\_s*a\_s*c\_s*e\_s*a\_s*e\)\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*��\|Ƭ\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|f\_s*\%(o\_s*r\_s*t\_s*e\|e\_s*m\_s*t\_s*o\)\|��\_s*[�滳]\|��\_s*��\|��\_s*��\|G\_s*e\_s*r\_s*a\_s*n\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*[����]\|��\_s*��\|��\_s*��\|��\_s*��\|�\_s*��\|��\_s*\%([�ͽ�]\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*ŷ\_s*��\|��\_s*[���]\|��\_s*��\|��\_s*[�ȡ�]\|��\_s*��\_s*\%(��\|��\_s*��\)\|A\_s*\%(s\|r\_s*s\_s*e\_s*n\_s*i\_s*c\|n\_s*g\_s*i\_s*o\_s*s\_s*p\_s*e\_s*r\_s*m\_s*a\_s*e\)\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*[����]\|��\_s*��\|ľ\_s*[�����Ᵽ]\|��\_s*Φ\|��\_s*��\_s*��\|��\_s*��\|��\_s*Ÿ\|��\_s*[�˹�]\|��\_s*��\|��\_s*ƻ\|��\_s*��\|��\_s*��\|��\_s*��\|̢\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|ι\_s*��\|N\_s*e\_s*l\_s*u\_s*m\_s*b\_s*o\_s*n\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*��\_s*��\|Ʊ\_s*˦\|��\_s*��\|��\_s*[��ȧ]\|��\_s*[������]\|��\_s*[�ǵ�]\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|Ĺ\_s*ë\|��\_s*��\_s*��\|Ż\_s*Ƭ\|��\_s*��\|��\_s*��\|��\_s*[���]\|��\_s*\%(��\_s*��\|��\_s*��\)\|ͦ\_s*[����]\|ή\_s*��\|��\_s*��\|2\_s*\%([�ͤ���]\|��\_s*��\|0\_s*��\)\|��\_s*\%([�ͤ���]\|��\_s*[����]\)\|ø\_s*��\|8\_s*��\|��\_s*��\|P\_s*\%(t\|o\_s*t\_s*a\_s*m\_s*o\_s*g\_s*e\_s*t\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\|l\_s*a\_s*t\_s*i\_s*n\_s*u\_s*m\)\|��\_s*\%([���������]\|��\_s*��\_s*��\|��\_s*��\)\|��\_s*ή\|��\_s*��\|��\_s*��\|��\_s*��\|R\_s*S\_s*I\|M\_s*\%(y\_s*r\_s*t\_s*a\_s*l\_s*e\_s*s\|e\_s*r\_s*c\_s*u\_s*r\_s*y\)\|��\_s*Ĵ\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*\%(��\|��\_s*[�ȥ�]\)\)\|��\_s*��\|��\_s*ϻ\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\)\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\)\)\|��\_s*\%([�顼]\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*\%(��\|��\_s*��\)\|��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\)\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\)\|H\_s*\%([fsPeo]\|i\_s*m\_s*a\_s*n\_s*t\_s*a\_s*n\_s*d\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*��\_s*��\|T\_s*\%(M\_s*L\_s*��\_s*��\_s*��\_s*��\|T\_s*P\_s*��\_s*��\_s*��\)\|D\_s*D\_s*��\_s*��\_s*��\_s*��\_s*��\|u\_s*r\_s*d\|a\_s*\%(s\_s*s\_s*i\_s*u\_s*m\|f\_s*n\_s*i\_s*u\_s*m\|w\_s*a\_s*i\_s*i\)\|y\_s*\%(p\_s*e\_s*r\_s* \_s*T\_s*e\_s*x\_s*t\_s* \_s*M\_s*a\_s*r\_s*k\_s*u\_s*p\_s* \_s*L\_s*a\_s*n\_s*g\_s*u\_s*a\_s*g\_s*e\|d\_s*\%(n\_s*o\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|r\_s*\%(a\_s*s\_s*t\_s*i\_s*d\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|o\_s*\%(s\_s*t\_s*a\_s*c\_s*h\_s*y\_s*d\_s*a\_s*l\_s*e\_s*s\|g\_s*e\_s*n\)\)\)\)\)\|��\_s*[��ʿ��]\)', - \ 'i' : '\%([�����DZߡ�����׶׵���������϶���������������������̴��ߺ�̤����ӷ��������Ų������ݳ�����Ͷư�ݡ����������ȵ������ܵ�述�S׽ꭲ���������ڿ��Ĺ�Ǣ��������̿��쵸Ÿವ������ż���������ϫ��������ĺ�������׻��������к��������ط���Ү������ͦ�����ܡ�����Ǯʰ���������ᰱ�����˻�ް�������������Ϯ�ס����ӱ��������©ĩ��寱��۱İ����ս�˻�С������ݫ�����׸�������ԩ۵�����������������ʰ�ݻ������ְ�յ׮���Ų����������������ΰ�𨱡�������ֱ������������۩���۰��д��ذ�Y�Ű�1��������ڴ�Ū��٥�������������ަ�̰��թ�Ⱥص����°����ذѰϱ�ԣ��������������и�����Ȱ���ǡѦ��״��������ͣ��޻��������׳�԰ʳ�ױ������������������İΰڸް������������Ͱ��ֹ�������������������а�Ψ��ͬ������������հݰ��ڰ۵���������ɹ���ۢ͢����������ˣ�����籥���������ɥ������ɧڻ�i]\|E\_s*��\_s*��\_s*��\|��\_s*��\|J\_s*u\_s*n\_s*c\_s*a\_s*l\_s*e\_s*s\|��\_s*��\|��\_s*ë\|��\_s*ʸ\_s*��\|��\_s*��\|ɨ\_s*��\|��\_s*ϻ\_s*��\|��\_s*��\|��\_s*±\|��\_s*��\_s*��\|��\_s*ȷ\|β\_s*��\|��\_s*��\_s*��\|N\_s*a\_s*j\_s*a\_s*d\_s*a\_s*l\_s*e\_s*s\|��\_s*ɨ\|��\_s*��\|��\_s*��\_s*ƣ\|5\_s*[����]\|��\_s*[����]\|ب\_s*٦\|��\_s*��\|Ĭ\_s*��\|��\_s*��\|��\_s*Ӽ\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|ʸ\_s*��\|Ϻ\_s*[����]\|��\_s*[����]\|�\_s*��\|U\_s*r\_s*t\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\|�\_s*[�Ļ�]\|P\_s*\%(o\_s*a\_s*l\_s*e\_s*s\|l\_s*u\_s*m\_s*b\_s*a\_s*g\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\)\|��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[����ﷻ]\|��\_s*��\|ݬ\_s*��\|��\_s*��\|��\_s*��\|��\_s*¹\_s*��\|��\_s*��\_s*��\|G\_s*\%(l\_s*u\_s*m\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\|r\_s*a\_s*m\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\|i\_s*n\_s*k\_s*g\_s*o\_s*p\_s*s\_s*i\_s*d\_s*a\)\|��\_s*��\|��\_s*��\|��\_s*��\_s*ή\|��\_s*[�����]\|��\_s*[����]\|��\_s*[�ڻ�]\|��\_s*ɽ\|��\_s*��\_s*[��ú]\|��\_s*ӧ\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\|D\_s*i\_s*a\_s*p\_s*e\_s*n\_s*s\_s*i\_s*a\_s*l\_s*e\_s*s\|��\_s*[����]\|<\_s*=\_s*=\_s*>\|ɬ\_s*��\_s*��\_s*ʬ\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*\%(��\_s*��\_s*��\_s*��\_s*��\|ɸ\_s*��\_s*��\_s*��\_s*��\)\|��\_s*Υ\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|¨\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|̵\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*Ǽ\_s*ˡ\|��\_s*��\_s*��\|��\_s*\%([��ǡ­]\|��\_s*ʬ\)\|��\_s*��\_s*��\|��\_s*��\|Ƴ\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\)\|I\_s*\%([rPn]\|R\_s*Q\|��\_s*��\_s*��\|C\_s*\%(��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\)\|l\_s*l\_s*i\_s*n\_s*o\_s*i\_s*s\|S\_s*\%(O\|B\_s*N\_s*\%(��\_s*��\|��\_s*��\_s*��\)\|A\_s*��\_s*��\)\|d\_s*a\_s*h\_s*o\|D\_s*\%(��\_s*��\_s*��\|E\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\)\)\|��\_s*��\_s*��\|T\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\)\|o\_s*\%(w\_s*a\|d\_s*i\_s*n\_s*e\)\)\|��\_s*\%(��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\_s*��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\)\)\)', - \ 'j' : '\%([���������ֺ�����ɼ������ټ������ľ������¿�̭������ߩ������������ʿ�顿�����ױ��ӿ�������пԿҿؿѿտ��ǽ�������������ޮ�տ��������ٳа������屽���������������������л������������ġп����Ы����������������������ǡ̼����ž�����������������վ�����������ڷ��������������������Ǩ����������è�����ط���������۲�ٽɽμ�����ѽ�Ȼ������Ž���������ޭ�߱��������覽�۽����ڽ޽����޼�쳼��������������ߨ��������������к��ߧ������尽Ľ½��������ý������ƽ�֮�������������꼥��Ώ����߼������������������ֵ�����������������������ᪿλ����������̻�Яϩ�˱�ѻ���ż���б��褻������κ�������������������Լٵ��ͤ��ꨢ�����������������֧�������������ק�������j]\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|G\_s*\%(��\_s*��\|��\_s*��\)\|Z\_s*\%(r\|i\_s*r\_s*c\_s*o\_s*n\_s*i\_s*u\_s*m\)\|D\_s*y\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*��\|2\_s*��\|��\_s*��\|��\_s*��\_s*ʺ\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*�\|k\_s*\$\_s*_\_s*{\_s*e\_s*f\_s*f\_s*}\_s*\$\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*ī\|��\_s*��\|Ƚ\_s*��\|ϳ\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\|Ĺ\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*Τ\|��\_s*[����ϴ������崽]\|C\_s*a\_s*b\_s*o\_s*m\_s*b\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*[�ʷ�]\|��\_s*��\|��\_s*��\|��\_s*��\)\|��\_s*��\|��\_s*��\|ɳ\_s*��\|1\_s*\%(0\|1\_s*��\|8\_s*��\|2\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*̣\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*Ʊ\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*Φ\_s*��\_s*ü\_s*\%(��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*��\|��\_s*\%([���˥ʡ�]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\|��\_s*[�ӥ�]\|��\_s*��\)\|��\_s*\%(��\_s*[���]\|��\_s*[����]\)\|J\_s*\%(R\_s*��\_s*��\_s*��\|\.\_s*S\_s*\.\_s*\%(��\_s*��\_s*��\|B\_s*a\_s*c\_s*h\)\|��\_s*��\_s*��\|��\_s*��\_s*��\|C\_s*B\_s*��\_s*��\_s*��\|-\_s*P\_s*O\_s*P\|��\_s*��\_s*��\|P\_s*\%(G\_s*��\_s*��\_s*��\_s*��\|E\_s*G\_s*��\_s*��\_s*��\_s*��\)\|I\_s*S\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\)\|a\_s*p\_s*a\_s*n\_s* \_s*A\_s*d\_s*v\_s*a\_s*n\_s*c\_s*e\_s*d\_s* \_s*I\_s*n\_s*s\_s*t\_s*i\_s*t\_s*u\_s*t\_s*e\_s* \_s*o\_s*f\_s* \_s*S\_s*c\_s*i\_s*e\_s*n\_s*c\_s*e\_s* \_s*a\_s*n\_s*d\_s* \_s*T\_s*e\_s*c\_s*h\_s*n\_s*o\_s*l\_s*o\_s*g\_s*y\|A\_s*\%(I\_s*S\_s*T\|N\_s*��\_s*��\_s*��\|V\_s*A\_s*\%(��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\)\|U\_s*N\_s*E\_s*T\)\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*��\)\|��\_s*\%([�ϥ����]\|��\_s*��\_s*��\|��\_s*\%([���]\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*[����]\)\|��\_s*\%(��\_s*\%([�ʥ�]\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\)\|��\_s*\%(��\|��\_s*\%(��\|��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\)\)\)\|��\_s*\%([����]\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\)\|��\_s*\%([�֥�]\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*��\|��\_s*\%([�ȥ�]\|��\_s*��\|��\_s*��\)\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*[�ʥ��]\)\)', - \ 'k' : '\%([�����²�����Ƿ����ť����������������������ư����������Я⸼���Ƚ�Ҹ����Ǽ����������㪸��ۻ��������쮱��������੻�ֿ���Ѻ���������Ϲ���ٹ������ʺ��ú����������������������纯�պ����������ۦ�Ĺ���ȹ���������ָ����벹�Һ����٬̫�������ޫ�޳��������䲬������ު־������������㣸�������������������������������ϹϺ�������٫��Ⱥ��������ӫ����ִ����������ӳ��������������������Ӭ�����ص��������޸���ܺս��������������͹�̨����ɹ������ж�๫�ʹ����Ĺ�á�������񹸹��ۥ�������⫹���ֹѹ����������۹չ������̹��˹��ع��ֹ���骹ݹҹԹιӹ�ĸ�������ë��������ӭ�й�������������ݻ�����ջ��̼�Ժ�ʴ������������Ժ����������Ƹ�䲾������������Ƹ۸���ž������Ķ���ٸ�Ĩ��Ӿ����������̱ۻҸɸָ���ܵ����Ž�����ѻ��������������ǻ�ûƤ��������Ҹ�����ݰ�ٽ����ᾱ��ʷ��������������Ͽ���ٱ�Э��ۿ����ݼ�����������ܷ�������غ������ѭ�����ԡ����������������޲��իҥݾ�������������شկ���ث���ڷ𸳰��̷�����ո����������������丮����������������������������Ǹ����������ݷ�ڸ建�������������������������������ҧ��������Ҿ����ت�����Ϩ���������������������������������������������������������������ꥷ���찷Ʒ̷�����÷���Ҧ���׷��������ۤ�������ܯ��ݬݮ��ܱܮ���ݫ����������ʵ��ߪ�������������������������������ʤ������վ�߷�������ţ賷�Φۻ����Ү���������·��ذѾ����������򷬷���������ڶ�������˿��ֲ��̽������ǰ̰�鶰����������פ��޺������Ϳ���������߷�����������Ѧ��ν���庿ܸ���ȷ����������ˮԢ��ɦ����ʭ�ܿ�����Ц��������ĸ�¢����������������������޷��˹��ȸ����Ң����ڹ����������ҿ�ȶ���������꤯�����������ӽ����廸����������͵�����������θ���˨�������ž����������䷯���ݢݡ��뿸�֨�����ɵɵǵ̵Ƶʡ����ޢ̡����������ޡ��������á��笠��������������ܡ���������������������������塹�����������Ţ��������������硧�����顩�������¢��ġ������������졵�����ˡ�桼�ݢ����������᡺������Ժٹ���ܶ��������������µϴߵ�ʷ���ߵ�̸��������������������������׶ܶ����������۶�ڢ�Ҷݸ��ٶڶӶ϶׶նѶ۶�ֶ�ضб���ڡ��ک������ڪ��������ӵ����Ҩ��ީд�򰰶ɵ�����������ժ亶�����ѿ�����ַ���ﶷ����Ѭз�ź�䡹���������ިٰ���������װ�������������¶����ѹ��������߶�����ҳ����ٶ��������ɶ���Ѿ貶������󶩶��������ж��ᶧ���Ŷ��������ö��������������̾���������̵��������֩켣�������������ŵ���ָյ��������ⱱ�����͵ܵ׵��ֵ�ȷ���ٵߵ޵�۶��ݺ������ʹ���ݤ���ױ���̴����ڵ��������ſ�����өɱȲ�����ø�����ڶ˷�Ҽ����¶���𵦵����������������ۮ�־����ةȩ���ܵ���ѥ���·��д���̧İ�ɺ������������ݸ���������嵥�ڵ���������޿��洴������������ԭ�Ե�������������ڸ�������������������쵧�����������㵫��٣������ֿ۹�������������ڹ��ɳ�����߳��˹��ȷ�̢�ư좿�Ʊ����ʡ�ܢ��������������ᱵ������ר����������������ǡˡҡԡơȡɡѡСա������ô��ج�ɳ�����϶������������Ѿʸܵ�ȿ����������ǣ�����ʶ�ͽ�����г����Ͼݵع�˵�����ۿ��ٸ��Ƿ����շ�����ͩ������Ϋ�������������������Ĵ�������ȱ������١Ҥ���ҳ��ݢʢ��ٿ��Ȧ����۫滳�������ܾ��龹�ô�������������������������Ž��޳���������ڳ³����������������������귰������¦��������������㡴���姢����������̻�������������റ��ɵ��������ҳ��������ݹ��������޳����˿�����������ڸ����ি�ԣ�����ϸ³ø�����֡١׷�����ŭƬ��������ŨŬ��Ť�״׳�����ᰥ��ɬ������Ŵ����ܷ�������̳������봢�Խ�����ڲ��������Ӿ��������������׳�������ڨƿ����ӽ�dzӡϡۡڡ̡͡γ��ȳijԳճʳ��߱��׳���ڼ����ȵҳֳѳ�����Т������Ӽ����뻳�����һר������ݥ�����������������ų�����Ъ�����������Ļ�����������ӳ���ܴ��������߷������ٳ����β����𳭳������dz��������򳬲������������Ԭ��٪�Хٺ������������ù���������٢��Ӳ�����ߵ������۸������������������Ұ����������������ᴮ�������Ѵ���޾��˧�����ӳ�������ޱ�ڿ����ͻ�ô������ÿ�����������ȡ������ȴ���䯴�������԰�ݴ����۴���ڴ��������Դʴ�ա�����̴�����δ��˴���ע������Ӵ������Ĵִٴ��״�ӿ���Ŵ��ɴ����شϴ������Ѵ��ش������Գҵ��ȴճƶ�������������Dz����μ����ŲòͲ�ӻ�����۷紣�Ҳԥ�Ф�����������Ҳһ����ݲݲָ򴢱�����������������ּ���������������ȼڲ�桶���˲Űײ�����ӧ��������ҷ����ܴ���������ѫ�β������βϲѼ����н��������ӥ��������ѷ��������ϲӲ����ɲշ��������߲��������Ʋ��²�������Ⱦ���������Ƹϲ��ݤ�����ᨱ�����秷�����������ʳ�K���߶��Ҧ֥����������ܥ���k]\|��\_s*[����������]\|��\_s*[����������]\|��\_s*[�Ҥ���������]\|��\_s*��\|��\_s*��\|��\_s*��\_s*Ⱦ\|�\_s*ë\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*ϧ\|��\_s*��\|��\_s*��\|�\_s*��\|M\_s*e\_s*t\_s*a\_s*c\_s*h\_s*l\_s*a\_s*m\_s*y\_s*d\_s*e\_s*a\_s*e\|f\_s*o\_s*o\_s*t\_s* \_s*a\_s*n\_s*d\_s* \_s*m\_s*o\_s*u\_s*s\_s*e\_s* \_s*d\_s*i\_s*s\_s*e\_s*a\_s*s\_s*e\|��\_s*Ϣ\_s*̣\|�\_s*��\|�\_s*��\|��\_s*��\|S\_s*i\|�\_s*��\|ɴ\_s*[߻��]\|9\_s*[����]\|�\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|ŵ\_s*��\_s*��\|L\_s*a\_s*u\_s*r\_s*\%(a\_s*c\_s*e\_s*a\_s*e\|o\_s*i\_s*d\_s*e\_s*a\_s*e\)\|õ\_s*��\|��\_s*��\|c\_s*r\_s*e\_s*s\_s*c\|��\_s*¢\_s*��\|H\_s*e\_s*l\_s*l\_s*e\_s*b\_s*o\_s*r\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|J\_s*u\_s*g\_s*l\_s*a\_s*n\_s*d\_s*a\_s*l\_s*e\_s*s\|ϻ\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[��Ƿ��]\|��\_s*��\|��\_s*ɧ\|��\_s*�\|��\_s*��\_s*Ļ\|X\_s*e\|ǡ\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|�\_s*�\|�\_s*��\|G\_s*o\_s*l\_s*d\|A\_s*\%(u\|r\_s*c\_s*h\_s*i\_s*c\_s*h\_s*l\_s*a\_s*m\_s*y\_s*d\_s*e\_s*a\_s*e\|s\_s*t\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|c\_s*a\_s*n\_s*t\_s*h\_s*a\_s*c\_s*e\_s*a\_s*e\)\|��\_s*��\_s*��\|��\_s*��\|R\_s*\%(h\_s*\%(o\_s*e\_s*a\_s*d\_s*a\_s*l\_s*e\_s*s\|a\_s*m\_s*n\_s*a\_s*l\_s*e\_s*s\)\|u\_s*n\_s*u\_s*n\_s*c\_s*u\_s*l\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|a\_s*n\_s*\%(u\_s*n\_s*c\_s*u\_s*l\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|a\_s*l\_s*e\_s*s\)\)\|��\_s*��\|��\_s*[��©]\|��\_s*[����]\|��\_s*[����]\|��\_s*��\|��\_s*��\|��\_s*\%([���]\|̳\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*ŵ\|��\_s*�\|��\_s*��\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*ƻ\)\|��\_s*��\|Υ\_s*��\_s*Υ\_s*��\|��\_s*Ƭ\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|Ĺ\_s*[�]\|��\_s*��\|ŷ\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\|O\_s*x\_s*a\_s*l\_s*i\_s*d\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*��\|��\_s*��\|�\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*[����]\|̱\_s*��\|��\_s*��\|E\_s*\%(b\_s*e\_s*n\_s*a\_s*l\_s*e\_s*s\|l\_s*a\_s*n\_s*a\_s*l\_s*e\_s*s\)\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|Ϣ\_s*��\|��\_s*��\|��\_s*��\_s*��\|C\_s*\%([ormdfa]\|h\_s*r\_s*o\_s*m\_s*i\_s*u\_s*m\|i\_s*r\_s*c\_s*a\_s*e\_s*a\_s*s\_s*t\_s*e\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|u\_s*r\_s*i\_s*u\_s*m\|e\_s*r\_s*c\_s*i\_s*d\_s*i\_s*p\_s*h\_s*y\_s*l\_s*l\_s*a\_s*c\_s*e\_s*a\_s*e\|y\_s*p\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\)\|��\_s*\%(��\|��\_s*��\)\|�\_s*�\|�\_s*�\|��\_s*\%(��\|Ϥ\_s*��\)\|��\_s*��\|��\_s*[�����׼�]\|��\_s*\%(��\|��\_s*��\_s*Ω\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\)\|(\_s*��\_s*)\|��\_s*��\|��\_s*��\_s*��\|��\_s*ʼ\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\|�\_s*��\|��\_s*[���׿�]\|��\_s*��\|ݣ\_s*��\|T\_s*\%(h\_s*a\_s*l\_s*i\_s*c\_s*t\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|u\_s*b\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\)\|��\_s*\%([�֥�]\|��\_s*��\|��\_s*\%([�ȥ�]\|��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\)\)\|��\_s*\%(��\_s*\%(��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\)\)\|��\_s*��\_s*��\|��\_s*[�եȥ�]\)\|��\_s*\%(��\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\)\)\|��\_s*\%(��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*\%([�����]\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\)\|P\_s*\%(i\_s*p\_s*e\_s*r\_s*a\_s*\%(l\_s*e\_s*s\|c\_s*e\_s*a\_s*e\)\|a\_s*p\_s*a\_s*v\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|o\_s*\%(d\_s*o\_s*s\_s*t\_s*e\_s*m\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\|t\_s*a\_s*s\_s*s\_s*i\_s*u\_s*m\)\)\)', - \ 'l' : '\%([���������������������������������족�����������̢��ТϢ˥�ʥ��ݦ��򧭦�l]\|��\_s*[����������]\|��\_s*[����������]\|��\_s*[����������]\|��\_s*��\|��\_s*��\_s*2\_s*��\_s*ˡ\|\.\_s*\.\_s*\.\|��\_s*��\|��\_s*��\|��\_s*��\|ݦ\_s*ݨ\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%([����������֥ܥȥᥦ����������]\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\)\)\|��\_s*��\|��\_s*��\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*\%([�����ƥȥ�]\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*\%([�ȥ���]\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\|��\_s*[�ȥ�]\)\|��\_s*��\|��\_s*\%([������]\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*[����]\|��\_s*��\|��\_s*��\)\|��\_s*\%(��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%([����]\|��\_s*��\)\)\)\|\\\_s*L\_s*a\_s*T\_s*e\_s*X\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\)\)\|��\_s*\%(��\_s*��\|��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\|A\_s*��\_s*E\_s*��\|��\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\)\)\|L\_s*\%([DP]\|��\_s*��\_s*��\|L\_s*��\_s*��\_s*��\|u\_s*\%(t\_s*e\_s*t\_s*i\_s*u\_s*m\|c\_s*i\_s*d\)\|i\_s*\%(t\_s*h\_s*i\_s*u\_s*m\|s\_s*p\|n\_s*u\_s*x\)\|E\_s*D\_s*��\_s*��\_s*��\|e\_s*m\_s*m\_s*a\|o\_s*\%(g\_s*i\_s*c\_s*a\_s*l\_s* \_s*U\_s*n\_s*i\_s*t\_s* \_s*N\_s*u\_s*m\_s*b\_s*e\_s*r\|u\_s*i\_s*s\_s*i\_s*a\_s*n\_s*a\)\|a\_s*\%(w\_s*r\_s*e\_s*n\_s*c\_s*i\_s*u\_s*m\|n\_s*t\_s*h\_s*a\_s*n\_s*u\_s*m\|T\_s*e\_s*X\)\|A\_s*N\)\|��\_s*��\_s*��\|��\_s*��\|��\_s*\%([���������������ݥ���ޥʥΥ�̥֥���]\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*[��]\|��\_s*[����]\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*\%([����]\|��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*[�륷]\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\|��\_s*\%([���]\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*[����]\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\)\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%([����]\|��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*\%([����]\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\)\|��\_s*\%([����]\|��\_s*��\|��\_s*��\)\|��\_s*\%([����]\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\)\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*\%([�ɥԥץ�������]\|��\_s*��\)\)\)', - \ 'm' : '\%([�Ӵ��ڬ��������������������ߪ߫�������һս�����������������������ο��������������ʹ��ʪ�������������أ�ε첼Ъ�����Ǵ��ܸ�����ʸ����������ݨ��������ۯ�����ۤ��˴�������������ݼ�˾��dz������ϳ�������ܾը���л��Ӥ����������ո�ľѾ�������ճ����˨�λ�ت�����������������������������������������������ۻ�������������Ϊ溵�ʰ������̺�����������ü������ӹ��������ɴ���������Ϣ͸��¼���߶����ٽ��ﶻ�ŷ�̼��������ǫ�����ƿ������������������̸̻����̵����̴̹��̶��ϻ�����پ���̷̳����믵��Ĺ�ǥߺ���֪������Ь夰�յ�������𢨡�������̮�þ���̬��Ѱ�λ�û������ǣ����ץŹ������̨��º��ļ�š�������Ѣ��١۱����̰������ǧʾ������Ƴ����ϩƻ����м�����������̯̾̿̽�Ե�㴳���ﲸ���̫����������Ĵ��̩���̪��ܳ�̲��̱��׽̭��뷱ο�̧����������������̥̣̦�ʿ���ߎ������ϸ����������ٿ����ܵ������������Ū�¹׿׾�ᵼ��ž���е����������ȱ��μ���°������ż��������̱Ҹ�����Ʀԫ�����ѿ���Ǥ������ʶ������������Ĵ��ٰ������������������ü�����������������ᶶ賹Į�����������Ԥ�硬�ˡʱߴ�ʣ���󺵸����������������������ػ���������������Ϩ����������������������Ż�������������Ȩؤ����������̢�������̡��������������Ϯ�����򾾶��踭ͥ�������������������������Ϻ��������������۾��������̤�������⼬�غ���������������ѿ����������˻��ޣ������������̢ޡࢿ���ܡޢ��΢Т��ʢ���ꢻ���覤�͡碾���ݢϢ��ߢˡ���ߢ������������������⢩��ݥ޺ǥߥ᧮����m]\|��\_s*[�ӎҎюЎ�]\|��\_s*[����ߥ�]\|��\_s*[����ߤ�]\|��\_s*[������]\|��\_s*\%([���Ͽ�]\|��\_s*��\|��\_s*��\)\|��\_s*��\|��\_s*��\_s*\%(��\|ʸ\_s*��\)\|ξ\_s*\%([�ѿƿ�]\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|O\_s*l\_s*e\_s*a\_s*l\_s*e\_s*s\|ر\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*ĥ\|��\_s*[�����]\|��\_s*��\_s*ӧ\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*\%([��������ͭ]\|��\_s*ƻ\|��\_s*��\)\|��\_s*��\|��\_s*��\|6\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*;\_s*��\|��\_s*��\|B\_s*\%(e\_s*r\_s*b\_s*e\_s*r\_s*i\_s*d\_s*a\_s*c\_s*e\_s*a\_s*e\|i\_s*o\_s*r\_s*r\_s*a\_s*g\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\)\|��\_s*��\|©\_s*��\|k\_s*\$\_s*_\_s*{\_s*i\_s*n\_s*f\_s*}\_s*\$\|��\_s*��\|A\_s*\%(b\_s*i\_s*e\_s*s\|p\_s*e\_s*t\_s*a\_s*l\_s*a\_s*e\|c\_s*r\_s*o\_s*s\_s*t\_s*i\_s*c\_s*h\_s*u\_s*m\)\|��\_s*��\|�\_s*ȷ\|��\_s*��\|��\_s*[�����]\|��\_s*��\|��\_s*��\|Φ\_s*��\|��\_s*[�ҽ�Ԣ]\|3\_s*[����]\|��\_s*[����]\|��\_s*[��ȱ��]\|��\_s*��\|ȷ\_s*��\|��\_s*��\|��\_s*[���������˪��]\|P\_s*o\_s*d\_s*o\_s*p\_s*h\_s*y\_s*l\_s*l\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*[ζε��]\|��\_s*��\|�\_s*�\|��\_s*��\|��\_s*��\|��\_s*��\|R\_s*u\_s*t\_s*a\_s*l\_s*e\_s*s\|��\_s*\%(̣\|��\_s*[��ž]\)\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*Ļ\|��\_s*��\|��\_s*��\|��\_s*[���һ���]\|��\_s*��\|ߴ\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*ã\|��\_s*��\|��\_s*[��̯��]\|��\_s*��\|��\_s*��\|L\_s*o\_s*g\_s*a\_s*n\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\|Ю\_s*��\|��\_s*��\|��\_s*��\|S\_s*\%(a\_s*p\_s*i\_s*n\_s*d\_s*a\_s*l\_s*e\_s*s\|c\_s*h\_s*i\_s*s\_s*a\_s*n\_s*d\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\)\|C\_s*\%(a\_s*s\_s*u\_s*a\_s*r\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\|e\_s*r\_s*a\_s*t\_s*o\_s*p\_s*y\_s*l\_s*l\_s*a\_s*c\_s*e\_s*a\_s*e\)\|��\_s*\%(��\_s*��\|��\_s*��\)\|H\_s*a\_s*m\_s*a\_s*m\_s*e\_s*l\_s*i\_s*d\_s*a\_s*l\_s*e\_s*s\|��\_s*[Ƿ��]\|��\_s*ɧ\|ʹ\_s*��\|��\_s*��\|��\_s*[��§��]\|��\_s*��\_s*ǯ\|��\_s*��\|¿\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|ñ\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*[����]\|��\_s*��\_s*��\|��\_s*��\_s*Ǿ\|��\_s*[����]\|��\_s*��\|��\_s*\%(��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\)\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*Ū\_s*��\_s*̣\|��\_s*��\_s*\%(��\_s*̣\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|M\_s*\%([dgtnOo��]\|X\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|S\_s*-\_s*D\_s*O\_s*S\|L\_s*��\_s*��\_s*��\|P\_s*3\_s*��\_s*��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\)\|D\_s*\%(��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\|c\_s*C\_s*a\_s*r\_s*t\_s*h\_s*y\|e\_s*\%(d\_s*u\_s*s\_s*a\_s*n\_s*d\_s*r\_s*a\_s*l\_s*e\_s*s\|i\_s*t\_s*n\_s*e\_s*r\_s*i\_s*u\_s*m\|t\_s*a\_s*F\_s*o\_s*n\_s*t\|n\_s*\%(y\_s*a\_s*n\_s*t\_s*h\_s*a\_s*l\_s*e\_s*s\|d\_s*e\_s*l\_s*e\_s*v\_s*i\_s*u\_s*m\)\|C\_s*a\_s*b\)\|u\_s*l\_s*e\|A\_s*C\_s*��\_s*��\_s*��\_s*��\|a\_s*\%(g\_s*n\_s*\%(o\_s*l\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|e\_s*s\_s*i\_s*u\_s*m\)\|n\_s*\%(u\_s*\%(s\_s*c\_s*r\_s*i\_s*p\_s*t\_s* \_s*E\_s*d\_s*i\_s*t\_s*i\_s*n\_s*g\|e\_s*d\)\|g\_s*a\_s*n\_s*e\_s*s\_s*e\)\|r\_s*y\_s*l\_s*a\_s*n\_s*d\|i\_s*n\_s*e\|k\_s*e\_s*f\_s*i\_s*l\_s*e\|c\_s*\%(h\|i\_s*n\_s*t\_s*o\_s*s\_s*h\)\|s\_s*\%(s\_s*a\_s*c\_s*h\_s*u\_s*s\_s*e\_s*t\_s*t\_s*s\|t\_s*e\_s*r\_s*C\_s*a\_s*r\_s*d\)\)\|i\_s*\%(n\_s*n\_s*e\_s*s\_s*o\_s*t\_s*a\|s\_s*s\_s*\%(i\_s*s\_s*s\_s*i\_s*p\_s*p\_s*i\|o\_s*u\_s*r\_s*i\)\|c\_s*\%(r\_s*o\_s* \_s*S\_s*o\_s*f\_s*t\_s*w\_s*a\_s*r\_s*e\_s* \_s*A\_s*s\_s*s\_s*o\_s*c\_s*i\_s*a\_s*t\_s*e\_s*s\|h\_s*i\_s*g\_s*a\_s*n\)\)\|I\_s*\%(T\|P\_s*S\|M\_s*D\)\)\|��\_s*��\)', - \ 'n' : '\%([�ݥ��ɽ��԰���ھ�翮������������������Ǽ����¡���۩����׵�˾���̰�ĵ����ƭ���о����Ӹ�����Ī��������ɫ��Ÿˡ����ŵ����§���ϵ���ů������ۨ�����ǹǿǾǽ��������Ƕ��Ǹ�����ЫݻǷ����Ҿ��ݡ�ǻ�ĤΎ�������߿ݦ����եǫդ������ٹǭ���ʿ�ܡ̲������Ǯϫ�Ǭ̭��ܬ����Dzǰdzǯ޺Ǵ�ͺ�DZ��Ǫϣ�����಻��ǩ������͎�Բ���ʾ����迡���۾�ݹ��������ŧ�޹dz�Ǩæ��˥ȴ��ٶ���ɤ̎�ٿ��ô�����������콭��ʨ���߳���Ʋ������ؽ�ǢѦ���浶��ǡ���������ǣ����������ԡբ�١ذ�����լ��ѹ���ٿ�Ǧ��ǥǧǤ�������̶�����������������֮ƨ�������������������������2бð�ˎ���ٸ�������ij���������֧����ť鵵ͼ㳴÷ò����ڳ�в��ּ�����ͱľؽǺޥ��������ϲ˿������ܧ�ƻ�������������б��������������±����ŵ��ڽ�������ͨ��������Ʒ��ȱ���į��ή��¸�������ܩ��Ĺ�����޽�Ⱦ�������棷�м�����ǵ����ճ���Ǣ������������������Զ��������󢿢͢�����������Ǽ̵��ٽ��ձ��޸���������ѵ�����İ����ྨӭ��������ڵ�����˴�������Ƥʨ���������������������������������������̾����������˥̡͢���ʥ̥Φ����ߦ�n]\|Ģ\_s*��\|��\_s*��\|��\_s*��\|��\_s*ö\|��\_s*��\_s*ȿ\|�\_s*��\_s*��\|ϵ\_s*[�ݱ�]\|��\_s*��\|��\_s*��\|��\_s*[����]\|��\_s*[����]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[������]\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*Ƿ\|��\_s*��\|ο\_s*�\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*;\_s*��\|��\_s*��\|��\_s*�\|I\_s*I\_s*��\|�\_s*ȭ\|��\_s*��\|��\_s*�\| \_s*2\_s* \_s*��\_s*��\_s*��\|M\_s*y\_s*r\_s*i\_s*s\_s*t\_s*i\_s*c\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*�\|��\_s*��\|��\_s*ѵ\|��\_s*[����]\|P\_s*b\|L\_s*e\_s*a\_s*d\|��\_s*[����]\|C\_s*\%(e\_s*l\_s*a\_s*s\_s*t\_s*r\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|a\_s*r\_s*y\_s*o\_s*p\_s*h\_s*y\_s*l\_s*l\_s*a\_s*l\_s*e\_s*s\)\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*ʪ\)\|��\_s*��\_s*��\|7\_s*[����]\|��\_s*��\|��\_s*��\|ʿ\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\|T\_s*h\_s*e\_s* \_s*N\_s*e\_s*t\_s*w\_s*o\_s*r\_s*k\_s* \_s*I\_s*n\_s*f\_s*o\_s*r\_s*m\_s*a\_s*t\_s*i\_s*o\_s*n\_s* \_s*C\_s*e\_s*n\_s*t\_s*e\_s*r\|S\_s*o\_s*\%(l\_s*a\_s*n\_s*a\_s*l\_s*e\_s*s\|d\_s*i\_s*u\_s*m\)\|ɳ\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%([����]\|��\_s*��\_s*��\_s*��\|\.\_s*��\_s*\.\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*��\)\)\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|N\_s*\%([dpbaeoi]\|R\_s*Z\_s*I\|-\_s*g\_s*r\_s*a\_s*m\|G\_s*��\_s*��\_s*��\|H\_s*K\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\)\|T\_s*T\|Y\_s*��\_s*��\|U\_s*L\_s*L\|A\_s*S\_s*A\|E\_s*\%(C\|p\_s*o\_s*c\_s*h\|m\_s*a\_s*c\_s*s\)\)\|��\_s*��\|��\_s*��\)', - \ 'o' : '\%([���������Ů��ۯ۰�Ÿ�۲������˻������ҳŵ�����س��������������ḯ�Թ����������䲮��ɭ�����������ڶ�����ڼ��ᡸ�������������������������Ǧ��������Ƽ�����Ĺ�Ľ����Ǽ�Բ����������£���������ȳ�־���쿯����Φ�ֲ�ݣ�����ſ����༫�ʳ������ˬ�ʲ�������������񤲷ǰ����߰�θ��������ۻ�ɽ���̶�������Ͷ��笲��������������ݶ����ذ�ߴ�޳����۾��ʲ�����������إ����ᥲ���ص��ռ���鲪�����������ݯݳ���²�۷��겣����ݿ�������ӵ��������꾪Ʊ�����������ٱ�⳸����������͸���Ȳ����������ϵ��˲��˱����¿��ʤ�������Dz����Ϻ��ڨ��������ϯ�ݰ������������ƿ�Ϸ����ͦ�������˵�Ӱ���˿侭�����˸�����಼����ͺ�ߺ��������ӱ����ä���������¢���ˢ����ৰ�ϡ��ئ�����o]\|��\_s*��\_s*��\_s*��\|��\_s*��\|�\_s*��\|��\_s*Ȭ\_s*��\|Ŵ\_s*��\|��\_s*ȱ\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*̣\|��\_s*�\_s*��\|��\_s*ʴ\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[����]\|��\_s*��\|ب\_s*��\|˵\_s*[������]\|��\_s*[̼��]\|��\_s*[����]\|��\_s*[����]\|թ\_s*��\|��\_s*��\|��\_s*��\|G\_s*u\_s*t\_s*t\_s*i\_s*f\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|D\_s*i\_s*l\_s*l\_s*e\_s*n\_s*i\_s*a\_s*l\_s*e\_s*s\|H\_s*y\_s*p\_s*e\_s*r\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\|��\_s*��\|��\_s*��\|��\_s*[��̼��]\|��\_s*ǯ\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|A\_s*l\_s*i\_s*s\_s*m\_s*a\_s*t\_s*a\_s*l\_s*e\_s*s\|�\_s*��\|��\_s*��\|��\_s*��\|C\_s*o\_s*p\_s*t\_s*i\_s*d\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|��\_s*��\_s*��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*ʪ\|��\_s*��\_s*��\_s*��\|��\_s*[����]\|��\_s*[����]\|��\_s*Υ\|ز\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*[����������]\|��\_s*��\|��\_s*[������]\|��\_s*��\|��\_s*��\_s*[����]\|��\_s*[�߳���]\|��\_s*\%(��\|��\_s*��\_s*η\|��\_s*ŷ\_s*��\)\|��\_s*Ƭ\|��\_s*[��������]\|��\_s*��\_s*¾\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*\.\|��\_s*[��ζ]\|t\_s*h\_s*e\_s* \_s*O\_s*b\_s*j\_s*e\_s*c\_s*t\_s* \_s*M\_s*a\_s*n\_s*a\_s*g\_s*e\_s*m\_s*e\_s*n\_s*t\_s* \_s*G\_s*r\_s*o\_s*u\_s*p\|Ω\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\)\|��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*\%([����]\|��\_s*��\)\)\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*[ǯ��]\|��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*Ŭ\_s*��\|��\_s*\%([�ӷ�]\|��\_s*��\|\.\_s*��\_s*\.\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\)\)\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|O\_s*\%([����sS]\|h\_s*i\_s*o\|k\_s*l\_s*a\_s*h\_s*o\_s*m\_s*a\|b\_s*j\_s*e\_s*c\_s*t\_s*-\_s*O\_s*r\_s*i\_s*e\_s*n\_s*t\_s*e\_s*d\|O\_s*\%(D\_s*L\|P\_s*L\)\|M\_s*R\_s*O\_s*N\|A\_s*��\_s*��\_s*��\_s*��\_s*��\|C\_s*R\_s*��\_s*��\_s*��\|r\_s*e\_s*g\_s*o\_s*n\|''\_s*R\_s*e\_s*i\_s*l\_s*l\_s*y\_s* \_s*J\_s*a\_s*p\_s*a\_s*n\|��\_s*��\_s*��\|p\_s*e\_s*n\_s*W\_s*i\_s*n\_s*d\_s*o\_s*w\|x\_s*y\_s*g\_s*e\_s*n\)\)', - \ 'p' : '\%([ˣˤˡ��������ܮ�������ʻ�����á�����������������������ʬ��������ɤɶ��ɼ����ʿ���ȯ��Ȣ��������������������������ʧʢ����������Ȭ�˱�����ĥ�ѣ�����פԡޡܤצ��ը������̨��󡥡�򢩡����ץ��ǡˡʢߢ��¥ڥѧ������զХ�p]\|��\_s*\%(��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\)\|��\_s*[�ݥڥץԥ�]\|��\_s*[�ݤڤפԤ�]\|��\_s*��\|��\_s*��\_s*Į\|��\_s*��\|�\_s*[Ϫϥ]\|��\_s*��\|��\_s*��\|��\_s*ϥ\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(Τ\|��\_s*��\)\|C\_s*y\_s*c\_s*l\_s*a\_s*n\_s*t\_s*h\_s*a\_s*l\_s*e\_s*s\|S\_s*y\_s*n\_s*a\_s*n\_s*t\_s*h\_s*a\_s*e\|��\_s*��\|B\_s*r\_s*o\_s*m\_s*e\_s*l\_s*i\_s*a\_s*l\_s*e\_s*s\|L\_s*e\_s*a\_s*d\|��\_s*[�ļ��]\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\|��\_s*\%([��������]\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\)\)\|+\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\|Χ\_s*��\)\|��\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\)\)\|��\_s*��\_s*��\_s*��\|��\_s*\%([����Υ�]\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\)\|��\_s*\%(��\|��\_s*��\|��\_s*\%([����]\|��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\|��\_s*��\_s*[���]\)\|��\_s*[�ĥ�]\|��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*\%([����]\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%([��������]\|��\_s*[�ץ�]\|��\_s*\%(��\|��\_s*��\)\)\)\|��\_s*\%(��\_s*\%([�٥�]\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\)\|��\_s*\%(��\_s*��\|��\_s*��\)\)\)\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*³\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*ˡ\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*\%(��\|��\_s*��\_s*��\)\)\|��\_s*³\|��\_s*��\_s*��\_s*��\|��\_s*ƺ\_s*��\|��\_s*��\_s*��\|¿\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|Ž\_s*��\_s*��\_s*��\|��\_s*ʸ\|��\_s*��\_s*[����]\|��\_s*��\|��\_s*��\|P\_s*\%([umdCaor]\|K\_s*��\|D\_s*F\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|\.\_s*S\_s*\.\|S\_s*\%(\.\|Y\_s*��\_s*S\)\|I\_s*C\_s*��\_s*��\_s*��\_s*��\|l\_s*\%(a\_s*t\_s*i\_s*n\_s*u\_s*m\|u\_s*t\_s*o\_s*n\_s*i\_s*u\_s*m\)\|E\_s*T\_s*��\_s*��\_s*��\|O\_s*S\_s*\%(��\_s*��\_s*��\_s*��\|I\_s*X\|T\_s*��\_s*��\_s*��\_s*��\)\|e\_s*\%(r\_s*l\|n\_s*\%(t\_s*\%(o\_s*x\_s*y\_s*l\_s*i\_s*d\_s*a\_s*e\|i\_s*u\_s*m\)\|n\_s*s\_s*y\_s*l\_s*v\_s*a\_s*n\_s*i\_s*a\)\)\|h\_s*o\_s*s\_s*p\_s*h\_s*o\_s*r\_s*u\_s*s\)\)', - \ 'q' : '\%([��ܯ��ݬݮ��ܱܮ����ݫ����������ʵ��ߪ�����緩�����ų����������������������������ʤ��������մɾ�߷��������ţ賷�Φۻ������Ү�������ղ������ط��Ѿ������뷭�����򷬷���������ڶ��������˿����ֲ����̽�������ǰ̰�鶰���ȱ���������פ��޺���������������ޱ�����Ϳ����������߷�����������Ѧ��ν�����庿����ܸ�𷪶��ʳdz����������ˮԢ��ɦ����ʭ��Ӽ��������Цչ��硡����������Ŵ�ġ�������¢�������ҵ׹�������������׶������޷��˹�����ȸ�������Ң�����ܸ����ڹ��������������׶�������ҿ�ȴ���ȷ����϶��Ͷ��ꎸ����ơȡǡɢ���������q]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*̼\|�\_s*�\|��\_s*��\|�\_s*��\|��\_s*Ѵ\|ɴ\_s*[߻��]\|��\_s*��\_s*��\|��\_s*ʪ\|��\_s*��\|9\_s*��\|Ĺ\_s*��\|�\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|ŷ\_s*��\_s*��\|��\_s*��\|ŵ\_s*��\_s*��\|L\_s*a\_s*u\_s*r\_s*\%(a\_s*c\_s*e\_s*a\_s*e\|o\_s*i\_s*d\_s*e\_s*a\_s*e\)\|õ\_s*��\|��\_s*��\|c\_s*r\_s*e\_s*s\_s*c\|��\_s*��\|��\_s*[����]\|��\_s*¢\_s*��\|K\_s*r\|H\_s*e\_s*l\_s*l\_s*e\_s*b\_s*o\_s*r\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|��\_s*\%([��������ʸ����]\|��\_s*��\)\|��\_s*��\|��\_s*Ѥ\_s*��\|J\_s*u\_s*g\_s*l\_s*a\_s*n\_s*d\_s*a\_s*l\_s*e\_s*s\|��\_s*��\|ϻ\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|C\_s*\%(r\|h\_s*r\_s*o\_s*m\_s*i\_s*u\_s*m\)\|R\_s*h\_s*a\_s*m\_s*n\_s*a\_s*l\_s*e\_s*s\|��\_s*��\_s*��\|��\_s*��\_s*ϯ\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|Q\_s*\%(I\_s*C\|R\_s*��\_s*��\_s*��\|C\_s*��\_s*��\_s*��\_s*��\|U\_s*O\_s*��\_s*��\_s*��\)\|��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*[���]\|��\_s*\%(��\_s*[����]\|��\_s*\%(��\_s*��\|��\_s*��\)\)\|��\_s*��\_s*[�ॹ��]\)\|��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\)\)\)', - \ 'r' : '\%([���������α����������Ͼ��ϼϽ����Ͽ����߳ϱ������ϮӤ����ۭ�����ӯ������Ѥ��ҩ�������۰��Ϻ��ϭϴϲϹ��ϸϰ϶��ϵϳϯ���ϧ���ȧ��Ϩ������������תϦ�������ݭߣ���ް���ٳ�����Ѷ������Ӻү��ߺ��������������㹵�����������������������������������ݬݮ�����������ҳ��������ҽ��߲��������ݲ��������ϡ��ϣڻ������Ϣ���ϩ���ޥ������������������ﻼ�����Ϭ�������ڶ����Ϋά��ΪΨ�˷�Χ��ҭϻ٤Φ�������������������߱�����ί��βΰαΩ��γέδή������P��������ܲ����ש����������ا��������������������������η������κϤθо��������̺��������������ۢ������ס����������ڢ�������������ɩ������������������ζοε�˵���νμ������λ����ξ����ιΥ����Σ������Ρ΢�����ߢ������������ئ������Τ轤��ϫ��������Ϸ��ԿЬѰڰ�������ݳ�պ��ݴݣ���������������������������������������������������������������ݪڧѴ��������������������������������������ɤ�򱦢����ҧ姨���৫�����ا٧������ӧ��槬���ݧ����᧰��������������ϥ����Ϫ���ۧ秮�ܧ��ԧէާ觯���קѧڧ�֧䧡���駾�𧦧����ߧ맥�غ������������꧲�Ѧ���r]\|��\_s*[�ێڎَ؎�]\|��\_s*[�������]\|��\_s*[�������]\|��\_s*��\|��\_s*[ͭ��]\|��\_s*[˦���]\|6\_s*[����]\|��\_s*̵\_s*��\|ݦ\_s*ݨ\|԰\_s*��\|A\_s*\%(c\_s*t\_s*a\_s*e\_s*a\|p\_s*o\_s*p\_s*e\_s*t\_s*a\_s*l\_s*a\_s*e\)\|C\_s*\%(a\_s*l\_s*y\_s*c\_s*a\_s*n\_s*t\_s*h\_s*a\_s*c\_s*e\_s*a\_s*e\|h\_s*o\_s*r\_s*i\_s*p\_s*e\_s*t\_s*a\_s*l\_s*a\_s*e\)\|��\_s*[����]\|��\_s*\%(��\|��\_s*��\)\|V\_s*e\_s*r\_s*t\_s*i\_s*c\_s*i\_s*l\_s*l\_s*a\_s*t\_s*a\_s*e\|O\_s*r\_s*c\_s*h\_s*i\_s*d\_s*a\_s*l\_s*e\_s*s\|M\_s*i\_s*c\_s*r\_s*o\_s*s\_s*p\_s*e\_s*r\_s*m\_s*a\_s*e\|L\_s*\%([ruia]\|e\_s*i\_s*t\_s*n\_s*e\_s*r\_s*i\_s*a\_s*l\_s*e\_s*s\|A\_s*N\_s*��\_s*��\_s*��\_s*��\)\|��\_s*��\|G\_s*\%(e\_s*n\_s*t\_s*i\_s*a\_s*n\_s*a\_s*l\_s*e\_s*s\|y\_s*\%(n\_s*a\_s*n\_s*d\_s*r\_s*a\_s*e\|m\_s*n\_s*o\_s*s\_s*p\_s*e\_s*r\_s*m\_s*a\_s*e\)\)\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*\%(��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\)\|��\_s*��\_s*̿\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*§\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[����]\|��\_s*��\|ȿ\_s*��\_s*��\|��\_s*\%(��\_s*ʸ\_s*��\|��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*ǽ\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*Ū\|ǧ\_s*��\|R\_s*\%([bnfeauh]\|i\_s*c\_s*h\_s*a\_s*r\_s*d\_s* \_s*M\_s*\.\_s* \_s*S\_s*t\_s*a\_s*l\_s*l\_s*m\_s*a\_s*n\|C\_s*S\|S\_s*S\_s*��\_s*��\_s*��\|I\_s*S\_s*C\|A\_s*M\|O\_s*M\|E\_s*\%(M\_s*��\_s*̲\|T\_s*U\_s*R\_s*N\_s*��\_s*��\|A\_s*D\_s*M\_s*E\)\)\|��\_s*��\_s*ɽ\_s*��\|��\_s*��\_s*��\)', - \ 's' : '\%([������Ъ��ۼ��˵ֵ�ڰ��޶�������˿����������Խ�������������������Ǩ����Ψ��м��©­¥«¦¬�������������������̫���ᰳٴտ£��֥��ػǬ߶����ҫݽ���������¹������������������ײ����س��Ȣ�������������������������������������Ҳ���䷫��������������������������������������������������������ç��������î¹½¸º»�����������������������¶�����������ȿ��������������ର�������������������ۤ�������ɯ˻����í�ܦ岱������������޶�������������ܸ�������������������������Ҫ������ͼ�������ϴ�������������ߪ�����������������������ٰ���������������֣ڱ��������·����޷�����߫�����������������ѩ���Ѣ����������������������ߥ������������������ѡ����������������������٥Ѩ��������ڣ�������������������������������������������ګ�����̻�������������������������ع������������������������������Ԥ�����������������¿��б�¼��ͥ����������ӳҰ����ӵ�����ѱ�������ڿ�μ������ͤʹ�������ƫ������ǵ��¨§�ߵ�������̡����������ͷ�������ķ������������״ɿ�צ�����������ߵ���������®ú���϶��ۡڽ����������ſ�������Т�̢ޢϡ�⦤��͡�ߢˡ��ܢ�ޢ�ʡ��΢��ߢ��ꢻ�����������حج�����������ï�Ϳ������巿������H�����������������񾽻������������ľ������������ڧ߭�����湥��ٹ���۵ʿ���Ʃ��Ա���飼�������������ý�Ƴ��������ħ����󻼲�����١����ٶ�������Ĵ��¢ֺ��������ߨ��ߧ�¼Ȼ����ο�Ǧ�������ǧ��ӻ����к�����尷樵Ԧ����������������ܰ��Ǣ�������������ܾ�������н�ؼ������������ż�Ĭ߼���ȼ����𮼻ꩼ�����ɨ���������ũ�������м��޳���ʻ�������������Ϳ��ļ����������������ҼԲ�������ĵ������������ϼ���բ����ٱ�ؼ۷�����������������������ּ���м�ܼڼ�����Ѽм˼ּ�Ұ������ʵ�������ż�ެ������ո��շ��ܤܣƵ����������´���������ý�������ʽȽͽܼ̿�����������꫽н���ܶ��������ܷ������������ꪽ�������쨳�Ӵ֭�������ϼ�������������������ܽ�����µ�½���������������������������������Ѯضآ�����������ؽܽ׽ٽ���䣽սֽ�������������������������������Ӣ����������������֪��ǿ������������п¿��������Ŀ˿��ӿ��¿ɿ��ǿ���ä���⿹���ƿ����������ȿʿ������ƿ�謹������е���������������������������ر������������������޵�����������ַ����Ҿ�����������ľ���������������ֹ����������ľ���������������׾̰�������գ����ң�ط����������������������Ӿԡ��������ʽ������ءˡʾ������������Ѿ�����ء�Ͼ��������޾������������۾¾��׾�騾��ľ��������ܥ�����ƾྫྷ�����������Ͼɾ����˾���������ƴ�Ҿ��ݾ������о��ξƾȾ����Ͼܾþ�ھ˾��ʾ�������������������ԧ֤�ѿ�����°�����������������濣������������������ػ������㭻�׶������������������ӻӶ��Ǽ�����ӡ����ܻ��H�����������������ҿ��Ӻ���ǡ����ɦ�����������������֬����寿��ڻ��¶�����ǰٻ��������������������л�������ף�㬰�Ԯ��Ƿ�Ȼ�ֻ����ѳ�����ʻ�̼��һ�������������������̦�����������������������ڼ���褴����ֻƤ�����������豫�����dz�˸�������ʿ����������������������ͻ�����ٮ����������ӦͶ��긼���뽿���ܻ����߷��߽Ϋ��ڼ����޴�����ͺ��ɾ�������������������참������ֿ���곡ָ��ӯ�����������˼�����λ��ã��ů͡���ұ��ⷱ�ζ����������۸Τܪ�����Ǿ�����٩�����Ӵ��ܼ������������Ʊ��ݺ���峦�涭�����ո������ප����������������ߦ�»�����ڹ�����������Ŀ������Ģ��ջ��ɻ���������ܢ���������ӻ����������բ���3����O��������������������������������߻��������ú���������ޯ����خ���稺������ռŻ����ø����칹��ʺ����ѱ�����٣���׺˺�㷺ԺݺҺӼ��кںκպʺĺ��ƺ׺źͺ��ԺۺкǺ�ª��������������������ں����Ժ������������غ��ݯ���������������̻��赺����ͼӺ��������Լ亵�����ֺ�������麺�����ú������������������հ����̬����٭����������������������������ϻ�����������⤹���Ż��������������������������맻ź�����󢾢�����ʸ�š�����ɸ���Ļ����ں̢����������ǡƨ�������õ�������������������㧳����s]\|��\_s*[����������]\|��\_s*[����������]\|��\_s*[����������]\|�\_s*��\|��\_s*\%(ϩ\|Ϫ\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[�ס�]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|�\_s*[�]\|��\_s*Ѥ\|��\_s*��\|U\_s*m\_s*b\_s*e\_s*l\_s*l\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\|��\_s*��\|��\_s*��\|c\_s*e\_s*n\_s*t\_s*i\|��\_s*[��϶]\|��\_s*��\|�\_s*̥\|��\_s*��\|ŵ\_s*��\|��\_s*ͺ\|��\_s*��\|ŷ\_s*[�IJ�]\|V\_s*i\_s*o\_s*l\_s*a\_s*l\_s*e\_s*s\|N\_s*y\_s*m\_s*p\_s*h\_s*a\_s*e\_s*\%(a\_s*c\_s*e\_s*a\_s*e\|o\_s*i\_s*d\_s*e\_s*a\_s*e\)\|��\_s*��\|�\_s*ƻ\|��\_s*\%(��\|��\_s*��\)\|Ϸ\_s*��\|˾\_s*Ĭ\|��\_s*��\|��\_s*[��Ǧ]\|L\_s*a\_s*\%(b\_s*i\_s*a\_s*t\_s*a\_s*e\|m\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\)\|��\_s*��\_s*��\|ʾ\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|ت\_s*ͺ\|��\_s*��\|��\_s*��\|I\_s*\%(s\_s*o\_s*p\_s*y\_s*r\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|l\_s*l\_s*i\_s*c\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\)\|W\_s*i\_s*n\_s*t\_s*e\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*ʸ\|��\_s*[ë��]\|��\_s*[����]\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%([�ظ��ܻ�]\|��\_s*��\)\|7\_s*��\|��\_s*��\|4\_s*��\|��\_s*[ʬ��]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|͢\_s*[����]\|Ȼ\_s*[ϯϺ]\|�\_s*[���]\|��\_s*[���]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|Z\_s*i\_s*n\_s*g\_s*i\_s*b\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|³\_s*\%(��\_s*��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\)\|ή\_s*[��Υ]\|��\_s*��\|�\_s*��\|Һ\_s*ȭ\|��\_s*��\_s*��\|C\_s*\%([se]\|y\_s*c\_s*a\_s*d\_s*\%(i\_s*d\_s*a\_s*e\|o\_s*\%(p\_s*s\_s*i\_s*d\_s*a\|f\_s*i\_s*l\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\)\)\|h\_s*l\_s*o\_s*r\_s*a\_s*n\_s*t\_s*h\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*��\|D\_s*Ź\|��\_s*��\_s*��\|a\_s*\%(s\_s*s\_s*y\_s*t\_s*h\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|c\_s*t\_s*a\_s*l\_s*e\_s*s\)\)\|��\_s*��\|��\_s*[������]\|��\_s*��\_s*Ʀ\|ۨ\_s*��\|��\_s*��\|��\_s*��\_s*\%(��\_s*[ǯ��]\|��\_s*[ǯ��]\)\|��\_s*��\|ɴ\_s*��\_s*��\|��\_s*¹\_s*��\|��\_s*ƣ\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(ˡ\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|P\_s*\%(a\_s*r\_s*i\_s*e\_s*t\_s*a\_s*l\_s*e\_s*s\|t\_s*e\_s*r\_s*i\_s*d\_s*o\_s*s\_s*p\_s*e\_s*r\_s*m\_s*\%(a\_s*l\_s*e\_s*s\|i\_s*d\_s*a\_s*e\)\|r\_s*i\_s*m\_s*u\_s*l\_s*a\_s*l\_s*e\_s*s\)\|A\_s*\%(p\_s*i\_s*a\_s*l\_s*e\_s*s\|r\_s*a\_s*l\_s*e\_s*s\|n\_s*t\_s*i\_s*m\_s*o\_s*n\_s*y\)\|��\_s*[ŵ��]\|B\_s*\%(r\|��\_s*��\_s*��\)\|��\_s*ĥ\_s*��\|��\_s*ʬ\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*¤\_s*��\|M\_s*\%(e\_s*r\_s*c\_s*u\_s*r\_s*y\|u\_s*s\_s*a\_s*l\_s*e\_s*s\|a\_s*r\_s*q\_s*u\_s*i\_s*s\_s* \_s*d\_s*e\_s* \_s*S\_s*a\_s*d\_s*e\)\|D\_s*o\_s*n\_s*a\_s*t\_s*i\_s*o\_s*n\_s* \_s*A\_s*l\_s*p\_s*h\_s*o\_s*n\_s*s\_s*e\_s* \_s*F\_s*r\_s*a\_s*n\_s*c\_s*o\_s*i\_s*s\_s* \_s*d\_s*e\_s* \_s*S\_s*a\_s*d\_s*e\|��\_s*\%(Ƿ\|��\_s*\%(��\_s*̣\|��\_s*��\_s*��\)\)\|T\_s*\%(e\_s*t\_s*r\_s*a\_s*c\_s*e\_s*n\_s*t\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|i\_s*n\|h\_s*e\_s* \_s*S\_s*i\_s*m\_s*p\_s*l\_s*e\_s* \_s*A\_s*P\_s*I\_s* \_s*f\_s*o\_s*r\_s* \_s*e\_s*v\_s*e\_s*n\_s*t\_s*-\_s*b\_s*a\_s*s\_s*e\_s*d\_s* \_s*X\_s*M\_s*L\_s* \_s*p\_s*a\_s*r\_s*s\_s*i\_s*n\_s*g\)\|��\_s*��\|��\_s*��\_s*��\|��\_s*¬\_s*��\_s*ư\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%([���]\|��\_s*��\|��\_s*��\)\|��\_s*\%([���]\|��\_s*��\)\)\|��\_s*̣\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*\%([����]\|��\_s*��\_s*[����]\)\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\)\)\|��\_s*\%([�ʼ�]\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*(\_s*S\_s*t\_s*r\_s*u\_s*c\_s*t\_s*u\_s*r\_s*e\_s* \_s*a\_s*n\_s*d\_s* \_s*I\_s*n\_s*t\_s*e\_s*r\_s*p\_s*r\_s*e\_s*t\_s*a\_s*t\_s*i\_s*o\_s*n\_s* \_s*o\_s*f\_s* \_s*C\_s*o\_s*m\_s*p\_s*u\_s*t\_s*e\_s*r\_s* \_s*P\_s*r\_s*o\_s*g\_s*r\_s*a\_s*m\_s*s\_s*)\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s* \_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\|S\_s*\%([nrgmce��]\|G\_s*M\_s*L\|��\_s*��\_s*��\|S\_s*��\_s*��\_s*��\|F\_s*��\_s*��\_s*��\_s*��\|Q\_s*U\_s*A\_s*R\_s*E\_s* \_s*E\_s*N\_s*I\_s*X\|K\_s*\%(K\|Y\_s* \_s*P\_s*e\_s*r\_s*f\_s*e\_s*c\_s*T\_s*V\_s*!\)\|a\_s*\%(r\_s*\%(r\_s*a\_s*c\_s*e\_s*n\_s*i\_s*a\_s*l\_s*e\_s*s\|g\_s*e\_s*n\_s*t\_s*o\_s*d\_s*o\_s*x\_s*a\_s*c\_s*e\_s*a\_s*e\)\|m\_s*a\_s*r\_s*i\_s*u\_s*m\)\|M\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\)\|P\_s*\%(��\_s*��\_s*��\_s*��\|A\_s*C\_s*E\_s*��\_s*��\)\|p\_s*\%(l\_s*u\_s*s\|e\_s*\%(r\_s*m\_s*a\_s*t\_s*o\_s*p\_s*h\_s*y\_s*t\_s*a\|c\_s*a\_s*l\_s*i\_s*t\_s*y\_s* \_s*S\_s*t\_s*o\_s*r\_s*e\_s* \_s*R\_s*e\_s*t\_s*a\_s*i\_s*l\_s*e\_s*r\_s* \_s*o\_s*f\_s* \_s*P\_s*r\_s*i\_s*v\_s*a\_s*t\_s*e\_s* \_s*L\_s*a\_s*b\_s*e\_s*l\_s* \_s*A\_s*p\_s*p\_s*a\_s*r\_s*e\_s*l\)\|a\_s*\%(t\_s*h\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\|r\_s*c\)\)\|H\_s*I\_s*F\_s*T\_s*��\_s*��\|C\_s*S\_s*I\|T\_s*\%(k\|A\_s*R\)\|h\_s*u\_s*g\_s*a\_s*r\_s*t\_s* \_s*A\_s*s\_s*s\_s*o\_s*c\_s*i\_s*a\_s*t\_s*e\_s*s\_s* \_s*S\_s*y\_s*s\_s*t\_s*e\_s*m\_s* \_s*I\_s*n\_s*t\_s*e\_s*r\_s*f\_s*a\_s*c\_s*e\|A\_s*\%(P\|S\_s*I\)\|i\_s*\%(m\_s*p\_s*l\_s*e\_s* \_s*K\_s*a\_s*n\_s*a\_s* \_s*t\_s*o\_s* \_s*K\_s*a\_s*n\_s*j\_s*i\_s* \_s*c\_s*o\_s*n\_s*v\_s*e\_s*r\_s*s\_s*i\_s*o\_s*n\_s* \_s*p\_s*r\_s*o\_s*g\_s*r\_s*a\_s*m\|l\_s*i\_s*c\_s*o\_s*n\)\|t\_s*r\_s*o\_s*n\_s*t\_s*i\_s*u\_s*m\|o\_s*\%(u\_s*t\_s*h\_s* \_s*\%(D\_s*a\_s*k\_s*o\_s*t\_s*a\|C\_s*a\_s*r\_s*o\_s*l\_s*i\_s*n\_s*a\)\|l\_s*a\_s*r\_s*i\_s*s\|f\_s*t\_s*w\_s*a\_s*r\_s*e\_s* \_s*R\_s*e\_s*s\_s*e\_s*a\_s*r\_s*c\_s*h\_s* \_s*A\_s*s\_s*s\_s*o\_s*c\_s*i\_s*a\_s*t\_s*e\_s*,\_s*I\_s*n\_s*c\_s*\.\)\|u\_s*\%(n\|l\_s*f\_s*u\_s*r\)\)\|β\_s*��\)', - \ 't' : '\%([�������˳��������ɼ��Ҹ�����ڽ�Ѳ���������۳���������ݽ�꾲������������Ĺゥ�����ƾ�η���䶡�����������ݽ����ȼ��ͧ����������۽�����Ĺ���������������ԥ����Ч�����������ܽ���������˺�̭��������ǯ����ӷֺܺ�ڢ��κ�˭��������ƿ���¢�������Ѹ��ݹ��Ǽƻ������ƺ�����������ܫ���������������Ƴ���۶������岳�������ڮ�ݥ��������ܪ�������ٵ��ֺ����߮��ƪе����즰�������������ƽ��������޹��ơ�������������Ʀ����������ƭ����Ƥ����ƣ������������ƫƥ�����������ո�ﰳ��������믿���æ������Ԧ����ѽ���������������ײ��ѽ��ѹ��ϳ���αͻ���ų�����������Ͽ�ڼ��������Ϳ޻���������������Ȏ��ӱ͹����ʻ���Թ�֥������������ų������ׯ�ŭ��ū�ڳ��ũ�����������ɡ������ץ��������������š�����ż��ſ���Ŷ������ŻŸ��źŲŪůŨű��Ű��Ŵܼ���챭�����ܨ����������������ţ����������������š��������������������������Ţ޸���������׷�Ǝ�ʾ��ʼ������������ŵ������̳���ض��۲���ϸ������̽���Ϫ�������ٴ���ܻ��ܿ���������ѳ����������㪱����γ�����ª������ڼ�����������ָ��ʴ������ϸ��Ⱥ��鲶������ڹ˷Ҿ�����������ѣ������ױ����������³������������������ٽ��ƿ����������븾����������������̢�����������Խϴ���˵���Ϻ�¤������ݶԯ���з��ˤ�����ض࿵�����������˾����ͿԻ�ڻ������ܦ������������Ƶ��⸷ѻ���������̹�Ϣ�Ď����׹����������ۺ��������������紺��N�������㾹���������ٻĿ�����������������������������������������������ٲ��Ŧ����������������������Ȥ��������ܺ�������Ľ��Ҭ��ļ������Ť�����ı����������������׭����������ذ������߭׬�������������ġ����ĵįŽ��������Ƭĸ��ķijĪĢ��ĭ��ƨĻĥĤĨȥħ������İĦĬĮĺĴ�ģIJĶĩīЦ����Ѳפ����دɪ��������������������ɳ���ղ�������ϡѡСο�������������������������漣��֮�ѻ������׷�����������������ڲ�������������������������������������٤������̯�����ֿ�ڸ�ȿ�ˬ���������ܽ��î��Ƣ���í�̱���۸������������������нԻ����վι�ì���ʾλ���Ƨ����٥Ʈ������á�����Ⱦ�䲹���ﴰ����٦��ɶ���ݾ�Źê��éڥ�������çä�ܱ纴������ͤɫ��맰�������������ܭ������ζε�����ɺ�ݰ�������ľ����鶩��ͣ�������Գ���������������Ӭ���ѹ�ҵ�������ͺ���������׼������������Ŭ���Ƶ�����«�ԡý�������ݽ�è���ã�۹��̴��ƿ�����ֻ����Ǥ�Ʊ����ý���ϰ���䶳�ٷɹ��������º����յ���δ����������������������й���������ٿ��Ӹ��þں������������߬������������߸�������ÿWö��ӷëó�ȿC÷ò����ý��ðôùøú��û����õñâ��پ�������ŧڤ��٧Ӷ��߷����������������������������������������������������ڭ��������ʿ��ڬ����������������������������������������������������������ж���Ա�ǿ�����Ĺ��ʲ֫�����­������Ω�����������������ί��ȯ����۴¿¾���¿�ï���Һ�ӣ��������߱��٣����崤��������ŷ���߷����ڢ����������ᦨ�����ɽ���ڥ����覨�ȥ����ġ�žƩ���������ȥ����Ļ�ü�����������������������Ө����������ƨ����䨷��t]\|��\_s*[�ĎΎ���]\|��\_s*[�ȥƥĥ���]\|��\_s*[�ȤƤĤ���]\|��\_s*��\|��\_s*��\_s*��\|��\_s*[����]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*Ϸ\|��\_s*��\|��\_s*[���]\|��\_s*�\|��\_s*ľ\|��\_s*��\|��\_s*��\_s*��\|��\_s*[����]\|��\_s*[����]\|͸\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\|H\_s*y\_s*d\_s*r\_s*o\_s*c\_s*h\_s*a\_s*r\_s*i\_s*t\_s*a\_s*l\_s*e\_s*s\|��\_s*��\|��\_s*��\|��\_s*[��ƻ��]\|��\_s*[����]\|��\_s*ǯ\_s*��\|��\_s*[�׻�]\|A\_s*c\_s*o\_s*n\_s*i\_s*t\_s*u\_s*m\|ƶ\_s*��\|��\_s*��\|��\_s*��\|F\_s*e\|I\_s*r\_s*o\_s*n\|��\_s*¼\|��\_s*��\|��\_s*̼\|ɻ\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|ε\_s*��\)\|��\_s*[����]\|��\_s*\%(��\|��\_s*��\)\|ɹ\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[����]\|B\_s*a\_s*l\_s*a\_s*n\_s*o\_s*p\_s*h\_s*o\_s*r\_s*a\_s*l\_s*e\_s*s\|1\_s*\%(��\|0\_s*��\)\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\|E\_s*\%(u\_s*p\_s*h\_s*o\_s*r\_s*b\_s*i\_s*a\_s*l\_s*e\_s*s\|r\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\)\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(Ϸ\_s*Ƭ\|��\_s*��\)\|��\_s*\%([����]\|��\_s*��\|ܥ\_s*��\_s*�\)\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*[����]\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|�\_s*��\|��\_s*��\|��\_s*ެ\|��\_s*��\|J\_s*i\_s*a\_s*n\_s*g\_s*s\_s*u\|��\_s*��\|��\_s*[����]\|��\_s*ë\|��\_s*��\|��\_s*Ϫ\_s*��\|��\_s*��\|��\_s*��\|��\_s*[����]\|��\_s*��\|��\_s*��\_s*��\|��\_s*[����]\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|Ϣ\_s*��\_s*[����]\)\|��\_s*\%(��\|��\_s*˷\)\|��\_s*Ƣ\|��\_s*��\|��\_s*��\|��\_s*[ڳ��]\|��\_s*��\|��\_s*\%(ͼ\|��\_s*��\)\|��\_s*��\|��\_s*��\|ͱ\_s*Ю\|̵\_s*��\|��\_s*\%(��\|��\_s*��\)\|�\_s*��\|��\_s*��\|P\_s*\%(\.\_s*S\_s*\.\|o\_s*l\_s*y\_s*\%(g\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\|c\_s*a\_s*r\_s*p\_s*i\_s*c\_s*a\_s*e\)\|a\_s*n\_s*d\_s*a\_s*n\_s*a\_s*l\_s*e\_s*s\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|ж\_s*��\|Ʋ\_s*��\|ǽ\_s*[ʸǷ]\|��\_s*��\|��\_s*̱\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|M\_s*\%(e\_s*n\_s*i\_s*s\_s*p\_s*e\_s*r\_s*m\_s*a\_s*c\_s*e\_s*a\_s*e\|o\_s*n\_s*o\_s*\%(p\_s*e\_s*t\_s*a\_s*l\_s*a\_s*e\|c\_s*\%(h\_s*l\_s*a\_s*m\_s*y\_s*d\_s*e\_s*a\_s*e\|o\_s*t\_s*y\_s*l\_s*e\_s*d\_s*o\_s*n\_s*e\_s*a\_s*e\)\)\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*\%(��\_s*[�ȥ��]\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*[����ॢ]\|��\_s*\%(��\|��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*��\_s*\%(��\|��\_s*��\)\)\|��\_s*\%(��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*[�ե�]\)\|��\_s*\%([����]\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%([�ɥ�]\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*[������]\|��\_s*��\)\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\|Ϣ\_s*ʸ\_s*��\)\|\\\_s*T\_s*e\_s*X\|��\_s*��\_s*��\|ʸ\_s*��\_s*��\|��\_s*��\|��\_s*\%([����]\|��\_s*˦\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|E\_s*��\|��\_s*[�أ�]\)\|T\_s*\%([bc��mliahe]\|r\_s*i\_s*m\_s*e\_s*n\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\|u\_s*n\_s*g\_s*s\_s*t\_s*e\_s*n\|��\_s*��\_s*��\|X\_s*T\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|V\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\)\|C\_s*P\|��\_s*��\_s*��\|-\_s*C\_s*o\_s*d\_s*e\|O\_s*E\_s*I\_s*C\|A\_s*\%(C\|I\_s*N\_s*S\|B\_s*��\_s*��\)\|E\_s*L\)\|��\_s*\%([����]\|��\_s*��\_s*��\_s*��\_s*��\_s*��\)\)', - \ 'u' : '\%([����Ⱥ��ɶ������ἷ�������ƶ���ڰ����ѽ��뼿������å�����ѽ�������ִ���ء�������¥��ӹ����������ⱳ����ư뭱������������վ�������ž�������𱴵���Ϊ�Ų�����������ر���������󨱲���山���������۲��������񱷸����¹��������ϻ��������������ڴ︽���̱ǰ�����������ֶ����̽��������޲�墱��ⳤز����������ﷵ�����庨��������΢���ױ���������Ӻ��屯Ĭ��Σݵ�汵���²����ͫ���˷Ⱬ�DZ���������������ڽͭ�ɼ��ޢ��Ƥ���ձ������񻾵�ѵ���ھв�ͷ���α������������仺ǿ���⤦���������ԥ�U�姵��u]\|��\_s*��\|��\_s*��\|��\_s*��\|ϵ\_s*��\|��\_s*��\_s*��\|��\_s*��\|թ\_s*��\_s*��\|��\_s*��\|ͥ\_s*\%(��\_s*[�ɰ�]\|��\_s*��\)\|��\_s*��\|��\_s*²\|��\_s*��\|ˢ\_s*��\|��\_s*��\|��\_s*��\_s*[Ƭ��]\|��\_s*�\|��\_s*Ǽ\|�\_s*��\|�\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*Ļ\_s*��\|ø\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\|̣\_s*��\|��\_s*��\|A\_s*r\_s*i\_s*s\_s*t\_s*o\_s*l\_s*o\_s*c\_s*h\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|��\_s*��\|��\_s*��\_s*��\|�\_s*��\|��\_s*Ϻ\|��\_s*��\|��\_s*[������]\|��\_s*\%(��\|��\_s*��\_s*��\)\|C\_s*u\_s*c\_s*u\_s*r\_s*b\_s*i\_s*t\_s*a\_s*l\_s*e\_s*s\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*ǽ\|��\_s*\%(��\_s*��\|ͭ\_s*��\)\|��\_s*\%([����]\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*��\_s*��\)\)\|ñ\_s*\%(��\|��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\)\|��\_s*\%([���ˡ�]\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*\%(��\_s*��\|��\_s*��\)\)\)', - \ 'v' : '\%([�������͢��ǧ��Ӣ��˥�v]\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\| \_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\|��\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%([���ܥȥ�]\|��\_s*\%(��\_s*��\_s*��\|��\_s*[����]\)\)\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\|��\_s*\%([��ȥ�]\|��\_s*��\|��\_s*��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\)\)\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%([�ɥ�]\|��\_s*��\_s*��\|��\_s*��\_s*��\)\)\|��\_s*��\_s*��\|��\_s*Ĺ\_s*��\|��\_s*ľ\|��\_s*\%(��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*\%(��\|��\_s*��\)\)\|��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\_s*\%(��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*\%(��\|��\_s*��\)\)\)\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\)\)\|��\_s*\%([����֥Х���]\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*\%(��\|��\_s*[����]\)\)\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*\%([����]\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*\%([����]\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*��\_s*\%(��\|��\_s*��\_s*\%(��\|��\_s*��\_s*��\_s*��\_s*��\)\)\)\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*��\|��\_s*��\)\)\|��\_s*\%([�����]\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%([�ȥ���]\|��\_s*��\)\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*\%(��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%([����]\|��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\|��\_s*[����]\)\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*[���䥢]\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\)\)\|��\_s*\%([���]\|��\_s*\%([���֥�]\|��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*\%([�顼]\|��\_s*��\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\|��\_s*��\_s*��\)\)\|��\_s*\%([����]\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\)\|��\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\)\)\|��\_s*\%(��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\)\|V\_s*\%(H\_s*L\_s*L\_s*(\_s*V\_s*e\_s*r\_s*y\_s* \_s*H\_s*i\_s*g\_s*h\_s* \_s*L\_s*e\_s*v\_s*e\_s*l\_s* \_s*L\_s*a\_s*n\_s*g\_s*u\_s*a\_s*g\_s*e\_s*)\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|J\_s*E\_s*-\_s*��\|��\_s*��\|��\_s*��\_s*��\|I\_s*S\_s*A\_s*��\_s*��\_s*��\|i\_s*r\_s*g\_s*i\_s*n\_s*i\_s*a\|A\_s*X\|e\_s*r\_s*\%(m\_s*o\_s*n\_s*t\|i\_s*S\_s*i\_s*g\_s*n\)\|a\_s*n\_s*a\_s*d\_s*i\_s*u\_s*m\)\)', - \ 'w' : '\%([���򲧽����������˽ﲴͺ����Ⱥ��ɶ���ʦԦ���ἷ�������ƶ���ڰ������뼿������å���ѽ����������ء�������¥��ӹ����������ⱳ����ư뭱������������վ�������ž�������𱴵���Ϊ�Ų���������ر���������󨱲���山���������۲��������񱷸����¹��������ϻ��������������ڴ︽���̱ǰ�����������ֶ����̽���������墱���ز����������ﷵ�����庨��������U��΢���׻᢬�������Ӻ��屯Ĭ��Σݵ�汵���²����ͫ���˷Ⱬ�DZ���������������ڽͭ�ɼ��ޢ��Ƥ�ձ������񻾵�ѵ���ھв�ͷ���α������������仺ǿ���⤦�����ܲ����������������ϴ��ѽѴ����ֲҺҶȵ������ɡ�ب����˺�����о���Ƹ���޾�������������������׿׾�б���������IJ��ƻ�Ĺ����������ʻ�駷�������������Ų���ѯ��뻲���Ƚ�����ռ㰿�������´ĸ���ӻͯ��Ͱ����ʬ����������ʨ���������ʤ��������ȥ���w]\|��\_s*[���񎳥���]\|��\_s*[��񥦥��]\|��\_s*[��񤦤��]\|��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|ϵ\_s*��\|��\_s*��\_s*��\|��\_s*��\|թ\_s*��\_s*��\|��\_s*��\|ͥ\_s*\%(��\_s*[�ɰ�]\|��\_s*��\)\|��\_s*��\|��\_s*²\|��\_s*��\|ˢ\_s*��\|��\_s*��\|��\_s*��\_s*[Ƭ��]\|��\_s*�\|��\_s*Ǽ\|�\_s*��\|�\_s*��\|��\_s*��\|��\_s*��\_s*Ļ\_s*��\|ø\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\|̣\_s*��\|��\_s*��\|A\_s*r\_s*i\_s*s\_s*t\_s*o\_s*l\_s*o\_s*c\_s*h\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|��\_s*��\|��\_s*��\_s*��\|�\_s*��\|��\_s*Ϻ\|��\_s*��\|��\_s*[������]\|��\_s*\%(��\|��\_s*��\_s*��\)\|C\_s*u\_s*c\_s*u\_s*r\_s*b\_s*i\_s*t\_s*a\_s*l\_s*e\_s*s\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*ͥ\|��\_s*˺\_s*��\|��\_s*��\|��\_s*��\_s*��\|(\_s*��\_s*)\|��\_s*[����]\|��\_s*��\|��\_s*��\|��\_s*��\|Y\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*[ͳ��]\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*٥\_s*�\|��\_s*\%(��\|ʿ\_s*��\_s*��\_s*��\)\|ݿ\_s*��\_s*��\_s*٥\|��\_s*\%(��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\)\)\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*\%([�ץ�]\|��\_s*��\_s*��\)\|��\_s*\%([����]\|��\_s*��\_s*��\_s*��\)\)\|��\_s*��\_s*��\|��\_s*\%([�ࡼ]\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\)\)\|��\_s*\%(��\_s*[������]\|��\_s*��\|��\_s*\%(��\_s*\%(��\|��\_s*��\)\|��\_s*\%(��\|��\_s*��\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\)\)\)\|��\_s*\%(��\|��\_s*[�ȥ�]\)\)\|��\_s*��\_s*��\_s*��\|W\_s*\%(S\|N\_s*N\|y\_s*o\_s*m\_s*i\_s*n\_s*g\|O\_s*W\_s*O\_s*W\|I\_s*\%(D\_s*E\|N\_s*T\_s*E\_s*R\_s*P\_s*(\_s*W\_s*i\_s*d\_s*g\_s*e\_s*t\_s* \_s*I\_s*n\_s*t\_s*e\_s*r\_s*p\_s*r\_s*e\_s*t\_s*e\_s*r\_s*)\)\|i\_s*\%(s\_s*c\_s*o\_s*n\_s*s\_s*i\_s*n\|d\_s*g\_s*e\_s*t\|n\_s*d\_s*o\_s*w\_s*s\)\|h\_s*\%(y\_s* \_s*d\_s*o\_s*n\_s*e\_s* \_s*i\_s*t\_s*?\|o\_s* \_s*d\_s*o\_s*n\_s*e\_s* \_s*i\_s*t\_s*?\)\|E\_s*B\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|e\_s*\%(s\_s*t\_s* \_s*V\_s*i\_s*r\_s*g\_s*i\_s*n\_s*i\_s*a\|b\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*\%(��\|��\_s*��\)\)\|��\_s*��\_s*��\)\)\|a\_s*s\_s*h\_s*i\_s*n\_s*g\_s*t\_s*o\_s*n\|A\_s*V\_s*��\_s*��\_s*��\_s*��\)\|��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%([����]\|��\_s*\%(��\|��\_s*��\_s*��\)\)\|��\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\)\|��\_s*\%(��\_s*[��]\|��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\)\)\)\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|T\_s*\%(h\_s*e\_s* \_s*W\_s*o\_s*r\_s*l\_s*d\_s* \_s*W\_s*i\_s*d\_s*e\_s* \_s*W\_s*e\_s*b\_s* \_s*C\_s*o\_s*n\_s*s\_s*o\_s*r\_s*t\_s*i\_s*u\_s*m\|u\_s*n\_s*g\_s*s\_s*t\_s*e\_s*n\)\)', - \ 'x' : '\%([���������������������������������秷���ߦ�x]\|��\_s*[����������]\|��\_s*[����������]\|��\_s*[����������]\|��\_s*��\_s*\%(��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%([����]\|��\_s*[����]\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\|ü\_s*��\)\|X\_s*\%([����]\|C\_s*o\_s*n\_s*s\_s*o\_s*r\_s*t\_s*i\_s*u\_s*m\|��\_s*[����]\|P\_s*S\_s*(\_s*e\_s*X\_s*p\_s*a\_s*n\_s*s\_s*i\_s*o\_s*n\_s* \_s*P\_s*a\_s*s\_s*s\_s*i\_s*n\_s*g\_s* \_s*S\_s*t\_s*y\_s*l\_s*e\_s*)\|S\_s*��\_s*��\_s*��\|l\_s*i\_s*b\|L\_s*\%(i\_s*s\_s*p\|��\_s*��\_s*��\)\|e\_s*n\_s*o\_s*n\)\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\)\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*\%(��\_s*\%(��\|��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*\%(��\_s*��\|��\_s*��\)\)\|E\_s*x\_s*t\_s*e\_s*n\_s*s\_s*i\_s*b\_s*l\_s*e\_s* \_s*M\_s*a\_s*r\_s*k\_s*u\_s*p\_s* \_s*L\_s*a\_s*n\_s*g\_s*u\_s*a\_s*g\_s*e\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\)\|��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\)\)', - \ 'y' : '\%([�ֲ��غ�������˩շ��޷����ڡ����ڴ�������������ֻۻ�����������������������þ��ӱٵ���㷽���İ��������˧��ȵ��������������׫խ��ۡ�����������������ƫ��ߡ��������������������������ٹ�������������������������������������������������������βž�������ա��Ю�����ô����������ڵ;�Ӹ�����������ǽͽDz����¿�������ͻͷ���Ϳ즤������μ��д�İ�������˭������Ƿ����ְ����������쪾�ற���ᾲ��������͸���۷�����Ͳإ��������ͤͨ����ͱͻ͹ͯͰʹ��ͼͩͪ��ͧͺͫͭ����������͡��ͷ�������ͳ������͢����·��������ͮ������竤掲��������׶׵���������϶��������������������̴��ߺ�̤����ӷ��������Ų������ݳ�����Ͷư�ݡ����������ȵ������ܦ��ɵ�述����������ڿ��Ĺ�Ǣ��������̿��쵸Ÿವ������ż���������ϫ��������ĺ�����׻��������к��������ط���Ү������ͦ�����ܡ�����Ǯʰ���������ᰱ�����˻�ް�������������Ϯ�ס����ӱ��������©��ĩ����寱��۱İ��Ľ�˻��С������ݫ�����׸�������ԩ۵�����������������ʰ�ݻ������ְ�յ��׮����I���������������ΰ�𨱡�������ֱ��������������۩���۰��д��ذ��Ű�1��������ڴ�Ū��٥�������������ަ�̰��թ�Ⱥص����°����ذѰϱ�ԣ��������������и�����Ȱ�����ǡѦ��״��������ͣ��޻��������׳�԰ʳ豶���������������İΰڸް������������Ͱ��ֹ԰�������������������а�Ψ��ͬ������������հݰ��ڰ۵���������ԧ������İ��ø��������Ҳ��ݰ���������ͻ���Ϧ��������S�����ϵ��½�������������ͥ����²����۴����ݬ���������������ٯ��������������̼�ֳ쮼��칽��̡ҡԡաӻ�����šץ����̰���ǫ��͵���ٰ׵��ݹ�������Ȭ���ë��׽�����������Ǹ�������ܿ���������ͼ�������������뻦���輭�����֧��ߡ�������ק��������觫��Y�������ۦ�y]\|��\_s*[�֎Վ���]\|��\_s*[��楤��]\|��\_s*[��椤��]\|��\_s*��\_s*��\|ݿ\_s*��\_s*��\|��\_s*��\|��\_s*Ƹ\|��\_s*��\|��\_s*��\|4\_s*\%([�������]\|��\_s*��\|��\_s*��\)\|¾\_s*��\|��\_s*��\|δ\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[�Ҹ�]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[����]\|Ī\_s*[�Ұ�]\|��\_s*��\|��\_s*��\|8\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|ɴ\_s*��\|L\_s*i\_s*l\_s*i\_s*\%(o\_s*p\_s*s\_s*i\_s*d\_s*a\|a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\)\|��\_s*\%(ͺ\|��\_s*��\)\|Ĺ\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|E\_s*\%(u\|��\_s*��\_s*��\)\|��\_s*��\|J\_s*u\_s*\%(l\_s*i\_s*a\_s*n\_s*i\_s*a\_s*l\_s*e\_s*s\|n\_s*c\_s*a\_s*l\_s*e\_s*s\)\|��\_s*ë\|��\_s*��\|ɨ\_s*��\|��\_s*ϻ\_s*��\|��\_s*��\|��\_s*±\|��\_s*��\_s*��\|��\_s*ȷ\|β\_s*��\|N\_s*a\_s*j\_s*a\_s*d\_s*a\_s*l\_s*e\_s*s\|��\_s*ɨ\|��\_s*��\|��\_s*��\_s*ƣ\|5\_s*[����]\|��\_s*[����]\|ب\_s*٦\|��\_s*��\|Ĭ\_s*��\|��\_s*��\|��\_s*Ӽ\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|ʸ\_s*��\|Ϻ\_s*[����]\|��\_s*[����]\|�\_s*��\|U\_s*\%(��\|��\_s*��\_s*��\|r\_s*t\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\)\|�\_s*[�Ļ�]\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\)\|��\_s*��\|��\_s*[����ﷻ]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*¹\_s*��\|��\_s*��\_s*��\|G\_s*\%(l\_s*u\_s*m\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\|r\_s*a\_s*m\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\|i\_s*n\_s*k\_s*g\_s*o\_s*p\_s*s\_s*i\_s*d\_s*a\)\|��\_s*��\|̵\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*ή\|��\_s*[�����]\|��\_s*[����]\|��\_s*[�ڻ�]\|��\_s*ɽ\|��\_s*��\_s*[��ú]\|��\_s*ӧ\|��\_s*[����]\|��\_s*\%([������]\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*[�ʱ��]\|D\_s*i\_s*a\_s*p\_s*e\_s*n\_s*s\_s*i\_s*a\_s*l\_s*e\_s*s\|��\_s*[��ǡ]\|��\_s*��\|��\_s*ζ\_s*��\|ξ\_s*��\|ή\_s*ŭ\_s*��\|��\_s*��\|��\_s*[����]\|R\_s*a\_s*f\_s*f\_s*l\_s*e\_s*s\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|��\_s*��\|��\_s*��\|��\_s*��\|ŷ\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*º\|��\_s*��\|T\_s*\%(h\_s*e\_s*l\_s*i\_s*g\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\|r\_s*o\_s*c\_s*h\_s*o\_s*d\_s*e\_s*n\_s*d\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\)\|M\_s*y\_s*r\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\|��\_s*��\_s*��\|��\_s*¹\|A\_s*r\_s*a\_s*c\_s*a\_s*l\_s*e\_s*s\|P\_s*\%(o\_s*a\_s*l\_s*e\_s*s\|l\_s*u\_s*m\_s*b\_s*a\_s*g\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\|r\_s*\%(o\_s*t\_s*e\_s*a\_s*l\_s*e\_s*s\|i\_s*n\_s*c\_s*i\_s*p\_s*e\_s*s\)\|a\_s*l\_s*m\_s*a\_s*l\_s*e\_s*s\)\|��\_s*��\|��\_s*[����]\|��\_s*\%([�̼�]\|��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\)\|��\_s*��\)', - \ 'z' : '\%([�������»¸·­«��֤����±³��²¯°��������������������¡£����¤ź����ȿ������������������������������������������������������������������դ���������������������ظ�������ƦפԦ����Ƭ�ݿ߹��޿���������������ֺ�����ɼ������ټ����Ķ�����Ժ��ټ����������������ľ�������㿬̭������ߩ������������ʿ�顿�����ױ��ӿ�������пԿҿؿѿտ��ǽ�������������ޮ�տ��������ٳа������屽���������������������л������������ġп����Ы����������������������ǡ��̼����ž�����������������վ��������ڷ��������������������Ǩ����������è�����ط���������۲�ٽɽμ�����ѽ�Ȼ������Ž���������ޭ�߱��������覽�۽����ڽ޽����޼�쳼��������������ߨ��������������к��ߧ������尽Ľ½��������ý������ƽ�֮���������������꼥��Ώ����߼������������������ֵ�����������������������ᪿλ����������̻�Яϩ�˱�ѻ���ż���б��褻������Τ�����߷�º������������ֿ������������ܪ�Ȼ�����������������������̻���쩻������ϻ»�߻�����ƺ����ú޺���ߺ�к��������ú�¢����µ�������������좭�����إ����������������٦Ƨ���z]\|��\_s*\%(��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\)\|��\_s*[����������]\|��\_s*[����������]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[�����]\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|ȯ\_s*��\|��\_s*��\|�\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*ˡ\|��\_s*��\|Ĵ\_s*��\|��\_s*[�᷺]\|�\_s*��\|��\_s*��\|F\_s*i\_s*g\_s*u\_s*r\_s*e\|��\_s*��\|G\_s*\%(��\_s*��\|��\_s*��\)\|D\_s*y\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|2\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|J\_s*\%(I\_s*S\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|R\_s*��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\_s*ʺ\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*�\|k\_s*\$\_s*_\_s*{\_s*e\_s*f\_s*f\_s*}\_s*\$\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*ī\|��\_s*��\|Ƚ\_s*��\|ϳ\_s*��\|��\_s*��\|Ĺ\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*Τ\|��\_s*[����ϴ������崽]\|C\_s*a\_s*b\_s*o\_s*m\_s*b\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*[�ʷ�]\|��\_s*��\|��\_s*��\|��\_s*��\)\|��\_s*��\|��\_s*��\|ɳ\_s*��\|1\_s*\%(0\|1\_s*��\|8\_s*��\|2\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\)\|Z\_s*\%([r��]\|i\_s*\%(r\_s*c\_s*o\_s*n\_s*i\_s*u\_s*m\|n\_s*c\)\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|I\_s*P\_s*��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*\%(��\|��\_s*\%(��\_s*��\|��\_s*��\)\)\)\|��\_s*\%([����]\|��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\_s*\%(��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\)\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\)\)\)', - \ 'A' : '\%([���������Գ���ȯϾ�տ��ƭ�����޾���ӡ��Ť�������Ƭѫ������ͷ�ʷ��İ�Ϳ���������������������ø�������ܶ�������̵����ܵ���������驰��н�������ƪ��鷹ѻ�����ˢ��ǽ�����������ܽ����֦���½�Φ����ؽ����Ǯ�����Ȳ���䰵�Ǵ�������ռ��ݯ�м�������Թ���������ڹ����������ײ�Ϫ��ɽ��������������¹�ͽЮ���������ɷ������庾Ӻ̴������ɵ�����ఽ���������������;������ŷ�������°�����ֵ��ϰ�̣������Ԫƴ�����갮����������������������������ů��ۭ��μ������氰�ᄑϯ�����۸�ޫ��������ۦۥ���˾Ͼ������������������Լݷ�����ʸۣ��齶��ϰ����갥���欷�����԰ǰ��ްưð���Ȱ�����ī�ﰦ��������ð�������­���ҹ������Ӽ밫�Ƽ�������ǹ��������˽�����������������˰����ķ��°���մ���尤�Ը��ʻ�����������ᰢͭ�������˴������±޽�����ک�����г���󰸶�˰ب�Ĥ��������&�ʢ����ܶ��϶���΢����͢����޸姸���ơ��������ǡ�������򦡥��ѧ�A]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|Z\_s*\%(n\|i\_s*n\_s*c\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*ŷ\_s*��\|��\_s*ŵ\|��\_s*��\|��\_s*��\|��\_s*Ʀ\|��\_s*��\|��\_s*��\|��\_s*̾\|�\_s*̾\|��\_s*��\|��\_s*��\|��\_s*[��Ļ]\|��\_s*��\|��\_s*��\|��\_s*��\|L\_s*a\_s*r\_s*d\_s*i\_s*z\_s*a\_s*b\_s*a\_s*l\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*��\|��\_s*\%(��\|¹\_s*��\)\|��\_s*\%(��\|��\_s*��\_s*��\_s*ʪ\_s*��\)\|��\_s*��\_s*��\|H\_s*a\_s*l\_s*o\_s*r\_s*a\_s*g\_s*a\_s*l\_s*e\_s*s\|ޱ\_s*��\|��\_s*��\|Ʀ\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*¿\|��\_s*��\|��\_s*��\|a\_s*\%(t\_s*t\_s*o\|c\_s*c\_s*e\_s*n\_s*t\)\|��\_s*[������Ǭ]\|��\_s*��\|��\_s*[��ɧ]\|��\_s*��\|��\_s*��\|��\_s*��\|Ҹ\_s*��\|��\_s*\%([����]\|��\_s*��\|��\_s*��\)\|��\_s*[�ˡ�]\|E\_s*\%(s\|i\_s*n\_s*s\_s*t\_s*e\_s*i\_s*n\_s*i\_s*u\_s*m\)\|I\_s*\%(r\_s*i\_s*d\_s*a\_s*l\_s*e\_s*s\|P\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\)\|D\_s*��\_s*��\_s*��\|C\_s*\%(��\_s*��\|��\_s*��\_s*��\)\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\)\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*[ɿ�ͽ�������]\|R\_s*u\_s*b\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[������]\|M\_s*a\_s*l\_s*v\_s*a\_s*l\_s*e\_s*s\|��\_s*��\_s*��\_s*��\_s*A\|��\_s*��\| \_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|G\_s*o\_s*l\_s*d\|��\_s*ư\_s*\%(��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|°\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|S\_s*\%(b\|i\_s*l\_s*v\_s*e\_s*r\)\|��\_s*��\_s*��\_s*ǽ\|��\_s*��\_s*��\_s*ǽ\|��\_s*ˡ\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*\%([����]\|��\_s*\%(��\_s*��\|��\_s*��\)\)\)\|��\_s*\%([�������ȥ��]\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\)\)\|��\_s*��\_s*��\|��\_s*\%([����]\|��\_s*��\_s*��\)\|��\_s*��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\)\)\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*\%(��\_s*��\_s*��\|��\_s*ǽ\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\|��\_s*��\)\|��\_s*Ͽ\|��\_s*��\|��\_s*\%([�˥ᥢ����]\|��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\)\)', - \ 'B' : '\%([���߹�������������������������������������ڽھ������������������˲������������ѳ����������̶���˦��꼰����汬�������˳ر˸��˹��˻˶����˺����������˴��˾����˵˿���������������������籸�����촳Ħ����˷ը����˫���������������ѹ���������ʽٷ��ҡ��������޺�����������������������˼������ūʥ��޽޼�����������޿������������������ʪ�ɲ�ʹʸ��̵�����������ʬ�������������������ק�������£����������͹�������ɵɤ�����ޣ�����ֱ�������ؾ��ݧ���������������ɴ�����졪�¡�����ɼǭ��֢���ʿ������������������ջ��������̤��������������������׹߾������������Ȣ�����®�Ӷ�˪����ȭ��ƯȫȪʵ��ɡüΥ��V̥����ȵ��ٶȶǢ��ʢ�Ļ�ʧ㱸�����Ȥ���������������˽�������������������ʱ��������������೭����������������ȹ���������Ȩؤ��Ƚ���������������ȼ㩺������������������Ȳ������ȴȳ�����������粽�ڱ��������������ĥŽ�С�ʩ�����ݲ���ߡá¡ݡ������ܥСϡΡСѣ¥֥ӧ����Ҧ¥�B]\|��\_s*\%(��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\)\|��\_s*[�ܥ٥֥ӥ�]\|��\_s*[�ܤ٤֤Ӥ�]\|��\_s*��\|��\_s*��\|�\_s*��\|P\_s*a\_s*e\_s*o\_s*n\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|�\_s*��\|��\_s*��\|��\_s*Ǥ\|��\_s*��\|��\_s*[����]\|��\_s*��\_s*ݰ\|F\_s*a\_s*g\_s*a\_s*l\_s*e\_s*s\|��\_s*��\|�\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|˭\_s*[����]\|��\_s*��\|ŷ\_s*�\_s*�\|��\_s*[��϶]\|b\_s*i\_s*o\_s*t\_s*o\_s*p\_s*e\|׽\_s*˥\|��\_s*[̡˥]\|��\_s*Ҵ\|��\_s*Ƭ\_s*�\|��\_s*��\|��\_s*��\|S\_s*a\_s*n\_s*t\_s*a\_s*l\_s*a\_s*l\_s*e\_s*s\|��\_s*��\|ʼ\_s*[��ˡ]\|ɽ\_s*��\|��\_s*[�Ļ�]\|��\_s*��\|ȯ\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|R\_s*o\_s*s\_s*a\_s*l\_s*e\_s*s\|�\_s*�\|��\_s*��\|��\_s*\%([�ӳ�ϫ]\|��\_s*��\_s*��\)\|�\_s*��\|�\_s*��\|��\_s*��\|A\_s*n\_s*n\_s*o\_s*n\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*��\|��\_s*[����]\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*[����]\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\)', - \ 'C' : '\%([���²����ݰ���ť������������ޢ������ͷ°�������������Я⸿�Ƚ�Ҹ����Ǽ����ۻ�������ô�㪸��ۺ��������礷���򼷻쮱����������Ѻ���˹����Ϲ���ٹ������ʺ��ú��������̶�������������������縥���պ������������ۦ�Ĺ����ȹ���������ָ����벹�Һ����٬̫�������ޫ�޳��������䲬��������ު־�����������������������������������������ϹϺ�������٫��Ⱥ������ӫ����ִ�����������ӳ������������������Ӭ�����ص��������޸���ܺս�幡������������͹�䢹�̨����ɹ������ж���๫�ʹ����Ĺ�á�������񹸹��ۥ��������⫹���ֹѸ����������۹չ������̹��˹��عֹ���骹ݹҹ������Թιӹ�ĸ�������ë����������ӭ�͹����޺��������ݻ�����ջ��̼�Ե���ʴ����������Ը���������������������Ƹ۸���ž�������Ķ���ٸ�Ĩ��������������̱۸ɸָ���ܵ������ʽ�����ѻ�������������ᡵ�ǻ��۹��������ɯ����˻���í�ܦ岱���ӵ������ʡ�������޶��٣�໦��������������������������������Ҫ����ͼ���������������������������������������������ٰ���������������֣ڱ��������·����޷�����߫���������������ѩ���Ѣ�����������������������ߥ����������������ѡ����������������������٥Ѩ����������ڣ������������������������������������ݺ���������ګ���������̻�������������������������خ����ع���������������ɹ�������������������Ԥ�����ܯݬݮ��ܱܮ�ݫ������ʵ��ߪ�������������������������������ʤ������վ�߷�������ţ賷�Φۻ����Ү���������·��ط����״����򷬷���������ڶ�������˿��ֲ��̽�����ǰ̰�鶰��������פ��޺���������������ޱ�����Ϳ����������߸������������Ѧ�����庿����ܸ���ȷ������������ˮԢ������ʭ�Цչ����������ġ������ҵ׹�����������������޷��˹��ȸ�����Ң������ڹ��������׶�������ҿ�ȴ���ȷ����ͤ���Ա�������飼�������������ý�Ƴ������ħ����󻼲�������١��������Ĵ������ɸ¢ֺλ����������ߨߧ�¼Ȼ������ο�Ǧ�������ǧ��к�����尷樵Ԧ����������������ܰǢ���������������ܾ����������ؼ������������ż�Ĭ߼���ȼ����𮼻ꩼ�������ɨ���������ũ���������ż�������ʻ��������������������͸忬�ļ������������������ҼԺ������ա�����ĵ��������հ���ռ�������ޯ�κ���բ��ٱ�ؼ��ڷ�����������������������ּ�忼��м�ܼ�����Ѽ׼ͼм˼ּ�Ұ����ʵ�������ż�ެ������ոշ��ܤܣƵ��������������ý�������ʽȽͽɽܼ̿�����������꫽н���ܶ������������������ꪽ��������Ӵ֭�������ϼ����������������������ܽ�����µ�½�����������������������������������Ѯضآ߽�����������ؽ�޴�׽ٽ���䣽ֽ����߿���������������������������Ӣ��������������֪��ǿ������������п¿��������Ŀ˿��ӿ��¿��ǿ���ä���⿹���ƿ����������ʿ������ƿ�謹����������е��������������������������ؽ��������������޵�����������ַ����Ҿ�����������ľ���䬼������������ֹ᳻��������ļ�������������װ�������գ����ң�ط�����������������������Ӿԡ����������Ľ������ؾ����������������Ѿ�����ء�Ͼ��������޾�������������۾¾���騾��ľ㾩�������ܥ�����񾬽��������������Ͼɾ����˾�������ƴ�Ҿ;����о��ƾȾ��Ͼܾþھ˾�����������������������ԧ֤�ѿ�����°�������������濣���鿨�������������л����ػ����㭻�׶�������������������Ӷ��Ǽ�����ӡ���ܻ�������������������������ҿ��Ӻ���ǡ����ɦ�������������֬����寿����¶���ǻ���������������������л�������ף�㬰�Ԯ��Ƿ�Ȼ�ֻ����ѻ���ʻ�̼���������������������̦��Ż���������������ڻ�����ڼ���褴��������λ�Ƥ����������ڹ��ɳ�����߳��˹��ȷ�̢���ư��񢿱Ʊ����ʡ�ܢ��������������ᱵ������������𦪦ʹ�ǡˡҡԡơȡɡѡСա������ج�ɳ�����϶��������������Ѿʸܵ�ȿ����������ǣ�����ʶ�ͽ�����г����Ͼݵع�˵�����ۿ��ٸ��Ƿ����շ�����ͩ������Ϋ��������������������K�Ĵ�������ȱ�������١Ҥ���ҳ��ݢ��ٿ��Ȧ����۫滳�������ܾ��龹�ô���������������������������Ž��޳���������ڳ³����������������������귰������¦���������ǰ�����㡴����姢�������������������������റ����������ҳ��������ݲ��������ҳ����˿����������ڸ����ি�ԣ�����ϸ³ø�����֡١סʷ�����ŭƬ������ŨŬ�Ⱦ�Ť�״׳�����ᰥ��ɬ������Ŵ����ܷ�������̳������봢�Խ�����ڲ��������Ӿ��������������׳�������ڨƿ����ӽ�dzӡϡۡڡ̡͡γ��ȳijԳճʳ��߱��׳���ڼ����ȵҳֳѳ�����Т������Ӽ����뻳�����һר������ݥ�����������������ų�����Ъ�����������Ļ�����������ӳ���ܴ��������߳����ٳ����β����𳭳������dz��������򳬲������������Ԭ��٪�Хٺ������������ù���������٢��Ӳ�����ߵ������۸������������������Ұ���������楼������������������Ѵ���޾�˸�˧�����ӳ�������ޱ�ڿ����ͻ�ô������ÿ�����������ȡ�����ȴ���䯴�������԰�ݴ����۴���ڴ��������Դ�ա�����̴�����δ��˴���ע������Ӵ������Ĵִٴ��״�ӿ���Ŵ��ɴ����ش��ϴ������Ѵ��ش������Գҵ��ȴճƶ�������������Dz����μ����ŲͲ�ӻ�����۷紣�Ҳԥ�Ф�����������Ҳһ��ݲݲִ�������������������ּ���������������ȼڲ�桶���˲Űײ�����ӧ��������ҷ����ܴ���������ѫ�β������βϲѼ����н��������ӥ��������ѷ��������ϲӲ����ɲշ��������߲��������Ʋ��²�������Ⱦ���������Ƹϲˤ����ı��Ķ��Ƣ����۲ø�ҧ��姨�ৣ�����٧ا��������ӧ���ݧ�����᧷���������������짢�����ۧ秮�ܧ��ԧէާ觯���קѧڧ�֧䧡�����𧦧����ߧ맥�������ߨ���������Ƽ���֦��ҧ駹�����ݡ��������׶������������ܥ����������������������񥷡��C]\|��\_s*[����������]\|��\_s*[����������]\|��\_s*[�Ҥ���������]\|��\_s*��\|��\_s*��\_s*Ⱦ\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*ϧ\|��\_s*��\|��\_s*��\|�\_s*��\|f\_s*o\_s*o\_s*t\_s* \_s*a\_s*n\_s*d\_s* \_s*m\_s*o\_s*u\_s*s\_s*e\_s* \_s*d\_s*i\_s*s\_s*e\_s*a\_s*s\_s*e\|��\_s*Ѥ\|��\_s*��\|A\_s*\%(r\_s*c\_s*h\_s*i\_s*c\_s*h\_s*l\_s*a\_s*m\_s*y\_s*d\_s*e\_s*a\_s*e\|p\_s*i\_s*a\_s*l\_s*e\_s*s\)\|U\_s*m\_s*b\_s*e\_s*l\_s*l\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\|��\_s*��\|��\_s*��\|��\_s*ˡ\|��\_s*[�ʺ�]\|��\_s*[��϶]\|ѱ\_s*��\|��\_s*��\|��\_s*[̱����]\|��\_s*��\|�\_s*��\|ɴ\_s*[߻��]\|��\_s*��\|9\_s*[����]\|�\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*��\|ŵ\_s*��\_s*��\|õ\_s*��\|��\_s*¢\_s*��\|H\_s*e\_s*l\_s*l\_s*e\_s*b\_s*o\_s*r\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|��\_s*��\|J\_s*u\_s*g\_s*l\_s*a\_s*n\_s*d\_s*a\_s*l\_s*e\_s*s\|ϻ\_s*��\|��\_s*��\|��\_s*��\|R\_s*h\_s*a\_s*m\_s*n\_s*a\_s*l\_s*e\_s*s\|Ϸ\_s*��\|˾\_s*Ĭ\|��\_s*[������]\|��\_s*Ϣ\|��\_s*[��Ǧ]\|��\_s*��\|L\_s*a\_s*\%(u\_s*r\_s*\%(a\_s*c\_s*e\_s*a\_s*e\|o\_s*i\_s*d\_s*e\_s*a\_s*e\)\|b\_s*i\_s*a\_s*t\_s*a\_s*e\|m\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\)\|��\_s*��\_s*��\|ʾ\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|ت\_s*ͺ\|��\_s*��\|��\_s*��\|I\_s*\%(s\_s*o\_s*p\_s*y\_s*r\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|l\_s*l\_s*i\_s*c\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\)\|W\_s*i\_s*n\_s*t\_s*e\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*ʸ\|��\_s*[����]\|�\_s*\%([��α���ֲ����˼���]\|��\_s*��\|Ǽ\_s*��\|��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\)\|7\_s*��\|��\_s*��\|ʸ\_s*��\|4\_s*��\|��\_s*[ʬ��]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[�̰�]\|��\_s*��\|��\_s*\%(̣\|��\_s*��\)\|��\_s*[����]\|͢\_s*[����]\|´\_s*��\|B\_s*r\|Ȼ\_s*[ϯϺ]\|�\_s*[���]\|��\_s*[���]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|M\_s*\%(e\_s*t\_s*a\_s*c\_s*h\_s*l\_s*a\_s*m\_s*y\_s*d\_s*e\_s*a\_s*e\|u\_s*s\_s*a\_s*l\_s*e\_s*s\)\|Z\_s*i\_s*n\_s*g\_s*i\_s*b\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|S\_s*\%([eg]\|p\_s*e\_s*r\_s*m\_s*a\_s*t\_s*o\_s*p\_s*h\_s*y\_s*t\_s*a\|c\_s*i\_s*t\_s*a\_s*m\_s*i\_s*n\_s*e\_s*a\_s*e\)\|³\_s*\%(��\_s*��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*�\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\|��\_s*ƻ\)\|��\_s*��\|Υ\_s*��\_s*Υ\_s*��\|��\_s*��\|��\_s*[����]\|��\_s*��\|��\_s*Ƭ\|��\_s*\%(��\|��\_s*��\)\|Ĺ\_s*[�]\|��\_s*��\|ŷ\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\|O\_s*x\_s*a\_s*l\_s*i\_s*d\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*[����]\|�\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*[����]\|̱\_s*��\|��\_s*��\|E\_s*\%(b\_s*e\_s*n\_s*a\_s*l\_s*e\_s*s\|l\_s*a\_s*n\_s*a\_s*l\_s*e\_s*s\)\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|P\_s*\%(i\_s*p\_s*e\_s*r\_s*a\_s*\%(l\_s*e\_s*s\|c\_s*e\_s*a\_s*e\)\|t\_s*e\_s*r\_s*i\_s*d\_s*o\_s*s\_s*p\_s*e\_s*r\_s*m\_s*\%(a\_s*l\_s*e\_s*s\|i\_s*d\_s*a\_s*e\)\|o\_s*\%(t\_s*a\_s*s\_s*s\_s*i\_s*u\_s*m\|d\_s*o\_s*s\_s*t\_s*e\_s*m\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\)\)\|��\_s*��\|Ϣ\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\)\|�\_s*�\|�\_s*�\|��\_s*\%(��\|Ϥ\_s*��\)\|��\_s*��\|��\_s*[����]\|��\_s*\%([����]\|��\_s*��\|��\_s*��\_s*Ω\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*[����]\|(\_s*��\_s*)\|��\_s*��\_s*��\|��\_s*ʼ\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\|�\_s*��\|��\_s*��\|��\_s*��\|ݣ\_s*��\|�\_s*��\|T\_s*\%(h\_s*a\_s*l\_s*i\_s*c\_s*t\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|u\_s*b\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\)\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*ƣ\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|ʬ\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\|c\_s*\%(e\_s*n\_s*t\_s*i\|r\_s*e\_s*s\_s*c\)\|��\_s*[�����׼꾽]\|ʣ\_s*��\_s*̿\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*\%([���]\|��\_s*\%(��\|��\_s*��\)\)\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*\%(��\|��\_s*��\_s*��\_s*\%(��\_s*��\|��\_s*��\)\)\|��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\)\|��\_s*\%(��\_s*\%(��\_s*��\|��\_s*��\_s*\%(��\_s*��\|��\_s*��\_s*��\)\)\|��\_s*��\)\)\)\|��\_s*��\_s*��\_s*��\|��\_s*�\|��\_s*\%([���]\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*[���]\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\)\|��\_s*\%([�����֥ץ���]\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\)\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\)\)\|��\_s*\%(��\_s*��\|��\_s*��\)\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*\%([������]\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\)\)\|��\_s*\%(��\|��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*\%([�ɥѥ��֥��]\|��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*\%([�����]\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\)\)\|��\_s*��\|��\_s*\%(��\_s*[����]\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\)\)\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\)\|��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*\%([�ĥȥ���]\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\)\)\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*\%(��\|��\_s*��\)\)\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*[���]\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*\%([������]\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\)\|��\_s*��\)\|��\_s*\%(��\|��\_s*��\|��\_s*��\_s*��\)\)\|��\_s*��\|��\_s*\%([�����ޥ�]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*\%([�ץ�]\|��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*\%([�եȥץ���]\|��\_s*��\|��\_s*��\)\|��\_s*\%([������������]\|��\_s*\%(��\|��\_s*��\)\|��\_s*\%(��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\)\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*\%([�ȥ���]\|��\_s*��\_s*��\)\|��\_s*\%([����]\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*��\|��\_s*��\)\)\|��\_s*\%([���եɥ��󥳥ꥦ]\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%([����]\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\)\)\|��\_s*\%(��\_s*[����]\|��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*\%([�����ȥॸ]\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*\%([����]\|��\_s*��\)\)\|��\_s*��\_s*��\)\|��\_s*\%([��]\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*��\)\|��\_s*��\)\)\|��\_s*ɸ\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\)\|��\_s*³\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\)\)\|ú\_s*��\)', - \ 'D' : '\%([�������ñ��ӹ������ɾ�������ǯ����Ļ������Ч���������γ����������������ѪƯƺ���ߡ�����ѯƫ�������ƣ�ޡ���Ʒƴ�΢�ƼƵ��Ƴ��Ƹ��Ʋ��ƶưƹ��Ʊƻ��׸�����������۲�αͻϿ�������ظͻ��ڤɻ�����������ǩť��Ů����Ҵ��ޡ����ܬ���ѣ���žȤǥ���ɶ��ʹ˶���������¤��Դ������͸�������������ŵͿ�����Ϣ�ť�������ϼ����¼�êí������ǻ������������ïî���ն��Ե庲��ë�۴��������ݹ�������է��åæǶ�������������ʿ�����ϡ�����������������������ö��׼������������ԥ������������������ٽ��ձ����������ټ����Ωѵ����ί��۴�����̽п������Ѽ߱���ͤ�ľ����Ц������\.���ġ�ȡɢ���������ã����ȣĥɡ�����������Ǧ��ħբ�D]\|��\_s*\%(��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\)\|��\_s*[�ɥǥť¥�]\|��\_s*[�ɤǤŤ¤�]\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|S\_s*a\_s*u\_s*r\_s*u\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|C\_s*\%(u\|o\_s*p\_s*p\_s*e\_s*r\)\|��\_s*ŷ\_s*��\|Ʀ\_s*��\|ǡ\_s*��\|��\_s*��\|��\_s*��\|Ǵ\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[����]\|��\_s*��\|��\_s*��\|Ƭ\_s*[���]\|��\_s*��\|��\_s*��\|��\_s*��\|Ĵ\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*ã\|��\_s*��\|��\_s*��\|��\_s*��\_s*ã\_s*¿\|��\_s*\%([��˸�]\|ʿ\_s*��\|��\_s*ŷ\_s*��\|��\_s*\%(��\|��\_s*��\)\)\|ǵ\_s*[����]\|��\_s*��\|��\_s*��\|��\_s*\%(��\_s*ʪ\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|ʸ\_s*��\|��\_s*��\_s*��\|ȯ\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*ά\|��\_s*��\_s*��\|d\_s*\%(b\_s*m\_s*s\|e\_s*c\_s*\%([ia]\|r\_s*e\_s*s\)\|o\_s*u\_s*b\_s*l\_s*e\_s* \_s*i\_s*n\_s*c\_s*o\_s*m\_s*e\_s*,\_s* \_s*n\_s*o\_s* \_s*k\_s*i\_s*d\_s*s\|i\_s*m\)\|��\_s*��\)', - \ 'E' : '\%([��������ٱ稰��Զ�����������������콸ս���֦�����������廷�ٱܱ������������������ְױ����ر���Ԩ�ų���ɲ��С�������������ݩ��޽��޼�������������������ާ�����Ǣޱ���޻����ʥ������Ԥ�������ϱ������������ͱ��ն�����߱��������۪�б����������հ���������ܳ������ϱ����Ʊñ����ȱԱű�ƱӱDZɱϱı��̱������������޹�����з�ت�Ͳ���������±ݲ�þв��������������������������������΢ᢺ�����⧮�ާ����Ѣм������ǣŧ㧳�ݧ������ŧ泌E]\|A\_s*\%([��Ƚ����]\|V\_s*\%(��\_s*��\|��\_s*ͥ\)\|B\_s*\%(��\|C\_s*��\)\)\|��\_s*\%([��Ƚ����]\|��\_s*\%(��\_s*��\|��\_s*ͥ\)\|��\_s*��\)\|��\_s*\%(��\|��\_s*��\)\|ɰ\_s*��\_s*��\|M\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*˹\_s*��\|��\_s*ʪ\|��\_s*��\|˦\_s*��\|��\_s*��\_s*��\|Լ\_s*��\|��\_s*��\|��\_s*ϩ\|��\_s*��\|��\_s*[�Ի�]\|��\_s*ƺ\|��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|L\_s*\%(��\_s*��\_s*��\|L\_s*\%(��\_s*��\_s*��\|��\_s*��\)\)\|��\_s*\%([���ɲ]\|��\_s*��\)\|N\_s*��\| \_s*n\_s* \_s*��\_s*��\|��\_s*\%([�Ķ˶�]\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%([�Ȼ��ʶ�]\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\)\|S\_s*\%([����]\|��\_s*��\_s*��\|N\_s*��\|F\_s*��\_s*��\)\|��\_s*[¿��]\|X\_s*\%([����]\|O\_s*��\|��\_s*��\_s*��\)\|��\_s*\%([������]\|��\_s*��\_s*��\)\|��\_s*ƻ\|�\_s*Ʀ\|C\_s*\%(l\|h\_s*l\_s*o\_s*r\_s*i\_s*n\_s*e\)\|��\_s*\%(Ϸ\|�\_s*��\)\|��\_s*��\_s*��\_s*®\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\)\|ݿ\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\_s*\%(��\_s*��\_s*��\|��\_s*��\)\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\)\)\|��\_s*��\_s*��\_s*��\|��\_s*��\)\)\|��\_s*��\|��\_s*Ĵ\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*\%(��\_s*��\|��\_s*��\)\|ȯ\_s*Ÿ\|ɾ\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|ɴ\_s*��\_s*��\_s*ŵ\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*\%(��\_s*��\|��\_s*��\)\)\|��\_s*��\|��\_s*ĥ\|��\_s*��\|��\_s*ò\_s*��\|��\_s*\%([��]\|��\_s*��\|��\_s*\%([�ޥ���]\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\)\)\|��\_s*Ω\|e\_s*\%(x\_s*a\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*\%([�֥����顼]\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*[�ȥ�]\|��\_s*\%(��\_s*��\|��\_s*��\_s*[����]\)\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*\%(��\_s*[�ȥ�]\|��\_s*��\)\|��\_s*��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\)\|��\_s*��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*[�䥢]\|��\_s*\%(��\_s*\%(��\|��\_s*��\|��\_s*��\)\|��\_s*\%(��\|��\_s*��\|��\_s*��\)\|��\_s*��\)\)\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\)\)', - \ 'F' : '\%([��ϼ�в�����ɮ������������˼��ݵ����ϰ�˴ϴʻ�ÿ����ū�����������߹����������ʷʵ��ʸ��ʯʭʶʲʱʬʴ�����ڸ��������������������޽ʥ޼����⵺�б����ƣ߬�����������������ѵ������ο���ʳ�������������ʰ��ز��ʧʨ��������ؿ����礢�����ı������ǹ���޴�ʤʢ������������ʣʡ��������������Դ������������������������������ҿ������Ϸ����������������������Ƨ����������н������Ҷ������꿣�ڿ�����������ʮ�߹�������ֿ�ʫ�������������������������ݤ�Ŵ��Ϣ��٢޶���ʩ�����Ƣ�ʦ�⧶���է��F]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*ǹ\|��\_s*��\|��\_s*��\|E\_s*u\_s*p\_s*t\_s*e\_s*l\_s*e\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*\%(Ǥ\|��\_s*[����]\)\|��\_s*��\|Ƭ\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|M\_s*y\_s*r\_s*t\_s*a\_s*l\_s*e\_s*s\|��\_s*[�滳]\|��\_s*��\|B\_s*u\_s*d\_s*d\_s*l\_s*e\_s*j\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*��\|G\_s*e\_s*r\_s*a\_s*n\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|��\_s*[�ͤ���]\|��\_s*��\|2\_s*\%([�ͤ���]\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*Χ\_s*��\|I\_s*r\_s*o\_s*n\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\|��\_s*\%(��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\)\)\)\|��\_s*��\|��\_s*��\|��\_s*ǽ\|��\_s*��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\_s*[����]\)\|��\_s*\%(��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\)\|��\_s*1\_s*��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\|f\_s*\%(e\_s*m\_s*t\_s*o\|o\_s*\%(n\_s*t\_s*-\_s*f\_s*a\_s*m\_s*i\_s*l\_s*y\|r\_s*t\_s*e\)\)\)', - \ 'G' : '\%([���������Ʊ��亲�޺��и����Я������ǡ����¹���ɹ���������Ͽ��������й���ⶳ��������������������������ݶ�������蹡����������贻�������˸������Ӫ伸˸���ظ����5��Ķ�����ۻ��ٸ�ѻ����줴�����֡����������������������ɷ޷߷������ݱ���Ŵ�������ɧ��������ѷ�ʸ����������¸�����������������뻲�²����Ƥ�����������ʵ�ʹ����Ұ�¢��襸��ж�����鹶��ܶ�������溷����������ֶ��������򹰶����㼶������ȶ餰��������ݵ����۶�Է֪���������������̵��������Ƹ�����ߤ�������ѧ�ĶȶǶŹ�����Եյ��������ڵ��۵��õ��췷������Ѧ��»·赼��ĵ���������ۧີ�٦�������������ȱ��ⷸ��⧹ε������ߴ�����¦�̳����Ǹ����񷿷�����Ը����걳��������޽��˳̿�������������Ƭ�������︷�������������̴ݢ��������޴��������ḵ�����������������������س�����̳۳ٳܳڳش�㨳���ЩԶ�䳯���������ֽ�糳ӱ��⭳��������賩����������������������ֶ����������Ѵ��ݲ�ծ�������Ө����̲������´��ϲ�谽�����˲�����쾡��󡤬���Ǵ��楬���֦������Ԧ��������ƦѦ����ɦ��զӦ˦��Ϧͦצئ������Ħ��¦����ЦŦ������ҦȦǦʦ����Φ̦����������Ԧ��ç�G]\|��\_s*\%(��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\)\|��\_s*[����������]\|��\_s*[����������]\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*Ƭ\_s*��\|��\_s*��\|��\_s*��\|P\_s*e\_s*r\_s*s\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*\%([�ֱ�]\|ŷ\_s*��\)\|��\_s*��\_s*��\|��\_s*\%([�Ÿо���]\|��\_s*��\)\|Ʀ\_s*[����]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[��¯]\|��\_s*[���ǹ�]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*[���׹��]\|��\_s*ϡ\|��\_s*��\|��\_s*��\|��\_s*\%([����]\|��\_s*��\)\|��\_s*\%([ˡƻ��]\|��\_s*��\_s*��\|ʹ\_s*��\_s*ˡ\)\|A\_s*g\|S\_s*\%(c\_s*r\_s*o\_s*p\_s*h\_s*u\_s*l\_s*a\_s*r\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\|y\_s*m\_s*p\_s*e\_s*t\_s*a\_s*l\_s*a\_s*e\|i\_s*l\_s*v\_s*e\_s*r\)\|��\_s*��\|��\_s*��\_s*ë\|��\_s*��\|�\_s*��\|��\_s*��\|��\_s*��\|��\_s*̾\|T\_s*y\_s*p\_s*a\_s*l\_s*e\_s*s\|��\_s*[��]\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|g\_s*\%(i\_s*g\_s*a\|h\_s*o\_s*s\_s*t\_s*s\_s*c\_s*r\_s*i\_s*p\_s*t\)\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|Ϣ\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*\%(��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\)\)\)\|��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*\%([��른���Υʥ���]\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\)\)\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*[�˥�]\|��\_s*��\_s*[�˥�]\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*��\_s*��\)\)\|��\_s*\%(��\|��\_s*\%(��\|��\_s*��\|��\_s*��\_s*[�ĥ�]\)\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*\%([���]\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\)\|��\_s*\%([���ե�ޥ�]\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\_s*[�ȥ��]\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\_s*��\)\)\|��\_s*��\|��\_s*��\|��\_s*\%([����]\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*\%(��\|��\_s*[����]\)\|��\_s*��\)\)\)\)', - \ 'H' : '\%([��ά�������мۭϯƶ���������ش���Ǯ����˴��������ꥷֹ����٢��������ڣ��������þ�̷�ȸ�Լ�����������ƾ����������Ե��ұ���ٸ����ޤê����������׺����˲��������˯�������������ˣ˱�������˩��������ˬˢ߰��˥��˨��������ˮ˰˦������˭����ˤ��ڽھ��������Ӯ�������Ʊ�����������������������Ħ������������˫����ԾӬ�����ێ͸�½��Ш���۳ֱ�����׭׬̦������������������������������������������΢���������٨������ղʽ��������������������֢������ʾ��ʻ����������������򰵸͸�؎���ϼ�в������ر�����������˼��ݵ�ɾϰ�ϴʻ���ÿ����ū��������������߹����������ʷʵ��ʸ��ʯʭʶʲʱʬʴ�����ڸ����������������޽ʥ޼�����б����Bƣ߬���������������ѵ������ο���ʳ������������ʰ��زʩFʦʨ���յ�������ؿ���乢���������ǹ���޴�ʤ��������ʣʡ������������Դ��������������������������ҿ�������������������������Ƨ����������н������Ҷ�����꿣�ڿ�����������ʮ�߹�������ֿ�ʫ�����������������Վ���Ϸ����DzDZ������ɢ���ݽ���ɨ�����ڻ�����ײ����ɦ����������������گ�������������ٶ��������������ɳ����ߪ߫����̩���������ҷ�������������Ψ����ɢ�ʺ���ɽ��ź��ƶѽ���������ñ����¾��Ʒ��1������ඡ���ɩ�Ͼ��Ǽ�����ݱɧ�ҹ���������ɴ���ҿ�������ɪ粹����ɲɱ��桶���ڲ������Ÿ��ͨ妳����ѽ�ʹ���ɱ������������繰����͵��ע������ɯɥ��ɭɤ�ʴ���ɫݤ����̤��ɮɬ���ɶ�������ɷ��������ɿɺ��ɻ������ʼɼ��ɾɸʿɽ�������֡�ڡʡآ���羷�������۬�������զ����Ҹ���������������������壸��������������������������У�����ﴳ�����ɹ����������������ɰ̥������������������ݺ���������������㰤Ҏʻ���ȧ�۽ˡ�ȣ�ַ��ү������ꤾ���׼��׹Ȧ���������������������߶������������ھ�¦�����ൡá˵��ȫƯ��Ȫ�������������������IJ�Ը����ʧ����ȷ��������ȩ�������㳾��С�Ȱ��ϸ����ܥ��˧��������ʢ��ͪ�����ڼ�����������Ѷ�����������������Υȹ��������ȸ��ަ��ɡ�ڲ��������������չ������Ȥ��Һ��ý��������ҹ�Ȣȡ��򾾹�ٰ������®Ȼ��������и���������ݢ֯��ڦ��������������Ԧ��¬��ѳĽ�����̷׿޸��������������ȥȮ�������ϡ����ȭ˪�ȱ��ˡȰ����Ȭȯ�����ڴ�����������������ԯ����������أ��צ�����ɣ����������������������Գ����������߯ޢ�����������Ȩ������ź�ܹ������������ڵ������ȼ��������Ƚ�����������������ɺ�����������Ⱦ����ȿȺ�����ǿ�����������Ժ����������ı����������������۱����������Ŷ����ķ��������Ʊ�����ü����ҵ������਻���Գ������������������������ܱ�����ĥŽ��淿��ʤϨ��������������������������������������������ȡ��ա�����ȥҥۥإ�H]\|��\_s*[�Ύ͎̎ˎ�]\|��\_s*[�ۥإեҥ�]\|��\_s*[�ۤؤդҤ�]\|��\_s*��\|��\_s*��\|��\_s*Ļ\|��\_s*��\|��\_s*[���]\|��\_s*��\|��\_s*[�п�]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*�\|��\_s*��\_s*��\|��\_s*[����]\|T\_s*r\_s*i\_s*u\_s*r\_s*i\_s*d\_s*a\_s*l\_s*e\_s*s\|�\_s*��\|��\_s*ˡ\|��\_s*λ\|��\_s*��\|��\_s*\%(�\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|h\_s*e\_s*c\_s*t\_s*o\|��\_s*��\|c\_s*l\_s*a\_s*u\_s*s\_s*t\_s*r\_s*o\_s*p\_s*h\_s*o\_s*b\_s*i\_s*a\|��\_s*��\|��\_s*��\|��\_s*��\|E\_s*\%(r\_s*i\_s*o\_s*c\_s*a\_s*u\_s*l\_s*a\_s*l\_s*e\_s*s\|u\_s*p\_s*t\_s*e\_s*l\_s*e\_s*a\_s*c\_s*e\_s*a\_s*e\)\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*��\|Ƭ\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|f\_s*\%(o\_s*r\_s*t\_s*e\|e\_s*m\_s*t\_s*o\)\|��\_s*[�滳]\|��\_s*��\|��\_s*��\|G\_s*e\_s*r\_s*a\_s*n\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*[����]\|��\_s*��\|��\_s*��\|��\_s*��\|�\_s*��\|��\_s*\%([�ͽ�]\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*ŷ\_s*��\|��\_s*[���]\|��\_s*��\|��\_s*[�ȡ�]\|��\_s*��\_s*\%(��\|��\_s*��\)\|A\_s*\%(s\|r\_s*s\_s*e\_s*n\_s*i\_s*c\|n\_s*g\_s*i\_s*o\_s*s\_s*p\_s*e\_s*r\_s*m\_s*a\_s*e\)\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*[����]\|��\_s*��\|ľ\_s*[�����Ᵽ]\|��\_s*Φ\|��\_s*��\_s*��\|��\_s*��\|��\_s*Ÿ\|��\_s*[�˹�]\|��\_s*��\|��\_s*ƻ\|��\_s*��\|��\_s*��\|��\_s*��\|̢\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|ι\_s*��\|N\_s*e\_s*l\_s*u\_s*m\_s*b\_s*o\_s*n\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*��\_s*��\|Ʊ\_s*˦\|��\_s*��\|��\_s*[��ȧ]\|��\_s*[������]\|��\_s*[�ǵ�]\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|Ĺ\_s*ë\|��\_s*��\_s*��\|Ż\_s*Ƭ\|��\_s*��\|��\_s*��\|��\_s*[���]\|��\_s*\%(��\_s*��\|��\_s*��\)\|ͦ\_s*[����]\|ή\_s*��\|��\_s*��\|2\_s*\%([�ͤ���]\|��\_s*��\|0\_s*��\)\|��\_s*\%([�ͤ���]\|��\_s*[����]\)\|ø\_s*��\|8\_s*��\|��\_s*��\|P\_s*\%(t\|o\_s*t\_s*a\_s*m\_s*o\_s*g\_s*e\_s*t\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\|l\_s*a\_s*t\_s*i\_s*n\_s*u\_s*m\)\|��\_s*\%([���������]\|��\_s*��\_s*��\|��\_s*��\)\|��\_s*ή\|��\_s*��\|��\_s*��\|��\_s*��\|R\_s*S\_s*I\|M\_s*\%(y\_s*r\_s*t\_s*a\_s*l\_s*e\_s*s\|e\_s*r\_s*c\_s*u\_s*r\_s*y\)\|��\_s*Ĵ\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*\%(��\|��\_s*[�ȥ�]\)\)\|��\_s*��\|��\_s*ϻ\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\)\|��\_s*\%([�顼]\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*\%(��\|��\_s*��\)\|��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\)\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\)\|��\_s*[��ʿ��]\)', - \ 'I' : '\%([�����DZߡ�����׶׵���������϶���������������������̴��ߺ�̤����ӷ��������Ų������ݳ�����Ͷư�ݡ����������ȵ������ܵ�述�S׽ꭲ���������ڿ��Ĺ�Ǣ��������̿��쵸Ÿವ������ż���������ϫ��������ĺ�������׻��������к��������ط���Ү������ͦ�����ܡ�����Ǯʰ���������ᰱ�����˻�ް�������������Ϯ�ס����ӱ��������©ĩ��寱��۱İ����ս�˻�С������ݫ�����׸�������ԩ۵�����������������ʰ�ݻ������ְ�յ׮���Ų����������������ΰ�𨱡�������ֱ������������۩���۰��д��ذ�Y�Ű�1��������ڴ�Ū��٥�������������ަ�̰��թ�Ⱥص����°����ذѰϱ�ԣ��������������и�����Ȱ���ǡѦ��״��������ͣ��޻��������׳�԰ʳ�ױ������������������İΰڸް������������Ͱ��ֹ�������������������а�Ψ��ͬ������������հݰ��ڰ۵���������ɹ���ۢ͢����������˰����籥���������ɥ������ɧڻ�I]\|E\_s*��\_s*��\_s*��\|��\_s*��\|J\_s*u\_s*n\_s*c\_s*a\_s*l\_s*e\_s*s\|��\_s*��\|��\_s*ë\|��\_s*ʸ\_s*��\|��\_s*��\|ɨ\_s*��\|��\_s*ϻ\_s*��\|��\_s*��\|��\_s*±\|��\_s*��\_s*��\|��\_s*ȷ\|β\_s*��\|��\_s*��\_s*��\|N\_s*a\_s*j\_s*a\_s*d\_s*a\_s*l\_s*e\_s*s\|��\_s*ɨ\|��\_s*��\|��\_s*��\_s*ƣ\|5\_s*[����]\|��\_s*[����]\|ب\_s*٦\|��\_s*��\|Ĭ\_s*��\|��\_s*��\|��\_s*Ӽ\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|ʸ\_s*��\|Ϻ\_s*[����]\|��\_s*[����]\|�\_s*��\|U\_s*r\_s*t\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\|�\_s*[�Ļ�]\|P\_s*\%(o\_s*a\_s*l\_s*e\_s*s\|l\_s*u\_s*m\_s*b\_s*a\_s*g\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\)\|��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[����ﷻ]\|��\_s*��\|ݬ\_s*��\|��\_s*��\|��\_s*��\|��\_s*¹\_s*��\|��\_s*��\_s*��\|G\_s*\%(l\_s*u\_s*m\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\|r\_s*a\_s*m\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\|i\_s*n\_s*k\_s*g\_s*o\_s*p\_s*s\_s*i\_s*d\_s*a\)\|��\_s*��\|��\_s*��\|��\_s*��\_s*ή\|��\_s*[�����]\|��\_s*[����]\|��\_s*[�ڻ�]\|��\_s*ɽ\|��\_s*��\_s*[��ú]\|��\_s*ӧ\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\|D\_s*i\_s*a\_s*p\_s*e\_s*n\_s*s\_s*i\_s*a\_s*l\_s*e\_s*s\|��\_s*[����]\|<\_s*=\_s*=\_s*>\|ɬ\_s*��\_s*��\_s*ʬ\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*\%(��\_s*��\_s*��\_s*��\_s*��\|ɸ\_s*��\_s*��\_s*��\_s*��\)\|��\_s*Υ\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|¨\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|i\_s*\%(��\_s*��\_s*��\|P\_s*o\_s*d\|��\_s*��\_s*��\|M\_s*a\_s*c\|��\_s*��\_s*��\)\|��\_s*��\_s*��\|̵\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*Ǽ\_s*ˡ\|��\_s*��\_s*��\|��\_s*\%([��ǡ­]\|��\_s*ʬ\)\|��\_s*��\_s*��\|��\_s*��\|Ƴ\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\)\|��\_s*\%(��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\_s*��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\)\)\)', - \ 'J' : '\%([���������ֺ�����ɼ������ټ������ľ������¿�̭������ߩ������������ʿ�顿�����ױ��ӿ�������пԿҿؿѿտ��ǽ�������������ޮ�տ��������ٳа������屽���������������������л������������ġп����Ы����������������������ǡ̼����ž�����������������վ�����������ڷ��������������������Ǩ����������è�����ط���������۲�ٽɽμ�����ѽ�Ȼ������Ž���������ޭ�߱��������覽�۽����ڽ޽����޼�쳼��������������ߨ��������������к��ߧ������尽Ľ½��������ý������ƽ�֮�������������꼥��Ώ����߼������������������ֵ�����������������������ᪿλ����������̻�Яϩ�˱�ѻ���ż���б��褻������κ�������������������Լٵ��ͤ��������������������֧�������������ʧק�������J]\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|G\_s*\%(��\_s*��\|��\_s*��\)\|Z\_s*\%(r\|i\_s*r\_s*c\_s*o\_s*n\_s*i\_s*u\_s*m\)\|D\_s*y\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*��\|2\_s*��\|��\_s*��\|��\_s*��\_s*ʺ\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*�\|k\_s*\$\_s*_\_s*{\_s*e\_s*f\_s*f\_s*}\_s*\$\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*ī\|��\_s*��\|Ƚ\_s*��\|ϳ\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\|Ĺ\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*Τ\|��\_s*[����ϴ������崽]\|C\_s*a\_s*b\_s*o\_s*m\_s*b\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*[�ʷ�]\|��\_s*��\|��\_s*��\|��\_s*��\)\|��\_s*��\|��\_s*��\|ɳ\_s*��\|1\_s*\%(0\|1\_s*��\|8\_s*��\|2\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*̣\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*Ʊ\_s*��\_s*��\_s*��\|j\_s*\%(T\_s*e\_s*X\|L\_s*a\_s*T\_s*e\_s*X\|B\_s*i\_s*b\_s*T\_s*e\_s*X\)\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*Φ\_s*��\_s*ü\_s*\%(��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*��\|��\_s*\%([���˥ʡ�]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\|��\_s*[�ӥ�]\|��\_s*��\)\|��\_s*\%(��\_s*[���]\|��\_s*[����]\)\|��\_s*��\_s*��\|��\_s*\%([�ϥ����]\|��\_s*��\_s*��\|��\_s*\%([���]\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*[����]\)\|��\_s*\%(��\_s*\%([�ʥ�]\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\)\|��\_s*\%(��\|��\_s*\%(��\|��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\)\)\)\|��\_s*\%([����]\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\)\|��\_s*\%([�֥�]\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*��\|��\_s*\%([�ȥ�]\|��\_s*��\|��\_s*��\)\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*[�ʥ��]\)\)', - \ 'K' : '\%([�����²�����Ƿ����ť����������������������ư����������Я⸼���Ƚ�Ҹ����Ǽ����������㪸��ۻ��������쮱��������੻�ֿ���Ѻ���������Ϲ���ٹ������ʺ��ú����������������������纯�պ����������ۦ�Ĺ���ȹ���������ָ����벹�Һ����٬̫�������ޫ�޳��������䲬������ު־������������㣸�������������������������������ϹϺ�������٫��Ⱥ��������ӫ����ִ����������ӳ��������������������Ӭ�����ص��������޸���ܺս��������������͹�̨����ɹ������ж�๫�ʹ����Ĺ�á�������񹸹��ۥ�������⫹���ֹѹ����������۹չ������̹��˹��ع��ֹ���骹ݹҹԹιӹ�ĸ�������ë��������ӭ�й�������������ݻ�����ջ��̼�Ժ�ʴ������������Ժ����������Ƹ�䲾������������Ƹ۸���ž������Ķ���ٸ�Ĩ��Ӿ����������̱ۻҸɸָ���ܵ����Ž�����ѻ��������������ǻ�ûƤ��������Ҹ�����ݰ�ٽ����ᾱ��ʷ��������������Ͽ���ٱ�Э��ۿ����ݼ�����������ܷ�������غ������ѭ�����ԡ����������������޲��իҥݾ�������������شկ���ث���ڷ𸳰��̷�����ո����������������丮����������������������������Ǹ����������ݷ�ڸ建�������������������������������ҧ��������Ҿ����ت�����Ϩ���������������������������������������������������������������ꥷ���찷Ʒ̷�����÷���Ҧ���׷��������ۤ�������ܯ��ݬݮ��ܱܮ���ݫ����������ʵ��ߪ�������������������������������ʤ������վ�߷�������ţ賷�Φۻ����Ү���������·��ذѾ����������򷬷���������ڶ�������˿��ֲ��̽������ǰ̰�鶰����������פ��޺������Ϳ���������߷�����������Ѧ��ν���庿ܸ���ȷ����������ˮԢ��ɦ����ʭ�ܿ�����Ц��������ĸ�¢����������������������޷��˹��ȸ����Ң����ڹ����������ҿ�ȶ���������꤯�����������ӽ����廸����������͵�����������θ���˨�������ž����������䷯���ݢݡ��뿸�֨�����ɵɵǵ̵Ƶʡ����ޢ̡����������ޡ��������á��笠��������������ܡ���������������������������塹�����������Ţ��������������硧�����顩�������¢��ġ������������졵�����ˡ�桼�ݢ����������᡺������Ժٹ���ܶ��������������µϴߵ�ʷ���ߵ�̸��������������������������׶ܶ����������۶�ڢ�Ҷݸ��ٶڶӶ϶׶նѶ۶�ֶ�ضб���ڡ��ک������ڪ��������ӵ����Ҩ��ީд�򰰶ɵ�����������ժ亶�����ѿ�����ַ���ﶷ����Ѭз�ź�䡹���������ިٰ���������װ�������������¶����ѹ��������߶�����ҳ����ٶ��������ɶ���Ѿ貶������󶩶��������ж��ᶧ���Ŷ��������ö��������������̾���������̵��������֩켣�������������ŵ���ָյ��������ⱱ�����͵ܵ׵��ֵ�ȷ���ٵߵ޵�۶��ݺ������ʹ���ݤ���ױ���̴����ڵ��������ſ�����өɱȲ�����ø�����ڶ˷�Ҽ����¶���𵦵����������������ۮ�־����ةȩ���ܵ���ѥ���·��д���̧İ�ɺ������������ݸ���������嵥�ڵ���������޿��洴������������ԭ�Ե�������������ڸ�������������������쵧�����������㵫��٣������ֿ۹�������������ڹ��ɳ�����߳��˹��ȷ�̢�ư좿�Ʊ����ʡ�ܢ��������������ᱵ������ר����������������ǡˡҡԡơȡɡѡСա������ô��ج�ɳ�����϶������������Ѿʸܵ�ȿ����������ǣ�����ʶ�ͽ�����г����Ͼݵع�˵�����ۿ��ٸ��Ƿ����շ�����ͩ������Ϋ�������������������Ĵ�������ȱ������١Ҥ���ҳ��ݢʢ��ٿ��Ȧ����۫滳�������ܾ��龹�ô�������������������������Ž��޳���������ڳ³����������������������귰������¦��������������㡴���姢����������̻�������������റ��ɵ��������ҳ��������ݹ��������޳����˿�����������ڸ����ি�ԣ�����ϸ³ø�����֡١׷�����ŭƬ��������ŨŬ��Ť�״׳�����ᰥ��ɬ������Ŵ����ܷ�������̳������봢�Խ�����ڲ��������Ӿ��������������׳�������ڨƿ����ӽ�dzӡϡۡڡ̡͡γ��ȳijԳճʳ��߱��׳���ڼ����ȵҳֳѳ�����Т������Ӽ����뻳�����һר������ݥ�����������������ų�����Ъ�����������Ļ�����������ӳ���ܴ��������߷������ٳ����β����𳭳������dz��������򳬲������������Ԭ��٪�Хٺ������������ù���������٢��Ӳ�����ߵ������۸������������������Ұ����������������ᴮ�������Ѵ���޾��˧�����ӳ�������ޱ�ڿ����ͻ�ô������ÿ�����������ȡ������ȴ���䯴�������԰�ݴ����۴���ڴ��������Դʴ�ա�����̴�����δ��˴���ע������Ӵ������Ĵִٴ��״�ӿ���Ŵ��ɴ����شϴ������Ѵ��ش������Գҵ��ȴճƶ�������������Dz����μ����ŲòͲ�ӻ�����۷紣�Ҳԥ�Ф�����������Ҳһ����ݲݲָ򴢱�����������������ּ���������������ȼڲ�桶���˲Űײ�����ӧ��������ҷ����ܴ���������ѫ�β������βϲѼ����н��������ӥ��������ѷ��������ϲӲ����ɲշ��������߲��������Ʋ��²�������Ⱦ���������Ƹϲ��ݤ����ᨱ�����秷�����������ʳ��˥��߶��Ҧ֥����������ܥ���K]\|��\_s*[����������]\|��\_s*[����������]\|��\_s*[�Ҥ���������]\|��\_s*��\|��\_s*��\|��\_s*��\_s*Ⱦ\|�\_s*ë\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*ϧ\|��\_s*��\|��\_s*��\|�\_s*��\|M\_s*e\_s*t\_s*a\_s*c\_s*h\_s*l\_s*a\_s*m\_s*y\_s*d\_s*e\_s*a\_s*e\|f\_s*o\_s*o\_s*t\_s* \_s*a\_s*n\_s*d\_s* \_s*m\_s*o\_s*u\_s*s\_s*e\_s* \_s*d\_s*i\_s*s\_s*e\_s*a\_s*s\_s*e\|��\_s*Ϣ\_s*̣\|�\_s*��\|�\_s*��\|��\_s*��\|S\_s*i\|�\_s*��\|ɴ\_s*[߻��]\|9\_s*[����]\|�\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|ŵ\_s*��\_s*��\|L\_s*a\_s*u\_s*r\_s*\%(a\_s*c\_s*e\_s*a\_s*e\|o\_s*i\_s*d\_s*e\_s*a\_s*e\)\|õ\_s*��\|��\_s*��\|c\_s*r\_s*e\_s*s\_s*c\|��\_s*¢\_s*��\|H\_s*e\_s*l\_s*l\_s*e\_s*b\_s*o\_s*r\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|J\_s*u\_s*g\_s*l\_s*a\_s*n\_s*d\_s*a\_s*l\_s*e\_s*s\|ϻ\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|k\_s*i\_s*l\_s*o\|��\_s*[��Ƿ��]\|��\_s*��\|��\_s*ɧ\|��\_s*�\|��\_s*��\_s*Ļ\|X\_s*e\|ǡ\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|�\_s*�\|�\_s*��\|G\_s*o\_s*l\_s*d\|A\_s*\%(u\|r\_s*c\_s*h\_s*i\_s*c\_s*h\_s*l\_s*a\_s*m\_s*y\_s*d\_s*e\_s*a\_s*e\|s\_s*t\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|c\_s*a\_s*n\_s*t\_s*h\_s*a\_s*c\_s*e\_s*a\_s*e\)\|��\_s*��\_s*��\|��\_s*��\|R\_s*\%(h\_s*\%(o\_s*e\_s*a\_s*d\_s*a\_s*l\_s*e\_s*s\|a\_s*m\_s*n\_s*a\_s*l\_s*e\_s*s\)\|u\_s*n\_s*u\_s*n\_s*c\_s*u\_s*l\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|a\_s*n\_s*\%(u\_s*n\_s*c\_s*u\_s*l\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|a\_s*l\_s*e\_s*s\)\)\|��\_s*��\|��\_s*[��©]\|��\_s*[����]\|��\_s*[����]\|��\_s*��\|��\_s*��\|��\_s*\%([���]\|̳\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*ŵ\|��\_s*�\|��\_s*��\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*ƻ\)\|��\_s*��\|Υ\_s*��\_s*Υ\_s*��\|��\_s*Ƭ\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|Ĺ\_s*[�]\|��\_s*��\|ŷ\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\|O\_s*x\_s*a\_s*l\_s*i\_s*d\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*��\|��\_s*��\|�\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*[����]\|̱\_s*��\|��\_s*��\|E\_s*\%(b\_s*e\_s*n\_s*a\_s*l\_s*e\_s*s\|l\_s*a\_s*n\_s*a\_s*l\_s*e\_s*s\)\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|Ϣ\_s*��\|��\_s*��\|��\_s*��\_s*��\|C\_s*\%([ormdfa]\|h\_s*r\_s*o\_s*m\_s*i\_s*u\_s*m\|i\_s*r\_s*c\_s*a\_s*e\_s*a\_s*s\_s*t\_s*e\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|u\_s*r\_s*i\_s*u\_s*m\|e\_s*r\_s*c\_s*i\_s*d\_s*i\_s*p\_s*h\_s*y\_s*l\_s*l\_s*a\_s*c\_s*e\_s*a\_s*e\|y\_s*p\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\)\|��\_s*\%(��\|��\_s*��\)\|�\_s*�\|�\_s*�\|��\_s*\%(��\|Ϥ\_s*��\)\|��\_s*��\|��\_s*[�����׼�]\|��\_s*\%(��\|��\_s*��\_s*Ω\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\)\|(\_s*��\_s*)\|��\_s*��\|��\_s*��\_s*��\|��\_s*ʼ\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\|�\_s*��\|��\_s*[���׿�]\|��\_s*��\|ݣ\_s*��\|T\_s*\%(h\_s*a\_s*l\_s*i\_s*c\_s*t\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|u\_s*b\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\)\|��\_s*\%([�֥�]\|��\_s*��\|��\_s*\%([�ȥ�]\|��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\)\)\|��\_s*\%(��\_s*\%(��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\)\)\|��\_s*��\_s*��\|��\_s*[�եȥ�]\)\|��\_s*\%(��\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\)\)\|��\_s*\%(��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\)\|P\_s*\%(i\_s*p\_s*e\_s*r\_s*a\_s*\%(l\_s*e\_s*s\|c\_s*e\_s*a\_s*e\)\|a\_s*p\_s*a\_s*v\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|o\_s*\%(d\_s*o\_s*s\_s*t\_s*e\_s*m\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\|t\_s*a\_s*s\_s*s\_s*i\_s*u\_s*m\)\)\)', - \ 'L' : '\%([��������������������������������㡱�����������̢��ТϢ˥�̢ʥ��ݦ��򧭦�L]\|��\_s*[����������]\|��\_s*[����������]\|��\_s*[����������]\|��\_s*��\|��\_s*��\_s*2\_s*��\_s*ˡ\|\.\_s*\.\_s*\.\|��\_s*��\|l\_s*-\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\|ݦ\_s*ݨ\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%([����������֥ܥȥᥦ����������]\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\)\)\|��\_s*��\|��\_s*��\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*\%([�����ƥȥ�]\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*\%([�ȥ���]\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\|��\_s*[�ȥ�]\)\|��\_s*��\|��\_s*\%([������]\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*[����]\|��\_s*��\|��\_s*��\)\|��\_s*\%(��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%([����]\|��\_s*��\)\)\)\|\\\_s*L\_s*a\_s*T\_s*e\_s*X\|��\_s*��\_s*��\|��\_s*��\|��\_s*\%([���������������ݥ���ޥʥΥ�̥֥���]\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*[��]\|��\_s*[����]\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*\%([����]\|��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*[�륷]\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\|��\_s*\%([���]\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*[����]\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\)\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%([����]\|��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*\%([����]\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\)\|��\_s*\%([����]\|��\_s*��\|��\_s*��\)\|��\_s*\%([����]\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\)\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*\%([�ɥԥץ�������]\|��\_s*��\)\)\)', - \ 'M' : '\%([�Ӵ��ڬ��������������������ߪ߫�������һս�����������������������ο��������������ʹ��ʪ�������������أ�ε첼Ъ�����Ǵ��ܸ�����ʸ����������ݨ��������ۯ�����ۤ��˴�������������ݼ�˾��dz������ϳ�������ܾը���л��Ӥ����������ո�ľѾ�������ճ����˨�λ�ت�����������������������������������������������ۻ�������������Ϊ溵�ʰ������̺�����������ü������ӹ��������ɴ���������Ϣ͸��¼���߶����ٽ��ﶻ�ŷ�̼��������ǫ�����ƿ������������������̸̻����̵����̴̹��̶��ϻ�����پ���̷̳����믵��Ĺ�ǥߺ���֪������Ь夰�յ�������𢨡�������̮�þ���̬��Ѱ�λ�û������ǣ����ץŹ������̨��º��ļ�š�������Ѣ��١۱����̰������ǧʾ������Ƴ����ϩƻ����м�����������̯̾̿̽�Ե�㴳���ﲸ���̫����������Ĵ��̩���̪��ܳ�̲��̱��׽̭��뷱ο�̧����������������̥̣̦�ʿ���ߎ������ϸ����������ٿ����ܵ������������Ū�¹׿׾�ᵼ��ž���е����������ȱ��μ���°������ż��������̱Ҹ�����Ʀԫ�����ѿ���Ǥ������ʶ������������Ĵ��ٰ������������������ü�����������������ᶶ賹Į�����������Ԥ�硬�ˡʱߴ�ʣ���󺵸����������������������ػ���������������Ϩ����������������������Ż�������������Ȩؤ����������̢�������̡��������������Ϯ�����򾾶��踭ͥ�������������������������Ϻ��������������۾��������̤�������⼬�غ���������������ѿ����������˻��޸����������̢ޡࢿ���ܡޢ��΢Т��ʢ���ꢻ���覤�͡碾���ݢϢ��ߢˡ���ߢ�������������������͢���ݥ޺ǥߥ᧮����M]\|��\_s*[�ӎҎюЎ�]\|��\_s*[����ߥ�]\|��\_s*[����ߤ�]\|��\_s*[������]\|��\_s*\%([���Ͽ�]\|��\_s*��\|��\_s*��\)\|��\_s*��\|��\_s*��\_s*\%(��\|ʸ\_s*��\)\|ξ\_s*\%([�ѿƿ�]\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|O\_s*l\_s*e\_s*a\_s*l\_s*e\_s*s\|ر\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*ĥ\|��\_s*[�����]\|��\_s*��\_s*ӧ\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*\%([��������ͭ]\|��\_s*ƻ\|��\_s*��\)\|��\_s*��\|��\_s*��\|6\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*;\_s*��\|��\_s*��\|B\_s*\%(e\_s*r\_s*b\_s*e\_s*r\_s*i\_s*d\_s*a\_s*c\_s*e\_s*a\_s*e\|i\_s*o\_s*r\_s*r\_s*a\_s*g\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\)\|��\_s*��\|©\_s*��\|k\_s*\$\_s*_\_s*{\_s*i\_s*n\_s*f\_s*}\_s*\$\|��\_s*��\|A\_s*\%(b\_s*i\_s*e\_s*s\|p\_s*e\_s*t\_s*a\_s*l\_s*a\_s*e\|c\_s*r\_s*o\_s*s\_s*t\_s*i\_s*c\_s*h\_s*u\_s*m\)\|��\_s*��\|�\_s*ȷ\|��\_s*��\|��\_s*[�����]\|��\_s*��\|��\_s*��\|Φ\_s*��\|��\_s*[�ҽ�Ԣ]\|3\_s*[����]\|��\_s*[����]\|��\_s*[��ȱ��]\|��\_s*��\|ȷ\_s*��\|��\_s*��\|��\_s*[���������˪��]\|P\_s*o\_s*d\_s*o\_s*p\_s*h\_s*y\_s*l\_s*l\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*[ζε��]\|��\_s*��\|�\_s*�\|��\_s*��\|��\_s*��\|��\_s*��\|R\_s*u\_s*t\_s*a\_s*l\_s*e\_s*s\|��\_s*\%(̣\|��\_s*[��ž]\)\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*Ļ\|��\_s*��\|��\_s*��\|��\_s*[���һ���]\|��\_s*��\|ߴ\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*ã\|��\_s*��\|��\_s*[��̯��]\|��\_s*��\|��\_s*��\|L\_s*o\_s*g\_s*a\_s*n\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\|Ю\_s*��\|��\_s*��\|��\_s*��\|S\_s*\%(a\_s*p\_s*i\_s*n\_s*d\_s*a\_s*l\_s*e\_s*s\|c\_s*h\_s*i\_s*s\_s*a\_s*n\_s*d\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\)\|C\_s*\%(a\_s*s\_s*u\_s*a\_s*r\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\|e\_s*r\_s*a\_s*t\_s*o\_s*p\_s*y\_s*l\_s*l\_s*a\_s*c\_s*e\_s*a\_s*e\)\|��\_s*\%(��\_s*��\|��\_s*��\)\|H\_s*a\_s*m\_s*a\_s*m\_s*e\_s*l\_s*i\_s*d\_s*a\_s*l\_s*e\_s*s\|��\_s*[Ƿ��]\|��\_s*ɧ\|ʹ\_s*��\|��\_s*��\|��\_s*[��§��]\|��\_s*��\_s*ǯ\|��\_s*��\|¿\_s*��\_s*��\_s*��\|��\_s*-\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|ñ\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*[����]\|��\_s*��\_s*��\|��\_s*��\_s*Ǿ\|��\_s*[����]\|��\_s*��\|��\_s*\%(��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\)\|m\_s*\%(u\_s*l\_s*t\_s*i\_s*l\_s*i\_s*n\_s*g\_s*u\_s*a\_s*l\_s*i\_s*z\_s*a\_s*t\_s*i\_s*o\_s*n\|i\_s*\%(c\_s*r\_s*o\|l\_s*l\_s*i\)\|e\_s*\%(g\_s*a\|z\_s*z\_s*o\_s* \_s*\%(f\_s*o\_s*r\_s*t\_s*e\|p\_s*i\_s*a\_s*n\_s*o\)\)\|a\_s*\%(k\_s*e\_s*��\_s*��\_s*��\_s*��\|d\_s*e\_s* \_s*i\_s*n\_s* \_s*J\_s*a\_s*p\_s*a\_s*n\)\)\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*Ū\_s*��\_s*̣\|��\_s*��\_s*\%(��\_s*̣\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\)', - \ 'N' : '\%([�ɽ��԰���ھ�翮������������������Ǽ����¡���۩����׵�˾���̰�ĵ����ƭ���о����Ӹ�����Ī��������ɫ��Ÿˡ����ŵ����§���ϵ���ů������ۨ�����ǹǿǾǽ��������Ƕ��Ǹ�����ЫݻǷ����Ҿ��ݡ�ǻ�ĤΎ�������߿ݦ����եǫդ������ٹǭ���ʿ�ܡ̲������Ǯϫ�Ǭ̭��ܬ����Dzǰdzǯ޺Ǵ�ͺ�DZ��Ǫϣ�����಻��ǩ������͎�Բ���ʾ����迡���۾�ݹ��������ŧ�޹dz�Ǩæ��˥ȴ��ٶ���ɤ̎�ٿ��ô�����������콭��ʨ���߳���Ʋ������ؽ�ǢѦ���浶��ǡ���������ǣ����������ԡբ�١ذ�����լ��ѹ���ٿ�Ǧ��ǥǧǤ�������̶�����������������֮ƨ�������������������������2бð�ˎ���ٸ�������ij���������֧����ť鵵ͼ㳴÷ò����ڳ�в��ּ�����ͱľؽǺޥ��������ϲ˿������ܧ�ƻ�������������б��������������±����ŵ��ڽ�������ͨ��������Ʒ��ȱ���į��ή��¸�������ܩ��Ĺ�����޽�Ⱦ�������棷�м�����ǵ����ճ���Ǣ������������������Զ��������󢿢͢�����������Ǽ̵��ٽ��ձ��޸���������ѵ�����İ����ྨӭ��������ڵ�����˴�������Ƥʨ���������������������������������������̾��������˥ͣ΢̡���ʥ̥Φ����ߦ�N]\|��\_s*[�ɎȎǎƎ�]\|��\_s*[�Υ̥ͥ˥�]\|��\_s*[�Τ̤ͤˤ�]\|Ģ\_s*��\|��\_s*��\|��\_s*��\|��\_s*ö\|��\_s*��\_s*ȿ\|�\_s*��\_s*��\|ϵ\_s*[�ݱ�]\|��\_s*��\|��\_s*��\|��\_s*[����]\|��\_s*[����]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[������]\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*Ƿ\|��\_s*��\|ο\_s*�\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*;\_s*��\|��\_s*��\|��\_s*�\|I\_s*I\_s*��\|�\_s*ȭ\|��\_s*��\|��\_s*�\| \_s*2\_s* \_s*��\_s*��\_s*��\|M\_s*y\_s*r\_s*i\_s*s\_s*t\_s*i\_s*c\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*�\|��\_s*��\|��\_s*ѵ\|��\_s*[����]\|P\_s*b\|L\_s*e\_s*a\_s*d\|��\_s*[����]\|C\_s*\%(e\_s*l\_s*a\_s*s\_s*t\_s*r\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|a\_s*r\_s*y\_s*o\_s*p\_s*h\_s*y\_s*l\_s*l\_s*a\_s*l\_s*e\_s*s\)\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*ʪ\)\|��\_s*��\_s*��\|7\_s*[����]\|��\_s*��\|��\_s*��\|ʿ\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\|T\_s*h\_s*e\_s* \_s*N\_s*e\_s*t\_s*w\_s*o\_s*r\_s*k\_s* \_s*I\_s*n\_s*f\_s*o\_s*r\_s*m\_s*a\_s*t\_s*i\_s*o\_s*n\_s* \_s*C\_s*e\_s*n\_s*t\_s*e\_s*r\|S\_s*o\_s*\%(l\_s*a\_s*n\_s*a\_s*l\_s*e\_s*s\|d\_s*i\_s*u\_s*m\)\|��\_s*\%(��\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\|ɳ\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|n\_s*\%(��\|a\_s*n\_s*o\|o\_s*t\_s* \_s*o\_s*r\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\)', - \ 'O' : '\%([���������Ů��ۯ۰�Ÿ�۲������˻������ҳŵ�����س��������������ḯ�Թ����������䲮��ɭ�����������ڶ�����ڼ��ᡸ�������������������������Ǧ��������Ƽ�����Ĺ�Ľ����Ǽ�Բ����������£���������ȳ�־���쿯����Φ�ֲ�ݣ�����ſ����༫�ʳ������ˬ�ʲ�������������񤲷ǰ����߰�θ��������ۻ�ɽ���̶�������Ͷ��笲��������������ݶ����ذ�ߴ�޳����۾��ʲ�����������إ����ᥲ���ص��ռ���鲪�����������ݯݳ���²�۷��겣����ݿ�������ӵ��������꾪Ʊ�����������ٱ�⳸����������͸���Ȳ����������ϵ��˲��˱����¿��ʤ�������Dz����Ϻ��ڨ��������ϯ�ݰ������������ƿ�Ϸ����ͦ�������˵�Ӱ���˿侭�����˸�����಼����ͺ�ߺ��������ӱ����ä�������¢���ˢ����ϧৰ�ϡ��ئ�����O]\|��\_s*��\_s*��\_s*��\|��\_s*��\|�\_s*��\|��\_s*Ȭ\_s*��\|Ŵ\_s*��\|��\_s*ȱ\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*̣\|��\_s*�\_s*��\|��\_s*ʴ\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[����]\|��\_s*��\|ب\_s*��\|˵\_s*[������]\|��\_s*[̼��]\|��\_s*[����]\|��\_s*[����]\|թ\_s*��\|��\_s*��\|��\_s*��\|G\_s*u\_s*t\_s*t\_s*i\_s*f\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|D\_s*i\_s*l\_s*l\_s*e\_s*n\_s*i\_s*a\_s*l\_s*e\_s*s\|H\_s*y\_s*p\_s*e\_s*r\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\|��\_s*��\|��\_s*��\|��\_s*[��̼��]\|��\_s*ǯ\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|A\_s*l\_s*i\_s*s\_s*m\_s*a\_s*t\_s*a\_s*l\_s*e\_s*s\|�\_s*��\|��\_s*��\|��\_s*��\|C\_s*o\_s*p\_s*t\_s*i\_s*d\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|��\_s*��\_s*��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*ʪ\|��\_s*��\_s*��\_s*��\|��\_s*[����]\|��\_s*[����]\|��\_s*Υ\|ز\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*[����������]\|��\_s*��\|��\_s*[������]\|��\_s*��\|��\_s*��\_s*[����]\|��\_s*[�߳���]\|��\_s*\%(��\|��\_s*��\_s*η\|��\_s*ŷ\_s*��\)\|��\_s*Ƭ\|��\_s*[��������]\|��\_s*��\_s*¾\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*\.\|��\_s*[��ζ]\|t\_s*h\_s*e\_s* \_s*O\_s*b\_s*j\_s*e\_s*c\_s*t\_s* \_s*M\_s*a\_s*n\_s*a\_s*g\_s*e\_s*m\_s*e\_s*n\_s*t\_s* \_s*G\_s*r\_s*o\_s*u\_s*p\|Ω\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\)\|��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*\%([����]\|��\_s*��\)\)\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*[ǯ��]\|��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*Ŭ\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\)', - \ 'P' : '\%([ˣˤˡ��������ܮ�������ʻ�����á�����������������������ʬ��������ɤɶ��ɼ����ʿ���ȯ��Ȣ��������������������������ʧʢ����������Ȭ�˱�����ĥ�ѱ����פԡޡܤצ��ը������̨��󡥣С�򢩡����ץ��ǡˡʢߢ��¥ڥѧ������զХ�P]\|��\_s*\%(��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\)\|��\_s*[�ݥڥץԥ�]\|��\_s*[�ݤڤפԤ�]\|��\_s*��\|��\_s*��\_s*Į\|��\_s*��\|�\_s*[Ϫϥ]\|��\_s*��\|��\_s*��\|��\_s*ϥ\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(Τ\|��\_s*��\)\|C\_s*y\_s*c\_s*l\_s*a\_s*n\_s*t\_s*h\_s*a\_s*l\_s*e\_s*s\|S\_s*y\_s*n\_s*a\_s*n\_s*t\_s*h\_s*a\_s*e\|��\_s*��\|B\_s*r\_s*o\_s*m\_s*e\_s*l\_s*i\_s*a\_s*l\_s*e\_s*s\|L\_s*e\_s*a\_s*d\|��\_s*[�ļ��]\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\|��\_s*\%([��������]\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\)\)\|+\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\|Χ\_s*��\)\|��\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\)\)\|��\_s*��\_s*��\_s*��\|��\_s*\%([����Υ�]\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\)\|��\_s*\%(��\|��\_s*��\|��\_s*\%([����]\|��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\|��\_s*��\_s*[���]\)\|��\_s*[�ĥ�]\|��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*\%([����]\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%([��������]\|��\_s*[�ץ�]\|��\_s*\%(��\|��\_s*��\)\)\)\|��\_s*\%(��\_s*\%([�٥�]\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\)\|��\_s*\%(��\_s*��\|��\_s*��\)\)\)\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*³\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*³\|��\_s*��\_s*��\_s*��\|��\_s*ƺ\_s*��\|��\_s*��\_s*��\|¿\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|Ž\_s*��\_s*��\_s*��\|��\_s*ʸ\|��\_s*��\_s*[����]\|��\_s*��\|��\_s*��\|p\_s*\%(T\_s*e\_s*X\|H\_s*��\_s*��\_s*��\|e\_s*\%(t\_s*a\|r\_s*l\_s*��\_s*��\_s*��\_s*��\_s*��\)\|i\_s*\%(c\_s*o\|a\_s*n\_s*\%(o\|i\_s*s\_s*s\_s*i\_s*\%(m\_s*o\|s\_s*s\_s*i\_s*m\_s*o\)\)\)\)\)', - \ 'Q' : '\%([��ܯ��ݬݮ��ܱܮ����ݫ����������ʵ��ߪ�����緩�����ų����������������������������ʤ��������մɾ�߷��������ţ賷�Φۻ������Ү�������ղ������ط��Ѿ������뷭�����򷬷���������ڶ��������˿����ֲ����̽�������ǰ̰�鶰���ȱ���������פ��޺���������������ޱ�����Ϳ����������߷�����������Ѧ��ν�����庿����ܸ�𷪶��ʳdz����������ˮԢ��ɦ����ʭ��Ӽ��������Цչ��硡����������Ŵ�ġ�������¢�������ҵ׹�������������׶������޷��˹�����ȸ�������Ң�����ܸ����ڹ��������������׶�������ҿ�ȴ���ȷ����϶��Ͷ��ꎸ���ѡơȡǡɢ���������Q]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*̼\|�\_s*�\|��\_s*��\|�\_s*��\|��\_s*Ѵ\|ɴ\_s*[߻��]\|��\_s*��\_s*��\|��\_s*ʪ\|��\_s*��\|9\_s*��\|Ĺ\_s*��\|�\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|ŷ\_s*��\_s*��\|��\_s*��\|ŵ\_s*��\_s*��\|L\_s*a\_s*u\_s*r\_s*\%(a\_s*c\_s*e\_s*a\_s*e\|o\_s*i\_s*d\_s*e\_s*a\_s*e\)\|õ\_s*��\|��\_s*��\|c\_s*r\_s*e\_s*s\_s*c\|��\_s*��\|��\_s*[����]\|��\_s*¢\_s*��\|K\_s*r\|H\_s*e\_s*l\_s*l\_s*e\_s*b\_s*o\_s*r\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|��\_s*\%([��������ʸ����]\|��\_s*��\)\|��\_s*��\|��\_s*Ѥ\_s*��\|J\_s*u\_s*g\_s*l\_s*a\_s*n\_s*d\_s*a\_s*l\_s*e\_s*s\|��\_s*��\|ϻ\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|C\_s*\%(r\|h\_s*r\_s*o\_s*m\_s*i\_s*u\_s*m\)\|R\_s*h\_s*a\_s*m\_s*n\_s*a\_s*l\_s*e\_s*s\|��\_s*��\_s*ϯ\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*[���]\|��\_s*\%(��\_s*[����]\|��\_s*\%(��\_s*��\|��\_s*��\)\)\|��\_s*��\_s*[�ॹ��]\)\|��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\)\)\)', - \ 'R' : '\%([���������α����������Ͼ��ϼϽ����Ͽ����߳ϱ������ϮӤ����ۭ�����ӯ������Ѥ��ҩ�������۰��Ϻ��ϭϴϲϹ��ϸϰ϶��ϵϳϯ���ϧ���ȧ��Ϩ������������תϦ�������ݭߣ���ް���ٳ�����Ѷ������Ӻү��ߺ��������������㹵�����������������������������������ݬݮ�����������ҳ��������ҽ��߲��������ݲ��������ϡ��ϣڻ������Ϣ���ϩ���ޥ������������������ﻼ�����Ϭ�������ڶ����Ϋά��ΪΨ�˷�Χ��ҭϻ٤Φ�������������������߱�����ί��βΰαΩ��γέδή������P��������ܲ����ש����������ا��������������������������η������κϤθо��������̺��������������ۢ������ס����������ڢ�������������ɩ������������������ζοε�˵���νμ������λ����ξ����ιΥ����Σ������Ρ΢�����ߢ������������ئ������Τ轤��ϫ��������Ϸ��ԿЬѰڰ�������ݳ�պ��ݴݣ���������������������������������������������������������������ݪڧѴ��������������������������������������ɤ鱦�����ҧ姨���৫�����ا٧������ӧ��槬���ݧ����᧰��������������ϥ����Ϫ���ۧ秮�ܧ��ԧէާ觯���קѧڧ�֧䧡���駾�𧦧����ߧ맥�غ���������ҥ���꧲�Ѧ���R]\|��\_s*[�ێڎَ؎�]\|��\_s*[�������]\|��\_s*[�������]\|��\_s*��\|��\_s*[ͭ��]\|��\_s*[˦���]\|6\_s*[����]\|��\_s*̵\_s*��\|ݦ\_s*ݨ\|԰\_s*��\|A\_s*\%(c\_s*t\_s*a\_s*e\_s*a\|p\_s*o\_s*p\_s*e\_s*t\_s*a\_s*l\_s*a\_s*e\)\|C\_s*\%(a\_s*l\_s*y\_s*c\_s*a\_s*n\_s*t\_s*h\_s*a\_s*c\_s*e\_s*a\_s*e\|h\_s*o\_s*r\_s*i\_s*p\_s*e\_s*t\_s*a\_s*l\_s*a\_s*e\)\|��\_s*[����]\|��\_s*\%(��\|��\_s*��\)\|V\_s*e\_s*r\_s*t\_s*i\_s*c\_s*i\_s*l\_s*l\_s*a\_s*t\_s*a\_s*e\|O\_s*r\_s*c\_s*h\_s*i\_s*d\_s*a\_s*l\_s*e\_s*s\|M\_s*i\_s*c\_s*r\_s*o\_s*s\_s*p\_s*e\_s*r\_s*m\_s*a\_s*e\|L\_s*\%([ruia]\|e\_s*i\_s*t\_s*n\_s*e\_s*r\_s*i\_s*a\_s*l\_s*e\_s*s\|A\_s*N\_s*��\_s*��\_s*��\_s*��\)\|��\_s*��\|G\_s*\%(e\_s*n\_s*t\_s*i\_s*a\_s*n\_s*a\_s*l\_s*e\_s*s\|y\_s*\%(n\_s*a\_s*n\_s*d\_s*r\_s*a\_s*e\|m\_s*n\_s*o\_s*s\_s*p\_s*e\_s*r\_s*m\_s*a\_s*e\)\)\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*\%(��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\)\|��\_s*��\_s*̿\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*§\|��\_s*��\|r\_s*u\_s*b\_s*y\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[����]\|��\_s*��\|ȿ\_s*��\_s*��\|��\_s*\%(��\_s*ʸ\_s*��\|��\_s*��\)\|��\_s*ǽ\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*Ū\|ǧ\_s*��\|��\_s*��\_s*ɽ\_s*��\|��\_s*��\_s*��\)', - \ 'S' : '\%([������Ъ��ۼ��˵ֵ�ڰ��޶�������˿����������Խ�������������������Ǩ����Ψ��м��©­¥«¦¬�������������������̫���ᰳٴտ£��֥��ػǬ߶����ҫݽ���������¹������������������ײ����س��Ȣ�������������������������������������Ҳ���䷫��������������������������������������������������������ç��������î¹½¸º»�����������������������¶�����������ȿ��������������ର�������������������ۤ�������ɯ˻����í�ܦ岱������������޶�������������ܸ�������������������������Ҫ������ͼ�������ϴ�������������ߪ�����������������������ٰ���������������֣ڱ��������·����޷�����߫�����������������ѩ���Ѣ����������������������ߥ������������������ѡ����������������������٥Ѩ��������ڣ�������������������������������������������ګ�����̻�������������������������ع������������������������������Ԥ�����������������¿��б�¼��ͥ����������ӳҰ����ӵ�����ѱ�������ڿ�μ������ͤʹ�������ƫ������ǵ��¨§�ߵ�������̡����������ͷ�������ķ������������״ɿ�צ�����������ߵ���������®ú���϶��ۡڽ����������ſ�������Т�̢ޢϡ�⦤��͡�ߢˡ��ܢ�ޢ�ʡ��΢��ߢ��ꢻ�����������حج�����������ï�Ϳ������巿������H�����������������񾽻������������ľ������������ڧ߭�����湥��ٹ���۵ʿ���Ʃ��Ա���飼�������������ý�Ƴ��������ħ����󻼲�����١����ٶ�������Ĵ��¢ֺ��������ߨ��ߧ�¼Ȼ����ο�Ǧ�������ǧ��ӻ����к�����尷樵Ԧ����������������ܰ��Ǣ�������������ܾ�������н�ؼ������������ż�Ĭ߼���ȼ����𮼻ꩼ�����ɨ���������ũ�������м��޳���ʻ�������������Ϳ��ļ����������������ҼԲ�������ĵ������������ϼ���բ����ٱ�ؼ۷�����������������������ּ���м�ܼڼ�����Ѽм˼ּ�Ұ������ʵ�������ż�ެ������ո��շ��ܤܣƵ����������´���������ý�������ʽȽͽܼ̿�����������꫽н���ܶ��������ܷ������������ꪽ�������쨳�Ӵ֭�������ϼ�������������������ܽ�����µ�½���������������������������������Ѯضآ�����������ؽܽ׽ٽ���䣽սֽ�������������������������������Ӣ����������������֪��ǿ������������п¿��������Ŀ˿��ӿ��¿ɿ��ǿ���ä���⿹���ƿ����������ȿʿ������ƿ�謹������е���������������������������ر������������������޵�����������ַ����Ҿ�����������ľ���������������ֹ����������ľ���������������׾̰�������գ����ң�ط����������������������Ӿԡ��������ʽ������ءˡʾ������������Ѿ�����ء�Ͼ��������޾������������۾¾��׾�騾��ľ��������ܥ�����ƾྫྷ�����������Ͼɾ����˾���������ƴ�Ҿ��ݾ������о��ξƾȾ����Ͼܾþ�ھ˾��ʾ�������������������ԧ֤�ѿ�����°�����������������濣������������������ػ������㭻�׶������������������ӻӶ��Ǽ�����ӡ����ܻ��H�����������������ҿ��Ӻ���ǡ����ɦ�����������������֬����寿��ڻ��¶�����ǰٻ��������������������л�������ף�㬰�Ԯ��Ƿ�Ȼ�ֻ����ѳ�����ʻ�̼��һ�������������������̦�����������������������ڼ���褴����ֻƤ�����������豫�����dz�˸�������ʿ����������������������ͻ�����ٮ����������ӦͶ��긼���뽿���ܻ����߷��߽Ϋ��ڼ����޴�����ͺ��ɾ�������������������참������ֿ���곡ָ��ӯ�����������˼�����λ��ã��ů͡���ұ��ⷱ�ζ����������۸Τܪ�����Ǿ�����٩�����Ӵ��ܼ������������Ʊ��ݺ���峦�涭�����ո������ප����������������ߦ�»�����ڹ�����������Ŀ������Ģ��ջ��ɻ���������ܢ���������ӻ����������բ���3����O��������������������������������߻��������ú���������ޯ����خ���稺������ռŻ����ø����칹��ʺ����ѱ�����٣���׺˺�㷺ԺݺҺӼ��кںκպʺĺ��ƺ׺źͺ��ԺۺкǺ�ª��������������������ں����Ժ������������غ��ݯ���������������̻��赺����ͼӺ��������Լ亵�����ֺ�������麺�����ú������������������հ����̬����٭����������������������������ϻ�����������⤹���Ż��������������������������맻ź������������ʸ�š�����ɸ���Ļ����ں̢����������ǡƨ�������õ�����������ӥ��������㧳����S]\|��\_s*[����������]\|��\_s*[����������]\|��\_s*[����������]\|�\_s*��\|��\_s*\%(ϩ\|Ϫ\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[�ס�]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|�\_s*[�]\|��\_s*Ѥ\|��\_s*��\|U\_s*m\_s*b\_s*e\_s*l\_s*l\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\|��\_s*��\|��\_s*��\|c\_s*e\_s*n\_s*t\_s*i\|��\_s*[��϶]\|��\_s*��\|�\_s*̥\|��\_s*��\|ŵ\_s*��\|��\_s*ͺ\|��\_s*��\|ŷ\_s*[�IJ�]\|V\_s*i\_s*o\_s*l\_s*a\_s*l\_s*e\_s*s\|N\_s*y\_s*m\_s*p\_s*h\_s*a\_s*e\_s*\%(a\_s*c\_s*e\_s*a\_s*e\|o\_s*i\_s*d\_s*e\_s*a\_s*e\)\|��\_s*��\|�\_s*ƻ\|��\_s*\%(��\|��\_s*��\)\|Ϸ\_s*��\|˾\_s*Ĭ\|��\_s*��\|��\_s*[��Ǧ]\|L\_s*a\_s*\%(b\_s*i\_s*a\_s*t\_s*a\_s*e\|m\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\)\|��\_s*��\_s*��\|ʾ\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|ت\_s*ͺ\|��\_s*��\|��\_s*��\|I\_s*\%(s\_s*o\_s*p\_s*y\_s*r\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|l\_s*l\_s*i\_s*c\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\)\|W\_s*i\_s*n\_s*t\_s*e\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*ʸ\|��\_s*[ë��]\|��\_s*[����]\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%([�ظ��ܻ�]\|��\_s*��\)\|7\_s*��\|��\_s*��\|4\_s*��\|��\_s*[ʬ��]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|͢\_s*[����]\|Ȼ\_s*[ϯϺ]\|�\_s*[���]\|��\_s*[���]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|Z\_s*i\_s*n\_s*g\_s*i\_s*b\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|³\_s*\%(��\_s*��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\)\|ή\_s*[��Υ]\|��\_s*��\|�\_s*��\|Һ\_s*ȭ\|��\_s*��\_s*��\|C\_s*\%([se]\|y\_s*c\_s*a\_s*d\_s*\%(i\_s*d\_s*a\_s*e\|o\_s*\%(p\_s*s\_s*i\_s*d\_s*a\|f\_s*i\_s*l\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\)\)\|h\_s*l\_s*o\_s*r\_s*a\_s*n\_s*t\_s*h\_s*a\_s*c\_s*e\_s*a\_s*e\|��\_s*��\|D\_s*Ź\|��\_s*��\_s*��\|a\_s*\%(s\_s*s\_s*y\_s*t\_s*h\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|c\_s*t\_s*a\_s*l\_s*e\_s*s\)\)\|��\_s*��\|��\_s*[������]\|��\_s*��\_s*Ʀ\|ۨ\_s*��\|��\_s*��\|��\_s*��\_s*\%(��\_s*[ǯ��]\|��\_s*[ǯ��]\)\|��\_s*��\|ɴ\_s*��\_s*��\|��\_s*¹\_s*��\|��\_s*ƣ\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(ˡ\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|P\_s*\%(a\_s*r\_s*i\_s*e\_s*t\_s*a\_s*l\_s*e\_s*s\|t\_s*e\_s*r\_s*i\_s*d\_s*o\_s*s\_s*p\_s*e\_s*r\_s*m\_s*\%(a\_s*l\_s*e\_s*s\|i\_s*d\_s*a\_s*e\)\|r\_s*i\_s*m\_s*u\_s*l\_s*a\_s*l\_s*e\_s*s\)\|A\_s*\%(p\_s*i\_s*a\_s*l\_s*e\_s*s\|r\_s*a\_s*l\_s*e\_s*s\|n\_s*t\_s*i\_s*m\_s*o\_s*n\_s*y\)\|s\_s*f\_s*o\_s*r\_s*z\_s*a\_s*n\_s*d\_s*o\|��\_s*[ŵ��]\|B\_s*\%(r\|��\_s*��\_s*��\)\|��\_s*ĥ\_s*��\|��\_s*��\_s*��\|��\_s*ʬ\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*¤\_s*��\|M\_s*\%(e\_s*r\_s*c\_s*u\_s*r\_s*y\|u\_s*s\_s*a\_s*l\_s*e\_s*s\|a\_s*r\_s*q\_s*u\_s*i\_s*s\_s* \_s*d\_s*e\_s* \_s*S\_s*a\_s*d\_s*e\)\|D\_s*o\_s*n\_s*a\_s*t\_s*i\_s*o\_s*n\_s* \_s*A\_s*l\_s*p\_s*h\_s*o\_s*n\_s*s\_s*e\_s* \_s*F\_s*r\_s*a\_s*n\_s*c\_s*o\_s*i\_s*s\_s* \_s*d\_s*e\_s* \_s*S\_s*a\_s*d\_s*e\|��\_s*\%(Ƿ\|��\_s*\%(��\_s*̣\|��\_s*��\_s*��\)\)\|T\_s*\%(e\_s*t\_s*r\_s*a\_s*c\_s*e\_s*n\_s*t\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|i\_s*n\|h\_s*e\_s* \_s*S\_s*i\_s*m\_s*p\_s*l\_s*e\_s* \_s*A\_s*P\_s*I\_s* \_s*f\_s*o\_s*r\_s* \_s*e\_s*v\_s*e\_s*n\_s*t\_s*-\_s*b\_s*a\_s*s\_s*e\_s*d\_s* \_s*X\_s*M\_s*L\_s* \_s*p\_s*a\_s*r\_s*s\_s*i\_s*n\_s*g\)\|��\_s*��\|��\_s*��\_s*��\|��\_s*¬\_s*��\_s*ư\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%([���]\|��\_s*��\|��\_s*��\)\|��\_s*\%([���]\|��\_s*��\)\)\|��\_s*̣\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*\%([����]\|��\_s*��\_s*[����]\)\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\)\)\|��\_s*��\|β\_s*��\)', - \ 'T' : '\%([�������˳��������ɼ��Ҹ�����ڽ�Ѳ���������۳���������ݽ�꾲������������Ĺゥ�����ƾ�η���䶡�����������ݽ����ȼ��ͧ����������۽�����Ĺ���������������ԥ����Ч�����������ܽ���������˺�̭��������ǯ����ӷֺܺ�ڢ��κ�˭��������ƿ���¢�������Ѹ��ݹ��Ǽƻ������ƺ�����������ܫ���������������Ƴ���۶������岳�������ڮ�ݥ��������ܪ�������ٵ��ֺ����߮��ƪе����즰�������������ƽ��������޹��ơ�������������Ʀ����������ƭ����Ƥ����ƣ������������ƫƥ�����������ո�ﰳ��������믿���æ������Ԧ����ѽ���������������ײ��ѽ��ѹ��ϳ���αͻ���ų�����������Ͽ�ڼ��������Ϳ޻���������������Ȏ��ӱ͹����ʻ���Թ�֥������������ų������ׯ�ŭ��ū�ڳ��ũ�����������ɡ������ץ��������������š�����ż��ſ���Ŷ������ŻŸ��źŲŪůŨű��Ű��Ŵܼ���챭�����ܨ����������������ţ����������������š��������������������������Ţ޸���������׷�Ǝ�ʾ��ʼ������������ŵ������̳���ض��۲���ϸ������̽���Ϫ�������ٴ���ܻ��ܿ���������ѳ����������㪱����γ�����ª������ڼ�����������ָ��ʴ������ϸ��Ⱥ��鲶������ڹ˷Ҿ�����������ѣ������ױ����������³������������������ٽ��ƿ����������븾����������������̢�����������Խϴ���˵���Ϻ�¤������ݶԯ���з��ˤ�����ض࿵�����������˾����ͿԻ�ڻ������ܦ������������Ƶ��⸷ѻ���������̹�Ϣ�Ď����׹����������ۺ��������������紺��N�������㾹���������ٻĿ�����������������������������������������������ٲ��Ŧ����������������������Ȥ��������ܺ�������Ľ��Ҭ��ļ������Ť�����ı����������������׭����������ذ������߭׬�������������ġ����ĵįŽ��������Ƭĸ��ķijĪĢ��ĭ��ƨĻĥĤĨȥħ������İĦĬĮĺĴ�ģIJĶĩīЦ����Ѳפ����دɪ��������������������ɳ���ղ�������ϡѡСο�������������������������漣��֮�ѻ������׷�����������������ڲ�������������������������������������٤������̯�����ֿ�ڸ�ȿ�ˬ���������ܽ��î��Ƣ���í�̱���۸������������������нԻ����վι�ì���ʾλ���Ƨ����٥Ʈ������á�����Ⱦ�䲹���ﴰ����٦��ɶ���ݾ�Źê��éڥ�������çä�ܱ纴������ͤɫ��맰�������������ܭ������ζε�����ɺ�ݰ�������ľ����鶩��ͣ�������Գ���������������Ӭ���ѹ�ҵ�������ͺ���������׼������������Ŭ���Ƶ�����«�ԡý�������ݽ�è���ã�۹��̴��ƿ�����ֻ����Ǥ�Ʊ����ý���ϰ���䶳�ٷɹ��������º����յ���δ����������������������й���������ٿ��Ӹ��þں������������߬������������߸�������ÿWö��ӷëó�ȿC÷ò����ý��ðôùøú��û����õñâ��پ�������ŧڤ��٧Ӷ��߷����������������������������������������������������ڭ��������ʿ��ڬ����������������������������������������������������������ж���Ա�ǿ�����Ĺ��ʲ֫�����­������Ω�����������������ί��ȯ����۴¿¾���¿�ï���Һ�ӣ��������߱��٣����崤������ŷ���߷����ڢ����������ᦨ�����ɽ���ڥ����覨�ȥ����ġ�žƩ���������ȥ����Ļ�ü���ԧ��������������������Ө����������ƨ����䨷��T]\|��\_s*[�ĎΎ���]\|��\_s*[�ȥƥĥ���]\|��\_s*[�ȤƤĤ���]\|��\_s*��\|��\_s*��\_s*��\|��\_s*[����]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*Ϸ\|��\_s*��\|��\_s*[���]\|��\_s*�\|��\_s*ľ\|��\_s*��\|��\_s*��\_s*��\|��\_s*[����]\|��\_s*[����]\|͸\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\|H\_s*y\_s*d\_s*r\_s*o\_s*c\_s*h\_s*a\_s*r\_s*i\_s*t\_s*a\_s*l\_s*e\_s*s\|��\_s*��\|��\_s*��\|��\_s*[��ƻ��]\|��\_s*[����]\|��\_s*ǯ\_s*��\|��\_s*[�׻�]\|A\_s*c\_s*o\_s*n\_s*i\_s*t\_s*u\_s*m\|ƶ\_s*��\|��\_s*��\|��\_s*��\|F\_s*e\|I\_s*r\_s*o\_s*n\|��\_s*¼\|��\_s*��\|��\_s*̼\|ɻ\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|ε\_s*��\)\|��\_s*[����]\|��\_s*\%(��\|��\_s*��\)\|ɹ\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[����]\|B\_s*a\_s*l\_s*a\_s*n\_s*o\_s*p\_s*h\_s*o\_s*r\_s*a\_s*l\_s*e\_s*s\|1\_s*\%(��\|0\_s*��\)\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\|E\_s*\%(u\_s*p\_s*h\_s*o\_s*r\_s*b\_s*i\_s*a\_s*l\_s*e\_s*s\|r\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\)\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(Ϸ\_s*Ƭ\|��\_s*��\)\|��\_s*\%([����]\|��\_s*��\|ܥ\_s*��\_s*�\)\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*[����]\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|�\_s*��\|��\_s*��\|��\_s*ެ\|��\_s*��\|J\_s*i\_s*a\_s*n\_s*g\_s*s\_s*u\|��\_s*��\|��\_s*[����]\|��\_s*ë\|��\_s*��\|��\_s*Ϫ\_s*��\|��\_s*��\|��\_s*��\|��\_s*[����]\|��\_s*��\|��\_s*��\_s*��\|��\_s*[����]\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|Ϣ\_s*��\_s*[����]\)\|��\_s*\%(��\|��\_s*˷\)\|��\_s*Ƣ\|��\_s*��\|��\_s*��\|��\_s*[ڳ��]\|��\_s*��\|��\_s*\%(ͼ\|��\_s*��\)\|��\_s*��\|��\_s*��\|ͱ\_s*Ю\|̵\_s*��\|��\_s*\%(��\|��\_s*��\)\|�\_s*��\|��\_s*��\|P\_s*\%(\.\_s*S\_s*\.\|o\_s*l\_s*y\_s*\%(g\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\|c\_s*a\_s*r\_s*p\_s*i\_s*c\_s*a\_s*e\)\|a\_s*n\_s*d\_s*a\_s*n\_s*a\_s*l\_s*e\_s*s\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|ж\_s*��\|Ʋ\_s*��\|ǽ\_s*[ʸǷ]\|��\_s*��\|��\_s*̱\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|M\_s*\%(e\_s*n\_s*i\_s*s\_s*p\_s*e\_s*r\_s*m\_s*a\_s*c\_s*e\_s*a\_s*e\|o\_s*n\_s*o\_s*\%(p\_s*e\_s*t\_s*a\_s*l\_s*a\_s*e\|c\_s*\%(h\_s*l\_s*a\_s*m\_s*y\_s*d\_s*e\_s*a\_s*e\|o\_s*t\_s*y\_s*l\_s*e\_s*d\_s*o\_s*n\_s*e\_s*a\_s*e\)\)\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*\%(��\_s*[�ȥ��]\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*[����ॢ]\|��\_s*\%(��\|��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*��\_s*\%(��\|��\_s*��\)\)\|��\_s*\%(��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*[�ե�]\)\|��\_s*\%([����]\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%([�ɥ�]\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*[������]\|��\_s*��\)\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\|Ϣ\_s*ʸ\_s*��\)\|\\\_s*T\_s*e\_s*X\|��\_s*��\_s*��\|ʸ\_s*��\_s*��\|t\_s*e\_s*\%(r\_s*a\|m\_s*p\_s*o\_s*r\_s*a\_s*r\_s*y\)\|��\_s*��\|��\_s*\%([����]\|��\_s*��\_s*��\_s*��\_s*��\_s*��\)\)', - \ 'U' : '\%([����Ⱥ��ɶ������ἷ�������ƶ���ڰ����ѽ��뼿������å�����ѽ�������ִ���ء�������¥��ӹ����������ⱳ����ư뭱������������վ�������ž�������𱴵���Ϊ�Ų�����������ر���������󨱲���山���������۲��������񱷸����¹��������ϻ��������������ڴ︽���̱ǰ�����������ֶ����̽��������޲�墱��ⳤز����������ﷵ�����庨��������΢���ױ���������Ӻ��屯Ĭ��Σݵ�汵���²����ͫ���˷Ⱬ�DZ���������������ڽͭ�ɼ��ޢ��Ƥ���ձ������񻾵�ѵ���ھв�ͷ���α������������仺ǿ���⤦�������զԥ��姵��U]\|��\_s*��\|��\_s*��\|��\_s*��\|ϵ\_s*��\|��\_s*��\_s*��\|��\_s*��\|թ\_s*��\_s*��\|��\_s*��\|ͥ\_s*\%(��\_s*[�ɰ�]\|��\_s*��\)\|��\_s*��\|��\_s*²\|��\_s*��\|ˢ\_s*��\|��\_s*��\|��\_s*��\_s*[Ƭ��]\|��\_s*�\|��\_s*Ǽ\|�\_s*��\|�\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*Ļ\_s*��\|ø\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\|̣\_s*��\|��\_s*��\|A\_s*r\_s*i\_s*s\_s*t\_s*o\_s*l\_s*o\_s*c\_s*h\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|��\_s*��\|��\_s*��\_s*��\|�\_s*��\|��\_s*Ϻ\|��\_s*��\|��\_s*[������]\|��\_s*\%(��\|��\_s*��\_s*��\)\|C\_s*u\_s*c\_s*u\_s*r\_s*b\_s*i\_s*t\_s*a\_s*l\_s*e\_s*s\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*ǽ\|��\_s*\%(��\_s*��\|ͭ\_s*��\)\|��\_s*\%([����]\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*��\_s*��\)\)\|ñ\_s*\%(��\|��\_s*��\)\|��\_s*\%([���ˡ�]\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*\%(��\_s*��\|��\_s*��\)\)\)', - \ 'V' : '\%([�����֢ͣ��ǧ��Ӣ��˥�V]\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|v\_s*e\_s*r\_s*s\_s*u\_s*s\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\| \_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%([���ܥȥ�]\|��\_s*\%(��\_s*��\_s*��\|��\_s*[����]\)\)\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\|��\_s*\%([��ȥ�]\|��\_s*��\|��\_s*��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\)\)\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%([�ɥ�]\|��\_s*��\_s*��\|��\_s*��\_s*��\)\)\|��\_s*��\_s*��\|��\_s*Ĺ\_s*��\|��\_s*ľ\|��\_s*\%(��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*\%(��\|��\_s*��\)\)\|��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\_s*\%(��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*\%(��\|��\_s*��\)\)\)\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\)\)\|��\_s*\%([����֥Х���]\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*\%(��\|��\_s*[����]\)\)\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*\%([����]\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*\%([����]\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*��\_s*\%(��\|��\_s*��\_s*\%(��\|��\_s*��\_s*��\_s*��\_s*��\)\)\)\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*��\|��\_s*��\)\)\|��\_s*\%([�����]\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%([�ȥ���]\|��\_s*��\)\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*\%(��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%([����]\|��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\|��\_s*[����]\)\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*[���䥢]\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\)\)\|��\_s*\%([���]\|��\_s*\%([���֥�]\|��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*\%([�顼]\|��\_s*��\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\|��\_s*��\_s*��\)\)\|��\_s*\%([����]\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\)\)\|��\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\)\)\|��\_s*\%(��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\)\)', - \ 'W' : '\%([���򲧽����������˽ﲴͺ����Ⱥ��ɶ���ʦԦ���ἷ�������ƶ���ڰ������뼿������å���ѽ����������ء�������¥��ӹ����������ⱳ����ư뭱������������վ�������ž�������𱴵���Ϊ�Ų���������ر���������󨱲���山���������۲��������񱷸����¹��������ϻ��������������ڴ︽���̱ǰ�����������ֶ����̽���������墱���ز����������ﷵ�����庨��������U��΢���׻᢬�������Ӻ��屯Ĭ��Σݵ�汵���²����ͫ���˷Ⱬ�DZ���������������ڽͭ�ɼ��ޢ��Ƥ�ձ������񻾵�ѵ���ھв�ͷ���α������������仺ǿ���⤦�����ܲ����������������ϴ��ѽѴ����ֲҺҶȵ������ɡ�ب����˺�����о���Ƹ���޾�������������������׿׾�б���������IJ��ƻ�Ĺ����������ʻ�駷�������������Ų���ѯ��뻲���Ƚ�����ռ㰿�������´ĸ���ӻͯ��Ͱ����ʬ����������ʨ���������ʤ�������ȣץ���W]\|��\_s*[���񎳥���]\|��\_s*[��񥦥��]\|��\_s*[��񤦤��]\|��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|ϵ\_s*��\|��\_s*��\_s*��\|��\_s*��\|թ\_s*��\_s*��\|��\_s*��\|ͥ\_s*\%(��\_s*[�ɰ�]\|��\_s*��\)\|��\_s*��\|��\_s*²\|��\_s*��\|ˢ\_s*��\|��\_s*��\|��\_s*��\_s*[Ƭ��]\|��\_s*�\|��\_s*Ǽ\|�\_s*��\|�\_s*��\|��\_s*��\|��\_s*��\_s*Ļ\_s*��\|ø\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\|̣\_s*��\|��\_s*��\|A\_s*r\_s*i\_s*s\_s*t\_s*o\_s*l\_s*o\_s*c\_s*h\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|��\_s*��\|��\_s*��\_s*��\|�\_s*��\|��\_s*Ϻ\|��\_s*��\|��\_s*[������]\|��\_s*\%(��\|��\_s*��\_s*��\)\|C\_s*u\_s*c\_s*u\_s*r\_s*b\_s*i\_s*t\_s*a\_s*l\_s*e\_s*s\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*ͥ\|��\_s*˺\_s*��\|��\_s*��\|��\_s*��\_s*��\|(\_s*��\_s*)\|��\_s*[����]\|��\_s*��\|��\_s*��\|��\_s*��\|Y\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%(��\|��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*[ͳ��]\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*٥\_s*�\|��\_s*\%(��\|ʿ\_s*��\_s*��\_s*��\)\|ݿ\_s*��\_s*��\_s*٥\|��\_s*\%(��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\)\)\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*\%([�ץ�]\|��\_s*��\_s*��\)\|��\_s*\%([����]\|��\_s*��\_s*��\_s*��\)\)\|��\_s*��\_s*��\|��\_s*\%([�ࡼ]\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\)\)\|��\_s*\%(��\_s*[������]\|��\_s*��\|��\_s*\%(��\_s*\%(��\|��\_s*��\)\|��\_s*\%(��\|��\_s*��\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\)\)\)\|��\_s*\%(��\|��\_s*[�ȥ�]\)\)\|��\_s*��\_s*��\_s*��\|w\_s*e\_s*b\_s*��\_s*\%(��\_s*��\|��\_s*\%(��\|��\_s*��\)\)\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*\%([����]\|��\_s*\%(��\|��\_s*��\_s*��\)\)\|��\_s*\%(��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\)\|��\_s*\%(��\_s*[��]\|��\_s*��\_s*��\_s*��\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\)\)\)\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|T\_s*\%(h\_s*e\_s* \_s*W\_s*o\_s*r\_s*l\_s*d\_s* \_s*W\_s*i\_s*d\_s*e\_s* \_s*W\_s*e\_s*b\_s* \_s*C\_s*o\_s*n\_s*s\_s*o\_s*r\_s*t\_s*i\_s*u\_s*m\|u\_s*n\_s*g\_s*s\_s*t\_s*e\_s*n\)\)', - \ 'X' : '\%([�������������������������������ا秷���ߦ�X]\|��\_s*[����������]\|��\_s*[����������]\|��\_s*[����������]\|��\_s*��\_s*\%(��\_s*��\|��\_s*��\_s*��\)\|��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\)\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*\%(��\_s*\%(��\|��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\|��\_s*��\_s*\%(��\_s*��\|��\_s*��\)\)\|E\_s*x\_s*t\_s*e\_s*n\_s*s\_s*i\_s*b\_s*l\_s*e\_s* \_s*M\_s*a\_s*r\_s*k\_s*u\_s*p\_s* \_s*L\_s*a\_s*n\_s*g\_s*u\_s*a\_s*g\_s*e\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\)\|��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\)\)', - \ 'Y' : '\%([�ֲ��غ�������˩շ��޷����ڡ����ڴ�������������ֻۻ�����������������������þ��ӱٵ���㷽���İ��������˧��ȵ��������������׫խ��ۡ�����������������ƫ��ߡ��������������������������ٹ�������������������������������������������������������βž�������ա��Ю�����ô����������ڵ;�Ӹ�����������ǽͽDz����¿�������ͻͷ���Ϳ즤������μ��д�İ�������˭������Ƿ����ְ����������쪾�ற���ᾲ��������͸���۷�����Ͳإ��������ͤͨ����ͱͻ͹ͯͰʹ��ͼͩͪ��ͧͺͫͭ����������͡��ͷ�������ͳ������͢����·��������ͮ������竤掲��������׶׵���������϶��������������������̴��ߺ�̤����ӷ��������Ų������ݳ�����Ͷư�ݡ����������ȵ������ܦ��ɵ�述����������ڿ��Ĺ�Ǣ��������̿��쵸Ÿವ������ż���������ϫ��������ĺ�����׻��������к��������ط���Ү������ͦ�����ܡ�����Ǯʰ���������ᰱ�����˻�ް�������������Ϯ�ס����ӱ��������©��ĩ����寱��۱İ��Ľ�˻��С������ݫ�����׸�������ԩ۵�����������������ʰ�ݻ������ְ�յ��׮����I���������������ΰ�𨱡�������ֱ��������������۩���۰��д��ذ��Ű�1��������ڴ�Ū��٥�������������ަ�̰��թ�Ⱥص����°����ذѰϱ�ԣ��������������и�����Ȱ�����ǡѦ��״��������ͣ��޻��������׳�԰ʳ豶���������������İΰڸް������������Ͱ��ֹ԰�������������������а�Ψ��ͬ������������հݰ��ڰ۵���������ԧ������İ��ø��������Ҳ��ݰ���������ͻ���Ϧ��������S�����ϵ��½�������������ͥ����²����۴����ݬ���������������ٯ��������������̼�ֳ쮼��칽��̡ҡԡաӻ�����šץ����̰���ǫ��͵���ٰ׵��ݹ�������Ȭ���ë��׽�����������Ǹ�������ܿ���������ͼ�������������뻦���輭���٧֧��ߡ�������ק��������觫�ԥ������ۦ�Y]\|��\_s*[�֎Վ���]\|��\_s*[��楤��]\|��\_s*[��椤��]\|��\_s*��\_s*��\|ݿ\_s*��\_s*��\|��\_s*��\|��\_s*Ƹ\|��\_s*��\|��\_s*��\|y\_s*o\_s*\%(t\_s*t\_s*a\|c\_s*t\_s*o\)\|4\_s*\%([�������]\|��\_s*��\|��\_s*��\)\|¾\_s*��\|��\_s*��\|δ\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[�Ҹ�]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[����]\|Ī\_s*[�Ұ�]\|��\_s*��\|��\_s*��\|8\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|ɴ\_s*��\|L\_s*i\_s*l\_s*i\_s*\%(o\_s*p\_s*s\_s*i\_s*d\_s*a\|a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\)\|��\_s*\%(ͺ\|��\_s*��\)\|Ĺ\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|E\_s*\%(u\|��\_s*��\_s*��\)\|��\_s*��\|J\_s*u\_s*\%(l\_s*i\_s*a\_s*n\_s*i\_s*a\_s*l\_s*e\_s*s\|n\_s*c\_s*a\_s*l\_s*e\_s*s\)\|��\_s*ë\|��\_s*��\|ɨ\_s*��\|��\_s*ϻ\_s*��\|��\_s*��\|��\_s*±\|��\_s*��\_s*��\|��\_s*ȷ\|β\_s*��\|N\_s*a\_s*j\_s*a\_s*d\_s*a\_s*l\_s*e\_s*s\|��\_s*ɨ\|��\_s*��\|��\_s*��\_s*ƣ\|5\_s*[����]\|��\_s*[����]\|ب\_s*٦\|��\_s*��\|Ĭ\_s*��\|��\_s*��\|��\_s*Ӽ\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|ʸ\_s*��\|Ϻ\_s*[����]\|��\_s*[����]\|�\_s*��\|U\_s*\%(��\|��\_s*��\_s*��\|r\_s*t\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\)\|�\_s*[�Ļ�]\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\)\|��\_s*��\|��\_s*[����ﷻ]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*¹\_s*��\|��\_s*��\_s*��\|G\_s*\%(l\_s*u\_s*m\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\|r\_s*a\_s*m\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\|i\_s*n\_s*k\_s*g\_s*o\_s*p\_s*s\_s*i\_s*d\_s*a\)\|��\_s*��\|̵\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*ή\|��\_s*[�����]\|��\_s*[����]\|��\_s*[�ڻ�]\|��\_s*ɽ\|��\_s*��\_s*[��ú]\|��\_s*ӧ\|��\_s*[����]\|��\_s*\%([������]\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*[�ʱ��]\|D\_s*i\_s*a\_s*p\_s*e\_s*n\_s*s\_s*i\_s*a\_s*l\_s*e\_s*s\|��\_s*[��ǡ]\|��\_s*��\|��\_s*ζ\_s*��\|ξ\_s*��\|ή\_s*ŭ\_s*��\|��\_s*��\|��\_s*[����]\|R\_s*a\_s*f\_s*f\_s*l\_s*e\_s*s\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|��\_s*��\|��\_s*��\|��\_s*��\|ŷ\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*º\|��\_s*��\|T\_s*\%(h\_s*e\_s*l\_s*i\_s*g\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\|r\_s*o\_s*c\_s*h\_s*o\_s*d\_s*e\_s*n\_s*d\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\)\|M\_s*y\_s*r\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\|��\_s*��\_s*��\|��\_s*¹\|A\_s*r\_s*a\_s*c\_s*a\_s*l\_s*e\_s*s\|P\_s*\%(o\_s*a\_s*l\_s*e\_s*s\|l\_s*u\_s*m\_s*b\_s*a\_s*g\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\|r\_s*\%(o\_s*t\_s*e\_s*a\_s*l\_s*e\_s*s\|i\_s*n\_s*c\_s*i\_s*p\_s*e\_s*s\)\|a\_s*l\_s*m\_s*a\_s*l\_s*e\_s*s\)\|��\_s*��\|��\_s*[����]\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\)\|��\_s*��\)', - \ 'Z' : '\%([�������»¸·­«��֤����±³��²¯°��������������������¡£����¤ź����ȿ������������������������������������������������������������������դ���������������������ظ�������ƦפԦ����Ƭ�ݿ߹��޿���������������ֺ�����ɼ������ټ����Ķ�����Ժ��ټ����������������ľ�������㿬̭������ߩ������������ʿ�顿�����ױ��ӿ�������пԿҿؿѿտ��ǽ�������������ޮ�տ��������ٳа������屽���������������������л������������ġп����Ы����������������������ǡ��̼����ž�����������������վ��������ڷ��������������������Ǩ����������è�����ط���������۲�ٽɽμ�����ѽ�Ȼ������Ž���������ޭ�߱��������覽�۽����ڽ޽����޼�쳼��������������ߨ��������������к��ߧ������尽Ľ½��������ý������ƽ�֮���������������꼥��Ώ����߼������������������ֵ�����������������������ᪿλ����������̻�Яϩ�˱�ѻ���ż���б��褻������Τ�����߷�º������������ֿ������������ܪ�Ȼ�����������������������̻���쩻������ϻ»�߻�����ƺ����ú޺���ߺ�к��������ú�¢����µ�����������좭�����إ������������ڥ����٦Ƨ���Z]\|��\_s*\%(��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\)\|��\_s*[����������]\|��\_s*[����������]\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*[�����]\|��\_s*��\|z\_s*e\_s*\%(t\_s*t\_s*a\|p\_s*t\_s*o\)\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|ȯ\_s*��\|��\_s*��\|�\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*ˡ\|��\_s*��\|Ĵ\_s*��\|��\_s*[�᷺]\|�\_s*��\|��\_s*��\|F\_s*i\_s*g\_s*u\_s*r\_s*e\|��\_s*��\|G\_s*\%(��\_s*��\|��\_s*��\)\|D\_s*y\|��\_s*\%(��\_s*��\|��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|2\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|J\_s*\%(I\_s*S\_s*��\_s*��\_s*��\|��\_s*��\_s*��\|R\_s*��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\_s*ʺ\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*�\|k\_s*\$\_s*_\_s*{\_s*e\_s*f\_s*f\_s*}\_s*\$\|��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\|��\_s*\%(��\|��\_s*��\)\|��\_s*ī\|��\_s*��\|Ƚ\_s*��\|ϳ\_s*��\|��\_s*��\|Ĺ\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*Τ\|��\_s*[����ϴ������崽]\|C\_s*a\_s*b\_s*o\_s*m\_s*b\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*\%(��\|��\_s*[�ʷ�]\|��\_s*��\|��\_s*��\|��\_s*��\)\|��\_s*��\|��\_s*��\|ɳ\_s*��\|1\_s*\%(0\|1\_s*��\|8\_s*��\|2\_s*��\)\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\|��\_s*��\_s*��\|��\_s*��\|��\_s*��\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*\%(��\|��\_s*\%(��\_s*��\|��\_s*��\)\)\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*\%(��\|��\_s*��\)\|��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\_s*\%(��\_s*��\_s*��\_s*��\_s*��\_s*��\|��\_s*��\)\|��\_s*\%(��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\|��\_s*��\_s*��\_s*��\|��\_s*\%(��\_s*��\_s*��\|��\_s*��\_s*��\_s*��\)\|��\_s*��\_s*��\_s*��\)\)\)', - \ } -endfunction diff --git a/bundle/easymotion/autoload/EasyMotion/migemo/utf8.vim b/bundle/easymotion/autoload/EasyMotion/migemo/utf8.vim deleted file mode 100755 index 790fa91..0000000 --- a/bundle/easymotion/autoload/EasyMotion/migemo/utf8.vim +++ /dev/null @@ -1,56 +0,0 @@ -function! EasyMotion#migemo#utf8#load_dict() - return { - \ 'a' : '\%([ア餅母渉恤閔憐慌遽蚫鰒鮑袷淡∃主衽袵歩垤蟻麁凡塔蘭露著表霰非諍抗更検革改現競爭争洗殿鉱予豫粗嵐禮恠妖彪殺絢怪綺肖彩漢過謝謬誤礼操綾飴菴黯罨鱇鮟餡行闇按諳晏鞍暗鶩鬚鰓顎喘発肋豈嫂兄崇騰県購贖网罔咫與鼎中新邉邊辺恰頭價価値游遊畔畦堋杏梓与袙衵憬孔坑案侮窖強貴讐讎徒仇黶痣欺鮮字糾嘲薊姐姉曙炮焙炙蜚薹膏脂油危鐙虻泡蹟能痕踪跡東預聚輯纂遏蒐乢軋誂羹壓惇集陸敦暑淳篤熱扱暖温遖斡私圧焦汗央奥奧媼桜櫻塰蜑餘遍普周剰蔗余尼雨甘天凹押樗楝溢艶庵鰺網戯簣鯵味堊渥軛圷憧欠踵幄握芥齷厚漁鯏蜊蕣淺麻浅晰龝煥晢呆朖啓亮晄鑑滉昜旭聡光亨陽洸璋顯輝昿曠諦朗哲顕彬晶賈章商穐彰晃晧昭秋噫瞹穢阨埃欸姶隘文粟曖鮎藹饗靉挨間相哀葭趾朝晨愛跛蹇跫脚蘆葦芦鐐桎足淦赫燈赧紅旃朱茜藜銅赭閼曉暁垢皹皸絳灯證暴証赤呷扇黝榮碧葵蒼煽仰青穴和或哇婀当上阿編吾在併明開韲悪荒襾痾浴唖有挙遭逢嗚敢褪娃安厭充該彼擧會飫倦合亞揚椏宛遇飽惡當あa藍金@&&∧∩論∠銀会∀空域⇔←↓⇒→↑⌒後Ц亜米¨´`^’〜≒αÅΑアаАa]\|厦\_s*門\|廈\_s*門\|沫\_s*雪\|食\_s*蟻\_s*獣\|H\_s*a\_s*l\_s*o\_s*r\_s*a\_s*g\_s*a\_s*l\_s*e\_s*s\|浣\_s*熊\|菖\_s*蒲\|豆\_s*汁\|蛙\_s*鳴\_s*蝉\_s*噪\|塩\_s*梅\|家\_s*鴨\|趺\_s*坐\|Z\_s*\%(n\|i\_s*n\_s*c\)\|浮\_s*子\|痘\_s*痕\|窪\_s*地\|糠\_s*蝦\|醤\_s*蝦\|信\_s*天\_s*翁\|左\_s*沢\|雅\_s*典\|校\_s*倉\|小\_s*豆\|四\_s*阿\|鴉\_s*\%(片\|鷺\_s*合\_s*戦\_s*物\_s*語\)\|渾\_s*名\|綽\_s*名\|化\_s*野\|翌\_s*檜\|飛\_s*[魚鳥]\|総\_s*角\|木\_s*通\|通\_s*草\|L\_s*a\_s*r\_s*d\_s*i\_s*z\_s*a\_s*b\_s*a\_s*l\_s*a\_s*c\_s*e\_s*a\_s*e\|花\_s*鶏\|我\_s*\%(妻\|孫\_s*子\)\|数\_s*多\|奄\_s*美\|灰\_s*汁\|胡\_s*[床坐座葱]\|日\_s*明\|碩\_s*宏\|祥\_s*[仁彦]\|蜻\_s*蛉\|E\_s*\%(s\|i\_s*n\_s*s\_s*t\_s*e\_s*i\_s*n\_s*i\_s*u\_s*m\)\|生\_s*憎\|匕\_s*首\|英\_s*\%([保田]\|虞\_s*湾\|賀\_s*保\)\|靄\_s*[靄々]\|I\_s*\%(r\_s*i\_s*d\_s*a\_s*l\_s*e\_s*s\|P\_s*\%(電\_s*話\|ア\_s*ド\_s*レ\_s*ス\)\|D\_s*カ\_s*ー\_s*ド\|C\_s*\%(タ\_s*グ\|カ\_s*ー\_s*ド\)\)\|I\_s*\%(P\_s*電\_s*話\|C\_s*\%(タ\_s*グ\|カ\_s*ー\_s*ド\)\)\|走\_s*目\|鹹\_s*草\|馬\_s*酔\_s*木\|海\_s*[豹人女士部驢]\|R\_s*u\_s*b\_s*i\_s*a\_s*\%(l\_s*e\_s*s\|c\_s*e\_s*a\_s*e\)\|褐\_s*毛\_s*和\_s*種\|石\_s*蓴\|白\_s*馬\|水\_s*[黽馬綿]\|M\_s*a\_s*l\_s*v\_s*a\_s*l\_s*e\_s*s\|ト\_s*リ\_s*プ\_s*ル\_s*A\|公\_s*理\| \_s*ア\_s*ク\_s*シ\_s*ア\_s*ム\|ヒ\_s*素\|砒\_s*素\|京\_s*都\_s*高\_s*度\_s*技\_s*術\_s*研\_s*究\_s*所\|代\_s*入\|遺\_s*産\|抽\_s*象\|G\_s*o\_s*l\_s*d\|自\_s*動\_s*\%(現\_s*金\_s*取\_s*り\_s*扱\_s*い\_s*機\|預\_s*貯\_s*金\_s*機\)\|属\_s*性\|何\_s*か\|か\_s*つ\|お\_s*よ\_s*び\|セ\_s*ン\_s*ト\_s*キ\_s*ッ\_s*ツ\_s*ネ\|S\_s*\%(b\|i\_s*l\_s*v\_s*e\_s*r\)\|使\_s*用\_s*可\_s*能\|利\_s*用\_s*可\_s*能\|算\_s*法\|割\_s*り\_s*当\_s*て\|オ\_s*\%(レ\|ギ\_s*ュ\_s*ス\_s*タ\_s*ン\|ド\_s*レ\_s*イ\|ン\_s*グ\_s*ス\_s*ト\_s*ロ\_s*ー\_s*ム\|ル\_s*\%(ト\_s*キ\_s*ー\|タ\_s*\%([ーナ]\|ネ\_s*\%(ー\_s*ト\|イ\_s*ト\)\)\)\|ー\_s*\%([クガサトラル]\|ニ\_s*ン\_s*グ\|キ\_s*シ\_s*ン\|ブ\_s*リ\_s*ー\|バ\_s*ー\_s*ド\|ベ\_s*ル\_s*ジ\_s*ュ\|ギ\_s*ュ\_s*ス\_s*\%(ト\|タ\_s*ン\)\|ゾ\_s*ン\_s*ヌ\|ス\_s*\%(チ\_s*ン\|テ\_s*ィ\_s*ン\|タ\_s*ー\|ト\_s*\%(リ\_s*ア\|ラ\_s*リ\_s*ア\)\)\|ド\_s*リ\_s*ー\|ジ\_s*\%([ェー]\|オ\_s*ロ\_s*ジ\)\|デ\_s*ィ\_s*\%(オ\|エ\_s*ン\_s*ス\|シ\_s*ョ\_s*ン\|ト\_s*リ\_s*ア\_s*ム\)\|タ\_s*ム\|ソ\_s*\%(リ\_s*テ\_s*ィ\|ラ\_s*イ\_s*ズ\)\|セ\_s*ン\_s*テ\_s*ィ\_s*ッ\_s*ク\|ロ\_s*ラ\)\)\|配\_s*列\|バ\_s*イ\_s*ト\|ハ\_s*ル\_s*マ\_s*ゲ\_s*ド\_s*ン\|引\_s*数\|人\_s*工\_s*\%(現\_s*実\_s*感\|知\_s*能\)\|イ\_s*\%(ー\_s*ジ\_s*ス\|オ\_s*ン\|ソ\_s*ッ\_s*プ\)\|マ\_s*ル\_s*ド\_s*ゥ\_s*ー\_s*ク\|紫\_s*\%(陽\_s*花\|水\_s*晶\|石\_s*英\)\|A\_s*\%([tlrImc]\|n\_s*t\_s*i\_s*m\_s*o\_s*n\_s*y\|u\_s*s\_s*t\_s*r\_s*o\_s*b\_s*a\_s*i\_s*l\_s*e\_s*y\_s*a\_s*c\_s*e\_s*a\_s*e\|K\_s*C\_s*L\|S\_s*C\_s*I\_s*I\|s\_s*t\_s*a\_s*t\_s*i\_s*n\_s*e\|タ\_s*イ\_s*プ\|T\_s*O\_s*K\|N\_s*S\_s*I\|V\_s*シ\_s*ス\_s*テ\_s*ム\|L\_s*T\_s*キ\_s*ー\|ラ\_s*ン\_s*ク\|E\_s*R\_s*A\|D\_s*S\_s*L\_s*モ\_s*デ\_s*ム\|ド\_s*ラ\_s*イ\_s*ブ\|d\_s*a\|M\_s*ラ\_s*ジ\_s*オ\|b\_s*s\_s*t\_s*r\_s*a\_s*c\_s*t\_s* \_s*C\_s*o\_s*n\_s*t\_s*r\_s*o\_s*l\_s* \_s*M\_s*o\_s*d\_s*e\_s*l\|カ\_s*ッ\_s*プ\|ク\_s*ラ\_s*ス\|C\_s*ア\_s*ダ\_s*プ\_s*タ\)\|付\_s*録\|A\_s*\%([4型面]\|x\_s*o\_s*n\|B\_s*\%(型\|r\_s*o\_s*a\_s*d\)\|タ\_s*イ\_s*プ\|T\_s*&\_s*T\|t\_s*\%(o\_s*k\|h\_s*e\_s*n\_s*a\)\|ラ\_s*ン\_s*ク\|I\_s*エ\_s*キ\_s*ス\_s*パ\_s*ー\_s*ト\|/\_s*D\_s*コ\_s*ン\_s*バ\_s*ー\_s*タ\|ド\_s*ラ\_s*イ\_s*ブ\|d\_s*o\_s*b\_s*e\|カ\_s*ッ\_s*プ\|ク\_s*ラ\_s*ス\|p\_s*p\_s*l\_s*e\)\|応\_s*用\|エ\_s*\%([ニメアイー]\|ッ\_s*チ\|ン\_s*\%(ド\_s*ラ\_s*ン\|ジ\_s*ェ\_s*\%(ル\|リ\_s*ッ\_s*ク\)\|ゼ\_s*ル\)\|リ\_s*ア\|オ\_s*リ\_s*ア\|ス\_s*テ\|プ\_s*ロ\_s*ン\)\)', - \ 'b' : '\%([鯔鰡堀本凡盆煩梵骨凹歿鈕釦沒渤没穆睦濮樸目攴攵朴木僕墨卜牧星抱肪鵬冐氓鋩旄瑁袤儚蟒鉾貌旁网茆牟蒡甍胞謗蠎虻髦黽卯懋榜眸罔乏惘妨帽昴忙剖冒忘茅膀妄尨厖膨貿防紡滂茫望亡傍某謀暈拇保墓暮菩簿誉掘募姥謨模母干彫呆慕坊姆牡乾褒惚戊ぼ冖覓幎汨巾羃冪紅鼈瞥韈蔑塀抃遍辧瓣卞汳宀湎采辯辨辮眄冕勉娩弁邉可辺邊べ船房笛淵縁渊渕斑鞭樗椈太袋深蓋葢盖豚節勿佛物震勃蚋風鰤馼蚊聞文誣無蒲撃打不錻武振分蕪奉吹侮葺毋舞悔憮部廡嘸葡撲撫拭伏歩ぶ米謐人匹浸額鐚跛!広開繆別謬泯旻梹罎岷緡紊檳頻壜愍瓶鬢閔憫敏貧便帛辟百闢白杪″緲憑票猫鋲屏渺眇平錨苗秒描廟病尾火日媚靡糒枇贔未引琵瀰嵋備縻糜弾美眉弭濔比寐毘麋微び早速林尿針腹拂散払祓原塙蠻旛旙鑁鷭幡悗挽判棒絆版輓蕃板播礬阪坂磐番盤晩萬蛮万箱蠅芒挟伴蜂桴枹鉢撥働畠畑糞屎鼻花端離話V魅許秤筏罸魃拔閥橋走箸柱寞藐貘獏暴漠瀑麥縛博駁莫驀爆楳憊狽霾唄吠杯賣苺培煤黴貝焙賠買売陪倍梅媒跋伐末幕曝抜罰庭馬葉婆罵這化馳羽塲晴歯場芭刄刃張貼ばb“仏□■⊥下底×|‖−\∵麦ボバ][{}ブビБΒбβベb]\|ッ\_s*\%(ホ\_s*゙\|ヘ\_s*゙\|フ\_s*゙\|ヒ\_s*゙\|ハ\_s*゙\)\|ッ\_s*[ボベブビバ]\|っ\_s*[ぼべぶびば]\|ホ\_s*゙\|小\_s*火\|襤\_s*褸\|孟\_s*買\|P\_s*a\_s*e\_s*o\_s*n\_s*i\_s*a\_s*\%(l\_s*e\_s*s\|c\_s*e\_s*a\_s*e\)\|南\_s*瓜\|耄\_s*耋\|孑\_s*孑\|包\_s*丁\|ヘ\_s*゙\|袂\_s*別\|箆\_s*棒\|篦\_s*棒\|胼\_s*胝\|フ\_s*゙\|補\_s*任\|毒\_s*島\|醜\_s*[女男]\|山\_s*毛\_s*欅\|F\_s*a\_s*g\_s*a\_s*l\_s*e\_s*s\|布\_s*団\|茯\_s*苓\|V\_s*\%(字\|ネ\_s*ッ\_s*ク\|シ\_s*ネ\_s*マ\)\|附\_s*子\|付\_s*子\|鞦\_s*韆\|豊\_s*[前後]\|ヒ\_s*゙\|魚\_s*[籠篭]\|彌\_s*縫\|弥\_s*[漫縫]\|吃\_s*驚\|天\_s*鵞\_s*絨\|緬\_s*甸\|賓\_s*頭\_s*盧\|編\_s*木\|柏\_s*槙\|S\_s*a\_s*n\_s*t\_s*a\_s*l\_s*a\_s*l\_s*e\_s*s\|兵\_s*[衛法]\|表\_s*紙\|拍\_s*[板子]\|ハ\_s*゙\|囃\_s*子\|巴\_s*爾\_s*幹\|R\_s*o\_s*s\_s*a\_s*l\_s*e\_s*s\|薔\_s*薇\|蟠\_s*踞\|鈑\_s*金\|A\_s*n\_s*n\_s*o\_s*n\_s*a\_s*c\_s*e\_s*a\_s*e\|発\_s*条\|祖\_s*母\_s*さ\_s*ん\|梯\_s*子\|伯\_s*\%([林楽労]\|剌\_s*西\_s*爾\)\|莪\_s*原\|蝗\_s*虫\|飛\_s*[車蝗]\|掲\_s*示\_s*板\|プ\_s*ル\_s*コ\_s*ギ\|作\_s*業\_s*域\|オ\_s*ー\_s*ト\_s*バ\_s*イ\|基\_s*[礎底]\|フ\_s*ァ\_s*ゴ\_s*ッ\_s*ト\|背\_s*景\|北\_s*京\|ペ\_s*\%(キ\_s*ン\|テ\_s*ル\_s*ギ\_s*ウ\_s*ス\)\|臭\_s*素\|イ\_s*ギ\_s*リ\_s*ス\|B\_s*\%([面判級型y]\|細\_s*胞\|タ\_s*イ\_s*プ\|ド\_s*ラ\_s*イ\_s*ブ\|カ\_s*ッ\_s*プ\|ク\_s*ラ\_s*ス\|−\_s*ス\_s*プ\_s*ラ\_s*イ\_s*ン\|l\_s*u\_s*e\_s*N\_s*o\_s*t\_s*e\|u\_s*s\_s* \_s*E\_s*r\_s*r\_s*o\_s*r\|a\_s*c\_s*h\|e\_s*l\_s*l\_s*研\|ラ\_s*ン\_s*ク\)\|ホ\_s*ウ\_s*素\|B\_s*\%([h面判級型kiae]\|C\_s*兵\_s*器\|N\_s*F\_s*(\_s*B\_s*a\_s*c\_s*k\_s*u\_s*s\_s*-\_s*N\_s*a\_s*u\_s*r\_s* \_s*F\_s*o\_s*r\_s*m\_s*)\|B\_s*C\|タ\_s*イ\_s*プ\|u\_s*r\_s*k\_s*i\_s*n\_s*a\_s* \_s*F\_s*a\_s*s\_s*o\|フ\_s*レ\_s*ッ\_s*ツ\|ド\_s*ラ\_s*イ\_s*ブ\|カ\_s*ッ\_s*プ\|ク\_s*ラ\_s*ス\|M\_s*P\_s*フ\_s*ァ\_s*イ\_s*ル\|ス\_s*プ\_s*ラ\_s*イ\_s*ン\|S\_s*\%(D\|キ\_s*ー\|チ\_s*ュ\_s*ー\_s*ナ\|ア\_s*ン\_s*テ\_s*ナ\|デ\_s*ジ\_s*タ\_s*ル\)\|O\_s*X\_s*セ\_s*ッ\_s*ト\|I\_s*T\_s*N\_s*E\_s*T\|r\_s*o\_s*m\_s*i\_s*n\_s*e\|ラ\_s*ン\_s*ク\|o\_s*\%(h\_s*r\_s*i\_s*u\_s*m\|v\_s*i\_s*n\_s*e\_s* \_s*S\_s*p\_s*o\_s*n\_s*g\_s*i\_s*f\_s*o\_s*r\_s*m\_s* \_s*E\_s*n\_s*c\_s*e\_s*p\_s*h\_s*a\_s*l\_s*o\_s*p\_s*a\_s*t\_s*h\_s*y\|o\_s*k\|r\_s*o\_s*n\)\)\|硼\_s*素\)', - \ 'c' : '\%([コ恐怖惟怺※米暦轉頃壼鶤袞鯤坤狠艮獻琿悃很建棍魂菎蒟滾梱溷献痕渾墾恨懇根杪王挙泥裔樸鞐熟枹醴蛩蹊徑径溢毀零錯苔拒箏亊判斷諺理断盡尽辞琴言異事今壽寿鯒冀希礫鯉拱齣狛細腓昆拳瘤鮗兄近谺応應答是爰凩兀惚榾忽輿甑腰拵拗鐺鏝昿仰慌桁袷塙頏絖冦耗亙峺效晄覯糠匣逅閧扛湊羔礦爻壙盍洸鬨浤凰閤窖缸寇岡頁傚湟汞洽崗鮫伉訌誥冓敲磽鏗椌搆肓鍠矼砿犒淆呷鵁皐黌遘昴槹蚣肱肴熕胱猴扣杲蛤狎畊昊餃哽幌鱇峇嫦烋隍恆倥徨啌吭釦闔藁絋棡遑紘稾鴿詬哮困靠皋惶紺鈩絳閘蒙冰氷郡蛟槁候楮媾溘后蝗酵嚆犢稿亢哄睾慷梗笄郊効岬肛項巷鑛洪佼狡昂叩勾喉滉糀晃剛晧曠宏控恍侯煌港皓坑皎耿膏向江膠虹巧鴻鉱衡浩興厚耕弘綱抗購講恒溝薨鋼航孝更校行肯荒高皇光好槲梏谷釛尅斛棘轂哭詰告刻酷穀⌒冴虎觚壷胯鼓児漉糊媚古娘冱虚混粉辜湖虍放葫捏鈷痩鴣瞽詁箍錮蠱蛄粐滬估雇故沽転倒漕罟餬拠超込凅誇懲琥扈袴木蝴呱乕踰弧越孤菰跨壺楜黄股肥己女戸恋兒怙瑚戀夸皷滸濾瓠去濃乎杞こセ芹鬩旃錢刋箭羶筌孅阡栫舩纎濺舛甎銛簽湶茜槧吮薦癬斬倩痊孱擶贍纖仟磚燹揃綫喘涎荐饌槫濳沾筅蟾牋苫專翦亘鐫僣韆箋僊殱殲闡賎餞羨顫甅竰糎陝踐銓閃∨潺遷銑栴剪煽譫僉瞻践跣栓疝詮銭穿尠戰僭繊腺泉嬋仙擅淺鮮専扇蘚船浅線撰宣洗選煎戦尖先忙伜倅逼狭狹蝉旋鱈薛椄絏洩卩啜泄紲攝緤§渫刹褻浙竊截窃殺説拙摂節切蓆晰威裼績蹐迹蹠跖跡螫瘠勣籍晢夕鶺雪寂∫∬碩惜析席隻甥韲嘶犀菁瀞晟貰擠睛筬淒醒齊婿撕牲齏情萋穽躋歳栖棲掣腥逝惺斉臍旌悽整凄靖製晴迫塞攻瀬急勢世畆丗糶畝堰脊せク配椚檪櫪栩椡椪箜櫟含纐婚糞癖潛潜鵠凹窪縊跟頚軛珞頸諄鞋履窟狐轡覆沓碎砕条降件頽崩屑釘莖茎陸杙杭掘崛倔鶏鐃藥擽薬楠誓梳串釧與与挫籖鯀鯨鬮籤隈熊艸嚔藾叢鏈腐鎖Ξξ茸菌楔草圀邦國国漱嗽吻腔φ劫刧粂裙勳熏皹桾皸醺崑燻訓勲葷君委钁企咥銜桑某暝峅昏冥眛鮓比闇位鞍藏暗倉廚厨涅々〃ゝヽゞ仝ヾ公曇雲蜘佝栗狂包胡俥梍枢畔鐵★玄黒徠久孔桍窶暮懼駒苦朽区眩吁繰庫垢紅呉汲宮枸劬煦口9瞿工供吼怐玖貢九惧来來區組奇句狗鳩絎嶇衢くシ埀謐Σσ蘂蕋蕊痺褥茵鵐蔀鷸鴫霑入責蔵嶌了縞嶋島凋搾澀澁渋縛暫屡柴荵凌鎬忍簧慕舖↓襪認從从.舌扱罔虐Θθ秕粃椎椣尿貎肉臠猪衣榻黙蜆恵楙誠茂成繁惻鋪陣頻閾櫁樒鹽汐潮瑟蛭疾櫛隲隰嫉蟋悉漆躾膝失室沒鎭沈滴雫賤鎮靜静顰尓爾聢乍併然◇□■◆倖幸貭叱征質柵卯滋撓品鬼鍜錏錣痼凝而拉設垂萎栞襞吝咳什導汁験記徴著印☆〇銀城報調蝨虱白濕湿標七僕楚笞霜臀退斥尻後冩寫舍者砂卸柘炙#♯暹諜喋煮這西娑沙謝紗鯱奢赦洒捨鮭瀉妁鑠抉蹟勺炸決釋皙爍昔斫蜥刳芍酌爵折癪笏赤灼綽杓石尺赭写鷓積遮舎車射斜釈社洙麈殳蛛娶娵諏鬚侏繻銖蹙俶倏菽叔蓿戚肅淑夙粛宿縮殊趣珠恤卆蟀出洲泅楸綉溲遒酬鷲駲緝葺穐蹤繍螽讐甃萩楢逎讎售岫收驟舅囚姑蓚皺鞦銹脩輯醜習羞酋聚舟秀祝袖啾拾蒐収執衆愁就臭蹴週終褶州宗集秋椶棕朱撞種修周手首酒須儁惷悛濬雋皴墫蕣順蠢舜旬浚竣峻駿逡筍瞬俊蓁畛矧縉蔘鷏齔嗔忱譛袗譖娠疹哂脣怎晉鷆臻甄槙寢岑瀋箴軫榛秦襯診鉐津駸讖紳斟唇針呻蜃賑芯瞋振殿侵薪晨辰震宸森眞愼伸慎寝晋進深審親臣鍼申心宍信真新薯墅杵岨藷黍苜渚砠狙嶼處胥蜍苴曙背緒雎蔗庶処署所暑奬簫浹橸舂艢廂陞炒鍬庠獎梢璋將厰邵摺淞訟樅筱篠燮橡愴韶咲誚峭甞鯖敞聲懾稍腫政顳枩慯殤秤湫井星廠剿妝霎蛸劭觴愀升錆鬆樵囁鷦嶂醤青従慫逍倡竦爿薔笙樟装肖菖≦<湘誦聳檣稱声裳蒋蕉嘯慴盛精霄清鈔粧彰鏘悚蕭悄瀟哨焦憔匠鍾償瘴鞘漿頌詔沼妾請唱薑庄渉障奨娼床牀椒抄聖荘宵傷性相生銷召賞猩症昭燒猖昌少尚晶憧紹祥承證笑将焼照招章詳消証硝掌商昇小昃禝稷寔矚謖觸稙軾嗇屬穡拭属燭贖囑嘱織蝕式喰蜀殖諸初触埴植食職嗜笶姉士徙誣氏思染祗時弑滲梔摯肢詩咨祉刺泗輜厶強貲若至師舐咫只施誌呰匙示指締厮啻次賜熾趾駟漬笥贄此司如沚尸髭肆祀鷙諡枝篩豕巵始妛及弛絲浸閇翅緊揣伺糸駛痣矢衰死敷恃茨旨沁嘴蚩試釶俟瓷觜廝緇祠梓址詞之使獅志歯紫雌姿諮占絞視嗣識四恣阯侈幟卮凍史領竢市巳齒偲資止謚耆覗脂芝痴粢孜仕錙耜齎自屎茲岐〆嗤砥知私仔しカ糜癢粥痒麹輕骨業軽鰔鰈餉通瓶龜甕亀鴈獵鳫殯K猟雁釀鳧鳬髢氈鴨躱巛側厠廁磧瓦獺翡為裘皮〜紮→搦苧碓柄體軆躰躯身体鴉犂烏絡空唐榧茅揀坎澗扞莟丱拑盥嫺鑵蒄瞰淦稈康繝懽憾骭戡奐啣厂鐶讙澣羮寰羹嫻杆鸛歡豢歛罕酣陷皖篏捍瀚勸撼驩卷樌潤觀橄涵渙堪巫覡鉋随萱簪舘艱咸翰柬悍駻燗槓浣邯攷稽宦考棺潅閂煥鉗疳癇函凾鹹緘桓款箝諌諫轗旱坩侃鰥 館莞橇韓患灌勧菅奸刊柑肝看桿干緩寒嵌廣広竿貫巻敢漢環間陥喚閑監喊歓甘寛管慣完汗艦乾幹官観壁椛屍姓庇鞄芳蔓千鯑一勘蜻⊃影陰蔭景*棧梯筧庚辛柧門廉癩乞Κ川κ合’)〈《‘“”}{》〉囓柁鮖悴舵鰍梶錺餝飾篭籠還歸卻皈孵省顧槭楓却帰反返督髮帋守祇韮主裃雷髪紙鉦曲矩予鐘樺沫偏騙語潟刀模象仇固硬傍難容忝辱頑形方旁型肩風幽滓翳微掠綛纃絣緕擦糟鎹粕春轄戞劼猾瞎恰蛞∧蠍擔濶筈剋蝎曷羯喝餓聒鞨黠刮蘰鬘桂闊括嘗捷豁渇担滑松堅鰹功割戛活暈疽鵲瘡傘嵩重襲葛笠堵硴墻牆蠣蛎柿關掲罹抱踵嬶嚊拘関係貌顏郁薫顔母感釡罐窰鴎框叺喧竃竈窯釜缶蒲鎌數数槝栢膳傅畏賢橿姦樫爨炊圍喞託囲鈎『鉤「』」限鍵(傾禿蕪鏑頭齧被兜敵適哉必要称鼎鬲彜彝叶片悲哀愛鋺蛇鉄蜩神奏金楫裹磆餅徒褐糧粮膈覺∠埆蠖貉幗隱擴寉骼癨壑咯椁嚇茖愨槨膕掴覈殼穫狢霍礁恪擱匿撹攪喀廓較郭]】【〔〕[殻挌劃閣格隠覚矍革獲馘攫核鶴拡客隔角確蠏壞畍丐獪褂恠喙峡夬觧械揩醢匯廨誡誨嵬櫂隗茴徊迴枴懈价椢榿囘蛙瑰乖浬鰄傀糴柏街鳰懷蛔蠶蚕邂蟹潰壊恢腕芥垣楷會拐悔詼諧皆界疥魁偕改繪貝胛絵甲快灰槐晦懐介回塊解階廻戒開会怪海縢篝炬耀赫輝冠鑒鑑各屈鏡和代茄缺飼嫁華堝變狩上訶架何啝火日菓欠苅繋稼ヶ个噛譁科跏舸賭禍支窩課花刈渦嚼掛呵替葭柯畫駆嘩崋化霞蝌迦顆価馨家借蝦罅駈斯賈嘉易果戈廈哥買闕且克墟靴訛驅換踝描軻嗅價嗄可彼夥香歌河珂鹿個痂書假荷耶笳咼藉糅舁搗渮袈下萪貸厦禾貨咬寡箇卦苛譌枷掻過画ヵ黴遐兼醸翔仮佳蚊懸伽賀淅勝涸苟蝸謌夏枯暇かc・…塩閉倶錫呼∩取籐加交бТуЖоВЙЗзжЪЯУИвяшфлСКрпХЁОЭРФЫЩъБыШйхМкПгдмцНЛёаиэетАГЬюЕЮсьнщД♪┼╋×╂┿○●◎銅∪χΧ子чЧ株Ц珈、,色ク衝競構簡制≡変接カ┐┘┗┏┓┌┛└正コ¢シ℃セc]\|ッ\_s*[コセクシカ]\|ッ\_s*[コセクシカ]\|っ\_s*[子こせくしか]\|焜\_s*炉\|嫡\_s*妻\|二\_s*合\_s*半\|牛\_s*尾\_s*魚\|巨\_s*勢\|独\_s*楽\|居\_s*士\|特\_s*牛\|粫\_s*門\|甦\_s*生\|f\_s*o\_s*o\_s*t\_s* \_s*a\_s*n\_s*d\_s* \_s*m\_s*o\_s*u\_s*s\_s*e\_s* \_s*d\_s*i\_s*s\_s*e\_s*a\_s*s\_s*e\|傴\_s*僂\|A\_s*\%(r\_s*c\_s*h\_s*i\_s*c\_s*h\_s*l\_s*a\_s*m\_s*y\_s*d\_s*e\_s*a\_s*e\|p\_s*i\_s*a\_s*l\_s*e\_s*s\)\|U\_s*m\_s*b\_s*e\_s*l\_s*l\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\|台\_s*詞\|懺\_s*法\|前\_s*[妻栽]\|妹\_s*尾\|嘲\_s*笑\|儕\_s*輩\|斎\_s*次\|済\_s*[民々済]\|蒸\_s*[籠篭]\|救\_s*世\|莎\_s*草\|百\_s*[濟済]\|恭\_s*敬\|9\_s*[日月]\|秧\_s*鶏\|究\_s*竟\|釉\_s*掛\|典\_s*薬\_s*寮\|探\_s*湯\|球\_s*磨\|六\_s*合\|地\_s*祇\|都\_s*子\|群\_s*衆\|慈\_s*姑\|旧\_s*\%(訳\|唐\_s*書\)\|内\_s*蔵\_s*助\|H\_s*e\_s*l\_s*l\_s*e\_s*b\_s*o\_s*r\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|J\_s*u\_s*g\_s*l\_s*a\_s*n\_s*d\_s*a\_s*l\_s*e\_s*s\|R\_s*h\_s*a\_s*m\_s*n\_s*a\_s*l\_s*e\_s*s\|老\_s*舗\|望\_s*潮\|健\_s*か\|L\_s*a\_s*\%(u\_s*r\_s*\%(a\_s*c\_s*e\_s*a\_s*e\|o\_s*i\_s*d\_s*e\_s*a\_s*e\)\|m\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\|b\_s*i\_s*a\_s*t\_s*a\_s*e\)\|埋\_s*葬\_s*虫\|幣\_s*原\|卓\_s*袱\|桎\_s*梏\|柳\_s*葉\_s*魚\|蠹\_s*魚\|汚\_s*点\|惠\_s*雄\|舗\_s*石\|磯\_s*城\|W\_s*i\_s*n\_s*t\_s*e\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|倭\_s*文\|云\_s*[々云]\|明\_s*\%(々\_s*後\_s*日\|明\_s*後\_s*日\)\|7\_s*月\|7\_s*月\|文\_s*月\|4\_s*月\|4\_s*[分月]\|竹\_s*[篦刀]\|羊\_s*[齒歯]\|爲\_s*\%([留難置果送極手兼合業]\|ん\_s*方\|來\_s*り\|納\_s*め\)\|I\_s*\%(l\_s*l\_s*i\_s*c\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\|s\_s*o\_s*p\_s*y\_s*r\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\)\|素\_s*[魚人面]\|不\_s*[忍知]\|注\_s*連\|軍\_s*鶏\|髑\_s*髏\|三\_s*\%(味\|鞭\_s*酒\)\|吃\_s*逆\|差\_s*[別異]\|叉\_s*手\|輸\_s*[出贏]\|卒\_s*去\|B\_s*r\|隼\_s*[朗郎]\|笋\_s*[干羹]\|参\_s*差\|財\_s*産\|枌\_s*所\|縦\_s*容\|睫\_s*毛\|M\_s*\%(e\_s*t\_s*a\_s*c\_s*h\_s*l\_s*a\_s*m\_s*y\_s*d\_s*e\_s*a\_s*e\|u\_s*s\_s*a\_s*l\_s*e\_s*s\)\|Z\_s*i\_s*n\_s*g\_s*i\_s*b\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|S\_s*\%([eg]\|p\_s*e\_s*r\_s*m\_s*a\_s*t\_s*o\_s*p\_s*h\_s*y\_s*t\_s*a\|c\_s*i\_s*t\_s*a\_s*m\_s*i\_s*n\_s*e\_s*a\_s*e\)\|続\_s*\%(日\_s*本\_s*\%(紀\|後\_s*紀\)\|後\_s*撰\_s*和\_s*歌\_s*集\)\|離\_s*れ\_s*離\_s*れ\|掃\_s*部\|羚\_s*羊\|土\_s*器\|蝙\_s*蝠\|魚\_s*狗\|P\_s*\%(i\_s*p\_s*e\_s*r\_s*a\_s*\%(l\_s*e\_s*s\|c\_s*e\_s*a\_s*e\)\|t\_s*e\_s*r\_s*i\_s*d\_s*o\_s*s\_s*p\_s*e\_s*r\_s*m\_s*\%(a\_s*l\_s*e\_s*s\|i\_s*d\_s*a\_s*e\)\|o\_s*\%(t\_s*a\_s*s\_s*s\_s*i\_s*u\_s*m\|d\_s*o\_s*s\_s*t\_s*e\_s*m\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\)\)\|連\_s*枷\|枳\_s*殻\|機\_s*関\|落\_s*葉\_s*松\|凵\_s*繞\|檻\_s*車\|顴\_s*骨\|T\_s*\%(h\_s*a\_s*l\_s*i\_s*c\_s*t\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|u\_s*b\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\)\|南\_s*瓜\|量\_s*子\|山\_s*\%(海\_s*経\|梔\_s*子\|陽\_s*道\)\|蜉\_s*蝣\|陽\_s*炎\|破\_s*片\|脚\_s*気\|旗\_s*魚\|鍛\_s*[治冶]\|挿\_s*頭\|駕\_s*\%(籠\|輿\_s*丁\)\|長\_s*[月官]\|剃\_s*刀\|天\_s*\%(牛\|鼠\_s*矢\)\|帷\_s*子\|酢\_s*漿\_s*草\|O\_s*x\_s*a\_s*l\_s*i\_s*d\_s*a\_s*c\_s*e\_s*a\_s*e\|飛\_s*[沫白]\|曾\_s*て\|曽\_s*て\|燕\_s*子\_s*花\|牡\_s*[蛎蠣]\|民\_s*部\|部\_s*曲\|E\_s*\%(b\_s*e\_s*n\_s*a\_s*l\_s*e\_s*s\|l\_s*a\_s*n\_s*a\_s*l\_s*e\_s*s\)\|案\_s*山\_s*子\|梭\_s*\%(魚\|子\_s*魚\)\|蟷\_s*螂\|螳\_s*螂\|瓜\_s*\%(田\|呂\_s*根\)\|拍\_s*手\|瑕\_s*[瑾疵]\|東\_s*\%([風雲]\|海\_s*林\|京\_s*都\_s*立\_s*科\_s*学\_s*技\_s*術\_s*大\_s*学\)\|気\_s*[質触]\|(\_s*株\_s*)\|贏\_s*ち\_s*得\|歩\_s*兵\|恁\_s*く\|杜\_s*\%(若\|父\_s*魚\)\|梅\_s*花\_s*皮\|頴\_s*田\|膾\_s*炙\|契\_s*経\|中\_s*央\_s*処\_s*理\_s*装\_s*置\|伊\_s*藤\_s*忠\_s*テ\_s*ク\_s*ノ\_s*サ\_s*イ\_s*エ\_s*ン\_s*ス\|分\_s*類\|ス\_s*リ\_s*ー\_s*ズ\|範\_s*疇\|ト\_s*ラ\_s*ン\_s*プ\|水\_s*[鶏母夫手晶]\|複\_s*雑\_s*命\_s*令\_s*セ\_s*ッ\_s*ト\_s*計\_s*算\_s*機\|サ\_s*\%(ン\_s*チ\_s*ー\_s*ム\|エ\_s*ラ\|イ\_s*\%(ト\_s*カ\_s*イ\_s*ン\|ラ\_s*ス\|ク\_s*\%([ルロ]\|リ\_s*\%(ン\|ッ\_s*ク\)\)\|ボ\_s*\%(ウ\_s*ズ\|ー\_s*グ\)\|バ\_s*\%(ー\|ネ\_s*テ\_s*ィ\_s*\%(ッ\_s*ク\|ク\_s*ス\)\)\|リ\_s*ュ\_s*ー\_s*ム\|ダ\_s*ー\|フ\_s*ァ\_s*ー\|ネ\_s*リ\_s*ア\)\|ー\_s*\%(テ\_s*ィ\_s*フ\_s*ィ\_s*ケ\_s*ー\_s*シ\_s*ョ\_s*ン\|ク\_s*ル\|カ\_s*\%(ス\|ム\_s*ス\_s*ク\_s*\%(ラ\_s*イ\_s*ブ\|リ\_s*プ\_s*シ\_s*ョ\_s*ン\)\)\|キ\_s*\%(ュ\_s*\%(ラ\_s*ー\|レ\_s*ー\_s*\%(タ\_s*ー\|シ\_s*ョ\_s*ン\)\)\|ッ\_s*ト\)\)\)\|マ\_s*ド\_s*ラ\_s*ス\|茶\_s*筅\|ケ\_s*\%([月アイ]\|フ\_s*ェ\_s*ウ\_s*ス\|プ\_s*ス\_s*ト\_s*ラ\_s*[ムル]\|チ\_s*ャ\_s*ッ\_s*プ\|ン\_s*\%(タ\_s*ウ\_s*\%(リ\|ロ\_s*ス\)\|ブ\_s*リ\_s*ッ\_s*ジ\)\|ー\_s*\%([キジブプスン]\|ク\_s*ウ\_s*ォ\_s*ー\_s*ク\|ソ\_s*ン\|タ\_s*リ\_s*ン\_s*グ\|パ\_s*\%(ー\|ビ\_s*リ\_s*テ\_s*ィ\)\|シ\_s*ン\_s*グ\|リ\_s*ー\)\|ル\_s*\%(ト\|ベ\_s*ロ\_s*ス\|テ\_s*ィ\_s*ッ\_s*ク\|ビ\_s*\%(ム\|ー\_s*ニ\)\)\|ミ\_s*\%(カ\_s*ル\|ス\_s*ト\)\)\|キ\_s*\%(ヤ\_s*ノ\_s*ン\|プ\_s*ロ\_s*ス\|ケ\_s*ロ\|ュ\_s*\%([イーア]\|ヴ\_s*ェ\|ビ\_s*\%(ズ\_s*ム\|ス\_s*ム\)\|ロ\_s*\%(ス\|ッ\_s*ト\)\|レ\_s*ー\_s*タ\_s*ー\|ラ\_s*ソ\_s*ー\|リ\_s*\%(ー\|ウ\_s*ム\|ア\_s*ス\|オ\_s*シ\_s*テ\_s*ィ\)\)\|ア\_s*\%(ラ\|ー\_s*ラ\|ン\_s*テ\_s*ィ\)\|チ\_s*ン\|ト\_s*サ\_s*ン\|メ\_s*ラ\|マ\_s*イ\_s*ラ\|ッ\_s*カ\|レ\_s*ー\_s*ト\|ャ\_s*\%([ドパスブンラ]\|デ\_s*\%(ィ\|ラ\_s*ッ\_s*ク\)\|ビ\_s*\%([アンネ]\|テ\_s*\%(ィ\|ー\_s*シ\_s*ョ\_s*ン\)\)\|ベ\_s*ツ\|バ\_s*\%(リ\_s*[エア]\|レ\_s*ー\)\|ト\_s*ル\|シ\_s*ー\|サ\_s*リ\_s*ン\|タ\_s*ピ\_s*ラ\|ピ\_s*\%(ト\_s*ル\|タ\_s*\%(ル\|リ\_s*ズ\_s*ム\)\)\|プ\_s*\%(ラ\|シ\_s*ョ\_s*ン\|テ\_s*ン\|チ\_s*ャ\)\|セ\_s*\%(イ\|ロ\_s*ー\_s*ル\)\|ッ\_s*\%([ツトチプ]\|サ\_s*バ\|ス\_s*ル\|シ\_s*\%(ュ\|ン\_s*グ\|ャ\_s*\%(ー\|ブ\_s*ル\)\)\)\|ニ\_s*\%(オ\_s*ン\|ス\_s*タ\_s*ー\)\|ナ\_s*ル\|ノ\_s*\%(ン\|ー\_s*ラ\|ピ\_s*ー\)\|ミ\_s*ソ\_s*ー\_s*ル\|メ\_s*\%(ル\|ロ\_s*\%(ン\|ッ\_s*ト\)\)\|ロ\_s*\%(ル\|ウ\_s*ェ\_s*イ\|リ\_s*ン\|ラ\_s*イ\_s*[ンナ]\|ッ\_s*ト\)\|レ\_s*ッ\_s*ト\|リ\_s*\%([コーア]\|バ\_s*ー\|ブ\_s*レ\_s*ー\_s*シ\_s*ョ\_s*ン\|ッ\_s*ジ\|ン\_s*グ\)\|ズ\_s*ム\)\|リ\_s*\%(コ\|ス\_s*ト\|シ\_s*タ\_s*ン\)\)\|総\_s*角\|チ\_s*\%([タリンマア]\|ワ\_s*ワ\|ラ\_s*ー\|ル\_s*ド\|ム\_s*ニ\_s*ー\|コ\_s*リ\|ッ\_s*\%([プク]\|テ\_s*リ\_s*オ\|タ\_s*ゴ\_s*ン\)\|キ\_s*\%(ン\|ー\_s*タ\)\|ュ\_s*\%(ア\_s*ブ\_s*ル\|ー\_s*イ\_s*ン\_s*ガ\_s*ム\)\|ー\_s*\%([フトプクズ]\|パ\_s*ー\|タ\_s*ー\)\|ェ\_s*\%([ロスカコアン]\|ザ\_s*\%(レ\|ー\_s*レ\)\|ル\_s*\%(ニ\_s*ー\|シ\_s*ー\|ノ\_s*ブ\_s*イ\_s*リ\)\|リ\_s*\%(ー\|ス\_s*ト\|ッ\_s*シ\_s*ュ\|モ\_s*ヤ\)\|レ\_s*\%(ス\_s*タ\|ン\_s*コ\_s*フ\)\|ビ\_s*チ\_s*ェ\_s*フ\|ダ\_s*ー\|チ\_s*ェ\_s*ン\|ッ\_s*\%([トクカ]\|キ\_s*ン\_s*グ\)\|イ\_s*\%([スン]\|ニ\_s*ー\|サ\_s*ー\|シ\_s*ン\_s*グ\)\|ー\_s*\%(ン\|ザ\_s*レ\|ホ\_s*フ\)\)\|ャ\_s*\%([オフドインコリウ]\|ツ\_s*ネ\|ク\_s*ラ\|プ\_s*タ\_s*ー\|パ\_s*テ\_s*ィ\|ペ\_s*\%(ル\|ッ\_s*ク\)\|チ\_s*ャ\|ネ\_s*\%(ル\|ラ\_s*ー\|リ\_s*ン\_s*グ\)\|ッ\_s*\%([クト]\|ピ\_s*ー\|プ\_s*\%(マ\_s*ン\|リ\_s*ン\)\)\|タ\_s*\%(レ\_s*[イー]\|リ\_s*ン\_s*グ\)\|ル\_s*マ\_s*ー\_s*ス\|レ\_s*ン\_s*ジ\|モ\_s*ロ\|ー\_s*\%([チタトムジ]\|ビ\_s*ル\|ミ\_s*\%(ー\|ン\_s*グ\)\|リ\_s*ー\|ル\_s*\%([ズス]\|ト\_s*ン\)\)\|ラ\_s*ン\_s*ゴ\)\|ョ\_s*\%([ンコ]\|イ\_s*ス\|ム\_s*ス\_s*キ\_s*ー\|ー\_s*\%(ク\|サ\_s*ー\|カ\_s*ー\|キ\_s*ン\_s*グ\)\|ゴ\_s*リ\|ッ\_s*\%(プ\|ピ\_s*ー\|パ\_s*ー\)\|リ\_s*ソ\)\)\|座\_s*標\|喜\_s*劇\|互\_s*換\|共\_s*\%(通\|産\_s*主\_s*義\_s*者\)\|継\_s*続\|C\_s*\%([srfdDeRoa]\|言\_s*語\|型\_s*肝\_s*炎\|y\_s*p\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|P\_s*\%(U\|S\_s*(\_s*C\_s*o\_s*n\_s*t\_s*i\_s*n\_s*u\_s*a\_s*t\_s*i\_s*o\_s*n\_s*-\_s*P\_s*a\_s*s\_s*s\_s*i\_s*n\_s*g\_s* \_s*S\_s*t\_s*y\_s*l\_s*e\_s*)\)\|u\_s*r\_s*i\_s*u\_s*m\|M\_s*\%(U\|ソ\_s*ン\_s*グ\)\|タ\_s*イ\_s*プ\|T\_s*\%(ス\_s*キ\_s*ャ\_s*ン\|R\_s*L\_s*キ\_s*ー\)\|シ\_s*ェ\_s*ル\|S\_s*\%(V\_s*フ\_s*ァ\_s*イ\_s*ル\|チ\_s*ュ\_s*ー\_s*ナ\|ア\_s*ン\_s*テ\_s*ナ\)\|カ\_s*ッ\_s*プ\|ク\_s*ラ\_s*ス\|コ\_s*ン\_s*パ\_s*イ\_s*ラ\|C\_s*\%(R\_s*(\_s*C\_s*r\_s*e\_s*e\_s*d\_s*e\_s*n\_s*c\_s*e\_s* \_s*C\_s*l\_s*e\_s*a\_s*r\_s*w\_s*a\_s*t\_s*e\_s*r\_s* \_s*R\_s*e\_s*v\_s*i\_s*v\_s*a\_s*l\_s*)\|D\_s*カ\_s*メ\_s*ラ\)\|ド\_s*ラ\_s*イ\_s*ブ\|+\_s*+\|L\_s*\%(X\|O\_s*S\|I\_s*S\_s*P\)\|E\_s*S\_s*P\|A\_s*\%(D\|S\_s*[LE]\)\|ラ\_s*ン\_s*ク\|I\_s*S\_s*C\|h\_s*\%(l\_s*o\_s*r\_s*\%(a\_s*n\_s*t\_s*h\_s*a\_s*c\_s*e\_s*a\_s*e\|i\_s*n\_s*e\)\|r\_s*o\_s*m\_s*i\_s*u\_s*m\|a\_s*S\_s*e\_s*n\)\|O\_s*\%(B\_s*O\_s*L\|N\_s*T\_s*R\_s*O\_s*L\_s*キ\_s*ー\)\)\|ツ\_s*\%(ァ\_s*ー\|ィ\_s*リ\_s*ル\|ェ\_s*\%(ー\|ル\_s*ニ\_s*ー\|ラ\_s*ン\)\)\|炭\_s*素\|C\_s*\%([型m]\|M\_s*ソ\_s*ン\_s*グ\|タ\_s*イ\_s*プ\|カ\_s*ッ\_s*プ\|ク\_s*ラ\_s*ス\|d\_s*S\|D\_s*−\_s*R\_s*O\_s*M\|ド\_s*ラ\_s*イ\_s*ブ\|+\_s*+\|ラ\_s*ン\_s*ク\|O\_s*2\|o\_s*C\_s*\%(o\|O\_s*ス\_s*ト\_s*ア\)\|言\_s*語\)\)', - \ 'd' : '\%([共吃巴鑼錚鶏鳥響嫩緞丼呑曇貪鈍肭遠蚌溝鄰隣塢床処所年時鯲鰍鰌得徳讀獨髑毒読僮働萄桐閙ゞ嫐橈儂陶耨撓通鐃藤々恫瞳憧鬧⇔≡撞慟導〃仝洞堂瞠獰艟胴銅童動同道何弩怒退呶度堵奴解留融録取駑孥努戸止土ど瓰竕凸竍籵瓧禰泥捏溺寺鈿佃甸黏沺畋淀棯澱臀傳殿電照でヅ鶴辛強妻綱勤伝包筒做造作尽机月冢塚遣疲使突吊付漬津詰図積釣連づヂ中近力地痔持ぢ種棚倒濃彩逹畳諾゛濁玉默球魂騙谷館舘点岳嶽竹高凧蛸怛妲獺奪脱廼迺弟岱臺餒梯戴平内醍橙][題>≧第台代大鱈頼便誰樽懶怠灘斷椴黙旦煖彈暖談段断檀団團壇弾男抱舵橢炊佗堕荼拿打娜蛇楕陏駄唾拏雫沱立儺柁鴕溜妥朶陀墮駝出垂惰懦建兌澑田騨だd直◎.丶、,‥\.・…$“”↓†‡―┤達℃°独ド÷◇◆ダジДデΔδд∂d]\|ッ\_s*\%(ト\_s*゙\|テ\_s*゙\|ツ\_s*゙\|チ\_s*゙\|タ\_s*゙\)\|ッ\_s*[ドデヅヂダ]\|っ\_s*[どでづぢだ]\|ト\_s*゙\|都\_s*々\_s*逸\|褞\_s*袍\|S\_s*a\_s*u\_s*r\_s*u\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|C\_s*\%(u\|o\_s*p\_s*p\_s*e\_s*r\)\|満\_s*天\_s*星\|豆\_s*腐\|如\_s*何\|テ\_s*゙\|刑\_s*事\|粘\_s*葉\_s*装\|手\_s*間\|木\_s*偶\|丁\_s*[稚抹]\|蝸\_s*牛\|ツ\_s*゙\|頭\_s*[腦痛]\|チ\_s*゙\|調\_s*子\|茶\_s*碗\|知\_s*恵\|忸\_s*怩\|タ\_s*゙\|忠\_s*幸\|壁\_s*蝨\|伊\_s*達\|山\_s*車\|韃\_s*靼\|提\_s*婆\_s*達\_s*多\|太\_s*\%([刀宰鼓]\|平\_s*広\|上\_s*天\_s*皇\|政\_s*\%(官\|大\_s*臣\)\)\|乃\_s*[公毅]\|体\_s*操\|葮\_s*竹\|演\_s*\%(し\_s*物\|繹\_s*デ\_s*ー\_s*タ\_s*ベ\_s*ー\_s*ス\)\|コ\_s*ロ\_s*ン\_s*ビ\_s*ア\|ズ\_s*\%(ロ\_s*ー\_s*ス\|ッ\_s*ク\)\|イ\_s*ル\_s*カ\|医\_s*者\|博\_s*士\|文\_s*書\|行\_s*列\_s*式\|発\_s*見\_s*す\_s*る\|ハ\_s*ー\_s*グ\|拒\_s*否\_s*さ\_s*れ\_s*た\|破\_s*壊\_s*\%(者\|す\_s*る\)\|消\_s*滅\_s*子\|記\_s*述\_s*子\|D\_s*\%(論\|タ\_s*イ\_s*プ\|ド\_s*ラ\_s*イ\_s*ブ\|カ\_s*ッ\_s*プ\|C\_s*ブ\_s*ラ\_s*ン\_s*ド\|y\_s*l\_s*a\_s*n\|ラ\_s*ン\_s*ク\|a\_s*i\_s*s\_s*y\|e\_s*m\_s*a\_s*c\_s*s\)\|十\_s*進\_s*数\|ゼ\_s*ッ\_s*ケ\_s*ン\|復\_s*号\_s*化\|省\_s*略\|金\_s*剛\_s*石\|辞\_s*書\|D\_s*\%(b\|タ\_s*イ\_s*プ\|T\_s*\%(E\|P\_s*ソ\_s*フ\_s*ト\|M\_s*ソ\_s*フ\_s*ト\)\|M\_s*A\|ド\_s*ラ\_s*イ\_s*ブ\|カ\_s*ッ\_s*プ\|C\_s*\%(カ\_s*ー\_s*ド\|ブ\_s*ラ\_s*ン\_s*ド\)\|u\_s*b\_s*n\_s*i\_s*u\_s*m\|B\_s*\%(M\_s*S\|サ\_s*ー\_s*バ\)\|H\_s*C\_s*P\_s*\%(サ\_s*ー\_s*バ\|ク\_s*ラ\_s*イ\_s*ア\_s*ン\_s*ト\)\|y\_s*\%(s\_s*p\_s*r\_s*o\_s*s\_s*i\_s*u\_s*m\|l\_s*a\_s*n\)\|r\_s* \_s*P\_s*e\_s*p\_s*p\_s*e\_s*r\|ラ\_s*ン\_s*ク\|V\_s*D\_s*\%(ボ\_s*ッ\_s*ク\_s*ス\|シ\_s*ョ\_s*ッ\_s*プ\|ケ\_s*ー\_s*ス\|デ\_s*ッ\_s*キ\|ド\_s*ラ\_s*イ\_s*ブ\|オ\_s*ー\_s*デ\_s*ィ\_s*オ\|プ\_s*レ\_s*\%(ー\_s*ヤ\_s*ー\|イ\_s*ヤ\_s*ー\)\|ラ\_s*ッ\_s*ク\|レ\_s*コ\_s*ー\_s*ダ\_s*ー\|マ\_s*ル\_s*チ\|ビ\_s*デ\_s*オ\)\|O\_s*S\|o\_s*\%(c\_s*u\_s*m\_s*e\_s*n\_s*t\_s* \_s*\%(T\_s*y\_s*p\_s*e\_s* \_s*D\_s*e\_s*f\_s*i\_s*n\_s*i\_s*t\_s*i\_s*o\_s*n\|O\_s*b\_s*j\_s*e\_s*c\_s*t\_s* \_s*M\_s*o\_s*d\_s*e\_s*l\)\|C\_s*o\_s*M\_s*o\)\|e\_s*\%(g\_s*e\_s*n\_s*e\_s*r\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\|l\_s*a\_s*w\_s*a\_s*r\_s*e\)\|E\_s*\%(C\|L\_s*キ\_s*ー\)\|I\_s*\%(P\_s*ス\_s*イ\_s*ッ\_s*チ\|S\_s*K\)\|i\_s*\%(r\_s*e\_s*c\_s*t\_s* \_s*M\_s*e\_s*m\_s*o\_s*r\_s*y\_s* \_s*A\_s*c\_s*c\_s*e\_s*s\_s*s\|s\_s*t\_s*r\_s*i\_s*c\_s*t\_s* \_s*o\_s*f\_s* \_s*C\_s*o\_s*l\_s*u\_s*m\_s*b\_s*i\_s*a\|g\_s*i\_s*t\_s*a\_s*l\)\)\)', - \ 'e' : '\%([エ瘧腮偉鰓衿撰襟掾圜鹽垣檐媛爰捐¥覃黶篶湲蜒讌簷櫞悁渊轅渕閼魘薗艷鳶鴛焉嫣宛閻衍臙閹槐⌒援筵淹厭寃淵掩烟嚥圓沿宴蜿奄袁煙艶焔炎怨鉛園苑偃冤延婉遠堰燕演塩円縁刔刳抉猿狗描択鰕箙蛯蝦狄貊胡戎夷乢靨鉞噎戉咽粤桟悦閲謁奕伯懌亦蜴掖繹越役驛疫易益腋駅液殪纓裔曵頴洩瓔潁贏珱衡娃翳營瑩咏楹塋蠑瀛睿泳縊榮瑛暎曳盈郢影詠穎嬰鋭叡映営栄永衞衛得絵荏懷畫枝江繪衣猥慧惠獲回依會重柄杖餌榎画恵笑会囘選え━─┳┬┯┰┸┷┻┴Фф=⇔≡∈∋РрМмeН→英∃式!ΗηсСлЛΕЭεэエe]\|A\_s*\%([面判型級]\|V\_s*\%(機\_s*器\|女\_s*優\)\|B\_s*\%(型\|C\_s*順\)\)\|A\_s*\%([面判型級]\|V\_s*\%(機\_s*器\|女\_s*優\)\|B\_s*型\)\|M\_s*サ\_s*イ\_s*ズ\|M\_s*サ\_s*イ\_s*ズ\|豪\_s*物\|L\_s*\%(サ\_s*イ\_s*ズ\|L\_s*サ\_s*イ\_s*ズ\)\|L\_s*\%(サ\_s*イ\_s*ズ\|L\_s*\%(サ\_s*イ\_s*ズ\|教\_s*室\)\)\|羨\_s*道\|豌\_s*豆\|C\_s*\%(l\|h\_s*l\_s*o\_s*r\_s*i\_s*n\_s*e\)\|似\_s*\%(非\|而\_s*非\)\|桧\_s*原\_s*湖\|烏\_s*帽\_s*子\|吉\_s*方\|胞\_s*衣\|淮\_s*南\_s*子\|埃\_s*及\|干\_s*支\|岐\_s*路\|支\_s*繞\|壊\_s*[疽死]\|葡\_s*萄\|蛭\_s*子\|愛\_s*\%([理莉媛]\|知\_s*川\)\|N\_s*極\| \_s*n\_s* \_s*角\_s*形\|N\_s*\%([個極響]\|次\_s*元\|H\_s*K\_s*ホ\_s*ー\_s*ル\)\|斉\_s*魚\|兄\_s*鼓\|ヱ\_s*ス\_s*ビ\_s*ー\_s*食\_s*品\|S\_s*\%([波字席極]\|サ\_s*イ\_s*ズ\|N\_s*比\|F\_s*小\_s*説\)\|S\_s*\%([式極]\|サ\_s*イ\_s*ズ\|N\_s*比\|F\_s*小\_s*説\)\|穢\_s*[多土]\|X\_s*\%([軸脚]\|O\_s*醤\|染\_s*色\_s*体\)\|X\_s*\%([軸脚線]\|染\_s*色\_s*体\)\|海\_s*\%(老\|鷂\_s*魚\)\|帝\_s*都\_s*高\_s*速\_s*度\_s*交\_s*通\_s*営\_s*団\|ワ\_s*ー\_s*ク\_s*ス\_s*テ\_s*ー\_s*シ\_s*ョ\_s*ン\|欧\_s*\%(州\|羅\_s*巴\)\|歐\_s*\%(州\|羅\_s*巴\)\|ヨ\_s*ー\_s*ロ\_s*\%(ピ\_s*ア\_s*ン\|ッ\_s*パ\)\|ユ\_s*\%(ア\_s*ン\|ウ\_s*ロ\_s*ピ\_s*ウ\_s*ム\|リ\_s*イ\_s*カ\|ー\_s*\%(ロ\|ノ\_s*ス\|ニ\_s*ス\|ジ\_s*\%(ン\|ー\_s*ン\)\|ド\_s*ラ\|レ\_s*カ\|ラ\_s*\%(ス\|シ\_s*ア\)\|フ\_s*\%(ラ\_s*テ\_s*ス\|ォ\_s*\%(リ\_s*ア\|ニ\_s*ア\_s*ム\)\)\|ク\_s*リ\_s*ッ\_s*ド\|カ\_s*リ\)\)\|編\_s*集\|強\_s*調\|電\_s*子\_s*メ\_s*\%(イ\_s*ル\|ー\_s*ル\)\|発\_s*展\|評\_s*価\_s*す\_s*る\|符\_s*号\_s*化\|百\_s*科\_s*事\_s*典\|カ\_s*プ\_s*セ\_s*ル\_s*化\|オ\_s*\%(ー\|イ\_s*\%(ラ\_s*ー\|ゲ\_s*ン\)\)\|実\_s*行\|拡\_s*張\|例\_s*外\|感\_s*嘆\_s*符\|E\_s*\%(P\_s*O\|ド\_s*ラ\_s*イ\_s*ブ\|D\_s*ベ\_s*ー\_s*タ\|m\_s*a\_s*c\_s*s\|カ\_s*ッ\_s*プ\|a\_s*s\_s*t\|x\_s*e\_s*r\_s*c\_s*i\_s*s\_s*e\|タ\_s*イ\_s*プ\)\|ア\_s*\%([ンイ]\|ニ\_s*ド\|ー\_s*\%([マスル]\|ウ\_s*ィ\_s*ン\|ラ\_s*ン\|ニ\_s*ー\|ネ\_s*ス\_s*ト\|ミ\_s*ン\|シ\_s*ー\|リ\_s*ー\)\)\|設\_s*立\|E\_s*\%(r\|O\_s*F\|u\_s*\%(p\_s*o\_s*m\_s*a\_s*t\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\|r\_s*o\_s*p\_s*i\_s*u\_s*m\)\|U\_s*C\_s*コ\_s*ー\_s*ド\|P\_s*レ\_s*コ\_s*ー\_s*ド\|ド\_s*ラ\_s*イ\_s*ブ\|d\_s*i\_s*t\_s*i\_s*n\_s*g\_s* \_s*M\_s*A\_s*C\_s*r\_s*o\_s*S\|メ\_s*ー\_s*ル\|-\_s*m\_s*a\_s*i\_s*l\|カ\_s*ッ\_s*プ\|コ\_s*マ\_s*ー\_s*ス\|N\_s*T\_s*E\_s*R\_s*キ\_s*ー\|タ\_s*イ\_s*プ\|i\_s*n\_s*s\_s*t\_s*e\_s*i\_s*n\_s*i\_s*u\_s*m\|S\_s*\%(P\|C\_s*キ\_s*ー\)\|l\_s*k\|m\_s*a\_s*c\_s*s\)\|イ\_s*\%([ブヴアラー]\|ジ\_s*ェ\_s*ク\_s*ト\|フ\_s*ェ\_s*ク\_s*[トタ]\|コ\_s*\%(ー\_s*ル\|ラ\_s*イ\_s*[ズザ]\)\|プ\_s*シ\_s*ロ\_s*ン\|ミ\_s*ュ\_s*レ\_s*\%(ー\_s*[トタ]\|イ\_s*タ\)\|ベ\_s*ン\_s*\%(ト\|タ\_s*ー\)\|ノ\_s*ッ\_s*ク\|ネ\_s*ー\_s*ブ\_s*ル\|ギ\_s*リ\_s*ス\|ン\_s*グ\_s*\%(ラ\_s*ン\_s*ド\|リ\_s*ッ\_s*シ\_s*ュ\)\|ッ\_s*チ\|ヤ\_s*\%(ー\|リ\_s*ン\_s*グ\|フ\_s*ォ\_s*ン\|ホ\_s*ン\)\|グ\_s*ジ\_s*\%(ッ\_s*ト\|ス\_s*ト\)\|ク\_s*\%(ス\|ア\_s*リ\_s*テ\_s*ィ\)\|ス\_s*フ\_s*ァ\_s*ハ\_s*ン\|リ\_s*[ヤア]\|レ\_s*\%(ー\_s*\%(ス\|ザ\_s*ー\|サ\_s*ー\)\|イ\_s*\%(ン\|ザ\_s*ー\|サ\_s*ー\)\|ブ\_s*ン\)\)\|ウ\_s*\%(ー\|ジ\_s*ェ\_s*ー\_s*ヌ\)\)', - \ 'f' : '\%([梺麓冬汾枌濆′吩賁刎氛雰糞褌忿墳吻紛焚扮分粉舊旧顫揮故震篩奮隹古衾襖贅燻筆鰒総惣總絃房閼鬱塞鞴章郁史艦簡札耽鰾吭笛文罧節苳蕗淦舩艙舷舟船肥太懷懐≦≠≫<>≧≪渊淵渕縁葢盖再弍蓋双藤潭蒸鯊鱶楓殕瘋封諷黻怫祓彿髴拂憤恚慍二払沸拒防蔔輹愎蝠茯箙腓⊃⊇膨脹嚢梟袋含⊂⊆袱覆輻腹幅復馥服副複福誣孚普俯更膚腐坿狂履不増拊鯆布怖赴桴巫傅婦付訃賻振負蜉罘老附吹生経觸夫俘父臥践咐敷踏斧溥阜葺深仆譜符麩匐腑榑芙賦殖冨触孵麸柎府舗噴鋪降蹈風觝埠拭鮒郛伏俛經歩苻斑畉扶趺芬呎フ飜翻ふf鉄♀∀¶富⌒金佛仏偽誤♭弗浮FФΦφфフf]\|ッ\_s*フ\|ッ\_s*フ\|っ\_s*ふ\|鞦\_s*韆\|睾\_s*丸\|陰\_s*嚢\|乱\_s*吹\|相\_s*応\|E\_s*u\_s*p\_s*t\_s*e\_s*l\_s*e\_s*a\_s*c\_s*e\_s*a\_s*e\|回\_s*回\_s*教\|書\_s*司\|図\_s*書\_s*寮\|海\_s*蘿\|補\_s*\%(任\|陀\_s*[洛落]\)\|雲\_s*脂\|頭\_s*垢\|鳧\_s*鐘\|菜\_s*蕗\|款\_s*冬\|蒲\_s*団\|M\_s*y\_s*r\_s*t\_s*a\_s*l\_s*e\_s*s\|釜\_s*[中山]\|雙\_s*葉\|B\_s*u\_s*d\_s*d\_s*l\_s*e\_s*j\_s*a\_s*c\_s*e\_s*a\_s*e\|渓\_s*井\|G\_s*e\_s*r\_s*a\_s*n\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|2\_s*[人つ日]\|宿\_s*酔\|2\_s*\%([人つ日]\|通\_s*り\)\|□\_s*□\_s*□\|△\_s*△\_s*△\|×\_s*×\_s*×\|○\_s*○\_s*○\|帛\_s*紗\|河\_s*豚\|比\_s*律\_s*賓\|I\_s*r\_s*o\_s*n\|極\_s*東\_s*放\_s*送\|論\_s*理\_s*式\|形\_s*式\|ホ\_s*\%(ワ\_s*イ\_s*エ\|イ\_s*ル\|ル\_s*\%(マ\_s*\%(ン\_s*ト\|リ\_s*ン\)\|ム\_s*ア\_s*\%(ミ\_s*ド\|ル\_s*デ\_s*ヒ\_s*ド\)\)\)\|一\_s*杯\|関\_s*数\|機\_s*能\|汎\_s*関\_s*数\|修\_s*正\|ヒ\_s*\%(レ\|ュ\_s*ー\_s*[ズム]\)\|1\_s*\%(/\_s*f\_s*ゆ\_s*ら\_s*ぎ\|s\_s*t\)\|第\_s*1\_s*要\_s*素\|失\_s*敗\|ハ\_s*\%(エ\|ン\_s*ブ\_s*ル\|ロ\_s*ン\)\|柔\_s*軟\_s*な\|F\_s*\%(1\|カ\_s*ッ\_s*プ\|タ\_s*イ\_s*プ\|a\_s*\%(x\|m\_s*e\)\|l\_s*a\_s*v\_s*o\_s*r\)\|周\_s*波\_s*数\|エ\_s*フ\)', - \ 'g' : '\%([頃殺米諢魂權艮勤権鮴好蓙応駒若亊事琴毎如鏝埖込塵氷聲肥声腰拵心恋戀国石獄濠盒噛嗷敖軣哈壕熬刧遨拷囂轟毫傲鼇郷劫≡号豪剛梧后冴後吾寤宕珸茣児伍誤5極醐碁檎牾蜈唔篌庫娯悟忤呉期齬5互超五晤越子炬護兒瑚午沍ご〓郤鬩戟屐隙檄闃鷁撃激劇皃黥貎霓麑倪囈猊迎鯨芸藝齧囓蘖呟愿監芫痃广彦軒舷眩源儼衒絃弦験言諺現限幻玄減原蹴偈毛睨觧解実下拐夏げ靴腐種草口薬糞癖茱胡萸串嵎藕遇宮寓隅偶黒栗倉鞍蔵位昏麕羣郡群軍苦周包車狂食颶壷暮愚弘虞倶麌禺具惧壺組狗ぐ衣君嫌裂際牛崟憖斤垠岑吟銀圄禦圉馭魚嶷閠玉漁繞堯尭御曉嶢澆翹痙蟯驍僥仰業暁凝行謔瘧虐逆気義偽技切妓巍犠誼宜伎祁疑萓礒羲僞城蟻斬決擬沂議儀嶬艤着木曦犧欺戲魏祇戯ぎ川巛乾革皮側通殻辛絡柄烏鴉頷嚴阮鳫厳貫嵒偐巖岸厂⊃贋龕強翫岩鴈丸雁玩癌元願眼巌含頑上髮紙神髪鐘金係歸皈肯帰返潟方固語刀難型形鰹歹垳顔顏鎌窯蟇釜蒲蟹傘笠重號垣樫頭月合諤樂鍔壑鄂斈學齶萼愕嶽咢鰐額岳顎楽学既礙涯剴乂垓葢劾盖愾磑睚漑崕亥崖啀艾駭皚該咳階孩芥碍害鎧街凱慨概蓋骸外代峩狩我ヶ鵞駕訝変刈掛牙娥替畫駆ケ俄哦借呀果臥雅買蛾訛換河峨莪書芽貸衙画ヵ伽賀勝餓鵝が≫>g瓦≧ガゴχΕΗΣυΙΛαΨζρΒΝιΦφτλΠονψωΚΔΡδΤβΘΟπεΧΑΞσθηκΖΜξμΥΩギグゲгΓγГg]\|ッ\_s*\%(コ\_s*゙\|ケ\_s*゙\|ク\_s*゙\|キ\_s*゙\|カ\_s*゙\)\|ッ\_s*[ゴゲグギガ]\|っ\_s*[ごげぐぎが]\|コ\_s*゙\|小\_s*屋\|蒙\_s*御\_s*免\|巨\_s*頭\_s*鯨\|欣\_s*求\|独\_s*楽\|P\_s*e\_s*r\_s*s\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\|瞽\_s*女\|歩\_s*行\_s*虫\|向\_s*拝\|皐\_s*月\|穀\_s*潰\|寄\_s*居\_s*虫\|降\_s*魔\|格\_s*\%([間縁]\|天\_s*井\)\|恒\_s*河\_s*沙\|江\_s*\%([津湖商州]\|談\_s*抄\)\|豆\_s*[油汁]\|ケ\_s*゙\|蚰\_s*蜒\|景\_s*色\|化\_s*粧\|鴃\_s*舌\|稽\_s*古\|懸\_s*魚\|還\_s*[向俗]\|拳\_s*[万固骨]\|喧\_s*嘩\|顕\_s*界\|ク\_s*゙\|救\_s*世\_s*菩\_s*薩\|工\_s*合\|供\_s*[奉祭香進]\|紅\_s*蓮\|キ\_s*゙\|毬\_s*杖\|岐\_s*\%([南阜]\|セ\_s*ン\)\|棋\_s*将\_s*谷\|求\_s*\%([法道肥]\|不\_s*得\_s*苦\|聞\_s*持\_s*法\)\|A\_s*g\|S\_s*\%(c\_s*r\_s*o\_s*p\_s*h\_s*u\_s*l\_s*a\_s*r\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\|y\_s*m\_s*p\_s*e\_s*t\_s*a\_s*l\_s*a\_s*e\|i\_s*l\_s*v\_s*e\_s*r\)\|希\_s*臘\|杏\_s*葉\|餃\_s*子\|刑\_s*部\|カ\_s*゙\|搦\_s*み\|鑑\_s*真\|仮\_s*名\|蝦\_s*[蟆蟇]\|T\_s*y\_s*p\_s*a\_s*l\_s*e\_s*s\|鉤\_s*状\_s*部\|菓\_s*子\|甲\_s*斐\|会\_s*社\|ヌ\_s*ー\|G\_s*\%(O\_s*R\_s*O\|B\_s*y\_s*t\_s*e\|メ\_s*ン\|カ\_s*ッ\_s*プ\|タ\_s*イ\_s*プ\|ス\_s*ポ\_s*ッ\_s*ト\|パ\_s*ン\|n\_s*u\_s*s\)\|ニ\_s*ュ\_s*ー\_s*ズ\|ノ\_s*ー\_s*ム\|総\_s*司\_s*令\_s*部\|連\_s*合\_s*国\_s*軍\_s*総\_s*司\_s*令\_s*部\|ヒ\_s*ル\|ク\_s*ッ\_s*パ\|硝\_s*子\|ハ\_s*ボ\_s*ロ\_s*ー\_s*ネ\|瞿\_s*曇\|エ\_s*ー\_s*テ\_s*ボ\_s*リ\|ヨ\_s*ー\_s*テ\_s*ボ\_s*リ\|イ\_s*ェ\_s*\%(ー\_s*テ\_s*ボ\_s*リ\|テ\_s*ボ\_s*リ\)\|得\_s*る\|G\_s*\%([dae]\|o\_s*m\_s*o\_s*r\_s*t\_s*e\_s*g\_s*a\_s*c\_s*e\_s*a\_s*e\|M\_s*\%(T\|D\_s*(\_s*G\_s*e\_s*r\_s*m\_s*a\_s*n\_s* \_s*N\_s*a\_s*t\_s*i\_s*o\_s*n\_s*a\_s*l\_s* \_s*R\_s*e\_s*s\_s*e\_s*a\_s*r\_s*c\_s*h\_s* \_s*C\_s*e\_s*n\_s*t\_s*e\_s*r\_s* \_s*f\_s*o\_s*r\_s* \_s*C\_s*o\_s*m\_s*p\_s*u\_s*t\_s*e\_s*r\_s* \_s*S\_s*c\_s*i\_s*e\_s*n\_s*c\_s*e\_s*)\)\|メ\_s*ン\|C\_s*L\|c\_s*c\|カ\_s*ッ\_s*プ\|タ\_s*イ\_s*プ\|ス\_s*ポ\_s*ッ\_s*ト\|パ\_s*ン\|P\_s*L\|n\_s*u\_s*s\|I\_s*\%(N\_s*A\_s*(\_s*t\_s*h\_s*e\_s* \_s*G\_s*e\_s*n\_s*e\_s*r\_s*i\_s*c\_s* \_s*I\_s*n\_s*t\_s*e\_s*r\_s*a\_s*c\_s*t\_s*i\_s*v\_s*e\_s* \_s*A\_s*p\_s*p\_s*l\_s*i\_s*c\_s*a\_s*t\_s*i\_s*o\_s*n\_s*)\|F\_s*\%(フ\_s*ァ\_s*イ\_s*ル\|ア\_s*ニ\_s*メ\)\)\|U\_s*I\|N\_s*U\|O\_s*サ\_s*イ\_s*ン\|E\_s*T\_s*メ\_s*ソ\_s*ッ\_s*ド\)\|ヘ\_s*\%(ラ\_s*ル\_s*ド\|ル\_s*マ\_s*ン\)\|ド\_s*イ\_s*ツ\|成\_s*吉\_s*思\_s*汗\|ゼ\_s*\%(ラ\_s*\%(チ\_s*ン\|ニ\_s*ウ\_s*ム\)\|ム\_s*ク\_s*リ\_s*ッ\_s*プ\|ノ\_s*ア\|ン\_s*ト\_s*ル\_s*マ\_s*ン\|ネ\_s*\%(コ\_s*ン\|ラ\_s*\%(ル\|リ\_s*ス\_s*ト\)\)\)\|大\_s*\%(蚊\|学\_s*院\_s*生\)\|ジ\_s*\%([ムルジグノナオンー]\|プ\_s*シ\_s*ー\|ア\_s*ン\|イ\_s*ド\|ッ\_s*ド\|タ\_s*ン\|ゼ\_s*ル\|リ\_s*ア\_s*ン\|レ\_s*ッ\_s*ト\|ゴ\_s*ロ\|ラ\_s*\%(フ\|ル\_s*\%(ド\|デ\_s*ィ\_s*ー\_s*ノ\)\)\|ロ\_s*\%(ー\|ン\_s*ド\)\|バ\_s*ン\_s*シ\_s*ー\|ブ\_s*\%(リ\|ラ\_s*ル\_s*タ\_s*ル\)\|ベ\_s*\%(ル\_s*ナ\_s*ウ\|レ\_s*リ\_s*ン\)\|ネ\_s*ッ\_s*ト\|ョ\_s*\%(ッ\_s*ト\|ヴ\_s*ァ\_s*ン\_s*[ニナ]\|バ\_s*ン\_s*[ニナ]\|コ\_s*\%(ー\_s*ソ\|ン\_s*ダ\)\|ル\_s*\%(ジ\|ダ\_s*ー\_s*ノ\)\|ー\_s*\%(ジ\|ゼ\_s*ッ\_s*ト\)\)\|ャ\_s*\%(ン\|イ\_s*\%(ロ\|ル\_s*ズ\|ア\_s*ン\_s*[ツト]\)\|コ\_s*\%(モ\|メ\_s*ッ\_s*テ\_s*ィ\)\|ー\_s*マ\_s*ン\)\|ニ\_s*ー\|ュ\_s*\%([レネ]\|ゼ\_s*ッ\_s*ペ\|リ\_s*\%(ア\|ー\_s*ニ\|エ\_s*ッ\_s*タ\)\|ヌ\_s*\%(ヴ\_s*ィ\_s*エ\_s*ー\_s*ヴ\|ビ\_s*エ\_s*ー\_s*ブ\)\)\|ェ\_s*\%([リルフムマネ]\|ス\_s*チ\_s*ャ\_s*ー\|ロ\_s*ニ\_s*モ\|ラ\_s*\%(ー\_s*[トルド]\|ル\_s*\%(ド\|デ\_s*ィ\_s*ン\|ダ\_s*イ\_s*ン\)\)\|ミ\_s*ニ\|ニ\_s*ー\|ノ\_s*\%([アバ]\|ヴ\_s*ァ\|ワ\_s*ー\_s*ズ\|サ\_s*イ\_s*ド\)\|ン\_s*\%(マ\|ト\_s*\%(ル\|リ\_s*[ィー]\)\|ダ\_s*ー\)\)\)\)', - \ 'h' : '\%([ホ洞袰亡滅幌濠壕畚笨略艢檣炎焔仄朖朗塊程施滸殆幾缶熱解屠榾螢蛍骨細本※*糒恣縦擅星戟戈桙綻祠誇埃矛鉾堀頬褓鴇枋峯磅鞄峰垉篷勹皰朴抔怦棒泙棚堋呆豐麭膀舫弸蔀袍苞葬琺寳炮鵬寶繃鋒魴髣逢朋烹鳳彗箒俸焙蓬烽幇抱崩訪泡澎彷縫捧萌萠彭包胞倣邦飽庖疱奉豊硼報砲宝攴攵瀑蹼樮北哺欲譽餔保抛浦誉掘脯賞黼恍堡輔穗襃葆彫穂畝吼舖耄葡褒惚咆埔哮捕逋ほヘ謙遜篦廰廳貶胼諞篇駢褊蝙翩變∂遍返騙編扁変暼丿諛諂隔凹臍巳蛇蒂蔕瓸竡粨癖躄甓闢璧劈碧壁竝餅娉塀病閇聘坪嬖幤箆蔽并陛屏炳斃瓶幣弊併敝閉並屁折邉舳辺歴圧戸減邊へフ梺麓冬♭汾枌濆′吩賁氛雰糞褌忿墳吻紛焚扮分粉舊旧顫揮故震篩奮隹古衾襖贅燻鰒陰総惣總絃房閼鬱塞章郁艦簡補札耽鰾吭笛芬呎文罧節苳蕗淦舩艙舷舟船蒲懷懐≦≫>≧≪渊淵渕縁葢盖弍蓋双B藤潭蒸鱶楓殕瘋封諷黻怫彿髴佛憤恚慍仏F弗沸Φφ拒防蔔輹愎蝠茯箙⊃⊇嚢梟袋含⊂⊆袱覆輻復馥副複福誣孚普俯更腐坿狂不増拊鯆怖赴桴巫傅婦付訃賻振負蜉罘附吹経觸夫俘父臥践咐敷踏斧溥阜葺深仆譜符麩匐榑芙賦殖冨触孵麸柎府舗噴鋪降蹈風觝埠拭鮒郛伏俛經歩富苻畉扶趺ふヒ鶸禀蘋彬斌嬪繽殯賓擯牝貧頻瀕稟品葫怯晝飜蒜蛭昼綬胙紐鰭∝片衡鮃閃鵯辟百媛姫尋擴仭太仞展宥絋拡拓拾祐恕紘煕泰熙寛洋弘宏啓裕浩廣広冰雹俵飃凭冫髟彪驫飆馮殍飄豹漂驃慓剽嫖兵票憑評標平表燧老拈捫撚捻歪籤籖柊魃旱秀跪膝蜩羆佗攣−低隙閑暇雛髯鬚髭¬蹄潛濳潜顰密窃鬻提瓢蠡瓠匏央恒壽廂尚寿久蟆率痙蟇丙丁孤史女獨独稘斎斉均倫準等≠單偏単他仁瞳人11柆蔆拉杓柄犇◇◆菱醢醤曾蘖彦酷漬浸鶲額聖肱肘熈芒光膕控皹皸響罅僻鰉逼疋蹕畢匹篳棺柩弼櫃謐坤未羊筆必養襞饑「<【(←『左臂轡曳灯緋朏砒火日蜚妣費狒匕泌杼庇悲樋退脾挽痺卑贔紕牽避引菲檜被碑匪裨斐秘豼霏蓖丕批妃髀干昜彼秕氷鄙飛比否碾疲梭披桧魅惹俾鞴冷譬貔乾肥罷痞索扉暃毘轢皮陳鞁祕ひハ布鱧釖鉤蝟梁鍼磔針禳肚腑腸孕原拂祓払遼請温玄腹陽遙悠東遥治春頓鮠捷鶻駿疾囃林隼鈑膰磐樊潘泛畔蟠釆拌笵胖絆氾坂范凡燔楾洪瘢翻板攀゜大伴煩槃袢斑判範藩繙蕃版搬叛班阪般販犯汎帆頒反侍鯊櫨祝?硲間劇激勵烈励速蝿蠅省飯勢彈外弭筈辱逸育毓齦浮阻難掵憚幅巾柞母翅圃旛旙将側旌幟傍働鰰機叩疥畠幡籏畑旗斜鴿再鳩開秦跣膚肌裸弾薑椒壹甫馨壱弌哉一創元始鋼芳夾剪鋏螯挾挟脛萩餞贐離塙英蕚萼衄衂縹譚咄放噺話洟甚鼻華花赱迸奔枦觜艀婢梯燥箸柱走橋匣凾箪筐□繁方運匚筥箱函陌栢魄膊柏亳珀狛佰粕璞蘗岶愽擘箔舶泊搏迫帛拍圖諮測企秤謀量計図儚捗袴伯博墓髮秡癶釟溌肇廿二初椀蓮8♪鉢蜂發髪服半法醗薄白八発霈盃睥擺湃孛裴琲埴碚牌吠拜坏珮旆入沛榛杯悖―廢腓誹徘稗癈肺俳憊輩背鷂胚廃排拝敗灰配蛤濱浜吐食霽恥菠帚杷垪跛耻巴笆履脹葉爆矧帶這撥破嵌霸捌早把刎馳填生簸跳派禿碆羽果覇映晴陂端剥腫匍着穿葩爬歯膨坡佩慙芭刄菷怕榮齒刃播愧暎叭栄玻掃張貼刷羞頗琶はh━─┘┛┸┷┻┴┓┐┳┬┯┰┨┫┤┥┼╋╂┿波‐フ★☆非ヒホヘハh]\|ッ\_s*[ホヘフヒハ]\|ッ\_s*[ホヘフヒハ]\|っ\_s*[ほへふひは]\|寄\_s*生\|珠\_s*鶏\|混\_s*一\_s*色\|紅\_s*[幇中]\|T\_s*r\_s*i\_s*u\_s*r\_s*i\_s*d\_s*a\_s*l\_s*e\_s*s\|微\_s*[酔笑]\|子\_s*規\|時\_s*鳥\|蜀\_s*魂\|杜\_s*[宇鵑]\|上\_s*枝\|鬼\_s*灯\|酸\_s*漿\|叢\_s*祠\|和\_s*了\|鮑\_s*魚\|謗\_s*法\|黒\_s*子\|部\_s*屋\|竹\_s*\%(畚\|麦\_s*魚\)\|綜\_s*麻\|巻\_s*子\|下\_s*手\|糸\_s*瓜\|霹\_s*靂\|c\_s*l\_s*a\_s*u\_s*s\_s*t\_s*r\_s*o\_s*p\_s*h\_s*o\_s*b\_s*i\_s*a\|鞦\_s*韆\|睾\_s*丸\|乱\_s*吹\|相\_s*応\|E\_s*\%(r\_s*i\_s*o\_s*c\_s*a\_s*u\_s*l\_s*a\_s*l\_s*e\_s*s\|u\_s*p\_s*t\_s*e\_s*l\_s*e\_s*a\_s*c\_s*e\_s*a\_s*e\)\|回\_s*\%(鍋\_s*肉\|回\_s*教\)\|書\_s*司\|頭\_s*垢\|鳧\_s*鐘\|菜\_s*蕗\|款\_s*冬\|f\_s*\%(o\_s*r\_s*t\_s*e\|e\_s*m\_s*t\_s*o\)\|釜\_s*[中山]\|雙\_s*葉\|渓\_s*井\|G\_s*e\_s*r\_s*a\_s*n\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|宿\_s*酔\|△\_s*△\_s*△\|×\_s*×\_s*×\|○\_s*○\_s*○\|河\_s*\%(豚\|底\_s*撈\_s*魚\)\|神\_s*[庫籬]\|肩\_s*巾\|領\_s*巾\|素\_s*見\|曹\_s*白\_s*魚\|枚\_s*[田方]\|敬\_s*昌\|幸\_s*展\|容\_s*靖\|晃\_s*道\|欧\_s*子\|宙\_s*子\|祥\_s*加\|終\_s*日\|翡\_s*翠\|曽\_s*祖\_s*父\|豪\_s*将\|偉\_s*紀\|周\_s*[行男]\|茅\_s*蜩\|向\_s*日\_s*葵\|七\_s*宗\|桶\_s*坂\|永\_s*和\|蟾\_s*蜍\|抽\_s*\%([斗出]\|き\_s*出\_s*し\)\|告\_s*天\_s*子\|雲\_s*[脂雀]\|為\_s*人\|緊\_s*[と々]\|鎮\_s*火\_s*\%(祭\|の\_s*祭\)\|A\_s*\%(s\|r\_s*s\_s*e\_s*n\_s*i\_s*c\|n\_s*g\_s*i\_s*o\_s*s\_s*p\_s*e\_s*r\_s*m\_s*a\_s*e\)\|粃\_s*糠\_s*疹\|只\_s*管\|直\_s*[向走垂隠]\|常\_s*陸\|鹿\_s*尾\_s*菜\|撲\_s*り\_s*倒\|同\_s*胞\|赦\_s*い\|青\_s*春\|哈\_s*爾\_s*浜\|美\_s*佳\|流\_s*行\|勇\_s*[樹人]\|韓\_s*流\|漢\_s*堡\|汗\_s*国\|盤\_s*陀\|R\_s*S\_s*I\|蔓\_s*延\|蝦\_s*虎\_s*魚\|沙\_s*魚\|馬\_s*銜\|狭\_s*間\|南\_s*風\|延\_s*\%(縄\|い\_s*て\)\|義\_s*母\|旅\_s*籠\|N\_s*e\_s*l\_s*u\_s*m\_s*b\_s*o\_s*n\_s*a\_s*c\_s*e\_s*a\_s*e\|黄\_s*[酒櫨]\|土\_s*[方生師]\|嘔\_s*[吐気]\|支\_s*倉\|長\_s*谷\|接\_s*ぎ\_s*合\|纏\_s*頭\|煙\_s*火\|麻\_s*疹\|階\_s*[上子]\|嘴\_s*\%(細\_s*鴉\|太\_s*鴉\)\|学\_s*胤\|2\_s*\%([人つ日]\|通\_s*り\|0\_s*日\)\|2\_s*\%([人つ日]\|0\_s*[歳日]\)\|淡\_s*竹\|8\_s*月\|客\_s*家\|P\_s*\%(t\|o\_s*t\_s*a\_s*m\_s*o\_s*g\_s*e\_s*t\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\|l\_s*a\_s*t\_s*i\_s*n\_s*u\_s*m\)\|海\_s*\%([鞘永蘿星牙]\|拉\_s*爾\|底\_s*撈\_s*月\)\|M\_s*\%(y\_s*r\_s*t\_s*a\_s*l\_s*e\_s*s\|e\_s*r\_s*c\_s*u\_s*r\_s*y\)\|色\_s*調\|呼\_s*和\_s*浩\_s*特\|ウ\_s*ー\_s*ゴ\|ユ\_s*\%(ー\|ペ\_s*ー\_s*ル\|ベ\_s*ー\_s*ル\|イ\_s*ス\_s*マ\_s*ン\_s*ス\|ゴ\_s*ー\|グ\_s*ノ\_s*ー\|マ\_s*ニ\_s*\%(テ\|ス\_s*[トム]\)\)\|現\_s*代\|十\_s*六\_s*進\_s*数\|高\_s*さ\|香\_s*港\|イ\_s*\%(ダ\_s*ル\_s*ゴ\|ス\_s*パ\_s*ニ\_s*ア\|レ\_s*ー\_s*ル\|エ\_s*ロ\)\|H\_s*\%(z\|カ\_s*ッ\_s*プ\|o\_s*b\_s*b\_s*i\_s*t\|i\_s*\%(8\|B\_s*a\_s*n\_s*d\)\)\|オ\_s*\%([ラー]\|ナ\_s*ー\|ノ\_s*レ\|ン\_s*フ\_s*ル\_s*ー\_s*ル\|ネ\_s*\%(ス\_s*\%(ト\|テ\_s*ィ\)\|ゲ\_s*ル\)\|テ\_s*ル\|ル\_s*ガ\_s*ー\|マ\_s*ー\_s*ジ\_s*ュ\)\|ア\_s*\%(ン\_s*\%(リ\|ベ\_s*ー\_s*ル\)\|ネ\_s*ス\_s*ト\|ワ\_s*ー\|ダ\_s*マ\_s*ー\_s*ル\|シ\_s*ェ\_s*ッ\_s*ト\|ビ\_s*タ\_s*シ\_s*オ\_s*ン\|ー\_s*\%(ネ\_s*ス\_s*ト\|ノ\_s*ン\_s*ク\_s*ー\_s*ル\)\)\|エ\_s*\%(デ\_s*ィ\|ン\_s*リ\_s*ケ\|レ\_s*\%(ナ\|ー\_s*ヌ\)\|ロ\_s*イ\_s*ー\_s*ズ\|ク\_s*ト\_s*ル\|ル\_s*\%(ゲ\_s*ラ\|ヴ\_s*ェ\|メ\_s*ス\|マ\_s*ン\|ミ\_s*\%(ッ\_s*ト\|ー\_s*ト\)\|ブ\_s*ラ\_s*ン\|ナ\_s*ン\_s*デ\_s*ス\|キ\_s*ュ\_s*ー\_s*ル\)\|ノ\_s*ク\|ッ\_s*チ\|イ\_s*チ\)\|H\_s*\%([fsPeo]\|i\_s*m\_s*a\_s*n\_s*t\_s*a\_s*n\_s*d\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|カ\_s*ッ\_s*プ\|T\_s*\%(M\_s*L\_s*フ\_s*ァ\_s*イ\_s*ル\|T\_s*P\_s*サ\_s*ー\_s*バ\)\|D\_s*D\_s*レ\_s*コ\_s*ー\_s*ダ\_s*ー\|u\_s*r\_s*d\|a\_s*\%(s\_s*s\_s*i\_s*u\_s*m\|f\_s*n\_s*i\_s*u\_s*m\|w\_s*a\_s*i\_s*i\)\|y\_s*\%(p\_s*e\_s*r\_s* \_s*T\_s*e\_s*x\_s*t\_s* \_s*M\_s*a\_s*r\_s*k\_s*u\_s*p\_s* \_s*L\_s*a\_s*n\_s*g\_s*u\_s*a\_s*g\_s*e\|d\_s*\%(n\_s*o\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|r\_s*\%(a\_s*s\_s*t\_s*i\_s*d\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|o\_s*\%(s\_s*t\_s*a\_s*c\_s*h\_s*y\_s*d\_s*a\_s*l\_s*e\_s*s\|g\_s*e\_s*n\)\)\)\)\)\|水\_s*[銀平素]\)', - \ 'i' : '\%([イΗη賤鄙卑苟嫌弥薯妹藷芋夢艷鑪鈩彩鱗色鯆忽綺貸甍応答愈圦杁霪隱蚓寅氤酳胤飮韵尹茵贇蔭婬湮堙廴音飲慇韻咽淫殞姻隕院允殷隠陰窟巌巖頌祝鰛鰮鰯岩磐円¥鼾歪弑弋抱懐肬贅疣狗戌乾犬諱在坐未汝戒誡警縛今Εε曰禾稻員因蝗嘶鰍電引躄誘動忿≦鵤錨碇怒霆雷霹凧桴筏魚S菴庵彌雖家尿荊棘茨祈祷命猯豕古伍乙鎰鴪聿軼樹慈悼愴慯労格到至傷鼬頂戴病徒致鈑痛板柞砂沙些聊潔諍烈功諫勳勲勇漁諌憇=憩粹熱粋憤域閾勢勤忙急磯孰焉湶泉厳何弄苛≧鎔范啀毬訝燻息挑縷絲厭營営愛幼稚緒遑暇糸弌壹肆莓苺櫟著市碑鐓礎甃臀弩石犧牲犠池溢Y佚壱11燠鬻礇毓粥的戦戰軍幾郁育一稲否飯洟位違居姨猗斎偽噫逝医鑄痍委囲云圍ゐ挿炒彙要熨饐醫言矮往詒威懿如僞忌彜煎逶緯韋唯莞淹胃善生恚彝惟以活易蔚為猪衣已倚幃斐移鮪将可偉畏五夷李渭怡貽癒依逸井慰行爲胆射詑矣頤熬萎良凍出椅率好揖肄痿鋳謂帷亥苡意維遺鰄異去堰尉容囗い氷Йй⇒→⊂⊃▼▽伊i印入∞吋∈∋∫∬∩IイИΙιи私i]\|E\_s*メ\_s*ー\_s*ル\|灼\_s*然\|祖\_s*谷\|湯\_s*文\_s*字\|文\_s*身\|郎\_s*[女子]\|刺\_s*[青草]\|蕁\_s*麻\|U\_s*r\_s*t\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\|海\_s*[豚参]\|西\_s*表\|鸚\_s*哥\|影\_s*青\|況\_s*ん\_s*や\|所\_s*謂\|D\_s*i\_s*a\_s*p\_s*e\_s*n\_s*s\_s*i\_s*a\_s*l\_s*e\_s*s\|藺\_s*草\|J\_s*u\_s*n\_s*c\_s*a\_s*l\_s*e\_s*s\|田\_s*舎\|膝\_s*行\|十\_s*六\_s*夜\|寝\_s*穢\|英\_s*\%(蘭\|吉\_s*利\)\|斑\_s*鳩\|烏\_s*賊\|玉\_s*筋\_s*魚\|硫\_s*黄\|夜\_s*来\_s*香\|N\_s*a\_s*j\_s*a\_s*d\_s*a\_s*l\_s*e\_s*s\|牛\_s*膝\|稜\_s*威\|常\_s*春\_s*藤\|5\_s*[つ日]\|5\_s*[つ日]\|惡\_s*戲\|甚\_s*振\|潮\_s*来\|悪\_s*戯\|交\_s*喙\|小\_s*魚\|鯨\_s*魚\|細\_s*小\_s*魚\|鶏\_s*魚\|経\_s*緯\|礒\_s*[山田]\|P\_s*\%(o\_s*a\_s*l\_s*e\_s*s\|l\_s*u\_s*m\_s*b\_s*a\_s*g\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\)\|和\_s*泉\|E\_s*\%(A\_s*S\_s*T\|V\_s*E\)\|気\_s*吹\|指\_s*宿\|拠\_s*所\|従\_s*[妹姉弟兄]\|公\_s*孫\_s*樹\|鴨\_s*脚\_s*樹\|G\_s*\%(l\_s*u\_s*m\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\|r\_s*a\_s*m\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\|i\_s*n\_s*k\_s*g\_s*o\_s*p\_s*s\_s*i\_s*d\_s*a\)\|銀\_s*杏\|鳶\_s*尾\|檪\_s*本\|巫\_s*子\|神\_s*巫\|睦\_s*月\|都\_s*方\_s*流\|縊\_s*[殺死首]\|蝟\_s*[集縮]\|埋\_s*け\_s*[火炭]\|許\_s*[婚嫁]\|<\_s*=\_s*=\_s*>\|必\_s*要\_s*十\_s*分\_s*条\_s*件\|ヤ\_s*ン\|日\_s*本\_s*ア\_s*イ\_s*・\_s*ビ\_s*ー\_s*・\_s*エ\_s*ム\_s*株\_s*式\_s*会\_s*社\|国\_s*際\_s*\%(基\_s*督\_s*教\_s*大\_s*学\|標\_s*準\_s*化\_s*機\_s*構\)\|逆\_s*離\_s*散\_s*フ\_s*ー\_s*リ\_s*エ\_s*変\_s*換\|識\_s*別\_s*子\|即\_s*興\_s*曲\|な\_s*ら\_s*ば\|項\_s*目\|逐\_s*次\_s*型\|誤\_s*っ\_s*た\|無\_s*\%(花\_s*果\|効\_s*な\)\|帰\_s*納\_s*法\|字\_s*下\_s*げ\|不\_s*\%([可如足]\|充\_s*分\)\|具\_s*体\_s*化\|情\_s*報\|導\_s*入\|整\_s*数\|完\_s*全\|ヨ\_s*\%(ア\_s*ン\|シ\_s*フ\|ー\_s*ド\|ウ\_s*素\)\|I\_s*\%([rPn]\|R\_s*Q\|カ\_s*ッ\_s*プ\|C\_s*\%(タ\_s*グ\|チ\_s*ッ\_s*プ\|カ\_s*ー\_s*ド\)\|l\_s*l\_s*i\_s*n\_s*o\_s*i\_s*s\|S\_s*\%(O\|B\_s*N\_s*\%(番\_s*号\|コ\_s*ー\_s*ド\)\|A\_s*バ\_s*ス\)\|d\_s*a\_s*h\_s*o\|D\_s*\%(カ\_s*ー\_s*ド\|E\_s*\%(ド\_s*ラ\_s*イ\_s*ブ\|デ\_s*バ\_s*イ\_s*ス\|ケ\_s*ー\_s*ブ\_s*ル\|コ\_s*ン\_s*ト\_s*ロ\_s*ー\_s*ラ\)\)\|タ\_s*ー\_s*ン\|T\_s*\%(シ\_s*ス\_s*テ\_s*ム\|バ\_s*ブ\_s*ル\)\|o\_s*\%(w\_s*a\|d\_s*i\_s*n\_s*e\)\)\|ア\_s*\%(イ\|ー\_s*\%(ヴ\_s*ィ\_s*ン\|ビ\_s*ン\)\|ン\_s*\%(プ\_s*ロ\_s*ン\_s*プ\_s*\%(チ\_s*ュ\|テ\_s*ュ\)\|デ\_s*パ\_s*ン\_s*ダ\_s*ン\|フ\_s*ォ\_s*ル\_s*\%(メ\_s*ル\|マ\_s*テ\_s*ィ\_s*ー\_s*ク\)\)\)\)', - \ 'j' : '\%([塩嶋縞島嶌橲衄衂宍竺舳忸軸舌喰食直凝實昵実印尻稔仭糂贐潯儘仞盡刄臣侭恁進訊俥蕁迅刃靱荏甚靭燼櫁樒塵尽尋陣腎壬人敘恕耡汝莇杼茹敍蜍洳舒縟辱褥蓐溽所抒鋤徐序絮叙助釀淨疂絛繞壌諚孃瀞襄仍蟐拯疉讓聶驤生帖仗躡穰乘塲靜繩禳蕘壤遶星滌茸嬲疊如剩娘嬢錠静醸縄女尉饒丈成擾穣烝嫋丞盛場杖條条蒸貞状攘剰畳冗定浄乗情城上常譲濡得戍就嬬鷲竪讐讎懦愀咒聚隼詢徇笋凖盾楯筍篤蓴惇洵淳閏諄恂馴旬荀潤循醇巡遵順准殉純準襦誦需戌朮孰宿塾珠熟恤術述孺呪豎儒綬樹受授壽鞣狃澀揉廿拾縱中從糅从戎澁蹂神汁獸絨縦渋柔什充十獣従住銃重岻除士染時怩至児冶璽只畤侍孳轜耳示次寿辭粫司二祀邇而慈峙爺以地塒珥迩痔死敷恃蒔磁瓷仁字尓焦膩柱似嗣子亊路史餌兒滋仕爾辞弍自茲持寺事知醤鮭搦着惹尺鉐雀寂若弱蛇闍者邪戯麝じj│┃├┝┣┠┏┌.еЕ治Яя日юЮёЁЙジйj]\|ッ\_s*シ\_s*゙\|ッ\_s*ジ\|っ\_s*じ\|G\_s*\%(メ\_s*ン\|パ\_s*ン\)\|D\_s*y\|G\_s*\%(メ\_s*ン\|パ\_s*ン\)\|支\_s*度\|試\_s*合\|2\_s*乗\|2\_s*乗\|祖\_s*父\_s*\%(さ\_s*ん\|祖\_s*母\)\|獅\_s*子\|甲\_s*乙\_s*丙\_s*丁\_s*戊\_s*己\_s*庚\_s*辛\_s*壬\_s*癸\|k\_s*\$\_s*_\_s*{\_s*e\_s*f\_s*f\_s*}\_s*\$\|Z\_s*\%(r\|i\_s*r\_s*c\_s*o\_s*n\_s*i\_s*u\_s*m\)\|深\_s*\%(秘\|大\_s*寺\)\|秦\_s*泉\_s*寺\|沈\_s*\%(香\|丁\_s*花\)\|晨\_s*朝\|濁\_s*世\|判\_s*官\|諍\_s*論\|長\_s*夜\|漏\_s*斗\|↑\_s*↓\_s*←\_s*→\|焼\_s*酎\|鐘\_s*石\|橈\_s*脚\_s*類\|承\_s*久\|朱\_s*里\|C\_s*a\_s*b\_s*o\_s*m\_s*b\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|絢\_s*子\|頌\_s*偈\|数\_s*珠\|入\_s*[魂牢来洛院内水棺]\|霜\_s*月\|1\_s*\%(2\|6\_s*進\|0\_s*[進月]\|1\_s*月\|8\_s*禁\)\|師\_s*走\|極\_s*月\|紐\_s*帯\|1\_s*\%(0\|1\_s*月\|8\_s*禁\|2\_s*月\)\|シ\_s*゙\|爪\_s*哇\|射\_s*礼\|砂\_s*利\|謝\_s*花\|三\_s*味\_s*線\|雑\_s*魚\|著\_s*語\|杓\_s*子\|共\_s*同\_s*企\_s*業\_s*体\|ゼ\_s*リ\_s*ー\|エ\_s*\%(ホ\_s*バ\|リ\_s*コ\|レ\_s*ミ\_s*ヤ\|ル\_s*サ\_s*レ\_s*ム\|ッ\_s*サ\_s*イ\)\|ヘ\_s*\%(レ\_s*ス\|ス\_s*ス\)\|ヒ\_s*メ\_s*ネ\_s*ス\|チ\_s*ゲ\|北\_s*陸\_s*先\_s*端\_s*\%(大\|科\_s*学\_s*技\_s*術\_s*大\_s*学\_s*院\_s*大\_s*学\)\|ハ\_s*\%(イ\_s*メ\|ラ\_s*ペ\_s*ー\_s*ニ\_s*ョ\)\|碧\_s*玉\|ヤ\_s*\%([リンニナー]\|イ\_s*ル\|エ\_s*ル\|ル\_s*ノ\|レ\_s*ド\|ヌ\_s*\%(ス\|シ\_s*ュ\)\|ス\_s*パ\_s*ー\_s*ス\|コ\_s*[ビブ]\|ッ\_s*ケ\)\|フ\_s*\%(ァ\_s*[ンナ]\|リ\_s*[オア]\)\|J\_s*\%(R\_s*東\_s*日\_s*本\|\.\_s*S\_s*\.\_s*\%(バ\_s*ッ\_s*ハ\|B\_s*a\_s*c\_s*h\)\|リ\_s*ー\_s*グ\|カ\_s*ッ\_s*プ\|C\_s*B\_s*カ\_s*ー\_s*ド\|-\_s*P\_s*O\_s*P\|ポ\_s*ッ\_s*プ\|P\_s*\%(G\_s*フ\_s*ァ\_s*イ\_s*ル\|E\_s*G\_s*フ\_s*ァ\_s*イ\_s*ル\)\|I\_s*S\_s*\%(マ\_s*ー\_s*ク\|コ\_s*ー\_s*ド\)\|a\_s*p\_s*a\_s*n\_s* \_s*A\_s*d\_s*v\_s*a\_s*n\_s*c\_s*e\_s*d\_s* \_s*I\_s*n\_s*s\_s*t\_s*i\_s*t\_s*u\_s*t\_s*e\_s* \_s*o\_s*f\_s* \_s*S\_s*c\_s*i\_s*e\_s*n\_s*c\_s*e\_s* \_s*a\_s*n\_s*d\_s* \_s*T\_s*e\_s*c\_s*h\_s*n\_s*o\_s*l\_s*o\_s*g\_s*y\|A\_s*\%(I\_s*S\_s*T\|N\_s*コ\_s*ー\_s*ド\|V\_s*A\_s*\%(ス\_s*ク\_s*リ\_s*プ\_s*ト\|ア\_s*プ\_s*レ\_s*ッ\_s*ト\)\)\|U\_s*N\_s*E\_s*T\)\|ズ\_s*ボ\_s*ン\|J\_s*\%(2\|−\_s*W\_s*A\_s*V\_s*E\|リ\_s*ー\_s*グ\|カ\_s*ッ\_s*プ\|ポ\_s*ッ\_s*プ\|I\_s*C\_s*C\_s*出\_s*版\|U\_s*\%(S\|N\_s*K\_s*O\)\|u\_s*s\)\|ユ\_s*\%([ハリダノ]\|ル\_s*ゲ\_s*ン\|ー\_s*\%([リノ]\|ゲ\_s*ン\_s*ト\|デ\_s*ィ\_s*ッ\_s*ト\)\|ン\_s*\%(グ\|カ\_s*ー\|ケ\_s*ル\)\|ピ\_s*テ\_s*ル\|ッ\_s*[カシ]\)\|イ\_s*\%(エ\_s*\%([ナス]\|ン\_s*\%(ス\|セ\_s*ン\)\|ズ\_s*ス\)\|ェ\_s*\%(ナ\|ン\_s*\%(ス\|セ\_s*ン\|ゼ\_s*ン\)\|ー\_s*ガ\_s*ー\|ル\_s*\%(ク\|サ\_s*レ\_s*ム\)\)\)\|ホ\_s*\%([タセ]\|ル\_s*ヘ\|ホ\_s*バ\|ア\_s*\%(ン\|キ\_s*ン\)\)\|ヨ\_s*\%([ブナ]\|ル\_s*\%(グ\|ダ\_s*ン\)\|エ\_s*ル\|ア\_s*\%(ヒ\_s*ム\|キ\_s*ム\)\|ゼ\_s*フ\|ー\_s*\%([トド]\|デ\_s*ル\|ゼ\_s*フ\)\|シ\_s*\%(フ\|ュ\_s*ア\)\|セ\_s*フ\|ハ\_s*[ナンネ]\)\)', - \ 'k' : '\%([コ怖旃之惟怺薦米暦轉殺壼鶤袞鯤坤狠艮琿悃很漿棍魂菎滾梱溷痕渾墾恨懇根梢杪王泥裔樸鞐熟枹醴聲声蛩凍溢零錯苔箏亊判斷諺理断盡悉尽辞詞殊事壽寿鯒礫鯉齣狛腓昆瘤鮗谺応應答茲是爰試志心凩兀笏惚榾輿甑腰拵拗鐺鏝昿仰慌袷塙頏絖冦耗亙峺衝晄覯糠匣逅閧扛湊羔礦爻壙盍洸鬨浤凰閤窖缸寇岡傚湟汞洽崗鮫伉訌誥冓敲磽倖簧鏗椌搆肓鍠矼砿犒淆呷鵁皐黌遘昴槹蚣肱肴熕胱猴扣杲蛤縞狎畊昊餃哽幌鱇峇嫦鎬隍恆倥徨啌吭釦闔藁亘絋棡遑紘稾鴿詬哮困靠皋惶紺鈩絳閘蒙冰氷郡蛟槁候楮媾溘蝗酵嚆犢稿亢哄睾慷郊岬肛項巷鑛洪佼狡昂叩勾喉滉糀晃剛晧曠宏控恍侯港皓坑皎耿膏江絞膠虹巧鴻鉱衡浩厚幸耕弘綱抗購攻講恒溝薨鋼航行肯荒高皇光好槲梏谷釛尅斛轂哭石告酷穀冴虎觚壷痼胯鼓児漉糊媚古娘冱混粉請辜湖虍放葫捏此鈷痩鴣瞽詁呼箍小錮蠱蛄粐滬估雇故沽転倒漕罟餬超込凅誇懲琥扈袴焦蝴呱乕踰弧越子孤菰跨壺楜股肥凝女戸恋兒怙瑚戀夸皷滸濾瓠濃乎仔こケ峻欅獸謇鵑愃搴劒俔儉險瞼慊圈幵釼顯剱椦黔暄劔涓臉妍劵歉獻縣蜷綣檢鉉虔愆娟權甄惓諠騫験慳捲倦遣羂嶮蹇鹸狷譴腱驗軒憲繭謙圏険硯倹献犬絢顕券劍剣見権研拳眷牽県建烟鑷言獣蓋涜吝削畩閲検貶健桁嗾竭獗偈譎碣蕨尻頡抉襭亅刔杰厥訐歇訣孑頁纈蹶桀穴傑結血煢蹊黥詣攜綮鮭絅盻挈瓊夐冂笄枅奚兮迥畦彑醯徑剄冏勍檠憬挂憇匸逕繼惠慧謦鷄系┓├┃┣┿━┻┷┸─┫┝┳┬┼┯┥╋┨┛│┠┰┏┤┴╂罫痙奎脛谿溪螢蛍渓閨憩圭携硅恵刑継勁珪計啓蹴毛褻異けク姑配椚橡檪櫪栩椡椪湫箜櫟含纐柵婚屎糞癖潛潜鵠凹窪縊跟頚軛珞頸首諄鞋履窟轡覆沓碎砕条降件頽崩屑釘莖茎陸杙杭掘崛倔鶏鐃藥擽薬樟楠梳櫛串釧與与挫籖鯀鯨籤隈熊艸嚔藾叢鏈腐鎖種Ξξ臭楔草圀邦國国髭漱嗽吻嘴唇脣梔腔φ粂裙勳熏皹桾皸醺崑燻訓勲葷委詳钁精鍬咥銜桑某暝峅昏冥眛罔鮓比闇位鞍藏暗倉廚厨涅曇蜘佝栗包俥車梍枢畔鐵玄蔵黒食孔桍窶暮焼懼駒苦区眩吁繰庫垢紅呉倶枸劬煦口瞿工吼怐喰貢惧區組句狗酌絎嶇衢刳くキ段痍疵紲絆傷築鱚嚴稷黍帛後碪砧絹兆萌刻鞫椈掬辟君牙蘗檗迄訖狐屹詰佶拮吃鞠橘菊喫.&⌒¬★!÷≠♪∫%±・。仝●|―¥Ц△‡`←¢£‰◎+ ̄〒☆ヽゞ、▽◇↓≒\;″°∝≦々℃∵†○´゛‥♭<#〇□‐_Å∞:▲ヾ♂?^,〓‖▼…〃¶゜@≫§∴′ゝ/>♀∨=≧ー−≪$♯↑■¨≡〆◆∽煙蚶更衣細后妃楸蕈茸乙雉轢杵軋岸桔汚穢北樵際裂燦煌雲嫌胆竏粁瓩浄淳澄潔清雰錐蛬吉霧檮桐箘鈞檎襟忻箟掀磬噤听瑾懃覲釁芹衿饉釿衾斤蒟径窘擒巾菌公禽筋錦欣僅琴均禁緊謹欽近勤嘘踞據苣擧渠秬鉅舉筥慶倨距歔遽鋸醵拠拒去勗蕀洫亟跼旭局挙許居巨虚轎繦羌姜篋蕎陜恊竸荊筴徼峽劫恟況棘竅僵亰狹頃筺梗誑刧襁烱洶抂卿鍄炯經竟廾况孝亨跫敬筐梟饗矯矜挾校挟拱嬌杏鞏響向興匈嚮享警競喬怯兄彊僑兢莢狂橋供郷兇驕凶叫夾匡侠狭恐経疆協境強胸驚脅共恭今教玖鬮歙舊疚笈邱赳摎恷岌貅9扱皀烋樛蚯逑厳胡翕朽泣穹糾糺及躬汲臼窮灸弓宮久柩究給丘求鳩級球休救急旧吸九基欹寄貴跂徠聞覊猗櫃煕既弃氣詭嬉效切妓跪虧卉稘尋冀暉唏姫伐喟伎畸効熙癸噐極祁匱馗旡其碁剞畿規希綺燬騎饑逵樹忌朞騏城聽棄悸肌生几季記僖紀斬決槻期起箕聴鰭崎餽倚幃瞶利晞欷毅危屓熈着汽木飢酒愾熹諱淇器羇机企麾訊著剪稀来圻來鬼揆奇羈禧譏棋黄憙己驥鑽决毀掎曁竒窺喜碕祈耆饋揮愧棊幾气徽消截岐祺麒覬嵜杞軌きカ糜癢粥痒麹輕骨業軽鰔鰈餉通瓶龜甕亀鴈獵鳫殯猟雁釀鳧鳬髢鴨躱巛側厠廁磧瓦獺翡裘皮紮→搦苧碓柄枳體軆躰躯体鴉犂烏機絡空唐榧茅揀坎澗扞莟丱拑盥嫺鑵蒄瞰淦稈康繝懽憾骭戡奐啣厂鐶讙澣羮寰羹嫻杆鸛歡豢歛罕酣陷皖篏捍瀚勸撼驩卷樌潤觀橄涵渙凵堪巫覡鉋萱簪舘艱咸翰柬悍駻燗槓浣邯攷稽宦考棺潅閂煥鉗疳癇函凾鹹顴緘桓款箝諌諫轗旱坩侃鰥 館莞橇韓患灌勧菅簡奸刊柑肝看桿干緩寒嵌廣広竿貫巻敢漢環間陥喚閑監喊歓甘寛管慣完艦乾幹官観壁椛屍姓庇鞄芳蔓鯑一勘⊃影陰蔭景*棧梯筧庚辛┘柧┐┌門廉脚癩乞∪川合’)〈《‘“”}{》〉囓柁旗鮖悴舵鰍鍛梶錺餝飾篭籠還歸卻皈孵省顧楓却帰反返督髮帋守祇韮裃雷髪紙鉦曲矩予鐘樺沫偏騙語潟刀模象仇固硬傍難容忝辱頑形方旁型肩風幽滓翳微掠綛纃絣緕擦糟鎹粕轄戞劼猾瞎恰蛞∧∩蠍擔濶筈剋蝎曷羯喝餓聒鞨黠刮蘰鬘桂闊括嘗捷豁渇担滑堅鰹割戛活暈疽鵲瘡傘嵩重襲葛笠堵硴墻牆蠣蛎柿關掲罹抱踵嬶嚊拘関係貌顏郁薫顔母感釡罐窰鴎框叺構喧竃竈釜缶蒲鎌數数槝栢膳傅瑕畏賢橿姦樫爨炊圍喞託囲鈎『鉤「』」限鍵傾禿蕪鏑頭齧気被兜敵適哉必要鼎鬲彜彝叶片悲哀愛鋺蛇鉄蜩神奏楫裹磆餅徒褐糧粮膈覺∠埆蠖貉幗隱擴寉骼癨壑咯椁嚇茖愨槨膕掴覈殼穫狢霍礁恪擱匿撹攪喀廓較郭]】【〔〕[殻挌劃閣格隠覚矍革獲馘攫核鶴拡客隔角確蠏壞畍丐獪褂恠喙峡夬觧械揩醢匯廨誡誨嵬櫂隗茴徊迴枴懈价椢榿囘蛙瑰乖浬鰄傀糴柏街鳰懷蛔蠶蚕邂蟹潰壊恢腕芥垣楷會拐悔詼諧契皆界疥魁偕改繪貝胛絵甲快灰槐晦懐介回塊解階廻戒開会怪海縢篝炬耀赫輝冠鑒鑑各屈鏡和代茄缺飼嫁華堝變狩上訶加架何啝火日菓欠苅繋稼ヶ个噛譁科跏舸賭禍支変窩課花交刈渦嚼掛呵替葭柯畫駆嘩崋化霞蝌迦顆価馨家借蝦罅駈斯賈嘉易果戈廈哥買闕且克墟靴訛驅換踝描軻嗅價嗄可彼夥香歌河珂鹿個痂書假荷耶笳咼藉糅舁搗渮袈下萪貸厦禾貨咬寡箇卦苛譌枷掻過画ヵ黴遐兼醸翔仮佳蚊懸伽賀淅勝涸苟蝸謌夏枯暇珈かk京節┗└※хХ忽コ汗〜功(株Kク×金窯χキカΚКΧкケκk]\|ッ\_s*[コケクキカ]\|ッ\_s*[コケクキカ]\|っ\_s*[子こけくきか]\|蟀\_s*谷\|焜\_s*炉\|前\_s*妻\|嫡\_s*妻\|二\_s*合\_s*半\|秋\_s*桜\|牛\_s*尾\_s*魚\|庶\_s*幾\|独\_s*楽\|特\_s*牛\|粫\_s*門\|甦\_s*生\|M\_s*e\_s*t\_s*a\_s*c\_s*h\_s*l\_s*a\_s*m\_s*y\_s*d\_s*e\_s*a\_s*e\|f\_s*o\_s*o\_s*t\_s* \_s*a\_s*n\_s*d\_s* \_s*m\_s*o\_s*u\_s*s\_s*e\_s* \_s*d\_s*i\_s*s\_s*e\_s*a\_s*s\_s*e\|外\_s*連\_s*味\|螻\_s*蛄\|罌\_s*粟\|滅\_s*紫\|S\_s*i\|莎\_s*草\|百\_s*[濟済]\|9\_s*[日月]\|秧\_s*鶏\|釉\_s*掛\|典\_s*薬\_s*寮\|L\_s*a\_s*u\_s*r\_s*\%(a\_s*c\_s*e\_s*a\_s*e\|o\_s*i\_s*d\_s*e\_s*a\_s*e\)\|探\_s*湯\|誓\_s*湯\|六\_s*合\|地\_s*祇\|都\_s*子\|州\_s*光\|群\_s*衆\|慈\_s*姑\|c\_s*r\_s*e\_s*s\_s*c\|内\_s*蔵\_s*助\|H\_s*e\_s*l\_s*l\_s*e\_s*b\_s*o\_s*r\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|J\_s*u\_s*g\_s*l\_s*a\_s*n\_s*d\_s*a\_s*l\_s*e\_s*s\|仁\_s*彦\|啄\_s*木\_s*鳥\|X\_s*e\|如\_s*月\|私\_s*市\|昨\_s*日\|素\_s*地\|布\_s*地\|欺\_s*罔\|聖\_s*[之子美]\|沈\_s*菜\|蟋\_s*蟀\|螽\_s*斯\|G\_s*o\_s*l\_s*d\|A\_s*\%(u\|r\_s*c\_s*h\_s*i\_s*c\_s*h\_s*l\_s*a\_s*m\_s*y\_s*d\_s*e\_s*a\_s*e\|s\_s*t\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|c\_s*a\_s*n\_s*t\_s*h\_s*a\_s*c\_s*e\_s*a\_s*e\)\|菫\_s*青\_s*石\|槿\_s*花\|R\_s*\%(h\_s*\%(o\_s*e\_s*a\_s*d\_s*a\_s*l\_s*e\_s*s\|a\_s*m\_s*n\_s*a\_s*l\_s*e\_s*s\)\|u\_s*n\_s*u\_s*n\_s*c\_s*u\_s*l\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|a\_s*n\_s*\%(u\_s*n\_s*c\_s*u\_s*l\_s*a\_s*\%(l\_s*e\_s*s\|c\_s*e\_s*a\_s*e\)\|a\_s*l\_s*e\_s*s\)\)\|裾\_s*礁\|脇\_s*[侍息]\|姉\_s*[妹弟]\|頬\_s*[骨筋]\|毬\_s*果\|舅\_s*姑\|厩\_s*\%([肥舎]\|務\_s*員\)\|廐\_s*舎\|離\_s*れ\_s*離\_s*れ\|掃\_s*部\|羚\_s*羊\|氈\_s*瓜\|土\_s*器\|蝙\_s*蝠\|魚\_s*狗\|為\_s*替\|連\_s*枷\|身\_s*体\|落\_s*葉\_s*松\|随\_s*神\|檻\_s*車\|T\_s*\%(h\_s*a\_s*l\_s*i\_s*c\_s*t\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|u\_s*b\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\)\|南\_s*瓜\|量\_s*子\|千\_s*典\|山\_s*\%(梔\_s*子\|陽\_s*道\)\|蜉\_s*蝣\|陽\_s*炎\|蜻\_s*蛉\|破\_s*片\|挿\_s*頭\|駕\_s*\%(籠\|輿\_s*丁\)\|槭\_s*樹\|長\_s*[月官]\|主\_s*[紀計神]\|剃\_s*刀\|天\_s*\%(牛\|鼠\_s*矢\)\|帷\_s*子\|酢\_s*漿\_s*草\|O\_s*x\_s*a\_s*l\_s*i\_s*d\_s*a\_s*c\_s*e\_s*a\_s*e\|飛\_s*白\|春\_s*日\|C\_s*\%([ormfda]\|h\_s*r\_s*o\_s*m\_s*i\_s*u\_s*m\|i\_s*r\_s*c\_s*a\_s*e\_s*a\_s*s\_s*t\_s*e\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|u\_s*r\_s*i\_s*u\_s*m\|y\_s*p\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|e\_s*r\_s*c\_s*i\_s*d\_s*i\_s*p\_s*h\_s*y\_s*l\_s*l\_s*a\_s*c\_s*e\_s*a\_s*e\)\|曾\_s*て\|曽\_s*て\|松\_s*魚\|燕\_s*子\_s*花\|牡\_s*[蛎蠣]\|民\_s*部\|部\_s*曲\|E\_s*\%(b\_s*e\_s*n\_s*a\_s*l\_s*e\_s*s\|l\_s*a\_s*n\_s*a\_s*l\_s*e\_s*s\)\|案\_s*山\_s*子\|梭\_s*\%(魚\|子\_s*魚\)\|蟷\_s*螂\|螳\_s*螂\|瓜\_s*\%(田\|呂\_s*根\)\|拍\_s*手\|水\_s*[鶏母夫手]\|東\_s*\%(風\|京\_s*都\_s*立\_s*科\_s*学\_s*技\_s*術\_s*大\_s*学\)\|(\_s*株\_s*)\|称\_s*子\|贏\_s*ち\_s*得\|歩\_s*兵\|恁\_s*く\|杜\_s*\%(若\|父\_s*魚\)\|梅\_s*花\_s*皮\|頴\_s*田\|膾\_s*炙\|ノ\_s*\%([ブウ]\|ー\_s*ン\|ッ\_s*\%([トク]\|テ\_s*ィ\_s*ン\_s*グ\|カ\_s*ー\|キ\_s*ン\_s*グ\)\)\|ナ\_s*\%(ッ\_s*\%(ク\|プ\_s*\%(サ\_s*ッ\_s*ク\|ザ\_s*ッ\_s*ク\)\)\|レ\_s*ッ\_s*ジ\|イ\_s*[フトツ]\)\|ニ\_s*\%(ー\|ッ\_s*\%(ト\|テ\_s*ィ\_s*ン\_s*グ\)\)\|ホ\_s*\%(ー\_s*\%(ミ\_s*ー\|メ\_s*イ\)\|メ\_s*イ\_s*ニ\)\|フ\_s*\%(ビ\_s*ラ\_s*イ\|ル\_s*シ\_s*チ\_s*ョ\_s*フ\)\|ハ\_s*\%(ン\|ラ\_s*シ\_s*ョ\_s*ー\|ー\_s*ン\|バ\_s*ロ\_s*フ\_s*ス\_s*ク\|ル\_s*ツ\_s*ー\_s*ム\|チ\_s*ャ\_s*ト\_s*ゥ\_s*リ\_s*ア\_s*ン\)\|K\_s*\%([点gm]\|カ\_s*ッ\_s*プ\|n\_s*o\_s*c\_s*k\_s*O\_s*u\_s*t\|e\_s*n\_s*w\_s*o\_s*o\_s*d\)\|P\_s*\%(i\_s*p\_s*e\_s*r\_s*a\_s*\%(l\_s*e\_s*s\|c\_s*e\_s*a\_s*e\)\|a\_s*p\_s*a\_s*v\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|o\_s*\%(d\_s*o\_s*s\_s*t\_s*e\_s*m\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\|t\_s*a\_s*s\_s*s\_s*i\_s*u\_s*m\)\)\)', - \ 'l' : '\%([ォォぉェェぇゥゥぅィィぃァァぁ<≪l ̄_≦李左←¬⊃∃∀∨ル∧レラлΛ£Лλl]\|ッ\_s*[ォェゥィァ]\|ッ\_s*[ォェゥィァ]\|っ\_s*[ぉぇぅぃぁ]\|液\_s*晶\|最\_s*小\_s*2\_s*乗\_s*法\|\.\_s*\.\_s*\.\|拉\_s*薩\|聯\_s*想\|補\_s*題\|檸\_s*檬\|手\_s*紙\|学\_s*習\|施\_s*錠\|局\_s*所\|論\_s*理\|ロ\_s*\%([キイアロリブボトメウスコゴグー]\|ペ\_s*ス\|ワ\_s*ー\_s*ル\|エ\_s*ベ\|ヨ\_s*ラ\|フ\_s*ト\|ル\_s*カ\|ベ\_s*リ\_s*ア\|ビ\_s*\%(ー\|ン\_s*グ\|イ\_s*\%(ス\_s*ト\|ン\_s*グ\)\)\|テ\_s*ィ\|サ\_s*ン\_s*\%(ジ\_s*ェ\_s*ル\_s*ス\|ゼ\_s*ル\_s*ス\)\|ニ\_s*ー\|ク\_s*リ\_s*ア\_s*ン\|ッ\_s*\%([ジタテトク]\|キ\_s*\%(ン\_s*グ\|ー\_s*ド\)\|カ\_s*ー\)\|カ\_s*ー\_s*ル\|ケ\_s*ー\_s*\%([トタル]\|シ\_s*ョ\_s*ン\)\|ガ\_s*ー\|ギ\_s*ン\_s*グ\|ジ\_s*\%(ー\|テ\_s*ッ\_s*ク\|ス\_s*テ\_s*ィ\_s*\%(ク\|ッ\_s*ク\)\|カ\_s*ル\|ク\_s*ー\_s*ル\|ッ\_s*[トク]\)\|ラ\_s*ン\|ン\_s*\%([ゴグダ]\|ボ\_s*\%(ク\|ッ\_s*ク\)\|バ\_s*ル\_s*デ\_s*ィ\|ズ\_s*デ\_s*ー\_s*ル\|リ\_s*[ィー]\|ジ\_s*ン\|ド\_s*ン\)\|レ\_s*\%(ア\_s*ル\|ッ\_s*タ\|ー\_s*ヌ\|イ\_s*ン\|ン\_s*\%([ソス]\|ツ\_s*ォ\)\)\)\|\\\_s*L\_s*a\_s*T\_s*e\_s*X\|L\_s*\%(サ\_s*イ\_s*ズ\|L\_s*サ\_s*イ\_s*ズ\|U\_s*N\_s*A\|u\_s*\%(n\_s*a\|c\_s*\%(i\_s*d\|k\_s*y\)\)\|i\_s*\%(a\_s*r\|s\_s*p\|t\_s*e\)\|o\_s*f\_s*t\|A\_s*T\_s*E\_s*X\|a\_s*\%(w\_s*s\_s*o\_s*n\|T\_s*e\_s*X\|s\_s*e\_s*r\_s*W\_s*r\_s*i\_s*t\_s*e\_s*r\)\)\|L\_s*\%([DP]\|サ\_s*イ\_s*ズ\|L\_s*サ\_s*イ\_s*ズ\|u\_s*\%(t\_s*e\_s*t\_s*i\_s*u\_s*m\|c\_s*i\_s*d\)\|i\_s*\%(t\_s*h\_s*i\_s*u\_s*m\|s\_s*p\|n\_s*u\_s*x\)\|E\_s*D\_s*ラ\_s*イ\_s*ト\|e\_s*m\_s*m\_s*a\|o\_s*\%(g\_s*i\_s*c\_s*a\_s*l\_s* \_s*U\_s*n\_s*i\_s*t\_s* \_s*N\_s*u\_s*m\_s*b\_s*e\_s*r\|u\_s*i\_s*s\_s*i\_s*a\_s*n\_s*a\)\|a\_s*\%(w\_s*r\_s*e\_s*n\_s*c\_s*i\_s*u\_s*m\|n\_s*t\_s*h\_s*a\_s*n\_s*u\_s*m\|T\_s*e\_s*X\)\|A\_s*N\)\|研\_s*究\_s*室\|エ\_s*ル\|リ\_s*\%([ィセズザサスダポルラリマナノンヌブアー]\|ャ\_s*マ\|ヤ\_s*ド\_s*ロ\|ヨ\_s*ン\|ゾ\_s*チ\_s*ー\_s*ム\|コ\_s*\%(リ\_s*ス\|ピ\_s*ン\)\|ク\_s*ー\_s*ド\|カ\_s*\%(ー\|オ\_s*ン\)\|ジ\_s*[ンー]\|デ\_s*[ィル]\|ド\_s*カ\_s*イ\_s*ン\|プ\_s*ト\_s*ン\|パ\_s*ー\_s*ゼ\|グ\_s*\%(ニ\_s*ン\|ナ\_s*ン\)\|フ\_s*\%([エト]\|タ\_s*ー\|テ\_s*ィ\_s*ン\_s*グ\)\|テ\_s*ラ\_s*[ルシ]\|チ\_s*ウ\_s*ム\|ソ\_s*\%(ソ\_s*ー\_s*ム\|グ\_s*ラ\_s*フ\_s*ィ\)\|タ\_s*ー\|ト\_s*\%([レル]\|マ\_s*ス\|ア\_s*ニ\_s*ア\|グ\_s*ラ\_s*フ\|バ\_s*ル\_s*ス\_s*キ\_s*ー\)\|オ\_s*\%(タ\_s*ー\_s*ル\|ネ\_s*ル\)\|ミ\_s*\%(テ\_s*ッ\_s*ド\|ッ\_s*[タト]\)\|モ\_s*\%(ー\_s*ジ\_s*ュ\|ネ\_s*ン\|ン\_s*チ\_s*ェ\_s*ッ\_s*ロ\)\|ム\_s*ジ\_s*ン\|キ\_s*\%(ッ\_s*ド\|ュ\_s*ー\_s*ル\|テ\_s*ン\_s*\%(ス\_s*タ\_s*イ\_s*ン\|シ\_s*ュ\_s*タ\_s*イ\_s*ン\)\)\|エ\_s*\%(ゾ\_s*ン\|ー\_s*ジ\_s*ュ\)\|ヒ\_s*テ\_s*ン\_s*シ\_s*ュ\_s*タ\_s*イ\_s*ン\|ネ\_s*\%([アン]\|ッ\_s*ト\|ー\_s*ジ\_s*ュ\)\|ニ\_s*ア\|ベ\_s*\%([ロラ]\|リ\_s*ア\|レ\_s*ー\_s*シ\_s*ョ\_s*ン\|ル\_s*テ\)\|ビ\_s*\%([アー]\|ド\_s*ー\|ン\_s*グ\)\|ュ\_s*\%([スー]\|ブ\_s*リ\_s*ャ\_s*ー\_s*ナ\|リ\_s*ュ\|ド\_s*ミ\_s*ラ\|ク\_s*サ\_s*ン\_s*ブ\_s*ー\_s*ル\|ッ\_s*ク\|シ\_s*ア\_s*ン\|ミ\_s*エ\_s*ー\_s*ル\)\|ロ\_s*\%(イ\|ン\_s*グ\_s*ウ\_s*ェ\)\|ヴ\_s*\%(ィ\_s*ン\_s*グ\_s*ス\_s*ト\_s*ン\|ァ\_s*\%(プ\_s*ー\_s*ル\|イ\_s*ア\_s*サ\_s*ン\)\)\|バ\_s*\%(テ\_s*ィ\|タ\_s*リ\_s*ア\_s*\%(ン\|ニ\_s*ズ\_s*ム\)\|プ\_s*ー\_s*ル\|イ\_s*ア\_s*サ\_s*ン\)\|ッ\_s*\%([ドピプタクチト]\|ス\_s*ン\)\)\)', - \ 'm' : '\%([モ脆醪師諸催靄舫腿銛杜森聞捫匁紋問翫玩擡齎靠凭鵙鴃縺悶樅籾椛楓蛻潛濳艾潜殯黐餠用糯餅桃者懶專専物尤勿畚戻許悖故旧下乖求礎素基本元綟捩文默沐杢黙耗檬网莽芒罔耄朦魍艨濛曚矇亡蒙毛孟猛網糢保若望揉燃洩貰藻漏以模母裳楙姆摸茂持喪もメ麪緜眄緬麺門棉綿面蓍珎珍♀娶貭粧妾牝瞽盲娚暈繞萌慈惠恵萠暝謎溟滅姪瞑盟酩銘鳴瑪賞睨奴雌芽碼召女減めム羣榁室簇邨屯連邑叢村紫梅葎宜憤毳槿葮椋酬報尨骸躯旨難睦酷麥麦対邀百迎昔空虚鞅宗棟胸掬娘結笞鞭徒蠧蝕蠹蟲蓆寧筵席莚虫毟貉狢豸貪聟壻婿霧向无無謀武鵡夢群牟梦六剥毋噎蒸咽務矛むミ渠霙溝妊澪薨岑嶺峰峯亂紊淫婬濫妄猥乱※*◇■簔穣簑蓑醜儖慘短惨幹研耳壥廛店操陵鶚崎岬巫尊詔勅敕>」砌汀頻→』】右翠碧緑認幣蹊径倫導途通路道瞠鬟髻湖自蹼蛟瑞癸禊晦漲源鏖港湊南瞶櫁謐水調貢密甕帝蜜覩幸脉脈韭韮竓粍瓱榠螟茗名妙命冥都宮罠閔皆眠明民看彌稔靡觀盈診箕三観美充深壬實視御魅味巳己身弥みマ毬鞠紕蝮麿転稀賓客檀繭黛眉巡囘周防衞衛護守荳菽豆.・。°◯圓槫゜)(丸謾鰻縵鬘懣幡幔蹣蔓瞞卍饅漫滿慢迄笆貧幻瞼蔟疎眩回廻儲申設招繚統纒的蟶孫弯彎籬擬免猿純亮信実委罷圸壗侭飯儘継随髷任蒭芻耙紛鮪見猯塗斈學眦眥眼俎愛学斑斗枡鱒桝舛升萬蠱呪薪槙槇牧窗悗惑円窓襠甼区街町前複亦俣叉跨全瞬木胯股又鍖枕膜幕瑁詣参參妹眛哩迷枚米賄賂埋昧邁毎沫抹奉靺枩秣祀纏祭睫末大太秀勝柾弄優成盛將松匡鉞賢希将誠昌征政正雅仁媽散茉馬在増混交間放摩負枉益敗眞待未麼撒巻魔蒔俟坐嘛舞捲目磨痲先墹真満播万曲卷雑まm光月♪♭♯ム¬⌒÷⊃≠∫∠±⊇⇔∃∇√∧≒∩∬∋∝≦∵Δ⇒∞⊂⊆⊥∀≫∴×∨≧≪≡∂∈∽∪♂曼麻●◎○〇モ〒′−マ最ミメМΜμm]\|ッ\_s*[モメムミマ]\|ッ\_s*[モメムミマ]\|っ\_s*[もめむみま]\|双\_s*\%([手墨親]\|向\_s*き\|差\_s*し\)\|蜀\_s*黍\|唐\_s*土\_s*\%(書\|文\_s*字\)\|両\_s*\%([角親刃]\|差\_s*し\)\|楊\_s*梅\_s*皮\|主\_s*水\|旺\_s*角\|紅\_s*[絹染葉]\|強\_s*請\|虎\_s*落\|痘\_s*瘡\|莫\_s*斯\_s*科\|固\_s*よ\_s*り\|一\_s*徳\|O\_s*l\_s*e\_s*a\_s*l\_s*e\_s*s\|惘\_s*然\|乙\_s*張\|赤\_s*目\_s*魚\|針\_s*孔\|妻\_s*[君合沼]\|墨\_s*西\_s*哥\|鍍\_s*金\|繍\_s*眼\_s*児\|夫\_s*婦\|乳\_s*母\|布\_s*の\_s*子\|没\_s*\%([薬後入却有]\|義\_s*道\|食\_s*子\)\|B\_s*\%(e\_s*r\_s*b\_s*e\_s*r\_s*i\_s*d\_s*a\_s*c\_s*e\_s*a\_s*e\|i\_s*o\_s*r\_s*r\_s*a\_s*g\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\)\|浮\_s*腫\|6\_s*日\|6\_s*日\|崇\_s*田\|刀\_s*背\|襁\_s*褓\|零\_s*余\_s*子\|蜈\_s*蚣\|産\_s*霊\|息\_s*子\|k\_s*\$\_s*_\_s*{\_s*i\_s*n\_s*f\_s*}\_s*\$\|蚯\_s*蚓\|A\_s*\%(b\_s*i\_s*e\_s*s\|p\_s*e\_s*t\_s*a\_s*l\_s*a\_s*e\|c\_s*r\_s*o\_s*s\_s*t\_s*i\_s*c\_s*h\_s*u\_s*m\)\|山\_s*陵\|雎\_s*鳩\|親\_s*王\|嬰\_s*児\|亨\_s*治\|陸\_s*奥\|皇\_s*[子女國]\|3\_s*[つ日]\|3\_s*[つ日]\|角\_s*[鴟髪子]\|七\_s*寸\|鳩\_s*尾\|鷦\_s*鷯\|孤\_s*児\|凝\_s*視\|兎\_s*唇\|R\_s*u\_s*t\_s*a\_s*l\_s*e\_s*s\|神\_s*[子輿酒]\|苗\_s*字\|海\_s*[雲蘊布藻蜂松山]\|P\_s*o\_s*d\_s*o\_s*p\_s*h\_s*y\_s*l\_s*l\_s*a\_s*c\_s*e\_s*a\_s*e\|土\_s*[龍竜産]\|京\_s*都\|横\_s*浜\_s*マ\_s*リ\_s*ノ\_s*ス\|肉\_s*刺\|忠\_s*実\|翻\_s*\%(筋\_s*斗\|車\_s*魚\)\|H\_s*a\_s*m\_s*a\_s*m\_s*e\_s*l\_s*i\_s*d\_s*a\_s*l\_s*e\_s*s\|不\_s*\%(味\|見\_s*[点転]\)\|兇\_s*々\|凶\_s*鳥\|澗\_s*潟\|勾\_s*玉\|禍\_s*[々禍事言]\|況\_s*し\|澳\_s*門\|苧\_s*麻\|茅\_s*台\_s*酒\|丈\_s*夫\|倍\_s*達\|微\_s*[塵妙睡]\|燐\_s*寸\|驀\_s*地\|L\_s*o\_s*g\_s*a\_s*n\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\|豫\_s*て\|陪\_s*臣\|売\_s*僧\|C\_s*\%(a\_s*s\_s*u\_s*a\_s*r\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\|e\_s*r\_s*a\_s*t\_s*o\_s*p\_s*y\_s*l\_s*l\_s*a\_s*c\_s*e\_s*a\_s*e\)\|S\_s*\%(a\_s*p\_s*i\_s*n\_s*d\_s*a\_s*l\_s*e\_s*s\|c\_s*h\_s*i\_s*s\_s*a\_s*n\_s*d\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\)\|理\_s*[之元]\|允\_s*彦\|祐\_s*史\|晶\_s*子\|公\_s*[美則輝]\|斉\_s*加\_s*年\|方\_s*夫\|多\_s*言\_s*語\_s*化\|ニ\_s*ー\_s*モ\_s*ニ\_s*ッ\_s*ク\|単\_s*量\_s*体\|会\_s*議\|和\_s*布\_s*[刈蕪]\|中\_s*間\_s*子\|薄\_s*荷\_s*脳\|行\_s*[幸列]\|写\_s*像\|日\_s*\%(米\_s*相\_s*互\_s*防\_s*衛\_s*援\_s*助\_s*協\_s*定\|本\_s*製\)\|M\_s*\%(H\_s*z\|サ\_s*イ\_s*ズ\|S\_s*−\_s*D\_s*O\_s*S\|L\_s*サ\_s*イ\_s*ズ\|r\_s*.\|b\_s*p\_s*s\|c\_s*C\_s*a\_s*r\_s*t\_s*h\_s*y\|o\_s*t\_s*i\_s*f\|a\_s*c\)\|計\_s*算\_s*機\|手\_s*紙\|ザ\_s*ッ\_s*ヘ\_s*ル\_s*=\_s*マ\_s*ゾ\_s*ッ\_s*ホ\|嗜\_s*虐\_s*的\_s*趣\_s*味\|被\_s*虐\_s*\%(趣\_s*味\|淫\_s*乱\_s*症\)\|修\_s*士\|仮\_s*面\|移\_s*送\|M\_s*\%([dngtOo式]\|X\_s*テ\_s*レ\_s*ビ\|サ\_s*イ\_s*ズ\|S\_s*-\_s*D\_s*O\_s*S\|L\_s*サ\_s*イ\_s*ズ\|P\_s*3\_s*プ\_s*レ\_s*\%(ー\_s*ヤ\_s*ー\|イ\_s*ヤ\_s*ー\)\|D\_s*\%(プ\_s*レ\_s*ー\_s*ヤ\_s*ー\|レ\_s*コ\_s*ー\_s*ダ\_s*ー\)\|c\_s*C\_s*a\_s*r\_s*t\_s*h\_s*y\|e\_s*\%(d\_s*u\_s*s\_s*a\_s*n\_s*d\_s*r\_s*a\_s*l\_s*e\_s*s\|i\_s*t\_s*n\_s*e\_s*r\_s*i\_s*u\_s*m\|t\_s*a\_s*F\_s*o\_s*n\_s*t\|n\_s*\%(y\_s*a\_s*n\_s*t\_s*h\_s*a\_s*l\_s*e\_s*s\|d\_s*e\_s*l\_s*e\_s*v\_s*i\_s*u\_s*m\)\|C\_s*a\_s*b\)\|u\_s*l\_s*e\|A\_s*C\_s*ア\_s*ド\_s*レ\_s*ス\|a\_s*\%(g\_s*n\_s*\%(o\_s*l\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|e\_s*s\_s*i\_s*u\_s*m\)\|n\_s*\%(u\_s*\%(s\_s*c\_s*r\_s*i\_s*p\_s*t\_s* \_s*E\_s*d\_s*i\_s*t\_s*i\_s*n\_s*g\|e\_s*d\)\|g\_s*a\_s*n\_s*e\_s*s\_s*e\)\|r\_s*y\_s*l\_s*a\_s*n\_s*d\|i\_s*n\_s*e\|k\_s*e\_s*f\_s*i\_s*l\_s*e\|c\_s*\%(h\|i\_s*n\_s*t\_s*o\_s*s\_s*h\)\|s\_s*\%(s\_s*a\_s*c\_s*h\_s*u\_s*s\_s*e\_s*t\_s*t\_s*s\|t\_s*e\_s*r\_s*C\_s*a\_s*r\_s*d\)\)\|i\_s*\%(n\_s*n\_s*e\_s*s\_s*o\_s*t\_s*a\|s\_s*s\_s*\%(i\_s*s\_s*s\_s*i\_s*p\_s*p\_s*i\|o\_s*u\_s*r\_s*i\)\|c\_s*\%(r\_s*o\_s* \_s*S\_s*o\_s*f\_s*t\_s*w\_s*a\_s*r\_s*e\_s* \_s*A\_s*s\_s*s\_s*o\_s*c\_s*i\_s*a\_s*t\_s*e\_s*s\|h\_s*i\_s*g\_s*a\_s*n\)\)\|I\_s*\%(T\|P\_s*S\|M\_s*D\)\)\|エ\_s*ム\)', - \ 'n' : '\%([ンンんノ麕咒燧烽詛呪孔伯朔雅悳弼教糊典規矩憲範宜紀哲修惟允亘攵展順暢信則法後罵吭咽喉鑿蚤々湾宣曰覘臨稀望覗殘遺残鋸芒禾騰幟昇登上檐簷軒逸遁王瑙衲曩碯皇腦嚢膿能脳農除延熨廼退埜野飲載乘飮之伸嚥述乗呑−濃陳のネ塒姉濘檸嚀聹侫寧佞鼡鼠拗猫嫉妬希願捏熱労犒葱狙閨睡棔眠稔然棯懇拈撚燃念年涅粘値根捻嶺祢錬寝袮捩音練禰煉子寢ねヌ絖垈饅帛幣鵺主蛻拭温布沼盜偸窃盗抽擢緯糠額濡脱怒縫抜奴拔貫塗ぬニ楡蒻潦鷄鶏瀑庭繞獰女尿韭薤眈睨韮姙刄儿蒜葫刃忍∀妊認任人乳擔蜷担濁賑握俄鳰臭匂沸錵贄僞偐贋偽柔靤如苦膠霓滲虹躙廿《》◎∬』『悪憎兄螺鰊鯡錦西入新肉‖岻逃児弐二邇2貳迩煮貮迯仁尼似荷2弍丹にナ靡抔嫐嬲鯆屶釶鉈泥薺詰若慨歎嘆抛毆擲撲殴慰治癒等猶直泪波邉辺邊鍋浪某棘棗懷懐夏擦梨情懶譌艶訛鉛鮠癜鯰韲鱠膾憖怠鈍腥捺凖擬准準謎洋涙宥傾灘詠霖眺痼存乍流轅永和梛椥渚長莫毋勿半・媒仲中7斜七蔑乃尚内繩畷縄苗滑鞣惱悩就哉也斉形業徳娚垂喃∵楠尓爾汝男軟難何倣枹均柞双肄列⊃⇒→楢習竝茄啾納無那拿舐娜做涕投馴南熟並儺生凪鳴為綯奈嘗哭嚶爲狎薙萎菜魚慣泣亡失痿撫啼な┘┛│┃┨┫┤┥├┝┣┠┼╋╂┿成#∋∇名┗└n日≒ニネ¬〜≠ナヌノΝНнνn]\|帳\_s*面\|狼\_s*[烟煙]\|惚\_s*気\|暖\_s*[簾気]\|礼\_s*江\|功\_s*晶\|祈\_s*子\|訓\_s*子\|賀\_s*子\|式\_s*部\_s*省\|記\_s*代\|倫\_s*[明子宗]\|敬\_s*之\|賭\_s*弓\|誠\_s*也\|敦\_s*子\|悦\_s*旦\|祝\_s*[女詞]\|仰\_s*け\_s*反\|盧\_s*泰\_s*愚\|逆\_s*上\|凌\_s*霄\_s*花\|姐\_s*さ\_s*ん\|杜\_s*松\|強\_s*請\|合\_s*歓\|微\_s*温\|零\_s*余\_s*子\|酸\_s*漿\|鐃\_s*鉢\|鰾\_s*膠\|I\_s*I\_s*部\|耳\_s*根\|面\_s*皰\| \_s*2\_s* \_s*次\_s*曲\_s*面\|M\_s*y\_s*r\_s*i\_s*s\_s*t\_s*i\_s*c\_s*a\_s*c\_s*e\_s*a\_s*e\|莞\_s*爾\|P\_s*b\|L\_s*e\_s*a\_s*d\|海\_s*[苔鼠]\|C\_s*\%(e\_s*l\_s*a\_s*s\_s*t\_s*r\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|a\_s*r\_s*y\_s*o\_s*p\_s*h\_s*y\_s*l\_s*l\_s*a\_s*l\_s*e\_s*s\)\|雪\_s*崩\|竹\_s*節\_s*虫\|7\_s*[日個]\|地\_s*震\|行\_s*[木方]\|大\_s*\%(蒜\|理\_s*石\)\|蛞\_s*蝓\|弱\_s*竹\|追\_s*儺\|済\_s*\%(し\_s*崩\|り\_s*物\)\|可\_s*成\|平\_s*城\|不\_s*成\|空\_s*リ\_s*ス\_s*ト\|T\_s*h\_s*e\_s* \_s*N\_s*e\_s*t\_s*w\_s*o\_s*r\_s*k\_s* \_s*I\_s*n\_s*f\_s*o\_s*r\_s*m\_s*a\_s*t\_s*i\_s*o\_s*n\_s* \_s*C\_s*e\_s*n\_s*t\_s*e\_s*r\|S\_s*o\_s*\%(l\_s*a\_s*n\_s*a\_s*l\_s*e\_s*s\|d\_s*i\_s*u\_s*m\)\|紐\_s*育\|フ\_s*ォ\_s*ン\_s*・\_s*ノ\_s*イ\_s*マ\_s*ン\|ヤ\_s*ー\_s*ノ\_s*ッ\_s*シ\_s*ュ\_s*・\_s*フ\_s*ォ\_s*ン\_s*・\_s*ノ\_s*イ\_s*マ\_s*ン\|オ\_s*ラ\_s*ン\_s*ダ\|ア\_s*メ\_s*リ\_s*カ\_s*ネ\_s*ッ\_s*ト\_s*ワ\_s*ー\_s*ク\|番\_s*号\|節\_s*点\|N\_s*\%([点O]\|ク\_s*ィ\_s*ー\_s*ン\|\.\_s*Y\_s*\.\|i\_s*f\_s*t\_s*y\|I\_s*F\_s*T\_s*Y\|a\_s*\%(v\_s*i\|t\_s*u\_s*r\_s*e\)\|e\_s*\%(X\_s*T\|m\_s*a\_s*c\_s*s\|w\_s*−\_s*J\_s*e\_s*r\_s*s\_s*e\_s*y\|W\_s*S\|u\_s*r\_s*a\_s*l\)\|E\_s*\%(m\_s*a\_s*c\_s*s\|T\_s*t\_s*a\_s*l\_s*k\)\|o\_s*\%(.\|ё\_s*l\)\)\|夜\_s*想\_s*曲\|諾\_s*威\|正\_s*常\|N\_s*\%([dpbaeoi]\|R\_s*Z\_s*I\|-\_s*g\_s*r\_s*a\_s*m\|G\_s*ワ\_s*ー\_s*ド\|H\_s*K\_s*\%(ホ\_s*ー\_s*ル\|ラ\_s*ジ\_s*オ\)\|T\_s*T\|Y\_s*ダ\_s*ウ\|U\_s*L\_s*L\|A\_s*S\_s*A\|E\_s*\%(C\|p\_s*o\_s*c\_s*h\|m\_s*a\_s*c\_s*s\)\)\|窒\_s*素\|エ\_s*ヌ\)', - \ 'o' : '\%([オ俺游泳指妖在畢檻澱氈拇親愚疎颪卸念錘惟慮赴徐趣俤羈主想表重面隱瘟園Å怨♀妾温恩鈍悍臣覺溺朦朧思覚榲現朮桶踴威嚇戯縅棘駭愕驚躍踊傲奢驕嚴厳遣痴瘧怒行怠蒹補荻獺懼惧怐虞畏恐襲甥笈及綬葹仝ヾ〃ゝヽゞ々同唖繦襁鴦鴛教几忍筬收兎抑稚長幼治理収修遲檍納後遅賻饋諡贈送憶袵臆拜拝冒犯岳崗峻阜侵奇陵女陸丘岡欄斧自己各戦鬼衰劣囮頤訪貶乙♂漢音弟阿脅怯首夥誘屋膃億穩穏煽煕熈燠熾諚掟興隠沖毆姶澳秧浤凰徃枉罌殃翁鴬泓奧嚶墺悒泱閘瓮襖蓊惶鸚懊媼嫗鴎怏鏖謳旺凹鴨櫻欒樗楝殴朷甌汪横往鞅歐嘔陷陥遠奄蓋夛応果應掩蔽概欧公邑麋薤被仰扇皇狼弁鵬鴻鳳黄奥多衽覆粱凡鰲頁王居央郎措擱堕尾置麻朗怖悪追帶折塢負墜織老汚生勇小嗚夫惜起唹落男推将穂壓淤御緒墮逐下牡捺雄降桜押圧苧帯於終乎おo大◎∞和∝♪∨∪開оОο○ωΟオΩo]\|濠\_s*太\_s*剌\_s*利\|父\_s*[娘子]\|母\_s*[子娘屋]\|万\_s*年\_s*青\|本\_s*懸\_s*魚\|玩\_s*具\|沢\_s*瀉\|A\_s*l\_s*i\_s*s\_s*m\_s*a\_s*t\_s*a\_s*l\_s*e\_s*s\|厭\_s*離\|乳\_s*母\_s*日\_s*傘\|陰\_s*[陽地]\|飲\_s*[食酒]\|慍\_s*色\|婦\_s*系\_s*図\|手\_s*術\|螻\_s*蛄\|十\_s*八\_s*番\|鉄\_s*漿\|海\_s*髪\_s*海\_s*苔\|虎\_s*魚\|花\_s*魁\|美\_s*味\|含\_s*羞\_s*草\|白\_s*粉\|渡\_s*島\|通\_s*事\|訳\_s*語\|晩\_s*[稲生]\|可\_s*笑\|惡\_s*寒\|傍\_s*[目惚見]\|叔\_s*[父母]\|伯\_s*[父母]\|姨\_s*捨\|少\_s*女\|侠\_s*気\|G\_s*u\_s*t\_s*t\_s*i\_s*f\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|D\_s*i\_s*l\_s*l\_s*e\_s*n\_s*i\_s*a\_s*l\_s*e\_s*s\|H\_s*y\_s*p\_s*e\_s*r\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\|霊\_s*屋\|蝌\_s*蚪\|飫\_s*肥\|佩\_s*物\|良\_s*人\|纓\_s*田\|C\_s*o\_s*p\_s*t\_s*i\_s*d\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|鷹\_s*揚\|椀\_s*飯\_s*振\_s*\%(舞\|る\_s*舞\)\|相\_s*知\|鶯\_s*語\|近\_s*江\|零\_s*落\|越\_s*[生訴知智度]\|彼\_s*方\|祖\_s*[神父母]\|車\_s*前\|従\_s*祖\_s*[母父]\|青\_s*[梅海木]\|太\_s*\%(田\|安\_s*万\_s*侶\|上\_s*天\_s*皇\)\|巨\_s*頭\|逢\_s*[魔瀬隈坂]\|そ\_s*の\_s*他\|承\_s*知\_s*し\_s*ま\_s*し\_s*た\_s*\.\|烏\_s*[滸龍]\|t\_s*h\_s*e\_s* \_s*O\_s*b\_s*j\_s*e\_s*c\_s*t\_s* \_s*M\_s*a\_s*n\_s*a\_s*g\_s*e\_s*m\_s*e\_s*n\_s*t\_s* \_s*G\_s*r\_s*o\_s*u\_s*p\|立\_s*石\_s*電\_s*機\|職\_s*業\|楕\_s*円\|ウ\_s*\%(ィ\|ー\_s*\%(ズ\|ロ\_s*ン\)\|ロ\_s*ボ\_s*ロ\_s*ス\)\|出\_s*力\|ア\_s*\%(ワ\|ザ\_s*ー\|ウ\_s*\%([チト]\|タ\_s*ー\)\)\|基\_s*本\_s*ソ\_s*フ\_s*ト\_s*ウ\_s*ェ\_s*ア\|一\_s*\%(昨\_s*[年日]\|対\_s*一\)\|ワ\_s*ン\|ま\_s*た\_s*は\|論\_s*理\_s*和\|聖\_s*譚\_s*曲\|水\_s*中\_s*酸\_s*素\_s*破\_s*壊\_s*剤\|蛋\_s*白\_s*石\|最\_s*適\_s*化\|O\_s*\%([脚型]\|R\_s*E\|\.\_s*K\_s*\.\|S\_s*9\|リ\_s*ン\_s*グ\|p\_s*e\_s*n\_s*\%(L\_s*o\_s*o\_s*k\|W\_s*i\_s*n\_s*d\_s*o\_s*w\_s*s\)\)\|歌\_s*劇\|演\_s*算\_s*子\|操\_s*作\|酸\_s*素\|O\_s*\%([型脚sS]\|h\_s*i\_s*o\|k\_s*l\_s*a\_s*h\_s*o\_s*m\_s*a\|b\_s*j\_s*e\_s*c\_s*t\_s*-\_s*O\_s*r\_s*i\_s*e\_s*n\_s*t\_s*e\_s*d\|O\_s*\%(D\_s*L\|P\_s*L\)\|M\_s*R\_s*O\_s*N\|A\_s*ク\_s*リ\_s*ー\_s*ナ\_s*ー\|C\_s*R\_s*ソ\_s*フ\_s*ト\|r\_s*e\_s*g\_s*o\_s*n\|''\_s*R\_s*e\_s*i\_s*l\_s*l\_s*y\_s* \_s*J\_s*a\_s*p\_s*a\_s*n\|リ\_s*ン\_s*グ\|p\_s*e\_s*n\_s*W\_s*i\_s*n\_s*d\_s*o\_s*w\|x\_s*y\_s*g\_s*e\_s*n\)\)', - \ 'p' : '\%([本磅椪烹砲法方報舖舗歩ぽ併閉閇蔽×遍編片邉篇辺邊屁ぺ幅服風分腐布符泌匹俵憑票品筒平日犯版搬幇板払腹發発走箱拍朴駮泊博愽包放配盃敗牌杯八破羽波播張ぱp鉛Ψψぴ±+ぷΦφ├┣∝北┴‰.%£〒・点プポ頁)(∂¶‖ペパПΠп燐πピp]\|ッ\_s*\%(ホ\_s*゚\|ヘ\_s*゚\|フ\_s*゚\|ヒ\_s*゚\|ハ\_s*゚\)\|ッ\_s*[ポペプピパ]\|っ\_s*[ぽぺぷぴぱ]\|ホ\_s*゚\|先\_s*斗\_s*町\|ヘ\_s*゚\|祕\_s*[露魯]\|フ\_s*゚\|釜\_s*山\|普\_s*魯\_s*西\|ヒ\_s*゚\|皮\_s*蛋\|光\_s*一\|ハ\_s*゚\|麺\_s*麭\|巴\_s*\%(里\|奈\_s*馬\)\|C\_s*y\_s*c\_s*l\_s*a\_s*n\_s*t\_s*h\_s*a\_s*l\_s*e\_s*s\|S\_s*y\_s*n\_s*a\_s*n\_s*t\_s*h\_s*a\_s*e\|排\_s*骨\|B\_s*r\_s*o\_s*m\_s*e\_s*l\_s*i\_s*a\_s*l\_s*e\_s*s\|L\_s*e\_s*a\_s*d\|白\_s*[板酒金]\|シ\_s*\%(ュ\_s*ー\_s*ド\|ロ\_s*シ\_s*ビ\_s*ン\)\|サ\_s*\%(ー\_s*ム\|イ\_s*\%([ズクケコ]\|ロ\_s*シ\_s*ビ\_s*ン\|リ\_s*ウ\_s*ム\|キ\_s*ッ\_s*ク\)\)\|+\_s*α\|ホ\_s*\%(ン\|ス\_s*ゲ\_s*ン\)\|ヒ\_s*ロ\_s*ポ\_s*ン\|比\_s*\%(布\|律\_s*賓\)\|フ\_s*\%(リ\_s*ジ\_s*ア\_s*ン\|レ\_s*\%(イ\_s*ジ\_s*ン\_s*グ\|ー\_s*\%(ズ\|ジ\_s*ン\_s*グ\)\)\|タ\_s*レ\_s*イ\_s*ン\|ォ\_s*\%([ーンノト]\|ボ\_s*ス\|ビ\_s*ア\|ス\_s*フ\_s*ァ\_s*ー\|ニ\_s*ー\)\|ァ\_s*\%(イ\|ラ\_s*オ\|ー\_s*\%([ジマ]\|ミ\_s*ン\_s*グ\)\|ン\_s*\%(ト\_s*ム\|タ\_s*ズ\_s*[ムマ]\)\|ル\_s*[ツス]\|レ\_s*ノ\_s*プ\_s*シ\_s*ス\)\|ィ\_s*\%([ロル]\|ジ\_s*\%(ッ\_s*ク\_s*ス\|カ\_s*ル\)\|ー\_s*ビ\_s*ー\|ッ\_s*シ\_s*ン\_s*グ\|レ\_s*モ\_s*ン\|ラ\_s*デ\_s*ル\_s*フ\_s*ィ\_s*ア\|リ\_s*\%([スーアパ]\|ッ\_s*[プパ]\|ピ\_s*\%(ン\|ー\_s*ヌ\)\)\)\|ェ\_s*\%(ー\_s*\%([ベズ]\|ジ\_s*ン\_s*グ\)\|イ\_s*ズ\|ロ\_s*モ\_s*ン\|ニ\_s*\%(ル\|ッ\_s*ク\_s*ス\|キ\_s*ア\|ー\_s*ル\)\|ノ\_s*\%(キ\_s*シ\|ー\_s*ル\)\)\)\|述\_s*語\|証\_s*明\|タ\_s*ン\_s*パ\_s*ク\_s*質\|処\_s*理\|手\_s*続\_s*き\|進\_s*行\|算\_s*譜\|利\_s*潤\|南\_s*瓜\|宣\_s*伝\|公\_s*告\|真\_s*珠\|P\_s*\%(波\|L\_s*法\|C\_s*\%(/\_s*A\_s*T\|9\_s*8\|モ\_s*デ\_s*ル\)\|o\_s*s\_s*t\_s*S\_s*c\_s*r\_s*i\_s*p\_s*t\|S\_s*.\|.\_s*S\_s*.\|i\_s*t\_s*I\_s*n\_s*n\|r\_s*o\_s*\%(l\_s*o\_s*g\|t\_s*e\_s*o\_s*n\)\|e\_s*r\_s*\%(l\|i\_s*o\_s*d\)\)\|永\_s*続\|カ\_s*リ\_s*ウ\_s*ム\|葡\_s*萄\_s*牙\|重\_s*合\_s*体\|多\_s*相\_s*型\|バ\_s*テ\_s*レ\_s*ン\|貼\_s*り\_s*付\_s*け\|論\_s*文\|偏\_s*執\_s*[狂病]\|引\_s*数\|リ\_s*ン\|P\_s*\%([umdCaor]\|K\_s*戦\|D\_s*F\_s*フ\_s*ァ\_s*イ\_s*ル\|コ\_s*ー\_s*ド\|タ\_s*イ\_s*ル\|\.\_s*S\_s*\.\|S\_s*\%(\.\|Y\_s*・\_s*S\)\|I\_s*C\_s*マ\_s*イ\_s*コ\_s*ン\|l\_s*\%(a\_s*t\_s*i\_s*n\_s*u\_s*m\|u\_s*t\_s*o\_s*n\_s*i\_s*u\_s*m\)\|E\_s*T\_s*ボ\_s*ト\_s*ル\|O\_s*S\_s*\%(シ\_s*ス\_s*テ\_s*ム\|I\_s*X\|T\_s*メ\_s*ソ\_s*ッ\_s*ド\)\|e\_s*\%(r\_s*l\|n\_s*\%(t\_s*\%(o\_s*x\_s*y\_s*l\_s*i\_s*d\_s*a\_s*e\|i\_s*u\_s*m\)\|n\_s*s\_s*y\_s*l\_s*v\_s*a\_s*n\_s*i\_s*a\)\)\|h\_s*o\_s*s\_s*p\_s*h\_s*o\_s*r\_s*u\_s*s\)\)', - \ 'q' : '\%([配椚橡檪櫪栩椡椪椢湫櫟含纐柵婚屎糞癖潛潜鵠裹凹窪馘括縊踵跟頚軛珞頸首諄鞋履窟寛狐轡覆靴沓碎砕管条降件頽崩屑葛釘莖茎陸杙株杭掘崛倔鶏鐃藥擽薬樟楠髪酒梳櫛串釧與与挫籖鯀鯨鬮籤隈熊艸嚔藾叢鏈腐鎖種Ξξ臭日茸菌楔草圀邦國国髭漱嗽吻嘴喙唇脣蛇梔腔φ劫刧 空粂裙勳熏皹桾皸醺下薫燻訓勲葷君委詳钁精企鍬加咥銜桑塊某暝晦峅競昏冥眛罔鮓較比闇位鞍藏暗倉廚厨涅々〃ゝヽゞ仝ヾ曇雲蜘栗狂包俥車曲廓郭梍枢踝畔鉄鐵★●■玄蔵黒拘食徠久孔桍窶暮焼懼駒柧苦朽区眩吁繰庫垢駆鉤紅呉倶駈汲宮枸劬矩煦驅口9瞿工悔供功吼怐喰玖貢九惧来來區組奇句狗鳩酌絎嶇躯衢屈刳クくq‘“’”♪ケ?ク¶q]\|ッ\_s*ク\|ッ\_s*ク\|っ\_s*く\|姑\_s*娘\|箜\_s*篌\|救\_s*世\|莎\_s*草\|傀\_s*儡\|被\_s*下\_s*度\|百\_s*[濟済]\|果\_s*物\|恭\_s*敬\|9\_s*月\|長\_s*月\|秧\_s*鶏\|究\_s*竟\|釉\_s*掛\|典\_s*薬\_s*寮\|天\_s*鼠\_s*矢\|L\_s*a\_s*u\_s*r\_s*\%(a\_s*c\_s*e\_s*a\_s*e\|o\_s*i\_s*d\_s*e\_s*a\_s*e\)\|探\_s*湯\|誓\_s*湯\|球\_s*磨\|六\_s*合\|地\_s*祇\|都\_s*子\|州\_s*光\|山\_s*梔\_s*子\|崑\_s*央\|群\_s*衆\|慈\_s*姑\|旧\_s*\%(訳\|唐\_s*書\)\|c\_s*r\_s*e\_s*s\_s*c\|海\_s*月\|水\_s*[鶏母]\|内\_s*蔵\_s*助\|K\_s*r\|H\_s*e\_s*l\_s*l\_s*e\_s*b\_s*o\_s*r\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|公\_s*\%([家方卿界美事文]\|出\_s*挙\)\|佝\_s*僂\_s*病\|J\_s*u\_s*g\_s*l\_s*a\_s*n\_s*d\_s*a\_s*l\_s*e\_s*s\|胡\_s*桃\|C\_s*\%(r\|h\_s*r\_s*o\_s*m\_s*i\_s*u\_s*m\)\|R\_s*h\_s*a\_s*m\_s*n\_s*a\_s*l\_s*e\_s*s\|Q\_s*&\_s*A\|珠\_s*穆\_s*朗\_s*瑪\|チ\_s*ョ\_s*モ\_s*ラ\_s*ン\_s*マ\|Q\_s*\%(I\_s*C\|R\_s*コ\_s*ー\_s*ド\|C\_s*サ\_s*ー\_s*ク\_s*ル\|U\_s*O\_s*カ\_s*ー\_s*ド\)\|『\_s*』\|コ\_s*\%(ー\_s*ラ\_s*ン\|ン\_s*テ\_s*ィ\_s*フ\_s*ァ\_s*イ\_s*ア\)\|問\_s*合\_s*せ\|カ\_s*\%(ザ\_s*ン\|タ\_s*ー\_s*ル\|ス\_s*バ\|ー\_s*ヌ\_s*ー\_s*ン\|ナ\_s*ー\_s*ト\|ダ\_s*フ\_s*ィ\|リ\_s*テ\|ド\_s*リ\_s*ー\_s*[ルユ]\|ル\_s*\%(チ\_s*[エェ]\|テ\_s*\%(ィ\_s*エ\|ッ\_s*ト\)\)\|ン\_s*タ\_s*[ムスン]\)\|質\_s*問\|キ\_s*\%(ト\|ブ\_s*ラ\|ホ\_s*ー\_s*テ\|ハ\_s*ー\_s*ダ\|ル\_s*\%(ト\|テ\_s*ィ\_s*ン\_s*グ\)\|ー\_s*ン\|ノ\_s*ン\|ッ\_s*シ\_s*ュ\|ュ\_s*\%(ー\|エ\_s*リ\)\)\)', - \ 'r' : '\%([ロ崘侖崙堽栄論漉祿轆碌肋勒麓禄鹿6録蘢滝潦榔簍柆鑞弄咾瑯焜朖螂螻樓隴哢實臈槞僂瓏勞薐琅朧壟撈臘郎瘻廊牢浪蝋癆聾楼篭籠狼漏朗蘆顱炉髏爐櫨蕗賂艪瀘臚枦輅鹵廬櫓轤鷺驢艫櫚滷ろレ洌鴒聆蛎糲綟儷蛉砺苓唳勵〇澪犁齡蠡囹齢黎羚戻禮祈隸茘麗隷玲伶癘励零冷例冽劣烈裂列癧轣檪櫪靂鬲瀝礫轢歴瀲鎌縺嗹漣鏈匳斂濂戀奩輦簾櫺∧聨憐恋蓮煉錬攣練聯廉連れル♪路盧泪壘縲瘰誄涙羸塁累類鏤屡縷褸婁陋璢るリ犂篥葎率慄栗淕勠六戮陸律擽畧暦掠略鏐鉚窿餾畄旒瀏苙霤瑠嶐澑瘤嚠笠榴溜硫琉留立柳粒劉隆流痳鈴麟P懍躪藺鄰棆醂菻廩躙淪厘凜霖琳悋綸淋禀稟凛鱗倫吝隣林燐臨侶絽踉梠膂虜呂慮仂力緑裲鐐椋靈魎崚鬣嶺獵楞怜暸倆繆粮廖兩蓼鷯粱輌凉輛燎瞭聊陵令梁糧諒霊龍凌遼漁亮寮⇔涼繚撩綾療量竜菱僚領喨了稜寥両料閭旅離吏履裡璃理釐痢裏俐俚莅漓利驪李哩梨詈悧罹浬籬里莉りラΛλ亂儖攬覧臠覽瀾欒襴婪繿欖檻籃巒嬾纜襤懶爛藍鸞卵濫闌嵐欄乱蘭労剌溂老埓埒猟薤辣喇樂珞犖絡駱酪烙楽落洛徠蕾賚醴罍櫑擂儡耒籟莱磊癩來礼雷頼来們裸等鑼邏蘿拉螺騾良らr右→ТбуЖВоЙЗЪжзИУЯвяшфКСлЁХпОЦЭЧФЫЩъ魯Бы露ШйхМкПгдмцНЛёаиэетАГчЬюЕЮсьнщД輪根√羅ロ々ラルレリРρΡрr]\|ッ\_s*[ロレルリラ]\|ッ\_s*[ロレルリラ]\|っ\_s*[ろれるりら]\|鱸\_s*魚\|芦\_s*[有花]\|濾\_s*[胞過紙]\|6\_s*[時月]\|水\_s*無\_s*月\|檸\_s*檬\|坩\_s*堝\|A\_s*\%(c\_s*t\_s*a\_s*e\_s*a\|p\_s*o\_s*p\_s*e\_s*t\_s*a\_s*l\_s*a\_s*e\)\|C\_s*\%(a\_s*l\_s*y\_s*c\_s*a\_s*n\_s*t\_s*h\_s*a\_s*c\_s*e\_s*a\_s*e\|h\_s*o\_s*r\_s*i\_s*p\_s*e\_s*t\_s*a\_s*l\_s*a\_s*e\)\|鯉\_s*[魚城]\|二\_s*\%(索\|翻\_s*縛\)\|V\_s*e\_s*r\_s*t\_s*i\_s*c\_s*i\_s*l\_s*l\_s*a\_s*t\_s*a\_s*e\|O\_s*r\_s*c\_s*h\_s*i\_s*d\_s*a\_s*l\_s*e\_s*s\|M\_s*i\_s*c\_s*r\_s*o\_s*s\_s*p\_s*e\_s*r\_s*m\_s*a\_s*e\|L\_s*\%([ruia]\|e\_s*i\_s*t\_s*n\_s*e\_s*r\_s*i\_s*a\_s*l\_s*e\_s*s\|A\_s*N\_s*ケ\_s*ー\_s*ブ\_s*ル\)\|海\_s*獺\|G\_s*\%(e\_s*n\_s*t\_s*i\_s*a\_s*n\_s*a\_s*l\_s*e\_s*s\|y\_s*\%(n\_s*a\_s*n\_s*d\_s*r\_s*a\_s*e\|m\_s*n\_s*o\_s*s\_s*p\_s*e\_s*r\_s*m\_s*a\_s*e\)\)\|関\_s*係\_s*デ\_s*ー\_s*タ\_s*ベ\_s*ー\_s*ス\|数\_s*理\_s*解\_s*析\_s*研\_s*究\_s*所\|京\_s*都\_s*大\_s*学\_s*数\_s*理\_s*解\_s*析\_s*研\_s*究\_s*所\|電\_s*気\_s*通\_s*信\_s*研\_s*究\_s*所\|東\_s*北\_s*大\_s*\%(学\_s*電\_s*気\_s*通\_s*信\_s*研\_s*究\_s*所\|通\_s*研\)\|限\_s*定\_s*命\_s*令\_s*セ\_s*ッ\_s*ト\_s*計\_s*算\_s*機\|範\_s*囲\|規\_s*則\|紅\_s*玉\|要\_s*求\|検\_s*索\|復\_s*帰\|返\_s*[事信]\|拒\_s*否\|反\_s*射\_s*鏡\|参\_s*\%(考\_s*文\_s*献\|照\_s*型\)\|R\_s*\%(I\_s*N\_s*A\|&\_s*D\|S\_s*−\_s*2\_s*3\_s*2\_s*C\|u\_s*m\_s*b\_s*l\_s*e\|e\_s*n\_s*o\)\|機\_s*能\_s*回\_s*復\_s*訓\_s*練\|再\_s*帰\_s*的\|認\_s*識\|R\_s*\%([bnfeauh]\|i\_s*c\_s*h\_s*a\_s*r\_s*d\_s* \_s*M\_s*\.\_s* \_s*S\_s*t\_s*a\_s*l\_s*l\_s*m\_s*a\_s*n\|C\_s*S\|S\_s*S\_s*リ\_s*ー\_s*ダ\|I\_s*S\_s*C\|A\_s*M\|O\_s*M\|E\_s*\%(M\_s*睡\_s*眠\|T\_s*U\_s*R\_s*N\_s*キ\_s*ー\|A\_s*D\_s*M\_s*E\)\)\|正\_s*規\_s*表\_s*現\|ア\_s*ー\_s*ル\)', - \ 's' : '\%([ソ似杣灌傍峙毓育具供備害底苑薗園儲酘貮埆妬埣讒譏詆誹謗濡外猝率喞熄仄息足促束測側燥偬雙帚艘箒諍滝嗽剏湊蔟赱鯵抓嫂贈樔屮壯愡葱澡瀧艚勦歃叟裝竈梍蚤甑搶笊窗薮奘崢槽筝菷弉輳爭掫竃譟箱髞嗾懆瘡孀窓踪匝噪遭艙爪糟莊倉淙曹匆怱繰宋漕簇槍躁鎗箏綜喪痩藻艸葬壮操掻掃奏蹌滄争草層創蒼叢僧走惣送叛乖抑諳某橇轌艝鱒邨巽噂拵忖蹲樽孫遜存尊損囎祚租酥措踈鼡阻詛礎疏疎其蘓齟胙副鼠噌反愬蔬沿祖塑姐訴爼逸組俎徂粗麁疽甦沮咀想そセ芹鬩旃錢刋箭羶潛筌孅阡栫舩氈纎濺舛甎銛簽湶茜槧巛吮癬籤倩痊孱擶贍纖仟磚燹揃綫喘涎荐饌槫濳沾籖筅蟾牋苫專翦亘鐫僣韆箋僊殱殲闡釧賎餞羨顫甅竰糎¢陝踐銓閃潺遷銑栴川剪煽譫僉瞻践跣栓疝詮銭穿戰僭繊腺泉嬋擅淺鮮専潜扇蘚船浅線撰宣洗煎戦千忙伜倅逼蝉旋屑鱈薛椄絏洩卩泄紲攝緤褻浙竊℃窃拙摂接節楔關磧蓆晰威裼績蹐迹蹠跖跡瘠藉勣籍淅晢夕鶺潟碩惜析関席隻甥韲嘶菁瀞晟貰擠睛筬淒婿撕牲齏情萋穽躋掣腥逝惺旌蜻整靖誓制晴攻瀬急勢世競畆丗糶畝堰脊せス鯣鋭坐座李既已昴術辷全滑皇脛臑裾双英村選優営寸漱雪濯薦啌勸啜勧芒薄煤賺鼈捩筋頗亮丞甫輔佑祐介助蘇裔陶曽乃曾即則淳漁篶鑾凉漫硯雀涼鱸鮓鮨遊椙犁耒犂篦隙尽末眇縋管菅廢頽廃窘救掬尠寡粭糘菫速純鈴炭角墨隅】【鄒數陬雛芻菘嵩崇趨樞∃∵¬⌒∀÷≠Δ≫⇒∴×∨≧∫∠∇±≪∧∞≒⇔∩∂∈∬∋∝枢錘帥粹騅陲捶忰悴邃瘁翆萃榱隹誰醉遂膵燧彗綏錐穂炊翠⊥H吹粋推水酔睡棲統耡総漉饐住空寿籔醋簾棄直鋤巣栖剥磨梳擂澂掏總剃好過拗澄吸喫据壽透シ埀謐蘂蕋蕊痺褥茵鵐蔀鷸鴫霑入蔵嶌縞嶋島凋澀沫澁渋縛暫屡荵凌鎬忍簧慕舖↓襪健認啝随從从.舌扱罔虐Θθ秕粃椎椣卓尿貎肉臠猪榻黙蜆楙誠茂成繁重惻鋪陣頻閾櫁樒鹽汐潮瑟蛭疾櫛隲隰嫉蟋漆躾膝失室沒鎭沈滴雫賤鎮靜顰尓爾聢確併◇◆鹿貭叱征質卯滋撓科品鬼鍜錏錣痼凝而拉設萎栞襞吝咳爲什導怪汁験記徴著印○〇』銀城代『報調蝨濕湿七僕楚笞霜臀退斥尻冩寫舍者卸柘炙暹諜喋煮這謝鯱奢赦捨瀉妁鑠嚼抉蹟勺決釋皙爍昔斫蜥刳芍酌爵折癪笏赤灼綽石尺借赭写鷓積舎車斜釈社洙麈殳蛛娶株娵諏鬚侏繻銖卒槭蹙俶倏菽叔蓿粥戚肅淑夙粛縮取殊趣珠恤卆蟀出洲泅楸綉溲遒酬鷲駲楫緝嗅葺穐蹤繍螽讐甃萩楢逎讎鰍售岫收驟舅囚姑蓚鞦脩輯醜習羞酋聚舟秀祝袖啾拾蒐収執衆愁襲就臭蹴週終褶州宗椶棕守朱撞種修周手首狩須儁惷悛雋皴墫蕣順蠢舜旬竣峻駿逡筍春瞬俊蓁畛矧縉蔘鷏齔嗔忱譛袗譖娠疹哂脣簪怎晉鷆臻甄槙寢岑瀋箴軫榛秦襯診鉐津駸讖紳斟唇針呻蜃賑芯瞋振殿侵辛薪晨辰震宸森眞愼伸慎寝晋身進深審親臣鍼心宍信神薯墅杵岨且藷黍苜渚砠狙嶼處胥蜍苴曙背塩緒枌雎蔗庶処所書暑奬簫浹橸舂艢廂陞炒鍬庠獎梢璋將厰邵摺淞訟樅筱燮橡餉愴韶誚峭甞姓敞聲懾稍嘗腫政顳枩慯殤秤湫礁井星廠剿妝霎蛸劭觴愀升鬆樵鷦嶂醤従慫逍倡竦爿墻牆薔笙樟装肖菖≦<湘誦聳檣稱声裳)(蒋蕉嘯慴精霄鈔粧彰鏘悚蕭悄瀟哨焦憔匠鍾償瘴漿頌詔沼妾請衝唱薑庄渉奨娼床牀椒抄荘翔鉦宵傷踵銷召賞猩症昭燒猖昌少尚松晶憧紹捷象承證正笑将称焼照勝招章詳消鐘証硝掌省商昇昃禝稷寔矚謖餝稙軾嗇屬穡拭属燭贖色飾囑嘱織蝕式喰蜀殖諸初埴植食職笶姉徙誣氏思染飼祗時弑滲梔摯肢詩咨祉泗輜厶屍強貲若至師舐咫只紙施誌呰示締厮啻次賜熾趾駟漬笥贄此司如沚尸髭肆閉祀鷙諡枝篩豕滓巵始妛及弛絲浸閇斯翅緊帋揣伺為糸駛痣矢死敷恃茨旨沁嘴蚩試釶俟瓷觜廝緇祠梓址詞之使獅志歯紫雌姿柿諮占絞視嗣識子四恣阯侈幟卮凍史領竢市巳祇齒資謚耆覗脂芝痴粢孜錙耜齎自屎茲岐嗤砥仔しサ杓寤雨鮫清鞘莢騷觸触鰆椹爽騒澤沢濬掠新攫杷渫浚更士桾申白素讚戔蒜驂芟鑚爨汕潸斬餐嶄纉攅慘粲蠶跚衫彡杉秋桑…≡簒纂鯢燦珊繖棧刪卅參鑽蚕算傘3贊▼▽3参賛O散惨産酸嘸摩遉樣彷碍妨様山漣蔑貶垂鮭叫仙寞鏥寥皺淋鯆生虱鯖捌偖扨偵宿禎貞定哘誘蝎蠍授皿祥桟匙簓障囁私篠支捧笹逧迫讃鐸蛹宛真尖碕嵜前崎魁峺遮哢囀候侍核実俚説了暁達逹哲諭慧敏叡聰訓知郷恵智聡悟理杆里小棹竿紮刹箚扎皐撮搜寒捜相主盛觚柧盞盃杯榮栄倒肴魚阪界堺境酒泝逆賢坂榊猿麾挟鷺拶撒擦颯先数察薩刷札晒霽濟纔釵綵切崔砦顋樶凄靫洒衰寨悽犲碎腮哉摧灑責偲殺縡淬倖豺呵苛幸猜塞蔡栽儕采齊財臍截載孥宰済齋犀際災柴賽菜採砕妻債斎斉祭催才細鰓裁歳最埼捉縒筴簀柞辟窄咋册齪筰槊酢嘖朔柵遡溯鑿索搾昨炸冊策錯櫻桜注曝瑳冴磋搓槎刺覺莎作挿嗟紗嵯覚做削冱寂叉荒茶渣左再早避咲査嵳褪挫佐然唆蹉鎖裂醒瑣嗄螫娑砂割蓑狭狹扠些差梭射銹沙下冷捺簑插点止提柤錆乍去裟詐さ√錫す/仕指製西 ┓┐〆□■Шш上#♯щЩ添∪日s⊂⊆⊃⊇文静★*☆標嗜青三聖土彩▲△悉署〜∽’‘┏┌集\探§″性セサシソスΣсСσ秒s]\|ッ\_s*[ソセスシサ]\|ッ\_s*[ソセスシサ]\|っ\_s*[そせすしさ]\|遽\_s*走\|蕎\_s*麦\|内\_s*障\|彼\_s*杵\|諷\_s*歌\|幾\_s*許\|錚\_s*[錚々]\|十\_s*\%(路\|露\_s*盤\)\|冬\_s*青\|微\_s*風\|虚\_s*言\|宙\_s*組\|夫\_s*[夫々]\|返\_s*田\|傴\_s*僂\|U\_s*m\_s*b\_s*e\_s*l\_s*l\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\|台\_s*詞\|c\_s*e\_s*n\_s*t\_s*i\|妹\_s*尾\|嘲\_s*笑\|海\_s*象\|蒸\_s*[籠篭]\|魑\_s*魅\|凡\_s*て\|典\_s*侍\|季\_s*雄\|天\_s*[皇蛾]\|蘿\_s*蔔\|V\_s*i\_s*o\_s*l\_s*a\_s*l\_s*e\_s*s\|N\_s*y\_s*m\_s*p\_s*h\_s*a\_s*e\_s*\%(a\_s*c\_s*e\_s*a\_s*e\|o\_s*i\_s*d\_s*e\_s*a\_s*e\)\|夊\_s*繞\|隧\_s*道\|C\_s*\%(型\|言\_s*語\)\|老\_s*舗\|望\_s*潮\|飛\_s*沫\|L\_s*a\_s*\%(m\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\|b\_s*i\_s*a\_s*t\_s*a\_s*e\)\|埋\_s*葬\_s*虫\|幣\_s*原\|桎\_s*梏\|柳\_s*葉\_s*魚\|衣\_s*魚\|蠹\_s*魚\|汚\_s*点\|惠\_s*雄\|舗\_s*石\|磯\_s*城\|W\_s*i\_s*n\_s*t\_s*e\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|倭\_s*文\|閑\_s*[谷か]\|云\_s*[々云]\|明\_s*\%(々\_s*後\_s*日\|明\_s*後\_s*日\)\|7\_s*月\|7\_s*月\|4\_s*月\|4\_s*[分月]\|羊\_s*[齒歯]\|I\_s*\%(l\_s*l\_s*i\_s*c\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\|s\_s*o\_s*p\_s*y\_s*r\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\)\|不\_s*[忍知]\|後\_s*\%([輪口志目]\|込\_s*み\)\|軍\_s*鶏\|香\_s*菜\|吃\_s*逆\|蝦\_s*蛄\|輸\_s*[出贏]\|隼\_s*[朗郎]\|笋\_s*[干羹]\|縦\_s*容\|睫\_s*毛\|翡\_s*翠\|東\_s*\%(雲\|海\_s*林\)\|Z\_s*i\_s*n\_s*g\_s*i\_s*b\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|続\_s*\%(日\_s*本\_s*\%(紀\|後\_s*紀\)\|後\_s*撰\_s*和\_s*歌\_s*集\)\|髑\_s*髏\|匣\_s*鉢\|復\_s*習\|百\_s*日\_s*紅\|胡\_s*孫\_s*眼\|←\_s*→\|霰\_s*弾\|弥\_s*生\|懺\_s*\%(法\|悔\_s*懺\_s*悔\)\|流\_s*[離石]\|蠑\_s*螺\|覇\_s*王\_s*樹\|C\_s*\%([se]\|y\_s*c\_s*a\_s*d\_s*\%(i\_s*d\_s*a\_s*e\|o\_s*\%(p\_s*s\_s*i\_s*d\_s*a\|f\_s*i\_s*l\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\)\)\|h\_s*l\_s*o\_s*r\_s*a\_s*n\_s*t\_s*h\_s*a\_s*c\_s*e\_s*a\_s*e\|言\_s*語\|D\_s*店\|型\_s*肝\_s*炎\|a\_s*\%(s\_s*s\_s*y\_s*t\_s*h\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|c\_s*t\_s*a\_s*l\_s*e\_s*s\)\)\|竹\_s*[篦刀筒]\|大\_s*角\_s*豆\|防\_s*人\|曩\_s*に\|向\_s*坂\|一\_s*昨\_s*\%(々\_s*[年日]\|昨\_s*[年日]\)\|實\_s*藤\|甘\_s*藷\|五\_s*月\|月\_s*代\|匂\_s*坂\|税\_s*所\|雑\_s*賀\|骰\_s*子\|P\_s*\%(a\_s*r\_s*i\_s*e\_s*t\_s*a\_s*l\_s*e\_s*s\|t\_s*e\_s*r\_s*i\_s*d\_s*o\_s*s\_s*p\_s*e\_s*r\_s*m\_s*\%(a\_s*l\_s*e\_s*s\|i\_s*d\_s*a\_s*e\)\|r\_s*i\_s*m\_s*u\_s*l\_s*a\_s*l\_s*e\_s*s\)\|A\_s*\%(p\_s*i\_s*a\_s*l\_s*e\_s*s\|r\_s*a\_s*l\_s*e\_s*s\|n\_s*t\_s*i\_s*m\_s*o\_s*n\_s*y\)\|瑞\_s*[典西]\|B\_s*\%(r\|シ\_s*ェ\_s*ル\)\|拡\_s*張\_s*子\|部\_s*分\|置\_s*換\|ア\_s*ン\_s*チ\_s*モ\_s*ン\|構\_s*造\_s*体\|M\_s*\%(e\_s*r\_s*c\_s*u\_s*r\_s*y\|u\_s*s\_s*a\_s*l\_s*e\_s*s\|a\_s*r\_s*q\_s*u\_s*i\_s*s\_s* \_s*d\_s*e\_s* \_s*S\_s*a\_s*d\_s*e\)\|D\_s*o\_s*n\_s*a\_s*t\_s*i\_s*o\_s*n\_s* \_s*A\_s*l\_s*p\_s*h\_s*o\_s*n\_s*s\_s*e\_s* \_s*F\_s*r\_s*a\_s*n\_s*c\_s*o\_s*i\_s*s\_s* \_s*d\_s*e\_s* \_s*S\_s*a\_s*d\_s*e\|加\_s*\%(之\|虐\_s*\%(趣\_s*味\|淫\_s*乱\_s*症\)\)\|T\_s*\%(e\_s*t\_s*r\_s*a\_s*c\_s*e\_s*n\_s*t\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|i\_s*n\|h\_s*e\_s* \_s*S\_s*i\_s*m\_s*p\_s*l\_s*e\_s* \_s*A\_s*P\_s*I\_s* \_s*f\_s*o\_s*r\_s* \_s*e\_s*v\_s*e\_s*n\_s*t\_s*-\_s*b\_s*a\_s*s\_s*e\_s*d\_s* \_s*X\_s*M\_s*L\_s* \_s*p\_s*a\_s*r\_s*s\_s*i\_s*n\_s*g\)\|珪\_s*素\|ケ\_s*イ\_s*素\|計\_s*測\_s*自\_s*動\_s*制\_s*御\_s*学\_s*会\|ネ\_s*ッ\_s*ト\_s*サ\_s*ー\_s*ビ\_s*ス\|ザ\_s*\%(ッ\_s*ク\|ク\_s*セ\_s*ン\|ビ\_s*ー\_s*ネ\|ウ\_s*バ\_s*ー\|ワ\_s*ー\_s*ク\_s*ラ\_s*ウ\_s*ト\|ム\_s*ザ\|ル\_s*ツ\|イ\_s*\%([ルン]\|ラ\_s*ー\|デ\_s*ル\)\|ー\_s*\%([ルラ]\|メ\_s*ン\)\)\|意\_s*味\|ゼ\_s*ミ\|ナ\_s*ト\_s*リ\_s*ウ\_s*ム\|ゾ\_s*\%(ル\|ン\_s*デ\|ー\_s*\%(ム\|リ\_s*ン\_s*ゲ\_s*ン\)\|フ\_s*ィ\_s*ー\)\|ジ\_s*\%(ム\|ー\_s*\%([グク]\|メ\_s*ン\_s*[スズ]\)\|グ\_s*ム\_s*ン\_s*ト\|ン\_s*\%(メ\_s*ル\|グ\_s*シ\_s*ュ\_s*ピ\_s*ー\_s*ル\|テ\_s*ー\_s*ゼ\)\)\|S\_s*\%([席式]\|サ\_s*イ\_s*ズ\|S\_s*サ\_s*イ\_s*ズ\|m\_s*a\_s*l\_s*l\_s*t\_s*a\_s*l\_s*k\|p\_s*a\_s*i\_s*n\|c\_s*o\_s*t\_s*c\_s*h\|U\_s*N\|u\_s*\%(n\|p\_s*e\_s*r\_s*A\_s*s\_s*c\_s*i\_s*i\)\|I\_s*C\_s*P\_s*(\_s*S\_s*t\_s*r\_s*u\_s*c\_s*t\_s*u\_s*r\_s*e\_s* \_s*a\_s*n\_s*d\_s* \_s*I\_s*n\_s*t\_s*e\_s*r\_s*p\_s*r\_s*e\_s*t\_s*a\_s*t\_s*i\_s*o\_s*n\_s* \_s*o\_s*f\_s* \_s*C\_s*o\_s*m\_s*p\_s*u\_s*t\_s*e\_s*r\_s* \_s*P\_s*r\_s*o\_s*g\_s*r\_s*a\_s*m\_s*s\_s*)\|−\_s*e\_s*x\_s*p\_s*r\_s*e\_s*s\_s*s\_s*i\_s*o\_s*n\|O\_s*N\_s*Y\_s* \_s*N\_s*E\_s*W\_s*S\|o\_s*l\_s*a\_s*r\_s*i\_s*s\|y\_s*s\_s*V\)\|エ\_s*ス\|S\_s*\%([nrgmce式]\|G\_s*M\_s*L\|サ\_s*イ\_s*ズ\|S\_s*サ\_s*イ\_s*ズ\|F\_s*マ\_s*ガ\_s*ジ\_s*ン\|Q\_s*U\_s*A\_s*R\_s*E\_s* \_s*E\_s*N\_s*I\_s*X\|K\_s*\%(K\|Y\_s* \_s*P\_s*e\_s*r\_s*f\_s*e\_s*c\_s*T\_s*V\_s*!\)\|a\_s*\%(r\_s*\%(r\_s*a\_s*c\_s*e\_s*n\_s*i\_s*a\_s*l\_s*e\_s*s\|g\_s*e\_s*n\_s*t\_s*o\_s*d\_s*o\_s*x\_s*a\_s*c\_s*e\_s*a\_s*e\)\|m\_s*a\_s*r\_s*i\_s*u\_s*m\)\|M\_s*\%(プ\_s*レ\_s*イ\|ク\_s*ラ\_s*ブ\)\|P\_s*\%(レ\_s*コ\_s*ー\_s*ド\|A\_s*C\_s*E\_s*キ\_s*ー\)\|p\_s*\%(l\_s*u\_s*s\|e\_s*\%(r\_s*m\_s*a\_s*t\_s*o\_s*p\_s*h\_s*y\_s*t\_s*a\|c\_s*a\_s*l\_s*i\_s*t\_s*y\_s* \_s*S\_s*t\_s*o\_s*r\_s*e\_s* \_s*R\_s*e\_s*t\_s*a\_s*i\_s*l\_s*e\_s*r\_s* \_s*o\_s*f\_s* \_s*P\_s*r\_s*i\_s*v\_s*a\_s*t\_s*e\_s* \_s*L\_s*a\_s*b\_s*e\_s*l\_s* \_s*A\_s*p\_s*p\_s*a\_s*r\_s*e\_s*l\)\|a\_s*\%(t\_s*h\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\|r\_s*c\)\)\|H\_s*I\_s*F\_s*T\_s*キ\_s*ー\|C\_s*S\_s*I\|T\_s*\%(k\|A\_s*R\)\|h\_s*u\_s*g\_s*a\_s*r\_s*t\_s* \_s*A\_s*s\_s*s\_s*o\_s*c\_s*i\_s*a\_s*t\_s*e\_s*s\_s* \_s*S\_s*y\_s*s\_s*t\_s*e\_s*m\_s* \_s*I\_s*n\_s*t\_s*e\_s*r\_s*f\_s*a\_s*c\_s*e\|A\_s*\%(P\|S\_s*I\)\|i\_s*\%(m\_s*p\_s*l\_s*e\_s* \_s*K\_s*a\_s*n\_s*a\_s* \_s*t\_s*o\_s* \_s*K\_s*a\_s*n\_s*j\_s*i\_s* \_s*c\_s*o\_s*n\_s*v\_s*e\_s*r\_s*s\_s*i\_s*o\_s*n\_s* \_s*p\_s*r\_s*o\_s*g\_s*r\_s*a\_s*m\|l\_s*i\_s*c\_s*o\_s*n\)\|t\_s*r\_s*o\_s*n\_s*t\_s*i\_s*u\_s*m\|o\_s*\%(u\_s*t\_s*h\_s* \_s*\%(D\_s*a\_s*k\_s*o\_s*t\_s*a\|C\_s*a\_s*r\_s*o\_s*l\_s*i\_s*n\_s*a\)\|l\_s*a\_s*r\_s*i\_s*s\|f\_s*t\_s*w\_s*a\_s*r\_s*e\_s* \_s*R\_s*e\_s*s\_s*e\_s*a\_s*r\_s*c\_s*h\_s* \_s*A\_s*s\_s*s\_s*o\_s*c\_s*i\_s*a\_s*t\_s*e\_s*,\_s*I\_s*n\_s*c\_s*\.\)\|u\_s*\%(n\|l\_s*f\_s*u\_s*r\)\)\|硫\_s*黄\)', - \ 't' : '\%([ト乕囚寅虎瀞侶靹舮供纜燭艫朋倶鞆讐讎輩伴共友巴惇沌團団暾丼飩遯燉遁豚禽鷄酉砦塞擒俘虜豐恍惚枢乏塒迚科咎篷笘攴苫鶏伽唱稱鄰隣朿棘刺整鎖處処所床享鴟鵄扉鳶嫁訥刻秋穐晨鴇鬨斎頓幄幃帷柮杤栃閼軣轟屆届咄吶凸駿祀世暁壽繁稔寿豊歳俊利敏年牘悳犢黷慝匿督徳涜∃得特儻釖盜沓納道宕嶝涛萄嶋鬧縢帑塘搨棠樋籘閙梼罩叨夲盪酘兜溏朸稻鞜荅鞳桶黨綯迯鬥擣礑櫂剳淌纛諮棹陦檮磴蘯橦抖榻嶌竇档潼吋鐙亠篤滕讀逗螳蟷稲■鼕幢滔掏當峠読饕疼淘濤籐董悼棟搭痘套=豆燈桃韜統遠騰橈冬討祷骰藤灯島橙凍刀陶糖謄唐投答等桐鍍研鎔外採盗杜荼覩人摂脱屠賭蠧圖秉觧堵兔礪疾執蚪閇熔登畄砺解睹十菟砿溶獲渡留融泊蠹穫飛磨梳妬説録冨取問途莵汢戸図止翔兎跿富塗砥肚とテ瑛晃輝衒寺忝壥靦巓霑殄、鷏躔諂廛碾沾,鷆腆囀槙轉‥:.輾填甜奠顛纒癲恬殿纏展覘篆添梃輦咥垤餮屮銕鐡耋姪跌輟迭逖荻俶廸狄鏑糴笛覿擲迪滴轍的哲敵撤剔徹鐵鉄楴嚏幀鵜羝睇汀棣騁酲柢叮嚔酊掟遉觝釘詆渟眤碵弟碇剃蹄邸締梯悌訂程底偵遞廷逓牴抵呈艇鄭涕啼庭定低照弖てツ模幹劈聾辛列貫面汁液露冷錘舶紡系艷艶寉鉉絃橡劒釼剱劔劍剣弦蔓敦鶴幣兵鉗噤鶫償桓恆典恒常夙勉務努勤拙拐抓倹嬬撮詳審爪褄妻募角晦瞑螺円呟礫具粒辻辟罪捉把閊捕寮曹首阜丘元司官柄仕掴遣攫搏疲使窄莟蕾局壷壺坪綱繋壌蝪培霾戊己伝傳鐔翼翅鍔燕唾續約皷鼓続葛綴番栂槌縋弊費序潰終墜遂鎚椎追做殲捏殱繕傍旁創造作熟机佃蹲拒欟坏鴾槻月障砲裹躑榴謹慎愼恙筒包堤痛衝尾突尽支攣就次付椄漬點津附浸繼撞憑盡継嗣搗詰積接通告連つチ吃釁巷岐衢粽粡因杠契鵆児交腟帙膣些蟄N窒斉秩父捷矗筑築逐盟税力親邇誓迩近苣尖縮鏤塵趁碪珎鎭亭抻朕狆跛闖鴆砧椿枕鎮陳珍沈賃杖找摘茶嫡着豬儲杼潴紵竚瀦躇箸墸苧緒樗楮⊥躅陟猪捗稙飭敕勅著佻髫鼎迢膓萇脹樢吊漲趙鵈輙雕鬯聽廰窕楪挺輒齠悵塚疔糶澂廳蔦晁昶甼誂微凋帖掉停諜跳眺貼鐇澄提喋頭銚ー蝶暢帳丁牒重逃鳥張弔懲肇徴嘲兆釣聴彫潮町頂調貂庁腸超挑朝丶黜綢儔廚丑※惆肘籌寵鍮冢晝蟲胄冑紬稠酎紐鑄冲沖偸宙虫]}{[厨誅鋳紂仲註駐柱注衷籀昼抽中治池岻恥散躓置耻血値夊輊遲笞千稚黹馳家蜘禿穉地魑黐乳智癡致薙褫茅踟緻痴夂知遅ちタ便党屯架椽榱樽弛蕩膤鰔鱈盥戯俵袂保躊為樣様爲袒慱彖壇覃膽疸亶靼憺餤緞憚擔褝啗檀綻攤槫站酖殫毯猯潭鄲襌賺椴摶湍湯澹†‡蛋耽W旦痰啖坦眈反C歎嘆誕胆箪譚担淡鍛短單貪探単覊栲妙戲訊攜携尋訪比畴疇類民髱樂娯恃頼愉楽喩例譬滾激斃仆垰嵶殕倒嫋旅貍狸賛敲称讃蹈踏祟湛鬪斗戰闘戦彳佇叩疂疉疊畳箍鏨違互耕畊畉掌店棚到炭辿撻闥斬燵韃巽辰+援佐扶相輔佑弼助襷髻椨誑胤種塔龍竜糺糜爛漂維伊是理禎直貞惟忠匡徒唯只窘嗜慥確胝鱆鮹凧蛸誥嶽哮茸英豪威毅猛笋筍酣雄健丈斌武靈彈珪承賚珠霊魂卵偶適環弾球玉丹謀莨束縱|盾鬣奉楯蓼縦竪城質達館忽橘舘瀑薪滝瀧峪溪渓谿谷任尭宇亨臣集昂楼小剛恭岳洪喬嵩尚孚崇尊敬孝隆貴鷹竹篁簟寶財高寳宝但柝拆倬鈬濯魄擢擇柘戳啅鐸澤綰畜企啄磔匠巧択沢逞琢蓄度宅託卓謫托拓紿軆隶殆黛帶替靆抬體躰滯碓平駘擡逮腿当怠玳諦岱鯛對颱袋戴堆態頽苔滞待代帝貸隊褪胎帯体泰退大対矯食埀断炊闌佗長強焚岔給蛇夛足賜揉閉立發躱詫太経貯起薫耐溜絶発手它朶多他勃詑垂誰撓斷裁咤点汰建堪澑田截逹侘經たtЦц〜天時×型火土→都吐東上噸瓲│┃台表第木スジ∴Θθザ正ツ¨転透▲△▼▽トチ・…試端タТ├┸┳┨┫┝┬〒┷τ┯┤┣┻Τテ┥┰т┠┴t]\|ッ\_s*[トテツチタ]\|ッ\_s*[トテツチタ]\|っ\_s*[とてつちた]\|門\_s*渡\_s*り\|薯\_s*蕷\|船\_s*尾\_s*座\|公\_s*[暁明]\|倫\_s*[子明]\|邑\_s*中\|蜻\_s*蛉\|A\_s*c\_s*o\_s*n\_s*i\_s*t\_s*u\_s*m\|蜷\_s*局\|跡\_s*[絶切]\|蜥\_s*蜴\|舎\_s*人\|馴\_s*鹿\|野\_s*老\|瓊\_s*脂\|永\_s*[遠久]\|宿\_s*直\|朱\_s*鷺\|左\_s*見\_s*右\_s*見\|朽\_s*木\|H\_s*y\_s*d\_s*r\_s*o\_s*c\_s*h\_s*a\_s*r\_s*i\_s*t\_s*a\_s*l\_s*e\_s*s\|独\_s*鈷\|季\_s*[衣道栄]\|聡\_s*[明徳]\|祈\_s*年\_s*祭\|淑\_s*[夫子]\|洞\_s*爺\|光\_s*男\|晧\_s*史\|紅\_s*娘\|瓢\_s*虫\|F\_s*e\|I\_s*r\_s*o\_s*n\|劇\_s*村\|滌\_s*除\|2\_s*×\_s*4\|石\_s*\%(蕗\|竜\_s*子\)\|心\_s*[太算]\|自\_s*\%(摸\|模\_s*和\)\|氷\_s*柱\|倩\_s*々\|黴\_s*雨\|入\_s*梅\|梅\_s*雨\|再\_s*見\|備\_s*に\|悉\_s*に\|旋\_s*[風毛]\|B\_s*a\_s*l\_s*a\_s*n\_s*o\_s*p\_s*h\_s*o\_s*r\_s*a\_s*l\_s*e\_s*s\|1\_s*\%(日\|0\_s*日\)\|1\_s*\%(日\|0\_s*日\)\|朔\_s*日\|美\_s*人\_s*局\|E\_s*\%(u\_s*p\_s*h\_s*o\_s*r\_s*b\_s*i\_s*a\_s*l\_s*e\_s*s\|r\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\)\|字\_s*\%(牌\|一\_s*色\)\|少\_s*と\|義\_s*父\|主\_s*[殿税]\|周\_s*夫\|睦\_s*子\|渠\_s*睦\_s*子\|萵\_s*苣\|身\_s*柱\|似\_s*指\|清\_s*\%(老\_s*頭\|一\_s*色\)\|青\_s*\%([幇島]\|梗\_s*菜\|椒\_s*肉\_s*絲\)\|全\_s*帯\|昌\_s*洙\|江\_s*蘇\|J\_s*i\_s*a\_s*n\_s*g\_s*s\_s*u\|焼\_s*豚\|叉\_s*焼\|察\_s*哈\_s*爾\|餃\_s*子\|雑\_s*砕\|炒\_s*[麺飯]\|北\_s*谷\|甘\_s*露\_s*子\|錯\_s*和\|総\_s*角\|一\_s*[日寸]\|植\_s*字\|金\_s*魚\_s*蝨\|魚\_s*[屋蝨]\|草\_s*石\_s*蚕\|春\_s*\%(麗\|宮\_s*坊\)\|九\_s*\%(十\_s*九\|連\_s*宝\_s*[燈灯]\)\|揺\_s*蕩\|容\_s*易\|白\_s*痴\|猶\_s*豫\|蜑\_s*民\|段\_s*銭\|蒲\_s*公\_s*英\|騨\_s*州\|M\_s*\%(e\_s*n\_s*i\_s*s\_s*p\_s*e\_s*r\_s*m\_s*a\_s*c\_s*e\_s*a\_s*e\|o\_s*n\_s*o\_s*\%(p\_s*e\_s*t\_s*a\_s*l\_s*a\_s*e\|c\_s*\%(h\_s*l\_s*a\_s*m\_s*y\_s*d\_s*e\_s*a\_s*e\|o\_s*t\_s*y\_s*l\_s*e\_s*d\_s*o\_s*n\_s*e\_s*a\_s*e\)\)\)\|仮\_s*令\|打\_s*[擲坐]\|七\_s*\%(夕\|対\_s*子\)\|活\_s*計\|方\_s*便\|無\_s*料\|黄\_s*\%(昏\|蜀\_s*葵\)\|胼\_s*胝\|章\_s*魚\|P\_s*\%(\.\_s*S\_s*\.\|o\_s*l\_s*y\_s*\%(g\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\|c\_s*a\_s*r\_s*p\_s*i\_s*c\_s*a\_s*e\)\|a\_s*n\_s*d\_s*a\_s*n\_s*a\_s*l\_s*e\_s*s\)\|壮\_s*聡\|煙\_s*草\|殺\_s*陣\|賢\_s*明\|性\_s*質\|怱\_s*ち\|亢\_s*ぶ\|堂\_s*子\|学\_s*聡\|能\_s*[文之]\|内\_s*匠\|松\_s*明\|奈\_s*子\|幇\_s*間\|切\_s*符\|デ\_s*ィ\_s*ス\|3\_s*r\_s*d\|閾\_s*値\|ソ\_s*\%(ー\_s*[トンプ]\|ロ\_s*ー\)\|ヘ\_s*ー\_s*グ\|ゼ\_s*[インムア]\|セ\_s*\%(オ\|ル\_s*マ\|ロ\_s*\%(ン\|ニ\_s*ア\_s*ス\)\|ラ\_s*ピ\_s*\%(ー\|ス\_s*ト\)\)\|シ\_s*\%(ン\|ッ\_s*ク\|ス\_s*ル\|ア\_s*タ\_s*ー\|ソ\_s*ー\_s*ラ\_s*ス\|オ\_s*ド\_s*ア\|ー\_s*[フタ]\)\|サ\_s*\%([イム]\|ミ\_s*ン\_s*グ\|ウ\_s*ザ\_s*ン\_s*ド\|ラ\_s*ブ\_s*レ\_s*ッ\_s*ド\|ー\_s*\%([ドモ]\|テ\_s*ィ\|ス\_s*ト\_s*ン\|ズ\_s*デ\_s*[イーィ]\|マ\_s*ル\)\|ッ\_s*チ\_s*ャ\_s*ー\|ン\_s*\%(ク\|ダ\_s*ー\|キ\_s*ュ\_s*ー\)\|リ\_s*ド\_s*マ\_s*イ\_s*ド\)\|ポ\_s*リ\_s*ペ\_s*プ\_s*チ\_s*ド\|三\_s*\%(和\_s*土\|連\_s*文\_s*字\)\|\\\_s*T\_s*e\_s*X\|教\_s*科\_s*書\|文\_s*字\_s*列\|用\_s*語\|T\_s*\%([字i]\|細\_s*胞\|K\_s*8\_s*0\|ゾ\_s*ー\_s*ン\|バ\_s*ッ\_s*ク\|シ\_s*ャ\_s*ツ\|V\_s*\%(ニ\_s*ュ\_s*ー\_s*ス\|ゲ\_s*ー\_s*ム\|ド\_s*ラ\_s*マ\|ア\_s*ニ\_s*メ\)\|C\_s*P\_s*/\_s*I\_s*P\|a\_s*g\|r\_s*u\_s*e\_s*T\_s*y\_s*p\_s*e\|E\_s*X\|e\_s*[Xl]\)\|T\_s*\%([bc字mliahe]\|r\_s*i\_s*m\_s*e\_s*n\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\|u\_s*n\_s*g\_s*s\_s*t\_s*e\_s*n\|ゾ\_s*ー\_s*ン\|X\_s*T\_s*フ\_s*ァ\_s*イ\_s*ル\|シ\_s*ャ\_s*ツ\|バ\_s*ッ\_s*ク\|V\_s*\%(ニ\_s*ュ\_s*ー\_s*ス\|ゲ\_s*ー\_s*ム\|ド\_s*ラ\_s*マ\|モ\_s*ニ\_s*タ\|ア\_s*ニ\_s*メ\|シ\_s*ョ\_s*ッ\_s*ピ\_s*ン\_s*グ\)\|C\_s*P\|コ\_s*ー\_s*ド\|-\_s*C\_s*o\_s*d\_s*e\|O\_s*E\_s*I\_s*C\|A\_s*\%(C\|I\_s*N\_s*S\|B\_s*キ\_s*ー\)\|E\_s*L\)\|電\_s*\%([視話]\|気\_s*通\_s*信\_s*研\_s*究\_s*所\)\)', - \ 'u' : '\%([ウ孳蛤礼敬恭洞鱗愛潤騒煩粳漆閏患慯悄騷恙愁呻楳梅嫐釉噂耘吽褞曇黄紜云繧慍薀蘊暈運錙怏麗羨卦憾怨恨占卜末嬉心裏浦糶瓜汝己畴畆畦疇畝踈疎宜諾奪姥腕莵兔驢鑿穿嗽魘唸促令項頷訴獺鷽嘯嘘蠕蠢動覘窺伺海台萼唱詠謌唄宴讌転詩謠謡謳疑歌葎鯏鴬鶯ヱゑゐヰ鶉疼堆踞蹲渦舂臼碓羅薄食筌槽朮肯凵魚巧茨廐廏厩鰻午甘秣孫餞馬旨冩遷寫蔚暎噐器移慈俯映写現虚美笂靭靱靫空鰾萍初蛆雲氏上後喪艮丑潮牛裡鬱中欝袿梁家内禹憂埋挧撃雨打宇得植請鵜熟績嫗攴有夘受茹泛生討羽胡右紆傴盂饂承菟飢烏攵于射倦芋賣卯享搏失齲撲兎売産膿迂浮うu¨↑∪υウUуУΥu]\|武\_s*漢\|狼\_s*狽\|夏\_s*枯\_s*草\|蠎\_s*蛇\|蟒\_s*蛇\|譫\_s*言\|琅\_s*珠\|温\_s*[麺気州]\|C\_s*u\_s*c\_s*u\_s*r\_s*b\_s*i\_s*t\_s*a\_s*l\_s*e\_s*s\|自\_s*惚\|采\_s*女\|乳\_s*母\|姨\_s*捨\_s*山\|独\_s*活\|優\_s*\%(婆\_s*[塞夷]\|曇\_s*華\)\|合\_s*格\|親\_s*族\|斥\_s*候\|泡\_s*沫\|楽\_s*官\|雅\_s*楽\_s*[頭寮]\|干\_s*莉\|維\_s*納\|太\_s*秦\|護\_s*田\_s*鳥\_s*尾\|淡\_s*\%(青\|口\_s*醤\_s*油\)\|五\_s*\%(加\|月\_s*蝿\)\|稲\_s*魂\|誓\_s*約\|石\_s*\%(女\|斑\_s*魚\)\|不\_s*生\_s*女\|味\_s*酒\|苜\_s*蓿\|A\_s*r\_s*i\_s*s\_s*t\_s*o\_s*l\_s*o\_s*c\_s*h\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|伝\_s*染\|呆\_s*気\_s*者\|茴\_s*香\|外\_s*郎\|餓\_s*\%(死\|え\_s*死\_s*に\)\|裲\_s*襠\|団\_s*扇\|イ\_s*ギ\_s*リ\_s*ス\|オ\_s*マ\_s*ル\|識\_s*別\_s*不\_s*能\|共\_s*\%(用\_s*体\|有\_s*体\)\|ア\_s*\%([スン]\|グ\_s*リ\_s*ー\|ー\_s*\%(シ\_s*ュ\_s*ラ\|ジ\_s*ェ\_s*ン\_s*ト\|バ\_s*ン\)\|ル\_s*テ\_s*ィ\_s*メ\_s*ッ\_s*ト\|ポ\_s*ン\|ッ\_s*\%(プ\|パ\_s*ー\|シ\_s*ャ\_s*ー\)\)\|単\_s*\%(位\|一\_s*化\)\|U\_s*\%(ボ\_s*ー\_s*ト\|タ\_s*ー\_s*ン\|ネ\_s*ッ\_s*ク\|N\_s*I\_s*X\_s*\%(フ\_s*ェ\_s*ア\_s*ー\|マ\_s*ガ\_s*ジ\_s*ン\)\)\|ユ\_s*\%([タニー]\|ト\_s*\%(リ\_s*ロ\|レ\_s*ヒ\_s*ト\)\|リ\_s*\%(ア\|シ\_s*ー\_s*ズ\)\|プ\_s*シ\_s*ロ\_s*ン\|ネ\_s*ス\_s*コ\|ナ\_s*\%(カ\_s*イ\_s*ト\|イ\_s*テ\_s*ッ\_s*ド\)\|ビ\_s*キ\_s*\%(タ\_s*ス\|ノ\_s*ン\)\)\)', - \ 'v' : '\%([v:├値⊥版Вв↓∨ヴv]\|ッ\_s*ウ\_s*゙\|ッ\_s*ヴ\|っ\_s*ヴ\|ウ\_s*゙\|チ\_s*ェ\_s*ロ\|ヰ\_s*タ\| \_s*ビ\_s*ク\_s*ト\_s*ー\_s*ル\|視\_s*覚\|仮\_s*想\|ニ\_s*ス\|変\_s*数\|恒\_s*真\|ワ\_s*\%(デ\_s*ィ\_s*ム\|ギ\_s*ナ\|ニ\_s*ス\|セ\_s*リ\_s*ン\|ク\_s*チ\_s*ン\|ル\_s*キ\_s*ュ\_s*ー\_s*レ\|レ\_s*リ\_s*ー\|ー\_s*ニ\_s*ャ\)\|V\_s*\%(c\|ゾ\_s*ー\_s*ン\|サ\_s*イ\_s*ン\|ネ\_s*ッ\_s*ク\|ゴ\_s*ー\_s*ル\|シ\_s*ネ\|リ\_s*ー\_s*グ\|i\_s*e\_s*w\|a\_s*l\_s*u\_s*e\|o\_s*l\_s*k\_s*l\)\|語\_s*彙\|ボ\_s*\%(ス\_s*ト\_s*ー\_s*ク\|ン\_s*ゴ\_s*レ\|ル\_s*\%([ガボトタ]\|テ\_s*\%(ッ\_s*ク\_s*ス\|ー\_s*[ジル]\)\)\|リ\_s*ュ\_s*ー\_s*ム\|ラ\_s*ン\_s*\%(チ\|テ\_s*ィ\_s*ア\|タ\_s*リ\_s*ー\)\|レ\_s*ー\|コ\_s*ー\_s*ダ\|ー\_s*\%([ントグ]\|ル\_s*ト\|ド\_s*ビ\_s*\%(ル\|リ\_s*ア\_s*ン\)\|パ\_s*ル\|ダ\_s*フ\_s*ォ\_s*ン\|カ\_s*\%(ル\|リ\_s*ス\_s*ト\)\)\|キ\_s*ャ\_s*ブ\_s*ラ\_s*リ\|イ\_s*\%([ドス]\|ジ\_s*ャ\_s*ー\|シ\_s*ン\_s*グ\)\)\|ヘ\_s*ッ\_s*ト\|冗\_s*長\_s*な\|垂\_s*直\|フ\_s*\%(ァ\_s*\%(ン\|ド\_s*ー\_s*ツ\)\|ォ\_s*\%(ン\|ル\_s*\%(ク\|カ\_s*ー\)\)\|ェ\_s*ル\_s*メ\_s*ー\_s*ル\)\|ウ\_s*\%(ラ\_s*\%(デ\_s*ィ\_s*ミ\_s*ー\_s*ル\|ジ\_s*\%(ミ\_s*ー\_s*ル\|ー\_s*ミ\_s*ル\|オ\_s*ス\_s*ト\_s*\%(ク\|ッ\_s*ク\)\)\)\|ィ\_s*\%(ン\_s*ナ\|ル\_s*ス\)\|ォ\_s*ッ\_s*カ\|イ\_s*\%(ル\_s*ス\|ン\_s*ナ\_s*ー\)\|ェ\_s*\%(ル\_s*ギ\_s*リ\_s*ウ\_s*ス\|ヌ\_s*ス\)\)\|ビ\_s*\%([アラブバスザ]\|ガ\_s*ー\|ハ\_s*ー\_s*ラ\|タ\_s*ミ\_s*ン\|レ\_s*\%(ッ\_s*ジ\|ロ\_s*イ\)\|ビ\_s*\%(ア\_s*ン\|ッ\_s*ド\)\|ッ\_s*\%(ク\|キ\_s*ー\)\|セ\_s*ン\_s*テ\|ク\_s*\%(タ\_s*ー\|ト\_s*\%(ル\|リ\_s*[ーア]\)\)\|シ\_s*\%(ャ\_s*ス\|ソ\_s*ワ\_s*ー\_s*ズ\)\|ン\_s*\%([チス]\|ソ\_s*ン\|テ\_s*ー\_s*ジ\|セ\_s*ン\_s*ト\)\|ネ\_s*\%(ガ\_s*ー\|グ\_s*レ\_s*ッ\_s*ト\)\|ニ\_s*\%([ール]\|リ\_s*デ\_s*ン\)\|ュ\_s*ー\|エ\_s*ン\_s*チ\_s*ャ\_s*ン\|ジ\_s*\%(ャ\|ッ\_s*ト\|タ\_s*ー\|ョ\_s*\%(ン\|ナ\_s*リ\_s*ー\)\|ュ\_s*ア\_s*\%(ル\|ラ\_s*イ\_s*\%(ズ\|ゼ\_s*ー\_s*シ\_s*ョ\_s*ン\)\)\)\|ダ\_s*ル\|デ\_s*オ\|ル\_s*\%(ゴ\|ヌ\_s*ー\_s*ブ\)\|オ\_s*ラ\|リ\_s*ジ\_s*ア\_s*ン\|ィ\_s*ー\_s*ナ\_s*ス\|ー\_s*\%(ボ\|ル\_s*ス\|ク\_s*ル\|ナ\_s*ス\)\)\|ベ\_s*\%([ガラン]\|ト\_s*ナ\_s*ム\|イ\_s*ダ\_s*ー\|ー\_s*\%(ル\|ダ\_s*ー\)\|テ\_s*ラ\_s*ン\|ッ\_s*セ\_s*ル\|ス\_s*\%([トタパ]\|ビ\_s*オ\)\|ク\_s*\%(タ\|ト\_s*ル\)\|ジ\_s*タ\_s*\%(ブ\_s*ル\|リ\_s*ア\_s*ン\)\|リ\_s*\%([ィー]\|フ\_s*ァ\_s*イ\|サ\_s*イ\_s*ン\)\|ロ\_s*\%(ナ\|シ\_s*テ\_s*ィ\|ー\_s*ナ\|ニ\_s*[カク]\)\|ル\_s*\%(デ\|ベ\_s*ッ\_s*ト\|ダ\_s*ン\|レ\_s*ー\_s*ヌ\|サ\_s*\%(ー\_s*チ\|イ\_s*ユ\)\|モ\_s*ッ\_s*ト\)\|ノ\_s*ム\|ニ\_s*[スヤア]\|ネ\_s*\%(シ\_s*ャ\_s*ン\|ツ\_s*ィ\_s*ア\|チ\_s*ア\|ズ\_s*エ\_s*ラ\)\)\|バ\_s*\%([ルン]\|イ\_s*\%([アブンオ]\|パ\_s*ー\|タ\_s*\%(ル\|リ\_s*テ\_s*ィ\)\|キ\_s*ン\_s*グ\|ザ\_s*ー\|シ\_s*ャ\)\|ッ\_s*ト\|チ\_s*カ\_s*ン\|ギ\_s*ナ\|ガ\_s*ボ\_s*ン\_s*ド\|ラ\_s*\%(ナ\_s*シ\|エ\_s*テ\_s*ィ\)\|サ\_s*ロ\|ス\_s*\%(コ\|ケ\_s*ス\)\|カ\_s*ン\_s*ス\|ケ\_s*ー\_s*シ\_s*ョ\_s*ン\|キ\_s*ュ\_s*ー\_s*ム\|ウ\_s*チ\_s*ャ\_s*ー\|リ\_s*\%(ン\|エ\_s*ー\_s*シ\_s*ョ\_s*ン\|ュ\_s*ー\|ア\_s*\%(ブ\_s*ル\|ン\_s*ト\)\|ッ\_s*ド\|デ\_s*ー\_s*シ\_s*ョ\_s*ン\)\|ヌ\_s*ア\_s*ツ\|ニ\_s*\%(ラ\|ー\_s*ユ\)\|レ\_s*\%([ラー]\|ロ\_s*ン\|リ\_s*ー\|ン\_s*\%(シ\_s*ア\|チ\_s*ノ\|タ\_s*イ\_s*ン\)\)\|ー\_s*\%([ゴグ]\|チ\_s*ャ\_s*ル\|リ\_s*ト\_s*ゥ\_s*ー\_s*ド\|バ\_s*ル\|ボ\_s*ス\|ベ\_s*ナ\|テ\_s*ィ\_s*カ\_s*ル\|サ\_s*ス\|ジ\_s*\%(ン\|ニ\_s*ア\|ョ\_s*ン\)\|ノ\_s*ン\|ニ\_s*ア\|モ\_s*ン\_s*ト\|ミ\_s*\%(リ\_s*オ\_s*ン\|キ\_s*ュ\_s*ラ\_s*イ\_s*ト\)\)\|ナ\_s*\%(キ\_s*ュ\_s*ラ\_s*ー\|ジ\_s*ウ\_s*ム\)\)\|ブ\_s*\%(イ\|ラ\_s*\%(ド\|ッ\_s*ド\)\|ー\_s*ド\_s*ゥ\_s*ー\)\|V\_s*\%(H\_s*L\_s*L\_s*(\_s*V\_s*e\_s*r\_s*y\_s* \_s*H\_s*i\_s*g\_s*h\_s* \_s*L\_s*e\_s*v\_s*e\_s*l\_s* \_s*L\_s*a\_s*n\_s*g\_s*u\_s*a\_s*g\_s*e\_s*)\|ゾ\_s*ー\_s*ン\|サ\_s*イ\_s*ン\|ネ\_s*ッ\_s*ク\|ゴ\_s*ー\_s*ル\|J\_s*E\_s*-\_s*β\|シ\_s*ネ\|リ\_s*ー\_s*グ\|I\_s*S\_s*A\_s*カ\_s*ー\_s*ド\|i\_s*r\_s*g\_s*i\_s*n\_s*i\_s*a\|A\_s*X\|e\_s*r\_s*\%(m\_s*o\_s*n\_s*t\|i\_s*S\_s*i\_s*g\_s*n\)\|a\_s*n\_s*a\_s*d\_s*i\_s*u\_s*m\)\)', - \ 'w' : '\%([ヲヲ女翁尾汚小惜男緒牡雄をウ孳蛤礼敬恭洞鱗愛潤騒粳漆閏慯悄騷恙愁呻楳梅嫐釉噂耘吽褞曇紜云繧慍薀蘊暈運錙怏麗羨U卦憾怨恨占卜末嬉心裏浦糶瓜汝己υΥ畴畆畦疇畝踈疎宜諾奪姥莵兔驢鑿穿嗽魘唸促令項頷訴獺鷽嘯嘘蠕蠢動覘窺伺台萼唱詠謌唄宴讌転詩謠謡謳疑歌葎鯏鴬鶯ヱゑ鶉疼堆踞蹲渦舂臼碓羅薄食筌槽朮肯凵魚巧茨廐廏厩鰻午甘秣孫餞馬旨冩遷寫蔚暎噐器移慈俯映写現虚美笂靭靱靫空鰾萍初蛆氏↑上後喪艮丑潮牛裡鬱中欝袿梁家内禹憂埋挧撃雨打宇得植請鵜熟績嫗攴有夘受茹泛生討胡右紆傴盂饂承菟飢烏攵于射倦芋賣卯享搏失齲撲兎売産膿迂浮うヰ居ゐワ叫喚÷惡悪原稿嗤妾蕨童藁鞋笑灣萬豌綰万弯彎椀雲腕碗湾横往黄皇羂罠纔毫微僅患煩術伎厄禍災態業技佗王鰐忘掖弁腋譯緜腸亙道渉航弥亘棉渡綿私薈隈賄淮脇矮猥歪轍海蟠儂∪觧解頒判訣別稚若或枠惑鷲和環吾杷啝湧我涌輪破分把萵詫訳羽沸倭割話侘琶わw幅水∧波ウワw]\|ッ\_s*[ヲヱウヰワ]\|ッ\_s*[ヲヱウヰワ]\|っ\_s*[をゑうゐわ]\|乎\_s*古\_s*止\_s*点\|武\_s*漢\|狼\_s*狽\|夏\_s*枯\_s*草\|蠎\_s*蛇\|蟒\_s*蛇\|譫\_s*言\|琅\_s*珠\|温\_s*[麺気州]\|C\_s*u\_s*c\_s*u\_s*r\_s*b\_s*i\_s*t\_s*a\_s*l\_s*e\_s*s\|自\_s*惚\|采\_s*女\|乳\_s*母\|姨\_s*捨\_s*山\|独\_s*活\|優\_s*\%(婆\_s*[塞夷]\|曇\_s*華\)\|合\_s*格\|親\_s*族\|斥\_s*候\|泡\_s*沫\|楽\_s*官\|雅\_s*楽\_s*[頭寮]\|干\_s*莉\|維\_s*納\|護\_s*田\_s*鳥\_s*尾\|淡\_s*\%(青\|口\_s*醤\_s*油\)\|五\_s*\%(加\|月\_s*蝿\)\|稲\_s*魂\|誓\_s*約\|石\_s*\%(女\|斑\_s*魚\)\|不\_s*生\_s*女\|味\_s*酒\|苜\_s*蓿\|A\_s*r\_s*i\_s*s\_s*t\_s*o\_s*l\_s*o\_s*c\_s*h\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|伝\_s*染\|呆\_s*気\_s*者\|茴\_s*香\|外\_s*郎\|餓\_s*\%(死\|え\_s*死\_s*に\)\|裲\_s*襠\|団\_s*扇\|草\_s*鞋\|(\_s*笑\_s*)\|(\_s*笑\_s*)\|戦\_s*慄\|俳\_s*優\|勿\_s*忘\_s*草\|早\_s*[生稲]\|山\_s*葵\|戯\_s*奴\|度\_s*会\|Y\_s*\%(軸\|シ\_s*ャ\_s*ツ\|染\_s*色\_s*体\)\|Y\_s*\%(軸\|シ\_s*ャ\_s*ツ\|染\_s*色\_s*体\)\|華\_s*盛\_s*頓\|裙\_s*蔕\_s*菜\|理\_s*[由解]\|公\_s*魚\|病\_s*葉\|大\_s*東\_s*亜\_s*戰\_s*爭\|太\_s*\%(秦\|平\_s*洋\_s*戦\_s*争\)\|歐\_s*州\_s*大\_s*戰\|第\_s*\%(二\_s*次\_s*世\_s*界\_s*大\_s*戦\|一\_s*次\_s*世\_s*界\_s*大\_s*戦\)\|ブ\_s*ル\_s*ツ\_s*ブ\_s*ル\_s*ク\|ロ\_s*ン\_s*グ\|レ\_s*\%(ン\|イ\_s*ス\|ッ\_s*カ\_s*ー\|ス\_s*\%(ラ\_s*ー\|リ\_s*ン\_s*グ\)\)\|リ\_s*\%(ー\_s*ス\|ン\_s*ク\_s*ル\|ス\_s*ト\)\|書\_s*き\_s*込\_s*み\|ラ\_s*\%(ッ\_s*\%([プパ]\|ピ\_s*ン\_s*グ\)\|イ\_s*\%([タト]\|テ\_s*ィ\_s*ン\_s*グ\)\)\|ボ\_s*ル\_s*フ\|フ\_s*\%([ムー]\|ァ\_s*イ\_s*ル\|ィ\_s*\%(ー\_s*ト\|ッ\_s*チ\)\)\|ホ\_s*\%(エ\_s*[イーア]\|ー\_s*ル\|イ\_s*\%(ー\_s*\%(ル\|ラ\_s*ー\)\|ッ\_s*\%(プ\|ス\_s*ル\|パ\_s*ー\|ト\_s*\%(ニ\_s*ー\|マ\_s*ン\)\)\)\|ワ\_s*\%(イ\|ッ\_s*[トツ]\)\)\|ベ\_s*ル\_s*ナ\_s*ー\|W\_s*\%(S\|N\_s*N\|y\_s*o\_s*m\_s*i\_s*n\_s*g\|O\_s*W\_s*O\_s*W\|I\_s*\%(D\_s*E\|N\_s*T\_s*E\_s*R\_s*P\_s*(\_s*W\_s*i\_s*d\_s*g\_s*e\_s*t\_s* \_s*I\_s*n\_s*t\_s*e\_s*r\_s*p\_s*r\_s*e\_s*t\_s*e\_s*r\_s*)\)\|i\_s*\%(s\_s*c\_s*o\_s*n\_s*s\_s*i\_s*n\|d\_s*g\_s*e\_s*t\|n\_s*d\_s*o\_s*w\_s*s\)\|h\_s*\%(y\_s* \_s*d\_s*o\_s*n\_s*e\_s* \_s*i\_s*t\_s*?\|o\_s* \_s*d\_s*o\_s*n\_s*e\_s* \_s*i\_s*t\_s*?\)\|E\_s*B\_s*\%(ブ\_s*ラ\_s*ウ\_s*ザ\|マ\_s*ガ\_s*ジ\_s*ン\)\|e\_s*\%(s\_s*t\_s* \_s*V\_s*i\_s*r\_s*g\_s*i\_s*n\_s*i\_s*a\|b\_s*\%(ペ\_s*ー\_s*ジ\|ラ\_s*ジ\_s*オ\|コ\_s*ミ\_s*ッ\_s*ク\|サ\_s*\%(イ\_s*ト\|ー\_s*\%(バ\|ビ\_s*ス\)\)\|ド\_s*ラ\_s*マ\)\)\|a\_s*s\_s*h\_s*i\_s*n\_s*g\_s*t\_s*o\_s*n\|A\_s*V\_s*フ\_s*ァ\_s*イ\_s*ル\)\|警\_s*告\|W\_s*\%(杯\|n\_s*n\|i\_s*n\_s*k\|a\_s*r\_s*e\)\|バ\_s*ル\_s*タ\_s*ー\|ヴ\_s*\%(ュ\_s*ル\_s*ツ\_s*ブ\_s*ル\_s*ク\|ォ\_s*ル\_s*フ\|ィ\_s*\%([ーム]\|ル\_s*\%(ム\|ヘ\_s*ル\_s*ム\)\)\|ェ\_s*\%(ン\_s*ダ\_s*ー\_s*ス\|ル\_s*ナ\_s*ー\|ー\_s*バ\_s*ー\|イ\_s*ユ\)\|ァ\_s*\%(イ\_s*[ンス]\|ー\_s*グ\_s*ナ\_s*ー\|ン\_s*ダ\|ル\_s*\%(タ\_s*ー\|キ\_s*ュ\_s*ー\_s*レ\)\)\)\|ダ\_s*ブ\_s*リ\_s*ュ\_s*ー\|タ\_s*ン\_s*グ\_s*ス\_s*テ\_s*ン\|T\_s*\%(h\_s*e\_s* \_s*W\_s*o\_s*r\_s*l\_s*d\_s* \_s*W\_s*i\_s*d\_s*e\_s* \_s*W\_s*e\_s*b\_s* \_s*C\_s*o\_s*n\_s*s\_s*o\_s*r\_s*t\_s*i\_s*u\_s*m\|u\_s*n\_s*g\_s*s\_s*t\_s*e\_s*n\)\)', - \ 'x' : '\%([ォォぉェェぇゥゥぅィィぃァァぁxхХΞ×ξx]\|ッ\_s*[ォェゥィァ]\|ッ\_s*[ォェゥィァ]\|っ\_s*[ぉぇぅぃぁ]\|シ\_s*ロ\_s*\%(ホ\_s*ン\|フ\_s*ォ\_s*ン\)\|X\_s*\%([軸線]\|デ\_s*[イー]\|v\_s*i\_s*e\_s*w\|S\_s*サ\_s*イ\_s*ズ\|L\_s*\%(i\_s*s\_s*p\|サ\_s*イ\_s*ズ\)\|ウ\_s*ィ\_s*ン\_s*ド\_s*ウ\|端\_s*末\)\|X\_s*\%([軸線]\|C\_s*o\_s*n\_s*s\_s*o\_s*r\_s*t\_s*i\_s*u\_s*m\|デ\_s*[イー]\|P\_s*S\_s*(\_s*e\_s*X\_s*p\_s*a\_s*n\_s*s\_s*i\_s*o\_s*n\_s* \_s*P\_s*a\_s*s\_s*s\_s*i\_s*n\_s*g\_s* \_s*S\_s*t\_s*y\_s*l\_s*e\_s*)\|S\_s*サ\_s*イ\_s*ズ\|l\_s*i\_s*b\|L\_s*\%(i\_s*s\_s*p\|サ\_s*イ\_s*ズ\)\|e\_s*n\_s*o\_s*n\)\|ジ\_s*オ\_s*ン\|ゼ\_s*\%(ビ\_s*ウ\_s*ス\|ロ\_s*\%(ッ\_s*ク\_s*ス\|グ\_s*ラ\_s*フ\_s*ィ\)\)\|ハ\_s*ビ\_s*エ\_s*ル\|ザ\_s*\%(ン\|ビ\_s*エ\_s*ル\)\|キ\_s*\%(シ\_s*\%(ロ\|レ\_s*ン\|リ\_s*ト\_s*ー\_s*ル\)\|セ\_s*ノ\_s*ン\|サ\_s*ン\_s*\%(チ\_s*ン\|タ\_s*ン\)\)\|E\_s*x\_s*t\_s*e\_s*n\_s*s\_s*i\_s*b\_s*l\_s*e\_s* \_s*M\_s*a\_s*r\_s*k\_s*u\_s*p\_s* \_s*L\_s*a\_s*n\_s*g\_s*u\_s*a\_s*g\_s*e\|ク\_s*\%(シ\_s*ー\|ロ\_s*ス\_s*ポ\_s*ス\_s*ト\|セ\_s*\%(ナ\_s*キ\_s*ス\|ノ\_s*フ\_s*ォ\_s*ン\)\|ザ\_s*ヴ\_s*ィ\_s*エ\|サ\_s*\%(イ\|ン\_s*\%(ト\_s*ス\|チ\_s*ッ\_s*ペ\|テ\_s*ィ\_s*ッ\_s*ペ\)\)\|リ\_s*ス\_s*マ\_s*ス\)\|エ\_s*\%(ク\_s*ス\|ッ\_s*ク\_s*ス\)\)', - \ 'y' : '\%([ヨ艾蒿蓬娵嫁齡齢據頼弱憙歓鎧万萬過便婚汚涎捩翊緘峪杙慾欲翌翼抑米比裝粧装澱淀縦誼祥葭悦宜克純圭禎葦慶禧美淑芳喜吉義瘍樣踴榕踊燿謠廱姚慂曄瀁瑶恙蓉遙怏雍痒珱陶孕漾昜暘甬幺癢泱癰窰慵穃鷹瓔煬邀遥拗擁瑤窯徭膺窈殀曜耀庸夭揚葉蛹腰羊熔杳沃壅様妖用溶佯謡陽洋嘉宵蘇蘓甦辟奸横豫代除譽歟喚預読誉蕷輿攀余縒呼避4世譱詠丗能予撚憑餘畭酔醉與飫舁四訓選与讀よユ潤赦弛緩聴岼閖梦努纈∴故濯檠穰豐豊倖志裄之幸雪趾梼讓譲牀縁紫浴床俑犹蚰酉莠邑攸黝熊尢蝣蕕猷悒囿佳尤佑〒右郵涌祐侑游猶湧融宥夕幽悠釉友雄憂有臾渝瘉愉征諭徃遊揺逾覦茹揄由蝓兪淘結輸諛搖揃弓楡瑜踰柚油喩汰腴ゆイΗη賤鄙卑苟嫌妹湯藷芋夢艷鑪鈩彩鱗色鯆忽綺貸甍応答愈圦杁霪隱蚓寅氤酳胤飮韵尹茵贇蔭婬湮堙吋廴I音慇韻咽淫殞姻隕院允殷隠陰窟巌巖頌祝鰛鰮鰯岩磐鼾歪弑弋抱懐肬贅疣狗戌乾犬諱在坐未汝戒誡警縛今Εε曰禾稻員因蝗印嘶鰍電引躄誘動忿≦鵤錨碇怒霆雷霹凧桴筏Ιι魚菴庵雖尿荊棘茨祈祷命猯豕古伍乙鎰鴪聿軼樹慈悼愴慯労格到至傷鼬頂戴徒致鈑痛板柞砂沙些聊潔諍烈功諫勳勲勇漁諌憇=憩粹熱粋憤域閾勢勤忙急磯孰焉湶泉厳何弄苛≧鎔范啀毬訝燻息指挑拠縷絲厭營営愛幼緒遑暇糸I弌壹肆莓苺櫟著市碑鐓礎甃臀弩石犧牲犠池溢佚壱11燠鬻礇毓粥的戦戰軍幾郁一稲許否飯洟位違居姨猗斎偽噫逝医鑄痍委囲云圍ゐ挿炒彙要熨饐醫言矮往詒威懿入如僞忌彜煎逶緯韋唯莞淹胃善生恚彝惟以活蔚為猪衣倚幃斐移鮪将可偉畏五夷李渭怡貽癒依逸井慰行伊爲胆射詑矣頤熬萎良凍出椅率好揖肄痿鋳謂帷亥苡意維遺鰄異去堰容囗いヤ稚稍飲鎗鑓槍孀寡鰥Я碼傭雇闇敗吝薮藪殕脂寄宿櫓軈軅簗梁S漸鋏刃灸和柔軟窶鱧奴僕萢優柳喧宅館舘輩族鏃龠檪≒譯籥鑰蜴繹藥葯扼益厄疫躍約役訳薬疚疾岾楊谺邪薯犲豺〈《》〉山壥邸廛豢養社鑢育廉寧尉裕恭泰易休保康安靖笶八熄演谷焼彌冶⇔也輻破辭埜痩野屋家病椰爺已矢燒⇒灼妬耶遣瘠哉罷夜殺止揶辞弥やyеЕ円¥←↓↑→ёЁ━─ユヤヨЙυYイЫыйΥy]\|ッ\_s*[ヨユイヤ]\|ッ\_s*[ヨユイヤ]\|っ\_s*[よゆいや]\|欧\_s*羅\_s*巴\|歐\_s*羅\_s*巴\|尸\_s*童\|蹌\_s*踉\|蹣\_s*跚\|終\_s*夜\|4\_s*\%([項者つ日]\|番\_s*目\|種\_s*類\)\|他\_s*所\|仁\_s*史\|隆\_s*克\|尚\_s*武\|孝\_s*高\|悌\_s*也\|賀\_s*[子悟]\|彬\_s*伯\|栄\_s*伸\|宗\_s*生\|新\_s*生\|昌\_s*[美男]\|暢\_s*[子一]\|永\_s*沈\|8\_s*日\|8\_s*日\|黄\_s*泉\|左\_s*手\|百\_s*合\|L\_s*i\_s*l\_s*i\_s*\%(o\_s*p\_s*s\_s*i\_s*d\_s*a\|a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\)\|U\_s*\%(字\|タ\_s*ー\_s*ン\)\|鞦\_s*韆\|強\_s*請\|梅\_s*桃\|桜\_s*桃\|靫\_s*負\|宙\_s*美\|礼\_s*暁\|温\_s*\%(雄\|泉\_s*津\)\|長\_s*庚\|昨\_s*夜\|又\_s*木\|木\_s*綿\|E\_s*\%(u\|メ\_s*ー\_s*ル\)\|祖\_s*谷\|文\_s*身\|郎\_s*[女子]\|刺\_s*[青草]\|蕁\_s*麻\|U\_s*\%(字\|タ\_s*ー\_s*ン\|r\_s*t\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\)\|海\_s*[豚参]\|西\_s*表\|鸚\_s*哥\|影\_s*[向青]\|況\_s*ん\_s*や\|所\_s*[以縁謂]\|D\_s*i\_s*a\_s*p\_s*e\_s*n\_s*s\_s*i\_s*a\_s*l\_s*e\_s*s\|藺\_s*草\|J\_s*u\_s*\%(l\_s*i\_s*a\_s*n\_s*i\_s*a\_s*l\_s*e\_s*s\|n\_s*c\_s*a\_s*l\_s*e\_s*s\)\|田\_s*舎\|膝\_s*行\|十\_s*六\_s*夜\|寝\_s*穢\|英\_s*\%([一桃蘭]\|吉\_s*利\)\|斑\_s*鳩\|烏\_s*賊\|玉\_s*筋\_s*魚\|硫\_s*黄\|N\_s*a\_s*j\_s*a\_s*d\_s*a\_s*l\_s*e\_s*s\|牛\_s*膝\|稜\_s*威\|常\_s*春\_s*藤\|5\_s*[つ日]\|5\_s*[つ日]\|惡\_s*戲\|甚\_s*振\|潮\_s*来\|悪\_s*戯\|交\_s*喙\|小\_s*魚\|鯨\_s*魚\|細\_s*小\_s*魚\|鶏\_s*魚\|経\_s*緯\|礒\_s*[山田]\|E\_s*\%(A\_s*S\_s*T\|V\_s*E\)\|気\_s*吹\|従\_s*[妹姉弟兄]\|公\_s*孫\_s*樹\|鴨\_s*脚\_s*樹\|G\_s*\%(l\_s*u\_s*m\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\|r\_s*a\_s*m\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\|i\_s*n\_s*k\_s*g\_s*o\_s*p\_s*s\_s*i\_s*d\_s*a\)\|銀\_s*杏\|鳶\_s*尾\|巫\_s*子\|神\_s*巫\|無\_s*花\_s*果\|睦\_s*月\|都\_s*方\_s*流\|縊\_s*[殺死首]\|蝟\_s*[集縮]\|埋\_s*け\_s*[火炭]\|不\_s*[可如]\|守\_s*宮\|燕\_s*龍\_s*茶\|両\_s*班\|流\_s*鏑\_s*馬\|柵\_s*原\|箭\_s*[田内]\|R\_s*a\_s*f\_s*f\_s*l\_s*e\_s*s\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|自\_s*棄\|火\_s*傷\|徐\_s*ら\|M\_s*y\_s*r\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\|天\_s*蚕\|倭\_s*絵\|日\_s*本\_s*武\_s*尊\|大\_s*和\|T\_s*\%(h\_s*e\_s*l\_s*i\_s*g\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\|r\_s*o\_s*c\_s*h\_s*o\_s*d\_s*e\_s*n\_s*d\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\)\|香\_s*具\_s*師\|玄\_s*孫\|A\_s*r\_s*a\_s*c\_s*a\_s*l\_s*e\_s*s\|P\_s*\%(o\_s*a\_s*l\_s*e\_s*s\|l\_s*u\_s*m\_s*b\_s*a\_s*g\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\|r\_s*\%(o\_s*t\_s*e\_s*a\_s*l\_s*e\_s*s\|i\_s*n\_s*c\_s*i\_s*p\_s*e\_s*s\)\|a\_s*l\_s*m\_s*a\_s*l\_s*e\_s*s\)\|妥\_s*子\|寿\_s*[詞男]\|Y\_s*\%([談軸]\|シ\_s*ャ\_s*ツ\)\|エ\_s*\%(ホ\_s*バ\|フ\_s*ゲ\_s*ニ\_s*ー\|レ\_s*ヴ\_s*ァ\_s*ン\|ニ\_s*セ\_s*イ\|ー\_s*ル\)\|ワ\_s*イ\)', - \ 'z' : '\%([空損存揃園薗底足束續屬∈∋賊続粟族俗属僧慥噌梍賍臟臧贓憎像臓贈象増造添初曾反沿曽ぞ譱然苒繕禪薇千蠕∀髯禅善漸冉前全關関蝉膳錢銭絶勢噬説筮贅脆税是攻責ぜ狡詰桷寸喘鮨附◆髓蘂膸蕋惴蕊隧隋隨瑞髄随豆廚圖付津頭酢厨好図逗鶴刷ず塩嶋縞島嶌橲衄衂宍竺舳忸軸舌祖喰食直凝日實昵印闍者鮭邪蛇麝搦着惹尺鉐雀寂若弱尻稔仭糂贐潯儘仞盡刄臣侭恁進訊俥蕁迅刃靱荏甚靭燼櫁樒塵尽尋陣腎壬人敘恕耡汝莇杼茹敍蜍洳舒縟辱褥蓐溽所抒鋤徐序絮叙助釀淨疂絛繞壌諚孃瀞襄仍蟐拯疉讓聶驤生帖仗躡穰乘塲靜繩禳蕘壤遶星滌茸嬲疊如醤剩娘嬢錠静醸縄女尉饒丈成擾穣烝嫋丞場杖條条蒸貞状攘剰畳冗定浄乗情城上常譲濡得戍就嬬鷲竪讐讎懦愀咒聚隼詢徇笋凖盾楯筍篤蓴惇洵淳閏諄恂馴旬荀潤循醇巡遵順准殉純準襦誦需戌朮孰宿塾珠熟恤術述孺呪豎儒綬樹受授壽鞣狃澀揉廿拾縱中從糅从戎澁蹂神汁獸絨縦渋柔什充十獣従住銃重岻治除士染時怩至児冶璽只畤侍孳轜耳示次寿辭粫司二祀邇而慈峙爺以地塒珥迩痔死敷恃蒔磁瓷仁字尓焦膩柱似嗣子亊路史餌兒滋仕爾辞弍自茲持寺事知じ騒沢澤猿笊晒曝皿鮫山算参鏨慘竄懴殘塹巉懺嶄讒惨暫慚慙斬残実笹酒坂盛三崎嵜桜榴雜襍棹竿雑濟才西斉済劑戝剤材財罪在冴覚左咲挫藏裂醒坐蔵差冷座戯ざz→↑ЬьЪъ↓←Жжズゾ零〇〒ザジゼзζЗΖz]\|ッ\_s*\%(ソ\_s*゙\|セ\_s*゙\|ス\_s*゙\|シ\_s*゙\|サ\_s*゙\)\|ッ\_s*[ゾゼズジザ]\|っ\_s*[ぞぜずじざ]\|ソ\_s*゙\|簇\_s*生\|双\_s*紙\|草\_s*[履紙子]\|セ\_s*゙\|台\_s*詞\|0\_s*次\|発\_s*条\|撥\_s*条\|發\_s*条\|世\_s*阿\_s*弥\|ス\_s*゙\|相\_s*撲\|木\_s*菟\|修\_s*法\|杜\_s*撰\|調\_s*所\|徒\_s*[罪刑]\|螟\_s*虫\|芋\_s*茎\|F\_s*i\_s*g\_s*u\_s*r\_s*e\|シ\_s*゙\|G\_s*\%(メ\_s*ン\|パ\_s*ン\)\|D\_s*y\|G\_s*\%(メ\_s*ン\|パ\_s*ン\)\|支\_s*度\|試\_s*合\|2\_s*乗\|2\_s*乗\|J\_s*\%(I\_s*S\_s*コ\_s*ー\_s*ド\|ポ\_s*ッ\_s*プ\|R\_s*東\_s*日\_s*本\)\|獅\_s*子\|甲\_s*乙\_s*丙\_s*丁\_s*戊\_s*己\_s*庚\_s*辛\_s*壬\_s*癸\|k\_s*\$\_s*_\_s*{\_s*e\_s*f\_s*f\_s*}\_s*\$\|爪\_s*哇\|射\_s*礼\|砂\_s*利\|謝\_s*花\|著\_s*語\|杓\_s*子\|深\_s*\%(秘\|大\_s*寺\)\|秦\_s*泉\_s*寺\|沈\_s*\%(香\|丁\_s*花\)\|晨\_s*朝\|濁\_s*世\|判\_s*官\|諍\_s*論\|長\_s*夜\|漏\_s*斗\|焼\_s*酎\|鐘\_s*石\|橈\_s*脚\_s*類\|承\_s*久\|朱\_s*里\|C\_s*a\_s*b\_s*o\_s*m\_s*b\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|J\_s*\%(リ\_s*ー\_s*グ\|ポ\_s*ッ\_s*プ\|U\_s*N\_s*K\_s*O\)\|絢\_s*子\|頌\_s*偈\|数\_s*珠\|入\_s*[魂牢来洛院内水棺]\|霜\_s*月\|1\_s*\%(2\|6\_s*進\|0\_s*[進月]\|1\_s*月\|8\_s*禁\)\|師\_s*走\|極\_s*月\|紐\_s*帯\|1\_s*\%(0\|1\_s*月\|8\_s*禁\|2\_s*月\)\|サ\_s*゙\|搾\_s*菜\|蜊\_s*蛄\|粗\_s*目\|槧\_s*本\|散\_s*切\_s*り\|沙\_s*汰\|石\_s*榴\|柘\_s*榴\|細\_s*工\|亜\_s*鉛\|サ\_s*\%(モ\_s*ラ\|ン\_s*ポ\_s*ー\_s*ニ\_s*ャ\|ラ\_s*ゴ\_s*サ\)\|Z\_s*\%([r軸]\|i\_s*\%(r\_s*c\_s*o\_s*n\_s*i\_s*u\_s*m\|n\_s*c\)\|ガ\_s*ン\_s*ダ\_s*ム\|バ\_s*ッ\_s*フ\_s*ァ\|I\_s*P\_s*フ\_s*ァ\_s*イ\_s*ル\)\|シ\_s*\%(タ\_s*ー\_s*ル\|オ\_s*\%(ン\|ニ\_s*\%(ス\_s*ト\|ズ\_s*ム\)\)\)\|Z\_s*\%([旗軸]\|変\_s*換\|i\_s*g\_s*g\_s*y\)\|チ\_s*\%(ク\_s*ル\_s*ス\|ア\_s*ノ\_s*ー\_s*ゼ\|ュ\_s*ー\_s*リ\_s*\%(ヒ\|ッ\_s*ヒ\)\|ャ\_s*ル\_s*ダ\_s*ッ\_s*シ\_s*ュ\|ゴ\_s*イ\_s*ネ\_s*ル\_s*ワ\_s*イ\_s*ゼ\_s*ン\)\|ツ\_s*\%(ァ\_s*\%(ラ\_s*ト\_s*ゥ\_s*ス\_s*ト\_s*ラ\|イ\_s*ト\)\|ェ\_s*\%(ナ\_s*ー\|ッ\_s*ペ\_s*リ\_s*ン\|ル\_s*マ\_s*ッ\_s*ト\)\|ィ\_s*\%(ク\_s*ル\_s*ス\|タ\_s*ー\|ー\_s*グ\_s*ラ\_s*ー\|ン\_s*\%(バ\_s*ロ\_s*ン\|マ\_s*ー\_s*マ\_s*ン\)\|ゴ\_s*イ\_s*ネ\_s*ル\)\)\)', - \ 'A' : '\%([ア餅母渉恤閔憐慌遽蚫鰒鮑袷淡∃主衽袵歩垤蟻麁凡塔蘭露著表霰非諍抗更検革改現競爭争洗殿鉱予豫粗嵐禮恠妖彪殺絢怪綺肖彩漢過謝謬誤礼操綾飴菴黯罨鱇鮟餡行闇按諳晏鞍暗鶩鬚鰓顎喘発肋豈嫂兄崇騰県購贖网罔咫與鼎中新邉邊辺恰頭價価値游遊畔畦堋杏梓与袙衵憬孔坑案侮窖強貴讐讎徒仇黶痣欺鮮字糾嘲薊姐姉曙炮焙炙蜚薹膏脂油危鐙虻泡蹟能痕踪跡東預聚輯纂遏蒐乢軋誂羹壓惇集陸敦暑淳篤熱扱暖温遖斡私圧焦汗央奥奧媼桜櫻塰蜑餘遍普周剰蔗余尼雨甘天凹押樗楝溢艶庵鰺網戯簣鯵味堊渥軛圷憧欠踵幄握芥齷厚漁鯏蜊蕣淺麻浅晰龝煥晢呆朖啓亮晄鑑滉昜旭聡光亨陽洸璋顯輝昿曠諦朗哲顕彬晶賈章商穐彰晃晧昭秋噫瞹穢阨埃欸姶隘文粟曖鮎藹饗靉挨間相哀葭趾朝晨愛跛蹇跫脚蘆葦芦鐐桎足淦赫燈赧紅旃朱茜藜銅赭閼曉暁垢皹皸絳灯證暴証赤呷扇黝榮碧葵蒼煽仰青穴和或哇婀当上阿編吾在併明開韲悪荒襾痾浴唖有挙遭逢嗚敢褪娃安厭充該彼擧會飫倦合亞揚椏宛遇飽惡當あ藍金@&&∧∩論∠銀会∀空域⇔←↓⇒→↑⌒後Ц亜米¨´`^’〜≒AαÅΑアаАA]\|厦\_s*門\|廈\_s*門\|沫\_s*雪\|食\_s*蟻\_s*獣\|H\_s*a\_s*l\_s*o\_s*r\_s*a\_s*g\_s*a\_s*l\_s*e\_s*s\|浣\_s*熊\|菖\_s*蒲\|豆\_s*汁\|蛙\_s*鳴\_s*蝉\_s*噪\|塩\_s*梅\|家\_s*鴨\|趺\_s*坐\|Z\_s*\%(n\|i\_s*n\_s*c\)\|浮\_s*子\|痘\_s*痕\|窪\_s*地\|糠\_s*蝦\|醤\_s*蝦\|信\_s*天\_s*翁\|左\_s*沢\|雅\_s*典\|校\_s*倉\|小\_s*豆\|四\_s*阿\|鴉\_s*\%(片\|鷺\_s*合\_s*戦\_s*物\_s*語\)\|渾\_s*名\|綽\_s*名\|化\_s*野\|翌\_s*檜\|飛\_s*[魚鳥]\|総\_s*角\|木\_s*通\|通\_s*草\|L\_s*a\_s*r\_s*d\_s*i\_s*z\_s*a\_s*b\_s*a\_s*l\_s*a\_s*c\_s*e\_s*a\_s*e\|花\_s*鶏\|我\_s*\%(妻\|孫\_s*子\)\|数\_s*多\|奄\_s*美\|灰\_s*汁\|a\_s*\%(t\_s*t\_s*o\|c\_s*c\_s*e\_s*n\_s*t\)\|胡\_s*[床坐座葱]\|日\_s*明\|碩\_s*宏\|祥\_s*[仁彦]\|蜻\_s*蛉\|E\_s*\%(s\|i\_s*n\_s*s\_s*t\_s*e\_s*i\_s*n\_s*i\_s*u\_s*m\)\|生\_s*憎\|匕\_s*首\|英\_s*\%([保田]\|虞\_s*湾\|賀\_s*保\)\|靄\_s*[靄々]\|I\_s*\%(r\_s*i\_s*d\_s*a\_s*l\_s*e\_s*s\|P\_s*\%(電\_s*話\|ア\_s*ド\_s*レ\_s*ス\)\|D\_s*カ\_s*ー\_s*ド\|C\_s*\%(タ\_s*グ\|カ\_s*ー\_s*ド\)\)\|I\_s*\%(P\_s*電\_s*話\|C\_s*\%(タ\_s*グ\|カ\_s*ー\_s*ド\)\)\|走\_s*目\|鹹\_s*草\|馬\_s*酔\_s*木\|海\_s*[豹人女士部驢]\|R\_s*u\_s*b\_s*i\_s*a\_s*\%(l\_s*e\_s*s\|c\_s*e\_s*a\_s*e\)\|褐\_s*毛\_s*和\_s*種\|石\_s*蓴\|白\_s*馬\|水\_s*[黽馬綿]\|M\_s*a\_s*l\_s*v\_s*a\_s*l\_s*e\_s*s\|ト\_s*リ\_s*プ\_s*ル\_s*A\|公\_s*理\| \_s*ア\_s*ク\_s*シ\_s*ア\_s*ム\|ヒ\_s*素\|砒\_s*素\|京\_s*都\_s*高\_s*度\_s*技\_s*術\_s*研\_s*究\_s*所\|代\_s*入\|遺\_s*産\|抽\_s*象\|G\_s*o\_s*l\_s*d\|自\_s*動\_s*\%(現\_s*金\_s*取\_s*り\_s*扱\_s*い\_s*機\|預\_s*貯\_s*金\_s*機\)\|属\_s*性\|何\_s*か\|か\_s*つ\|お\_s*よ\_s*び\|セ\_s*ン\_s*ト\_s*キ\_s*ッ\_s*ツ\_s*ネ\|S\_s*\%(b\|i\_s*l\_s*v\_s*e\_s*r\)\|使\_s*用\_s*可\_s*能\|利\_s*用\_s*可\_s*能\|算\_s*法\|割\_s*り\_s*当\_s*て\|オ\_s*\%(レ\|ギ\_s*ュ\_s*ス\_s*タ\_s*ン\|ド\_s*レ\_s*イ\|ン\_s*グ\_s*ス\_s*ト\_s*ロ\_s*ー\_s*ム\|ル\_s*\%(ト\_s*キ\_s*ー\|タ\_s*\%([ーナ]\|ネ\_s*\%(ー\_s*ト\|イ\_s*ト\)\)\)\|ー\_s*\%([クガサトラル]\|ニ\_s*ン\_s*グ\|キ\_s*シ\_s*ン\|ブ\_s*リ\_s*ー\|バ\_s*ー\_s*ド\|ベ\_s*ル\_s*ジ\_s*ュ\|ギ\_s*ュ\_s*ス\_s*\%(ト\|タ\_s*ン\)\|ゾ\_s*ン\_s*ヌ\|ス\_s*\%(チ\_s*ン\|テ\_s*ィ\_s*ン\|タ\_s*ー\|ト\_s*\%(リ\_s*ア\|ラ\_s*リ\_s*ア\)\)\|ド\_s*リ\_s*ー\|ジ\_s*\%([ェー]\|オ\_s*ロ\_s*ジ\)\|デ\_s*ィ\_s*\%(オ\|エ\_s*ン\_s*ス\|シ\_s*ョ\_s*ン\|ト\_s*リ\_s*ア\_s*ム\)\|タ\_s*ム\|ソ\_s*\%(リ\_s*テ\_s*ィ\|ラ\_s*イ\_s*ズ\)\|セ\_s*ン\_s*テ\_s*ィ\_s*ッ\_s*ク\|ロ\_s*ラ\)\)\|配\_s*列\|バ\_s*イ\_s*ト\|ハ\_s*ル\_s*マ\_s*ゲ\_s*ド\_s*ン\|引\_s*数\|人\_s*工\_s*\%(現\_s*実\_s*感\|知\_s*能\)\|イ\_s*\%(ー\_s*ジ\_s*ス\|オ\_s*ン\|ソ\_s*ッ\_s*プ\)\|マ\_s*ル\_s*ド\_s*ゥ\_s*ー\_s*ク\|紫\_s*\%(陽\_s*花\|水\_s*晶\|石\_s*英\)\|付\_s*録\|応\_s*用\|エ\_s*\%([ニメアイー]\|ッ\_s*チ\|ン\_s*\%(ド\_s*ラ\_s*ン\|ジ\_s*ェ\_s*\%(ル\|リ\_s*ッ\_s*ク\)\|ゼ\_s*ル\)\|リ\_s*ア\|オ\_s*リ\_s*ア\|ス\_s*テ\|プ\_s*ロ\_s*ン\)\)', - \ 'B' : '\%([鯔鰡堀本凡盆煩梵骨凹歿鈕釦沒渤没穆睦濮樸目攴攵朴木僕墨卜牧星抱肪鵬冐氓鋩旄瑁袤儚蟒鉾貌旁网茆牟蒡甍胞謗蠎虻髦黽卯懋榜眸罔乏惘妨帽昴忙剖冒忘茅膀妄尨厖膨貿防紡滂茫望亡傍某謀暈拇保墓暮菩簿誉掘募姥謨模母干彫呆慕坊姆牡乾褒惚戊ぼ冖覓幎汨巾羃冪紅鼈瞥韈蔑塀抃遍辧瓣卞汳宀湎采辯辨辮眄冕勉娩弁邉可辺邊べ船房笛淵縁渊渕斑鞭樗椈太袋深蓋葢盖豚節勿佛物震勃蚋風鰤馼蚊聞文誣無蒲撃打不錻武振分蕪奉吹侮葺毋舞悔憮部廡嘸葡撲撫拭伏歩ぶ米謐人匹浸額鐚跛!広開繆別謬泯旻梹罎岷緡紊檳頻壜愍瓶鬢閔憫敏貧便帛辟百闢白杪″緲憑票猫鋲屏渺眇平錨苗秒描廟病尾火日媚靡糒枇贔未引琵瀰嵋備縻糜弾美眉弭濔比寐毘麋微び早速林尿針腹拂散払祓原塙蠻旛旙鑁鷭幡悗挽判棒絆版輓蕃板播礬阪坂磐番盤晩萬蛮万箱蠅芒挟伴蜂桴枹鉢撥働畠畑糞屎鼻花端離話V魅許秤筏罸魃拔閥橋走箸柱寞藐貘獏暴漠瀑麥縛博駁莫驀爆楳憊狽霾唄吠杯賣苺培煤黴貝焙賠買売陪倍梅媒跋伐末幕曝抜罰庭馬葉婆罵這化馳羽塲晴歯場芭刄刃張貼ば“仏□■⊥下底×|‖−\∵麦ボバ][{}BブビБΒбβベB]\|ッ\_s*\%(ホ\_s*゙\|ヘ\_s*゙\|フ\_s*゙\|ヒ\_s*゙\|ハ\_s*゙\)\|ッ\_s*[ボベブビバ]\|っ\_s*[ぼべぶびば]\|ホ\_s*゙\|小\_s*火\|襤\_s*褸\|孟\_s*買\|P\_s*a\_s*e\_s*o\_s*n\_s*i\_s*a\_s*\%(l\_s*e\_s*s\|c\_s*e\_s*a\_s*e\)\|南\_s*瓜\|耄\_s*耋\|孑\_s*孑\|包\_s*丁\|ヘ\_s*゙\|袂\_s*別\|箆\_s*棒\|篦\_s*棒\|胼\_s*胝\|フ\_s*゙\|補\_s*任\|毒\_s*島\|醜\_s*[女男]\|山\_s*毛\_s*欅\|F\_s*a\_s*g\_s*a\_s*l\_s*e\_s*s\|布\_s*団\|茯\_s*苓\|V\_s*\%(字\|ネ\_s*ッ\_s*ク\|シ\_s*ネ\_s*マ\)\|附\_s*子\|付\_s*子\|鞦\_s*韆\|豊\_s*[前後]\|ヒ\_s*゙\|魚\_s*[籠篭]\|b\_s*i\_s*o\_s*t\_s*o\_s*p\_s*e\|彌\_s*縫\|弥\_s*[漫縫]\|吃\_s*驚\|天\_s*鵞\_s*絨\|緬\_s*甸\|賓\_s*頭\_s*盧\|編\_s*木\|柏\_s*槙\|S\_s*a\_s*n\_s*t\_s*a\_s*l\_s*a\_s*l\_s*e\_s*s\|兵\_s*[衛法]\|表\_s*紙\|拍\_s*[板子]\|ハ\_s*゙\|囃\_s*子\|巴\_s*爾\_s*幹\|R\_s*o\_s*s\_s*a\_s*l\_s*e\_s*s\|薔\_s*薇\|蟠\_s*踞\|鈑\_s*金\|A\_s*n\_s*n\_s*o\_s*n\_s*a\_s*c\_s*e\_s*a\_s*e\|発\_s*条\|祖\_s*母\_s*さ\_s*ん\|梯\_s*子\|伯\_s*\%([林楽労]\|剌\_s*西\_s*爾\)\|莪\_s*原\|蝗\_s*虫\|飛\_s*[車蝗]\|掲\_s*示\_s*板\|プ\_s*ル\_s*コ\_s*ギ\|作\_s*業\_s*域\|オ\_s*ー\_s*ト\_s*バ\_s*イ\|基\_s*[礎底]\|フ\_s*ァ\_s*ゴ\_s*ッ\_s*ト\|背\_s*景\|北\_s*京\|ペ\_s*\%(キ\_s*ン\|テ\_s*ル\_s*ギ\_s*ウ\_s*ス\)\|臭\_s*素\|イ\_s*ギ\_s*リ\_s*ス\|ホ\_s*ウ\_s*素\|硼\_s*素\)', - \ 'C' : '\%([コ恐怖惟怺※米暦轉頃壼鶤袞鯤坤狠艮獻琿悃很建棍魂菎蒟滾梱溷献痕渾墾恨懇根杪王挙泥裔樸鞐熟枹醴蛩蹊徑径溢毀零錯苔拒箏亊判斷諺理断盡尽辞琴言異事今壽寿鯒冀希礫鯉拱齣狛細腓昆拳瘤鮗兄近谺応應答是爰凩兀惚榾忽輿甑腰拵拗鐺鏝昿仰慌桁袷塙頏絖冦耗亙峺效晄覯糠匣逅閧扛湊羔礦爻壙盍洸鬨浤凰閤窖缸寇岡頁傚湟汞洽崗鮫伉訌誥冓敲磽鏗椌搆肓鍠矼砿犒淆呷鵁皐黌遘昴槹蚣肱肴熕胱猴扣杲蛤狎畊昊餃哽幌鱇峇嫦烋隍恆倥徨啌吭釦闔藁絋棡遑紘稾鴿詬哮困靠皋惶紺鈩絳閘蒙冰氷郡蛟槁候楮媾溘后蝗酵嚆犢稿亢哄睾慷梗笄郊効岬肛項巷鑛洪佼狡昂叩勾喉滉糀晃剛晧曠宏控恍侯煌港皓坑皎耿膏向江膠虹巧鴻鉱衡浩興厚耕弘綱抗購講恒溝薨鋼航孝更校行肯荒高皇光好槲梏谷釛尅斛棘轂哭詰告刻酷穀⌒冴虎觚壷胯鼓児漉糊媚古娘冱虚混粉辜湖虍放葫捏鈷痩鴣瞽詁箍錮蠱蛄粐滬估雇故沽転倒漕罟餬拠超込凅誇懲琥扈袴木蝴呱乕踰弧越孤菰跨壺楜黄股肥己女戸恋兒怙瑚戀夸皷滸濾瓠去濃乎杞こセ芹鬩旃錢刋箭羶筌孅阡栫舩纎濺舛甎銛簽湶茜槧吮薦癬斬倩痊孱擶贍纖仟磚燹揃綫喘涎荐饌槫濳沾筅蟾牋苫專翦亘鐫僣韆箋僊殱殲闡賎餞羨顫甅竰糎陝踐銓閃∨潺遷銑栴剪煽譫僉瞻践跣栓疝詮銭穿尠戰僭繊腺泉嬋仙擅淺鮮専扇蘚船浅線撰宣洗選煎戦尖先忙伜倅逼狭狹蝉旋鱈薛椄絏洩卩啜泄紲攝緤§渫刹褻浙竊截窃殺説拙摂節切蓆晰威裼績蹐迹蹠跖跡螫瘠勣籍晢夕鶺雪寂∫∬碩惜析席隻甥韲嘶犀菁瀞晟貰擠睛筬淒醒齊婿撕牲齏情萋穽躋歳栖棲掣腥逝惺斉臍旌悽整凄靖製晴迫塞攻瀬急勢世畆丗糶畝堰脊せク配椚檪櫪栩椡椪箜櫟含纐婚糞癖潛潜鵠凹窪縊跟頚軛珞頸諄鞋履窟狐轡覆沓碎砕条降件頽崩屑釘莖茎陸杙杭掘崛倔鶏鐃藥擽薬楠誓梳串釧與与挫籖鯀鯨鬮籤隈熊艸嚔藾叢鏈腐鎖Ξξ茸菌楔草圀邦國国漱嗽吻腔φ劫刧粂裙勳熏皹桾皸醺崑燻訓勲葷君委钁企咥銜桑某暝峅昏冥眛鮓比闇位鞍藏暗倉廚厨涅々〃ゝヽゞ仝ヾ公曇雲蜘佝栗狂包胡俥梍枢畔鐵★玄黒徠久孔桍窶暮懼駒苦朽区眩吁繰庫垢紅呉汲宮枸劬煦口9瞿工供吼怐玖貢九惧来來區組奇句狗鳩絎嶇衢くシ埀謐Σσ蘂蕋蕊痺褥茵鵐蔀鷸鴫霑入責蔵嶌了縞嶋島凋搾澀澁渋縛暫屡柴荵凌鎬忍簧慕舖↓襪認從从.舌扱罔虐Θθ秕粃椎椣尿貎肉臠猪衣榻黙蜆恵楙誠茂成繁惻鋪陣頻閾櫁樒鹽汐潮瑟蛭疾櫛隲隰嫉蟋悉漆躾膝失室沒鎭沈滴雫賤鎮靜静顰尓爾聢乍併然◇□■◆倖幸貭叱征質柵卯滋撓品鬼鍜錏錣痼凝而拉設垂萎栞襞吝咳什導汁験記徴著印☆〇銀城報調蝨虱白濕湿標七僕楚笞霜臀退斥尻後冩寫舍者砂卸柘炙#♯暹諜喋煮這西娑沙謝紗鯱奢赦洒捨鮭瀉妁鑠抉蹟勺炸決釋皙爍昔斫蜥刳芍酌爵折癪笏赤灼綽杓石尺赭写鷓積遮舎車射斜釈社洙麈殳蛛娶娵諏鬚侏繻銖蹙俶倏菽叔蓿戚肅淑夙粛宿縮殊趣珠恤卆蟀出洲泅楸綉溲遒酬鷲駲緝葺穐蹤繍螽讐甃萩楢逎讎售岫收驟舅囚姑蓚皺鞦銹脩輯醜習羞酋聚舟秀祝袖啾拾蒐収執衆愁就臭蹴週終褶州宗集秋椶棕朱撞種修周手首酒須儁惷悛濬雋皴墫蕣順蠢舜旬浚竣峻駿逡筍瞬俊蓁畛矧縉蔘鷏齔嗔忱譛袗譖娠疹哂脣怎晉鷆臻甄槙寢岑瀋箴軫榛秦襯診鉐津駸讖紳斟唇針呻蜃賑芯瞋振殿侵薪晨辰震宸森眞愼伸慎寝晋進深審親臣鍼申心宍信真新薯墅杵岨藷黍苜渚砠狙嶼處胥蜍苴曙背緒雎蔗庶処署所暑奬簫浹橸舂艢廂陞炒鍬庠獎梢璋將厰邵摺淞訟樅筱篠燮橡愴韶咲誚峭甞鯖敞聲懾稍腫政顳枩慯殤秤湫井星廠剿妝霎蛸劭觴愀升錆鬆樵囁鷦嶂醤青従慫逍倡竦爿薔笙樟装肖菖≦<湘誦聳檣稱声裳蒋蕉嘯慴盛精霄清鈔粧彰鏘悚蕭悄瀟哨焦憔匠鍾償瘴鞘漿頌詔沼妾請唱薑庄渉障奨娼床牀椒抄聖荘宵傷性相生銷召賞猩症昭燒猖昌少尚晶憧紹祥承證笑将焼照招章詳消証硝掌商昇小昃禝稷寔矚謖觸稙軾嗇屬穡拭属燭贖囑嘱織蝕式喰蜀殖諸初触埴植食職嗜笶姉士徙誣氏思染祗時弑滲梔摯肢詩咨祉刺泗輜厶強貲若至師舐咫只施誌呰匙示指締厮啻次賜熾趾駟漬笥贄此司如沚尸髭肆祀鷙諡枝篩豕巵始妛及弛絲浸閇翅緊揣伺糸駛痣矢衰死敷恃茨旨沁嘴蚩試釶俟瓷觜廝緇祠梓址詞之使獅志歯紫雌姿諮占絞視嗣識四恣阯侈幟卮凍史領竢市巳齒偲資止謚耆覗脂芝痴粢孜仕錙耜齎自屎茲岐〆嗤砥知私仔しカ糜癢粥痒麹輕骨業軽鰔鰈餉通瓶龜甕亀鴈獵鳫殯K猟雁釀鳧鳬髢氈鴨躱巛側厠廁磧瓦獺翡為裘皮〜紮→搦苧碓柄體軆躰躯身体鴉犂烏絡空唐榧茅揀坎澗扞莟丱拑盥嫺鑵蒄瞰淦稈康繝懽憾骭戡奐啣厂鐶讙澣羮寰羹嫻杆鸛歡豢歛罕酣陷皖篏捍瀚勸撼驩卷樌潤觀橄涵渙堪巫覡鉋随萱簪舘艱咸翰柬悍駻燗槓浣邯攷稽宦考棺潅閂煥鉗疳癇函凾鹹緘桓款箝諌諫轗旱坩侃鰥 館莞橇韓患灌勧菅奸刊柑肝看桿干緩寒嵌廣広竿貫巻敢漢環間陥喚閑監喊歓甘寛管慣完汗艦乾幹官観壁椛屍姓庇鞄芳蔓千鯑一勘蜻⊃影陰蔭景*棧梯筧庚辛柧門廉癩乞Κ川κ合’)〈《‘“”}{》〉囓柁鮖悴舵鰍梶錺餝飾篭籠還歸卻皈孵省顧槭楓却帰反返督髮帋守祇韮主裃雷髪紙鉦曲矩予鐘樺沫偏騙語潟刀模象仇固硬傍難容忝辱頑形方旁型肩風幽滓翳微掠綛纃絣緕擦糟鎹粕春轄戞劼猾瞎恰蛞∧蠍擔濶筈剋蝎曷羯喝餓聒鞨黠刮蘰鬘桂闊括嘗捷豁渇担滑松堅鰹功割戛活暈疽鵲瘡傘嵩重襲葛笠堵硴墻牆蠣蛎柿關掲罹抱踵嬶嚊拘関係貌顏郁薫顔母感釡罐窰鴎框叺喧竃竈窯釜缶蒲鎌數数槝栢膳傅畏賢橿姦樫爨炊圍喞託囲鈎『鉤「』」限鍵(傾禿蕪鏑頭齧被兜敵適哉必要称鼎鬲彜彝叶片悲哀愛鋺蛇鉄蜩神奏金楫裹磆餅徒褐糧粮膈覺∠埆蠖貉幗隱擴寉骼癨壑咯椁嚇茖愨槨膕掴覈殼穫狢霍礁恪擱匿撹攪喀廓較郭]】【〔〕[殻挌劃閣格隠覚矍革獲馘攫核鶴拡客隔角確蠏壞畍丐獪褂恠喙峡夬觧械揩醢匯廨誡誨嵬櫂隗茴徊迴枴懈价椢榿囘蛙瑰乖浬鰄傀糴柏街鳰懷蛔蠶蚕邂蟹潰壊恢腕芥垣楷會拐悔詼諧皆界疥魁偕改繪貝胛絵甲快灰槐晦懐介回塊解階廻戒開会怪海縢篝炬耀赫輝冠鑒鑑各屈鏡和代茄缺飼嫁華堝變狩上訶架何啝火日菓欠苅繋稼ヶ个噛譁科跏舸賭禍支窩課花刈渦嚼掛呵替葭柯畫駆嘩崋化霞蝌迦顆価馨家借蝦罅駈斯賈嘉易果戈廈哥買闕且克墟靴訛驅換踝描軻嗅價嗄可彼夥香歌河珂鹿個痂書假荷耶笳咼藉糅舁搗渮袈下萪貸厦禾貨咬寡箇卦苛譌枷掻過画ヵ黴遐兼醸翔仮佳蚊懸伽賀淅勝涸苟蝸謌夏枯暇か・…塩閉倶錫呼∩取籐加交бТуЖоВЙЗзжЪЯУИвяшфлСКрпХЁОЭРФЫЩъБыШйхМкПгдмцНЛёаиэетАГЬюЕЮсьнщД♪┼╋×╂┿○●◎銅∪χΧ子чЧ株Ц珈、,色ク衝競構簡制≡変接カ┐┘┗┏┓┌┛└正コ¢シ℃セCC]\|ッ\_s*[コセクシカ]\|ッ\_s*[コセクシカ]\|っ\_s*[子こせくしか]\|焜\_s*炉\|嫡\_s*妻\|二\_s*合\_s*半\|牛\_s*尾\_s*魚\|巨\_s*勢\|独\_s*楽\|居\_s*士\|特\_s*牛\|粫\_s*門\|甦\_s*生\|f\_s*o\_s*o\_s*t\_s* \_s*a\_s*n\_s*d\_s* \_s*m\_s*o\_s*u\_s*s\_s*e\_s* \_s*d\_s*i\_s*s\_s*e\_s*a\_s*s\_s*e\|傴\_s*僂\|A\_s*\%(r\_s*c\_s*h\_s*i\_s*c\_s*h\_s*l\_s*a\_s*m\_s*y\_s*d\_s*e\_s*a\_s*e\|p\_s*i\_s*a\_s*l\_s*e\_s*s\)\|U\_s*m\_s*b\_s*e\_s*l\_s*l\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\|台\_s*詞\|懺\_s*法\|前\_s*[妻栽]\|妹\_s*尾\|嘲\_s*笑\|儕\_s*輩\|斎\_s*次\|済\_s*[民々済]\|蒸\_s*[籠篭]\|救\_s*世\|莎\_s*草\|百\_s*[濟済]\|恭\_s*敬\|9\_s*[日月]\|秧\_s*鶏\|究\_s*竟\|釉\_s*掛\|典\_s*薬\_s*寮\|探\_s*湯\|球\_s*磨\|六\_s*合\|地\_s*祇\|都\_s*子\|群\_s*衆\|慈\_s*姑\|旧\_s*\%(訳\|唐\_s*書\)\|内\_s*蔵\_s*助\|H\_s*e\_s*l\_s*l\_s*e\_s*b\_s*o\_s*r\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|J\_s*u\_s*g\_s*l\_s*a\_s*n\_s*d\_s*a\_s*l\_s*e\_s*s\|R\_s*h\_s*a\_s*m\_s*n\_s*a\_s*l\_s*e\_s*s\|老\_s*舗\|望\_s*潮\|健\_s*か\|L\_s*a\_s*\%(u\_s*r\_s*\%(a\_s*c\_s*e\_s*a\_s*e\|o\_s*i\_s*d\_s*e\_s*a\_s*e\)\|m\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\|b\_s*i\_s*a\_s*t\_s*a\_s*e\)\|埋\_s*葬\_s*虫\|幣\_s*原\|卓\_s*袱\|桎\_s*梏\|柳\_s*葉\_s*魚\|蠹\_s*魚\|汚\_s*点\|惠\_s*雄\|舗\_s*石\|磯\_s*城\|W\_s*i\_s*n\_s*t\_s*e\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|倭\_s*文\|云\_s*[々云]\|明\_s*\%(々\_s*後\_s*日\|明\_s*後\_s*日\)\|7\_s*月\|7\_s*月\|文\_s*月\|4\_s*月\|4\_s*[分月]\|竹\_s*[篦刀]\|羊\_s*[齒歯]\|爲\_s*\%([留難置果送極手兼合業]\|ん\_s*方\|來\_s*り\|納\_s*め\)\|I\_s*\%(l\_s*l\_s*i\_s*c\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\|s\_s*o\_s*p\_s*y\_s*r\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\)\|素\_s*[魚人面]\|不\_s*[忍知]\|注\_s*連\|軍\_s*鶏\|髑\_s*髏\|三\_s*\%(味\|鞭\_s*酒\)\|吃\_s*逆\|差\_s*[別異]\|叉\_s*手\|輸\_s*[出贏]\|卒\_s*去\|B\_s*r\|隼\_s*[朗郎]\|笋\_s*[干羹]\|参\_s*差\|財\_s*産\|枌\_s*所\|縦\_s*容\|睫\_s*毛\|M\_s*\%(e\_s*t\_s*a\_s*c\_s*h\_s*l\_s*a\_s*m\_s*y\_s*d\_s*e\_s*a\_s*e\|u\_s*s\_s*a\_s*l\_s*e\_s*s\)\|Z\_s*i\_s*n\_s*g\_s*i\_s*b\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|S\_s*\%([eg]\|p\_s*e\_s*r\_s*m\_s*a\_s*t\_s*o\_s*p\_s*h\_s*y\_s*t\_s*a\|c\_s*i\_s*t\_s*a\_s*m\_s*i\_s*n\_s*e\_s*a\_s*e\)\|続\_s*\%(日\_s*本\_s*\%(紀\|後\_s*紀\)\|後\_s*撰\_s*和\_s*歌\_s*集\)\|離\_s*れ\_s*離\_s*れ\|掃\_s*部\|羚\_s*羊\|土\_s*器\|蝙\_s*蝠\|魚\_s*狗\|P\_s*\%(i\_s*p\_s*e\_s*r\_s*a\_s*\%(l\_s*e\_s*s\|c\_s*e\_s*a\_s*e\)\|t\_s*e\_s*r\_s*i\_s*d\_s*o\_s*s\_s*p\_s*e\_s*r\_s*m\_s*\%(a\_s*l\_s*e\_s*s\|i\_s*d\_s*a\_s*e\)\|o\_s*\%(t\_s*a\_s*s\_s*s\_s*i\_s*u\_s*m\|d\_s*o\_s*s\_s*t\_s*e\_s*m\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\)\)\|連\_s*枷\|枳\_s*殻\|機\_s*関\|落\_s*葉\_s*松\|凵\_s*繞\|檻\_s*車\|顴\_s*骨\|T\_s*\%(h\_s*a\_s*l\_s*i\_s*c\_s*t\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|u\_s*b\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\)\|南\_s*瓜\|量\_s*子\|山\_s*\%(海\_s*経\|梔\_s*子\|陽\_s*道\)\|蜉\_s*蝣\|陽\_s*炎\|破\_s*片\|脚\_s*気\|旗\_s*魚\|鍛\_s*[治冶]\|挿\_s*頭\|駕\_s*\%(籠\|輿\_s*丁\)\|長\_s*[月官]\|剃\_s*刀\|天\_s*\%(牛\|鼠\_s*矢\)\|帷\_s*子\|酢\_s*漿\_s*草\|O\_s*x\_s*a\_s*l\_s*i\_s*d\_s*a\_s*c\_s*e\_s*a\_s*e\|飛\_s*[沫白]\|曾\_s*て\|曽\_s*て\|燕\_s*子\_s*花\|牡\_s*[蛎蠣]\|民\_s*部\|部\_s*曲\|E\_s*\%(b\_s*e\_s*n\_s*a\_s*l\_s*e\_s*s\|l\_s*a\_s*n\_s*a\_s*l\_s*e\_s*s\)\|案\_s*山\_s*子\|梭\_s*\%(魚\|子\_s*魚\)\|蟷\_s*螂\|螳\_s*螂\|瓜\_s*\%(田\|呂\_s*根\)\|拍\_s*手\|瑕\_s*[瑾疵]\|東\_s*\%([風雲]\|海\_s*林\|京\_s*都\_s*立\_s*科\_s*学\_s*技\_s*術\_s*大\_s*学\)\|気\_s*[質触]\|(\_s*株\_s*)\|贏\_s*ち\_s*得\|歩\_s*兵\|恁\_s*く\|杜\_s*\%(若\|父\_s*魚\)\|梅\_s*花\_s*皮\|頴\_s*田\|膾\_s*炙\|契\_s*経\|中\_s*央\_s*処\_s*理\_s*装\_s*置\|伊\_s*藤\_s*忠\_s*テ\_s*ク\_s*ノ\_s*サ\_s*イ\_s*エ\_s*ン\_s*ス\|分\_s*類\|ス\_s*リ\_s*ー\_s*ズ\|範\_s*疇\|ト\_s*ラ\_s*ン\_s*プ\|c\_s*\%(e\_s*n\_s*t\_s*i\|r\_s*e\_s*s\_s*c\)\|水\_s*[鶏母夫手晶]\|複\_s*雑\_s*命\_s*令\_s*セ\_s*ッ\_s*ト\_s*計\_s*算\_s*機\|サ\_s*\%(ン\_s*チ\_s*ー\_s*ム\|エ\_s*ラ\|イ\_s*\%(ト\_s*カ\_s*イ\_s*ン\|ラ\_s*ス\|ク\_s*\%([ルロ]\|リ\_s*\%(ン\|ッ\_s*ク\)\)\|ボ\_s*\%(ウ\_s*ズ\|ー\_s*グ\)\|バ\_s*\%(ー\|ネ\_s*テ\_s*ィ\_s*\%(ッ\_s*ク\|ク\_s*ス\)\)\|リ\_s*ュ\_s*ー\_s*ム\|ダ\_s*ー\|フ\_s*ァ\_s*ー\|ネ\_s*リ\_s*ア\)\|ー\_s*\%(テ\_s*ィ\_s*フ\_s*ィ\_s*ケ\_s*ー\_s*シ\_s*ョ\_s*ン\|ク\_s*ル\|カ\_s*\%(ス\|ム\_s*ス\_s*ク\_s*\%(ラ\_s*イ\_s*ブ\|リ\_s*プ\_s*シ\_s*ョ\_s*ン\)\)\|キ\_s*\%(ュ\_s*\%(ラ\_s*ー\|レ\_s*ー\_s*\%(タ\_s*ー\|シ\_s*ョ\_s*ン\)\)\|ッ\_s*ト\)\)\)\|マ\_s*ド\_s*ラ\_s*ス\|茶\_s*筅\|ケ\_s*\%([月アイ]\|フ\_s*ェ\_s*ウ\_s*ス\|プ\_s*ス\_s*ト\_s*ラ\_s*[ムル]\|チ\_s*ャ\_s*ッ\_s*プ\|ン\_s*\%(タ\_s*ウ\_s*\%(リ\|ロ\_s*ス\)\|ブ\_s*リ\_s*ッ\_s*ジ\)\|ー\_s*\%([キジブプスン]\|ク\_s*ウ\_s*ォ\_s*ー\_s*ク\|ソ\_s*ン\|タ\_s*リ\_s*ン\_s*グ\|パ\_s*\%(ー\|ビ\_s*リ\_s*テ\_s*ィ\)\|シ\_s*ン\_s*グ\|リ\_s*ー\)\|ル\_s*\%(ト\|ベ\_s*ロ\_s*ス\|テ\_s*ィ\_s*ッ\_s*ク\|ビ\_s*\%(ム\|ー\_s*ニ\)\)\|ミ\_s*\%(カ\_s*ル\|ス\_s*ト\)\)\|キ\_s*\%(ヤ\_s*ノ\_s*ン\|プ\_s*ロ\_s*ス\|ケ\_s*ロ\|ュ\_s*\%([イーア]\|ヴ\_s*ェ\|ビ\_s*\%(ズ\_s*ム\|ス\_s*ム\)\|ロ\_s*\%(ス\|ッ\_s*ト\)\|レ\_s*ー\_s*タ\_s*ー\|ラ\_s*ソ\_s*ー\|リ\_s*\%(ー\|ウ\_s*ム\|ア\_s*ス\|オ\_s*シ\_s*テ\_s*ィ\)\)\|ア\_s*\%(ラ\|ー\_s*ラ\|ン\_s*テ\_s*ィ\)\|チ\_s*ン\|ト\_s*サ\_s*ン\|メ\_s*ラ\|マ\_s*イ\_s*ラ\|ッ\_s*カ\|レ\_s*ー\_s*ト\|ャ\_s*\%([ドパスブンラ]\|デ\_s*\%(ィ\|ラ\_s*ッ\_s*ク\)\|ビ\_s*\%([アンネ]\|テ\_s*\%(ィ\|ー\_s*シ\_s*ョ\_s*ン\)\)\|ベ\_s*ツ\|バ\_s*\%(リ\_s*[エア]\|レ\_s*ー\)\|ト\_s*ル\|シ\_s*ー\|サ\_s*リ\_s*ン\|タ\_s*ピ\_s*ラ\|ピ\_s*\%(ト\_s*ル\|タ\_s*\%(ル\|リ\_s*ズ\_s*ム\)\)\|プ\_s*\%(ラ\|シ\_s*ョ\_s*ン\|テ\_s*ン\|チ\_s*ャ\)\|セ\_s*\%(イ\|ロ\_s*ー\_s*ル\)\|ッ\_s*\%([ツトチプ]\|サ\_s*バ\|ス\_s*ル\|シ\_s*\%(ュ\|ン\_s*グ\|ャ\_s*\%(ー\|ブ\_s*ル\)\)\)\|ニ\_s*\%(オ\_s*ン\|ス\_s*タ\_s*ー\)\|ナ\_s*ル\|ノ\_s*\%(ン\|ー\_s*ラ\|ピ\_s*ー\)\|ミ\_s*ソ\_s*ー\_s*ル\|メ\_s*\%(ル\|ロ\_s*\%(ン\|ッ\_s*ト\)\)\|ロ\_s*\%(ル\|ウ\_s*ェ\_s*イ\|リ\_s*ン\|ラ\_s*イ\_s*[ンナ]\|ッ\_s*ト\)\|レ\_s*ッ\_s*ト\|リ\_s*\%([コーア]\|バ\_s*ー\|ブ\_s*レ\_s*ー\_s*シ\_s*ョ\_s*ン\|ッ\_s*ジ\|ン\_s*グ\)\|ズ\_s*ム\)\|リ\_s*\%(コ\|ス\_s*ト\|シ\_s*タ\_s*ン\)\)\|総\_s*角\|チ\_s*\%([タリンマア]\|ワ\_s*ワ\|ラ\_s*ー\|ル\_s*ド\|ム\_s*ニ\_s*ー\|コ\_s*リ\|ッ\_s*\%([プク]\|テ\_s*リ\_s*オ\|タ\_s*ゴ\_s*ン\)\|キ\_s*\%(ン\|ー\_s*タ\)\|ュ\_s*\%(ア\_s*ブ\_s*ル\|ー\_s*イ\_s*ン\_s*ガ\_s*ム\)\|ー\_s*\%([フトプクズ]\|パ\_s*ー\|タ\_s*ー\)\|ェ\_s*\%([ロスカコアン]\|ザ\_s*\%(レ\|ー\_s*レ\)\|ル\_s*\%(ニ\_s*ー\|シ\_s*ー\|ノ\_s*ブ\_s*イ\_s*リ\)\|リ\_s*\%(ー\|ス\_s*ト\|ッ\_s*シ\_s*ュ\|モ\_s*ヤ\)\|レ\_s*\%(ス\_s*タ\|ン\_s*コ\_s*フ\)\|ビ\_s*チ\_s*ェ\_s*フ\|ダ\_s*ー\|チ\_s*ェ\_s*ン\|ッ\_s*\%([トクカ]\|キ\_s*ン\_s*グ\)\|イ\_s*\%([スン]\|ニ\_s*ー\|サ\_s*ー\|シ\_s*ン\_s*グ\)\|ー\_s*\%(ン\|ザ\_s*レ\|ホ\_s*フ\)\)\|ャ\_s*\%([オフドインコリウ]\|ツ\_s*ネ\|ク\_s*ラ\|プ\_s*タ\_s*ー\|パ\_s*テ\_s*ィ\|ペ\_s*\%(ル\|ッ\_s*ク\)\|チ\_s*ャ\|ネ\_s*\%(ル\|ラ\_s*ー\|リ\_s*ン\_s*グ\)\|ッ\_s*\%([クト]\|ピ\_s*ー\|プ\_s*\%(マ\_s*ン\|リ\_s*ン\)\)\|タ\_s*\%(レ\_s*[イー]\|リ\_s*ン\_s*グ\)\|ル\_s*マ\_s*ー\_s*ス\|レ\_s*ン\_s*ジ\|モ\_s*ロ\|ー\_s*\%([チタトムジ]\|ビ\_s*ル\|ミ\_s*\%(ー\|ン\_s*グ\)\|リ\_s*ー\|ル\_s*\%([ズス]\|ト\_s*ン\)\)\|ラ\_s*ン\_s*ゴ\)\|ョ\_s*\%([ンコ]\|イ\_s*ス\|ム\_s*ス\_s*キ\_s*ー\|ー\_s*\%(ク\|サ\_s*ー\|カ\_s*ー\|キ\_s*ン\_s*グ\)\|ゴ\_s*リ\|ッ\_s*\%(プ\|ピ\_s*ー\|パ\_s*ー\)\|リ\_s*ソ\)\)\|座\_s*標\|喜\_s*劇\|互\_s*換\|共\_s*\%(通\|産\_s*主\_s*義\_s*者\)\|継\_s*続\|ツ\_s*\%(ァ\_s*ー\|ィ\_s*リ\_s*ル\|ェ\_s*\%(ー\|ル\_s*ニ\_s*ー\|ラ\_s*ン\)\)\|炭\_s*素\)', - \ 'D' : '\%([共吃巴鑼錚鶏鳥響嫩緞丼呑曇貪鈍肭遠蚌溝鄰隣塢床処所年時鯲鰍鰌得徳讀獨髑毒読僮働萄桐閙ゞ嫐橈儂陶耨撓通鐃藤々恫瞳憧鬧⇔≡撞慟導〃仝洞堂瞠獰艟胴銅童動同道何弩怒退呶度堵奴解留融録取駑孥努戸止土ど瓰竕凸竍籵瓧禰泥捏溺寺鈿佃甸黏沺畋淀棯澱臀傳殿電照でヅ鶴辛強妻綱勤伝包筒做造作尽机月冢塚遣疲使突吊付漬津詰図積釣連づヂ中近力地痔持ぢ種棚倒濃彩逹畳諾゛濁玉默球魂騙谷館舘点岳嶽竹高凧蛸怛妲獺奪脱廼迺弟岱臺餒梯戴平内醍橙][題>≧第台代大鱈頼便誰樽懶怠灘斷椴黙旦煖彈暖談段断檀団團壇弾男抱舵橢炊佗堕荼拿打娜蛇楕陏駄唾拏雫沱立儺柁鴕溜妥朶陀墮駝出垂惰懦建兌澑田騨だ直◎.丶、,‥\.・…$“”↓†‡―┤達℃°独Dド÷◇◆ダジДデΔδд∂D]\|ッ\_s*\%(ト\_s*゙\|テ\_s*゙\|ツ\_s*゙\|チ\_s*゙\|タ\_s*゙\)\|ッ\_s*[ドデヅヂダ]\|っ\_s*[どでづぢだ]\|ト\_s*゙\|都\_s*々\_s*逸\|褞\_s*袍\|S\_s*a\_s*u\_s*r\_s*u\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|C\_s*\%(u\|o\_s*p\_s*p\_s*e\_s*r\)\|満\_s*天\_s*星\|豆\_s*腐\|如\_s*何\|テ\_s*゙\|刑\_s*事\|粘\_s*葉\_s*装\|手\_s*間\|木\_s*偶\|丁\_s*[稚抹]\|蝸\_s*牛\|ツ\_s*゙\|頭\_s*[腦痛]\|チ\_s*゙\|調\_s*子\|茶\_s*碗\|知\_s*恵\|忸\_s*怩\|タ\_s*゙\|忠\_s*幸\|壁\_s*蝨\|伊\_s*達\|山\_s*車\|韃\_s*靼\|提\_s*婆\_s*達\_s*多\|太\_s*\%([刀宰鼓]\|平\_s*広\|上\_s*天\_s*皇\|政\_s*\%(官\|大\_s*臣\)\)\|乃\_s*[公毅]\|体\_s*操\|葮\_s*竹\|演\_s*\%(し\_s*物\|繹\_s*デ\_s*ー\_s*タ\_s*ベ\_s*ー\_s*ス\)\|コ\_s*ロ\_s*ン\_s*ビ\_s*ア\|ズ\_s*\%(ロ\_s*ー\_s*ス\|ッ\_s*ク\)\|イ\_s*ル\_s*カ\|医\_s*者\|博\_s*士\|文\_s*書\|行\_s*列\_s*式\|発\_s*見\_s*す\_s*る\|ハ\_s*ー\_s*グ\|拒\_s*否\_s*さ\_s*れ\_s*た\|破\_s*壊\_s*\%(者\|す\_s*る\)\|消\_s*滅\_s*子\|記\_s*述\_s*子\|十\_s*進\_s*数\|ゼ\_s*ッ\_s*ケ\_s*ン\|復\_s*号\_s*化\|省\_s*略\|金\_s*剛\_s*石\|d\_s*\%(b\_s*m\_s*s\|e\_s*c\_s*\%([ia]\|r\_s*e\_s*s\)\|o\_s*u\_s*b\_s*l\_s*e\_s* \_s*i\_s*n\_s*c\_s*o\_s*m\_s*e\_s*,\_s* \_s*n\_s*o\_s* \_s*k\_s*i\_s*d\_s*s\|i\_s*m\)\|辞\_s*書\)', - \ 'E' : '\%([エ瘧腮偉鰓衿撰襟掾圜鹽垣檐媛爰捐¥覃黶篶湲蜒讌簷櫞悁渊轅渕閼魘薗艷鳶鴛焉嫣宛閻衍臙閹槐⌒援筵淹厭寃淵掩烟嚥圓沿宴蜿奄袁煙艶焔炎怨鉛園苑偃冤延婉遠堰燕演塩円縁刔刳抉猿狗描択鰕箙蛯蝦狄貊胡戎夷乢靨鉞噎戉咽粤桟悦閲謁奕伯懌亦蜴掖繹越役驛疫易益腋駅液殪纓裔曵頴洩瓔潁贏珱衡娃翳營瑩咏楹塋蠑瀛睿泳縊榮瑛暎曳盈郢影詠穎嬰鋭叡映営栄永衞衛得絵荏懷畫枝江繪衣猥慧惠獲回依會重柄杖餌榎画恵笑会囘選え━─┳┬┯┰┸┷┻┴Фф=⇔≡∈∋РрМмН→英∃式!ΗηEсСлЛΕЭεэエE]\|A\_s*\%([面判型級]\|V\_s*\%(機\_s*器\|女\_s*優\)\|B\_s*\%(型\|C\_s*順\)\)\|A\_s*\%([面判型級]\|V\_s*\%(機\_s*器\|女\_s*優\)\|B\_s*型\)\|M\_s*サ\_s*イ\_s*ズ\|M\_s*サ\_s*イ\_s*ズ\|豪\_s*物\|L\_s*\%(サ\_s*イ\_s*ズ\|L\_s*サ\_s*イ\_s*ズ\)\|L\_s*\%(サ\_s*イ\_s*ズ\|L\_s*\%(サ\_s*イ\_s*ズ\|教\_s*室\)\)\|羨\_s*道\|豌\_s*豆\|C\_s*\%(l\|h\_s*l\_s*o\_s*r\_s*i\_s*n\_s*e\)\|似\_s*\%(非\|而\_s*非\)\|桧\_s*原\_s*湖\|烏\_s*帽\_s*子\|吉\_s*方\|胞\_s*衣\|淮\_s*南\_s*子\|埃\_s*及\|干\_s*支\|岐\_s*路\|支\_s*繞\|壊\_s*[疽死]\|葡\_s*萄\|蛭\_s*子\|愛\_s*\%([理莉媛]\|知\_s*川\)\|N\_s*極\| \_s*n\_s* \_s*角\_s*形\|N\_s*\%([個極響]\|次\_s*元\|H\_s*K\_s*ホ\_s*ー\_s*ル\)\|斉\_s*魚\|兄\_s*鼓\|ヱ\_s*ス\_s*ビ\_s*ー\_s*食\_s*品\|S\_s*\%([波字席極]\|サ\_s*イ\_s*ズ\|N\_s*比\|F\_s*小\_s*説\)\|S\_s*\%([式極]\|サ\_s*イ\_s*ズ\|N\_s*比\|F\_s*小\_s*説\)\|穢\_s*[多土]\|X\_s*\%([軸脚]\|O\_s*醤\|染\_s*色\_s*体\)\|X\_s*\%([軸脚線]\|染\_s*色\_s*体\)\|海\_s*\%(老\|鷂\_s*魚\)\|帝\_s*都\_s*高\_s*速\_s*度\_s*交\_s*通\_s*営\_s*団\|ワ\_s*ー\_s*ク\_s*ス\_s*テ\_s*ー\_s*シ\_s*ョ\_s*ン\|欧\_s*\%(州\|羅\_s*巴\)\|歐\_s*\%(州\|羅\_s*巴\)\|ヨ\_s*ー\_s*ロ\_s*\%(ピ\_s*ア\_s*ン\|ッ\_s*パ\)\|ユ\_s*\%(ア\_s*ン\|ウ\_s*ロ\_s*ピ\_s*ウ\_s*ム\|リ\_s*イ\_s*カ\|ー\_s*\%(ロ\|ノ\_s*ス\|ニ\_s*ス\|ジ\_s*\%(ン\|ー\_s*ン\)\|ド\_s*ラ\|レ\_s*カ\|ラ\_s*\%(ス\|シ\_s*ア\)\|フ\_s*\%(ラ\_s*テ\_s*ス\|ォ\_s*\%(リ\_s*ア\|ニ\_s*ア\_s*ム\)\)\|ク\_s*リ\_s*ッ\_s*ド\|カ\_s*リ\)\)\|編\_s*集\|強\_s*調\|e\_s*m\_s*a\_s*c\_s*s\|電\_s*子\_s*メ\_s*\%(イ\_s*ル\|ー\_s*ル\)\|発\_s*展\|評\_s*価\_s*す\_s*る\|符\_s*号\_s*化\|百\_s*科\_s*事\_s*典\|カ\_s*プ\_s*セ\_s*ル\_s*化\|オ\_s*\%(ー\|イ\_s*\%(ラ\_s*ー\|ゲ\_s*ン\)\)\|実\_s*行\|拡\_s*張\|例\_s*外\|感\_s*嘆\_s*符\|ア\_s*\%([ンイ]\|ニ\_s*ド\|ー\_s*\%([マスル]\|ウ\_s*ィ\_s*ン\|ラ\_s*ン\|ニ\_s*ー\|ネ\_s*ス\_s*ト\|ミ\_s*ン\|シ\_s*ー\|リ\_s*ー\)\)\|設\_s*立\|e\_s*\%(x\_s*a\|コ\_s*マ\_s*ー\_s*ス\|ラ\_s*ー\_s*ニ\_s*ン\_s*グ\)\|イ\_s*\%([ブヴアラー]\|ジ\_s*ェ\_s*ク\_s*ト\|フ\_s*ェ\_s*ク\_s*[トタ]\|コ\_s*\%(ー\_s*ル\|ラ\_s*イ\_s*[ズザ]\)\|プ\_s*シ\_s*ロ\_s*ン\|ミ\_s*ュ\_s*レ\_s*\%(ー\_s*[トタ]\|イ\_s*タ\)\|ベ\_s*ン\_s*\%(ト\|タ\_s*ー\)\|ノ\_s*ッ\_s*ク\|ネ\_s*ー\_s*ブ\_s*ル\|ギ\_s*リ\_s*ス\|ン\_s*グ\_s*\%(ラ\_s*ン\_s*ド\|リ\_s*ッ\_s*シ\_s*ュ\)\|ッ\_s*チ\|ヤ\_s*\%(ー\|リ\_s*ン\_s*グ\|フ\_s*ォ\_s*ン\|ホ\_s*ン\)\|グ\_s*ジ\_s*\%(ッ\_s*ト\|ス\_s*ト\)\|ク\_s*\%(ス\|ア\_s*リ\_s*テ\_s*ィ\)\|ス\_s*フ\_s*ァ\_s*ハ\_s*ン\|リ\_s*[ヤア]\|レ\_s*\%(ー\_s*\%(ス\|ザ\_s*ー\|サ\_s*ー\)\|イ\_s*\%(ン\|ザ\_s*ー\|サ\_s*ー\)\|ブ\_s*ン\)\)\|ウ\_s*\%(ー\|ジ\_s*ェ\_s*ー\_s*ヌ\)\)', - \ 'F' : '\%([梺麓冬汾枌濆′吩賁刎氛雰糞褌忿墳吻紛焚扮分粉舊旧顫揮故震篩奮隹古衾襖贅燻筆鰒総惣總絃房閼鬱塞鞴章郁史艦簡札耽鰾吭笛文罧節苳蕗淦舩艙舷舟船肥太懷懐≦≠≫<>≧≪渊淵渕縁葢盖再弍蓋双藤潭蒸鯊鱶楓殕瘋封諷黻怫祓彿髴拂憤恚慍二払沸拒防蔔輹愎蝠茯箙腓⊃⊇膨脹嚢梟袋含⊂⊆袱覆輻腹幅復馥服副複福誣孚普俯更膚腐坿狂履不増拊鯆布怖赴桴巫傅婦付訃賻振負蜉罘老附吹生経觸夫俘父臥践咐敷踏斧溥阜葺深仆譜符麩匐腑榑芙賦殖冨触孵麸柎府舗噴鋪降蹈風觝埠拭鮒郛伏俛經歩苻斑畉扶趺芬呎フ飜翻ふ鉄♀∀¶富⌒金佛仏偽誤F♭弗浮ФΦφфフF]\|ッ\_s*フ\|ッ\_s*フ\|っ\_s*ふ\|鞦\_s*韆\|睾\_s*丸\|陰\_s*嚢\|乱\_s*吹\|相\_s*応\|E\_s*u\_s*p\_s*t\_s*e\_s*l\_s*e\_s*a\_s*c\_s*e\_s*a\_s*e\|回\_s*回\_s*教\|書\_s*司\|図\_s*書\_s*寮\|海\_s*蘿\|補\_s*\%(任\|陀\_s*[洛落]\)\|雲\_s*脂\|頭\_s*垢\|鳧\_s*鐘\|菜\_s*蕗\|款\_s*冬\|蒲\_s*団\|M\_s*y\_s*r\_s*t\_s*a\_s*l\_s*e\_s*s\|釜\_s*[中山]\|雙\_s*葉\|B\_s*u\_s*d\_s*d\_s*l\_s*e\_s*j\_s*a\_s*c\_s*e\_s*a\_s*e\|渓\_s*井\|G\_s*e\_s*r\_s*a\_s*n\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|2\_s*[人つ日]\|宿\_s*酔\|2\_s*\%([人つ日]\|通\_s*り\)\|□\_s*□\_s*□\|△\_s*△\_s*△\|×\_s*×\_s*×\|○\_s*○\_s*○\|帛\_s*紗\|河\_s*豚\|比\_s*律\_s*賓\|I\_s*r\_s*o\_s*n\|極\_s*東\_s*放\_s*送\|論\_s*理\_s*式\|形\_s*式\|ホ\_s*\%(ワ\_s*イ\_s*エ\|イ\_s*ル\|ル\_s*\%(マ\_s*\%(ン\_s*ト\|リ\_s*ン\)\|ム\_s*ア\_s*\%(ミ\_s*ド\|ル\_s*デ\_s*ヒ\_s*ド\)\)\)\|一\_s*杯\|関\_s*数\|機\_s*能\|汎\_s*関\_s*数\|修\_s*正\|ヒ\_s*\%(レ\|ュ\_s*ー\_s*[ズム]\)\|1\_s*\%(/\_s*f\_s*ゆ\_s*ら\_s*ぎ\|s\_s*t\)\|第\_s*1\_s*要\_s*素\|失\_s*敗\|ハ\_s*\%(エ\|ン\_s*ブ\_s*ル\|ロ\_s*ン\)\|柔\_s*軟\_s*な\|周\_s*波\_s*数\|エ\_s*フ\|f\_s*\%(e\_s*m\_s*t\_s*o\|o\_s*\%(n\_s*t\_s*-\_s*f\_s*a\_s*m\_s*i\_s*l\_s*y\|r\_s*t\_s*e\)\)\)', - \ 'G' : '\%([頃殺米諢魂權艮勤権鮴好蓙応駒若亊事琴毎如鏝埖込塵氷聲肥声腰拵心恋戀国石獄濠盒噛嗷敖軣哈壕熬刧遨拷囂轟毫傲鼇郷劫≡号豪剛梧后冴後吾寤宕珸茣児伍誤5極醐碁檎牾蜈唔篌庫娯悟忤呉期齬5互超五晤越子炬護兒瑚午沍ご〓郤鬩戟屐隙檄闃鷁撃激劇皃黥貎霓麑倪囈猊迎鯨芸藝齧囓蘖呟愿監芫痃广彦軒舷眩源儼衒絃弦験言諺現限幻玄減原蹴偈毛睨觧解実下拐夏げ靴腐種草口薬糞癖茱胡萸串嵎藕遇宮寓隅偶黒栗倉鞍蔵位昏麕羣郡群軍苦周包車狂食颶壷暮愚弘虞倶麌禺具惧壺組狗ぐ衣君嫌裂際牛崟憖斤垠岑吟銀圄禦圉馭魚嶷閠玉漁繞堯尭御曉嶢澆翹痙蟯驍僥仰業暁凝行謔瘧虐逆気義偽技切妓巍犠誼宜伎祁疑萓礒羲僞城蟻斬決擬沂議儀嶬艤着木曦犧欺戲魏祇戯ぎ川巛乾革皮側通殻辛絡柄烏鴉頷嚴阮鳫厳貫嵒偐巖岸厂⊃贋龕強翫岩鴈丸雁玩癌元願眼巌含頑上髮紙神髪鐘金係歸皈肯帰返潟方固語刀難型形鰹歹垳顔顏鎌窯蟇釜蒲蟹傘笠重號垣樫頭月合諤樂鍔壑鄂斈學齶萼愕嶽咢鰐額岳顎楽学既礙涯剴乂垓葢劾盖愾磑睚漑崕亥崖啀艾駭皚該咳階孩芥碍害鎧街凱慨概蓋骸外代峩狩我ヶ鵞駕訝変刈掛牙娥替畫駆ケ俄哦借呀果臥雅買蛾訛換河峨莪書芽貸衙画ヵ伽賀勝餓鵝が≫>G瓦≧ガゴχΕΗΣυΙΛαΨζρΒΝιΦφτλΠονψωΚΔΡδΤβΘΟπεΧΑΞσθηκΖΜξμΥΩギグゲгΓγГG]\|ッ\_s*\%(コ\_s*゙\|ケ\_s*゙\|ク\_s*゙\|キ\_s*゙\|カ\_s*゙\)\|ッ\_s*[ゴゲグギガ]\|っ\_s*[ごげぐぎが]\|コ\_s*゙\|小\_s*屋\|蒙\_s*御\_s*免\|巨\_s*頭\_s*鯨\|欣\_s*求\|独\_s*楽\|P\_s*e\_s*r\_s*s\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\|瞽\_s*女\|歩\_s*行\_s*虫\|向\_s*拝\|皐\_s*月\|穀\_s*潰\|寄\_s*居\_s*虫\|降\_s*魔\|格\_s*\%([間縁]\|天\_s*井\)\|恒\_s*河\_s*沙\|江\_s*\%([津湖商州]\|談\_s*抄\)\|豆\_s*[油汁]\|ケ\_s*゙\|蚰\_s*蜒\|景\_s*色\|化\_s*粧\|鴃\_s*舌\|稽\_s*古\|懸\_s*魚\|還\_s*[向俗]\|拳\_s*[万固骨]\|喧\_s*嘩\|顕\_s*界\|ク\_s*゙\|救\_s*世\_s*菩\_s*薩\|工\_s*合\|供\_s*[奉祭香進]\|紅\_s*蓮\|キ\_s*゙\|毬\_s*杖\|岐\_s*\%([南阜]\|セ\_s*ン\)\|棋\_s*将\_s*谷\|求\_s*\%([法道肥]\|不\_s*得\_s*苦\|聞\_s*持\_s*法\)\|A\_s*g\|S\_s*\%(c\_s*r\_s*o\_s*p\_s*h\_s*u\_s*l\_s*a\_s*r\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\|y\_s*m\_s*p\_s*e\_s*t\_s*a\_s*l\_s*a\_s*e\|i\_s*l\_s*v\_s*e\_s*r\)\|希\_s*臘\|杏\_s*葉\|餃\_s*子\|刑\_s*部\|カ\_s*゙\|搦\_s*み\|鑑\_s*真\|仮\_s*名\|蝦\_s*[蟆蟇]\|T\_s*y\_s*p\_s*a\_s*l\_s*e\_s*s\|鉤\_s*状\_s*部\|菓\_s*子\|甲\_s*斐\|会\_s*社\|g\_s*\%(i\_s*g\_s*a\|h\_s*o\_s*s\_s*t\_s*s\_s*c\_s*r\_s*i\_s*p\_s*t\)\|ヌ\_s*ー\|ニ\_s*ュ\_s*ー\_s*ズ\|g\_s*n\_s*u\_s*s\|ノ\_s*ー\_s*ム\|総\_s*司\_s*令\_s*部\|連\_s*合\_s*国\_s*軍\_s*総\_s*司\_s*令\_s*部\|ヒ\_s*ル\|ク\_s*ッ\_s*パ\|硝\_s*子\|ハ\_s*ボ\_s*ロ\_s*ー\_s*ネ\|瞿\_s*曇\|エ\_s*ー\_s*テ\_s*ボ\_s*リ\|ヨ\_s*ー\_s*テ\_s*ボ\_s*リ\|イ\_s*ェ\_s*\%(ー\_s*テ\_s*ボ\_s*リ\|テ\_s*ボ\_s*リ\)\|得\_s*る\|ヘ\_s*\%(ラ\_s*ル\_s*ド\|ル\_s*マ\_s*ン\)\|ド\_s*イ\_s*ツ\|成\_s*吉\_s*思\_s*汗\|ゼ\_s*\%(ラ\_s*\%(チ\_s*ン\|ニ\_s*ウ\_s*ム\)\|ム\_s*ク\_s*リ\_s*ッ\_s*プ\|ノ\_s*ア\|ン\_s*ト\_s*ル\_s*マ\_s*ン\|ネ\_s*\%(コ\_s*ン\|ラ\_s*\%(ル\|リ\_s*ス\_s*ト\)\)\)\|大\_s*\%(蚊\|学\_s*院\_s*生\)\|ジ\_s*\%([ムルジグノナオンー]\|プ\_s*シ\_s*ー\|ア\_s*ン\|イ\_s*ド\|ッ\_s*ド\|タ\_s*ン\|ゼ\_s*ル\|リ\_s*ア\_s*ン\|レ\_s*ッ\_s*ト\|ゴ\_s*ロ\|ラ\_s*\%(フ\|ル\_s*\%(ド\|デ\_s*ィ\_s*ー\_s*ノ\)\)\|ロ\_s*\%(ー\|ン\_s*ド\)\|バ\_s*ン\_s*シ\_s*ー\|ブ\_s*\%(リ\|ラ\_s*ル\_s*タ\_s*ル\)\|ベ\_s*\%(ル\_s*ナ\_s*ウ\|レ\_s*リ\_s*ン\)\|ネ\_s*ッ\_s*ト\|ョ\_s*\%(ッ\_s*ト\|ヴ\_s*ァ\_s*ン\_s*[ニナ]\|バ\_s*ン\_s*[ニナ]\|コ\_s*\%(ー\_s*ソ\|ン\_s*ダ\)\|ル\_s*\%(ジ\|ダ\_s*ー\_s*ノ\)\|ー\_s*\%(ジ\|ゼ\_s*ッ\_s*ト\)\)\|ャ\_s*\%(ン\|イ\_s*\%(ロ\|ル\_s*ズ\|ア\_s*ン\_s*[ツト]\)\|コ\_s*\%(モ\|メ\_s*ッ\_s*テ\_s*ィ\)\|ー\_s*マ\_s*ン\)\|ニ\_s*ー\|ュ\_s*\%([レネ]\|ゼ\_s*ッ\_s*ペ\|リ\_s*\%(ア\|ー\_s*ニ\|エ\_s*ッ\_s*タ\)\|ヌ\_s*\%(ヴ\_s*ィ\_s*エ\_s*ー\_s*ヴ\|ビ\_s*エ\_s*ー\_s*ブ\)\)\|ェ\_s*\%([リルフムマネ]\|ス\_s*チ\_s*ャ\_s*ー\|ロ\_s*ニ\_s*モ\|ラ\_s*\%(ー\_s*[トルド]\|ル\_s*\%(ド\|デ\_s*ィ\_s*ン\|ダ\_s*イ\_s*ン\)\)\|ミ\_s*ニ\|ニ\_s*ー\|ノ\_s*\%([アバ]\|ヴ\_s*ァ\|ワ\_s*ー\_s*ズ\|サ\_s*イ\_s*ド\)\|ン\_s*\%(マ\|ト\_s*\%(ル\|リ\_s*[ィー]\)\|ダ\_s*ー\)\)\)\)', - \ 'H' : '\%([ホ洞袰亡滅幌濠壕畚笨略艢檣炎焔仄朖朗塊程施滸殆幾缶熱解屠榾螢蛍骨細本※*糒恣縦擅星戟戈桙綻祠誇埃矛鉾堀頬褓鴇枋峯磅鞄峰垉篷勹皰朴抔怦棒泙棚堋呆豐麭膀舫弸蔀袍苞葬琺寳炮鵬寶繃鋒魴髣逢朋烹鳳彗箒俸焙蓬烽幇抱崩訪泡澎彷縫捧萌萠彭包胞倣邦飽庖疱奉豊硼報砲宝攴攵瀑蹼樮北哺欲譽餔保抛浦誉掘脯賞黼恍堡輔穗襃葆彫穂畝吼舖耄葡褒惚咆埔哮捕逋ほヘ謙遜篦廰廳貶胼諞篇駢褊蝙翩變∂遍返騙編扁変暼丿諛諂隔凹臍巳蛇蒂蔕瓸竡粨癖躄甓闢璧劈碧壁竝餅娉塀病閇聘坪嬖幤箆蔽并陛屏炳斃瓶幣弊併敝閉並屁折邉舳辺歴圧戸減邊へフ梺麓冬♭汾枌濆′吩賁氛雰糞褌忿墳吻紛焚扮分粉舊旧顫揮故震篩奮隹古衾襖贅燻鰒陰総惣總絃房閼鬱塞章郁艦簡補札耽鰾吭笛芬呎文罧節苳蕗淦舩艙舷舟船蒲懷懐≦≫>≧≪渊淵渕縁葢盖弍蓋双B藤潭蒸鱶楓殕瘋封諷黻怫彿髴佛憤恚慍仏F弗沸Φφ拒防蔔輹愎蝠茯箙⊃⊇嚢梟袋含⊂⊆袱覆輻復馥副複福誣孚普俯更腐坿狂不増拊鯆怖赴桴巫傅婦付訃賻振負蜉罘附吹経觸夫俘父臥践咐敷踏斧溥阜葺深仆譜符麩匐榑芙賦殖冨触孵麸柎府舗噴鋪降蹈風觝埠拭鮒郛伏俛經歩富苻畉扶趺ふヒ鶸禀蘋彬斌嬪繽殯賓擯牝貧頻瀕稟品葫怯晝飜蒜蛭昼綬胙紐鰭∝片衡鮃閃鵯辟百媛姫尋擴仭太仞展宥絋拡拓拾祐恕紘煕泰熙寛洋弘宏啓裕浩廣広冰雹俵飃凭冫髟彪驫飆馮殍飄豹漂驃慓剽嫖兵票憑評標平表燧老拈捫撚捻歪籤籖柊魃旱秀跪膝蜩羆佗攣−低隙閑暇雛髯鬚髭¬蹄潛濳潜顰密窃鬻提瓢蠡瓠匏央恒壽廂尚寿久蟆率痙蟇丙丁孤史女獨独稘斎斉均倫準等≠單偏単他仁瞳人11柆蔆拉杓柄犇◇◆菱醢醤曾蘖彦酷漬浸鶲額聖肱肘熈芒光膕控皹皸響罅僻鰉逼疋蹕畢匹篳棺柩弼櫃謐坤未羊筆必養襞饑「<【(←『左臂轡曳灯緋朏砒火日蜚妣費狒匕泌杼庇悲樋退脾挽痺卑贔紕牽避引菲檜被碑匪裨斐秘豼霏蓖丕批妃髀干昜彼秕氷鄙飛比否碾疲梭披桧魅惹俾鞴冷譬貔乾肥罷痞索扉暃毘轢皮陳鞁祕ひハ布鱧釖鉤蝟梁鍼磔針禳肚腑腸孕原拂祓払遼請温玄腹陽遙悠東遥治春頓鮠捷鶻駿疾囃林隼鈑膰磐樊潘泛畔蟠釆拌笵胖絆氾坂范凡燔楾洪瘢翻板攀゜大伴煩槃袢斑判範藩繙蕃版搬叛班阪般販犯汎帆頒反侍鯊櫨祝?硲間劇激勵烈励速蝿蠅省飯勢彈外弭筈辱逸育毓齦浮阻難掵憚幅巾柞母翅圃旛旙将側旌幟傍働鰰機叩疥畠幡籏畑旗斜鴿再鳩開秦跣膚肌裸弾薑椒壹甫馨壱弌哉一創元始鋼芳夾剪鋏螯挾挟脛萩餞贐離塙英蕚萼衄衂縹譚咄放噺話洟甚鼻華花赱迸奔枦觜艀婢梯燥箸柱走橋匣凾箪筐□繁方運匚筥箱函陌栢魄膊柏亳珀狛佰粕璞蘗岶愽擘箔舶泊搏迫帛拍圖諮測企秤謀量計図儚捗袴伯博墓髮秡癶釟溌肇廿二初椀蓮8♪鉢蜂發髪服半法醗薄白八発霈盃睥擺湃孛裴琲埴碚牌吠拜坏珮旆入沛榛杯悖―廢腓誹徘稗癈肺俳憊輩背鷂胚廃排拝敗灰配蛤濱浜吐食霽恥菠帚杷垪跛耻巴笆履脹葉爆矧帶這撥破嵌霸捌早把刎馳填生簸跳派禿碆羽果覇映晴陂端剥腫匍着穿葩爬歯膨坡佩慙芭刄菷怕榮齒刃播愧暎叭栄玻掃張貼刷羞頗琶は━─┘┛┸┷┻┴┓┐┳┬┯┰┨┫┤┥┼╋╂┿波‐フ★☆非HヒホヘハH]\|ッ\_s*[ホヘフヒハ]\|ッ\_s*[ホヘフヒハ]\|っ\_s*[ほへふひは]\|寄\_s*生\|珠\_s*鶏\|混\_s*一\_s*色\|紅\_s*[幇中]\|T\_s*r\_s*i\_s*u\_s*r\_s*i\_s*d\_s*a\_s*l\_s*e\_s*s\|微\_s*[酔笑]\|子\_s*規\|時\_s*鳥\|蜀\_s*魂\|杜\_s*[宇鵑]\|上\_s*枝\|鬼\_s*灯\|酸\_s*漿\|叢\_s*祠\|和\_s*了\|鮑\_s*魚\|謗\_s*法\|黒\_s*子\|部\_s*屋\|竹\_s*\%(畚\|麦\_s*魚\)\|綜\_s*麻\|巻\_s*子\|下\_s*手\|糸\_s*瓜\|h\_s*e\_s*c\_s*t\_s*o\|霹\_s*靂\|c\_s*l\_s*a\_s*u\_s*s\_s*t\_s*r\_s*o\_s*p\_s*h\_s*o\_s*b\_s*i\_s*a\|鞦\_s*韆\|睾\_s*丸\|乱\_s*吹\|相\_s*応\|E\_s*\%(r\_s*i\_s*o\_s*c\_s*a\_s*u\_s*l\_s*a\_s*l\_s*e\_s*s\|u\_s*p\_s*t\_s*e\_s*l\_s*e\_s*a\_s*c\_s*e\_s*a\_s*e\)\|回\_s*\%(鍋\_s*肉\|回\_s*教\)\|書\_s*司\|頭\_s*垢\|鳧\_s*鐘\|菜\_s*蕗\|款\_s*冬\|f\_s*\%(o\_s*r\_s*t\_s*e\|e\_s*m\_s*t\_s*o\)\|釜\_s*[中山]\|雙\_s*葉\|渓\_s*井\|G\_s*e\_s*r\_s*a\_s*n\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|宿\_s*酔\|△\_s*△\_s*△\|×\_s*×\_s*×\|○\_s*○\_s*○\|河\_s*\%(豚\|底\_s*撈\_s*魚\)\|神\_s*[庫籬]\|肩\_s*巾\|領\_s*巾\|素\_s*見\|曹\_s*白\_s*魚\|枚\_s*[田方]\|敬\_s*昌\|幸\_s*展\|容\_s*靖\|晃\_s*道\|欧\_s*子\|宙\_s*子\|祥\_s*加\|終\_s*日\|翡\_s*翠\|曽\_s*祖\_s*父\|豪\_s*将\|偉\_s*紀\|周\_s*[行男]\|茅\_s*蜩\|向\_s*日\_s*葵\|七\_s*宗\|桶\_s*坂\|永\_s*和\|蟾\_s*蜍\|抽\_s*\%([斗出]\|き\_s*出\_s*し\)\|告\_s*天\_s*子\|雲\_s*[脂雀]\|為\_s*人\|緊\_s*[と々]\|鎮\_s*火\_s*\%(祭\|の\_s*祭\)\|A\_s*\%(s\|r\_s*s\_s*e\_s*n\_s*i\_s*c\|n\_s*g\_s*i\_s*o\_s*s\_s*p\_s*e\_s*r\_s*m\_s*a\_s*e\)\|粃\_s*糠\_s*疹\|只\_s*管\|直\_s*[向走垂隠]\|常\_s*陸\|鹿\_s*尾\_s*菜\|撲\_s*り\_s*倒\|同\_s*胞\|赦\_s*い\|青\_s*春\|哈\_s*爾\_s*浜\|美\_s*佳\|流\_s*行\|勇\_s*[樹人]\|韓\_s*流\|漢\_s*堡\|汗\_s*国\|盤\_s*陀\|R\_s*S\_s*I\|蔓\_s*延\|蝦\_s*虎\_s*魚\|沙\_s*魚\|馬\_s*銜\|狭\_s*間\|南\_s*風\|延\_s*\%(縄\|い\_s*て\)\|義\_s*母\|旅\_s*籠\|N\_s*e\_s*l\_s*u\_s*m\_s*b\_s*o\_s*n\_s*a\_s*c\_s*e\_s*a\_s*e\|黄\_s*[酒櫨]\|土\_s*[方生師]\|嘔\_s*[吐気]\|支\_s*倉\|長\_s*谷\|接\_s*ぎ\_s*合\|纏\_s*頭\|煙\_s*火\|麻\_s*疹\|階\_s*[上子]\|嘴\_s*\%(細\_s*鴉\|太\_s*鴉\)\|学\_s*胤\|2\_s*\%([人つ日]\|通\_s*り\|0\_s*日\)\|2\_s*\%([人つ日]\|0\_s*[歳日]\)\|淡\_s*竹\|8\_s*月\|客\_s*家\|P\_s*\%(t\|o\_s*t\_s*a\_s*m\_s*o\_s*g\_s*e\_s*t\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\|l\_s*a\_s*t\_s*i\_s*n\_s*u\_s*m\)\|海\_s*\%([鞘永蘿星牙]\|拉\_s*爾\|底\_s*撈\_s*月\)\|M\_s*\%(y\_s*r\_s*t\_s*a\_s*l\_s*e\_s*s\|e\_s*r\_s*c\_s*u\_s*r\_s*y\)\|色\_s*調\|呼\_s*和\_s*浩\_s*特\|ウ\_s*ー\_s*ゴ\|ユ\_s*\%(ー\|ペ\_s*ー\_s*ル\|ベ\_s*ー\_s*ル\|イ\_s*ス\_s*マ\_s*ン\_s*ス\|ゴ\_s*ー\|グ\_s*ノ\_s*ー\|マ\_s*ニ\_s*\%(テ\|ス\_s*[トム]\)\)\|現\_s*代\|十\_s*六\_s*進\_s*数\|高\_s*さ\|香\_s*港\|イ\_s*\%(ダ\_s*ル\_s*ゴ\|ス\_s*パ\_s*ニ\_s*ア\|レ\_s*ー\_s*ル\|エ\_s*ロ\)\|オ\_s*\%([ラー]\|ナ\_s*ー\|ノ\_s*レ\|ン\_s*フ\_s*ル\_s*ー\_s*ル\|ネ\_s*\%(ス\_s*\%(ト\|テ\_s*ィ\)\|ゲ\_s*ル\)\|テ\_s*ル\|ル\_s*ガ\_s*ー\|マ\_s*ー\_s*ジ\_s*ュ\)\|ア\_s*\%(ン\_s*\%(リ\|ベ\_s*ー\_s*ル\)\|ネ\_s*ス\_s*ト\|ワ\_s*ー\|ダ\_s*マ\_s*ー\_s*ル\|シ\_s*ェ\_s*ッ\_s*ト\|ビ\_s*タ\_s*シ\_s*オ\_s*ン\|ー\_s*\%(ネ\_s*ス\_s*ト\|ノ\_s*ン\_s*ク\_s*ー\_s*ル\)\)\|エ\_s*\%(デ\_s*ィ\|ン\_s*リ\_s*ケ\|レ\_s*\%(ナ\|ー\_s*ヌ\)\|ロ\_s*イ\_s*ー\_s*ズ\|ク\_s*ト\_s*ル\|ル\_s*\%(ゲ\_s*ラ\|ヴ\_s*ェ\|メ\_s*ス\|マ\_s*ン\|ミ\_s*\%(ッ\_s*ト\|ー\_s*ト\)\|ブ\_s*ラ\_s*ン\|ナ\_s*ン\_s*デ\_s*ス\|キ\_s*ュ\_s*ー\_s*ル\)\|ノ\_s*ク\|ッ\_s*チ\|イ\_s*チ\)\|水\_s*[銀平素]\)', - \ 'I' : '\%([イΗη賤鄙卑苟嫌弥薯妹藷芋夢艷鑪鈩彩鱗色鯆忽綺貸甍応答愈圦杁霪隱蚓寅氤酳胤飮韵尹茵贇蔭婬湮堙廴音飲慇韻咽淫殞姻隕院允殷隠陰窟巌巖頌祝鰛鰮鰯岩磐円¥鼾歪弑弋抱懐肬贅疣狗戌乾犬諱在坐未汝戒誡警縛今Εε曰禾稻員因蝗嘶鰍電引躄誘動忿≦鵤錨碇怒霆雷霹凧桴筏魚S菴庵彌雖家尿荊棘茨祈祷命猯豕古伍乙鎰鴪聿軼樹慈悼愴慯労格到至傷鼬頂戴病徒致鈑痛板柞砂沙些聊潔諍烈功諫勳勲勇漁諌憇=憩粹熱粋憤域閾勢勤忙急磯孰焉湶泉厳何弄苛≧鎔范啀毬訝燻息挑縷絲厭營営愛幼稚緒遑暇糸弌壹肆莓苺櫟著市碑鐓礎甃臀弩石犧牲犠池溢Y佚壱11燠鬻礇毓粥的戦戰軍幾郁育一稲否飯洟位違居姨猗斎偽噫逝医鑄痍委囲云圍ゐ挿炒彙要熨饐醫言矮往詒威懿如僞忌彜煎逶緯韋唯莞淹胃善生恚彝惟以活易蔚為猪衣已倚幃斐移鮪将可偉畏五夷李渭怡貽癒依逸井慰行爲胆射詑矣頤熬萎良凍出椅率好揖肄痿鋳謂帷亥苡意維遺鰄異去堰尉容囗い氷Йй⇒→⊂⊃▼▽伊印入∞吋∈∋∫∬∩IイИΙιи私I]\|E\_s*メ\_s*ー\_s*ル\|灼\_s*然\|祖\_s*谷\|湯\_s*文\_s*字\|文\_s*身\|郎\_s*[女子]\|刺\_s*[青草]\|蕁\_s*麻\|U\_s*r\_s*t\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\|海\_s*[豚参]\|西\_s*表\|鸚\_s*哥\|影\_s*青\|況\_s*ん\_s*や\|所\_s*謂\|D\_s*i\_s*a\_s*p\_s*e\_s*n\_s*s\_s*i\_s*a\_s*l\_s*e\_s*s\|藺\_s*草\|J\_s*u\_s*n\_s*c\_s*a\_s*l\_s*e\_s*s\|田\_s*舎\|膝\_s*行\|十\_s*六\_s*夜\|寝\_s*穢\|英\_s*\%(蘭\|吉\_s*利\)\|斑\_s*鳩\|烏\_s*賊\|玉\_s*筋\_s*魚\|硫\_s*黄\|夜\_s*来\_s*香\|N\_s*a\_s*j\_s*a\_s*d\_s*a\_s*l\_s*e\_s*s\|牛\_s*膝\|稜\_s*威\|常\_s*春\_s*藤\|5\_s*[つ日]\|5\_s*[つ日]\|惡\_s*戲\|甚\_s*振\|潮\_s*来\|悪\_s*戯\|交\_s*喙\|小\_s*魚\|鯨\_s*魚\|細\_s*小\_s*魚\|鶏\_s*魚\|経\_s*緯\|礒\_s*[山田]\|P\_s*\%(o\_s*a\_s*l\_s*e\_s*s\|l\_s*u\_s*m\_s*b\_s*a\_s*g\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\)\|和\_s*泉\|E\_s*\%(A\_s*S\_s*T\|V\_s*E\)\|気\_s*吹\|指\_s*宿\|拠\_s*所\|従\_s*[妹姉弟兄]\|公\_s*孫\_s*樹\|鴨\_s*脚\_s*樹\|G\_s*\%(l\_s*u\_s*m\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\|r\_s*a\_s*m\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\|i\_s*n\_s*k\_s*g\_s*o\_s*p\_s*s\_s*i\_s*d\_s*a\)\|銀\_s*杏\|鳶\_s*尾\|檪\_s*本\|巫\_s*子\|神\_s*巫\|睦\_s*月\|都\_s*方\_s*流\|縊\_s*[殺死首]\|蝟\_s*[集縮]\|埋\_s*け\_s*[火炭]\|許\_s*[婚嫁]\|<\_s*=\_s*=\_s*>\|必\_s*要\_s*十\_s*分\_s*条\_s*件\|ヤ\_s*ン\|日\_s*本\_s*ア\_s*イ\_s*・\_s*ビ\_s*ー\_s*・\_s*エ\_s*ム\_s*株\_s*式\_s*会\_s*社\|国\_s*際\_s*\%(基\_s*督\_s*教\_s*大\_s*学\|標\_s*準\_s*化\_s*機\_s*構\)\|逆\_s*離\_s*散\_s*フ\_s*ー\_s*リ\_s*エ\_s*変\_s*換\|識\_s*別\_s*子\|即\_s*興\_s*曲\|な\_s*ら\_s*ば\|項\_s*目\|逐\_s*次\_s*型\|i\_s*ノ\_s*ー\_s*ド\|i\_s*\%(ア\_s*プ\_s*リ\|P\_s*o\_s*d\|モ\_s*ー\_s*ド\|M\_s*a\_s*c\|ノ\_s*ー\_s*ド\)\|誤\_s*っ\_s*た\|無\_s*\%(花\_s*果\|効\_s*な\)\|帰\_s*納\_s*法\|字\_s*下\_s*げ\|不\_s*\%([可如足]\|充\_s*分\)\|具\_s*体\_s*化\|情\_s*報\|導\_s*入\|整\_s*数\|完\_s*全\|ヨ\_s*\%(ア\_s*ン\|シ\_s*フ\|ー\_s*ド\|ウ\_s*素\)\|ア\_s*\%(イ\|ー\_s*\%(ヴ\_s*ィ\_s*ン\|ビ\_s*ン\)\|ン\_s*\%(プ\_s*ロ\_s*ン\_s*プ\_s*\%(チ\_s*ュ\|テ\_s*ュ\)\|デ\_s*パ\_s*ン\_s*ダ\_s*ン\|フ\_s*ォ\_s*ル\_s*\%(メ\_s*ル\|マ\_s*テ\_s*ィ\_s*ー\_s*ク\)\)\)\)', - \ 'J' : '\%([塩嶋縞島嶌橲衄衂宍竺舳忸軸舌喰食直凝實昵実印尻稔仭糂贐潯儘仞盡刄臣侭恁進訊俥蕁迅刃靱荏甚靭燼櫁樒塵尽尋陣腎壬人敘恕耡汝莇杼茹敍蜍洳舒縟辱褥蓐溽所抒鋤徐序絮叙助釀淨疂絛繞壌諚孃瀞襄仍蟐拯疉讓聶驤生帖仗躡穰乘塲靜繩禳蕘壤遶星滌茸嬲疊如剩娘嬢錠静醸縄女尉饒丈成擾穣烝嫋丞盛場杖條条蒸貞状攘剰畳冗定浄乗情城上常譲濡得戍就嬬鷲竪讐讎懦愀咒聚隼詢徇笋凖盾楯筍篤蓴惇洵淳閏諄恂馴旬荀潤循醇巡遵順准殉純準襦誦需戌朮孰宿塾珠熟恤術述孺呪豎儒綬樹受授壽鞣狃澀揉廿拾縱中從糅从戎澁蹂神汁獸絨縦渋柔什充十獣従住銃重岻除士染時怩至児冶璽只畤侍孳轜耳示次寿辭粫司二祀邇而慈峙爺以地塒珥迩痔死敷恃蒔磁瓷仁字尓焦膩柱似嗣子亊路史餌兒滋仕爾辞弍自茲持寺事知醤鮭搦着惹尺鉐雀寂若弱蛇闍者邪戯麝じ│┃├┝┣┠┏┌.еЕ治Яя日юЮJёЁЙジйJ]\|ッ\_s*シ\_s*゙\|ッ\_s*ジ\|っ\_s*じ\|G\_s*\%(メ\_s*ン\|パ\_s*ン\)\|D\_s*y\|G\_s*\%(メ\_s*ン\|パ\_s*ン\)\|支\_s*度\|試\_s*合\|2\_s*乗\|2\_s*乗\|祖\_s*父\_s*\%(さ\_s*ん\|祖\_s*母\)\|獅\_s*子\|甲\_s*乙\_s*丙\_s*丁\_s*戊\_s*己\_s*庚\_s*辛\_s*壬\_s*癸\|k\_s*\$\_s*_\_s*{\_s*e\_s*f\_s*f\_s*}\_s*\$\|Z\_s*\%(r\|i\_s*r\_s*c\_s*o\_s*n\_s*i\_s*u\_s*m\)\|深\_s*\%(秘\|大\_s*寺\)\|秦\_s*泉\_s*寺\|沈\_s*\%(香\|丁\_s*花\)\|晨\_s*朝\|濁\_s*世\|判\_s*官\|諍\_s*論\|長\_s*夜\|漏\_s*斗\|↑\_s*↓\_s*←\_s*→\|焼\_s*酎\|鐘\_s*石\|橈\_s*脚\_s*類\|承\_s*久\|朱\_s*里\|C\_s*a\_s*b\_s*o\_s*m\_s*b\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|絢\_s*子\|頌\_s*偈\|数\_s*珠\|入\_s*[魂牢来洛院内水棺]\|霜\_s*月\|1\_s*\%(2\|6\_s*進\|0\_s*[進月]\|1\_s*月\|8\_s*禁\)\|師\_s*走\|極\_s*月\|紐\_s*帯\|1\_s*\%(0\|1\_s*月\|8\_s*禁\|2\_s*月\)\|シ\_s*゙\|爪\_s*哇\|射\_s*礼\|砂\_s*利\|謝\_s*花\|三\_s*味\_s*線\|雑\_s*魚\|著\_s*語\|杓\_s*子\|共\_s*同\_s*企\_s*業\_s*体\|j\_s*\%(T\_s*e\_s*X\|L\_s*a\_s*T\_s*e\_s*X\|B\_s*i\_s*b\_s*T\_s*e\_s*X\)\|ゼ\_s*リ\_s*ー\|エ\_s*\%(ホ\_s*バ\|リ\_s*コ\|レ\_s*ミ\_s*ヤ\|ル\_s*サ\_s*レ\_s*ム\|ッ\_s*サ\_s*イ\)\|ヘ\_s*\%(レ\_s*ス\|ス\_s*ス\)\|ヒ\_s*メ\_s*ネ\_s*ス\|チ\_s*ゲ\|北\_s*陸\_s*先\_s*端\_s*\%(大\|科\_s*学\_s*技\_s*術\_s*大\_s*学\_s*院\_s*大\_s*学\)\|ハ\_s*\%(イ\_s*メ\|ラ\_s*ペ\_s*ー\_s*ニ\_s*ョ\)\|碧\_s*玉\|ヤ\_s*\%([リンニナー]\|イ\_s*ル\|エ\_s*ル\|ル\_s*ノ\|レ\_s*ド\|ヌ\_s*\%(ス\|シ\_s*ュ\)\|ス\_s*パ\_s*ー\_s*ス\|コ\_s*[ビブ]\|ッ\_s*ケ\)\|フ\_s*\%(ァ\_s*[ンナ]\|リ\_s*[オア]\)\|ズ\_s*ボ\_s*ン\|ユ\_s*\%([ハリダノ]\|ル\_s*ゲ\_s*ン\|ー\_s*\%([リノ]\|ゲ\_s*ン\_s*ト\|デ\_s*ィ\_s*ッ\_s*ト\)\|ン\_s*\%(グ\|カ\_s*ー\|ケ\_s*ル\)\|ピ\_s*テ\_s*ル\|ッ\_s*[カシ]\)\|イ\_s*\%(エ\_s*\%([ナス]\|ン\_s*\%(ス\|セ\_s*ン\)\|ズ\_s*ス\)\|ェ\_s*\%(ナ\|ン\_s*\%(ス\|セ\_s*ン\|ゼ\_s*ン\)\|ー\_s*ガ\_s*ー\|ル\_s*\%(ク\|サ\_s*レ\_s*ム\)\)\)\|ホ\_s*\%([タセ]\|ル\_s*ヘ\|ホ\_s*バ\|ア\_s*\%(ン\|キ\_s*ン\)\)\|ヨ\_s*\%([ブナ]\|ル\_s*\%(グ\|ダ\_s*ン\)\|エ\_s*ル\|ア\_s*\%(ヒ\_s*ム\|キ\_s*ム\)\|ゼ\_s*フ\|ー\_s*\%([トド]\|デ\_s*ル\|ゼ\_s*フ\)\|シ\_s*\%(フ\|ュ\_s*ア\)\|セ\_s*フ\|ハ\_s*[ナンネ]\)\)', - \ 'K' : '\%([コ怖旃之惟怺薦米暦轉殺壼鶤袞鯤坤狠艮琿悃很漿棍魂菎滾梱溷痕渾墾恨懇根梢杪王泥裔樸鞐熟枹醴聲声蛩凍溢零錯苔箏亊判斷諺理断盡悉尽辞詞殊事壽寿鯒礫鯉齣狛腓昆瘤鮗谺応應答茲是爰試志心凩兀笏惚榾輿甑腰拵拗鐺鏝昿仰慌袷塙頏絖冦耗亙峺衝晄覯糠匣逅閧扛湊羔礦爻壙盍洸鬨浤凰閤窖缸寇岡傚湟汞洽崗鮫伉訌誥冓敲磽倖簧鏗椌搆肓鍠矼砿犒淆呷鵁皐黌遘昴槹蚣肱肴熕胱猴扣杲蛤縞狎畊昊餃哽幌鱇峇嫦鎬隍恆倥徨啌吭釦闔藁亘絋棡遑紘稾鴿詬哮困靠皋惶紺鈩絳閘蒙冰氷郡蛟槁候楮媾溘蝗酵嚆犢稿亢哄睾慷郊岬肛項巷鑛洪佼狡昂叩勾喉滉糀晃剛晧曠宏控恍侯港皓坑皎耿膏江絞膠虹巧鴻鉱衡浩厚幸耕弘綱抗購攻講恒溝薨鋼航行肯荒高皇光好槲梏谷釛尅斛轂哭石告酷穀冴虎觚壷痼胯鼓児漉糊媚古娘冱混粉請辜湖虍放葫捏此鈷痩鴣瞽詁呼箍小錮蠱蛄粐滬估雇故沽転倒漕罟餬超込凅誇懲琥扈袴焦蝴呱乕踰弧越子孤菰跨壺楜股肥凝女戸恋兒怙瑚戀夸皷滸濾瓠濃乎仔こケ峻欅獸謇鵑愃搴劒俔儉險瞼慊圈幵釼顯剱椦黔暄劔涓臉妍劵歉獻縣蜷綣檢鉉虔愆娟權甄惓諠騫験慳捲倦遣羂嶮蹇鹸狷譴腱驗軒憲繭謙圏険硯倹献犬絢顕券劍剣見権研拳眷牽県建烟鑷言獣蓋涜吝削畩閲検貶健桁嗾竭獗偈譎碣蕨尻頡抉襭亅刔杰厥訐歇訣孑頁纈蹶桀穴傑結血煢蹊黥詣攜綮鮭絅盻挈瓊夐冂笄枅奚兮迥畦彑醯徑剄冏勍檠憬挂憇匸逕繼惠慧謦鷄系┓├┃┣┿━┻┷┸─┫┝┳┬┼┯┥╋┨┛│┠┰┏┤┴╂罫痙奎脛谿溪螢蛍渓閨憩圭携硅恵刑継勁珪計啓蹴毛褻異けク姑配椚橡檪櫪栩椡椪湫箜櫟含纐柵婚屎糞癖潛潜鵠凹窪縊跟頚軛珞頸首諄鞋履窟轡覆沓碎砕条降件頽崩屑釘莖茎陸杙杭掘崛倔鶏鐃藥擽薬樟楠梳櫛串釧與与挫籖鯀鯨籤隈熊艸嚔藾叢鏈腐鎖種Ξξ臭楔草圀邦國国髭漱嗽吻嘴唇脣梔腔φ粂裙勳熏皹桾皸醺崑燻訓勲葷委詳钁精鍬咥銜桑某暝峅昏冥眛罔鮓比闇位鞍藏暗倉廚厨涅曇蜘佝栗包俥車梍枢畔鐵玄蔵黒食孔桍窶暮焼懼駒苦区眩吁繰庫垢紅呉倶枸劬煦口瞿工吼怐喰貢惧區組句狗酌絎嶇衢刳くキ段痍疵紲絆傷築鱚嚴稷黍帛後碪砧絹兆萌刻鞫椈掬辟君牙蘗檗迄訖狐屹詰佶拮吃鞠橘菊喫.&⌒¬★!÷≠♪∫%±・。仝●|―¥Ц△‡`←¢£‰◎+ ̄〒☆ヽゞ、▽◇↓≒\;″°∝≦々℃∵†○´゛‥♭<#〇□‐_Å∞:▲ヾ♂?^,〓‖▼…〃¶゜@≫§∴′ゝ/>♀∨=≧ー−≪$♯↑■¨≡〆◆∽煙蚶更衣細后妃楸蕈茸乙雉轢杵軋岸桔汚穢北樵際裂燦煌雲嫌胆竏粁瓩浄淳澄潔清雰錐蛬吉霧檮桐箘鈞檎襟忻箟掀磬噤听瑾懃覲釁芹衿饉釿衾斤蒟径窘擒巾菌公禽筋錦欣僅琴均禁緊謹欽近勤嘘踞據苣擧渠秬鉅舉筥慶倨距歔遽鋸醵拠拒去勗蕀洫亟跼旭局挙許居巨虚轎繦羌姜篋蕎陜恊竸荊筴徼峽劫恟況棘竅僵亰狹頃筺梗誑刧襁烱洶抂卿鍄炯經竟廾况孝亨跫敬筐梟饗矯矜挾校挟拱嬌杏鞏響向興匈嚮享警競喬怯兄彊僑兢莢狂橋供郷兇驕凶叫夾匡侠狭恐経疆協境強胸驚脅共恭今教玖鬮歙舊疚笈邱赳摎恷岌貅9扱皀烋樛蚯逑厳胡翕朽泣穹糾糺及躬汲臼窮灸弓宮久柩究給丘求鳩級球休救急旧吸九基欹寄貴跂徠聞覊猗櫃煕既弃氣詭嬉效切妓跪虧卉稘尋冀暉唏姫伐喟伎畸効熙癸噐極祁匱馗旡其碁剞畿規希綺燬騎饑逵樹忌朞騏城聽棄悸肌生几季記僖紀斬決槻期起箕聴鰭崎餽倚幃瞶利晞欷毅危屓熈着汽木飢酒愾熹諱淇器羇机企麾訊著剪稀来圻來鬼揆奇羈禧譏棋黄憙己驥鑽决毀掎曁竒窺喜碕祈耆饋揮愧棊幾气徽消截岐祺麒覬嵜杞軌きカ糜癢粥痒麹輕骨業軽鰔鰈餉通瓶龜甕亀鴈獵鳫殯猟雁釀鳧鳬髢鴨躱巛側厠廁磧瓦獺翡裘皮紮→搦苧碓柄枳體軆躰躯体鴉犂烏機絡空唐榧茅揀坎澗扞莟丱拑盥嫺鑵蒄瞰淦稈康繝懽憾骭戡奐啣厂鐶讙澣羮寰羹嫻杆鸛歡豢歛罕酣陷皖篏捍瀚勸撼驩卷樌潤觀橄涵渙凵堪巫覡鉋萱簪舘艱咸翰柬悍駻燗槓浣邯攷稽宦考棺潅閂煥鉗疳癇函凾鹹顴緘桓款箝諌諫轗旱坩侃鰥 館莞橇韓患灌勧菅簡奸刊柑肝看桿干緩寒嵌廣広竿貫巻敢漢環間陥喚閑監喊歓甘寛管慣完艦乾幹官観壁椛屍姓庇鞄芳蔓鯑一勘⊃影陰蔭景*棧梯筧庚辛┘柧┐┌門廉脚癩乞∪川合’)〈《‘“”}{》〉囓柁旗鮖悴舵鰍鍛梶錺餝飾篭籠還歸卻皈孵省顧楓却帰反返督髮帋守祇韮裃雷髪紙鉦曲矩予鐘樺沫偏騙語潟刀模象仇固硬傍難容忝辱頑形方旁型肩風幽滓翳微掠綛纃絣緕擦糟鎹粕轄戞劼猾瞎恰蛞∧∩蠍擔濶筈剋蝎曷羯喝餓聒鞨黠刮蘰鬘桂闊括嘗捷豁渇担滑堅鰹割戛活暈疽鵲瘡傘嵩重襲葛笠堵硴墻牆蠣蛎柿關掲罹抱踵嬶嚊拘関係貌顏郁薫顔母感釡罐窰鴎框叺構喧竃竈釜缶蒲鎌數数槝栢膳傅瑕畏賢橿姦樫爨炊圍喞託囲鈎『鉤「』」限鍵傾禿蕪鏑頭齧気被兜敵適哉必要鼎鬲彜彝叶片悲哀愛鋺蛇鉄蜩神奏楫裹磆餅徒褐糧粮膈覺∠埆蠖貉幗隱擴寉骼癨壑咯椁嚇茖愨槨膕掴覈殼穫狢霍礁恪擱匿撹攪喀廓較郭]】【〔〕[殻挌劃閣格隠覚矍革獲馘攫核鶴拡客隔角確蠏壞畍丐獪褂恠喙峡夬觧械揩醢匯廨誡誨嵬櫂隗茴徊迴枴懈价椢榿囘蛙瑰乖浬鰄傀糴柏街鳰懷蛔蠶蚕邂蟹潰壊恢腕芥垣楷會拐悔詼諧契皆界疥魁偕改繪貝胛絵甲快灰槐晦懐介回塊解階廻戒開会怪海縢篝炬耀赫輝冠鑒鑑各屈鏡和代茄缺飼嫁華堝變狩上訶加架何啝火日菓欠苅繋稼ヶ个噛譁科跏舸賭禍支変窩課花交刈渦嚼掛呵替葭柯畫駆嘩崋化霞蝌迦顆価馨家借蝦罅駈斯賈嘉易果戈廈哥買闕且克墟靴訛驅換踝描軻嗅價嗄可彼夥香歌河珂鹿個痂書假荷耶笳咼藉糅舁搗渮袈下萪貸厦禾貨咬寡箇卦苛譌枷掻過画ヵ黴遐兼醸翔仮佳蚊懸伽賀淅勝涸苟蝸謌夏枯暇珈か京節┗└※хХ忽コ汗〜功(株Kク×金窯χキカΚКΧкケκK]\|ッ\_s*[コケクキカ]\|ッ\_s*[コケクキカ]\|っ\_s*[子こけくきか]\|蟀\_s*谷\|焜\_s*炉\|前\_s*妻\|嫡\_s*妻\|二\_s*合\_s*半\|秋\_s*桜\|牛\_s*尾\_s*魚\|庶\_s*幾\|独\_s*楽\|特\_s*牛\|粫\_s*門\|甦\_s*生\|M\_s*e\_s*t\_s*a\_s*c\_s*h\_s*l\_s*a\_s*m\_s*y\_s*d\_s*e\_s*a\_s*e\|f\_s*o\_s*o\_s*t\_s* \_s*a\_s*n\_s*d\_s* \_s*m\_s*o\_s*u\_s*s\_s*e\_s* \_s*d\_s*i\_s*s\_s*e\_s*a\_s*s\_s*e\|外\_s*連\_s*味\|螻\_s*蛄\|罌\_s*粟\|滅\_s*紫\|S\_s*i\|莎\_s*草\|百\_s*[濟済]\|9\_s*[日月]\|秧\_s*鶏\|釉\_s*掛\|典\_s*薬\_s*寮\|L\_s*a\_s*u\_s*r\_s*\%(a\_s*c\_s*e\_s*a\_s*e\|o\_s*i\_s*d\_s*e\_s*a\_s*e\)\|探\_s*湯\|誓\_s*湯\|六\_s*合\|地\_s*祇\|都\_s*子\|州\_s*光\|群\_s*衆\|慈\_s*姑\|c\_s*r\_s*e\_s*s\_s*c\|内\_s*蔵\_s*助\|H\_s*e\_s*l\_s*l\_s*e\_s*b\_s*o\_s*r\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|J\_s*u\_s*g\_s*l\_s*a\_s*n\_s*d\_s*a\_s*l\_s*e\_s*s\|仁\_s*彦\|啄\_s*木\_s*鳥\|X\_s*e\|如\_s*月\|私\_s*市\|昨\_s*日\|素\_s*地\|布\_s*地\|欺\_s*罔\|k\_s*i\_s*l\_s*o\|聖\_s*[之子美]\|沈\_s*菜\|蟋\_s*蟀\|螽\_s*斯\|G\_s*o\_s*l\_s*d\|A\_s*\%(u\|r\_s*c\_s*h\_s*i\_s*c\_s*h\_s*l\_s*a\_s*m\_s*y\_s*d\_s*e\_s*a\_s*e\|s\_s*t\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|c\_s*a\_s*n\_s*t\_s*h\_s*a\_s*c\_s*e\_s*a\_s*e\)\|菫\_s*青\_s*石\|槿\_s*花\|R\_s*\%(h\_s*\%(o\_s*e\_s*a\_s*d\_s*a\_s*l\_s*e\_s*s\|a\_s*m\_s*n\_s*a\_s*l\_s*e\_s*s\)\|u\_s*n\_s*u\_s*n\_s*c\_s*u\_s*l\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|a\_s*n\_s*\%(u\_s*n\_s*c\_s*u\_s*l\_s*a\_s*\%(l\_s*e\_s*s\|c\_s*e\_s*a\_s*e\)\|a\_s*l\_s*e\_s*s\)\)\|裾\_s*礁\|脇\_s*[侍息]\|姉\_s*[妹弟]\|頬\_s*[骨筋]\|毬\_s*果\|舅\_s*姑\|厩\_s*\%([肥舎]\|務\_s*員\)\|廐\_s*舎\|離\_s*れ\_s*離\_s*れ\|掃\_s*部\|羚\_s*羊\|氈\_s*瓜\|土\_s*器\|蝙\_s*蝠\|魚\_s*狗\|為\_s*替\|連\_s*枷\|身\_s*体\|落\_s*葉\_s*松\|随\_s*神\|檻\_s*車\|T\_s*\%(h\_s*a\_s*l\_s*i\_s*c\_s*t\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|u\_s*b\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\)\|南\_s*瓜\|量\_s*子\|千\_s*典\|山\_s*\%(梔\_s*子\|陽\_s*道\)\|蜉\_s*蝣\|陽\_s*炎\|蜻\_s*蛉\|破\_s*片\|挿\_s*頭\|駕\_s*\%(籠\|輿\_s*丁\)\|槭\_s*樹\|長\_s*[月官]\|主\_s*[紀計神]\|剃\_s*刀\|天\_s*\%(牛\|鼠\_s*矢\)\|帷\_s*子\|酢\_s*漿\_s*草\|O\_s*x\_s*a\_s*l\_s*i\_s*d\_s*a\_s*c\_s*e\_s*a\_s*e\|飛\_s*白\|春\_s*日\|C\_s*\%([ormfda]\|h\_s*r\_s*o\_s*m\_s*i\_s*u\_s*m\|i\_s*r\_s*c\_s*a\_s*e\_s*a\_s*s\_s*t\_s*e\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|u\_s*r\_s*i\_s*u\_s*m\|y\_s*p\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|e\_s*r\_s*c\_s*i\_s*d\_s*i\_s*p\_s*h\_s*y\_s*l\_s*l\_s*a\_s*c\_s*e\_s*a\_s*e\)\|曾\_s*て\|曽\_s*て\|松\_s*魚\|燕\_s*子\_s*花\|牡\_s*[蛎蠣]\|民\_s*部\|部\_s*曲\|E\_s*\%(b\_s*e\_s*n\_s*a\_s*l\_s*e\_s*s\|l\_s*a\_s*n\_s*a\_s*l\_s*e\_s*s\)\|案\_s*山\_s*子\|梭\_s*\%(魚\|子\_s*魚\)\|蟷\_s*螂\|螳\_s*螂\|瓜\_s*\%(田\|呂\_s*根\)\|拍\_s*手\|水\_s*[鶏母夫手]\|東\_s*\%(風\|京\_s*都\_s*立\_s*科\_s*学\_s*技\_s*術\_s*大\_s*学\)\|(\_s*株\_s*)\|称\_s*子\|贏\_s*ち\_s*得\|歩\_s*兵\|恁\_s*く\|杜\_s*\%(若\|父\_s*魚\)\|梅\_s*花\_s*皮\|頴\_s*田\|膾\_s*炙\|ノ\_s*\%([ブウ]\|ー\_s*ン\|ッ\_s*\%([トク]\|テ\_s*ィ\_s*ン\_s*グ\|カ\_s*ー\|キ\_s*ン\_s*グ\)\)\|ナ\_s*\%(ッ\_s*\%(ク\|プ\_s*\%(サ\_s*ッ\_s*ク\|ザ\_s*ッ\_s*ク\)\)\|レ\_s*ッ\_s*ジ\|イ\_s*[フトツ]\)\|ニ\_s*\%(ー\|ッ\_s*\%(ト\|テ\_s*ィ\_s*ン\_s*グ\)\)\|ホ\_s*\%(ー\_s*\%(ミ\_s*ー\|メ\_s*イ\)\|メ\_s*イ\_s*ニ\)\|フ\_s*\%(ビ\_s*ラ\_s*イ\|ル\_s*シ\_s*チ\_s*ョ\_s*フ\)\|ハ\_s*\%(ン\|ラ\_s*シ\_s*ョ\_s*ー\|ー\_s*ン\|バ\_s*ロ\_s*フ\_s*ス\_s*ク\|ル\_s*ツ\_s*ー\_s*ム\|チ\_s*ャ\_s*ト\_s*ゥ\_s*リ\_s*ア\_s*ン\)\|P\_s*\%(i\_s*p\_s*e\_s*r\_s*a\_s*\%(l\_s*e\_s*s\|c\_s*e\_s*a\_s*e\)\|a\_s*p\_s*a\_s*v\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|o\_s*\%(d\_s*o\_s*s\_s*t\_s*e\_s*m\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\|t\_s*a\_s*s\_s*s\_s*i\_s*u\_s*m\)\)\)', - \ 'L' : '\%([ォォぉェェぇゥゥぅィィぃァァぁ<≪ ̄_≦李左←¬⊃∃∀∨ルL∧レラлΛ£ЛλL]\|ッ\_s*[ォェゥィァ]\|ッ\_s*[ォェゥィァ]\|っ\_s*[ぉぇぅぃぁ]\|液\_s*晶\|最\_s*小\_s*2\_s*乗\_s*法\|\.\_s*\.\_s*\.\|拉\_s*薩\|l\_s*-\_s*メ\_s*ン\_s*ト\_s*ー\_s*ル\|l\_s*i\_s*s\_s*p\_s*e\_s*r\|聯\_s*想\|補\_s*題\|檸\_s*檬\|手\_s*紙\|学\_s*習\|施\_s*錠\|局\_s*所\|論\_s*理\|ロ\_s*\%([キイアロリブボトメウスコゴグー]\|ペ\_s*ス\|ワ\_s*ー\_s*ル\|エ\_s*ベ\|ヨ\_s*ラ\|フ\_s*ト\|ル\_s*カ\|ベ\_s*リ\_s*ア\|ビ\_s*\%(ー\|ン\_s*グ\|イ\_s*\%(ス\_s*ト\|ン\_s*グ\)\)\|テ\_s*ィ\|サ\_s*ン\_s*\%(ジ\_s*ェ\_s*ル\_s*ス\|ゼ\_s*ル\_s*ス\)\|ニ\_s*ー\|ク\_s*リ\_s*ア\_s*ン\|ッ\_s*\%([ジタテトク]\|キ\_s*\%(ン\_s*グ\|ー\_s*ド\)\|カ\_s*ー\)\|カ\_s*ー\_s*ル\|ケ\_s*ー\_s*\%([トタル]\|シ\_s*ョ\_s*ン\)\|ガ\_s*ー\|ギ\_s*ン\_s*グ\|ジ\_s*\%(ー\|テ\_s*ッ\_s*ク\|ス\_s*テ\_s*ィ\_s*\%(ク\|ッ\_s*ク\)\|カ\_s*ル\|ク\_s*ー\_s*ル\|ッ\_s*[トク]\)\|ラ\_s*ン\|ン\_s*\%([ゴグダ]\|ボ\_s*\%(ク\|ッ\_s*ク\)\|バ\_s*ル\_s*デ\_s*ィ\|ズ\_s*デ\_s*ー\_s*ル\|リ\_s*[ィー]\|ジ\_s*ン\|ド\_s*ン\)\|レ\_s*\%(ア\_s*ル\|ッ\_s*タ\|ー\_s*ヌ\|イ\_s*ン\|ン\_s*\%([ソス]\|ツ\_s*ォ\)\)\)\|\\\_s*L\_s*a\_s*T\_s*e\_s*X\|研\_s*究\_s*室\|エ\_s*ル\|リ\_s*\%([ィセズザサスダポルラリマナノンヌブアー]\|ャ\_s*マ\|ヤ\_s*ド\_s*ロ\|ヨ\_s*ン\|ゾ\_s*チ\_s*ー\_s*ム\|コ\_s*\%(リ\_s*ス\|ピ\_s*ン\)\|ク\_s*ー\_s*ド\|カ\_s*\%(ー\|オ\_s*ン\)\|ジ\_s*[ンー]\|デ\_s*[ィル]\|ド\_s*カ\_s*イ\_s*ン\|プ\_s*ト\_s*ン\|パ\_s*ー\_s*ゼ\|グ\_s*\%(ニ\_s*ン\|ナ\_s*ン\)\|フ\_s*\%([エト]\|タ\_s*ー\|テ\_s*ィ\_s*ン\_s*グ\)\|テ\_s*ラ\_s*[ルシ]\|チ\_s*ウ\_s*ム\|ソ\_s*\%(ソ\_s*ー\_s*ム\|グ\_s*ラ\_s*フ\_s*ィ\)\|タ\_s*ー\|ト\_s*\%([レル]\|マ\_s*ス\|ア\_s*ニ\_s*ア\|グ\_s*ラ\_s*フ\|バ\_s*ル\_s*ス\_s*キ\_s*ー\)\|オ\_s*\%(タ\_s*ー\_s*ル\|ネ\_s*ル\)\|ミ\_s*\%(テ\_s*ッ\_s*ド\|ッ\_s*[タト]\)\|モ\_s*\%(ー\_s*ジ\_s*ュ\|ネ\_s*ン\|ン\_s*チ\_s*ェ\_s*ッ\_s*ロ\)\|ム\_s*ジ\_s*ン\|キ\_s*\%(ッ\_s*ド\|ュ\_s*ー\_s*ル\|テ\_s*ン\_s*\%(ス\_s*タ\_s*イ\_s*ン\|シ\_s*ュ\_s*タ\_s*イ\_s*ン\)\)\|エ\_s*\%(ゾ\_s*ン\|ー\_s*ジ\_s*ュ\)\|ヒ\_s*テ\_s*ン\_s*シ\_s*ュ\_s*タ\_s*イ\_s*ン\|ネ\_s*\%([アン]\|ッ\_s*ト\|ー\_s*ジ\_s*ュ\)\|ニ\_s*ア\|ベ\_s*\%([ロラ]\|リ\_s*ア\|レ\_s*ー\_s*シ\_s*ョ\_s*ン\|ル\_s*テ\)\|ビ\_s*\%([アー]\|ド\_s*ー\|ン\_s*グ\)\|ュ\_s*\%([スー]\|ブ\_s*リ\_s*ャ\_s*ー\_s*ナ\|リ\_s*ュ\|ド\_s*ミ\_s*ラ\|ク\_s*サ\_s*ン\_s*ブ\_s*ー\_s*ル\|ッ\_s*ク\|シ\_s*ア\_s*ン\|ミ\_s*エ\_s*ー\_s*ル\)\|ロ\_s*\%(イ\|ン\_s*グ\_s*ウ\_s*ェ\)\|ヴ\_s*\%(ィ\_s*ン\_s*グ\_s*ス\_s*ト\_s*ン\|ァ\_s*\%(プ\_s*ー\_s*ル\|イ\_s*ア\_s*サ\_s*ン\)\)\|バ\_s*\%(テ\_s*ィ\|タ\_s*リ\_s*ア\_s*\%(ン\|ニ\_s*ズ\_s*ム\)\|プ\_s*ー\_s*ル\|イ\_s*ア\_s*サ\_s*ン\)\|ッ\_s*\%([ドピプタクチト]\|ス\_s*ン\)\)\)', - \ 'M' : '\%([モ脆醪師諸催靄舫腿銛杜森聞捫匁紋問翫玩擡齎靠凭鵙鴃縺悶樅籾椛楓蛻潛濳艾潜殯黐餠用糯餅桃者懶專専物尤勿畚戻許悖故旧下乖求礎素基本元綟捩文默沐杢黙耗檬网莽芒罔耄朦魍艨濛曚矇亡蒙毛孟猛網糢保若望揉燃洩貰藻漏以模母裳楙姆摸茂持喪もメ麪緜眄緬麺門棉綿面蓍珎珍♀娶貭粧妾牝瞽盲娚暈繞萌慈惠恵萠暝謎溟滅姪瞑盟酩銘鳴瑪賞睨奴雌芽碼召女減めム羣榁室簇邨屯連邑叢村紫梅葎宜憤毳槿葮椋酬報尨骸躯旨難睦酷麥麦対邀百迎昔空虚鞅宗棟胸掬娘結笞鞭徒蠧蝕蠹蟲蓆寧筵席莚虫毟貉狢豸貪聟壻婿霧向无無謀武鵡夢群牟梦六剥毋噎蒸咽務矛むミ渠霙溝妊澪薨岑嶺峰峯亂紊淫婬濫妄猥乱※*◇■簔穣簑蓑醜儖慘短惨幹研耳壥廛店操陵鶚崎岬巫尊詔勅敕>」砌汀頻→』】右翠碧緑認幣蹊径倫導途通路道瞠鬟髻湖自蹼蛟瑞癸禊晦漲源鏖港湊南瞶櫁謐水調貢密甕帝蜜覩幸脉脈韭韮竓粍瓱榠螟茗名妙命冥都宮罠閔皆眠明民看彌稔靡觀盈診箕三観美充深壬實視御魅味巳己身弥みマ毬鞠紕蝮麿転稀賓客檀繭黛眉巡囘周防衞衛護守荳菽豆.・。°◯圓槫゜)(丸謾鰻縵鬘懣幡幔蹣蔓瞞卍饅漫滿慢迄笆貧幻瞼蔟疎眩回廻儲申設招繚統纒的蟶孫弯彎籬擬免猿純亮信実委罷圸壗侭飯儘継随髷任蒭芻耙紛鮪見猯塗斈學眦眥眼俎愛学斑斗枡鱒桝舛升萬蠱呪薪槙槇牧窗悗惑円窓襠甼区街町前複亦俣叉跨全瞬木胯股又鍖枕膜幕瑁詣参參妹眛哩迷枚米賄賂埋昧邁毎沫抹奉靺枩秣祀纏祭睫末大太秀勝柾弄優成盛將松匡鉞賢希将誠昌征政正雅仁媽散茉馬在増混交間放摩負枉益敗眞待未麼撒巻魔蒔俟坐嘛舞捲目磨痲先墹真満播万曲卷雑ま光月♪♭♯ム¬⌒÷⊃≠∫∠±⊇⇔∃∇√∧≒∩∬∋∝≦∵Δ⇒∞⊂⊆⊥∀≫∴×∨≧≪≡∂∈∽∪♂曼麻●◎○〇モM〒′−マ最ミメМΜμM]\|ッ\_s*[モメムミマ]\|ッ\_s*[モメムミマ]\|っ\_s*[もめむみま]\|双\_s*\%([手墨親]\|向\_s*き\|差\_s*し\)\|蜀\_s*黍\|唐\_s*土\_s*\%(書\|文\_s*字\)\|両\_s*\%([角親刃]\|差\_s*し\)\|楊\_s*梅\_s*皮\|主\_s*水\|旺\_s*角\|紅\_s*[絹染葉]\|強\_s*請\|虎\_s*落\|痘\_s*瘡\|莫\_s*斯\_s*科\|固\_s*よ\_s*り\|一\_s*徳\|O\_s*l\_s*e\_s*a\_s*l\_s*e\_s*s\|惘\_s*然\|乙\_s*張\|赤\_s*目\_s*魚\|針\_s*孔\|妻\_s*[君合沼]\|墨\_s*西\_s*哥\|鍍\_s*金\|繍\_s*眼\_s*児\|夫\_s*婦\|乳\_s*母\|布\_s*の\_s*子\|没\_s*\%([薬後入却有]\|義\_s*道\|食\_s*子\)\|B\_s*\%(e\_s*r\_s*b\_s*e\_s*r\_s*i\_s*d\_s*a\_s*c\_s*e\_s*a\_s*e\|i\_s*o\_s*r\_s*r\_s*a\_s*g\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\)\|浮\_s*腫\|6\_s*日\|6\_s*日\|崇\_s*田\|刀\_s*背\|襁\_s*褓\|零\_s*余\_s*子\|蜈\_s*蚣\|産\_s*霊\|息\_s*子\|k\_s*\$\_s*_\_s*{\_s*i\_s*n\_s*f\_s*}\_s*\$\|蚯\_s*蚓\|A\_s*\%(b\_s*i\_s*e\_s*s\|p\_s*e\_s*t\_s*a\_s*l\_s*a\_s*e\|c\_s*r\_s*o\_s*s\_s*t\_s*i\_s*c\_s*h\_s*u\_s*m\)\|山\_s*陵\|雎\_s*鳩\|親\_s*王\|嬰\_s*児\|亨\_s*治\|陸\_s*奥\|皇\_s*[子女國]\|3\_s*[つ日]\|3\_s*[つ日]\|角\_s*[鴟髪子]\|七\_s*寸\|鳩\_s*尾\|鷦\_s*鷯\|孤\_s*児\|凝\_s*視\|兎\_s*唇\|R\_s*u\_s*t\_s*a\_s*l\_s*e\_s*s\|神\_s*[子輿酒]\|苗\_s*字\|海\_s*[雲蘊布藻蜂松山]\|P\_s*o\_s*d\_s*o\_s*p\_s*h\_s*y\_s*l\_s*l\_s*a\_s*c\_s*e\_s*a\_s*e\|土\_s*[龍竜産]\|京\_s*都\|横\_s*浜\_s*マ\_s*リ\_s*ノ\_s*ス\|肉\_s*刺\|忠\_s*実\|翻\_s*\%(筋\_s*斗\|車\_s*魚\)\|H\_s*a\_s*m\_s*a\_s*m\_s*e\_s*l\_s*i\_s*d\_s*a\_s*l\_s*e\_s*s\|不\_s*\%(味\|見\_s*[点転]\)\|兇\_s*々\|凶\_s*鳥\|澗\_s*潟\|勾\_s*玉\|禍\_s*[々禍事言]\|況\_s*し\|澳\_s*門\|苧\_s*麻\|茅\_s*台\_s*酒\|丈\_s*夫\|倍\_s*達\|微\_s*[塵妙睡]\|燐\_s*寸\|驀\_s*地\|L\_s*o\_s*g\_s*a\_s*n\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\|豫\_s*て\|陪\_s*臣\|売\_s*僧\|C\_s*\%(a\_s*s\_s*u\_s*a\_s*r\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\|e\_s*r\_s*a\_s*t\_s*o\_s*p\_s*y\_s*l\_s*l\_s*a\_s*c\_s*e\_s*a\_s*e\)\|S\_s*\%(a\_s*p\_s*i\_s*n\_s*d\_s*a\_s*l\_s*e\_s*s\|c\_s*h\_s*i\_s*s\_s*a\_s*n\_s*d\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\)\|理\_s*[之元]\|允\_s*彦\|祐\_s*史\|晶\_s*子\|公\_s*[美則輝]\|斉\_s*加\_s*年\|方\_s*夫\|多\_s*言\_s*語\_s*化\|m\_s*-\_s*R\_s*N\_s*A\|ニ\_s*ー\_s*モ\_s*ニ\_s*ッ\_s*ク\|単\_s*量\_s*体\|会\_s*議\|和\_s*布\_s*[刈蕪]\|中\_s*間\_s*子\|薄\_s*荷\_s*脳\|行\_s*[幸列]\|写\_s*像\|日\_s*\%(米\_s*相\_s*互\_s*防\_s*衛\_s*援\_s*助\_s*協\_s*定\|本\_s*製\)\|m\_s*\%(u\_s*l\_s*t\_s*i\_s*l\_s*i\_s*n\_s*g\_s*u\_s*a\_s*l\_s*i\_s*z\_s*a\_s*t\_s*i\_s*o\_s*n\|i\_s*\%(c\_s*r\_s*o\|l\_s*l\_s*i\)\|e\_s*\%(g\_s*a\|z\_s*z\_s*o\_s* \_s*\%(f\_s*o\_s*r\_s*t\_s*e\|p\_s*i\_s*a\_s*n\_s*o\)\)\|a\_s*\%(k\_s*e\_s*フ\_s*ァ\_s*イ\_s*ル\|d\_s*e\_s* \_s*i\_s*n\_s* \_s*J\_s*a\_s*p\_s*a\_s*n\)\)\|計\_s*算\_s*機\|手\_s*紙\|ザ\_s*ッ\_s*ヘ\_s*ル\_s*=\_s*マ\_s*ゾ\_s*ッ\_s*ホ\|嗜\_s*虐\_s*的\_s*趣\_s*味\|被\_s*虐\_s*\%(趣\_s*味\|淫\_s*乱\_s*症\)\|修\_s*士\|仮\_s*面\|移\_s*送\|エ\_s*ム\)', - \ 'N' : '\%([ノ麕咒燧烽詛呪孔伯朔雅悳弼教糊典規矩憲範宜紀哲修惟允亘攵展順暢信則法後罵吭咽喉鑿蚤々湾宣曰覘臨稀望覗殘遺残鋸芒禾騰幟昇登上檐簷軒逸遁王瑙衲曩碯皇腦嚢膿能脳農除延熨廼退埜野飲載乘飮之伸嚥述乗呑−濃陳のネ塒姉濘檸嚀聹侫寧佞鼡鼠拗猫嫉妬希願捏熱労犒葱狙閨睡棔眠稔然棯懇拈撚燃念年涅粘値根捻嶺祢錬寝袮捩音練禰煉子寢ねヌ絖垈饅帛幣鵺主蛻拭温布沼盜偸窃盗抽擢緯糠額濡脱怒縫抜奴拔貫塗ぬニ楡蒻潦鷄鶏瀑庭繞獰女尿韭薤眈睨韮姙刄儿蒜葫刃忍∀妊認任人乳擔蜷担濁賑握俄鳰臭匂沸錵贄僞偐贋偽柔靤如苦膠霓滲虹躙廿《》◎∬』『悪憎兄螺鰊鯡錦西入新肉‖岻逃児弐二邇2貳迩煮貮迯仁尼似荷2弍丹にナ靡抔嫐嬲鯆屶釶鉈泥薺詰若慨歎嘆抛毆擲撲殴慰治癒等猶直泪波邉辺邊鍋浪某棘棗懷懐夏擦梨情懶譌艶訛鉛鮠癜鯰韲鱠膾憖怠鈍腥捺凖擬准準謎洋涙宥傾灘詠霖眺痼存乍流轅永和梛椥渚長莫毋勿半・媒仲中7斜七蔑乃尚内繩畷縄苗滑鞣惱悩就哉也斉形業徳娚垂喃∵楠尓爾汝男軟難何倣枹均柞双肄列⊃⇒→楢習竝茄啾納無那拿舐娜做涕投馴南熟並儺生凪鳴為綯奈嘗哭嚶爲狎薙萎菜魚慣泣亡失痿撫啼な┘┛│┃┨┫┤┥├┝┣┠┼╋╂┿成#∋∇名┗└日≒ニネN¬〜≠ナヌノΝНнνN]\|ッ\_s*[ノネヌニナ]\|ッ\_s*[ノネヌニナ]\|っ\_s*[のねぬにな]\|帳\_s*面\|狼\_s*[烟煙]\|惚\_s*気\|暖\_s*[簾気]\|礼\_s*江\|功\_s*晶\|祈\_s*子\|訓\_s*子\|賀\_s*子\|式\_s*部\_s*省\|記\_s*代\|倫\_s*[明子宗]\|敬\_s*之\|賭\_s*弓\|誠\_s*也\|敦\_s*子\|悦\_s*旦\|祝\_s*[女詞]\|仰\_s*け\_s*反\|盧\_s*泰\_s*愚\|逆\_s*上\|凌\_s*霄\_s*花\|姐\_s*さ\_s*ん\|杜\_s*松\|強\_s*請\|合\_s*歓\|微\_s*温\|零\_s*余\_s*子\|酸\_s*漿\|鐃\_s*鉢\|鰾\_s*膠\|I\_s*I\_s*部\|耳\_s*根\|面\_s*皰\| \_s*2\_s* \_s*次\_s*曲\_s*面\|M\_s*y\_s*r\_s*i\_s*s\_s*t\_s*i\_s*c\_s*a\_s*c\_s*e\_s*a\_s*e\|莞\_s*爾\|P\_s*b\|L\_s*e\_s*a\_s*d\|海\_s*[苔鼠]\|C\_s*\%(e\_s*l\_s*a\_s*s\_s*t\_s*r\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|a\_s*r\_s*y\_s*o\_s*p\_s*h\_s*y\_s*l\_s*l\_s*a\_s*l\_s*e\_s*s\)\|雪\_s*崩\|竹\_s*節\_s*虫\|7\_s*[日個]\|地\_s*震\|行\_s*[木方]\|大\_s*\%(蒜\|理\_s*石\)\|蛞\_s*蝓\|弱\_s*竹\|追\_s*儺\|済\_s*\%(し\_s*崩\|り\_s*物\)\|可\_s*成\|平\_s*城\|不\_s*成\|空\_s*リ\_s*ス\_s*ト\|T\_s*h\_s*e\_s* \_s*N\_s*e\_s*t\_s*w\_s*o\_s*r\_s*k\_s* \_s*I\_s*n\_s*f\_s*o\_s*r\_s*m\_s*a\_s*t\_s*i\_s*o\_s*n\_s* \_s*C\_s*e\_s*n\_s*t\_s*e\_s*r\|S\_s*o\_s*\%(l\_s*a\_s*n\_s*a\_s*l\_s*e\_s*s\|d\_s*i\_s*u\_s*m\)\|n\_s*\%(個\|次\_s*元\|e\_s*m\_s*a\_s*c\_s*s\)\|紐\_s*育\|フ\_s*ォ\_s*ン\_s*・\_s*ノ\_s*イ\_s*マ\_s*ン\|ヤ\_s*ー\_s*ノ\_s*ッ\_s*シ\_s*ュ\_s*・\_s*フ\_s*ォ\_s*ン\_s*・\_s*ノ\_s*イ\_s*マ\_s*ン\|オ\_s*ラ\_s*ン\_s*ダ\|ア\_s*メ\_s*リ\_s*カ\_s*ネ\_s*ッ\_s*ト\_s*ワ\_s*ー\_s*ク\|番\_s*号\|節\_s*点\|夜\_s*想\_s*曲\|n\_s*\%(次\|a\_s*n\_s*o\|o\_s*t\_s* \_s*o\_s*r\)\|諾\_s*威\|正\_s*常\|窒\_s*素\|エ\_s*ヌ\)', - \ 'O' : '\%([オ俺游泳指妖在畢檻澱氈拇親愚疎颪卸念錘惟慮赴徐趣俤羈主想表重面隱瘟園Å怨♀妾温恩鈍悍臣覺溺朦朧思覚榲現朮桶踴威嚇戯縅棘駭愕驚躍踊傲奢驕嚴厳遣痴瘧怒行怠蒹補荻獺懼惧怐虞畏恐襲甥笈及綬葹仝ヾ〃ゝヽゞ々同唖繦襁鴦鴛教几忍筬收兎抑稚長幼治理収修遲檍納後遅賻饋諡贈送憶袵臆拜拝冒犯岳崗峻阜侵奇陵女陸丘岡欄斧自己各戦鬼衰劣囮頤訪貶乙♂漢音弟阿脅怯首夥誘屋膃億穩穏煽煕熈燠熾諚掟興隠沖毆姶澳秧浤凰徃枉罌殃翁鴬泓奧嚶墺悒泱閘瓮襖蓊惶鸚懊媼嫗鴎怏鏖謳旺凹鴨櫻欒樗楝殴朷甌汪横往鞅歐嘔陷陥遠奄蓋夛応果應掩蔽概欧公邑麋薤被仰扇皇狼弁鵬鴻鳳黄奥多衽覆粱凡鰲頁王居央郎措擱堕尾置麻朗怖悪追帶折塢負墜織老汚生勇小嗚夫惜起唹落男推将穂壓淤御緒墮逐下牡捺雄降桜押圧苧帯於終乎お大◎∞和∝♪∨∪開OоОο○ωΟオΩO]\|濠\_s*太\_s*剌\_s*利\|父\_s*[娘子]\|母\_s*[子娘屋]\|万\_s*年\_s*青\|本\_s*懸\_s*魚\|玩\_s*具\|沢\_s*瀉\|A\_s*l\_s*i\_s*s\_s*m\_s*a\_s*t\_s*a\_s*l\_s*e\_s*s\|厭\_s*離\|乳\_s*母\_s*日\_s*傘\|陰\_s*[陽地]\|飲\_s*[食酒]\|慍\_s*色\|婦\_s*系\_s*図\|手\_s*術\|螻\_s*蛄\|十\_s*八\_s*番\|鉄\_s*漿\|海\_s*髪\_s*海\_s*苔\|虎\_s*魚\|花\_s*魁\|美\_s*味\|含\_s*羞\_s*草\|白\_s*粉\|渡\_s*島\|通\_s*事\|訳\_s*語\|晩\_s*[稲生]\|可\_s*笑\|惡\_s*寒\|傍\_s*[目惚見]\|叔\_s*[父母]\|伯\_s*[父母]\|姨\_s*捨\|少\_s*女\|侠\_s*気\|G\_s*u\_s*t\_s*t\_s*i\_s*f\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|D\_s*i\_s*l\_s*l\_s*e\_s*n\_s*i\_s*a\_s*l\_s*e\_s*s\|H\_s*y\_s*p\_s*e\_s*r\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\|霊\_s*屋\|蝌\_s*蚪\|飫\_s*肥\|佩\_s*物\|良\_s*人\|纓\_s*田\|C\_s*o\_s*p\_s*t\_s*i\_s*d\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|鷹\_s*揚\|椀\_s*飯\_s*振\_s*\%(舞\|る\_s*舞\)\|相\_s*知\|鶯\_s*語\|近\_s*江\|零\_s*落\|越\_s*[生訴知智度]\|彼\_s*方\|祖\_s*[神父母]\|車\_s*前\|従\_s*祖\_s*[母父]\|青\_s*[梅海木]\|太\_s*\%(田\|安\_s*万\_s*侶\|上\_s*天\_s*皇\)\|巨\_s*頭\|逢\_s*[魔瀬隈坂]\|そ\_s*の\_s*他\|承\_s*知\_s*し\_s*ま\_s*し\_s*た\_s*\.\|烏\_s*[滸龍]\|t\_s*h\_s*e\_s* \_s*O\_s*b\_s*j\_s*e\_s*c\_s*t\_s* \_s*M\_s*a\_s*n\_s*a\_s*g\_s*e\_s*m\_s*e\_s*n\_s*t\_s* \_s*G\_s*r\_s*o\_s*u\_s*p\|立\_s*石\_s*電\_s*機\|職\_s*業\|楕\_s*円\|ウ\_s*\%(ィ\|ー\_s*\%(ズ\|ロ\_s*ン\)\|ロ\_s*ボ\_s*ロ\_s*ス\)\|出\_s*力\|ア\_s*\%(ワ\|ザ\_s*ー\|ウ\_s*\%([チト]\|タ\_s*ー\)\)\|基\_s*本\_s*ソ\_s*フ\_s*ト\_s*ウ\_s*ェ\_s*ア\|一\_s*\%(昨\_s*[年日]\|対\_s*一\)\|ワ\_s*ン\|ま\_s*た\_s*は\|論\_s*理\_s*和\|聖\_s*譚\_s*曲\|水\_s*中\_s*酸\_s*素\_s*破\_s*壊\_s*剤\|蛋\_s*白\_s*石\|最\_s*適\_s*化\|歌\_s*劇\|演\_s*算\_s*子\|操\_s*作\|酸\_s*素\)', - \ 'P' : '\%([本磅椪烹砲法方報舖舗歩ぽ併閉閇蔽×遍編片邉篇辺邊屁ぺ幅服風分腐布符泌匹俵憑票品筒平日犯版搬幇板払腹發発走箱拍朴駮泊博愽包放配盃敗牌杯八破羽波播張ぱ鉛Ψψぴ±+ぷΦφ├┣∝北┴‰.P%£〒・点プポ頁)(∂¶‖ペパПΠп燐πピP]\|ッ\_s*\%(ホ\_s*゚\|ヘ\_s*゚\|フ\_s*゚\|ヒ\_s*゚\|ハ\_s*゚\)\|ッ\_s*[ポペプピパ]\|っ\_s*[ぽぺぷぴぱ]\|ホ\_s*゚\|先\_s*斗\_s*町\|ヘ\_s*゚\|祕\_s*[露魯]\|フ\_s*゚\|釜\_s*山\|普\_s*魯\_s*西\|ヒ\_s*゚\|皮\_s*蛋\|光\_s*一\|ハ\_s*゚\|麺\_s*麭\|巴\_s*\%(里\|奈\_s*馬\)\|C\_s*y\_s*c\_s*l\_s*a\_s*n\_s*t\_s*h\_s*a\_s*l\_s*e\_s*s\|S\_s*y\_s*n\_s*a\_s*n\_s*t\_s*h\_s*a\_s*e\|排\_s*骨\|B\_s*r\_s*o\_s*m\_s*e\_s*l\_s*i\_s*a\_s*l\_s*e\_s*s\|L\_s*e\_s*a\_s*d\|白\_s*[板酒金]\|シ\_s*\%(ュ\_s*ー\_s*ド\|ロ\_s*シ\_s*ビ\_s*ン\)\|サ\_s*\%(ー\_s*ム\|イ\_s*\%([ズクケコ]\|ロ\_s*シ\_s*ビ\_s*ン\|リ\_s*ウ\_s*ム\|キ\_s*ッ\_s*ク\)\)\|+\_s*α\|ホ\_s*\%(ン\|ス\_s*ゲ\_s*ン\)\|ヒ\_s*ロ\_s*ポ\_s*ン\|比\_s*\%(布\|律\_s*賓\)\|フ\_s*\%(リ\_s*ジ\_s*ア\_s*ン\|レ\_s*\%(イ\_s*ジ\_s*ン\_s*グ\|ー\_s*\%(ズ\|ジ\_s*ン\_s*グ\)\)\|タ\_s*レ\_s*イ\_s*ン\|ォ\_s*\%([ーンノト]\|ボ\_s*ス\|ビ\_s*ア\|ス\_s*フ\_s*ァ\_s*ー\|ニ\_s*ー\)\|ァ\_s*\%(イ\|ラ\_s*オ\|ー\_s*\%([ジマ]\|ミ\_s*ン\_s*グ\)\|ン\_s*\%(ト\_s*ム\|タ\_s*ズ\_s*[ムマ]\)\|ル\_s*[ツス]\|レ\_s*ノ\_s*プ\_s*シ\_s*ス\)\|ィ\_s*\%([ロル]\|ジ\_s*\%(ッ\_s*ク\_s*ス\|カ\_s*ル\)\|ー\_s*ビ\_s*ー\|ッ\_s*シ\_s*ン\_s*グ\|レ\_s*モ\_s*ン\|ラ\_s*デ\_s*ル\_s*フ\_s*ィ\_s*ア\|リ\_s*\%([スーアパ]\|ッ\_s*[プパ]\|ピ\_s*\%(ン\|ー\_s*ヌ\)\)\)\|ェ\_s*\%(ー\_s*\%([ベズ]\|ジ\_s*ン\_s*グ\)\|イ\_s*ズ\|ロ\_s*モ\_s*ン\|ニ\_s*\%(ル\|ッ\_s*ク\_s*ス\|キ\_s*ア\|ー\_s*ル\)\|ノ\_s*\%(キ\_s*シ\|ー\_s*ル\)\)\)\|述\_s*語\|証\_s*明\|タ\_s*ン\_s*パ\_s*ク\_s*質\|処\_s*理\|手\_s*続\_s*き\|進\_s*行\|算\_s*譜\|利\_s*潤\|南\_s*瓜\|宣\_s*伝\|公\_s*告\|真\_s*珠\|永\_s*続\|カ\_s*リ\_s*ウ\_s*ム\|葡\_s*萄\_s*牙\|重\_s*合\_s*体\|多\_s*相\_s*型\|バ\_s*テ\_s*レ\_s*ン\|貼\_s*り\_s*付\_s*け\|論\_s*文\|偏\_s*執\_s*[狂病]\|引\_s*数\|リ\_s*ン\|p\_s*\%(T\_s*e\_s*X\|H\_s*メ\_s*ー\_s*タ\|e\_s*\%(t\_s*a\|r\_s*l\_s*ス\_s*ク\_s*リ\_s*プ\_s*ト\)\|i\_s*\%(c\_s*o\|a\_s*n\_s*\%(o\|i\_s*s\_s*s\_s*i\_s*\%(m\_s*o\|s\_s*s\_s*i\_s*m\_s*o\)\)\)\)\)', - \ 'Q' : '\%([配椚橡檪櫪栩椡椪椢湫櫟含纐柵婚屎糞癖潛潜鵠裹凹窪馘括縊踵跟頚軛珞頸首諄鞋履窟寛狐轡覆靴沓碎砕管条降件頽崩屑葛釘莖茎陸杙株杭掘崛倔鶏鐃藥擽薬樟楠髪酒梳櫛串釧與与挫籖鯀鯨鬮籤隈熊艸嚔藾叢鏈腐鎖種Ξξ臭日茸菌楔草圀邦國国髭漱嗽吻嘴喙唇脣蛇梔腔φ劫刧 空粂裙勳熏皹桾皸醺下薫燻訓勲葷君委詳钁精企鍬加咥銜桑塊某暝晦峅競昏冥眛罔鮓較比闇位鞍藏暗倉廚厨涅々〃ゝヽゞ仝ヾ曇雲蜘栗狂包俥車曲廓郭梍枢踝畔鉄鐵★●■玄蔵黒拘食徠久孔桍窶暮焼懼駒柧苦朽区眩吁繰庫垢駆鉤紅呉倶駈汲宮枸劬矩煦驅口9瞿工悔供功吼怐喰玖貢九惧来來區組奇句狗鳩酌絎嶇躯衢屈刳クくQ‘“’”♪ケ?ク¶Q]\|ッ\_s*ク\|ッ\_s*ク\|っ\_s*く\|姑\_s*娘\|箜\_s*篌\|救\_s*世\|莎\_s*草\|傀\_s*儡\|被\_s*下\_s*度\|百\_s*[濟済]\|果\_s*物\|恭\_s*敬\|9\_s*月\|長\_s*月\|秧\_s*鶏\|究\_s*竟\|釉\_s*掛\|典\_s*薬\_s*寮\|天\_s*鼠\_s*矢\|L\_s*a\_s*u\_s*r\_s*\%(a\_s*c\_s*e\_s*a\_s*e\|o\_s*i\_s*d\_s*e\_s*a\_s*e\)\|探\_s*湯\|誓\_s*湯\|球\_s*磨\|六\_s*合\|地\_s*祇\|都\_s*子\|州\_s*光\|山\_s*梔\_s*子\|崑\_s*央\|群\_s*衆\|慈\_s*姑\|旧\_s*\%(訳\|唐\_s*書\)\|c\_s*r\_s*e\_s*s\_s*c\|海\_s*月\|水\_s*[鶏母]\|内\_s*蔵\_s*助\|K\_s*r\|H\_s*e\_s*l\_s*l\_s*e\_s*b\_s*o\_s*r\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|公\_s*\%([家方卿界美事文]\|出\_s*挙\)\|佝\_s*僂\_s*病\|J\_s*u\_s*g\_s*l\_s*a\_s*n\_s*d\_s*a\_s*l\_s*e\_s*s\|胡\_s*桃\|C\_s*\%(r\|h\_s*r\_s*o\_s*m\_s*i\_s*u\_s*m\)\|R\_s*h\_s*a\_s*m\_s*n\_s*a\_s*l\_s*e\_s*s\|珠\_s*穆\_s*朗\_s*瑪\|チ\_s*ョ\_s*モ\_s*ラ\_s*ン\_s*マ\|『\_s*』\|コ\_s*\%(ー\_s*ラ\_s*ン\|ン\_s*テ\_s*ィ\_s*フ\_s*ァ\_s*イ\_s*ア\)\|問\_s*合\_s*せ\|カ\_s*\%(ザ\_s*ン\|タ\_s*ー\_s*ル\|ス\_s*バ\|ー\_s*ヌ\_s*ー\_s*ン\|ナ\_s*ー\_s*ト\|ダ\_s*フ\_s*ィ\|リ\_s*テ\|ド\_s*リ\_s*ー\_s*[ルユ]\|ル\_s*\%(チ\_s*[エェ]\|テ\_s*\%(ィ\_s*エ\|ッ\_s*ト\)\)\|ン\_s*タ\_s*[ムスン]\)\|質\_s*問\|キ\_s*\%(ト\|ブ\_s*ラ\|ホ\_s*ー\_s*テ\|ハ\_s*ー\_s*ダ\|ル\_s*\%(ト\|テ\_s*ィ\_s*ン\_s*グ\)\|ー\_s*ン\|ノ\_s*ン\|ッ\_s*シ\_s*ュ\|ュ\_s*\%(ー\|エ\_s*リ\)\)\)', - \ 'R' : '\%([ロ崘侖崙堽栄論漉祿轆碌肋勒麓禄鹿6録蘢滝潦榔簍柆鑞弄咾瑯焜朖螂螻樓隴哢實臈槞僂瓏勞薐琅朧壟撈臘郎瘻廊牢浪蝋癆聾楼篭籠狼漏朗蘆顱炉髏爐櫨蕗賂艪瀘臚枦輅鹵廬櫓轤鷺驢艫櫚滷ろレ洌鴒聆蛎糲綟儷蛉砺苓唳勵〇澪犁齡蠡囹齢黎羚戻禮祈隸茘麗隷玲伶癘励零冷例冽劣烈裂列癧轣檪櫪靂鬲瀝礫轢歴瀲鎌縺嗹漣鏈匳斂濂戀奩輦簾櫺∧聨憐恋蓮煉錬攣練聯廉連れル♪路盧泪壘縲瘰誄涙羸塁累類鏤屡縷褸婁陋璢るリ犂篥葎率慄栗淕勠六戮陸律擽畧暦掠略鏐鉚窿餾畄旒瀏苙霤瑠嶐澑瘤嚠笠榴溜硫琉留立柳粒劉隆流痳鈴麟P懍躪藺鄰棆醂菻廩躙淪厘凜霖琳悋綸淋禀稟凛鱗倫吝隣林燐臨侶絽踉梠膂虜呂慮仂力緑裲鐐椋靈魎崚鬣嶺獵楞怜暸倆繆粮廖兩蓼鷯粱輌凉輛燎瞭聊陵令梁糧諒霊龍凌遼漁亮寮⇔涼繚撩綾療量竜菱僚領喨了稜寥両料閭旅離吏履裡璃理釐痢裏俐俚莅漓利驪李哩梨詈悧罹浬籬里莉りラΛλ亂儖攬覧臠覽瀾欒襴婪繿欖檻籃巒嬾纜襤懶爛藍鸞卵濫闌嵐欄乱蘭労剌溂老埓埒猟薤辣喇樂珞犖絡駱酪烙楽落洛徠蕾賚醴罍櫑擂儡耒籟莱磊癩來礼雷頼来們裸等鑼邏蘿拉螺騾良ら右→ТбуЖВоЙЗЪжзИУЯвяшфКСлЁХпОЦЭЧФЫЩъ魯Бы露ШйхМкПгдмцНЛёаиэетАГчЬюЕЮсьнщД輪根√羅ロ々RラルレリРρΡрR]\|ッ\_s*[ロレルリラ]\|ッ\_s*[ロレルリラ]\|っ\_s*[ろれるりら]\|鱸\_s*魚\|芦\_s*[有花]\|濾\_s*[胞過紙]\|6\_s*[時月]\|水\_s*無\_s*月\|檸\_s*檬\|坩\_s*堝\|A\_s*\%(c\_s*t\_s*a\_s*e\_s*a\|p\_s*o\_s*p\_s*e\_s*t\_s*a\_s*l\_s*a\_s*e\)\|C\_s*\%(a\_s*l\_s*y\_s*c\_s*a\_s*n\_s*t\_s*h\_s*a\_s*c\_s*e\_s*a\_s*e\|h\_s*o\_s*r\_s*i\_s*p\_s*e\_s*t\_s*a\_s*l\_s*a\_s*e\)\|鯉\_s*[魚城]\|二\_s*\%(索\|翻\_s*縛\)\|V\_s*e\_s*r\_s*t\_s*i\_s*c\_s*i\_s*l\_s*l\_s*a\_s*t\_s*a\_s*e\|O\_s*r\_s*c\_s*h\_s*i\_s*d\_s*a\_s*l\_s*e\_s*s\|M\_s*i\_s*c\_s*r\_s*o\_s*s\_s*p\_s*e\_s*r\_s*m\_s*a\_s*e\|L\_s*\%([ruia]\|e\_s*i\_s*t\_s*n\_s*e\_s*r\_s*i\_s*a\_s*l\_s*e\_s*s\|A\_s*N\_s*ケ\_s*ー\_s*ブ\_s*ル\)\|海\_s*獺\|G\_s*\%(e\_s*n\_s*t\_s*i\_s*a\_s*n\_s*a\_s*l\_s*e\_s*s\|y\_s*\%(n\_s*a\_s*n\_s*d\_s*r\_s*a\_s*e\|m\_s*n\_s*o\_s*s\_s*p\_s*e\_s*r\_s*m\_s*a\_s*e\)\)\|関\_s*係\_s*デ\_s*ー\_s*タ\_s*ベ\_s*ー\_s*ス\|数\_s*理\_s*解\_s*析\_s*研\_s*究\_s*所\|京\_s*都\_s*大\_s*学\_s*数\_s*理\_s*解\_s*析\_s*研\_s*究\_s*所\|電\_s*気\_s*通\_s*信\_s*研\_s*究\_s*所\|東\_s*北\_s*大\_s*\%(学\_s*電\_s*気\_s*通\_s*信\_s*研\_s*究\_s*所\|通\_s*研\)\|限\_s*定\_s*命\_s*令\_s*セ\_s*ッ\_s*ト\_s*計\_s*算\_s*機\|範\_s*囲\|規\_s*則\|紅\_s*玉\|r\_s*u\_s*b\_s*y\_s*ス\_s*ク\_s*リ\_s*プ\_s*ト\|要\_s*求\|検\_s*索\|復\_s*帰\|返\_s*[事信]\|拒\_s*否\|反\_s*射\_s*鏡\|参\_s*\%(考\_s*文\_s*献\|照\_s*型\)\|機\_s*能\_s*回\_s*復\_s*訓\_s*練\|再\_s*帰\_s*的\|認\_s*識\|正\_s*規\_s*表\_s*現\|ア\_s*ー\_s*ル\)', - \ 'S' : '\%([ソ似杣灌傍峙毓育具供備害底苑薗園儲酘貮埆妬埣讒譏詆誹謗濡外猝率喞熄仄息足促束測側燥偬雙帚艘箒諍滝嗽剏湊蔟赱鯵抓嫂贈樔屮壯愡葱澡瀧艚勦歃叟裝竈梍蚤甑搶笊窗薮奘崢槽筝菷弉輳爭掫竃譟箱髞嗾懆瘡孀窓踪匝噪遭艙爪糟莊倉淙曹匆怱繰宋漕簇槍躁鎗箏綜喪痩藻艸葬壮操掻掃奏蹌滄争草層創蒼叢僧走惣送叛乖抑諳某橇轌艝鱒邨巽噂拵忖蹲樽孫遜存尊損囎祚租酥措踈鼡阻詛礎疏疎其蘓齟胙副鼠噌反愬蔬沿祖塑姐訴爼逸組俎徂粗麁疽甦沮咀想そセ芹鬩旃錢刋箭羶潛筌孅阡栫舩氈纎濺舛甎銛簽湶茜槧巛吮癬籤倩痊孱擶贍纖仟磚燹揃綫喘涎荐饌槫濳沾籖筅蟾牋苫專翦亘鐫僣韆箋僊殱殲闡釧賎餞羨顫甅竰糎¢陝踐銓閃潺遷銑栴川剪煽譫僉瞻践跣栓疝詮銭穿戰僭繊腺泉嬋擅淺鮮専潜扇蘚船浅線撰宣洗煎戦千忙伜倅逼蝉旋屑鱈薛椄絏洩卩泄紲攝緤褻浙竊℃窃拙摂接節楔關磧蓆晰威裼績蹐迹蹠跖跡瘠藉勣籍淅晢夕鶺潟碩惜析関席隻甥韲嘶菁瀞晟貰擠睛筬淒婿撕牲齏情萋穽躋掣腥逝惺旌蜻整靖誓制晴攻瀬急勢世競畆丗糶畝堰脊せス鯣鋭坐座李既已昴術辷全滑皇脛臑裾双英村選優営寸漱雪濯薦啌勸啜勧芒薄煤賺鼈捩筋頗亮丞甫輔佑祐介助蘇裔陶曽乃曾即則淳漁篶鑾凉漫硯雀涼鱸鮓鮨遊椙犁耒犂篦隙尽末眇縋管菅廢頽廃窘救掬尠寡粭糘菫速純鈴炭角墨隅】【鄒數陬雛芻菘嵩崇趨樞∃∵¬⌒∀÷≠Δ≫⇒∴×∨≧∫∠∇±≪∧∞≒⇔∩∂∈∬∋∝枢錘帥粹騅陲捶忰悴邃瘁翆萃榱隹誰醉遂膵燧彗綏錐穂炊翠⊥H吹粋推水酔睡棲統耡総漉饐住空寿籔醋簾棄直鋤巣栖剥磨梳擂澂掏總剃好過拗澄吸喫据壽透シ埀謐蘂蕋蕊痺褥茵鵐蔀鷸鴫霑入蔵嶌縞嶋島凋澀沫澁渋縛暫屡荵凌鎬忍簧慕舖↓襪健認啝随從从.舌扱罔虐Θθ秕粃椎椣卓尿貎肉臠猪榻黙蜆楙誠茂成繁重惻鋪陣頻閾櫁樒鹽汐潮瑟蛭疾櫛隲隰嫉蟋漆躾膝失室沒鎭沈滴雫賤鎮靜顰尓爾聢確併◇◆鹿貭叱征質卯滋撓科品鬼鍜錏錣痼凝而拉設萎栞襞吝咳爲什導怪汁験記徴著印○〇』銀城代『報調蝨濕湿七僕楚笞霜臀退斥尻冩寫舍者卸柘炙暹諜喋煮這謝鯱奢赦捨瀉妁鑠嚼抉蹟勺決釋皙爍昔斫蜥刳芍酌爵折癪笏赤灼綽石尺借赭写鷓積舎車斜釈社洙麈殳蛛娶株娵諏鬚侏繻銖卒槭蹙俶倏菽叔蓿粥戚肅淑夙粛縮取殊趣珠恤卆蟀出洲泅楸綉溲遒酬鷲駲楫緝嗅葺穐蹤繍螽讐甃萩楢逎讎鰍售岫收驟舅囚姑蓚鞦脩輯醜習羞酋聚舟秀祝袖啾拾蒐収執衆愁襲就臭蹴週終褶州宗椶棕守朱撞種修周手首狩須儁惷悛雋皴墫蕣順蠢舜旬竣峻駿逡筍春瞬俊蓁畛矧縉蔘鷏齔嗔忱譛袗譖娠疹哂脣簪怎晉鷆臻甄槙寢岑瀋箴軫榛秦襯診鉐津駸讖紳斟唇針呻蜃賑芯瞋振殿侵辛薪晨辰震宸森眞愼伸慎寝晋身進深審親臣鍼心宍信神薯墅杵岨且藷黍苜渚砠狙嶼處胥蜍苴曙背塩緒枌雎蔗庶処所書暑奬簫浹橸舂艢廂陞炒鍬庠獎梢璋將厰邵摺淞訟樅筱燮橡餉愴韶誚峭甞姓敞聲懾稍嘗腫政顳枩慯殤秤湫礁井星廠剿妝霎蛸劭觴愀升鬆樵鷦嶂醤従慫逍倡竦爿墻牆薔笙樟装肖菖≦<湘誦聳檣稱声裳)(蒋蕉嘯慴精霄鈔粧彰鏘悚蕭悄瀟哨焦憔匠鍾償瘴漿頌詔沼妾請衝唱薑庄渉奨娼床牀椒抄荘翔鉦宵傷踵銷召賞猩症昭燒猖昌少尚松晶憧紹捷象承證正笑将称焼照勝招章詳消鐘証硝掌省商昇昃禝稷寔矚謖餝稙軾嗇屬穡拭属燭贖色飾囑嘱織蝕式喰蜀殖諸初埴植食職笶姉徙誣氏思染飼祗時弑滲梔摯肢詩咨祉泗輜厶屍強貲若至師舐咫只紙施誌呰示締厮啻次賜熾趾駟漬笥贄此司如沚尸髭肆閉祀鷙諡枝篩豕滓巵始妛及弛絲浸閇斯翅緊帋揣伺為糸駛痣矢死敷恃茨旨沁嘴蚩試釶俟瓷觜廝緇祠梓址詞之使獅志歯紫雌姿柿諮占絞視嗣識子四恣阯侈幟卮凍史領竢市巳祇齒資謚耆覗脂芝痴粢孜錙耜齎自屎茲岐嗤砥仔しサ杓寤雨鮫清鞘莢騷觸触鰆椹爽騒澤沢濬掠新攫杷渫浚更士桾申白素讚戔蒜驂芟鑚爨汕潸斬餐嶄纉攅慘粲蠶跚衫彡杉秋桑…≡簒纂鯢燦珊繖棧刪卅參鑽蚕算傘3贊▼▽3参賛O散惨産酸嘸摩遉樣彷碍妨様山漣蔑貶垂鮭叫仙寞鏥寥皺淋鯆生虱鯖捌偖扨偵宿禎貞定哘誘蝎蠍授皿祥桟匙簓障囁私篠支捧笹逧迫讃鐸蛹宛真尖碕嵜前崎魁峺遮哢囀候侍核実俚説了暁達逹哲諭慧敏叡聰訓知郷恵智聡悟理杆里小棹竿紮刹箚扎皐撮搜寒捜相主盛觚柧盞盃杯榮栄倒肴魚阪界堺境酒泝逆賢坂榊猿麾挟鷺拶撒擦颯先数察薩刷札晒霽濟纔釵綵切崔砦顋樶凄靫洒衰寨悽犲碎腮哉摧灑責偲殺縡淬倖豺呵苛幸猜塞蔡栽儕采齊財臍截載孥宰済齋犀際災柴賽菜採砕妻債斎斉祭催才細鰓裁歳最埼捉縒筴簀柞辟窄咋册齪筰槊酢嘖朔柵遡溯鑿索搾昨炸冊策錯櫻桜注曝瑳冴磋搓槎刺覺莎作挿嗟紗嵯覚做削冱寂叉荒茶渣左再早避咲査嵳褪挫佐然唆蹉鎖裂醒瑣嗄螫娑砂割蓑狭狹扠些差梭射銹沙下冷捺簑插点止提柤錆乍去裟詐さ√錫す/仕指製西 ┓┐〆□■Шш上#♯щЩ添∪日⊂⊆⊃⊇文静★*☆標嗜青三聖土彩▲△悉署〜∽’‘┏┌集\探§″性セサSシソスΣсСσ秒S]\|ッ\_s*[ソセスシサ]\|ッ\_s*[ソセスシサ]\|っ\_s*[そせすしさ]\|遽\_s*走\|蕎\_s*麦\|内\_s*障\|彼\_s*杵\|諷\_s*歌\|幾\_s*許\|錚\_s*[錚々]\|十\_s*\%(路\|露\_s*盤\)\|冬\_s*青\|微\_s*風\|虚\_s*言\|宙\_s*組\|夫\_s*[夫々]\|返\_s*田\|傴\_s*僂\|U\_s*m\_s*b\_s*e\_s*l\_s*l\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\|台\_s*詞\|c\_s*e\_s*n\_s*t\_s*i\|妹\_s*尾\|嘲\_s*笑\|海\_s*象\|蒸\_s*[籠篭]\|魑\_s*魅\|凡\_s*て\|典\_s*侍\|季\_s*雄\|天\_s*[皇蛾]\|蘿\_s*蔔\|V\_s*i\_s*o\_s*l\_s*a\_s*l\_s*e\_s*s\|N\_s*y\_s*m\_s*p\_s*h\_s*a\_s*e\_s*\%(a\_s*c\_s*e\_s*a\_s*e\|o\_s*i\_s*d\_s*e\_s*a\_s*e\)\|夊\_s*繞\|隧\_s*道\|C\_s*\%(型\|言\_s*語\)\|老\_s*舗\|望\_s*潮\|飛\_s*沫\|L\_s*a\_s*\%(m\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\|b\_s*i\_s*a\_s*t\_s*a\_s*e\)\|埋\_s*葬\_s*虫\|幣\_s*原\|桎\_s*梏\|柳\_s*葉\_s*魚\|衣\_s*魚\|蠹\_s*魚\|汚\_s*点\|惠\_s*雄\|舗\_s*石\|磯\_s*城\|W\_s*i\_s*n\_s*t\_s*e\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|倭\_s*文\|閑\_s*[谷か]\|云\_s*[々云]\|明\_s*\%(々\_s*後\_s*日\|明\_s*後\_s*日\)\|7\_s*月\|7\_s*月\|4\_s*月\|4\_s*[分月]\|羊\_s*[齒歯]\|I\_s*\%(l\_s*l\_s*i\_s*c\_s*i\_s*a\_s*c\_s*e\_s*a\_s*e\|s\_s*o\_s*p\_s*y\_s*r\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\)\|不\_s*[忍知]\|後\_s*\%([輪口志目]\|込\_s*み\)\|軍\_s*鶏\|香\_s*菜\|吃\_s*逆\|蝦\_s*蛄\|輸\_s*[出贏]\|隼\_s*[朗郎]\|笋\_s*[干羹]\|縦\_s*容\|睫\_s*毛\|翡\_s*翠\|東\_s*\%(雲\|海\_s*林\)\|Z\_s*i\_s*n\_s*g\_s*i\_s*b\_s*e\_s*r\_s*a\_s*l\_s*e\_s*s\|続\_s*\%(日\_s*本\_s*\%(紀\|後\_s*紀\)\|後\_s*撰\_s*和\_s*歌\_s*集\)\|髑\_s*髏\|匣\_s*鉢\|復\_s*習\|百\_s*日\_s*紅\|胡\_s*孫\_s*眼\|←\_s*→\|霰\_s*弾\|弥\_s*生\|懺\_s*\%(法\|悔\_s*懺\_s*悔\)\|流\_s*[離石]\|蠑\_s*螺\|覇\_s*王\_s*樹\|C\_s*\%([se]\|y\_s*c\_s*a\_s*d\_s*\%(i\_s*d\_s*a\_s*e\|o\_s*\%(p\_s*s\_s*i\_s*d\_s*a\|f\_s*i\_s*l\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\)\)\|h\_s*l\_s*o\_s*r\_s*a\_s*n\_s*t\_s*h\_s*a\_s*c\_s*e\_s*a\_s*e\|言\_s*語\|D\_s*店\|型\_s*肝\_s*炎\|a\_s*\%(s\_s*s\_s*y\_s*t\_s*h\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|c\_s*t\_s*a\_s*l\_s*e\_s*s\)\)\|竹\_s*[篦刀筒]\|大\_s*角\_s*豆\|防\_s*人\|曩\_s*に\|向\_s*坂\|一\_s*昨\_s*\%(々\_s*[年日]\|昨\_s*[年日]\)\|實\_s*藤\|甘\_s*藷\|五\_s*月\|月\_s*代\|匂\_s*坂\|税\_s*所\|雑\_s*賀\|骰\_s*子\|P\_s*\%(a\_s*r\_s*i\_s*e\_s*t\_s*a\_s*l\_s*e\_s*s\|t\_s*e\_s*r\_s*i\_s*d\_s*o\_s*s\_s*p\_s*e\_s*r\_s*m\_s*\%(a\_s*l\_s*e\_s*s\|i\_s*d\_s*a\_s*e\)\|r\_s*i\_s*m\_s*u\_s*l\_s*a\_s*l\_s*e\_s*s\)\|A\_s*\%(p\_s*i\_s*a\_s*l\_s*e\_s*s\|r\_s*a\_s*l\_s*e\_s*s\|n\_s*t\_s*i\_s*m\_s*o\_s*n\_s*y\)\|s\_s*f\_s*o\_s*r\_s*z\_s*a\_s*n\_s*d\_s*o\|瑞\_s*[典西]\|B\_s*\%(r\|シ\_s*ェ\_s*ル\)\|拡\_s*張\_s*子\|s\_s*u\_s*n\|部\_s*分\|置\_s*換\|ア\_s*ン\_s*チ\_s*モ\_s*ン\|構\_s*造\_s*体\|M\_s*\%(e\_s*r\_s*c\_s*u\_s*r\_s*y\|u\_s*s\_s*a\_s*l\_s*e\_s*s\|a\_s*r\_s*q\_s*u\_s*i\_s*s\_s* \_s*d\_s*e\_s* \_s*S\_s*a\_s*d\_s*e\)\|D\_s*o\_s*n\_s*a\_s*t\_s*i\_s*o\_s*n\_s* \_s*A\_s*l\_s*p\_s*h\_s*o\_s*n\_s*s\_s*e\_s* \_s*F\_s*r\_s*a\_s*n\_s*c\_s*o\_s*i\_s*s\_s* \_s*d\_s*e\_s* \_s*S\_s*a\_s*d\_s*e\|加\_s*\%(之\|虐\_s*\%(趣\_s*味\|淫\_s*乱\_s*症\)\)\|T\_s*\%(e\_s*t\_s*r\_s*a\_s*c\_s*e\_s*n\_s*t\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\|i\_s*n\|h\_s*e\_s* \_s*S\_s*i\_s*m\_s*p\_s*l\_s*e\_s* \_s*A\_s*P\_s*I\_s* \_s*f\_s*o\_s*r\_s* \_s*e\_s*v\_s*e\_s*n\_s*t\_s*-\_s*b\_s*a\_s*s\_s*e\_s*d\_s* \_s*X\_s*M\_s*L\_s* \_s*p\_s*a\_s*r\_s*s\_s*i\_s*n\_s*g\)\|珪\_s*素\|ケ\_s*イ\_s*素\|計\_s*測\_s*自\_s*動\_s*制\_s*御\_s*学\_s*会\|ネ\_s*ッ\_s*ト\_s*サ\_s*ー\_s*ビ\_s*ス\|ザ\_s*\%(ッ\_s*ク\|ク\_s*セ\_s*ン\|ビ\_s*ー\_s*ネ\|ウ\_s*バ\_s*ー\|ワ\_s*ー\_s*ク\_s*ラ\_s*ウ\_s*ト\|ム\_s*ザ\|ル\_s*ツ\|イ\_s*\%([ルン]\|ラ\_s*ー\|デ\_s*ル\)\|ー\_s*\%([ルラ]\|メ\_s*ン\)\)\|意\_s*味\|ゼ\_s*ミ\|ナ\_s*ト\_s*リ\_s*ウ\_s*ム\|ゾ\_s*\%(ル\|ン\_s*デ\|ー\_s*\%(ム\|リ\_s*ン\_s*ゲ\_s*ン\)\|フ\_s*ィ\_s*ー\)\|ジ\_s*\%(ム\|ー\_s*\%([グク]\|メ\_s*ン\_s*[スズ]\)\|グ\_s*ム\_s*ン\_s*ト\|ン\_s*\%(メ\_s*ル\|グ\_s*シ\_s*ュ\_s*ピ\_s*ー\_s*ル\|テ\_s*ー\_s*ゼ\)\)\|エ\_s*ス\|硫\_s*黄\)', - \ 'T' : '\%([ト乕囚寅虎瀞侶靹舮供纜燭艫朋倶鞆讐讎輩伴共友巴惇沌團団暾丼飩遯燉遁豚禽鷄酉砦塞擒俘虜豐恍惚枢乏塒迚科咎篷笘攴苫鶏伽唱稱鄰隣朿棘刺整鎖處処所床享鴟鵄扉鳶嫁訥刻秋穐晨鴇鬨斎頓幄幃帷柮杤栃閼軣轟屆届咄吶凸駿祀世暁壽繁稔寿豊歳俊利敏年牘悳犢黷慝匿督徳涜∃得特儻釖盜沓納道宕嶝涛萄嶋鬧縢帑塘搨棠樋籘閙梼罩叨夲盪酘兜溏朸稻鞜荅鞳桶黨綯迯鬥擣礑櫂剳淌纛諮棹陦檮磴蘯橦抖榻嶌竇档潼吋鐙亠篤滕讀逗螳蟷稲■鼕幢滔掏當峠読饕疼淘濤籐董悼棟搭痘套=豆燈桃韜統遠騰橈冬討祷骰藤灯島橙凍刀陶糖謄唐投答等桐鍍研鎔外採盗杜荼覩人摂脱屠賭蠧圖秉觧堵兔礪疾執蚪閇熔登畄砺解睹十菟砿溶獲渡留融泊蠹穫飛磨梳妬説録冨取問途莵汢戸図止翔兎跿富塗砥肚とテ瑛晃輝衒寺忝壥靦巓霑殄、鷏躔諂廛碾沾,鷆腆囀槙轉‥:.輾填甜奠顛纒癲恬殿纏展覘篆添梃輦咥垤餮屮銕鐡耋姪跌輟迭逖荻俶廸狄鏑糴笛覿擲迪滴轍的哲敵撤剔徹鐵鉄楴嚏幀鵜羝睇汀棣騁酲柢叮嚔酊掟遉觝釘詆渟眤碵弟碇剃蹄邸締梯悌訂程底偵遞廷逓牴抵呈艇鄭涕啼庭定低照弖てツ模幹劈聾辛列貫面汁液露冷錘舶紡系艷艶寉鉉絃橡劒釼剱劔劍剣弦蔓敦鶴幣兵鉗噤鶫償桓恆典恒常夙勉務努勤拙拐抓倹嬬撮詳審爪褄妻募角晦瞑螺円呟礫具粒辻辟罪捉把閊捕寮曹首阜丘元司官柄仕掴遣攫搏疲使窄莟蕾局壷壺坪綱繋壌蝪培霾戊己伝傳鐔翼翅鍔燕唾續約皷鼓続葛綴番栂槌縋弊費序潰終墜遂鎚椎追做殲捏殱繕傍旁創造作熟机佃蹲拒欟坏鴾槻月障砲裹躑榴謹慎愼恙筒包堤痛衝尾突尽支攣就次付椄漬點津附浸繼撞憑盡継嗣搗詰積接通告連つチ吃釁巷岐衢粽粡因杠契鵆児交腟帙膣些蟄N窒斉秩父捷矗筑築逐盟税力親邇誓迩近苣尖縮鏤塵趁碪珎鎭亭抻朕狆跛闖鴆砧椿枕鎮陳珍沈賃杖找摘茶嫡着豬儲杼潴紵竚瀦躇箸墸苧緒樗楮⊥躅陟猪捗稙飭敕勅著佻髫鼎迢膓萇脹樢吊漲趙鵈輙雕鬯聽廰窕楪挺輒齠悵塚疔糶澂廳蔦晁昶甼誂微凋帖掉停諜跳眺貼鐇澄提喋頭銚ー蝶暢帳丁牒重逃鳥張弔懲肇徴嘲兆釣聴彫潮町頂調貂庁腸超挑朝丶黜綢儔廚丑※惆肘籌寵鍮冢晝蟲胄冑紬稠酎紐鑄冲沖偸宙虫]}{[厨誅鋳紂仲註駐柱注衷籀昼抽中治池岻恥散躓置耻血値夊輊遲笞千稚黹馳家蜘禿穉地魑黐乳智癡致薙褫茅踟緻痴夂知遅ちタ便党屯架椽榱樽弛蕩膤鰔鱈盥戯俵袂保躊為樣様爲袒慱彖壇覃膽疸亶靼憺餤緞憚擔褝啗檀綻攤槫站酖殫毯猯潭鄲襌賺椴摶湍湯澹†‡蛋耽W旦痰啖坦眈反C歎嘆誕胆箪譚担淡鍛短單貪探単覊栲妙戲訊攜携尋訪比畴疇類民髱樂娯恃頼愉楽喩例譬滾激斃仆垰嵶殕倒嫋旅貍狸賛敲称讃蹈踏祟湛鬪斗戰闘戦彳佇叩疂疉疊畳箍鏨違互耕畊畉掌店棚到炭辿撻闥斬燵韃巽辰+援佐扶相輔佑弼助襷髻椨誑胤種塔龍竜糺糜爛漂維伊是理禎直貞惟忠匡徒唯只窘嗜慥確胝鱆鮹凧蛸誥嶽哮茸英豪威毅猛笋筍酣雄健丈斌武靈彈珪承賚珠霊魂卵偶適環弾球玉丹謀莨束縱|盾鬣奉楯蓼縦竪城質達館忽橘舘瀑薪滝瀧峪溪渓谿谷任尭宇亨臣集昂楼小剛恭岳洪喬嵩尚孚崇尊敬孝隆貴鷹竹篁簟寶財高寳宝但柝拆倬鈬濯魄擢擇柘戳啅鐸澤綰畜企啄磔匠巧択沢逞琢蓄度宅託卓謫托拓紿軆隶殆黛帶替靆抬體躰滯碓平駘擡逮腿当怠玳諦岱鯛對颱袋戴堆態頽苔滞待代帝貸隊褪胎帯体泰退大対矯食埀断炊闌佗長強焚岔給蛇夛足賜揉閉立發躱詫太経貯起薫耐溜絶発手它朶多他勃詑垂誰撓斷裁咤点汰建堪澑田截逹侘經たЦц〜天時×型火土→都吐東上噸瓲│┃台表第木スジ∴Θθザ正ツ¨転透▲△▼▽トチ・…試端タTТ├┸┳┨┫┝┬〒┷τ┯┤┣┻Τテ┥┰т┠┴T]\|ッ\_s*[トテツチタ]\|ッ\_s*[トテツチタ]\|っ\_s*[とてつちた]\|門\_s*渡\_s*り\|薯\_s*蕷\|船\_s*尾\_s*座\|公\_s*[暁明]\|倫\_s*[子明]\|邑\_s*中\|蜻\_s*蛉\|A\_s*c\_s*o\_s*n\_s*i\_s*t\_s*u\_s*m\|蜷\_s*局\|跡\_s*[絶切]\|蜥\_s*蜴\|舎\_s*人\|馴\_s*鹿\|野\_s*老\|瓊\_s*脂\|永\_s*[遠久]\|宿\_s*直\|朱\_s*鷺\|左\_s*見\_s*右\_s*見\|朽\_s*木\|H\_s*y\_s*d\_s*r\_s*o\_s*c\_s*h\_s*a\_s*r\_s*i\_s*t\_s*a\_s*l\_s*e\_s*s\|独\_s*鈷\|季\_s*[衣道栄]\|聡\_s*[明徳]\|祈\_s*年\_s*祭\|淑\_s*[夫子]\|洞\_s*爺\|光\_s*男\|晧\_s*史\|紅\_s*娘\|瓢\_s*虫\|F\_s*e\|I\_s*r\_s*o\_s*n\|劇\_s*村\|滌\_s*除\|2\_s*×\_s*4\|石\_s*\%(蕗\|竜\_s*子\)\|心\_s*[太算]\|自\_s*\%(摸\|模\_s*和\)\|氷\_s*柱\|倩\_s*々\|黴\_s*雨\|入\_s*梅\|梅\_s*雨\|再\_s*見\|備\_s*に\|悉\_s*に\|旋\_s*[風毛]\|B\_s*a\_s*l\_s*a\_s*n\_s*o\_s*p\_s*h\_s*o\_s*r\_s*a\_s*l\_s*e\_s*s\|1\_s*\%(日\|0\_s*日\)\|1\_s*\%(日\|0\_s*日\)\|朔\_s*日\|美\_s*人\_s*局\|E\_s*\%(u\_s*p\_s*h\_s*o\_s*r\_s*b\_s*i\_s*a\_s*l\_s*e\_s*s\|r\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\)\|字\_s*\%(牌\|一\_s*色\)\|少\_s*と\|義\_s*父\|主\_s*[殿税]\|周\_s*夫\|睦\_s*子\|渠\_s*睦\_s*子\|萵\_s*苣\|身\_s*柱\|似\_s*指\|清\_s*\%(老\_s*頭\|一\_s*色\)\|青\_s*\%([幇島]\|梗\_s*菜\|椒\_s*肉\_s*絲\)\|全\_s*帯\|昌\_s*洙\|江\_s*蘇\|J\_s*i\_s*a\_s*n\_s*g\_s*s\_s*u\|焼\_s*豚\|叉\_s*焼\|察\_s*哈\_s*爾\|餃\_s*子\|雑\_s*砕\|炒\_s*[麺飯]\|北\_s*谷\|甘\_s*露\_s*子\|錯\_s*和\|総\_s*角\|一\_s*[日寸]\|植\_s*字\|金\_s*魚\_s*蝨\|魚\_s*[屋蝨]\|草\_s*石\_s*蚕\|春\_s*\%(麗\|宮\_s*坊\)\|九\_s*\%(十\_s*九\|連\_s*宝\_s*[燈灯]\)\|揺\_s*蕩\|容\_s*易\|白\_s*痴\|猶\_s*豫\|蜑\_s*民\|段\_s*銭\|蒲\_s*公\_s*英\|騨\_s*州\|M\_s*\%(e\_s*n\_s*i\_s*s\_s*p\_s*e\_s*r\_s*m\_s*a\_s*c\_s*e\_s*a\_s*e\|o\_s*n\_s*o\_s*\%(p\_s*e\_s*t\_s*a\_s*l\_s*a\_s*e\|c\_s*\%(h\_s*l\_s*a\_s*m\_s*y\_s*d\_s*e\_s*a\_s*e\|o\_s*t\_s*y\_s*l\_s*e\_s*d\_s*o\_s*n\_s*e\_s*a\_s*e\)\)\)\|仮\_s*令\|打\_s*[擲坐]\|七\_s*\%(夕\|対\_s*子\)\|活\_s*計\|方\_s*便\|無\_s*料\|黄\_s*\%(昏\|蜀\_s*葵\)\|胼\_s*胝\|章\_s*魚\|P\_s*\%(\.\_s*S\_s*\.\|o\_s*l\_s*y\_s*\%(g\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\|c\_s*a\_s*r\_s*p\_s*i\_s*c\_s*a\_s*e\)\|a\_s*n\_s*d\_s*a\_s*n\_s*a\_s*l\_s*e\_s*s\)\|壮\_s*聡\|煙\_s*草\|殺\_s*陣\|賢\_s*明\|性\_s*質\|怱\_s*ち\|亢\_s*ぶ\|堂\_s*子\|学\_s*聡\|能\_s*[文之]\|内\_s*匠\|松\_s*明\|奈\_s*子\|幇\_s*間\|切\_s*符\|デ\_s*ィ\_s*ス\|3\_s*r\_s*d\|閾\_s*値\|ソ\_s*\%(ー\_s*[トンプ]\|ロ\_s*ー\)\|ヘ\_s*ー\_s*グ\|ゼ\_s*[インムア]\|セ\_s*\%(オ\|ル\_s*マ\|ロ\_s*\%(ン\|ニ\_s*ア\_s*ス\)\|ラ\_s*ピ\_s*\%(ー\|ス\_s*ト\)\)\|シ\_s*\%(ン\|ッ\_s*ク\|ス\_s*ル\|ア\_s*タ\_s*ー\|ソ\_s*ー\_s*ラ\_s*ス\|オ\_s*ド\_s*ア\|ー\_s*[フタ]\)\|サ\_s*\%([イム]\|ミ\_s*ン\_s*グ\|ウ\_s*ザ\_s*ン\_s*ド\|ラ\_s*ブ\_s*レ\_s*ッ\_s*ド\|ー\_s*\%([ドモ]\|テ\_s*ィ\|ス\_s*ト\_s*ン\|ズ\_s*デ\_s*[イーィ]\|マ\_s*ル\)\|ッ\_s*チ\_s*ャ\_s*ー\|ン\_s*\%(ク\|ダ\_s*ー\|キ\_s*ュ\_s*ー\)\|リ\_s*ド\_s*マ\_s*イ\_s*ド\)\|ポ\_s*リ\_s*ペ\_s*プ\_s*チ\_s*ド\|三\_s*\%(和\_s*土\|連\_s*文\_s*字\)\|\\\_s*T\_s*e\_s*X\|教\_s*科\_s*書\|文\_s*字\_s*列\|t\_s*e\_s*\%(r\_s*a\|m\_s*p\_s*o\_s*r\_s*a\_s*r\_s*y\)\|用\_s*語\|電\_s*\%([視話]\|気\_s*通\_s*信\_s*研\_s*究\_s*所\)\)', - \ 'U' : '\%([ウ孳蛤礼敬恭洞鱗愛潤騒煩粳漆閏患慯悄騷恙愁呻楳梅嫐釉噂耘吽褞曇黄紜云繧慍薀蘊暈運錙怏麗羨卦憾怨恨占卜末嬉心裏浦糶瓜汝己畴畆畦疇畝踈疎宜諾奪姥腕莵兔驢鑿穿嗽魘唸促令項頷訴獺鷽嘯嘘蠕蠢動覘窺伺海台萼唱詠謌唄宴讌転詩謠謡謳疑歌葎鯏鴬鶯ヱゑゐヰ鶉疼堆踞蹲渦舂臼碓羅薄食筌槽朮肯凵魚巧茨廐廏厩鰻午甘秣孫餞馬旨冩遷寫蔚暎噐器移慈俯映写現虚美笂靭靱靫空鰾萍初蛆雲氏上後喪艮丑潮牛裡鬱中欝袿梁家内禹憂埋挧撃雨打宇得植請鵜熟績嫗攴有夘受茹泛生討羽胡右紆傴盂饂承菟飢烏攵于射倦芋賣卯享搏失齲撲兎売産膿迂浮う¨↑∪UυウуУΥU]\|武\_s*漢\|狼\_s*狽\|夏\_s*枯\_s*草\|蠎\_s*蛇\|蟒\_s*蛇\|譫\_s*言\|琅\_s*珠\|温\_s*[麺気州]\|C\_s*u\_s*c\_s*u\_s*r\_s*b\_s*i\_s*t\_s*a\_s*l\_s*e\_s*s\|自\_s*惚\|采\_s*女\|乳\_s*母\|姨\_s*捨\_s*山\|独\_s*活\|優\_s*\%(婆\_s*[塞夷]\|曇\_s*華\)\|合\_s*格\|親\_s*族\|斥\_s*候\|泡\_s*沫\|楽\_s*官\|雅\_s*楽\_s*[頭寮]\|干\_s*莉\|維\_s*納\|太\_s*秦\|護\_s*田\_s*鳥\_s*尾\|淡\_s*\%(青\|口\_s*醤\_s*油\)\|五\_s*\%(加\|月\_s*蝿\)\|稲\_s*魂\|誓\_s*約\|石\_s*\%(女\|斑\_s*魚\)\|不\_s*生\_s*女\|味\_s*酒\|苜\_s*蓿\|A\_s*r\_s*i\_s*s\_s*t\_s*o\_s*l\_s*o\_s*c\_s*h\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|伝\_s*染\|呆\_s*気\_s*者\|茴\_s*香\|外\_s*郎\|餓\_s*\%(死\|え\_s*死\_s*に\)\|裲\_s*襠\|団\_s*扇\|イ\_s*ギ\_s*リ\_s*ス\|オ\_s*マ\_s*ル\|識\_s*別\_s*不\_s*能\|共\_s*\%(用\_s*体\|有\_s*体\)\|ア\_s*\%([スン]\|グ\_s*リ\_s*ー\|ー\_s*\%(シ\_s*ュ\_s*ラ\|ジ\_s*ェ\_s*ン\_s*ト\|バ\_s*ン\)\|ル\_s*テ\_s*ィ\_s*メ\_s*ッ\_s*ト\|ポ\_s*ン\|ッ\_s*\%(プ\|パ\_s*ー\|シ\_s*ャ\_s*ー\)\)\|単\_s*\%(位\|一\_s*化\)\|ユ\_s*\%([タニー]\|ト\_s*\%(リ\_s*ロ\|レ\_s*ヒ\_s*ト\)\|リ\_s*\%(ア\|シ\_s*ー\_s*ズ\)\|プ\_s*シ\_s*ロ\_s*ン\|ネ\_s*ス\_s*コ\|ナ\_s*\%(カ\_s*イ\_s*ト\|イ\_s*テ\_s*ッ\_s*ド\)\|ビ\_s*キ\_s*\%(タ\_s*ス\|ノ\_s*ン\)\)\)', - \ 'V' : '\%([:├値V⊥版Вв↓∨ヴV]\|ッ\_s*ウ\_s*゙\|ッ\_s*ヴ\|っ\_s*ヴ\|ウ\_s*゙\|v\_s*e\_s*r\_s*s\_s*u\_s*s\|v\_s*s\_s*.\|チ\_s*ェ\_s*ロ\|ヰ\_s*タ\| \_s*ビ\_s*ク\_s*ト\_s*ー\_s*ル\|視\_s*覚\|仮\_s*想\|ニ\_s*ス\|変\_s*数\|恒\_s*真\|ワ\_s*\%(デ\_s*ィ\_s*ム\|ギ\_s*ナ\|ニ\_s*ス\|セ\_s*リ\_s*ン\|ク\_s*チ\_s*ン\|ル\_s*キ\_s*ュ\_s*ー\_s*レ\|レ\_s*リ\_s*ー\|ー\_s*ニ\_s*ャ\)\|語\_s*彙\|ボ\_s*\%(ス\_s*ト\_s*ー\_s*ク\|ン\_s*ゴ\_s*レ\|ル\_s*\%([ガボトタ]\|テ\_s*\%(ッ\_s*ク\_s*ス\|ー\_s*[ジル]\)\)\|リ\_s*ュ\_s*ー\_s*ム\|ラ\_s*ン\_s*\%(チ\|テ\_s*ィ\_s*ア\|タ\_s*リ\_s*ー\)\|レ\_s*ー\|コ\_s*ー\_s*ダ\|ー\_s*\%([ントグ]\|ル\_s*ト\|ド\_s*ビ\_s*\%(ル\|リ\_s*ア\_s*ン\)\|パ\_s*ル\|ダ\_s*フ\_s*ォ\_s*ン\|カ\_s*\%(ル\|リ\_s*ス\_s*ト\)\)\|キ\_s*ャ\_s*ブ\_s*ラ\_s*リ\|イ\_s*\%([ドス]\|ジ\_s*ャ\_s*ー\|シ\_s*ン\_s*グ\)\)\|ヘ\_s*ッ\_s*ト\|冗\_s*長\_s*な\|垂\_s*直\|フ\_s*\%(ァ\_s*\%(ン\|ド\_s*ー\_s*ツ\)\|ォ\_s*\%(ン\|ル\_s*\%(ク\|カ\_s*ー\)\)\|ェ\_s*ル\_s*メ\_s*ー\_s*ル\)\|ウ\_s*\%(ラ\_s*\%(デ\_s*ィ\_s*ミ\_s*ー\_s*ル\|ジ\_s*\%(ミ\_s*ー\_s*ル\|ー\_s*ミ\_s*ル\|オ\_s*ス\_s*ト\_s*\%(ク\|ッ\_s*ク\)\)\)\|ィ\_s*\%(ン\_s*ナ\|ル\_s*ス\)\|ォ\_s*ッ\_s*カ\|イ\_s*\%(ル\_s*ス\|ン\_s*ナ\_s*ー\)\|ェ\_s*\%(ル\_s*ギ\_s*リ\_s*ウ\_s*ス\|ヌ\_s*ス\)\)\|ビ\_s*\%([アラブバスザ]\|ガ\_s*ー\|ハ\_s*ー\_s*ラ\|タ\_s*ミ\_s*ン\|レ\_s*\%(ッ\_s*ジ\|ロ\_s*イ\)\|ビ\_s*\%(ア\_s*ン\|ッ\_s*ド\)\|ッ\_s*\%(ク\|キ\_s*ー\)\|セ\_s*ン\_s*テ\|ク\_s*\%(タ\_s*ー\|ト\_s*\%(ル\|リ\_s*[ーア]\)\)\|シ\_s*\%(ャ\_s*ス\|ソ\_s*ワ\_s*ー\_s*ズ\)\|ン\_s*\%([チス]\|ソ\_s*ン\|テ\_s*ー\_s*ジ\|セ\_s*ン\_s*ト\)\|ネ\_s*\%(ガ\_s*ー\|グ\_s*レ\_s*ッ\_s*ト\)\|ニ\_s*\%([ール]\|リ\_s*デ\_s*ン\)\|ュ\_s*ー\|エ\_s*ン\_s*チ\_s*ャ\_s*ン\|ジ\_s*\%(ャ\|ッ\_s*ト\|タ\_s*ー\|ョ\_s*\%(ン\|ナ\_s*リ\_s*ー\)\|ュ\_s*ア\_s*\%(ル\|ラ\_s*イ\_s*\%(ズ\|ゼ\_s*ー\_s*シ\_s*ョ\_s*ン\)\)\)\|ダ\_s*ル\|デ\_s*オ\|ル\_s*\%(ゴ\|ヌ\_s*ー\_s*ブ\)\|オ\_s*ラ\|リ\_s*ジ\_s*ア\_s*ン\|ィ\_s*ー\_s*ナ\_s*ス\|ー\_s*\%(ボ\|ル\_s*ス\|ク\_s*ル\|ナ\_s*ス\)\)\|ベ\_s*\%([ガラン]\|ト\_s*ナ\_s*ム\|イ\_s*ダ\_s*ー\|ー\_s*\%(ル\|ダ\_s*ー\)\|テ\_s*ラ\_s*ン\|ッ\_s*セ\_s*ル\|ス\_s*\%([トタパ]\|ビ\_s*オ\)\|ク\_s*\%(タ\|ト\_s*ル\)\|ジ\_s*タ\_s*\%(ブ\_s*ル\|リ\_s*ア\_s*ン\)\|リ\_s*\%([ィー]\|フ\_s*ァ\_s*イ\|サ\_s*イ\_s*ン\)\|ロ\_s*\%(ナ\|シ\_s*テ\_s*ィ\|ー\_s*ナ\|ニ\_s*[カク]\)\|ル\_s*\%(デ\|ベ\_s*ッ\_s*ト\|ダ\_s*ン\|レ\_s*ー\_s*ヌ\|サ\_s*\%(ー\_s*チ\|イ\_s*ユ\)\|モ\_s*ッ\_s*ト\)\|ノ\_s*ム\|ニ\_s*[スヤア]\|ネ\_s*\%(シ\_s*ャ\_s*ン\|ツ\_s*ィ\_s*ア\|チ\_s*ア\|ズ\_s*エ\_s*ラ\)\)\|バ\_s*\%([ルン]\|イ\_s*\%([アブンオ]\|パ\_s*ー\|タ\_s*\%(ル\|リ\_s*テ\_s*ィ\)\|キ\_s*ン\_s*グ\|ザ\_s*ー\|シ\_s*ャ\)\|ッ\_s*ト\|チ\_s*カ\_s*ン\|ギ\_s*ナ\|ガ\_s*ボ\_s*ン\_s*ド\|ラ\_s*\%(ナ\_s*シ\|エ\_s*テ\_s*ィ\)\|サ\_s*ロ\|ス\_s*\%(コ\|ケ\_s*ス\)\|カ\_s*ン\_s*ス\|ケ\_s*ー\_s*シ\_s*ョ\_s*ン\|キ\_s*ュ\_s*ー\_s*ム\|ウ\_s*チ\_s*ャ\_s*ー\|リ\_s*\%(ン\|エ\_s*ー\_s*シ\_s*ョ\_s*ン\|ュ\_s*ー\|ア\_s*\%(ブ\_s*ル\|ン\_s*ト\)\|ッ\_s*ド\|デ\_s*ー\_s*シ\_s*ョ\_s*ン\)\|ヌ\_s*ア\_s*ツ\|ニ\_s*\%(ラ\|ー\_s*ユ\)\|レ\_s*\%([ラー]\|ロ\_s*ン\|リ\_s*ー\|ン\_s*\%(シ\_s*ア\|チ\_s*ノ\|タ\_s*イ\_s*ン\)\)\|ー\_s*\%([ゴグ]\|チ\_s*ャ\_s*ル\|リ\_s*ト\_s*ゥ\_s*ー\_s*ド\|バ\_s*ル\|ボ\_s*ス\|ベ\_s*ナ\|テ\_s*ィ\_s*カ\_s*ル\|サ\_s*ス\|ジ\_s*\%(ン\|ニ\_s*ア\|ョ\_s*ン\)\|ノ\_s*ン\|ニ\_s*ア\|モ\_s*ン\_s*ト\|ミ\_s*\%(リ\_s*オ\_s*ン\|キ\_s*ュ\_s*ラ\_s*イ\_s*ト\)\)\|ナ\_s*\%(キ\_s*ュ\_s*ラ\_s*ー\|ジ\_s*ウ\_s*ム\)\)\|ブ\_s*\%(イ\|ラ\_s*\%(ド\|ッ\_s*ド\)\|ー\_s*ド\_s*ゥ\_s*ー\)\)', - \ 'W' : '\%([ヲヲ女翁尾汚小惜男緒牡雄をウ孳蛤礼敬恭洞鱗愛潤騒粳漆閏慯悄騷恙愁呻楳梅嫐釉噂耘吽褞曇紜云繧慍薀蘊暈運錙怏麗羨U卦憾怨恨占卜末嬉心裏浦糶瓜汝己υΥ畴畆畦疇畝踈疎宜諾奪姥莵兔驢鑿穿嗽魘唸促令項頷訴獺鷽嘯嘘蠕蠢動覘窺伺台萼唱詠謌唄宴讌転詩謠謡謳疑歌葎鯏鴬鶯ヱゑ鶉疼堆踞蹲渦舂臼碓羅薄食筌槽朮肯凵魚巧茨廐廏厩鰻午甘秣孫餞馬旨冩遷寫蔚暎噐器移慈俯映写現虚美笂靭靱靫空鰾萍初蛆氏↑上後喪艮丑潮牛裡鬱中欝袿梁家内禹憂埋挧撃雨打宇得植請鵜熟績嫗攴有夘受茹泛生討胡右紆傴盂饂承菟飢烏攵于射倦芋賣卯享搏失齲撲兎売産膿迂浮うヰ居ゐワ叫喚÷惡悪原稿嗤妾蕨童藁鞋笑灣萬豌綰万弯彎椀雲腕碗湾横往黄皇羂罠纔毫微僅患煩術伎厄禍災態業技佗王鰐忘掖弁腋譯緜腸亙道渉航弥亘棉渡綿私薈隈賄淮脇矮猥歪轍海蟠儂∪觧解頒判訣別稚若或枠惑鷲和環吾杷啝湧我涌輪破分把萵詫訳羽沸倭割話侘琶わ幅水∧波WウワW]\|ッ\_s*[ヲヱウヰワ]\|ッ\_s*[ヲヱウヰワ]\|っ\_s*[をゑうゐわ]\|乎\_s*古\_s*止\_s*点\|武\_s*漢\|狼\_s*狽\|夏\_s*枯\_s*草\|蠎\_s*蛇\|蟒\_s*蛇\|譫\_s*言\|琅\_s*珠\|温\_s*[麺気州]\|C\_s*u\_s*c\_s*u\_s*r\_s*b\_s*i\_s*t\_s*a\_s*l\_s*e\_s*s\|自\_s*惚\|采\_s*女\|乳\_s*母\|姨\_s*捨\_s*山\|独\_s*活\|優\_s*\%(婆\_s*[塞夷]\|曇\_s*華\)\|合\_s*格\|親\_s*族\|斥\_s*候\|泡\_s*沫\|楽\_s*官\|雅\_s*楽\_s*[頭寮]\|干\_s*莉\|維\_s*納\|護\_s*田\_s*鳥\_s*尾\|淡\_s*\%(青\|口\_s*醤\_s*油\)\|五\_s*\%(加\|月\_s*蝿\)\|稲\_s*魂\|誓\_s*約\|石\_s*\%(女\|斑\_s*魚\)\|不\_s*生\_s*女\|味\_s*酒\|苜\_s*蓿\|A\_s*r\_s*i\_s*s\_s*t\_s*o\_s*l\_s*o\_s*c\_s*h\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|伝\_s*染\|呆\_s*気\_s*者\|茴\_s*香\|外\_s*郎\|餓\_s*\%(死\|え\_s*死\_s*に\)\|裲\_s*襠\|団\_s*扇\|草\_s*鞋\|(\_s*笑\_s*)\|(\_s*笑\_s*)\|戦\_s*慄\|俳\_s*優\|勿\_s*忘\_s*草\|早\_s*[生稲]\|山\_s*葵\|戯\_s*奴\|度\_s*会\|Y\_s*\%(軸\|シ\_s*ャ\_s*ツ\|染\_s*色\_s*体\)\|Y\_s*\%(軸\|シ\_s*ャ\_s*ツ\|染\_s*色\_s*体\)\|華\_s*盛\_s*頓\|裙\_s*蔕\_s*菜\|理\_s*[由解]\|公\_s*魚\|病\_s*葉\|大\_s*東\_s*亜\_s*戰\_s*爭\|太\_s*\%(秦\|平\_s*洋\_s*戦\_s*争\)\|歐\_s*州\_s*大\_s*戰\|第\_s*\%(二\_s*次\_s*世\_s*界\_s*大\_s*戦\|一\_s*次\_s*世\_s*界\_s*大\_s*戦\)\|ブ\_s*ル\_s*ツ\_s*ブ\_s*ル\_s*ク\|ロ\_s*ン\_s*グ\|レ\_s*\%(ン\|イ\_s*ス\|ッ\_s*カ\_s*ー\|ス\_s*\%(ラ\_s*ー\|リ\_s*ン\_s*グ\)\)\|リ\_s*\%(ー\_s*ス\|ン\_s*ク\_s*ル\|ス\_s*ト\)\|書\_s*き\_s*込\_s*み\|ラ\_s*\%(ッ\_s*\%([プパ]\|ピ\_s*ン\_s*グ\)\|イ\_s*\%([タト]\|テ\_s*ィ\_s*ン\_s*グ\)\)\|ボ\_s*ル\_s*フ\|フ\_s*\%([ムー]\|ァ\_s*イ\_s*ル\|ィ\_s*\%(ー\_s*ト\|ッ\_s*チ\)\)\|ホ\_s*\%(エ\_s*[イーア]\|ー\_s*ル\|イ\_s*\%(ー\_s*\%(ル\|ラ\_s*ー\)\|ッ\_s*\%(プ\|ス\_s*ル\|パ\_s*ー\|ト\_s*\%(ニ\_s*ー\|マ\_s*ン\)\)\)\|ワ\_s*\%(イ\|ッ\_s*[トツ]\)\)\|ベ\_s*ル\_s*ナ\_s*ー\|w\_s*e\_s*b\_s*サ\_s*\%(イ\_s*ト\|ー\_s*\%(バ\|ビ\_s*ス\)\)\|警\_s*告\|バ\_s*ル\_s*タ\_s*ー\|ヴ\_s*\%(ュ\_s*ル\_s*ツ\_s*ブ\_s*ル\_s*ク\|ォ\_s*ル\_s*フ\|ィ\_s*\%([ーム]\|ル\_s*\%(ム\|ヘ\_s*ル\_s*ム\)\)\|ェ\_s*\%(ン\_s*ダ\_s*ー\_s*ス\|ル\_s*ナ\_s*ー\|ー\_s*バ\_s*ー\|イ\_s*ユ\)\|ァ\_s*\%(イ\_s*[ンス]\|ー\_s*グ\_s*ナ\_s*ー\|ン\_s*ダ\|ル\_s*\%(タ\_s*ー\|キ\_s*ュ\_s*ー\_s*レ\)\)\)\|ダ\_s*ブ\_s*リ\_s*ュ\_s*ー\|タ\_s*ン\_s*グ\_s*ス\_s*テ\_s*ン\|T\_s*\%(h\_s*e\_s* \_s*W\_s*o\_s*r\_s*l\_s*d\_s* \_s*W\_s*i\_s*d\_s*e\_s* \_s*W\_s*e\_s*b\_s* \_s*C\_s*o\_s*n\_s*s\_s*o\_s*r\_s*t\_s*i\_s*u\_s*m\|u\_s*n\_s*g\_s*s\_s*t\_s*e\_s*n\)\)', - \ 'X' : '\%([ォォぉェェぇゥゥぅィィぃァァぁXхХΞ×ξX]\|ッ\_s*[ォェゥィァ]\|ッ\_s*[ォェゥィァ]\|っ\_s*[ぉぇぅぃぁ]\|シ\_s*ロ\_s*\%(ホ\_s*ン\|フ\_s*ォ\_s*ン\)\|ジ\_s*オ\_s*ン\|ゼ\_s*\%(ビ\_s*ウ\_s*ス\|ロ\_s*\%(ッ\_s*ク\_s*ス\|グ\_s*ラ\_s*フ\_s*ィ\)\)\|ハ\_s*ビ\_s*エ\_s*ル\|ザ\_s*\%(ン\|ビ\_s*エ\_s*ル\)\|キ\_s*\%(シ\_s*\%(ロ\|レ\_s*ン\|リ\_s*ト\_s*ー\_s*ル\)\|セ\_s*ノ\_s*ン\|サ\_s*ン\_s*\%(チ\_s*ン\|タ\_s*ン\)\)\|E\_s*x\_s*t\_s*e\_s*n\_s*s\_s*i\_s*b\_s*l\_s*e\_s* \_s*M\_s*a\_s*r\_s*k\_s*u\_s*p\_s* \_s*L\_s*a\_s*n\_s*g\_s*u\_s*a\_s*g\_s*e\|ク\_s*\%(シ\_s*ー\|ロ\_s*ス\_s*ポ\_s*ス\_s*ト\|セ\_s*\%(ナ\_s*キ\_s*ス\|ノ\_s*フ\_s*ォ\_s*ン\)\|ザ\_s*ヴ\_s*ィ\_s*エ\|サ\_s*\%(イ\|ン\_s*\%(ト\_s*ス\|チ\_s*ッ\_s*ペ\|テ\_s*ィ\_s*ッ\_s*ペ\)\)\|リ\_s*ス\_s*マ\_s*ス\)\|エ\_s*\%(ク\_s*ス\|ッ\_s*ク\_s*ス\)\)', - \ 'Y' : '\%([ヨ艾蒿蓬娵嫁齡齢據頼弱憙歓鎧万萬過便婚汚涎捩翊緘峪杙慾欲翌翼抑米比裝粧装澱淀縦誼祥葭悦宜克純圭禎葦慶禧美淑芳喜吉義瘍樣踴榕踊燿謠廱姚慂曄瀁瑶恙蓉遙怏雍痒珱陶孕漾昜暘甬幺癢泱癰窰慵穃鷹瓔煬邀遥拗擁瑤窯徭膺窈殀曜耀庸夭揚葉蛹腰羊熔杳沃壅様妖用溶佯謡陽洋嘉宵蘇蘓甦辟奸横豫代除譽歟喚預読誉蕷輿攀余縒呼避4世譱詠丗能予撚憑餘畭酔醉與飫舁四訓選与讀よユ潤赦弛緩聴岼閖梦努纈∴故濯檠穰豐豊倖志裄之幸雪趾梼讓譲牀縁紫浴床俑犹蚰酉莠邑攸黝熊尢蝣蕕猷悒囿佳尤佑〒右郵涌祐侑游猶湧融宥夕幽悠釉友雄憂有臾渝瘉愉征諭徃遊揺逾覦茹揄由蝓兪淘結輸諛搖揃弓楡瑜踰柚油喩汰腴ゆイΗη賤鄙卑苟嫌妹湯藷芋夢艷鑪鈩彩鱗色鯆忽綺貸甍応答愈圦杁霪隱蚓寅氤酳胤飮韵尹茵贇蔭婬湮堙吋廴I音慇韻咽淫殞姻隕院允殷隠陰窟巌巖頌祝鰛鰮鰯岩磐鼾歪弑弋抱懐肬贅疣狗戌乾犬諱在坐未汝戒誡警縛今Εε曰禾稻員因蝗印嘶鰍電引躄誘動忿≦鵤錨碇怒霆雷霹凧桴筏Ιι魚菴庵雖尿荊棘茨祈祷命猯豕古伍乙鎰鴪聿軼樹慈悼愴慯労格到至傷鼬頂戴徒致鈑痛板柞砂沙些聊潔諍烈功諫勳勲勇漁諌憇=憩粹熱粋憤域閾勢勤忙急磯孰焉湶泉厳何弄苛≧鎔范啀毬訝燻息指挑拠縷絲厭營営愛幼緒遑暇糸I弌壹肆莓苺櫟著市碑鐓礎甃臀弩石犧牲犠池溢佚壱11燠鬻礇毓粥的戦戰軍幾郁一稲許否飯洟位違居姨猗斎偽噫逝医鑄痍委囲云圍ゐ挿炒彙要熨饐醫言矮往詒威懿入如僞忌彜煎逶緯韋唯莞淹胃善生恚彝惟以活蔚為猪衣倚幃斐移鮪将可偉畏五夷李渭怡貽癒依逸井慰行伊爲胆射詑矣頤熬萎良凍出椅率好揖肄痿鋳謂帷亥苡意維遺鰄異去堰容囗いヤ稚稍飲鎗鑓槍孀寡鰥Я碼傭雇闇敗吝薮藪殕脂寄宿櫓軈軅簗梁S漸鋏刃灸和柔軟窶鱧奴僕萢優柳喧宅館舘輩族鏃龠檪≒譯籥鑰蜴繹藥葯扼益厄疫躍約役訳薬疚疾岾楊谺邪薯犲豺〈《》〉山壥邸廛豢養社鑢育廉寧尉裕恭泰易休保康安靖笶八熄演谷焼彌冶⇔也輻破辭埜痩野屋家病椰爺已矢燒⇒灼妬耶遣瘠哉罷夜殺止揶辞弥やYеЕ円¥←↓↑→ёЁ━─ユヤヨЙυイЫыйΥY]\|ッ\_s*[ヨユイヤ]\|ッ\_s*[ヨユイヤ]\|っ\_s*[よゆいや]\|欧\_s*羅\_s*巴\|歐\_s*羅\_s*巴\|尸\_s*童\|蹌\_s*踉\|蹣\_s*跚\|終\_s*夜\|4\_s*\%([項者つ日]\|番\_s*目\|種\_s*類\)\|y\_s*o\_s*\%(t\_s*t\_s*a\|c\_s*t\_s*o\)\|他\_s*所\|仁\_s*史\|隆\_s*克\|尚\_s*武\|孝\_s*高\|悌\_s*也\|賀\_s*[子悟]\|彬\_s*伯\|栄\_s*伸\|宗\_s*生\|新\_s*生\|昌\_s*[美男]\|暢\_s*[子一]\|永\_s*沈\|8\_s*日\|8\_s*日\|黄\_s*泉\|左\_s*手\|百\_s*合\|L\_s*i\_s*l\_s*i\_s*\%(o\_s*p\_s*s\_s*i\_s*d\_s*a\|a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\)\|U\_s*\%(字\|タ\_s*ー\_s*ン\)\|鞦\_s*韆\|強\_s*請\|梅\_s*桃\|桜\_s*桃\|靫\_s*負\|宙\_s*美\|礼\_s*暁\|温\_s*\%(雄\|泉\_s*津\)\|長\_s*庚\|昨\_s*夜\|又\_s*木\|木\_s*綿\|E\_s*\%(u\|メ\_s*ー\_s*ル\)\|祖\_s*谷\|文\_s*身\|郎\_s*[女子]\|刺\_s*[青草]\|蕁\_s*麻\|U\_s*\%(字\|タ\_s*ー\_s*ン\|r\_s*t\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\)\|海\_s*[豚参]\|西\_s*表\|鸚\_s*哥\|影\_s*[向青]\|況\_s*ん\_s*や\|所\_s*[以縁謂]\|D\_s*i\_s*a\_s*p\_s*e\_s*n\_s*s\_s*i\_s*a\_s*l\_s*e\_s*s\|藺\_s*草\|J\_s*u\_s*\%(l\_s*i\_s*a\_s*n\_s*i\_s*a\_s*l\_s*e\_s*s\|n\_s*c\_s*a\_s*l\_s*e\_s*s\)\|田\_s*舎\|膝\_s*行\|十\_s*六\_s*夜\|寝\_s*穢\|英\_s*\%([一桃蘭]\|吉\_s*利\)\|斑\_s*鳩\|烏\_s*賊\|玉\_s*筋\_s*魚\|硫\_s*黄\|N\_s*a\_s*j\_s*a\_s*d\_s*a\_s*l\_s*e\_s*s\|牛\_s*膝\|稜\_s*威\|常\_s*春\_s*藤\|5\_s*[つ日]\|5\_s*[つ日]\|惡\_s*戲\|甚\_s*振\|潮\_s*来\|悪\_s*戯\|交\_s*喙\|小\_s*魚\|鯨\_s*魚\|細\_s*小\_s*魚\|鶏\_s*魚\|経\_s*緯\|礒\_s*[山田]\|E\_s*\%(A\_s*S\_s*T\|V\_s*E\)\|気\_s*吹\|従\_s*[妹姉弟兄]\|公\_s*孫\_s*樹\|鴨\_s*脚\_s*樹\|G\_s*\%(l\_s*u\_s*m\_s*i\_s*f\_s*l\_s*o\_s*r\_s*a\_s*e\|r\_s*a\_s*m\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\|i\_s*n\_s*k\_s*g\_s*o\_s*p\_s*s\_s*i\_s*d\_s*a\)\|銀\_s*杏\|鳶\_s*尾\|巫\_s*子\|神\_s*巫\|無\_s*花\_s*果\|睦\_s*月\|都\_s*方\_s*流\|縊\_s*[殺死首]\|蝟\_s*[集縮]\|埋\_s*け\_s*[火炭]\|不\_s*[可如]\|守\_s*宮\|燕\_s*龍\_s*茶\|両\_s*班\|流\_s*鏑\_s*馬\|柵\_s*原\|箭\_s*[田内]\|R\_s*a\_s*f\_s*f\_s*l\_s*e\_s*s\_s*i\_s*a\_s*\%(c\_s*e\_s*a\_s*e\|l\_s*e\_s*s\)\|自\_s*棄\|火\_s*傷\|徐\_s*ら\|M\_s*y\_s*r\_s*i\_s*c\_s*a\_s*l\_s*e\_s*s\|天\_s*蚕\|倭\_s*絵\|日\_s*本\_s*武\_s*尊\|大\_s*和\|T\_s*\%(h\_s*e\_s*l\_s*i\_s*g\_s*o\_s*n\_s*a\_s*l\_s*e\_s*s\|r\_s*o\_s*c\_s*h\_s*o\_s*d\_s*e\_s*n\_s*d\_s*r\_s*a\_s*c\_s*e\_s*a\_s*e\)\|香\_s*具\_s*師\|玄\_s*孫\|A\_s*r\_s*a\_s*c\_s*a\_s*l\_s*e\_s*s\|P\_s*\%(o\_s*a\_s*l\_s*e\_s*s\|l\_s*u\_s*m\_s*b\_s*a\_s*g\_s*i\_s*n\_s*a\_s*l\_s*e\_s*s\|r\_s*\%(o\_s*t\_s*e\_s*a\_s*l\_s*e\_s*s\|i\_s*n\_s*c\_s*i\_s*p\_s*e\_s*s\)\|a\_s*l\_s*m\_s*a\_s*l\_s*e\_s*s\)\|妥\_s*子\|寿\_s*[詞男]\|エ\_s*\%(ホ\_s*バ\|フ\_s*ゲ\_s*ニ\_s*ー\|レ\_s*ヴ\_s*ァ\_s*ン\|ニ\_s*セ\_s*イ\|ー\_s*ル\)\|ワ\_s*イ\)', - \ 'Z' : '\%([空損存揃園薗底足束續屬∈∋賊続粟族俗属僧慥噌梍賍臟臧贓憎像臓贈象増造添初曾反沿曽ぞ譱然苒繕禪薇千蠕∀髯禅善漸冉前全關関蝉膳錢銭絶勢噬説筮贅脆税是攻責ぜ狡詰桷寸喘鮨附◆髓蘂膸蕋惴蕊隧隋隨瑞髄随豆廚圖付津頭酢厨好図逗鶴刷ず塩嶋縞島嶌橲衄衂宍竺舳忸軸舌祖喰食直凝日實昵印闍者鮭邪蛇麝搦着惹尺鉐雀寂若弱尻稔仭糂贐潯儘仞盡刄臣侭恁進訊俥蕁迅刃靱荏甚靭燼櫁樒塵尽尋陣腎壬人敘恕耡汝莇杼茹敍蜍洳舒縟辱褥蓐溽所抒鋤徐序絮叙助釀淨疂絛繞壌諚孃瀞襄仍蟐拯疉讓聶驤生帖仗躡穰乘塲靜繩禳蕘壤遶星滌茸嬲疊如醤剩娘嬢錠静醸縄女尉饒丈成擾穣烝嫋丞場杖條条蒸貞状攘剰畳冗定浄乗情城上常譲濡得戍就嬬鷲竪讐讎懦愀咒聚隼詢徇笋凖盾楯筍篤蓴惇洵淳閏諄恂馴旬荀潤循醇巡遵順准殉純準襦誦需戌朮孰宿塾珠熟恤術述孺呪豎儒綬樹受授壽鞣狃澀揉廿拾縱中從糅从戎澁蹂神汁獸絨縦渋柔什充十獣従住銃重岻治除士染時怩至児冶璽只畤侍孳轜耳示次寿辭粫司二祀邇而慈峙爺以地塒珥迩痔死敷恃蒔磁瓷仁字尓焦膩柱似嗣子亊路史餌兒滋仕爾辞弍自茲持寺事知じ騒沢澤猿笊晒曝皿鮫山算参鏨慘竄懴殘塹巉懺嶄讒惨暫慚慙斬残実笹酒坂盛三崎嵜桜榴雜襍棹竿雑濟才西斉済劑戝剤材財罪在冴覚左咲挫藏裂醒坐蔵差冷座戯ざ→↑ЬьЪъ↓←Жжズゾ零〇〒ザZジゼзζЗΖZ]\|ッ\_s*\%(ソ\_s*゙\|セ\_s*゙\|ス\_s*゙\|シ\_s*゙\|サ\_s*゙\)\|ッ\_s*[ゾゼズジザ]\|っ\_s*[ぞぜずじざ]\|ソ\_s*゙\|簇\_s*生\|双\_s*紙\|草\_s*[履紙子]\|セ\_s*゙\|台\_s*詞\|0\_s*次\|発\_s*条\|撥\_s*条\|發\_s*条\|z\_s*e\_s*\%(t\_s*t\_s*a\|p\_s*t\_s*o\)\|世\_s*阿\_s*弥\|ス\_s*゙\|相\_s*撲\|木\_s*菟\|修\_s*法\|杜\_s*撰\|調\_s*所\|徒\_s*[罪刑]\|螟\_s*虫\|芋\_s*茎\|F\_s*i\_s*g\_s*u\_s*r\_s*e\|シ\_s*゙\|G\_s*\%(メ\_s*ン\|パ\_s*ン\)\|D\_s*y\|G\_s*\%(メ\_s*ン\|パ\_s*ン\)\|支\_s*度\|試\_s*合\|2\_s*乗\|2\_s*乗\|J\_s*\%(I\_s*S\_s*コ\_s*ー\_s*ド\|ポ\_s*ッ\_s*プ\|R\_s*東\_s*日\_s*本\)\|獅\_s*子\|甲\_s*乙\_s*丙\_s*丁\_s*戊\_s*己\_s*庚\_s*辛\_s*壬\_s*癸\|k\_s*\$\_s*_\_s*{\_s*e\_s*f\_s*f\_s*}\_s*\$\|爪\_s*哇\|射\_s*礼\|砂\_s*利\|謝\_s*花\|著\_s*語\|杓\_s*子\|深\_s*\%(秘\|大\_s*寺\)\|秦\_s*泉\_s*寺\|沈\_s*\%(香\|丁\_s*花\)\|晨\_s*朝\|濁\_s*世\|判\_s*官\|諍\_s*論\|長\_s*夜\|漏\_s*斗\|焼\_s*酎\|鐘\_s*石\|橈\_s*脚\_s*類\|承\_s*久\|朱\_s*里\|C\_s*a\_s*b\_s*o\_s*m\_s*b\_s*o\_s*i\_s*d\_s*e\_s*a\_s*e\|J\_s*\%(リ\_s*ー\_s*グ\|ポ\_s*ッ\_s*プ\|U\_s*N\_s*K\_s*O\)\|絢\_s*子\|頌\_s*偈\|数\_s*珠\|入\_s*[魂牢来洛院内水棺]\|霜\_s*月\|1\_s*\%(2\|6\_s*進\|0\_s*[進月]\|1\_s*月\|8\_s*禁\)\|師\_s*走\|極\_s*月\|紐\_s*帯\|1\_s*\%(0\|1\_s*月\|8\_s*禁\|2\_s*月\)\|サ\_s*゙\|搾\_s*菜\|蜊\_s*蛄\|粗\_s*目\|槧\_s*本\|散\_s*切\_s*り\|沙\_s*汰\|石\_s*榴\|柘\_s*榴\|細\_s*工\|亜\_s*鉛\|サ\_s*\%(モ\_s*ラ\|ン\_s*ポ\_s*ー\_s*ニ\_s*ャ\|ラ\_s*ゴ\_s*サ\)\|シ\_s*\%(タ\_s*ー\_s*ル\|オ\_s*\%(ン\|ニ\_s*\%(ス\_s*ト\|ズ\_s*ム\)\)\)\|チ\_s*\%(ク\_s*ル\_s*ス\|ア\_s*ノ\_s*ー\_s*ゼ\|ュ\_s*ー\_s*リ\_s*\%(ヒ\|ッ\_s*ヒ\)\|ャ\_s*ル\_s*ダ\_s*ッ\_s*シ\_s*ュ\|ゴ\_s*イ\_s*ネ\_s*ル\_s*ワ\_s*イ\_s*ゼ\_s*ン\)\|ツ\_s*\%(ァ\_s*\%(ラ\_s*ト\_s*ゥ\_s*ス\_s*ト\_s*ラ\|イ\_s*ト\)\|ェ\_s*\%(ナ\_s*ー\|ッ\_s*ペ\_s*リ\_s*ン\|ル\_s*マ\_s*ッ\_s*ト\)\|ィ\_s*\%(ク\_s*ル\_s*ス\|タ\_s*ー\|ー\_s*グ\_s*ラ\_s*ー\|ン\_s*\%(バ\_s*ロ\_s*ン\|マ\_s*ー\_s*マ\_s*ン\)\|ゴ\_s*イ\_s*ネ\_s*ル\)\)\)', - \ } -endfunction diff --git a/bundle/easymotion/autoload/EasyMotion/sticky_table.vim b/bundle/easymotion/autoload/EasyMotion/sticky_table.vim deleted file mode 100755 index 7e962c8..0000000 --- a/bundle/easymotion/autoload/EasyMotion/sticky_table.vim +++ /dev/null @@ -1,24 +0,0 @@ -" Saving 'cpoptions' {{{ -let s:save_cpo = &cpo -set cpo&vim -" }}} -" -let EasyMotion#sticky_table#us = { - \',' : '<', '.' : '>', '/' : '?', - \'1' : '!', '2' : '@', '3' : '#', '4' : '$', '5' : '%', - \'6' : '^', '7' : '&', '8' : '*', '9' : '(', '0' : ')', '-' : '_', '=' : '+', - \';' : ':', '[' : '{', ']' : '}', '`' : '~', "'" : "\"", '\' : '|', - \} - -let EasyMotion#sticky_table#jp = { - \',' : '<', '.' : '>', '/' : '?', - \'1' : '!', '2' : '"', '3' : '#', '4' : '$', '5' : '%', - \'6' : '&', '7' : "'", '8' : '(', '9' : ')', '0' : '_', '-' : '=', '^' : '~', - \';' : '+', ':' : '*', '[' : '{', ']' : '}', '@' : '`', '\' : '|', - \} - -" Restore 'cpoptions' {{{ -let &cpo = s:save_cpo -unlet s:save_cpo -" }}} -" vim: fdm=marker:et:ts=4:sw=4:sts=4 diff --git a/bundle/easymotion/autoload/vital.vim b/bundle/easymotion/autoload/vital.vim deleted file mode 100755 index 1004dfc..0000000 --- a/bundle/easymotion/autoload/vital.vim +++ /dev/null @@ -1,12 +0,0 @@ -function! vital#of(name) abort - let files = globpath(&runtimepath, 'autoload/vital/' . a:name . '.vital') - let file = split(files, "\n") - if empty(file) - throw 'vital: version file not found: ' . a:name - endif - let ver = readfile(file[0], 'b') - if empty(ver) - throw 'vital: invalid version file: ' . a:name - endif - return vital#_{substitute(ver[0], '\W', '', 'g')}#new() -endfunction diff --git a/bundle/easymotion/autoload/vital/_easymotion.vim b/bundle/easymotion/autoload/vital/_easymotion.vim deleted file mode 100755 index a08013a..0000000 --- a/bundle/easymotion/autoload/vital/_easymotion.vim +++ /dev/null @@ -1,304 +0,0 @@ -let s:self_version = expand(':t:r') - -" Note: The extra argument to globpath() was added in Patch 7.2.051. -let s:globpath_third_arg = v:version > 702 || v:version == 702 && has('patch51') - -let s:loaded = {} - -function! s:import(name, ...) abort - let target = {} - let functions = [] - for a in a:000 - if type(a) == type({}) - let target = a - elseif type(a) == type([]) - let functions = a - endif - unlet a - endfor - let module = s:_import(a:name) - if empty(functions) - call extend(target, module, 'keep') - else - for f in functions - if has_key(module, f) && !has_key(target, f) - let target[f] = module[f] - endif - endfor - endif - return target -endfunction - -function! s:load(...) dict abort - for arg in a:000 - let [name; as] = type(arg) == type([]) ? arg[: 1] : [arg, arg] - let target = split(join(as, ''), '\W\+') - let dict = self - while 1 <= len(target) - let ns = remove(target, 0) - if !has_key(dict, ns) - let dict[ns] = {} - endif - if type(dict[ns]) == type({}) - let dict = dict[ns] - else - unlet dict - break - endif - endwhile - - if exists('dict') - call extend(dict, s:_import(name)) - endif - unlet arg - endfor - return self -endfunction - -function! s:unload() abort - let s:loaded = {} -endfunction - -function! s:exists(name) abort - return s:_get_module_path(a:name) !=# '' -endfunction - -function! s:search(pattern) abort - let paths = s:_vital_files(a:pattern) - let modules = sort(map(paths, 's:_file2module(v:val)')) - return s:_uniq(modules) -endfunction - -function! s:expand_modules(entry, all) abort - if type(a:entry) == type([]) - let candidates = s:_concat(map(copy(a:entry), 's:search(v:val)')) - if empty(candidates) - throw printf('vital: Any of module %s is not found', string(a:entry)) - endif - if eval(join(map(copy(candidates), 'has_key(a:all, v:val)'), '+')) - let modules = [] - else - let modules = [candidates[0]] - endif - else - let modules = s:search(a:entry) - if empty(modules) - throw printf('vital: Module %s is not found', a:entry) - endif - endif - call filter(modules, '!has_key(a:all, v:val)') - for module in modules - let a:all[module] = 1 - endfor - return modules -endfunction - -function! s:_import(name) abort - if type(a:name) == type(0) - return s:_build_module(a:name) - endif - let path = s:_get_module_path(a:name) - if path ==# '' - throw 'vital: module not found: ' . a:name - endif - let sid = s:_get_sid_by_script(path) - if !sid - try - execute 'source' fnameescape(path) - catch /^Vim\%((\a\+)\)\?:E484/ - throw 'vital: module not found: ' . a:name - catch /^Vim\%((\a\+)\)\?:E127/ - " Ignore. - endtry - - let sid = s:_get_sid_by_script(path) - endif - return s:_build_module(sid) -endfunction - -function! s:_get_module_path(name) abort - if s:_is_absolute_path(a:name) && filereadable(a:name) - return a:name - endif - if a:name ==# '' - let paths = [s:self_file] - elseif a:name =~# '\v^\u\w*%(\.\u\w*)*$' - let paths = s:_vital_files(a:name) - else - throw 'vital: Invalid module name: ' . a:name - endif - - call filter(paths, 'filereadable(expand(v:val, 1))') - let path = get(paths, 0, '') - return path !=# '' ? path : '' -endfunction - -function! s:_get_sid_by_script(path) abort - let path = s:_unify_path(a:path) - for line in filter(split(s:_redir('scriptnames'), "\n"), - \ 'stridx(v:val, s:self_version) > 0') - let list = matchlist(line, '^\s*\(\d\+\):\s\+\(.\+\)\s*$') - if !empty(list) && s:_unify_path(list[2]) ==# path - return list[1] - 0 - endif - endfor - return 0 -endfunction - -function! s:_file2module(file) abort - let filename = fnamemodify(a:file, ':p:gs?[\\/]\+?/?') - let tail = matchstr(filename, 'autoload/vital/_\w\+/\zs.*\ze\.vim$') - return join(split(tail, '[\\/]\+'), '.') -endfunction - -if filereadable(expand(':r') . '.VIM') - " resolve() is slow, so we cache results. - let s:_unify_path_cache = {} - " Note: On windows, vim can't expand path names from 8.3 formats. - " So if getting full path via and $HOME was set as 8.3 format, - " vital load duplicated scripts. Below's :~ avoid this issue. - function! s:_unify_path(path) abort - if has_key(s:_unify_path_cache, a:path) - return s:_unify_path_cache[a:path] - endif - let value = tolower(fnamemodify(resolve(fnamemodify( - \ a:path, ':p')), ':~:gs?[\\/]\+?/?')) - let s:_unify_path_cache[a:path] = value - return value - endfunction -else - function! s:_unify_path(path) abort - return resolve(fnamemodify(a:path, ':p:gs?[\\/]\+?/?')) - endfunction -endif - -if s:globpath_third_arg - function! s:_runtime_files(path) abort - return split(globpath(&runtimepath, a:path, 1), "\n") - endfunction -else - function! s:_runtime_files(path) abort - return split(globpath(&runtimepath, a:path), "\n") - endfunction -endif - -let s:_vital_files_cache_runtimepath = '' -let s:_vital_files_cache = [] -function! s:_vital_files(pattern) abort - if s:_vital_files_cache_runtimepath !=# &runtimepath - let path = printf('autoload/vital/%s/**/*.vim', s:self_version) - let s:_vital_files_cache = s:_runtime_files(path) - let mod = ':p:gs?[\\/]\+?/?' - call map(s:_vital_files_cache, 'fnamemodify(v:val, mod)') - let s:_vital_files_cache_runtimepath = &runtimepath - endif - let target = substitute(a:pattern, '\.', '/', 'g') - let target = substitute(target, '\*', '[^/]*', 'g') - let regexp = printf('autoload/vital/%s/%s.vim', s:self_version, target) - return filter(copy(s:_vital_files_cache), 'v:val =~# regexp') -endfunction - -" Copy from System.Filepath -if has('win16') || has('win32') || has('win64') - function! s:_is_absolute_path(path) abort - return a:path =~? '^[a-z]:[/\\]' - endfunction -else - function! s:_is_absolute_path(path) abort - return a:path[0] ==# '/' - endfunction -endif - -function! s:_build_module(sid) abort - if has_key(s:loaded, a:sid) - return copy(s:loaded[a:sid]) - endif - let functions = s:_get_functions(a:sid) - - let prefix = '' . a:sid . '_' - let module = {} - for func in functions - let module[func] = function(prefix . func) - endfor - if has_key(module, '_vital_loaded') - let V = vital#{s:self_version}#new() - if has_key(module, '_vital_depends') - let all = {} - let modules = - \ s:_concat(map(module._vital_depends(), - \ 's:expand_modules(v:val, all)')) - call call(V.load, modules, V) - endif - try - call module._vital_loaded(V) - catch - " FIXME: Show an error message for debug. - endtry - endif - if !get(g:, 'vital_debug', 0) - call filter(module, 'v:key =~# "^\\a"') - endif - let s:loaded[a:sid] = module - return copy(module) -endfunction - -if exists('+regexpengine') - function! s:_get_functions(sid) abort - let funcs = s:_redir(printf("function /\\%%#=2^\%d_", a:sid)) - let map_pat = '' . a:sid . '_\zs\w\+' - return map(split(funcs, "\n"), 'matchstr(v:val, map_pat)') - endfunction -else - function! s:_get_functions(sid) abort - let prefix = '' . a:sid . '_' - let funcs = s:_redir('function') - let filter_pat = '^\s*function ' . prefix - let map_pat = prefix . '\zs\w\+' - return map(filter(split(funcs, "\n"), - \ 'stridx(v:val, prefix) > 0 && v:val =~# filter_pat'), - \ 'matchstr(v:val, map_pat)') - endfunction -endif - -if exists('*uniq') - function! s:_uniq(list) abort - return uniq(a:list) - endfunction -else - function! s:_uniq(list) abort - let i = len(a:list) - 1 - while 0 < i - if a:list[i] ==# a:list[i - 1] - call remove(a:list, i) - let i -= 2 - else - let i -= 1 - endif - endwhile - return a:list - endfunction -endif - -function! s:_concat(lists) abort - let result_list = [] - for list in a:lists - let result_list += list - endfor - return result_list -endfunction - -function! s:_redir(cmd) abort - let [save_verbose, save_verbosefile] = [&verbose, &verbosefile] - set verbose=0 verbosefile= - redir => res - silent! execute a:cmd - redir END - let [&verbose, &verbosefile] = [save_verbose, save_verbosefile] - return res -endfunction - -function! vital#{s:self_version}#new() abort - return s:_import('') -endfunction - -let s:self_file = s:_unify_path(expand('')) diff --git a/bundle/easymotion/autoload/vital/_easymotion/Data/List.vim b/bundle/easymotion/autoload/vital/_easymotion/Data/List.vim deleted file mode 100755 index 1b42dbf..0000000 --- a/bundle/easymotion/autoload/vital/_easymotion/Data/List.vim +++ /dev/null @@ -1,432 +0,0 @@ -" Utilities for list. - -let s:save_cpo = &cpo -set cpo&vim - -function! s:pop(list) abort - return remove(a:list, -1) -endfunction - -function! s:push(list, val) abort - call add(a:list, a:val) - return a:list -endfunction - -function! s:shift(list) abort - return remove(a:list, 0) -endfunction - -function! s:unshift(list, val) abort - return insert(a:list, a:val) -endfunction - -function! s:cons(x, xs) abort - return [a:x] + a:xs -endfunction - -function! s:conj(xs, x) abort - return a:xs + [a:x] -endfunction - -" Removes duplicates from a list. -function! s:uniq(list) abort - return s:uniq_by(a:list, 'v:val') -endfunction - -" Removes duplicates from a list. -function! s:uniq_by(list, f) abort - let list = map(copy(a:list), printf('[v:val, %s]', a:f)) - let i = 0 - let seen = {} - while i < len(list) - let key = string(list[i][1]) - if has_key(seen, key) - call remove(list, i) - else - let seen[key] = 1 - let i += 1 - endif - endwhile - return map(list, 'v:val[0]') -endfunction - -function! s:clear(list) abort - if !empty(a:list) - unlet! a:list[0 : len(a:list) - 1] - endif - return a:list -endfunction - -" Concatenates a list of lists. -" XXX: Should we verify the input? -function! s:concat(list) abort - let memo = [] - for Value in a:list - let memo += Value - endfor - return memo -endfunction - -" Take each elements from lists to a new list. -function! s:flatten(list, ...) abort - let limit = a:0 > 0 ? a:1 : -1 - let memo = [] - if limit == 0 - return a:list - endif - let limit -= 1 - for Value in a:list - let memo += - \ type(Value) == type([]) ? - \ s:flatten(Value, limit) : - \ [Value] - unlet! Value - endfor - return memo -endfunction - -" Sorts a list with expression to compare each two values. -" a:a and a:b can be used in {expr}. -function! s:sort(list, expr) abort - if type(a:expr) == type(function('function')) - return sort(a:list, a:expr) - endif - let s:expr = a:expr - return sort(a:list, 's:_compare') -endfunction - -function! s:_compare(a, b) abort - return eval(s:expr) -endfunction - -" Sorts a list using a set of keys generated by mapping the values in the list -" through the given expr. -" v:val is used in {expr} -function! s:sort_by(list, expr) abort - let pairs = map(a:list, printf('[v:val, %s]', a:expr)) - return map(s:sort(pairs, - \ 'a:a[1] ==# a:b[1] ? 0 : a:a[1] ># a:b[1] ? 1 : -1'), 'v:val[0]') -endfunction - -" Returns a maximum value in {list} through given {expr}. -" Returns 0 if {list} is empty. -" v:val is used in {expr} -function! s:max_by(list, expr) abort - if empty(a:list) - return 0 - endif - let list = map(copy(a:list), a:expr) - return a:list[index(list, max(list))] -endfunction - -" Returns a minimum value in {list} through given {expr}. -" Returns 0 if {list} is empty. -" v:val is used in {expr} -" FIXME: -0x80000000 == 0x80000000 -function! s:min_by(list, expr) abort - return s:max_by(a:list, '-(' . a:expr . ')') -endfunction - -" Returns List of character sequence between [a:from, a:to] -" e.g.: s:char_range('a', 'c') returns ['a', 'b', 'c'] -function! s:char_range(from, to) abort - return map( - \ range(char2nr(a:from), char2nr(a:to)), - \ 'nr2char(v:val)' - \) -endfunction - -" Returns true if a:list has a:value. -" Returns false otherwise. -function! s:has(list, value) abort - return index(a:list, a:value) isnot -1 -endfunction - -" Returns true if a:list[a:index] exists. -" Returns false otherwise. -" NOTE: Returns false when a:index is negative number. -function! s:has_index(list, index) abort - " Return true when negative index? - " let index = a:index >= 0 ? a:index : len(a:list) + a:index - return 0 <= a:index && a:index < len(a:list) -endfunction - -" similar to Haskell's Data.List.span -function! s:span(f, xs) abort - let border = len(a:xs) - for i in range(len(a:xs)) - if !eval(substitute(a:f, 'v:val', string(a:xs[i]), 'g')) - let border = i - break - endif - endfor - return border == 0 ? [[], copy(a:xs)] : [a:xs[: border - 1], a:xs[border :]] -endfunction - -" similar to Haskell's Data.List.break -function! s:break(f, xs) abort - return s:span(printf('!(%s)', a:f), a:xs) -endfunction - -" similar to Haskell's Data.List.takeWhile -function! s:take_while(f, xs) abort - return s:span(a:f, a:xs)[0] -endfunction - -" similar to Haskell's Data.List.partition -function! s:partition(f, xs) abort - return [filter(copy(a:xs), a:f), filter(copy(a:xs), '!(' . a:f . ')')] -endfunction - -" similar to Haskell's Prelude.all -function! s:all(f, xs) abort - return !s:any(printf('!(%s)', a:f), a:xs) -endfunction - -" similar to Haskell's Prelude.any -function! s:any(f, xs) abort - return !empty(filter(map(copy(a:xs), a:f), 'v:val')) -endfunction - -" similar to Haskell's Prelude.and -function! s:and(xs) abort - return s:all('v:val', a:xs) -endfunction - -" similar to Haskell's Prelude.or -function! s:or(xs) abort - return s:any('v:val', a:xs) -endfunction - -function! s:map_accum(expr, xs, init) abort - let memo = [] - let init = a:init - for x in a:xs - let expr = substitute(a:expr, 'v:memo', init, 'g') - let expr = substitute(expr, 'v:val', x, 'g') - let [tmp, init] = eval(expr) - call add(memo, tmp) - endfor - return memo -endfunction - -" similar to Haskell's Prelude.foldl -function! s:foldl(f, init, xs) abort - let memo = a:init - for x in a:xs - let expr = substitute(a:f, 'v:val', string(x), 'g') - let expr = substitute(expr, 'v:memo', string(memo), 'g') - unlet memo - let memo = eval(expr) - endfor - return memo -endfunction - -" similar to Haskell's Prelude.foldl1 -function! s:foldl1(f, xs) abort - if len(a:xs) == 0 - throw 'foldl1' - endif - return s:foldl(a:f, a:xs[0], a:xs[1:]) -endfunction - -" similar to Haskell's Prelude.foldr -function! s:foldr(f, init, xs) abort - return s:foldl(a:f, a:init, reverse(copy(a:xs))) -endfunction - -" similar to Haskell's Prelude.fold11 -function! s:foldr1(f, xs) abort - if len(a:xs) == 0 - throw 'foldr1' - endif - return s:foldr(a:f, a:xs[-1], a:xs[0:-2]) -endfunction - -" similar to python's zip() -function! s:zip(...) abort - return map(range(min(map(copy(a:000), 'len(v:val)'))), "map(copy(a:000), 'v:val['.v:val.']')") -endfunction - -" similar to zip(), but goes until the longer one. -function! s:zip_fill(xs, ys, filler) abort - if empty(a:xs) && empty(a:ys) - return [] - elseif empty(a:ys) - return s:cons([a:xs[0], a:filler], s:zip_fill(a:xs[1 :], [], a:filler)) - elseif empty(a:xs) - return s:cons([a:filler, a:ys[0]], s:zip_fill([], a:ys[1 :], a:filler)) - else - return s:cons([a:xs[0], a:ys[0]], s:zip_fill(a:xs[1 :], a:ys[1: ], a:filler)) - endif -endfunction - -" Inspired by Ruby's with_index method. -function! s:with_index(list, ...) abort - let base = a:0 > 0 ? a:1 : 0 - return s:zip(a:list, range(base, len(a:list)+base-1)) -endfunction - -" similar to Ruby's detect or Haskell's find. -" TODO spec and doc -function! s:find(list, default, f) abort - for x in a:list - if eval(substitute(a:f, 'v:val', string(x), 'g')) - return x - endif - endfor - return a:default -endfunction - -" Returns the index of the first element which satisfies the given expr. -function! s:find_index(xs, f, ...) abort - let len = len(a:xs) - let start = a:0 > 0 ? (a:1 < 0 ? len + a:1 : a:1) : 0 - let default = a:0 > 1 ? a:2 : -1 - if start >=# len || start < 0 - return default - endif - for i in range(start, len - 1) - if eval(substitute(a:f, 'v:val', string(a:xs[i]), 'g')) - return i - endif - endfor - return default -endfunction - -" Returns the index of the last element which satisfies the given expr. -function! s:find_last_index(xs, f, ...) abort - let len = len(a:xs) - let start = a:0 > 0 ? (a:1 < 0 ? len + a:1 : a:1) : len - 1 - let default = a:0 > 1 ? a:2 : -1 - if start >=# len || start < 0 - return default - endif - for i in range(start, 0, -1) - if eval(substitute(a:f, 'v:val', string(a:xs[i]), 'g')) - return i - endif - endfor - return default -endfunction - -" Similar to find_index but returns the list of indices satisfying the given expr. -function! s:find_indices(xs, f, ...) abort - let len = len(a:xs) - let start = a:0 > 0 ? (a:1 < 0 ? len + a:1 : a:1) : 0 - let result = [] - if start >=# len || start < 0 - return result - endif - for i in range(start, len - 1) - if eval(substitute(a:f, 'v:val', string(a:xs[i]), 'g')) - call add(result, i) - endif - endfor - return result -endfunction - -" Return non-zero if a:list1 and a:list2 have any common item(s). -" Return zero otherwise. -function! s:has_common_items(list1, list2) abort - return !empty(filter(copy(a:list1), 'index(a:list2, v:val) isnot -1')) -endfunction - -" similar to Ruby's group_by. -function! s:group_by(xs, f) abort - let result = {} - let list = map(copy(a:xs), printf('[v:val, %s]', a:f)) - for x in list - let Val = x[0] - let key = type(x[1]) !=# type('') ? string(x[1]) : x[1] - if has_key(result, key) - call add(result[key], Val) - else - let result[key] = [Val] - endif - unlet Val - endfor - return result -endfunction - -function! s:_default_compare(a, b) abort - return a:a <# a:b ? -1 : a:a ># a:b ? 1 : 0 -endfunction - -function! s:binary_search(list, value, ...) abort - let Predicate = a:0 >= 1 ? a:1 : 's:_default_compare' - let dic = a:0 >= 2 ? a:2 : {} - let start = 0 - let end = len(a:list) - 1 - - while 1 - if start > end - return -1 - endif - - let middle = (start + end) / 2 - - let compared = call(Predicate, [a:value, a:list[middle]], dic) - - if compared < 0 - let end = middle - 1 - elseif compared > 0 - let start = middle + 1 - else - return middle - endif - endwhile -endfunction - -function! s:product(lists) abort - let result = [[]] - for pool in a:lists - let tmp = [] - for x in result - let tmp += map(copy(pool), 'x + [v:val]') - endfor - let result = tmp - endfor - return result -endfunction - -function! s:permutations(list, ...) abort - if a:0 > 1 - throw 'vital: Data.List: too many arguments' - endif - let r = a:0 == 1 ? a:1 : len(a:list) - if r > len(a:list) - return [] - elseif r < 0 - throw 'vital: Data.List: {r} must be non-negative integer' - endif - let n = len(a:list) - let result = [] - for indices in s:product(map(range(r), 'range(n)')) - if len(s:uniq(indices)) == r - call add(result, map(indices, 'a:list[v:val]')) - endif - endfor - return result -endfunction - -function! s:combinations(list, r) abort - if a:r > len(a:list) - return [] - elseif a:r < 0 - throw 'vital: Data:List: {r} must be non-negative integer' - endif - let n = len(a:list) - let result = [] - for indices in s:permutations(range(n), a:r) - if s:sort(copy(indices), 'a:a - a:b') == indices - call add(result, map(indices, 'a:list[v:val]')) - endif - endfor - return result -endfunction - -let &cpo = s:save_cpo -unlet s:save_cpo - -" vim:set et ts=2 sts=2 sw=2 tw=0: diff --git a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Base.vim b/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Base.vim deleted file mode 100755 index d14514d..0000000 --- a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Base.vim +++ /dev/null @@ -1,520 +0,0 @@ -scriptencoding utf-8 -let s:save_cpo = &cpo -set cpo&vim - - -function! s:_vital_loaded(V) - let s:V = a:V - let s:String = s:V.import("Over.String") - let s:Signals = s:V.import("Over.Signals") - let s:Input = s:V.import("Over.Input") - let s:Module = s:V.import("Over.Commandline.Modules") - let s:base.variables.modules = s:Signals.make() - function! s:base.variables.modules.get_slot(val) - return a:val.slot.module - endfunction -endfunction - - -function! s:_vital_depends() - return [ -\ "Over.String", -\ "Over.Signals", -\ "Over.Input", -\ "Over.Commandline.Modules", -\ ] -endfunction - - -function! s:make(...) - let result = deepcopy(s:base) - call result.set_prompt(get(a:, 1, ":")) - call result.connect(result, "_") - return result -endfunction - - -function! s:make_plain() - return deepcopy(s:base) -endfunction - - -let s:base = { -\ "line" : {}, -\ "variables" : { -\ "prompt" : "", -\ "char" : "", -\ "input" : "", -\ "tap_key" : "", -\ "exit" : 0, -\ "keymapping" : {}, -\ "suffix" : "", -\ }, -\ "highlights" : { -\ "prompt" : "NONE", -\ "cursor" : "VitalOverCommandLineCursor", -\ "cursor_on" : "VitalOverCommandLineCursorOn", -\ "cursor_insert" : "VitalOverCommandLineOnCursor", -\ }, -\} - -if exists("s:Signals") - let s:base.variables.modules = s:Signals.make() - function! s:base.variables.modules.get_slot(val) - return a:val.slot.module - endfunction -endif - - -function! s:base.getline() - return self.line.str() -endfunction - - -function! s:base.setline(line) - return self.line.set(a:line) -endfunction - - -function! s:base.char() - return self.variables.char -endfunction - - -function! s:base.setchar(char, ...) - " 1 の場合は既に設定されていても上書きする - " 0 の場合は既に設定されていれば上書きしない - let overwrite = get(a:, 1, 1) - if overwrite || self.variables.input == self.char() - let self.variables.input = a:char - endif -endfunction - - -function! s:base.getpos() - return self.line.pos() -endfunction - - -function! s:base.setpos(pos) - return self.line.set_pos(a:pos) -endfunction - - -function! s:base.tap_keyinput(key) - let self.variables.tap_key = a:key -endfunction - - -function! s:base.untap_keyinput(key) - if self.variables.tap_key == a:key - let self.variables.tap_key = "" - return 1 - endif -endfunction - - -function! s:base.get_tap_key() - return self.variables.tap_key -endfunction - - -function! s:base.is_input(key, ...) - let prekey = get(a:, 1, "") - return self.get_tap_key() == prekey -\ && self.char() == a:key -" \ && self.char() == (prekey . a:key) -endfunction - - -function! s:base.input_key() - return self.variables.input_key -endfunction - - -function! s:base.set_prompt(prompt) - let self.variables.prompt = a:prompt -endfunction - - -function! s:base.get_prompt() - return self.variables.prompt -endfunction - - -function! s:base.set_suffix(str) - let self.variables.suffix = a:str -endfunction - - -function! s:base.get_suffix() - return self.variables.suffix -endfunction - - -function! s:base.insert(word, ...) - if a:0 - call self.line.set(a:1) - endif - call self.line.input(a:word) -endfunction - -function! s:base.forward() - return self.line.forward() -endfunction - -function! s:base.backward() - return self.line.backward() -endfunction - - -function! s:base.backward_word(...) - let pat = get(a:, 1, '\k\+\s*\|.') - return matchstr(self.backward(), '\%(' . pat . '\)$') -endfunction - - -function! s:base.connect(module, ...) - if type(a:module) == type("") - return call(self.connect, [s:Module.make(a:module)] + a:000, self) - endif - if empty(a:module) - return - endif - let name = a:0 > 0 ? a:1 : a:module.name - let slot = self.variables.modules.find_first_by("get(v:val.slot, 'name', '') == " . string(name)) - if empty(slot) - call self.variables.modules.connect({ "name" : name, "module" : a:module }) - else - let slot.slot.module = a:module - endif -" let self.variables.modules[name] = a:module -endfunction - - -function! s:base.disconnect(name) - return self.variables.modules.disconnect_by( -\ "get(v:val.slot, 'name', '') == " . string(a:name) -\ ) -" unlet self.variables.modules[a:name] -endfunction - - -function! s:base.get_module(name) - let slot = self.variables.modules.find_first_by("get(v:val.slot, 'name', '') == " . string(a:name)) - return empty(slot) ? {} : slot.slot.module -endfunction - - -function! s:base.callevent(event) - call self.variables.modules.sort_by("has_key(v:val.slot.module, 'priority') ? v:val.slot.module.priority('" . a:event . "') : 0") - return self.variables.modules.call(a:event, [self]) -" call map(filter(copy(self.variables.modules), "has_key(v:val, a:event)"), "v:val." . a:event . "(self)") -endfunction - - -function! s:base.cmap(lhs, rhs) - let self.variables.keymapping[a:lhs] = a:rhs -endfunction - - -function! s:base.cnoremap(lhs, rhs) - let self.variables.keymapping[a:lhs] = { -\ "key" : a:rhs, -\ "noremap" : 1, -\ } -endfunction - - -function! s:base.cunmap(lhs) - unlet self.variables.keymapping[a:lhs] -endfunction - - -function! s:base.keymapping() - return {} -endfunction - - -function! s:base.execute(...) - let command = get(a:, 1, self.getline()) - call self._execute(command) -" execute self.getline() -endfunction - - -function! s:base.draw() - call self.callevent("on_draw_pre") - call self.callevent("on_draw") -endfunction - - -function! s:base.exit(...) - let self.variables.exit = 1 - let self.variables.exit_code = get(a:, 1, 0) -endfunction - - -function! s:base.enable_keymapping() - let self.variables.enable_keymapping = 1 -endfunction - - -function! s:base.disable_keymapping() - let self.variables.enable_keymapping = 0 -endfunction - - -function! s:base.is_enable_keymapping() - return self.variables.enable_keymapping -endfunction - -" function! s:base.cancel() -" call self.exit(1) -" call self._on_cancel() -" endfunction - - -function! s:base.exit_code() - return self.variables.exit_code -endfunction - - -function! s:base.hl_cursor_on() - if exists("self.variables.old_guicursor") - set guicursor& - let &guicursor = self.variables.old_guicursor - unlet self.variables.old_guicursor - endif - - if exists("self.variables.old_t_ve") - let &t_ve = self.variables.old_t_ve - unlet self.variables.old_t_ve - endif -endfunction - - -function! s:base.hl_cursor_off() - if exists("self.variables.old_t_ve") - return - endif - - let self.variables.old_guicursor = &guicursor - set guicursor=n:block-NONE - let self.variables.old_t_ve = &t_ve - set t_ve= -endfunction - - -function! s:base.start(...) - let exit_code = call(self._main, a:000, self) - return exit_code -endfunction - - -function! s:base.__empty(...) -endfunction - - -function! s:base.get(...) - let Old_execute = self.execute - let self.execute = self.__empty - try - let exit_code = call(self.start, a:000, self) - if exit_code == 0 - return self.getline() - endif - finally - let self.execute = Old_execute - endtry - return "" -endfunction - - -function! s:base.input_key_stack() - return self.variables.input_key_stack -endfunction - - -function! s:base.input_key_stack_string() - return join(self.variables.input_key_stack, "") -endfunction - - -function! s:base.set_input_key_stack(stack) - let self.variables.input_key_stack = a:stack - return self.variables.input_key_stack -endfunction - - -function! s:base._init_variables() - let self.variables.tap_key = "" - let self.variables.char = "" - let self.variables.input = "" - let self.variables.exit = 0 - let self.variables.exit_code = 1 - let self.variables.enable_keymapping = 1 - let self.variables.input_key_stack = [] - let self.line = deepcopy(s:String.make()) -endfunction - - -function! s:base._init() - call self._init_variables() - call self.hl_cursor_off() - if !hlexists(self.highlights.cursor) - execute "highlight link " . self.highlights.cursor . " Cursor" - endif - if !hlexists(self.highlights.cursor_on) - execute "highlight link " . self.highlights.cursor_on . " " . self.highlights.cursor - endif - if !hlexists(self.highlights.cursor_insert) - execute "highlight " . self.highlights.cursor_insert . " cterm=underline term=underline gui=underline" - endif -endfunction - - -function! s:base._execute(command) - call self.callevent("on_execute_pre") - try - execute a:command - catch - echohl ErrorMsg - echom matchstr(v:exception, 'Vim\((\w*)\)\?:\zs.*\ze') - echohl None - call self.callevent("on_execute_failed") - finally - call self.callevent("on_execute") - endtry -endfunction - - -function! s:base._input_char(char) - let char = a:char - let self.variables.input_key = char - let self.variables.char = char - call self.setchar(self.variables.char) - call self.callevent("on_char_pre") - call self.insert(self.variables.input) - call self.callevent("on_char") -endfunction - - -function! s:base._input(input, ...) - let self.variables.input_key = a:input - if self.is_enable_keymapping() - let key = s:_unmap(self._get_keymapping(), a:input) - else - let key = a:input - endif - if key == "" - return - endif - - call self.set_input_key_stack(s:String.split_by_keys(key)) - while !(empty(self.input_key_stack()) || self._is_exit()) - call self._input_char(remove(self.input_key_stack(), 0)) - endwhile -endfunction - - -function! s:base._update() -" call self.callevent("on_update") -" if !getchar(1) -" continue -" endif -" -" call self._input(s:getchar(0)) -" call self.draw() - - call self.callevent("on_update") - call self._input(s:Input.getchar()) - if self._is_exit() - return -1 - endif - call self.draw() -endfunction - - -function! s:base._main(...) - try - call self._init() - call self.callevent("on_enter") - - call self._input(get(a:, 1, "")) - call self.draw() - while !self._is_exit() - try - if self._update() - break - endif - catch - call self.callevent("on_exception") - endtry - endwhile - catch - echohl ErrorMsg | echom v:throwpoint . " " . v:exception | echohl None - let self.variables.exit_code = -1 - finally - call self._finish() - call self.callevent("on_leave") - endtry - return self.exit_code() -endfunction - - -function! s:base._finish() - call self.hl_cursor_on() -endfunction - - -function! s:base._is_exit() - return self.variables.exit -endfunction - - -function! s:_as_key_config(config) - let base = { -\ "noremap" : 0, -\ "lock" : 0, -\ } - return type(a:config) == type({}) ? extend(base, a:config) -\ : extend(base, { -\ "key" : a:config, -\ }) -endfunction - - -function! s:_unmap(mapping, key) - let keys = s:String.split_by_keys(a:key) - if len(keys) > 1 - return join(map(keys, 's:_unmap(a:mapping, v:val)'), '') - endif - if !has_key(a:mapping, a:key) - return a:key - endif - let rhs = s:_as_key_config(a:mapping[a:key]) - let next = s:_as_key_config(get(a:mapping, rhs.key, {})) - if rhs.noremap && next.lock == 0 - return rhs.key - endif - return s:_unmap(a:mapping, rhs.key) -endfunction - - -function! s:base._get_keymapping() - let result = {} -" for module in values(self.variables.modules) - for module in self.variables.modules.slots() - if has_key(module, "keymapping") - if module isnot self - call extend(result, module.keymapping(self)) - endif - endif - endfor - return extend(extend(result, self.variables.keymapping), self.keymapping()) -endfunction - - -let &cpo = s:save_cpo -unlet s:save_cpo diff --git a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules.vim b/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules.vim deleted file mode 100755 index e7ee4b5..0000000 --- a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules.vim +++ /dev/null @@ -1,27 +0,0 @@ -scriptencoding utf-8 -let s:save_cpo = &cpo -set cpo&vim - - -function! s:_vital_loaded(V) - let s:V = a:V -endfunction - - -function! s:get(name) - if exists("s:" . a:name) - return s:{a:name} - endif - let s:{a:name} = s:V.import('Over.Commandline.Modules.' . a:name) - return s:{a:name} -endfunction - - -function! s:make(name, ...) - let module = s:get(a:name) - return call(module.make, a:000, module) -endfunction - - -let &cpo = s:save_cpo -unlet s:save_cpo diff --git a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/BufferComplete.vim b/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/BufferComplete.vim deleted file mode 100755 index 071ba45..0000000 --- a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/BufferComplete.vim +++ /dev/null @@ -1,159 +0,0 @@ -scriptencoding utf-8 -let s:save_cpo = &cpo -set cpo&vim - - -function! s:_uniq(list) - let dict = {} - for _ in a:list - let dict[_] = 0 - endfor - return keys(dict) -endfunction - - -let s:module = { -\ "name" : "BufferComplete", -\} - - -function! s:_buffer_complete() - return sort(s:_uniq(filter(split(join(getline(1, '$')), '\W'), '!empty(v:val)')), 1) -endfunction - - -function! s:_parse_line(line) - let keyword = matchstr(a:line, '\zs\w\+\ze$') - let pos = strchars(a:line) - strchars(keyword) - return [pos, keyword] -endfunction - - -function! s:_as_statusline(list, count) - if empty(a:list) - return - endif - let hl_none = "%#StatusLine#" - let hl_select = "%#StatusLineNC#" - let tail = " > " - let result = a:list[0] - let pos = 0 - for i in range(1, len(a:list)-1) - if strdisplaywidth(result . " " . a:list[i]) > &columns - len(tail) - if a:count < i - break - else - let pos = -i - endif - let result = a:list[i] - else - let result .= (" " . a:list[i]) - endif - if a:count == i - let pos = pos + i - endif - endfor - return join(map(split(result, " "), 'v:key == pos ? hl_select . v:val . hl_none : v:val')) -endfunction - - -function! s:module.get_complete_words() - return s:_buffer_complete() -endfunction - - -function! s:module.complete(cmdline) - call s:_finish() - let s:old_statusline = &statusline - - let backward = a:cmdline.backward() - let [pos, keyword] = s:_parse_line(backward) - - if !exists("s:complete") - let s:complete = self.get_complete_words() - endif - let s:complete_list = filter(copy(s:complete), 'v:val =~ ''^''.keyword') - if empty(s:complete_list) - return -1 - endif - - if pos == 0 - let backward = "" - else - let backward = join(split(backward, '\zs')[ : pos-1 ], "") - endif - let s:line = backward . a:cmdline.forward() - let s:pos = pos - call a:cmdline.setline(s:line) - - let s:count = 0 -endfunction - - -function! s:_finish() - if exists("s:old_statusline") - let &statusline = s:old_statusline - unlet s:old_statusline - redrawstatus - endif -endfunction - - -function! s:module.on_char_pre(cmdline) - if a:cmdline.is_input("(buffer-complete)") - if self.complete(a:cmdline) == -1 - call s:_finish() - call a:cmdline.setchar('') - return - endif - call a:cmdline.setchar('') - call a:cmdline.tap_keyinput("Completion") -" elseif a:cmdline.is_input("\", "Completion") - elseif a:cmdline.is_input("(buffer-complete)", "Completion") -\ || a:cmdline.is_input("\", "Completion") - call a:cmdline.setchar('') - let s:count += 1 - if s:count >= len(s:complete_list) - let s:count = 0 - endif - elseif a:cmdline.is_input("\", "Completion") - call a:cmdline.setchar('') - let s:count -= 1 - if s:count < 0 - let s:count = len(s:complete_list) - 1 - endif - else - if a:cmdline.untap_keyinput("Completion") - call a:cmdline.callevent("on_char_pre") - endif - call s:_finish() - return - endif - call a:cmdline.setline(s:line) - call a:cmdline.insert(s:complete_list[s:count], s:pos) - if len(s:complete_list) > 1 - let &statusline = s:_as_statusline(s:complete_list, s:count) - redrawstatus - endif - if len(s:complete_list) == 1 - call a:cmdline.untap_keyinput("Completion") - endif -endfunction - - -function! s:module.on_draw_pre(...) -" redrawstatus -endfunction - - -function! s:module.on_leave(cmdline) - call s:_finish() - unlet! s:complete -endfunction - -function! s:make() - return deepcopy(s:module) -endfunction - -let &cpo = s:save_cpo -unlet s:save_cpo diff --git a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/Cancel.vim b/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/Cancel.vim deleted file mode 100755 index 4f276a1..0000000 --- a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/Cancel.vim +++ /dev/null @@ -1,25 +0,0 @@ -scriptencoding utf-8 -let s:save_cpo = &cpo -set cpo&vim - -let s:module = { -\ "name" : "Cancel" -\} - -function! s:module.on_char_pre(cmdline) - if a:cmdline.is_input("\") -\ || a:cmdline.is_input("\") -" call a:cmdline.cancel() - call a:cmdline.exit(1) - call a:cmdline.setchar("") - endif -endfunction - - -function! s:make() - return deepcopy(s:module) -endfunction - - -let &cpo = s:save_cpo -unlet s:save_cpo diff --git a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/CursorMove.vim b/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/CursorMove.vim deleted file mode 100755 index fb27800..0000000 --- a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/CursorMove.vim +++ /dev/null @@ -1,43 +0,0 @@ -scriptencoding utf-8 -let s:save_cpo = &cpo -set cpo&vim - - -let s:module = { -\ "name" : "CursorMove" -\} -function! s:module.on_char_pre(cmdline) - if a:cmdline.is_input("\") - call a:cmdline.line.next() - call a:cmdline.setchar('') - elseif a:cmdline.is_input("\") - call a:cmdline.line.prev() - call a:cmdline.setchar('') - elseif a:cmdline.is_input("\") -\ || a:cmdline.is_input("\") - call a:cmdline.setline(0) - call a:cmdline.setchar('') - elseif a:cmdline.is_input("\") -\ || a:cmdline.is_input("\") - call a:cmdline.setline(a:cmdline.line.length()) - call a:cmdline.setchar('') - elseif a:cmdline.is_input("\") -\ || a:cmdline.is_input("\") - call a:cmdline.setline(strridx(a:cmdline.backward()[:-2], ' ') + 1) - call a:cmdline.setchar('') - elseif a:cmdline.is_input("\") -\ || a:cmdline.is_input("\") - let p = stridx(a:cmdline.forward()[1:], ' ') - call a:cmdline.setline(p != -1 ? a:cmdline.line.pos() + p + 2 : a:cmdline.line.length()) - call a:cmdline.setchar('') - endif -endfunction - - -function! s:make() - return deepcopy(s:module) -endfunction - - -let &cpo = s:save_cpo -unlet s:save_cpo diff --git a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/Delete.vim b/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/Delete.vim deleted file mode 100755 index 690020b..0000000 --- a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/Delete.vim +++ /dev/null @@ -1,41 +0,0 @@ -scriptencoding utf-8 -let s:save_cpo = &cpo -set cpo&vim - - -let s:module = { -\ "name" : "Delete", -\} -function! s:module.on_char_pre(cmdline) - if a:cmdline.is_input("\") -\ || a:cmdline.is_input("\") - if a:cmdline.line.length() == 0 - return a:cmdline.exit(1) - else - call a:cmdline.line.remove_prev() - call a:cmdline.setchar('') - endif - elseif a:cmdline.is_input("\") - call a:cmdline.line.remove_pos() - call a:cmdline.setchar('') - elseif a:cmdline.is_input("\") - let word = a:cmdline.backward_word() - let backward = a:cmdline.backward()[ : -strlen(word)-1 ] - call a:cmdline.setline(backward . a:cmdline.line.pos_word() . a:cmdline.forward()) - call a:cmdline.setline(strchars(backward)) - call a:cmdline.setchar('') - elseif a:cmdline.is_input("\") - call a:cmdline.setline(a:cmdline.line.pos_word() . a:cmdline.forward()) - call a:cmdline.setline(0) - call a:cmdline.setchar('') - endif -endfunction - - -function! s:make() - return deepcopy(s:module) -endfunction - - -let &cpo = s:save_cpo -unlet s:save_cpo diff --git a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/Doautocmd.vim b/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/Doautocmd.vim deleted file mode 100755 index 93ca06f..0000000 --- a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/Doautocmd.vim +++ /dev/null @@ -1,76 +0,0 @@ -scriptencoding utf-8 -let s:save_cpo = &cpo -set cpo&vim - - -let s:cache_command = {} -function! s:doautocmd_user(prefix, command) - let group = a:prefix . "-vital-over-commandline-doautocmd-dummy" - if !has_key(s:cache_command, a:command) - execute "autocmd " . group -\ . " User " . a:command." silent! execute ''" - - if v:version > 703 || v:version == 703 && has("patch438") - let s:cache_command[a:command] = "doautocmd User " . a:command - else - let s:cache_command[a:command] = "doautocmd User " . a:command - endif - endif - - execute s:cache_command[a:command] -endfunction - -let s:hooks = [ -\ "enter", -\ "leave", -\ "char", -\ "char_pre", -\ "draw", -\ "draw_pre", -\ "execute_pre", -\ "execute_failed", -\ "execute", -\ "exception", -\] - -let s:hooks_camel = [ -\ "Enter", -\ "Leave", -\ "Char", -\ "CharPre", -\ "Draw", -\ "DrawPre", -\ "ExecutePre", -\ "ExecuteFailed", -\ "Execute", -\ "Exception", -\] - - -let s:module = { -\ "name" : "Doautocmd", -\} - - -for s:i in range(len(s:hooks)) - execute join([ -\ "function! s:module.on_" . s:hooks[s:i] . "(...)", -\ " call s:doautocmd_user(self.prefix, self.prefix . " . string(s:hooks_camel[s:i]) . ")", -\ "endfunction", -\ ], "\n") -endfor - - -function! s:make(prefix) - execute "augroup " a:prefix . "-vital-over-commandline-doautocmd-dummy" - autocmd! - augroup END - - let module = deepcopy(s:module) - let module.prefix = a:prefix - return module -endfunction - - -let &cpo = s:save_cpo -unlet s:save_cpo diff --git a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/DrawCommandline.vim b/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/DrawCommandline.vim deleted file mode 100755 index 7e57887..0000000 --- a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/DrawCommandline.vim +++ /dev/null @@ -1,140 +0,0 @@ -scriptencoding utf-8 -let s:save_cpo = &cpo -set cpo&vim - -let s:module = { -\ "name" : "DrawCommandline" -\} - -let s:cmdheight = {} - -function! s:cmdheight.save() - if has_key(self, "value") - return - endif - let self.value = &cmdheight -endfunction - -function! s:cmdheight.restore() - if has_key(self, "value") - let &cmdheight = self.value - unlet self.value - endif -endfunction - - -function! s:cmdheight.get() - return self.value -endfunction - - -function! s:suffix(left, suffix) - let left_len = strdisplaywidth(a:left) - let len = &columns - left_len % &columns - let len = len + (&columns * (strdisplaywidth(a:suffix) > (len - 1))) - 1 - return repeat(" ", len - strdisplaywidth(a:suffix)) . a:suffix -" return printf("%" . len . "S", a:suffix) -endfunction - - -let s:old_width = 0 -function! s:_redraw(cmdline) - let left = a:cmdline.get_prompt() . a:cmdline.getline() . (empty(a:cmdline.line.pos_word()) ? " " : "") - let width = len(left) + 1 - - if a:cmdline.get_suffix() != "" - let width += len(s:suffix(left, a:cmdline.get_suffix())) - 1 - endif - - if &columns >= width && &columns <= s:old_width && s:old_width >= width - redraw - normal! : - elseif &columns <= width - normal! : - else - redraw - endif - let s:old_width = width - - call s:cmdheight.save() - let height = max([(width - 1) / (&columns) + 1, s:cmdheight.get()]) - if height > &cmdheight || &cmdheight > height - let &cmdheight = height - redraw - endif -endfunction - - -function! s:_as_echon(str) - return "echon " . strtrans(string(a:str)) -endfunction - - -function! s:module.on_draw_pre(cmdline) - if empty(a:cmdline.line.pos_word()) - let cursor = "echohl " . a:cmdline.highlights.cursor . " | echon ' '" - else - let cursor = "echohl " . a:cmdline.highlights.cursor_on . " | " . s:_as_echon(a:cmdline.line.pos_word()) - endif - let suffix = "" - if a:cmdline.get_suffix() != "" - let suffix = s:_as_echon(s:suffix(a:cmdline.get_prompt() . a:cmdline.getline() . repeat(" ", empty(a:cmdline.line.pos_word())), a:cmdline.get_suffix())) - endif - let self.draw_command = join([ -\ "echohl " . a:cmdline.highlights.prompt, -\ s:_as_echon(a:cmdline.get_prompt()), -\ "echohl NONE", -\ s:_as_echon(a:cmdline.backward()), -\ cursor, -\ "echohl NONE", -\ s:_as_echon(a:cmdline.forward()), -\ suffix, -\ ], " | ") - - call s:_redraw(a:cmdline) -endfunction - - -function! s:_echon(expr) - echon strtrans(a:expr) -endfunction - - -function! s:module.on_draw(cmdline) - execute self.draw_command -" execute "echohl" a:cmdline.highlights.prompt -" call s:echon(a:cmdline.get_prompt()) -" echohl NONE -" call s:echon(a:cmdline.backward()) -" if empty(a:cmdline.line.pos_word()) -" execute "echohl" a:cmdline.highlights.cursor -" call s:echon(' ') -" else -" execute "echohl" a:cmdline.highlights.cursor_on -" call s:echon(a:cmdline.line.pos_word()) -" endif -" echohl NONE -" call s:echon(a:cmdline.forward()) -" if a:cmdline.get_suffix() != "" -" call s:echon(s:suffix(a:cmdline.get_prompt() . a:cmdline.getline() . repeat(" ", empty(a:cmdline.line.pos_word())), a:cmdline.get_suffix())) -" endif -endfunction - - -function! s:module.on_execute_pre(...) - call s:cmdheight.restore() -endfunction - - -function! s:module.on_leave(...) - call s:cmdheight.restore() -endfunction - - -function! s:make() - return deepcopy(s:module) -endfunction - - -let &cpo = s:save_cpo -unlet s:save_cpo diff --git a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/ExceptionExit.vim b/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/ExceptionExit.vim deleted file mode 100755 index 08e3bbd..0000000 --- a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/ExceptionExit.vim +++ /dev/null @@ -1,22 +0,0 @@ -scriptencoding utf-8 -let s:save_cpo = &cpo -set cpo&vim - -let s:module = { -\ "name" : "ExceptionExit", -\} - - -function! s:module.on_exception(cmdline) - call a:cmdline.exit(-1) -endfunction - - -function! s:make(...) - let result = deepcopy(s:module) - let result.exit_code = get(a:, 1, 0) - return result -endfunction - -let &cpo = s:save_cpo -unlet s:save_cpo diff --git a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/ExceptionMessage.vim b/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/ExceptionMessage.vim deleted file mode 100755 index ed97fbb..0000000 --- a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/ExceptionMessage.vim +++ /dev/null @@ -1,45 +0,0 @@ -scriptencoding utf-8 -let s:save_cpo = &cpo -set cpo&vim - -let s:module = { -\ "name" : "ExceptionMessage", -\} - - -function! s:module.on_exception(cmdline) - let self.exception = v:exception - let self.throwpoint = v:throwpoint -endfunction - - -function! s:module.on_draw_pre(cmdline) - if has_key(self, "exception") - call self.message(a:cmdline) - unlet self.exception - endif -endfunction - -function! s:module.message(...) - echohl ErrorMsg - execute self.command string(self.prefix . self.throwpoint . " " . self.exception) - echohl None -endfunction - - -function! s:module.on_leave(cmdline) - if has_key(self, "exception") - call self.message(a:cmdline) - unlet self.exception - endif -endfunction - -function! s:make(...) - let result = deepcopy(s:module) - let result.prefix = get(a:, 1, "vital-over:") - let result.command = get(a:, 2, "echo") - return result -endfunction - -let &cpo = s:save_cpo -unlet s:save_cpo diff --git a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/Exit.vim b/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/Exit.vim deleted file mode 100755 index eb2638c..0000000 --- a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/Exit.vim +++ /dev/null @@ -1,25 +0,0 @@ -scriptencoding utf-8 -let s:save_cpo = &cpo -set cpo&vim - -let s:module = { -\ "name" : "Exit", -\ "exit_code" : 0 -\} - - -function! s:module.on_char_pre(cmdline) - if a:cmdline.is_input("(exit)") - call a:cmdline.setchar("") - call a:cmdline.exit(self.exit_code) - endif -endfunction - - -function! s:make() - return deepcopy(s:module) -endfunction - - -let &cpo = s:save_cpo -unlet s:save_cpo diff --git a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/History.vim b/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/History.vim deleted file mode 100755 index 14b272d..0000000 --- a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/History.vim +++ /dev/null @@ -1,60 +0,0 @@ -scriptencoding utf-8 -let s:save_cpo = &cpo -set cpo&vim - -let s:module = { -\ "name" : "History", -\ "mode" : "cmd", -\} - -function! s:module.histories() - return map(range(1, &history), 'histget(self.mode, v:val * -1)') -endfunction - -function! s:_should_match_cmdline(cmdline) - return a:cmdline.is_input("\") -\ || a:cmdline.is_input("\") -endfunction - -function! s:_reset() - let s:cmdhist = [] - let s:count = 0 - let s:is_match_mode = 0 " /: true, /: false -endfunction - -function! s:module.on_enter(...) - call s:_reset() -endfunction - -function! s:module.on_char_pre(cmdline) - if !a:cmdline.is_input("\") && !a:cmdline.is_input("\") - \ && !a:cmdline.is_input("\") && !a:cmdline.is_input("\") - call s:_reset() - return - else - if s:count == 0 && empty(s:cmdhist) - \ || s:is_match_mode != s:_should_match_cmdline(a:cmdline) - let cmdline = '^' . a:cmdline.getline() - let s:is_match_mode = s:_should_match_cmdline(a:cmdline) - let s:cmdhist = [a:cmdline.getline()] + (s:is_match_mode ? - \ filter(self.histories(), 'v:val =~ cmdline') : self.histories()) - endif - endif - call a:cmdline.setchar("") - if a:cmdline.is_input("\") || a:cmdline.is_input("\") - let s:count = max([s:count - 1, 0]) - endif - if a:cmdline.is_input("\") || a:cmdline.is_input("\") - let s:count = min([s:count + 1, len(s:cmdhist)]) - endif - call a:cmdline.setline(get(s:cmdhist, s:count, a:cmdline.getline())) -endfunction - -function! s:make(...) - let module = deepcopy(s:module) - let module.mode = get(a:, 1, "cmd") - return module -endfunction - -let &cpo = s:save_cpo -unlet s:save_cpo diff --git a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/InsertRegister.vim b/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/InsertRegister.vim deleted file mode 100755 index 73207b8..0000000 --- a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/InsertRegister.vim +++ /dev/null @@ -1,149 +0,0 @@ -scriptencoding utf-8 -let s:save_cpo = &cpo -set cpo&vim - - -function! s:_vital_loaded(V) - let s:V = a:V - let s:String = s:V.import("Over.String") -endfunction - - -function! s:_vital_depends() - return [ -\ "Over.String", -\ ] -endfunction - - -function! s:to_string(expr) - return type(a:expr) == type("") ? a:expr : string(a:expr) -endfunction - - -function! s:input(cmdline) - let CR_index = index(a:cmdline.input_key_stack(), "\") - if CR_index != -1 - let input = a:cmdline.input_key_stack_string() - let input = input[ : CR_index-1] - call a:cmdline.set_input_key_stack(a:cmdline.input_key_stack()[CR_index+1 : ]) - return eval(input) - endif - - let input_text = "" - if !empty(a:cmdline.input_key_stack()) - let input_text = a:cmdline.input_key_stack_string() - call a:cmdline.set_input_key_stack([]) - endif - - call a:cmdline.hl_cursor_on() - try - redraw - let input = input("=", input_text, "expression") - if !empty(input) - let input = s:to_string(eval(input)) - endif - catch - return "" - finally - call a:cmdline.hl_cursor_off() - endtry - return input -endfunction - - -let s:module = { -\ "name" : "InsertRegister" -\} - - - -function! s:module.reset() - let self.cword = expand("") - let self.cWORD = expand("") - let self.cfile = expand("") -endfunction - -function! s:module.on_enter(...) - call self.reset() -" let self.prefix_key = "" -endfunction - - -function! s:get_cmdline_cword(backward, cword) -" let backward = matchstr(a:backward, '.\{-}\zs\k\+$') - let backward = a:backward - if &incsearch == 0 || a:cword == "" || a:backward == "" || s:String.index(a:cword, backward) != 0 - return a:cword - endif - return a:cword[len(backward) : ] -endfunction - - -function! s:module.on_char_pre(cmdline) - if a:cmdline.is_input("\") - call a:cmdline.setchar('"') - let self.prefix_key = a:cmdline.input_key() - let self.old_line = a:cmdline.getline() - let self.old_pos = a:cmdline.getpos() - return - elseif exists("self.prefix_key") -\ && a:cmdline.get_tap_key() == self.prefix_key - call a:cmdline.setline(self.old_line) - call a:cmdline.setpos(self.old_pos) - let char = a:cmdline.input_key() - if char =~ '^[0-9a-zA-z.%#:/"\-*+]$' - let register = tr(getreg(char), "\n", "\r") - call a:cmdline.setchar(register) - elseif char == "=" - call a:cmdline.setchar(s:input(a:cmdline)) - elseif char == "\" - call a:cmdline.setchar(s:get_cmdline_cword(a:cmdline.backward_word(), self.cword)) - elseif char == "\" - call a:cmdline.setchar(self.cWORD) - elseif char == "\" - call a:cmdline.setchar(self.cfile) - elseif char == "\" - call a:cmdline.setchar('"') - else - call a:cmdline.setchar("") - endif -" elseif a:cmdline.is_input('=', self.prefix_key) -" call a:cmdline.setchar(s:input(a:cmdline)) -" elseif a:cmdline.is_input("\", self.prefix_key) -" call a:cmdline.setchar(self.cword) -" elseif a:cmdline.is_input("\", self.prefix_key) -" call a:cmdline.setchar(self.cWORD) -" elseif a:cmdline.is_input("\", self.prefix_key) -" call a:cmdline.setchar(self.cfile) -" elseif a:cmdline.is_input("\", self.prefix_key) -" call a:cmdline.setchar('"') -" else -" call a:cmdline.setchar("") -" endif - endif -endfunction - - -function! s:module.on_char(cmdline) - if a:cmdline.is_input("\") - call a:cmdline.tap_keyinput(self.prefix_key) - call a:cmdline.disable_keymapping() - call a:cmdline.setpos(a:cmdline.getpos()-1) - else - if exists("self.prefix_key") - call a:cmdline.untap_keyinput(self.prefix_key) - call a:cmdline.enable_keymapping() - unlet! self.prefix_key - endif - endif -endfunction - - - -function! s:make() - return deepcopy(s:module) -endfunction - -let &cpo = s:save_cpo -unlet s:save_cpo diff --git a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/KeyMapping.vim b/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/KeyMapping.vim deleted file mode 100755 index a0acf93..0000000 --- a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/KeyMapping.vim +++ /dev/null @@ -1,118 +0,0 @@ -scriptencoding utf-8 -let s:save_cpo = &cpo -set cpo&vim - - -function! s:_vital_loaded(V) - let s:Keymapping = a:V.import("Over.Keymapping") -endfunction - - -function! s:_vital_depends() - return [ -\ "Over.Keymapping", -\ ] -endfunction - - -let s:emacs = { -\ "name" : "KeyMapping_emacs_like" -\} - -function! s:emacs.keymapping(cmdline) - return { -\ "\" : { -\ "key" : "\", -\ "noremap" : 1, -\ "lock" : 1, -\ }, -\ "\" : { -\ "key" : "\", -\ "noremap" : 1, -\ "lock" : 1, -\ }, -\ "\" : { -\ "key" : "\", -\ "noremap" : 1, -\ "lock" : 1, -\ }, -\ "\" : { -\ "key" : "\", -\ "noremap" : 1, -\ "lock" : 1, -\ }, -\ "\" : { -\ "key" : "\", -\ "noremap" : 1, -\ "lock" : 1, -\ }, -\ "\" : { -\ "key" : "\", -\ "noremap" : 1, -\ "lock" : 1, -\ }, -\ "\" : { -\ "key" : "\", -\ "noremap" : 1, -\ "lock" : 1, -\ }, -\ "\" : { -\ "key" : "\", -\ "noremap" : 1, -\ "lock" : 1, -\ }, -\ "\" : { -\ "key" : "\", -\ "noremap" : 1, -\ "lock" : 1, -\ }, -\ "\" : { -\ "key" : "\", -\ "noremap" : 1, -\ "lock" : 1, -\ }, -\ } -endfunction - - -function! s:make_emacs() - return deepcopy(s:emacs) -endfunction - - -let s:vim_cmdline_mapping = { -\ "name" : "KeyMapping_vim_cmdline_mapping", -\ "_cmaps" : {} -\} - -function! s:_auto_cmap() - let cmaps = {} - let cmap_info = s:Keymapping.cmap_rhss(0, 1) - " vital-over currently doesn't support nor mappings - for c in filter(cmap_info, "v:val['expr'] ==# 0 && v:val['buffer'] ==# 0") - let cmaps[s:Keymapping.escape_key(c['lhs'])] = { - \ 'noremap' : c['noremap'], - \ 'key' : s:Keymapping.escape_key(c['rhs']), - \ } - endfor - return cmaps -endfunction - - -function! s:vim_cmdline_mapping.on_enter(cmdline) - let self._cmaps = s:_auto_cmap() -endfunction - - -function! s:vim_cmdline_mapping.keymapping(cmdline) - return self._cmaps -endfunction - -function! s:make_vim_cmdline_mapping() - return deepcopy(s:vim_cmdline_mapping) -endfunction - - - -let &cpo = s:save_cpo -unlet s:save_cpo diff --git a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/NoInsert.vim b/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/NoInsert.vim deleted file mode 100755 index 64d2b65..0000000 --- a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/NoInsert.vim +++ /dev/null @@ -1,41 +0,0 @@ -scriptencoding utf-8 -let s:save_cpo = &cpo -set cpo&vim - -let s:module = { -\ "name" : "NoInsert", -\ "chars" : [] -\} - - -function! s:module.is_no_insert(char) - return index(self.chars, a:char) >= 0 -endfunction - - -function! s:module.on_char_pre(cmdline) - if self.is_no_insert(a:cmdline.char()) -\ && a:cmdline.char() == a:cmdline.variables.input - call a:cmdline.setchar("", 0) - endif -endfunction - - -function! s:make(chars) - let module = deepcopy(s:module) - let module.chars = type(a:chars) == type([]) ? a:chars : [a:chars] - return module -endfunction - - -function! s:make_special_chars() - let module = s:make([]) - function! module.is_no_insert(char) - return char2nr(a:char) == 128 || char2nr(a:char) < 27 - endfunction - return module -endfunction - - -let &cpo = s:save_cpo -unlet s:save_cpo diff --git a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/Paste.vim b/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/Paste.vim deleted file mode 100755 index 6b1a99b..0000000 --- a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/Paste.vim +++ /dev/null @@ -1,25 +0,0 @@ -scriptencoding utf-8 -let s:save_cpo = &cpo -set cpo&vim - - -let s:module = { -\ "name" : "Paste" -\} - -function! s:module.on_char_pre(cmdline) - if a:cmdline.is_input("(paste)") - let register = v:register == "" ? '"' : v:register - call a:cmdline.insert(tr(getreg("*"), "\n", "\r")) - call a:cmdline.setchar('') - endif -endfunction - - -function! s:make() - return deepcopy(s:module) -endfunction - - -let &cpo = s:save_cpo -unlet s:save_cpo diff --git a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/Redraw.vim b/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/Redraw.vim deleted file mode 100755 index 480ed21..0000000 --- a/bundle/easymotion/autoload/vital/_easymotion/Over/Commandline/Modules/Redraw.vim +++ /dev/null @@ -1,57 +0,0 @@ -scriptencoding utf-8 -let s:save_cpo = &cpo -set cpo&vim - - -let s:module = { -\ "name" : "Redraw", -\} - -function! s:module.on_execute_pre(cmdline) - call self.redraw(a:cmdline) -endfunction - -function! s:module.on_enter(...) - let self.is_execute = 0 -endfunction - -function! s:module.on_execute(...) - let self.is_execute = 1 -endfunction - -function! s:module.on_execute_failed(...) - let self.is_execute = 0 -endfunction - -function! s:module.on_leave(cmdline) - if self.is_execute == 0 && a:cmdline.exit_code() != -1 - call self.redraw(a:cmdline) - endif -endfunction - - -" function! s:module.on_draw_pre(cmdline) -" call self.redraw(a:cmdline) -" endfunction - - -function! s:module.redraw(cmdline) - redraw - " Workaround for the :set cedit= - " https://github.com/osyo-manga/vital-over/issues/52 - " https://github.com/Lokaltog/vim-easymotion/issues/177#issuecomment-53663431 - if &cedit != "" -\ ||(v:version >= 704 && has("patch441")) - normal! : - else - execute "normal! :\" - endif -endfunction - -function! s:make() - return deepcopy(s:module) -endfunction - - -let &cpo = s:save_cpo -unlet s:save_cpo diff --git a/bundle/easymotion/autoload/vital/_easymotion/Over/Input.vim b/bundle/easymotion/autoload/vital/_easymotion/Over/Input.vim deleted file mode 100755 index f162b77..0000000 --- a/bundle/easymotion/autoload/vital/_easymotion/Over/Input.vim +++ /dev/null @@ -1,25 +0,0 @@ -scriptencoding utf-8 -let s:save_cpo = &cpo -set cpo&vim - - -function! s:getchar(...) - let mode = get(a:, 1, 0) - while 1 - " Workaround for https://github.com/osyo-manga/vital-over/issues/53 - try - let char = call("getchar", a:000) - catch /^Vim:Interrupt$/ - let char = 3 " - endtry - " Workaround for the mappings - if string(char) !=# "\x80\xfd`" - return mode == 1 ? !!char -\ : type(char) == type(0) ? nr2char(char) : char - endif - endwhile -endfunction - - -let &cpo = s:save_cpo -unlet s:save_cpo diff --git a/bundle/easymotion/autoload/vital/_easymotion/Over/Keymapping.vim b/bundle/easymotion/autoload/vital/_easymotion/Over/Keymapping.vim deleted file mode 100755 index d5b1ec3..0000000 --- a/bundle/easymotion/autoload/vital/_easymotion/Over/Keymapping.vim +++ /dev/null @@ -1,55 +0,0 @@ -scriptencoding utf-8 -let s:save_cpo = &cpo -set cpo&vim - - -function! s:capture(cmd) - let verbose_save = &verbose - let &verbose = 0 - try - redir => result - execute "silent!" a:cmd - redir END - finally - let &verbose = verbose_save - endtry - return result -endfunction - - -function! s:escape_key(key) - execute 'let result = "' . substitute(escape(a:key, '\"'), '\(<.\{-}>\)', '\\\1', 'g') . '"' - return result -endfunction - - -function! s:parse_mapping_lhs(map, mode) - return matchstr(a:map, a:mode . '\s\+\zs\S\{-}\ze\s\+') -endfunction - - -function! s:lhss(mode) - let maps = s:capture(a:mode . "map") - return filter(map(split(maps, "\n"), "s:parse_mapping_lhs(v:val, a:mode)"), 'v:val =~ ''\S\+''') -endfunction - - -function! s:rhss(mode, ...) - let abbr = get(a:, 1, 0) - let dict = get(a:, 2, 0) - return map(s:lhss(a:mode), "maparg(v:val, a:mode, abbr, dict)") -endfunction - - -function! s:cmap_lhss() - return s:lhss("c") -endfunction - - -function! s:cmap_rhss(...) - return call("s:rhss", ["c"] + a:000) -endfunction - - -let &cpo = s:save_cpo -unlet s:save_cpo diff --git a/bundle/easymotion/autoload/vital/_easymotion/Over/Signals.vim b/bundle/easymotion/autoload/vital/_easymotion/Over/Signals.vim deleted file mode 100755 index 41cae27..0000000 --- a/bundle/easymotion/autoload/vital/_easymotion/Over/Signals.vim +++ /dev/null @@ -1,104 +0,0 @@ -scriptencoding utf-8 -let s:save_cpo = &cpo -set cpo&vim - - -function! s:_vital_loaded(V) - let s:V = a:V - let s:L = s:V.import("Data.List") -endfunction - - -function! s:_vital_depends() - return ["Data.List"] -endfunction - - -let s:base = { -\ "variables" : { -\ "slots" : [], -\ "counter" : 0, -\ } -\} - - -function! s:base.connect(slot) - let self.variables.counter += 1 - let slot = { "id" : self.variables.counter, "slot" : a:slot } - call add(self.variables.slots, slot) - return slot -endfunction - - -function! s:base.disconnect(slot) - if empty(a:slot) - return -1 - endif - for i in range(len(self.variables.slots)) - if self.variables.slots[i].id == a:slot.id - unlet self.variables.slots[i] - return - endif - endfor - return -1 -endfunction - - -function! s:base.disconnect_by(expr) - return self.disconnect(self.find_first_by(a:expr)) -endfunction - - -function! s:call(list, func, ...) - let args = get(a:, 1, []) - let def = get(a:, 2, 0) - return map(copy(a:list), "has_key(v:val, a:func) ? call(v:val.".a:func.", args, v:val) : def") -endfunction - -function! s:base.call(func, ...) - return call("s:call", [self.slots(), a:func] + a:000) -endfunction - - -function! s:base.find_by(expr) - return filter(copy(self.variables.slots), a:expr) -endfunction - - -function! s:base.find_first_by(expr) - return get(self.find_by(a:expr), 0, {}) -endfunction - - -function! s:base.sort_by(expr) - let self.variables.slots = s:L.sort_by(self.variables.slots, a:expr) -endfunction - - -function! s:base.get_slot(val) - return a:val.slot -endfunction - - -function! s:base.slots() - return map(copy(self.variables.slots), "self.get_slot(v:val)") -endfunction - - -" function! s:base.dict() -" let result = {} -" for _ in self.variables.slots -" let result[_.id] = _.value -" endfor -" return result -" endfunction - - -function! s:make() - let result = deepcopy(s:base) - return result -endfunction - - -let &cpo = s:save_cpo -unlet s:save_cpo diff --git a/bundle/easymotion/autoload/vital/_easymotion/Over/String.vim b/bundle/easymotion/autoload/vital/_easymotion/Over/String.vim deleted file mode 100755 index e315237..0000000 --- a/bundle/easymotion/autoload/vital/_easymotion/Over/String.vim +++ /dev/null @@ -1,277 +0,0 @@ -scriptencoding utf-8 -let s:save_cpo = &cpo -set cpo&vim - - -function! s:_vital_loaded(V) - let s:V = a:V - let s:List = s:V.import("Data.List") -endfunction - - -function! s:_vital_depends() - return [ -\ "Data.List", -\ ] -endfunction - - -function! s:_clamp(x, max, min) - return min([max([a:x, a:max]), a:min]) -endfunction - - -let s:base = {} - -function! s:base.set(item) - return type(a:item) == type("") ? self.set_str(a:item) -\ : type(a:item) == type(0) ? self.set_pos(a:item) -\ : self -endfunction - -function! s:base.str() - return join(self.list, "") -endfunction - -function! s:base.set_pos(pos) - let self.col = s:_clamp(a:pos, 0, self.length()) - return self -endfunction - -function! s:base.backward() - return self.col > 0 ? join(self.list[ : self.col-1], '') : "" -endfunction - -function! s:base.forward() - return join(self.list[self.col+1 : ], '') -endfunction - -function! s:base.pos_word() - return get(self.list, self.col, "") -endfunction - -function! s:base.set_str(str) - let self.list = split(a:str, '\zs') - let self.col = strchars(a:str) - return self -endfunction - -function! s:base.pos() - return self.col -endfunction - -function! s:base.input(str) - call extend(self.list, split(a:str, '\zs'), self.col) - let self.col += len(split(a:str, '\zs')) - return self -endfunction - -function! s:base.length() - return len(self.list) -endfunction - -function! s:base.next() - return self.set_pos(self.col + 1) -endfunction - -function! s:base.prev() - return self.set_pos(self.col - 1) -endfunction - -function! s:base.remove(index) - if a:index < 0 || self.length() <= a:index - return self - endif - unlet self.list[a:index] - if a:index < self.col - call self.set(self.col - 1) - endif - return self -endfunction - -function! s:base.remove_pos() - return self.remove(self.col) -endfunction - -function! s:base.remove_prev() - return self.remove(self.col - 1) -endfunction - -function! s:base.remove_next() - return self.remove(self.col + 1) -endfunction - - -function! s:make(...) - let default = get(a:, 1, "") - let result = deepcopy(s:base) - call result.set(default) - return result -endfunction - - -function! s:_split(str, pat) - let pat = (exists("+regexpengine") ? '\%#=2' : '') . a:pat - let list = split(a:str, pat . '\zs') - return s:List.flatten(map(list, 'v:val == a:pat ? a:pat : v:val =~ pat . ''$'' ? split(v:val, pat) + [a:pat] : v:val')) -endfunction - - -function! s:_split_keystring(str, pats, ...) - if a:str =~ '^(.\{-})$' -\ || a:str =~ "^\(.\\{-})$" - return [a:str] - endif - let pats = a:pats - let index = get(a:, 1, 0) - if !exists("+regexpengine") -\ || index > len(pats) -\ || len(filter(copy(pats), 'a:str =~ ''\%#=2'' . v:val')) == 0 - if len(filter(copy(pats), 'a:str ==# v:val')) == 0 - return split(a:str, '\zs') - else - return [a:str] - endif - endif - if len(filter(copy(pats), 'a:str == v:val')) == 1 - return [a:str] - endif - - let result = [] - let pat = pats[index] - let list = s:_split(a:str, pat) - let result += eval(join(map(list, "s:_split_keystring(v:val, pats, index+1)"), "+")) - return result -endfunction - - -let s:special_keys = [ -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\ "\", -\] -" Issues #45 -" \ "\", -" \ "\", - - -" Workaround -" https://github.com/osyo-manga/vital-over/pull/63 -" http://lingr.com/room/vim/archives/2014/10/29#message-20492403 -if exists("+regexpengine") - function! s:_split_keystring(str, ...) - return split(a:str, '\%#=2' . "\\m\\%(" . get(a:, 1, '') . "\x80\xfc.\\%(\x80..\\|.\\)\\zs\\|\x80..\\zs\\|.\\zs\\)") - endfunction - - function! s:split_by_keys(str) - return s:_split_keystring(a:str, "\\%(\\\|\\)(.\\{-})\\zs\\|") - endfunction -else - function! s:split_by_keys(str) - return s:_split_keystring(a:str, s:special_keys) - endfunction -endif - - -function! s:index(haystack, needle, ...) - let start = get(a:, 1, 0) - let ignorecase = get(a:, 2, &ignorecase) - if ignorecase - return stridx(tolower(a:haystack), tolower(a:needle), start) - else - return stridx(a:haystack, a:needle, start) - endif -endfunction - - -let &cpo = s:save_cpo -unlet s:save_cpo diff --git a/bundle/easymotion/autoload/vital/easymotion.vital b/bundle/easymotion/autoload/vital/easymotion.vital deleted file mode 100755 index 4dc36d3..0000000 --- a/bundle/easymotion/autoload/vital/easymotion.vital +++ /dev/null @@ -1,19 +0,0 @@ -easymotion -651a023 - -Over.Commandline.Base -Over.Commandline.Modules.Cancel -Over.Commandline.Modules.BufferComplete -Over.Commandline.Modules.Paste -Over.Commandline.Modules.KeyMapping -Over.Commandline.Modules.Doautocmd -Over.Commandline.Modules.CursorMove -Over.Commandline.Modules.Delete -Over.Commandline.Modules.Redraw -Over.Commandline.Modules.InsertRegister -Over.Commandline.Modules.History -Over.Commandline.Modules.NoInsert -Over.Commandline.Modules.Exit -Over.Commandline.Modules.DrawCommandline -Over.Commandline.Modules.ExceptionMessage -Over.Commandline.Modules.ExceptionExit diff --git a/bundle/easymotion/doc/easymotion.txt b/bundle/easymotion/doc/easymotion.txt deleted file mode 100755 index 52f81af..0000000 --- a/bundle/easymotion/doc/easymotion.txt +++ /dev/null @@ -1,1158 +0,0 @@ -*easymotion.txt* Version 2.1 - - - ______ __ ___ __ _ - / ____/____ ________ __/ |/ /____ / /_(_)____ ____ - / __/ / __ `/ ___/ / / / /|_/ // __ \/ __/ // __ \/ __ \ - / /___ / /_/ (__ ) /_/ / / / // /_/ / /_/ // /_/ / / / / - /_____/ \__,_/____/\__, /_/ /_/ \____/\__/_/ \____/_/ /_/ - /____/ - - Vim motions on speed! - - -============================================================================== -CONTENTS *easymotion-contents* - - Introduction ....................... |easymotion-introduction| - Usage .............................. |easymotion-usage| - Default mappings ................ |easymotion-default-mappings| - More mappings ................... |easymotion-more-mappings| - Requirements ....................... |easymotion-requirements| - Configuration ...................... |easymotion-configuration| - EasyMotion_keys ................. |EasyMotion_keys| - EasyMotion_do_shade ............. |EasyMotion_do_shade| - EasyMotion_do_mapping ........... |EasyMotion_do_mapping| - EasyMotion_grouping ............. |EasyMotion_grouping| - EasyMotion_smartcase ............ |EasyMotion_smartcase| - EasyMotion_smartsign ............ |EasyMotion_smartsign| - EasyMotion_use_migemo ........... |EasyMotion_use_migemo| - EasyMotion_use_upper ........... |EasyMotion_use_upper| - EasyMotion_enter_jump_first ..... |EasyMotion_enter_jump_first| - EasyMotion_prompt ............... |EasyMotion_prompt| - EasyMotion_highlight ............ |EasyMotion_highlight| - EasyMotion_add_search_history ... |EasyMotion_add_search_history| - EasyMotion_off_screen_search .... |EasyMotion_off_screen_search| - EasyMotion_disable_two_key_combo. |EasyMotion_disable_two_key_combo| - Custom highlighting ............. |easymotion-custom-hl| - Custom mappings ................. |easymotion-custom-mappings| - Leader key .................. |easymotion-leader-key| - Custom keys ................. |easymotion-custom-keys| - License ............................ |easymotion-license| - Known bugs ......................... |easymotion-known-bugs| - Contributing ....................... |easymotion-contributing| - Credits ............................ |easymotion-credits| - -============================================================================== -Introduction *easymotion* *easymotion-introduction* - -EasyMotion provides a much simpler way to use some motions in vim. It takes -the out of w or f{char} by highlighting all possible -choices and allowing you to press one key to jump directly to the target. - -When one of the available motions is triggered, all visible text preceding or -following the cursor is faded, and motion targets are highlighted. - -============================================================================== -Usage *easymotion-usage* - -EasyMotion is triggered by one of the provided mappings (see -|easymotion-default-mappings| for details). - -Example: > - - Lorem ipsum dolor sit amet. - -Type w to trigger the word motion |w|. See -|easymotion-leader-key| for details about the leader key. When the -motion is triggered, the text is updated (no braces are actually added, -the text is highlighted in red by default): > - - Lorem {a}psum {b}olor {c}it {d}met. - -Press "c" to jump to the beginning of the word "sit": > - - Lorem ipsum dolor sit amet. - -Similarly, if you're looking for an "o", you can use the |f| motion. -Type fo, and all "o" characters are highlighted: > - - L{a}rem ipsum d{b}l{c}r sit amet. - -Press "b" to jump to the second "o": > - - Lorem ipsum dolor sit amet. - -And that's it! - ------------------------------------------------------------------------------- -Default mappings *easymotion-default-mappings* - -The default configuration defines the following mappings in normal, -visual and operator-pending mode if |g:EasyMotion_do_mapping| is on: - -Note: The default leader has been changed to to avoid - conflicts with other plugins you may have installed - - Default Mapping | Details - ---------------------|---------------------------------------------- - f{char} | Find {char} to the right. See |f|. - F{char} | Find {char} to the left. See |F|. - t{char} | Till before the {char} to the right. See |t|. - T{char} | Till after the {char} to the left. See |T|. - w | Beginning of word forward. See |w|. - W | Beginning of WORD forward. See |W|. - b | Beginning of word backward. See |b|. - B | Beginning of WORD backward. See |B|. - e | End of word forward. See |e|. - E | End of WORD forward. See |E|. - ge | End of word backward. See |ge|. - gE | End of WORD backward. See |gE|. - j | Line downward. See |j|. - k | Line upward. See |k|. - n | Jump to latest "/" or "?" forward. See |n|. - N | Jump to latest "/" or "?" backward. See |N|. - s | Find(Search) {char} forward and backward. - | See |f| and |F|. - -See |easymotion-leader-key| and |mapleader| for details about the leader key. -See |easymotion-custom-mappings| for customizing the default mappings. - -EasyMotion table *easymotion-plug-table* - - Mapping Table | Default - ---------------------|---------------------------------------------- - (easymotion-f) | f{char} - (easymotion-F) | F{char} - (easymotion-t) | t{char} - (easymotion-T) | T{char} - (easymotion-w) | w - (easymotion-W) | W - (easymotion-b) | b - (easymotion-B) | B - (easymotion-e) | e - (easymotion-E) | E - (easymotion-ge)| ge - (easymotion-gE)| gE - (easymotion-j) | j - (easymotion-k) | k - (easymotion-n) | n - (easymotion-N) | N - (easymotion-s) | s - - More Mapping Table | (No assignment by default) - ----------------------------------|--------------------------------- - (easymotion-bd-f) | See |(easymotion-s)| - (easymotion-bd-t) | See |(easymotion-bd-t)| - (easymotion-bd-w) | See |(easymotion-bd-w)| - (easymotion-bd-W) | See |(easymotion-bd-W)| - (easymotion-bd-e) | See |(easymotion-bd-e)| - (easymotion-bd-E) | See |(easymotion-bd-E)| - (easymotion-bd-jk) | See |(easymotion-bd-jk)| - (easymotion-bd-n) | See |(easymotion-bd-n)| - (easymotion-jumptoanywhere) | See |(easymotion-jumptoanywhere)| - (easymotion-repeat) | See |(easymotion-repeat)| - (easymotion-next) | See |(easymotion-next)| - (easymotion-prev) | See |(easymotion-prev)| - (easymotion-sol-j) | See |(easymotion-sol-j)| - (easymotion-sol-k) | See |(easymotion-sol-k)| - (easymotion-eol-j) | See |(easymotion-eol-j)| - (easymotion-eol-k) | See |(easymotion-eol-k)| - (easymotion-iskeyword-w) | See |(easymotion-iskeyword-w)| - (easymotion-iskeyword-b) | See |(easymotion-iskeyword-b)| - (easymotion-iskeyword-bd-w) | See |(easymotion-iskeyword-bd-w)| - (easymotion-iskeyword-e) | See |(easymotion-iskeyword-e)| - (easymotion-iskeyword-ge) | See |(easymotion-iskeyword-ge)| - (easymotion-iskeyword-bd-e) | See |(easymotion-iskeyword-bd-e)| - (easymotion-vim-n) | See |(easymotion-vim-n)| - (easymotion-vim-N) | See |(easymotion-vim-N)| - | - Within Line Motion | See |easymotion-within-line| - ----------------------------------|--------------------------------- - (easymotion-sl) | See |(easymotion-sl)| - (easymotion-fl) | See |(easymotion-fl)| - (easymotion-Fl) | See |(easymotion-Fl)| - (easymotion-bd-fl) | See |(easymotion-sl)| - (easymotion-tl) | See |(easymotion-tl)| - (easymotion-Tl) | See |(easymotion-Tl)| - (easymotion-bd-tl) | See |(easymotion-bd-tl)| - (easymotion-wl) | See |(easymotion-wl)| - (easymotion-bl) | See |(easymotion-bl)| - (easymotion-bd-wl) | See |(easymotion-bd-wl)| - (easymotion-el) | See |(easymotion-el)| - (easymotion-gel) | See |(easymotion-gel)| - (easymotion-bd-el) | See |(easymotion-bd-el)| - (easymotion-lineforward) | See |(easymotion-lineforward)| - (easymotion-linebackward) | See |(easymotion-linebackward)| - (easymotion-lineanywhere) | See |(easymotion-lineanywhere)| - | - Multi Input Find Motion | See |easymotion-multi-input| - ----------------------------------|--------------------------------- - (easymotion-s2) | See |(easymotion-s2)| - (easymotion-f2) | See |(easymotion-f2)| - (easymotion-F2) | See |(easymotion-F2)| - (easymotion-bd-f2) | See |(easymotion-s2)| - (easymotion-t2) | See |(easymotion-t2)| - (easymotion-T2) | See |(easymotion-T2)| - (easymotion-bd-t2) | See |(easymotion-bd-t2)| - | - (easymotion-sl2) | See |(easymotion-sl2)| - (easymotion-fl2) | See |(easymotion-fl2)| - (easymotion-Fl2) | See |(easymotion-Fl2)| - (easymotion-tl2) | See |(easymotion-tl2)| - (easymotion-Tl2) | See |(easymotion-Tl2)| - | - (easymotion-sn) | See |(easymotion-sn)| - (easymotion-fn) | See |(easymotion-fn)| - (easymotion-Fn) | See |(easymotion-Fn)| - (easymotion-bd-fn) | See |(easymotion-sn)| - (easymotion-tn) | See |(easymotion-tn)| - (easymotion-Tn) | See |(easymotion-Tn)| - (easymotion-bd-tn) | See |(easymotion-bd-tn)| - | - (easymotion-sln) | See |(easymotion-sln)| - (easymotion-fln) | See |(easymotion-fln)| - (easymotion-Fln) | See |(easymotion-Fln)| - (easymotion-bd-fln) | See |(easymotion-sln)| - (easymotion-tln) | See |(easymotion-tln)| - (easymotion-Tln) | See |(easymotion-Tln)| - (easymotion-bd-tln) | See |(easymotion-bd-tln)| - - ------------------------------------------------------------------------------- -More mappings *easymotion-more-mappings* - -These mappings are not mapped by Default. - -Bidirection ~ - - Note: bd is short for bidirectional - -(easymotion-s) *(easymotion-s)* - *(easymotion-bd-f)* - Find {char} to bidirection(forward and backward at the same - time.) See |f| & |F|. - -(easymotion-bd-t) *(easymotion-bd-t)* - Till before & after the {char}. See |t| & |T|. - -(easymotion-bd-w) *(easymotion-bd-w)* - Beginning of word forward and backward. See |w| & |b|. - -(easymotion-bd-W) *(easymotion-bd-W)* - Beginning of WORD forward and backward. See |W| & |B|. - -(easymotion-bd-e) *(easymotion-bd-e)* - End of word forward and backward. See |e| & |ge|. - -(easymotion-bd-E) *(easymotion-bd-E)* - End of WORD forward and backward. See |e| & |ge|. - -(easymotion-bd-jk) *(easymotion-bd-jk)* - Line downward and upward. See |j| & |k|. - -(easymotion-bd-n) *(easymotion-bd-n)* - Jump to latest "/" or "?" forward. See |n| & |N|. - -Jump To Anywhere ~ - -(easymotion-jumptoanywhere) *(easymotion-jumptoanywhere)* - JumpToAnywhere motion! - Default: Beginning and End of word, Camelcase, after '_', - and after '#'. - You can modify this motion behavior by vimrc - - |g:EasyMotion_re_anywhere|: *g:EasyMotion_re_anywhere* -> - let g:EasyMotion_re_anywhere = '\v' . - \ '(<.|^$)' . '|' . - \ '(.>|^$)' . '|' . - \ '(\l)\zs(\u)' . '|' . - \ '(_\zs.)' . '|' . - \ '(#\zs.)' -< - Modified example: -> - let g:EasyMotion_re_anywhere = '\v' . - \ '(<.|^)' . '|' . - \ '(<.|.$)' . '|' . - \ '(\l)\zs(\u)' . '|' . -< -Repeat ~ - -(easymotion-repeat) *(easymotion-repeat)* - Repeat last motion! - - Repeat last motion type including input target character. - Nothing will happen when previous motion doesn't exist. - - Last Find Motion~ - With a Find motion (e.g. |(easymotion-s)| ), type `` - without input characters to invoke the last find motion. This does - not repeat the motion type (e.g. other word motion, - (easymotion-j) etc...) only input characters. - -(easymotion-next) *(easymotion-next)* -(easymotion-prev) *(easymotion-prev)* - - Jump to next/previous match. This is the only motion that can move to - off-screen locations. With set |'wrapscan'| enabled, this motion will - also wrap around the end of the file. During this motion, matched - text is highlighted. If you don't want highlighting, set - |g:EasyMotion_move_highlight| to 0. - - Example: -> - nmap ; (easymotion-next) - nmap , (easymotion-prev) -< - This feature is inspired by and based on vim-sneak. vim-sneak can be - downloaded here: https://github.com/justinmk/vim-sneak - -EasyMotion dot repeat~ - *easymotion-dotrepeat* *easymotion-textobjct* - - This feature requires tpope/vim-repeat - https://github.com/tpope/vim-repeat - - All motions support '.' repeat. - - Example: -> - " vimrc: - omap z (easymotion-t) - let g:EasyMotion_keys='hklyuiopnm,qwertzxcvbasdgjf;' -< - Text sample: -> - {cursor}Lorem ipsum dolor sit ame*t*, consectetur adipisicing eli*t*, - sed do eiusmod tempor -< - type `dzt` and type first target marker(in this case, `h`) -> - {cursor}*t*, consectetur adipisicing eli*t,* sed do eiusmod tempor -< - from here type '`.`' and you get: -> - *t,* sed do eiusmod tempor -< - -JK Motion ~ - *easymotion-jk-motion* - -JK motion option *(easymotion-j)* *(easymotion-k)* - *g:EasyMotion_startofline* - - The default behavior of the |j| and |k| is to move your cursor to the - start of the line. Set this option to 0 to force the cursor to stay in - the same column If you want to use both movements as separate - mappings, set |'g:EasyMotion_startofline'| to 0 and map - |(easymotion-sol-j)| & |(easymotion-sol-k)| to the start - of line mapping: -> - let g:EasyMotion_startofline = 0 # keep cursor colum JK motion - map J (easymotion-sol-j) - map K (easymotion-sol-k) -< -Default: 1 - -Start of Line JK motion *(easymotion-sol-j)* *(easymotion-sol-k)* - *(easymotion-sol-bd-jk)* - - Start of line J/K motion - Example: -> - map J (easymotion-sol-j) - map K (easymotion-sol-k) -< -End of Line JK motion *(easymotion-eol-j)* *(easymotion-eol-k)* - *(easymotion-eol-bd-jk)* - - End of line J/K motion - Example: -> - map J (easymotion-eol-j) - map K (easymotion-eol-K) -< - -iskeyword compatible word motions *(easymotion-iskeyword-w)* - *(easymotion-iskeyword-b)* - *(easymotion-iskeyword-bd-w)* - *(easymotion-iskeyword-e)* - *(easymotion-iskeyword-ge)* - *(easymotion-iskeyword-bd-e)* - Default word motions which EasyMotion provide is not completely - compatible with |iskeyword| options. But if you make default word - motion completely compatible with it, there will be so many targets - that they maybe annoy you, so provide |iskeyword| compatible word - motions with another || mappings. - - Example: -> - map w (easymotion-iskeyword-w) - map b (easymotion-iskeyword-b) -< - NOTE: Within line motions are compatible with |iskeyword| by default. - -Search motion respect previous direction - - (easymotion-vim-n) *(easymotion-vim-n)* - (easymotion-vim-N) *(easymotion-vim-N)* - - This is vim compatible |n| & |N| easymotion. Unlike |(easymotion-n)| - and |(easymotion-N)| 's direction is always forward or backward, - these motions consider previous search direction. - -Within line motion ~ - *easymotion-within-line* - -(easymotion-sl) *(easymotion-sl)* - *(easymotion-bd-fl)* - This function is same as |(easymotion-s)|, except the range - is limited to the current cursor line. - -(easymotion-fl) *(easymotion-fl)* - This function is same as |(easymotion-f)|, except the range - is limited to the current cursor line. - -(easymotion-Fl) *(easymotion-Fl)* - This function is same as |(easymotion-F)|, except the range - is limited to the current cursor line. - -(easymotion-tl) *(easymotion-tl)* - This function is same as |(easymotion-t)|, except the - range is limited to the current cursor line. - -(easymotion-Tl) *(easymotion-Tl)* - This function is same as |(easymotion-T)|, except the - range is limited to the current cursor line. - -(easymotion-bd-tl) *(easymotion-bd-tl)* - This function is same as |(easymotion-bd-t)|, except the - range is limited to the current cursor line. - -(easymotion-wl) *(easymotion-wl)* - This function is same as |(easymotion-iskeyword-w)|, - except the range is limited to the current cursor line. - -(easymotion-bl) *(easymotion-bl)* - This function is same as |(easymotion-iskeyword-b)|, - except the range is limited to the current cursor line. - -(easymotion-bd-wl) *(easymotion-bd-wl)* - This function is same as |(easymotion-iskeyword-bd-w)|, - except the range is limited to the current cursor line. - -(easymotion-el) *(easymotion-el)* - This function is same as |(easymotion-iskeyword-e)|, - except the range is limited to the current cursor line. - -(easymotion-gel) *(easymotion-gel)* - This function is same as |(easymotion-iskeyword-ge)|, - except the range is limited to the current cursor line. - -(easymotion-bd-el) *(easymotion-bd-el)* - This function is same as |(easymotion-iskeyword-bd-e)|, - except the range is limited to the current cursor line. - -(easymotion-lineforward) *(easymotion-lineforward)* - This function is similar to - |(easymotion-jumptoanywhere)|, except the range is - limited to the current cursor line in the forward direction. - -(easymotion-linebackward) *(easymotion-linebackward)* - This function is similar to - |(easymotion-jumptoanywhere)|, except the range is - limited to the current cursor line in the backward direction. - -(easymotion-lineanywhere) *(easymotion-lineanywhere)* - This function is same as |(easymotion-jumptoanywhere)|, - but limited to within the current cursor line. - - You can customize the behavior of this function in your - vimrc. - - |g:EasyMotion_re_line_anywhere|: *g:EasyMotion_re_line_anywhere* - - Default: -> - let g:EasyMotion_re_line_anywhere = '\v' . - \ '(<.|^$)' . '|' . - \ '(.>|^$)' . '|' . - \ '(\l)\zs(\u)' . '|' . - \ '(_\zs.)' . '|' . - \ '(#\zs.)' -< - Modified example: -> - let g:EasyMotion_re_line_anywhere = '\v' . - \ '(<.|^)' . '|' . - \ '(>.|.$)' . '|' . - \ '(\l)\zs(\u)' . '|' . - -Multi Input Find Motion!~ - *easymotion-multi-input* - *easymotion-two-key* - *easymotion-{find}n* - *(easymotion-{find}n)* - *(easymotion-{find}2)* - -EasyMotion provide another find motion by multi input target. - -Example: -> - nmap s (easymotion-s2) - xmap s (easymotion-s2) - omap z (easymotion-s2) - nmap s (easymotion-sn) - xmap s (easymotion-sn) - omap z (easymotion-sn) -< -If you like typing two or more characters as targets, similar to vim-smalls -or vim-seek/vim-sneak, |EasyMotion| also provide this feature. With the above -keymapping, - - Invoke EasyMotion by two character: - - s{char}{char} (Type s{char} to use just one {char} is also allowed) - - And you can use as many target characters as you like: - - s{char}{char}{char}... - - You can use to delete while typing, and Vim's default |n| & |N| - keymappings works after this motion(|(easymotion-sn)|) to move next or - previous matches. - - Note: the 'n' key motion provides incremental highlighting. If you don't - want to highlight incrementally, set |g:EasyMotion_inc_highlight| - to 0. -> - let g:EasyMotion_inc_highlight = 0 -< -All Find motions (s,f,F,t,T,sl,fl,Fl,tl,Tl, see below) support this feature! -(|l| means within line motion) - - *(easymotion-sn)* *(easymotion-fn)* *(easymotion-Fn)* - *(easymotion-tn)* *(easymotion-Tn)* *(easymotion-bd-tn)* - *(easymotion-sln)* *(easymotion-fln)* *(easymotion-Fln)* - *(easymotion-tln)* *(easymotion-Tln)* *(easymotion-bd-tln)* - - - *(easymotion-s2)* *(easymotion-f2)* *(easymotion-F2)* - *(easymotion-t2)* *(easymotion-T2)* *(easymotion-bd-t2)* - *(easymotion-sl2)* *(easymotion-fl2)* *(easymotion-Fl2)* - *(easymotion-tl2)* *(easymotion-Tl2)* *(easymotion-bd-tl2)* - -Find Motion Command Line~ - *easymotion-command-line* - EasyMotion has own command line for find motions, especially for - 'n' key motion(e.g. |(easymotion-sn)|). This command is inspired - by over.vim and actually uses over.vim's library. over.vim can be - downloaded here: - - https://github.com/osyo-manga/vim-over - - Library: https://github.com/osyo-manga/vital-over - - Note: These settings are experimental. They may be changed in the near - future. - - Default Command Line Mappings~ - Most default mappings work the same as the default command line mappings - of Vim. See |cmdline.txt| - - Key Mappings | Details - ----------------------- |---------------------------------------------- - | Execute EasyMotion. - or | Cancel - or | Cursor right - or | Cursor left - or | cursor to beginning of command-line - or | cursor to end of command-line - or | Delete one character - | Delete one character at the cursor pos - | Delete the word before the cursor - | Delete all entered characters before the cursor - or | Recall older (previous) search from history - or | Recall more recent (next) search from history - {0-9a-z"%#:-=.} | Insert Register. See |c_Ctrl-R| - | Insert the Word under cursor - | Insert the |WORD| under cursor - | Insert the Filename under cursor - ------------------------|--------------------------------------- - (paste) | Paste yanked text to the command line - | Default: - (buffer-complete) | Completion of buffer text Default: - *(em-scroll-f)* | Scroll window forward & jump to the next match - | Default: - *(em-scroll-b)* | Scroll window backward & jump to previous match - | Default: - *(em-jumpback)* | Jump back original cursor position like - | Default: - *(em-openallfold)* | Open all fold - | Default: - - Customize Command Line Mappings~ - *EMCommandLineNoreMap* - - You can use |EMCommandLineNoreMap| (like |cnoremap|) to customize find - motion command line key mappings in your vimrc. This mapping is always - nonrecursive, so you should map to |(em-scroll-f)| and not . - - Example: -> - " == EM is short for EasyMotion - " Enter by to excute faster & easily - EMCommandLineNoreMap - EMCommandLineNoreMap - " Enter by `;` to excute faster & easily - EMCommandLineNoreMap ; - EMCommandLineNoreMap ; - " Buffer Completion with Ctrl-D - EMCommandLineNoreMap (buffer-complete) -< - *EMCommandLineMap* - *EMCommandLineUnMap* - EasyMotion also provide |EMCommandLineMap| (like |cmap|) and - |EMCommandLineUnMap| (like |cunmap|), but you probably don't need - these commands because there is no case where it should require - recursive mappings. - - Note(again): These settings, especially the keymappings are - __EXPERIMENTAL__. They could be changed in the near future. However, they - work well and are very useful, so I've released them anyway for now. - ------------------------------------------------------------------------------- -2.3 Special mappings *easymotion-special-mappings* - -The default configuration defines the following mappings in visual and -operator-pending mode if |g:EasyMotion_do_special_mapping| is on: -> - let g:EasyMotion_do_special_mapping = 1 -< -Default: 0 - - Special Mapping | Details - ---------------------|---------------------------------------------- - {operator}l | Select, yank, paste, delete, or other operation of - | lines. See |(easymotion-special-l)|. - {operator}p | Select, yank, paste, delete, or other operation of - | phrase. See |(easymotion-special-p)|. - -Or you can map them yourself - - Mapping Table | Details - -----------------------------|-------------------------------------- - (easymotion-special-l) | See |(easymotion-special-l)| - (easymotion-special-p) | See |(easymotion-special-p)| - - -See |easymotion-leader-key| and |mapleader| for details about the leader key. - -============================================================================== -Requirements *easymotion-requirements* - -EasyMotion needs at least vim 7.3 to run without problems. -Active development and testing is done with vim 7.4 starting from the 2.0 -release of EasyMotion. - -Vi-compatible mode must be disabled. - -If your vim version is causing you problems with using this plugin, feel free -to open an issue on github! - -Link: https://github.com/Lokaltog/vim-easymotion/issues - -============================================================================== -Configuration *easymotion-configuration* - -EasyMotion will work fine without any configuration, but you can override the -default behavior by setting configuration variables globally in your |vimrc| -file. - -Example (this will change the target keys and disable shading): > - - let g:EasyMotion_keys = '1234567890' - let g:EasyMotion_do_shade = 0 - ------------------------------------------------------------------------------- -EasyMotion_keys *EasyMotion_keys* - *g:EasyMotion_keys* - -Set the keys to be used for motion targets. You can have as many (or few) -keys as you want. It's recommended to add as many keys as you are comfortable -typing, because here's a lower chance that the motion targets will be grouped -if many keys are available. However, this has its limits; most people find it -easier to type 2 lowercase keys than to chord a key with shift, so you may -want to leave out keys that are harder to type, like capital letters. -EasyMotion also uses the last keys to group targets, so it's recommended to -set the last keys to ones that are easier to type, like `f`,`j`,`;`, etc. - -Default: 'asdghklqwertyuiopzxcvbnmfj;' - -Example: -> - " Lower a-z - let g:EasyMotion_keys = 'abcdefghijklmnopqrstuvwxyz' - " a-z & A-Z - 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' - " a-z & A-Z & 0-9 - 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' - " qwerty - 'asdfghjkl;qwertyuiopzxcvbnm' - " You can use non-ascii, multibyte key characters as well - 'asdfghjkl;qwertyuiopzxcvbnmèòàùì' -< - ------------------------------------------------------------------------------- -EasyMotion_do_shade *EasyMotion_do_shade* - *g:EasyMotion_do_shade* - -The default behavior is to shade the text following the cursor (forward -motions), preceding the cursor (backward motions), or on either side of the -cursor (bidirectional motions) to make the motion targets more visible. Set -this option to 0 if you want to disable text shading. - -Default: 1 - ------------------------------------------------------------------------------- -EasyMotion_do_mapping *EasyMotion_do_mapping* - *g:EasyMotion_do_mapping* - -Set this option to 0 if you want to disable the default mappings. See -|easymotion-default-mappings| for details about the default mappings. - -Note: If you disable this option, you'll have to map the motions yourself. - See |easymotion-custom-mappings| for customizing the default mappings. - -Default: 1 - ------------------------------------------------------------------------------- -EasyMotion_grouping *EasyMotion_grouping* - *g:EasyMotion_grouping* - -When there are too many possible targets on the screen, the results have to be -grouped. This configuration option lets you change which grouping algorithm -you want to use. There are two grouping algorithms available: - - * Single-key priority (value: 1) - ------------------- - - This algorithm prioritizes single-key jumps for the targets closest to - the cursor and only groups the last jump targets to maximize the amount - of single-key jumps. - - This algorithm works recursively and will work with as few keys as two. - - Example (with |EasyMotion_keys| = "abcdef"): > - - x x x x x x x x x -< - The |w| motion is triggered: > - - a b c d e f f f f - ^ ^ ^ ^ ^ Direct jump to target - ^ ^ ^ ^ Enter group "f" -< - * Original (value: 2) - -------- - - This is the original algorithm which always groups all targets if there - are too many possible motion targets. - - Example (with |EasyMotion_keys| = "abcdef"): > - - x x x x x x x x x -< - The |w| motion is triggered: > - - a a a a a a b b b - ^ ^ ^ ^ ^ ^ Enter group "a" - ^ ^ ^ Enter group "b" - -Default: 1 - ------------------------------------------------------------------------------- -Smartcase *EasyMotion_smartcase* - *g:EasyMotion_smartcase* - -Matching target keys by smartcase. You can type target keys more lazily. - -Add following description in your vimrc: > - - let g:EasyMotion_smartcase = 1 - -Default:0 - ------------------------------------------------------------------------------- -Smartsign *EasyMotion_smartsign* - *g:EasyMotion_use_smartsign_us* - *g:EasyMotion_use_smartsign_ja* - -Matching signs target keys by smartcase like. E.g. type '1' and it matches -both '1' and '!' in Find motion. - -This feature depends on your keyboard layout, so you must choose which -keyboard layout you use. - -How to discriminate: - Shift-2 = @ -> US layout - Shift-2 = " -> JP layout - -> - let g:EasyMotion_use_smartsign_us = 1 -< - or -> - let g:EasyMotion_use_smartsign_jp = 1 -< - -Default: 0 - ------------------------------------------------------------------------------- -Migemo *EasyMotion_use_migemo* - *g:EasyMotion_use_migemo* - -|Easymotion| can match multibyte Japanese character with alphabetical input. -For example, 'fa' can search 'あ'. This feature doesn't -require |cmigemo| because |Easymotion| already includes basic regex patterns -generated by cmigemo. - -See http://0xcc.net/migemo/ if you want to know more about migemo. - -Add following line to your vimrc to enable this option: > - - let g:EasyMotion_use_migemo = 1 - -Default:0 - -This feature is based on rhysd(@Linda_pp)'s clever-f script, -which can be downloaded here: - -https://github.com/rhysd/clever-f.vim - ------------------------------------------------------------------------------- -Show target key by upper letter *EasyMotion_use_upper* - *g:EasyMotion_use_upper* - -With this option enabled, |Easymotion| will shows target labels with -uppercase letters, but allow you to type it in lowercase and have Easymotion -automatically convert it uppercase. - -This feature improve targets' readability. - -Example: > - - Lorem ipsum dolor sit amet. - -Type w and the text is updated: > - - Lorem {A}psum {B}olor {C}it {D}met. - -Press "c" (<- lowercase!) to jump to the beginning of the word "sit": > - - Lorem ipsum dolor sit amet. - -Add following description in your vimrc to enable this: > - - let g:EasyMotion_use_upper = 1 - let g:EasyMotion_keys = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ;' - -Default:0 - -Note: Make sure |g:EasyMotion_keys| doesn't include lowercase - -This feature is inspired by t9md's vim-smalls, which can be downloaded here: - -https://github.com/t9md/vim-smalls - ------------------------------------------------------------------------------- - Jump to first match by Enter or Space *EasyMotion_enter_jump_first* - *g:EasyMotion_enter_jump_first* - *EasyMotion_space_jump_first* - *g:EasyMotion_space_jump_first* - -Type Enter or Space key and jump to first match (first letter of -|g:EasyMotion_keys| ). - -Set this option to 1 if you want to enable this feature. - -Example: -> - let g:EasyMotion_enter_jump_first = 1 - let g:EasyMotion_space_jump_first = 1 -< -Default: 0 - - -Customize command line prompt *EasyMotion_prompt* - *g:EasyMotion_prompt* - - Use this command to customize the command line prompt message in find - motion. `{n}` is how many characters you type, and if {n} == 1 `(s)` will - be ignored. - -Sample: -> - let g:EasyMotion_prompt = '{n}>>> ' -< -Default: -> - let g:EasyMotion_prompt = 'Search for {n} character(s): ' -< - This message will be: - |(easymotion-s)| -> 'Search for 1 character: ' - |(easymotion-s2)| -> 'Search for 2 characters: ' - |(easymotion-sn)| -> 'Search for characters: ' - -Customize highlight behavior *EasyMotion_highlight* - *g:EasyMotion_inc_highlight* - - Using the 'n' key find motion (e.g. |(easymotion-sn)|), EasyMotion - by default incrementally highlights matched text. If you don't want this - feature, set this option to 0 -> - let g:EasyMotion_inc_highlight = 0 -< - Default: 1 - - *g:EasyMotion_move_highlight* - - By default, when using |(easymotion-next)| and/or - |(easymotion-prev)|, EasyMotion highlights matched text until the - cursor moves, enters insert mode, or leaves the buffer. If you don't want - this feature, set this option to 0. -> - let g:EasyMotion_move_highlight = 0 -< - Default: 1 - - *g:EasyMotion_landing_highlight* - - If you want to keep highlights temporarily after EasyMotion - jumps to a destination (with timing set to - |g:EasyMotion_move_highlight|), set this option to 0. -> - let g:EasyMotion_landing_highlight = 1 -< - Default: 0 - -EasyMotion_add_search_history *g:EasyMotion_add_search_history* - - If you set this option to 1, the 'n' key find motion will add the - inputted pattern to vim default search history. If you want to disable - this feature, set this value to 0. -> - let g:EasyMotion_add_search_history = 0 -< - Default: 1 - -EasyMotion_off_screen_search *g:EasyMotion_off_screen_search* - - If you set this option to 1, the 'n' key find motion will search patterns - even outside of the current screen range. If you want to disable this - feature, set this value to 0. -> - let g:EasyMotion_off_screen_search = 0 -< - Default: 1 - -EasyMotion_disable_two_key_combo *g:EasyMotion_disable_two_key_combo* - - If you set this option to 1, you can disable the two key combo feature. -> - let g:EasyMotion_disable_two_key_combo = 1 -< - Default: 0 - ------------------------------------------------------------------------------- -Custom highlighting *easymotion-custom-hl* - -The default EasyMotion configuration uses two highlighting groups that link -to groups with default values. The highlighting groups are: - - * EasyMotionTarget - - Highlights motion targets, the default value is bold red - - * EasyMotionTarget2First - * EasyMotionTarget2Second - - Highlights motion targets, when target is two keys - - * EasyMotionShade - - Highlights shaded text, the default value is dark gray - -There are two ways to override the default colors: - - 1) Set the highlighting in your color scheme - - This will only affect a single color scheme. The default red/gray colors - will be used if you change the color scheme to one that doesn't assign - any EasyMotion colors. - - Example: > - - hi EasyMotionTarget ctermbg=none ctermfg=green - hi EasyMotionShade ctermbg=none ctermfg=blue - - hi EasyMotionTarget2First ctermbg=none ctermfg=red - hi EasyMotionTarget2Second ctermbg=none ctermfg=lightred -< - 2) Set the highlighting in your vimrc - - This is ideal if you want to link the colors to highlighting groups that - are available in almost every color scheme, e.g. |ErrorMsg| (usually - bright red) and Comment (usually faded). You can be sure that the - color scheme's colors will be used instead of the default red/gray - if you choose this option. - - Example: > - - hi link EasyMotionTarget ErrorMsg - hi link EasyMotionShade Comment - - hi link EasyMotionTarget2First MatchParen - hi link EasyMotionTarget2Second MatchParen -< - -Use CSApprox *EasyMotion_force_csapprox* - *g:EasyMotion_force_csapprox* - if you install CSApprox & want to use gui color for EasyMotion, set this - option to 1. -> - let g:EasyMotion_force_csapprox = 1 -< - Default: 0 - ------------------------------------------------------------------------------- -Custom mappings *easymotion-custom-mappings* - -EasyMotion allows you to customize all default mappings to avoid conflicts -with existing mappings. It is possible to change the default leader key -of all mappings to another key or sequence. It is also possible to fine -tune the plugin to your need by changing every single sequence. - -Leader key *EasyMotion_leader_key* *easymotion-leader-key* - *(easymotion-prefix)* - -The default leader key can be changed with the |(easymotion-prefix)| - -Set this keymapping to the key sequence to use as the prefix of the mappings -described in |easymotion-default-mappings|. - -Note: The default leader key has been changed to '' to -avoid conflicts with other plugins. You can revert to the original -leader by setting this keymapping in your vimrc: > - - map (easymotion-prefix) -< -Default: '' - -Custom Keys *easymotion-custom-keys* - -All custom mappings follow the same format: > - - (easymotion-{motion}) -< -Example: > - - map s (easymotion-s) - map _f (easymotion-f) - map (easymotion-T) -< -See |easymotion-plug-table| for a table of motions that can be mapped -and their default values. - -============================================================================== -License *easymotion-license* - -License: MIT license - -Copyright (c) 2014 Kim Silkebækken, haya14busa - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -============================================================================== -Known bugs *easymotion-known-bugs* - -See: https://github.com/Lokaltog/vim-easymotion/issues - -Pull Requests are welcome! :) - -============================================================================== -Contributing *easymotion-contributing* - -If you experience any bugs or have feature requests, please open an issue on -GitHub. Fork the source repository on GitHub and send a pull request if you -have any code improvements. - -Author: Kim Silkebækken - haya14busa (since version 2.0) -Source repository: https://github.com/Lokaltog/vim-easymotion - - -============================================================================== -Credits *easymotion-credits* - -- Ben Boeckel: ge and WORD motions -- Drew Neil: operator-pending mappings -- Rob O'Dwyer: customizable mappings without giving up all defaults -- Michel D'Hooge: customizable leader -- Maxime Bourget: search motion, improved JK motion behavior -- Kearn Holliday: fix jumplist issues -- Shougo Matsushita: fix CSApprox issue -- supasorn: two key combos and bidirectional motion -- mtth: startofline(keep column) -- bootleq: fixed bufname bug -- mattn: fix multibyte handling -- yuex: fix visual mode selection bug (o command) - -and more!: https://github.com/Lokaltog/vim-easymotion/graphs/contributors - -EasyMotion is based on Bartlomiej Podolak's great PreciseJump script, which -can be downloaded here: - -http://www.vim.org/scripts/script.php?script_id=3437 - -Special Thanks for other plugins and the authors:~ -Migemo feature: - - Author: rhysd(@Linda_pp) - - https://github.com/rhysd/clever-f.vim -Show uppercase feature: - - Author: t9md - - https://github.com/t9md/vim-smalls -Find motion command line: - - Author: osyo-manga - - https://github.com/osyo-manga/vim-over - - Library: https://github.com/osyo-manga/vital-over -2-key find motion: - - Authors: goldfeld & justinmk - - https://github.com/goldfeld/vim-seek - - https://github.com/justinmk/vim-sneak -Next/Previous motion: - - Author: justinmk - - https://github.com/justinmk/vim-sneak -Dot repeat feature: - - Author: tpope - - https://github.com/tpope/vim-repeat - -============================================================================== -vim:tw=78:sw=4:ts=8:ft=help:norl: diff --git a/bundle/easymotion/plugin/EasyMotion.vim b/bundle/easymotion/plugin/EasyMotion.vim deleted file mode 100755 index 40bf160..0000000 --- a/bundle/easymotion/plugin/EasyMotion.vim +++ /dev/null @@ -1,346 +0,0 @@ -scriptencoding utf-8 -" EasyMotion - Vim motions on speed! -" -" Author: Kim Silkebækken -" haya14busa -" Source: https://github.com/Lokaltog/vim-easymotion -" == Script initialization {{{ -if expand("%:p") ==# expand(":p") - unlet! g:EasyMotion_loaded -endif -if exists('g:EasyMotion_loaded') || &compatible || version < 703 - finish -endif - -let g:EasyMotion_loaded = 1 -" }}} - -" == Saving 'cpoptions' {{{ -let s:save_cpo = &cpo -set cpo&vim -" }}} - -" == Default configuration {{{ -" -- Option ------------------------------ {{{ -let g:EasyMotion_keys = get(g:, - \ 'EasyMotion_keys', 'asdghklqwertyuiopzxcvbnmfj;') - " \ 'EasyMotion_keys', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') -let g:EasyMotion_do_mapping = get(g: , 'EasyMotion_do_mapping' , 1) -let g:EasyMotion_do_shade = get(g: , 'EasyMotion_do_shade' , 1) -let g:EasyMotion_grouping = get(g: , 'EasyMotion_grouping' , 1) -let g:EasyMotion_startofline = get(g: , 'EasyMotion_startofline' , 1) -let g:EasyMotion_smartcase = get(g: , 'EasyMotion_smartcase' , 0) -let g:EasyMotion_skipfoldedline = get(g: , 'EasyMotion_skipfoldedline' , 1) -let g:EasyMotion_use_migemo = get(g: , 'EasyMotion_use_migemo' , 0) -let g:EasyMotion_use_upper = get(g: , 'EasyMotion_use_upper' , 0) -let g:EasyMotion_enter_jump_first = get(g: , 'EasyMotion_enter_jump_first' , 0) -let g:EasyMotion_space_jump_first = get(g: , 'EasyMotion_space_jump_first' , 0) -let g:EasyMotion_inc_highlight = get(g: , 'EasyMotion_inc_highlight' , 1) -let g:EasyMotion_move_highlight = get(g: , 'EasyMotion_move_highlight' , 1) -let g:EasyMotion_landing_highlight = get(g: , 'EasyMotion_landing_highlight' , 0) -let g:EasyMotion_cursor_highlight = get(g: , 'EasyMotion_cursor_highlight' , 1) -let g:EasyMotion_use_regexp = get(g: , 'EasyMotion_use_regexp' , 1) -let g:EasyMotion_add_search_history = get(g: , 'EasyMotion_add_search_history' , 1) -let g:EasyMotion_off_screen_search = get(g: , 'EasyMotion_off_screen_search' , 1) -let g:EasyMotion_force_csapprox = get(g: , 'EasyMotion_force_csapprox' , 0) -let g:EasyMotion_show_prompt = get(g: , 'EasyMotion_show_prompt' , 1) -let g:EasyMotion_prompt = - \ get(g: , 'EasyMotion_prompt' , 'Search for {n} character(s): ') -let g:EasyMotion_command_line_key_mappings = - \ get(g: , 'EasyMotion_command_line_key_mappings' , {}) -let g:EasyMotion_disable_two_key_combo = - \ get(g: , 'EasyMotion_disable_two_key_combo' , 0) - -"}}} - -" }}} - -" == Mapping {{{ -" Note: bd is short for bidirectional -" l is short for (within) line - -function! s:find_motion_map_helper(motions) "{{{ - for [name, dict] in items(a:motions) - silent exec 'noremap (easymotion-'.name.')' . - \ ' :call EasyMotion#'. dict.fnc .'('. dict.cnt .',0,'. dict.direction .')' - silent exec 'xnoremap (easymotion-'.name.')' . - \ ' :call EasyMotion#'. dict.fnc .'('. dict.cnt .',1,'. dict.direction .')' - " Example: - " noremap (easymotion-f2) :call EasyMotion#S(2,1,0) - " xnoremap (easymotion-f2) :call EasyMotion#S(2,1,0) - endfor -endfunction "}}} -" Find Motion: {{{ -call s:find_motion_map_helper({ - \ 'f' : {'fnc' : 'S' , 'cnt' : 1, 'direction' : 0}, - \ 'F' : {'fnc' : 'S' , 'cnt' : 1, 'direction' : 1}, - \ 's' : {'fnc' : 'S' , 'cnt' : 1, 'direction' : 2}, - \ 'bd-f' : {'fnc' : 'S' , 'cnt' : 1, 'direction' : 2}, - \ 't' : {'fnc' : 'T' , 'cnt' : 1, 'direction' : 0}, - \ 'T' : {'fnc' : 'T' , 'cnt' : 1, 'direction' : 1}, - \ 'bd-t' : {'fnc' : 'T' , 'cnt' : 1, 'direction' : 2}, - \ 'fl' : {'fnc' : 'SL', 'cnt' : 1, 'direction' : 0}, - \ 'Fl' : {'fnc' : 'SL', 'cnt' : 1, 'direction' : 1}, - \ 'sl' : {'fnc' : 'SL', 'cnt' : 1, 'direction' : 2}, - \ 'bd-fl' : {'fnc' : 'SL', 'cnt' : 1, 'direction' : 2}, - \ 'tl' : {'fnc' : 'TL', 'cnt' : 1, 'direction' : 0}, - \ 'Tl' : {'fnc' : 'TL', 'cnt' : 1, 'direction' : 1}, - \ 'bd-tl' : {'fnc' : 'TL', 'cnt' : 1, 'direction' : 2}, - \ - \ 'f2' : {'fnc' : 'S' , 'cnt' : 2, 'direction' : 0}, - \ 'F2' : {'fnc' : 'S' , 'cnt' : 2, 'direction' : 1}, - \ 's2' : {'fnc' : 'S' , 'cnt' : 2, 'direction' : 2}, - \ 'bd-f2' : {'fnc' : 'S' , 'cnt' : 2, 'direction' : 2}, - \ 't2' : {'fnc' : 'T' , 'cnt' : 2, 'direction' : 0}, - \ 'T2' : {'fnc' : 'T' , 'cnt' : 2, 'direction' : 1}, - \ 'bd-t2' : {'fnc' : 'T' , 'cnt' : 2, 'direction' : 2}, - \ 'fl2' : {'fnc' : 'SL', 'cnt' : 2, 'direction' : 0}, - \ 'Fl2' : {'fnc' : 'SL', 'cnt' : 2, 'direction' : 1}, - \ 'sl2' : {'fnc' : 'SL', 'cnt' : 2, 'direction' : 2}, - \ 'bd-fl2' : {'fnc' : 'SL', 'cnt' : 2, 'direction' : 2}, - \ 'tl2' : {'fnc' : 'TL', 'cnt' : 2, 'direction' : 0}, - \ 'Tl2' : {'fnc' : 'TL', 'cnt' : 2, 'direction' : 1}, - \ 'bd-tl2' : {'fnc' : 'TL', 'cnt' : 2, 'direction' : 2}, - \ - \ 'fn' : {'fnc' : 'S' , 'cnt' : -1, 'direction' : 0}, - \ 'Fn' : {'fnc' : 'S' , 'cnt' : -1, 'direction' : 1}, - \ 'sn' : {'fnc' : 'S' , 'cnt' : -1, 'direction' : 2}, - \ 'bd-fn' : {'fnc' : 'S' , 'cnt' : -1, 'direction' : 2}, - \ 'tn' : {'fnc' : 'T' , 'cnt' : -1, 'direction' : 0}, - \ 'Tn' : {'fnc' : 'T' , 'cnt' : -1, 'direction' : 1}, - \ 'bd-tn' : {'fnc' : 'T' , 'cnt' : -1, 'direction' : 2}, - \ 'fln' : {'fnc' : 'SL', 'cnt' : -1, 'direction' : 0}, - \ 'Fln' : {'fnc' : 'SL', 'cnt' : -1, 'direction' : 1}, - \ 'sln' : {'fnc' : 'SL', 'cnt' : -1, 'direction' : 2}, - \ 'bd-fln' : {'fnc' : 'SL', 'cnt' : -1, 'direction' : 2}, - \ 'tln' : {'fnc' : 'TL', 'cnt' : -1, 'direction' : 0}, - \ 'Tln' : {'fnc' : 'TL', 'cnt' : -1, 'direction' : 1}, - \ 'bd-tln' : {'fnc' : 'TL', 'cnt' : -1, 'direction' : 2}, - \ }) -"}}} - -" -- Word Motion {{{ -" Word: {{{ -noremap (easymotion-w) :call EasyMotion#WB(0,0) -xnoremap (easymotion-w) :call EasyMotion#WB(1,0) -noremap (easymotion-b) :call EasyMotion#WB(0,1) -xnoremap (easymotion-b) :call EasyMotion#WB(1,1) -noremap (easymotion-bd-w) :call EasyMotion#WB(0,2) -xnoremap (easymotion-bd-w) :call EasyMotion#WB(1,2) -"}}} - -" WORD: {{{ -noremap (easymotion-W) :call EasyMotion#WBW(0,0) -xnoremap (easymotion-W) :call EasyMotion#WBW(1,0) -noremap (easymotion-B) :call EasyMotion#WBW(0,1) -xnoremap (easymotion-B) :call EasyMotion#WBW(1,1) -noremap (easymotion-bd-W) :call EasyMotion#WBW(0,2) -xnoremap (easymotion-bd-W) :call EasyMotion#WBW(1,2) -"}}} - -" iskeyword {{{ -noremap (easymotion-iskeyword-w) :call EasyMotion#WBK(0,0) -xnoremap (easymotion-iskeyword-w) :call EasyMotion#WBK(1,0) -noremap (easymotion-iskeyword-b) :call EasyMotion#WBK(0,1) -xnoremap (easymotion-iskeyword-b) :call EasyMotion#WBK(1,1) -noremap (easymotion-iskeyword-bd-w) :call EasyMotion#WBK(0,2) -xnoremap (easymotion-iskeyword-bd-w) :call EasyMotion#WBK(1,2) -" }}} - -" End Word: {{{ -noremap (easymotion-e) :call EasyMotion#E(0,0) -xnoremap (easymotion-e) :call EasyMotion#E(1,0) -noremap (easymotion-ge) :call EasyMotion#E(0,1) -xnoremap (easymotion-ge) :call EasyMotion#E(1,1) -noremap (easymotion-bd-e) :call EasyMotion#E(0,2) -xnoremap (easymotion-bd-e) :call EasyMotion#E(1,2) -"}}} - -" END WORD: {{{ -noremap (easymotion-E) :call EasyMotion#EW(0,0) -xnoremap (easymotion-E) :call EasyMotion#EW(1,0) -noremap (easymotion-gE) :call EasyMotion#EW(0,1) -xnoremap (easymotion-gE) :call EasyMotion#EW(1,1) -noremap (easymotion-bd-E) :call EasyMotion#EW(0,2) -xnoremap (easymotion-bd-E) :call EasyMotion#EW(1,2) -"}}} - -" iskeyword End: {{{ -noremap (easymotion-iskeyword-e) :call EasyMotion#EK(0,0) -xnoremap (easymotion-iskeyword-e) :call EasyMotion#EK(1,0) -noremap (easymotion-iskeyword-ge) :call EasyMotion#EK(0,1) -xnoremap (easymotion-iskeyword-ge) :call EasyMotion#EK(1,1) -noremap (easymotion-iskeyword-bd-e) :call EasyMotion#EK(0,2) -xnoremap (easymotion-iskeyword-bd-e) :call EasyMotion#EK(1,2) -"}}} -"}}} - -" -- JK Motion {{{ -noremap (easymotion-j) :call EasyMotion#JK(0,0) -xnoremap (easymotion-j) :call EasyMotion#JK(1,0) -noremap (easymotion-k) :call EasyMotion#JK(0,1) -xnoremap (easymotion-k) :call EasyMotion#JK(1,1) -noremap (easymotion-bd-jk) :call EasyMotion#JK(0,2) -xnoremap (easymotion-bd-jk) :call EasyMotion#JK(1,2) - -" Start of Line JK {{{ -noremap (easymotion-sol-j) :call EasyMotion#Sol(0,0) -xnoremap (easymotion-sol-j) :call EasyMotion#Sol(1,0) -noremap (easymotion-sol-k) :call EasyMotion#Sol(0,1) -xnoremap (easymotion-sol-k) :call EasyMotion#Sol(1,1) -noremap (easymotion-sol-bd-jk) :call EasyMotion#Sol(0,2) -xnoremap (easymotion-sol-bd-jk) :call EasyMotion#Sol(1,2) -"}}} - -" End of Line JK {{{ -noremap (easymotion-eol-j) :call EasyMotion#Eol(0,0) -xnoremap (easymotion-eol-j) :call EasyMotion#Eol(1,0) -noremap (easymotion-eol-k) :call EasyMotion#Eol(0,1) -xnoremap (easymotion-eol-k) :call EasyMotion#Eol(1,1) -noremap (easymotion-eol-bd-jk) :call EasyMotion#Eol(0,2) -xnoremap (easymotion-eol-bd-jk) :call EasyMotion#Eol(1,2) -"}}} - -"}}} - -" -- Search Motion {{{ -noremap (easymotion-n) :call EasyMotion#Search(0,0,0) -xnoremap (easymotion-n) :call EasyMotion#Search(1,0,0) -noremap (easymotion-N) :call EasyMotion#Search(0,1,0) -xnoremap (easymotion-N) :call EasyMotion#Search(1,1,0) - -noremap (easymotion-vim-n) :call EasyMotion#Search(0,0,1) -xnoremap (easymotion-vim-n) :call EasyMotion#Search(1,0,1) -noremap (easymotion-vim-N) :call EasyMotion#Search(0,1,1) -xnoremap (easymotion-vim-N) :call EasyMotion#Search(1,1,1) - -noremap (easymotion-bd-n) :call EasyMotion#Search(0,2,0) -xnoremap (easymotion-bd-n) :call EasyMotion#Search(1,2,0) -"}}} - -" -- Jump To Anywhere Motion {{{ -noremap (easymotion-jumptoanywhere) - \ :call EasyMotion#JumpToAnywhere(0,2) -xnoremap (easymotion-jumptoanywhere) - \ :call EasyMotion#JumpToAnywhere(1,2) -"}}} - -" -- Repeat Motion {{{ -noremap (easymotion-repeat) - \ :call EasyMotion#Repeat(0) -xnoremap (easymotion-repeat) - \ :call EasyMotion#Repeat(1) - -noremap (easymotion-dotrepeat) - \ :call EasyMotion#DotRepeat() -"}}} - -" -- Next,Previous Motion {{{ -noremap (easymotion-next) - \ :call EasyMotion#NextPrevious(0,0) -xnoremap (easymotion-next) - \ :call EasyMotion#NextPrevious(1,0) - -noremap (easymotion-prev) - \ :call EasyMotion#NextPrevious(0,1) -xnoremap (easymotion-prev) - \ :call EasyMotion#NextPrevious(1,1) -"}}} - -" -- Line Motion {{{ -" Word Line: {{{ -noremap (easymotion-wl) :call EasyMotion#WBL(0,0) -xnoremap (easymotion-wl) :call EasyMotion#WBL(1,0) -noremap (easymotion-bl) :call EasyMotion#WBL(0,1) -xnoremap (easymotion-bl) :call EasyMotion#WBL(1,1) -noremap (easymotion-bd-wl) :call EasyMotion#WBL(0,2) -xnoremap (easymotion-bd-wl) :call EasyMotion#WBL(1,2) -"}}} - -" End Word Line: {{{ -noremap (easymotion-el) :call EasyMotion#EL(0,0) -xnoremap (easymotion-el) :call EasyMotion#EL(1,0) -noremap (easymotion-gel) :call EasyMotion#EL(0,1) -xnoremap (easymotion-gel) :call EasyMotion#EL(1,1) -noremap (easymotion-bd-el) :call EasyMotion#EL(0,2) -xnoremap (easymotion-bd-el) :call EasyMotion#EL(1,2) -"}}} - -" LineAnywhere Line: {{{ -noremap (easymotion-lineforward) - \ :call EasyMotion#LineAnywhere(0,0) -xnoremap (easymotion-lineforward) - \ :call EasyMotion#LineAnywhere(1,0) - -noremap (easymotion-linebackward) - \ :call EasyMotion#LineAnywhere(0,1) -xnoremap (easymotion-linebackward) - \ :call EasyMotion#LineAnywhere(1,1) - -noremap (easymotion-lineanywhere) - \ :call EasyMotion#LineAnywhere(0,2) -xnoremap (easymotion-lineanywhere) - \ :call EasyMotion#LineAnywhere(1,2) - -"}}} -"}}} - -noremap (easymotion-activate) :call EasyMotion#activate(0) -xnoremap (easymotion-activate) :call EasyMotion#activate(1) - -" }}} - -" == Default key mapping {{{ -if g:EasyMotion_do_mapping == 1 - " Prepare Prefix: {{{ - if exists('g:EasyMotion_leader_key') - exec 'map ' . g:EasyMotion_leader_key . ' (easymotion-prefix)' - else - if !hasmapto('(easymotion-prefix)') - map (easymotion-prefix) - endif - endif - "}}} - - function! s:default_mapping(motions, do_mapping) "{{{ - for motion in a:motions - " Mapping {{{ - if exists('g:EasyMotion_mapping_' . motion) - " Backward compatible mapping [deprecated] - silent exec 'map ' . - \ eval('g:EasyMotion_mapping_' . motion) . ' (easymotion-' . motion . ')' - elseif a:do_mapping - \ && !hasmapto('(easymotion-' . motion . ')') - \ && empty(maparg('(easymotion-prefix)' . motion, 'nov')) - - " Do mapping - silent exec 'map ' . - \'(easymotion-prefix)' . motion . ' (easymotion-' . motion . ')' - endif "}}} - endfor - endfunction "}}} - - " Default Mapping: - call s:default_mapping( - \ ['f', 'F', 's', 't', 'T', - \ 'w', 'W', 'b', 'B', 'e', 'E', 'ge', 'gE', - \ 'j', 'k', 'n', 'N'], g:EasyMotion_do_mapping) -endif "}}} - -" == CommandLine Mapping {{{ -command! -nargs=* -\ EMCommandLineNoreMap -\ call EasyMotion#command_line#cnoremap([]) -command! -nargs=* -\ EMCommandLineMap -\ call EasyMotion#command_line#cmap([]) -command! -nargs=1 -\ EMCommandLineUnMap -\ call EasyMotion#command_line#cunmap() -"}}} - -" == Restore 'cpoptions' {{{ -let &cpo = s:save_cpo -unlet s:save_cpo -" }}} -" vim: fdm=marker:et:ts=4:sw=4:sts=4 diff --git a/bundle/easymotion/t/easymotion_spec.vim b/bundle/easymotion/t/easymotion_spec.vim deleted file mode 100755 index 8924eca..0000000 --- a/bundle/easymotion/t/easymotion_spec.vim +++ /dev/null @@ -1,1437 +0,0 @@ -"============================================================================= -" FILE: t/easymotion_spec.vim -" AUTHOR: haya14busa -" Test: https://github.com/kana/vim-vspec -" Refer: https://github.com/rhysd/clever-f.vim -" Description: EasyMotion test with vim-vspec -" License: MIT license {{{ -" Permission is hereby granted, free of charge, to any person obtaining -" a copy of this software and associated documentation files (the -" "Software"), to deal in the Software without restriction, including -" without limitation the rights to use, copy, modify, merge, publish, -" distribute, sublicense, and/or sell copies of the Software, and to -" permit persons to whom the Software is furnished to do so, subject to -" the following conditions: -" -" The above copyright notice and this permission notice shall be included -" in all copies or substantial portions of the Software. -" -" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -" IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -" CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -" TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -" SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -" }}} -"============================================================================= - -" Avoid source test files {{{ -if expand("%:p") ==# expand(":p") - finish -endif -"}}} - -let s:root_dir = matchstr(system('git rev-parse --show-cdup'), '[^\n]\+') -execute 'set' 'rtp +=./'.s:root_dir -runtime! plugin/EasyMotion.vim - -" Default settings {{{ -describe 'Default settings' - it 'provide default mappings for find motion' - " Find Motion: {{{ - " s - Expect maparg('(easymotion-s)', 'n') ==# ':call EasyMotion#S(1,0,2)' - Expect maparg('(easymotion-s)', 'o') ==# ':call EasyMotion#S(1,0,2)' - Expect maparg('(easymotion-s)', 'v') ==# ':call EasyMotion#S(1,1,2)' - " f - Expect maparg('(easymotion-f)', 'n') ==# ':call EasyMotion#S(1,0,0)' - Expect maparg('(easymotion-f)', 'o') ==# ':call EasyMotion#S(1,0,0)' - Expect maparg('(easymotion-f)', 'v') ==# ':call EasyMotion#S(1,1,0)' - " F - Expect maparg('(easymotion-F)', 'n') ==# ':call EasyMotion#S(1,0,1)' - Expect maparg('(easymotion-F)', 'o') ==# ':call EasyMotion#S(1,0,1)' - Expect maparg('(easymotion-F)', 'v') ==# ':call EasyMotion#S(1,1,1)' - " bd-f - Expect maparg('(easymotion-bd-f)', 'n') ==# maparg('(easymotion-s)', 'n') - Expect maparg('(easymotion-bd-f)', 'o') ==# maparg('(easymotion-s)', 'o') - Expect maparg('(easymotion-bd-f)', 'v') ==# maparg('(easymotion-s)', 'v') - " t - Expect maparg('(easymotion-t)', 'n') ==# ':call EasyMotion#T(1,0,0)' - Expect maparg('(easymotion-t)', 'o') ==# ':call EasyMotion#T(1,0,0)' - Expect maparg('(easymotion-t)', 'v') ==# ':call EasyMotion#T(1,1,0)' - " T - Expect maparg('(easymotion-T)', 'n') ==# ':call EasyMotion#T(1,0,1)' - Expect maparg('(easymotion-T)', 'o') ==# ':call EasyMotion#T(1,0,1)' - Expect maparg('(easymotion-T)', 'v') ==# ':call EasyMotion#T(1,1,1)' - " bd-t - Expect maparg('(easymotion-bd-t)', 'n') ==# ':call EasyMotion#T(1,0,2)' - Expect maparg('(easymotion-bd-t)', 'o') ==# ':call EasyMotion#T(1,0,2)' - Expect maparg('(easymotion-bd-t)', 'v') ==# ':call EasyMotion#T(1,1,2)' - " sl - Expect maparg('(easymotion-sl)', 'n') ==# ':call EasyMotion#SL(1,0,2)' - Expect maparg('(easymotion-sl)', 'o') ==# ':call EasyMotion#SL(1,0,2)' - Expect maparg('(easymotion-sl)', 'v') ==# ':call EasyMotion#SL(1,1,2)' - " fl - Expect maparg('(easymotion-fl)', 'n') ==# ':call EasyMotion#SL(1,0,0)' - Expect maparg('(easymotion-fl)', 'o') ==# ':call EasyMotion#SL(1,0,0)' - Expect maparg('(easymotion-fl)', 'v') ==# ':call EasyMotion#SL(1,1,0)' - " Fl - Expect maparg('(easymotion-Fl)', 'n') ==# ':call EasyMotion#SL(1,0,1)' - Expect maparg('(easymotion-Fl)', 'o') ==# ':call EasyMotion#SL(1,0,1)' - Expect maparg('(easymotion-Fl)', 'v') ==# ':call EasyMotion#SL(1,1,1)' - " bd-fl - Expect maparg('(easymotion-bd-fl)', 'n') ==# maparg('(easymotion-sl)', 'n') - Expect maparg('(easymotion-bd-fl)', 'o') ==# maparg('(easymotion-sl)', 'o') - Expect maparg('(easymotion-bd-fl)', 'v') ==# maparg('(easymotion-sl)', 'v') - " tl - Expect maparg('(easymotion-tl)', 'n') ==# ':call EasyMotion#TL(1,0,0)' - Expect maparg('(easymotion-tl)', 'o') ==# ':call EasyMotion#TL(1,0,0)' - Expect maparg('(easymotion-tl)', 'v') ==# ':call EasyMotion#TL(1,1,0)' - " Tl - Expect maparg('(easymotion-Tl)', 'n') ==# ':call EasyMotion#TL(1,0,1)' - Expect maparg('(easymotion-Tl)', 'o') ==# ':call EasyMotion#TL(1,0,1)' - Expect maparg('(easymotion-Tl)', 'v') ==# ':call EasyMotion#TL(1,1,1)' - " bd-tl - Expect maparg('(easymotion-bd-tl)', 'n') ==# ':call EasyMotion#TL(1,0,2)' - Expect maparg('(easymotion-bd-tl)', 'o') ==# ':call EasyMotion#TL(1,0,2)' - Expect maparg('(easymotion-bd-tl)', 'v') ==# ':call EasyMotion#TL(1,1,2)' - "}}} - - " Two Char Find Motion: {{{ - " s2 - Expect maparg('(easymotion-s2)', 'n') ==# ':call EasyMotion#S(2,0,2)' - Expect maparg('(easymotion-s2)', 'o') ==# ':call EasyMotion#S(2,0,2)' - Expect maparg('(easymotion-s2)', 'v') ==# ':call EasyMotion#S(2,1,2)' - " f2 - Expect maparg('(easymotion-f2)', 'n') ==# ':call EasyMotion#S(2,0,0)' - Expect maparg('(easymotion-f2)', 'o') ==# ':call EasyMotion#S(2,0,0)' - Expect maparg('(easymotion-f2)', 'v') ==# ':call EasyMotion#S(2,1,0)' - " F2 - Expect maparg('(easymotion-F2)', 'n') ==# ':call EasyMotion#S(2,0,1)' - Expect maparg('(easymotion-F2)', 'o') ==# ':call EasyMotion#S(2,0,1)' - Expect maparg('(easymotion-F2)', 'v') ==# ':call EasyMotion#S(2,1,1)' - " bd-f2 - Expect maparg('(easymotion-bd-f2)', 'n') ==# maparg('(easymotion-s2)', 'n') - Expect maparg('(easymotion-bd-f2)', 'o') ==# maparg('(easymotion-s2)', 'o') - Expect maparg('(easymotion-bd-f2)', 'v') ==# maparg('(easymotion-s2)', 'v') - " t2 - Expect maparg('(easymotion-t2)', 'n') ==# ':call EasyMotion#T(2,0,0)' - Expect maparg('(easymotion-t2)', 'o') ==# ':call EasyMotion#T(2,0,0)' - Expect maparg('(easymotion-t2)', 'v') ==# ':call EasyMotion#T(2,1,0)' - " T2 - Expect maparg('(easymotion-T2)', 'n') ==# ':call EasyMotion#T(2,0,1)' - Expect maparg('(easymotion-T2)', 'o') ==# ':call EasyMotion#T(2,0,1)' - Expect maparg('(easymotion-T2)', 'v') ==# ':call EasyMotion#T(2,1,1)' - " sl2 - Expect maparg('(easymotion-sl2)', 'n') ==# ':call EasyMotion#SL(2,0,2)' - Expect maparg('(easymotion-sl2)', 'o') ==# ':call EasyMotion#SL(2,0,2)' - Expect maparg('(easymotion-sl2)', 'v') ==# ':call EasyMotion#SL(2,1,2)' - " bd-t2 - Expect maparg('(easymotion-bd-t2)', 'n') ==# ':call EasyMotion#T(2,0,2)' - Expect maparg('(easymotion-bd-t2)', 'o') ==# ':call EasyMotion#T(2,0,2)' - Expect maparg('(easymotion-bd-t2)', 'v') ==# ':call EasyMotion#T(2,1,2)' - " fl2 - Expect maparg('(easymotion-fl2)', 'n') ==# ':call EasyMotion#SL(2,0,0)' - Expect maparg('(easymotion-fl2)', 'o') ==# ':call EasyMotion#SL(2,0,0)' - Expect maparg('(easymotion-fl2)', 'v') ==# ':call EasyMotion#SL(2,1,0)' - " Fl2 - Expect maparg('(easymotion-Fl2)', 'n') ==# ':call EasyMotion#SL(2,0,1)' - Expect maparg('(easymotion-Fl2)', 'o') ==# ':call EasyMotion#SL(2,0,1)' - Expect maparg('(easymotion-Fl2)', 'v') ==# ':call EasyMotion#SL(2,1,1)' - " bd-fl2 - Expect maparg('(easymotion-bd-fl2)', 'n') ==# maparg('(easymotion-sl2)', 'n') - Expect maparg('(easymotion-bd-fl2)', 'o') ==# maparg('(easymotion-sl2)', 'o') - Expect maparg('(easymotion-bd-fl2)', 'v') ==# maparg('(easymotion-sl2)', 'v') - " tl2 - Expect maparg('(easymotion-tl2)', 'n') ==# ':call EasyMotion#TL(2,0,0)' - Expect maparg('(easymotion-tl2)', 'o') ==# ':call EasyMotion#TL(2,0,0)' - Expect maparg('(easymotion-tl2)', 'v') ==# ':call EasyMotion#TL(2,1,0)' - " Tl2 - Expect maparg('(easymotion-Tl2)', 'n') ==# ':call EasyMotion#TL(2,0,1)' - Expect maparg('(easymotion-Tl2)', 'o') ==# ':call EasyMotion#TL(2,0,1)' - Expect maparg('(easymotion-Tl2)', 'v') ==# ':call EasyMotion#TL(2,1,1)' - " bd-tl2 - Expect maparg('(easymotion-bd-tl2)', 'n') ==# ':call EasyMotion#TL(2,0,2)' - Expect maparg('(easymotion-bd-tl2)', 'o') ==# ':call EasyMotion#TL(2,0,2)' - Expect maparg('(easymotion-bd-tl2)', 'v') ==# ':call EasyMotion#TL(2,1,2)' - "}}} - - " Multi Char Find Motion: {{{ - " sn - Expect maparg('(easymotion-sn)', 'n') ==# ':call EasyMotion#S(-1,0,2)' - Expect maparg('(easymotion-sn)', 'o') ==# ':call EasyMotion#S(-1,0,2)' - Expect maparg('(easymotion-sn)', 'v') ==# ':call EasyMotion#S(-1,1,2)' - " fn - Expect maparg('(easymotion-fn)', 'n') ==# ':call EasyMotion#S(-1,0,0)' - Expect maparg('(easymotion-fn)', 'o') ==# ':call EasyMotion#S(-1,0,0)' - Expect maparg('(easymotion-fn)', 'v') ==# ':call EasyMotion#S(-1,1,0)' - " Fn - Expect maparg('(easymotion-Fn)', 'n') ==# ':call EasyMotion#S(-1,0,1)' - Expect maparg('(easymotion-Fn)', 'o') ==# ':call EasyMotion#S(-1,0,1)' - Expect maparg('(easymotion-Fn)', 'v') ==# ':call EasyMotion#S(-1,1,1)' - " bd-fn - Expect maparg('(easymotion-bd-fn)', 'n') ==# maparg('(easymotion-sn)', 'n') - Expect maparg('(easymotion-bd-fn)', 'o') ==# maparg('(easymotion-sn)', 'o') - Expect maparg('(easymotion-bd-fn)', 'v') ==# maparg('(easymotion-sn)', 'v') - " tn - Expect maparg('(easymotion-tn)', 'n') ==# ':call EasyMotion#T(-1,0,0)' - Expect maparg('(easymotion-tn)', 'o') ==# ':call EasyMotion#T(-1,0,0)' - Expect maparg('(easymotion-tn)', 'v') ==# ':call EasyMotion#T(-1,1,0)' - " Tn - Expect maparg('(easymotion-Tn)', 'n') ==# ':call EasyMotion#T(-1,0,1)' - Expect maparg('(easymotion-Tn)', 'o') ==# ':call EasyMotion#T(-1,0,1)' - Expect maparg('(easymotion-Tn)', 'v') ==# ':call EasyMotion#T(-1,1,1)' - " bd-tn - Expect maparg('(easymotion-bd-tn)', 'n') ==# ':call EasyMotion#T(-1,0,2)' - Expect maparg('(easymotion-bd-tn)', 'o') ==# ':call EasyMotion#T(-1,0,2)' - Expect maparg('(easymotion-bd-tn)', 'v') ==# ':call EasyMotion#T(-1,1,2)' - " sln - Expect maparg('(easymotion-sln)', 'n') ==# ':call EasyMotion#SL(-1,0,2)' - Expect maparg('(easymotion-sln)', 'o') ==# ':call EasyMotion#SL(-1,0,2)' - Expect maparg('(easymotion-sln)', 'v') ==# ':call EasyMotion#SL(-1,1,2)' - " fln - Expect maparg('(easymotion-fln)', 'n') ==# ':call EasyMotion#SL(-1,0,0)' - Expect maparg('(easymotion-fln)', 'o') ==# ':call EasyMotion#SL(-1,0,0)' - Expect maparg('(easymotion-fln)', 'v') ==# ':call EasyMotion#SL(-1,1,0)' - " Fln - Expect maparg('(easymotion-Fln)', 'n') ==# ':call EasyMotion#SL(-1,0,1)' - Expect maparg('(easymotion-Fln)', 'o') ==# ':call EasyMotion#SL(-1,0,1)' - Expect maparg('(easymotion-Fln)', 'v') ==# ':call EasyMotion#SL(-1,1,1)' - " bd-fln - Expect maparg('(easymotion-bd-fln)', 'n') ==# maparg('(easymotion-sln)', 'n') - Expect maparg('(easymotion-bd-fln)', 'o') ==# maparg('(easymotion-sln)', 'o') - Expect maparg('(easymotion-bd-fln)', 'v') ==# maparg('(easymotion-sln)', 'v') - " tln - Expect maparg('(easymotion-tln)', 'n') ==# ':call EasyMotion#TL(-1,0,0)' - Expect maparg('(easymotion-tln)', 'o') ==# ':call EasyMotion#TL(-1,0,0)' - Expect maparg('(easymotion-tln)', 'v') ==# ':call EasyMotion#TL(-1,1,0)' - " Tln - Expect maparg('(easymotion-Tln)', 'n') ==# ':call EasyMotion#TL(-1,0,1)' - Expect maparg('(easymotion-Tln)', 'o') ==# ':call EasyMotion#TL(-1,0,1)' - Expect maparg('(easymotion-Tln)', 'v') ==# ':call EasyMotion#TL(-1,1,1)' - " bd-tln - Expect maparg('(easymotion-bd-tln)', 'n') ==# ':call EasyMotion#TL(-1,0,2)' - Expect maparg('(easymotion-bd-tln)', 'o') ==# ':call EasyMotion#TL(-1,0,2)' - Expect maparg('(easymotion-bd-tln)', 'v') ==# ':call EasyMotion#TL(-1,1,2)' - "}}} - end - - it 'provide default mappings for regrex motion' - "(is_visual, direction) - " direction: - " - 0: forward - " - 1: backward - " - 2: bi-direction - " Word Motion: {{{ - Expect maparg('(easymotion-w)', 'n') ==# ':call EasyMotion#WB(0,0)' - Expect maparg('(easymotion-w)', 'o') ==# ':call EasyMotion#WB(0,0)' - Expect maparg('(easymotion-w)', 'v') ==# ':call EasyMotion#WB(1,0)' - Expect maparg('(easymotion-b)', 'n') ==# ':call EasyMotion#WB(0,1)' - Expect maparg('(easymotion-b)', 'o') ==# ':call EasyMotion#WB(0,1)' - Expect maparg('(easymotion-b)', 'v') ==# ':call EasyMotion#WB(1,1)' - Expect maparg('(easymotion-bd-w)', 'n') ==# ':call EasyMotion#WB(0,2)' - Expect maparg('(easymotion-bd-w)', 'o') ==# ':call EasyMotion#WB(0,2)' - Expect maparg('(easymotion-bd-w)', 'v') ==# ':call EasyMotion#WB(1,2)' - " }}} - - " WORD Motion: {{{ - Expect maparg('(easymotion-W)', 'n') ==# ':call EasyMotion#WBW(0,0)' - Expect maparg('(easymotion-W)', 'o') ==# ':call EasyMotion#WBW(0,0)' - Expect maparg('(easymotion-W)', 'v') ==# ':call EasyMotion#WBW(1,0)' - Expect maparg('(easymotion-B)', 'n') ==# ':call EasyMotion#WBW(0,1)' - Expect maparg('(easymotion-B)', 'o') ==# ':call EasyMotion#WBW(0,1)' - Expect maparg('(easymotion-B)', 'v') ==# ':call EasyMotion#WBW(1,1)' - Expect maparg('(easymotion-bd-W)', 'n') ==# ':call EasyMotion#WBW(0,2)' - Expect maparg('(easymotion-bd-W)', 'o') ==# ':call EasyMotion#WBW(0,2)' - Expect maparg('(easymotion-bd-W)', 'v') ==# ':call EasyMotion#WBW(1,2)' - " }}} - - " Word Motion IsKeyWord: {{{ - Expect maparg('(easymotion-iskeyword-w)', 'n') ==# ':call EasyMotion#WBK(0,0)' - Expect maparg('(easymotion-iskeyword-w)', 'o') ==# ':call EasyMotion#WBK(0,0)' - Expect maparg('(easymotion-iskeyword-w)', 'v') ==# ':call EasyMotion#WBK(1,0)' - Expect maparg('(easymotion-iskeyword-b)', 'n') ==# ':call EasyMotion#WBK(0,1)' - Expect maparg('(easymotion-iskeyword-b)', 'o') ==# ':call EasyMotion#WBK(0,1)' - Expect maparg('(easymotion-iskeyword-b)', 'v') ==# ':call EasyMotion#WBK(1,1)' - Expect maparg('(easymotion-iskeyword-bd-w)', 'n') ==# ':call EasyMotion#WBK(0,2)' - Expect maparg('(easymotion-iskeyword-bd-w)', 'o') ==# ':call EasyMotion#WBK(0,2)' - Expect maparg('(easymotion-iskeyword-bd-w)', 'v') ==# ':call EasyMotion#WBK(1,2)' - " }}} - - " End Of Word Motion: {{{ - Expect maparg('(easymotion-e)', 'n') ==# ':call EasyMotion#E(0,0)' - Expect maparg('(easymotion-e)', 'o') ==# ':call EasyMotion#E(0,0)' - Expect maparg('(easymotion-e)', 'v') ==# ':call EasyMotion#E(1,0)' - Expect maparg('(easymotion-ge)', 'n') ==# ':call EasyMotion#E(0,1)' - Expect maparg('(easymotion-ge)', 'o') ==# ':call EasyMotion#E(0,1)' - Expect maparg('(easymotion-ge)', 'v') ==# ':call EasyMotion#E(1,1)' - Expect maparg('(easymotion-bd-e)', 'n') ==# ':call EasyMotion#E(0,2)' - Expect maparg('(easymotion-bd-e)', 'o') ==# ':call EasyMotion#E(0,2)' - Expect maparg('(easymotion-bd-e)', 'v') ==# ':call EasyMotion#E(1,2)' - " }}} - - " END OF WORD Motion: {{{ - Expect maparg('(easymotion-E)', 'n') ==# ':call EasyMotion#EW(0,0)' - Expect maparg('(easymotion-E)', 'o') ==# ':call EasyMotion#EW(0,0)' - Expect maparg('(easymotion-E)', 'v') ==# ':call EasyMotion#EW(1,0)' - Expect maparg('(easymotion-gE)', 'n') ==# ':call EasyMotion#EW(0,1)' - Expect maparg('(easymotion-gE)', 'o') ==# ':call EasyMotion#EW(0,1)' - Expect maparg('(easymotion-gE)', 'v') ==# ':call EasyMotion#EW(1,1)' - Expect maparg('(easymotion-bd-E)', 'n') ==# ':call EasyMotion#EW(0,2)' - Expect maparg('(easymotion-bd-E)', 'o') ==# ':call EasyMotion#EW(0,2)' - Expect maparg('(easymotion-bd-E)', 'v') ==# ':call EasyMotion#EW(1,2)' - " }}} - - " End Of Word Motion IsKeyWord: {{{ - Expect maparg('(easymotion-iskeyword-e)', 'n') ==# ':call EasyMotion#EK(0,0)' - Expect maparg('(easymotion-iskeyword-e)', 'o') ==# ':call EasyMotion#EK(0,0)' - Expect maparg('(easymotion-iskeyword-e)', 'v') ==# ':call EasyMotion#EK(1,0)' - Expect maparg('(easymotion-iskeyword-ge)', 'n') ==# ':call EasyMotion#EK(0,1)' - Expect maparg('(easymotion-iskeyword-ge)', 'o') ==# ':call EasyMotion#EK(0,1)' - Expect maparg('(easymotion-iskeyword-ge)', 'v') ==# ':call EasyMotion#EK(1,1)' - Expect maparg('(easymotion-iskeyword-bd-e)', 'n') ==# ':call EasyMotion#EK(0,2)' - Expect maparg('(easymotion-iskeyword-bd-e)', 'o') ==# ':call EasyMotion#EK(0,2)' - Expect maparg('(easymotion-iskeyword-bd-e)', 'v') ==# ':call EasyMotion#EK(1,2)' - " }}} - - " JK Motion: {{{ - " default - Expect maparg('(easymotion-j)', 'n') ==# ':call EasyMotion#JK(0,0)' - Expect maparg('(easymotion-j)', 'o') ==# ':call EasyMotion#JK(0,0)' - Expect maparg('(easymotion-j)', 'v') ==# ':call EasyMotion#JK(1,0)' - Expect maparg('(easymotion-k)', 'n') ==# ':call EasyMotion#JK(0,1)' - Expect maparg('(easymotion-k)', 'o') ==# ':call EasyMotion#JK(0,1)' - Expect maparg('(easymotion-k)', 'v') ==# ':call EasyMotion#JK(1,1)' - Expect maparg('(easymotion-bd-jk)', 'n') ==# ':call EasyMotion#JK(0,2)' - Expect maparg('(easymotion-bd-jk)', 'o') ==# ':call EasyMotion#JK(0,2)' - Expect maparg('(easymotion-bd-jk)', 'v') ==# ':call EasyMotion#JK(1,2)' - " start of line - Expect maparg('(easymotion-sol-j)', 'n') ==# ':call EasyMotion#Sol(0,0)' - Expect maparg('(easymotion-sol-j)', 'o') ==# ':call EasyMotion#Sol(0,0)' - Expect maparg('(easymotion-sol-j)', 'v') ==# ':call EasyMotion#Sol(1,0)' - Expect maparg('(easymotion-sol-k)', 'n') ==# ':call EasyMotion#Sol(0,1)' - Expect maparg('(easymotion-sol-k)', 'o') ==# ':call EasyMotion#Sol(0,1)' - Expect maparg('(easymotion-sol-k)', 'v') ==# ':call EasyMotion#Sol(1,1)' - Expect maparg('(easymotion-sol-bd-jk)', 'n') ==# ':call EasyMotion#Sol(0,2)' - Expect maparg('(easymotion-sol-bd-jk)', 'o') ==# ':call EasyMotion#Sol(0,2)' - Expect maparg('(easymotion-sol-bd-jk)', 'v') ==# ':call EasyMotion#Sol(1,2)' - " end of line - Expect maparg('(easymotion-eol-j)', 'n') ==# ':call EasyMotion#Eol(0,0)' - Expect maparg('(easymotion-eol-j)', 'o') ==# ':call EasyMotion#Eol(0,0)' - Expect maparg('(easymotion-eol-j)', 'v') ==# ':call EasyMotion#Eol(1,0)' - Expect maparg('(easymotion-eol-k)', 'n') ==# ':call EasyMotion#Eol(0,1)' - Expect maparg('(easymotion-eol-k)', 'o') ==# ':call EasyMotion#Eol(0,1)' - Expect maparg('(easymotion-eol-k)', 'v') ==# ':call EasyMotion#Eol(1,1)' - Expect maparg('(easymotion-eol-bd-jk)', 'n') ==# ':call EasyMotion#Eol(0,2)' - Expect maparg('(easymotion-eol-bd-jk)', 'o') ==# ':call EasyMotion#Eol(0,2)' - Expect maparg('(easymotion-eol-bd-jk)', 'v') ==# ':call EasyMotion#Eol(1,2)' - " }}} - - " Search Motion: {{{ - Expect maparg('(easymotion-n)', 'n') ==# ':call EasyMotion#Search(0,0,0)' - Expect maparg('(easymotion-n)', 'o') ==# ':call EasyMotion#Search(0,0,0)' - Expect maparg('(easymotion-n)', 'v') ==# ':call EasyMotion#Search(1,0,0)' - Expect maparg('(easymotion-N)', 'n') ==# ':call EasyMotion#Search(0,1,0)' - Expect maparg('(easymotion-N)', 'o') ==# ':call EasyMotion#Search(0,1,0)' - Expect maparg('(easymotion-N)', 'v') ==# ':call EasyMotion#Search(1,1,0)' - Expect maparg('(easymotion-bd-n)', 'n') ==# ':call EasyMotion#Search(0,2,0)' - Expect maparg('(easymotion-bd-n)', 'o') ==# ':call EasyMotion#Search(0,2,0)' - Expect maparg('(easymotion-bd-n)', 'v') ==# ':call EasyMotion#Search(1,2,0)' - - " respect previous direction - Expect maparg('(easymotion-vim-n)', 'n') ==# ':call EasyMotion#Search(0,0,1)' - Expect maparg('(easymotion-vim-n)', 'o') ==# ':call EasyMotion#Search(0,0,1)' - Expect maparg('(easymotion-vim-n)', 'v') ==# ':call EasyMotion#Search(1,0,1)' - Expect maparg('(easymotion-vim-N)', 'n') ==# ':call EasyMotion#Search(0,1,1)' - Expect maparg('(easymotion-vim-N)', 'o') ==# ':call EasyMotion#Search(0,1,1)' - Expect maparg('(easymotion-vim-N)', 'v') ==# ':call EasyMotion#Search(1,1,1)' - " }}} - - " JumpToAnywhere Motion: {{{ - Expect maparg('(easymotion-jumptoanywhere)', 'n') - \ ==# ':call EasyMotion#JumpToAnywhere(0,2)' - Expect maparg('(easymotion-jumptoanywhere)', 'o') - \ ==# ':call EasyMotion#JumpToAnywhere(0,2)' - Expect maparg('(easymotion-jumptoanywhere)', 'v') - \ ==# ':call EasyMotion#JumpToAnywhere(1,2)' - " }}} - - " Repeat Motion: {{{ - " (is_visual) - Expect maparg('(easymotion-repeat)', 'n') - \ ==# ':call EasyMotion#Repeat(0)' - Expect maparg('(easymotion-repeat)', 'o') - \ ==# ':call EasyMotion#Repeat(0)' - Expect maparg('(easymotion-repeat)', 'v') - \ ==# ':call EasyMotion#Repeat(1)' - Expect maparg('(easymotion-dotrepeat)', 'n') - \ ==# ':call EasyMotion#DotRepeat()' - Expect maparg('(easymotion-dotrepeat)', 'o') - \ ==# ':call EasyMotion#DotRepeat()' - Expect maparg('(easymotion-dotrepeat)', 'v') - \ ==# ':call EasyMotion#DotRepeat()' - " }}} - - " Next, Previous motion {{{ - Expect maparg('(easymotion-next)', 'n') - \ ==# ':call EasyMotion#NextPrevious(0,0)' - Expect maparg('(easymotion-next)', 'o') - \ ==# ':call EasyMotion#NextPrevious(0,0)' - Expect maparg('(easymotion-next)', 'v') - \ ==# ':call EasyMotion#NextPrevious(1,0)' - - Expect maparg('(easymotion-prev)', 'n') - \ ==# ':call EasyMotion#NextPrevious(0,1)' - Expect maparg('(easymotion-prev)', 'o') - \ ==# ':call EasyMotion#NextPrevious(0,1)' - Expect maparg('(easymotion-prev)', 'v') - \ ==# ':call EasyMotion#NextPrevious(1,1)' - " }}} - - " Line Motion: {{{ - " word - Expect maparg('(easymotion-wl)', 'n') ==# ':call EasyMotion#WBL(0,0)' - Expect maparg('(easymotion-wl)', 'o') ==# ':call EasyMotion#WBL(0,0)' - Expect maparg('(easymotion-wl)', 'v') ==# ':call EasyMotion#WBL(1,0)' - Expect maparg('(easymotion-bl)', 'n') ==# ':call EasyMotion#WBL(0,1)' - Expect maparg('(easymotion-bl)', 'o') ==# ':call EasyMotion#WBL(0,1)' - Expect maparg('(easymotion-bl)', 'v') ==# ':call EasyMotion#WBL(1,1)' - Expect maparg('(easymotion-bd-wl)', 'n') ==# ':call EasyMotion#WBL(0,2)' - Expect maparg('(easymotion-bd-wl)', 'o') ==# ':call EasyMotion#WBL(0,2)' - Expect maparg('(easymotion-bd-wl)', 'v') ==# ':call EasyMotion#WBL(1,2)' - " end of word - Expect maparg('(easymotion-el)', 'n') ==# ':call EasyMotion#EL(0,0)' - Expect maparg('(easymotion-el)', 'o') ==# ':call EasyMotion#EL(0,0)' - Expect maparg('(easymotion-el)', 'v') ==# ':call EasyMotion#EL(1,0)' - Expect maparg('(easymotion-gel)', 'n') ==# ':call EasyMotion#EL(0,1)' - Expect maparg('(easymotion-gel)', 'o') ==# ':call EasyMotion#EL(0,1)' - Expect maparg('(easymotion-gel)', 'v') ==# ':call EasyMotion#EL(1,1)' - Expect maparg('(easymotion-bd-el)', 'n') ==# ':call EasyMotion#EL(0,2)' - Expect maparg('(easymotion-bd-el)', 'o') ==# ':call EasyMotion#EL(0,2)' - Expect maparg('(easymotion-bd-el)', 'v') ==# ':call EasyMotion#EL(1,2)' - " LineAnywhere - Expect maparg('(easymotion-lineforward)', 'n') - \ ==# ':call EasyMotion#LineAnywhere(0,0)' - Expect maparg('(easymotion-lineforward)', 'o') - \ ==# ':call EasyMotion#LineAnywhere(0,0)' - Expect maparg('(easymotion-lineforward)', 'v') - \ ==# ':call EasyMotion#LineAnywhere(1,0)' - Expect maparg('(easymotion-linebackward)', 'n') - \ ==# ':call EasyMotion#LineAnywhere(0,1)' - Expect maparg('(easymotion-linebackward)', 'o') - \ ==# ':call EasyMotion#LineAnywhere(0,1)' - Expect maparg('(easymotion-linebackward)', 'v') - \ ==# ':call EasyMotion#LineAnywhere(1,1)' - Expect maparg('(easymotion-lineanywhere)', 'n') - \ ==# ':call EasyMotion#LineAnywhere(0,2)' - Expect maparg('(easymotion-lineanywhere)', 'o') - \ ==# ':call EasyMotion#LineAnywhere(0,2)' - Expect maparg('(easymotion-lineanywhere)', 'v') - \ ==# ':call EasyMotion#LineAnywhere(1,2)' - " }}} - - " Activate {{{ - Expect maparg('(easymotion-activate)', 'n') - \ ==# ':call EasyMotion#activate(0)' - Expect maparg('(easymotion-activate)', 'o') - \ ==# ':call EasyMotion#activate(0)' - Expect maparg('(easymotion-activate)', 'v') - \ ==# ':call EasyMotion#activate(1)' - " }}} - end - - it 'provide autoload functions' - try - " load autoload functions - runtime autoload/EasyMotion.vim - runtime autoload/EasyMotion/helper.vim - runtime autoload/EasyMotion/cmigemo.vim - runtime autoload/EasyMotion/init.vim - runtime autoload/EasyMotion/sticky_table.vim - catch - endtry - " autoload/EasyMotion.vim {{{ - Expect exists('*EasyMotion#hoge') ==# 0 - Expect exists('*EasyMotion#S') ==# 1 - Expect exists('*EasyMotion#T') ==# 1 - Expect exists('*EasyMotion#WB') ==# 1 - Expect exists('*EasyMotion#WBW') ==# 1 - Expect exists('*EasyMotion#E') ==# 1 - Expect exists('*EasyMotion#EW') ==# 1 - Expect exists('*EasyMotion#JK') ==# 1 - Expect exists('*EasyMotion#Sol') ==# 1 - Expect exists('*EasyMotion#Eol') ==# 1 - Expect exists('*EasyMotion#Search') ==# 1 - Expect exists('*EasyMotion#JumpToAnywhere') ==# 1 - Expect exists('*EasyMotion#SL') ==# 1 - Expect exists('*EasyMotion#TL') ==# 1 - Expect exists('*EasyMotion#WBL') ==# 1 - Expect exists('*EasyMotion#EL') ==# 1 - Expect exists('*EasyMotion#LineAnywhere') ==# 1 - Expect exists('*EasyMotion#Repeat') ==# 1 - Expect exists('*EasyMotion#NextPrevious') ==# 1 - Expect exists('*EasyMotion#DotRepeat') ==# 1 - "}}} - end - - it 'provide variables to customize EasyMotion' - " Option {{{ - Expect g:EasyMotion_keys ==# 'asdghklqwertyuiopzxcvbnmfj;' - " Expect g:EasyMotion_keys ==# 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' - Expect g:EasyMotion_do_mapping ==# 1 - Expect g:EasyMotion_do_shade ==# 1 - Expect g:EasyMotion_grouping ==# 1 - Expect g:EasyMotion_startofline ==# 1 - Expect g:EasyMotion_smartcase ==# 0 - Expect g:EasyMotion_skipfoldedline ==# 1 - Expect g:EasyMotion_use_migemo ==# 0 - Expect g:EasyMotion_use_upper ==# 0 - Expect g:EasyMotion_enter_jump_first ==# 0 - Expect g:EasyMotion_space_jump_first ==# 0 - Expect g:EasyMotion_show_prompt ==# 1 - Expect g:EasyMotion_inc_highlight ==# 1 - Expect g:EasyMotion_move_highlight ==# 1 - Expect g:EasyMotion_landing_highlight ==# 0 - Expect g:EasyMotion_cursor_highlight ==# 1 - Expect g:EasyMotion_use_regexp ==# 1 - Expect g:EasyMotion_add_search_history ==# 1 - Expect g:EasyMotion_off_screen_search ==# 1 - Expect g:EasyMotion_prompt ==# 'Search for {n} character(s): ' - Expect g:EasyMotion_command_line_key_mappings ==# {} - Expect g:EasyMotion_force_csapprox ==# 0 - Expect g:EasyMotion_disable_two_key_combo ==# 0 - " }}} - - " highlight {{{ - Expect g:EasyMotion_hl_group_target ==# 'EasyMotionTarget' - Expect g:EasyMotion_hl2_first_group_target ==# 'EasyMotionTarget2First' - Expect g:EasyMotion_hl2_second_group_target ==# 'EasyMotionTarget2Second' - Expect g:EasyMotion_hl_group_shade ==# 'EasyMotionShade' - " }}} - end -end -"}}} - -function! AddLine(str) - put! =a:str -endfunction - -function! CursorPos() - return [line('.'), col('.'), getline('.')[col('.')-1]] -endfunction - -" s, f, F, t and T mappings {{{ -describe 's, f, F, t and T mappings' - - before - new - let g:EasyMotion_keys = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' - map s (easymotion-s) - map f (easymotion-f) - map F (easymotion-F) - map t (easymotion-t) - map T (easymotion-T) - call EasyMotion#init() - call AddLine('poge huga hiyo poyo') - end - - after - close! - end - - " s {{{ - it 'provide improved forward search like builtin f & F' - normal! 0 - let l = line('.') - Expect CursorPos() == [l,1,'p'] - normal sha - Expect CursorPos() == [l,6,'h'] - Expect CursorPos() != [l,1,'h'] - - normal! 0 - let l = line('.') - Expect CursorPos() == [l,1,'p'] - normal shb - Expect CursorPos() == [l,11,'h'] - - normal sh - Expect CursorPos() == [l,6,'h'] - - normal! $ - let l = line('.') - Expect CursorPos() == [l,19,'o'] - - normal spc - Expect CursorPos() == [l,19,'o'] - - normal spb - Expect CursorPos() == [l,1,'p'] - end - "}}} - " f {{{ - it 'provide improved backward search like builtin f' - normal! 0 - let l = line('.') - Expect CursorPos() == [l,1,'p'] - - normal fha - Expect CursorPos() == [l,6,'h'] - Expect CursorPos() != [l,1,'h'] - - normal! 0 - let l = line('.') - Expect CursorPos() == [l,1,'p'] - normal fhb - Expect CursorPos() == [l,11,'h'] - - normal fh - Expect CursorPos() == [l,11,'h'] - - end - " "}}} - " F {{{ - it 'provide improved backward search like builtin F' - normal! $ - let l = line('.') - Expect CursorPos() == [l,19,'o'] - - normal Fpa - Expect CursorPos() == [l,16,'p'] - - normal! $ - normal Fpc - Expect CursorPos() == [l,19,'o'] - - normal Fpb - Expect CursorPos() == [l,1,'p'] - end - " "}}} - " t {{{ - it 'provide t mapping like builtin t' - normal! 0 - let l = line('.') - Expect CursorPos() == [l,1,'p'] - Expect CursorPos() != [l,10,'a'] - - normal tha - Expect CursorPos() == [l,5,' '] - - normal! 0 - normal thb - Expect CursorPos() == [l,10,' '] - - normal! 0 - normal thc - Expect CursorPos() == [l,1,'p'] - end - " }}} - " T {{{ - it 'provide T mapping like builtin T' - normal! $ - let l = line('.') - Expect CursorPos() == [l,19,'o'] - Expect CursorPos() != [l,18,'a'] - - normal Toa - Expect CursorPos() == [l,18,'y'] - - normal! $ - normal Tob - Expect CursorPos() == [l,15,' '] - - normal Toa - Expect CursorPos() == [l,3,'g'] - - normal! $ - normal Tod - Expect CursorPos() == [l,19,'o'] - - normal Toc - Expect CursorPos() == [l,3,'g'] - end - "}}} - " visual - it 'have different context in normal mode and visual mode' - let l = line('.') - Expect CursorPos() == [l, 1, 'p'] - - normal foa - Expect CursorPos() == [l, 2, 'o'] - - normal vfha - Expect CursorPos() == [l, 6, 'h'] - - normal fha - Expect CursorPos() == [l, 11, 'h'] - - normal! d - Expect getline('.') == "piyo poyo" - Expect CursorPos() == [l, 2, 'i'] - - normal! dfpa - Expect getline('.') == "poyo" - Expect CursorPos() == [l, 2, 'o'] - end -end -"}}} - -" a non-existent char {{{ -describe 'a non-existent char' - - before - new - let g:EasyMotion_keys = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' - map s (easymotion-s) - map f (easymotion-f) - map F (easymotion-F) - map t (easymotion-t) - map T (easymotion-T) - call EasyMotion#init() - call AddLine('poge huga hiyo poyo') - end - - after - close! - end - - " makes no change {{{ - it 'makes no change' - normal! 0 - let origin = CursorPos() - - normal fd - Expect CursorPos() == origin - normal f1 - Expect CursorPos() == origin - normal f) - Expect CursorPos() == origin - normal f^ - Expect CursorPos() == origin - normal fm - Expect CursorPos() == origin - end - "}}} -end -"}}} - -" when target is in other line, s, f and F mappings {{{ -describe 'when target is in other line, s, f and F mappings' - before - new - let g:EasyMotion_keys = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' - map s (easymotion-s) - map f (easymotion-f) - map F (easymotion-F) - map t (easymotion-t) - map T (easymotion-T) - call EasyMotion#init() - call AddLine('foo bar baz') " L2 - call AddLine('poge huga hiyo poyo') " L1 - " '1234567890123456789' - normal! gg0 - end - - after - close! - end - - " move cursor forward across lines {{{ - it 'move cursor forward & backward across lines' - normal! 0 - let l = line('.') - Expect col('.') == 1 - - normal saa - Expect CursorPos() == [l, 9, 'a'] - - normal saa - Expect CursorPos() == [l+1, 6, 'a'] - - normal sob - Expect CursorPos() == [l+1, 2, 'o'] - - normal! gg0 - let l = line('.') - Expect col('.') == 1 - - normal faa - Expect CursorPos() == [l, 9, 'a'] - - normal faa - Expect CursorPos() == [l+1, 6, 'a'] - - normal faa - Expect CursorPos() == [l+1, 10, 'a'] - - normal Faa - Expect CursorPos() == [l+1, 6, 'a'] - - normal Faa - Expect CursorPos() == [l, 9, 'a'] - end - " }}} -end -"}}} - -" Multibyte characters {{{ -describe 'Multibyte characters' - - before - new - let g:EasyMotion_keys = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' - map s (easymotion-s) - map f (easymotion-f) - map F (easymotion-F) - map t (easymotion-t) - map T (easymotion-T) - call EasyMotion#init() - call AddLine('ビムかわいいよzビムx') - call AddLine('foo bar baz') - normal! gg - end - - after - close! - end - - " is supported "{{{ - it 'is supported' - normal! gg0 - let l = line('.') - - normal fza - Expect CursorPos() == [l, 11, 'z'] - Expect CursorPos() != [l, 1, '2'] - - normal fz - Expect CursorPos() == [l+1, 22, 'z'] - - normal! h - normal fxa - Expect CursorPos() == [l+1, 29, 'x'] - end - " }}} - -end -"}}} - -" EasyMotion#helper#include_multibyte_char {{{ -describe 'EasyMotion#helper#include_multibyte_char' - - it 'return true when the argument includes multibyte char' - Expect EasyMotion#helper#include_multibyte_char("あいうえお") ==# 1 - Expect EasyMotion#helper#include_multibyte_char("aiueoあ") ==# 1 - Expect EasyMotion#helper#include_multibyte_char("123ABC45") ==# 1 - end - - it 'return false when the argument does not include multibyte char' - Expect EasyMotion#helper#include_multibyte_char("aiueo") ==# 0 - Expect EasyMotion#helper#include_multibyte_char("this_is_a_pen.") ==# 0 - Expect EasyMotion#helper#include_multibyte_char("!#$%&'()'") ==# 0 - Expect EasyMotion#helper#include_multibyte_char("") ==# 0 - end - -end -"}}} - -" migemo support {{{ -describe 'migemo support' - - before - new - let g:EasyMotion_keys = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' - let g:EasyMotion_use_migemo = 1 - map s (easymotion-s) - map f (easymotion-f) - map F (easymotion-F) - map t (easymotion-t) - map T (easymotion-T) - call EasyMotion#init() - call AddLine('はー,ビムかわいいよビム') - normal! gg0 - end - - after - close! - let g:clever_f_use_migemo = 0 - end - - " makes f and F mapping match multibyte characters {{{ - it 'makes f and F mapping match multibyte characters' - normal fba - Expect col('.') == 10 - normal fb - Expect col('.') == 31 - normal Fb - Expect col('.') == 10 - normal $ - normal Fba - Expect col('.') == 31 - normal Fb - Expect col('.') == 10 - end - " }}} - - " makes t and T mapping match multibyte characters {{{ - it 'makes t and T mapping match multibyte characters' - normal tba - Expect col('.') == 7 - normal tb - Expect col('.') == 28 - normal Tb - Expect col('.') == 13 - normal $ - normal Tba - Expect col('.') == 13 - normal tb - Expect col('.') == 28 - end - " }}} - -end -"}}} - -" g:EasyMotion_smartcase {{{ -describe 'g:EasyMotion_smartcase' - - before - new - let g:EasyMotion_keys = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' - map s (easymotion-s) - map f (easymotion-f) - map F (easymotion-F) - map t (easymotion-t) - map T (easymotion-T) - call EasyMotion#init() - call AddLine('poHe huga Hiyo hoyo: poyo();') - 1234567890123456789012345678 - normal! gg0 - let g:EasyMotion_smartcase = 1 - end - - after - close! - let g:EasyMotion_smartcase = 0 - end - - " makes f smart case {{{ - it 'makes f smart case' - normal fha - Expect col('.') == 3 - normal fha - Expect col('.') == 6 - normal fha - Expect col('.') == 11 - normal fh - Expect col('.') == 16 - normal Fha - Expect col('.') == 11 - - normal! 0 - normal fHa - Expect col('.') == 3 - normal fH - Expect col('.') == 11 - normal fHa - Expect col('.') == 11 - normal FH - Expect col('.') == 3 - end - "}}} - - " makes t smart case {{{ - it 'makes t smart case' - normal! $ - normal Tha - Expect col('.') == 17 - normal Tha - Expect col('.') == 12 - normal Tha - Expect col('.') == 7 - normal Th - Expect col('.') == 4 - normal tha - Expect col('.') == 5 - - normal! $ - normal THa - Expect col('.') == 12 - normal TH - Expect col('.') == 4 - normal tH - Expect col('.') == 10 - end - " }}} - - " makes no effect on searching signs {{{ - it 'makes no effect on searching signs' - normal! 0 - normal f; - Expect col('.') == 28 - normal! 0 - normal f: - Expect col('.') == 20 - normal f: - Expect col('.') == 20 - end - " }}} -end -"}}} - -" g:EasyMotion_smartsign {{{ -describe 'g:EasyMotion_smartsign' - - before - new - let g:EasyMotion_keys = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' - map s (easymotion-s) - map f (easymotion-f) - map F (easymotion-F) - map t (easymotion-t) - map T (easymotion-T) - call EasyMotion#init() - call AddLine('poHe huga Hiyo hoyo: poyo();') - " 1234567890123456789012345678 - normal! gg0 - let g:EasyMotion_smartcase = 1 - let g:EasyMotion_use_smartsign_us = 1 - end - - after - close! - let g:EasyMotion_smartcase = 0 - let g:EasyMotion_use_smartsign_us = 0 - end - - " makes f smart sign {{{ - it 'makes f smart case' - normal! 0 - normal f; - Expect col('.') == 1 - normal f;a - Expect col('.') == 20 - normal f; - Expect col('.') == 28 - - normal! 0 - normal f: - Expect col('.') == 20 - normal f: - Expect col('.') == 20 - end - "}}} - - " makes t,T smart sign {{{ - it 'makes t,T smart case' - normal! 0 - normal t; - Expect col('.') == 1 - normal t;a - Expect col('.') == 19 - normal t; - Expect col('.') == 27 - normal! $ - Expect col('.') == 28 - normal T; - Expect col('.') == 21 - end - "}}} -end -"}}} - -" Next & Previous {{{ -describe '(easymotion-next) & (easymotion-prev)' - before - new - let g:EasyMotion_keys = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' - map s (easymotion-s) - map ; (easymotion-next) - map , (easymotion-prev) - set wrapscan - call EasyMotion#init() - call AddLine('poge huga hiyo poyo') - " 1234567890123456789 - end - - after - close! - end - - " provide next & previous motion to replace `;`, `,` {{{ - it 'provide next & previous motion to replace `;`, `,`' - normal! 0 - let l = line('.') - Expect CursorPos() == [l,1,'p'] - normal sha - Expect CursorPos() == [l,6,'h'] - - normal ; - Expect CursorPos() == [l,11,'h'] - - normal , - Expect CursorPos() == [l,6,'h'] - - " wrapscan - normal , - Expect CursorPos() == [l,11,'h'] - normal ; - Expect CursorPos() == [l,6,'h'] - - normal! $ - let l = line('.') - Expect CursorPos() == [l,19,'o'] - - normal , - Expect CursorPos() == [l,11,'h'] - - end - "}}} - - " next & previous motion count {{{ - it 'next & previous motion count' - normal! 0 - let l = line('.') - Expect CursorPos() == [l,1,'p'] - normal sha - Expect CursorPos() == [l,6,'h'] - - normal ; - Expect CursorPos() == [l,11,'h'] - - normal 2, - Expect CursorPos() == [l,11,'h'] - - " wrapscan - normal 4, - Expect CursorPos() == [l,11,'h'] - normal 3; - Expect CursorPos() == [l,6,'h'] - - normal! $ - let l = line('.') - Expect CursorPos() == [l,19,'o'] - - normal , - Expect CursorPos() == [l,11,'h'] - - end - "}}} -end -"}}} - -" Jumplist {{{ -describe 'EasyMotion is jump motion' - before - new - let g:EasyMotion_keys = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' - map s (easymotion-s) - call EasyMotion#init() - call AddLine('poge huga hiyo poyo') - " 1234567890123456789 - end - - after - close! - end - - " could jump back to previous location {{{ - it ' could jump back to previous location' - normal! 0 - let l = line('.') - Expect CursorPos() == [l,1,'p'] - normal sha - Expect CursorPos() == [l,6,'h'] - - exec "normal! \" - Expect CursorPos() == [l,1,'p'] - - normal! `` - Expect CursorPos() == [l,6,'h'] - normal! `` - Expect CursorPos() == [l,1,'p'] - normal! `` - Expect CursorPos() == [l,6,'h'] - - normal! $ - Expect CursorPos() == [l,19,'o'] - normal spa - Expect CursorPos() == [l,16,'p'] - exec "normal! \" - Expect CursorPos() == [l,19,'o'] - end - "}}} -end -"}}} - -" Regexp {{{ -describe 'EasyMotion regexp' - before - new - let g:EasyMotion_keys = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' - let g:EasyMotion_use_regexp = 1 - map s (easymotion-sn) - call EasyMotion#init() - call AddLine('poge1 2huga 3hiyo 4poyo') - " 12345678901234567890123 - end - - after - let g:EasyMotion_use_regexp = 0 - close! - end - - " could jump back to previous location {{{ - it 'provide regexp motion' - normal! 0 - let l = line('.') - Expect CursorPos() == [l,1,'p'] - exe "normal s\\d\a" - Expect CursorPos() == [l,5,'1'] - - normal! 0 - Expect CursorPos() == [l,1,'p'] - exe "normal s\\d\c" - Expect CursorPos() == [l,13,'3'] - - exe "normal s\$\a" - Expect CursorPos() == [l,23,'o'] - - exe "normal s\^\b" - Expect CursorPos() == [l,1,'p'] - end - "}}} -end -"}}} - -" bi-directional t motion {{{ -describe 'bi-directional t motion' - before - new - let g:EasyMotion_keys = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' - let g:EasyMotion_use_regexp = 1 - map t (easymotion-bd-t) - call EasyMotion#init() - call AddLine('poge1 2huga 3hiyo 4poyo') - " 12345678901234567890123 - end - - after - let g:EasyMotion_use_regexp = 0 - close! - end - - " provide bidirectional motion with one key mapping {{{ - it 'provide bidirectional motion with one key mapping' - normal! 0 - let l = line('.') - Expect CursorPos() == [l,1,'p'] - normal thb - Expect CursorPos() == [l,13,'3'] - - normal! h - Expect CursorPos() == [l,12,' '] - - normal thb - Expect CursorPos() == [l,9,'u'] - - end - "}}} -end -"}}} - -" off-screen search {{{ -describe 'off-screen search' - before - new - let g:EasyMotion_keys = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' - let g:EasyMotion_off_screen_search = 1 - map s/ (easymotion-sn) - map f/ (easymotion-fn) - map F/ (easymotion-Fn) - map t/ (easymotion-tn) - map T/ (easymotion-Tn) - call EasyMotion#init() - call AddLine('deco-chan deco-chan') - call AddLine('vim') - for i in range(50) - call AddLine('poge1 2huga 3hiyo 4poyo') - endfor - " 12345678901234567890123 - end - - after - let g:EasyMotion_off_screen_search = 0 - close! - end - - " provide search with off-screen range {{{ - it 'provide search with off-screen range' - normal! gg0 - let l = line('.') - Expect CursorPos() == [l,1,'p'] - - exec "normal s/vim\" - Expect CursorPos() == [51,1,'v'] - - normal! gg0 - exec "normal f/im\" - Expect CursorPos() == [51,2,'i'] - - set wrapscan - Expect &wrapscan == 1 - normal! gg0 - exec "normal F/im\" - Expect CursorPos() == [51,2,'i'] - - " Cancel - normal! gg0 - exec "normal s/vim\" - Expect CursorPos() == [l,1,'p'] - - " Label - normal! gg0 - exec "normal s/deco-chan\\" - Expect CursorPos() == [l,1,'p'] - - normal! gg0 - exec "normal s/deco-chan\a" - Expect CursorPos() == [52,1,'d'] - - normal! gg0 - exec "normal s/deco-chan\b" - Expect CursorPos() == [52,11,'d'] - - normal! gg0 - exec "normal t/chan\a" - Expect CursorPos() == [52,5,'-'] - - normal! gg0 - exec "normal t/chan\b" - Expect CursorPos() == [52,15,'-'] - - end - "}}} -end - -describe 'dot notoff-screen search' - before - new - let g:EasyMotion_keys = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' - let g:EasyMotion_off_screen_search = 0 - map s/ (easymotion-sn) - call EasyMotion#init() - call AddLine('deco-chan deco-chan') - call AddLine('vim') - for i in range(50) - call AddLine('poge1 2huga 3hiyo 4poyo') - endfor - " 12345678901234567890123 - end - - after - close! - end - - " provide search with off-screen range {{{ - it 'provide search with off-screen range' - normal! gg0 - let l = line('.') - Expect CursorPos() == [l,1,'p'] - - exec "normal s/vim\" - Expect CursorPos() != [51,1,'v'] - Expect CursorPos() == [l,1,'p'] - end - "}}} -end -"}}} - -" off-screen search scroll {{{ -describe 'off-screen search scroll' - before - new - let g:EasyMotion_keys = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' - let g:EasyMotion_off_screen_search = 1 - map / (easymotion-sn) - call EasyMotion#init() - call AddLine('deco-chan deco-chan') - call AddLine('vim') - for i in range(500) - call AddLine('poge1 2huga 3hiyo 4poyo') - endfor - call AddLine('deco-chan deco-chan') - " 12345678901234567890123 - end - - after - let g:EasyMotion_off_screen_search = 0 - close! - end - - " provide scroll {{{ - it 'provide scroll' - normal! gg0 - let l = line('.') - Expect CursorPos() == [l,1,'d'] - - normal! gg0 - exec "normal /deco-chan\" - Expect CursorPos() == [l,11,'d'] - - normal! gg0 - exec "normal /deco-chan\\a" - Expect CursorPos() == [503,1,'d'] - - end - "}}} -end -"}}} - -"Word motion {{{ -describe 'Word motion' - before - new - let g:EasyMotion_keys = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' - map w (easymotion-w) - map b (easymotion-b) - map w (easymotion-iskeyword-w) - map b (easymotion-iskeyword-b) - call EasyMotion#init() - call AddLine('vim vim vim') - call AddLine('poge1 2huga 3hiyo 4poyo 5:test') - " 12345678901234567890123 - " 0 1 2 3 - " 123456789012345678901234567890 - " poge1 2huga 3hiyo 4poyo 5:test - " vim vim vim - end - - after - close! - end - - " Default word motion {{ - it 'Default word motion' - normal! 0 - let l = line('.') - Expect CursorPos() == [l,1,'p'] - normal wc - Expect CursorPos() == [l,19,'4'] - - normal bb - Expect CursorPos() == [l,7,'2'] - - normal! 0 - Expect CursorPos() == [l,1,'p'] - - normal wh - Expect CursorPos() == [2,9,'v'] - normal bh - Expect CursorPos() == [l,1,'p'] - end - "}}} -end -"}}} - -" vim: fdm=marker:et:ts=4:sw=4:sts=4 diff --git a/bundle/easymotion/t/operator_pending_spec.vim b/bundle/easymotion/t/operator_pending_spec.vim deleted file mode 100755 index 80a0999..0000000 --- a/bundle/easymotion/t/operator_pending_spec.vim +++ /dev/null @@ -1,110 +0,0 @@ -"============================================================================= -" FILE: t/operator_pending_spec.vim -" AUTHOR: haya14busa -" License: MIT license {{{ -" Permission is hereby granted, free of charge, to any person obtaining -" a copy of this software and associated documentation files (the -" "Software"), to deal in the Software without restriction, including -" without limitation the rights to use, copy, modify, merge, publish, -" distribute, sublicense, and/or sell copies of the Software, and to -" permit persons to whom the Software is furnished to do so, subject to -" the following conditions: -" -" The above copyright notice and this permission notice shall be included -" in all copies or substantial portions of the Software. -" -" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -" IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -" CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -" TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -" SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -" }}} -"============================================================================= - -" Avoid source test files {{{ -if expand("%:p") ==# expand(":p") - finish -endif -"}}} - -" Setup {{{ -let s:root_dir = matchstr(system('git rev-parse --show-cdup'), '[^\n]\+') -execute 'set' 'rtp +=./'.s:root_dir -runtime! plugin/EasyMotion.vim -"}}} - -" Functions for Test {{{ -function! AddLine(str) - put! =a:str -endfunction - -function! CursorPos() - return [line('.'), col('.'), getline('.')[col('.')-1]] -endfunction -"}}} - - -" NOTE: -" I cannot test inclusive motion because mode() doesn't works well with -" vim-vspec - -" word motions {{{ -describe 'word motions' - before - new - let g:EasyMotion_keys = '123456789' - omap f (easymotion-f) - omap w (easymotion-w) - omap b (easymotion-b) - call EasyMotion#init() - call AddLine('vim deco vim deco vim deco') - " 123456789012345678901234567890 - end - - after - close! - end - - it '(easymotion-w)' - " Default position - normal! 0 - let l = line('.') - Expect CursorPos() == [l,1,'v'] - - normal dw1 - Expect CursorPos() == [l,1,'d'] - normal! u - normal! 0 - Expect CursorPos() == [l,1,'v'] - - normal dw2 - Expect CursorPos() == [l,1,'v'] - normal! 0 - normal! u - normal! 0 - Expect CursorPos() == [l,1,'v'] - end - - it '(easymotion-b)' - " Default position - normal! $ - let l = line('.') - Expect CursorPos() == [l,26,'o'] - - normal db1 - Expect CursorPos() == [l,23,'o'] - normal! u - normal! $ - Expect CursorPos() == [l,26,'o'] - - normal db2 - Expect CursorPos() == [l,19,'o'] - normal! u - normal! $ - Expect CursorPos() == [l,26,'o'] - end -end -"}}} - diff --git a/bundle/easymotion/t/smartsign_spec.vim b/bundle/easymotion/t/smartsign_spec.vim deleted file mode 100755 index 20fbb05..0000000 --- a/bundle/easymotion/t/smartsign_spec.vim +++ /dev/null @@ -1,575 +0,0 @@ -"============================================================================= -" FILE: t/smartsign_spec.vim -" AUTHOR: haya14busa -" License: MIT license {{{ -" Permission is hereby granted, free of charge, to any person obtaining -" a copy of this software and associated documentation files (the -" "Software"), to deal in the Software without restriction, including -" without limitation the rights to use, copy, modify, merge, publish, -" distribute, sublicense, and/or sell copies of the Software, and to -" permit persons to whom the Software is furnished to do so, subject to -" the following conditions: -" -" The above copyright notice and this permission notice shall be included -" in all copies or substantial portions of the Software. -" -" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -" IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -" CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -" TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -" SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -" }}} -"============================================================================= - -" Test for `smartsign` feature for find motions - -" Avoid source test files {{{ -if expand("%:p") ==# expand(":p") - finish -endif -"}}} - -" Setup {{{ -let s:root_dir = matchstr(system('git rev-parse --show-cdup'), '[^\n]\+') -execute 'set' 'rtp +=./'.s:root_dir -runtime! plugin/EasyMotion.vim -"}}} - -" Functions for Test {{{ -function! AddLine(str) - put! =a:str -endfunction - -function! CursorPos() - return [line('.'), col('.'), getline('.')[col('.')-1]] -endfunction -"}}} - -" Smartsign configulation {{{ -describe 'Smartsign configulation' - it 'provide default dictionary' - let smartdict_us = g:EasyMotion#sticky_table#us - let smartdict_jp = g:EasyMotion#sticky_table#jp - Expect smartdict_us !=# {} - Expect smartdict_jp !=# {} - end -end -"}}} - -" Basic Smartsign feature with 1-key findmotions with US layout {{{ -describe 'Basic Smartsign feature with 1-key findmotions with US layout' - before - new - let g:EasyMotion_keys = '123456789' - let g:EasyMotion_use_smartsign_us = 1 - map s (easymotion-s) - call EasyMotion#init() - call AddLine(' -_ =+ ;: [{ ]} `~ ''" \|') - call AddLine(' 1! 2@ 3# 4$ 5% 6^ 7& 8* 9( 0)') - call AddLine(' ,< .> /?') - " 123456789012345678901234567890 - " 1 2 3 - " - " ',' : '<', '.' : '>', '/' : '?', - " '1' : '!', '2' : '@', '3' : '#', '4' : '$', '5' : '%', - " '6' : '^', '7' : '&', '8' : '*', '9' : '(', '0' : ')', '-' : '_', '=' : '+', - " ';' : ':', '[' : '{', ']' : '}', '`' : '~', "'" : "\"", '\' : '|', - end - - after - close! - end - - it 'works well for all sign as a target char' - " Default position - normal! 0 - let l = line('.') - Expect CursorPos() == [l,1,' '] - - " ,< - normal s,1 - Expect CursorPos() == [l,2,','] - normal! 0 - normal s,2 - Expect CursorPos() == [l,3,'<'] - normal! 0 - normal s<1 - Expect CursorPos() == [l,3,'<'] - normal! 0 - normal s,3 - Expect CursorPos() == [l,1,' '] - normal! 0 - - " .> - normal s.1 - Expect CursorPos() == [l,5,'.'] - normal! 0 - normal s.2 - Expect CursorPos() == [l,6,'>'] - normal! 0 - normal s>1 - Expect CursorPos() == [l,6,'>'] - normal! 0 - normal s.3 - Expect CursorPos() == [l,1,' '] - normal! 0 - - " /? - normal s/1 - Expect CursorPos() == [l,8,'/'] - normal! 0 - normal s/2 - Expect CursorPos() == [l,9,'?'] - normal! 0 - normal s?1 - Expect CursorPos() == [l,9,'?'] - normal! 0 - normal s/3 - Expect CursorPos() == [l,1,' '] - normal! 0 - - " 1! - normal s11 - Expect CursorPos() == [l+1,2,'1'] - normal! 0 - normal s12 - Expect CursorPos() == [l+1,3,'!'] - normal! 0 - normal s!1 - Expect CursorPos() == [l+1,3,'!'] - normal! 0 - normal s13 - Expect CursorPos() == [l+1,1,' '] - normal! 0 - - " 2@ - normal s21 - Expect CursorPos() == [l+1,5,'2'] - normal! 0 - normal s22 - Expect CursorPos() == [l+1,6,'@'] - normal! 0 - normal s@1 - Expect CursorPos() == [l+1,6,'@'] - normal! 0 - normal s23 - Expect CursorPos() == [l+1,1,' '] - normal! 0 - - " 3# - normal s31 - Expect CursorPos() == [l+1,8,'3'] - normal! 0 - normal s32 - Expect CursorPos() == [l+1,9,'#'] - normal! 0 - normal s#1 - Expect CursorPos() == [l+1,9,'#'] - normal! 0 - normal s33 - Expect CursorPos() == [l+1,1,' '] - normal! 0 - - " 4$ - normal s41 - Expect CursorPos() == [l+1,11,'4'] - normal! 0 - normal s42 - Expect CursorPos() == [l+1,12,'$'] - normal! 0 - normal s$1 - Expect CursorPos() == [l+1,12,'$'] - normal! 0 - normal s43 - Expect CursorPos() == [l+1,1,' '] - normal! 0 - - " 5% - normal s51 - Expect CursorPos() == [l+1,14,'5'] - normal! 0 - normal s52 - Expect CursorPos() == [l+1,15,'%'] - normal! 0 - normal s%1 - Expect CursorPos() == [l+1,15,'%'] - normal! 0 - normal s53 - Expect CursorPos() == [l+1,1,' '] - normal! 0 - - " 6^ - normal s61 - Expect CursorPos() == [l+1,17,'6'] - normal! 0 - normal s62 - Expect CursorPos() == [l+1,18,'^'] - normal! 0 - normal s^1 - Expect CursorPos() == [l+1,18,'^'] - normal! 0 - normal s63 - Expect CursorPos() == [l+1,1,' '] - normal! 0 - - " 7& - normal s71 - Expect CursorPos() == [l+1,20,'7'] - normal! 0 - normal s72 - Expect CursorPos() == [l+1,21,'&'] - normal! 0 - normal s&1 - Expect CursorPos() == [l+1,21,'&'] - normal! 0 - normal s73 - Expect CursorPos() == [l+1,1,' '] - normal! 0 - - " 8* - normal s81 - Expect CursorPos() == [l+1,23,'8'] - normal! 0 - normal s82 - Expect CursorPos() == [l+1,24,'*'] - normal! 0 - normal s*1 - Expect CursorPos() == [l+1,24,'*'] - normal! 0 - normal s83 - Expect CursorPos() == [l+1,1,' '] - normal! 0 - - " 9( - normal s91 - Expect CursorPos() == [l+1,26,'9'] - normal! 0 - normal s92 - Expect CursorPos() == [l+1,27,'('] - normal! 0 - normal s(1 - Expect CursorPos() == [l+1,27,'('] - normal! 0 - normal s93 - Expect CursorPos() == [l+1,1,' '] - normal! 0 - - " 0) - normal s01 - Expect CursorPos() == [l+1,29,'0'] - normal! 0 - normal s02 - Expect CursorPos() == [l+1,30,')'] - normal! 0 - normal s)1 - Expect CursorPos() == [l+1,30,')'] - normal! 0 - normal s03 - Expect CursorPos() == [l+1,1,' '] - normal! 0 - - " -_ - normal s-1 - Expect CursorPos() == [l+2,2,'-'] - normal! 0 - normal s-2 - Expect CursorPos() == [l+2,3,'_'] - normal! 0 - normal s_1 - Expect CursorPos() == [l+2,3,'_'] - normal! 0 - normal s-3 - Expect CursorPos() == [l+2,1,' '] - normal! 0 - - " =+ - normal s=1 - Expect CursorPos() == [l+2,5,'='] - normal! 0 - normal s=2 - Expect CursorPos() == [l+2,6,'+'] - normal! 0 - normal s+1 - Expect CursorPos() == [l+2,6,'+'] - normal! 0 - normal s=3 - Expect CursorPos() == [l+2,1,' '] - normal! 0 - - " ;: - normal s;1 - Expect CursorPos() == [l+2,8,';'] - normal! 0 - normal s;2 - Expect CursorPos() == [l+2,9,':'] - normal! 0 - normal s:1 - Expect CursorPos() == [l+2,9,':'] - normal! 0 - normal s;3 - Expect CursorPos() == [l+2,1,' '] - normal! 0 - - " [{ - normal s[1 - Expect CursorPos() == [l+2,11,'['] - normal! 0 - normal s[2 - Expect CursorPos() == [l+2,12,'{'] - normal! 0 - normal s{1 - Expect CursorPos() == [l+2,12,'{'] - normal! 0 - normal s[3 - Expect CursorPos() == [l+2,1,' '] - normal! 0 - - " ]} - normal s]1 - Expect CursorPos() == [l+2,14,']'] - normal! 0 - normal s]2 - Expect CursorPos() == [l+2,15,'}'] - normal! 0 - normal s}1 - Expect CursorPos() == [l+2,15,'}'] - normal! 0 - normal s]3 - Expect CursorPos() == [l+2,1,' '] - normal! 0 - - " `~ - normal s`1 - Expect CursorPos() == [l+2,17,'`'] - normal! 0 - normal s`2 - Expect CursorPos() == [l+2,18,'~'] - normal! 0 - normal s~1 - Expect CursorPos() == [l+2,18,'~'] - normal! 0 - normal s`3 - Expect CursorPos() == [l+2,1,' '] - normal! 0 - - " '" - normal s'1 - Expect CursorPos() == [l+2,20,''''] - normal! 0 - normal s'2 - Expect CursorPos() == [l+2,21,'"'] - normal! 0 - normal s"1 - Expect CursorPos() == [l+2,21,'"'] - normal! 0 - normal s'3 - Expect CursorPos() == [l+2,1,' '] - normal! 0 - - " \| - normal s\1 - Expect CursorPos() == [l+2,23,'\'] - normal! 0 - normal s\2 - Expect CursorPos() == [l+2,24,'|'] - normal! 0 - normal s|1 - Expect CursorPos() == [l+2,24,'|'] - normal! 0 - normal s\3 - Expect CursorPos() == [l+2,1,' '] - normal! 0 - end -end -"}}} - -" Smartsign with 2-key find motions with US layout {{{ -describe 'Smartsign with 2-key find motions with US layout' - before - new - let g:EasyMotion_keys = '123456789' - let g:EasyMotion_use_smartsign_us = 1 - map s (easymotion-s2) - call EasyMotion#init() - call AddLine(' -_ =+ ;: [{ ]} `~ ''" \|') - call AddLine(' 1! 2@ 3# 4$ 5% 6^ 7& 8* 9( 0)') - call AddLine(' ,< .> /?') - call AddLine(' -_ =+ ;: [{ ]} `~ ''" \|') - call AddLine(' 1! 2@ 3# 4$ 5% 6^ 7& 8* 9( 0)') - call AddLine(' ,< .> /?') - " 123456789012345678901234567890 - " 1 2 3 - end - - after - close! - end - - it 'works well' - " Default position - normal! 0 - let l = line('.') - Expect CursorPos() == [l,1,' '] - - " ,< - normal s,,1 - Expect CursorPos() == [l,2,','] - normal! 0 - Expect CursorPos() == [l,1,' '] - normal s,,3 - Expect CursorPos() == [l,1,' '] - normal! 0 - normal s, 1 - Expect CursorPos() == [l,3,'<'] - normal! 0 - normal s<<1 - Expect CursorPos() == [l,1,' '] - normal! 0 - normal s,<1 - Expect CursorPos() == [l,2,','] - normal! 0 - normal s<,1 - Expect CursorPos() == [l,1,' '] - normal! 0 - end - it ': s,,3' - normal! 0 - let l = line('.') - Expect CursorPos() == [l,1,' '] - normal s,,3 - Expect CursorPos() == [l,1,' '] - normal! 0 - end - - it 'escape * asterisc #151' - normal! 0 - let l = line('.') - Expect CursorPos() == [l,1,' '] - normal s1*22 - Expect CursorPos() == [l,1,' '] - normal! 0 - normal s8*1 - Expect CursorPos() == [l+1,23,'8'] - normal! 0 - normal s881 - Expect CursorPos() == [l+1,23,'8'] - normal! 0 - normal s**1 - Expect CursorPos() == [l+1,1,' '] - normal! 0 - normal s*81 - Expect CursorPos() == [l+1,1,' '] - normal! 0 - end -end -"}}} - -" Smartsign with 2-key find motions with JP layout {{{ -describe 'Smartsign with 2-key find motions with JP layout' - before - new - let g:EasyMotion_keys = '123456789' - let g:EasyMotion_use_smartsign_jp = 1 - map s (easymotion-s2) - call EasyMotion#init() - call AddLine(' -= ^~ ;+ :* [{ ]} @` \|') - call AddLine(' 1! 2" 3# 4$ 5% 6& 7'' 8( 9) 0_') - call AddLine(' ,< .> /?') - call AddLine(' -= ^~ ;+ :* [{ ]} @` \|') - call AddLine(' 1! 2" 3# 4$ 5% 6& 7'' 8( 9) 0_') - call AddLine(' ,< .> /?') - " 123456789012345678901234567890 - " 1 2 3 - " - "',' : '<', '.' : '>', '/' : '?', - "'1' : '!', '2' : '"', '3' : '#', '4' : '$', '5' : '%', - "'6' : '&', '7' : "'", '8' : '(', '9' : ')', '0' : '_', '-' : '=', '^' : '~', - "';' : '+', ':' : '*', '[' : '{', ']' : '}', '@' : '`', '\' : '|', - " - end - - after - close! - end - - it 'works well' - " Default position - normal! 0 - let l = line('.') - Expect CursorPos() == [l,1,' '] - - " ,< - normal s,,1 - Expect CursorPos() == [l,2,','] - normal! 0 - Expect CursorPos() == [l,1,' '] - normal s,,3 - Expect CursorPos() == [l,1,' '] - normal! 0 - normal s, 1 - Expect CursorPos() == [l,3,'<'] - normal! 0 - normal s<<1 - Expect CursorPos() == [l,1,' '] - normal! 0 - normal s,<1 - Expect CursorPos() == [l,2,','] - normal! 0 - normal s<,1 - Expect CursorPos() == [l,1,' '] - normal! 0 - end - it ': s,,3' - normal! 0 - let l = line('.') - Expect CursorPos() == [l,1,' '] - normal s,,3 - Expect CursorPos() == [l,1,' '] - normal! 0 - end -end -"}}} - -" Smartsign with n-key find search motions {{{ -describe 'Smartsign with n-key find search motions' - before - new - let g:EasyMotion_keys = '123456789' - let g:EasyMotion_use_smartsign_jp = 1 - map / (easymotion-sn) - call EasyMotion#init() - call AddLine(' -= ^~ ;+ :* [{ ]} @` \|') - call AddLine(' 1! 2" 3# 4$ 5% 6& 7'' 8( 9) 0_') - call AddLine(' ,< .> /?') - call AddLine(' -= ^~ ;+ :* [{ ]} @` \|') - call AddLine(' 1! 2" 3# 4$ 5% 6& 7'' 8( 9) 0_') - call AddLine(' ,< .> /?') - end - - after - close! - end - - it 'do not work' - " Default position - normal! 0 - let l = line('.') - Expect CursorPos() == [l,1,' '] - - " ,< - normal /,,1 - Expect CursorPos() == [l,1,' '] - normal! 0 - normal /,<1 - Expect CursorPos() == [l,1,' '] - normal! 0 - end -end -"}}} - -" __END__ {{{ -" vim: expandtab softtabstop=4 shiftwidth=4 -" vim: foldmethod=marker -" }}} diff --git a/bundle/elixir/.travis.yml b/bundle/elixir/.travis.yml deleted file mode 100755 index 3e67b0c..0000000 --- a/bundle/elixir/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -language: ruby -rvm: - - 1.9.3 -before_install: sudo apt-get install vim-gtk -before_script: - - "export DISPLAY=:99.0" - - "sh -e /etc/init.d/xvfb start" -script: "bundle exec rspec --color -f d" diff --git a/bundle/elixir/Gemfile b/bundle/elixir/Gemfile deleted file mode 100755 index c543a5d..0000000 --- a/bundle/elixir/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'http://rubygems.org/' - -gem 'rspec' -gem 'vimrunner' diff --git a/bundle/elixir/Gemfile.lock b/bundle/elixir/Gemfile.lock deleted file mode 100755 index 8d4d64f..0000000 --- a/bundle/elixir/Gemfile.lock +++ /dev/null @@ -1,20 +0,0 @@ -GEM - remote: http://rubygems.org/ - specs: - diff-lcs (1.2.4) - rspec (2.13.0) - rspec-core (~> 2.13.0) - rspec-expectations (~> 2.13.0) - rspec-mocks (~> 2.13.0) - rspec-core (2.13.1) - rspec-expectations (2.13.0) - diff-lcs (>= 1.1.3, < 2.0) - rspec-mocks (2.13.1) - vimrunner (0.3.0) - -PLATFORMS - ruby - -DEPENDENCIES - rspec - vimrunner diff --git a/bundle/elixir/README.md b/bundle/elixir/README.md deleted file mode 100755 index 7ed3b46..0000000 --- a/bundle/elixir/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# vim-elixir - -[![Build Status](https://travis-ci.org/elixir-lang/vim-elixir.png?branch=master)](https://travis-ci.org/elixir-lang/vim-elixir) - -This project contains some Vim configuration files to work with [Elixir](http://elixir-lang.org). - -So far it's included: - -* Syntax highlighting - -* Filetype detection - -* Auto indentation - -## Install - -* Copy the files to your `~/.vim` directory. - -* If you use vim-pathogen you can clone this repo into `~/.vim/bundle` - -## Snippets - -If you are looking for snipmate snippets take a look at: [elixir-snippets](https://github.com/carlosgaldino/elixir-snippets) diff --git a/bundle/elixir/compiler/exunit.vim b/bundle/elixir/compiler/exunit.vim deleted file mode 100755 index 2c9fb29..0000000 --- a/bundle/elixir/compiler/exunit.vim +++ /dev/null @@ -1,24 +0,0 @@ -" Vim compiler file -" Language: ExUnit -" Maintainer: Rein Henrichs -" URL: https://github.com/elixir-lang/vim-elixir - -if exists("current_compiler") - finish -endif -let current_compiler = "exunit" - -if exists(":CompilerSet") != 2 " older Vim always used :setlocal - command -nargs=* CompilerSet setlocal -endif - -let s:cpo_save = &cpo -set cpo-=C - -CompilerSet makeprg=mix\ test -CompilerSet errorformat=%A\ \ %.)\ %m(%.%#),%C\ \ \ \ \ **%m,%C\ \ \ \ \ \ \ %m,%Z\ \ \ \ \ at\ %f:%l,%-G%.%# - -let &cpo = s:cpo_save -unlet s:cpo_save - -" vim: nowrap sw=2 sts=2 ts=8: diff --git a/bundle/elixir/ftdetect/elixir.vim b/bundle/elixir/ftdetect/elixir.vim deleted file mode 100755 index df413e1..0000000 --- a/bundle/elixir/ftdetect/elixir.vim +++ /dev/null @@ -1,2 +0,0 @@ -au BufRead,BufNewFile *.ex,*.exs set filetype=elixir -au FileType elixir setl sw=2 sts=2 et iskeyword+=!,? diff --git a/bundle/elixir/ftplugin/elixir.vim b/bundle/elixir/ftplugin/elixir.vim deleted file mode 100755 index 5571fcf..0000000 --- a/bundle/elixir/ftplugin/elixir.vim +++ /dev/null @@ -1,25 +0,0 @@ -" Vim filetype plugin -" Language: Elixir -" Maintainer: Carlos Galdino -" URL: https://github.com/elixir-lang/vim-elixir - -if (exists("b:did_ftplugin")) - finish -endif -let b:did_ftplugin = 1 - - -" Matchit support -if exists("loaded_matchit") && !exists("b:match_words") - let b:match_ignorecase = 0 - - let b:match_words = '\<\%(do\|fn\)\:\@!\>' . - \ ':' . - \ '\<\%(else\|elsif\|catch\|after\|rescue\)\:\@!\>' . - \ ':' . - \ '\:\@' . - \ ',{:},\[:\],(:)' -endif - -setlocal comments=:# -setlocal commentstring=#\ %s diff --git a/bundle/elixir/indent/elixir.vim b/bundle/elixir/indent/elixir.vim deleted file mode 100755 index fababe4..0000000 --- a/bundle/elixir/indent/elixir.vim +++ /dev/null @@ -1,107 +0,0 @@ -" Vim indent file -" Language: Elixir -" Maintainer: Carlos Galdino -" Last Change: 2013 Apr 24 - -if exists("b:did_indent") - finish -endif -let b:did_indent = 1 - -setlocal nosmartindent - -setlocal indentexpr=GetElixirIndent() -setlocal indentkeys+==end,=else:,=match:,=elsif:,=catch:,=after:,=rescue: - -if exists("*GetElixirIndent") - finish -endif - -let s:cpo_save = &cpo -set cpo&vim - -let s:skip_syntax = '\%(Comment\|String\)$' -let s:block_skip = "synIDattr(synID(line('.'),col('.'),1),'name') =~? '" . s:skip_syntax . "'" -let s:block_start = 'do\|fn' -let s:block_middle = 'else\|match\|elsif\|catch\|after\|rescue' -let s:block_end = 'end' -let s:arrow = '^.*->$' -let s:pipeline = '^\s*|>.*$' - -let s:indent_keywords = '\<\%(' . s:block_start . '\|' . s:block_middle . '\)$' . '\|' . s:arrow -let s:deindent_keywords = '^\s*\<\%(' . s:block_end . '\|' . s:block_middle . '\)\>' . '\|' . s:arrow - -function! GetElixirIndent() - let lnum = prevnonblank(v:lnum - 1) - let ind = indent(lnum) - - " At the start of the file use zero indent. - if lnum == 0 - return 0 - endif - - " TODO: Remove these 2 lines - " I don't know why, but for the test on spec/indent/lists_spec.rb:24. - " Vim is making some mess on parsing the syntax of 'end', it is being - " recognized as 'elixirString' when should be recognized as 'elixirBlock'. - " This forces vim to sync the syntax. - call synID(v:lnum, 1, 1) - syntax sync fromstart - - if synIDattr(synID(v:lnum, 1, 1), "name") !~ s:skip_syntax - let current_line = getline(v:lnum) - let last_line = getline(lnum) - - let splited_line = split(last_line, '\zs') - let opened_symbol = 0 - let opened_symbol += count(splited_line, '[') - count(splited_line, ']') - let opened_symbol += count(splited_line, '{') - count(splited_line, '}') - - let ind += opened_symbol * &sw - - if current_line =~ '^\s*\(\]\|}\)' - let ind -= &sw - endif - - if last_line =~ s:indent_keywords - let ind += &sw - endif - - " if line starts with pipeline - " and last line is an attribution - " indents pipeline in same level as attribution - if current_line =~ s:pipeline && - \ last_line =~ '^[^=]\+=.\+$' - let b:old_ind = ind - let ind = float2nr(matchend(last_line, '=\s*[^ ]') / &sw) * &sw - endif - - " if last line starts with pipeline - " and current line doesn't start with pipeline - " returns the indentation before the pipeline - if last_line =~ s:pipeline && - \ current_line !~ s:pipeline - let ind = b:old_ind - endif - - if current_line =~ s:deindent_keywords - let bslnum = searchpair( '\<\%(' . s:block_start . '\):\@!\>', - \ '\<\%(' . s:block_middle . '\):\@!\>\zs', - \ '\<:\@\zs', - \ 'nbW', - \ s:block_skip ) - - let ind = indent(bslnum) - endif - - " indent case statements '->' - if current_line =~ s:arrow - let ind += &sw - endif - endif - - return ind -endfunction - -let &cpo = s:cpo_save -unlet s:cpo_save diff --git a/bundle/elixir/spec/indent/anonymous_functions_spec.rb b/bundle/elixir/spec/indent/anonymous_functions_spec.rb deleted file mode 100755 index e3dd40f..0000000 --- a/bundle/elixir/spec/indent/anonymous_functions_spec.rb +++ /dev/null @@ -1,67 +0,0 @@ -require 'spec_helper' - -describe "Indenting" do - context "single body functions inside do block" do - it "is declared with fn syntax" do - assert_correct_indenting <<-EOF - def do - some_func = fn x -> x end - end - EOF - end - - it "is declared with function syntax" do - assert_correct_indenting <<-EOF - def do - some_func = function do x -> x end - end - EOF - end - - it "spans in multiple lines" do - assert_correct_indenting <<-EOF - def test do - assert_raise Queue.Empty, fn -> - Q.new |> Q.deq! - end - end - EOF - end - - it "spans in multiple lines inside parentheses" do - assert_correct_indenting <<-EOF - defmodule Test do - def lol do - Enum.map([1,2,3], fn x -> - x * 3 - end) - end - end - EOF - end - end - - context "multiple body functions declaring" do - it "it with fn syntax" do - assert_correct_indenting <<-EOF - fizzbuzz = fn - 0, 0, _ -> "FizzBuzz" - 0, _, _ -> "Fizz" - _, 0, _ -> "Buzz" - _, _, x -> x - end - EOF - end - - it "it with function syntax" do - assert_correct_indenting <<-EOF - fizzbuzz = function do - 0, 0, _ -> "FizzBuzz" - 0, _, _ -> "Fizz" - _, 0, _ -> "Buzz" - _, _, x -> x - end - EOF - end - end -end diff --git a/bundle/elixir/spec/indent/blocks_spec.rb b/bundle/elixir/spec/indent/blocks_spec.rb deleted file mode 100755 index cbc0c82..0000000 --- a/bundle/elixir/spec/indent/blocks_spec.rb +++ /dev/null @@ -1,29 +0,0 @@ -require 'spec_helper' - -describe "Indenting" do - specify "'do' indenting" do - assert_correct_indenting <<-EOF - do - something - end - EOF - end - - it "does not consider :end as end" do - assert_correct_indenting <<-EOF - defmodule Test do - def lol do - IO.inspect :end - end - end - EOF - end - - it "does not consider do: as the start of a block" do - assert_correct_indenting <<-EOF - def f do - if true do: 42 - end - EOF - end -end diff --git a/bundle/elixir/spec/indent/case_spec.rb b/bundle/elixir/spec/indent/case_spec.rb deleted file mode 100755 index e0df5d6..0000000 --- a/bundle/elixir/spec/indent/case_spec.rb +++ /dev/null @@ -1,14 +0,0 @@ -require 'spec_helper' - -describe "Indenting" do - specify "case statements" do - assert_correct_indenting <<-EOF - case some_function do - :ok -> - :ok - { :error, :message } -> - { :error, :message } - end - EOF - end -end diff --git a/bundle/elixir/spec/indent/cond_spec.rb b/bundle/elixir/spec/indent/cond_spec.rb deleted file mode 100755 index d3534d1..0000000 --- a/bundle/elixir/spec/indent/cond_spec.rb +++ /dev/null @@ -1,12 +0,0 @@ -require 'spec_helper' - -describe "Indenting" do - it "conditional" do - assert_correct_indenting <<-EOF - cond do - foo -> 1 - bar -> 2 - end - EOF - end -end diff --git a/bundle/elixir/spec/indent/documentation_spec.rb b/bundle/elixir/spec/indent/documentation_spec.rb deleted file mode 100755 index 72d0c7d..0000000 --- a/bundle/elixir/spec/indent/documentation_spec.rb +++ /dev/null @@ -1,15 +0,0 @@ -require 'spec_helper' - -describe "Indenting" do - context "documentation" do - it "with end keyword" do - assert_correct_indenting <<-EOF - defmodule Test do - @doc """ - end - """ - end - EOF - end - end -end diff --git a/bundle/elixir/spec/indent/if_spec.rb b/bundle/elixir/spec/indent/if_spec.rb deleted file mode 100755 index 0d0970a..0000000 --- a/bundle/elixir/spec/indent/if_spec.rb +++ /dev/null @@ -1,21 +0,0 @@ -require 'spec_helper' - -describe "Indenting" do - it "if-clauses" do - assert_correct_indenting <<-EOF - if foo do - bar - end - EOF - end - - it "if-else-clauses" do - assert_correct_indenting <<-EOF - if foo do - bar - else - baz - end - EOF - end -end diff --git a/bundle/elixir/spec/indent/lists_spec.rb b/bundle/elixir/spec/indent/lists_spec.rb deleted file mode 100755 index 895c07f..0000000 --- a/bundle/elixir/spec/indent/lists_spec.rb +++ /dev/null @@ -1,77 +0,0 @@ -require 'spec_helper' - -describe "Indenting" do - specify "lists" do - assert_correct_indenting <<-EOF - def example do - [ :foo, - :bar, - :baz ] - end - EOF - end - - specify "keyword list" do - assert_correct_indenting <<-EOF - def project do - [ name: "mix", - version: "0.1.0", - deps: deps ] - end - EOF - end - - specify "keyword" do - assert_correct_indenting <<-EOF - def config do - [ name: - "John" ] - end - EOF - end - - specify "list of tuples" do - assert_correct_indenting <<-EOF - def test do - [ { :cowboy, github: "extend/cowboy" }, - { :dynamo, "0.1.0-dev", github: "elixir-lang/dynamo" }, - { :ecto, github: "elixir-lang/ecto" }, - { :pgsql, github: "semiocast/pgsql" } ] - end - EOF - end - - specify "list of lists" do - assert_correct_indenting <<-EOF - def test do - [ [:a, :b, :c], - [:d, :e, :f] ] - end - EOF - end - - specify "complex list" do - assert_correct_indenting <<-EOF - def test do - [ app: :first, - version: "0.0.1", - dynamos: [First.Dynamo], - compilers: [:elixir, :dynamo, :ecto, :app], - env: [prod: [compile_path: "ebin"]], - compile_path: "tmp/first/ebin", - deps: deps ] - end - EOF - end - - specify "lists with break line after square brackets" do - assert_correct_indenting <<-EOF - def project do - deps: [ - { :bar, path: "deps/umbrella/apps/bar" }, - { :umbrella, path: "deps/umbrella" } - ] - end - EOF - end -end diff --git a/bundle/elixir/spec/indent/pipeline_spec.rb b/bundle/elixir/spec/indent/pipeline_spec.rb deleted file mode 100755 index 26db511..0000000 --- a/bundle/elixir/spec/indent/pipeline_spec.rb +++ /dev/null @@ -1,54 +0,0 @@ -require 'spec_helper' - -describe "Indenting" do - it "using multiline pipeline" do - assert_correct_indenting <<-EOF - "a,b,c,d" - |> String.split(",") - |> Enum.reverse - EOF - end - - it "attribuition using multline pipeline operator" do - assert_correct_indenting <<-EOF - [ h | t ] = "a,b,c,d" - |> String.split(",") - |> Enum.reverse - EOF - end - - it "function with pipeline operator" do - assert_correct_indenting <<-EOF - def test do - [ h | t ] = "a,b,c,d" - |> String.split(",") - |> Enum.reverse - - { :ok, h } - end - EOF - end - - it "pipeline operator with block open" do - assert_correct_indenting <<-EOF - def test do - "a,b,c,d" - |> String.split(",") - |> Enum.first - |> case do - "a" -> "A" - _ -> "Z" - end - end - EOF - end - - it "using a record with pipeline" do - assert_correct_indenting <<-EOF - defrecord RECORD, field_a: nil, field_b: nil - - rec = RECORD.new - |> IO.inspect - EOF - end -end diff --git a/bundle/elixir/spec/indent/tuples_spec.rb b/bundle/elixir/spec/indent/tuples_spec.rb deleted file mode 100755 index 5464704..0000000 --- a/bundle/elixir/spec/indent/tuples_spec.rb +++ /dev/null @@ -1,24 +0,0 @@ -require 'spec_helper' - -describe "Indenting" do - specify "multiline tuple" do - assert_correct_indenting <<-EOF - def xpto do - { :a, - :b, - :c } - end - EOF - end - - specify "tuples with break line after square brackets" do - assert_correct_indenting <<-EOF - def method do - { - :bar, - path: "deps/umbrella/apps/bar" - } - end - EOF - end -end diff --git a/bundle/elixir/spec/spec_helper.rb b/bundle/elixir/spec/spec_helper.rb deleted file mode 100755 index ab86908..0000000 --- a/bundle/elixir/spec/spec_helper.rb +++ /dev/null @@ -1,91 +0,0 @@ -require 'tmpdir' -require 'vimrunner' - -module Support - def assert_correct_indenting(string) - content = write_file(string) - - @vim.edit file - # remove all indentation - @vim.normal 'ggVG999<<' - # force vim to indent the file - @vim.normal 'gg=G' - @vim.write - - read_file.should eq(content) - end - - def assert_correct_syntax(syntax, cursor, string) - write_file(string) - - @vim.edit file - @vim.search cursor - - cursor_syntax_stack.should include(syntax) - end - - def assert_incorrect_syntax(type, cursor, string) - write_file(string) - - @vim.edit file - @vim.search cursor - - cursor_syntax_stack.should_not include(type) - end - - private - - def write_file(string) - content = file_content(string) - File.open file, 'w' do |f| - f.write content - end - - content - end - - def file_content(string) - whitespace = string.scan(/^\s*/).first - string.split("\n").map { |line| - line.gsub(/^#{whitespace}/, '') - }.join("\n").strip - end - - def cursor_syntax_stack - @vim.echo <<-EOF - map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")') - EOF - end - - def read_file - IO.read(file).strip - end - - def file; 'test.exs'; end -end - -RSpec.configure do |config| - include Support - - config.before(:suite) do - VIM = Vimrunner.start_gvim - VIM.prepend_runtimepath(File.expand_path('../..', __FILE__)) - VIM.command('runtime ftdetect/elixir.vim') - end - - config.after(:suite) do - VIM.kill - end - - config.around(:each) do |example| - @vim = VIM - - # cd into a temporary directory for every example. - Dir.mktmpdir do |dir| - Dir.chdir(dir) do - @vim.command("cd #{dir}") - example.call - end - end - end -end diff --git a/bundle/elixir/spec/syntax/default_argument_spec.rb b/bundle/elixir/spec/syntax/default_argument_spec.rb deleted file mode 100755 index ec69a3e..0000000 --- a/bundle/elixir/spec/syntax/default_argument_spec.rb +++ /dev/null @@ -1,13 +0,0 @@ -require 'spec_helper' - -describe "Default argument syntax" do - it "default argument" do - assert_correct_syntax 'elixirOperator', '\\', <<-'EOF' - def foo(bar \\ :baz) - EOF - - assert_correct_syntax 'elixirOperator', '\/', <<-EOF - def foo(bar // :baz) - EOF - end -end diff --git a/bundle/elixir/spec/syntax/heredoc_spec.rb b/bundle/elixir/spec/syntax/heredoc_spec.rb deleted file mode 100755 index eb50a4f..0000000 --- a/bundle/elixir/spec/syntax/heredoc_spec.rb +++ /dev/null @@ -1,63 +0,0 @@ -require 'spec_helper' - -describe "Heredoc syntax" do - describe "binary" do - it "with multiline content" do - assert_correct_syntax 'elixirDocString', 'foo', <<-EOF - @doc """ - foo - """ - EOF - end - - it "escapes quotes unless only preceded by whitespace" do - assert_correct_syntax 'elixirDocString', %q(^\s*\zs"""), <<-EOF - @doc """ - foo """ - """ - EOF - end - - it "does not include content on initial line", focus: true do - assert_correct_syntax 'elixirNumber', '0', <<-EOF - String.at """, 0 - foo - end - EOF - end - - it "with interpolation" do - assert_correct_syntax 'elixirInterpolation', 'bar', <<-EOF - @doc """ - foo \#{bar} - """ - EOF - end - end - - describe "character list" do - it "with multiline content" do - assert_correct_syntax 'elixirDocString', 'foo', <<-EOF - @doc """ - foo - """ - EOF - end - - it "escapes quotes unless only preceded by whitespace" do - assert_correct_syntax 'elixirDocString', %q(^\s*\zs'''), <<-EOF - @doc ''' - foo ''' - ''' - EOF - end - - it "with interpolation" do - assert_correct_syntax 'elixirInterpolation', 'bar', <<-EOF - @doc ''' - foo \#{bar} - ''' - EOF - end - end -end diff --git a/bundle/elixir/spec/syntax/records_spec.rb b/bundle/elixir/spec/syntax/records_spec.rb deleted file mode 100755 index b68814a..0000000 --- a/bundle/elixir/spec/syntax/records_spec.rb +++ /dev/null @@ -1,10 +0,0 @@ -# encoding: utf-8 -require 'spec_helper' - -describe "Record syntax" do - it "private record symbol" do - assert_correct_syntax 'elixirSymbol', ':user', <<-EOF - defrecordp :user, name: "José", age: 25 - EOF - end -end diff --git a/bundle/elixir/spec/syntax/sigil_spec.rb b/bundle/elixir/spec/syntax/sigil_spec.rb deleted file mode 100755 index ef68304..0000000 --- a/bundle/elixir/spec/syntax/sigil_spec.rb +++ /dev/null @@ -1,109 +0,0 @@ -require 'spec_helper' - -describe "Sigil syntax" do - describe "upper case" do - it "string" do - assert_correct_syntax 'elixirDelimiter', 'S', '~S(string)' - assert_correct_syntax 'elixirSigil', 'foo', '~S(string)' - end - - it "character list" do - assert_correct_syntax 'elixirDelimiter', 'C', '~C(charlist)' - assert_correct_syntax 'elixirSigil', 'charlist', '~C(charlist)' - end - - it "regular expression" do - assert_correct_syntax 'elixirDelimiter', 'R', '~R(regex)' - assert_correct_syntax 'elixirSigil', 'regex', '~R(regex)' - end - - it "list of words" do - assert_correct_syntax 'elixirDelimiter', 'W', '~W(list of words)' - assert_correct_syntax 'elixirSigil', 'list', '~W(list of words)' - end - - it "delimited with parans" do - assert_correct_syntax 'elixirDelimiter', '(', '~S(foo bar)' - assert_correct_syntax 'elixirDelimiter', ')', '~S(foo bar)' - end - - it "delimited with braces" do - assert_correct_syntax 'elixirDelimiter', '{', '~S{foo bar}' - assert_correct_syntax 'elixirDelimiter', '}', '~S{foo bar}' - end - - it "delimited with brackets" do - assert_correct_syntax 'elixirDelimiter', '[', '~S[foo bar]' - assert_correct_syntax 'elixirDelimiter', ']', '~S[foo bar]' - end - - it "escapes double quotes unless only preceded by whitespace" do - assert_correct_syntax 'elixirDelimiter', %q(^\s*\zs"""), <<-EOF - ~r""" - foo """ - """ - EOF - end - - it "escapes single quotes unless only preceded by whitespace" do - assert_correct_syntax 'elixirDelimiter', %q(^\s*\zs'''), <<-EOF - ~r''' - foo ''' - ''' - EOF - end - - it "without escapes" do - assert_incorrect_syntax 'elixirRegexEscape', '\\', '~S(foo \n bar)' - end - - it "without interpolation" do - assert_incorrect_syntax 'elixirInterpolation', 'bar', '~S(foo #{bar})' - end - - it "without escaped parans" do - assert_incorrect_syntax 'elixirRegexEscapePunctuation', '( ', '~S(\( )' - end - end - - describe "lower case" do - it "string" do - assert_correct_syntax 'elixirDelimiter', 's', '~s(string)' - assert_correct_syntax 'elixirSigil', 'foo', '~s(string)' - end - - it "character list" do - assert_correct_syntax 'elixirDelimiter', 'c', '~c(charlist)' - assert_correct_syntax 'elixirSigil', 'charlist', '~c(charlist)' - end - - it "regular expression" do - assert_correct_syntax 'elixirDelimiter', 'r', '~r(regex)' - assert_correct_syntax 'elixirSigil', 'regex', '~r(regex)' - end - - it "list of words" do - assert_correct_syntax 'elixirDelimiter', 'w', '~w(list of words)' - assert_correct_syntax 'elixirSigil', 'list', '~w(list of words)' - end - - it "with escapes" do - assert_correct_syntax 'elixirRegexEscape', '\\', '~s(foo \n bar)' - end - - it "with interpolation" do - assert_correct_syntax 'elixirInterpolation', 'bar', '~s(foo #{bar})' - end - - it "with escaped parans" do - assert_correct_syntax 'elixirRegexEscapePunctuation', '( ', '~s(\( )' - end - end - - describe "old syntax" do - it "string" do - assert_correct_syntax 'elixirDelimiter', 's', '%s(string)' - assert_correct_syntax 'elixirSigil', 'foo', '%s(string)' - end - end -end diff --git a/bundle/elixir/spec/syntax/variable_spec.rb b/bundle/elixir/spec/syntax/variable_spec.rb deleted file mode 100755 index 2877e7f..0000000 --- a/bundle/elixir/spec/syntax/variable_spec.rb +++ /dev/null @@ -1,11 +0,0 @@ -require 'spec_helper' - -describe "Variable syntax" do - it "unused" do - assert_correct_syntax 'elixirUnusedVariable', '_from', <<-EOF - def handle_call(:pop, _from, [h|stack]) do - { :reply, h, stack } - end - EOF - end -end diff --git a/bundle/elixir/syntax/elixir.vim b/bundle/elixir/syntax/elixir.vim deleted file mode 100755 index ff58d55..0000000 --- a/bundle/elixir/syntax/elixir.vim +++ /dev/null @@ -1,166 +0,0 @@ -" Vim syntax file -" Language: Elixir -" Maintainer: Carlos Galdino -" Last Change: 2013 Apr 24 - -if exists("b:current_syntax") - finish -endif - -" syncing starts 2000 lines before top line so docstrings don't screw things up -syn sync minlines=2000 - -syn cluster elixirNotTop contains=@elixirRegexSpecial,@elixirStringContained,@elixirDeclaration,elixirTodo,elixirArguments - -syn match elixirComment '#.*' contains=elixirTodo -syn keyword elixirTodo FIXME NOTE TODO OPTIMIZE XXX HACK contained - -syn keyword elixirKeyword is_atom is_binary is_bitstring is_boolean is_float is_function is_integer is_list is_number is_pid is_port is_record is_reference is_tuple is_exception -syn keyword elixirKeyword case cond bc lc inlist inbits if unless try receive -syn keyword elixirKeyword exit raise throw after rescue catch else do end -syn keyword elixirKeyword quote unquote super -syn match elixirKeyword '\<\%(->\)\>\s*' - -syn keyword elixirInclude import require alias use - -syn keyword elixirOperator and not or when xor in -syn match elixirOperator '%=\|\*=\|\*\*=\|+=\|-=\|\^=\|||=' -syn match elixirOperator "\%(<=>\|<\%(<\|=\)\@!\|>\%(<\|=\|>\)\@!\|<=\|>=\|===\|==\|=\~\|!=\|!\~\|\s?[ \t]\@=\)" -syn match elixirOperator "!+[ \t]\@=\|&&\|||\|\^\|\*\|+\|-\|/" -syn match elixirOperator "|\|++\|--\|\*\*\|\/\/\|\\\\\|<-\|<>\|<<\|>>\|=\|\.\|::" - -syn match elixirSymbol '\(:\)\@=]\@!\)\?\|<>\|===\?\|>=\?\|<=\?\)' -syn match elixirSymbol '\(:\)\@\|&&\?\|%\(()\|\[\]\|{}\)\|++\?\|--\?\|||\?\|!\|//\|[%&`/|]\)' -syn match elixirSymbol "\%([a-zA-Z_]\w*\([?!]\)\?\):\(:\)\@!" - -syn keyword elixirName nil -syn match elixirName '\<[A-Z]\w*\>' - -syn match elixirUnusedVariable '\<_\w*\>' - -syn keyword elixirBoolean true false - -syn match elixirVariable '@[a-zA-Z_]\w*\|&\d' - -syn keyword elixirPseudoVariable __FILE__ __DIR__ __MODULE__ __ENV__ __CALLER__ - -syn match elixirNumber '\<\d\(_\?\d\)*\(\.[^[:space:][:digit:]]\@!\(_\?\d\)*\)\?\([eE][-+]\?\d\(_\?\d\)*\)\?\>' -syn match elixirNumber '\<0[xX][0-9A-Fa-f]\+\>' -syn match elixirNumber '\<0[bB][01]\+\>' - -syn match elixirRegexEscape "\\\\\|\\[aAbBcdDefGhHnrsStvVwW]\|\\\d\{3}\|\\x[0-9a-fA-F]\{2}" contained -syn match elixirRegexEscapePunctuation "?\|\\.\|*\|\\\[\|\\\]\|+\|\\^\|\\\$\|\\|\|\\(\|\\)\|\\{\|\\}" contained -syn match elixirRegexQuantifier "[*?+][?+]\=" contained display -syn match elixirRegexQuantifier "{\d\+\%(,\d*\)\=}?\=" contained display -syn match elixirRegexCharClass "\[:\(alnum\|alpha\|ascii\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|word\|xdigit\):\]" contained display - -syn region elixirRegex matchgroup=elixirDelimiter start="%r/" end="/[uiomxfr]*" skip="\\\\" contains=@elixirRegexSpecial - -syn cluster elixirRegexSpecial contains=elixirRegexEscape,elixirRegexCharClass,elixirRegexQuantifier,elixirRegexEscapePunctuation -syn cluster elixirStringContained contains=elixirInterpolation,elixirRegexEscape,elixirRegexCharClass - -syn region elixirString matchgroup=elixirDelimiter start="'" end="'" skip="\\'" -syn region elixirString matchgroup=elixirDelimiter start='"' end='"' skip='\\"' contains=@elixirStringContained -syn region elixirInterpolation matchgroup=elixirDelimiter start="#{" end="}" contained contains=ALLBUT,elixirComment,@elixirNotTop - -syn region elixirDocStringStart matchgroup=elixirDocString start=+"""+ end=+$+ oneline contains=ALLBUT,@elixirNotTop -syn region elixirDocStringStart matchgroup=elixirDocString start=+'''+ end=+$+ oneline contains=ALLBUT,@elixirNotTop -syn region elixirDocString start=+\z("""\)+ end=+^\s*\zs\z1+ contains=elixirDocStringStart,elixirTodo,elixirInterpolation fold keepend -syn region elixirDocString start=+\z('''\)+ end=+^\s*\zs\z1+ contains=elixirDocStringStart,elixirTodo,elixirInterpolation fold keepend - -syn match elixirSymbolInterpolated ':\("\)\@=' contains=elixirString -syn match elixirString "\(\w\)\@\|0[0-7]{0,2}[0-7]\@!\>\|[^x0MC]\)\|(\\[MC]-)+\w\|[^\s\\]\)" - -syn region elixirBlock matchgroup=elixirKeyword start="\\(:\)\@!" end="\" contains=ALLBUT,@elixirNotTop fold -syn region elixirAnonymousFunction matchgroup=elixirKeyword start="\" end="\" contains=ALLBUT,@elixirNotTop fold - -syn region elixirArguments start="(" end=")" contained contains=elixirOperator,elixirSymbol,elixirPseudoVariable,elixirName,elixirBoolean,elixirVariable,elixirUnusedVariable,elixirNumber,elixirDocString,elixirSymbolInterpolated,elixirRegex,elixirString,elixirDelimiter - -syn match elixirDelimEscape "\\[(<{\[)>}\]]" transparent display contained contains=NONE - -syn region elixirSigil matchgroup=elixirDelimiter start="[%~]\z([~`!@#$%^&*_\-+|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold -syn region elixirSigil matchgroup=elixirDelimiter start="[%~][SCRW]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold -syn region elixirSigil matchgroup=elixirDelimiter start="[%~][SCRW]\={" end="}" skip="\\\\\|\\}" contains=elixirDelimEscape fold -syn region elixirSigil matchgroup=elixirDelimiter start="[%~][SCRW]\=<" end=">" skip="\\\\\|\\>" contains=elixirDelimEscape fold -syn region elixirSigil matchgroup=elixirDelimiter start="[%~][SCRW]\=\[" end="\]" skip="\\\\\|\\\]" contains=elixirDelimEscape fold -syn region elixirSigil matchgroup=elixirDelimiter start="[%~][SCRW]\=(" end=")" skip="\\\\\|\\)" contains=elixirDelimEscape fold - -syn region elixirSigil matchgroup=elixirDelimiter start="[%~][scrw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold -syn region elixirSigil matchgroup=elixirDelimiter start="[%~][scrw]{" end="}" skip="\\\\\|\\}" fold contains=@elixirStringContained,elixirRegexEscapePunctuation -syn region elixirSigil matchgroup=elixirDelimiter start="[%~][scrw]<" end=">" skip="\\\\\|\\>" fold contains=@elixirStringContained,elixirRegexEscapePunctuation -syn region elixirSigil matchgroup=elixirDelimiter start="[%~][scrw]\[" end="\]" skip="\\\\\|\\\]" fold contains=@elixirStringContained,elixirRegexEscapePunctuation -syn region elixirSigil matchgroup=elixirDelimiter start="[%~][scrw](" end=")" skip="\\\\\|\\)" fold contains=@elixirStringContained,elixirRegexEscapePunctuation - -" Sigils surrounded with docString -syn region elixirSigil matchgroup=elixirDelimiter start=+[%~][SCRWscrw]\z("""\)+ end=+^\s*\zs\z1+ skip=+\\"+ fold -syn region elixirSigil matchgroup=elixirDelimiter start=+[%~][SCRWscrw]\z('''\)+ end=+^\s*\zs\z1+ skip=+\\'+ fold - -" Defines -syn keyword elixirDefine def nextgroup=elixirFunctionDeclaration skipwhite skipnl -syn keyword elixirDefine def nextgroup=elixirFunctionDeclaration skipwhite skipnl -syn keyword elixirPrivateDefine defp nextgroup=elixirFunctionDeclaration skipwhite skipnl -syn keyword elixirModuleDefine defmodule nextgroup=elixirModuleDeclaration skipwhite skipnl -syn keyword elixirProtocolDefine defprotocol nextgroup=elixirProtocolDeclaration skipwhite skipnl -syn keyword elixirImplDefine defimpl nextgroup=elixirImplDeclaration skipwhite skipnl -syn keyword elixirRecordDefine defrecord nextgroup=elixirRecordDeclaration skipwhite skipnl -syn keyword elixirPrivateRecordDefine defrecordp nextgroup=elixirRecordDeclaration skipwhite skipnl -syn keyword elixirMacroDefine defmacro nextgroup=elixirMacroDeclaration skipwhite skipnl -syn keyword elixirPrivateMacroDefine defmacrop nextgroup=elixirMacroDeclaration skipwhite skipnl -syn keyword elixirDelegateDefine defdelegate nextgroup=elixirDelegateDeclaration skipwhite skipnl -syn keyword elixirOverridableDefine defoverridable nextgroup=elixirOverridableDeclaration skipwhite skipnl -syn keyword elixirExceptionDefine defexception nextgroup=elixirExceptionDeclaration skipwhite skipnl -syn keyword elixirCallbackDefine defcallback nextgroup=elixirCallbackDeclaration skipwhite skipnl - -" Declarations -syn match elixirModuleDeclaration "[^[:space:];#<]\+" contained contains=elixirName nextgroup=elixirBlock skipwhite skipnl -syn match elixirFunctionDeclaration "[^[:space:];#<,()\[\]]\+" contained nextgroup=elixirArguments skipwhite skipnl -syn match elixirProtocolDeclaration "[^[:space:];#<]\+" contained contains=elixirName skipwhite skipnl -syn match elixirImplDeclaration "[^[:space:];#<]\+" contained contains=elixirName skipwhite skipnl -syn match elixirRecordDeclaration "[^[:space:];#<]\+" contained contains=elixirName,elixirSymbol skipwhite skipnl -syn match elixirMacroDeclaration "[^[:space:];#<,()\[\]]\+" contained nextgroup=elixirArguments skipwhite skipnl -syn match elixirDelegateDeclaration "[^[:space:];#<,()\[\]]\+" contained contains=elixirFunctionDeclaration skipwhite skipnl -syn region elixirDelegateDeclaration start='\[' end='\]' contained contains=elixirFunctionDeclaration skipwhite skipnl -syn match elixirOverridableDeclaration "[^[:space:];#<]\+" contained contains=elixirName skipwhite skipnl -syn match elixirExceptionDeclaration "[^[:space:];#<]\+" contained contains=elixirName skipwhite skipnl -syn match elixirCallbackDeclaration "[^[:space:];#<,()\[\]]\+" contained contains=elixirFunctionDeclaration skipwhite skipnl - -syn cluster elixirDeclaration contains=elixirFunctionDeclaration,elixirModuleDeclaration,elixirProtocolDeclaration,elixirImplDeclaration,elixirRecordDeclaration,elixirMacroDeclaration,elixirDelegateDeclaration,elixirOverridableDeclaration,elixirExceptionDeclaration,elixirCallbackDeclaration - -hi def link elixirDefine Define -hi def link elixirPrivateDefine Define -hi def link elixirModuleDefine Define -hi def link elixirProtocolDefine Define -hi def link elixirImplDefine Define -hi def link elixirRecordDefine Define -hi def link elixirPrivateRecordDefine Define -hi def link elixirMacroDefine Define -hi def link elixirPrivateMacroDefine Define -hi def link elixirDelegateDefine Define -hi def link elixirOverridableDefine Define -hi def link elixirExceptionDefine Define -hi def link elixirCallbackDefine Define -hi def link elixirFunctionDeclaration Function -hi def link elixirMacroDeclaration Macro -hi def link elixirInclude Include -hi def link elixirComment Comment -hi def link elixirTodo Todo -hi def link elixirKeyword Keyword -hi def link elixirOperator Operator -hi def link elixirSymbol Constant -hi def link elixirPseudoVariable Constant -hi def link elixirName Type -hi def link elixirBoolean Boolean -hi def link elixirVariable Identifier -hi def link elixirUnusedVariable Comment -hi def link elixirNumber Number -hi def link elixirDocString String -hi def link elixirSymbolInterpolated elixirSymbol -hi def link elixirRegex elixirString -hi def link elixirRegexEscape elixirSpecial -hi def link elixirRegexEscapePunctuation elixirSpecial -hi def link elixirRegexCharClass elixirSpecial -hi def link elixirRegexQuantifier elixirSpecial -hi def link elixirSpecial Special -hi def link elixirString String -hi def link elixirSigil String -hi def link elixirDelimiter Delimiter diff --git a/bundle/fugitive/CONTRIBUTING.markdown b/bundle/fugitive/CONTRIBUTING.markdown deleted file mode 100755 index e651dca..0000000 --- a/bundle/fugitive/CONTRIBUTING.markdown +++ /dev/null @@ -1,18 +0,0 @@ -Before reporting a bug, you should try stripping down your Vim configuration -and removing other plugins. The sad truth about VimScript is that it is -fraught with incompatibilities waiting to happen. I'm happy to work around -them where I can, but it's up to you to isolate the conflict. - -Fugitive is particularly prone to regressions due to Git version issues, -platform issues, and interactions with other plugins. I end up bisecting a -lot more than other projects, and thus I'm especially meticulous here about -maintaining a clean, readable, history. Squash and force push any requested -changes to a pull request. And if your [commit message -sucks](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html), -I'm not going to accept it. Period. - -Beyond that, don't be shy about asking before patching. What takes you hours -might take me minutes simply because I have both domain knowledge and a -perverse knowledge of VimScript so vast that many would consider it a symptom -of mental illness. On the flip side, some ideas I'll reject no matter how -good the implementation is. "Send a patch" is an edge case answer in my book. diff --git a/bundle/fugitive/README.markdown b/bundle/fugitive/README.markdown deleted file mode 100755 index 71b8bc4..0000000 --- a/bundle/fugitive/README.markdown +++ /dev/null @@ -1,118 +0,0 @@ -# fugitive.vim - -I'm not going to lie to you; fugitive.vim may very well be the best -Git wrapper of all time. Check out these features: - -View any blob, tree, commit, or tag in the repository with `:Gedit` (and -`:Gsplit`, `:Gvsplit`, `:Gtabedit`, ...). Edit a file in the index and -write to it to stage the changes. Use `:Gdiff` to bring up the staged -version of the file side by side with the working tree version and use -Vim's diff handling capabilities to stage a subset of the file's -changes. - -Bring up the output of `git status` with `:Gstatus`. Press `-` to -`add`/`reset` a file's changes, or `p` to `add`/`reset` `--patch`. And guess -what `:Gcommit` does! - -`:Gblame` brings up an interactive vertical split with `git blame` -output. Press enter on a line to edit the commit where the line -changed, or `o` to open it in a split. When you're done, use `:Gedit` -in the historic buffer to go back to the work tree version. - -`:Gmove` does a `git mv` on a file and simultaneously renames the -buffer. `:Gremove` does a `git rm` on a file and simultaneously deletes -the buffer. - -Use `:Ggrep` to search the work tree (or any arbitrary commit) with -`git grep`, skipping over that which is not tracked in the repository. -`:Glog` loads all previous revisions of a file into the quickfix list so -you can iterate over them and watch the file evolve! - -`:Gread` is a variant of `git checkout -- filename` that operates on the -buffer rather than the filename. This means you can use `u` to undo it -and you never get any warnings about the file changing outside Vim. -`:Gwrite` writes to both the work tree and index versions of a file, -making it like `git add` when called from a work tree file and like -`git checkout` when called from the index or a blob in history. - -Use `:Gbrowse` to open the current file on GitHub, with optional line -range (try it in visual mode!). If your current repository isn't on -GitHub, `git instaweb` will be spun up instead. - -Add `%{fugitive#statusline()}` to `'statusline'` to get an indicator -with the current branch in (surprise!) your statusline. - -Last but not least, there's `:Git` for running any arbitrary command, -and `Git!` to open the output of a command in a temp file. - -## Screencasts - -* [A complement to command line git](http://vimcasts.org/e/31) -* [Working with the git index](http://vimcasts.org/e/32) -* [Resolving merge conflicts with vimdiff](http://vimcasts.org/e/33) -* [Browsing the git object database](http://vimcasts.org/e/34) -* [Exploring the history of a git repository](http://vimcasts.org/e/35) - -## Installation - -If you don't have a preferred installation method, one option is to install -[pathogen.vim](https://github.com/tpope/vim-pathogen), and then copy -and paste: - - cd ~/.vim/bundle - git clone git://github.com/tpope/vim-fugitive.git - vim -u NONE -c "helptags vim-fugitive/doc" -c q - -If your Vim version is below 7.2, I recommend also installing -[vim-git](https://github.com/tpope/vim-git) for syntax highlighting and -other Git niceties. - -## FAQ - -> I installed the plugin and started Vim. Why don't any of the commands -> exist? - -Fugitive cares about the current file, not the current working -directory. Edit a file from the repository. - -> I opened a new tab. Why don't any of the commands exist? - -Fugitive cares about the current file, not the current working -directory. Edit a file from the repository. - -> Why is `:Gbrowse` not using the right browser? - -`:Gbrowse` delegates to `git web--browse`, which is less than perfect -when it comes to finding the right browser. You can tell it the correct -browser to use with `git config --global web.browser ...`. On OS X, for -example, you might want to set this to `open`. See `git web--browse --help` -for details. - -> Here's a patch that automatically opens the quickfix window after -> `:Ggrep`. - -This is a great example of why I recommend asking before patching. -There are valid arguments to be made both for and against automatically -opening the quickfix window. Whenever I have to make an arbitrary -decision like this, I ask what Vim would do. And Vim does not open a -quickfix window after `:grep`. - -Luckily, it's easy to implement the desired behavior without changing -fugitive.vim. The following autocommand will cause the quickfix window -to open after any grep invocation: - - autocmd QuickFixCmdPost *grep* cwindow - -## Self-Promotion - -Like fugitive.vim? Follow the repository on -[GitHub](https://github.com/tpope/vim-fugitive) and vote for it on -[vim.org](http://www.vim.org/scripts/script.php?script_id=2975). And if -you're feeling especially charitable, follow [tpope](http://tpo.pe/) on -[Twitter](http://twitter.com/tpope) and -[GitHub](https://github.com/tpope). - -## License - -Copyright (c) Tim Pope. Distributed under the same terms as Vim itself. -See `:help license`. diff --git a/bundle/fugitive/doc/fugitive.txt b/bundle/fugitive/doc/fugitive.txt deleted file mode 100755 index 0d186bf..0000000 --- a/bundle/fugitive/doc/fugitive.txt +++ /dev/null @@ -1,345 +0,0 @@ -*fugitive.txt* A Git wrapper so awesome, it should be illegal - -Author: Tim Pope -License: Same terms as Vim itself (see |license|) - -This plugin is only available if 'compatible' is not set. - -INTRODUCTION *fugitive* - -Whenever you edit a file from a Git repository, a set of commands is defined -that serve as a gateway to Git. - -COMMANDS *fugitive-commands* - -These commands are local to the buffers in which they work (generally, buffers -that are part of Git repositories). - - *fugitive-:Git* -:Git [args] Run an arbitrary git command. Similar to :!git [args] - but chdir to the repository tree first. - - *fugitive-:Git!* -:Git! [args] Like |:Git|, but capture the output into a temp file, - and edit that temp file. - - *fugitive-:Gcd* -:Gcd [directory] |:cd| relative to the repository. - - *fugitive-:Glcd* -:Glcd [directory] |:lcd| relative to the repository. - - *fugitive-:Gstatus* -:Gstatus Bring up the output of git-status in the preview - window. The following maps, which work on the cursor - line file where sensible, are provided: - - g? show this help - next file - previous file - |:Gedit| - - |:Git| add - - |:Git| reset (staged files) - cA |:Gcommit| --amend --reuse-message=HEAD - ca |:Gcommit| --amend - cc |:Gcommit| - cva |:Gcommit| --amend --verbose - cvc |:Gcommit| --verbose - D |:Gdiff| - ds |:Gsdiff| - dp |:Git!| diff (p for patch; use :Gw to apply) - dp |:Git| add --intent-to-add (untracked files) - dv |:Gvdiff| - O |:Gtabedit| - o |:Gsplit| - p |:Git| add --patch - p |:Git| reset --patch (staged files) - q close status - r reload status - S |:Gvsplit| - - *fugitive-:Gcommit* -:Gcommit [args] A wrapper around git-commit. If there is nothing - to commit, |:Gstatus| is called instead. Unless the - arguments given would skip the invocation of an editor - (e.g., -m), a split window will be used to obtain a - commit message, or a new tab if -v is given. Write - and close that window (:wq or |:Gwrite|) to finish the - commit. Unlike when running the actual git-commit - command, it is possible (but unadvisable) to alter the - index with commands like git-add and git-reset while a - commit message is pending. - - *fugitive-:Gmerge* -:Gmerge [args] Calls git-merge and loads errors and conflicted files - into the quickfix list. Opens a |:Gcommit| style - split window for the commit message if the merge - succeeds. If called during a merge conflict, the - conflicted files from the current index are loaded - into the quickfix list. - - *fugitive-:Gpull* -:Gpull [args] Like |:Gmerge|, but for git-pull. - - *fugitive-:Gpush* -:Gpush [args] Invoke git-push, load the results into the quickfix - list, and invoke |:cwindow| to reveal any errors. - |:Dispatch| is used if available for asynchronous - invocation. - - *fugitive-:Gfetch* -:Gfetch [args] Like |:Gpush|, but for git-fetch. - - *fugitive-:Ggrep* -:Ggrep [args] |:grep| with git-grep as 'grepprg'. - - *fugitive-:Glgrep* -:Glgrep [args] |:lgrep| with git-grep as 'grepprg'. - - *fugitive-:Glog* -:Glog [args] Load all previous revisions of the current file into - the quickfix list. Additional git-log arguments can - be given (for example, --reverse). If "--" appears as - an argument, no file specific filtering is done, and - previous commits rather than previous file revisions - are loaded. - -:{range}Glog [args] Use git-log -L to load previous revisions of the given - range of the current file into the quickfix list. The - cursor is positioned on the first line of the first - diff hunk for each commit. - - *fugitive-:Gllog* -:Gllog [args] Like |:Glog|, but use the location list instead of the - quickfix list. - - *fugitive-:Gedit* *fugitive-:Ge* -:Gedit [revision] |:edit| a |fugitive-revision|. - - *fugitive-:Gsplit* -:Gsplit [revision] |:split| a |fugitive-revision|. - - *fugitive-:Gvsplit* -:Gvsplit [revision] |:vsplit| a |fugitive-revision|. - - *fugitive-:Gtabedit* -:Gtabedit [revision] |:tabedit| a |fugitive-revision|. - - *fugitive-:Gpedit* -:Gpedit [revision] |:pedit| a |fugitive-revision|. - -:Gsplit! [args] *fugitive-:Gsplit!* *fugitive-:Gvsplit!* -:Gvsplit! [args] *fugitive-:Gtabedit!* *fugitive-:Gpedit!* -:Gtabedit! [args] Like |:Git!|, but open the resulting temp file in a -:Gpedit! [args] split, tab, or preview window. - - *fugitive-:Gread* -:Gread [revision] Empty the buffer and |:read| a |fugitive-revision|. - When the argument is omitted, this is similar to - git-checkout on a work tree file or git-add on a stage - file, but without writing anything to disk. - -:{range}Gread [revision] - |:read| in a |fugitive-revision| after {range}. - - *fugitive-:Gread!* -:Gread! [args] Empty the buffer and |:read| the output of a Git - command. For example, :Gread! show HEAD:%. - -:{range}Gread! [args] |:read| the output of a Git command after {range}. - - *fugitive-:Gw* *fugitive-:Gwrite* -:Gwrite Write to the current file's path and stage the results. - When run in a work tree file, it is effectively git - add. Elsewhere, it is effectively git-checkout. A - great deal of effort is expended to behave sensibly - when the work tree or index version of the file is - open in another buffer. - -:Gwrite {path} You can give |:Gwrite| an explicit path of where in - the work tree to write. You can also give a path like - :0:foo.txt or even :0 to write to just that stage in - the index. - - *fugitive-:Gwq* -:Gwq [path] Like |:Gwrite| followed by |:quit| if the write - succeeded. - -:Gwq! [path] Like |:Gwrite|! followed by |:quit|! if the write - succeeded. - - *fugitive-:Gdiff* -:Gdiff [revision] Perform a |vimdiff| against the current file in the - given revision. With no argument, the version in the - index is used (which means a three-way diff during a - merge conflict, making it a git-mergetool - alternative). The newer of the two files is placed - to the right or bottom, depending on 'diffopt' and - the width of the window relative to 'textwidth'. Use - |do| and |dp| and write to the index file to simulate - "git add --patch". - - *fugitive-:Gsdiff* -:Gsdiff [revision] Like |:Gdiff|, but always split horizontally. - - *fugitive-:Gvdiff* -:Gvdiff [revision] Like |:Gdiff|, but always split vertically. - - *fugitive-:Gmove* -:Gmove {destination} Wrapper around git-mv that renames the buffer - afterward. The destination is relative to the current - directory except when started with a /, in which case - it is relative to the work tree. Add a ! to pass -f. - - *fugitive-:Gremove* -:Gremove Wrapper around git-rm that deletes the buffer - afterward. When invoked in an index file, --cached is - passed. Add a ! to pass -f and forcefully discard the - buffer. - - *fugitive-:Gblame* -:Gblame [flags] Run git-blame on the file and open the results in a - scroll bound vertical split. You can give any of - ltfnsewMC as flags and they will be passed along to - git-blame. The following maps, which work on the - cursor line commit where sensible, are provided: - - g? show this help - A resize to end of author column - C resize to end of commit column - D resize to end of date/time column - q close blame and return to blamed window - gq q, then |:Gedit| to return to work tree version - q, then open commit - o open commit in horizontal split - O open commit in new tab - - reblame at commit - ~ reblame at [count]th first grandparent - P reblame at [count]th parent (like HEAD^[count]) - -:[range]Gblame [flags] Run git-blame on the given range. - - *fugitive-:Gbrowse* -:[range]Gbrowse If the remote for the current branch is on GitHub, - open the current file, blob, tree, commit, or tag - (with git-web--browse) on GitHub. Otherwise, open the - current file, blob, tree, commit, or tag in - git-instaweb (if you have issues, verify you can run - "git instaweb" from a terminal). If a range is given, - it is appropriately appended to the URL as an anchor. - - To use with GitHub FI, point g:fugitive_github_domains - at a list of domains: -> - let g:fugitive_github_domains = ['https://example.com/'] -~ -:[range]Gbrowse! Like :Gbrowse, but put the URL on the clipboard rather - than opening it. - -:[range]Gbrowse {revision} - Like :Gbrowse, but for a given |fugitive-revision|. A - useful value here is -, which ties the URL to the - latest commit rather than a volatile branch. - -:[range]Gbrowse [...]@{remote} - Force using the given remote rather than the remote - for the current branch. The remote is used to - determine which GitHub repository to link to. - -MAPPINGS *fugitive-mappings* - -These maps are available everywhere. - - *fugitive-c_CTRL-R_CTRL-G* - On the command line, recall the path to the current - object (that is, a representation of the object - recognized by |:Gedit|). - - *fugitive-y_CTRL-G* -["x]y Yank the commit SHA and path to the current object. - -These maps are available in Git objects. - - *fugitive-* - Jump to the revision under the cursor. - - *fugitive-o* -o Jump to the revision under the cursor in a new split. - - *fugitive-S* -S Jump to the revision under the cursor in a new - vertical split. - - *fugitive-O* -O Jump to the revision under the cursor in a new tab. - - *fugitive--* -- Go to the tree containing the current tree or blob. - - *fugitive-~* -~ Go to the current file in the [count]th first - ancestor. - - *fugitive-P* -P Go to the current file in the [count]th parent. - - *fugitive-C* -C Go to the commit containing the current file. - - *fugitive-.* -. Start a |:| command line with the current revision - prepopulated at the end of the line. - - *fugitive-a* -a Show the current tag, commit, or tree in an alternate - format. - -SPECIFYING REVISIONS *fugitive-revision* - -Fugitive revisions are similar to Git revisions as defined in the "SPECIFYING -REVISIONS" section in the git-rev-parse man page. For commands that accept an -optional revision, the default is the file in the index for work tree files -and the work tree file for everything else. Example revisions follow. - -Revision Meaning ~ -HEAD .git/HEAD -master .git/refs/heads/master -HEAD^{} The commit referenced by HEAD -HEAD^ The parent of the commit referenced by HEAD -HEAD: The tree referenced by HEAD -/HEAD The file named HEAD in the work tree -Makefile The file named Makefile in the work tree -HEAD^:Makefile The file named Makefile in the parent of HEAD -:Makefile The file named Makefile in the index (writable) -- The current file in HEAD -^ The current file in the previous commit -~3 The current file 3 commits ago -: .git/index (Same as |:Gstatus|) -:0 The current file in the index -:1 The current file's common ancestor during a conflict -:2 The current file in the target branch during a conflict -:3 The current file in the merged branch during a conflict -:/foo The most recent commit with "foo" in the message - -STATUSLINE *fugitive-statusline* - - *fugitive#statusline()* -Add %{fugitive#statusline()} to your statusline to get an indicator including -the current branch and the currently edited file's commit. If you don't have -a statusline, this one matches the default when 'ruler' is set: -> - set statusline=%<%f\ %h%m%r%{fugitive#statusline()}%=%-14.(%l,%c%V%)\ %P -< - *fugitive#head(...)* -Use fugitive#head() to return the name of the current branch. If the current -HEAD is detached, fugitive#head() will return the empty string, unless the -optional argument is given, in which case the hash of the current commit will -be truncated to the given number of characters. - -ABOUT *fugitive-about* - -Grab the latest version or report a bug on GitHub: - -http://github.com/tpope/vim-fugitive - - vim:tw=78:et:ft=help:norl: diff --git a/bundle/fugitive/plugin/fugitive.vim b/bundle/fugitive/plugin/fugitive.vim deleted file mode 100755 index c880351..0000000 --- a/bundle/fugitive/plugin/fugitive.vim +++ /dev/null @@ -1,2930 +0,0 @@ -" fugitive.vim - A Git wrapper so awesome, it should be illegal -" Maintainer: Tim Pope -" Version: 2.2 -" GetLatestVimScripts: 2975 1 :AutoInstall: fugitive.vim - -if exists('g:loaded_fugitive') || &cp - finish -endif -let g:loaded_fugitive = 1 - -if !exists('g:fugitive_git_executable') - let g:fugitive_git_executable = 'git' -endif - -" Section: Utility - -function! s:function(name) abort - return function(substitute(a:name,'^s:',matchstr(expand(''), '\d\+_'),'')) -endfunction - -function! s:sub(str,pat,rep) abort - return substitute(a:str,'\v\C'.a:pat,a:rep,'') -endfunction - -function! s:gsub(str,pat,rep) abort - return substitute(a:str,'\v\C'.a:pat,a:rep,'g') -endfunction - -function! s:winshell() abort - return &shell =~? 'cmd' || exists('+shellslash') && !&shellslash -endfunction - -function! s:shellesc(arg) abort - if a:arg =~ '^[A-Za-z0-9_/.-]\+$' - return a:arg - elseif s:winshell() - return '"'.s:gsub(s:gsub(a:arg, '"', '""'), '\%', '"%"').'"' - else - return shellescape(a:arg) - endif -endfunction - -function! s:fnameescape(file) abort - if exists('*fnameescape') - return fnameescape(a:file) - else - return escape(a:file," \t\n*?[{`$\\%#'\"|!<") - endif -endfunction - -function! s:throw(string) abort - let v:errmsg = 'fugitive: '.a:string - throw v:errmsg -endfunction - -function! s:warn(str) abort - echohl WarningMsg - echomsg a:str - echohl None - let v:warningmsg = a:str -endfunction - -function! s:shellslash(path) abort - if s:winshell() - return s:gsub(a:path,'\\','/') - else - return a:path - endif -endfunction - -let s:git_versions = {} - -function! fugitive#git_version(...) abort - if !has_key(s:git_versions, g:fugitive_git_executable) - let s:git_versions[g:fugitive_git_executable] = matchstr(system(g:fugitive_git_executable.' --version'), "\\S\\+\n") - endif - return s:git_versions[g:fugitive_git_executable] -endfunction - -function! s:recall() abort - let rev = s:sub(s:buffer().rev(), '^/', '') - if rev ==# ':' - return matchstr(getline('.'),'^#\t\%([[:alpha:] ]\+: *\)\=\zs.\{-\}\ze\%( ([^()[:digit:]]\+)\)\=$\|^\d\{6} \x\{40\} \d\t\zs.*') - elseif s:buffer().type('tree') - let file = matchstr(getline('.'), '\t\zs.*') - if empty(file) && line('.') > 2 - let file = s:sub(getline('.'), '/$', '') - endif - if !empty(file) && rev !~# ':$' - return rev . '/' . file - else - return rev . file - endif - endif - return rev -endfunction - -function! s:add_methods(namespace, method_names) abort - for name in a:method_names - let s:{a:namespace}_prototype[name] = s:function('s:'.a:namespace.'_'.name) - endfor -endfunction - -let s:commands = [] -function! s:command(definition) abort - let s:commands += [a:definition] -endfunction - -function! s:define_commands() abort - for command in s:commands - exe 'command! -buffer '.command - endfor -endfunction - -augroup fugitive_utility - autocmd! - autocmd User Fugitive call s:define_commands() -augroup END - -let s:abstract_prototype = {} - -" Section: Initialization - -function! fugitive#is_git_dir(path) abort - let path = s:sub(a:path, '[\/]$', '') . '/' - return isdirectory(path.'objects') && isdirectory(path.'refs') && getfsize(path.'HEAD') > 10 -endfunction - -function! fugitive#extract_git_dir(path) abort - if s:shellslash(a:path) =~# '^fugitive://.*//' - return matchstr(s:shellslash(a:path), '\C^fugitive://\zs.\{-\}\ze//') - endif - let root = s:shellslash(simplify(fnamemodify(a:path, ':p:s?[\/]$??'))) - let previous = "" - while root !=# previous - if root =~# '\v^//%([^/]+/?)?$' - " This is for accessing network shares from Cygwin Vim. There won't be - " any git directory called //.git or //serverName/.git so let's avoid - " checking for them since such checks are extremely slow. - break - endif - if index(split($GIT_CEILING_DIRECTORIES, ':'), root) >= 0 - break - endif - if root ==# $GIT_WORK_TREE && fugitive#is_git_dir($GIT_DIR) - return $GIT_DIR - endif - if fugitive#is_git_dir($GIT_DIR) - " Ensure that we've cached the worktree - call s:configured_tree($GIT_DIR) - if has_key(s:dir_for_worktree, root) - return s:dir_for_worktree[root] - endif - endif - let dir = s:sub(root, '[\/]$', '') . '/.git' - let type = getftype(dir) - if type ==# 'dir' && fugitive#is_git_dir(dir) - return dir - elseif type ==# 'link' && fugitive#is_git_dir(dir) - return resolve(dir) - elseif type !=# '' && filereadable(dir) - let line = get(readfile(dir, '', 1), 0, '') - if line =~# '^gitdir: \.' && fugitive#is_git_dir(root.'/'.line[8:-1]) - return simplify(root.'/'.line[8:-1]) - elseif line =~# '^gitdir: ' && fugitive#is_git_dir(line[8:-1]) - return line[8:-1] - endif - elseif fugitive#is_git_dir(root) - return root - endif - let previous = root - let root = fnamemodify(root, ':h') - endwhile - return '' -endfunction - -function! fugitive#detect(path) abort - if exists('b:git_dir') && (b:git_dir ==# '' || b:git_dir =~# '/$') - unlet b:git_dir - endif - if !exists('b:git_dir') - let dir = fugitive#extract_git_dir(a:path) - if dir !=# '' - let b:git_dir = dir - endif - endif - if exists('b:git_dir') - if exists('#User#FugitiveBoot') - try - let [save_mls, &modelines] = [&mls, 0] - doautocmd User FugitiveBoot - finally - let &mls = save_mls - endtry - endif - cnoremap fnameescape(recall()) - nnoremap y :call setreg(v:register, recall()) - let buffer = fugitive#buffer() - if expand('%:p') =~# '//' - call buffer.setvar('&path', s:sub(buffer.getvar('&path'), '^\.%(,|$)', '')) - endif - if stridx(buffer.getvar('&tags'), escape(b:git_dir, ', ')) == -1 - if filereadable(b:git_dir.'/tags') - call buffer.setvar('&tags', escape(b:git_dir.'/tags', ', ').','.buffer.getvar('&tags')) - endif - if &filetype !=# '' && filereadable(b:git_dir.'/'.&filetype.'.tags') - call buffer.setvar('&tags', escape(b:git_dir.'/'.&filetype.'.tags', ', ').','.buffer.getvar('&tags')) - endif - endif - try - let [save_mls, &modelines] = [&mls, 0] - doautocmd User Fugitive - finally - let &mls = save_mls - endtry - endif -endfunction - -augroup fugitive - autocmd! - autocmd BufNewFile,BufReadPost * call fugitive#detect(expand(':p')) - autocmd FileType netrw call fugitive#detect(expand('%:p')) - autocmd User NERDTreeInit,NERDTreeNewRoot call fugitive#detect(b:NERDTreeRoot.path.str()) - autocmd VimEnter * if expand('')==''|call fugitive#detect(getcwd())|endif - autocmd CmdWinEnter * call fugitive#detect(expand('#:p')) - autocmd BufWinLeave * execute getwinvar(+bufwinnr(+expand('')), 'fugitive_leave') -augroup END - -" Section: Repository - -let s:repo_prototype = {} -let s:repos = {} -let s:worktree_for_dir = {} -let s:dir_for_worktree = {} - -function! s:repo(...) abort - let dir = a:0 ? a:1 : (exists('b:git_dir') && b:git_dir !=# '' ? b:git_dir : fugitive#extract_git_dir(expand('%:p'))) - if dir !=# '' - if has_key(s:repos, dir) - let repo = get(s:repos, dir) - else - let repo = {'git_dir': dir} - let s:repos[dir] = repo - endif - return extend(extend(repo, s:repo_prototype, 'keep'), s:abstract_prototype, 'keep') - endif - call s:throw('not a git repository: '.expand('%:p')) -endfunction - -function! fugitive#repo(...) abort - return call('s:repo', a:000) -endfunction - -function! s:repo_dir(...) dict abort - return join([self.git_dir]+a:000,'/') -endfunction - -function! s:configured_tree(git_dir) abort - if !has_key(s:worktree_for_dir, a:git_dir) - let s:worktree_for_dir[a:git_dir] = '' - let config_file = a:git_dir . '/config' - if filereadable(config_file) - let config = readfile(config_file,'',10) - call filter(config,'v:val =~# "^\\s*worktree *="') - if len(config) == 1 - let s:worktree_for_dir[a:git_dir] = matchstr(config[0], '= *\zs.*') - let s:dir_for_worktree[s:worktree_for_dir[a:git_dir]] = a:git_dir - endif - endif - endif - if s:worktree_for_dir[a:git_dir] =~# '^\.' - return simplify(a:git_dir . '/' . s:worktree_for_dir[a:git_dir]) - else - return s:worktree_for_dir[a:git_dir] - endif -endfunction - -function! s:repo_tree(...) dict abort - if self.dir() =~# '/\.git$' - let dir = self.dir()[0:-6] - else - let dir = s:configured_tree(self.git_dir) - endif - if dir ==# '' - call s:throw('no work tree') - else - return join([dir]+a:000,'/') - endif -endfunction - -function! s:repo_bare() dict abort - if self.dir() =~# '/\.git$' - return 0 - else - return s:configured_tree(self.git_dir) ==# '' - endif -endfunction - -function! s:repo_translate(spec) dict abort - if a:spec ==# '.' || a:spec ==# '/.' - return self.bare() ? self.dir() : self.tree() - elseif a:spec =~# '^/\=\.git$' && self.bare() - return self.dir() - elseif a:spec =~# '^/\=\.git/' - return self.dir(s:sub(a:spec, '^/=\.git/', '')) - elseif a:spec =~# '^/' - return self.tree().a:spec - elseif a:spec =~# '^:[0-3]:' - return 'fugitive://'.self.dir().'//'.a:spec[1].'/'.a:spec[3:-1] - elseif a:spec ==# ':' - if $GIT_INDEX_FILE =~# '/[^/]*index[^/]*\.lock$' && fnamemodify($GIT_INDEX_FILE,':p')[0:strlen(self.dir())] ==# self.dir('') && filereadable($GIT_INDEX_FILE) - return fnamemodify($GIT_INDEX_FILE,':p') - else - return self.dir('index') - endif - elseif a:spec =~# '^:/' - let ref = self.rev_parse(matchstr(a:spec,'.[^:]*')) - return 'fugitive://'.self.dir().'//'.ref - elseif a:spec =~# '^:' - return 'fugitive://'.self.dir().'//0/'.a:spec[1:-1] - elseif a:spec =~# 'HEAD\|^refs/' && a:spec !~ ':' && filereadable(self.dir(a:spec)) - return self.dir(a:spec) - elseif filereadable(self.dir('refs/'.a:spec)) - return self.dir('refs/'.a:spec) - elseif filereadable(self.dir('refs/tags/'.a:spec)) - return self.dir('refs/tags/'.a:spec) - elseif filereadable(self.dir('refs/heads/'.a:spec)) - return self.dir('refs/heads/'.a:spec) - elseif filereadable(self.dir('refs/remotes/'.a:spec)) - return self.dir('refs/remotes/'.a:spec) - elseif filereadable(self.dir('refs/remotes/'.a:spec.'/HEAD')) - return self.dir('refs/remotes/'.a:spec,'/HEAD') - else - try - let ref = self.rev_parse(matchstr(a:spec,'[^:]*')) - let path = s:sub(matchstr(a:spec,':.*'),'^:','/') - return 'fugitive://'.self.dir().'//'.ref.path - catch /^fugitive:/ - return self.tree(a:spec) - endtry - endif -endfunction - -function! s:repo_head(...) dict abort - let head = s:repo().head_ref() - - if head =~# '^ref: ' - let branch = s:sub(head,'^ref: %(refs/%(heads/|remotes/|tags/)=)=','') - elseif head =~# '^\x\{40\}$' - " truncate hash to a:1 characters if we're in detached head mode - let len = a:0 ? a:1 : 0 - let branch = len ? head[0:len-1] : '' - else - return '' - endif - - return branch -endfunction - -call s:add_methods('repo',['dir','tree','bare','translate','head']) - -function! s:repo_git_command(...) dict abort - let git = g:fugitive_git_executable . ' --git-dir='.s:shellesc(self.git_dir) - return git.join(map(copy(a:000),'" ".s:shellesc(v:val)'),'') -endfunction - -function! s:repo_git_chomp(...) dict abort - return s:sub(system(call(self.git_command,a:000,self)),'\n$','') -endfunction - -function! s:repo_git_chomp_in_tree(...) dict abort - let cd = exists('*haslocaldir') && haslocaldir() ? 'lcd ' : 'cd ' - let dir = getcwd() - try - execute cd.'`=s:repo().tree()`' - return call(s:repo().git_chomp, a:000, s:repo()) - finally - execute cd.'`=dir`' - endtry -endfunction - -function! s:repo_rev_parse(rev) dict abort - let hash = self.git_chomp('rev-parse','--verify',a:rev) - if hash =~ '\<\x\{40\}$' - return matchstr(hash,'\<\x\{40\}$') - endif - call s:throw('rev-parse '.a:rev.': '.hash) -endfunction - -call s:add_methods('repo',['git_command','git_chomp','git_chomp_in_tree','rev_parse']) - -function! s:repo_dirglob(base) dict abort - let base = s:sub(a:base,'^/','') - let matches = split(glob(self.tree(s:gsub(base,'/','*&').'*/')),"\n") - call map(matches,'v:val[ strlen(self.tree())+(a:base !~ "^/") : -1 ]') - return matches -endfunction - -function! s:repo_superglob(base) dict abort - if a:base =~# '^/' || a:base !~# ':' - let results = [] - if a:base !~# '^/' - let heads = ["HEAD","ORIG_HEAD","FETCH_HEAD","MERGE_HEAD"] - let heads += sort(split(s:repo().git_chomp("rev-parse","--symbolic","--branches","--tags","--remotes"),"\n")) - call filter(heads,'v:val[ 0 : strlen(a:base)-1 ] ==# a:base') - let results += heads - endif - if !self.bare() - let base = s:sub(a:base,'^/','') - let matches = split(glob(self.tree(s:gsub(base,'/','*&').'*')),"\n") - call map(matches,'s:shellslash(v:val)') - call map(matches,'v:val !~ "/$" && isdirectory(v:val) ? v:val."/" : v:val') - call map(matches,'v:val[ strlen(self.tree())+(a:base !~ "^/") : -1 ]') - let results += matches - endif - return results - - elseif a:base =~# '^:' - let entries = split(self.git_chomp('ls-files','--stage'),"\n") - call map(entries,'s:sub(v:val,".*(\\d)\\t(.*)",":\\1:\\2")') - if a:base !~# '^:[0-3]\%(:\|$\)' - call filter(entries,'v:val[1] == "0"') - call map(entries,'v:val[2:-1]') - endif - call filter(entries,'v:val[ 0 : strlen(a:base)-1 ] ==# a:base') - return entries - - else - let tree = matchstr(a:base,'.*[:/]') - let entries = split(self.git_chomp('ls-tree',tree),"\n") - call map(entries,'s:sub(v:val,"^04.*\\zs$","/")') - call map(entries,'tree.s:sub(v:val,".*\t","")') - return filter(entries,'v:val[ 0 : strlen(a:base)-1 ] ==# a:base') - endif -endfunction - -call s:add_methods('repo',['dirglob','superglob']) - -function! s:repo_config(conf) dict abort - return matchstr(system(s:repo().git_command('config').' '.a:conf),"[^\r\n]*") -endfun - -function! s:repo_user() dict abort - let username = s:repo().config('user.name') - let useremail = s:repo().config('user.email') - return username.' <'.useremail.'>' -endfun - -function! s:repo_aliases() dict abort - if !has_key(self,'_aliases') - let self._aliases = {} - for line in split(self.git_chomp('config','--get-regexp','^alias[.]'),"\n") - let self._aliases[matchstr(line,'\.\zs\S\+')] = matchstr(line,' \zs.*') - endfor - endif - return self._aliases -endfunction - -call s:add_methods('repo',['config', 'user', 'aliases']) - -function! s:repo_keywordprg() dict abort - let args = ' --git-dir='.escape(self.dir(),"\\\"' ") - if has('gui_running') && !has('win32') - return g:fugitive_git_executable . ' --no-pager' . args . ' log -1' - else - return g:fugitive_git_executable . args . ' show' - endif -endfunction - -call s:add_methods('repo',['keywordprg']) - -" Section: Buffer - -let s:buffer_prototype = {} - -function! s:buffer(...) abort - let buffer = {'#': bufnr(a:0 ? a:1 : '%')} - call extend(extend(buffer,s:buffer_prototype,'keep'),s:abstract_prototype,'keep') - if buffer.getvar('git_dir') !=# '' - return buffer - endif - call s:throw('not a git repository: '.expand('%:p')) -endfunction - -function! fugitive#buffer(...) abort - return s:buffer(a:0 ? a:1 : '%') -endfunction - -function! s:buffer_getvar(var) dict abort - return getbufvar(self['#'],a:var) -endfunction - -function! s:buffer_setvar(var,value) dict abort - return setbufvar(self['#'],a:var,a:value) -endfunction - -function! s:buffer_getline(lnum) dict abort - return get(getbufline(self['#'], a:lnum), 0, '') -endfunction - -function! s:buffer_repo() dict abort - return s:repo(self.getvar('git_dir')) -endfunction - -function! s:buffer_type(...) dict abort - if self.getvar('fugitive_type') != '' - let type = self.getvar('fugitive_type') - elseif fnamemodify(self.spec(),':p') =~# '.\git/refs/\|\.git/\w*HEAD$' - let type = 'head' - elseif self.getline(1) =~ '^tree \x\{40\}$' && self.getline(2) == '' - let type = 'tree' - elseif self.getline(1) =~ '^\d\{6\} \w\{4\} \x\{40\}\>\t' - let type = 'tree' - elseif self.getline(1) =~ '^\d\{6\} \x\{40\}\> \d\t' - let type = 'index' - elseif isdirectory(self.spec()) - let type = 'directory' - elseif self.spec() == '' - let type = 'null' - else - let type = 'file' - endif - if a:0 - return !empty(filter(copy(a:000),'v:val ==# type')) - else - return type - endif -endfunction - -if has('win32') - - function! s:buffer_spec() dict abort - let bufname = bufname(self['#']) - let retval = '' - for i in split(bufname,'[^:]\zs\\') - let retval = fnamemodify((retval==''?'':retval.'\').i,':.') - endfor - return s:shellslash(fnamemodify(retval,':p')) - endfunction - -else - - function! s:buffer_spec() dict abort - let bufname = bufname(self['#']) - return s:shellslash(bufname == '' ? '' : fnamemodify(bufname,':p')) - endfunction - -endif - -function! s:buffer_name() dict abort - return self.spec() -endfunction - -function! s:buffer_commit() dict abort - return matchstr(self.spec(),'^fugitive://.\{-\}//\zs\w*') -endfunction - -function! s:buffer_path(...) dict abort - let rev = matchstr(self.spec(),'^fugitive://.\{-\}//\zs.*') - if rev != '' - let rev = s:sub(rev,'\w*','') - elseif self.spec()[0 : len(self.repo().dir())] ==# self.repo().dir() . '/' - let rev = '/.git'.self.spec()[strlen(self.repo().dir()) : -1] - elseif !self.repo().bare() && self.spec()[0 : len(self.repo().tree())] ==# self.repo().tree() . '/' - let rev = self.spec()[strlen(self.repo().tree()) : -1] - endif - return s:sub(s:sub(rev,'.\zs/$',''),'^/',a:0 ? a:1 : '') -endfunction - -function! s:buffer_rev() dict abort - let rev = matchstr(self.spec(),'^fugitive://.\{-\}//\zs.*') - if rev =~ '^\x/' - return ':'.rev[0].':'.rev[2:-1] - elseif rev =~ '.' - return s:sub(rev,'/',':') - elseif self.spec() =~ '\.git/index$' - return ':' - elseif self.spec() =~ '\.git/refs/\|\.git/.*HEAD$' - return self.spec()[strlen(self.repo().dir())+1 : -1] - else - return self.path('/') - endif -endfunction - -function! s:buffer_sha1() dict abort - if self.spec() =~ '^fugitive://' || self.spec() =~ '\.git/refs/\|\.git/.*HEAD$' - return self.repo().rev_parse(self.rev()) - else - return '' - endif -endfunction - -function! s:buffer_expand(rev) dict abort - if a:rev =~# '^:[0-3]$' - let file = a:rev.self.path(':') - elseif a:rev =~# '^[-:]/$' - let file = '/'.self.path() - elseif a:rev =~# '^-' - let file = 'HEAD^{}'.a:rev[1:-1].self.path(':') - elseif a:rev =~# '^@{' - let file = 'HEAD'.a:rev.self.path(':') - elseif a:rev =~# '^[~^]' - let commit = s:sub(self.commit(),'^\d=$','HEAD') - let file = commit.a:rev.self.path(':') - else - let file = a:rev - endif - return s:sub(s:sub(file,'\%$',self.path()),'\.\@<=/$','') -endfunction - -function! s:buffer_containing_commit() dict abort - if self.commit() =~# '^\d$' - return ':' - elseif self.commit() =~# '.' - return self.commit() - else - return 'HEAD' - endif -endfunction - -function! s:buffer_up(...) dict abort - let rev = self.rev() - let c = a:0 ? a:1 : 1 - while c - if rev =~# '^[/:]$' - let rev = 'HEAD' - elseif rev =~# '^:' - let rev = ':' - elseif rev =~# '^refs/[^^~:]*$\|^[^^~:]*HEAD$' - let rev .= '^{}' - elseif rev =~# '^/\|:.*/' - let rev = s:sub(rev, '.*\zs/.*', '') - elseif rev =~# ':.' - let rev = matchstr(rev, '^[^:]*:') - elseif rev =~# ':$' - let rev = rev[0:-2] - else - return rev.'~'.c - endif - let c -= 1 - endwhile - return rev -endfunction - -call s:add_methods('buffer',['getvar','setvar','getline','repo','type','spec','name','commit','path','rev','sha1','expand','containing_commit','up']) - -" Section: Git - -call s:command("-bang -nargs=? -complete=customlist,s:GitComplete Git :execute s:Git(0,)") - -function! s:ExecuteInTree(cmd) abort - let cd = exists('*haslocaldir') && haslocaldir() ? 'lcd ' : 'cd ' - let dir = getcwd() - try - execute cd.'`=s:repo().tree()`' - execute a:cmd - finally - execute cd.'`=dir`' - endtry -endfunction - -function! s:Git(bang, args) abort - if a:bang - return s:Edit('edit', 1, a:args) - endif - let git = g:fugitive_git_executable - if has('gui_running') && !has('win32') - let git .= ' --no-pager' - endif - let args = matchstr(a:args,'\v\C.{-}%($|\\@ `=s:repo().bare() ? s:repo().dir() : s:repo().tree()`") -call s:command("-bar -bang -nargs=? -complete=customlist,s:DirComplete Glcd :lcd `=s:repo().bare() ? s:repo().dir() : s:repo().tree()`") - -" Section: Gstatus - -call s:command("-bar Gstatus :execute s:Status()") -augroup fugitive_status - autocmd! - if !has('win32') - autocmd FocusGained,ShellCmdPost * call fugitive#reload_status() - endif -augroup END - -function! s:Status() abort - try - Gpedit : - wincmd P - setlocal foldmethod=syntax foldlevel=1 - nnoremap q :bdelete - catch /^fugitive:/ - return 'echoerr v:errmsg' - endtry - return '' -endfunction - -function! fugitive#reload_status() abort - if exists('s:reloading_status') - return - endif - try - let s:reloading_status = 1 - let mytab = tabpagenr() - for tab in [mytab] + range(1,tabpagenr('$')) - for winnr in range(1,tabpagewinnr(tab,'$')) - if getbufvar(tabpagebuflist(tab)[winnr-1],'fugitive_type') ==# 'index' - execute 'tabnext '.tab - if winnr != winnr() - execute winnr.'wincmd w' - let restorewinnr = 1 - endif - try - if !&modified - call s:BufReadIndex() - endif - finally - if exists('restorewinnr') - wincmd p - endif - execute 'tabnext '.mytab - endtry - endif - endfor - endfor - finally - unlet! s:reloading_status - endtry -endfunction - -function! s:stage_info(lnum) abort - let filename = matchstr(getline(a:lnum),'^#\t\zs.\{-\}\ze\%( ([^()[:digit:]]\+)\)\=$') - let lnum = a:lnum - if has('multi_byte_encoding') - let colon = '\%(:\|\%uff1a\)' - else - let colon = ':' - endif - while lnum && getline(lnum) !~# colon.'$' - let lnum -= 1 - endwhile - if !lnum - return ['', ''] - elseif (getline(lnum+1) =~# '^# .*\$' - return 'CtrlP '.fnameescape(s:repo().tree()) - else - for i in range(a:count) - call search('^#\t.*','Wbe') - endfor - return '.' - endif -endfunction - -function! s:StageReloadSeek(target,lnum1,lnum2) abort - let jump = a:target - let f = matchstr(getline(a:lnum1-1),'^#\t\%([[:alpha:] ]\+: *\|.*\%uff1a *\)\=\zs.*') - if f !=# '' | let jump = f | endif - let f = matchstr(getline(a:lnum2+1),'^#\t\%([[:alpha:] ]\+: *\|.*\%uff1a *\)\=\zs.*') - if f !=# '' | let jump = f | endif - silent! edit! - 1 - redraw - call search('^#\t\%([[:alpha:] ]\+: *\|.*\%uff1a *\)\=\V'.jump.'\%( ([^()[:digit:]]\+)\)\=\$','W') -endfunction - -function! s:StageUndo() abort - let [filename, section] = s:stage_info(line('.')) - if empty(filename) - return '' - endif - let repo = s:repo() - let hash = repo.git_chomp('hash-object', '-w', filename) - if !empty(hash) - if section ==# 'untracked' - call delete(s:repo().tree(filename)) - elseif section ==# 'unstaged' - call repo.git_chomp_in_tree('checkout', '--', filename) - else - call repo.git_chomp_in_tree('checkout', 'HEAD', '--', filename) - endif - call s:StageReloadSeek(filename, line('.'), line('.')) - let @" = hash - return 'checktime|redraw|echomsg ' . - \ string('To restore, :Git cat-file blob '.hash[0:6].' > '.filename) - endif -endfunction - -function! s:StageDiff(diff) abort - let [filename, section] = s:stage_info(line('.')) - if filename ==# '' && section ==# 'staged' - return 'Git! diff --no-ext-diff --cached' - elseif filename ==# '' - return 'Git! diff --no-ext-diff' - elseif filename =~# ' -> ' - let [old, new] = split(filename,' -> ') - execute 'Gedit '.s:fnameescape(':0:'.new) - return a:diff.' HEAD:'.s:fnameescape(old) - elseif section ==# 'staged' - execute 'Gedit '.s:fnameescape(':0:'.filename) - return a:diff.' -' - else - execute 'Gedit '.s:fnameescape('/'.filename) - return a:diff - endif -endfunction - -function! s:StageDiffEdit() abort - let [filename, section] = s:stage_info(line('.')) - let arg = (filename ==# '' ? '.' : filename) - if section ==# 'staged' - return 'Git! diff --no-ext-diff --cached '.s:shellesc(arg) - elseif section ==# 'untracked' - let repo = s:repo() - call repo.git_chomp_in_tree('add','--intent-to-add',arg) - if arg ==# '.' - silent! edit! - 1 - if !search('^# .*:\n#.*\n# .*"git checkout \|^# Changes not staged for commit:$','W') - call search('^# .*:$','W') - endif - else - call s:StageReloadSeek(arg,line('.'),line('.')) - endif - return '' - else - return 'Git! diff --no-ext-diff '.s:shellesc(arg) - endif -endfunction - -function! s:StageToggle(lnum1,lnum2) abort - if a:lnum1 == 1 && a:lnum2 == 1 - return 'Gedit /.git|call search("^index$", "wc")' - endif - try - let output = '' - for lnum in range(a:lnum1,a:lnum2) - let [filename, section] = s:stage_info(lnum) - let repo = s:repo() - if getline('.') =~# '^# .*:$' - if section ==# 'staged' - call repo.git_chomp_in_tree('reset','-q') - silent! edit! - 1 - if !search('^# .*:\n# .*"git add .*\n#\n\|^# Untracked files:$','W') - call search('^# .*:$','W') - endif - return '' - elseif section ==# 'unstaged' - call repo.git_chomp_in_tree('add','-u') - silent! edit! - 1 - if !search('^# .*:\n# .*"git add .*\n#\n\|^# Untracked files:$','W') - call search('^# .*:$','W') - endif - return '' - else - call repo.git_chomp_in_tree('add','.') - silent! edit! - 1 - call search('^# .*:$','W') - return '' - endif - endif - if filename ==# '' - continue - endif - execute lnum - if filename =~ ' -> ' - let cmd = ['mv','--'] + reverse(split(filename,' -> ')) - let filename = cmd[-1] - elseif section ==# 'staged' - let cmd = ['reset','-q','--',filename] - elseif getline(lnum) =~# '^#\tdeleted:' - let cmd = ['rm','--',filename] - elseif getline(lnum) =~# '^#\tmodified:' - let cmd = ['add','--',filename] - else - let cmd = ['add','-A','--',filename] - endif - if !exists('first_filename') - let first_filename = filename - endif - let output .= call(repo.git_chomp_in_tree,cmd,s:repo())."\n" - endfor - if exists('first_filename') - call s:StageReloadSeek(first_filename,a:lnum1,a:lnum2) - endif - echo s:sub(s:gsub(output,'\n+','\n'),'\n$','') - catch /^fugitive:/ - return 'echoerr v:errmsg' - endtry - return 'checktime' -endfunction - -function! s:StagePatch(lnum1,lnum2) abort - let add = [] - let reset = [] - - for lnum in range(a:lnum1,a:lnum2) - let [filename, section] = s:stage_info(lnum) - if getline('.') =~# '^# .*:$' && section ==# 'staged' - return 'Git reset --patch' - elseif getline('.') =~# '^# .*:$' && section ==# 'unstaged' - return 'Git add --patch' - elseif getline('.') =~# '^# .*:$' && section ==# 'untracked' - return 'Git add -N .' - elseif filename ==# '' - continue - endif - if !exists('first_filename') - let first_filename = filename - endif - execute lnum - if filename =~ ' -> ' - let reset += [split(filename,' -> ')[1]] - elseif section ==# 'staged' - let reset += [filename] - elseif getline(lnum) !~# '^#\tdeleted:' - let add += [filename] - endif - endfor - try - if !empty(add) - execute "Git add --patch -- ".join(map(add,'s:shellesc(v:val)')) - endif - if !empty(reset) - execute "Git reset --patch -- ".join(map(add,'s:shellesc(v:val)')) - endif - if exists('first_filename') - silent! edit! - 1 - redraw - call search('^#\t\%([[:alpha:] ]\+: *\)\=\V'.first_filename.'\%( ([^()[:digit:]]\+)\)\=\$','W') - endif - catch /^fugitive:/ - return 'echoerr v:errmsg' - endtry - return 'checktime' -endfunction - -" Section: Gcommit - -call s:command("-nargs=? -complete=customlist,s:CommitComplete Gcommit :execute s:Commit()") - -function! s:Commit(args, ...) abort - let repo = a:0 ? a:1 : s:repo() - let cd = exists('*haslocaldir') && haslocaldir() ? 'lcd ' : 'cd ' - let dir = getcwd() - let msgfile = repo.dir('COMMIT_EDITMSG') - let outfile = tempname() - let errorfile = tempname() - try - try - execute cd.s:fnameescape(repo.tree()) - if s:winshell() - let command = '' - let old_editor = $GIT_EDITOR - let $GIT_EDITOR = 'false' - else - let command = 'env GIT_EDITOR=false ' - endif - let command .= repo.git_command('commit').' '.a:args - if &shell =~# 'csh' - noautocmd silent execute '!('.command.' > '.outfile.') >& '.errorfile - elseif a:args =~# '\%(^\| \)-\%(-interactive\|p\|-patch\)\>' - noautocmd execute '!'.command.' 2> '.errorfile - else - noautocmd silent execute '!'.command.' > '.outfile.' 2> '.errorfile - endif - finally - execute cd.'`=dir`' - endtry - if !has('gui_running') - redraw! - endif - if !v:shell_error - if filereadable(outfile) - for line in readfile(outfile) - echo line - endfor - endif - return '' - else - let errors = readfile(errorfile) - let error = get(errors,-2,get(errors,-1,'!')) - if error =~# 'false''\=\.$' - let args = a:args - let args = s:gsub(args,'%(%(^| )-- )@' - let args = '--cleanup=strip '.args - endif - if bufname('%') == '' && line('$') == 1 && getline(1) == '' && !&mod - execute 'keepalt edit '.s:fnameescape(msgfile) - elseif a:args =~# '\%(^\| \)-\%(-verbose\|\w*v\)\>' - execute 'keepalt tabedit '.s:fnameescape(msgfile) - elseif s:buffer().type() ==# 'index' - execute 'keepalt edit '.s:fnameescape(msgfile) - execute (search('^#','n')+1).'wincmd+' - setlocal nopreviewwindow - else - execute 'keepalt split '.s:fnameescape(msgfile) - endif - let b:fugitive_commit_arguments = args - setlocal bufhidden=wipe filetype=gitcommit - return '1' - elseif error ==# '!' - return s:Status() - else - call s:throw(error) - endif - endif - catch /^fugitive:/ - return 'echoerr v:errmsg' - finally - if exists('old_editor') - let $GIT_EDITOR = old_editor - endif - call delete(outfile) - call delete(errorfile) - call fugitive#reload_status() - endtry -endfunction - -function! s:CommitComplete(A,L,P) abort - if a:A =~ '^-' || type(a:A) == type(0) " a:A is 0 on :Gcommit - - let args = ['-C', '-F', '-a', '-c', '-e', '-i', '-m', '-n', '-o', '-q', '-s', '-t', '-u', '-v', '--all', '--allow-empty', '--amend', '--author=', '--cleanup=', '--dry-run', '--edit', '--file=', '--include', '--interactive', '--message=', '--no-verify', '--only', '--quiet', '--reedit-message=', '--reuse-message=', '--signoff', '--template=', '--untracked-files', '--verbose'] - return filter(args,'v:val[0 : strlen(a:A)-1] ==# a:A') - else - return s:repo().superglob(a:A) - endif -endfunction - -function! s:FinishCommit() abort - let args = getbufvar(+expand(''),'fugitive_commit_arguments') - if !empty(args) - call setbufvar(+expand(''),'fugitive_commit_arguments','') - return s:Commit(args, s:repo(getbufvar(+expand(''),'git_dir'))) - endif - return '' -endfunction - -" Section: Gmerge, Gpull - -call s:command("-nargs=? -bang -complete=custom,s:RevisionComplete Gmerge " . - \ "execute s:Merge('merge', 0, )") -call s:command("-nargs=? -bang -complete=custom,s:RemoteComplete Gpull " . - \ "execute s:Merge('pull --progress', 0, )") - -function! s:RevisionComplete(A, L, P) abort - return s:repo().git_chomp('rev-parse', '--symbolic', '--branches', '--tags', '--remotes') - \ . "\nHEAD\nFETCH_HEAD\nORIG_HEAD" -endfunction - -function! s:RemoteComplete(A, L, P) abort - let remote = matchstr(a:L, ' \zs\S\+\ze ') - if !empty(remote) - let matches = split(s:repo().git_chomp('ls-remote', remote), "\n") - call filter(matches, 'v:val =~# "\t" && v:val !~# "{"') - call map(matches, 's:sub(v:val, "^.*\t%(refs/%(heads/|tags/)=)=", "")') - else - let matches = split(s:repo().git_chomp('remote'), "\n") - endif - return join(matches, "\n") -endfunction - -function! fugitive#cwindow() abort - if &buftype == 'quickfix' - cwindow - else - botright cwindow - if &buftype == 'quickfix' - wincmd p - endif - endif -endfunction - -let s:common_efm = '' - \ . '%+Egit:%.%#,' - \ . '%+Eusage:%.%#,' - \ . '%+Eerror:%.%#,' - \ . '%+Efatal:%.%#,' - \ . '%-G%.%#%\e[K%.%#,' - \ . '%-G%.%#%\r%.%\+' - -function! s:Merge(cmd, bang, args) abort - let cd = exists('*haslocaldir') && haslocaldir() ? 'lcd' : 'cd' - let cwd = getcwd() - let [mp, efm] = [&l:mp, &l:efm] - let had_merge_msg = filereadable(s:repo().dir('MERGE_MSG')) - try - let &l:errorformat = '' - \ . '%-Gerror:%.%#false''.,' - \ . '%-G%.%# ''git commit'' %.%#,' - \ . '%+Emerge:%.%#,' - \ . s:common_efm . ',' - \ . '%+ECannot %.%#: You have unstaged changes.,' - \ . '%+ECannot %.%#: Your index contains uncommitted changes.,' - \ . '%+EThere is no tracking information for the current branch.,' - \ . '%+EYou are not currently on a branch. Please specify which,' - \ . 'CONFLICT (%m): %f deleted in %.%#,' - \ . 'CONFLICT (%m): Merge conflict in %f,' - \ . 'CONFLICT (%m): Rename \"%f\"->%.%#,' - \ . 'CONFLICT (%m): Rename %.%#->%f %.%#,' - \ . 'CONFLICT (%m): There is a directory with name %f in %.%#,' - \ . '%+ECONFLICT %.%#,' - \ . '%+EKONFLIKT %.%#,' - \ . '%+ECONFLIT %.%#,' - \ . "%+EXUNG \u0110\u1ed8T %.%#," - \ . "%+E\u51b2\u7a81 %.%#," - \ . 'U%\t%f' - if a:cmd =~# '^merge' && empty(a:args) && - \ (had_merge_msg || isdirectory(s:repo().dir('rebase-apply')) || - \ !empty(s:repo().git_chomp('diff-files', '--diff-filter=U'))) - let &l:makeprg = g:fugitive_git_executable.' diff-files --name-status --diff-filter=U' - else - let &l:makeprg = s:sub(g:fugitive_git_executable.' -c core.editor=false '. - \ a:cmd . (a:args =~# ' \%(--no-edit\|--abort\|-m\)\>' ? '' : ' --edit') . ' ' . a:args, - \ ' *$', '') - endif - if !empty($GIT_EDITOR) - let old_editor = $GIT_EDITOR - let $GIT_EDITOR = 'false' - endif - execute cd fnameescape(s:repo().tree()) - silent noautocmd make! - catch /^Vim\%((\a\+)\)\=:E211/ - let err = v:exception - finally - redraw! - let [&l:mp, &l:efm] = [mp, efm] - if exists('old_editor') - let $GIT_EDITOR = old_editor - endif - execute cd fnameescape(cwd) - endtry - call fugitive#reload_status() - if empty(filter(getqflist(),'v:val.valid')) - if !had_merge_msg && filereadable(s:repo().dir('MERGE_MSG')) - cclose - return 'Gcommit --no-status -n -t '.s:shellesc(s:repo().dir('MERGE_MSG')) - endif - endif - let qflist = getqflist() - let found = 0 - for e in qflist - if !empty(e.bufnr) - let found = 1 - let e.pattern = '^<<<<<<<' - endif - endfor - call fugitive#cwindow() - if found - call setqflist(qflist, 'r') - if !a:bang - return 'cfirst' - endif - endif - return exists('err') ? 'echoerr '.string(err) : '' -endfunction - -" Section: Ggrep, Glog - -if !exists('g:fugitive_summary_format') - let g:fugitive_summary_format = '%s' -endif - -call s:command("-bang -nargs=? -complete=customlist,s:EditComplete Ggrep :execute s:Grep('grep',0,)") -call s:command("-bang -nargs=? -complete=customlist,s:EditComplete Glgrep :execute s:Grep('lgrep',0,)") -call s:command("-bar -bang -nargs=* -range=0 -complete=customlist,s:EditComplete Glog :call s:Log('grep',,,)") -call s:command("-bar -bang -nargs=* -range=0 -complete=customlist,s:EditComplete Gllog :call s:Log('lgrep',,,)") - -function! s:Grep(cmd,bang,arg) abort - let grepprg = &grepprg - let grepformat = &grepformat - let cd = exists('*haslocaldir') && haslocaldir() ? 'lcd ' : 'cd ' - let dir = getcwd() - try - execute cd.'`=s:repo().tree()`' - let &grepprg = s:repo().git_command('--no-pager', 'grep', '-n') - let &grepformat = '%f:%l:%m' - exe a:cmd.'! '.escape(matchstr(a:arg,'\v\C.{-}%($|[''" ]\@=\|)@='),'|') - let list = a:cmd =~# '^l' ? getloclist(0) : getqflist() - for entry in list - if bufname(entry.bufnr) =~ ':' - let entry.filename = s:repo().translate(bufname(entry.bufnr)) - unlet! entry.bufnr - let changed = 1 - elseif a:arg =~# '\%(^\| \)--cached\>' - let entry.filename = s:repo().translate(':0:'.bufname(entry.bufnr)) - unlet! entry.bufnr - let changed = 1 - endif - endfor - if a:cmd =~# '^l' && exists('changed') - call setloclist(0, list, 'r') - elseif exists('changed') - call setqflist(list, 'r') - endif - if !a:bang && !empty(list) - return (a:cmd =~# '^l' ? 'l' : 'c').'first'.matchstr(a:arg,'\v\C[''" ]\zs\|.*') - else - return matchstr(a:arg,'\v\C[''" ]\|\zs.*') - endif - finally - let &grepprg = grepprg - let &grepformat = grepformat - execute cd.'`=dir`' - endtry -endfunction - -function! s:Log(cmd, line1, line2, ...) abort - let path = s:buffer().path('/') - if path =~# '^/\.git\%(/\|$\)' || index(a:000,'--') != -1 - let path = '' - endif - let cmd = ['--no-pager', 'log', '--no-color'] - let cmd += ['--pretty=format:fugitive://'.s:repo().dir().'//%H'.path.'::'.g:fugitive_summary_format] - if empty(filter(a:000[0 : index(a:000,'--')],'v:val !~# "^-"')) - if s:buffer().commit() =~# '\x\{40\}' - let cmd += [s:buffer().commit()] - elseif s:buffer().path() =~# '^\.git/refs/\|^\.git/.*HEAD$' - let cmd += [s:buffer().path()[5:-1]] - endif - end - let cmd += map(copy(a:000),'s:sub(v:val,"^\\%(%(:\\w)*)","\\=fnamemodify(s:buffer().path(),submatch(1))")') - if path =~# '/.' - if a:line2 - let cmd += ['-L', a:line1 . ',' . a:line2 . ':' . path[1:-1]] - else - let cmd += ['--', path[1:-1]] - endif - endif - let grepformat = &grepformat - let grepprg = &grepprg - let cd = exists('*haslocaldir') && haslocaldir() ? 'lcd ' : 'cd ' - let dir = getcwd() - try - execute cd.'`=s:repo().tree()`' - let &grepprg = escape(call(s:repo().git_command,cmd,s:repo()),'%#') - let &grepformat = '%Cdiff %.%#,%C--- %.%#,%C+++ %.%#,%Z@@ -%\d%\+\,%\d%\+ +%l\,%\d%\+ @@,%-G-%.%#,%-G+%.%#,%-G %.%#,%A%f::%m,%-G%.%#' - exe a:cmd - finally - let &grepformat = grepformat - let &grepprg = grepprg - execute cd.'`=dir`' - endtry -endfunction - -" Section: Gedit, Gpedit, Gsplit, Gvsplit, Gtabedit, Gread - -function! s:Edit(cmd,bang,...) abort - let buffer = s:buffer() - if a:cmd !~# 'read' - if &previewwindow && getbufvar('','fugitive_type') ==# 'index' - wincmd p - if &diff - let mywinnr = winnr() - for winnr in range(winnr('$'),1,-1) - if winnr != mywinnr && getwinvar(winnr,'&diff') - execute winnr.'wincmd w' - close - if winnr('$') > 1 - wincmd p - endif - endif - endfor - endif - endif - endif - - if a:bang - let arglist = map(copy(a:000), 's:gsub(v:val, ''\\@>>>>>> - if getline(1) !~# '^diff ' - setlocal readonly nomodifiable - endif - if a:cmd =~# 'pedit' - wincmd p - endif - return echo - endif - return '' - endif - - if a:0 && a:1 == '' - return '' - elseif a:0 - let file = buffer.expand(join(a:000, ' ')) - elseif expand('%') ==# '' - let file = ':' - elseif buffer.commit() ==# '' && buffer.path('/') !~# '^/.git\>' - let file = buffer.path(':') - else - let file = buffer.path('/') - endif - try - let file = buffer.repo().translate(file) - catch /^fugitive:/ - return 'echoerr v:errmsg' - endtry - if a:cmd ==# 'read' - return 'silent %delete_|read '.s:fnameescape(file).'|silent 1delete_|diffupdate|'.line('.') - else - return a:cmd.' '.s:fnameescape(file) - endif -endfunction - -function! s:EditComplete(A,L,P) abort - return map(s:repo().superglob(a:A), 'fnameescape(v:val)') -endfunction - -function! s:EditRunComplete(A,L,P) abort - if a:L =~# '^\w\+!' - return s:GitComplete(a:A,a:L,a:P) - else - return s:repo().superglob(a:A) - endif -endfunction - -call s:command("-bar -bang -nargs=* -complete=customlist,s:EditComplete Ge :execute s:Edit('edit',0,)") -call s:command("-bar -bang -nargs=* -complete=customlist,s:EditComplete Gedit :execute s:Edit('edit',0,)") -call s:command("-bar -bang -nargs=* -complete=customlist,s:EditRunComplete Gpedit :execute s:Edit('pedit',0,)") -call s:command("-bar -bang -nargs=* -complete=customlist,s:EditRunComplete Gsplit :execute s:Edit('split',0,)") -call s:command("-bar -bang -nargs=* -complete=customlist,s:EditRunComplete Gvsplit :execute s:Edit('vsplit',0,)") -call s:command("-bar -bang -nargs=* -complete=customlist,s:EditRunComplete Gtabedit :execute s:Edit('tabedit',0,)") -call s:command("-bar -bang -nargs=* -count -complete=customlist,s:EditRunComplete Gread :execute s:Edit((! && ? '' : ).'read',0,)") - -" Section: Gwrite, Gwq - -call s:command("-bar -bang -nargs=* -complete=customlist,s:EditComplete Gwrite :execute s:Write(0,)") -call s:command("-bar -bang -nargs=* -complete=customlist,s:EditComplete Gw :execute s:Write(0,)") -call s:command("-bar -bang -nargs=* -complete=customlist,s:EditComplete Gwq :execute s:Wq(0,)") - -function! s:Write(force,...) abort - if exists('b:fugitive_commit_arguments') - return 'write|bdelete' - elseif expand('%:t') == 'COMMIT_EDITMSG' && $GIT_INDEX_FILE != '' - return 'wq' - elseif s:buffer().type() == 'index' - return 'Gcommit' - elseif s:buffer().path() ==# '' && getline(4) =~# '^+++ ' - let filename = getline(4)[6:-1] - setlocal buftype= - silent write - setlocal buftype=nowrite - if matchstr(getline(2),'index [[:xdigit:]]\+\.\.\zs[[:xdigit:]]\{7\}') ==# s:repo().rev_parse(':0:'.filename)[0:6] - let err = s:repo().git_chomp('apply','--cached','--reverse',s:buffer().spec()) - else - let err = s:repo().git_chomp('apply','--cached',s:buffer().spec()) - endif - if err !=# '' - let v:errmsg = split(err,"\n")[0] - return 'echoerr v:errmsg' - elseif a:force - return 'bdelete' - else - return 'Gedit '.fnameescape(filename) - endif - endif - let mytab = tabpagenr() - let mybufnr = bufnr('') - let path = a:0 ? join(a:000, ' ') : s:buffer().path() - if path =~# '^:\d\>' - return 'write'.(a:force ? '! ' : ' ').s:fnameescape(s:repo().translate(s:buffer().expand(path))) - endif - let always_permitted = (s:buffer().path() ==# path && s:buffer().commit() =~# '^0\=$') - if !always_permitted && !a:force && s:repo().git_chomp_in_tree('diff','--name-status','HEAD','--',path) . s:repo().git_chomp_in_tree('ls-files','--others','--',path) !=# '' - let v:errmsg = 'fugitive: file has uncommitted changes (use ! to override)' - return 'echoerr v:errmsg' - endif - let file = s:repo().translate(path) - let treebufnr = 0 - for nr in range(1,bufnr('$')) - if fnamemodify(bufname(nr),':p') ==# file - let treebufnr = nr - endif - endfor - - if treebufnr > 0 && treebufnr != bufnr('') - let temp = tempname() - silent execute '%write '.temp - for tab in [mytab] + range(1,tabpagenr('$')) - for winnr in range(1,tabpagewinnr(tab,'$')) - if tabpagebuflist(tab)[winnr-1] == treebufnr - execute 'tabnext '.tab - if winnr != winnr() - execute winnr.'wincmd w' - let restorewinnr = 1 - endif - try - let lnum = line('.') - let last = line('$') - silent execute '$read '.temp - silent execute '1,'.last.'delete_' - silent write! - silent execute lnum - let did = 1 - finally - if exists('restorewinnr') - wincmd p - endif - execute 'tabnext '.mytab - endtry - endif - endfor - endfor - if !exists('did') - call writefile(readfile(temp,'b'),file,'b') - endif - else - execute 'write! '.s:fnameescape(s:repo().translate(path)) - endif - - if a:force - let error = s:repo().git_chomp_in_tree('add', '--force', '--', path) - else - let error = s:repo().git_chomp_in_tree('add', '--', path) - endif - if v:shell_error - let v:errmsg = 'fugitive: '.error - return 'echoerr v:errmsg' - endif - if s:buffer().path() ==# path && s:buffer().commit() =~# '^\d$' - set nomodified - endif - - let one = s:repo().translate(':1:'.path) - let two = s:repo().translate(':2:'.path) - let three = s:repo().translate(':3:'.path) - for nr in range(1,bufnr('$')) - let name = fnamemodify(bufname(nr), ':p') - if bufloaded(nr) && !getbufvar(nr,'&modified') && (name ==# one || name ==# two || name ==# three) - execute nr.'bdelete' - endif - endfor - - unlet! restorewinnr - let zero = s:repo().translate(':0:'.path) - for tab in range(1,tabpagenr('$')) - for winnr in range(1,tabpagewinnr(tab,'$')) - let bufnr = tabpagebuflist(tab)[winnr-1] - let bufname = fnamemodify(bufname(bufnr), ':p') - if bufname ==# zero && bufnr != mybufnr - execute 'tabnext '.tab - if winnr != winnr() - execute winnr.'wincmd w' - let restorewinnr = 1 - endif - try - let lnum = line('.') - let last = line('$') - silent execute '$read '.s:fnameescape(file) - silent execute '1,'.last.'delete_' - silent execute lnum - set nomodified - diffupdate - finally - if exists('restorewinnr') - wincmd p - endif - execute 'tabnext '.mytab - endtry - break - endif - endfor - endfor - call fugitive#reload_status() - return 'checktime' -endfunction - -function! s:Wq(force,...) abort - let bang = a:force ? '!' : '' - if exists('b:fugitive_commit_arguments') - return 'wq'.bang - endif - let result = call(s:function('s:Write'),[a:force]+a:000) - if result =~# '^\%(write\|wq\|echoerr\)' - return s:sub(result,'^write','wq') - else - return result.'|quit'.bang - endif -endfunction - -augroup fugitive_commit - autocmd! - autocmd VimLeavePre,BufDelete COMMIT_EDITMSG execute s:sub(s:FinishCommit(), '^echoerr (.*)', 'echohl ErrorMsg|echo \1|echohl NONE') -augroup END - -" Section: Gpush, Gfetch - -call s:command("-nargs=? -bang -complete=custom,s:RemoteComplete Gpush execute s:Dispatch('', 'push '.)") -call s:command("-nargs=? -bang -complete=custom,s:RemoteComplete Gfetch execute s:Dispatch('', 'fetch '.)") - -function! s:Dispatch(bang, args) - let cd = exists('*haslocaldir') && haslocaldir() ? 'lcd' : 'cd' - let cwd = getcwd() - let [mp, efm, cc] = [&l:mp, &l:efm, get(b:, 'current_compiler', '')] - try - let b:current_compiler = 'git' - let &l:errorformat = s:common_efm - let &l:makeprg = g:fugitive_git_executable . ' ' . a:args - execute cd fnameescape(s:repo().tree()) - if exists(':Make') == 2 - noautocmd Make - else - silent noautocmd make! - redraw! - return 'call fugitive#cwindow()' - endif - return '' - finally - let [&l:mp, &l:efm, b:current_compiler] = [mp, efm, cc] - if empty(cc) | unlet! b:current_compiler | endif - execute cd fnameescape(cwd) - endtry -endfunction - -" Section: Gdiff - -call s:command("-bang -bar -nargs=* -complete=customlist,s:EditComplete Gdiff :execute s:Diff('',)") -call s:command("-bar -nargs=* -complete=customlist,s:EditComplete Gvdiff :execute s:Diff('keepalt vert ',)") -call s:command("-bar -nargs=* -complete=customlist,s:EditComplete Gsdiff :execute s:Diff('keepalt ',)") - -augroup fugitive_diff - autocmd! - autocmd BufWinLeave * - \ if s:can_diffoff(+expand('')) && s:diff_window_count() == 2 | - \ call s:diffoff_all(getbufvar(+expand(''), 'git_dir')) | - \ endif - autocmd BufWinEnter * - \ if s:can_diffoff(+expand('')) && s:diff_window_count() == 1 | - \ call s:diffoff() | - \ endif -augroup END - -function! s:can_diffoff(buf) abort - return getwinvar(bufwinnr(a:buf), '&diff') && - \ !empty(getbufvar(a:buf, 'git_dir')) && - \ !empty(getwinvar(bufwinnr(a:buf), 'fugitive_diff_restore')) -endfunction - -function! fugitive#can_diffoff(buf) abort - return s:can_diffoff(a:buf) -endfunction - -function! s:diff_modifier(count) abort - let fdc = matchstr(&diffopt, 'foldcolumn:\zs\d\+') - if &diffopt =~# 'horizontal' && &diffopt !~# 'vertical' - return 'keepalt ' - elseif &diffopt =~# 'vertical' - return 'keepalt vert ' - elseif winwidth(0) <= a:count * ((&tw ? &tw : 80) + (empty(fdc) ? 2 : fdc)) - return 'keepalt ' - else - return 'keepalt vert ' - endif -endfunction - -function! s:diff_window_count() abort - let c = 0 - for nr in range(1,winnr('$')) - let c += getwinvar(nr,'&diff') - endfor - return c -endfunction - -function! s:diff_restore() abort - let restore = 'setlocal nodiff noscrollbind' - \ . ' scrollopt=' . &l:scrollopt - \ . (&l:wrap ? ' wrap' : ' nowrap') - \ . ' foldlevel=999' - \ . ' foldmethod=' . &l:foldmethod - \ . ' foldcolumn=' . &l:foldcolumn - \ . ' foldlevel=' . &l:foldlevel - \ . (&l:foldenable ? ' foldenable' : ' nofoldenable') - if has('cursorbind') - let restore .= (&l:cursorbind ? ' ' : ' no') . 'cursorbind' - endif - return restore -endfunction - -function! s:diffthis() abort - if !&diff - let w:fugitive_diff_restore = s:diff_restore() - diffthis - endif -endfunction - -function! s:diffoff() abort - if exists('w:fugitive_diff_restore') - execute w:fugitive_diff_restore - unlet w:fugitive_diff_restore - else - diffoff - endif -endfunction - -function! s:diffoff_all(dir) abort - for nr in range(1,winnr('$')) - if getwinvar(nr,'&diff') - if nr != winnr() - execute nr.'wincmd w' - let restorewinnr = 1 - endif - if exists('b:git_dir') && b:git_dir ==# a:dir - call s:diffoff() - endif - endif - endfor -endfunction - -function! s:buffer_compare_age(commit) dict abort - let scores = {':0': 1, ':1': 2, ':2': 3, ':': 4, ':3': 5} - let my_score = get(scores,':'.self.commit(),0) - let their_score = get(scores,':'.a:commit,0) - if my_score || their_score - return my_score < their_score ? -1 : my_score != their_score - elseif self.commit() ==# a:commit - return 0 - endif - let base = self.repo().git_chomp('merge-base',self.commit(),a:commit) - if base ==# self.commit() - return -1 - elseif base ==# a:commit - return 1 - endif - let my_time = +self.repo().git_chomp('log','--max-count=1','--pretty=format:%at',self.commit()) - let their_time = +self.repo().git_chomp('log','--max-count=1','--pretty=format:%at',a:commit) - return my_time < their_time ? -1 : my_time != their_time -endfunction - -call s:add_methods('buffer',['compare_age']) - -function! s:Diff(vert,...) abort - let vert = empty(a:vert) ? s:diff_modifier(2) : a:vert - if exists(':DiffGitCached') - return 'DiffGitCached' - elseif (!a:0 || a:1 == ':') && s:buffer().commit() =~# '^[0-1]\=$' && s:repo().git_chomp_in_tree('ls-files', '--unmerged', '--', s:buffer().path()) !=# '' - let vert = empty(a:vert) ? s:diff_modifier(3) : a:vert - let nr = bufnr('') - execute 'leftabove '.vert.'split `=fugitive#buffer().repo().translate(s:buffer().expand('':2''))`' - execute 'nnoremap dp :diffput '.nr.'diffupdate' - call s:diffthis() - wincmd p - execute 'rightbelow '.vert.'split `=fugitive#buffer().repo().translate(s:buffer().expand('':3''))`' - execute 'nnoremap dp :diffput '.nr.'diffupdate' - call s:diffthis() - wincmd p - call s:diffthis() - return '' - elseif a:0 - let arg = join(a:000, ' ') - if arg ==# '' - return '' - elseif arg ==# '/' - let file = s:buffer().path('/') - elseif arg ==# ':' - let file = s:buffer().path(':0:') - elseif arg =~# '^:/.' - try - let file = s:repo().rev_parse(arg).s:buffer().path(':') - catch /^fugitive:/ - return 'echoerr v:errmsg' - endtry - else - let file = s:buffer().expand(arg) - endif - if file !~# ':' && file !~# '^/' && s:repo().git_chomp('cat-file','-t',file) =~# '^\%(tag\|commit\)$' - let file = file.s:buffer().path(':') - endif - else - let file = s:buffer().path(s:buffer().commit() == '' ? ':0:' : '/') - endif - try - let spec = s:repo().translate(file) - let commit = matchstr(spec,'\C[^:/]//\zs\x\+') - let restore = s:diff_restore() - if exists('+cursorbind') - setlocal cursorbind - endif - let w:fugitive_diff_restore = restore - if s:buffer().compare_age(commit) < 0 - execute 'rightbelow '.vert.'diffsplit '.s:fnameescape(spec) - else - execute 'leftabove '.vert.'diffsplit '.s:fnameescape(spec) - endif - let w:fugitive_diff_restore = restore - let winnr = winnr() - if getwinvar('#', '&diff') - wincmd p - call feedkeys("\p", 'n') - endif - return '' - catch /^fugitive:/ - return 'echoerr v:errmsg' - endtry -endfunction - -" Section: Gmove, Gremove - -function! s:Move(force,destination) abort - if a:destination =~# '^/' - let destination = a:destination[1:-1] - else - let destination = s:shellslash(fnamemodify(s:sub(a:destination,'[%#]%(:\w)*','\=expand(submatch(0))'),':p')) - if destination[0:strlen(s:repo().tree())] ==# s:repo().tree('') - let destination = destination[strlen(s:repo().tree('')):-1] - endif - endif - if isdirectory(s:buffer().spec()) - " Work around Vim parser idiosyncrasy - let discarded = s:buffer().setvar('&swapfile',0) - endif - let message = call(s:repo().git_chomp_in_tree,['mv']+(a:force ? ['-f'] : [])+['--', s:buffer().path(), destination], s:repo()) - if v:shell_error - let v:errmsg = 'fugitive: '.message - return 'echoerr v:errmsg' - endif - let destination = s:repo().tree(destination) - if isdirectory(destination) - let destination = fnamemodify(s:sub(destination,'/$','').'/'.expand('%:t'),':.') - endif - call fugitive#reload_status() - if s:buffer().commit() == '' - if isdirectory(destination) - return 'keepalt edit '.s:fnameescape(destination) - else - return 'keepalt saveas! '.s:fnameescape(destination) - endif - else - return 'file '.s:fnameescape(s:repo().translate(':0:'.destination)) - endif -endfunction - -function! s:MoveComplete(A,L,P) abort - if a:A =~ '^/' - return s:repo().superglob(a:A) - else - let matches = split(glob(a:A.'*'),"\n") - call map(matches,'v:val !~ "/$" && isdirectory(v:val) ? v:val."/" : v:val') - return matches - endif -endfunction - -function! s:Remove(force) abort - if s:buffer().commit() ==# '' - let cmd = ['rm'] - elseif s:buffer().commit() ==# '0' - let cmd = ['rm','--cached'] - else - let v:errmsg = 'fugitive: rm not supported here' - return 'echoerr v:errmsg' - endif - if a:force - let cmd += ['--force'] - endif - let message = call(s:repo().git_chomp_in_tree,cmd+['--',s:buffer().path()],s:repo()) - if v:shell_error - let v:errmsg = 'fugitive: '.s:sub(message,'error:.*\zs\n\(.*-f.*',' (add ! to force)') - return 'echoerr '.string(v:errmsg) - else - call fugitive#reload_status() - return 'bdelete'.(a:force ? '!' : '') - endif -endfunction - -augroup fugitive_remove - autocmd! - autocmd User Fugitive if s:buffer().commit() =~# '^0\=$' | - \ exe "command! -buffer -bar -bang -nargs=1 -complete=customlist,s:MoveComplete Gmove :execute s:Move(0,)" | - \ exe "command! -buffer -bar -bang Gremove :execute s:Remove(0)" | - \ endif -augroup END - -" Section: Gblame - -augroup fugitive_blame - autocmd! - autocmd BufReadPost *.fugitiveblame setfiletype fugitiveblame - autocmd FileType fugitiveblame setlocal nomodeline | if exists('b:git_dir') | let &l:keywordprg = s:repo().keywordprg() | endif - autocmd Syntax fugitiveblame call s:BlameSyntax() - autocmd User Fugitive if s:buffer().type('file', 'blob') | exe "command! -buffer -bar -bang -range=0 -nargs=* Gblame :execute s:Blame(0,,,,[])" | endif - autocmd ColorScheme,GUIEnter * call s:RehighlightBlame() -augroup END - -function! s:linechars(pattern) abort - let chars = strlen(s:gsub(matchstr(getline('.'), a:pattern), '.', '.')) - if exists('*synconcealed') && &conceallevel > 1 - for col in range(1, chars) - let chars -= synconcealed(line('.'), col)[0] - endfor - endif - return chars -endfunction - -function! s:Blame(bang,line1,line2,count,args) abort - if exists('b:fugitive_blamed_bufnr') - return 'bdelete' - endif - try - if s:buffer().path() == '' - call s:throw('file or blob required') - endif - if filter(copy(a:args),'v:val !~# "^\\%(--root\|--show-name\\|-\\=\\%([ltfnsew]\\|[MC]\\d*\\)\\+\\)$"') != [] - call s:throw('unsupported option') - endif - call map(a:args,'s:sub(v:val,"^\\ze[^-]","-")') - let cmd = ['--no-pager', 'blame', '--show-number'] + a:args - if s:buffer().commit() =~# '\D\|..' - let cmd += [s:buffer().commit()] - else - let cmd += ['--contents', '-'] - endif - let cmd += ['--', s:buffer().path()] - let basecmd = escape(call(s:repo().git_command,cmd,s:repo()),'!') - try - let cd = exists('*haslocaldir') && haslocaldir() ? 'lcd ' : 'cd ' - if !s:repo().bare() - let dir = getcwd() - execute cd.'`=s:repo().tree()`' - endif - if a:count - execute 'write !'.substitute(basecmd,' blame ',' blame -L '.a:line1.','.a:line2.' ','g') - else - let error = resolve(tempname()) - let temp = error.'.fugitiveblame' - if &shell =~# 'csh' - silent! execute '%write !('.basecmd.' > '.temp.') >& '.error - else - silent! execute '%write !'.basecmd.' > '.temp.' 2> '.error - endif - if exists('l:dir') - execute cd.'`=dir`' - unlet dir - endif - if v:shell_error - call s:throw(join(readfile(error),"\n")) - endif - for winnr in range(winnr('$'),1,-1) - call setwinvar(winnr, '&scrollbind', 0) - if exists('+cursorbind') - call setwinvar(winnr, '&cursorbind', 0) - endif - if getbufvar(winbufnr(winnr), 'fugitive_blamed_bufnr') - execute winbufnr(winnr).'bdelete' - endif - endfor - let bufnr = bufnr('') - let restore = 'call setwinvar(bufwinnr('.bufnr.'),"&scrollbind",0)' - if exists('+cursorbind') - let restore .= '|call setwinvar(bufwinnr('.bufnr.'),"&cursorbind",0)' - endif - if &l:wrap - let restore .= '|call setwinvar(bufwinnr('.bufnr.'),"&wrap",1)' - endif - if &l:foldenable - let restore .= '|call setwinvar(bufwinnr('.bufnr.'),"&foldenable",1)' - endif - setlocal scrollbind nowrap nofoldenable - if exists('+cursorbind') - setlocal cursorbind - endif - let top = line('w0') + &scrolloff - let current = line('.') - let s:temp_files[tolower(temp)] = { 'dir': s:repo().dir(), 'args': cmd } - exe 'keepalt leftabove vsplit '.temp - let b:fugitive_blamed_bufnr = bufnr - let w:fugitive_leave = restore - let b:fugitive_blame_arguments = join(a:args,' ') - execute top - normal! zt - execute current - if exists('+cursorbind') - setlocal cursorbind - endif - setlocal nomodified nomodifiable nonumber scrollbind nowrap foldcolumn=0 nofoldenable winfixwidth filetype=fugitiveblame - if exists('+concealcursor') - setlocal concealcursor=nc conceallevel=2 - endif - if exists('+relativenumber') - setlocal norelativenumber - endif - execute "vertical resize ".(s:linechars('.\{-\}\ze\s\+\d\+)')+1) - nnoremap :help fugitive-:Gblame - nnoremap g? :help fugitive-:Gblame - nnoremap q :exe substitute(bufwinnr(b:fugitive_blamed_bufnr).' wincmd w'.bufnr('').'bdelete','^-1','','') - nnoremap gq :exe substitute(bufwinnr(b:fugitive_blamed_bufnr).' wincmd w'.bufnr('').'bdeleteif expand("%:p") =~# "^fugitive:[\\/][\\/]"Geditendif','^-1','','') - nnoremap :exe BlameCommit("exe 'norm q'edit") - nnoremap - :exe BlameJump('') - nnoremap P :exe BlameJump('^'.v:count1) - nnoremap ~ :exe BlameJump('~'.v:count1) - nnoremap i :exe BlameCommit("exe 'norm q'edit") - nnoremap o :exe BlameCommit((&splitbelow ? "botright" : "topleft")." split") - nnoremap O :exe BlameCommit("tabedit") - nnoremap A :exe "vertical resize ".(linechars('.\{-\}\ze [0-9:/+-][0-9:/+ -]* \d\+)')+1+v:count) - nnoremap C :exe "vertical resize ".(linechars('^\S\+')+1+v:count) - nnoremap D :exe "vertical resize ".(linechars('.\{-\}\ze\d\ze\s\+\d\+)')+1-v:count) - redraw - syncbind - endif - finally - if exists('l:dir') - execute cd.'`=dir`' - endif - endtry - return '' - catch /^fugitive:/ - return 'echoerr v:errmsg' - endtry -endfunction - -function! s:BlameCommit(cmd) abort - let cmd = s:Edit(a:cmd, 0, matchstr(getline('.'),'\x\+')) - if cmd =~# '^echoerr' - return cmd - endif - let lnum = matchstr(getline('.'),' \zs\d\+\ze\s\+[([:digit:]]') - let path = matchstr(getline('.'),'^\^\=\x\+\s\+\zs.\{-\}\ze\s*\d\+ ') - if path ==# '' - let path = s:buffer(b:fugitive_blamed_bufnr).path() - endif - execute cmd - if search('^diff .* b/\M'.escape(path,'\').'$','W') - call search('^+++') - let head = line('.') - while search('^@@ \|^diff ') && getline('.') =~# '^@@ ' - let top = +matchstr(getline('.'),' +\zs\d\+') - let len = +matchstr(getline('.'),' +\d\+,\zs\d\+') - if lnum >= top && lnum <= top + len - let offset = lnum - top - if &scrolloff - + - normal! zt - else - normal! zt - + - endif - while offset > 0 && line('.') < line('$') - + - if getline('.') =~# '^[ +]' - let offset -= 1 - endif - endwhile - return 'normal! zv' - endif - endwhile - execute head - normal! zt - endif - return '' -endfunction - -function! s:BlameJump(suffix) abort - let commit = matchstr(getline('.'),'^\^\=\zs\x\+') - if commit =~# '^0\+$' - let commit = ':0' - endif - let lnum = matchstr(getline('.'),' \zs\d\+\ze\s\+[([:digit:]]') - let path = matchstr(getline('.'),'^\^\=\x\+\s\+\zs.\{-\}\ze\s*\d\+ ') - if path ==# '' - let path = s:buffer(b:fugitive_blamed_bufnr).path() - endif - let args = b:fugitive_blame_arguments - let offset = line('.') - line('w0') - let bufnr = bufnr('%') - let winnr = bufwinnr(b:fugitive_blamed_bufnr) - if winnr > 0 - exe winnr.'wincmd w' - endif - execute s:Edit('edit', 0, commit.a:suffix.':'.path) - execute lnum - if winnr > 0 - exe bufnr.'bdelete' - endif - execute 'Gblame '.args - execute lnum - let delta = line('.') - line('w0') - offset - if delta > 0 - execute 'normal! '.delta."\" - elseif delta < 0 - execute 'normal! '.(-delta)."\" - endif - syncbind - return '' -endfunction - -let s:hash_colors = {} - -function! s:BlameSyntax() abort - let b:current_syntax = 'fugitiveblame' - let conceal = has('conceal') ? ' conceal' : '' - let arg = exists('b:fugitive_blame_arguments') ? b:fugitive_blame_arguments : '' - syn match FugitiveblameBoundary "^\^" - syn match FugitiveblameBlank "^\s\+\s\@=" nextgroup=FugitiveblameAnnotation,fugitiveblameOriginalFile,FugitiveblameOriginalLineNumber skipwhite - syn match FugitiveblameHash "\%(^\^\=\)\@<=\x\{7,40\}\>" nextgroup=FugitiveblameAnnotation,FugitiveblameOriginalLineNumber,fugitiveblameOriginalFile skipwhite - syn match FugitiveblameUncommitted "\%(^\^\=\)\@<=0\{7,40\}\>" nextgroup=FugitiveblameAnnotation,FugitiveblameOriginalLineNumber,fugitiveblameOriginalFile skipwhite - syn region FugitiveblameAnnotation matchgroup=FugitiveblameDelimiter start="(" end="\%( \d\+\)\@<=)" contained keepend oneline - syn match FugitiveblameTime "[0-9:/+-][0-9:/+ -]*[0-9:/+-]\%( \+\d\+)\)\@=" contained containedin=FugitiveblameAnnotation - exec 'syn match FugitiveblameLineNumber " *\d\+)\@=" contained containedin=FugitiveblameAnnotation'.conceal - exec 'syn match FugitiveblameOriginalFile " \%(\f\+\D\@<=\|\D\@=\f\+\)\%(\%(\s\+\d\+\)\=\s\%((\|\s*\d\+)\)\)\@=" contained nextgroup=FugitiveblameOriginalLineNumber,FugitiveblameAnnotation skipwhite'.(arg =~# 'f' ? '' : conceal) - exec 'syn match FugitiveblameOriginalLineNumber " *\d\+\%(\s(\)\@=" contained nextgroup=FugitiveblameAnnotation skipwhite'.(arg =~# 'n' ? '' : conceal) - exec 'syn match FugitiveblameOriginalLineNumber " *\d\+\%(\s\+\d\+)\)\@=" contained nextgroup=FugitiveblameShort skipwhite'.(arg =~# 'n' ? '' : conceal) - syn match FugitiveblameShort " \d\+)" contained contains=FugitiveblameLineNumber - syn match FugitiveblameNotCommittedYet "(\@<=Not Committed Yet\>" contained containedin=FugitiveblameAnnotation - hi def link FugitiveblameBoundary Keyword - hi def link FugitiveblameHash Identifier - hi def link FugitiveblameUncommitted Ignore - hi def link FugitiveblameTime PreProc - hi def link FugitiveblameLineNumber Number - hi def link FugitiveblameOriginalFile String - hi def link FugitiveblameOriginalLineNumber Float - hi def link FugitiveblameShort FugitiveblameDelimiter - hi def link FugitiveblameDelimiter Delimiter - hi def link FugitiveblameNotCommittedYet Comment - let seen = {} - for lnum in range(1, line('$')) - let hash = matchstr(getline(lnum), '^\^\=\zs\x\{6\}') - if hash ==# '' || hash ==# '000000' || has_key(seen, hash) - continue - endif - let seen[hash] = 1 - if &t_Co > 16 && exists('g:CSApprox_loaded') - \ && empty(get(s:hash_colors, hash)) - let [s, r, g, b; __] = map(matchlist(hash, '\(\x\x\)\(\x\x\)\(\x\x\)'), 'str2nr(v:val,16)') - let color = csapprox#per_component#Approximate(r, g, b) - if color == 16 && &background ==# 'dark' - let color = 8 - endif - let s:hash_colors[hash] = ' ctermfg='.color - else - let s:hash_colors[hash] = '' - endif - exe 'syn match FugitiveblameHash'.hash.' "\%(^\^\=\)\@<='.hash.'\x\{1,34\}\>" nextgroup=FugitiveblameAnnotation,FugitiveblameOriginalLineNumber,fugitiveblameOriginalFile skipwhite' - endfor - call s:RehighlightBlame() -endfunction - -function! s:RehighlightBlame() abort - for [hash, cterm] in items(s:hash_colors) - if !empty(cterm) || has('gui_running') - exe 'hi FugitiveblameHash'.hash.' guifg=#'.hash.get(s:hash_colors, hash, '') - else - exe 'hi link FugitiveblameHash'.hash.' Identifier' - endif - endfor -endfunction - -" Section: Gbrowse - -call s:command("-bar -bang -range -nargs=* -complete=customlist,s:EditComplete Gbrowse :execute s:Browse(0,,,)") - -function! s:Browse(bang,line1,count,...) abort - try - let rev = a:0 ? substitute(join(a:000, ' '),'@[[:alnum:]_-]*\%(://.\{-\}\)\=$','','') : '' - if rev ==# '' - let expanded = s:buffer().rev() - elseif rev ==# ':' - let expanded = s:buffer().path('/') - else - let expanded = s:buffer().expand(rev) - endif - let full = s:repo().translate(expanded) - let commit = '' - if full =~# '^fugitive://' - let commit = matchstr(full,'://.*//\zs\w\+') - let path = matchstr(full,'://.*//\w\+\zs/.*') - if commit =~ '..' - let type = s:repo().git_chomp('cat-file','-t',commit.s:sub(path,'^/',':')) - else - let type = 'blob' - endif - let path = path[1:-1] - elseif s:repo().bare() - let path = '.git/' . full[strlen(s:repo().dir())+1:-1] - let type = '' - else - let path = full[strlen(s:repo().tree())+1:-1] - if path =~# '^\.git/' - let type = '' - elseif isdirectory(full) - let type = 'tree' - else - let type = 'blob' - endif - endif - if path =~# '^\.git/.*HEAD' && filereadable(s:repo().dir(path[5:-1])) - let body = readfile(s:repo().dir(path[5:-1]))[0] - if body =~# '^\x\{40\}$' - let commit = body - let type = 'commit' - let path = '' - elseif body =~# '^ref: refs/' - let path = '.git/' . matchstr(body,'ref: \zs.*') - endif - endif - - if a:0 && join(a:000, ' ') =~# '@[[:alnum:]_-]*\%(://.\{-\}\)\=$' - let remote = matchstr(join(a:000, ' '),'@\zs[[:alnum:]_-]\+\%(://.\{-\}\)\=$') - elseif path =~# '^\.git/refs/remotes/.' - let remote = matchstr(path,'^\.git/refs/remotes/\zs[^/]\+') - else - let remote = 'origin' - let branch = matchstr(rev,'^[[:alnum:]/._-]\+\ze[:^~@]') - if branch ==# '' && path =~# '^\.git/refs/\w\+/' - let branch = s:sub(path,'^\.git/refs/\w+/','') - endif - if filereadable(s:repo().dir('refs/remotes/'.branch)) - let remote = matchstr(branch,'[^/]\+') - let rev = rev[strlen(remote)+1:-1] - else - if branch ==# '' - let branch = matchstr(s:repo().head_ref(),'\ 0 ? a:line1 : 0, - \ 'line2': a:count > 0 ? a:count : 0}]) - if !empty(url) - break - endif - endfor - - if empty(url) - call s:throw("Instaweb failed to start and '".remote."' is not a supported remote") - endif - - if a:bang - if has('clipboard') - let @* = url - endif - return 'echomsg '.string(url) - elseif exists(':Browse') == 2 - return 'echomsg '.string(url).'|Browse '.url - else - return 'echomsg '.string(url).'|call netrw#NetrwBrowseX('.string(url).', 0)' - endif - catch /^fugitive:/ - return 'echoerr v:errmsg' - endtry -endfunction - -function! s:github_url(http://github.com/opts,%20...) abort - if a:0 || type(a:opts) != type({}) - return '' - endif - let domain_pattern = 'github\.com' - let domains = exists('g:fugitive_github_domains') ? g:fugitive_github_domains : [] - for domain in domains - let domain_pattern .= '\|' . escape(split(domain, '://')[-1], '.') - endfor - let repo = matchstr(get(a:opts, 'remote'), '^\%(https\=://\|git://\|git@\)\=\zs\('.domain_pattern.'\)[/:].\{-\}\ze\%(\.git\)\=$') - if repo ==# '' - return '' - endif - let path = a:opts.path - if index(domains, 'http://' . matchstr(repo, '^[^:/]*')) >= 0 - let root = 'http://' . s:sub(repo,':','/') - else - let root = 'https://' . s:sub(repo,':','/') - endif - if path =~# '^\.git/refs/heads/' - let branch = a:opts.repo.git_chomp('config','branch.'.path[16:-1].'.merge')[11:-1] - if branch ==# '' - return root . '/commits/' . path[16:-1] - else - return root . '/commits/' . branch - endif - elseif path =~# '^\.git/refs/.' - return root . '/commits/' . matchstr(path,'[^/]\+$') - elseif path =~# '.git/\%(config$\|hooks\>\)' - return root . '/admin' - elseif path =~# '^\.git\>' - return root - endif - if a:opts.revision =~# '^[[:alnum:]._-]\+:' - let commit = matchstr(a:opts.revision,'^[^:]*') - elseif a:opts.commit =~# '^\d\=$' - let local = matchstr(a:opts.repo.head_ref(),'\' - return root - endif - let url = root - if a:opts.commit =~# '^\x\{40\}$' - if a:opts.type ==# 'commit' - let url .= ';a=commit' - endif - let url .= ';h=' . a:opts.repo.rev_parse(a:opts.commit . (a:opts.path == '' ? '' : ':' . a:opts.path)) - else - if a:opts.type ==# 'blob' - let tmp = tempname() - silent execute 'write !'.a:opts.repo.git_command('hash-object','-w','--stdin').' > '.tmp - let url .= ';h=' . readfile(tmp)[0] - else - try - let url .= ';h=' . a:opts.repo.rev_parse((a:opts.commit == '' ? 'HEAD' : ':' . a:opts.commit) . ':' . a:opts.path) - catch /^fugitive:/ - call s:throw('fugitive: cannot browse uncommitted file') - endtry - endif - let root .= ';hb=' . matchstr(a:opts.repo.head_ref(),'[^ ]\+$') - endif - if a:opts.path !=# '' - let url .= ';f=' . a:opts.path - endif - if get(a:opts, 'line1') - let url .= '#l' . a:opts.line1 - endif - return url -endfunction - -if !exists('g:fugitive_browse_handlers') - let g:fugitive_browse_handlers = [] -endif - -call extend(g:fugitive_browse_handlers, - \ [s:function('s:github_url'), s:function('s:instaweb_url')]) - -" Section: File access - -function! s:ReplaceCmd(cmd,...) abort - let fn = expand('%:p') - let tmp = tempname() - let prefix = '' - try - if a:0 && a:1 != '' - if s:winshell() - let old_index = $GIT_INDEX_FILE - let $GIT_INDEX_FILE = a:1 - else - let prefix = 'env GIT_INDEX_FILE='.s:shellesc(a:1).' ' - endif - endif - if s:winshell() - let cmd_escape_char = &shellxquote == '(' ? '^' : '^^^' - call system('cmd /c "'.prefix.s:gsub(a:cmd,'[<>]', cmd_escape_char.'&').' > '.tmp.'"') - else - call system(' ('.prefix.a:cmd.' > '.tmp.') ') - endif - finally - if exists('old_index') - let $GIT_INDEX_FILE = old_index - endif - endtry - silent exe 'keepalt file '.tmp - try - silent edit! - finally - try - silent exe 'keepalt file '.s:fnameescape(fn) - catch /^Vim\%((\a\+)\)\=:E302/ - endtry - call delete(tmp) - if fnamemodify(bufname('$'), ':p') ==# tmp - silent execute 'bwipeout '.bufnr('$') - endif - silent exe 'doau BufReadPost '.s:fnameescape(fn) - endtry -endfunction - -function! s:BufReadIndex() abort - if !exists('b:fugitive_display_format') - let b:fugitive_display_format = filereadable(expand('%').'.lock') - endif - let b:fugitive_display_format = b:fugitive_display_format % 2 - let b:fugitive_type = 'index' - try - let b:git_dir = s:repo().dir() - setlocal noro ma nomodeline - if fnamemodify($GIT_INDEX_FILE !=# '' ? $GIT_INDEX_FILE : b:git_dir . '/index', ':p') ==# expand('%:p') - let index = '' - else - let index = expand('%:p') - endif - if b:fugitive_display_format - call s:ReplaceCmd(s:repo().git_command('ls-files','--stage'),index) - set ft=git nospell - else - let cd = exists('*haslocaldir') && haslocaldir() ? 'lcd ' : 'cd ' - let dir = getcwd() - if fugitive#git_version() =~# '^0\|^1\.[1-7]\.' - let cmd = s:repo().git_command('status') - else - let cmd = s:repo().git_command( - \ '-c', 'status.displayCommentPrefix=true', - \ '-c', 'color.status=false', - \ '-c', 'status.short=false', - \ 'status') - endif - try - execute cd.'`=s:repo().tree()`' - call s:ReplaceCmd(cmd, index) - finally - execute cd.'`=dir`' - endtry - set ft=gitcommit - set foldtext=fugitive#foldtext() - endif - setlocal ro noma nomod noswapfile - if &bufhidden ==# '' - setlocal bufhidden=delete - endif - call s:JumpInit() - nunmap P - nunmap ~ - nnoremap :execute StageNext(v:count1) - nnoremap :execute StagePrevious(v:count1) - nnoremap - :silent execute StageToggle(line('.'),line('.')+v:count1-1) - xnoremap - :silent execute StageToggle(line("'<"),line("'>")) - nnoremap a :let b:fugitive_display_format += 1exe BufReadIndex() - nnoremap i :let b:fugitive_display_format -= 1exe BufReadIndex() - nnoremap C :Gcommit - nnoremap cA :Gcommit --amend --reuse-message=HEAD - nnoremap ca :Gcommit --amend - nnoremap cc :Gcommit - nnoremap cva :Gcommit --amend --verbose - nnoremap cvc :Gcommit --verbose - nnoremap D :execute StageDiff('Gdiff') - nnoremap dd :execute StageDiff('Gdiff') - nnoremap dh :execute StageDiff('Gsdiff') - nnoremap ds :execute StageDiff('Gsdiff') - nnoremap dp :execute StageDiffEdit() - nnoremap dv :execute StageDiff('Gvdiff') - nnoremap p :execute StagePatch(line('.'),line('.')+v:count1-1) - xnoremap p :execute StagePatch(line("'<"),line("'>")) - nnoremap q :if bufnr('$') == 1quitelsebdeleteendif - nnoremap r :edit - nnoremap R :edit - nnoremap U :execute StageUndo() - nnoremap g? :help fugitive-:Gstatus - nnoremap :help fugitive-:Gstatus - catch /^fugitive:/ - return 'echoerr v:errmsg' - endtry -endfunction - -function! s:FileRead() abort - try - let repo = s:repo(fugitive#extract_git_dir(expand(''))) - let path = s:sub(s:sub(matchstr(expand(''),'fugitive://.\{-\}//\zs.*'),'/',':'),'^\d:',':&') - let hash = repo.rev_parse(path) - if path =~ '^:' - let type = 'blob' - else - let type = repo.git_chomp('cat-file','-t',hash) - endif - " TODO: use count, if possible - return "read !".escape(repo.git_command('cat-file',type,hash),'%#\') - catch /^fugitive:/ - return 'echoerr v:errmsg' - endtry -endfunction - -function! s:BufReadIndexFile() abort - try - let b:fugitive_type = 'blob' - let b:git_dir = s:repo().dir() - try - call s:ReplaceCmd(s:repo().git_command('cat-file','blob',s:buffer().sha1())) - finally - if &bufhidden ==# '' - setlocal bufhidden=delete - endif - setlocal noswapfile - endtry - return '' - catch /^fugitive: rev-parse/ - silent exe 'doau BufNewFile '.s:fnameescape(expand('%:p')) - return '' - catch /^fugitive:/ - return 'echoerr v:errmsg' - endtry -endfunction - -function! s:BufWriteIndexFile() abort - let tmp = tempname() - try - let path = matchstr(expand(''),'//\d/\zs.*') - let stage = matchstr(expand(''),'//\zs\d') - silent execute 'write !'.s:repo().git_command('hash-object','-w','--stdin').' > '.tmp - let sha1 = readfile(tmp)[0] - let old_mode = matchstr(s:repo().git_chomp('ls-files','--stage',path),'^\d\+') - if old_mode == '' - let old_mode = executable(s:repo().tree(path)) ? '100755' : '100644' - endif - let info = old_mode.' '.sha1.' '.stage."\t".path - call writefile([info],tmp) - if s:winshell() - let error = system('type '.s:gsub(tmp,'/','\\').'|'.s:repo().git_command('update-index','--index-info')) - else - let error = system(s:repo().git_command('update-index','--index-info').' < '.tmp) - endif - if v:shell_error == 0 - setlocal nomodified - if exists('#BufWritePost') - execute 'doautocmd BufWritePost '.s:fnameescape(expand('%:p')) - endif - call fugitive#reload_status() - return '' - else - return 'echoerr '.string('fugitive: '.error) - endif - finally - call delete(tmp) - endtry -endfunction - -function! s:BufReadObject() abort - try - setlocal noro ma - let b:git_dir = s:repo().dir() - let hash = s:buffer().sha1() - if !exists("b:fugitive_type") - let b:fugitive_type = s:repo().git_chomp('cat-file','-t',hash) - endif - if b:fugitive_type !~# '^\%(tag\|commit\|tree\|blob\)$' - return "echoerr 'fugitive: unrecognized git type'" - endif - let firstline = getline('.') - if !exists('b:fugitive_display_format') && b:fugitive_type != 'blob' - let b:fugitive_display_format = +getbufvar('#','fugitive_display_format') - endif - - if b:fugitive_type !=# 'blob' - setlocal nomodeline - endif - - let pos = getpos('.') - silent keepjumps %delete_ - setlocal endofline - - try - if b:fugitive_type ==# 'tree' - let b:fugitive_display_format = b:fugitive_display_format % 2 - if b:fugitive_display_format - call s:ReplaceCmd(s:repo().git_command('ls-tree',hash)) - else - call s:ReplaceCmd(s:repo().git_command('show','--no-color',hash)) - endif - elseif b:fugitive_type ==# 'tag' - let b:fugitive_display_format = b:fugitive_display_format % 2 - if b:fugitive_display_format - call s:ReplaceCmd(s:repo().git_command('cat-file',b:fugitive_type,hash)) - else - call s:ReplaceCmd(s:repo().git_command('cat-file','-p',hash)) - endif - elseif b:fugitive_type ==# 'commit' - let b:fugitive_display_format = b:fugitive_display_format % 2 - if b:fugitive_display_format - call s:ReplaceCmd(s:repo().git_command('cat-file',b:fugitive_type,hash)) - else - call s:ReplaceCmd(s:repo().git_command('show','--no-color','--pretty=format:tree %T%nparent %P%nauthor %an <%ae> %ad%ncommitter %cn <%ce> %cd%nencoding %e%n%n%s%n%n%b',hash)) - keepjumps call search('^parent ') - if getline('.') ==# 'parent ' - silent keepjumps delete_ - else - silent keepjumps s/\%(^parent\)\@\)\=$','W',line('.')+3) - if lnum - silent keepjumps delete_ - end - keepjumps 1 - endif - elseif b:fugitive_type ==# 'blob' - call s:ReplaceCmd(s:repo().git_command('cat-file',b:fugitive_type,hash)) - setlocal nomodeline - endif - finally - keepjumps call setpos('.',pos) - setlocal ro noma nomod noswapfile - if &bufhidden ==# '' - setlocal bufhidden=delete - endif - if b:fugitive_type !=# 'blob' - setlocal filetype=git foldmethod=syntax - nnoremap a :let b:fugitive_display_format += v:count1exe BufReadObject() - nnoremap i :let b:fugitive_display_format -= v:count1exe BufReadObject() - else - call s:JumpInit() - endif - endtry - - return '' - catch /^fugitive:/ - return 'echoerr v:errmsg' - endtry -endfunction - -augroup fugitive_files - autocmd! - autocmd BufReadCmd index{,.lock} - \ if fugitive#is_git_dir(expand(':p:h')) | - \ exe s:BufReadIndex() | - \ elseif filereadable(expand('')) | - \ read | - \ 1delete | - \ endif - autocmd FileReadCmd fugitive://**//[0-3]/** exe s:FileRead() - autocmd BufReadCmd fugitive://**//[0-3]/** exe s:BufReadIndexFile() - autocmd BufWriteCmd fugitive://**//[0-3]/** exe s:BufWriteIndexFile() - autocmd BufReadCmd fugitive://**//[0-9a-f][0-9a-f]* exe s:BufReadObject() - autocmd FileReadCmd fugitive://**//[0-9a-f][0-9a-f]* exe s:FileRead() - autocmd FileType git - \ if exists('b:git_dir') | - \ call s:JumpInit() | - \ endif -augroup END - -" Section: Temp files - -if !exists('s:temp_files') - let s:temp_files = {} -endif - -augroup fugitive_temp - autocmd! - autocmd BufNewFile,BufReadPost * - \ if has_key(s:temp_files,tolower(expand(':p'))) | - \ let b:git_dir = s:temp_files[tolower(expand(':p'))].dir | - \ let b:git_type = 'temp' | - \ let b:git_args = s:temp_files[tolower(expand(':p'))].args | - \ call fugitive#detect(expand(':p')) | - \ setlocal bufhidden=delete nobuflisted | - \ nnoremap q :bdelete| - \ endif -augroup END - -" Section: Go to file - -function! s:JumpInit() abort - nnoremap :exe GF("edit") - if !&modifiable - nnoremap o :exe GF("split") - nnoremap S :exe GF("vsplit") - nnoremap O :exe GF("tabedit") - nnoremap - :exe Edit('edit',0,buffer().up(v:count1)) if fugitive#buffer().type('tree')call search('^'.escape(expand('#:t'),'.*[]~\').'/\=$','wc')endif - nnoremap P :exe Edit('edit',0,buffer().commit().'^'.v:count1.buffer().path(':')) - nnoremap ~ :exe Edit('edit',0,buffer().commit().'~'.v:count1.buffer().path(':')) - nnoremap C :exe Edit('edit',0,buffer().containing_commit()) - nnoremap cc :exe Edit('edit',0,buffer().containing_commit()) - nnoremap co :exe Edit('split',0,buffer().containing_commit()) - nnoremap cS :exe Edit('vsplit',0,buffer().containing_commit()) - nnoremap cO :exe Edit('tabedit',0,buffer().containing_commit()) - nnoremap cP :exe Edit('pedit',0,buffer().containing_commit()) - nnoremap . : =fnameescape(recall()) - endif -endfunction - -function! s:GF(mode) abort - try - let buffer = s:buffer() - let myhash = buffer.sha1() - if myhash ==# '' && getline(1) =~# '^\%(commit\|tag\) \w' - let myhash = matchstr(getline(1),'^\w\+ \zs\S\+') - endif - - if buffer.type('tree') - let showtree = (getline(1) =~# '^tree ' && getline(2) == "") - if showtree && line('.') == 1 - return "" - elseif showtree && line('.') > 2 - return s:Edit(a:mode,0,buffer.commit().':'.s:buffer().path().(buffer.path() =~# '^$\|/$' ? '' : '/').s:sub(getline('.'),'/$','')) - elseif getline('.') =~# '^\d\{6\} \l\{3,8\} \x\{40\}\t' - return s:Edit(a:mode,0,buffer.commit().':'.s:buffer().path().(buffer.path() =~# '^$\|/$' ? '' : '/').s:sub(matchstr(getline('.'),'\t\zs.*'),'/$','')) - endif - - elseif buffer.type('blob') - let ref = expand("") - try - let sha1 = buffer.repo().rev_parse(ref) - catch /^fugitive:/ - endtry - if exists('sha1') - return s:Edit(a:mode,0,ref) - endif - - else - - " Index - if getline('.') =~# '^\d\{6\} \x\{40\} \d\t' - let ref = matchstr(getline('.'),'\x\{40\}') - let file = ':'.s:sub(matchstr(getline('.'),'\d\t.*'),'\t',':') - return s:Edit(a:mode,0,file) - - elseif getline('.') =~# '^#\trenamed:.* -> ' - let file = '/'.matchstr(getline('.'),' -> \zs.*') - return s:Edit(a:mode,0,file) - elseif getline('.') =~# '^#\t[[:alpha:] ]\+: *.' - let file = '/'.matchstr(getline('.'),': *\zs.\{-\}\ze\%( ([^()[:digit:]]\+)\)\=$') - return s:Edit(a:mode,0,file) - elseif getline('.') =~# '^#\t.' - let file = '/'.matchstr(getline('.'),'#\t\zs.*') - return s:Edit(a:mode,0,file) - elseif getline('.') =~# ': needs merge$' - let file = '/'.matchstr(getline('.'),'.*\ze: needs merge$') - return s:Edit(a:mode,0,file).'|Gdiff' - - elseif getline('.') ==# '# Not currently on any branch.' - return s:Edit(a:mode,0,'HEAD') - elseif getline('.') =~# '^# On branch ' - let file = 'refs/heads/'.getline('.')[12:] - return s:Edit(a:mode,0,file) - elseif getline('.') =~# "^# Your branch .*'" - let file = matchstr(getline('.'),"'\\zs\\S\\+\\ze'") - return s:Edit(a:mode,0,file) - endif - - let showtree = (getline(1) =~# '^tree ' && getline(2) == "") - - if getline('.') =~# '^ref: ' - let ref = strpart(getline('.'),5) - - elseif getline('.') =~# '^commit \x\{40\}\>' - let ref = matchstr(getline('.'),'\x\{40\}') - return s:Edit(a:mode,0,ref) - - elseif getline('.') =~# '^parent \x\{40\}\>' - let ref = matchstr(getline('.'),'\x\{40\}') - let line = line('.') - let parent = 0 - while getline(line) =~# '^parent ' - let parent += 1 - let line -= 1 - endwhile - return s:Edit(a:mode,0,ref) - - elseif getline('.') =~ '^tree \x\{40\}$' - let ref = matchstr(getline('.'),'\x\{40\}') - if s:repo().rev_parse(myhash.':') == ref - let ref = myhash.':' - endif - return s:Edit(a:mode,0,ref) - - elseif getline('.') =~# '^object \x\{40\}$' && getline(line('.')+1) =~ '^type \%(commit\|tree\|blob\)$' - let ref = matchstr(getline('.'),'\x\{40\}') - let type = matchstr(getline(line('.')+1),'type \zs.*') - - elseif getline('.') =~# '^\l\{3,8\} '.myhash.'$' - return '' - - elseif getline('.') =~# '^\l\{3,8\} \x\{40\}\>' - let ref = matchstr(getline('.'),'\x\{40\}') - echoerr "warning: unknown context ".matchstr(getline('.'),'^\l*') - - elseif getline('.') =~# '^[+-]\{3\} [ab/]' - let ref = getline('.')[4:] - - elseif getline('.') =~# '^[+-]' && search('^@@ -\d\+,\d\+ +\d\+,','bnW') - let type = getline('.')[0] - let lnum = line('.') - 1 - let offset = -1 - while getline(lnum) !~# '^@@ -\d\+,\d\+ +\d\+,' - if getline(lnum) =~# '^[ '.type.']' - let offset += 1 - endif - let lnum -= 1 - endwhile - let offset += matchstr(getline(lnum), type.'\zs\d\+') - let ref = getline(search('^'.type.'\{3\} [ab]/','bnW'))[4:-1] - let dcmd = '+'.offset.'|normal! zv' - let dref = '' - - elseif getline('.') =~# '^rename from ' - let ref = 'a/'.getline('.')[12:] - elseif getline('.') =~# '^rename to ' - let ref = 'b/'.getline('.')[10:] - - elseif getline('.') =~# '^diff --git \%(a/.*\|/dev/null\) \%(b/.*\|/dev/null\)' - let dref = matchstr(getline('.'),'\Cdiff --git \zs\%(a/.*\|/dev/null\)\ze \%(b/.*\|/dev/null\)') - let ref = matchstr(getline('.'),'\Cdiff --git \%(a/.*\|/dev/null\) \zs\%(b/.*\|/dev/null\)') - let dcmd = 'Gdiff' - - elseif getline('.') =~# '^index ' && getline(line('.')-1) =~# '^diff --git \%(a/.*\|/dev/null\) \%(b/.*\|/dev/null\)' - let line = getline(line('.')-1) - let dref = matchstr(line,'\Cdiff --git \zs\%(a/.*\|/dev/null\)\ze \%(b/.*\|/dev/null\)') - let ref = matchstr(line,'\Cdiff --git \%(a/.*\|/dev/null\) \zs\%(b/.*\|/dev/null\)') - let dcmd = 'Gdiff!' - - elseif line('$') == 1 && getline('.') =~ '^\x\{40\}$' - let ref = getline('.') - - elseif expand('') =~# '^\x\{7,40\}\>' - return s:Edit(a:mode,0,expand('')) - - else - let ref = '' - endif - - if myhash ==# '' - let ref = s:sub(ref,'^a/','HEAD:') - let ref = s:sub(ref,'^b/',':0:') - if exists('dref') - let dref = s:sub(dref,'^a/','HEAD:') - endif - else - let ref = s:sub(ref,'^a/',myhash.'^:') - let ref = s:sub(ref,'^b/',myhash.':') - if exists('dref') - let dref = s:sub(dref,'^a/',myhash.'^:') - endif - endif - - if ref ==# '/dev/null' - " Empty blob - let ref = 'e69de29bb2d1d6434b8b29ae775ad8c2e48c5391' - endif - - if exists('dref') - return s:Edit(a:mode,0,ref) . '|'.dcmd.' '.s:fnameescape(dref) - elseif ref != "" - return s:Edit(a:mode,0,ref) - endif - - endif - return '' - catch /^fugitive:/ - return 'echoerr v:errmsg' - endtry -endfunction - -" Section: Statusline - -function! s:repo_head_ref() dict abort - if !filereadable(self.dir('HEAD')) - return '' - endif - return readfile(self.dir('HEAD'))[0] -endfunction - -call s:add_methods('repo',['head_ref']) - -function! fugitive#statusline(...) abort - if !exists('b:git_dir') - return '' - endif - let status = '' - if s:buffer().commit() != '' - let status .= ':' . s:buffer().commit()[0:7] - endif - let status .= '('.fugitive#head(7).')' - if &statusline =~# '%[MRHWY]' && &statusline !~# '%[mrhwy]' - return ',GIT'.status - else - return '[Git'.status.']' - endif -endfunction - -function! fugitive#head(...) abort - if !exists('b:git_dir') - return '' - endif - - return s:repo().head(a:0 ? a:1 : 0) -endfunction - -" Section: Folding - -function! fugitive#foldtext() abort - if &foldmethod !=# 'syntax' - return foldtext() - elseif getline(v:foldstart) =~# '^diff ' - let [add, remove] = [-1, -1] - let filename = '' - for lnum in range(v:foldstart, v:foldend) - if filename ==# '' && getline(lnum) =~# '^[+-]\{3\} [abciow12]/' - let filename = getline(lnum)[6:-1] - endif - if getline(lnum) =~# '^+' - let add += 1 - elseif getline(lnum) =~# '^-' - let remove += 1 - elseif getline(lnum) =~# '^Binary ' - let binary = 1 - endif - endfor - if filename ==# '' - let filename = matchstr(getline(v:foldstart), '^diff .\{-\} a/\zs.*\ze b/') - endif - if filename ==# '' - let filename = getline(v:foldstart)[5:-1] - endif - if exists('binary') - return 'Binary: '.filename - else - return (add<10&&remove<100?' ':'') . add . '+ ' . (remove<10&&add<100?' ':'') . remove . '- ' . filename - endif - elseif getline(v:foldstart) =~# '^# .*:$' - let lines = getline(v:foldstart, v:foldend) - call filter(lines, 'v:val =~# "^#\t"') - cal map(lines,'s:sub(v:val, "^#\t%(modified: +|renamed: +)=", "")') - cal map(lines,'s:sub(v:val, "^([[:alpha:] ]+): +(.*)", "\\2 (\\1)")') - return getline(v:foldstart).' '.join(lines, ', ') - endif - return foldtext() -endfunction - -augroup fugitive_foldtext - autocmd! - autocmd User Fugitive - \ if &filetype =~# '^git\%(commit\)\=$' && &foldtext ==# 'foldtext()' | - \ set foldtext=fugitive#foldtext() | - \ endif -augroup END diff --git a/bundle/javascript/CONTRIBUTING.md b/bundle/javascript/CONTRIBUTING.md deleted file mode 100755 index c47cbc8..0000000 --- a/bundle/javascript/CONTRIBUTING.md +++ /dev/null @@ -1,18 +0,0 @@ -## Contributing - -This project uses the [git -flow](http://nvie.com/posts/a-successful-git-branching-model/) model for -development. There's [a handy git module for git -flow](//github.com/nvie/gitflow). If you'd like to be added as a contributor, -the price of admission is 1 pull request. Please follow the general code style -guides (read the code) and in your pull request explain the reason for the -proposed change and how it is valuable. - -## Pull Requests - -Please make your pull requests against the `develop` branch; we stage changes -for testing there to avoid unexpected breakages for our users. :) - -## Bug report - -Report a bug on [GitHub Issues](https://github.com/pangloss/vim-javascript/issues). diff --git a/bundle/javascript/README.md b/bundle/javascript/README.md deleted file mode 100755 index 1cc50ae..0000000 --- a/bundle/javascript/README.md +++ /dev/null @@ -1,92 +0,0 @@ -# vim-javascript v0.10.0 - -JavaScript bundle for vim, this bundle provides syntax and indent plugins. - -## A Quick Note on Regexes - -Vim 7.4 was released recently, and unfortunately broke how this plugin -handles regexes. There was no real easy way for us to fix this unless we -completely rewrote how regexes work. - -Good News: There was a recent update to Vim 7.4 that fixes this issue. - -Make sure you are at least using Vim 7.4, with patches 1-7. - -If you are stuck on an older version of Vim 7.4 with no way to update, -then simply perform the following commands to fix your current buffer: - -``` -:set regexpengine=1 -:syntax enable -``` - -## Installation - -### Install with [Vundle](https://github.com/gmarik/vundle) - -Add to vimrc: - - Plugin 'pangloss/vim-javascript' - -And install it: - - :so ~/.vimrc - :PluginInstall - -### Install with [pathogen](https://github.com/tpope/vim-pathogen) - - cd ~/.vim/bundle - git clone https://github.com/pangloss/vim-javascript.git - -## Configuration - -The following variables control certain syntax highlighting features. You can -add them to your `.vimrc` to enable/disable their features. - -#### javascript_enable_domhtmlcss - -Enables HTML/CSS syntax highlighting in your JavaScript file. - -Default Value: 0 - -#### b:javascript_fold - -Enables JavaScript code folding. - -Default Value: 1 - - -#### javascript_ignore_javaScriptdoc - -Disables JSDoc syntax highlighting - -Default Value: 0 - -#### Concealing Characters - -You can customize concealing characters by defining one or more of the following -variables: - - let g:javascript_conceal_function = "ƒ" - let g:javascript_conceal_null = "ø" - let g:javascript_conceal_this = "@" - let g:javascript_conceal_return = "⇚" - let g:javascript_conceal_undefined = "¿" - let g:javascript_conceal_NaN = "ℕ" - let g:javascript_conceal_prototype = "¶" - let g:javascript_conceal_static = "•" - let g:javascript_conceal_super = "Ω" - -## Contributing - -This project uses the [git -flow](http://nvie.com/posts/a-successful-git-branching-model/) model for -development. There's [a handy git module for git -flow](//github.com/nvie/gitflow). If you'd like to be added as a contributor, -the price of admission is 1 pull request. Please follow the general code style -guides (read the code) and in your pull request explain the reason for the -proposed change and how it is valuable. - -## Bug report - -Report a bug on [GitHub Issues](https://github.com/pangloss/vim-javascript/issues). diff --git a/bundle/javascript/ftdetect/javascript.vim b/bundle/javascript/ftdetect/javascript.vim deleted file mode 100755 index 036b352..0000000 --- a/bundle/javascript/ftdetect/javascript.vim +++ /dev/null @@ -1,10 +0,0 @@ -au BufNewFile,BufRead *.js setf javascript -au BufNewFile,BufRead *.jsm setf javascript -au BufNewFile,BufRead Jakefile setf javascript - -fun! s:SelectJavascript() - if getline(1) =~# '^#!.*/bin/env\s\+node\>' - set ft=javascript - endif -endfun -au BufNewFile,BufRead * call s:SelectJavascript() diff --git a/bundle/javascript/ftplugin/javascript.vim b/bundle/javascript/ftplugin/javascript.vim deleted file mode 100755 index 9e2fc9b..0000000 --- a/bundle/javascript/ftplugin/javascript.vim +++ /dev/null @@ -1 +0,0 @@ -setlocal suffixesadd+=.js diff --git a/bundle/javascript/indent/javascript.vim b/bundle/javascript/indent/javascript.vim deleted file mode 100755 index 0f526db..0000000 --- a/bundle/javascript/indent/javascript.vim +++ /dev/null @@ -1,529 +0,0 @@ -" Vim indent file -" Language: Javascript -" Acknowledgement: Based off of vim-ruby maintained by Nikolai Weibull http://vim-ruby.rubyforge.org - -" 0. Initialization {{{1 -" ================= - -" Only load this indent file when no other was loaded. -if exists("b:did_indent") - finish -endif -let b:did_indent = 1 - -setlocal nosmartindent - -" Now, set up our indentation expression and keys that trigger it. -setlocal indentexpr=GetJavascriptIndent() -setlocal formatexpr=Fixedgq(v:lnum,v:count) -setlocal indentkeys=0{,0},0),0],0\,:,!^F,o,O,e - -" Only define the function once. -if exists("*GetJavascriptIndent") - finish -endif - -let s:cpo_save = &cpo -set cpo&vim - -" 1. Variables {{{1 -" ============ - -let s:js_keywords = '^\s*\(break\|catch\|const\|continue\|debugger\|delete\|do\|else\|finally\|for\|function\|if\|in\|instanceof\|let\|new\|return\|switch\|this\|throw\|try\|typeof\|var\|void\|while\|with\)' -let s:expr_case = '^\s*\(case\s\+[^\:]*\|default\)\s*:\s*' -" Regex of syntax group names that are or delimit string or are comments. -let s:syng_strcom = 'string\|regex\|comment\c' - -" Regex of syntax group names that are strings. -let s:syng_string = 'regex\c' - -" Regex of syntax group names that are strings or documentation. -let s:syng_multiline = 'comment\c' - -" Regex of syntax group names that are line comment. -let s:syng_linecom = 'linecomment\c' - -" Expression used to check whether we should skip a match with searchpair(). -let s:skip_expr = "synIDattr(synID(line('.'),col('.'),1),'name') =~ '".s:syng_strcom."'" - -let s:line_term = '\s*\%(\%(\/\/\).*\)\=$' - -" Regex that defines continuation lines, not including (, {, or [. -let s:continuation_regex = '\%([\\*+/.:]\|\%(<%\)\@[^{;]*' . s:line_term - -" Regex that defines blocks. -let s:block_regex = '\%([{[]\)\s*\%(|\%([*@]\=\h\w*,\=\s*\)\%(,\s*[*@]\=\h\w*\)*|\)\=' . s:line_term - -let s:var_stmt = '^\s*(const\|let\|var)' - -let s:comma_first = '^\s*,' -let s:comma_last = ',\s*$' - -let s:ternary = '^\s\+[?|:]' -let s:ternary_q = '^\s\+?' - -let s:case_indent = &sw -let s:case_indent_after = &sw -let m = matchlist(&cinoptions, ':\(.\)') -if (len(m) > 2) - let s:case_indent = m[1] -endif -let m = matchlist(&cinoptions, '=\(.\)') -if (len(m) > 2) - let s:case_indent_after = m[1] -endif -" 2. Auxiliary Functions {{{1 -" ====================== - -" Check if the character at lnum:col is inside a string, comment, or is ascii. -function s:IsInStringOrComment(lnum, col) - return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_strcom -endfunction - -" Check if the character at lnum:col is inside a string. -function s:IsInString(lnum, col) - return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_string -endfunction - -" Check if the character at lnum:col is inside a multi-line comment. -function s:IsInMultilineComment(lnum, col) - return !s:IsLineComment(a:lnum, a:col) && synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_multiline -endfunction - -" Check if the character at lnum:col is a line comment. -function s:IsLineComment(lnum, col) - return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_linecom -endfunction - -" Find line above 'lnum' that isn't empty, in a comment, or in a string. -function s:PrevNonBlankNonString(lnum) - let in_block = 0 - let lnum = prevnonblank(a:lnum) - while lnum > 0 - " Go in and out of blocks comments as necessary. - " If the line isn't empty (with opt. comment) or in a string, end search. - let line = getline(lnum) - if line =~ '/\*' - if in_block - let in_block = 0 - else - break - endif - elseif !in_block && line =~ '\*/' - let in_block = 1 - elseif !in_block && line !~ '^\s*\%(//\).*$' && !(s:IsInStringOrComment(lnum, 1) && s:IsInStringOrComment(lnum, strlen(line))) - break - endif - let lnum = prevnonblank(lnum - 1) - endwhile - return lnum -endfunction - -" Find line above 'lnum' that started the continuation 'lnum' may be part of. -function s:GetMSL(lnum, in_one_line_scope) - " Start on the line we're at and use its indent. - let msl = a:lnum - let lnum = s:PrevNonBlankNonString(a:lnum - 1) - while lnum > 0 - " If we have a continuation line, or we're in a string, use line as MSL. - " Otherwise, terminate search as we have found our MSL already. - let line = getline(lnum) - let col = match(line, s:msl_regex) + 1 - if (col > 0 && !s:IsInStringOrComment(lnum, col)) || s:IsInString(lnum, strlen(line)) - let msl = lnum - else - " Don't use lines that are part of a one line scope as msl unless the - " flag in_one_line_scope is set to 1 - " - if a:in_one_line_scope - break - end - let msl_one_line = s:Match(lnum, s:one_line_scope_regex) - if msl_one_line == 0 - break - endif - endif - let lnum = s:PrevNonBlankNonString(lnum - 1) - endwhile - return msl -endfunction - -function s:RemoveTrailingComments(content) - let single = '\/\/\(.*\)\s*$' - let multi = '\/\*\(.*\)\*\/\s*$' - return substitute(substitute(a:content, single, '', ''), multi, '', '') -endfunction - -" Find if the string is inside var statement (but not the first string) -function s:InMultiVarStatement(lnum) - let lnum = s:PrevNonBlankNonString(a:lnum - 1) - -" let type = synIDattr(synID(lnum, indent(lnum) + 1, 0), 'name') - - " loop through previous expressions to find a var statement - while lnum > 0 - let line = getline(lnum) - - " if the line is a js keyword - if (line =~ s:js_keywords) - " check if the line is a var stmt - " if the line has a comma first or comma last then we can assume that we - " are in a multiple var statement - if (line =~ s:var_stmt) - return lnum - endif - - " other js keywords, not a var - return 0 - endif - - let lnum = s:PrevNonBlankNonString(lnum - 1) - endwhile - - " beginning of program, not a var - return 0 -endfunction - -" Find line above with beginning of the var statement or returns 0 if it's not -" this statement -function s:GetVarIndent(lnum) - let lvar = s:InMultiVarStatement(a:lnum) - let prev_lnum = s:PrevNonBlankNonString(a:lnum - 1) - - if lvar - let line = s:RemoveTrailingComments(getline(prev_lnum)) - - " if the previous line doesn't end in a comma, return to regular indent - if (line !~ s:comma_last) - return indent(prev_lnum) - &sw - else - return indent(lvar) + &sw - endif - endif - - return -1 -endfunction - - -" Check if line 'lnum' has more opening brackets than closing ones. -function s:LineHasOpeningBrackets(lnum) - let open_0 = 0 - let open_2 = 0 - let open_4 = 0 - let line = getline(a:lnum) - let pos = match(line, '[][(){}]', 0) - while pos != -1 - if !s:IsInStringOrComment(a:lnum, pos + 1) - let idx = stridx('(){}[]', line[pos]) - if idx % 2 == 0 - let open_{idx} = open_{idx} + 1 - else - let open_{idx - 1} = open_{idx - 1} - 1 - endif - endif - let pos = match(line, '[][(){}]', pos + 1) - endwhile - return (open_0 > 0) . (open_2 > 0) . (open_4 > 0) -endfunction - -function s:Match(lnum, regex) - let col = match(getline(a:lnum), a:regex) + 1 - return col > 0 && !s:IsInStringOrComment(a:lnum, col) ? col : 0 -endfunction - -function s:IndentWithContinuation(lnum, ind, width) - " Set up variables to use and search for MSL to the previous line. - let p_lnum = a:lnum - let lnum = s:GetMSL(a:lnum, 1) - let line = getline(lnum) - - " If the previous line wasn't a MSL and is continuation return its indent. - " TODO: the || s:IsInString() thing worries me a bit. - if p_lnum != lnum - if s:Match(p_lnum,s:continuation_regex)||s:IsInString(p_lnum,strlen(line)) - return a:ind - endif - endif - - " Set up more variables now that we know we aren't continuation bound. - let msl_ind = indent(lnum) - - " If the previous line ended with [*+/.-=], start a continuation that - " indents an extra level. - if s:Match(lnum, s:continuation_regex) - if lnum == p_lnum - return msl_ind + a:width - else - return msl_ind - endif - endif - - return a:ind -endfunction - -function s:InOneLineScope(lnum) - let msl = s:GetMSL(a:lnum, 1) - if msl > 0 && s:Match(msl, s:one_line_scope_regex) - return msl - endif - return 0 -endfunction - -function s:ExitingOneLineScope(lnum) - let msl = s:GetMSL(a:lnum, 1) - if msl > 0 - " if the current line is in a one line scope .. - if s:Match(msl, s:one_line_scope_regex) - return 0 - else - let prev_msl = s:GetMSL(msl - 1, 1) - if s:Match(prev_msl, s:one_line_scope_regex) - return prev_msl - endif - endif - endif - return 0 -endfunction - -" 3. GetJavascriptIndent Function {{{1 -" ========================= - -function GetJavascriptIndent() - " 3.1. Setup {{{2 - " ---------- - - " Set up variables for restoring position in file. Could use v:lnum here. - let vcol = col('.') - - " 3.2. Work on the current line {{{2 - " ----------------------------- - - let ind = -1 - " Get the current line. - let line = getline(v:lnum) - " previous nonblank line number - let prevline = prevnonblank(v:lnum - 1) - - if (line =~ s:expr_case) - if (getline(prevline) =~ s:expr_case) - return indent(prevline) - else - if (getline(prevline) =~ s:block_regex) - return indent(prevline) + s:case_indent - else - return indent(prevline) - s:case_indent_after - endif - endif - endif - " If we got a closing bracket on an empty line, find its match and indent - " according to it. For parentheses we indent to its column - 1, for the - " others we indent to the containing line's MSL's level. Return -1 if fail. - let col = matchend(line, '^\s*[],})]') - if col > 0 && !s:IsInStringOrComment(v:lnum, col) - call cursor(v:lnum, col) - - let lvar = s:InMultiVarStatement(v:lnum) - if lvar - let prevline_contents = s:RemoveTrailingComments(getline(prevline)) - - " check for comma first - if (line[col - 1] =~ ',') - " if the previous line ends in comma or semicolon don't indent - if (prevline_contents =~ '[;,]\s*$') - return indent(s:GetMSL(line('.'), 0)) - " get previous line indent, if it's comma first return prevline indent - elseif (prevline_contents =~ s:comma_first) - return indent(prevline) - " otherwise we indent 1 level - else - return indent(lvar) + &sw - endif - endif - endif - - - let bs = strpart('(){}[]', stridx(')}]', line[col - 1]) * 2, 2) - if searchpair(escape(bs[0], '\['), '', bs[1], 'bW', s:skip_expr) > 0 - if line[col-1]==')' && col('.') != col('$') - 1 - let ind = virtcol('.')-1 - else - let ind = indent(s:GetMSL(line('.'), 0)) - endif - endif - return ind - endif - - " If the line is comma first, dedent 1 level - if (getline(prevline) =~ s:comma_first) - return indent(prevline) - &sw - endif - if (getline(prevline) =~ s:expr_case) - return indent(prevline) + s:case_indent_after - endif - - if (line =~ s:ternary) - if (getline(prevline) =~ s:ternary_q) - return indent(prevline) - else - return indent(prevline) + &sw - endif - endif - - " If we are in a multi-line comment, cindent does the right thing. - if s:IsInMultilineComment(v:lnum, 1) && !s:IsLineComment(v:lnum, 1) - return cindent(v:lnum) - endif - - " Check for multiple var assignments -" let var_indent = s:GetVarIndent(v:lnum) -" if var_indent >= 0 -" return var_indent -" endif - - " 3.3. Work on the previous line. {{{2 - " ------------------------------- - - " If the line is empty and the previous nonblank line was a multi-line - " comment, use that comment's indent. Deduct one char to account for the - " space in ' */'. - if line =~ '^\s*$' && s:IsInMultilineComment(prevline, 1) - return indent(prevline) - 1 - endif - - " Find a non-blank, non-multi-line string line above the current line. - let lnum = s:PrevNonBlankNonString(v:lnum - 1) - - " If the line is empty and inside a string, use the previous line. - if line =~ '^\s*$' && lnum != prevline - return indent(prevnonblank(v:lnum)) - endif - - " At the start of the file use zero indent. - if lnum == 0 - return 0 - endif - - - " If the previous line ended with a block opening, add a level of indent. - if s:Match(lnum, s:block_regex) - if (line =~ s:expr_case) - return indent(s:GetMSL(lnum, 0)) + &sw/2 - else - return indent(s:GetMSL(lnum, 0)) + &sw - endif - endif - - " Set up variables for current line. - let line = getline(lnum) - let ind = indent(lnum) - " If the previous line contained an opening bracket, and we are still in it, - " add indent depending on the bracket type. - if line =~ '[[({]' - let counts = s:LineHasOpeningBrackets(lnum) - if counts[0] == '1' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0 - if col('.') + 1 == col('$') - return ind + &sw - else - return virtcol('.') - endif - elseif counts[1] == '1' || counts[2] == '1' - return ind + &sw - else - call cursor(v:lnum, vcol) - end - endif - - " 3.4. Work on the MSL line. {{{2 - " -------------------------- - - let ind_con = ind - let ind = s:IndentWithContinuation(lnum, ind_con, &sw) - - " }}}2 - " - " - let ols = s:InOneLineScope(lnum) - if ols > 0 - let ind = ind + &sw - else - let ols = s:ExitingOneLineScope(lnum) - while ols > 0 && ind > 0 - let ind = ind - &sw - let ols = s:InOneLineScope(ols - 1) - endwhile - endif - - return ind -endfunction - -" }}}1 - -let &cpo = s:cpo_save -unlet s:cpo_save - -function! Fixedgq(lnum, count) - let l:tw = &tw ? &tw : 80; - - let l:count = a:count - let l:first_char = indent(a:lnum) + 1 - - if mode() == 'i' " gq was not pressed, but tw was set - return 1 - endif - - " This gq is only meant to do code with strings, not comments - if s:IsLineComment(a:lnum, l:first_char) || s:IsInMultilineComment(a:lnum, l:first_char) - return 1 - endif - - if len(getline(a:lnum)) < l:tw && l:count == 1 " No need for gq - return 1 - endif - - " Put all the lines on one line and do normal spliting after that - if l:count > 1 - while l:count > 1 - let l:count -= 1 - normal J - endwhile - endif - - let l:winview = winsaveview() - - call cursor(a:lnum, l:tw + 1) - let orig_breakpoint = searchpairpos(' ', '', '\.', 'bcW', '', a:lnum) - call cursor(a:lnum, l:tw + 1) - let breakpoint = searchpairpos(' ', '', '\.', 'bcW', s:skip_expr, a:lnum) - - " No need for special treatment, normal gq handles edgecases better - if breakpoint[1] == orig_breakpoint[1] - call winrestview(l:winview) - return 1 - endif - - " Try breaking after string - if breakpoint[1] <= indent(a:lnum) - call cursor(a:lnum, l:tw + 1) - let breakpoint = searchpairpos('\.', '', ' ', 'cW', s:skip_expr, a:lnum) - endif - - - if breakpoint[1] != 0 - call feedkeys("r\") - else - let l:count = l:count - 1 - endif - - " run gq on new lines - if l:count == 1 - call feedkeys("gqq") - endif - - return 0 -endfunction diff --git a/bundle/javascript/syntax/javascript.vim b/bundle/javascript/syntax/javascript.vim deleted file mode 100755 index d49cd02..0000000 --- a/bundle/javascript/syntax/javascript.vim +++ /dev/null @@ -1,336 +0,0 @@ -" Vim syntax file -" Language: JavaScript -" Maintainer: vim-javascript community -" URL: https://github.com/pangloss/vim-javascript - -if !exists("main_syntax") - if version < 600 - syntax clear - elseif exists("b:current_syntax") - finish - endif - let main_syntax = 'javascript' -endif - -if !exists('g:javascript_conceal') - let g:javascript_conceal = 0 -endif - -"" Drop fold if it is set but VIM doesn't support it. -let b:javascript_fold='true' -if version < 600 " Don't support the old version - unlet! b:javascript_fold -endif - -"" dollar sign is permittd anywhere in an identifier -setlocal iskeyword+=$ - -syntax sync fromstart - -syntax match jsNoise /\%(:\|,\|\;\|\.\)/ - -"" Program Keywords -syntax keyword jsStorageClass const var let -syntax keyword jsOperator delete instanceof typeof void new in -syntax match jsOperator /\(!\||\|&\|+\|-\|<\|>\|=\|%\|\/\|*\|\~\|\^\)/ -syntax keyword jsBooleanTrue true -syntax keyword jsBooleanFalse false -syntax keyword jsModules import export contained -syntax keyword jsModuleWords default from as contained -syntax keyword jsOf of contained -syntax keyword jsArgsObj arguments - -syntax region jsImportContainer start="^\s\?import \?" end=";\|$" contains=jsModules,jsModuleWords,jsLineComment,jsComment,jsStringS,jsStringD,jsTemplateString,jsNoise,jsBlock - -syntax region jsExportContainer start="^\s\?export \?" end="$" contains=jsModules,jsModuleWords,jsComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsClass,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsAssignmentExpr,jsArgsObj,jsBlock - -"" JavaScript comments -syntax keyword jsCommentTodo TODO FIXME XXX TBD contained -syntax region jsLineComment start=+\/\/+ end=+$+ keepend contains=jsCommentTodo,@Spell -syntax region jsEnvComment start="\%^#!" end="$" display -syntax region jsLineComment start=+^\s*\/\/+ skip=+\n\s*\/\/+ end=+$+ keepend contains=jsCommentTodo,@Spell fold -syntax region jsCvsTag start="\$\cid:" end="\$" oneline contained -syntax region jsComment start="/\*" end="\*/" contains=jsCommentTodo,jsCvsTag,@Spell fold - -"" JSDoc / JSDoc Toolkit -if !exists("javascript_ignore_javaScriptdoc") - syntax case ignore - - "" syntax coloring for javadoc comments (HTML) - "syntax include @javaHtml :p:h/html.vim - "unlet b:current_syntax - - syntax region jsBlockComment matchgroup=jsComment start="/\*\s*" end="\*/" contains=jsDocTags,jsCommentTodo,jsCvsTag,@jsHtml,@Spell fold - - " tags containing a param - syntax match jsDocTags contained "@\(alias\|api\|augments\|borrows\|class\|constructs\|default\|defaultvalue\|emits\|exception\|exports\|extends\|file\|fires\|kind\|listens\|member\|member[oO]f\|mixes\|module\|name\|namespace\|requires\|template\|throws\|var\|variation\|version\)\>" nextgroup=jsDocParam skipwhite - " tags containing type and param - syntax match jsDocTags contained "@\(arg\|argument\|param\|property\|prop\)\>" nextgroup=jsDocType skipwhite - " tags containing type but no param - syntax match jsDocTags contained "@\(callback\|define\|enum\|external\|implements\|this\|type\|typedef\|return\|returns\)\>" nextgroup=jsDocTypeNoParam skipwhite - " tags containing references - syntax match jsDocTags contained "@\(lends\|see\|tutorial\)\>" nextgroup=jsDocSeeTag skipwhite - " other tags (no extra syntax) - syntax match jsDocTags contained "@\(abstract\|access\|author\|classdesc\|constant\|const\|constructor\|copyright\|deprecated\|desc\|description\|dict\|event\|example\|file[oO]verview\|final\|function\|global\|ignore\|inheritDoc\|inner\|instance\|interface\|license\|method\|mixin\|nosideeffects\|override\|overview\|preserve\|private\|protected\|public\|readonly\|since\|static\|struct\|todo\|summary\|undocumented\|virtual\)\>" - - syntax region jsDocType start="{" end="}" oneline contained nextgroup=jsDocParam skipwhite - syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" nextgroup=jsDocParam skipwhite - syntax region jsDocTypeNoParam start="{" end="}" oneline contained - syntax match jsDocTypeNoParam contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" - syntax match jsDocParam contained "\%(#\|\"\|{\|}\|\w\|\.\|:\|\/\|\[\|]\|=\)\+" - syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags - - syntax case match -endif "" JSDoc end - -syntax case match - -"" Syntax in the JavaScript code -syntax match jsFuncCall /\k\+\%(\s*(\)\@=/ -syntax match jsSpecial "\v\\%(0|\\x\x\{2\}\|\\u\x\{4\}\|\c[A-Z]|.)" contained -syntax match jsTemplateVar "\${.\{-}}" contained -syntax region jsStringD start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@htmlPreproc,@Spell -syntax region jsStringS start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@htmlPreproc,@Spell -syntax region jsTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`+ contains=jsTemplateVar,jsSpecial,@htmlPreproc -syntax region jsTaggedTemplate start=/\k\+\(\(\n\|\s\)\+\)\?`/ end=+`+ contains=jsTemplateString keepend -syntax region jsRegexpCharClass start=+\[+ skip=+\\.+ end=+\]+ contained -syntax match jsRegexpBoundary "\v%(\<@![\^$]|\\[bB])" contained -syntax match jsRegexpBackRef "\v\\[1-9][0-9]*" contained -syntax match jsRegexpQuantifier "\v\\@]" contained -syntax cluster jsRegexpSpecial contains=jsSpecial,jsRegexpBoundary,jsRegexpBackRef,jsRegexpQuantifier,jsRegexpOr,jsRegexpMod -syntax region jsRegexpGroup start="\\\@\|\<0[xX]\x\+\>/ -syntax keyword jsNumber Infinity -syntax match jsFloat /\<-\=\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>/ -syntax match jsObjectKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\)\@=/ contains=jsFunctionKey contained -syntax match jsFunctionKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function\s*\)\@=/ contained -syntax match jsDecorator "@" display contains=jsDecoratorFunction nextgroup=jsDecoratorFunction skipwhite -syntax match jsDecoratorFunction "[a-zA-Z_][a-zA-Z0-9_.]*" display contained nextgroup=jsFunc skipwhite - -syntax match jsAssignmentExpr /\v%([a-zA-Z_$]\k*\.)*[a-zA-Z_$]\k*\s*\=\(>\)\@!/ contains=jsFuncAssignExpr,jsAssignExpIdent,jsPrototype,jsOperator,jsThis,jsNoise,jsArgsObj -syntax match jsAssignExpIdent /\v[a-zA-Z_$]\k*\ze%(\s*\=)/ contained -syntax match jsFuncAssignExpr /\v%(%([a-zA-Z_$]\k*\.)*[a-zA-Z_$]\k*\s*\=\s*){-1,}\ze%(function\s*\*?\s*\()/ contains=jsFuncAssignObjChain,jsFuncAssignIdent,jsFunction,jsPrototype,jsOperator,jsThis,jsArgsObj contained -syntax match jsFuncAssignObjChain /\v%([a-zA-Z_$]\k*\.)+/ contains=jsPrototype,jsNoise contained -syntax match jsFuncAssignIdent /\v[a-zA-Z_$]\k*\ze%(\s*\=)/ contained - -exe 'syntax keyword jsNull null '.(exists('g:javascript_conceal_null') ? 'conceal cchar='.g:javascript_conceal_null : '') -exe 'syntax keyword jsReturn return '.(exists('g:javascript_conceal_return') ? 'conceal cchar='.g:javascript_conceal_return : '') -exe 'syntax keyword jsUndefined undefined '.(exists('g:javascript_conceal_undefined') ? 'conceal cchar='.g:javascript_conceal_undefined : '') -exe 'syntax keyword jsNan NaN '.(exists('g:javascript_conceal_NaN') ? 'conceal cchar='.g:javascript_conceal_NaN : '') -exe 'syntax keyword jsPrototype prototype '.(exists('g:javascript_conceal_prototype') ? 'conceal cchar='.g:javascript_conceal_prototype : '') -exe 'syntax keyword jsThis this '.(exists('g:javascript_conceal_this') ? 'conceal cchar='.g:javascript_conceal_this : '') -exe 'syntax keyword jsStatic static '.(exists('g:javascript_conceal_static') ? 'conceal cchar='.g:javascript_conceal_static : '') -exe 'syntax keyword jsSuper super '.(exists('g:javascript_conceal_super') ? 'conceal cchar='.g:javascript_conceal_super : '') - -"" Statement Keywords -syntax keyword jsStatement break continue with -syntax keyword jsConditional if else switch -syntax keyword jsRepeat do while for -syntax keyword jsLabel case default -syntax keyword jsKeyword yield -syntax keyword jsClass extends class -syntax keyword jsException try catch throw finally -syntax keyword jsAsyncKeyword async await - -syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set RegExp String Proxy Promise ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray Intl JSON Math console document window -syntax match jsGlobalObjects /\%(Intl\.\)\@<=\(Collator\|DateTimeFormat\|NumberFormat\)/ - -syntax keyword jsExceptions Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError - -syntax keyword jsBuiltins decodeURI decodeURIComponent encodeURI encodeURIComponent eval isFinite isNaN parseFloat parseInt uneval - -syntax keyword jsFutureKeys abstract enum int short boolean interface byte long char final native synchronized float package throws goto private transient debugger implements protected volatile double public - -"" DOM/HTML/CSS specified things - -" DOM2 Objects -syntax keyword jsGlobalObjects DOMImplementation DocumentFragment Document Node NodeList NamedNodeMap CharacterData Attr Element Text Comment CDATASection DocumentType Notation Entity EntityReference ProcessingInstruction -syntax keyword jsExceptions DOMException - -" DOM2 CONSTANT -syntax keyword jsDomErrNo INDEX_SIZE_ERR DOMSTRING_SIZE_ERR HIERARCHY_REQUEST_ERR WRONG_DOCUMENT_ERR INVALID_CHARACTER_ERR NO_DATA_ALLOWED_ERR NO_MODIFICATION_ALLOWED_ERR NOT_FOUND_ERR NOT_SUPPORTED_ERR INUSE_ATTRIBUTE_ERR INVALID_STATE_ERR SYNTAX_ERR INVALID_MODIFICATION_ERR NAMESPACE_ERR INVALID_ACCESS_ERR -syntax keyword jsDomNodeConsts ELEMENT_NODE ATTRIBUTE_NODE TEXT_NODE CDATA_SECTION_NODE ENTITY_REFERENCE_NODE ENTITY_NODE PROCESSING_INSTRUCTION_NODE COMMENT_NODE DOCUMENT_NODE DOCUMENT_TYPE_NODE DOCUMENT_FRAGMENT_NODE NOTATION_NODE - -" HTML events and internal variables -syntax case ignore -syntax keyword jsHtmlEvents onblur onclick oncontextmenu ondblclick onfocus onkeydown onkeypress onkeyup onmousedown onmousemove onmouseout onmouseover onmouseup onresize -syntax case match - -" Follow stuff should be highligh within a special context -" While it can't be handled with context depended with Regex based highlight -" So, turn it off by default -if exists("javascript_enable_domhtmlcss") - - " DOM2 things - syntax match jsDomElemAttrs contained /\%(nodeName\|nodeValue\|nodeType\|parentNode\|childNodes\|firstChild\|lastChild\|previousSibling\|nextSibling\|attributes\|ownerDocument\|namespaceURI\|prefix\|localName\|tagName\)\>/ - syntax match jsDomElemFuncs contained /\%(insertBefore\|replaceChild\|removeChild\|appendChild\|hasChildNodes\|cloneNode\|normalize\|isSupported\|hasAttributes\|getAttribute\|setAttribute\|removeAttribute\|getAttributeNode\|setAttributeNode\|removeAttributeNode\|getElementsByTagName\|getAttributeNS\|setAttributeNS\|removeAttributeNS\|getAttributeNodeNS\|setAttributeNodeNS\|getElementsByTagNameNS\|hasAttribute\|hasAttributeNS\)\>/ nextgroup=jsParen skipwhite - " HTML things - syntax match jsHtmlElemAttrs contained /\%(className\|clientHeight\|clientLeft\|clientTop\|clientWidth\|dir\|id\|innerHTML\|lang\|length\|offsetHeight\|offsetLeft\|offsetParent\|offsetTop\|offsetWidth\|scrollHeight\|scrollLeft\|scrollTop\|scrollWidth\|style\|tabIndex\|title\)\>/ - syntax match jsHtmlElemFuncs contained /\%(blur\|click\|focus\|scrollIntoView\|addEventListener\|dispatchEvent\|removeEventListener\|item\)\>/ nextgroup=jsParen skipwhite - - " CSS Styles in JavaScript - syntax keyword jsCssStyles contained color font fontFamily fontSize fontSizeAdjust fontStretch fontStyle fontVariant fontWeight letterSpacing lineBreak lineHeight quotes rubyAlign rubyOverhang rubyPosition - syntax keyword jsCssStyles contained textAlign textAlignLast textAutospace textDecoration textIndent textJustify textJustifyTrim textKashidaSpace textOverflowW6 textShadow textTransform textUnderlinePosition - syntax keyword jsCssStyles contained unicodeBidi whiteSpace wordBreak wordSpacing wordWrap writingMode - syntax keyword jsCssStyles contained bottom height left position right top width zIndex - syntax keyword jsCssStyles contained border borderBottom borderLeft borderRight borderTop borderBottomColor borderLeftColor borderTopColor borderBottomStyle borderLeftStyle borderRightStyle borderTopStyle borderBottomWidth borderLeftWidth borderRightWidth borderTopWidth borderColor borderStyle borderWidth borderCollapse borderSpacing captionSide emptyCells tableLayout - syntax keyword jsCssStyles contained margin marginBottom marginLeft marginRight marginTop outline outlineColor outlineStyle outlineWidth padding paddingBottom paddingLeft paddingRight paddingTop - syntax keyword jsCssStyles contained listStyle listStyleImage listStylePosition listStyleType - syntax keyword jsCssStyles contained background backgroundAttachment backgroundColor backgroundImage gackgroundPosition backgroundPositionX backgroundPositionY backgroundRepeat - syntax keyword jsCssStyles contained clear clip clipBottom clipLeft clipRight clipTop content counterIncrement counterReset cssFloat cursor direction display filter layoutGrid layoutGridChar layoutGridLine layoutGridMode layoutGridType - syntax keyword jsCssStyles contained marks maxHeight maxWidth minHeight minWidth opacity MozOpacity overflow overflowX overflowY verticalAlign visibility zoom cssText - syntax keyword jsCssStyles contained scrollbar3dLightColor scrollbarArrowColor scrollbarBaseColor scrollbarDarkShadowColor scrollbarFaceColor scrollbarHighlightColor scrollbarShadowColor scrollbarTrackColor - - " Highlight ways - syntax match jsDotNotation "\." nextgroup=jsPrototype,jsDomElemAttrs,jsDomElemFuncs,jsHtmlElemAttrs,jsHtmlElemFuncs - syntax match jsDotNotation "\.style\." nextgroup=jsCssStyles - -endif "DOM/HTML/CSS - -"" end DOM/HTML/CSS specified things - -"" Code blocks -syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTaggedTemplate,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsStatic,jsSuper,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr,jsImportContainer,jsExportContainer,jsClass,jsArgsObj,jsDecorator,jsAsyncKeyword -syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException -syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc fold -syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsOf,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold -syntax region jsBlock matchgroup=jsBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,jsObjectKey,@htmlPreproc fold -syntax region jsFuncBlock matchgroup=jsFuncBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,@htmlPreproc contained fold -syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=+?+ end=+:+ contains=@jsExpression,jsTernaryIf - -"" catch errors caused by wrong parenthesis -syntax match jsParensError ")\|}\|\]" -syntax match jsParensErrA contained "\]" -syntax match jsParensErrB contained ")" -syntax match jsParensErrC contained "}" - -if main_syntax == "javascript" - syntax sync clear - syntax sync ccomment jsComment minlines=200 - syntax sync match jsHighlight grouphere jsBlock /{/ -endif - -exe 'syntax match jsFunction /\/ nextgroup=jsGenerator,jsFuncName,jsFuncArgs skipwhite '.(exists('g:javascript_conceal_function') ? 'conceal cchar='.g:javascript_conceal_function : '') - -syntax match jsGenerator contained '\*' nextgroup=jsFuncName skipwhite -syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=jsFuncArgs skipwhite -syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsAssignmentExpr nextgroup=jsFuncBlock keepend skipwhite skipempty -syntax match jsFuncArgCommas contained ',' -syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ - -syntax match jsArrowFunction /=>/ - -" Define the default highlighting. -" For version 5.7 and earlier: only when not done already -" For version 5.8 and later: only when an item doesn't have highlighting yet -if version >= 508 || !exists("did_javascript_syn_inits") - if version < 508 - let did_javascript_syn_inits = 1 - command -nargs=+ HiLink hi link - else - command -nargs=+ HiLink hi def link - endif - HiLink jsFuncArgRest Special - HiLink jsComment Comment - HiLink jsLineComment Comment - HiLink jsEnvComment PreProc - HiLink jsBlockComment Comment - HiLink jsCommentTodo Todo - HiLink jsCvsTag Function - HiLink jsDocTags Special - HiLink jsDocSeeTag Function - HiLink jsDocType Type - HiLink jsDocTypeNoParam Type - HiLink jsDocParam Label - HiLink jsStringS String - HiLink jsStringD String - HiLink jsTemplateString String - HiLink jsTaggedTemplate StorageClass - HiLink jsTernaryIfOperator Conditional - HiLink jsRegexpString String - HiLink jsRegexpBoundary SpecialChar - HiLink jsRegexpQuantifier SpecialChar - HiLink jsRegexpOr Conditional - HiLink jsRegexpMod SpecialChar - HiLink jsRegexpBackRef SpecialChar - HiLink jsRegexpGroup jsRegexpString - HiLink jsRegexpCharClass Character - HiLink jsCharacter Character - HiLink jsPrototype Special - HiLink jsConditional Conditional - HiLink jsBranch Conditional - HiLink jsLabel Label - HiLink jsReturn Statement - HiLink jsRepeat Repeat - HiLink jsStatement Statement - HiLink jsException Exception - HiLink jsKeyword Keyword - HiLink jsAsyncKeyword Keyword - HiLink jsArrowFunction Type - HiLink jsFunction Type - HiLink jsGenerator jsFunction - HiLink jsFuncName Function - HiLink jsArgsObj Special - HiLink jsError Error - HiLink jsParensError Error - HiLink jsParensErrA Error - HiLink jsParensErrB Error - HiLink jsParensErrC Error - HiLink jsOperator Operator - HiLink jsOf Operator - HiLink jsStorageClass StorageClass - HiLink jsClass Structure - HiLink jsThis Special - HiLink jsStatic Special - HiLink jsSuper Special - HiLink jsNan Number - HiLink jsNull Type - HiLink jsUndefined Type - HiLink jsNumber Number - HiLink jsFloat Float - HiLink jsBooleanTrue Boolean - HiLink jsBooleanFalse Boolean - HiLink jsNoise Noise - HiLink jsBrackets Noise - HiLink jsParens Noise - HiLink jsBraces Noise - HiLink jsFuncBraces Noise - HiLink jsFuncParens Noise - HiLink jsSpecial Special - HiLink jsTemplateVar Special - HiLink jsGlobalObjects Special - HiLink jsExceptions Special - HiLink jsFutureKeys Special - HiLink jsBuiltins Special - HiLink jsModules Include - HiLink jsModuleWords Include - HiLink jsDecorator Special - - HiLink jsDomErrNo Constant - HiLink jsDomNodeConsts Constant - HiLink jsDomElemAttrs Label - HiLink jsDomElemFuncs PreProc - - HiLink jsHtmlEvents Special - HiLink jsHtmlElemAttrs Label - HiLink jsHtmlElemFuncs PreProc - - HiLink jsCssStyles Label - - delcommand HiLink -endif - -" Define the htmlJavaScript for HTML syntax html.vim -syntax cluster htmlJavaScript contains=@jsAll,jsBracket,jsParen,jsBlock -syntax cluster javaScriptExpression contains=@jsAll,jsBracket,jsParen,jsBlock,@htmlPreproc - -" Vim's default html.vim highlights all javascript as 'Special' -hi! def link javaScript NONE - -let b:current_syntax = "javascript" -if main_syntax == 'javascript' - unlet main_syntax -endif diff --git a/bundle/jst/LICENSE b/bundle/jst/LICENSE deleted file mode 100755 index 7f4bc6f..0000000 --- a/bundle/jst/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (C) 2011 by Brian Collins - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/bundle/jst/README b/bundle/jst/README deleted file mode 100755 index 5281201..0000000 --- a/bundle/jst/README +++ /dev/null @@ -1,4 +0,0 @@ -A vim plugin for highlighting and indenting JST/EJS syntax. Based on the eruby syntax from vim-ruby. -Probably not 100% correct (especially indentation), but it works for most cases I've tried. - -This plugin may require the vim-javascript plugin ( available here: https://github.com/pangloss/vim-javascript ) diff --git a/bundle/jst/ftdetect/jst.vim b/bundle/jst/ftdetect/jst.vim deleted file mode 100755 index ecc2577..0000000 --- a/bundle/jst/ftdetect/jst.vim +++ /dev/null @@ -1,5 +0,0 @@ -au BufNewFile,BufRead *.ejs set filetype=jst -au BufNewFile,BufRead *.jst set filetype=jst -au BufNewFile,BufRead *.djs set filetype=jst -au BufNewFile,BufRead *.hamljs set filetype=jst -au BufNewFile,BufRead *.ect set filetype=jst diff --git a/bundle/jst/indent/jst.vim b/bundle/jst/indent/jst.vim deleted file mode 100755 index c916274..0000000 --- a/bundle/jst/indent/jst.vim +++ /dev/null @@ -1,75 +0,0 @@ -if exists("b:did_indent") - finish -endif - -runtime! indent/javascript.vim -unlet! b:did_indent -setlocal indentexpr= - -if exists("b:jst_subtype") - exe "runtime! indent/".b:jst_subtype.".vim" -else - runtime! indent/html.vim -endif -unlet! b:did_indent - -if &l:indentexpr == '' - if &l:cindent - let &l:indentexpr = 'cindent(v:lnum)' - else - let &l:indentexpr = 'indent(prevnonblank(v:lnum-1))' - endif -endif -let b:jst_subtype_indentexpr = &l:indentexpr - -let b:did_indent = 1 - -setlocal indentexpr=GetJstIndent() -setlocal indentkeys=o,O,*,<>>,{,},0),0],o,O,!^F,=end,=else,=elsif,=rescue,=ensure,=when - -" Only define the function once. -if exists("*GetJstIndent") - finish -endif - -function! GetJstIndent(...) - if a:0 && a:1 == '.' - let v:lnum = line('.') - elseif a:0 && a:1 =~ '^\d' - let v:lnum = a:1 - endif - let vcol = col('.') - call cursor(v:lnum,1) - let injavascript = searchpair('<%','','%>','W') - call cursor(v:lnum,vcol) - if injavascript && getline(v:lnum) !~ '^<%\|^\s*[-=]\=%>' - let ind = GetJavascriptIndent() - else - exe "let ind = ".b:jst_subtype_indentexpr - endif - let lnum = prevnonblank(v:lnum-1) - let line = getline(lnum) - let cline = getline(v:lnum) - if cline =~# '^\s*<%[-=]\=\s*\%(}.\{-\}\)\s*\%([-=]\=%>\|$\)' - let ind = ind - &sw - endif - if line =~# '\S\s*<%[-=]\=\s*\%(}\).\{-\}\s*\%([-=]\=%>\|$\)' - let ind = ind - &sw - endif - if line =~# '\%({\|\' - let ind = ind + &sw - endif - if line =~# '^\s*<%[=#-]\=\s*$' && cline !~# '^\s*end\>' - let ind = ind + &sw - endif - if line !~# '^\s*<%' && line =~# '%>\s*$' - let ind = ind - &sw - endif - if cline =~# '^\s*[-=]\=%>\s*$' - let ind = ind - &sw - endif - return ind -endfunction - -" vim:set sw=2 sts=2 ts=8 noet: - diff --git a/bundle/jst/syntax/jst.vim b/bundle/jst/syntax/jst.vim deleted file mode 100755 index 8c43c52..0000000 --- a/bundle/jst/syntax/jst.vim +++ /dev/null @@ -1,87 +0,0 @@ -if exists("b:current_syntax") - finish -endif - -if !exists("main_syntax") - let main_syntax = 'jst' -endif - -if !exists("g:jst_default_subtype") - let g:jst_default_subtype = "html" -endif - -if &filetype =~ '^jst\.' - let b:jst_subtype = matchstr(&filetype,'^jst\.\zs\w\+') -elseif !exists("b:jst_subtype") && main_syntax == 'jst' - let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$") - let b:jst_subtype = matchstr(s:lines,'jst_subtype=\zs\w\+') - if b:jst_subtype == '' - let b:jst_subtype = matchstr(substitute(expand("%:t"),'\c\%(\.jst\)\+$','',''),'\.\zs\w\+$') - endif - if b:jst_subtype == 'rhtml' - let b:jst_subtype = 'html' - elseif b:jst_subtype == 'hamljs' - let b:jst_subtype = 'haml' - elseif b:jst_subtype == 'ejs' - let b:jst_subtype = 'html' - elseif b:jst_subtype == 'ect' - let b:jst_subtype = 'html' - elseif b:jst_subtype == 'djs' - let b:jst_subtype = 'html' - elseif b:jst_subtype == 'rb' - let b:jst_subtype = 'ruby' - elseif b:jst_subtype == 'yml' - let b:jst_subtype = 'yaml' - elseif b:jst_subtype == 'js' - let b:jst_subtype = 'javascript' - elseif b:jst_subtype == 'txt' - " Conventional; not a real file type - let b:jst_subtype = 'text' - elseif b:jst_subtype == '' - let b:jst_subtype = g:jst_default_subtype - endif -endif - -if !exists("b:jst_nest_level") - let b:jst_nest_level = strlen(substitute(substitute(substitute(expand("%:t"),'@','','g'),'\c\.\%(erb\|rhtml\)\>','@','g'),'[^@]','','g')) -endif -if !b:jst_nest_level - let b:jst_nest_level = 1 -endif - -if exists("b:jst_subtype") && b:jst_subtype != '' - exe "runtime! syntax/".b:jst_subtype.".vim" - unlet! b:current_syntax -endif - -syn include @jsTop syntax/javascript.vim - -syn cluster jstRegions contains=jstOneLiner,jstBlock,jstExpression,jstComment - -exe 'syn region jstOneLiner matchgroup=jstDelimiter start="^%\{1,'.b:jst_nest_level.'\}%\@!" end="$" contains=@jsTop containedin=ALLBUT,@jstRegions keepend oneline' -exe 'syn region jstBlock matchgroup=jstDelimiter start="<%\{1,'.b:jst_nest_level.'\}%\@!-\=" end="[=-]\=%\@" contains=@jsTop containedin=ALLBUT,@jstRegions keepend' -exe 'syn region jstExpression matchgroup=jstDelimiter start="<%\{1,'.b:jst_nest_level.'\}=\{1,4}" end="[=-]\=%\@" contains=@jsTop containedin=ALLBUT,@jstRegions keepend' -exe 'syn region jstComment matchgroup=jstDelimiter start="<%\{1,'.b:jst_nest_level.'\}#" end="%\@" contains=jsTodo,@Spell containedin=ALLBUT,@jstRegions keepend' - -" Define the default highlighting. - -hi def link jstDelimiter PreProc -hi def link jstComment Comment - -let b:current_syntax = 'jst' - -if main_syntax == 'jst' - unlet main_syntax -endif - -set commentstring= - -if exists("loaded_matchit") - let b:match_ignorecase = 1 - let b:match_words = '<:>,' . - \ '<\@<=[ou]l\>[^>]*\%(>\|$\):<\@<=li\>:<\@<=/[ou]l>,' . - \ '<\@<=dl\>[^>]*\%(>\|$\):<\@<=d[td]\>:<\@<=/dl>,' . - \ '<\@<=\([^/][^ \t>]*\)[^>]*\%(>\|$\):<\@<=/\1>' -endif - -" vim: nowrap sw=2 sts=2 ts=8: diff --git a/bundle/jsx/README.md b/bundle/jsx/README.md deleted file mode 100644 index 9362651..0000000 --- a/bundle/jsx/README.md +++ /dev/null @@ -1,56 +0,0 @@ -vim-jsx -======= - -Syntax highlighting and indenting for JSX. JSX is a JavaScript syntax -transformer which translates inline XML document fragments into JavaScript -objects. It was developed by Facebook alongside [React][1]. - -This bundle requires pangloss's [vim-javascript][2] syntax highlighting. - -Vim support for inline XML in JS is remarkably similar to the same for PHP, -which you can find [here][3]. - -Usage ------ - -By default, JSX syntax highlighting and indenting will be enabled only for -files with the `.jsx` extension. If you would like JSX in `.js` files, add - - let g:jsx_ext_required = 0 - -to your .vimrc or somewhere in your include path. If you wish to restrict JSX -to files with the pre-v0.12 `@jsx React.DOM` pragma, add - - let g:jsx_pragma_required = 1 - -to your .vimrc or somewhere in your include path. - -Installation ------------- - -### Pathogen - -The recommended installation method is via [Pathogen][4]. Then simply execute - - cd ~/.vim/bundle - git clone https://github.com/mxw/vim-jsx.git - -### Manual Installation - -If you have no `~/.vim/after` directory, you can download the tarball or zip -and copy the contents to `~/.vim`. - -If you have existing `~/.vim/after` files, copy the syntax and indent files -directly into their respective destinations. If you have existing after syntax -or indent files for Javascript, you'll probably want to do something like - - mkdir -p ~/.vim/after/syntax/javascript - cp path/to/vim-jsx/after/syntax/javascript.vim ~/.vim/after/syntax/javascript/javascript.vim - mkdir -p ~/.vim/after/indent/javascript - cp path/to/vim-jsx/after/indent/javascript.vim ~/.vim/after/indent/javascript/javascript.vim - - -[1]: http://facebook.github.io/react/ "React" -[2]: https://github.com/pangloss/vim-javascript "pangloss: vim-javascript" -[3]: https://github.com/mxw/vim-xhp "mxw: vim-xhp" -[4]: https://github.com/tpope/vim-pathogen "tpope: vim-pathogen" diff --git a/bundle/jsx/after/ftdetect/javascript.vim b/bundle/jsx/after/ftdetect/javascript.vim deleted file mode 100644 index 7cd1f9d..0000000 --- a/bundle/jsx/after/ftdetect/javascript.vim +++ /dev/null @@ -1,10 +0,0 @@ -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Vim ftdetect file -" -" Language: JSX (JavaScript) -" Maintainer: Max Wang -" -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -autocmd BufNewFile,BufRead *.jsx let b:jsx_ext_found = 1 -autocmd BufNewFile,BufRead *.jsx set filetype=javascript diff --git a/bundle/jsx/after/ftplugin/javascript.vim b/bundle/jsx/after/ftplugin/javascript.vim deleted file mode 100644 index 1a8da4d..0000000 --- a/bundle/jsx/after/ftplugin/javascript.vim +++ /dev/null @@ -1,15 +0,0 @@ -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Vim ftplugin file -" -" Language: JSX (JavaScript) -" Maintainer: Max Wang -" Depends: pangloss/vim-javascript -" -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -" modified from html.vim -if exists("loaded_matchit") - let b:match_ignorecase = 0 - let b:match_words = '(:),\[:\],{:},<:>,' . - \ '<\@<=\([^/][^ \t>]*\)[^>]*\%(>\|$\):<\@<=/\1>' -endif diff --git a/bundle/jsx/after/indent/javascript.vim b/bundle/jsx/after/indent/javascript.vim deleted file mode 100644 index d0b4d4e..0000000 --- a/bundle/jsx/after/indent/javascript.vim +++ /dev/null @@ -1,98 +0,0 @@ -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Vim indent file -" -" Language: JSX (JavaScript) -" Maintainer: Max Wang -" Depends: pangloss/vim-javascript -" -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -" Do nothing if we don't find the @jsx pragma (and we care). -exec 'source '.fnameescape(expand(':p:h:h').'/jsx-config.vim') -if g:jsx_pragma_required && !b:jsx_pragma_found | finish | endif - -" Do nothing if we don't have the .jsx extension (and we care). -if g:jsx_ext_required && !exists('b:jsx_ext_found') | finish | endif - -" Prologue; load in XML indentation. -if exists('b:did_indent') - let s:did_indent=b:did_indent - unlet b:did_indent -endif -exe 'runtime! indent/xml.vim' -if exists('s:did_indent') - let b:did_indent=s:did_indent -endif - -setlocal indentexpr=GetJsxIndent() - -" JS indentkeys -setlocal indentkeys=0{,0},0),0],0\,,!^F,o,O,e -" XML indentkeys -setlocal indentkeys+=*,<>>,<<>,/ - -" Self-closing tag regex. -let s:sctag = '^\s*\/>\s*;\=' - -" Get all syntax types at the beginning of a given line. -fu! SynSOL(lnum) - return map(synstack(a:lnum, 1), 'synIDattr(v:val, "name")') -endfu - -" Get all syntax types at the end of a given line. -fu! SynEOL(lnum) - let lnum = prevnonblank(a:lnum) - let col = strlen(getline(lnum)) - return map(synstack(lnum, col), 'synIDattr(v:val, "name")') -endfu - -" Check if a syntax attribute is XMLish. -fu! SynAttrXMLish(synattr) - return a:synattr =~ "^xml" || a:synattr =~ "^jsx" -endfu - -" Check if a synstack is XMLish (i.e., has an XMLish last attribute). -fu! SynXMLish(syns) - return SynAttrXMLish(get(a:syns, -1)) -endfu - -" Check if a synstack has any XMLish attribute. -fu! SynXMLishAny(syns) - for synattr in a:syns - if SynAttrXMLish(synattr) - return 1 - endif - endfor - return 0 -endfu - -" Check if a synstack denotes the end of a JSX block. -fu! SynJSXBlockEnd(syns) - return get(a:syns, -1) == 'jsBraces' && SynAttrXMLish(get(a:syns, -2)) -endfu - -" Cleverly mix JS and XML indentation. -fu! GetJsxIndent() - let cursyn = SynSOL(v:lnum) - let prevsyn = SynEOL(v:lnum - 1) - - " Use XML indenting if the syntax at the end of the previous line was either - " JSX or was the closing brace of a jsBlock whose parent syntax was JSX. - if (SynXMLish(prevsyn) || SynJSXBlockEnd(prevsyn)) && SynXMLishAny(cursyn) - let ind = XmlIndentGet(v:lnum, 0) - - " Align '/>' with '<' for multiline self-closing tags. - if getline(v:lnum) =~? s:sctag - let ind = ind - &sw - endif - - " Then correct the indentation of any JSX following '/>'. - if getline(v:lnum - 1) =~? s:sctag - let ind = ind + &sw - endif - else - let ind = GetJavascriptIndent() - endif - - return ind -endfu diff --git a/bundle/jsx/after/jsx-config.vim b/bundle/jsx/after/jsx-config.vim deleted file mode 100644 index a1d4cbe..0000000 --- a/bundle/jsx/after/jsx-config.vim +++ /dev/null @@ -1,33 +0,0 @@ -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Vimscript file -" -" Set up a bunch of configuration variables. -" -" Also check (if desired) whether or not the @jsx pragma is correctly included -" in '%'. Set the result in b:jsx_pragma_found. -" -" Language: JSX (JavaScript) -" Maintainer: Max Wang -" -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -" Only check once. -if exists('b:jsx_pragma_found') - finish -endif - -" Whether the .jsx extension is required to enable JSX syntax/indent. -if !exists('g:jsx_ext_required') - let g:jsx_ext_required = 1 -endif - -" Whether the @jsx pragma is required to enable JSX syntax/indent. -if !exists('g:jsx_pragma_required') - let g:jsx_pragma_required = 0 -endif -if !g:jsx_pragma_required | finish | endif - -" Look for the @jsx pragma. It must be included in a docblock comment before -" anything else in the file (except whitespace). -let s:jsx_pragma_pattern = '\%^\_s*\/\*\*\%(\_.\%(\*\/\)\@!\)*@jsx\_.\{-}\*\/' -let b:jsx_pragma_found = search(s:jsx_pragma_pattern, 'npw') diff --git a/bundle/jsx/after/syntax/javascript.vim b/bundle/jsx/after/syntax/javascript.vim deleted file mode 100644 index 5bebc94..0000000 --- a/bundle/jsx/after/syntax/javascript.vim +++ /dev/null @@ -1,43 +0,0 @@ -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Vim syntax file -" -" Language: JSX (JavaScript) -" Maintainer: Max Wang -" Depends: pangloss/vim-javascript -" -" CREDITS: Inspired by Facebook. -" -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -" Do nothing if we don't find the @jsx pragma (and we care). -exec 'source '.fnameescape(expand(':p:h:h').'/jsx-config.vim') -if g:jsx_pragma_required && !b:jsx_pragma_found | finish | endif - -" Do nothing if we don't have the .jsx extension (and we care). -if g:jsx_ext_required && !exists('b:jsx_ext_found') | finish | endif - -" Prologue; load in XML syntax. -if exists('b:current_syntax') - let s:current_syntax=b:current_syntax - unlet b:current_syntax -endif -syn include @XMLSyntax syntax/xml.vim -if exists('s:current_syntax') - let b:current_syntax=s:current_syntax -endif - -" Highlight JSX regions as XML; recursively match. -syn region jsxRegion contains=@XMLSyntax,jsxRegion,jsBlock,jsStringD,jsStringS - \ start=+<\@+ - \ end=++ - \ end=+/>+ - \ keepend - \ extend - -" JSX attributes should color as JS. Note the trivial end pattern; we let -" jsBlock take care of ending the region. -syn region xmlString contained start=+{+ end=++ contains=jsBlock - -" Add jsxRegion to the lowest-level JS syntax cluster. -syn cluster jsExpression add=jsxRegion diff --git a/bundle/l9/.hg_archival.txt b/bundle/l9/.hg_archival.txt deleted file mode 100644 index 2aa4d3f..0000000 --- a/bundle/l9/.hg_archival.txt +++ /dev/null @@ -1,5 +0,0 @@ -repo: 4d5305d0e643bf0b1deca1e9270d2db044d07b2d -node: 3bb534a720fa762aa01d2df2d5d41bd3c4122169 -branch: default -latesttag: 1.1 -latesttagdistance: 2 diff --git a/bundle/l9/.hgtags b/bundle/l9/.hgtags deleted file mode 100644 index 2d251b1..0000000 --- a/bundle/l9/.hgtags +++ /dev/null @@ -1,3 +0,0 @@ -f6420a42fc69dd7fc08aa5426c4b3fb10e78020d 1.0 -f6f3e9bae8770abb41259d42ab65721f6915fe22 1.0.1 -c3f242518bd4b8131a2c277a7f8c492b56375dff 1.1 diff --git a/bundle/l9/autoload/l9.vim b/bundle/l9/autoload/l9.vim deleted file mode 100644 index b6a0ae7..0000000 --- a/bundle/l9/autoload/l9.vim +++ /dev/null @@ -1,570 +0,0 @@ -"============================================================================= -" Copyright (c) 2009-2010 Takeshi NISHIDA -" -"============================================================================= -" LOAD GUARD {{{1 - -if exists('g:loaded_autoload_l9') - finish -endif -let g:loaded_autoload_l9 = 1 - -" }}}1 -"============================================================================= -" COMPATIBILITY TEST {{{1 - -" -let s:L9_VERSION_CURRENT = 101 -let s:L9_VERSION_PASSABLE = 101 - -" returns true if given version is compatible. -function l9#isCompatible(ver) - return -endfunction - -let s:VERSION_FACTOR = str2float('0.01') - -" returns false if the caller script should finish. -" a:vimVersion: if 0, don't check vim version -" a:l9Version: same rule as v:version -function l9#guardScriptLoading(path, vimVersion, l9Version, exprs) - let loadedVarName = 'g:loaded_' . substitute(a:path, '\W', '_', 'g') - if exists(loadedVarName) - return 0 - elseif a:vimVersion > 0 && a:vimVersion > v:version - echoerr a:path . ' requires Vim version ' . string(a:vimVersion * s:VERSION_FACTOR) - return 0 - elseif a:l9Version > 0 && (a:l9Version > s:L9_VERSION_CURRENT || - \ a:l9Version < s:L9_VERSION_PASSABLE) - echoerr a:path . ' requires L9 library version ' . string(a:l9Version * s:VERSION_FACTOR) - return 0 - endif - for expr in a:exprs - if !eval(expr) - echoerr a:path . ' requires: ' . expr - return 0 - endif - endfor - let {loadedVarName} = 1 - return 1 -endfunction - -" -function l9#getVersion() - return s:L9_VERSION_CURRENT -endfunction - -" }}}1 -"============================================================================= -" LIST {{{1 - -" Removes duplicates (unstable) -" This function doesn't change the list of argument. -function l9#unique(items) - let sorted = sort(a:items) - if len(sorted) < 2 - return sorted - endif - let last = remove(sorted, 0) - let result = [last] - for item in sorted - if item != last - call add(result, item) - let last = item - endif - endfor - return result -endfunction - -" Removes duplicates (stable) -" This function doesn't change the list of argument. -function l9#uniqueStably(items) - let result = [] - for item in a:items - if count(result, item, &ignorecase) == 0 - call add(result, item) - endif - endfor - return result -endfunction - -" [ [0], [1,2], [3] ] -> [ 0, 1, 2, 3 ] -" This function doesn't change the list of argument. -function l9#concat(items) - let result = [] - for l in a:items - let result += l - endfor - return result -endfunction - -" [ [0,1,2], [3,4], [5,6,7,8] ] -> [ [0,3,5],[1,4,6] ] -" This function doesn't change the list of argument. -function l9#zip(items) - let result = [] - for i in range(min(map(copy(a:items), 'len(v:val)'))) - call add(result, map(copy(a:items), 'v:val[i]')) - endfor - return result -endfunction - -" filter() with the maximum number of items -" This function doesn't change the list of argument. -function l9#filterWithLimit(items, expr, limit) - if a:limit <= 0 - return filter(copy(a:items), a:expr) - endif - let result = [] - let stride = a:limit * 3 / 2 " x1.5 - for i in range(0, len(a:items) - 1, stride) - let result += filter(a:items[i : i + stride - 1], a:expr) - if len(result) >= a:limit - return remove(result, 0, a:limit - 1) - endif - endfor - return result -endfunction - -" Removes if a:expr is evaluated as non-zero and returns removed items. -" This function change the list of argument. -function l9#removeIf(items, expr) - let removed = filter(copy(a:items), a:expr) - call filter(a:items, '!( ' . a:expr . ')') - return removed -endfunction - -" }}}1 -"============================================================================= -" NUMERIC {{{1 - -" }}}1 -"============================================================================= -" STRING {{{1 - -" Snips a:str and add a:mask if the length of a:str is more than a:len -function l9#snipHead(str, len, mask) - if a:len >= len(a:str) - return a:str - elseif a:len <= len(a:mask) - return a:mask - endif - return a:mask . a:str[-a:len + len(a:mask):] -endfunction - -" Snips a:str and add a:mask if the length of a:str is more than a:len -function l9#snipTail(str, len, mask) - if a:len >= len(a:str) - return a:str - elseif a:len <= len(a:mask) - return a:mask - endif - return a:str[:a:len - 1 - len(a:mask)] . a:mask -endfunction - -" Snips a:str and add a:mask if the length of a:str is more than a:len -function l9#snipMid(str, len, mask) - if a:len >= len(a:str) - return a:str - elseif a:len <= len(a:mask) - return a:mask - endif - let len_head = (a:len - len(a:mask)) / 2 - let len_tail = a:len - len(a:mask) - len_head - return (len_head > 0 ? a:str[: len_head - 1] : '') . a:mask . - \ (len_tail > 0 ? a:str[-len_tail :] : '') -endfunction - -" -function l9#hash224(str) - let a = 0x00000800 " shift 11 bit (if unsigned) - let b = 0x001fffff " extract 11 bit (if unsigned) - let nHash = 7 - let hashes = repeat([0], nHash) - for i in range(len(a:str)) - let iHash = i % nHash - let hashes[iHash] = hashes[iHash] * a + hashes[iHash] / b - let hashes[iHash] += char2nr(a:str[i]) - endfor - return join(map(hashes, 'printf("%08x", v:val)'), '') -endfunction - -" wildcard -> regexp -function l9#convertWildcardToRegexp(expr) - let re = escape(a:expr, '\') - for [pat, sub] in [ [ '*', '\\.\\*' ], [ '?', '\\.' ], [ '[', '\\[' ], ] - let re = substitute(re, pat, sub, 'g') - endfor - return '\V' . re -endfunction - -" }}}1 -"============================================================================= -" LINES {{{1 - -" Removes from the line matching with a:begin first to the line matching with -" a:end next and returns removed lines. -" If matching range is not found, returns [] -function l9#removeLinesBetween(lines, begin, end) - for i in range(len(a:lines) - 1) - if a:lines[i] =~ a:begin - break - endif - endfor - for j in range(i + 1, len(a:lines) - 1) - if a:lines[j] =~ a:end - let g:l0 += [a:lines[i : j]] - return remove(a:lines, i, j) - endif - endfor - return [] -endfunction - -" }}}1 -"============================================================================= -" PATH {{{1 - -" returns the path separator charactor. -function l9#getPathSeparator() - return (!&shellslash && (has('win32') || has('win64')) ? '\' : '/') -endfunction - -" [ 'a', 'b/', '/c' ] -> 'a/b/c' -function l9#concatPaths(paths) - let result = '' - for p in a:paths - if empty(p) - continue - elseif empty(result) - let result = p - else - let result = substitute(result, '[/\\]$', '', '') . l9#getPathSeparator() - \ . substitute(p, '^[/\\]', '', '') - endif - endfor - return result -endfunction - -" path: '/a/b/c/d', dir: '/a/b' => 'c/d' -function l9#modifyPathRelativeToDir(path, dir) - let pathFull = fnamemodify(a:path, ':p') - let dirFull = fnamemodify(a:dir, ':p') - if len(pathFull) < len(dirFull) || pathFull[:len(dirFull) - 1] !=# dirFull - return pathFull - endif - return pathFull[len(dirFull):] -endfunction - -" }}}1 -"============================================================================= -" FILE {{{1 - -" Almost same as readfile(). -function l9#readFile(...) - let args = copy(a:000) - let args[0] = expand(args[0]) - try - return call('readfile', args) - catch - endtry - return [] -endfunction - -" Almost same as writefile(). -function l9#writeFile(...) - let args = copy(a:000) - let args[1] = expand(args[1]) - let dir = fnamemodify(args[1], ':h') - try - if !isdirectory(dir) - call mkdir(dir, 'p') - endif - return call('writefile', args) - catch - endtry - return -1 " -1 is error code. -endfunction - -" }}}1 -"============================================================================= -" BUFFER {{{1 - -" :wall/:wall! wrapper. Useful for writing readonly buffers. -function l9#writeAll() - try - silent update " NOTE: avoiding a problem with a buftype=acwrite buffer. - silent wall - catch /^Vim/ " E45, E505 - if l9#inputHl('Question', v:exception . "\nWrite readonly files? (Y/N) : ", 'Y') ==? 'y' - redraw - :wall! - endif - endtry -endfunction - -" Loads given files with :edit command -function l9#loadFilesToBuffers(files) - for file in filter(copy(a:files), '!bufloaded(v:val)') - execute 'edit ' . fnameescape(file) - if !exists('bufNrFirst') - let bufNrFirst = bufnr('%') - endif - endfor - if exists('bufNrFirst') - execute bufNrFirst . 'buffer' - endif -endfunction - -" Deletes all buffers except given files with :bdelete command -function l9#deleteAllBuffersExcept(files) - let bufNrExcepts = map(copy(a:files), 'bufnr("^" . v:val . "$")') - for bufNr in filter(range(1, bufnr('$')), 'bufloaded(v:val)') - if count(bufNrExcepts, bufNr) == 0 - execute bufNr . 'bdelete' - endif - endfor -endfunction - -" }}}1 -"============================================================================= -" WINDOW {{{1 - -" move current window to next tabpage. -function l9#shiftWinNextTabpage() - if tabpagenr('$') < 2 - return - endif - let bufnr = bufnr('%') - tabnext - execute bufnr . 'sbuffer' - tabprevious - if winnr('$') > 1 - close - tabnext - else - close " if tabpage is closed, next tabpage will become current - endif -endfunction - -" move current window to previous tabpage. -function l9#shiftWinPrevTabpage() - if tabpagenr('$') < 2 - return - endif - let bufnr = bufnr('%') - tabprevious - execute bufnr . 'sbuffer' - tabnext - close - tabprevious -endfunction - -" move to a window containing specified buffer. -" returns 0 if the buffer is not found. -function l9#moveToBufferWindowInCurrentTabpage(bufNr) - if bufnr('%') == a:bufNr - return 1 - elseif count(tabpagebuflist(), a:bufNr) == 0 - return 0 - endif - execute bufwinnr(a:bufNr) . 'wincmd w' - return 1 -endfunction - -" returns 0 if the buffer is not found. -function s:moveToOtherTabpageOpeningBuffer(bufNr) - for tabNr in range(1, tabpagenr('$')) - if tabNr != tabpagenr() && count(tabpagebuflist(tabNr), a:bufNr) > 0 - execute 'tabnext ' . tabNr - return 1 - endif - endfor - return 0 -endfunction - -" move to a window containing specified buffer. -" returns 0 if the buffer is not found. -function l9#moveToBufferWindowInOtherTabpage(bufNr) - if !s:moveToOtherTabpageOpeningBuffer(a:bufNr) - return 0 - endif - return l9#moveToBufferWindowInCurrentTabpage(a:bufNr) -endfunction - -" }}}1 -"============================================================================= -" COMMAND LINE {{{1 - -" echo/echomsg with highlighting. -function l9#echoHl(hl, msg, prefix, addingHistory) - let echoCmd = (a:addingHistory ? 'echomsg' : 'echo') - execute "echohl " . a:hl - try - for l in (type(a:msg) == type([]) ? a:msg : split(a:msg, "\n")) - execute echoCmd . ' a:prefix . l' - endfor - finally - echohl None - endtry -endfunction - -" input() with highlighting. -" This function can take list as {completion} argument. -function l9#inputHl(hl, ...) - execute "echohl " . a:hl - try - let args = copy(a:000) - if len(args) > 2 && type(args[2]) == type([]) - let s:candidatesForInputHl = args[2] - let args[2] = 'custom,l9#completeForInputHl' - endif - let s = call('input', args) - unlet! s:candidatesForInputHl - finally - echohl None - endtry - redraw " needed to show following echo to next line. - return s -endfunction - -" only called by l9#inputHl() for completion. -function l9#completeForInputHl(lead, line, pos) - return join(s:candidatesForInputHl, "\n") -endfunction - -" }}}1 -"============================================================================= -" VISUAL MODE {{{1 - -" returns last selected text in Visual mode. -function l9#getSelectedText() - let reg_ = [@", getregtype('"')] - let regA = [@a, getregtype('a')] - if mode() =~# "[vV\]" - silent normal! "aygv - else - let pos = getpos('.') - silent normal! gv"ay - call setpos('.', pos) - endif - let text = @a - call setreg('"', reg_[0], reg_[1]) - call setreg('a', regA[0], regA[1]) - return text -endfunction - - -" }}}1 -"============================================================================= -" EVAL {{{1 - -" loads given text as Vim script with :source command -function l9#loadScript(text) - let lines = (type(a:text) == type([]) ? a:text : split(a:text, "\n")) - let fname = tempname() - call writefile(lines, fname) - source `=fname` - call delete(fname) -endfunction - - -" }}}1 -"============================================================================= -" VARIABLES {{{1 - -" -function l9#defineVariableDefault(name, default) - if !exists(a:name) - let {a:name} = a:default - endif -endfunction - -" }}}1 -"============================================================================= -" GREP {{{1 - -" Execute :vimgrep and opens the quickfix window if matches are found. -" -" a:pattern: search pattern. If ommitted, last search pattern (@/) is used. -" a:files: List of files -function l9#grepFiles(pattern, files) - let target = join(map(a:files, 'escape(v:val, " ")'), ' ') - let pattern = (a:pattern[0] ==# '/' ? a:pattern[1:] : a:pattern) - let pattern = (empty(pattern) ? @/ : pattern) - try - execute printf('vimgrep/%s/j %s', pattern, target) - catch /^Vim/ - call setqflist([]) - endtry - call l9#quickfix#sort() - call l9#quickfix#openIfNotEmpty(1, 0) -endfunction - -" Execute :vimgrep for buffers using l9#grepFiles() -" See also: :L9GrepBuffer :L9GrepBufferAll -function l9#grepBuffers(pattern, bufNrs) - let files = map(filter(a:bufNrs, 'bufloaded(v:val)'), 'bufname(v:val)') - call l9#grepFiles(a:pattern, files) -endfunction - -" }}}1 -"============================================================================= -" SIGN {{{1 - -" Highlights lines using :sign define and :sign place. -" -" a:linehl, a:text, a:texthl: See |signs|. Ignored if empty string. -" a:locations: List of [{buffer number}, {line number}] for highlighting -function l9#placeSign(linehl, text, texthl, locations) - let argLinehl = (empty(a:linehl) ? '' : 'linehl=' . a:linehl) - let argText = (empty(a:text) ? '' : 'text=' . a:text) - let argTexthl = (empty(a:texthl) ? '' : 'texthl=' . a:texthl) - let name = 'l9--' . a:linehl . '--' . a:text . '--' . a:texthl - execute printf('sign define %s linehl=%s text=%s texthl=%s', - \ name, a:linehl, a:text, a:texthl) - for [bufNr, lnum] in a:locations - execute printf('sign place 1 line=%d name=%s buffer=%d', lnum, name, bufNr) - endfor -endfunction - -" }}}1 -"============================================================================= -" NOTIFY EXTERNALLY {{{1 - -" Notify a message using an external program. -" Currently supports Balloonly, Screen, and Tmux. -function l9#notifyExternally(msg) - return l9#notifyBalloonly(a:msg) - \ || l9#notifyScreen(a:msg) - \ || l9#notifyTmux(a:msg) -endfunction - -" -function l9#notifyBalloonly(msg) - if !(has('win32') || has('win64')) || !executable(g:l9_balloonly) - return 0 - endif - execute 'silent !start ' . shellescape(g:l9_balloonly) . ' 4000 "l9" ' . shellescape(a:msg) - return 1 -endfunction - -" -function l9#notifyScreen(msg) - if !has('unix') || has('gui_running') || $WINDOW !~ '\d' || !executable('screen') - return 0 - endif - call system('screen -X wall ' . shellescape('l9: ' . a:msg)) - return 1 -endfunction - -" -function l9#notifyTmux(msg) - if !has('unix') || has('gui_running') || empty($TMUX) || !executable('tmux') - return 0 - endif - call system('tmux display-message ' . shellescape('l9: ' . a:msg)) - return 1 -endfunction - -" }}}1 -"============================================================================= -" vim: set fdm=marker: diff --git a/bundle/l9/autoload/l9/async.py b/bundle/l9/autoload/l9/async.py deleted file mode 100644 index eeb0cc3..0000000 --- a/bundle/l9/autoload/l9/async.py +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/env python - -from __future__ import with_statement -import vim -import os -import subprocess -import threading -import Queue - - -class Asyncer: - - def __init__(self): - self._workers = {} - - def execute(self, var_key, var_command, var_cwd, var_input, var_appends): - key = vim.eval(var_key) - command = vim.eval(var_command) - cwd = vim.eval(var_cwd) - input = vim.eval(var_input) - appends = vim.eval(var_appends) - if key not in self._workers: - self._workers[key] = Worker() - self._workers[key].start() - self._workers[key].put(Executor(command, cwd, input, appends)) - - def print_output(self, var_key): - key = vim.eval(var_key) - if key not in self._workers: - return - for l in self._workers[key].copy_outputs(): - print l, - - def print_worker_keys(self): - for k in self._workers.keys(): - print k - - def print_active_worker_keys(self): - for k in self._workers.keys(): - print k - - -class Worker(threading.Thread): - - def __init__(self): - threading.Thread.__init__(self) - self._queue = Queue.Queue() - self._lines = [] - self._lock = threading.Lock() - - def run(self): - while True: - self._queue.get().execute(self) - self._queue.task_done() - - def put(self, executor): - self._queue.put(executor) - - def clear_outputs(self): - with self._lock: - self._lines = [] - - def record_output(self, line): - with self._lock: - self._lines.append(line) - - def copy_outputs(self): - with self._lock: - return self._lines[:] - - -class Executor: - - def __init__(self, command, cwd, input, appends): - self._command = command - self._cwd = cwd - self._input = input - self._appends = appends - - def execute(self, worker): - if not self._appends: - worker.clear_outputs() - os.chdir(self._cwd) - p = subprocess.Popen(self._command, shell=True, stdin=subprocess.PIPE, - stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - p.stdin.write(self._input) - line = p.stdout.readline() - while line: - worker.record_output(line) - line = p.stdout.readline() - - diff --git a/bundle/l9/autoload/l9/async.vim b/bundle/l9/autoload/l9/async.vim deleted file mode 100644 index fa66e9f..0000000 --- a/bundle/l9/autoload/l9/async.vim +++ /dev/null @@ -1,67 +0,0 @@ -"============================================================================= -" Copyright (C) 2009-2010 Takeshi NISHIDA -" -"============================================================================= -" LOAD GUARD {{{1 - -if !l9#guardScriptLoading(expand(':p'), 0, 0, ['has("python")']) - finish -endif - -" }}}1 -"============================================================================= -" ASYNC EXECUTE {{{1 - -" -function s:checkKey(key) - if a:key =~ '\n' || a:key !~ '\S' - throw "Asyncer: Invalid key: " . a:key - endif -endfunction - -" -function l9#async#execute(key, cmd, cwd, input, appends) - call s:checkKey(a:key) - python asyncer.execute('a:key', 'a:cmd', 'a:cwd', 'a:input', 'a:appends') -endfunction - -" -function l9#async#read(key) - call s:checkKey(a:key) - redir => result - silent python asyncer.print_output('a:key') - redir END - " NOTE: "\n" is somehow inserted by redir. - return (result[0] ==# "\n" ? result[1:] : result) -endfunction - -" -function l9#async#listWorkers() - redir => result - silent python asyncer.print_worker_keys() - redir END - return split(result, "\n") -endfunction - -" -function l9#async#listActiveWorkers() - redir => result - silent python asyncer.print_active_worker_keys() - redir END - return split(result, "\n") -endfunction - -" }}}1 -"============================================================================= -" INITIALIZATION {{{1 - -let s:ASYNC_PY_PATH = fnamemodify(expand(':p:h'), ':p') . 'async.py' - -pyfile `=s:ASYNC_PY_PATH` -python asyncer = Asyncer() - -" }}}1 -"============================================================================= -" vim: set fdm=marker: - - diff --git a/bundle/l9/autoload/l9/quickfix.vim b/bundle/l9/autoload/l9/quickfix.vim deleted file mode 100644 index 1758b39..0000000 --- a/bundle/l9/autoload/l9/quickfix.vim +++ /dev/null @@ -1,107 +0,0 @@ -"============================================================================= -" Copyright (C) 2009-2010 Takeshi NISHIDA -" -"============================================================================= -" LOAD GUARD {{{1 - -if !l9#guardScriptLoading(expand(':p'), 0, 0, []) - finish -endif - -" }}}1 -"============================================================================= -" QUICKFIX {{{1 - -" Returns non-zero if quickfix window is opened. -function l9#quickfix#isWindowOpened() - return count(map(range(1, winnr('$')), 'getwinvar(v:val, "&buftype")'), 'quickfix') > 0 -endfunction - -" Opens quickfix window if quickfix is not empty, and echo the number of errors. -" -" a:onlyRecognized: if non-zero, opens only if quickfix has recognized errors. -" a:holdCursor: if non-zero, the cursor won't move to quickfix window. -function l9#quickfix#openIfNotEmpty(onlyRecognized, holdCursor) - let numErrors = len(filter(getqflist(), 'v:val.valid')) - let numOthers = len(getqflist()) - numErrors - if numErrors > 0 || (!a:onlyRecognized && numOthers > 0) - copen - if a:holdCursor - wincmd p - endif - else - cclose - endif - redraw - if numOthers > 0 - echo printf('Quickfix: %d(+%d)', numErrors, numOthers) - else - echo printf('Quickfix: %d', numErrors) - endif -endfunction - -" Toggles Quickfix window -function l9#quickfix#toggleWindow() - if l9#quickfix#isWindowOpened() - cclose - else - call l9#quickfix#openIfNotEmpty(0, 0) - endif -endfunction - -" Creates quickfix list form given lines and opens the quickfix window if -" errors exists. -" -" a:lines: -" a:jump: if non-zero, jump to the first error. -function l9#quickfix#setMakeResult(lines) - cexpr a:lines - call l9#quickfix#openIfNotEmpty(0, 1) -endfunction - -" Compares quickfix entries for sorting. -function l9#quickfix#compareEntries(e0, e1) - if a:e0.bufnr != a:e1.bufnr - let i0 = bufname(a:e0.bufnr) - let i1 = bufname(a:e1.bufnr) - elseif a:e0.lnum != a:e1.lnum - let i0 = a:e0.lnum - let i1 = a:e1.lnum - elseif a:e0.col != a:e1.col - let i0 = a:e0.col - let i1 = a:e1.col - else - return 0 - endif - return (i0 > i1 ? +1 : -1) -endfunction - -" Sorts quickfix -function l9#quickfix#sort() - call setqflist(sort(getqflist(), 'l9#quickfix#compareEntries'), 'r') -endfunction - -" Highlights Quickfix lines by :sign. -" Inspired by errormarker plugin. -" -" You can customize the highlighting via L9ErrorLine and L9WarningLine -" highlight groups. -function l9#quickfix#placeSign() - let warnings = [] - let errors = [] - for e in filter(getqflist(), 'v:val.valid') - let warning = (e.type ==? 'w' || e.text =~? '^\s*warning:') - call add((warning ? warnings : errors), [e.bufnr, e.lnum]) - endfor - sign unplace * - call l9#placeSign('L9WarningLine', '>>', '', warnings) - call l9#placeSign('L9ErrorLine', '>>', '', errors) -endfunction - -highlight default L9ErrorLine ctermfg=white ctermbg=52 guibg=#5F0000 -highlight default L9WarningLine ctermfg=white ctermbg=17 guibg=#00005F - -" }}}1 -"============================================================================= -" vim: set fdm=marker: - diff --git a/bundle/l9/autoload/l9/tempbuffer.vim b/bundle/l9/autoload/l9/tempbuffer.vim deleted file mode 100644 index 6f11a78..0000000 --- a/bundle/l9/autoload/l9/tempbuffer.vim +++ /dev/null @@ -1,112 +0,0 @@ -"============================================================================= -" Copyright (C) 2009-2010 Takeshi NISHIDA -" -"============================================================================= -" LOAD GUARD {{{1 - -if !l9#guardScriptLoading(expand(':p'), 0, 0, []) - finish -endif - -" }}}1 -"============================================================================= -" TEMPORARY BUFFER {{{1 - -" each key is a buffer name. -let s:dataMap = {} - -" -function s:onBufDelete(bufname) - if exists('s:dataMap[a:bufname].listener.onClose') - call s:dataMap[a:bufname].listener.onClose(s:dataMap[a:bufname].written) - endif - if bufnr('%') == s:dataMap[a:bufname].bufNr && winnr('#') != 0 - " if winnr('#') returns 0, "wincmd p" causes ringing the bell. - wincmd p - endif -endfunction - -" -function s:onBufWriteCmd(bufname) - if !exists('s:dataMap[a:bufname].listener.onWrite') || - \ s:dataMap[a:bufname].listener.onWrite(getline(1, '$')) - setlocal nomodified - let s:dataMap[a:bufname].written = 1 - call l9#tempbuffer#close(a:bufname) - else - endif -endfunction - -" a:bufname: -" a:height: Window height. If 0, default height is used. -" If less than 0, the window becomes full-screen. -" a:listener: -" a:listener.onClose(written) -function l9#tempbuffer#openScratch(bufname, filetype, lines, topleft, vertical, height, listener) - let openCmdPrefix = (a:topleft ? 'topleft ' : '') - \ . (a:vertical ? 'vertical ' : '') - \ . (a:height > 0 ? a:height : '') - if !exists('s:dataMap[a:bufname]') || !bufexists(s:dataMap[a:bufname].bufNr) - execute openCmdPrefix . 'new' - else - call l9#tempbuffer#close(a:bufname) - execute openCmdPrefix . 'split' - execute 'silent ' . s:dataMap[a:bufname].bufNr . 'buffer' - endif - if a:height < 0 - only - endif - setlocal buflisted noswapfile bufhidden=delete modifiable noreadonly buftype=nofile - let &l:filetype = a:filetype - silent file `=a:bufname` - call setline(1, a:lines) - setlocal nomodified - augroup L9TempBuffer - autocmd! * - execute printf('autocmd BufDelete call s:onBufDelete (%s)', string(a:bufname)) - execute printf('autocmd BufWriteCmd nested call s:onBufWriteCmd(%s)', string(a:bufname)) - augroup END - let s:dataMap[a:bufname] = { - \ 'bufNr': bufnr('%'), - \ 'written': 0, - \ 'listener': a:listener, - \ } -endfunction - -" -function l9#tempbuffer#openReadOnly(bufname, filetype, lines, topleft, vertical, height, listener) - call l9#tempbuffer#openScratch(a:bufname, a:filetype, a:lines, a:topleft, a:vertical, a:height, a:listener) - setlocal nomodifiable readonly -endfunction - -" a:listener: -" a:listener.onClose(written) -" a:listener.onWrite(lines) -function l9#tempbuffer#openWritable(bufname, filetype, lines, topleft, vertical, height, listener) - call l9#tempbuffer#openScratch(a:bufname, a:filetype, a:lines, a:topleft, a:vertical, a:height, a:listener) - setlocal buftype=acwrite -endfunction - -" makes specified temp buffer current. -function l9#tempbuffer#moveTo(bufname) - return l9#moveToBufferWindowInCurrentTabpage(s:dataMap[a:bufname].bufNr) || - \ l9#moveToBufferWindowInOtherTabpage(s:dataMap[a:bufname].bufNr) -endfunction - -" -function l9#tempbuffer#close(bufname) - if !l9#tempbuffer#isOpen(a:bufname) - return - endif - execute printf('%dbdelete!', s:dataMap[a:bufname].bufNr) -endfunction - -" -function l9#tempbuffer#isOpen(bufname) - return exists('s:dataMap[a:bufname]') && bufloaded(s:dataMap[a:bufname].bufNr) -endfunction - -" }}}1 -"============================================================================= -" vim: set fdm=marker: - diff --git a/bundle/l9/autoload/l9/tempvariables.vim b/bundle/l9/autoload/l9/tempvariables.vim deleted file mode 100644 index ee847ee..0000000 --- a/bundle/l9/autoload/l9/tempvariables.vim +++ /dev/null @@ -1,60 +0,0 @@ -"============================================================================= -" Copyright (C) 2010 Takeshi NISHIDA -" -"============================================================================= -" LOAD GUARD {{{1 - -if !l9#guardScriptLoading(expand(':p'), 0, 0, []) - finish -endif - -" }}}1 -"============================================================================= -" TEMPORARY VARIABLES {{{1 - -" -let s:origMap = {} - -" set temporary variables -function l9#tempvariables#set(group, name, value) - if !exists('s:origMap[a:group]') - let s:origMap[a:group] = {} - endif - if !exists('s:origMap[a:group][a:name]') - let s:origMap[a:group][a:name] = eval(a:name) - endif - execute 'let ' . a:name . ' = a:value' -endfunction - -" set temporary variables -function l9#tempvariables#setList(group, variables) - for [name, value] in a:variables - call l9#tempvariables#set(a:group, name, value) - unlet value " to avoid E706 - endfor -endfunction - -" get temporary variables -function l9#tempvariables#getList(group) - if !exists('s:origMap[a:group]') - return [] - endif - return map(keys(s:origMap[a:group]), '[v:val, eval(v:val)]') -endfunction - -" restore original variables and clean up. -function l9#tempvariables#end(group) - if !exists('s:origMap[a:group]') - return - endif - for [name, value] in items(s:origMap[a:group]) - execute 'let ' . name . ' = value' - unlet value " to avoid E706 - endfor - unlet s:origMap[a:group] -endfunction - -" }}}1 -"============================================================================= -" vim: set fdm=marker: - diff --git a/bundle/l9/doc/l9.jax b/bundle/l9/doc/l9.jax deleted file mode 100644 index c84d45f..0000000 --- a/bundle/l9/doc/l9.jax +++ /dev/null @@ -1,55 +0,0 @@ -*l9.txt* Vimスクリプトライブラリ - - Copyright (c) 2009-2010 Takeshi NISHIDA - -l9 *l9* - -概要 |l9-introduction| -インストール |l9-installation| -使い方 |l9-usage| -CHANGELOG |l9-changelog| -あばうと |l9-about| - -============================================================================== -概要 *l9-introduction* - -l9はVimスクリプトの関数やコマンドを提供するライブラリです。 - - -============================================================================== - インストール *l9-installation* - -ZIPファイルをランタイムディレクトリに展開します。 - -以下のようにファイルが配置されるはずです。 -> - /plugin/l9.vim - /doc/l9.txt - ... -< -もしランタイムディレクトリが多数のプラグインでごちゃごちゃになるのが嫌なら、各 -プラグインを個別のディレクトリに配置し、そのディレクトリのパスを 'runtimepath' -に追加してください。アンインストールも楽になります。 - -その後、ヘルプを有効にするためにタグファイルを更新してください。詳しくは -|add-local-help|を参照してください。 - -============================================================================== -使い方 *l9-usage* - -ソースコードを参照してください。 - -============================================================================== -あばうと *l9-about* *l9-contact* *l9-author* - -作者: Takeshi NISHIDA -ライセンス: MIT Licence -URL: http://www.vim.org/scripts/script.php?script_id=3252 - http://bitbucket.org/ns9tks/vim-l9/ - -バグや要望など ~ - -こちらへどうぞ: http://bitbucket.org/ns9tks/vim-l9/issues/ - -============================================================================== - vim:tw=78:ts=8:ft=help:norl: diff --git a/bundle/l9/doc/l9.txt b/bundle/l9/doc/l9.txt deleted file mode 100644 index c2906e6..0000000 --- a/bundle/l9/doc/l9.txt +++ /dev/null @@ -1,73 +0,0 @@ -*l9.txt* Vim-script library - - Copyright (c) 2009-2010 Takeshi NISHIDA - -l9 *l9* - -INTRODUCTION |l9-introduction| -INSTALLATION |l9-installation| -USAGE |l9-usage| -CHANGELOG |l9-changelog| -ABOUT |l9-about| - -============================================================================== -INTRODUCTION *l9-introduction* - -l9 is a Vim-script library, which provides some utility functions and commands -for programming in Vim. - -============================================================================== - INSTALLATION *l9-installation* - -Put all files into your runtime directory. If you have the zip file, extract -it to your runtime directory. - -You should place the files as follows: -> - /plugin/l9.vim - /doc/l9.txt - ... -< -If you are disgusted to make your runtime directory confused with a lot of -plugins, put each of the plugins into a directory individually and just add -the directory path to 'runtimepath'. It's easy to uninstall plugins. - -Then update your help tags files to enable help for this plugin. See -|add-local-help| for details. - -============================================================================== -USAGE *l9-usage* - -See source code. - -============================================================================== -CHANGELOG *l9-changelog* - -1.1: - - Added l9#zip() - - Added l9#tempvariables#getList() - - Changed l9#guardScriptLoading() - - Removed l9#tempvariables#swap() - -1.0.1: - - Fixed a bug that floating point numbers weren't evaluated correctly and - caused errors on some non-English locales. - -1.0: - - First release. - - -============================================================================== -ABOUT *l9-about* *l9-contact* *l9-author* - -Author: Takeshi NISHIDA -Licence: MIT Licence -URL: http://www.vim.org/scripts/script.php?script_id=3252 - http://bitbucket.org/ns9tks/vim-l9/ - -Bugs/Issues/Suggestions/Improvements ~ - -Please submit to http://bitbucket.org/ns9tks/vim-l9/issues/ . - -============================================================================== - vim:tw=78:ts=8:ft=help:norl: diff --git a/bundle/l9/plugin/l9.vim b/bundle/l9/plugin/l9.vim deleted file mode 100644 index 03613e4..0000000 --- a/bundle/l9/plugin/l9.vim +++ /dev/null @@ -1,108 +0,0 @@ -"============================================================================= -" Copyright (C) 2009-2010 Takeshi NISHIDA -" -" GetLatestVimScripts: 3252 1 :AutoInstall: L9 -"============================================================================= -" LOAD GUARD {{{1 - -if !l9#guardScriptLoading(expand(':p'), 702, 0, []) - finish -endif - -" }}}1 -"============================================================================= -" OPTIONS: {{{1 - -call l9#defineVariableDefault('g:l9_balloonly', 'balloonly.exe') - -" }}}1 -"============================================================================= -" ASSERTION: {{{1 - -" This command has effect only if $L9_DEBUG is non-zero. -" Used as follows: -" L9Assert a:i > 0 -" This command can't interpret script-local variables directly. -" NG: L9Assert s:a == 1 -" OK: execute 'L9Assert ' . s:a . ' == 1' -" -if $L9_DEBUG - command -nargs=* L9Assert call eval(() ? 0 : s:handleFailedAssersion()) - - function s:handleFailedAssersion(expr) - echoerr '[L9Assert] Assersion failure: ' . a:expr - if input('[L9Assert] Continue? (Y/N) ', 'Y') !=? 'Y' - throw 'L9Assert ' . a:expr - endif - endfunction - -else - command -nargs=* L9Assert : -endif - -" }}}1 -"============================================================================= -" TIMER: {{{1 - -" These commands have effect only if $L9_TIMER is non-zero. -" Used as follows: -" L9Timer foo -" ... (1) -" L9Timer bar -" ... (2) -" L9TimerStop -" ... -" L9TimerDump <- shows each elapsed time of (1) and (2) -" -if $L9_TIMER - command -nargs=1 L9Timer call s:timerBegin() - command -nargs=0 L9TimerStop call s:timerStop() - command -nargs=0 L9TimerDump call s:timerDump() - - let s:timerData = [] - let s:timerTagMaxLen = 0 - - function s:timerBegin(tag) - L9TimerStop - let s:timerCurrent = {'tag': strftime('%c ') . a:tag . ' ', 'time': reltime()} - let s:timerTagMaxLen = max([len(s:timerCurrent.tag), s:timerTagMaxLen]) - endfunction - - function s:timerStop() - if !exists('s:timerCurrent') - return - endif - let s:timerCurrent.time = reltimestr(reltime(s:timerCurrent.time)) - call add(s:timerData, s:timerCurrent) - unlet s:timerCurrent - endfunction - - function s:timerDump() - L9TimerStop - let lines = map(s:timerData, 'v:val.tag . repeat(" ", s:timerTagMaxLen - len(v:val.tag)) . v:val.time') - call l9#tempbuffer#openReadOnly('[l9-timer]', '', lines, 0, 0, 0, {}) - let s:timerData = [] - let s:timerTagMaxLen = 0 - endfunction - -else - command -nargs=1 L9Timer : - command -nargs=0 L9TimerStop : - command -nargs=0 L9TimerDump : -endif - -" }}}1 -"============================================================================= -" GREP BUFFER: {{{1 - -" Grep for current buffer by l9#grepBuffers() -" Used as :L9GrepBuffer/pattern -command -nargs=? L9GrepBuffer call l9#grepBuffers(, [bufnr('%')]) - -" Grep for all buffers by l9#grepBuffers() -" Used as :L9GrepBufferAll/pattern -command -nargs=? L9GrepBufferAll call l9#grepBuffers(, range(1, bufnr('$'))) - -" }}}1 -"============================================================================= -" vim: set fdm=marker: diff --git a/bundle/less/.gitignore b/bundle/less/.gitignore deleted file mode 100644 index 1377554..0000000 --- a/bundle/less/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.swp diff --git a/bundle/less/README.md b/bundle/less/README.md deleted file mode 100644 index 697ad12..0000000 --- a/bundle/less/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# VIM-LESS - -This vim bundle adds syntax highlighting, indenting and autocompletion for the dynamic stylesheet language [LESS](http://lesscss.org). - -This bundle is compatible with [vim-css-color](https://github.com/skammer/vim-css-color), -[vim-css3-syntax](https://github.com/hail2u/vim-css3-syntax) and possibly other plugins that place code -in `after/syntax/css.vim` or `after/syntax/css/*.vim`. - -![vim-less with vim-css-color and vim-css3-syntax (colorscheme solarized)](https://github.com/lenniboy/vim-less/raw/master/screenshot.png) - - -## Installing and Using - -- Install [pathogen](http://www.vim.org/scripts/script.php?script_id=2332) into `~/.vim/autoload/` and add the - following line to your `~/.vimrc`: - - call pathogen#infect() - -- Make a clone of the `vim-less` repository: - - $ mkdir -p ~/.vim/bundle - $ cd ~/.vim/bundle - $ git clone https://github.com/groenewege/vim-less - -- OR use [vundle](https://github.com/gmarik/vundle), adding this line to your `~/.vimrc`: - - Bundle 'groenewege/vim-less' - -- OR use git submodules: - - $ git submodule add https://github.com/groenewege/vim-less.git bundle/vim-less - $ git submodule init - - -### Map -.less to .css , lessc is required. - - nnoremap ,m :w !lessc % > %:t:r.css - - -## Credits - -Inspiration from [vim-haml](https://github.com/tpope/vim-haml), -[scss-syntax.vim](https://github.com/cakebaker/scss-syntax.vim) and -[vim-less](https://github.com/lunaru/vim-less) - -## License ## - -MIT : [groenewege.mit-license.org](http://groenewege.mit-license.org/) diff --git a/bundle/less/ftdetect/less.vim b/bundle/less/ftdetect/less.vim deleted file mode 100644 index f1cb1d7..0000000 --- a/bundle/less/ftdetect/less.vim +++ /dev/null @@ -1 +0,0 @@ -autocmd BufNewFile,BufRead *.less setf less diff --git a/bundle/less/ftplugin/less.vim b/bundle/less/ftplugin/less.vim deleted file mode 100644 index b6eaf6a..0000000 --- a/bundle/less/ftplugin/less.vim +++ /dev/null @@ -1,25 +0,0 @@ -" Vim filetype plugin -" Language: LessCSS -" Author: Tim Pope -" Maintainer: Leonard Ehrenfried -" Last Change: 2011 Sep 30 - -" Only do this when not done yet for this buffer -if exists("b:did_ftplugin") - finish -endif -let b:did_ftplugin = 1 - -let b:undo_ftplugin = "setl cms< def< inc< inex< ofu< sua<" - -setlocal iskeyword+=- -setlocal commentstring=//\ %s -setlocal define=^\\s*\\%(@mixin\\\|=\\) -setlocal includeexpr=substitute(v:fname,'\\%(.*/\\\|^\\)\\zs','_','') -setlocal omnifunc=csscomplete#CompleteCSS -setlocal suffixesadd=.less -setlocal comments=s1:/*,mb:*,ex:*/ - -let &l:include = '^\s*@import\s\+\%(url(http://github.com/)\=["'']\=' - -" vim:set sw=2: diff --git a/bundle/less/indent/less.vim b/bundle/less/indent/less.vim deleted file mode 100644 index fea8846..0000000 --- a/bundle/less/indent/less.vim +++ /dev/null @@ -1,11 +0,0 @@ -" Vim indent file -" Language: LessCSS -" Maintainer: Leonard Ehrenfried -" Last Change: 2011 Sep 26 - -if exists("b:did_indent") - finish -endif - -runtime! indent/css.vim - diff --git a/bundle/less/screenshot.png b/bundle/less/screenshot.png deleted file mode 100644 index ce25624..0000000 Binary files a/bundle/less/screenshot.png and /dev/null differ diff --git a/bundle/less/syntax/less.vim b/bundle/less/syntax/less.vim deleted file mode 100644 index fa5a247..0000000 --- a/bundle/less/syntax/less.vim +++ /dev/null @@ -1,64 +0,0 @@ -if exists("b:current_syntax") - finish -endif - -runtime! syntax/css.vim -runtime! after/syntax/css.vim -" load files from vim-css3-syntax plugin (https://github.com/hail2u/vim-css3-syntax) -runtime! after/syntax/css/*.vim - -syn case ignore - -syn region lessDefinition transparent matchgroup=cssBraces start='{' end='}' contains=css.*Attr,css.*Prop,cssComment,cssValue.*,cssColor,cssTagName,cssPseudoClass,cssUrl,cssImportant,cssError,cssStringQ,cssStringQQ,cssFunction,cssUnicodeEscape,lessDefinition,lessComment,lessClassChar,lessVariable,lessMixinChar,lessAmpersandChar,lessFunction,lessNestedSelector,@cssColors fold - -syn match lessVariable "@[[:alnum:]_-]\+" contained -syn match lessVariable "@[[:alnum:]_-]\+" nextgroup=lessVariableAssignment skipwhite -syn match lessVariableAssignment ":" contained nextgroup=lessVariableValue skipwhite -syn match lessVariableValue ".*;"me=e-1 contained contains=lessVariable,lessOperator,lessDefault,cssValue.*,@cssColors "me=e-1 means that the last char of the pattern is not highlighted - -syn match lessOperator "+" contained -syn match lessOperator "-" contained -syn match lessOperator "/" contained -syn match lessOperator "*" contained - -syn match lessNestedSelector "[^/]* {"me=e-1 contained contains=cssTagName,cssAttributeSelector,lessAmpersandChar,lessVariable,lessMixinChar,lessFunction,lessNestedProperty -syn match lessNestedProperty "[[:alnum:]]\+:"me=e-1 contained - -syn match lessDefault "!default" contained - -syn match lessMixinChar "\.[[:alnum:]_-]\@=" contained nextgroup=lessClass -syn match lessAmpersandChar "&" contained nextgroup=lessClass,cssPseudoClass -syn match lessClass "[[:alnum:]_-]\+" contained - -" functions {{{ - -" string functions -syn keyword lessFunction escape e % containedin=cssDefinition contained -" misc functions -syn keyword lessFunction color unit containedin=cssDefinition contained -" math functions -syn keyword lessFunction ceil floor percentage round containedin=cssDefinition contained -" color definition -syn keyword lessFunction rgb rgba argb hsl hsla hsv hsva containedin=cssDefinition contained -" color channel information -syn keyword lessFunction hue saturation lightness red green blue alpha luma containedin=cssDefinition contained -" color operations -syn keyword lessFunction saturate desaturate lighten darken fadein fadeout fade spin mix greyscale contrast containedin=cssDefinition contained -" color blending -syn keyword lessFunction multiply screen overlay softlight hardlight difference exclusion average negation containedin=cssDefinition contained - -" }}} - -syn match lessComment "//.*$" contains=@Spell - -hi def link lessVariable Special -hi def link lessVariableValue Constant -hi def link lessDefault Special -hi def link lessComment Comment -hi def link lessFunction Function -hi def link lessMixinChar Special -hi def link lessAmpersandChar Special -hi def link lessNestedProperty Type -hi def link lessClass PreProc - -let b:current_syntax = "less" diff --git a/bundle/misc/.gitignore b/bundle/misc/.gitignore deleted file mode 100755 index 926ccaa..0000000 --- a/bundle/misc/.gitignore +++ /dev/null @@ -1 +0,0 @@ -doc/tags diff --git a/bundle/misc/INSTALL.md b/bundle/misc/INSTALL.md deleted file mode 100755 index 2020f3d..0000000 --- a/bundle/misc/INSTALL.md +++ /dev/null @@ -1,13 +0,0 @@ -# Installation instructions - -There are two ways to install the vim-misc plug-in and it's up to you which you prefer, both options are explained below. Please note that below are generic installation instructions while some Vim plug-ins may have external dependencies, please refer to the plug-in's [readme](README.md) for details. - -## Installation using a ZIP archive - -Unzip the most recent ZIP archive of the [vim-misc](http://peterodding.com/code/vim/downloads/misc.zip) plug-in inside your Vim profile directory (usually this is `~/.vim` on UNIX and `%USERPROFILE%\vimfiles` on Windows), restart Vim and execute the command `:helptags ~/.vim/doc` (use `:helptags ~\vimfiles\doc` instead on Windows). - -If you get warnings about overwriting existing files while unpacking the ZIP archive you probably don't need to worry about this because it's most likely caused by files like `README.md`, `INSTALL.md` and `addon-info.json`. If these files bother you then you can remove them after unpacking the ZIP archive, they are not required to use the plug-in. - -## Installation using a Vim plug-in manager - -If you prefer you can also use [Pathogen](http://www.vim.org/scripts/script.php?script_id=2332), [Vundle](https://github.com/gmarik/vundle) or a similar tool to install and update the [vim-misc](https://github.com/xolox/vim-misc) plug-in using a local clone of the git repository. This takes a bit of work to set up the first time but it makes updating much easier, and it keeps each plug-in in its own directory which helps to keep your Vim profile uncluttered. diff --git a/bundle/misc/README.md b/bundle/misc/README.md deleted file mode 100755 index 937d7c9..0000000 --- a/bundle/misc/README.md +++ /dev/null @@ -1,1015 +0,0 @@ -# Miscellaneous auto-load Vim scripts - -The vim-misc plug-in contains Vim scripts that are used by most of the [Vim -plug-ins I've written] [plugins] yet don't really belong with any single one of -the plug-ins. Basically it's an extended standard library of Vim script -functions that I wrote during the development of my Vim profile and plug-ins. - -In the past these scripts were bundled with each plug-in, however that turned -out to be a maintenance nightmare for me. That's why the miscellaneous scripts -are now a proper plug-in with their own page on Vim Online. - -Because the miscellaneous scripts are no longer bundled with my Vim plug-ins, -users are now required to install the miscellaneous scripts separately. This is -unfortunate for users who are upgrading from a previous release that did bundle -the miscellaneous scripts, but I don't see any way around this. Sorry! - -## Installation - -Please refer to the [installation instructions] [howto-install] on GitHub. - -## Function documentation - -Below is the documentation for the functions included in the miscellaneous -scripts. Anyone is free to use these functions in their own Vim profile and/or -plug-ins. I care about backwards compatibility so won't break it without a good -reason to do so. - -For those who are curious: The function descriptions given below were extracted -from the source code of the miscellaneous scripts using the Python module -`vimdoctool.py` included in [vim-tools] []. - - - -The documentation of the 95 functions below was extracted from -19 Vim scripts on April 1, 2015 at 23:39. - -### Asynchronous Vim script evaluation - -The `xolox#misc#async#call()` function builds on top of `xolox#misc#os#exec()` -to support asynchronous evaluation of Vim scripts. The first (and for now -only) use case is my [vim-easytags][] plug-in which has a bunch of -conflicting requirements: - -1. I want the [vim-easytags][] plug-in to be as portable as possible. - Ideally everything is implemented in Vim script because that's the only - thing I can rely on to be available for all potential users of the - plug-in! - -2. Because of point one I've been forced to implement tags file reading, - parsing, (fold case) sorting and writing in Vim script. This is fine for - small tags files but once they grow to a couple of megabytes it becomes - annoying because Vim is unresponsive during tags file updates (key - presses are fortunately buffered due to Vim's input model but that - doesn't make it a nice user experience :-). - -3. I could (and did in the past) come up with all sorts of hacks to speed - things up without switching away from Vim script, but none of them are - going to solve the fundamental problem that Vim's unresponsive hiccups - become longer as tags files grow larger. - -By now it should be clear where this is heading: _Why not handle tags file -updates in a Vim process that runs in the background without blocking the -Vim process that the user is interacting with?_ It turns out that there are -quite a few details to take care of, but with those out of the way, it might -just work! I'm actually hoping to make asynchronous updates the default mode -in [vim-easytags][]. This means I need this functionality to be as -portable and robust as possible. - -**Status:** This code has seen little testing so I wouldn't trust it too -much just yet. On the other hand, as I said, my intention is to make this -functionality as portable and robust as possible. You be the judge :-). - -[vim-easytags]: http://peterodding.com/code/vim/easytags/ - -#### The `xolox#misc#async#call()` function - -Call a Vim script function asynchronously by starting a hidden Vim process -in the background. Once the function returns the hidden Vim process -terminates itself. This function takes a single argument which is a -dictionary with the following key/value pairs: - - - **function** (required): The name of the Vim function to call inside - the child process (a string). I suggest using an [autoload][] function - for this, see below. - - - **arguments** (optional): A list of arguments to pass to the function. - This list is serialized to a string using [string()][] and deserialized - using [eval()][]. - - - **callback** (optional): The name of a Vim function to call in the - parent process when the child process has completed (a string). - - - **clientserver** (optional): If this is true (1) the child process will - notify the parent process when it has finished (the default is true). - This works using Vim's client/server support which is not always - available. As a fall back Vim's [CursorHold][] automatic command is - also supported (although the effect is not quite as instantaneous :-). - -This functionality is experimental and non trivial to use, so consider -yourself warned :-). - -**Limitations** - -I'm making this functionality available in [vim-misc][] because I think it -can be useful to other plug-ins, however if you are going to use it you -should be aware of the following limitations: - - - Because of the use of multiple processes this functionality is only - suitable for 'heavy' tasks. - - - The function arguments are serialized to a string which is passed to - the hidden Vim process as a command line argument, so the amount of - data you can pass will be limited by your operating environment. - - - The hidden Vim process is explicitly isolated from the user in several - ways (see below for more details). This is to make sure that the hidden - Vim processes are fast and don't clobber the user's editing sessions in - any way. - -**Changes to how Vim normally works** - -You have to be aware that the hidden Vim process is initialized in a -specific way that is very different from your regular Vim editing -sessions: - - - Your [vimrc][] file is ignored using the `-u NONE` command line option. - - - Your [gvimrc][] file (if you even knew it existed ;-) is ignored using - the `-U NONE` command line option. - - - Plug-in loading is skipped using the `--noplugin` command line option. - - - Swap files (see [swap-file][]) are disabled using the `-n` command line - option. This makes sure asynchronous Vim processes don't disturb the - user's editing session. - - - Your [viminfo][] file is ignored using the `-i NONE` command line - option. Just like with swap files this makes sure asynchronous Vim - processes don't disturb the user's editing session. - - - No-compatible mode is enabled using the `-N` command line option - (usually the existence of your vimrc script would have achieved the - same effect but since we disable loading of your vimrc we need to spell - things out for Vim). - -**Use an auto-load function** - -The function you want to call is identified by its name which has to be -defined, but I just explained above that all regular initialization is -disabled for asynchronous Vim processes, so what gives? The answer is to -use an [autoload][] function. This should work fine because the -asynchronous Vim process 'inherits' the value of the ['runtimepath'][] -option from your editing session. - -['runtimepath']: http://vimdoc.sourceforge.net/htmldoc/options.html#'runtimepath' -[autoload]: http://vimdoc.sourceforge.net/htmldoc/eval.html#autoload -[CursorHold]: http://vimdoc.sourceforge.net/htmldoc/autocmd.html#CursorHold -[eval()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#eval() -[gvimrc]: http://vimdoc.sourceforge.net/htmldoc/gui.html#gvimrc -[string()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#string() -[swap-file]: http://vimdoc.sourceforge.net/htmldoc/recover.html#swap-file -[vim-misc]: http://peterodding.com/code/vim/misc/ -[viminfo]: http://vimdoc.sourceforge.net/htmldoc/starting.html#viminfo -[vimrc]: http://vimdoc.sourceforge.net/htmldoc/starting.html#vimrc - -#### The `xolox#misc#async#inside_child()` function - -Entry point inside the hidden Vim process that runs in the background. -Invoked indirectly by `xolox#misc#async#call()` because it runs a command -similar to the following: - - vim --cmd 'call xolox#misc#async#inside_child(...)' - -This function is responsible for calling the user defined function, -capturing exceptions and reporting the results back to the parent Vim -process using Vim's client/server support or a temporary file. - -#### The `xolox#misc#async#callback_to_parent()` function - -When Vim was compiled with client/server support this function (in the -parent process) will be called by `xolox#misc#async#inside_child()` (in -the child process) after the user defined function has returned. This -enables more or less instant callbacks after running an asynchronous -function. - -#### The `xolox#misc#async#periodic_callback()` function - -When client/server support is not being used the vim-misc plug-in -improvises: It uses Vim's [CursorHold][] event to periodically check if an -asynchronous process has written its results to one of the expected -temporary files. If a response is found the temporary file is read and -deleted and then `xolox#misc#async#callback_to_parent()` is called to -process the response. - -[CursorHold]: http://vimdoc.sourceforge.net/htmldoc/autocmd.html#CursorHold - -### Handling of special buffers - -The functions defined here make it easier to deal with special Vim buffers -that contain text generated by a Vim plug-in. For example my [vim-notes -plug-in] [vim-notes] generates several such buffers: - -- [:RecentNotes] [RecentNotes] lists recently modified notes -- [:ShowTaggedNotes] [ShowTaggedNotes] lists notes grouped by tags -- etc. - -Because the text in these buffers is generated, Vim shouldn't bother with -swap files and it should never prompt the user whether to save changes to -the generated text. - -[vim-notes]: http://peterodding.com/code/vim/notes/ -[RecentNotes]: http://peterodding.com/code/vim/notes/#recentnotes_command -[ShowTaggedNotes]: http://peterodding.com/code/vim/notes/#showtaggednotes_command - -#### The `xolox#misc#buffer#is_empty()` function - -Checks if the current buffer is an empty, unchanged buffer which can be -reused. Returns 1 if an empty buffer is found, 0 otherwise. - -#### The `xolox#misc#buffer#prepare()` function - -Open a special buffer, i.e. a buffer that will hold generated contents, -not directly edited by the user. The buffer can be customized by passing a -dictionary with the following key/value pairs as the first argument: - -- **name** (required): The base name of the buffer (i.e. the base name of - the file loaded in the buffer, even though it isn't really a file and - nothing is really 'loaded' :-) -- **path** (required): The pathname of the buffer. May be relevant if - [:lcd] [lcd] or ['autochdir'] [acd] is being used. - -[lcd]: http://vimdoc.sourceforge.net/htmldoc/editing.html#:lcd -[acd]: http://vimdoc.sourceforge.net/htmldoc/options.html#'autochdir' - -#### The `xolox#misc#buffer#lock()` function - -Lock a special buffer so that its contents can no longer be edited. - -#### The `xolox#misc#buffer#unlock()` function - -Unlock a special buffer so that its content can be updated. - -### Tab completion for user defined commands - -#### The `xolox#misc#complete#keywords()` function - -This function can be used to perform keyword completion for user defined -Vim commands based on the contents of the current buffer. Here's an -example of how you would use it: - - :command -nargs=* -complete=customlist,xolox#misc#complete#keywords MyCmd call s:MyCmd() - -### Rate limiting for Vim's CursorHold event - -Several of my Vim plug-ins (e.g. [vim-easytags][], [vim-notes][] and -[vim-session][]) use Vim's [CursorHold][] and [CursorHoldI][] events to -perform periodic tasks when the user doesn't press any keys for a couple of -seconds. These events by default fire after four seconds, this is -configurable using Vim's ['updatetime'][] option. The problem that this -script solves is that there are Vim plug-ins which set the ['updatetime'][] -option to unreasonably low values, thereby breaking my Vim plug-ins and -probably a lot of other Vim plug-ins out there. When users complain about -this I can tell them that another Vim plug-in is to blame, but users don't -care for the difference, their Vim is broken! So I implemented a workaround. -This script enables registration of [CursorHold][] event handlers with a -configurable interval (expressed in seconds). The event handlers will be -called no more than once every interval. - -['updatetime']: http://vimdoc.sourceforge.net/htmldoc/options.html#'updatetime' -[CursorHold]: http://vimdoc.sourceforge.net/htmldoc/autocmd.html#CursorHold -[CursorHoldI]: http://vimdoc.sourceforge.net/htmldoc/autocmd.html#CursorHoldI -[vim-easytags]: http://peterodding.com/code/vim/easytags/ -[vim-notes]: http://peterodding.com/code/vim/notes/ -[vim-session]: http://peterodding.com/code/vim/session/ - -#### The `xolox#misc#cursorhold#register()` function - -Register a [CursorHold][] event handler with a custom interval. This -function takes a single argument which is a dictionary with the following -fields: - - - **function** (required): The name of the event handler function (a - string). - - - **arguments** (optional): A list of arguments to pass to the event - handler function (defaults to an empty list). - - - **interval** (optional): The number of seconds between calls to the - event handler (defaults to 4). - -#### The `xolox#misc#cursorhold#autocmd()` function - -The 'top level event handler' that's called by Vim whenever the -[CursorHold][] or [CursorHoldI][] event fires. It iterates through the -event handlers registered using `xolox#misc#cursorhold#register()` and -calls each event handler at the appropriate interval, keeping track of -the time when each event handler was last run. - -### String escaping functions - -#### The `xolox#misc#escape#pattern()` function - -Takes a single string argument and converts it into a [:substitute] -[subcmd] / [substitute()] [subfun] pattern string that matches the given -string literally. - -[subfun]: http://vimdoc.sourceforge.net/htmldoc/eval.html#substitute() -[subcmd]: http://vimdoc.sourceforge.net/htmldoc/change.html#:substitute - -#### The `xolox#misc#escape#substitute()` function - -Takes a single string argument and converts it into a [:substitute] -[subcmd] / [substitute()] [subfun] replacement string that inserts the -given string literally. - -#### The `xolox#misc#escape#shell()` function - -Takes a single string argument and converts it into a quoted command line -argument. - -I was going to add a long rant here about Vim's ['shellslash' option] -[shellslash], but really, it won't make any difference. Let's just suffice -to say that I have yet to encounter a single person out there who uses -this option for its intended purpose (running a UNIX style shell on -Microsoft Windows). - -[shellslash]: http://vimdoc.sourceforge.net/htmldoc/options.html#'shellslash' - -### Human friendly string formatting for Vim - -#### The `xolox#misc#format#pluralize()` function - -Concatenate a counter (the first argument, expected to be an integer) with -a singular or plural label (the second and third arguments, both expected -to be strings). - -#### The `xolox#misc#format#timestamp()` function - -Format a time stamp (a string containing a formatted floating point -number) into a human friendly format, for example 70 seconds is phrased as -"1 minute and 10 seconds". - -### List handling functions - -#### The `xolox#misc#list#unique()` function - -Remove duplicate values from the given list in-place (preserves order). - -#### The `xolox#misc#list#binsert()` function - -Performs in-place binary insertion, which depending on your use case can -be more efficient than calling Vim's [sort()] [sort] function after each -insertion (in cases where a single, final sort is not an option). Expects -three arguments: - -1. A list -2. A value to insert -3. 1 (true) when case should be ignored, 0 (false) otherwise - -[sort]: http://vimdoc.sourceforge.net/htmldoc/eval.html#sort() - -### Functions to interact with the user - -#### The `xolox#misc#msg#info()` function - -Show a formatted informational message to the user. - -This function has the same argument handling as Vim's [printf()] [] -function with one notable difference: Any arguments which are not numbers -or strings are coerced to strings using Vim's [string()] [] function. - -In the case of `xolox#misc#msg#info()`, automatic string coercion simply -makes the function a bit easier to use. - -The messages emitted by this function have no highlighting. Previously -these messages were highlighted using the [Title group] [hl-title], but it -was pointed out in [pull request 16] [pr-16] that this group shouldn't be -used for informational messages because it is meant for titles and because -of this some color schemes use colors that stand out quite a bit, causing -the informational messages to look like errors. - -[hl-title]: http://vimdoc.sourceforge.net/htmldoc/syntax.html#hl-Title -[pr-16]: https://github.com/xolox/vim-misc/pull/16 -[printf()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#printf() -[string()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#string() - -#### The `xolox#misc#msg#warn()` function - -Show a formatted warning message to the user. - -This function has the same argument handling as the -`xolox#misc#msg#info()` function. - -#### The `xolox#misc#msg#debug()` function - -Show a formatted debugging message to the user, *if the user has enabled -increased verbosity by setting Vim's ['verbose'] [] option to one -(1) or higher*. - -This function has the same argument handling as the -`xolox#misc#msg#info()` function. - -In the case of `xolox#misc#msg#debug()`, automatic string coercion -provides lazy evaluation in the sense that complex data structures are -only converted to strings when the user has enabled increased verbosity. - -['verbose']: http://vimdoc.sourceforge.net/htmldoc/options.html#'verbose' - -### Integration between Vim and its environment - -#### The `xolox#misc#open#file()` function - -Given a pathname or URL as the first argument, this opens the file with -the program associated with the file type. So for example a text file -might open in Vim, an `*.html` file would probably open in your web -browser and a media file would open in a media player. - -This should work on Windows, Mac OS X and most Linux distributions. If -this fails to find a file association, you can pass one or more external -commands to try as additional arguments. For example: - - :call xolox#misc#open#file('/path/to/my/file', 'firefox', 'google-chrome') - -This generally shouldn't be necessary but it might come in handy now and -then. - -#### The `xolox#misc#open#url()` function - -Given a URL as the first argument, this opens the URL in your preferred or -best available web browser: - -- In GUI environments a graphical web browser will open (or a new tab will - be created in an existing window) -- In console Vim without a GUI environment, when you have any of `lynx`, - `links` or `w3m` installed it will launch a command line web browser in - front of Vim (temporarily suspending Vim) - -### Vim and plug-in option handling - -#### The `xolox#misc#option#get()` function - -Expects one or two arguments: 1. The name of a variable and 2. the default -value if the variable does not exist. - -Returns the value of the variable from a buffer local variable, global -variable or the default value, depending on which is defined. - -This is used by some of my Vim plug-ins for option handling, so that users -can customize options for specific buffers. - -#### The `xolox#misc#option#split()` function - -Given a multi-value Vim option like ['runtimepath'] [rtp] this returns a -list of strings. For example: - - :echo xolox#misc#option#split(&runtimepath) - ['/home/peter/Projects/Vim/misc', - '/home/peter/Projects/Vim/colorscheme-switcher', - '/home/peter/Projects/Vim/easytags', - ...] - -[rtp]: http://vimdoc.sourceforge.net/htmldoc/options.html#'runtimepath' - -#### The `xolox#misc#option#join()` function - -Given a list of strings like the ones returned by -`xolox#misc#option#split()`, this joins the strings together into a -single value that can be used to set a Vim option. - -#### The `xolox#misc#option#split_tags()` function - -Customized version of `xolox#misc#option#split()` with specialized -handling for Vim's ['tags' option] [tags]. - -[tags]: http://vimdoc.sourceforge.net/htmldoc/options.html#'tags' - -#### The `xolox#misc#option#join_tags()` function - -Customized version of `xolox#misc#option#join()` with specialized -handling for Vim's ['tags' option] [tags]. - -#### The `xolox#misc#option#eval_tags()` function - -Evaluate Vim's ['tags' option] [tags] without looking at the file -system, i.e. this will report tags files that don't exist yet. Expects -the value of the ['tags' option] [tags] as the first argument. If the -optional second argument is 1 (true) only the first match is returned, -otherwise (so by default) a list with all matches is returned. - -### Operating system interfaces - -#### The `xolox#misc#os#is_mac()` function - -Returns 1 (true) when on Mac OS X, 0 (false) otherwise. You would expect -this to simply check the Vim feature list, but for some obscure reason the -`/usr/bin/vim` included in Mac OS X (verified on version 10.7.5) returns 0 -(false) in response to `has('mac')`, so we check the output of `uname` -to avoid false negatives. - -#### The `xolox#misc#os#is_win()` function - -Returns 1 (true) when on Microsoft Windows, 0 (false) otherwise. - -#### The `xolox#misc#os#find_vim()` function - -Returns the program name of Vim as a string. On Windows and UNIX this just -[v:progname] [] as an absolute pathname while on Mac OS X there is -some special magic to find MacVim's executable even though it's usually -not on the executable search path. If you want, you can override the -value returned from this function by setting the global variable -`g:xolox#misc#os#vim_progname`. - -By default the choice of console Vim vs graphical Vim is made based on -the value of [v:progname] [], but if you have a preference you can pass -the string `vim` or `gvim` as the first and only argument. - -[v:progname]: http://vimdoc.sourceforge.net/htmldoc/eval.html#v:progname - -#### The `xolox#misc#os#exec()` function - -Execute an external command (hiding the console on Microsoft Windows when -my [vim-shell plug-in] [vim-shell] is installed). - -Expects a dictionary with the following key/value pairs as the first -argument: - -- **command** (required): The command line to execute -- **async** (optional): set this to 1 (true) to execute the command in the - background (asynchronously) -- **stdin** (optional): a string or list of strings with the input for the - external command -- **check** (optional): set this to 0 (false) to disable checking of the - exit code of the external command (by default an exception will be - raised when the command fails) - -Returns a dictionary with one or more of the following key/value pairs: - -- **command** (always available): the generated command line that was used - to run the external command -- **exit_code** (only in synchronous mode): the exit status of the - external command (an integer, zero on success) -- **stdout** (only in synchronous mode): the output of the command on the - standard output stream (a list of strings, one for each line) -- **stderr** (only in synchronous mode): the output of the command on the - standard error stream (as a list of strings, one for each line) - -[vim-shell]: http://peterodding.com/code/vim/shell/ - -#### The `xolox#misc#os#can_use_dll()` function - -If a) we're on Microsoft Windows, b) the vim-shell plug-in is installed -and c) the compiled DLL included in vim-shell works, we can use the -vim-shell plug-in to execute external commands! Returns 1 (true) -if we can use the DLL, 0 (false) otherwise. - -### Pathname manipulation functions - -#### The `xolox#misc#path#which()` function - -Scan the executable search path (`$PATH`) for one or more external -programs. Expects one or more string arguments with program names. Returns -a list with the absolute pathnames of all found programs. Here's an -example: - - :echo xolox#misc#path#which('gvim', 'vim') - ['/usr/local/bin/gvim', - '/usr/bin/gvim', - '/usr/local/bin/vim', - '/usr/bin/vim'] - -#### The `xolox#misc#path#split()` function - -Split a pathname (the first and only argument) into a list of pathname -components. - -On Windows, pathnames starting with two slashes or backslashes are UNC -paths where the leading slashes are significant... In this case we split -like this: - -- Input: `'//server/share/directory'` -- Result: `['//server', 'share', 'directory']` - -Everything except Windows is treated like UNIX until someone has a better -suggestion :-). In this case we split like this: - -- Input: `'/foo/bar/baz'` -- Result: `['/', 'foo', 'bar', 'baz']` - -To join a list of pathname components back into a single pathname string, -use the `xolox#misc#path#join()` function. - -#### The `xolox#misc#path#join()` function - -Join a list of pathname components (the first and only argument) into a -single pathname string. This is the counterpart to the -`xolox#misc#path#split()` function and it expects a list of pathname -components as returned by `xolox#misc#path#split()`. - -#### The `xolox#misc#path#directory_separator()` function - -Find the preferred directory separator for the platform and settings. - -#### The `xolox#misc#path#absolute()` function - -Canonicalize and resolve a pathname, *regardless of whether it exists*. -This is intended to support string comparison to determine whether two -pathnames point to the same directory or file. - -#### The `xolox#misc#path#relative()` function - -Make an absolute pathname (the first argument) relative to a directory -(the second argument). - -#### The `xolox#misc#path#merge()` function - -Join a directory pathname and filename into a single pathname. - -#### The `xolox#misc#path#commonprefix()` function - -Find the common prefix of path components in a list of pathnames. - -#### The `xolox#misc#path#starts_with()` function - -Check whether the first pathname starts with the second pathname (expected -to be a directory). This does not perform a regular string comparison; -first it normalizes both pathnames, then it splits them into their -pathname segments and then it compares the segments. - -#### The `xolox#misc#path#encode()` function - -Encode a pathname so it can be used as a filename. This uses URL encoding -to encode special characters. - -#### The `xolox#misc#path#decode()` function - -Decode a pathname previously encoded with `xolox#misc#path#encode()`. - -#### The `xolox#misc#path#is_relative()` function - -Returns true (1) when the pathname given as the first argument is -relative, false (0) otherwise. - -#### The `xolox#misc#path#tempdir()` function - -Create a temporary directory and return the pathname of the directory. - -### Manipulation of UNIX file permissions - -Vim's [writefile()][] function cannot set file permissions for newly created -files and although Vim script has a function to get file permissions (see -[getfperm()][]) there is no equivalent for changing a file's permissions. - -This omission breaks the otherwise very useful idiom of updating a file by -writing its new contents to a temporary file and then renaming the temporary -file into place (which is as close as you're going to get to atomically -updating a file's contents on UNIX) because the file's permissions will not -be preserved! - -**Here's a practical example:** My [vim-easytags][] plug-in writes tags file -updates to a temporary file and renames the temporary file into place. When -I use `sudo -s` on Ubuntu Linux it preserves my environment variables so my -`~/.vimrc` and the [vim-easytags][] plug-in are still loaded. Now when a -tags file is written the file becomes owned by root (my effective user id in -the `sudo` session). Once I leave the `sudo` session I can no longer update -my tags file because it's now owned by root … ಠ_ಠ - -[getfperm()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#getfperm() -[vim-easytags]: http://peterodding.com/code/vim/easytags/ -[writefile()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#writefile() - -#### The `xolox#misc#perm#update()` function - -Atomically update a file's contents while preserving the owner, group and -mode. The first argument is the pathname of the file to update (a string). -The second argument is the list of lines to be written to the file. Writes -the new contents to a temporary file and renames the temporary file into -place, thereby preventing readers from reading a partially written file. -Returns 1 if the file is successfully updated, 0 otherwise. - -Note that if `xolox#misc#perm#get()` and `xolox#misc#perm#set()` cannot be -used to preserve the file owner/group/mode the file is still updated using -a rename (for compatibility with non-UNIX systems and incompatible -`/usr/bin/stat` implementations) so in that case you can still lose the -file's owner/group/mode. - -#### The `xolox#misc#perm#get()` function - -Get the owner, group and permissions of the pathname given as the first -argument. Returns an opaque value which you can later pass to -`xolox#misc#perm#set()`. - -#### The `xolox#misc#perm#set()` function - -Set the permissions (the second argument) of the pathname given as the -first argument. Expects a permissions value created by -`xolox#misc#perm#get()`. - -### Persist/recall Vim values from/to files - -Vim's [string()][] function can be used to serialize Vim script values like -numbers, strings, lists, dictionaries and composites of them to a string -which can later be evaluated using the [eval()][] function to turn it back -into the original value. This Vim script provides functions to use these -functions to persist and recall Vim values from/to files. This is very -useful for communication between (possibly concurrent) Vim processes. - -#### The `xolox#misc#persist#load()` function - -Read a Vim value like a number, string, list or dictionary from a file -using [readfile()][] and [eval()][]. The first argument is the filename of -the file to read (a string). The optional second argument specifies the -default value which is returned when the file can't be loaded. This -function returns the loaded value or the default value (which itself -defaults to the integer 0). - -[eval()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#eval() -[readfile()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#readfile() - -#### The `xolox#misc#persist#save()` function - -Write a Vim value like a number, string, list or dictionary to a file -using [string()][] and [writefile()][]. The first argument is the filename -of the file to write (a string) and the second argument is the value to -write (any value). - -This function writes the serialized value to an intermediate file which is -then renamed into place atomically. This avoids issues with concurrent -processes where for example a producer has written a partial file which is -read by a consumer before the file is complete. In this case the consumer -would read a corrupt value. The rename trick avoids this problem. - -[string()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#string() -[writefile()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#writefile() - -### String handling - -#### The `xolox#misc#str#slug()` function - -Convert a string to a "slug" - something that can be safely used in -filenames and URLs without worrying about quoting/escaping of special -characters. - -#### The `xolox#misc#str#ucfirst()` function - -Uppercase the first character in a string (the first argument). - -#### The `xolox#misc#str#unescape()` function - -Remove back slash escapes from a string (the first argument). - -#### The `xolox#misc#str#compact()` function - -Compact whitespace in a string (the first argument). - -#### The `xolox#misc#str#trim()` function - -Trim all whitespace from the start and end of a string (the first -argument). - -#### The `xolox#misc#str#indent()` function - -Indent all lines in a multi-line string (the first argument) with a -specific number of *space characters* (the second argument, an integer). - -#### The `xolox#misc#str#dedent()` function - -Remove common whitespace from a multi line string. - -### Test runner & infrastructure for Vim plug-ins - -The Vim auto-load script `autoload/xolox/misc/test.vim` contains -infrastructure that can be used to run an automated Vim plug-in test suite. -It provides a framework for running test functions, keeping track of the -test status, making assertions and reporting test results to the user. - -#### The `xolox#misc#test#reset()` function - -Reset counters for executed tests and passed/failed assertions. - -#### The `xolox#misc#test#summarize()` function - -Print a summary of test results, to be interpreted interactively. - -#### The `xolox#misc#test#wrap()` function - -Call a function in a try/catch block and prevent exceptions from bubbling. -The name of the function should be passed as the first and only argument; -it should be a string containing the name of a Vim auto-load function. - -#### The `xolox#misc#test#passed()` function - -Record a test which succeeded. - -#### The `xolox#misc#test#failed()` function - -Record a test which failed. - -#### The `xolox#misc#test#assert_true()` function - -Check whether an expression is true. - -#### The `xolox#misc#test#assert_equals()` function - -Check whether two values are the same. - -#### The `xolox#misc#test#assert_same_type()` function - -Check whether two values are of the same type. - -### Tests for the miscellaneous Vim scripts - -The Vim auto-load script `autoload/xolox/misc/tests.vim` contains the -automated test suite of the miscellaneous Vim scripts. Right now the -coverage is not very high yet, but this will improve over time. - -#### The `xolox#misc#tests#run()` function - -Run the automated test suite of the miscellaneous Vim scripts. To be used -interactively. Intended to be safe to execute irrespective of context. - -#### The `xolox#misc#tests#pattern_escaping()` function - -Test escaping of regular expression patterns with -`xolox#misc#escape#pattern()`. - -#### The `xolox#misc#tests#substitute_escaping()` function - -Test escaping of substitution strings with -`xolox#misc#escape#substitute()`. - -#### The `xolox#misc#tests#shell_escaping()` function - -Test escaping of shell arguments with `xolox#misc#escape#shell()`. - -#### The `xolox#misc#tests#making_a_list_unique()` function - -Test removing of duplicate values from lists with -`xolox#misc#list#unique()`. - -#### The `xolox#misc#tests#binary_insertion()` function - -Test the binary insertion algorithm implemented in -`xolox#misc#list#binsert()`. - -#### The `xolox#misc#tests#getting_configuration_options()` function - -Test getting of scoped plug-in configuration "options" with -`xolox#misc#option#get()`. - -#### The `xolox#misc#tests#splitting_of_multi_valued_options()` function - -Test splitting of multi-valued Vim options with -`xolox#misc#option#split()`. - -#### The `xolox#misc#tests#joining_of_multi_valued_options()` function - -Test joining of multi-valued Vim options with `xolox#misc#option#join()`. - -#### The `xolox#misc#tests#finding_vim_on_the_search_path()` function - -Test looking up Vim's executable on the search path using [v:progname] [] -with `xolox#misc#os#find_vim()`. - -[v:progname]: http://vimdoc.sourceforge.net/htmldoc/eval.html#v:progname - -#### The `xolox#misc#tests#synchronous_command_execution()` function - -Test basic functionality of synchronous command execution with -`xolox#misc#os#exec()`. - -#### The `xolox#misc#tests#synchronous_command_execution_with_stderr()` function - -Test basic functionality of synchronous command execution with -`xolox#misc#os#exec()` including the standard error stream (not available -on Windows when vim-shell is not installed). - -#### The `xolox#misc#tests#synchronous_command_execution_with_raising_of_errors()` function - -Test raising of errors during synchronous command execution with -`xolox#misc#os#exec()`. - -#### The `xolox#misc#tests#synchronous_command_execution_without_raising_errors()` function - -Test synchronous command execution without raising of errors with -`xolox#misc#os#exec()`. - -#### The `xolox#misc#tests#asynchronous_command_execution()` function - -Test the basic functionality of asynchronous command execution with -`xolox#misc#os#exec()`. This runs the external command `mkdir` and tests -that the side effect of creating the directory takes place. This might -seem like a peculiar choice, but it's one of the few 100% portable -commands (Windows + UNIX) that doesn't involve input/output streams. - -#### The `xolox#misc#tests#string_case_transformation()` function - -Test string case transformation with `xolox#misc#str#ucfirst()`. - -#### The `xolox#misc#tests#string_whitespace_compaction()` function - -Test compaction of whitespace in strings with `xolox#misc#str#compact()`. - -#### The `xolox#misc#tests#string_whitespace_trimming()` function - -Test trimming of whitespace in strings with `xolox#misc#str#trim()`. - -#### The `xolox#misc#tests#multiline_string_dedent()` function - -Test dedenting of multi-line strings with `xolox#misc#str#dedent()`. - -#### The `xolox#misc#tests#version_string_parsing()` function - -Test parsing of version strings with `xolox#misc#version#parse()`. - -#### The `xolox#misc#tests#version_string_comparison()` function - -Test comparison of version strings with `xolox#misc#version#at_least()`. - -### Timing of long during operations - -#### The `xolox#misc#timer#resumable()` function - -Create a resumable timer object. This returns an object (a dictionary with -functions) with the following "methods": - - - `start()` instructs the timer object to start counting elapsed time - (when a timer object is created it is not automatically started). - - - `stop()` instructs the timer object to stop counting elapsed time. - This adds the time elapsed since `start()` was last called to the - total elapsed time. This method will raise an error if called out of - sequence. - - - `format()` takes the total elapsed time and reports it as a string - containing a formatted floating point number. - -Timer objects are meant to accurately time short running operations so -they're dependent on Vim's [reltime()][] and [reltimestr()][] functions. -In order to make it possible to use timer objects in my Vim plug-ins -unconditionally there's a fall back to [localtime()][] when [reltime()][] -is not available. In this mode the timer objects are not very useful but -at least they shouldn't raise errors. - -[localtime()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#localtime() -[reltime()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#reltime() -[reltimestr()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#reltimestr() - -#### The `xolox#misc#timer#start()` function - -Start a timer. This returns a list which can later be passed to -`xolox#misc#timer#stop()`. - -#### The `xolox#misc#timer#stop()` function - -Show a formatted debugging message to the user, if the user has enabled -increased verbosity by setting Vim's ['verbose'] [verbose] option to one -(1) or higher. - -This function has the same argument handling as Vim's [printf()] [printf] -function with one difference: At the point where you want the elapsed time -to be embedded, you write `%s` and you pass the list returned by -`xolox#misc#timer#start()` as an argument. - -[verbose]: http://vimdoc.sourceforge.net/htmldoc/options.html#'verbose' -[printf]: http://vimdoc.sourceforge.net/htmldoc/eval.html#printf() - -#### The `xolox#misc#timer#force()` function - -Show a formatted message to the user. This function has the same argument -handling as Vim's [printf()] [printf] function with one difference: At the -point where you want the elapsed time to be embedded, you write `%s` and -you pass the list returned by `xolox#misc#timer#start()` as an argument. - -#### The `xolox#misc#timer#convert()` function - -Convert the value returned by `xolox#misc#timer#start()` to a string -representation of the elapsed time since `xolox#misc#timer#start()` was -called. Other values are returned unmodified (this allows using it with -Vim's [map()][] function). - -[map()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#map() - -### Version string handling - -#### The `xolox#misc#version#parse()` function - -Convert a version string to a list of integers. - -#### The `xolox#misc#version#at_least()` function - -Check whether the second version string is equal to or greater than the -first version string. Returns 1 (true) when it is, 0 (false) otherwise. - - - -## Contact - -If you have questions, bug reports, suggestions, etc. please open an issue or -pull request on [GitHub] []. Download links and documentation can be found on -the plug-in's [homepage] []. If you like the script please vote for it on -[Vim Online] []. - -## License - -This software is licensed under the [MIT license] []. -© 2015 Peter Odding <>. - - -[GitHub]: http://github.com/xolox/vim-misc -[homepage]: http://peterodding.com/code/vim/misc -[MIT license]: http://en.wikipedia.org/wiki/MIT_License -[plugins]: http://peterodding.com/code/vim/ -[Vim Online]: http://www.vim.org/scripts/script.php?script_id=4597 -[vim-tools]: http://peterodding.com/code/vim/tools/ -[howto-install]: https://github.com/xolox/vim-misc/blob/master/INSTALL.md diff --git a/bundle/misc/addon-info.json b/bundle/misc/addon-info.json deleted file mode 100755 index 934bcf7..0000000 --- a/bundle/misc/addon-info.json +++ /dev/null @@ -1 +0,0 @@ -{"vim_script_nr": 4597, "dependencies": {}, "homepage": "http://peterodding.com/code/vim/misc", "name": "vim-misc"} \ No newline at end of file diff --git a/bundle/misc/autoload/xolox/misc.vim b/bundle/misc/autoload/xolox/misc.vim deleted file mode 100755 index 0b9f5ff..0000000 --- a/bundle/misc/autoload/xolox/misc.vim +++ /dev/null @@ -1,7 +0,0 @@ -" The version of my miscellaneous scripts. -" -" Author: Peter Odding -" Last Change: April 28, 2015 -" URL: http://peterodding.com/code/vim/misc/ - -let g:xolox#misc#version = '1.17.5' diff --git a/bundle/misc/autoload/xolox/misc/async.vim b/bundle/misc/autoload/xolox/misc/async.vim deleted file mode 100755 index 294a3a1..0000000 --- a/bundle/misc/autoload/xolox/misc/async.vim +++ /dev/null @@ -1,261 +0,0 @@ -" Asynchronous Vim script evaluation. -" -" Author: Peter Odding -" Last Change: September 17, 2014 -" URL: http://peterodding.com/code/vim/misc/ -" -" The `xolox#misc#async#call()` function builds on top of `xolox#misc#os#exec()` -" to support asynchronous evaluation of Vim scripts. The first (and for now -" only) use case is my [vim-easytags][] plug-in which has a bunch of -" conflicting requirements: -" -" 1. I want the [vim-easytags][] plug-in to be as portable as possible. -" Ideally everything is implemented in Vim script because that's the only -" thing I can rely on to be available for all potential users of the -" plug-in! -" -" 2. Because of point one I've been forced to implement tags file reading, -" parsing, (fold case) sorting and writing in Vim script. This is fine for -" small tags files but once they grow to a couple of megabytes it becomes -" annoying because Vim is unresponsive during tags file updates (key -" presses are fortunately buffered due to Vim's input model but that -" doesn't make it a nice user experience :-). -" -" 3. I could (and did in the past) come up with all sorts of hacks to speed -" things up without switching away from Vim script, but none of them are -" going to solve the fundamental problem that Vim's unresponsive hiccups -" become longer as tags files grow larger. -" -" By now it should be clear where this is heading: _Why not handle tags file -" updates in a Vim process that runs in the background without blocking the -" Vim process that the user is interacting with?_ It turns out that there are -" quite a few details to take care of, but with those out of the way, it might -" just work! I'm actually hoping to make asynchronous updates the default mode -" in [vim-easytags][]. This means I need this functionality to be as -" portable and robust as possible. -" -" **Status:** This code has seen little testing so I wouldn't trust it too -" much just yet. On the other hand, as I said, my intention is to make this -" functionality as portable and robust as possible. You be the judge :-). -" -" [vim-easytags]: http://peterodding.com/code/vim/easytags/ - -if !exists('g:xolox#misc#async#counter') - " Increasing integer number used to match asynchronous responses to the - " requests that generated them. - let g:xolox#misc#async#counter = 1 -endif - -if !exists('g:xolox#misc#async#requests') - " Queue of asynchronous requests that haven't received a response yet. - let g:xolox#misc#async#requests = {} -endif - -function! xolox#misc#async#call(options) " {{{1 - " Call a Vim script function asynchronously by starting a hidden Vim process - " in the background. Once the function returns the hidden Vim process - " terminates itself. This function takes a single argument which is a - " dictionary with the following key/value pairs: - " - " - **function** (required): The name of the Vim function to call inside - " the child process (a string). I suggest using an [autoload][] function - " for this, see below. - " - " - **arguments** (optional): A list of arguments to pass to the function. - " This list is serialized to a string using [string()][] and deserialized - " using [eval()][]. - " - " - **callback** (optional): The name of a Vim function to call in the - " parent process when the child process has completed (a string). - " - " - **clientserver** (optional): If this is true (1) the child process will - " notify the parent process when it has finished (the default is true). - " This works using Vim's client/server support which is not always - " available. As a fall back Vim's [CursorHold][] automatic command is - " also supported (although the effect is not quite as instantaneous :-). - " - " This functionality is experimental and non trivial to use, so consider - " yourself warned :-). - " - " **Limitations** - " - " I'm making this functionality available in [vim-misc][] because I think it - " can be useful to other plug-ins, however if you are going to use it you - " should be aware of the following limitations: - " - " - Because of the use of multiple processes this functionality is only - " suitable for 'heavy' tasks. - " - " - The function arguments are serialized to a string which is passed to - " the hidden Vim process as a command line argument, so the amount of - " data you can pass will be limited by your operating environment. - " - " - The hidden Vim process is explicitly isolated from the user in several - " ways (see below for more details). This is to make sure that the hidden - " Vim processes are fast and don't clobber the user's editing sessions in - " any way. - " - " **Changes to how Vim normally works** - " - " You have to be aware that the hidden Vim process is initialized in a - " specific way that is very different from your regular Vim editing - " sessions: - " - " - Your [vimrc][] file is ignored using the `-u NONE` command line option. - " - " - Your [gvimrc][] file (if you even knew it existed ;-) is ignored using - " the `-U NONE` command line option. - " - " - Plug-in loading is skipped using the `--noplugin` command line option. - " - " - Swap files (see [swap-file][]) are disabled using the `-n` command line - " option. This makes sure asynchronous Vim processes don't disturb the - " user's editing session. - " - " - Your [viminfo][] file is ignored using the `-i NONE` command line - " option. Just like with swap files this makes sure asynchronous Vim - " processes don't disturb the user's editing session. - " - " - No-compatible mode is enabled using the `-N` command line option - " (usually the existence of your vimrc script would have achieved the - " same effect but since we disable loading of your vimrc we need to spell - " things out for Vim). - " - " **Use an auto-load function** - " - " The function you want to call is identified by its name which has to be - " defined, but I just explained above that all regular initialization is - " disabled for asynchronous Vim processes, so what gives? The answer is to - " use an [autoload][] function. This should work fine because the - " asynchronous Vim process 'inherits' the value of the ['runtimepath'][] - " option from your editing session. - " - " ['runtimepath']: http://vimdoc.sourceforge.net/htmldoc/options.html#'runtimepath' - " [autoload]: http://vimdoc.sourceforge.net/htmldoc/eval.html#autoload - " [CursorHold]: http://vimdoc.sourceforge.net/htmldoc/autocmd.html#CursorHold - " [eval()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#eval() - " [gvimrc]: http://vimdoc.sourceforge.net/htmldoc/gui.html#gvimrc - " [string()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#string() - " [swap-file]: http://vimdoc.sourceforge.net/htmldoc/recover.html#swap-file - " [vim-misc]: http://peterodding.com/code/vim/misc/ - " [viminfo]: http://vimdoc.sourceforge.net/htmldoc/starting.html#viminfo - " [vimrc]: http://vimdoc.sourceforge.net/htmldoc/starting.html#vimrc - let unique_number = g:xolox#misc#async#counter - let g:xolox#misc#async#counter += 1 - let request = {'function': a:options['function']} - let request['arguments'] = get(a:options, 'arguments', []) - let request['starttime'] = xolox#misc#timer#start() - let request['number'] = unique_number - let callback = get(a:options, 'callback') - if !empty(callback) - let request['callback'] = callback - endif - if get(a:options, 'clientserver', 1) && !empty(v:servername) - let request['servername'] = v:servername - else - let temporary_file = tempname() - let request['temporary_file'] = temporary_file - endif - let vim_command = printf('let &rtp = %s | call xolox#misc#async#inside_child(%s)', string(&rtp), string(request)) - call xolox#misc#msg#debug("vim-misc %s: Generated asynchronous Vim command #%i: %s", g:xolox#misc#version, unique_number, vim_command) - let quoted_program = xolox#misc#escape#shell(xolox#misc#os#find_vim('vim')) - let quoted_command = xolox#misc#escape#shell(vim_command) - let shell_command = printf('%s -u NONE -U NONE --noplugin -n -N -i NONE --cmd %s', quoted_program, quoted_command) - call xolox#misc#msg#debug("vim-misc %s: Generated asynchronous shell command #%i: %s", g:xolox#misc#version, unique_number, shell_command) - call xolox#misc#os#exec({'command': shell_command, 'async': 1}) - let g:xolox#misc#async#requests[unique_number] = request -endfunction - -function! xolox#misc#async#inside_child(request) " {{{1 - " Entry point inside the hidden Vim process that runs in the background. - " Invoked indirectly by `xolox#misc#async#call()` because it runs a command - " similar to the following: - " - " vim --cmd 'call xolox#misc#async#inside_child(...)' - " - " This function is responsible for calling the user defined function, - " capturing exceptions and reporting the results back to the parent Vim - " process using Vim's client/server support or a temporary file. - try - let response = {'number': a:request['number']} - let starttime = xolox#misc#timer#start() - try - " Call the user defined function and store its result. - let response['result'] = call(a:request['function'], a:request['arguments']) - catch - " Intercept errors raised by the user defined function. - let response['exception'] = v:exception - let response['throwpoint'] = v:throwpoint - endtry - " Record the elapsed time. - let response['elapsed_time'] = xolox#misc#timer#convert(starttime) - " Communicate the results back to the master Vim process. - let servername = get(a:request, 'servername', '') - if !empty(servername) - " Actively notify the parent process using Vim's client/server support? - call remote_expr(servername, printf('xolox#misc#async#callback_to_parent(%s)', string(response))) - else - " 'Passively' notify the parent process by creating the expected - " temporary file. - call xolox#misc#persist#save(a:request['temporary_file'], response) - endif - finally - " Make sure we terminate this hidden Vim process. - quitall! - endtry -endfunction - -function! xolox#misc#async#callback_to_parent(response) " {{{1 - " When Vim was compiled with client/server support this function (in the - " parent process) will be called by `xolox#misc#async#inside_child()` (in - " the child process) after the user defined function has returned. This - " enables more or less instant callbacks after running an asynchronous - " function. - let unique_number = a:response['number'] - let request = g:xolox#misc#async#requests[unique_number] - call xolox#misc#timer#stop("vim-misc %s: Processing asynchronous callback #%i after %s ..", g:xolox#misc#version, unique_number, request['starttime']) - call remove(g:xolox#misc#async#requests, unique_number) - let callback = get(request, 'callback') - if !empty(callback) - call call(callback, [a:response]) - endif -endfunction - -function! xolox#misc#async#periodic_callback() " {{{1 - " When client/server support is not being used the vim-misc plug-in - " improvises: It uses Vim's [CursorHold][] event to periodically check if an - " asynchronous process has written its results to one of the expected - " temporary files. If a response is found the temporary file is read and - " deleted and then `xolox#misc#async#callback_to_parent()` is called to - " process the response. - " - " [CursorHold]: http://vimdoc.sourceforge.net/htmldoc/autocmd.html#CursorHold - if !empty(g:xolox#misc#async#requests) - let num_processed = 0 - call xolox#misc#msg#debug("vim-misc %s: Checking for asynchronous responses (%i responses not yet received) ..", g:xolox#misc#version, len(g:xolox#misc#async#requests)) - for unique_number in sort(keys(g:xolox#misc#async#requests)) - let request = g:xolox#misc#async#requests[unique_number] - let temporary_file = get(request, 'temporary_file', '') - if !empty(temporary_file) && getfsize(temporary_file) > 0 - try - call xolox#misc#msg#debug("vim-misc %s: Found asynchronous response by %s in %s ..", g:xolox#misc#version, request['function'], temporary_file) - call xolox#misc#async#callback_to_parent(xolox#misc#persist#load(temporary_file)) - let num_processed += 1 - finally - call delete(temporary_file) - endtry - endif - endfor - call xolox#misc#msg#debug("vim-misc %s: Processed %i asynchronous responses (%i responses not yet received).", g:xolox#misc#version, num_processed, len(g:xolox#misc#async#requests)) - endif -endfunction - -" }}}1 - -" The interval in the options below is set to one (1) although the default -" value for &updatetime is four seconds. Because vim-misc never modifies -" &updatetime the interval will effectively default to four seconds unless the -" user has set &updatetime to a lower value themselves. -call xolox#misc#cursorhold#register({'function': 'xolox#misc#async#periodic_callback', 'interval': 1}) - -" vim: ts=2 sw=2 et diff --git a/bundle/misc/autoload/xolox/misc/buffer.vim b/bundle/misc/autoload/xolox/misc/buffer.vim deleted file mode 100755 index 01dca6e..0000000 --- a/bundle/misc/autoload/xolox/misc/buffer.vim +++ /dev/null @@ -1,80 +0,0 @@ -" Handling of special buffers -" -" Author: Peter Odding -" Last Change: May 19, 2013 -" URL: http://peterodding.com/code/vim/misc/ -" -" The functions defined here make it easier to deal with special Vim buffers -" that contain text generated by a Vim plug-in. For example my [vim-notes -" plug-in] [vim-notes] generates several such buffers: -" -" - [:RecentNotes] [RecentNotes] lists recently modified notes -" - [:ShowTaggedNotes] [ShowTaggedNotes] lists notes grouped by tags -" - etc. -" -" Because the text in these buffers is generated, Vim shouldn't bother with -" swap files and it should never prompt the user whether to save changes to -" the generated text. -" -" [vim-notes]: http://peterodding.com/code/vim/notes/ -" [RecentNotes]: http://peterodding.com/code/vim/notes/#recentnotes_command -" [ShowTaggedNotes]: http://peterodding.com/code/vim/notes/#showtaggednotes_command - -function! xolox#misc#buffer#is_empty() " {{{1 - " Checks if the current buffer is an empty, unchanged buffer which can be - " reused. Returns 1 if an empty buffer is found, 0 otherwise. - return !&modified && expand('%') == '' && line('$') <= 1 && getline(1) == '' -endfunction - -function! xolox#misc#buffer#prepare(...) " {{{1 - " Open a special buffer, i.e. a buffer that will hold generated contents, - " not directly edited by the user. The buffer can be customized by passing a - " dictionary with the following key/value pairs as the first argument: - " - " - **name** (required): The base name of the buffer (i.e. the base name of - " the file loaded in the buffer, even though it isn't really a file and - " nothing is really 'loaded' :-) - " - **path** (required): The pathname of the buffer. May be relevant if - " [:lcd] [lcd] or ['autochdir'] [acd] is being used. - " - " [lcd]: http://vimdoc.sourceforge.net/htmldoc/editing.html#:lcd - " [acd]: http://vimdoc.sourceforge.net/htmldoc/options.html#'autochdir' - if a:0 == 1 && type(a:1) == type('') - " Backwards compatibility with old interface. - let options = {'name': a:1, 'path': a:1} - elseif type(a:1) == type({}) - let options = a:1 - else - throw "Invalid arguments" - endif - let winnr = 1 - let found = 0 - for bufnr in tabpagebuflist() - if xolox#misc#path#equals(options['path'], bufname(bufnr)) - execute winnr . 'wincmd w' - let found = 1 - break - else - let winnr += 1 - endif - endfor - if !(found || xolox#misc#buffer#is_empty()) - vsplit - endif - silent execute 'edit' fnameescape(options['path']) - lcd " clear working directory - setlocal buftype=nofile bufhidden=hide noswapfile - let &l:statusline = '[' . options['name'] . ']' - call xolox#misc#buffer#unlock() - silent %delete -endfunction - -function! xolox#misc#buffer#lock() " {{{1 - " Lock a special buffer so that its contents can no longer be edited. - setlocal readonly nomodifiable nomodified -endfunction - -function! xolox#misc#buffer#unlock() " {{{1 - " Unlock a special buffer so that its content can be updated. - setlocal noreadonly modifiable -endfunction diff --git a/bundle/misc/autoload/xolox/misc/complete.vim b/bundle/misc/autoload/xolox/misc/complete.vim deleted file mode 100755 index e3818d4..0000000 --- a/bundle/misc/autoload/xolox/misc/complete.vim +++ /dev/null @@ -1,26 +0,0 @@ -" Tab completion for user defined commands. -" -" Author: Peter Odding -" Last Change: July 9, 2014 -" URL: http://peterodding.com/code/vim/misc/ - -function! xolox#misc#complete#keywords(arglead, cmdline, cursorpos) - " This function can be used to perform keyword completion for user defined - " Vim commands based on the contents of the current buffer. Here's an - " example of how you would use it: - " - " :command -nargs=* -complete=customlist,xolox#misc#complete#keywords MyCmd call s:MyCmd() - let words = {} - for line in getline(1, '$') - for word in split(line, '\W\+') - let words[word] = 1 - endfor - endfor - let arguments = [keys(filter(words, 'v:key =~# a:arglead'))] - if &ignorecase - call add(arguments, 1) - endif - return call('sort', arguments) -endfunction - -" vim: ts=2 sw=2 et diff --git a/bundle/misc/autoload/xolox/misc/cursorhold.vim b/bundle/misc/autoload/xolox/misc/cursorhold.vim deleted file mode 100755 index cbbde1f..0000000 --- a/bundle/misc/autoload/xolox/misc/cursorhold.vim +++ /dev/null @@ -1,71 +0,0 @@ -" Rate limiting for Vim's CursorHold event. -" -" Author: Peter Odding -" Last Change: June 22, 2014 -" URL: http://peterodding.com/code/vim/misc/ -" -" Several of my Vim plug-ins (e.g. [vim-easytags][], [vim-notes][] and -" [vim-session][]) use Vim's [CursorHold][] and [CursorHoldI][] events to -" perform periodic tasks when the user doesn't press any keys for a couple of -" seconds. These events by default fire after four seconds, this is -" configurable using Vim's ['updatetime'][] option. The problem that this -" script solves is that there are Vim plug-ins which set the ['updatetime'][] -" option to unreasonably low values, thereby breaking my Vim plug-ins and -" probably a lot of other Vim plug-ins out there. When users complain about -" this I can tell them that another Vim plug-in is to blame, but users don't -" care for the difference, their Vim is broken! So I implemented a workaround. -" This script enables registration of [CursorHold][] event handlers with a -" configurable interval (expressed in seconds). The event handlers will be -" called no more than once every interval. -" -" ['updatetime']: http://vimdoc.sourceforge.net/htmldoc/options.html#'updatetime' -" [CursorHold]: http://vimdoc.sourceforge.net/htmldoc/autocmd.html#CursorHold -" [CursorHoldI]: http://vimdoc.sourceforge.net/htmldoc/autocmd.html#CursorHoldI -" [vim-easytags]: http://peterodding.com/code/vim/easytags/ -" [vim-notes]: http://peterodding.com/code/vim/notes/ -" [vim-session]: http://peterodding.com/code/vim/session/ - -if !exists('g:xolox#misc#cursorhold#handlers') - let g:xolox#misc#cursorhold#handlers = [] -endif - -function! xolox#misc#cursorhold#register(options) - " Register a [CursorHold][] event handler with a custom interval. This - " function takes a single argument which is a dictionary with the following - " fields: - " - " - **function** (required): The name of the event handler function (a - " string). - " - " - **arguments** (optional): A list of arguments to pass to the event - " handler function (defaults to an empty list). - " - " - **interval** (optional): The number of seconds between calls to the - " event handler (defaults to 4). - call add(g:xolox#misc#cursorhold#handlers, copy(a:options)) -endfunction - -function! xolox#misc#cursorhold#autocmd() - " The 'top level event handler' that's called by Vim whenever the - " [CursorHold][] or [CursorHoldI][] event fires. It iterates through the - " event handlers registered using `xolox#misc#cursorhold#register()` and - " calls each event handler at the appropriate interval, keeping track of - " the time when each event handler was last run. - for handler in g:xolox#misc#cursorhold#handlers - let function = handler['function'] - let last_run = get(handler, 'last_run', 0) - let interval = get(handler, 'interval', 4) - call xolox#misc#msg#debug("vim-misc %s: Checking handler %s with interval %i and last run %i ..", g:xolox#misc#version, function, interval, last_run) - " Rate limit in case &updatetime is set (very) low. - let time_until_next_run = (last_run + interval) - localtime() - if time_until_next_run > 0 - call xolox#misc#msg#debug("vim-misc %s: Rate limiting handler %s (time until next run: %i seconds).", g:xolox#misc#version, function, time_until_next_run) - else - call xolox#misc#msg#debug("vim-misc %s: Running handler %s ..", g:xolox#misc#version, function) - call call(function, get(handler, 'arguments', [])) - let handler['last_run'] = localtime() - endif - endfor -endfunction - -" vim: ts=2 sw=2 et diff --git a/bundle/misc/autoload/xolox/misc/escape.vim b/bundle/misc/autoload/xolox/misc/escape.vim deleted file mode 100755 index 29a16ca..0000000 --- a/bundle/misc/autoload/xolox/misc/escape.vim +++ /dev/null @@ -1,56 +0,0 @@ -" String escaping functions. -" -" Author: Peter Odding -" Last Change: May 19, 2013 -" URL: http://peterodding.com/code/vim/misc/ - -function! xolox#misc#escape#pattern(string) " {{{1 - " Takes a single string argument and converts it into a [:substitute] - " [subcmd] / [substitute()] [subfun] pattern string that matches the given - " string literally. - " - " [subfun]: http://vimdoc.sourceforge.net/htmldoc/eval.html#substitute() - " [subcmd]: http://vimdoc.sourceforge.net/htmldoc/change.html#:substitute - if type(a:string) == type('') - let string = escape(a:string, '^$.*\~[]') - return substitute(string, '\n', '\\n', 'g') - endif - return '' -endfunction - -function! xolox#misc#escape#substitute(string) " {{{1 - " Takes a single string argument and converts it into a [:substitute] - " [subcmd] / [substitute()] [subfun] replacement string that inserts the - " given string literally. - if type(a:string) == type('') - let string = escape(a:string, '\&~%') - return substitute(string, '\n', '\\r', 'g') - endif - return '' -endfunction - -function! xolox#misc#escape#shell(string) " {{{1 - " Takes a single string argument and converts it into a quoted command line - " argument. - " - " I was going to add a long rant here about Vim's ['shellslash' option] - " [shellslash], but really, it won't make any difference. Let's just suffice - " to say that I have yet to encounter a single person out there who uses - " this option for its intended purpose (running a UNIX style shell on - " Microsoft Windows). - " - " [shellslash]: http://vimdoc.sourceforge.net/htmldoc/options.html#'shellslash' - if xolox#misc#os#is_win() - try - let ssl_save = &shellslash - set noshellslash - return shellescape(a:string) - finally - let &shellslash = ssl_save - endtry - else - return shellescape(a:string) - endif -endfunction - -" vim: ts=2 sw=2 et diff --git a/bundle/misc/autoload/xolox/misc/format.vim b/bundle/misc/autoload/xolox/misc/format.vim deleted file mode 100755 index 44f7b54..0000000 --- a/bundle/misc/autoload/xolox/misc/format.vim +++ /dev/null @@ -1,46 +0,0 @@ -" Human friendly string formatting for Vim. -" -" Author: Peter Odding -" Last Change: June 2, 2013 -" URL: http://peterodding.com/code/vim/misc/ - -function! xolox#misc#format#pluralize(count, singular, plural) " {{{1 - " Concatenate a counter (the first argument, expected to be an integer) with - " a singular or plural label (the second and third arguments, both expected - " to be strings). - if a:count == 0 - return printf('no %s', a:plural) - else - return printf('%i %s', a:count, a:count == 1 ? a:singular : a:plural) - endif -endfunction - -function! xolox#misc#format#timestamp(ts) " {{{1 - " Format a time stamp (a string containing a formatted floating point - " number) into a human friendly format, for example 70 seconds is phrased as - " "1 minute and 10 seconds". - let seconds = a:ts + 0 - " Fast common case with extra precision from reltime(). - if seconds < 5 - let extract = matchstr(a:ts, '^\d\+\(\.0*[1-9][1-9]\?\)\?') - if extract =~ '[123456789]' - return extract . ' second' . (extract != '1' ? 's' : '') - endif - endif - " Generic but slow code. - let result = [] - for [name, size] in [['day', 60 * 60 * 24], ['hour', 60 * 60], ['minute', 60], ['second', 1]] - if seconds >= size - let counter = seconds / size - let seconds = seconds % size - let suffix = counter != 1 ? 's' : '' - call add(result, printf('%i %s%s', counter, name, suffix)) - endif - endfor - " Format the resulting text? - if len(result) == 1 - return result[0] - else - return join(result[0:-2], ', ') . ' and ' . result[-1] - endif -endfunction diff --git a/bundle/misc/autoload/xolox/misc/list.vim b/bundle/misc/autoload/xolox/misc/list.vim deleted file mode 100755 index 548592a..0000000 --- a/bundle/misc/autoload/xolox/misc/list.vim +++ /dev/null @@ -1,42 +0,0 @@ -" List handling functions. -" -" Author: Peter Odding -" Last Change: June 2, 2013 -" URL: http://peterodding.com/code/vim/misc/ - -function! xolox#misc#list#unique(list) " {{{1 - " Remove duplicate values from the given list in-place (preserves order). - call reverse(a:list) - call filter(a:list, 'count(a:list, v:val) == 1') - return reverse(a:list) -endfunction - -function! xolox#misc#list#binsert(list, value, ...) " {{{1 - " Performs in-place binary insertion, which depending on your use case can - " be more efficient than calling Vim's [sort()] [sort] function after each - " insertion (in cases where a single, final sort is not an option). Expects - " three arguments: - " - " 1. A list - " 2. A value to insert - " 3. 1 (true) when case should be ignored, 0 (false) otherwise - " - " [sort]: http://vimdoc.sourceforge.net/htmldoc/eval.html#sort() - let idx = s:binsert_r(a:list, 0, len(a:list), a:value, exists('a:1') && a:1) - return insert(a:list, a:value, idx) -endfunction - -function! s:binsert_r(list, low, high, value, ignorecase) - let mid = a:low + (a:high - a:low) / 2 - if a:low == a:high - return a:low - elseif a:ignorecase ? a:value >? a:list[mid] : a:value > a:list[mid] - return s:binsert_r(a:list, mid + 1, a:high, a:value, a:ignorecase) - elseif a:ignorecase ? a:value -" Last Change: March 15, 2015 -" URL: http://peterodding.com/code/vim/misc/ - -if !exists('g:xolox_message_buffer') - " For when I lose my :messages history :-\ - let g:xolox_message_buffer = 100 -endif - -if !exists('g:xolox_messages') - let g:xolox_messages = [] -endif - -function! xolox#misc#msg#info(...) " {{{1 - " Show a formatted informational message to the user. - " - " This function has the same argument handling as Vim's [printf()] [] - " function with one notable difference: Any arguments which are not numbers - " or strings are coerced to strings using Vim's [string()] [] function. - " - " In the case of `xolox#misc#msg#info()`, automatic string coercion simply - " makes the function a bit easier to use. - " - " The messages emitted by this function have no highlighting. Previously - " these messages were highlighted using the [Title group] [hl-title], but it - " was pointed out in [pull request 16] [pr-16] that this group shouldn't be - " used for informational messages because it is meant for titles and because - " of this some color schemes use colors that stand out quite a bit, causing - " the informational messages to look like errors. - " - " [hl-title]: http://vimdoc.sourceforge.net/htmldoc/syntax.html#hl-Title - " [pr-16]: https://github.com/xolox/vim-misc/pull/16 - " [printf()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#printf() - " [string()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#string() - call s:show_message('None', a:000) -endfunction - -function! xolox#misc#msg#warn(...) " {{{1 - " Show a formatted warning message to the user. - " - " This function has the same argument handling as the - " `xolox#misc#msg#info()` function. - call s:show_message('WarningMsg', a:000) -endfunction - -function! xolox#misc#msg#debug(...) " {{{1 - " Show a formatted debugging message to the user, *if the user has enabled - " increased verbosity by setting Vim's ['verbose'] [] option to one - " (1) or higher*. - " - " This function has the same argument handling as the - " `xolox#misc#msg#info()` function. - " - " In the case of `xolox#misc#msg#debug()`, automatic string coercion - " provides lazy evaluation in the sense that complex data structures are - " only converted to strings when the user has enabled increased verbosity. - " - " ['verbose']: http://vimdoc.sourceforge.net/htmldoc/options.html#'verbose' - if &vbs >= 1 - call s:show_message('Question', a:000) - endif -endfunction - -function! s:show_message(hlgroup, args) " {{{1 - " The implementation of info() and warn(). - let nargs = len(a:args) - if nargs == 1 - let message = a:args[0] - elseif nargs >= 2 - let args = map(copy(a:args), 's:coerce_argument(v:val)') - let message = call('printf', args) - endif - if exists('message') - try - " Temporarily disable Vim's |hit-enter| prompt and mode display. - if !exists('s:more_save') - let s:more_save = &more - let s:ruler_save = &ruler - let s:smd_save = &showmode - endif - set nomore noshowmode - if winnr('$') == 1 | set noruler | endif - augroup PluginXoloxHideMode - autocmd! CursorHold,CursorHoldI * call s:clear_message() - augroup END - execute 'echohl' a:hlgroup - " Redraw to avoid the |hit-enter| prompt. We use :silent to avoid issues - " like this one: https://github.com/xolox/vim-easytags/issues/69. - silent! redraw - for line in split(message, "\n") - echomsg line - endfor - if g:xolox_message_buffer > 0 - call add(g:xolox_messages, message) - if len(g:xolox_messages) > g:xolox_message_buffer - call remove(g:xolox_messages, 0) - endif - endif - finally - " Always clear message highlighting, even when interrupted by Ctrl-C. - echohl none - endtry - endif -endfunction - -function! s:coerce_argument(value) " {{{1 - " Callback to coerce printf() arguments into strings. - let value_type = type(a:value) - if value_type != type(0) && value_type != type('') - return string(a:value) - else - return a:value - endif -endfunction - -function! s:clear_message() " {{{1 - " Callback to clear message after some time has passed. - echo '' - let &more = s:more_save - let &showmode = s:smd_save - let &ruler = s:ruler_save - unlet s:more_save s:ruler_save s:smd_save - autocmd! PluginXoloxHideMode - augroup! PluginXoloxHideMode -endfunction - -" vim: ts=2 sw=2 et diff --git a/bundle/misc/autoload/xolox/misc/open.vim b/bundle/misc/autoload/xolox/misc/open.vim deleted file mode 100755 index ff0b5e2..0000000 --- a/bundle/misc/autoload/xolox/misc/open.vim +++ /dev/null @@ -1,100 +0,0 @@ -" Integration between Vim and its environment. -" -" Author: Peter Odding -" Last Change: June 19, 2013 -" URL: http://peterodding.com/code/vim/misc/ - -let s:enoimpl = "vim-misc %s: %s() hasn't been implemented for your platform! If you have suggestions, please get in touch at https://github.com/xolox/vim-misc/issues" -let s:handlers = ['gnome-open', 'kde-open', 'exo-open', 'xdg-open', 'cygstart'] - -function! xolox#misc#open#file(location, ...) " {{{1 - " Given a pathname or URL as the first argument, this opens the file with - " the program associated with the file type. So for example a text file - " might open in Vim, an `*.html` file would probably open in your web - " browser and a media file would open in a media player. - " - " This should work on Windows, Mac OS X and most Linux distributions. If - " this fails to find a file association, you can pass one or more external - " commands to try as additional arguments. For example: - " - " :call xolox#misc#open#file('/path/to/my/file', 'firefox', 'google-chrome') - " - " This generally shouldn't be necessary but it might come in handy now and - " then. - if xolox#misc#os#is_win() - try - call xolox#shell#open_with_windows_shell(a:location) - catch /^Vim\%((\a\+)\)\=:E117/ - let command = '!start CMD /C START "" %s' - silent execute printf(command, xolox#misc#escape#shell(a:location)) - endtry - return - elseif xolox#misc#os#is_mac() - call xolox#misc#msg#debug("vim-misc %s: Detected Mac OS X, using 'open' command to open %s ..", g:xolox#misc#version, string(a:location)) - let cmd = 'open ' . shellescape(a:location) . ' 2>&1' - call s:handle_error(cmd, system(cmd)) - return - else - for handler in s:handlers + a:000 - if executable(handler) - call xolox#misc#msg#debug("vim-misc %s: Using '%s' to open '%s'.", g:xolox#misc#version, handler, a:location) - let cmd = shellescape(handler) . ' ' . shellescape(a:location) . ' 2>&1' - call s:handle_error(cmd, system(cmd)) - return - endif - endfor - endif - throw printf(s:enoimpl, g:xolox#misc#version, 'xolox#misc#open#file') -endfunction - -function! xolox#misc#open#http://github.com/url(url) " {{{1 - " Given a URL as the first argument, this opens the URL in your preferred or - " best available web browser: - " - " - In GUI environments a graphical web browser will open (or a new tab will - " be created in an existing window) - " - In console Vim without a GUI environment, when you have any of `lynx`, - " `links` or `w3m` installed it will launch a command line web browser in - " front of Vim (temporarily suspending Vim) - let url = a:url - if url !~ '^\w\+://' - call xolox#misc#msg#debug("vim-misc %s: The URL %s doesn't contain a scheme, improvising ..", g:xolox#misc#version, string(url)) - if url !~ '@' - call xolox#misc#msg#debug("vim-misc %s: Defaulting to http:// URL scheme ..", g:xolox#misc#version) - let url = 'http://' . url - elseif url !~ '^mailto:' - call xolox#misc#msg#debug("vim-misc %s: Defaulting to mailto: URL scheme ..", g:xolox#misc#version) - let url = 'mailto:' . url - endif - endif - let on_unix = has('unix') - let not_on_mac = !xolox#misc#os#is_mac() - let no_gui_available = (has('gui_running') == 0 && $DISPLAY == '') - if on_unix && not_on_mac && no_gui_available - call xolox#misc#msg#debug("vim-misc %s: Using command line web browser because no GUI seems to be available ..", g:xolox#misc#version) - for browser in ['lynx', 'links', 'w3m'] - call xolox#misc#msg#debug("vim-misc %s: Checking whether %s command line web browser is installed ..", g:xolox#misc#version, string(browser)) - if executable(browser) - call xolox#misc#msg#debug("vim-misc %s: Found %s, using it to open %s ..", g:xolox#misc#version, string(browser), string(url)) - execute '!' . browser fnameescape(url) - call s:handle_error(browser . ' ' . url, '') - return - endif - endfor - endif - call xolox#misc#msg#debug("vim-misc %s: Defaulting to GUI web browser to open %s ..", g:xolox#misc#version, string(url)) - call xolox#misc#open#file(url, 'firefox', 'google-chrome') -endfunction - -function! s:handle_error(cmd, output) " {{{1 - if v:shell_error - let message = "vim-misc %s: Failed to execute program! (command line: %s%s)" - let output = strtrans(xolox#misc#str#trim(a:output)) - if output != '' - let output = ", output: " . string(output) - endif - throw printf(message, g:xolox#misc#version, a:cmd, output) - endif -endfunction - -" vim: et ts=2 sw=2 fdm=marker diff --git a/bundle/misc/autoload/xolox/misc/option.vim b/bundle/misc/autoload/xolox/misc/option.vim deleted file mode 100755 index 47c5f24..0000000 --- a/bundle/misc/autoload/xolox/misc/option.vim +++ /dev/null @@ -1,116 +0,0 @@ -" Vim and plug-in option handling. -" -" Author: Peter Odding -" Last Change: April 1, 2015 -" URL: http://peterodding.com/code/vim/misc/ - -function! xolox#misc#option#get(name, ...) " {{{1 - " Expects one or two arguments: 1. The name of a variable and 2. the default - " value if the variable does not exist. - " - " Returns the value of the variable from a buffer local variable, global - " variable or the default value, depending on which is defined. - " - " This is used by some of my Vim plug-ins for option handling, so that users - " can customize options for specific buffers. - if exists('b:' . a:name) - " Buffer local variable. - return eval('b:' . a:name) - elseif exists('g:' . a:name) - " Global variable. - return eval('g:' . a:name) - elseif exists('a:1') - " Default value. - return a:1 - endif -endfunction - -function! xolox#misc#option#split(value) " {{{1 - " Given a multi-value Vim option like ['runtimepath'] [rtp] this returns a - " list of strings. For example: - " - " :echo xolox#misc#option#split(&runtimepath) - " ['/home/peter/Projects/Vim/misc', - " '/home/peter/Projects/Vim/colorscheme-switcher', - " '/home/peter/Projects/Vim/easytags', - " ...] - " - " [rtp]: http://vimdoc.sourceforge.net/htmldoc/options.html#'runtimepath' - let values = split(a:value, '[^\\]\zs,') - return map(values, 's:unescape(v:val)') -endfunction - -function! s:unescape(s) - return substitute(a:s, '\\\([\\,]\)', '\1', 'g') -endfunction - -function! xolox#misc#option#join(values) " {{{1 - " Given a list of strings like the ones returned by - " `xolox#misc#option#split()`, this joins the strings together into a - " single value that can be used to set a Vim option. - let values = copy(a:values) - call map(values, 's:escape(v:val)') - return join(values, ',') -endfunction - -function! s:escape(s) - return escape(a:s, ',\') -endfunction - -function! xolox#misc#option#split_tags(value) " {{{1 - " Customized version of `xolox#misc#option#split()` with specialized - " handling for Vim's ['tags' option] [tags]. - " - " [tags]: http://vimdoc.sourceforge.net/htmldoc/options.html#'tags' - let values = split(a:value, '[^\\]\zs,') - return map(values, 's:unescape_tags(v:val)') -endfunction - -function! s:unescape_tags(s) - return substitute(a:s, '\\\([\\, ]\)', '\1', 'g') -endfunction - -function! xolox#misc#option#join_tags(values) " {{{1 - " Customized version of `xolox#misc#option#join()` with specialized - " handling for Vim's ['tags' option] [tags]. - let values = copy(a:values) - call map(values, 's:escape_tags(v:val)') - return join(values, ',') -endfunction - -function! s:escape_tags(s) - return escape(a:s, ', ') -endfunction - -function! xolox#misc#option#eval_tags(value, ...) " {{{1 - " Evaluate Vim's ['tags' option] [tags] without looking at the file - " system, i.e. this will report tags files that don't exist yet. Expects - " the value of the ['tags' option] [tags] as the first argument. If the - " optional second argument is 1 (true) only the first match is returned, - " otherwise (so by default) a list with all matches is returned. - let pathnames = [] - let first_only = exists('a:1') ? a:1 : 0 - for pattern in xolox#misc#option#split_tags(a:value) - " Make buffer relative pathnames absolute. - if pattern =~ '^\./' - let suffix = matchstr(pattern, '^./\zs.*$') - let directory = (&cpoptions =~# 'd') ? getcwd() : expand('%:p:h') - let pattern = xolox#misc#path#merge(directory, suffix) - endif - " Make working directory relative pathnames absolute. - if xolox#misc#path#is_relative(pattern) - let pattern = xolox#misc#path#merge(getcwd(), pattern) - endif - " Ignore the trailing `;' for recursive upwards searching because we - " always want the most specific pathname available. - let pattern = substitute(pattern, ';$', '', '') - " Expand the pattern. - call extend(pathnames, split(expand(pattern), "\n")) - if first_only && !empty(pathnames) - return pathnames[0] - endif - endfor - return first_only ? '' : pathnames -endfunction - -" vim: ts=2 sw=2 et diff --git a/bundle/misc/autoload/xolox/misc/os.vim b/bundle/misc/autoload/xolox/misc/os.vim deleted file mode 100755 index ea96116..0000000 --- a/bundle/misc/autoload/xolox/misc/os.vim +++ /dev/null @@ -1,271 +0,0 @@ -" Operating system interfaces. -" -" Author: Peter Odding -" Last Change: June , 2013 -" URL: http://peterodding.com/code/vim/misc/ - -function! xolox#misc#os#is_mac() " {{{1 - " Returns 1 (true) when on Mac OS X, 0 (false) otherwise. You would expect - " this to simply check the Vim feature list, but for some obscure reason the - " `/usr/bin/vim` included in Mac OS X (verified on version 10.7.5) returns 0 - " (false) in response to `has('mac')`, so we check the output of `uname` - " to avoid false negatives. - if !exists('s:is_mac') - " By default we assume we are *not* on Mac OS X. - let s:is_mac = 0 - if has('mac') || has('macunix') || has('gui_mac') - " If Vim's feature list indicates we are on Mac OS X, we have our answer :-). - let s:is_mac = 1 - elseif !xolox#misc#os#is_win() - " Otherwise we check the output of `uname' to avoid false negatives. - let result = xolox#misc#os#exec({'command': 'uname', 'check': 0}) - if result['exit_code'] == 0 && get(result['stdout'], 0, '') == 'Darwin' - let s:is_mac = 1 - endif - endif - endif - return s:is_mac -endfunction - -function! xolox#misc#os#is_win() " {{{1 - " Returns 1 (true) when on Microsoft Windows, 0 (false) otherwise. - return has('win16') || has('win32') || has('win64') -endfunction - -function! xolox#misc#os#find_vim(...) " {{{1 - " Returns the program name of Vim as a string. On Windows and UNIX this just - " [v:progname] [] as an absolute pathname while on Mac OS X there is - " some special magic to find MacVim's executable even though it's usually - " not on the executable search path. If you want, you can override the - " value returned from this function by setting the global variable - " `g:xolox#misc#os#vim_progname`. - " - " By default the choice of console Vim vs graphical Vim is made based on - " the value of [v:progname] [], but if you have a preference you can pass - " the string `vim` or `gvim` as the first and only argument. - " - " [v:progname]: http://vimdoc.sourceforge.net/htmldoc/eval.html#v:progname - if exists('a:1') - let program_name = a:1 - else - let program_name = v:progname - endif - if exists('g:xolox#misc#os#vim_progname') - let pathname = g:xolox#misc#os#vim_progname - else - let pathname = '' - endif - if empty(pathname) && xolox#misc#os#is_mac() - " Special handling for Mac OS X where MacVim is usually not on the $PATH. - " This always returns the "Vim" executable and not "MacVim" (regardless of - " the caller's preference) because "MacVim" has funky dock magic going on. - call xolox#misc#msg#debug("vim-misc %s: Trying MacVim workaround to find Vim executable ..", g:xolox#misc#version) - let segments = xolox#misc#path#split($VIMRUNTIME) - if segments[-3:] == ['Resources', 'vim', 'runtime'] - let pathname = xolox#misc#path#join(segments[0:-4] + ['MacOS', 'Vim']) - call xolox#misc#msg#debug("vim-misc %s: The MacVim workaround resulted in the Vim executable %s.", g:xolox#misc#version, string(pathname)) - endif - endif - if empty(pathname) - " Default logic. - call xolox#misc#msg#debug("vim-misc %s: Looking for Vim executable named %s on search path ..", g:xolox#misc#version, string(program_name)) - let candidates = xolox#misc#path#which(program_name) - if !empty(candidates) - call xolox#misc#msg#debug("vim-misc %s: Found %i candidate(s) on search path: %s.", g:xolox#misc#version, len(candidates), string(candidates)) - let pathname = candidates[0] - endif - endif - call xolox#misc#msg#debug("vim-misc %s: Reporting Vim executable %s.", g:xolox#misc#version, string(pathname)) - return pathname -endfunction - -function! xolox#misc#os#exec(options) " {{{1 - " Execute an external command (hiding the console on Microsoft Windows when - " my [vim-shell plug-in] [vim-shell] is installed). - " - " Expects a dictionary with the following key/value pairs as the first - " argument: - " - " - **command** (required): The command line to execute - " - **async** (optional): set this to 1 (true) to execute the command in the - " background (asynchronously) - " - **stdin** (optional): a string or list of strings with the input for the - " external command - " - **check** (optional): set this to 0 (false) to disable checking of the - " exit code of the external command (by default an exception will be - " raised when the command fails) - " - " Returns a dictionary with one or more of the following key/value pairs: - " - " - **command** (always available): the generated command line that was used - " to run the external command - " - **exit_code** (only in synchronous mode): the exit status of the - " external command (an integer, zero on success) - " - **stdout** (only in synchronous mode): the output of the command on the - " standard output stream (a list of strings, one for each line) - " - **stderr** (only in synchronous mode): the output of the command on the - " standard error stream (as a list of strings, one for each line) - " - " [vim-shell]: http://peterodding.com/code/vim/shell/ - try - - " Unpack the options. - let cmd = a:options['command'] - let async = get(a:options, 'async', 0) - - " We need to know in a couple of places whether we are on Windows. - let is_win = xolox#misc#os#is_win() - - " Use vim-shell so we don't pop up a console window on Windows? If the - " caller specifically asks us *not* to use vim-shell, we'll respect that - " choice; this is very useful for automated tests :-). - if get(a:options, 'use_dll', 1) == 0 - let use_dll = 0 - else - let use_dll = xolox#misc#os#can_use_dll() - endif - - " Decide whether to redirect the standard output and standard error - " streams to temporary files. - let redirect_output = !async && (use_dll || !is_win) - - " Write the input for the external command to a temporary file? - if has_key(a:options, 'stdin') && use_dll - let tempin = tempname() - if type(a:options['stdin']) == type([]) - let lines = a:options['stdin'] - else - let lines = split(a:options['stdin'], "\n") - endif - call writefile(lines, tempin) - let cmd .= ' < ' . xolox#misc#escape#shell(tempin) - endif - - " Redirect the standard output and/or standard error streams of the - " external process to temporary files? (only in synchronous mode) - if redirect_output - let tempout = tempname() - let temperr = tempname() - let cmd = printf('(%s) 1>%s 2>%s', cmd, xolox#misc#escape#shell(tempout), xolox#misc#escape#shell(temperr)) - endif - - " Use vim-shell or system() to execute the external command? - if use_dll - call xolox#misc#msg#debug("vim-misc %s: Executing external command using compiled DLL: %s", g:xolox#misc#version, cmd) - let exit_code = xolox#shell#execute_with_dll(cmd, async) - else - - " Enable asynchronous mode (very platform specific). - if async - if is_win - let cmd = printf('start /b %s', cmd) - elseif has('unix') - let cmd = printf('(%s) &', cmd) - else - call xolox#misc#msg#warn("vim-misc %s: I don't know how to execute the command %s asynchronously on your platform! Falling back to synchronous mode...", g:xolox#misc#version, cmd) - endif - endif - - " On UNIX we explicitly execute the command line using 'sh' instead of - " the default shell, because we assume that standard output and standard - " error can be redirected separately, but (t)csh does not support this - " (and it might be the default shell). - if has('unix') - call xolox#misc#msg#debug("vim-misc %s: Generated shell expression: %s", g:xolox#misc#version, cmd) - let cmd = printf('sh -c %s', xolox#misc#escape#shell(cmd)) - endif - - " Let the user know what's happening (in case they're interested). - if async && is_win - call xolox#misc#msg#debug("vim-misc %s: Executing external command using !start command: %s", g:xolox#misc#version, cmd) - silent execute '!' . cmd - else - call xolox#misc#msg#debug("vim-misc %s: Executing external command using system() function: %s", g:xolox#misc#version, cmd) - let arguments = [cmd] - if has_key(a:options, 'stdin') - if type(a:options['stdin']) == type([]) - call add(arguments, join(a:options['stdin'], "\n")) - else - call add(arguments, a:options['stdin']) - endif - endif - let stdout = call('system', arguments) - let exit_code = v:shell_error - endif - - endif - - " Return the results as a dictionary with one or more key/value pairs. - let result = {'command': cmd} - if !async - let result['exit_code'] = exit_code - " Get the standard output of the command. - if redirect_output - let result['stdout'] = s:readfile(tempout, 'standard output', a:options['command']) - elseif exists('stdout') - let result['stdout'] = split(stdout, "\n") - else - let result['stdout'] = [] - endif - " Get the standard error of the command. - if exists('temperr') - let result['stderr'] = s:readfile(temperr, 'standard error', a:options['command']) - else - let result['stderr'] = [] - endif - " If we just executed a synchronous command and the caller didn't - " specifically ask us *not* to check the exit code of the external - " command, we'll do so now. The idea here is that it should be easy - " to 'do the right thing'. - if get(a:options, 'check', 1) && exit_code != 0 - " Prepare an error message with enough details so the user can investigate. - let msg = printf("vim-misc %s: External command failed with exit code %d!", g:xolox#misc#version, result['exit_code']) - let msg .= printf("\nCommand line: %s", result['command']) - " If the external command reported an error, we'll include it in our message. - if !empty(result['stderr']) - " This is where we would normally expect to find an error message. - let msg .= printf("\nOutput on standard output stream:\n%s", join(result['stderr'], "\n")) - elseif !empty(result['stdout']) - " Exuberant Ctags on Windows XP reports errors on standard output :-x. - let msg .= printf("\nOutput on standard error stream:\n%s", join(result['stdout'], "\n")) - endif - throw msg - endif - endif - return result - - finally - " Cleanup any temporary files we created. - for name in ['tempin', 'tempout', 'temperr'] - if exists(name) - call delete({name}) - endif - endfor - endtry - -endfunction - -function! xolox#misc#os#can_use_dll() " {{{1 - " If a) we're on Microsoft Windows, b) the vim-shell plug-in is installed - " and c) the compiled DLL included in vim-shell works, we can use the - " vim-shell plug-in to execute external commands! Returns 1 (true) - " if we can use the DLL, 0 (false) otherwise. - let can_use_dll = 0 - try - let can_use_dll = xolox#shell#can_use_dll() - catch /^Vim\%((\a\+)\)\=:E117/ - " Silence E117. - endtry - return can_use_dll -endfunction - -function! s:readfile(fname, label, cmd) " {{{1 - try - return readfile(a:fname) - catch - call xolox#misc#msg#warn("vim-misc %s: Failed to read temporary file (%s) with %s of external command: %s! (external command: %s)", g:xolox#misc#version, a:fname, a:label, v:exception, a:cmd) - return [] - endtry -endfunction - -" vim: ts=2 sw=2 et diff --git a/bundle/misc/autoload/xolox/misc/path.vim b/bundle/misc/autoload/xolox/misc/path.vim deleted file mode 100755 index 6ff5589..0000000 --- a/bundle/misc/autoload/xolox/misc/path.vim +++ /dev/null @@ -1,278 +0,0 @@ -" Pathname manipulation functions. -" -" Author: Peter Odding -" Last Change: July 7, 2014 -" URL: http://peterodding.com/code/vim/misc/ - -let s:windows_compatible = xolox#misc#os#is_win() - -function! xolox#misc#path#which(...) " {{{1 - " Scan the executable search path (`$PATH`) for one or more external - " programs. Expects one or more string arguments with program names. Returns - " a list with the absolute pathnames of all found programs. Here's an - " example: - " - " :echo xolox#misc#path#which('gvim', 'vim') - " ['/usr/local/bin/gvim', - " '/usr/bin/gvim', - " '/usr/local/bin/vim', - " '/usr/bin/vim'] - let extensions = s:windows_compatible ? split($PATHEXT, ';') : [''] - let matches = [] - let checked = {} - for program in a:000 - for directory in split($PATH, s:windows_compatible ? ';' : ':') - let directory = xolox#misc#path#absolute(directory) - if isdirectory(directory) - let found = 0 - for extension in extensions - let path = xolox#misc#path#merge(directory, program . extension) - if executable(path) - call add(matches, path) - let found = 1 - endif - endfor - if s:windows_compatible && ! found - " Maybe the extension is already contained in program; try without - " $PATHEXT. - let path = xolox#misc#path#merge(directory, program) - if executable(path) - call add(matches, path) - endif - endif - endif - endfor - endfor - return xolox#misc#list#unique(matches) -endfunction - -function! xolox#misc#path#split(path) " {{{1 - " Split a pathname (the first and only argument) into a list of pathname - " components. - " - " On Windows, pathnames starting with two slashes or backslashes are UNC - " paths where the leading slashes are significant... In this case we split - " like this: - " - " - Input: `'//server/share/directory'` - " - Result: `['//server', 'share', 'directory']` - " - " Everything except Windows is treated like UNIX until someone has a better - " suggestion :-). In this case we split like this: - " - " - Input: `'/foo/bar/baz'` - " - Result: `['/', 'foo', 'bar', 'baz']` - " - " To join a list of pathname components back into a single pathname string, - " use the `xolox#misc#path#join()` function. - if type(a:path) == type('') - if s:windows_compatible - if a:path =~ '^[\/][\/]' - " UNC pathname. - return split(a:path, '\%>2c[\/]\+') - else - " If it's not a UNC pathname we can simply split on slashes and - " backslashes, although we should preserve a leading slash (which - " denotes a pathname that is 'absolute to the current drive'). - let absolute = (a:path =~ '^[\/]') - let segments = split(a:path, '[\/]\+') - return absolute ? insert(segments, a:path[0]) : segments - endif - else - " Everything else is treated as UNIX. - let absolute = (a:path =~ '^/') - let segments = split(a:path, '/\+') - return absolute ? insert(segments, '/') : segments - endif - endif - return [] -endfunction - -function! xolox#misc#path#join(parts) " {{{1 - " Join a list of pathname components (the first and only argument) into a - " single pathname string. This is the counterpart to the - " `xolox#misc#path#split()` function and it expects a list of pathname - " components as returned by `xolox#misc#path#split()`. - if type(a:parts) == type([]) - if s:windows_compatible - return join(a:parts, xolox#misc#path#directory_separator()) - elseif get(a:parts, 0) == '/' - " Absolute path on UNIX (non-Windows). - return '/' . join(a:parts[1:], '/') - else - " Relative path on UNIX (non-Windows). - return join(a:parts, '/') - endif - endif - return '' -endfunction - -function! xolox#misc#path#directory_separator() " {{{1 - " Find the preferred directory separator for the platform and settings. - return exists('+shellslash') && &shellslash ? '/' : '\' -endfunction - -function! xolox#misc#path#absolute(path) " {{{1 - " Canonicalize and resolve a pathname, *regardless of whether it exists*. - " This is intended to support string comparison to determine whether two - " pathnames point to the same directory or file. - if type(a:path) == type('') - let path = a:path - " Make the pathname absolute. - if path =~ '^\~' - " Expand ~ to $HOME. - let path = $HOME . '/' . path[1:] - elseif xolox#misc#path#is_relative(path) - " Make relative pathnames absolute. - let path = getcwd() . '/' . path - endif - " Resolve symbolic links to find the canonical pathname. In my tests this - " also removes all symbolic pathname segments (`.' and `..'), even when - " the pathname does not exist. Also there used to be a bug in resolve() - " where it wouldn't resolve pathnames ending in a directory separator. - " Since it's not much trouble to work around, that's what we do. - let path = resolve(substitute(path, s:windows_compatible ? '[\/]\+$' : '/\+$', '', '')) - " Normalize directory separators (especially relevant on Windows). - let parts = xolox#misc#path#split(path) - if s:windows_compatible && parts[0] =~ '^[\/][\/]' - " Also normalize the two leading "directory separators" (I'm not - " sure what else to call them :-) in Windows UNC pathnames. - let parts[0] = repeat(xolox#misc#path#directory_separator(), 2) . parts[0][2:] - elseif s:windows_compatible && parts[0] =~ '^[\/]$' - " If a pathname is relative to the current drive we should add - " the drive letter in order to make the pathname absolute. - let parts[0] = matchstr(getcwd(), '^\a:') - endif - return xolox#misc#path#join(parts) - endif - return '' -endfunction - -function! xolox#misc#path#relative(path, base) " {{{1 - " Make an absolute pathname (the first argument) relative to a directory - " (the second argument). - let path = xolox#misc#path#split(a:path) - let base = xolox#misc#path#split(a:base) - while path != [] && base != [] && path[0] == base[0] - call remove(path, 0) - call remove(base, 0) - endwhile - let distance = repeat(['..'], len(base)) - return xolox#misc#path#join(distance + path) -endfunction - -function! xolox#misc#path#merge(parent, child, ...) " {{{1 - " Join a directory pathname and filename into a single pathname. - if type(a:parent) == type('') && type(a:child) == type('') - " TODO Use xolox#misc#path#is_relative()? - if s:windows_compatible - let parent = substitute(a:parent, '[\\/]\+$', '', '') - let child = substitute(a:child, '^[\\/]\+', '', '') - return parent . '\' . child - else - let parent = substitute(a:parent, '/\+$', '', '') - let child = substitute(a:child, '^/\+', '', '') - return parent . '/' . child - endif - endif - return '' -endfunction - -function! xolox#misc#path#commonprefix(paths) " {{{1 - " Find the common prefix of path components in a list of pathnames. - let common = xolox#misc#path#split(a:paths[0]) - for path in a:paths - let index = 0 - for segment in xolox#misc#path#split(path) - if len(common) <= index - break - elseif common[index] != segment - call remove(common, index, -1) - break - endif - let index += 1 - endfor - endfor - return xolox#misc#path#join(common) -endfunction - -function! xolox#misc#path#starts_with(a, b) " {{{1 - " Check whether the first pathname starts with the second pathname (expected - " to be a directory). This does not perform a regular string comparison; - " first it normalizes both pathnames, then it splits them into their - " pathname segments and then it compares the segments. - let a = xolox#misc#path#split(xolox#misc#path#absolute(a:a)) - let b = xolox#misc#path#split(xolox#misc#path#absolute(a:b)) - return a[0 : len(b) - 1] == b -endfunction - -function! xolox#misc#path#encode(path) " {{{1 - " Encode a pathname so it can be used as a filename. This uses URL encoding - " to encode special characters. - if s:windows_compatible - let mask = '[*|\\/:"<>?%]' - elseif xolox#misc#os#is_mac() - let mask = '[\\/%:]' - else - let mask = '[\\/%]' - endif - return substitute(a:path, mask, '\=printf("%%%x", char2nr(submatch(0)))', 'g') -endfunction - -function! xolox#misc#path#decode(encoded_path) " {{{1 - " Decode a pathname previously encoded with `xolox#misc#path#encode()`. - return substitute(a:encoded_path, '%\(\x\x\?\)', '\=nr2char("0x" . submatch(1))', 'g') -endfunction - -" xolox#misc#path#equals(a, b) - Check whether two pathnames point to the same file. {{{1 - -if s:windows_compatible - function! xolox#misc#path#equals(a, b) - return a:a ==? a:b || xolox#misc#path#absolute(a:a) ==? xolox#misc#path#absolute(a:b) - endfunction -else - function! xolox#misc#path#equals(a, b) - return a:a ==# a:b || xolox#misc#path#absolute(a:a) ==# xolox#misc#path#absolute(a:b) - endfunction -endif - -function! xolox#misc#path#is_relative(path) " {{{1 - " Returns true (1) when the pathname given as the first argument is - " relative, false (0) otherwise. - if a:path =~ '^\w\+://' - return 0 - elseif s:windows_compatible - return a:path !~ '^\(\w:\|[\\/]\)' - else - return a:path !~ '^/' - endif -endfunction - -function! xolox#misc#path#tempdir() " {{{1 - " Create a temporary directory and return the pathname of the directory. - if !exists('s:tempdir_counter') - let s:tempdir_counter = 1 - endif - if exists('*mkdir') - if s:windows_compatible - let template = $TMP . '\vim_tempdir_' - elseif filewritable('/tmp') == 2 - let template = '/tmp/vim_tempdir_' - endif - endif - if !exists('template') - throw "xolox#misc#path#tempdir() hasn't been implemented on your platform!" - endif - while 1 - let directory = template . s:tempdir_counter - try - call mkdir(directory, '', 0700) - return directory - catch /^Vim\%((\a\+)\)\=:E739/ - " Keep looking for a non-existing directory. - endtry - let s:tempdir_counter += 1 - endwhile -endfunction - -" vim: ts=2 sw=2 et diff --git a/bundle/misc/autoload/xolox/misc/perm.vim b/bundle/misc/autoload/xolox/misc/perm.vim deleted file mode 100755 index 851a74d..0000000 --- a/bundle/misc/autoload/xolox/misc/perm.vim +++ /dev/null @@ -1,100 +0,0 @@ -" Manipulation of UNIX file permissions. -" -" Author: Peter Odding -" Last Change: June 30, 2014 -" URL: http://peterodding.com/code/vim/misc/ -" -" Vim's [writefile()][] function cannot set file permissions for newly created -" files and although Vim script has a function to get file permissions (see -" [getfperm()][]) there is no equivalent for changing a file's permissions. -" -" This omission breaks the otherwise very useful idiom of updating a file by -" writing its new contents to a temporary file and then renaming the temporary -" file into place (which is as close as you're going to get to atomically -" updating a file's contents on UNIX) because the file's permissions will not -" be preserved! -" -" **Here's a practical example:** My [vim-easytags][] plug-in writes tags file -" updates to a temporary file and renames the temporary file into place. When -" I use `sudo -s` on Ubuntu Linux it preserves my environment variables so my -" `~/.vimrc` and the [vim-easytags][] plug-in are still loaded. Now when a -" tags file is written the file becomes owned by root (my effective user id in -" the `sudo` session). Once I leave the `sudo` session I can no longer update -" my tags file because it's now owned by root … ಠ_ಠ -" -" [getfperm()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#getfperm() -" [vim-easytags]: http://peterodding.com/code/vim/easytags/ -" [writefile()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#writefile() - -function! xolox#misc#perm#update(fname, contents) - " Atomically update a file's contents while preserving the owner, group and - " mode. The first argument is the pathname of the file to update (a string). - " The second argument is the list of lines to be written to the file. Writes - " the new contents to a temporary file and renames the temporary file into - " place, thereby preventing readers from reading a partially written file. - " Returns 1 if the file is successfully updated, 0 otherwise. - " - " Note that if `xolox#misc#perm#get()` and `xolox#misc#perm#set()` cannot be - " used to preserve the file owner/group/mode the file is still updated using - " a rename (for compatibility with non-UNIX systems and incompatible - " `/usr/bin/stat` implementations) so in that case you can still lose the - " file's owner/group/mode. - let starttime = xolox#misc#timer#start() - let temporary_file = printf('%s.tmp', a:fname) - call xolox#misc#msg#debug("vim-misc %s: Writing new contents of %s to temporary file %s ..", g:xolox#misc#version, a:fname, temporary_file) - if writefile(a:contents, temporary_file) == 0 - call xolox#misc#perm#set(temporary_file, xolox#misc#perm#get(a:fname)) - call xolox#misc#msg#debug("vim-misc %s: Replacing %s with %s ..", g:xolox#misc#version, a:fname, temporary_file) - if rename(temporary_file, a:fname) == 0 - call xolox#misc#timer#stop("vim-misc %s: Successfully updated %s using atomic rename in %s.", g:xolox#misc#version, a:fname, starttime) - return 1 - endif - endif - if filereadable(temporary_file) - call delete(temporary_file) - endif - return 0 -endfunction - -function! xolox#misc#perm#get(fname) - " Get the owner, group and permissions of the pathname given as the first - " argument. Returns an opaque value which you can later pass to - " `xolox#misc#perm#set()`. - let pathname = xolox#misc#path#absolute(a:fname) - if filereadable(pathname) - let command = printf('stat --format %s %s', '%U:%G:%a', shellescape(pathname)) - let result = xolox#misc#os#exec({'command': command, 'check': 0}) - if result['exit_code'] == 0 && len(result['stdout']) >= 1 - let tokens = split(result['stdout'][0], ':') - if len(tokens) == 3 - let [owner, group, mode] = tokens - let mode = '0' . mode - call xolox#misc#msg#debug("vim-misc %s: File %s has owner %s, group %s, mode %s.", g:xolox#misc#version, pathname, owner, group, mode) - return [owner, group, mode] - endif - endif - endif - return [] -endfunction - -function! xolox#misc#perm#set(fname, perms) - " Set the permissions (the second argument) of the pathname given as the - " first argument. Expects a permissions value created by - " `xolox#misc#perm#get()`. - if !empty(a:perms) - let pathname = xolox#misc#path#absolute(a:fname) - let [owner, group, mode] = a:perms - if s:run('chown %s:%s %s', owner, group, pathname) && s:run('chmod %s %s', mode, pathname) - call xolox#misc#msg#debug("vim-misc %s: Successfully set %s owner to %s, group to %s and permissions to %s.", g:xolox#misc#version, pathname, owner, group, mode) - return 1 - endif - endif - return 0 -endfunction - -function! s:run(command, ...) - let args = map(copy(a:000), 'shellescape(v:val)') - call insert(args, a:command, 0) - let result = xolox#misc#os#exec({'command': call('printf', args), 'check': 0}) - return result['exit_code'] == 0 -endfunction diff --git a/bundle/misc/autoload/xolox/misc/persist.vim b/bundle/misc/autoload/xolox/misc/persist.vim deleted file mode 100755 index 5b628fb..0000000 --- a/bundle/misc/autoload/xolox/misc/persist.vim +++ /dev/null @@ -1,50 +0,0 @@ -" Persist/recall Vim values from/to files. -" -" Author: Peter Odding -" Last Change: June 30, 2014 -" URL: http://peterodding.com/code/vim/misc/ -" -" Vim's [string()][] function can be used to serialize Vim script values like -" numbers, strings, lists, dictionaries and composites of them to a string -" which can later be evaluated using the [eval()][] function to turn it back -" into the original value. This Vim script provides functions to use these -" functions to persist and recall Vim values from/to files. This is very -" useful for communication between (possibly concurrent) Vim processes. - -function! xolox#misc#persist#load(filename, ...) " {{{1 - " Read a Vim value like a number, string, list or dictionary from a file - " using [readfile()][] and [eval()][]. The first argument is the filename of - " the file to read (a string). The optional second argument specifies the - " default value which is returned when the file can't be loaded. This - " function returns the loaded value or the default value (which itself - " defaults to the integer 0). - " - " [eval()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#eval() - " [readfile()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#readfile() - let default_value = exists('a:1') ? a:1 : 0 - try - let lines = readfile(a:filename) - return eval(join(lines, "\n")) - catch - return default_value - endtry -endfunction - -function! xolox#misc#persist#save(filename, value) " {{{1 - " Write a Vim value like a number, string, list or dictionary to a file - " using [string()][] and [writefile()][]. The first argument is the filename - " of the file to write (a string) and the second argument is the value to - " write (any value). - " - " This function writes the serialized value to an intermediate file which is - " then renamed into place atomically. This avoids issues with concurrent - " processes where for example a producer has written a partial file which is - " read by a consumer before the file is complete. In this case the consumer - " would read a corrupt value. The rename trick avoids this problem. - " - " [string()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#string() - " [writefile()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#writefile() - return xolox#misc#perm#update(a:filename, split(string(a:value), "\n")) -endfunction - -" vim: ts=2 sw=2 et diff --git a/bundle/misc/autoload/xolox/misc/str.vim b/bundle/misc/autoload/xolox/misc/str.vim deleted file mode 100755 index edcab13..0000000 --- a/bundle/misc/autoload/xolox/misc/str.vim +++ /dev/null @@ -1,74 +0,0 @@ -" String handling. -" -" Author: Peter Odding -" Last Change: September 17, 2014 -" URL: http://peterodding.com/code/vim/misc/ - -function! xolox#misc#str#slug(s) " {{{1 - " Convert a string to a "slug" - something that can be safely used in - " filenames and URLs without worrying about quoting/escaping of special - " characters. - return join(split(tolower(a:s), '\W\+'), '-') -endfunction - -function! xolox#misc#str#ucfirst(s) " {{{1 - " Uppercase the first character in a string (the first argument). - return substitute(a:s, '^.', '\U\0', '') -endfunction - -function! xolox#misc#str#unescape(s) " {{{1 - " Remove back slash escapes from a string (the first argument). - return substitute(a:s, '\\\(\_.\)', '\1', 'g') -endfunction - -function! xolox#misc#str#compact(s) " {{{1 - " Compact whitespace in a string (the first argument). - return join(split(a:s), " ") -endfunction - -function! xolox#misc#str#trim(s) " {{{1 - " Trim all whitespace from the start and end of a string (the first - " argument). - return substitute(a:s, '^\_s*\(.\{-}\)\_s*$', '\1', '') -endfunction - -function! xolox#misc#str#indent(text, num_spaces) " {{{1 - " Indent all lines in a multi-line string (the first argument) with a - " specific number of *space characters* (the second argument, an integer). - let lines = split(a:text, "\n") - let indent = repeat(' ', a:num_spaces) - let [idx, limit] = [0, len(lines)] - while idx < limit - if lines[idx] =~ '\S' - let lines[idx] = indent . lines[idx] - endif - let idx += 1 - endwhile - return join(lines, "\n") -endfunction - -function! xolox#misc#str#dedent(text) " {{{1 - " Remove common whitespace from a multi line string. - let lines = split(a:text, "\n") - " First we need to determine the common indentation of all non-empty lines. - for line in lines - if line =~ '\S' - let indent = matchstr(line, '^\s*') - if !exists('common_indent') - let common_indent = indent - elseif len(indent) < len(common_indent) - let common_indent = indent - endif - endif - endfor - " Now we will strip the common indentation. - let [idx, limit] = [0, len(lines)] - let pattern = '^' . common_indent - while idx < limit - let lines[idx] = substitute(lines[idx], pattern, '', '') - let idx += 1 - endwhile - return join(lines, "\n") -endfunction - -" vim: ts=2 sw=2 et diff --git a/bundle/misc/autoload/xolox/misc/test.vim b/bundle/misc/autoload/xolox/misc/test.vim deleted file mode 100755 index df4d465..0000000 --- a/bundle/misc/autoload/xolox/misc/test.vim +++ /dev/null @@ -1,125 +0,0 @@ -" Test runner & infrastructure for Vim plug-ins. -" -" Author: Peter Odding -" Last Change: June 2, 2013 -" URL: http://peterodding.com/code/vim/misc/ -" -" The Vim auto-load script `autoload/xolox/misc/test.vim` contains -" infrastructure that can be used to run an automated Vim plug-in test suite. -" It provides a framework for running test functions, keeping track of the -" test status, making assertions and reporting test results to the user. - -" The process handling tests cannot use the built-in "echo" command from the -" Windows shell because it has way too much idiosyncrasies for me to put up -" with. Seriously. Instead I'm using an "echo.exe" from the UnxUtils project. -if xolox#misc#os#is_win() - let g:xolox#misc#test#echo = xolox#misc#escape#shell(xolox#misc#path#merge(expand(':p:h'), 'echo.exe')) -else - let g:xolox#misc#test#echo = 'echo' -endif - -function! xolox#misc#test#reset() " {{{1 - " Reset counters for executed tests and passed/failed assertions. - let s:num_executed = 0 - let s:num_passed = 0 - let s:num_failed = 0 - let s:tests_started_at = xolox#misc#timer#start() -endfunction - -function! xolox#misc#test#summarize() " {{{1 - " Print a summary of test results, to be interpreted interactively. - call s:delimit_output() - call xolox#misc#timer#force("Took %s to run %s: %s passed, %s failed.", - \ s:tests_started_at, - \ xolox#misc#format#pluralize(s:num_executed, 'test', 'tests'), - \ xolox#misc#format#pluralize(s:num_passed, 'assertion', 'assertions'), - \ xolox#misc#format#pluralize(s:num_failed, 'assertion', 'assertions')) -endfunction - -function! xolox#misc#test#wrap(function) " {{{1 - " Call a function in a try/catch block and prevent exceptions from bubbling. - " The name of the function should be passed as the first and only argument; - " it should be a string containing the name of a Vim auto-load function. - let num_failed = s:num_failed - try - if s:num_passed + s:num_failed > 0 - call s:delimit_output() - endif - let test_name = split(a:function, '#')[-1] - let test_name = substitute(test_name, '_', ' ', 'g') - let test_name = substitute(test_name, '^.', '\U\0', '') - call xolox#misc#msg#info("Running test #%i: %s", s:num_executed + 1, test_name) - call call(a:function, []) - catch - call xolox#misc#msg#warn("Test %s raised exception:", a:function) - call xolox#misc#msg#warn("%s", v:exception) - call xolox#misc#msg#warn("(at %s)", v:throwpoint) - if num_failed == s:num_failed - " Make sure exceptions are counted as failures, but don't inflate the - " number of failed assertions when it's not needed (it can produce - " confusing test output). - call xolox#misc#test#failed() - endif - endtry - let s:num_executed += 1 -endfunction - -function! xolox#misc#test#passed() " {{{1 - " Record a test which succeeded. - let s:num_passed += 1 - call s:print_feedback() -endfunction - -function! xolox#misc#test#failed() " {{{1 - " Record a test which failed. - let s:num_failed += 1 - call s:print_feedback() -endfunction - -function! s:delimit_output() " {{{1 - " Print a delimiter between output of tests. - call xolox#misc#msg#info("%s", repeat("-", 40)) -endfunction - -function! s:print_feedback() " {{{1 - " Let the user know the status of the test suite. - call xolox#misc#msg#info("Test status: %s passed, %s failed ..", - \ xolox#misc#format#pluralize(s:num_passed, 'assertion', 'assertions'), - \ xolox#misc#format#pluralize(s:num_failed, 'assertion', 'assertions')) -endfunction - -function! xolox#misc#test#assert_true(expr) " {{{1 - " Check whether an expression is true. - if a:expr - call xolox#misc#test#passed() - else - call xolox#misc#test#failed() - let msg = "Expected value to be true, got %s instead" - throw printf(msg, string(a:expr)) - endif -endfunction - -function! xolox#misc#test#assert_equals(expected, received) " {{{1 - " Check whether two values are the same. - call xolox#misc#test#assert_same_type(a:expected, a:received) - if a:expected == a:received - call xolox#misc#test#passed() - else - call xolox#misc#test#failed() - let msg = "Expected value %s, received value %s!" - throw printf(msg, string(a:expected), string(a:received)) - endif -endfunction - -function! xolox#misc#test#assert_same_type(expected, received) " {{{1 - " Check whether two values are of the same type. - if type(a:expected) == type(a:received) - call xolox#misc#test#passed() - else - call xolox#misc#test#failed() - let msg = "Expected value of same type as %s, got value %s!" - throw printf(msg, string(a:expected), string(a:received)) - endif -endfunction - -call xolox#misc#test#reset() diff --git a/bundle/misc/autoload/xolox/misc/tests.vim b/bundle/misc/autoload/xolox/misc/tests.vim deleted file mode 100755 index f3af1cb..0000000 --- a/bundle/misc/autoload/xolox/misc/tests.vim +++ /dev/null @@ -1,301 +0,0 @@ -" Tests for the miscellaneous Vim scripts. -" -" Author: Peter Odding -" Last Change: June , 2013 -" URL: http://peterodding.com/code/vim/misc/ -" -" The Vim auto-load script `autoload/xolox/misc/tests.vim` contains the -" automated test suite of the miscellaneous Vim scripts. Right now the -" coverage is not very high yet, but this will improve over time. - -let s:use_dll = 0 -let s:can_use_dll = xolox#misc#os#can_use_dll() - -function! xolox#misc#tests#run() " {{{1 - " Run the automated test suite of the miscellaneous Vim scripts. To be used - " interactively. Intended to be safe to execute irrespective of context. - call xolox#misc#test#reset() - " Run the tests. - call s:test_string_escaping() - call s:test_list_handling() - call s:test_option_handling() - call s:test_command_execution() - call s:test_string_handling() - call s:test_version_handling() - " Report a short summary to the user. - call xolox#misc#test#summarize() -endfunction - -function! s:wrap_exec_test(function) - " Wrapper for tests that use xolox#misc#os#exec(). If we're on Windows and - " the vim-shell plug-in is installed, the test will be run twice: Once with - " vim-shell disabled and once with vim-shell enabled. This makes sure that - " all code paths are tested as much as possible. - call xolox#misc#msg#debug("vim-misc %s: Temporarily disabling vim-shell so we can test vim-misc ..", g:xolox#misc#version) - let s:use_dll = 0 - call xolox#misc#test#wrap(a:function) - if s:can_use_dll - call xolox#misc#msg#debug("vim-misc %s: Re-enabling vim-shell so we can test that as well ..", g:xolox#misc#version) - let s:use_dll = 1 - call xolox#misc#test#wrap(a:function) - endif -endfunction - -" Tests for autoload/xolox/misc/escape.vim {{{1 - -function! s:test_string_escaping() - call xolox#misc#test#wrap('xolox#misc#tests#pattern_escaping') - call xolox#misc#test#wrap('xolox#misc#tests#substitute_escaping') - call s:wrap_exec_test('xolox#misc#tests#shell_escaping') -endfunction - -function! xolox#misc#tests#pattern_escaping() " {{{2 - " Test escaping of regular expression patterns with - " `xolox#misc#escape#pattern()`. - call xolox#misc#test#assert_equals('foo [qux] baz', substitute('foo [bar] baz', xolox#misc#escape#pattern('[bar]'), '[qux]', 'g')) - call xolox#misc#test#assert_equals('also very nasty', substitute('also ~ nasty', xolox#misc#escape#pattern('~'), 'very', 'g')) -endfunction - -function! xolox#misc#tests#substitute_escaping() " {{{2 - " Test escaping of substitution strings with - " `xolox#misc#escape#substitute()`. - call xolox#misc#test#assert_equals('nasty & tricky stuff', substitute('tricky stuff', 'tricky', xolox#misc#escape#substitute('nasty & tricky'), 'g')) -endfunction - -function! xolox#misc#tests#shell_escaping() " {{{2 - " Test escaping of shell arguments with `xolox#misc#escape#shell()`. - let expected_value = 'this < is > a | very " scary ^ string '' indeed' - let result = xolox#misc#os#exec({'command': g:xolox#misc#test#echo . ' ' . xolox#misc#escape#shell(expected_value), 'use_dll': s:use_dll}) - call xolox#misc#test#assert_equals(0, result['exit_code']) - call xolox#misc#test#assert_equals(0, result['exit_code']) - call xolox#misc#test#assert_same_type([], result['stdout']) - call xolox#misc#test#assert_equals(1, len(result['stdout'])) - " XXX On Windows using system() there's a trailing space I can't explain. - " However the point of this test was to show that all characters pass - " through unharmed, so for now I'll just ignore the space :-) - call xolox#misc#test#assert_equals(expected_value, xolox#misc#str#trim(result['stdout'][0])) -endfunction - -" Tests for autoload/xolox/misc/list.vim {{{1 - -function! s:test_list_handling() - call xolox#misc#test#wrap('xolox#misc#tests#making_a_list_unique') - call xolox#misc#test#wrap('xolox#misc#tests#binary_insertion') -endfunction - -function! xolox#misc#tests#making_a_list_unique() " {{{2 - " Test removing of duplicate values from lists with - " `xolox#misc#list#unique()`. - call xolox#misc#test#assert_equals([1, 2, 3, 4, 5], xolox#misc#list#unique([1, 1, 2, 3, 3, 4, 5, 5])) - " Should work for strings just as well. And it should preserve order. - call xolox#misc#test#assert_equals(['a', 'b', 'c'], xolox#misc#list#unique(['a', 'a', 'b', 'b', 'c'])) - " Just to make sure that lists without duplicate values pass through unharmed. - call xolox#misc#test#assert_equals([1, 2, 3, 4, 5], xolox#misc#list#unique([1, 2, 3, 4, 5])) -endfunction - -function! xolox#misc#tests#binary_insertion() " {{{2 - " Test the binary insertion algorithm implemented in - " `xolox#misc#list#binsert()`. - let list = ['a', 'B', 'e'] - " Insert 'c' (should end up between 'B' and 'e'). - call xolox#misc#list#binsert(list, 'c', 1) - call xolox#misc#test#assert_equals(['a', 'B', 'c', 'e'], list) - " Insert 'D' (should end up between 'c' and 'e'). - call xolox#misc#list#binsert(list, 'D', 1) - call xolox#misc#test#assert_equals(['a', 'B', 'c', 'D', 'e'], list) - " Insert 'f' (should end up after 'e', at the end). - call xolox#misc#list#binsert(list, 'f', 1) - call xolox#misc#test#assert_equals(['a', 'B', 'c', 'D', 'e', 'f'], list) -endfunction - -" Tests for autoload/xolox/misc/option.vim {{{1 - -function! s:test_option_handling() - call xolox#misc#test#wrap('xolox#misc#tests#getting_configuration_options') - call xolox#misc#test#wrap('xolox#misc#tests#splitting_of_multi_valued_options') - call xolox#misc#test#wrap('xolox#misc#tests#joining_of_multi_valued_options') -endfunction - -function! xolox#misc#tests#getting_configuration_options() " {{{2 - " Test getting of scoped plug-in configuration "options" with - " `xolox#misc#option#get()`. - let magic_name = 'a_variable_that_none_would_use' - call xolox#misc#test#assert_equals(0, xolox#misc#option#get(magic_name)) - " Test custom default values. - call xolox#misc#test#assert_equals([], xolox#misc#option#get(magic_name, [])) - " Set the option as a global variable. - let global_value = 'global variable' - let g:{magic_name} = global_value - call xolox#misc#test#assert_equals(global_value, xolox#misc#option#get(magic_name)) - " Set the option as a buffer local variable, thereby shadowing the global. - let local_value = 'buffer local variable' - let b:{magic_name} = local_value - call xolox#misc#test#assert_equals(local_value, xolox#misc#option#get(magic_name)) - " Sanity check that it's possible to unshadow as well. - unlet b:{magic_name} - call xolox#misc#test#assert_equals(global_value, xolox#misc#option#get(magic_name)) - " Cleanup after ourselves. - unlet g:{magic_name} - call xolox#misc#test#assert_equals(0, xolox#misc#option#get(magic_name)) -endfunction - -function! xolox#misc#tests#splitting_of_multi_valued_options() " {{{2 - " Test splitting of multi-valued Vim options with - " `xolox#misc#option#split()`. - call xolox#misc#test#assert_equals([], xolox#misc#option#split('')) - call xolox#misc#test#assert_equals(['just one value'], xolox#misc#option#split('just one value')) - call xolox#misc#test#assert_equals(['value 1', 'value 2'], xolox#misc#option#split('value 1,value 2')) - call xolox#misc#test#assert_equals(['value 1', 'value 2', 'tricky,value'], xolox#misc#option#split('value 1,value 2,tricky\,value')) -endfunction - -function! xolox#misc#tests#joining_of_multi_valued_options() " {{{2 - " Test joining of multi-valued Vim options with `xolox#misc#option#join()`. - call xolox#misc#test#assert_equals('', xolox#misc#option#join([])) - call xolox#misc#test#assert_equals('just one value', xolox#misc#option#join(['just one value'])) - call xolox#misc#test#assert_equals('value 1,value 2', xolox#misc#option#join(['value 1', 'value 2'])) - call xolox#misc#test#assert_equals('value 1,value 2,tricky\,value', xolox#misc#option#join(['value 1', 'value 2', 'tricky,value'])) -endfunction - -" Tests for autoload/xolox/misc/os.vim {{{1 - -function! s:test_command_execution() - call xolox#misc#test#wrap('xolox#misc#tests#finding_vim_on_the_search_path') - call s:wrap_exec_test('xolox#misc#tests#synchronous_command_execution') - call s:wrap_exec_test('xolox#misc#tests#synchronous_command_execution_with_stderr') - call s:wrap_exec_test('xolox#misc#tests#synchronous_command_execution_with_raising_of_errors') - call s:wrap_exec_test('xolox#misc#tests#synchronous_command_execution_without_raising_errors') - call s:wrap_exec_test('xolox#misc#tests#asynchronous_command_execution') -endfunction - -function! xolox#misc#tests#finding_vim_on_the_search_path() " {{{2 - " Test looking up Vim's executable on the search path using [v:progname] [] - " with `xolox#misc#os#find_vim()`. - " - " [v:progname]: http://vimdoc.sourceforge.net/htmldoc/eval.html#v:progname - let pathname = xolox#misc#os#find_vim() - call xolox#misc#test#assert_same_type('', pathname) - call xolox#misc#test#assert_true(executable(pathname)) -endfunction - -function! xolox#misc#tests#synchronous_command_execution() " {{{2 - " Test basic functionality of synchronous command execution with - " `xolox#misc#os#exec()`. - let result = xolox#misc#os#exec({'command': printf('%s output', g:xolox#misc#test#echo), 'use_dll': s:use_dll}) - call xolox#misc#test#assert_same_type({}, result) - call xolox#misc#test#assert_equals(0, result['exit_code']) - call xolox#misc#test#assert_equals(['output'], result['stdout']) -endfunction - -function! xolox#misc#tests#synchronous_command_execution_with_stderr() " {{{2 - " Test basic functionality of synchronous command execution with - " `xolox#misc#os#exec()` including the standard error stream (not available - " on Windows when vim-shell is not installed). - if !(xolox#misc#os#is_win() && !s:use_dll) - let result = xolox#misc#os#exec({'command': printf('%s output && %s errors >&2', g:xolox#misc#test#echo, g:xolox#misc#test#echo), 'use_dll': s:use_dll}) - call xolox#misc#test#assert_same_type({}, result) - call xolox#misc#test#assert_equals(0, result['exit_code']) - call xolox#misc#test#assert_equals(['output'], result['stdout']) - call xolox#misc#test#assert_equals(['errors'], result['stderr']) - endif -endfunction - -function! xolox#misc#tests#synchronous_command_execution_with_raising_of_errors() " {{{2 - " Test raising of errors during synchronous command execution with - " `xolox#misc#os#exec()`. - try - call xolox#misc#os#exec({'command': 'exit 1', 'use_dll': s:use_dll}) - call xolox#misc#test#assert_true(0) - catch - call xolox#misc#test#assert_true(1) - endtry -endfunction - -function! xolox#misc#tests#synchronous_command_execution_without_raising_errors() " {{{2 - " Test synchronous command execution without raising of errors with - " `xolox#misc#os#exec()`. - try - let result = xolox#misc#os#exec({'command': 'exit 42', 'check': 0, 'use_dll': s:use_dll}) - call xolox#misc#test#assert_true(1) - call xolox#misc#test#assert_equals(42, result['exit_code']) - catch - call xolox#misc#test#assert_true(0) - endtry -endfunction - -function! xolox#misc#tests#asynchronous_command_execution() " {{{2 - " Test the basic functionality of asynchronous command execution with - " `xolox#misc#os#exec()`. This runs the external command `mkdir` and tests - " that the side effect of creating the directory takes place. This might - " seem like a peculiar choice, but it's one of the few 100% portable - " commands (Windows + UNIX) that doesn't involve input/output streams. - let temporary_directory = xolox#misc#path#tempdir() - let random_name = printf('%i', localtime()) - let expected_directory = xolox#misc#path#merge(temporary_directory, random_name) - let command = 'mkdir ' . xolox#misc#escape#shell(expected_directory) - let result = xolox#misc#os#exec({'command': command, 'async': 1, 'use_dll': s:use_dll}) - call xolox#misc#test#assert_same_type({}, result) - " Make sure the command is really executed. - let timeout = localtime() + 30 - while !isdirectory(expected_directory) && localtime() < timeout - sleep 500 m - endwhile - call xolox#misc#test#assert_true(isdirectory(expected_directory)) -endfunction - -" Tests for autoload/xolox/misc/str.vim {{{1 - -function! s:test_string_handling() - call xolox#misc#test#wrap('xolox#misc#tests#string_case_transformation') - call xolox#misc#test#wrap('xolox#misc#tests#string_whitespace_compaction') - call xolox#misc#test#wrap('xolox#misc#tests#string_whitespace_trimming') - call xolox#misc#test#wrap('xolox#misc#tests#multiline_string_dedent') -endfunction - -function! xolox#misc#tests#string_case_transformation() - " Test string case transformation with `xolox#misc#str#ucfirst()`. - call xolox#misc#test#assert_equals('Foo', xolox#misc#str#ucfirst('foo')) - call xolox#misc#test#assert_equals('BAR', xolox#misc#str#ucfirst('BAR')) -endfunction - -function! xolox#misc#tests#string_whitespace_compaction() - " Test compaction of whitespace in strings with `xolox#misc#str#compact()`. - call xolox#misc#test#assert_equals('foo bar baz', xolox#misc#str#compact(' foo bar baz ')) - call xolox#misc#test#assert_equals('test', xolox#misc#str#compact("\ntest ")) -endfunction - -function! xolox#misc#tests#string_whitespace_trimming() - " Test trimming of whitespace in strings with `xolox#misc#str#trim()`. - call xolox#misc#test#assert_equals('foo bar baz', xolox#misc#str#trim("\nfoo bar baz ")) -endfunction - -function! xolox#misc#tests#multiline_string_dedent() - " Test dedenting of multi-line strings with `xolox#misc#str#dedent()`. - call xolox#misc#test#assert_equals('test', xolox#misc#str#dedent(' test')) - call xolox#misc#test#assert_equals("1\n\n2", xolox#misc#str#dedent(" 1\n\n 2")) - call xolox#misc#test#assert_equals("1\n\n 2", xolox#misc#str#dedent(" 1\n\n 2")) -endfunction - -" Tests for autoload/xolox/misc/version.vim {{{1 - -function! s:test_version_handling() - call xolox#misc#test#wrap('xolox#misc#tests#version_string_parsing') - call xolox#misc#test#wrap('xolox#misc#tests#version_string_comparison') -endfunction - -function! xolox#misc#tests#version_string_parsing() " {{{2 - " Test parsing of version strings with `xolox#misc#version#parse()`. - call xolox#misc#test#assert_equals([1], xolox#misc#version#parse('1')) - call xolox#misc#test#assert_equals([1, 5], xolox#misc#version#parse('1.5')) - call xolox#misc#test#assert_equals([1, 22, 3333, 44444, 55555], xolox#misc#version#parse('1.22.3333.44444.55555')) - call xolox#misc#test#assert_equals([1, 5], xolox#misc#version#parse('1x.5y')) -endfunction - -function! xolox#misc#tests#version_string_comparison() " {{{2 - " Test comparison of version strings with `xolox#misc#version#at_least()`. - call xolox#misc#test#assert_true(xolox#misc#version#at_least('1', '1')) - call xolox#misc#test#assert_true(!xolox#misc#version#at_least('1', '0')) - call xolox#misc#test#assert_true(xolox#misc#version#at_least('1', '2')) - call xolox#misc#test#assert_true(xolox#misc#version#at_least('1.2.3', '1.2.3')) - call xolox#misc#test#assert_true(!xolox#misc#version#at_least('1.2.3', '1.2')) - call xolox#misc#test#assert_true(xolox#misc#version#at_least('1.2.3', '1.2.4')) -endfunction diff --git a/bundle/misc/autoload/xolox/misc/timer.vim b/bundle/misc/autoload/xolox/misc/timer.vim deleted file mode 100755 index e97a186..0000000 --- a/bundle/misc/autoload/xolox/misc/timer.vim +++ /dev/null @@ -1,130 +0,0 @@ -" Timing of long during operations. -" -" Author: Peter Odding -" Last Change: July 19, 2014 -" URL: http://peterodding.com/code/vim/misc/ - -if !exists('g:timer_enabled') - let g:timer_enabled = 0 -endif - -if !exists('g:timer_verbosity') - let g:timer_verbosity = 1 -endif - -let s:has_reltime = has('reltime') -let s:unique_marker = 'xolox#misc#timer#value' - -function! xolox#misc#timer#resumable() " {{{1 - " Create a resumable timer object. This returns an object (a dictionary with - " functions) with the following "methods": - " - " - `start()` instructs the timer object to start counting elapsed time - " (when a timer object is created it is not automatically started). - " - " - `stop()` instructs the timer object to stop counting elapsed time. - " This adds the time elapsed since `start()` was last called to the - " total elapsed time. This method will raise an error if called out of - " sequence. - " - " - `format()` takes the total elapsed time and reports it as a string - " containing a formatted floating point number. - " - " Timer objects are meant to accurately time short running operations so - " they're dependent on Vim's [reltime()][] and [reltimestr()][] functions. - " In order to make it possible to use timer objects in my Vim plug-ins - " unconditionally there's a fall back to [localtime()][] when [reltime()][] - " is not available. In this mode the timer objects are not very useful but - " at least they shouldn't raise errors. - " - " [localtime()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#localtime() - " [reltime()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#reltime() - " [reltimestr()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#reltimestr() - let object = {'total': [0, 0]} - function object.start() dict - if s:has_reltime - let self.current = reltime() - else - let self.current = localtime() - endif - endfunction - function object.stop() dict - if empty(get(self, 'current')) - throw "timer.stop() called on a timer that was never started!" - endif - if s:has_reltime - let elapsed_time_string = xolox#misc#str#trim(reltimestr(reltime(self.current))) - " This is a bit silly (converting to a string and then parsing that) but - " the value of reltime() is documented as being platform specific... - let [seconds, microseconds] = split(elapsed_time_string, '\.') - let self.total[0] += substitute(seconds, '^0*', '', '') - let self.total[1] += substitute(microseconds, '^0*', '', '') - let self.current = [] - else - let self.total[0] += localtime() - self.current - let self.current = 0 - endif - endfunction - function object.format() dict - let seconds = self.total[0] - let microseconds = self.total[1] - if microseconds >= 1000000 - let additional_seconds = microseconds / 1000000 - let seconds += additional_seconds - let microseconds -= additional_seconds * 1000000 - endif - return printf('%i.%06i', seconds, microseconds) - endfunction - return object -endfunction - -function! xolox#misc#timer#start() " {{{1 - " Start a timer. This returns a list which can later be passed to - " `xolox#misc#timer#stop()`. - return [s:unique_marker, s:has_reltime ? reltime() : localtime()] -endfunction - -function! xolox#misc#timer#stop(...) " {{{1 - " Show a formatted debugging message to the user, if the user has enabled - " increased verbosity by setting Vim's ['verbose'] [verbose] option to one - " (1) or higher. - " - " This function has the same argument handling as Vim's [printf()] [printf] - " function with one difference: At the point where you want the elapsed time - " to be embedded, you write `%s` and you pass the list returned by - " `xolox#misc#timer#start()` as an argument. - " - " [verbose]: http://vimdoc.sourceforge.net/htmldoc/options.html#'verbose' - " [printf]: http://vimdoc.sourceforge.net/htmldoc/eval.html#printf() - if (g:timer_enabled || &verbose >= g:timer_verbosity) - call call('xolox#misc#msg#info', map(copy(a:000), 'xolox#misc#timer#convert(v:val)')) - endif -endfunction - -function! xolox#misc#timer#force(...) " {{{1 - " Show a formatted message to the user. This function has the same argument - " handling as Vim's [printf()] [printf] function with one difference: At the - " point where you want the elapsed time to be embedded, you write `%s` and - " you pass the list returned by `xolox#misc#timer#start()` as an argument. - call call('xolox#misc#msg#info', map(copy(a:000), 'xolox#misc#timer#convert(v:val)')) -endfunction - -function! xolox#misc#timer#convert(value) " {{{1 - " Convert the value returned by `xolox#misc#timer#start()` to a string - " representation of the elapsed time since `xolox#misc#timer#start()` was - " called. Other values are returned unmodified (this allows using it with - " Vim's [map()][] function). - " - " [map()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#map() - if type(a:value) == type([]) && len(a:value) == 2 && a:value[0] == s:unique_marker - if s:has_reltime - let ts = xolox#misc#str#trim(reltimestr(reltime(a:value[1]))) - else - let ts = localtime() - a:value[1] - endif - return xolox#misc#format#timestamp(ts) - endif - return a:value -endfunction - -" vim: ts=2 sw=2 et diff --git a/bundle/misc/autoload/xolox/misc/version.vim b/bundle/misc/autoload/xolox/misc/version.vim deleted file mode 100755 index 0f3ad67..0000000 --- a/bundle/misc/autoload/xolox/misc/version.vim +++ /dev/null @@ -1,34 +0,0 @@ -" Version string handling. -" -" Author: Peter Odding -" Last Change: June 22, 2013 -" URL: http://peterodding.com/code/vim/misc/ - -function! xolox#misc#version#parse(version_string) - " Convert a version string to a list of integers. - let result = map(split(a:version_string, '\.'), 'v:val + 0') - call xolox#misc#msg#debug("vim-misc %s: Parsed version string %s into %s.", g:xolox#misc#version, string(a:version_string), string(result)) - return result -endfunction - -function! xolox#misc#version#at_least(expected_version, available_version) - " Check whether the second version string is equal to or greater than the - " first version string. Returns 1 (true) when it is, 0 (false) otherwise. - let expected_version = xolox#misc#version#parse(a:expected_version) - let available_version = xolox#misc#version#parse(a:available_version) - for idx in range(max([len(expected_version), len(available_version)])) - let expected_number = get(expected_version, idx, 0) - let available_number = get(available_version, idx, 0) - if available_number > expected_number - call xolox#misc#msg#debug("vim-misc %s: Available version (%s) is higher than expected version (%s).", g:xolox#misc#version, a:available_version, a:expected_version) - return 1 - elseif available_number < expected_number - call xolox#misc#msg#debug("vim-misc %s: Available version (%s) is lower than expected version (%s).", g:xolox#misc#version, a:available_version, a:expected_version) - return 0 - endif - endfor - call xolox#misc#msg#debug("vim-misc %s: Available version (%s) is equal to expected version (%s).", g:xolox#misc#version, a:available_version, a:expected_version) - return 1 -endfunction - -" vim: ts=2 sw=2 et diff --git a/bundle/misc/doc/misc.txt b/bundle/misc/doc/misc.txt deleted file mode 100755 index 3476c46..0000000 --- a/bundle/misc/doc/misc.txt +++ /dev/null @@ -1,1204 +0,0 @@ -*misc.txt* Miscellaneous auto-load Vim scripts - -=============================================================================== -Contents ~ - - 1. Introduction |misc-introduction| - 2. Installation |misc-installation| - 3. Function documentation |misc-function-documentation| - 1. Asynchronous Vim script evaluation |misc-asynchronous-vim-script-evaluation| - 1. The |xolox#misc#async#call()| function - 2. The |xolox#misc#async#inside_child()| function - 3. The |xolox#misc#async#callback_to_parent()| function - 4. The |xolox#misc#async#periodic_callback()| function - 2. Handling of special buffers |misc-handling-of-special-buffers| - 1. The |xolox#misc#buffer#is_empty()| function - 2. The |xolox#misc#buffer#prepare()| function - 3. The |xolox#misc#buffer#lock()| function - 4. The |xolox#misc#buffer#unlock()| function - 3. Tab completion for user defined commands |misc-tab-completion-for-user-defined-commands| - 1. The |xolox#misc#complete#keywords()| function - 4. Rate limiting for Vim's CursorHold event |misc-rate-limiting-for-vims-cursorhold-event| - 1. The |xolox#misc#cursorhold#register()| function - 2. The |xolox#misc#cursorhold#autocmd()| function - 5. String escaping functions |misc-string-escaping-functions| - 1. The |xolox#misc#escape#pattern()| function - 2. The |xolox#misc#escape#substitute()| function - 3. The |xolox#misc#escape#shell()| function - 6. Human friendly string formatting for Vim |misc-human-friendly-string-formatting-for-vim| - 1. The |xolox#misc#format#pluralize()| function - 2. The |xolox#misc#format#timestamp()| function - 7. List handling functions |misc-list-handling-functions| - 1. The |xolox#misc#list#unique()| function - 2. The |xolox#misc#list#binsert()| function - 8. Functions to interact with the user |misc-functions-to-interact-with-user| - 1. The |xolox#misc#msg#info()| function - 2. The |xolox#misc#msg#warn()| function - 3. The |xolox#misc#msg#debug()| function - 9. Integration between Vim and its environment |misc-integration-between-vim-its-environment| - 1. The |xolox#misc#open#file()| function - 2. The |xolox#misc#open#url()| function - 10. Vim and plug-in option handling |misc-vim-plug-in-option-handling| - 1. The |xolox#misc#option#get()| function - 2. The |xolox#misc#option#split()| function - 3. The |xolox#misc#option#join()| function - 4. The |xolox#misc#option#split_tags()| function - 5. The |xolox#misc#option#join_tags()| function - 6. The |xolox#misc#option#eval_tags()| function - 11. Operating system interfaces |misc-operating-system-interfaces| - 1. The |xolox#misc#os#is_mac()| function - 2. The |xolox#misc#os#is_win()| function - 3. The |xolox#misc#os#find_vim()| function - 4. The |xolox#misc#os#exec()| function - 5. The |xolox#misc#os#can_use_dll()| function - 12. Pathname manipulation functions |misc-pathname-manipulation-functions| - 1. The |xolox#misc#path#which()| function - 2. The |xolox#misc#path#split()| function - 3. The |xolox#misc#path#join()| function - 4. The |xolox#misc#path#directory_separator()| function - 5. The |xolox#misc#path#absolute()| function - 6. The |xolox#misc#path#relative()| function - 7. The |xolox#misc#path#merge()| function - 8. The |xolox#misc#path#commonprefix()| function - 9. The |xolox#misc#path#starts_with()| function - 10. The |xolox#misc#path#encode()| function - 11. The |xolox#misc#path#decode()| function - 12. The |xolox#misc#path#is_relative()| function - 13. The |xolox#misc#path#tempdir()| function - 13. Manipulation of UNIX file permissions |misc-manipulation-of-unix-file-permissions| - 1. The |xolox#misc#perm#update()| function - 2. The |xolox#misc#perm#get()| function - 3. The |xolox#misc#perm#set()| function - 14. Persist/recall Vim values from/to files |misc-persist-recall-vim-values-from-to-files| - 1. The |xolox#misc#persist#load()| function - 2. The |xolox#misc#persist#save()| function - 15. String handling |misc-string-handling| - 1. The |xolox#misc#str#slug()| function - 2. The |xolox#misc#str#ucfirst()| function - 3. The |xolox#misc#str#unescape()| function - 4. The |xolox#misc#str#compact()| function - 5. The |xolox#misc#str#trim()| function - 6. The |xolox#misc#str#indent()| function - 7. The |xolox#misc#str#dedent()| function - 16. Test runner & infrastructure for Vim plug-ins |misc-test-runner-infrastructure-for-vim-plug-ins| - 1. The |xolox#misc#test#reset()| function - 2. The |xolox#misc#test#summarize()| function - 3. The |xolox#misc#test#wrap()| function - 4. The |xolox#misc#test#passed()| function - 5. The |xolox#misc#test#failed()| function - 6. The |xolox#misc#test#assert_true()| function - 7. The |xolox#misc#test#assert_equals()| function - 8. The |xolox#misc#test#assert_same_type()| function - 17. Tests for the miscellaneous Vim scripts |tests-for-miscellaneous-vim-scripts| - 1. The |xolox#misc#tests#run()| function - 2. The |xolox#misc#tests#pattern_escaping()| function - 3. The |xolox#misc#tests#substitute_escaping()| function - 4. The |xolox#misc#tests#shell_escaping()| function - 5. The |xolox#misc#tests#making_a_list_unique()| function - 6. The |xolox#misc#tests#binary_insertion()| function - 7. The |xolox#misc#tests#getting_configuration_options()| function - 8. The |xolox#misc#tests#splitting_of_multi_valued_options()| function - 9. The |xolox#misc#tests#joining_of_multi_valued_options()| function - 10. The |xolox#misc#tests#finding_vim_on_the_search_path()| function - 11. The |xolox#misc#tests#synchronous_command_execution()| function - 12. The |xolox#misc#tests#synchronous_command_execution_with_stderr()| function - 13. The |xolox#misc#tests#synchronous_command_execution_with_raising_of_errors()| -function - 14. The |xolox#misc#tests#synchronous_command_execution_without_raising_errors()| -function - 15. The |xolox#misc#tests#asynchronous_command_execution()| function - 16. The |xolox#misc#tests#string_case_transformation()| function - 17. The |xolox#misc#tests#string_whitespace_compaction()| function - 18. The |xolox#misc#tests#string_whitespace_trimming()| function - 19. The |xolox#misc#tests#multiline_string_dedent()| function - 20. The |xolox#misc#tests#version_string_parsing()| function - 21. The |xolox#misc#tests#version_string_comparison()| function - 18. Timing of long during operations |misc-timing-of-long-during-operations| - 1. The |xolox#misc#timer#resumable()| function - 2. The |xolox#misc#timer#start()| function - 3. The |xolox#misc#timer#stop()| function - 4. The |xolox#misc#timer#force()| function - 5. The |xolox#misc#timer#convert()| function - 19. Version string handling |misc-version-string-handling| - 1. The |xolox#misc#version#parse()| function - 2. The |xolox#misc#version#at_least()| function - 4. Contact |misc-contact| - 5. License |misc-license| - 6. References |misc-references| - -=============================================================================== - *misc-introduction* -Introduction ~ - -The vim-misc plug-in contains Vim scripts that are used by most of the Vim -plug-ins I've written [1] yet don't really belong with any single one of the -plug-ins. Basically it's an extended standard library of Vim script functions -that I wrote during the development of my Vim profile and plug-ins. - -In the past these scripts were bundled with each plug-in, however that turned -out to be a maintenance nightmare for me. That's why the miscellaneous scripts -are now a proper plug-in with their own page on Vim Online. - -Because the miscellaneous scripts are no longer bundled with my Vim plug-ins, -users are now required to install the miscellaneous scripts separately. This is -unfortunate for users who are upgrading from a previous release that did bundle -the miscellaneous scripts, but I don't see any way around this. Sorry! - -=============================================================================== - *misc-installation* -Installation ~ - -Please refer to the installation instructions [2] on GitHub. - -=============================================================================== - *misc-function-documentation* -Function documentation ~ - -Below is the documentation for the functions included in the miscellaneous -scripts. Anyone is free to use these functions in their own Vim profile and/or -plug-ins. I care about backwards compatibility so won't break it without a good -reason to do so. - -For those who are curious: The function descriptions given below were extracted -from the source code of the miscellaneous scripts using the Python module -'vimdoctool.py' included in vim-tools [3]. - -The documentation of the 95 functions below was extracted from 19 Vim scripts -on April 1, 2015 at 23:39. - -------------------------------------------------------------------------------- - *misc-asynchronous-vim-script-evaluation* -Asynchronous Vim script evaluation ~ - -The |xolox#misc#async#call()| function builds on top of |xolox#misc#os#exec()| -to support asynchronous evaluation of Vim scripts. The first (and for now only) -use case is my vim-easytags [4] plug-in which has a bunch of conflicting -requirements: - -1. I want the vim-easytags [4] plug-in to be as portable as possible. - Ideally everything is implemented in Vim script because that's the only - thing I can rely on to be available for all potential users of the plug- - in! - -2. Because of point one I've been forced to implement tags file reading, - parsing, (fold case) sorting and writing in Vim script. This is fine for - small tags files but once they grow to a couple of megabytes it becomes - annoying because Vim is unresponsive during tags file updates (key - presses are fortunately buffered due to Vim's input model but that - doesn't make it a nice user experience :-). - -3. I could (and did in the past) come up with all sorts of hacks to speed - things up without switching away from Vim script, but none of them are - going to solve the fundamental problem that Vim's unresponsive hiccups - become longer as tags files grow larger. - -By now it should be clear where this is heading: _Why not handle tags file -updates in a Vim process that runs in the background without blocking the Vim -process that the user is interacting with?_ It turns out that there are quite a -few details to take care of, but with those out of the way, it might just work! -I'm actually hoping to make asynchronous updates the default mode in vim- -easytags [4]. This means I need this functionality to be as portable and robust -as possible. - -**Status:** This code has seen little testing so I wouldn't trust it too much -just yet. On the other hand, as I said, my intention is to make this -functionality as portable and robust as possible. You be the judge :-). - -------------------------------------------------------------------------------- -The *xolox#misc#async#call()* function - -Call a Vim script function asynchronously by starting a hidden Vim process in -the background. Once the function returns the hidden Vim process terminates -itself. This function takes a single argument which is a dictionary with the -following key/value pairs: - -- **function** (required): The name of the Vim function to call inside the - child process (a string). I suggest using an |autoload| function for this, - see below. - -- **arguments** (optional): A list of arguments to pass to the function. This - list is serialized to a string using |string()| and deserialized using - |eval()|. - -- **callback** (optional): The name of a Vim function to call in the parent - process when the child process has completed (a string). - -- **clientserver** (optional): If this is true (1) the child process will - notify the parent process when it has finished (the default is true). This - works using Vim's client/server support which is not always available. As a - fall back Vim's |CursorHold| automatic command is also supported (although - the effect is not quite as instantaneous :-). - -This functionality is experimental and non trivial to use, so consider yourself -warned :-). - -**Limitations** - -I'm making this functionality available in vim-misc [5] because I think it can -be useful to other plug-ins, however if you are going to use it you should be -aware of the following limitations: - -- Because of the use of multiple processes this functionality is only - suitable for 'heavy' tasks. - -- The function arguments are serialized to a string which is passed to the - hidden Vim process as a command line argument, so the amount of data you - can pass will be limited by your operating environment. - -- The hidden Vim process is explicitly isolated from the user in several ways - (see below for more details). This is to make sure that the hidden Vim - processes are fast and don't clobber the user's editing sessions in any - way. - -**Changes to how Vim normally works** - -You have to be aware that the hidden Vim process is initialized in a specific -way that is very different from your regular Vim editing sessions: - -- Your |vimrc| file is ignored using the '-u NONE' command line option. - -- Your |gvimrc| file (if you even knew it existed ;-) is ignored using the - '-U NONE' command line option. - -- Plug-in loading is skipped using the '--noplugin' command line option. - -- Swap files (see |swap-file|) are disabled using the '-n' command line - option. This makes sure asynchronous Vim processes don't disturb the user's - editing session. - -- Your |viminfo| file is ignored using the '-i NONE' command line option. - Just like with swap files this makes sure asynchronous Vim processes don't - disturb the user's editing session. - -- No-compatible mode is enabled using the '-N' command line option (usually - the existence of your vimrc script would have achieved the same effect but - since we disable loading of your vimrc we need to spell things out for - Vim). - -**Use an auto-load function** - -The function you want to call is identified by its name which has to be -defined, but I just explained above that all regular initialization is disabled -for asynchronous Vim processes, so what gives? The answer is to use an -|autoload| function. This should work fine because the asynchronous Vim process -'inherits' the value of the |'runtimepath'| option from your editing session. - -------------------------------------------------------------------------------- -The *xolox#misc#async#inside_child()* function - -Entry point inside the hidden Vim process that runs in the background. Invoked -indirectly by |xolox#misc#async#call()| because it runs a command similar to -the following: -> - vim --cmd 'call xolox#misc#async#inside_child(...)' -< -This function is responsible for calling the user defined function, capturing -exceptions and reporting the results back to the parent Vim process using Vim's -client/server support or a temporary file. - -------------------------------------------------------------------------------- -The *xolox#misc#async#callback_to_parent()* function - -When Vim was compiled with client/server support this function (in the parent -process) will be called by |xolox#misc#async#inside_child()| (in the child -process) after the user defined function has returned. This enables more or -less instant callbacks after running an asynchronous function. - -------------------------------------------------------------------------------- -The *xolox#misc#async#periodic_callback()* function - -When client/server support is not being used the vim-misc plug-in improvises: -It uses Vim's |CursorHold| event to periodically check if an asynchronous -process has written its results to one of the expected temporary files. If a -response is found the temporary file is read and deleted and then -|xolox#misc#async#callback_to_parent()| is called to process the response. - -------------------------------------------------------------------------------- - *misc-handling-of-special-buffers* -Handling of special buffers ~ - -The functions defined here make it easier to deal with special Vim buffers that -contain text generated by a Vim plug-in. For example my vim-notes plug-in [6] -generates several such buffers: - -- :RecentNotes [7] lists recently modified notes -- :ShowTaggedNotes [8] lists notes grouped by tags -- etc. - -Because the text in these buffers is generated, Vim shouldn't bother with swap -files and it should never prompt the user whether to save changes to the -generated text. - -------------------------------------------------------------------------------- -The *xolox#misc#buffer#is_empty()* function - -Checks if the current buffer is an empty, unchanged buffer which can be reused. -Returns 1 if an empty buffer is found, 0 otherwise. - -------------------------------------------------------------------------------- -The *xolox#misc#buffer#prepare()* function - -Open a special buffer, i.e. a buffer that will hold generated contents, not -directly edited by the user. The buffer can be customized by passing a -dictionary with the following key/value pairs as the first argument: - -- **name** (required): The base name of the buffer (i.e. the base name of the - file loaded in the buffer, even though it isn't really a file and nothing - is really 'loaded' :-) - -- **path** (required): The pathname of the buffer. May be relevant if |:lcd| - or |'autochdir'| is being used. - -------------------------------------------------------------------------------- -The *xolox#misc#buffer#lock()* function - -Lock a special buffer so that its contents can no longer be edited. - -------------------------------------------------------------------------------- -The *xolox#misc#buffer#unlock()* function - -Unlock a special buffer so that its content can be updated. - -------------------------------------------------------------------------------- - *misc-tab-completion-for-user-defined-commands* -Tab completion for user defined commands ~ - -------------------------------------------------------------------------------- -The *xolox#misc#complete#keywords()* function - -This function can be used to perform keyword completion for user defined Vim -commands based on the contents of the current buffer. Here's an example of how -you would use it: -> - :command -nargs=* -complete=customlist,xolox#misc#complete#keywords MyCmd call s:MyCmd() -< -------------------------------------------------------------------------------- - *misc-rate-limiting-for-vims-cursorhold-event* -Rate limiting for Vim's CursorHold event ~ - -Several of my Vim plug-ins (e.g. vim-easytags [4], vim-notes [6] and vim- -session [9]) use Vim's |CursorHold| and |CursorHoldI| events to perform -periodic tasks when the user doesn't press any keys for a couple of seconds. -These events by default fire after four seconds, this is configurable using -Vim's |'updatetime'| option. The problem that this script solves is that there -are Vim plug-ins which set the |'updatetime'| option to unreasonably low -values, thereby breaking my Vim plug-ins and probably a lot of other Vim plug- -ins out there. When users complain about this I can tell them that another Vim -plug-in is to blame, but users don't care for the difference, their Vim is -broken! So I implemented a workaround. This script enables registration of -|CursorHold| event handlers with a configurable interval (expressed in -seconds). The event handlers will be called no more than once every interval. - -------------------------------------------------------------------------------- -The *xolox#misc#cursorhold#register()* function - -Register a |CursorHold| event handler with a custom interval. This function -takes a single argument which is a dictionary with the following fields: - -- **function** (required): The name of the event handler function (a string). - -- **arguments** (optional): A list of arguments to pass to the event handler - function (defaults to an empty list). - -- **interval** (optional): The number of seconds between calls to the event - handler (defaults to 4). - -------------------------------------------------------------------------------- -The *xolox#misc#cursorhold#autocmd()* function - -The 'top level event handler' that's called by Vim whenever the |CursorHold| or -|CursorHoldI| event fires. It iterates through the event handlers registered -using |xolox#misc#cursorhold#register()| and calls each event handler at the -appropriate interval, keeping track of the time when each event handler was -last run. - -------------------------------------------------------------------------------- - *misc-string-escaping-functions* -String escaping functions ~ - -------------------------------------------------------------------------------- -The *xolox#misc#escape#pattern()* function - -Takes a single string argument and converts it into a |:substitute| / -|substitute()| pattern string that matches the given string literally. - -------------------------------------------------------------------------------- -The *xolox#misc#escape#substitute()* function - -Takes a single string argument and converts it into a |:substitute| / -|substitute()| replacement string that inserts the given string literally. - -------------------------------------------------------------------------------- -The *xolox#misc#escape#shell()* function - -Takes a single string argument and converts it into a quoted command line -argument. - -I was going to add a long rant here about Vim's |'shellslash'| option, but -really, it won't make any difference. Let's just suffice to say that I have yet -to encounter a single person out there who uses this option for its intended -purpose (running a UNIX style shell on Microsoft Windows). - -------------------------------------------------------------------------------- - *misc-human-friendly-string-formatting-for-vim* -Human friendly string formatting for Vim ~ - -------------------------------------------------------------------------------- -The *xolox#misc#format#pluralize()* function - -Concatenate a counter (the first argument, expected to be an integer) with a -singular or plural label (the second and third arguments, both expected to be -strings). - -------------------------------------------------------------------------------- -The *xolox#misc#format#timestamp()* function - -Format a time stamp (a string containing a formatted floating point number) -into a human friendly format, for example 70 seconds is phrased as "1 minute -and 10 seconds". - -------------------------------------------------------------------------------- - *misc-list-handling-functions* -List handling functions ~ - -------------------------------------------------------------------------------- -The *xolox#misc#list#unique()* function - -Remove duplicate values from the given list in-place (preserves order). - -------------------------------------------------------------------------------- -The *xolox#misc#list#binsert()* function - -Performs in-place binary insertion, which depending on your use case can be -more efficient than calling Vim's |sort()| function after each insertion (in -cases where a single, final sort is not an option). Expects three arguments: - -1. A list -2. A value to insert -3. 1 (true) when case should be ignored, 0 (false) otherwise - -------------------------------------------------------------------------------- - *misc-functions-to-interact-with-user* -Functions to interact with the user ~ - -------------------------------------------------------------------------------- -The *xolox#misc#msg#info()* function - -Show a formatted informational message to the user. - -This function has the same argument handling as Vim's |printf()| function with -one notable difference: Any arguments which are not numbers or strings are -coerced to strings using Vim's |string()| function. - -In the case of |xolox#misc#msg#info()|, automatic string coercion simply makes -the function a bit easier to use. - -The messages emitted by this function have no highlighting. Previously these -messages were highlighted using the Title group (see |hl-Title|), but it was -pointed out in pull request 16 [10] that this group shouldn't be used for -informational messages because it is meant for titles and because of this some -color schemes use colors that stand out quite a bit, causing the informational -messages to look like errors. - -------------------------------------------------------------------------------- -The *xolox#misc#msg#warn()* function - -Show a formatted warning message to the user. - -This function has the same argument handling as the |xolox#misc#msg#info()| -function. - -------------------------------------------------------------------------------- -The *xolox#misc#msg#debug()* function - -Show a formatted debugging message to the user, _if the user has enabled -increased verbosity by setting Vim's |'verbose'| option to one (1) or higher_. - -This function has the same argument handling as the |xolox#misc#msg#info()| -function. - -In the case of |xolox#misc#msg#debug()|, automatic string coercion provides -lazy evaluation in the sense that complex data structures are only converted to -strings when the user has enabled increased verbosity. - -------------------------------------------------------------------------------- - *misc-integration-between-vim-its-environment* -Integration between Vim and its environment ~ - -------------------------------------------------------------------------------- -The *xolox#misc#open#file()* function - -Given a pathname or URL as the first argument, this opens the file with the -program associated with the file type. So for example a text file might open in -Vim, an '*.html' file would probably open in your web browser and a media file -would open in a media player. - -This should work on Windows, Mac OS X and most Linux distributions. If this -fails to find a file association, you can pass one or more external commands to -try as additional arguments. For example: -> - :call xolox#misc#open#file('/path/to/my/file', 'firefox', 'google-chrome') -< -This generally shouldn't be necessary but it might come in handy now and then. - -------------------------------------------------------------------------------- -The *xolox#misc#open#url()* function - -Given a URL as the first argument, this opens the URL in your preferred or best -available web browser: - -- In GUI environments a graphical web browser will open (or a new tab will be - created in an existing window) - -- In console Vim without a GUI environment, when you have any of 'lynx', - 'links' or 'w3m' installed it will launch a command line web browser in - front of Vim (temporarily suspending Vim) - -------------------------------------------------------------------------------- - *misc-vim-plug-in-option-handling* -Vim and plug-in option handling ~ - -------------------------------------------------------------------------------- -The *xolox#misc#option#get()* function - -Expects one or two arguments: 1. The name of a variable and 2. the default -value if the variable does not exist. - -Returns the value of the variable from a buffer local variable, global variable -or the default value, depending on which is defined. - -This is used by some of my Vim plug-ins for option handling, so that users can -customize options for specific buffers. - -------------------------------------------------------------------------------- -The *xolox#misc#option#split()* function - -Given a multi-value Vim option like |'runtimepath'| this returns a list of -strings. For example: -> - :echo xolox#misc#option#split(&runtimepath) - ['/home/peter/Projects/Vim/misc', - '/home/peter/Projects/Vim/colorscheme-switcher', - '/home/peter/Projects/Vim/easytags', - ...] -< -------------------------------------------------------------------------------- -The *xolox#misc#option#join()* function - -Given a list of strings like the ones returned by |xolox#misc#option#split()|, -this joins the strings together into a single value that can be used to set a -Vim option. - -------------------------------------------------------------------------------- -The *xolox#misc#option#split_tags()* function - -Customized version of |xolox#misc#option#split()| with specialized handling for -Vim's |'tags'| option. - -------------------------------------------------------------------------------- -The *xolox#misc#option#join_tags()* function - -Customized version of |xolox#misc#option#join()| with specialized handling for -Vim's |'tags'| option. - -------------------------------------------------------------------------------- -The *xolox#misc#option#eval_tags()* function - -Evaluate Vim's |'tags'| option without looking at the file system, i.e. this -will report tags files that don't exist yet. Expects the value of the |'tags'| -option as the first argument. If the optional second argument is 1 (true) only -the first match is returned, otherwise (so by default) a list with all matches -is returned. - -------------------------------------------------------------------------------- - *misc-operating-system-interfaces* -Operating system interfaces ~ - -------------------------------------------------------------------------------- -The *xolox#misc#os#is_mac()* function - -Returns 1 (true) when on Mac OS X, 0 (false) otherwise. You would expect this -to simply check the Vim feature list, but for some obscure reason the -'/usr/bin/vim' included in Mac OS X (verified on version 10.7.5) returns 0 -(false) in response to "has('mac')", so we check the output of 'uname' to avoid -false negatives. - -------------------------------------------------------------------------------- -The *xolox#misc#os#is_win()* function - -Returns 1 (true) when on Microsoft Windows, 0 (false) otherwise. - -------------------------------------------------------------------------------- -The *xolox#misc#os#find_vim()* function - -Returns the program name of Vim as a string. On Windows and UNIX this just -|v:progname| as an absolute pathname while on Mac OS X there is some special -magic to find MacVim's executable even though it's usually not on the -executable search path. If you want, you can override the value returned from -this function by setting the global variable 'g:xolox#misc#os#vim_progname'. - -By default the choice of console Vim vs graphical Vim is made based on the -value of |v:progname|, but if you have a preference you can pass the string -'vim' or 'gvim' as the first and only argument. - -------------------------------------------------------------------------------- -The *xolox#misc#os#exec()* function - -Execute an external command (hiding the console on Microsoft Windows when my -vim-shell plug-in [11] is installed). - -Expects a dictionary with the following key/value pairs as the first argument: - -- **command** (required): The command line to execute - -- **async** (optional): set this to 1 (true) to execute the command in the - background (asynchronously) - -- **stdin** (optional): a string or list of strings with the input for the - external command - -- **check** (optional): set this to 0 (false) to disable checking of the exit - code of the external command (by default an exception will be raised when - the command fails) - -Returns a dictionary with one or more of the following key/value pairs: - -- **command** (always available): the generated command line that was used to - run the external command - -- **exit_code** (only in synchronous mode): the exit status of the external - command (an integer, zero on success) - -- **stdout** (only in synchronous mode): the output of the command on the - standard output stream (a list of strings, one for each line) - -- **stderr** (only in synchronous mode): the output of the command on the - standard error stream (as a list of strings, one for each line) - -------------------------------------------------------------------------------- -The *xolox#misc#os#can_use_dll()* function - -If a) we're on Microsoft Windows, b) the vim-shell plug-in is installed and c) -the compiled DLL included in vim-shell works, we can use the vim-shell plug-in -to execute external commands! Returns 1 (true) if we can use the DLL, 0 (false) -otherwise. - -------------------------------------------------------------------------------- - *misc-pathname-manipulation-functions* -Pathname manipulation functions ~ - -------------------------------------------------------------------------------- -The *xolox#misc#path#which()* function - -Scan the executable search path ('$PATH') for one or more external programs. -Expects one or more string arguments with program names. Returns a list with -the absolute pathnames of all found programs. Here's an example: -> - :echo xolox#misc#path#which('gvim', 'vim') - ['/usr/local/bin/gvim', - '/usr/bin/gvim', - '/usr/local/bin/vim', - '/usr/bin/vim'] -< -------------------------------------------------------------------------------- -The *xolox#misc#path#split()* function - -Split a pathname (the first and only argument) into a list of pathname -components. - -On Windows, pathnames starting with two slashes or backslashes are UNC paths -where the leading slashes are significant... In this case we split like this: - -- Input: "'//server/share/directory'" -- Result: "['//server', 'share', 'directory']" - -Everything except Windows is treated like UNIX until someone has a better -suggestion :-). In this case we split like this: - -- Input: "'/foo/bar/baz'" -- Result: "['/', 'foo', 'bar', 'baz']" - -To join a list of pathname components back into a single pathname string, use -the |xolox#misc#path#join()| function. - -------------------------------------------------------------------------------- -The *xolox#misc#path#join()* function - -Join a list of pathname components (the first and only argument) into a single -pathname string. This is the counterpart to the |xolox#misc#path#split()| -function and it expects a list of pathname components as returned by -|xolox#misc#path#split()|. - -------------------------------------------------------------------------------- -The *xolox#misc#path#directory_separator()* function - -Find the preferred directory separator for the platform and settings. - -------------------------------------------------------------------------------- -The *xolox#misc#path#absolute()* function - -Canonicalize and resolve a pathname, _regardless of whether it exists_. This is -intended to support string comparison to determine whether two pathnames point -to the same directory or file. - -------------------------------------------------------------------------------- -The *xolox#misc#path#relative()* function - -Make an absolute pathname (the first argument) relative to a directory (the -second argument). - -------------------------------------------------------------------------------- -The *xolox#misc#path#merge()* function - -Join a directory pathname and filename into a single pathname. - -------------------------------------------------------------------------------- -The *xolox#misc#path#commonprefix()* function - -Find the common prefix of path components in a list of pathnames. - -------------------------------------------------------------------------------- -The *xolox#misc#path#starts_with()* function - -Check whether the first pathname starts with the second pathname (expected to -be a directory). This does not perform a regular string comparison; first it -normalizes both pathnames, then it splits them into their pathname segments and -then it compares the segments. - -------------------------------------------------------------------------------- -The *xolox#misc#path#encode()* function - -Encode a pathname so it can be used as a filename. This uses URL encoding to -encode special characters. - -------------------------------------------------------------------------------- -The *xolox#misc#path#decode()* function - -Decode a pathname previously encoded with |xolox#misc#path#encode()|. - -------------------------------------------------------------------------------- -The *xolox#misc#path#is_relative()* function - -Returns true (1) when the pathname given as the first argument is relative, -false (0) otherwise. - -------------------------------------------------------------------------------- -The *xolox#misc#path#tempdir()* function - -Create a temporary directory and return the pathname of the directory. - -------------------------------------------------------------------------------- - *misc-manipulation-of-unix-file-permissions* -Manipulation of UNIX file permissions ~ - -Vim's |writefile()| function cannot set file permissions for newly created -files and although Vim script has a function to get file permissions (see -|getfperm()|) there is no equivalent for changing a file's permissions. - -This omission breaks the otherwise very useful idiom of updating a file by -writing its new contents to a temporary file and then renaming the temporary -file into place (which is as close as you're going to get to atomically -updating a file's contents on UNIX) because the file's permissions will not be -preserved! - -**Here's a practical example:** My vim-easytags [4] plug-in writes tags file -updates to a temporary file and renames the temporary file into place. When I -use 'sudo -s' on Ubuntu Linux it preserves my environment variables so my -'~/.vimrc' and the vim-easytags [4] plug-in are still loaded. Now when a tags -file is written the file becomes owned by root (my effective user id in the -'sudo' session). Once I leave the 'sudo' session I can no longer update my tags -file because it's now owned by root … ಠ_ಠ - -------------------------------------------------------------------------------- -The *xolox#misc#perm#update()* function - -Atomically update a file's contents while preserving the owner, group and mode. -The first argument is the pathname of the file to update (a string). The second -argument is the list of lines to be written to the file. Writes the new -contents to a temporary file and renames the temporary file into place, thereby -preventing readers from reading a partially written file. Returns 1 if the file -is successfully updated, 0 otherwise. - -Note that if |xolox#misc#perm#get()| and |xolox#misc#perm#set()| cannot be used -to preserve the file owner/group/mode the file is still updated using a rename -(for compatibility with non-UNIX systems and incompatible '/usr/bin/stat' -implementations) so in that case you can still lose the file's -owner/group/mode. - -------------------------------------------------------------------------------- -The *xolox#misc#perm#get()* function - -Get the owner, group and permissions of the pathname given as the first -argument. Returns an opaque value which you can later pass to -|xolox#misc#perm#set()|. - -------------------------------------------------------------------------------- -The *xolox#misc#perm#set()* function - -Set the permissions (the second argument) of the pathname given as the first -argument. Expects a permissions value created by |xolox#misc#perm#get()|. - -------------------------------------------------------------------------------- - *misc-persist-recall-vim-values-from-to-files* -Persist/recall Vim values from/to files ~ - -Vim's |string()| function can be used to serialize Vim script values like -numbers, strings, lists, dictionaries and composites of them to a string which -can later be evaluated using the |eval()| function to turn it back into the -original value. This Vim script provides functions to use these functions to -persist and recall Vim values from/to files. This is very useful for -communication between (possibly concurrent) Vim processes. - -------------------------------------------------------------------------------- -The *xolox#misc#persist#load()* function - -Read a Vim value like a number, string, list or dictionary from a file using -|readfile()| and |eval()|. The first argument is the filename of the file to -read (a string). The optional second argument specifies the default value which -is returned when the file can't be loaded. This function returns the loaded -value or the default value (which itself defaults to the integer 0). - -------------------------------------------------------------------------------- -The *xolox#misc#persist#save()* function - -Write a Vim value like a number, string, list or dictionary to a file using -|string()| and |writefile()|. The first argument is the filename of the file to -write (a string) and the second argument is the value to write (any value). - -This function writes the serialized value to an intermediate file which is then -renamed into place atomically. This avoids issues with concurrent processes -where for example a producer has written a partial file which is read by a -consumer before the file is complete. In this case the consumer would read a -corrupt value. The rename trick avoids this problem. - -------------------------------------------------------------------------------- - *misc-string-handling* -String handling ~ - -------------------------------------------------------------------------------- -The *xolox#misc#str#slug()* function - -Convert a string to a "slug" - something that can be safely used in filenames -and URLs without worrying about quoting/escaping of special characters. - -------------------------------------------------------------------------------- -The *xolox#misc#str#ucfirst()* function - -Uppercase the first character in a string (the first argument). - -------------------------------------------------------------------------------- -The *xolox#misc#str#unescape()* function - -Remove back slash escapes from a string (the first argument). - -------------------------------------------------------------------------------- -The *xolox#misc#str#compact()* function - -Compact whitespace in a string (the first argument). - -------------------------------------------------------------------------------- -The *xolox#misc#str#trim()* function - -Trim all whitespace from the start and end of a string (the first argument). - -------------------------------------------------------------------------------- -The *xolox#misc#str#indent()* function - -Indent all lines in a multi-line string (the first argument) with a specific -number of _space characters_ (the second argument, an integer). - -------------------------------------------------------------------------------- -The *xolox#misc#str#dedent()* function - -Remove common whitespace from a multi line string. - -------------------------------------------------------------------------------- - *misc-test-runner-infrastructure-for-vim-plug-ins* -Test runner & infrastructure for Vim plug-ins ~ - -The Vim auto-load script 'autoload/xolox/misc/test.vim' contains infrastructure -that can be used to run an automated Vim plug-in test suite. It provides a -framework for running test functions, keeping track of the test status, making -assertions and reporting test results to the user. - -------------------------------------------------------------------------------- -The *xolox#misc#test#reset()* function - -Reset counters for executed tests and passed/failed assertions. - -------------------------------------------------------------------------------- -The *xolox#misc#test#summarize()* function - -Print a summary of test results, to be interpreted interactively. - -------------------------------------------------------------------------------- -The *xolox#misc#test#wrap()* function - -Call a function in a try/catch block and prevent exceptions from bubbling. The -name of the function should be passed as the first and only argument; it should -be a string containing the name of a Vim auto-load function. - -------------------------------------------------------------------------------- -The *xolox#misc#test#passed()* function - -Record a test which succeeded. - -------------------------------------------------------------------------------- -The *xolox#misc#test#failed()* function - -Record a test which failed. - -------------------------------------------------------------------------------- -The *xolox#misc#test#assert_true()* function - -Check whether an expression is true. - -------------------------------------------------------------------------------- -The *xolox#misc#test#assert_equals()* function - -Check whether two values are the same. - -------------------------------------------------------------------------------- -The *xolox#misc#test#assert_same_type()* function - -Check whether two values are of the same type. - -------------------------------------------------------------------------------- - *tests-for-miscellaneous-vim-scripts* -Tests for the miscellaneous Vim scripts ~ - -The Vim auto-load script 'autoload/xolox/misc/tests.vim' contains the automated -test suite of the miscellaneous Vim scripts. Right now the coverage is not very -high yet, but this will improve over time. - -------------------------------------------------------------------------------- -The *xolox#misc#tests#run()* function - -Run the automated test suite of the miscellaneous Vim scripts. To be used -interactively. Intended to be safe to execute irrespective of context. - -------------------------------------------------------------------------------- -The *xolox#misc#tests#pattern_escaping()* function - -Test escaping of regular expression patterns with -|xolox#misc#escape#pattern()|. - -------------------------------------------------------------------------------- -The *xolox#misc#tests#substitute_escaping()* function - -Test escaping of substitution strings with |xolox#misc#escape#substitute()|. - -------------------------------------------------------------------------------- -The *xolox#misc#tests#shell_escaping()* function - -Test escaping of shell arguments with |xolox#misc#escape#shell()|. - -------------------------------------------------------------------------------- -The *xolox#misc#tests#making_a_list_unique()* function - -Test removing of duplicate values from lists with |xolox#misc#list#unique()|. - -------------------------------------------------------------------------------- -The *xolox#misc#tests#binary_insertion()* function - -Test the binary insertion algorithm implemented in |xolox#misc#list#binsert()|. - -------------------------------------------------------------------------------- -The *xolox#misc#tests#getting_configuration_options()* function - -Test getting of scoped plug-in configuration "options" with -|xolox#misc#option#get()|. - -------------------------------------------------------------------------------- -The *xolox#misc#tests#splitting_of_multi_valued_options()* function - -Test splitting of multi-valued Vim options with |xolox#misc#option#split()|. - -------------------------------------------------------------------------------- -The *xolox#misc#tests#joining_of_multi_valued_options()* function - -Test joining of multi-valued Vim options with |xolox#misc#option#join()|. - -------------------------------------------------------------------------------- -The *xolox#misc#tests#finding_vim_on_the_search_path()* function - -Test looking up Vim's executable on the search path using |v:progname| with -|xolox#misc#os#find_vim()|. - -------------------------------------------------------------------------------- -The *xolox#misc#tests#synchronous_command_execution()* function - -Test basic functionality of synchronous command execution with -|xolox#misc#os#exec()|. - -------------------------------------------------------------------------------- -The *xolox#misc#tests#synchronous_command_execution_with_stderr()* function - -Test basic functionality of synchronous command execution with -|xolox#misc#os#exec()| including the standard error stream (not available on -Windows when vim-shell is not installed). - -------------------------------------------------------------------------------- -The *xolox#misc#tests#synchronous_command_execution_with_raising_of_errors()* -function - -Test raising of errors during synchronous command execution with -|xolox#misc#os#exec()|. - -------------------------------------------------------------------------------- -The *xolox#misc#tests#synchronous_command_execution_without_raising_errors()* -function - -Test synchronous command execution without raising of errors with -|xolox#misc#os#exec()|. - -------------------------------------------------------------------------------- -The *xolox#misc#tests#asynchronous_command_execution()* function - -Test the basic functionality of asynchronous command execution with -|xolox#misc#os#exec()|. This runs the external command 'mkdir' and tests that -the side effect of creating the directory takes place. This might seem like a -peculiar choice, but it's one of the few 100% portable commands (Windows + -UNIX) that doesn't involve input/output streams. - -------------------------------------------------------------------------------- -The *xolox#misc#tests#string_case_transformation()* function - -Test string case transformation with |xolox#misc#str#ucfirst()|. - -------------------------------------------------------------------------------- -The *xolox#misc#tests#string_whitespace_compaction()* function - -Test compaction of whitespace in strings with |xolox#misc#str#compact()|. - -------------------------------------------------------------------------------- -The *xolox#misc#tests#string_whitespace_trimming()* function - -Test trimming of whitespace in strings with |xolox#misc#str#trim()|. - -------------------------------------------------------------------------------- -The *xolox#misc#tests#multiline_string_dedent()* function - -Test dedenting of multi-line strings with |xolox#misc#str#dedent()|. - -------------------------------------------------------------------------------- -The *xolox#misc#tests#version_string_parsing()* function - -Test parsing of version strings with |xolox#misc#version#parse()|. - -------------------------------------------------------------------------------- -The *xolox#misc#tests#version_string_comparison()* function - -Test comparison of version strings with |xolox#misc#version#at_least()|. - -------------------------------------------------------------------------------- - *misc-timing-of-long-during-operations* -Timing of long during operations ~ - -------------------------------------------------------------------------------- -The *xolox#misc#timer#resumable()* function - -Create a resumable timer object. This returns an object (a dictionary with -functions) with the following "methods": - -- 'start()' instructs the timer object to start counting elapsed time (when a - timer object is created it is not automatically started). - -- 'stop()' instructs the timer object to stop counting elapsed time. This - adds the time elapsed since 'start()' was last called to the total elapsed - time. This method will raise an error if called out of sequence. - -- 'format()' takes the total elapsed time and reports it as a string - containing a formatted floating point number. - -Timer objects are meant to accurately time short running operations so they're -dependent on Vim's |reltime()| and |reltimestr()| functions. In order to make -it possible to use timer objects in my Vim plug-ins unconditionally there's a -fall back to |localtime()| when |reltime()| is not available. In this mode the -timer objects are not very useful but at least they shouldn't raise errors. - -------------------------------------------------------------------------------- -The *xolox#misc#timer#start()* function - -Start a timer. This returns a list which can later be passed to -|xolox#misc#timer#stop()|. - -------------------------------------------------------------------------------- -The *xolox#misc#timer#stop()* function - -Show a formatted debugging message to the user, if the user has enabled -increased verbosity by setting Vim's |'verbose'| option to one (1) or higher. - -This function has the same argument handling as Vim's |printf()| function with -one difference: At the point where you want the elapsed time to be embedded, -you write '%s' and you pass the list returned by |xolox#misc#timer#start()| as -an argument. - -------------------------------------------------------------------------------- -The *xolox#misc#timer#force()* function - -Show a formatted message to the user. This function has the same argument -handling as Vim's |printf()| function with one difference: At the point where -you want the elapsed time to be embedded, you write '%s' and you pass the list -returned by |xolox#misc#timer#start()| as an argument. - -------------------------------------------------------------------------------- -The *xolox#misc#timer#convert()* function - -Convert the value returned by |xolox#misc#timer#start()| to a string -representation of the elapsed time since |xolox#misc#timer#start()| was called. -Other values are returned unmodified (this allows using it with Vim's |map()| -function). - -------------------------------------------------------------------------------- - *misc-version-string-handling* -Version string handling ~ - -------------------------------------------------------------------------------- -The *xolox#misc#version#parse()* function - -Convert a version string to a list of integers. - -------------------------------------------------------------------------------- -The *xolox#misc#version#at_least()* function - -Check whether the second version string is equal to or greater than the first -version string. Returns 1 (true) when it is, 0 (false) otherwise. - -=============================================================================== - *misc-contact* -Contact ~ - -If you have questions, bug reports, suggestions, etc. please open an issue or -pull request on GitHub [12]. Download links and documentation can be found on -the plug-in's homepage [13]. If you like the script please vote for it on Vim -Online [14]. - -=============================================================================== - *misc-license* -License ~ - -This software is licensed under the MIT license [15]. © 2015 Peter Odding -. - -=============================================================================== - *misc-references* -References ~ - -[1] http://peterodding.com/code/vim/ -[2] https://github.com/xolox/vim-misc/blob/master/INSTALL.md -[3] http://peterodding.com/code/vim/tools/ -[4] http://peterodding.com/code/vim/easytags/ -[5] http://peterodding.com/code/vim/misc/ -[6] http://peterodding.com/code/vim/notes/ -[7] http://peterodding.com/code/vim/notes/#recentnotes_command -[8] http://peterodding.com/code/vim/notes/#showtaggednotes_command -[9] http://peterodding.com/code/vim/session/ -[10] https://github.com/xolox/vim-misc/pull/16 -[11] http://peterodding.com/code/vim/shell/ -[12] http://github.com/xolox/vim-misc -[13] http://peterodding.com/code/vim/misc -[14] http://www.vim.org/scripts/script.php?script_id=4597 -[15] http://en.wikipedia.org/wiki/MIT_License - -vim: ft=help diff --git a/bundle/misc/plugin/xolox/misc.vim b/bundle/misc/plugin/xolox/misc.vim deleted file mode 100755 index af65d55..0000000 --- a/bundle/misc/plugin/xolox/misc.vim +++ /dev/null @@ -1,19 +0,0 @@ -" Vim plug-in -" Author: Peter Odding -" Last Change: June 21, 2014 -" URL: http://peterodding.com/code/vim/misc/ - -" Don't source the plug-in when it's already been loaded or &compatible is set. -if &cp || exists('g:loaded_xolox_misc') - finish -endif - -" Automatic commands used by the vim-misc plug-in. -augroup PluginXoloxMisc - autocmd! CursorHold,CursorHoldI * call xolox#misc#cursorhold#autocmd() -augroup END - -" Make sure the plug-in is only loaded once. -let g:loaded_xolox_misc = 1 - -" vim: ts=2 sw=2 et diff --git a/bundle/nerdcommenter/doc/NERD_commenter.txt b/bundle/nerdcommenter/doc/NERD_commenter.txt deleted file mode 100644 index 5309f61..0000000 --- a/bundle/nerdcommenter/doc/NERD_commenter.txt +++ /dev/null @@ -1,988 +0,0 @@ -*NERD_commenter.txt* Plugin for commenting code - - - NERD COMMENTER REFERENCE MANUAL~ - - - - - -============================================================================== -CONTENTS *NERDCommenterContents* - - 1.Intro...................................|NERDCommenter| - 2.Installation............................|NERDComInstallation| - 3.Functionality provided..................|NERDComFunctionality| - 3.1 Functionality Summary.............|NERDComFunctionalitySummary| - 3.2 Functionality Details.............|NERDComFunctionalityDetails| - 3.2.1 Comment map.................|NERDComComment| - 3.2.2 Nested comment map..........|NERDComNestedComment| - 3.2.3 Toggle comment map..........|NERDComToggleComment| - 3.2.4 Minimal comment map.........|NERDComMinimalComment| - 3.2.5 Invert comment map..........|NERDComInvertComment| - 3.2.6 Sexy comment map............|NERDComSexyComment| - 3.2.7 Yank comment map............|NERDComYankComment| - 3.2.8 Comment to EOL map..........|NERDComEOLComment| - 3.2.9 Append com to line map......|NERDComAppendComment| - 3.2.10 Insert comment map.........|NERDComInsertComment| - 3.2.11 Use alternate delims map...|NERDComAltDelim| - 3.2.12 Comment aligned maps.......|NERDComAlignedComment| - 3.2.13 Uncomment line map.........|NERDComUncommentLine| - 3.4 Sexy Comments.....................|NERDComSexyComments| - 3.5 The NERDComment function..........|NERDComNERDComment| - 4.Options.................................|NERDComOptions| - 4.1 Options summary...................|NERDComOptionsSummary| - 4.2 Options details...................|NERDComOptionsDetails| - 4.3 Default delimiter Options.........|NERDComDefaultDelims| - 5. Customising key mappings...............|NERDComMappings| - 6. Issues with the script.................|NERDComIssues| - 6.1 Delimiter detection heuristics....|NERDComHeuristics| - 6.2 Nesting issues....................|NERDComNesting| - 7.About.. ............................|NERDComAbout| - 8.Changelog...............................|NERDComChangelog| - 9.Credits.................................|NERDComCredits| - 10.License................................|NERDComLicense| - -============================================================================== -1. Intro *NERDCommenter* - -The NERD commenter provides many different commenting operations and styles -which are invoked via key mappings and a menu. These operations are available -for most filetypes. - -There are also options that allow to tweak the commenting engine to your -taste. - -============================================================================== -2. Installation *NERDComInstallation* - -The NERD Commenter requires Vim 7 or higher. - -Extract the plugin files in your ~/.vim (*nix) or ~/vimfiles (Windows). You -should have 2 files: > - plugin/NERD_commenter.vim - doc/NERD_commenter.txt -< -Next, to finish installing the help file run: > - :helptags ~/.vim/doc -< -See |add-local-help| for more details. - -Make sure that you have filetype plugins enabled, as the script makes use of -|'commentstring'| where possible (which is usually set in a filetype plugin). -See |filetype-plugin-on| for details, but basically, stick this in your vimrc > - filetype plugin on -< - -============================================================================== -3. Functionality provided *NERDComFunctionality* - ------------------------------------------------------------------------------- -3.1 Functionality summary *NERDComFunctionalitySummary* - -The following key mappings are provided by default (there is also a menu -with items corresponding to all the mappings below): - -[count]cc |NERDComComment| -Comment out the current line or text selected in visual mode. - - -[count]cn |NERDComNestedComment| -Same as cc but forces nesting. - - -[count]c |NERDComToggleComment| -Toggles the comment state of the selected line(s). If the topmost selected -line is commented, all selected lines are uncommented and vice versa. - - -[count]cm |NERDComMinimalComment| -Comments the given lines using only one set of multipart delimiters. - - -[count]ci |NERDComInvertComment| -Toggles the comment state of the selected line(s) individually. - - -[count]cs |NERDComSexyComment| -Comments out the selected lines ``sexily'' - - -[count]cy |NERDComYankComment| -Same as cc except that the commented line(s) are yanked first. - - -c$ |NERDComEOLComment| -Comments the current line from the cursor to the end of line. - - -cA |NERDComAppendComment| -Adds comment delimiters to the end of line and goes into insert mode between -them. - - -|NERDComInsertComment| -Adds comment delimiters at the current cursor position and inserts between. -Disabled by default. - - -ca |NERDComAltDelim| -Switches to the alternative set of delimiters. - - -[count]cl -[count]cb |NERDComAlignedComment| -Same as |NERDComComment| except that the delimiters are aligned down the -left side (cl) or both sides (cb). - - -[count]cu |NERDComUncommentLine| -Uncomments the selected line(s). - ------------------------------------------------------------------------------- -3.2 Functionality details *NERDComFunctionalityDetails* - ------------------------------------------------------------------------------- -3.2.1 Comment map *NERDComComment* - -Default mapping: [count]cc -Mapped to: NERDCommenterComment -Applicable modes: normal visual visual-line visual-block. - - -Comments out the current line. If multiple lines are selected in visual-line -mode, they are all commented out. If some text is selected in visual or -visual-block mode then the script will try to comment out the exact text that -is selected using multi-part delimiters if they are available. - -If a [count] is given in normal mode, the mapping works as though that many -lines were selected in visual-line mode. - ------------------------------------------------------------------------------- -3.2.2 Nested comment map *NERDComNestedComment* - -Default mapping: [count]cn -Mapped to: NERDCommenterNest -Applicable modes: normal visual visual-line visual-block. - -Performs nested commenting. Works the same as cc except that if a line -is already commented then it will be commented again. - -If |'NERDUsePlaceHolders'| is set then the previous comment delimiters will -be replaced by place-holder delimiters if needed. Otherwise the nested -comment will only be added if the current commenting delimiters have no right -delimiter (to avoid syntax errors) - -If a [count] is given in normal mode, the mapping works as though that many -lines were selected in visual-line mode. - -Related options: -|'NERDDefaultNesting'| - ------------------------------------------------------------------------------- -3.2.3 Toggle comment map *NERDComToggleComment* - -Default mapping: [count]c -Mapped to: NERDCommenterToggle -Applicable modes: normal visual-line. - -Toggles commenting of the lines selected. The behaviour of this mapping -depends on whether the first line selected is commented or not. If so, all -selected lines are uncommented and vice versa. - -With this mapping, a line is only considered to be commented if it starts with -a left delimiter. - -If a [count] is given in normal mode, the mapping works as though that many -lines were selected in visual-line mode. - ------------------------------------------------------------------------------- -3.2.4 Minimal comment map *NERDComMinimalComment* - -Default mapping: [count]cm -Mapped to: NERDCommenterMinimal -Applicable modes: normal visual-line. - -Comments the selected lines using one set of multipart delimiters if possible. - -For example: if you are programming in c and you select 5 lines and press -cm then a '/*' will be placed at the start of the top line and a '*/' -will be placed at the end of the last line. - -Sets of multipart comment delimiters that are between the top and bottom -selected lines are replaced with place holders (see |'NERDLPlace'|) if -|'NERDUsePlaceHolders'| is set for the current filetype. If it is not, then -the comment will be aborted if place holders are required to prevent illegal -syntax. - -If a [count] is given in normal mode, the mapping works as though that many -lines were selected in visual-line mode. - ------------------------------------------------------------------------------- -3.2.5 Invert comment map *NERDComInvertComment* - -Default mapping: ci -Mapped to: NERDCommenterInvert -Applicable modes: normal visual-line. - -Inverts the commented state of each selected line. If the a selected line is -commented then it is uncommented and vice versa. Each line is examined and -commented/uncommented individually. - -With this mapping, a line is only considered to be commented if it starts with -a left delimiter. - -If a [count] is given in normal mode, the mapping works as though that many -lines were selected in visual-line mode. - ------------------------------------------------------------------------------- -3.2.6 Sexy comment map *NERDComSexyComment* - -Default mapping: [count]cs -Mapped to: NERDCommenterSexy -Applicable modes: normal, visual-line. - -Comments the selected line(s) ``sexily''... see |NERDComSexyComments| for -a description of what sexy comments are. Can only be done on filetypes for -which there is at least one set of multipart comment delimiters specified. - -Sexy comments cannot be nested and lines inside a sexy comment cannot be -commented again. - -If a [count] is given in normal mode, the mapping works as though that many -lines were selected in visual-line mode. - -Related options: -|'NERDCompactSexyComs'| - ------------------------------------------------------------------------------- -3.2.7 Yank comment map *NERDComYankComment* - -Default mapping: [count]cy -Mapped to: NERDCommenterYank -Applicable modes: normal visual visual-line visual-block. - -Same as cc except that it yanks the line(s) that are commented first. - ------------------------------------------------------------------------------- -3.2.8 Comment to EOL map *NERDComEOLComment* - -Default mapping: c$ -Mapped to: NERDCommenterToEOL -Applicable modes: normal. - -Comments the current line from the current cursor position up to the end of -the line. - ------------------------------------------------------------------------------- -3.2.9 Append com to line map *NERDComAppendComment* - -Default mapping: cA -Mapped to: NERDCommenterAppend -Applicable modes: normal. - -Appends comment delimiters to the end of the current line and goes -to insert mode between the new delimiters. - ------------------------------------------------------------------------------- -3.2.10 Insert comment map *NERDComInsertComment* - -Default mapping: disabled by default. -Map it to: NERDCommenterInInsert -Applicable modes: insert. - -Adds comment delimiters at the current cursor position and inserts -between them. - -NOTE: prior to version 2.1.17 this was mapped to ctrl-c. To restore this -mapping add > - let NERDComInsertMap='' -< -to your vimrc. - ------------------------------------------------------------------------------- -3.2.11 Use alternate delims map *NERDComAltDelim* - -Default mapping: ca -Mapped to: NERDCommenterAltDelims -Applicable modes: normal. - -Changes to the alternative commenting style if one is available. For example, -if the user is editing a c++ file using // comments and they hit ca -then they will be switched over to /**/ comments. - -See also |NERDComDefaultDelims| - ------------------------------------------------------------------------------- -3.2.12 Comment aligned maps *NERDComAlignedComment* - -Default mappings: [count]cl [count]cb -Mapped to: NERDCommenterAlignLeft - NERDCommenterAlignBoth -Applicable modes: normal visual-line. - -Same as cc except that the comment delimiters are aligned on the left -side or both sides respectively. These comments are always nested if the -line(s) are already commented. - -If a [count] is given in normal mode, the mapping works as though that many -lines were selected in visual-line mode. - ------------------------------------------------------------------------------- -3.2.13 Uncomment line map *NERDComUncommentLine* - -Default mapping: [count]cu -Mapped to: NERDCommenterUncomment -Applicable modes: normal visual visual-line visual-block. - -Uncomments the current line. If multiple lines are selected in -visual mode then they are all uncommented. - -When uncommenting, if the line contains multiple sets of delimiters then the -``outtermost'' pair of delimiters will be removed. - -The script uses a set of heurisics to distinguish ``real'' delimiters from -``fake'' ones when uncommenting. See |NERDComIssues| for details. - -If a [count] is given in normal mode, the mapping works as though that many -lines were selected in visual-line mode. - -Related options: -|'NERDRemoveAltComs'| -|'NERDRemoveExtraSpaces'| - ------------------------------------------------------------------------------- -3.3 Sexy Comments *NERDComSexyComments* -These are comments that use one set of multipart comment delimiters as well as -one other marker symbol. For example: > - /* - * This is a c style sexy comment - * So there! - */ - - /* This is a c style sexy comment - * So there! - * But this one is ``compact'' style */ -< -Here the multipart delimiters are /* and */ and the marker is *. - ------------------------------------------------------------------------------- -3.4 The NERDComment function *NERDComNERDComment* - -All of the NERD commenter mappings and menu items invoke a single function -which delegates the commenting work to other functions. This function is -public and has the prototype: > - function! NERDComment(isVisual, type) -< -The arguments to this function are simple: - - isVisual: if you wish to do any kind of visual comment then set this to - 1 and the function will use the '< and '> marks to find the comment - boundries. If set to 0 then the function will operate on the current - line. - - type: is used to specify what type of commenting operation is to be - performed, and it can be one of the following: "sexy", "invert", - "minimal", "toggle", "alignLeft", "alignBoth", "norm", "nested", - "toEOL", "append", "insert", "uncomment", "yank" - -For example, if you typed > - :call NERDComment(1, 'sexy') -< -then the script would do a sexy comment on the last visual selection. - - -============================================================================== -4. Options *NERDComOptions* - ------------------------------------------------------------------------------- -4.1 Options summary *NERDComOptionsSummary* - -|'loaded_nerd_comments'| Turns off the script. -|'NERDAllowAnyVisualDelims'| Allows multipart alternative delims to - be used when commenting in - visual/visual-block mode. -|'NERDBlockComIgnoreEmpty'| Forces right delims to be placed when - doing visual-block comments. -|'NERDCommentWholeLinesInVMode'| Changes behaviour of visual comments. -|'NERDCreateDefaultMappings'| Turn the default mappings on/off. -|'NERDDefaultNesting'| Tells the script to use nested comments - by default. -|'NERDMenuMode'| Specifies how the NERD commenter menu - will appear (if at all). -|'NERDLPlace'| Specifies what to use as the left - delimiter placeholder when nesting - comments. -|'NERDUsePlaceHolders'| Specifies which filetypes may use - placeholders when nesting comments. -|'NERDRemoveAltComs'| Tells the script whether to remove - alternative comment delimiters when - uncommenting. -|'NERDRemoveExtraSpaces'| Tells the script to always remove the - extra spaces when uncommenting - (regardless of whether NERDSpaceDelims - is set) -|'NERDRPlace'| Specifies what to use as the right - delimiter placeholder when nesting - comments. -|'NERDSpaceDelims'| Specifies whether to add extra spaces - around delimiters when commenting, and - whether to remove them when - uncommenting. -|'NERDCompactSexyComs'| Specifies whether to use the compact - style sexy comments. - ------------------------------------------------------------------------------- -4.3 Options details *NERDComOptionsDetails* - -To enable any of the below options you should put the given line in your -~/.vimrc - - *'loaded_nerd_comments'* -If this script is driving you insane you can turn it off by setting this -option > - let loaded_nerd_comments=1 -< ------------------------------------------------------------------------------- - *'NERDAllowAnyVisualDelims'* -Values: 0 or 1. -Default: 1. - -If set to 1 then, when doing a visual or visual-block comment (but not a -visual-line comment), the script will choose the right delimiters to use for -the comment. This means either using the current delimiters if they are -multipart or using the alternative delimiters if THEY are multipart. For -example if we are editing the following java code: > - float foo = 1221; - float bar = 324; - System.out.println(foo * bar); -< -If we are using // comments and select the "foo" and "bar" in visual-block -mode, as shown left below (where '|'s are used to represent the visual-block -boundary), and comment it then the script will use the alternative delims as -shown on the right: > - - float |foo| = 1221; float /*foo*/ = 1221; - float |bar| = 324; float /*bar*/ = 324; - System.out.println(foo * bar); System.out.println(foo * bar); -< ------------------------------------------------------------------------------- - *'NERDBlockComIgnoreEmpty'* -Values: 0 or 1. -Default: 1. - -This option affects visual-block mode commenting. If this option is turned -on, lines that begin outside the right boundary of the selection block will be -ignored. - -For example, if you are commenting this chunk of c code in visual-block mode -(where the '|'s are used to represent the visual-block boundary) > - #include - #include - #include - |int| main(){ - | | printf("SUCK THIS\n"); - | | while(1){ - | | fork(); - | | } - |} | -< -If NERDBlockComIgnoreEmpty=0 then this code will become: > - #include - #include - #include - /*int*/ main(){ - /* */ printf("SUCK THIS\n"); - /* */ while(1){ - /* */ fork(); - /* */ } - /*} */ -< -Otherwise, the code block would become: > - #include - #include - #include - /*int*/ main(){ - printf("SUCK THIS\n"); - while(1){ - fork(); - } - /*} */ -< ------------------------------------------------------------------------------- - *'NERDCommentWholeLinesInVMode'* -Values: 0, 1 or 2. -Default: 0. - -By default the script tries to comment out exactly what is selected in visual -mode (v). For example if you select and comment the following c code (using | -to represent the visual boundary): > - in|t foo = 3; - int bar =| 9; - int baz = foo + bar; -< -This will result in: > - in/*t foo = 3;*/ - /*int bar =*/ 9; - int baz = foo + bar; -< -But some people prefer it if the whole lines are commented like: > - /*int foo = 3;*/ - /*int bar = 9;*/ - int baz = foo + bar; -< -If you prefer the second option then stick this line in your vimrc: > - let NERDCommentWholeLinesInVMode=1 -< - -If the filetype you are editing only has no multipart delimiters (for example -a shell script) and you hadnt set this option then the above would become > - in#t foo = 3; - #int bar = 9; -< -(where # is the comment delimiter) as this is the closest the script can -come to commenting out exactly what was selected. If you prefer for whole -lines to be commented out when there is no multipart delimiters but the EXACT -text that was selected to be commented out if there IS multipart delimiters -then stick the following line in your vimrc: > - let NERDCommentWholeLinesInVMode=2 -< - -Note that this option does not affect the behaviour of commenting in -|visual-block| mode. - ------------------------------------------------------------------------------- - *'NERDCreateDefaultMappings'* -Values: 0 or 1. -Default: 1. - -If set to 0, none of the default mappings will be created. - -See also |NERDComMappings|. - ------------------------------------------------------------------------------- - *'NERDRemoveAltComs'* -Values: 0 or 1. -Default: 1. - -When uncommenting a line (for a filetype with an alternative commenting style) -this option tells the script whether to look for, and remove, comment -delimiters of the alternative style. - -For example, if you are editing a c++ file using // style comments and you go -cu on this line: > - /* This is a c++ comment baby! */ -< -It will not be uncommented if the NERDRemoveAltComs is set to 0. - ------------------------------------------------------------------------------- - *'NERDRemoveExtraSpaces'* -Values: 0 or 1. -Default: 1. - -By default, the NERD commenter will remove spaces around comment delimiters if -either: -1. |'NERDSpaceDelims'| is set to 1. -2. NERDRemoveExtraSpaces is set to 1. - -This means that if we have the following lines in a c code file: > - /* int foo = 5; */ - /* int bar = 10; */ - int baz = foo + bar -< -If either of the above conditions hold then if these lines are uncommented -they will become: > - int foo = 5; - int bar = 10; - int baz = foo + bar -< -Otherwise they would become: > - int foo = 5; - int bar = 10; - int baz = foo + bar -< -If you want the spaces to be removed only if |'NERDSpaceDelims'| is set then -set NERDRemoveExtraSpaces to 0. - ------------------------------------------------------------------------------- - *'NERDLPlace'* - *'NERDRPlace'* -Values: arbitrary string. -Default: - NERDLPlace: "[>" - NERDRPlace: "<]" - -These options are used to control the strings used as place-holder delimiters. -Place holder delimiters are used when performing nested commenting when the -filetype supports commenting styles with both left and right delimiters. -To set these options use lines like: > - let NERDLPlace="FOO" - let NERDRPlace="BAR" -< -Following the above example, if we have line of c code: > - /* int horse */ -< -and we comment it with cn it will be changed to: > - /*FOO int horse BAR*/ -< -When we uncomment this line it will go back to what it was. - ------------------------------------------------------------------------------- - *'NERDMenuMode'* -Values: 0, 1, 2, 3. -Default: 3 - -This option can take 4 values: - "0": Turns the menu off. - "1": Turns the 'comment' menu on with no menu shortcut. - "2": Turns the 'comment 'menu on with -c as the shortcut. - "3": Turns the 'Plugin -> comment' menu on with -c as the shortcut. - ------------------------------------------------------------------------------- - *'NERDUsePlaceHolders'* -Values: 0 or 1. -Default 1. - -This option is used to specify whether place-holder delimiters should be used -when creating a nested comment. - ------------------------------------------------------------------------------- - *'NERDSpaceDelims'* -Values: 0 or 1. -Default 0. - -Some people prefer a space after the left delimiter and before the right -delimiter like this: > - /* int foo=2; */ -< -as opposed to this: > - /*int foo=2;*/ -< -If you want spaces to be added then set NERDSpaceDelims to 1 in your vimrc. - -See also |'NERDRemoveExtraSpaces'|. - ------------------------------------------------------------------------------- - *'NERDCompactSexyComs'* -Values: 0 or 1. -Default 0. - -Some people may want their sexy comments to be like this: > - /* Hi There! - * This is a sexy comment - * in c */ -< -As opposed to like this: > - /* - * Hi There! - * This is a sexy comment - * in c - */ -< -If this option is set to 1 then the top style will be used. - ------------------------------------------------------------------------------- - *'NERDDefaultNesting'* -Values: 0 or 1. -Default 1. - -When this option is set to 1, comments are nested automatically. That is, if -you hit cc on a line that is already commented it will be commented -again. - ------------------------------------------------------------------------------- -3.3 Default delimiter customisation *NERDComDefaultDelims* - -If you want the NERD commenter to use the alternative delimiters for a -specific filetype by default then put a line of this form into your vimrc: > - let NERD__alt_style=1 -< -Example: java uses // style comments by default, but you want it to default to -/* */ style comments instead. You would put this line in your vimrc: > - let NERD_java_alt_style=1 -< - -See |NERDComAltDelim| for switching commenting styles at runtime. - -============================================================================== -5. Key mapping customisation *NERDComMappings* - -To change a mapping just map another key combo to the internal mapping. -For example, to remap the |NERDComComment| mapping to ",omg" you would put -this line in your vimrc: > - map ,omg NERDCommenterComment -< -This will stop the corresponding default mappings from being created. - -See the help for the mapping in question to see which mapping to -map to. - -See also |'NERDCreateDefaultMappings'|. - -============================================================================== -6. Issues with the script *NERDComIssues* - - ------------------------------------------------------------------------------- -6.1 Delimiter detection heuristics *NERDComHeuristics* - -Heuristics are used to distinguish the real comment delimiters - -Because we have comment mappings that place delimiters in the middle of lines, -removing comment delimiters is a bit tricky. This is because if comment -delimiters appear in a line doesnt mean they really ARE delimiters. For -example, Java uses // comments but the line > - System.out.println("//"); -< -clearly contains no real comment delimiters. - -To distinguish between ``real'' comment delimiters and ``fake'' ones we use a -set of heuristics. For example, one such heuristic states that any comment -delimiter that has an odd number of non-escaped " characters both preceding -and following it on the line is not a comment because it is probably part of a -string. These heuristics, while usually pretty accurate, will not work for all -cases. - ------------------------------------------------------------------------------- -6.2 Nesting issues *NERDComNesting* - -If we have some line of code like this: > - /*int foo */ = /*5 + 9;*/ -< -This will not be uncommented legally. The NERD commenter will remove the -"outter most" delimiters so the line will become: > - int foo */ = /*5 + 9; -< -which almost certainly will not be what you want. Nested sets of comments will -uncomment fine though. Eg: > - /*int/* foo =*/ 5 + 9;*/ -< -will become: > - int/* foo =*/ 5 + 9; -< -(Note that in the above examples I have deliberately not used place holders -for simplicity) - -============================================================================== -7. About *NERDComAbout* - -The author of the NERD commenter is Martyzillatron --- the half robot, half -dinosaur bastard son of Megatron and Godzilla. He enjoys destroying -metropolises and eating tourist busses. - -Drop him a line at martin_grenfell at msn.com. He would love to hear from you. -its a lonely life being the worlds premier terror machine. How would you feel -if your face looked like a toaster and a t-rex put together? :( - -The latest stable versions can be found at - http://www.vim.org/scripts/script.php?script_id=1218 - -The latest dev versions are on github - http://github.com/scrooloose/nerdcommenter - -============================================================================== -8. Changelog *NERDComChangelog* - -2.3.0 - - remove all filetypes which have a &commentstring in the standard vim - runtime for vim > 7.0 unless the script stores an alternate set of - delimiters - - make the script complain if the user doesnt have filetype plugins enabled - - use instead of comma to start the default mappings - - fix a couple of bugs with sexy comments - thanks to Tim Smart - - lots of refactoring - -2.2.2 - - remove the NERDShutup option and the message is suppresses, this makes - the plugin silently rely on &commentstring for unknown filetypes. - - add support for dhcpd, limits, ntp, resolv, rgb, sysctl, udevconf and - udevrules. Thanks to Thilo Six. - - match filetypes case insensitively - - add support for mp (metapost), thanks to Andrey Skvortsov. - - add support for htmlcheetah, thanks to Simon Hengel. - - add support for javacc, thanks to Matt Tolton. - - make <%# %> the default delims for eruby, thanks to tpope. - - add support for javascript.jquery, thanks to Ivan Devat. - - add support for cucumber and pdf. Fix sass and railslog delims, - thanks to tpope - -2.2.1 - - add support for newlisp and clojure, thanks to Matthew Lee Hinman. - - fix automake comments, thanks to Elias Pipping - - make haml comments default to -# with / as the alternative delimiter, - thanks to tpope - - add support for actionscript and processing thanks to Edwin Benavides - - add support for ps1 (powershell), thanks to Jason Mills - - add support for hostsaccess, thanks to Thomas Rowe - - add support for CVScommit - - add support for asciidoc, git and gitrebase. Thanks to Simon Ruderich. - - use # for gitcommit comments, thanks to Simon Ruderich. - - add support for mako and genshi, thanks to Keitheis. - - add support for conkyrc, thanks to David - - add support for SVNannotate, thanks to Miguel Jaque Barbero. - - add support for sieve, thanks to Stefan Walk - - add support for objj, thanks to Adam Thorsen. - -2.2.0 - - rewrote the mappings system to be more "standard". - - removed all the mapping options. Now, mappings to mappings are - used - - see :help NERDComMappings, and :help NERDCreateDefaultMappings for - more info - - remove "prepend comments" and "right aligned comments". - - add support for applescript, calbire, man, SVNcommit, potwiki, txt2tags and SVNinfo. - Thanks to nicothakis, timberke, sgronblo, mntnoe, Bernhard Grotz, John - O'Shea, François and Giacomo Mariani respectively. - - bugfix for haskell delimiters. Thanks to mntnoe. -2.1.18 - - add support for llvm. Thanks to nicothakis. - - add support for xquery. Thanks to Phillip Kovalev. -2.1.17 - - fixed haskell delimiters (hackily). Thanks to Elias Pipping. - - add support for mailcap. Thanks to Pascal Brueckner. - - add support for stata. Thanks to Jerónimo Carballo. - - applied a patch from ewfalor to fix an error in the help file with the - NERDMapleader doc - - disable the insert mode ctrl-c mapping by default, see :help - NERDComInsertComment if you wish to restore it - -============================================================================== -9. Credits *NERDComCredits* - -Thanks to the follow people for suggestions and patches: - -Nick Brettell -Matthew Hawkins -Mathieu Clabaut -Greg Searle -Nguyen -Litchi -Jorge Scandaliaris -Shufeng Zheng -Martin Stubenschrott -Markus Erlmann -Brent Rice -Richard Willis -Igor Prischepoff -Harry -David Bourgeois -Eike Von Seggern -Torsten Blix -Alexander Bosecke -Stefano Zacchiroli -Norick Chen -Joseph Barker -Gary Church -Tim Carey-Smith -Markus Klinik -Anders -Seth Mason -James Hales -Heptite -Cheng Fang -Yongwei Wu -David Miani -Jeremy Hinegardner -Marco -Ingo Karkat -Zhang Shuhan -tpope -Ben Schmidt -David Fishburn -Erik Falor -JaGoTerr -Elias Pipping -mntnoe -Mark S. - - -Thanks to the following people for sending me new filetypes to support: - -The hackers The filetypes~ -Sam R verilog -Jonathan Derque context, plaintext and mail -Vigil fetchmail -Michael Brunner kconfig -Antono Vasiljev netdict -Melissa Reid omlet -Ilia N Ternovich quickfix -John O'Shea RTF, SVNcommitlog and vcscommit, SVNCommit -Anders occam -Mark Woodward csv -fREW gentoo-package-mask, - gentoo-package-keywords, - gentoo-package-use, and vo_base -Alexey verilog_systemverilog, systemverilog -Lizendir fstab -Michael Böhler autoit, autohotkey and docbk -Aaron Small cmake -Ramiro htmldjango and django -Stefano Zacchiroli debcontrol, debchangelog, mkd -Alex Tarkovsky ebuild and eclass -Jorge Rodrigues gams -Rainer Müller Objective C -Jason Mills Groovy, ps1 -Normandie Azucena vera -Florian Apolloner ldif -David Fishburn lookupfile -Niels Aan de Brugh rst -Don Hatlestad ahk -Christophe Benz Desktop and xsd -Eyolf Østrem lilypond, bbx and lytex -Ingo Karkat dosbatch -Nicolas Weber markdown, objcpp -tinoucas gentoo-conf-d -Greg Weber D, haml -Bruce Sherrod velocity -timberke cobol, calibre -Aaron Schaefer factor -Mr X asterisk, mplayerconf -Kuchma Michael plsql -Brett Warneke spectre -Pipp lhaskell -Renald Buter scala -Vladimir Lomov asymptote -Marco mrxvtrc, aap -nicothakis SVNAnnotate, CVSAnnotate, SVKAnnotate, - SVNdiff, gitAnnotate, gitdiff, dtrace - llvm, applescript -Chen Xing Wikipedia -Jacobo Diaz dakota, patran -Li Jin gentoo-env-d, gentoo-init-d, - gentoo-make-conf, grub, modconf, sudoers -SpookeyPeanut rib -Greg Jandl pyrex/cython -Christophe Benz services, gitcommit -A Pontus vimperator -Stromnov slice, bzr -Martin Kustermann pamconf -Indriði Einarsson mason -Chris map -Krzysztof A. Adamski group -Pascal Brueckner mailcap -Jerónimo Carballo stata -Phillip Kovalev xquery -Bernhard Grotz potwiki -sgronblo man -François txt2tags -Giacomo Mariani SVNinfo -Matthew Lee Hinman newlisp, clojure -Elias Pipping automake -Edwin Benavides actionscript, processing -Thomas Rowe hostsaccess -Simon Ruderich asciidoc, git, gitcommit, gitrebase -Keitheis mako, genshi -David conkyrc -Miguel Jaque Barbero SVNannotate -Stefan Walk sieve -Adam Thorsen objj -Thilo Six dhcpd, limits, ntp, resolv, rgb, sysctl, - udevconf, udevrules -Andrey Skvortsov mp -Simon Hengel htmlcheetah -Matt Tolton javacc -Ivan Devat javascript.jquery -tpope cucumber,pdf -============================================================================== -10. License *NERDComLicense* - -The NERD commenter is released under the wtfpl. -See http://sam.zoy.org/wtfpl/COPYING. diff --git a/bundle/nerdcommenter/plugin/NERD_commenter.vim b/bundle/nerdcommenter/plugin/NERD_commenter.vim deleted file mode 100644 index ef88dd4..0000000 --- a/bundle/nerdcommenter/plugin/NERD_commenter.vim +++ /dev/null @@ -1,2790 +0,0 @@ -" ============================================================================ -" File: NERD_commenter.vim -" Description: vim global plugin that provides easy code commenting -" Maintainer: Martin Grenfell -" Version: 2.3.0 -" Last Change: 08th December, 2010 -" License: This program is free software. It comes without any warranty, -" to the extent permitted by applicable law. You can redistribute -" it and/or modify it under the terms of the Do What The Fuck You -" Want To Public License, Version 2, as published by Sam Hocevar. -" See http://sam.zoy.org/wtfpl/COPYING for more details. -" -" ============================================================================ - -" Section: script init stuff {{{1 -if exists("loaded_nerd_comments") - finish -endif -if v:version < 700 - echoerr "NERDCommenter: this plugin requires vim >= 7. DOWNLOAD IT! You'll thank me later!" - finish -endif -let loaded_nerd_comments = 1 - -" Function: s:InitVariable() function {{{2 -" This function is used to initialise a given variable to a given value. The -" variable is only initialised if it does not exist prior -" -" Args: -" -var: the name of the var to be initialised -" -value: the value to initialise var to -" -" Returns: -" 1 if the var is set, 0 otherwise -function s:InitVariable(var, value) - if !exists(a:var) - exec 'let ' . a:var . ' = ' . "'" . a:value . "'" - return 1 - endif - return 0 -endfunction - -" Section: space string init{{{2 -" When putting spaces after the left delim and before the right we use -" s:spaceStr for the space char. This way we can make it add anything after -" the left and before the right by modifying this variable -let s:spaceStr = ' ' -let s:lenSpaceStr = strlen(s:spaceStr) - -" Section: variable init calls {{{2 -call s:InitVariable("g:NERDAllowAnyVisualDelims", 1) -call s:InitVariable("g:NERDBlockComIgnoreEmpty", 0) -call s:InitVariable("g:NERDCommentWholeLinesInVMode", 0) -call s:InitVariable("g:NERDCompactSexyComs", 0) -call s:InitVariable("g:NERDCreateDefaultMappings", 1) -call s:InitVariable("g:NERDDefaultNesting", 1) -call s:InitVariable("g:NERDMenuMode", 3) -call s:InitVariable("g:NERDLPlace", "[>") -call s:InitVariable("g:NERDUsePlaceHolders", 1) -call s:InitVariable("g:NERDRemoveAltComs", 1) -call s:InitVariable("g:NERDRemoveExtraSpaces", 1) -call s:InitVariable("g:NERDRPlace", "<]") -call s:InitVariable("g:NERDSpaceDelims", 0) -call s:InitVariable("g:NERDDelimiterRequests", 1) - -let s:NERDFileNameEscape="[]#*$%'\" ?`!&();<>\\" -"vf ;;dA:hcs"'A {j^f(lyi(k$p0f{a A }0f{a 'left':jdd^ - -let s:delimiterMap = { - \ 'aap': { 'left': '#' }, - \ 'abc': { 'left': '%' }, - \ 'acedb': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'actionscript': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'ada': { 'left': '--', 'leftAlt': '-- ' }, - \ 'ahdl': { 'left': '--' }, - \ 'ahk': { 'left': ';', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'amiga': { 'left': ';' }, - \ 'aml': { 'left': '/*' }, - \ 'ampl': { 'left': '#' }, - \ 'apache': { 'left': '#' }, - \ 'apachestyle': { 'left': '#' }, - \ 'asciidoc': { 'left': '//' }, - \ 'applescript': { 'left': '--', 'leftAlt': '(*', 'rightAlt': '*)' }, - \ 'asm68k': { 'left': ';' }, - \ 'asm': { 'left': ';', 'leftAlt': '#' }, - \ 'asn': { 'left': '--' }, - \ 'aspvbs': { 'left': '''' }, - \ 'asterisk': { 'left': ';' }, - \ 'asy': { 'left': '//' }, - \ 'atlas': { 'left': 'C', 'right': '$' }, - \ 'autohotkey': { 'left': ';' }, - \ 'autoit': { 'left': ';' }, - \ 'ave': { 'left': "'" }, - \ 'awk': { 'left': '#' }, - \ 'basic': { 'left': "'", 'leftAlt': 'REM ' }, - \ 'bbx': { 'left': '%' }, - \ 'bc': { 'left': '#' }, - \ 'bib': { 'left': '%' }, - \ 'bindzone': { 'left': ';' }, - \ 'bst': { 'left': '%' }, - \ 'btm': { 'left': '::' }, - \ 'caos': { 'left': '*' }, - \ 'calibre': { 'left': '//' }, - \ 'catalog': { 'left': '--', 'right': '--' }, - \ 'c': { 'left': '/*','right': '*/', 'leftAlt': '//' }, - \ 'cfg': { 'left': '#' }, - \ 'cg': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'ch': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'cl': { 'left': '#' }, - \ 'clean': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'clipper': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'clojure': { 'left': ';' }, - \ 'cmake': { 'left': '#' }, - \ 'conkyrc': { 'left': '#' }, - \ 'cpp': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'crontab': { 'left': '#' }, - \ 'cs': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'csp': { 'left': '--' }, - \ 'cterm': { 'left': '*' }, - \ 'cucumber': { 'left': '#' }, - \ 'cvs': { 'left': 'CVS:' }, - \ 'd': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'dcl': { 'left': '$!' }, - \ 'dakota': { 'left': '#' }, - \ 'debcontrol': { 'left': '#' }, - \ 'debsources': { 'left': '#' }, - \ 'def': { 'left': ';' }, - \ 'desktop': { 'left': '#' }, - \ 'dhcpd': { 'left': '#' }, - \ 'diff': { 'left': '#' }, - \ 'django': { 'left': '', 'leftAlt': '{#', 'rightAlt': '#}' }, - \ 'docbk': { 'left': '' }, - \ 'dns': { 'left': ';' }, - \ 'dosbatch': { 'left': 'REM ', 'leftAlt': '::' }, - \ 'dosini': { 'left': ';' }, - \ 'dot': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'dracula': { 'left': ';' }, - \ 'dsl': { 'left': ';' }, - \ 'dtml': { 'left': '', 'right': '' }, - \ 'dylan': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'ebuild': { 'left': '#' }, - \ 'ecd': { 'left': '#' }, - \ 'eclass': { 'left': '#' }, - \ 'eiffel': { 'left': '--' }, - \ 'elf': { 'left': "'" }, - \ 'elmfilt': { 'left': '#' }, - \ 'erlang': { 'left': '%' }, - \ 'eruby': { 'left': '<%#', 'right': '%>', 'leftAlt': '' }, - \ 'expect': { 'left': '#' }, - \ 'exports': { 'left': '#' }, - \ 'factor': { 'left': '! ', 'leftAlt': '!# ' }, - \ 'fgl': { 'left': '#' }, - \ 'focexec': { 'left': '-*' }, - \ 'form': { 'left': '*' }, - \ 'foxpro': { 'left': '*' }, - \ 'fstab': { 'left': '#' }, - \ 'fvwm': { 'left': '#' }, - \ 'fx': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'gams': { 'left': '*' }, - \ 'gdb': { 'left': '#' }, - \ 'gdmo': { 'left': '--' }, - \ 'geek': { 'left': 'GEEK_COMMENT:' }, - \ 'genshi': { 'left': '', 'leftAlt': '{#', 'rightAlt': '#}' }, - \ 'gentoo-conf-d': { 'left': '#' }, - \ 'gentoo-env-d': { 'left': '#' }, - \ 'gentoo-init-d': { 'left': '#' }, - \ 'gentoo-make-conf': { 'left': '#' }, - \ 'gentoo-package-keywords': { 'left': '#' }, - \ 'gentoo-package-mask': { 'left': '#' }, - \ 'gentoo-package-use': { 'left': '#' }, - \ 'gitcommit': { 'left': '#' }, - \ 'gitconfig': { 'left': ';' }, - \ 'gitrebase': { 'left': '#' }, - \ 'gnuplot': { 'left': '#' }, - \ 'groovy': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'gsp': { 'left': '<%--', 'right': '--%>' }, - \ 'gtkrc': { 'left': '#' }, - \ 'haskell': { 'left': '{-','right': '-}', 'leftAlt': '--' }, - \ 'hb': { 'left': '#' }, - \ 'h': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'haml': { 'left': '-#', 'leftAlt': '/' }, - \ 'hercules': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'hog': { 'left': '#' }, - \ 'hostsaccess': { 'left': '#' }, - \ 'htmlcheetah': { 'left': '##' }, - \ 'htmldjango': { 'left': '', 'leftAlt': '{#', 'rightAlt': '#}' }, - \ 'htmlos': { 'left': '#', 'right': '/#' }, - \ 'ia64': { 'left': '#' }, - \ 'icon': { 'left': '#' }, - \ 'idlang': { 'left': ';' }, - \ 'idl': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'inform': { 'left': '!' }, - \ 'inittab': { 'left': '#' }, - \ 'ishd': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'iss': { 'left': ';' }, - \ 'ist': { 'left': '%' }, - \ 'java': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'javacc': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'javascript': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'javascript.jquery': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'jess': { 'left': ';' }, - \ 'jgraph': { 'left': '(*', 'right': '*)' }, - \ 'jproperties': { 'left': '#' }, - \ 'jsp': { 'left': '<%--', 'right': '--%>' }, - \ 'kix': { 'left': ';' }, - \ 'kscript': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'lace': { 'left': '--' }, - \ 'ldif': { 'left': '#' }, - \ 'lilo': { 'left': '#' }, - \ 'lilypond': { 'left': '%' }, - \ 'liquid': { 'left': '{%', 'right': '%}' }, - \ 'lisp': { 'left': ';', 'leftAlt': '#|', 'rightAlt': '|#' }, - \ 'llvm': { 'left': ';' }, - \ 'lotos': { 'left': '(*', 'right': '*)' }, - \ 'lout': { 'left': '#' }, - \ 'lprolog': { 'left': '%' }, - \ 'lscript': { 'left': "'" }, - \ 'lss': { 'left': '#' }, - \ 'lua': { 'left': '--', 'leftAlt': '--[[', 'rightAlt': ']]' }, - \ 'lynx': { 'left': '#' }, - \ 'lytex': { 'left': '%' }, - \ 'mail': { 'left': '> ' }, - \ 'mako': { 'left': '##' }, - \ 'man': { 'left': '."' }, - \ 'map': { 'left': '%' }, - \ 'maple': { 'left': '#' }, - \ 'markdown': { 'left': '' }, - \ 'masm': { 'left': ';' }, - \ 'mason': { 'left': '<% #', 'right': '%>' }, - \ 'master': { 'left': '$' }, - \ 'matlab': { 'left': '%' }, - \ 'mel': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'mib': { 'left': '--' }, - \ 'mkd': { 'left': '>' }, - \ 'mma': { 'left': '(*', 'right': '*)' }, - \ 'model': { 'left': '$', 'right': '$' }, - \ 'moduala.': { 'left': '(*', 'right': '*)' }, - \ 'modula2': { 'left': '(*', 'right': '*)' }, - \ 'modula3': { 'left': '(*', 'right': '*)' }, - \ 'monk': { 'left': ';' }, - \ 'mush': { 'left': '#' }, - \ 'named': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'nasm': { 'left': ';' }, - \ 'nastran': { 'left': '$' }, - \ 'natural': { 'left': '/*' }, - \ 'ncf': { 'left': ';' }, - \ 'newlisp': { 'left': ';' }, - \ 'nroff': { 'left': '\"' }, - \ 'nsis': { 'left': '#' }, - \ 'ntp': { 'left': '#' }, - \ 'objc': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'objcpp': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'objj': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'ocaml': { 'left': '(*', 'right': '*)' }, - \ 'occam': { 'left': '--' }, - \ 'omlet': { 'left': '(*', 'right': '*)' }, - \ 'omnimark': { 'left': ';' }, - \ 'openroad': { 'left': '//' }, - \ 'opl': { 'left': "REM" }, - \ 'ora': { 'left': '#' }, - \ 'ox': { 'left': '//' }, - \ 'pascal': { 'left': '{','right': '}', 'leftAlt': '(*', 'rightAlt': '*)' }, - \ 'patran': { 'left': '$', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'pcap': { 'left': '#' }, - \ 'pccts': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'pdf': { 'left': '%' }, - \ 'pfmain': { 'left': '//' }, - \ 'php': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'pic': { 'left': ';' }, - \ 'pike': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'pilrc': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'pine': { 'left': '#' }, - \ 'plm': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'plsql': { 'left': '--', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'po': { 'left': '#' }, - \ 'postscr': { 'left': '%' }, - \ 'pov': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'povini': { 'left': ';' }, - \ 'ppd': { 'left': '%' }, - \ 'ppwiz': { 'left': ';;' }, - \ 'processing': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'prolog': { 'left': '%', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'ps1': { 'left': '#' }, - \ 'psf': { 'left': '#' }, - \ 'ptcap': { 'left': '#' }, - \ 'python': { 'left': '#' }, - \ 'radiance': { 'left': '#' }, - \ 'ratpoison': { 'left': '#' }, - \ 'r': { 'left': '#' }, - \ 'rc': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'rebol': { 'left': ';' }, - \ 'registry': { 'left': ';' }, - \ 'remind': { 'left': '#' }, - \ 'resolv': { 'left': '#' }, - \ 'rgb': { 'left': '!' }, - \ 'rib': { 'left': '#' }, - \ 'robots': { 'left': '#' }, - \ 'sa': { 'left': '--' }, - \ 'samba': { 'left': ';', 'leftAlt': '#' }, - \ 'sass': { 'left': '//', 'leftAlt': '/*' }, - \ 'sather': { 'left': '--' }, - \ 'scala': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'scilab': { 'left': '//' }, - \ 'scsh': { 'left': ';' }, - \ 'sed': { 'left': '#' }, - \ 'sgmldecl': { 'left': '--', 'right': '--' }, - \ 'sgmllnx': { 'left': '' }, - \ 'sicad': { 'left': '*' }, - \ 'simula': { 'left': '%', 'leftAlt': '--' }, - \ 'sinda': { 'left': '$' }, - \ 'skill': { 'left': ';' }, - \ 'slang': { 'left': '%' }, - \ 'slice': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'slrnrc': { 'left': '%' }, - \ 'sm': { 'left': '#' }, - \ 'smarty': { 'left': '{*', 'right': '*}' }, - \ 'smil': { 'left': '' }, - \ 'smith': { 'left': ';' }, - \ 'sml': { 'left': '(*', 'right': '*)' }, - \ 'snnsnet': { 'left': '#' }, - \ 'snnspat': { 'left': '#' }, - \ 'snnsres': { 'left': '#' }, - \ 'snobol4': { 'left': '*' }, - \ 'spec': { 'left': '#' }, - \ 'specman': { 'left': '//' }, - \ 'spectre': { 'left': '//', 'leftAlt': '*' }, - \ 'spice': { 'left': '$' }, - \ 'sql': { 'left': '--' }, - \ 'sqlforms': { 'left': '--' }, - \ 'sqlj': { 'left': '--' }, - \ 'sqr': { 'left': '!' }, - \ 'squid': { 'left': '#' }, - \ 'st': { 'left': '"' }, - \ 'stp': { 'left': '--' }, - \ 'systemverilog': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'tads': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'tags': { 'left': ';' }, - \ 'tak': { 'left': '$' }, - \ 'tasm': { 'left': ';' }, - \ 'tcl': { 'left': '#' }, - \ 'texinfo': { 'left': "@c " }, - \ 'texmf': { 'left': '%' }, - \ 'tf': { 'left': ';' }, - \ 'tidy': { 'left': '#' }, - \ 'tli': { 'left': '#' }, - \ 'tmux': { 'left': '#' }, - \ 'trasys': { 'left': "$" }, - \ 'tsalt': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'tsscl': { 'left': '#' }, - \ 'tssgm': { 'left': "comment = '", 'right': "'" }, - \ 'txt2tags': { 'left': '%' }, - \ 'uc': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'uil': { 'left': '!' }, - \ 'vb': { 'left': "'" }, - \ 'velocity': { 'left': "##", 'right': "", 'leftAlt': '#*', 'rightAlt': '*#' }, - \ 'vera': { 'left': '/*','right': '*/', 'leftAlt': '//' }, - \ 'verilog': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'verilog_systemverilog': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, - \ 'vgrindefs': { 'left': '#' }, - \ 'vhdl': { 'left': '--' }, - \ 'vimperator': { 'left': '"' }, - \ 'virata': { 'left': '%' }, - \ 'vrml': { 'left': '#' }, - \ 'vsejcl': { 'left': '/*' }, - \ 'webmacro': { 'left': '##' }, - \ 'wget': { 'left': '#' }, - \ 'Wikipedia': { 'left': '' }, - \ 'winbatch': { 'left': ';' }, - \ 'wml': { 'left': '#' }, - \ 'wvdial': { 'left': ';' }, - \ 'xdefaults': { 'left': '!' }, - \ 'xkb': { 'left': '//' }, - \ 'xmath': { 'left': '#' }, - \ 'xpm2': { 'left': '!' }, - \ 'xquery': { 'left': '(:', 'right': ':)' }, - \ 'z8a': { 'left': ';' } - \ } - -" Section: Comment mapping functions, autocommands and commands {{{1 -" ============================================================================ -" Section: Comment enabler autocommands {{{2 -" ============================================================================ - -augroup commentEnablers - - "if the user enters a buffer or reads a buffer then we gotta set up - "the comment delimiters for that new filetype - autocmd BufEnter,BufRead * :call s:SetUpForNewFiletype(&filetype, 0) - - "if the filetype of a buffer changes, force the script to reset the - "delims for the buffer - autocmd Filetype * :call s:SetUpForNewFiletype(&filetype, 1) -augroup END - - -" Function: s:SetUpForNewFiletype(filetype) function {{{2 -" This function is responsible for setting up buffer scoped variables for the -" given filetype. -" -" Args: -" -filetype: the filetype to set delimiters for -" -forceReset: 1 if the delimiters should be reset if they have already be -" set for this buffer. -" -function s:SetUpForNewFiletype(filetype, forceReset) - let b:NERDSexyComMarker = '' - - if has_key(s:delimiterMap, a:filetype) - let b:NERDCommenterDelims = s:delimiterMap[a:filetype] - for i in ['left', 'leftAlt', 'right', 'rightAlt'] - if !has_key(b:NERDCommenterDelims, i) - let b:NERDCommenterDelims[i] = '' - endif - endfor - else - let b:NERDCommenterDelims = s:CreateDelimMapFromCms() - endif - -endfunction - -function s:CreateDelimMapFromCms() - return { - \ 'left': substitute(&commentstring, '\([^ \t]*\)\s*%s.*', '\1', ''), - \ 'right': substitute(&commentstring, '.*%s\s*\(.*\)', '\1', 'g'), - \ 'leftAlt': '', - \ 'rightAlt': '' } -endfunction - -" Function: s:SwitchToAlternativeDelimiters(printMsgs) function {{{2 -" This function is used to swap the delimiters that are being used to the -" alternative delimiters for that filetype. For example, if a c++ file is -" being edited and // comments are being used, after this function is called -" /**/ comments will be used. -" -" Args: -" -printMsgs: if this is 1 then a message is echoed to the user telling them -" if this function changed the delimiters or not -function s:SwitchToAlternativeDelimiters(printMsgs) - "if both of the alternative delimiters are empty then there is no - "alternative comment style so bail out - if b:NERDCommenterDelims['leftAlt'] == '' && b:NERDCommenterDelims['rightAlt'] == '' - if a:printMsgs - call s:NerdEcho("Cannot use alternative delimiters, none are specified", 0) - endif - return 0 - endif - - "save the current delimiters - let tempLeft = s:Left() - let tempRight = s:Right() - - "swap current delimiters for alternative - let b:NERDCommenterDelims['left'] = b:NERDCommenterDelims['leftAlt'] - let b:NERDCommenterDelims['right'] = b:NERDCommenterDelims['rightAlt'] - - "set the previously current delimiters to be the new alternative ones - let b:NERDCommenterDelims['leftAlt'] = tempLeft - let b:NERDCommenterDelims['rightAlt'] = tempRight - - "tell the user what comment delimiters they are now using - if a:printMsgs - call s:NerdEcho("Now using " . s:Left() . " " . s:Right() . " to delimit comments", 1) - endif - - return 1 -endfunction - -" Section: Comment delimiter add/removal functions {{{1 -" ============================================================================ -" Function: s:AppendCommentToLine(){{{2 -" This function appends comment delimiters at the EOL and places the cursor in -" position to start typing the comment -function s:AppendCommentToLine() - let left = s:Left({'space': 1}) - let right = s:Right({'space': 1}) - - " get the len of the right delim - let lenRight = strlen(right) - - let isLineEmpty = strlen(getline(".")) == 0 - let insOrApp = (isLineEmpty==1 ? 'i' : 'A') - - "stick the delimiters down at the end of the line. We have to format the - "comment with spaces as appropriate - execute ":normal! " . insOrApp . (isLineEmpty ? '' : ' ') . left . right . " " - - " if there is a right delimiter then we gotta move the cursor left - " by the len of the right delimiter so we insert between the delimiters - if lenRight > 0 - let leftMoveAmount = lenRight - execute ":normal! " . leftMoveAmount . "h" - endif - startinsert -endfunction - -" Function: s:CommentBlock(top, bottom, lSide, rSide, forceNested ) {{{2 -" This function is used to comment out a region of code. This region is -" specified as a bounding box by arguments to the function. -" -" Args: -" -top: the line number for the top line of code in the region -" -bottom: the line number for the bottom line of code in the region -" -lSide: the column number for the left most column in the region -" -rSide: the column number for the right most column in the region -" -forceNested: a flag indicating whether comments should be nested -function s:CommentBlock(top, bottom, lSide, rSide, forceNested ) - " we need to create local copies of these arguments so we can modify them - let top = a:top - let bottom = a:bottom - let lSide = a:lSide - let rSide = a:rSide - - "if the top or bottom line starts with tabs we have to adjust the left and - "right boundaries so that they are set as though the tabs were spaces - let topline = getline(top) - let bottomline = getline(bottom) - if s:HasLeadingTabs(topline, bottomline) - - "find out how many tabs are in the top line and adjust the left - "boundary accordingly - let numTabs = s:NumberOfLeadingTabs(topline) - if lSide < numTabs - let lSide = &ts * lSide - else - let lSide = (lSide - numTabs) + (&ts * numTabs) - endif - - "find out how many tabs are in the bottom line and adjust the right - "boundary accordingly - let numTabs = s:NumberOfLeadingTabs(bottomline) - let rSide = (rSide - numTabs) + (&ts * numTabs) - endif - - "we must check that bottom IS actually below top, if it is not then we - "swap top and bottom. Similarly for left and right. - if bottom < top - let temp = top - let top = bottom - let bottom = top - endif - if rSide < lSide - let temp = lSide - let lSide = rSide - let rSide = temp - endif - - "if the current delimiters arent multipart then we will switch to the - "alternative delims (if THEY are) as the comment will be better and more - "accurate with multipart delims - let switchedDelims = 0 - if !s:Multipart() && g:NERDAllowAnyVisualDelims && s:AltMultipart() - let switchedDelims = 1 - call s:SwitchToAlternativeDelimiters(0) - endif - - "start the commenting from the top and keep commenting till we reach the - "bottom - let currentLine=top - while currentLine <= bottom - - "check if we are allowed to comment this line - if s:CanCommentLine(a:forceNested, currentLine) - - "convert the leading tabs into spaces - let theLine = getline(currentLine) - let lineHasLeadTabs = s:HasLeadingTabs(theLine) - if lineHasLeadTabs - let theLine = s:ConvertLeadingTabsToSpaces(theLine) - endif - - "dont comment lines that begin after the right boundary of the - "block unless the user has specified to do so - if theLine !~ '^ \{' . rSide . '\}' || !g:NERDBlockComIgnoreEmpty - - "attempt to place the cursor in on the left of the boundary box, - "then check if we were successful, if not then we cant comment this - "line - call setline(currentLine, theLine) - if s:CanPlaceCursor(currentLine, lSide) - - let leftSpaced = s:Left({'space': 1}) - let rightSpaced = s:Right({'space': 1}) - - "stick the left delimiter down - let theLine = strpart(theLine, 0, lSide-1) . leftSpaced . strpart(theLine, lSide-1) - - if s:Multipart() - "stick the right delimiter down - let theLine = strpart(theLine, 0, rSide+strlen(leftSpaced)) . rightSpaced . strpart(theLine, rSide+strlen(leftSpaced)) - - let firstLeftDelim = s:FindDelimiterIndex(s:Left(), theLine) - let lastRightDelim = s:LastIndexOfDelim(s:Right(), theLine) - - if firstLeftDelim != -1 && lastRightDelim != -1 - let searchStr = strpart(theLine, 0, lastRightDelim) - let searchStr = strpart(searchStr, firstLeftDelim+strlen(s:Left())) - - "replace the outter most delims in searchStr with - "place-holders - let theLineWithPlaceHolders = s:ReplaceDelims(s:Left(), s:Right(), g:NERDLPlace, g:NERDRPlace, searchStr) - - "add the right delimiter onto the line - let theLine = strpart(theLine, 0, firstLeftDelim+strlen(s:Left())) . theLineWithPlaceHolders . strpart(theLine, lastRightDelim) - endif - endif - endif - endif - - "restore tabs if needed - if lineHasLeadTabs - let theLine = s:ConvertLeadingSpacesToTabs(theLine) - endif - - call setline(currentLine, theLine) - endif - - let currentLine = currentLine + 1 - endwhile - - "if we switched delims then we gotta go back to what they were before - if switchedDelims == 1 - call s:SwitchToAlternativeDelimiters(0) - endif -endfunction - -" Function: s:CommentLines(forceNested, alignLeft, alignRight, firstLine, lastLine) {{{2 -" This function comments a range of lines. -" -" Args: -" -forceNested: a flag indicating whether the called is requesting the comment -" to be nested if need be -" -align: should be "left" or "both" or "none" -" -firstLine/lastLine: the top and bottom lines to comment -function s:CommentLines(forceNested, align, firstLine, lastLine) - " we need to get the left and right indexes of the leftmost char in the - " block of of lines and the right most char so that we can do alignment of - " the delimiters if the user has specified - let leftAlignIndx = s:LeftMostIndx(a:forceNested, 0, a:firstLine, a:lastLine) - let rightAlignIndx = s:RightMostIndx(a:forceNested, 0, a:firstLine, a:lastLine) - - " gotta add the length of the left delimiter onto the rightAlignIndx cos - " we'll be adding a left delim to the line - let rightAlignIndx = rightAlignIndx + strlen(s:Left({'space': 1})) - - " now we actually comment the lines. Do it line by line - let currentLine = a:firstLine - while currentLine <= a:lastLine - - " get the next line, check commentability and convert spaces to tabs - let theLine = getline(currentLine) - let lineHasLeadingTabs = s:HasLeadingTabs(theLine) - let theLine = s:ConvertLeadingTabsToSpaces(theLine) - if s:CanCommentLine(a:forceNested, currentLine) - "if the user has specified forceNesting then we check to see if we - "need to switch delimiters for place-holders - if a:forceNested && g:NERDUsePlaceHolders - let theLine = s:SwapOutterMultiPartDelimsForPlaceHolders(theLine) - endif - - " find out if the line is commented using normal delims and/or - " alternate ones - let isCommented = s:IsCommented(s:Left(), s:Right(), theLine) || s:IsCommented(s:Left({'alt': 1}), s:Right({'alt': 1}), theLine) - - " check if we can comment this line - if !isCommented || g:NERDUsePlaceHolders || s:Multipart() - if a:align == "left" || a:align == "both" - let theLine = s:AddLeftDelimAligned(s:Left({'space': 1}), theLine, leftAlignIndx) - else - let theLine = s:AddLeftDelim(s:Left({'space': 1}), theLine) - endif - if a:align == "both" - let theLine = s:AddRightDelimAligned(s:Right({'space': 1}), theLine, rightAlignIndx) - else - let theLine = s:AddRightDelim(s:Right({'space': 1}), theLine) - endif - endif - endif - - " restore leading tabs if appropriate - if lineHasLeadingTabs - let theLine = s:ConvertLeadingSpacesToTabs(theLine) - endif - - " we are done with this line - call setline(currentLine, theLine) - let currentLine = currentLine + 1 - endwhile - -endfunction - -" Function: s:CommentLinesMinimal(firstLine, lastLine) {{{2 -" This function comments a range of lines in a minimal style. I -" -" Args: -" -firstLine/lastLine: the top and bottom lines to comment -function s:CommentLinesMinimal(firstLine, lastLine) - "check that minimal comments can be done on this filetype - if !s:HasMultipartDelims() - throw 'NERDCommenter.Delimiters exception: Minimal comments can only be used for filetypes that have multipart delimiters' - endif - - "if we need to use place holders for the comment, make sure they are - "enabled for this filetype - if !g:NERDUsePlaceHolders && s:DoesBlockHaveMultipartDelim(a:firstLine, a:lastLine) - throw 'NERDCommenter.Settings exception: Place holders are required but disabled.' - endif - - "get the left and right delims to smack on - let left = s:GetSexyComLeft(g:NERDSpaceDelims,0) - let right = s:GetSexyComRight(g:NERDSpaceDelims,0) - - "make sure all multipart delims on the lines are replaced with - "placeholders to prevent illegal syntax - let currentLine = a:firstLine - while(currentLine <= a:lastLine) - let theLine = getline(currentLine) - let theLine = s:ReplaceDelims(left, right, g:NERDLPlace, g:NERDRPlace, theLine) - call setline(currentLine, theLine) - let currentLine = currentLine + 1 - endwhile - - "add the delim to the top line - let theLine = getline(a:firstLine) - let lineHasLeadingTabs = s:HasLeadingTabs(theLine) - let theLine = s:ConvertLeadingTabsToSpaces(theLine) - let theLine = s:AddLeftDelim(left, theLine) - if lineHasLeadingTabs - let theLine = s:ConvertLeadingSpacesToTabs(theLine) - endif - call setline(a:firstLine, theLine) - - "add the delim to the bottom line - let theLine = getline(a:lastLine) - let lineHasLeadingTabs = s:HasLeadingTabs(theLine) - let theLine = s:ConvertLeadingTabsToSpaces(theLine) - let theLine = s:AddRightDelim(right, theLine) - if lineHasLeadingTabs - let theLine = s:ConvertLeadingSpacesToTabs(theLine) - endif - call setline(a:lastLine, theLine) -endfunction - -" Function: s:CommentLinesSexy(topline, bottomline) function {{{2 -" This function is used to comment lines in the 'Sexy' style. eg in c: -" /* -" * This is a sexy comment -" */ -" Args: -" -topline: the line num of the top line in the sexy comment -" -bottomline: the line num of the bottom line in the sexy comment -function s:CommentLinesSexy(topline, bottomline) - let left = s:GetSexyComLeft(0, 0) - let right = s:GetSexyComRight(0, 0) - - "check if we can do a sexy comment with the available delimiters - if left == -1 || right == -1 - throw 'NERDCommenter.Delimiters exception: cannot perform sexy comments with available delimiters.' - endif - - "make sure the lines arent already commented sexually - if !s:CanSexyCommentLines(a:topline, a:bottomline) - throw 'NERDCommenter.Nesting exception: cannot nest sexy comments' - endif - - - let sexyComMarker = s:GetSexyComMarker(0,0) - let sexyComMarkerSpaced = s:GetSexyComMarker(1,0) - - - " we jam the comment as far to the right as possible - let leftAlignIndx = s:LeftMostIndx(1, 1, a:topline, a:bottomline) - - "check if we should use the compact style i.e that the left/right - "delimiters should appear on the first and last lines of the code and not - "on separate lines above/below the first/last lines of code - if g:NERDCompactSexyComs - let spaceString = (g:NERDSpaceDelims ? s:spaceStr : '') - - "comment the top line - let theLine = getline(a:topline) - let lineHasTabs = s:HasLeadingTabs(theLine) - if lineHasTabs - let theLine = s:ConvertLeadingTabsToSpaces(theLine) - endif - let theLine = s:SwapOutterMultiPartDelimsForPlaceHolders(theLine) - let theLine = s:AddLeftDelimAligned(left . spaceString, theLine, leftAlignIndx) - if lineHasTabs - let theLine = s:ConvertLeadingSpacesToTabs(theLine) - endif - call setline(a:topline, theLine) - - "comment the bottom line - if a:bottomline != a:topline - let theLine = getline(a:bottomline) - let lineHasTabs = s:HasLeadingTabs(theLine) - if lineHasTabs - let theLine = s:ConvertLeadingTabsToSpaces(theLine) - endif - let theLine = s:SwapOutterMultiPartDelimsForPlaceHolders(theLine) - endif - let theLine = s:AddRightDelim(spaceString . right, theLine) - if lineHasTabs - let theLine = s:ConvertLeadingSpacesToTabs(theLine) - endif - call setline(a:bottomline, theLine) - else - - " add the left delimiter one line above the lines that are to be commented - call cursor(a:topline, 1) - execute 'normal! O' - let theLine = repeat(' ', leftAlignIndx) . left - - " Make sure tabs are respected - if !&expandtab - let theLine = s:ConvertLeadingSpacesToTabs(theLine) - endif - call setline(a:topline, theLine) - - " add the right delimiter after bottom line (we have to add 1 cos we moved - " the lines down when we added the left delim - call cursor(a:bottomline+1, 1) - execute 'normal! o' - let theLine = repeat(' ', leftAlignIndx) . repeat(' ', strlen(left)-strlen(sexyComMarker)) . right - - " Make sure tabs are respected - if !&expandtab - let theLine = s:ConvertLeadingSpacesToTabs(theLine) - endif - call setline(a:bottomline+2, theLine) - - endif - - " go thru each line adding the sexyComMarker marker to the start of each - " line in the appropriate place to align them with the comment delims - let currentLine = a:topline+1 - while currentLine <= a:bottomline + !g:NERDCompactSexyComs - " get the line and convert the tabs to spaces - let theLine = getline(currentLine) - let lineHasTabs = s:HasLeadingTabs(theLine) - if lineHasTabs - let theLine = s:ConvertLeadingTabsToSpaces(theLine) - endif - - let theLine = s:SwapOutterMultiPartDelimsForPlaceHolders(theLine) - - " add the sexyComMarker - let theLine = repeat(' ', leftAlignIndx) . repeat(' ', strlen(left)-strlen(sexyComMarker)) . sexyComMarkerSpaced . strpart(theLine, leftAlignIndx) - - if lineHasTabs - let theLine = s:ConvertLeadingSpacesToTabs(theLine) - endif - - - " set the line and move onto the next one - call setline(currentLine, theLine) - let currentLine = currentLine + 1 - endwhile - -endfunction - -" Function: s:CommentLinesToggle(forceNested, firstLine, lastLine) {{{2 -" Applies "toggle" commenting to the given range of lines -" -" Args: -" -forceNested: a flag indicating whether the called is requesting the comment -" to be nested if need be -" -firstLine/lastLine: the top and bottom lines to comment -function s:CommentLinesToggle(forceNested, firstLine, lastLine) - let currentLine = a:firstLine - while currentLine <= a:lastLine - - " get the next line, check commentability and convert spaces to tabs - let theLine = getline(currentLine) - let lineHasLeadingTabs = s:HasLeadingTabs(theLine) - let theLine = s:ConvertLeadingTabsToSpaces(theLine) - if s:CanToggleCommentLine(a:forceNested, currentLine) - - "if the user has specified forceNesting then we check to see if we - "need to switch delimiters for place-holders - if g:NERDUsePlaceHolders - let theLine = s:SwapOutterMultiPartDelimsForPlaceHolders(theLine) - endif - - let theLine = s:AddLeftDelim(s:Left({'space': 1}), theLine) - let theLine = s:AddRightDelim(s:Right({'space': 1}), theLine) - endif - - " restore leading tabs if appropriate - if lineHasLeadingTabs - let theLine = s:ConvertLeadingSpacesToTabs(theLine) - endif - - " we are done with this line - call setline(currentLine, theLine) - let currentLine = currentLine + 1 - endwhile - -endfunction - -" Function: s:CommentRegion(topline, topCol, bottomLine, bottomCol) function {{{2 -" This function comments chunks of text selected in visual mode. -" It will comment exactly the text that they have selected. -" Args: -" -topLine: the line num of the top line in the sexy comment -" -topCol: top left col for this comment -" -bottomline: the line num of the bottom line in the sexy comment -" -bottomCol: the bottom right col for this comment -" -forceNested: whether the caller wants comments to be nested if the -" line(s) are already commented -function s:CommentRegion(topLine, topCol, bottomLine, bottomCol, forceNested) - - "switch delims (if we can) if the current set isnt multipart - let switchedDelims = 0 - if !s:Multipart() && s:AltMultipart() && !g:NERDAllowAnyVisualDelims - let switchedDelims = 1 - call s:SwitchToAlternativeDelimiters(0) - endif - - "if there is only one line in the comment then just do it - if a:topLine == a:bottomLine - call s:CommentBlock(a:topLine, a:bottomLine, a:topCol, a:bottomCol, a:forceNested) - - "there are multiple lines in the comment - else - "comment the top line - call s:CommentBlock(a:topLine, a:topLine, a:topCol, strlen(getline(a:topLine)), a:forceNested) - - "comment out all the lines in the middle of the comment - let topOfRange = a:topLine+1 - let bottomOfRange = a:bottomLine-1 - if topOfRange <= bottomOfRange - call s:CommentLines(a:forceNested, "none", topOfRange, bottomOfRange) - endif - - "comment the bottom line - let bottom = getline(a:bottomLine) - let numLeadingSpacesTabs = strlen(substitute(bottom, '^\([ \t]*\).*$', '\1', '')) - call s:CommentBlock(a:bottomLine, a:bottomLine, numLeadingSpacesTabs+1, a:bottomCol, a:forceNested) - - endif - - "stick the cursor back on the char it was on before the comment - call cursor(a:topLine, a:topCol + strlen(s:Left()) + g:NERDSpaceDelims) - - "if we switched delims then we gotta go back to what they were before - if switchedDelims == 1 - call s:SwitchToAlternativeDelimiters(0) - endif - -endfunction - -" Function: s:InvertComment(firstLine, lastLine) function {{{2 -" Inverts the comments on the lines between and including the given line -" numbers i.e all commented lines are uncommented and vice versa -" Args: -" -firstLine: the top of the range of lines to be inverted -" -lastLine: the bottom of the range of lines to be inverted -function s:InvertComment(firstLine, lastLine) - - " go thru all lines in the given range - let currentLine = a:firstLine - while currentLine <= a:lastLine - let theLine = getline(currentLine) - - let sexyComBounds = s:FindBoundingLinesOfSexyCom(currentLine) - - " if the line is commented normally, uncomment it - if s:IsCommentedFromStartOfLine(s:Left(), theLine) || s:IsCommentedFromStartOfLine(s:Left({'alt': 1}), theLine) - call s:UncommentLines(currentLine, currentLine) - let currentLine = currentLine + 1 - - " check if the line is commented sexually - elseif !empty(sexyComBounds) - let numLinesBeforeSexyComRemoved = s:NumLinesInBuf() - call s:UncommentLinesSexy(sexyComBounds[0], sexyComBounds[1]) - - "move to the line after last line of the sexy comment - let numLinesAfterSexyComRemoved = s:NumLinesInBuf() - let currentLine = sexyComBounds[1] - (numLinesBeforeSexyComRemoved - numLinesAfterSexyComRemoved) + 1 - - " the line isnt commented - else - call s:CommentLinesToggle(1, currentLine, currentLine) - let currentLine = currentLine + 1 - endif - - endwhile -endfunction - -" Function: NERDComment(isVisual, type) function {{{2 -" This function is a Wrapper for the main commenting functions -" -" Args: -" -isVisual: a flag indicating whether the comment is requested in visual -" mode or not -" -type: the type of commenting requested. Can be 'sexy', 'invert', -" 'minimal', 'toggle', 'alignLeft', 'alignBoth', 'norm', -" 'nested', 'toEOL', 'append', 'insert', 'uncomment', 'yank' -function! NERDComment(isVisual, type) range - " we want case sensitivity when commenting - let oldIgnoreCase = &ignorecase - set noignorecase - - if !exists("g:did_load_ftplugin") || g:did_load_ftplugin != 1 - call s:NerdEcho("filetype plugins should be enabled. See :help NERDComInstallation and :help :filetype-plugin-on", 0) - endif - - if a:isVisual - let firstLine = line("'<") - let lastLine = line("'>") - let firstCol = col("'<") - let lastCol = col("'>") - (&selection == 'exclusive' ? 1 : 0) - else - let firstLine = a:firstline - let lastLine = a:lastline - endif - - let countWasGiven = (a:isVisual == 0 && firstLine != lastLine) - - let forceNested = (a:type == 'nested' || g:NERDDefaultNesting) - - if a:type == 'norm' || a:type == 'nested' - if a:isVisual && visualmode() == "" - call s:CommentBlock(firstLine, lastLine, firstCol, lastCol, forceNested) - elseif a:isVisual && visualmode() == "v" && (g:NERDCommentWholeLinesInVMode==0 || (g:NERDCommentWholeLinesInVMode==2 && s:HasMultipartDelims())) - call s:CommentRegion(firstLine, firstCol, lastLine, lastCol, forceNested) - else - call s:CommentLines(forceNested, "none", firstLine, lastLine) - endif - - elseif a:type == 'alignLeft' || a:type == 'alignBoth' - let align = "none" - if a:type == "alignLeft" - let align = "left" - elseif a:type == "alignBoth" - let align = "both" - endif - call s:CommentLines(forceNested, align, firstLine, lastLine) - - elseif a:type == 'invert' - call s:InvertComment(firstLine, lastLine) - - elseif a:type == 'sexy' - try - call s:CommentLinesSexy(firstLine, lastLine) - catch /NERDCommenter.Delimiters/ - call s:CommentLines(forceNested, "none", firstLine, lastLine) - catch /NERDCommenter.Nesting/ - call s:NerdEcho("Sexy comment aborted. Nested sexy cannot be nested", 0) - endtry - - elseif a:type == 'toggle' - let theLine = getline(firstLine) - - if s:IsInSexyComment(firstLine) || s:IsCommentedFromStartOfLine(s:Left(), theLine) || s:IsCommentedFromStartOfLine(s:Left({'alt': 1}), theLine) - call s:UncommentLines(firstLine, lastLine) - else - call s:CommentLinesToggle(forceNested, firstLine, lastLine) - endif - - elseif a:type == 'minimal' - try - call s:CommentLinesMinimal(firstLine, lastLine) - catch /NERDCommenter.Delimiters/ - call s:NerdEcho("Minimal comments can only be used for filetypes that have multipart delimiters.", 0) - catch /NERDCommenter.Settings/ - call s:NerdEcho("Place holders are required but disabled.", 0) - endtry - - elseif a:type == 'toEOL' - call s:SaveScreenState() - call s:CommentBlock(firstLine, firstLine, col("."), col("$")-1, 1) - call s:RestoreScreenState() - - elseif a:type == 'append' - call s:AppendCommentToLine() - - elseif a:type == 'insert' - call s:PlaceDelimitersAndInsBetween() - - elseif a:type == 'uncomment' - call s:UncommentLines(firstLine, lastLine) - - elseif a:type == 'yank' - if a:isVisual - normal! gvy - elseif countWasGiven - execute firstLine .','. lastLine .'yank' - else - normal! yy - endif - execute firstLine .','. lastLine .'call NERDComment('. a:isVisual .', "norm")' - endif - - let &ignorecase = oldIgnoreCase -endfunction - -" Function: s:PlaceDelimitersAndInsBetween() function {{{2 -" This is function is called to place comment delimiters down and place the -" cursor between them -function s:PlaceDelimitersAndInsBetween() - " get the left and right delimiters without any escape chars in them - let left = s:Left({'space': 1}) - let right = s:Right({'space': 1}) - - let theLine = getline(".") - let lineHasLeadTabs = s:HasLeadingTabs(theLine) || (theLine =~ '^ *$' && !&expandtab) - - "convert tabs to spaces and adjust the cursors column to take this into - "account - let untabbedCol = s:UntabbedCol(theLine, col(".")) - call setline(line("."), s:ConvertLeadingTabsToSpaces(theLine)) - call cursor(line("."), untabbedCol) - - " get the len of the right delim - let lenRight = strlen(right) - - let isDelimOnEOL = col(".") >= strlen(getline(".")) - - " if the cursor is in the first col then we gotta insert rather than - " append the comment delimiters here - let insOrApp = (col(".")==1 ? 'i' : 'a') - - " place the delimiters down. We do it differently depending on whether - " there is a left AND right delimiter - if lenRight > 0 - execute ":normal! " . insOrApp . left . right - execute ":normal! " . lenRight . "h" - else - execute ":normal! " . insOrApp . left - - " if we are tacking the delim on the EOL then we gotta add a space - " after it cos when we go out of insert mode the cursor will move back - " one and the user wont be in position to type the comment. - if isDelimOnEOL - execute 'normal! a ' - endif - endif - normal! l - - "if needed convert spaces back to tabs and adjust the cursors col - "accordingly - if lineHasLeadTabs - let tabbedCol = s:TabbedCol(getline("."), col(".")) - call setline(line("."), s:ConvertLeadingSpacesToTabs(getline("."))) - call cursor(line("."), tabbedCol) - endif - - startinsert -endfunction - -" Function: s:RemoveDelimiters(left, right, line) {{{2 -" this function is called to remove the first left comment delimiter and the -" last right delimiter of the given line. -" -" The args left and right must be strings. If there is no right delimiter (as -" is the case for e.g vim file comments) them the arg right should be "" -" -" Args: -" -left: the left comment delimiter -" -right: the right comment delimiter -" -line: the line to remove the delimiters from -function s:RemoveDelimiters(left, right, line) - - let l:left = a:left - let l:right = a:right - let lenLeft = strlen(left) - let lenRight = strlen(right) - - let delimsSpaced = (g:NERDSpaceDelims || g:NERDRemoveExtraSpaces) - - let line = a:line - - "look for the left delimiter, if we find it, remove it. - let leftIndx = s:FindDelimiterIndex(a:left, line) - if leftIndx != -1 - let line = strpart(line, 0, leftIndx) . strpart(line, leftIndx+lenLeft) - - "if the user has specified that there is a space after the left delim - "then check for the space and remove it if it is there - if delimsSpaced && strpart(line, leftIndx, s:lenSpaceStr) == s:spaceStr - let line = strpart(line, 0, leftIndx) . strpart(line, leftIndx+s:lenSpaceStr) - endif - endif - - "look for the right delimiter, if we find it, remove it - let rightIndx = s:FindDelimiterIndex(a:right, line) - if rightIndx != -1 - let line = strpart(line, 0, rightIndx) . strpart(line, rightIndx+lenRight) - - "if the user has specified that there is a space before the right delim - "then check for the space and remove it if it is there - if delimsSpaced && strpart(line, rightIndx-s:lenSpaceStr, s:lenSpaceStr) == s:spaceStr && s:Multipart() - let line = strpart(line, 0, rightIndx-s:lenSpaceStr) . strpart(line, rightIndx) - endif - endif - - return line -endfunction - -" Function: s:UncommentLines(topLine, bottomLine) {{{2 -" This function uncomments the given lines -" -" Args: -" topLine: the top line of the visual selection to uncomment -" bottomLine: the bottom line of the visual selection to uncomment -function s:UncommentLines(topLine, bottomLine) - "make local copies of a:firstline and a:lastline and, if need be, swap - "them around if the top line is below the bottom - let l:firstline = a:topLine - let l:lastline = a:bottomLine - if firstline > lastline - let firstline = lastline - let lastline = a:topLine - endif - - "go thru each line uncommenting each line removing sexy comments - let currentLine = firstline - while currentLine <= lastline - - "check the current line to see if it is part of a sexy comment - let sexyComBounds = s:FindBoundingLinesOfSexyCom(currentLine) - if !empty(sexyComBounds) - - "we need to store the num lines in the buf before the comment is - "removed so we know how many lines were removed when the sexy com - "was removed - let numLinesBeforeSexyComRemoved = s:NumLinesInBuf() - - call s:UncommentLinesSexy(sexyComBounds[0], sexyComBounds[1]) - - "move to the line after last line of the sexy comment - let numLinesAfterSexyComRemoved = s:NumLinesInBuf() - let numLinesRemoved = numLinesBeforeSexyComRemoved - numLinesAfterSexyComRemoved - let currentLine = sexyComBounds[1] - numLinesRemoved + 1 - let lastline = lastline - numLinesRemoved - - "no sexy com was detected so uncomment the line as normal - else - call s:UncommentLinesNormal(currentLine, currentLine) - let currentLine = currentLine + 1 - endif - endwhile - -endfunction - -" Function: s:UncommentLinesSexy(topline, bottomline) {{{2 -" This function removes all the comment characters associated with the sexy -" comment spanning the given lines -" Args: -" -topline/bottomline: the top/bottom lines of the sexy comment -function s:UncommentLinesSexy(topline, bottomline) - let left = s:GetSexyComLeft(0,1) - let right = s:GetSexyComRight(0,1) - - - "check if it is even possible for sexy comments to exist with the - "available delimiters - if left == -1 || right == -1 - throw 'NERDCommenter.Delimiters exception: cannot uncomment sexy comments with available delimiters.' - endif - - let leftUnEsc = s:GetSexyComLeft(0,0) - let rightUnEsc = s:GetSexyComRight(0,0) - - let sexyComMarker = s:GetSexyComMarker(0, 1) - let sexyComMarkerUnEsc = s:GetSexyComMarker(0, 0) - - "the markerOffset is how far right we need to move the sexyComMarker to - "line it up with the end of the left delim - let markerOffset = strlen(leftUnEsc)-strlen(sexyComMarkerUnEsc) - - " go thru the intermediate lines of the sexy comment and remove the - " sexy comment markers (eg the '*'s on the start of line in a c sexy - " comment) - let currentLine = a:topline+1 - while currentLine < a:bottomline - let theLine = getline(currentLine) - - " remove the sexy comment marker from the line. We also remove the - " space after it if there is one and if appropriate options are set - let sexyComMarkerIndx = stridx(theLine, sexyComMarkerUnEsc) - if strpart(theLine, sexyComMarkerIndx+strlen(sexyComMarkerUnEsc), s:lenSpaceStr) == s:spaceStr && g:NERDSpaceDelims - let theLine = strpart(theLine, 0, sexyComMarkerIndx - markerOffset) . strpart(theLine, sexyComMarkerIndx+strlen(sexyComMarkerUnEsc)+s:lenSpaceStr) - else - let theLine = strpart(theLine, 0, sexyComMarkerIndx - markerOffset) . strpart(theLine, sexyComMarkerIndx+strlen(sexyComMarkerUnEsc)) - endif - - let theLine = s:SwapOutterPlaceHoldersForMultiPartDelims(theLine) - - let theLine = s:ConvertLeadingWhiteSpace(theLine) - - " move onto the next line - call setline(currentLine, theLine) - let currentLine = currentLine + 1 - endwhile - - " gotta make a copy of a:bottomline cos we modify the position of the - " last line it if we remove the topline - let bottomline = a:bottomline - - " get the first line so we can remove the left delim from it - let theLine = getline(a:topline) - - " if the first line contains only the left delim then just delete it - if theLine =~ '^[ \t]*' . left . '[ \t]*$' && !g:NERDCompactSexyComs - call cursor(a:topline, 1) - normal! dd - let bottomline = bottomline - 1 - - " topline contains more than just the left delim - else - - " remove the delim. If there is a space after it - " then remove this too if appropriate - let delimIndx = stridx(theLine, leftUnEsc) - if strpart(theLine, delimIndx+strlen(leftUnEsc), s:lenSpaceStr) == s:spaceStr && g:NERDSpaceDelims - let theLine = strpart(theLine, 0, delimIndx) . strpart(theLine, delimIndx+strlen(leftUnEsc)+s:lenSpaceStr) - else - let theLine = strpart(theLine, 0, delimIndx) . strpart(theLine, delimIndx+strlen(leftUnEsc)) - endif - let theLine = s:SwapOutterPlaceHoldersForMultiPartDelims(theLine) - call setline(a:topline, theLine) - endif - - " get the last line so we can remove the right delim - let theLine = getline(bottomline) - - " if the bottomline contains only the right delim then just delete it - if theLine =~ '^[ \t]*' . right . '[ \t]*$' - call cursor(bottomline, 1) - normal! dd - - " the last line contains more than the right delim - else - " remove the right delim. If there is a space after it and - " if the appropriate options are set then remove this too. - let delimIndx = s:LastIndexOfDelim(rightUnEsc, theLine) - if strpart(theLine, delimIndx+strlen(leftUnEsc), s:lenSpaceStr) == s:spaceStr && g:NERDSpaceDelims - let theLine = strpart(theLine, 0, delimIndx) . strpart(theLine, delimIndx+strlen(rightUnEsc)+s:lenSpaceStr) - else - let theLine = strpart(theLine, 0, delimIndx) . strpart(theLine, delimIndx+strlen(rightUnEsc)) - endif - - " if the last line also starts with a sexy comment marker then we - " remove this as well - if theLine =~ '^[ \t]*' . sexyComMarker - - " remove the sexyComMarker. If there is a space after it then - " remove that too - let sexyComMarkerIndx = stridx(theLine, sexyComMarkerUnEsc) - if strpart(theLine, sexyComMarkerIndx+strlen(sexyComMarkerUnEsc), s:lenSpaceStr) == s:spaceStr && g:NERDSpaceDelims - let theLine = strpart(theLine, 0, sexyComMarkerIndx - markerOffset ) . strpart(theLine, sexyComMarkerIndx+strlen(sexyComMarkerUnEsc)+s:lenSpaceStr) - else - let theLine = strpart(theLine, 0, sexyComMarkerIndx - markerOffset ) . strpart(theLine, sexyComMarkerIndx+strlen(sexyComMarkerUnEsc)) - endif - endif - - let theLine = s:SwapOutterPlaceHoldersForMultiPartDelims(theLine) - call setline(bottomline, theLine) - endif -endfunction - -" Function: s:UncommentLineNormal(line) {{{2 -" uncomments the given line and returns the result -" Args: -" -line: the line to uncomment -function s:UncommentLineNormal(line) - let line = a:line - - "get the comment status on the line so we know how it is commented - let lineCommentStatus = s:IsCommentedOuttermost(s:Left(), s:Right(), s:Left({'alt': 1}), s:Right({'alt': 1}), line) - - "it is commented with s:Left() and s:Right() so remove these delims - if lineCommentStatus == 1 - let line = s:RemoveDelimiters(s:Left(), s:Right(), line) - - "it is commented with s:Left({'alt': 1}) and s:Right({'alt': 1}) so remove these delims - elseif lineCommentStatus == 2 && g:NERDRemoveAltComs - let line = s:RemoveDelimiters(s:Left({'alt': 1}), s:Right({'alt': 1}), line) - - "it is not properly commented with any delims so we check if it has - "any random left or right delims on it and remove the outtermost ones - else - "get the positions of all delim types on the line - let indxLeft = s:FindDelimiterIndex(s:Left(), line) - let indxLeftAlt = s:FindDelimiterIndex(s:Left({'alt': 1}), line) - let indxRight = s:FindDelimiterIndex(s:Right(), line) - let indxRightAlt = s:FindDelimiterIndex(s:Right({'alt': 1}), line) - - "remove the outter most left comment delim - if indxLeft != -1 && (indxLeft < indxLeftAlt || indxLeftAlt == -1) - let line = s:RemoveDelimiters(s:Left(), '', line) - elseif indxLeftAlt != -1 - let line = s:RemoveDelimiters(s:Left({'alt': 1}), '', line) - endif - - "remove the outter most right comment delim - if indxRight != -1 && (indxRight < indxRightAlt || indxRightAlt == -1) - let line = s:RemoveDelimiters('', s:Right(), line) - elseif indxRightAlt != -1 - let line = s:RemoveDelimiters('', s:Right({'alt': 1}), line) - endif - endif - - - let indxLeft = s:FindDelimiterIndex(s:Left(), line) - let indxLeftAlt = s:FindDelimiterIndex(s:Left({'alt': 1}), line) - let indxLeftPlace = s:FindDelimiterIndex(g:NERDLPlace, line) - - let indxRightPlace = s:FindDelimiterIndex(g:NERDRPlace, line) - let indxRightAlt = s:FindDelimiterIndex(s:Right({'alt': 1}), line) - let indxRightPlace = s:FindDelimiterIndex(g:NERDRPlace, line) - - let right = s:Right() - let left = s:Left() - if !s:Multipart() - let right = s:Right({'alt': 1}) - let left = s:Left({'alt': 1}) - endif - - - "if there are place-holders on the line then we check to see if they are - "the outtermost delimiters on the line. If so then we replace them with - "real delimiters - if indxLeftPlace != -1 - if (indxLeftPlace < indxLeft || indxLeft==-1) && (indxLeftPlace < indxLeftAlt || indxLeftAlt==-1) - let line = s:ReplaceDelims(g:NERDLPlace, g:NERDRPlace, left, right, line) - endif - elseif indxRightPlace != -1 - if (indxRightPlace < indxLeft || indxLeft==-1) && (indxLeftPlace < indxLeftAlt || indxLeftAlt==-1) - let line = s:ReplaceDelims(g:NERDLPlace, g:NERDRPlace, left, right, line) - endif - - endif - - let line = s:ConvertLeadingWhiteSpace(line) - - return line -endfunction - -" Function: s:UncommentLinesNormal(topline, bottomline) {{{2 -" This function is called to uncomment lines that arent a sexy comment -" Args: -" -topline/bottomline: the top/bottom line numbers of the comment -function s:UncommentLinesNormal(topline, bottomline) - let currentLine = a:topline - while currentLine <= a:bottomline - let line = getline(currentLine) - call setline(currentLine, s:UncommentLineNormal(line)) - let currentLine = currentLine + 1 - endwhile -endfunction - - -" Section: Other helper functions {{{1 -" ============================================================================ - -" Function: s:AddLeftDelim(delim, theLine) {{{2 -" Args: -function s:AddLeftDelim(delim, theLine) - return substitute(a:theLine, '^\([ \t]*\)', '\1' . a:delim, '') -endfunction - -" Function: s:AddLeftDelimAligned(delim, theLine) {{{2 -" Args: -function s:AddLeftDelimAligned(delim, theLine, alignIndx) - - "if the line is not long enough then bung some extra spaces on the front - "so we can align the delim properly - let theLine = a:theLine - if strlen(theLine) < a:alignIndx - let theLine = repeat(' ', a:alignIndx - strlen(theLine)) - endif - - return strpart(theLine, 0, a:alignIndx) . a:delim . strpart(theLine, a:alignIndx) -endfunction - -" Function: s:AddRightDelim(delim, theLine) {{{2 -" Args: -function s:AddRightDelim(delim, theLine) - if a:delim == '' - return a:theLine - else - return substitute(a:theLine, '$', a:delim, '') - endif -endfunction - -" Function: s:AddRightDelimAligned(delim, theLine, alignIndx) {{{2 -" Args: -function s:AddRightDelimAligned(delim, theLine, alignIndx) - if a:delim == "" - return a:theLine - else - - " when we align the right delim we are just adding spaces - " so we get a string containing the needed spaces (it - " could be empty) - let extraSpaces = '' - let extraSpaces = repeat(' ', a:alignIndx-strlen(a:theLine)) - - " add the right delim - return substitute(a:theLine, '$', extraSpaces . a:delim, '') - endif -endfunction - -" Function: s:AltMultipart() {{{2 -" returns 1 if the alternative delims are multipart -function s:AltMultipart() - return b:NERDCommenterDelims['rightAlt'] != '' -endfunction - -" Function: s:CanCommentLine(forceNested, line) {{{2 -"This function is used to determine whether the given line can be commented. -"It returns 1 if it can be and 0 otherwise -" -" Args: -" -forceNested: a flag indicating whether the caller wants comments to be nested -" if the current line is already commented -" -lineNum: the line num of the line to check for commentability -function s:CanCommentLine(forceNested, lineNum) - let theLine = getline(a:lineNum) - - " make sure we don't comment lines that are just spaces or tabs or empty. - if theLine =~ "^[ \t]*$" - return 0 - endif - - "if the line is part of a sexy comment then just flag it... - if s:IsInSexyComment(a:lineNum) - return 0 - endif - - let isCommented = s:IsCommentedNormOrSexy(a:lineNum) - - "if the line isnt commented return true - if !isCommented - return 1 - endif - - "if the line is commented but nesting is allowed then return true - if a:forceNested && (!s:Multipart() || g:NERDUsePlaceHolders) - return 1 - endif - - return 0 -endfunction - -" Function: s:CanPlaceCursor(line, col) {{{2 -" returns 1 if the cursor can be placed exactly in the given position -function s:CanPlaceCursor(line, col) - let c = col(".") - let l = line(".") - call cursor(a:line, a:col) - let success = (line(".") == a:line && col(".") == a:col) - call cursor(l,c) - return success -endfunction - -" Function: s:CanSexyCommentLines(topline, bottomline) {{{2 -" Return: 1 if the given lines can be commented sexually, 0 otherwise -function s:CanSexyCommentLines(topline, bottomline) - " see if the selected regions have any sexy comments - let currentLine = a:topline - while(currentLine <= a:bottomline) - if s:IsInSexyComment(currentLine) - return 0 - endif - let currentLine = currentLine + 1 - endwhile - return 1 -endfunction -" Function: s:CanToggleCommentLine(forceNested, line) {{{2 -"This function is used to determine whether the given line can be toggle commented. -"It returns 1 if it can be and 0 otherwise -" -" Args: -" -lineNum: the line num of the line to check for commentability -function s:CanToggleCommentLine(forceNested, lineNum) - let theLine = getline(a:lineNum) - if (s:IsCommentedFromStartOfLine(s:Left(), theLine) || s:IsCommentedFromStartOfLine(s:Left({'alt': 1}), theLine)) && !a:forceNested - return 0 - endif - - " make sure we don't comment lines that are just spaces or tabs or empty. - if theLine =~ "^[ \t]*$" - return 0 - endif - - "if the line is part of a sexy comment then just flag it... - if s:IsInSexyComment(a:lineNum) - return 0 - endif - - return 1 -endfunction - -" Function: s:ConvertLeadingSpacesToTabs(line) {{{2 -" This function takes a line and converts all leading tabs on that line into -" spaces -" -" Args: -" -line: the line whose leading tabs will be converted -function s:ConvertLeadingSpacesToTabs(line) - let toReturn = a:line - while toReturn =~ '^\t*' . s:TabSpace() . '\(.*\)$' - let toReturn = substitute(toReturn, '^\(\t*\)' . s:TabSpace() . '\(.*\)$' , '\1\t\2' , "") - endwhile - - return toReturn -endfunction - - -" Function: s:ConvertLeadingTabsToSpaces(line) {{{2 -" This function takes a line and converts all leading spaces on that line into -" tabs -" -" Args: -" -line: the line whose leading spaces will be converted -function s:ConvertLeadingTabsToSpaces(line) - let toReturn = a:line - while toReturn =~ '^\( *\)\t' - let toReturn = substitute(toReturn, '^\( *\)\t', '\1' . s:TabSpace() , "") - endwhile - - return toReturn -endfunction - -" Function: s:ConvertLeadingWhiteSpace(line) {{{2 -" Converts the leading white space to tabs/spaces depending on &ts -" -" Args: -" -line: the line to convert -function s:ConvertLeadingWhiteSpace(line) - let toReturn = a:line - while toReturn =~ '^ *\t' - let toReturn = substitute(toReturn, '^ *\zs\t\ze', s:TabSpace(), "g") - endwhile - - if !&expandtab - let toReturn = s:ConvertLeadingSpacesToTabs(toReturn) - endif - - return toReturn -endfunction - - -" Function: s:CountNonESCedOccurances(str, searchstr, escChar) {{{2 -" This function counts the number of substrings contained in another string. -" These substrings are only counted if they are not escaped with escChar -" Args: -" -str: the string to look for searchstr in -" -searchstr: the substring to search for in str -" -escChar: the escape character which, when preceding an instance of -" searchstr, will cause it not to be counted -function s:CountNonESCedOccurances(str, searchstr, escChar) - "get the index of the first occurrence of searchstr - let indx = stridx(a:str, a:searchstr) - - "if there is an instance of searchstr in str process it - if indx != -1 - "get the remainder of str after this instance of searchstr is removed - let lensearchstr = strlen(a:searchstr) - let strLeft = strpart(a:str, indx+lensearchstr) - - "if this instance of searchstr is not escaped, add one to the count - "and recurse. If it is escaped, just recurse - if !s:IsEscaped(a:str, indx, a:escChar) - return 1 + s:CountNonESCedOccurances(strLeft, a:searchstr, a:escChar) - else - return s:CountNonESCedOccurances(strLeft, a:searchstr, a:escChar) - endif - endif -endfunction -" Function: s:DoesBlockHaveDelim(delim, top, bottom) {{{2 -" Returns 1 if the given block of lines has a delimiter (a:delim) in it -" Args: -" -delim: the comment delimiter to check the block for -" -top: the top line number of the block -" -bottom: the bottom line number of the block -function s:DoesBlockHaveDelim(delim, top, bottom) - let currentLine = a:top - while currentLine < a:bottom - let theline = getline(currentLine) - if s:FindDelimiterIndex(a:delim, theline) != -1 - return 1 - endif - let currentLine = currentLine + 1 - endwhile - return 0 -endfunction - -" Function: s:DoesBlockHaveMultipartDelim(top, bottom) {{{2 -" Returns 1 if the given block has a >= 1 multipart delimiter in it -" Args: -" -top: the top line number of the block -" -bottom: the bottom line number of the block -function s:DoesBlockHaveMultipartDelim(top, bottom) - if s:HasMultipartDelims() - if s:Multipart() - return s:DoesBlockHaveDelim(s:Left(), a:top, a:bottom) || s:DoesBlockHaveDelim(s:Right(), a:top, a:bottom) - else - return s:DoesBlockHaveDelim(s:Left({'alt': 1}), a:top, a:bottom) || s:DoesBlockHaveDelim(s:Right({'alt': 1}), a:top, a:bottom) - endif - endif - return 0 -endfunction - - -" Function: s:Esc(str) {{{2 -" Escapes all the tricky chars in the given string -function s:Esc(str) - let charsToEsc = '*/\."&$+' - return escape(a:str, charsToEsc) -endfunction - -" Function: s:FindDelimiterIndex(delimiter, line) {{{2 -" This function is used to get the string index of the input comment delimiter -" on the input line. If no valid comment delimiter is found in the line then -" -1 is returned -" Args: -" -delimiter: the delimiter we are looking to find the index of -" -line: the line we are looking for delimiter on -function s:FindDelimiterIndex(delimiter, line) - - "make sure the delimiter isnt empty otherwise we go into an infinite loop. - if a:delimiter == "" - return -1 - endif - - - let l:delimiter = a:delimiter - let lenDel = strlen(l:delimiter) - - "get the index of the first occurrence of the delimiter - let delIndx = stridx(a:line, l:delimiter) - - "keep looping thru the line till we either find a real comment delimiter - "or run off the EOL - while delIndx != -1 - - "if we are not off the EOL get the str before the possible delimiter - "in question and check if it really is a delimiter. If it is, return - "its position - if delIndx != -1 - if s:IsDelimValid(l:delimiter, delIndx, a:line) - return delIndx - endif - endif - - "we have not yet found a real comment delimiter so move past the - "current one we are lookin at - let restOfLine = strpart(a:line, delIndx + lenDel) - let distToNextDelim = stridx(restOfLine , l:delimiter) - - "if distToNextDelim is -1 then there is no more potential delimiters - "on the line so set delIndx to -1. Otherwise, move along the line by - "distToNextDelim - if distToNextDelim == -1 - let delIndx = -1 - else - let delIndx = delIndx + lenDel + distToNextDelim - endif - endwhile - - "there is no comment delimiter on this line - return -1 -endfunction - -" Function: s:FindBoundingLinesOfSexyCom(lineNum) {{{2 -" This function takes in a line number and tests whether this line number is -" the top/bottom/middle line of a sexy comment. If it is then the top/bottom -" lines of the sexy comment are returned -" Args: -" -lineNum: the line number that is to be tested whether it is the -" top/bottom/middle line of a sexy com -" Returns: -" A string that has the top/bottom lines of the sexy comment encoded in it. -" The format is 'topline,bottomline'. If a:lineNum turns out not to be the -" top/bottom/middle of a sexy comment then -1 is returned -function s:FindBoundingLinesOfSexyCom(lineNum) - - "find which delimiters to look for as the start/end delims of the comment - let left = '' - let right = '' - if s:Multipart() - let left = s:Left({'esc': 1}) - let right = s:Right({'esc': 1}) - elseif s:AltMultipart() - let left = s:Left({'alt': 1, 'esc': 1}) - let right = s:Right({'alt': 1, 'esc': 1}) - else - return [] - endif - - let sexyComMarker = s:GetSexyComMarker(0, 1) - - "initialise the top/bottom line numbers of the sexy comment to -1 - let top = -1 - let bottom = -1 - - let currentLine = a:lineNum - while top == -1 || bottom == -1 - let theLine = getline(currentLine) - - "check if the current line is the top of the sexy comment - if currentLine <= a:lineNum && theLine =~ '^[ \t]*' . left && theLine !~ '.*' . right && currentLine < s:NumLinesInBuf() - let top = currentLine - let currentLine = a:lineNum - - "check if the current line is the bottom of the sexy comment - elseif theLine =~ '^[ \t]*' . right && theLine !~ '.*' . left && currentLine > 1 - let bottom = currentLine - - "the right delimiter is on the same line as the last sexyComMarker - elseif theLine =~ '^[ \t]*' . sexyComMarker . '.*' . right - let bottom = currentLine - - "we have not found the top or bottom line so we assume currentLine is an - "intermediate line and look to prove otherwise - else - - "if the line doesnt start with a sexyComMarker then it is not a sexy - "comment - if theLine !~ '^[ \t]*' . sexyComMarker - return [] - endif - - endif - - "if top is -1 then we havent found the top yet so keep looking up - if top == -1 - let currentLine = currentLine - 1 - "if we have found the top line then go down looking for the bottom - else - let currentLine = currentLine + 1 - endif - - endwhile - - return [top, bottom] -endfunction - - -" Function: s:GetSexyComMarker() {{{2 -" Returns the sexy comment marker for the current filetype. -" -" C style sexy comments are assumed if possible. If not then the sexy comment -" marker is the last char of the delimiter pair that has both left and right -" delims and has the longest left delim -" -" Args: -" -space: specifies whether the marker is to have a space string after it -" (the space string will only be added if NERDSpaceDelims is set) -" -esc: specifies whether the tricky chars in the marker are to be ESCed -function s:GetSexyComMarker(space, esc) - let sexyComMarker = b:NERDSexyComMarker - - "if there is no hardcoded marker then we find one - if sexyComMarker == '' - - "if the filetype has c style comments then use standard c sexy - "comments - if s:HasCStyleComments() - let sexyComMarker = '*' - else - "find a comment marker by getting the longest available left delim - "(that has a corresponding right delim) and taking the last char - let lenLeft = strlen(s:Left()) - let lenLeftAlt = strlen(s:Left({'alt': 1})) - let left = '' - let right = '' - if s:Multipart() && lenLeft >= lenLeftAlt - let left = s:Left() - elseif s:AltMultipart() - let left = s:Left({'alt': 1}) - else - return -1 - endif - - "get the last char of left - let sexyComMarker = strpart(left, strlen(left)-1) - endif - endif - - if a:space && g:NERDSpaceDelims - let sexyComMarker = sexyComMarker . s:spaceStr - endif - - if a:esc - let sexyComMarker = s:Esc(sexyComMarker) - endif - - return sexyComMarker -endfunction - -" Function: s:GetSexyComLeft(space, esc) {{{2 -" Returns the left delimiter for sexy comments for this filetype or -1 if -" there is none. C style sexy comments are used if possible -" Args: -" -space: specifies if the delim has a space string on the end -" (the space string will only be added if NERDSpaceDelims is set) -" -esc: specifies whether the tricky chars in the string are ESCed -function s:GetSexyComLeft(space, esc) - let lenLeft = strlen(s:Left()) - let lenLeftAlt = strlen(s:Left({'alt': 1})) - let left = '' - - "assume c style sexy comments if possible - if s:HasCStyleComments() - let left = '/*' - else - "grab the longest left delim that has a right - if s:Multipart() && lenLeft >= lenLeftAlt - let left = s:Left() - elseif s:AltMultipart() - let left = s:Left({'alt': 1}) - else - return -1 - endif - endif - - if a:space && g:NERDSpaceDelims - let left = left . s:spaceStr - endif - - if a:esc - let left = s:Esc(left) - endif - - return left -endfunction - -" Function: s:GetSexyComRight(space, esc) {{{2 -" Returns the right delimiter for sexy comments for this filetype or -1 if -" there is none. C style sexy comments are used if possible. -" Args: -" -space: specifies if the delim has a space string on the start -" (the space string will only be added if NERDSpaceDelims -" is specified for the current filetype) -" -esc: specifies whether the tricky chars in the string are ESCed -function s:GetSexyComRight(space, esc) - let lenLeft = strlen(s:Left()) - let lenLeftAlt = strlen(s:Left({'alt': 1})) - let right = '' - - "assume c style sexy comments if possible - if s:HasCStyleComments() - let right = '*/' - else - "grab the right delim that pairs with the longest left delim - if s:Multipart() && lenLeft >= lenLeftAlt - let right = s:Right() - elseif s:AltMultipart() - let right = s:Right({'alt': 1}) - else - return -1 - endif - endif - - if a:space && g:NERDSpaceDelims - let right = s:spaceStr . right - endif - - if a:esc - let right = s:Esc(right) - endif - - return right -endfunction - -" Function: s:HasMultipartDelims() {{{2 -" Returns 1 iff the current filetype has at least one set of multipart delims -function s:HasMultipartDelims() - return s:Multipart() || s:AltMultipart() -endfunction - -" Function: s:HasLeadingTabs(...) {{{2 -" Returns 1 if any of the given strings have leading tabs -function s:HasLeadingTabs(...) - for s in a:000 - if s =~ '^\t.*' - return 1 - end - endfor - return 0 -endfunction -" Function: s:HasCStyleComments() {{{2 -" Returns 1 iff the current filetype has c style comment delimiters -function s:HasCStyleComments() - return (s:Left() == '/*' && s:Right() == '*/') || (s:Left({'alt': 1}) == '/*' && s:Right({'alt': 1}) == '*/') -endfunction - -" Function: s:IsCommentedNormOrSexy(lineNum) {{{2 -"This function is used to determine whether the given line is commented with -"either set of delimiters or if it is part of a sexy comment -" -" Args: -" -lineNum: the line number of the line to check -function s:IsCommentedNormOrSexy(lineNum) - let theLine = getline(a:lineNum) - - "if the line is commented normally return 1 - if s:IsCommented(s:Left(), s:Right(), theLine) || s:IsCommented(s:Left({'alt': 1}), s:Right({'alt': 1}), theLine) - return 1 - endif - - "if the line is part of a sexy comment return 1 - if s:IsInSexyComment(a:lineNum) - return 1 - endif - return 0 -endfunction - -" Function: s:IsCommented(left, right, line) {{{2 -"This function is used to determine whether the given line is commented with -"the given delimiters -" -" Args: -" -line: the line that to check if commented -" -left/right: the left and right delimiters to check for -function s:IsCommented(left, right, line) - "if the line isnt commented return true - if s:FindDelimiterIndex(a:left, a:line) != -1 && (s:FindDelimiterIndex(a:right, a:line) != -1 || !s:Multipart()) - return 1 - endif - return 0 -endfunction - -" Function: s:IsCommentedFromStartOfLine(left, line) {{{2 -"This function is used to determine whether the given line is commented with -"the given delimiters at the start of the line i.e the left delimiter is the -"first thing on the line (apart from spaces\tabs) -" -" Args: -" -line: the line that to check if commented -" -left: the left delimiter to check for -function s:IsCommentedFromStartOfLine(left, line) - let theLine = s:ConvertLeadingTabsToSpaces(a:line) - let numSpaces = strlen(substitute(theLine, '^\( *\).*$', '\1', '')) - let delimIndx = s:FindDelimiterIndex(a:left, theLine) - return delimIndx == numSpaces -endfunction - -" Function: s:IsCommentedOuttermost(left, right, leftAlt, rightAlt, line) {{{2 -" Finds the type of the outtermost delims on the line -" -" Args: -" -line: the line that to check if the outtermost comments on it are -" left/right -" -left/right: the left and right delimiters to check for -" -leftAlt/rightAlt: the left and right alternative delimiters to check for -" -" Returns: -" 0 if the line is not commented with either set of delims -" 1 if the line is commented with the left/right delim set -" 2 if the line is commented with the leftAlt/rightAlt delim set -function s:IsCommentedOuttermost(left, right, leftAlt, rightAlt, line) - "get the first positions of the left delims and the last positions of the - "right delims - let indxLeft = s:FindDelimiterIndex(a:left, a:line) - let indxLeftAlt = s:FindDelimiterIndex(a:leftAlt, a:line) - let indxRight = s:LastIndexOfDelim(a:right, a:line) - let indxRightAlt = s:LastIndexOfDelim(a:rightAlt, a:line) - - "check if the line has a left delim before a leftAlt delim - if (indxLeft <= indxLeftAlt || indxLeftAlt == -1) && indxLeft != -1 - "check if the line has a right delim after any rightAlt delim - if (indxRight > indxRightAlt && indxRight > indxLeft) || !s:Multipart() - return 1 - endif - - "check if the line has a leftAlt delim before a left delim - elseif (indxLeftAlt <= indxLeft || indxLeft == -1) && indxLeftAlt != -1 - "check if the line has a rightAlt delim after any right delim - if (indxRightAlt > indxRight && indxRightAlt > indxLeftAlt) || !s:AltMultipart() - return 2 - endif - else - return 0 - endif - - return 0 - -endfunction - - -" Function: s:IsDelimValid(delimiter, delIndx, line) {{{2 -" This function is responsible for determining whether a given instance of a -" comment delimiter is a real delimiter or not. For example, in java the -" // string is a comment delimiter but in the line: -" System.out.println("//"); -" it does not count as a comment delimiter. This function is responsible for -" distinguishing between such cases. It does so by applying a set of -" heuristics that are not fool proof but should work most of the time. -" -" Args: -" -delimiter: the delimiter we are validating -" -delIndx: the position of delimiter in line -" -line: the line that delimiter occurs in -" -" Returns: -" 0 if the given delimiter is not a real delimiter (as far as we can tell) , -" 1 otherwise -function s:IsDelimValid(delimiter, delIndx, line) - "get the delimiter without the escchars - let l:delimiter = a:delimiter - - "get the strings before and after the delimiter - let preComStr = strpart(a:line, 0, a:delIndx) - let postComStr = strpart(a:line, a:delIndx+strlen(delimiter)) - - "to check if the delimiter is real, make sure it isnt preceded by - "an odd number of quotes and followed by the same (which would indicate - "that it is part of a string and therefore is not a comment) - if !s:IsNumEven(s:CountNonESCedOccurances(preComStr, '"', "\\")) && !s:IsNumEven(s:CountNonESCedOccurances(postComStr, '"', "\\")) - return 0 - endif - if !s:IsNumEven(s:CountNonESCedOccurances(preComStr, "'", "\\")) && !s:IsNumEven(s:CountNonESCedOccurances(postComStr, "'", "\\")) - return 0 - endif - if !s:IsNumEven(s:CountNonESCedOccurances(preComStr, "`", "\\")) && !s:IsNumEven(s:CountNonESCedOccurances(postComStr, "`", "\\")) - return 0 - endif - - - "if the comment delimiter is escaped, assume it isnt a real delimiter - if s:IsEscaped(a:line, a:delIndx, "\\") - return 0 - endif - - "vim comments are so fuckin stupid!! Why the hell do they have comment - "delimiters that are used elsewhere in the syntax?!?! We need to check - "some conditions especially for vim - if &filetype == "vim" - if !s:IsNumEven(s:CountNonESCedOccurances(preComStr, '"', "\\")) - return 0 - endif - - "if the delimiter is on the very first char of the line or is the - "first non-tab/space char on the line then it is a valid comment delimiter - if a:delIndx == 0 || a:line =~ "^[ \t]\\{" . a:delIndx . "\\}\".*$" - return 1 - endif - - let numLeftParen =s:CountNonESCedOccurances(preComStr, "(", "\\") - let numRightParen =s:CountNonESCedOccurances(preComStr, ")", "\\") - - "if the quote is inside brackets then assume it isnt a comment - if numLeftParen > numRightParen - return 0 - endif - - "if the line has an even num of unescaped "'s then we can assume that - "any given " is not a comment delimiter - if s:IsNumEven(s:CountNonESCedOccurances(a:line, "\"", "\\")) - return 0 - endif - endif - - return 1 - -endfunction - -" Function: s:IsNumEven(num) {{{2 -" A small function the returns 1 if the input number is even and 0 otherwise -" Args: -" -num: the number to check -function s:IsNumEven(num) - return (a:num % 2) == 0 -endfunction - -" Function: s:IsEscaped(str, indx, escChar) {{{2 -" This function takes a string, an index into that string and an esc char and -" returns 1 if the char at the index is escaped (i.e if it is preceded by an -" odd number of esc chars) -" Args: -" -str: the string to check -" -indx: the index into str that we want to check -" -escChar: the escape char the char at indx may be ESCed with -function s:IsEscaped(str, indx, escChar) - "initialise numEscChars to 0 and look at the char before indx - let numEscChars = 0 - let curIndx = a:indx-1 - - "keep going back thru str until we either reach the start of the str or - "run out of esc chars - while curIndx >= 0 && strpart(a:str, curIndx, 1) == a:escChar - - "we have found another esc char so add one to the count and move left - "one char - let numEscChars = numEscChars + 1 - let curIndx = curIndx - 1 - - endwhile - - "if there is an odd num of esc chars directly before the char at indx then - "the char at indx is escaped - return !s:IsNumEven(numEscChars) -endfunction - -" Function: s:IsInSexyComment(line) {{{2 -" returns 1 if the given line number is part of a sexy comment -function s:IsInSexyComment(line) - return !empty(s:FindBoundingLinesOfSexyCom(a:line)) -endfunction - -" Function: s:IsSexyComment(topline, bottomline) {{{2 -" This function takes in 2 line numbers and returns 1 if the lines between and -" including the given line numbers are a sexy comment. It returns 0 otherwise. -" Args: -" -topline: the line that the possible sexy comment starts on -" -bottomline: the line that the possible sexy comment stops on -function s:IsSexyComment(topline, bottomline) - - "get the delim set that would be used for a sexy comment - let left = '' - let right = '' - if s:Multipart() - let left = s:Left() - let right = s:Right() - elseif s:AltMultipart() - let left = s:Left({'alt': 1}) - let right = s:Right({'alt': 1}) - else - return 0 - endif - - "swap the top and bottom line numbers around if need be - let topline = a:topline - let bottomline = a:bottomline - if bottomline < topline - topline = bottomline - bottomline = a:topline - endif - - "if there is < 2 lines in the comment it cannot be sexy - if (bottomline - topline) <= 0 - return 0 - endif - - "if the top line doesnt begin with a left delim then the comment isnt sexy - if getline(a:topline) !~ '^[ \t]*' . left - return 0 - endif - - "if there is a right delim on the top line then this isnt a sexy comment - if s:FindDelimiterIndex(right, getline(a:topline)) != -1 - return 0 - endif - - "if there is a left delim on the bottom line then this isnt a sexy comment - if s:FindDelimiterIndex(left, getline(a:bottomline)) != -1 - return 0 - endif - - "if the bottom line doesnt begin with a right delim then the comment isnt - "sexy - if getline(a:bottomline) !~ '^.*' . right . '$' - return 0 - endif - - let sexyComMarker = s:GetSexyComMarker(0, 1) - - "check each of the intermediate lines to make sure they start with a - "sexyComMarker - let currentLine = a:topline+1 - while currentLine < a:bottomline - let theLine = getline(currentLine) - - if theLine !~ '^[ \t]*' . sexyComMarker - return 0 - endif - - "if there is a right delim in an intermediate line then the block isnt - "a sexy comment - if s:FindDelimiterIndex(right, theLine) != -1 - return 0 - endif - - let currentLine = currentLine + 1 - endwhile - - "we have not found anything to suggest that this isnt a sexy comment so - return 1 - -endfunction - -" Function: s:LastIndexOfDelim(delim, str) {{{2 -" This function takes a string and a delimiter and returns the last index of -" that delimiter in string -" Args: -" -delim: the delimiter to look for -" -str: the string to look for delim in -function s:LastIndexOfDelim(delim, str) - let delim = a:delim - let lenDelim = strlen(delim) - - "set index to the first occurrence of delim. If there is no occurrence then - "bail - let indx = s:FindDelimiterIndex(delim, a:str) - if indx == -1 - return -1 - endif - - "keep moving to the next instance of delim in str till there is none left - while 1 - - "search for the next delim after the previous one - let searchStr = strpart(a:str, indx+lenDelim) - let indx2 = s:FindDelimiterIndex(delim, searchStr) - - "if we find a delim update indx to record the position of it, if we - "dont find another delim then indx is the last one so break out of - "this loop - if indx2 != -1 - let indx = indx + indx2 + lenDelim - else - break - endif - endwhile - - return indx - -endfunction - -" Function: s:Left(...) {{{2 -" returns left delimiter data -function s:Left(...) - let params = a:0 ? a:1 : {} - - let delim = has_key(params, 'alt') ? b:NERDCommenterDelims['leftAlt'] : b:NERDCommenterDelims['left'] - - if delim == '' - return '' - endif - - if has_key(params, 'space') && g:NERDSpaceDelims - let delim = delim . s:spaceStr - endif - - if has_key(params, 'esc') - let delim = s:Esc(delim) - endif - - return delim -endfunction - -" Function: s:LeftMostIndx(countCommentedLines, countEmptyLines, topline, bottomline) {{{2 -" This function takes in 2 line numbers and returns the index of the left most -" char (that is not a space or a tab) on all of these lines. -" Args: -" -countCommentedLines: 1 if lines that are commented are to be checked as -" well. 0 otherwise -" -countEmptyLines: 1 if empty lines are to be counted in the search -" -topline: the top line to be checked -" -bottomline: the bottom line to be checked -function s:LeftMostIndx(countCommentedLines, countEmptyLines, topline, bottomline) - - " declare the left most index as an extreme value - let leftMostIndx = 1000 - - " go thru the block line by line updating leftMostIndx - let currentLine = a:topline - while currentLine <= a:bottomline - - " get the next line and if it is allowed to be commented, or is not - " commented, check it - let theLine = getline(currentLine) - if a:countEmptyLines || theLine !~ '^[ \t]*$' - if a:countCommentedLines || (!s:IsCommented(s:Left(), s:Right(), theLine) && !s:IsCommented(s:Left({'alt': 1}), s:Right({'alt': 1}), theLine)) - " convert spaces to tabs and get the number of leading spaces for - " this line and update leftMostIndx if need be - let theLine = s:ConvertLeadingTabsToSpaces(theLine) - let leadSpaceOfLine = strlen( substitute(theLine, '\(^[ \t]*\).*$','\1','') ) - if leadSpaceOfLine < leftMostIndx - let leftMostIndx = leadSpaceOfLine - endif - endif - endif - - " move on to the next line - let currentLine = currentLine + 1 - endwhile - - if leftMostIndx == 1000 - return 0 - else - return leftMostIndx - endif -endfunction - -" Function: s:Multipart() {{{2 -" returns 1 if the current delims are multipart -function s:Multipart() - return s:Right() != '' -endfunction - -" Function: s:NerdEcho(msg, typeOfMsg) {{{2 -" Args: -" -msg: the message to echo -" -typeOfMsg: 0 = warning message -" 1 = normal message -function s:NerdEcho(msg, typeOfMsg) - if a:typeOfMsg == 0 - echohl WarningMsg - echom 'NERDCommenter:' . a:msg - echohl None - elseif a:typeOfMsg == 1 - echom 'NERDCommenter:' . a:msg - endif -endfunction - -" Function: s:NumberOfLeadingTabs(s) {{{2 -" returns the number of leading tabs in the given string -function s:NumberOfLeadingTabs(s) - return strlen(substitute(a:s, '^\(\t*\).*$', '\1', "")) -endfunction - -" Function: s:NumLinesInBuf() {{{2 -" Returns the number of lines in the current buffer -function s:NumLinesInBuf() - return line('$') -endfunction - -" Function: s:ReplaceDelims(toReplace1, toReplace2, replacor1, replacor2, str) {{{2 -" This function takes in a string, 2 delimiters in that string and 2 strings -" to replace these delimiters with. -" -" Args: -" -toReplace1: the first delimiter to replace -" -toReplace2: the second delimiter to replace -" -replacor1: the string to replace toReplace1 with -" -replacor2: the string to replace toReplace2 with -" -str: the string that the delimiters to be replaced are in -function s:ReplaceDelims(toReplace1, toReplace2, replacor1, replacor2, str) - let line = s:ReplaceLeftMostDelim(a:toReplace1, a:replacor1, a:str) - let line = s:ReplaceRightMostDelim(a:toReplace2, a:replacor2, line) - return line -endfunction - -" Function: s:ReplaceLeftMostDelim(toReplace, replacor, str) {{{2 -" This function takes a string and a delimiter and replaces the left most -" occurrence of this delimiter in the string with a given string -" -" Args: -" -toReplace: the delimiter in str that is to be replaced -" -replacor: the string to replace toReplace with -" -str: the string that contains toReplace -function s:ReplaceLeftMostDelim(toReplace, replacor, str) - let toReplace = a:toReplace - let replacor = a:replacor - "get the left most occurrence of toReplace - let indxToReplace = s:FindDelimiterIndex(toReplace, a:str) - - "if there IS an occurrence of toReplace in str then replace it and return - "the resulting string - if indxToReplace != -1 - let line = strpart(a:str, 0, indxToReplace) . replacor . strpart(a:str, indxToReplace+strlen(toReplace)) - return line - endif - - return a:str -endfunction - -" Function: s:ReplaceRightMostDelim(toReplace, replacor, str) {{{2 -" This function takes a string and a delimiter and replaces the right most -" occurrence of this delimiter in the string with a given string -" -" Args: -" -toReplace: the delimiter in str that is to be replaced -" -replacor: the string to replace toReplace with -" -str: the string that contains toReplace -" -function s:ReplaceRightMostDelim(toReplace, replacor, str) - let toReplace = a:toReplace - let replacor = a:replacor - let lenToReplace = strlen(toReplace) - - "get the index of the last delim in str - let indxToReplace = s:LastIndexOfDelim(toReplace, a:str) - - "if there IS a delimiter in str, replace it and return the result - let line = a:str - if indxToReplace != -1 - let line = strpart(a:str, 0, indxToReplace) . replacor . strpart(a:str, indxToReplace+strlen(toReplace)) - endif - return line -endfunction - -"FUNCTION: s:RestoreScreenState() {{{2 -" -"Sets the screen state back to what it was when s:SaveScreenState was last -"called. -" -function s:RestoreScreenState() - if !exists("t:NERDComOldTopLine") || !exists("t:NERDComOldPos") - throw 'NERDCommenter exception: cannot restore screen' - endif - - call cursor(t:NERDComOldTopLine, 0) - normal! zt - call setpos(".", t:NERDComOldPos) -endfunction - -" Function: s:Right(...) {{{2 -" returns right delimiter data -function s:Right(...) - let params = a:0 ? a:1 : {} - - let delim = has_key(params, 'alt') ? b:NERDCommenterDelims['rightAlt'] : b:NERDCommenterDelims['right'] - - if delim == '' - return '' - endif - - if has_key(params, 'space') && g:NERDSpaceDelims - let delim = s:spaceStr . delim - endif - - if has_key(params, 'esc') - let delim = s:Esc(delim) - endif - - return delim -endfunction - -" Function: s:RightMostIndx(countCommentedLines, countEmptyLines, topline, bottomline) {{{2 -" This function takes in 2 line numbers and returns the index of the right most -" char on all of these lines. -" Args: -" -countCommentedLines: 1 if lines that are commented are to be checked as -" well. 0 otherwise -" -countEmptyLines: 1 if empty lines are to be counted in the search -" -topline: the top line to be checked -" -bottomline: the bottom line to be checked -function s:RightMostIndx(countCommentedLines, countEmptyLines, topline, bottomline) - let rightMostIndx = -1 - - " go thru the block line by line updating rightMostIndx - let currentLine = a:topline - while currentLine <= a:bottomline - - " get the next line and see if it is commentable, otherwise it doesnt - " count - let theLine = getline(currentLine) - if a:countEmptyLines || theLine !~ '^[ \t]*$' - - if a:countCommentedLines || (!s:IsCommented(s:Left(), s:Right(), theLine) && !s:IsCommented(s:Left({'alt': 1}), s:Right({'alt': 1}), theLine)) - - " update rightMostIndx if need be - let theLine = s:ConvertLeadingTabsToSpaces(theLine) - let lineLen = strlen(theLine) - if lineLen > rightMostIndx - let rightMostIndx = lineLen - endif - endif - endif - - " move on to the next line - let currentLine = currentLine + 1 - endwhile - - return rightMostIndx -endfunction - -"FUNCTION: s:SaveScreenState() {{{2 -"Saves the current cursor position in the current buffer and the window -"scroll position -function s:SaveScreenState() - let t:NERDComOldPos = getpos(".") - let t:NERDComOldTopLine = line("w0") -endfunction - -" Function: s:SwapOutterMultiPartDelimsForPlaceHolders(line) {{{2 -" This function takes a line and swaps the outter most multi-part delims for -" place holders -" Args: -" -line: the line to swap the delims in -" -function s:SwapOutterMultiPartDelimsForPlaceHolders(line) - " find out if the line is commented using normal delims and/or - " alternate ones - let isCommented = s:IsCommented(s:Left(), s:Right(), a:line) - let isCommentedAlt = s:IsCommented(s:Left({'alt': 1}), s:Right({'alt': 1}), a:line) - - let line2 = a:line - - "if the line is commented and there is a right delimiter, replace - "the delims with place-holders - if isCommented && s:Multipart() - let line2 = s:ReplaceDelims(s:Left(), s:Right(), g:NERDLPlace, g:NERDRPlace, a:line) - - "similarly if the line is commented with the alternative - "delimiters - elseif isCommentedAlt && s:AltMultipart() - let line2 = s:ReplaceDelims(s:Left({'alt': 1}), s:Right({'alt': 1}), g:NERDLPlace, g:NERDRPlace, a:line) - endif - - return line2 -endfunction - -" Function: s:SwapOutterPlaceHoldersForMultiPartDelims(line) {{{2 -" This function takes a line and swaps the outtermost place holders for -" multi-part delims -" Args: -" -line: the line to swap the delims in -" -function s:SwapOutterPlaceHoldersForMultiPartDelims(line) - let left = '' - let right = '' - if s:Multipart() - let left = s:Left() - let right = s:Right() - elseif s:AltMultipart() - let left = s:Left({'alt': 1}) - let right = s:Right({'alt': 1}) - endif - - let line = s:ReplaceDelims(g:NERDLPlace, g:NERDRPlace, left, right, a:line) - return line -endfunction -" Function: s:TabbedCol(line, col) {{{2 -" Gets the col number for given line and existing col number. The new col -" number is the col number when all leading spaces are converted to tabs -" Args: -" -line:the line to get the rel col for -" -col: the abs col -function s:TabbedCol(line, col) - let lineTruncated = strpart(a:line, 0, a:col) - let lineSpacesToTabs = substitute(lineTruncated, s:TabSpace(), '\t', 'g') - return strlen(lineSpacesToTabs) -endfunction -"FUNCTION: s:TabSpace() {{{2 -"returns a string of spaces equal in length to &tabstop -function s:TabSpace() - let tabSpace = "" - let spacesPerTab = &tabstop - while spacesPerTab > 0 - let tabSpace = tabSpace . " " - let spacesPerTab = spacesPerTab - 1 - endwhile - return tabSpace -endfunction - -" Function: s:UnEsc(str, escChar) {{{2 -" This function removes all the escape chars from a string -" Args: -" -str: the string to remove esc chars from -" -escChar: the escape char to be removed -function s:UnEsc(str, escChar) - return substitute(a:str, a:escChar, "", "g") -endfunction - -" Function: s:UntabbedCol(line, col) {{{2 -" Takes a line and a col and returns the absolute column of col taking into -" account that a tab is worth 3 or 4 (or whatever) spaces. -" Args: -" -line:the line to get the abs col for -" -col: the col that doesnt take into account tabs -function s:UntabbedCol(line, col) - let lineTruncated = strpart(a:line, 0, a:col) - let lineTabsToSpaces = substitute(lineTruncated, '\t', s:TabSpace(), 'g') - return strlen(lineTabsToSpaces) -endfunction -" Section: Comment mapping setup {{{1 -" =========================================================================== - -" switch to/from alternative delimiters -nnoremap NERDCommenterAltDelims :call SwitchToAlternativeDelimiters(1) - -" comment out lines -nnoremap NERDCommenterComment :call NERDComment(0, "norm") -vnoremap NERDCommenterComment :call NERDComment(1, "norm") - -" toggle comments -nnoremap NERDCommenterToggle :call NERDComment(0, "toggle") -vnoremap NERDCommenterToggle :call NERDComment(1, "toggle") - -" minimal comments -nnoremap NERDCommenterMinimal :call NERDComment(0, "minimal") -vnoremap NERDCommenterMinimal :call NERDComment(1, "minimal") - -" sexy comments -nnoremap NERDCommenterSexy :call NERDComment(0, "sexy") -vnoremap NERDCommenterSexy :call NERDComment(1, "sexy") - -" invert comments -nnoremap NERDCommenterInvert :call NERDComment(0, "invert") -vnoremap NERDCommenterInvert :call NERDComment(1, "invert") - -" yank then comment -nmap NERDCommenterYank :call NERDComment(0, "yank") -vmap NERDCommenterYank :call NERDComment(1, "yank") - -" left aligned comments -nnoremap NERDCommenterAlignLeft :call NERDComment(0, "alignLeft") -vnoremap NERDCommenterAlignLeft :call NERDComment(1, "alignLeft") - -" left and right aligned comments -nnoremap NERDCommenterAlignBoth :call NERDComment(0, "alignBoth") -vnoremap NERDCommenterAlignBoth :call NERDComment(1, "alignBoth") - -" nested comments -nnoremap NERDCommenterNest :call NERDComment(0, "nested") -vnoremap NERDCommenterNest :call NERDComment(1, "nested") - -" uncomment -nnoremap NERDCommenterUncomment :call NERDComment(0, "uncomment") -vnoremap NERDCommenterUncomment :call NERDComment(1, "uncomment") - -" comment till the end of the line -nnoremap NERDCommenterToEOL :call NERDComment(0, "toEOL") - -" append comments -nmap NERDCommenterAppend :call NERDComment(0, "append") - -" insert comments -inoremap NERDCommenterInInsert :call NERDComment(0, "insert") - - -function! s:CreateMaps(target, combo) - if !hasmapto(a:target, 'n') - exec 'nmap ' . a:combo . ' ' . a:target - endif - - if !hasmapto(a:target, 'v') - exec 'vmap ' . a:combo . ' ' . a:target - endif -endfunction - -if g:NERDCreateDefaultMappings - call s:CreateMaps('NERDCommenterComment', 'cc') - call s:CreateMaps('NERDCommenterToggle', 'c') - call s:CreateMaps('NERDCommenterMinimal', 'cm') - call s:CreateMaps('NERDCommenterSexy', 'cs') - call s:CreateMaps('NERDCommenterInvert', 'ci') - call s:CreateMaps('NERDCommenterYank', 'cy') - call s:CreateMaps('NERDCommenterAlignLeft', 'cl') - call s:CreateMaps('NERDCommenterAlignBoth', 'cb') - call s:CreateMaps('NERDCommenterNest', 'cn') - call s:CreateMaps('NERDCommenterUncomment', 'cu') - call s:CreateMaps('NERDCommenterToEOL', 'c$') - call s:CreateMaps('NERDCommenterAppend', 'cA') - - if !hasmapto('NERDCommenterAltDelims', 'n') - nmap ca NERDCommenterAltDelims - endif -endif - - - -" Section: Menu item setup {{{1 -" =========================================================================== -"check if the user wants the menu to be displayed -if g:NERDMenuMode != 0 - - let menuRoot = "" - if g:NERDMenuMode == 1 - let menuRoot = 'comment' - elseif g:NERDMenuMode == 2 - let menuRoot = '&comment' - elseif g:NERDMenuMode == 3 - let menuRoot = '&Plugin.&comment' - endif - - function! s:CreateMenuItems(target, desc, root) - exec 'nmenu ' . a:root . '.' . a:desc . ' ' . a:target - exec 'vmenu ' . a:root . '.' . a:desc . ' ' . a:target - endfunction - call s:CreateMenuItems("NERDCommenterComment", 'Comment', menuRoot) - call s:CreateMenuItems("NERDCommenterToggle", 'Toggle', menuRoot) - call s:CreateMenuItems('NERDCommenterMinimal', 'Minimal', menuRoot) - call s:CreateMenuItems('NERDCommenterNest', 'Nested', menuRoot) - exec 'nmenu '. menuRoot .'.To\ EOL NERDCommenterToEOL' - call s:CreateMenuItems('NERDCommenterInvert', 'Invert', menuRoot) - call s:CreateMenuItems('NERDCommenterSexy', 'Sexy', menuRoot) - call s:CreateMenuItems('NERDCommenterYank', 'Yank\ then\ comment', menuRoot) - exec 'nmenu '. menuRoot .'.Append NERDCommenterAppend' - exec 'menu '. menuRoot .'.-Sep- :' - call s:CreateMenuItems('NERDCommenterAlignLeft', 'Left\ aligned', menuRoot) - call s:CreateMenuItems('NERDCommenterAlignBoth', 'Left\ and\ right\ aligned', menuRoot) - exec 'menu '. menuRoot .'.-Sep2- :' - call s:CreateMenuItems('NERDCommenterUncomment', 'Uncomment', menuRoot) - exec 'nmenu '. menuRoot .'.Switch\ Delimiters NERDCommenterAltDelims' - exec 'imenu '. menuRoot .'.Insert\ Comment\ Here NERDCommenterInInsert' - exec 'menu '. menuRoot .'.-Sep3- :' - exec 'menu '. menuRoot .'.Help :help NERDCommenterContents' -endif -" vim: set foldmethod=marker : diff --git a/bundle/nerdtree/README.markdown b/bundle/nerdtree/README.markdown deleted file mode 100755 index 9dacf68..0000000 --- a/bundle/nerdtree/README.markdown +++ /dev/null @@ -1,111 +0,0 @@ -The NERD Tree -============= - -Intro ------ - -The NERD tree allows you to explore your filesystem and to open files and -directories. It presents the filesystem to you in the form of a tree which you -manipulate with the keyboard and/or mouse. It also allows you to perform -simple filesystem operations. - -The following features and functionality are provided by the NERD tree: - - * Files and directories are displayed in a hierarchical tree structure - * Different highlighting is provided for the following types of nodes: - * files - * directories - * sym-links - * windows .lnk files - * read-only files - * executable files - * Many (customisable) mappings are provided to manipulate the tree: - * Mappings to open/close/explore directory nodes - * Mappings to open files in new/existing windows/tabs - * Mappings to change the current root of the tree - * Mappings to navigate around the tree - * ... - * Directories and files can be bookmarked. - * Most NERD tree navigation can also be done with the mouse - * Filtering of tree content (can be toggled at runtime) - * custom file filters to prevent e.g. vim backup files being displayed - * optional displaying of hidden files (. files) - * files can be "turned off" so that only directories are displayed - * The position and size of the NERD tree window can be customised - * The order in which the nodes in the tree are listed can be customised. - * A model of your filesystem is created/maintained as you explore it. This - has several advantages: - * All filesystem information is cached and is only re-read on demand - * If you revisit a part of the tree that you left earlier in your - session, the directory nodes will be opened/closed as you left them - * The script remembers the cursor position and window position in the NERD - tree so you can toggle it off (or just close the tree window) and then - reopen it (with NERDTreeToggle) the NERD tree window will appear exactly - as you left it - * You can have a separate NERD tree for each tab, share trees across tabs, - or a mix of both. - * By default the script overrides the default file browser (netrw), so if - you :edit a directory a (slightly modified) NERD tree will appear in the - current window - * A programmable menu system is provided (simulates right clicking on a node) - * one default menu plugin is provided to perform basic filesystem - operations (create/delete/move/copy files/directories) - * There's an API for adding your own keymappings - -Installation ------------- - -[pathogen.vim](https://github.com/tpope/vim-pathogen) is the recommended way to install nerdtree. - - cd ~/.vim/bundle - git clone https://github.com/scrooloose/nerdtree.git - -Then reload vim, run `:Helptags`, and check out `:help NERD_tree.txt`. - - -Faq ---- - -__Q. Can I have the nerdtree on every tab automatically?__ - -A. Nope. If this is something you want then chances are you aren't using tabs - and buffers as they were intended to be used. Read this - http://stackoverflow.com/questions/102384/using-vims-tabs-like-buffers - - If you are interested in this behaviour then consider [vim-nerdtree-tabs](https://github.com/jistr/vim-nerdtree-tabs) - -__Q. How can I open a NERDTree automatically when vim starts up?__ - -A. Stick this in your vimrc: `autocmd vimenter * NERDTree` - -__Q. How can I open a NERDTree automatically when vim starts up if no files were specified?__ - -A. Stick this in your vimrc - - autocmd StdinReadPre * let s:std_in=1 - autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif - -__Q. How can I map a specific key or shortcut to open NERDTree?__ - -A. Stick this in your vimrc to open NERDTree with `Ctrl+n` (you can set whatever key you want): `map :NERDTreeToggle` - -__Q. How can I close vim if the only window left open is a NERDTree?__ - -A. Stick this in your vimrc: - - `autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif` - - -Changelog ---------- - -4.2.0 (2011-12-28) - - * Add NERDTreeDirArrows option to make the UI use pretty arrow chars instead of the old +~| chars to define the tree structure (sickill) - * shift the syntax highlighting out into its own syntax file (gnap) * add some mac specific options to the filesystem menu - for macvim only (andersonfreitas) - * Add NERDTreeMinimalUI option to remove some non functional parts of the nerdtree ui (camthompson) - * tweak the behaviour of :NERDTreeFind - see :help :NERDTreeFind for the new behaviour (benjamingeiger) - * if no name is given to :Bookmark, make it default to the name of the target file/dir (minyoung) - * use 'file' completion when doing copying, create, and move operations (EvanDotPro) - * lots of misc bug fixes (paddyoloughlin, sdewald, camthompson, Vitaly Bogdanov, AndrewRadev, mathias, scottstvnsn, kml, wycats, me RAWR!) - diff --git a/bundle/nerdtree/autoload/nerdtree.vim b/bundle/nerdtree/autoload/nerdtree.vim deleted file mode 100755 index d4128ef..0000000 --- a/bundle/nerdtree/autoload/nerdtree.vim +++ /dev/null @@ -1,407 +0,0 @@ -if exists("g:loaded_nerdtree_autoload") - finish -endif -let g:loaded_nerdtree_autoload = 1 - -function! nerdtree#version() - return '4.2.0' -endfunction - -" SECTION: General Functions {{{1 -"============================================================ - -"FUNCTION: nerdtree#checkForBrowse(dir) {{{2 -"inits a secondary nerd tree in the current buffer if appropriate -function! nerdtree#checkForBrowse(dir) - if a:dir != '' && isdirectory(a:dir) - call g:NERDTreeCreator.CreateSecondary(a:dir) - endif -endfunction - -" FUNCTION: nerdtree#completeBookmarks(A,L,P) {{{2 -" completion function for the bookmark commands -function! nerdtree#completeBookmarks(A,L,P) - return filter(g:NERDTreeBookmark.BookmarkNames(), 'v:val =~# "^' . a:A . '"') -endfunction - -"FUNCTION: nerdtree#compareBookmarks(dir) {{{2 -function! nerdtree#compareBookmarks(first, second) - return a:first.compareTo(a:second) -endfunction - -"FUNCTION: nerdtree#compareNodes(dir) {{{2 -function! nerdtree#compareNodes(n1, n2) - return a:n1.path.compareTo(a:n2.path) -endfunction - -" FUNCTION: nerdtree#deprecated(func, [msg]) {{{2 -" Issue a deprecation warning for a:func. If a second arg is given, use this -" as the deprecation message -function! nerdtree#deprecated(func, ...) - let msg = a:0 ? a:func . ' ' . a:1 : a:func . ' is deprecated' - - if !exists('s:deprecationWarnings') - let s:deprecationWarnings = {} - endif - if !has_key(s:deprecationWarnings, a:func) - let s:deprecationWarnings[a:func] = 1 - echomsg msg - endif -endfunction - -" FUNCTION: nerdtree#exec(cmd) {{{2 -" same as :exec cmd but eventignore=all is set for the duration -function! nerdtree#exec(cmd) - let old_ei = &ei - set ei=all - exec a:cmd - let &ei = old_ei -endfunction - -" FUNCTION: nerdtree#has_opt(options, name) {{{2 -function! nerdtree#has_opt(options, name) - return has_key(a:options, a:name) && a:options[a:name] == 1 -endfunction - -" FUNCTION: nerdtree#loadClassFiles() {{{2 -function! nerdtree#loadClassFiles() - runtime lib/nerdtree/path.vim - runtime lib/nerdtree/menu_controller.vim - runtime lib/nerdtree/menu_item.vim - runtime lib/nerdtree/key_map.vim - runtime lib/nerdtree/bookmark.vim - runtime lib/nerdtree/tree_file_node.vim - runtime lib/nerdtree/tree_dir_node.vim - runtime lib/nerdtree/opener.vim - runtime lib/nerdtree/creator.vim - runtime lib/nerdtree/flag_set.vim - runtime lib/nerdtree/nerdtree.vim - runtime lib/nerdtree/ui.vim - runtime lib/nerdtree/event.vim - runtime lib/nerdtree/notifier.vim -endfunction - -" FUNCTION: nerdtree#postSourceActions() {{{2 -function! nerdtree#postSourceActions() - call g:NERDTreeBookmark.CacheBookmarks(1) - call nerdtree#ui_glue#createDefaultBindings() - - "load all nerdtree plugins - runtime! nerdtree_plugin/**/*.vim -endfunction - -"FUNCTION: nerdtree#runningWindows(dir) {{{2 -function! nerdtree#runningWindows() - return has("win16") || has("win32") || has("win64") -endfunction - -"FUNCTION: nerdtree#treeMarkupReg(dir) {{{2 -function! nerdtree#treeMarkupReg() - if g:NERDTreeDirArrows - return '^\([▾▸] \| \+[▾▸] \| \+\)' - endif - - return '^[ `|]*[\-+~]' -endfunction - -"FUNCTION: nerdtree#treeUpDirLine(dir) {{{2 -function! nerdtree#treeUpDirLine() - return '.. (up a dir)' -endfunction - -"FUNCTION: nerdtree#treeWid(dir) {{{2 -function! nerdtree#treeWid() - return 2 -endfunction - -" SECTION: View Functions {{{1 -"============================================================ - -"FUNCTION: nerdtree#closeTree() {{{2 -"Closes the primary NERD tree window for this tab -function! nerdtree#closeTree() - if !nerdtree#isTreeOpen() - throw "NERDTree.NoTreeFoundError: no NERDTree is open" - endif - - if winnr("$") != 1 - if winnr() == nerdtree#getTreeWinNum() - call nerdtree#exec("wincmd p") - let bufnr = bufnr("") - call nerdtree#exec("wincmd p") - else - let bufnr = bufnr("") - endif - - call nerdtree#exec(nerdtree#getTreeWinNum() . " wincmd w") - close - call nerdtree#exec(bufwinnr(bufnr) . " wincmd w") - else - close - endif -endfunction - -"FUNCTION: nerdtree#closeTreeIfOpen() {{{2 -"Closes the NERD tree window if it is open -function! nerdtree#closeTreeIfOpen() - if nerdtree#isTreeOpen() - call nerdtree#closeTree() - endif -endfunction - -"FUNCTION: nerdtree#closeTreeIfQuitOnOpen() {{{2 -"Closes the NERD tree window if the close on open option is set -function! nerdtree#closeTreeIfQuitOnOpen() - if g:NERDTreeQuitOnOpen && nerdtree#isTreeOpen() - call nerdtree#closeTree() - endif -endfunction - -"FUNCTION: nerdtree#dumpHelp {{{2 -"prints out the quick help -function! nerdtree#dumpHelp() - let old_h = @h - if b:treeShowHelp ==# 1 - let @h= "\" NERD tree (" . nerdtree#version() . ") quickhelp~\n" - let @h=@h."\" ============================\n" - let @h=@h."\" File node mappings~\n" - let @h=@h."\" ". (g:NERDTreeMouseMode ==# 3 ? "single" : "double") ."-click,\n" - let @h=@h."\" ,\n" - if b:NERDTreeType ==# "primary" - let @h=@h."\" ". g:NERDTreeMapActivateNode .": open in prev window\n" - else - let @h=@h."\" ". g:NERDTreeMapActivateNode .": open in current window\n" - endif - if b:NERDTreeType ==# "primary" - let @h=@h."\" ". g:NERDTreeMapPreview .": preview\n" - endif - let @h=@h."\" ". g:NERDTreeMapOpenInTab.": open in new tab\n" - let @h=@h."\" ". g:NERDTreeMapOpenInTabSilent .": open in new tab silently\n" - let @h=@h."\" middle-click,\n" - let @h=@h."\" ". g:NERDTreeMapOpenSplit .": open split\n" - let @h=@h."\" ". g:NERDTreeMapPreviewSplit .": preview split\n" - let @h=@h."\" ". g:NERDTreeMapOpenVSplit .": open vsplit\n" - let @h=@h."\" ". g:NERDTreeMapPreviewVSplit .": preview vsplit\n" - - let @h=@h."\"\n\" ----------------------------\n" - let @h=@h."\" Directory node mappings~\n" - let @h=@h."\" ". (g:NERDTreeMouseMode ==# 1 ? "double" : "single") ."-click,\n" - let @h=@h."\" ". g:NERDTreeMapActivateNode .": open & close node\n" - let @h=@h."\" ". g:NERDTreeMapOpenRecursively .": recursively open node\n" - let @h=@h."\" ". g:NERDTreeMapCloseDir .": close parent of node\n" - let @h=@h."\" ". g:NERDTreeMapCloseChildren .": close all child nodes of\n" - let @h=@h."\" current node recursively\n" - let @h=@h."\" middle-click,\n" - let @h=@h."\" ". g:NERDTreeMapOpenExpl.": explore selected dir\n" - - let @h=@h."\"\n\" ----------------------------\n" - let @h=@h."\" Bookmark table mappings~\n" - let @h=@h."\" double-click,\n" - let @h=@h."\" ". g:NERDTreeMapActivateNode .": open bookmark\n" - let @h=@h."\" ". g:NERDTreeMapOpenInTab.": open in new tab\n" - let @h=@h."\" ". g:NERDTreeMapOpenInTabSilent .": open in new tab silently\n" - let @h=@h."\" ". g:NERDTreeMapDeleteBookmark .": delete bookmark\n" - - let @h=@h."\"\n\" ----------------------------\n" - let @h=@h."\" Tree navigation mappings~\n" - let @h=@h."\" ". g:NERDTreeMapJumpRoot .": go to root\n" - let @h=@h."\" ". g:NERDTreeMapJumpParent .": go to parent\n" - let @h=@h."\" ". g:NERDTreeMapJumpFirstChild .": go to first child\n" - let @h=@h."\" ". g:NERDTreeMapJumpLastChild .": go to last child\n" - let @h=@h."\" ". g:NERDTreeMapJumpNextSibling .": go to next sibling\n" - let @h=@h."\" ". g:NERDTreeMapJumpPrevSibling .": go to prev sibling\n" - - let @h=@h."\"\n\" ----------------------------\n" - let @h=@h."\" Filesystem mappings~\n" - let @h=@h."\" ". g:NERDTreeMapChangeRoot .": change tree root to the\n" - let @h=@h."\" selected dir\n" - let @h=@h."\" ". g:NERDTreeMapUpdir .": move tree root up a dir\n" - let @h=@h."\" ". g:NERDTreeMapUpdirKeepOpen .": move tree root up a dir\n" - let @h=@h."\" but leave old root open\n" - let @h=@h."\" ". g:NERDTreeMapRefresh .": refresh cursor dir\n" - let @h=@h."\" ". g:NERDTreeMapRefreshRoot .": refresh current root\n" - let @h=@h."\" ". g:NERDTreeMapMenu .": Show menu\n" - let @h=@h."\" ". g:NERDTreeMapChdir .":change the CWD to the\n" - let @h=@h."\" selected dir\n" - let @h=@h."\" ". g:NERDTreeMapCWD .":change tree root to CWD\n" - - let @h=@h."\"\n\" ----------------------------\n" - let @h=@h."\" Tree filtering mappings~\n" - let @h=@h."\" ". g:NERDTreeMapToggleHidden .": hidden files (" . (b:NERDTreeShowHidden ? "on" : "off") . ")\n" - let @h=@h."\" ". g:NERDTreeMapToggleFilters .": file filters (" . (b:NERDTreeIgnoreEnabled ? "on" : "off") . ")\n" - let @h=@h."\" ". g:NERDTreeMapToggleFiles .": files (" . (b:NERDTreeShowFiles ? "on" : "off") . ")\n" - let @h=@h."\" ". g:NERDTreeMapToggleBookmarks .": bookmarks (" . (b:NERDTreeShowBookmarks ? "on" : "off") . ")\n" - - "add quickhelp entries for each custom key map - let @h=@h."\"\n\" ----------------------------\n" - let @h=@h."\" Custom mappings~\n" - for i in g:NERDTreeKeyMap.All() - if !empty(i.quickhelpText) - let @h=@h."\" ". i.key .": ". i.quickhelpText ."\n" - endif - endfor - - let @h=@h."\"\n\" ----------------------------\n" - let @h=@h."\" Other mappings~\n" - let @h=@h."\" ". g:NERDTreeMapQuit .": Close the NERDTree window\n" - let @h=@h."\" ". g:NERDTreeMapToggleZoom .": Zoom (maximize-minimize)\n" - let @h=@h."\" the NERDTree window\n" - let @h=@h."\" ". g:NERDTreeMapHelp .": toggle help\n" - let @h=@h."\"\n\" ----------------------------\n" - let @h=@h."\" Bookmark commands~\n" - let @h=@h."\" :Bookmark []\n" - let @h=@h."\" :BookmarkToRoot \n" - let @h=@h."\" :RevealBookmark \n" - let @h=@h."\" :OpenBookmark \n" - let @h=@h."\" :ClearBookmarks []\n" - let @h=@h."\" :ClearAllBookmarks\n" - silent! put h - elseif g:NERDTreeMinimalUI == 0 - let @h="\" Press ". g:NERDTreeMapHelp ." for help\n" - silent! put h - endif - - let @h = old_h -endfunction - -"FUNCTION: nerdtree#echo {{{2 -"A wrapper for :echo. Appends 'NERDTree:' on the front of all messages -" -"Args: -"msg: the message to echo -function! nerdtree#echo(msg) - redraw - echomsg "NERDTree: " . a:msg -endfunction - -"FUNCTION: nerdtree#echoError {{{2 -"Wrapper for nerdtree#echo, sets the message type to errormsg for this message -"Args: -"msg: the message to echo -function! nerdtree#echoError(msg) - echohl errormsg - call nerdtree#echo(a:msg) - echohl normal -endfunction - -"FUNCTION: nerdtree#echoWarning {{{2 -"Wrapper for nerdtree#echo, sets the message type to warningmsg for this message -"Args: -"msg: the message to echo -function! nerdtree#echoWarning(msg) - echohl warningmsg - call nerdtree#echo(a:msg) - echohl normal -endfunction - -"FUNCTION: nerdtree#getTreeWinNum() {{{2 -"gets the nerd tree window number for this tab -function! nerdtree#getTreeWinNum() - if exists("t:NERDTreeBufName") - return bufwinnr(t:NERDTreeBufName) - else - return -1 - endif -endfunction - -"FUNCTION: nerdtree#isTreeOpen() {{{2 -function! nerdtree#isTreeOpen() - return nerdtree#getTreeWinNum() != -1 -endfunction - -"FUNCTION: nerdtree#putCursorOnBookmarkTable(){{{2 -"Places the cursor at the top of the bookmarks table -function! nerdtree#putCursorOnBookmarkTable() - if !b:NERDTreeShowBookmarks - throw "NERDTree.IllegalOperationError: cant find bookmark table, bookmarks arent active" - endif - - if g:NERDTreeMinimalUI - return cursor(1, 2) - endif - - let rootNodeLine = b:NERDTree.ui.getRootLineNum() - - let line = 1 - while getline(line) !~# '^>-\+Bookmarks-\+$' - let line = line + 1 - if line >= rootNodeLine - throw "NERDTree.BookmarkTableNotFoundError: didnt find the bookmarks table" - endif - endwhile - call cursor(line, 2) -endfunction - -"FUNCTION: nerdtree#putCursorInTreeWin(){{{2 -"Places the cursor in the nerd tree window -function! nerdtree#putCursorInTreeWin() - if !nerdtree#isTreeOpen() - throw "NERDTree.InvalidOperationError: cant put cursor in NERD tree window, no window exists" - endif - - call nerdtree#exec(nerdtree#getTreeWinNum() . "wincmd w") -endfunction - -"FUNCTION: nerdtree#renderBookmarks {{{2 -function! nerdtree#renderBookmarks() - - if g:NERDTreeMinimalUI == 0 - call setline(line(".")+1, ">----------Bookmarks----------") - call cursor(line(".")+1, col(".")) - endif - - for i in g:NERDTreeBookmark.Bookmarks() - call setline(line(".")+1, i.str()) - call cursor(line(".")+1, col(".")) - endfor - - call setline(line(".")+1, '') - call cursor(line(".")+1, col(".")) -endfunction - -"FUNCTION: nerdtree#renderView {{{2 -function! nerdtree#renderView() - call b:NERDTree.render() -endfunction -" -"FUNCTION: nerdtree#stripMarkupFromLine(line, removeLeadingSpaces){{{2 -"returns the given line with all the tree parts stripped off -" -"Args: -"line: the subject line -"removeLeadingSpaces: 1 if leading spaces are to be removed (leading spaces = -"any spaces before the actual text of the node) -function! nerdtree#stripMarkupFromLine(line, removeLeadingSpaces) - let line = a:line - "remove the tree parts and the leading space - let line = substitute (line, nerdtree#treeMarkupReg(),"","") - - "strip off any read only flag - let line = substitute (line, ' \[RO\]', "","") - - "strip off any bookmark flags - let line = substitute (line, ' {[^}]*}', "","") - - "strip off any executable flags - let line = substitute (line, '*\ze\($\| \)', "","") - - "strip off any generic flags - let line = substitute (line, '\[[^]]*\]', "","") - - let wasdir = 0 - if line =~# '/$' - let wasdir = 1 - endif - let line = substitute (line,' -> .*',"","") " remove link to - if wasdir ==# 1 - let line = substitute (line, '/\?$', '/', "") - endif - - if a:removeLeadingSpaces - let line = substitute (line, '^ *', '', '') - endif - - return line -endfunction - -" vim: set sw=4 sts=4 et fdm=marker: diff --git a/bundle/nerdtree/autoload/nerdtree/ui_glue.vim b/bundle/nerdtree/autoload/nerdtree/ui_glue.vim deleted file mode 100755 index 8607389..0000000 --- a/bundle/nerdtree/autoload/nerdtree/ui_glue.vim +++ /dev/null @@ -1,644 +0,0 @@ -if exists("g:loaded_nerdtree_ui_glue_autoload") - finish -endif -let g:loaded_nerdtree_ui_glue_autoload = 1 - -" FUNCTION: nerdtree#ui_glue#createDefaultBindings() {{{1 -function! nerdtree#ui_glue#createDefaultBindings() - let s = '' . s:SID() . '_' - - call NERDTreeAddKeyMap({ 'key': '', 'scope': "all", 'callback': s."handleMiddleMouse" }) - call NERDTreeAddKeyMap({ 'key': '', 'scope': "all", 'callback': s."handleLeftClick" }) - call NERDTreeAddKeyMap({ 'key': '<2-LeftMouse>', 'scope': "DirNode", 'callback': s."activateDirNode" }) - call NERDTreeAddKeyMap({ 'key': '<2-LeftMouse>', 'scope': "FileNode", 'callback': s."activateFileNode" }) - call NERDTreeAddKeyMap({ 'key': '<2-LeftMouse>', 'scope': "Bookmark", 'callback': s."activateBookmark" }) - call NERDTreeAddKeyMap({ 'key': '<2-LeftMouse>', 'scope': "all", 'callback': s."activateAll" }) - - - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapActivateNode, 'scope': "DirNode", 'callback': s."activateDirNode" }) - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapActivateNode, 'scope': "FileNode", 'callback': s."activateFileNode" }) - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapActivateNode, 'scope': "Bookmark", 'callback': s."activateBookmark" }) - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapActivateNode, 'scope': "all", 'callback': s."activateAll" }) - - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenSplit, 'scope': "Node", 'callback': s."openHSplit" }) - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenVSplit, 'scope': "Node", 'callback': s."openVSplit" }) - - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenSplit, 'scope': "Bookmark", 'callback': s."openHSplit" }) - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenVSplit, 'scope': "Bookmark", 'callback': s."openVSplit" }) - - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapPreview, 'scope': "Node", 'callback': s."previewNodeCurrent" }) - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapPreviewVSplit, 'scope': "Node", 'callback': s."previewNodeVSplit" }) - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapPreviewSplit, 'scope': "Node", 'callback': s."previewNodeHSplit" }) - - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapPreview, 'scope': "Bookmark", 'callback': s."previewNodeCurrent" }) - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapPreviewVSplit, 'scope': "Bookmark", 'callback': s."previewNodeVSplit" }) - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapPreviewSplit, 'scope': "Bookmark", 'callback': s."previewNodeHSplit" }) - - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenRecursively, 'scope': "DirNode", 'callback': s."openNodeRecursively" }) - - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapUpdir, 'scope': "all", 'callback': s."upDirCurrentRootClosed" }) - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapUpdirKeepOpen, 'scope': "all", 'callback': s."upDirCurrentRootOpen" }) - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapChangeRoot, 'scope': "Node", 'callback': s."chRoot" }) - - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapChdir, 'scope': "Node", 'callback': s."chCwd" }) - - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapQuit, 'scope': "all", 'callback': s."closeTreeWindow" }) - - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapCWD, 'scope': "all", 'callback': "nerdtree#ui_glue#chRootCwd" }) - - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapRefreshRoot, 'scope': "all", 'callback': s."refreshRoot" }) - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapRefresh, 'scope': "Node", 'callback': s."refreshCurrent" }) - - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapHelp, 'scope': "all", 'callback': s."displayHelp" }) - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapToggleZoom, 'scope': "all", 'callback': s."toggleZoom" }) - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapToggleHidden, 'scope': "all", 'callback': s."toggleShowHidden" }) - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapToggleFilters, 'scope': "all", 'callback': s."toggleIgnoreFilter" }) - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapToggleFiles, 'scope': "all", 'callback': s."toggleShowFiles" }) - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapToggleBookmarks, 'scope': "all", 'callback': s."toggleShowBookmarks" }) - - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapCloseDir, 'scope': "Node", 'callback': s."closeCurrentDir" }) - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapCloseChildren, 'scope': "DirNode", 'callback': s."closeChildren" }) - - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapMenu, 'scope': "Node", 'callback': s."showMenu" }) - - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapJumpParent, 'scope': "Node", 'callback': s."jumpToParent" }) - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapJumpFirstChild, 'scope': "Node", 'callback': s."jumpToFirstChild" }) - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapJumpLastChild, 'scope': "Node", 'callback': s."jumpToLastChild" }) - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapJumpRoot, 'scope': "all", 'callback': s."jumpToRoot" }) - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapJumpNextSibling, 'scope': "Node", 'callback': s."jumpToNextSibling" }) - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapJumpPrevSibling, 'scope': "Node", 'callback': s."jumpToPrevSibling" }) - - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenInTab, 'scope': "Node", 'callback': s."openInNewTab" }) - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenInTabSilent, 'scope': "Node", 'callback': s."openInNewTabSilent" }) - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenInTab, 'scope': "Bookmark", 'callback': s."openInNewTab" }) - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenInTabSilent, 'scope': "Bookmark", 'callback': s."openInNewTabSilent" }) - - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenExpl, 'scope': "DirNode", 'callback': s."openExplorer" }) - - call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapDeleteBookmark, 'scope': "Bookmark", 'callback': s."deleteBookmark" }) -endfunction - - -"SECTION: Interface bindings {{{1 -"============================================================ - -"FUNCTION: s:activateAll() {{{1 -"handle the user activating the updir line -function! s:activateAll() - if getline(".") ==# nerdtree#treeUpDirLine() - return nerdtree#ui_glue#upDir(0) - endif -endfunction - -"FUNCTION: s:activateDirNode() {{{1 -"handle the user activating a tree node -function! s:activateDirNode(node) - call a:node.activate({'reuse': 1}) -endfunction - -"FUNCTION: s:activateFileNode() {{{1 -"handle the user activating a tree node -function! s:activateFileNode(node) - call a:node.activate({'reuse': 1, 'where': 'p'}) -endfunction - -"FUNCTION: s:activateBookmark() {{{1 -"handle the user activating a bookmark -function! s:activateBookmark(bm) - call a:bm.activate(!a:bm.path.isDirectory ? {'where': 'p'} : {}) -endfunction - -" FUNCTION: nerdtree#ui_glue#bookmarkNode(name) {{{1 -" Associate the current node with the given name -function! nerdtree#ui_glue#bookmarkNode(...) - let currentNode = g:NERDTreeFileNode.GetSelected() - if currentNode != {} - let name = a:1 - if empty(name) - let name = currentNode.path.getLastPathComponent(0) - endif - try - call currentNode.bookmark(name) - call b:NERDTree.render() - catch /^NERDTree.IllegalBookmarkNameError/ - call nerdtree#echo("bookmark names must not contain spaces") - endtry - else - call nerdtree#echo("select a node first") - endif -endfunction - -" FUNCTION: s:chCwd(node) {{{1 -function! s:chCwd(node) - try - call a:node.path.changeToDir() - catch /^NERDTree.PathChangeError/ - call nerdtree#echoWarning("could not change cwd") - endtry -endfunction - -" FUNCTION: s:chRoot(node) {{{1 -" changes the current root to the selected one -function! s:chRoot(node) - call a:node.makeRoot() - call b:NERDTree.render() - call b:NERDTreeRoot.putCursorHere(0, 0) -endfunction - -" FUNCTION: s:nerdtree#ui_glue#chRootCwd() {{{1 -" changes the current root to CWD -function! nerdtree#ui_glue#chRootCwd() - try - let cwd = g:NERDTreePath.New(getcwd()) - catch /^NERDTree.InvalidArgumentsError/ - call nerdtree#echo("current directory does not exist.") - return - endtry - if cwd.str() == g:NERDTreeFileNode.GetRootForTab().path.str() - return - endif - call s:chRoot(g:NERDTreeDirNode.New(cwd)) -endfunction - -" FUNCTION: nnerdtree#ui_glue#clearBookmarks(bookmarks) {{{1 -function! nerdtree#ui_glue#clearBookmarks(bookmarks) - if a:bookmarks ==# '' - let currentNode = g:NERDTreeFileNode.GetSelected() - if currentNode != {} - call currentNode.clearBookmarks() - endif - else - for name in split(a:bookmarks, ' ') - let bookmark = g:NERDTreeBookmark.BookmarkFor(name) - call bookmark.delete() - endfor - endif - call b:NERDTree.render() -endfunction - -" FUNCTION: s:closeChildren(node) {{{1 -" closes all childnodes of the current node -function! s:closeChildren(node) - call a:node.closeChildren() - call b:NERDTree.render() - call a:node.putCursorHere(0, 0) -endfunction - -" FUNCTION: s:closeCurrentDir(node) {{{1 -" closes the parent dir of the current node -function! s:closeCurrentDir(node) - let parent = a:node.parent - if parent ==# {} || parent.isRoot() - call nerdtree#echo("cannot close tree root") - else - while g:NERDTreeCascadeOpenSingleChildDir && !parent.parent.isRoot() - if parent.parent.getVisibleChildCount() == 1 - call parent.close() - let parent = parent.parent - else - break - endif - endwhile - call parent.close() - call b:NERDTree.render() - call parent.putCursorHere(0, 0) - endif -endfunction - -" FUNCTION: s:closeTreeWindow() {{{1 -" close the tree window -function! s:closeTreeWindow() - if b:NERDTreeType ==# "secondary" && b:NERDTreePreviousBuf != -1 - exec "buffer " . b:NERDTreePreviousBuf - else - if winnr("$") > 1 - call nerdtree#closeTree() - else - call nerdtree#echo("Cannot close last window") - endif - endif -endfunction - -" FUNCTION: s:deleteBookmark(bm) {{{1 -" if the cursor is on a bookmark, prompt to delete -function! s:deleteBookmark(bm) - echo "Are you sure you wish to delete the bookmark:\n\"" . a:bm.name . "\" (yN):" - - if nr2char(getchar()) ==# 'y' - try - call a:bm.delete() - call b:NERDTree.render() - redraw - catch /^NERDTree/ - call nerdtree#echoWarning("Could not remove bookmark") - endtry - else - call nerdtree#echo("delete aborted" ) - endif - -endfunction - -" FUNCTION: s:displayHelp() {{{1 -" toggles the help display -function! s:displayHelp() - let b:treeShowHelp = b:treeShowHelp ? 0 : 1 - call b:NERDTree.render() - call b:NERDTree.ui.centerView() -endfunction - -" FUNCTION: s:findAndRevealPath() {{{1 -function! s:findAndRevealPath() - try - let p = g:NERDTreePath.New(expand("%:p")) - catch /^NERDTree.InvalidArgumentsError/ - call nerdtree#echo("no file for the current buffer") - return - endtry - - if p.isUnixHiddenPath() - let showhidden=g:NERDTreeShowHidden - let g:NERDTreeShowHidden = 1 - endif - - if !g:NERDTree.ExistsForTab() - try - let cwd = g:NERDTreePath.New(getcwd()) - catch /^NERDTree.InvalidArgumentsError/ - call nerdtree#echo("current directory does not exist.") - let cwd = p.getParent() - endtry - - if p.isUnder(cwd) - call g:NERDTreeCreator.CreatePrimary(cwd.str()) - else - call g:NERDTreeCreator.CreatePrimary(p.getParent().str()) - endif - else - if !p.isUnder(g:NERDTreeFileNode.GetRootForTab().path) - if !nerdtree#isTreeOpen() - call g:NERDTreeCreator.TogglePrimary('') - else - call nerdtree#putCursorInTreeWin() - endif - let b:NERDTreeShowHidden = g:NERDTreeShowHidden - call s:chRoot(g:NERDTreeDirNode.New(p.getParent())) - else - if !nerdtree#isTreeOpen() - call g:NERDTreeCreator.TogglePrimary("") - endif - endif - endif - call nerdtree#putCursorInTreeWin() - call b:NERDTreeRoot.reveal(p) - - if p.isUnixHiddenFile() - let g:NERDTreeShowHidden = showhidden - endif -endfunction - -"FUNCTION: s:handleLeftClick() {{{1 -"Checks if the click should open the current node -function! s:handleLeftClick() - let currentNode = g:NERDTreeFileNode.GetSelected() - if currentNode != {} - - "the dir arrows are multibyte chars, and vim's string functions only - "deal with single bytes - so split the line up with the hack below and - "take the line substring manually - let line = split(getline(line(".")), '\zs') - let startToCur = "" - for i in range(0,len(line)-1) - let startToCur .= line[i] - endfor - - if currentNode.path.isDirectory - if startToCur =~# nerdtree#treeMarkupReg() && startToCur =~# '[+~▾▸] \?$' - call currentNode.activate() - return - endif - endif - - if (g:NERDTreeMouseMode ==# 2 && currentNode.path.isDirectory) || g:NERDTreeMouseMode ==# 3 - let char = strpart(startToCur, strlen(startToCur)-1, 1) - if char !~# nerdtree#treeMarkupReg() - if currentNode.path.isDirectory - call currentNode.activate() - else - call currentNode.activate({'reuse': 1, 'where': 'p'}) - endif - return - endif - endif - endif -endfunction - -" FUNCTION: s:handleMiddleMouse() {{{1 -function! s:handleMiddleMouse() - let curNode = g:NERDTreeFileNode.GetSelected() - if curNode ==# {} - call nerdtree#echo("Put the cursor on a node first" ) - return - endif - - if curNode.path.isDirectory - call nerdtree#openExplorer(curNode) - else - call curNode.open({'where': 'h'}) - endif -endfunction - -" FUNCTION: s:jumpToChild(direction) {{{2 -" Args: -" direction: 0 if going to first child, 1 if going to last -function! s:jumpToChild(currentNode, direction) - if a:currentNode.isRoot() - return nerdtree#echo("cannot jump to " . (a:direction ? "last" : "first") . " child") - end - let dirNode = a:currentNode.parent - let childNodes = dirNode.getVisibleChildren() - - let targetNode = childNodes[0] - if a:direction - let targetNode = childNodes[len(childNodes) - 1] - endif - - if targetNode.equals(a:currentNode) - let siblingDir = a:currentNode.parent.findOpenDirSiblingWithVisibleChildren(a:direction) - if siblingDir != {} - let indx = a:direction ? siblingDir.getVisibleChildCount()-1 : 0 - let targetNode = siblingDir.getChildByIndex(indx, 1) - endif - endif - - call targetNode.putCursorHere(1, 0) - - call b:NERDTree.ui.centerView() -endfunction - - -" FUNCTION: nerdtree#ui_glue#invokeKeyMap(key) {{{1 -"this is needed since I cant figure out how to invoke dict functions from a -"key map -function! nerdtree#ui_glue#invokeKeyMap(key) - call g:NERDTreeKeyMap.Invoke(a:key) -endfunction - -" FUNCTION: s:jumpToFirstChild() {{{1 -" wrapper for the jump to child method -function! s:jumpToFirstChild(node) - call s:jumpToChild(a:node, 0) -endfunction - -" FUNCTION: s:jumpToLastChild() {{{1 -" wrapper for the jump to child method -function! s:jumpToLastChild(node) - call s:jumpToChild(a:node, 1) -endfunction - -" FUNCTION: s:jumpToParent(node) {{{1 -" moves the cursor to the parent of the current node -function! s:jumpToParent(node) - if !empty(a:node.parent) - call a:node.parent.putCursorHere(1, 0) - call b:NERDTree.ui.centerView() - else - call nerdtree#echo("cannot jump to parent") - endif -endfunction - -" FUNCTION: s:jumpToRoot() {{{1 -" moves the cursor to the root node -function! s:jumpToRoot() - call b:NERDTreeRoot.putCursorHere(1, 0) - call b:NERDTree.ui.centerView() -endfunction - -" FUNCTION: s:jumpToNextSibling(node) {{{1 -function! s:jumpToNextSibling(node) - call s:jumpToSibling(a:node, 1) -endfunction - -" FUNCTION: s:jumpToPrevSibling(node) {{{1 -function! s:jumpToPrevSibling(node) - call s:jumpToSibling(a:node, 0) -endfunction - -" FUNCTION: s:jumpToSibling(currentNode, forward) {{{2 -" moves the cursor to the sibling of the current node in the given direction -" -" Args: -" forward: 1 if the cursor should move to the next sibling, 0 if it should -" move back to the previous sibling -function! s:jumpToSibling(currentNode, forward) - let sibling = a:currentNode.findSibling(a:forward) - - if !empty(sibling) - call sibling.putCursorHere(1, 0) - call b:NERDTree.ui.centerView() - endif -endfunction - -" FUNCTION: nerdtree#ui_glue#openBookmark(name) {{{1 -" put the cursor on the given bookmark and, if its a file, open it -function! nerdtree#ui_glue#openBookmark(name) - try - let targetNode = g:NERDTreeBookmark.GetNodeForName(a:name, 0) - call targetNode.putCursorHere(0, 1) - redraw! - catch /^NERDTree.BookmarkedNodeNotFoundError/ - call nerdtree#echo("note - target node is not cached") - let bookmark = g:NERDTreeBookmark.BookmarkFor(a:name) - let targetNode = g:NERDTreeFileNode.New(bookmark.path) - endtry - if targetNode.path.isDirectory - call targetNode.openExplorer() - else - call targetNode.open({'where': 'p'}) - endif -endfunction - -" FUNCTION: s:openHSplit(target) {{{1 -function! s:openHSplit(target) - call a:target.activate({'where': 'h'}) -endfunction - -" FUNCTION: s:openVSplit(target) {{{1 -function! s:openVSplit(target) - call a:target.activate({'where': 'v'}) -endfunction - -" FUNCTION: s:openExplorer(node) {{{1 -function! s:openExplorer(node) - call a:node.openExplorer() -endfunction - -" FUNCTION: s:openInNewTab(target) {{{1 -function! s:openInNewTab(target) - call a:target.activate({'where': 't'}) -endfunction - -" FUNCTION: s:openInNewTabSilent(target) {{{1 -function! s:openInNewTabSilent(target) - call a:target.activate({'where': 't', 'stay': 1}) -endfunction - -" FUNCTION: s:openNodeRecursively(node) {{{1 -function! s:openNodeRecursively(node) - call nerdtree#echo("Recursively opening node. Please wait...") - call a:node.openRecursively() - call b:NERDTree.render() - redraw - call nerdtree#echo("Recursively opening node. Please wait... DONE") -endfunction - -"FUNCTION: s:previewNodeCurrent(node) {{{1 -function! s:previewNodeCurrent(node) - call a:node.open({'stay': 1, 'where': 'p', 'keepopen': 1}) -endfunction - -"FUNCTION: s:previewNodeHSplit(node) {{{1 -function! s:previewNodeHSplit(node) - call a:node.open({'stay': 1, 'where': 'h', 'keepopen': 1}) -endfunction - -"FUNCTION: s:previewNodeVSplit(node) {{{1 -function! s:previewNodeVSplit(node) - call a:node.open({'stay': 1, 'where': 'v', 'keepopen': 1}) -endfunction - -" FUNCTION: nerdtree#ui_glue#revealBookmark(name) {{{1 -" put the cursor on the node associate with the given name -function! nerdtree#ui_glue#revealBookmark(name) - try - let targetNode = g:NERDTreeBookmark.GetNodeForName(a:name, 0) - call targetNode.putCursorHere(0, 1) - catch /^NERDTree.BookmarkNotFoundError/ - call nerdtree#echo("Bookmark isnt cached under the current root") - endtry -endfunction - -" FUNCTION: s:refreshRoot() {{{1 -" Reloads the current root. All nodes below this will be lost and the root dir -" will be reloaded. -function! s:refreshRoot() - call nerdtree#echo("Refreshing the root node. This could take a while...") - call b:NERDTreeRoot.refresh() - call b:NERDTree.render() - redraw - call nerdtree#echo("Refreshing the root node. This could take a while... DONE") -endfunction - -" FUNCTION: s:refreshCurrent(node) {{{1 -" refreshes the root for the current node -function! s:refreshCurrent(node) - let node = a:node - if !node.path.isDirectory - let node = node.parent - endif - - call nerdtree#echo("Refreshing node. This could take a while...") - call node.refresh() - call b:NERDTree.render() - redraw - call nerdtree#echo("Refreshing node. This could take a while... DONE") -endfunction - -" FUNCTION: nerdtree#ui_glue#setupCommands() {{{1 -function! nerdtree#ui_glue#setupCommands() - command! -n=? -complete=dir -bar NERDTree :call g:NERDTreeCreator.CreatePrimary('') - command! -n=? -complete=dir -bar NERDTreeToggle :call g:NERDTreeCreator.TogglePrimary('') - command! -n=0 -bar NERDTreeClose :call nerdtree#closeTreeIfOpen() - command! -n=1 -complete=customlist,nerdtree#completeBookmarks -bar NERDTreeFromBookmark call g:NERDTreeCreator.CreatePrimary('') - command! -n=0 -bar NERDTreeMirror call g:NERDTreeCreator.CreateMirror() - command! -n=0 -bar NERDTreeFind call s:findAndRevealPath() - command! -n=0 -bar NERDTreeFocus call NERDTreeFocus() - command! -n=0 -bar NERDTreeCWD call NERDTreeCWD() -endfunction - -" Function: s:SID() {{{1 -function s:SID() - if !exists("s:sid") - let s:sid = matchstr(expand(''), '\zs\d\+\ze_SID$') - endif - return s:sid -endfun - -" FUNCTION: s:showMenu(node) {{{1 -function! s:showMenu(node) - let mc = g:NERDTreeMenuController.New(g:NERDTreeMenuItem.AllEnabled()) - call mc.showMenu() -endfunction - -" FUNCTION: s:toggleIgnoreFilter() {{{1 -function! s:toggleIgnoreFilter() - call b:NERDTree.ui.toggleIgnoreFilter() -endfunction - -" FUNCTION: s:toggleShowBookmarks() {{{1 -function! s:toggleShowBookmarks() - call b:NERDTree.ui.toggleShowBookmarks() -endfunction - -" FUNCTION: s:toggleShowFiles() {{{1 -function! s:toggleShowFiles() - call b:NERDTree.ui.toggleShowFiles() -endfunction - -" FUNCTION: s:toggleShowHidden() {{{1 -" toggles the display of hidden files -function! s:toggleShowHidden() - call b:NERDTree.ui.toggleShowHidden() -endfunction - -" FUNCTION: s:toggleZoom() {{{1 -function! s:toggleZoom() - call b:NERDTree.ui.toggleZoom() -endfunction - -"FUNCTION: nerdtree#ui_glue#upDir(keepState) {{{1 -"moves the tree up a level -" -"Args: -"keepState: 1 if the current root should be left open when the tree is -"re-rendered -function! nerdtree#ui_glue#upDir(keepState) - let cwd = b:NERDTreeRoot.path.str({'format': 'UI'}) - if cwd ==# "/" || cwd =~# '^[^/]..$' - call nerdtree#echo("already at top dir") - else - if !a:keepState - call b:NERDTreeRoot.close() - endif - - let oldRoot = b:NERDTreeRoot - - if empty(b:NERDTreeRoot.parent) - let path = b:NERDTreeRoot.path.getParent() - let newRoot = g:NERDTreeDirNode.New(path) - call newRoot.open() - call newRoot.transplantChild(b:NERDTreeRoot) - let b:NERDTreeRoot = newRoot - else - let b:NERDTreeRoot = b:NERDTreeRoot.parent - endif - - if g:NERDTreeChDirMode ==# 2 - call b:NERDTreeRoot.path.changeToDir() - endif - - call b:NERDTree.render() - call oldRoot.putCursorHere(0, 0) - endif -endfunction - -" FUNCTION: s:upDirCurrentRootOpen() {{{1 -function! s:upDirCurrentRootOpen() - call nerdtree#ui_glue#upDir(1) -endfunction - -" FUNCTION: s:upDirCurrentRootClosed() {{{1 -function! s:upDirCurrentRootClosed() - call nerdtree#ui_glue#upDir(0) -endfunction - -" vim: set sw=4 sts=4 et fdm=marker: diff --git a/bundle/nerdtree/doc/NERD_tree.txt b/bundle/nerdtree/doc/NERD_tree.txt deleted file mode 100755 index 5d5b3f6..0000000 --- a/bundle/nerdtree/doc/NERD_tree.txt +++ /dev/null @@ -1,1379 +0,0 @@ -*NERD_tree.txt* A tree explorer plugin that owns your momma! - - - - omg its ... ~ - - ________ ________ _ ____________ ____ __________ ____________~ - /_ __/ / / / ____/ / | / / ____/ __ \/ __ \ /_ __/ __ \/ ____/ ____/~ - / / / /_/ / __/ / |/ / __/ / /_/ / / / / / / / /_/ / __/ / __/ ~ - / / / __ / /___ / /| / /___/ _, _/ /_/ / / / / _, _/ /___/ /___ ~ - /_/ /_/ /_/_____/ /_/ |_/_____/_/ |_/_____/ /_/ /_/ |_/_____/_____/ ~ - - - Reference Manual~ - - - - -============================================================================== -CONTENTS *NERDTree-contents* - - 1.Intro...................................|NERDTree| - 2.Functionality provided..................|NERDTreeFunctionality| - 2.1.Global commands...................|NERDTreeGlobalCommands| - 2.2.Bookmarks.........................|NERDTreeBookmarks| - 2.2.1.The bookmark table..........|NERDTreeBookmarkTable| - 2.2.2.Bookmark commands...........|NERDTreeBookmarkCommands| - 2.2.3.Invalid bookmarks...........|NERDTreeInvalidBookmarks| - 2.3.NERD tree mappings................|NERDTreeMappings| - 2.4.The NERD tree menu................|NERDTreeMenu| - 3.Options.................................|NERDTreeOptions| - 3.1.Option summary....................|NERDTreeOptionSummary| - 3.2.Option details....................|NERDTreeOptionDetails| - 4.The NERD tree API.......................|NERDTreeAPI| - 4.1.Key map API.......................|NERDTreeKeymapAPI| - 4.2.Menu API..........................|NERDTreeMenuAPI| - 5.About...................................|NERDTreeAbout| - 6.Changelog...............................|NERDTreeChangelog| - 7.Credits.................................|NERDTreeCredits| - 8.License.................................|NERDTreeLicense| - -============================================================================== -1. Intro *NERDTree* - -What is this "NERD tree"?? - -The NERD tree allows you to explore your filesystem and to open files and -directories. It presents the filesystem to you in the form of a tree which you -manipulate with the keyboard and/or mouse. It also allows you to perform -simple filesystem operations. - -The following features and functionality are provided by the NERD tree: - * Files and directories are displayed in a hierarchical tree structure - * Different highlighting is provided for the following types of nodes: - * files - * directories - * sym-links - * windows .lnk files - * read-only files - * executable files - * Many (customisable) mappings are provided to manipulate the tree: - * Mappings to open/close/explore directory nodes - * Mappings to open files in new/existing windows/tabs - * Mappings to change the current root of the tree - * Mappings to navigate around the tree - * ... - * Directories and files can be bookmarked. - * Most NERD tree navigation can also be done with the mouse - * Filtering of tree content (can be toggled at runtime) - * custom file filters to prevent e.g. vim backup files being displayed - * optional displaying of hidden files (. files) - * files can be "turned off" so that only directories are displayed - * The position and size of the NERD tree window can be customised - * The order in which the nodes in the tree are listed can be customised. - * A model of your filesystem is created/maintained as you explore it. This - has several advantages: - * All filesystem information is cached and is only re-read on demand - * If you revisit a part of the tree that you left earlier in your - session, the directory nodes will be opened/closed as you left them - * The script remembers the cursor position and window position in the NERD - tree so you can toggle it off (or just close the tree window) and then - reopen it (with NERDTreeToggle) the NERD tree window will appear exactly - as you left it - * You can have a separate NERD tree for each tab, share trees across tabs, - or a mix of both. - * By default the script overrides the default file browser (netrw), so if - you :edit a directory a (slightly modified) NERD tree will appear in the - current window - * A programmable menu system is provided (simulates right clicking on a - node) - * one default menu plugin is provided to perform basic filesystem - operations (create/delete/move/copy files/directories) - * There's an API for adding your own keymappings - - -============================================================================== -2. Functionality provided *NERDTreeFunctionality* - ------------------------------------------------------------------------------- -2.1. Global Commands *NERDTreeGlobalCommands* - -:NERDTree [ | ] *:NERDTree* - Opens a fresh NERD tree. The root of the tree depends on the argument - given. There are 3 cases: If no argument is given, the current directory - will be used. If a directory is given, that will be used. If a bookmark - name is given, the corresponding directory will be used. For example: > - :NERDTree /home/marty/vim7/src - :NERDTree foo (foo is the name of a bookmark) -< -:NERDTreeFromBookmark *:NERDTreeFromBookmark* - Opens a fresh NERD tree with the root initialized to the dir for - . The only reason to use this command over :NERDTree is for - the completion (which is for bookmarks rather than directories). - -:NERDTreeToggle [ | ] *:NERDTreeToggle* - If a NERD tree already exists for this tab, it is reopened and rendered - again. If no NERD tree exists for this tab then this command acts the - same as the |:NERDTree| command. - -:NERDTreeMirror *:NERDTreeMirror* - Shares an existing NERD tree, from another tab, in the current tab. - Changes made to one tree are reflected in both as they are actually the - same buffer. - - If only one other NERD tree exists, that tree is automatically mirrored. If - more than one exists, the script will ask which tree to mirror. - -:NERDTreeClose *:NERDTreeClose* - Close the NERD tree in this tab. - -:NERDTreeFind *:NERDTreeFind* - Find the current file in the tree. - - If not tree exists and the current file is under vim's CWD, then init a - tree at the CWD and reveal the file. Otherwise init a tree in the current - file's directory. - - In any case, the current file is revealed and the cursor is placed on it. - -:NERDTreeCWD *:NERDTreeCWD* - Change tree root to current directory. If no NERD tree exists for this - tab, a new tree will be opened. - ------------------------------------------------------------------------------- -2.2. Bookmarks *NERDTreeBookmarks* - -Bookmarks in the NERD tree are a way to tag files or directories of interest. -For example, you could use bookmarks to tag all of your project directories. - ------------------------------------------------------------------------------- -2.2.1. The Bookmark Table *NERDTreeBookmarkTable* - -If the bookmark table is active (see |NERDTree-B| and -|'NERDTreeShowBookmarks'|), it will be rendered above the tree. You can double -click bookmarks or use the |NERDTree-o| mapping to activate them. See also, -|NERDTree-t| and |NERDTree-T| - ------------------------------------------------------------------------------- -2.2.2. Bookmark commands *NERDTreeBookmarkCommands* - -Note that the following commands are only available in the NERD tree buffer. - -:Bookmark [] - Bookmark the current node as . If there is already a - bookmark, it is overwritten. must not contain spaces. - If is not provided, it defaults to the file or directory name. - For directories, a trailing slash is present. - -:BookmarkToRoot - Make the directory corresponding to the new root. If a treenode - corresponding to is already cached somewhere in the tree then - the current tree will be used, otherwise a fresh tree will be opened. - Note that if points to a file then its parent will be used - instead. - -:RevealBookmark - If the node is cached under the current root then it will be revealed - (i.e. directory nodes above it will be opened) and the cursor will be - placed on it. - -:OpenBookmark - must point to a file. The file is opened as though |NERDTree-o| - was applied. If the node is cached under the current root then it will be - revealed and the cursor will be placed on it. - -:ClearBookmarks [] - Remove all the given bookmarks. If no bookmarks are given then remove all - bookmarks on the current node. - -:ClearAllBookmarks - Remove all bookmarks. - -:ReadBookmarks - Re-read the bookmarks in the |'NERDTreeBookmarksFile'|. - -See also |:NERDTree| and |:NERDTreeFromBookmark|. - ------------------------------------------------------------------------------- -2.2.3. Invalid Bookmarks *NERDTreeInvalidBookmarks* - -If invalid bookmarks are detected, the script will issue an error message and -the invalid bookmarks will become unavailable for use. - -These bookmarks will still be stored in the bookmarks file (see -|'NERDTreeBookmarksFile'|), down the bottom. There will always be a blank line -after the valid bookmarks but before the invalid ones. - -Each line in the bookmarks file represents one bookmark. The proper format is: - - -After you have corrected any invalid bookmarks, either restart vim, or go -:ReadBookmarks from the NERD tree window. - ------------------------------------------------------------------------------- -2.3. NERD tree Mappings *NERDTreeMappings* - -Default Description~ help-tag~ -Key~ - -o.......Open files, directories and bookmarks....................|NERDTree-o| -go......Open selected file, but leave cursor in the NERDTree.....|NERDTree-go| -t.......Open selected node/bookmark in a new tab.................|NERDTree-t| -T.......Same as 't' but keep the focus on the current tab........|NERDTree-T| -i.......Open selected file in a split window.....................|NERDTree-i| -gi......Same as i, but leave the cursor on the NERDTree..........|NERDTree-gi| -s.......Open selected file in a new vsplit.......................|NERDTree-s| -gs......Same as s, but leave the cursor on the NERDTree..........|NERDTree-gs| -O.......Recursively open the selected directory..................|NERDTree-O| -x.......Close the current nodes parent...........................|NERDTree-x| -X.......Recursively close all children of the current node.......|NERDTree-X| -e.......Edit the current dir.....................................|NERDTree-e| - -...............same as |NERDTree-o|. -double-click.......same as the |NERDTree-o| map. -middle-click.......same as |NERDTree-i| for files, same as - |NERDTree-e| for dirs. - -D.......Delete the current bookmark .............................|NERDTree-D| - -P.......Jump to the root node....................................|NERDTree-P| -p.......Jump to current nodes parent.............................|NERDTree-p| -K.......Jump up inside directories at the current tree depth.....|NERDTree-K| -J.......Jump down inside directories at the current tree depth...|NERDTree-J| -...Jump down to the next sibling of the current directory...|NERDTree-C-J| -...Jump up to the previous sibling of the current directory.|NERDTree-C-K| - -C.......Change the tree root to the selected dir.................|NERDTree-C| -u.......Move the tree root up one directory......................|NERDTree-u| -U.......Same as 'u' except the old root node is left open........|NERDTree-U| -r.......Recursively refresh the current directory................|NERDTree-r| -R.......Recursively refresh the current root.....................|NERDTree-R| -m.......Display the NERD tree menu...............................|NERDTree-m| -cd......Change the CWD to the dir of the selected node...........|NERDTree-cd| -CD......Change tree root to the CWD..............................|NERDTree-CD| - -I.......Toggle whether hidden files displayed....................|NERDTree-I| -f.......Toggle whether the file filters are used.................|NERDTree-f| -F.......Toggle whether files are displayed.......................|NERDTree-F| -B.......Toggle whether the bookmark table is displayed...........|NERDTree-B| - -q.......Close the NERDTree window................................|NERDTree-q| -A.......Zoom (maximize/minimize) the NERDTree window.............|NERDTree-A| -?.......Toggle the display of the quick help.....................|NERDTree-?| - ------------------------------------------------------------------------------- - *NERDTree-o* -Default key: o -Map option: NERDTreeMapActivateNode -Applies to: files and directories. - -If a file node is selected, it is opened in the previous window. - -If a directory is selected it is opened or closed depending on its current -state. - -If a bookmark that links to a directory is selected then that directory -becomes the new root. - -If a bookmark that links to a file is selected then that file is opened in the -previous window. - ------------------------------------------------------------------------------- - *NERDTree-go* -Default key: go -Map option: None -Applies to: files. - -If a file node is selected, it is opened in the previous window, but the -cursor does not move. - -The key combo for this mapping is always "g" + NERDTreeMapActivateNode (see -|NERDTree-o|). - ------------------------------------------------------------------------------- - *NERDTree-t* -Default key: t -Map option: NERDTreeMapOpenInTab -Applies to: files and directories. - -Opens the selected file in a new tab. If a directory is selected, a fresh -NERD Tree for that directory is opened in a new tab. - -If a bookmark which points to a directory is selected, open a NERD tree for -that directory in a new tab. If the bookmark points to a file, open that file -in a new tab. - ------------------------------------------------------------------------------- - *NERDTree-T* -Default key: T -Map option: NERDTreeMapOpenInTabSilent -Applies to: files and directories. - -The same as |NERDTree-t| except that the focus is kept in the current tab. - ------------------------------------------------------------------------------- - *NERDTree-i* -Default key: i -Map option: NERDTreeMapOpenSplit -Applies to: files. - -Opens the selected file in a new split window and puts the cursor in the new -window. - ------------------------------------------------------------------------------- - *NERDTree-gi* -Default key: gi -Map option: None -Applies to: files. - -The same as |NERDTree-i| except that the cursor is not moved. - -The key combo for this mapping is always "g" + NERDTreeMapOpenSplit (see -|NERDTree-i|). - ------------------------------------------------------------------------------- - *NERDTree-s* -Default key: s -Map option: NERDTreeMapOpenVSplit -Applies to: files. - -Opens the selected file in a new vertically split window and puts the cursor in -the new window. - ------------------------------------------------------------------------------- - *NERDTree-gs* -Default key: gs -Map option: None -Applies to: files. - -The same as |NERDTree-s| except that the cursor is not moved. - -The key combo for this mapping is always "g" + NERDTreeMapOpenVSplit (see -|NERDTree-s|). - ------------------------------------------------------------------------------- - *NERDTree-O* -Default key: O -Map option: NERDTreeMapOpenRecursively -Applies to: directories. - -Recursively opens the selected directory. - -All files and directories are cached, but if a directory would not be -displayed due to file filters (see |'NERDTreeIgnore'| |NERDTree-f|) or the -hidden file filter (see |'NERDTreeShowHidden'|) then its contents are not -cached. This is handy, especially if you have .svn directories. - ------------------------------------------------------------------------------- - *NERDTree-x* -Default key: x -Map option: NERDTreeMapCloseDir -Applies to: files and directories. - -Closes the parent of the selected node. - ------------------------------------------------------------------------------- - *NERDTree-X* -Default key: X -Map option: NERDTreeMapCloseChildren -Applies to: directories. - -Recursively closes all children of the selected directory. - -Tip: To quickly "reset" the tree, use |NERDTree-P| with this mapping. - ------------------------------------------------------------------------------- - *NERDTree-e* -Default key: e -Map option: NERDTreeMapOpenExpl -Applies to: files and directories. - -|:edit|s the selected directory, or the selected file's directory. This could -result in a NERD tree or a netrw being opened, depending on -|'NERDTreeHijackNetrw'|. - ------------------------------------------------------------------------------- - *NERDTree-D* -Default key: D -Map option: NERDTreeMapDeleteBookmark -Applies to: lines in the bookmarks table - -Deletes the currently selected bookmark. - ------------------------------------------------------------------------------- - *NERDTree-P* -Default key: P -Map option: NERDTreeMapJumpRoot -Applies to: no restrictions. - -Jump to the tree root. - ------------------------------------------------------------------------------- - *NERDTree-p* -Default key: p -Map option: NERDTreeMapJumpParent -Applies to: files and directories. - -Jump to the parent node of the selected node. - ------------------------------------------------------------------------------- - *NERDTree-K* -Default key: K -Map option: NERDTreeMapJumpFirstChild -Applies to: files and directories. - -Jump to the first child of the current nodes parent. - -If the cursor is already on the first node then do the following: - * loop back thru the siblings of the current nodes parent until we find an - open dir with children - * go to the first child of that node - ------------------------------------------------------------------------------- - *NERDTree-J* -Default key: J -Map option: NERDTreeMapJumpLastChild -Applies to: files and directories. - -Jump to the last child of the current nodes parent. - -If the cursor is already on the last node then do the following: - * loop forward thru the siblings of the current nodes parent until we find - an open dir with children - * go to the last child of that node - ------------------------------------------------------------------------------- - *NERDTree-C-J* -Default key: -Map option: NERDTreeMapJumpNextSibling -Applies to: files and directories. - -Jump to the next sibling of the selected node. - ------------------------------------------------------------------------------- - *NERDTree-C-K* -Default key: -Map option: NERDTreeMapJumpPrevSibling -Applies to: files and directories. - -Jump to the previous sibling of the selected node. - ------------------------------------------------------------------------------- - *NERDTree-C* -Default key: C -Map option: NERDTreeMapChangeRoot -Applies to: files and directories. - -Make the selected directory node the new tree root. If a file is selected, its -parent is used. - ------------------------------------------------------------------------------- - *NERDTree-u* -Default key: u -Map option: NERDTreeMapUpdir -Applies to: no restrictions. - -Move the tree root up a dir (like doing a "cd .."). - ------------------------------------------------------------------------------- - *NERDTree-U* -Default key: U -Map option: NERDTreeMapUpdirKeepOpen -Applies to: no restrictions. - -Like |NERDTree-u| except that the old tree root is kept open. - ------------------------------------------------------------------------------- - *NERDTree-r* -Default key: r -Map option: NERDTreeMapRefresh -Applies to: files and directories. - -If a dir is selected, recursively refresh that dir, i.e. scan the filesystem -for changes and represent them in the tree. - -If a file node is selected then the above is done on it's parent. - ------------------------------------------------------------------------------- - *NERDTree-R* -Default key: R -Map option: NERDTreeMapRefreshRoot -Applies to: no restrictions. - -Recursively refresh the tree root. - ------------------------------------------------------------------------------- - *NERDTree-m* -Default key: m -Map option: NERDTreeMapMenu -Applies to: files and directories. - -Display the NERD tree menu. See |NERDTreeMenu| for details. - ------------------------------------------------------------------------------- - *NERDTree-cd* -Default key: cd -Map option: NERDTreeMapChdir -Applies to: files and directories. - -Change vims current working directory to that of the selected node. - ------------------------------------------------------------------------------- - *NERDTree-CD* -Default key: CD -Map option: NERDTreeMapCWD -Applies to: no restrictions. - -Change tree root to vims current working directory. - ------------------------------------------------------------------------------- - *NERDTree-I* -Default key: I -Map option: NERDTreeMapToggleHidden -Applies to: no restrictions. - -Toggles whether hidden files (i.e. "dot files") are displayed. - ------------------------------------------------------------------------------- - *NERDTree-f* -Default key: f -Map option: NERDTreeMapToggleFilters -Applies to: no restrictions. - -Toggles whether file filters are used. See |'NERDTreeIgnore'| for details. - ------------------------------------------------------------------------------- - *NERDTree-F* -Default key: F -Map option: NERDTreeMapToggleFiles -Applies to: no restrictions. - -Toggles whether file nodes are displayed. - ------------------------------------------------------------------------------- - *NERDTree-B* -Default key: B -Map option: NERDTreeMapToggleBookmarks -Applies to: no restrictions. - -Toggles whether the bookmarks table is displayed. - ------------------------------------------------------------------------------- - *NERDTree-q* -Default key: q -Map option: NERDTreeMapQuit -Applies to: no restrictions. - -Closes the NERDtree window. - ------------------------------------------------------------------------------- - *NERDTree-A* -Default key: A -Map option: NERDTreeMapToggleZoom -Applies to: no restrictions. - -Maximize (zoom) and minimize the NERDtree window. - ------------------------------------------------------------------------------- - *NERDTree-?* -Default key: ? -Map option: NERDTreeMapHelp -Applies to: no restrictions. - -Toggles whether the quickhelp is displayed. - ------------------------------------------------------------------------------- -2.3. The NERD tree menu *NERDTreeMenu* - -The NERD tree has a menu that can be programmed via the an API (see -|NERDTreeMenuAPI|). The idea is to simulate the "right click" menus that most -file explorers have. - -The script comes with two default menu plugins: exec_menuitem.vim and -fs_menu.vim. fs_menu.vim adds some basic filesystem operations to the menu for -creating/deleting/moving/copying files and dirs. exec_menuitem.vim provides a -menu item to execute executable files. - -Related tags: |NERDTree-m| |NERDTreeApi| - -============================================================================== -3. Customisation *NERDTreeOptions* - - ------------------------------------------------------------------------------- -3.1. Customisation summary *NERDTreeOptionSummary* - -The script provides the following options that can customise the behaviour the -NERD tree. These options should be set in your vimrc. - -|'loaded_nerd_tree'| Turns off the script. - -|'NERDTreeAutoCenter'| Controls whether the NERD tree window centers - when the cursor moves within a specified - distance to the top/bottom of the window. - -|'NERDTreeAutoCenterThreshold'| Controls the sensitivity of autocentering. - -|'NERDTreeCaseSensitiveSort'| Tells the NERD tree whether to be case - sensitive or not when sorting nodes. - -|'NERDTreeSortHiddenFirst'| Tells the NERD tree whether to take the dot - at the beginning of the hidden file names - into account when sorting nodes. - -|'NERDTreeChDirMode'| Tells the NERD tree if/when it should change - vim's current working directory. - -|'NERDTreeHighlightCursorline'| Tell the NERD tree whether to highlight the - current cursor line. - -|'NERDTreeHijackNetrw'| Tell the NERD tree whether to replace the netrw - autocommands for exploring local directories. - -|'NERDTreeIgnore'| Tells the NERD tree which files to ignore. - -|'NERDTreeRespectWildIgnore'| Tells the NERD tree to respect |'wildignore'|. - -|'NERDTreeBookmarksFile'| Where the bookmarks are stored. - -|'NERDTreeBookmarksSort'| Whether the bookmarks list is sorted on - display. - -|'NERDTreeMouseMode'| Tells the NERD tree how to handle mouse - clicks. - -|'NERDTreeQuitOnOpen'| Closes the tree window after opening a file. - -|'NERDTreeShowBookmarks'| Tells the NERD tree whether to display the - bookmarks table on startup. - -|'NERDTreeShowFiles'| Tells the NERD tree whether to display files - in the tree on startup. - -|'NERDTreeShowHidden'| Tells the NERD tree whether to display hidden - files on startup. - -|'NERDTreeShowLineNumbers'| Tells the NERD tree whether to display line - numbers in the tree window. - -|'NERDTreeSortOrder'| Tell the NERD tree how to sort the nodes in - the tree. - -|'NERDTreeStatusline'| Set a statusline for NERD tree windows. - -|'NERDTreeWinPos'| Tells the script where to put the NERD tree - window. - -|'NERDTreeWinSize'| Sets the window size when the NERD tree is - opened. - -|'NERDTreeMinimalUI'| Disables display of the 'Bookmarks' label and - 'Press ? for help' text. - -|'NERDTreeDirArrows'| Tells the NERD tree to use arrows instead of - + ~ chars when displaying directories. - -|'NERDTreeCascadeOpenSingleChildDir'| - Cascade open while selected directory has only - one child that also is a directory. - -|'NERDTreeAutoDeleteBuffer'| Tells the NERD tree to automatically remove - a buffer when a file is being deleted or renamed - via a context menu command. - ------------------------------------------------------------------------------- -3.2. Customisation details *NERDTreeOptionDetails* - -To enable any of the below options you should put the given line in your -~/.vimrc - - *'loaded_nerd_tree'* -If this plugin is making you feel homicidal, it may be a good idea to turn it -off with this line in your vimrc: > - let loaded_nerd_tree=1 -< - ------------------------------------------------------------------------------- - *'NERDTreeAutoCenter'* -Values: 0 or 1. -Default: 1 - -If set to 1, the NERD tree window will center around the cursor if it moves to -within |'NERDTreeAutoCenterThreshold'| lines of the top/bottom of the window. - -This is ONLY done in response to tree navigation mappings, -i.e. |NERDTree-J| |NERDTree-K| |NERDTree-C-J| |NERDTree-C-K| |NERDTree-p| -|NERDTree-P| - -The centering is done with a |zz| operation. - ------------------------------------------------------------------------------- - *'NERDTreeAutoCenterThreshold'* -Values: Any natural number. -Default: 3 - -This option controls the "sensitivity" of the NERD tree auto centering. See -|'NERDTreeAutoCenter'| for details. - ------------------------------------------------------------------------------- - *'NERDTreeCaseSensitiveSort'* -Values: 0 or 1. -Default: 0. - -By default the NERD tree does not sort nodes case sensitively, i.e. nodes -could appear like this: > - bar.c - Baz.c - blarg.c - boner.c - Foo.c -< -But, if you set this option to 1 then the case of the nodes will be taken into -account. The above nodes would then be sorted like this: > - Baz.c - Foo.c - bar.c - blarg.c - boner.c -< ------------------------------------------------------------------------------- - *'NERDTreeChDirMode'* - -Values: 0, 1 or 2. -Default: 0. - -Use this option to tell the script when (if at all) to change the current -working directory (CWD) for vim. - -If it is set to 0 then the CWD is never changed by the NERD tree. - -If set to 1 then the CWD is changed when the NERD tree is first loaded to the -directory it is initialized in. For example, if you start the NERD tree with > - :NERDTree /home/marty/foobar -< -then the CWD will be changed to /home/marty/foobar and will not be changed -again unless you init another NERD tree with a similar command. - -If the option is set to 2 then it behaves the same as if set to 1 except that -the CWD is changed whenever the tree root is changed. For example, if the CWD -is /home/marty/foobar and you make the node for /home/marty/foobar/baz the new -root then the CWD will become /home/marty/foobar/baz. - ------------------------------------------------------------------------------- - *'NERDTreeHighlightCursorline'* -Values: 0 or 1. -Default: 1. - -If set to 1, the current cursor line in the NERD tree buffer will be -highlighted. This is done using the |'cursorline'| option. - ------------------------------------------------------------------------------- - *'NERDTreeHijackNetrw'* -Values: 0 or 1. -Default: 1. - -If set to 1, doing a > - :edit -< -will open up a "secondary" NERD tree instead of a netrw in the target window. - -Secondary NERD trees behaves slightly different from a regular trees in the -following respects: - 1. 'o' will open the selected file in the same window as the tree, - replacing it. - 2. you can have as many secondary tree as you want in the same tab. - ------------------------------------------------------------------------------- - *'NERDTreeIgnore'* -Values: a list of regular expressions. -Default: ['\~$']. - -This option is used to specify which files the NERD tree should ignore. It -must be a list of regular expressions. When the NERD tree is rendered, any -files/dirs that match any of the regex's in 'NERDTreeIgnore' wont be -displayed. - -For example if you put the following line in your vimrc: > - let NERDTreeIgnore=['\.vim$', '\~$'] -< -then all files ending in .vim or ~ will be ignored. - -There are 2 magic flags that can be appended to the end of each regular -expression to specify that the regex should match only files or only dirs. -These flags are "[[dir]]" and "[[file]]". Example: > - let NERDTreeIgnore=['.d$[[dir]]', '.o$[[file]]'] -< -This will cause all dirs ending in ".d" to be ignored and all files ending in -".o" to be ignored. - -Note: to tell the NERD tree not to ignore any files you must use the following -line: > - let NERDTreeIgnore=[] -< - -The file filters can be turned on and off dynamically with the |NERDTree-f| -mapping. - ------------------------------------------------------------------------------- - *'NERDTreeRespectWildIgnore'* -Values: 0 or 1. -Default: 0. - -If set to 1, the |'wildignore'| setting is respected. - ------------------------------------------------------------------------------- - *'NERDTreeBookmarksFile'* -Values: a path -Default: $HOME/.NERDTreeBookmarks - -This is where bookmarks are saved. See |NERDTreeBookmarkCommands|. - ------------------------------------------------------------------------------- - *'NERDTreeBookmarksSort'* -Values: 0 or 1 -Default: 1 - -If set to 0 then the bookmarks list is not sorted. -If set to 1 the bookmarks list is sorted. - ------------------------------------------------------------------------------- - *'NERDTreeMouseMode'* -Values: 1, 2 or 3. -Default: 1. - -If set to 1 then a double click on a node is required to open it. -If set to 2 then a single click will open directory nodes, while a double -click will still be required for file nodes. -If set to 3 then a single click will open any node. - -Note: a double click anywhere on a line that a tree node is on will -activate it, but all single-click activations must be done on name of the node -itself. For example, if you have the following node: > - | | |-application.rb -< -then (to single click activate it) you must click somewhere in -'application.rb'. - ------------------------------------------------------------------------------- - *'NERDTreeQuitOnOpen'* - -Values: 0 or 1. -Default: 0 - -If set to 1, the NERD tree window will close after opening a file with the -|NERDTree-o|, |NERDTree-i|, |NERDTree-t| and |NERDTree-T| mappings. - ------------------------------------------------------------------------------- - *'NERDTreeShowBookmarks'* -Values: 0 or 1. -Default: 0. - -If this option is set to 1 then the bookmarks table will be displayed. - -This option can be toggled dynamically, per tree, with the |NERDTree-B| -mapping. - ------------------------------------------------------------------------------- - *'NERDTreeShowFiles'* -Values: 0 or 1. -Default: 1. - -If this option is set to 1 then files are displayed in the NERD tree. If it is -set to 0 then only directories are displayed. - -This option can be toggled dynamically, per tree, with the |NERDTree-F| -mapping and is useful for drastically shrinking the tree when you are -navigating to a different part of the tree. - ------------------------------------------------------------------------------- - *'NERDTreeShowHidden'* -Values: 0 or 1. -Default: 0. - -This option tells vim whether to display hidden files by default. This option -can be dynamically toggled, per tree, with the |NERDTree-I| mapping. Use one -of the follow lines to set this option: > - let NERDTreeShowHidden=0 - let NERDTreeShowHidden=1 -< - ------------------------------------------------------------------------------- - *'NERDTreeShowLineNumbers'* -Values: 0 or 1. -Default: 0. - -This option tells vim whether to display line numbers for the NERD tree -window. Use one of the follow lines to set this option: > - let NERDTreeShowLineNumbers=0 - let NERDTreeShowLineNumbers=1 -< - ------------------------------------------------------------------------------- - *'NERDTreeSortOrder'* -Values: a list of regular expressions. -Default: ['\/$', '*', '\.swp$', '\.bak$', '\~$'] - -This option is set to a list of regular expressions which are used to -specify the order of nodes under their parent. - -For example, if the option is set to: > - ['\.vim$', '\.c$', '\.h$', '*', 'foobar'] -< -then all .vim files will be placed at the top, followed by all .c files then -all .h files. All files containing the string 'foobar' will be placed at the -end. The star is a special flag: it tells the script that every node that -doesnt match any of the other regexps should be placed here. - -If no star is present in 'NERDTreeSortOrder' then one is automatically -appended to the array. - -The regex '\/$' should be used to match directory nodes. - -After this sorting is done, the files in each group are sorted alphabetically. - -Other examples: > - (1) ['*', '\/$'] - (2) [] - (3) ['\/$', '\.rb$', '\.php$', '*', '\.swp$', '\.bak$', '\~$'] -< -1. Directories will appear last, everything else will appear above. -2. Everything will simply appear in alphabetical order. -3. Dirs will appear first, then ruby and php. Swap files, bak files and vim - backup files will appear last with everything else preceding them. - ------------------------------------------------------------------------------- - *'NERDTreeStatusline'* -Values: Any valid statusline setting. -Default: %{b:NERDTreeRoot.path.strForOS(0)} - -Tells the script what to use as the |'statusline'| setting for NERD tree -windows. - -Note that the statusline is set using |:let-&| not |:set| so escaping spaces -isn't necessary. - -Setting this option to -1 will will deactivate it so that your global -statusline setting is used instead. - ------------------------------------------------------------------------------- - *'NERDTreeWinPos'* -Values: "left" or "right" -Default: "left". - -This option is used to determine where NERD tree window is placed on the -screen. - -This option makes it possible to use two different explorer plugins -simultaneously. For example, you could have the taglist plugin on the left of -the window and the NERD tree on the right. - ------------------------------------------------------------------------------- - *'NERDTreeWinSize'* -Values: a positive integer. -Default: 31. - -This option is used to change the size of the NERD tree when it is loaded. - ------------------------------------------------------------------------------- - *'NERDTreeMinimalUI'* -Values: 0 or 1 -Default: 0 - -This options disables the 'Bookmarks' label 'Press ? for help' text. Use one -of the following lines to set this option: > - let NERDTreeMinimalUI=0 - let NERDTreeMinimalUI=1 -< - ------------------------------------------------------------------------------- - *'NERDTreeDirArrows'* -Values: 0 or 1 -Default: 0. - -This option is used to change the default look of directory nodes displayed in -the tree. When set to 0 it shows old-school bars (|), + and ~ chars. If set to -1 it shows right and down arrows. Use one of the follow lines to set this -option: > - let NERDTreeDirArrows=0 - let NERDTreeDirArrows=1 -< - ------------------------------------------------------------------------------- - *'NERDTreeCascadeOpenSingleChildDir'* -Values: 0 or 1 -Default: 1. - -When opening dir nodes, this option tells NERDTree to recursively open dirs -that have only one child which is also a dir. NERDTree will stop when it finds -a dir that contains anything but another single dir. This option also causes -the |NERDTree-x| mapping to close dirs in the same manner. This option may be -useful for Java projects. Use one of the follow lines to set this option: > - let NERDTreeCascadeOpenSingleChildDir=0 - let NERDTreeCascadeOpenSingleChildDir=1 -< - ------------------------------------------------------------------------------- - *'NERDTreeAutoDeleteBuffer'* -Values: 0 or 1 -Default: 0. - -When using a context menu to delete or rename a file you may also want to delete -the buffer which is no more valid. If the option is not set you will see a -confirmation if you really want to delete an old buffer. If you always press 'y' -then it worths to set this option to 1. Use one of the follow lines to set this -option: > - let NERDTreeAutoDeleteBuffer=0 - let NERDTreeAutoDeleteBuffer=1 -< - -============================================================================== -4. The NERD tree API *NERDTreeAPI* - -The NERD tree script allows you to add custom key mappings and menu items via -a set of API calls. Any scripts that use this API should be placed in -~/.vim/nerdtree_plugin/ (*nix) or ~/vimfiles/nerdtree_plugin (windows). - -The script exposes some prototype objects that can be used to manipulate the -tree and/or get information from it: > - g:NERDTreePath - g:NERDTreeDirNode - g:NERDTreeFileNode - g:NERDTreeBookmark -< -See the code/comments in NERD_tree.vim to find how to use these objects. The -following code conventions are used: - * class members start with a capital letter - * instance members start with a lower case letter - * private members start with an underscore - -See this blog post for more details: - http://got-ravings.blogspot.com/2008/09/vim-pr0n-prototype-based-objects.html - ------------------------------------------------------------------------------- -4.1. Key map API *NERDTreeKeymapAPI* - -NERDTreeAddKeyMap({options}) *NERDTreeAddKeyMap()* - Adds a new keymapping for all NERD tree buffers. - {options} must be a dictionary, and must contain the following keys: - "key" - the trigger key for the new mapping - "callback" - the function the new mapping will be bound to - "quickhelpText" - the text that will appear in the quickhelp (see - |NERDTree-?|) - "override" - if 1 then this new mapping will override whatever previous - mapping was defined for the key/scope combo. Useful for overriding the - default mappings. - - Additionally, a "scope" argument may be supplied. This constrains the - mapping so that it is only activated if the cursor is on a certain object. - That object is then passed into the handling method. Possible values are: - "FileNode" - a file node - "DirNode" - a directory node - "Node" - a file or directory node - "Bookmark" - A bookmark - "all" - the keymap is not constrained to any scope (default). When - thei is used, the handling function is not passed any arguments. - - - Example: > - call NERDTreeAddKeyMap({ - \ 'key': 'foo', - \ 'callback': 'NERDTreeCDHandler', - \ 'quickhelpText': 'echo full path of current node', - \ 'scope': 'DirNode' }) - - function! NERDTreeCDHandler(dirnode) - call a:dirnode.changeToDir() - endfunction -< - This code should sit in a file like ~/.vim/nerdtree_plugin/mymapping.vim. - It adds a (redundant) mapping on 'foo' which changes vim's CWD to that of - the current dir node. Note this mapping will only fire when the cursor is - on a directory node. - ------------------------------------------------------------------------------- -4.2. Menu API *NERDTreeMenuAPI* - -NERDTreeAddSubmenu({options}) *NERDTreeAddSubmenu()* - Creates and returns a new submenu. - - {options} must be a dictionary and must contain the following keys: - "text" - the text of the submenu that the user will see - "shortcut" - a shortcut key for the submenu (need not be unique) - - The following keys are optional: - "isActiveCallback" - a function that will be called to determine whether - this submenu item will be displayed or not. The callback function must return - 0 or 1. - "parent" - the parent submenu of the new submenu (returned from a previous - invocation of NERDTreeAddSubmenu()). If this key is left out then the new - submenu will sit under the top level menu. - - See below for an example. - -NERDTreeAddMenuItem({options}) *NERDTreeAddMenuItem()* - Adds a new menu item to the NERD tree menu (see |NERDTreeMenu|). - - {options} must be a dictionary and must contain the - following keys: - "text" - the text of the menu item which the user will see - "shortcut" - a shortcut key for the menu item (need not be unique) - "callback" - the function that will be called when the user activates the - menu item. - - The following keys are optional: - "isActiveCallback" - a function that will be called to determine whether - this menu item will be displayed or not. The callback function must return - 0 or 1. - "parent" - if the menu item belongs under a submenu then this key must be - specified. This value for this key will be the object that - was returned when the submenu was created with |NERDTreeAddSubmenu()|. - - See below for an example. - -NERDTreeAddMenuSeparator([{options}]) *NERDTreeAddMenuSeparator()* - Adds a menu separator (a row of dashes). - - {options} is an optional dictionary that may contain the following keys: - "isActiveCallback" - see description in |NERDTreeAddMenuItem()|. - -Below is an example of the menu API in action. > - call NERDTreeAddMenuSeparator() - - call NERDTreeAddMenuItem({ - \ 'text': 'a (t)op level menu item', - \ 'shortcut': 't', - \ 'callback': 'SomeFunction' }) - - let submenu = NERDTreeAddSubmenu({ - \ 'text': 'a (s)ub menu', - \ 'shortcut': 's' }) - - call NERDTreeAddMenuItem({ - \ 'text': '(n)ested item 1', - \ 'shortcut': 'n', - \ 'callback': 'SomeFunction', - \ 'parent': submenu }) - - call NERDTreeAddMenuItem({ - \ 'text': '(n)ested item 2', - \ 'shortcut': 'n', - \ 'callback': 'SomeFunction', - \ 'parent': submenu }) -< -This will create the following menu: > - -------------------- - a (t)op level menu item - a (s)ub menu -< -Where selecting "a (s)ub menu" will lead to a second menu: > - (n)ested item 1 - (n)ested item 2 -< -When any of the 3 concrete menu items are selected the function "SomeFunction" -will be called. - ------------------------------------------------------------------------------- -NERDTreeRender() *NERDTreeRender()* - Re-renders the NERD tree buffer. Useful if you change the state of the - tree and you want to it to be reflected in the UI. - -============================================================================== -5. About *NERDTreeAbout* - -The author of the NERD tree is a terrible terrible monster called Martyzilla -who gobbles up small children with milk and sugar for breakfast. - -He can be reached at martin.grenfell at gmail dot com. He would love to hear -from you, so feel free to send him suggestions and/or comments about this -plugin. Don't be shy --- the worst he can do is slaughter you and stuff you in -the fridge for later ;) - -The latest stable versions can be found at - http://www.vim.org/scripts/script.php?script_id=1658 - -The latest dev versions are on github - http://github.com/scrooloose/nerdtree - - -============================================================================== -6. Changelog *NERDTreeChangelog* - -Next - - add 'scope' argument to the key map API - - add NERDTreeCustomIgnoreFilter hook - needs doc - - add magic [[dir]] and [[file]] flags to NERDTreeIgnore - -4.2.0 - - Add NERDTreeDirArrows option to make the UI use pretty arrow chars - instead of the old +~| chars to define the tree structure (sickill) - - shift the syntax highlighting out into its own syntax file (gnap) - - add some mac specific options to the filesystem menu - for macvim - only (andersonfreitas) - - Add NERDTreeMinimalUI option to remove some non functional parts of the - nerdtree ui (camthompson) - - tweak the behaviour of :NERDTreeFind - see :help :NERDTreeFind for the - new behaviour (benjamingeiger) - - if no name is given to :Bookmark, make it default to the name of the - target file/dir (minyoung) - - use 'file' completion when doing copying, create, and move - operations (EvanDotPro) - - lots of misc bug fixes (paddyoloughlin, sdewald, camthompson, Vitaly - Bogdanov, AndrewRadev, mathias, scottstvnsn, kml, wycats, me RAWR!) - -4.1.0 - features: - - NERDTreeFind to reveal the node for the current buffer in the tree, - see |NERDTreeFind|. This effectively merges the FindInNERDTree plugin (by - Doug McInnes) into the script. - - make NERDTreeQuitOnOpen apply to the t/T keymaps too. Thanks to Stefan - Ritter and Rémi Prévost. - - truncate the root node if wider than the tree window. Thanks to Victor - Gonzalez. - - bugfixes: - - really fix window state restoring - - fix some win32 path escaping issues. Thanks to Stephan Baumeister, Ricky, - jfilip1024, and Chris Chambers - -4.0.0 - - add a new programmable menu system (see :help NERDTreeMenu). - - add new APIs to add menus/menu-items to the menu system as well as - custom key mappings to the NERD tree buffer (see :help NERDTreeAPI). - - removed the old API functions - - added a mapping to maximize/restore the size of nerd tree window, thanks - to Guillaume Duranceau for the patch. See :help NERDTree-A for details. - - - fix a bug where secondary nerd trees (netrw hijacked trees) and - NERDTreeQuitOnOpen didnt play nicely, thanks to Curtis Harvey. - - fix a bug where the script ignored directories whose name ended in a dot, - thanks to Aggelos Orfanakos for the patch. - - fix a bug when using the x mapping on the tree root, thanks to Bryan - Venteicher for the patch. - - fix a bug where the cursor position/window size of the nerd tree buffer - wasnt being stored on closing the window, thanks to Richard Hart. - - fix a bug where NERDTreeMirror would mirror the wrong tree - -3.1.1 - - fix a bug where a non-listed no-name buffer was getting created every - time the tree windows was created, thanks to Derek Wyatt and owen1 - - make behave the same as the 'o' mapping - - some helptag fixes in the doc, thanks strull - - fix a bug when using :set nohidden and opening a file where the previous - buf was modified. Thanks iElectric - - other minor fixes - -3.1.0 - New features: - - add mappings to open files in a vsplit, see :help NERDTree-s and :help - NERDTree-gs - - make the statusline for the nerd tree window default to something - hopefully more useful. See :help 'NERDTreeStatusline' - Bugfixes: - - make the hijack netrw functionality work when vim is started with "vim - " (thanks to Alf Mikula for the patch). - - fix a bug where the CWD wasnt being changed for some operations even when - NERDTreeChDirMode==2 (thanks to Lucas S. Buchala) - - add -bar to all the nerd tree :commands so they can chain with other - :commands (thanks to tpope) - - fix bugs when ignorecase was set (thanks to nach) - - fix a bug with the relative path code (thanks to nach) - - fix a bug where doing a :cd would cause :NERDTreeToggle to fail (thanks nach) - - -3.0.1 - Bugfixes: - - fix bugs with :NERDTreeToggle and :NERDTreeMirror when 'hidden - was not set - - fix a bug where :NERDTree would fail if was relative and - didnt start with a ./ or ../ Thanks to James Kanze. - - make the q mapping work with secondary (:e style) trees, - thanks to jamessan - - fix a bunch of small bugs with secondary trees - - More insane refactoring. - -3.0.0 - - hijack netrw so that doing an :edit will put a NERD tree in - the window rather than a netrw browser. See :help 'NERDTreeHijackNetrw' - - allow sharing of trees across tabs, see :help :NERDTreeMirror - - remove "top" and "bottom" as valid settings for NERDTreeWinPos - - change the '' mapping to 'i' - - change the 'H' mapping to 'I' - - lots of refactoring - -============================================================================== -7. Credits *NERDTreeCredits* - -Thanks to the following people for testing, bug reports, ideas etc. Without -you I probably would have got bored of the hacking the NERD tree and -just downloaded pr0n instead. - - Tim Carey-Smith (halorgium) - Vigil - Nick Brettell - Thomas Scott Urban - Terrance Cohen - Yegappan Lakshmanan - Jason Mills - Michael Geddes (frogonwheels) - Yu Jun - Michael Madsen - AOYAMA Shotaro - Zhang Weiwu - Niels Aan de Brugh - Olivier Yiptong - Zhang Shuhan - Cory Echols - Piotr Czachur - Yuan Jiang - Matan Nassau - Maxim Kim - Charlton Wang - Matt Wozniski (godlygeek) - knekk - Sean Chou - Ryan Penn - Simon Peter Nicholls - Michael Foobar - Tomasz Chomiuk - Denis Pokataev - Tim Pope (tpope) - James Kanze - James Vega (jamessan) - Frederic Chanal (nach) - Alf Mikula - Lucas S. Buchala - Curtis Harvey - Guillaume Duranceau - Richard Hart (hates) - Doug McInnes - Stefan Ritter - Rémi Prévost - Victor Gonzalez - Stephan Baumeister - Ricky - jfilip1024 - Chris Chambers - Vitaly Bogdanov - Patrick O'Loughlin (paddyoloughlin) - Cam Thompson (camthompson) - Marcin Kulik (sickill) - Steve DeWald (sdewald) - Ivan Necas (iNecas) - George Ang (gnap) - Evan Coury (EvanDotPro) - Andrew Radev (AndrewRadev) - Matt Gauger (mathias) - Scott Stevenson (scottstvnsn) - Anderson Freitas (andersonfreitas) - Kamil K. Lemański (kml) - Yehuda Katz (wycats) - Min-Young Wu (minyoung) - Benjamin Geiger (benjamingeiger) - -============================================================================== -8. License *NERDTreeLicense* - -The NERD tree is released under the wtfpl. -See http://sam.zoy.org/wtfpl/COPYING. diff --git a/bundle/nerdtree/lib/nerdtree/bookmark.vim b/bundle/nerdtree/lib/nerdtree/bookmark.vim deleted file mode 100755 index 6de9be4..0000000 --- a/bundle/nerdtree/lib/nerdtree/bookmark.vim +++ /dev/null @@ -1,319 +0,0 @@ -"CLASS: Bookmark -"============================================================ -let s:Bookmark = {} -let g:NERDTreeBookmark = s:Bookmark - -" FUNCTION: Bookmark.activate() {{{1 -function! s:Bookmark.activate(...) - call self.open(a:0 ? a:1 : {}) -endfunction - -" FUNCTION: Bookmark.AddBookmark(name, path) {{{1 -" Class method to add a new bookmark to the list, if a previous bookmark exists -" with the same name, just update the path for that bookmark -function! s:Bookmark.AddBookmark(name, path) - for i in s:Bookmark.Bookmarks() - if i.name ==# a:name - let i.path = a:path - return - endif - endfor - call add(s:Bookmark.Bookmarks(), s:Bookmark.New(a:name, a:path)) - if g:NERDTreeBookmarksSort ==# 1 - call s:Bookmark.Sort() - endif -endfunction - -" FUNCTION: Bookmark.Bookmarks() {{{1 -" Class method to get all bookmarks. Lazily initializes the bookmarks global -" variable -function! s:Bookmark.Bookmarks() - if !exists("g:NERDTreeBookmarks") - let g:NERDTreeBookmarks = [] - endif - return g:NERDTreeBookmarks -endfunction - -" FUNCTION: Bookmark.BookmarkExistsFor(name) {{{1 -" class method that returns 1 if a bookmark with the given name is found, 0 -" otherwise -function! s:Bookmark.BookmarkExistsFor(name) - try - call s:Bookmark.BookmarkFor(a:name) - return 1 - catch /^NERDTree.BookmarkNotFoundError/ - return 0 - endtry -endfunction - -" FUNCTION: Bookmark.BookmarkFor(name) {{{1 -" Class method to get the bookmark that has the given name. {} is return if no -" bookmark is found -function! s:Bookmark.BookmarkFor(name) - for i in s:Bookmark.Bookmarks() - if i.name ==# a:name - return i - endif - endfor - throw "NERDTree.BookmarkNotFoundError: no bookmark found for name: \"". a:name .'"' -endfunction - -" FUNCTION: Bookmark.BookmarkNames() {{{1 -" Class method to return an array of all bookmark names -function! s:Bookmark.BookmarkNames() - let names = [] - for i in s:Bookmark.Bookmarks() - call add(names, i.name) - endfor - return names -endfunction - -" FUNCTION: Bookmark.CacheBookmarks(silent) {{{1 -" Class method to read all bookmarks from the bookmarks file initialize -" bookmark objects for each one. -" -" Args: -" silent - dont echo an error msg if invalid bookmarks are found -function! s:Bookmark.CacheBookmarks(silent) - if filereadable(g:NERDTreeBookmarksFile) - let g:NERDTreeBookmarks = [] - let g:NERDTreeInvalidBookmarks = [] - let bookmarkStrings = readfile(g:NERDTreeBookmarksFile) - let invalidBookmarksFound = 0 - for i in bookmarkStrings - - "ignore blank lines - if i != '' - - let name = substitute(i, '^\(.\{-}\) .*$', '\1', '') - let path = substitute(i, '^.\{-} \(.*\)$', '\1', '') - - try - let bookmark = s:Bookmark.New(name, g:NERDTreePath.New(path)) - call add(g:NERDTreeBookmarks, bookmark) - catch /^NERDTree.InvalidArgumentsError/ - call add(g:NERDTreeInvalidBookmarks, i) - let invalidBookmarksFound += 1 - endtry - endif - endfor - if invalidBookmarksFound - call s:Bookmark.Write() - if !a:silent - call nerdtree#echo(invalidBookmarksFound . " invalid bookmarks were read. See :help NERDTreeInvalidBookmarks for info.") - endif - endif - if g:NERDTreeBookmarksSort ==# 1 - call s:Bookmark.Sort() - endif - endif -endfunction - -" FUNCTION: Bookmark.compareTo(otherbookmark) {{{1 -" Compare these two bookmarks for sorting purposes -function! s:Bookmark.compareTo(otherbookmark) - return a:otherbookmark.name < self.name -endfunction -" FUNCTION: Bookmark.ClearAll() {{{1 -" Class method to delete all bookmarks. -function! s:Bookmark.ClearAll() - for i in s:Bookmark.Bookmarks() - call i.delete() - endfor - call s:Bookmark.Write() -endfunction - -" FUNCTION: Bookmark.delete() {{{1 -" Delete this bookmark. If the node for this bookmark is under the current -" root, then recache bookmarks for its Path object -function! s:Bookmark.delete() - let node = {} - try - let node = self.getNode(1) - catch /^NERDTree.BookmarkedNodeNotFoundError/ - endtry - call remove(s:Bookmark.Bookmarks(), index(s:Bookmark.Bookmarks(), self)) - if !empty(node) - call node.path.cacheDisplayString() - endif - call s:Bookmark.Write() -endfunction - -" FUNCTION: Bookmark.getNode(searchFromAbsoluteRoot) {{{1 -" Gets the treenode for this bookmark -" -" Args: -" searchFromAbsoluteRoot: specifies whether we should search from the current -" tree root, or the highest cached node -function! s:Bookmark.getNode(searchFromAbsoluteRoot) - let searchRoot = a:searchFromAbsoluteRoot ? g:NERDTreeDirNode.AbsoluteTreeRoot() : b:NERDTreeRoot - let targetNode = searchRoot.findNode(self.path) - if empty(targetNode) - throw "NERDTree.BookmarkedNodeNotFoundError: no node was found for bookmark: " . self.name - endif - return targetNode -endfunction - -" FUNCTION: Bookmark.GetNodeForName(name, searchFromAbsoluteRoot) {{{1 -" Class method that finds the bookmark with the given name and returns the -" treenode for it. -function! s:Bookmark.GetNodeForName(name, searchFromAbsoluteRoot) - let bookmark = s:Bookmark.BookmarkFor(a:name) - return bookmark.getNode(a:searchFromAbsoluteRoot) -endfunction - -" FUNCTION: Bookmark.GetSelected() {{{1 -" returns the Bookmark the cursor is over, or {} -function! s:Bookmark.GetSelected() - let line = getline(".") - let name = substitute(line, '^>\(.\{-}\) .\+$', '\1', '') - if name != line - try - return s:Bookmark.BookmarkFor(name) - catch /^NERDTree.BookmarkNotFoundError/ - return {} - endtry - endif - return {} -endfunction - -" FUNCTION: Bookmark.InvalidBookmarks() {{{1 -" Class method to get all invalid bookmark strings read from the bookmarks -" file -function! s:Bookmark.InvalidBookmarks() - if !exists("g:NERDTreeInvalidBookmarks") - let g:NERDTreeInvalidBookmarks = [] - endif - return g:NERDTreeInvalidBookmarks -endfunction - -" FUNCTION: Bookmark.mustExist() {{{1 -function! s:Bookmark.mustExist() - if !self.path.exists() - call s:Bookmark.CacheBookmarks(1) - throw "NERDTree.BookmarkPointsToInvalidLocationError: the bookmark \"". - \ self.name ."\" points to a non existing location: \"". self.path.str() - endif -endfunction - -" FUNCTION: Bookmark.New(name, path) {{{1 -" Create a new bookmark object with the given name and path object -function! s:Bookmark.New(name, path) - if a:name =~# ' ' - throw "NERDTree.IllegalBookmarkNameError: illegal name:" . a:name - endif - - let newBookmark = copy(self) - let newBookmark.name = a:name - let newBookmark.path = a:path - return newBookmark -endfunction - -" FUNCTION: Bookmark.open([options]) {{{1 -"Args: -"A dictionary containing the following keys (all optional): -" 'where': Specifies whether the node should be opened in new split/tab or in -" the previous window. Can be either 'v' (vertical split), 'h' -" (horizontal split), 't' (new tab) or 'p' (previous window). -" 'reuse': if a window is displaying the file then jump the cursor there -" 'keepopen': dont close the tree window -" 'stay': open the file, but keep the cursor in the tree win -" -function! s:Bookmark.open(...) - let opts = a:0 ? a:1 : {} - - if self.path.isDirectory && !has_key(opts, 'where') - call self.toRoot() - else - let opener = g:NERDTreeOpener.New(self.path, opts) - call opener.open(self) - endif -endfunction - -" FUNCTION: Bookmark.openInNewTab(options) {{{1 -" Create a new bookmark object with the given name and path object -function! s:Bookmark.openInNewTab(options) - call nerdtree#deprecated('Bookmark.openInNewTab', 'is deprecated, use open() instead') - call self.open(a:options) -endfunction - -" FUNCTION: Bookmark.setPath(path) {{{1 -" makes this bookmark point to the given path -function! s:Bookmark.setPath(path) - let self.path = a:path -endfunction - -" FUNCTION: Bookmark.Sort() {{{1 -" Class method that sorts all bookmarks -function! s:Bookmark.Sort() - let CompareFunc = function("nerdtree#compareBookmarks") - call sort(s:Bookmark.Bookmarks(), CompareFunc) -endfunction - -" FUNCTION: Bookmark.str() {{{1 -" Get the string that should be rendered in the view for this bookmark -function! s:Bookmark.str() - let pathStrMaxLen = winwidth(nerdtree#getTreeWinNum()) - 4 - len(self.name) - if &nu - let pathStrMaxLen = pathStrMaxLen - &numberwidth - endif - - let pathStr = self.path.str({'format': 'UI'}) - if len(pathStr) > pathStrMaxLen - let pathStr = '<' . strpart(pathStr, len(pathStr) - pathStrMaxLen) - endif - return '>' . self.name . ' ' . pathStr -endfunction - -" FUNCTION: Bookmark.toRoot() {{{1 -" Make the node for this bookmark the new tree root -function! s:Bookmark.toRoot() - if self.validate() - try - let targetNode = self.getNode(1) - catch /^NERDTree.BookmarkedNodeNotFoundError/ - let targetNode = g:NERDTreeFileNode.New(s:Bookmark.BookmarkFor(self.name).path) - endtry - call targetNode.makeRoot() - call b:NERDTree.render() - call targetNode.putCursorHere(0, 0) - endif -endfunction - -" FUNCTION: Bookmark.ToRoot(name) {{{1 -" Make the node for this bookmark the new tree root -function! s:Bookmark.ToRoot(name) - let bookmark = s:Bookmark.BookmarkFor(a:name) - call bookmark.toRoot() -endfunction - -" FUNCTION: Bookmark.validate() {{{1 -function! s:Bookmark.validate() - if self.path.exists() - return 1 - else - call s:Bookmark.CacheBookmarks(1) - call b:NERDTree.render() - call nerdtree#echo(self.name . "now points to an invalid location. See :help NERDTreeInvalidBookmarks for info.") - return 0 - endif -endfunction - -" FUNCTION: Bookmark.Write() {{{1 -" Class method to write all bookmarks to the bookmarks file -function! s:Bookmark.Write() - let bookmarkStrings = [] - for i in s:Bookmark.Bookmarks() - call add(bookmarkStrings, i.name . ' ' . i.path.str()) - endfor - - "add a blank line before the invalid ones - call add(bookmarkStrings, "") - - for j in s:Bookmark.InvalidBookmarks() - call add(bookmarkStrings, j) - endfor - call writefile(bookmarkStrings, g:NERDTreeBookmarksFile) -endfunction - -" vim: set sw=4 sts=4 et fdm=marker: diff --git a/bundle/nerdtree/lib/nerdtree/creator.vim b/bundle/nerdtree/lib/nerdtree/creator.vim deleted file mode 100755 index 86f951a..0000000 --- a/bundle/nerdtree/lib/nerdtree/creator.vim +++ /dev/null @@ -1,357 +0,0 @@ -"CLASS: Creator -"Creates primary/secondary/mirror nerdtree windows. Sets up all the window and -"buffer options and key mappings etc. -"============================================================ -let s:Creator = {} -let g:NERDTreeCreator = s:Creator - -"FUNCTION: s:Creator._bindMappings() {{{1 -function! s:Creator._bindMappings() - "make do the same as the activate node mapping - nnoremap :call nerdtree#ui_glue#invokeKeyMap(g:NERDTreeMapActivateNode) - - call g:NERDTreeKeyMap.BindAll() - - command! -buffer -nargs=? Bookmark :call nerdtree#ui_glue#bookmarkNode('') - command! -buffer -complete=customlist,nerdtree#completeBookmarks -nargs=1 RevealBookmark :call nerdtree#ui_glue#revealBookmark('') - command! -buffer -complete=customlist,nerdtree#completeBookmarks -nargs=1 OpenBookmark :call nerdtree#ui_glue#openBookmark('') - command! -buffer -complete=customlist,nerdtree#completeBookmarks -nargs=* ClearBookmarks call nerdtree#ui_glue#clearBookmarks('') - command! -buffer -complete=customlist,nerdtree#completeBookmarks -nargs=+ BookmarkToRoot call g:NERDTreeBookmark.ToRoot('') - command! -buffer -nargs=0 ClearAllBookmarks call g:NERDTreeBookmark.ClearAll() call b:NERDTree.render() - command! -buffer -nargs=0 ReadBookmarks call g:NERDTreeBookmark.CacheBookmarks(0) call b:NERDTree.render() - command! -buffer -nargs=0 WriteBookmarks call g:NERDTreeBookmark.Write() -endfunction - -"FUNCTION: s:Creator._broadcastInitEvent() {{{1 -function! s:Creator._broadcastInitEvent() - silent doautocmd User NERDTreeInit -endfunction - -" FUNCTION: s:Creator.BufNamePrefix() {{{2 -function! s:Creator.BufNamePrefix() - return 'NERD_tree_' -endfunction - -"FUNCTION: s:Creator.CreatePrimary(a:name) {{{1 -function! s:Creator.CreatePrimary(name) - let creator = s:Creator.New() - call creator.createPrimary(a:name) -endfunction - -"FUNCTION: s:Creator.createPrimary(a:name) {{{1 -"name: the name of a bookmark or a directory -function! s:Creator.createPrimary(name) - let path = self._pathForString(a:name) - - "if instructed to, then change the vim CWD to the dir the NERDTree is - "inited in - if g:NERDTreeChDirMode != 0 - call path.changeToDir() - endif - - if g:NERDTree.ExistsForTab() - if nerdtree#isTreeOpen() - call nerdtree#closeTree() - endif - unlet t:NERDTreeBufName - endif - - call self._createTreeWin() - call self._createNERDTree(path) - let b:NERDTreeType = "primary" - let b:treeShowHelp = 0 - let b:NERDTreeIgnoreEnabled = 1 - let b:NERDTreeShowFiles = g:NERDTreeShowFiles - let b:NERDTreeShowHidden = g:NERDTreeShowHidden - let b:NERDTreeShowBookmarks = g:NERDTreeShowBookmarks - - call b:NERDTree.render() - call b:NERDTreeRoot.putCursorHere(0, 0) - - call self._broadcastInitEvent() -endfunction - -"FUNCTION: s:Creator.CreateSecondary(dir) {{{1 -function! s:Creator.CreateSecondary(dir) - let creator = s:Creator.New() - call creator.createSecondary(a:dir) -endfunction - -"FUNCTION: s:Creator.createSecondary(dir) {{{1 -function! s:Creator.createSecondary(dir) - try - let path = g:NERDTreePath.New(a:dir) - catch /^NERDTree.InvalidArgumentsError/ - call nerdtree#echo("Invalid directory name:" . a:name) - return - endtry - - "we want the directory buffer to disappear when we do the :edit below - setlocal bufhidden=wipe - - let previousBuf = expand("#") - - "we need a unique name for each secondary tree buffer to ensure they are - "all independent - exec "silent edit " . self._nextBufferName() - - let b:NERDTreePreviousBuf = bufnr(previousBuf) - call self._createNERDTree(path) - call self._setCommonBufOptions() - let b:NERDTreeType = "secondary" - - call b:NERDTree.render() - - call self._broadcastInitEvent() -endfunction - -" FUNCTION: s:Creator._createNERDTree(path) {{{1 -function! s:Creator._createNERDTree(path) - let b:NERDTree = g:NERDTree.New(a:path) - "TODO: This is kept for compatability only since many things use - "b:NERDTreeRoot instead of the new NERDTree.root - "Remove this one day - let b:NERDTreeRoot = b:NERDTree.root - - call b:NERDTree.root.open() -endfunction - -" FUNCTION: s:Creator.CreateMirror() {{{1 -function! s:Creator.CreateMirror() - let creator = s:Creator.New() - call creator.createMirror() -endfunction - -" FUNCTION: s:Creator.createMirror() {{{1 -function! s:Creator.createMirror() - "get the names off all the nerd tree buffers - let treeBufNames = [] - for i in range(1, tabpagenr("$")) - let nextName = self._tabpagevar(i, 'NERDTreeBufName') - if nextName != -1 && (!exists("t:NERDTreeBufName") || nextName != t:NERDTreeBufName) - call add(treeBufNames, nextName) - endif - endfor - let treeBufNames = self._uniq(treeBufNames) - - "map the option names (that the user will be prompted with) to the nerd - "tree buffer names - let options = {} - let i = 0 - while i < len(treeBufNames) - let bufName = treeBufNames[i] - let treeRoot = getbufvar(bufName, "NERDTreeRoot") - let options[i+1 . '. ' . treeRoot.path.str() . ' (buf name: ' . bufName . ')'] = bufName - let i = i + 1 - endwhile - - "work out which tree to mirror, if there is more than 1 then ask the user - let bufferName = '' - if len(keys(options)) > 1 - let choices = ["Choose a tree to mirror"] - let choices = extend(choices, sort(keys(options))) - let choice = inputlist(choices) - if choice < 1 || choice > len(options) || choice ==# '' - return - endif - - let bufferName = options[sort(keys(options))[choice-1]] - elseif len(keys(options)) ==# 1 - let bufferName = values(options)[0] - else - call nerdtree#echo("No trees to mirror") - return - endif - - if g:NERDTree.ExistsForTab() && nerdtree#isTreeOpen() - call nerdtree#closeTree() - endif - - let t:NERDTreeBufName = bufferName - call self._createTreeWin() - exec 'buffer ' . bufferName - if !&hidden - call b:NERDTree.render() - endif -endfunction - -"FUNCTION: s:Creator._createTreeWin() {{{1 -"Inits the NERD tree window. ie. opens it, sizes it, sets all the local -"options etc -function! s:Creator._createTreeWin() - "create the nerd tree window - let splitLocation = g:NERDTreeWinPos ==# "left" ? "topleft " : "botright " - let splitSize = g:NERDTreeWinSize - - if !exists('t:NERDTreeBufName') - let t:NERDTreeBufName = self._nextBufferName() - silent! exec splitLocation . 'vertical ' . splitSize . ' new' - silent! exec "edit " . t:NERDTreeBufName - else - silent! exec splitLocation . 'vertical ' . splitSize . ' split' - silent! exec "buffer " . t:NERDTreeBufName - endif - - setlocal winfixwidth - call self._setCommonBufOptions() -endfunction - -"FUNCTION: s:Creator.New() {{{1 -function! s:Creator.New() - let newCreator = copy(self) - return newCreator -endfunction - -" FUNCTION: s:Creator._nextBufferName() {{{2 -" returns the buffer name for the next nerd tree -function! s:Creator._nextBufferName() - let name = s:Creator.BufNamePrefix() . self._nextBufferNumber() - return name -endfunction - -" FUNCTION: s:Creator._nextBufferNumber() {{{2 -" the number to add to the nerd tree buffer name to make the buf name unique -function! s:Creator._nextBufferNumber() - if !exists("s:Creator._NextBufNum") - let s:Creator._NextBufNum = 1 - else - let s:Creator._NextBufNum += 1 - endif - - return s:Creator._NextBufNum -endfunction - -"FUNCTION: s:Creator._pathForString(str) {{{1 -"find a bookmark or adirectory for the given string -function! s:Creator._pathForString(str) - let path = {} - if g:NERDTreeBookmark.BookmarkExistsFor(a:str) - let path = g:NERDTreeBookmark.BookmarkFor(a:str).path - else - let dir = a:str ==# '' ? getcwd() : a:str - - "hack to get an absolute path if a relative path is given - if dir =~# '^\.' - let dir = getcwd() . g:NERDTreePath.Slash() . dir - endif - let dir = g:NERDTreePath.Resolve(dir) - - try - let path = g:NERDTreePath.New(dir) - catch /^NERDTree.InvalidArgumentsError/ - call nerdtree#echo("No bookmark or directory found for: " . a:str) - return - endtry - endif - if !path.isDirectory - let path = path.getParent() - endif - - return path -endfunction - -"FUNCTION: s:Creator._setCommonBufOptions() {{{1 -function! s:Creator._setCommonBufOptions() - "throwaway buffer options - setlocal noswapfile - setlocal buftype=nofile - setlocal bufhidden=hide - setlocal nowrap - setlocal foldcolumn=0 - setlocal foldmethod=manual - setlocal nofoldenable - setlocal nobuflisted - setlocal nospell - if g:NERDTreeShowLineNumbers - setlocal nu - else - setlocal nonu - if v:version >= 703 - setlocal nornu - endif - endif - - iabc - - if g:NERDTreeHighlightCursorline - setlocal cursorline - endif - - call self._setupStatusline() - - let b:treeShowHelp = 0 - let b:NERDTreeIgnoreEnabled = 1 - let b:NERDTreeShowFiles = g:NERDTreeShowFiles - let b:NERDTreeShowHidden = g:NERDTreeShowHidden - let b:NERDTreeShowBookmarks = g:NERDTreeShowBookmarks - call self._bindMappings() - setlocal filetype=nerdtree -endfunction - -"FUNCTION: s:Creator._setupStatusline() {{{1 -function! s:Creator._setupStatusline() - if g:NERDTreeStatusline != -1 - let &l:statusline = g:NERDTreeStatusline - endif -endfunction - -" FUNCTION: s:Creator._tabpagevar(tabnr, var) {{{1 -function! s:Creator._tabpagevar(tabnr, var) - let currentTab = tabpagenr() - let old_ei = &ei - set ei=all - - exec "tabnext " . a:tabnr - let v = -1 - if exists('t:' . a:var) - exec 'let v = t:' . a:var - endif - exec "tabnext " . currentTab - - let &ei = old_ei - - return v -endfunction - -"FUNCTION: s:Creator.TogglePrimary(dir) {{{1 -function! s:Creator.TogglePrimary(dir) - let creator = s:Creator.New() - call creator.togglePrimary(a:dir) -endfunction - -"FUNCTION: s:Creator.togglePrimary(dir) {{{1 -"Toggles the NERD tree. I.e the NERD tree is open, it is closed, if it is -"closed it is restored or initialized (if it doesnt exist) -" -"Args: -"dir: the full path for the root node (is only used if the NERD tree is being -"initialized. -function! s:Creator.togglePrimary(dir) - if g:NERDTree.ExistsForTab() - if !nerdtree#isTreeOpen() - call self._createTreeWin() - if !&hidden - call b:NERDTree.render() - endif - call b:NERDTree.ui.restoreScreenState() - else - call nerdtree#closeTree() - endif - else - call self.createPrimary(a:dir) - endif -endfunction - -" Function: s:Creator._uniq(list) {{{1 -" returns a:list without duplicates -function! s:Creator._uniq(list) - let uniqlist = [] - for elem in a:list - if index(uniqlist, elem) ==# -1 - let uniqlist += [elem] - endif - endfor - return uniqlist -endfunction - -" vim: set sw=4 sts=4 et fdm=marker: diff --git a/bundle/nerdtree/lib/nerdtree/key_map.vim b/bundle/nerdtree/lib/nerdtree/key_map.vim deleted file mode 100755 index 2411406..0000000 --- a/bundle/nerdtree/lib/nerdtree/key_map.vim +++ /dev/null @@ -1,159 +0,0 @@ -"CLASS: KeyMap -"============================================================ -let s:KeyMap = {} -let g:NERDTreeKeyMap = s:KeyMap - -"FUNCTION: KeyMap.All() {{{1 -function! s:KeyMap.All() - if !exists("s:keyMaps") - let s:keyMaps = [] - endif - return s:keyMaps -endfunction - -"FUNCTION: KeyMap.FindFor(key, scope) {{{1 -function! s:KeyMap.FindFor(key, scope) - for i in s:KeyMap.All() - if i.key ==# a:key && i.scope ==# a:scope - return i - endif - endfor - return {} -endfunction - -"FUNCTION: KeyMap.BindAll() {{{1 -function! s:KeyMap.BindAll() - for i in s:KeyMap.All() - call i.bind() - endfor -endfunction - -"FUNCTION: KeyMap.bind() {{{1 -function! s:KeyMap.bind() - " If the key sequence we're trying to map contains any '<>' notation, we - " must replace each of the '<' characters with '' to ensure the string - " is not translated into its corresponding keycode during the later part - " of the map command below - " :he <> - let specialNotationRegex = '\m<\([[:alnum:]_-]\+>\)' - if self.key =~# specialNotationRegex - let keymapInvokeString = substitute(self.key, specialNotationRegex, '\1', 'g') - else - let keymapInvokeString = self.key - endif - - let premap = self.key == "" ? " " : " " - - exec 'nnoremap '. self.key . premap . ':call nerdtree#ui_glue#invokeKeyMap("'. keymapInvokeString .'")' -endfunction - -"FUNCTION: KeyMap.Remove(key, scope) {{{1 -function! s:KeyMap.Remove(key, scope) - let maps = s:KeyMap.All() - for i in range(len(maps)) - if maps[i].key ==# a:key && maps[i].scope ==# a:scope - return remove(maps, i) - endif - endfor -endfunction - -"FUNCTION: KeyMap.invoke() {{{1 -"Call the KeyMaps callback function -function! s:KeyMap.invoke(...) - let Callback = function(self.callback) - if a:0 - call Callback(a:1) - else - call Callback() - endif -endfunction - -"FUNCTION: KeyMap.Invoke() {{{1 -"Find a keymapping for a:key and the current scope invoke it. -" -"Scope is determined as follows: -" * if the cursor is on a dir node then "DirNode" -" * if the cursor is on a file node then "FileNode" -" * if the cursor is on a bookmark then "Bookmark" -" -"If a keymap has the scope of "all" then it will be called if no other keymap -"is found for a:key and the scope. -function! s:KeyMap.Invoke(key) - - "required because clicking the command window below another window still - "invokes the mapping - but changes the window cursor - "is in first - " - "TODO: remove this check when the vim bug is fixed - if !g:NERDTree.ExistsForBuf() - return {} - endif - - let node = g:NERDTreeFileNode.GetSelected() - if !empty(node) - - "try file node - if !node.path.isDirectory - let km = s:KeyMap.FindFor(a:key, "FileNode") - if !empty(km) - return km.invoke(node) - endif - endif - - "try dir node - if node.path.isDirectory - let km = s:KeyMap.FindFor(a:key, "DirNode") - if !empty(km) - return km.invoke(node) - endif - endif - - "try generic node - let km = s:KeyMap.FindFor(a:key, "Node") - if !empty(km) - return km.invoke(node) - endif - - endif - - "try bookmark - let bm = g:NERDTreeBookmark.GetSelected() - if !empty(bm) - let km = s:KeyMap.FindFor(a:key, "Bookmark") - if !empty(km) - return km.invoke(bm) - endif - endif - - "try all - let km = s:KeyMap.FindFor(a:key, "all") - if !empty(km) - return km.invoke() - endif -endfunction - -"FUNCTION: KeyMap.Create(options) {{{1 -function! s:KeyMap.Create(options) - let opts = extend({'scope': 'all', 'quickhelpText': ''}, copy(a:options)) - - "dont override other mappings unless the 'override' option is given - if get(opts, 'override', 0) == 0 && !empty(s:KeyMap.FindFor(opts['key'], opts['scope'])) - return - end - - let newKeyMap = copy(self) - let newKeyMap.key = opts['key'] - let newKeyMap.quickhelpText = opts['quickhelpText'] - let newKeyMap.callback = opts['callback'] - let newKeyMap.scope = opts['scope'] - - call s:KeyMap.Add(newKeyMap) -endfunction - -"FUNCTION: KeyMap.Add(keymap) {{{1 -function! s:KeyMap.Add(keymap) - call s:KeyMap.Remove(a:keymap.key, a:keymap.scope) - call add(s:KeyMap.All(), a:keymap) -endfunction - -" vim: set sw=4 sts=4 et fdm=marker: diff --git a/bundle/nerdtree/lib/nerdtree/menu_controller.vim b/bundle/nerdtree/lib/nerdtree/menu_controller.vim deleted file mode 100755 index ae0ee84..0000000 --- a/bundle/nerdtree/lib/nerdtree/menu_controller.vim +++ /dev/null @@ -1,180 +0,0 @@ -"CLASS: MenuController -"============================================================ -let s:MenuController = {} -let g:NERDTreeMenuController = s:MenuController - -"FUNCTION: MenuController.New(menuItems) {{{1 -"create a new menu controller that operates on the given menu items -function! s:MenuController.New(menuItems) - let newMenuController = copy(self) - if a:menuItems[0].isSeparator() - let newMenuController.menuItems = a:menuItems[1:-1] - else - let newMenuController.menuItems = a:menuItems - endif - return newMenuController -endfunction - -"FUNCTION: MenuController.showMenu() {{{1 -"start the main loop of the menu and get the user to choose/execute a menu -"item -function! s:MenuController.showMenu() - call self._saveOptions() - - try - let self.selection = 0 - - let done = 0 - while !done - redraw! - call self._echoPrompt() - let key = nr2char(getchar()) - let done = self._handleKeypress(key) - endwhile - finally - call self._restoreOptions() - endtry - - if self.selection != -1 - let m = self._current() - call m.execute() - endif -endfunction - -"FUNCTION: MenuController._echoPrompt() {{{1 -function! s:MenuController._echoPrompt() - echo "NERDTree Menu. Use j/k/enter and the shortcuts indicated" - echo "==========================================================" - - for i in range(0, len(self.menuItems)-1) - if self.selection == i - echo "> " . self.menuItems[i].text - else - echo " " . self.menuItems[i].text - endif - endfor -endfunction - -"FUNCTION: MenuController._current(key) {{{1 -"get the MenuItem that is currently selected -function! s:MenuController._current() - return self.menuItems[self.selection] -endfunction - -"FUNCTION: MenuController._handleKeypress(key) {{{1 -"change the selection (if appropriate) and return 1 if the user has made -"their choice, 0 otherwise -function! s:MenuController._handleKeypress(key) - if a:key == 'j' - call self._cursorDown() - elseif a:key == 'k' - call self._cursorUp() - elseif a:key == nr2char(27) "escape - let self.selection = -1 - return 1 - elseif a:key == "\r" || a:key == "\n" "enter and ctrl-j - return 1 - else - let index = self._nextIndexFor(a:key) - if index != -1 - let self.selection = index - if len(self._allIndexesFor(a:key)) == 1 - return 1 - endif - endif - endif - - return 0 -endfunction - -"FUNCTION: MenuController._allIndexesFor(shortcut) {{{1 -"get indexes to all menu items with the given shortcut -function! s:MenuController._allIndexesFor(shortcut) - let toReturn = [] - - for i in range(0, len(self.menuItems)-1) - if self.menuItems[i].shortcut == a:shortcut - call add(toReturn, i) - endif - endfor - - return toReturn -endfunction - -"FUNCTION: MenuController._nextIndexFor(shortcut) {{{1 -"get the index to the next menu item with the given shortcut, starts from the -"current cursor location and wraps around to the top again if need be -function! s:MenuController._nextIndexFor(shortcut) - for i in range(self.selection+1, len(self.menuItems)-1) - if self.menuItems[i].shortcut == a:shortcut - return i - endif - endfor - - for i in range(0, self.selection) - if self.menuItems[i].shortcut == a:shortcut - return i - endif - endfor - - return -1 -endfunction - -"FUNCTION: MenuController._setCmdheight() {{{1 -"sets &cmdheight to whatever is needed to display the menu -function! s:MenuController._setCmdheight() - let &cmdheight = len(self.menuItems) + 3 -endfunction - -"FUNCTION: MenuController._saveOptions() {{{1 -"set any vim options that are required to make the menu work (saving their old -"values) -function! s:MenuController._saveOptions() - let self._oldLazyredraw = &lazyredraw - let self._oldCmdheight = &cmdheight - set nolazyredraw - call self._setCmdheight() -endfunction - -"FUNCTION: MenuController._restoreOptions() {{{1 -"restore the options we saved in _saveOptions() -function! s:MenuController._restoreOptions() - let &cmdheight = self._oldCmdheight - let &lazyredraw = self._oldLazyredraw -endfunction - -"FUNCTION: MenuController._cursorDown() {{{1 -"move the cursor to the next menu item, skipping separators -function! s:MenuController._cursorDown() - let done = 0 - while !done - if self.selection < len(self.menuItems)-1 - let self.selection += 1 - else - let self.selection = 0 - endif - - if !self._current().isSeparator() - let done = 1 - endif - endwhile -endfunction - -"FUNCTION: MenuController._cursorUp() {{{1 -"move the cursor to the previous menu item, skipping separators -function! s:MenuController._cursorUp() - let done = 0 - while !done - if self.selection > 0 - let self.selection -= 1 - else - let self.selection = len(self.menuItems)-1 - endif - - if !self._current().isSeparator() - let done = 1 - endif - endwhile -endfunction - -" vim: set sw=4 sts=4 et fdm=marker: diff --git a/bundle/nerdtree/lib/nerdtree/nerdtree.vim b/bundle/nerdtree/lib/nerdtree/nerdtree.vim deleted file mode 100755 index a41490b..0000000 --- a/bundle/nerdtree/lib/nerdtree/nerdtree.vim +++ /dev/null @@ -1,39 +0,0 @@ -"CLASS: NERDTree -"============================================================ -let s:NERDTree = {} -let g:NERDTree = s:NERDTree - -" Function: s:NERDTree.ExistsForBuffer() {{{1 -" Returns 1 if a nerd tree root exists in the current buffer -function! s:NERDTree.ExistsForBuf() - return exists("b:NERDTreeRoot") -endfunction - -" Function: s:NERDTree.ExistsForTab() {{{1 -" Returns 1 if a nerd tree root exists in the current tab -function! s:NERDTree.ExistsForTab() - return exists("t:NERDTreeBufName") -endfunction - -function! s:NERDTree.ForCurrentBuf() - if s:NERDTree.ExistsForBuf() - return b:NERDTree - else - return {} - endif -endfunction - -function! s:NERDTree.New(path) - let newObj = copy(self) - let newObj.ui = g:NERDTreeUI.New(newObj) - let newObj.root = g:NERDTreeDirNode.New(a:path) - - return newObj -endfunction - -"FUNCTION: s:NERDTree.render() {{{1 -"A convenience function - since this is called often -function! s:NERDTree.render() - call self.ui.render() -endfunction - diff --git a/bundle/nerdtree/lib/nerdtree/notifier.vim b/bundle/nerdtree/lib/nerdtree/notifier.vim deleted file mode 100755 index b445f8a..0000000 --- a/bundle/nerdtree/lib/nerdtree/notifier.vim +++ /dev/null @@ -1,35 +0,0 @@ -"CLASS: Notifier -"============================================================ -let s:Notifier = {} - -function! s:Notifier.AddListener(event, funcname) - let listeners = s:Notifier.GetListenersForEvent(a:event) - if listeners == [] - let listenersMap = s:Notifier.GetListenersMap() - let listenersMap[a:event] = listeners - endif - call add(listeners, a:funcname) -endfunction - -function! s:Notifier.NotifyListeners(event, path, params) - let event = g:NERDTreeEvent.New(b:NERDTree, a:path, a:event, a:params) - - for listener in s:Notifier.GetListenersForEvent(a:event) - call {listener}(event) - endfor -endfunction - -function! s:Notifier.GetListenersMap() - if !exists("s:refreshListenersMap") - let s:refreshListenersMap = {} - endif - return s:refreshListenersMap -endfunction - -function! s:Notifier.GetListenersForEvent(name) - let listenersMap = s:Notifier.GetListenersMap() - return get(listenersMap, a:name, []) -endfunction - -let g:NERDTreePathNotifier = deepcopy(s:Notifier) - diff --git a/bundle/nerdtree/lib/nerdtree/opener.vim b/bundle/nerdtree/lib/nerdtree/opener.vim deleted file mode 100755 index 845e55c..0000000 --- a/bundle/nerdtree/lib/nerdtree/opener.vim +++ /dev/null @@ -1,336 +0,0 @@ -"CLASS: Opener -"============================================================ -let s:Opener = {} -let g:NERDTreeOpener = s:Opener - -"FUNCTION: s:Opener._bufInWindows(bnum){{{1 -"[[STOLEN FROM VTREEEXPLORER.VIM]] -"Determine the number of windows open to this buffer number. -"Care of Yegappan Lakshman. Thanks! -" -"Args: -"bnum: the subject buffers buffer number -function! s:Opener._bufInWindows(bnum) - let cnt = 0 - let winnum = 1 - while 1 - let bufnum = winbufnr(winnum) - if bufnum < 0 - break - endif - if bufnum ==# a:bnum - let cnt = cnt + 1 - endif - let winnum = winnum + 1 - endwhile - - return cnt -endfunction -"FUNCTION: Opener._checkToCloseTree(newtab) {{{1 -"Check the class options and global options (i.e. NERDTreeQuitOnOpen) to see -"if the tree should be closed now. -" -"Args: -"a:newtab - boolean. If set, only close the tree now if we are opening the -"target in a new tab. This is needed because we have to close tree before we -"leave the tab -function! s:Opener._checkToCloseTree(newtab) - if self._keepopen - return - endif - - if (a:newtab && self._where == 't') || !a:newtab - call nerdtree#closeTreeIfQuitOnOpen() - endif -endfunction - - -"FUNCTION: s:Opener._firstUsableWindow(){{{1 -"find the window number of the first normal window -function! s:Opener._firstUsableWindow() - let i = 1 - while i <= winnr("$") - let bnum = winbufnr(i) - if bnum != -1 && getbufvar(bnum, '&buftype') ==# '' - \ && !getwinvar(i, '&previewwindow') - \ && (!getbufvar(bnum, '&modified') || &hidden) - return i - endif - - let i += 1 - endwhile - return -1 -endfunction - -"FUNCTION: Opener._gotoTargetWin() {{{1 -function! s:Opener._gotoTargetWin() - if b:NERDTreeType ==# "secondary" - if self._where == 'v' - vsplit - elseif self._where == 'h' - split - elseif self._where == 't' - tabnew - endif - else - call self._checkToCloseTree(1) - - if self._where == 'v' - call self._newVSplit() - elseif self._where == 'h' - call self._newSplit() - elseif self._where == 't' - tabnew - elseif self._where == 'p' - call self._previousWindow() - endif - - call self._checkToCloseTree(0) - endif -endfunction - -"FUNCTION: s:Opener._isWindowUsable(winnumber) {{{1 -"Returns 0 if opening a file from the tree in the given window requires it to -"be split, 1 otherwise -" -"Args: -"winnumber: the number of the window in question -function! s:Opener._isWindowUsable(winnumber) - "gotta split if theres only one window (i.e. the NERD tree) - if winnr("$") ==# 1 - return 0 - endif - - let oldwinnr = winnr() - call nerdtree#exec(a:winnumber . "wincmd p") - let specialWindow = getbufvar("%", '&buftype') != '' || getwinvar('%', '&previewwindow') - let modified = &modified - call nerdtree#exec(oldwinnr . "wincmd p") - - "if its a special window e.g. quickfix or another explorer plugin then we - "have to split - if specialWindow - return 0 - endif - - if &hidden - return 1 - endif - - return !modified || self._bufInWindows(winbufnr(a:winnumber)) >= 2 -endfunction - -"FUNCTION: Opener.New(path, opts) {{{1 -"Args: -" -"a:path: The path object that is to be opened. -" -"a:opts: -" -"A dictionary containing the following keys (all optional): -" 'where': Specifies whether the node should be opened in new split/tab or in -" the previous window. Can be either 'v' or 'h' or 't' (for open in -" new tab) -" 'reuse': if a window is displaying the file then jump the cursor there -" 'keepopen': dont close the tree window -" 'stay': open the file, but keep the cursor in the tree win -function! s:Opener.New(path, opts) - let newObj = copy(self) - - let newObj._path = a:path - let newObj._stay = nerdtree#has_opt(a:opts, 'stay') - let newObj._reuse = nerdtree#has_opt(a:opts, 'reuse') - let newObj._keepopen = nerdtree#has_opt(a:opts, 'keepopen') - let newObj._where = has_key(a:opts, 'where') ? a:opts['where'] : '' - let newObj._treetype = b:NERDTreeType - call newObj._saveCursorPos() - - return newObj -endfunction - -"FUNCTION: Opener._newSplit() {{{1 -function! s:Opener._newSplit() - " Save the user's settings for splitbelow and splitright - let savesplitbelow=&splitbelow - let savesplitright=&splitright - - " 'there' will be set to a command to move from the split window - " back to the explorer window - " - " 'back' will be set to a command to move from the explorer window - " back to the newly split window - " - " 'right' and 'below' will be set to the settings needed for - " splitbelow and splitright IF the explorer is the only window. - " - let there= g:NERDTreeWinPos ==# "left" ? "wincmd h" : "wincmd l" - let back = g:NERDTreeWinPos ==# "left" ? "wincmd l" : "wincmd h" - let right= g:NERDTreeWinPos ==# "left" - let below=0 - - " Attempt to go to adjacent window - call nerdtree#exec(back) - - let onlyOneWin = (winnr("$") ==# 1) - - " If no adjacent window, set splitright and splitbelow appropriately - if onlyOneWin - let &splitright=right - let &splitbelow=below - else - " found adjacent window - invert split direction - let &splitright=!right - let &splitbelow=!below - endif - - let splitMode = onlyOneWin ? "vertical" : "" - - " Open the new window - try - exec(splitMode." sp ") - catch /^Vim\%((\a\+)\)\=:E37/ - call nerdtree#putCursorInTreeWin() - throw "NERDTree.FileAlreadyOpenAndModifiedError: ". self._path.str() ." is already open and modified." - catch /^Vim\%((\a\+)\)\=:/ - "do nothing - endtry - - "resize the tree window if no other window was open before - if onlyOneWin - let size = exists("b:NERDTreeOldWindowSize") ? b:NERDTreeOldWindowSize : g:NERDTreeWinSize - call nerdtree#exec(there) - exec("silent ". splitMode ." resize ". size) - call nerdtree#exec('wincmd p') - endif - - " Restore splitmode settings - let &splitbelow=savesplitbelow - let &splitright=savesplitright -endfunction - -"FUNCTION: Opener._newVSplit() {{{1 -function! s:Opener._newVSplit() - let winwidth = winwidth(".") - if winnr("$")==#1 - let winwidth = g:NERDTreeWinSize - endif - - call nerdtree#exec("wincmd p") - vnew - - "resize the nerd tree back to the original size - call nerdtree#putCursorInTreeWin() - exec("silent vertical resize ". winwidth) - call nerdtree#exec('wincmd p') -endfunction - -"FUNCTION: Opener.open(target) {{{1 -function! s:Opener.open(target) - if self._path.isDirectory - call self._openDirectory(a:target) - else - call self._openFile() - endif -endfunction - -"FUNCTION: Opener._openFile() {{{1 -function! s:Opener._openFile() - if self._reuse && self._reuseWindow() - return - endif - - call self._gotoTargetWin() - - if self._treetype ==# "secondary" - call self._path.edit() - else - call self._path.edit() - - - if self._stay - call self._restoreCursorPos() - endif - endif -endfunction - -"FUNCTION: Opener._openDirectory(node) {{{1 -function! s:Opener._openDirectory(node) - if self._treetype ==# "secondary" - call self._gotoTargetWin() - call g:NERDTreeCreator.CreateSecondary(a:node.path.str()) - else - call self._gotoTargetWin() - if empty(self._where) - call a:node.makeRoot() - call b:NERDTree.render() - call a:node.putCursorHere(0, 0) - elseif self._where == 't' - call g:NERDTreeCreator.CreatePrimary(a:node.path.str()) - else - call g:NERDTreeCreator.CreateSecondary(a:node.path.str()) - endif - endif - - if self._stay - call self._restoreCursorPos() - endif -endfunction - -"FUNCTION: Opener._previousWindow() {{{1 -function! s:Opener._previousWindow() - if !self._isWindowUsable(winnr("#")) && self._firstUsableWindow() ==# -1 - call self._newSplit() - else - try - if !self._isWindowUsable(winnr("#")) - call nerdtree#exec(self._firstUsableWindow() . "wincmd w") - else - call nerdtree#exec('wincmd p') - endif - catch /^Vim\%((\a\+)\)\=:E37/ - call nerdtree#putCursorInTreeWin() - throw "NERDTree.FileAlreadyOpenAndModifiedError: ". self._path.str() ." is already open and modified." - catch /^Vim\%((\a\+)\)\=:/ - echo v:exception - endtry - endif -endfunction - -"FUNCTION: Opener._restoreCursorPos(){{{1 -function! s:Opener._restoreCursorPos() - call nerdtree#exec('normal ' . self._tabnr . 'gt') - call nerdtree#exec(bufwinnr(self._bufnr) . 'wincmd w') -endfunction - -"FUNCTION: Opener._reuseWindow(){{{1 -"put the cursor in the first window we find for this file -" -"return 1 if we were successful -function! s:Opener._reuseWindow() - "check the current tab for the window - let winnr = bufwinnr('^' . self._path.str() . '$') - if winnr != -1 - call nerdtree#exec(winnr . "wincmd w") - call self._checkToCloseTree(0) - return 1 - else - "check other tabs - let tabnr = self._path.tabnr() - if tabnr - call self._checkToCloseTree(1) - call nerdtree#exec('normal! ' . tabnr . 'gt') - let winnr = bufwinnr('^' . self._path.str() . '$') - call nerdtree#exec(winnr . "wincmd w") - return 1 - endif - endif - return 0 -endfunction - -"FUNCTION: Opener._saveCursorPos(){{{1 -function! s:Opener._saveCursorPos() - let self._bufnr = bufnr("") - let self._tabnr = tabpagenr() -endfunction - -" vim: set sw=4 sts=4 et fdm=marker: diff --git a/bundle/nerdtree/lib/nerdtree/path.vim b/bundle/nerdtree/lib/nerdtree/path.vim deleted file mode 100755 index 5de1dfe..0000000 --- a/bundle/nerdtree/lib/nerdtree/path.vim +++ /dev/null @@ -1,764 +0,0 @@ -"we need to use this number many times for sorting... so we calculate it only -"once here -let s:NERDTreeSortStarIndex = index(g:NERDTreeSortOrder, '*') - -"CLASS: Path -"============================================================ -let s:Path = {} -let g:NERDTreePath = s:Path - -"FUNCTION: Path.AbsolutePathFor(str) {{{1 -function! s:Path.AbsolutePathFor(str) - let prependCWD = 0 - if nerdtree#runningWindows() - let prependCWD = a:str !~# '^.:\(\\\|\/\)' && a:str !~# '^\(\\\\\|\/\/\)' - else - let prependCWD = a:str !~# '^/' - endif - - let toReturn = a:str - if prependCWD - let toReturn = getcwd() . s:Path.Slash() . a:str - endif - - return toReturn -endfunction - -"FUNCTION: Path.bookmarkNames() {{{1 -function! s:Path.bookmarkNames() - if !exists("self._bookmarkNames") - call self.cacheDisplayString() - endif - return self._bookmarkNames -endfunction - -"FUNCTION: Path.cacheDisplayString() {{{1 -function! s:Path.cacheDisplayString() abort - let self.cachedDisplayString = self.flagSet.renderToString() - - let self.cachedDisplayString .= self.getLastPathComponent(1) - - if self.isExecutable - let self.cachedDisplayString = self.cachedDisplayString . '*' - endif - - let self._bookmarkNames = [] - for i in g:NERDTreeBookmark.Bookmarks() - if i.path.equals(self) - call add(self._bookmarkNames, i.name) - endif - endfor - if !empty(self._bookmarkNames) - let self.cachedDisplayString .= ' {' . join(self._bookmarkNames) . '}' - endif - - if self.isSymLink - let self.cachedDisplayString .= ' -> ' . self.symLinkDest - endif - - if self.isReadOnly - let self.cachedDisplayString .= ' [RO]' - endif -endfunction - -"FUNCTION: Path.changeToDir() {{{1 -function! s:Path.changeToDir() - let dir = self.str({'format': 'Cd'}) - if self.isDirectory ==# 0 - let dir = self.getParent().str({'format': 'Cd'}) - endif - - try - execute "cd " . dir - call nerdtree#echo("CWD is now: " . getcwd()) - catch - throw "NERDTree.PathChangeError: cannot change CWD to " . dir - endtry -endfunction - -"FUNCTION: Path.compareTo() {{{1 -" -"Compares this Path to the given path and returns 0 if they are equal, -1 if -"this Path is "less than" the given path, or 1 if it is "greater". -" -"Args: -"path: the path object to compare this to -" -"Return: -"1, -1 or 0 -function! s:Path.compareTo(path) - let thisPath = self.getLastPathComponent(1) - let thatPath = a:path.getLastPathComponent(1) - - "if the paths are the same then clearly we return 0 - if thisPath ==# thatPath - return 0 - endif - - let thisSS = self.getSortOrderIndex() - let thatSS = a:path.getSortOrderIndex() - - "compare the sort sequences, if they are different then the return - "value is easy - if thisSS < thatSS - return -1 - elseif thisSS > thatSS - return 1 - else - if !g:NERDTreeSortHiddenFirst - let thisPath = substitute(thisPath, '^[._]', '', '') - let thatPath = substitute(thatPath, '^[._]', '', '') - endif - "if the sort sequences are the same then compare the paths - "alphabetically - let pathCompare = g:NERDTreeCaseSensitiveSort ? thisPath <# thatPath : thisPath " - endif - - return " \\`\|\"#%&,?()\*^<>[]" -endfunction - -"FUNCTION: Path.getDir() {{{1 -" -"Returns this path if it is a directory, else this paths parent. -" -"Return: -"a Path object -function! s:Path.getDir() - if self.isDirectory - return self - else - return self.getParent() - endif -endfunction - -"FUNCTION: Path.getParent() {{{1 -" -"Returns a new path object for this paths parent -" -"Return: -"a new Path object -function! s:Path.getParent() - if nerdtree#runningWindows() - let path = self.drive . '\' . join(self.pathSegments[0:-2], '\') - else - let path = '/'. join(self.pathSegments[0:-2], '/') - endif - - return s:Path.New(path) -endfunction - -"FUNCTION: Path.getLastPathComponent(dirSlash) {{{1 -" -"Gets the last part of this path. -" -"Args: -"dirSlash: if 1 then a trailing slash will be added to the returned value for -"directory nodes. -function! s:Path.getLastPathComponent(dirSlash) - if empty(self.pathSegments) - return '' - endif - let toReturn = self.pathSegments[-1] - if a:dirSlash && self.isDirectory - let toReturn = toReturn . '/' - endif - return toReturn -endfunction - -"FUNCTION: Path.getSortOrderIndex() {{{1 -"returns the index of the pattern in g:NERDTreeSortOrder that this path matches -function! s:Path.getSortOrderIndex() - let i = 0 - while i < len(g:NERDTreeSortOrder) - if self.getLastPathComponent(1) =~# g:NERDTreeSortOrder[i] - return i - endif - let i = i + 1 - endwhile - return s:NERDTreeSortStarIndex -endfunction - -"FUNCTION: Path.isUnixHiddenFile() {{{1 -"check for unix hidden files -function! s:Path.isUnixHiddenFile() - return self.getLastPathComponent(0) =~# '^\.' -endfunction - -"FUNCTION: Path.isUnixHiddenPath() {{{1 -"check for unix path with hidden components -function! s:Path.isUnixHiddenPath() - if self.getLastPathComponent(0) =~# '^\.' - return 1 - else - for segment in self.pathSegments - if segment =~# '^\.' - return 1 - endif - endfor - return 0 - endif -endfunction - -"FUNCTION: Path.ignore() {{{1 -"returns true if this path should be ignored -function! s:Path.ignore() - "filter out the user specified paths to ignore - if b:NERDTreeIgnoreEnabled - for i in g:NERDTreeIgnore - if self._ignorePatternMatches(i) - return 1 - endif - endfor - endif - - "dont show hidden files unless instructed to - if b:NERDTreeShowHidden ==# 0 && self.isUnixHiddenFile() - return 1 - endif - - if b:NERDTreeShowFiles ==# 0 && self.isDirectory ==# 0 - return 1 - endif - - if exists("*NERDTreeCustomIgnoreFilter") && NERDTreeCustomIgnoreFilter(self) - return 1 - endif - - return 0 -endfunction - -"FUNCTION: Path._ignorePatternMatches(pattern) {{{1 -"returns true if this path matches the given ignore pattern -function! s:Path._ignorePatternMatches(pattern) - let pat = a:pattern - if strpart(pat,len(pat)-7) == '[[dir]]' - if !self.isDirectory - return 0 - endif - let pat = strpart(pat,0, len(pat)-7) - elseif strpart(pat,len(pat)-8) == '[[file]]' - if self.isDirectory - return 0 - endif - let pat = strpart(pat,0, len(pat)-8) - endif - - return self.getLastPathComponent(0) =~# pat -endfunction - -"FUNCTION: Path.isUnder(path) {{{1 -"return 1 if this path is somewhere under the given path in the filesystem. -" -"a:path should be a dir -function! s:Path.isUnder(path) - if a:path.isDirectory == 0 - return 0 - endif - - let this = self.str() - let that = a:path.str() - return stridx(this, that . s:Path.Slash()) == 0 -endfunction - -"FUNCTION: Path.JoinPathStrings(...) {{{1 -function! s:Path.JoinPathStrings(...) - let components = [] - for i in a:000 - let components = extend(components, split(i, '/')) - endfor - return '/' . join(components, '/') -endfunction - -"FUNCTION: Path.equals() {{{1 -" -"Determines whether 2 path objects are "equal". -"They are equal if the paths they represent are the same -" -"Args: -"path: the other path obj to compare this with -function! s:Path.equals(path) - return self.str() ==# a:path.str() -endfunction - -"FUNCTION: Path.New() {{{1 -"The Constructor for the Path object -function! s:Path.New(path) - let newPath = copy(self) - - call newPath.readInfoFromDisk(s:Path.AbsolutePathFor(a:path)) - - let newPath.cachedDisplayString = "" - let newPath.flagSet = g:NERDTreeFlagSet.New() - - return newPath -endfunction - -"FUNCTION: Path.Slash() {{{1 -"return the slash to use for the current OS -function! s:Path.Slash() - return nerdtree#runningWindows() ? '\' : '/' -endfunction - -"FUNCTION: Path.Resolve() {{{1 -"Invoke the vim resolve() function and return the result -"This is necessary because in some versions of vim resolve() removes trailing -"slashes while in other versions it doesn't. This always removes the trailing -"slash -function! s:Path.Resolve(path) - let tmp = resolve(a:path) - return tmp =~# '.\+/$' ? substitute(tmp, '/$', '', '') : tmp -endfunction - -"FUNCTION: Path.readInfoFromDisk(fullpath) {{{1 -" -" -"Throws NERDTree.Path.InvalidArguments exception. -function! s:Path.readInfoFromDisk(fullpath) - call self.extractDriveLetter(a:fullpath) - - let fullpath = s:Path.WinToUnixPath(a:fullpath) - - if getftype(fullpath) ==# "fifo" - throw "NERDTree.InvalidFiletypeError: Cant handle FIFO files: " . a:fullpath - endif - - let self.pathSegments = split(fullpath, '/') - - let self.isReadOnly = 0 - if isdirectory(a:fullpath) - let self.isDirectory = 1 - elseif filereadable(a:fullpath) - let self.isDirectory = 0 - let self.isReadOnly = filewritable(a:fullpath) ==# 0 - else - throw "NERDTree.InvalidArgumentsError: Invalid path = " . a:fullpath - endif - - let self.isExecutable = 0 - if !self.isDirectory - let self.isExecutable = getfperm(a:fullpath) =~# 'x' - endif - - "grab the last part of the path (minus the trailing slash) - let lastPathComponent = self.getLastPathComponent(0) - - "get the path to the new node with the parent dir fully resolved - let hardPath = s:Path.Resolve(self.strTrunk()) . '/' . lastPathComponent - - "if the last part of the path is a symlink then flag it as such - let self.isSymLink = (s:Path.Resolve(hardPath) != hardPath) - if self.isSymLink - let self.symLinkDest = s:Path.Resolve(fullpath) - - "if the link is a dir then slap a / on the end of its dest - if isdirectory(self.symLinkDest) - - "we always wanna treat MS windows shortcuts as files for - "simplicity - if hardPath !~# '\.lnk$' - - let self.symLinkDest = self.symLinkDest . '/' - endif - endif - endif -endfunction - -"FUNCTION: Path.refresh() {{{1 -function! s:Path.refresh() - call self.readInfoFromDisk(self.str()) - call g:NERDTreePathNotifier.NotifyListeners('refresh', self, {}) - call self.cacheDisplayString() -endfunction - -"FUNCTION: Path.refreshFlags() {{{1 -function! s:Path.refreshFlags() - call g:NERDTreePathNotifier.NotifyListeners('refreshFlags', self, {}) - call self.cacheDisplayString() -endfunction - -"FUNCTION: Path.rename() {{{1 -" -"Renames this node on the filesystem -function! s:Path.rename(newPath) - if a:newPath ==# '' - throw "NERDTree.InvalidArgumentsError: Invalid newPath for renaming = ". a:newPath - endif - - let success = rename(self.str(), a:newPath) - if success != 0 - throw "NERDTree.PathRenameError: Could not rename: '" . self.str() . "'" . 'to:' . a:newPath - endif - call self.readInfoFromDisk(a:newPath) - - for i in self.bookmarkNames() - let b = g:NERDTreeBookmark.BookmarkFor(i) - call b.setPath(copy(self)) - endfor - call g:NERDTreeBookmark.Write() -endfunction - -"FUNCTION: Path.str() {{{1 -" -"Returns a string representation of this Path -" -"Takes an optional dictionary param to specify how the output should be -"formatted. -" -"The dict may have the following keys: -" 'format' -" 'escape' -" 'truncateTo' -" -"The 'format' key may have a value of: -" 'Cd' - a string to be used with the :cd command -" 'Edit' - a string to be used with :e :sp :new :tabedit etc -" 'UI' - a string used in the NERD tree UI -" -"The 'escape' key, if specified will cause the output to be escaped with -"shellescape() -" -"The 'truncateTo' key causes the resulting string to be truncated to the value -"'truncateTo' maps to. A '<' char will be prepended. -function! s:Path.str(...) - let options = a:0 ? a:1 : {} - let toReturn = "" - - if has_key(options, 'format') - let format = options['format'] - if has_key(self, '_strFor' . format) - exec 'let toReturn = self._strFor' . format . '()' - else - raise 'NERDTree.UnknownFormatError: unknown format "'. format .'"' - endif - else - let toReturn = self._str() - endif - - if nerdtree#has_opt(options, 'escape') - let toReturn = shellescape(toReturn) - endif - - if has_key(options, 'truncateTo') - let limit = options['truncateTo'] - if len(toReturn) > limit - let toReturn = "<" . strpart(toReturn, len(toReturn) - limit + 1) - endif - endif - - return toReturn -endfunction - -"FUNCTION: Path._strForUI() {{{1 -function! s:Path._strForUI() - let toReturn = '/' . join(self.pathSegments, '/') - if self.isDirectory && toReturn != '/' - let toReturn = toReturn . '/' - endif - return toReturn -endfunction - -"FUNCTION: Path._strForCd() {{{1 -" -" returns a string that can be used with :cd -function! s:Path._strForCd() - return escape(self.str(), self._escChars()) -endfunction - -"FUNCTION: Path._strForEdit() {{{1 -" -"Return: the string for this path that is suitable to be used with the :edit -"command -function! s:Path._strForEdit() - let p = escape(self.str({'format': 'UI'}), self._escChars()) - let cwd = getcwd() . s:Path.Slash() - - "return a relative path if we can - let isRelative = 0 - if nerdtree#runningWindows() - let isRelative = stridx(tolower(p), tolower(cwd)) == 0 - else - let isRelative = stridx(p, cwd) == 0 - endif - - if isRelative - let p = strpart(p, strlen(cwd)) - - "handle the edge case where the file begins with a + (vim interprets - "the +foo in `:e +foo` as an option to :edit) - if p[0] == "+" - let p = '\' . p - endif - endif - - if p ==# '' - let p = '.' - endif - - return p -endfunction - -"FUNCTION: Path._strForGlob() {{{1 -function! s:Path._strForGlob() - let lead = s:Path.Slash() - - "if we are running windows then slap a drive letter on the front - if nerdtree#runningWindows() - let lead = self.drive . '\' - endif - - let toReturn = lead . join(self.pathSegments, s:Path.Slash()) - - if !nerdtree#runningWindows() - let toReturn = escape(toReturn, self._escChars()) - endif - return toReturn -endfunction - -"FUNCTION: Path._str() {{{1 -" -"Gets the string path for this path object that is appropriate for the OS. -"EG, in windows c:\foo\bar -" in *nix /foo/bar -function! s:Path._str() - let lead = s:Path.Slash() - - "if we are running windows then slap a drive letter on the front - if nerdtree#runningWindows() - let lead = self.drive . '\' - endif - - return lead . join(self.pathSegments, s:Path.Slash()) -endfunction - -"FUNCTION: Path.strTrunk() {{{1 -"Gets the path without the last segment on the end. -function! s:Path.strTrunk() - return self.drive . '/' . join(self.pathSegments[0:-2], '/') -endfunction - -" FUNCTION: Path.tabnr() {{{1 -" return the number of the first tab that is displaying this file -" -" return 0 if no tab was found -function! s:Path.tabnr() - let str = self.str() - for t in range(tabpagenr('$')) - for b in tabpagebuflist(t+1) - if str == expand('#' . b . ':p') - return t+1 - endif - endfor - endfor - return 0 -endfunction - -"FUNCTION: Path.WinToUnixPath(pathstr){{{1 -"Takes in a windows path and returns the unix equiv -" -"A class level method -" -"Args: -"pathstr: the windows path to convert -function! s:Path.WinToUnixPath(pathstr) - if !nerdtree#runningWindows() - return a:pathstr - endif - - let toReturn = a:pathstr - - "remove the x:\ of the front - let toReturn = substitute(toReturn, '^.*:\(\\\|/\)\?', '/', "") - - "remove the \\ network share from the front - let toReturn = substitute(toReturn, '^\(\\\\\|\/\/\)[^\\\/]*\(\\\|\/\)[^\\\/]*\(\\\|\/\)\?', '/', "") - - "convert all \ chars to / - let toReturn = substitute(toReturn, '\', '/', "g") - - return toReturn -endfunction - -" vim: set sw=4 sts=4 et fdm=marker: diff --git a/bundle/nerdtree/lib/nerdtree/tree_dir_node.vim b/bundle/nerdtree/lib/nerdtree/tree_dir_node.vim deleted file mode 100755 index a24c270..0000000 --- a/bundle/nerdtree/lib/nerdtree/tree_dir_node.vim +++ /dev/null @@ -1,543 +0,0 @@ -"CLASS: TreeDirNode -"A subclass of NERDTreeFileNode. -" -"The 'composite' part of the file/dir composite. -"============================================================ -let s:TreeDirNode = copy(g:NERDTreeFileNode) -let g:NERDTreeDirNode = s:TreeDirNode - -"FUNCTION: TreeDirNode.AbsoluteTreeRoot(){{{1 -"class method that returns the highest cached ancestor of the current root -function! s:TreeDirNode.AbsoluteTreeRoot() - let currentNode = b:NERDTreeRoot - while currentNode.parent != {} - let currentNode = currentNode.parent - endwhile - return currentNode -endfunction - -"FUNCTION: TreeDirNode.activate([options]) {{{1 -unlet s:TreeDirNode.activate -function! s:TreeDirNode.activate(...) - let opts = a:0 ? a:1 : {} - call self.toggleOpen(opts) - call b:NERDTree.render() - call self.putCursorHere(0, 0) -endfunction - -"FUNCTION: TreeDirNode.addChild(treenode, inOrder) {{{1 -"Adds the given treenode to the list of children for this node -" -"Args: -"-treenode: the node to add -"-inOrder: 1 if the new node should be inserted in sorted order -function! s:TreeDirNode.addChild(treenode, inOrder) - call add(self.children, a:treenode) - let a:treenode.parent = self - - if a:inOrder - call self.sortChildren() - endif -endfunction - -"FUNCTION: TreeDirNode.close() {{{1 -"Closes this directory -function! s:TreeDirNode.close() - let self.isOpen = 0 -endfunction - -"FUNCTION: TreeDirNode.closeChildren() {{{1 -"Closes all the child dir nodes of this node -function! s:TreeDirNode.closeChildren() - for i in self.children - if i.path.isDirectory - call i.close() - call i.closeChildren() - endif - endfor -endfunction - -"FUNCTION: TreeDirNode.createChild(path, inOrder) {{{1 -"Instantiates a new child node for this node with the given path. The new -"nodes parent is set to this node. -" -"Args: -"path: a Path object that this node will represent/contain -"inOrder: 1 if the new node should be inserted in sorted order -" -"Returns: -"the newly created node -function! s:TreeDirNode.createChild(path, inOrder) - let newTreeNode = g:NERDTreeFileNode.New(a:path) - call self.addChild(newTreeNode, a:inOrder) - return newTreeNode -endfunction - -"FUNCTION: TreeDirNode.findNode(path) {{{1 -"Will find one of the children (recursively) that has the given path -" -"Args: -"path: a path object -unlet s:TreeDirNode.findNode -function! s:TreeDirNode.findNode(path) - if a:path.equals(self.path) - return self - endif - if stridx(a:path.str(), self.path.str(), 0) ==# -1 - return {} - endif - - if self.path.isDirectory - for i in self.children - let retVal = i.findNode(a:path) - if retVal != {} - return retVal - endif - endfor - endif - return {} -endfunction - -"FUNCTION: TreeDirNode.getChildCount() {{{1 -"Returns the number of children this node has -function! s:TreeDirNode.getChildCount() - return len(self.children) -endfunction - -"FUNCTION: TreeDirNode.getChild(path) {{{1 -"Returns child node of this node that has the given path or {} if no such node -"exists. -" -"This function doesnt not recurse into child dir nodes -" -"Args: -"path: a path object -function! s:TreeDirNode.getChild(path) - if stridx(a:path.str(), self.path.str(), 0) ==# -1 - return {} - endif - - let index = self.getChildIndex(a:path) - if index ==# -1 - return {} - else - return self.children[index] - endif - -endfunction - -"FUNCTION: TreeDirNode.getChildByIndex(indx, visible) {{{1 -"returns the child at the given index -"Args: -"indx: the index to get the child from -"visible: 1 if only the visible children array should be used, 0 if all the -"children should be searched. -function! s:TreeDirNode.getChildByIndex(indx, visible) - let array_to_search = a:visible? self.getVisibleChildren() : self.children - if a:indx > len(array_to_search) - throw "NERDTree.InvalidArgumentsError: Index is out of bounds." - endif - return array_to_search[a:indx] -endfunction - -"FUNCTION: TreeDirNode.getChildIndex(path) {{{1 -"Returns the index of the child node of this node that has the given path or -"-1 if no such node exists. -" -"This function doesnt not recurse into child dir nodes -" -"Args: -"path: a path object -function! s:TreeDirNode.getChildIndex(path) - if stridx(a:path.str(), self.path.str(), 0) ==# -1 - return -1 - endif - - "do a binary search for the child - let a = 0 - let z = self.getChildCount() - while a < z - let mid = (a+z)/2 - let diff = a:path.compareTo(self.children[mid].path) - - if diff ==# -1 - let z = mid - elseif diff ==# 1 - let a = mid+1 - else - return mid - endif - endwhile - return -1 -endfunction - -"FUNCTION: TreeDirNode.GetSelected() {{{1 -"Returns the current node if it is a dir node, or else returns the current -"nodes parent -unlet s:TreeDirNode.GetSelected -function! s:TreeDirNode.GetSelected() - let currentDir = g:NERDTreeFileNode.GetSelected() - if currentDir != {} && !currentDir.isRoot() - if currentDir.path.isDirectory ==# 0 - let currentDir = currentDir.parent - endif - endif - return currentDir -endfunction - -"FUNCTION: TreeDirNode.getVisibleChildCount() {{{1 -"Returns the number of visible children this node has -function! s:TreeDirNode.getVisibleChildCount() - return len(self.getVisibleChildren()) -endfunction - -"FUNCTION: TreeDirNode.getVisibleChildren() {{{1 -"Returns a list of children to display for this node, in the correct order -" -"Return: -"an array of treenodes -function! s:TreeDirNode.getVisibleChildren() - let toReturn = [] - for i in self.children - if i.path.ignore() ==# 0 - call add(toReturn, i) - endif - endfor - return toReturn -endfunction - -"FUNCTION: TreeDirNode.hasVisibleChildren() {{{1 -"returns 1 if this node has any childre, 0 otherwise.. -function! s:TreeDirNode.hasVisibleChildren() - return self.getVisibleChildCount() != 0 -endfunction - -"FUNCTION: TreeDirNode._initChildren() {{{1 -"Removes all childen from this node and re-reads them -" -"Args: -"silent: 1 if the function should not echo any "please wait" messages for -"large directories -" -"Return: the number of child nodes read -function! s:TreeDirNode._initChildren(silent) - "remove all the current child nodes - let self.children = [] - - "get an array of all the files in the nodes dir - let dir = self.path - let globDir = dir.str({'format': 'Glob'}) - - if version >= 703 - let filesStr = globpath(globDir, '*', !g:NERDTreeRespectWildIgnore) . "\n" . globpath(globDir, '.*', !g:NERDTreeRespectWildIgnore) - else - let filesStr = globpath(globDir, '*') . "\n" . globpath(globDir, '.*') - endif - - let files = split(filesStr, "\n") - - if !a:silent && len(files) > g:NERDTreeNotificationThreshold - call nerdtree#echo("Please wait, caching a large dir ...") - endif - - let invalidFilesFound = 0 - for i in files - - "filter out the .. and . directories - "Note: we must match .. AND ../ cos sometimes the globpath returns - "../ for path with strange chars (eg $) - if i !~# '\/\.\.\/\?$' && i !~# '\/\.\/\?$' - - "put the next file in a new node and attach it - try - let path = g:NERDTreePath.New(i) - call self.createChild(path, 0) - call g:NERDTreePathNotifier.NotifyListeners('init', path, {}) - catch /^NERDTree.\(InvalidArguments\|InvalidFiletype\)Error/ - let invalidFilesFound += 1 - endtry - endif - endfor - - call self.sortChildren() - - if !a:silent && len(files) > g:NERDTreeNotificationThreshold - call nerdtree#echo("Please wait, caching a large dir ... DONE (". self.getChildCount() ." nodes cached).") - endif - - if invalidFilesFound - call nerdtree#echoWarning(invalidFilesFound . " file(s) could not be loaded into the NERD tree") - endif - return self.getChildCount() -endfunction - -"FUNCTION: TreeDirNode.New(path) {{{1 -"Returns a new TreeNode object with the given path and parent -" -"Args: -"path: a path object representing the full filesystem path to the file/dir that the node represents -unlet s:TreeDirNode.New -function! s:TreeDirNode.New(path) - if a:path.isDirectory != 1 - throw "NERDTree.InvalidArgumentsError: A TreeDirNode object must be instantiated with a directory Path object." - endif - - let newTreeNode = copy(self) - let newTreeNode.path = a:path - - let newTreeNode.isOpen = 0 - let newTreeNode.children = [] - - let newTreeNode.parent = {} - - return newTreeNode -endfunction - -"FUNCTION: TreeDirNode.open([opts]) {{{1 -"Open the dir in the current tree or in a new tree elsewhere. -" -"If opening in the current tree, return the number of cached nodes. -unlet s:TreeDirNode.open -function! s:TreeDirNode.open(...) - let opts = a:0 ? a:1 : {} - - if has_key(opts, 'where') && !empty(opts['where']) - let opener = g:NERDTreeOpener.New(self.path, opts) - call opener.open(self) - else - let self.isOpen = 1 - if self.children ==# [] - return self._initChildren(0) - else - return 0 - endif - endif -endfunction - -"FUNCTION: TreeDirNode.openAlong([opts]) {{{1 -"recursive open the dir if it has only one directory child. -" -"return the level of opened directories. -function! s:TreeDirNode.openAlong(...) - let opts = a:0 ? a:1 : {} - let level = 0 - - let node = self - while node.path.isDirectory - call node.open(opts) - let level += 1 - if node.getVisibleChildCount() == 1 - let node = node.getChildByIndex(0, 1) - else - break - endif - endwhile - return level -endfunction - -" FUNCTION: TreeDirNode.openExplorer() {{{1 -" opens an explorer window for this node in the previous window (could be a -" nerd tree or a netrw) -function! s:TreeDirNode.openExplorer() - call self.open({'where': 'p'}) -endfunction - -"FUNCTION: TreeDirNode.openInNewTab(options) {{{1 -unlet s:TreeDirNode.openInNewTab -function! s:TreeDirNode.openInNewTab(options) - call nerdtree#deprecated('TreeDirNode.openInNewTab', 'is deprecated, use open() instead') - call self.open({'where': 't'}) -endfunction - -"FUNCTION: TreeDirNode._openInNewTab() {{{1 -function! s:TreeDirNode._openInNewTab() - tabnew - call g:NERDTreeCreator.CreatePrimary(self.path.str()) -endfunction - -"FUNCTION: TreeDirNode.openRecursively() {{{1 -"Opens this treenode and all of its children whose paths arent 'ignored' -"because of the file filters. -" -"This method is actually a wrapper for the OpenRecursively2 method which does -"the work. -function! s:TreeDirNode.openRecursively() - call self._openRecursively2(1) -endfunction - -"FUNCTION: TreeDirNode._openRecursively2() {{{1 -"Opens this all children of this treenode recursively if either: -" *they arent filtered by file filters -" *a:forceOpen is 1 -" -"Args: -"forceOpen: 1 if this node should be opened regardless of file filters -function! s:TreeDirNode._openRecursively2(forceOpen) - if self.path.ignore() ==# 0 || a:forceOpen - let self.isOpen = 1 - if self.children ==# [] - call self._initChildren(1) - endif - - for i in self.children - if i.path.isDirectory ==# 1 - call i._openRecursively2(0) - endif - endfor - endif -endfunction - -"FUNCTION: TreeDirNode.refresh() {{{1 -unlet s:TreeDirNode.refresh -function! s:TreeDirNode.refresh() - call self.path.refresh() - - "if this node was ever opened, refresh its children - if self.isOpen || !empty(self.children) - "go thru all the files/dirs under this node - let newChildNodes = [] - let invalidFilesFound = 0 - let dir = self.path - let globDir = dir.str({'format': 'Glob'}) - let filesStr = globpath(globDir, '*') . "\n" . globpath(globDir, '.*') - let files = split(filesStr, "\n") - for i in files - "filter out the .. and . directories - "Note: we must match .. AND ../ cos sometimes the globpath returns - "../ for path with strange chars (eg $) - if i !~# '\/\.\.\/\?$' && i !~# '\/\.\/\?$' - - try - "create a new path and see if it exists in this nodes children - let path = g:NERDTreePath.New(i) - let newNode = self.getChild(path) - if newNode != {} - call newNode.refresh() - call add(newChildNodes, newNode) - - "the node doesnt exist so create it - else - let newNode = g:NERDTreeFileNode.New(path) - let newNode.parent = self - call add(newChildNodes, newNode) - endif - - - catch /^NERDTree.\(InvalidArguments\|InvalidFiletype\)Error/ - let invalidFilesFound = 1 - endtry - endif - endfor - - "swap this nodes children out for the children we just read/refreshed - let self.children = newChildNodes - call self.sortChildren() - - if invalidFilesFound - call nerdtree#echoWarning("some files could not be loaded into the NERD tree") - endif - endif -endfunction - -"FUNCTION: TreeDirNode.refreshFlags() {{{1 -unlet s:TreeDirNode.refreshFlags -function! s:TreeDirNode.refreshFlags() - call self.path.refreshFlags() - for i in self.children - call i.refreshFlags() - endfor -endfunction - -"FUNCTION: TreeDirNode.refreshDirFlags() {{{1 -function! s:TreeDirNode.refreshDirFlags() - call self.path.refreshFlags() -endfunction - -"FUNCTION: TreeDirNode.reveal(path) {{{1 -"reveal the given path, i.e. cache and open all treenodes needed to display it -"in the UI -function! s:TreeDirNode.reveal(path) - if !a:path.isUnder(self.path) - throw "NERDTree.InvalidArgumentsError: " . a:path.str() . " should be under " . self.path.str() - endif - - call self.open() - - if self.path.equals(a:path.getParent()) - let n = self.findNode(a:path) - call b:NERDTree.render() - call n.putCursorHere(1,0) - return - endif - - let p = a:path - while !p.getParent().equals(self.path) - let p = p.getParent() - endwhile - - let n = self.findNode(p) - call n.reveal(a:path) -endfunction - -"FUNCTION: TreeDirNode.removeChild(treenode) {{{1 -" -"Removes the given treenode from this nodes set of children -" -"Args: -"treenode: the node to remove -" -"Throws a NERDTree.ChildNotFoundError if the given treenode is not found -function! s:TreeDirNode.removeChild(treenode) - for i in range(0, self.getChildCount()-1) - if self.children[i].equals(a:treenode) - call remove(self.children, i) - return - endif - endfor - - throw "NERDTree.ChildNotFoundError: child node was not found" -endfunction - -"FUNCTION: TreeDirNode.sortChildren() {{{1 -" -"Sorts the children of this node according to alphabetical order and the -"directory priority. -" -function! s:TreeDirNode.sortChildren() - let CompareFunc = function("nerdtree#compareNodes") - call sort(self.children, CompareFunc) -endfunction - -"FUNCTION: TreeDirNode.toggleOpen([options]) {{{1 -"Opens this directory if it is closed and vice versa -function! s:TreeDirNode.toggleOpen(...) - let opts = a:0 ? a:1 : {} - if self.isOpen ==# 1 - call self.close() - else - if g:NERDTreeCascadeOpenSingleChildDir == 0 - call self.open(opts) - else - call self.openAlong(opts) - endif - endif -endfunction - -"FUNCTION: TreeDirNode.transplantChild(newNode) {{{1 -"Replaces the child of this with the given node (where the child node's full -"path matches a:newNode's fullpath). The search for the matching node is -"non-recursive -" -"Arg: -"newNode: the node to graft into the tree -function! s:TreeDirNode.transplantChild(newNode) - for i in range(0, self.getChildCount()-1) - if self.children[i].equals(a:newNode) - let self.children[i] = a:newNode - let a:newNode.parent = self - break - endif - endfor -endfunction - -" vim: set sw=4 sts=4 et fdm=marker: diff --git a/bundle/nerdtree/lib/nerdtree/tree_file_node.vim b/bundle/nerdtree/lib/nerdtree/tree_file_node.vim deleted file mode 100755 index b4924d7..0000000 --- a/bundle/nerdtree/lib/nerdtree/tree_file_node.vim +++ /dev/null @@ -1,431 +0,0 @@ -"CLASS: TreeFileNode -"This class is the parent of the TreeDirNode class and is the -"'Component' part of the composite design pattern between the treenode -"classes. -"============================================================ -let s:TreeFileNode = {} -let g:NERDTreeFileNode = s:TreeFileNode - -"FUNCTION: TreeFileNode.activate(...) {{{1 -function! s:TreeFileNode.activate(...) - call self.open(a:0 ? a:1 : {}) -endfunction - -"FUNCTION: TreeFileNode.bookmark(name) {{{1 -"bookmark this node with a:name -function! s:TreeFileNode.bookmark(name) - - "if a bookmark exists with the same name and the node is cached then save - "it so we can update its display string - let oldMarkedNode = {} - try - let oldMarkedNode = g:NERDTreeBookmark.GetNodeForName(a:name, 1) - catch /^NERDTree.BookmarkNotFoundError/ - catch /^NERDTree.BookmarkedNodeNotFoundError/ - endtry - - call g:NERDTreeBookmark.AddBookmark(a:name, self.path) - call self.path.cacheDisplayString() - call g:NERDTreeBookmark.Write() - - if !empty(oldMarkedNode) - call oldMarkedNode.path.cacheDisplayString() - endif -endfunction - -"FUNCTION: TreeFileNode.cacheParent() {{{1 -"initializes self.parent if it isnt already -function! s:TreeFileNode.cacheParent() - if empty(self.parent) - let parentPath = self.path.getParent() - if parentPath.equals(self.path) - throw "NERDTree.CannotCacheParentError: already at root" - endif - let self.parent = s:TreeFileNode.New(parentPath) - endif -endfunction - -"FUNCTION: TreeFileNode.clearBookmarks() {{{1 -function! s:TreeFileNode.clearBookmarks() - for i in g:NERDTreeBookmark.Bookmarks() - if i.path.equals(self.path) - call i.delete() - end - endfor - call self.path.cacheDisplayString() -endfunction - -"FUNCTION: TreeFileNode.copy(dest) {{{1 -function! s:TreeFileNode.copy(dest) - call self.path.copy(a:dest) - let newPath = g:NERDTreePath.New(a:dest) - let parent = b:NERDTreeRoot.findNode(newPath.getParent()) - if !empty(parent) - call parent.refresh() - return parent.findNode(newPath) - else - return {} - endif -endfunction - -"FUNCTION: TreeFileNode.delete {{{1 -"Removes this node from the tree and calls the Delete method for its path obj -function! s:TreeFileNode.delete() - call self.path.delete() - call self.parent.removeChild(self) -endfunction - -"FUNCTION: TreeFileNode.displayString() {{{1 -" -"Returns a string that specifies how the node should be represented as a -"string -" -"Return: -"a string that can be used in the view to represent this node -function! s:TreeFileNode.displayString() - return self.path.displayString() -endfunction - -"FUNCTION: TreeFileNode.equals(treenode) {{{1 -" -"Compares this treenode to the input treenode and returns 1 if they are the -"same node. -" -"Use this method instead of == because sometimes when the treenodes contain -"many children, vim seg faults when doing == -" -"Args: -"treenode: the other treenode to compare to -function! s:TreeFileNode.equals(treenode) - return self.path.str() ==# a:treenode.path.str() -endfunction - -"FUNCTION: TreeFileNode.findNode(path) {{{1 -"Returns self if this node.path.Equals the given path. -"Returns {} if not equal. -" -"Args: -"path: the path object to compare against -function! s:TreeFileNode.findNode(path) - if a:path.equals(self.path) - return self - endif - return {} -endfunction - -"FUNCTION: TreeFileNode.findOpenDirSiblingWithVisibleChildren(direction) {{{1 -" -"Finds the next sibling for this node in the indicated direction. This sibling -"must be a directory and may/may not have children as specified. -" -"Args: -"direction: 0 if you want to find the previous sibling, 1 for the next sibling -" -"Return: -"a treenode object or {} if no appropriate sibling could be found -function! s:TreeFileNode.findOpenDirSiblingWithVisibleChildren(direction) - "if we have no parent then we can have no siblings - if self.parent != {} - let nextSibling = self.findSibling(a:direction) - - while nextSibling != {} - if nextSibling.path.isDirectory && nextSibling.hasVisibleChildren() && nextSibling.isOpen - return nextSibling - endif - let nextSibling = nextSibling.findSibling(a:direction) - endwhile - endif - - return {} -endfunction - -"FUNCTION: TreeFileNode.findSibling(direction) {{{1 -" -"Finds the next sibling for this node in the indicated direction -" -"Args: -"direction: 0 if you want to find the previous sibling, 1 for the next sibling -" -"Return: -"a treenode object or {} if no sibling could be found -function! s:TreeFileNode.findSibling(direction) - "if we have no parent then we can have no siblings - if self.parent != {} - - "get the index of this node in its parents children - let siblingIndx = self.parent.getChildIndex(self.path) - - if siblingIndx != -1 - "move a long to the next potential sibling node - let siblingIndx = a:direction ==# 1 ? siblingIndx+1 : siblingIndx-1 - - "keep moving along to the next sibling till we find one that is valid - let numSiblings = self.parent.getChildCount() - while siblingIndx >= 0 && siblingIndx < numSiblings - - "if the next node is not an ignored node (i.e. wont show up in the - "view) then return it - if self.parent.children[siblingIndx].path.ignore() ==# 0 - return self.parent.children[siblingIndx] - endif - - "go to next node - let siblingIndx = a:direction ==# 1 ? siblingIndx+1 : siblingIndx-1 - endwhile - endif - endif - - return {} -endfunction - -"FUNCTION: TreeFileNode.GetRootForTab(){{{1 -"get the root node for this tab -function! s:TreeFileNode.GetRootForTab() - if g:NERDTree.ExistsForTab() - return getbufvar(t:NERDTreeBufName, 'NERDTreeRoot') - end - return {} -endfunction - -"FUNCTION: TreeFileNode.GetSelected() {{{1 -"gets the treenode that the cursor is currently over -function! s:TreeFileNode.GetSelected() - try - let path = b:NERDTree.ui.getPath(line(".")) - if path ==# {} - return {} - endif - return b:NERDTreeRoot.findNode(path) - catch /^NERDTree/ - return {} - endtry -endfunction - -"FUNCTION: TreeFileNode.isVisible() {{{1 -"returns 1 if this node should be visible according to the tree filters and -"hidden file filters (and their on/off status) -function! s:TreeFileNode.isVisible() - return !self.path.ignore() -endfunction - -"FUNCTION: TreeFileNode.isRoot() {{{1 -"returns 1 if this node is b:NERDTreeRoot -function! s:TreeFileNode.isRoot() - if !g:NERDTree.ExistsForBuf() - throw "NERDTree.NoTreeError: No tree exists for the current buffer" - endif - - return self.equals(b:NERDTreeRoot) -endfunction - -"FUNCTION: TreeFileNode.makeRoot() {{{1 -"Make this node the root of the tree -function! s:TreeFileNode.makeRoot() - if self.path.isDirectory - let b:NERDTreeRoot = self - else - call self.cacheParent() - let b:NERDTreeRoot = self.parent - endif - - call b:NERDTreeRoot.open() - - "change dir to the dir of the new root if instructed to - if g:NERDTreeChDirMode ==# 2 - exec "cd " . b:NERDTreeRoot.path.str({'format': 'Edit'}) - endif - - silent doautocmd User NERDTreeNewRoot -endfunction - -"FUNCTION: TreeFileNode.New(path) {{{1 -"Returns a new TreeNode object with the given path and parent -" -"Args: -"path: a path object representing the full filesystem path to the file/dir that the node represents -function! s:TreeFileNode.New(path) - if a:path.isDirectory - return g:NERDTreeDirNode.New(a:path) - else - let newTreeNode = copy(self) - let newTreeNode.path = a:path - let newTreeNode.parent = {} - return newTreeNode - endif -endfunction - -"FUNCTION: TreeFileNode.open() {{{1 -function! s:TreeFileNode.open(...) - let opts = a:0 ? a:1 : {} - let opener = g:NERDTreeOpener.New(self.path, opts) - call opener.open(self) -endfunction - -"FUNCTION: TreeFileNode.openSplit() {{{1 -"Open this node in a new window -function! s:TreeFileNode.openSplit() - call nerdtree#deprecated('TreeFileNode.openSplit', 'is deprecated, use .open() instead.') - call self.open({'where': 'h'}) -endfunction - -"FUNCTION: TreeFileNode.openVSplit() {{{1 -"Open this node in a new vertical window -function! s:TreeFileNode.openVSplit() - call nerdtree#deprecated('TreeFileNode.openVSplit', 'is deprecated, use .open() instead.') - call self.open({'where': 'v'}) -endfunction - -"FUNCTION: TreeFileNode.openInNewTab(options) {{{1 -function! s:TreeFileNode.openInNewTab(options) - echomsg 'TreeFileNode.openInNewTab is deprecated' - call self.open(extend({'where': 't'}, a:options)) -endfunction - -"FUNCTION: TreeFileNode.putCursorHere(isJump, recurseUpward){{{1 -"Places the cursor on the line number this node is rendered on -" -"Args: -"isJump: 1 if this cursor movement should be counted as a jump by vim -"recurseUpward: try to put the cursor on the parent if the this node isnt -"visible -function! s:TreeFileNode.putCursorHere(isJump, recurseUpward) - let ln = b:NERDTree.ui.getLineNum(self) - if ln != -1 - if a:isJump - mark ' - endif - call cursor(ln, col(".")) - else - if a:recurseUpward - let node = self - while node != {} && b:NERDTree.ui.getLineNum(node) ==# -1 - let node = node.parent - call node.open() - endwhile - call b:NERDTree.render() - call node.putCursorHere(a:isJump, 0) - endif - endif -endfunction - -"FUNCTION: TreeFileNode.refresh() {{{1 -function! s:TreeFileNode.refresh() - call self.path.refresh() -endfunction - -"FUNCTION: TreeFileNode.refreshFlags() {{{1 -function! s:TreeFileNode.refreshFlags() - call self.path.refreshFlags() -endfunction - -"FUNCTION: TreeFileNode.rename() {{{1 -"Calls the rename method for this nodes path obj -function! s:TreeFileNode.rename(newName) - let newName = substitute(a:newName, '\(\\\|\/\)$', '', '') - call self.path.rename(newName) - call self.parent.removeChild(self) - - let parentPath = self.path.getParent() - let newParent = b:NERDTreeRoot.findNode(parentPath) - - if newParent != {} - call newParent.createChild(self.path, 1) - call newParent.refresh() - endif -endfunction - -"FUNCTION: TreeFileNode.renderToString {{{1 -"returns a string representation for this tree to be rendered in the view -function! s:TreeFileNode.renderToString() - return self._renderToString(0, 0, [], self.getChildCount() ==# 1) -endfunction - -"Args: -"depth: the current depth in the tree for this call -"drawText: 1 if we should actually draw the line for this node (if 0 then the -"child nodes are rendered only) -"vertMap: a binary array that indicates whether a vertical bar should be draw -"for each depth in the tree -"isLastChild:true if this curNode is the last child of its parent -function! s:TreeFileNode._renderToString(depth, drawText, vertMap, isLastChild) - let output = "" - if a:drawText ==# 1 - - let treeParts = '' - - "get all the leading spaces and vertical tree parts for this line - if a:depth > 1 - for j in a:vertMap[0:-2] - if g:NERDTreeDirArrows - let treeParts = treeParts . ' ' - else - if j ==# 1 - let treeParts = treeParts . '| ' - else - let treeParts = treeParts . ' ' - endif - endif - endfor - endif - - "get the last vertical tree part for this line which will be different - "if this node is the last child of its parent - if !g:NERDTreeDirArrows - if a:isLastChild - let treeParts = treeParts . '`' - else - let treeParts = treeParts . '|' - endif - endif - - "smack the appropriate dir/file symbol on the line before the file/dir - "name itself - if self.path.isDirectory - if self.isOpen - if g:NERDTreeDirArrows - let treeParts = treeParts . '▾ ' - else - let treeParts = treeParts . '~' - endif - else - if g:NERDTreeDirArrows - let treeParts = treeParts . '▸ ' - else - let treeParts = treeParts . '+' - endif - endif - else - if g:NERDTreeDirArrows - let treeParts = treeParts . ' ' - else - let treeParts = treeParts . '-' - endif - endif - let line = treeParts . self.displayString() - - let output = output . line . "\n" - endif - - "if the node is an open dir, draw its children - if self.path.isDirectory ==# 1 && self.isOpen ==# 1 - - let childNodesToDraw = self.getVisibleChildren() - if len(childNodesToDraw) > 0 - - "draw all the nodes children except the last - let lastIndx = len(childNodesToDraw)-1 - if lastIndx > 0 - for i in childNodesToDraw[0:lastIndx-1] - let output = output . i._renderToString(a:depth + 1, 1, add(copy(a:vertMap), 1), 0) - endfor - endif - - "draw the last child, indicating that it IS the last - let output = output . childNodesToDraw[lastIndx]._renderToString(a:depth + 1, 1, add(copy(a:vertMap), 0), 1) - endif - endif - - return output -endfunction - -" vim: set sw=4 sts=4 et fdm=marker: diff --git a/bundle/nerdtree/lib/nerdtree/ui.vim b/bundle/nerdtree/lib/nerdtree/ui.vim deleted file mode 100755 index ed93d80..0000000 --- a/bundle/nerdtree/lib/nerdtree/ui.vim +++ /dev/null @@ -1,332 +0,0 @@ -"CLASS: UI -"============================================================ -let s:UI = {} -let g:NERDTreeUI = s:UI - - -function! s:UI.lolcats() - echomsg "lolcats" -endfunction - -"FUNCTION: s:UI.centerView() {{{2 -"centers the nerd tree window around the cursor (provided the nerd tree -"options permit) -function! s:UI.centerView() - if g:NERDTreeAutoCenter - let current_line = winline() - let lines_to_top = current_line - let lines_to_bottom = winheight(nerdtree#getTreeWinNum()) - current_line - if lines_to_top < g:NERDTreeAutoCenterThreshold || lines_to_bottom < g:NERDTreeAutoCenterThreshold - normal! zz - endif - endif -endfunction - -"FUNCTION: s:UI.new(nerdtree) {{{1 -function! s:UI.New(nerdtree) - let newObj = copy(self) - let newObj.nerdtree = a:nerdtree - return newObj -endfunction - -"FUNCTION: s:UI.getPath(ln) {{{1 -"Gets the full path to the node that is rendered on the given line number -" -"Args: -"ln: the line number to get the path for -" -"Return: -"A path if a node was selected, {} if nothing is selected. -"If the 'up a dir' line was selected then the path to the parent of the -"current root is returned -function! s:UI.getPath(ln) - let line = getline(a:ln) - - let rootLine = self.getRootLineNum() - - "check to see if we have the root node - if a:ln == rootLine - return b:NERDTreeRoot.path - endif - - if !g:NERDTreeDirArrows - " in case called from outside the tree - if line !~# '^ *[|`▸▾ ]' || line =~# '^$' - return {} - endif - endif - - if line ==# nerdtree#treeUpDirLine() - return b:NERDTreeRoot.path.getParent() - endif - - let indent = self._indentLevelFor(line) - - "remove the tree parts and the leading space - let curFile = nerdtree#stripMarkupFromLine(line, 0) - - let wasdir = 0 - if curFile =~# '/$' - let wasdir = 1 - let curFile = substitute(curFile, '/\?$', '/', "") - endif - - let dir = "" - let lnum = a:ln - while lnum > 0 - let lnum = lnum - 1 - let curLine = getline(lnum) - let curLineStripped = nerdtree#stripMarkupFromLine(curLine, 1) - - "have we reached the top of the tree? - if lnum == rootLine - let dir = b:NERDTreeRoot.path.str({'format': 'UI'}) . dir - break - endif - if curLineStripped =~# '/$' - let lpindent = self._indentLevelFor(curLine) - if lpindent < indent - let indent = indent - 1 - - let dir = substitute (curLineStripped,'^\\', "", "") . dir - continue - endif - endif - endwhile - let curFile = b:NERDTreeRoot.path.drive . dir . curFile - let toReturn = g:NERDTreePath.New(curFile) - return toReturn -endfunction - -"FUNCTION: s:UI.getLineNum(file_node){{{1 -"returns the line number this node is rendered on, or -1 if it isnt rendered -function! s:UI.getLineNum(file_node) - "if the node is the root then return the root line no. - if a:file_node.isRoot() - return b:NERDTree.ui.getRootLineNum() - endif - - let totalLines = line("$") - - "the path components we have matched so far - let pathcomponents = [substitute(b:NERDTreeRoot.path.str({'format': 'UI'}), '/ *$', '', '')] - "the index of the component we are searching for - let curPathComponent = 1 - - let fullpath = a:file_node.path.str({'format': 'UI'}) - - let lnum = b:NERDTree.ui.getRootLineNum() - while lnum > 0 - let lnum = lnum + 1 - "have we reached the bottom of the tree? - if lnum ==# totalLines+1 - return -1 - endif - - let curLine = getline(lnum) - - let indent = self._indentLevelFor(curLine) - if indent ==# curPathComponent - let curLine = nerdtree#stripMarkupFromLine(curLine, 1) - - let curPath = join(pathcomponents, '/') . '/' . curLine - if stridx(fullpath, curPath, 0) ==# 0 - if fullpath ==# curPath || strpart(fullpath, len(curPath)-1,1) ==# '/' - let curLine = substitute(curLine, '/ *$', '', '') - call add(pathcomponents, curLine) - let curPathComponent = curPathComponent + 1 - - if fullpath ==# curPath - return lnum - endif - endif - endif - endif - endwhile - return -1 -endfunction - - -"FUNCTION: s:UI.getRootLineNum(){{{1 -"gets the line number of the root node -function! s:UI.getRootLineNum() - let rootLine = 1 - while getline(rootLine) !~# '^\(/\|<\)' - let rootLine = rootLine + 1 - endwhile - return rootLine -endfunction - -"FUNCTION: s:UI._indentLevelFor(line) {{{2 -function! s:UI._indentLevelFor(line) - let level = match(a:line, '[^ \-+~▸▾`|]') / nerdtree#treeWid() - " check if line includes arrows - if match(a:line, '[▸▾]') > -1 - " decrement level as arrow uses 3 ascii chars - let level = level - 1 - endif - return level -endfunction - - -"FUNCTION: s:UI.restoreScreenState() {{{2 -" -"Sets the screen state back to what it was when nerdtree#saveScreenState was last -"called. -" -"Assumes the cursor is in the NERDTree window -function! s:UI.restoreScreenState() - if !has_key(self, '_screenState') - return - endif - exec("silent vertical resize " . self._screenState['oldWindowSize']) - - let old_scrolloff=&scrolloff - let &scrolloff=0 - call cursor(self._screenState['oldTopLine'], 0) - normal! zt - call setpos(".", self._screenState['oldPos']) - let &scrolloff=old_scrolloff -endfunction - -"FUNCTION: s:UI.saveScreenState() {{{2 -"Saves the current cursor position in the current buffer and the window -"scroll position -function! s:UI.saveScreenState() - let win = winnr() - try - call nerdtree#putCursorInTreeWin() - let self._screenState = {} - let self._screenState['oldPos'] = getpos(".") - let self._screenState['oldTopLine'] = line("w0") - let self._screenState['oldWindowSize']= winwidth("") - call nerdtree#exec(win . "wincmd w") - catch /^NERDTree.InvalidOperationError/ - endtry -endfunction - -"FUNCTION: s:UI.render() {{{2 -function! s:UI.render() - setlocal modifiable - - "remember the top line of the buffer and the current line so we can - "restore the view exactly how it was - let curLine = line(".") - let curCol = col(".") - let topLine = line("w0") - - "delete all lines in the buffer (being careful not to clobber a register) - silent 1,$delete _ - - call nerdtree#dumpHelp() - - "delete the blank line before the help and add one after it - if g:NERDTreeMinimalUI == 0 - call setline(line(".")+1, "") - call cursor(line(".")+1, col(".")) - endif - - if b:NERDTreeShowBookmarks - call nerdtree#renderBookmarks() - endif - - "add the 'up a dir' line - if !g:NERDTreeMinimalUI - call setline(line(".")+1, nerdtree#treeUpDirLine()) - call cursor(line(".")+1, col(".")) - endif - - "draw the header line - let header = b:NERDTreeRoot.path.str({'format': 'UI', 'truncateTo': winwidth(0)}) - call setline(line(".")+1, header) - call cursor(line(".")+1, col(".")) - - "draw the tree - let old_o = @o - let @o = b:NERDTreeRoot.renderToString() - silent put o - let @o = old_o - - "delete the blank line at the top of the buffer - silent 1,1delete _ - - "restore the view - let old_scrolloff=&scrolloff - let &scrolloff=0 - call cursor(topLine, 1) - normal! zt - call cursor(curLine, curCol) - let &scrolloff = old_scrolloff - - setlocal nomodifiable -endfunction - - -"FUNCTION: UI.renderViewSavingPosition {{{1 -"Renders the tree and ensures the cursor stays on the current node or the -"current nodes parent if it is no longer available upon re-rendering -function! s:UI.renderViewSavingPosition() - let currentNode = g:NERDTreeFileNode.GetSelected() - - "go up the tree till we find a node that will be visible or till we run - "out of nodes - while currentNode != {} && !currentNode.isVisible() && !currentNode.isRoot() - let currentNode = currentNode.parent - endwhile - - call b:NERDTree.render() - - if currentNode != {} - call currentNode.putCursorHere(0, 0) - endif -endfunction - -" FUNCTION: s:UI.toggleIgnoreFilter() {{{1 -" toggles the use of the NERDTreeIgnore option -function! s:UI.toggleIgnoreFilter() - let b:NERDTreeIgnoreEnabled = !b:NERDTreeIgnoreEnabled - call b:NERDTree.ui.renderViewSavingPosition() - call b:NERDTree.ui.centerView() -endfunction - -" FUNCTION: s:UI.toggleShowBookmarks() {{{1 -" toggles the display of bookmarks -function! s:UI.toggleShowBookmarks() - let b:NERDTreeShowBookmarks = !b:NERDTreeShowBookmarks - if b:NERDTreeShowBookmarks - call b:NERDTree.render() - call nerdtree#putCursorOnBookmarkTable() - else - call b:NERDTree.ui.renderViewSavingPosition() - endif - call b:NERDTree.ui.centerView() -endfunction - -" FUNCTION: s:UI.toggleShowFiles() {{{1 -" toggles the display of hidden files -function! s:UI.toggleShowFiles() - let b:NERDTreeShowFiles = !b:NERDTreeShowFiles - call b:NERDTree.ui.renderViewSavingPosition() - call b:NERDTree.ui.centerView() -endfunction - -" FUNCTION: s:UI.toggleShowHidden() {{{1 -" toggles the display of hidden files -function! s:UI.toggleShowHidden() - let b:NERDTreeShowHidden = !b:NERDTreeShowHidden - call b:NERDTree.ui.renderViewSavingPosition() - call self.centerView() -endfunction - -" FUNCTION: s:UI.toggleZoom() {{{1 -" zoom (maximize/minimize) the NERDTree window -function! s:UI.toggleZoom() - if exists("b:NERDTreeZoomed") && b:NERDTreeZoomed - let size = exists("b:NERDTreeOldWindowSize") ? b:NERDTreeOldWindowSize : g:NERDTreeWinSize - exec "silent vertical resize ". size - let b:NERDTreeZoomed = 0 - else - exec "vertical resize" - let b:NERDTreeZoomed = 1 - endif -endfunction diff --git a/bundle/nerdtree/nerdtree_plugin/fs_menu.vim b/bundle/nerdtree/nerdtree_plugin/fs_menu.vim deleted file mode 100755 index 4e03f35..0000000 --- a/bundle/nerdtree/nerdtree_plugin/fs_menu.vim +++ /dev/null @@ -1,269 +0,0 @@ -" ============================================================================ -" File: fs_menu.vim -" Description: plugin for the NERD Tree that provides a file system menu -" Maintainer: Martin Grenfell -" Last Change: 17 July, 2009 -" License: This program is free software. It comes without any warranty, -" to the extent permitted by applicable law. You can redistribute -" it and/or modify it under the terms of the Do What The Fuck You -" Want To Public License, Version 2, as published by Sam Hocevar. -" See http://sam.zoy.org/wtfpl/COPYING for more details. -" -" ============================================================================ -if exists("g:loaded_nerdtree_fs_menu") - finish -endif -let g:loaded_nerdtree_fs_menu = 1 - -"Automatically delete the buffer after deleting or renaming a file -if !exists("g:NERDTreeAutoDeleteBuffer") - let g:NERDTreeAutoDeleteBuffer = 0 -endif - -call NERDTreeAddMenuItem({'text': '(a)dd a childnode', 'shortcut': 'a', 'callback': 'NERDTreeAddNode'}) -call NERDTreeAddMenuItem({'text': '(m)ove the current node', 'shortcut': 'm', 'callback': 'NERDTreeMoveNode'}) -call NERDTreeAddMenuItem({'text': '(d)elete the current node', 'shortcut': 'd', 'callback': 'NERDTreeDeleteNode'}) - -if has("gui_mac") || has("gui_macvim") - call NERDTreeAddMenuItem({'text': '(r)eveal in Finder the current node', 'shortcut': 'r', 'callback': 'NERDTreeRevealInFinder'}) - call NERDTreeAddMenuItem({'text': '(o)pen the current node with system editor', 'shortcut': 'o', 'callback': 'NERDTreeExecuteFile'}) - call NERDTreeAddMenuItem({'text': '(q)uicklook the current node', 'shortcut': 'q', 'callback': 'NERDTreeQuickLook'}) -endif - -if g:NERDTreePath.CopyingSupported() - call NERDTreeAddMenuItem({'text': '(c)opy the current node', 'shortcut': 'c', 'callback': 'NERDTreeCopyNode'}) -endif - -"FUNCTION: s:echo(msg){{{1 -function! s:echo(msg) - redraw - echomsg "NERDTree: " . a:msg -endfunction - -"FUNCTION: s:echoWarning(msg){{{1 -function! s:echoWarning(msg) - echohl warningmsg - call s:echo(a:msg) - echohl normal -endfunction - -"FUNCTION: s:promptToDelBuffer(bufnum, msg){{{1 -"prints out the given msg and, if the user responds by pushing 'y' then the -"buffer with the given bufnum is deleted -" -"Args: -"bufnum: the buffer that may be deleted -"msg: a message that will be echoed to the user asking them if they wish to -" del the buffer -function! s:promptToDelBuffer(bufnum, msg) - echo a:msg - if g:NERDTreeAutoDeleteBuffer || nr2char(getchar()) ==# 'y' - " 1. ensure that all windows which display the just deleted filename - " now display an empty buffer (so a layout is preserved). - " Is not it better to close single tabs with this file only ? - let s:originalTabNumber = tabpagenr() - let s:originalWindowNumber = winnr() - exec "tabdo windo if winbufnr(0) == " . a:bufnum . " | exec ':enew! ' | endif" - exec "tabnext " . s:originalTabNumber - exec s:originalWindowNumber . "wincmd w" - " 3. We don't need a previous buffer anymore - exec "bwipeout! " . a:bufnum - endif -endfunction - -"FUNCTION: s:promptToRenameBuffer(bufnum, msg){{{1 -"prints out the given msg and, if the user responds by pushing 'y' then the -"buffer with the given bufnum is replaced with a new one -" -"Args: -"bufnum: the buffer that may be deleted -"msg: a message that will be echoed to the user asking them if they wish to -" del the buffer -function! s:promptToRenameBuffer(bufnum, msg, newFileName) - echo a:msg - if g:NERDTreeAutoDeleteBuffer || nr2char(getchar()) ==# 'y' - let quotedFileName = "'" . a:newFileName . "'" - " 1. ensure that a new buffer is loaded - exec "badd " . quotedFileName - " 2. ensure that all windows which display the just deleted filename - " display a buffer for a new filename. - let s:originalTabNumber = tabpagenr() - let s:originalWindowNumber = winnr() - exec "tabdo windo if winbufnr(0) == " . a:bufnum . " | exec \":e! " . quotedFileName . "\" | endif" - exec "tabnext " . s:originalTabNumber - exec s:originalWindowNumber . "wincmd w" - " 3. We don't need a previous buffer anymore - exec "bwipeout! " . a:bufnum - endif -endfunction -"FUNCTION: NERDTreeAddNode(){{{1 -function! NERDTreeAddNode() - let curDirNode = g:NERDTreeDirNode.GetSelected() - - let newNodeName = input("Add a childnode\n". - \ "==========================================================\n". - \ "Enter the dir/file name to be created. Dirs end with a '/'\n" . - \ "", curDirNode.path.str() . g:NERDTreePath.Slash(), "file") - - if newNodeName ==# '' - call s:echo("Node Creation Aborted.") - return - endif - - try - let newPath = g:NERDTreePath.Create(newNodeName) - let parentNode = b:NERDTreeRoot.findNode(newPath.getParent()) - - let newTreeNode = g:NERDTreeFileNode.New(newPath) - if empty(parentNode) - call b:NERDTreeRoot.refresh() - call b:NERDTree.render() - elseif parentNode.isOpen || !empty(parentNode.children) - call parentNode.addChild(newTreeNode, 1) - call NERDTreeRender() - call newTreeNode.putCursorHere(1, 0) - endif - catch /^NERDTree/ - call s:echoWarning("Node Not Created.") - endtry -endfunction - -"FUNCTION: NERDTreeMoveNode(){{{1 -function! NERDTreeMoveNode() - let curNode = g:NERDTreeFileNode.GetSelected() - let newNodePath = input("Rename the current node\n" . - \ "==========================================================\n" . - \ "Enter the new path for the node: \n" . - \ "", curNode.path.str(), "file") - - if newNodePath ==# '' - call s:echo("Node Renaming Aborted.") - return - endif - - try - let bufnum = bufnr("^".curNode.path.str()."$") - - call curNode.rename(newNodePath) - call NERDTreeRender() - - "if the node is open in a buffer, ask the user if they want to - "close that buffer - if bufnum != -1 - let prompt = "\nNode renamed.\n\nThe old file is open in buffer ". bufnum . (bufwinnr(bufnum) ==# -1 ? " (hidden)" : "") .". Replace this buffer with a new file? (yN)" - call s:promptToRenameBuffer(bufnum, prompt, newNodePath) - endif - - call curNode.putCursorHere(1, 0) - - redraw - catch /^NERDTree/ - call s:echoWarning("Node Not Renamed.") - endtry -endfunction - -" FUNCTION: NERDTreeDeleteNode() {{{1 -function! NERDTreeDeleteNode() - let currentNode = g:NERDTreeFileNode.GetSelected() - let confirmed = 0 - - if currentNode.path.isDirectory - let choice =input("Delete the current node\n" . - \ "==========================================================\n" . - \ "STOP! To delete this entire directory, type 'yes'\n" . - \ "" . currentNode.path.str() . ": ") - let confirmed = choice ==# 'yes' - else - echo "Delete the current node\n" . - \ "==========================================================\n". - \ "Are you sure you wish to delete the node:\n" . - \ "" . currentNode.path.str() . " (yN):" - let choice = nr2char(getchar()) - let confirmed = choice ==# 'y' - endif - - - if confirmed - try - call currentNode.delete() - call NERDTreeRender() - - "if the node is open in a buffer, ask the user if they want to - "close that buffer - let bufnum = bufnr("^".currentNode.path.str()."$") - if buflisted(bufnum) - let prompt = "\nNode deleted.\n\nThe file is open in buffer ". bufnum . (bufwinnr(bufnum) ==# -1 ? " (hidden)" : "") .". Delete this buffer? (yN)" - call s:promptToDelBuffer(bufnum, prompt) - endif - - redraw - catch /^NERDTree/ - call s:echoWarning("Could not remove node") - endtry - else - call s:echo("delete aborted") - endif - -endfunction - -" FUNCTION: NERDTreeCopyNode() {{{1 -function! NERDTreeCopyNode() - let currentNode = g:NERDTreeFileNode.GetSelected() - let newNodePath = input("Copy the current node\n" . - \ "==========================================================\n" . - \ "Enter the new path to copy the node to: \n" . - \ "", currentNode.path.str(), "file") - - if newNodePath != "" - "strip trailing slash - let newNodePath = substitute(newNodePath, '\/$', '', '') - - let confirmed = 1 - if currentNode.path.copyingWillOverwrite(newNodePath) - call s:echo("Warning: copying may overwrite files! Continue? (yN)") - let choice = nr2char(getchar()) - let confirmed = choice ==# 'y' - endif - - if confirmed - try - let newNode = currentNode.copy(newNodePath) - if empty(newNode) - call b:NERDTreeRoot.refresh() - call b:NERDTree.render() - else - call NERDTreeRender() - call newNode.putCursorHere(0, 0) - endif - catch /^NERDTree/ - call s:echoWarning("Could not copy node") - endtry - endif - else - call s:echo("Copy aborted.") - endif - redraw -endfunction - -function! NERDTreeQuickLook() - let treenode = g:NERDTreeFileNode.GetSelected() - if treenode != {} - call system("qlmanage -p 2>/dev/null '" . treenode.path.str() . "'") - endif -endfunction - -function! NERDTreeRevealInFinder() - let treenode = g:NERDTreeFileNode.GetSelected() - if treenode != {} - let x = system("open -R '" . treenode.path.str() . "'") - endif -endfunction - -function! NERDTreeExecuteFile() - let treenode = g:NERDTreeFileNode.GetSelected() - if treenode != {} - let x = system("open '" . treenode.path.str() . "'") - endif -endfunction - -" vim: set sw=4 sts=4 et fdm=marker: diff --git a/bundle/nerdtree/plugin/NERD_tree.vim b/bundle/nerdtree/plugin/NERD_tree.vim deleted file mode 100755 index 28fd3ad..0000000 --- a/bundle/nerdtree/plugin/NERD_tree.vim +++ /dev/null @@ -1,205 +0,0 @@ -" ============================================================================ -" File: NERD_tree.vim -" Description: vim global plugin that provides a nice tree explorer -" Maintainer: Martin Grenfell -" Last Change: 28 December, 2011 -" License: This program is free software. It comes without any warranty, -" to the extent permitted by applicable law. You can redistribute -" it and/or modify it under the terms of the Do What The Fuck You -" Want To Public License, Version 2, as published by Sam Hocevar. -" See http://sam.zoy.org/wtfpl/COPYING for more details. -" -" ============================================================================ -" -" SECTION: Script init stuff {{{1 -"============================================================ -if exists("loaded_nerd_tree") - finish -endif -if v:version < 700 - echoerr "NERDTree: this plugin requires vim >= 7. DOWNLOAD IT! You'll thank me later!" - finish -endif -let loaded_nerd_tree = 1 - -"for line continuation - i.e dont want C in &cpo -let s:old_cpo = &cpo -set cpo&vim - -"Function: s:initVariable() function {{{2 -"This function is used to initialise a given variable to a given value. The -"variable is only initialised if it does not exist prior -" -"Args: -"var: the name of the var to be initialised -"value: the value to initialise var to -" -"Returns: -"1 if the var is set, 0 otherwise -function! s:initVariable(var, value) - if !exists(a:var) - exec 'let ' . a:var . ' = ' . "'" . substitute(a:value, "'", "''", "g") . "'" - return 1 - endif - return 0 -endfunction - -"SECTION: Init variable calls and other random constants {{{2 -call s:initVariable("g:NERDTreeAutoCenter", 1) -call s:initVariable("g:NERDTreeAutoCenterThreshold", 3) -call s:initVariable("g:NERDTreeCaseSensitiveSort", 0) -call s:initVariable("g:NERDTreeSortHiddenFirst", 1) -call s:initVariable("g:NERDTreeChDirMode", 0) -call s:initVariable("g:NERDTreeMinimalUI", 0) -if !exists("g:NERDTreeIgnore") - let g:NERDTreeIgnore = ['\~$'] -endif -call s:initVariable("g:NERDTreeBookmarksFile", expand('$HOME') . '/.NERDTreeBookmarks') -call s:initVariable("g:NERDTreeBookmarksSort", 1) -call s:initVariable("g:NERDTreeHighlightCursorline", 1) -call s:initVariable("g:NERDTreeHijackNetrw", 1) -call s:initVariable("g:NERDTreeMouseMode", 1) -call s:initVariable("g:NERDTreeNotificationThreshold", 100) -call s:initVariable("g:NERDTreeQuitOnOpen", 0) -call s:initVariable("g:NERDTreeRespectWildIgnore", 0) -call s:initVariable("g:NERDTreeShowBookmarks", 0) -call s:initVariable("g:NERDTreeShowFiles", 1) -call s:initVariable("g:NERDTreeShowHidden", 0) -call s:initVariable("g:NERDTreeShowLineNumbers", 0) -call s:initVariable("g:NERDTreeSortDirs", 1) -call s:initVariable("g:NERDTreeDirArrows", !nerdtree#runningWindows()) -call s:initVariable("g:NERDTreeCascadeOpenSingleChildDir", 1) - -if !exists("g:NERDTreeSortOrder") - let g:NERDTreeSortOrder = ['\/$', '*', '\.swp$', '\.bak$', '\~$'] -else - "if there isnt a * in the sort sequence then add one - if count(g:NERDTreeSortOrder, '*') < 1 - call add(g:NERDTreeSortOrder, '*') - endif -endif - -if !exists('g:NERDTreeStatusline') - - "the exists() crap here is a hack to stop vim spazzing out when - "loading a session that was created with an open nerd tree. It spazzes - "because it doesnt store b:NERDTreeRoot (its a b: var, and its a hash) - let g:NERDTreeStatusline = "%{exists('b:NERDTreeRoot')?b:NERDTreeRoot.path.str():''}" - -endif -call s:initVariable("g:NERDTreeWinPos", "left") -call s:initVariable("g:NERDTreeWinSize", 31) - -"init the shell commands that will be used to copy nodes, and remove dir trees -" -"Note: the space after the command is important -if nerdtree#runningWindows() - call s:initVariable("g:NERDTreeRemoveDirCmd", 'rmdir /s /q ') -else - call s:initVariable("g:NERDTreeRemoveDirCmd", 'rm -rf ') - call s:initVariable("g:NERDTreeCopyCmd", 'cp -r ') -endif - - -"SECTION: Init variable calls for key mappings {{{2 -call s:initVariable("g:NERDTreeMapActivateNode", "o") -call s:initVariable("g:NERDTreeMapChangeRoot", "C") -call s:initVariable("g:NERDTreeMapChdir", "cd") -call s:initVariable("g:NERDTreeMapCloseChildren", "X") -call s:initVariable("g:NERDTreeMapCloseDir", "x") -call s:initVariable("g:NERDTreeMapDeleteBookmark", "D") -call s:initVariable("g:NERDTreeMapMenu", "m") -call s:initVariable("g:NERDTreeMapHelp", "?") -call s:initVariable("g:NERDTreeMapJumpFirstChild", "K") -call s:initVariable("g:NERDTreeMapJumpLastChild", "J") -call s:initVariable("g:NERDTreeMapJumpNextSibling", "") -call s:initVariable("g:NERDTreeMapJumpParent", "p") -call s:initVariable("g:NERDTreeMapJumpPrevSibling", "") -call s:initVariable("g:NERDTreeMapJumpRoot", "P") -call s:initVariable("g:NERDTreeMapOpenExpl", "e") -call s:initVariable("g:NERDTreeMapOpenInTab", "t") -call s:initVariable("g:NERDTreeMapOpenInTabSilent", "T") -call s:initVariable("g:NERDTreeMapOpenRecursively", "O") -call s:initVariable("g:NERDTreeMapOpenSplit", "i") -call s:initVariable("g:NERDTreeMapOpenVSplit", "s") -call s:initVariable("g:NERDTreeMapPreview", "g" . NERDTreeMapActivateNode) -call s:initVariable("g:NERDTreeMapPreviewSplit", "g" . NERDTreeMapOpenSplit) -call s:initVariable("g:NERDTreeMapPreviewVSplit", "g" . NERDTreeMapOpenVSplit) -call s:initVariable("g:NERDTreeMapQuit", "q") -call s:initVariable("g:NERDTreeMapRefresh", "r") -call s:initVariable("g:NERDTreeMapRefreshRoot", "R") -call s:initVariable("g:NERDTreeMapToggleBookmarks", "B") -call s:initVariable("g:NERDTreeMapToggleFiles", "F") -call s:initVariable("g:NERDTreeMapToggleFilters", "f") -call s:initVariable("g:NERDTreeMapToggleHidden", "I") -call s:initVariable("g:NERDTreeMapToggleZoom", "A") -call s:initVariable("g:NERDTreeMapUpdir", "u") -call s:initVariable("g:NERDTreeMapUpdirKeepOpen", "U") -call s:initVariable("g:NERDTreeMapCWD", "CD") - -"SECTION: Load class files{{{2 -call nerdtree#loadClassFiles() - -" SECTION: Commands {{{1 -"============================================================ -call nerdtree#ui_glue#setupCommands() - -" SECTION: Auto commands {{{1 -"============================================================ -augroup NERDTree - "Save the cursor position whenever we close the nerd tree - exec "autocmd BufLeave ". g:NERDTreeCreator.BufNamePrefix() ."* call b:NERDTree.ui.saveScreenState()" - - "disallow insert mode in the NERDTree - exec "autocmd BufEnter ". g:NERDTreeCreator.BufNamePrefix() ."* stopinsert" -augroup END - -if g:NERDTreeHijackNetrw - augroup NERDTreeHijackNetrw - autocmd VimEnter * silent! autocmd! FileExplorer - au BufEnter,VimEnter * call nerdtree#checkForBrowse(expand("")) - augroup END -endif - -" SECTION: Public API {{{1 -"============================================================ -function! NERDTreeAddMenuItem(options) - call g:NERDTreeMenuItem.Create(a:options) -endfunction - -function! NERDTreeAddMenuSeparator(...) - let opts = a:0 ? a:1 : {} - call g:NERDTreeMenuItem.CreateSeparator(opts) -endfunction - -function! NERDTreeAddSubmenu(options) - return g:NERDTreeMenuItem.Create(a:options) -endfunction - -function! NERDTreeAddKeyMap(options) - call g:NERDTreeKeyMap.Create(a:options) -endfunction - -function! NERDTreeRender() - call nerdtree#renderView() -endfunction - -function! NERDTreeFocus() - if nerdtree#isTreeOpen() - call nerdtree#putCursorInTreeWin() - else - call g:NERDTreeCreator.TogglePrimary("") - endif -endfunction - -function! NERDTreeCWD() - call NERDTreeFocus() - call nerdtree#ui_glue#chRootCwd() -endfunction -" SECTION: Post Source Actions {{{1 -call nerdtree#postSourceActions() - -"reset &cpo back to users setting -let &cpo = s:old_cpo - -" vim: set sw=4 sts=4 et fdm=marker: diff --git a/bundle/nerdtree/syntax/nerdtree.vim b/bundle/nerdtree/syntax/nerdtree.vim deleted file mode 100755 index 5f7b49c..0000000 --- a/bundle/nerdtree/syntax/nerdtree.vim +++ /dev/null @@ -1,105 +0,0 @@ -let s:tree_up_dir_line = '.. (up a dir)' -syn match NERDTreeIgnore #\~# -syn match NERDTreeIgnore #\[RO\]# - -"highlighting for the .. (up dir) line at the top of the tree -execute "syn match NERDTreeUp #\\V". s:tree_up_dir_line ."#" - -"quickhelp syntax elements -syn match NERDTreeHelpKey #" \{1,2\}[^ ]*:#ms=s+2,me=e-1 -syn match NERDTreeHelpKey #" \{1,2\}[^ ]*,#ms=s+2,me=e-1 -syn match NERDTreeHelpTitle #" .*\~#ms=s+2,me=e-1 -syn match NERDTreeToggleOn #(on)#ms=s+1,he=e-1 -syn match NERDTreeToggleOff #(off)#ms=e-3,me=e-1 -syn match NERDTreeHelpCommand #" :.\{-}\>#hs=s+3 -syn match NERDTreeHelp #^".*# contains=NERDTreeHelpKey,NERDTreeHelpTitle,NERDTreeIgnore,NERDTreeToggleOff,NERDTreeToggleOn,NERDTreeHelpCommand - -"highlighting for sym links -syn match NERDTreeLinkTarget #->.*# containedin=NERDTreeDir,NERDTreeFile -syn match NERDTreeLinkFile #.* ->#me=e-3 containedin=NERDTreeFile -syn match NERDTreeLinkDir #.*/ ->#me=e-3 containedin=NERDTreeDir - -"highlighing for directory nodes and file nodes -syn match NERDTreeDirSlash #/# containedin=NERDTreeDir - -if g:NERDTreeDirArrows - syn match NERDTreeClosable #▾# containedin=NERDTreeDir,NERDTreeFile - syn match NERDTreeOpenable #▸# containedin=NERDTreeDir,NERDTreeFile - - syn match NERDTreeDir #[^▾▸ ].*/# - syn match NERDTreeExecFile #^ .*\*\($\| \)# contains=NERDTreeRO,NERDTreeBookmark - syn match NERDTreeFile #^[^"\.▾▸] *[^▾▸]*# contains=NERDTreeLink,NERDTreeRO,NERDTreeBookmark,NERDTreeExecFile - - "highlighting for readonly files - syn match NERDTreeRO # *\zs.*\ze \[RO\]# contains=NERDTreeIgnore,NERDTreeBookmark,NERDTreeFile - - syn match NERDTreeFlags #^ *\zs\[.\]# containedin=NERDTreeFile - syn match NERDTreeFlags #\[.\]# containedin=NERDTreeDir -else - "highlighting for the ~/+ symbols for the directory nodes - syn match NERDTreeClosable #\~\<# - syn match NERDTreeClosable #\~\.# - syn match NERDTreeOpenable #+\<# - syn match NERDTreeOpenable #+\.#he=e-1 - - "highlighting for the tree structural parts - syn match NERDTreePart #|# - syn match NERDTreePart #`# - syn match NERDTreePartFile #[|`]-#hs=s+1 contains=NERDTreePart - - syn match NERDTreeDir #[^-| `].*/# contains=NERDTreeLink,NERDTreeOpenable,NERDTreeClosable - syn match NERDTreeExecFile #[|` ].*\*\($\| \)# contains=NERDTreeLink,NERDTreePart,NERDTreePartFile,NERDTreeBookmark - syn match NERDTreeFile #|-.*# contains=NERDTreeLink,NERDTreePart,NERDTreePartFile,NERDTreeBookmark,NERDTreeExecFile - syn match NERDTreeFile #`-.*# contains=NERDTreeLink,NERDTreePart,NERDTreePartFile,NERDTreeBookmark,NERDTreeExecFile - - "highlighting for readonly files - syn match NERDTreeRO #|-.*\[RO\]#he=e-5 contains=NERDTreeIgnore,NERDTreeBookmark,NERDTreePart,NERDTreePartFile - - syn match NERDTreeFlags #-\[.\]# containedin=NERDTreeFile,NERDTreePartFile - syn match NERDTreeFlags #[+~]\zs\[.\]# containedin=NERDTreeDir -endif - -syn match NERDTreeCWD #^[# -syn match NERDTreeBookmarksHeader #^>-\+Bookmarks-\+$# contains=NERDTreeBookmarksLeader -syn match NERDTreeBookmarkName #^>.\{-} #he=e-1 contains=NERDTreeBookmarksLeader -syn match NERDTreeBookmark #^>.*$# contains=NERDTreeBookmarksLeader,NERDTreeBookmarkName,NERDTreeBookmarksHeader - -hi def link NERDTreePart Special -hi def link NERDTreePartFile Type -hi def link NERDTreeExecFile Title -hi def link NERDTreeDirSlash Identifier - -hi def link NERDTreeBookmarksHeader statement -hi def link NERDTreeBookmarksLeader ignore -hi def link NERDTreeBookmarkName Identifier -hi def link NERDTreeBookmark normal - -hi def link NERDTreeHelp String -hi def link NERDTreeHelpKey Identifier -hi def link NERDTreeHelpCommand Identifier -hi def link NERDTreeHelpTitle Macro -hi def link NERDTreeToggleOn Question -hi def link NERDTreeToggleOff WarningMsg - -hi def link NERDTreeLinkTarget Type -hi def link NERDTreeLinkFile Macro -hi def link NERDTreeLinkDir Macro - -hi def link NERDTreeDir Directory -hi def link NERDTreeUp Directory -hi def link NERDTreeFile Normal -hi def link NERDTreeCWD Statement -hi def link NERDTreeOpenable Title -hi def link NERDTreeClosable Title -hi def link NERDTreeIgnore ignore -hi def link NERDTreeRO WarningMsg -hi def link NERDTreeBookmark Statement -hi def link NERDTreeFlags Number - -hi def link NERDTreeCurrentNode Search diff --git a/bundle/scala/.gitignore b/bundle/scala/.gitignore deleted file mode 100644 index 01716d2..0000000 --- a/bundle/scala/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -# Ignore Vim tag files -tags - -# Ignore Vim swap files -.*.swp -.*.swo diff --git a/bundle/scala/.travis.yml b/bundle/scala/.travis.yml deleted file mode 100644 index c1ac6c5..0000000 --- a/bundle/scala/.travis.yml +++ /dev/null @@ -1,11 +0,0 @@ -language: ruby -rvm: - - 1.9.3 -before_install: sudo apt-get install vim-gtk -before_script: - - "export DISPLAY=:99.0" - - "sh -e /etc/init.d/xvfb start" -notifications: - email: - on_success: never - on_failure: change diff --git a/bundle/scala/Gemfile b/bundle/scala/Gemfile deleted file mode 100644 index 414fd03..0000000 --- a/bundle/scala/Gemfile +++ /dev/null @@ -1,5 +0,0 @@ -source 'https://rubygems.org/' -gem 'vimrunner', '0.3.0' -gem 'rake', '10.0.4' -gem 'rspec', '~> 2.13.0' - diff --git a/bundle/scala/Gemfile.lock b/bundle/scala/Gemfile.lock deleted file mode 100644 index ea5528e..0000000 --- a/bundle/scala/Gemfile.lock +++ /dev/null @@ -1,20 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - diff-lcs (1.1.3) - rake (0.9.2.2) - rspec (2.9.0) - rspec-core (~> 2.9.0) - rspec-expectations (~> 2.9.0) - rspec-mocks (~> 2.9.0) - rspec-core (2.9.0) - rspec-expectations (2.9.1) - diff-lcs (~> 1.1.3) - rspec-mocks (2.9.0) - -PLATFORMS - ruby - -DEPENDENCIES - rake - rspec diff --git a/bundle/scala/LICENSE.TXT b/bundle/scala/LICENSE.TXT deleted file mode 100644 index 66b0c46..0000000 --- a/bundle/scala/LICENSE.TXT +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright {yyyy} {name of copyright owner} - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/bundle/scala/README.md b/bundle/scala/README.md deleted file mode 100644 index c786a1c..0000000 --- a/bundle/scala/README.md +++ /dev/null @@ -1,36 +0,0 @@ -vim-scala [![Build Status](https://secure.travis-ci.org/lenniboy/vim-scala.png)](http://travis-ci.org/lenniboy/vim-scala) -========== - -This is a "bundle" for Vim that builds off of the initial Scala plugin modules -by Stefan Matthias Aust and adds some more "stuff" that I find useful, including -all of my notes and customizations. - -##Installation - -You really should be using Tim Pope's [Pathogen](https://github.com/tpope/vim-pathogen) module for Vim (http://tammersaleh.com/posts/the-modern-vim-config-with-pathogen) if you're going to clone this repository because, well... you should. - -###Vundle -Alternatively, you can use [Vundle](https://github.com/gmarik/vundle) to -manage your plugins. - -If you have Vundle installed, simply add the following to your .vimrc: - -```vim -Bundle 'derekwyatt/vim-scala' -``` - -and then run - -```vim -:BundleInstall -``` - -to install it. - -##Sorting of import statements - :SortScalaImports - -There are different modes for import sorting available. For details, please -consult the vimdoc help with - - :help :SortScalaImports diff --git a/bundle/scala/Rakefile b/bundle/scala/Rakefile deleted file mode 100644 index 7c84562..0000000 --- a/bundle/scala/Rakefile +++ /dev/null @@ -1,6 +0,0 @@ -require 'rspec/core/rake_task' - -RSpec::Core::RakeTask.new - -task :test => :spec -task :default => :spec diff --git a/bundle/scala/after/plugin/help.vim b/bundle/scala/after/plugin/help.vim deleted file mode 100644 index 785160a..0000000 --- a/bundle/scala/after/plugin/help.vim +++ /dev/null @@ -1,50 +0,0 @@ - -function! FixTOCLine(beginning, colonCol) - let l = strlen(a:beginning) - let c = 0 - let dots = "" - while c < (a:colonCol - l) - let dots = dots . "." - let c += 1 - endwhile - return (a:beginning . dots . ":") -endfunction - -function! BuildTOC() - let lnum = getpos(".")[1] - call append(lnum - 1, "<<<") - call append(lnum, ">>>") - :g/^\d\+\./co/>>>/- - :g/^<<>>/s/ {{{\d\s*// - :g/^<<>>/s/\*/|/g - :g/^<<>>/s/^\ze\d\.\d\+\./ / - :g/^<<>>/s/^\ze\d\d\.\d\+\./ / - :g/^<<>>/s/^\ze\d\.\d\+/ / - :g/^<<>>/s/^\ze\d\d\.\d\+/ / - :g/^<<>>/s/^\ze\d\./ / - :g/^<<>>/s/^\ze\d\d\./ / - :g/^\s\+0\. Content/d - :g/<<>>/-s/^\(.\{-}\)\(\s\+\)\ze |/\=FixTOCLine(submatch(1), 45)/ - :g/<<>>/d -endfunction - -command! BuildNewTableOfContents silent! call BuildTOC() - -function! JustifyCurrentLine() - let cline = getline('.') - let matches = matchlist(cline, '^\(.*\)\s\+\(\*.*\)$') - let st = matches[1] - let fin = matches[2] - let spcnum = 78 - strlen(st) - strlen(fin) - let c = 0 - let spcs = "" - while c < spcnum - let spcs = spcs . " " - let c = c + 1 - endwhile - let newline = st . spcs . fin - :norm dd - let lnum = getpos('.')[1] - call append(lnum - 1, newline) -endfunction diff --git a/bundle/scala/after/syntax/help.vim b/bundle/scala/after/syntax/help.vim deleted file mode 100644 index b352a1e..0000000 --- a/bundle/scala/after/syntax/help.vim +++ /dev/null @@ -1,8 +0,0 @@ -let b:current_syntax = '' -unlet b:current_syntax -syntax include @ScalaCode syntax/scala.vim -if has('conceal') - syntax region rgnScala matchgroup=Ignore concealends start='!sc!' end='!/sc!' contains=@ScalaCode -else - syntax region rgnScala matchgroup=Ignore start='!sc!' end='!/sc!' contains=@ScalaCode -endif diff --git a/bundle/scala/doc/scala.txt b/bundle/scala/doc/scala.txt deleted file mode 100644 index d3277b4..0000000 --- a/bundle/scala/doc/scala.txt +++ /dev/null @@ -1,44 +0,0 @@ -*scala.txt* Syntax highlighting and helper functions for the Scala language. - -INTRODUCTION *scala* - -Syntax highlighting and helper functions for the scala language. - -COMMANDS *scala-commands* - - *:SortScalaImports* -:SortScalaImports There are two modes in which this command can operate. - By default it walks all import groups at the top of - the Scala file and orders their lines alphabetically. - A group is a series of lines starting with the - import keyword separated by one or more blank lines. - - The second, more advanced mode, can be activated by - setting - - let g:scala_sort_across_groups=1 - - This makes this command include all imports in the - sorting regardless of blank lines in between them and - puts them in three predefined groups instead. - The three groups in which the imports can fall are: - - 1. Scala and Java core - 2. Third party libraries - 3. First party code (ie. your own) - - Java and Scala core imports are identified by the - java(x) and scala namespaces. - Everything else that isn't a first party namespace - will be a third party import. - You can define a regex that matches first party - namespaces by setting - - g:scala_first_party_namespaces - - For example in a standard Play app this would be - set to - g:scala_first_party_namespaces= - \ '\(controllers\|views\|models\)' - - diff --git a/bundle/scala/ftdetect/scala.vim b/bundle/scala/ftdetect/scala.vim deleted file mode 100644 index 997a701..0000000 --- a/bundle/scala/ftdetect/scala.vim +++ /dev/null @@ -1,8 +0,0 @@ -fun! s:DetectScala() - if getline(1) == '#!/usr/bin/env scala' - set filetype=scala - endif -endfun - -au BufRead,BufNewFile *.scala,*.sbt set filetype=scala -au BufRead,BufNewFile * call s:DetectScala() diff --git a/bundle/scala/ftplugin/scala.vim b/bundle/scala/ftplugin/scala.vim deleted file mode 100644 index 3f0de96..0000000 --- a/bundle/scala/ftplugin/scala.vim +++ /dev/null @@ -1,195 +0,0 @@ -setlocal formatoptions+=ro -setlocal commentstring=//%s -let &l:include = '^\s*import' -let &l:includeexpr = 'substitute(v:fname,"\\.","/","g")' -setlocal path+=src/main/scala,src/test/scala -setlocal suffixesadd=.scala - -set makeprg=sbt\ -Dsbt.log.noformat=true\ compile -set efm=%E\ %#[error]\ %f:%l:\ %m,%C\ %#[error]\ %p^,%-C%.%#,%Z, - \%W\ %#[warn]\ %f:%l:\ %m,%C\ %#[warn]\ %p^,%-C%.%#,%Z, - \%-G%.%# - -if globpath(&rtp, 'plugin/fuf.vim') != '' - " - " FuzzyFinder stuff - " - " - " SanitizeDirForFuzzyFinder() - " - " This is really just a convenience function to clean up any stray '/' - " characters in the path, should they be there. - " - function! scala#SanitizeDirForFuzzyFinder(dir) - let dir = expand(a:dir) - let dir = substitute(dir, '/\+$', '', '') - let dir = substitute(dir, '/\+', '/', '') - - return dir - endfunction - - " - " GetDirForFuzzyFinder() - " - " Given a directory to start 'from', walk up the hierarchy, looking for a path - " that matches the 'addon' you want to see. - " - " If nothing can be found, then we just return the 'from' so we don't really get - " the advantage of a hint, but just let the user start from wherever he was - " starting from anyway. - " - function! scala#GetDirForFuzzyFinder(from, addon) - let from = scala#SanitizeDirForFuzzyFinder(a:from) - let addon = expand(a:addon) - let addon = substitute(addon, '^/\+', '', '') - let found = '' - " If the addon is right here, then we win - if isdirectory(from . '/' . addon) - let found = from . '/' . addon - else - let dirs = split(from, '/') - if !has('win32') && !has('win64') - let dirs[0] = '/' . dirs[0] - endif - " Walk up the tree and see if it's anywhere there - for n in range(len(dirs) - 1, 0, -1) - let path = join(dirs[0:n], '/') - if isdirectory(path . '/' . addon) - let found = path . '/' . addon - break - endif - endfor - endif - " If we found it, then let's see if we can go deeper - " - " For example, we may have found component_name/include - " but what if that directory only has a single directory - " in it, and that subdirectory only has a single directory - " in it, etc... ? This can happen when you're segmenting - " by namespace like this: - " - " component_name/include/org/vim/CoolClass.h - " - " You may find yourself always typing '' from the - " 'include' directory just to go into 'org/vim' so let's - " just eliminate the need to hit the ''. - if found != '' - let tempfrom = found - let globbed = globpath(tempfrom, '*') - while len(split(globbed, "\n")) == 1 - let tempfrom = globbed - let globbed = globpath(tempfrom, '*') - endwhile - let found = scala#SanitizeDirForFuzzyFinder(tempfrom) . '/' - else - let found = from - endif - - return found - endfunction - - " - " GetTestDirForFuzzyFinder() - " - " Now overload GetDirForFuzzyFinder() specifically for the test directory (I'm - " really only interested in going down into test/src 90% of the time, so let's - " hit that 90% and leave the other 10% to couple of extra keystrokes) - " - function! scala#GetTestDirForFuzzyFinder(from) - return scala#GetDirForFuzzyFinder(a:from, 'src/test/scala/') - endfunction - - " - " GetMainDirForFuzzyFinder() - " - " Now overload GetDirForFuzzyFinder() specifically for the main directory. - " - function! scala#GetMainDirForFuzzyFinder(from) - return scala#GetDirForFuzzyFinder(a:from, 'src/main/scala/') - endfunction - - " - " GetRootDirForFuzzyFinder() - " - " Now overload GetDirForFuzzyFinder() specifically for the root directory. - " - function! scala#GetRootDirForFuzzyFinder(from) - return scala#GetDirForFuzzyFinder(a:from, 'src/../') - endfunction - - " If you want to disable the default key mappings, write the following line in - " your ~/.vimrc - " let g:scala_use_default_keymappings = 0 - if get(g:, 'scala_use_default_keymappings', 1) - nnoremap ft :FufFile =scala#GetTestDirForFuzzyFinder('%:p:h') - nnoremap fs :FufFile =scala#GetMainDirForFuzzyFinder('%:p:h') - nnoremap fr :FufFile =scala#GetRootDirForFuzzyFinder('%:p:h') - endif -endif - -" If you want to disable the default key mappings, write the following line in -" your ~/.vimrc -" let g:scala_use_default_keymappings = 0 -if get(g:, 'scala_use_default_keymappings', 1) - nnoremap jt :call JustifyCurrentLine() -endif - -" -" TagBar -" -let g:tagbar_type_scala = { - \ 'ctagstype' : 'scala', - \ 'kinds' : [ - \ 'p:packages:1', - \ 'V:values', - \ 'v:variables', - \ 'T:types', - \ 't:traits', - \ 'o:objects', - \ 'a:aclasses', - \ 'c:classes', - \ 'r:cclasses', - \ 'm:methods' - \ ], - \ 'sro' : '.', - \ 'kind2scope' : { - \ 'T' : 'type', - \ 't' : 'trait', - \ 'o' : 'object', - \ 'a' : 'abstract class', - \ 'c' : 'class', - \ 'r' : 'case class' - \ }, - \ 'scope2kind' : { - \ 'type' : 'T', - \ 'trait' : 't', - \ 'object' : 'o', - \ 'abstract class' : 'a', - \ 'class' : 'c', - \ 'case class' : 'r' - \ } -\ } - -function! s:CreateOrExpression(keywords) - return '('.join(a:keywords, '|').')' -endfunction - -function! s:NextSection(backwards) - if a:backwards - let dir = '?' - else - let dir = '/' - endif - let keywords = [ 'def', 'class', 'trait', 'object' ] - let keywordsOrExpression = s:CreateOrExpression(keywords) - - let modifiers = [ 'public', 'private', 'private\[\w*\]', 'protected', 'abstract', 'case', 'override', 'implicit', 'final', 'sealed'] - let modifierOrExpression = s:CreateOrExpression(modifiers) - - let regex = '^ *('.modifierOrExpression.' )* *'.keywordsOrExpression."\r" - execute 'silent normal! ' . dir . '\v'.regex -endfunction - -noremap