forked from cadence/breezewiki
		
	Fix some special characters in titles like ? and ;
This commit is contained in:
		
							parent
							
								
									1c83c0b4d3
								
							
						
					
					
						commit
						92591a5eab
					
				
					 4 changed files with 25 additions and 15 deletions
				
			
		|  | @ -52,7 +52,7 @@ | ||||||
|               ,@(map |               ,@(map | ||||||
|                  (λ (result) |                  (λ (result) | ||||||
|                    (define title (jp "/title" result)) |                    (define title (jp "/title" result)) | ||||||
|                    (define page-path (regexp-replace* #rx" " title "_")) |                    (define page-path (page-title->path title)) | ||||||
|                    `(li |                    `(li | ||||||
|                      (a (@ (href ,(format "/~a/wiki/~a" wikiname page-path))) |                      (a (@ (href ,(format "/~a/wiki/~a" wikiname page-path))) | ||||||
|                         ,title))) |                         ,title))) | ||||||
|  |  | ||||||
|  | @ -18,9 +18,9 @@ | ||||||
| 
 | 
 | ||||||
| (define examples | (define examples | ||||||
|   '(("minecraft" "Bricks") |   '(("minecraft" "Bricks") | ||||||
|     ("crosscode" "CrossCode_Wiki") |     ("crosscode" "CrossCode Wiki") | ||||||
|     ("undertale" "Hot_Dog...%3F") |     ("undertale" "Hot Dog...?") | ||||||
|     ("tardis" "Eleanor_Blake") |     ("tardis" "Eleanor Blake") | ||||||
|     ("zelda" "Boomerang"))) |     ("zelda" "Boomerang"))) | ||||||
| 
 | 
 | ||||||
| (define content | (define content | ||||||
|  | @ -45,7 +45,7 @@ | ||||||
|     (h2 "Example pages") |     (h2 "Example pages") | ||||||
|     (ul |     (ul | ||||||
|      ,@(map (λ (x) |      ,@(map (λ (x) | ||||||
|               `(li (a (@ (href ,(apply format "/~a/wiki/~a" x))) |               `(li (a (@ (href ,(format "/~a/wiki/~a" (car x) (page-title->path (cadr x))))) | ||||||
|                       ,(apply format "~a: ~a" x)))) |                       ,(apply format "~a: ~a" x)))) | ||||||
|             examples)) |             examples)) | ||||||
|     (h2 "Testimonials") |     (h2 "Testimonials") | ||||||
|  |  | ||||||
|  | @ -38,7 +38,7 @@ | ||||||
|          (ul ,@(map |          (ul ,@(map | ||||||
|                 (λ (result) |                 (λ (result) | ||||||
|                   (let* ([title (jp "/title" result)] |                   (let* ([title (jp "/title" result)] | ||||||
|                          [page-path (regexp-replace* #rx" " title "_")] |                          [page-path (page-title->path title)] | ||||||
|                          [timestamp (jp "/timestamp" result)] |                          [timestamp (jp "/timestamp" result)] | ||||||
|                          [wordcount (jp "/wordcount" result)] |                          [wordcount (jp "/wordcount" result)] | ||||||
|                          [size (jp "/size" result)]) |                          [size (jp "/size" result)]) | ||||||
|  |  | ||||||
|  | @ -17,7 +17,9 @@ | ||||||
|   ; prints "out: <url>" |   ; prints "out: <url>" | ||||||
|  log-outgoing |  log-outgoing | ||||||
|  ; pass in a header, headers, or something useless. they'll all combine into a list |  ; pass in a header, headers, or something useless. they'll all combine into a list | ||||||
|  build-headers) |  build-headers | ||||||
|  |  ; try to follow wikimedia's format for which characters should be encoded/replaced in page titles for the url | ||||||
|  |  page-title->path) | ||||||
| 
 | 
 | ||||||
| (module+ test | (module+ test | ||||||
|   (require "typed-rackunit.rkt")) |   (require "typed-rackunit.rkt")) | ||||||
|  | @ -26,14 +28,18 @@ | ||||||
| 
 | 
 | ||||||
| ;; https://url.spec.whatwg.org/#urlencoded-serializing | ;; https://url.spec.whatwg.org/#urlencoded-serializing | ||||||
| 
 | 
 | ||||||
| (define urlencoded-set '(#\! #\' #\( #\) #\~ ; urlencoded set | (define path-set '(#\; ; semicolon is part of the userinfo set in the URL standard, but I'm putting it here | ||||||
|                          #\$ #\% #\& #\+ #\, ; component set |  | ||||||
|                          #\/ #\: #\; #\= #\@ #\[ #\\ #\] #\^ #\| ; userinfo set |  | ||||||
|                    #\? #\` #\{ #\} ; path set |                    #\? #\` #\{ #\} ; path set | ||||||
|                    #\  #\" #\# #\< #\> ; query set |                    #\  #\" #\# #\< #\> ; query set | ||||||
|                    ; c0 controls included elsewhere |                    ; c0 controls included elsewhere | ||||||
|                    ; higher ranges included elsewhere |                    ; higher ranges included elsewhere | ||||||
|                    )) |                    )) | ||||||
|  | (define urlencoded-set (append | ||||||
|  |                         '(#\! #\' #\( #\) #\~ ; urlencoded set | ||||||
|  |                           #\$ #\% #\& #\+ #\, ; component set | ||||||
|  |                           #\/ #\: #\= #\@ #\[ #\\ #\] #\^ #\| ; userinfo set | ||||||
|  |                           ) | ||||||
|  |                         path-set)) | ||||||
| 
 | 
 | ||||||
| (: percent-encode (String (Listof Char) Boolean -> Bytes)) | (: percent-encode (String (Listof Char) Boolean -> Bytes)) | ||||||
| (define (percent-encode value set space-as-plus) | (define (percent-encode value set space-as-plus) | ||||||
|  | @ -98,3 +104,7 @@ | ||||||
|            [(header? f) (list f)] |            [(header? f) (list f)] | ||||||
|            [(pair? f) f])) |            [(pair? f) f])) | ||||||
|        fs))) |        fs))) | ||||||
|  | 
 | ||||||
|  | (: page-title->path (String -> Bytes)) | ||||||
|  | (define (page-title->path title) | ||||||
|  |   (percent-encode (regexp-replace* " " title "_") path-set #f)) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue