calibre - en to ar translation catalogue (64 entries)

en: Function mode for Search & replace in the Editor
ar: وضع الدالة للبحث والاستبدال في المحرر

en: The :guilabel:`Search & replace` tool in the editor support a *function mode*. In this mode, you can combine regular expressions (see :doc:`regexp`) with arbitrarily powerful Python functions to do all sorts of advanced text processing.
ar: تدعم أداة :guilabel:`البحث والاستبدال` في المحرر *وضع الدالة*. في هذا الوضع، يمكنك دمج التعبيرات العادية (راجع :doc:`regexp`) مع دوال بايثون قوية بشكل تعسفي للقيام بجميع أنواع معالجة النصوص المتقدمة.

en: In the standard *regexp* mode for search and replace, you specify both a regular expression to search for as well as a template that is used to replace all found matches. In function mode, instead of using a fixed template, you specify an arbitrary function, in the `Python programming language <https://docs.python.org>`_. This allows you to do lots of things that are not possible with simple templates.
ar: في وضع *regexp* القياسي للبحث والاستبدال، تحدد تعبيرًا عاديًا للبحث عنه بالإضافة إلى قالب يستخدم لاستبدال جميع التطابقات التي تم العثور عليها. في وضع الدالة، بدلاً من استخدام قالب ثابت، تحدد دالة عشوائية، بلغة `برمجة بايثون <https://docs.python.org>`_. يتيح لك هذا القيام بالعديد من الأشياء التي لا يمكن القيام بها باستخدام القوالب البسيطة.

en: Techniques for using function mode and the syntax will be described by means of examples, showing you how to create functions to perform progressively more complex tasks.
ar: سيتم وصف تقنيات استخدام وضع الدالة وبناء الجملة عن طريق الأمثلة، مما يوضح لك كيفية إنشاء دوال لأداء مهام أكثر تعقيدًا بشكل تدريجي.

en: The Function mode
ar: وضع الدالة

en: Automatically fixing the case of headings in the document
ar: تصحيح حالة أحرف العناوين تلقائيًا في المستند

en: Here, we will leverage one of the builtin functions in the editor to automatically change the case of all text inside heading tags to title case::
ar: هنا، سنستفيد من إحدى الدوال المدمجة في المحرر لـ تغيير حالة جميع النصوص داخل علامات العناوين تلقائيًا إلى حالة العنوان::

en: For the function, simply choose the :guilabel:`Title-case text (ignore tags)` builtin function. The will change titles that look like: ``<h1>some titLE</h1>`` to ``<h1>Some Title</h1>``. It will work even if there are other HTML tags inside the heading tags.
ar: بالنسبة للدالة، ما عليك سوى اختيار دالة :guilabel:`نص بحالة العنوان (تجاهل العلامات)` المدمجة. ستغير العناوين التي تبدو كـ: ``<h1>some titLE</h1>`` إلى ``<h1>Some Title</h1>``. ستعمل حتى لو كانت هناك علامات HTML أخرى داخل علامات العناوين.

en: Your first custom function - smartening hyphens
ar: دالتك المخصصة الأولى - تحسين الواصلات

en: The real power of function mode comes from being able to create your own functions to process text in arbitrary ways. The Smarten Punctuation tool in the editor leaves individual hyphens alone, so you can use the this function to replace them with em-dashes.
ar: تأتي القوة الحقيقية لوضع الدالة من القدرة على إنشاء دوال خاصة بك لمعالجة النص بطرق عشوائية. أداة تحسين علامات الترقيم في المحرر تترك الواصلات الفردية كما هي، لذا يمكنك استخدام هذه الدالة لاستبدالها بشرطات طويلة (em-dashes).

en: To create a new function, simply click the :guilabel:`Create/edit` button to create a new function and copy the Python code from below.
ar: لإنشاء دالة جديدة، ما عليك سوى النقر على زر :guilabel:`إنشاء/تحرير` لـ إنشاء دالة جديدة ونسخ كود بايثون من أدناه.

en: Every :guilabel:`Search & replace` custom function must have a unique name and consist of a Python function named replace, that accepts all the arguments shown above. For the moment, we won't worry about all the different arguments to ``replace()`` function. Just focus on the ``match`` argument. It represents a match when running a search and replace. Its full documentation in available `here <https://docs.python.org/library/re.html#match-objects>`_. ``match.group()`` simply returns all the matched text and all we do is replace hyphens in that text with em-dashes, first replacing double hyphens and then single hyphens.
ar: يجب أن يكون لكل دالة مخصصة لـ :guilabel:`البحث والاستبدال` اسم فريد وتتكون من دالة بايثون تسمى replace، تقبل جميع الوسائط الموضحة أعلاه. في الوقت الحالي، لن نقلق بشأن جميع الوسائط المختلفة لدالة ``replace()``. ركز فقط على وسيطة ``match``. إنها تمثل تطابقًا عند تشغيل بحث واستبدال. وثائقها الكاملة متاحة `هنا <https://docs.python.org/library/re.html#match-objects>`_. ``match.group()`` ببساطة يعيد جميع النصوص المطابقة وكل ما نفعله هو استبدال الواصلات في ذلك النص بشرطات طويلة (em-dashes)، أولاً استبدال الواصلات المزدوجة ثم الواصلات الفردية.

en: Use this function with the find regular expression::
ar: استخدم هذه الدالة مع التعبير العادي للبحث::

en: And it will replace all hyphens with em-dashes, but only in actual text and not inside HTML tag definitions.
ar: وسوف تستبدل جميع الواصلات بشرطات طويلة (em-dashes)، ولكن فقط في النص الفعلي وليس داخل تعريفات علامات HTML.

en: The power of function mode - using a spelling dictionary to fix mis-hyphenated words
ar: قوة وضع الدالة - استخدام قاموس إملائي لإصلاح الكلمات ذات الواصلات الخاطئة

en: Often, e-books created from scans of printed books contain mis-hyphenated words -- words that were split at the end of the line on the printed page. We will write a simple function to automatically find and fix such words.
ar: غالبًا ما تحتوي الكتب الإلكترونية التي تم إنشاؤها من مسح الكتب المطبوعة على كلمات ذات واصلات خاطئة -- كلمات تم تقسيمها في نهاية السطر على الصفحة المطبوعة. سنكتب دالة بسيطة للعثور على هذه الكلمات وإصلاحها تلقائيًا.

en: Use this function with the same find expression as before, namely::
ar: استخدم هذه الدالة مع نفس تعبير البحث السابق، وهو::

en: And it will magically fix all mis-hyphenated words in the text of the book. The main trick is to use one of the useful extra arguments to the replace function, ``dictionaries``.  This refers to the dictionaries the editor itself uses to spell check text in the book. What this function does is look for words separated by a hyphen, remove the hyphen and check if the dictionary recognizes the composite word, if it does, the original words are replaced by the hyphen free composite word.
ar: وسوف تقوم بتصحيح جميع الكلمات ذات الواصلات الخاطئة في نص الكتاب بطريقة سحرية. الخدعة الرئيسية هي استخدام إحدى الوسائط الإضافية المفيدة لدالة الاستبدال، ``dictionaries``. يشير هذا إلى القواميس التي يستخدمها المحرر نفسه للتحقق الإملائي للنص في الكتاب. ما تفعله هذه الدالة هو البحث عن الكلمات المفصولة بواصلة، وإزالة الواصلة والتحقق مما إذا كان القاموس يتعرف على الكلمة المركبة، إذا كان الأمر كذلك، يتم استبدال الكلمات الأصلية بالكلمة المركبة الخالية من الواصلة.

en: Note that one limitation of this technique is it will only work for mono-lingual books, because, by default, ``dictionaries.recognized()`` uses the main language of the book.
ar: لاحظ أن أحد قيود هذه التقنية هو أنها ستعمل فقط مع الكتب أحادية اللغة، لأنه، افتراضيًا، تستخدم ``dictionaries.recognized()`` اللغة الرئيسية للكتاب.

en: Auto numbering sections
ar: ترقيم الأقسام تلقائيًا

en: Now we will see something a little different. Suppose your HTML file has many sections, each with a heading in an :code:`<h2>` tag that looks like :code:`<h2>Some text</h2>`. You can create a custom function that will automatically number these headings with consecutive section numbers, so that they look like :code:`<h2>1. Some text</h2>`.
ar: الآن سنرى شيئًا مختلفًا قليلاً. لنفترض أن ملف HTML الخاص بك يحتوي على العديد من الأقسام، كل منها يحتوي على عنوان في علامة :code:`<h2>` تبدو كـ :code:`<h2>Some text</h2>`. يمكنك إنشاء دالة مخصصة ستقوم بترقيم هذه العناوين تلقائيًا بأرقام أقسام متتالية، بحيث تبدو كـ :code:`<h2>1. Some text</h2>`.

en: Use it with the find expression::
ar: استخدمها مع تعبير البحث::

en: Place the cursor at the top of the file and click :guilabel:`Replace all`.
ar: ضع المؤشر في أعلى الملف وانقر على :guilabel:`استبدال الكل`.

en: This function uses another of the useful extra arguments to ``replace()``: the ``number`` argument. When doing a :guilabel:`Replace All` number is automatically incremented for every successive match.
ar: تستخدم هذه الدالة وسيطة إضافية مفيدة أخرى لدالة ``replace()``: الوسيطة ``number``. عند إجراء :guilabel:`استبدال الكل`، يتم زيادة الرقم تلقائيًا لكل تطابق متتالي. التطابق الأول يحمل الرقم 1.

en: Another new feature is the use of ``replace.file_order`` -- setting that to ``'spine'`` means that if this search is run on multiple HTML files, the files are processed in the order in which they appear in the book. See :ref:`file_order_replace_all` for details.
ar: ميزة جديدة أخرى هي استخدام ``replace.file_order`` -- تعيينها إلى ``'spine'`` يعني أنه إذا تم تشغيل هذا البحث على ملفات HTML متعددة، فإن الملفات تتم معالجتها بالترتيب الذي تظهر به في الكتاب. راجع :ref:`file_order_replace_all` للحصول على التفاصيل.

en: Auto create a Table of Contents
ar: إنشاء جدول محتويات تلقائيًا

en: Finally, lets try something a little more ambitious. Suppose your book has headings in ``h1`` and ``h2`` tags that look like ``<h1 id="someid">Some Text</h1>``. We will auto-generate an HTML Table of Contents based on these headings. Create the custom function below:
ar: أخيرًا، دعنا نجرب شيئًا أكثر طموحًا. لنفترض أن كتابك يحتوي على عناوين في علامات ``h1`` و ``h2`` تبدو كـ ``<h1 id="someid">Some Text</h1>``. سنقوم بإنشاء جدول محتويات HTML تلقائيًا بناءً على هذه العناوين. أنشئ الدالة المخصصة أدناه:

en: And use it with the find expression::
ar: واستخدمها مع تعبير البحث::

en: Run the search on :guilabel:`All text files` and at the end of the search, a window will popup with "Debug output from your function" which will have the HTML Table of Contents, ready to be pasted into :file:`toc.html`.
ar: قم بتشغيل البحث على :guilabel:`جميع الملفات النصية` وفي نهاية البحث، ستظهر نافذة منبثقة بعنوان "إخراج تصحيح الأخطاء من دالتك" والتي ستحتوي على جدول محتويات HTML، جاهز للصق في :file:`toc.html`.

en: The function above is heavily commented, so it should be easy to follow. The key new feature is the use of another useful extra argument to the ``replace()`` function, the ``data`` object. The ``data`` object is a Python *dictionary* that persists between all successive invocations of ``replace()`` during a single :guilabel:`Replace All` operation.
ar: الدالة أعلاه مشروحة بشكل مكثف، لذا يجب أن يكون من السهل متابعتها. الميزة الجديدة الرئيسية هي استخدام وسيطة إضافية مفيدة أخرى لدالة ``replace()``، وهي كائن ``data``. كائن ``data`` هو *قاموس* بايثون يستمر بين جميع الاستدعاءات المتتالية لـ ``replace()`` أثناء عملية :guilabel:`استبدال الكل` الواحدة.

en: Another new feature is the use of ``call_after_last_match`` -- setting that to ``True`` on the ``replace()`` function means that the editor will call ``replace()`` one extra time after all matches have been found. For this extra call, the match object will be ``None``.
ar: ميزة جديدة أخرى هي استخدام ``call_after_last_match`` -- تعيين هذا إلى ``True`` في دالة ``replace()`` يعني أن المحرر سيستدعي ``replace()`` مرة إضافية بعد العثور على جميع التطابقات. لهذا الاستدعاء الإضافي، سيكون كائن المطابقة ``None``.

en: This was just a demonstration to show you the power of function mode, if you really needed to generate a Table of Contents from headings in your book, you would be better off using the dedicated Table of Contents tool in :guilabel:`Tools->Table of Contents`.
ar: كان هذا مجرد عرض توضيحي لإظهار قوة وضع الدالة، إذا كنت تحتاج حقًا إلى إنشاء جدول محتويات من العناوين في كتابك، فمن الأفضل استخدام أداة جدول المحتويات المخصصة في :guilabel:`أدوات->جدول المحتويات`.

en: The API for the function mode
ar: واجهة برمجة تطبيقات وضع الدالة

en: All function mode functions must be Python functions named replace, with the following signature::
ar: يجب أن تكون جميع دوال وضع الدالة دوال بايثون تسمى replace، مع التوقيع التالي::

en: When a find/replace is run, for every match that is found, the ``replace()`` function will be called, it must return the replacement string for that match. If no replacements are to be done, it should return ``match.group()`` which is the original string. The various arguments to the ``replace()`` function are documented below.
ar: عند تشغيل بحث/استبدال، لكل تطابق يتم العثور عليه، سيتم استدعاء دالة ``replace()``، ويجب أن تعيد سلسلة الاستبدال لذلك التطابق. إذا لم يتم إجراء أي استبدالات، يجب أن تعيد ``match.group()`` وهي السلسلة الأصلية. يتم توثيق الوسائط المختلفة لدالة ``replace()`` أدناه.

en: The ``match`` argument
ar: وسيطة ``match``

en: The ``match`` argument represents the currently found match. It is a `Python Match object <https://docs.python.org/library/re.html#match-objects>`_. Its most useful method is ``group()`` which can be used to get the matched text corresponding to individual capture groups in the search regular expression.
ar: تمثل وسيطة ``match`` التطابق الذي تم العثور عليه حاليًا. إنها `كائن مطابقة بايثون <https://docs.python.org/library/re.html#match-objects>`_. أكثر طرقها فائدة هي ``group()`` التي يمكن استخدامها للحصول على النص المطابق للمجموعات الفردية التي تم التقاطها في تعبير البحث العادي.

en: The ``number`` argument
ar: وسيطة ``number``

en: The ``number`` argument is the number of the current match. When you run :guilabel:`Replace All`, every successive match will cause ``replace()`` to be called with an increasing number. The first match has number 1.
ar: وسيطة ``number`` هي رقم التطابق الحالي. عند تشغيل :guilabel:`استبدال الكل`، سيؤدي كل تطابق متتالي إلى استدعاء ``replace()`` برقم متزايد. التطابق الأول يحمل الرقم 1.

en: The ``file_name`` argument
ar: وسيطة ``file_name``

en: This is the filename of the file in which the current match was found. When searching inside marked text, the ``file_name`` is empty. The ``file_name`` is in canonical form, a path relative to the root of the book, using ``/`` as the path separator.
ar: هذا هو اسم الملف الذي تم العثور على التطابق الحالي فيه. عند البحث داخل النص المحدد، يكون ``file_name`` فارغًا. يكون ``file_name`` في شكل قانوني، وهو مسار نسبي لجذر الكتاب، باستخدام ``/`` كفاصل للمسار.

en: The ``metadata`` argument
ar: وسيطة ``metadata``

en: This represents the metadata of the current book, such as title, authors, language, etc. It is an object of class :class:`calibre.ebooks.metadata.book.base.Metadata`. Useful attributes include, ``title``, ``authors`` (a list of authors) and ``language`` (the language code).
ar: يمثل هذا البيانات الوصفية للكتاب الحالي، مثل العنوان، المؤلفين، اللغة، إلخ. وهو كائن من الفئة :class:`calibre.ebooks.metadata.book.base.Metadata`. تتضمن السمات المفيدة ``title``، ``authors`` (قائمة من المؤلفين) و ``language`` (رمز اللغة).

en: The ``dictionaries`` argument
ar: وسيطة ``dictionaries``

en: This represents the collection of dictionaries used for spell checking the current book. Its most useful method is ``dictionaries.recognized(word)`` which will return ``True`` if the passed in word is recognized by the dictionary for the current book's language.
ar: يمثل هذا مجموعة القواميس المستخدمة للتدقيق الإملائي في الكتاب الحالي. أكثر طرقه فائدة هي ``dictionaries.recognized(word)`` التي ستعيد ``True`` إذا تم التعرف على الكلمة الممررة بواسطة القاموس الخاص بلغة الكتاب الحالي.

en: The ``data`` argument
ar: وسيطة ``data``

en: This a simple Python ``dictionary``. When you run :guilabel:`Replace all`, every successive match will cause ``replace()`` to be called with the same ``dictionary`` as data. You can thus use it to store arbitrary data between invocations of ``replace()`` during a :guilabel:`Replace all` operation.
ar: هذا قاموس بايثون بسيط. عندما تقوم بتشغيل :guilabel:`استبدال الكل`، كل تطابق متتالي سيؤدي إلى استدعاء ``replace()`` بنفس ``dictionary`` كبيانات. وبالتالي يمكنك استخدامه لتخزين بيانات عشوائية بين استدعاءات ``replace()`` أثناء عملية :guilabel:`استبدال الكل`.

en: The ``functions`` argument
ar: وسيطة ``functions``

en: The ``functions`` argument gives you access to all other user defined functions. This is useful for code re-use. You can define utility functions in one place and re-use them in all your other functions. For example, suppose you create a function name ``My Function`` like this:
ar: تمنحك وسيطة ``functions`` إمكانية الوصول إلى جميع الدوال الأخرى المعرفة من قبل المستخدم. هذا مفيد لإعادة استخدام الكود. يمكنك تعريف دوال مساعدة في مكان واحد وإعادة استخدامها في جميع الدوال الأخرى. على سبيل المثال، لنفترض أنك أنشأت دالة باسم ``My Function`` كالتالي:

en: Then, in another function, you can access the ``utility()`` function like this:
ar: ثم، في دالة أخرى، يمكنك الوصول إلى دالة ``utility()`` كالتالي:

en: You can also use the functions object to store persistent data, that can be re-used by other functions. For example, you could have one function that when run with :guilabel:`Replace All` collects some data and another function that uses it when it is run afterwards. Consider the following two functions:
ar: يمكنك أيضًا استخدام كائن الدوال لتخزين بيانات مستمرة، يمكن إعادة استخدامها بواسطة دوال أخرى. على سبيل المثال، يمكنك أن يكون لديك دالة عند تشغيلها مع :guilabel:`استبدال الكل` تجمع بعض البيانات ودالة أخرى تستخدمها عند تشغيلها لاحقًا. ضع في اعتبارك الدالتين التاليتين:

en: Debugging your functions
ar: تصحيح أخطاء الدوال الخاصة بك

en: You can debug the functions you create by using the standard ``print()`` function from Python. The output of print will be displayed in a popup window after the Find/replace has completed. You saw an example of using ``print()`` to output an entire table of contents above.
ar: يمكنك تصحيح أخطاء الدوال التي تنشئها باستخدام دالة ``print()`` القياسية من بايثون. سيتم عرض إخراج الطباعة في نافذة منبثقة بعد اكتمال البحث/الاستبدال. لقد رأيت مثالاً على استخدام ``print()`` لإخراج جدول محتويات كامل أعلاه.

en: Choose file order when running on multiple HTML files
ar: اختر ترتيب الملفات عند التشغيل على ملفات HTML متعددة

en: When you run a :guilabel:`Replace all` on multiple HTML files, the order in which the files are processes depends on what files you have open for editing. You can force the search to process files in the order in which the appear by setting the ``file_order`` attribute on your function, like this:
ar: عند تشغيل :guilabel:`استبدال الكل` على ملفات HTML متعددة، فإن الترتيب الذي تتم به معالجة الملفات يعتمد على الملفات التي فتحتها للتحرير. يمكنك إجبار البحث على معالجة الملفات بالترتيب الذي تظهر به عن طريق تعيين السمة ``file_order`` على دالتك، كالتالي:

en: ``file_order`` accepts two values, ``spine`` and ``spine-reverse`` which cause the search to process multiple files in the order they appear in the book, either forwards or backwards, respectively.
ar: تقبل ``file_order`` قيمتين، ``spine`` و ``spine-reverse`` مما يتسبب في معالجة البحث لملفات متعددة بالترتيب الذي تظهر به في الكتاب، إما للأمام أو للخلف، على التوالي.

en: Having your function called an extra time after the last match is found
ar: استدعاء دالتك مرة إضافية بعد العثور على آخر تطابق

en: Sometimes, as in the auto generate table of contents example above, it is useful to have your function called an extra time after the last match is found. You can do this by setting the ``call_after_last_match`` attribute on your function, like this:
ar: أحيانًا، كما هو الحال في مثال إنشاء جدول المحتويات التلقائي أعلاه، يكون من المفيد استدعاء دالتك مرة إضافية بعد العثور على آخر تطابق. يمكنك القيام بذلك عن طريق تعيين السمة ``call_after_last_match`` على دالتك، كالتالي:

en: Appending the output from the function to marked text
ar: إلحاق الإخراج من الدالة بالنص المحدد

en: When running search and replace on marked text, it is sometimes useful to append so text to the end of the marked text. You can do that by setting the ``append_final_output_to_marked`` attribute on your function (note that you also need to set ``call_after_last_match``), like this:
ar: عند تشغيل البحث والاستبدال على نص محدد، يكون من المفيد أحيانًا إلحاق نص إلى نهاية النص المحدد. يمكنك القيام بذلك عن طريق تعيين السمة ``append_final_output_to_marked`` على دالتك (لاحظ أنك تحتاج أيضًا إلى تعيين ``call_after_last_match``)، كالتالي:

en: Suppressing the result dialog when performing searches on marked text
ar: إخفاء مربع حوار النتائج عند إجراء عمليات بحث على نص محدد

en: You can also suppress the result dialog (which can slow down the repeated application of a search/replace on many blocks of text) by setting the ``suppress_result_dialog`` attribute on your function, like this:
ar: يمكنك أيضًا إخفاء مربع حوار النتائج (الذي يمكن أن يبطئ التطبيق المتكرر للبحث/الاستبدال على العديد من كتل النص) عن طريق تعيين السمة ``suppress_result_dialog`` على دالتك، كالتالي:

en: More examples
ar: المزيد من الأمثلة

en: More useful examples, contributed by calibre users, can be found in the `calibre E-book editor forum <https://www.mobileread.com/forums/showthread.php?t=237181>`_.
ar: يمكن العثور على المزيد من الأمثلة المفيدة، التي ساهم بها مستخدمو calibre، في `منتدى محرر الكتب الإلكترونية في calibre <https://www.mobileread.com/forums/showthread.php?t=237181>`_.
