From unknown Mon Jun 23 18:33:58 2025 X-Loop: help-debbugs@gnu.org Subject: bug#61655: [Tree sitter] [Feature Request] font-lock function calls, definitions, separately Resent-From: Jacob Faibussowitsch Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 20 Feb 2023 15:55:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 61655 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: 61655@debbugs.gnu.org X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.167690849013638 (code B ref -1); Mon, 20 Feb 2023 15:55:01 +0000 Received: (at submit) by debbugs.gnu.org; 20 Feb 2023 15:54:50 +0000 Received: from localhost ([127.0.0.1]:53300 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pU8V8-0003Xt-D8 for submit@debbugs.gnu.org; Mon, 20 Feb 2023 10:54:50 -0500 Received: from lists.gnu.org ([209.51.188.17]:33048) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pU8V5-0003Xl-TN for submit@debbugs.gnu.org; Mon, 20 Feb 2023 10:54:48 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pU8V5-0000f2-In for bug-gnu-emacs@gnu.org; Mon, 20 Feb 2023 10:54:47 -0500 Received: from mail-qv1-xf32.google.com ([2607:f8b0:4864:20::f32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pU8V3-0003x2-JK for bug-gnu-emacs@gnu.org; Mon, 20 Feb 2023 10:54:47 -0500 Received: by mail-qv1-xf32.google.com with SMTP id bo10so754964qvb.12 for ; Mon, 20 Feb 2023 07:54:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=to:date:message-id:subject:mime-version:from:from:to:cc:subject :date:message-id:reply-to; bh=xsy3HVGthShDuwNFDknGw0/Xom1LgzzxyQhArWXiExo=; b=TAhduFN8Q6TCs4hMEbSjbzbaqh3EABn4aYvcImmvSn5C1JnUY+9z19s90YJ+LHE7fM HDl8vW8Qo8fsoqrZnxYdEWwCsvf20JMbgiVCJrui29Pql8zpsE/hDo8nyNauyAfPBNqH 2q96hkelJ4A+6g7XZCUjmSREEPpDf7bzhnBosTd8EhT6roqx7yOchPFDSTd0A6PlAOpo fDh8dcgcRpO9kGpFLH/XW9n9pa6aBjetXTtrKuk/XJIeq4nnh0/xKyHTFtSIiV0+cEII 2W0t2m/AF5nFyXX3xJswnHzlsvSDaTmKSBf14HQ7KvK6R5XgmMzMpw/+f7Zga2ufnsjM zwwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:date:message-id:subject:mime-version:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=xsy3HVGthShDuwNFDknGw0/Xom1LgzzxyQhArWXiExo=; b=DlNzOIvTt//gKQBW2h16iUVgIfok5oqFUsB9GXSJzsEakYSq53qmdfLagGpJMpC3gP DRMgJaOkhh7whoShx4bdlkMYj6g3oHljSsRroZbZG8a2KYl5pzvZB1WrYnjSCUgHv1iX RQRHz7iTOWxfJt0261DCNX2a3zfO+p5YEDU+0yZG/sDlNqBCzpwZ1VQOez3n8b3MfS2N hsm5LhYVaq4cMSReVPCV66OuVbZ708CwXtR+ff1wa4VdXBl96yOgoxzRCxQaIkQObSwR +eayapXrJB2fbEirBcKG7Ys84JnPpkYRfudYOiDTtJofZYcHd7HYVQpNibKR18CdYAd/ okwA== X-Gm-Message-State: AO0yUKX6mwsO0gdCUleJqDVb3EZjJKcD5faU3mk9NjfzG8AmyLwH3ivx EK+IXI+V1YJtKamUFeybuvkPrf5vDvrPxg== X-Google-Smtp-Source: AK7set9i5Opjd6+7m19EZzNIXUoXEhEFUAA5j4NxEzFQnh+n4wyLLBzuFblf3LaZfEFYIXVM/leRbw== X-Received: by 2002:a05:6214:5010:b0:56e:92a8:e182 with SMTP id jo16-20020a056214501000b0056e92a8e182mr1744169qvb.38.1676908483941; Mon, 20 Feb 2023 07:54:43 -0800 (PST) Received: from smtpclient.apple (pool-108-21-63-133.nycmny.fios.verizon.net. [108.21.63.133]) by smtp.gmail.com with ESMTPSA id k125-20020a37ba83000000b007259807a512sm9122489qkf.12.2023.02.20.07.54.42 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 20 Feb 2023 07:54:43 -0800 (PST) From: Jacob Faibussowitsch Content-Type: multipart/alternative; boundary="Apple-Mail=_B7F591B3-B9F2-47D9-882B-A7D24AD0C9F9" Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.120.41.1.2\)) Message-Id: <8DA1B548-B8D2-4EC1-B9F8-F7654003AC89@gmail.com> Date: Mon, 20 Feb 2023 10:54:42 -0500 X-Mailer: Apple Mail (2.3696.120.41.1.2) Received-SPF: pass client-ip=2607:f8b0:4864:20::f32; envelope-from=jacob.fai@gmail.com; helo=mail-qv1-xf32.google.com X-Spam_score_int: -4 X-Spam_score: -0.5 X-Spam_bar: / X-Spam_report: (-0.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_IMAGE_ONLY_24=1.618, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-Spam-Score: -0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --Apple-Mail=_B7F591B3-B9F2-47D9-882B-A7D24AD0C9F9 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii Hello, Is it possible to have the builtin tree sitter give differentiate = font-locking for function calls and function definitions? The 3rd party tree-sitter package = (https://github.com/emacs-tree-sitter/elisp-tree-sitter) has this = feature and it is quite nice. In fact it goes further, allowing you to = additionally distinguish between builtin calls, macro calls, method = calls, etc. (see = https://github.com/emacs-tree-sitter/elisp-tree-sitter/blob/master/lisp/tr= ee-sitter-hl.el). As far as I could see, the builtin mode only provides = `font-lock-function-name-face`. I have set treesit-font-lock-level to 4.=20= Examples below are for C/C++ mode, but this would apply to any number of = languages. Desired (i.e. what 3rd party package produces): Current: Best regards, Jacob Faibussowitsch (Jacob Fai - booss - oh - vitch) --Apple-Mail=_B7F591B3-B9F2-47D9-882B-A7D24AD0C9F9 Content-Type: multipart/related; type="text/html"; boundary="Apple-Mail=_6EF6DE6B-BAF8-4CFD-9839-7FDA89850DD0" --Apple-Mail=_6EF6DE6B-BAF8-4CFD-9839-7FDA89850DD0 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=us-ascii Hello,

Is it possible to have = the builtin tree sitter give differentiate font-locking for function = calls and function definitions?

The 3rd party tree-sitter package (https://github.com/emacs-tree-sitter/elisp-tree-sitter) = has this feature and it is quite nice. In fact it goes further, = allowing you to additionally distinguish between builtin calls, macro = calls, method calls, etc. (see https://github.com/emacs-tree-sitter/elisp-tree-sitter/blob/mas= ter/lisp/tree-sitter-hl.el).

As far as I could see, the builtin mode = only provides `font-lock-function-name-face`. I have = set treesit-font-lock-level to 4. 

Examples below are for C/C++ mode, but = this would apply to any number of languages.

Desired (i.e. what 3rd party package = produces):


Current:


Best = regards,

Jacob Faibussowitsch
(Jacob Fai - booss - oh - vitch)

= --Apple-Mail=_6EF6DE6B-BAF8-4CFD-9839-7FDA89850DD0 Content-Transfer-Encoding: base64 Content-Disposition: inline; filename=PastedGraphic-4.png Content-Type: image/png; x-unix-mode=0666; name="PastedGraphic-4.png" Content-Id: <177540B5-AF8E-49B5-ADC7-7F4BFB3EB4B3> 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 +9P3Xz8QfqD1IONg3SHLQ1WHaYfL6pH6afX9DdkN3Y0pjV1NYU2tzd7Nh484Htlx1PRo5THtY0uP U47PPz7YUtwycEJ0ou9k1slHrRNb75xKPnW1Laat83T46bNngs+came2t5z1OXv0nNe5pvOM8w0X 3C/Ud7h1HP7d7ffDne6d9Rc9LjZe8rzU3DWm6/hlv8snrwReOXOVffXCtchrXdcTrt+8kXaj+ybv 5rNbebde3S66/fnOnLuEu2X31O9V3De8X/2H7R97u927jz0IfNDxMO7hnUfcRy8eFzz+0jP/CfVJ xVOTpzXPnJ8d7Q3uvfR83POeF6IXn/tK/9T4s+qlzctDf/n/1dGf3N/zSvxq8PXiN/pvdrx1fds6 ED1w/13+u8/vyz7of9j5kfGx/VPSp6efp3whfVn71fZr87fwb3cH8wcHRRwxR/YpgMGKZmYC8HoH ANQUAGjwfEYZJz//yQoiP7PKEPhPWH5GlBV3AOrg93tMH/y6uQHAvm3w+AX11dIAiKYCEO8JUBeX 4Tp0VpOdK6WFCM8BmyO/ZuRngH9T5GfOH+L+uQVSVVfwc/svIBt8ZZU1ZUcAAACKZVhJZk1NACoA AAAIAAQBGgAFAAAAAQAAAD4BGwAFAAAAAQAAAEYBKAADAAAAAQACAACHaQAEAAAAAQAAAE4AAAAA AAAAkAAAAAEAAACQAAAAAQADkoYABwAAABIAAAB4oAIABAAAAAEAAAEMoAMABAAAAAEAAAE0AAAA AEFTQ0lJAAAAU2NyZWVuc2hvdIgvsOAAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAHWaVRYdFhNTDpj b20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4Onht cHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53 My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24g cmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20v ZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjMwODwvZXhpZjpQaXhl bFlEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4yNjg8L2V4aWY6UGl4 ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpVc2VyQ29tbWVudD5TY3JlZW5zaG90PC9leGlm OlVzZXJDb21tZW50PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6 eG1wbWV0YT4KhyfJZAAAABxpRE9UAAAAAgAAAAAAAACaAAAAKAAAAJoAAACaAAAhqUNkw2cAACF1 SURBVHgB7F0JmBRFln590g1001zdDd3YnEIDjcgNIiiC4ODBzXAMpwxeHALOyi6y7Cjs4KLTgIwH h8gxDo4CIuqAKAiCCHLIpYigfjKKnCJyyNGx7wUVZWVWZndWdlVWZfXL74uKzIj34vgj4q/IyMh8 MQAg0PHBCDACjECRCMSgBBNGkTCxACPACBACTBjcDxgBRsAyAkwYlqFiQUaAEWDC4D7ACDAClhFg wrAMFQsyAowAEwb3AUaAEbCMABOGZahYkBFgBJgwuA8wAoyAZQSYMCxDxYKMACPAhMF9gBFgBCwj wIRhGSoWZAQYASYM7gOMACNgGQEmDMtQsSAjwAgwYXAfYAQYAcsIMGFYhooFGQFGgAmD+wAjwAhY RoAJwzJULMgIMAJMGNwHGAFGwDICTBiWoWJBRoARYMLgPsAIMAKWEWDCsAwVCzICjAATBvcBRoAR sIwAE4ZlqFiQEWAEmDC4DzACjIBlBJgwLEPFgowAI8CEwX2AEWAELCMQ3YRBtctDV4Bun2VMjAUp nTh0X6K7YCwSjNBSaZWgTHo1iI1PlMmdPrQLCq5cDkbSQUkjLi4OGjRoAOfPn4fDhw9bSzOY7WAt R1dIlStXDnJycuD48eNw7NgxV5SZCkmmEqPTNcR67fC4GsWs40ZPOg2KmY4J1hXrNRWd/7ZR9Fn9 o8aVybghotpm4MCB4vPPPxcPPPCA9XIFsx1M8PPrw3WxnSqEpq388rJaJp1chQoVxM6dO8WaNWtE QkKCdTx16QSrPFbSie4ZBs0KFqKjoze6I/LM3s9GVCuDbhC6/faSMNOKTy4Lv3vpY0gqnw6XTv8I x3ZtgMu/nJXiB/7xDFw+95OZqqPhqampsHbtWigoKIBOnTrJWYalAgSzHaxk+DwKtUA3AN0XVhTC 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 I7RkwQAAAABJRU5ErkJggg== --Apple-Mail=_6EF6DE6B-BAF8-4CFD-9839-7FDA89850DD0 Content-Transfer-Encoding: base64 Content-Disposition: inline; filename=PastedGraphic-3.png Content-Type: image/png; x-unix-mode=0666; name="PastedGraphic-3.png" Content-Id: <81819184-444C-4B1D-B847-0A951DE7D5FE> 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 +9P3Xz8QfqD1IONg3SHLQ1WHaYfL6pH6afX9DdkN3Y0pjV1NYU2tzd7Nh484Htlx1PRo5THtY0uP U47PPz7YUtwycEJ0ou9k1slHrRNb75xKPnW1Laat83T46bNngs+came2t5z1OXv0nNe5pvOM8w0X 3C/Ud7h1HP7d7ffDne6d9Rc9LjZe8rzU3DWm6/hlv8snrwReOXOVffXCtchrXdcTrt+8kXaj+ybv 5rNbebde3S66/fnOnLuEu2X31O9V3De8X/2H7R97u927jz0IfNDxMO7hnUfcRy8eFzz+0jP/CfVJ xVOTpzXPnJ8d7Q3uvfR83POeF6IXn/tK/9T4s+qlzctDf/n/1dGf3N/zSvxq8PXiN/pvdrx1fds6 ED1w/13+u8/vyz7of9j5kfGx/VPSp6efp3whfVn71fZr87fwb3cH8wcHRRwxR/YpgMGKZmYC8HoH ANQUAGjwfEYZJz//yQoiP7PKEPhPWH5GlBV3AOrg93tMH/y6uQHAvm3w+AX11dIAiKYCEO8JUBeX 4Tp0VpOdK6WFCM8BmyO/ZuRngH9T5GfOH+L+uQVSVVfwc/svIBt8ZZU1ZUcAAACKZVhJZk1NACoA AAAIAAQBGgAFAAAAAQAAAD4BGwAFAAAAAQAAAEYBKAADAAAAAQACAACHaQAEAAAAAQAAAE4AAAAA AAAAkAAAAAEAAACQAAAAAQADkoYABwAAABIAAAB4oAIABAAAAAEAAAD2oAMABAAAAAEAAAEUAAAA AEFTQ0lJAAAAU2NyZWVuc2hvdLdlExIAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAHWaVRYdFhNTDpj b20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4Onht cHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53 My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24g cmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20v ZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjI3NjwvZXhpZjpQaXhl bFlEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4yNDY8L2V4aWY6UGl4 ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpVc2VyQ29tbWVudD5TY3JlZW5zaG90PC9leGlm OlVzZXJDb21tZW50PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6 eG1wbWV0YT4KEYtKPgAAABxpRE9UAAAAAgAAAAAAAACKAAAAKAAAAIoAAACKAAAgUEVv9BAAACAc SURBVHgB7F0HnBRF1n8bWXZZWGBhgWUlw66wgBIWDIAc8UBYsoQjI6Dk8LvjPuBAhTtORAFRkCMo HAon4QjnR9AjCErm4wiSJJ+IHIoIh6T63iunhgk9uz09Mz3Ts69/v5rqrvCq6l/vP9VdXV0vAgAE Oj4YAUYgjBCIwLYwscOoQ7kpjAAhwMRmPWAEwhABJnYYdio3iRFgYrMOMAJhiAATOww7lZvECDCx WQcYgTBEgIkdhp3KTWIEmNisA4xAGCLAxA7DTuUmMQJMbNYBRiAMEWBih2GncpMYASY26wAjEIYI MLHDsFO5SYwAE5t1gBEIQwSsSWyqdSa6h+iO+NgrJCcK3Ul0t32UlUP2fEnJkFA8DSKjY2Wq66cO wsN7d3PIYW5UVFQUVK1aFW7dugVnzpzRV7g/+0FfiZZIVahQIShTpgxcvXoVrly5ErQ602eb1nLV sL77ba6cj3XfbpNT1Uc5HjAsml5LNH9nu+i8/lsnl5DyWEhh3qNHD3H8+HExaNAg/fXyZz94wM9N N6tgPxUJTF+5laW3Ti7pihQpIg4cOCA2btwoYmJi9OPpIseX+lhzxKZRdjE6Ojqh+1qeGfvZjtkS 0PVEd9SYCE+5ovMXgF+/9wXEFS4Od65/C1cOboW7P92QyY999AbcvfmDp6ymhhcsWBA2bdoEDx8+ hKZNm8pRW1cF/NkPegp8FxPVRdcd3Vd6MgQvzejRo6F///4wbdo0WLx4cVAqEpR/FGyp8XITMG9/ dH3R5fNBDtUhgCP2Yw2y5SjdbvlJEREZZby9vmClI++YMWPkaD1w4EDv6ujPftBRT9iJ/UV3ajRq 60kfxDRJSUni0KFDYvfu3SIxMTEY9Q19kALaiQEkdkbnEZLYT49fHIyO1VVmXFycVL6jR4+KEiVK 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 Kk55VNla/oIFC8Tly5fF3Llz7Xlw1BcXL14U+A5cpKen28O18juGkSwqf+bMmbnmwbsLe32PHDki zJrBd6wvn/v9ccDvAnNVJCOdqIjdeuF+TfnPTFwqSVjr5dc14z2V+ev3vpD50p5p45ZPEVu+P2+t 3y5Z27ZtJVGOHTsmaBLNU9mu4er1GJGbJr7o2Xvfvn2S7F27dtUth+ROnDhR1gFv8XPNh3cDdmLz c7k1+OCqOxrX1miIInadYW9qKmqlNgMkQZu/s10znhoeFZtPFEyrJGiEL1n7V9I1m/WpzKe18EUR u8PKcyIyWv+Cjz59+kiibN261WNdNDpCpqXR/ty5c3KExudqSerZs2d7LadXr16yDtu3e8ZD1YFe iw0ePFjgLjgCTTZ5XZaSw35IcSmkKuNRqRSxM7qM0ExTKqu5JGi75Sfd4otVrSeazf5M3nbT6Kvl Krd90S2fInZOfxZayjxs2DBJqhUrVrjJ1ErvGjZgwABJaBq5iZhGbo1xJxtZB1qJ5iqfr62h8z72 kzUaqYhNI7NWg+XzMpEWn5lxQsyeJvM34+yEfm7a30Vmz9+Liq37igote0rX4p0dkuiVs92XfCpi N3jlI7s8rbJdw2jVFz3f4n5vXuVTcnD2205snFE3JKN9+/ayDtu2bTOUX9WFfWvwQ6OfrFFxRezH Xxilqaip9VpKgrZddtwen5DymOi09t8yvHxz7cUazedsy5XYz/5hqV2mBoBucWiNVJKKyO3taOv4 XH3y5ElJcLqt1lOuY5q+ffvKOqxatcrrvI5y+Nwa/NDoJ2tUXBE7a/QcTUVVoys9M6tGln66tSRt 9odfiYioaHu4iqfn5o5rLsk06R2GuMUrmd4SOzMz007sjIwMN7mqfFefFp7gqylJZpoZR9NJAl9/ ibNnzwqS6Zo+p+vx48fLOtAqtJzScZw19N9AP1mjYYrYbZb8S9BrJteGqnhcUGKPo5luep5us/SI 5uRXmUYdZDylqdbjt/Z8SrZRYuOCErF//35JrBYtWrjJVfJd/SFDhkhS04cjap33yJEjZdiuXbvs Ya75tK6XL18uy9czm44LWeR+8LSmvVy5crrrq1Uuh4UMn0KmIjkqlCIukbB6H2c73I81yLYTtOBj le1y6FxNlD3WsJ09nJSvQMlyot3yU/b4JwdNdYqnNEaJTXnnzZsniUWzzXqUXY3O58+fF7VqPXoX T6TD1WaS3Hqft/PlyycOHz4sy9czy60m2ujRgT4eofx66sxpQpo7IV05u4IpYjf+81o5GdZ05hbx xIuvief+uFp0+vtlSVC6dlW2p8cvlnG0gKXx6+sFjeiN/7xOLmih52tcbirjfzV9g1teX4hNFlGI KHreC+Me7PI7apoFpxl11zbQRyS0cITi6dnZNd71Wq1T1/t8/bvf/U7WlepLjibvXGXytTV44tBP 1qiwIjZ9yEEz2B1WnbePtu1WnBa4bFTgmkg3hYxNTBJZo962z4zTCN5x9UVBz82xBZJE4QqZUg49 a0fFOi8m8YXYtNHBzp07JVHq1avnVi/VATQiL1u2TJKWXo/RtYpz9HGZqUxD77jpXbdjnOs5EZoI 2qVLlxzTqXy0oo1m8BWx+/XTvxhHyWA/5HgUchXSpYw08VW0ypPSaU2MuSpaXJEUkVKzAS4vrSXw Iw5dZbjK8PZ66NChkixz5mhP+HkrT0/62rVryzLpmZy+CNOTh9LQvIB6/96hQwfd+fTK53Sm88z0 AvOM0hCxaCSkb7Lpc0szlHvWrFmS2N26dfO6vA8++EDmrVatmtd5zWgbl+EVV71KzB2Oo5s3Cta5 c2dJlnHjxnmVz5syVNpSpUrJZ/H169fLEViF6/GrV68u/4CI3HrScxrv9CAIeIV8BS2taHSLW6FC BVNGbHpFRmXRpobeKBJtuEiz6HT7XqlSJa/yelMOpzWVa6YWxkrj5YgfaDLQSE2TZvQVmJ5XY4Gu D8v3Dx8ts9ECdjgfAUKgUaNGgGvKQeBONHyEBwJM7PDoR24FI+CEABPbCQ6+YATCAwEmdnj0I7eC EXBCwDLEDnfbXeHePietM3hh1DaZ0XwGqxky2SwxU62WlGptYYRIhmwb9NruCvf2+aOPjNomM5rP H3UOoozQJYUjKFZUfLU5Ib0fzm3DhXBvn2Nf+nJu1DaZ0Xy+1DXIeZnYgeoAb2x3WZHY3rTPXxgb tU1mNJ+/6h0EOUzsQIDure0uqxHb2/b5E2OjtsmM5vNn3U2UZU1iB9p2F9n1SkytkKvz9KWY+iZa j+0u6mxXYge6fVRmXrNNlpdsmllmVhwV31TbXWnPtoX6v30P9T/nY9PQxvDD2aNuibyx3UWZzW4f lYnfm+cZ22TU3rxk08xyxDbLdhduwABoUZP0we2ITy4FaOlThm98uSHcOP+VUxojtrsUsc1qH1VY ETvcbZM5dk5esmkWsq+KsEPsdVO3qrQDCu1s4hgXKNtdjmWoc7Im0uTNTXLXFbS+6VQPlcaI7a5g tE/tEBPutslUv5Cfh2yaPSKPIwChdq4U30zbXVoY1B0xU5Ka9lxz3UpJpTdiuysY7VPEpj/LimFs m0z1C/l5yKaZtYhtpu0uR4Wgc1J+IgEZJYgvXlpztKZ0Rmx3KWKb2T5F7HC3TebYj3nIppm1iG2m 7S5HhSD7X7QbKlkWIXNCjnGu52rvMG9sdylim9k+Rey8ZJtMbbWcB2yaWYvYZtruUoTNn1xKtF16 VI7WlbMH5khqymPEdpcitpntU8TOS7bJ8pBNM2sR20zbXURSek/d5M2NOU6WqT8A5Rux3aWIbWb7 FLG9NWFkpH0Km2DbJstDNs2sRWwzbXeRMtYZ8Vauk2VKaZVvxHaXIraZ7TNKbCPtI2xCwTZZHrJp Zi1im2m7i74k0zNZpgitfCO2uxSxzWyfUWIbaR9hEyzbZKpfyM9DNs2sRWwimhm2u5Ifz5KWOPVM ljkqjjr31naXIrZZ7aN6GiU25fW2fcG0Tab6JC/ZNLPcyrNrx3ZDckZd+P7rI3Dt6JeQVK4qJD9e F9AaCJxaOx8Ovjce+/HRgba7AG1n40Z9D+E/X+2H/xzbA0Uz6qCrDT9eOAlXDvwTqrQbjHH74NMx rewZ8RYcyjXpCvdu/Qg/nDtmD3c92fvWCPjpm7OuwYC2u2D69Olw6tQpwGdSt3jXACS2XDJrVvuo fCS2XFL6zd7NsGNyD9cq5XjtTfvQNhls3rwZUlJSYNq0aYBGDZxko20yoBVh+PwNEyZMAFqOm9OB 6/Bh6tSpgLurAk6G5ZTUKc7bfGjTDPD1mF1Gz549Ye/evfbrUD6xHLG3TegMhcpkQGbPcYALRCS2 927fhLOblsGhBX/AsYQmrR8daLsLnhjwGpR5riOgbS8Z8fDeXfj20DbY/cYQSEhJA1xsAg/v34PV nSvCg7t3ZBpF7EeStM88rRVH212wdetWwI/8Ad9rA5rG1RZgC1XENqt9VKwvxNbbPrRFBkuXLgX8 AAPQlhm88MIL8PDhQzcs0DYZLFq0CO7duwfZ2dlw6NAhtzQqAG2TAdodh0mTJgHeWqvgXH1v86FN M0ALp5CcnCxl0x81rlzLtZxQSUBMsJwLd9td4d4+ozpn1DaZ0XwWtmlmPVIbVQqz8wXDdpeZbQxG +4zaJjOaj/C0qE0zJnYgyWCm7a5AtsOTbDPbZ9Q2mdF81GYL2zRjYntSWn+Em2m7yx/19VaGme0z apvMaD6L2zRjYnurzJw+/HXG6jbNLDMrjmTigxEwFQEr2zRjYpuqKlwYI2AOAkxsc3DmUhgBUxFg YpsKNxfGCJiDABPbHJy5FEbAVASY2KbCzYUxAuYgwMQ2B2cuhREwFQEmtqlwc2GMgDkIMLHNwZlL YQRMRYCJbSrcXBgjYA4CTGxzcOZSGAFTEWBimwo3F8YImIMAE9scnLkURsBUBJjYpsLNhTEC5iDA xDYHZy6FETAVgf8HAAD//5mXBgMAAB5+SURBVO1dCZwUxdV/7C7ncrPcyymnLMi1CIKA3PctBkSO CBLyRUBEQEFOUUhQlATzKYdcEeFTgqggBAlIuE85BESQyCGQAIqg4bK+92qment6e3a6Z7q3dyav 9/e2u+t4Ve/f9e+qrnrdkw0ABApvjAAjEEMIZENbmNgxdEHZFEaAEGBicztgBGIQASZ2DF5UNokR YGJzG2AEYhABJnYMXlQ2iRFgYnMbYARiEAEmdgxeVDaJEWBicxtgBGIQASZ2DF5UNokRYGJzG2AE YhABJnYMXlQ2iRFgYnMbYARiEAEmdgxeVDaJEWBicxtgBGIQASZ2DF5UNokRYGJzG2AEYhABJnYM XlQ2KXwEqlWrBvnz54czZ87A5cuXw1fkcc7/OmLXKQ1w/geAyzc8Rt6l4l21LztWepBJxX/CsO9Q TqGcQYnibcWKFdCkSRN44YUXYPHixVFsie8LKvQVlZiXjUNBiFkg6paOTVtdty8P4rYvhMzB+HLR iy8SW5w/f14MGDAgqvnwX9Vj33wZIE8OgLqzAQ6cj+qbsWnlXbcvDxa71V/0x7g/6T/OhXscCUFL lESUb1H6odxEibKNe+wo7OGx4cseG4erUX03Rq6Y1t91+/Q9dguTOtTDMNWj/8okPki9g9njRTj3 2B7eiWuUAKiSBFA0L8BxnN+g3vfHW+krlB97ksLUy/i3Y2MAciUAdFoAcPSSCvXtz34PcO+XwDCV //ufAUhoS8Qev/l9vrKPXATYe9YXrv5TeVTGD//BDuu2Ck3bF8M6J8QBXMXn0v/cTQvXH2XDcVSD MgAViwBQHb69BnDwAj7GXten8sVFYl+gNgtn+h77OUy/ySTPagzDugP16JNM4ikIrx9URSmA8jUK PZubXD8MBUAMICfKv1DuoBRFqe0/Poz7KygObsYeu2jRolC/fn3Ihhdlx44dcO0aXowo2KJqKF4Z yfz2oz5i6bEV2H999W+AkR8CfHo8LWbMIwAzO6adZ3RUYgrApR8DUzzXHOD3nQBe3QLw/FqAv/QF 6FID2xkSV21/PQLQY5E6A1g7GKB9NYBnsC6vq2FrWjScGIs3JWyc3THPasxr3FpVBnizJwDZqt/u 4k3nQ0zf7920G0Kk9un1Wzq2Quw1qImG5YgXvGjQWhjPp6M0MITfxPOXUDYYwul0IcoDKMNQWqDg 9Q/Y3sOzV1EMN+WANDZOFLHHjx8PycnJMGwYFezbBDa0devWybC7d4Pclf1py5QpAyVKlIA9e/ao 7Jm6jxpi58mOveNIgOrFAb65CrARn++opy6aCEA9eFck3Agk01s70vB7pBJAx+pp5yMe9vWWy/Yh iW+khdPRFGxUxl5fEXvJXoBrPwMMb4J1OAdw+Dtfz52KPdPP2IukzErTFQmx6yUDbMZ2lBd7qH9h /T7D3mw3Pq9WQEKQLSloZ5GJvt6eSozUvrRaWzwKRWwiIBGRtj+gEOnUlh8P/g+Fblj/QlmPgtcR UlEaodBGOC6XR2n/FLFPY1BFlE0oX6Ag9oA3XcARDXyEMhnFgU0R+/Tp01CuXDnYvHkz7Ny5E2rU qAGtW7eGxMREWLt2LQwZMiRoaZ07d4aZM2fKXp5uBKNGjQqa1s0I0+c1LDBLhWNPJp+P7/weBDb0 dHXDYbmolJQ+XG+H3WdQJLYs8/JkEFengehQPVB/fFz6MCS2zDPy4cC0qh7YY8v4bimB8eUKgbg4 yRf3l8dB4MgvwEYqazTWB4fmAeFKL+3t2qfPa+lY/4w9DOvRyC8tcT8IZR0KPWMvQzHW83f+uI9x XxwF66vJCH/c33FPZejjFvrjSO8AQxw90+/xi0Mz8eoZm2bGsbcOqEuzZs3E2bNn5ax53bp1A+L0 dV64cKE4duyYlCNHjgi8GQRNq8/n8LEBLD2oWeh42EO+Rr//mfDra7fhK2LTEtnvGlsrN1xij2/l s+/kOBD5clory9gQ7NpnzB/yXE9sNUmm32/Deg9EyWGoP51vRaG0jxniqI2RvZtRKN446aaI/SnG 4c0tXR3/7M831iQujPariL1r1670ZaE+XNuWxJ4xY4ZpPNVv5MiRGrHXrFkTNF06W8KobwY6nAEk gwIcMaxdNV/Dvz0TRJ866Xs0K+XbbfiK2JQvR7w1nMIl9l8H+uyb1s5aOWb22rXPTEeGYXpiz8d6 vuSXV3H/LspeFOpBx6MkoKiGSr2pugEU0YWreNpP96eZYIhXxH7BEK7yPuHPNy9IvEpnca+IPWvW rLT66/IOHjxYEnvTpk2m8WRzvnz5ZG8/bdo0UalSpaDpNHx0+h0McwYQBytkCgQNRXcO9zV+6kH/ PRXE+/1BPNsMBD5jm+Yx1sluw1fEPjLamn4qL1xif4sNmuyim5ax3lbP7dpnVa+WTk/sFib1rIJh a1GIxKN08Q39Ybtwb3jE0HTjtZX55uryUYNXxB5sCFdk6ODP91GQeJXO4l4Re/jw4abXoU2bNpLY NNTW6m5RdyandwaQzKg0TqCJ6e1BnMEegUiglw1PgUhKzNgWuw1fEfvTIRnr1dseDrFxll2zpUkF 62Xpy6Vju/YZ84c8D0VsauBtUIjYO1Dyo1BYRxQK2+g/NyPCQH+a5YY0iti9DeFKB81lkO5/BIlX 6SzuFbGpZzbDo3HjxpLY586dE3FxcaZpzPJ5EOYMIJldcVwyEoMfBEGEVgR/r1/Gttht+IrYHz+Z sV697aGIrW5KxsmzU8/77Ohf33pZ+nLp2K59xvwhz60QuxTWn4hGUstvC14neU7DdLPnZCIdzZ1Q nj+i6EmoiI3XOSBcpenkz7c6SLxKZ3GviE3PyWbltWvXThL78OHDpvFmeTwKcwYQjyovwX2zh48U P72S8bP3jZd96XBZydJFCYfYK/CZj240L7ZOX0YcDkNpjoDiu6cExq/055tBvZvFRmhMZ9c+Y/6Q 51aITdgqYjfw21JGF1YyiH2Ii8xnfJZWxJ4UJN9Afz6aRAsTN30+Rew5c+aY6qOZcpox37Bhg2m8 XpfHx84A4qUR5CJKZLmFjSN7BpNcqlekiTgr9Q2H2K918dVlSZ/0ZbSo5IszI/bYR3xxFyaCQO80 S/Uz2mDXPmP+kOdWiI03WY3Yhfx24CMU/N0fPsgfpich2bvNH9/LEK+ITflzGOJIxzsodCN52iRO X4bFY0XsAwcOiPj4+HTXQcVPmDAhXZzCj4boHTt2FEOHDhUVKlQImk6ld2nvDCAuVU4DBT2+BAlN ohnLQu8ySWx0YEkXp0+73j9sf/dxENR76uPMjsMh9sBUX11oWHyfbga4CJJiD67XEqnNiE3r8IqY VE90UgmoH7qpCrKzgHF9WNdg7dpnZnOGYcGITViSbwGRcgsKEe1/UXR1A3qcoXB6zsYbnBZH13My CsVtQDHYrU2eUbx+Qo50t0Sh8J0oxVD05YV5rIhLvTJ6nwXo7Nq1q+ytKa5KlSoBcfqy27Ztqy13 0bJZzpw5g6bV53PyOGo8zya3QddjFHqXeuc/fS6kpdCbqWVlgGT0OSY/77bz0FsLPdKCbW2rosup 32GIvNe+vIQuyn7PwCdXpvmDq/xIbOlS+skxn3+5Cs9oT37iOMMt/djJW+2jo/gj5IgyuYqSp1xy QYBaJX1uqOSOqt/I1XT70+hdhh5ed+4B7EA7yfMMnVfgofLoqYl26j3P9Hnp2K59xvwhz/WeZ+Tb 7cdO+nKj3dp2Do8GoZBnmdoo7zKUcig3UbahkJ93PZQqKHj9YCoKeZHpt4V4Qh5teA2AvAgPo5Dn WTIKehJCPAqlmYviwIbElu9j7969G1JTU+Ho0aOa5xmdJyQkwPz582HSpElBSxs3bhzga59afP/+ /TPdtRSbnLzTaZXIqgfkGjqhFXogoish9toBG7l4jkPf5LV08UNsOGkF41r4/LUL5U5LXHIKwMUf 087p6Lnm9olN+RqUBViF15WISBv5eW/8CqDXEgAcLUh/8x6LAIzEprRk3+yuAI3L01nadv0/AIv3 AozGhn8bSR9ss2NfMB1Bw/XE1if6GU8uo+B1gE9R1qEo0uOhtlH+F1DaouivIeUlnuxGMW6K2NMw ojgK3TCy+xPdxv2bKEv95w7sFLH79OkD9DWVsWPHQq5c5LeKLsc//gjvvfceTJkyBYddImhplG/e vHmQlET+s+gpO2sWLFiwIGh6tyKohlEj5JVFH0rodD8IemYl91Kj+6VVe2h4i29rSQlXR7CyyKGl Ns4QkytsOJ5kZQuCwLfIRGe08wHUk5ueU21eJzfts1uXgPSIOaBd8BBKqCG0esbu5ref8tJaPz6W IcFtYxJQDwt4Yg8t6tSpI4WOrean53NaC6f17p49e1rOZ1W/hXTug2OhEl4YzmVaaNieXzsjsaOh zv46LlmyRBI7JSXFi7bGxPa88UZRY810rKKU2LVq1RL4fC6I3JmOma89MbE9At6rCx5d5UYhsfv1 6ycOHToktm/fLipXruwV3kxsJnYWbgNE7D0o6hk7i49uqKem5+rVq1d7+QKIiJpZcSQfb4xAVCDQ vHlz2LIFF/QzmDl32xAmttsIs35GwAMEmNgegM5FMgJuI8DEdhth1s8IeIAAE9sD0LlIRsBtBJjY biPM+hkBDxBgYnsAOhfJCLiNABPbbYRZPyPgAQJMbA9A5yIZAbcRYGK7jTDrZwQ8QICJ7QHoXCQj 4DYCTGy3EWb9jIAHCDCxPQCdi2QE3EaAie02wqyfEfAAASa2B6BzkYyA2wgwsd1GmPUzAh4gwMT2 AHQukhFwGwEmttsIs35GwAMEmNgegM5FMgJuI8DEdhth1s8IeIAAE9sD0LlIRsBtBJjYbiPM+hkB DxBgYnsAOhfJCLiNABPbbYRZPyPgAQJMbA9A5yIZAbcRYGK7jTDrZwQ8QICJ7QHoXCQj4DYCTGy3 EWb9jIAHCDCxPQCdi2QE3EaAie02wqyfEfAAASa2B6BzkYyA2wgwsd1GmPUzAh4gEDXErlatGuTP nx/OnDkDly9f9gCq/44icxZMgsRiZSAuIYc0+OrJA/DLndtRb3x8fDzUqFEDbt68CadOnbJkT4EC BaBcuXKyvV28eNFSnqyUSGBlsrysWLFCnD9/XgwYMCDL1zUa8DTWsUi1eqLtm5+L3h9fCpDE4mVj Au9+/fqJY8eOid/85jeW7SlcuLDYv3+/WL9+vciePbvlfEZsPTrP+qQmYJjY7l2nhNx5RZelhyWh uyw5JBo8M0fUHjJNSo58BaOtQaerL470xM6dO8X27dtFYmJiuviMiPfss8/KG8LAgQNt5ctIZybF uddgnDSAie3edSrbtJskdfcVX4lscfHR1oBD1nf06NGSnEOHDg2Z1thmCxYsKA4ePCh27dol8uXL Zzu/UV8mnrvXYJw0gont3nWq3nukJHbjCYuiqeFaqmuuXLkkKY8ePSpKlChhKY+x3b722mvyxvD4 44+Hld+oL5PO3WswThpgJHbRokVF+/btRYcOHUShQoUcBTxXwaIisXgZAdmyibylKoryLR8TBcpX 18ooWP5+UaFVH1GwYooWZmZrnqKlRemG7cR97fuL4g88LHIWKGKa3qnyzOpgGoZ2kX1K6v3PHySx G42bp4WpuGzxCQF1pqF57sIlREKuPAHhqhycfJPx8TlyBsRTOOmMy55DhtO+aEojUaF1X1G4Sh1r IwWsd5GqdUXZZt0lpiXrtxS5ChcPKEfVQ+27d+8uSbloUfg3rWbNmkkda9asybAsVWZW2EfNrDgS G5o0aQLjx4+H5ORkGDZsGOLn24QQsG7dOhl29+5dFRz2vunU96BE3Ufg0OLpUPOJcYDDU6lr759G A5IQUvqN1XTv/eMoOL3+L9o5HWCjhtThr0OZpl21vDIB1vOrD9+CQ4tegl/u3tHyRFqepsjiQXzO 3NDzgzOWUn/yZH24eemslvbhye8CEgoOznsRbXlbC1cH7d/aDvlK3wfbXhoI53euU8Gg8v1jaj9I yJUIqSPnSJxUgstf/AO2zxgMt3+8poIC9sVrN4V6v50JeKMNCBf37mI5n8KuV38L927fCoijk4UL F0KjRo0Ae12YN29eungrATly5IADBw5AXFwcdOvWDU6cOBEyW5kyZQBHCLBnz56Qad1IEHXEPn36 tFyC2Lx5M+CEiFzCaN26NeCkCKxduxaGDBkSMU6KaLTM8/UnC6FwlbqQdH8D37IPInb606WygRH5 b3z3Dawd0jCgzAefnQvlHukFd25eh0sHP4crJ/ZBgXLVoGS9lkDLSd/t/Qy2Tu6r5Ym0PE2RxYO4 hOxQc8B4LTX2nFC4cm344Z/H4eL+v2vhdHBs5etItu+1MEXQcIl9duuHULphe8RgI1w7dQhw1h3K t+gNODKAU+sWw765Y7Sy1EGhSg/AIzP+Km8It364Ape+2ApXv9ov8xar1URiu7pP1YB6Ut6EhATY vXs35M6dG0aMGAEbNmxQKm3vN27cCKVLl4aXX34Zli5dmmH+zp07w8yZM3HAl012OKNGjcowvVuR UTG8UENxWvLC3jqgzjRUOnv2rFwOq1u3bkAcgmb7HIkmh6b3/2qULy8OAbuvOCnDag54QdPX6Z39 Mix3kZJaWNXuw2RYt+XHRb7kSlo41SNPUmlB4bSkhDcFLS6S8sKxz5in1qAXZZ1SR8zW6mRMo86R 2DJtla5PmabFHlvGI3kD4lU+sr18q18FxFVs+7jM03PVP9MN8fMUSxZdlh2R8Q1H/1k+Hqm60J4m +6r2+K3Inif9xFbt2rXlEJqWuapWrRpQpl6HleMFCxZIXW+88UZIPThK0Mo9cuSI7Zl4K/WxkMZ+ w7egNKTxdnUoYtPspFnexYsXS2LPmDHDNN4sT7AwRTR942z56jrZuMo83E3T32z6+zKs0H01fWF4 A+jx/mkZlty4k5ZOX07lLoNl/MOTlmnxYZcXxk1LXxd1nJnEbv3GRs1uVT6OIMSjH56XuBQoG0jA 6o/5JvY6zNspaFlO5bGy79q1qyTYl19+KWgSzUqeYGkmTpwoda1evTqknpEjR2rE9vC5PLqIPWvW LFNgBw8eLIm9adMm0/hgF8wsXBGteJ1mmq7mL6+SDa9Ug9ZaWJOJy2RYsZoPyTB8tpTnPVd9K/A5 VkunL6NojYYyTYe3d2jx4Zan1xvJcWYSu85TL2l26+vcedEBiUuJOs0D4mmmnnr5lH7jAsL1eYMd Dxo0SBIMH9ts5zXqJMco6vk///zzkLpoWYxGldOmTROVKgWO2ox6XTyPLmIPHz7cFNg2bdpIYhP4 kYKliEYkVLrUUBIncbSwh56fLxtdyVQf2dV6cI/3vxHUm5tJiz98LPP0Wn1WZMsWJ3WFW56qW6T7 zCR2tZ6/0/DT1zvYEF497tBMuD69lWNqK9QeVq5caTuvUX/btm2lLvJEM8Zl0fPoIjb1zGZANm7c WBL73LlzAmcvTdOY5TMLU0TDCTNNDw2dqeco9kATLYyWhyhM9eI1+j4nzx9dcwGH5N+EFNWrh1ue Wd3DCctMYtt5NqclMcKXJOn+BzXcrdpI3mJE7K1bt9rOayyjR48eUteWLVsi1mXU7dJ5dBGbnl/M gGjXrp0k9uHDh03jzfIECwuXaBXbPSEbIfXKwXSbhYdbnpmucMKcJHanhfskBvr5CaqTGvHYITbl 6zh/t9SHM+e2MKW8Xbp0kWQkctt1JTXi+Otf/1rqWrVqle16GHVl0nl0EXvOnDmmwNIzDc2Y45KG abwdMMMlWtGUh2Qj7PquvceBcMuzY1NGae0Qu9HYt6WN2oqBbgKPHi16rT7nI3ajDgHXIVxiq1FR rYETAvRlZI+Kq1mzpkbs6tWr286v9NB+woQJUhd5oenDs/BxdBEbHQUEvoKXDlw1a04XIBjY2eNB PFEPxOQ2IEoXCG53uETLnlhAWxZLbtw5aD2M9Qu3PKOecM/tELv24KmSuA+O+lM6++gxRQ2dSztE 7Gq9npY66eUU8l6zYyO1k3379klC0ojOTl5jWmpf1PP36dMnpB56FOzYsaMg3/QKFSqETG8sy6Hz 4A3coQIcMUwRl3pl9D4L0EnLGhROUqVKlYA4vQ2DHwQhZvnk8/8JbnckRFPLWZ2XfCGSqqemqws9 N5KLqn4tN5Ly9PaFe2yH2FRvIi96rom8Jctr9uXIV0i0mr3BcWKTG64ajjedtgLXuQPfziLXVap/ 9sT8Wl30OLz11luSkEbfB32aUMc5c+YUhw4dknqszHKriTa6EdDyLOUPVYbT8VHneUaeRKmpqYBO /ZrnGZ2Tl9H8+fNh0qRJiJH5Nu9RACS33H7CbwcUmABw95f0aZFo0qV005jO8O8vd8sEOHkGOPsN m8f3BHJ/pA2HiVCmSRcgN8kLu/8mw8j9tMnEJeh22QrEL/fg8qFtcP3bE+haGgf5y1SFgvfVhBx5 C8CJD+bCF+9MlXkiKU8qiPAfEgNwthq++du7sOeNZzLURu6ynd45AEg4uH3jB7R7PWTDP3L5vHb6 MOROKgXoSw/bpg+C8zvWarpwKB6WKyopIBfVlrM+Abx5SFfcK8f3oufZAUDnFcCbJ6CDEJh5nlFe 7DkBl0jh5MmTgM/cFGR7Q39z6XGGRAWcRAuZf9y4cYDLY1q6/v37e+Jamul3E7TYdpmqx27atKl4 6qmnBH4FQ+uljx8/LiZPnozLR9ky1Nu0IoifZ/h67D92D14HJ3pQ8qbquuyo1oOpISrNltMyWZFq 9bW6OlFeOJiqPHZ6bMpDL210XnxQs42cS5pOWS69xpq8uESGOzUUV3VEl1fR4vcfaWUqPLuv/FrU GTpdkJOLSqvf0wcStm3bJnvbhg3Tli/1aUId04QZ9b6PPfaYaRnG/Pi1HzkTT3lInnzySUv5jHoi PA/ewCNU7Kox2EOLOnXqSKFjq3UtnAdESonMszlXoWLyzS5yvMiXXFl7u8lqfbNqOiISvd1G6/p2 PcIisYnemCOHoFIN2oiCFWqI+ByhPcqefvppSbC5c+dabieqjvXr15d56SMNefKYv9Gm0ur39Hyv 1tF79uxpu1y9rjCPM6+Rh1lBL0DhMsMYVWXV60uEpLVseicb37qydW1pFYZ63b59+9rKR1gsWbJE 5k1JSbGdN1Iso+YZGw3lzYAADnvls64hOOjp4aWvaPMDQRPFaETv3r1hypQpgGSDV155xZKVpUqV km+E0Qc0cYIW7t27ZykfJapVqxYsX74ccFYe6Bk7szcmdmYj7mB56HcN2XEizur29ccL5aST1fSx lI6+Ulq+fHm4ffs24JuAlkxDn28oVqwYXLt2Da5evWopDyXCDyfCmDFj4MaNG3ISjSbuvNgyfZiA RnKZjEFMtgHsqeXwm94Cs7I05hYXuMf24lbKZcY0As2bNwf0KcflF7p3ebMxsb3BnUtlBFxFgInt KrysnBHwBoGIiE0/gUI/meLEBwS9MZ9LZQRiE4GIiE3unXnz5oXr168Dfn5GunTiQn5sIsVWMQJR hEBExH7++ecBv+8tvxRatmxZuZRAvrn4sYMogoCrygjEJgIRLzuQ+9wHH3wgp/nJjxthYmEMuA14 2wacISG+0SKJTV9zZGI7gynjyDhG0AacAY9+npR8al9//XUmtrd3asaf8ac2wMR2CgPW40xbYhwd wdERJfIHxbnHdgZLbtiMowNtwBkQ1Vcc6Rc5HKgU63BoJMXXwpn2HYU4OmO4+tQr/lCerRfSoxAw vunwTSfLt4GI1rGRlNpG69mfffYZ4KdoAD9FI995xc8XafF8wAgwApmHgGPEpipXrFgR8Ntj8mOD dE7upvQeKzmt3Llzh4J4YwQYgUxAwFFiV65cGaZOnQr486XylbUrV65IYvfqhb8VzcTOhMvJRTAC PgQcIzZ9aYKG4vQZYPpRevylQbhw4QLjzAgwAh4h4MhEgPot4h07dojcuc1/Qhbtc6Qs1sM4chsI 2QZCJrBERvp2Mq1jL1q0yFJ6vjDO4M44Mo5B2oAzwLBLqTM4BrlIfLPk0Z7dNuBMg2RiO4MjE5tx dKgNOAOkIvbs2bPt3lk4PfdG3AacbwPOEJtf23QGR4fu1kwU54kSbZhG3iDpQwvqh8uGDBkSbQBw fZkEMdcGIlrHxo8qQFJSkvw0Ev0cyq1bt6BDhw68fo3dLm+MgJcIRERs+phhYmIifP/99/L3qhcs WAD4Q99e2sNlMwKMACIQEbHpt41++uknWz9WxqgzAoyA+whERGz3q8clMAKMQDgIMLHDQY3zMAJZ HAEmdha/QFw9RiAcBJjY4aDGeRiBLI4AEzuLXyCuHiMQDgJM7HBQ4zyMQBZHgImdxS8QV48RCAcB JnY4qHEeRiCLI8DEzuIXiKvHCISDABM7HNQ4DyOQxRFgYmfxC8TVYwTCQYCJHQ5qnIcRyOIIMLGz +AXi6jEC4SDAxA4HNc7DCGRxBP4f11SvlYnBuf0AAAAASUVORK5CYII= --Apple-Mail=_6EF6DE6B-BAF8-4CFD-9839-7FDA89850DD0-- --Apple-Mail=_B7F591B3-B9F2-47D9-882B-A7D24AD0C9F9-- From unknown Mon Jun 23 18:33:58 2025 X-Loop: help-debbugs@gnu.org Subject: bug#61655: [Tree sitter] [Feature Request] font-lock function calls, definitions, separately Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 20 Feb 2023 17:04:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 61655 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Jacob Faibussowitsch , Yuan Fu , Theodor Thornhill Cc: 61655@debbugs.gnu.org Received: via spool by 61655-submit@debbugs.gnu.org id=B61655.167691261920778 (code B ref 61655); Mon, 20 Feb 2023 17:04:01 +0000 Received: (at 61655) by debbugs.gnu.org; 20 Feb 2023 17:03:39 +0000 Received: from localhost ([127.0.0.1]:53364 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pU9Zi-0005P3-Qi for submit@debbugs.gnu.org; Mon, 20 Feb 2023 12:03:39 -0500 Received: from eggs.gnu.org ([209.51.188.92]:48026) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pU9Ze-0005Om-64 for 61655@debbugs.gnu.org; Mon, 20 Feb 2023 12:03:37 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pU9ZY-00021A-DB; Mon, 20 Feb 2023 12:03:28 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=JHONaqW9o/bJQCI8MzWQ3zANRLIpIJMVRTGfAeom8vk=; b=IIv19XPyHZYy E4GOrBC6HTBI5upBhBIoYMPJvD3kfeg4ZzkQ6D6d7LNTsAjcIfphFMJ4ZI1uKtJaMaWap+D8A44xt 7Db7e3jns7/A427CoY95+kpxAgHD/mW2B8vim06eth5VyFU2oEsucdT1wUqmSFH2GZTj3O8ksyTo+ 9Yww+s/8f3Vm2L9zGju3EwfdcAk/+Gfvwr8okG+YKTSr+r8uI/lP1W/1CdcN6EISj6Zx/ImDHZidq d5BqM8EDk8WJiM9aACHrbLc1H3K8yZpGVVw2uV4BpQFGfJC2hwgpvOU3FLlWeEG2DOK4NZ4bI5YKK ukaEPJ8I1a4lW+MRPE5rug==; Received: from [87.69.77.57] (helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pU9ZX-000470-Pl; Mon, 20 Feb 2023 12:03:28 -0500 Date: Mon, 20 Feb 2023 19:03:35 +0200 Message-Id: <831qmkuv4o.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <8DA1B548-B8D2-4EC1-B9F8-F7654003AC89@gmail.com> (message from Jacob Faibussowitsch on Mon, 20 Feb 2023 10:54:42 -0500) References: <8DA1B548-B8D2-4EC1-B9F8-F7654003AC89@gmail.com> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Jacob Faibussowitsch > Date: Mon, 20 Feb 2023 10:54:42 -0500 > > Is it possible to have the builtin tree sitter give differentiate font-locking for function calls and function definitions? AFAIU, it already does. Yuan and Theo, am I wrong? From unknown Mon Jun 23 18:33:58 2025 X-Loop: help-debbugs@gnu.org Subject: bug#61655: [Tree sitter] [Feature Request] font-lock function calls, definitions, separately Resent-From: Theodor Thornhill Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 20 Feb 2023 20:25:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 61655 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii , Jacob Faibussowitsch , Yuan Fu Cc: 61655@debbugs.gnu.org Received: via spool by 61655-submit@debbugs.gnu.org id=B61655.167692468318797 (code B ref 61655); Mon, 20 Feb 2023 20:25:01 +0000 Received: (at 61655) by debbugs.gnu.org; 20 Feb 2023 20:24:43 +0000 Received: from localhost ([127.0.0.1]:53731 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pUCiJ-0004t7-0M for submit@debbugs.gnu.org; Mon, 20 Feb 2023 15:24:43 -0500 Received: from out-54.mta0.migadu.com ([91.218.175.54]:39725) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pUCiF-0004sw-4c for 61655@debbugs.gnu.org; Mon, 20 Feb 2023 15:24:41 -0500 X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1676924677; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=GIWLPyXBPpjsme20L8nPGfdlLdzl2lTY/3fq7oj9kTU=; b=PBUtXy3VDggyxAJQdkmhz72VNK3tWS4rF2CvYQTb9RRauusS3/1weTt5wiPGubTpCFTxsJ 0LsKAo7/f1o9FBd9IQD+HuM8PYesmOSUJHiii0o6ACvSZiGCw5gqwo+YzXNesHv/SlR8wf ++OguHIDYnuVwXHfRYB70589cQ567JVYwH5Ui8mpeKRC9VNajChCWtwTEUj0ZFrr2m+J3r 2mEg47SfkVQqHmDFi9w6t9+ZXulu/PD+yshVD+lipfqvk0LBLtF7AQqfbOgoDfw3ACu86U nsX1XQ9+WzdAAReibIjoHOAiPa37RE/ibRwyXhxqzfDQFSaOU2gIsrOemUXstw== From: Theodor Thornhill In-Reply-To: <831qmkuv4o.fsf@gnu.org> References: <8DA1B548-B8D2-4EC1-B9F8-F7654003AC89@gmail.com> <831qmkuv4o.fsf@gnu.org> Date: Mon, 20 Feb 2023 21:24:36 +0100 Message-ID: <871qmk9jaz.fsf@thornhill.no> MIME-Version: 1.0 Content-Type: text/plain X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Eli Zaretskii writes: >> From: Jacob Faibussowitsch >> Date: Mon, 20 Feb 2023 10:54:42 -0500 >> >> Is it possible to have the builtin tree sitter give differentiate font-locking for function calls and function definitions? > > AFAIU, it already does. Yuan and Theo, am I wrong? You're not wrong, but it depends on each implementation whether or not the definition gets a different color or not. Jacob, do you have any examples where it is wrong and what you expect instead? Theo From unknown Mon Jun 23 18:33:58 2025 X-Loop: help-debbugs@gnu.org Subject: bug#61655: [Tree sitter] [Feature Request] font-lock function calls, definitions, separately Resent-From: Jacob Faibussowitsch Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 20 Feb 2023 20:46:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 61655 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Theodor Thornhill Cc: 61655@debbugs.gnu.org, Eli Zaretskii , Yuan Fu Received: via spool by 61655-submit@debbugs.gnu.org id=B61655.167692595120862 (code B ref 61655); Mon, 20 Feb 2023 20:46:01 +0000 Received: (at 61655) by debbugs.gnu.org; 20 Feb 2023 20:45:51 +0000 Received: from localhost ([127.0.0.1]:53743 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pUD2l-0005QO-2f for submit@debbugs.gnu.org; Mon, 20 Feb 2023 15:45:51 -0500 Received: from mail-qv1-f54.google.com ([209.85.219.54]:47018) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pUD2f-0005Q7-4n for 61655@debbugs.gnu.org; Mon, 20 Feb 2023 15:45:49 -0500 Received: by mail-qv1-f54.google.com with SMTP id f1so3309141qvx.13 for <61655@debbugs.gnu.org>; Mon, 20 Feb 2023 12:45:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=OsNVpG5TS6mw7m+t0mnSGSz4v9BU/fVN9TtcX8XGrGY=; b=FBiU3WRCes4r90j97wHBbinBnsXUHBBJuiYlZQT4b3Gw6R9ou9y4Ri9Veckz1+uFOk JKb2X6d458+3o535cy0Dz/BGeJXDf+QLYkJhqbVhXxxngeFDBUJQI0XrXUCHqiYQKzx0 jLMYSL1tzOhaqBqV4+1eD+/X6qAgR80LdveDt44m6L5GgzCbwNzeN8R2iOP51+q1lf7r NbipI4Z8bRluaoXqadX5Ckk3iFqdUPinrWCbVYMAPtAZAOQbQqZ6ablZlmGeGhO5ZmZc YnBomDmMxjQYwCV05fE7A+trcRoFk02TvWnpN+5dQudJ5bTtNGKXZJb3d/lHT6Ajxsev FK1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=OsNVpG5TS6mw7m+t0mnSGSz4v9BU/fVN9TtcX8XGrGY=; b=7Ccj7KeItfTKVMyi4itYfhxi9aNLvTCtSTKY2yg0EaT7+y1rsld1z88wbmp1Gjm1qS uI3TAPo6zYE+fe7FiHzHsHfBMYr7AVimAdBvXkNP4yx/WRegh0UFgmg/iKU+DTKWY+3j LbC93f3IE5S0s+2hpkudkJSHOPiAi7ZioADlA2cGyCkBIhf0WmTuaAl/hNe1NrGxLRrt /ob3t3yJ+aTKzTAMAiFuq6CIxptnB2Iht/l6Aqy9Wf3wkvlDBnga1Q/KT936d50zvSKQ GvaA4yn/HFBNpVDTxuVseBf5xtoy5uNq8x5MdMATJ5C/6bhU1v4DffzuZgIIHpkYs70X JGJg== X-Gm-Message-State: AO0yUKVGdWeXDy3nA9oqKcTagNOGDq1eBGZ/ov8Sq/7g8guw70eFwE5r q1/ZqUo9+FH2bYxs3fuOQ2Q= X-Google-Smtp-Source: AK7set/LwHLiK2Bg1F0JYOFxE27qaucCHo+avmiHuKpaeolQf5T9CHp3xeBIOL+uuRpqoFacKwUbvQ== X-Received: by 2002:a05:6214:da4:b0:56e:fb48:cb18 with SMTP id h4-20020a0562140da400b0056efb48cb18mr3541701qvh.29.1676925939309; Mon, 20 Feb 2023 12:45:39 -0800 (PST) Received: from smtpclient.apple (pool-108-21-63-133.nycmny.fios.verizon.net. [108.21.63.133]) by smtp.gmail.com with ESMTPSA id 13-20020a05620a040d00b0073b575f3603sm1427125qkp.101.2023.02.20.12.45.37 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 20 Feb 2023 12:45:38 -0800 (PST) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.120.41.1.2\)) From: Jacob Faibussowitsch In-Reply-To: <871qmk9jaz.fsf@thornhill.no> Date: Mon, 20 Feb 2023 15:45:37 -0500 Content-Transfer-Encoding: quoted-printable Message-Id: <50A8431B-EAD8-442B-9412-0C3649D8852F@gmail.com> References: <8DA1B548-B8D2-4EC1-B9F8-F7654003AC89@gmail.com> <831qmkuv4o.fsf@gnu.org> <871qmk9jaz.fsf@thornhill.no> X-Mailer: Apple Mail (2.3696.120.41.1.2) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hello All, > Jacob, do you have any examples where it is wrong and what you expect = instead? I had attached some screen grabs in my initial email, if they don=E2=80=99= t show up on your end they do show up on the web archives: = https://lists.gnu.org/archive/html/bug-gnu-emacs/2023-02/msg01638.html. The key differences are: 1. `foo()` (i.e. a function definition) is light-blue. 2. `bar()`, and `baz()` (function calls) are dark blue. 3. The member function call `b.mem_func()` highlights the `mem_func()` = part in red. On the other hand, the builtin tree sitter mode font-locks them all = using the same light-blue color. Indeed performing M-x describe-face = over each separate part yields only `font-lock-function-name-face` for = builtin, while 3rd party returns separate faces (which are available to = customize) for each case. I looked through `c-ts-mode.el` as an example and found = `c-ts-mode--font-lock-settings`. Treesitter already identifies all of = the above cases as different nodes in the AST (as evidenced in = treesit-explor-mode) so it seems that adding another set of matchers = (and appropriate faces, e.g. font-lock-function-call-face) :language mode :feature 'label '((call_expression function: (identifier) @font-lock-function-call-face)) Should do the trick no? Best regards, Jacob Faibussowitsch (Jacob Fai - booss - oh - vitch) > On Feb 20, 2023, at 15:24, Theodor Thornhill = wrote: >=20 > Eli Zaretskii writes: >=20 >>> From: Jacob Faibussowitsch >>> Date: Mon, 20 Feb 2023 10:54:42 -0500 >>>=20 >>> Is it possible to have the builtin tree sitter give differentiate = font-locking for function calls and function definitions? >>=20 >> AFAIU, it already does. Yuan and Theo, am I wrong? >=20 > You're not wrong, but it depends on each implementation whether or not > the definition gets a different color or not. Jacob, do you have any > examples where it is wrong and what you expect instead? >=20 > Theo From unknown Mon Jun 23 18:33:58 2025 X-Loop: help-debbugs@gnu.org Subject: bug#61655: [Tree sitter] [Feature Request] font-lock function calls, definitions, separately References: <8DA1B548-B8D2-4EC1-B9F8-F7654003AC89@gmail.com> In-Reply-To: <8DA1B548-B8D2-4EC1-B9F8-F7654003AC89@gmail.com> Resent-From: Yuan Fu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 21 Feb 2023 08:29:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 61655 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: jacob.fai@gmail.com Cc: 61655@debbugs.gnu.org Received: via spool by 61655-submit@debbugs.gnu.org id=B61655.167696813731405 (code B ref 61655); Tue, 21 Feb 2023 08:29:02 +0000 Received: (at 61655) by debbugs.gnu.org; 21 Feb 2023 08:28:57 +0000 Received: from localhost ([127.0.0.1]:54468 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pUO1B-0008AS-Fv for submit@debbugs.gnu.org; Tue, 21 Feb 2023 03:28:57 -0500 Received: from mail-pj1-f45.google.com ([209.85.216.45]:53792) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pUO18-0008AB-TC for 61655@debbugs.gnu.org; Tue, 21 Feb 2023 03:28:56 -0500 Received: by mail-pj1-f45.google.com with SMTP id o16so4006093pjp.3 for <61655@debbugs.gnu.org>; Tue, 21 Feb 2023 00:28:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=to:cc:date:message-id:subject:mime-version :content-transfer-encoding:from:from:to:cc:subject:date:message-id :reply-to; bh=1Vlqc6JlF3lnCJ/PFm5jwXi16qTXzO1NH5fIZTZRefw=; b=G9ttertEPhFSqqnRV7RCCru1HjJBjH3KmKV/iS8Cj4rz+CznaCrPbnGff+1H3XMAie Z+c45IxqmI1L9y16qFWgA/ALddsh2bw9YmeqR2qTNJ9/dP1BAokPAqicwPV4tv4mEcaY 1RcXjDxCFXMQbYXgKf0bjrEFGPVwu0mcBhrjch/MwQUyRuXlXfbTc1GBmfWzNX/ENTWK sxiS11Pxtv+1qYDORlEm2KGEO8wpED8FdYzU5IbbajtwAe+qxbraNTGB/aFNgOblx+b3 myryoN1h5yYkznJJ8xuJEEeqAy9rm0BXn2Br32Q1J3avzK/QwdH2Cf9Z+k3eo7n75A+X jsVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:cc:date:message-id:subject:mime-version :content-transfer-encoding:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1Vlqc6JlF3lnCJ/PFm5jwXi16qTXzO1NH5fIZTZRefw=; b=szFBdCDqlN9+ZboNmT/3H96Ejpn2Ip+mWd5vfJ4dKi8roaNckhshtaurXIVyjVcr09 qRS9RxTrBMSHSFQAoOX1JVKa9XaEtzANKEortI4ytFHFDEBpZUl4//6NehYq/3sr6cpD iJC6gAHvAfe4n/XT8uxeC/qQdqcdb2E61eOxqFEXWf/3Q3Q5EXuehcSz7+Favlp2Jfam haHpaxs93x5qdVJ2JWfeYKOHTKZmWhyLZYN5W425hkrAUSktsXoWnIoySrPxtblIPoHa nQV3KAFRhA2jxy8GX/GKMokcD97rGNayZdmlytKkNtKOUGkj2/zjITBfEdOjHvwmUxMs s+3A== X-Gm-Message-State: AO0yUKXhpYXGu0otYz3PALB3c7Uc05SqEgf/AkOzkiMQXDZvGc2PvrIp WGFGy1Y02rsB1son+/oie6U= X-Google-Smtp-Source: AK7set9gHl74xGFZqVDje3vkbSLDZsbESm6srt98fnQ0zO+0tRRbg/PT0Kpbv5+KBzLmNdO5kFyQkg== X-Received: by 2002:a05:6a21:998b:b0:c7:6571:2341 with SMTP id ve11-20020a056a21998b00b000c765712341mr4085659pzb.48.1676968128764; Tue, 21 Feb 2023 00:28:48 -0800 (PST) Received: from smtpclient.apple (cpe-172-117-161-177.socal.res.rr.com. [172.117.161.177]) by smtp.gmail.com with ESMTPSA id y26-20020a62b51a000000b00592417157f2sm9175590pfe.148.2023.02.21.00.28.48 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Feb 2023 00:28:48 -0800 (PST) From: Yuan Fu Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3731.300.101.1.3\)) Message-Id: Date: Tue, 21 Feb 2023 00:28:37 -0800 X-Mailer: Apple Mail (2.3731.300.101.1.3) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Jacob Faibussowitsch writes: > Hello, > > Is it possible to have the builtin tree sitter give differentiate = font-locking for function calls and function definitions? > > The 3rd party tree-sitter package = (https://github.com/emacs-tree-sitter/elisp-tree-sitter) has this = feature and it is quite > nice. In fact it goes further, allowing you to additionally = distinguish between builtin calls, macro calls, method calls, etc. > (see = https://github.com/emacs-tree-sitter/elisp-tree-sitter/blob/master/lisp/tr= ee-sitter-hl.el). > > As far as I could see, the builtin mode only provides = `font-lock-function-name-face`. I have set treesit-font-lock-level to > 4.=20 > > Examples below are for C/C++ mode, but this would apply to any number = of languages. > > Desired (i.e. what 3rd party package produces): > > * > > Current: > > * Hmmm, yeah. The builtin tree-sitter maps syntax queries directly into faces, where the third-party tree-sitter maps syntax queries to some syntax types, then maps types to faces. So it would be a bit harder to do fine-grained control like in the builtin tree-sitter, comparing to the third-party one. I=E2=80=99ve thought of this idea before but didn=E2=80=99t pursue it = further: Right now we allow capture names to be face names and functions, eg (commment) @font-lock-comment-face or (comment) @xxx-moode-fortify-comment Maybe we can add a third type, arbitrary symbols, like (comment) @comment and add a variables treesit-font-lock-mapping which maps symbols to faces or functions: ((comment . font-lock-comment-face)) or ((comment . xxx-mode-fontify-comment)) Then we can easily support differentiating between function call and function definition. Yuan From unknown Mon Jun 23 18:33:58 2025 X-Loop: help-debbugs@gnu.org Subject: bug#61655: [Tree sitter] [Feature Request] font-lock function calls, definitions, separately Resent-From: Dmitry Gutov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 21 Feb 2023 09:56:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 61655 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Yuan Fu , jacob.fai@gmail.com Cc: 61655@debbugs.gnu.org Received: via spool by 61655-submit@debbugs.gnu.org id=B61655.16769733298333 (code B ref 61655); Tue, 21 Feb 2023 09:56:01 +0000 Received: (at 61655) by debbugs.gnu.org; 21 Feb 2023 09:55:29 +0000 Received: from localhost ([127.0.0.1]:54563 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pUPMv-0002AK-94 for submit@debbugs.gnu.org; Tue, 21 Feb 2023 04:55:29 -0500 Received: from mail-wr1-f53.google.com ([209.85.221.53]:33405) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pUPMt-0002A0-8k for 61655@debbugs.gnu.org; Tue, 21 Feb 2023 04:55:28 -0500 Received: by mail-wr1-f53.google.com with SMTP id bo30so3182524wrb.0 for <61655@debbugs.gnu.org>; Tue, 21 Feb 2023 01:55:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :sender:from:to:cc:subject:date:message-id:reply-to; bh=PXivJX+u/xIwGbEsiRZ+ek67sScMklSdCvoCFipiWog=; b=WvLsjnqGu3xYxsMwiG25ftxE6I6W1HVXdzTKN2Dx5pi9gdievXUBn6OeaxEtKHbSXm e8dbyT1j7WvPEWqfDZTDZroKLRILTJQvxYHLD+IVorHYRXa6oRnMchquwWU9G6ET1ErC hyWCFT8nIp+ph1VubiyWoNxn++TGjQrhAHj3ExKl4eY3x8UMWZUNiLV2kQEM2hP9ghdZ QeEBlikL+9KFXgMMuFRBUxoBolSDnsbvu06I8fYro3ZXTybGqeShu/u7KvmeLvQtLxH7 lALdnPtgu6KDQfdjBc8/mC34anElBWz+KStDzSQ7Ya+cmb76zS50qgaxIUcmtZkTTEpe ujuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :sender:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=PXivJX+u/xIwGbEsiRZ+ek67sScMklSdCvoCFipiWog=; b=g+cZp4qOsaSFL4c96ARNo65CDq8Ev5NCkCQl77oOTqT2dRqlYrbAsTNBZuYyxDIfgy WAwFDzmBgRD6zf+qjcWGBsGWXmO0KyzgvPL4uD1au+Y988QL+1VXPuSO26GhIytSXsmd BQf8mIYC5p1DtWL6nJB9jgV3Y1KNie8vVrLA+z9x9Zza2F1Zbhs46Ib5edvPzZA+3xWy clTxT0gJ3b6azp8ABRJmrxH7xrpZJP0rxHSCHhx+QXNVVhkbgDz5lGapf6rudn2WV5iI lakkru0ancH+DV3GaU+Ziolt5J/xr5b2Kmc/wtv02TaL30YTHCrwjDQ+Gu7y8EiDLT8v gu7w== X-Gm-Message-State: AO0yUKVWpQL6L5lppwII5QwuLyEUbAKTw7nogLhV5oSt6MMVrVbJckhF UsIF9tNTo4e8q3i4xhHfo4Y= X-Google-Smtp-Source: AK7set+OZH0ELmMUQ5hOzThu/MJ3mr3YBa/x81QTat3UaeAR4fTlqvxWySLxfsXXQLTGFQ6gMaykww== X-Received: by 2002:a05:6000:2ce:b0:2c5:519f:307a with SMTP id o14-20020a05600002ce00b002c5519f307amr4683426wry.30.1676973321512; Tue, 21 Feb 2023 01:55:21 -0800 (PST) Received: from [192.168.0.2] ([46.251.119.176]) by smtp.googlemail.com with ESMTPSA id h7-20020a5d6887000000b002c5501a5803sm2123325wru.65.2023.02.21.01.55.20 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 21 Feb 2023 01:55:21 -0800 (PST) Message-ID: Date: Tue, 21 Feb 2023 11:55:19 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 Content-Language: en-US References: <8DA1B548-B8D2-4EC1-B9F8-F7654003AC89@gmail.com> From: Dmitry Gutov In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Spam-Score: -0.9 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.9 (-) On 21/02/2023 10:28, Yuan Fu wrote: > Hmmm, yeah. The builtin tree-sitter maps syntax queries directly into > faces, where the third-party tree-sitter maps syntax queries to some > syntax types, then maps types to faces. So it would be a bit harder to > do fine-grained control like in the builtin tree-sitter, comparing to > the third-party one. > > I’ve thought of this idea before but didn’t pursue it further: Right now > we allow capture names to be face names and functions, eg > > (commment) @font-lock-comment-face > > or > > (comment) @xxx-moode-fortify-comment > > Maybe we can add a third type, arbitrary symbols, like > > (comment) @comment > > and add a variables treesit-font-lock-mapping which maps symbols to > faces or functions: > > ((comment . font-lock-comment-face)) > > or > > ((comment . xxx-mode-fontify-comment)) > > Then we can easily support differentiating between function call and > function definition. Before we do any of that, don't we need actual different faces to use for e.g. function definitions and function calls? Same for variables. And if we have those, we might not need the indirection, at least not right away. I figured we'd add them in Emacs 30, but it's a relatively small change, if people are interested. From unknown Mon Jun 23 18:33:58 2025 X-Loop: help-debbugs@gnu.org Subject: bug#61655: [Tree sitter] [Feature Request] font-lock function calls, definitions, separately Resent-From: Jacob Faibussowitsch Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 21 Feb 2023 15:32:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 61655 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Dmitry Gutov Cc: Yuan Fu , 61655@debbugs.gnu.org Received: via spool by 61655-submit@debbugs.gnu.org id=B61655.167699348921458 (code B ref 61655); Tue, 21 Feb 2023 15:32:01 +0000 Received: (at 61655) by debbugs.gnu.org; 21 Feb 2023 15:31:29 +0000 Received: from localhost ([127.0.0.1]:57062 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pUUc5-0005a1-7k for submit@debbugs.gnu.org; Tue, 21 Feb 2023 10:31:29 -0500 Received: from mail-qt1-f175.google.com ([209.85.160.175]:39636) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pUUc0-0005Zh-VM for 61655@debbugs.gnu.org; Tue, 21 Feb 2023 10:31:27 -0500 Received: by mail-qt1-f175.google.com with SMTP id w23so4681217qtn.6 for <61655@debbugs.gnu.org>; Tue, 21 Feb 2023 07:31:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=8f7/Q8hIHUN9XARlh7zuEIt+JoeetpULBXx3sAS78OQ=; b=o60QfgFYVq734Ie8iO6KVB/Mnj5fkd58xG9dMwHQzCPSFuMwqN3CLk5LU1WlyvsGov BvNsv25nVyyEua7wAxGvPVeFiC5ljM40GEQXLvipkAurUGopYHJkBSN2LkwGkLdXjafy NLAPNgVoROhyOQS5cLQFCWTZdhhEaq22h3lwbJ9MCJupHZIeGmkwX4CeH3xSrFooryGF Uhf8eYSJaarV7sxi+n0s0YlpzJrdRgTWJHeh/7ER4RSBgV6RBamKmnIx5v4vP7gX+Jm6 yZUD+nIKsHwdBqu8TWt82w7jRKvDX7yLQDrH6G/FhnWIwsnboiLsSXEytHMpvsxtK+YI i7lQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=8f7/Q8hIHUN9XARlh7zuEIt+JoeetpULBXx3sAS78OQ=; b=kyDPyi7rUaMQjTjpv/2rcUWB777oa33miqmm3RbTewF8NJgb0XKjErr9a9MYnq2c5I fgdRrHPZuaZ4brauvbAS3Yq0eJwXCy31lDCyzV3sfYn/fy1KU9FYQa2rwNCvxjbRkm90 t/QmKYIlmJmB5nxa0qHTLlw7qQD359PL+JjOgU1LW/1XsVU5O54/uWCjp27vyQQ8wFw9 kUsSy/aCRq1KnYfhtyoC00fb+4ZI0XBl+27wfNb6IeBtsA05pYHAl5utPFhyBuLT6Ezl e6PACdGhdxbVDzZ2FTvLLpqUzBzhxxMQXWuiUfITXWTJcMbIlYXZOcNhulWFm/WhGikf XF3w== X-Gm-Message-State: AO0yUKVCxgKwrDmpEHyRaTIuPgIKbRIqP/9WGoscW8SbgX8Lbhz/6pp2 rsxuLDqaqSKOZPan26eWyjA= X-Google-Smtp-Source: AK7set/EQ/wDRv44nA0++7JY4GuAMC5O7dzsZDB0MWJFlUbtbXXvEv2fH80pnY0jge3Ns+mEk/CPow== X-Received: by 2002:ac8:5d88:0:b0:3b8:29f6:8ac6 with SMTP id d8-20020ac85d88000000b003b829f68ac6mr19255010qtx.12.1676993479319; Tue, 21 Feb 2023 07:31:19 -0800 (PST) Received: from smtpclient.apple (pool-108-21-63-133.nycmny.fios.verizon.net. [108.21.63.133]) by smtp.gmail.com with ESMTPSA id 26-20020ac8209a000000b003bd16200d6esm2116819qtd.46.2023.02.21.07.31.17 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Feb 2023 07:31:18 -0800 (PST) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.120.41.1.2\)) From: Jacob Faibussowitsch In-Reply-To: Date: Tue, 21 Feb 2023 10:31:17 -0500 Content-Transfer-Encoding: quoted-printable Message-Id: <56C0998E-3053-49F3-BAE3-46D6432B16F5@gmail.com> References: <8DA1B548-B8D2-4EC1-B9F8-F7654003AC89@gmail.com> X-Mailer: Apple Mail (2.3696.120.41.1.2) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > but it's a relatively small change, Indeed, after playing around with the syntax queries a bit more, all = that is needed to implement this change is the following patch. Note for the new faces that I populated the `:foreground` fields to = match the colors for the example I showed in my first email, but maybe a = better default is to leave these faces totally blank and just purely = `:inherit` from `font-lock-function-name-face`. diff --git a/lisp/font-lock.el b/lisp/font-lock.el index 9e944fe188a..d170123c2ca 100644 --- a/lisp/font-lock.el +++ b/lisp/font-lock.el @@ -2026,6 +2026,16 @@ font-lock-function-name-face "Font Lock mode face used to highlight function names." :group 'font-lock-faces) =20 +(defface font-lock-function-call-face + '((t :inherit font-lock-function-name-face :foreground "royalblue1")) + "Font Lock mode face used to highlight function calls." + :group 'font-lock-faces) + +(defface font-lock-member-function-call-face + '((t :inherit font-lock-function-name-face :foreground "brightred")) + "Font Lock mode face used to highlight member function calls." + :group 'font-lock-faces) + (defface font-lock-variable-name-face '((((class grayscale) (background light)) :foreground "Gray90" :weight bold :slant italic) diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el index b7a487687a8..51a65aa6545 100644 --- a/lisp/progmodes/c-ts-mode.el +++ b/lisp/progmodes/c-ts-mode.el @@ -529,8 +529,8 @@ c-ts-mode--font-lock-settings :feature 'function '((call_expression function: - [(identifier) @font-lock-function-name-face - (field_expression field: (field_identifier) = @font-lock-function-name-face)])) + [(identifier) @font-lock-function-call-face + (field_expression field: (field_identifier) = @font-lock-member-function-call-face)])) =20 :language mode :feature 'variable Best regards, Jacob Faibussowitsch (Jacob Fai - booss - oh - vitch) > On Feb 21, 2023, at 04:55, Dmitry Gutov wrote: >=20 > On 21/02/2023 10:28, Yuan Fu wrote: >> Hmmm, yeah. The builtin tree-sitter maps syntax queries directly into >> faces, where the third-party tree-sitter maps syntax queries to some >> syntax types, then maps types to faces. So it would be a bit harder = to >> do fine-grained control like in the builtin tree-sitter, comparing to >> the third-party one. >> I=E2=80=99ve thought of this idea before but didn=E2=80=99t pursue it = further: Right now >> we allow capture names to be face names and functions, eg >> (commment) @font-lock-comment-face >> or >> (comment) @xxx-moode-fortify-comment >> Maybe we can add a third type, arbitrary symbols, like >> (comment) @comment >> and add a variables treesit-font-lock-mapping which maps symbols to >> faces or functions: >> ((comment . font-lock-comment-face)) >> or >> ((comment . xxx-mode-fontify-comment)) >> Then we can easily support differentiating between function call and >> function definition. >=20 > Before we do any of that, don't we need actual different faces to use = for e.g. function definitions and function calls? >=20 > Same for variables. >=20 > And if we have those, we might not need the indirection, at least not = right away. >=20 > I figured we'd add them in Emacs 30, but it's a relatively small = change, if people are interested. From unknown Mon Jun 23 18:33:58 2025 X-Loop: help-debbugs@gnu.org Subject: bug#61655: [Tree sitter] [Feature Request] font-lock function calls, definitions, separately Resent-From: Dmitry Gutov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 21 Feb 2023 23:25:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 61655 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Jacob Faibussowitsch Cc: Randy Taylor , Yuan Fu , 61655@debbugs.gnu.org Received: via spool by 61655-submit@debbugs.gnu.org id=B61655.16770219003240 (code B ref 61655); Tue, 21 Feb 2023 23:25:02 +0000 Received: (at 61655) by debbugs.gnu.org; 21 Feb 2023 23:25:00 +0000 Received: from localhost ([127.0.0.1]:57467 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pUc0J-0000qC-Ug for submit@debbugs.gnu.org; Tue, 21 Feb 2023 18:25:00 -0500 Received: from mail-wm1-f43.google.com ([209.85.128.43]:55230) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pUc0I-0000py-0a for 61655@debbugs.gnu.org; Tue, 21 Feb 2023 18:24:58 -0500 Received: by mail-wm1-f43.google.com with SMTP id p26so4413126wmc.4 for <61655@debbugs.gnu.org>; Tue, 21 Feb 2023 15:24:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :sender:from:to:cc:subject:date:message-id:reply-to; bh=RV37ORC/xt6BE0sr3UcSOKIMNfq2kBLQPdErwM7U/tw=; b=ETeh3rhgvXgY5OFrqsGoKgxF2XhkzrReMZllXBlJ5v10VmI9voLtQW4SAB2DkvzTQA kXbR2agiF2duaYqrxWgaA6aG71qCLfYBsepCDKXvNMb/9eZUWKKJRj30t8BMdptDAXJD WKP71JA8DUAaPWEuJJnkVD4BHvo8veUss0Q+X9xnDmRYJaLadSLmH6oICBWohu6U/0uz aT5q1pmSgpy1nxPh2zBU+BQ8l1Yex0p/VcmxfnQ774hcyNbLz+biZBUld2kKlNRsquk1 ucVxN0wZ53GqiDIjnb4tztHmvHnH0+IRdrgsZS23Tekjz+3GEOJqWl2RbGINOJj/CdrH JQGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :sender:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=RV37ORC/xt6BE0sr3UcSOKIMNfq2kBLQPdErwM7U/tw=; b=eHz/WkIdei6Pkg1H30zbnXTVx7qgbdEI1qBLBm0hfvZptD/9SyJc+xOxLbXsWrfDaM SCwUUp9l3g2sLIhT3pqOg6NIAue4OnN+1lfgTzdM+lVz8kWWNmHb//Xe2jKQJeXFbrhR iaXFJpM2IQ2CvmEQoadUyXnZlU9+aw7m2leEtg64A55BYFeyYg6EPHIJBw4/uo3kZtV2 sX1PyV+YIAnsYJ3OrhxxtrEj8ALtHtMT74vo3y4fxj3fRIrV168rwmbM3m5/drp8LpW1 KA1BGoPx/WQzveiV9GobAUwIHuehHYjLXIgOKBVfku9e96NGTIxb+a6QvOCHdx4oFwIb NFXw== X-Gm-Message-State: AO0yUKXl8pWOh85Y5Pz7D1K/UacVVwDnPvL/36bWYCpHQI8fn+JFi9hP SanLJiCdws0rf2yqJKMomgs= X-Google-Smtp-Source: AK7set/t+8vVKMCQCiO0FxD2A+YqZ6//az4Oar3wQNWv1Zj/w9NEEZ6oL5vf9Qda4svRiST74oO6Mw== X-Received: by 2002:a05:600c:4495:b0:3df:b5ae:5289 with SMTP id e21-20020a05600c449500b003dfb5ae5289mr4514288wmo.8.1677021890957; Tue, 21 Feb 2023 15:24:50 -0800 (PST) Received: from [192.168.0.2] ([46.251.119.176]) by smtp.googlemail.com with ESMTPSA id t4-20020adff044000000b002c5694aef92sm5430310wro.21.2023.02.21.15.24.49 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 21 Feb 2023 15:24:50 -0800 (PST) Message-ID: Date: Wed, 22 Feb 2023 01:24:48 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 Content-Language: en-US References: <8DA1B548-B8D2-4EC1-B9F8-F7654003AC89@gmail.com> <56C0998E-3053-49F3-BAE3-46D6432B16F5@gmail.com> From: Dmitry Gutov In-Reply-To: <56C0998E-3053-49F3-BAE3-46D6432B16F5@gmail.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Score: -0.9 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.9 (-) On 21/02/2023 17:31, Jacob Faibussowitsch wrote: > but maybe a better default is to leave these faces totally blank and > just purely `:inherit` from `font-lock-function-name-face` I believe so. > +(defface font-lock-function-call-face > + '((t :inherit font-lock-function-name-face :foreground "royalblue1")) > + "Font Lock mode face used to highlight function calls." > + :group 'font-lock-faces) This one I was thinking of as well. > +(defface font-lock-member-function-call-face > + '((t :inherit font-lock-function-name-face :foreground "brightred")) > + "Font Lock mode face used to highlight member function calls." > + :group 'font-lock-faces) What's a "member function"? Is it like a method? If people want this distinction, we can add such face. But I'm curious whether some other editors use different colors for these cases. I'm also wondering what face we're supposed to use for "receiver-less" method calls, such as calls to the methods defined in the same class, in e.g. Ruby and Java. Or C++/C#. They don't use 'this'. I think more importantly, we need a new face for variables. font-lock-variable-ref-face ? I also wonder whether we'll need to separate faces for properties: definitions vs. uses. That one we could use to do early, to keep the names uniform, e.g. we'd have: font-lock-function-name-face font-lock-function-call-face font-lock-variable-name-face font-lock-variable-ref-face font-lock-property-name-face font-lock-property-ref-face From unknown Mon Jun 23 18:33:58 2025 X-Loop: help-debbugs@gnu.org Subject: bug#61655: [Tree sitter] [Feature Request] font-lock function calls, definitions, separately Resent-From: Jacob Faibussowitsch Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 22 Feb 2023 18:08:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 61655 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Dmitry Gutov Cc: Randy Taylor , Yuan Fu , 61655@debbugs.gnu.org Received: via spool by 61655-submit@debbugs.gnu.org id=B61655.16770892658102 (code B ref 61655); Wed, 22 Feb 2023 18:08:01 +0000 Received: (at 61655) by debbugs.gnu.org; 22 Feb 2023 18:07:45 +0000 Received: from localhost ([127.0.0.1]:60300 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pUtWq-00026a-Sm for submit@debbugs.gnu.org; Wed, 22 Feb 2023 13:07:45 -0500 Received: from mail-qt1-f172.google.com ([209.85.160.172]:34485) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pUtWl-00026F-WD for 61655@debbugs.gnu.org; Wed, 22 Feb 2023 13:07:43 -0500 Received: by mail-qt1-f172.google.com with SMTP id b6so2244619qtb.1 for <61655@debbugs.gnu.org>; Wed, 22 Feb 2023 10:07:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=aXw+7ZfR/B9wHVczz/ZrFfMc+zGj7gfZ1+3vQA6Fthg=; b=Rp7hhHEnMSIfvhCHE0yYovSKEgl+3LZq252CtwJ7BJkSF+obb9w1Y7FI/hG8xZPLJg CBUbrBPJmfJfimjPD2CRbC/7rsOr3sU3189RhjmuUizjS9aRUJm9dFCYH5La4UCpiH5y Mw+PzZDomuTH9oOZ9kucDwYR3yj90leW7MfSXJaYEVnh4IniTqguDihM7aJyDBwjVPwI w/DdlxidP0utLyjUxrlHMUdL2/NWnRvz1gdIRa/mRURzxtnHd6VX7IXbR9O9AHx4kRRj 4OpnOEFfoaKoqUBTFZ2SPVQrJu6bT71Wu02osCdS9gaHEs+Gd2NyMIUFBAdq6w1bWbsf 6Jtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=aXw+7ZfR/B9wHVczz/ZrFfMc+zGj7gfZ1+3vQA6Fthg=; b=pmDbOhrQoHU8KZzLEeYUXwrVELqFEpCRoBU3Di7g5bvdaSDnEg2ivneGpd2ul+UKEA 6b07x5PUGjqhYNgXDS+WiCbt99niij43PXV/QY+Qwsp1ex3OEfxSbr92UFkGZb+e5YVS T496CY2NXng7l4nsyjBZGql2QclvD/3QZB2d81va3V0IouuoYANaGXJapPQlMSI9N8vu UvilT3LeQIGaXSwQh8oKDYC7Nbd1NBrWrRbr6YVPYmutGFVLeUKBN2uldzmpov4tIXin lfoER4PnN5t/Sw7Qh5VL7FvbO/qMBGvoP8WMOfuq5OaFBDDm5P6azTLxNVzxTKievFUB /EfQ== X-Gm-Message-State: AO0yUKXcw8Txq8Sqwk3/yknRbWBvxMr0X39OQAaX+j61wat8jEWjnCIt 3kCuyiH1oh5xJnSstk1Gi9M= X-Google-Smtp-Source: AK7set8SgZYJmnrBox3NFi8tIXLp6Wb+wURZNfsamctESVm236zH0au8/a4YhmeNCnHMdGTVXl21uw== X-Received: by 2002:a05:622a:1188:b0:3b6:2c58:cbcf with SMTP id m8-20020a05622a118800b003b62c58cbcfmr16290033qtk.4.1677089254216; Wed, 22 Feb 2023 10:07:34 -0800 (PST) Received: from smtpclient.apple (pool-108-21-63-133.nycmny.fios.verizon.net. [108.21.63.133]) by smtp.gmail.com with ESMTPSA id b14-20020ac801ce000000b003ba11bfe4fcsm2094200qtg.28.2023.02.22.10.07.33 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 22 Feb 2023 10:07:33 -0800 (PST) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.120.41.1.2\)) From: Jacob Faibussowitsch In-Reply-To: Date: Wed, 22 Feb 2023 13:07:32 -0500 Content-Transfer-Encoding: quoted-printable Message-Id: <7B23CCBC-9B9F-4E1A-AE5F-0DBDD2FE2C26@gmail.com> References: <8DA1B548-B8D2-4EC1-B9F8-F7654003AC89@gmail.com> <56C0998E-3053-49F3-BAE3-46D6432B16F5@gmail.com> X-Mailer: Apple Mail (2.3696.120.41.1.2) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > What's a "member function"? Is it like a method? Yeah, I suppose method is the more general term for it. > If people want this distinction, we can add such face. But I'm curious = whether some other editors use different colors for these cases. I personally do not; I brought it up because it was functionality that = the 3rd party package had over stock. I think a good representative list = is the one vscode offers: = https://code.visualstudio.com/api/language-extensions/semantic-highlight-g= uide#standard-token-types-and-modifiers > I'm also wondering what face we're supposed to use for "receiver-less" = method calls, such as calls to the methods defined in the same class, in = e.g. Ruby and Java. Or C++/C#. They don't use =E2=80=98this=E2=80=99. I don=E2=80=99t think emacs should worry about differentiating these = cases. Highlight those tokens as tree-sitter sees them; regular function = calls (i.e. `font-lock-function-call-face`). It=E2=80=99s a problem you = cannot accurately solve without playing the compiler =E2=80=94 with all = of the implementation and not to mention performance baggage that comes = with it. > I also wonder whether we'll need to separate faces for properties: = definitions vs. uses. That one we could use to do early, to keep the = names uniform, e.g. we'd have: This is something (also 3rd party package) lsp-mode supports through = their semantic highlighting. They further distinguish between read and = writes to variables. But again, they are able to do so because they hook = directly into compilers. Best regards, Jacob Faibussowitsch (Jacob Fai - booss - oh - vitch) > On Feb 21, 2023, at 18:24, Dmitry Gutov wrote: >=20 > On 21/02/2023 17:31, Jacob Faibussowitsch wrote: > > but maybe a better default is to leave these faces totally blank and > > just purely `:inherit` from `font-lock-function-name-face` >=20 > I believe so. >=20 >> +(defface font-lock-function-call-face >> + '((t :inherit font-lock-function-name-face :foreground = "royalblue1")) >> + "Font Lock mode face used to highlight function calls." >> + :group 'font-lock-faces) >=20 > This one I was thinking of as well. >=20 >> +(defface font-lock-member-function-call-face >> + '((t :inherit font-lock-function-name-face :foreground = "brightred")) >> + "Font Lock mode face used to highlight member function calls." >> + :group 'font-lock-faces) >=20 > What's a "member function"? Is it like a method? If people want this = distinction, we can add such face. But I'm curious whether some other = editors use different colors for these cases. >=20 > I'm also wondering what face we're supposed to use for "receiver-less" = method calls, such as calls to the methods defined in the same class, in = e.g. Ruby and Java. Or C++/C#. They don't use 'this'. >=20 > I think more importantly, we need a new face for variables. >=20 > font-lock-variable-ref-face ? >=20 > I also wonder whether we'll need to separate faces for properties: = definitions vs. uses. That one we could use to do early, to keep the = names uniform, e.g. we'd have: >=20 > font-lock-function-name-face > font-lock-function-call-face > font-lock-variable-name-face > font-lock-variable-ref-face > font-lock-property-name-face > font-lock-property-ref-face From unknown Mon Jun 23 18:33:58 2025 X-Loop: help-debbugs@gnu.org Subject: bug#61655: [Tree sitter] [Feature Request] font-lock function calls, definitions, separately Resent-From: Yuan Fu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 22 Feb 2023 20:46:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 61655 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Jacob Faibussowitsch Cc: 61655@debbugs.gnu.org, Dmitry Gutov Received: via spool by 61655-submit@debbugs.gnu.org id=B61655.167709874524259 (code B ref 61655); Wed, 22 Feb 2023 20:46:02 +0000 Received: (at 61655) by debbugs.gnu.org; 22 Feb 2023 20:45:45 +0000 Received: from localhost ([127.0.0.1]:60486 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pUvzk-0006JC-Qe for submit@debbugs.gnu.org; Wed, 22 Feb 2023 15:45:45 -0500 Received: from mail-pf1-f181.google.com ([209.85.210.181]:40842) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pUvzi-0006Iy-CD for 61655@debbugs.gnu.org; Wed, 22 Feb 2023 15:45:43 -0500 Received: by mail-pf1-f181.google.com with SMTP id u20so2422737pfm.7 for <61655@debbugs.gnu.org>; Wed, 22 Feb 2023 12:45:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=M4F4HTgSA1ilIoVUDpKJ+lOlNqvffgi3DcfFHREUrUA=; b=Np7WKKVXcTPmVc7/kqnBwgVoX4rJbClcT2xf6Cu2FHgiu0KfmCLFVo0ThFDDt6WZus jEwIRd/L2OoQwXXsIDuUCxnZ04EzocAyJ5rOahYS4vzDEiHU2DRbbNo4oy5Y2Aqh/EsZ F3M0oTif0Asmy8b1jfL2ZlHPetBWu92haogw8fJlyj4WuJe7IJVG7r0GdfmtT0Xtt4e1 vkOaZuMmlbhAJ5EaNpMu6SMiPodLiOG8H/cJDOK3nzxHxBi5lCuAcZJFMSDN+WGZs13+ 7iX/c5dhbmtx3QawuZR9a+umkgwvnTds3sscpiqAL/zrxKvUrzWiotpxQetBON8OUHpl fLsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=M4F4HTgSA1ilIoVUDpKJ+lOlNqvffgi3DcfFHREUrUA=; b=OSnkQjvOsbdGbU7vaBlbG7TDcfyJEOwXBBeO7BBEbGA66W1mz8C0tDJpoWPf+SFcUU SyZHyrkRUbn9gRgEV3EPX2+A7bU/euVEi0jeGEI8tftDjlcKakuThyemtUIgTPpCXpGY yuGtHTxGxurlExQIizpPa9V1NVpvLVDcBFISkpROJ0uNYudbhjdnHRXHE2GClOS2aFce 26W6kv1WeIGR8K/lkvupwU5E+forrsHkjuu25RBvZj9U/hVXob0i67Bf960ww9I3oiDr 4r4skYQ7FxP+HB+RggSigUhGcPgRfNq3GY88TLmo5zueVRQRW99abQnJOveJGxmRb1pE eMlw== X-Gm-Message-State: AO0yUKWwu4F8dloqOMWFjopJslTA5GKiIvdHnaW0x3RNMYap2naXzi2L 5DODzjJF9gHeo1h07mRA1M8= X-Google-Smtp-Source: AK7set+u4jBTs0hrpkR79hPvRY5bkWYm2mYXtujDUlyd46HPR1xb5KebrNcOrBnwkNi3kfYQZB3Eag== X-Received: by 2002:a05:6a00:1d86:b0:5a8:4ae7:25d5 with SMTP id z6-20020a056a001d8600b005a84ae725d5mr7475395pfw.8.1677098736357; Wed, 22 Feb 2023 12:45:36 -0800 (PST) Received: from smtpclient.apple (cpe-172-117-161-177.socal.res.rr.com. [172.117.161.177]) by smtp.gmail.com with ESMTPSA id g11-20020aa7818b000000b00588e0d5124asm5453563pfi.160.2023.02.22.12.45.35 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 22 Feb 2023 12:45:35 -0800 (PST) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3731.400.51.1.1\)) From: Yuan Fu In-Reply-To: <56C0998E-3053-49F3-BAE3-46D6432B16F5@gmail.com> Date: Wed, 22 Feb 2023 12:45:24 -0800 Content-Transfer-Encoding: quoted-printable Message-Id: References: <8DA1B548-B8D2-4EC1-B9F8-F7654003AC89@gmail.com> <56C0998E-3053-49F3-BAE3-46D6432B16F5@gmail.com> X-Mailer: Apple Mail (2.3731.400.51.1.1) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > On Feb 21, 2023, at 7:31 AM, Jacob Faibussowitsch = wrote: >=20 >> but it's a relatively small change, >=20 > Indeed, after playing around with the syntax queries a bit more, all = that is needed to implement this change is the following patch. >=20 > Note for the new faces that I populated the `:foreground` fields to = match the colors for the example I showed in my first email, but maybe a = better default is to leave these faces totally blank and just purely = `:inherit` from `font-lock-function-name-face`. >=20 > diff --git a/lisp/font-lock.el b/lisp/font-lock.el > index 9e944fe188a..d170123c2ca 100644 > --- a/lisp/font-lock.el > +++ b/lisp/font-lock.el > @@ -2026,6 +2026,16 @@ font-lock-function-name-face > "Font Lock mode face used to highlight function names." > :group 'font-lock-faces) >=20 > +(defface font-lock-function-call-face > + '((t :inherit font-lock-function-name-face :foreground = "royalblue1")) > + "Font Lock mode face used to highlight function calls." > + :group 'font-lock-faces) > + > +(defface font-lock-member-function-call-face > + '((t :inherit font-lock-function-name-face :foreground = "brightred")) > + "Font Lock mode face used to highlight member function calls." > + :group 'font-lock-faces) > + > (defface font-lock-variable-name-face > '((((class grayscale) (background light)) > :foreground "Gray90" :weight bold :slant italic) > diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el > index b7a487687a8..51a65aa6545 100644 > --- a/lisp/progmodes/c-ts-mode.el > +++ b/lisp/progmodes/c-ts-mode.el > @@ -529,8 +529,8 @@ c-ts-mode--font-lock-settings > :feature 'function > '((call_expression > function: > - [(identifier) @font-lock-function-name-face > - (field_expression field: (field_identifier) = @font-lock-function-name-face)])) > + [(identifier) @font-lock-function-call-face > + (field_expression field: (field_identifier) = @font-lock-member-function-call-face)])) >=20 > :language mode > :feature 'variable >=20 > Best regards, >=20 > Jacob Faibussowitsch > (Jacob Fai - booss - oh - vitch) >=20 >> On Feb 21, 2023, at 04:55, Dmitry Gutov wrote: >>=20 >> On 21/02/2023 10:28, Yuan Fu wrote: >>> Hmmm, yeah. The builtin tree-sitter maps syntax queries directly = into >>> faces, where the third-party tree-sitter maps syntax queries to some >>> syntax types, then maps types to faces. So it would be a bit harder = to >>> do fine-grained control like in the builtin tree-sitter, comparing = to >>> the third-party one. >>> I=E2=80=99ve thought of this idea before but didn=E2=80=99t pursue = it further: Right now >>> we allow capture names to be face names and functions, eg >>> (commment) @font-lock-comment-face >>> or >>> (comment) @xxx-moode-fortify-comment >>> Maybe we can add a third type, arbitrary symbols, like >>> (comment) @comment >>> and add a variables treesit-font-lock-mapping which maps symbols to >>> faces or functions: >>> ((comment . font-lock-comment-face)) >>> or >>> ((comment . xxx-mode-fontify-comment)) >>> Then we can easily support differentiating between function call and >>> function definition. >>=20 >> Before we do any of that, don't we need actual different faces to use = for e.g. function definitions and function calls? >>=20 >> Same for variables. >>=20 >> And if we have those, we might not need the indirection, at least not = right away. >>=20 >> I figured we'd add them in Emacs 30, but it's a relatively small = change, if people are interested. >=20 Yeah that=E2=80=99s just an idea, and I don=E2=80=99t have problem = adding faces. But we probably can=E2=80=99t keep adding more and more = specific faces. At one point we=E2=80=99ll need to either add = indirection, or ask users to just add their own fontification rules, if = it is really specific. We=E2=80=99ll see.=20 Function definition & call is totally reasonable. But adapting all the = major modes to use them is might be too big a change for emacs-29. Yuan From unknown Mon Jun 23 18:33:58 2025 X-Loop: help-debbugs@gnu.org Subject: bug#61655: [Tree sitter] [Feature Request] font-lock function calls, definitions, separately Resent-From: Dmitry Gutov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 22 Feb 2023 21:39:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 61655 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Yuan Fu , Jacob Faibussowitsch Cc: 61655@debbugs.gnu.org Received: via spool by 61655-submit@debbugs.gnu.org id=B61655.167710189729762 (code B ref 61655); Wed, 22 Feb 2023 21:39:02 +0000 Received: (at 61655) by debbugs.gnu.org; 22 Feb 2023 21:38:17 +0000 Received: from localhost ([127.0.0.1]:60554 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pUwob-0007jy-Cg for submit@debbugs.gnu.org; Wed, 22 Feb 2023 16:38:17 -0500 Received: from mail-wr1-f53.google.com ([209.85.221.53]:46690) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pUwoX-0007ji-7t for 61655@debbugs.gnu.org; Wed, 22 Feb 2023 16:38:15 -0500 Received: by mail-wr1-f53.google.com with SMTP id t13so9070861wrv.13 for <61655@debbugs.gnu.org>; Wed, 22 Feb 2023 13:38:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :sender:from:to:cc:subject:date:message-id:reply-to; bh=bt6KqrrsqIp6qVa+n3LOoNQ6jNuJH2UUnmgcNPCSQd8=; b=nWkFBX/d9Ys+pNa/iqwQX92jNYV+oRs7ZsbQGCYFaUaRZzVHGGPsgdJsI8/+Y7JugT iEGuLbCXHw5BsZ4dgbXXqMeAQL6I+dgWfnQ67ZCKObVv2+xPESg3h7o8ZDvGD14VBUoK ILVp6cwaYoSsFk89XPXO0rwUCN9Zn8YQtIWqxFe3x0ftGBNh/WUDEv1M5fUDrSjFfJ6k cf+iGU+hKdmKK4zBL5Pt61O7PZ1tuS0Ow4xSiKkXTHpJ52OQXdbvJjX3wIESKxgjA6ud Xd2vM7WnKRFyKl4vCw4739GKQgrJUQS+25MbMfuyotMRvelquXDJh4+FVhcp07HnhX6n HhgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :sender:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=bt6KqrrsqIp6qVa+n3LOoNQ6jNuJH2UUnmgcNPCSQd8=; b=bXDRV4QzPyWu83IAvz7hTo9/xcLBQVFOcDPIt/Q70yZyOh+aAQbZ2V7UHju7yvRKcm C7OPLp/OgFnyTlOwQuKI45z/2ixAMAU0mXsESO82Hz+wsEh67ScgtJalF6t9yJqhwHbm pYdRybtbe9RU2iSsBFBapBUokTskTkgexVw4N8TKcD3aFirmmaPf4tmqKmbqFh3FEbml KRRYTyAyxrFt+VRMGXnRpHx3/jZrZXU/nxE9YPpr9GAxoAH94WjG18y1d6VSWgQB2GGy fOjqyDwuCmZIk/kuNk2CBPD+dGwmGAwseFKcsrWdsTNjhHxDu+SwLzGQl3kA6WrEaki8 qhxQ== X-Gm-Message-State: AO0yUKVu9ewcCuZmLg4wPldV/CC3IeAIxR2q6Ey0+bzPd7QPdJfMRGNp MRLVotCI/qkRhglQceahTxA= X-Google-Smtp-Source: AK7set/9G2J7PnkT0+nEuj8/FadFx+vO5+c+mp/oNBfmZCLg31fZ8YC/MBauqL4Nx01sdY2Mp6gVGQ== X-Received: by 2002:a5d:5b0a:0:b0:2c6:c9f1:e444 with SMTP id bx10-20020a5d5b0a000000b002c6c9f1e444mr7536523wrb.16.1677101887146; Wed, 22 Feb 2023 13:38:07 -0800 (PST) Received: from [192.168.0.2] ([46.251.119.176]) by smtp.googlemail.com with ESMTPSA id d9-20020a056000114900b002c5584d0e3dsm8248420wrx.24.2023.02.22.13.38.05 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 22 Feb 2023 13:38:06 -0800 (PST) Message-ID: <87abbcaf-e60b-f975-b589-5e61f2d7866e@yandex.ru> Date: Wed, 22 Feb 2023 23:38:04 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 Content-Language: en-US References: <8DA1B548-B8D2-4EC1-B9F8-F7654003AC89@gmail.com> <56C0998E-3053-49F3-BAE3-46D6432B16F5@gmail.com> From: Dmitry Gutov In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Spam-Score: -0.9 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.9 (-) On 22/02/2023 22:45, Yuan Fu wrote: > Yeah that’s just an idea, and I don’t have problem adding faces. But we probably can’t keep adding more and more specific faces. At one point we’ll need to either add indirection, or ask users to just add their own fontification rules, if it is really specific. We’ll see. An indirection seems like a separate new feature. Might be useful for some, but probably unnecessary for this discussion. > Function definition & call is totally reasonable. But adapting all the major modes to use them is might be too big a change for emacs-29. The change itself should be very straightforward. If we agree on the set of faces (for variables and properties as well, right?), I don't mind posting a patch for review. Whether it gets accepted or not. From unknown Mon Jun 23 18:33:58 2025 X-Loop: help-debbugs@gnu.org Subject: bug#61655: [Tree sitter] [Feature Request] font-lock function calls, definitions, separately Resent-From: Dmitry Gutov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 22 Feb 2023 21:40:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 61655 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Jacob Faibussowitsch Cc: Randy Taylor , Yuan Fu , 61655@debbugs.gnu.org Received: via spool by 61655-submit@debbugs.gnu.org id=B61655.167710196029874 (code B ref 61655); Wed, 22 Feb 2023 21:40:01 +0000 Received: (at 61655) by debbugs.gnu.org; 22 Feb 2023 21:39:20 +0000 Received: from localhost ([127.0.0.1]:60558 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pUwpb-0007lm-PA for submit@debbugs.gnu.org; Wed, 22 Feb 2023 16:39:20 -0500 Received: from mail-wr1-f53.google.com ([209.85.221.53]:37392) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pUwpZ-0007lZ-WA for 61655@debbugs.gnu.org; Wed, 22 Feb 2023 16:39:18 -0500 Received: by mail-wr1-f53.google.com with SMTP id h14so477553wru.4 for <61655@debbugs.gnu.org>; Wed, 22 Feb 2023 13:39:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :sender:from:to:cc:subject:date:message-id:reply-to; bh=O4l6kKFO5tuJyxtJ9cxuIs+qJTGEKv1qWtL2tea/6IY=; b=jfB9/oKjyBmHqkraKNPrp3gbGBcK8fBHvLw/kfJJ3Bb72Zppaeu0U5vHiXJae7SaX3 CtxuypPy2iTBx6xdYu9m80KND41zbTEuBeF+iiIR2V+HodBXEiBpGN4110UsZg+lln3v sbosdzWKkWMrAr4e6yYP9ayfWwEbcYP6GxRrRZG7KTQx1GEa6g3TJbLZ4zygtyU4TCcW R/l7sjDUM3wfJuLlthZsVu3rp/zN/f94viKw0PW5lOLEoXPeNKShmZc+1BjPaEFEH32K a6ZkbOWb1CiPF8ZxmfZpdn8+xQcSIkNc3chtYxeM9IL+A4oRCa5KnkQq8meqjVhwEF3O OKTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :sender:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=O4l6kKFO5tuJyxtJ9cxuIs+qJTGEKv1qWtL2tea/6IY=; b=Nm8uEgNN0y7w78DkXVvR3+rkhJNBui54T7zIT9h/k/mw/UOszrMRzOaGCeCUhJTX0f VyDHwgYajtOSmnlyfH8atH/sb2P1wqsqRjd07n4ahpJWEGtrmuVXUVi6Qpg0oNxcB0Xb FmmgEM+Me3zujeHnlquVOqTw57ShL8xUWN+v+blnAWo1n8vwDtkmtGUJRy06ZikUli1E MPQPsCrbTJEPrTZzDWpPqemI/S5hNG17aRGzjtl2hZ97dQ+35yBGkcpAy5TE1/MKWO95 4+xWNC9hbsuyhf4J7/fC/sKmKubULWF1mp7fLzqSkPrzBD/OMe0Yk1aqnbO8OBJhg5JT HLzA== X-Gm-Message-State: AO0yUKWiuvGgNcQMQLBZ2iesJExtAIpj9ZVkcF56ncj8twm/dmfTnTPf +qXqP+rv6MgJPXNjw8kqDZ8= X-Google-Smtp-Source: AK7set/6xrT1nWqtoUbeLVOd/RKFHYTMzBtpD8uLBeI2c8HHOuhwCs2Wfo3pvzpux6zvnxZxGOJZvQ== X-Received: by 2002:adf:dece:0:b0:2c5:544b:8e64 with SMTP id i14-20020adfdece000000b002c5544b8e64mr8252964wrn.71.1677101952345; Wed, 22 Feb 2023 13:39:12 -0800 (PST) Received: from [192.168.0.2] ([46.251.119.176]) by smtp.googlemail.com with ESMTPSA id z1-20020a5d4c81000000b002c560e6ea57sm8155845wrs.47.2023.02.22.13.39.11 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 22 Feb 2023 13:39:11 -0800 (PST) Message-ID: <9de78a55-c0ea-ed32-979a-3c680c578d69@yandex.ru> Date: Wed, 22 Feb 2023 23:39:10 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 Content-Language: en-US References: <8DA1B548-B8D2-4EC1-B9F8-F7654003AC89@gmail.com> <56C0998E-3053-49F3-BAE3-46D6432B16F5@gmail.com> <7B23CCBC-9B9F-4E1A-AE5F-0DBDD2FE2C26@gmail.com> From: Dmitry Gutov In-Reply-To: <7B23CCBC-9B9F-4E1A-AE5F-0DBDD2FE2C26@gmail.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Spam-Score: -0.9 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.9 (-) On 22/02/2023 20:07, Jacob Faibussowitsch wrote: >> What's a "member function"? Is it like a method? > Yeah, I suppose method is the more general term for it. > >> If people want this distinction, we can add such face. But I'm curious whether some other editors use different colors for these cases. > I personally do not; I brought it up because it was functionality that the 3rd party package had over stock. I think a good representative list is the one vscode offers: > > https://code.visualstudio.com/api/language-extensions/semantic-highlight-guide#standard-token-types-and-modifiers > >> I'm also wondering what face we're supposed to use for "receiver-less" method calls, such as calls to the methods defined in the same class, in e.g. Ruby and Java. Or C++/C#. They don't use ‘this’. > I don’t think emacs should worry about differentiating these cases. Highlight those tokens as tree-sitter sees them; regular function calls (i.e. `font-lock-function-call-face`). It’s a problem you cannot accurately solve without playing the compiler — with all of the implementation and not to mention performance baggage that comes with it. > >> I also wonder whether we'll need to separate faces for properties: definitions vs. uses. That one we could use to do early, to keep the names uniform, e.g. we'd have: > This is something (also 3rd party package) lsp-mode supports through their semantic highlighting. They further distinguish between read and writes to variables. But again, they are able to do so because they hook directly into compilers. Thank you, then I guess we can skip that distinction, at least for now. From unknown Mon Jun 23 18:33:58 2025 X-Loop: help-debbugs@gnu.org Subject: bug#61655: [Tree sitter] [Feature Request] font-lock function calls, definitions, separately Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 23 Feb 2023 18:16:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 61655 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Dmitry Gutov Cc: casouri@gmail.com, 61655@debbugs.gnu.org, jacob.fai@gmail.com Received: via spool by 61655-submit@debbugs.gnu.org id=B61655.167717614027768 (code B ref 61655); Thu, 23 Feb 2023 18:16:01 +0000 Received: (at 61655) by debbugs.gnu.org; 23 Feb 2023 18:15:40 +0000 Received: from localhost ([127.0.0.1]:35272 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pVG83-0007Do-OU for submit@debbugs.gnu.org; Thu, 23 Feb 2023 13:15:40 -0500 Received: from eggs.gnu.org ([209.51.188.92]:49016) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pVG81-0007DZ-U7 for 61655@debbugs.gnu.org; Thu, 23 Feb 2023 13:15:38 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pVG7w-0008C0-7K; Thu, 23 Feb 2023 13:15:32 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=I10dYyqnGmSiC+tqz/v3/v7Y7AV+NTpQyJQ5JhhLebY=; b=XrNiv2WngCLJgdDE4MUe oD9CiEABN8B9Ows6kiu/4QxxqRw21tg4UN6+YoWYzWmcMdgd0qQbKzXLCkAhWFasvdrCq79EJx4lh 4RZDMe59ttzCPdEMXv0RgWmQYiXHpl7qjDn6pLOYP/z7hGbSlpMyNhMzvtrKSzic42BMEoL1D5B1U 7ZwHWc1ZzvzQOrJGYnv56iDiKtE4Y+xqNdjjCAqMltj/w1DFbXUuTR4vw93/sItQgBbvuTrGMZzFc vV+trtpwI5X4lMYRDfVm3R8b2JVQTsxtOhhz230MTkbSqqudYf0CIMed2Rupenmrb0peyyaPLdaNZ 4EzV7WHgMnlArg==; Received: from [87.69.77.57] (helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pVG7W-0007MT-Oc; Thu, 23 Feb 2023 13:15:10 -0500 Date: Thu, 23 Feb 2023 20:15:04 +0200 Message-Id: <83bklkp7tj.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <87abbcaf-e60b-f975-b589-5e61f2d7866e@yandex.ru> (message from Dmitry Gutov on Wed, 22 Feb 2023 23:38:04 +0200) References: <8DA1B548-B8D2-4EC1-B9F8-F7654003AC89@gmail.com> <56C0998E-3053-49F3-BAE3-46D6432B16F5@gmail.com> <87abbcaf-e60b-f975-b589-5e61f2d7866e@yandex.ru> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: 61655@debbugs.gnu.org > Date: Wed, 22 Feb 2023 23:38:04 +0200 > From: Dmitry Gutov > > On 22/02/2023 22:45, Yuan Fu wrote: > > Yeah that’s just an idea, and I don’t have problem adding faces. But we probably can’t keep adding more and more specific faces. At one point we’ll need to either add indirection, or ask users to just add their own fontification rules, if it is really specific. We’ll see. > > An indirection seems like a separate new feature. Might be useful for > some, but probably unnecessary for this discussion. > > > Function definition & call is totally reasonable. But adapting all the major modes to use them is might be too big a change for emacs-29. > > The change itself should be very straightforward. If we agree on the set > of faces (for variables and properties as well, right?), I don't mind > posting a patch for review. > > Whether it gets accepted or not. I'm okay with adding a few more faces to emacs-29, but please hurry, as we don't have too much time for more additions. From unknown Mon Jun 23 18:33:58 2025 X-Loop: help-debbugs@gnu.org Subject: bug#61655: [Tree sitter] [Feature Request] font-lock function calls, definitions, separately Resent-From: Dmitry Gutov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 24 Feb 2023 02:32:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 61655 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: Randy Taylor , casouri@gmail.com, Theodor Thornhill , 61655@debbugs.gnu.org, jacob.fai@gmail.com Received: via spool by 61655-submit@debbugs.gnu.org id=B61655.167720588212894 (code B ref 61655); Fri, 24 Feb 2023 02:32:01 +0000 Received: (at 61655) by debbugs.gnu.org; 24 Feb 2023 02:31:22 +0000 Received: from localhost ([127.0.0.1]:35674 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pVNrk-0003Lt-Fe for submit@debbugs.gnu.org; Thu, 23 Feb 2023 21:31:21 -0500 Received: from mail-wm1-f48.google.com ([209.85.128.48]:41765) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pVNrh-0003Le-7u for 61655@debbugs.gnu.org; Thu, 23 Feb 2023 21:31:19 -0500 Received: by mail-wm1-f48.google.com with SMTP id p3-20020a05600c358300b003e206711347so874530wmq.0 for <61655@debbugs.gnu.org>; Thu, 23 Feb 2023 18:31:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:sender:from:to:cc:subject :date:message-id:reply-to; bh=gy/fqATXma6zDZyTCUEQN4bTKC4vUpjCO4BXNwEGoXM=; b=pkaeXcAUd73kLPxfOt47rJgucvhk+0t8PP3qDKzMIB9ZA52Rw72zpgoFqwJg02iFSN Gu0gd/4bA2qrSMuyvrU2D12KFdhC7159il7r3wzOdrnxGGxdo1sI6HPtFJgpv9wS2iS1 aLdBAulSDk4TESdlu2Z3c3jkC+irvD94Tf0gKECz66r8o409P8bbqFFcLclhPrheihO/ r0L2W3EKJKkrhk2Uroio1+STy8QCcZJ0hOsW4jMgq6ejDe34aciQruMIAIzpDaCun4xV qAkKZCZNhOHZaa/h4oyFyUDtwL37ffdIk/om7DOjpN6/hvut2MAFGh9RS7GvOZpCZfFD iZ7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:sender:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=gy/fqATXma6zDZyTCUEQN4bTKC4vUpjCO4BXNwEGoXM=; b=ucIg5Y+SKlK6GLbMOrWjCgOrqbF38feGYP3HQGlVng+qGKJfDZcYF4aIX5pRyvWuA6 YYX/uVis9R5Fx7JJYc9PJfWoS/Kd1BCgpidtqE+/AS0u7tUXXKtNuCbTYRXfNiuAVpm/ X/nOhdZN6u/hE+FvNak3FvQfymBf3UpfWpbPzbKVLnbsWOwh5nSDXvsxj6p3f9Z2nozx OR4RvY4NoUOeqTFVFZpYAKr3/eqAWBcLmkCkZiFcOfbqnRoc04VToneIT93oedh1d3S9 IPuKuukuUhauAwXsU1mD8ohnI70YU1hUxTuvZnsOMLQxUPi0/tNJXjSXKpHyHZoIr9D+ IfYQ== X-Gm-Message-State: AO0yUKUxhNy/30ZD3MD2EDXJr+ijFxeTPpp1ADk2jV8Sj8wQqBpWw1w4 qftqYUFQt04u3TtiYMMsboE= X-Google-Smtp-Source: AK7set+krsYc8f8fv+EtxL935p+LXxBB2JCI27/S99HUJRrxIBxOXBd14Pk7cV6cplpFFytdiNuFzw== X-Received: by 2002:a05:600c:c07:b0:3df:fcbd:3159 with SMTP id fm7-20020a05600c0c0700b003dffcbd3159mr12004910wmb.3.1677205870988; Thu, 23 Feb 2023 18:31:10 -0800 (PST) Received: from [192.168.0.2] ([46.251.119.176]) by smtp.googlemail.com with ESMTPSA id j7-20020a05600c42c700b003db012d49b7sm7233197wme.2.2023.02.23.18.31.09 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 23 Feb 2023 18:31:10 -0800 (PST) Content-Type: multipart/mixed; boundary="------------0eVmXwMS7DyS5Om5ViFulX2E" Message-ID: <97710356-24c1-d79c-4796-3e51fd4809e3@yandex.ru> Date: Fri, 24 Feb 2023 04:31:08 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.1 Content-Language: en-US References: <8DA1B548-B8D2-4EC1-B9F8-F7654003AC89@gmail.com> <56C0998E-3053-49F3-BAE3-46D6432B16F5@gmail.com> <87abbcaf-e60b-f975-b589-5e61f2d7866e@yandex.ru> <83bklkp7tj.fsf@gnu.org> From: Dmitry Gutov In-Reply-To: <83bklkp7tj.fsf@gnu.org> X-Spam-Score: -0.9 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.9 (-) This is a multi-part message in MIME format. --------------0eVmXwMS7DyS5Om5ViFulX2E Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 23/02/2023 20:15, Eli Zaretskii wrote: >> Cc:61655@debbugs.gnu.org >> Date: Wed, 22 Feb 2023 23:38:04 +0200 >> From: Dmitry Gutov >> >> On 22/02/2023 22:45, Yuan Fu wrote: >>> Yeah that’s just an idea, and I don’t have problem adding faces. But we probably can’t keep adding more and more specific faces. At one point we’ll need to either add indirection, or ask users to just add their own fontification rules, if it is really specific. We’ll see. >> An indirection seems like a separate new feature. Might be useful for >> some, but probably unnecessary for this discussion. >> >>> Function definition & call is totally reasonable. But adapting all the major modes to use them is might be too big a change for emacs-29. >> The change itself should be very straightforward. If we agree on the set >> of faces (for variables and properties as well, right?), I don't mind >> posting a patch for review. >> >> Whether it gets accepted or not. > I'm okay with adding a few more faces to emacs-29, but please hurry, > as we don't have too much time for more additions. Here's the patch which adds the faces and their uses in all ts modes. Comments welcome from all the interested parties. The patch is mostly straightforward, but there are some changes added as well, where it was needed to differentiate between declarations and references. The important question here, I think, is whether we want to split font-lock-property-faces in two, like I did here. By analogy with the other faces, I think it's going to be useful to differentiate between property definitions and property references. Not many of the languages modes used font-lock-property-face for property/attribute definitions, but some did. --------------0eVmXwMS7DyS5Om5ViFulX2E Content-Type: text/x-patch; charset=UTF-8; name="font-lock-more-finer-faces.diff" Content-Disposition: attachment; filename="font-lock-more-finer-faces.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2RvYy9saXNwcmVmL21vZGVzLnRleGkgYi9kb2MvbGlzcHJlZi9tb2Rl cy50ZXhpCmluZGV4IDA1MmExMGUzNzk3Li40YzQwZjQxNGNhMCAxMDA2NDQKLS0tIGEvZG9j L2xpc3ByZWYvbW9kZXMudGV4aQorKysgYi9kb2MvbGlzcHJlZi9tb2Rlcy50ZXhpCkBAIC0z Njc5LDEwICszNjc5LDIwIEBAIEZhY2VzIGZvciBGb250IExvY2sKIEB2aW5kZXggZm9udC1s b2NrLWZ1bmN0aW9uLW5hbWUtZmFjZQogZm9yIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gYmVp bmcgZGVmaW5lZCBvciBkZWNsYXJlZC4KIAorQGl0ZW0gZm9udC1sb2NrLWZ1bmN0aW9uLWNh bGwtZmFjZQorQHZpbmRleCBmb250LWxvY2stZnVuY3Rpb24tY2FsbC1mYWNlCitmb3IgdGhl IG5hbWUgb2YgYSBmdW5jdGlvbiBiZWluZyBjYWxsZWQuICBUaGlzIGZhY2UgaW5oZXJpdHMs IGJ5CitkZWZhdWx0LCBmcm9tIEBjb2Rle2ZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2V9 LgorCiBAaXRlbSBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlCiBAdmluZGV4IGZvbnQt bG9jay12YXJpYWJsZS1uYW1lLWZhY2UKIGZvciB0aGUgbmFtZSBvZiBhIHZhcmlhYmxlIGJl aW5nIGRlZmluZWQgb3IgZGVjbGFyZWQuCiAKK0BpdGVtIGZvbnQtbG9jay12YXJpYWJsZS1y ZWYtZmFjZQorQHZpbmRleCBmb250LWxvY2stdmFyaWFibGUtcmVmLWZhY2UKK2ZvciB0aGUg bmFtZSBvZiBhIHZhcmlhYmxlIGJlaW5nIHJlZmVyZW5jZWQuICBUaGlzIGZhY2UgaW5oZXJp dHMsIGJ5CitkZWZhdWx0LCBmcm9tIEBjb2Rle2ZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZh Y2V9LgorCiBAaXRlbSBmb250LWxvY2sta2V5d29yZC1mYWNlCiBAdmluZGV4IGZvbnQtbG9j ay1rZXl3b3JkLWZhY2UKIGZvciBhIGtleXdvcmQgd2l0aCBzcGVjaWFsIHN5bnRhY3RpYyBz aWduaWZpY2FuY2UsIGxpa2UgQHNhbXB7Zm9yfSBhbmQKQEAgLTM3NTYsMTEgKzM3NjYsMTYg QEAgRmFjZXMgZm9yIEZvbnQgTG9jawogQHZpbmRleCBmb250LWxvY2stb3BlcmF0b3ItZmFj ZQogZm9yIG9wZXJhdG9ycy4KIAotQGl0ZW0gZm9udC1sb2NrLXByb3BlcnR5LWZhY2UKLUB2 aW5kZXggZm9udC1sb2NrLXByb3BlcnR5LWZhY2UKLWZvciBwcm9wZXJ0aWVzIG9mIGFuIG9i amVjdCwgc3VjaCBhcyB0aGUgZGVjbGFyYXRpb24gYW5kIHVzZSBvZiBmaWVsZHMKLWluIGEg c3RydWN0LgotVGhpcyBmYWNlIGluaGVyaXRzLCBieSBkZWZhdWx0LCBmcm9tIEBjb2Rle2Zv bnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2V9LgorQGl0ZW0gZm9udC1sb2NrLXByb3BlcnR5 LW5hbWUtZmFjZQorQHZpbmRleCBmb250LWxvY2stcHJvcGVydHktbmFtZS1mYWNlCitmb3Ig cHJvcGVydGllcyBvZiBhbiBvYmplY3QsIHN1Y2ggYXMgdGhlIGRlY2xhcmF0aW9uIG9mIGZp ZWxkcyBpbiBhCitzdHJ1Y3QuICBUaGlzIGZhY2UgaW5oZXJpdHMsIGJ5IGRlZmF1bHQsIGZy b20KK0Bjb2Rle2ZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2V9LgorCitAaXRlbSBmb250 LWxvY2stcHJvcGVydHktcmVmLWZhY2UKK0B2aW5kZXggZm9udC1sb2NrLXByb3BlcnR5LXJl Zi1mYWNlCitmb3IgcHJvcGVydGllcyBvZiBhbiBvYmplY3QsIHN1Y2ggYXMgdXNlIG9mIGZp ZWxkcyBpbiBhIHN0cnVjdC4gIFRoaXMKK2ZhY2UgaW5oZXJpdHMsIGJ5IGRlZmF1bHQsIGZy b20gQGNvZGV7Zm9udC1sb2NrLXByb3BlcnR5LW5hbWUtZmFjZX0uCiAKIEZvciBleGFtcGxl LAogCmRpZmYgLS1naXQgYS9ldGMvTkVXUyBiL2V0Yy9ORVdTCmluZGV4IDQ4Zjc0M2ZjOWRh Li41OTM3MWQ2YjRjMSAxMDA2NDQKLS0tIGEvZXRjL05FV1MKKysrIGIvZXRjL05FV1MKQEAg LTgyOCwxMSArODI4LDEyIEBAIGZpbHRlci9zZW50aW5lbCBlcnJvciBoYXMgYmVlbiBoYW5k bGVkLgogKysrCiAqKiBOZXcgZmFjZXMgZm9yIGZvbnQtbG9jay4KIFRoZXNlIGZhY2VzIGFy ZSBwcmltYXJpbHkgbWVhbnQgZm9yIHVzZSB3aXRoIHRyZWUtc2l0dGVyLiAgVGhleSBhcmU6 CisnZm9udC1sb2NrLWZ1bmN0aW9uLWNhbGwtZmFjZScsICcnZm9udC1sb2NrLXZhcmlhYmxl LXJlZi1mYWNlJywKICdmb250LWxvY2stYnJhY2tldC1mYWNlJywgJ2ZvbnQtbG9jay1kZWxp bWl0ZXItZmFjZScsCiAnZm9udC1sb2NrLWVzY2FwZS1mYWNlJywgJ2ZvbnQtbG9jay1taXNj LXB1bmN0dWF0aW9uLWZhY2UnLAogJ2ZvbnQtbG9jay1udW1iZXItZmFjZScsICdmb250LWxv Y2stb3BlcmF0b3ItZmFjZScsCi0nZm9udC1sb2NrLXByb3BlcnR5LWZhY2UnLCBhbmQgJ2Zv bnQtbG9jay1wdW5jdHVhdGlvbi1mYWNlJywKLSdmb250LWxvY2stcmVnZXhwLWZhY2UnLgor J2ZvbnQtbG9jay1wcm9wZXJ0eS1uYW1lLWZhY2UnLCAnZm9udC1sb2NrLXByb3BlcnR5LXJl Zi1mYWNlJywgYW5kCisnZm9udC1sb2NrLXB1bmN0dWF0aW9uLWZhY2UnLCAnZm9udC1sb2Nr LXJlZ2V4cC1mYWNlJy4KIAogKysrCiAqKiBOZXcgZmFjZSAndmFyaWFibGUtcGl0Y2gtdGV4 dCcuCmRpZmYgLS1naXQgYS9saXNwL2N1cy10aGVtZS5lbCBiL2xpc3AvY3VzLXRoZW1lLmVs CmluZGV4IGRlYTVkYmU5NDEwLi40NmU0MWRkMDQ2YyAxMDA2NDQKLS0tIGEvbGlzcC9jdXMt dGhlbWUuZWwKKysrIGIvbGlzcC9jdXMtdGhlbWUuZWwKQEAgLTY4LDEzICs2OCwxNiBAQCBj dXN0b20tdGhlbWUtLWxpc3RlZC1mYWNlcwogICBmb250LWxvY2stY29tbWVudC1kZWxpbWl0 ZXItZmFjZSBmb250LWxvY2stY29tbWVudC1mYWNlCiAgIGZvbnQtbG9jay1jb25zdGFudC1m YWNlIGZvbnQtbG9jay1kZWxpbWl0ZXItZmFjZQogICBmb250LWxvY2stZG9jLWZhY2UgZm9u dC1sb2NrLWRvYy1tYXJrdXAtZmFjZQotICBmb250LWxvY2stZXNjYXBlLWZhY2UgZm9udC1s b2NrLWZ1bmN0aW9uLW5hbWUtZmFjZQorICBmb250LWxvY2stZXNjYXBlLWZhY2UgZm9udC1s b2NrLWZ1bmN0aW9uLWNhbGwtZmFjZQorICBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNl CiAgIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UgZm9udC1sb2NrLW5lZ2F0aW9uLWNoYXItZmFj ZQogICBmb250LWxvY2stbnVtYmVyLWZhY2UgZm9udC1sb2NrLW1pc2MtcHVuY3R1YXRpb24t ZmFjZQogICBmb250LWxvY2stb3BlcmF0b3ItZmFjZSBmb250LWxvY2stcHJlcHJvY2Vzc29y LWZhY2UKLSAgZm9udC1sb2NrLXByb3BlcnR5LWZhY2UgZm9udC1sb2NrLXB1bmN0dWF0aW9u LWZhY2UKKyAgZm9udC1sb2NrLXByb3BlcnR5LW5hbWUtZmFjZSBmb250LWxvY2stcHJvcGVy dHktcmVmLWZhY2UKKyAgZm9udC1sb2NrLXB1bmN0dWF0aW9uLWZhY2UKICAgZm9udC1sb2Nr LXJlZ2V4cC1ncm91cGluZy1iYWNrc2xhc2ggZm9udC1sb2NrLXJlZ2V4cC1ncm91cGluZy1j b25zdHJ1Y3QKICAgZm9udC1sb2NrLXN0cmluZy1mYWNlIGZvbnQtbG9jay10eXBlLWZhY2Ug Zm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZQorICBmb250LWxvY2stdmFyaWFibGUtcmVm LWZhY2UKICAgZm9udC1sb2NrLXdhcm5pbmctZmFjZSBidXR0b24gbGluayBsaW5rLXZpc2l0 ZWQgZnJpbmdlCiAgIGhlYWRlci1saW5lIHRvb2x0aXAgbW9kZS1saW5lIG1vZGUtbGluZS1i dWZmZXItaWQKICAgbW9kZS1saW5lLWVtcGhhc2lzIG1vZGUtbGluZS1oaWdobGlnaHQgbW9k ZS1saW5lLWluYWN0aXZlCmRpZmYgLS1naXQgYS9saXNwL2ZvbnQtbG9jay5lbCBiL2xpc3Av Zm9udC1sb2NrLmVsCmluZGV4IDllOTQ0ZmUxODhhLi5iODJiNzY0ODc5NyAxMDA2NDQKLS0t IGEvbGlzcC9mb250LWxvY2suZWwKKysrIGIvbGlzcC9mb250LWxvY2suZWwKQEAgLTIwMjYs NiArMjAyNiwxMiBAQCBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlCiAgICJGb250IExv Y2sgbW9kZSBmYWNlIHVzZWQgdG8gaGlnaGxpZ2h0IGZ1bmN0aW9uIG5hbWVzLiIKICAgOmdy b3VwICdmb250LWxvY2stZmFjZXMpCiAKKyhkZWZmYWNlIGZvbnQtbG9jay1mdW5jdGlvbi1j YWxsLWZhY2UKKyAgJygodCA6aW5oZXJpdCBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNl KSkKKyAgIkZvbnQgTG9jayBtb2RlIGZhY2UgdXNlZCB0byBoaWdobGlnaHQgZnVuY3Rpb24g Y2FsbHMuIgorICA6Z3JvdXAgJ2ZvbnQtbG9jay1mYWNlcworICA6dmVyc2lvbiAiMjkuMSIp CisKIChkZWZmYWNlIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UKICAgJygoKChjbGFz cyBncmF5c2NhbGUpIChiYWNrZ3JvdW5kIGxpZ2h0KSkKICAgICAgOmZvcmVncm91bmQgIkdy YXk5MCIgOndlaWdodCBib2xkIDpzbGFudCBpdGFsaWMpCkBAIC0yMDQwLDYgKzIwNDYsMTIg QEAgZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZQogICAiRm9udCBMb2NrIG1vZGUgZmFj ZSB1c2VkIHRvIGhpZ2hsaWdodCB2YXJpYWJsZSBuYW1lcy4iCiAgIDpncm91cCAnZm9udC1s b2NrLWZhY2VzKQogCisoZGVmZmFjZSBmb250LWxvY2stdmFyaWFibGUtcmVmLWZhY2UKKyAg JygodCA6aW5oZXJpdCBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSkKKyAgIkZvbnQg TG9jayBtb2RlIGZhY2UgdXNlZCB0byBoaWdobGlnaHQgdmFyaWFibGUgcmVmZXJlbmNlcy4i CisgIDpncm91cCAnZm9udC1sb2NrLWZhY2VzCisgIDp2ZXJzaW9uICIyOS4xIikKKwogKGRl ZmZhY2UgZm9udC1sb2NrLXR5cGUtZmFjZQogICAnKCgoKGNsYXNzIGdyYXlzY2FsZSkgKGJh Y2tncm91bmQgbGlnaHQpKSA6Zm9yZWdyb3VuZCAiR3JheTkwIiA6d2VpZ2h0IGJvbGQpCiAg ICAgKCgoY2xhc3MgZ3JheXNjYWxlKSAoYmFja2dyb3VuZCBkYXJrKSkgIDpmb3JlZ3JvdW5k ICJEaW1HcmF5IiA6d2VpZ2h0IGJvbGQpCkBAIC0yMTE1LDEwICsyMTI3LDE3IEBAIGZvbnQt bG9jay1vcGVyYXRvci1mYWNlCiAgIDpncm91cCAnZm9udC1sb2NrLWZhY2VzCiAgIDp2ZXJz aW9uICIyOS4xIikKIAotKGRlZmZhY2UgZm9udC1sb2NrLXByb3BlcnR5LWZhY2UKKyhkZWZm YWNlIGZvbnQtbG9jay1wcm9wZXJ0eS1uYW1lLWZhY2UKICAgJygodCA6aW5oZXJpdCBmb250 LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSkKICAgIkZvbnQgTG9jayBtb2RlIGZhY2UgdXNl ZCB0byBoaWdobGlnaHQgcHJvcGVydGllcyBvZiBhbiBvYmplY3QuCi1Gb3IgZXhhbXBsZSwg dGhlIGRlY2xhcmF0aW9uIGFuZCB1c2Ugb2YgZmllbGRzIGluIGEgc3RydWN0LiIKK0ZvciBl eGFtcGxlLCB0aGUgZGVjbGFyYXRpb24gb2YgZmllbGRzIGluIGEgc3RydWN0LiIKKyAgOmdy b3VwICdmb250LWxvY2stZmFjZXMKKyAgOnZlcnNpb24gIjI5LjEiKQorCisoZGVmZmFjZSBm b250LWxvY2stcHJvcGVydHktcmVmLWZhY2UKKyAgJygodCA6aW5oZXJpdCBmb250LWxvY2st cHJvcGVydHktbmFtZS1mYWNlKSkKKyAgIkZvbnQgTG9jayBtb2RlIGZhY2UgdXNlZCB0byBo aWdobGlnaHQgcHJvcGVydHkgcmVmZXJlbmNlcy4KK0ZvciBleGFtcGxlLCBwcm9wZXJ0eSBs b29rdXAgb2YgZmllbGRzIGluIGEgc3RydWN0LiIKICAgOmdyb3VwICdmb250LWxvY2stZmFj ZXMKICAgOnZlcnNpb24gIjI5LjEiKQogCmRpZmYgLS1naXQgYS9saXNwL3Byb2dtb2Rlcy9j LXRzLW1vZGUuZWwgYi9saXNwL3Byb2dtb2Rlcy9jLXRzLW1vZGUuZWwKaW5kZXggNmQ3MGRj MzE5OGUuLjkwZjE2ODhlMGFiIDEwMDY0NAotLS0gYS9saXNwL3Byb2dtb2Rlcy9jLXRzLW1v ZGUuZWwKKysrIGIvbGlzcC9wcm9nbW9kZXMvYy10cy1tb2RlLmVsCkBAIC01MDYsNyArNTA2 LDEwIEBAIGMtdHMtbW9kZS0tZm9udC1sb2NrLXNldHRpbmdzCiAgICAgICBkZWNsYXJhdG9y OiAoXykgQGMtdHMtbW9kZS0tZm9udGlmeS1kZWNsYXJhdG9yKQogCiAgICAgIChwYXJhbWV0 ZXJfZGVjbGFyYXRpb24KLSAgICAgIGRlY2xhcmF0b3I6IChfKSBAYy10cy1tb2RlLS1mb250 aWZ5LWRlY2xhcmF0b3IpKQorICAgICAgZGVjbGFyYXRvcjogKF8pIEBjLXRzLW1vZGUtLWZv bnRpZnktZGVjbGFyYXRvcikKKworICAgICAoZW51bWVyYXRvcgorICAgICAgbmFtZTogKGlk ZW50aWZpZXIpIEBmb250LWxvY2stcHJvcGVydHktbmFtZS1mYWNlKSkKIAogICAgOmxhbmd1 YWdlIG1vZGUKICAgIDpmZWF0dXJlICdhc3NpZ25tZW50CkBAIC01MTYsNyArNTE5LDcgQEAg Yy10cy1tb2RlLS1mb250LWxvY2stc2V0dGluZ3MKICAgICcoKGFzc2lnbm1lbnRfZXhwcmVz c2lvbgogICAgICAgbGVmdDogKGlkZW50aWZpZXIpIEBmb250LWxvY2stdmFyaWFibGUtbmFt ZS1mYWNlKQogICAgICAoYXNzaWdubWVudF9leHByZXNzaW9uCi0gICAgICBsZWZ0OiAoZmll bGRfZXhwcmVzc2lvbiBmaWVsZDogKF8pIEBmb250LWxvY2stcHJvcGVydHktZmFjZSkpCisg ICAgICBsZWZ0OiAoZmllbGRfZXhwcmVzc2lvbiBmaWVsZDogKF8pIEBmb250LWxvY2stcHJv cGVydHktcmVmLWZhY2UpKQogICAgICAoYXNzaWdubWVudF9leHByZXNzaW9uCiAgICAgICBs ZWZ0OiAocG9pbnRlcl9leHByZXNzaW9uCiAgICAgICAgICAgICAgKGlkZW50aWZpZXIpIEBm b250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSkKQEAgLTUyOSw4ICs1MzIsOCBAQCBjLXRz LW1vZGUtLWZvbnQtbG9jay1zZXR0aW5ncwogICAgOmZlYXR1cmUgJ2Z1bmN0aW9uCiAgICAn KChjYWxsX2V4cHJlc3Npb24KICAgICAgIGZ1bmN0aW9uOgotICAgICAgWyhpZGVudGlmaWVy KSBAZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZQotICAgICAgIChmaWVsZF9leHByZXNz aW9uIGZpZWxkOiAoZmllbGRfaWRlbnRpZmllcikgQGZvbnQtbG9jay1mdW5jdGlvbi1uYW1l LWZhY2UpXSkpCisgICAgICBbKGlkZW50aWZpZXIpIEBmb250LWxvY2stZnVuY3Rpb24tY2Fs bC1mYWNlCisgICAgICAgKGZpZWxkX2V4cHJlc3Npb24gZmllbGQ6IChmaWVsZF9pZGVudGlm aWVyKSBAZm9udC1sb2NrLWZ1bmN0aW9uLWNhbGwtZmFjZSldKSkKIAogICAgOmxhbmd1YWdl IG1vZGUKICAgIDpmZWF0dXJlICd2YXJpYWJsZQpAQCAtNTUyLDkgKzU1NSw3IEBAIGMtdHMt bW9kZS0tZm9udC1sb2NrLXNldHRpbmdzCiAKICAgIDpsYW5ndWFnZSBtb2RlCiAgICA6ZmVh dHVyZSAncHJvcGVydHkKLSAgICcoKGZpZWxkX2lkZW50aWZpZXIpIEBmb250LWxvY2stcHJv cGVydHktZmFjZQotICAgICAoZW51bWVyYXRvcgotICAgICAgbmFtZTogKGlkZW50aWZpZXIp IEBmb250LWxvY2stcHJvcGVydHktZmFjZSkpCisgICAnKChmaWVsZF9pZGVudGlmaWVyKSBA Zm9udC1sb2NrLXByb3BlcnR5LXJlZi1mYWNlKQogCiAgICA6bGFuZ3VhZ2UgbW9kZQogICAg OmZlYXR1cmUgJ2JyYWNrZXQKQEAgLTYxNCw2ICs2MTUsNyBAQCBjLXRzLW1vZGUtLWZvbnRp ZnktZGVjbGFyYXRvcgogICAgICAgICAgKGZhY2UgKHBjYXNlICh0cmVlc2l0LW5vZGUtdHlw ZSAodHJlZXNpdC1ub2RlLXBhcmVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKG9yIHF1YWxpZmllZC1yb290CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllcikpKQorICAgICAgICAgICAgICAg ICAoImZpZWxkX2RlY2xhcmF0aW9uIiAnZm9udC1sb2NrLXByb3BlcnR5LW5hbWUtZmFjZSkK ICAgICAgICAgICAgICAgICAgKCJmdW5jdGlvbl9kZWNsYXJhdG9yIiAnZm9udC1sb2NrLWZ1 bmN0aW9uLW5hbWUtZmFjZSkKICAgICAgICAgICAgICAgICAgKF8gJ2ZvbnQtbG9jay12YXJp YWJsZS1uYW1lLWZhY2UpKSkpCiAgICAgKHdoZW4gaWRlbnRpZmllcgpAQCAtNjMwLDcgKzYz Miw3IEBAIGMtdHMtbW9kZS0tZm9udGlmeS12YXJpYWJsZQogICAgICAgICAgICAgICAgICAg ICAiY2FsbF9leHByZXNzaW9uIikpCiAgICAgKHRyZWVzaXQtZm9udGlmeS13aXRoLW92ZXJy aWRlCiAgICAgICh0cmVlc2l0LW5vZGUtc3RhcnQgbm9kZSkgKHRyZWVzaXQtbm9kZS1lbmQg bm9kZSkKLSAgICAgJ2ZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2Ugb3ZlcnJpZGUgc3Rh cnQgZW5kKSkpCisgICAgICdmb250LWxvY2stdmFyaWFibGUtcmVmLWZhY2Ugb3ZlcnJpZGUg c3RhcnQgZW5kKSkpCiAKIChkZWZ1biBjLXRzLW1vZGUtLWZvbnRpZnktZGVmdW4gKG5vZGUg b3ZlcnJpZGUgc3RhcnQgZW5kICZyZXN0IF8pCiAgICJDb3JyZWN0bHkgZm9udGlmeSB0aGUg REVGVU4gbWFjcm8uCmRpZmYgLS1naXQgYS9saXNwL3Byb2dtb2Rlcy9jbWFrZS10cy1tb2Rl LmVsIGIvbGlzcC9wcm9nbW9kZXMvY21ha2UtdHMtbW9kZS5lbAppbmRleCAwNGY1ZDZiZGFj OC4uYTNmOTI3OWVjMWMgMTAwNjQ0Ci0tLSBhL2xpc3AvcHJvZ21vZGVzL2NtYWtlLXRzLW1v ZGUuZWwKKysrIGIvbGlzcC9wcm9nbW9kZXMvY21ha2UtdHMtbW9kZS5lbApAQCAtMTI1LDcg KzEyNSw3IEBAIGNtYWtlLXRzLW1vZGUtLWZvbnQtbG9jay1zZXR0aW5ncwogCiAgICA6bGFu Z3VhZ2UgJ2NtYWtlCiAgICA6ZmVhdHVyZSAnZnVuY3Rpb24KLSAgICcoKG5vcm1hbF9jb21t YW5kIChpZGVudGlmaWVyKSBAZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkpCisgICAn KChub3JtYWxfY29tbWFuZCAoaWRlbnRpZmllcikgQGZvbnQtbG9jay1mdW5jdGlvbi1jYWxs LWZhY2UpKQogCiAgICA6bGFuZ3VhZ2UgJ2NtYWtlCiAgICA6ZmVhdHVyZSAna2V5d29yZApA QCAtMTU0LDcgKzE1NCw3IEBAIGNtYWtlLXRzLW1vZGUtLWZvbnQtbG9jay1zZXR0aW5ncwog ICAgOmxhbmd1YWdlICdjbWFrZQogICAgOmZlYXR1cmUgJ3ZhcmlhYmxlCiAgICA6b3ZlcnJp ZGUgdAotICAgJygodmFyaWFibGUpIEBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKQor ICAgJygodmFyaWFibGUpIEBmb250LWxvY2stdmFyaWFibGUtcmVmLWZhY2UpCiAKICAgIDps YW5ndWFnZSAnY21ha2UKICAgIDpmZWF0dXJlICdlcnJvcgpkaWZmIC0tZ2l0IGEvbGlzcC9w cm9nbW9kZXMvY3NoYXJwLW1vZGUuZWwgYi9saXNwL3Byb2dtb2Rlcy9jc2hhcnAtbW9kZS5l bAppbmRleCAyOTNhOTEwMDgxYy4uMmI0OWI0OWRjNjIgMTAwNjQ0Ci0tLSBhL2xpc3AvcHJv Z21vZGVzL2NzaGFycC1tb2RlLmVsCisrKyBiL2xpc3AvcHJvZ21vZGVzL2NzaGFycC1tb2Rl LmVsCkBAIC03MzksOCArNzM5LDggQEAgY3NoYXJwLXRzLW1vZGUtLWZvbnQtbG9jay1zZXR0 aW5ncwogICAgOmxhbmd1YWdlICdjLXNoYXJwCiAgICA6b3ZlcnJpZGUgdAogICAgOmZlYXR1 cmUgJ3Byb3BlcnR5Ci0gICBgKChhdHRyaWJ1dGUgKGlkZW50aWZpZXIpIEBmb250LWxvY2st cHJvcGVydHktZmFjZSAoYXR0cmlidXRlX2FyZ3VtZW50X2xpc3QpKQotICAgICAoYXR0cmli dXRlIChpZGVudGlmaWVyKSBAZm9udC1sb2NrLXByb3BlcnR5LWZhY2UpKQorICAgYCgoYXR0 cmlidXRlIChpZGVudGlmaWVyKSBAZm9udC1sb2NrLXByb3BlcnR5LXJlZi1mYWNlIChhdHRy aWJ1dGVfYXJndW1lbnRfbGlzdCkpCisgICAgIChhdHRyaWJ1dGUgKGlkZW50aWZpZXIpIEBm b250LWxvY2stcHJvcGVydHktcmVmLWZhY2UpKQogCiAgICA6bGFuZ3VhZ2UgJ2Mtc2hhcnAK ICAgIDpvdmVycmlkZSB0CmRpZmYgLS1naXQgYS9saXNwL3Byb2dtb2Rlcy9nby10cy1tb2Rl LmVsIGIvbGlzcC9wcm9nbW9kZXMvZ28tdHMtbW9kZS5lbAppbmRleCA3ODAyYzFmYmZjYy4u ZDRiYWZkYjU3N2IgMTAwNjQ0Ci0tLSBhL2xpc3AvcHJvZ21vZGVzL2dvLXRzLW1vZGUuZWwK KysrIGIvbGlzcC9wcm9nbW9kZXMvZ28tdHMtbW9kZS5lbApAQCAtMTMzLDcgKzEzMyw3IEBA IGdvLXRzLW1vZGUtLWZvbnQtbG9jay1zZXR0aW5ncwogICAgICAobWV0aG9kX3NwZWMKICAg ICAgIG5hbWU6IChmaWVsZF9pZGVudGlmaWVyKSBAZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUt ZmFjZSkKICAgICAgKGZpZWxkX2RlY2xhcmF0aW9uCi0gICAgICBuYW1lOiAoZmllbGRfaWRl bnRpZmllcikgQGZvbnQtbG9jay1wcm9wZXJ0eS1mYWNlKQorICAgICAgbmFtZTogKGZpZWxk X2lkZW50aWZpZXIpIEBmb250LWxvY2stcHJvcGVydHktbmFtZS1mYWNlKQogICAgICAocGFy YW1ldGVyX2RlY2xhcmF0aW9uCiAgICAgICBuYW1lOiAoaWRlbnRpZmllcikgQGZvbnQtbG9j ay12YXJpYWJsZS1uYW1lLWZhY2UpCiAgICAgIChzaG9ydF92YXJfZGVjbGFyYXRpb24KQEAg LTE0NiwxMCArMTQ2LDEwIEBAIGdvLXRzLW1vZGUtLWZvbnQtbG9jay1zZXR0aW5ncwogICAg Omxhbmd1YWdlICdnbwogICAgOmZlYXR1cmUgJ2Z1bmN0aW9uCiAgICAnKChjYWxsX2V4cHJl c3Npb24KLSAgICAgIGZ1bmN0aW9uOiAoaWRlbnRpZmllcikgQGZvbnQtbG9jay1mdW5jdGlv bi1uYW1lLWZhY2UpCisgICAgICBmdW5jdGlvbjogKGlkZW50aWZpZXIpIEBmb250LWxvY2st ZnVuY3Rpb24tY2FsbC1mYWNlKQogICAgICAoY2FsbF9leHByZXNzaW9uCiAgICAgICBmdW5j dGlvbjogKHNlbGVjdG9yX2V4cHJlc3Npb24KLSAgICAgICAgICAgICAgICAgZmllbGQ6IChm aWVsZF9pZGVudGlmaWVyKSBAZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkpKQorICAg ICAgICAgICAgICAgICBmaWVsZDogKGZpZWxkX2lkZW50aWZpZXIpIEBmb250LWxvY2stZnVu Y3Rpb24tY2FsbC1mYWNlKSkpCiAKICAgIDpsYW5ndWFnZSAnZ28KICAgIDpmZWF0dXJlICdr ZXl3b3JkCkBAIC0xNzcsMTIgKzE3NywxMiBAQCBnby10cy1tb2RlLS1mb250LWxvY2stc2V0 dGluZ3MKIAogICAgOmxhbmd1YWdlICdnbwogICAgOmZlYXR1cmUgJ3Byb3BlcnR5Ci0gICAn KChmaWVsZF9pZGVudGlmaWVyKSBAZm9udC1sb2NrLXByb3BlcnR5LWZhY2UKLSAgICAgKGtl eWVkX2VsZW1lbnQgKF8gKGlkZW50aWZpZXIpIEBmb250LWxvY2stcHJvcGVydHktZmFjZSkp KQorICAgJygoc2VsZWN0b3JfZXhwcmVzc2lvbiBmaWVsZDogKGZpZWxkX2lkZW50aWZpZXIp IEBmb250LWxvY2stcHJvcGVydHktcmVmLWZhY2UpCisgICAgIChrZXllZF9lbGVtZW50IChf IChpZGVudGlmaWVyKSBAZm9udC1sb2NrLXByb3BlcnR5LXJlZi1mYWNlKSkpCiAKICAgIDps YW5ndWFnZSAnZ28KICAgIDpmZWF0dXJlICd2YXJpYWJsZQotICAgJygoaWRlbnRpZmllcikg QGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpCisgICAnKChpZGVudGlmaWVyKSBAZm9u dC1sb2NrLXZhcmlhYmxlLXJlZi1mYWNlKQogCiAgICA6bGFuZ3VhZ2UgJ2dvCiAgICA6ZmVh dHVyZSAnZXNjYXBlLXNlcXVlbmNlCmRpZmYgLS1naXQgYS9saXNwL3Byb2dtb2Rlcy9qYXZh LXRzLW1vZGUuZWwgYi9saXNwL3Byb2dtb2Rlcy9qYXZhLXRzLW1vZGUuZWwKaW5kZXggNjk0 OGViYmE2MzEuLmExZjNhZDY5MmMyIDEwMDY0NAotLS0gYS9saXNwL3Byb2dtb2Rlcy9qYXZh LXRzLW1vZGUuZWwKKysrIGIvbGlzcC9wcm9nbW9kZXMvamF2YS10cy1tb2RlLmVsCkBAIC0y MjAsNyArMjIwLDcgQEAgamF2YS10cy1tb2RlLS1mb250LWxvY2stc2V0dGluZ3MKIAogICAg ICAobWV0aG9kX3JlZmVyZW5jZSAoaWRlbnRpZmllcikgQGZvbnQtbG9jay10eXBlLWZhY2Up CiAKLSAgICAgKHNjb3BlZF9pZGVudGlmaWVyIChpZGVudGlmaWVyKSBAZm9udC1sb2NrLXZh cmlhYmxlLW5hbWUtZmFjZSkKKyAgICAgKHNjb3BlZF9pZGVudGlmaWVyIChpZGVudGlmaWVy KSBAZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpCiAKICAgICAgKChzY29wZWRfaWRlbnRpZmll ciBuYW1lOiAoaWRlbnRpZmllcikgQGZvbnQtbG9jay10eXBlLWZhY2UpCiAgICAgICAoOm1h dGNoICJeW0EtWl0iIEBmb250LWxvY2stdHlwZS1mYWNlKSkKQEAgLTI0NCw3ICsyNDQsNyBA QCBqYXZhLXRzLW1vZGUtLWZvbnQtbG9jay1zZXR0aW5ncwogICAgICAgbmFtZTogKGlkZW50 aWZpZXIpIEBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKQogCiAgICAgIChlbGVtZW50 X3ZhbHVlX3BhaXIKLSAgICAgIGtleTogKGlkZW50aWZpZXIpIEBmb250LWxvY2stcHJvcGVy dHktZmFjZSkKKyAgICAgIGtleTogKGlkZW50aWZpZXIpIEBmb250LWxvY2stcHJvcGVydHkt cmVmLWZhY2UpCiAKICAgICAgKGZvcm1hbF9wYXJhbWV0ZXIKICAgICAgIG5hbWU6IChpZGVu dGlmaWVyKSBAZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkKQEAgLTI1NSwxNCArMjU1 LDE0IEBAIGphdmEtdHMtbW9kZS0tZm9udC1sb2NrLXNldHRpbmdzCiAgICA6b3ZlcnJpZGUg dAogICAgOmZlYXR1cmUgJ2V4cHJlc3Npb24KICAgICcoKG1ldGhvZF9pbnZvY2F0aW9uCi0g ICAgICBvYmplY3Q6IChpZGVudGlmaWVyKSBAZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFj ZSkKKyAgICAgIG9iamVjdDogKGlkZW50aWZpZXIpIEBmb250LWxvY2stdmFyaWFibGUtcmVm LWZhY2UpCiAKICAgICAgKG1ldGhvZF9pbnZvY2F0aW9uCi0gICAgICBuYW1lOiAoaWRlbnRp ZmllcikgQGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpCisgICAgICBuYW1lOiAoaWRl bnRpZmllcikgQGZvbnQtbG9jay1mdW5jdGlvbi1jYWxsLWZhY2UpCiAKICAgICAgKGFyZ3Vt ZW50X2xpc3QgKGlkZW50aWZpZXIpIEBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKQog Ci0gICAgIChleHByZXNzaW9uX3N0YXRlbWVudCAoaWRlbnRpZmllcikgQGZvbnQtbG9jay12 YXJpYWJsZS1uYW1lLWZhY2UpKQorICAgICAoZXhwcmVzc2lvbl9zdGF0ZW1lbnQgKGlkZW50 aWZpZXIpIEBmb250LWxvY2stdmFyaWFibGUtcmVmLWZhY2UpKQogCiAgICA6bGFuZ3VhZ2Ug J2phdmEKICAgIDpmZWF0dXJlICdicmFja2V0CmRpZmYgLS1naXQgYS9saXNwL3Byb2dtb2Rl cy9qcy5lbCBiL2xpc3AvcHJvZ21vZGVzL2pzLmVsCmluZGV4IDAyN2Q2MDUzZjZlLi5lNTNh ODBiZDQ5OSAxMDA2NDQKLS0tIGEvbGlzcC9wcm9nbW9kZXMvanMuZWwKKysrIGIvbGlzcC9w cm9nbW9kZXMvanMuZWwKQEAgLTM1NDQsMTEgKzM1NDQsMTAgQEAganMtLXRyZWVzaXQtZm9u dC1sb2NrLXNldHRpbmdzCiAgICAgICB2YWx1ZTogWyhmdW5jdGlvbikgKGFycm93X2Z1bmN0 aW9uKV0pCiAKICAgICAgKHZhcmlhYmxlX2RlY2xhcmF0b3IKLSAgICAgIG5hbWU6IChhcnJh eV9wYXR0ZXJuCi0gICAgICAgICAgICAgKGlkZW50aWZpZXIpCi0gICAgICAgICAgICAgKGlk ZW50aWZpZXIpCi0gICAgICAgICAgICAgQGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2Up Ci0gICAgICB2YWx1ZTogKGFycmF5IChudW1iZXIpIChmdW5jdGlvbikpKQorICAgICAgbmFt ZTogWyhhcnJheV9wYXR0ZXJuIChpZGVudGlmaWVyKSBAZm9udC1sb2NrLXZhcmlhYmxlLW5h bWUtZmFjZSkKKyAgICAgICAgICAgICAob2JqZWN0X3BhdHRlcm4KKyAgICAgICAgICAgICAg KHNob3J0aGFuZF9wcm9wZXJ0eV9pZGVudGlmaWVyX3BhdHRlcm4pIEBmb250LWxvY2stdmFy aWFibGUtbmFtZS1mYWNlKV0pCisKICAgICAgOzsgZnVsbCBtb2R1bGUgaW1wb3J0cwogICAg ICAoaW1wb3J0X2NsYXVzZSAoaWRlbnRpZmllcikgQGZvbnQtbG9jay12YXJpYWJsZS1uYW1l LWZhY2UpCiAgICAgIDs7IG5hbWVkIGltcG9ydHMgd2l0aCBhbGlhc2luZwpAQCAtMzU2NCwx NSArMzU2MywxMyBAQCBqcy0tdHJlZXNpdC1mb250LWxvY2stc2V0dGluZ3MKIAogICAgOmxh bmd1YWdlICdqYXZhc2NyaXB0CiAgICA6ZmVhdHVyZSAncHJvcGVydHkKLSAgICcoKChwcm9w ZXJ0eV9pZGVudGlmaWVyKSBAZm9udC1sb2NrLXByb3BlcnR5LWZhY2UKKyAgICcoKChwcm9w ZXJ0eV9pZGVudGlmaWVyKSBAZm9udC1sb2NrLXByb3BlcnR5LXJlZi1mYWNlCiAgICAgICAo OnByZWQganMtLXRyZWVzaXQtcHJvcGVydHktbm90LWZ1bmN0aW9uLXAKLSAgICAgICAgICAg ICBAZm9udC1sb2NrLXByb3BlcnR5LWZhY2UpKQotCi0gICAgIChwYWlyIHZhbHVlOiAoaWRl bnRpZmllcikgQGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpCisgICAgICAgICAgICAg QGZvbnQtbG9jay1wcm9wZXJ0eS1yZWYtZmFjZSkpCiAKLSAgICAgKChzaG9ydGhhbmRfcHJv cGVydHlfaWRlbnRpZmllcikgQGZvbnQtbG9jay1wcm9wZXJ0eS1mYWNlKQorICAgICAocGFp ciB2YWx1ZTogKGlkZW50aWZpZXIpIEBmb250LWxvY2stdmFyaWFibGUtcmVmLWZhY2UpCiAK LSAgICAgKChzaG9ydGhhbmRfcHJvcGVydHlfaWRlbnRpZmllcl9wYXR0ZXJuKSBAZm9udC1s b2NrLXByb3BlcnR5LWZhY2UpKQorICAgICAoKHNob3J0aGFuZF9wcm9wZXJ0eV9pZGVudGlm aWVyKSBAZm9udC1sb2NrLXByb3BlcnR5LXJlZi1mYWNlKSkKIAogICAgOmxhbmd1YWdlICdq YXZhc2NyaXB0CiAgICA6ZmVhdHVyZSAnYXNzaWdubWVudApAQCAtMzU4MiwxNCArMzU3OSwx NCBAQCBqcy0tdHJlZXNpdC1mb250LWxvY2stc2V0dGluZ3MKICAgIDpsYW5ndWFnZSAnamF2 YXNjcmlwdAogICAgOmZlYXR1cmUgJ2Z1bmN0aW9uCiAgICAnKChjYWxsX2V4cHJlc3Npb24K LSAgICAgIGZ1bmN0aW9uOiBbKGlkZW50aWZpZXIpIEBmb250LWxvY2stZnVuY3Rpb24tbmFt ZS1mYWNlCisgICAgICBmdW5jdGlvbjogWyhpZGVudGlmaWVyKSBAZm9udC1sb2NrLWZ1bmN0 aW9uLWNhbGwtZmFjZQogICAgICAgICAgICAgICAgICAobWVtYmVyX2V4cHJlc3Npb24KICAg ICAgICAgICAgICAgICAgIHByb3BlcnR5OgotICAgICAgICAgICAgICAgICAgKHByb3BlcnR5 X2lkZW50aWZpZXIpIEBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKV0pCisgICAgICAg ICAgICAgICAgICAocHJvcGVydHlfaWRlbnRpZmllcikgQGZvbnQtbG9jay1mdW5jdGlvbi1j YWxsLWZhY2UpXSkKICAgICAgKG1ldGhvZF9kZWZpbml0aW9uCiAgICAgICBuYW1lOiAocHJv cGVydHlfaWRlbnRpZmllcikgQGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpCiAgICAg IChmdW5jdGlvbl9kZWNsYXJhdGlvbgotICAgICAgbmFtZTogKGlkZW50aWZpZXIpIEBmb250 LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKQorICAgICAgbmFtZTogKGlkZW50aWZpZXIpIEBm b250LWxvY2stZnVuY3Rpb24tY2FsbC1mYWNlKQogICAgICAoZnVuY3Rpb24KICAgICAgIG5h bWU6IChpZGVudGlmaWVyKSBAZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkpCiAKQEAg LTM1OTcsMTUgKzM1OTQsMTUgQEAganMtLXRyZWVzaXQtZm9udC1sb2NrLXNldHRpbmdzCiAg ICA6ZmVhdHVyZSAnanN4CiAgICAnKChqc3hfb3BlbmluZ19lbGVtZW50CiAgICAgICBbKG5l c3RlZF9pZGVudGlmaWVyIChpZGVudGlmaWVyKSkgKGlkZW50aWZpZXIpXQotICAgICAgQGZv bnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpCisgICAgICBAZm9udC1sb2NrLWZ1bmN0aW9u LWNhbGwtZmFjZSkKIAogICAgICAoanN4X2Nsb3NpbmdfZWxlbWVudAogICAgICAgWyhuZXN0 ZWRfaWRlbnRpZmllciAoaWRlbnRpZmllcikpIChpZGVudGlmaWVyKV0KLSAgICAgIEBmb250 LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKQorICAgICAgQGZvbnQtbG9jay1mdW5jdGlvbi1j YWxsLWZhY2UpCiAKICAgICAgKGpzeF9zZWxmX2Nsb3NpbmdfZWxlbWVudAogICAgICAgWyhu ZXN0ZWRfaWRlbnRpZmllciAoaWRlbnRpZmllcikpIChpZGVudGlmaWVyKV0KLSAgICAgIEBm b250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKQorICAgICAgQGZvbnQtbG9jay1mdW5jdGlv bi1jYWxsLWZhY2UpCiAKICAgICAgKGpzeF9hdHRyaWJ1dGUKICAgICAgIChwcm9wZXJ0eV9p ZGVudGlmaWVyKQpAQCAtMzY4NCw4ICszNjgxLDggQEAganMtLXRyZWVzaXQtZm9udGlmeS1h c3NpZ25tZW50LWxocwogICAgICh0cmVlc2l0LWZvbnRpZnktd2l0aC1vdmVycmlkZQogICAg ICAodHJlZXNpdC1ub2RlLXN0YXJ0IG5vZGUpICh0cmVlc2l0LW5vZGUtZW5kIG5vZGUpCiAg ICAgIChwY2FzZSAodHJlZXNpdC1ub2RlLXR5cGUgbm9kZSkKLSAgICAgICAoImlkZW50aWZp ZXIiICdmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKQotICAgICAgICgicHJvcGVydHlf aWRlbnRpZmllciIgJ2ZvbnQtbG9jay1wcm9wZXJ0eS1mYWNlKSkKKyAgICAgICAoImlkZW50 aWZpZXIiICdmb250LWxvY2stdmFyaWFibGUtcmVmLWZhY2UpCisgICAgICAgKCJwcm9wZXJ0 eV9pZGVudGlmaWVyIiAnZm9udC1sb2NrLXByb3BlcnR5LXJlZi1mYWNlKSkKICAgICAgb3Zl cnJpZGUgc3RhcnQgZW5kKSkpCiAKIChkZWZ1biBqcy0tdHJlZXNpdC1kZWZ1bi1uYW1lIChu b2RlKQpkaWZmIC0tZ2l0IGEvbGlzcC9wcm9nbW9kZXMvcHl0aG9uLmVsIGIvbGlzcC9wcm9n bW9kZXMvcHl0aG9uLmVsCmluZGV4IDBkNzE0YzMxZTllLi4wZTQ3NTdiZTY1YiAxMDA2NDQK LS0tIGEvbGlzcC9wcm9nbW9kZXMvcHl0aG9uLmVsCisrKyBiL2xpc3AvcHJvZ21vZGVzL3B5 dGhvbi5lbApAQCAtMTEwNiwyNCArMTEwNiwyNSBAQCBweXRob24tLXRyZWVzaXQtc2V0dGlu Z3MKICAgIDpsYW5ndWFnZSAncHl0aG9uCiAgICAnKChpbnRlcnBvbGF0aW9uKSBAcHl0aG9u LS10cmVlc2l0LWZvbnRpZnktc3RyaW5nLWludGVycG9sYXRpb24pCiAKKyAgIDpmZWF0dXJl ICdrZXl3b3JkCisgICA6bGFuZ3VhZ2UgJ3B5dGhvbgorICAgYChbLEBweXRob24tLXRyZWVz aXQta2V5d29yZHNdIEBmb250LWxvY2sta2V5d29yZC1mYWNlCisgICAgICgoaWRlbnRpZmll cikgQGZvbnQtbG9jay1rZXl3b3JkLWZhY2UKKyAgICAgICg6bWF0Y2ggIl5zZWxmJCIgQGZv bnQtbG9jay1rZXl3b3JkLWZhY2UpKSkKKwogICAgOmZlYXR1cmUgJ2RlZmluaXRpb24KICAg IDpsYW5ndWFnZSAncHl0aG9uCiAgICAnKChmdW5jdGlvbl9kZWZpbml0aW9uCiAgICAgICBu YW1lOiAoaWRlbnRpZmllcikgQGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpCiAgICAg IChjbGFzc19kZWZpbml0aW9uCi0gICAgICBuYW1lOiAoaWRlbnRpZmllcikgQGZvbnQtbG9j ay10eXBlLWZhY2UpKQorICAgICAgbmFtZTogKGlkZW50aWZpZXIpIEBmb250LWxvY2stdHlw ZS1mYWNlKQorICAgICAocGFyYW1ldGVycyAoaWRlbnRpZmllcikgQGZvbnQtbG9jay12YXJp YWJsZS1uYW1lLWZhY2UpKQogCiAgICA6ZmVhdHVyZSAnZnVuY3Rpb24KICAgIDpsYW5ndWFn ZSAncHl0aG9uCi0gICAnKChjYWxsIGZ1bmN0aW9uOiAoaWRlbnRpZmllcikgQGZvbnQtbG9j ay1mdW5jdGlvbi1uYW1lLWZhY2UpCisgICAnKChjYWxsIGZ1bmN0aW9uOiAoaWRlbnRpZmll cikgQGZvbnQtbG9jay1mdW5jdGlvbi1jYWxsLWZhY2UpCiAgICAgIChjYWxsIGZ1bmN0aW9u OiAoYXR0cmlidXRlCi0gICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlOiAoaWRlbnRp ZmllcikgQGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpKSkKLQotICAgOmZlYXR1cmUg J2tleXdvcmQKLSAgIDpsYW5ndWFnZSAncHl0aG9uCi0gICBgKFssQHB5dGhvbi0tdHJlZXNp dC1rZXl3b3Jkc10gQGZvbnQtbG9jay1rZXl3b3JkLWZhY2UKLSAgICAgKChpZGVudGlmaWVy KSBAZm9udC1sb2NrLWtleXdvcmQtZmFjZQotICAgICAgKDptYXRjaCAiXnNlbGYkIiBAZm9u dC1sb2NrLWtleXdvcmQtZmFjZSkpKQorICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0 ZTogKGlkZW50aWZpZXIpIEBmb250LWxvY2stZnVuY3Rpb24tY2FsbC1mYWNlKSkpCiAKICAg IDpmZWF0dXJlICdidWlsdGluCiAgICA6bGFuZ3VhZ2UgJ3B5dGhvbgpAQCAtMTE0Niw3ICsx MTQ3LDcgQEAgcHl0aG9uLS10cmVlc2l0LXNldHRpbmdzCiAgICAgICAgICAgICAgICAgIEBm b250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKQogICAgICAoYXNzaWdubWVudCBsZWZ0OiAo YXR0cmlidXRlCiAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGU6IChpZGVudGlm aWVyKQotICAgICAgICAgICAgICAgICAgICAgICAgQGZvbnQtbG9jay1wcm9wZXJ0eS1mYWNl KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIEBmb250LWxvY2stcHJvcGVydHktcmVmLWZh Y2UpKQogICAgICAocGF0dGVybl9saXN0IChpZGVudGlmaWVyKQogICAgICAgICAgICAgICAg ICAgIEBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKQogICAgICAodHVwbGVfcGF0dGVy biAoaWRlbnRpZmllcikKQEAgLTExODMsMTIgKzExODQsMTIgQEAgcHl0aG9uLS10cmVlc2l0 LXNldHRpbmdzCiAgICA6ZmVhdHVyZSAncHJvcGVydHkKICAgIDpsYW5ndWFnZSAncHl0aG9u CiAgICAnKChhdHRyaWJ1dGUKLSAgICAgIGF0dHJpYnV0ZTogKGlkZW50aWZpZXIpIEBmb250 LWxvY2stcHJvcGVydHktZmFjZSkKKyAgICAgIGF0dHJpYnV0ZTogKGlkZW50aWZpZXIpIEBm b250LWxvY2stcHJvcGVydHktcmVmLWZhY2UpCiAgICAgIChjbGFzc19kZWZpbml0aW9uCiAg ICAgICBib2R5OiAoYmxvY2sKICAgICAgICAgICAgICAoZXhwcmVzc2lvbl9zdGF0ZW1lbnQK ICAgICAgICAgICAgICAgKGFzc2lnbm1lbnQgbGVmdDoKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgKGlkZW50aWZpZXIpIEBmb250LWxvY2stcHJvcGVydHktZmFjZSkpKSkpCisgICAg ICAgICAgICAgICAgICAgICAgICAgIChpZGVudGlmaWVyKSBAZm9udC1sb2NrLXByb3BlcnR5 LXJlZi1mYWNlKSkpKSkKIAogICAgOmZlYXR1cmUgJ29wZXJhdG9yCiAgICA6bGFuZ3VhZ2Ug J3B5dGhvbgpAQCAtMTIxMSwxMCArMTIxMiwxMCBAQCBweXRob24tLXRyZWVzaXQtdmFyaWFi bGUtcAogICAiQ2hlY2sgd2hldGhlciBOT0RFIGlzIGEgdmFyaWFibGUuCiBOT0RFJ3MgdHlw ZSBzaG91bGQgYmUgXCJpZGVudGlmaWVyXCIuIgogICA7OyBBbiBpZGVudGlmaWVyIGNhbiBi ZSBhIGZ1bmN0aW9uL2NsYXNzIG5hbWUsIGEgcHJvcGVydHksIG9yIGEKLSAgOzsgdmFyaWFi bGVzLiAgVGhpcyBmdW5jdGlvbiBmaWx0ZXJzIG91dCBmdW5jdGlvbi9jbGFzcyBuYW1lcyBh bmQKLSAgOzsgcHJvcGVydGllcy4KKyAgOzsgdmFyaWFibGVzLiAgVGhpcyBmdW5jdGlvbiBm aWx0ZXJzIG91dCBmdW5jdGlvbi9jbGFzcyBuYW1lcywKKyAgOzsgcHJvcGVydGllcyBhbmQg bWV0aG9kIHBhcmFtZXRlcnMuCiAgIChwY2FzZSAodHJlZXNpdC1ub2RlLXR5cGUgKHRyZWVz aXQtbm9kZS1wYXJlbnQgbm9kZSkpCi0gICAgKChvciAiZnVuY3Rpb25fZGVmaW5pdGlvbiIg ImNsYXNzX2RlZmluaXRpb24iKSBuaWwpCisgICAgKChvciAiZnVuY3Rpb25fZGVmaW5pdGlv biIgImNsYXNzX2RlZmluaXRpb24iICJwYXJhbWV0ZXJzIikgbmlsKQogICAgICgiYXR0cmli dXRlIgogICAgICAocGNhc2UgKHRyZWVzaXQtbm9kZS1maWVsZC1uYW1lIG5vZGUpCiAgICAg ICAgKCJvYmplY3QiIHQpCmRpZmYgLS1naXQgYS9saXNwL3Byb2dtb2Rlcy9ydWJ5LXRzLW1v ZGUuZWwgYi9saXNwL3Byb2dtb2Rlcy9ydWJ5LXRzLW1vZGUuZWwKaW5kZXggMDFiMGNkNzg0 YTMuLmZlZGJhMjAwZjgzIDEwMDY0NAotLS0gYS9saXNwL3Byb2dtb2Rlcy9ydWJ5LXRzLW1v ZGUuZWwKKysrIGIvbGlzcC9wcm9nbW9kZXMvcnVieS10cy1tb2RlLmVsCkBAIC0yOTIsMTEg KzI5MiwxMSBAQCBydWJ5LXRzLS1mb250LWxvY2stc2V0dGluZ3MKIAogICAgOmxhbmd1YWdl IGxhbmd1YWdlCiAgICA6ZmVhdHVyZSAnZ2xvYmFsCi0gICAnKChnbG9iYWxfdmFyaWFibGUp IEBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKQorICAgJygoZ2xvYmFsX3ZhcmlhYmxl KSBAZm9udC1sb2NrLXZhcmlhYmxlLXJlZi1mYWNlKQogCiAgICA6bGFuZ3VhZ2UgbGFuZ3Vh Z2UKICAgIDpmZWF0dXJlICdpbnN0YW5jZQotICAgJygoaW5zdGFuY2VfdmFyaWFibGUpIEBm b250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKQorICAgJygoaW5zdGFuY2VfdmFyaWFibGUp IEBmb250LWxvY2stdmFyaWFibGUtcmVmLWZhY2UpCiAKICAgIDpsYW5ndWFnZSBsYW5ndWFn ZQogICAgOmZlYXR1cmUgJ21ldGhvZC1kZWZpbml0aW9uCkBAIC0zNTAsNyArMzUwLDcgQEAg cnVieS10cy0tZm9udC1sb2NrLXNldHRpbmdzCiAgICA6bGFuZ3VhZ2UgbGFuZ3VhZ2UKICAg IDpmZWF0dXJlICdmdW5jdGlvbgogICAgJygoY2FsbAotICAgICAgbWV0aG9kOiAoaWRlbnRp ZmllcikgQGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpKQorICAgICAgbWV0aG9kOiAo aWRlbnRpZmllcikgQGZvbnQtbG9jay1mdW5jdGlvbi1jYWxsLWZhY2UpKQogCiAgICA6bGFu Z3VhZ2UgbGFuZ3VhZ2UKICAgIDpmZWF0dXJlICdhc3NpZ25tZW50CmRpZmYgLS1naXQgYS9s aXNwL3Byb2dtb2Rlcy9ydXN0LXRzLW1vZGUuZWwgYi9saXNwL3Byb2dtb2Rlcy9ydXN0LXRz LW1vZGUuZWwKaW5kZXggZWU3M2ViZjdhOWYuLmE0NmQ0NDJhMGU1IDEwMDY0NAotLS0gYS9s aXNwL3Byb2dtb2Rlcy9ydXN0LXRzLW1vZGUuZWwKKysrIGIvbGlzcC9wcm9nbW9kZXMvcnVz dC10cy1tb2RlLmVsCkBAIC0xNTcsNyArMTU3LDcgQEAgcnVzdC10cy1tb2RlLS1mb250LWxv Y2stc2V0dGluZ3MKICAgICcoKGZ1bmN0aW9uX2l0ZW0gbmFtZTogKGlkZW50aWZpZXIpIEBm b250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKQogICAgICAobWFjcm9fZGVmaW5pdGlvbiAi bWFjcm9fcnVsZXMhIiBAZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpCiAgICAgIChtYWNyb19k ZWZpbml0aW9uIChpZGVudGlmaWVyKSBAZm9udC1sb2NrLXByZXByb2Nlc3Nvci1mYWNlKQot ICAgICAoZmllbGRfZGVjbGFyYXRpb24gbmFtZTogKGZpZWxkX2lkZW50aWZpZXIpIEBmb250 LWxvY2stcHJvcGVydHktZmFjZSkKKyAgICAgKGZpZWxkX2RlY2xhcmF0aW9uIG5hbWU6IChm aWVsZF9pZGVudGlmaWVyKSBAZm9udC1sb2NrLXByb3BlcnR5LW5hbWUtZmFjZSkKICAgICAg KHBhcmFtZXRlciBwYXR0ZXJuOiAoXykgQHJ1c3QtdHMtbW9kZS0tZm9udGlmeS1wYXR0ZXJu KQogICAgICAoY2xvc3VyZV9wYXJhbWV0ZXJzIChfKSBAcnVzdC10cy1tb2RlLS1mb250aWZ5 LXBhdHRlcm4pCiAgICAgIChsZXRfZGVjbGFyYXRpb24gcGF0dGVybjogKF8pIEBydXN0LXRz LW1vZGUtLWZvbnRpZnktcGF0dGVybikKQEAgLTE3NCwxNyArMTc0LDE3IEBAIHJ1c3QtdHMt bW9kZS0tZm9udC1sb2NrLXNldHRpbmdzCiAgICA6ZmVhdHVyZSAnZnVuY3Rpb24KICAgICco KGNhbGxfZXhwcmVzc2lvbgogICAgICAgZnVuY3Rpb246Ci0gICAgICBbKGlkZW50aWZpZXIp IEBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlCisgICAgICBbKGlkZW50aWZpZXIpIEBm b250LWxvY2stZnVuY3Rpb24tY2FsbC1mYWNlCiAgICAgICAgKGZpZWxkX2V4cHJlc3Npb24K LSAgICAgICAgZmllbGQ6IChmaWVsZF9pZGVudGlmaWVyKSBAZm9udC1sb2NrLWZ1bmN0aW9u LW5hbWUtZmFjZSkKKyAgICAgICAgZmllbGQ6IChmaWVsZF9pZGVudGlmaWVyKSBAZm9udC1s b2NrLWZ1bmN0aW9uLWNhbGwtZmFjZSkKICAgICAgICAoc2NvcGVkX2lkZW50aWZpZXIKLSAg ICAgICAgbmFtZTogKGlkZW50aWZpZXIpIEBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNl KV0pCisgICAgICAgIG5hbWU6IChpZGVudGlmaWVyKSBAZm9udC1sb2NrLWZ1bmN0aW9uLWNh bGwtZmFjZSldKQogICAgICAoZ2VuZXJpY19mdW5jdGlvbgotICAgICAgZnVuY3Rpb246IFso aWRlbnRpZmllcikgQGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UKKyAgICAgIGZ1bmN0 aW9uOiBbKGlkZW50aWZpZXIpIEBmb250LWxvY2stZnVuY3Rpb24tY2FsbC1mYWNlCiAgICAg ICAgICAgICAgICAgIChmaWVsZF9leHByZXNzaW9uCi0gICAgICAgICAgICAgICAgICBmaWVs ZDogKGZpZWxkX2lkZW50aWZpZXIpIEBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKQor ICAgICAgICAgICAgICAgICAgZmllbGQ6IChmaWVsZF9pZGVudGlmaWVyKSBAZm9udC1sb2Nr LWZ1bmN0aW9uLWNhbGwtZmFjZSkKICAgICAgICAgICAgICAgICAgKHNjb3BlZF9pZGVudGlm aWVyCi0gICAgICAgICAgICAgICAgICBuYW1lOiAoaWRlbnRpZmllcikgQGZvbnQtbG9jay1m dW5jdGlvbi1uYW1lLWZhY2UpXSkKKyAgICAgICAgICAgICAgICAgIG5hbWU6IChpZGVudGlm aWVyKSBAZm9udC1sb2NrLWZ1bmN0aW9uLWNhbGwtZmFjZSldKQogICAgICAobWFjcm9faW52 b2NhdGlvbiBtYWNybzogKGlkZW50aWZpZXIpIEBmb250LWxvY2stcHJlcHJvY2Vzc29yLWZh Y2UpKQogCiAgICA6bGFuZ3VhZ2UgJ3J1c3QKQEAgLTIzOSw4ICsyMzksOCBAQCBydXN0LXRz LW1vZGUtLWZvbnQtbG9jay1zZXR0aW5ncwogCiAgICA6bGFuZ3VhZ2UgJ3J1c3QKICAgIDpm ZWF0dXJlICdwcm9wZXJ0eQotICAgJygoZmllbGRfaWRlbnRpZmllcikgQGZvbnQtbG9jay1w cm9wZXJ0eS1mYWNlCi0gICAgIChzaG9ydGhhbmRfZmllbGRfaW5pdGlhbGl6ZXIgKGlkZW50 aWZpZXIpIEBmb250LWxvY2stcHJvcGVydHktZmFjZSkpCisgICAnKChmaWVsZF9pZGVudGlm aWVyKSBAZm9udC1sb2NrLXByb3BlcnR5LXJlZi1mYWNlCisgICAgIChzaG9ydGhhbmRfZmll bGRfaW5pdGlhbGl6ZXIgKGlkZW50aWZpZXIpIEBmb250LWxvY2stcHJvcGVydHktcmVmLWZh Y2UpKQogCiAgICA7OyBNdXN0IGJlIHVuZGVyIHR5cGUsIG90aGVyd2lzZSBzb21lIGltcG9y dHMgY2FuIGJlIGhpZ2hsaWdodGVkIGFzIGNvbnN0YW50cy4KICAgIDpsYW5ndWFnZSAncnVz dApAQCAtMjUxLDI1ICsyNTEsMjUgQEAgcnVzdC10cy1tb2RlLS1mb250LWxvY2stc2V0dGlu Z3MKIAogICAgOmxhbmd1YWdlICdydXN0CiAgICA6ZmVhdHVyZSAndmFyaWFibGUKLSAgICco KGFyZ3VtZW50cyAoaWRlbnRpZmllcikgQGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2Up Ci0gICAgIChhcnJheV9leHByZXNzaW9uIChpZGVudGlmaWVyKSBAZm9udC1sb2NrLXZhcmlh YmxlLW5hbWUtZmFjZSkKLSAgICAgKGFzc2lnbm1lbnRfZXhwcmVzc2lvbiByaWdodDogKGlk ZW50aWZpZXIpIEBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKQotICAgICAoYmluYXJ5 X2V4cHJlc3Npb24gbGVmdDogKGlkZW50aWZpZXIpIEBmb250LWxvY2stdmFyaWFibGUtbmFt ZS1mYWNlKQotICAgICAoYmluYXJ5X2V4cHJlc3Npb24gcmlnaHQ6IChpZGVudGlmaWVyKSBA Zm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkKLSAgICAgKGJsb2NrIChpZGVudGlmaWVy KSBAZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkKLSAgICAgKGNvbXBvdW5kX2Fzc2ln bm1lbnRfZXhwciByaWdodDogKGlkZW50aWZpZXIpIEBmb250LWxvY2stdmFyaWFibGUtbmFt ZS1mYWNlKQotICAgICAoZmllbGRfZXhwcmVzc2lvbiB2YWx1ZTogKGlkZW50aWZpZXIpIEBm b250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKQotICAgICAoZmllbGRfaW5pdGlhbGl6ZXIg dmFsdWU6IChpZGVudGlmaWVyKSBAZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkKLSAg ICAgKGlmX2V4cHJlc3Npb24gY29uZGl0aW9uOiAoaWRlbnRpZmllcikgQGZvbnQtbG9jay12 YXJpYWJsZS1uYW1lLWZhY2UpCi0gICAgIChsZXRfY29uZGl0aW9uIHZhbHVlOiAoaWRlbnRp ZmllcikgQGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpCi0gICAgIChsZXRfZGVjbGFy YXRpb24gdmFsdWU6IChpZGVudGlmaWVyKSBAZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFj ZSkKLSAgICAgKG1hdGNoX2FybSB2YWx1ZTogKGlkZW50aWZpZXIpIEBmb250LWxvY2stdmFy aWFibGUtbmFtZS1mYWNlKQotICAgICAobWF0Y2hfZXhwcmVzc2lvbiB2YWx1ZTogKGlkZW50 aWZpZXIpIEBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKQotICAgICAocmVmZXJlbmNl X2V4cHJlc3Npb24gdmFsdWU6IChpZGVudGlmaWVyKSBAZm9udC1sb2NrLXZhcmlhYmxlLW5h bWUtZmFjZSkKLSAgICAgKHJldHVybl9leHByZXNzaW9uIChpZGVudGlmaWVyKSBAZm9udC1s b2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkKLSAgICAgKHR1cGxlX2V4cHJlc3Npb24gKGlkZW50 aWZpZXIpIEBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKQotICAgICAodW5hcnlfZXhw cmVzc2lvbiAoaWRlbnRpZmllcikgQGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpCi0g ICAgICh3aGlsZV9leHByZXNzaW9uIGNvbmRpdGlvbjogKGlkZW50aWZpZXIpIEBmb250LWxv Y2stdmFyaWFibGUtbmFtZS1mYWNlKSkKKyAgICcoKGFyZ3VtZW50cyAoaWRlbnRpZmllcikg QGZvbnQtbG9jay12YXJpYWJsZS1yZWYtZmFjZSkKKyAgICAgKGFycmF5X2V4cHJlc3Npb24g KGlkZW50aWZpZXIpIEBmb250LWxvY2stdmFyaWFibGUtcmVmLWZhY2UpCisgICAgIChhc3Np Z25tZW50X2V4cHJlc3Npb24gcmlnaHQ6IChpZGVudGlmaWVyKSBAZm9udC1sb2NrLXZhcmlh YmxlLXJlZi1mYWNlKQorICAgICAoYmluYXJ5X2V4cHJlc3Npb24gbGVmdDogKGlkZW50aWZp ZXIpIEBmb250LWxvY2stdmFyaWFibGUtcmVmLWZhY2UpCisgICAgIChiaW5hcnlfZXhwcmVz c2lvbiByaWdodDogKGlkZW50aWZpZXIpIEBmb250LWxvY2stdmFyaWFibGUtcmVmLWZhY2Up CisgICAgIChibG9jayAoaWRlbnRpZmllcikgQGZvbnQtbG9jay12YXJpYWJsZS1yZWYtZmFj ZSkKKyAgICAgKGNvbXBvdW5kX2Fzc2lnbm1lbnRfZXhwciByaWdodDogKGlkZW50aWZpZXIp IEBmb250LWxvY2stdmFyaWFibGUtcmVmLWZhY2UpCisgICAgIChmaWVsZF9leHByZXNzaW9u IHZhbHVlOiAoaWRlbnRpZmllcikgQGZvbnQtbG9jay12YXJpYWJsZS1yZWYtZmFjZSkKKyAg ICAgKGZpZWxkX2luaXRpYWxpemVyIHZhbHVlOiAoaWRlbnRpZmllcikgQGZvbnQtbG9jay12 YXJpYWJsZS1yZWYtZmFjZSkKKyAgICAgKGlmX2V4cHJlc3Npb24gY29uZGl0aW9uOiAoaWRl bnRpZmllcikgQGZvbnQtbG9jay12YXJpYWJsZS1yZWYtZmFjZSkKKyAgICAgKGxldF9jb25k aXRpb24gdmFsdWU6IChpZGVudGlmaWVyKSBAZm9udC1sb2NrLXZhcmlhYmxlLXJlZi1mYWNl KQorICAgICAobGV0X2RlY2xhcmF0aW9uIHZhbHVlOiAoaWRlbnRpZmllcikgQGZvbnQtbG9j ay12YXJpYWJsZS1yZWYtZmFjZSkKKyAgICAgKG1hdGNoX2FybSB2YWx1ZTogKGlkZW50aWZp ZXIpIEBmb250LWxvY2stdmFyaWFibGUtcmVmLWZhY2UpCisgICAgIChtYXRjaF9leHByZXNz aW9uIHZhbHVlOiAoaWRlbnRpZmllcikgQGZvbnQtbG9jay12YXJpYWJsZS1yZWYtZmFjZSkK KyAgICAgKHJlZmVyZW5jZV9leHByZXNzaW9uIHZhbHVlOiAoaWRlbnRpZmllcikgQGZvbnQt bG9jay12YXJpYWJsZS1yZWYtZmFjZSkKKyAgICAgKHJldHVybl9leHByZXNzaW9uIChpZGVu dGlmaWVyKSBAZm9udC1sb2NrLXZhcmlhYmxlLXJlZi1mYWNlKQorICAgICAodHVwbGVfZXhw cmVzc2lvbiAoaWRlbnRpZmllcikgQGZvbnQtbG9jay12YXJpYWJsZS1yZWYtZmFjZSkKKyAg ICAgKHVuYXJ5X2V4cHJlc3Npb24gKGlkZW50aWZpZXIpIEBmb250LWxvY2stdmFyaWFibGUt cmVmLWZhY2UpCisgICAgICh3aGlsZV9leHByZXNzaW9uIGNvbmRpdGlvbjogKGlkZW50aWZp ZXIpIEBmb250LWxvY2stdmFyaWFibGUtcmVmLWZhY2UpKQogCiAgICA6bGFuZ3VhZ2UgJ3J1 c3QKICAgIDpmZWF0dXJlICdlc2NhcGUtc2VxdWVuY2UKZGlmZiAtLWdpdCBhL2xpc3AvcHJv Z21vZGVzL3R5cGVzY3JpcHQtdHMtbW9kZS5lbCBiL2xpc3AvcHJvZ21vZGVzL3R5cGVzY3Jp cHQtdHMtbW9kZS5lbAppbmRleCA0MWNmNGZmMDhmNi4uYjU2MDg2OWFmMTggMTAwNjQ0Ci0t LSBhL2xpc3AvcHJvZ21vZGVzL3R5cGVzY3JpcHQtdHMtbW9kZS5lbAorKysgYi9saXNwL3By b2dtb2Rlcy90eXBlc2NyaXB0LXRzLW1vZGUuZWwKQEAgLTI0NSwxNiArMjQ1LDEzIEBAIHR5 cGVzY3JpcHQtdHMtbW9kZS0tZm9udC1sb2NrLXNldHRpbmdzCiAgICA6bGFuZ3VhZ2UgbGFu Z3VhZ2UKICAgIDpmZWF0dXJlICdwcm9wZXJ0eQogICAgYCgocHJvcGVydHlfc2lnbmF0dXJl Ci0gICAgICBuYW1lOiAocHJvcGVydHlfaWRlbnRpZmllcikgQGZvbnQtbG9jay1wcm9wZXJ0 eS1mYWNlKQorICAgICAgbmFtZTogKHByb3BlcnR5X2lkZW50aWZpZXIpIEBmb250LWxvY2st cHJvcGVydHktbmFtZS1mYWNlKQogICAgICAocHVibGljX2ZpZWxkX2RlZmluaXRpb24KLSAg ICAgIG5hbWU6IChwcm9wZXJ0eV9pZGVudGlmaWVyKSBAZm9udC1sb2NrLXByb3BlcnR5LWZh Y2UpCisgICAgICBuYW1lOiAocHJvcGVydHlfaWRlbnRpZmllcikgQGZvbnQtbG9jay1wcm9w ZXJ0eS1uYW1lLWZhY2UpCiAKICAgICAgKHBhaXIga2V5OiAocHJvcGVydHlfaWRlbnRpZmll cikgQGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpCiAKLSAgICAgKChzaG9ydGhhbmRf cHJvcGVydHlfaWRlbnRpZmllcikgQGZvbnQtbG9jay1wcm9wZXJ0eS1mYWNlKQotCi0gICAg ICgoc2hvcnRoYW5kX3Byb3BlcnR5X2lkZW50aWZpZXJfcGF0dGVybikKLSAgICAgIEBmb250 LWxvY2stcHJvcGVydHktZmFjZSkpCisgICAgICgoc2hvcnRoYW5kX3Byb3BlcnR5X2lkZW50 aWZpZXIpIEBmb250LWxvY2stcHJvcGVydHktcmVmLWZhY2UpKQogCiAgICA6bGFuZ3VhZ2Ug bGFuZ3VhZ2UKICAgIDpmZWF0dXJlICdleHByZXNzaW9uCkBAIC0yNjgsMzAgKzI2NSwzMiBA QCB0eXBlc2NyaXB0LXRzLW1vZGUtLWZvbnQtbG9jay1zZXR0aW5ncwogICAgOmZlYXR1cmUg J2Z1bmN0aW9uCiAgICAnKChjYWxsX2V4cHJlc3Npb24KICAgICAgIGZ1bmN0aW9uOgotICAg ICAgWyhpZGVudGlmaWVyKSBAZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZQorICAgICAg WyhpZGVudGlmaWVyKSBAZm9udC1sb2NrLWZ1bmN0aW9uLWNhbGwtZmFjZQogICAgICAgICht ZW1iZXJfZXhwcmVzc2lvbgotICAgICAgICBwcm9wZXJ0eTogKHByb3BlcnR5X2lkZW50aWZp ZXIpIEBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKV0pKQorICAgICAgICBwcm9wZXJ0 eTogKHByb3BlcnR5X2lkZW50aWZpZXIpIEBmb250LWxvY2stZnVuY3Rpb24tY2FsbC1mYWNl KV0pKQogCiAgICA6bGFuZ3VhZ2UgbGFuZ3VhZ2UKICAgIDpmZWF0dXJlICdwYXR0ZXJuCiAg ICBgKChwYWlyX3BhdHRlcm4KLSAgICAgIGtleTogKHByb3BlcnR5X2lkZW50aWZpZXIpIEBm b250LWxvY2stcHJvcGVydHktZmFjZSkKKyAgICAgIGtleTogKHByb3BlcnR5X2lkZW50aWZp ZXIpIEBmb250LWxvY2stcHJvcGVydHktcmVmLWZhY2UpCisKKyAgICAgKGFycmF5X3BhdHRl cm4gKGlkZW50aWZpZXIpIEBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKQogCi0gICAg IChhcnJheV9wYXR0ZXJuIChpZGVudGlmaWVyKSBAZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUt ZmFjZSkpCisgICAgICgoc2hvcnRoYW5kX3Byb3BlcnR5X2lkZW50aWZpZXJfcGF0dGVybikg QGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpKQogCiAgICA6bGFuZ3VhZ2UgbGFuZ3Vh Z2UKICAgIDpmZWF0dXJlICdqc3gKICAgIGAoKGpzeF9vcGVuaW5nX2VsZW1lbnQKICAgICAg IFsobmVzdGVkX2lkZW50aWZpZXIgKGlkZW50aWZpZXIpKSAoaWRlbnRpZmllcildCi0gICAg ICBAZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkKKyAgICAgIEBmb250LWxvY2stZnVu Y3Rpb24tY2FsbC1mYWNlKQogCiAgICAgIChqc3hfY2xvc2luZ19lbGVtZW50CiAgICAgICBb KG5lc3RlZF9pZGVudGlmaWVyIChpZGVudGlmaWVyKSkgKGlkZW50aWZpZXIpXQotICAgICAg QGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpCisgICAgICBAZm9udC1sb2NrLWZ1bmN0 aW9uLWNhbGwtZmFjZSkKIAogICAgICAoanN4X3NlbGZfY2xvc2luZ19lbGVtZW50CiAgICAg ICBbKG5lc3RlZF9pZGVudGlmaWVyIChpZGVudGlmaWVyKSkgKGlkZW50aWZpZXIpXQotICAg ICAgQGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpCisgICAgICBAZm9udC1sb2NrLWZ1 bmN0aW9uLWNhbGwtZmFjZSkKIAogICAgICAoanN4X2F0dHJpYnV0ZSAocHJvcGVydHlfaWRl bnRpZmllcikgQGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSkKIApkaWZmIC0tZ2l0IGEvbGlz cC90ZXh0bW9kZXMvY3NzLW1vZGUuZWwgYi9saXNwL3RleHRtb2Rlcy9jc3MtbW9kZS5lbApp bmRleCBhMWQ3ZDRiYmJlYy4uMzllMzgxNzkzNTkgMTAwNjQ0Ci0tLSBhL2xpc3AvdGV4dG1v ZGVzL2Nzcy1tb2RlLmVsCisrKyBiL2xpc3AvdGV4dG1vZGVzL2Nzcy1tb2RlLmVsCkBAIC0x Mzk5LDkgKzEzOTksOCBAQCBjc3MtLXRyZWVzaXQtc2V0dGluZ3MKIAogICAgOmZlYXR1cmUg J3F1ZXJ5CiAgICA6bGFuZ3VhZ2UgJ2NzcwotICAgJygoa2V5d29yZF9xdWVyeSkgQGZvbnQt bG9jay1wcm9wZXJ0eS1mYWNlCi0gICAgIChmZWF0dXJlX25hbWUpIEBmb250LWxvY2stcHJv cGVydHktZmFjZSkKLQorICAgJygoa2V5d29yZF9xdWVyeSkgQGZvbnQtbG9jay1wcm9wZXJ0 eS1yZWYtZmFjZQorICAgICAoZmVhdHVyZV9uYW1lKSBAZm9udC1sb2NrLXByb3BlcnR5LXJl Zi1mYWNlKQogCiAgICA6ZmVhdHVyZSAnYnJhY2tldAogICAgOmxhbmd1YWdlICdjc3MKZGlm ZiAtLWdpdCBhL2xpc3AvdGV4dG1vZGVzL3RvbWwtdHMtbW9kZS5lbCBiL2xpc3AvdGV4dG1v ZGVzL3RvbWwtdHMtbW9kZS5lbAppbmRleCA0MTY1NDIwODRmMS4uMmZmOWQwN2QxM2IgMTAw NjQ0Ci0tLSBhL2xpc3AvdGV4dG1vZGVzL3RvbWwtdHMtbW9kZS5lbAorKysgYi9saXNwL3Rl eHRtb2Rlcy90b21sLXRzLW1vZGUuZWwKQEAgLTkyLDggKzkyLDggQEAgdG9tbC10cy1tb2Rl LS1mb250LWxvY2stc2V0dGluZ3MKICAgIDpsYW5ndWFnZSAndG9tbAogICAgOmZlYXR1cmUg J3BhaXIKICAgIDpvdmVycmlkZSB0ICAgICAgICAgICAgOyBOZWVkZWQgZm9yIG92ZXJyaWRp bmcgc3RyaW5nIGZhY2Ugb24ga2V5cy4KLSAgICcoKGJhcmVfa2V5KSBAZm9udC1sb2NrLXBy b3BlcnR5LWZhY2UKLSAgICAgKHF1b3RlZF9rZXkpIEBmb250LWxvY2stcHJvcGVydHktZmFj ZQorICAgJygoYmFyZV9rZXkpIEBmb250LWxvY2stcHJvcGVydHktcmVmLWZhY2UKKyAgICAg KHF1b3RlZF9rZXkpIEBmb250LWxvY2stcHJvcGVydHktcmVmLWZhY2UKICAgICAgKHRhYmxl ICgiWyIgQGZvbnQtbG9jay1icmFja2V0LWZhY2UKICAgICAgICAgICAgICAoXykgQGZvbnQt bG9jay10eXBlLWZhY2UKICAgICAgICAgICAgICAiXSIgQGZvbnQtbG9jay1icmFja2V0LWZh Y2UpKQpkaWZmIC0tZ2l0IGEvbGlzcC90ZXh0bW9kZXMveWFtbC10cy1tb2RlLmVsIGIvbGlz cC90ZXh0bW9kZXMveWFtbC10cy1tb2RlLmVsCmluZGV4IGEyNTIzMGU2ZTYxLi4zMTUzZmY1 YTE2OSAxMDA2NDQKLS0tIGEvbGlzcC90ZXh0bW9kZXMveWFtbC10cy1tb2RlLmVsCisrKyBi L2xpc3AvdGV4dG1vZGVzL3lhbWwtdHMtbW9kZS5lbApAQCAtOTQsMjIgKzk0LDIyIEBAIHlh bWwtdHMtbW9kZS0tZm9udC1sb2NrLXNldHRpbmdzCiAgICA6ZmVhdHVyZSAncHJvcGVydHkK ICAgIDpvdmVycmlkZSB0CiAgICAnKChibG9ja19tYXBwaW5nX3BhaXIKLSAgICAgIGtleTog KGZsb3dfbm9kZSAocGxhaW5fc2NhbGFyIChzdHJpbmdfc2NhbGFyKSBAZm9udC1sb2NrLXBy b3BlcnR5LWZhY2UpKSkKKyAgICAgIGtleTogKGZsb3dfbm9kZSAocGxhaW5fc2NhbGFyIChz dHJpbmdfc2NhbGFyKSBAZm9udC1sb2NrLXByb3BlcnR5LW5hbWUtZmFjZSkpKQogICAgICAo YmxvY2tfbWFwcGluZ19wYWlyCiAgICAgICBrZXk6IChmbG93X25vZGUKLSAgICAgICAgICAg IFsoZG91YmxlX3F1b3RlX3NjYWxhcikgKHNpbmdsZV9xdW90ZV9zY2FsYXIpXSBAZm9udC1s b2NrLXByb3BlcnR5LWZhY2UpKQorICAgICAgICAgICAgWyhkb3VibGVfcXVvdGVfc2NhbGFy KSAoc2luZ2xlX3F1b3RlX3NjYWxhcildIEBmb250LWxvY2stcHJvcGVydHktbmFtZS1mYWNl KSkKICAgICAgKGZsb3dfbWFwcGluZwotICAgICAgKF8ga2V5OiAoZmxvd19ub2RlIChwbGFp bl9zY2FsYXIgKHN0cmluZ19zY2FsYXIpIEBmb250LWxvY2stcHJvcGVydHktZmFjZSkpKSkK KyAgICAgIChfIGtleTogKGZsb3dfbm9kZSAocGxhaW5fc2NhbGFyIChzdHJpbmdfc2NhbGFy KSBAZm9udC1sb2NrLXByb3BlcnR5LW5hbWUtZmFjZSkpKSkKICAgICAgKGZsb3dfbWFwcGlu ZwogICAgICAgKF8ga2V5OgogICAgICAgICAgKGZsb3dfbm9kZQotICAgICAgICAgIFsoZG91 YmxlX3F1b3RlX3NjYWxhcikgKHNpbmdsZV9xdW90ZV9zY2FsYXIpXSBAZm9udC1sb2NrLXBy b3BlcnR5LWZhY2UpKSkKKyAgICAgICAgICBbKGRvdWJsZV9xdW90ZV9zY2FsYXIpIChzaW5n bGVfcXVvdGVfc2NhbGFyKV0gQGZvbnQtbG9jay1wcm9wZXJ0eS1uYW1lLWZhY2UpKSkKICAg ICAgKGZsb3dfc2VxdWVuY2UKLSAgICAgIChfIGtleTogKGZsb3dfbm9kZSAocGxhaW5fc2Nh bGFyIChzdHJpbmdfc2NhbGFyKSBAZm9udC1sb2NrLXByb3BlcnR5LWZhY2UpKSkpCisgICAg ICAoXyBrZXk6IChmbG93X25vZGUgKHBsYWluX3NjYWxhciAoc3RyaW5nX3NjYWxhcikgQGZv bnQtbG9jay1wcm9wZXJ0eS1uYW1lLWZhY2UpKSkpCiAgICAgIChmbG93X3NlcXVlbmNlCiAg ICAgICAoXyBrZXk6CiAgICAgICAgICAoZmxvd19ub2RlCi0gICAgICAgICAgWyhkb3VibGVf cXVvdGVfc2NhbGFyKSAoc2luZ2xlX3F1b3RlX3NjYWxhcildIEBmb250LWxvY2stcHJvcGVy dHktZmFjZSkpKSkKKyAgICAgICAgICBbKGRvdWJsZV9xdW90ZV9zY2FsYXIpIChzaW5nbGVf cXVvdGVfc2NhbGFyKV0gQGZvbnQtbG9jay1wcm9wZXJ0eS1uYW1lLWZhY2UpKSkpCiAKICAg IDpsYW5ndWFnZSAneWFtbAogICAgOmZlYXR1cmUgJ2Vycm9yCg== --------------0eVmXwMS7DyS5Om5ViFulX2E-- From unknown Mon Jun 23 18:33:58 2025 X-Loop: help-debbugs@gnu.org Subject: bug#61655: [Tree sitter] [Feature Request] font-lock function calls, definitions, separately Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 24 Feb 2023 07:57:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 61655 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Dmitry Gutov Cc: dev@rjt.dev, casouri@gmail.com, theo@thornhill.no, 61655@debbugs.gnu.org, jacob.fai@gmail.com Received: via spool by 61655-submit@debbugs.gnu.org id=B61655.167722539315605 (code B ref 61655); Fri, 24 Feb 2023 07:57:02 +0000 Received: (at 61655) by debbugs.gnu.org; 24 Feb 2023 07:56:33 +0000 Received: from localhost ([127.0.0.1]:35912 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pVSwT-00043d-3z for submit@debbugs.gnu.org; Fri, 24 Feb 2023 02:56:33 -0500 Received: from eggs.gnu.org ([209.51.188.92]:56602) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pVSwQ-00043Q-Ng for 61655@debbugs.gnu.org; Fri, 24 Feb 2023 02:56:31 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pVSwK-0004aa-Vk; Fri, 24 Feb 2023 02:56:24 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=TNdgm7CAipMFyNwBFz/DSFzEpu/sNmoJDf+4U/si5os=; b=c/MQgC0ETIhk Q8HA/scFZYAl//612pHjIo/31Rl6Q0adjO5EMQ+a4s0prUAtG2oDWF8tR2zjyhwqFsQItfysLHx1o Gfx22i2Kwp5O2CJps7xOmm4YLpBjXOATOMw5mF36Y9WyJgXJHo4Oijt+gfZpg4lNNQG2uflcCglN8 i1etlUbuoEvOnhnxtCB74X7/5qTYxliDD6r/oedFKQ0fpoA9x9ShGqVTBODDW//TFQ3X54Mfrpx8J OJM+X/ZMlwmQjpJr2koXJmB/xLoXmUEgDO7XhQ9Ya4yIfchCeUwFs1+kXl/kYrufNGLSH2KH8NKKp S5BIchdqyyhY+WyVv19ZcQ==; Received: from [87.69.77.57] (helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pVSwD-0001S3-4b; Fri, 24 Feb 2023 02:56:18 -0500 Date: Fri, 24 Feb 2023 09:56:15 +0200 Message-Id: <83v8jro5sw.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <97710356-24c1-d79c-4796-3e51fd4809e3@yandex.ru> (message from Dmitry Gutov on Fri, 24 Feb 2023 04:31:08 +0200) References: <8DA1B548-B8D2-4EC1-B9F8-F7654003AC89@gmail.com> <56C0998E-3053-49F3-BAE3-46D6432B16F5@gmail.com> <87abbcaf-e60b-f975-b589-5e61f2d7866e@yandex.ru> <83bklkp7tj.fsf@gnu.org> <97710356-24c1-d79c-4796-3e51fd4809e3@yandex.ru> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Fri, 24 Feb 2023 04:31:08 +0200 > Cc: casouri@gmail.com, 61655@debbugs.gnu.org, jacob.fai@gmail.com, > Randy Taylor , Theodor Thornhill > From: Dmitry Gutov > > > I'm okay with adding a few more faces to emacs-29, but please hurry, > > as we don't have too much time for more additions. > > Here's the patch which adds the faces and their uses in all ts modes. LGTM, thanks. > The important question here, I think, is whether we want to split > font-lock-property-faces in two, like I did here. What harm can it do, if done like you did, i.e. the faces are indistinguishable by default? From unknown Mon Jun 23 18:33:58 2025 X-Loop: help-debbugs@gnu.org Subject: bug#61655: [Tree sitter] [Feature Request] font-lock function calls, definitions, separately Resent-From: Dmitry Gutov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 24 Feb 2023 11:33:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 61655 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: dev@rjt.dev, casouri@gmail.com, theo@thornhill.no, 61655@debbugs.gnu.org, jacob.fai@gmail.com Received: via spool by 61655-submit@debbugs.gnu.org id=B61655.167723833024254 (code B ref 61655); Fri, 24 Feb 2023 11:33:01 +0000 Received: (at 61655) by debbugs.gnu.org; 24 Feb 2023 11:32:10 +0000 Received: from localhost ([127.0.0.1]:36122 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pVWJ8-0006J8-0R for submit@debbugs.gnu.org; Fri, 24 Feb 2023 06:32:10 -0500 Received: from mail-wm1-f44.google.com ([209.85.128.44]:36661) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pVWJ5-0006I9-U1 for 61655@debbugs.gnu.org; Fri, 24 Feb 2023 06:32:08 -0500 Received: by mail-wm1-f44.google.com with SMTP id l2-20020a05600c1d0200b003e1f6dff952so1938971wms.1 for <61655@debbugs.gnu.org>; Fri, 24 Feb 2023 03:32:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :sender:from:to:cc:subject:date:message-id:reply-to; bh=KqOa9ZaMGQum8DK/MUQ3U1yBABVFIqOtEc0+lkRO4Pc=; b=hHbLhnFukYuNzNvhW5vOIROYYgxQ29SGF8JHpyLRAmkwfs6rABsz7g4JsLepp8fbth 5yvbXeIF+8O6aKvT9pMGxp8ZZUFCs4OH5eLPzin9gE6TEpgZ119yqzKQ2ofZpbFNtpGM GgJRzb3UJ8JeJx3I1ZftcWI/u36K2tKGOH38Em23pdyzHlD/TOtmHZqZpIj2LiobY+v8 jtP1C9CRMFnqEd88CcZA3wP1pXo0z9LlvebW9+wZuNVy/v4C3OMwk7K3lMTTKwooPycl VdgFfTi1Wye5nFhI28hNq03El172q5Wb1AbrxO4wX5eLVSu2NL0gwb4RsOeg0e61YpQ3 yrmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :sender:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=KqOa9ZaMGQum8DK/MUQ3U1yBABVFIqOtEc0+lkRO4Pc=; b=h+tN1BlM5+1izPidIC4aQH86dqhmeQkY2GxpZ7lwo9+1cRAu98X8FiQYFxWIVef1Ho XmFkL3/XIMpMClWWgnkIp4DJPCU6mGKUCFItEczmWwhXHuA3IVSqOFqPuZ3pM6Q7UIvm F/p7wNbrIOKb69cf8hb7MPwTGlZlf7LG/a6HVMEkGznMiPcuAxYgFhg+ZPLTvTLpyTRe iDNVbr0KnUeojn8TVATZ5teSm7ZNkdG2+zSw1S8+s0t9J4U4NKJ1lcxWHaEWkqeGcrZm Uee+n+37VqHq1mvUc79VmqM/Jkn1dZi/UXoFvjB9OIjTOoYLnBfUvVPfOgFpQv/o4ydJ zj+g== X-Gm-Message-State: AO0yUKVIjdVfDxk4p7eRfjwCIF7FhDeuoXt0JFV2RZ3y9fv+VUt4O1QZ nK4khMwktTruTgYyCgUP1pw= X-Google-Smtp-Source: AK7set/bUYcmaxT7h4Y0Vv1Djyj5k20gwPieJn6snHaA7LzfyaLovcRfmuIt+Ybp4gJ+SV3e6k+e0A== X-Received: by 2002:a05:600c:a696:b0:3eb:2de8:b74e with SMTP id ip22-20020a05600ca69600b003eb2de8b74emr248196wmb.27.1677238321872; Fri, 24 Feb 2023 03:32:01 -0800 (PST) Received: from [192.168.0.2] ([46.251.119.176]) by smtp.googlemail.com with ESMTPSA id iz8-20020a05600c554800b003eaee9e0d22sm2562722wmb.33.2023.02.24.03.32.00 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 24 Feb 2023 03:32:01 -0800 (PST) Message-ID: <32fe1a33-2511-de12-8237-34642e863afb@yandex.ru> Date: Fri, 24 Feb 2023 13:31:59 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.1 Content-Language: en-US References: <8DA1B548-B8D2-4EC1-B9F8-F7654003AC89@gmail.com> <56C0998E-3053-49F3-BAE3-46D6432B16F5@gmail.com> <87abbcaf-e60b-f975-b589-5e61f2d7866e@yandex.ru> <83bklkp7tj.fsf@gnu.org> <97710356-24c1-d79c-4796-3e51fd4809e3@yandex.ru> <83v8jro5sw.fsf@gnu.org> From: Dmitry Gutov In-Reply-To: <83v8jro5sw.fsf@gnu.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Score: -0.9 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.9 (-) On 24/02/2023 09:56, Eli Zaretskii wrote: >> The important question here, I think, is whether we want to split >> font-lock-property-faces in two, like I did here. > What harm can it do, if done like you did, i.e. the faces are > indistinguishable by default? Not much. We do rename the face this late into the pretest, though. And if not many modes use it, then it could not be worth it. OTOH, modes sometimes need additional faces, to use for their unique syntactic elements. So more faces could be a good idea, just from that perspective. So if nobody has objections, I'll install the patch later today. From unknown Mon Jun 23 18:33:58 2025 X-Loop: help-debbugs@gnu.org Subject: bug#61655: [Tree sitter] [Feature Request] font-lock function calls, definitions, separately Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 24 Feb 2023 11:45:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 61655 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Dmitry Gutov Cc: dev@rjt.dev, casouri@gmail.com, theo@thornhill.no, 61655@debbugs.gnu.org, jacob.fai@gmail.com Received: via spool by 61655-submit@debbugs.gnu.org id=B61655.167723909325461 (code B ref 61655); Fri, 24 Feb 2023 11:45:02 +0000 Received: (at 61655) by debbugs.gnu.org; 24 Feb 2023 11:44:53 +0000 Received: from localhost ([127.0.0.1]:36136 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pVWVR-0006cb-0t for submit@debbugs.gnu.org; Fri, 24 Feb 2023 06:44:53 -0500 Received: from eggs.gnu.org ([209.51.188.92]:42104) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pVWVP-0006cN-7w for 61655@debbugs.gnu.org; Fri, 24 Feb 2023 06:44:51 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pVWVH-0003mg-4e; Fri, 24 Feb 2023 06:44:43 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=lZnIR6TPM5uGJp3t4ILYT0BlYYLeeDDZiY8IC72epHA=; b=MyIHibzEGgev EqxYnmTL+viSo820Fmb4Hy/7Ctw68jEziRkQYMoW5op2vuAEGQ6VHjsNVrWjAjjn/hmLCiha8EGPw 1fPi1Wj4BjkQJT7aLCYmmAy7m7CQRQXB3vPq+wsyyzlO9b0PDWJCVDCZgFAj7O3KyRbTeEvUHbKmU Y9AtYN/mRlT83YhPkSZlDbf2iEw12Q6fQSLaC6SH0xJCqgNqrcUwhfTxuzhQ0siM8GQq6H3ajfbQi KaxkgoHiHoHeXgTPSE81CaXZ5uSYNJvGluHmrjyqsiS9iMNib8xxS0lxpv2nw6qKnkIi2hTBjZG4a +Wo1QBJ23jI6lpnEu99N6Q==; Received: from [87.69.77.57] (helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pVWVG-0002hO-Ki; Fri, 24 Feb 2023 06:44:42 -0500 Date: Fri, 24 Feb 2023 13:44:42 +0200 Message-Id: <83k007nv85.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: <32fe1a33-2511-de12-8237-34642e863afb@yandex.ru> (message from Dmitry Gutov on Fri, 24 Feb 2023 13:31:59 +0200) References: <8DA1B548-B8D2-4EC1-B9F8-F7654003AC89@gmail.com> <56C0998E-3053-49F3-BAE3-46D6432B16F5@gmail.com> <87abbcaf-e60b-f975-b589-5e61f2d7866e@yandex.ru> <83bklkp7tj.fsf@gnu.org> <97710356-24c1-d79c-4796-3e51fd4809e3@yandex.ru> <83v8jro5sw.fsf@gnu.org> <32fe1a33-2511-de12-8237-34642e863afb@yandex.ru> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Fri, 24 Feb 2023 13:31:59 +0200 > Cc: dev@rjt.dev, casouri@gmail.com, theo@thornhill.no, 61655@debbugs.gnu.org, > jacob.fai@gmail.com > From: Dmitry Gutov > > On 24/02/2023 09:56, Eli Zaretskii wrote: > >> The important question here, I think, is whether we want to split > >> font-lock-property-faces in two, like I did here. > > What harm can it do, if done like you did, i.e. the faces are > > indistinguishable by default? > > Not much. We do rename the face this late into the pretest, though. That's fine: they were introduced just a few months ago. From unknown Mon Jun 23 18:33:58 2025 X-Loop: help-debbugs@gnu.org Subject: bug#61655: [Tree sitter] [Feature Request] font-lock function calls, definitions, separately Resent-From: Theodor Thornhill Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 24 Feb 2023 14:25:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 61655 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Dmitry Gutov , Eli Zaretskii Cc: dev@rjt.dev, casouri@gmail.com, 61655@debbugs.gnu.org, jacob.fai@gmail.com Received: via spool by 61655-submit@debbugs.gnu.org id=B61655.167724866128897 (code B ref 61655); Fri, 24 Feb 2023 14:25:02 +0000 Received: (at 61655) by debbugs.gnu.org; 24 Feb 2023 14:24:21 +0000 Received: from localhost ([127.0.0.1]:36464 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pVYzk-0007W0-KP for submit@debbugs.gnu.org; Fri, 24 Feb 2023 09:24:20 -0500 Received: from out-5.mta1.migadu.com ([95.215.58.5]:58377) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pVYzi-0007Vq-QT for 61655@debbugs.gnu.org; Fri, 24 Feb 2023 09:24:20 -0500 X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1677248657; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=9QJnn0JNTbzl1JfDvXIoyP+ZCLMNuZB6pZIQM1AZD9k=; b=XEmZbRhyWf4pOzFRUzT9ogY5iyyIb1kWW00YyYmzqIFmmSJi7vijPX2ctMkXm1owultR+M 9GT9cipZU9PcE5DfwTqh5FU8P7LktjDuu1uYfy6APIoCk1W4643e7578VfcgGnzPS8ffvt c0UKTd+HZ7CE0xKpvew/fJKKq7pjQ8buPTWK3bJmfrEtRR6k0Sk/r4AxMwSBQMWhGkM+PT BkDtgVHpNnC+qT5Etgnu/8ZBJolbQwNatpnqWRh1fVYzHjelRGY2kFoa97dKCvzCfK0nhW 9+1MwsaRVBl3qHAHfCxRPDNSanvwxpu/cipbVxjxsvWXI/os2QOgxvRtoN0YmQ== From: Theodor Thornhill In-Reply-To: <32fe1a33-2511-de12-8237-34642e863afb@yandex.ru> References: <8DA1B548-B8D2-4EC1-B9F8-F7654003AC89@gmail.com> <56C0998E-3053-49F3-BAE3-46D6432B16F5@gmail.com> <87abbcaf-e60b-f975-b589-5e61f2d7866e@yandex.ru> <83bklkp7tj.fsf@gnu.org> <97710356-24c1-d79c-4796-3e51fd4809e3@yandex.ru> <83v8jro5sw.fsf@gnu.org> <32fe1a33-2511-de12-8237-34642e863afb@yandex.ru> Date: Fri, 24 Feb 2023 15:24:14 +0100 Message-ID: <878rgnjg4x.fsf@thornhill.no> MIME-Version: 1.0 Content-Type: text/plain X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Dmitry Gutov writes: > On 24/02/2023 09:56, Eli Zaretskii wrote: >>> The important question here, I think, is whether we want to split >>> font-lock-property-faces in two, like I did here. >> What harm can it do, if done like you did, i.e. the faces are >> indistinguishable by default? > > Not much. We do rename the face this late into the pretest, though. > > And if not many modes use it, then it could not be worth it. OTOH, modes > sometimes need additional faces, to use for their unique syntactic > elements. So more faces could be a good idea, just from that perspective. > > So if nobody has objections, I'll install the patch later today. No objections from me :) From unknown Mon Jun 23 18:33:58 2025 X-Loop: help-debbugs@gnu.org Subject: bug#61655: [Tree sitter] [Feature Request] font-lock function calls, definitions, separately Resent-From: Randy Taylor Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 25 Feb 2023 01:07:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 61655 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Dmitry Gutov Cc: 61655@debbugs.gnu.org, Eli Zaretskii , Theodor Thornhill , casouri@gmail.com, jacob.fai@gmail.com Received: via spool by 61655-submit@debbugs.gnu.org id=B61655.16772871769045 (code B ref 61655); Sat, 25 Feb 2023 01:07:01 +0000 Received: (at 61655) by debbugs.gnu.org; 25 Feb 2023 01:06:16 +0000 Received: from localhost ([127.0.0.1]:38637 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pVj0y-0002Lo-FI for submit@debbugs.gnu.org; Fri, 24 Feb 2023 20:06:16 -0500 Received: from mail-4022.proton.ch ([185.70.40.22]:44689) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pVj0t-0002LZ-UO for 61655@debbugs.gnu.org; Fri, 24 Feb 2023 20:06:14 -0500 Date: Sat, 25 Feb 2023 01:06:02 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rjt.dev; s=protonmail2; t=1677287165; x=1677546365; bh=7sHLZc/rzyJ8pHK+6XsGjtX4eh37ZmHq/a4Cnerc288=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector; b=T3qyVwzluVTYzHlrD/0wgp/S61zpcUWeESQ++K/kaDS3R6VYOrU7bpu7xe3cQo+rN M34n81ewcmHkUhMOmHM3Of4V6HrWw+Tfu4GNXdQcWmpO04SOwvLBp8QANas0VdmpFv YREd9z3EnXF2YplWlg7JDhxAPbSHnE3hE+GEMKwuivT+vPUNQpETKbI2EdeTURszQ0 DMj8FYR8ZTEryMnGmnAq7nvrh6AfAdPpB7JDSoYm2wXUiiQtd4V5hr92YXVdUQGt0m qkWS/ZeO0k6bgYn1UYcW+mnkNRKO3vFfPpZaeklVU2nata+/PuzSQDFSb+Rv7KbBz1 xAlLHo0Y5mlOQ== From: Randy Taylor Message-ID: In-Reply-To: <97710356-24c1-d79c-4796-3e51fd4809e3@yandex.ru> References: <8DA1B548-B8D2-4EC1-B9F8-F7654003AC89@gmail.com> <56C0998E-3053-49F3-BAE3-46D6432B16F5@gmail.com> <87abbcaf-e60b-f975-b589-5e61f2d7866e@yandex.ru> <83bklkp7tj.fsf@gnu.org> <97710356-24c1-d79c-4796-3e51fd4809e3@yandex.ru> Feedback-ID: 44397038:user:proton MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On Thursday, February 23rd, 2023 at 21:31, Dmitry Gutov = wrote: >=20 > On 23/02/2023 20:15, Eli Zaretskii wrote: >=20 > > > Cc:61655@debbugs.gnu.org > > > Date: Wed, 22 Feb 2023 23:38:04 +0200 > > > From: Dmitry Gutovdgutov@yandex.ru > > >=20 > > > On 22/02/2023 22:45, Yuan Fu wrote: > > >=20 > > > > Yeah that=E2=80=99s just an idea, and I don=E2=80=99t have problem = adding faces. But we probably can=E2=80=99t keep adding more and more speci= fic faces. At one point we=E2=80=99ll need to either add indirection, or as= k users to just add their own fontification rules, if it is really specific= . We=E2=80=99ll see. > > > > An indirection seems like a separate new feature. Might be useful f= or > > > > some, but probably unnecessary for this discussion. > > >=20 > > > > Function definition & call is totally reasonable. But adapting all = the major modes to use them is might be too big a change for emacs-29. > > > > The change itself should be very straightforward. If we agree on th= e set > > > > of faces (for variables and properties as well, right?), I don't mi= nd > > > > posting a patch for review. > > >=20 > > > Whether it gets accepted or not. > > > I'm okay with adding a few more faces to emacs-29, but please hurry, > > > as we don't have too much time for more additions. >=20 >=20 > Here's the patch which adds the faces and their uses in all ts modes. >=20 > Comments welcome from all the interested parties. The patch is mostly > straightforward, but there are some changes added as well, where it was > needed to differentiate between declarations and references. >=20 > The important question here, I think, is whether we want to split > font-lock-property-faces in two, like I did here. >=20 > By analogy with the other faces, I think it's going to be useful to > differentiate between property definitions and property references. Not > many of the languages modes used font-lock-property-face for > property/attribute definitions, but some did. I'm not sure about the naming of font-lock-variable-ref-face. It's confusin= g for languages that support actual references like C++ and Rust. Maybe the opposite direction is better: font-lock-variable-def-face (or som= ething similar) for definitions (or whatnot), and font-lock-variable-name-f= ace to refer to uses (same goes for property). Or font-lock-variable-use-fa= ce. I don't know, naming is hard :). Personally, I don't really see the value in differentiating these for varia= bles. I can understand it a little more for properties. But I guess it does= n't hurt to add if folks want it. From unknown Mon Jun 23 18:33:58 2025 X-Loop: help-debbugs@gnu.org Subject: bug#61655: [Tree sitter] [Feature Request] font-lock function calls, definitions, separately Resent-From: Dmitry Gutov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 25 Feb 2023 02:29:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 61655 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Randy Taylor Cc: 61655@debbugs.gnu.org, Eli Zaretskii , Theodor Thornhill , casouri@gmail.com, jacob.fai@gmail.com Received: via spool by 61655-submit@debbugs.gnu.org id=B61655.167729210217458 (code B ref 61655); Sat, 25 Feb 2023 02:29:02 +0000 Received: (at 61655) by debbugs.gnu.org; 25 Feb 2023 02:28:22 +0000 Received: from localhost ([127.0.0.1]:38674 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pVkIP-0004XV-Ga for submit@debbugs.gnu.org; Fri, 24 Feb 2023 21:28:21 -0500 Received: from mail-ed1-f42.google.com ([209.85.208.42]:33308) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pVkIN-0004XH-VN for 61655@debbugs.gnu.org; Fri, 24 Feb 2023 21:28:20 -0500 Received: by mail-ed1-f42.google.com with SMTP id ck15so4823012edb.0 for <61655@debbugs.gnu.org>; Fri, 24 Feb 2023 18:28:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :sender:from:to:cc:subject:date:message-id:reply-to; bh=6QiKV/dzJmGPu6LkzhX99D+diLyxLqJRoHvIQYqAeWo=; b=o6kYEB8H2PLgQDakR7XAyRam3y40p51DSyxe7IDCSYALlbF3yvtuiJzWPVgxUKBFFt f5sQdUQCicX6wDXUioJqAxFvrWcxjxf14iMjVhMI7ZZPag2eDIA0EB03b8Tdcmo4eOfc 3dzHneLkfvKxbV7etQ8QnlOBwCbhyPEOQSvTOzDI4gdYf+1GRZ52HeJc30jmX++CJPVp uGX8Xo7iQORePe3MEpCDHGstX5iCJp4ZW3Lh1DyDpmAEq99vc5viKBwPFWO4wzajAdJv 06R+u9Gka6ktJIe90A4JBqgZj7reOEfmunO2WtKmAEYalHhf1YC9laZWleDuQB5E/WnI kHHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :sender:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=6QiKV/dzJmGPu6LkzhX99D+diLyxLqJRoHvIQYqAeWo=; b=ORayWKLbwH+5RXkCCK7T8CRhqmQ84/uQXHOV2NFogy75XEJU8plQsLsGLtlixgQAzP opDqVcY0jhHO/pwyPzQWwOHsH1PpCG/ID4Jab1TK3Qbv6JJVmhT2vHxwQ0YPW5HnBAAO Zyjn8Pont1TfiMhcDBChhCZD1YPr/QG8B7YjutNG0psm20UFIF2h/fgRA8z4WXVjg10u idJ98RiIybBZW4DMJoBuRjLH23Fq5d1PZRy0Cd1NPp9lBVI5lAZYvQsc5Co4sIlFSKut I/w+U7vV+iBOlsyk0P4UCAeH3wmT4EQ7dSssrKGmeJIbxLpioun2oOoOPqsoMpioG6Pr aIbA== X-Gm-Message-State: AO0yUKXpcL8W0xHAlfGIpneFibhdKMLfOCcgHTz4TaoaXy0ec0TuHByH wHlUyBR1HRvm3wHXMb1IhoQ= X-Google-Smtp-Source: AK7set/glyoy6ZPH1Yw8gSyQ7rvCV+57p/sjHtTaeR6kZORXCGNpmoMQmErO5gXGopcFv/N9InCpcQ== X-Received: by 2002:a17:906:af85:b0:888:db6b:5fa9 with SMTP id mj5-20020a170906af8500b00888db6b5fa9mr22284007ejb.67.1677292093601; Fri, 24 Feb 2023 18:28:13 -0800 (PST) Received: from [192.168.0.2] ([46.251.119.176]) by smtp.googlemail.com with ESMTPSA id v22-20020a1709063bd600b008dd6bf721c2sm278374ejf.106.2023.02.24.18.28.11 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 24 Feb 2023 18:28:12 -0800 (PST) Message-ID: Date: Sat, 25 Feb 2023 04:28:11 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.1 Content-Language: en-US References: <8DA1B548-B8D2-4EC1-B9F8-F7654003AC89@gmail.com> <56C0998E-3053-49F3-BAE3-46D6432B16F5@gmail.com> <87abbcaf-e60b-f975-b589-5e61f2d7866e@yandex.ru> <83bklkp7tj.fsf@gnu.org> <97710356-24c1-d79c-4796-3e51fd4809e3@yandex.ru> From: Dmitry Gutov In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Score: -0.9 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.9 (-) Hi Randy, Thanks for the reply. On 25/02/2023 03:06, Randy Taylor wrote: >> Here's the patch which adds the faces and their uses in all ts modes. >> >> Comments welcome from all the interested parties. The patch is mostly >> straightforward, but there are some changes added as well, where it was >> needed to differentiate between declarations and references. >> >> The important question here, I think, is whether we want to split >> font-lock-property-faces in two, like I did here. >> >> By analogy with the other faces, I think it's going to be useful to >> differentiate between property definitions and property references. Not >> many of the languages modes used font-lock-property-face for >> property/attribute definitions, but some did. > > I'm not sure about the naming of font-lock-variable-ref-face. It's confusing for languages that support actual references like C++ and Rust. But even there "variable reference" is probably a suitable term for any occurrence of a variable other than its definition. While the references you're talking about are "value references". > Maybe the opposite direction is better: font-lock-variable-def-face (or something similar) for definitions (or whatnot), and font-lock-variable-name-face to refer to uses (same goes for property). Or font-lock-variable-use-face. I don't know, naming is hard :). I, uh, pushed the change before I noticed your email. ^^; But perhaps we could refine, if there is enough support. Indeed, I was slightly uneasy about the -ref- names, if only because they might seem a little cryptic. Using the name -def-face is something I thought about too, but it sounded a bit like the name of a macro. A bigger problem, though, is that existing themes customize font-lock-variable-name-face. So we'd have to create inheritance the other way around (for the themes to continue working unchanged). Or we'd have to create face alias and use a yet different name for "variable references" (or "uses", or whatever we'd call them). Inheritance "the other way around" would break the usage scenario 1 below for users of existing themes. Or at least make it more difficult. > Personally, I don't really see the value in differentiating these for variables. I can understand it a little more for properties. But I guess it doesn't hurt to add if folks want it. I see two potential uses: 1. Customize treesit-font-lock-level to 4 but font-lock-variable-ref-face to copy 'default' (or close to it), to skip variable reference highlighting or make it less noticeable. 2. Pattern matching or comparably complex syntax which at a first glance may look like variable reference, but actually creates new bindings (or vice versa, creates new binding when one wanted to refer to an existing value). Emphasizing the difference can help people, beginners especially [in a particular language]. From unknown Mon Jun 23 18:33:58 2025 X-Loop: help-debbugs@gnu.org Subject: bug#61655: [Tree sitter] [Feature Request] font-lock function calls, definitions, separately Resent-From: Randy Taylor Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 25 Feb 2023 04:00:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 61655 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Dmitry Gutov Cc: casouri@gmail.com, 61655@debbugs.gnu.org, Theodor Thornhill , Eli Zaretskii , jacob.fai@gmail.com Received: via spool by 61655-submit@debbugs.gnu.org id=B61655.167729760112738 (code B ref 61655); Sat, 25 Feb 2023 04:00:02 +0000 Received: (at 61655) by debbugs.gnu.org; 25 Feb 2023 04:00:01 +0000 Received: from localhost ([127.0.0.1]:38745 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pVlj6-0003JN-EJ for submit@debbugs.gnu.org; Fri, 24 Feb 2023 23:00:00 -0500 Received: from mail-4018.proton.ch ([185.70.40.18]:22185) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pVlj4-0003J8-8B for 61655@debbugs.gnu.org; Fri, 24 Feb 2023 22:59:58 -0500 Date: Sat, 25 Feb 2023 03:59:46 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rjt.dev; s=protonmail2; t=1677297591; x=1677556791; bh=D6t876CtuLWqC03YaKF2hOa1rUq4CDLyzAgGLWHzncI=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector; b=s6jl2KezVV0ho5rnJcIEAVAsHA//bWgODLV7lt0ab3+vTnI648t39cW9k9ktHbfzJ 4MtwyIrR8IbOuSHQ0kdNGZoKrsjR3CTdWhQxN3+wCvmNwX0NQiRiV/MC4Oyl1fjzh8 kIVt2ykq419QXvjVRiX6FhB/OF2QrDpDah/gHqgOnm22dMfP5v/eG4eqB6o2s/oFxH PrVIAwvB1ERaCwbdJ5ZtCBXVARZwG/O07eBAIhH0FbINE/gl0ya78sghdyLMD8+mEJ MXivUmTs9tewUknMWJN6E99k7BqvVtZFuK1gdnkFgKJfJDry8MXvgcNlFHQYIZ+BkW yu2sWxhHHWk1w== From: Randy Taylor Message-ID: In-Reply-To: References: <8DA1B548-B8D2-4EC1-B9F8-F7654003AC89@gmail.com> <56C0998E-3053-49F3-BAE3-46D6432B16F5@gmail.com> <87abbcaf-e60b-f975-b589-5e61f2d7866e@yandex.ru> <83bklkp7tj.fsf@gnu.org> <97710356-24c1-d79c-4796-3e51fd4809e3@yandex.ru> Feedback-ID: 44397038:user:proton MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On Friday, February 24th, 2023 at 21:28, Dmitry Gutov wr= ote: > Hi Randy, >=20 > Thanks for the reply. >=20 > On 25/02/2023 03:06, Randy Taylor wrote: >=20 > > > Here's the patch which adds the faces and their uses in all ts modes. > > >=20 > > > Comments welcome from all the interested parties. The patch is mostly > > > straightforward, but there are some changes added as well, where it w= as > > > needed to differentiate between declarations and references. > > >=20 > > > The important question here, I think, is whether we want to split > > > font-lock-property-faces in two, like I did here. > > >=20 > > > By analogy with the other faces, I think it's going to be useful to > > > differentiate between property definitions and property references. N= ot > > > many of the languages modes used font-lock-property-face for > > > property/attribute definitions, but some did. > >=20 > > I'm not sure about the naming of font-lock-variable-ref-face. It's conf= using for languages that support actual references like C++ and Rust. >=20 >=20 > But even there "variable reference" is probably a suitable term for any > occurrence of a variable other than its definition. While the references > you're talking about are "value references". It is a suitable term, but there is a confusing overlap, at least to me. In= C++ parlance, for example, they are referred to as reference variables. I = wasn't really getting down to the semantics of it, just when I see somethin= g like: void quack(int& thing) ^^^^^ obj_t& thing2 =3D otherthing; ^^^^^^ Those are the things I would expect font-lock-variable-ref-face to highligh= t if I was just going off of the name, and I would expect many others to th= ink the same. >=20 > > Maybe the opposite direction is better: font-lock-variable-def-face (or= something similar) for definitions (or whatnot), and font-lock-variable-na= me-face to refer to uses (same goes for property). Or font-lock-variable-us= e-face. I don't know, naming is hard :). >=20 >=20 > I, uh, pushed the change before I noticed your email. ^^; >=20 > But perhaps we could refine, if there is enough support. >=20 > Indeed, I was slightly uneasy about the -ref- names, if only because > they might seem a little cryptic. Using the name -def-face is something > I thought about too, but it sounded a bit like the name of a macro. >=20 > A bigger problem, though, is that existing themes customize > font-lock-variable-name-face. So we'd have to create inheritance the > other way around (for the themes to continue working unchanged). Or we'd > have to create face alias and use a yet different name for "variable > references" (or "uses", or whatever we'd call them). >=20 > Inheritance "the other way around" would break the usage scenario 1 > below for users of existing themes. Or at least make it more difficult. I don't have any better ideas than font-lock-{property,variable}-use-face, = so I guess we can see if anyone else has any opinions on the matter. >=20 > > Personally, I don't really see the value in differentiating these for v= ariables. I can understand it a little more for properties. But I guess it = doesn't hurt to add if folks want it. >=20 >=20 > I see two potential uses: >=20 > 1. Customize treesit-font-lock-level to 4 but > font-lock-variable-ref-face to copy 'default' (or close to it), to skip > variable reference highlighting or make it less noticeable. Wouldn't they just remove the variable feature if they want that? >=20 > 2. Pattern matching or comparably complex syntax which at a first glance > may look like variable reference, but actually creates new bindings (or > vice versa, creates new binding when one wanted to refer to an existing > value). >=20 > Emphasizing the difference can help people, beginners especially [in a > particular language]. > No doubt there are uses, I just don't really see them actually getting much= use in practice. But maybe I'm wrong :). From unknown Mon Jun 23 18:33:58 2025 X-Loop: help-debbugs@gnu.org Subject: bug#61655: [Tree sitter] [Feature Request] font-lock function calls, definitions, separately Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 25 Feb 2023 08:07:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 61655 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Randy Taylor Cc: casouri@gmail.com, jacob.fai@gmail.com, theo@thornhill.no, 61655@debbugs.gnu.org, dgutov@yandex.ru Received: via spool by 61655-submit@debbugs.gnu.org id=B61655.167731236815881 (code B ref 61655); Sat, 25 Feb 2023 08:07:01 +0000 Received: (at 61655) by debbugs.gnu.org; 25 Feb 2023 08:06:08 +0000 Received: from localhost ([127.0.0.1]:38919 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pVpZE-000480-L5 for submit@debbugs.gnu.org; Sat, 25 Feb 2023 03:06:08 -0500 Received: from eggs.gnu.org ([209.51.188.92]:38002) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pVpZD-00047W-1H for 61655@debbugs.gnu.org; Sat, 25 Feb 2023 03:06:03 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pVpZ7-0000X2-3x; Sat, 25 Feb 2023 03:05:57 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=EvfEv2W8CNTJhTLsRrA9fxPEfmKwI3GFbsEa8vcMoVM=; b=PbYSqW8vocCm 3ZtA6nXMSgIuWPzOXqsPJUVEKFLchABHX8VzDooiwvrWHg4oo5F5CKWxJ63ELM5B+1f4RiWnUTVGd UncBff3gZiREt2bqkPMpT1DqmFmTmutuQ5H8zbwDQVz8VH+tEqxzxmWYm1d06qTCS1soADag8lxlc Lrm2qgDByrc2YvCoBzQsUzPgzH9XksFPJZzvYLviupzTSUzEaOzvh1C9t+nkDhu94NDEhWIhcAYfX DT0xvG90FqPHqkt21ywRLW1D9TQGuXBgjTxJim1j92lktSBX4KFFaT3lv3HvfL9QC/20e/rZWmWJw nBpu9u3YK6PPSqLRWgx3+g==; Received: from [87.69.77.57] (helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pVpZ5-0001gk-Te; Sat, 25 Feb 2023 03:05:56 -0500 Date: Sat, 25 Feb 2023 10:05:58 +0200 Message-Id: <83lekmkw49.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: (message from Randy Taylor on Sat, 25 Feb 2023 01:06:02 +0000) References: <8DA1B548-B8D2-4EC1-B9F8-F7654003AC89@gmail.com> <56C0998E-3053-49F3-BAE3-46D6432B16F5@gmail.com> <87abbcaf-e60b-f975-b589-5e61f2d7866e@yandex.ru> <83bklkp7tj.fsf@gnu.org> <97710356-24c1-d79c-4796-3e51fd4809e3@yandex.ru> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Sat, 25 Feb 2023 01:06:02 +0000 > From: Randy Taylor > Cc: Eli Zaretskii , casouri@gmail.com, 61655@debbugs.gnu.org, jacob.fai@gmail.com, Theodor Thornhill > > On Thursday, February 23rd, 2023 at 21:31, Dmitry Gutov wrote: > > I'm not sure about the naming of font-lock-variable-ref-face. It's confusing for languages that support actual references like C++ and Rust. That's a different kind of "reference". > Maybe the opposite direction is better: font-lock-variable-def-face (or something similar) for definitions (or whatnot), and font-lock-variable-name-face to refer to uses (same goes for property). No, that would rename a widely used face which we had for many years. > Or font-lock-variable-use-face. That could work, but then we'd need to change all the other "-ref-" faces to "-use-" as well. > Personally, I don't really see the value in differentiating these for variables. I can understand it a little more for properties. But I guess it doesn't hurt to add if folks want it. Right, it doesn't hurt. From unknown Mon Jun 23 18:33:58 2025 X-Loop: help-debbugs@gnu.org Subject: bug#61655: [Tree sitter] [Feature Request] font-lock function calls, definitions, separately Resent-From: Dmitry Gutov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 25 Feb 2023 13:06:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 61655 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Randy Taylor Cc: casouri@gmail.com, 61655@debbugs.gnu.org, Theodor Thornhill , Eli Zaretskii , jacob.fai@gmail.com Received: via spool by 61655-submit@debbugs.gnu.org id=B61655.167733034825657 (code B ref 61655); Sat, 25 Feb 2023 13:06:02 +0000 Received: (at 61655) by debbugs.gnu.org; 25 Feb 2023 13:05:48 +0000 Received: from localhost ([127.0.0.1]:39330 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pVuFI-0006fj-FH for submit@debbugs.gnu.org; Sat, 25 Feb 2023 08:05:48 -0500 Received: from mail-ed1-f49.google.com ([209.85.208.49]:38422) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pVuFH-0006fX-3U for 61655@debbugs.gnu.org; Sat, 25 Feb 2023 08:05:47 -0500 Received: by mail-ed1-f49.google.com with SMTP id cy6so7921180edb.5 for <61655@debbugs.gnu.org>; Sat, 25 Feb 2023 05:05:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :sender:from:to:cc:subject:date:message-id:reply-to; bh=v0383w8Zf+FlT1NKEaXJ0H3FtWBI9hlGc/nqAzJKeug=; b=UXhH69qA6tAd/vzrynushrIkKxiGvtzVHMY31tNT8JVXVsB/aBBB0U+CiFxouVxx0Y cSDsiGZc0QujJZHfsmC0a1uUAQ5lkQPaUnGmD3AG9RJczI1XY4S0zc+12AwyQHs2bzLU L3zdj3q+gTx28ofhWOm3Ir7hMAtBAvq0YtRs8edWilwYqDNxX9Vlqkmr2nmBuTSXuUKi DZzKgDJdlnEBQm3f3t8VE8H7Pw0lQTUnU1XNqtA4sRBrv0bFtFO8tjivKNdfm2uk86fm h+iwh3qDAoQHXkknsvq4eCTrHVcb7hSbr6NTxwLdjlG2WAr6AGvSORa0v4CjMS4k4ZBV r50g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :sender:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=v0383w8Zf+FlT1NKEaXJ0H3FtWBI9hlGc/nqAzJKeug=; b=aJOyyZmRFVFsW/p/WJh+HyKzGbLpYXTJvozEPT1b49h12nxugC7a+UWRoVyIthmPDF 3+Q+25tkTJ6DItmLxnRTMDGE1wufvPjZdoBZQaCEmF+VrVgC4vt/n0c/YkV+4mUHVUDN +AwpJOqUPphxtf2c7yN2dWygPEFIfbQunMjlkWcIKafO+QMvTUqMfOlVSzDmNfL++dCZ W3BoDx/M2ryfEDb7VYYst5E6gfrOp5QsX9kd59lBo0mqpC7V7VxDCVRU52+NalmKUDxv bk9WFdAM0IMv9gnxPJWMrbHOjiqrp0E5RhzIFflrDSY2V35ExBmExQDGUdEQZKTkS5QX 0YRw== X-Gm-Message-State: AO0yUKX9EO34FT2srsZqd/iUBQSUicE8UG1JzxAZEn7i5qBeWFhrtexG rv2KitPUsSpiP2DJUF2+AjY= X-Google-Smtp-Source: AK7set90UpmtlleI+gaGFF10Fp3BQN2xfAGt1btI0B7h2Rl8YeL5HxBUH7dqvscPXrTtZa0VaED/Ng== X-Received: by 2002:a17:906:dc90:b0:8b1:304b:8e2c with SMTP id cs16-20020a170906dc9000b008b1304b8e2cmr37444446ejc.0.1677330341179; Sat, 25 Feb 2023 05:05:41 -0800 (PST) Received: from [192.168.0.2] ([46.251.119.176]) by smtp.googlemail.com with ESMTPSA id n27-20020a170906089b00b008be5b97ca49sm805855eje.150.2023.02.25.05.05.39 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 25 Feb 2023 05:05:40 -0800 (PST) Message-ID: <1cd94489-7368-ce2c-0246-6a55c7fc5044@yandex.ru> Date: Sat, 25 Feb 2023 15:05:38 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.1 Content-Language: en-US References: <8DA1B548-B8D2-4EC1-B9F8-F7654003AC89@gmail.com> <56C0998E-3053-49F3-BAE3-46D6432B16F5@gmail.com> <87abbcaf-e60b-f975-b589-5e61f2d7866e@yandex.ru> <83bklkp7tj.fsf@gnu.org> <97710356-24c1-d79c-4796-3e51fd4809e3@yandex.ru> From: Dmitry Gutov In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Score: -0.9 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.9 (-) On 25/02/2023 05:59, Randy Taylor wrote: > It is a suitable term, but there is a confusing overlap, at least to me. In C++ parlance, for example, they are referred to as reference variables. I wasn't really getting down to the semantics of it, just when I see something like: > > void quack(int& thing) > ^^^^^ > obj_t& thing2 = otherthing; > ^^^^^^ > > Those are the things I would expect font-lock-variable-ref-face to highlight if I was just going off of the name, and I would expect many others to think the same. That's not unreasonable. > I don't have any better ideas than font-lock-{property,variable}-use-face, so I guess we can see if anyone else has any opinions on the matter. The only one I could think of is font-lock-{property,variable}-value-face. But that one can give wrong ideas as well. I suppose we should go with -use-, unless more alternatives are suggested. >>> Personally, I don't really see the value in differentiating these for variables. I can understand it a little more for properties. But I guess it doesn't hurt to add if folks want it. >> >> >> I see two potential uses: >> >> 1. Customize treesit-font-lock-level to 4 but >> font-lock-variable-ref-face to copy 'default' (or close to it), to skip >> variable reference highlighting or make it less noticeable. > > Wouldn't they just remove the variable feature if they want that? That's the obvious choice (which might be less accessible to those who don't venture into the manual, though, or don't write Elisp), but now they also have the option of toning down the highlights. >> 2. Pattern matching or comparably complex syntax which at a first glance >> may look like variable reference, but actually creates new bindings (or >> vice versa, creates new binding when one wanted to refer to an existing >> value). >> >> Emphasizing the difference can help people, beginners especially [in a >> particular language]. >> > > No doubt there are uses, I just don't really see them actually getting much use in practice. But maybe I'm wrong :). We'll see. I hope we will. Some third-party theme or two might start carrying that distinction, to start with. It might be nice to improve the default theme in that regard too, but that's a non-trivial task. From unknown Mon Jun 23 18:33:58 2025 MIME-Version: 1.0 X-Mailer: MIME-tools 5.505 (Entity 5.505) X-Loop: help-debbugs@gnu.org From: help-debbugs@gnu.org (GNU bug Tracking System) To: Jacob Faibussowitsch Subject: bug#61655: closed (Re: bug#61655: [Tree sitter] [Feature Request] font-lock function calls, definitions, separately) Message-ID: References: <3c515b2c-37c3-c6b3-c03e-f8fb20dba9cb@yandex.ru> <8DA1B548-B8D2-4EC1-B9F8-F7654003AC89@gmail.com> X-Gnu-PR-Message: they-closed 61655 X-Gnu-PR-Package: emacs Reply-To: 61655@debbugs.gnu.org Date: Tue, 28 Feb 2023 02:11:02 +0000 Content-Type: multipart/mixed; boundary="----------=_1677550262-12110-1" This is a multi-part message in MIME format... ------------=_1677550262-12110-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Your bug report #61655: [Tree sitter] [Feature Request] font-lock function calls, definitio= ns, separately which was filed against the emacs package, has been closed. The explanation is attached below, along with your original report. If you require more details, please reply to 61655@debbugs.gnu.org. --=20 61655: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D61655 GNU Bug Tracking System Contact help-debbugs@gnu.org with problems ------------=_1677550262-12110-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at 61655-done) by debbugs.gnu.org; 28 Feb 2023 02:10:07 +0000 Received: from localhost ([127.0.0.1]:49372 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pWpRP-000388-JQ for submit@debbugs.gnu.org; Mon, 27 Feb 2023 21:10:07 -0500 Received: from mail-ed1-f48.google.com ([209.85.208.48]:41708) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pWpRL-00037U-Qg for 61655-done@debbugs.gnu.org; Mon, 27 Feb 2023 21:10:06 -0500 Received: by mail-ed1-f48.google.com with SMTP id ec43so33856718edb.8 for <61655-done@debbugs.gnu.org>; Mon, 27 Feb 2023 18:10:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:in-reply-to:references:cc:to:from :content-language:subject:user-agent:mime-version:date:message-id :sender:from:to:cc:subject:date:message-id:reply-to; bh=BobS3t/P3N96YFjfw6bXQL6MwVEkWuh6ZtbhOfgCQTs=; b=Fr6qV4xuUEGD4RV56WfAR8AtspWrJStzU6edhKkC7Wkz9HOrOfguJn6ahy7EcpZx2f DYfKzmiGynrX8HMEHfaodAkXNmL6OJ4kZATXI4mPQIP+sjRm/b6pbOd6sBVElkgqueAx 8H8a5X5YMNH64Uw9Prok4PokQdUBn/nE31XI3rGKwPNijI3NlgVGER7lzU5uYTrjVqAi 5YgmgYHYIRfZVRQrO1UNfSNq8ke7AQ3Eq7B8cpIp1SMsNYewEoKOCD7NsBZdQOjKrQmG TmEglgAB5IWiTzEA3cawky6eqdiJ+Q6gI+7j4jdX7m8HhjKJ/0DKLhXCT8WdK3s/a/rv 9Sow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:references:cc:to:from :content-language:subject:user-agent:mime-version:date:message-id :sender:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=BobS3t/P3N96YFjfw6bXQL6MwVEkWuh6ZtbhOfgCQTs=; b=jpYrgUVLfIxpeBxcy3jcyW81GPxPh1lKO7XPlMWgt8QsgDbOKGGSuzuqdIIuKWnfVc l4x59tWkstIJUuYOjiOsFOBj5yWBUmWdI5tpKN2SzxjhtQBHx0Uo3X4zPWBmKC85SAYm skGXeIrWJX+DujnXG1/S24y/1pMlNbnmTQZ3NDdadfT6GUA0sjA4HkJiL59EY/GwX9Ar B7vrtsEWsesoBgXDb9zWMvPyn7862tctowtu1+hjddsh/iA6qjzluPp99SkeQOz9Fh2/ NNG9kJN3L+3M/YBz/5B5+gsnMofOvseg1GbgFoOnfgCdemCota6W6sCmoFRWcMq2mYMH IXoQ== X-Gm-Message-State: AO0yUKU7t8G3lZvSabqlQlHDWgAvRezKX+pWWt9TTI3LT0z/3I0I+edC mgzLiGtV1p/2dRmT24Qbv9E= X-Google-Smtp-Source: AK7set+LVy56v4dVbFVYAOflehV4VRzC2htSxAQR0KWuR6D8UJwiqKoOvw1QHVewG/gt545hmBOnNA== X-Received: by 2002:a05:6402:44:b0:4ac:d34b:c2a9 with SMTP id f4-20020a056402004400b004acd34bc2a9mr1587569edu.14.1677550197342; Mon, 27 Feb 2023 18:09:57 -0800 (PST) Received: from [192.168.0.2] ([46.251.119.176]) by smtp.googlemail.com with ESMTPSA id b23-20020a50ccd7000000b0049ef70a2894sm3808956edj.38.2023.02.27.18.09.56 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 27 Feb 2023 18:09:56 -0800 (PST) Message-ID: <3c515b2c-37c3-c6b3-c03e-f8fb20dba9cb@yandex.ru> Date: Tue, 28 Feb 2023 04:09:55 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.1 Subject: Re: bug#61655: [Tree sitter] [Feature Request] font-lock function calls, definitions, separately Content-Language: en-US From: Dmitry Gutov To: Randy Taylor References: <8DA1B548-B8D2-4EC1-B9F8-F7654003AC89@gmail.com> <56C0998E-3053-49F3-BAE3-46D6432B16F5@gmail.com> <87abbcaf-e60b-f975-b589-5e61f2d7866e@yandex.ru> <83bklkp7tj.fsf@gnu.org> <97710356-24c1-d79c-4796-3e51fd4809e3@yandex.ru> <1cd94489-7368-ce2c-0246-6a55c7fc5044@yandex.ru> In-Reply-To: <1cd94489-7368-ce2c-0246-6a55c7fc5044@yandex.ru> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Score: -0.9 (/) X-Debbugs-Envelope-To: 61655-done Cc: casouri@gmail.com, jacob.fai@gmail.com, Theodor Thornhill , 61655-done@debbugs.gnu.org, Eli Zaretskii X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.9 (-) On 25/02/2023 15:05, Dmitry Gutov wrote: > I suppose we should go with -use-, unless more alternatives are suggested. And done. Thanks all! ------------=_1677550262-12110-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at submit) by debbugs.gnu.org; 20 Feb 2023 15:54:50 +0000 Received: from localhost ([127.0.0.1]:53300 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pU8V8-0003Xt-D8 for submit@debbugs.gnu.org; Mon, 20 Feb 2023 10:54:50 -0500 Received: from lists.gnu.org ([209.51.188.17]:33048) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pU8V5-0003Xl-TN for submit@debbugs.gnu.org; Mon, 20 Feb 2023 10:54:48 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pU8V5-0000f2-In for bug-gnu-emacs@gnu.org; Mon, 20 Feb 2023 10:54:47 -0500 Received: from mail-qv1-xf32.google.com ([2607:f8b0:4864:20::f32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pU8V3-0003x2-JK for bug-gnu-emacs@gnu.org; Mon, 20 Feb 2023 10:54:47 -0500 Received: by mail-qv1-xf32.google.com with SMTP id bo10so754964qvb.12 for ; Mon, 20 Feb 2023 07:54:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=to:date:message-id:subject:mime-version:from:from:to:cc:subject :date:message-id:reply-to; bh=xsy3HVGthShDuwNFDknGw0/Xom1LgzzxyQhArWXiExo=; b=TAhduFN8Q6TCs4hMEbSjbzbaqh3EABn4aYvcImmvSn5C1JnUY+9z19s90YJ+LHE7fM HDl8vW8Qo8fsoqrZnxYdEWwCsvf20JMbgiVCJrui29Pql8zpsE/hDo8nyNauyAfPBNqH 2q96hkelJ4A+6g7XZCUjmSREEPpDf7bzhnBosTd8EhT6roqx7yOchPFDSTd0A6PlAOpo fDh8dcgcRpO9kGpFLH/XW9n9pa6aBjetXTtrKuk/XJIeq4nnh0/xKyHTFtSIiV0+cEII 2W0t2m/AF5nFyXX3xJswnHzlsvSDaTmKSBf14HQ7KvK6R5XgmMzMpw/+f7Zga2ufnsjM zwwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:date:message-id:subject:mime-version:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=xsy3HVGthShDuwNFDknGw0/Xom1LgzzxyQhArWXiExo=; b=DlNzOIvTt//gKQBW2h16iUVgIfok5oqFUsB9GXSJzsEakYSq53qmdfLagGpJMpC3gP DRMgJaOkhh7whoShx4bdlkMYj6g3oHljSsRroZbZG8a2KYl5pzvZB1WrYnjSCUgHv1iX RQRHz7iTOWxfJt0261DCNX2a3zfO+p5YEDU+0yZG/sDlNqBCzpwZ1VQOez3n8b3MfS2N hsm5LhYVaq4cMSReVPCV66OuVbZ708CwXtR+ff1wa4VdXBl96yOgoxzRCxQaIkQObSwR +eayapXrJB2fbEirBcKG7Ys84JnPpkYRfudYOiDTtJofZYcHd7HYVQpNibKR18CdYAd/ okwA== X-Gm-Message-State: AO0yUKX6mwsO0gdCUleJqDVb3EZjJKcD5faU3mk9NjfzG8AmyLwH3ivx EK+IXI+V1YJtKamUFeybuvkPrf5vDvrPxg== X-Google-Smtp-Source: AK7set9i5Opjd6+7m19EZzNIXUoXEhEFUAA5j4NxEzFQnh+n4wyLLBzuFblf3LaZfEFYIXVM/leRbw== X-Received: by 2002:a05:6214:5010:b0:56e:92a8:e182 with SMTP id jo16-20020a056214501000b0056e92a8e182mr1744169qvb.38.1676908483941; Mon, 20 Feb 2023 07:54:43 -0800 (PST) Received: from smtpclient.apple (pool-108-21-63-133.nycmny.fios.verizon.net. [108.21.63.133]) by smtp.gmail.com with ESMTPSA id k125-20020a37ba83000000b007259807a512sm9122489qkf.12.2023.02.20.07.54.42 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 20 Feb 2023 07:54:43 -0800 (PST) From: Jacob Faibussowitsch Content-Type: multipart/alternative; boundary="Apple-Mail=_B7F591B3-B9F2-47D9-882B-A7D24AD0C9F9" Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.120.41.1.2\)) Subject: [Tree sitter] [Feature Request] font-lock function calls, definitions, separately Message-Id: <8DA1B548-B8D2-4EC1-B9F8-F7654003AC89@gmail.com> Date: Mon, 20 Feb 2023 10:54:42 -0500 To: bug-gnu-emacs@gnu.org X-Mailer: Apple Mail (2.3696.120.41.1.2) Received-SPF: pass client-ip=2607:f8b0:4864:20::f32; envelope-from=jacob.fai@gmail.com; helo=mail-qv1-xf32.google.com X-Spam_score_int: -4 X-Spam_score: -0.5 X-Spam_bar: / X-Spam_report: (-0.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_IMAGE_ONLY_24=1.618, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --Apple-Mail=_B7F591B3-B9F2-47D9-882B-A7D24AD0C9F9 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii Hello, Is it possible to have the builtin tree sitter give differentiate = font-locking for function calls and function definitions? The 3rd party tree-sitter package = (https://github.com/emacs-tree-sitter/elisp-tree-sitter) has this = feature and it is quite nice. In fact it goes further, allowing you to = additionally distinguish between builtin calls, macro calls, method = calls, etc. (see = https://github.com/emacs-tree-sitter/elisp-tree-sitter/blob/master/lisp/tr= ee-sitter-hl.el). As far as I could see, the builtin mode only provides = `font-lock-function-name-face`. I have set treesit-font-lock-level to 4.=20= Examples below are for C/C++ mode, but this would apply to any number of = languages. Desired (i.e. what 3rd party package produces): Current: Best regards, Jacob Faibussowitsch (Jacob Fai - booss - oh - vitch) --Apple-Mail=_B7F591B3-B9F2-47D9-882B-A7D24AD0C9F9 Content-Type: multipart/related; type="text/html"; boundary="Apple-Mail=_6EF6DE6B-BAF8-4CFD-9839-7FDA89850DD0" --Apple-Mail=_6EF6DE6B-BAF8-4CFD-9839-7FDA89850DD0 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=us-ascii Hello,

Is it possible to have = the builtin tree sitter give differentiate font-locking for function = calls and function definitions?

The 3rd party tree-sitter package (https://github.com/emacs-tree-sitter/elisp-tree-sitter) = has this feature and it is quite nice. In fact it goes further, = allowing you to additionally distinguish between builtin calls, macro = calls, method calls, etc. (see https://github.com/emacs-tree-sitter/elisp-tree-sitter/blob/mas= ter/lisp/tree-sitter-hl.el).

As far as I could see, the builtin mode = only provides `font-lock-function-name-face`. I have = set treesit-font-lock-level to 4. 

Examples below are for C/C++ mode, but = this would apply to any number of languages.

Desired (i.e. what 3rd party package = produces):


Current:


Best = regards,

Jacob Faibussowitsch
(Jacob Fai - booss - oh - vitch)

= --Apple-Mail=_6EF6DE6B-BAF8-4CFD-9839-7FDA89850DD0 Content-Transfer-Encoding: base64 Content-Disposition: inline; filename=PastedGraphic-4.png Content-Type: image/png; x-unix-mode=0666; name="PastedGraphic-4.png" Content-Id: <177540B5-AF8E-49B5-ADC7-7F4BFB3EB4B3> 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 +9P3Xz8QfqD1IONg3SHLQ1WHaYfL6pH6afX9DdkN3Y0pjV1NYU2tzd7Nh484Htlx1PRo5THtY0uP U47PPz7YUtwycEJ0ou9k1slHrRNb75xKPnW1Laat83T46bNngs+came2t5z1OXv0nNe5pvOM8w0X 3C/Ud7h1HP7d7ffDne6d9Rc9LjZe8rzU3DWm6/hlv8snrwReOXOVffXCtchrXdcTrt+8kXaj+ybv 5rNbebde3S66/fnOnLuEu2X31O9V3De8X/2H7R97u927jz0IfNDxMO7hnUfcRy8eFzz+0jP/CfVJ xVOTpzXPnJ8d7Q3uvfR83POeF6IXn/tK/9T4s+qlzctDf/n/1dGf3N/zSvxq8PXiN/pvdrx1fds6 ED1w/13+u8/vyz7of9j5kfGx/VPSp6efp3whfVn71fZr87fwb3cH8wcHRRwxR/YpgMGKZmYC8HoH ANQUAGjwfEYZJz//yQoiP7PKEPhPWH5GlBV3AOrg93tMH/y6uQHAvm3w+AX11dIAiKYCEO8JUBeX 4Tp0VpOdK6WFCM8BmyO/ZuRngH9T5GfOH+L+uQVSVVfwc/svIBt8ZZU1ZUcAAACKZVhJZk1NACoA AAAIAAQBGgAFAAAAAQAAAD4BGwAFAAAAAQAAAEYBKAADAAAAAQACAACHaQAEAAAAAQAAAE4AAAAA AAAAkAAAAAEAAACQAAAAAQADkoYABwAAABIAAAB4oAIABAAAAAEAAAEMoAMABAAAAAEAAAE0AAAA AEFTQ0lJAAAAU2NyZWVuc2hvdIgvsOAAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAHWaVRYdFhNTDpj b20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4Onht cHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53 My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24g cmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20v ZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjMwODwvZXhpZjpQaXhl bFlEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4yNjg8L2V4aWY6UGl4 ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpVc2VyQ29tbWVudD5TY3JlZW5zaG90PC9leGlm OlVzZXJDb21tZW50PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6 eG1wbWV0YT4KhyfJZAAAABxpRE9UAAAAAgAAAAAAAACaAAAAKAAAAJoAAACaAAAhqUNkw2cAACF1 SURBVHgB7F0JmBRFln590g1001zdDd3YnEIDjcgNIiiC4ODBzXAMpwxeHALOyi6y7Cjs4KLTgIwH h8gxDo4CIuqAKAiCCHLIpYigfjKKnCJyyNGx7wUVZWVWZndWdlVWZfXL74uKzIj34vgj4q/IyMh8 MQAg0PHBCDACjECRCMSgBBNGkTCxACPACBACTBjcDxgBRsAyAkwYlqFiQUaAEWDC4D7ACDAClhFg wrAMFQsyAowAEwb3AUaAEbCMABOGZahYkBFgBJgwuA8wAoyAZQSYMCxDxYKMACPAhMF9gBFgBCwj wIRhGSoWZAQYASYM7gOMACNgGQEmDMtQsSAjwAgwYXAfYAQYAcsIMGFYhooFGQFGgAmD+wAjwAhY RoAJwzJULMgIMAJMGNwHGAFGwDICTBiWoWJBRoARYMLgPsAIMAKWEWDCsAwVCzICjAATBvcBRoAR sIwAE4ZlqFiQEWAEmDC4DzACjIBlBJgwLEPFgowAI8CEwX2AEWAELCMQ3YRBtctDV4Bun2VMjAUp nTh0X6K7YCwSjNBSaZWgTHo1iI1PlMmdPrQLCq5cDkbSQUkjLi4OGjRoAOfPn4fDhw9bSzOY7WAt R1dIlStXDnJycuD48eNw7NgxV5SZCkmmEqPTNcR67fC4GsWs40ZPOg2KmY4J1hXrNRWd/7ZR9Fn9 o8aVybghotpm4MCB4vPPPxcPPPCA9XIFsx1M8PPrw3WxnSqEpq388rJaJp1chQoVxM6dO8WaNWtE QkKCdTx16QSrPFbSie4ZBs0KFqKjoze6I/LM3s9GVCuDbhC6/faSMNOKTy4Lv3vpY0gqnw6XTv8I x3ZtgMu/nJXiB/7xDFw+95OZqqPhqampsHbtWigoKIBOnTrJWYalAgSzHaxk+DwKtUA3AN0XVhTC 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 I7RkwQAAAABJRU5ErkJggg== --Apple-Mail=_6EF6DE6B-BAF8-4CFD-9839-7FDA89850DD0 Content-Transfer-Encoding: base64 Content-Disposition: inline; filename=PastedGraphic-3.png Content-Type: image/png; x-unix-mode=0666; name="PastedGraphic-3.png" Content-Id: <81819184-444C-4B1D-B847-0A951DE7D5FE> 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 +9P3Xz8QfqD1IONg3SHLQ1WHaYfL6pH6afX9DdkN3Y0pjV1NYU2tzd7Nh484Htlx1PRo5THtY0uP U47PPz7YUtwycEJ0ou9k1slHrRNb75xKPnW1Laat83T46bNngs+came2t5z1OXv0nNe5pvOM8w0X 3C/Ud7h1HP7d7ffDne6d9Rc9LjZe8rzU3DWm6/hlv8snrwReOXOVffXCtchrXdcTrt+8kXaj+ybv 5rNbebde3S66/fnOnLuEu2X31O9V3De8X/2H7R97u927jz0IfNDxMO7hnUfcRy8eFzz+0jP/CfVJ xVOTpzXPnJ8d7Q3uvfR83POeF6IXn/tK/9T4s+qlzctDf/n/1dGf3N/zSvxq8PXiN/pvdrx1fds6 ED1w/13+u8/vyz7of9j5kfGx/VPSp6efp3whfVn71fZr87fwb3cH8wcHRRwxR/YpgMGKZmYC8HoH ANQUAGjwfEYZJz//yQoiP7PKEPhPWH5GlBV3AOrg93tMH/y6uQHAvm3w+AX11dIAiKYCEO8JUBeX 4Tp0VpOdK6WFCM8BmyO/ZuRngH9T5GfOH+L+uQVSVVfwc/svIBt8ZZU1ZUcAAACKZVhJZk1NACoA AAAIAAQBGgAFAAAAAQAAAD4BGwAFAAAAAQAAAEYBKAADAAAAAQACAACHaQAEAAAAAQAAAE4AAAAA AAAAkAAAAAEAAACQAAAAAQADkoYABwAAABIAAAB4oAIABAAAAAEAAAD2oAMABAAAAAEAAAEUAAAA AEFTQ0lJAAAAU2NyZWVuc2hvdLdlExIAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAHWaVRYdFhNTDpj b20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4Onht cHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53 My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24g cmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20v ZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjI3NjwvZXhpZjpQaXhl bFlEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4yNDY8L2V4aWY6UGl4 ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpVc2VyQ29tbWVudD5TY3JlZW5zaG90PC9leGlm OlVzZXJDb21tZW50PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6 eG1wbWV0YT4KEYtKPgAAABxpRE9UAAAAAgAAAAAAAACKAAAAKAAAAIoAAACKAAAgUEVv9BAAACAc SURBVHgB7F0HnBRF1n8bWXZZWGBhgWUlw66wgBIWDIAc8UBYsoQjI6Dk8LvjPuBAhTtORAFRkCMo HAon4QjnR9AjCErm4wiSJJ+IHIoIh6T63iunhgk9uz09Mz3Ts69/v5rqrvCq6l/vP9VdXV0vAgAE Oj4YAUYgjBCIwLYwscOoQ7kpjAAhwMRmPWAEwhABJnYYdio3iRFgYrMOMAJhiAATOww7lZvECDCx WQcYgTBEgIkdhp3KTWIEmNisA4xAGCLAxA7DTuUmMQJMbNYBRiAMEWBih2GncpMYASY26wAjEIYI MLHDsFO5SYwAE5t1gBEIQwSsSWyqdSa6h+iO+NgrJCcK3Ul0t32UlUP2fEnJkFA8DSKjY2Wq66cO wsN7d3PIYW5UVFQUVK1aFW7dugVnzpzRV7g/+0FfiZZIVahQIShTpgxcvXoVrly5ErQ602eb1nLV sL77ba6cj3XfbpNT1Uc5HjAsml5LNH9nu+i8/lsnl5DyWEhh3qNHD3H8+HExaNAg/fXyZz94wM9N N6tgPxUJTF+5laW3Ti7pihQpIg4cOCA2btwoYmJi9OPpIseX+lhzxKZRdjE6Ojqh+1qeGfvZjtkS 0PVEd9SYCE+5ovMXgF+/9wXEFS4Od65/C1cOboW7P92QyY999AbcvfmDp6ymhhcsWBA2bdoEDx8+ hKZNm8pRW1cF/NkPegp8FxPVRdcd3Vd6MgQvzejRo6F///4wbdo0WLx4cVAqEpR/FGyp8XITMG9/ dH3R5fNBDtUhgCP2Yw2y5SjdbvlJEREZZby9vmClI++YMWPkaD1w4EDv6ujPftBRT9iJ/UV3ajRq 60kfxDRJSUni0KFDYvfu3SIxMTEY9Q19kALaiQEkdkbnEZLYT49fHIyO1VVmXFycVL6jR4+KEiVK 6MoT0P7IiYwWIjZhNGPGDPmH2b17d9NxNXYrnozVpjkgupPMacKpJMZTCdfQac0TlcDwKugKoTuN juZsfkbn6SiOEdEukVfx+r5LmNZlDAZSWRXQUTl0K0f5/HkrHhGBE2SlUegvR3rHYVChZU+4+Pla OLzoFRUs/dvXvgHxQLvi8cVSIal8NciXWARunD+O7it4cPeOU36tCyP52rVrB1OnTgUcWaB3795a Yt3DjPRDERQTh07pAulPNXRp6E6jO46OJkMdD3pEIt1Qx0o8oXzD0bk+ftEclWt+DPLmKFy4MBQo UAB+/vlnOfGllTc+Ph6KFi0qoy5dugRCEGe1j4YNG8LcuXPh1KlT0KZNG+1EAQo1RuzxWJt26Naj +4OHmlXE8OXoSHebofvl0RJP8KBOnoKOnpccj1t48Rq6TY6BDudr8JwUwfHQ84xdHTO8gY7KVcd3 eDIA3V/R+ekZOypffuiw8hwKzP3Y0K823Pr2olPCuKRikDX2XUip8axT+P3//gR7Z42GizsIAPfD aD6StHDhQqhfvz7g6ALz5893F64VYqQfZqGgp9GNQBePbhI6Iqk69uLJb9E56kkvvB6mEuTiN8X4 67mkySW6Zs2asGbNLxjTH97BgwedctCbg5UrV0KdOnXg448/huHD6R/G8xEbGytlREZGQnZ2Npw4 ccJzYj/HGCN2LazFe+iIiE3QaY3GQzC8D7od6Kgz1VEQT/6GjkZ9ItdGdNQhddDVR0fHdHQfyjPn n354mWQL6oo+1T43YtOoQPpKSkSjNI3QVIfn0NGfLZGd4vwweRYZHQOZvf4Hhf1yFKtWH4pUqilH 3CsH/qmCpX98xVtOk2exiUnQYs52iCuSAv+9fgUubl8Dd77/DorXeAZKPEmVBTj43ng4tdaZfEbz kbzo6GjYs2cP5M+fXyopTaDpOoz0gyL2ZiyhIbqd6Kg/SqFrjS4K3cfo/ohOHbXxxPE/jvqc0v0D nSuJ52HYbXQ+HjThNXnyZLhw4QI0a9YMbt68aZc4duxYGDFiBJw+fRpatmwJt2/nXuCWLVsgNTVV 3hUtWbLELsuME1Jv71wEpv8EHU1kPOch71pbfHOX+CG28PXop7jEDbfF/RP9eJc41zrutaUtn0u6 2bZ076Af6ZCWXpn8ry2O2hGA113V+0yQz9h1hr+ZK76ZvX4v07ZeuF/EJ6c6pa/RZ6KMy/7whMCZ dqc4o/moz3GEks+A9JqrSpUqTnJ164TefpjlgPXzeO7Yn9m2uF3o53eJc0xn0jP2ggULxOXLlwXe RtvriXc14uLFiwLf8Yv09HR7uFM7HOtqOydZhO/MmTN158lNps74HIDUqKhdqCLhnzTyq/ebOzAu ziE+Fs8pjIjUxSFclUMz3Ftt8S9oxKt05OtRqLI2WVReBQ15HR3ig0jsyJhY0f7jryV5K7bu56YA UbFxgmbW6V14pTb97fFG86k+bNu2rVS6Y8eOCZpEU+Fe+Xr6gfpLEXuZRj/EYNgeW19o9ZPqd5OI ja//xJdffinJTRNf+Owt9u3bJ6+7du3qFU4TJ06UGOMtvlf5vOoDhY+zrwG0cwLtClW2dQT9y7qO rmNsca+4yC5jCyeiFXWJU2VOsaUZ7yFepdOjUE1ssjZ5kFXaFk/1CSKxE0tXlKQl4uI7b0286415 V6apPfQNe7zRfEpp+vTpI5Vu69atdpkqTrevpx+ozxSxx+K56kNHX90B1vMQT2lNIjbVj+5mzp07 J0dofK6WpJ49e7Z23R3b4XLeq1cvifH27du9zquJk4v8HNLkAGRuQlZgXiJFCwcZdLu70RZe3yGc ZFGnUfrd6Oh2Xkv+MFuaOR7iVR49CvUbm6zFHmRRXak+QSZ2iScaSdJ2XHMJcYnQxEXd1jd4dbk9 3mg+hfuwYcOk0q1YscIuU8Xp9vX0A/WZInYvD32xytYPjTzEkwwTiU3tHzBggCQ03ZYTMRMSErzG qXnz5hJjWommG1Nqq+/OByF9MC+R4i0HGXVsYZvRd3ympYq2ssVtQd9TxXvb0nyYQxrKq0ehhtpk 0fO1p/LojiPIxC7TuJMkdtu/HvNYz/SOQ2WaZrM/s6cxmk9hga+3pNLt2LHDLlPF6fb19ANhr4jd zUNfhCCxcfbbTmx8Y2AIo/bt20uMt23bZii/7n5w128PQLsndK9YScy7Dx2NwAVtcugWmoiidcuV ZYsjZXAlvSpvpC0NTXqpMC1fj0KRElFdPvAgK9oWH2Rip9RsIEnbae2/RUREpGa7a/SbJNM0mPyh Pd5oPoUrvluVSkeTO0ZGIylHTz9Q/1mM2I7P1SdPnpQEp9tqhZ1ev2/fvhLjVatWeZ1Xbxke0nlQ ei0yaYUtsJGDZjaJKDSj7YkoabY4iqc/BS1502xpfu8hXuVRt2WZOaRTz9hUJ60/kvK2sjzVV5Vl 0Fe3z7nNihcoWU6Slp6x44uX1sTlqXF/kWlqvfy6Pd5oPoV7ZmamndgZGRl2uSpel6+nHwg/fxD7 c1t/ZaBvsE/05IvAxyF8NSXJTDPjWVlZAl9/ibNnzwrCTI8MlWb8+PESY1qFpsJM8n0ESc0sv4ty nrUBv9qDzBgMV8Sn23jXzimAYUpRSK5rvOP13zCeCEnP0Y7hjudJGEd3E56I28MW5yneUZaBc73E xvffgl5lEbEzOg13a09MQkGBC19kfIWWj0YNo/kUXrjgQuzfv18qXosWLdzKVely9PX0A2HnD2Kv tfXXU+gb6A+9eYYMGSJJTTPjap33yJEjZdiuXbvsYXrkLV++XOLr7Wy6Htm5pPERpEKYn8hDt2RE biLJQHSegO9nS0PP2RUd0tGIOskWtwn9fA5xWrIm2tIuQd/T6E/53nBIR38sSlYqnm+1xQWZ2FSn jC6/rCun5+xCZR+NnnRrXnfETEnqNkv+JejVl70NPuRTMubNmycVb/DgwU5yVXyuvt5+8AexaUKV +moKOq07MNW3PvhqdD5//ryoVauWHRNcPSZwtZkkt97n7Xz58onDhw9LfCtWrGiXlSumPtRfyaa1 W1Sgb8ebmL2Bg4j2eH7e4drxlJYTLkVXBh2tXKMVSP9BR6vZKqOj9b60rHodupyOVIyklUq0auwB ukM2n8r9Ezp1lMOTv6CjFWu0rpzKS0RHq9xofXEKugLo/LDyDKU4HThiQ3qHIXB28zLYO3OkU5zr BX3i2fStTZCYWgHu3b4JV/Z/hivPrkKxzKcgqVxVXJP8UMo4t+Ujp6xG8ykhrVq1gunTpxtfz6y3 H9TKM1rau0yV7uCvwnPSidHotqLTOqjP3rZFXEb/LDq16pF05tEiMVsi7zxaA75582ZISUmRn1vO mkWVfnTgRzJAK8loTfmECRPkctxHse5nah0+zmEATqK5JwhwCBHbN9cM89M/KbkPdMii996voaNR XuUjn95l1kWntz5VMO0idF+gU3KWauSndOrVnEpHI30RdJSewpA7usvVWT+9t+KqXFpVljXmHUGT aHRbrtzziw8KXD/usX5G81G5tBHAzp075ahSr149j2WoOmr6evrBHyM24d4I3fvo1COd6k9P6yJ0 9hWNyMuWLZMjMr3+o2uttuIyU5mG3nHTu26tNCqMJsxoYrJLly45plPp/ez7X6F1VzAWy34cHT0z FfehHlGYl0hKjh4NPHUmxdO79eQc0njKa2J4VGw+gWvMRYlajUX+oiU9t8elTkbzDR06VCrgnDlz dJelibHefnCpt6YsPWlIf/LbnKd1EXrkBCBN7dq1Jab0TI5fhPmGq7H6hbaSG+50Y2AEowOCXiYp Hr3Lpm+y09LSgl6fcOhzvI2XxO7WrVuw8GRih4Mi+dqGzp07S0UcN25csBQxbMotVaqUOHLkiFi/ fr2gNw++9o2R/P6ZPMOS+bA2AvStcdmyZeHu3buAXzFZuzFBrj2+IoPixYvD999/D9evu35fak7l mNjm4MylMAKmIsDENhVuLowRMAcBJrY5OHMpjICpCDCxTYWbC2MEzEHA78SmjdtwT2W5OufatWtw 44bj7nTmNIpLYQTyOgJ+I3bp0qVh1KhR0pIEbZJHBy27o90c+WAEGAFzEfAbsRctWgS4JFFO8dN6 WxqtaV0trZPlgxFgBMxFwC/EJuuC+ImbrHmnTp0AX86b2woujRFgBJwQ8AuxcTtWWL16NTx48ACq V68ujbs5lcIXjAAjYCoCfiE2fsMqLQr++OOPQOd8MAKMQHARYGIHF38unREICAJM7IDAykIZgeAj 4PPXJ02aNJFfBgVhi1Wf647wswzGIBx1wHfFHjRokCQ27QnFRPEdT8aQMfSDDhgHEa00igYNGgja JYK2gOnXz93ulB8qyH8WPKKyDnipA4aesV966SV48cUXAXdhRN6iLXNcjDJp0iT49NNP5TX/MAKM QHARMERstCABtLsl7daI26oCGfhevHgxvP3223Dnzp3gtohLZwQYAYmAT7c5uGWrWLdunbwVx7Xh PsnC2nB+xoB1wD864DuZaMM2esamPZ6YnL7jyRgyhn7QAd9BbNiwoST2559/zsT2z78t48g4+qQD hp6x8d/E6eAlpU5w8AUjEHQEmNhB7wKuACPgfwT8Quy6devC+++/Dzdv3gQ654MRYASCi4BfiF2+ fHnYsGEDGo4T8rPN+/fvB7dVXDojwAj4PnlGK9DIPAzNjOP7bZ8e+rE/OD9jwDrgow74ZcSmP8dX X30VOnbsKP8nT58+Dd999x3QdkloE0qG8Q8jwAiYh4DfiI2jtiR28+bNoVixYkC2hqdMmSJ3VjGv OVwSI8AIEAJ+IzbDyQgwAqGDABM7dPqCa8II+A0BJrbfoGRBjEDoIMDEDp2+4JowAn5DgIntNyhZ ECMQOggwsUOnL7gmjIDfELAMsQuVSYeYhELw05VzcOf6t34DINCCoqKioGrVqnDr1i04c+ZMQIsj iyxlypSBq1evwpUrVwJaFgsPfQQsscqn4ZSPRef134qKrfpYor7Y7bKePXr0kCvyaMNHFRYov0iR IuLAgQNi48aNIiYmJuDlBaodLNcvqy/9IiTgSmRFYhcsWFCgTTO52WNCQkLAMSJCjB49Wv6R9O7d 25TymIQhy5+QrZiTYlqR2GPGjJEkGzhwoFNbAkkGtE0uDh06JHbv3i0SExNNKzeQbWLZhjhqKJPp CmM1YsfFxUly0ccxJUqUMBWvGTNmyD+U7t27m1ouEzCkuBRSlfGoiK7EjksqJlLr/1qUfqqViE0s 7DGfUrb8RUuKlCcainJNu4myjTuL5Iw6Ijou59vjmPhEkZCSJnDSzi4/Oi5elKzTVJRt8oIoUqmm PVyVo/x27dpJcuHurR7TqLS426tIS0sTxYsX95g2Pj5epqF0ERERHtORTLVV1dq1a3NMp8pn3xoc 8KafLDMrjsSGlBrPwoG54yChWGmo0uFlbKftwO/AL+3aAF++Pgge3r+nQqVPeWr0mwRJ5as5hdPF 3Zvfw7GPZsDpDYvc8lE8lVGjz0Q4sfpd+Nf7UyBrzDuQmtUCImNiKVoel7/4B+yc0kdd2v2FCxdC /fr1AUdPmD9/vj1c66RmzZqwZs0aGYV/CHDw4EGnZDSzvnLlSqhTpw6gtRUYPny4U7zrBW0HTTIi IyMhOzsbTpw44ZrE7Rr/MADvLGDv3r1ucRxgPQQsR+ybl89AgZJl4cr+z+C7I19KwpbKagY4+sKl neth1x/7OfVC5eyBULP/K/DD10fg+qlD8NO/z0J0/gJQ4slGULhSDYiIiIQjS6dJgjtlxAtF7HOf rYB7P92ASs/3h+un/w9unDsmy8MRG+7fvQMbX2rglDU6Ohr27NkD9MUbkXDTpk1O8VoX/fv3h8mT J8OFCxegWbNmcjcalW7s2LEwYsQIoM9hW7ZsCbdv31ZRHv0tW7ZAamoqTJ06FZYsWeIxHUU8//zz MG3aNMQiAj755BMYNWpUjuk50hoIWOJ2Td2K0ysvJJxTnUs80Uh0WveNfB1WNL2WU1zy41miaHpt pzDsFnldvMYzovO6K6L9386IfEnJbmmoHCqv7V+PieyPToqStZs4pYmIjHILI9k4AsvbcNp4okqV Kk55VNla/oIFC8Tly5fF3Llz7Xlw1BcXL14U+A5cpKen28O18juGkSwqf+bMmbnmwbsLe32PHDki zJrBd6wvn/v9ccDvAnNVJCOdqIjdeuF+TfnPTFwqSVjr5dc14z2V+ev3vpD50p5p45ZPEVu+P2+t 3y5Z27ZtJVGOHTsmaBLNU9mu4er1GJGbJr7o2Xvfvn2S7F27dtUth+ROnDhR1gFv8XPNh3cDdmLz c7k1+OCqOxrX1miIInadYW9qKmqlNgMkQZu/s10znhoeFZtPFEyrJGiEL1n7V9I1m/WpzKe18EUR u8PKcyIyWv+Cjz59+kiibN261WNdNDpCpqXR/ty5c3KExudqSerZs2d7LadXr16yDtu3e8ZD1YFe iw0ePFjgLjgCTTZ5XZaSw35IcSmkKuNRqRSxM7qM0ExTKqu5JGi75Sfd4otVrSeazf5M3nbT6Kvl Krd90S2fInZOfxZayjxs2DBJqhUrVrjJ1ErvGjZgwABJaBq5iZhGbo1xJxtZB1qJ5iqfr62h8z72 kzUaqYhNI7NWg+XzMpEWn5lxQsyeJvM34+yEfm7a30Vmz9+Liq37igote0rX4p0dkuiVs92XfCpi N3jlI7s8rbJdw2jVFz3f4n5vXuVTcnD2205snFE3JKN9+/ayDtu2bTOUX9WFfWvwQ6OfrFFxRezH Xxilqaip9VpKgrZddtwen5DymOi09t8yvHxz7cUazedsy5XYz/5hqV2mBoBucWiNVJKKyO3taOv4 XH3y5ElJcLqt1lOuY5q+ffvKOqxatcrrvI5y+Nwa/NDoJ2tUXBE7a/QcTUVVoys9M6tGln66tSRt 9odfiYioaHu4iqfn5o5rLsk06R2GuMUrmd4SOzMz007sjIwMN7mqfFefFp7gqylJZpoZR9NJAl9/ ibNnzwqS6Zo+p+vx48fLOtAqtJzScZw19N9AP1mjYYrYbZb8S9BrJteGqnhcUGKPo5luep5us/SI 5uRXmUYdZDylqdbjt/Z8SrZRYuOCErF//35JrBYtWrjJVfJd/SFDhkhS04cjap33yJEjZdiuXbvs Ya75tK6XL18uy9czm44LWeR+8LSmvVy5crrrq1Uuh4UMn0KmIjkqlCIukbB6H2c73I81yLYTtOBj le1y6FxNlD3WsJ09nJSvQMlyot3yU/b4JwdNdYqnNEaJTXnnzZsniUWzzXqUXY3O58+fF7VqPXoX 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 --Apple-Mail=_6EF6DE6B-BAF8-4CFD-9839-7FDA89850DD0-- --Apple-Mail=_B7F591B3-B9F2-47D9-882B-A7D24AD0C9F9-- ------------=_1677550262-12110-1--