@xom11/whiteboard 0.27.0 → 0.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai.d.mts +1 -1
- package/dist/ai.d.ts +1 -1
- package/dist/ai.js +54 -23
- package/dist/ai.js.map +1 -1
- package/dist/ai.mjs +54 -23
- package/dist/ai.mjs.map +1 -1
- package/dist/catalog.json +4 -4
- package/dist/{chunk-D5JLJ3PT.mjs → chunk-5JM35CXV.mjs} +4 -4
- package/dist/{chunk-D5JLJ3PT.mjs.map → chunk-5JM35CXV.mjs.map} +1 -1
- package/dist/{chunk-KYMBUTPO.mjs → chunk-BU5KLO3P.mjs} +3 -3
- package/dist/{chunk-KYMBUTPO.mjs.map → chunk-BU5KLO3P.mjs.map} +1 -1
- package/dist/{chunk-AYJPOHCI.mjs → chunk-H22OZYTW.mjs} +3 -3
- package/dist/{chunk-AYJPOHCI.mjs.map → chunk-H22OZYTW.mjs.map} +1 -1
- package/dist/{chunk-I3L56GVH.mjs → chunk-OQIQNKPQ.mjs} +3 -3
- package/dist/{chunk-I3L56GVH.mjs.map → chunk-OQIQNKPQ.mjs.map} +1 -1
- package/dist/{chunk-KZGPSTZI.mjs → chunk-QCZVFEN4.mjs} +4 -4
- package/dist/{chunk-KZGPSTZI.mjs.map → chunk-QCZVFEN4.mjs.map} +1 -1
- package/dist/{chunk-4ETJ4CDY.mjs → chunk-QRUAEXLR.mjs} +4 -4
- package/dist/{chunk-4ETJ4CDY.mjs.map → chunk-QRUAEXLR.mjs.map} +1 -1
- package/dist/{chunk-HLAOGXEK.mjs → chunk-V3YJ6JFL.mjs} +3 -3
- package/dist/{chunk-HLAOGXEK.mjs.map → chunk-V3YJ6JFL.mjs.map} +1 -1
- package/dist/{chunk-D5LWSN2Y.mjs → chunk-ZTQBUKLJ.mjs} +30 -13
- package/dist/chunk-ZTQBUKLJ.mjs.map +1 -0
- package/dist/geometry-2d.d.mts +1 -1
- package/dist/geometry-2d.d.ts +1 -1
- package/dist/geometry-2d.js +143 -33
- package/dist/geometry-2d.js.map +1 -1
- package/dist/geometry-2d.mjs +3 -3
- package/dist/geometry-3d.d.mts +1 -1
- package/dist/geometry-3d.d.ts +1 -1
- package/dist/geometry-3d.js +28 -11
- package/dist/geometry-3d.js.map +1 -1
- package/dist/geometry-3d.mjs +3 -3
- package/dist/graph-2d.d.mts +1 -1
- package/dist/graph-2d.d.ts +1 -1
- package/dist/graph-2d.js +28 -11
- package/dist/graph-2d.js.map +1 -1
- package/dist/graph-2d.mjs +3 -3
- package/dist/{host-M26FS244.mjs → host-2ISGVO7O.mjs} +5 -5
- package/dist/{host-M26FS244.mjs.map → host-2ISGVO7O.mjs.map} +1 -1
- package/dist/{host-HAYCJJ2T.mjs → host-4P766V4J.mjs} +110 -27
- package/dist/host-4P766V4J.mjs.map +1 -0
- package/dist/{host-LTJHAY5A.mjs → host-HOSJHQ5H.mjs} +6 -6
- package/dist/{host-LTJHAY5A.mjs.map → host-HOSJHQ5H.mjs.map} +1 -1
- package/dist/index.d.mts +9 -4
- package/dist/index.d.ts +9 -4
- package/dist/index.js +147 -35
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +17 -15
- package/dist/index.mjs.map +1 -1
- package/dist/latex.d.mts +1 -1
- package/dist/latex.d.ts +1 -1
- package/dist/serialize-N4G6RFBB.mjs +9 -0
- package/dist/{serialize-C3LSUMSA.mjs.map → serialize-N4G6RFBB.mjs.map} +1 -1
- package/dist/{types-zc_Pa0mp.d.mts → types-BHYC2Fiw.d.mts} +25 -1
- package/dist/{types-zc_Pa0mp.d.ts → types-BHYC2Fiw.d.ts} +25 -1
- package/package.json +1 -1
- package/dist/chunk-D5LWSN2Y.mjs.map +0 -1
- package/dist/host-HAYCJJ2T.mjs.map +0 -1
- package/dist/serialize-C3LSUMSA.mjs +0 -9
package/dist/ai.mjs
CHANGED
|
@@ -2221,6 +2221,7 @@ var GEOMETRY_KEYWORDS = [
|
|
|
2221
2221
|
// Base shapes
|
|
2222
2222
|
"tam gi\xE1c",
|
|
2223
2223
|
"\u0111\u01B0\u1EDDng tr\xF2n",
|
|
2224
|
+
"\u0111\u01B0\u01A1ng tr\xF2n",
|
|
2224
2225
|
"h\xECnh ch\u1EEF nh\u1EADt",
|
|
2225
2226
|
"h\xECnh vu\xF4ng",
|
|
2226
2227
|
"h\xECnh b\xECnh h\xE0nh",
|
|
@@ -2235,11 +2236,13 @@ var GEOMETRY_KEYWORDS = [
|
|
|
2235
2236
|
"b\xE1n k\xEDnh",
|
|
2236
2237
|
"t\xE2m",
|
|
2237
2238
|
"\u0111\u01B0\u1EDDng k\xEDnh",
|
|
2239
|
+
"\u0111\u01B0\u01A1ng k\xEDnh",
|
|
2238
2240
|
// Segments / on-segment
|
|
2239
2241
|
"\u0111o\u1EA1n",
|
|
2240
2242
|
// Derived points
|
|
2241
2243
|
"trung \u0111i\u1EC3m",
|
|
2242
2244
|
"ch\xE2n \u0111\u01B0\u1EDDng cao",
|
|
2245
|
+
"ch\xE2n \u0111\u01B0\u01A1ng cao",
|
|
2243
2246
|
"h\xECnh chi\u1EBFu",
|
|
2244
2247
|
"tr\u1ECDng t\xE2m",
|
|
2245
2248
|
"tr\u1EF1c t\xE2m",
|
|
@@ -2247,6 +2250,7 @@ var GEOMETRY_KEYWORDS = [
|
|
|
2247
2250
|
"t\xE2m ngo\u1EA1i ti\u1EBFp",
|
|
2248
2251
|
// Cevian names
|
|
2249
2252
|
"\u0111\u01B0\u1EDDng cao",
|
|
2253
|
+
"\u0111\u01B0\u01A1ng cao",
|
|
2250
2254
|
"trung tuy\u1EBFn",
|
|
2251
2255
|
"ph\xE2n gi\xE1c",
|
|
2252
2256
|
"trung tr\u1EF1c",
|
|
@@ -2283,6 +2287,8 @@ var GEOMETRY_KEYWORDS = [
|
|
|
2283
2287
|
"vu\xF4ng g\xF3c",
|
|
2284
2288
|
"giao \u0111i\u1EC3m",
|
|
2285
2289
|
"c\u1EAFt",
|
|
2290
|
+
"\u0111\u01B0\u1EDDng th\u1EB3ng",
|
|
2291
|
+
"\u0111\u01B0\u01A1ng th\u1EB3ng",
|
|
2286
2292
|
// Ký hiệu (symbol-only phrasing tương đương từ chữ): "⊥" ≡ "vuông góc".
|
|
2287
2293
|
// perpFoot rule đã nhận "⊥" ở tầng construct (PERP_DRAW), nhưng gate
|
|
2288
2294
|
// hasGeometry trước đây CHỈ nhận chữ "vuông góc" → clause mà "⊥" là tín hiệu
|
|
@@ -2448,6 +2454,8 @@ function pairFromToken(token) {
|
|
|
2448
2454
|
return m ? [m[1], m[2]] : [];
|
|
2449
2455
|
}
|
|
2450
2456
|
var SIDE_PREFIX = "(?:c\u1EA1nh(?:\\s+huy\u1EC1n)?\\s+|\u0111o\u1EA1n(?:\\s+th\u1EB3ng)?\\s+)?";
|
|
2457
|
+
var DUONG_KW = "[\u0110\u0111]\u01B0[\u1EDD\u01A1]ng";
|
|
2458
|
+
var CIRCLE_KW = DUONG_KW + "\\s*tr\xF2n";
|
|
2451
2459
|
|
|
2452
2460
|
// src/stamps/geometry-2d/ai/rules/triangle.ts
|
|
2453
2461
|
var TRI_G = /tam giác\s+(?:(đều|vuông|cân)\s+)?([A-Z])([A-Z])([A-Z])(?![A-Z])/gu;
|
|
@@ -3422,12 +3430,15 @@ var centersRule = {
|
|
|
3422
3430
|
};
|
|
3423
3431
|
|
|
3424
3432
|
// src/stamps/geometry-2d/ai/rules/perpFoot.ts
|
|
3425
|
-
var PREFILTER5 =
|
|
3433
|
+
var PREFILTER5 = new RegExp(
|
|
3434
|
+
"h\xECnh\\s*chi\u1EBFu|ch\xE2n\\s+(?:c\u1EE7a\\s+)?" + DUONG_KW + "\\s+(?:cao|vu\xF4ng\\s*g\xF3c)|\u22A5|vu\xF4ng\\s*g\xF3c",
|
|
3435
|
+
"u"
|
|
3436
|
+
);
|
|
3426
3437
|
var PREFILTER_EN = /projection|perpendicular|foot\s+of/i;
|
|
3427
|
-
var LINE = "(
|
|
3438
|
+
var LINE = "(?:" + DUONG_KW + "\\s*th\u1EB3ng\\s+|c\u1EA1nh\\s+|\u0111o\u1EA1n\\s+)?([A-Z]{1,2})(?![A-Z])";
|
|
3428
3439
|
var PREP = "(?:tr\xEAn|l\xEAn|xu\u1ED1ng|\u0111\u1EBFn|t\u1EDBi)";
|
|
3429
3440
|
var PROJ_CORE = `h\xECnh\\s*chi\u1EBFu\\s+(?:vu\xF4ng\\s*g\xF3c\\s+)?(?:c\u1EE7a\\s+)?([A-Z])\\s+${PREP}\\s+${LINE}`;
|
|
3430
|
-
var FOOT_CORE = `ch\xE2n\\s+(?:c\u1EE7a\\s+)
|
|
3441
|
+
var FOOT_CORE = `ch\xE2n\\s+(?:c\u1EE7a\\s+)?${DUONG_KW}\\s+(?:vu\xF4ng\\s*g\xF3c|cao)\\s*(?:h\u1EA1\\s+|k\u1EBB\\s+|v\u1EBD\\s+|d\u1EF1ng\\s+)?(?:t\u1EEB\\s+)?([A-Z])\\s+${PREP}\\s+${LINE}`;
|
|
3431
3442
|
var LANLUOT = new RegExp(
|
|
3432
3443
|
`([A-Z])(?:[\u2032'])?\\s*,\\s*([A-Z])(?:[\u2032'])?\\s+l\u1EA7n\\s+l\u01B0\u1EE3t\\s+l\xE0\\s+(?:${PROJ_CORE}|${FOOT_CORE})\\s+v\xE0\\s+(?:c\u1EE7a\\s+|t\u1EEB\\s+)?([A-Z])\\s+${PREP}\\s+${LINE}`,
|
|
3433
3444
|
"gu"
|
|
@@ -3554,13 +3565,22 @@ var perpFootRule = {
|
|
|
3554
3565
|
};
|
|
3555
3566
|
|
|
3556
3567
|
// src/stamps/geometry-2d/ai/rules/circleRadius.ts
|
|
3557
|
-
var CENTER_RADIUS_WORDS_G =
|
|
3558
|
-
|
|
3568
|
+
var CENTER_RADIUS_WORDS_G = new RegExp(
|
|
3569
|
+
CIRCLE_KW + "\\s*(?:\\(\\s*)?(?:t\xE2m\\s+)?([^\\s;,).:]+)(?:\\s*\\))?(?:(?!\u0111\u01B0\u1EDDng|v\xE0\\s)[^A-Z])*?b\xE1n\\s*k\xEDnh\\s+(\\d+(?:[.,]\\d+)?)",
|
|
3570
|
+
"gu"
|
|
3571
|
+
);
|
|
3572
|
+
var CENTER_THROUGH_G = new RegExp(
|
|
3573
|
+
CIRCLE_KW + "\\s*(?:\\(\\s*)?(?:t\xE2m\\s+)?([^\\s;,).:]+)(?:\\s*\\))?\\s+\u0111i\\s+qua\\s+([A-Z])",
|
|
3574
|
+
"gu"
|
|
3575
|
+
);
|
|
3559
3576
|
var THROUGH_MULTI = /đi\s+qua\s+[A-Z]\s*(?:và|,)\s*[A-Z]/u;
|
|
3560
3577
|
var CENTER_RADIUS_PAREN_G = /\(\s*([A-Z])\s*[;,]\s*(\d+(?:[.,]\d+)?)\s*\)/gu;
|
|
3561
3578
|
var SYMBOLIC_RADIUS = 3;
|
|
3562
3579
|
var CENTER_RADIUS_LETTER_PAREN_G = /\(\s*([A-Z])\s*[;,]\s*[Rr]\s*\)/gu;
|
|
3563
|
-
var CENTER_RADIUS_LETTER_WORDS_G =
|
|
3580
|
+
var CENTER_RADIUS_LETTER_WORDS_G = new RegExp(
|
|
3581
|
+
CIRCLE_KW + "\\s*(?:\\(\\s*)?(?:t\xE2m\\s+)?([^\\s;,).:]+)(?:\\s*\\))?(?:(?!\u0111\u01B0\u1EDDng|v\xE0\\s)[^A-Z])*?b\xE1n\\s*k\xEDnh\\s+[Rr](?![A-Za-z])",
|
|
3582
|
+
"gu"
|
|
3583
|
+
);
|
|
3564
3584
|
var CIRCLE_CENTER_EN = "[Cc]ircle\\s+(?:with\\s+|of\\s+)?cent(?:er|re)(?:ed)?\\s+(?:at\\s+|of\\s+)?([A-Z])(?![A-Za-z])";
|
|
3565
3585
|
var EN_GAP = "(?:(?![Cc]ircle)[^A-Z])*?";
|
|
3566
3586
|
var CIRCLE_CR_EN_G = new RegExp(
|
|
@@ -3722,21 +3742,21 @@ var circleRadiusRule = {
|
|
|
3722
3742
|
|
|
3723
3743
|
// src/stamps/geometry-2d/ai/rules/circleTriangle.ts
|
|
3724
3744
|
var HAS_INSCRIBE = /(?<!\p{L})(?:nội|ngoại)\s*tiếp(?!\p{L})/iu;
|
|
3725
|
-
var CENTER2 = "(?:\\(\\s*([
|
|
3745
|
+
var CENTER2 = "(?:\\(\\s*([^\\s;,).:]+)\\s*\\)|t\xE2m\\s+([A-Z]))?";
|
|
3726
3746
|
var CIRCUM_TRI = new RegExp(
|
|
3727
|
-
"
|
|
3747
|
+
CIRCLE_KW + "\\s*" + CENTER2 + "\\s*ngo\u1EA1i\\s*ti\u1EBFp\\s+tam\\s*gi\xE1c\\s+([A-Z])([A-Z])([A-Z])(?![A-Z])",
|
|
3728
3748
|
"giu"
|
|
3729
3749
|
);
|
|
3730
3750
|
var INCIRCLE_TRI = new RegExp(
|
|
3731
|
-
"
|
|
3751
|
+
CIRCLE_KW + "\\s*" + CENTER2 + "\\s*n\u1ED9i\\s*ti\u1EBFp\\s+tam\\s*gi\xE1c\\s+([A-Z])([A-Z])([A-Z])(?![A-Z])",
|
|
3732
3752
|
"giu"
|
|
3733
3753
|
);
|
|
3734
3754
|
var TRI_INSCRIBED_IN_CIRCLE = new RegExp(
|
|
3735
|
-
"tam\\s*gi\xE1c\\s+([A-Z])([A-Z])([A-Z])(?![A-Z])[^.]{0,40}?n\u1ED9i\\s*ti\u1EBFp\\s+(?:trong\\s+)
|
|
3755
|
+
"tam\\s*gi\xE1c\\s+([A-Z])([A-Z])([A-Z])(?![A-Z])[^.]{0,40}?n\u1ED9i\\s*ti\u1EBFp\\s+(?:trong\\s+)?" + CIRCLE_KW + "\\s*" + CENTER2,
|
|
3736
3756
|
"giu"
|
|
3737
3757
|
);
|
|
3738
3758
|
var TRI_CIRCUMSCRIBES_CIRCLE = new RegExp(
|
|
3739
|
-
"tam\\s*gi\xE1c\\s+([A-Z])([A-Z])([A-Z])(?![A-Z])[^.]{0,40}?ngo\u1EA1i\\s*ti\u1EBFp\\s
|
|
3759
|
+
"tam\\s*gi\xE1c\\s+([A-Z])([A-Z])([A-Z])(?![A-Z])[^.]{0,40}?ngo\u1EA1i\\s*ti\u1EBFp\\s+" + CIRCLE_KW + "\\s*" + CENTER2,
|
|
3740
3760
|
"giu"
|
|
3741
3761
|
);
|
|
3742
3762
|
var TRI_INSCRIBED_IN_PAREN = new RegExp(
|
|
@@ -3747,7 +3767,7 @@ var TRI_CIRCUMSCRIBES_PAREN = new RegExp(
|
|
|
3747
3767
|
"tam\\s*gi\xE1c\\s+([A-Z])([A-Z])([A-Z])(?![A-Z])[^.]{0,40}?ngo\u1EA1i\\s*ti\u1EBFp\\s+\\(\\s*([A-Z])\\s*\\)",
|
|
3748
3768
|
"giu"
|
|
3749
3769
|
);
|
|
3750
|
-
var PAREN_CENTER = "(
|
|
3770
|
+
var PAREN_CENTER = "(?:" + CIRCLE_KW + "\\s*)?\\(\\s*([A-Z])\\s*[;,]\\s*(?![^)]*[A-Z]\\s*[;,])[^()]*?\\)\\s*";
|
|
3751
3771
|
var CIRCUM_TRI_PAREN = new RegExp(
|
|
3752
3772
|
PAREN_CENTER + "ngo\u1EA1i\\s*ti\u1EBFp\\s+tam\\s*gi\xE1c\\s+([A-Z])([A-Z])([A-Z])(?![A-Z])",
|
|
3753
3773
|
"giu"
|
|
@@ -4630,7 +4650,7 @@ var ninePointRule = {
|
|
|
4630
4650
|
|
|
4631
4651
|
// src/stamps/geometry-2d/ai/rules/diameterCirclePairwise.ts
|
|
4632
4652
|
var CIRCLE_CENTER2 = /\(\s*([A-Z])\s*\)/u;
|
|
4633
|
-
var KW_DIAMETER =
|
|
4653
|
+
var KW_DIAMETER = new RegExp(DUONG_KW + "\\s*k\xEDnh", "u");
|
|
4634
4654
|
var KW_PAIRWISE = /đôi một|cắt nhau/u;
|
|
4635
4655
|
var APEX_THETA = 2;
|
|
4636
4656
|
var OTHER_THETAS = [5.5, 4, 0.6, 3.3, 1.1, 5];
|
|
@@ -4638,7 +4658,7 @@ function parse(problem) {
|
|
|
4638
4658
|
const cm = CIRCLE_CENTER2.exec(problem);
|
|
4639
4659
|
if (!cm) return void 0;
|
|
4640
4660
|
const center = cm[1];
|
|
4641
|
-
const dm =
|
|
4661
|
+
const dm = new RegExp(DUONG_KW + "\\s*k\xEDnh\\s+([^.;\n]*)", "u").exec(problem);
|
|
4642
4662
|
if (!dm) return void 0;
|
|
4643
4663
|
let region = dm[1];
|
|
4644
4664
|
const cut = region.search(/đôi một|cắt nhau/u);
|
|
@@ -4763,7 +4783,7 @@ var angleBisectorFootRule = {
|
|
|
4763
4783
|
};
|
|
4764
4784
|
|
|
4765
4785
|
// src/stamps/geometry-2d/ai/rules/intersection.ts
|
|
4766
|
-
var REF = "(
|
|
4786
|
+
var REF = "(?:" + DUONG_KW + "\\s*th\u1EB3ng\\s+|\u0111o\u1EA1n(?:\\s+th\u1EB3ng)?\\s+|tia\\s+|c\u1EA1nh\\s+)?([A-Z]\\s*[A-Z])(?![A-Z])";
|
|
4767
4787
|
var CONN = "(?:v\xE0|v\u1EDBi)";
|
|
4768
4788
|
var GIAO_DIEM = new RegExp(`giao\\s*\u0111i\u1EC3m\\s+(?:c\u1EE7a\\s+)?${REF}\\s*${CONN}\\s*${REF}`, "gu");
|
|
4769
4789
|
var CAT_TAI = new RegExp(`${REF}\\s+c\u1EAFt\\s+${REF}\\s+t\u1EA1i\\s+([A-Z])(?![A-Z])`, "gu");
|
|
@@ -4778,6 +4798,8 @@ var DISTRIB_TWO = new RegExp(
|
|
|
4778
4798
|
var NAME_BEFORE6 = /([A-Z])(?:['′]?)\s+là\s+$/u;
|
|
4779
4799
|
var PREFILTER8 = /giao\s*điểm|cắt|giao\s+nhau/u;
|
|
4780
4800
|
function makeIntent(name, ref1, ref2) {
|
|
4801
|
+
ref1 = ref1.replace(/\s+/g, "");
|
|
4802
|
+
ref2 = ref2.replace(/\s+/g, "");
|
|
4781
4803
|
const ends = [ref1[0], ref1[1], ref2[0], ref2[1]];
|
|
4782
4804
|
if (new Set(ends).size !== 4) return null;
|
|
4783
4805
|
if (ends.includes(name)) return null;
|
|
@@ -4823,15 +4845,15 @@ var intersectionRule = {
|
|
|
4823
4845
|
};
|
|
4824
4846
|
|
|
4825
4847
|
// src/stamps/geometry-2d/ai/rules/chord.ts
|
|
4826
|
-
var CIRCLE_WORDS2 =
|
|
4827
|
-
var CIRCLE_PAREN2 = /\(\s*([
|
|
4848
|
+
var CIRCLE_WORDS2 = new RegExp(CIRCLE_KW + "\\s*(?:\\(\\s*)?(?:t\xE2m\\s+)?([^\\s;,).:]+)(?![A-Z])", "u");
|
|
4849
|
+
var CIRCLE_PAREN2 = /\(\s*([^\\s;,).:]+)\s*\)/u;
|
|
4828
4850
|
var CHORD_FWD = /[Dd]ây\s+(?:cung\s+)?([A-Z])([A-Z])(?![A-Z])/gu;
|
|
4829
4851
|
var CHORD_REV = /([A-Z])([A-Z])(?![A-Z])\s+là\s+(?:một\s+)?dây(?:\s+cung)?(?!\p{L})/gu;
|
|
4830
4852
|
var THETA_A = 2.3;
|
|
4831
4853
|
var THETA_B = 0.7;
|
|
4832
4854
|
var PREFILTER9 = /[Dd]ây/u;
|
|
4833
4855
|
function findCircleClauseId(clauses, circle) {
|
|
4834
|
-
const frag = new RegExp(
|
|
4856
|
+
const frag = new RegExp(CIRCLE_KW + `|\\(\\s*${circle}\\s*\\)`, "u");
|
|
4835
4857
|
for (const c of clauses) if (frag.test(c.text)) return c.id;
|
|
4836
4858
|
return void 0;
|
|
4837
4859
|
}
|
|
@@ -4943,8 +4965,14 @@ var incircleTangencyRule = {
|
|
|
4943
4965
|
// src/stamps/geometry-2d/ai/rules/altitudeDiameterCircles.ts
|
|
4944
4966
|
var TRI6 = /tam\s*giác(?:[^A-Z.;\n]*)\s+([A-Z])([A-Z])([A-Z])(?![A-Z])/u;
|
|
4945
4967
|
var ALTITUDES = /các\s+đường\s*cao\s+([A-Z])([A-Z])\s*,\s*([A-Z])([A-Z])(?![A-Z])/u;
|
|
4946
|
-
var DIAMETER_INTERSECTION =
|
|
4947
|
-
|
|
4968
|
+
var DIAMETER_INTERSECTION = new RegExp(
|
|
4969
|
+
CIRCLE_KW + "\\s+" + DUONG_KW + "\\s*k\xEDnh\\s+([A-Z])([A-Z])\\s+v\xE0\\s+" + CIRCLE_KW + "\\s+" + DUONG_KW + "\\s*k\xEDnh\\s+([A-Z])([A-Z])[^.;\n]*?t\u1EA1i\\s+c\xE1c\\s+\u0111i\u1EC3m\\s+([A-Z])\\s*,\\s*([A-Z])(?![A-Z])",
|
|
4970
|
+
"u"
|
|
4971
|
+
);
|
|
4972
|
+
var SEGMENT_CIRCLE = new RegExp(
|
|
4973
|
+
"[\u0110\u0111]o\u1EA1n\\s+th\u1EB3ng\\s+([A-Z])([A-Z])\\s+c\u1EAFt\\s+" + CIRCLE_KW + "\\s+" + DUONG_KW + "\\s*k\xEDnh\\s+([A-Z])([A-Z])\\s+t\u1EA1i\\s+\u0111i\u1EC3m\\s+([A-Z])(?![A-Z])",
|
|
4974
|
+
"gu"
|
|
4975
|
+
);
|
|
4948
4976
|
var LINE_LINE = /[Cc]ác\s+đường\s+thẳng\s+([A-Z])([A-Z])\s+và\s+([A-Z])([A-Z])\s+cắt\s+nhau\s+tại\s+([A-Z])(?![A-Z])/u;
|
|
4949
4977
|
function opposite3(triangle, apex) {
|
|
4950
4978
|
const rest = triangle.filter((v) => v !== apex);
|
|
@@ -4954,7 +4982,7 @@ var altitudeDiameterCirclesRule = {
|
|
|
4954
4982
|
id: "altitude-diameter-circles",
|
|
4955
4983
|
priority: 67,
|
|
4956
4984
|
languages: ["vi"],
|
|
4957
|
-
patterns: [
|
|
4985
|
+
patterns: [new RegExp(DUONG_KW + "\\s*cao", "u"), new RegExp(DUONG_KW + "\\s*k\xEDnh", "u")],
|
|
4958
4986
|
match(ctx) {
|
|
4959
4987
|
const tri = TRI6.exec(ctx.problem);
|
|
4960
4988
|
const alts = ALTITUDES.exec(ctx.problem);
|
|
@@ -5025,8 +5053,11 @@ var altitudeDiameterCirclesRule = {
|
|
|
5025
5053
|
};
|
|
5026
5054
|
|
|
5027
5055
|
// src/stamps/geometry-2d/ai/rules/diameterCircleCutsSides.ts
|
|
5028
|
-
var PATTERN =
|
|
5029
|
-
|
|
5056
|
+
var PATTERN = new RegExp(
|
|
5057
|
+
CIRCLE_KW + "\\s+" + DUONG_KW + "\\s*k\xEDnh\\s+([A-Z])([A-Z])(?![A-Z])\\s+c\u1EAFt\\s+([^.;\\n]*?)\\s+(?:l\u1EA7n\\s*l\u01B0\u1EE3t\\s+)?t\u1EA1i\\s+([^.;\n]*)",
|
|
5058
|
+
"u"
|
|
5059
|
+
);
|
|
5060
|
+
var PREFILTER11 = new RegExp(DUONG_KW + "\\s*k\xEDnh", "u");
|
|
5030
5061
|
function sharedVertex(line, dia) {
|
|
5031
5062
|
const shared = [line[0], line[1]].filter((ch) => dia.includes(ch));
|
|
5032
5063
|
return shared.length === 1 ? shared[0] : void 0;
|