From 0527e1f9fe00642207d78213f7d1436f8aa5ef0d Mon Sep 17 00:00:00 2001 From: Flaviu Tamas Date: Tue, 26 May 2015 19:14:04 -0400 Subject: [PATCH] Rearrange nre files --- lib/impure/{nre/src => }/nre.nim | 4 +- lib/impure/nre/LICENCE | 19 -- lib/impure/nre/README.rst | 258 ------------------ lib/impure/nre/circle.yml | 39 --- lib/impure/nre/nre.nimble | 11 - lib/impure/nre/{src => }/private/pcre.h | 0 lib/impure/nre/{src => }/private/pcre.nim | 2 +- .../nre/{src => }/private/pcre_src/config.h | 0 .../nre/{src => }/private/pcre_src/pcre.h | 0 .../private/pcre_src/pcre_byte_order.c | 0 .../private/pcre_src/pcre_chartables.c | 0 .../{src => }/private/pcre_src/pcre_compile.c | 0 .../{src => }/private/pcre_src/pcre_config.c | 0 .../private/pcre_src/pcre_dfa_exec.c | 0 .../{src => }/private/pcre_src/pcre_exec.c | 0 .../private/pcre_src/pcre_fullinfo.c | 0 .../nre/{src => }/private/pcre_src/pcre_get.c | 0 .../{src => }/private/pcre_src/pcre_globals.c | 0 .../private/pcre_src/pcre_internal.h | 0 .../private/pcre_src/pcre_jit_compile.c | 0 .../private/pcre_src/pcre_maketables.c | 0 .../{src => }/private/pcre_src/pcre_newline.c | 0 .../private/pcre_src/pcre_ord2utf8.c | 0 .../private/pcre_src/pcre_refcount.c | 0 .../private/pcre_src/pcre_string_utils.c | 0 .../{src => }/private/pcre_src/pcre_study.c | 0 .../{src => }/private/pcre_src/pcre_tables.c | 0 .../nre/{src => }/private/pcre_src/pcre_ucd.c | 0 .../private/pcre_src/pcre_valid_utf8.c | 0 .../{src => }/private/pcre_src/pcre_version.c | 0 .../{src => }/private/pcre_src/pcre_xclass.c | 0 .../nre/{src => }/private/pcre_src/ucp.h | 0 lib/impure/nre/{src => }/private/util.nim | 0 lib/impure/nre/runtests.sh | 3 - lib/impure/nre/test/testall.nim | 9 - lib/impure/nre/web/logo.png | Bin 41667 -> 0 bytes lib/impure/nre/web/logo.svg | 1 - .../test => tests/stdlib/nre}/captures.nim | 0 .../nre/test => tests/stdlib/nre}/escape.nim | 0 .../nre/test => tests/stdlib/nre}/find.nim | 0 .../nre/test => tests/stdlib/nre}/init.nim | 0 .../nre/test => tests/stdlib/nre}/match.nim | 0 .../nre/test => tests/stdlib/nre}/misc.nim | 0 .../stdlib/nre}/optional_nonstrict.nim | 0 .../nre/test => tests/stdlib/nre}/replace.nim | 0 .../nre/test => tests/stdlib/nre}/split.nim | 0 tests/stdlib/tnre.nim | 9 + 47 files changed, 12 insertions(+), 343 deletions(-) rename lib/impure/{nre/src => }/nre.nim (99%) delete mode 100644 lib/impure/nre/LICENCE delete mode 100644 lib/impure/nre/README.rst delete mode 100644 lib/impure/nre/circle.yml delete mode 100644 lib/impure/nre/nre.nimble rename lib/impure/nre/{src => }/private/pcre.h (100%) rename lib/impure/nre/{src => }/private/pcre.nim (99%) rename lib/impure/nre/{src => }/private/pcre_src/config.h (100%) rename lib/impure/nre/{src => }/private/pcre_src/pcre.h (100%) rename lib/impure/nre/{src => }/private/pcre_src/pcre_byte_order.c (100%) rename lib/impure/nre/{src => }/private/pcre_src/pcre_chartables.c (100%) rename lib/impure/nre/{src => }/private/pcre_src/pcre_compile.c (100%) rename lib/impure/nre/{src => }/private/pcre_src/pcre_config.c (100%) rename lib/impure/nre/{src => }/private/pcre_src/pcre_dfa_exec.c (100%) rename lib/impure/nre/{src => }/private/pcre_src/pcre_exec.c (100%) rename lib/impure/nre/{src => }/private/pcre_src/pcre_fullinfo.c (100%) rename lib/impure/nre/{src => }/private/pcre_src/pcre_get.c (100%) rename lib/impure/nre/{src => }/private/pcre_src/pcre_globals.c (100%) rename lib/impure/nre/{src => }/private/pcre_src/pcre_internal.h (100%) rename lib/impure/nre/{src => }/private/pcre_src/pcre_jit_compile.c (100%) rename lib/impure/nre/{src => }/private/pcre_src/pcre_maketables.c (100%) rename lib/impure/nre/{src => }/private/pcre_src/pcre_newline.c (100%) rename lib/impure/nre/{src => }/private/pcre_src/pcre_ord2utf8.c (100%) rename lib/impure/nre/{src => }/private/pcre_src/pcre_refcount.c (100%) rename lib/impure/nre/{src => }/private/pcre_src/pcre_string_utils.c (100%) rename lib/impure/nre/{src => }/private/pcre_src/pcre_study.c (100%) rename lib/impure/nre/{src => }/private/pcre_src/pcre_tables.c (100%) rename lib/impure/nre/{src => }/private/pcre_src/pcre_ucd.c (100%) rename lib/impure/nre/{src => }/private/pcre_src/pcre_valid_utf8.c (100%) rename lib/impure/nre/{src => }/private/pcre_src/pcre_version.c (100%) rename lib/impure/nre/{src => }/private/pcre_src/pcre_xclass.c (100%) rename lib/impure/nre/{src => }/private/pcre_src/ucp.h (100%) rename lib/impure/nre/{src => }/private/util.nim (100%) delete mode 100755 lib/impure/nre/runtests.sh delete mode 100644 lib/impure/nre/test/testall.nim delete mode 100644 lib/impure/nre/web/logo.png delete mode 100644 lib/impure/nre/web/logo.svg rename {lib/impure/nre/test => tests/stdlib/nre}/captures.nim (100%) rename {lib/impure/nre/test => tests/stdlib/nre}/escape.nim (100%) rename {lib/impure/nre/test => tests/stdlib/nre}/find.nim (100%) rename {lib/impure/nre/test => tests/stdlib/nre}/init.nim (100%) rename {lib/impure/nre/test => tests/stdlib/nre}/match.nim (100%) rename {lib/impure/nre/test => tests/stdlib/nre}/misc.nim (100%) rename {lib/impure/nre/test => tests/stdlib/nre}/optional_nonstrict.nim (100%) rename {lib/impure/nre/test => tests/stdlib/nre}/replace.nim (100%) rename {lib/impure/nre/test => tests/stdlib/nre}/split.nim (100%) create mode 100644 tests/stdlib/tnre.nim diff --git a/lib/impure/nre/src/nre.nim b/lib/impure/nre.nim similarity index 99% rename from lib/impure/nre/src/nre.nim rename to lib/impure/nre.nim index 2706398ee..09b855213 100644 --- a/lib/impure/nre/src/nre.nim +++ b/lib/impure/nre.nim @@ -1,5 +1,5 @@ -import private.pcre as pcre -import private.util +import nre.private.pcre as pcre +import nre.private.util import tables import unsigned from future import lc, `[]` diff --git a/lib/impure/nre/LICENCE b/lib/impure/nre/LICENCE deleted file mode 100644 index 561f818ac..000000000 --- a/lib/impure/nre/LICENCE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2015 Flaviu Tamas - -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/lib/impure/nre/README.rst b/lib/impure/nre/README.rst deleted file mode 100644 index c767038db..000000000 --- a/lib/impure/nre/README.rst +++ /dev/null @@ -1,258 +0,0 @@ -What is NRE? -============ - -A regular expression library for Nim using PCRE to do the hard work. - -Why? ----- - -The `re.nim `__ module that -`Nim `__ provides in its standard library is -inadequate: - -- It provides only a limited number of captures, while the underling - library (PCRE) allows an unlimited number. - -- Instead of having one proc that returns both the bounds and - substring, it has one for the bounds and another for the substring. - -- If the splitting regex is empty (``""``), then it returns the input - string instead of following `Perl `__, - `Javascript `__, and - `Java `__'s precedent of returning a list - of each character (``"123".split(re"") == @["1", "2", "3"]``). - - -Other Notes ------------ - -By default, NRE compiles it’s own PCRE. If this is undesirable, pass -``-d:pcreDynlib`` to use whatever dynamic library is available on the -system. This may have unexpected consequences if the dynamic library -doesn’t have certain features enabled. -Types ------ - -``type Regex* = ref object`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Represents the pattern that things are matched against, constructed with -``re(string)``. Examples: ``re"foo"``, ``re(r"(*ANYCRLF)(?x)foo # -comment".`` - -``pattern: string`` - the string that was used to create the pattern. - -``captureCount: int`` - the number of captures that the pattern has. - -``captureNameId: Table[string, int]`` - a table from the capture names to their numeric id. - - -Options -....... - -The following options may appear anywhere in the pattern, and they affect -the rest of it. - -- ``(?i)`` - case insensitive -- ``(?m)`` - multi-line: ``^`` and ``$`` match the beginning and end of - lines, not of the subject string -- ``(?s)`` - ``.`` also matches newline (*dotall*) -- ``(?U)`` - expressions are not greedy by default. ``?`` can be added - to a qualifier to make it greedy -- ``(?x)`` - whitespace and comments (``#``) are ignored (*extended*) -- ``(?X)`` - character escapes without special meaning (``\w`` vs. - ``\a``) are errors (*extra*) - -One or a combination of these options may appear only at the beginning -of the pattern: - -- ``(*UTF8)`` - treat both the pattern and subject as UTF-8 -- ``(*UCP)`` - Unicode character properties; ``\w`` matches ``я`` -- ``(*U)`` - a combination of the two options above -- ``(*FIRSTLINE*)`` - fails if there is not a match on the first line -- ``(*NO_AUTO_CAPTURE)`` - turn off auto-capture for groups; - ``(?...)`` can be used to capture -- ``(*CR)`` - newlines are separated by ``\r`` -- ``(*LF)`` - newlines are separated by ``\n`` (UNIX default) -- ``(*CRLF)`` - newlines are separated by ``\r\n`` (Windows default) -- ``(*ANYCRLF)`` - newlines are separated by any of the above -- ``(*ANY)`` - newlines are separated by any of the above and Unicode - newlines: - - single characters VT (vertical tab, U+000B), FF (form feed, U+000C), - NEL (next line, U+0085), LS (line separator, U+2028), and PS - (paragraph separator, U+2029). For the 8-bit library, the last two - are recognized only in UTF-8 mode. - — man pcre - -- ``(*JAVASCRIPT_COMPAT)`` - JavaScript compatibility -- ``(*NO_STUDY)`` - turn off studying; study is enabled by default - -For more details on the leading option groups, see the `Option -Setting `__ -and the `Newline -Convention `__ -sections of the `PCRE syntax -manual `__. - - -``type RegexMatch* = object`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Usually seen as Option[RegexMatch], it represents the result of an -execution. On failure, it is ``None[RegexMatch]``, but if you want -automated derefrence, import ``optional_t.nonstrict``. The available -fields are as follows: - -``pattern: Regex`` - the pattern that is being matched - -``str: string`` - the string that was matched against - -``captures[]: string`` - the string value of whatever was captured at that id. If the value - is invalid, then behavior is undefined. If the id is ``-1``, then - the whole match is returned. If the given capture was not matched, - ``nil`` is returned. - - - ``"abc".match(re"(\w)").captures[0] == "a"`` - - ``"abc".match(re"(?\w)").captures["letter"] == "a"`` - - ``"abc".match(re"(\w)\w").captures[-1] == "ab"`` - -``captureBounds[]: Option[Slice[int]]`` - gets the bounds of the given capture according to the same rules as - the above. If the capture is not filled, then ``None`` is returned. - The bounds are both inclusive. - - - ``"abc".match(re"(\w)").captureBounds[0] == 0 .. 0`` - - ``"abc".match(re"").captureBounds[-1] == 0 .. -1`` - - ``"abc".match(re"abc").captureBounds[-1] == 0 .. 2`` - -``match: string`` - the full text of the match. - -``matchBounds: Slice[int]`` - the bounds of the match, as in ``captureBounds[]`` - -``(captureBounds|captures).toTable`` - returns a table with each named capture as a key. - -``(captureBounds|captures).toSeq`` - returns all the captures by their number. - -``$: string`` - same as ``match`` - - -``type RegexInternalError* = ref object of RegexException`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Internal error in the module, this probably means that there is a bug - - -``type InvalidUnicodeError* = ref object of RegexException`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Thrown when matching fails due to invalid unicode in strings - - -``type SyntaxError* = ref object of RegexException`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Thrown when there is a syntax error in the -regular expression string passed in - - -``type StudyError* = ref object of RegexException`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Thrown when studying the regular expression failes -for whatever reason. The message contains the error -code. - - -Operations ----------- - -``proc match*(str: string, pattern: Regex, start = 0, endpos = int.high): Option[RegexMatch]`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Like ```find(...)`` <#proc-find>`__, but anchored to the start of the -string. This means that ``"foo".match(re"f") == true``, but -``"foo".match(re"o") == false``. - - -``iterator findIter*(str: string, pattern: Regex, start = 0, endpos = int.high): RegexMatch`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Works the same as ```find(...)`` <#proc-find>`__, but finds every -non-overlapping match. ``"2222".find(re"22")`` is ``"22", "22"``, not -``"22", "22", "22"``. - -Arguments are the same as ```find(...)`` <#proc-find>`__ - -Variants: - -- ``proc findAll(...)`` returns a ``seq[string]`` - - -``proc find*(str: string, pattern: Regex, start = 0, endpos = int.high): Option[RegexMatch]`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Finds the given pattern in the string between the end and start -positions. - -``start`` - The start point at which to start matching. ``|abc`` is ``0``; - ``a|bc`` is ``1`` - -``endpos`` - The maximum index for a match; ``int.high`` means the end of the - string, otherwise it’s an inclusive upper bound. - - -``proc split*(str: string, pattern: Regex, maxSplit = -1, start = 0): seq[string]`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Splits the string with the given regex. This works according to the -rules that Perl and Javascript use: - -- If the match is zero-width, then the string is still split: - ``"123".split(r"") == @["1", "2", "3"]``. - -- If the pattern has a capture in it, it is added after the string - split: ``"12".split(re"(\d)") == @["", "1", "", "2", ""]``. - -- If ``maxsplit != -1``, then the string will only be split - ``maxsplit - 1`` times. This means that there will be ``maxsplit`` - strings in the output seq. - ``"1.2.3".split(re"\.", maxsplit = 2) == @["1", "2.3"]`` - -``start`` behaves the same as in ```find(...)`` <#proc-find>`__. - - -``proc replace*(str: string, pattern: Regex, subproc: proc (match: RegexMatch): string): string`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Replaces each match of Regex in the string with ``sub``, which should -never be or return ``nil``. - -If ``sub`` is a ``proc (RegexMatch): string``, then it is executed with -each match and the return value is the replacement value. - -If ``sub`` is a ``proc (string): string``, then it is executed with the -full text of the match and and the return value is the replacement -value. - -If ``sub`` is a string, the syntax is as follows: - -- ``$$`` - literal ``$`` -- ``$123`` - capture number ``123`` -- ``$foo`` - named capture ``foo`` -- ``${foo}`` - same as above -- ``$1$#`` - first and second captures -- ``$#`` - first capture -- ``$0`` - full match - -If a given capture is missing, a ``ValueError`` exception is thrown. - - -``proc escapeRe*(str: string): string`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Escapes the string so it doesn’t match any special characters. -Incompatible with the Extra flag (``X``). - - diff --git a/lib/impure/nre/circle.yml b/lib/impure/nre/circle.yml deleted file mode 100644 index b6105af65..000000000 --- a/lib/impure/nre/circle.yml +++ /dev/null @@ -1,39 +0,0 @@ -dependencies: - pre: - - | - if [ ! -x ~/nim/bin/nim ]; then - sudo apt-get install gcc - git clone -b devel --depth 1 git://github.com/araq/nim ~/nim/ - git clone -b devel --depth 1 git://github.com/nim-lang/csources ~/nim/csources/ - cd ~/nim/csources; sh build.sh; cd .. - rm -rf csources - bin/nim c koch - ./koch boot -d:release - ln -fs ~/nim/bin/nim ~/bin/nim - else - cd ~/nim - git fetch origin - if ! git merge FETCH_HEAD | grep "Already up-to-date"; then - bin/nim c koch - ./koch boot -d:release - fi - fi - - | - if [ ! -x ~/.nimble/bin/nimble ]; then - git clone --depth 1 git://github.com/nim-lang/nimble ~/nimble/ - cd ~/nimble/ - nim c src/nimble.nim - ./src/nimble install - ln -fs ~/.nimble/bin/nimble ~/bin/nimble - fi - - nimble update - - nimble build - - cache_directories: - - "~/bin/" - - "~/nim/" - - "~/.nimble/" - -test: - override: - - ./runtests.sh diff --git a/lib/impure/nre/nre.nimble b/lib/impure/nre/nre.nimble deleted file mode 100644 index b007ff617..000000000 --- a/lib/impure/nre/nre.nimble +++ /dev/null @@ -1,11 +0,0 @@ -[Package] -name = "nre" -author = "Flaviu Tamas" -version = "0.6.1" -description = "Yet another PCRE library" -license = "MIT" -srcDir = "src" - -[Deps] -Requires: "nim >= 0.10.0" -Requires: "optional_t >= 1.2.0" diff --git a/lib/impure/nre/src/private/pcre.h b/lib/impure/nre/private/pcre.h similarity index 100% rename from lib/impure/nre/src/private/pcre.h rename to lib/impure/nre/private/pcre.h diff --git a/lib/impure/nre/src/private/pcre.nim b/lib/impure/nre/private/pcre.nim similarity index 99% rename from lib/impure/nre/src/private/pcre.nim rename to lib/impure/nre/private/pcre.nim index 3d619d268..744721d6f 100644 --- a/lib/impure/nre/src/private/pcre.nim +++ b/lib/impure/nre/private/pcre.nim @@ -1,4 +1,4 @@ -when defined(pcreDynlib): +when not defined(pcreStaticlib): const pcreHeader = "" when not defined(pcreDll): when hostOS == "windows": diff --git a/lib/impure/nre/src/private/pcre_src/config.h b/lib/impure/nre/private/pcre_src/config.h similarity index 100% rename from lib/impure/nre/src/private/pcre_src/config.h rename to lib/impure/nre/private/pcre_src/config.h diff --git a/lib/impure/nre/src/private/pcre_src/pcre.h b/lib/impure/nre/private/pcre_src/pcre.h similarity index 100% rename from lib/impure/nre/src/private/pcre_src/pcre.h rename to lib/impure/nre/private/pcre_src/pcre.h diff --git a/lib/impure/nre/src/private/pcre_src/pcre_byte_order.c b/lib/impure/nre/private/pcre_src/pcre_byte_order.c similarity index 100% rename from lib/impure/nre/src/private/pcre_src/pcre_byte_order.c rename to lib/impure/nre/private/pcre_src/pcre_byte_order.c diff --git a/lib/impure/nre/src/private/pcre_src/pcre_chartables.c b/lib/impure/nre/private/pcre_src/pcre_chartables.c similarity index 100% rename from lib/impure/nre/src/private/pcre_src/pcre_chartables.c rename to lib/impure/nre/private/pcre_src/pcre_chartables.c diff --git a/lib/impure/nre/src/private/pcre_src/pcre_compile.c b/lib/impure/nre/private/pcre_src/pcre_compile.c similarity index 100% rename from lib/impure/nre/src/private/pcre_src/pcre_compile.c rename to lib/impure/nre/private/pcre_src/pcre_compile.c diff --git a/lib/impure/nre/src/private/pcre_src/pcre_config.c b/lib/impure/nre/private/pcre_src/pcre_config.c similarity index 100% rename from lib/impure/nre/src/private/pcre_src/pcre_config.c rename to lib/impure/nre/private/pcre_src/pcre_config.c diff --git a/lib/impure/nre/src/private/pcre_src/pcre_dfa_exec.c b/lib/impure/nre/private/pcre_src/pcre_dfa_exec.c similarity index 100% rename from lib/impure/nre/src/private/pcre_src/pcre_dfa_exec.c rename to lib/impure/nre/private/pcre_src/pcre_dfa_exec.c diff --git a/lib/impure/nre/src/private/pcre_src/pcre_exec.c b/lib/impure/nre/private/pcre_src/pcre_exec.c similarity index 100% rename from lib/impure/nre/src/private/pcre_src/pcre_exec.c rename to lib/impure/nre/private/pcre_src/pcre_exec.c diff --git a/lib/impure/nre/src/private/pcre_src/pcre_fullinfo.c b/lib/impure/nre/private/pcre_src/pcre_fullinfo.c similarity index 100% rename from lib/impure/nre/src/private/pcre_src/pcre_fullinfo.c rename to lib/impure/nre/private/pcre_src/pcre_fullinfo.c diff --git a/lib/impure/nre/src/private/pcre_src/pcre_get.c b/lib/impure/nre/private/pcre_src/pcre_get.c similarity index 100% rename from lib/impure/nre/src/private/pcre_src/pcre_get.c rename to lib/impure/nre/private/pcre_src/pcre_get.c diff --git a/lib/impure/nre/src/private/pcre_src/pcre_globals.c b/lib/impure/nre/private/pcre_src/pcre_globals.c similarity index 100% rename from lib/impure/nre/src/private/pcre_src/pcre_globals.c rename to lib/impure/nre/private/pcre_src/pcre_globals.c diff --git a/lib/impure/nre/src/private/pcre_src/pcre_internal.h b/lib/impure/nre/private/pcre_src/pcre_internal.h similarity index 100% rename from lib/impure/nre/src/private/pcre_src/pcre_internal.h rename to lib/impure/nre/private/pcre_src/pcre_internal.h diff --git a/lib/impure/nre/src/private/pcre_src/pcre_jit_compile.c b/lib/impure/nre/private/pcre_src/pcre_jit_compile.c similarity index 100% rename from lib/impure/nre/src/private/pcre_src/pcre_jit_compile.c rename to lib/impure/nre/private/pcre_src/pcre_jit_compile.c diff --git a/lib/impure/nre/src/private/pcre_src/pcre_maketables.c b/lib/impure/nre/private/pcre_src/pcre_maketables.c similarity index 100% rename from lib/impure/nre/src/private/pcre_src/pcre_maketables.c rename to lib/impure/nre/private/pcre_src/pcre_maketables.c diff --git a/lib/impure/nre/src/private/pcre_src/pcre_newline.c b/lib/impure/nre/private/pcre_src/pcre_newline.c similarity index 100% rename from lib/impure/nre/src/private/pcre_src/pcre_newline.c rename to lib/impure/nre/private/pcre_src/pcre_newline.c diff --git a/lib/impure/nre/src/private/pcre_src/pcre_ord2utf8.c b/lib/impure/nre/private/pcre_src/pcre_ord2utf8.c similarity index 100% rename from lib/impure/nre/src/private/pcre_src/pcre_ord2utf8.c rename to lib/impure/nre/private/pcre_src/pcre_ord2utf8.c diff --git a/lib/impure/nre/src/private/pcre_src/pcre_refcount.c b/lib/impure/nre/private/pcre_src/pcre_refcount.c similarity index 100% rename from lib/impure/nre/src/private/pcre_src/pcre_refcount.c rename to lib/impure/nre/private/pcre_src/pcre_refcount.c diff --git a/lib/impure/nre/src/private/pcre_src/pcre_string_utils.c b/lib/impure/nre/private/pcre_src/pcre_string_utils.c similarity index 100% rename from lib/impure/nre/src/private/pcre_src/pcre_string_utils.c rename to lib/impure/nre/private/pcre_src/pcre_string_utils.c diff --git a/lib/impure/nre/src/private/pcre_src/pcre_study.c b/lib/impure/nre/private/pcre_src/pcre_study.c similarity index 100% rename from lib/impure/nre/src/private/pcre_src/pcre_study.c rename to lib/impure/nre/private/pcre_src/pcre_study.c diff --git a/lib/impure/nre/src/private/pcre_src/pcre_tables.c b/lib/impure/nre/private/pcre_src/pcre_tables.c similarity index 100% rename from lib/impure/nre/src/private/pcre_src/pcre_tables.c rename to lib/impure/nre/private/pcre_src/pcre_tables.c diff --git a/lib/impure/nre/src/private/pcre_src/pcre_ucd.c b/lib/impure/nre/private/pcre_src/pcre_ucd.c similarity index 100% rename from lib/impure/nre/src/private/pcre_src/pcre_ucd.c rename to lib/impure/nre/private/pcre_src/pcre_ucd.c diff --git a/lib/impure/nre/src/private/pcre_src/pcre_valid_utf8.c b/lib/impure/nre/private/pcre_src/pcre_valid_utf8.c similarity index 100% rename from lib/impure/nre/src/private/pcre_src/pcre_valid_utf8.c rename to lib/impure/nre/private/pcre_src/pcre_valid_utf8.c diff --git a/lib/impure/nre/src/private/pcre_src/pcre_version.c b/lib/impure/nre/private/pcre_src/pcre_version.c similarity index 100% rename from lib/impure/nre/src/private/pcre_src/pcre_version.c rename to lib/impure/nre/private/pcre_src/pcre_version.c diff --git a/lib/impure/nre/src/private/pcre_src/pcre_xclass.c b/lib/impure/nre/private/pcre_src/pcre_xclass.c similarity index 100% rename from lib/impure/nre/src/private/pcre_src/pcre_xclass.c rename to lib/impure/nre/private/pcre_src/pcre_xclass.c diff --git a/lib/impure/nre/src/private/pcre_src/ucp.h b/lib/impure/nre/private/pcre_src/ucp.h similarity index 100% rename from lib/impure/nre/src/private/pcre_src/ucp.h rename to lib/impure/nre/private/pcre_src/ucp.h diff --git a/lib/impure/nre/src/private/util.nim b/lib/impure/nre/private/util.nim similarity index 100% rename from lib/impure/nre/src/private/util.nim rename to lib/impure/nre/private/util.nim diff --git a/lib/impure/nre/runtests.sh b/lib/impure/nre/runtests.sh deleted file mode 100755 index 51dbcaf35..000000000 --- a/lib/impure/nre/runtests.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -nim c --path:src -r --verbosity:0 --hints:off --linedir:on --debuginfo \ - --stacktrace:on --linetrace:on "$@" ./test/testall.nim diff --git a/lib/impure/nre/test/testall.nim b/lib/impure/nre/test/testall.nim deleted file mode 100644 index f7fe8892a..000000000 --- a/lib/impure/nre/test/testall.nim +++ /dev/null @@ -1,9 +0,0 @@ -import nre -import init -import captures -import find -import split -import match -import replace -import escape -import misc diff --git a/lib/impure/nre/web/logo.png b/lib/impure/nre/web/logo.png deleted file mode 100644 index ca41ec7b7261e2f8e4ae3675bf17591717b589b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41667 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%0DQ>l~0mhWFQ#UQHSJb{T>Tl@Lp%c>UAE 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 diff --git a/lib/impure/nre/web/logo.svg b/lib/impure/nre/web/logo.svg deleted file mode 100644 index 41d142b2a..000000000 --- a/lib/impure/nre/web/logo.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/lib/impure/nre/test/captures.nim b/tests/stdlib/nre/captures.nim similarity index 100% rename from lib/impure/nre/test/captures.nim rename to tests/stdlib/nre/captures.nim diff --git a/lib/impure/nre/test/escape.nim b/tests/stdlib/nre/escape.nim similarity index 100% rename from lib/impure/nre/test/escape.nim rename to tests/stdlib/nre/escape.nim diff --git a/lib/impure/nre/test/find.nim b/tests/stdlib/nre/find.nim similarity index 100% rename from lib/impure/nre/test/find.nim rename to tests/stdlib/nre/find.nim diff --git a/lib/impure/nre/test/init.nim b/tests/stdlib/nre/init.nim similarity index 100% rename from lib/impure/nre/test/init.nim rename to tests/stdlib/nre/init.nim diff --git a/lib/impure/nre/test/match.nim b/tests/stdlib/nre/match.nim similarity index 100% rename from lib/impure/nre/test/match.nim rename to tests/stdlib/nre/match.nim diff --git a/lib/impure/nre/test/misc.nim b/tests/stdlib/nre/misc.nim similarity index 100% rename from lib/impure/nre/test/misc.nim rename to tests/stdlib/nre/misc.nim diff --git a/lib/impure/nre/test/optional_nonstrict.nim b/tests/stdlib/nre/optional_nonstrict.nim similarity index 100% rename from lib/impure/nre/test/optional_nonstrict.nim rename to tests/stdlib/nre/optional_nonstrict.nim diff --git a/lib/impure/nre/test/replace.nim b/tests/stdlib/nre/replace.nim similarity index 100% rename from lib/impure/nre/test/replace.nim rename to tests/stdlib/nre/replace.nim diff --git a/lib/impure/nre/test/split.nim b/tests/stdlib/nre/split.nim similarity index 100% rename from lib/impure/nre/test/split.nim rename to tests/stdlib/nre/split.nim diff --git a/tests/stdlib/tnre.nim b/tests/stdlib/tnre.nim new file mode 100644 index 000000000..85792b81e --- /dev/null +++ b/tests/stdlib/tnre.nim @@ -0,0 +1,9 @@ +import nre +import nre.init +import nre.captures +import nre.find +import nre.split +import nre.match +import nre.replace +import nre.escape +import nre.misc