From dd74ee5345584db016a4ead44074f201efbd11b9 Mon Sep 17 00:00:00 2001 From: bruvzg <7645683+bruvzg@users.noreply.github.com> Date: Fri, 14 Jun 2024 11:51:30 +0300 Subject: [PATCH] Sync BBCode tutorial page with features added in 4.3. --- tutorials/ui/bbcode_in_richtextlabel.rst | 231 +++++++++++++++--- .../bbcode_in_richtextlabel_image_align.webp | Bin 0 -> 2950 bytes .../bbcode_in_richtextlabel_table_align.webp | Bin 0 -> 6126 bytes 3 files changed, 198 insertions(+), 33 deletions(-) create mode 100644 tutorials/ui/img/bbcode_in_richtextlabel_image_align.webp create mode 100644 tutorials/ui/img/bbcode_in_richtextlabel_table_align.webp diff --git a/tutorials/ui/bbcode_in_richtextlabel.rst b/tutorials/ui/bbcode_in_richtextlabel.rst index f8c2e82d3..5250e3352 100644 --- a/tutorials/ui/bbcode_in_richtextlabel.rst +++ b/tutorials/ui/bbcode_in_richtextlabel.rst @@ -256,6 +256,11 @@ Reference - ``[code]{text}[/code]`` + * - | **char** + | Adds Unicode character with hexadecimal UTF-32 ``{codepoint}``. + + - ``[char={codepoint}]`` + * - | **p** | Adds new paragraph with ``{text}``. Supports configuration options, see :ref:`doc_bbcode_in_richtextlabel_paragraph_options`. @@ -312,8 +317,9 @@ Reference the aspect ratio. | If both ``{width}`` and ``{height}`` are provided, the image will be scaled to that size. + | Add ``%`` to the end of ``{width}`` or ``{height}`` value to specify it as percentages of the control width instead of pixels. | If ``{valign}`` configuration is provided, the image will try to align to the - surrounding text, see :ref:`doc_bbcode_in_richtextlabel_image_alignment`. + surrounding text, see :ref:`doc_bbcode_in_richtextlabel_image_and_table_alignment`. | Supports configuration options, see :ref:`doc_bbcode_in_richtextlabel_image_options`. - | ``[img]{path}[/img]`` @@ -343,7 +349,7 @@ Reference Negative top and bottom margins are particularly useful to allow the rest of the paragraph to display below the dropcap. - - ``[dropcap font_size={size} color={color} margins={left},{top},{right},{bottom}]{text}[/dropcap]`` + - ``[dropcap font={font} font_size={size} color={color} outline_size={size} outline_color={color} margins={left},{top},{right},{bottom}]{text}[/dropcap]`` * - | **opentype_features** | Enables custom OpenType font features for ``{text}``. Features must be provided as @@ -398,8 +404,13 @@ Reference * - | **table** | Creates a table with the ``{number}`` of columns. Use the ``cell`` tag to define table cells. + | If ``{valign}`` configuration is provided, the table will try to align to the + surrounding text, see :ref:`doc_bbcode_in_richtextlabel_image_and_table_alignment`. + | If baseline alignment is used, the table is aligned to the baseline of the row with index ``{alignment_row}`` (zero-based). - - ``[table={number}]{cells}[/table]`` + - | ``[table={number}]{cells}[/table]`` + | ``[table={number},{valign}]{cells}[/table]`` + | ``[table={number},{valign},{alignment_row}]{cells}[/table]`` * - | **cell** | Adds a cell with ``{text}`` to the table. @@ -466,31 +477,44 @@ Paragraph options - **align** - +-----------+--------------------------------------------+ - | `Values` | ``left``, ``center``, ``right``, ``fill`` | - +-----------+--------------------------------------------+ - | `Default` | ``left`` | - +-----------+--------------------------------------------+ + +-----------+----------------------------------------------------------------------------------------+ + | `Values` | ``left`` (or ``l``), ``center`` (or ``c``), ``right`` (or ``r``), ``fill`` (or ``f``) | + +-----------+----------------------------------------------------------------------------------------+ + | `Default` | ``left`` | + +-----------+----------------------------------------------------------------------------------------+ Text horizontal alignment. - **bidi_override**, **st** - +-----------+---------------------------------------------------------------------------+ - | `Values` | ``default``, ``uri``, ``file``, ``email``, ``list``, ``none``, ``custom`` | - +-----------+---------------------------------------------------------------------------+ - | `Default` | ``default`` | - +-----------+---------------------------------------------------------------------------+ + +-----------+--------------------------------------------------------------------------------------------------------------+ + | `Values` | ``default`` (of ``d``), ``uri`` (or ``u``), ``file`` (or ``f``), ``email`` (or ``e``), ``list`` (or ``l``), | + | | ``none`` (or ``n``), ``custom`` (or ``c``) | + +-----------+--------------------------------------------------------------------------------------------------------------+ + | `Default` | ``default`` | + +-----------+--------------------------------------------------------------------------------------------------------------+ Structured text override. +- **justification_flags**, **jst** + + +-----------+--------------------------------------------------------------------------------------------------------+ + | `Values` | Comma-separated list of the following values: | + | | ``kashida`` (or ``k``), ``word`` (or ``w``), ``trim`` (or ``tr``), ``after_last_tab`` (or ``lt``), | + | | ``skip_last`` (or ``sl``), ``skip_last_with_chars`` (or ``sv``), ``do_not_skip_single`` (or ``ns``). | + +-----------+--------------------------------------------------------------------------------------------------------+ + | `Default` | ``word,kashida,skip_last,do_not_skip_single`` | + +-----------+--------------------------------------------------------------------------------------------------------+ + + Justification (fill alignment) option. See :ref:`class_TextServer` for more details. + - **direction**, **dir** - +-----------+--------------------------------------------+ - | `Values` | ``ltr``, ``rtl``, ``auto`` | - +-----------+--------------------------------------------+ - | `Default` | Inherit | - +-----------+--------------------------------------------+ + +-----------+-----------------------------------------------------------------+ + | `Values` | ``ltr`` (or ``l``), ``rtl`` (or ``r``), ``auto`` (or ``a``) | + +-----------+-----------------------------------------------------------------+ + | `Default` | Inherit | + +-----------+-----------------------------------------------------------------+ Base BiDi direction. @@ -566,22 +590,22 @@ Image options - **height** +-----------+--------------------------------------------+ - | `Values` | Number in pixels | + | `Values` | Integer number | +-----------+--------------------------------------------+ | `Default` | Inherit | +-----------+--------------------------------------------+ - Target height of the image. + Target height of the image in pixels, add ``%`` to the end of value to specify it as percentages of the control width instead of pixels. - **width** +-----------+--------------------------------------------+ - | `Values` | Number in pixels | + | `Values` | Integer number | +-----------+--------------------------------------------+ | `Default` | Inherit | +-----------+--------------------------------------------+ - Target width of the image. + Target width of the image, add ``%`` to the end of value to specify it as percentages of the control width instead of pixels. - **region** @@ -593,24 +617,54 @@ Image options Region rect of the image. This can be used to display a single image from a spritesheet. -.. _doc_bbcode_in_richtextlabel_image_alignment: +- **pad** -Image vertical alignment -~~~~~~~~~~~~~~~~~~~~~~~~ + +-----------+--------------------------------------------+ + | `Values` | ``false``, ``true`` | + +-----------+--------------------------------------------+ + | `Default` | ``false`` | + +-----------+--------------------------------------------+ -When a vertical alignment value is provided with the ``[img]`` tag the image -will try to align itself against the surrounding text. Alignment is performed -using a vertical point of the image and a vertical point of the text. There are -3 possible points on the image (``top``, ``center``, and ``bottom``) and 4 -possible points on the text (``top``, ``center``, ``baseline``, and ``bottom``), + If set to ``true``, and the image is smaller than the size specified by ``width`` and ``height``, the image padding is added to match the size instead of upscaling. + +- **tootip** + + +-----------+--------------------------------------------+ + | `Values` | String | + +-----------+--------------------------------------------+ + | `Default` | | + +-----------+--------------------------------------------+ + + Image tooltip. + +.. _doc_bbcode_in_richtextlabel_image_and_table_alignment: + +Image and table vertical alignment +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +When a vertical alignment value is provided with the ``[img]`` or ``[table]``` tag +the image/table will try to align itself against the surrounding text. Alignment is +performed using a vertical point of the image and a vertical point of the text. +There are 3 possible points on the image (``top``, ``center``, and ``bottom``) and 4 +possible points on the text and table (``top``, ``center``, ``baseline``, and ``bottom``), which can be used in any combination. -To specify both points, use their full or short names as a value of the image tag: +To specify both points, use their full or short names as a value of the image/table tag: .. code-block:: none - [img=top,bottom] - [img=center,center] + text [img=top,bottom]...[/img] text + text [img=center,center]...[/img] text + +.. image:: img/bbcode_in_richtextlabel_image_align.webp + +.. code-block:: none + + text [table=3,center]...[/table] text # Center to center. + text [table=3,top,bottom]...[/table] text # Top of the table to the bottom of text. + text [table=3,baseline,baseline,1]...[/table] text # Baseline of the second row (rows use zero-based indexing) to the baseline of text. + +.. image:: img/bbcode_in_richtextlabel_table_align.webp You can also specify just one value (``top``, ``center``, or ``bottom``) to make use of a corresponding preset (``top-top``, ``center-center``, and ``bottom-bottom`` @@ -645,6 +699,107 @@ Font options Custom font size. +- **glyph_spacing**, **gl** + + +-----------+--------------------------------------------+ + | `Values` | Number in pixels. | + +-----------+--------------------------------------------+ + | `Default` | Inherit | + +-----------+--------------------------------------------+ + + Extra spacing for each glyph. + +- **glyph_spacing**, **sp** + + +-----------+--------------------------------------------+ + | `Values` | Number in pixels. | + +-----------+--------------------------------------------+ + | `Default` | Inherit | + +-----------+--------------------------------------------+ + + Extra spacing for the space character. + +- **top_spacing**, **top** + + +-----------+--------------------------------------------+ + | `Values` | Number in pixels. | + +-----------+--------------------------------------------+ + | `Default` | Inherit | + +-----------+--------------------------------------------+ + + Extra spacing at the top of the line. + +- **bottom_spacing**, **bt** + + +-----------+--------------------------------------------+ + | `Values` | Number in pixels. | + +-----------+--------------------------------------------+ + | `Default` | Inherit | + +-----------+--------------------------------------------+ + + Extra spacing at the bottom of the line. + +- **embolden**, **emb** + + +-----------+--------------------------------------------+ + | `Values` | Floating-point number. | + +-----------+--------------------------------------------+ + | `Default` | ``0.0`` | + +-----------+--------------------------------------------+ + + Font embolden strength, if it is not equal to zero, emboldens the font outlines. Negative values reduce the outline thickness. + +- **face_index**, **fi** + + +-----------+--------------------------------------------+ + | `Values` | Integer number. | + +-----------+--------------------------------------------+ + | `Default` | ``0`` | + +-----------+--------------------------------------------+ + + An active face index in the TrueType / OpenType collection. + +- **slant**, **sln** + + +-----------+--------------------------------------------+ + | `Values` | Floating-point number. | + +-----------+--------------------------------------------+ + | `Default` | ``0.0`` | + +-----------+--------------------------------------------+ + + Font slant strength, positive values slant glyphs to the right. Negative values to the left. + +- **opentype_variation**, **otv** + + +-----------+------------------------------------------------------+ + | `Values` | Comma-separated list of the OpenType variation tags. | + +-----------+------------------------------------------------------+ + | `Default` | | + +-----------+------------------------------------------------------+ + + Font OpenType variation coordinates. See `OpenType variation tags `__. + + Note: The value should be enclosed in ``"`` to allow using ``=`` inside it: + +.. code-block:: none + + [font otv="wght=200,wdth=400"] # Sets variable font weight and width. + +- **opentype_features**, **otf** + + +-----------+----------------------------------------------------+ + | `Values` | Comma-separated list of the OpenType feature tags. | + +-----------+----------------------------------------------------+ + | `Default` | | + +-----------+----------------------------------------------------+ + + Font OpenType features. See `OpenType features tags `__. + + Note: The value should be enclosed in ``"`` to allow using ``=`` inside it: + +.. code-block:: none + + [font otf="calt=0,zero=1"] # Disable contextual alternates, enable slashed zero. .. _doc_bbcode_in_richtextlabel_named_colors: @@ -707,6 +862,16 @@ Cell options Cell background color. For alternating odd/even row backgrounds, you can use ``bg=odd_color,even_color``. +- **padding** + + +-----------+--------------------------------------------+ + | `Values` | 4 comma-separated floating-point numbers | + +-----------+--------------------------------------------+ + | `Default` | 0, 0, 0, 0 | + +-----------+--------------------------------------------+ + + Left, top, right, and bottom cell padding. + .. _doc_bbcode_in_richtextlabel_unordered_list_bullet: Unordered list bullet diff --git a/tutorials/ui/img/bbcode_in_richtextlabel_image_align.webp b/tutorials/ui/img/bbcode_in_richtextlabel_image_align.webp new file mode 100644 index 0000000000000000000000000000000000000000..dc35c1382d26d67dc34f08cc7db2d0e6ca053cf7 GIT binary patch literal 2950 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 IBe{XU0Ol<0tN;K2 literal 0 HcmV?d00001 diff --git a/tutorials/ui/img/bbcode_in_richtextlabel_table_align.webp b/tutorials/ui/img/bbcode_in_richtextlabel_table_align.webp new file mode 100644 index 0000000000000000000000000000000000000000..a42e811ae8103c5addd310c066fb7b953199cf7b GIT binary patch literal 6126 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 literal 0 HcmV?d00001