فهرست منبع

extract url encode function (see #6852)

Dan Korostelev 7 سال پیش
والد
کامیت
8cf5d43a76
3فایلهای تغییر یافته به همراه15 افزوده شده و 22 حذف شده
  1. 13 0
      src/context/common.ml
  2. 1 11
      src/generators/hlinterp.ml
  3. 1 11
      src/macro/eval/evalStdLib.ml

+ 13 - 0
src/context/common.ml

@@ -841,6 +841,19 @@ let hash f =
 	done;
 	if Sys.word_size = 64 then Int32.to_int (Int32.shift_right (Int32.shift_left (Int32.of_int !h) 1) 1) else !h
 
+let url_encode s add_char =
+	let hex = "0123456789ABCDEF" in
+	for i = 0 to String.length s - 1 do
+		let c = String.unsafe_get s i in
+		match c with
+		| 'A'..'Z' | 'a'..'z' | '0'..'9' | '_' | '-' | '.' ->
+			add_char c
+		| _ ->
+			add_char '%';
+			add_char (String.unsafe_get hex (int_of_char c lsr 4));
+			add_char (String.unsafe_get hex (int_of_char c land 0xF));
+	done
+
 let add_diagnostics_message com s p sev =
 	let di = com.shared.shared_display_information in
 	di.diagnostics_messages <- (s,p,sev) :: di.diagnostics_messages

+ 1 - 11
src/generators/hlinterp.ml

@@ -1796,17 +1796,7 @@ let load_native ctx lib name t =
 			| [VBytes s; VRef (r, HI32)] ->
 				let s = hl_to_caml s in
 				let buf = Buffer.create 0 in
-				let hex = "0123456789ABCDEF" in
-				for i = 0 to String.length s - 1 do
-					let c = String.unsafe_get s i in
-					match c with
-					| 'A'..'Z' | 'a'..'z' | '0'..'9' | '_' | '-' | '.' ->
-						utf16_char buf c
-					| _ ->
-						utf16_char buf '%';
-						utf16_char buf (String.unsafe_get hex (int_of_char c lsr 4));
-						utf16_char buf (String.unsafe_get hex (int_of_char c land 0xF));
-				done;
+				Common.url_encode s (utf16_char buf);
 				utf16_add buf 0;
 				let str = Buffer.contents buf in
 				set_ref r (to_int (String.length str lsr 1 - 1));

+ 1 - 11
src/macro/eval/evalStdLib.ml

@@ -2066,17 +2066,7 @@ end
 module StdStringTools = struct
 	let url_encode s =
 		let b = Rope.Buffer.create 0 in
-		let hex = "0123456789ABCDEF" in
-		for i = 0 to String.length s - 1 do
-			let c = String.unsafe_get s i in
-			match c with
-			| 'A'..'Z' | 'a'..'z' | '0'..'9' | '_' | '-' | '.' ->
-				Rope.Buffer.add_char b c
-			| _ ->
-				Rope.Buffer.add_char b '%';
-				Rope.Buffer.add_char b (String.unsafe_get hex (int_of_char c lsr 4));
-				Rope.Buffer.add_char b (String.unsafe_get hex (int_of_char c land 0xF));
-		done;
+		Common.url_encode s (Rope.Buffer.add_char b);
 		Rope.Buffer.contents b
 
 	let fastCodeAt = vfun2 (fun s index ->