[Visual Basic] MathML to/from Plain Text Converter

Hi mọi người, tìm hiểu code trên codeproject.com thấy có bài hướng dẫn chuyển đổi dạng HTML
Chuyển đổi chuỗi mã hóa MathML thành/từ chuỗi văn bản thuần túy

[Visual Basic] MathML to/from Plain Text Converter

Mã bao gồm hai lớp để phân tích chuỗi MathML. Lớp đầu tiên, MathToString chuẩn bị chuỗi. Lớp thứ hai, ParseML, thực hiện phân tích. Tương tự, để lấy mã MathML từ văn bản, một lớp chuẩn bị và lớp kia thực hiện chuyển đổi.

Giới thiệu

Có vẻ như có ít tài nguyên chuyển đổi mã MathML thành văn bản thuần túy. Một lý do chính đáng là không có sự đồng thuận về cách định dạng một số biểu thức toán học. Nhưng đối với nhiều biểu thức liên quan đến toán tử (+,-,/,*,^,=), đây là một trình chuyển đổi khả thi.

Các lớp học đã tham gia

Lớp MathToString chuẩn bị stringMathML để class ParseML
có thể thực hiện phân tích cú pháp chi tiết.

Sự chuẩn bị

Đầu tiên, các khoảng trắng được thay thế bằng các chuỗi rỗng và một số ký tự đặc biệt cũng được thay thế. Ngoài ra, một số thẻ không liên quan đến biểu thức toán học, như stylethẻ, sẽ bị xóa. Sau đó, mã sẽ chuyển từ <mfrac>...</mfrac>,<msup>...</msup>, <mrow>...</mrow>, <msqrt>...</msqrt> các thẻ bên trong nhất sang các thẻ bên ngoài nhất, được phân tích cú pháp và thay thế, bao quanh chúng giữa các ký tự đặc biệt để sau đó chúng có thể được phục hồi theo ParseML lớp.

Sử dụng Mã

Để chuyển đổi, chỉ cần gọi phương thức chia sẻ MathToString.convertToString():
Dim converted as String = MathMLToString.convertToString(MathMLcodeToConvert)

Để chuyển đổi văn bản sang MathML, hãy gọi convertStringToMathML().

Nguyên tắc cơ bản

Phương pháp phân tích cú pháp là phân tích cú pháp đệ quy-giảm dần: Phân tích biểu thức bằng phương pháp giảm dần đệ quy.

Phương pháp đánh giá Eyêu Tcầu bất kỳ phép cộng hoặc trừ nào, nhưng Ttrước tiên gọi Fbất kỳ phép nhân hoặc trừ nào, và Ftrước tiên gọi Pbất kỳ phép toán lũy thừa nào có thể. Pgọi trước để lấy mã thông báo tiếp theo. Nếu có (mã thông báo " ", v gọi đệ quy đến T.
E --> T {( "+" | "-" ) T}
T --> F {( "*" | "/" ) F}
F --> P ["^" F]
P --> v | "(" E ")" | "-" T

Phiên bản 1.0.3.0

Bây giờ, tệp zip demo có chứa tệp thiết lập.

Các ứng dụng JavaScript, .NETCore đã được mã hóa lại, vì MathML là một ứng dụng của XML và để phản ánh các thẻ có thể được lồng nhau 'đệ quy', ý tôi là, một phần tử có thể xuất hiện bên trong chính nó hoặc bất kỳ cấp nào bên dưới các phần tử con của nó. Ví dụ:
<mfrac>
   <mrow>
     <mi>-1</mi>
   </mrow>
   <mn>
     <mn>3</mn>
   </mn>
</mfrac>

Phiên bản 2.0.0.0 (2024-03-25)

Mã đã được viết lại, cải thiện và mở rộng. Ví dụ, hiện tại nó hỗ trợ bao gồm các phương trình trong ngôn ngữ LaTex như sau:
\begin{array}{*{20}c} {x = \frac{{ - b \pm \sqrt {b^2 - 4ac} }}{{2a}}} &
{{\text{when}}} & {ax^2 + bx + c = 0} \\ \end{array}

Để thực hiện mục đích này, bằng cách đưa phương trình vào LaTex trong hộp văn bản MathML và nhấp vào 'Chuyển đổi thành văn bản thuần túy', mã Latex sẽ được thay thế bằng bản dịch sang MathML và được chuyển đổi thành văn bản thuần túy.

Phiên bản 2.0.5.0 (2024-04-17)

Một số mẫu khác đã được thêm vào.
Đã có sự sắp xếp để dấu ngoặc vuông và ngoặc nhọn được phản ánh trong quá trình chuyển đổi.
ConvertStringToMathML.EvaluateFromInnerToOuter() là một phương pháp mới và như tên gọi của nó, nó kiểm tra từ hầu hết các cặp ngoặc đơn và/hoặc ngoặc vuông bên trong đến hầu hết các cặp ngoặc vuông bên ngoài.

Phiên bản 2.0.5.9 (2024-05-01)

Đã thêm nhiều mẫu hơn.
Một số lỗi đã được vá và một số cải tiến đã được triển khai. Ví dụ, hiện tại thẻ <mlabeledtr>đã được tính đến.

Phiên bản 2.0.6.0 (17-05-2024)

Một số mẫu khác đã được thêm vào. Nhấn các phím chức năng F1, F2 và F12 tương ứng để chuyển đến số mẫu; chuyển đến mẫu tiếp theo; và quét các mẫu từ mẫu hiện tại (phím thoát 'Esc' sẽ hủy quét).
Có các tính năng mới. Việc giữ nguyên dấu ngoặc đơn bằng cách sử dụng ⸨ ⸩ đã được bật, ngăn ứng dụng xóa chúng. Ví dụ, khi chuyển đổi văn bản "(3)" thành MathML dấu ngoặc đơn bị loại bỏ. Thay vào đó, văn bản "⸨3⸩ "được chuyển đổi thành MathMLsẽ giữ nguyên chúng.

Bây giờ, với ↓ký tự (ascii 25), sau và trước dấu ngoặc đơn, một MathML thuộc tính stretchy='false' đã đạt được. Vì vậy, văn bản ∫⸨5*x+2*sin⸨↓x↓⸩⸩dx khi được dịch sang MathML sẽ mở rộng dấu ngoặc đơn bên ngoài chứ không phải dấu ngoặc đơn bên trong xung quanh x.

Ngoài ra, người dùng có thể lựa chọn giữa MathJa'sphiên bản 2.7.23. Phiên bản 2 cũ hơn nhưng có ngắt dòng tài khoản, trong khi phiên bản 3 thì không.

Phiên bản 2.0.13.0 (2024-07-11)

- Bao gồm thêm một số ví dụ.
- Một số bản sửa lỗi và cải tiến đã được thực hiện.

إرسال تعليق

أحدث أقدم