diff options
author | rumpf_a@web.de <> | 2010-01-03 12:31:21 +0100 |
---|---|---|
committer | rumpf_a@web.de <> | 2010-01-03 12:31:21 +0100 |
commit | a58a2f3823c33104992dc0e4129fa53e66a18f44 (patch) | |
tree | af97f1c6634d7ef2d4468c70607c20731e6c1512 /lib/newwrap/pcre | |
parent | 2169fd63bdf9caf539ca7ca5b661ee703206500c (diff) | |
download | Nim-a58a2f3823c33104992dc0e4129fa53e66a18f44.tar.gz |
better subscript overloading
Diffstat (limited to 'lib/newwrap/pcre')
-rw-r--r-- | lib/newwrap/pcre/pcre.nim | 259 |
1 files changed, 259 insertions, 0 deletions
diff --git a/lib/newwrap/pcre/pcre.nim b/lib/newwrap/pcre/pcre.nim new file mode 100644 index 000000000..c2220b4e5 --- /dev/null +++ b/lib/newwrap/pcre/pcre.nim @@ -0,0 +1,259 @@ +# +# +# Nimrod's Runtime Library +# (c) Copyright 2009 Andreas Rumpf +# +# See the file "copying.txt", included in this +# distribution, for details about the copyright. +# + +{.compile: "pcre_all.c".} +type + Pbyte = ptr byte + PPchar = ptr cstring + Pint = ptr cint + P* = ptr T + Pcallout_block* = ptr tcallout_block + Pextra* = ptr Textra + T{.final, pure.} = object + # The structure for passing additional data to pcre_exec(). This is defined + # in such as way as to be extensible. + # Bits for which fields are set + # Opaque data from pcre_study() + # Maximum number of calls to match() + # Data passed back in callouts + # Const before type ignored + # Pointer to character tables + Textra*{.final, pure.} = object # The structure for passing out data via the pcre_callout_function. We use a + # structure so that new fields can be added on the end in future versions, + # without changing the API of the function, thereby allowing old clients to + # work without modification. + # Identifies version of block + # ------------------------ Version 0 ------------------------------- + # Number compiled into pattern + # The offset vector + # Const before type ignored + # The subject being matched + # The length of the subject + # Offset to start of this match attempt + # Where we currently are in the subject + # Max current capture + # Most recently closed capture + # Data passed in with the call + # ------------------- Added for Version 1 -------------------------- + # Offset to next item in the pattern + # Length of next item in the pattern + # + # ------------------------------------------------------------------ + flags: cint + study_data: pointer + match_limit: cint + callout_data: pointer + tables: ptr byte + + Tcallout_block*{.final, pure.} = object + version: cint + callout_number: cint + offset_vector: ptr cint + subject: ptr char + subject_length: cint + start_match: cint + current_position: cint + capture_top: cint + capture_last: cint + callout_data: pointer + pattern_position: cint + next_item_length: cint + + +#************************************************ +#* Perl-Compatible Regular Expressions * +#************************************************ +# +# Modified by Andreas Rumpf for h2pas. + +# In its original form, this is the .in file that is transformed by +# "configure" into pcre.h. +# +# Copyright (c) 1997-2005 University of Cambridge +# +# ----------------------------------------------------------------------------- +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# * Neither the name of the University of Cambridge nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ----------------------------------------------------------------------------- + +# The file pcre.h is build by "configure". Do not edit it; instead +# make changes to pcre.in. + +const + PCRE_MAJOR* = 6 + PCRE_MINOR* = 3 + PCRE_DATE* = "2005/11/29" + # Options + PCRE_CASELESS* = 0x00000001 + PCRE_MULTILINE* = 0x00000002 + PCRE_DOTALL* = 0x00000004 + PCRE_EXTENDED* = 0x00000008 + PCRE_ANCHORED* = 0x00000010 + PCRE_DOLLAR_ENDONLY* = 0x00000020 + PCRE_EXTRA* = 0x00000040 + PCRE_NOTBOL* = 0x00000080 + PCRE_NOTEOL* = 0x00000100 + PCRE_UNGREEDY* = 0x00000200 + PCRE_NOTEMPTY* = 0x00000400 + PCRE_UTF8* = 0x00000800 + PCRE_NO_AUTO_CAPTURE* = 0x00001000 + PCRE_NO_UTF8_CHECK* = 0x00002000 + PCRE_AUTO_CALLOUT* = 0x00004000 + PCRE_PARTIAL* = 0x00008000 + PCRE_DFA_SHORTEST* = 0x00010000 + PCRE_DFA_RESTART* = 0x00020000 + PCRE_FIRSTLINE* = 0x00040000 + # Exec-time and get/set-time error codes + PCRE_ERROR_NOMATCH* = - (1) + PCRE_ERROR_NULL* = - (2) + PCRE_ERROR_BADOPTION* = - (3) + PCRE_ERROR_BADMAGIC* = - (4) + PCRE_ERROR_UNKNOWN_NODE* = - (5) + PCRE_ERROR_NOMEMORY* = - (6) + PCRE_ERROR_NOSUBSTRING* = - (7) + PCRE_ERROR_MATCHLIMIT* = - (8) + # Never used by PCRE itself + PCRE_ERROR_CALLOUT* = - (9) + PCRE_ERROR_BADUTF8* = - (10) + PCRE_ERROR_BADUTF8_OFFSET* = - (11) + PCRE_ERROR_PARTIAL* = - (12) + PCRE_ERROR_BADPARTIAL* = - (13) + PCRE_ERROR_INTERNAL* = - (14) + PCRE_ERROR_BADCOUNT* = - (15) + PCRE_ERROR_DFA_UITEM* = - (16) + PCRE_ERROR_DFA_UCOND* = - (17) + PCRE_ERROR_DFA_UMLIMIT* = - (18) + PCRE_ERROR_DFA_WSSIZE* = - (19) + PCRE_ERROR_DFA_RECURSE* = - (20) + # Request types for pcre_fullinfo() + PCRE_INFO_OPTIONS* = 0 + PCRE_INFO_SIZE* = 1 + PCRE_INFO_CAPTURECOUNT* = 2 + PCRE_INFO_BACKREFMAX* = 3 + PCRE_INFO_FIRSTBYTE* = 4 + # For backwards compatibility + PCRE_INFO_FIRSTCHAR* = 4 + PCRE_INFO_FIRSTTABLE* = 5 + PCRE_INFO_LASTLITERAL* = 6 + PCRE_INFO_NAMEENTRYSIZE* = 7 + PCRE_INFO_NAMECOUNT* = 8 + PCRE_INFO_NAMETABLE* = 9 + PCRE_INFO_STUDYSIZE* = 10 + PCRE_INFO_DEFAULT_TABLES* = 11 + # Request types for pcre_config() + PCRE_CONFIG_UTF8* = 0 + PCRE_CONFIG_NEWLINE* = 1 + PCRE_CONFIG_LINK_SIZE* = 2 + PCRE_CONFIG_POSIX_MALLOC_THRESHOLD* = 3 + PCRE_CONFIG_MATCH_LIMIT* = 4 + PCRE_CONFIG_STACKRECURSE* = 5 + PCRE_CONFIG_UNICODE_PROPERTIES* = 6 + # Bit flags for the pcre_extra structure + PCRE_EXTRA_STUDY_DATA* = 0x00000001 + PCRE_EXTRA_MATCH_LIMIT* = 0x00000002 + PCRE_EXTRA_CALLOUT_DATA* = 0x00000004 + PCRE_EXTRA_TABLES* = 0x00000008 + +# Exported PCRE functions + +proc pcre_compile*(para1: cstring, para2: cint, para3: ptr cstring, + para4: ptr int, para5: Pbyte): P{.importc: "pcre_compile", + noconv.} +proc pcre_compile2*(para1: cstring, para2: cint, para3: Pint, para4: PPchar, + para5: ptr int, para6: Pbyte): P{.importc: "pcre_compile2", + noconv.} +proc pcre_config*(para1: cint, para2: pointer): cint{.importc: "pcre_config", + noconv.} +proc pcre_copy_named_substring*(para1: P, para2: cstring, para3: Pint, + para4: cint, para5: cstring, para6: cstring, + para7: cint): cint{. + importc: "pcre_copy_named_substring", noconv.} +proc pcre_copy_substring*(para1: cstring, para2: Pint, para3: cint, para4: cint, + para5: cstring, para6: cint): cint{. + importc: "pcre_copy_substring", noconv.} +proc pcre_dfa_exec*(para1: P, para2: Pextra, para3: cstring, para4: cint, + para5: cint, para6: cint, para7: Pint, para8: cint, + para9: Pint, para10: cint): cint{.importc: "pcre_dfa_exec", + noconv.} +proc pcre_exec*(para1: P, para2: Pextra, para3: cstring, para4: cint, + para5: cint, para6: cint, para7: Pint, para8: cint): cint{. + importc: "pcre_exec", noconv.} +proc pcre_free_substring*(para1: cstring){.importc: "pcre_free_substring", + noconv.} +proc pcre_free_substring_list*(para1: PPchar){. + importc: "pcre_free_substring_list", noconv.} +proc pcre_fullinfo*(para1: P, para2: Pextra, para3: cint, para4: pointer): cint{. + importc: "pcre_fullinfo", noconv.} +proc pcre_get_named_substring*(para1: P, para2: cstring, para3: Pint, + para4: cint, para5: cstring, para6: PPchar): cint{. + importc: "pcre_get_named_substring", noconv.} +proc pcre_get_stringnumber*(para1: P, para2: cstring): cint{. + importc: "pcre_get_stringnumber", noconv.} +proc pcre_get_substring*(para1: cstring, para2: Pint, para3: cint, para4: cint, + para5: PPchar): cint{.importc: "pcre_get_substring", + noconv.} +proc pcre_get_substring_list*(para1: cstring, para2: Pint, para3: cint, + para4: ptr PPchar): cint{. + importc: "pcre_get_substring_list", noconv.} +proc pcre_info*(para1: P, para2: Pint, para3: Pint): cint{.importc: "pcre_info", + noconv.} +proc pcre_maketables*(): ptr byte{.importc: "pcre_maketables", noconv.} +proc pcre_refcount*(para1: P, para2: cint): cint{.importc: "pcre_refcount", + noconv.} +proc pcre_study*(para1: P, para2: cint, para3: ptr CString): Pextra{. + importc: "pcre_study", noconv.} +proc pcre_version*(): CString{.importc: "pcre_version", noconv.} +# Indirection for store get and free functions. These can be set to +# alternative malloc/free functions if required. Special ones are used in the +# non-recursive case for "frames". There is also an optional callout function +# that is triggered by the (?) regex item. +# + +# we use Nimrod's memory manager (but not GC!) for these functions: + +type + TMalloc = proc (para1: int): pointer{.noconv.} + TFree = proc (para1: pointer){.noconv.} + +var + pcre_malloc{.importc: "pcre_malloc".}: TMalloc + pcre_free{.importc: "pcre_free".}: TFree + pcre_stack_malloc{.importc: "pcre_stack_malloc".}: TMalloc + pcre_stack_free{.importc: "pcre_stack_free".}: TFree + pcre_callout{.importc: "pcre_callout".}: proc (para1: Pcallout_block): cint{. + noconv.} + +pcre_malloc = cast[TMalloc](system.alloc) +pcre_free = cast[TFree](system.dealloc) +pcre_stack_malloc = cast[TMalloc](system.alloc) +pcre_stack_free = cast[TFree](system.dealloc) +pcre_callout = nil \ No newline at end of file |