mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Merge branch 'master' into dont-explode-on-invalid-shebang
Conflicts: lib/linguist/samples.json test/test_tokenizer.rb
This commit is contained in:
		| @@ -63,6 +63,16 @@ Ada: | ||||
|   - .adb | ||||
|   - .ads | ||||
|  | ||||
| ApacheConf: | ||||
|   type: markup | ||||
|   aliases: | ||||
|   - apache | ||||
|   primary_extension: .conf | ||||
|   filenames: | ||||
|   - .htaccess | ||||
|   - httpd.conf | ||||
|   - apache2.conf | ||||
|  | ||||
| Apex: | ||||
|   type: programming | ||||
|   lexer: Text only | ||||
| @@ -180,8 +190,10 @@ C++: | ||||
|   - cpp | ||||
|   primary_extension: .cpp | ||||
|   extensions: | ||||
|   - .C | ||||
|   - .c++ | ||||
|   - .cxx | ||||
|   - .H | ||||
|   - .h++ | ||||
|   - .hh | ||||
|   - .hxx | ||||
| @@ -244,6 +256,7 @@ CoffeeScript: | ||||
|   color: "#244776" | ||||
|   aliases: | ||||
|   - coffee | ||||
|   - coffee-script | ||||
|   primary_extension: .coffee | ||||
|   extensions: | ||||
|   - ._coffee | ||||
| @@ -392,6 +405,12 @@ Elixir: | ||||
|   - .ex | ||||
|   - .exs | ||||
|  | ||||
| Elm: | ||||
|   type: programming | ||||
|   lexer: Haskell | ||||
|   group: Haskell | ||||
|   primary_extension: .elm | ||||
|  | ||||
| Emacs Lisp: | ||||
|   type: programming | ||||
|   lexer: Scheme | ||||
| @@ -545,6 +564,8 @@ Groovy Server Pages: | ||||
| HTML: | ||||
|   type: markup | ||||
|   ace_mode: html | ||||
|   aliases: | ||||
|   - xhtml | ||||
|   primary_extension: .html | ||||
|   extensions: | ||||
|   - .htm | ||||
| @@ -563,6 +584,8 @@ HTML+ERB: | ||||
|   type: markup | ||||
|   group: HTML | ||||
|   lexer: RHTML | ||||
|   aliases: | ||||
|   - erb | ||||
|   primary_extension: .erb | ||||
|   extensions: | ||||
|   - .erb | ||||
| @@ -575,16 +598,9 @@ HTML+PHP: | ||||
|   extensions: | ||||
|   - .phtml | ||||
|  | ||||
| HaXe: | ||||
|   type: programming | ||||
|   lexer: haXe | ||||
|   ace_mode: haxe | ||||
|   color: "#346d51" | ||||
|   primary_extension: .hx | ||||
|   extensions: | ||||
|   - .hx | ||||
|   - .hxml | ||||
|   - .mtt | ||||
| HTTP: | ||||
|   type: data | ||||
|   primary_extension: .http | ||||
|  | ||||
| Haml: | ||||
|   group: HTML | ||||
| @@ -599,6 +615,15 @@ Haskell: | ||||
|   - .hs | ||||
|   - .hsc | ||||
|  | ||||
| Haxe: | ||||
|   type: programming | ||||
|   lexer: haXe | ||||
|   ace_mode: haxe | ||||
|   color: "#346d51" | ||||
|   primary_extension: .hx | ||||
|   extensions: | ||||
|   - .hxsl | ||||
|  | ||||
| INI: | ||||
|   type: data | ||||
|   extensions: | ||||
| @@ -723,6 +748,8 @@ Lua: | ||||
|   - .nse | ||||
|  | ||||
| Makefile: | ||||
|   aliases: | ||||
|   - make | ||||
|   extensions: | ||||
|   - .mak | ||||
|   - .mk | ||||
| @@ -798,6 +825,13 @@ Nemerle: | ||||
|   color: "#0d3c6e" | ||||
|   primary_extension: .n | ||||
|  | ||||
| Nginx: | ||||
|   type: markup | ||||
|   lexer: Nginx configuration file | ||||
|   primary_extension: .conf | ||||
|   filenames: | ||||
|   - nginx.conf | ||||
|  | ||||
| Nimrod: | ||||
|   type: programming | ||||
|   color: "#37775b" | ||||
| @@ -843,6 +877,9 @@ ObjDump: | ||||
| Objective-C: | ||||
|   type: programming | ||||
|   color: "#438eff" | ||||
|   aliases: | ||||
|   - obj-c | ||||
|   - objc | ||||
|   primary_extension: .m | ||||
|   extensions: | ||||
|   - .mm | ||||
| @@ -850,6 +887,8 @@ Objective-C: | ||||
| Objective-J: | ||||
|   type: programming | ||||
|   color: "#ff0c5a" | ||||
|   aliases: | ||||
|   - obj-j | ||||
|   primary_extension: .j | ||||
|   extensions: | ||||
|   - .j | ||||
| @@ -1126,7 +1165,13 @@ Shell: | ||||
|   primary_extension: .sh | ||||
|   filenames: | ||||
|   - .zsh | ||||
|   - bash_logout | ||||
|   - bash_profile | ||||
|   - bashrc | ||||
|   - zlogin | ||||
|   - zlogout | ||||
|   - zshenv | ||||
|   - zprofile | ||||
|   - zshrc | ||||
|  | ||||
| Smalltalk: | ||||
| @@ -1172,6 +1217,8 @@ Tcsh: | ||||
| TeX: | ||||
|   type: markup | ||||
|   ace_mode: latex | ||||
|   aliases: | ||||
|   - latex | ||||
|   primary_extension: .tex | ||||
|   extensions: | ||||
|   - .aux | ||||
| @@ -1261,6 +1308,11 @@ Visual Basic: | ||||
| XML: | ||||
|   type: markup | ||||
|   ace_mode: xml | ||||
|   aliases: | ||||
|   - rss | ||||
|   - xsd | ||||
|   - xsl | ||||
|   - wsdl | ||||
|   primary_extension: .xml | ||||
|   extensions: | ||||
|   - .glade | ||||
| @@ -1306,6 +1358,8 @@ XSLT: | ||||
|  | ||||
| YAML: | ||||
|   type: markup | ||||
|   aliases: | ||||
|   - yml | ||||
|   primary_extension: .yml | ||||
|   extensions: | ||||
|   - .yaml | ||||
|   | ||||
| @@ -44,6 +44,9 @@ | ||||
|     "Ecl": [ | ||||
|       ".ecl" | ||||
|     ], | ||||
|     "Elm": [ | ||||
|       ".elm" | ||||
|     ], | ||||
|     "Emacs Lisp": [ | ||||
|       ".el" | ||||
|     ], | ||||
| @@ -140,7 +143,8 @@ | ||||
|     ], | ||||
|     "PHP": [ | ||||
|       ".module", | ||||
|       ".php" | ||||
|       ".php", | ||||
|       ".script!" | ||||
|     ], | ||||
|     "PowerShell": [ | ||||
|       ".ps1", | ||||
| @@ -260,8 +264,8 @@ | ||||
|       ".gemrc" | ||||
|     ] | ||||
|   }, | ||||
|   "tokens_total": 271188, | ||||
|   "languages_total": 276, | ||||
|   "tokens_total": 271826, | ||||
|   "languages_total": 281, | ||||
|   "tokens": { | ||||
|     "Apex": { | ||||
|       "global": 70, | ||||
| @@ -9238,6 +9242,123 @@ | ||||
|       "a": 1, | ||||
|       "self": 1 | ||||
|     }, | ||||
|     "Elm": { | ||||
|       "import": 3, | ||||
|       "List": 1, | ||||
|       "(": 119, | ||||
|       "intercalate": 2, | ||||
|       "intersperse": 3, | ||||
|       ")": 116, | ||||
|       "Website.Skeleton": 1, | ||||
|       "Website.ColorScheme": 1, | ||||
|       "addFolder": 4, | ||||
|       "folder": 2, | ||||
|       "lst": 6, | ||||
|       "let": 2, | ||||
|       "add": 2, | ||||
|       "x": 13, | ||||
|       "y": 7, | ||||
|       "+": 14, | ||||
|       "in": 2, | ||||
|       "f": 8, | ||||
|       "n": 2, | ||||
|       "xs": 9, | ||||
|       "map": 11, | ||||
|       "elements": 2, | ||||
|       "[": 31, | ||||
|       "]": 31, | ||||
|       "functional": 2, | ||||
|       "reactive": 2, | ||||
|       "-": 11, | ||||
|       "example": 3, | ||||
|       "name": 6, | ||||
|       "loc": 2, | ||||
|       "Text.link": 1, | ||||
|       "toText": 6, | ||||
|       "toLinks": 2, | ||||
|       "title": 2, | ||||
|       "links": 2, | ||||
|       "flow": 4, | ||||
|       "right": 8, | ||||
|       "width": 3, | ||||
|       "text": 4, | ||||
|       "italic": 1, | ||||
|       "bold": 2, | ||||
|       ".": 9, | ||||
|       "Text.color": 1, | ||||
|       "accent4": 1, | ||||
|       "insertSpace": 2, | ||||
|       "case": 5, | ||||
|       "of": 7, | ||||
|       "{": 1, | ||||
|       "spacer": 2, | ||||
|       ";": 1, | ||||
|       "}": 1, | ||||
|       "subsection": 2, | ||||
|       "w": 7, | ||||
|       "info": 2, | ||||
|       "down": 3, | ||||
|       "words": 2, | ||||
|       "markdown": 1, | ||||
|       "|": 3, | ||||
|       "###": 1, | ||||
|       "Basic": 1, | ||||
|       "Examples": 1, | ||||
|       "Each": 1, | ||||
|       "listed": 1, | ||||
|       "below": 1, | ||||
|       "focuses": 1, | ||||
|       "on": 1, | ||||
|       "a": 5, | ||||
|       "single": 1, | ||||
|       "function": 1, | ||||
|       "or": 1, | ||||
|       "concept.": 1, | ||||
|       "These": 1, | ||||
|       "examples": 1, | ||||
|       "demonstrate": 1, | ||||
|       "all": 1, | ||||
|       "the": 1, | ||||
|       "basic": 1, | ||||
|       "building": 1, | ||||
|       "blocks": 1, | ||||
|       "Elm.": 1, | ||||
|       "content": 2, | ||||
|       "exampleSets": 2, | ||||
|       "plainText": 1, | ||||
|       "main": 3, | ||||
|       "lift": 1, | ||||
|       "skeleton": 1, | ||||
|       "Window.width": 1, | ||||
|       "asText": 1, | ||||
|       "qsort": 4, | ||||
|       "filter": 2, | ||||
|       "<)x)>": 1, | ||||
|       "data": 1, | ||||
|       "Tree": 3, | ||||
|       "Node": 8, | ||||
|       "Empty": 8, | ||||
|       "empty": 2, | ||||
|       "singleton": 2, | ||||
|       "v": 8, | ||||
|       "insert": 4, | ||||
|       "tree": 7, | ||||
|       "left": 7, | ||||
|       "if": 2, | ||||
|       "then": 2, | ||||
|       "else": 2, | ||||
|       "<": 1, | ||||
|       "fromList": 3, | ||||
|       "foldl": 1, | ||||
|       "depth": 5, | ||||
|       "max": 1, | ||||
|       "t1": 2, | ||||
|       "t2": 3, | ||||
|       "display": 4, | ||||
|       "monospace": 1, | ||||
|       "concat": 1, | ||||
|       "show": 2 | ||||
|     }, | ||||
|     "Emacs Lisp": { | ||||
|       "(": 1, | ||||
|       "print": 1, | ||||
| @@ -21629,13 +21750,13 @@ | ||||
|       "AUTHOR": 1 | ||||
|     }, | ||||
|     "PHP": { | ||||
|       "<": 9, | ||||
|       "php": 6, | ||||
|       "<": 11, | ||||
|       "php": 8, | ||||
|       "namespace": 28, | ||||
|       "Symfony": 24, | ||||
|       "Component": 24, | ||||
|       "Console": 17, | ||||
|       ";": 1380, | ||||
|       ";": 1382, | ||||
|       "use": 23, | ||||
|       "Input": 6, | ||||
|       "InputInterface": 4, | ||||
| @@ -22647,7 +22768,9 @@ | ||||
|       "nest": 1, | ||||
|       "isUnique": 1, | ||||
|       "is_bool": 1, | ||||
|       "sql": 1 | ||||
|       "sql": 1, | ||||
|       "SHEBANG#!php": 2, | ||||
|       "echo": 2 | ||||
|     }, | ||||
|     "PowerShell": { | ||||
|       "Write": 2, | ||||
| @@ -27753,6 +27876,7 @@ | ||||
|     "Delphi": 30, | ||||
|     "Diff": 16, | ||||
|     "Ecl": 281, | ||||
|     "Elm": 628, | ||||
|     "Emacs Lisp": 3, | ||||
|     "GAS": 133, | ||||
|     "Gosu": 413, | ||||
| @@ -27781,7 +27905,7 @@ | ||||
|     "Parrot Assembly": 6, | ||||
|     "Parrot Internal Representation": 5, | ||||
|     "Perl": 17113, | ||||
|     "PHP": 20637, | ||||
|     "PHP": 20647, | ||||
|     "PowerShell": 12, | ||||
|     "Prolog": 4040, | ||||
|     "Python": 4020, | ||||
| @@ -27824,6 +27948,7 @@ | ||||
|     "Delphi": 1, | ||||
|     "Diff": 1, | ||||
|     "Ecl": 1, | ||||
|     "Elm": 3, | ||||
|     "Emacs Lisp": 1, | ||||
|     "GAS": 1, | ||||
|     "Gosu": 5, | ||||
| @@ -27852,7 +27977,7 @@ | ||||
|     "Parrot Assembly": 1, | ||||
|     "Parrot Internal Representation": 1, | ||||
|     "Perl": 13, | ||||
|     "PHP": 6, | ||||
|     "PHP": 8, | ||||
|     "PowerShell": 2, | ||||
|     "Prolog": 6, | ||||
|     "Python": 4, | ||||
| @@ -27881,5 +28006,5 @@ | ||||
|     "XSLT": 1, | ||||
|     "YAML": 1 | ||||
|   }, | ||||
|   "md5": "384f02c0bd223479bf750d4cd36daf71" | ||||
|   "md5": "ef9b9c6f8312a9f029edf9b7df6e9751" | ||||
| } | ||||
							
								
								
									
										127
									
								
								samples/Elm/Basic.elm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										127
									
								
								samples/Elm/Basic.elm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,127 @@ | ||||
|  | ||||
| import List (intercalate,intersperse) | ||||
| import Website.Skeleton | ||||
| import Website.ColorScheme | ||||
|  | ||||
| addFolder folder lst = | ||||
|   let add (x,y) = (x, folder ++ y ++ ".elm") in | ||||
|   let f (n,xs) = (n, map add xs) in | ||||
|   map f lst | ||||
|  | ||||
| elements = addFolder "Elements/" | ||||
|   [ ("Primitives", | ||||
|         [ ("Text"  , "HelloWorld") | ||||
|         , ("Images", "Image") | ||||
|         , ("Fitted Images", "FittedImage") | ||||
|         , ("Videos", "Video") | ||||
|         , ("Markdown", "Markdown") | ||||
|         ]) | ||||
|   , ("Formatting", | ||||
|         [ ("Size"    , "Size") | ||||
|         , ("Opacity" , "Opacity") | ||||
|         , ("Text"    , "Text") | ||||
|         , ("Typeface", "Typeface") | ||||
|         ]) | ||||
|   , ("Layout", | ||||
|         [ ("Simple Flow", "FlowDown1a") | ||||
|         , ("Flow Down"  , "FlowDown2") | ||||
|         , ("Layers"     , "Layers") | ||||
|         , ("Positioning", "Position") | ||||
|         , ("Spacers"    , "Spacer") | ||||
|         ]) | ||||
|   , ("Collage", [ ("Lines"     , "Lines") | ||||
|                 , ("Shapes"    , "Shapes") | ||||
|                 , ("Sprites"   , "Sprite") | ||||
|                 , ("Elements"  , "ToForm") | ||||
|                 , ("Colors"    , "Color") | ||||
|                 , ("Textures"  , "Texture") | ||||
|                 , ("Transforms", "Transforms") | ||||
|                 ]) | ||||
|   ] | ||||
|  | ||||
|  | ||||
| functional = addFolder "Functional/" | ||||
|   [ ("Recursion", | ||||
|         [ ("Factorial"  , "Factorial") | ||||
|         , ("List Length", "Length") | ||||
|         , ("Zip"        , "Zip") | ||||
|         , ("Quick Sort" , "QuickSort") | ||||
|         ]) | ||||
|   , ("Functions", | ||||
|         [ ("Anonymous Functions", "Anonymous") | ||||
|         , ("Application"        , "Application") | ||||
|         , ("Composition"        , "Composition") | ||||
|         , ("Infix Operators"    , "Infix") | ||||
|         ]) | ||||
|   , ("Higher-Order", | ||||
|         [ ("Map"    , "Map") | ||||
|         , ("Fold"   , "Sum") | ||||
|         , ("Filter" , "Filter") | ||||
|         , ("ZipWith", "ZipWith") | ||||
|         ]) | ||||
|   , ("Data Types", | ||||
|         [ ("Maybe", "Maybe") | ||||
|         , ("Boolean Expressions", "BooleanExpressions") | ||||
|         , ("Tree", "Tree") | ||||
|         ]) | ||||
|   ] | ||||
|  | ||||
| reactive = addFolder "Reactive/" | ||||
|   [ ("Mouse",  [ ("Position", "Position") | ||||
|                , ("Presses"    , "IsDown") | ||||
|                , ("Clicks"    , "CountClicks") | ||||
|                , ("Position+Image", "ResizeYogi") | ||||
|                , ("Position+Collage"    , "Transforms") | ||||
|                -- , ("Hover"     , "IsAbove") | ||||
|                ]) | ||||
|   ,("Keyboard",[ ("Keys Down"  , "KeysDown") | ||||
|                , ("Key Presses", "CharPressed") | ||||
|                ]) | ||||
|   , ("Window", [ ("Size", "ResizePaint") | ||||
|                , ("Centering", "Centering") | ||||
|                ]) | ||||
|   , ("Time",   [ ("Before and After", "Between") | ||||
|                , ("Every"           , "Every") | ||||
|                , ("Clock"           , "Clock") | ||||
|                ]) | ||||
|   , ("Input",  [ ("Text Fields", "TextField") | ||||
|                , ("Passwords"  , "Password") | ||||
|                , ("Check Boxes", "CheckBox") | ||||
|                , ("String Drop Down", "StringDropDown") | ||||
|                , ("Drop Down", "DropDown") | ||||
|                ]) | ||||
|   , ("Random", [ ("Randomize", "Randomize") ]) | ||||
|   , ("HTTP",   [ ("Zip Codes", "ZipCodes") ]) | ||||
|   , ("Filters",[ ("Sample", "SampleOn") | ||||
|                , ("Keep If", "KeepIf") | ||||
|                , ("Drop Repeats", "DropRepeats") | ||||
|                ]) | ||||
|   ] | ||||
|  | ||||
| example (name, loc) = Text.link ("/edit/examples/" ++ loc) (toText name) | ||||
| toLinks (title, links) = | ||||
|   flow right [ width 130 (text $ toText "   " ++ italic (toText title)) | ||||
|              , text (intercalate (bold . Text.color accent4 $ toText "  ·  ") $ map example links) | ||||
|              ] | ||||
|  | ||||
| insertSpace lst = case lst of { x:xs -> x : spacer 1 5 : xs ; [] -> [] } | ||||
|  | ||||
| subsection w (name,info) = | ||||
|   flow down . insertSpace . intersperse (spacer 1 1) . map (width w) $ | ||||
|     (text . bold $ toText name) : map toLinks info | ||||
|  | ||||
| words = [markdown| | ||||
|  | ||||
| ### Basic Examples | ||||
|  | ||||
| Each example listed below focuses on a single function or concept. | ||||
| These examples demonstrate all of the basic building blocks of Elm. | ||||
|  | ||||
| |] | ||||
|  | ||||
| content w = | ||||
|   words : map (subsection w) [ ("Display",elements), ("React",reactive), ("Compute",functional) ] | ||||
|  | ||||
| exampleSets w = flow down . map (width w) . intersperse (plainText " ") $ content w | ||||
|  | ||||
| main = lift (skeleton exampleSets) Window.width | ||||
							
								
								
									
										32
									
								
								samples/Elm/QuickSort.elm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								samples/Elm/QuickSort.elm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
|  | ||||
| main = asText (qsort [3,9,1,8,5,4,7]) | ||||
|  | ||||
| qsort lst = | ||||
|   case lst of | ||||
|     x:xs -> qsort (filter ((>=)x) xs) ++ [x] ++ qsort (filter ((<)x) xs) | ||||
|     [] -> [] | ||||
|  | ||||
|  | ||||
| {--------------------- | ||||
|  | ||||
| QuickSort works as follows: | ||||
|  - Choose a pivot element which be placed in the "middle" of the sorted list. | ||||
|    In our case we are choosing the first element as the pivot. | ||||
|  - Gather all of the elements less than the pivot (the first filter). | ||||
|    We know that these must come before our pivot element in the sorted list. | ||||
|    Note: ((>=)x) === (\y -> (>=) x y) === (\y -> x >= y) | ||||
|  - Gather all of the elements greater than the pivot (the second filter). | ||||
|    We know that these must come after our pivot element in the sorted list. | ||||
|  - Run `qsort` on the lesser elements, producing a sorted list that contains | ||||
|    only elements less than the pivot. Put these before the pivot. | ||||
|  - Run `qsort` on the greater elements, producing a sorted list. Put these | ||||
|    after the pivot. | ||||
|  | ||||
| Note that choosing a bad pivot can have bad effects. Take a sorted list with | ||||
| N elements. The pivot will always be the lowest member, meaning that it does | ||||
| not divide the list very evenly. The list of lessers has 0 elements | ||||
| and the list of greaters has N-1 elemens. This means qsort will be called | ||||
| N times, each call looking through the entire list. This means, in the worst | ||||
| case, QuickSort will make N^2 comparisons. | ||||
|  | ||||
| ----------------------} | ||||
							
								
								
									
										91
									
								
								samples/Elm/Tree.elm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								samples/Elm/Tree.elm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,91 @@ | ||||
|  | ||||
| {----------------------------------------------------------------- | ||||
|  | ||||
| Overview: A "Tree" represents a binary tree. A "Node" in a binary | ||||
| tree always has two children. A tree can also be "Empty". Below | ||||
| I have defined "Tree" and a number of useful functions. | ||||
|  | ||||
| This example also includes some challenge problems :) | ||||
|  | ||||
| -----------------------------------------------------------------} | ||||
|  | ||||
|  | ||||
| data Tree a = Node a (Tree a) (Tree a) | Empty | ||||
|  | ||||
| empty = Empty | ||||
| singleton v = Node v Empty Empty | ||||
|  | ||||
| insert x tree = | ||||
|   case tree of | ||||
|     Empty -> singleton x | ||||
|     Node y left right -> | ||||
|       if x == y then tree else | ||||
|       if x <  y then Node y (insert x left) right | ||||
|                 else Node y left (insert x right) | ||||
|  | ||||
| fromList xs = foldl insert empty xs | ||||
|  | ||||
| depth tree = | ||||
|   case tree of | ||||
|     Node v left right -> 1 + max (depth left) (depth right) | ||||
|     Empty -> 0 | ||||
|  | ||||
| map f tree = | ||||
|   case tree of | ||||
|     Node v left right -> Node (f v) (map f left) (map f right) | ||||
|     Empty -> Empty | ||||
|  | ||||
| t1 = fromList [1,2,3] | ||||
| t2 = fromList [2,1,3] | ||||
|  | ||||
| main = flow down [ display "depth" depth t1 | ||||
|                  , display "depth" depth t2 | ||||
|                  , display "map ((+)1)" (map ((+)1)) t2 | ||||
|                  ] | ||||
|  | ||||
| display name f v = | ||||
|   text . monospace . toText $ | ||||
|   concat [ show (f v), " ⇐ ", name, " ", show v ] | ||||
|  | ||||
| {----------------------------------------------------------------- | ||||
|  | ||||
| Exercises: | ||||
|  | ||||
| (1) Sum all of the elements of a tree. | ||||
|  | ||||
|        sum :: Tree Number -> Number | ||||
|  | ||||
| (2) Flatten a tree into a list. | ||||
|  | ||||
|        flatten :: Tree a -> [a] | ||||
|  | ||||
| (3) Check to see if an element is in a given tree. | ||||
|  | ||||
|        isElement :: a -> Tree a -> Bool  | ||||
|  | ||||
| (4) Write a general fold function that acts on trees. The fold | ||||
|     function does not need to guarantee a particular order of | ||||
|     traversal. | ||||
|  | ||||
|        fold :: (a -> b -> b) -> b -> Tree a -> b | ||||
|  | ||||
| (5) Use "fold" to do exercises 1-3 in one line each. The best | ||||
|     readable versions I have come up have the following length | ||||
|     in characters including spaces and function name: | ||||
|       sum: 16 | ||||
|       flatten: 21 | ||||
|       isElement: 46 | ||||
|     See if you can match or beat me! Don't forget about currying | ||||
|     and partial application! | ||||
|  | ||||
| (6) Can "fold" be used to implement "map" or "depth"? | ||||
|  | ||||
| (7) Try experimenting with different ways to traverse a | ||||
|     tree: pre-order, in-order, post-order, depth-first, etc. | ||||
|     More info at: http://en.wikipedia.org/wiki/Tree_traversal | ||||
|  | ||||
| -----------------------------------------------------------------} | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
							
								
								
									
										4
									
								
								samples/PHP/php-script.script!
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								samples/PHP/php-script.script!
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| #!/usr/bin/php | ||||
| <?php | ||||
|  | ||||
| echo "PHP\n"; | ||||
							
								
								
									
										4
									
								
								samples/PHP/php.script!
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								samples/PHP/php.script!
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| #!/usr/bin/env php | ||||
| <?php | ||||
|  | ||||
| echo "PHP\n"; | ||||
| @@ -26,6 +26,7 @@ class TestLanguage < Test::Unit::TestCase | ||||
|     assert_equal Lexer['HTML'], Language['HTML'].lexer | ||||
|     assert_equal Lexer['HTML+Django/Jinja'], Language['HTML+Django'].lexer | ||||
|     assert_equal Lexer['HTML+PHP'], Language['HTML+PHP'].lexer | ||||
|     assert_equal Lexer['HTTP'], Language['HTTP'].lexer | ||||
|     assert_equal Lexer['JSON'], Language['JSON'].lexer | ||||
|     assert_equal Lexer['Java'], Language['ChucK'].lexer | ||||
|     assert_equal Lexer['Java'], Language['Java'].lexer | ||||
| @@ -51,7 +52,7 @@ class TestLanguage < Test::Unit::TestCase | ||||
|     assert_equal Lexer['Verilog'], Language['Verilog'].lexer | ||||
|     assert_equal Lexer['XSLT'], Language['XSLT'].lexer | ||||
|     assert_equal Lexer['aspx-vb'], Language['ASP'].lexer | ||||
|     assert_equal Lexer['haXe'], Language['HaXe'].lexer | ||||
|     assert_equal Lexer['haXe'], Language['Haxe'].lexer | ||||
|     assert_equal Lexer['reStructuredText'], Language['reStructuredText'].lexer | ||||
|   end | ||||
|  | ||||
| @@ -60,6 +61,7 @@ class TestLanguage < Test::Unit::TestCase | ||||
|     assert_equal Language['ASP'], Language.find_by_alias('aspx') | ||||
|     assert_equal Language['ASP'], Language.find_by_alias('aspx-vb') | ||||
|     assert_equal Language['ActionScript'], Language.find_by_alias('as3') | ||||
|     assert_equal Language['ApacheConf'], Language.find_by_alias('apache') | ||||
|     assert_equal Language['Assembly'], Language.find_by_alias('nasm') | ||||
|     assert_equal Language['Batchfile'], Language.find_by_alias('bat') | ||||
|     assert_equal Language['C#'], Language.find_by_alias('c#') | ||||
| @@ -68,6 +70,7 @@ class TestLanguage < Test::Unit::TestCase | ||||
|     assert_equal Language['C++'], Language.find_by_alias('c++') | ||||
|     assert_equal Language['C++'], Language.find_by_alias('cpp') | ||||
|     assert_equal Language['CoffeeScript'], Language.find_by_alias('coffee') | ||||
|     assert_equal Language['CoffeeScript'], Language.find_by_alias('coffee-script') | ||||
|     assert_equal Language['ColdFusion'], Language.find_by_alias('cfm') | ||||
|     assert_equal Language['Common Lisp'], Language.find_by_alias('common-lisp') | ||||
|     assert_equal Language['Common Lisp'], Language.find_by_alias('lisp') | ||||
| @@ -78,7 +81,9 @@ class TestLanguage < Test::Unit::TestCase | ||||
|     assert_equal Language['Emacs Lisp'], Language.find_by_alias('emacs-lisp') | ||||
|     assert_equal Language['Gettext Catalog'], Language.find_by_alias('pot') | ||||
|     assert_equal Language['HTML'], Language.find_by_alias('html') | ||||
|     assert_equal Language['HTML'], Language.find_by_alias('xhtml') | ||||
|     assert_equal Language['HTML+ERB'], Language.find_by_alias('html+erb') | ||||
|     assert_equal Language['HTML+ERB'], Language.find_by_alias('erb') | ||||
|     assert_equal Language['IRC log'], Language.find_by_alias('irc') | ||||
|     assert_equal Language['JSON'], Language.find_by_alias('json') | ||||
|     assert_equal Language['Java Server Pages'], Language.find_by_alias('jsp') | ||||
| @@ -87,6 +92,7 @@ class TestLanguage < Test::Unit::TestCase | ||||
|     assert_equal Language['JavaScript'], Language.find_by_alias('js') | ||||
|     assert_equal Language['Literate Haskell'], Language.find_by_alias('lhs') | ||||
|     assert_equal Language['Literate Haskell'], Language.find_by_alias('literate-haskell') | ||||
|     assert_equal Language['Objective-C'], Language.find_by_alias('objc') | ||||
|     assert_equal Language['OpenEdge ABL'], Language.find_by_alias('openedge') | ||||
|     assert_equal Language['OpenEdge ABL'], Language.find_by_alias('progress') | ||||
|     assert_equal Language['OpenEdge ABL'], Language.find_by_alias('abl') | ||||
| @@ -106,6 +112,7 @@ class TestLanguage < Test::Unit::TestCase | ||||
|     assert_equal Language['VimL'], Language.find_by_alias('vim') | ||||
|     assert_equal Language['VimL'], Language.find_by_alias('viml') | ||||
|     assert_equal Language['reStructuredText'], Language.find_by_alias('rst') | ||||
|     assert_equal Language['YAML'], Language.find_by_alias('yml') | ||||
|   end | ||||
|  | ||||
|   def test_groups | ||||
| @@ -224,10 +231,16 @@ class TestLanguage < Test::Unit::TestCase | ||||
|     assert_equal [Language['Ruby']], Language.find_by_filename('foo/bar.rb') | ||||
|     assert_equal [Language['Ruby']], Language.find_by_filename('Rakefile') | ||||
|     assert_equal [Language['Ruby']], Language.find_by_filename('PKGBUILD.rb') | ||||
|     assert_equal Language['ApacheConf'], Language.find_by_filename('httpd.conf').first | ||||
|     assert_equal [Language['ApacheConf']], Language.find_by_filename('.htaccess') | ||||
|     assert_equal Language['Nginx'], Language.find_by_filename('nginx.conf').first | ||||
|     assert_equal ['C', 'C++', 'Objective-C'], Language.find_by_filename('foo.h').map(&:name).sort | ||||
|     assert_equal [], Language.find_by_filename('rb') | ||||
|     assert_equal [], Language.find_by_filename('.rb') | ||||
|     assert_equal [], Language.find_by_filename('.nkt') | ||||
|     assert_equal [Language['Shell']], Language.find_by_filename('.bashrc') | ||||
|     assert_equal [Language['Shell']], Language.find_by_filename('bash_profile') | ||||
|     assert_equal [Language['Shell']], Language.find_by_filename('.zshrc') | ||||
|   end | ||||
|  | ||||
|   def test_find | ||||
|   | ||||
| @@ -94,6 +94,7 @@ class TestTokenizer < Test::Unit::TestCase | ||||
|     assert_equal "SHEBANG#!ruby", tokenize(:"Ruby/ruby.script!")[0] | ||||
|     assert_equal "SHEBANG#!ruby", tokenize(:"Ruby/ruby2.script!")[0] | ||||
|     assert_equal "SHEBANG#!node", tokenize(:"JavaScript/js.script!")[0] | ||||
|     assert_equal "SHEBANG#!php", tokenize(:"PHP/php.script!")[0] | ||||
|     assert_equal "echo", tokenize(:"Shell/invalid-shebang.sh")[0] | ||||
|   end | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user