milkode 0.9.3.1 → 0.9.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Gemfile CHANGED
@@ -4,7 +4,7 @@ source "http://rubygems.org"
4
4
  # Example:
5
5
  # gem "activesupport", ">= 2.3.5"
6
6
  # gemspec
7
- gem 'termcolor','>= 1.2.0'
7
+ gem 'termcolor','>= 1.2.0', '< 1.2.2'
8
8
  gem 'rroonga','>= 1.1.0'
9
9
  gem 'rack','>=1.3.4'
10
10
  gem 'sinatra', '>=1.2.6'
@@ -1,3 +1,28 @@
1
+ === 0.9.4 2012/11/14
2
+
3
+ * milk web
4
+ * 行番号クリック時の処理を改善
5
+ * ウィンドウをモーダルに変更
6
+ * ハイライト、URLを選択行に差し替え (thanks asane)
7
+ * 検索ボックスの操作性を改善 (thanks kenhys)
8
+ * Select query text on click event
9
+ * keep query text selected after searching
10
+ * suppress select() call for query text by tag jump
11
+ * パッケージ一覧のソートのルールを整理
12
+ * ソースコードの文字コードがEUC-JPの場合、検索結果に表示される日本語が文字化けする問題を修正 (thanks azurite)
13
+ * 文言修正 : '新しい検索' -> 'タブを複製'
14
+
15
+ * milk
16
+ * milk remove 改善
17
+ * milk init /path/to/dir -s が正しく動作しない問題を修正
18
+ * milkode_yaml.rb: package_root の正規表現調整
19
+ * 他のオプションとのバッティングを防ぐために milk -v は使えないように、 milk --version を推奨
20
+ * 拡張子 csproj, vbproj, sln に対応 (VisualStudio)
21
+ * document_table.rb: addするとnegative string size (or size too big) (ArgumentError)となる問題を修正 (thanks azurite)
22
+
23
+ * Bug fix
24
+ * termcolorの要求バージョンを '< 1.2.2' に (thanks mallowlabs)
25
+
1
26
  === 0.9.3.1 2012/10/14
2
27
 
3
28
  * 'milk plugins' add gem-milkode, bundle-milkode
@@ -1,3 +1,20 @@
1
+ === 0.9.4
2
+
3
+ * milk web
4
+ * Improve handling when you click the line number
5
+ * Improve the usability of the search box (thanks kenhys)
6
+
7
+ * milk
8
+ * Improve milk remove
9
+ * Fix milk init /path/to/dir -s
10
+ * milkode_yaml.rb: Fix package_root regexp
11
+ * milk -v -> milk --version
12
+ * plang_detector.rb: Add csproj, vbproj, sln (VisualStudio)
13
+ * document_table.rb: Fix error negative string size (or size too big)
14
+
15
+ * Bug fix
16
+ * termcolor require version '< 1.2.2' (thanks mallowlabs)
17
+
1
18
  === 0.9.3.1 2012/10/14
2
19
 
3
20
  * 'milk plugins' add gem-milkode, bundle-milkode
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.9.3.1
1
+ 0.9.4
data/bin/gmilk CHANGED
@@ -6,5 +6,5 @@
6
6
  require 'rubygems'
7
7
  require 'milkode/grep/cli_grep'
8
8
 
9
- Version = "0.9.3.1"
9
+ Version = "0.9.4"
10
10
  Milkode::CLI_Grep.execute(STDOUT, ARGV)
data/bin/milk CHANGED
@@ -6,5 +6,5 @@
6
6
  require 'rubygems'
7
7
  require 'milkode/cli'
8
8
 
9
- Version = "0.9.3.1"
9
+ Version = "0.9.4"
10
10
  Milkode::CLI.start(ARGV)
@@ -316,29 +316,21 @@ module Milkode
316
316
  if (options[:all])
317
317
  remove_all
318
318
  else
319
- if (args.empty?)
320
- path = File.expand_path('.')
321
- package = @yaml.package_root(path)
319
+ print_result do
320
+ db_open
321
+ args.each do |arg|
322
+ package = @yaml.find_name(arg) || @yaml.find_dir(arg)
322
323
 
323
- if (package)
324
- print_result do
325
- db_open
326
- remove_dir(package.directory)
324
+ unless package
325
+ path = File.expand_path(arg)
326
+ package = @yaml.package_root(path)
327
327
  end
328
- else
329
- @out.puts "Not registered. '#{path}'."
330
- end
331
- else
332
- print_result do
333
- db_open
334
- args.each do |name|
335
- package = @yaml.find_name(name) || @yaml.find_dir(name)
336
- if (package)
337
- remove_dir(package.directory)
338
- else
339
- @out.puts "Not found package '#{name}'."
340
- return
341
- end
328
+
329
+ if (package)
330
+ remove_dir(package.directory)
331
+ else
332
+ @out.puts "Not found package '#{arg}'."
333
+ return
342
334
  end
343
335
  end
344
336
  end
@@ -584,13 +576,14 @@ module Milkode
584
576
  end
585
577
  end
586
578
 
587
- def setdb(dbpath, options)
579
+ def setdb(args, options)
588
580
  if (options[:reset])
589
581
  CdstkCommand.setdb_reset
590
582
  @out.puts "Reset default db\n remove: #{Dbdir.milkode_db_dir}\n default_db: #{Dbdir.default_dir}"
591
- elsif (dbpath.nil?)
583
+ elsif (args.empty?)
592
584
  @out.puts Dbdir.default_dir
593
585
  else
586
+ dbpath = args.first
594
587
  path = File.expand_path(dbpath)
595
588
  begin
596
589
  CdstkCommand.setdb_set path
@@ -74,7 +74,7 @@ EOF
74
74
  def package_root(dir)
75
75
  nd = Util::normalize_filename dir
76
76
  @contents.find do |v|
77
- v if nd =~ /^#{Regexp.escape(v.directory)}/
77
+ v if nd =~ /^#{Regexp.escape(v.directory)}(:?\/|\Z)/
78
78
  end
79
79
  end
80
80
 
@@ -22,7 +22,7 @@ set :haml, :format => :html5
22
22
 
23
23
  get '/' do
24
24
  @setting = WebSetting.new
25
- @version = "0.9.3.1"
25
+ @version = "0.9.4"
26
26
  @package_num = Database.instance.yaml_package_num
27
27
  @file_num = Database.instance.totalRecords
28
28
  @package_list = PackageList.new(Database.instance.grndb)
@@ -183,7 +183,7 @@ EOF
183
183
 
184
184
  <<EOF
185
185
  #{headicon('go-home-5.png')} <a href="/home" class="headmenu">ホーム</a>
186
- #{headicon('document-new-4.png')} <a href="#{href}" class="headmenu" onclick="window.open('#{href}'); return false;">新しい検索</a>
186
+ #{headicon('document-new-4.png')} <a href="#{href}" class="headmenu" onclick="window.open('#{href}'); return false;">タブを複製</a>
187
187
  #{headicon('directory.png')} <a href="#{flist}" class="headmenu">ディレクトリ</a>
188
188
  #{headicon('view-refresh-4.png')} <a href="#updateModal" class="headmenu" data-toggle="modal">パッケージを更新</a>
189
189
  #{headicon('help.png')} <a href="/help" class="headmenu">ヘルプ</a>
@@ -201,6 +201,22 @@ EOF
201
201
  <a href="#" id="updateOk" class="btn btn-primary" data-loading-text="Updating..." milkode-package-name="#{package_name}"">OK</a>
202
202
  </div>
203
203
  </div>
204
+
205
+ <div id="lineno-modal" class="modal hide">
206
+ <div class="modal-header">
207
+ <a href="#" class="close" data-dismiss="modal">&times;</a>
208
+ <h3 id="lineno-path"></h3>
209
+ </div>
210
+ <div class="modal-body">
211
+ <table class="CodeRay"><tr>
212
+ <td class="code"><pre id="lineno-body">
213
+ </pre></td>
214
+ </tr></table>
215
+ </div>
216
+ <div class="modal-footer">
217
+ <a href="#" id="lineno-ok" class="btn" data-dismiss="modal">OK</a>
218
+ </div>
219
+ </div>
204
220
  EOF
205
221
  end
206
222
 
@@ -5,6 +5,9 @@
5
5
  # @author ongaeshi
6
6
  # @date 2012/03/18
7
7
 
8
+ require 'rubygems'
9
+ require 'rack'
10
+
8
11
  module CodeRay
9
12
  module Encoders
10
13
  class HTML2 < HTML
@@ -168,7 +171,8 @@ module Encoders
168
171
  elsif options[:onclick_copy_line_number]
169
172
  prefix = options[:onclick_copy_prefix] || ""
170
173
  proc do |line|
171
- "<a href=\"#!\" onclick=\"alert('#{prefix + line.to_s}');\" title=\"Display line number\">#{line.to_s}</a>"
174
+ "<a href=\"#lineno-modal\" data-toggle=\"modal\" onclick=\"lineno_setup('#{prefix}', '#{line.to_s}');\" title=\"Display line number\">#{line.to_s}</a>"
175
+ # "<a onclick=\"lineno_setup('#{prefix}', '#{line.to_s}');\" title=\"Display line number\">#{line.to_s}</a>"
172
176
  end
173
177
  else
174
178
  proc { |line| line.to_s } # :to_s.to_proc in Ruby 1.8.7+
@@ -0,0 +1,523 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # @file
4
+ # @brief
5
+ # @author ongaeshi
6
+ # @date 2012/03/18
7
+
8
+ require 'rubygems'
9
+ require 'coderay/scanner'
10
+
11
+ # coderay-1.0.5/lib/coderay/scanners/php.rb
12
+ module CodeRay
13
+ module Scanners
14
+
15
+ load :html
16
+
17
+ # Scanner for PHP.
18
+ #
19
+ # Original by Stefan Walk.
20
+ class PHP_UTF8 < Scanner
21
+
22
+ # register_for :php
23
+ register_for :php_utf8 # customize
24
+ file_extension 'php'
25
+ # encoding 'BINARY'
26
+ encoding 'UTF-8' # customize
27
+
28
+ KINDS_NOT_LOC = HTML::KINDS_NOT_LOC
29
+
30
+ protected
31
+
32
+ def setup
33
+ @html_scanner = CodeRay.scanner :html, :tokens => @tokens, :keep_tokens => true, :keep_state => true
34
+ end
35
+
36
+ def reset_instance
37
+ super
38
+ @html_scanner.reset
39
+ end
40
+
41
+ module Words # :nodoc:
42
+
43
+ # according to http://www.php.net/manual/en/reserved.keywords.php
44
+ KEYWORDS = %w[
45
+ abstract and array as break case catch class clone const continue declare default do else elseif
46
+ enddeclare endfor endforeach endif endswitch endwhile extends final for foreach function global
47
+ goto if implements interface instanceof namespace new or private protected public static switch
48
+ throw try use var while xor
49
+ cfunction old_function
50
+ ]
51
+
52
+ TYPES = %w[ int integer float double bool boolean string array object resource ]
53
+
54
+ LANGUAGE_CONSTRUCTS = %w[
55
+ die echo empty exit eval include include_once isset list
56
+ require require_once return print unset
57
+ ]
58
+
59
+ CLASSES = %w[ Directory stdClass __PHP_Incomplete_Class exception php_user_filter Closure ]
60
+
61
+ # according to http://php.net/quickref.php on 2009-04-21;
62
+ # all functions with _ excluded (module functions) and selected additional functions
63
+ BUILTIN_FUNCTIONS = %w[
64
+ abs acos acosh addcslashes addslashes aggregate array arsort ascii2ebcdic asin asinh asort assert atan atan2
65
+ atanh basename bcadd bccomp bcdiv bcmod bcmul bcpow bcpowmod bcscale bcsqrt bcsub bin2hex bindec
66
+ bindtextdomain bzclose bzcompress bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite
67
+ calculhmac ceil chdir checkdate checkdnsrr chgrp chmod chop chown chr chroot clearstatcache closedir closelog
68
+ compact constant copy cos cosh count crc32 crypt current date dcgettext dcngettext deaggregate decbin dechex
69
+ decoct define defined deg2rad delete dgettext die dirname diskfreespace dl dngettext doubleval each
70
+ ebcdic2ascii echo empty end ereg eregi escapeshellarg escapeshellcmd eval exec exit exp explode expm1 extract
71
+ fclose feof fflush fgetc fgetcsv fgets fgetss file fileatime filectime filegroup fileinode filemtime fileowner
72
+ fileperms filepro filesize filetype floatval flock floor flush fmod fnmatch fopen fpassthru fprintf fputcsv
73
+ fputs fread frenchtojd fscanf fseek fsockopen fstat ftell ftok ftruncate fwrite getallheaders getcwd getdate
74
+ getenv gethostbyaddr gethostbyname gethostbynamel getimagesize getlastmod getmxrr getmygid getmyinode getmypid
75
+ getmyuid getopt getprotobyname getprotobynumber getrandmax getrusage getservbyname getservbyport gettext
76
+ gettimeofday gettype glob gmdate gmmktime gmstrftime gregoriantojd gzclose gzcompress gzdecode gzdeflate
77
+ gzencode gzeof gzfile gzgetc gzgets gzgetss gzinflate gzopen gzpassthru gzputs gzread gzrewind gzseek gztell
78
+ gzuncompress gzwrite hash header hebrev hebrevc hexdec htmlentities htmlspecialchars hypot iconv idate
79
+ implode include intval ip2long iptcembed iptcparse isset
80
+ jddayofweek jdmonthname jdtofrench jdtogregorian jdtojewish jdtojulian jdtounix jewishtojd join jpeg2wbmp
81
+ juliantojd key krsort ksort lcfirst lchgrp lchown levenshtein link linkinfo list localeconv localtime log
82
+ log10 log1p long2ip lstat ltrim mail main max md5 metaphone mhash microtime min mkdir mktime msql natcasesort
83
+ natsort next ngettext nl2br nthmac octdec opendir openlog
84
+ ord overload pack passthru pathinfo pclose pfsockopen phpcredits phpinfo phpversion pi png2wbmp popen pos pow
85
+ prev print printf putenv quotemeta rad2deg rand range rawurldecode rawurlencode readdir readfile readgzfile
86
+ readline readlink realpath recode rename require reset rewind rewinddir rmdir round rsort rtrim scandir
87
+ serialize setcookie setlocale setrawcookie settype sha1 shuffle signeurlpaiement sin sinh sizeof sleep snmpget
88
+ snmpgetnext snmprealwalk snmpset snmpwalk snmpwalkoid sort soundex split spliti sprintf sqrt srand sscanf stat
89
+ strcasecmp strchr strcmp strcoll strcspn strftime stripcslashes stripos stripslashes stristr strlen
90
+ strnatcasecmp strnatcmp strncasecmp strncmp strpbrk strpos strptime strrchr strrev strripos strrpos strspn
91
+ strstr strtok strtolower strtotime strtoupper strtr strval substr symlink syslog system tan tanh tempnam
92
+ textdomain time tmpfile touch trim uasort ucfirst ucwords uksort umask uniqid unixtojd unlink unpack
93
+ unserialize unset urldecode urlencode usleep usort vfprintf virtual vprintf vsprintf wordwrap
94
+ array_change_key_case array_chunk array_combine array_count_values array_diff array_diff_assoc
95
+ array_diff_key array_diff_uassoc array_diff_ukey array_fill array_fill_keys array_filter array_flip
96
+ array_intersect array_intersect_assoc array_intersect_key array_intersect_uassoc array_intersect_ukey
97
+ array_key_exists array_keys array_map array_merge array_merge_recursive array_multisort array_pad
98
+ array_pop array_product array_push array_rand array_reduce array_reverse array_search array_shift
99
+ array_slice array_splice array_sum array_udiff array_udiff_assoc array_udiff_uassoc array_uintersect
100
+ array_uintersect_assoc array_uintersect_uassoc array_unique array_unshift array_values array_walk
101
+ array_walk_recursive
102
+ assert_options base_convert base64_decode base64_encode
103
+ chunk_split class_exists class_implements class_parents
104
+ count_chars debug_backtrace debug_print_backtrace debug_zval_dump
105
+ error_get_last error_log error_reporting extension_loaded
106
+ file_exists file_get_contents file_put_contents load_file
107
+ func_get_arg func_get_args func_num_args function_exists
108
+ get_browser get_called_class get_cfg_var get_class get_class_methods get_class_vars
109
+ get_current_user get_declared_classes get_declared_interfaces get_defined_constants
110
+ get_defined_functions get_defined_vars get_extension_funcs get_headers get_html_translation_table
111
+ get_include_path get_included_files get_loaded_extensions get_magic_quotes_gpc get_magic_quotes_runtime
112
+ get_meta_tags get_object_vars get_parent_class get_required_filesget_resource_type
113
+ gc_collect_cycles gc_disable gc_enable gc_enabled
114
+ halt_compiler headers_list headers_sent highlight_file highlight_string
115
+ html_entity_decode htmlspecialchars_decode
116
+ in_array include_once inclued_get_data
117
+ is_a is_array is_binary is_bool is_buffer is_callable is_dir is_double is_executable is_file is_finite
118
+ is_float is_infinite is_int is_integer is_link is_long is_nan is_null is_numeric is_object is_readable
119
+ is_real is_resource is_scalar is_soap_fault is_string is_subclass_of is_unicode is_uploaded_file
120
+ is_writable is_writeable
121
+ locale_get_default locale_set_default
122
+ number_format override_function parse_str parse_url
123
+ php_check_syntax php_ini_loaded_file php_ini_scanned_files php_logo_guid php_sapi_name
124
+ php_strip_whitespace php_uname
125
+ preg_filter preg_grep preg_last_error preg_match preg_match_all preg_quote preg_replace
126
+ preg_replace_callback preg_split print_r
127
+ require_once register_shutdown_function register_tick_function
128
+ set_error_handler set_exception_handler set_file_buffer set_include_path
129
+ set_magic_quotes_runtime set_time_limit shell_exec
130
+ str_getcsv str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split str_word_count
131
+ strip_tags substr_compare substr_count substr_replace
132
+ time_nanosleep time_sleep_until
133
+ token_get_all token_name trigger_error
134
+ unregister_tick_function use_soap_error_handler user_error
135
+ utf8_decode utf8_encode var_dump var_export
136
+ version_compare
137
+ zend_logo_guid zend_thread_id zend_version
138
+ create_function call_user_func_array
139
+ posix_access posix_ctermid posix_get_last_error posix_getcwd posix_getegid
140
+ posix_geteuid posix_getgid posix_getgrgid posix_getgrnam posix_getgroups
141
+ posix_getlogin posix_getpgid posix_getpgrp posix_getpid posix_getppid
142
+ posix_getpwnam posix_getpwuid posix_getrlimit posix_getsid posix_getuid
143
+ posix_initgroups posix_isatty posix_kill posix_mkfifo posix_mknod
144
+ posix_setegid posix_seteuid posix_setgid posix_setpgid posix_setsid
145
+ posix_setuid posix_strerror posix_times posix_ttyname posix_uname
146
+ pcntl_alarm pcntl_exec pcntl_fork pcntl_getpriority pcntl_setpriority
147
+ pcntl_signal pcntl_signal_dispatch pcntl_sigprocmask pcntl_sigtimedwait
148
+ pcntl_sigwaitinfo pcntl_wait pcntl_waitpid pcntl_wexitstatus pcntl_wifexited
149
+ pcntl_wifsignaled pcntl_wifstopped pcntl_wstopsig pcntl_wtermsig
150
+ ]
151
+ # TODO: more built-in PHP functions?
152
+
153
+ EXCEPTIONS = %w[
154
+ E_ERROR E_WARNING E_PARSE E_NOTICE E_CORE_ERROR E_CORE_WARNING E_COMPILE_ERROR E_COMPILE_WARNING
155
+ E_USER_ERROR E_USER_WARNING E_USER_NOTICE E_DEPRECATED E_USER_DEPRECATED E_ALL E_STRICT
156
+ ]
157
+
158
+ CONSTANTS = %w[
159
+ null true false self parent
160
+ __LINE__ __DIR__ __FILE__ __LINE__
161
+ __CLASS__ __NAMESPACE__ __METHOD__ __FUNCTION__
162
+ PHP_VERSION PHP_MAJOR_VERSION PHP_MINOR_VERSION PHP_RELEASE_VERSION PHP_VERSION_ID PHP_EXTRA_VERSION PHP_ZTS
163
+ PHP_DEBUG PHP_MAXPATHLEN PHP_OS PHP_SAPI PHP_EOL PHP_INT_MAX PHP_INT_SIZE DEFAULT_INCLUDE_PATH
164
+ PEAR_INSTALL_DIR PEAR_EXTENSION_DIR PHP_EXTENSION_DIR PHP_PREFIX PHP_BINDIR PHP_LIBDIR PHP_DATADIR
165
+ PHP_SYSCONFDIR PHP_LOCALSTATEDIR PHP_CONFIG_FILE_PATH PHP_CONFIG_FILE_SCAN_DIR PHP_SHLIB_SUFFIX
166
+ PHP_OUTPUT_HANDLER_START PHP_OUTPUT_HANDLER_CONT PHP_OUTPUT_HANDLER_END
167
+ __COMPILER_HALT_OFFSET__
168
+ EXTR_OVERWRITE EXTR_SKIP EXTR_PREFIX_SAME EXTR_PREFIX_ALL EXTR_PREFIX_INVALID EXTR_PREFIX_IF_EXISTS
169
+ EXTR_IF_EXISTS SORT_ASC SORT_DESC SORT_REGULAR SORT_NUMERIC SORT_STRING CASE_LOWER CASE_UPPER COUNT_NORMAL
170
+ COUNT_RECURSIVE ASSERT_ACTIVE ASSERT_CALLBACK ASSERT_BAIL ASSERT_WARNING ASSERT_QUIET_EVAL CONNECTION_ABORTED
171
+ CONNECTION_NORMAL CONNECTION_TIMEOUT INI_USER INI_PERDIR INI_SYSTEM INI_ALL M_E M_LOG2E M_LOG10E M_LN2 M_LN10
172
+ M_PI M_PI_2 M_PI_4 M_1_PI M_2_PI M_2_SQRTPI M_SQRT2 M_SQRT1_2 CRYPT_SALT_LENGTH CRYPT_STD_DES CRYPT_EXT_DES
173
+ CRYPT_MD5 CRYPT_BLOWFISH DIRECTORY_SEPARATOR SEEK_SET SEEK_CUR SEEK_END LOCK_SH LOCK_EX LOCK_UN LOCK_NB
174
+ HTML_SPECIALCHARS HTML_ENTITIES ENT_COMPAT ENT_QUOTES ENT_NOQUOTES INFO_GENERAL INFO_CREDITS
175
+ INFO_CONFIGURATION INFO_MODULES INFO_ENVIRONMENT INFO_VARIABLES INFO_LICENSE INFO_ALL CREDITS_GROUP
176
+ CREDITS_GENERAL CREDITS_SAPI CREDITS_MODULES CREDITS_DOCS CREDITS_FULLPAGE CREDITS_QA CREDITS_ALL STR_PAD_LEFT
177
+ STR_PAD_RIGHT STR_PAD_BOTH PATHINFO_DIRNAME PATHINFO_BASENAME PATHINFO_EXTENSION PATH_SEPARATOR CHAR_MAX
178
+ LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_ALL LC_MESSAGES ABDAY_1 ABDAY_2 ABDAY_3 ABDAY_4 ABDAY_5
179
+ ABDAY_6 ABDAY_7 DAY_1 DAY_2 DAY_3 DAY_4 DAY_5 DAY_6 DAY_7 ABMON_1 ABMON_2 ABMON_3 ABMON_4 ABMON_5 ABMON_6
180
+ ABMON_7 ABMON_8 ABMON_9 ABMON_10 ABMON_11 ABMON_12 MON_1 MON_2 MON_3 MON_4 MON_5 MON_6 MON_7 MON_8 MON_9
181
+ MON_10 MON_11 MON_12 AM_STR PM_STR D_T_FMT D_FMT T_FMT T_FMT_AMPM ERA ERA_YEAR ERA_D_T_FMT ERA_D_FMT ERA_T_FMT
182
+ ALT_DIGITS INT_CURR_SYMBOL CURRENCY_SYMBOL CRNCYSTR MON_DECIMAL_POINT MON_THOUSANDS_SEP MON_GROUPING
183
+ POSITIVE_SIGN NEGATIVE_SIGN INT_FRAC_DIGITS FRAC_DIGITS P_CS_PRECEDES P_SEP_BY_SPACE N_CS_PRECEDES
184
+ N_SEP_BY_SPACE P_SIGN_POSN N_SIGN_POSN DECIMAL_POINT RADIXCHAR THOUSANDS_SEP THOUSEP GROUPING YESEXPR NOEXPR
185
+ YESSTR NOSTR CODESET LOG_EMERG LOG_ALERT LOG_CRIT LOG_ERR LOG_WARNING LOG_NOTICE LOG_INFO LOG_DEBUG LOG_KERN
186
+ LOG_USER LOG_MAIL LOG_DAEMON LOG_AUTH LOG_SYSLOG LOG_LPR LOG_NEWS LOG_UUCP LOG_CRON LOG_AUTHPRIV LOG_LOCAL0
187
+ LOG_LOCAL1 LOG_LOCAL2 LOG_LOCAL3 LOG_LOCAL4 LOG_LOCAL5 LOG_LOCAL6 LOG_LOCAL7 LOG_PID LOG_CONS LOG_ODELAY
188
+ LOG_NDELAY LOG_NOWAIT LOG_PERROR
189
+ ]
190
+
191
+ PREDEFINED = %w[
192
+ $GLOBALS $_SERVER $_GET $_POST $_FILES $_REQUEST $_SESSION $_ENV
193
+ $_COOKIE $php_errormsg $HTTP_RAW_POST_DATA $http_response_header
194
+ $argc $argv
195
+ ]
196
+
197
+ IDENT_KIND = WordList::CaseIgnoring.new(:ident).
198
+ add(KEYWORDS, :keyword).
199
+ add(TYPES, :predefined_type).
200
+ add(LANGUAGE_CONSTRUCTS, :keyword).
201
+ add(BUILTIN_FUNCTIONS, :predefined).
202
+ add(CLASSES, :predefined_constant).
203
+ add(EXCEPTIONS, :exception).
204
+ add(CONSTANTS, :predefined_constant)
205
+
206
+ VARIABLE_KIND = WordList.new(:local_variable).
207
+ add(PREDEFINED, :predefined)
208
+ end
209
+
210
+ module RE # :nodoc:
211
+
212
+ PHP_START = /
213
+ <script\s+[^>]*?language\s*=\s*"php"[^>]*?> |
214
+ <script\s+[^>]*?language\s*=\s*'php'[^>]*?> |
215
+ <\?php\d? |
216
+ <\?(?!xml)
217
+ /xi
218
+
219
+ PHP_END = %r!
220
+ </script> |
221
+ \?>
222
+ !xi
223
+
224
+ HTML_INDICATOR = /<!DOCTYPE html|<(?:html|body|div|p)[> ]/i
225
+
226
+ # IDENTIFIER = /[a-z_\x7f-\xFF][a-z0-9_\x7f-\xFF]*/i
227
+ IDENTIFIER = /[a-z_][a-z0-9_]*/i # customize
228
+ VARIABLE = /\$#{IDENTIFIER}/
229
+
230
+ OPERATOR = /
231
+ \.(?!\d)=? | # dot that is not decimal point, string concatenation
232
+ && | \|\| | # logic
233
+ :: | -> | => | # scope, member, dictionary
234
+ \\(?!\n) | # namespace
235
+ \+\+ | -- | # increment, decrement
236
+ [,;?:()\[\]{}] | # simple delimiters
237
+ [-+*\/%&|^]=? | # ordinary math, binary logic, assignment shortcuts
238
+ [~$] | # whatever
239
+ =& | # reference assignment
240
+ [=!]=?=? | <> | # comparison and assignment
241
+ <<=? | >>=? | [<>]=? # comparison and shift
242
+ /x
243
+
244
+ end
245
+
246
+ protected
247
+
248
+ def scan_tokens encoder, options
249
+
250
+ if check(RE::PHP_START) || # starts with <?
251
+ (match?(/\s*<\S/) && check(/.{1,1000}#{RE::PHP_START}/om)) || # starts with tag and contains <?
252
+ check(/.{0,1000}#{RE::HTML_INDICATOR}/om) ||
253
+ check(/.{1,100}#{RE::PHP_START}/om) # PHP start after max 100 chars
254
+ # is HTML with embedded PHP, so start with HTML
255
+ states = [:initial]
256
+ else
257
+ # is just PHP, so start with PHP surrounded by HTML
258
+ states = [:initial, :php]
259
+ end
260
+
261
+ label_expected = true
262
+ case_expected = false
263
+
264
+ heredoc_delimiter = nil
265
+ delimiter = nil
266
+ modifier = nil
267
+
268
+ until eos?
269
+
270
+ case states.last
271
+
272
+ when :initial # HTML
273
+ if match = scan(RE::PHP_START)
274
+ encoder.text_token match, :inline_delimiter
275
+ label_expected = true
276
+ states << :php
277
+ else
278
+ match = scan_until(/(?=#{RE::PHP_START})/o) || scan_rest
279
+ @html_scanner.tokenize match unless match.empty?
280
+ end
281
+
282
+ when :php
283
+ if match = scan(/\s+/)
284
+ encoder.text_token match, :space
285
+
286
+ elsif match = scan(%r! (?m: \/\* (?: .*? \*\/ | .* ) ) | (?://|\#) .*? (?=#{RE::PHP_END}|$) !xo)
287
+ encoder.text_token match, :comment
288
+
289
+ elsif match = scan(RE::IDENTIFIER)
290
+ kind = Words::IDENT_KIND[match]
291
+ if kind == :ident && label_expected && check(/:(?!:)/)
292
+ kind = :label
293
+ label_expected = true
294
+ else
295
+ label_expected = false
296
+ if kind == :ident && match =~ /^[A-Z]/
297
+ kind = :constant
298
+ elsif kind == :keyword
299
+ case match
300
+ when 'class'
301
+ states << :class_expected
302
+ when 'function'
303
+ states << :function_expected
304
+ when 'case', 'default'
305
+ case_expected = true
306
+ end
307
+ elsif match == 'b' && check(/['"]/) # binary string literal
308
+ modifier = match
309
+ next
310
+ end
311
+ end
312
+ encoder.text_token match, kind
313
+
314
+ elsif match = scan(/(?:\d+\.\d*|\d*\.\d+)(?:e[-+]?\d+)?|\d+e[-+]?\d+/i)
315
+ label_expected = false
316
+ encoder.text_token match, :float
317
+
318
+ elsif match = scan(/0x[0-9a-fA-F]+/)
319
+ label_expected = false
320
+ encoder.text_token match, :hex
321
+
322
+ elsif match = scan(/\d+/)
323
+ label_expected = false
324
+ encoder.text_token match, :integer
325
+
326
+ elsif match = scan(/['"`]/)
327
+ encoder.begin_group :string
328
+ if modifier
329
+ encoder.text_token modifier, :modifier
330
+ modifier = nil
331
+ end
332
+ delimiter = match
333
+ encoder.text_token match, :delimiter
334
+ states.push match == "'" ? :sqstring : :dqstring
335
+
336
+ elsif match = scan(RE::VARIABLE)
337
+ label_expected = false
338
+ encoder.text_token match, Words::VARIABLE_KIND[match]
339
+
340
+ elsif match = scan(/\{/)
341
+ encoder.text_token match, :operator
342
+ label_expected = true
343
+ states.push :php
344
+
345
+ elsif match = scan(/\}/)
346
+ if states.size == 1
347
+ encoder.text_token match, :error
348
+ else
349
+ states.pop
350
+ if states.last.is_a?(::Array)
351
+ delimiter = states.last[1]
352
+ states[-1] = states.last[0]
353
+ encoder.text_token match, :delimiter
354
+ encoder.end_group :inline
355
+ else
356
+ encoder.text_token match, :operator
357
+ label_expected = true
358
+ end
359
+ end
360
+
361
+ elsif match = scan(/@/)
362
+ label_expected = false
363
+ encoder.text_token match, :exception
364
+
365
+ elsif match = scan(RE::PHP_END)
366
+ encoder.text_token match, :inline_delimiter
367
+ states = [:initial]
368
+
369
+ elsif match = scan(/<<<(?:(#{RE::IDENTIFIER})|"(#{RE::IDENTIFIER})"|'(#{RE::IDENTIFIER})')/o)
370
+ encoder.begin_group :string
371
+ # warn 'heredoc in heredoc?' if heredoc_delimiter
372
+ heredoc_delimiter = Regexp.escape(self[1] || self[2] || self[3])
373
+ encoder.text_token match, :delimiter
374
+ states.push self[3] ? :sqstring : :dqstring
375
+ heredoc_delimiter = /#{heredoc_delimiter}(?=;?$)/
376
+
377
+ elsif match = scan(/#{RE::OPERATOR}/o)
378
+ label_expected = match == ';'
379
+ if case_expected
380
+ label_expected = true if match == ':'
381
+ case_expected = false
382
+ end
383
+ encoder.text_token match, :operator
384
+
385
+ else
386
+ encoder.text_token getch, :error
387
+
388
+ end
389
+
390
+ when :sqstring
391
+ if match = scan(heredoc_delimiter ? /[^\\\n]+/ : /[^'\\]+/)
392
+ encoder.text_token match, :content
393
+ elsif !heredoc_delimiter && match = scan(/'/)
394
+ encoder.text_token match, :delimiter
395
+ encoder.end_group :string
396
+ delimiter = nil
397
+ label_expected = false
398
+ states.pop
399
+ elsif heredoc_delimiter && match = scan(/\n/)
400
+ if scan heredoc_delimiter
401
+ encoder.text_token "\n", :content
402
+ encoder.text_token matched, :delimiter
403
+ encoder.end_group :string
404
+ heredoc_delimiter = nil
405
+ label_expected = false
406
+ states.pop
407
+ else
408
+ encoder.text_token match, :content
409
+ end
410
+ elsif match = scan(heredoc_delimiter ? /\\\\/ : /\\[\\'\n]/)
411
+ encoder.text_token match, :char
412
+ elsif match = scan(/\\./m)
413
+ encoder.text_token match, :content
414
+ elsif match = scan(/\\/)
415
+ encoder.text_token match, :error
416
+ else
417
+ states.pop
418
+ end
419
+
420
+ when :dqstring
421
+ if match = scan(heredoc_delimiter ? /[^${\\\n]+/ : (delimiter == '"' ? /[^"${\\]+/ : /[^`${\\]+/))
422
+ encoder.text_token match, :content
423
+ elsif !heredoc_delimiter && match = scan(delimiter == '"' ? /"/ : /`/)
424
+ encoder.text_token match, :delimiter
425
+ encoder.end_group :string
426
+ delimiter = nil
427
+ label_expected = false
428
+ states.pop
429
+ elsif heredoc_delimiter && match = scan(/\n/)
430
+ if scan heredoc_delimiter
431
+ encoder.text_token "\n", :content
432
+ encoder.text_token matched, :delimiter
433
+ encoder.end_group :string
434
+ heredoc_delimiter = nil
435
+ label_expected = false
436
+ states.pop
437
+ else
438
+ encoder.text_token match, :content
439
+ end
440
+ elsif match = scan(/\\(?:x[0-9A-Fa-f]{1,2}|[0-7]{1,3})/)
441
+ encoder.text_token match, :char
442
+ elsif match = scan(heredoc_delimiter ? /\\[nrtvf\\$]/ : (delimiter == '"' ? /\\[nrtvf\\$"]/ : /\\[nrtvf\\$`]/))
443
+ encoder.text_token match, :char
444
+ elsif match = scan(/\\./m)
445
+ encoder.text_token match, :content
446
+ elsif match = scan(/\\/)
447
+ encoder.text_token match, :error
448
+ elsif match = scan(/#{RE::VARIABLE}/o)
449
+ if check(/\[#{RE::IDENTIFIER}\]/o)
450
+ encoder.begin_group :inline
451
+ encoder.text_token match, :local_variable
452
+ encoder.text_token scan(/\[/), :operator
453
+ encoder.text_token scan(/#{RE::IDENTIFIER}/o), :ident
454
+ encoder.text_token scan(/\]/), :operator
455
+ encoder.end_group :inline
456
+ elsif check(/\[/)
457
+ match << scan(/\[['"]?#{RE::IDENTIFIER}?['"]?\]?/o)
458
+ encoder.text_token match, :error
459
+ elsif check(/->#{RE::IDENTIFIER}/o)
460
+ encoder.begin_group :inline
461
+ encoder.text_token match, :local_variable
462
+ encoder.text_token scan(/->/), :operator
463
+ encoder.text_token scan(/#{RE::IDENTIFIER}/o), :ident
464
+ encoder.end_group :inline
465
+ elsif check(/->/)
466
+ match << scan(/->/)
467
+ encoder.text_token match, :error
468
+ else
469
+ encoder.text_token match, :local_variable
470
+ end
471
+ elsif match = scan(/\{/)
472
+ if check(/\$/)
473
+ encoder.begin_group :inline
474
+ states[-1] = [states.last, delimiter]
475
+ delimiter = nil
476
+ states.push :php
477
+ encoder.text_token match, :delimiter
478
+ else
479
+ encoder.text_token match, :content
480
+ end
481
+ elsif match = scan(/\$\{#{RE::IDENTIFIER}\}/o)
482
+ encoder.text_token match, :local_variable
483
+ elsif match = scan(/\$/)
484
+ encoder.text_token match, :content
485
+ else
486
+ states.pop
487
+ end
488
+
489
+ when :class_expected
490
+ if match = scan(/\s+/)
491
+ encoder.text_token match, :space
492
+ elsif match = scan(/#{RE::IDENTIFIER}/o)
493
+ encoder.text_token match, :class
494
+ states.pop
495
+ else
496
+ states.pop
497
+ end
498
+
499
+ when :function_expected
500
+ if match = scan(/\s+/)
501
+ encoder.text_token match, :space
502
+ elsif match = scan(/&/)
503
+ encoder.text_token match, :operator
504
+ elsif match = scan(/#{RE::IDENTIFIER}/o)
505
+ encoder.text_token match, :function
506
+ states.pop
507
+ else
508
+ states.pop
509
+ end
510
+
511
+ else
512
+ raise_inspect 'Unknown state!', encoder, states
513
+ end
514
+
515
+ end
516
+
517
+ encoder
518
+ end
519
+
520
+ end
521
+
522
+ end
523
+ end
@@ -10,10 +10,12 @@ require 'coderay'
10
10
  require 'coderay/helpers/file_type'
11
11
  require 'milkode/common/util'
12
12
  require 'milkode/cdweb/lib/coderay_html2'
13
+ require 'milkode/cdweb/lib/coderay_php_utf8'
13
14
 
14
15
  module Milkode
15
16
  class CodeRayWrapper
16
17
  attr_reader :line_number_start
18
+ attr_reader :highlight_lines
17
19
 
18
20
  def initialize(content, filename, match_lines = [])
19
21
  @content = content
@@ -76,6 +78,8 @@ module Milkode
76
78
 
77
79
  def file_type
78
80
  case File.extname(@filename)
81
+ when ".php"
82
+ :php_utf8
79
83
  when ".el"
80
84
  # :scheme
81
85
  CodeRay::FileType.fetch @filename, :plaintext
@@ -139,13 +139,15 @@ module Milkode
139
139
  paths = records.map {|record|
140
140
  DocumentRecord.new(record).shortpath.split("/")
141
141
  }.find_all {|parts|
142
- parts.length > base_depth and parts[0, base_depth] == base_parts
142
+ # 先頭フォルダ名が一致するものをピックアップ
143
+ parts.length > base_depth && parts[0, base_depth] == base_parts
143
144
  }.map {|parts|
144
- is_file = parts.length == base_depth + 1
145
- path = parts[0, base_depth + 1].join("/")
146
- [path, is_file]
145
+ # [path, is_file]
146
+ [parts[0, base_depth + 1].join("/"), parts.length == base_depth + 1]
147
147
  }.sort_by {|parts|
148
- [if parts[1] then 1 else 0 end, parts[0].downcase]
148
+ # 配列の比較を利用したディレクトリ優先ソート
149
+ # aaa, bbb/, aaa/, bbb -> [aaa/, bbb/, aaa, bbb]
150
+ [parts[1] ? 1 : 0, parts[0].downcase] # [is_file(int), path(downcase)]
149
151
  }.uniq
150
152
 
151
153
  paths
@@ -159,7 +161,9 @@ module Milkode
159
161
  elsif (sort_kind)
160
162
  sorted = @grndb.packages.sort(sort_kind)
161
163
  else
162
- sorted = @grndb.packages.sort("name", "ascending")
164
+ # 大文字/小文字を無視してソートするため、速度を犠牲に
165
+ # sorted = @grndb.packages.sort("name", "ascending")
166
+ sorted = @grndb.packages.to_a.sort_by {|r| r.name.downcase}
163
167
  end
164
168
 
165
169
  sorted.map {|r| r.name}
@@ -197,7 +197,7 @@ EOF
197
197
  url = "/home/" + record_link(record)
198
198
 
199
199
  <<EOS
200
- <dt class='result-record'><a href='#{url + "#n#{coderay.line_number_start}"}'>#{Util::relative_path record.shortpath, @path}</a></dt>
200
+ <dt class='result-record'><a href='#{url + "#n#{coderay.highlight_lines[0]}"}'>#{Util::relative_path record.shortpath, @path}</a></dt>
201
201
  <dd>
202
202
  #{coderay.to_html_anchorlink(url)}
203
203
  </dd>
@@ -222,7 +222,7 @@ EOS
222
222
  EOS
223
223
  end
224
224
 
225
- def record_link(record) #
225
+ def record_link(record)
226
226
  Mkurl.new(record.shortpath, @params).inherit_query_shead
227
227
  end
228
228
 
@@ -1,5 +1,6 @@
1
1
  /* for CodeRay */
2
2
  .CodeRay .highlight-line { background-color: #d0ff9c; }
3
+ .CodeRay .select-line { background-color: #fff280; }
3
4
 
4
5
  /* html_anchor */
5
6
  .match-num { font-size: 13px; font-weight: bold; }
@@ -89,6 +89,17 @@ $(document).ready(function(){
89
89
  update_package($("#updateOk").attr("milkode-package-name"));
90
90
  return false;
91
91
  });
92
+
93
+ var match = document.URL.match(/.+(#n\d+)$/);
94
+ if ( match ) {
95
+ $(match[1]).addClass("select-line");
96
+ } else {
97
+ $("#query").select();
98
+ }
99
+
100
+ $('#query').click(function(){
101
+ $(this).select();
102
+ });
92
103
  });
93
104
 
94
105
  function update_package(package_name)
@@ -111,3 +122,18 @@ function update_package(package_name)
111
122
  }
112
123
  );
113
124
  }
125
+
126
+ function lineno_setup(path, lineno)
127
+ {
128
+ var n_lineno = "#n" + lineno;
129
+
130
+ var h = $('html, body');
131
+ var prev = h.scrollTop();
132
+ window.location.hash = n_lineno;
133
+ h.scrollTop(prev);
134
+
135
+ $(".code > pre > *").removeClass("select-line");
136
+ $(n_lineno).addClass("select-line");
137
+ $("#lineno-path").text(path + lineno);
138
+ $("#lineno-body").html($(n_lineno).html());
139
+ }
@@ -8,7 +8,7 @@ require 'milkode/grep/cli_grep'
8
8
  module Milkode
9
9
  class CLI < Thor
10
10
  class_option :help, :type => :boolean, :aliases => '-h', :desc => 'Help message.'
11
- class_option :version, :type => :boolean, :aliases => '-v', :desc => 'Show version.'
11
+ class_option :version, :type => :boolean, :desc => 'Show version.'
12
12
 
13
13
  desc "init [db_dir]", "Initialize database directory. If db_dir is omitted"
14
14
  option :default, :type => :boolean, :desc => "Init default db, ENV['MILKODE_DEFAULT_DIR'] or ~/.milkode."
@@ -52,11 +52,15 @@ EOF
52
52
  end
53
53
 
54
54
  desc "remove keyword_or_path1 [keyword_or_path2 ...]", "Remove package"
55
- option :all, :type => :boolean, :desc => 'Remove all.'
55
+ option :all, :type => :boolean, :aliases => '-a', :desc => 'Remove all.'
56
56
  option :force, :type => :boolean, :aliases => '-f', :desc => 'Force remove.'
57
57
  option :verbose, :type => :boolean, :aliases => '-v', :desc => 'Be verbose.'
58
58
  def remove(*args)
59
- cdstk.remove(args, options)
59
+ if args.empty? && !options[:all]
60
+ CLI.task_help(shell, "remove")
61
+ else
62
+ cdstk.remove(args, options)
63
+ end
60
64
  end
61
65
 
62
66
  desc "list [package1 package2 ...]", "List package"
@@ -98,8 +102,8 @@ EOF
98
102
 
99
103
  desc "setdb [dbpath]", "Set default db to dbpath"
100
104
  option :reset, :type => :boolean, :aliases => '--default', :desc => 'Reset to the system default database.'
101
- def setdb(dbpath = nil)
102
- cdstk.setdb(dbpath, options)
105
+ def setdb(*args)
106
+ cdstk.setdb(args, options)
103
107
  end
104
108
 
105
109
  desc "mcd", "Generate `mcd' command"
@@ -59,6 +59,7 @@ module Milkode
59
59
  { :name => 'SVG' , :suffixs => ['svg'] },
60
60
  { :name => 'Tcl' , :suffixs => ['tcl'] },
61
61
  { :name => 'Text' , :suffixs => ['txt'] },
62
+ { :name => 'Visual Studio' , :suffixs => ['csproj', 'vbproj', 'sln'] },
62
63
  { :name => 'XML' , :suffixs => ['xml'] },
63
64
  { :name => 'Yaml' , :suffixs => ['yml', 'yaml'] },
64
65
  # { :name => '' , :suffixs => [] , :filenames => [] },
@@ -183,6 +183,10 @@ module Milkode
183
183
  def pipe?(io)
184
184
  !io.instance_of?(IO) || !File.pipe?(io)
185
185
  end
186
+
187
+ def warning_alert(out, msg)
188
+ out.puts "[warning] #{msg}"
189
+ end
186
190
  end
187
191
  end
188
192
 
@@ -327,7 +327,13 @@ module Milkode
327
327
  private
328
328
 
329
329
  def load_content(filename)
330
- Kconv.kconv(File.read(filename), Kconv::UTF8)
330
+ str = File.read(filename)
331
+ begin
332
+ Kconv.kconv(str, Kconv::UTF8)
333
+ rescue ArgumentError
334
+ Util.warning_alert($stdout, "skip kconv. file size too big (or negative string size) : #{filename}.")
335
+ str
336
+ end
331
337
  end
332
338
 
333
339
  def package_expression(record, packages)
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{milkode}
8
- s.version = "0.9.3.1"
8
+ s.version = "0.9.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["ongaeshi"]
12
- s.date = %q{2012-10-14}
12
+ s.date = %q{2012-11-14}
13
13
  s.description = %q{Line based local source code search engine & grep-command & web-app.}
14
14
  s.email = %q{ongaeshi0621@gmail.com}
15
15
  s.executables = ["gmilk", "milk"]
@@ -37,6 +37,7 @@ Gem::Specification.new do |s|
37
37
  "lib/milkode/cdweb/cli_cdweb.rb",
38
38
  "lib/milkode/cdweb/config.ru",
39
39
  "lib/milkode/cdweb/lib/coderay_html2.rb",
40
+ "lib/milkode/cdweb/lib/coderay_php_utf8.rb",
40
41
  "lib/milkode/cdweb/lib/coderay_wrapper.rb",
41
42
  "lib/milkode/cdweb/lib/command.rb",
42
43
  "lib/milkode/cdweb/lib/database.rb",
@@ -186,7 +187,7 @@ Gem::Specification.new do |s|
186
187
  s.specification_version = 3
187
188
 
188
189
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
189
- s.add_runtime_dependency(%q<termcolor>, [">= 1.2.0"])
190
+ s.add_runtime_dependency(%q<termcolor>, [">= 1.2.0", "< 1.2.2"])
190
191
  s.add_runtime_dependency(%q<rroonga>, [">= 1.1.0"])
191
192
  s.add_runtime_dependency(%q<rack>, [">= 1.3.4"])
192
193
  s.add_runtime_dependency(%q<sinatra>, [">= 1.2.6"])
@@ -201,7 +202,7 @@ Gem::Specification.new do |s|
201
202
  s.add_development_dependency(%q<jeweler>, [">= 0"])
202
203
  s.add_development_dependency(%q<rack-test>, [">= 0"])
203
204
  else
204
- s.add_dependency(%q<termcolor>, [">= 1.2.0"])
205
+ s.add_dependency(%q<termcolor>, [">= 1.2.0", "< 1.2.2"])
205
206
  s.add_dependency(%q<rroonga>, [">= 1.1.0"])
206
207
  s.add_dependency(%q<rack>, [">= 1.3.4"])
207
208
  s.add_dependency(%q<sinatra>, [">= 1.2.6"])
@@ -217,7 +218,7 @@ Gem::Specification.new do |s|
217
218
  s.add_dependency(%q<rack-test>, [">= 0"])
218
219
  end
219
220
  else
220
- s.add_dependency(%q<termcolor>, [">= 1.2.0"])
221
+ s.add_dependency(%q<termcolor>, [">= 1.2.0", "< 1.2.2"])
221
222
  s.add_dependency(%q<rroonga>, [">= 1.1.0"])
222
223
  s.add_dependency(%q<rack>, [">= 1.3.4"])
223
224
  s.add_dependency(%q<sinatra>, [">= 1.2.6"])
@@ -19,6 +19,7 @@ module Milkode
19
19
  assert_equal 'Ruby' , PlangDetector.new('template.rb').name
20
20
  assert_equal 'README' , PlangDetector.new('readme.txt').name
21
21
  assert_equal 'JavaScript' , PlangDetector.new('main.js').name
22
+ assert_equal 'Visual Studio', PlangDetector.new('hoge.sln').name
22
23
  end
23
24
 
24
25
  def test_unknown
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: milkode
3
3
  version: !ruby/object:Gem::Version
4
- hash: 9
4
+ hash: 51
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 9
9
- - 3
10
- - 1
11
- version: 0.9.3.1
9
+ - 4
10
+ version: 0.9.4
12
11
  platform: ruby
13
12
  authors:
14
13
  - ongaeshi
@@ -16,7 +15,7 @@ autorequire:
16
15
  bindir: bin
17
16
  cert_chain: []
18
17
 
19
- date: 2012-10-14 00:00:00 +09:00
18
+ date: 2012-11-14 00:00:00 +09:00
20
19
  default_executable:
21
20
  dependencies:
22
21
  - !ruby/object:Gem::Dependency
@@ -34,6 +33,14 @@ dependencies:
34
33
  - 2
35
34
  - 0
36
35
  version: 1.2.0
36
+ - - <
37
+ - !ruby/object:Gem::Version
38
+ hash: 27
39
+ segments:
40
+ - 1
41
+ - 2
42
+ - 2
43
+ version: 1.2.2
37
44
  requirement: *id001
38
45
  - !ruby/object:Gem::Dependency
39
46
  type: :runtime
@@ -267,6 +274,7 @@ files:
267
274
  - lib/milkode/cdweb/cli_cdweb.rb
268
275
  - lib/milkode/cdweb/config.ru
269
276
  - lib/milkode/cdweb/lib/coderay_html2.rb
277
+ - lib/milkode/cdweb/lib/coderay_php_utf8.rb
270
278
  - lib/milkode/cdweb/lib/coderay_wrapper.rb
271
279
  - lib/milkode/cdweb/lib/command.rb
272
280
  - lib/milkode/cdweb/lib/database.rb