dyndoc-ruby 0.8.5 → 0.9.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 81c02d76c3d7a0628adc49871638d2e419622b99
4
- data.tar.gz: 1c1051d0f2b54122c406a1daeaffc8f8a6146827
3
+ metadata.gz: dd5cab0885f06cf665c740d7116f5ba6d4704959
4
+ data.tar.gz: bb2c2c409258a3c030e764ec7d545293ce701e4c
5
5
  SHA512:
6
- metadata.gz: 4743f46660df426d553d58fa46b62dceef26958212a95102846bf3b7ffd4c2f9cac571b0400d1dd334dcfb7317bd892fee1c987dbbe849fe4a350d0fd0dd6c1b
7
- data.tar.gz: 40bdd38f506c189d7c3aad236b9476cc1165fef0c2edfa45f01fb878def08afd3ae987b0bd587b58aec84bed2fa9dc556f892a8d57850c2bc88c3ac654dfd90a
6
+ metadata.gz: ae5620049151112869f9aa9614f1f5b1f51daedada69ad37f587da8419b8a1f876f198db56e0add0353d2949c22795b531c3e2f38452a15f7e6bcf5884638b7a
7
+ data.tar.gz: c84c7513deb6f91827a6a8d495bebb9749bfbb48c6f99b432372912924b4bc60d977823685854b21004eef8a18ab4b37ab2861bb430d2a720ffff6bdbb35822e
data/bin/dpm CHANGED
@@ -10,26 +10,64 @@ repo_dir = File.join(lib_dir,".repository")
10
10
 
11
11
  old_pwd = Dir.pwd
12
12
 
13
- cmd = ARGV[0].to_sym
13
+ cmd = ARGV.empty? ? :help : ARGV[0].to_sym
14
14
  case cmd
15
+ when :help, :"--help", :"-h"
16
+ doc=<<ENDHELP
17
+ Install a repository
18
+ ====================
19
+ dpm install <user>/<repo>
20
+ dpm install https://github.com/<user>/<repo> (equivalent to previous one)
21
+ dpm install <git-url>/<user>/<repo> (non necessarily on github)
22
+
23
+ Good to know: repository identifier is in any previous case <user>/<repo>
24
+
25
+ Update a repository
26
+ ===================
27
+ # dpm update <user>/<repo>
28
+
29
+ Link library
30
+ ============
31
+ dpm link <user>/<repo>/<subdir>/<libname> (default link to <libname>)
32
+ dpm link <user>/<repo>/<subdir>/<libname> <libname>
33
+ dpm link <real local path to expand>
34
+
35
+ Unlink library
36
+ ==============
37
+ dpm unlink <libname>
38
+
39
+ This message
40
+ ============
41
+
42
+ dpm help
43
+
44
+ List of repository
45
+ ==================
46
+ dpm repo
47
+
48
+ List of libraries
49
+ =================
50
+ dpm ls
51
+ ENDHELP
52
+ puts doc
15
53
 
16
- # dyndoc-package install rcqls/dyndoc-share
17
54
  when :install #default is github from now!
18
- owner,package=File.split(ARGV[1])
19
- package = package[0...-4] if package =~ /\.git$/
20
- package_dir = File.join(repo_dir,owner)
21
- FileUtils.mkdir_p package_dir
22
- FileUtils.cd package_dir
23
- `git clone https://github.com/#{owner}/#{package}.git`
24
-
25
- # dyndoc-package update rcqls/dyndoc-share
55
+ location,url=ARGV[1],'https://github.com'
56
+ if (tmp=location.split("/")).length==5 and tmp[1].empty?
57
+ url=tmp[0...3].join("/")
58
+ location=tmp[3..-1].join("/")
59
+ end
60
+ owner,package=File.split(location)
61
+ package = package[0...-4] if package =~ /\.git$/
62
+ package_dir = File.join(repo_dir,owner)
63
+ FileUtils.mkdir_p package_dir
64
+ FileUtils.cd package_dir
65
+ `git clone #{url}/#{owner}/#{package}.git`
66
+
26
67
  when :update
27
68
  FileUtils.cd File.join(repo_dir,ARGV[1])
28
69
  `git pull`
29
70
 
30
- # dyndoc-package link rcqls/dyndoc-share/library/RCqls (default to RCqls)
31
- # dyndoc-package link rcqls/dyndoc-share/library/RCqls RCqls
32
- # dyndoc-package link <real local path to expand>
33
71
  when :link
34
72
  path = File.expand_path(ARGV[1])
35
73
  unless (local = (File.directory? path) )
@@ -45,7 +83,7 @@ if RUBY_PLATFORM =~ /(?:msys|mingw)/
45
83
  else
46
84
  FileUtils.ln_sf source,target
47
85
  end
48
- # dyndoc-package unlink RCqls
86
+
49
87
  when :unlink
50
88
  package = ARGV[1]
51
89
  if RUBY_PLATFORM =~ /(?:msys|mingw)/
data/bin/dyn-html ADDED
@@ -0,0 +1,123 @@
1
+ #!/usr/bin/env ruby
2
+ require 'dyndoc-convert'
3
+ require 'dyndoc-edit'
4
+ require 'dyndoc/init/home'
5
+ dyndoc_home = Dyndoc.home
6
+ #p Dyndoc.home
7
+
8
+ cfg_yml = File.join(dyndoc_home,"etc","dyn-html.yml")
9
+
10
+ cfg=YAML::load_file(cfg_yml) if File.exist? cfg_yml
11
+
12
+
13
+ ## To put inside yaml config file!
14
+ root = cfg["root"] || File.join(ENV["HOME"],"RCqls","RodaServer")
15
+ edit_root = File.join(root ,"edit")
16
+ pages_root = File.join(root ,"public","pages")
17
+ current_email = cfg["email"] || "rdrouilh@gmail.com" #default email user can be overriden by -u option
18
+
19
+ args=ARGV
20
+ args=["-h"] if args.empty?
21
+
22
+ require 'optparse'
23
+
24
+ $VERBOSE = nil
25
+
26
+ ## Examples:
27
+ ## 1) global mode:
28
+ ## dyn-html /dev/R/test.dyn
29
+ ## 2) user mode: relative path used instead of ~ since ~ is interpreted in bash mode!
30
+ ## dyn-html -u remy.drouilhet@upmf-grenoble.fr cfies2017/index.dyn:index
31
+ ## dyn-html -u remy.drouilhet@upmf-grenoble.fr cfies2017/index.dyn:all
32
+
33
+ options={watching: nil, refresh: nil, first: true}
34
+
35
+ OptionParser.new do |opts|
36
+ opts.banner = "Usage: dyn-html [-u email_user] [-w] [-r <url-to-refresh-when-watched>] [/]<relative_path>/<file>.dyn "
37
+
38
+ opts.on( '-u', '--user EMAIL', 'user email' ) do |email|
39
+ current_email=email
40
+ end
41
+
42
+ opts.on( '-w', '--watch', 'watch file') do
43
+ options[:watching]=true
44
+ end
45
+
46
+ opts.on( '-r', '--refresh HTML', 'refresh page' ) do |html|
47
+ options[:refresh]=html
48
+ end
49
+
50
+ end.parse!(args)
51
+
52
+
53
+ ## THIS IS A COPY FROM edit.rb
54
+ ## TODO: TO PLACE IN SOME COMMON LIBRARY!
55
+
56
+ ## Mandatory input
57
+ p args
58
+ dyn_file,doc_tag=args[0].split(":")
59
+ doc_tag="" unless doc_tag
60
+ doc_tag="__ALL_DOC_TAG__" if doc_tag.downcase == "all"
61
+
62
+ ## Detect docs_tags_info
63
+ dyn_file=File.join(["","users",current_email],dyn_file) unless dyn_file[0,1]=="/"
64
+ filename=File.join(edit_root,dyn_file)
65
+ doc_tags_info=Dyndoc::Edit.get_doc_tags_info(File.read(filename))
66
+
67
+ if dyn_file and (dyn_file=~/(.*)(?:\.dyn|_html.dyn)$/)
68
+ #p [:dyn_file,dyn_file,$1]
69
+ html_files=Dyndoc::Edit.html_files({doc_tags_info: doc_tags_info , dyn_file: dyn_file },current_email)
70
+ ##p [:html_files,html_files]
71
+ html_file=html_files[doc_tag] || html_files[""]
72
+
73
+ # Ex for opts:
74
+ # rdrouilh : [:dyn_opts, {:dyn_root=>"/Users/remy/RCqls/RodaServer/edit", :html_root=>"/Users/remy/RCqls/RodaServer/public/pages", :user=>"rdrouilh@gmail.com", :doc_tag=>"bio", :html_files=>{""=>"/dev/R/test.html", "ssd"=>"/dev/R/ssd.html", "bio"=>"/dev/R/bio.html", "tmp"=>"/dev/R/tmp.html", "cours"=>"/dev/R/cours.html"}}]
75
+ # remy.drouilhet : [:dyn_opts, {:dyn_root=>"/Users/remy/RCqls/RodaServer/edit", :html_root=>"/Users/remy/RCqls/RodaServer/public/pages", :user=>"remy.drouilhet@upmf-grenoble.fr", :doc_tag=>"index", :html_files=>{""=>"/users/remy.drouilhet@upmf-grenoble.fr/cfies2017/index.html", "index"=>"/users/remy.drouilhet@upmf-grenoble.fr/cfies2017/index.html", "dates"=>"/users/remy.drouilhet@upmf-grenoble.fr/cfies2017/dates.html", "sc"=>"/users/remy.drouilhet@upmf-grenoble.fr/cfies2017/sc.html", "orga"=>"/users/remy.drouilhet@upmf-grenoble.fr/cfies2017/orga.html"}}]
76
+ opts = {
77
+ dyn_root: edit_root,
78
+ html_root: pages_root,
79
+ user: current_email,
80
+ doc_tag: doc_tag,
81
+ html_files: html_files
82
+ }
83
+ ##p opts
84
+ file_to_process=File.join(opts[:dyn_root],dyn_file)
85
+ cmd_to_open=nil
86
+ if options[:refresh]
87
+ cmd_to_open='tell application "Safari" to set URL of current tab of front window to "'+options[:refresh]+'"'
88
+ cmd_to_refresh='tell application "System Events"' + "\n" + 'tell process "Safari"' + "\n" + 'keystroke "r" using {command down}' + "\n" + 'delay 60' + "\n" + 'end tell' + "\n" + 'end tell'
89
+ end
90
+ unless options[:watching]
91
+ ## dyn_file[1..-1] to have a relative path...
92
+ if Dyndoc::Linter.check_file(file_to_process).empty?
93
+ Dyndoc.cli_convert_from_file(dyn_file[1..-1],html_file, opts)
94
+ else
95
+ puts dyn_file[1..-1]+" not well-formed!"
96
+ end
97
+ else
98
+ require 'filewatcher'
99
+ require 'dyndoc-linter'
100
+ FileWatcher.new([file_to_process]).watch() do |filename, event|
101
+ if event == :changed
102
+ if Dyndoc::Linter.check_file(file_to_process).empty?
103
+ Dyndoc.cli_convert_from_file(dyn_file[1..-1],html_file, opts)
104
+ puts dyn_file[1..-1]+" processed!"
105
+ if options[:first]
106
+ `osascript -e '#{cmd_to_open}'`
107
+ options[:first]=nil
108
+ else
109
+ %x{osascript<<-ENDREFRESH
110
+ tell app "Safari" to activate
111
+ tell application "System Events"
112
+ keystroke "r" using {command down}
113
+ end tell
114
+ ENDREFRESH
115
+ }
116
+ end
117
+ else
118
+ puts dyn_file[1..-1]+" not well-formed!"
119
+ end
120
+ end
121
+ end
122
+ end
123
+ end
data/bin/dyn-lint ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'dyndoc-linter'
4
+
5
+ res=Dyndoc::Linter.check_file(ARGV[0])
6
+ p res unless res.empty?
data/bin/dyn-scan ADDED
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ args=ARGV
4
+ args=["-h"] if args.empty?
5
+
6
+ input,mode,master=false,:process,true
7
+
8
+ require 'optparse'
9
+
10
+ $VERBOSE = nil
11
+
12
+ OptionParser.new do |opts|
13
+ opts.banner = "Usage: dyn-scan [options]"
14
+
15
+ opts.on( '-p', '--pretty', 'pretty method' ) do
16
+ mode=:pretty
17
+ end
18
+
19
+ opts.on( '-i', '--input', 'input line' ) do
20
+ input=true
21
+ end
22
+
23
+ opts.on( '-x', '--extract', 'extract method' ) do
24
+ mode=:extract
25
+ end
26
+
27
+ end.parse!(args)
28
+
29
+
30
+ require 'dyndoc/base/scanner'
31
+ scan=Dyndoc::DevTagScanner.new(:dtag)
32
+ b=(input ? args[0] : File.read(args[0]) )
33
+ b="{#document][#main]"+b+"[#}" if master
34
+ scan.tokenize(b)
35
+ case mode
36
+ when :extract
37
+ p scan.extract
38
+ when :pretty
39
+ scan.pretty_print(scan.parse_text(scan.extract))
40
+ when :process
41
+ p scan.process(b)
42
+ end
@@ -0,0 +1,81 @@
1
+ module Dyndoc
2
+ module Edit
3
+
4
+ def Edit.docs_from_doc_tags_info(doc_tags_info)
5
+ docs={}
6
+ unless doc_tags_info.empty?
7
+ doc_tags_info.split(",").each{|e|
8
+ if e.strip =~ /^([^\(]*)(\([^\(\)]*\))?$/
9
+ docs[$1.strip]=($2 || "("+$1.strip+")")[1..-2].strip
10
+ end
11
+ }
12
+ end
13
+ return docs
14
+ end
15
+
16
+ def Edit.get_doc_tags_info(content)
17
+ doc_tags_info=""
18
+ if content =~ /^\-{3}/
19
+ b=content.split(/^(\-{3,})/,-1)
20
+ if b[0].empty? and b.length>4
21
+ tmp=b[2].strip.split("\n").select{|e2| e2.strip =~/^docs\:/}
22
+ doc_tags_info=tmp[0] || ""
23
+ doc_tags_info=$1.strip if doc_tags_info =~ /^docs\:(.*)/
24
+ end
25
+ end
26
+ return doc_tags_info
27
+ end
28
+
29
+ def Edit.get_docs(doc_tags_info)
30
+ Edit.docs_from_doc_tags_info(doc_tags_info)
31
+ end
32
+
33
+ def Edit.get_doc_tags(doc_tags_info)
34
+ Edit.get_docs(doc_tags_info).keys
35
+ end
36
+
37
+ def Edit.get_doc_tags_menu(doc_tags_info)
38
+ doc_tags=Edit.get_doc_tags(doc_tags_info)
39
+ return "" if doc_tags.empty?
40
+ doc_tags="<div class=\"item\" data-value=\"\">default</div>"+doc_tags.map{|e| "<div class=\"item\">"+e+"</div>"}.join("")
41
+ ##p [:dropdown,doc_tags]
42
+ doc_tags
43
+ end
44
+
45
+ def Edit.html_file(doc,user=nil) #doc={tag: ..., dyn_file: ..., doc_tags_info: ...}
46
+ html_file=File.join(File.dirname(doc[:dyn_file]),File.basename(doc[:dyn_file],".*")+".html")
47
+ docs=Edit.get_docs(doc[:doc_tags_info])
48
+ if !docs.empty? and docs.keys.include? doc[:tag]
49
+ doc_extra=docs[doc[:tag]]
50
+ if doc_extra[0,1]=="_"
51
+ doc_extra +=doc[:tag] if doc_extra.length==1
52
+ html_file=File.join(File.dirname(doc[:dyn_file]),File.basename(doc[:dyn_file],".*")+doc_extra+".html")
53
+ elsif doc_extra[0,1]=="~"
54
+ # from user root
55
+ if user
56
+ html_file=File.join("/users",user,doc_extra[1..-1]+".html")
57
+ end
58
+ elsif doc_extra[0,1]=="/"
59
+ # from global root
60
+ html_file=File.join(doc_extra[1..-1]+".html")
61
+ elsif !doc_extra.empty?
62
+ html_file=File.join(File.dirname(doc[:dyn_file]),doc_extra+".html")
63
+ end
64
+ end
65
+ return html_file
66
+ end
67
+
68
+ def Edit.html_files(doc,user=nil) #doc={dyn_file: ..., doc_tags_info: ...}
69
+ html_files={}
70
+ doc_tags=[""]+Edit.get_doc_tags(doc[:doc_tags_info])
71
+ doc2=doc.dup
72
+ doc_tags.each do |tag|
73
+ doc2[:tag]=tag
74
+ html_file=Edit.html_file(doc2,user)
75
+ html_files[tag]=html_file
76
+ end
77
+ return html_files
78
+ end
79
+
80
+ end
81
+ end
@@ -0,0 +1,40 @@
1
+ # Pour simplifier chercher les tags voisins qui sont ouvrant et fermant et les virer
2
+
3
+ ## First version of dyn-lint
4
+ ## TODO:
5
+ ## * detect the position of the error
6
+ ## * warning when suspecting block ending by ] by accident
7
+
8
+ module Dyndoc
9
+ module Linter
10
+ def Linter.selected_tags(txt)
11
+ selected_tags=txt.scan(/(?:\{[\#\@](?:[\w\:\|-]*[<>]?[=?!><]?(?:\.\w*)?)\]|\[[\#\@](?:[\w\:\|-]*[<>]?[=?!><]?)\})/).each_with_index.map{|e,i| [i+1,e] }
12
+ ## p selected_tags
13
+ selected_tags
14
+ end
15
+
16
+ def Linter.simplify_dyndoc_tags(tags)
17
+ (0..(tags.length-2)).each do |i|
18
+ if (tags[i][1] == "{#"+tags[i+1][1][2..-2]+"]" and tags[i+1][1] == "[#"+tags[i][1][2..-2]+"}") or (tags[i][1][0]=="{" and tags[i+1][1]=="[#}")
19
+ tags.delete_at i+1;tags.delete_at i
20
+ Dyndoc::Linter.simplify_dyndoc_tags(tags)
21
+ break
22
+ end
23
+ end
24
+ return tags
25
+ end
26
+
27
+ def Linter.guess_bad_tags(tags)
28
+
29
+ end
30
+
31
+ def Linter.check_content(txt)
32
+ Dyndoc::Linter.simplify_dyndoc_tags(Dyndoc::Linter.selected_tags(txt))
33
+ end
34
+
35
+ def Linter.check_file(file_to_lint)
36
+ txt=File.read(file_to_lint)
37
+ Dyndoc::Linter.check_content(txt)
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,304 @@
1
+ ---
2
+ fileTypes:
3
+ - r
4
+ - reb
5
+ - red
6
+ - reds
7
+ - topaz
8
+ firstLineMatch: ^#!/.*\brebol\b
9
+ foldingStartMarker: ^[^;]*[\[\{\(]\s*(;.*)?$
10
+ foldingStopMarker: ^\s*[\]\}\)].*$
11
+ keyEquivalent: ^R
12
+ name: Rebol
13
+ patterns:
14
+ - include: '#comments'
15
+ - include: '#type-literal'
16
+ - include: '#logic'
17
+ - include: '#strings'
18
+ - include: '#values'
19
+ - include: '#words'
20
+ - include: '#errors'
21
+ repository:
22
+ binary-base-sixteen:
23
+ begin: (16)?#\{
24
+ end: \}
25
+ name: string.other.base16.rebol
26
+ patterns:
27
+ - match: '[0-9a-fA-F]*'
28
+ name: constant.character.binary.rebol
29
+ binary-base-sixtyfour:
30
+ begin: 64#\{
31
+ end: \}
32
+ name: string.other.base64.rebol
33
+ binary-base-two:
34
+ begin: 2#\{
35
+ end: \}
36
+ name: string.other.base2.rebol
37
+ patterns:
38
+ - match: '[01]*'
39
+ name: constant.character.binary.rebol
40
+ block-blocks:
41
+ begin: (\[)
42
+ beginCaptures:
43
+ '0':
44
+ name: punctuation.section.embedded.begin.rebol
45
+ end: (\])
46
+ endCaptures:
47
+ '0':
48
+ name: punctuation.section.embedded.end.rebol
49
+ name: meta.group.block.rebol
50
+ patterns:
51
+ - include: $self
52
+ block-parens:
53
+ begin: \(
54
+ end: \)
55
+ name: meta.group.paren.rebol
56
+ patterns:
57
+ - include: $self
58
+ blocks:
59
+ patterns:
60
+ - include: '#block-blocks'
61
+ - include: '#block-parens'
62
+ character:
63
+ match: '#"(\^(\(([0-9a-fA-F]{2,4}|[a-zA-Z]{3,6})\)|.)|[^\^\"])"'
64
+ name: constant.other.character.rebol
65
+ character-html:
66
+ captures:
67
+ '1':
68
+ name: punctuation.definition.entity.html
69
+ '3':
70
+ name: punctuation.definition.entity.html
71
+ match: (&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)
72
+ name: constant.character.entity.html
73
+ character-inline:
74
+ match: \^(\([0-9a-fA-F]{2,4}\)|.)
75
+ name: constant.character.rebol
76
+ comment-line:
77
+ match: ;([^%\n]|%(?!>))*
78
+ name: comment.line.semicolon.rebol
79
+ comment-multiline-block:
80
+ begin: comment\s*\[
81
+ end: \]
82
+ name: comment.block.rebol
83
+ patterns:
84
+ - include: '#comment-multiline-block-nested'
85
+ comment-multiline-block-nested:
86
+ begin: \[
87
+ end: \]
88
+ name: comment.block.rebol
89
+ patterns:
90
+ - include: '#comment-multiline-block-nested'
91
+ comment-multiline-string:
92
+ begin: comment\s*\{
93
+ end: \}
94
+ name: comment.block.rebol
95
+ patterns:
96
+ - include: '#comment-multiline-string-nested'
97
+ comment-multiline-string-nested:
98
+ begin: \{
99
+ end: \}
100
+ name: comment.block.rebol
101
+ patterns:
102
+ - include: '#comment-multiline-string-nested'
103
+ comment-tag:
104
+ begin: (?<=^|[\s\[\]()}"])<!--
105
+ end: -->
106
+ name: comment.block.tag.rebol
107
+ comments:
108
+ patterns:
109
+ - include: '#comment-shebang'
110
+ - include: '#comment-line'
111
+ - include: '#comment-multiline-string'
112
+ - include: '#comment-multiline-block'
113
+ - include: '#comment-tag'
114
+ comments-shebang:
115
+ match: ^#!/.*rebol.*
116
+ name: comment.line.shebang.rebol
117
+ error-chars:
118
+ match: '[,}]'
119
+ name: invalid.illegal.char.rebol
120
+ errors:
121
+ patterns:
122
+ - include: '#error-chars'
123
+ logic:
124
+ match: '#\[(true|false|none)]'
125
+ name: constant.language.logic.rebol
126
+ string-email:
127
+ match: '[^\s\n:/\[\]\(\)]+@[^\s\n:/\[\]\(\)]+'
128
+ name: string.email.rebol
129
+ string-file:
130
+ match: '%[^\s\n\[\]\(\)]*'
131
+ name: string.other.file.rebol
132
+ string-file-quoted:
133
+ begin: '%"'
134
+ end: '"'
135
+ name: string.other.file.rebol
136
+ patterns:
137
+ - match: '%[A-Fa-f0-9]{2}'
138
+ name: constant.character.hex.rebol
139
+ string-issue:
140
+ match: '#[^\s\n\[\]\(\)]*'
141
+ name: string.other.issue.rebol
142
+ string-multiline:
143
+ begin: \{
144
+ end: \}
145
+ name: string.other.rebol
146
+ patterns:
147
+ - include: '#string-rsp-tag'
148
+ - include: '#character-inline'
149
+ - include: '#character-html'
150
+ - include: '#string-nested-multiline'
151
+ string-nested-multiline:
152
+ begin: \{
153
+ end: \}
154
+ name: string.other.rebol
155
+ patterns:
156
+ - include: '#string-nested-multiline'
157
+ string-quoted:
158
+ begin: '"'
159
+ end: '"'
160
+ name: string.quoted.rebol
161
+ patterns:
162
+ - include: '#string-rsp-tag'
163
+ - include: '#character-inline'
164
+ - include: '#character-html'
165
+ string-rsp-tag:
166
+ begin: '<%(==?|:|!)? '
167
+ end: ' %>'
168
+ name: source.rebol.embedded.block.html
169
+ patterns:
170
+ - include: source.rebol
171
+ string-tag:
172
+ begin: <(?:\/|%={0,2}\ |\!)?(?:([-_a-zA-Z0-9]+):)?([-_a-zA-Z0-9:]+)
173
+ captures:
174
+ '1':
175
+ name: entity.other.namespace.xml
176
+ '2':
177
+ name: entity.name.tag.xml
178
+ end: (?:\s/|\ %)?>
179
+ name: meta.tag.rebol
180
+ patterns:
181
+ - captures:
182
+ '1':
183
+ name: entity.other.namespace.xml
184
+ '2':
185
+ name: entity.other.attribute-name.xml
186
+ match: ' (?:([-_a-zA-Z0-9]+):)?([_a-zA-Z-]+)'
187
+ - include: '#string-tag-double-quoted'
188
+ - include: '#string-tag-single-quoted'
189
+ string-tag-double-quoted:
190
+ begin: '"'
191
+ end: '"'
192
+ name: string.quoted.double.xml
193
+ string-tag-single-quoted:
194
+ begin: ''''
195
+ end: ''''
196
+ name: string.quoted.single.xml
197
+ string-url:
198
+ match: '[A-Za-z][\w-]{0,15}:(/{0,3}[^\s\n\[\]\(\)]+|//)'
199
+ name: string.other.url.rebol
200
+ strings:
201
+ patterns:
202
+ - include: '#character'
203
+ - include: '#string-quoted'
204
+ - include: '#string-multiline'
205
+ - include: '#string-tag'
206
+ - include: '#string-file-quoted'
207
+ - include: '#string-file'
208
+ - include: '#string-url'
209
+ - include: '#string-email'
210
+ - include: '#binary-base-two'
211
+ - include: '#binary-base-sixty-four'
212
+ - include: '#binary-base-sixteen'
213
+ - include: '#string-issue'
214
+ type-literal:
215
+ begin: '#\[(?:(\w+!))'
216
+ captures:
217
+ '1':
218
+ name: keyword.control.datatype.rebol
219
+ end: ']'
220
+ name: meta.literal.rebol
221
+ patterns:
222
+ - include: $self
223
+ value-date:
224
+ match: \d{1,4}\-(Jan(u(a(ry?)?)?)?|Feb(u(a(ry?)?)?)?|Mar(ch?)?|Apr(il?)?|May|June?|July?|Aug(u(st?)?)?|Sep(t(e(m(b(er?)?)?)?)?)?|Oct(o(b(er?)?)?)?|Nov(e(m(b(er?)?)?)?)?|Dec(e(m(b(er?)?)?)?)?|[1-9]|1[012])\-\d{1,4}(/\d{1,2}[:]\d{1,2}([:]\d{1,2}(\.\d{1,5})?)?([+-]\d{1,2}[:]\d{1,2})?)?
225
+ name: constant.other.date.rebol
226
+ value-money:
227
+ match: (?<!\w)-?[a-zA-Z]*\$[0-9]+(\.[0-9]{2})?
228
+ name: constant.numeric.money.rebol
229
+ value-number:
230
+ match: (?<![\w.,])([-+]?((\d+[\d']*[.,]?[\d']*)|([.,]\d+[\d']*))((e|E)(\+|-)?\d+)?)(?=\W)
231
+ name: constant.numeric.rebol
232
+ value-pair:
233
+ match: (?<!\w)[-+]?[[:digit:]]+[x][-+]?[[:digit:]]+
234
+ name: constant.other.pair.rebol
235
+ value-time:
236
+ match: ([-+]?[:]\d{1,2}([aApP][mM])?)|([-+]?[:]\d{1,2}[.]\d{0,9})|([-+]?\d{1,2}[:]\d{1,2}([aApP][mM])?)|([-+]?\d{1,2}[:]\d{1,2}[.]\d{0,9})|([-+]?\d{1,2}[:]\d{1,2}[:]\d{1,2}([.]\d{0,9})?([aApP][mM])?)(?!\w)
237
+ name: constant.other.time.rebol
238
+ value-tuple:
239
+ match: (?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){2,9}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.?
240
+ name: constant.other.tuple.rebol
241
+ values:
242
+ patterns:
243
+ - include: '#value-date'
244
+ - include: '#value-time'
245
+ - include: '#value-tuple'
246
+ - include: '#value-number'
247
+ - include: '#value-pair'
248
+ - include: '#value-money'
249
+ word:
250
+ match: (?<=^|[\s\[\]()}"/])[A-Za-z=\-\?\!\_\*\+\.`~\&][A-Za-z0-9=\-\!\?\_\*\+\.`~&]*(/\d+)*(/(?=[A-Za-z=\-\?\!\_\*\+\.`~\&\(:'%])|(?=[\s\[\]\(\)\{"]|$))
251
+ name: constant.other.word.rebol
252
+ word-datatype:
253
+ match: (?<=^|[\s\[\]()}"])(end\!|unset\!|error\!|datatype\!|context\!|native\!|action\!|routine\!|op\!|function\!|object\!|struct\!|library\!|port\!|any-type\!|any-word\!|any-function\!|number\!|series\!|any-string\!|any-block\!|symbol\!|word\!|set-word\!|get-word\!|lit-word\!|refinement\!|none\!|logic\!|integer\!|decimal\!|money\!|time\!|date\!|char\!|pair\!|event\!|tuple\!|bitset\!|string\!|issue\!|binary\!|file\!|email\!|url\!|image\!|tag\!|block\!|paren\!|path\!|set-path\!|lit-path\!|hash\!|list\!)(?=[\s\[\](){"]|$)
254
+ name: keyword.control.datatype.rebol
255
+ word-get:
256
+ match: ':[A-Za-z=\-\?\!\_\*\+\.`~\&][A-Za-z0-9=\-\!\?\_\*\+\.`~&]*(/([A-Za-z=\-\?\!\_\*\+\.`~\&][A-Za-z0-9=\-\!\?\_\*\+\.`~&]*|\d+)*)*'
257
+ name: variable.other.getword.rebol
258
+ word-header:
259
+ match: (?<=^\[|^)(Boron|REBOL|Rebol|Red(/System)?|Topaz|World)(?=\s*\[)
260
+ name: keyword.control.header.rebol
261
+ word-infix:
262
+ match: (?<=^|[\s\[\]()}"/])(\+\+?|--?|\*\*?|//?|=|>=?|<(=|>)?)(?=[\s\[\](){"])
263
+ name: keyword.control.native.rebol
264
+ word-lit:
265
+ match: (?<=^|[\s\[\]()}"/])'[A-Za-z=\-\?\!\_\*\+\.`~\&][A-Za-z0-9=\-\!\?\_\*\+\.`~\&]*(/([A-Za-z=\-\?\!\_\*\+\.`~][A-Za-z0-9=\-\!\?\_\*\+\.`~]*|\d+))*
266
+ name: constant.other.litword.rebol
267
+ word-logic:
268
+ match: (?<=^|[\s\[\]()}"])(true|yes|false|off|none|no)(?=[\s\[\](){"])
269
+ name: constant.other.logic.rebol
270
+ word-native:
271
+ match: (?<=^|[\s\[\]()}"])(about|abs|absolute|action\?|add|alert|alias|all|alter|and~|and|any|any-block\?|any-function\?|any-string\?|any-type\?|any-word\?|append|arccosine|arcsine|arctangent|array|ask|at|back|binary\?|bind|bitset\?|block\?|body-of|boot-prefs|break|browse|build-tag|call|caret-to-offset|case|catch|center-face|change|change-dir|char\?|charset|checksum|choose|clean-path|clear|clear-fields|close|closure|collect|comment|complement|compose|compress|confine|confirm|connected\?|context|continue-post|copy|cosine|cp|crypt-strength\?|cvs-date|cvs-version|datatype\?|date\?|debase|decimal\?|decode-cgi|decode-url|decompress|deflag-face|dehex|delete|demo|desktop|detab|dh-compute-key|dh-generate-key|dh-make-key|difference|dir\?|dirize|disarm|dispatch|divide|do|do-boot|do-events|do-face|do-face-alt|does|dsa-generate-key|dsa-make-key|dsa-make-signature|dsa-verify-signature|dump-face|dump-pane|echo|editor|either|else|email\?|emailer|empty\?|enbase|entab|equal\?|error\?|even\?|event\?|exclude|exists-thru\?|exists\?|exit|exp|extract|fifth|file\?|find|find-key-face|find-window|first|flag-face|flag-face\?|flash|focus|for|forall|foreach|forever|form|forskip|found\?|fourth|free|func|function\??|get|get-env|get-modes|get-net-info|get-style|get-word\?|greater-or-equal\?|greater\?|halt|has|hash\?|head\??|help|hide|hide-popup|if|image\?|import-email|in|in-window\?|index\?|info\?|inform|input|input\?|insert|insert-event-func|inside\?|integer\?|intersect|issue\?|join|keep|last|launch|launch-thru|layout|length\?|lesser-or-equal\?|lesser\?|library\?|link-app\?|link\?|list-dir|list\?|lit-path\?|lit-word\?|load|load-image|load-prefs|load-thru|log-10|log-2|log-e|logic\?|loop|lowercase|make|make-dir|make-face|max|maximum|maximum-of|min|minimum|minimum-of|modified\?|mold|money\?|multiply|native\?|negate|negative\?|net-error|next|none\?|not|not-equal\?|now|number\?|object\?|odd\?|offset-to-caret|offset\?|op\?|open|open-events|or|or~|outside\?|pair\?|paren\?|parse|parse-email-addrs|parse-header|parse-header-date|parse-xml|path-thru|path\?|pick|poke|port\?|positive\?|power|prin|print|probe|protect|protect-system|q|query|quit|random|read|read-io|read-net|read-thru|reboot|recycle|reduce|refinement\?|reform|rejoin|remainder|remold|remove|remove-event-func|rename|repeat|repend|replace|request|request-color|request-date|request-download|request-file|request-list|request-pass|request-text|resend|return|reverse|routine\?|rsa-encrypt|rsa-generate-key|rsa-make-key|same\?|save|save-prefs|save-user|screen-offset\?|script\?|scroll-para|second|secure|select|send|series\?|set|set-env|set-font|set-modes|set-net|set-para|set-path\?|set-style|set-user|set-user-name|set-word\?|show|show-popup|sine|size-text|size\?|skip|sort|source|span\?|spec-of|split-path|square-root|strict-equal\?|strict-not-equal\?|string\?|struct\?|stylize|subtract|switch|tag\?|tail\??|take|tangent|textinfo|third|throw|throw-on-error|time\?|title-of|to|to-local-file|to-rebol-file|trace|trim|try|tuple\?|types-of|type\?|unfocus|uninstall|union|unique|unless|unprotect|unset|unset\?|until|unview|update|upgrade|uppercase|url\?|usage|use|values-of|value\?|vbug|view|view-install|view-prefs|view\?|viewed\?|wait|what|what-dir|while|win-offset\?|within\?|words-of|word\?|write|write-io|write-user|xor|xor~|zero\?|/local|thru|end)(/(?=[A-Za-z=\-\?\!\_\*\+\.`~\&])|(?=[\s\[\](){"]|$))
272
+ name: keyword.control.native.rebol
273
+ word-native-to-type:
274
+ match: (?<=^|[\s\[\]()}"])(to-binary|to-bitset|to-block|to-char|to-date|to-decimal|to-email|to-event|to-file|to-get-word|to-hash|to-hex|to-idate|to-image|to-integer|to-issue|to-list|to-lit-path|to-lit-word|to-logic|to-money|to-none|to-pair|to-paren|to-path|to-refinement|to-set-path|to-set-word|to-string|to-tag|to-time|to-tuple|to-url|to-word)(?=[\s\[\](){"]|$)
275
+ name: constant.other.word.to-type.rebol
276
+ word-parse:
277
+ match: (?<=^|[\s\[\]()}"])(thru|some|opt|end)(?=[\s\[\](){"]|$)
278
+ name: keyword.control.parse.rebol
279
+ word-qm:
280
+ match: (?<=^|[\s\[\]()}"])(qm|route|render|redirect-to|publish|response|as|validate|verify|get-param|get-cookie|set-cookie|require)(/(?=[A-Za-z=\-\?\!\_\*\+\.`~\&])|(?=[\s\[\](){"]))
281
+ name: keyword.control.qm.rebol
282
+ word-refine:
283
+ match: /[A-Za-z=`~][A-Za-z0-9=\-\!\?\_\*\.`~]*
284
+ name: constant.other.word.refinement.rebol
285
+ word-set:
286
+ match: '[A-Za-z=\-\?\!\_\*\+\.`~\&][A-Za-z0-9=\-\!\?\_\*\+\.`~&]*(/([A-Za-z=\-\?\!\_\*\+\.`~\&][A-Za-z0-9=\-\!\?\_\*\+\.`~&]*|\d+))*:'
287
+ name: variable.other.setword.rebol
288
+ words:
289
+ name: meta.word.rebol
290
+ patterns:
291
+ - include: '#word-datatype'
292
+ - include: '#word-set'
293
+ - include: '#word-get'
294
+ - include: '#word-lit'
295
+ - include: '#word-header'
296
+ - include: '#word-native'
297
+ - include: '#word-native-to-type'
298
+ - include: '#word-infix'
299
+ - include: '#word-logic'
300
+ - include: '#word-refine'
301
+ - include: '#word-qm'
302
+ - include: '#word'
303
+ scopeName: source.rebol
304
+ uuid: 6BE0E13B-C4DD-478F-953A-2D84DBBCA2BA
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dyndoc-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.5
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - CQLS
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-08 00:00:00.000000000 Z
11
+ date: 2016-10-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: R4rb
@@ -102,7 +102,10 @@ executables:
102
102
  - dyn-cli
103
103
  - dyn-srv
104
104
  - dpm
105
+ - dyn-html
105
106
  - dyn-init
107
+ - dyn-scan
108
+ - dyn-lint
106
109
  extensions: []
107
110
  extra_rdoc_files: []
108
111
  files:
@@ -111,9 +114,14 @@ files:
111
114
  - bin/dyn-cli
112
115
  - bin/dyn-env
113
116
  - bin/dyn-forever
117
+ - bin/dyn-html
114
118
  - bin/dyn-init
119
+ - bin/dyn-lint
120
+ - bin/dyn-scan
115
121
  - bin/dyn-srv
116
122
  - lib/dyndoc-convert.rb
123
+ - lib/dyndoc-edit.rb
124
+ - lib/dyndoc-linter.rb
117
125
  - lib/dyndoc/cli/interactive-client.rb
118
126
  - lib/dyndoc/srv/interactive-server.rb
119
127
  - lib/dyndoc/srv/tilt.rb
@@ -294,6 +302,7 @@ files:
294
302
  - share/etc/uv/syntax/source.quake-config.syntax
295
303
  - share/etc/uv/syntax/source.r-console.syntax
296
304
  - share/etc/uv/syntax/source.r.syntax
305
+ - share/etc/uv/syntax/source.rebol.syntax
297
306
  - share/etc/uv/syntax/source.regexp.oniguruma.syntax
298
307
  - share/etc/uv/syntax/source.regexp.python.syntax
299
308
  - share/etc/uv/syntax/source.regexp.syntax