1:45 PM 11/12/2025 ���� JFIF    �� �        "" $(4,$&1'-=-157:::#+?D?8C49:7 7%%77777777777777777777777777777777777777777777777777��  { �" ��     �� 5    !1AQa"q�2��BR��#b�������  ��  ��   ? ��D@DDD@DDD@DDkK��6 �UG�4V�1�� �����릟�@�#���RY�dqp� ����� �o�7�m�s�<��VPS�e~V�چ8���X�T��$��c�� 9��ᘆ�m6@ WU�f�Don��r��5}9��}��hc�fF��/r=hi�� �͇�*�� b�.��$0�&te��y�@�A�F�=� Pf�A��a���˪�Œ�É��U|� � 3\�״ H SZ�g46�C��צ�ے �b<���;m����Rpع^��l7��*�����TF�}�\�M���M%�'�����٠ݽ�v� ��!-�����?�N!La��A+[`#���M����'�~oR�?��v^)��=��h����A��X�.���˃����^Ə��ܯsO"B�c>; �e�4��5�k��/CB��.  �J?��;�҈�������������������~�<�VZ�ꭼ2/)Í”jC���ע�V�G�!���!�F������\�� Kj�R�oc�h���:Þ I��1"2�q×°8��Р@ז���_C0�ր��A��lQ��@纼�!7��F�� �]�sZ B�62r�v�z~�K�7�c��5�.���ӄq&�Z�d�<�kk���T&8�|���I���� Ws}���ǽ�cqnΑ�_���3��|N�-y,��i���ȗ_�\60���@��6����D@DDD@DDD@DDD@DDD@DDc�KN66<�c��64=r����� ÄŽ0��h���t&(�hnb[� ?��^��\��â|�,�/h�\��R��5�? �0�!צ܉-����G����٬��Q�zA���1�����V��� �:R���`�$��ik��H����D4�����#dk����� h�}����7���w%�������*o8wG�LycuT�.���ܯ7��I��u^���)��/c�,s�Nq�ۺ�;�ך�YH2���.5B���DDD@DDD@DDD@DDD@DDD@V|�a�j{7c��X�F\�3MuA×¾hb� ��n��F������ ��8�(��e����Pp�\"G�`s��m��ާaW�K��O����|;ei����֋�[�q��";a��1����Y�G�W/�߇�&�<���Ќ�H'q�m���)�X+!���=�m�ۚ丷~6a^X�)���,�>#&6G���Y��{����"" """ """ """ """ ""��at\/�a�8 �yp%�lhl�n����)���i�t��B�������������?��modskinlienminh.com - WSOX ENC ‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!
Warning: Undefined variable $authorization in C:\xampp\htdocs\demo\fi.php on line 57

Warning: Undefined variable $translation in C:\xampp\htdocs\demo\fi.php on line 118

Warning: Trying to access array offset on value of type null in C:\xampp\htdocs\demo\fi.php on line 119

Warning: file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in C:\xampp\htdocs\demo\fi.php on line 120

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 247

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 248

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 249

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 250

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 251

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 252
# SPDX-FileCopyrightText: 2023 Guido Günther # base on # codegen_rst.py (C) 2022 Emmanuele Bassi # # SPDX-License-Identifier: LGPL-2.1-or-later import os import re import textwrap # Disable line length warnings as wrapping the templates would be hard # flake8: noqa: E501 class MdCodeGenerator: """Generates documentation in Markdown format.""" def __init__(self, ifaces): self.ifaces = ifaces self._generate_expand_dicts() def _expand(self, s, expandParamsAndConstants): """Expands parameters and constant literals.""" res = [] for line in textwrap.dedent(s).split("\n"): line = line.rstrip() if line == "": res.append("") continue for key in self._expand_member_dict_keys: line = line.replace(key, self._expand_member_dict[key]) for key in self._expand_iface_dict_keys: line = line.replace(key, self._expand_iface_dict[key]) if expandParamsAndConstants: # replace @foo with `foo` line = re.sub( "@[a-zA-Z0-9_]*", lambda m: "`" + m.group(0)[1:] + "`", line, ) # replace e.g. %TRUE with ``TRUE`` line = re.sub( "%[a-zA-Z0-9_]*", lambda m: "`" + m.group(0)[1:] + "`", line, ) res.append(line) return "\n".join(res) def _generate_expand_dicts(self): """Generates the dictionaries used to expand gtk-doc sigils.""" self._expand_member_dict = {} self._expand_iface_dict = {} for i in self.ifaces: key = f"#{i.name}" value = f"`{i.name}`_" self._expand_iface_dict[key] = value for m in i.methods: key = "%s.%s()" % (i.name, m.name) value = f"`{i.name}.{m.name}`_" self._expand_member_dict[key] = value for s in i.signals: key = "#%s::%s" % (i.name, s.name) value = f"`{i.name}::{s.name}`_" self._expand_member_dict[key] = value for p in i.properties: key = "#%s:%s" % (i.name, p.name) value = f"`{i.name}:{p.name}`_" self._expand_member_dict[key] = value # Make sure to expand the keys in reverse order so e.g. #org.foo.Iface:MediaCompat # is evaluated before #org.foo.Iface:Media ... self._expand_member_dict_keys = sorted( self._expand_member_dict.keys(), reverse=True ) self._expand_iface_dict_keys = sorted( self._expand_iface_dict.keys(), reverse=True ) def _generate_header(self, iface): """Generates the header and preamble of the document.""" header_len = len(iface.name) res = [ f"Title: {iface.name} D-Bus Interface", f"Slug: {iface.name}", "", "# " + iface.name_without_prefix, "", "## Description", "", iface.doc_string_brief.strip(), "", self._expand(iface.doc_string, True), "", ] if iface.since: res += [ f"Interface available since: {iface.since}.", "", ] if iface.deprecated: res += [ "*Warning*: This interface is deprecated.", "", ] res += [""] return "\n".join(res) def _generate_section(self, title, name): """Generates a section with the given title.""" res = [ "### " + title, "", ] return "\n".join(res) def _generate_properties(self, iface): """Generates the properties section.""" res = [] for p in iface.properties: title = f"{iface.name}:{p.name}" if p.readable and p.writable: access = "readwrite" elif p.writable: access = "writable" else: access = "readable" res += [ "### " + title, "", "```", f" {p.name} {access} {p.signature}", "```", "", self._expand(p.doc_string, True), "", ] if p.since: res += [ f"Property available since: {p.since}.", "", ] if p.deprecated: res += [ "*Warning*: This property is deprecated.", "", ] res += [""] return "\n".join(res) def _generate_method_signature(self, method): """Generates the method signature as a code block.""" res = [ "```", ] n_in_args = len(method.in_args) n_out_args = len(method.out_args) if n_in_args == 0 and n_out_args == 0: res += [ f" {method.name} ()", ] else: res += [ f" {method.name} (", ] for idx, arg in enumerate(method.in_args): if idx == n_in_args - 1 and n_out_args == 0: res += [ f" IN {arg.name} {arg.signature}", ] else: res += [ f" IN {arg.name} {arg.signature},", ] for idx, arg in enumerate(method.out_args): if idx == n_out_args - 1: res += [ f" OUT {arg.name} {arg.signature}", ] else: res += [ f" OUT {arg.name} {arg.signature},", ] res += [ " )", ] res += ["```"] return "\n".join(res) def _generate_methods(self, iface): """Generates the methods section.""" res = [] for m in iface.methods: title = f"{iface.name}.{m.name}" res += [ "### " + title, "", self._generate_method_signature(m), "", self._expand(m.doc_string, True), "", ] for a in m.in_args: arg_desc = self._expand(a.doc_string, True) res += [ f"* {a.name}: {arg_desc}", "", ] res += [""] if m.since: res += [ f"Method available since: {m.since}.", "", ] if m.deprecated: res += [ "*Warning*: This method is deprecated.", "", ] res += [""] return "\n".join(res) def _generate_signal_signature(self, signal): """Generates the signal signature.""" res = [ "```", ] n_args = len(signal.args) if n_args == 0: res += [ f" {signal.name} ()", ] else: res += [ f" {signal.name} (", ] for idx, arg in enumerate(signal.args): if idx == n_args - 1: res += [ f" {arg.name} {arg.signature}", ] else: res += [ f" {arg.name} {arg.signature},", ] res += [ " )", ] res += ["```"] return "\n".join(res) def _generate_signals(self, iface): """Generates the signals section.""" res = [] for s in iface.signals: title = f"{iface.name}::{s.name}" res += [ "### " + title, "", self._generate_signal_signature(s), "", self._expand(s.doc_string, True), "", ] for a in s.args: arg_desc = self._expand(a.doc_string, True) res += [ f"{a.name}", f" {arg_desc}", "", ] res += [""] if s.since: res += [ f"Signal available since: {s.since}.", "", ] if s.deprecated: res += [ "*Warning*: This signal is deprecated.", "", ] res += [""] return "\n".join(res) def generate(self, md, outdir): """Generates the Markdown file for each interface.""" for i in self.ifaces: with open(os.path.join(outdir, f"{md}-{i.name}.md"), "w") as outfile: outfile.write(self._generate_header(i)) if len(i.properties) > 0: outfile.write(self._generate_section("Properties", i.name)) outfile.write(self._generate_properties(i)) if len(i.methods) > 0: outfile.write(self._generate_section("Methods", i.name)) outfile.write(self._generate_methods(i)) if len(i.signals) > 0: outfile.write(self._generate_section("Signals", i.name)) outfile.write(self._generate_signals(i))