mirror of
				https://github.com/searxng/searxng
				synced 2024-01-01 19:24:07 +01:00 
			
		
		
		
	[enh] add result_templates/code.html
This commit is contained in:
		
							parent
							
								
									2e41bfcbdb
								
							
						
					
					
						commit
						7adb17452d
					
				
					 16 changed files with 352 additions and 1036 deletions
				
			
		|  | @ -3,4 +3,5 @@ flask-babel | |||
| requests | ||||
| lxml | ||||
| pyyaml | ||||
| pygments | ||||
| python-dateutil | ||||
|  |  | |||
|  | @ -21,6 +21,18 @@ paging = True | |||
| url = 'https://searchcode.com/' | ||||
| search_url = url+'api/codesearch_I/?{query}&p={pageno}' | ||||
| 
 | ||||
| code_endings = {'c': 'c', | ||||
|                 'css': 'css', | ||||
|                 'cpp': 'cpp', | ||||
|                 'c++': 'cpp', | ||||
|                 'h': 'c', | ||||
|                 'html': 'html', | ||||
|                 'hpp': 'cpp', | ||||
|                 'js': 'js', | ||||
|                 'lua': 'lua', | ||||
|                 'php': 'php', | ||||
|                 'py': 'python'} | ||||
| 
 | ||||
| 
 | ||||
| # do search-request | ||||
| def request(query, params): | ||||
|  | @ -40,26 +52,22 @@ def response(resp): | |||
|     for result in search_results['results']: | ||||
|         href = result['url'] | ||||
|         title = "" + result['name'] + " - " + result['filename'] | ||||
|         content = result['repo'] + "<br />" | ||||
|         repo = result['repo'] | ||||
|          | ||||
|         lines = dict() | ||||
|         for line, code in result['lines'].items(): | ||||
|             lines[int(line)] = code | ||||
| 
 | ||||
|         content = content + '<pre class="code-formatter"><table class="code">' | ||||
|         for line, code in sorted(lines.items()): | ||||
|             content = content + '<tr><td class="line-number" style="padding-right:5px;">'  | ||||
|             content = content + str(line) + '</td><td class="code-snippet">'  | ||||
|             # Replace every two spaces with ' &nbps;' to keep formatting while allowing the browser to break the line if necessary | ||||
|             content = content + cgi.escape(code).replace('\t', '    ').replace('  ', '  ').replace('  ', '  ')  | ||||
|             content = content + "</td></tr>" | ||||
|              | ||||
|         content = content + "</table></pre>" | ||||
|          | ||||
|         code_language = code_endings.get(result['filename'].split('.')[-1].lower(), None) | ||||
| 
 | ||||
|         # append result | ||||
|         results.append({'url': href, | ||||
|                         'title': title, | ||||
|                         'content': content}) | ||||
|                         'content': '', | ||||
|                         'repository': repo, | ||||
|                         'codelines': sorted(lines.items()), | ||||
|                         'code_language': code_language, | ||||
|                         'template': 'code.html'}) | ||||
| 
 | ||||
|     # return results | ||||
|     return results | ||||
|  |  | |||
|  | @ -579,4 +579,82 @@ select { | |||
|   border: 1px solid #DDD; | ||||
|   padding: 0.5em 0.8em; | ||||
|   font-size: 1em; | ||||
| } | ||||
| } | ||||
| 
 | ||||
| .highlight .hll { background-color: #ffffcc } | ||||
| .highlight  { background: #f8f8f8; } | ||||
| .highlight .c { color: #408080; font-style: italic } /* Comment */ | ||||
| .highlight .err { border: 1px solid #FF0000 } /* Error */ | ||||
| .highlight .k { color: #008000; font-weight: bold } /* Keyword */ | ||||
| .highlight .o { color: #666666 } /* Operator */ | ||||
| .highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */ | ||||
| .highlight .cp { color: #BC7A00 } /* Comment.Preproc */ | ||||
| .highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */ | ||||
| .highlight .cs { color: #408080; font-style: italic } /* Comment.Special */ | ||||
| .highlight .gd { color: #A00000 } /* Generic.Deleted */ | ||||
| .highlight .ge { font-style: italic } /* Generic.Emph */ | ||||
| .highlight .gr { color: #FF0000 } /* Generic.Error */ | ||||
| .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ | ||||
| .highlight .gi { color: #00A000 } /* Generic.Inserted */ | ||||
| .highlight .go { color: #888888 } /* Generic.Output */ | ||||
| .highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ | ||||
| .highlight .gs { font-weight: bold } /* Generic.Strong */ | ||||
| .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ | ||||
| .highlight .gt { color: #0044DD } /* Generic.Traceback */ | ||||
| .highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ | ||||
| .highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ | ||||
| .highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ | ||||
| .highlight .kp { color: #008000 } /* Keyword.Pseudo */ | ||||
| .highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ | ||||
| .highlight .kt { color: #B00040 } /* Keyword.Type */ | ||||
| .highlight .m { color: #666666 } /* Literal.Number */ | ||||
| .highlight .s { color: #BA2121 } /* Literal.String */ | ||||
| .highlight .na { color: #7D9029 } /* Name.Attribute */ | ||||
| .highlight .nb { color: #008000 } /* Name.Builtin */ | ||||
| .highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */ | ||||
| .highlight .no { color: #880000 } /* Name.Constant */ | ||||
| .highlight .nd { color: #AA22FF } /* Name.Decorator */ | ||||
| .highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */ | ||||
| .highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ | ||||
| .highlight .nf { color: #0000FF } /* Name.Function */ | ||||
| .highlight .nl { color: #A0A000 } /* Name.Label */ | ||||
| .highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ | ||||
| .highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ | ||||
| .highlight .nv { color: #19177C } /* Name.Variable */ | ||||
| .highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ | ||||
| .highlight .w { color: #bbbbbb } /* Text.Whitespace */ | ||||
| .highlight .mf { color: #666666 } /* Literal.Number.Float */ | ||||
| .highlight .mh { color: #666666 } /* Literal.Number.Hex */ | ||||
| .highlight .mi { color: #666666 } /* Literal.Number.Integer */ | ||||
| .highlight .mo { color: #666666 } /* Literal.Number.Oct */ | ||||
| .highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ | ||||
| .highlight .sc { color: #BA2121 } /* Literal.String.Char */ | ||||
| .highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ | ||||
| .highlight .s2 { color: #BA2121 } /* Literal.String.Double */ | ||||
| .highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ | ||||
| .highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ | ||||
| .highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ | ||||
| .highlight .sx { color: #008000 } /* Literal.String.Other */ | ||||
| .highlight .sr { color: #BB6688 } /* Literal.String.Regex */ | ||||
| .highlight .s1 { color: #BA2121 } /* Literal.String.Single */ | ||||
| .highlight .ss { color: #19177C } /* Literal.String.Symbol */ | ||||
| .highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ | ||||
| .highlight .vc { color: #19177C } /* Name.Variable.Class */ | ||||
| .highlight .vg { color: #19177C } /* Name.Variable.Global */ | ||||
| .highlight .vi { color: #19177C } /* Name.Variable.Instance */ | ||||
| .highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ | ||||
| 
 | ||||
| .highlight pre { overflow: auto; } | ||||
| 
 | ||||
| .highlight .lineno { | ||||
|     -webkit-touch-callout: none; | ||||
|     -webkit-user-select: none; | ||||
|     -khtml-user-select: none; | ||||
|     -moz-user-select: none; | ||||
|     -ms-user-select: none; | ||||
|     user-select: none; | ||||
|     cursor: default; | ||||
| } | ||||
|      | ||||
| .highlight .lineno::selection { background: transparent; } /* WebKit/Blink Browsers */ | ||||
| .highlight .lineno::-moz-selection { background: transparent; } /* Gecko Browsers */ | ||||
|  |  | |||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										83
									
								
								searx/static/default/less/code.less
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								searx/static/default/less/code.less
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,83 @@ | |||
| .highlight .hll { background-color: #ffffcc } | ||||
| .highlight  { background: #f8f8f8; } | ||||
| .highlight .c { color: #408080; font-style: italic } /* Comment */ | ||||
| .highlight .err { border: 1px solid #FF0000 } /* Error */ | ||||
| .highlight .k { color: #008000; font-weight: bold } /* Keyword */ | ||||
| .highlight .o { color: #666666 } /* Operator */ | ||||
| .highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */ | ||||
| .highlight .cp { color: #BC7A00 } /* Comment.Preproc */ | ||||
| .highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */ | ||||
| .highlight .cs { color: #408080; font-style: italic } /* Comment.Special */ | ||||
| .highlight .gd { color: #A00000 } /* Generic.Deleted */ | ||||
| .highlight .ge { font-style: italic } /* Generic.Emph */ | ||||
| .highlight .gr { color: #FF0000 } /* Generic.Error */ | ||||
| .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ | ||||
| .highlight .gi { color: #00A000 } /* Generic.Inserted */ | ||||
| .highlight .go { color: #888888 } /* Generic.Output */ | ||||
| .highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ | ||||
| .highlight .gs { font-weight: bold } /* Generic.Strong */ | ||||
| .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ | ||||
| .highlight .gt { color: #0044DD } /* Generic.Traceback */ | ||||
| .highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ | ||||
| .highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ | ||||
| .highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ | ||||
| .highlight .kp { color: #008000 } /* Keyword.Pseudo */ | ||||
| .highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ | ||||
| .highlight .kt { color: #B00040 } /* Keyword.Type */ | ||||
| .highlight .m { color: #666666 } /* Literal.Number */ | ||||
| .highlight .s { color: #BA2121 } /* Literal.String */ | ||||
| .highlight .na { color: #7D9029 } /* Name.Attribute */ | ||||
| .highlight .nb { color: #008000 } /* Name.Builtin */ | ||||
| .highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */ | ||||
| .highlight .no { color: #880000 } /* Name.Constant */ | ||||
| .highlight .nd { color: #AA22FF } /* Name.Decorator */ | ||||
| .highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */ | ||||
| .highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ | ||||
| .highlight .nf { color: #0000FF } /* Name.Function */ | ||||
| .highlight .nl { color: #A0A000 } /* Name.Label */ | ||||
| .highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ | ||||
| .highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ | ||||
| .highlight .nv { color: #19177C } /* Name.Variable */ | ||||
| .highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ | ||||
| .highlight .w { color: #bbbbbb } /* Text.Whitespace */ | ||||
| .highlight .mf { color: #666666 } /* Literal.Number.Float */ | ||||
| .highlight .mh { color: #666666 } /* Literal.Number.Hex */ | ||||
| .highlight .mi { color: #666666 } /* Literal.Number.Integer */ | ||||
| .highlight .mo { color: #666666 } /* Literal.Number.Oct */ | ||||
| .highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ | ||||
| .highlight .sc { color: #BA2121 } /* Literal.String.Char */ | ||||
| .highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ | ||||
| .highlight .s2 { color: #BA2121 } /* Literal.String.Double */ | ||||
| .highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ | ||||
| .highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ | ||||
| .highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ | ||||
| .highlight .sx { color: #008000 } /* Literal.String.Other */ | ||||
| .highlight .sr { color: #BB6688 } /* Literal.String.Regex */ | ||||
| .highlight .s1 { color: #BA2121 } /* Literal.String.Single */ | ||||
| .highlight .ss { color: #19177C } /* Literal.String.Symbol */ | ||||
| .highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ | ||||
| .highlight .vc { color: #19177C } /* Name.Variable.Class */ | ||||
| .highlight .vg { color: #19177C } /* Name.Variable.Global */ | ||||
| .highlight .vi { color: #19177C } /* Name.Variable.Instance */ | ||||
| .highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ | ||||
| 
 | ||||
| .highlight pre { | ||||
|     overflow: auto; | ||||
| } | ||||
| 
 | ||||
| .highlight .lineno { | ||||
|     -webkit-touch-callout: none; | ||||
|     -webkit-user-select: none; | ||||
|     -khtml-user-select: none; | ||||
|     -moz-user-select: none; | ||||
|     -ms-user-select: none; | ||||
|     user-select: none; | ||||
|     cursor: default; | ||||
|      | ||||
|     &::selection { | ||||
|         background: transparent; /* WebKit/Blink Browsers */ | ||||
|     } | ||||
|     &::-moz-selection { | ||||
|         background: transparent; /* Gecko Browsers */ | ||||
|     } | ||||
| } | ||||
|  | @ -8,6 +8,8 @@ | |||
| 
 | ||||
| @import "mixins.less"; | ||||
| 
 | ||||
| @import "code.less"; | ||||
| 
 | ||||
| // Main LESS-Code | ||||
| 
 | ||||
| html { | ||||
|  |  | |||
							
								
								
									
										916
									
								
								searx/static/oscar/css/bootstrap.min.css
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										916
									
								
								searx/static/oscar/css/bootstrap.min.css
									
										
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										23
									
								
								searx/static/oscar/css/oscar.min.css
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										23
									
								
								searx/static/oscar/css/oscar.min.css
									
										
									
									
										vendored
									
									
								
							|  | @ -1,22 +1 @@ | |||
| html{position:relative;min-height:100%} | ||||
| body{margin-bottom:80px} | ||||
| .footer{position:absolute;bottom:0;width:100%;height:60px} | ||||
| input[type=checkbox]:checked~.label_hide_if_checked{display:none} | ||||
| input[type=checkbox]:not(:checked)~.label_hide_if_not_checked{display:none} | ||||
| .result_header{margin-bottom:5px;margin-top:20px}.result_header .favicon{margin-bottom:-3px} | ||||
| .result_header a{vertical-align:bottom}.result_header a .highlight{font-weight:bold} | ||||
| .result-content{margin-top:5px}.result-content .highlight{font-weight:bold} | ||||
| .result-default{clear:both} | ||||
| .result-images{float:left !important} | ||||
| .img-thumbnail{margin:5px;max-height:128px;min-height:128px} | ||||
| .result-videos{clear:both} | ||||
| .result-torrents{clear:both} | ||||
| .result-map{clear:both} | ||||
| .suggestion_item{margin:2px 5px} | ||||
| .result_download{margin-right:5px} | ||||
| #pagination{margin-top:30px;padding-bottom:50px} | ||||
| .infobox .infobox_part{margin-bottom:20px} | ||||
| .infobox .infobox_part:last-child{margin-bottom:0} | ||||
| .search_categories{margin:10px 0;text-transform:capitalize} | ||||
| .cursor-text{cursor:text !important} | ||||
| .cursor-pointer{cursor:pointer !important} | ||||
| html{position:relative;min-height:100%}body{margin-bottom:80px}.footer{position:absolute;bottom:0;width:100%;height:60px}input[type=checkbox]:checked~.label_hide_if_checked{display:none}input[type=checkbox]:not(:checked)~.label_hide_if_not_checked{display:none}.result_header{margin-bottom:5px;margin-top:20px}.result_header .favicon{margin-bottom:-3px}.result_header a{vertical-align:bottom}.result_header a .highlight{font-weight:bold}.result-content{margin-top:5px}.result-content .highlight{font-weight:bold}.result-default{clear:both}.result-images{float:left !important}.img-thumbnail{margin:5px;max-height:128px;min-height:128px}.result-videos{clear:both}.result-torrents{clear:both}.result-map{clear:both}.suggestion_item{margin:2px 5px}.result_download{margin-right:5px}#pagination{margin-top:30px;padding-bottom:50px}.infobox .infobox_part{margin-bottom:20px}.infobox .infobox_part:last-child{margin-bottom:0}.search_categories{margin:10px 0;text-transform:capitalize}.cursor-text{cursor:text !important}.cursor-pointer{cursor:pointer !important}.highlight .hll{background-color:#ffc}.highlight{background:#f8f8f8}.highlight .c{color:#408080;font-style:italic}.highlight .err{border:1px solid #f00}.highlight .k{color:#008000;font-weight:bold}.highlight .o{color:#666}.highlight .cm{color:#408080;font-style:italic}.highlight .cp{color:#bc7a00}.highlight .c1{color:#408080;font-style:italic}.highlight .cs{color:#408080;font-style:italic}.highlight .gd{color:#a00000}.highlight .ge{font-style:italic}.highlight .gr{color:#f00}.highlight .gh{color:#000080;font-weight:bold}.highlight .gi{color:#00a000}.highlight .go{color:#888}.highlight .gp{color:#000080;font-weight:bold}.highlight .gs{font-weight:bold}.highlight .gu{color:#800080;font-weight:bold}.highlight .gt{color:#04d}.highlight .kc{color:#008000;font-weight:bold}.highlight .kd{color:#008000;font-weight:bold}.highlight .kn{color:#008000;font-weight:bold}.highlight .kp{color:#008000}.highlight .kr{color:#008000;font-weight:bold}.highlight .kt{color:#b00040}.highlight .m{color:#666}.highlight .s{color:#ba2121}.highlight .na{color:#7d9029}.highlight .nb{color:#008000}.highlight .nc{color:#00f;font-weight:bold}.highlight .no{color:#800}.highlight .nd{color:#a2f}.highlight .ni{color:#999;font-weight:bold}.highlight .ne{color:#d2413a;font-weight:bold}.highlight .nf{color:#00f}.highlight .nl{color:#a0a000}.highlight .nn{color:#00f;font-weight:bold}.highlight .nt{color:#008000;font-weight:bold}.highlight .nv{color:#19177c}.highlight .ow{color:#a2f;font-weight:bold}.highlight .w{color:#bbb}.highlight .mf{color:#666}.highlight .mh{color:#666}.highlight .mi{color:#666}.highlight .mo{color:#666}.highlight .sb{color:#ba2121}.highlight .sc{color:#ba2121}.highlight .sd{color:#ba2121;font-style:italic}.highlight .s2{color:#ba2121}.highlight .se{color:#b62;font-weight:bold}.highlight .sh{color:#ba2121}.highlight .si{color:#b68;font-weight:bold}.highlight .sx{color:#008000}.highlight .sr{color:#b68}.highlight .s1{color:#ba2121}.highlight .ss{color:#19177c}.highlight .bp{color:#008000}.highlight .vc{color:#19177c}.highlight .vg{color:#19177c}.highlight .vi{color:#19177c}.highlight .il{color:#666}.highlight .lineno{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.highlight .lineno::selection{background:transparent}.highlight .lineno::-moz-selection{background:transparent} | ||||
							
								
								
									
										79
									
								
								searx/static/oscar/less/oscar/code.less
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								searx/static/oscar/less/oscar/code.less
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,79 @@ | |||
| .highlight .hll { background-color: #ffffcc } | ||||
| .highlight  { background: #f8f8f8; } | ||||
| .highlight .c { color: #408080; font-style: italic } /* Comment */ | ||||
| .highlight .err { border: 1px solid #FF0000 } /* Error */ | ||||
| .highlight .k { color: #008000; font-weight: bold } /* Keyword */ | ||||
| .highlight .o { color: #666666 } /* Operator */ | ||||
| .highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */ | ||||
| .highlight .cp { color: #BC7A00 } /* Comment.Preproc */ | ||||
| .highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */ | ||||
| .highlight .cs { color: #408080; font-style: italic } /* Comment.Special */ | ||||
| .highlight .gd { color: #A00000 } /* Generic.Deleted */ | ||||
| .highlight .ge { font-style: italic } /* Generic.Emph */ | ||||
| .highlight .gr { color: #FF0000 } /* Generic.Error */ | ||||
| .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ | ||||
| .highlight .gi { color: #00A000 } /* Generic.Inserted */ | ||||
| .highlight .go { color: #888888 } /* Generic.Output */ | ||||
| .highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ | ||||
| .highlight .gs { font-weight: bold } /* Generic.Strong */ | ||||
| .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ | ||||
| .highlight .gt { color: #0044DD } /* Generic.Traceback */ | ||||
| .highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ | ||||
| .highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ | ||||
| .highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ | ||||
| .highlight .kp { color: #008000 } /* Keyword.Pseudo */ | ||||
| .highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ | ||||
| .highlight .kt { color: #B00040 } /* Keyword.Type */ | ||||
| .highlight .m { color: #666666 } /* Literal.Number */ | ||||
| .highlight .s { color: #BA2121 } /* Literal.String */ | ||||
| .highlight .na { color: #7D9029 } /* Name.Attribute */ | ||||
| .highlight .nb { color: #008000 } /* Name.Builtin */ | ||||
| .highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */ | ||||
| .highlight .no { color: #880000 } /* Name.Constant */ | ||||
| .highlight .nd { color: #AA22FF } /* Name.Decorator */ | ||||
| .highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */ | ||||
| .highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ | ||||
| .highlight .nf { color: #0000FF } /* Name.Function */ | ||||
| .highlight .nl { color: #A0A000 } /* Name.Label */ | ||||
| .highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ | ||||
| .highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ | ||||
| .highlight .nv { color: #19177C } /* Name.Variable */ | ||||
| .highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ | ||||
| .highlight .w { color: #bbbbbb } /* Text.Whitespace */ | ||||
| .highlight .mf { color: #666666 } /* Literal.Number.Float */ | ||||
| .highlight .mh { color: #666666 } /* Literal.Number.Hex */ | ||||
| .highlight .mi { color: #666666 } /* Literal.Number.Integer */ | ||||
| .highlight .mo { color: #666666 } /* Literal.Number.Oct */ | ||||
| .highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ | ||||
| .highlight .sc { color: #BA2121 } /* Literal.String.Char */ | ||||
| .highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ | ||||
| .highlight .s2 { color: #BA2121 } /* Literal.String.Double */ | ||||
| .highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ | ||||
| .highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ | ||||
| .highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ | ||||
| .highlight .sx { color: #008000 } /* Literal.String.Other */ | ||||
| .highlight .sr { color: #BB6688 } /* Literal.String.Regex */ | ||||
| .highlight .s1 { color: #BA2121 } /* Literal.String.Single */ | ||||
| .highlight .ss { color: #19177C } /* Literal.String.Symbol */ | ||||
| .highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ | ||||
| .highlight .vc { color: #19177C } /* Name.Variable.Class */ | ||||
| .highlight .vg { color: #19177C } /* Name.Variable.Global */ | ||||
| .highlight .vi { color: #19177C } /* Name.Variable.Instance */ | ||||
| .highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ | ||||
| 
 | ||||
| .highlight .lineno { | ||||
|     -webkit-touch-callout: none; | ||||
|     -webkit-user-select: none; | ||||
|     -khtml-user-select: none; | ||||
|     -moz-user-select: none; | ||||
|     -ms-user-select: none; | ||||
|     user-select: none; | ||||
|     cursor: default; | ||||
|      | ||||
|     &::selection { | ||||
|         background: transparent; /* WebKit/Blink Browsers */ | ||||
|     } | ||||
|     &::-moz-selection { | ||||
|         background: transparent; /* Gecko Browsers */ | ||||
|     } | ||||
| } | ||||
|  | @ -9,3 +9,5 @@ | |||
| @import "search.less"; | ||||
| 
 | ||||
| @import "cursor.less"; | ||||
| 
 | ||||
| @import "code.less"; | ||||
|  |  | |||
							
								
								
									
										9
									
								
								searx/templates/courgette/result_templates/code.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								searx/templates/courgette/result_templates/code.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,9 @@ | |||
| <div class="result {{ result.class }}"> | ||||
|     <h3 class="result_title"> {% if result['favicon'] %}<img width="14" height="14" class="favicon" src="static/{{theme}}/img/icon_{{result['favicon']}}.ico" alt="{{result['favicon']}}" />{% endif %}<a href="{{ result.url }}">{{ result.title|safe }}</a></h3> | ||||
|     <p class="url">{{ result.pretty_url }} <a class="cache_link" href="https://web.archive.org/web/{{ result.url }}">cached</a></p> | ||||
|     {% if result.publishedDate %}<p class="published_date">{{ result.publishedDate }}</p>{% endif %} | ||||
|     <p class="content">{% if result.img_src %}<img src="{{ result.img_src }}" class="image" />{% endif %}{% if result.content %}{{ result.content|safe }}<br class="last"/>{% endif %}</p> | ||||
|     {% if result.repository %}<p class="result-content"><a href="{{ result.repository|safe }}">{{ result.repository }}</a></p>{% endif %} | ||||
| 
 | ||||
|     {{ result.codelines|code_highlighter(result.code_language)|safe }} | ||||
| </div> | ||||
							
								
								
									
										9
									
								
								searx/templates/default/result_templates/code.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								searx/templates/default/result_templates/code.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,9 @@ | |||
| <div class="result {{ result.class }}"> | ||||
|     <h3 class="result_title"> {% if result['favicon'] %}<img width="14" height="14" class="favicon" src="static/{{theme}}/img/icon_{{result['favicon']}}.ico" alt="{{result['favicon']}}" />{% endif %}<a href="{{ result.url }}">{{ result.title|safe }}</a></h3> | ||||
|     <p class="url">{{ result.pretty_url }} <a class="cache_link" href="https://web.archive.org/web/{{ result.url }}">cached</a></p> | ||||
|     {% if result.publishedDate %}<p class="published_date">{{ result.publishedDate }}</p>{% endif %} | ||||
|     <p class="content">{% if result.img_src %}<img src="{{ result.img_src }}" class="image" />{% endif %}{% if result.content %}{{ result.content|safe }}<br class="last"/>{% endif %}</p> | ||||
|     {% if result.repository %}<p class="result-content"><a href="{{ result.repository|safe }}">{{ result.repository }}</a></p>{% endif %} | ||||
| 
 | ||||
|     {{ result.codelines|code_highlighter(result.code_language)|safe }} | ||||
| </div> | ||||
							
								
								
									
										17
									
								
								searx/templates/oscar/result_templates/code.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								searx/templates/oscar/result_templates/code.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,17 @@ | |||
| {% from 'oscar/macros.html' import icon %} | ||||
| 
 | ||||
| <h4 class="result_header">{% if result['favicon'] %}<img width="32" height="32" class="favicon" src="static/{{ theme }}/img/icons/{{ result['favicon'] }}.png" alt="{{ result['favicon'] }}" /> {% endif %}<a href="{{ result.url }}">{{ result.title|safe }}</a></h4> | ||||
| 
 | ||||
| {% if result.publishedDate %}<time class="text-muted" datetime="{{ result.pubdate }}" >{{ result.publishedDate }}</time>{% endif %} | ||||
| <small><a class="text-info" href="https://web.archive.org/web/{{ result.url }}">{{ icon('link') }} {{ _('cached') }}</a></small> | ||||
| 
 | ||||
| {% if result.content %}<p class="result-content">{{ result.content|safe }}</p>{% endif %} | ||||
| 
 | ||||
| {% if result.repository %}<p class="result-content">{{ icon('file') }} <a href="{{ result.repository|safe }}">{{ result.repository }}</a></p>{% endif %} | ||||
| 
 | ||||
| {{ result.codelines|code_highlighter(result.code_language)|safe }} | ||||
| 
 | ||||
| <div class="clearfix"></div> | ||||
| 
 | ||||
| <span class="label label-default pull-right">{{ result.engine }}</span> | ||||
| <p class="text-muted">{{ result.pretty_url }}</p> | ||||
|  | @ -33,6 +33,9 @@ from flask import ( | |||
|     redirect, send_from_directory | ||||
| ) | ||||
| from flask.ext.babel import Babel, gettext, format_date | ||||
| from pygments import highlight | ||||
| from pygments.lexers import get_lexer_by_name | ||||
| from pygments.formatters import HtmlFormatter | ||||
| from searx import settings, searx_dir | ||||
| from searx.engines import ( | ||||
|     categories, engines, get_engines_stats, engine_shortcuts | ||||
|  | @ -90,6 +93,49 @@ def get_locale(): | |||
|     return locale | ||||
| 
 | ||||
| 
 | ||||
| # code-highlighter | ||||
| @app.template_filter('code_highlighter') | ||||
| def code_highlighter(codelines, language=None): | ||||
|     if not language: | ||||
|         language = 'text' | ||||
| 
 | ||||
|     # find lexer by programing language | ||||
|     lexer = get_lexer_by_name(language, stripall=True) | ||||
|      | ||||
|     html_code = '' | ||||
|     tmp_code = '' | ||||
|     last_line = None | ||||
| 
 | ||||
|     # parse lines | ||||
|     for line, code in codelines: | ||||
|         if not last_line: | ||||
|             line_code_start = line | ||||
| 
 | ||||
|         # new codeblock is detected | ||||
|         if last_line != None and\ | ||||
|            last_line +1 != line: | ||||
| 
 | ||||
|             # highlight last codepart | ||||
|             formatter = HtmlFormatter(linenos='inline', linenostart=line_code_start) | ||||
|             html_code = html_code + highlight(tmp_code, lexer, formatter) | ||||
|              | ||||
|             # reset conditions for next codepart | ||||
|             tmp_code = '' | ||||
|             line_code_start = line | ||||
| 
 | ||||
|         # add codepart | ||||
|         tmp_code += code + '\n' | ||||
|          | ||||
|         # update line | ||||
|         last_line = line | ||||
| 
 | ||||
|     # highlight last codepart | ||||
|     formatter = HtmlFormatter(linenos='inline', linenostart=line_code_start) | ||||
|     html_code = html_code + highlight(tmp_code, lexer, formatter) | ||||
| 
 | ||||
|     return html_code | ||||
| 
 | ||||
| 
 | ||||
| def get_base_url(): | ||||
|     if settings['server']['base_url']: | ||||
|         hostname = settings['server']['base_url'] | ||||
|  |  | |||
							
								
								
									
										1
									
								
								setup.py
									
										
									
									
									
								
							
							
						
						
									
										1
									
								
								setup.py
									
										
									
									
									
								
							|  | @ -44,6 +44,7 @@ setup( | |||
|         'requests', | ||||
|         'lxml', | ||||
|         'pyyaml', | ||||
|         'pygments', | ||||
|         'setuptools', | ||||
|         'python-dateutil', | ||||
|     ], | ||||
|  |  | |||
|  | @ -4,6 +4,7 @@ Flask = 0.10.1 | |||
| Flask-Babel = 0.9 | ||||
| Jinja2 = 2.7.2 | ||||
| MarkupSafe = 0.18 | ||||
| Pygments = 2.0.1 | ||||
| WebOb = 1.3.1 | ||||
| WebTest = 2.0.11 | ||||
| Werkzeug = 0.9.4 | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Thomas Pointhuber
						Thomas Pointhuber