mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-12-29 13:21:01 +00:00
@@ -2032,6 +2032,12 @@ YAML:
|
|||||||
- .rviz
|
- .rviz
|
||||||
- .yaml
|
- .yaml
|
||||||
|
|
||||||
|
Zephir:
|
||||||
|
type: programming
|
||||||
|
lexer: PHP
|
||||||
|
color: "#118f9e"
|
||||||
|
primary_extension: .zep
|
||||||
|
|
||||||
eC:
|
eC:
|
||||||
type: programming
|
type: programming
|
||||||
search_term: ec
|
search_term: ec
|
||||||
|
|||||||
@@ -6,6 +6,9 @@
|
|||||||
"Agda": [
|
"Agda": [
|
||||||
".agda"
|
".agda"
|
||||||
],
|
],
|
||||||
|
"Alloy": [
|
||||||
|
".als"
|
||||||
|
],
|
||||||
"Apex": [
|
"Apex": [
|
||||||
".cls"
|
".cls"
|
||||||
],
|
],
|
||||||
@@ -449,6 +452,9 @@
|
|||||||
".sh",
|
".sh",
|
||||||
".zsh"
|
".zsh"
|
||||||
],
|
],
|
||||||
|
"ShellSession": [
|
||||||
|
".sh-session"
|
||||||
|
],
|
||||||
"Shen": [
|
"Shen": [
|
||||||
".shen"
|
".shen"
|
||||||
],
|
],
|
||||||
@@ -537,6 +543,9 @@
|
|||||||
],
|
],
|
||||||
"YAML": [
|
"YAML": [
|
||||||
".yml"
|
".yml"
|
||||||
|
],
|
||||||
|
"Zephir": [
|
||||||
|
".zep"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"interpreters": {
|
"interpreters": {
|
||||||
@@ -600,8 +609,8 @@
|
|||||||
".gemrc"
|
".gemrc"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"tokens_total": 525524,
|
"tokens_total": 527926,
|
||||||
"languages_total": 635,
|
"languages_total": 643,
|
||||||
"tokens": {
|
"tokens": {
|
||||||
"ABAP": {
|
"ABAP": {
|
||||||
"*/**": 1,
|
"*/**": 1,
|
||||||
@@ -920,6 +929,241 @@
|
|||||||
"zero": 1,
|
"zero": 1,
|
||||||
"Nat": 1
|
"Nat": 1
|
||||||
},
|
},
|
||||||
|
"Alloy": {
|
||||||
|
"module": 3,
|
||||||
|
"examples/systems/file_system": 1,
|
||||||
|
"abstract": 2,
|
||||||
|
"sig": 20,
|
||||||
|
"Object": 10,
|
||||||
|
"{": 54,
|
||||||
|
"}": 60,
|
||||||
|
"Name": 2,
|
||||||
|
"File": 1,
|
||||||
|
"extends": 10,
|
||||||
|
"some": 3,
|
||||||
|
"d": 3,
|
||||||
|
"Dir": 8,
|
||||||
|
"|": 19,
|
||||||
|
"this": 14,
|
||||||
|
"in": 19,
|
||||||
|
"d.entries.contents": 1,
|
||||||
|
"entries": 3,
|
||||||
|
"set": 10,
|
||||||
|
"DirEntry": 2,
|
||||||
|
"parent": 3,
|
||||||
|
"lone": 6,
|
||||||
|
"this.": 4,
|
||||||
|
"@contents.": 1,
|
||||||
|
"@entries": 1,
|
||||||
|
"all": 16,
|
||||||
|
"e1": 2,
|
||||||
|
"e2": 2,
|
||||||
|
"e1.name": 1,
|
||||||
|
"e2.name": 1,
|
||||||
|
"@parent": 2,
|
||||||
|
"Root": 5,
|
||||||
|
"one": 8,
|
||||||
|
"no": 8,
|
||||||
|
"Cur": 1,
|
||||||
|
"name": 1,
|
||||||
|
"contents": 2,
|
||||||
|
"pred": 16,
|
||||||
|
"OneParent_buggyVersion": 2,
|
||||||
|
"-": 41,
|
||||||
|
"d.parent": 2,
|
||||||
|
"OneParent_correctVersion": 2,
|
||||||
|
"(": 12,
|
||||||
|
"&&": 2,
|
||||||
|
"contents.d": 1,
|
||||||
|
")": 9,
|
||||||
|
"NoDirAliases": 3,
|
||||||
|
"o": 1,
|
||||||
|
"o.": 1,
|
||||||
|
"check": 6,
|
||||||
|
"for": 7,
|
||||||
|
"expect": 6,
|
||||||
|
"examples/systems/marksweepgc": 1,
|
||||||
|
"Node": 10,
|
||||||
|
"HeapState": 5,
|
||||||
|
"left": 3,
|
||||||
|
"right": 1,
|
||||||
|
"marked": 1,
|
||||||
|
"freeList": 1,
|
||||||
|
"clearMarks": 1,
|
||||||
|
"[": 82,
|
||||||
|
"hs": 16,
|
||||||
|
".marked": 3,
|
||||||
|
".right": 4,
|
||||||
|
"hs.right": 3,
|
||||||
|
"fun": 1,
|
||||||
|
"reachable": 1,
|
||||||
|
"n": 5,
|
||||||
|
"]": 80,
|
||||||
|
"+": 14,
|
||||||
|
"n.": 1,
|
||||||
|
"hs.left": 2,
|
||||||
|
"mark": 1,
|
||||||
|
"from": 2,
|
||||||
|
"hs.reachable": 1,
|
||||||
|
"setFreeList": 1,
|
||||||
|
".freeList.*": 3,
|
||||||
|
".left": 5,
|
||||||
|
"hs.marked": 1,
|
||||||
|
"GC": 1,
|
||||||
|
"root": 5,
|
||||||
|
"assert": 3,
|
||||||
|
"Soundness1": 2,
|
||||||
|
"h": 9,
|
||||||
|
"live": 3,
|
||||||
|
"h.reachable": 1,
|
||||||
|
"h.right": 1,
|
||||||
|
"Soundness2": 2,
|
||||||
|
".reachable": 2,
|
||||||
|
"h.GC": 1,
|
||||||
|
".freeList": 1,
|
||||||
|
"Completeness": 1,
|
||||||
|
"examples/systems/views": 1,
|
||||||
|
"open": 2,
|
||||||
|
"util/ordering": 1,
|
||||||
|
"State": 16,
|
||||||
|
"as": 2,
|
||||||
|
"so": 1,
|
||||||
|
"util/relation": 1,
|
||||||
|
"rel": 1,
|
||||||
|
"Ref": 19,
|
||||||
|
"t": 16,
|
||||||
|
"b": 13,
|
||||||
|
"v": 25,
|
||||||
|
"views": 2,
|
||||||
|
"when": 1,
|
||||||
|
"is": 1,
|
||||||
|
"view": 2,
|
||||||
|
"of": 3,
|
||||||
|
"type": 1,
|
||||||
|
"backing": 1,
|
||||||
|
"dirty": 3,
|
||||||
|
"contains": 1,
|
||||||
|
"refs": 7,
|
||||||
|
"that": 1,
|
||||||
|
"have": 1,
|
||||||
|
"been": 1,
|
||||||
|
"invalidated": 1,
|
||||||
|
"obj": 1,
|
||||||
|
"ViewType": 8,
|
||||||
|
"anyviews": 2,
|
||||||
|
"visualization": 1,
|
||||||
|
"ViewType.views": 1,
|
||||||
|
"Map": 2,
|
||||||
|
"keys": 3,
|
||||||
|
"map": 2,
|
||||||
|
"s": 6,
|
||||||
|
"Ref.map": 1,
|
||||||
|
"s.refs": 3,
|
||||||
|
"MapRef": 4,
|
||||||
|
"fact": 4,
|
||||||
|
"State.obj": 3,
|
||||||
|
"Iterator": 2,
|
||||||
|
"done": 3,
|
||||||
|
"lastRef": 2,
|
||||||
|
"IteratorRef": 5,
|
||||||
|
"Set": 2,
|
||||||
|
"elts": 2,
|
||||||
|
"SetRef": 5,
|
||||||
|
"KeySetView": 6,
|
||||||
|
"State.views": 1,
|
||||||
|
"IteratorView": 3,
|
||||||
|
"s.views": 2,
|
||||||
|
"handle": 1,
|
||||||
|
"possibility": 1,
|
||||||
|
"modifying": 1,
|
||||||
|
"an": 1,
|
||||||
|
"object": 1,
|
||||||
|
"and": 1,
|
||||||
|
"its": 1,
|
||||||
|
"at": 1,
|
||||||
|
"once": 1,
|
||||||
|
"*": 1,
|
||||||
|
"should": 1,
|
||||||
|
"we": 1,
|
||||||
|
"limit": 1,
|
||||||
|
"frame": 1,
|
||||||
|
"conds": 1,
|
||||||
|
"to": 1,
|
||||||
|
"non": 1,
|
||||||
|
"*/": 1,
|
||||||
|
"modifies": 5,
|
||||||
|
"pre": 15,
|
||||||
|
"post": 14,
|
||||||
|
"rs": 4,
|
||||||
|
"let": 5,
|
||||||
|
"vr": 1,
|
||||||
|
"pre.views": 8,
|
||||||
|
"mods": 3,
|
||||||
|
"rs.*vr": 1,
|
||||||
|
"r": 3,
|
||||||
|
"pre.refs": 6,
|
||||||
|
"pre.obj": 10,
|
||||||
|
"post.obj": 7,
|
||||||
|
"viewFrame": 4,
|
||||||
|
"post.dirty": 1,
|
||||||
|
"pre.dirty": 1,
|
||||||
|
"allocates": 5,
|
||||||
|
"&": 3,
|
||||||
|
"post.refs": 1,
|
||||||
|
".map": 3,
|
||||||
|
".elts": 3,
|
||||||
|
"dom": 1,
|
||||||
|
"<:>": 1,
|
||||||
|
"setRefs": 1,
|
||||||
|
"MapRef.put": 1,
|
||||||
|
"k": 5,
|
||||||
|
"none": 4,
|
||||||
|
"post.views": 4,
|
||||||
|
"SetRef.iterator": 1,
|
||||||
|
"iterRef": 4,
|
||||||
|
"i": 7,
|
||||||
|
"i.left": 3,
|
||||||
|
"i.done": 1,
|
||||||
|
"i.lastRef": 1,
|
||||||
|
"IteratorRef.remove": 1,
|
||||||
|
".lastRef": 2,
|
||||||
|
"IteratorRef.next": 1,
|
||||||
|
"ref": 3,
|
||||||
|
"IteratorRef.hasNext": 1,
|
||||||
|
"s.obj": 1,
|
||||||
|
"zippishOK": 2,
|
||||||
|
"ks": 6,
|
||||||
|
"vs": 6,
|
||||||
|
"m": 4,
|
||||||
|
"ki": 2,
|
||||||
|
"vi": 2,
|
||||||
|
"s0": 4,
|
||||||
|
"so/first": 1,
|
||||||
|
"s1": 4,
|
||||||
|
"so/next": 7,
|
||||||
|
"s2": 6,
|
||||||
|
"s3": 4,
|
||||||
|
"s4": 4,
|
||||||
|
"s5": 4,
|
||||||
|
"s6": 4,
|
||||||
|
"s7": 2,
|
||||||
|
"precondition": 2,
|
||||||
|
"s0.dirty": 1,
|
||||||
|
"ks.iterator": 1,
|
||||||
|
"vs.iterator": 1,
|
||||||
|
"ki.hasNext": 1,
|
||||||
|
"vi.hasNext": 1,
|
||||||
|
"ki.this/next": 1,
|
||||||
|
"vi.this/next": 1,
|
||||||
|
"m.put": 1,
|
||||||
|
"ki.remove": 1,
|
||||||
|
"vi.remove": 1,
|
||||||
|
"State.dirty": 1,
|
||||||
|
"ViewType.pre.views": 2,
|
||||||
|
"but": 1,
|
||||||
|
"#s.obj": 1,
|
||||||
|
"<": 1
|
||||||
|
},
|
||||||
"ApacheConf": {
|
"ApacheConf": {
|
||||||
"ServerSignature": 1,
|
"ServerSignature": 1,
|
||||||
"Off": 1,
|
"Off": 1,
|
||||||
@@ -48819,6 +49063,151 @@
|
|||||||
"foodforthought.jpg": 1,
|
"foodforthought.jpg": 1,
|
||||||
"name##*fo": 1
|
"name##*fo": 1
|
||||||
},
|
},
|
||||||
|
"ShellSession": {
|
||||||
|
"echo": 2,
|
||||||
|
"FOOBAR": 2,
|
||||||
|
"Hello": 2,
|
||||||
|
"World": 2,
|
||||||
|
"gem": 4,
|
||||||
|
"install": 4,
|
||||||
|
"nokogiri": 6,
|
||||||
|
"...": 4,
|
||||||
|
"Building": 2,
|
||||||
|
"native": 2,
|
||||||
|
"extensions.": 2,
|
||||||
|
"This": 4,
|
||||||
|
"could": 2,
|
||||||
|
"take": 2,
|
||||||
|
"a": 4,
|
||||||
|
"while...": 2,
|
||||||
|
"checking": 1,
|
||||||
|
"for": 4,
|
||||||
|
"libxml/parser.h...": 1,
|
||||||
|
"***": 2,
|
||||||
|
"extconf.rb": 1,
|
||||||
|
"failed": 1,
|
||||||
|
"Could": 2,
|
||||||
|
"not": 2,
|
||||||
|
"create": 1,
|
||||||
|
"Makefile": 1,
|
||||||
|
"due": 1,
|
||||||
|
"to": 3,
|
||||||
|
"some": 1,
|
||||||
|
"reason": 2,
|
||||||
|
"probably": 1,
|
||||||
|
"lack": 1,
|
||||||
|
"of": 2,
|
||||||
|
"necessary": 1,
|
||||||
|
"libraries": 1,
|
||||||
|
"and/or": 1,
|
||||||
|
"headers.": 1,
|
||||||
|
"Check": 1,
|
||||||
|
"the": 2,
|
||||||
|
"mkmf.log": 1,
|
||||||
|
"file": 1,
|
||||||
|
"more": 1,
|
||||||
|
"details.": 1,
|
||||||
|
"You": 1,
|
||||||
|
"may": 1,
|
||||||
|
"need": 1,
|
||||||
|
"configuration": 1,
|
||||||
|
"options.": 1,
|
||||||
|
"brew": 2,
|
||||||
|
"tap": 2,
|
||||||
|
"homebrew/dupes": 1,
|
||||||
|
"Cloning": 1,
|
||||||
|
"into": 1,
|
||||||
|
"remote": 3,
|
||||||
|
"Counting": 1,
|
||||||
|
"objects": 3,
|
||||||
|
"done.": 4,
|
||||||
|
"Compressing": 1,
|
||||||
|
"%": 5,
|
||||||
|
"(": 6,
|
||||||
|
"/591": 1,
|
||||||
|
")": 6,
|
||||||
|
"Total": 1,
|
||||||
|
"delta": 2,
|
||||||
|
"reused": 1,
|
||||||
|
"Receiving": 1,
|
||||||
|
"/1034": 1,
|
||||||
|
"KiB": 1,
|
||||||
|
"|": 1,
|
||||||
|
"bytes/s": 1,
|
||||||
|
"Resolving": 1,
|
||||||
|
"deltas": 1,
|
||||||
|
"/560": 1,
|
||||||
|
"Checking": 1,
|
||||||
|
"connectivity...": 1,
|
||||||
|
"done": 1,
|
||||||
|
"Warning": 1,
|
||||||
|
"homebrew/dupes/lsof": 1,
|
||||||
|
"over": 1,
|
||||||
|
"mxcl/master/lsof": 1,
|
||||||
|
"Tapped": 1,
|
||||||
|
"formula": 4,
|
||||||
|
"apple": 1,
|
||||||
|
"-": 12,
|
||||||
|
"gcc42": 1,
|
||||||
|
"Downloading": 1,
|
||||||
|
"http": 2,
|
||||||
|
"//r.research.att.com/tools/gcc": 1,
|
||||||
|
"darwin11.pkg": 1,
|
||||||
|
"########################################################################": 1,
|
||||||
|
"Caveats": 1,
|
||||||
|
"NOTE": 1,
|
||||||
|
"provides": 1,
|
||||||
|
"components": 1,
|
||||||
|
"that": 1,
|
||||||
|
"were": 1,
|
||||||
|
"removed": 1,
|
||||||
|
"from": 3,
|
||||||
|
"XCode": 2,
|
||||||
|
"in": 2,
|
||||||
|
"release.": 1,
|
||||||
|
"There": 1,
|
||||||
|
"is": 2,
|
||||||
|
"no": 1,
|
||||||
|
"this": 1,
|
||||||
|
"if": 1,
|
||||||
|
"you": 1,
|
||||||
|
"are": 1,
|
||||||
|
"using": 1,
|
||||||
|
"version": 1,
|
||||||
|
"prior": 1,
|
||||||
|
"contains": 1,
|
||||||
|
"compilers": 2,
|
||||||
|
"built": 2,
|
||||||
|
"Apple": 1,
|
||||||
|
"s": 1,
|
||||||
|
"GCC": 1,
|
||||||
|
"sources": 1,
|
||||||
|
"build": 1,
|
||||||
|
"available": 1,
|
||||||
|
"//opensource.apple.com/tarballs/gcc": 1,
|
||||||
|
"All": 1,
|
||||||
|
"have": 1,
|
||||||
|
"suffix.": 1,
|
||||||
|
"A": 1,
|
||||||
|
"GFortran": 1,
|
||||||
|
"compiler": 1,
|
||||||
|
"also": 1,
|
||||||
|
"included.": 1,
|
||||||
|
"Summary": 1,
|
||||||
|
"/usr/local/Cellar/apple": 1,
|
||||||
|
"gcc42/4.2.1": 1,
|
||||||
|
"files": 1,
|
||||||
|
"M": 1,
|
||||||
|
"seconds": 1,
|
||||||
|
"v": 1,
|
||||||
|
"Fetching": 1,
|
||||||
|
"Successfully": 1,
|
||||||
|
"installed": 2,
|
||||||
|
"Installing": 2,
|
||||||
|
"ri": 1,
|
||||||
|
"documentation": 2,
|
||||||
|
"RDoc": 1
|
||||||
|
},
|
||||||
"Shen": {
|
"Shen": {
|
||||||
"*": 47,
|
"*": 47,
|
||||||
"graph.shen": 1,
|
"graph.shen": 1,
|
||||||
@@ -54312,11 +54701,163 @@
|
|||||||
"GMT": 1,
|
"GMT": 1,
|
||||||
"recorded_with": 1,
|
"recorded_with": 1,
|
||||||
"VCR": 1
|
"VCR": 1
|
||||||
|
},
|
||||||
|
"Zephir": {
|
||||||
|
"%": 10,
|
||||||
|
"{": 56,
|
||||||
|
"#define": 1,
|
||||||
|
"MAX_FACTOR": 3,
|
||||||
|
"}": 50,
|
||||||
|
"namespace": 3,
|
||||||
|
"Test": 2,
|
||||||
|
";": 86,
|
||||||
|
"#include": 1,
|
||||||
|
"static": 1,
|
||||||
|
"long": 3,
|
||||||
|
"fibonacci": 4,
|
||||||
|
"(": 55,
|
||||||
|
"n": 5,
|
||||||
|
")": 53,
|
||||||
|
"if": 39,
|
||||||
|
"<": 1,
|
||||||
|
"return": 25,
|
||||||
|
"else": 11,
|
||||||
|
"-": 25,
|
||||||
|
"+": 5,
|
||||||
|
"class": 2,
|
||||||
|
"Cblock": 1,
|
||||||
|
"public": 22,
|
||||||
|
"function": 22,
|
||||||
|
"testCblock1": 1,
|
||||||
|
"int": 3,
|
||||||
|
"a": 6,
|
||||||
|
"testCblock2": 1,
|
||||||
|
"Router": 1,
|
||||||
|
"Route": 1,
|
||||||
|
"protected": 9,
|
||||||
|
"_pattern": 3,
|
||||||
|
"_compiledPattern": 3,
|
||||||
|
"_paths": 3,
|
||||||
|
"_methods": 5,
|
||||||
|
"_hostname": 3,
|
||||||
|
"_converters": 3,
|
||||||
|
"_id": 2,
|
||||||
|
"_name": 3,
|
||||||
|
"_beforeMatch": 3,
|
||||||
|
"__construct": 1,
|
||||||
|
"pattern": 37,
|
||||||
|
"paths": 7,
|
||||||
|
"null": 11,
|
||||||
|
"httpMethods": 6,
|
||||||
|
"this": 28,
|
||||||
|
"reConfigure": 2,
|
||||||
|
"let": 51,
|
||||||
|
"compilePattern": 2,
|
||||||
|
"var": 4,
|
||||||
|
"idPattern": 6,
|
||||||
|
"memstr": 10,
|
||||||
|
"str_replace": 6,
|
||||||
|
".": 5,
|
||||||
|
"via": 1,
|
||||||
|
"extractNamedParams": 2,
|
||||||
|
"string": 6,
|
||||||
|
"char": 1,
|
||||||
|
"ch": 27,
|
||||||
|
"tmp": 4,
|
||||||
|
"matches": 5,
|
||||||
|
"boolean": 1,
|
||||||
|
"notValid": 5,
|
||||||
|
"false": 3,
|
||||||
|
"cursor": 4,
|
||||||
|
"cursorVar": 5,
|
||||||
|
"marker": 4,
|
||||||
|
"bracketCount": 7,
|
||||||
|
"parenthesesCount": 5,
|
||||||
|
"foundPattern": 6,
|
||||||
|
"intermediate": 4,
|
||||||
|
"numberMatches": 4,
|
||||||
|
"route": 12,
|
||||||
|
"item": 7,
|
||||||
|
"variable": 5,
|
||||||
|
"regexp": 7,
|
||||||
|
"strlen": 1,
|
||||||
|
"<=>": 5,
|
||||||
|
"0": 9,
|
||||||
|
"for": 4,
|
||||||
|
"in": 4,
|
||||||
|
"1": 3,
|
||||||
|
"substr": 3,
|
||||||
|
"break": 9,
|
||||||
|
"&&": 6,
|
||||||
|
"z": 2,
|
||||||
|
"Z": 2,
|
||||||
|
"true": 2,
|
||||||
|
"<='9')>": 1,
|
||||||
|
"_": 1,
|
||||||
|
"2": 2,
|
||||||
|
"continue": 1,
|
||||||
|
"[": 14,
|
||||||
|
"]": 14,
|
||||||
|
"moduleName": 5,
|
||||||
|
"controllerName": 7,
|
||||||
|
"actionName": 4,
|
||||||
|
"parts": 9,
|
||||||
|
"routePaths": 5,
|
||||||
|
"realClassName": 1,
|
||||||
|
"namespaceName": 1,
|
||||||
|
"pcrePattern": 4,
|
||||||
|
"compiledPattern": 4,
|
||||||
|
"extracted": 4,
|
||||||
|
"typeof": 2,
|
||||||
|
"throw": 1,
|
||||||
|
"new": 1,
|
||||||
|
"Exception": 1,
|
||||||
|
"explode": 1,
|
||||||
|
"switch": 1,
|
||||||
|
"count": 1,
|
||||||
|
"case": 3,
|
||||||
|
"controller": 1,
|
||||||
|
"action": 1,
|
||||||
|
"array": 1,
|
||||||
|
"The": 1,
|
||||||
|
"contains": 1,
|
||||||
|
"invalid": 1,
|
||||||
|
"#": 1,
|
||||||
|
"array_merge": 1,
|
||||||
|
"//Update": 1,
|
||||||
|
"the": 1,
|
||||||
|
"s": 1,
|
||||||
|
"name": 5,
|
||||||
|
"*": 2,
|
||||||
|
"@return": 1,
|
||||||
|
"*/": 1,
|
||||||
|
"getName": 1,
|
||||||
|
"setName": 1,
|
||||||
|
"beforeMatch": 1,
|
||||||
|
"callback": 2,
|
||||||
|
"getBeforeMatch": 1,
|
||||||
|
"getRouteId": 1,
|
||||||
|
"getPattern": 1,
|
||||||
|
"getCompiledPattern": 1,
|
||||||
|
"getPaths": 1,
|
||||||
|
"getReversedPaths": 1,
|
||||||
|
"reversed": 4,
|
||||||
|
"path": 3,
|
||||||
|
"position": 3,
|
||||||
|
"setHttpMethods": 1,
|
||||||
|
"getHttpMethods": 1,
|
||||||
|
"setHostname": 1,
|
||||||
|
"hostname": 2,
|
||||||
|
"getHostname": 1,
|
||||||
|
"convert": 1,
|
||||||
|
"converter": 2,
|
||||||
|
"getConverters": 1
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"language_tokens": {
|
"language_tokens": {
|
||||||
"ABAP": 1500,
|
"ABAP": 1500,
|
||||||
"Agda": 376,
|
"Agda": 376,
|
||||||
|
"Alloy": 1143,
|
||||||
"ApacheConf": 1449,
|
"ApacheConf": 1449,
|
||||||
"Apex": 4408,
|
"Apex": 4408,
|
||||||
"AppleScript": 1862,
|
"AppleScript": 1862,
|
||||||
@@ -54444,6 +54985,7 @@
|
|||||||
"Scilab": 69,
|
"Scilab": 69,
|
||||||
"SCSS": 39,
|
"SCSS": 39,
|
||||||
"Shell": 3744,
|
"Shell": 3744,
|
||||||
|
"ShellSession": 233,
|
||||||
"Shen": 3472,
|
"Shen": 3472,
|
||||||
"Slash": 187,
|
"Slash": 187,
|
||||||
"SourcePawn": 2080,
|
"SourcePawn": 2080,
|
||||||
@@ -54471,11 +55013,13 @@
|
|||||||
"XQuery": 801,
|
"XQuery": 801,
|
||||||
"XSLT": 44,
|
"XSLT": 44,
|
||||||
"Xtend": 399,
|
"Xtend": 399,
|
||||||
"YAML": 77
|
"YAML": 77,
|
||||||
|
"Zephir": 1026
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"ABAP": 1,
|
"ABAP": 1,
|
||||||
"Agda": 1,
|
"Agda": 1,
|
||||||
|
"Alloy": 3,
|
||||||
"ApacheConf": 3,
|
"ApacheConf": 3,
|
||||||
"Apex": 6,
|
"Apex": 6,
|
||||||
"AppleScript": 7,
|
"AppleScript": 7,
|
||||||
@@ -54603,6 +55147,7 @@
|
|||||||
"Scilab": 3,
|
"Scilab": 3,
|
||||||
"SCSS": 1,
|
"SCSS": 1,
|
||||||
"Shell": 37,
|
"Shell": 37,
|
||||||
|
"ShellSession": 3,
|
||||||
"Shen": 3,
|
"Shen": 3,
|
||||||
"Slash": 1,
|
"Slash": 1,
|
||||||
"SourcePawn": 1,
|
"SourcePawn": 1,
|
||||||
@@ -54630,7 +55175,8 @@
|
|||||||
"XQuery": 1,
|
"XQuery": 1,
|
||||||
"XSLT": 1,
|
"XSLT": 1,
|
||||||
"Xtend": 2,
|
"Xtend": 2,
|
||||||
"YAML": 2
|
"YAML": 2,
|
||||||
|
"Zephir": 2
|
||||||
},
|
},
|
||||||
"md5": "bea2304b61e5920c044b83aec7788dd8"
|
"md5": "37a50c87400d09dbc9cc99f1276d7e33"
|
||||||
}
|
}
|
||||||
53
samples/Zephir/Cblock.zep
Normal file
53
samples/Zephir/Cblock.zep
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
/**
|
||||||
|
* CBLOCK tests
|
||||||
|
* asfas
|
||||||
|
*/
|
||||||
|
|
||||||
|
%{
|
||||||
|
// top statement before namespace, add to after headers
|
||||||
|
#define MAX_FACTOR 40
|
||||||
|
}%
|
||||||
|
|
||||||
|
namespace Test;
|
||||||
|
|
||||||
|
%{
|
||||||
|
// top statement before class, add to after headers
|
||||||
|
// test include .h
|
||||||
|
#include "kernel/require.h"
|
||||||
|
}%
|
||||||
|
|
||||||
|
%{
|
||||||
|
|
||||||
|
// c implement fibonacci
|
||||||
|
static long fibonacci(long n) {
|
||||||
|
if (n < 2) return n;
|
||||||
|
else return fibonacci(n - 2) + fibonacci(n - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
}%
|
||||||
|
|
||||||
|
class Cblock
|
||||||
|
{
|
||||||
|
public function testCblock1()
|
||||||
|
{
|
||||||
|
int a = 0;
|
||||||
|
|
||||||
|
%{
|
||||||
|
a = MAX_FACTOR;
|
||||||
|
}%
|
||||||
|
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testCblock2()
|
||||||
|
{
|
||||||
|
long a = 0;
|
||||||
|
|
||||||
|
%{
|
||||||
|
a = fibonacci(MAX_FACTOR);
|
||||||
|
}%
|
||||||
|
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
557
samples/Zephir/Router.zep
Normal file
557
samples/Zephir/Router.zep
Normal file
@@ -0,0 +1,557 @@
|
|||||||
|
|
||||||
|
namespace Test\Router;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test\Router\Route
|
||||||
|
*
|
||||||
|
* This class represents every route added to the router
|
||||||
|
*/
|
||||||
|
class Route
|
||||||
|
{
|
||||||
|
protected _pattern;
|
||||||
|
|
||||||
|
protected _compiledPattern;
|
||||||
|
|
||||||
|
protected _paths;
|
||||||
|
|
||||||
|
protected _methods;
|
||||||
|
|
||||||
|
protected _hostname;
|
||||||
|
|
||||||
|
protected _converters;
|
||||||
|
|
||||||
|
protected _id;
|
||||||
|
|
||||||
|
protected _name;
|
||||||
|
|
||||||
|
protected _beforeMatch;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test\Router\Route constructor
|
||||||
|
*
|
||||||
|
* @param string pattern
|
||||||
|
* @param array paths
|
||||||
|
* @param array|string httpMethods
|
||||||
|
*/
|
||||||
|
public function __construct(pattern, paths=null, httpMethods=null)
|
||||||
|
{
|
||||||
|
// Configure the route (extract parameters, paths, etc)
|
||||||
|
this->reConfigure(pattern, paths);
|
||||||
|
|
||||||
|
// Update the HTTP method constraints
|
||||||
|
let this->_methods = httpMethods;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Replaces placeholders from pattern returning a valid PCRE regular expression
|
||||||
|
*
|
||||||
|
* @param string pattern
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function compilePattern(pattern)
|
||||||
|
{
|
||||||
|
var idPattern;
|
||||||
|
|
||||||
|
// If a pattern contains ':', maybe there are placeholders to replace
|
||||||
|
if memstr(pattern, ":") {
|
||||||
|
|
||||||
|
// This is a pattern for valid identifiers
|
||||||
|
let idPattern = "/([a-zA-Z0-9\\_\\-]+)";
|
||||||
|
|
||||||
|
// Replace the module part
|
||||||
|
if memstr(pattern, "/:module") {
|
||||||
|
let pattern = str_replace("/:module", idPattern, pattern);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Replace the controller placeholder
|
||||||
|
if memstr(pattern, "/:controller") {
|
||||||
|
let pattern = str_replace("/:controller", idPattern, pattern);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Replace the namespace placeholder
|
||||||
|
if memstr(pattern, "/:namespace") {
|
||||||
|
let pattern = str_replace("/:namespace", idPattern, pattern);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Replace the action placeholder
|
||||||
|
if memstr(pattern, "/:action") {
|
||||||
|
let pattern = str_replace("/:action", idPattern, pattern);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Replace the params placeholder
|
||||||
|
if memstr(pattern, "/:params") {
|
||||||
|
let pattern = str_replace("/:params", "(/.*)*", pattern);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Replace the int placeholder
|
||||||
|
if memstr(pattern, "/:int") {
|
||||||
|
let pattern = str_replace("/:int", "/([0-9]+)", pattern);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if the pattern has parantheses in order to add the regex delimiters
|
||||||
|
if memstr(pattern, "(") {
|
||||||
|
return "#^" . pattern . "$#";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Square brackets are also checked
|
||||||
|
if memstr(pattern, "[") {
|
||||||
|
return "#^" . pattern . "$#";
|
||||||
|
}
|
||||||
|
|
||||||
|
return pattern;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set one or more HTTP methods that constraint the matching of the route
|
||||||
|
*
|
||||||
|
*<code>
|
||||||
|
* $route->via('GET');
|
||||||
|
* $route->via(array('GET', 'POST'));
|
||||||
|
*</code>
|
||||||
|
*
|
||||||
|
* @param string|array httpMethods
|
||||||
|
* @return Test\Router\Route
|
||||||
|
*/
|
||||||
|
public function via(httpMethods)
|
||||||
|
{
|
||||||
|
let this->_methods = httpMethods;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extracts parameters from a string
|
||||||
|
*
|
||||||
|
* @param string pattern
|
||||||
|
*/
|
||||||
|
public function extractNamedParams(string pattern)
|
||||||
|
{
|
||||||
|
|
||||||
|
char ch;
|
||||||
|
var tmp, matches;
|
||||||
|
boolean notValid = false;
|
||||||
|
int cursor, cursorVar, marker, bracketCount = 0, parenthesesCount = 0, foundPattern = 0;
|
||||||
|
int intermediate = 0, numberMatches = 0;
|
||||||
|
string route, item, variable, regexp;
|
||||||
|
|
||||||
|
if strlen(pattern) <= 0 {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
let matches = [],
|
||||||
|
route = "";
|
||||||
|
|
||||||
|
for cursor, ch in pattern {
|
||||||
|
|
||||||
|
if parenthesesCount == 0 {
|
||||||
|
if ch == '{' {
|
||||||
|
if bracketCount == 0 {
|
||||||
|
let marker = cursor + 1,
|
||||||
|
intermediate = 0,
|
||||||
|
notValid = false;
|
||||||
|
}
|
||||||
|
let bracketCount++;
|
||||||
|
} else {
|
||||||
|
if ch == '}' {
|
||||||
|
let bracketCount--;
|
||||||
|
if intermediate > 0 {
|
||||||
|
if bracketCount == 0 {
|
||||||
|
|
||||||
|
let numberMatches++,
|
||||||
|
variable = null,
|
||||||
|
regexp = null,
|
||||||
|
item = (string) substr(pattern, marker, cursor - marker);
|
||||||
|
|
||||||
|
for cursorVar, ch in item {
|
||||||
|
|
||||||
|
if ch == '\0' {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if cursorVar == 0 && !((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {
|
||||||
|
let notValid = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <='9') || ch == '-' || ch == '_' || ch == ':' {
|
||||||
|
if ch == ':' {
|
||||||
|
let variable = (string) substr(item, 0, cursorVar),
|
||||||
|
regexp = (string) substr(item, cursorVar + 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
let notValid = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if !notValid {
|
||||||
|
|
||||||
|
let tmp = numberMatches;
|
||||||
|
|
||||||
|
if variable && regexp {
|
||||||
|
|
||||||
|
let foundPattern = 0;
|
||||||
|
for ch in regexp {
|
||||||
|
if ch == '\0' {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if !foundPattern {
|
||||||
|
if ch == '(' {
|
||||||
|
let foundPattern = 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if ch == ')' {
|
||||||
|
let foundPattern = 2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if foundPattern != 2 {
|
||||||
|
let route .= '(',
|
||||||
|
route .= regexp,
|
||||||
|
route .= ')';
|
||||||
|
} else {
|
||||||
|
let route .= regexp;
|
||||||
|
}
|
||||||
|
let matches[variable] = tmp;
|
||||||
|
} else {
|
||||||
|
let route .= "([^/]*)",
|
||||||
|
matches[item] = tmp;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
let route .= "{" . item ."}";
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if bracketCount == 0 {
|
||||||
|
if ch == '(' {
|
||||||
|
let parenthesesCount++;
|
||||||
|
} else {
|
||||||
|
if ch == ')' {
|
||||||
|
let parenthesesCount--;
|
||||||
|
if parenthesesCount == 0 {
|
||||||
|
let numberMatches++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if bracketCount > 0 {
|
||||||
|
let intermediate++;
|
||||||
|
} else {
|
||||||
|
let route .= ch;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return [route, matches];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reconfigure the route adding a new pattern and a set of paths
|
||||||
|
*
|
||||||
|
* @param string pattern
|
||||||
|
* @param array paths
|
||||||
|
*/
|
||||||
|
public function reConfigure(pattern, paths=null)
|
||||||
|
{
|
||||||
|
var moduleName, controllerName, actionName,
|
||||||
|
parts, routePaths, realClassName, namespaceName,
|
||||||
|
pcrePattern, compiledPattern, extracted;
|
||||||
|
|
||||||
|
if typeof pattern != "string" {
|
||||||
|
throw new Exception("The pattern must be string");
|
||||||
|
}
|
||||||
|
|
||||||
|
if paths !== null {
|
||||||
|
if typeof paths == "string" {
|
||||||
|
|
||||||
|
let moduleName = null,
|
||||||
|
controllerName = null,
|
||||||
|
actionName = null;
|
||||||
|
|
||||||
|
// Explode the short paths using the :: separator
|
||||||
|
let parts = explode("::", paths);
|
||||||
|
|
||||||
|
// Create the array paths dynamically
|
||||||
|
switch count(parts) {
|
||||||
|
case 3:
|
||||||
|
let moduleName = parts[0],
|
||||||
|
controllerName = parts[1],
|
||||||
|
actionName = parts[2];
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
let controllerName = parts[0],
|
||||||
|
actionName = parts[1];
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
let controllerName = parts[0];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
let routePaths = [];
|
||||||
|
|
||||||
|
// Process module name
|
||||||
|
if moduleName !== null {
|
||||||
|
let routePaths["module"] = moduleName;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Process controller name
|
||||||
|
if controllerName !== null {
|
||||||
|
|
||||||
|
// Check if we need to obtain the namespace
|
||||||
|
if memstr(controllerName, "\\") {
|
||||||
|
|
||||||
|
// Extract the real class name from the namespaced class
|
||||||
|
let realClassName = get_class_ns(controllerName);
|
||||||
|
|
||||||
|
// Extract the namespace from the namespaced class
|
||||||
|
let namespaceName = get_ns_class(controllerName);
|
||||||
|
|
||||||
|
// Update the namespace
|
||||||
|
if namespaceName {
|
||||||
|
let routePaths["namespace"] = namespaceName;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
let realClassName = controllerName;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Always pass the controller to lowercase
|
||||||
|
let routePaths["controller"] = uncamelize(realClassName);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Process action name
|
||||||
|
if actionName !== null {
|
||||||
|
let routePaths["action"] = actionName;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
let routePaths = paths;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
let routePaths = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
if typeof routePaths !== "array" {
|
||||||
|
throw new Exception("The route contains invalid paths");
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the route starts with '#' we assume that it is a regular expression
|
||||||
|
if !starts_with(pattern, "#") {
|
||||||
|
|
||||||
|
if memstr(pattern, "{") {
|
||||||
|
// The route has named parameters so we need to extract them
|
||||||
|
let extracted = this->extractNamedParams(pattern),
|
||||||
|
pcrePattern = extracted[0],
|
||||||
|
routePaths = array_merge(routePaths, extracted[1]);
|
||||||
|
} else {
|
||||||
|
let pcrePattern = pattern;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Transform the route's pattern to a regular expression
|
||||||
|
let compiledPattern = this->compilePattern(pcrePattern);
|
||||||
|
} else {
|
||||||
|
let compiledPattern = pattern;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update the original pattern
|
||||||
|
let this->_pattern = pattern;
|
||||||
|
|
||||||
|
// Update the compiled pattern
|
||||||
|
let this->_compiledPattern = compiledPattern;
|
||||||
|
|
||||||
|
//Update the route's paths
|
||||||
|
let this->_paths = routePaths;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the route's name
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getName()
|
||||||
|
{
|
||||||
|
return this->_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the route's name
|
||||||
|
*
|
||||||
|
*<code>
|
||||||
|
* $router->add('/about', array(
|
||||||
|
* 'controller' => 'about'
|
||||||
|
* ))->setName('about');
|
||||||
|
*</code>
|
||||||
|
*
|
||||||
|
* @param string name
|
||||||
|
* @return Route
|
||||||
|
*/
|
||||||
|
public function setName(name)
|
||||||
|
{
|
||||||
|
let this->_name = name;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a callback that is called if the route is matched.
|
||||||
|
* The developer can implement any arbitrary conditions here
|
||||||
|
* If the callback returns false the route is treaded as not matched
|
||||||
|
*
|
||||||
|
* @param callback callback
|
||||||
|
* @return Test\Router\Route
|
||||||
|
*/
|
||||||
|
public function beforeMatch(callback)
|
||||||
|
{
|
||||||
|
let this->_beforeMatch = callback;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the 'before match' callback if any
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getBeforeMatch()
|
||||||
|
{
|
||||||
|
return this->_beforeMatch;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the route's id
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getRouteId()
|
||||||
|
{
|
||||||
|
return this->_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the route's pattern
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getPattern()
|
||||||
|
{
|
||||||
|
return this->_pattern;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the route's compiled pattern
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getCompiledPattern()
|
||||||
|
{
|
||||||
|
return this->_compiledPattern;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the paths
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getPaths()
|
||||||
|
{
|
||||||
|
return this->_paths;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the paths using positions as keys and names as values
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getReversedPaths()
|
||||||
|
{
|
||||||
|
var reversed, path, position;
|
||||||
|
|
||||||
|
let reversed = [];
|
||||||
|
for path, position in this->_paths {
|
||||||
|
let reversed[position] = path;
|
||||||
|
}
|
||||||
|
return reversed;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a set of HTTP methods that constraint the matching of the route (alias of via)
|
||||||
|
*
|
||||||
|
*<code>
|
||||||
|
* $route->setHttpMethods('GET');
|
||||||
|
* $route->setHttpMethods(array('GET', 'POST'));
|
||||||
|
*</code>
|
||||||
|
*
|
||||||
|
* @param string|array httpMethods
|
||||||
|
* @return Test\Router\Route
|
||||||
|
*/
|
||||||
|
public function setHttpMethods(httpMethods)
|
||||||
|
{
|
||||||
|
let this->_methods = httpMethods;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the HTTP methods that constraint matching the route
|
||||||
|
*
|
||||||
|
* @return string|array
|
||||||
|
*/
|
||||||
|
public function getHttpMethods()
|
||||||
|
{
|
||||||
|
return this->_methods;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a hostname restriction to the route
|
||||||
|
*
|
||||||
|
*<code>
|
||||||
|
* $route->setHostname('localhost');
|
||||||
|
*</code>
|
||||||
|
*
|
||||||
|
* @param string|array httpMethods
|
||||||
|
* @return Test\Router\Route
|
||||||
|
*/
|
||||||
|
public function setHostname(hostname)
|
||||||
|
{
|
||||||
|
let this->_hostname = hostname;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the hostname restriction if any
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getHostname()
|
||||||
|
{
|
||||||
|
return this->_hostname;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a converter to perform an additional transformation for certain parameter
|
||||||
|
*
|
||||||
|
* @param string name
|
||||||
|
* @param callable converter
|
||||||
|
* @return Test\Router\Route
|
||||||
|
*/
|
||||||
|
public function convert(name, converter)
|
||||||
|
{
|
||||||
|
let this->_converters[name] = converter;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the router converter
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getConverters()
|
||||||
|
{
|
||||||
|
return this->_converters;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user