2. إرشادات الكتابة¶
بشكل عام، عند إنشاء وثائق reST لمشروع QGIS، يُرجى اتباع إرشادات أسلوب وثائق Python. وللتسهيل، نقدّم أدناه مجموعة من القواعد العامة التي نعتمد عليها في كتابة وثائق QGIS.
2.1. كتابة الوثائق¶
2.1.1. العناوين¶
تقابل كل صفحة ويب من الوثائق ملفًا بامتداد .rst.
تُعرَّف الأقسام المستخدمة لتنظيم النص من خلال عناوينها التي يوضع تحتها خط (وفوقها خط أيضًا في المستوى الأول). يجب أن تستخدم العناوين من المستوى نفسه الحرف نفسه في زخرفة الخط السفلي. اسبق عناوين الأقسام بسطر فارغ. في وثائق QGIS، يجب استخدام الأنماط التالية للفصل (chapter) والقسم (section) والقسم الفرعي (subsection) والقسم المصغّر (minisec).
********
Chapter
********
Section
=======
Subsection
----------
Minisec
.......
Subminisec
^^^^^^^^^^
2.1.2. القوائم¶
القوائم مفيدة لتنظيم النص. إليك بعض القواعد البسيطة المشتركة بين جميع القوائم:
ابدأ جميع عناصر القائمة بحرف كبير
لا تستخدم علامات ترقيم بعد عناصر القائمة التي تحتوي على جملة بسيطة واحدة فقط
استخدم النقطة (
.) كعلامة ترقيم لعناصر القائمة المكونة من عدة جمل أو من جملة مركبة واحدة
2.1.3. مسافة فارغة¶
يجب أن تكون الإزاحة في reStructuredText محاذية لـ علامة القائمة أو الترميز. ويمكن أيضًا إنشاء كتل اقتباس باستخدام الإزاحة. راجع المواصفات
#. In a numbered list, there should be
three spaces when you break lines
#. And next items directly follow
* Nested lists
* Are also possible
* And when they also have
a line that is too long,
the text should be naturally
aligned
* and be in their own paragraph
However, if there is an unindented paragraph, this will reset the numbering:
#. This item starts at 1 again
2.1.5. التسميات/المراجع¶
يمكن استخدام المراسي (anchors) داخل النص لإنشاء روابط تشعبية إلى أقسام أو صفحات.
ينشئ المثال أدناه مرساة لقسم (مثل عنوان Label/reference)
.. _my_anchor:
Label/reference
---------------
لاستدعاء المرجع في الصفحة نفسها، استخدم
see my_anchor_ for more information.
والذي سيُنتج:
انظر my_anchor لمزيد من المعلومات.
لاحظ أنه سينتقل إلى السطر/العنصر الذي يلي «المرساة». لا تحتاج إلى استخدام علامات الاقتباس، لكن يجب وجود أسطر فارغة بعد المرساة.
طريقة أخرى للانتقال إلى المكان نفسه من أي موضع في الوثائق هي استخدام الدور :ref:.
see :ref:`my_anchor` for more information.
والذي سينشئ رابطًا يحمل العنوان بدلًا من ذلك (وهو في هذه الحالة عنوان هذا القسم!):
انظر التسميات/المراجع لمزيد من المعلومات.
إذن، المرجع 1 (my_anchor) والمرجع 2 (التسميات/المراجع). ولأن المرجع يعرض غالبًا عنوانًا كاملًا، فليس من الضروري حقًا استخدام كلمة قسم. لاحظ أنه يمكنك أيضًا استخدام عنوان مخصص لوصف المرجع:
see :ref:`Label and reference <my_anchor>` for more information.
والذي يُنتج:
انظر التسمية والمرجع لمزيد من المعلومات.
2.1.6. الأشكال والصور¶
الصور¶
لإدراج صورة، استخدم
.. figure:: /static/common/logo.png
:width: 10 em
والذي يُنتج
استبدال الأيقونات¶
يمكنك إضافة صورة داخل فقرة نصية (مثلًا كأيقونة أداة). للقيام بذلك، عليك أولًا إنشاء اسم مستعار (يُسمّى أيضًا بديلًا substitution)، وهو اسم مرجعي يُستخدم لعرض الأيقونة. ولضمان الاتساق عبر المستندات والمساعدة في استخدام الأيقونات، نحتفظ بقائمة في الملف substitutions.txt في جذر هذا المستودع. تجد مزيدًا من التفاصيل في الفصل بدائل.
يتم استخدام بديل الأيقونة عادةً عبر الخطوات التالية:
أضف بديل الأيقونة في الملف
substitutions.txtكما يلي. إذا كان هناك بديل موجود مسبقًا للأيقونة التي تريد استخدامها، فتخطَّ هذه الخطوة... |logo| image:: /static/common/logo.png :width: 1 em
استدعه في فقرتك:
My paragraph begins here with |logo|.
أضف بديل الأيقونة (مرة أخرى) في نهاية الملف الذي تعدّله. يساعد هذا على ربط النص البديل بالصورة الفعلية، ويمكن القيام به بنسخه ولصقه من
substitutions.txtأو بتنفيذ السكربتscripts/find_set_subst.py.هكذا سيُعرض المثال:
الشكل¶
.. _figure_logo:
.. figure:: /static/common/logo.png
:width: 20 em
:align: center
A caption: A logo I like
تبدو النتيجة هكذا:
شكل 2.24 تسمية توضيحية: شعار يعجبني¶
لتجنب التعارض مع المراجع الأخرى، ابدأ دائمًا مراسي الأشكال بـ _figure_ واستخدم مصطلحات ترتبط بسهولة بالتسمية التوضيحية للشكل. وبينما المحاذاة في الوسط هي الإلزامية الوحيدة للصورة، يمكنك استخدام أي خيارات أخرى للأشكال (مثل width و height و scale...) عند الحاجة.
ستُدرج السكربتات رقمًا مولّدًا آليًا قبل التسمية التوضيحية للشكل في نسختي HTML و PDF المولّدتين من الوثائق.
لاستخدام تسمية توضيحية (انظر My caption) أدرج نصًا مُزاحًا بعد سطر فارغ في كتلة الشكل.
يمكن الإشارة إلى شكل باستخدام تسمية المرجع هكذا:
see :numref:`figure_logo`
ويُعرض هكذا:
انظر شكل 2.24
هذه هي الطريقة المفضلة للإشارة إلى الأشكال.
ملاحظة
لكي يعمل :numref:، يجب أن يكون للشكل تسمية توضيحية.
يمكن استخدام :ref: بدلًا من :numref: للإشارة، لكنه يُرجع التسمية التوضيحية الكاملة للصورة.
see :ref:`figure_logo`
ويُعرض هكذا:
2.1.7. الجداول¶
يمكنك إنشاء جدول بسيط هكذا:
======= ======= =======
x y z
======= ======= =======
1 2 3
4 5
======= ======= =======
وسيُعرض هكذا:
x |
y |
z |
|---|---|---|
1 |
2 |
3 |
4 |
5 |
يجب أن يكون للجداول تسمية توضيحية. يمكنك استخدام توجيه "table" الصريح في reST لإضافة تسمية توضيحية إلى الجداول البسيطة أو الجداول الشبكية. أضف التسمية التوضيحية على السطر نفسه الذي فيه التوجيه، وأزح الجدول بمسافة واحدة على الأقل.
يمكنك أيضًا إضافة هدف ارتباط تشعبي قبل الجدول للإشارة إليه في مكان آخر. لتجنب التعارض مع المراجع الأخرى، ابدأ دائمًا أهداف الارتباط التشعبي بـ _table_ واستخدم مصطلحات ذات صلة بالتسمية التوضيحية للجدول.
إليك مثالًا على جدول شبكي أكثر تعقيدًا مع تسمية توضيحية وهدف ارتباط تشعبي:
.. _table-grid-caption:
.. table:: Grid table with caption
+---------------+--------------------+
| Windows | macOS |
+---------------+--------------------+
| |win| | |osx| |
+---------------+--------------------+
| and of course not to forget |nix| |
+------------------------------------+
النتيجة:
Windows |
macOS |
قد تجد من الأسهل استخدام جداول القوائم أو جداول CSV لإنشاء جداول معقدة. أضف التسمية التوضيحية بعد التوجيه list-table أو csv-table.
إليك مثالًا على جدول قائمة مع تسمية توضيحية وهدف ارتباط تشعبي:
.. _table-list-caption:
.. list-table:: List table with caption
:header-rows: 1
:widths: 20 20 20 40
* - What
- Purpose
- Key word
- Description
* - **Test**
- ``Useful test``
- complexity
- Geometry. One of:
* Point
* Line
النتيجة:
ماذا |
غرض |
الكلمة المفتاحية |
وصف |
|---|---|---|---|
اختبار |
|
التعقيد |
الشكل الهندسي. أحد الأنواع التالية:
|
استخدم أدوار :numref: للإشارة إلى الجداول هكذا:
see :numref:`table-grid-caption` or :numref:`table-list-caption`
النتيجة:
ملاحظة
يجب أن تضيف تسمية توضيحية إلى جدولك لإنشاء إحالة مرجعية باستخدام الدور :numref:.
2.1.8. Index¶
الفهرس وسيلة مفيدة لمساعدة القارئ على إيجاد المعلومات في المستند. توفر وثائق QGIS بعض الفهارس الأساسية. وهناك بعض القواعد التي تساعدنا على تقديم مجموعة من الفهارس المفيدة حقًا (متماسكة ومتسقة ومترابطة فعلًا فيما بينها):
يجب أن يكون الفهرس مقروءًا ومفهومًا وقابلًا للترجمة؛ يمكن أن يتكون الفهرس من كلمات عديدة لكن تجنب أي محارف غير ضرورية مثل
_و-... لربطها، أي استخدمLoading layersبدلًا منloading_layersأوloadingLayers.اجعل الحرف الأول فقط من الفهرس كبيرًا ما لم يكن للكلمة تهجئة خاصة. مثال:
Loading layersوAtlas generationوWMSوpgsql2shp.راقب قائمة الفهرس الموجودة لإعادة استخدام التعبير الأنسب بالتهجئة الصحيحة وتجنب التكرارات غير الضرورية.
توجد عدة وسوم للفهرسة في reST. يمكنك استخدام الوسم المضمّن :index: داخل النص العادي:
QGIS can load several :index:`Vector formats` supported by GDAL ...
أو يمكنك استخدام ترميز مستوى الكتلة .. index:: الذي يرتبط ببداية الفقرة التالية. وبسبب القواعد المذكورة أعلاه، يُوصى باستخدام الوسم على مستوى الكتلة:
.. index:: WMS, WFS, Loading layers
يُوصى أيضًا باستخدام معاملات الفهرس مثل single و pair و see لبناء جدول فهرس أكثر تنظيمًا وترابطًا. راجع توليد الفهرس لمزيد من المعلومات حول إنشاء الفهارس.
2.1.9. التعليقات الخاصة¶
قد ترغب أحيانًا في إبراز بعض نقاط الوصف، إما للتحذير أو التذكير أو تقديم تلميحات للمستخدم. في وثائق QGIS، نستخدم توجيهات reST الخاصة مثل .. warning:: و .. seealso:: و .. note:: و .. tip::. تولّد هذه التوجيهات إطارات تُبرز تعليقاتك. راجع ترميز مستوى الفقرة لمزيد من المعلومات. العنوان الواضح والمناسب مطلوب لكل من التحذيرات والتلميحات.
.. tip:: **Always use a meaningful title for tips**
Begin tips with a title that summarizes what it is about. This helps
users to quickly overview the message you want to give them, and
decide on its relevance.
2.1.10. مقتطفات الشيفرة¶
قد ترغب أيضًا في تقديم أمثلة وإدراج مقتطفات شيفرة. في هذه الحالة، اكتب التعليق تحت سطر أُدرج فيه التوجيه ::. ولعرض أفضل، خاصةً لتطبيق تلوين الصياغة على الشيفرة وفق لغتها، استخدم التوجيه code-block، مثل .. code-block:: xml. مزيد من التفاصيل في عرض الشيفرة.
ملاحظة
يُترجم النص في التعليقات الخاصة، لكن النص في إطارات code-block لا يُترجم. لذا اجعل التعليقات داخل كتل الشيفرة قصيرة قدر الإمكان وتجنب التعليقات التي لا علاقة لها بالشيفرة.
2.1.11. الحواشي السفلية¶
هذا لإنشاء حاشية سفلية (تظهر كمثال [1])
blabla [1]_
والتي ستشير إلى:
2.2. إدارة لقطات الشاشة¶
2.2.1. إضافة لقطات شاشة جديدة¶
إليك بعض التلميحات لإنشاء لقطات شاشة جديدة وجميلة. يجب وضع الصور في مجلد صور (img/) يقع في المجلد نفسه الذي فيه ملف .rst الذي يشير إليها.
يمكنك إيجاد بعض مشاريع QGIS الجاهزة المستخدمة لإنشاء لقطات الشاشة في المجلد
./qgis-projectsمن هذا المستودع. يسهّل هذا إعادة إنتاج لقطات الشاشة للإصدار التالي من QGIS. تستخدم هذه المشاريع بيانات العينة الخاصة بـ QGIS (المعروفة أيضًا باسم Alaska Dataset)، والتي يجب فك ضغطها ووضعها في المجلد نفسه الذي فيه مستودع QGIS-Documentation.صغّر النافذة إلى أدنى مساحة لازمة لإظهار الميزة (أخذ الشاشة كاملة لنافذة مشروطة صغيرة > مبالغة)
كلما قلّت الفوضى كان أفضل (لا حاجة لتفعيل جميع أشرطة الأدوات)
لا تغيّر حجمها في محرر صور؛ سيُضبط الحجم في ملفات
.rstعند الضرورة (تصغير الأبعاد دون رفع الدقة بشكل مناسب > نتيجة قبيحة)اقطع الخلفية
اجعل الزوايا العلوية شفافة إذا لم تكن الخلفية بيضاء
اضبط دقة حجم الطباعة على
135 dpi(مثلًا في GIMP صغّر الصورة باستخدام واضبط "X/Y" على135 pixels/in، ثم صدّرها عبر ). بهذه الطريقة ستكون الصور بحجمها الأصلي في HTML وبدقة طباعة جيدة في PDF.يمكنك أيضًا استخدام الأمر convert من ImageMagick لمعالجة مجموعة من الصور دفعةً واحدة:
convert -units PixelsPerInch input.png -density 135 output.png
احفظها بتنسيق
.png(لتجنب تشوهات.jpeg)يجب أن تُظهر لقطة الشاشة المحتوى وفق ما هو موصوف في النص
نصيحة
إذا كنت تستخدم Ubuntu، يمكنك استخدام الأمر التالي لإزالة وظيفة القائمة العامة وإنشاء شاشات تطبيقات أصغر مع القوائم:
sudo apt autoremove appmenu-gtk appmenu-gtk3 appmenu-qt
2.2.2. لقطات الشاشة المترجمة¶
إليك بعض التلميحات الإضافية لمن يريد إنشاء لقطات شاشة لدليل مستخدم مترجم:
يجب وضع الصور المترجمة في المجلد img/<your_language>/. استخدم اسم الملف نفسه الخاص بلقطة الشاشة الإنجليزية «الأصلية».
2.3. توثيق خوارزميات المعالجة¶
إذا أردت كتابة وثائق لخوارزميات المعالجة، فراعِ هذه الإرشادات:
ملفات المساعدة لخوارزميات المعالجة جزء من دليل مستخدم QGIS، لذا استخدم التنسيق نفسه المستخدم في دليل المستخدم وبقية الوثائق.
يجب وضع توثيق كل خوارزمية في مجلد المزوّد وملف المجموعة المقابلين، فمثلًا الخوارزمية Voronoi polygon تنتمي إلى المزوّد QGIS وإلى المجموعة vectorgeometry. لذا فالملف الصحيح لإضافة الوصف هو:
source/docs/user_manual/processing_algs/qgis/vectorgeometry.rst.ملاحظة
قبل البدء بكتابة الدليل، تحقق مما إذا كانت الخوارزمية موصوفة مسبقًا. في هذه الحالة يمكنك تحسين الوصف الموجود.
من المهم للغاية أن يكون لكل خوارزمية مرساة تقابل اسم المزوّد + الاسم الفريد للخوارزمية نفسها. يتيح هذا لزر المساعدة فتح صفحة المساعدة على القسم الصحيح. يجب وضع المرساة فوق العنوان، مثلًا (انظر أيضًا القسم التسميات/المراجع):
.. _qgisvoronoipolygons: Voronoi polygons ----------------
لمعرفة اسم الخوارزمية يكفي أن تمرّر مؤشر الفأرة فوق الخوارزمية في صندوق أدوات المعالجة.
اذكر إصدار QGIS الذي قُدّمت فيه الخوارزمية:
``Added in 3.44``وبالمثل، اذكر ما إذا كانت الخوارزمية تتطلب اعتمادية اختيارية محددة (وإصدارها).
.. attention:: Running this algorithm requires QGIS installed with <library> >= min_value (see :menuselection:`Help --> About` menu).
تجنب استخدام "This algorithm does this and that..." كجملة أولى في وصف الخوارزمية. حاول استخدام تعابير أعم مثل:
Takes a point layer and generates a polygon layer containing the...
تجنب وصف ما تفعله الخوارزمية بتكرار اسمها، ورجاءً لا تكرر اسم المعامل في وصف المعامل نفسه. على سبيل المثال، إذا كانت الخوارزمية
Voronoi polygonففكّر في وصفInput layerبـLayer to calculate the polygon from.اذكر في الوصف ما إذا كان للخوارزمية اختصار افتراضي في QGIS أو ما إذا كانت تدعم التحرير في المكان (in-place editing).
أضف صورًا! الصورة تساوي ألف كلمة! استخدم تنسيق
.pngواتبع الإرشادات العامة للوثائق (انظر القسم الأشكال والصور لمزيد من المعلومات). ضع ملف الصورة في المجلد الصحيح، أي المجلدimgبجوار ملف.rstالذي تحرره.عند الضرورة، أضف روابط في القسم "See also" توفر معلومات إضافية عن الخوارزمية (مثل المنشورات أو صفحات الويب). لا تُضف القسم "See also" إلا إذا كان هناك فعلًا ما يستحق الإشارة إليه. ومن الممارسات الجيدة ملء القسم "See also" بروابط إلى خوارزميات مشابهة.
قدّم شرحًا واضحًا لمعاملات الخوارزمية ومخرجاتها: استلهم من الخوارزميات الموجودة.
تجنب تكرار الوصف التفصيلي لخيارات الخوارزمية. أضف هذه المعلومات في وصف المعامل.
تجنب إضافة معلومات عن نوع الشكل الهندسي المتجهي في وصف الخوارزمية أو المعامل، لأن هذه المعلومات متاحة مسبقًا في أوصاف المعاملات.
أضف القيمة الافتراضية للمعامل، مثلًا:
* - **Number of points** - ``NUMBER_OF_POINTS`` - [numeric: integer] Default: 1 - Number of points to create
عند إضافة معامل أو قيمة لمعامل إلى خوارزمية موجودة مسبقًا، اذكر إصدار QGIS الذي قُدّم فيه. وإذا كان يتطلب مكتبة محددة، فاذكر أيضًا الحد الأدنى من متطلباتها.
صِف نوع المدخلات التي تدعمها المعاملات. تتوفر عدة أنواع يمكنك اختيار أحدها:
نوع المعامل/المخرج
وصف
المؤشر المرئي
طبقة متجهية نقطية
vector: pointطبقة متجهية خطية
vector: lineطبقة متجهية مضلعية
vector: polygonجميع الطبقات المتجهية المكانية
vector: geometryطبقة متجهية بلا أشكال هندسية
vector: tableطبقة متجهية عامة
vector: anyحقل متجهي رقمي
tablefield: numericحقل متجهي نصي
tablefield: stringحقل متجهي عام
tablefield: anyطبقة شبكية (رستر)
rasterنطاق شبكي
raster bandملف HTML
htmlتعبير
expressionشكل هندسي خطي
geometry: lineشكل هندسي نقطي
coordinatesالمدى
extentCRS
crsتعداد
enumerationقائمة
listقيمة عددية صحيحة
numeric: integerقيمة عشرية
numeric: doubleخيط
string
منطقية
booleanمسار مجلد
folderملف
fileالمصفوفة
matrixطبقة
layerنوع المخرج مماثل لنوع المدخل
same as inputDefinition
definitionطبقات الخريطة
layerlistالمدى
rangeAuthConfig
authconfigالشبكة المثلثية (mesh)
meshتخطيط
layoutعنصر تخطيط (LayoutItem)
layoutitemلون
colorمقياس الرسم
scaleسمة الخريطة
map themeادرس خوارزمية موجودة وموثقة جيدًا، وانسخ كل التنسيقات المفيدة.
عند الانتهاء، اتبع الإرشادات الموضحة في مساهمة خطوة بخطوة لإيداع تغييراتك وإنشاء طلب دمج (Pull Request)
إليك مثالًا على خوارزمية موجودة لمساعدتك في التنسيق والوصف:
.. _qgiscountpointsinpolygon:
Count points in polygon
-----------------------
Takes a point and a polygon layer and counts the number of points from the
point layer in each of the polygons of the polygon layer.
A new polygon layer is generated, with the exact same content as the input
polygon layer, but containing an additional field with the points count
corresponding to each polygon.
.. figure:: img/count_points_polygon.png
:align: center
The labels in the polygons show the point count
An optional weight field can be used to assign weights to each point.
Alternatively, a unique class field can be specified. If both options
are used, the weight field will take precedence and the unique class field
will be ignored.
``Default menu``: :menuselection:`Vector --> Analysis Tools`
Parameters
..........
.. list-table::
:header-rows: 1
:widths: 20 20 20 40
:class: longtable
* - Label
- Name
- Type
- Description
* - **Polygons**
- ``POLYGONS``
- [vector: polygon]
- Polygon layer whose features are associated with the count of
points they contain
* - **Points**
- ``POINTS``
- [vector: point]
- Point layer with features to count
* - **Weight field**
Optional
- ``WEIGHT``
- [tablefield: numeric]
- A field from the point layer.
The count generated will be the sum of the weight field of the
points contained by the polygon.
* - **Class field**
Optional
- ``CLASSFIELD``
- [tablefield: any]
- Points are classified based on the selected attribute and if
several points with the same attribute value are within the
polygon, only one of them is counted.
The final count of the points in a polygon is, therefore, the
count of different classes that are found in it.
* - **Count field name**
- ``FIELD``
- [string]
Default: 'NUMPOINTS'
- The name of the field to store the count of points
* - **Count**
- ``OUTPUT``
- [vector: polygon]
Default: [Create temporary layer]
- Specification of the output layer type (temporary, file,
GeoPackage or PostGIS table).
Encoding can also be specified.
Outputs
.......
.. list-table::
:header-rows: 1
:widths: 20 20 20 40
* - Label
- Name
- Type
- Description
* - **Count**
- ``OUTPUT``
- [vector: polygon]
- Resulting layer with the attribute table containing the
new column with the points count






