katex4arabic 1.1.4 → 1.1.6
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/README.md +323 -323
- package/dist/cdn/katex-arabic.min.cjs +15 -15
- package/dist/cdn/katex-arabic.min.css +1 -1
- package/dist/cdn/katex-arabic.min.js +15 -15
- package/dist/cdn/katex-arabic.min.mjs +892 -797
- package/dist/lib/arabicFunctions.d.ts +21 -7
- package/dist/lib/arabicFunctions.d.ts.map +1 -1
- package/dist/lib/arabicSymbols.d.ts +1 -0
- package/dist/lib/arabicSymbols.d.ts.map +1 -1
- package/dist/lib/index.cjs +2 -1
- package/dist/lib/index.cjs.map +1 -1
- package/dist/lib/index.d.cts +2 -2
- package/dist/lib/index.d.ts +2 -2
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.mjs +3 -2
- package/dist/lib/index.mjs.map +1 -1
- package/dist/lib/katex-arabic.css +173 -44
- package/dist/lib/render.cjs +129 -18
- package/dist/lib/render.cjs.map +1 -1
- package/dist/lib/render.mjs +129 -18
- package/dist/lib/render.mjs.map +1 -1
- package/docs/INSTALL.md +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,323 +1,323 @@
|
|
|
1
|
-
# KaTeX Arabic 🌙
|
|
2
|
-
|
|
3
|
-
مكتبة احترافية لعرض المعادلات الرياضية بالأسلوب العربي، مبنية على
|
|
4
|
-
[KaTeX](https://katex.org). تحوّل المعادلات اللاتينية إلى شكل عربي قراءةً
|
|
5
|
-
ومظهراً: أرقام عربية-هندية، ترجمة أسماء الدوال والمتغيرات، عكس الرموز
|
|
6
|
-
للتوافق مع الاتجاه من اليمين إلى اليسار —
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
هذا المستودع يحتوي على:
|
|
10
|
-
|
|
11
|
-
- **مكتبة** `src/lib/katex-arabic` — قلب المعالجة العربية (مستقل عن الواجهة).
|
|
12
|
-
- **تطبيق عرض تجريبي** — معرض معادلات، محرر مباشر، مقارنة لاتيني/عربي، وتوثيق.
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
## ✨ المزايا
|
|
17
|
-
|
|
18
|
-
| الميزة | الوصف |
|
|
19
|
-
| --- | --- |
|
|
20
|
-
| 🔢 أرقام عربية | تحويل تلقائي إلى عربية-هندية `٠١٢…٩` أو فارسية `۰۱۲…۹` |
|
|
21
|
-
| 📐 ترجمة الدوال | `sin → جا`، `cos → جتا`، `lim → نها`، `log → لغ` … |
|
|
22
|
-
| 🔤 ترجمة المتغيرات | `x → س`، `y → ص`، `dx → د س`، `e → هـ` … |
|
|
23
|
-
| 🔄 عكس الرموز | تكامل ومجموع وجذر وأقواس ورموز مقارنة ومجموعات وأسهم معكوسة بصرياً |
|
|
24
|
-
| 🔀 الدوال المتقطعة | قوس `cases` يُعرض يميناً بالأسلوب العربي عبر فئة `has-cases` التلقائية |
|
|
25
|
-
| 🌙 وضع RTL كامل | المعادلة بأكملها تُقرأ من اليمين لليسار |
|
|
26
|
-
| 📏 تكافؤ لاتيني | أحجام وخطوط أساس ومحاذاة مطابقة لتنسيق KaTeX اللاتيني |
|
|
27
|
-
| 🎨 تخصيص بصري | متغيرات CSS + خيار `operatorScale` للتحكم الدقيق |
|
|
28
|
-
| 🛡️ إخفاء آمن | عدم المساس بنصوص `\text{}` وحماية من إعادة المعالجة |
|
|
29
|
-
| ♿ إمكانية وصول | `aria-label`، لوحة مفاتيح، ودعم وضع الطباعة |
|
|
30
|
-
|
|
31
|
-
---
|
|
32
|
-
|
|
33
|
-
## 🚀 التشغيل السريع
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
npm install # تثبيت الاعتماديات
|
|
37
|
-
npm run dev # تشغيل بيئة التطوير
|
|
38
|
-
npm run build # بناء تطبيق العرض (ملفات JS/CSS منفصلة)
|
|
39
|
-
npm run build:all # بناء المكتبة القابلة للنشر (JS + أنواع + CSS)
|
|
40
|
-
npm run preview # معاينة البناء
|
|
41
|
-
npm run typecheck # فحص الأنواع (TypeScript)
|
|
42
|
-
npm test # تشغيل الاختبارات (Vitest)
|
|
43
|
-
npm run check # فحص شامل: typecheck + tests + build
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
> متطلب: Node.js ≥ 18
|
|
47
|
-
|
|
48
|
-
---
|
|
49
|
-
|
|
50
|
-
## 📦 التثبيت كحزمة npm
|
|
51
|
-
|
|
52
|
-
> 📖 **دليل التنصيب والاستخدام الكامل**: [docs/INSTALL.md](docs/INSTALL.md)
|
|
53
|
-
|
|
54
|
-
```bash
|
|
55
|
-
npm install katex4arabic
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
الحزمة تتطلب `katex` كاعتماد نظير (peer dependency)، و`react` اختيارياً
|
|
59
|
-
لاستخدام الخطاطيف والمكوّنات:
|
|
60
|
-
|
|
61
|
-
```bash
|
|
62
|
-
npm install katex
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
### الاستيراد
|
|
66
|
-
|
|
67
|
-
```ts
|
|
68
|
-
// الدوال الأساسية
|
|
69
|
-
import { renderArabicToString, renderArabic, processLatex } from 'katex4arabic';
|
|
70
|
-
|
|
71
|
-
// خطاطيف React (اختياري)
|
|
72
|
-
import { useArabicKatex, useArabicKatexResult } from 'katex4arabic/hooks';
|
|
73
|
-
|
|
74
|
-
// ملف الأنماط — يجب استيراده مرة واحدة في تطبيقك
|
|
75
|
-
import 'katex4arabic/katex-arabic.css';
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
---
|
|
79
|
-
|
|
80
|
-
## 📦 كحزمة npm — استيراد وتحميل بملف واحد فقط
|
|
81
|
-
|
|
82
|
-
بعد `npm install katex4arabic katex`، يمكن استيراد **كامل المكتبة من ملف JS واحد** (KaTeX مدمج داخله — صفر إعداد):
|
|
83
|
-
|
|
84
|
-
```ts
|
|
85
|
-
import KaTeXArabic from 'katex4arabic/bundle'; // ملف واحد (يشمل KaTeX)
|
|
86
|
-
import 'katex4arabic/bundle.css'; // ملف CSS واحد
|
|
87
|
-
|
|
88
|
-
const html = KaTeXArabic.renderToString('x^2 + y^2 = z^2');
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
أو في بيئة CommonJS:
|
|
92
|
-
|
|
93
|
-
```ts
|
|
94
|
-
const KaTeXArabic = require('katex4arabic/bundle');
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
---
|
|
98
|
-
|
|
99
|
-
## 🚀 الاستخدام عبر CDN (ملفان فقط — صفر إعداد)
|
|
100
|
-
|
|
101
|
-
تُنشر الحزمة أيضاً كملفين جاهزين للتحميل المباشر — **KaTeX مدمج داخل ملف JS واحد** وغير مطلوب تحميله منفصلاً:
|
|
102
|
-
|
|
103
|
-
**الرابط من مستودع GitHub** (يعمل مباشرة، قبل النشر على npm):
|
|
104
|
-
|
|
105
|
-
```html
|
|
106
|
-
<!DOCTYPE html>
|
|
107
|
-
<html lang="ar" dir="rtl">
|
|
108
|
-
<head>
|
|
109
|
-
<meta charset="UTF-8">
|
|
110
|
-
<script defer src="https://cdn.jsdelivr.net/gh/AhmedAlmaghz/katex4arabic@main/dist/cdn/katex-arabic.min.js"></script>
|
|
111
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/AhmedAlmaghz/katex4arabic@main/dist/cdn/katex-arabic.min.css">
|
|
112
|
-
</head>
|
|
113
|
-
<body>
|
|
114
|
-
<div id="eq">x^2 + y^2 = z^2</div>
|
|
115
|
-
<script>
|
|
116
|
-
window.addEventListener('DOMContentLoaded', () => {
|
|
117
|
-
KaTeXArabic.render(document.getElementById('eq').textContent.trim(),
|
|
118
|
-
document.getElementById('eq'));
|
|
119
|
-
});
|
|
120
|
-
</script>
|
|
121
|
-
</body>
|
|
122
|
-
</html>
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
> بعد النشر على npm يعمل الرابط الأقصر أيضاً:
|
|
126
|
-
> `https://cdn.jsdelivr.net/npm/katex4arabic/dist/cdn/katex-arabic.min.js` —
|
|
127
|
-
> مع ملف CSS بنفس المسار، ويعمل `https://cdn.jsdelivr.net/npm/katex4arabic` على نقطة دخول jsDelivr مباشرة.
|
|
128
|
-
|
|
129
|
-
المتغير العمومي `window.KaTeXArabic` بنفس واجهة `katex`:
|
|
130
|
-
|
|
131
|
-
```js
|
|
132
|
-
const html = KaTeXArabic.renderToString('\\sin^2 x + \\cos^2 x = 1'); // ← افتراضياً: أرقام عربية + جا/جتا + RTL
|
|
133
|
-
KaTeXArabic.render('\\int_0^1 x^2 dx', element); // (latex, element, options?)
|
|
134
|
-
KaTeXArabic.toArabicNumerals('123'); // '١٢٣'
|
|
135
|
-
KaTeXArabic.VERSION; // '1.1.
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
> الدليل التفصيلي: [docs/INSTALL.md](docs/INSTALL.md)
|
|
139
|
-
|
|
140
|
-
---
|
|
141
|
-
|
|
142
|
-
## 📁 بنية المشروع
|
|
143
|
-
|
|
144
|
-
```
|
|
145
|
-
├── index.html # نقطة الدخول + تحميل الخطوط العربية
|
|
146
|
-
├── vite.config.ts # إعدادات Vite لتطبيق العرض (React + Tailwind)
|
|
147
|
-
├── vite.lib.config.ts # إعدادات بناء المكتبة (ESM + CJS)
|
|
148
|
-
├── tsconfig.lib.json # إعدادات إصدار أنواع TypeScript للمكتبة
|
|
149
|
-
├── src/
|
|
150
|
-
│ ├── App.tsx # جذر التطبيق وأقسامه
|
|
151
|
-
│ ├── main.tsx # نقطة الإقلاع
|
|
152
|
-
│ ├── index.css # الأنماط العامة (Tailwind + المكوّنات)
|
|
153
|
-
│ ├── katex-arabic.css # نسق عرض المعادلات (يُنسخ إلى dist/lib)
|
|
154
|
-
│ ├── components/ # مكوّنات الواجهة
|
|
155
|
-
│ │ ├── MathEquation.tsx # <MathEquation> / <MathBlock> / <MathInline>
|
|
156
|
-
│ │ ├── OptionsPanel.tsx # لوحة إعدادات العرض
|
|
157
|
-
│ │ ├── LiveEditor.tsx # محرر مباشر مع تحقق فوري
|
|
158
|
-
│ │ ├── ComparisonDemo.tsx # مقارنة لاتيني/عربي
|
|
159
|
-
│ │ └── …
|
|
160
|
-
│ ├── data/examples.ts # معادلات المعرض
|
|
161
|
-
│ └── lib/katex-arabic/ # ★ المكتبة الأساسية
|
|
162
|
-
│ ├── index.ts # الواجهة العامة (public API)
|
|
163
|
-
│ ├── render.ts # دوال العرض (renderToString, render, batch)
|
|
164
|
-
│ ├── rtlRenderer.ts # خط أنابيب المعالجة + القيم الافتراضية
|
|
165
|
-
│ ├── arabicNumerals.ts # تحويل الأرقام وتنسيق الفواصل
|
|
166
|
-
│ ├── arabicFunctions.ts # ترجمة الدوال والمتغيرات والتفاضلات
|
|
167
|
-
│ ├── arabicSymbols.ts # عكس الرموز (مقارنة/أسهم/أقواس)
|
|
168
|
-
│ ├── protectedRegions.ts # حماية نصوص \text{} من المعالجة
|
|
169
|
-
│ ├── hooks.ts # خطاطيف React جاهزة للعرض
|
|
170
|
-
│ ├── types.ts # أنواع TypeScript
|
|
171
|
-
│ └── __tests__/ # اختبارات الوحدات والخط الأنبوبي
|
|
172
|
-
└── package.json
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
---
|
|
176
|
-
|
|
177
|
-
## 💻 استخدام المكتبة
|
|
178
|
-
### Vanilla JS
|
|
179
|
-
|
|
180
|
-
```ts
|
|
181
|
-
import { renderArabicToString } from 'katex4arabic';
|
|
182
|
-
import 'katex4arabic/katex-arabic.css';
|
|
183
|
-
|
|
184
|
-
const html = renderArabicToString('\\sin^2(x) + \\cos^2(x) = 1', {
|
|
185
|
-
numerals: 'arabic',
|
|
186
|
-
translateFuncs: true,
|
|
187
|
-
mirrorSymbols: true,
|
|
188
|
-
});
|
|
189
|
-
document.getElementById('eq')!.innerHTML = html;
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
### معالجة LaTeX فقط (بدون عرض)
|
|
193
|
-
|
|
194
|
-
```ts
|
|
195
|
-
import { processLatex, validateLatex } from 'katex4arabic';
|
|
196
|
-
|
|
197
|
-
const processed = processLatex('\\sin(x) + dx');
|
|
198
|
-
// → "\\operatorname{جا}(\\text{س}) + \\text{د}\\text{س}"
|
|
199
|
-
|
|
200
|
-
if (validateLatex('\\frac{1}{2} + x') === null) {
|
|
201
|
-
// الطرح سليم
|
|
202
|
-
}
|
|
203
|
-
```
|
|
204
|
-
|
|
205
|
-
### العرض الدفعي (Batch)
|
|
206
|
-
|
|
207
|
-
لعرض قائمة معادلات دفعة واحدة بكفاءة أعلى (خيارات تُحلّل مرة واحدة
|
|
208
|
-
وذاكرة التخزين المؤقت مشتركة):
|
|
209
|
-
|
|
210
|
-
```ts
|
|
211
|
-
import { renderArabicBatch } from 'katex4arabic';
|
|
212
|
-
|
|
213
|
-
const results = renderArabicBatch(
|
|
214
|
-
['x = 1', { latex: 'y = 2', options: { numerals: 'latin' } }],
|
|
215
|
-
{ numerals: 'arabic' },
|
|
216
|
-
);
|
|
217
|
-
// results[i] = { html, error }
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
### التخزين المؤقت والأداء
|
|
221
|
-
|
|
222
|
-
تُخزَّن نتائج العرض داخلياً في ذاكرة LRU (٢٥٦ مدخلاً) بحيث يكون
|
|
223
|
-
إعادة عرض نفس المعادلة بنفس الخيارات شبه مجاني. لمسح الذاكرة
|
|
224
|
-
(مثلاً عند تغيّر الخيارات جذرياً أو في الاختبارات):
|
|
225
|
-
|
|
226
|
-
```ts
|
|
227
|
-
import { clearRenderCache } from 'katex4arabic';
|
|
228
|
-
clearRenderCache();
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
> **حماية المدخلات:** أي مدخل أطول من `MAX_INPUT_LENGTH` (٢٠٬٠٠٠ حرف)
|
|
232
|
-
> يُقتَصّ تلقائياً لحماية خط الأنابيب من التكلفة الأسوأ، والمدخلات
|
|
233
|
-
> الفارغة تُعاد كما هي دون معالجة.
|
|
234
|
-
|
|
235
|
-
### React
|
|
236
|
-
|
|
237
|
-
```tsx
|
|
238
|
-
import { MathBlock, MathInline } from './components/MathEquation';
|
|
239
|
-
|
|
240
|
-
<MathBlock
|
|
241
|
-
latex="\\int_{0}^{\\infty} e^{-x^2} dx = \\frac{\\sqrt{\\pi}}{2}"
|
|
242
|
-
options={{ numerals: 'arabic', translateFuncs: true }}
|
|
243
|
-
/>
|
|
244
|
-
|
|
245
|
-
<p>التعريف هو <MathInline latex="f(x) = x^2" /></p>
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
### خطاطيف React
|
|
249
|
-
|
|
250
|
-
```tsx
|
|
251
|
-
import { useArabicKatex, useArabicKatexResult } from 'katex4arabic/hooks';
|
|
252
|
-
|
|
253
|
-
const html = useArabicKatex('x^2 + y^2', { numerals: 'arabic' });
|
|
254
|
-
const { ok, error } = useArabicKatexResult(latex, options);
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
---
|
|
258
|
-
|
|
259
|
-
## ⚙️ خيارات التهيئة
|
|
260
|
-
|
|
261
|
-
| الخيار | النوع | الافتراضي | الوصف |
|
|
262
|
-
| --- | --- | --- | --- |
|
|
263
|
-
| `numerals` | `arabic \| extended \| latin` | `arabic` | نظام الأرقام المعروض |
|
|
264
|
-
| `formatNumbers` | `boolean` | `true` | فواصل عربية `٬ ٫` في الأعداد |
|
|
265
|
-
| `translateFuncs` | `boolean` | `true` | ترجمة أسماء الدوال |
|
|
266
|
-
| `translateVars` | `boolean` | `true` | ترجمة المتغيرات اللاتينية |
|
|
267
|
-
| `translateDiffs` | `boolean` | `true` | ترجمة التفاضلات `dx → د س` |
|
|
268
|
-
| `mirrorSymbols` | `boolean` | `true` | عكس رموز المقارنة والأسهم |
|
|
269
|
-
| `mirrorBigOperators` | `boolean` | `true` | عكس `∫ Σ ∏` بصرياً |
|
|
270
|
-
| `mirrorSqrt` | `boolean` | `true` | عكس رمز الجذر `√` |
|
|
271
|
-
| `mirrorBrackets` | `boolean` | `true` | عكس الأقواس الزاوية والكبيرة |
|
|
272
|
-
| `direction` | `rtl \| ltr` | `rtl` | اتجاه المعادلة |
|
|
273
|
-
| `fullArabicMode` | `boolean` | `true` | قراءة RTL للمعادلة كاملة |
|
|
274
|
-
| `operatorScale` | `number` | `1.05` | حجم العوامل العربية (0.9–1.25) |
|
|
275
|
-
| `fontFamily` | `string` | `Amiri` | خط النصوص العربية |
|
|
276
|
-
| `displayMode` | `boolean` | `false` | وضع العرض (block) مقابل السطري |
|
|
277
|
-
| `throwOnError` | `boolean` | `false` | إلقاء خطأ بدل العرض الودّي |
|
|
278
|
-
| `customFunctionMap` | `Record` | `{}` | تجاوز ترجمات الدوال |
|
|
279
|
-
| `customVariableMap` | `Record` | `{}` | تجاوز ترجمات المتغيرات |
|
|
280
|
-
| `macros` | `Record` | `{}` | ماكرو KaTeX إضافية |
|
|
281
|
-
| `minRuleThickness` | `number` | `0.04` | سماكة خطوط الكسور |
|
|
282
|
-
|
|
283
|
-
---
|
|
284
|
-
|
|
285
|
-
## 🎨 التوافق البصري مع اللاتينية
|
|
286
|
-
|
|
287
|
-
تقوم `katex-arabic.css` بتطبيع مقاييس النصوص العربية لتطابق مخرجات KaTeX
|
|
288
|
-
اللاتينية: خط أساس موحّد، ارتفاع سطر مضبوط، ومنع قصّ النتوءات والحركات.
|
|
289
|
-
لمزيد من الدقة، تتحكم هذه المتغيرات بالتخصيص:
|
|
290
|
-
|
|
291
|
-
| المتغير | الوظيفة | الافتراضي |
|
|
292
|
-
| --- | --- | --- |
|
|
293
|
-
| `--ka-op-scale` | حجم العوامل والنصوص العربية داخل المعادلة | `1.05` |
|
|
294
|
-
| `--ka-font-family` | عائلة خط النصوص العربية | `Amiri` |
|
|
295
|
-
| `--ka-color` | لون المعادلة | `inherit` |
|
|
296
|
-
| `--ka-line-height` | ارتفاع السطر المحيط | `1.6` |
|
|
297
|
-
|
|
298
|
-
```css
|
|
299
|
-
.math-equation { --ka-op-scale: 1.08; }
|
|
300
|
-
```
|
|
301
|
-
|
|
302
|
-
قيمة `1.08`–`1.1` تعوّض عادةً الفرق البصري في حجم الحروف بين الخطوط
|
|
303
|
-
العربية و`KaTeX_Main`. تُوسَّط الأسس والأدلة والكسور والجذور والمصفوفات
|
|
304
|
-
على المحور الرياضي، تماماً كما في المعادلة اللاتينية.
|
|
305
|
-
|
|
306
|
-
---
|
|
307
|
-
|
|
308
|
-
## 🧪 الاختبارات
|
|
309
|
-
|
|
310
|
-
```bash
|
|
311
|
-
npm test # تشغيل كامل
|
|
312
|
-
npm run test:watch
|
|
313
|
-
```
|
|
314
|
-
|
|
315
|
-
تغطي الاختبارات: تحويل الأرقام ذهاباً وإياباً، ترجمة الدوال والمتغيرات
|
|
316
|
-
مع حماية `\text{}`، عكس الرموز، وسلامة خط الأنابيب الكامل مع كل الخيارات.
|
|
317
|
-
|
|
318
|
-
---
|
|
319
|
-
|
|
320
|
-
## 📜 الترخيص
|
|
321
|
-
|
|
322
|
-
مفتوح المصدر، مبنية على [KaTeX](https://katex.org) (MIT).
|
|
323
|
-
بواسطة [ِAhmed Almaghz](https://github.com/AhmedAlmaghz/KaTeX4Arabic) - 2026
|
|
1
|
+
# KaTeX Arabic 🌙
|
|
2
|
+
|
|
3
|
+
مكتبة احترافية لعرض المعادلات الرياضية بالأسلوب العربي، مبنية على
|
|
4
|
+
[KaTeX](https://katex.org). تحوّل المعادلات اللاتينية إلى شكل عربي قراءةً
|
|
5
|
+
ومظهراً: أرقام عربية-هندية، ترجمة أسماء الدوال والمتغيرات، عكس الرموز
|
|
6
|
+
للتوافق مع الاتجاه من اليمين إلى اليسار — مع تكافؤ بصري مع التنسيق اللاتيني في **الشكل والحجم والمحاذاة**.
|
|
7
|
+
[شاهد أمثلة من الموقع الرسمي KaTeX4Arabic](https://katex4arabic.vercel.app)
|
|
8
|
+
|
|
9
|
+
هذا المستودع يحتوي على:
|
|
10
|
+
|
|
11
|
+
- **مكتبة** `src/lib/katex-arabic` — قلب المعالجة العربية (مستقل عن الواجهة).
|
|
12
|
+
- **تطبيق عرض تجريبي** — معرض معادلات، محرر مباشر، مقارنة لاتيني/عربي، وتوثيق.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## ✨ المزايا
|
|
17
|
+
|
|
18
|
+
| الميزة | الوصف |
|
|
19
|
+
| --- | --- |
|
|
20
|
+
| 🔢 أرقام عربية | تحويل تلقائي إلى عربية-هندية `٠١٢…٩` أو فارسية `۰۱۲…۹` |
|
|
21
|
+
| 📐 ترجمة الدوال | `sin → جا`، `cos → جتا`، `lim → نها`، `log → لغ` … |
|
|
22
|
+
| 🔤 ترجمة المتغيرات | `x → س`، `y → ص`، `dx → د س`، `e → هـ` … |
|
|
23
|
+
| 🔄 عكس الرموز | تكامل ومجموع وجذر وأقواس ورموز مقارنة ومجموعات وأسهم معكوسة بصرياً |
|
|
24
|
+
| 🔀 الدوال المتقطعة | قوس `cases` يُعرض يميناً بالأسلوب العربي عبر فئة `has-cases` التلقائية |
|
|
25
|
+
| 🌙 وضع RTL كامل | المعادلة بأكملها تُقرأ من اليمين لليسار |
|
|
26
|
+
| 📏 تكافؤ لاتيني | أحجام وخطوط أساس ومحاذاة مطابقة لتنسيق KaTeX اللاتيني |
|
|
27
|
+
| 🎨 تخصيص بصري | متغيرات CSS + خيار `operatorScale` للتحكم الدقيق |
|
|
28
|
+
| 🛡️ إخفاء آمن | عدم المساس بنصوص `\text{}` وحماية من إعادة المعالجة |
|
|
29
|
+
| ♿ إمكانية وصول | `aria-label`، لوحة مفاتيح، ودعم وضع الطباعة |
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 🚀 التشغيل السريع
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npm install # تثبيت الاعتماديات
|
|
37
|
+
npm run dev # تشغيل بيئة التطوير
|
|
38
|
+
npm run build # بناء تطبيق العرض (ملفات JS/CSS منفصلة)
|
|
39
|
+
npm run build:all # بناء المكتبة القابلة للنشر (JS + أنواع + CSS)
|
|
40
|
+
npm run preview # معاينة البناء
|
|
41
|
+
npm run typecheck # فحص الأنواع (TypeScript)
|
|
42
|
+
npm test # تشغيل الاختبارات (Vitest)
|
|
43
|
+
npm run check # فحص شامل: typecheck + tests + build
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
> متطلب: Node.js ≥ 18
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 📦 التثبيت كحزمة npm
|
|
51
|
+
|
|
52
|
+
> 📖 **دليل التنصيب والاستخدام الكامل**: [docs/INSTALL.md](docs/INSTALL.md)
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
npm install katex4arabic
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
الحزمة تتطلب `katex` كاعتماد نظير (peer dependency)، و`react` اختيارياً
|
|
59
|
+
لاستخدام الخطاطيف والمكوّنات:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
npm install katex
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### الاستيراد
|
|
66
|
+
|
|
67
|
+
```ts
|
|
68
|
+
// الدوال الأساسية
|
|
69
|
+
import { renderArabicToString, renderArabic, processLatex } from 'katex4arabic';
|
|
70
|
+
|
|
71
|
+
// خطاطيف React (اختياري)
|
|
72
|
+
import { useArabicKatex, useArabicKatexResult } from 'katex4arabic/hooks';
|
|
73
|
+
|
|
74
|
+
// ملف الأنماط — يجب استيراده مرة واحدة في تطبيقك
|
|
75
|
+
import 'katex4arabic/katex-arabic.css';
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## 📦 كحزمة npm — استيراد وتحميل بملف واحد فقط
|
|
81
|
+
|
|
82
|
+
بعد `npm install katex4arabic katex`، يمكن استيراد **كامل المكتبة من ملف JS واحد** (KaTeX مدمج داخله — صفر إعداد):
|
|
83
|
+
|
|
84
|
+
```ts
|
|
85
|
+
import KaTeXArabic from 'katex4arabic/bundle'; // ملف واحد (يشمل KaTeX)
|
|
86
|
+
import 'katex4arabic/bundle.css'; // ملف CSS واحد
|
|
87
|
+
|
|
88
|
+
const html = KaTeXArabic.renderToString('x^2 + y^2 = z^2');
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
أو في بيئة CommonJS:
|
|
92
|
+
|
|
93
|
+
```ts
|
|
94
|
+
const KaTeXArabic = require('katex4arabic/bundle');
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## 🚀 الاستخدام عبر CDN (ملفان فقط — صفر إعداد)
|
|
100
|
+
|
|
101
|
+
تُنشر الحزمة أيضاً كملفين جاهزين للتحميل المباشر — **KaTeX مدمج داخل ملف JS واحد** وغير مطلوب تحميله منفصلاً:
|
|
102
|
+
|
|
103
|
+
**الرابط من مستودع GitHub** (يعمل مباشرة، قبل النشر على npm):
|
|
104
|
+
|
|
105
|
+
```html
|
|
106
|
+
<!DOCTYPE html>
|
|
107
|
+
<html lang="ar" dir="rtl">
|
|
108
|
+
<head>
|
|
109
|
+
<meta charset="UTF-8">
|
|
110
|
+
<script defer src="https://cdn.jsdelivr.net/gh/AhmedAlmaghz/katex4arabic@main/dist/cdn/katex-arabic.min.js"></script>
|
|
111
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/AhmedAlmaghz/katex4arabic@main/dist/cdn/katex-arabic.min.css">
|
|
112
|
+
</head>
|
|
113
|
+
<body>
|
|
114
|
+
<div id="eq">x^2 + y^2 = z^2</div>
|
|
115
|
+
<script>
|
|
116
|
+
window.addEventListener('DOMContentLoaded', () => {
|
|
117
|
+
KaTeXArabic.render(document.getElementById('eq').textContent.trim(),
|
|
118
|
+
document.getElementById('eq'));
|
|
119
|
+
});
|
|
120
|
+
</script>
|
|
121
|
+
</body>
|
|
122
|
+
</html>
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
> بعد النشر على npm يعمل الرابط الأقصر أيضاً:
|
|
126
|
+
> `https://cdn.jsdelivr.net/npm/katex4arabic/dist/cdn/katex-arabic.min.js` —
|
|
127
|
+
> مع ملف CSS بنفس المسار، ويعمل `https://cdn.jsdelivr.net/npm/katex4arabic` على نقطة دخول jsDelivr مباشرة.
|
|
128
|
+
|
|
129
|
+
المتغير العمومي `window.KaTeXArabic` بنفس واجهة `katex`:
|
|
130
|
+
|
|
131
|
+
```js
|
|
132
|
+
const html = KaTeXArabic.renderToString('\\sin^2 x + \\cos^2 x = 1'); // ← افتراضياً: أرقام عربية + جا/جتا + RTL
|
|
133
|
+
KaTeXArabic.render('\\int_0^1 x^2 dx', element); // (latex, element, options?)
|
|
134
|
+
KaTeXArabic.toArabicNumerals('123'); // '١٢٣'
|
|
135
|
+
KaTeXArabic.VERSION; // '1.1.5'
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
> الدليل التفصيلي: [docs/INSTALL.md](docs/INSTALL.md)
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## 📁 بنية المشروع
|
|
143
|
+
|
|
144
|
+
```
|
|
145
|
+
├── index.html # نقطة الدخول + تحميل الخطوط العربية
|
|
146
|
+
├── vite.config.ts # إعدادات Vite لتطبيق العرض (React + Tailwind)
|
|
147
|
+
├── vite.lib.config.ts # إعدادات بناء المكتبة (ESM + CJS)
|
|
148
|
+
├── tsconfig.lib.json # إعدادات إصدار أنواع TypeScript للمكتبة
|
|
149
|
+
├── src/
|
|
150
|
+
│ ├── App.tsx # جذر التطبيق وأقسامه
|
|
151
|
+
│ ├── main.tsx # نقطة الإقلاع
|
|
152
|
+
│ ├── index.css # الأنماط العامة (Tailwind + المكوّنات)
|
|
153
|
+
│ ├── katex-arabic.css # نسق عرض المعادلات (يُنسخ إلى dist/lib)
|
|
154
|
+
│ ├── components/ # مكوّنات الواجهة
|
|
155
|
+
│ │ ├── MathEquation.tsx # <MathEquation> / <MathBlock> / <MathInline>
|
|
156
|
+
│ │ ├── OptionsPanel.tsx # لوحة إعدادات العرض
|
|
157
|
+
│ │ ├── LiveEditor.tsx # محرر مباشر مع تحقق فوري
|
|
158
|
+
│ │ ├── ComparisonDemo.tsx # مقارنة لاتيني/عربي
|
|
159
|
+
│ │ └── …
|
|
160
|
+
│ ├── data/examples.ts # معادلات المعرض
|
|
161
|
+
│ └── lib/katex-arabic/ # ★ المكتبة الأساسية
|
|
162
|
+
│ ├── index.ts # الواجهة العامة (public API)
|
|
163
|
+
│ ├── render.ts # دوال العرض (renderToString, render, batch)
|
|
164
|
+
│ ├── rtlRenderer.ts # خط أنابيب المعالجة + القيم الافتراضية
|
|
165
|
+
│ ├── arabicNumerals.ts # تحويل الأرقام وتنسيق الفواصل
|
|
166
|
+
│ ├── arabicFunctions.ts # ترجمة الدوال والمتغيرات والتفاضلات
|
|
167
|
+
│ ├── arabicSymbols.ts # عكس الرموز (مقارنة/أسهم/أقواس)
|
|
168
|
+
│ ├── protectedRegions.ts # حماية نصوص \text{} من المعالجة
|
|
169
|
+
│ ├── hooks.ts # خطاطيف React جاهزة للعرض
|
|
170
|
+
│ ├── types.ts # أنواع TypeScript
|
|
171
|
+
│ └── __tests__/ # اختبارات الوحدات والخط الأنبوبي
|
|
172
|
+
└── package.json
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## 💻 استخدام المكتبة
|
|
178
|
+
### Vanilla JS
|
|
179
|
+
|
|
180
|
+
```ts
|
|
181
|
+
import { renderArabicToString } from 'katex4arabic';
|
|
182
|
+
import 'katex4arabic/katex-arabic.css';
|
|
183
|
+
|
|
184
|
+
const html = renderArabicToString('\\sin^2(x) + \\cos^2(x) = 1', {
|
|
185
|
+
numerals: 'arabic',
|
|
186
|
+
translateFuncs: true,
|
|
187
|
+
mirrorSymbols: true,
|
|
188
|
+
});
|
|
189
|
+
document.getElementById('eq')!.innerHTML = html;
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### معالجة LaTeX فقط (بدون عرض)
|
|
193
|
+
|
|
194
|
+
```ts
|
|
195
|
+
import { processLatex, validateLatex } from 'katex4arabic';
|
|
196
|
+
|
|
197
|
+
const processed = processLatex('\\sin(x) + dx');
|
|
198
|
+
// → "\\operatorname{جا}(\\text{س}) + \\text{د}\\text{س}"
|
|
199
|
+
|
|
200
|
+
if (validateLatex('\\frac{1}{2} + x') === null) {
|
|
201
|
+
// الطرح سليم
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### العرض الدفعي (Batch)
|
|
206
|
+
|
|
207
|
+
لعرض قائمة معادلات دفعة واحدة بكفاءة أعلى (خيارات تُحلّل مرة واحدة
|
|
208
|
+
وذاكرة التخزين المؤقت مشتركة):
|
|
209
|
+
|
|
210
|
+
```ts
|
|
211
|
+
import { renderArabicBatch } from 'katex4arabic';
|
|
212
|
+
|
|
213
|
+
const results = renderArabicBatch(
|
|
214
|
+
['x = 1', { latex: 'y = 2', options: { numerals: 'latin' } }],
|
|
215
|
+
{ numerals: 'arabic' },
|
|
216
|
+
);
|
|
217
|
+
// results[i] = { html, error }
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### التخزين المؤقت والأداء
|
|
221
|
+
|
|
222
|
+
تُخزَّن نتائج العرض داخلياً في ذاكرة LRU (٢٥٦ مدخلاً) بحيث يكون
|
|
223
|
+
إعادة عرض نفس المعادلة بنفس الخيارات شبه مجاني. لمسح الذاكرة
|
|
224
|
+
(مثلاً عند تغيّر الخيارات جذرياً أو في الاختبارات):
|
|
225
|
+
|
|
226
|
+
```ts
|
|
227
|
+
import { clearRenderCache } from 'katex4arabic';
|
|
228
|
+
clearRenderCache();
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
> **حماية المدخلات:** أي مدخل أطول من `MAX_INPUT_LENGTH` (٢٠٬٠٠٠ حرف)
|
|
232
|
+
> يُقتَصّ تلقائياً لحماية خط الأنابيب من التكلفة الأسوأ، والمدخلات
|
|
233
|
+
> الفارغة تُعاد كما هي دون معالجة.
|
|
234
|
+
|
|
235
|
+
### React
|
|
236
|
+
|
|
237
|
+
```tsx
|
|
238
|
+
import { MathBlock, MathInline } from './components/MathEquation';
|
|
239
|
+
|
|
240
|
+
<MathBlock
|
|
241
|
+
latex="\\int_{0}^{\\infty} e^{-x^2} dx = \\frac{\\sqrt{\\pi}}{2}"
|
|
242
|
+
options={{ numerals: 'arabic', translateFuncs: true }}
|
|
243
|
+
/>
|
|
244
|
+
|
|
245
|
+
<p>التعريف هو <MathInline latex="f(x) = x^2" /></p>
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### خطاطيف React
|
|
249
|
+
|
|
250
|
+
```tsx
|
|
251
|
+
import { useArabicKatex, useArabicKatexResult } from 'katex4arabic/hooks';
|
|
252
|
+
|
|
253
|
+
const html = useArabicKatex('x^2 + y^2', { numerals: 'arabic' });
|
|
254
|
+
const { ok, error } = useArabicKatexResult(latex, options);
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## ⚙️ خيارات التهيئة
|
|
260
|
+
|
|
261
|
+
| الخيار | النوع | الافتراضي | الوصف |
|
|
262
|
+
| --- | --- | --- | --- |
|
|
263
|
+
| `numerals` | `arabic \| extended \| latin` | `arabic` | نظام الأرقام المعروض |
|
|
264
|
+
| `formatNumbers` | `boolean` | `true` | فواصل عربية `٬ ٫` في الأعداد |
|
|
265
|
+
| `translateFuncs` | `boolean` | `true` | ترجمة أسماء الدوال |
|
|
266
|
+
| `translateVars` | `boolean` | `true` | ترجمة المتغيرات اللاتينية |
|
|
267
|
+
| `translateDiffs` | `boolean` | `true` | ترجمة التفاضلات `dx → د س` |
|
|
268
|
+
| `mirrorSymbols` | `boolean` | `true` | عكس رموز المقارنة والأسهم |
|
|
269
|
+
| `mirrorBigOperators` | `boolean` | `true` | عكس `∫ Σ ∏` بصرياً |
|
|
270
|
+
| `mirrorSqrt` | `boolean` | `true` | عكس رمز الجذر `√` |
|
|
271
|
+
| `mirrorBrackets` | `boolean` | `true` | عكس الأقواس الزاوية والكبيرة |
|
|
272
|
+
| `direction` | `rtl \| ltr` | `rtl` | اتجاه المعادلة |
|
|
273
|
+
| `fullArabicMode` | `boolean` | `true` | قراءة RTL للمعادلة كاملة |
|
|
274
|
+
| `operatorScale` | `number` | `1.05` | حجم العوامل العربية (0.9–1.25) |
|
|
275
|
+
| `fontFamily` | `string` | `Amiri` | خط النصوص العربية |
|
|
276
|
+
| `displayMode` | `boolean` | `false` | وضع العرض (block) مقابل السطري |
|
|
277
|
+
| `throwOnError` | `boolean` | `false` | إلقاء خطأ بدل العرض الودّي |
|
|
278
|
+
| `customFunctionMap` | `Record` | `{}` | تجاوز ترجمات الدوال |
|
|
279
|
+
| `customVariableMap` | `Record` | `{}` | تجاوز ترجمات المتغيرات |
|
|
280
|
+
| `macros` | `Record` | `{}` | ماكرو KaTeX إضافية |
|
|
281
|
+
| `minRuleThickness` | `number` | `0.04` | سماكة خطوط الكسور |
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
## 🎨 التوافق البصري مع اللاتينية
|
|
286
|
+
|
|
287
|
+
تقوم `katex-arabic.css` بتطبيع مقاييس النصوص العربية لتطابق مخرجات KaTeX
|
|
288
|
+
اللاتينية: خط أساس موحّد، ارتفاع سطر مضبوط، ومنع قصّ النتوءات والحركات.
|
|
289
|
+
لمزيد من الدقة، تتحكم هذه المتغيرات بالتخصيص:
|
|
290
|
+
|
|
291
|
+
| المتغير | الوظيفة | الافتراضي |
|
|
292
|
+
| --- | --- | --- |
|
|
293
|
+
| `--ka-op-scale` | حجم العوامل والنصوص العربية داخل المعادلة | `1.05` |
|
|
294
|
+
| `--ka-font-family` | عائلة خط النصوص العربية | `Amiri` |
|
|
295
|
+
| `--ka-color` | لون المعادلة | `inherit` |
|
|
296
|
+
| `--ka-line-height` | ارتفاع السطر المحيط | `1.6` |
|
|
297
|
+
|
|
298
|
+
```css
|
|
299
|
+
.math-equation { --ka-op-scale: 1.08; }
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
قيمة `1.08`–`1.1` تعوّض عادةً الفرق البصري في حجم الحروف بين الخطوط
|
|
303
|
+
العربية و`KaTeX_Main`. تُوسَّط الأسس والأدلة والكسور والجذور والمصفوفات
|
|
304
|
+
على المحور الرياضي، تماماً كما في المعادلة اللاتينية.
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
308
|
+
## 🧪 الاختبارات
|
|
309
|
+
|
|
310
|
+
```bash
|
|
311
|
+
npm test # تشغيل كامل
|
|
312
|
+
npm run test:watch
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
تغطي الاختبارات: تحويل الأرقام ذهاباً وإياباً، ترجمة الدوال والمتغيرات
|
|
316
|
+
مع حماية `\text{}`، عكس الرموز، وسلامة خط الأنابيب الكامل مع كل الخيارات.
|
|
317
|
+
|
|
318
|
+
---
|
|
319
|
+
|
|
320
|
+
## 📜 الترخيص
|
|
321
|
+
|
|
322
|
+
مفتوح المصدر، مبنية على [KaTeX](https://katex.org) (MIT).
|
|
323
|
+
بواسطة [ِAhmed Almaghz](https://github.com/AhmedAlmaghz/KaTeX4Arabic) - 2026
|