أوراق الأنماط الخارجية الأصلية لـ rich-text

يطبِّق مفكك XHTML الأصلي موارد CSS المقدَّمة من المستدعي والمُشار إليها بعناصر link في XHTML وقواعد @import في CSS على runs rich-text فعلية وقيم rich محفوظة ومظاهر حقول

Options := THPDFHeadlessRichTextDecodeOptions.Default;
Options.DocumentURI := 'https://example.test/forms/order.xhtml';
SetLength(Options.StyleSheets, 2);
Options.StyleSheets[0].URI := 'css/main.css';
Options.StyleSheets[0].CSS := '@import "colors.css"; span.total { font-weight: bold }';
Options.StyleSheets[0].ContentType := 'text/css';
Options.StyleSheets[1].URI := 'css/colors.css';
Options.StyleSheets[1].CSS := 'span.total { color: #a02030 }';
Runs := HPDFDecodeHeadlessRichText(XHTML, Options);
<body xmlns="http://www.w3.org/1999/xhtml">
  <link rel="stylesheet" href="css/main.css" />
  <span class="total">Total</span>
</body>

هوية المورد وcascade

المراجع النسبية تستخدم دمج مسارات RFC 3986 وإزالة dot-segments؛ وسلاسل الاستعلام تبقى جزءًا من هوية المورد وfragments لا، وحروف scheme وhost تُطبَّع بينما تحفظ معلومات المستخدم حالتها، وحروف hex في percent-escape تقارن دون حالة

كل ورقة مستوردة تحلّ imports الإضافية مقابل URI الخاص بها وله بيئة CSS namespaces مستقلة؛ واستيراد ورقة لا يسرِّب إعلانات @namespace الخاصة بها إلى أصلها

imports تقبل سلاسل مقتبسة وtokens url بما يشمل مهرّبات CSS، قبل القواعد العادية أو إعلانات namespaces؛ ومقيِّم استعلامات media print/screen القائم يتحكم بشروط media للروابط والاستيراد

الإعلانات المستوردة تدخل cascade عند موضع مصدرها الفعلي بأهمية وتخصص عاديين؛ والمرجع الدوري يُتَّرك من دون معالجة فقط أثناء نشاط ذلك المورد، فتستطيع المراجع المتكررة اللاحقة الإسهام مجددًا

الموارد الغائبة والمراجع المؤلَّفة غير الصالحة وأنواع المحتوى غير CSS لا تُسهم بأي إعلانات؛ ومجموعات الموارد المقدَّمة من المستدعي غير الصالحة ترفع EHPDFHeadlessRichTextCodecError

مراجع XHTML والمجموعات المنتقاة

tokens علاقة stylesheet تقارن دون حالة أحرف ASCII؛ والروابط المعطَّلة تُتجاهل، وسمتا media وtype تتحكمان في مشاركة stylesheet المُشار إليه

عناصر style المضمَّنة والأوراق المرتبطة تتشارك مجموعات titles نفسها الحساسة لحالة الأحرف؛ والأوراق الدائمة بلا title تبقى مفعَّلة

من دون StyleSheetTitle صريح، ينتقي أول عنصر style مضمَّن مؤهَّل له title أو رابط غير alternate المجموعة المفضَّلة؛ ويحدد المفكك ذلك الـ title قبل جمع الإعلانات، فلا يشارك alternate سابق لهذا الـ title في موضع cascade الأصلي

StyleSheetTitle صريح ينتقي الأوراق المضمَّنة والمرتبطة ذات الـ titles المطابقة بما يشمل alternates؛ والـ title بلا ورقة مطابقة يترك الأوراق الدائمة فقط مفعَّلة

مسح title المفضَّل يقبل type فارغًا أو text/css ويتخطى الروابط المعطَّلة أو alternate؛ وتوفر المورد وشروط media لا يغييران الـ title المنتقى، والإعلانات ما تزال تخضع لفحوص media وtype والمورد الخاصة بها

حل HTML وXML base

أول عنصر base في XHTML له href داخل head في XHTML يمدّ أساس المستند بحلّ href الخاص به مقابل DocumentURI؛ وxml:base على عنصر base أو أسلافه لا يغيّر هذا البحث

يطبِّق المفكك بعد ذلك xml:base لكل سلف مرة واحدة، بدءًا من أساس المستند ذاك، لحلّ مراجع link وimports المضمَّنة؛ والورقة المرتبطة أو المستوردة تحلّ imports الخاصة بها مقابل URI المورد

مثلًا، DocumentURI=https://example.test/docs/form.xhtml وxml:base للجذر "a/" وbase في head ذو href="b/" وlink ذو href="main.css" تُحلّ إلى https://example.test/docs/b/a/main.css

أول base href فارغ يستخدم URI المستند الاحتياطي؛ وأول base href غير صالح يحفظ ذلك الاحتياطي أيضًا ويستهلك موضع أول base، فلا تستبدله عناصر base لاحقة

هذا الترتيب يعرِّف ملف HTML/XML المدمج الخاص بمفكك native؛ وXML Base بحد ذاته لا يعرِّف كيف ينبغي دمج آلية HTML base منفصلة معه

بيانات النماذج وعمليات JSON

اضبط RichTextDocumentURI وRichTextStyleSheetTitle وRichTextStyleSheets على THPDFHeadlessFormDataOptions عند استيراد RV أو XFDF value-richtext من FDF عبر توابع المستندات الأصلية

مهام ملفات Windows وexecute-json-v1 على Windows وC ABI الأصلي لـ Linux بإصداره يقبل كلها كائن richTextResources الاختياري نفسه على forms.import

{
  "schemaVersion": 1,
  "type": "forms.import",
  "format": "xfdf",
  "richTextResources": {
    "documentURI": "https://example.test/forms/order.xhtml",
    "styleSheetTitle": "Print",
    "styleSheets": [
      {"uri": "css/main.css", "css": "span.total { color: red }", "contentType": "text/css"}
    ]
  }
}

URI مطلوب وغير فارغ لكل مورد JSON؛ وcss وcontentType سلسلتان اختياريتان، وكذلك documentURI وstyleSheetTitle؛ والسلاسل المقدَّمة يجب ألا تحوي NUL

الموارد نصوص CSS يونيكود يمدّها المضيف؛ ومعرفات URI لا تطلب وصولًا إلى نظام ملفات أو شبكة أو تغييرات في layouts سجلات callback

معاملة الاستيراد المحيطة تحفظ مستندها السابق عند موارد مشوَّهة أو cancellation أو فشل ميزانية أو فشل نشر؛ وimports المكافئة تمامًا تحفظ سلوك no-op القائم المطابق بايتيًا

قبول غير GUI قابل لإعادة الاستخدام

Tests/Linux/ExternalStyleSheets/Run.py يفحص runs مفكوكة فعلية وسلوك فشل محدود السقف ومظاهر محفوظة وهندسة PDF وبكسلات مستقلة؛ ومجلد Callbacks الخاص به يمارس imports FDF/XFDF فعلية وبايتات no-op ومعاملات فشل النشر

Tests/Linux/ExternalStyleSheets/Supplement/Run.py يفحص مجموعات titles المشتركة للمضمَّن/الرابط وحل HTML/XML base المدمج وكل حد cancellation لعنوان تلقائي مقيَّسًا وفشل عمق يليه إعادة محاولة ناجحة

المكمِّل يقبل مجلد مصدر وإعدادات مترجم صريحين، ويسجل هويتي المصدر والاعتماديات الفعليتين، ويتطلب مجلد مخرجات جديدًا لكل تنفيذ

الحدود والعمل المتبقي

عدد الموارد 256 كحد أقصى، وكل URI محلول 4096 وحدة كود UTF-16 كحد أقصى، وكل title أو نوع محتوى 256 كحد أقصى؛ ونص stylesheet يخضع أيضًا لـ MaxCodeUnits، مع مسوحات ومطابقة مجمعة تُحمَّل على حدود nodes وإجمالي وحدات الكود والعمق وcancellation القائمة

ارتباطات form-data تستخدم MaxValueCodeUnits وMaxTotalCodeUnits وMaxObjects وMaxDepth وtoken cancellation العملية لحدود المفكك المقابلة

طبقات الاستيراد وتخطيط CSS الإضافي والجداول والصور وتحميل موارد HTML الأوسع تبقى عملًا منفصلًا

المُختارات وأوراق الأنماط المضمَّنة · ملفات media · خيارات form-data

استعلامات الدعم الأصلية تقبل مجموعات @supports وimports supports() باستخدام ملف الإعلانات والمُختارات المدعوم، بحدود مشتركة واسترداد cancellation