Browse Source

修改 模块配置

钟志权 1 year ago
parent
commit
d79f7e2b29
100 changed files with 3673 additions and 1 deletions
  1. 29 1
      go.mod
  2. 15 0
      knife4gin/front/doc.html
  3. BIN
      knife4gin/front/favicon.ico
  4. BIN
      knife4gin/front/img/icons/android-chrome-192x192.png
  5. BIN
      knife4gin/front/img/icons/android-chrome-512x512.png
  6. BIN
      knife4gin/front/img/icons/apple-touch-icon-120x120.png
  7. BIN
      knife4gin/front/img/icons/apple-touch-icon-152x152.png
  8. BIN
      knife4gin/front/img/icons/apple-touch-icon-180x180.png
  9. BIN
      knife4gin/front/img/icons/apple-touch-icon-60x60.png
  10. BIN
      knife4gin/front/img/icons/apple-touch-icon-76x76.png
  11. BIN
      knife4gin/front/img/icons/apple-touch-icon.png
  12. BIN
      knife4gin/front/img/icons/favicon-16x16.png
  13. BIN
      knife4gin/front/img/icons/favicon-32x32.png
  14. BIN
      knife4gin/front/img/icons/msapplication-icon-144x144.png
  15. BIN
      knife4gin/front/img/icons/mstile-150x150.png
  16. 149 0
      knife4gin/front/img/icons/safari-pinned-tab.svg
  17. 1 0
      knife4gin/front/oauth/axios.min.js
  18. BIN
      knife4gin/front/oauth/axios.min.js.gz
  19. 104 0
      knife4gin/front/oauth/oauth2.html
  20. 2 0
      knife4gin/front/robots.txt
  21. 1 0
      knife4gin/front/webjars/css/Debug-a564e230.css
  22. 1 0
      knife4gin/front/webjars/css/Document-c78cdfeb.css
  23. 0 0
      knife4gin/front/webjars/css/doc-9f76a0ba.css
  24. BIN
      knife4gin/front/webjars/css/doc-9f76a0ba.css.gz
  25. 1 0
      knife4gin/front/webjars/js/CopyOutlined-b5ffbc08.js
  26. 1 0
      knife4gin/front/webjars/js/DataType-cfcab27b.js
  27. 0 0
      knife4gin/front/webjars/js/Debug-0dddbf5f.js
  28. BIN
      knife4gin/front/webjars/js/Debug-0dddbf5f.js.gz
  29. 0 0
      knife4gin/front/webjars/js/DebugResponse-bfef447c.js
  30. 2 0
      knife4gin/front/webjars/js/Document-bfff2334.js
  31. BIN
      knife4gin/front/webjars/js/Document-bfff2334.js.gz
  32. 0 0
      knife4gin/front/webjars/js/EditorDebugShow-bdfdb935.js
  33. BIN
      knife4gin/front/webjars/js/EditorDebugShow-bdfdb935.js.gz
  34. 0 0
      knife4gin/front/webjars/js/EditorScript-0cc633e1.js
  35. BIN
      knife4gin/front/webjars/js/EditorScript-0cc633e1.js.gz
  36. 1 0
      knife4gin/front/webjars/js/EditorShow-c8da811a.js
  37. 1 0
      knife4gin/front/webjars/js/OAuth2-51d4e1b8.js
  38. 0 0
      knife4gin/front/webjars/js/OpenApi-45790532.js
  39. 0 0
      knife4gin/front/webjars/js/arc-db38aed3.js
  40. 1 0
      knife4gin/front/webjars/js/array-9f3ba611.js
  41. 0 0
      knife4gin/front/webjars/js/c4Diagram-6af2d31c-577350fb.js
  42. BIN
      knife4gin/front/webjars/js/c4Diagram-6af2d31c-577350fb.js.gz
  43. 0 0
      knife4gin/front/webjars/js/classDiagram-14bbef50-6014567d.js
  44. 0 0
      knife4gin/front/webjars/js/classDiagram-v2-36dc72da-fa8ff7c6.js
  45. 5 0
      knife4gin/front/webjars/js/clipboard-b510bfa2.js
  46. 0 0
      knife4gin/front/webjars/js/createText-a48a4c90-b31e51e0.js
  47. BIN
      knife4gin/front/webjars/js/createText-a48a4c90-b31e51e0.js.gz
  48. 4 0
      knife4gin/front/webjars/js/doc-9439ea18.js
  49. BIN
      knife4gin/front/webjars/js/doc-9439ea18.js.gz
  50. 0 0
      knife4gin/front/webjars/js/edges-5ec2587c-bf509679.js
  51. BIN
      knife4gin/front/webjars/js/edges-5ec2587c-bf509679.js.gz
  52. 0 0
      knife4gin/front/webjars/js/erDiagram-4c71174c-a6a0cfbe.js
  53. BIN
      knife4gin/front/webjars/js/erDiagram-4c71174c-a6a0cfbe.js.gz
  54. 0 0
      knife4gin/front/webjars/js/ext-language_tools-602acc1a.js
  55. 0 0
      knife4gin/front/webjars/js/ext-language_tools-66adbdd7.js
  56. BIN
      knife4gin/front/webjars/js/ext-language_tools-66adbdd7.js.gz
  57. 2296 0
      knife4gin/front/webjars/js/ext-language_tools-ec14926a.js
  58. BIN
      knife4gin/front/webjars/js/ext-language_tools-ec14926a.js.gz
  59. 0 0
      knife4gin/front/webjars/js/flowDb-f4777d50-618ba865.js
  60. BIN
      knife4gin/front/webjars/js/flowDb-f4777d50-618ba865.js.gz
  61. 0 0
      knife4gin/front/webjars/js/flowDiagram-18ba08e1-cb57159e.js
  62. BIN
      knife4gin/front/webjars/js/flowDiagram-18ba08e1-cb57159e.js.gz
  63. 1 0
      knife4gin/front/webjars/js/flowDiagram-v2-d21afba7-a39d7de1.js
  64. 0 0
      knife4gin/front/webjars/js/flowchart-elk-definition-d0e11316-e77b080f.js
  65. BIN
      knife4gin/front/webjars/js/flowchart-elk-definition-d0e11316-e77b080f.js.gz
  66. 0 0
      knife4gin/front/webjars/js/ganttDiagram-d9c0fa4d-5e2a95a9.js
  67. BIN
      knife4gin/front/webjars/js/ganttDiagram-d9c0fa4d-5e2a95a9.js.gz
  68. 0 0
      knife4gin/front/webjars/js/gitGraphDiagram-20ac17d4-a69fda16.js
  69. BIN
      knife4gin/front/webjars/js/gitGraphDiagram-20ac17d4-a69fda16.js.gz
  70. 0 0
      knife4gin/front/webjars/js/index-0980fb80-71e4c502.js
  71. BIN
      knife4gin/front/webjars/js/index-0980fb80-71e4c502.js.gz
  72. 2 0
      knife4gin/front/webjars/js/infoDiagram-98fa4f49-2349e369.js
  73. 1 0
      knife4gin/front/webjars/js/init-77b53fdd.js
  74. 0 0
      knife4gin/front/webjars/js/journeyDiagram-0938c3e3-d03add34.js
  75. BIN
      knife4gin/front/webjars/js/journeyDiagram-0938c3e3-d03add34.js.gz
  76. 0 0
      knife4gin/front/webjars/js/layout-741885b6.js
  77. BIN
      knife4gin/front/webjars/js/layout-741885b6.js.gz
  78. 1 0
      knife4gin/front/webjars/js/line-9e21cb29.js
  79. 0 0
      knife4gin/front/webjars/js/linear-57d89ee7.js
  80. 1 0
      knife4gin/front/webjars/js/mindmap-definition-e19a4bed-e0e6557f.js
  81. BIN
      knife4gin/front/webjars/js/mindmap-definition-e19a4bed-e0e6557f.js.gz
  82. 275 0
      knife4gin/front/webjars/js/mode-json-d377560b.js
  83. BIN
      knife4gin/front/webjars/js/mode-json-d377560b.js.gz
  84. 308 0
      knife4gin/front/webjars/js/mode-json5-ed4a693f.js
  85. BIN
      knife4gin/front/webjars/js/mode-json5-ed4a693f.js.gz
  86. 469 0
      knife4gin/front/webjars/js/mode-xml-6468964d.js
  87. BIN
      knife4gin/front/webjars/js/mode-xml-6468964d.js.gz
  88. 1 0
      knife4gin/front/webjars/js/ordinal-ba9b4969.js
  89. 0 0
      knife4gin/front/webjars/js/path-53f90ab3.js
  90. 0 0
      knife4gin/front/webjars/js/pieDiagram-cc8a845d-17f9a8b5.js
  91. BIN
      knife4gin/front/webjars/js/pieDiagram-cc8a845d-17f9a8b5.js.gz
  92. 0 0
      knife4gin/front/webjars/js/quadrantDiagram-d70906b3-16b9d5de.js
  93. BIN
      knife4gin/front/webjars/js/quadrantDiagram-d70906b3-16b9d5de.js.gz
  94. 0 0
      knife4gin/front/webjars/js/requirementDiagram-025ed9cd-9191e569.js
  95. BIN
      knife4gin/front/webjars/js/requirementDiagram-025ed9cd-9191e569.js.gz
  96. 0 0
      knife4gin/front/webjars/js/sankeyDiagram-86f1d020-182ce612.js
  97. BIN
      knife4gin/front/webjars/js/sankeyDiagram-86f1d020-182ce612.js.gz
  98. 0 0
      knife4gin/front/webjars/js/sequenceDiagram-d8e7905c-120656bc.js
  99. BIN
      knife4gin/front/webjars/js/sequenceDiagram-d8e7905c-120656bc.js.gz
  100. 0 0
      knife4gin/front/webjars/js/stateDiagram-b8fc1844-35959eab.js

+ 29 - 1
go.mod

@@ -8,9 +8,37 @@ module testgit.com/go_util_test2
 //replace gogs.3dyzt.com/zzq/go_util_test2 => ./go_util_test2
 replace test_git.com/go_util_test2 => ../
 
-
 //replace (
 //	./go_util_test2 => gogs.3dyzt.com/zzq/go_util_test2
 //)
 
 go 1.20
+
+require github.com/gin-gonic/gin v1.9.1
+
+require (
+	github.com/bytedance/sonic v1.9.1 // indirect
+	github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
+	github.com/gabriel-vasile/mimetype v1.4.2 // indirect
+	github.com/gin-contrib/sse v0.1.0 // indirect
+	github.com/go-playground/locales v0.14.1 // indirect
+	github.com/go-playground/universal-translator v0.18.1 // indirect
+	github.com/go-playground/validator/v10 v10.14.0 // indirect
+	github.com/goccy/go-json v0.10.2 // indirect
+	github.com/json-iterator/go v1.1.12 // indirect
+	github.com/klauspost/cpuid/v2 v2.2.4 // indirect
+	github.com/leodido/go-urn v1.2.4 // indirect
+	github.com/mattn/go-isatty v0.0.19 // indirect
+	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
+	github.com/modern-go/reflect2 v1.0.2 // indirect
+	github.com/pelletier/go-toml/v2 v2.0.8 // indirect
+	github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
+	github.com/ugorji/go/codec v1.2.11 // indirect
+	golang.org/x/arch v0.3.0 // indirect
+	golang.org/x/crypto v0.9.0 // indirect
+	golang.org/x/net v0.10.0 // indirect
+	golang.org/x/sys v0.8.0 // indirect
+	golang.org/x/text v0.9.0 // indirect
+	google.golang.org/protobuf v1.30.0 // indirect
+	gopkg.in/yaml.v3 v3.0.1 // indirect
+)

+ 15 - 0
knife4gin/front/doc.html

@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <link rel="icon" href="./favicon.ico" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title></title>
+    <script type="module" crossorigin src="./webjars/js/doc-9439ea18.js"></script>
+    <link rel="stylesheet" href="./webjars/css/doc-9f76a0ba.css">
+  </head>
+  <body>
+    <div id="app"></div>
+    
+  </body>
+</html>

BIN
knife4gin/front/favicon.ico


BIN
knife4gin/front/img/icons/android-chrome-192x192.png


BIN
knife4gin/front/img/icons/android-chrome-512x512.png


BIN
knife4gin/front/img/icons/apple-touch-icon-120x120.png


BIN
knife4gin/front/img/icons/apple-touch-icon-152x152.png


BIN
knife4gin/front/img/icons/apple-touch-icon-180x180.png


BIN
knife4gin/front/img/icons/apple-touch-icon-60x60.png


BIN
knife4gin/front/img/icons/apple-touch-icon-76x76.png


BIN
knife4gin/front/img/icons/apple-touch-icon.png


BIN
knife4gin/front/img/icons/favicon-16x16.png


BIN
knife4gin/front/img/icons/favicon-32x32.png


BIN
knife4gin/front/img/icons/msapplication-icon-144x144.png


BIN
knife4gin/front/img/icons/mstile-150x150.png


+ 149 - 0
knife4gin/front/img/icons/safari-pinned-tab.svg

@@ -0,0 +1,149 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+ "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
+ width="16.000000pt" height="16.000000pt" viewBox="0 0 16.000000 16.000000"
+ preserveAspectRatio="xMidYMid meet">
+<metadata>
+Created by potrace 1.11, written by Peter Selinger 2001-2013
+</metadata>
+<g transform="translate(0.000000,16.000000) scale(0.000320,-0.000320)"
+fill="#000000" stroke="none">
+<path d="M18 46618 c45 -75 122 -207 122 -211 0 -2 25 -45 55 -95 30 -50 55
+-96 55 -102 0 -5 5 -10 10 -10 6 0 10 -4 10 -9 0 -5 73 -135 161 -288 89 -153
+173 -298 187 -323 14 -25 32 -57 41 -72 88 -149 187 -324 189 -335 2 -7 8 -13
+13 -13 5 0 9 -4 9 -10 0 -5 46 -89 103 -187 175 -302 490 -846 507 -876 8 -16
+20 -36 25 -45 28 -46 290 -498 339 -585 13 -23 74 -129 136 -236 61 -107 123
+-215 137 -240 14 -25 29 -50 33 -56 5 -5 23 -37 40 -70 18 -33 38 -67 44 -75
+11 -16 21 -33 63 -109 14 -25 29 -50 33 -56 4 -5 21 -35 38 -65 55 -100 261
+-455 269 -465 4 -5 14 -21 20 -35 15 -29 41 -75 103 -180 24 -41 52 -88 60
+-105 9 -16 57 -100 107 -185 112 -193 362 -626 380 -660 8 -14 23 -38 33 -55
+11 -16 23 -37 27 -45 4 -8 26 -46 48 -85 23 -38 53 -90 67 -115 46 -81 64
+-113 178 -310 62 -107 121 -210 132 -227 37 -67 56 -99 85 -148 16 -27 32 -57
+36 -65 4 -8 15 -27 25 -42 9 -15 53 -89 96 -165 44 -76 177 -307 296 -513 120
+-206 268 -463 330 -570 131 -227 117 -203 200 -348 36 -62 73 -125 82 -140 10
+-15 21 -34 25 -42 4 -8 20 -37 36 -65 17 -27 38 -65 48 -82 49 -85 64 -111 87
+-153 13 -25 28 -49 32 -55 4 -5 78 -134 165 -285 87 -151 166 -288 176 -305
+10 -16 26 -43 35 -59 9 -17 125 -217 257 -445 132 -229 253 -441 270 -471 17
+-30 45 -79 64 -108 18 -29 33 -54 33 -57 0 -2 20 -37 44 -77 24 -40 123 -212
+221 -383 97 -170 190 -330 205 -355 16 -25 39 -65 53 -90 13 -25 81 -144 152
+-265 70 -121 137 -238 150 -260 12 -22 37 -65 55 -95 18 -30 43 -73 55 -95 12
+-22 48 -85 80 -140 77 -132 163 -280 190 -330 13 -22 71 -123 130 -225 59
+-102 116 -199 126 -217 10 -17 29 -50 43 -72 15 -22 26 -43 26 -45 0 -2 27
+-50 60 -106 33 -56 60 -103 60 -105 0 -2 55 -98 90 -155 8 -14 182 -316 239
+-414 13 -22 45 -79 72 -124 27 -46 49 -86 49 -89 0 -2 14 -24 30 -48 16 -24
+30 -46 30 -49 0 -5 74 -135 100 -176 5 -8 24 -42 43 -75 50 -88 58 -101 262
+-455 104 -179 199 -345 213 -370 14 -25 28 -49 32 -55 4 -5 17 -26 28 -45 10
+-19 62 -109 114 -200 114 -197 133 -230 170 -295 16 -27 33 -57 38 -65 17 -28
+96 -165 103 -180 4 -8 16 -28 26 -45 10 -16 77 -131 148 -255 72 -124 181
+-313 243 -420 62 -107 121 -209 131 -227 35 -62 323 -560 392 -678 38 -66 83
+-145 100 -175 16 -30 33 -59 37 -65 4 -5 17 -27 29 -47 34 -61 56 -100 90
+-156 17 -29 31 -55 31 -57 0 -2 17 -32 39 -67 21 -35 134 -229 251 -433 117
+-203 235 -407 261 -451 27 -45 49 -85 49 -88 0 -4 8 -19 19 -34 15 -21 200
+-341 309 -533 10 -19 33 -58 51 -87 17 -29 31 -54 31 -56 0 -2 25 -44 55 -94
+30 -50 55 -95 55 -98 0 -4 6 -15 14 -23 7 -9 27 -41 43 -71 17 -30 170 -297
+342 -594 171 -296 311 -542 311 -547 0 -5 5 -9 10 -9 6 0 10 -4 10 -10 0 -5
+22 -47 49 -92 27 -46 58 -99 68 -118 24 -43 81 -140 93 -160 5 -8 66 -114 135
+-235 69 -121 130 -227 135 -235 12 -21 259 -447 283 -490 10 -19 28 -47 38
+-62 11 -14 19 -29 19 -32 0 -3 37 -69 83 -148 99 -170 305 -526 337 -583 13
+-22 31 -53 41 -70 11 -16 22 -37 26 -45 7 -14 82 -146 103 -180 14 -24 181
+-311 205 -355 13 -22 46 -80 75 -130 29 -49 64 -110 78 -135 14 -25 51 -88 82
+-140 31 -52 59 -102 63 -110 4 -8 18 -33 31 -55 205 -353 284 -489 309 -535
+17 -30 45 -78 62 -106 18 -28 36 -60 39 -72 4 -12 12 -22 17 -22 5 0 9 -4 9
+-10 0 -5 109 -197 241 -427 133 -230 250 -431 259 -448 51 -90 222 -385 280
+-485 37 -63 78 -135 92 -160 14 -25 67 -117 118 -205 51 -88 101 -175 111
+-193 34 -58 55 -95 149 -257 51 -88 101 -173 110 -190 9 -16 76 -131 147 -255
+72 -124 140 -241 151 -260 61 -108 281 -489 355 -615 38 -66 77 -133 87 -150
+35 -63 91 -161 100 -175 14 -23 99 -169 128 -220 54 -97 135 -235 142 -245 4
+-5 20 -32 35 -60 26 -48 238 -416 276 -480 10 -16 26 -46 37 -65 30 -53 382
+-661 403 -695 10 -16 22 -37 26 -45 4 -8 26 -48 50 -88 24 -41 43 -75 43 -77
+0 -2 22 -40 50 -85 27 -45 50 -84 50 -86 0 -3 38 -69 83 -147 84 -142 302
+-520 340 -587 10 -19 34 -60 52 -90 18 -30 44 -75 57 -100 14 -25 45 -79 70
+-120 25 -41 56 -96 70 -121 14 -25 77 -133 138 -240 62 -107 122 -210 132
+-229 25 -43 310 -535 337 -581 11 -19 26 -45 34 -59 17 -32 238 -414 266 -460
+11 -19 24 -41 28 -49 3 -7 75 -133 160 -278 84 -146 153 -269 153 -274 0 -5 5
+-9 10 -9 6 0 10 -4 10 -10 0 -5 82 -150 181 -322 182 -314 201 -346 240 -415
+12 -21 80 -139 152 -263 71 -124 141 -245 155 -270 14 -25 28 -49 32 -55 6 -8
+145 -248 220 -380 37 -66 209 -362 229 -395 11 -19 24 -42 28 -49 4 -8 67
+-118 140 -243 73 -125 133 -230 133 -233 0 -2 15 -28 33 -57 19 -29 47 -78 64
+-108 17 -30 53 -93 79 -139 53 -90 82 -141 157 -272 82 -142 115 -199 381
+-659 142 -245 268 -463 281 -485 12 -22 71 -125 132 -230 60 -104 172 -298
+248 -430 76 -132 146 -253 156 -270 11 -16 22 -36 26 -44 3 -8 30 -54 60 -103
+29 -49 53 -91 53 -93 0 -3 18 -34 40 -70 22 -36 40 -67 40 -69 0 -2 37 -66 81
+-142 45 -77 98 -168 119 -204 20 -36 47 -81 58 -100 12 -19 27 -47 33 -62 6
+-16 15 -28 20 -28 5 0 9 -4 9 -9 0 -6 63 -118 140 -251 77 -133 140 -243 140
+-245 0 -2 18 -33 41 -70 22 -37 49 -83 60 -101 10 -19 29 -51 40 -71 25 -45
+109 -189 126 -218 7 -11 17 -29 22 -40 6 -11 22 -38 35 -60 14 -22 37 -62 52
+-90 14 -27 35 -62 45 -77 11 -14 19 -29 19 -32 0 -3 18 -35 40 -71 22 -36 40
+-67 40 -69 0 -2 19 -35 42 -72 23 -38 55 -94 72 -124 26 -47 139 -244 171
+-298 6 -9 21 -36 34 -60 28 -48 37 -51 51 -19 6 12 19 36 29 52 10 17 27 46
+38 65 11 19 104 181 208 360 103 179 199 345 213 370 14 25 42 74 64 109 21
+34 38 65 38 67 0 2 18 33 40 69 22 36 40 67 40 69 0 3 177 310 199 346 16 26
+136 234 140 244 2 5 25 44 52 88 27 44 49 81 49 84 0 2 18 34 40 70 22 36 40
+67 40 69 0 2 20 36 43 77 35 58 169 289 297 513 9 17 50 86 90 155 40 69 86
+150 103 180 16 30 35 62 41 70 6 8 16 24 22 35 35 64 72 129 167 293 59 100
+116 199 127 220 11 20 30 53 41 72 43 72 1070 1850 1121 1940 14 25 65 113
+113 195 48 83 96 166 107 185 10 19 28 50 38 68 11 18 73 124 137 235 64 111
+175 303 246 427 71 124 173 299 225 390 52 91 116 202 143 248 27 45 49 85 49
+89 0 4 6 14 14 22 7 9 28 43 46 76 26 47 251 436 378 655 11 19 29 51 40 70
+11 19 101 176 201 348 99 172 181 317 181 323 0 5 5 9 10 9 6 0 10 5 10 11 0
+6 8 23 18 37 11 15 32 52 49 82 16 30 130 228 253 440 122 212 234 405 248
+430 13 25 39 70 57 100 39 65 69 117 130 225 25 44 50 87 55 95 12 19 78 134
+220 380 61 107 129 224 150 260 161 277 222 382 246 425 15 28 47 83 71 123
+24 41 43 78 43 83 0 5 4 9 8 9 4 0 13 12 19 28 7 15 23 45 36 67 66 110 277
+478 277 483 0 3 6 13 14 21 7 9 27 41 43 71 17 30 45 80 63 110 34 57 375 649
+394 685 6 11 16 27 22 35 6 8 26 42 44 75 18 33 41 74 51 90 10 17 24 41 32
+55 54 97 72 128 88 152 11 14 19 28 19 30 0 3 79 141 175 308 96 167 175 305
+175 308 0 3 6 13 14 21 7 9 26 39 41 66 33 60 276 483 338 587 24 40 46 80 50
+88 4 8 13 24 20 35 14 23 95 163 125 215 11 19 52 91 92 160 40 69 80 139 90
+155 9 17 103 179 207 360 105 182 200 346 211 365 103 181 463 802 489 845 7
+11 15 27 19 35 4 8 29 51 55 95 64 110 828 1433 848 1470 9 17 24 41 33 55 9
+14 29 48 45 77 15 28 52 93 82 145 30 51 62 107 71 123 17 30 231 398 400 690
+51 88 103 179 115 202 12 23 26 48 32 55 6 7 24 38 40 68 17 30 61 107 98 170
+37 63 84 144 103 180 19 36 41 72 48 81 8 8 14 18 14 21 0 4 27 51 59 106 32
+55 72 124 89 154 16 29 71 125 122 213 51 88 104 180 118 205 13 25 28 50 32
+55 4 6 17 26 28 45 11 19 45 80 77 135 31 55 66 116 77 135 11 19 88 152 171
+295 401 694 620 1072 650 1125 11 19 87 152 170 295 83 143 158 273 166 288 9
+16 21 36 26 45 6 9 31 52 55 96 25 43 54 94 66 115 11 20 95 164 186 321 91
+157 173 299 182 315 9 17 26 46 37 65 12 19 66 114 121 210 56 96 108 186 117
+200 8 14 24 40 34 59 24 45 383 664 412 713 5 9 17 29 26 45 15 28 120 210
+241 419 36 61 68 117 72 125 4 8 12 23 19 34 35 57 245 420 262 453 11 20 35
+61 53 90 17 29 32 54 32 56 0 3 28 51 62 108 33 57 70 119 80 138 10 19 23 42
+28 50 5 8 32 53 59 100 27 47 149 258 271 470 122 212 234 405 248 430 30 53
+62 108 80 135 6 11 15 27 19 35 4 8 85 150 181 315 96 165 187 323 202 350 31
+56 116 202 130 225 5 8 25 42 43 75 19 33 92 159 162 280 149 257 157 271 202
+350 19 33 38 67 43 75 9 14 228 392 275 475 12 22 55 96 95 165 40 69 80 139
+90 155 24 42 202 350 221 383 9 15 27 47 41 72 14 25 75 131 136 236 61 106
+121 210 134 232 99 172 271 470 279 482 5 8 23 40 40 70 18 30 81 141 142 245
+60 105 121 210 135 235 14 25 71 124 127 220 56 96 143 247 194 335 51 88 96
+167 102 175 14 24 180 311 204 355 23 43 340 590 356 615 5 8 50 87 101 175
+171 301 517 898 582 1008 25 43 46 81 46 83 0 2 12 23 27 47 14 23 40 67 56
+97 16 30 35 62 42 70 7 8 15 22 18 30 4 8 20 38 37 65 16 28 33 57 37 65 6 12
+111 196 143 250 5 8 55 95 112 193 57 98 113 195 126 215 12 20 27 46 32 57 6
+11 14 27 20 35 5 8 76 130 156 270 80 140 165 287 187 325 23 39 52 90 66 115
+13 25 30 52 37 61 8 8 14 18 14 21 0 4 41 77 92 165 50 87 175 302 276 478
+101 176 208 360 236 408 28 49 67 117 86 152 19 35 41 70 48 77 6 6 12 15 12
+19 0 7 124 224 167 291 12 21 23 40 23 42 0 2 21 40 46 83 26 43 55 92 64 109
+54 95 327 568 354 614 19 30 45 75 59 100 71 128 82 145 89 148 4 2 8 8 8 13
+0 5 42 82 94 172 311 538 496 858 518 897 14 25 40 70 58 100 18 30 42 71 53
+90 10 19 79 139 152 265 73 127 142 246 153 265 10 19 43 76 72 125 29 50 63
+108 75 130 65 116 80 140 87 143 4 2 8 8 8 12 0 8 114 212 140 250 6 8 14 24
+20 35 5 11 54 97 108 190 l100 170 -9611 3 c-5286 1 -9614 -1 -9618 -5 -5 -6
+-419 -719 -619 -1068 -89 -155 -267 -463 -323 -560 -38 -66 -81 -140 -95 -165
+-31 -56 -263 -457 -526 -910 -110 -190 -224 -388 -254 -440 -29 -52 -61 -109
+-71 -125 -23 -39 -243 -420 -268 -465 -11 -19 -204 -352 -428 -740 -224 -388
+-477 -826 -563 -975 -85 -148 -185 -322 -222 -385 -37 -63 -120 -207 -185
+-320 -65 -113 -177 -306 -248 -430 -72 -124 -172 -297 -222 -385 -51 -88 -142
+-245 -202 -350 -131 -226 -247 -427 -408 -705 -65 -113 -249 -432 -410 -710
+-160 -278 -388 -673 -506 -877 -118 -205 -216 -373 -219 -373 -3 0 -52 82
+-109 183 -58 100 -144 250 -192 332 -95 164 -402 696 -647 1120 -85 149 -228
+396 -317 550 -212 365 -982 1700 -1008 1745 -10 19 -43 76 -72 125 -29 50 -64
+110 -77 135 -14 25 -63 110 -110 190 -47 80 -96 165 -110 190 -14 25 -99 171
+-188 325 -89 154 -174 300 -188 325 -13 25 -64 113 -112 195 -48 83 -140 242
+-205 355 -65 113 -183 317 -263 454 -79 137 -152 264 -163 282 -50 89 -335
+583 -354 614 -12 19 -34 58 -50 85 -15 28 -129 226 -253 440 -124 215 -235
+408 -247 430 -12 22 -69 121 -127 220 -58 99 -226 389 -373 645 -148 256 -324
+561 -392 678 -67 117 -134 232 -147 255 -13 23 -33 59 -46 80 l-22 37 -9615 0
+-9615 0 20 -32z"/>
+</g>
+</svg>

File diff suppressed because it is too large
+ 1 - 0
knife4gin/front/oauth/axios.min.js


BIN
knife4gin/front/oauth/axios.min.js.gz


+ 104 - 0
knife4gin/front/oauth/oauth2.html

@@ -0,0 +1,104 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
+    <title>Knife4j-OAuth2</title>
+    <script src="axios.min.js"></script>
+</head>
+<body>
+<script type="text/javascript">
+(function(){
+    function OAuth2(url){
+        this.url=url;
+        this.code=null;
+        this.accessToken=null;
+        this.tokenType=null;
+        this.state=null;
+        //缓存在localStorage中的对象
+        this.cacheValue=null;
+    }
+    OAuth2.prototype.init=function(){
+        var local=this.url;
+        this.code=this.getKey("code",local,"");
+        this.accessToken=this.getKey("access_token",local,"");
+        this.tokenType=this.getKey("token_type",local,"Bearer");
+        this.state=this.getKey("state",local);
+        if(window.localStorage){
+            var value=window.localStorage.getItem(this.state);
+            if(this.strNotBlank(value)){
+                this.cacheValue=JSON.parse(value);
+            }
+        }
+    }
+    OAuth2.prototype.auth=function(){
+        if(this.strNotBlank(this.code)){
+            this.authorizationCode();
+        }else{
+            this.implicit();
+        }
+    }
+    OAuth2.prototype.getKey=function(key,str,defaultValue){
+        var reg=new RegExp(".*?"+key+"=(.*?)(&.*)?$","ig");
+        var val=defaultValue;
+        if(reg.test(str)){
+            val=RegExp.$1;
+        }
+        return val;
+    }
+    OAuth2.prototype.strNotBlank=function(str){
+        var flag = false;
+        if ( str != undefined &&str != null &&str != "") {
+            flag = true;
+        }
+        return flag;
+    }
+
+    OAuth2.prototype.implicit=function(){
+        this.cacheValue.accessToken=this.tokenType+" "+this.accessToken;
+        this.cacheValue.tokenType=this.tokenType;
+        this.cacheValue.granted=true;
+        window.localStorage.setItem(this.state,JSON.stringify(this.cacheValue))
+        window.close();
+    }
+    OAuth2.prototype.authorizationCode=function(){
+        var that=this;
+        console.log(this.cacheValue);
+        var url=this.cacheValue.tokenUrl;
+        var params={
+            "grant_type":"authorization_code",
+            "code":this.code,
+            "redirect_uri":decodeURIComponent(this.cacheValue.redirectUri),
+            "client_id":this.cacheValue.clientId,
+            "client_secret":this.cacheValue.clientSecret
+        }
+        let instance=axios.create();
+        let requestConfig={
+            url: url,
+            method: 'post',
+            timeout: 0,
+            //此data必传,不然默认是data:undefined,https://github.com/axios/axios/issues/86
+            //否则axios会忽略请求头Content-Type
+            data: null,
+            params:params
+        }
+        instance.request(requestConfig).then(res=>{
+            let data=res.data;
+            if(data!=null&&data!=undefined) {
+                that.cacheValue.accessToken=data.token_type+" "+data.access_token;
+                that.cacheValue.tokenType=data.token_type;
+                that.cacheValue.granted=true;
+                window.localStorage.setItem(that.state,JSON.stringify(that.cacheValue))
+                window.close();
+            }
+            
+        })
+    }
+    var oauth=new OAuth2(window.location.href);
+    oauth.init();
+    oauth.auth();
+})()
+</script>
+
+</body>
+</html>

+ 2 - 0
knife4gin/front/robots.txt

@@ -0,0 +1,2 @@
+User-agent: *
+Disallow:

+ 1 - 0
knife4gin/front/webjars/css/Debug-a564e230.css

@@ -0,0 +1 @@
+[data-v-2c36fd88] .ant-row{position:relative;height:auto;margin-right:0;margin-left:0;zoom:1;display:block;-webkit-box-sizing:border-box;box-sizing:border-box}.method-select[data-v-2c36fd88] .ant-select-selection-item{color:#fff}

+ 1 - 0
knife4gin/front/webjars/css/Document-c78cdfeb.css

@@ -0,0 +1 @@
+.api-tab[data-v-ad328bdf]{margin-top:15px}.api-tab .ant-tag[data-v-ad328bdf]{height:32px;line-height:32px}.api-basic[data-v-ad328bdf]{padding:11px}.api-basic-title[data-v-ad328bdf]{font-size:14px;font-weight:700}.api-basic-body[data-v-ad328bdf]{font-size:14px;font-family:-webkit-body}.api-description[data-v-ad328bdf]{border-left:4px solid #ddd;line-height:30px}.api-body-desc[data-v-ad328bdf]{padding:10px;min-height:35px;box-sizing:border-box;border:1px solid #e8e8e8}.ant-card-body[data-v-ad328bdf]{padding:5px}.api-title[data-v-ad328bdf]{margin-top:12px;margin-bottom:8px;font-size:16px;font-weight:600;height:24px;line-height:24px;border-left:4px solid #00ab6d;text-indent:8px}.content-line[data-v-ad328bdf]{height:25px;line-height:25px}.content-line-count[data-v-ad328bdf]{height:35px;line-height:35px}.divider[data-v-ad328bdf]{margin:4px 0}

File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/css/doc-9f76a0ba.css


BIN
knife4gin/front/webjars/css/doc-9f76a0ba.css.gz


+ 1 - 0
knife4gin/front/webjars/js/CopyOutlined-b5ffbc08.js

@@ -0,0 +1 @@
+import{l as i,B as l}from"./doc-9439ea18.js";var u={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"}}]},name:"copy",theme:"outlined"};const p=u;function o(n){for(var t=1;t<arguments.length;t++){var e=arguments[t]!=null?Object(arguments[t]):{},r=Object.keys(e);typeof Object.getOwnPropertySymbols=="function"&&(r=r.concat(Object.getOwnPropertySymbols(e).filter(function(c){return Object.getOwnPropertyDescriptor(e,c).enumerable}))),r.forEach(function(c){f(n,c,e[c])})}return n}function f(n,t,e){return t in n?Object.defineProperty(n,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):n[t]=e,n}var a=function(t,e){var r=o({},t,e.attrs);return i(l,o({},r,{icon:p}),null)};a.displayName="CopyOutlined";a.inheritAttrs=!1;const d=a;export{d as C};

+ 1 - 0
knife4gin/front/webjars/js/DataType-cfcab27b.js

@@ -0,0 +1 @@
+import{_ as d,o as r,j as n,t as s,l as u,w as _,k as v,F as h,v as p,p as f,a1 as y}from"./doc-9439ea18.js";const g={name:"DataType",props:{text:{type:String,default:"string",required:!0},record:{type:Object,required:!0}},data(){return{validators:[]}},created(){this.intiValidator()},methods:{intiValidator(){var a=this;const e=this.record;if(e.validateInstance!=null){a.getJsonKeyLength(e.validateInstance);for(var t in e.validateInstance){var i=t+":"+e.validateInstance[t];a.validators.push({key:t,val:i})}}},getJsonKeyLength(a){var e=0;if(a!=null)for(var t in a)a.hasOwnProperty(t)&&e++;return e}}},m={key:0},x={key:1,class:"knife4j-request-validate-jsr"},k={slot:"title"};function V(a,e,t,i,l,I){const c=y;return r(),n("div",null,[t.record.validateStatus?(r(),n("span",x,[u(c,{placement:"right"},{default:_(()=>[v("template",k,[(r(!0),n(h,null,p(l.validators,o=>(r(),n("div",{key:o.key},s(o.val),1))),128))]),f(" "+s(t.text),1)]),_:1})])):(r(),n("span",m,s(t.text==null||t.text==""?"string":t.text),1))])}const w=d(g,[["render",V]]);export{w as default};

File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/js/Debug-0dddbf5f.js


BIN
knife4gin/front/webjars/js/Debug-0dddbf5f.js.gz


File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/js/DebugResponse-bfef447c.js


File diff suppressed because it is too large
+ 2 - 0
knife4gin/front/webjars/js/Document-bfff2334.js


BIN
knife4gin/front/webjars/js/Document-bfff2334.js.gz


File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/js/EditorDebugShow-bdfdb935.js


BIN
knife4gin/front/webjars/js/EditorDebugShow-bdfdb935.js.gz


File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/js/EditorScript-0cc633e1.js


BIN
knife4gin/front/webjars/js/EditorScript-0cc633e1.js.gz


+ 1 - 0
knife4gin/front/webjars/js/EditorShow-c8da811a.js

@@ -0,0 +1 @@
+import{_ as a,a0 as o,V as l,r as d,o as c,j as h,l as m,J as g}from"./doc-9439ea18.js";import{m as u,a as p,t as f,e as _}from"./ext-language_tools-602acc1a.js";o.config.setModuleUrl("ace/mode/json",u);o.config.setModuleUrl("ace/mode/xml",p);o.config.setModuleUrl("ace/theme/eclipse",f);o.config.setModuleUrl("ace/ext-language/tools",_);const x={name:"EditorShow",components:{editor:l},props:{value:{type:[String,Object],required:!0,default:""},xmlMode:{type:Boolean,default:!1,required:!1}},emits:["showDescription","change"],data(){return{lang:"json",editor:null,editorHeight:200}},methods:{change(e){this.$emit("change",e)},resetEditorHeight(){const e=this;setTimeout(()=>{let t=e.editor.session.getLength();t==1&&(t=10),e.editorHeight=t*16},300)},editorInit(e){const t=this;this.editor=e,this.xmlMode&&(this.lang="xml"),this.resetEditorHeight(),this.editor.renderer.on("afterRender",function(){t.$emit("showDescription","123")})}}};function E(e,t,s,v,i,n){const r=d("editor");return c(),h("div",null,[m(r,{value:s.value,onInit:n.editorInit,lang:i.lang,theme:"eclipse",width:"100%",style:g({height:i.editorHeight+"px"}),onInput:n.change},null,8,["value","onInit","lang","style","onInput"])])}const w=a(x,[["render",E]]);export{w as default};

+ 1 - 0
knife4gin/front/webjars/js/OAuth2-51d4e1b8.js

@@ -0,0 +1 @@
+import{_ as t}from"./doc-9439ea18.js";const e={name:"OAuth2"};function n(r,o,s,c,_,a){return null}const u=t(e,[["render",n]]);export{u as default};

File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/js/OpenApi-45790532.js


File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/js/arc-db38aed3.js


+ 1 - 0
knife4gin/front/webjars/js/array-9f3ba611.js

@@ -0,0 +1 @@
+function t(r){return typeof r=="object"&&"length"in r?r:Array.from(r)}export{t as a};

File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/js/c4Diagram-6af2d31c-577350fb.js


BIN
knife4gin/front/webjars/js/c4Diagram-6af2d31c-577350fb.js.gz


File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/js/classDiagram-14bbef50-6014567d.js


File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/js/classDiagram-v2-36dc72da-fa8ff7c6.js


File diff suppressed because it is too large
+ 5 - 0
knife4gin/front/webjars/js/clipboard-b510bfa2.js


File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/js/createText-a48a4c90-b31e51e0.js


BIN
knife4gin/front/webjars/js/createText-a48a4c90-b31e51e0.js.gz


File diff suppressed because it is too large
+ 4 - 0
knife4gin/front/webjars/js/doc-9439ea18.js


BIN
knife4gin/front/webjars/js/doc-9439ea18.js.gz


File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/js/edges-5ec2587c-bf509679.js


BIN
knife4gin/front/webjars/js/edges-5ec2587c-bf509679.js.gz


File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/js/erDiagram-4c71174c-a6a0cfbe.js


BIN
knife4gin/front/webjars/js/erDiagram-4c71174c-a6a0cfbe.js.gz


File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/js/ext-language_tools-602acc1a.js


File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/js/ext-language_tools-66adbdd7.js


BIN
knife4gin/front/webjars/js/ext-language_tools-66adbdd7.js.gz


+ 2296 - 0
knife4gin/front/webjars/js/ext-language_tools-ec14926a.js

@@ -0,0 +1,2296 @@
+ace.define("ace/snippets",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event_emitter","ace/lib/lang","ace/range","ace/range_list","ace/keyboard/hash_handler","ace/tokenizer","ace/clipboard","ace/editor"], function(require, exports, module){"use strict";
+var dom = require("./lib/dom");
+var oop = require("./lib/oop");
+var EventEmitter = require("./lib/event_emitter").EventEmitter;
+var lang = require("./lib/lang");
+var Range = require("./range").Range;
+var RangeList = require("./range_list").RangeList;
+var HashHandler = require("./keyboard/hash_handler").HashHandler;
+var Tokenizer = require("./tokenizer").Tokenizer;
+var clipboard = require("./clipboard");
+var VARIABLES = {
+    CURRENT_WORD: function (editor) {
+        return editor.session.getTextRange(editor.session.getWordRange());
+    },
+    SELECTION: function (editor, name, indentation) {
+        var text = editor.session.getTextRange();
+        if (indentation)
+            return text.replace(/\n\r?([ \t]*\S)/g, "\n" + indentation + "$1");
+        return text;
+    },
+    CURRENT_LINE: function (editor) {
+        return editor.session.getLine(editor.getCursorPosition().row);
+    },
+    PREV_LINE: function (editor) {
+        return editor.session.getLine(editor.getCursorPosition().row - 1);
+    },
+    LINE_INDEX: function (editor) {
+        return editor.getCursorPosition().row;
+    },
+    LINE_NUMBER: function (editor) {
+        return editor.getCursorPosition().row + 1;
+    },
+    SOFT_TABS: function (editor) {
+        return editor.session.getUseSoftTabs() ? "YES" : "NO";
+    },
+    TAB_SIZE: function (editor) {
+        return editor.session.getTabSize();
+    },
+    CLIPBOARD: function (editor) {
+        return clipboard.getText && clipboard.getText();
+    },
+    FILENAME: function (editor) {
+        return /[^/\\]*$/.exec(this.FILEPATH(editor))[0];
+    },
+    FILENAME_BASE: function (editor) {
+        return /[^/\\]*$/.exec(this.FILEPATH(editor))[0].replace(/\.[^.]*$/, "");
+    },
+    DIRECTORY: function (editor) {
+        return this.FILEPATH(editor).replace(/[^/\\]*$/, "");
+    },
+    FILEPATH: function (editor) { return "/not implemented.txt"; },
+    WORKSPACE_NAME: function () { return "Unknown"; },
+    FULLNAME: function () { return "Unknown"; },
+    BLOCK_COMMENT_START: function (editor) {
+        var mode = editor.session.$mode || {};
+        return mode.blockComment && mode.blockComment.start || "";
+    },
+    BLOCK_COMMENT_END: function (editor) {
+        var mode = editor.session.$mode || {};
+        return mode.blockComment && mode.blockComment.end || "";
+    },
+    LINE_COMMENT: function (editor) {
+        var mode = editor.session.$mode || {};
+        return mode.lineCommentStart || "";
+    },
+    CURRENT_YEAR: date.bind(null, { year: "numeric" }),
+    CURRENT_YEAR_SHORT: date.bind(null, { year: "2-digit" }),
+    CURRENT_MONTH: date.bind(null, { month: "numeric" }),
+    CURRENT_MONTH_NAME: date.bind(null, { month: "long" }),
+    CURRENT_MONTH_NAME_SHORT: date.bind(null, { month: "short" }),
+    CURRENT_DATE: date.bind(null, { day: "2-digit" }),
+    CURRENT_DAY_NAME: date.bind(null, { weekday: "long" }),
+    CURRENT_DAY_NAME_SHORT: date.bind(null, { weekday: "short" }),
+    CURRENT_HOUR: date.bind(null, { hour: "2-digit", hour12: false }),
+    CURRENT_MINUTE: date.bind(null, { minute: "2-digit" }),
+    CURRENT_SECOND: date.bind(null, { second: "2-digit" })
+};
+VARIABLES.SELECTED_TEXT = VARIABLES.SELECTION;
+function date(dateFormat) {
+    var str = new Date().toLocaleString("en-us", dateFormat);
+    return str.length == 1 ? "0" + str : str;
+}
+var SnippetManager = function () {
+    this.snippetMap = {};
+    this.snippetNameMap = {};
+};
+(function () {
+    oop.implement(this, EventEmitter);
+    this.getTokenizer = function () {
+        return SnippetManager.$tokenizer || this.createTokenizer();
+    };
+    this.createTokenizer = function () {
+        function TabstopToken(str) {
+            str = str.substr(1);
+            if (/^\d+$/.test(str))
+                return [{ tabstopId: parseInt(str, 10) }];
+            return [{ text: str }];
+        }
+        function escape(ch) {
+            return "(?:[^\\\\" + ch + "]|\\\\.)";
+        }
+        var formatMatcher = {
+            regex: "/(" + escape("/") + "+)/",
+            onMatch: function (val, state, stack) {
+                var ts = stack[0];
+                ts.fmtString = true;
+                ts.guard = val.slice(1, -1);
+                ts.flag = "";
+                return "";
+            },
+            next: "formatString"
+        };
+        SnippetManager.$tokenizer = new Tokenizer({
+            start: [
+                { regex: /\\./, onMatch: function (val, state, stack) {
+                        var ch = val[1];
+                        if (ch == "}" && stack.length) {
+                            val = ch;
+                        }
+                        else if ("`$\\".indexOf(ch) != -1) {
+                            val = ch;
+                        }
+                        return [val];
+                    } },
+                { regex: /}/, onMatch: function (val, state, stack) {
+                        return [stack.length ? stack.shift() : val];
+                    } },
+                { regex: /\$(?:\d+|\w+)/, onMatch: TabstopToken },
+                { regex: /\$\{[\dA-Z_a-z]+/, onMatch: function (str, state, stack) {
+                        var t = TabstopToken(str.substr(1));
+                        stack.unshift(t[0]);
+                        return t;
+                    }, next: "snippetVar" },
+                { regex: /\n/, token: "newline", merge: false }
+            ],
+            snippetVar: [
+                { regex: "\\|" + escape("\\|") + "*\\|", onMatch: function (val, state, stack) {
+                        var choices = val.slice(1, -1).replace(/\\[,|\\]|,/g, function (operator) {
+                            return operator.length == 2 ? operator[1] : "\x00";
+                        }).split("\x00").map(function (value) {
+                            return { value: value };
+                        });
+                        stack[0].choices = choices;
+                        return [choices[0]];
+                    }, next: "start" },
+                formatMatcher,
+                { regex: "([^:}\\\\]|\\\\.)*:?", token: "", next: "start" }
+            ],
+            formatString: [
+                { regex: /:/, onMatch: function (val, state, stack) {
+                        if (stack.length && stack[0].expectElse) {
+                            stack[0].expectElse = false;
+                            stack[0].ifEnd = { elseEnd: stack[0] };
+                            return [stack[0].ifEnd];
+                        }
+                        return ":";
+                    } },
+                { regex: /\\./, onMatch: function (val, state, stack) {
+                        var ch = val[1];
+                        if (ch == "}" && stack.length)
+                            val = ch;
+                        else if ("`$\\".indexOf(ch) != -1)
+                            val = ch;
+                        else if (ch == "n")
+                            val = "\n";
+                        else if (ch == "t")
+                            val = "\t";
+                        else if ("ulULE".indexOf(ch) != -1)
+                            val = { changeCase: ch, local: ch > "a" };
+                        return [val];
+                    } },
+                { regex: "/\\w*}", onMatch: function (val, state, stack) {
+                        var next = stack.shift();
+                        if (next)
+                            next.flag = val.slice(1, -1);
+                        this.next = next && next.tabstopId ? "start" : "";
+                        return [next || val];
+                    }, next: "start" },
+                { regex: /\$(?:\d+|\w+)/, onMatch: function (val, state, stack) {
+                        return [{ text: val.slice(1) }];
+                    } },
+                { regex: /\${\w+/, onMatch: function (val, state, stack) {
+                        var token = { text: val.slice(2) };
+                        stack.unshift(token);
+                        return [token];
+                    }, next: "formatStringVar" },
+                { regex: /\n/, token: "newline", merge: false },
+                { regex: /}/, onMatch: function (val, state, stack) {
+                        var next = stack.shift();
+                        this.next = next && next.tabstopId ? "start" : "";
+                        return [next || val];
+                    }, next: "start" }
+            ],
+            formatStringVar: [
+                { regex: /:\/\w+}/, onMatch: function (val, state, stack) {
+                        var ts = stack[0];
+                        ts.formatFunction = val.slice(2, -1);
+                        return [stack.shift()];
+                    }, next: "formatString" },
+                formatMatcher,
+                { regex: /:[\?\-+]?/, onMatch: function (val, state, stack) {
+                        if (val[1] == "+")
+                            stack[0].ifEnd = stack[0];
+                        if (val[1] == "?")
+                            stack[0].expectElse = true;
+                    }, next: "formatString" },
+                { regex: "([^:}\\\\]|\\\\.)*:?", token: "", next: "formatString" }
+            ]
+        });
+        return SnippetManager.$tokenizer;
+    };
+    this.tokenizeTmSnippet = function (str, startState) {
+        return this.getTokenizer().getLineTokens(str, startState).tokens.map(function (x) {
+            return x.value || x;
+        });
+    };
+    this.getVariableValue = function (editor, name, indentation) {
+        if (/^\d+$/.test(name))
+            return (this.variables.__ || {})[name] || "";
+        if (/^[A-Z]\d+$/.test(name))
+            return (this.variables[name[0] + "__"] || {})[name.substr(1)] || "";
+        name = name.replace(/^TM_/, "");
+        if (!this.variables.hasOwnProperty(name))
+            return "";
+        var value = this.variables[name];
+        if (typeof value == "function")
+            value = this.variables[name](editor, name, indentation);
+        return value == null ? "" : value;
+    };
+    this.variables = VARIABLES;
+    this.tmStrFormat = function (str, ch, editor) {
+        if (!ch.fmt)
+            return str;
+        var flag = ch.flag || "";
+        var re = ch.guard;
+        re = new RegExp(re, flag.replace(/[^gim]/g, ""));
+        var fmtTokens = typeof ch.fmt == "string" ? this.tokenizeTmSnippet(ch.fmt, "formatString") : ch.fmt;
+        var _self = this;
+        var formatted = str.replace(re, function () {
+            var oldArgs = _self.variables.__;
+            _self.variables.__ = [].slice.call(arguments);
+            var fmtParts = _self.resolveVariables(fmtTokens, editor);
+            var gChangeCase = "E";
+            for (var i = 0; i < fmtParts.length; i++) {
+                var ch = fmtParts[i];
+                if (typeof ch == "object") {
+                    fmtParts[i] = "";
+                    if (ch.changeCase && ch.local) {
+                        var next = fmtParts[i + 1];
+                        if (next && typeof next == "string") {
+                            if (ch.changeCase == "u")
+                                fmtParts[i] = next[0].toUpperCase();
+                            else
+                                fmtParts[i] = next[0].toLowerCase();
+                            fmtParts[i + 1] = next.substr(1);
+                        }
+                    }
+                    else if (ch.changeCase) {
+                        gChangeCase = ch.changeCase;
+                    }
+                }
+                else if (gChangeCase == "U") {
+                    fmtParts[i] = ch.toUpperCase();
+                }
+                else if (gChangeCase == "L") {
+                    fmtParts[i] = ch.toLowerCase();
+                }
+            }
+            _self.variables.__ = oldArgs;
+            return fmtParts.join("");
+        });
+        return formatted;
+    };
+    this.tmFormatFunction = function (str, ch, editor) {
+        if (ch.formatFunction == "upcase")
+            return str.toUpperCase();
+        if (ch.formatFunction == "downcase")
+            return str.toLowerCase();
+        return str;
+    };
+    this.resolveVariables = function (snippet, editor) {
+        var result = [];
+        var indentation = "";
+        var afterNewLine = true;
+        for (var i = 0; i < snippet.length; i++) {
+            var ch = snippet[i];
+            if (typeof ch == "string") {
+                result.push(ch);
+                if (ch == "\n") {
+                    afterNewLine = true;
+                    indentation = "";
+                }
+                else if (afterNewLine) {
+                    indentation = /^\t*/.exec(ch)[0];
+                    afterNewLine = /\S/.test(ch);
+                }
+                continue;
+            }
+            if (!ch)
+                continue;
+            afterNewLine = false;
+            if (ch.fmtString) {
+                var j = snippet.indexOf(ch, i + 1);
+                if (j == -1)
+                    j = snippet.length;
+                ch.fmt = snippet.slice(i + 1, j);
+                i = j;
+            }
+            if (ch.text) {
+                var value = this.getVariableValue(editor, ch.text, indentation) + "";
+                if (ch.fmtString)
+                    value = this.tmStrFormat(value, ch, editor);
+                if (ch.formatFunction)
+                    value = this.tmFormatFunction(value, ch, editor);
+                if (value && !ch.ifEnd) {
+                    result.push(value);
+                    gotoNext(ch);
+                }
+                else if (!value && ch.ifEnd) {
+                    gotoNext(ch.ifEnd);
+                }
+            }
+            else if (ch.elseEnd) {
+                gotoNext(ch.elseEnd);
+            }
+            else if (ch.tabstopId != null) {
+                result.push(ch);
+            }
+            else if (ch.changeCase != null) {
+                result.push(ch);
+            }
+        }
+        function gotoNext(ch) {
+            var i1 = snippet.indexOf(ch, i + 1);
+            if (i1 != -1)
+                i = i1;
+        }
+        return result;
+    };
+    var processSnippetText = function (editor, snippetText, options) {
+        if (options === void 0) { options = {}; }
+        var cursor = editor.getCursorPosition();
+        var line = editor.session.getLine(cursor.row);
+        var tabString = editor.session.getTabString();
+        var indentString = line.match(/^\s*/)[0];
+        if (cursor.column < indentString.length)
+            indentString = indentString.slice(0, cursor.column);
+        snippetText = snippetText.replace(/\r/g, "");
+        var tokens = this.tokenizeTmSnippet(snippetText);
+        tokens = this.resolveVariables(tokens, editor);
+        tokens = tokens.map(function (x) {
+            if (x == "\n" && !options.excludeExtraIndent)
+                return x + indentString;
+            if (typeof x == "string")
+                return x.replace(/\t/g, tabString);
+            return x;
+        });
+        var tabstops = [];
+        tokens.forEach(function (p, i) {
+            if (typeof p != "object")
+                return;
+            var id = p.tabstopId;
+            var ts = tabstops[id];
+            if (!ts) {
+                ts = tabstops[id] = [];
+                ts.index = id;
+                ts.value = "";
+                ts.parents = {};
+            }
+            if (ts.indexOf(p) !== -1)
+                return;
+            if (p.choices && !ts.choices)
+                ts.choices = p.choices;
+            ts.push(p);
+            var i1 = tokens.indexOf(p, i + 1);
+            if (i1 === -1)
+                return;
+            var value = tokens.slice(i + 1, i1);
+            var isNested = value.some(function (t) { return typeof t === "object"; });
+            if (isNested && !ts.value) {
+                ts.value = value;
+            }
+            else if (value.length && (!ts.value || typeof ts.value !== "string")) {
+                ts.value = value.join("");
+            }
+        });
+        tabstops.forEach(function (ts) { ts.length = 0; });
+        var expanding = {};
+        function copyValue(val) {
+            var copy = [];
+            for (var i = 0; i < val.length; i++) {
+                var p = val[i];
+                if (typeof p == "object") {
+                    if (expanding[p.tabstopId])
+                        continue;
+                    var j = val.lastIndexOf(p, i - 1);
+                    p = copy[j] || { tabstopId: p.tabstopId };
+                }
+                copy[i] = p;
+            }
+            return copy;
+        }
+        for (var i = 0; i < tokens.length; i++) {
+            var p = tokens[i];
+            if (typeof p != "object")
+                continue;
+            var id = p.tabstopId;
+            var ts = tabstops[id];
+            var i1 = tokens.indexOf(p, i + 1);
+            if (expanding[id]) {
+                if (expanding[id] === p) {
+                    delete expanding[id];
+                    Object.keys(expanding).forEach(function (parentId) {
+                        ts.parents[parentId] = true;
+                    });
+                }
+                continue;
+            }
+            expanding[id] = p;
+            var value = ts.value;
+            if (typeof value !== "string")
+                value = copyValue(value);
+            else if (p.fmt)
+                value = this.tmStrFormat(value, p, editor);
+            tokens.splice.apply(tokens, [i + 1, Math.max(0, i1 - i)].concat(value, p));
+            if (ts.indexOf(p) === -1)
+                ts.push(p);
+        }
+        var row = 0, column = 0;
+        var text = "";
+        tokens.forEach(function (t) {
+            if (typeof t === "string") {
+                var lines = t.split("\n");
+                if (lines.length > 1) {
+                    column = lines[lines.length - 1].length;
+                    row += lines.length - 1;
+                }
+                else
+                    column += t.length;
+                text += t;
+            }
+            else if (t) {
+                if (!t.start)
+                    t.start = { row: row, column: column };
+                else
+                    t.end = { row: row, column: column };
+            }
+        });
+        return {
+            text: text,
+            tabstops: tabstops,
+            tokens: tokens
+        };
+    };
+    this.getDisplayTextForSnippet = function (editor, snippetText) {
+        var processedSnippet = processSnippetText.call(this, editor, snippetText);
+        return processedSnippet.text;
+    };
+    this.insertSnippetForSelection = function (editor, snippetText, options) {
+        if (options === void 0) { options = {}; }
+        var processedSnippet = processSnippetText.call(this, editor, snippetText, options);
+        var range = editor.getSelectionRange();
+        if (options.range && options.range.compareRange(range) === 0) {
+            range = options.range;
+        }
+        var end = editor.session.replace(range, processedSnippet.text);
+        var tabstopManager = new TabstopManager(editor);
+        var selectionId = editor.inVirtualSelectionMode && editor.selection.index;
+        tabstopManager.addTabstops(processedSnippet.tabstops, range.start, end, selectionId);
+    };
+    this.insertSnippet = function (editor, snippetText, options) {
+        if (options === void 0) { options = {}; }
+        var self = this;
+        if (options.range && !(options.range instanceof Range))
+            options.range = Range.fromPoints(options.range.start, options.range.end);
+        if (editor.inVirtualSelectionMode)
+            return self.insertSnippetForSelection(editor, snippetText, options);
+        editor.forEachSelection(function () {
+            self.insertSnippetForSelection(editor, snippetText, options);
+        }, null, { keepOrder: true });
+        if (editor.tabstopManager)
+            editor.tabstopManager.tabNext();
+    };
+    this.$getScope = function (editor) {
+        var scope = editor.session.$mode.$id || "";
+        scope = scope.split("/").pop();
+        if (scope === "html" || scope === "php") {
+            if (scope === "php" && !editor.session.$mode.inlinePhp)
+                scope = "html";
+            var c = editor.getCursorPosition();
+            var state = editor.session.getState(c.row);
+            if (typeof state === "object") {
+                state = state[0];
+            }
+            if (state.substring) {
+                if (state.substring(0, 3) == "js-")
+                    scope = "javascript";
+                else if (state.substring(0, 4) == "css-")
+                    scope = "css";
+                else if (state.substring(0, 4) == "php-")
+                    scope = "php";
+            }
+        }
+        return scope;
+    };
+    this.getActiveScopes = function (editor) {
+        var scope = this.$getScope(editor);
+        var scopes = [scope];
+        var snippetMap = this.snippetMap;
+        if (snippetMap[scope] && snippetMap[scope].includeScopes) {
+            scopes.push.apply(scopes, snippetMap[scope].includeScopes);
+        }
+        scopes.push("_");
+        return scopes;
+    };
+    this.expandWithTab = function (editor, options) {
+        var self = this;
+        var result = editor.forEachSelection(function () {
+            return self.expandSnippetForSelection(editor, options);
+        }, null, { keepOrder: true });
+        if (result && editor.tabstopManager)
+            editor.tabstopManager.tabNext();
+        return result;
+    };
+    this.expandSnippetForSelection = function (editor, options) {
+        var cursor = editor.getCursorPosition();
+        var line = editor.session.getLine(cursor.row);
+        var before = line.substring(0, cursor.column);
+        var after = line.substr(cursor.column);
+        var snippetMap = this.snippetMap;
+        var snippet;
+        this.getActiveScopes(editor).some(function (scope) {
+            var snippets = snippetMap[scope];
+            if (snippets)
+                snippet = this.findMatchingSnippet(snippets, before, after);
+            return !!snippet;
+        }, this);
+        if (!snippet)
+            return false;
+        if (options && options.dryRun)
+            return true;
+        editor.session.doc.removeInLine(cursor.row, cursor.column - snippet.replaceBefore.length, cursor.column + snippet.replaceAfter.length);
+        this.variables.M__ = snippet.matchBefore;
+        this.variables.T__ = snippet.matchAfter;
+        this.insertSnippetForSelection(editor, snippet.content);
+        this.variables.M__ = this.variables.T__ = null;
+        return true;
+    };
+    this.findMatchingSnippet = function (snippetList, before, after) {
+        for (var i = snippetList.length; i--;) {
+            var s = snippetList[i];
+            if (s.startRe && !s.startRe.test(before))
+                continue;
+            if (s.endRe && !s.endRe.test(after))
+                continue;
+            if (!s.startRe && !s.endRe)
+                continue;
+            s.matchBefore = s.startRe ? s.startRe.exec(before) : [""];
+            s.matchAfter = s.endRe ? s.endRe.exec(after) : [""];
+            s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : "";
+            s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : "";
+            return s;
+        }
+    };
+    this.snippetMap = {};
+    this.snippetNameMap = {};
+    this.register = function (snippets, scope) {
+        var snippetMap = this.snippetMap;
+        var snippetNameMap = this.snippetNameMap;
+        var self = this;
+        if (!snippets)
+            snippets = [];
+        function wrapRegexp(src) {
+            if (src && !/^\^?\(.*\)\$?$|^\\b$/.test(src))
+                src = "(?:" + src + ")";
+            return src || "";
+        }
+        function guardedRegexp(re, guard, opening) {
+            re = wrapRegexp(re);
+            guard = wrapRegexp(guard);
+            if (opening) {
+                re = guard + re;
+                if (re && re[re.length - 1] != "$")
+                    re = re + "$";
+            }
+            else {
+                re = re + guard;
+                if (re && re[0] != "^")
+                    re = "^" + re;
+            }
+            return new RegExp(re);
+        }
+        function addSnippet(s) {
+            if (!s.scope)
+                s.scope = scope || "_";
+            scope = s.scope;
+            if (!snippetMap[scope]) {
+                snippetMap[scope] = [];
+                snippetNameMap[scope] = {};
+            }
+            var map = snippetNameMap[scope];
+            if (s.name) {
+                var old = map[s.name];
+                if (old)
+                    self.unregister(old);
+                map[s.name] = s;
+            }
+            snippetMap[scope].push(s);
+            if (s.prefix)
+                s.tabTrigger = s.prefix;
+            if (!s.content && s.body)
+                s.content = Array.isArray(s.body) ? s.body.join("\n") : s.body;
+            if (s.tabTrigger && !s.trigger) {
+                if (!s.guard && /^\w/.test(s.tabTrigger))
+                    s.guard = "\\b";
+                s.trigger = lang.escapeRegExp(s.tabTrigger);
+            }
+            if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard)
+                return;
+            s.startRe = guardedRegexp(s.trigger, s.guard, true);
+            s.triggerRe = new RegExp(s.trigger);
+            s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true);
+            s.endTriggerRe = new RegExp(s.endTrigger);
+        }
+        if (Array.isArray(snippets)) {
+            snippets.forEach(addSnippet);
+        }
+        else {
+            Object.keys(snippets).forEach(function (key) {
+                addSnippet(snippets[key]);
+            });
+        }
+        this._signal("registerSnippets", { scope: scope });
+    };
+    this.unregister = function (snippets, scope) {
+        var snippetMap = this.snippetMap;
+        var snippetNameMap = this.snippetNameMap;
+        function removeSnippet(s) {
+            var nameMap = snippetNameMap[s.scope || scope];
+            if (nameMap && nameMap[s.name]) {
+                delete nameMap[s.name];
+                var map = snippetMap[s.scope || scope];
+                var i = map && map.indexOf(s);
+                if (i >= 0)
+                    map.splice(i, 1);
+            }
+        }
+        if (snippets.content)
+            removeSnippet(snippets);
+        else if (Array.isArray(snippets))
+            snippets.forEach(removeSnippet);
+    };
+    this.parseSnippetFile = function (str) {
+        str = str.replace(/\r/g, "");
+        var list = [], snippet = {};
+        var re = /^#.*|^({[\s\S]*})\s*$|^(\S+) (.*)$|^((?:\n*\t.*)+)/gm;
+        var m;
+        while (m = re.exec(str)) {
+            if (m[1]) {
+                try {
+                    snippet = JSON.parse(m[1]);
+                    list.push(snippet);
+                }
+                catch (e) { }
+            }
+            if (m[4]) {
+                snippet.content = m[4].replace(/^\t/gm, "");
+                list.push(snippet);
+                snippet = {};
+            }
+            else {
+                var key = m[2], val = m[3];
+                if (key == "regex") {
+                    var guardRe = /\/((?:[^\/\\]|\\.)*)|$/g;
+                    snippet.guard = guardRe.exec(val)[1];
+                    snippet.trigger = guardRe.exec(val)[1];
+                    snippet.endTrigger = guardRe.exec(val)[1];
+                    snippet.endGuard = guardRe.exec(val)[1];
+                }
+                else if (key == "snippet") {
+                    snippet.tabTrigger = val.match(/^\S*/)[0];
+                    if (!snippet.name)
+                        snippet.name = val;
+                }
+                else if (key) {
+                    snippet[key] = val;
+                }
+            }
+        }
+        return list;
+    };
+    this.getSnippetByName = function (name, editor) {
+        var snippetMap = this.snippetNameMap;
+        var snippet;
+        this.getActiveScopes(editor).some(function (scope) {
+            var snippets = snippetMap[scope];
+            if (snippets)
+                snippet = snippets[name];
+            return !!snippet;
+        }, this);
+        return snippet;
+    };
+}).call(SnippetManager.prototype);
+var TabstopManager = function (editor) {
+    if (editor.tabstopManager)
+        return editor.tabstopManager;
+    editor.tabstopManager = this;
+    this.$onChange = this.onChange.bind(this);
+    this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule;
+    this.$onChangeSession = this.onChangeSession.bind(this);
+    this.$onAfterExec = this.onAfterExec.bind(this);
+    this.attach(editor);
+};
+(function () {
+    this.attach = function (editor) {
+        this.index = 0;
+        this.ranges = [];
+        this.tabstops = [];
+        this.$openTabstops = null;
+        this.selectedTabstop = null;
+        this.editor = editor;
+        this.editor.on("change", this.$onChange);
+        this.editor.on("changeSelection", this.$onChangeSelection);
+        this.editor.on("changeSession", this.$onChangeSession);
+        this.editor.commands.on("afterExec", this.$onAfterExec);
+        this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);
+    };
+    this.detach = function () {
+        this.tabstops.forEach(this.removeTabstopMarkers, this);
+        this.ranges = null;
+        this.tabstops = null;
+        this.selectedTabstop = null;
+        this.editor.removeListener("change", this.$onChange);
+        this.editor.removeListener("changeSelection", this.$onChangeSelection);
+        this.editor.removeListener("changeSession", this.$onChangeSession);
+        this.editor.commands.removeListener("afterExec", this.$onAfterExec);
+        this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);
+        this.editor.tabstopManager = null;
+        this.editor = null;
+    };
+    this.onChange = function (delta) {
+        var isRemove = delta.action[0] == "r";
+        var selectedTabstop = this.selectedTabstop || {};
+        var parents = selectedTabstop.parents || {};
+        var tabstops = (this.tabstops || []).slice();
+        for (var i = 0; i < tabstops.length; i++) {
+            var ts = tabstops[i];
+            var active = ts == selectedTabstop || parents[ts.index];
+            ts.rangeList.$bias = active ? 0 : 1;
+            if (delta.action == "remove" && ts !== selectedTabstop) {
+                var parentActive = ts.parents && ts.parents[selectedTabstop.index];
+                var startIndex = ts.rangeList.pointIndex(delta.start, parentActive);
+                startIndex = startIndex < 0 ? -startIndex - 1 : startIndex + 1;
+                var endIndex = ts.rangeList.pointIndex(delta.end, parentActive);
+                endIndex = endIndex < 0 ? -endIndex - 1 : endIndex - 1;
+                var toRemove = ts.rangeList.ranges.slice(startIndex, endIndex);
+                for (var j = 0; j < toRemove.length; j++)
+                    this.removeRange(toRemove[j]);
+            }
+            ts.rangeList.$onChange(delta);
+        }
+        var session = this.editor.session;
+        if (!this.$inChange && isRemove && session.getLength() == 1 && !session.getValue())
+            this.detach();
+    };
+    this.updateLinkedFields = function () {
+        var ts = this.selectedTabstop;
+        if (!ts || !ts.hasLinkedRanges || !ts.firstNonLinked)
+            return;
+        this.$inChange = true;
+        var session = this.editor.session;
+        var text = session.getTextRange(ts.firstNonLinked);
+        for (var i = 0; i < ts.length; i++) {
+            var range = ts[i];
+            if (!range.linked)
+                continue;
+            var original = range.original;
+            var fmt = exports.snippetManager.tmStrFormat(text, original, this.editor);
+            session.replace(range, fmt);
+        }
+        this.$inChange = false;
+    };
+    this.onAfterExec = function (e) {
+        if (e.command && !e.command.readOnly)
+            this.updateLinkedFields();
+    };
+    this.onChangeSelection = function () {
+        if (!this.editor)
+            return;
+        var lead = this.editor.selection.lead;
+        var anchor = this.editor.selection.anchor;
+        var isEmpty = this.editor.selection.isEmpty();
+        for (var i = 0; i < this.ranges.length; i++) {
+            if (this.ranges[i].linked)
+                continue;
+            var containsLead = this.ranges[i].contains(lead.row, lead.column);
+            var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column);
+            if (containsLead && containsAnchor)
+                return;
+        }
+        this.detach();
+    };
+    this.onChangeSession = function () {
+        this.detach();
+    };
+    this.tabNext = function (dir) {
+        var max = this.tabstops.length;
+        var index = this.index + (dir || 1);
+        index = Math.min(Math.max(index, 1), max);
+        if (index == max)
+            index = 0;
+        this.selectTabstop(index);
+        if (index === 0)
+            this.detach();
+    };
+    this.selectTabstop = function (index) {
+        this.$openTabstops = null;
+        var ts = this.tabstops[this.index];
+        if (ts)
+            this.addTabstopMarkers(ts);
+        this.index = index;
+        ts = this.tabstops[this.index];
+        if (!ts || !ts.length)
+            return;
+        this.selectedTabstop = ts;
+        var range = ts.firstNonLinked || ts;
+        if (ts.choices)
+            range.cursor = range.start;
+        if (!this.editor.inVirtualSelectionMode) {
+            var sel = this.editor.multiSelect;
+            sel.toSingleRange(range);
+            for (var i = 0; i < ts.length; i++) {
+                if (ts.hasLinkedRanges && ts[i].linked)
+                    continue;
+                sel.addRange(ts[i].clone(), true);
+            }
+        }
+        else {
+            this.editor.selection.fromOrientedRange(range);
+        }
+        this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);
+        if (this.selectedTabstop && this.selectedTabstop.choices)
+            this.editor.execCommand("startAutocomplete", { matches: this.selectedTabstop.choices });
+    };
+    this.addTabstops = function (tabstops, start, end) {
+        var useLink = this.useLink || !this.editor.getOption("enableMultiselect");
+        if (!this.$openTabstops)
+            this.$openTabstops = [];
+        if (!tabstops[0]) {
+            var p = Range.fromPoints(end, end);
+            moveRelative(p.start, start);
+            moveRelative(p.end, start);
+            tabstops[0] = [p];
+            tabstops[0].index = 0;
+        }
+        var i = this.index;
+        var arg = [i + 1, 0];
+        var ranges = this.ranges;
+        tabstops.forEach(function (ts, index) {
+            var dest = this.$openTabstops[index] || ts;
+            for (var i = 0; i < ts.length; i++) {
+                var p = ts[i];
+                var range = Range.fromPoints(p.start, p.end || p.start);
+                movePoint(range.start, start);
+                movePoint(range.end, start);
+                range.original = p;
+                range.tabstop = dest;
+                ranges.push(range);
+                if (dest != ts)
+                    dest.unshift(range);
+                else
+                    dest[i] = range;
+                if (p.fmtString || (dest.firstNonLinked && useLink)) {
+                    range.linked = true;
+                    dest.hasLinkedRanges = true;
+                }
+                else if (!dest.firstNonLinked)
+                    dest.firstNonLinked = range;
+            }
+            if (!dest.firstNonLinked)
+                dest.hasLinkedRanges = false;
+            if (dest === ts) {
+                arg.push(dest);
+                this.$openTabstops[index] = dest;
+            }
+            this.addTabstopMarkers(dest);
+            dest.rangeList = dest.rangeList || new RangeList();
+            dest.rangeList.$bias = 0;
+            dest.rangeList.addList(dest);
+        }, this);
+        if (arg.length > 2) {
+            if (this.tabstops.length)
+                arg.push(arg.splice(2, 1)[0]);
+            this.tabstops.splice.apply(this.tabstops, arg);
+        }
+    };
+    this.addTabstopMarkers = function (ts) {
+        var session = this.editor.session;
+        ts.forEach(function (range) {
+            if (!range.markerId)
+                range.markerId = session.addMarker(range, "ace_snippet-marker", "text");
+        });
+    };
+    this.removeTabstopMarkers = function (ts) {
+        var session = this.editor.session;
+        ts.forEach(function (range) {
+            session.removeMarker(range.markerId);
+            range.markerId = null;
+        });
+    };
+    this.removeRange = function (range) {
+        var i = range.tabstop.indexOf(range);
+        if (i != -1)
+            range.tabstop.splice(i, 1);
+        i = this.ranges.indexOf(range);
+        if (i != -1)
+            this.ranges.splice(i, 1);
+        i = range.tabstop.rangeList.ranges.indexOf(range);
+        if (i != -1)
+            range.tabstop.splice(i, 1);
+        this.editor.session.removeMarker(range.markerId);
+        if (!range.tabstop.length) {
+            i = this.tabstops.indexOf(range.tabstop);
+            if (i != -1)
+                this.tabstops.splice(i, 1);
+            if (!this.tabstops.length)
+                this.detach();
+        }
+    };
+    this.keyboardHandler = new HashHandler();
+    this.keyboardHandler.bindKeys({
+        "Tab": function (editor) {
+            if (exports.snippetManager && exports.snippetManager.expandWithTab(editor))
+                return;
+            editor.tabstopManager.tabNext(1);
+            editor.renderer.scrollCursorIntoView();
+        },
+        "Shift-Tab": function (editor) {
+            editor.tabstopManager.tabNext(-1);
+            editor.renderer.scrollCursorIntoView();
+        },
+        "Esc": function (editor) {
+            editor.tabstopManager.detach();
+        }
+    });
+}).call(TabstopManager.prototype);
+var movePoint = function (point, diff) {
+    if (point.row == 0)
+        point.column += diff.column;
+    point.row += diff.row;
+};
+var moveRelative = function (point, start) {
+    if (point.row == start.row)
+        point.column -= start.column;
+    point.row -= start.row;
+};
+dom.importCssString("\n.ace_snippet-marker {\n    -moz-box-sizing: border-box;\n    box-sizing: border-box;\n    background: rgba(194, 193, 208, 0.09);\n    border: 1px dotted rgba(211, 208, 235, 0.62);\n    position: absolute;\n}", "snippets.css", false);
+exports.snippetManager = new SnippetManager();
+var Editor = require("./editor").Editor;
+(function () {
+    this.insertSnippet = function (content, options) {
+        return exports.snippetManager.insertSnippet(this, content, options);
+    };
+    this.expandSnippet = function (options) {
+        return exports.snippetManager.expandWithTab(this, options);
+    };
+}).call(Editor.prototype);
+
+});
+
+ace.define("ace/autocomplete/popup",["require","exports","module","ace/virtual_renderer","ace/editor","ace/range","ace/lib/event","ace/lib/lang","ace/lib/dom","ace/config"], function(require, exports, module){"use strict";
+var Renderer = require("../virtual_renderer").VirtualRenderer;
+var Editor = require("../editor").Editor;
+var Range = require("../range").Range;
+var event = require("../lib/event");
+var lang = require("../lib/lang");
+var dom = require("../lib/dom");
+var nls = require("../config").nls;
+var getAriaId = function (index) {
+    return "suggest-aria-id:".concat(index);
+};
+var $singleLineEditor = function (el) {
+    var renderer = new Renderer(el);
+    renderer.$maxLines = 4;
+    var editor = new Editor(renderer);
+    editor.setHighlightActiveLine(false);
+    editor.setShowPrintMargin(false);
+    editor.renderer.setShowGutter(false);
+    editor.renderer.setHighlightGutterLine(false);
+    editor.$mouseHandler.$focusTimeout = 0;
+    editor.$highlightTagPending = true;
+    return editor;
+};
+var AcePopup = /** @class */ (function () {
+    function AcePopup(parentNode) {
+        var el = dom.createElement("div");
+        var popup = new $singleLineEditor(el);
+        if (parentNode) {
+            parentNode.appendChild(el);
+        }
+        el.style.display = "none";
+        popup.renderer.content.style.cursor = "default";
+        popup.renderer.setStyle("ace_autocomplete");
+        popup.renderer.container.setAttribute("role", "listbox");
+        popup.renderer.container.setAttribute("aria-label", nls("Autocomplete suggestions"));
+        popup.setOption("displayIndentGuides", false);
+        popup.setOption("dragDelay", 150);
+        var noop = function () { };
+        popup.focus = noop;
+        popup.$isFocused = true;
+        popup.renderer.$cursorLayer.restartTimer = noop;
+        popup.renderer.$cursorLayer.element.style.opacity = 0;
+        popup.renderer.$maxLines = 8;
+        popup.renderer.$keepTextAreaAtCursor = false;
+        popup.setHighlightActiveLine(false);
+        popup.session.highlight("");
+        popup.session.$searchHighlight.clazz = "ace_highlight-marker";
+        popup.on("mousedown", function (e) {
+            var pos = e.getDocumentPosition();
+            popup.selection.moveToPosition(pos);
+            selectionMarker.start.row = selectionMarker.end.row = pos.row;
+            e.stop();
+        });
+        var lastMouseEvent;
+        var hoverMarker = new Range(-1, 0, -1, Infinity);
+        var selectionMarker = new Range(-1, 0, -1, Infinity);
+        selectionMarker.id = popup.session.addMarker(selectionMarker, "ace_active-line", "fullLine");
+        popup.setSelectOnHover = function (val) {
+            if (!val) {
+                hoverMarker.id = popup.session.addMarker(hoverMarker, "ace_line-hover", "fullLine");
+            }
+            else if (hoverMarker.id) {
+                popup.session.removeMarker(hoverMarker.id);
+                hoverMarker.id = null;
+            }
+        };
+        popup.setSelectOnHover(false);
+        popup.on("mousemove", function (e) {
+            if (!lastMouseEvent) {
+                lastMouseEvent = e;
+                return;
+            }
+            if (lastMouseEvent.x == e.x && lastMouseEvent.y == e.y) {
+                return;
+            }
+            lastMouseEvent = e;
+            lastMouseEvent.scrollTop = popup.renderer.scrollTop;
+            var row = lastMouseEvent.getDocumentPosition().row;
+            if (hoverMarker.start.row != row) {
+                if (!hoverMarker.id)
+                    popup.setRow(row);
+                setHoverMarker(row);
+            }
+        });
+        popup.renderer.on("beforeRender", function () {
+            if (lastMouseEvent && hoverMarker.start.row != -1) {
+                lastMouseEvent.$pos = null;
+                var row = lastMouseEvent.getDocumentPosition().row;
+                if (!hoverMarker.id)
+                    popup.setRow(row);
+                setHoverMarker(row, true);
+            }
+        });
+        popup.renderer.on("afterRender", function () {
+            var row = popup.getRow();
+            var t = popup.renderer.$textLayer;
+            var selected = t.element.childNodes[row - t.config.firstRow];
+            var el = document.activeElement; // Active element is textarea of main editor
+            if (selected !== t.selectedNode && t.selectedNode) {
+                dom.removeCssClass(t.selectedNode, "ace_selected");
+                el.removeAttribute("aria-activedescendant");
+                t.selectedNode.removeAttribute("id");
+            }
+            t.selectedNode = selected;
+            if (selected) {
+                dom.addCssClass(selected, "ace_selected");
+                var ariaId = getAriaId(row);
+                selected.id = ariaId;
+                popup.renderer.container.setAttribute("aria-activedescendant", ariaId);
+                el.setAttribute("aria-activedescendant", ariaId);
+                selected.setAttribute("role", "option");
+                selected.setAttribute("aria-label", popup.getData(row).value);
+                selected.setAttribute("aria-setsize", popup.data.length);
+                selected.setAttribute("aria-posinset", row);
+            }
+        });
+        var hideHoverMarker = function () { setHoverMarker(-1); };
+        var setHoverMarker = function (row, suppressRedraw) {
+            if (row !== hoverMarker.start.row) {
+                hoverMarker.start.row = hoverMarker.end.row = row;
+                if (!suppressRedraw)
+                    popup.session._emit("changeBackMarker");
+                popup._emit("changeHoverMarker");
+            }
+        };
+        popup.getHoveredRow = function () {
+            return hoverMarker.start.row;
+        };
+        event.addListener(popup.container, "mouseout", hideHoverMarker);
+        popup.on("hide", hideHoverMarker);
+        popup.on("changeSelection", hideHoverMarker);
+        popup.session.doc.getLength = function () {
+            return popup.data.length;
+        };
+        popup.session.doc.getLine = function (i) {
+            var data = popup.data[i];
+            if (typeof data == "string")
+                return data;
+            return (data && data.value) || "";
+        };
+        var bgTokenizer = popup.session.bgTokenizer;
+        bgTokenizer.$tokenizeRow = function (row) {
+            var data = popup.data[row];
+            var tokens = [];
+            if (!data)
+                return tokens;
+            if (typeof data == "string")
+                data = { value: data };
+            var caption = data.caption || data.value || data.name;
+            function addToken(value, className) {
+                value && tokens.push({
+                    type: (data.className || "") + (className || ""),
+                    value: value
+                });
+            }
+            var lower = caption.toLowerCase();
+            var filterText = (popup.filterText || "").toLowerCase();
+            var lastIndex = 0;
+            var lastI = 0;
+            for (var i = 0; i <= filterText.length; i++) {
+                if (i != lastI && (data.matchMask & (1 << i) || i == filterText.length)) {
+                    var sub = filterText.slice(lastI, i);
+                    lastI = i;
+                    var index = lower.indexOf(sub, lastIndex);
+                    if (index == -1)
+                        continue;
+                    addToken(caption.slice(lastIndex, index), "");
+                    lastIndex = index + sub.length;
+                    addToken(caption.slice(index, lastIndex), "completion-highlight");
+                }
+            }
+            addToken(caption.slice(lastIndex, caption.length), "");
+            tokens.push({ type: "completion-spacer", value: " " });
+            if (data.meta)
+                tokens.push({ type: "completion-meta", value: data.meta });
+            if (data.message)
+                tokens.push({ type: "completion-message", value: data.message });
+            return tokens;
+        };
+        bgTokenizer.$updateOnChange = noop;
+        bgTokenizer.start = noop;
+        popup.session.$computeWidth = function () {
+            return this.screenWidth = 0;
+        };
+        popup.isOpen = false;
+        popup.isTopdown = false;
+        popup.autoSelect = true;
+        popup.filterText = "";
+        popup.data = [];
+        popup.setData = function (list, filterText) {
+            popup.filterText = filterText || "";
+            popup.setValue(lang.stringRepeat("\n", list.length), -1);
+            popup.data = list || [];
+            popup.setRow(0);
+        };
+        popup.getData = function (row) {
+            return popup.data[row];
+        };
+        popup.getRow = function () {
+            return selectionMarker.start.row;
+        };
+        popup.setRow = function (line) {
+            line = Math.max(this.autoSelect ? 0 : -1, Math.min(this.data.length - 1, line));
+            if (selectionMarker.start.row != line) {
+                popup.selection.clearSelection();
+                selectionMarker.start.row = selectionMarker.end.row = line || 0;
+                popup.session._emit("changeBackMarker");
+                popup.moveCursorTo(line || 0, 0);
+                if (popup.isOpen)
+                    popup._signal("select");
+            }
+        };
+        popup.on("changeSelection", function () {
+            if (popup.isOpen)
+                popup.setRow(popup.selection.lead.row);
+            popup.renderer.scrollCursorIntoView();
+        });
+        popup.hide = function () {
+            this.container.style.display = "none";
+            popup.anchorPos = null;
+            popup.anchor = null;
+            if (popup.isOpen) {
+                popup.isOpen = false;
+                this._signal("hide");
+            }
+        };
+        popup.tryShow = function (pos, lineHeight, anchor, forceShow) {
+            if (!forceShow && popup.isOpen && popup.anchorPos && popup.anchor &&
+                popup.anchorPos.top === pos.top && popup.anchorPos.left === pos.left &&
+                popup.anchor === anchor) {
+                return true;
+            }
+            var el = this.container;
+            var screenHeight = window.innerHeight;
+            var screenWidth = window.innerWidth;
+            var renderer = this.renderer;
+            var maxH = renderer.$maxLines * lineHeight * 1.4;
+            var dims = { top: 0, bottom: 0, left: 0 };
+            var spaceBelow = screenHeight - pos.top - 3 * this.$borderSize - lineHeight;
+            var spaceAbove = pos.top - 3 * this.$borderSize;
+            if (!anchor) {
+                if (spaceAbove <= spaceBelow || spaceBelow >= maxH) {
+                    anchor = "bottom";
+                }
+                else {
+                    anchor = "top";
+                }
+            }
+            if (anchor === "top") {
+                dims.bottom = pos.top - this.$borderSize;
+                dims.top = dims.bottom - maxH;
+            }
+            else if (anchor === "bottom") {
+                dims.top = pos.top + lineHeight + this.$borderSize;
+                dims.bottom = dims.top + maxH;
+            }
+            var fitsX = dims.top >= 0 && dims.bottom <= screenHeight;
+            if (!forceShow && !fitsX) {
+                return false;
+            }
+            if (!fitsX) {
+                if (anchor === "top") {
+                    renderer.$maxPixelHeight = spaceAbove;
+                }
+                else {
+                    renderer.$maxPixelHeight = spaceBelow;
+                }
+            }
+            else {
+                renderer.$maxPixelHeight = null;
+            }
+            if (anchor === "top") {
+                el.style.top = "";
+                el.style.bottom = (screenHeight - dims.bottom) + "px";
+                popup.isTopdown = false;
+            }
+            else {
+                el.style.top = dims.top + "px";
+                el.style.bottom = "";
+                popup.isTopdown = true;
+            }
+            el.style.display = "";
+            var left = pos.left;
+            if (left + el.offsetWidth > screenWidth)
+                left = screenWidth - el.offsetWidth;
+            el.style.left = left + "px";
+            el.style.right = "";
+            if (!popup.isOpen) {
+                popup.isOpen = true;
+                this._signal("show");
+                lastMouseEvent = null;
+            }
+            popup.anchorPos = pos;
+            popup.anchor = anchor;
+            return true;
+        };
+        popup.show = function (pos, lineHeight, topdownOnly) {
+            this.tryShow(pos, lineHeight, topdownOnly ? "bottom" : undefined, true);
+        };
+        popup.goTo = function (where) {
+            var row = this.getRow();
+            var max = this.session.getLength() - 1;
+            switch (where) {
+                case "up":
+                    row = row <= 0 ? max : row - 1;
+                    break;
+                case "down":
+                    row = row >= max ? -1 : row + 1;
+                    break;
+                case "start":
+                    row = 0;
+                    break;
+                case "end":
+                    row = max;
+                    break;
+            }
+            this.setRow(row);
+        };
+        popup.getTextLeftOffset = function () {
+            return this.$borderSize + this.renderer.$padding + this.$imageSize;
+        };
+        popup.$imageSize = 0;
+        popup.$borderSize = 1;
+        return popup;
+    }
+    return AcePopup;
+}());
+dom.importCssString("\n.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\n    background-color: #CAD6FA;\n    z-index: 1;\n}\n.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\n    background-color: #3a674e;\n}\n.ace_editor.ace_autocomplete .ace_line-hover {\n    border: 1px solid #abbffe;\n    margin-top: -1px;\n    background: rgba(233,233,253,0.4);\n    position: absolute;\n    z-index: 2;\n}\n.ace_dark.ace_editor.ace_autocomplete .ace_line-hover {\n    border: 1px solid rgba(109, 150, 13, 0.8);\n    background: rgba(58, 103, 78, 0.62);\n}\n.ace_completion-meta {\n    opacity: 0.5;\n    margin: 0 0.9em;\n}\n.ace_completion-message {\n    color: blue;\n}\n.ace_editor.ace_autocomplete .ace_completion-highlight{\n    color: #2d69c7;\n}\n.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{\n    color: #93ca12;\n}\n.ace_editor.ace_autocomplete {\n    width: 300px;\n    z-index: 200000;\n    border: 1px lightgray solid;\n    position: fixed;\n    box-shadow: 2px 3px 5px rgba(0,0,0,.2);\n    line-height: 1.4;\n    background: #fefefe;\n    color: #111;\n}\n.ace_dark.ace_editor.ace_autocomplete {\n    border: 1px #484747 solid;\n    box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51);\n    line-height: 1.4;\n    background: #25282c;\n    color: #c1c1c1;\n}\n.ace_autocomplete_right .ace_text-layer  {\n    width: calc(100% - 8px);\n}\n.ace_autocomplete_right .ace_line {\n    display: flex;\n}\n.ace_autocomplete_right .ace_completion-spacer {\n    flex: 1;\n}\n", "autocompletion.css", false);
+exports.AcePopup = AcePopup;
+exports.$singleLineEditor = $singleLineEditor;
+exports.getAriaId = getAriaId;
+
+});
+
+ace.define("ace/autocomplete/inline",["require","exports","module","ace/snippets"], function(require, exports, module){"use strict";
+var snippetManager = require("../snippets").snippetManager;
+var AceInline = /** @class */ (function () {
+    function AceInline() {
+        this.editor = null;
+    }
+    AceInline.prototype.show = function (editor, completion, prefix) {
+        prefix = prefix || "";
+        if (editor && this.editor && this.editor !== editor) {
+            this.hide();
+            this.editor = null;
+        }
+        if (!editor || !completion) {
+            return false;
+        }
+        var displayText = completion.snippet ? snippetManager.getDisplayTextForSnippet(editor, completion.snippet) : completion.value;
+        if (!displayText || !displayText.startsWith(prefix)) {
+            return false;
+        }
+        this.editor = editor;
+        displayText = displayText.slice(prefix.length);
+        if (displayText === "") {
+            editor.removeGhostText();
+        }
+        else {
+            editor.setGhostText(displayText);
+        }
+        return true;
+    };
+    AceInline.prototype.isOpen = function () {
+        if (!this.editor) {
+            return false;
+        }
+        return !!this.editor.renderer.$ghostText;
+    };
+    AceInline.prototype.hide = function () {
+        if (!this.editor) {
+            return false;
+        }
+        this.editor.removeGhostText();
+        return true;
+    };
+    AceInline.prototype.destroy = function () {
+        this.hide();
+        this.editor = null;
+    };
+    return AceInline;
+}());
+exports.AceInline = AceInline;
+
+});
+
+ace.define("ace/autocomplete/util",["require","exports","module"], function(require, exports, module){"use strict";
+exports.parForEach = function (array, fn, callback) {
+    var completed = 0;
+    var arLength = array.length;
+    if (arLength === 0)
+        callback();
+    for (var i = 0; i < arLength; i++) {
+        fn(array[i], function (result, err) {
+            completed++;
+            if (completed === arLength)
+                callback(result, err);
+        });
+    }
+};
+var ID_REGEX = /[a-zA-Z_0-9\$\-\u00A2-\u2000\u2070-\uFFFF]/;
+exports.retrievePrecedingIdentifier = function (text, pos, regex) {
+    regex = regex || ID_REGEX;
+    var buf = [];
+    for (var i = pos - 1; i >= 0; i--) {
+        if (regex.test(text[i]))
+            buf.push(text[i]);
+        else
+            break;
+    }
+    return buf.reverse().join("");
+};
+exports.retrieveFollowingIdentifier = function (text, pos, regex) {
+    regex = regex || ID_REGEX;
+    var buf = [];
+    for (var i = pos; i < text.length; i++) {
+        if (regex.test(text[i]))
+            buf.push(text[i]);
+        else
+            break;
+    }
+    return buf;
+};
+exports.getCompletionPrefix = function (editor) {
+    var pos = editor.getCursorPosition();
+    var line = editor.session.getLine(pos.row);
+    var prefix;
+    editor.completers.forEach(function (completer) {
+        if (completer.identifierRegexps) {
+            completer.identifierRegexps.forEach(function (identifierRegex) {
+                if (!prefix && identifierRegex)
+                    prefix = this.retrievePrecedingIdentifier(line, pos.column, identifierRegex);
+            }.bind(this));
+        }
+    }.bind(this));
+    return prefix || this.retrievePrecedingIdentifier(line, pos.column);
+};
+exports.triggerAutocomplete = function (editor) {
+    var pos = editor.getCursorPosition();
+    var line = editor.session.getLine(pos.row);
+    var column = (pos.column === 0) ? 0 : pos.column - 1;
+    var previousChar = line[column];
+    return editor.completers.some(function (el) {
+        if (el.triggerCharacters && Array.isArray(el.triggerCharacters)) {
+            return el.triggerCharacters.includes(previousChar);
+        }
+    });
+};
+
+});
+
+ace.define("ace/autocomplete",["require","exports","module","ace/keyboard/hash_handler","ace/autocomplete/popup","ace/autocomplete/inline","ace/autocomplete/popup","ace/autocomplete/util","ace/lib/lang","ace/lib/dom","ace/snippets","ace/config"], function(require, exports, module){"use strict";
+var HashHandler = require("./keyboard/hash_handler").HashHandler;
+var AcePopup = require("./autocomplete/popup").AcePopup;
+var AceInline = require("./autocomplete/inline").AceInline;
+var getAriaId = require("./autocomplete/popup").getAriaId;
+var util = require("./autocomplete/util");
+var lang = require("./lib/lang");
+var dom = require("./lib/dom");
+var snippetManager = require("./snippets").snippetManager;
+var config = require("./config");
+var destroyCompleter = function (e, editor) {
+    editor.completer && editor.completer.destroy();
+};
+var Autocomplete = /** @class */ (function () {
+    function Autocomplete() {
+        this.autoInsert = false;
+        this.autoSelect = true;
+        this.autoShown = false;
+        this.exactMatch = false;
+        this.inlineEnabled = false;
+        this.keyboardHandler = new HashHandler();
+        this.keyboardHandler.bindKeys(this.commands);
+        this.parentNode = null;
+        this.blurListener = this.blurListener.bind(this);
+        this.changeListener = this.changeListener.bind(this);
+        this.mousedownListener = this.mousedownListener.bind(this);
+        this.mousewheelListener = this.mousewheelListener.bind(this);
+        this.changeTimer = lang.delayedCall(function () {
+            this.updateCompletions(true);
+        }.bind(this));
+        this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50);
+    }
+    Autocomplete.prototype.$init = function () {
+        this.popup = new AcePopup(this.parentNode || document.body || document.documentElement);
+        this.popup.on("click", function (e) {
+            this.insertMatch();
+            e.stop();
+        }.bind(this));
+        this.popup.focus = this.editor.focus.bind(this.editor);
+        this.popup.on("show", this.$onPopupChange.bind(this));
+        this.popup.on("hide", this.$onHidePopup.bind(this));
+        this.popup.on("select", this.$onPopupChange.bind(this));
+        this.popup.on("changeHoverMarker", this.tooltipTimer.bind(null, null));
+        return this.popup;
+    };
+    Autocomplete.prototype.$initInline = function () {
+        if (!this.inlineEnabled || this.inlineRenderer)
+            return;
+        this.inlineRenderer = new AceInline();
+        return this.inlineRenderer;
+    };
+    Autocomplete.prototype.getPopup = function () {
+        return this.popup || this.$init();
+    };
+    Autocomplete.prototype.$onHidePopup = function () {
+        if (this.inlineRenderer) {
+            this.inlineRenderer.hide();
+        }
+        this.hideDocTooltip();
+    };
+    Autocomplete.prototype.$onPopupChange = function (hide) {
+        if (this.inlineRenderer && this.inlineEnabled) {
+            var completion = hide ? null : this.popup.getData(this.popup.getRow());
+            var prefix = util.getCompletionPrefix(this.editor);
+            if (!this.inlineRenderer.show(this.editor, completion, prefix)) {
+                this.inlineRenderer.hide();
+            }
+            this.$updatePopupPosition();
+        }
+        this.tooltipTimer.call(null, null);
+    };
+    Autocomplete.prototype.$updatePopupPosition = function () {
+        var editor = this.editor;
+        var renderer = editor.renderer;
+        var lineHeight = renderer.layerConfig.lineHeight;
+        var pos = renderer.$cursorLayer.getPixelPosition(this.base, true);
+        pos.left -= this.popup.getTextLeftOffset();
+        var rect = editor.container.getBoundingClientRect();
+        pos.top += rect.top - renderer.layerConfig.offset;
+        pos.left += rect.left - editor.renderer.scrollLeft;
+        pos.left += renderer.gutterWidth;
+        var posGhostText = {
+            top: pos.top,
+            left: pos.left
+        };
+        if (renderer.$ghostText && renderer.$ghostTextWidget) {
+            if (this.base.row === renderer.$ghostText.position.row) {
+                posGhostText.top += renderer.$ghostTextWidget.el.offsetHeight;
+            }
+        }
+        if (this.popup.tryShow(posGhostText, lineHeight, "bottom")) {
+            return;
+        }
+        if (this.popup.tryShow(pos, lineHeight, "top")) {
+            return;
+        }
+        this.popup.show(pos, lineHeight);
+    };
+    Autocomplete.prototype.openPopup = function (editor, prefix, keepPopupPosition) {
+        if (!this.popup)
+            this.$init();
+        if (this.inlineEnabled && !this.inlineRenderer)
+            this.$initInline();
+        this.popup.autoSelect = this.autoSelect;
+        this.popup.setData(this.completions.filtered, this.completions.filterText);
+        if (this.editor.textInput.setAriaOptions) {
+            this.editor.textInput.setAriaOptions({
+                activeDescendant: getAriaId(this.popup.getRow()),
+                inline: this.inlineEnabled
+            });
+        }
+        editor.keyBinding.addKeyboardHandler(this.keyboardHandler);
+        this.popup.setRow(this.autoSelect ? 0 : -1);
+        if (!keepPopupPosition) {
+            this.popup.setTheme(editor.getTheme());
+            this.popup.setFontSize(editor.getFontSize());
+            this.$updatePopupPosition();
+            if (this.tooltipNode) {
+                this.updateDocTooltip();
+            }
+        }
+        else if (keepPopupPosition && !prefix) {
+            this.detach();
+        }
+        this.changeTimer.cancel();
+    };
+    Autocomplete.prototype.detach = function () {
+        if (this.editor) {
+            this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);
+            this.editor.off("changeSelection", this.changeListener);
+            this.editor.off("blur", this.blurListener);
+            this.editor.off("mousedown", this.mousedownListener);
+            this.editor.off("mousewheel", this.mousewheelListener);
+        }
+        this.changeTimer.cancel();
+        this.hideDocTooltip();
+        if (this.completionProvider) {
+            this.completionProvider.detach();
+        }
+        if (this.popup && this.popup.isOpen)
+            this.popup.hide();
+        if (this.base)
+            this.base.detach();
+        this.activated = false;
+        this.completionProvider = this.completions = this.base = null;
+    };
+    Autocomplete.prototype.changeListener = function (e) {
+        var cursor = this.editor.selection.lead;
+        if (cursor.row != this.base.row || cursor.column < this.base.column) {
+            this.detach();
+        }
+        if (this.activated)
+            this.changeTimer.schedule();
+        else
+            this.detach();
+    };
+    Autocomplete.prototype.blurListener = function (e) {
+        var el = document.activeElement;
+        var text = this.editor.textInput.getElement();
+        var fromTooltip = e.relatedTarget && this.tooltipNode && this.tooltipNode.contains(e.relatedTarget);
+        var container = this.popup && this.popup.container;
+        if (el != text && el.parentNode != container && !fromTooltip
+            && el != this.tooltipNode && e.relatedTarget != text) {
+            this.detach();
+        }
+    };
+    Autocomplete.prototype.mousedownListener = function (e) {
+        this.detach();
+    };
+    Autocomplete.prototype.mousewheelListener = function (e) {
+        this.detach();
+    };
+    Autocomplete.prototype.goTo = function (where) {
+        this.popup.goTo(where);
+    };
+    Autocomplete.prototype.insertMatch = function (data, options) {
+        if (!data)
+            data = this.popup.getData(this.popup.getRow());
+        if (!data)
+            return false;
+        if (data.value === "") // Explicitly given nothing to insert, e.g. "No suggestion state"
+            return this.detach();
+        var completions = this.completions;
+        var result = this.getCompletionProvider().insertMatch(this.editor, data, completions.filterText, options);
+        if (this.completions == completions)
+            this.detach();
+        return result;
+    };
+    Autocomplete.prototype.showPopup = function (editor, options) {
+        if (this.editor)
+            this.detach();
+        this.activated = true;
+        this.editor = editor;
+        if (editor.completer != this) {
+            if (editor.completer)
+                editor.completer.detach();
+            editor.completer = this;
+        }
+        editor.on("changeSelection", this.changeListener);
+        editor.on("blur", this.blurListener);
+        editor.on("mousedown", this.mousedownListener);
+        editor.on("mousewheel", this.mousewheelListener);
+        this.updateCompletions(false, options);
+    };
+    Autocomplete.prototype.getCompletionProvider = function () {
+        if (!this.completionProvider)
+            this.completionProvider = new CompletionProvider();
+        return this.completionProvider;
+    };
+    Autocomplete.prototype.gatherCompletions = function (editor, callback) {
+        return this.getCompletionProvider().gatherCompletions(editor, callback);
+    };
+    Autocomplete.prototype.updateCompletions = function (keepPopupPosition, options) {
+        if (keepPopupPosition && this.base && this.completions) {
+            var pos = this.editor.getCursorPosition();
+            var prefix = this.editor.session.getTextRange({ start: this.base, end: pos });
+            if (prefix == this.completions.filterText)
+                return;
+            this.completions.setFilter(prefix);
+            if (!this.completions.filtered.length)
+                return this.detach();
+            if (this.completions.filtered.length == 1
+                && this.completions.filtered[0].value == prefix
+                && !this.completions.filtered[0].snippet)
+                return this.detach();
+            this.openPopup(this.editor, prefix, keepPopupPosition);
+            return;
+        }
+        if (options && options.matches) {
+            var pos = this.editor.getSelectionRange().start;
+            this.base = this.editor.session.doc.createAnchor(pos.row, pos.column);
+            this.base.$insertRight = true;
+            this.completions = new FilteredList(options.matches);
+            return this.openPopup(this.editor, "", keepPopupPosition);
+        }
+        var session = this.editor.getSession();
+        var pos = this.editor.getCursorPosition();
+        var prefix = util.getCompletionPrefix(this.editor);
+        this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length);
+        this.base.$insertRight = true;
+        var completionOptions = { exactMatch: this.exactMatch };
+        this.getCompletionProvider().provideCompletions(this.editor, completionOptions, function (err, completions, finished) {
+            var filtered = completions.filtered;
+            var prefix = util.getCompletionPrefix(this.editor);
+            if (finished) {
+                if (!filtered.length) {
+                    var emptyMessage = !this.autoShown && this.emptyMessage;
+                    if (typeof emptyMessage == "function")
+                        emptyMessage = this.emptyMessage(prefix);
+                    if (emptyMessage) {
+                        var completionsForEmpty = [{
+                                caption: this.emptyMessage(prefix),
+                                value: ""
+                            }];
+                        this.completions = new FilteredList(completionsForEmpty);
+                        this.openPopup(this.editor, prefix, keepPopupPosition);
+                        return;
+                    }
+                    return this.detach();
+                }
+                if (filtered.length == 1 && filtered[0].value == prefix && !filtered[0].snippet)
+                    return this.detach();
+                if (this.autoInsert && !this.autoShown && filtered.length == 1)
+                    return this.insertMatch(filtered[0]);
+            }
+            this.completions = completions;
+            this.openPopup(this.editor, prefix, keepPopupPosition);
+        }.bind(this));
+    };
+    Autocomplete.prototype.cancelContextMenu = function () {
+        this.editor.$mouseHandler.cancelContextMenu();
+    };
+    Autocomplete.prototype.updateDocTooltip = function () {
+        var popup = this.popup;
+        var all = popup.data;
+        var selected = all && (all[popup.getHoveredRow()] || all[popup.getRow()]);
+        var doc = null;
+        if (!selected || !this.editor || !this.popup.isOpen)
+            return this.hideDocTooltip();
+        var completersLength = this.editor.completers.length;
+        for (var i = 0; i < completersLength; i++) {
+            var completer = this.editor.completers[i];
+            if (completer.getDocTooltip && selected.completerId === completer.id) {
+                doc = completer.getDocTooltip(selected);
+                break;
+            }
+        }
+        if (!doc && typeof selected != "string")
+            doc = selected;
+        if (typeof doc == "string")
+            doc = { docText: doc };
+        if (!doc || !(doc.docHTML || doc.docText))
+            return this.hideDocTooltip();
+        this.showDocTooltip(doc);
+    };
+    Autocomplete.prototype.showDocTooltip = function (item) {
+        if (!this.tooltipNode) {
+            this.tooltipNode = dom.createElement("div");
+            this.tooltipNode.style.margin = 0;
+            this.tooltipNode.style.pointerEvents = "auto";
+            this.tooltipNode.tabIndex = -1;
+            this.tooltipNode.onblur = this.blurListener.bind(this);
+            this.tooltipNode.onclick = this.onTooltipClick.bind(this);
+        }
+        var theme = this.editor.renderer.theme;
+        this.tooltipNode.className = "ace_tooltip ace_doc-tooltip " +
+            (theme.isDark ? "ace_dark " : "") + (theme.cssClass || "");
+        var tooltipNode = this.tooltipNode;
+        if (item.docHTML) {
+            tooltipNode.innerHTML = item.docHTML;
+        }
+        else if (item.docText) {
+            tooltipNode.textContent = item.docText;
+        }
+        if (!tooltipNode.parentNode)
+            this.popup.container.appendChild(this.tooltipNode);
+        var popup = this.popup;
+        var rect = popup.container.getBoundingClientRect();
+        tooltipNode.style.top = popup.container.style.top;
+        tooltipNode.style.bottom = popup.container.style.bottom;
+        tooltipNode.style.display = "block";
+        if (window.innerWidth - rect.right < 320) {
+            if (rect.left < 320) {
+                if (popup.isTopdown) {
+                    tooltipNode.style.top = rect.bottom + "px";
+                    tooltipNode.style.left = rect.left + "px";
+                    tooltipNode.style.right = "";
+                    tooltipNode.style.bottom = "";
+                }
+                else {
+                    tooltipNode.style.top = popup.container.offsetTop - tooltipNode.offsetHeight + "px";
+                    tooltipNode.style.left = rect.left + "px";
+                    tooltipNode.style.right = "";
+                    tooltipNode.style.bottom = "";
+                }
+            }
+            else {
+                tooltipNode.style.right = window.innerWidth - rect.left + "px";
+                tooltipNode.style.left = "";
+            }
+        }
+        else {
+            tooltipNode.style.left = (rect.right + 1) + "px";
+            tooltipNode.style.right = "";
+        }
+    };
+    Autocomplete.prototype.hideDocTooltip = function () {
+        this.tooltipTimer.cancel();
+        if (!this.tooltipNode)
+            return;
+        var el = this.tooltipNode;
+        if (!this.editor.isFocused() && document.activeElement == el)
+            this.editor.focus();
+        this.tooltipNode = null;
+        if (el.parentNode)
+            el.parentNode.removeChild(el);
+    };
+    Autocomplete.prototype.onTooltipClick = function (e) {
+        var a = e.target;
+        while (a && a != this.tooltipNode) {
+            if (a.nodeName == "A" && a.href) {
+                a.rel = "noreferrer";
+                a.target = "_blank";
+                break;
+            }
+            a = a.parentNode;
+        }
+    };
+    Autocomplete.prototype.destroy = function () {
+        this.detach();
+        if (this.popup) {
+            this.popup.destroy();
+            var el = this.popup.container;
+            if (el && el.parentNode)
+                el.parentNode.removeChild(el);
+        }
+        if (this.editor && this.editor.completer == this) {
+            this.editor.off("destroy", destroyCompleter);
+            this.editor.completer = null;
+        }
+        this.inlineRenderer = this.popup = this.editor = null;
+    };
+    return Autocomplete;
+}());
+Autocomplete.prototype.commands = {
+    "Up": function (editor) { editor.completer.goTo("up"); },
+    "Down": function (editor) { editor.completer.goTo("down"); },
+    "Ctrl-Up|Ctrl-Home": function (editor) { editor.completer.goTo("start"); },
+    "Ctrl-Down|Ctrl-End": function (editor) { editor.completer.goTo("end"); },
+    "Esc": function (editor) { editor.completer.detach(); },
+    "Return": function (editor) { return editor.completer.insertMatch(); },
+    "Shift-Return": function (editor) { editor.completer.insertMatch(null, { deleteSuffix: true }); },
+    "Tab": function (editor) {
+        var result = editor.completer.insertMatch();
+        if (!result && !editor.tabstopManager)
+            editor.completer.goTo("down");
+        else
+            return result;
+    },
+    "PageUp": function (editor) { editor.completer.popup.gotoPageUp(); },
+    "PageDown": function (editor) { editor.completer.popup.gotoPageDown(); }
+};
+Autocomplete.for = function (editor) {
+    if (editor.completer instanceof Autocomplete) {
+        return editor.completer;
+    }
+    if (editor.completer) {
+        editor.completer.destroy();
+        editor.completer = null;
+    }
+    if (config.get("sharedPopups")) {
+        if (!Autocomplete.$sharedInstance)
+            Autocomplete.$sharedInstance = new Autocomplete();
+        editor.completer = Autocomplete.$sharedInstance;
+    }
+    else {
+        editor.completer = new Autocomplete();
+        editor.once("destroy", destroyCompleter);
+    }
+    return editor.completer;
+};
+Autocomplete.startCommand = {
+    name: "startAutocomplete",
+    exec: function (editor, options) {
+        var completer = Autocomplete.for(editor);
+        completer.autoInsert = false;
+        completer.autoSelect = true;
+        completer.autoShown = false;
+        completer.showPopup(editor, options);
+        completer.cancelContextMenu();
+    },
+    bindKey: "Ctrl-Space|Ctrl-Shift-Space|Alt-Space"
+};
+var CompletionProvider = /** @class */ (function () {
+    function CompletionProvider() {
+        this.active = true;
+    }
+    CompletionProvider.prototype.insertByIndex = function (editor, index, options) {
+        if (!this.completions || !this.completions.filtered) {
+            return false;
+        }
+        return this.insertMatch(editor, this.completions.filtered[index], options);
+    };
+    CompletionProvider.prototype.insertMatch = function (editor, data, options) {
+        if (!data)
+            return false;
+        editor.startOperation({ command: { name: "insertMatch" } });
+        if (data.completer && data.completer.insertMatch) {
+            data.completer.insertMatch(editor, data);
+        }
+        else {
+            if (!this.completions)
+                return false;
+            if (this.completions.filterText) {
+                var ranges;
+                if (editor.selection.getAllRanges) {
+                    ranges = editor.selection.getAllRanges();
+                }
+                else {
+                    ranges = [editor.getSelectionRange()];
+                }
+                for (var i = 0, range; range = ranges[i]; i++) {
+                    range.start.column -= this.completions.filterText.length;
+                    editor.session.remove(range);
+                }
+            }
+            if (data.snippet)
+                snippetManager.insertSnippet(editor, data.snippet, { range: data.range });
+            else {
+                this.$insertString(editor, data);
+            }
+            if (data.command && data.command === "startAutocomplete") {
+                editor.execCommand(data.command);
+            }
+        }
+        editor.endOperation();
+        return true;
+    };
+    CompletionProvider.prototype.$insertString = function (editor, data) {
+        var text = data.value || data;
+        if (data.range) {
+            if (editor.inVirtualSelectionMode) {
+                return editor.session.replace(data.range, text);
+            }
+            editor.forEachSelection(function () {
+                var range = editor.getSelectionRange();
+                if (data.range.compareRange(range) === 0) {
+                    editor.session.replace(data.range, text);
+                }
+                else {
+                    editor.insert(text);
+                }
+            }, null, { keepOrder: true });
+        }
+        else {
+            editor.execCommand("insertstring", text);
+        }
+    };
+    CompletionProvider.prototype.gatherCompletions = function (editor, callback) {
+        var session = editor.getSession();
+        var pos = editor.getCursorPosition();
+        var prefix = util.getCompletionPrefix(editor);
+        var matches = [];
+        var total = editor.completers.length;
+        editor.completers.forEach(function (completer, i) {
+            completer.getCompletions(editor, session, pos, prefix, function (err, results) {
+                if (!err && results)
+                    matches = matches.concat(results);
+                callback(null, {
+                    prefix: util.getCompletionPrefix(editor),
+                    matches: matches,
+                    finished: (--total === 0)
+                });
+            });
+        });
+        return true;
+    };
+    CompletionProvider.prototype.provideCompletions = function (editor, options, callback) {
+        var processResults = function (results) {
+            var prefix = results.prefix;
+            var matches = results.matches;
+            this.completions = new FilteredList(matches);
+            if (options.exactMatch)
+                this.completions.exactMatch = true;
+            if (options.ignoreCaption)
+                this.completions.ignoreCaption = true;
+            this.completions.setFilter(prefix);
+            if (results.finished || this.completions.filtered.length)
+                callback(null, this.completions, results.finished);
+        }.bind(this);
+        var isImmediate = true;
+        var immediateResults = null;
+        this.gatherCompletions(editor, function (err, results) {
+            if (!this.active) {
+                return;
+            }
+            if (err) {
+                callback(err, [], true);
+                this.detach();
+            }
+            var prefix = results.prefix;
+            if (prefix.indexOf(results.prefix) !== 0)
+                return;
+            if (isImmediate) {
+                immediateResults = results;
+                return;
+            }
+            processResults(results);
+        }.bind(this));
+        isImmediate = false;
+        if (immediateResults) {
+            var results = immediateResults;
+            immediateResults = null;
+            processResults(results);
+        }
+    };
+    CompletionProvider.prototype.detach = function () {
+        this.active = false;
+    };
+    return CompletionProvider;
+}());
+var FilteredList = /** @class */ (function () {
+    function FilteredList(array, filterText) {
+        this.all = array;
+        this.filtered = array;
+        this.filterText = filterText || "";
+        this.exactMatch = false;
+        this.ignoreCaption = false;
+    }
+    FilteredList.prototype.setFilter = function (str) {
+        if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0)
+            var matches = this.filtered;
+        else
+            var matches = this.all;
+        this.filterText = str;
+        matches = this.filterCompletions(matches, this.filterText);
+        matches = matches.sort(function (a, b) {
+            return b.exactMatch - a.exactMatch || b.$score - a.$score
+                || (a.caption || a.value).localeCompare(b.caption || b.value);
+        });
+        var prev = null;
+        matches = matches.filter(function (item) {
+            var caption = item.snippet || item.caption || item.value;
+            if (caption === prev)
+                return false;
+            prev = caption;
+            return true;
+        });
+        this.filtered = matches;
+    };
+    FilteredList.prototype.filterCompletions = function (items, needle) {
+        var results = [];
+        var upper = needle.toUpperCase();
+        var lower = needle.toLowerCase();
+        loop: for (var i = 0, item; item = items[i]; i++) {
+            var caption = (!this.ignoreCaption && item.caption) || item.value || item.snippet;
+            if (!caption)
+                continue;
+            var lastIndex = -1;
+            var matchMask = 0;
+            var penalty = 0;
+            var index, distance;
+            if (this.exactMatch) {
+                if (needle !== caption.substr(0, needle.length))
+                    continue loop;
+            }
+            else {
+                var fullMatchIndex = caption.toLowerCase().indexOf(lower);
+                if (fullMatchIndex > -1) {
+                    penalty = fullMatchIndex;
+                }
+                else {
+                    for (var j = 0; j < needle.length; j++) {
+                        var i1 = caption.indexOf(lower[j], lastIndex + 1);
+                        var i2 = caption.indexOf(upper[j], lastIndex + 1);
+                        index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2;
+                        if (index < 0)
+                            continue loop;
+                        distance = index - lastIndex - 1;
+                        if (distance > 0) {
+                            if (lastIndex === -1)
+                                penalty += 10;
+                            penalty += distance;
+                            matchMask = matchMask | (1 << j);
+                        }
+                        lastIndex = index;
+                    }
+                }
+            }
+            item.matchMask = matchMask;
+            item.exactMatch = penalty ? 0 : 1;
+            item.$score = (item.score || 0) - penalty;
+            results.push(item);
+        }
+        return results;
+    };
+    return FilteredList;
+}());
+exports.Autocomplete = Autocomplete;
+exports.CompletionProvider = CompletionProvider;
+exports.FilteredList = FilteredList;
+
+});
+
+ace.define("ace/autocomplete/text_completer",["require","exports","module","ace/range"], function(require, exports, module){var Range = require("../range").Range;
+var splitRegex = /[^a-zA-Z_0-9\$\-\u00C0-\u1FFF\u2C00-\uD7FF\w]+/;
+function getWordIndex(doc, pos) {
+    var textBefore = doc.getTextRange(Range.fromPoints({
+        row: 0,
+        column: 0
+    }, pos));
+    return textBefore.split(splitRegex).length - 1;
+}
+function wordDistance(doc, pos) {
+    var prefixPos = getWordIndex(doc, pos);
+    var words = doc.getValue().split(splitRegex);
+    var wordScores = Object.create(null);
+    var currentWord = words[prefixPos];
+    words.forEach(function (word, idx) {
+        if (!word || word === currentWord)
+            return;
+        var distance = Math.abs(prefixPos - idx);
+        var score = words.length - distance;
+        if (wordScores[word]) {
+            wordScores[word] = Math.max(score, wordScores[word]);
+        }
+        else {
+            wordScores[word] = score;
+        }
+    });
+    return wordScores;
+}
+exports.getCompletions = function (editor, session, pos, prefix, callback) {
+    var wordScore = wordDistance(session, pos);
+    var wordList = Object.keys(wordScore);
+    callback(null, wordList.map(function (word) {
+        return {
+            caption: word,
+            value: word,
+            score: wordScore[word],
+            meta: "local"
+        };
+    }));
+};
+
+});
+
+ace.define("ace/ext/language_tools",["require","exports","module","ace/snippets","ace/autocomplete","ace/config","ace/lib/lang","ace/autocomplete/util","ace/autocomplete/text_completer","ace/editor","ace/config"], function(require, exports, module){"use strict";
+var snippetManager = require("../snippets").snippetManager;
+var Autocomplete = require("../autocomplete").Autocomplete;
+var config = require("../config");
+var lang = require("../lib/lang");
+var util = require("../autocomplete/util");
+var textCompleter = require("../autocomplete/text_completer");
+var keyWordCompleter = {
+    getCompletions: function (editor, session, pos, prefix, callback) {
+        if (session.$mode.completer) {
+            return session.$mode.completer.getCompletions(editor, session, pos, prefix, callback);
+        }
+        var state = editor.session.getState(pos.row);
+        var completions = session.$mode.getCompletions(state, session, pos, prefix);
+        completions = completions.map(function (el) {
+            el.completerId = keyWordCompleter.id;
+            return el;
+        });
+        callback(null, completions);
+    },
+    id: "keywordCompleter"
+};
+var transformSnippetTooltip = function (str) {
+    var record = {};
+    return str.replace(/\${(\d+)(:(.*?))?}/g, function (_, p1, p2, p3) {
+        return (record[p1] = p3 || '');
+    }).replace(/\$(\d+?)/g, function (_, p1) {
+        return record[p1];
+    });
+};
+var snippetCompleter = {
+    getCompletions: function (editor, session, pos, prefix, callback) {
+        var scopes = [];
+        var token = session.getTokenAt(pos.row, pos.column);
+        if (token && token.type.match(/(tag-name|tag-open|tag-whitespace|attribute-name|attribute-value)\.xml$/))
+            scopes.push('html-tag');
+        else
+            scopes = snippetManager.getActiveScopes(editor);
+        var snippetMap = snippetManager.snippetMap;
+        var completions = [];
+        scopes.forEach(function (scope) {
+            var snippets = snippetMap[scope] || [];
+            for (var i = snippets.length; i--;) {
+                var s = snippets[i];
+                var caption = s.name || s.tabTrigger;
+                if (!caption)
+                    continue;
+                completions.push({
+                    caption: caption,
+                    snippet: s.content,
+                    meta: s.tabTrigger && !s.name ? s.tabTrigger + "\u21E5 " : "snippet",
+                    completerId: snippetCompleter.id
+                });
+            }
+        }, this);
+        callback(null, completions);
+    },
+    getDocTooltip: function (item) {
+        if (item.snippet && !item.docHTML) {
+            item.docHTML = [
+                "<b>", lang.escapeHTML(item.caption), "</b>", "<hr></hr>",
+                lang.escapeHTML(transformSnippetTooltip(item.snippet))
+            ].join("");
+        }
+    },
+    id: "snippetCompleter"
+};
+var completers = [snippetCompleter, textCompleter, keyWordCompleter];
+exports.setCompleters = function (val) {
+    completers.length = 0;
+    if (val)
+        completers.push.apply(completers, val);
+};
+exports.addCompleter = function (completer) {
+    completers.push(completer);
+};
+exports.textCompleter = textCompleter;
+exports.keyWordCompleter = keyWordCompleter;
+exports.snippetCompleter = snippetCompleter;
+var expandSnippet = {
+    name: "expandSnippet",
+    exec: function (editor) {
+        return snippetManager.expandWithTab(editor);
+    },
+    bindKey: "Tab"
+};
+var onChangeMode = function (e, editor) {
+    loadSnippetsForMode(editor.session.$mode);
+};
+var loadSnippetsForMode = function (mode) {
+    if (typeof mode == "string")
+        mode = config.$modes[mode];
+    if (!mode)
+        return;
+    if (!snippetManager.files)
+        snippetManager.files = {};
+    loadSnippetFile(mode.$id, mode.snippetFileId);
+    if (mode.modes)
+        mode.modes.forEach(loadSnippetsForMode);
+};
+var loadSnippetFile = function (id, snippetFilePath) {
+    if (!snippetFilePath || !id || snippetManager.files[id])
+        return;
+    snippetManager.files[id] = {};
+    config.loadModule(snippetFilePath, function (m) {
+        if (!m)
+            return;
+        snippetManager.files[id] = m;
+        if (!m.snippets && m.snippetText)
+            m.snippets = snippetManager.parseSnippetFile(m.snippetText);
+        snippetManager.register(m.snippets || [], m.scope);
+        if (m.includeScopes) {
+            snippetManager.snippetMap[m.scope].includeScopes = m.includeScopes;
+            m.includeScopes.forEach(function (x) {
+                loadSnippetsForMode("ace/mode/" + x);
+            });
+        }
+    });
+};
+var doLiveAutocomplete = function (e) {
+    var editor = e.editor;
+    var hasCompleter = editor.completer && editor.completer.activated;
+    if (e.command.name === "backspace") {
+        if (hasCompleter && !util.getCompletionPrefix(editor))
+            editor.completer.detach();
+    }
+    else if (e.command.name === "insertstring") {
+        var prefix = util.getCompletionPrefix(editor);
+        var triggerAutocomplete = util.triggerAutocomplete(editor);
+        if ((prefix || triggerAutocomplete) && !hasCompleter) {
+            var completer = Autocomplete.for(editor);
+            completer.autoShown = true;
+            completer.showPopup(editor);
+        }
+    }
+};
+var Editor = require("../editor").Editor;
+require("../config").defineOptions(Editor.prototype, "editor", {
+    enableBasicAutocompletion: {
+        set: function (val) {
+            if (val) {
+                if (!this.completers)
+                    this.completers = Array.isArray(val) ? val : completers;
+                this.commands.addCommand(Autocomplete.startCommand);
+            }
+            else {
+                this.commands.removeCommand(Autocomplete.startCommand);
+            }
+        },
+        value: false
+    },
+    enableLiveAutocompletion: {
+        set: function (val) {
+            if (val) {
+                if (!this.completers)
+                    this.completers = Array.isArray(val) ? val : completers;
+                this.commands.on('afterExec', doLiveAutocomplete);
+            }
+            else {
+                this.commands.removeListener('afterExec', doLiveAutocomplete);
+            }
+        },
+        value: false
+    },
+    enableSnippets: {
+        set: function (val) {
+            if (val) {
+                this.commands.addCommand(expandSnippet);
+                this.on("changeMode", onChangeMode);
+                onChangeMode(null, this);
+            }
+            else {
+                this.commands.removeCommand(expandSnippet);
+                this.off("changeMode", onChangeMode);
+            }
+        },
+        value: false
+    }
+});
+
+});                (function() {
+                    ace.require(["ace/ext/language_tools"], function(m) {
+                        if (typeof module == "object" && typeof exports == "object" && module) {
+                            module.exports = m;
+                        }
+                    });
+                })();
+            

BIN
knife4gin/front/webjars/js/ext-language_tools-ec14926a.js.gz


File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/js/flowDb-f4777d50-618ba865.js


BIN
knife4gin/front/webjars/js/flowDb-f4777d50-618ba865.js.gz


File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/js/flowDiagram-18ba08e1-cb57159e.js


BIN
knife4gin/front/webjars/js/flowDiagram-18ba08e1-cb57159e.js.gz


+ 1 - 0
knife4gin/front/webjars/js/flowDiagram-v2-d21afba7-a39d7de1.js

@@ -0,0 +1 @@
+import{p as e,f as o}from"./flowDb-f4777d50-618ba865.js";import{f as t,g as a}from"./styles-b39df0e1-a5ab9029.js";import{an as s}from"./doc-9439ea18.js";import"./layout-741885b6.js";import"./index-0980fb80-71e4c502.js";import"./edges-5ec2587c-bf509679.js";import"./createText-a48a4c90-b31e51e0.js";import"./line-9e21cb29.js";import"./array-9f3ba611.js";import"./path-53f90ab3.js";const k={parser:e,db:o,renderer:t,styles:a,init:r=>{r.flowchart||(r.flowchart={}),r.flowchart.arrowMarkerAbsolute=r.arrowMarkerAbsolute,s({flowchart:{arrowMarkerAbsolute:r.arrowMarkerAbsolute}}),t.setConf(r.flowchart),o.clear(),o.setGen("gen-2")}};export{k as diagram};

File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/js/flowchart-elk-definition-d0e11316-e77b080f.js


BIN
knife4gin/front/webjars/js/flowchart-elk-definition-d0e11316-e77b080f.js.gz


File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/js/ganttDiagram-d9c0fa4d-5e2a95a9.js


BIN
knife4gin/front/webjars/js/ganttDiagram-d9c0fa4d-5e2a95a9.js.gz


File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/js/gitGraphDiagram-20ac17d4-a69fda16.js


BIN
knife4gin/front/webjars/js/gitGraphDiagram-20ac17d4-a69fda16.js.gz


File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/js/index-0980fb80-71e4c502.js


BIN
knife4gin/front/webjars/js/index-0980fb80-71e4c502.js.gz


File diff suppressed because it is too large
+ 2 - 0
knife4gin/front/webjars/js/infoDiagram-98fa4f49-2349e369.js


+ 1 - 0
knife4gin/front/webjars/js/init-77b53fdd.js

@@ -0,0 +1 @@
+function t(e,a){switch(arguments.length){case 0:break;case 1:this.range(e);break;default:this.range(a).domain(e);break}return this}export{t as i};

File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/js/journeyDiagram-0938c3e3-d03add34.js


BIN
knife4gin/front/webjars/js/journeyDiagram-0938c3e3-d03add34.js.gz


File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/js/layout-741885b6.js


BIN
knife4gin/front/webjars/js/layout-741885b6.js.gz


+ 1 - 0
knife4gin/front/webjars/js/line-9e21cb29.js

@@ -0,0 +1 @@
+import{a as h}from"./array-9f3ba611.js";import{w as d,c as o}from"./path-53f90ab3.js";import{ai as v}from"./doc-9439ea18.js";function w(t){return t[0]}function b(t){return t[1]}function P(t,u){var s=o(!0),i=null,l=v,r=null,m=d(e);t=typeof t=="function"?t:t===void 0?w:o(t),u=typeof u=="function"?u:u===void 0?b:o(u);function e(n){var f,g=(n=h(n)).length,a,c=!1,p;for(i==null&&(r=l(p=m())),f=0;f<=g;++f)!(f<g&&s(a=n[f],f,n))===c&&((c=!c)?r.lineStart():r.lineEnd()),c&&r.point(+t(a,f,n),+u(a,f,n));if(p)return r=null,p+""||null}return e.x=function(n){return arguments.length?(t=typeof n=="function"?n:o(+n),e):t},e.y=function(n){return arguments.length?(u=typeof n=="function"?n:o(+n),e):u},e.defined=function(n){return arguments.length?(s=typeof n=="function"?n:o(!!n),e):s},e.curve=function(n){return arguments.length?(l=n,i!=null&&(r=l(i)),e):l},e.context=function(n){return arguments.length?(n==null?i=r=null:r=l(i=n),e):i},e}export{P as l};

File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/js/linear-57d89ee7.js


File diff suppressed because it is too large
+ 1 - 0
knife4gin/front/webjars/js/mindmap-definition-e19a4bed-e0e6557f.js


BIN
knife4gin/front/webjars/js/mindmap-definition-e19a4bed-e0e6557f.js.gz


+ 275 - 0
knife4gin/front/webjars/js/mode-json-d377560b.js

@@ -0,0 +1,275 @@
+ace.define("ace/mode/json_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){"use strict";
+var oop = require("../lib/oop");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+var JsonHighlightRules = function () {
+    this.$rules = {
+        "start": [
+            {
+                token: "variable",
+                regex: '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]\\s*(?=:)'
+            }, {
+                token: "string",
+                regex: '"',
+                next: "string"
+            }, {
+                token: "constant.numeric",
+                regex: "0[xX][0-9a-fA-F]+\\b"
+            }, {
+                token: "constant.numeric",
+                regex: "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
+            }, {
+                token: "constant.language.boolean",
+                regex: "(?:true|false)\\b"
+            }, {
+                token: "text",
+                regex: "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
+            }, {
+                token: "comment",
+                regex: "\\/\\/.*$"
+            }, {
+                token: "comment.start",
+                regex: "\\/\\*",
+                next: "comment"
+            }, {
+                token: "paren.lparen",
+                regex: "[[({]"
+            }, {
+                token: "paren.rparen",
+                regex: "[\\])}]"
+            }, {
+                token: "punctuation.operator",
+                regex: /[,]/
+            }, {
+                token: "text",
+                regex: "\\s+"
+            }
+        ],
+        "string": [
+            {
+                token: "constant.language.escape",
+                regex: /\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|["\\\/bfnrt])/
+            }, {
+                token: "string",
+                regex: '"|$',
+                next: "start"
+            }, {
+                defaultToken: "string"
+            }
+        ],
+        "comment": [
+            {
+                token: "comment.end",
+                regex: "\\*\\/",
+                next: "start"
+            }, {
+                defaultToken: "comment"
+            }
+        ]
+    };
+};
+oop.inherits(JsonHighlightRules, TextHighlightRules);
+exports.JsonHighlightRules = JsonHighlightRules;
+
+});
+
+ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module){"use strict";
+var Range = require("../range").Range;
+var MatchingBraceOutdent = function () { };
+(function () {
+    this.checkOutdent = function (line, input) {
+        if (!/^\s+$/.test(line))
+            return false;
+        return /^\s*\}/.test(input);
+    };
+    this.autoOutdent = function (doc, row) {
+        var line = doc.getLine(row);
+        var match = line.match(/^(\s*\})/);
+        if (!match)
+            return 0;
+        var column = match[1].length;
+        var openBracePos = doc.findMatchingBracket({ row: row, column: column });
+        if (!openBracePos || openBracePos.row == row)
+            return 0;
+        var indent = this.$getIndent(doc.getLine(openBracePos.row));
+        doc.replace(new Range(row, 0, row, column - 1), indent);
+    };
+    this.$getIndent = function (line) {
+        return line.match(/^\s*/)[0];
+    };
+}).call(MatchingBraceOutdent.prototype);
+exports.MatchingBraceOutdent = MatchingBraceOutdent;
+
+});
+
+ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module){"use strict";
+var oop = require("../../lib/oop");
+var Range = require("../../range").Range;
+var BaseFoldMode = require("./fold_mode").FoldMode;
+var FoldMode = exports.FoldMode = function (commentRegex) {
+    if (commentRegex) {
+        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start));
+        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end));
+    }
+};
+oop.inherits(FoldMode, BaseFoldMode);
+(function () {
+    this.foldingStartMarker = /([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/;
+    this.foldingStopMarker = /^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/;
+    this.singleLineBlockCommentRe = /^\s*(\/\*).*\*\/\s*$/;
+    this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/;
+    this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/;
+    this._getFoldWidgetBase = this.getFoldWidget;
+    this.getFoldWidget = function (session, foldStyle, row) {
+        var line = session.getLine(row);
+        if (this.singleLineBlockCommentRe.test(line)) {
+            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))
+                return "";
+        }
+        var fw = this._getFoldWidgetBase(session, foldStyle, row);
+        if (!fw && this.startRegionRe.test(line))
+            return "start"; // lineCommentRegionStart
+        return fw;
+    };
+    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {
+        var line = session.getLine(row);
+        if (this.startRegionRe.test(line))
+            return this.getCommentRegionBlock(session, line, row);
+        var match = line.match(this.foldingStartMarker);
+        if (match) {
+            var i = match.index;
+            if (match[1])
+                return this.openingBracketBlock(session, match[1], row, i);
+            var range = session.getCommentFoldRange(row, i + match[0].length, 1);
+            if (range && !range.isMultiLine()) {
+                if (forceMultiline) {
+                    range = this.getSectionRange(session, row);
+                }
+                else if (foldStyle != "all")
+                    range = null;
+            }
+            return range;
+        }
+        if (foldStyle === "markbegin")
+            return;
+        var match = line.match(this.foldingStopMarker);
+        if (match) {
+            var i = match.index + match[0].length;
+            if (match[1])
+                return this.closingBracketBlock(session, match[1], row, i);
+            return session.getCommentFoldRange(row, i, -1);
+        }
+    };
+    this.getSectionRange = function (session, row) {
+        var line = session.getLine(row);
+        var startIndent = line.search(/\S/);
+        var startRow = row;
+        var startColumn = line.length;
+        row = row + 1;
+        var endRow = row;
+        var maxRow = session.getLength();
+        while (++row < maxRow) {
+            line = session.getLine(row);
+            var indent = line.search(/\S/);
+            if (indent === -1)
+                continue;
+            if (startIndent > indent)
+                break;
+            var subRange = this.getFoldWidgetRange(session, "all", row);
+            if (subRange) {
+                if (subRange.start.row <= startRow) {
+                    break;
+                }
+                else if (subRange.isMultiLine()) {
+                    row = subRange.end.row;
+                }
+                else if (startIndent == indent) {
+                    break;
+                }
+            }
+            endRow = row;
+        }
+        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);
+    };
+    this.getCommentRegionBlock = function (session, line, row) {
+        var startColumn = line.search(/\s*$/);
+        var maxRow = session.getLength();
+        var startRow = row;
+        var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/;
+        var depth = 1;
+        while (++row < maxRow) {
+            line = session.getLine(row);
+            var m = re.exec(line);
+            if (!m)
+                continue;
+            if (m[1])
+                depth--;
+            else
+                depth++;
+            if (!depth)
+                break;
+        }
+        var endRow = row;
+        if (endRow > startRow) {
+            return new Range(startRow, startColumn, endRow, line.length);
+        }
+    };
+}).call(FoldMode.prototype);
+
+});
+
+ace.define("ace/mode/json",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/json_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/folding/cstyle","ace/worker/worker_client"], function(require, exports, module){"use strict";
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var HighlightRules = require("./json_highlight_rules").JsonHighlightRules;
+var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
+var CStyleFoldMode = require("./folding/cstyle").FoldMode;
+var WorkerClient = require("../worker/worker_client").WorkerClient;
+var Mode = function () {
+    this.HighlightRules = HighlightRules;
+    this.$outdent = new MatchingBraceOutdent();
+    this.$behaviour = this.$defaultBehaviour;
+    this.foldingRules = new CStyleFoldMode();
+};
+oop.inherits(Mode, TextMode);
+(function () {
+    this.lineCommentStart = "//";
+    this.blockComment = { start: "/*", end: "*/" };
+    this.getNextLineIndent = function (state, line, tab) {
+        var indent = this.$getIndent(line);
+        if (state == "start") {
+            var match = line.match(/^.*[\{\(\[]\s*$/);
+            if (match) {
+                indent += tab;
+            }
+        }
+        return indent;
+    };
+    this.checkOutdent = function (state, line, input) {
+        return this.$outdent.checkOutdent(line, input);
+    };
+    this.autoOutdent = function (state, doc, row) {
+        this.$outdent.autoOutdent(doc, row);
+    };
+    this.createWorker = function (session) {
+        var worker = new WorkerClient(["ace"], "ace/mode/json_worker", "JsonWorker");
+        worker.attachToDocument(session.getDocument());
+        worker.on("annotate", function (e) {
+            session.setAnnotations(e.data);
+        });
+        worker.on("terminate", function () {
+            session.clearAnnotations();
+        });
+        return worker;
+    };
+    this.$id = "ace/mode/json";
+}).call(Mode.prototype);
+exports.Mode = Mode;
+
+});                (function() {
+                    ace.require(["ace/mode/json"], function(m) {
+                        if (typeof module == "object" && typeof exports == "object" && module) {
+                            module.exports = m;
+                        }
+                    });
+                })();
+            

BIN
knife4gin/front/webjars/js/mode-json-d377560b.js.gz


+ 308 - 0
knife4gin/front/webjars/js/mode-json5-ed4a693f.js

@@ -0,0 +1,308 @@
+ace.define("ace/mode/json_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){"use strict";
+var oop = require("../lib/oop");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+var JsonHighlightRules = function () {
+    this.$rules = {
+        "start": [
+            {
+                token: "variable",
+                regex: '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]\\s*(?=:)'
+            }, {
+                token: "string",
+                regex: '"',
+                next: "string"
+            }, {
+                token: "constant.numeric",
+                regex: "0[xX][0-9a-fA-F]+\\b"
+            }, {
+                token: "constant.numeric",
+                regex: "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
+            }, {
+                token: "constant.language.boolean",
+                regex: "(?:true|false)\\b"
+            }, {
+                token: "text",
+                regex: "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
+            }, {
+                token: "comment",
+                regex: "\\/\\/.*$"
+            }, {
+                token: "comment.start",
+                regex: "\\/\\*",
+                next: "comment"
+            }, {
+                token: "paren.lparen",
+                regex: "[[({]"
+            }, {
+                token: "paren.rparen",
+                regex: "[\\])}]"
+            }, {
+                token: "punctuation.operator",
+                regex: /[,]/
+            }, {
+                token: "text",
+                regex: "\\s+"
+            }
+        ],
+        "string": [
+            {
+                token: "constant.language.escape",
+                regex: /\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|["\\\/bfnrt])/
+            }, {
+                token: "string",
+                regex: '"|$',
+                next: "start"
+            }, {
+                defaultToken: "string"
+            }
+        ],
+        "comment": [
+            {
+                token: "comment.end",
+                regex: "\\*\\/",
+                next: "start"
+            }, {
+                defaultToken: "comment"
+            }
+        ]
+    };
+};
+oop.inherits(JsonHighlightRules, TextHighlightRules);
+exports.JsonHighlightRules = JsonHighlightRules;
+
+});
+
+ace.define("ace/mode/json5_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/json_highlight_rules"], function(require, exports, module){"use strict";
+var oop = require("../lib/oop");
+var JsonHighlightRules = require("./json_highlight_rules").JsonHighlightRules;
+var Json5HighlightRules = function () {
+    JsonHighlightRules.call(this);
+    var startRules = [{
+            token: "variable",
+            regex: /[a-zA-Z$_\u00a1-\uffff][\w$\u00a1-\uffff]*\s*(?=:)/
+        }, {
+            token: "variable",
+            regex: /['](?:(?:\\.)|(?:[^'\\]))*?[']\s*(?=:)/
+        }, {
+            token: "constant.language.boolean",
+            regex: /(?:null)\b/
+        }, {
+            token: "string",
+            regex: /'/,
+            next: [{
+                    token: "constant.language.escape",
+                    regex: /\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|["\/bfnrt]|$)/,
+                    consumeLineEnd: true
+                }, {
+                    token: "string",
+                    regex: /'|$/,
+                    next: "start"
+                }, {
+                    defaultToken: "string"
+                }]
+        }, {
+            token: "string",
+            regex: /"(?![^"]*":)/,
+            next: [{
+                    token: "constant.language.escape",
+                    regex: /\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|["\/bfnrt]|$)/,
+                    consumeLineEnd: true
+                }, {
+                    token: "string",
+                    regex: /"|$/,
+                    next: "start"
+                }, {
+                    defaultToken: "string"
+                }]
+        }, {
+            token: "constant.numeric",
+            regex: /[+-]?(?:Infinity|NaN)\b/
+        }];
+    for (var key in this.$rules)
+        this.$rules[key].unshift.apply(this.$rules[key], startRules);
+    this.normalizeRules();
+};
+oop.inherits(Json5HighlightRules, JsonHighlightRules);
+exports.Json5HighlightRules = Json5HighlightRules;
+
+});
+
+ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module){"use strict";
+var Range = require("../range").Range;
+var MatchingBraceOutdent = function () { };
+(function () {
+    this.checkOutdent = function (line, input) {
+        if (!/^\s+$/.test(line))
+            return false;
+        return /^\s*\}/.test(input);
+    };
+    this.autoOutdent = function (doc, row) {
+        var line = doc.getLine(row);
+        var match = line.match(/^(\s*\})/);
+        if (!match)
+            return 0;
+        var column = match[1].length;
+        var openBracePos = doc.findMatchingBracket({ row: row, column: column });
+        if (!openBracePos || openBracePos.row == row)
+            return 0;
+        var indent = this.$getIndent(doc.getLine(openBracePos.row));
+        doc.replace(new Range(row, 0, row, column - 1), indent);
+    };
+    this.$getIndent = function (line) {
+        return line.match(/^\s*/)[0];
+    };
+}).call(MatchingBraceOutdent.prototype);
+exports.MatchingBraceOutdent = MatchingBraceOutdent;
+
+});
+
+ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module){"use strict";
+var oop = require("../../lib/oop");
+var Range = require("../../range").Range;
+var BaseFoldMode = require("./fold_mode").FoldMode;
+var FoldMode = exports.FoldMode = function (commentRegex) {
+    if (commentRegex) {
+        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start));
+        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end));
+    }
+};
+oop.inherits(FoldMode, BaseFoldMode);
+(function () {
+    this.foldingStartMarker = /([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/;
+    this.foldingStopMarker = /^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/;
+    this.singleLineBlockCommentRe = /^\s*(\/\*).*\*\/\s*$/;
+    this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/;
+    this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/;
+    this._getFoldWidgetBase = this.getFoldWidget;
+    this.getFoldWidget = function (session, foldStyle, row) {
+        var line = session.getLine(row);
+        if (this.singleLineBlockCommentRe.test(line)) {
+            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))
+                return "";
+        }
+        var fw = this._getFoldWidgetBase(session, foldStyle, row);
+        if (!fw && this.startRegionRe.test(line))
+            return "start"; // lineCommentRegionStart
+        return fw;
+    };
+    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {
+        var line = session.getLine(row);
+        if (this.startRegionRe.test(line))
+            return this.getCommentRegionBlock(session, line, row);
+        var match = line.match(this.foldingStartMarker);
+        if (match) {
+            var i = match.index;
+            if (match[1])
+                return this.openingBracketBlock(session, match[1], row, i);
+            var range = session.getCommentFoldRange(row, i + match[0].length, 1);
+            if (range && !range.isMultiLine()) {
+                if (forceMultiline) {
+                    range = this.getSectionRange(session, row);
+                }
+                else if (foldStyle != "all")
+                    range = null;
+            }
+            return range;
+        }
+        if (foldStyle === "markbegin")
+            return;
+        var match = line.match(this.foldingStopMarker);
+        if (match) {
+            var i = match.index + match[0].length;
+            if (match[1])
+                return this.closingBracketBlock(session, match[1], row, i);
+            return session.getCommentFoldRange(row, i, -1);
+        }
+    };
+    this.getSectionRange = function (session, row) {
+        var line = session.getLine(row);
+        var startIndent = line.search(/\S/);
+        var startRow = row;
+        var startColumn = line.length;
+        row = row + 1;
+        var endRow = row;
+        var maxRow = session.getLength();
+        while (++row < maxRow) {
+            line = session.getLine(row);
+            var indent = line.search(/\S/);
+            if (indent === -1)
+                continue;
+            if (startIndent > indent)
+                break;
+            var subRange = this.getFoldWidgetRange(session, "all", row);
+            if (subRange) {
+                if (subRange.start.row <= startRow) {
+                    break;
+                }
+                else if (subRange.isMultiLine()) {
+                    row = subRange.end.row;
+                }
+                else if (startIndent == indent) {
+                    break;
+                }
+            }
+            endRow = row;
+        }
+        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);
+    };
+    this.getCommentRegionBlock = function (session, line, row) {
+        var startColumn = line.search(/\s*$/);
+        var maxRow = session.getLength();
+        var startRow = row;
+        var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/;
+        var depth = 1;
+        while (++row < maxRow) {
+            line = session.getLine(row);
+            var m = re.exec(line);
+            if (!m)
+                continue;
+            if (m[1])
+                depth--;
+            else
+                depth++;
+            if (!depth)
+                break;
+        }
+        var endRow = row;
+        if (endRow > startRow) {
+            return new Range(startRow, startColumn, endRow, line.length);
+        }
+    };
+}).call(FoldMode.prototype);
+
+});
+
+ace.define("ace/mode/json5",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/json5_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/folding/cstyle"], function(require, exports, module){"use strict";
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var HighlightRules = require("./json5_highlight_rules").Json5HighlightRules;
+var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
+var CStyleFoldMode = require("./folding/cstyle").FoldMode;
+var Mode = function () {
+    this.HighlightRules = HighlightRules;
+    this.$outdent = new MatchingBraceOutdent();
+    this.$behaviour = this.$defaultBehaviour;
+    this.foldingRules = new CStyleFoldMode();
+};
+oop.inherits(Mode, TextMode);
+(function () {
+    this.lineCommentStart = "//";
+    this.blockComment = { start: "/*", end: "*/" };
+    this.checkOutdent = function (state, line, input) {
+        return this.$outdent.checkOutdent(line, input);
+    };
+    this.autoOutdent = function (state, doc, row) {
+        this.$outdent.autoOutdent(doc, row);
+    };
+    this.$id = "ace/mode/json5";
+}).call(Mode.prototype);
+exports.Mode = Mode;
+
+});                (function() {
+                    ace.require(["ace/mode/json5"], function(m) {
+                        if (typeof module == "object" && typeof exports == "object" && module) {
+                            module.exports = m;
+                        }
+                    });
+                })();
+            

BIN
knife4gin/front/webjars/js/mode-json5-ed4a693f.js.gz


+ 469 - 0
knife4gin/front/webjars/js/mode-xml-6468964d.js

@@ -0,0 +1,469 @@
+ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){"use strict";
+var oop = require("../lib/oop");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+var XmlHighlightRules = function (normalize) {
+    var tagRegex = "[_:a-zA-Z\xc0-\uffff][-_:.a-zA-Z0-9\xc0-\uffff]*";
+    this.$rules = {
+        start: [
+            { token: "string.cdata.xml", regex: "<\\!\\[CDATA\\[", next: "cdata" },
+            {
+                token: ["punctuation.instruction.xml", "keyword.instruction.xml"],
+                regex: "(<\\?)(" + tagRegex + ")", next: "processing_instruction"
+            },
+            { token: "comment.start.xml", regex: "<\\!--", next: "comment" },
+            {
+                token: ["xml-pe.doctype.xml", "xml-pe.doctype.xml"],
+                regex: "(<\\!)(DOCTYPE)(?=[\\s])", next: "doctype", caseInsensitive: true
+            },
+            { include: "tag" },
+            { token: "text.end-tag-open.xml", regex: "</" },
+            { token: "text.tag-open.xml", regex: "<" },
+            { include: "reference" },
+            { defaultToken: "text.xml" }
+        ],
+        processing_instruction: [{
+                token: "entity.other.attribute-name.decl-attribute-name.xml",
+                regex: tagRegex
+            }, {
+                token: "keyword.operator.decl-attribute-equals.xml",
+                regex: "="
+            }, {
+                include: "whitespace"
+            }, {
+                include: "string"
+            }, {
+                token: "punctuation.xml-decl.xml",
+                regex: "\\?>",
+                next: "start"
+            }],
+        doctype: [
+            { include: "whitespace" },
+            { include: "string" },
+            { token: "xml-pe.doctype.xml", regex: ">", next: "start" },
+            { token: "xml-pe.xml", regex: "[-_a-zA-Z0-9:]+" },
+            { token: "punctuation.int-subset", regex: "\\[", push: "int_subset" }
+        ],
+        int_subset: [{
+                token: "text.xml",
+                regex: "\\s+"
+            }, {
+                token: "punctuation.int-subset.xml",
+                regex: "]",
+                next: "pop"
+            }, {
+                token: ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"],
+                regex: "(<\\!)(" + tagRegex + ")",
+                push: [{
+                        token: "text",
+                        regex: "\\s+"
+                    },
+                    {
+                        token: "punctuation.markup-decl.xml",
+                        regex: ">",
+                        next: "pop"
+                    },
+                    { include: "string" }]
+            }],
+        cdata: [
+            { token: "string.cdata.xml", regex: "\\]\\]>", next: "start" },
+            { token: "text.xml", regex: "\\s+" },
+            { token: "text.xml", regex: "(?:[^\\]]|\\](?!\\]>))+" }
+        ],
+        comment: [
+            { token: "comment.end.xml", regex: "-->", next: "start" },
+            { defaultToken: "comment.xml" }
+        ],
+        reference: [{
+                token: "constant.language.escape.reference.xml",
+                regex: "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"
+            }],
+        attr_reference: [{
+                token: "constant.language.escape.reference.attribute-value.xml",
+                regex: "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"
+            }],
+        tag: [{
+                token: ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"],
+                regex: "(?:(<)|(</))((?:" + tagRegex + ":)?" + tagRegex + ")",
+                next: [
+                    { include: "attributes" },
+                    { token: "meta.tag.punctuation.tag-close.xml", regex: "/?>", next: "start" }
+                ]
+            }],
+        tag_whitespace: [
+            { token: "text.tag-whitespace.xml", regex: "\\s+" }
+        ],
+        whitespace: [
+            { token: "text.whitespace.xml", regex: "\\s+" }
+        ],
+        string: [{
+                token: "string.xml",
+                regex: "'",
+                push: [
+                    { token: "string.xml", regex: "'", next: "pop" },
+                    { defaultToken: "string.xml" }
+                ]
+            }, {
+                token: "string.xml",
+                regex: '"',
+                push: [
+                    { token: "string.xml", regex: '"', next: "pop" },
+                    { defaultToken: "string.xml" }
+                ]
+            }],
+        attributes: [{
+                token: "entity.other.attribute-name.xml",
+                regex: tagRegex
+            }, {
+                token: "keyword.operator.attribute-equals.xml",
+                regex: "="
+            }, {
+                include: "tag_whitespace"
+            }, {
+                include: "attribute_value"
+            }],
+        attribute_value: [{
+                token: "string.attribute-value.xml",
+                regex: "'",
+                push: [
+                    { token: "string.attribute-value.xml", regex: "'", next: "pop" },
+                    { include: "attr_reference" },
+                    { defaultToken: "string.attribute-value.xml" }
+                ]
+            }, {
+                token: "string.attribute-value.xml",
+                regex: '"',
+                push: [
+                    { token: "string.attribute-value.xml", regex: '"', next: "pop" },
+                    { include: "attr_reference" },
+                    { defaultToken: "string.attribute-value.xml" }
+                ]
+            }]
+    };
+    if (this.constructor === XmlHighlightRules)
+        this.normalizeRules();
+};
+(function () {
+    this.embedTagRules = function (HighlightRules, prefix, tag) {
+        this.$rules.tag.unshift({
+            token: ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"],
+            regex: "(<)(" + tag + "(?=\\s|>|$))",
+            next: [
+                { include: "attributes" },
+                { token: "meta.tag.punctuation.tag-close.xml", regex: "/?>", next: prefix + "start" }
+            ]
+        });
+        this.$rules[tag + "-end"] = [
+            { include: "attributes" },
+            { token: "meta.tag.punctuation.tag-close.xml", regex: "/?>", next: "start",
+                onMatch: function (value, currentState, stack) {
+                    stack.splice(0);
+                    return this.token;
+                } }
+        ];
+        this.embedRules(HighlightRules, prefix, [{
+                token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"],
+                regex: "(</)(" + tag + "(?=\\s|>|$))",
+                next: tag + "-end"
+            }, {
+                token: "string.cdata.xml",
+                regex: "<\\!\\[CDATA\\["
+            }, {
+                token: "string.cdata.xml",
+                regex: "\\]\\]>"
+            }]);
+    };
+}).call(TextHighlightRules.prototype);
+oop.inherits(XmlHighlightRules, TextHighlightRules);
+exports.XmlHighlightRules = XmlHighlightRules;
+
+});
+
+ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module){"use strict";
+var oop = require("../../lib/oop");
+var Behaviour = require("../behaviour").Behaviour;
+var TokenIterator = require("../../token_iterator").TokenIterator;
+var lang = require("../../lib/lang");
+function is(token, type) {
+    return token && token.type.lastIndexOf(type + ".xml") > -1;
+}
+var XmlBehaviour = function () {
+    this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
+        if (text == '"' || text == "'") {
+            var quote = text;
+            var selected = session.doc.getTextRange(editor.getSelectionRange());
+            if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
+                return {
+                    text: quote + selected + quote,
+                    selection: false
+                };
+            }
+            var cursor = editor.getCursorPosition();
+            var line = session.doc.getLine(cursor.row);
+            var rightChar = line.substring(cursor.column, cursor.column + 1);
+            var iterator = new TokenIterator(session, cursor.row, cursor.column);
+            var token = iterator.getCurrentToken();
+            if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) {
+                return {
+                    text: "",
+                    selection: [1, 1]
+                };
+            }
+            if (!token)
+                token = iterator.stepBackward();
+            if (!token)
+                return;
+            while (is(token, "tag-whitespace") || is(token, "whitespace")) {
+                token = iterator.stepBackward();
+            }
+            var rightSpace = !rightChar || rightChar.match(/\s/);
+            if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) {
+                return {
+                    text: quote + quote,
+                    selection: [1, 1]
+                };
+            }
+        }
+    });
+    this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
+        var selected = session.doc.getTextRange(range);
+        if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
+            var line = session.doc.getLine(range.start.row);
+            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+            if (rightChar == selected) {
+                range.end.column++;
+                return range;
+            }
+        }
+    });
+    this.add("autoclosing", "insertion", function (state, action, editor, session, text) {
+        if (text == '>') {
+            var position = editor.getSelectionRange().start;
+            var iterator = new TokenIterator(session, position.row, position.column);
+            var token = iterator.getCurrentToken() || iterator.stepBackward();
+            if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value")))
+                return;
+            if (is(token, "reference.attribute-value"))
+                return;
+            if (is(token, "attribute-value")) {
+                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;
+                if (position.column < tokenEndColumn)
+                    return;
+                if (position.column == tokenEndColumn) {
+                    var nextToken = iterator.stepForward();
+                    if (nextToken && is(nextToken, "attribute-value"))
+                        return;
+                    iterator.stepBackward();
+                }
+            }
+            if (/^\s*>/.test(session.getLine(position.row).slice(position.column)))
+                return;
+            while (!is(token, "tag-name")) {
+                token = iterator.stepBackward();
+                if (token.value == "<") {
+                    token = iterator.stepForward();
+                    break;
+                }
+            }
+            var tokenRow = iterator.getCurrentTokenRow();
+            var tokenColumn = iterator.getCurrentTokenColumn();
+            if (is(iterator.stepBackward(), "end-tag-open"))
+                return;
+            var element = token.value;
+            if (tokenRow == position.row)
+                element = element.substring(0, position.column - tokenColumn);
+            if (this.voidElements.hasOwnProperty(element.toLowerCase()))
+                return;
+            return {
+                text: ">" + "</" + element + ">",
+                selection: [1, 1]
+            };
+        }
+    });
+    this.add("autoindent", "insertion", function (state, action, editor, session, text) {
+        if (text == "\n") {
+            var cursor = editor.getCursorPosition();
+            var line = session.getLine(cursor.row);
+            var iterator = new TokenIterator(session, cursor.row, cursor.column);
+            var token = iterator.getCurrentToken();
+            if (token && token.type.indexOf("tag-close") !== -1) {
+                if (token.value == "/>")
+                    return;
+                while (token && token.type.indexOf("tag-name") === -1) {
+                    token = iterator.stepBackward();
+                }
+                if (!token) {
+                    return;
+                }
+                var tag = token.value;
+                var row = iterator.getCurrentTokenRow();
+                token = iterator.stepBackward();
+                if (!token || token.type.indexOf("end-tag") !== -1) {
+                    return;
+                }
+                if (this.voidElements && !this.voidElements[tag]) {
+                    var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);
+                    var line = session.getLine(row);
+                    var nextIndent = this.$getIndent(line);
+                    var indent = nextIndent + session.getTabString();
+                    if (nextToken && nextToken.value === "</") {
+                        return {
+                            text: "\n" + indent + "\n" + nextIndent,
+                            selection: [1, indent.length, 1, indent.length]
+                        };
+                    }
+                    else {
+                        return {
+                            text: "\n" + indent
+                        };
+                    }
+                }
+            }
+        }
+    });
+};
+oop.inherits(XmlBehaviour, Behaviour);
+exports.XmlBehaviour = XmlBehaviour;
+
+});
+
+ace.define("ace/mode/folding/xml",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module){"use strict";
+var oop = require("../../lib/oop");
+var Range = require("../../range").Range;
+var BaseFoldMode = require("./fold_mode").FoldMode;
+var FoldMode = exports.FoldMode = function (voidElements, optionalEndTags) {
+    BaseFoldMode.call(this);
+    this.voidElements = voidElements || {};
+    this.optionalEndTags = oop.mixin({}, this.voidElements);
+    if (optionalEndTags)
+        oop.mixin(this.optionalEndTags, optionalEndTags);
+};
+oop.inherits(FoldMode, BaseFoldMode);
+var Tag = function () {
+    this.tagName = "";
+    this.closing = false;
+    this.selfClosing = false;
+    this.start = { row: 0, column: 0 };
+    this.end = { row: 0, column: 0 };
+};
+function is(token, type) {
+    return token.type.lastIndexOf(type + ".xml") > -1;
+}
+(function () {
+    this.getFoldWidget = function (session, foldStyle, row) {
+        var tag = this._getFirstTagInLine(session, row);
+        if (!tag)
+            return this.getCommentFoldWidget(session, row);
+        if (tag.closing || (!tag.tagName && tag.selfClosing))
+            return foldStyle === "markbeginend" ? "end" : "";
+        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))
+            return "";
+        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))
+            return "";
+        return "start";
+    };
+    this.getCommentFoldWidget = function (session, row) {
+        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))
+            return "start";
+        return "";
+    };
+    this._getFirstTagInLine = function (session, row) {
+        var tokens = session.getTokens(row);
+        var tag = new Tag();
+        for (var i = 0; i < tokens.length; i++) {
+            var token = tokens[i];
+            if (is(token, "tag-open")) {
+                tag.end.column = tag.start.column + token.value.length;
+                tag.closing = is(token, "end-tag-open");
+                token = tokens[++i];
+                if (!token)
+                    return null;
+                tag.tagName = token.value;
+                tag.end.column += token.value.length;
+                for (i++; i < tokens.length; i++) {
+                    token = tokens[i];
+                    tag.end.column += token.value.length;
+                    if (is(token, "tag-close")) {
+                        tag.selfClosing = token.value == '/>';
+                        break;
+                    }
+                }
+                return tag;
+            }
+            else if (is(token, "tag-close")) {
+                tag.selfClosing = token.value == '/>';
+                return tag;
+            }
+            tag.start.column += token.value.length;
+        }
+        return null;
+    };
+    this._findEndTagInLine = function (session, row, tagName, startColumn) {
+        var tokens = session.getTokens(row);
+        var column = 0;
+        for (var i = 0; i < tokens.length; i++) {
+            var token = tokens[i];
+            column += token.value.length;
+            if (column < startColumn)
+                continue;
+            if (is(token, "end-tag-open")) {
+                token = tokens[i + 1];
+                if (token && token.value == tagName)
+                    return true;
+            }
+        }
+        return false;
+    };
+    this.getFoldWidgetRange = function (session, foldStyle, row) {
+        var tags = session.getMatchingTags({ row: row, column: 0 });
+        if (tags) {
+            return new Range(tags.openTag.end.row, tags.openTag.end.column, tags.closeTag.start.row, tags.closeTag.start.column);
+        }
+        else {
+            return this.getCommentFoldWidget(session, row)
+                && session.getCommentFoldRange(row, session.getLine(row).length);
+        }
+    };
+}).call(FoldMode.prototype);
+
+});
+
+ace.define("ace/mode/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/xml_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/xml","ace/worker/worker_client"], function(require, exports, module){"use strict";
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var TextMode = require("./text").Mode;
+var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;
+var XmlBehaviour = require("./behaviour/xml").XmlBehaviour;
+var XmlFoldMode = require("./folding/xml").FoldMode;
+var WorkerClient = require("../worker/worker_client").WorkerClient;
+var Mode = function () {
+    this.HighlightRules = XmlHighlightRules;
+    this.$behaviour = new XmlBehaviour();
+    this.foldingRules = new XmlFoldMode();
+};
+oop.inherits(Mode, TextMode);
+(function () {
+    this.voidElements = lang.arrayToMap([]);
+    this.blockComment = { start: "<!--", end: "-->" };
+    this.createWorker = function (session) {
+        var worker = new WorkerClient(["ace"], "ace/mode/xml_worker", "Worker");
+        worker.attachToDocument(session.getDocument());
+        worker.on("error", function (e) {
+            session.setAnnotations(e.data);
+        });
+        worker.on("terminate", function () {
+            session.clearAnnotations();
+        });
+        return worker;
+    };
+    this.$id = "ace/mode/xml";
+}).call(Mode.prototype);
+exports.Mode = Mode;
+
+});                (function() {
+                    ace.require(["ace/mode/xml"], function(m) {
+                        if (typeof module == "object" && typeof exports == "object" && module) {
+                            module.exports = m;
+                        }
+                    });
+                })();
+            

BIN
knife4gin/front/webjars/js/mode-xml-6468964d.js.gz


+ 1 - 0
knife4gin/front/webjars/js/ordinal-ba9b4969.js

@@ -0,0 +1 @@
+import{i as a}from"./init-77b53fdd.js";class o extends Map{constructor(n,t=g){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:t}}),n!=null)for(const[r,s]of n)this.set(r,s)}get(n){return super.get(c(this,n))}has(n){return super.has(c(this,n))}set(n,t){return super.set(l(this,n),t)}delete(n){return super.delete(p(this,n))}}function c({_intern:e,_key:n},t){const r=n(t);return e.has(r)?e.get(r):t}function l({_intern:e,_key:n},t){const r=n(t);return e.has(r)?e.get(r):(e.set(r,t),t)}function p({_intern:e,_key:n},t){const r=n(t);return e.has(r)&&(t=e.get(r),e.delete(r)),t}function g(e){return e!==null&&typeof e=="object"?e.valueOf():e}const f=Symbol("implicit");function h(){var e=new o,n=[],t=[],r=f;function s(u){let i=e.get(u);if(i===void 0){if(r!==f)return r;e.set(u,i=n.push(u)-1)}return t[i%t.length]}return s.domain=function(u){if(!arguments.length)return n.slice();n=[],e=new o;for(const i of u)e.has(i)||e.set(i,n.push(i)-1);return s},s.range=function(u){return arguments.length?(t=Array.from(u),s):t.slice()},s.unknown=function(u){return arguments.length?(r=u,s):r},s.copy=function(){return h(n,t).unknown(r)},a.apply(s,arguments),s}export{h as o};

File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/js/path-53f90ab3.js


File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/js/pieDiagram-cc8a845d-17f9a8b5.js


BIN
knife4gin/front/webjars/js/pieDiagram-cc8a845d-17f9a8b5.js.gz


File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/js/quadrantDiagram-d70906b3-16b9d5de.js


BIN
knife4gin/front/webjars/js/quadrantDiagram-d70906b3-16b9d5de.js.gz


File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/js/requirementDiagram-025ed9cd-9191e569.js


BIN
knife4gin/front/webjars/js/requirementDiagram-025ed9cd-9191e569.js.gz


File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/js/sankeyDiagram-86f1d020-182ce612.js


BIN
knife4gin/front/webjars/js/sankeyDiagram-86f1d020-182ce612.js.gz


File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/js/sequenceDiagram-d8e7905c-120656bc.js


BIN
knife4gin/front/webjars/js/sequenceDiagram-d8e7905c-120656bc.js.gz


File diff suppressed because it is too large
+ 0 - 0
knife4gin/front/webjars/js/stateDiagram-b8fc1844-35959eab.js


Some files were not shown because too many files changed in this diff