1
1
mirror of https://github.com/github/semantic.git synced 2024-12-22 22:31:36 +03:00
Commit Graph

391 Commits

Author SHA1 Message Date
Matt Diephouse
8df993408d Set the correct flags 2016-02-16 16:45:49 -05:00
Matt Diephouse
c8edf79abb Add a spec for test files 2016-02-16 16:38:31 -05:00
Matt Diephouse
5127376e68 diffFiles :: Parser -> Renderer T.Text b -> (Source Char, Source Char) -> IO b 2016-02-16 16:09:58 -05:00
Matt Diephouse
ac053940fe Add a spec for on-disk tests 2016-02-16 12:33:41 -05:00
Rob Rix
52875fdd99 Silence a warning for the DiffOutput module. 2016-02-13 15:09:13 -08:00
Rob Rix
bda4df6731 Build threadily. 2016-02-13 14:16:49 -08:00
Rob Rix
54cf53e639 Add DiffOutput to the cabal file. 2016-02-13 12:41:07 -08:00
Matt Diephouse
4a5c844f34 Move Language to a separate module 2016-02-10 14:30:14 -08:00
Matt Diephouse
170b7c6e1e Rename Categorizable module to Category 2016-02-04 13:59:33 -05:00
joshvera
724910bf7a Merge remote-tracking branch 'origin/master' into git-diff 2016-02-01 14:48:30 -05:00
Matt Diephouse
316a7827c3 Add Rainbow to semantic-diff-exe 2016-01-21 13:32:00 -05:00
joshvera
84d8494c3e Add semantic-diff exe 2016-01-15 16:25:58 -05:00
joshvera
13b676f392 Merge origin/master into git-diff 2016-01-14 14:04:28 -05:00
Matt Diephouse
9c4ea153bc Add a Renderer type for rendering diffs 2016-01-14 13:18:40 -05:00
Matt Diephouse
6a3f5c4c00 Use Option instead of creating a Union type 2016-01-13 13:34:56 -05:00
Rob Rix
c5059e94ee Just include-dirs. 2016-01-13 13:34:56 -05:00
Rob Rix
6bffb323c2 Extra include dirs. 2016-01-13 13:34:56 -05:00
Rob Rix
7dbaddf8fa Add the homebrew icu4c path to extra-lib-dirs on Darwin. 2016-01-13 13:34:56 -05:00
Matt Diephouse
473866cb6a Use Option instead of creating a Union type 2016-01-13 10:04:26 -05:00
Rob Rix
bfbb1745dd Just include-dirs. 2016-01-12 20:49:46 -05:00
Rob Rix
57cee8f754 Extra include dirs. 2016-01-12 20:47:50 -05:00
Rob Rix
47ed985a6a Add the homebrew icu4c path to extra-lib-dirs on Darwin. 2016-01-12 20:39:04 -05:00
joshvera
8f069abbce Merge master into git-diff 2016-01-12 12:53:09 -05:00
Rob Rix
662e14448e Just link the libs on Darwin (I hope, oh god I hope) 2016-01-12 11:55:23 -05:00
Rob Rix
fe759bb6cd Now with 100% more correct syntax! 2016-01-12 11:46:11 -05:00
Rob Rix
d37fcb287e Don’t use script/g++ on Darwin. 2016-01-12 11:42:55 -05:00
Rob Rix
23ac8b749e We don’t need these options any more.
-lstdc++ is handled by g++. The libraries are handled by our wrapper
script.
2016-01-11 19:23:53 -05:00
Rob Rix
5519a1dda0 Use the linker wrapper. 2016-01-11 19:18:34 -05:00
Rob Rix
b7030fe9bf Pass the flags through as tho to g++ itself. 2016-01-11 19:10:57 -05:00
Rob Rix
0ceafb12ac Pass icui18n first. 2016-01-11 19:09:36 -05:00
Rob Rix
dc1d017a40 -Bstatic/-Bdynamic exist and may actually differ. 2016-01-11 15:34:50 -05:00
Rob Rix
5978a57204 Link -lstdc++ via ld-options. 2016-01-11 13:08:41 -05:00
Rob Rix
3404008f5b Don’t use extra-libraries. 2016-01-11 13:08:27 -05:00
Rob Rix
2dc2c94b79 Use ld-options again. 2016-01-11 13:08:23 -05:00
Rob Rix
ef3efba294 Revert "Don’t link ICU (to compare the errors)."
This reverts commit 2e6ce0b97b1ccf8f95c8086b5e75d8b6ed23cee0.
2016-01-11 13:07:47 -05:00
Rob Rix
b986780045 Don’t link ICU (to compare the errors). 2016-01-11 13:05:32 -05:00
Rob Rix
407e9bf8bc extra-libs here maybe? 2016-01-11 12:55:48 -05:00
Rob Rix
d5d7997a19 Try to statically link the ICU libs but dynamically link everything else. 2016-01-11 12:52:29 -05:00
Rob Rix
5c18bb7715 Revert "Pass the static archives in as ld-options."
This reverts commit 6934d44e96e6d999b352e21bfc6446c99b80a387.
2016-01-11 12:50:04 -05:00
Rob Rix
a09449720a Pass the static archives in as ld-options. 2016-01-11 12:46:05 -05:00
Rob Rix
e767f9858d Revert "Pass the static archives in as c-sources."
This reverts commit ff1b6769186add595de0d3d521efacd5e54cfebb.
2016-01-11 12:45:30 -05:00
Rob Rix
39a4d00a99 Pass the static archives in as c-sources. 2016-01-11 12:44:31 -05:00
Rob Rix
a951895ebf Try linking against ICU .a’s directly. 2016-01-11 12:41:43 -05:00
Rob Rix
861a6dfc88 Remove the semantic-diff-profile component. 2016-01-11 11:46:12 -05:00
Rob Rix
e931df2bd5 Remove ld-options. 2016-01-11 11:16:47 -05:00
Rob Rix
66fb848834 Revert "Revert "Remove -dynamic.""
This reverts commit 7dfd43f26ed0d880ff498f98f3544059c9d5ada6.
2016-01-11 11:14:16 -05:00
Rob Rix
597397b16e Revert "Remove -dynamic."
This reverts commit a0c75e64bb5896ee336d2a9c38eba4b3a6f49f9a.
2016-01-11 11:13:04 -05:00
Rob Rix
e2d4b6bfea Remove -dynamic. 2016-01-11 11:12:15 -05:00
Rob Rix
188d6025d7 Revert "Attempt to link the ICU libs statically."
This reverts commit 5961a362ac93ff2c28e59a3bb18900c7713d68e8.
2016-01-11 11:12:03 -05:00
Rob Rix
342d42f9d2 Attempt to link the ICU libs statically. 2016-01-11 11:10:05 -05:00
Rob Rix
6f56d9b59d Move -dynamic to the end instead. 2016-01-11 11:09:43 -05:00
Rob Rix
842f943920 Try linking libstdc++ dynamically as well. 2016-01-11 11:02:23 -05:00
Rob Rix
42a69077b8 Try to link libc dynamically. 2016-01-11 10:53:20 -05:00
Rob Rix
7b27db926e Move the static/pthread options to ld-options. 2016-01-11 10:48:18 -05:00
Rob Rix
e900220aa3 Pass -optl-pthread in the cabal file. 2016-01-11 10:37:51 -05:00
Rob Rix
8bec83cf84 Build the profile executable with -static -optl-static. 2016-01-11 10:11:17 -05:00
Rob Rix
bd50d1812a Build the executable with -optl-static. 2016-01-11 10:10:50 -05:00
Rob Rix
1af0fbab68 Remove the second ghc-options entry from the cabal file. 2016-01-11 09:47:17 -05:00
Rob Rix
80ff4875b1 Indentation 💄 2016-01-11 09:46:50 -05:00
joshvera
61520c1351 remove optl-pthread 2016-01-08 20:29:01 -05:00
joshvera
48fd1a4b21 set optl-pthread and optl-static 2016-01-08 20:24:24 -05:00
Rob Rix
e75652b33b Revert "Don’t set the static flag."
This reverts commit 0cc9f066eb0a1d8411d08666106291f978550b93.
2016-01-08 17:57:05 -05:00
Rob Rix
9b1bcd43ec Don’t set the static flag. 2016-01-08 17:55:56 -05:00
Rob Rix
2e5064fe99 Revert "Comment out static implementations for now."
This reverts commit 62319718cbf86c3cd0b70496d569e80aca7b96c0.
2016-01-08 17:06:36 -05:00
Rob Rix
c7a9ae66b6 Revert "🔥 the static implementation flags."
This reverts commit 9e8c2c22bee3c57e4e8b063ef6c7eb628674368a.
2016-01-08 17:06:32 -05:00
Rob Rix
1173677d0d 🔥 the static implementation flags. 2016-01-08 17:04:27 -05:00
Rob Rix
256a34b7d0 Comment out static implementations for now. 2016-01-08 16:58:17 -05:00
Rob Rix
3e0a4dfcd9 Try to build against the static lib. 2016-01-08 16:38:12 -05:00
Rob Rix
651390e884 Revert "Link icui18n explicitly."
This reverts commit 25eed4139a0c2acb01e618ef2d545a68d6bba0de.
2016-01-08 16:03:45 -05:00
Rob Rix
87b4434f96 Revert "Link all the ICUs!"
This reverts commit e5a67590fe654ab86a96dc18260e36a4532dd7bd.
2016-01-08 16:03:40 -05:00
Rob Rix
29a13900ef Link all the ICUs! 2016-01-08 16:00:49 -05:00
Rob Rix
6c75393669 Link icui18n explicitly. 2016-01-08 15:59:17 -05:00
Rob Rix
a1a69a8def Revert "Extra static linkage."
This reverts commit 3940a4c675985ddbb40a1c0f449621bcc05b434c.
2016-01-08 15:55:39 -05:00
Rob Rix
804766ec3c Revert "Link statically via ld-options."
This reverts commit f1c3591fed908b7d5a399dd938e3086202fe0db0.
2016-01-08 15:55:33 -05:00
Rob Rix
98d6c1a57e Revert "More staticity."
This reverts commit 1952d27e3e55b781a3e55203315dd4c1205e6562.
2016-01-08 15:55:28 -05:00
Rob Rix
2b755741d0 More staticity. 2016-01-08 15:50:00 -05:00
Rob Rix
45c7e3177f Link statically via ld-options. 2016-01-08 15:44:56 -05:00
Rob Rix
0bad34c1c3 Extra static linkage. 2016-01-08 15:30:13 -05:00
Rob Rix
a6fffe1be3 Spacing. 2016-01-08 15:30:04 -05:00
Rob Rix
b91dfa18a3 Revert "Try linking icuuc directly."
This reverts commit ffc4e40bc11f35b9b2cc5c54b040f940acf0ae79.
2016-01-08 15:23:12 -05:00
Rob Rix
376d53b212 Revert "Can we build without the exe?"
This reverts commit f44db6cfa2bb68ab37a13081a6a5423483aeabf4.
2016-01-08 15:21:19 -05:00
Rob Rix
dc2e034ef0 Can we build without the exe? 2016-01-08 15:20:23 -05:00
Rob Rix
f2a8872546 Try linking icuuc directly. 2016-01-08 15:10:48 -05:00
Rob Rix
0a92cd73a1 Revert "Compile any C as C99."
This reverts commit 8809217a57fd926d8f9a153bab37e36ac5da5d03.
2016-01-08 14:03:30 -05:00
Rob Rix
06eb07ba02 Compile any C as C99. 2016-01-08 13:49:41 -05:00
Rob Rix
0ee6a6738a Custom build setup to set the paths. 2016-01-08 13:24:25 -05:00
Rob Rix
8da1fcf991 Merge branch 'master' into d-e-p-l-o-y-m-e-n-t 2016-01-08 12:33:57 -05:00
joshvera
fc13585bcf depend on stdc++ 2016-01-08 12:09:19 -05:00
Rob Rix
db6cdca7cb Pass -static to ghc, and let it figure out the call to the linker. 2016-01-08 10:46:31 -05:00
Rob Rix
cd12d1fbc1 Remove the pthread option. 2016-01-08 10:45:15 -05:00
Rob Rix
6a7908c769 Ensure static linking of the exe. 2016-01-08 10:42:24 -05:00
joshvera
9975bd0e57 Add mtl, tagged, and gitlib-libgit2 dependencies 2016-01-06 16:15:40 -05:00
Josh Vera
768ca30a7b Merge pull request #385 from github/data-dot-ordered-map
Move OrderedMap into Data.
2016-01-06 13:09:22 -05:00
Rob Rix
7af5a4876a Move OrderedMap into Data. 2016-01-06 11:56:58 -05:00
joshvera
8b4904c209 Add gitlib to semantic diff exe 2016-01-06 11:34:04 -05:00
Rob Rix
7dedd39cab Manually include all of the other specs. 2016-01-05 11:27:14 -05:00
Rob Rix
34ecaf16af It’s a brand new year 🎉 2016-01-05 11:26:58 -05:00
joshvera
c61b16d993 move these 2016-01-04 16:04:04 -05:00
joshvera
2438de3040 Remove conduit dependency 2016-01-04 15:50:31 -05:00
joshvera
44e9f50434 remove uses of lens 2016-01-04 14:48:55 -05:00
joshvera
15724218b8 Merge remote-tracking branch 'origin/master' into use-conduit 2016-01-04 14:26:18 -05:00
Josh Vera
2bffbe9537 Merge pull request #353 from github/patch
Patch output
2016-01-04 12:13:09 -05:00
Rob Rix
d79c6084b1 Revert "Remove the deriving extensions from the cabal file."
This reverts commit e9f5bd112d55aff2523d8f1b1436bd1e4c70f01a.
2016-01-04 12:04:12 -05:00
Rob Rix
5a10bbb374 Revert "Remove OverloadedStrings from the default extensions."
This reverts commit 6904929f082dd8b2c048884a9f62415ee37c3be5.
2016-01-04 12:03:05 -05:00
Rob Rix
dc9113aa6d Remove OverloadedStrings from the default extensions. 2016-01-04 09:28:16 -05:00
Rob Rix
b227546e29 Remove FlexibleInstances from the default extensions. 2016-01-04 09:25:44 -05:00
Rob Rix
089752f101 Remove the deriving extensions from the cabal file. 2016-01-04 09:22:45 -05:00
Rob Rix
09459a3421 Merge branch 'master' into patch 2015-12-30 18:55:42 -05:00
joshvera
24015141b7 Add conduit 2015-12-30 18:00:57 -05:00
joshvera
8852f81023 Remove unused modules 2015-12-30 17:53:35 -05:00
joshvera
e7da8b64c5 Add text-icu package 2015-12-29 17:34:35 -05:00
joshvera
414f275639 build text-icu 2015-12-29 15:18:22 -05:00
joshvera
a3051c531d Merge remote-tracking branch 'origin/master' into use-text 2015-12-29 15:13:57 -05:00
Rob Rix
0866ef52bd Merge branch 'diff-performance' into patch 2015-12-24 16:33:24 -05:00
Rob Rix
cc9dee5704 Stub in a Source module. 2015-12-23 22:38:02 -05:00
Rob Rix
61eccbcd80 Link against vector instead. 2015-12-23 22:35:55 -05:00
Rob Rix
c23833485e Depend on array. 2015-12-23 20:33:24 -05:00
Rob Rix
46635ccb60 Merge branch 'profiling-improvements' into split-performance
# Conflicts:
#	src/Range.hs
2015-12-23 19:50:27 -05:00
Rob Rix
1d5114318d Enable profiling on the library as well. 2015-12-23 19:42:55 -05:00
Rob Rix
0136305f34 Merge branch 'ffi-ffs' into patch
# Conflicts:
#	src/Range.hs
2015-12-23 18:06:38 -05:00
Rob Rix
21ac483558 DeriveGeneric. 2015-12-23 09:58:46 -05:00
Rob Rix
6edd7453e4 Attempt to depend on c-storable-deriving again. 2015-12-23 09:57:15 -05:00
Rob Rix
6049a99ed7 Merge branch 'split-refactoring' into patch 2015-12-22 19:01:50 -05:00
Rob Rix
b256d46f83 Stub in a Row module. 2015-12-22 17:24:08 -05:00
Rob Rix
8f469a07c4 Stub in a Line module. 2015-12-22 17:20:08 -05:00
Rob Rix
6e20ad6a9c Revert "Enable RankNTypes."
This reverts commit 8fce071dc9a45ff1ecb9d683980fc584a358eece.
2015-12-22 15:17:55 -05:00
Rob Rix
c41a2cfccc Enable RankNTypes. 2015-12-22 14:53:29 -05:00
Rob Rix
38a317156b Move arbitrary term generation into its own module. 2015-12-22 12:53:31 -05:00
joshvera
0121a44432 Don't depend on text-icu 2015-12-18 14:57:30 -05:00
joshvera
cfc4a97f9d Merge remote-tracking branch 'origin/master' into use-bytestrings 2015-12-18 14:43:25 -05:00
Rob Rix
70c5179a6b Merge branch 'master' into patch 2015-12-17 17:34:45 -05:00
Rob Rix
f41c154b76 Stub in a PatchOutput module. 2015-12-17 17:22:09 -05:00
Rob Rix
71d55d177e Revert "Figure out our extra lib dirs correctly."
This reverts commit fe4dcf2ae2f5f4118e3df6ae28d63b304482683c.
2015-12-17 16:34:28 -05:00
Rob Rix
f37c51b8b8 Depend on tree-sitter-parsers. 2015-12-17 14:49:28 -05:00
Rob Rix
5e1bf1377b Don’t try to build the bridge. 2015-12-17 14:43:09 -05:00
Rob Rix
86fc332cff Merge branch 'master' into self-contained-binary 2015-12-17 13:43:00 -05:00
Rob Rix
ae14851129 Revert "Declare the interpreter spec in the cabal file."
This reverts commit 55f0f2eeef07a7b9719de94bdb0d191c31e205e1.
2015-12-17 13:42:52 -05:00
Rob Rix
f4248aaa64 Figure out our extra lib dirs correctly. 2015-12-17 13:37:24 -05:00
joshvera
802ed919f5 Don't need OrderedMapSpec in other-modules 2015-12-17 13:10:41 -05:00
Rob Rix
2d0e030c23 Compile the parsers into the library. 2015-12-17 13:10:14 -05:00
Rob Rix
09b9defa2d Build the bridge directly. 2015-12-17 13:09:08 -05:00
Rob Rix
d05e622768 Look for headers in tree-sitter’s include dir. 2015-12-17 13:09:05 -05:00
Rob Rix
e3abd5feea Don’t link the executables against libbridge. 2015-12-17 12:57:31 -05:00
Rob Rix
12e964884d Declare the interpreter spec in the cabal file. 2015-12-17 12:54:34 -05:00
Rob Rix
96f189719a Move TreeSitter into the library. 2015-12-17 12:54:27 -05:00
Rob Rix
e47d3d4d3c Move the Parser type back into the library. 2015-12-16 16:24:23 -05:00
Rob Rix
1504a985de Rename Parser to Parsers. 2015-12-16 16:21:49 -05:00
Rob Rix
c034942a4c Don’t depend on trifecta. 2015-12-16 15:36:11 -05:00
Rob Rix
6270b4aa7e Remove the Haskell module. 2015-12-16 15:36:08 -05:00
Rob Rix
51098e2023 Pretend like we know what we’re doing & parse with Trifecta instead. 2015-12-16 11:48:09 -05:00
Rob Rix
6ea78f4318 Merge branch 'output-directory' into haskell-parser 2015-12-16 01:58:18 -05:00
Rob Rix
c451506ecd Add directory to the dependencies. 2015-12-16 01:18:43 -05:00
joshvera
5fe694d2b8 nope gotta normalize sources in main 2015-12-15 17:42:37 -05:00
joshvera
566205254c normalize sources 2015-12-15 16:39:32 -05:00
joshvera
e80bc4590d add text-icu 2015-12-15 16:34:47 -05:00
joshvera
9d10f8ba4f Add quickcheck-text to generate arbitrary utf-8 2015-12-15 15:03:10 -05:00
Rob Rix
39593d0ee3 The profile component depends on parsec. 2015-12-15 14:55:28 -05:00
joshvera
30132a94de pin QuickCheck and hspec 2015-12-15 14:53:03 -05:00
Rob Rix
96d604092e Add the Haskell module to the profile component. 2015-12-15 14:36:42 -05:00
Rob Rix
ad68d7beab Move Parser into the executable(s). 2015-12-15 14:35:11 -05:00
Rob Rix
706da9e13e Stub in a Haskell parser module. 2015-12-15 14:22:06 -05:00
Rob Rix
c9ad5f3941 Depend on parsec. 2015-12-15 14:22:00 -05:00
joshvera
6eb8172fe4 output split diffs as Text 2015-12-15 13:29:58 -05:00
joshvera
6ea23b813b add TextShow so we don't have to text . show 2015-12-15 12:11:05 -05:00
joshvera
85c7b8f92d Add text package to cabal 2015-12-15 11:47:52 -05:00
Rob Rix
205a885305 Stub in an OrderedMapSpec module. 2015-12-14 17:42:57 -05:00
Rob Rix
5ecb5a6d1d Merge branch 'master' into ordered-map 2015-12-14 17:13:58 -05:00
Rob Rix
187cecefdb Stub in an OrderedMap type. 2015-12-11 17:07:34 -05:00
Rob Rix
3077bdaebd Remove FlexibleInstances. 2015-12-11 16:07:30 -05:00
Rob Rix
77870a069b Enable FlexibleInstances. 2015-12-11 16:01:09 -05:00
Rob Rix
07060e8137 DeriveGeneric. 2015-12-11 13:37:33 -05:00
Rob Rix
7e185f8f7a Merge branch 'master' into quickcheck 2015-12-11 13:35:48 -05:00
joshvera
e92444d87d Remove profiteur from semantic-diff-profile build-depends 2015-12-11 00:16:05 -05:00
Rob Rix
ec655117d2 Link the tests against QuickCheck. 2015-12-10 23:38:01 -05:00
joshvera
c8b5cad4e4 Build a separate target when profiling 2015-12-10 23:34:53 -05:00
Rob Rix
d7f415da04 Move all of the tree-sitter stuff into its own module. 2015-12-09 09:58:15 -05:00
Rob Rix
f8d43dcfad Add a Parser module/type. 2015-12-09 09:49:24 -05:00
Rob Rix
7186aa7cb6 Depend on blaze-html. 2015-12-07 12:21:06 -05:00
Rob Rix
207bf58c32 Look for libbridge in the project dir. 2015-12-07 11:17:35 -05:00
Rob Rix
1f73e92a79 The tests depend on free. 2015-12-04 10:17:26 -05:00
Rob Rix
1d54750bd4 The tests depend on containers. 2015-12-04 09:16:01 -05:00
Rob Rix
9e554a04cc Alphabetize. 2015-12-04 09:15:54 -05:00
joshvera
79f2f94c2c Add ts_language_js as a language 2015-12-03 15:21:34 -05:00
joshvera
c20ea6ee78 Switch parsers on mediaType 2015-12-03 15:10:49 -05:00
Rob Rix
950f40693f The tests depend on hspec. 2015-12-03 11:38:43 -05:00
Rob Rix
815494b619 Copy the necessary dependencies into the library. 2015-12-03 11:38:37 -05:00
Rob Rix
bbcb3be6fc Move Split & Unified into the library. 2015-12-03 11:37:18 -05:00
Rob Rix
ba2b58f66b Turn off -Werror.
This apparently controls the severity of assertions from hlint as well,
which was making it difficult to understand what was actually a problem
in the source.
2015-12-03 10:15:00 -05:00
joshvera
2a063d3277 Move Range to a module 2015-12-02 21:40:34 -05:00
Rob Rix
5bda74b2ea Disable the warning on name shadowing.
Seriously.
2015-12-02 09:30:25 -05:00
Rob Rix
a2e1038190 Bring in optparse-applicative. 2015-12-01 11:00:58 -05:00
Rob Rix
d5f53facd2 Stub in a Split module. 2015-12-01 10:56:27 -05:00
Rob Rix
71dccbdf6e Bring in the state monad. 2015-11-30 16:00:34 -05:00
Rob Rix
3f7c155e09 Depend on bytestring. 2015-11-27 12:41:30 -05:00
Rob Rix
0cd8ba9593 Enable wall/werror. 2015-11-27 12:02:24 -05:00
Rob Rix
bb9bf71d17 Merge branch 'master' into sunshine-lollipops-and-rainbows-everywhere
# Conflicts:
#	semantic-diff.cabal
2015-11-27 11:36:18 -05:00
Rob Rix
7a2ed62632 Don’t include Console. 2015-11-27 11:33:43 -05:00
Rob Rix
1f0c240b0c We don’t need to depend on these after all. 2015-11-27 11:30:31 -05:00
Rob Rix
1b0aa372bf Depend on bytestring. 2015-11-27 10:53:25 -05:00
Rob Rix
4e26e0dbf4 Depend on utf8-string. 2015-11-27 10:45:08 -05:00