تخطَّ إلى المحتوى

طبقة العرض render.ts

تغليف عرض قوالب Handlebars.

مبدأ التصميم: قوالب رفيعة

Section titled “مبدأ التصميم: قوالب رفيعة”

القوالب مسؤولة عن الهيكل العام للملف فقط (تعليقات الرأس، والاستيرادات، وفتح/إغلاق مساحات الأسماء). أما تنسيق القيم الحرفية لكل رمز فيتم بالكامل في TS الخاص بالهدف، ويُغذَّى القالب بسلسلة body مُجمَّعة:

target.ts: تنسيق كل رمز ← تجميعها في سلسلة body
▼
render.ts: render('android/LhTokens.kt.hbs', { package, imports, body })
▼
القالب: تعليقات الرأس + إعلان package + الاستيرادات + {{{body}}}

الفائدة: لا يوجد منطق handlebars معقد داخل القوالب؛ تعديل تنسيق القيم الحرفية يكون في TS الخاص بالهدف، وتعديل الهيكل العام للملف يكون في القالب، دون أن يتدخل أحدهما في الآخر.

loadTemplate(name: string): HandlebarsTemplateDelegate

Section titled “loadTemplate(name: string): HandlebarsTemplateDelegate”

دالة داخلية. تقرأ القالب وفق اسمه من codegen/templates/<name>:

const compiled = Handlebars.compile(source, { noEscape: true })
cache.set(name, compiled) // تخزين نتيجة التجميع، تفاديًا لإعادة التجميع

يُحدَّد دليل القوالب بالثابت TEMPLATES_DIR (codegen/templates).

render<T>(templateName: string, data: T): string

Section titled “render<T>(templateName: string, data: T): string”

الواجهة الوحيدة المُعلَنة:

return loadTemplate(templateName)(data)

وهذا كل ما يحتاجه كل هدف لاستدعائها.

لا توجد مساعدات (helpers) مخصصة

Section titled “لا توجد مساعدات (helpers) مخصصة”

لا تسجِّل القوالب أي مساعد handlebars، وتعتمد فقط على القدرات المدمجة:

الصيغة الاستخدام
{{{ }}} الأقواس الثلاثية مع noEscape، لإدراج body مهيَّأ مسبقًا
{{#each}} المرور على مصفوفات مثل قائمة الاستيرادات
القالب المنتجات
android/LhTokens.kt.hbs LhTokens.kt و LhDarkTokens.kt (مشتركة بين الوضعين)
ios/LhTokens.swift.hbs LhTokens.swift وLhDarkTokens.swift
ios/LhShadow.swift.hbs LhShadow.swift (قالب ثابت، بلا فتحة body)
harmony/LhTokens.ets.hbs LhTokens.ets وLhDarkTokens.ets
harmony/LhShadow.ets.hbs LhShadow.ets (قالب ثابت)
c/lh_tokens.h.hbs lh_tokens.h
c/lh_dark_tokens.h.hbs lh_dark_tokens.h

راجع قائمة القوالب.

Copyright © 2024-2026 FengMo WenXue