Ver Fonte

文本比对

Bhikkhu-Kosalla há 4 anos atrás
pai
commit
8fac560efb
2 ficheiros alterados com 279 adições e 3 exclusões
  1. 3 3
      app/studio/js/relation_list.json
  2. 276 0
      app/term/text_compare.html

+ 3 - 3
app/studio/js/relation_list.json

@@ -28,7 +28,7 @@ var list_relation=[
     },
     {
         "id": "ASV",
-        "case": ".nom.",
+        "case": "",
         "note": "Active Subject Relation",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
@@ -37,7 +37,7 @@ var list_relation=[
     },
     {
         "id": "ASV",
-        "case": ".nom.",
+        "case": "",
         "note": "施动者<主格> -> 动词<br>XX把...",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",
@@ -46,7 +46,7 @@ var list_relation=[
     },
     {
         "id": "ASV",
-        "case": ".nom.",
+        "case": "",
         "note": "vuttakattar -> kiriyā",
         "sys_name": "Sadda Pan Goun",
         "author": "Ven. Pandita Pariyatti Faculty ITBMU",

+ 276 - 0
app/term/text_compare.html

@@ -0,0 +1,276 @@
+<!DOCTYPE html>
+<html>
+	<head>
+		<title>文本比较工具</title>
+		<style type="text/css">
+			* {
+				padding: 0px;
+				margin: 0px;
+			}
+			html,
+			body {
+				overflow-y: hidden;
+			}
+			.edit_div {
+				border: 1px solid #cccccc;
+				overflow: auto;
+				position: relative;
+			}
+			.edit_div textarea {
+				resize: none;
+				background: none repeat scroll 0 0 transparent;
+				border: 0 none;
+				width: 100%;
+				height: 200px;
+				overflow-y: scroll;
+				position: absolute;
+				left: 0px;
+				top: 0px;
+				z-index: 2;
+				font-size: 18px;
+				white-space: pre-wrap;
+				word-wrap: break-word;
+				word-break: break-all;
+			}
+			.edit_div pre {
+				overflow-y: scroll;
+				white-space: pre-wrap;
+				word-wrap: break-word;
+				word-break: break-all;
+				width: 100%;
+				height: 200px;
+				text-align: left;
+				color: #ffffff;
+				z-index: 1;
+				font-size: 18px;
+			}
+		</style>
+	</head>
+	<body>
+		<table style="width: 100%">
+			<tr>
+				<td style="width: 50%">
+					<div class="edit_div">
+						<pre id="edit_pre_1"></pre>
+						<textarea
+							id="edit_textarea_1"
+							onscroll="test1_scroll()"
+							oninput="textchange()"
+							onpropertychange="textchange()"
+						></textarea>
+					</div>
+				</td>
+				<td style="width: 50%">
+					<div class="edit_div">
+						<pre id="edit_pre_2"></pre>
+						<textarea
+							id="edit_textarea_2"
+							onscroll="test2_scroll()"
+							oninput="textchange()"
+							onpropertychange="textchange()"
+						></textarea>
+					</div>
+				</td>
+			</tr>
+		</table>
+		<script type="text/javascript">
+			function test1_scroll() {
+				document.getElementById("edit_pre_1").scrollTop = document.getElementById("edit_textarea_1").scrollTop;
+				document.getElementById("edit_pre_2").scrollTop = document.getElementById("edit_pre_1").scrollTop;
+				document.getElementById("edit_textarea_2").scrollTop = document.getElementById(
+					"edit_textarea_1"
+				).scrollTop;
+			}
+			function test2_scroll() {
+				document.getElementById("edit_pre_2").scrollTop = document.getElementById("edit_textarea_2").scrollTop;
+				document.getElementById("edit_pre_1").scrollTop = document.getElementById("edit_pre_2").scrollTop;
+				document.getElementById("edit_textarea_1").scrollTop = document.getElementById(
+					"edit_textarea_2"
+				).scrollTop;
+			}
+			function textchange() {
+				var op = eq({
+					value1: document.getElementById("edit_textarea_1").value,
+					value2: document.getElementById("edit_textarea_2").value,
+				});
+				document.getElementById("edit_pre_1").innerHTML = op.value1 + "\r\n";
+				document.getElementById("edit_pre_2").innerHTML = op.value2 + "\r\n";
+			}
+			function eq(op) {
+				if (!op) {
+					return op;
+				}
+				if (!op.value1_style) {
+					op.value1_style = "background-color:#FEC8C8;";
+				}
+				if (!op.value2_style) {
+					op.value2_style = "background-color:#FEC8C8;";
+				}
+				if (!op.eq_min) {
+					op.eq_min = 3;
+				}
+				if (!op.eq_index) {
+					op.eq_index = 5;
+				}
+				if (!op.value1 || !op.value2) {
+					return op;
+				}
+				var ps = {
+					v1_i: 0,
+					v1_new_value: "",
+					v2_i: 0,
+					v2_new_value: "",
+				};
+				while (ps.v1_i < op.value1.length && ps.v2_i < op.value2.length) {
+					if (op.value1[ps.v1_i] == op.value2[ps.v2_i]) {
+						ps.v1_new_value += op.value1[ps.v1_i].replace(/</g, "<").replace(">", ">");
+						ps.v2_new_value += op.value2[ps.v2_i].replace(/</g, "<").replace(">", ">");
+						ps.v1_i += 1;
+						ps.v2_i += 1;
+						if (ps.v1_i >= op.value1.length) {
+							ps.v2_new_value +=
+								"<span style='" +
+								op.value2_style +
+								"'>" +
+								op.value2.substr(ps.v2_i).replace(/</g, "<").replace(">", ">") +
+								"</span>";
+							break;
+						}
+						if (ps.v2_i >= op.value2.length) {
+							ps.v1_new_value +=
+								"<span style='" +
+								op.value1_style +
+								"'>" +
+								op.value1.substr(ps.v1_i).replace(/</g, "<").replace(">", ">") +
+								"</span>";
+							break;
+						}
+					} else {
+						ps.v1_index = ps.v1_i + 1;
+						ps.v1_eq_length = 0;
+						ps.v1_eq_max = 0;
+						ps.v1_start = ps.v1_i + 1;
+						while (ps.v1_index < op.value1.length) {
+							if (op.value1[ps.v1_index] == op.value2[ps.v2_i + ps.v1_eq_length]) {
+								ps.v1_eq_length += 1;
+							} else if (ps.v1_eq_length > 0) {
+								if (ps.v1_eq_max < ps.v1_eq_length) {
+									ps.v1_eq_max = ps.v1_eq_length;
+									ps.v1_start = ps.v1_index - ps.v1_eq_length;
+								}
+								ps.v1_eq_length = 0;
+								break; //只寻找最近的
+							}
+							ps.v1_index += 1;
+						}
+						if (ps.v1_eq_max < ps.v1_eq_length) {
+							ps.v1_eq_max = ps.v1_eq_length;
+							ps.v1_start = ps.v1_index - ps.v1_eq_length;
+						}
+
+						ps.v2_index = ps.v2_i + 1;
+						ps.v2_eq_length = 0;
+						ps.v2_eq_max = 0;
+						ps.v2_start = ps.v2_i + 1;
+						while (ps.v2_index < op.value2.length) {
+							if (op.value2[ps.v2_index] == op.value1[ps.v1_i + ps.v2_eq_length]) {
+								ps.v2_eq_length += 1;
+							} else if (ps.v2_eq_length > 0) {
+								if (ps.v2_eq_max < ps.v2_eq_length) {
+									ps.v2_eq_max = ps.v2_eq_length;
+									ps.v2_start = ps.v2_index - ps.v2_eq_length;
+								}
+								ps.v1_eq_length = 0;
+								break; //只寻找最近的
+							}
+							ps.v2_index += 1;
+						}
+						if (ps.v2_eq_max < ps.v2_eq_length) {
+							ps.v2_eq_max = ps.v2_eq_length;
+							ps.v2_start = ps.v2_index - ps.v2_eq_length;
+						}
+						if (ps.v1_eq_max < op.eq_min && ps.v1_start - ps.v1_i > op.eq_index) {
+							ps.v1_eq_max = 0;
+						}
+						if (ps.v2_eq_max < op.eq_min && ps.v2_start - ps.v2_i > op.eq_index) {
+							ps.v2_eq_max = 0;
+						}
+						if (ps.v1_eq_max == 0 && ps.v2_eq_max == 0) {
+							ps.v1_new_value +=
+								"<span style='" +
+								op.value1_style +
+								"'>" +
+								op.value1[ps.v1_i].replace(/</g, "<").replace(">", ">") +
+								"</span>";
+							ps.v2_new_value +=
+								"<span style='" +
+								op.value2_style +
+								"'>" +
+								op.value2[ps.v2_i].replace(/</g, "<").replace(">", ">") +
+								"</span>";
+							ps.v1_i += 1;
+							ps.v2_i += 1;
+
+							if (ps.v1_i >= op.value1.length) {
+								ps.v2_new_value +=
+									"<span style='" +
+									op.value2_style +
+									"'>" +
+									op.value2.substr(ps.v2_i).replace(/</g, "<").replace(">", ">") +
+									"</span>";
+								break;
+							}
+							if (ps.v2_i >= op.value2.length) {
+								ps.v1_new_value +=
+									"<span style='" +
+									op.value1_style +
+									"'>" +
+									op.value1.substr(ps.v1_i).replace(/</g, "<").replace(">", ">") +
+									"</span>";
+								break;
+							}
+						} else if (ps.v1_eq_max > ps.v2_eq_max) {
+							ps.v1_new_value +=
+								"<span style='" +
+								op.value1_style +
+								"'>" +
+								op.value1
+									.substr(ps.v1_i, ps.v1_start - ps.v1_i)
+									.replace(/</g, "<")
+									.replace(">", ">") +
+								"</span>";
+							ps.v1_i = ps.v1_start;
+						} else {
+							ps.v2_new_value +=
+								"<span style='" +
+								op.value2_style +
+								"'>" +
+								op.value2
+									.substr(ps.v2_i, ps.v2_start - ps.v2_i)
+									.replace(/</g, "<")
+									.replace(">", ">") +
+								"</span>";
+							ps.v2_i = ps.v2_start;
+						}
+					}
+				}
+				op.value1 = ps.v1_new_value;
+				op.value2 = ps.v2_new_value;
+				return op;
+			}
+			function settextheight() {
+				var heigth = document.documentElement.clientHeight - 6 + "px";
+				document.getElementById("edit_pre_1").style.height = heigth;
+				document.getElementById("edit_textarea_1").style.height = heigth;
+				document.getElementById("edit_pre_2").style.height = heigth;
+				document.getElementById("edit_textarea_2").style.height = heigth;
+			}
+			window.onload = function () {
+				settextheight();
+				window.onresize = function () {
+					settextheight();
+				};
+			};
+		</script>
+	</body>
+</html>