summary refs log tree commit diff stats
path: root/lib/js/jsre.nim
blob: f5c3cc1ac86c58a2f37149dcc993aaf521813959 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
## Regular Expressions for the JavaScript target.
## * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions

runnableExamples:
  let jsregex: RegExp = newRegExp(r"\s+", r"i")
  jsregex.compile(r"\w+", r"i")
  doAssert jsregex.test(r"nim javascript")
  doAssert jsregex.exec(r"nim javascript") == @["nim".cstring]
  doAssert jsregex.toString() == r"/\w+/i"
  jsregex.compile(r"[0-9]", r"i")
  doAssert jsregex.test(r"0123456789abcd")


when not defined(js) and not defined(Nimdoc):
  {.error: "This module only works on the JavaScript platform".}

type RegExp* {.importjs.} = object    ## Regular Expressions for JavaScript target.
  flags* {.importjs.}: cstring        ## cstring that contains the flags of the RegExp object.
  dotAll* {.importjs.}: bool          ## Whether `.` matches newlines or not.
  global* {.importjs.}: bool          ## Whether to test against all possible matches in a string, or only against the first.
  ignoreCase* {.importjs.}: bool      ## Whether to ignore case while attempting a match in a string.
  multiline* {.importjs.}: bool       ## Whether to search in strings across multiple lines.
  source* {.importjs.}: cstring       ## The text of the pattern.
  sticky* {.importjs.}: bool          ## Whether the search is sticky.
  unicode* {.importjs.}: bool         ## Whether Unicode features are enabled.
  lastIndex* {.importjs.}: cint       ## Index at which to start the next match (read/write property).
  input* {.importjs.}: cstring        ## Read-only and modified on successful match.
  lastMatch* {.importjs.}: cstring    ## Ditto.
  lastParen* {.importjs.}: cstring    ## Ditto.
  leftContext* {.importjs.}: cstring  ## Ditto.
  rightContext* {.importjs.}: cstring ## Ditto.

func newRegExp*(pattern: cstring; flags: cstring): RegExp {.importjs: "new RegExp(@)".}
  ## Creates a new RegExp object.

func compile*(self: RegExp; pattern: cstring; flags: cstring) {.importjs: "#.compile(@)".}
  ## Recompiles a regular expression during execution of a script.

func exec*(self: RegExp; pattern: cstring): seq[cstring] {.importjs: "#.exec(#)".}
  ## Executes a search for a match in its string parameter.

func test*(self: RegExp; pattern: cstring): bool {.importjs: "#.test(#)".}
  ## Tests for a match in its string parameter.

func toString*(self: RegExp): cstring {.importjs: "#.toString()".}
  ## Returns a string representing the RegExp object.
e>
0128bee7 ^
b44906cd ^

0128bee7 ^

876e288a ^


0128bee7 ^
34c131ef ^


















1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125














                                                                       

                                                 













                                                                     
   
 
                                
 

                                                              



                                                     


                                            


                                                                         
                       
 
                                        
                                                                       
                    
                          
                       
 


                                   

                              
                            
 


                                                                 


                           
                                                         

                                  
 

                             
 



                                                                  


                                                                 








                                                                           
                                                 

                                                             
                                                        
                         
 
                                 

                   

                                     


                             
 


















                                                                                  
# Copyright (C) 2009, 2010  Roman Zimbelmann <romanz@lavabit.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

"""
This is the default configuration file of ranger.

There are two ways of customizing ranger.  The first and recommended
method is creating a file at ~/.ranger/options.py and adding
those lines you want to change.  It might look like this:

from ranger.api.options import *
preview_files = False  # I hate previews!
max_history_size = 2000  # I can afford it.

The other way is directly editing this file.  This will make upgrades
of ranger more complicated though.

Whatever you do, make sure the import-line stays intact and the type
of the values stay the same.
"""

from ranger.api.options import *

# Which files should be hidden?  Toggle this by typing `zh' or
# changing the setting `show_hidden'
hidden_filter = regexp(
	r'lost\+found|^\.|~$|\.(:?pyc|pyo|bak|swp)$')
show_hidden = False

# Show dotfiles in the bookmark preview box?
show_hidden_bookmarks = True

# Which colorscheme to use?  These colorschemes are available by default:
# default, default88, texas, jungle, snow
# Snow is monochrome, texas and default88 use 88 colors.
colorscheme = 'default'

# Preview files on the rightmost column?
# And collapse (shrink) the last column if there is nothing to preview?
preview_files = True
preview_directories = True
collapse_preview = True

# Save the console history on exit?
save_console_history = True

# Draw borders around columns?
draw_borders = False
draw_bookmark_borders = True

# How many columns are there, and what are their relative widths?
column_ratios = (1, 1, 4, 3)

# Enable the mouse support?
mouse_enabled = True

# Display the file size in the main column or status bar?
display_size_in_main_column = True
display_size_in_status_bar = False

# Set a title for the window?
update_title = True

# Shorten the title if it gets long?  The number defines how many
# directories are displayed at once, False turns off this feature.
shorten_title = 3

# Abbreviate $HOME with ~ in the titlebar (first line) of ranger?
tilde_in_titlebar = True

# How many directory-changes or console-commands should be kept in history?
max_history_size = 20

# Try to keep so much space between the top/bottom border when scrolling:
scroll_offset = 2

# Flush the input after each key hit?  (Noticable when ranger lags)
flushinput = True

# Save bookmarks (used with mX and `X) instantly?
# This helps to synchronize bookmarks between multiple ranger
# instances but leads to *slight* performance loss.
# When false, bookmarks are saved when ranger is exited.
autosave_bookmarks = True

# Makes sense for screen readers:
show_cursor = False

# One of: size, basename, mtime, type
sort = 'basename'
sort_reverse = False
sort_case_insensitive = False
sort_directories_first = True


# Apply an overlay function to the colorscheme.  It will be called with
# 4 arguments: the context and the 3 values (fg, bg, attr) returned by
# the original use() function of your colorscheme.  The return value
# must be a 3-tuple of (fg, bg, attr).
# Note: Here, the colors/attributes aren't directly imported into
# the namespace but have to be accessed with color.xyz.
def colorscheme_overlay(context, fg, bg, attr):
	if context.directory and attr & color.bold and \
			not any((context.marked, context.selected)):
		attr ^= color.bold  # I don't like bold directories!

	if context.main_column and context.selected:
		fg, bg = color.red, color.default  # To highlight the main column!

	return fg, bg, attr

# The above function was just an example, let's set it back to None
colorscheme_overlay = None