اصل ماجرا
Merman یک پیادهسازی سرسخت و بدون مرورگر از ابزار نمودار Mermaid.js است که به زبان Rust نوشته شده. این کتابخانه میتواند متن Mermaid را به JSON معنایی، SVG، PNG/JPG/PDF و حتی خروجی متنی ASCII/Unicode تبدیل کند و بدون نیاز به جاوااسکریپت یا مرورگر اجرا شود. عملکرد آن 4 تا 56 برابر سریعتر از Mermaid.js است و برای برنامههای سرور، ابزارهای خط فرمان و ادغام در برنامههای Rust مناسب است.
متن کامل ترجمهشده
Mermaid.js، اما بدون سر، در Rust. Mermaid.js یک ابزار دیگرامینگ JavaScript است که متن مانند flowchart TD؛ A—>B؛ را به دیگراف برای Markdown، docs، و برنامه های وب تبدیل می کند. Merman یک اجرای Rust متمرکز، بدون سر از Mermaid.js برای تحلیل، طرح، و rendering بدون مرورگر است. آن را هدف [email protected]، تولید JSON سماتیک، layout JSON، SVG، فرمت های ریستری، و ASCII / Unicode تولید، و یک مرورگر یا JavaScript runtime را برای rendering دیگراف شروع نمی کند. سعی کنید آن را در مرورگر: Merman Playground. Parity با اسکناسهای سیمنتی / layout طلا و SVG DOM پایه های بالا و بالا، تغییرات که تاثیر می گذاردبسیاری از مثال ها و ابزارهای در این ذخیره از دستورات یا تست های Mermaid، یا به صورت کلمه ای یا با به روزرسانی های کوچک برای زمینه های محلی استخراج می شوند؛ ببینید THIRD_PARTY_NOTICES.md برای اسناد مجوز و ارجاع Mermaid. - JSON سمتی برای گرافیک Mermaid. - Layout JSON با جغرافیای محاسبه شده و مسیرها. - SVG مانند Mermaid از یک renderer Rust کاملا بدون سر. - ASCII/Unicode گرافیک برای قطعات، ژوگرافی ها و اسنپت های سند. - PNG، JPG، و PDF از طریق SVG rasterization/conversion. - پوشش گرافیک JSON و وضعیت مساوی فعلی زنده در docsalignment/STATUS.md. این0٪ از JS نشان دادن زمان در مورد موارد موفق JS Mermaid، حدود 4.3x تا 56.4x سریع تر، با سرعت متوسط در حدود 15.8x. اعداد عملکرد یک جایگزین برای پیراهن SVG نیست. گمشده، گمشده، اشتباه، و نتایج مقایسه کیفیت به صورت جداگانه گزارش می شود از طریق استفاده از استاندارد. مشاهده doscs/performance/BENCHMARKING.md برای روش ها و دستورالعمل ها. # ابزار دستورالعمل (Cargo) بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار بار1 —optional # Browser / TypeScript package npm install @mermanjs/web # Flutter package flutter pub add merman # Python package (experimental UniFFI wheels) pip install mermanPackage pages: Homebrew merman-cli, npm @mermanjs/web, pub.dev merman, and PyPI merman. For rustdoc feature setup and examples, see crates/merman-rustdoc/README.md. From a local checkout: cargo install —path crates/merman-cli cargo build -p merman-ffi —releaseUse crates/merman-ffi/include/merh.manh. and link the platform-specific library artifact from target/release for native embedding.- Choose Your Entry Point - What Merman Outputs - Sample output - Performance - Install - Quickstart (bibliothèque) - Rust examples - Quickstart (CLI) - Library API details - Quickstart (FFI and native hosts) - Math Labels - ASCII/Unicode text output - Developing - Showcase - Parity and coverage - Quality gates - Limitations - Feature surfaces - Architecture notes - Workspace crates - Star History - Links برای اکثر برنامه های Rust، شروع با merman::render::HeadlessRenderer: use merman::render::HeadlessRenderer; fn main() -> Result<), Box<URL0> { let renderer = HeadlessRenderer::new(with diagram_id”readme-example”); let = svg renderer .rاستفاده از ویژگی ascii و merman::ascii::HeadlessAsciiRenderer برای فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرآیند فرmmd —pretty # Render SVG merman-cli render path/to/diagram.mmd —out.svg # Render terminal text output merman-cli render —format unicode path/to/diagram.mmd merman-cli render —format ascii path/to/diagram.mmd # Terminal text supports common flowchart directions, labels, shapes, and simple subgraphs printf “flowchart TB\nsubgraph one\nA((Start)) — go —> B(DB)\nend\n”ullen merman-cli render —formatcii as - # Render ras formats merman-cli render —pngout pngout —.pngout path/to/diagram.mmdman mer-cli render merformat — jpout —.jpg out/to/diدر این مطلب می خواهیم به شما بگویم که در این مطلب می توانید با استفاده از روش های مختلفی که در این زمینه به شما توصیه می شود، با استفاده از روش های مختلفی که به شما توصیه می شود، با استفاده از روش های مختلفی که به شما توصیه می شود، با استفاده از روش های مختلفی که به شما توصیه می شود، با استفاده از روش های مختلفی که به شما توصیه می شود، با استفاده از روش های مختلفی که به شما توصیه می شود، با استفاده از روش های مختلفی که به شما توصیه می شود، با استفاده از روش های مختلفی که به شما توصیه می شود، با استفاده از روش های مختلفی که به شما توصیه می شود، با استفاده از روش های مختلفی که به شما توصیه می شود، با استفاده از روش های مختلفی که به شما توصیه می شود، با استفاده از روش های مختلفی که به شما توصیه می شود، با استفاده از روش های مختلفی که به شما توصیهبه عنوان مثال، می توان به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال.استفاده از HeadlessRenderer::render_svg_readable_sync() هنگامی که شما می خواهید ناوگان اصلی �URL_0 را نگه دارید و بهترین تلاش را اضافه کنید �URL_1 �/�URL_2\ fallback overlays. هنگامی که شما ویژگی را فعال می کنید, PNG/JPG تبدیل هدف آگاه و بودجه است. یک Mermaid SVG می تواند به طور قانونی یک ViewBox بسیار بزرگ داشته باشد؛ پیش بینی های مرورگر معمولاً این وکتور SVG را در یک حاشیه کوچک تر، در حالی که یک PNG/JPG راست بدون سر باید یک پیکتام بیکتری اختصاص دهد. استفاده از RasterOptions::with_fit_to(…) برای اتمام پیش بینی، مقیاس برای نسبت دستگاه-پیکتام و RasterSizeLimit برای بودجه پیکتام نهاییPngThe split intentional is: - render_svg_syncis for Mermaid-parity snapshots and callers who want the raw SVG contract. - render_svg_readable_syncis for inline previews that can keep- URL_0 but still want readable fallback text. - render_svg_resvg_safe_syncor- SvgPipeline::resvg_safe()is for PNG/JPG/PDF export and tools built on- resvg/- usvg. - SvgPostprocessorand- ScopedCssPostprocessorare for host applications that need product-specific theme or cleanup passes after a built-in preset. render_svg_sync:: intentionally staysma Merid-parity by default. برای مصرف کننده-oriented output, use an explicدر این مقاله می خواهیم با توجه به این که آیا شما می توانید از این روش ها استفاده کنید و از این روش ها استفاده کنید؟ می توانید از این روش ها استفاده کنید و از این روش ها استفاده کنید و از این روش ها استفاده کنید و از این روش ها استفاده کنید و از این روش ها استفاده کنید و از این روش ها استفاده کنید و از این روش ها استفاده کنید و از این روش ها استفاده کنید و از این روش ها استفاده کنید و از این روش ها استفاده کنید و از این روش ها استفاده کنید و از این روش ها استفاده کنید.h” static const uint8_t source[] = “flowchart TD\nA[سلامت] —> B[World]”; MermanResult result = merman_render_svg(source, sizeof(source) - 1, NULL, 0); اگر (result.code == MERMAN_PROTOCOL.md) { /* result.data contiene UTF-8 SVG bytes. */ } merman_buffer_free(result.data);Every non-empty MermanResult.data buffer must be released with merman_buffer_free. See docs/bindings/FFI_PROTOCOL.md for result codes, options JSON, threading, and compatibility rules. Detailed platform notes: - Android/Kotlin: docs/bindings/ANDROID_JNI.آنها را به عنوان بستگی های برنامه / زمان اجرا به جای اسکرپت های کوچک در نظر بگیرید: آرتافات نسخه فعلی حدود 9-17 MB در هر قطعه متحرک متحرک متحرک متحرک قبل از اپلیکیشن فروشگاه و یا پیکربندی، در حالی که آرتافات مرورگر WASM حدود 9.8 MB غیر متحرک و 3.6 MB با gzip است. Universal Apple XCFrameworks و آرشیو های استاتیک می تواند بزرگتر باشد زیرا آنها چندین آرتافات را با هم جمع می کنند. از کنترل های معمول پلتفرم مانند ایجادات انتشار، stripping / LTO، کم کردن بسته ها، بارگذاری خسته کننده و کیش طولانی مدت برای آرتاف های نسخه شده استفاده کنید. merman-cli اجازه می دهد که خالص-RustTeXend به طور پیش فرض برگردد.Flowchart و Sequence پشتیبانی از برچسب های فقط ریاضی و برچسب های یک فرمول پروزی / ریاضی مانند Solve: $$x^2$$: printf “flowchart LR\nA[“$$x^2$”] —> B\n” Uí cargo run -p merman-cli — render —math-renderer ratex -Build merman-cli with —no-default-features only when you intentionally want to exclude default binary capabilities such as RaTeX and ASCII/Unicode. In that mode ratex remains unavailable unless ratex-math is enabled explicitly, and ASCII/Unicode CLI output remains unavailable unless it is enabled explicitly. Library users enable the feature as when they want terminal-friendmerman-cli از طریق ASCII/Unicode به طور پیش فرض فعال می شود: پشتیبانی متن عمومی فعلی شامل flowchart/graph، sequenceDiagram، classDiagram، erDiagram، و xychart از طریق merman::ascii::render_ascii_sync، typed merman::ascii::render_model، کمک های مستقیم (render_flowchart، render_sequence، render_class، render_er، render_xychart) و merman-cli render —format ascii Unibertsunicode. فرآیند فرآیند فرآیند Flowchart از طریق LR/TD/TB/BT/RL دستورالعمل های ریشه را پوشش می دهد، صمیمیت های جعلی، مقادیر معمولی شکل پایانی، برچسب ها، باز کردن/dotted/thickفرمت سازگار با Mermaid به صورت پیش فرض جعبه های شرکت کننده پایین را غیر فعال می کند؛ AsciiRenderOptions::with_sequence_mirror_actors(true) و merman-cli render —format ascii gcunicode —sequence-mirror-actors اجازه می دهد جعبه های شرکت کننده تماشای شده برای فرمت پایانی را غیر فعال کند. Class, ER و XYChart text output intentionally ship bounded terminal-native subsets: class and ER support boxes, labels, single relationships, layered chain/star multi-relationship layouts, and adjacent-layer crossing layouts resolved by layer reorder. Same-endpoint and simple mixed-parallel relationships render as distinct lanes, simple spanning-level relationships route through side lanبه عنوان مثال می توانید از این روش استفاده کنید: ascii::{AsciiRenderOptions, HeadlessAsciiRenderer}; fn main() -> Result<(), Box�URL_0> { let renderer = HeadlessAsciiRenderer::new() .with_strict_parsing() .with_ascii_options(AsciiRenderOptions::unicode()); let text = renderer .render_ascii_sync(“sequenceDiagram\nparticipant A\nparticipant B\nA->>B: Hello”)؟ .unwrap(); println!
[…]
چرا مهمه؟
۱. با Merman دیگر نیازی به راهاندازی مرورگر یا موتور جاوااسکریپت برای تولید نمودارهای Mermaid ندارید؛ رندر بهصورت سرور‑ساید و سریع انجام میشود. ۲. توسعهدهندگان Rust، تیمهای DevOps و تولیدکنندگان مستندات که به نمودارهای متنی یا تصویری نیاز دارند، میتوانند از این کتابخانه برای تولید SVG، PNG یا خروجی متنی در ترمینال استفاده کنند. ۳. سرعت بالاتر و عدم وابستگی به مرورگر هزینههای زیرساخت را کاهش میدهد و امکان ادغام آسان در CI/CD، سرویسهای وب و ابزارهای خط فرمان را فراهم میکند.
به درد کی میخوره؟
• توسعهدهندگان Rust • تیمهای DevOps و CI/CD • نگارندگان مستندات فنی • طراحان ابزارهای خط فرمان
نظر Blue IT News
Blue IT News توصیه میکند که پروژههای مستندات خودکار یا سرویسهای CI که به نمودارهای گرافیکی نیاز دارند، بهجای وابستگی به مرورگرهای سنگین، از Merman استفاده کنند؛ این کار نه تنها سرعت را بالا میبرد بلکه ریسکهای امنیتی ناشی از اجرای جاوااسکریپت را کاهش میدهد.
<div class=“disclosure”> این صفحه ترجمه و تفسیر کاملی از گزارش اصلی GitHub است که توسط تیم تحریریه بلو آی تی نیوز به فارسی ترجمه و تحلیل شده. برای مشاهده نسخه اصلی، به منبع مراجعه کنید. </div>