ವಿಕಿಪೀಡಿಯ
tcywiki
https://tcy.wikipedia.org/wiki/%E0%B2%AE%E0%B3%81%E0%B2%96%E0%B3%8D%E0%B2%AF_%E0%B2%AA%E0%B3%81%E0%B2%9F
MediaWiki 1.47.0-wmf.12
first-letter
ಮಾದ್ಯಮೊ
ವಿಸೇಸೊ
ಪಾತೆರ
ಬಳಕೆದಾರೆ
ಬಳಕೆದಾರೆ ಪಾತೆರ
ವಿಕಿಪೀಡಿಯ
ವಿಕಿಪೀಡಿಯ ಪಾತೆರ
ಫೈಲ್
ಫೈಲ್ ಪಾತೆರ
ಮಾದ್ಯಮೊವಿಕಿ
ಮಾದ್ಯಮೊವಿಕಿ ಪಾತೆರ
ಟೆಂಪ್ಲೇಟ್
ಟೆಂಪ್ಲೇಟ್ ಪಾತೆರ
ಸಕಾಯೊ
ಸಕಾಯೊ ಪಾತೆರ
ವರ್ಗೊ
ವರ್ಗೊ ಪಾತೆರ
ತಡ್ಯ
ತಡ್ಯ ಪಾತೆರ
ಕರಡು
ಕರಡು ಪಾತೆರ
TimedText
TimedText talk
ಮೋಡ್ಯೂಲ್
ಮೋಡ್ಯೂಲ್ ಪಾತೆರ
Event
Event talk
ಕೆ. ಎಲ್. ಕುಂಡತ್ತಾಯ
0
6295
363119
172989
2026-07-24T11:25:21Z
BENET G AMANNA
60
/* ಉಲ್ಲೇಕೊಲು */
363119
wikitext
text/x-wiki
[[ಫೈಲ್:K L Kundathaya 20180322 105355.jpg|thumb|right|ಕೆ. ಎಲ್. ಕುಂಡತ್ತಾಯ]]
ಕೆ. ಎಲ್. ಕುಂಡತ್ತಾಯ ಮೇರ್. ತುಳು ಕನ್ನಡ ಬರವಣಿಗೆದಾರ್/ಲೇಖಕೆ. ಉದಯವಾಣಿಡ್ ಮಸ್ತ್ ವರ್ಸೊ ವರದಿಗಾರೆರಾದ್ ಸೇವೆ ಮಲ್ತಿನಾರ್. ಮಸ್ತ್ ಕ್ಷೇತ್ರ ಪರಿಚಯ, ಅತ್ತಂದೆ ಸಂಸೋಧನಾ ಲೇಖನೊಲೆನ್ ಬರೆದ್ ಪುದರ್ ಮಲ್ತಿನಾರ್. ಮೇರ್ [[ಯಕ್ಷಗಾನ]] ಕ್ಷೇತ್ರಡ್ಲಾ ಮಸ್ತ್ ಪುದರ್ ಮಲ್ತೆರ್.<ref>[http://samarasasudhi.blogspot.in/2018/02/5_28.html ಸಮರಸ]</ref>
==ಬರೆಯಿನ ಲೇಖನೊಲೆ ಸಂಗ್ರಹದ ಬೂಕುಲು==
# ನಂಬಿಕೆ ನಡವಳಿಕೆ
# ಪರ್ವಕಾಲ
# ಮಾರ್ನೆಮಿ
==ಸಂಪಾದನೆ ಮಲ್ತಿನ ಬೂಕುಲು==
# ಧರ್ಮನೆಮ
# ಅಣಿ ಅರದಲ-ಸಿರಿ ಸಿಂಗಾರ
# ವಿರಾಡ್-ದರ್ಶನ
# ದುರ್ಗಾದರ್ಶನ
==ಕ್ಷೇತ್ರ ಇತಿಹಾಸೊಲು==
# ಎಲ್ಲೂರು
# ಕುಂಜೂರು
# ಪಾದೆಬೆಟ್ಟು
# ಕಾಪು
# ನಂದಿಕೂರು
==ಅಧ್ಯಯನ==
# ದೇವಾಲಯ ಪೂವೋತ್ತರ
==ಉಲ್ಲೇಕೊಲು==
{{Reflist}}
# https://www.prajavani.net/district/udupi/padubidri-temple-introduction-book-release-kundantaya-4046580
# https://www.varthabharati.in/article/2022_11_12/356156
# https://www.youtube.com/watch?v=0QF60iJkYkE
# https://udayavani.com/district-news/dakshina-kannada-news/k-l-kundanthaya-ananda-puraskar
# https://www.timesofkudla.com/ARDC.in/tag/%E0%B2%95%E0%B3%86-%E0%B2%8E%E0%B2%B2%E0%B3%8D-%E0%B2%95%E0%B3%81%E0%B2%82%E0%B2%A1%E0%B2%82%E0%B2%A4%E0%B2%BE%E0%B2%AF/
# https://www.instagram.com/p/DK3sknjTJIA/
[[ವರ್ಗೊ:ಲೇಖಕೆರ್]]
[[ವರ್ಗೊ:ವ್ಯಕ್ತಿಲು]]
[[ವರ್ಗೊ:ಬರವಣಿಗೆದಾರ್]]
{{ಎಲ್ಯ}}
1wv3ouf7dd921ubmxa0fi2uo8j68xlj
ವಿಕಿಪೀಡಿಯ:ಚಾವಡಿ (ತಾಂತ್ರಿಕ ಸುದ್ದಿಲು)
4
6742
363101
363013
2026-07-23T22:52:25Z
MABot
170
Bot: Archiving 1 thread (30 ದಿನೊಕುಲು ಕ್ಕಿಂತ ಹಳೆಯ) to [[ವಿಕಿಪೀಡಿಯ:ಚಾವಡಿ/ತಾಂತ್ರಿಕ ಸುದ್ದಿಲು/ಪತ್ರಾಗಾರೊ/2026]]
363101
wikitext
text/x-wiki
{{ಚಾವಡಿ ಪುಟೊ header|ತಾಂತ್ರಿಕ ಸುದ್ದಿಲು|alpha=yes| [[ತುಳು ಬಾಸೆ|ತುಳು]] ವಿಕಿಪೀಡಿಯೊದ ತಾಂತ್ರಿಕ ಸುದ್ದಿಲೆನ ಪುಟೊ.
|ವಿಪಿ:ಚಾ|ವಿಪಿ:ಚಾತಾಸು}}
{{Archive box|
{{Search box|root=ವಿಕಿಪೀಡಿಯ:ಚಾವಡಿ (ತಾಂತ್ರಿಕ ಸುದ್ದಿಲು)|search-width=20|search-button-label=ಪತ್ರಾಗಾರೊಡ್ ನಾಡ್ಲೆ|search-break=yes}}
*[[ವಿಕಿಪೀಡಿಯ:ಚಾವಡಿ/ತಾಂತ್ರಿಕ ಸುದ್ದಿಲು ಪತ್ರಾಗಾರೊ|ತಾಂತ್ರಿಕ ಸುದ್ದಿಲು ಪುಟೊತ ಪತ್ರಾಗಾರೊ]]
}}
__NEWSECTIONLINK__
__TOC__<div id="below_toc"></div>
[[Category:ವಿಕಿಪೀಡಿಯ ಚಾವಡಿ]]
[[Category:ವಿಕಿಪೀಡಿಯ ಲೇಸ್ಲು]]
{{ಬಳಕೆದಾರೆ:MABot/config
|archive = ವಿಕಿಪೀಡಿಯ:ಚಾವಡಿ/ತಾಂತ್ರಿಕ ಸುದ್ದಿಲು/ಪತ್ರಾಗಾರೊ/%(year)s
|algo = old(30d)
|counter = 1
|archiveheader =
|minthreadstoarchive = 1
|minthreadsleft = 2
|key = 5ba48e49ae85ef53ec35cbf6eec6ff38
}}</noinclude>
{{clear}}
== <span lang="en" dir="ltr">Tech News: 2026-27</span> ==
<div lang="en" dir="ltr">
<section begin="technews-2026-W27"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/27|Translations]] are available.
'''Updates for editors'''
* As part of the [[mw:Special:MyLanguage/Contributors/Account Creation Experiments|Account Creation Experiments]], the Growth team tested adding a user account icon in the mobile web header for logged-out users, providing direct access to "Create account" and "Log in" actions. The experiment increased account creation by about 20% without negatively affecting edit quality or constructive edit rates. The feature will now be rolled out to all Wikimedia Foundation wikis on mobile web in the first week of July. [https://phabricator.wikimedia.org/T428220]
* After a [[phab:T426248|successful experiment]], logged-in users who did not [[mw:Special:MyLanguage/Help:Email_confirmation|confirm their email address]] when their account was created see a new banner asking them to complete that process. This helps reduce the risk that users get locked out of their account, and makes account email addresses overall more reliable. This is part of the [[mw:Special:MyLanguage/Product Safety and Integrity/Account Security|Account Security]] project. [https://phabricator.wikimedia.org/T428292]
* An update to [[Special:Search|Search]] is refining how the <bdi lang="zxx" dir="ltr"><code><nowiki>-prefix:</nowiki></code></bdi> behaves when used to exclude results. Previously, using <bdi lang="zxx" dir="ltr"><code><nowiki>-prefix:</nowiki></code></bdi> with negation could unintentionally broaden search results by adding the namespaces included in the search scope, leading to confusing behavior for users expecting a straightforward exclusion filter. With the update, <bdi lang="zxx" dir="ltr"><code><nowiki>-prefix:</nowiki></code></bdi> will now strictly exclude matching page titles as intended and may display a warning if the relevant namespace has not been explicitly selected. The behavior of <bdi lang="zxx" dir="ltr"><code><nowiki>prefix:</nowiki></code></bdi> without negation however remains unchanged. [https://phabricator.wikimedia.org/T427443]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:33}} community-submitted {{PLURAL:33|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where reviewers using the Page Curation toolbar were not automatically subscribed to talk page discussions they started has now been fixed. Reviewers will now receive notifications when someone replies to those discussions. [https://phabricator.wikimedia.org/T329346]
'''Updates for technical contributors'''
* Starting June 29th, automated downloads from the dumps.wikimedia.org website will be subject to the [[Foundation:Special:MyLanguage/Policy:Wikimedia Foundation User-Agent Policy|user-agent policy]]. Automated requests that provide a generic or empty user-agent will be blocked. Access to dumps through Wikimedia Cloud Services remains unaffected. This is a follow up to the announcement made in the [[m:Special:MyLanguage/Tech/News/2026/25|2026/25 issue of Tech News]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.9|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/27|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W27"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೧೭:೧೭, ೨೯ ಜೂನ್ ೨೦೨೬ (IST)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30744833 -->
== <span lang="en" dir="ltr">Tech News: 2026-28</span> ==
<div lang="en" dir="ltr">
<section begin="technews-2026-W28"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/28|Translations]] are available.
'''Updates for editors'''
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:34}} community-submitted {{PLURAL:34|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where the search bar results on Wikidata, showed English results instead of using the correct language fallback for users of language variants, has now been fixed. Search suggestions will now follow the expected language fallback chain. [https://phabricator.wikimedia.org/T429769]
'''Updates for technical contributors'''
* In preparation for [[m:Special:MyLanguage/Event:Celebrate Women|Celebrate Women campaign]] planned for March 2027, the Wikimedia Foundation’s [[m:Special:MyLanguage/Wikimedia Foundation/Advancement/Community Growth/Content Enablement|Content Enablement team]] has launched a 22-question survey to better understand technical contributions by women+ (anyone who identifies as a woman) across Wikimedia projects. The survey takes approximately 15–20 minutes to complete and will remain open until 20 July 2026. The [[m:Special:MyLanguage/Celebrate Women/Technical contributions survey|questions]] are also available on-wiki for review in advance.
* The [[mw:Special:MyLanguage/Extension:Score|Score extension]] now supports rendering music scores as SVG images in addition to PNG, addressing a long-standing [[:phab:T49578|feature request]] and resolving historical image quality issues. Both formats are now provided to clients, with PNG in the <bdi lang="zxx" dir="ltr"><code><nowiki>src</nowiki></code></bdi> attribute and SVG in the <bdi lang="zxx" dir="ltr"><code><nowiki>srcset</nowiki></code></bdi> attribute.
* The new [[wikitech:Parsoid|Parsoid]] parser [[mw:Special:MyLanguage/Parsoid/Parser_Unification/Updates|continues to be deployed to additional wikis]], making it easier to introduce new reading and editing features. It was enabled on French Wikipedia, bringing total progress to covering 78.9% of Wikipedia page views. Rollout to English Wikipedia desktop will progress through this week.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.10|MediaWiki]]
'''In depth'''
* The Wikimedia Hackathon 2026 [[diffblog:2026/06/29/wikimedia-hackathon-2026-building-collaborating-and-shaping-the-future-together/|recap blog post]] is now live. It highlights the projects, sessions, and social activities from this year’s event, and shares initial plans for the 2027 Wikimedia Hackathon.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/28|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W28"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೧೯:೨೬, ೬ ಜುಲಾಯಿ ೨೦೨೬ (IST)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30773578 -->
== <span lang="en" dir="ltr">Tech News: 2026-29</span> ==
<div lang="en" dir="ltr">
<section begin="technews-2026-W29"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/29|Translations]] are available.
'''Updates for editors'''
* [[mw:Special:MyLanguage/Growth/Revise_Tone|Revise Tone]] helps newcomers identify passages in Wikipedia articles that may contain non-encyclopedic language and encourages them to consider revising the tone. The feature was [[w:en:A/B_testing|A/B tested]] on the Arabic, English, French, and Portuguese Wikipedias, where newcomer task completion rates [[mw:Special:MyLanguage/Growth/Revise_Tone#Experiment_Results|increased by 38.7%]] compared to the default Copyedit task, with no decrease in edit quality. The test ended on July 9, and the feature is now available for everyone on these wikis, configurable via Community Configuration. [[phab:T426364|The plan]] is to release Revise Tone to more wikis.
* The community configuration that allows [[mw:Special:MyLanguage/Help:Growth/Mentorship#Automated mentor list cleanup|automatic removal of inactive mentors]] based on configurable criteria will be enabled on Thursday 16, [[mw:Special:MyLanguage/Growth/Deployment|on some wikis]] to keep mentor lists up to date. Mentors are experienced contributors who opt in to help new users on-wiki through the [[mw:Special:MyLanguage/Growth/Feature summary|Growth Features]]. Administrators can now prepare the settings via [[w:Special:CommunityConfiguration/Mentorship|Special:CommunityConfiguration/Mentorship]]; they will take effect starting Thursday.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:38}} community-submitted {{PLURAL:38|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where some users of the Wikipedia Android app were logged out immediately after signing in, preventing them from staying logged in and editing pages, has now been fixed. [https://phabricator.wikimedia.org/T316916]
'''Updates for technical contributors'''
* Editing a page via user scripts or gadgets was causing watchlist labels that the user had assigned to that page to reset. This has now been fixed. [https://phabricator.wikimedia.org/T423778]
* To work around a Safari bug (see [[phab:T425211]]), on Parsoid-enabled wikis, wikilink hrefs now use absolute urls instead of protocol-relative urls. REST API output remains unchanged and continue to use protocol-relative urls. Gadgets, user scripts, bots, and CSS might need to be adapted if they relied on the presence of protocol-relative urls in wikilink hrefs. [https://phabricator.wikimedia.org/T431358]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.11|MediaWiki]]
'''In depth'''
* The Wikimedia Foundation’s Experiment Platform Team has published a blog post reflecting on its first year of structured experimentation. It highlights successful experiments such as Paste Check, Reference Check, and Tone Check, which improved editing outcomes and have been rolled out to more users, as well as experiments that did not lead to product changes. [[diffblog:2026/07/07/moving-the-needle-how-we-test-new-ideas-across-wikimedia-projects|Read more]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/29|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W29"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೨೧:೪೧, ೧೩ ಜುಲಾಯಿ ೨೦೨೬ (IST)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30804401 -->
== <span lang="en" dir="ltr">Tech News: 2026-30</span> ==
<div lang="en" dir="ltr">
<section begin="technews-2026-W30"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/30|Translations]] are available.
'''Updates for editors'''
* The [[mw:Special:MyLanguage/Reader/Reader Experience|Reader Experience team]] has incorporated community feedback around the placement of watchstar and watchlist buttons for the [[mw:Special:MyLanguage/Readers/Reader Experience/WE3.3.4 Reading lists|Reading Lists beta feature]], which would allow for saving articles for later reading – a [[m:Special:MyLanguage/Community Wishlist/W102|wishlist item]] to bring the functionality to web. Editors are invited to enable the beta feature to test it out and [[phab:T426453|share their thoughts]].
* [[mw:Special:MyLanguage/VisualEditor/Suggestion Mode|Suggestion Mode]] offers edit suggestions within the VisualEditor for improving Wikipedia articles. [[Special:EditChecks|All suggestions]] are [[mw:Special:MyLanguage/Help:Suggestion mode#For administrators – local customization|community-configurable]]. The [[mw:Special:MyLanguage/Edit check/TextMatch|TextMatch]] feature is a way for volunteers to create custom local suggestions. The feature searches in articles for strings of text, and now includes support for regular expressions. This gives volunteers greater precision and flexibility over the kinds of local suggestions they can create. Note: Suggestions [[mw:Special:MyLanguage/Edit check/Configuration#:~:text=maximumEditcount|can be targeted]] based on the edit count of the person editing as well as other aspects of the page. You can [[mw:Special:MyLanguage/Help:Suggestion mode#Create custom local types of Suggestions|find examples from other communities]] for inspiration, including TextMatches that detect: typos, grammar-errors, potential advertisements, clichés, incorrect dash or hyphen usage, non-specific time keywords, outdated names, and more. Any [[mw:Special:MyLanguage/Talk:VisualEditor/Suggestion Mode|feedback]] is appreciated.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:27}} community-submitted {{PLURAL:27|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where the SVG Translate tool could use an outdated version of a file, causing existing translations to be overwritten when new ones were uploaded, has now [[phab:T430577|been fixed]]. Overall, in the last quarter from April – June 2026 about 337 community tasks were resolved by the Wikimedia Foundation.
'''Updates for technical contributors'''
* On Parsoid-enabled wikis, Parsoid now renders a maximum of 1,250 images per page. A new tracking category, "media-limit-reached", will be soon made available to identify pages where this limit is reached, making it easier to find content whose media output may have been restricted during rendering. See [[phab:T430854]] for more information and to provide feedback.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.12|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/30|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W30"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೧೧:೧೬, ೨೧ ಜುಲಾಯಿ ೨೦೨೬ (IST)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30836091 -->
7b672zuztnco31zzdu9raytdv736hnf
ಮೋಡ್ಯೂಲ್:Params
828
18080
363096
362860
2026-07-23T13:48:12Z
Grufo
6930
Update from [[d:Special:GoToLinkedPage/mediawikiwiki/Q122696746|master]] using [[mw:Synchronizer| #Synchronizer]]
363096
Scribunto
text/plain
require[[strict]]
--- ---
--- PRIVATE ENVIRONMENT ---
--- ________________________________ ---
--- ---
--[[ Abstract utilities ]]--
----------------------------
-- Helper function for `string.gsub()` (for managing zero-padded numbers)
local function zero_padded (str)
return ('%03d%s'):format(#str, str)
end
-- Helper function for `table.sort()` (for natural sorting)
local function natural_sort (var1, var2)
return var1:gsub('%d+', zero_padded) < var2:gsub('%d+', zero_padded)
end
-- Return a copy or a reference to a table
local function copy_or_ref_table (src, refonly)
if refonly then return src end
local newtab = {}
for key, val in pairs(src) do newtab[key] = val end
return newtab
end
-- Copy at most N items (of all kinds) from `src` to `dest` and return `dest`
local function copy_table_maxn (dest, src, len)
local idx = 1
for key, val in pairs(src) do
dest[key], idx = val, idx + 1
if idx > len then break end
end
return dest
end
-- Remove some numeric elements from a table, shifting everything to the left
local function remove_numeric_keys (tbl, idx, len)
local cache, tmp = {}, idx + len - 1
for key, val in pairs(tbl) do
if type(key) == 'number' and key >= idx then
if key > tmp then cache[key - len] = val end
tbl[key] = nil
end
end
for key, val in pairs(cache) do tbl[key] = val end
end
-- Make a reduced copy of a table (shifting in both directions if necessary)
local function copy_table_reduced (tbl, idx, len)
local ret, tmp = {}, idx + len - 1
if idx > 0 then
for key, val in pairs(tbl) do
if type(key) ~= 'number' or key < idx then
ret[key] = val
elseif key > tmp then ret[key - len] = val end
end
elseif tmp > 0 then
local nshift = 1 - idx
for key, val in pairs(tbl) do
if type(key) ~= 'number' then ret[key] = val
elseif key > tmp then ret[key - tmp] = val
elseif key < idx then ret[key + nshift] = val end
end
else
for key, val in pairs(tbl) do
if type(key) ~= 'number' or key > tmp then
ret[key] = val
elseif key < idx then ret[key + len] = val end
end
end
return ret
end
-- Make an expanded copy of a table (shifting in both directions if necessary)
local function copy_table_expanded (tbl, idx, len)
local ret, tmp = {}, idx + len - 1
if idx > 0 then
for key, val in pairs(tbl) do
if type(key) ~= 'number' or key < idx then
ret[key] = val
else ret[key + len] = val end
end
elseif tmp > 0 then
local nshift = idx - 1
for key, val in pairs(tbl) do
if type(key) ~= 'number' then ret[key] = val
elseif key > 0 then ret[key + tmp] = val
elseif key < 1 then ret[key + nshift] = val end
end
else
for key, val in pairs(tbl) do
if type(key) ~= 'number' or key > tmp then
ret[key] = val
else ret[key - len] = val end
end
end
return ret
end
-- Given a table, create two new tables containing the sorted list of keys
local function get_key_list_sorted (tbl, sort_fn)
local nums, words, nn, nw = {}, {}, 0, 0
for key, val in pairs(tbl) do
if type(key) == 'number' then
nn = nn + 1
nums[nn] = key
else
nw = nw + 1
words[nw] = key
end
end
table.sort(nums)
table.sort(words, sort_fn)
return nums, words, nn, nw
end
-- Parse a parameter name string and return it as a string or a number
local function get_parameter_name (par_str)
local ret = par_str:match'^%s*(.-)%s*$'
if ret ~= '0' and ret:find'^%-?[1-9]%d*$' == nil then return ret end
return tonumber(ret)
end
-- Move a key from a table to another, but only if under a different name and
-- always parsing numeric strings as numbers
local function steal_if_renamed (val, src, skey, dest, dkey)
local realkey = get_parameter_name(dkey)
if skey ~= realkey then dest[realkey], src[skey] = val, nil end
end
--[[ Public strings ]]--
------------------------
-- Special match keywords (functions and modifiers MUST avoid these names)
local mkeywords = {
['or'] = 0,
pattern = 1,
plain = 2,
strict = 3
}
-- Sort functions (functions and modifiers MUST avoid these names)
local sortfunctions = {
alphabetically = false,
naturally = natural_sort
}
-- Callback styles for the `mapping_*` and `renaming_*` class of modifiers
-- (functions and modifiers MUST avoid these names)
--[[
Meanings of the columns:
col[1] = Loop type (0-3)
col[2] = Number of module arguments that the style requires (1-3)
col[3] = Minimum number of sequential parameters passed to the callback
col[4] = Name of the callback parameter where to place each parameter name
col[5] = Name of the callback parameter where to place each parameter value
col[6] = Argument in the modifier's invocation that will override `col[4]`
col[7] = Argument in the modifier's invocation that will override `col[5]`
A value of `-1` indicates that no meaningful value is stored (i.e. `nil`)
]]--
local mapping_styles = {
names_and_values = { 3, 2, 2, 1, 2, -1, -1 },
values_and_names = { 3, 2, 2, 2, 1, -1, -1 },
values_only = { 1, 2, 1, -1, 1, -1, -1 },
names_only = { 2, 2, 1, 1, -1, -1, -1 },
names_and_values_as = { 3, 4, 0, -1, -1, 2, 3 },
names_only_as = { 2, 3, 0, -1, -1, 2, -1 },
values_only_as = { 1, 3, 0, -1, -1, -1, 2 },
blindly = { 0, 2, 0, -1, -1, -1, -1 }
}
-- Memory slots (functions and modifiers MUST avoid these names)
local memoryslots = {
h = 'header',
f = 'footer',
i = 'itersep',
l = 'lastsep',
n = 'ifngiven',
p = 'pairsep',
s = 'oxfordsep'
}
-- Possible trimming modes for the `parsing` modifier
local trim_parse_opts = {
trim_none = { false, false },
trim_positional = { false, true },
trim_named = { true, false },
trim_all = { true, true }
}
-- Possible string modes for the iteration separator in the `parsing` and
-- `reinterpreting` modifiers
local isep_parse_opts = {
splitter_pattern = false,
splitter_string = true
}
-- Possible string modes for the key-value separator in the `parsing` and
-- `reinterpreting` modifiers
local psep_parse_opts = {
setter_pattern = false,
setter_string = true
}
-- Possible position references for the `splicing` modifier
local position_references = {
add_nothing = 0,
add_smallest_number = 1,
add_last_of_sequence = 2,
add_largest_number = 3
}
-- Possible modes for the `reassigning` modifier
local a_modes = {
transfer = 0,
clone = 1,
rename = 2,
copy = 3,
sacrifice = 4,
provide = 5,
spare = 7
}
-- Functions and modifiers MUST avoid these names too: `here`, `in_substack`,
-- `let`, `expose`, `use`, `with_flushed_glue`, `without_flushed_glue`
-- `without_sorting`
--[[ Private constants ]]--
---------------------------
-- Hard-coded name of the module (to avoid going through `frame:getTitle()`)
local modulename = 'Module:Params'
-- The functions listed here declare that they don't need the `frame.args`
-- metatable to be copied into a regular table; if they are modifiers they also
-- guarantee that they will make their own (modified) copy available
local refpipe = {
call_for_each_group = true,
--coins = true,
count = true,
evaluating = true,
for_each = true,
list = true,
list_values = true,
list_maybe_with_names = true,
value_of = true
}
-- The functions listed here declare that they don't need the
-- `frame:getParent().args` metatable to be copied into a regular table; if
-- they are modifiers they also guarantee that they will make their own
-- (modified) copy available
local refparams = {
call_for_each_group = true,
combining = true,
combining_by_calling = true,
combining_values = true,
concat_and_call = true,
concat_and_invoke = true,
concat_and_magic = true,
count = true,
grouping_by_calling = true,
mixing_names_and_values = true,
keeping_at_most = true,
renaming_by_mixing = true,
renaming_to_sequence = true,
renaming_to_uppercase = true,
renaming_to_lowercase = true,
--renaming_to_values = true,
shifting = true,
splicing = true,
--swapping_names_and_values = true,
value_of = true,
with_name_matching = true
}
-- Maximum number of numeric parameters that can be filled, if missing (we
-- chose an arbitrary number for this constant; you can discuss about its
-- optimal value at Module talk:Params)
local maxfill = 1024
-- The private table of functions
local library = {}
-- Functions and modifiers that can only be invoked in first position
local static_iface = {}
--[[ Private functions ]]--
---------------------------
-- Create a new context
local function context_new (child_frame)
local main_frame = child_frame:getParent()
return {
frame = main_frame,
opipe = child_frame.args,
oparams = main_frame.args,
firstposonly = static_iface,
iterfunc = pairs,
sorttype = 0,
n_parents = 0,
n_children = 0,
n_available = maxfill
}
end
-- Move to the next action within the user-given list
local function context_iterate (ctx, n_forward)
local nextfn
if ctx.pipe[n_forward] ~= nil then
nextfn = ctx.pipe[n_forward]:match'^%s*(.*%S)'
end
if nextfn == nil then error(modulename ..
': You must specify a function to call', 0) end
if library[nextfn] == nil then
if ctx.firstposonly[nextfn] == nil then error(modulename ..
': The function ‘' .. nextfn .. '’ does not exist', 0)
else error(modulename .. ': The ‘' .. nextfn ..
'’ directive can only appear in first position', 0)
end
end
remove_numeric_keys(ctx.pipe, 1, n_forward)
return library[nextfn]
end
-- Main loop
local function main_loop (ctx, start_with)
local fn = start_with
repeat fn = fn(ctx) until not fn
if ctx.n_parents > 0 then error(modulename ..
': One or more ‘merging_substack’ directives are missing', 0) end
if ctx.n_children > 0 then error(modulename ..
', For some of the snapshots either the ‘flushing’ directive is missing or a group has not been properly closed with ‘merging_substack’', 0) end
end
-- Load a `setting`-like directive string into the `dest` table
local function set_strings_from_opts (dest, opts, start_from)
local cmd
if opts[start_from] == nil then return start_from - 1 end
cmd = opts[start_from]:gsub('%s+', ''):gsub('/+', '/')
:match'^/*(.*[^/])'
if cmd == nil then return start_from end
local vname, chr
local amap, sep, argc = {}, string.byte('/'), start_from + 1
for idx = 1, #cmd do
chr = cmd:byte(idx)
if chr == sep then
for key, val in ipairs(amap) do
dest[val], amap[key] = opts[argc], nil
end
argc = argc + 1
else
vname = memoryslots[string.char(chr)]
if vname == nil then error(modulename ..
', ‘setting’: Unknown slot ‘' ..
string.char(chr) .. '’', 0) end
table.insert(amap, vname)
end
end
for key, val in ipairs(amap) do dest[val] = opts[argc] end
return argc
end
-- Add a new stack of parameters to `ctx.children`
local function new_substack (ctx)
local currsnap, newparams = ctx.n_children + 1, {}
if ctx.children == nil then ctx.children = { newparams }
else ctx.children[currsnap] = newparams end
ctx.n_children = currsnap
return newparams
end
-- Parse a raw argument containing a `sortfunctions` directive, or
-- `'without_sorting'`, or `nil`
local function load_sort_opt (raw_arg)
if raw_arg == nil then return nil, 1, false end
local trarg = raw_arg:match'^%s*(.-)%s*$'
if trarg == 'without_sorting' then return nil, 2, false, trarg end
local tmp = sortfunctions[trarg]
if tmp == nil then return nil, 1, false, trarg end
return tmp or nil, 2, true, trarg
end
-- Parse optional user arguments of type `...|[let/use]|[...]|[let/use]|[...]|
-- [number of additional parameters]|[parameter 1]|[parameter 2]|[...]`
local function load_child_opts (src, start_from, append_after, params)
local tnamed, tmp1, tmp2
local pin, tbl, mem = start_from, {}, {}
while src[pin] ~= nil and src[pin + 1] ~= nil do
tmp1 = src[pin]:match'^%s*(.*%S)'
if tmp1 == 'let' and src[pin + 2] ~= nil then
tmp1 = get_parameter_name(src[pin + 1])
mem[tmp1], tbl[tmp1], pin = nil, src[pin + 2], pin + 3
--[[
elseif tmp1 == 'expose' then
tmp1 = get_parameter_name(src[pin + 1])
tmp2 = params[tmp1]
mem[tmp1], tbl[tmp1], pin = tmp2, tmp2, pin + 2
]]--
elseif tmp1 == 'use' and src[pin + 2] ~= nil then
tmp1 = get_parameter_name(src[pin + 2])
tmp2 = params[tmp1]
mem[tmp1], tbl[get_parameter_name(src[pin + 1])], pin =
tmp2, tmp2, pin + 3
else break end
end
local tnew = copy_or_ref_table(params, next(mem) == nil)
for key in pairs(mem) do tnew[key] = nil end
if pin ~= start_from then tnamed, tbl = tbl, {} end
tmp1 = tonumber(src[pin])
if tmp1 ~= nil and math.floor(tmp1) == tmp1 then
if tmp1 < 0 then tmp1 = -1 end
tmp2 = append_after - pin
for idx = pin + 1, pin + tmp1 do tbl[idx + tmp2] = src[idx] end
pin = pin + tmp1 + 1
end
if tnamed ~= nil then
for key, val in pairs(tnamed) do tbl[key] = val end
end
return tbl, pin, tnew, mem
end
-- Load the optional arguments of some of the `mapping_*` and `renaming_*`
-- class of modifiers
local function load_callback_opts (src, n_skip, default_style, params)
local style, shf
local tmp = src[n_skip + 1]
if tmp ~= nil then style = mapping_styles[tmp:match'^%s*(.-)%s*$'] end
if style == nil then style, shf = default_style, n_skip - 1
else shf = n_skip end
local n_exist, karg, varg = style[3], style[4], style[5]
tmp = style[6]
if tmp > -1 then
karg = src[tmp + shf]:match'^%s*(.-)%s*$'
if karg == '0' or karg:find'^%-?[1-9]%d*$' ~= nil then
karg = tonumber(karg)
n_exist = math.max(n_exist, karg)
end
end
tmp = style[7]
if tmp > -1 then
varg = src[tmp + shf]:match'^%s*(.-)%s*$'
if varg == '0' or varg:find'^%-?[1-9]%d*$' ~= nil then
varg = tonumber(varg)
n_exist = math.max(n_exist, varg)
end
end
local dest, argc, tnew, mem = load_child_opts(src, style[2] + shf,
n_exist, params)
tmp = style[1]
if (tmp == 3 or tmp == 2) and dest[karg] ~= nil then
tmp = tmp - 2 end
if (tmp == 3 or tmp == 1) and dest[varg] ~= nil then
tmp = tmp - 1 end
return dest, argc, tmp, karg, varg, tnew, mem
end
-- Parse the arguments of some of the `mapping_*` and `renaming_*` class of
-- modifiers
local function load_replace_args (opts, whoami)
if opts[1] == nil then error(modulename ..
', ‘' .. whoami .. '’: No pattern string was given', 0) end
if opts[2] == nil then error(modulename ..
', ‘' .. whoami .. '’: No replacement string was given', 0) end
local ptn, repl, nmax, argc = opts[1], opts[2], tonumber(opts[3]), 3
if nmax ~= nil or (opts[3] or ''):match'^%s*$' ~= nil then argc = 4 end
local flg = opts[argc]
if flg ~= nil then flg = mkeywords[flg:match'^%s*(.-)%s*$'] end
if flg == 0 then flg = nil elseif flg ~= nil then argc = argc + 1 end
return ptn, repl, nmax, flg, argc, (nmax ~= nil and nmax < 1) or
(flg == 3 and ptn == repl)
end
-- Parse the arguments of the `with_*_matching` class of modifiers
local function load_pattern_args (opts, whoami)
local keyw
local ptns, state, nptns, cnt = {}, 0, 0, 1
for _, val in ipairs(opts) do
if state == 0 then
nptns, state = nptns + 1, -1
ptns[nptns] = { val, false, false }
else
keyw = val:match'^%s*(.*%S)'
if keyw == nil or mkeywords[keyw] == nil or (
state > 0 and mkeywords[keyw] > 0
) then break
else
state = mkeywords[keyw]
if state > 1 then ptns[nptns][2] = true end
if state == 3 then ptns[nptns][3] = true end
end
end
cnt = cnt + 1
end
if state == 0 then error(modulename .. ', ‘' .. whoami ..
'’: No pattern was given', 0) end
return ptns, nptns, cnt
end
-- Load the optional arguments of the `parsing`, `reinterpreting` and
-- `evaluating` modifiers
local function load_parse_opts (opts, start_from, isp, psp)
local tmp
local optslots, noptslots, argc, trimn, trimu, iplain, pplain =
{ true, true, true }, 3, start_from, true, false, true, true
repeat
noptslots, tmp = noptslots - 1, opts[argc]
if tmp == nil then break end
tmp = tmp:match'^%s*(.-)%s*$'
if optslots[1] ~= nil and trim_parse_opts[tmp] ~= nil then
tmp = trim_parse_opts[tmp]
trimn, trimu, optslots[1] = tmp[1], tmp[2], nil
elseif optslots[2] ~= nil and isep_parse_opts[tmp] ~= nil then
argc = argc + 1
iplain, isp, optslots[2] = isep_parse_opts[tmp],
opts[argc], nil
elseif optslots[3] ~= nil and psep_parse_opts[tmp] ~= nil then
argc = argc + 1
pplain, psp, optslots[3] = psep_parse_opts[tmp],
opts[argc], nil
else break end
argc = argc + 1
until noptslots < 1
return isp, iplain, psp, pplain, trimn, trimu, argc
end
-- Map parameters' values using a custom callback and a referenced table
local value_maps = {
[0] = function (tbl, margs, karg, varg, fn)
for key in pairs(tbl) do tbl[key] = fn() end
end,
[1] = function (tbl, margs, karg, varg, fn)
for key, val in pairs(tbl) do
margs[varg] = val
tbl[key] = fn()
end
end,
[2] = function (tbl, margs, karg, varg, fn)
for key in pairs(tbl) do
margs[karg] = key
tbl[key] = fn()
end
end,
[3] = function (tbl, margs, karg, varg, fn)
for key, val in pairs(tbl) do
margs[karg], margs[varg] = key, val
tbl[key] = fn()
end
end
}
-- Private table for `map_names()`
local name_thieves = {
[0] = function (cache, tbl, rargs, karg, varg, fn)
for key, val in pairs(tbl) do
steal_if_renamed(val, tbl, key, cache, fn())
end
end,
[1] = function (cache, tbl, rargs, karg, varg, fn)
for key, val in pairs(tbl) do
rargs[varg] = val
steal_if_renamed(val, tbl, key, cache, fn())
end
end,
[2] = function (cache, tbl, rargs, karg, varg, fn)
for key, val in pairs(tbl) do
rargs[karg] = key
steal_if_renamed(val, tbl, key, cache, fn())
end
end,
[3] = function (cache, tbl, rargs, karg, varg, fn)
for key, val in pairs(tbl) do
rargs[karg], rargs[varg] = key, val
steal_if_renamed(val, tbl, key, cache, fn())
end
end
}
-- Map parameters' names using a custom callback and a referenced table
local function map_names (tbl, rargs, karg, varg, looptype, fn)
local cache = {}
name_thieves[looptype](cache, tbl, rargs, karg, varg, fn)
for key, val in pairs(cache) do tbl[key] = val end
end
-- Return a new table that contains `src` regrouped according to the numeric
-- suffixes in its keys
local function make_groups (src)
-- NOTE: `src` might be the original metatable!
local prefix, gid
local groups = {}
for key, val in pairs(src) do
-- `key` must only be a string or a number...
if type(key) == 'string' then
prefix, gid = key:match'^%s*(.-)%s*(%-?%d*)%s*$'
gid = tonumber(gid) or ''
else
prefix, gid = '', key
end
if groups[gid] == nil then groups[gid] = {} end
if prefix == '0' or prefix:find'^%-?[1-9]%d*$' ~= nil then
prefix = tonumber(prefix)
if prefix < 1 then prefix = prefix - 1 end
end
groups[gid][prefix] = val
end
return groups
end
-- Split into parts a string containing the `$#` and `$@` placeholders and
-- return the information as a skeleton table, a canvas table and a length
local function parse_placeholder_string (target)
local idx, s_pos, skel, canvas = 1, 1, {}, {}
local e_pos = string.find(target, '%$[@#]', 1, false)
while e_pos ~= nil do
canvas[idx] = target:sub(s_pos, e_pos - 1)
skel[idx + 1] = target:sub(e_pos, e_pos + 1) == '$@'
idx = idx + 2
s_pos = e_pos + 2
e_pos = string.find(target, '%$[@#]', s_pos, false)
end
if (s_pos > target:len()) then idx = idx - 1
else canvas[idx] = target:sub(s_pos) end
return skel, canvas, idx
end
-- Populate a table by parsing a parameter string (heavy lifting for `parsing`,
-- `reinterpreting` and `evaluating`)
local function parse_parameter_string (tbl, str, isp, ipl, psp, ppl, trn, tru)
local key, val, spos1, spos2, pos1, pos2
local pos3, idx, lenplone = 0, 1, #str + 1
if isp == nil or isp == '' then
if psp == nil or psp == '' then
if tru then tbl[idx] = str:match'^%s*(.-)%s*$'
else tbl[idx] = str end
return idx
end
spos1, spos2 = str:find(psp, 1, ppl)
if spos1 == nil then
key = idx
if tru then val = str:match'^%s*(.-)%s*$'
else val = str end
idx = idx + 1
else
key = get_parameter_name(str:sub(1, spos1 - 1))
val = str:sub(spos2 + 1)
if trn then val = val:match'^%s*(.-)%s*$' end
end
tbl[key] = val
return idx
end
if psp == nil or psp == '' then
repeat
pos1 = pos3 + 1
pos2, pos3 = str:find(isp, pos1, ipl)
val = str:sub(pos1, (pos2 or lenplone) - 1)
if tru then val = val:match'^%s*(.-)%s*$' end
tbl[idx], idx = val, idx + 1
until pos2 == nil
return idx
end
repeat
pos1 = pos3 + 1
pos2, pos3 = str:find(isp, pos1, ipl)
val = str:sub(pos1, (pos2 or lenplone) - 1)
spos1, spos2 = val:find(psp, 1, ppl)
if spos1 == nil then
key = idx
if tru then val = val:match'^%s*(.-)%s*$' end
idx = idx + 1
else
key = get_parameter_name(val:sub(1, spos1 - 1))
val = val:sub(spos2 + 1)
if trn then val = val:match'^%s*(.-)%s*$' end
end
tbl[key] = val
until pos2 == nil
return idx
end
-- Heavy lifting for `snapshotting` and `remembering`
local function make_child (ctx, src, whoami)
local len = tonumber(ctx.pipe[1])
if len == nil or len == 0 then
local stack = new_substack(ctx)
for key, val in pairs(src) do stack[key] = val end
return len == nil and 1 or 2
end
if len < 0 or math.floor(len) ~= len then error(modulename ..
', ‘' .. whoami .. '’: The number of parameters to copy must be an integer greater than zero', 0) end
copy_table_maxn(new_substack(ctx), src, len)
return 2
end
-- Heavy lifting for `setting_by_flushing`, `combining` and `combining_values`
local function set_strings_from_substack (ctx, dest, whoami)
if ctx.n_children < 1 then error(modulename ..
', ‘' .. whoami .. '’: There are no substacks to flush', 0) end
local currsnap = ctx.n_children
local stack = ctx.children[currsnap]
for key, val in pairs(memoryslots) do
if stack[key] ~= nil then dest[val] = stack[key] end
end
ctx.children[currsnap], ctx.n_children = nil, currsnap - 1
end
-- Heavy lifting for `combining` and `combining_values`
local function combine_parameters (ctx, keyval_fn, whoami)
-- NOTE: `ctx.params` might be the original metatable! This function
-- MUST create a copy of it before returning
local opts = ctx.pipe
if ctx.pipe[1] == nil then error(modulename ..
', ‘' .. whoami .. '’: No parameter name was provided', 0) end
local argc
local tbl, vars = ctx.params, {}
local sortfn, varsarg0, do_sort, tmp = load_sort_opt(opts[2])
if varsarg0 == 2 then tmp = opts[3] and opts[3]:match'^%s*(.-)%s*$' end
if tmp == 'with_flushed_glue' then
varsarg0 = varsarg0 + 1
argc = set_strings_from_opts(vars, opts, varsarg0 + 1)
set_strings_from_substack(ctx, vars, whoami)
else
if tmp == 'without_flushed_glue' then varsarg0 = varsarg0 + 1 end
argc = set_strings_from_opts(vars, opts, varsarg0 + 1)
end
if argc < varsarg0 then error(modulename ..
', ‘' .. whoami .. '’: No setting directive was given', 0) end
if next(tbl) == nil then
if vars.ifngiven ~= nil then ctx.params =
{ [get_parameter_name(ctx.pipe[1])] = vars.ifngiven }
elseif tbl == ctx.oparams then ctx.params = {} end
return argc
end
local cache, len
if do_sort then
local words
cache, words, len, tmp = get_key_list_sorted(tbl, sortfn)
for idx = 1, tmp do cache[len + idx] = words[idx] end
len = len + tmp
else
len, cache = 0, {}
for key in pairs(tbl) do
len = len + 1
cache[len] = key
end
end
local pmap, nss, kvs, pps = {}, 0, vars.pairsep or '', vars.itersep or ''
for idx = 1, len do
tmp, pmap[nss + 1] = cache[idx], pps
pmap[nss + 2] = keyval_fn(tmp, tbl[tmp], kvs)
nss = nss + 2
end
tmp = vars.oxfordsep or vars.lastsep
if tmp ~= nil and nss > 4 then pmap[nss - 1] = tmp
elseif nss > 2 and vars.lastsep ~= nil then
pmap[nss - 1] = vars.lastsep
end
pmap[1] = vars.header or ''
if vars.footer ~= nil then pmap[nss + 1] = vars.footer end
ctx.params = { [get_parameter_name(ctx.pipe[1])] = table.concat(pmap) }
return argc
end
-- Concatenate the numeric keys from the table of parameters to the numeric
-- keys from the table of options; non-numeric keys from the table of options
-- will prevail over colliding non-numeric keys from the table of parameters
local function concat_params (ctx)
local retval, tbl, nmax = {}, ctx.params, table.maxn(ctx.pipe)
if ctx.subset == 1 then
-- We need only the sequence
for key, val in ipairs(tbl) do retval[key + nmax] = val end
else
if ctx.subset == -1 then
for key in ipairs(tbl) do tbl[key] = nil end
end
for key, val in pairs(tbl) do
if type(key) == 'number' and key > 0 then
retval[key + nmax] = val
else retval[key] = val end
end
end
for key, val in pairs(ctx.pipe) do retval[key] = val end
return retval
end
-- Flush the parameters by calling a custom function for each value (after this
-- function has been invoked `ctx.params` will be no longer usable)
local function flush_params (ctx, fn)
local tbl = ctx.params
if ctx.subset == 1 then
for key, val in ipairs(tbl) do fn(key, val) end
return
end
if ctx.subset == -1 then
for key, val in ipairs(tbl) do tbl[key] = nil end
end
if ctx.sorttype > 0 then
local nums, words, nn, nw = get_key_list_sorted(tbl, natural_sort)
if ctx.sorttype == 2 then
for idx = 1, nw do fn(words[idx], tbl[words[idx]]) end
for idx = 1, nn do fn(nums[idx], tbl[nums[idx]]) end
return
end
for idx = 1, nn do fn(nums[idx], tbl[nums[idx]]) end
for idx = 1, nw do fn(words[idx], tbl[words[idx]]) end
return
end
if ctx.subset ~= -1 then
for key, val in ipairs(tbl) do
fn(key, val)
tbl[key] = nil
end
end
for key, val in pairs(tbl) do fn(key, val) end
end
-- Flush the parameters by calling one of two custom functions for each value
-- (after this function has been invoked `ctx.params` will be no longer usable)
local function mixed_flush_params (ctx, fn_seq, fn_oth)
if ctx.subset == 1 then
for key, val in ipairs(ctx.params) do fn_seq(key, val) end
return
end
if ctx.subset == -1 then
flush_params(ctx, fn_oth)
return
end
local tbl = ctx.params
if ctx.sorttype > 0 then
local nums, words, nn, nw = get_key_list_sorted(tbl, natural_sort)
local sequence = {}
for key, val in ipairs(tbl) do sequence[key] = val end
if ctx.sorttype == 2 then
for idx = 1, nw do fn_oth(words[idx], tbl[words[idx]]) end
end
for idx = 1, nn do
if sequence[nums[idx]] then fn_seq(nums[idx], sequence[nums[idx]])
else fn_oth(nums[idx], tbl[nums[idx]]) end
end
if ctx.sorttype ~= 2 then
for idx = 1, nw do fn_oth(words[idx], tbl[words[idx]]) end
end
return
end
for key, val in ipairs(tbl) do
fn_seq(key, val)
tbl[key] = nil
end
for key, val in pairs(tbl) do fn_oth(key, val) end
end
-- Finalize and return a concatenated list
local function finalize_and_return_concatenated_list (ctx, lst, len, modsize)
if len > 0 then
local tmp = ctx.oxfordsep or ctx.lastsep
if tmp ~= nil and len > modsize * 2 then
lst[len - modsize + 1] = tmp
elseif len > modsize and ctx.lastsep ~= nil then
lst[len - modsize + 1] = ctx.lastsep
end
lst[1] = ctx.header or ''
if ctx.footer ~= nil then lst[len + 1] = ctx.footer end
ctx.text = table.concat(lst)
else ctx.text = ctx.ifngiven or '' end
end
--- ---
--- PUBLIC ENVIRONMENT ---
--- ________________________________ ---
--- ---
--[[ Modifiers ]]--
-------------------
-- Syntax: #invoke:params|sequential|pipe to
library.sequential = function (ctx)
if ctx.subset == 1 then error(modulename ..
': The ‘sequential’ directive has been provided more than once', 0) end
if ctx.subset == -1 then error(modulename ..
': The two directives ‘non-sequential’ and ‘sequential’ are in contradiction with each other', 0) end
if ctx.sorttype > 0 then error(modulename ..
': The ‘all_sorted’ and ‘reassorted’ directives are redundant when followed by ‘sequential’', 0) end
ctx.iterfunc, ctx.subset = ipairs, 1
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|non-sequential|pipe to
library['non-sequential'] = function (ctx)
if ctx.subset == -1 then error(modulename ..
': The ‘non-sequential’ directive has been provided more than once', 0) end
if ctx.subset == 1 then error(modulename ..
': The two directives ‘sequential’ and ‘non-sequential’ are in contradiction with each other', 0) end
ctx.iterfunc, ctx.subset = pairs, -1
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|all_sorted|pipe to
library.all_sorted = function (ctx)
if ctx.sorttype == 1 then error(modulename ..
': The ‘all_sorted’ directive has been provided more than once', 0) end
if ctx.subset == 1 then error(modulename ..
': The ‘all_sorted’ directive is redundant after ‘sequential’', 0) end
if ctx.sorttype == 2 then error(modulename ..
': The two directives ‘reassorted’ and ‘sequential’ are in contradiction with each other', 0) end
ctx.sorttype = 1
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|reassorted|pipe to
library.reassorted = function (ctx)
if ctx.sorttype == 2 then error(modulename ..
': The ‘reassorted’ directive has been provided more than once', 0) end
if ctx.subset == 1 then error(modulename ..
': The ‘reassorted’ directive is redundant after ‘sequential’', 0) end
if ctx.sorttype == 1 then error(modulename ..
': The two directives ‘sequential’ and ‘reassorted’ are in contradiction with each other', 0) end
ctx.sorttype = 2
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|setting|directives|...|pipe to
library.setting = function (ctx)
local argc = set_strings_from_opts(ctx, ctx.pipe, 1)
if argc < 2 then error(modulename ..
', ‘setting’: No directive was given', 0) end
return context_iterate(ctx, argc + 1)
end
-- Syntax: #invoke:params|scoring|new parameter name|[container]|pipe to
library.scoring = function (ctx)
if ctx.pipe[1] == nil then error(modulename ..
', ‘scoring’: No parameter name was provided', 0) end
local tmp
local retval, opts = 0, ctx.pipe
for _ in pairs(ctx.params) do retval = retval + 1 end
if opts[2] ~= nil then tmp = opts[2]:match'^%s*(.*%S)' end
if tmp == 'in_substack' then
new_substack(ctx)[get_parameter_name(opts[1])] = tostring(retval)
return context_iterate(ctx, 3)
end
ctx.params[get_parameter_name(opts[1])] = tostring(retval)
return context_iterate(ctx, tmp == 'here' and 3 or 2)
end
-- Syntax: #invoke:params|squeezing|pipe to
library.squeezing = function (ctx)
local store, indices, tbl, newlen = {}, {}, ctx.params, 0
for key, val in pairs(tbl) do
if type(key) == 'number' then
newlen = newlen + 1
indices[newlen], store[key], tbl[key] = key, val, nil
end
end
table.sort(indices)
for idx = 1, newlen do tbl[idx] = store[indices[idx]] end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|filling_the_gaps|pipe to
library.filling_the_gaps = function (ctx)
local newval, tbl, tmp, nmin, nmax, nnums =
ctx.pipe[1], ctx.params, {}, 1, nil, -1
if newval == nil then error(modulename ..
', ‘filling_the_gaps’: No value was provided', 0) end
for key, val in pairs(tbl) do
if type(key) == 'number' then
if nmax == nil then
if key < nmin then nmin = key end
nmax = key
elseif key > nmax then nmax = key
elseif key < nmin then nmin = key end
tmp[key], nnums = val, nnums + 1
end
end
if nmax ~= nil and nmax - nmin > nnums then
ctx.n_available = ctx.n_available + nmin + nnums - nmax
if ctx.n_available < 0 then error(modulename ..
', ‘filling_the_gaps’: It is possible to fill at most ' ..
tostring(maxfill) .. ' parameters', 0) end
for idx = nmin, nmax, 1 do tbl[idx] = newval end
for key, val in pairs(tmp) do tbl[key] = val end
end
return context_iterate(ctx, 2)
end
-- Syntax: #invoke:params|clearing|pipe to
library.clearing = function (ctx)
local tbl, numerics = ctx.params, {}
for key, val in pairs(tbl) do
if type(key) == 'number' then
numerics[key], tbl[key] = val, nil
end
end
for key, val in ipairs(numerics) do tbl[key] = val end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|cutting|left cut|right cut|pipe to
library.cutting = function (ctx)
local lcut = tonumber(ctx.pipe[1])
if lcut == nil or math.floor(lcut) ~= lcut then error(modulename ..
', ‘cutting’: Left cut must be an integer number', 0) end
local rcut = tonumber(ctx.pipe[2])
if rcut == nil or math.floor(rcut) ~= rcut then error(modulename ..
', ‘cutting’: Right cut must be an integer number', 0) end
local tbl = ctx.params
local len = #tbl
if lcut < 0 then lcut = len + lcut end
if rcut < 0 then rcut = len + rcut end
local tot = lcut + rcut
if tot > 0 then
local cache = {}
if tot >= len then
for key in ipairs(tbl) do tbl[key] = nil end
tot = len
else
for idx = len - rcut + 1, len, 1 do tbl[idx] = nil end
for idx = 1, lcut, 1 do tbl[idx] = nil end
end
for key, val in pairs(tbl) do
if type(key) == 'number' and key > 0 then
if key > len then cache[key - tot] = val
else cache[key - lcut] = val end
tbl[key] = nil
end
end
for key, val in pairs(cache) do tbl[key] = val end
end
return context_iterate(ctx, 3)
end
-- Syntax: #invoke:params|cropping|left crop|right crop|pipe to
library.cropping = function (ctx)
local lcut = tonumber(ctx.pipe[1])
if lcut == nil or math.floor(lcut) ~= lcut then error(modulename ..
', ‘cropping’: Left crop must be an integer number', 0) end
local rcut = tonumber(ctx.pipe[2])
if rcut == nil or math.floor(rcut) ~= rcut then error(modulename ..
', ‘cropping’: Right crop must be an integer number', 0) end
local tbl = ctx.params
local nmin, nmax
for key in pairs(tbl) do
if type(key) == 'number' then
if nmin == nil then nmin, nmax = key, key
elseif key > nmax then nmax = key
elseif key < nmin then nmin = key end
end
end
if nmin ~= nil then
local len = nmax - nmin + 1
if lcut < 0 then lcut = len + lcut end
if rcut < 0 then rcut = len + rcut end
if lcut + rcut - len > -1 then
for key in pairs(tbl) do
if type(key) == 'number' then tbl[key] = nil end
end
elseif lcut + rcut > 0 then
for idx = nmax - rcut + 1, nmax do tbl[idx] = nil end
for idx = nmin, nmin + lcut - 1 do tbl[idx] = nil end
local lshift = nmin + lcut - 1
if lshift > 0 then
for idx = lshift + 1, nmax, 1 do
tbl[idx - lshift], tbl[idx] =
tbl[idx], nil
end
end
end
end
return context_iterate(ctx, 3)
end
-- Syntax: #invoke:params|purging|start offset|length|pipe to
library.purging = function (ctx)
local idx = tonumber(ctx.pipe[1])
if idx == nil or math.floor(idx) ~= idx then error(modulename ..
', ‘purging’: Start offset must be an integer number', 0) end
local len = tonumber(ctx.pipe[2])
if len == nil or math.floor(len) ~= len then error(modulename ..
', ‘purging’: Length must be an integer number', 0) end
local tbl = ctx.params
if len < 1 then
len = len + table.maxn(tbl)
if idx > len then return context_iterate(ctx, 3) end
len = len - idx + 1
end
ctx.params = copy_table_reduced(tbl, idx, len)
return context_iterate(ctx, 3)
end
-- Syntax: #invoke:params|backpurging|start offset|length|pipe to
library.backpurging = function (ctx)
local last = tonumber(ctx.pipe[1])
if last == nil or math.floor(last) ~= last then error(modulename ..
', ‘backpurging’: Start offset must be an integer number', 0) end
local len = tonumber(ctx.pipe[2])
if len == nil or math.floor(len) ~= len then error(modulename ..
', ‘backpurging’: Length must be an integer number', 0) end
local idx
local tbl = ctx.params
if len > 0 then
idx = last - len + 1
else
for key in pairs(tbl) do
if type(key) == 'number' and (idx == nil or
key < idx) then idx = key end
end
if idx == nil then return context_iterate(ctx, 3) end
idx = idx - len
if last < idx then return context_iterate(ctx, 3) end
len = last - idx + 1
end
ctx.params = copy_table_reduced(ctx.params, idx, len)
return context_iterate(ctx, 3)
end
-- Syntax: #invoke:params|shifting|addend|pipe to
library.shifting = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local nshift = tonumber(ctx.pipe[1])
if nshift == nil or nshift == 0 or math.floor(nshift) ~= nshift then
error(modulename .. ', ‘shifting’: A non-zero integer number must be provided', 0) end
local tbl = {}
for key, val in pairs(ctx.params) do
if type(key) == 'number' then tbl[key + nshift] = val
else tbl[key] = val end
end
ctx.params = tbl
return context_iterate(ctx, 2)
end
-- Syntax: #invoke:params|reversing_numeric_names|pipe to
library.reversing_numeric_names = function (ctx)
local tbl, numerics, nmax = ctx.params, {}, 0
for key, val in pairs(tbl) do
if type(key) == 'number' then
numerics[key], tbl[key] = val, nil
if key > nmax then nmax = key end
end
end
for key, val in pairs(numerics) do tbl[nmax - key + 1] = val end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|pivoting_numeric_names|pipe to
--[[
library.pivoting_numeric_names = function (ctx)
local tbl = ctx.params
local shift = #tbl + 1
if shift < 2 then return library.reversing_numeric_names(ctx) end
local numerics = {}
for key, val in pairs(tbl) do
if type(key) == 'number' then
numerics[key] = val
tbl[key] = nil
end
end
for key, val in pairs(numerics) do tbl[shift - key] = val end
return context_iterate(ctx, 1)
end
]]--
-- Syntax: #invoke:params|mirroring_numeric_names|pipe to
--[[
library.mirroring_numeric_names = function (ctx)
local nmax, nmin
local tbl, numerics = ctx.params, {}
for key, val in pairs(tbl) do
if type(key) == 'number' then
numerics[key] = val
tbl[key] = nil
if nmax == nil then nmin, nmax = key, key
elseif key > nmax then nmax = key
elseif key < nmin then nmin = key end
end
end
for key, val in pairs(numerics) do tbl[nmax + nmin - key] = val end
return context_iterate(ctx, 1)
end
]]--
-- Syntax: #invoke:params|swapping_numeric_names|pipe to
--[[
library.swapping_numeric_names = function (ctx)
local tmp
local tbl, cache, nsize = ctx.params, {}, 0
for key in pairs(tbl) do
if type(key) == 'number' then
nsize = nsize + 1
cache[nsize] = key
end
end
table.sort(cache)
for idx = math.floor(nsize / 2), 1, -1 do
tmp = tbl[cache[idx] ]
tbl[cache[idx] ] = tbl[cache[nsize - idx + 1] ]
tbl[cache[nsize - idx + 1] ] = tmp
end
return context_iterate(ctx, 1)
end
]]--
-- Syntax: #invoke:params|sorting_sequential_values|[criterion]|pipe to
library.sorting_sequential_values = function (ctx)
local sortfn
if ctx.pipe[1] ~= nil then
sortfn = sortfunctions[ctx.pipe[1]:match'^%s*(.-)%s*$']
end
if sortfn then table.sort(ctx.params, sortfn)
else table.sort(ctx.params) end -- i.e. either `false` or `nil`
if sortfn == nil then return context_iterate(ctx, 1) end
return context_iterate(ctx, 2)
end
-- Syntax: #invoke:params|splicing|[add to position]|position|increment|
-- [number of elements to write]|...|pipe to
library.splicing = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local tmp2, argc, pos, refp
local opts, tbl = ctx.pipe, ctx.params
local tmp1 = opts[1]
if tmp1 ~= nil then
tmp2 = tonumber(tmp1)
if tmp2 == nil or math.floor(tmp2) ~= tmp2 then
pos, argc, tmp2 = tonumber(opts[2]), 4,
tmp1:match'^%s*(.*%S)'
if tmp2 ~= nil then
refp = position_references[tmp2]
if refp == nil then error(modulename ..
', ‘splicing’: ‘' .. tostring(tmp2) ..
'’ is not a valid first argument', 0) end
else refp = 0 end
else pos, argc, refp = tmp2, 3, 0 end
else pos, argc, refp = tonumber(opts[2]), 4, 0 end
if pos == nil or math.floor(pos) ~= pos then error(modulename ..
', ‘splicing’: The position must be an integer number', 0) end
local len = tonumber(opts[argc - 1])
if len == nil or math.floor(len) ~= len then error(modulename ..
', ‘splicing’: The increment must be an integer number', 0) end
if refp == 2 then
for _ in ipairs(tbl) do pos = pos + 1 end
refp = 0
end
tmp1, tmp2 = nil, nil
if refp ~= 0 or len ~= 0 then
for key, val in pairs(tbl) do
if type(key) == 'number' then
if tmp1 == nil then tmp1, tmp2 = key, key
elseif key < tmp1 then tmp1 = key
elseif key > tmp2 then tmp2 = key end
end
end
end
if tmp2 == nil then len = 0
elseif refp == 3 then pos = pos + tmp2
elseif refp == 1 then pos = pos + tmp1 end
if len > 0 and pos + len > tmp1 and pos <= tmp2 then
tbl = copy_table_expanded(tbl, pos, len)
elseif len < 0 and pos - len > tmp1 and pos <= tmp2 then
tbl = copy_table_reduced(tbl, pos, -len)
else tbl = copy_or_ref_table(tbl, tbl ~= ctx.oparams) end
ctx.params = tbl
tmp1 = tonumber(opts[argc])
if len == 0 and (tmp1 == nil or tmp1 < 1) then error(modulename ..
', ‘splicing’: When the increment is zero the number of elements to add cannot be zero', 0) end
if tmp1 == nil or tmp1 < 0 or math.floor(tmp1) ~= tmp1 then
return context_iterate(ctx, argc)
end
tmp2 = argc - pos + 1
for key = pos, pos + tmp1 - 1 do tbl[key] = opts[key + tmp2] end
return context_iterate(ctx, argc + tmp1 + 1)
end
-- Syntax: #invoke:params|imposing|name|value|pipe to
library.imposing = function (ctx)
if ctx.pipe[1] == nil then error(modulename ..
', ‘imposing’: Missing parameter name to impose', 0) end
ctx.params[get_parameter_name(ctx.pipe[1])] = ctx.pipe[2]
return context_iterate(ctx, 3)
end
-- Syntax: #invoke:params|providing|name|value|pipe to
library.providing = function (ctx)
if ctx.pipe[1] == nil then error(modulename ..
', ‘providing’: Missing parameter name to provide', 0) end
local key = get_parameter_name(ctx.pipe[1])
if ctx.params[key] == nil then ctx.params[key] = ctx.pipe[2] end
return context_iterate(ctx, 3)
end
-- Syntax: #invoke:params|reassigning|source|destination|[mode]|pipe to
library.reassigning = function (ctx)
local opts, tbl = ctx.pipe, ctx.params
if opts[1] == nil then error(modulename ..
', ‘reassigning’: Missing source parameter', 0) end
if opts[2] == nil then error(modulename ..
', ‘reassigning’: Missing destination parameter', 0) end
local mode, argc
local src = get_parameter_name(opts[1])
local val = tbl[src]
if opts[3] ~= nil then mode = a_modes[opts[3]:match'^%s*(.-)%s*$'] end
if mode == nil then mode, argc = 0, 3 else argc = 4 end
if val == nil and mode > 1 then return context_iterate(ctx, argc) end
local dest = get_parameter_name(opts[2])
local tmp = tbl[dest] == nil
if mode % 2 == 0 or (mode == 7 and tmp) then tbl[src] = nil end
if tmp or mode < 4 then tbl[dest] = val end
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|discarding|name|[how many]|pipe to
library.discarding = function (ctx)
if ctx.pipe[1] == nil then error(modulename ..
', ‘discarding’: Missing parameter name to discard', 0) end
local len = tonumber(ctx.pipe[2])
if len == nil then
ctx.params[get_parameter_name(ctx.pipe[1])] = nil
return context_iterate(ctx, 2)
end
local key = tonumber(ctx.pipe[1])
if key == nil or math.floor(key) ~= key then error(modulename ..
', ‘discarding’: A range was provided, but the initial parameter name is not an integer number', 0) end
if len < 1 or math.floor(len) ~= len then error(modulename ..
', ‘discarding’: A range can only be an integer number greater than zero', 0) end
for idx = key, key + len - 1 do ctx.params[idx] = nil end
return context_iterate(ctx, 3)
end
-- Syntax: #invoke:params|excluding_non-numeric_names|pipe to
library['excluding_non-numeric_names'] = function (ctx)
local tmp = ctx.params
for key, val in pairs(tmp) do
if type(key) ~= 'number' then tmp[key] = nil end
end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|excluding_numeric_names|pipe to
library.excluding_numeric_names = function (ctx)
local tmp = ctx.params
for key, val in pairs(tmp) do
if type(key) == 'number' then tmp[key] = nil end
end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|with_name_matching|target 1|[plain flag 1]|[or]
-- |[target 2]|[plain flag 2]|[or]|[...]|[target N]|[plain flag
-- N]|pipe to
library.with_name_matching = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local tmp, ptn
local targets, nptns, argc = load_pattern_args(ctx.pipe,
'with_name_matching')
local tbl, newparams = ctx.params, {}
for idx = 1, nptns do
ptn = targets[idx]
if ptn[3] then
tmp = ptn[1]
if tmp == '0' or tmp:find'^%-?[1-9]%d*$' ~= nil then
tmp = tonumber(tmp)
end
newparams[tmp] = tbl[tmp]
else
for key, val in pairs(tbl) do
if tostring(key):find(ptn[1], 1, ptn[2]) then
newparams[key] = val
end
end
end
end
ctx.params = newparams
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|with_name_not_matching|target 1|[plain flag 1]
-- |[and]|[target 2]|[plain flag 2]|[and]|[...]|[target N]|[plain
-- flag N]|pipe to
library.with_name_not_matching = function (ctx)
local targets, nptns, argc = load_pattern_args(ctx.pipe,
'with_name_not_matching')
local tbl = ctx.params
if nptns == 1 and targets[1][3] then
local tmp = targets[1][1]
if tmp == '0' or tmp:find'^%-?[1-9]%d*$' ~= nil then
tbl[tonumber(tmp)] = nil
else tbl[tmp] = nil end
return context_iterate(ctx, argc)
end
local yesmatch, ptn
for key in pairs(tbl) do
yesmatch = true
for idx = 1, nptns do
ptn = targets[idx]
if ptn[3] then
if tostring(key) ~= ptn[1] then
yesmatch = false
break
end
elseif not tostring(key):find(ptn[1], 1, ptn[2]) then
yesmatch = false
break
end
end
if yesmatch then tbl[key] = nil end
end
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|with_value_matching|target 1|[plain flag 1]|[or]
-- |[target 2]|[plain flag 2]|[or]|[...]|[target N]|[plain flag
-- N]|pipe to
library.with_value_matching = function (ctx)
local nomatch, ptn
local tbl = ctx.params
local targets, nptns, argc = load_pattern_args(ctx.pipe,
'with_value_matching')
for key, val in pairs(tbl) do
nomatch = true
for idx = 1, nptns do
ptn = targets[idx]
if ptn[3] then
if val == ptn[1] then
nomatch = false
break
end
elseif val:find(ptn[1], 1, ptn[2]) then
nomatch = false
break
end
end
if nomatch then tbl[key] = nil end
end
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|with_value_not_matching|target 1|[plain flag 1]
-- |[and]|[target 2]|[plain flag 2]|[and]|[...]|[target N]|[plain
-- flag N]|pipe to
library.with_value_not_matching = function (ctx)
local yesmatch, ptn
local tbl = ctx.params
local targets, nptns, argc = load_pattern_args(ctx.pipe,
'with_value_not_matching')
for key, val in pairs(tbl) do
yesmatch = true
for idx = 1, nptns do
ptn = targets[idx]
if ptn[3] then
if val ~= ptn[1] then
yesmatch = false
break
end
elseif not val:find(ptn[1], 1, ptn[2]) then
yesmatch = false
break
end
end
if yesmatch then tbl[key] = nil end
end
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|keeping_at_most|number of parameters to pick|pipe to
library.keeping_at_most = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local len = tonumber(ctx.pipe[1])
if len == nil or len < 1 or math.floor(len) ~= len then error(modulename ..
', ‘keeping_at_most’: The number of parameters to keep must be an integer greater than zero', 0) end
ctx.params = copy_table_maxn({}, ctx.params, len)
return context_iterate(ctx, 2)
end
-- Syntax: #invoke:params|trimming_values|pipe to
library.trimming_values = function (ctx)
local tbl = ctx.params
for key, val in pairs(tbl) do tbl[key] = val:match'^%s*(.-)%s*$' end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|mapping_to_lowercase|pipe to
library.mapping_to_lowercase = function (ctx)
local tbl = ctx.params
for key, val in pairs(tbl) do tbl[key] = val:lower() end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|mapping_to_uppercase|pipe to
library.mapping_to_uppercase = function (ctx)
local tbl = ctx.params
for key, val in pairs(tbl) do tbl[key] = val:upper() end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|mapping_by_calling|template name|[call
-- style]|[let/use]|[...]|[let/use]|[...]|[number of additional
-- parameters]|[parameter 1]|[parameter 2]|[...]|[parameter N]|pipe to
library.mapping_by_calling = function (ctx)
local tname
local opts = ctx.pipe
if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end
if tname == nil then error(modulename ..
', ‘mapping_by_calling’: No template name was provided', 0) end
local margs, argc, looptype, karg, varg, tbl, mem =
load_callback_opts(opts, 1, mapping_styles.values_only, ctx.params)
local model = { title = tname, args = margs }
value_maps[looptype](tbl, margs, karg, varg, function ()
return ctx.frame:expandTemplate(model)
end)
for key, val in pairs(mem) do tbl[key] = val end
ctx.params = tbl
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|mapping_by_invoking|module name|function name|[call
-- style]|[let/use]|[...]|[let/use]|[...]|[number of additional
-- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to
library.mapping_by_invoking = function (ctx)
local mname, fname
local opts = ctx.pipe
if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end
if mname == nil then error(modulename ..
', ‘mapping_by_invoking’: No module name was provided', 0) end
if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end
if fname == nil then error(modulename ..
', ‘mapping_by_invoking’: No function name was provided', 0) end
local margs, argc, looptype, karg, varg, tbl, mem =
load_callback_opts(opts, 2, mapping_styles.values_only, ctx.params)
local model = { title = 'Module:' .. mname, args = margs }
local mfunc = require(model.title)[fname]
if mfunc == nil then error(modulename ..
', ‘mapping_by_invoking’: The function ‘' .. fname ..
'’ does not exist', 0) end
value_maps[looptype](tbl, margs, karg, varg, function ()
return tostring(mfunc(ctx.frame:newChild(model)))
end)
for key, val in pairs(mem) do tbl[key] = val end
ctx.params = tbl
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|mapping_by_magic|parser function|[call
-- style]|[let/use]|[...]|[let/use]|[...]|[number of additional
-- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to
library.mapping_by_magic = function (ctx)
local magic
local opts = ctx.pipe
if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end
if magic == nil then error(modulename ..
', ‘mapping_by_magic’: No parser function was provided', 0) end
local margs, argc, looptype, karg, varg, tbl, mem =
load_callback_opts(opts, 1, mapping_styles.values_only, ctx.params)
value_maps[looptype](tbl, margs, karg, varg, function ()
return ctx.frame:callParserFunction(magic, margs)
end)
for key, val in pairs(mem) do tbl[key] = val end
ctx.params = tbl
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|mapping_by_replacing|target|replace|[count]|[plain
-- flag]|pipe to
library.mapping_by_replacing = function (ctx)
local ptn, repl, nmax, flg, argc, die =
load_replace_args(ctx.pipe, 'mapping_by_replacing')
if die then return context_iterate(ctx, argc) end
local tbl = ctx.params
if flg == 3 then
for key, val in pairs(tbl) do
if val == ptn then tbl[key] = repl end
end
else
if flg == 2 then
-- Copied from Module:String's `str._escapePattern()`
ptn = ptn:gsub('[%(%)%.%%%+%-%*%?%[%^%$%]]', '%%%0')
end
for key, val in pairs(tbl) do
tbl[key] = val:gsub(ptn, repl, nmax)
end
end
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|mapping_by_mixing|mixing string|pipe to
library.mapping_by_mixing = function (ctx)
if ctx.pipe[1] == nil then error(modulename ..
', ‘mapping_by_mixing’: No mixing string was provided', 0) end
local tbl, mix = ctx.params, ctx.pipe[1]
if mix == '$#' then
for key in pairs(tbl) do tbl[key] = tostring(key) end
return context_iterate(ctx, 2)
end
local skel, cnv, n_parts = parse_placeholder_string(mix)
for key, val in pairs(tbl) do
for idx = 2, n_parts, 2 do
if skel[idx] then cnv[idx] = val
else cnv[idx] = tostring(key) end
end
tbl[key] = table.concat(cnv)
end
return context_iterate(ctx, 2)
end
-- Syntax: #invoke:params|mapping_to_names|pipe to
--[[
library.mapping_to_names = function (ctx)
local tbl = ctx.params
for key in pairs(tbl) do tbl[key] = tostring(key) end
return context_iterate(ctx, 1)
end
]]--
-- Syntax: #invoke:params|renaming_to_lowercase|pipe to
library.renaming_to_lowercase = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local cache = {}
for key, val in pairs(ctx.params) do
if type(key) == 'string' then cache[key:lower()] = val else
cache[key] = val end
end
ctx.params = cache
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|renaming_to_uppercase|pipe to
library.renaming_to_uppercase = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local cache = {}
for key, val in pairs(ctx.params) do
if type(key) == 'string' then cache[key:upper()] = val else
cache[key] = val end
end
ctx.params = cache
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|renaming_to_sequence|[sort order]|pipe to
library.renaming_to_sequence = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local cache, len
local tbl = ctx.params
local sortfn, argc, do_sort = load_sort_opt(ctx.pipe[1])
if do_sort then
local words, wl
cache, words, len, wl = get_key_list_sorted(tbl, sortfn)
for idx = 1, len do cache[idx] = tbl[cache[idx]] end
for idx = 1, wl do cache[len + idx] = tbl[words[idx]] end
else
len, cache = 0, {}
for _, val in pairs(tbl) do
len = len + 1
cache[len] = val
end
end
ctx.params = cache
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|renaming_by_calling|template name|[call
-- style]|[let/use]|[...]|[let/use]|[...]|[number of additional
-- parameters]|[parameter 1]|[parameter 2]|[...]|[parameter N]|pipe to
library.renaming_by_calling = function (ctx)
local tname
local opts = ctx.pipe
if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end
if tname == nil then error(modulename ..
', ‘renaming_by_calling’: No template name was provided', 0) end
local rargs, argc, looptype, karg, varg, tbl, mem =
load_callback_opts(opts, 1, mapping_styles.names_only, ctx.params)
local model = { title = tname, args = rargs }
map_names(tbl, rargs, karg, varg, looptype, function ()
return ctx.frame:expandTemplate(model)
end)
for key, val in pairs(mem) do tbl[key] = val end
ctx.params = tbl
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|renaming_by_invoking|module name|function
-- name|[call style]|[let/use]|[...]|[let/use]|[...]|[number of
-- additional arguments]|[argument 1]|[argument 2]|[...]|[argument
-- N]|pipe to
library.renaming_by_invoking = function (ctx)
local mname, fname
local opts = ctx.pipe
if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end
if mname == nil then error(modulename ..
', ‘renaming_by_invoking’: No module name was provided', 0) end
if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end
if fname == nil then error(modulename ..
', ‘renaming_by_invoking’: No function name was provided', 0) end
local rargs, argc, looptype, karg, varg, tbl, mem =
load_callback_opts(opts, 2, mapping_styles.names_only, ctx.params)
local model = { title = 'Module:' .. mname, args = rargs }
local mfunc = require(model.title)[fname]
if mfunc == nil then error(modulename ..
', ‘renaming_by_invoking’: The function ‘' .. fname ..
'’ does not exist', 0) end
map_names(tbl, rargs, karg, varg, looptype, function ()
return tostring(mfunc(ctx.frame:newChild(model)))
end)
for key, val in pairs(mem) do tbl[key] = val end
ctx.params = tbl
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|renaming_by_magic|parser function|[call
-- style]|[let/use]|[...]|[let/use]|[...]|[number of additional
-- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to
library.renaming_by_magic = function (ctx)
local opts = ctx.pipe
local magic
if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end
if magic == nil then error(modulename ..
', ‘renaming_by_magic’: No parser function was provided', 0) end
local rargs, argc, looptype, karg, varg, tbl, mem =
load_callback_opts(opts, 1, mapping_styles.names_only, ctx.params)
map_names(tbl, rargs, karg, varg, looptype, function ()
return ctx.frame:callParserFunction(magic, rargs)
end)
for key, val in pairs(mem) do tbl[key] = val end
ctx.params = tbl
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|renaming_by_replacing|target|replace|[count]|[plain
-- flag]|pipe to
library.renaming_by_replacing = function (ctx)
local ptn, repl, nmax, flg, argc, die =
load_replace_args(ctx.pipe, 'renaming_by_replacing')
if die then return context_iterate(ctx, argc) end
local tbl = ctx.params
if flg == 3 then
ptn = get_parameter_name(ptn)
local val = tbl[ptn]
if val ~= nil then
tbl[ptn], tbl[get_parameter_name(repl)] = nil, val
end
else
if flg == 2 then
-- Copied from Module:String's `str._escapePattern()`
ptn = ptn:gsub('[%(%)%.%%%+%-%*%?%[%^%$%]]', '%%%0')
end
local cache = {}
for key, val in pairs(tbl) do
steal_if_renamed(val, tbl, key, cache,
tostring(key):gsub(ptn, repl, nmax))
end
for key, val in pairs(cache) do tbl[key] = val end
end
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|renaming_by_mixing|mixing string|pipe to
library.renaming_by_mixing = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
if ctx.pipe[1] == nil then error(modulename ..
', ‘renaming_by_mixing’: No mixing string was provided', 0) end
local mix = ctx.pipe[1]:match'^%s*(.-)%s*$'
local cache = {}
if mix == '$@' then
for _, val in pairs(ctx.params) do
cache[get_parameter_name(val)] = val
end
else
local skel, canvas, n_parts = parse_placeholder_string(mix)
for key, val in pairs(ctx.params) do
for idx = 2, n_parts, 2 do
if skel[idx] then canvas[idx] = val
else canvas[idx] = tostring(key) end
end
cache[get_parameter_name(table.concat(canvas))] = val
end
end
ctx.params = cache
return context_iterate(ctx, 2)
end
-- Syntax: #invoke:params|renaming_to_values|pipe to
--[[
library.renaming_to_values = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local cache = {}
for _, val in pairs(ctx.params) do cache[val] = val end
ctx.params = cache
return context_iterate(ctx, 1)
end
]]--
-- Syntax: #invoke:params|grouping_by_calling|template
-- name|[let/use]|[...]|[let/use]|[...]|[number of additional
-- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to
library.grouping_by_calling = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local tmp, argc, tbl, mem = load_child_opts(ctx.pipe, 2, 0, ctx.params)
local gargs = {}
for key, val in pairs(tmp) do
if type(key) == 'number' and key < 1 then gargs[key - 1] = val
else gargs[key] = val end
end
tmp = ctx.pipe[1]
if tmp ~= nil then tmp = tmp:match'^%s*(.*%S)' end
if tmp == nil then error(modulename ..
', ‘grouping_by_calling’: No template name was provided', 0) end
local model = { title = tmp }
local groups = make_groups(tbl)
for gid, group in pairs(groups) do
for key, val in pairs(gargs) do group[key] = val end
group[0], model.args = gid, group
groups[gid] = ctx.frame:expandTemplate(model)
end
for key, val in pairs(mem) do groups[key] = val end
ctx.params = groups
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|parsing|string to parse|[trim flag]|[iteration
-- delimiter setter]|[...]|[key-value delimiter setter]|[...]|pipe to
library.parsing = function (ctx)
local opts = ctx.pipe
if opts[1] == nil then error(modulename ..
', ‘parsing’: No string to parse was provided', 0) end
local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc =
load_parse_opts(opts, 2, '|', '=')
parse_parameter_string(ctx.params, opts[1], isep, iplain, psep, pplain,
trimnamed, trimunnamed)
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|reinterpreting|parameter to reinterpret|[trim
-- flag]|[iteration delimiter setter]|[...]|[key-value delimiter
-- setter]|[...]|pipe to
library.reinterpreting = function (ctx)
local opts = ctx.pipe
if opts[1] == nil then error(modulename ..
', ‘reinterpreting’: No parameter to reinterpret was provided', 0) end
local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc =
load_parse_opts(opts, 2, '|', '=')
local tbl, tmp = ctx.params, get_parameter_name(opts[1])
local str = tbl[tmp]
if str ~= nil then
tbl[tmp] = nil
parse_parameter_string(tbl, str, isep, iplain, psep, pplain,
trimnamed, trimunnamed)
end
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|evaluating|string to parse|[trim flag]|[iteration
-- delimiter setter]|[...]|[key-value delimiter setter]|[...]|pipe to
library.evaluating = function (ctx)
-- NOTE: `ctx.pipe` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local opts = ctx.pipe
if opts[1] == nil then error(modulename ..
', ‘evaluating’: No string to parse was provided', 0) end
local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc =
load_parse_opts(opts, 2, '!', ':')
if opts[1]:match'^%s*(.*%S)' == nil then
ctx.pipe = copy_or_ref_table(opts, opts ~= ctx.opipe)
return context_iterate(ctx, argc)
end
local new_opts, cache = {}, {}
local shift = parse_parameter_string(cache, opts[1], isep, iplain,
psep, pplain, trimnamed, trimunnamed) - argc
for key, val in pairs(opts) do
if type(key) ~= 'number' or key < 1 then new_opts[key] = val
elseif key >= argc then new_opts[key + shift] = val end
end
for key, val in pairs(cache) do new_opts[key] = val end
ctx.pipe = new_opts
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|mixing_names_and_values|mixing string|pipe to
library.mixing_names_and_values = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
if ctx.pipe[1] == nil then error(modulename ..
', ‘mixing_names_and_values’: No mixing string was provided for parameter names', 0) end
if ctx.pipe[2] == nil then error(modulename ..
', ‘mixing_names_and_values’: No mixing string was provided for parameter values', 0) end
local tmp
local mix_k = ctx.pipe[1]:match'^%s*(.-)%s*$'
local cache, mix_v = {}, ctx.pipe[2]
if mix_k == '$@' and mix_v == '$@' then
for _, val in pairs(ctx.params) do
cache[get_parameter_name(val)] = val
end
elseif mix_k == '$@' and mix_v == '$#' then
for key, val in pairs(ctx.params) do
cache[get_parameter_name(val)] = tostring(key)
end
elseif mix_k == '$#' and mix_v == '$#' then
for key in pairs(ctx.params) do cache[key] = tostring(key) end
else
local skel_k, cnv_k, n_parts_k = parse_placeholder_string(mix_k)
local skel_v, cnv_v, n_parts_v = parse_placeholder_string(mix_v)
for key, val in pairs(ctx.params) do
tmp = tostring(key)
for idx = 2, n_parts_k, 2 do
if skel_k[idx] then cnv_k[idx] = val else cnv_k[idx] = tmp end
end
for idx = 2, n_parts_v, 2 do
if skel_v[idx] then cnv_v[idx] = val else cnv_v[idx] = tmp end
end
cache[get_parameter_name(table.concat(cnv_k))] =
table.concat(cnv_v)
end
end
ctx.params = cache
return context_iterate(ctx, 3)
end
-- Syntax: #invoke:params|swapping_names_and_values|pipe to
--[[
library.swapping_names_and_values = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local cache = {}
for key, val in pairs(ctx.params) do cache[val] = key end
ctx.params = cache
return context_iterate(ctx, 1)
end
]]--
-- Syntax: #invoke:params|combining|new parameter name|[sort
-- order]|[with/without flushed glue]|setting directives|...|pipe to
library.combining = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
return context_iterate(ctx, combine_parameters(
ctx,
function (key, val, kvs) return key .. kvs .. val end,
'combining'
) + 1)
end
-- Syntax: #invoke:params|combining_values|new parameter name|[sort
-- order]|[with/without flushed glue]|setting directives|...|pipe to
library.combining_values = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
return context_iterate(ctx, combine_parameters(
ctx,
function (key, val, kvs) return val end,
'combining_values'
) + 1)
end
-- Syntax: #invoke:params|combining_by_calling|template name|new parameter
-- name|pipe to
library.combining_by_calling = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local tname = ctx.pipe[1]
if tname ~= nil then tname = tname:match'^%s*(.*%S)'
else error(modulename ..
', ‘combining_by_calling’: No template name was provided', 0) end
if ctx.pipe[2] == nil then error(modulename ..
', ‘combining_by_calling’: No parameter name was provided', 0) end
ctx.params = {
[get_parameter_name(ctx.pipe[2])] = ctx.frame:expandTemplate{
title = tname,
args = ctx.params
}
}
return context_iterate(ctx, 3)
end
-- Syntax: #invoke:params|combining_by_invoking|module name|function name|new
-- parameter name|pipe to
library.combining_by_invoking = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local mname = ctx.pipe[1]
if mname ~= nil then mname = mname:match'^%s*(.*%S)'
else error(modulename ..
', ‘combining_by_invoking’: No module name was provided', 0) end
local fname = ctx.pipe[2]
if fname ~= nil then fname = fname:match'^%s*(.*%S)'
else error(modulename ..
', ‘combining_by_invoking’: No function name was provided', 0) end
if ctx.pipe[3] == nil then error(modulename ..
', ‘combining_by_invoking’: No parameter name was provided', 0) end
local model = { title = 'Module:' .. mname, args = ctx.params }
local mfunc = require(model.title)[fname]
if mfunc == nil then error(modulename ..
', ‘mapping_by_invoking’: The function ‘' .. fname ..
'’ does not exist', 0) end
ctx.params = {
[get_parameter_name(ctx.pipe[3])] =
tostring(mfunc(ctx.frame:newChild(model)))
}
return context_iterate(ctx, 4)
end
-- Syntax: #invoke:params|combining_by_magic|parser function|new parameter
-- name|pipe to
library.combining_by_magic = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local magic = ctx.pipe[1]
if magic ~= nil then magic = magic:match'^%s*(.*%S)'
else error(modulename ..
', ‘combining_by_magic’: No parser function was provided', 0) end
if ctx.pipe[2] == nil then error(modulename ..
', ‘combining_by_magic’: No parameter name was provided', 0) end
ctx.params = {
[get_parameter_name(ctx.pipe[2])] =
ctx.frame:callParserFunction(magic, ctx.params)
}
return context_iterate(ctx, 3)
end
-- Syntax: #invoke:params|snapshotting|[maximum number]|pipe to
library.snapshotting = function (ctx)
return context_iterate(ctx, make_child(ctx, ctx.params, 'snapshotting'))
end
-- Syntax: #invoke:params|remembering|[maximum number]|pipe to
library.remembering = function (ctx)
return context_iterate(ctx, make_child(ctx, ctx.oparams, 'remembering'))
end
-- Syntax: #invoke:params|entering_substack|[new]|pipe to
library.entering_substack = function (ctx)
local tbl, ncurrparent = ctx.params, ctx.n_parents + 1
if ctx.parents == nil then ctx.parents = { tbl }
else ctx.parents[ncurrparent] = tbl end
ctx.n_parents = ncurrparent
if ctx.pipe[1] ~= nil and ctx.pipe[1]:match'^%s*new%s*$' then
ctx.params = {}
return context_iterate(ctx, 2)
end
local currsnap = ctx.n_children
if currsnap > 0 then
ctx.params, ctx.children[currsnap], ctx.n_children =
ctx.children[currsnap], nil, currsnap - 1
else
local newparams = {}
for key, val in pairs(tbl) do newparams[key] = val end
ctx.params = newparams
end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|pulling|parameter name|pipe to
library.pulling = function (ctx)
local opts = ctx.pipe
if opts[1] == nil then error(modulename ..
', ‘pulling’: No parameter to pull was provided', 0) end
local tmp = ctx.n_parents
local parent = tmp < 1 and ctx.oparams or ctx.parents[tmp]
tmp = get_parameter_name(opts[1])
if parent[tmp] ~= nil then ctx.params[tmp] = parent[tmp] end
return context_iterate(ctx, 2)
end
-- Syntax: #invoke:params|recalling|parameter name|pipe to
library.recalling = function (ctx)
local opts = ctx.pipe
if opts[1] == nil then error(modulename ..
', ‘recalling’: No parameter to recall was provided', 0) end
local arg = get_parameter_name(opts[1])
if ctx.oparams[arg] ~= nil then ctx.params[arg] = ctx.oparams[arg] end
return context_iterate(ctx, 2)
end
-- Syntax: #invoke:params|finding|parameter name|pipe to
--[[
library.finding = function (ctx)
local opts = ctx.pipe
if opts[1] == nil then error(modulename ..
', ‘finding’: No parameter to find was provided', 0) end
local arg = get_parameter_name(opts[1])
local parent
for idx = ctx.n_parents, 1, -1 do
parent = ctx.parents[idx]
if parent[arg] ~= nil then
ctx.params[arg] = parent[arg]
return context_iterate(ctx, 2)
end
end
if ctx.oparams[arg] ~= nil then ctx.params[arg] = ctx.oparams[arg] end
return context_iterate(ctx, 2)
end
]]--
-- Syntax: #invoke:params|picking|number of parameters to pick|pipe to
--[[
library.picking = function (ctx)
local len = tonumber(ctx.pipe[1])
if len == nil or len < 1 or math.floor(len) ~= len then error(modulename ..
', ‘picking’: The number of parameters to pick must be an integer greater than zero', 0) end
if ctx.n_parents < 1 then copy_table_maxn(ctx.params, ctx.oparams, len)
else copy_table_maxn(ctx.params, ctx.parents[ctx.n_parents], len) end
return context_iterate(ctx, 2)
end
]]--
-- Syntax: #invoke:params|detaching_substack|pipe to
library.detaching_substack = function (ctx)
local ncurrparent = ctx.n_parents
if ncurrparent < 1 then error(modulename ..
', ‘detaching_substack’: No substack has been created', 0) end
local parent = ctx.parents[ncurrparent]
for key in pairs(ctx.params) do parent[key] = nil end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|dropping_substack|pipe to
library.dropping_substack = function (ctx)
local ncurrparent = ctx.n_parents
if ncurrparent < 1 then error(modulename ..
', ‘dropping_substack’: No substack has been created', 0) end
ctx.params, ctx.parents[ncurrparent], ctx.n_parents =
ctx.parents[ncurrparent], nil, ncurrparent - 1
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|leaving_substack|pipe to
library.leaving_substack = function (ctx)
local ncurrparent = ctx.n_parents
if ncurrparent < 1 then error(modulename ..
', ‘leaving_substack’: No substack has been created', 0) end
local currsnap = ctx.n_children + 1
if ctx.children == nil then ctx.children = { ctx.params }
else ctx.children[currsnap] = ctx.params end
ctx.params, ctx.parents[ncurrparent], ctx.n_parents, ctx.n_children =
ctx.parents[ncurrparent], nil, ncurrparent - 1, currsnap
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|merging_substack|pipe to
library.merging_substack = function (ctx)
local ncurrparent = ctx.n_parents
if ncurrparent < 1 then error(modulename ..
', ‘merging_substack’: No substack has been created', 0) end
local parent, child = ctx.parents[ncurrparent], ctx.params
ctx.params, ctx.parents[ncurrparent], ctx.n_parents = parent, nil,
ncurrparent - 1
for key, val in pairs(child) do parent[key] = val end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|flushing|pipe to
library.flushing = function (ctx)
if ctx.n_children < 1 then error(modulename ..
', ‘flushing’: There are no substacks to flush', 0) end
local parent, currsnap = ctx.params, ctx.n_children
for key, val in pairs(ctx.children[currsnap]) do parent[key] = val end
ctx.children[currsnap], ctx.n_children = nil, currsnap - 1
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|setting_by_flushing|pipe to
library.setting_by_flushing = function (ctx)
set_strings_from_substack(ctx, ctx, 'setting_by_flushing')
return context_iterate(ctx, 1)
end
--[[ Functions ]]--
-----------------------------
-- Syntax: #invoke:params|count
library.count = function (ctx)
-- NOTE: `ctx.pipe` and `ctx.params` might be the original metatables!
local retval = 0
for _ in ctx.iterfunc(ctx.params) do retval = retval + 1 end
if ctx.subset == -1 then retval = retval - #ctx.params end
ctx.text = retval
return false
end
-- Syntax: #invoke:args|concat_and_call|template name|[prepend 1]|[prepend 2]
-- |[...]|[item n]|[named item 1=value 1]|[...]|[named item n=value
-- n]|[...]
library.concat_and_call = function (ctx)
-- NOTE: `ctx.params` might be the original metatable!
local tname
local opts = ctx.pipe
if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end
if tname == nil then error(modulename ..
', ‘concat_and_call’: No template name was provided', 0) end
remove_numeric_keys(opts, 1, 1)
ctx.text = ctx.frame:expandTemplate{
title = tname,
args = concat_params(ctx)
}
return false
end
-- Syntax: #invoke:args|concat_and_invoke|module name|function name|[prepend
-- 1]|[prepend 2]|[...]|[item n]|[named item 1=value 1]|[...]|[named
-- item n=value n]|[...]
library.concat_and_invoke = function (ctx)
-- NOTE: `ctx.params` might be the original metatable!
local mname, fname
local opts = ctx.pipe
if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end
if mname == nil then error(modulename ..
', ‘concat_and_invoke’: No module name was provided', 0) end
if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end
if fname == nil then error(modulename ..
', ‘concat_and_invoke’: No function name was provided', 0) end
remove_numeric_keys(opts, 1, 2)
local mfunc = require('Module:' .. mname)[fname]
if mfunc == nil then error(modulename ..
', ‘concat_and_invoke’: The function ‘' .. fname ..
'’ does not exist', 0) end
ctx.text = mfunc(ctx.frame:newChild{
title = 'Module:' .. mname,
args = concat_params(ctx)
})
return false
end
-- Syntax: #invoke:args|concat_and_magic|parser function|[prepend 1]|[prepend
-- 2]|[...]|[item n]|[named item 1=value 1]|[...]|[named item n=
-- value n]|[...]
library.concat_and_magic = function (ctx)
-- NOTE: `ctx.params` might be the original metatable!
local magic
local opts = ctx.pipe
if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end
if magic == nil then error(modulename ..
', ‘concat_and_magic’: No parser function was provided', 0) end
remove_numeric_keys(opts, 1, 1)
ctx.text = ctx.frame:callParserFunction(magic, concat_params(ctx))
return false
end
-- Syntax: #invoke:params|value_of|parameter name
library.value_of = function (ctx)
-- NOTE: `ctx.pipe` and `ctx.params` might be the original metatables!
local opts = ctx.pipe
if opts[1] == nil then error(modulename ..
', ‘value_of’: No parameter name was provided', 0) end
local val
local key = opts[1]:match'^%s*(.-)%s*$'
if key == '0' or key:find'^%-?[1-9]%d*$' ~= nil then
key = tonumber(key)
val = ctx.params[key]
-- No worries: #ctx.params is unused when the modifier is in
-- first position (and therefore `ctx.params` is a metatable)
if val ~= nil and (
ctx.subset ~= -1 or key > #ctx.params or key < 1
) and (
ctx.subset ~= 1 or (key <= #ctx.params and key > 0)
) then
ctx.text = (ctx.header or '') .. val .. (ctx.footer or '')
else ctx.text = ctx.ifngiven or '' end
else
val = ctx.params[key]
if ctx.subset ~= 1 and val ~= nil then ctx.text = (ctx.header
or '') .. val .. (ctx.footer or '')
else ctx.text = ctx.ifngiven or '' end
end
return false
end
-- Syntax: #invoke:params|list
library.list = function (ctx)
-- NOTE: `ctx.pipe` might be the original metatable!
local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or ''
flush_params(ctx, function (key, val)
ret[nss + 1], ret[nss + 2], ret[nss + 3], ret[nss + 4], nss =
pps, key, kvs, val, nss + 4
end)
finalize_and_return_concatenated_list(ctx, ret, nss, 4)
return false
end
-- Syntax: #invoke:params|list_values
library.list_values = function (ctx)
-- NOTE: `ctx.pipe` might be the original metatable!
-- NOTE: `library.coins()` and `library.unique_coins()` rely on us
local ret, nss, pps = {}, 0, ctx.itersep or ''
flush_params(ctx, function (key, val)
ret[nss + 1], ret[nss + 2], nss = pps, val, nss + 2
end)
finalize_and_return_concatenated_list(ctx, ret, nss, 2)
return false
end
-- Syntax: #invoke:params|list_maybe_with_names
library.list_maybe_with_names = function (ctx)
-- NOTE: `ctx.pipe` might be the original metatable!
local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or ''
mixed_flush_params(
ctx,
function (key, val)
ret[nss + 1], ret[nss + 2], ret[nss + 3],
ret[nss + 4], nss = pps, '', '', val, nss + 4
end,
function (key, val)
ret[nss + 1], ret[nss + 2], ret[nss + 3],
ret[nss + 4], nss = pps, key, kvs, val, nss + 4
end
)
finalize_and_return_concatenated_list(ctx, ret, nss, 4)
return false
end
-- Syntax: #invoke:params|coins|[first coin = value 1]|[second coin = value
-- 2]|[...]|[last coin = value N]
--[[
library.coins = function (ctx)
-- NOTE: `ctx.pipe` might be the original metatable!
local opts, tbl = ctx.pipe, ctx.params
for key, val in pairs(tbl) do tbl[key] = opts[get_parameter_name(val)] end
return library.list_values(ctx)
end
]]--
-- Syntax: #invoke:params|unique_coins|[first coin = value 1]|[second coin =
-- value 2]|[...]|[last coin = value N]
--[[
library.unique_coins = function (ctx)
local tmp
local opts, tbl = ctx.pipe, ctx.params
for key, val in pairs(tbl) do
tmp = get_parameter_name(val)
tbl[key], opts[tmp] = opts[tmp], nil
end
return library.list_values(ctx)
end
]]
-- Syntax: #invoke:params|for_each|wikitext
library.for_each = function (ctx)
-- NOTE: `ctx.pipe` might be the original metatable!
local ret, nss, pps, txt = {}, 0, ctx.itersep or '', ctx.pipe[1] or ''
local skel, cnv, n_parts = parse_placeholder_string(txt)
flush_params(ctx, function (key, val)
for idx = 2, n_parts, 2 do
if skel[idx] then cnv[idx] = val
else cnv[idx] = tostring(key) end
end
ret[nss + 1], nss = pps, nss + 2
ret[nss] = table.concat(cnv)
end)
finalize_and_return_concatenated_list(ctx, ret, nss, 2)
return false
end
-- Syntax: #invoke:params|call_for_each|template name|[append 1]|[append 2]
-- |[...]|[append n]|[named param 1=value 1]|[...]|[named param
-- n=value n]|[...]
library.call_for_each = function (ctx)
local tname
local opts = ctx.pipe
if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end
if tname == nil then error(modulename ..
', ‘call_for_each’: No template name was provided', 0) end
local model = { title = tname, args = opts }
local ret, nss, ccs = {}, 0, ctx.itersep or ''
table.insert(opts, 1, true)
flush_params(ctx, function (key, val)
opts[1], opts[2], ret[nss + 1], nss = key, val, ccs, nss + 2
ret[nss] = ctx.frame:expandTemplate(model)
end)
finalize_and_return_concatenated_list(ctx, ret, nss, 2)
return false
end
-- Syntax: #invoke:params|invoke_for_each|module name|module function|[append
-- 1]|[append 2]|[...]|[append n]|[named param 1=value 1]|[...]
-- |[named param n=value n]|[...]
library.invoke_for_each = function (ctx)
local mname, fname
local opts = ctx.pipe
if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end
if mname == nil then error(modulename ..
', ‘invoke_for_each’: No module name was provided', 0) end
if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end
if fname == nil then error(modulename ..
', ‘invoke_for_each’: No function name was provided', 0) end
local model = { title = 'Module:' .. mname, args = opts }
local mfunc = require(model.title)[fname]
local ret, nss, ccs = {}, 0, ctx.itersep or ''
flush_params(ctx, function (key, val)
opts[1], opts[2], ret[nss + 1], nss = key, val, ccs, nss + 2
ret[nss] = mfunc(ctx.frame:newChild(model))
end)
finalize_and_return_concatenated_list(ctx, ret, nss, 2)
return false
end
-- Syntax: #invoke:params|magic_for_each|parser function|[append 1]|[append 2]
-- |[...]|[append n]|[named param 1=value 1]|[...]|[named param
-- n=value n]|[...]
library.magic_for_each = function (ctx)
local magic
local opts = ctx.pipe
if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end
if magic == nil then error(modulename ..
', ‘magic_for_each’: No parser function was provided', 0) end
local ret, nss, ccs = {}, 0, ctx.itersep or ''
table.insert(opts, 1, true)
flush_params(ctx, function (key, val)
opts[1], opts[2], ret[nss + 1], nss = key, val, ccs, nss + 2
ret[nss] = ctx.frame:callParserFunction(magic, opts)
end)
finalize_and_return_concatenated_list(ctx, ret, nss, 2)
return false
end
-- Syntax: #invoke:params|call_for_each_value|template name|[append 1]|[append
-- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param
-- n=value n]|[...]
library.call_for_each_value = function (ctx)
local tname
local opts = ctx.pipe
if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end
if tname == nil then error(modulename ..
', ‘call_for_each_value’: No template name was provided', 0) end
local model = { title = tname, args = opts }
local ret, nss, ccs = {}, 0, ctx.itersep or ''
flush_params(ctx, function (key, val)
opts[1], ret[nss + 1], nss = val, ccs, nss + 2
ret[nss] = ctx.frame:expandTemplate(model)
end)
finalize_and_return_concatenated_list(ctx, ret, nss, 2)
return false
end
-- Syntax: #invoke:params|invoke_for_each_value|module name|[append 1]|[append
-- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param
-- n=value n]|[...]
library.invoke_for_each_value = function (ctx)
local opts = ctx.pipe
local mname, fname
if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end
if mname == nil then error(modulename ..
', ‘invoke_for_each_value’: No module name was provided', 0) end
if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end
if fname == nil then error(modulename ..
', ‘invoke_for_each_value’: No function name was provided', 0) end
local model = { title = 'Module:' .. mname, args = opts }
local mfunc = require(model.title)[fname]
local ret, nss, ccs = {}, 0, ctx.itersep or ''
remove_numeric_keys(opts, 1, 1)
flush_params(ctx, function (key, val)
opts[1], ret[nss + 1], nss = val, ccs, nss + 2
ret[nss] = mfunc(ctx.frame:newChild(model))
end)
finalize_and_return_concatenated_list(ctx, ret, nss, 2)
return false
end
-- Syntax: #invoke:params|magic_for_each_value|parser function|[append 1]
-- |[append 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named
-- param n=value n]|[...]
library.magic_for_each_value = function (ctx)
local opts = ctx.pipe
local magic
if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end
if magic == nil then error(modulename ..
', ‘magic_for_each_value’: No parser function was provided', 0) end
local ret, nss, ccs = {}, 0, ctx.itersep or ''
flush_params(ctx, function (key, val)
opts[1], ret[nss + 1], nss = val, ccs, nss + 2
ret[nss] = ctx.frame:callParserFunction(magic, opts)
end)
finalize_and_return_concatenated_list(ctx, ret, nss, 2)
return false
end
-- Syntax: #invoke:params|call_for_each_group|template name|[append 1]|[append
-- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param
-- n=value n]|[...]
library.call_for_each_group = function (ctx)
-- NOTE: `ctx.pipe` and `ctx.params` might be the original metatables!
local tmp
if ctx.pipe[1] ~= nil then tmp = ctx.pipe[1]:match'^%s*(.*%S)' end
if tmp == nil then error(modulename ..
', ‘call_for_each_group’: No template name was provided', 0) end
local model = { title = tmp }
local opts, ret, nss, ccs = {}, {}, 0, ctx.itersep or ''
for key, val in pairs(ctx.pipe) do
if type(key) == 'number' then opts[key - 1] = val
else opts[key] = val end
end
ctx.pipe = opts
ctx.params = make_groups(ctx.params)
flush_params(ctx, function (gid, group)
for key, val in pairs(opts) do group[key] = val end
group[0], model.args, ret[nss + 1], nss = gid, group, ccs,
nss + 2
ret[nss] = ctx.frame:expandTemplate(model)
end)
finalize_and_return_concatenated_list(ctx, ret, nss, 2)
return false
end
--[[ First-position-only modifiers ]]--
---------------------------------------
-- Syntax: #invoke:params|new|pipe to
static_iface.new = function (child_frame)
local ctx = context_new(child_frame)
ctx.pipe = copy_or_ref_table(ctx.opipe, false)
ctx.params = {}
main_loop(ctx, context_iterate(ctx, 1))
return ctx.text
end
--[[ First-position-only functions ]]--
---------------------------------------
-- Syntax: #invoke:params|self
static_iface.self = function (frame)
return frame:getParent():getTitle()
end
--[[ Public metatable of functions ]]--
---------------------------------------
return setmetatable({}, {
__index = function (_, query)
local fname = query:match'^%s*(.*%S)'
if fname == nil then error(modulename ..
': You must specify a function to call', 0) end
local func = static_iface[fname]
if func ~= nil then return func end
func = library[fname]
if func == nil then error(modulename ..
': The function ‘' .. fname .. '’ does not exist', 0) end
return function (child_frame)
local ctx = context_new(child_frame)
ctx.pipe = copy_or_ref_table(ctx.opipe, refpipe[fname])
ctx.params = copy_or_ref_table(ctx.oparams, refparams[fname])
main_loop(ctx, func)
return ctx.text
end
end
})
s0wwht3ty2l3u443tnfm9mh3z5pmpgj
363102
363096
2026-07-24T03:50:55Z
Grufo
6930
Update from [[d:Special:GoToLinkedPage/mediawikiwiki/Q122696746|master]] using [[mw:Synchronizer| #Synchronizer]]
363102
Scribunto
text/plain
require[[strict]]
--- ---
--- PRIVATE ENVIRONMENT ---
--- ________________________________ ---
--- ---
--[[ Abstract utilities ]]--
----------------------------
-- Helper function for `string.gsub()` (for managing zero-padded numbers)
local function zero_padded (str)
return ('%03d%s'):format(#str, str)
end
-- Helper function for `table.sort()` (for natural sorting)
local function natural_sort (var1, var2)
return var1:gsub('%d+', zero_padded) < var2:gsub('%d+', zero_padded)
end
-- Return a copy or a reference to a table
local function copy_or_ref_table (src, refonly)
if refonly then return src end
local newtab = {}
for key, val in pairs(src) do newtab[key] = val end
return newtab
end
-- Copy at most N items (of all kinds) from `src` to `dest` and return `dest`
local function copy_table_maxn (dest, src, len)
local idx = 1
for key, val in pairs(src) do
dest[key], idx = val, idx + 1
if idx > len then break end
end
return dest
end
-- Remove some numeric elements from a table, shifting everything to the left
local function remove_numeric_keys (tbl, idx, len)
local cache, tmp = {}, idx + len - 1
for key, val in pairs(tbl) do
if type(key) == 'number' and key >= idx then
if key > tmp then cache[key - len] = val end
tbl[key] = nil
end
end
for key, val in pairs(cache) do tbl[key] = val end
end
-- Make a reduced copy of a table (shifting in both directions if necessary)
local function copy_table_reduced (tbl, idx, len)
local ret, tmp = {}, idx + len - 1
if idx > 0 then
for key, val in pairs(tbl) do
if type(key) ~= 'number' or key < idx then
ret[key] = val
elseif key > tmp then ret[key - len] = val end
end
elseif tmp > 0 then
local nshift = 1 - idx
for key, val in pairs(tbl) do
if type(key) ~= 'number' then ret[key] = val
elseif key > tmp then ret[key - tmp] = val
elseif key < idx then ret[key + nshift] = val end
end
else
for key, val in pairs(tbl) do
if type(key) ~= 'number' or key > tmp then
ret[key] = val
elseif key < idx then ret[key + len] = val end
end
end
return ret
end
-- Make an expanded copy of a table (shifting in both directions if necessary)
local function copy_table_expanded (tbl, idx, len)
local ret, tmp = {}, idx + len - 1
if idx > 0 then
for key, val in pairs(tbl) do
if type(key) ~= 'number' or key < idx then
ret[key] = val
else ret[key + len] = val end
end
elseif tmp > 0 then
local nshift = idx - 1
for key, val in pairs(tbl) do
if type(key) ~= 'number' then ret[key] = val
elseif key > 0 then ret[key + tmp] = val
elseif key < 1 then ret[key + nshift] = val end
end
else
for key, val in pairs(tbl) do
if type(key) ~= 'number' or key > tmp then
ret[key] = val
else ret[key - len] = val end
end
end
return ret
end
-- Given a table, create two new tables containing the sorted list of keys
local function get_key_list_sorted (tbl, sort_fn)
local nums, words, nn, nw = {}, {}, 0, 0
for key, val in pairs(tbl) do
if type(key) == 'number' then
nn = nn + 1
nums[nn] = key
else
nw = nw + 1
words[nw] = key
end
end
table.sort(nums)
table.sort(words, sort_fn)
return nums, words, nn, nw
end
-- Parse a parameter name string and return it as a string or a number
local function get_parameter_name (par_str)
local ret = par_str:match'^%s*(.-)%s*$'
if ret ~= '0' and ret:find'^%-?[1-9]%d*$' == nil then return ret end
return tonumber(ret)
end
-- Move a key from a table to another, but only if under a different name and
-- always parsing numeric strings as numbers
local function steal_if_renamed (val, src, skey, dest, dkey)
local realkey = get_parameter_name(dkey)
if skey ~= realkey then dest[realkey], src[skey] = val, nil end
end
--[[ Public strings ]]--
------------------------
-- Special match keywords (functions and modifiers MUST avoid these names)
local mkeywords = {
['or'] = 0,
pattern = 1,
plain = 2,
strict = 3
}
-- Sort functions (functions and modifiers MUST avoid these names)
local sortfunctions = {
alphabetically = false,
naturally = natural_sort
}
-- Callback styles for the `mapping_*` and `renaming_*` class of modifiers
-- (functions and modifiers MUST avoid these names)
--[[
Meanings of the columns:
col[1] = Loop type (0-3)
col[2] = Number of module arguments that the style requires (1-3)
col[3] = Minimum number of sequential parameters passed to the callback
col[4] = Name of the callback parameter where to place each parameter name
col[5] = Name of the callback parameter where to place each parameter value
col[6] = Argument in the modifier's invocation that will override `col[4]`
col[7] = Argument in the modifier's invocation that will override `col[5]`
A value of `-1` indicates that no meaningful value is stored (i.e. `nil`)
]]--
local mapping_styles = {
names_and_values = { 3, 2, 2, 1, 2, -1, -1 },
values_and_names = { 3, 2, 2, 2, 1, -1, -1 },
values_only = { 1, 2, 1, -1, 1, -1, -1 },
names_only = { 2, 2, 1, 1, -1, -1, -1 },
names_and_values_as = { 3, 4, 0, -1, -1, 2, 3 },
names_only_as = { 2, 3, 0, -1, -1, 2, -1 },
values_only_as = { 1, 3, 0, -1, -1, -1, 2 },
blindly = { 0, 2, 0, -1, -1, -1, -1 }
}
-- Memory slots (functions and modifiers MUST avoid these names)
local memoryslots = {
h = 'header',
f = 'footer',
i = 'itersep',
l = 'lastsep',
n = 'ifngiven',
p = 'pairsep',
s = 'oxfordsep'
}
-- Possible trimming modes for the `parsing` modifier
local trim_parse_opts = {
trim_none = { false, false },
trim_positional = { false, true },
trim_named = { true, false },
trim_all = { true, true }
}
-- Possible string modes for the iteration separator in the `parsing` and
-- `reinterpreting` modifiers
local isep_parse_opts = {
splitter_pattern = false,
splitter_string = true
}
-- Possible string modes for the key-value separator in the `parsing` and
-- `reinterpreting` modifiers
local psep_parse_opts = {
setter_pattern = false,
setter_string = true
}
-- Possible position references for the `splicing` modifier
local position_references = {
add_nothing = 0,
add_smallest_number = 1,
add_last_of_sequence = 2,
add_largest_number = 3
}
-- Possible modes for the `reassigning` modifier
local a_modes = {
transfer = 0,
clone = 1,
rename = 2,
copy = 3,
sacrifice = 4,
provide = 5,
spare = 7
}
-- Functions and modifiers MUST avoid these names too: `here`, `in_substack`,
-- `let`, `expose`, `use`, `with_flushed_glue`, `without_flushed_glue`
-- `without_sorting`
--[[ Private constants ]]--
---------------------------
-- Hard-coded name of the module (to avoid going through `frame:getTitle()`)
local modulename = 'Module:Params'
-- The functions listed here declare that they don't need the `frame.args`
-- metatable to be copied into a regular table; if they are modifiers they also
-- guarantee that they will make their own (modified) copy available
local refpipe = {
call_for_each_group = true,
--coins = true,
count = true,
evaluating = true,
for_each = true,
list = true,
list_values = true,
list_maybe_with_names = true,
value_of = true
}
-- The functions listed here declare that they don't need the
-- `frame:getParent().args` metatable to be copied into a regular table; if
-- they are modifiers they also guarantee that they will make their own
-- (modified) copy available
local refparams = {
call_for_each_group = true,
combining = true,
combining_by_calling = true,
combining_values = true,
concat_and_call = true,
concat_and_invoke = true,
concat_and_magic = true,
count = true,
grouping_by_calling = true,
mixing_names_and_values = true,
keeping_at_most = true,
renaming_by_mixing = true,
renaming_to_sequence = true,
renaming_to_uppercase = true,
renaming_to_lowercase = true,
--renaming_to_values = true,
shifting = true,
splicing = true,
--swapping_names_and_values = true,
value_of = true,
with_name_matching = true
}
-- Maximum number of numeric parameters that can be filled, if missing (we
-- chose an arbitrary number for this constant; you can discuss about its
-- optimal value at Module talk:Params)
local maxfill = 1024
-- The private table of functions
local library = {}
-- Functions and modifiers that can only be invoked in first position
local static_iface = {}
--[[ Private functions ]]--
---------------------------
-- Create a new context
local function context_new (child_frame)
local main_frame = child_frame:getParent()
return {
frame = main_frame,
opipe = child_frame.args,
oparams = main_frame.args,
firstposonly = static_iface,
iterfunc = pairs,
sorttype = 0,
n_parents = 0,
n_children = 0,
n_available = maxfill
}
end
-- Move to the next action within the user-given list
local function context_iterate (ctx, n_forward)
local nextfn
if ctx.pipe[n_forward] ~= nil then
nextfn = ctx.pipe[n_forward]:match'^%s*(.*%S)'
end
if nextfn == nil then error(modulename ..
': You must specify a function to call', 0) end
if library[nextfn] == nil then
if ctx.firstposonly[nextfn] == nil then error(modulename ..
': The function ‘' .. nextfn .. '’ does not exist', 0)
else error(modulename .. ': The ‘' .. nextfn ..
'’ directive can only appear in first position', 0)
end
end
remove_numeric_keys(ctx.pipe, 1, n_forward)
return library[nextfn]
end
-- Main loop
local function main_loop (ctx, start_with)
local fn = start_with
repeat fn = fn(ctx) until not fn
if ctx.n_parents > 0 then error(modulename ..
': One or more ‘merging_substack’ directives are missing', 0) end
if ctx.n_children > 0 then error(modulename ..
', For some of the snapshots either the ‘flushing’ directive is missing or a group has not been properly closed with ‘merging_substack’', 0) end
end
-- Load a `setting`-like directive string into the `dest` table
local function set_strings_from_opts (dest, opts, start_from)
local cmd
if opts[start_from] == nil then return start_from - 1 end
cmd = opts[start_from]:gsub('%s+', ''):gsub('/+', '/')
:match'^/*(.*[^/])'
if cmd == nil then return start_from end
local vname, chr
local amap, sep, argc = {}, string.byte('/'), start_from + 1
for idx = 1, #cmd do
chr = cmd:byte(idx)
if chr == sep then
for key, val in ipairs(amap) do
dest[val], amap[key] = opts[argc], nil
end
argc = argc + 1
else
vname = memoryslots[string.char(chr)]
if vname == nil then error(modulename ..
', ‘setting’: Unknown slot ‘' ..
string.char(chr) .. '’', 0) end
table.insert(amap, vname)
end
end
for key, val in ipairs(amap) do dest[val] = opts[argc] end
return argc
end
-- Add a new stack of parameters to `ctx.children`
local function new_substack (ctx)
local currsnap, newparams = ctx.n_children + 1, {}
if ctx.children == nil then ctx.children = { newparams }
else ctx.children[currsnap] = newparams end
ctx.n_children = currsnap
return newparams
end
-- Parse a raw argument containing a `sortfunctions` directive, or
-- `'without_sorting'`, or `nil`
local function load_sort_opt (raw_arg)
if raw_arg == nil then return nil, 1, false end
local trarg = raw_arg:match'^%s*(.-)%s*$'
if trarg == 'without_sorting' then return nil, 2, false, trarg end
local tmp = sortfunctions[trarg]
if tmp == nil then return nil, 1, false, trarg end
return tmp or nil, 2, true, trarg
end
-- Parse optional user arguments of type `...|[let/use]|[...]|[let/use]|[...]|
-- [number of additional parameters]|[parameter 1]|[parameter 2]|[...]`
local function load_child_opts (src, start_from, append_after, params)
local tnamed, tmp1, tmp2
local pin, tbl, mem = start_from, {}, {}
while src[pin] ~= nil and src[pin + 1] ~= nil do
tmp1 = src[pin]:match'^%s*(.*%S)'
if tmp1 == 'let' and src[pin + 2] ~= nil then
tmp1 = get_parameter_name(src[pin + 1])
mem[tmp1], tbl[tmp1], pin = nil, src[pin + 2], pin + 3
--[[
elseif tmp1 == 'expose' then
tmp1 = get_parameter_name(src[pin + 1])
tmp2 = params[tmp1]
mem[tmp1], tbl[tmp1], pin = tmp2, tmp2, pin + 2
]]--
elseif tmp1 == 'use' and src[pin + 2] ~= nil then
tmp1 = get_parameter_name(src[pin + 2])
tmp2 = params[tmp1]
mem[tmp1], tbl[get_parameter_name(src[pin + 1])], pin =
tmp2, tmp2, pin + 3
else break end
end
local tnew = copy_or_ref_table(params, next(mem) == nil)
for key in pairs(mem) do tnew[key] = nil end
if pin ~= start_from then tnamed, tbl = tbl, {} end
tmp1 = tonumber(src[pin])
if tmp1 ~= nil and math.floor(tmp1) == tmp1 then
if tmp1 < 0 then tmp1 = -1 end
tmp2 = append_after - pin
for idx = pin + 1, pin + tmp1 do tbl[idx + tmp2] = src[idx] end
pin = pin + tmp1 + 1
end
if tnamed ~= nil then
for key, val in pairs(tnamed) do tbl[key] = val end
end
return tbl, pin, tnew, mem
end
-- Load the optional arguments of some of the `mapping_*` and `renaming_*`
-- class of modifiers
local function load_callback_opts (src, n_skip, default_style, params)
local style, shf
local tmp = src[n_skip + 1]
if tmp ~= nil then style = mapping_styles[tmp:match'^%s*(.-)%s*$'] end
if style == nil then style, shf = default_style, n_skip - 1
else shf = n_skip end
local n_exist, karg, varg = style[3], style[4], style[5]
tmp = style[6]
if tmp > -1 then
karg = src[tmp + shf]:match'^%s*(.-)%s*$'
if karg == '0' or karg:find'^%-?[1-9]%d*$' ~= nil then
karg = tonumber(karg)
n_exist = math.max(n_exist, karg)
end
end
tmp = style[7]
if tmp > -1 then
varg = src[tmp + shf]:match'^%s*(.-)%s*$'
if varg == '0' or varg:find'^%-?[1-9]%d*$' ~= nil then
varg = tonumber(varg)
n_exist = math.max(n_exist, varg)
end
end
local dest, argc, tnew, mem = load_child_opts(src, style[2] + shf,
n_exist, params)
tmp = style[1]
if (tmp == 3 or tmp == 2) and dest[karg] ~= nil then
tmp = tmp - 2 end
if (tmp == 3 or tmp == 1) and dest[varg] ~= nil then
tmp = tmp - 1 end
return dest, argc, tmp, karg, varg, tnew, mem
end
-- Parse the arguments of some of the `mapping_*` and `renaming_*` class of
-- modifiers
local function load_replace_args (opts, whoami)
if opts[1] == nil then error(modulename ..
', ‘' .. whoami .. '’: No pattern string was given', 0) end
if opts[2] == nil then error(modulename ..
', ‘' .. whoami .. '’: No replacement string was given', 0) end
local ptn, repl, nmax, argc = opts[1], opts[2], tonumber(opts[3]), 3
if nmax ~= nil or (opts[3] or ''):match'^%s*$' ~= nil then argc = 4 end
local flg = opts[argc]
if flg ~= nil then flg = mkeywords[flg:match'^%s*(.-)%s*$'] end
if flg == 0 then flg = nil elseif flg ~= nil then argc = argc + 1 end
return ptn, repl, nmax, flg, argc, (nmax ~= nil and nmax < 1) or
(flg == 3 and ptn == repl)
end
-- Parse the arguments of the `with_*_matching` class of modifiers
local function load_pattern_args (opts, whoami)
local keyw
local ptns, state, nptns, cnt = {}, 0, 0, 1
for _, val in ipairs(opts) do
if state == 0 then
nptns, state = nptns + 1, -1
ptns[nptns] = { val, false, false }
else
keyw = val:match'^%s*(.*%S)'
if keyw == nil or mkeywords[keyw] == nil or (
state > 0 and mkeywords[keyw] > 0
) then break
else
state = mkeywords[keyw]
if state > 1 then ptns[nptns][2] = true end
if state == 3 then ptns[nptns][3] = true end
end
end
cnt = cnt + 1
end
if state == 0 then error(modulename .. ', ‘' .. whoami ..
'’: No pattern was given', 0) end
return ptns, nptns, cnt
end
-- Load the optional arguments of the `parsing`, `reinterpreting` and
-- `evaluating` modifiers
local function load_parse_opts (opts, start_from, isp, psp)
local tmp
local optslots, noptslots, argc, trimn, trimu, iplain, pplain =
{ true, true, true }, 3, start_from, true, false, true, true
repeat
noptslots, tmp = noptslots - 1, opts[argc]
if tmp == nil then break end
tmp = tmp:match'^%s*(.-)%s*$'
if optslots[1] ~= nil and trim_parse_opts[tmp] ~= nil then
tmp = trim_parse_opts[tmp]
trimn, trimu, optslots[1] = tmp[1], tmp[2], nil
elseif optslots[2] ~= nil and isep_parse_opts[tmp] ~= nil then
argc = argc + 1
iplain, isp, optslots[2] = isep_parse_opts[tmp],
opts[argc], nil
elseif optslots[3] ~= nil and psep_parse_opts[tmp] ~= nil then
argc = argc + 1
pplain, psp, optslots[3] = psep_parse_opts[tmp],
opts[argc], nil
else break end
argc = argc + 1
until noptslots < 1
return isp, iplain, psp, pplain, trimn, trimu, argc
end
-- Map parameters' values using a custom callback and a referenced table
local value_maps = {
[0] = function (tbl, margs, karg, varg, fn)
for key in pairs(tbl) do tbl[key] = fn() end
end,
[1] = function (tbl, margs, karg, varg, fn)
for key, val in pairs(tbl) do
margs[varg] = val
tbl[key] = fn()
end
end,
[2] = function (tbl, margs, karg, varg, fn)
for key in pairs(tbl) do
margs[karg] = key
tbl[key] = fn()
end
end,
[3] = function (tbl, margs, karg, varg, fn)
for key, val in pairs(tbl) do
margs[karg], margs[varg] = key, val
tbl[key] = fn()
end
end
}
-- Private table for `map_names()`
local name_thieves = {
[0] = function (cache, tbl, rargs, karg, varg, fn)
for key, val in pairs(tbl) do
steal_if_renamed(val, tbl, key, cache, fn())
end
end,
[1] = function (cache, tbl, rargs, karg, varg, fn)
for key, val in pairs(tbl) do
rargs[varg] = val
steal_if_renamed(val, tbl, key, cache, fn())
end
end,
[2] = function (cache, tbl, rargs, karg, varg, fn)
for key, val in pairs(tbl) do
rargs[karg] = key
steal_if_renamed(val, tbl, key, cache, fn())
end
end,
[3] = function (cache, tbl, rargs, karg, varg, fn)
for key, val in pairs(tbl) do
rargs[karg], rargs[varg] = key, val
steal_if_renamed(val, tbl, key, cache, fn())
end
end
}
-- Map parameters' names using a custom callback and a referenced table
local function map_names (tbl, rargs, karg, varg, looptype, fn)
local cache = {}
name_thieves[looptype](cache, tbl, rargs, karg, varg, fn)
for key, val in pairs(cache) do tbl[key] = val end
end
-- Return a new table that contains `src` regrouped according to the numeric
-- suffixes in its keys
local function make_groups (src)
-- NOTE: `src` might be the original metatable!
local prefix, gid
local groups = {}
for key, val in pairs(src) do
-- `key` must only be a string or a number...
if type(key) == 'string' then
prefix, gid = key:match'^%s*(.-)%s*(%-?%d*)%s*$'
gid = tonumber(gid) or ''
else
prefix, gid = '', key
end
if groups[gid] == nil then groups[gid] = {} end
if prefix == '0' or prefix:find'^%-?[1-9]%d*$' ~= nil then
prefix = tonumber(prefix)
if prefix < 1 then prefix = prefix - 1 end
end
groups[gid][prefix] = val
end
return groups
end
-- Split into parts a string containing the `$#` and `$@` placeholders and
-- return the information as a skeleton table, a canvas table and a length
local function parse_placeholder_string (target)
local idx, s_pos, skel, canvas = 1, 1, {}, {}
local e_pos = string.find(target, '%$[@#]', 1, false)
while e_pos ~= nil do
canvas[idx] = target:sub(s_pos, e_pos - 1)
skel[idx + 1] = target:sub(e_pos, e_pos + 1) == '$@'
idx = idx + 2
s_pos = e_pos + 2
e_pos = string.find(target, '%$[@#]', s_pos, false)
end
if (s_pos > target:len()) then idx = idx - 1
else canvas[idx] = target:sub(s_pos) end
return skel, canvas, idx
end
-- Populate a table by parsing a parameter string (heavy lifting for `parsing`,
-- `reinterpreting` and `evaluating`)
local function parse_parameter_string (tbl, str, isp, ipl, psp, ppl, trn, tru)
local key, val, spos1, spos2, pos1, pos2
local pos3, idx, lenplone = 0, 1, #str + 1
if isp == nil or isp == '' then
if psp == nil or psp == '' then
if tru then tbl[idx] = str:match'^%s*(.-)%s*$'
else tbl[idx] = str end
return idx
end
spos1, spos2 = str:find(psp, 1, ppl)
if spos1 == nil then
key = idx
if tru then val = str:match'^%s*(.-)%s*$'
else val = str end
idx = idx + 1
else
key = get_parameter_name(str:sub(1, spos1 - 1))
val = str:sub(spos2 + 1)
if trn then val = val:match'^%s*(.-)%s*$' end
end
tbl[key] = val
return idx
end
if psp == nil or psp == '' then
repeat
pos1 = pos3 + 1
pos2, pos3 = str:find(isp, pos1, ipl)
val = str:sub(pos1, (pos2 or lenplone) - 1)
if tru then val = val:match'^%s*(.-)%s*$' end
tbl[idx], idx = val, idx + 1
until pos2 == nil
return idx
end
repeat
pos1 = pos3 + 1
pos2, pos3 = str:find(isp, pos1, ipl)
val = str:sub(pos1, (pos2 or lenplone) - 1)
spos1, spos2 = val:find(psp, 1, ppl)
if spos1 == nil then
key = idx
if tru then val = val:match'^%s*(.-)%s*$' end
idx = idx + 1
else
key = get_parameter_name(val:sub(1, spos1 - 1))
val = val:sub(spos2 + 1)
if trn then val = val:match'^%s*(.-)%s*$' end
end
tbl[key] = val
until pos2 == nil
return idx
end
-- Heavy lifting for `snapshotting` and `remembering`
local function make_child (ctx, src, whoami)
local len = tonumber(ctx.pipe[1])
if len == nil or len == 0 then
local stack = new_substack(ctx)
for key, val in pairs(src) do stack[key] = val end
return len == nil and 1 or 2
end
if len < 0 or math.floor(len) ~= len then error(modulename ..
', ‘' .. whoami .. '’: The number of parameters to copy must be an integer greater than zero', 0) end
copy_table_maxn(new_substack(ctx), src, len)
return 2
end
-- Heavy lifting for `setting_by_flushing`, `combining` and `combining_values`
local function set_strings_from_substack (ctx, dest, whoami)
if ctx.n_children < 1 then error(modulename ..
', ‘' .. whoami .. '’: There are no substacks to flush', 0) end
local currsnap = ctx.n_children
local stack = ctx.children[currsnap]
for key, val in pairs(memoryslots) do
if stack[key] ~= nil then dest[val] = stack[key] end
end
ctx.children[currsnap], ctx.n_children = nil, currsnap - 1
end
-- Heavy lifting for `combining` and `combining_values`
local function combine_parameters (ctx, keyval_fn, whoami)
-- NOTE: `ctx.params` might be the original metatable! This function
-- MUST create a copy of it before returning
local opts = ctx.pipe
if ctx.pipe[1] == nil then error(modulename ..
', ‘' .. whoami .. '’: No parameter name was provided', 0) end
local argc
local tbl, vars = ctx.params, {}
local sortfn, varsarg0, do_sort, tmp = load_sort_opt(opts[2])
if varsarg0 == 2 then tmp = opts[3] and opts[3]:match'^%s*(.-)%s*$' end
if tmp == 'with_flushed_glue' then
varsarg0 = varsarg0 + 1
argc = set_strings_from_opts(vars, opts, varsarg0 + 1)
set_strings_from_substack(ctx, vars, whoami)
else
if tmp == 'without_flushed_glue' then varsarg0 = varsarg0 + 1 end
argc = set_strings_from_opts(vars, opts, varsarg0 + 1)
end
if argc < varsarg0 then error(modulename ..
', ‘' .. whoami .. '’: No setting directive was given', 0) end
if next(tbl) == nil then
if vars.ifngiven ~= nil then ctx.params =
{ [get_parameter_name(ctx.pipe[1])] = vars.ifngiven }
elseif tbl == ctx.oparams then ctx.params = {} end
return argc
end
local cache, len
if do_sort then
local words
cache, words, len, tmp = get_key_list_sorted(tbl, sortfn)
for idx = 1, tmp do cache[len + idx] = words[idx] end
len = len + tmp
else
len, cache = 0, {}
for key in pairs(tbl) do
len = len + 1
cache[len] = key
end
end
local pmap, nss, kvs, pps = {}, 0, vars.pairsep or '', vars.itersep or ''
for idx = 1, len do
tmp, pmap[nss + 1] = cache[idx], pps
pmap[nss + 2] = keyval_fn(tmp, tbl[tmp], kvs)
nss = nss + 2
end
tmp = vars.oxfordsep or vars.lastsep
if tmp ~= nil and nss > 4 then pmap[nss - 1] = tmp
elseif nss > 2 and vars.lastsep ~= nil then
pmap[nss - 1] = vars.lastsep
end
pmap[1] = vars.header or ''
if vars.footer ~= nil then pmap[nss + 1] = vars.footer end
ctx.params = { [get_parameter_name(ctx.pipe[1])] = table.concat(pmap) }
return argc
end
-- Concatenate the numeric keys from the table of parameters to the numeric
-- keys from the table of options; non-numeric keys from the table of options
-- will prevail over colliding non-numeric keys from the table of parameters
local function concat_params (ctx)
local retval, tbl, nmax = {}, ctx.params, table.maxn(ctx.pipe)
if ctx.subset == 1 then
-- We need only the sequence
for key, val in ipairs(tbl) do retval[key + nmax] = val end
else
if ctx.subset == -1 then
for key in ipairs(tbl) do tbl[key] = nil end
end
for key, val in pairs(tbl) do
if type(key) == 'number' and key > 0 then
retval[key + nmax] = val
else retval[key] = val end
end
end
for key, val in pairs(ctx.pipe) do retval[key] = val end
return retval
end
-- Flush the parameters by calling a custom function for each value (after this
-- function has been invoked `ctx.params` will be no longer usable)
local function flush_params (ctx, fn)
local tbl = ctx.params
if ctx.subset == 1 then
for key, val in ipairs(tbl) do fn(key, val) end
return
end
if ctx.subset == -1 then
for key, val in ipairs(tbl) do tbl[key] = nil end
end
if ctx.sorttype > 0 then
local nums, words, nn, nw = get_key_list_sorted(tbl, natural_sort)
if ctx.sorttype == 2 then
for idx = 1, nw do fn(words[idx], tbl[words[idx]]) end
for idx = 1, nn do fn(nums[idx], tbl[nums[idx]]) end
return
end
for idx = 1, nn do fn(nums[idx], tbl[nums[idx]]) end
for idx = 1, nw do fn(words[idx], tbl[words[idx]]) end
return
end
if ctx.subset ~= -1 then
for key, val in ipairs(tbl) do
fn(key, val)
tbl[key] = nil
end
end
for key, val in pairs(tbl) do fn(key, val) end
end
-- Flush the parameters by calling one of two custom functions for each value
-- (after this function has been invoked `ctx.params` will be no longer usable)
local function mixed_flush_params (ctx, fn_seq, fn_oth)
if ctx.subset == 1 then
for key, val in ipairs(ctx.params) do fn_seq(key, val) end
return
end
if ctx.subset == -1 then
flush_params(ctx, fn_oth)
return
end
local tbl = ctx.params
if ctx.sorttype > 0 then
local nums, words, nn, nw = get_key_list_sorted(tbl, natural_sort)
local sequence = {}
for key, val in ipairs(tbl) do sequence[key] = val end
if ctx.sorttype == 2 then
for idx = 1, nw do fn_oth(words[idx], tbl[words[idx]]) end
end
for idx = 1, nn do
if sequence[nums[idx]] then fn_seq(nums[idx], sequence[nums[idx]])
else fn_oth(nums[idx], tbl[nums[idx]]) end
end
if ctx.sorttype ~= 2 then
for idx = 1, nw do fn_oth(words[idx], tbl[words[idx]]) end
end
return
end
for key, val in ipairs(tbl) do
fn_seq(key, val)
tbl[key] = nil
end
for key, val in pairs(tbl) do fn_oth(key, val) end
end
-- Finalize and return a concatenated list
local function finalize_and_return_concatenated_list (ctx, lst, len, modsize)
if len > 0 then
local tmp = ctx.oxfordsep or ctx.lastsep
if tmp ~= nil and len > modsize * 2 then
lst[len - modsize + 1] = tmp
elseif len > modsize and ctx.lastsep ~= nil then
lst[len - modsize + 1] = ctx.lastsep
end
lst[1] = ctx.header or ''
if ctx.footer ~= nil then lst[len + 1] = ctx.footer end
ctx.text = table.concat(lst)
else ctx.text = ctx.ifngiven or '' end
end
--- ---
--- PUBLIC ENVIRONMENT ---
--- ________________________________ ---
--- ---
--[[ Modifiers ]]--
-------------------
-- Syntax: #invoke:params|sequential|pipe to
library.sequential = function (ctx)
if ctx.subset == 1 then error(modulename ..
': The ‘sequential’ directive has been provided more than once', 0) end
if ctx.subset == -1 then error(modulename ..
': The two directives ‘non-sequential’ and ‘sequential’ are in contradiction with each other', 0) end
if ctx.sorttype > 0 then error(modulename ..
': The ‘all_sorted’ and ‘reassorted’ directives are redundant when followed by ‘sequential’', 0) end
ctx.iterfunc, ctx.subset = ipairs, 1
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|non-sequential|pipe to
library['non-sequential'] = function (ctx)
if ctx.subset == -1 then error(modulename ..
': The ‘non-sequential’ directive has been provided more than once', 0) end
if ctx.subset == 1 then error(modulename ..
': The two directives ‘sequential’ and ‘non-sequential’ are in contradiction with each other', 0) end
ctx.iterfunc, ctx.subset = pairs, -1
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|all_sorted|pipe to
library.all_sorted = function (ctx)
if ctx.sorttype == 1 then error(modulename ..
': The ‘all_sorted’ directive has been provided more than once', 0) end
if ctx.subset == 1 then error(modulename ..
': The ‘all_sorted’ directive is redundant after ‘sequential’', 0) end
if ctx.sorttype == 2 then error(modulename ..
': The two directives ‘reassorted’ and ‘sequential’ are in contradiction with each other', 0) end
ctx.sorttype = 1
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|reassorted|pipe to
library.reassorted = function (ctx)
if ctx.sorttype == 2 then error(modulename ..
': The ‘reassorted’ directive has been provided more than once', 0) end
if ctx.subset == 1 then error(modulename ..
': The ‘reassorted’ directive is redundant after ‘sequential’', 0) end
if ctx.sorttype == 1 then error(modulename ..
': The two directives ‘sequential’ and ‘reassorted’ are in contradiction with each other', 0) end
ctx.sorttype = 2
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|setting|directives|...|pipe to
library.setting = function (ctx)
local argc = set_strings_from_opts(ctx, ctx.pipe, 1)
if argc < 2 then error(modulename ..
', ‘setting’: No directive was given', 0) end
return context_iterate(ctx, argc + 1)
end
-- Syntax: #invoke:params|scoring|new parameter name|[container]|pipe to
library.scoring = function (ctx)
if ctx.pipe[1] == nil then error(modulename ..
', ‘scoring’: No parameter name was provided', 0) end
local tmp
local retval, opts = 0, ctx.pipe
for _ in pairs(ctx.params) do retval = retval + 1 end
if opts[2] ~= nil then tmp = opts[2]:match'^%s*(.*%S)' end
if tmp == 'in_substack' then
new_substack(ctx)[get_parameter_name(opts[1])] = tostring(retval)
return context_iterate(ctx, 3)
end
ctx.params[get_parameter_name(opts[1])] = tostring(retval)
return context_iterate(ctx, tmp == 'here' and 3 or 2)
end
-- Syntax: #invoke:params|squeezing|pipe to
library.squeezing = function (ctx)
local store, indices, tbl, newlen = {}, {}, ctx.params, 0
for key, val in pairs(tbl) do
if type(key) == 'number' then
newlen = newlen + 1
indices[newlen], store[key], tbl[key] = key, val, nil
end
end
table.sort(indices)
for idx = 1, newlen do tbl[idx] = store[indices[idx]] end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|filling_the_gaps|pipe to
library.filling_the_gaps = function (ctx)
local newval, tbl, tmp, nmin, nmax, nnums =
ctx.pipe[1], ctx.params, {}, 1, nil, -1
if newval == nil then error(modulename ..
', ‘filling_the_gaps’: No value was provided', 0) end
for key, val in pairs(tbl) do
if type(key) == 'number' then
if nmax == nil then
if key < nmin then nmin = key end
nmax = key
elseif key > nmax then nmax = key
elseif key < nmin then nmin = key end
tmp[key], nnums = val, nnums + 1
end
end
if nmax ~= nil and nmax - nmin > nnums then
ctx.n_available = ctx.n_available + nmin + nnums - nmax
if ctx.n_available < 0 then error(modulename ..
', ‘filling_the_gaps’: It is possible to fill at most ' ..
tostring(maxfill) .. ' parameters', 0) end
for idx = nmin, nmax, 1 do tbl[idx] = newval end
for key, val in pairs(tmp) do tbl[key] = val end
end
return context_iterate(ctx, 2)
end
-- Syntax: #invoke:params|clearing|pipe to
library.clearing = function (ctx)
local tbl, numerics = ctx.params, {}
for key, val in pairs(tbl) do
if type(key) == 'number' then
numerics[key], tbl[key] = val, nil
end
end
for key, val in ipairs(numerics) do tbl[key] = val end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|cutting|left cut|right cut|pipe to
library.cutting = function (ctx)
local lcut = tonumber(ctx.pipe[1])
if lcut == nil or math.floor(lcut) ~= lcut then error(modulename ..
', ‘cutting’: Left cut must be an integer number', 0) end
local rcut = tonumber(ctx.pipe[2])
if rcut == nil or math.floor(rcut) ~= rcut then error(modulename ..
', ‘cutting’: Right cut must be an integer number', 0) end
local tbl = ctx.params
local len = #tbl
if lcut < 0 then lcut = len + lcut end
if rcut < 0 then rcut = len + rcut end
local tot = lcut + rcut
if tot > 0 then
local cache = {}
if tot >= len then
for key in ipairs(tbl) do tbl[key] = nil end
tot = len
else
for idx = len - rcut + 1, len, 1 do tbl[idx] = nil end
for idx = 1, lcut, 1 do tbl[idx] = nil end
end
for key, val in pairs(tbl) do
if type(key) == 'number' and key > 0 then
if key > len then cache[key - tot] = val
else cache[key - lcut] = val end
tbl[key] = nil
end
end
for key, val in pairs(cache) do tbl[key] = val end
end
return context_iterate(ctx, 3)
end
-- Syntax: #invoke:params|cropping|left crop|right crop|pipe to
library.cropping = function (ctx)
local lcut = tonumber(ctx.pipe[1])
if lcut == nil or math.floor(lcut) ~= lcut then error(modulename ..
', ‘cropping’: Left crop must be an integer number', 0) end
local rcut = tonumber(ctx.pipe[2])
if rcut == nil or math.floor(rcut) ~= rcut then error(modulename ..
', ‘cropping’: Right crop must be an integer number', 0) end
local tbl = ctx.params
local nmin, nmax
for key in pairs(tbl) do
if type(key) == 'number' then
if nmin == nil then nmin, nmax = key, key
elseif key > nmax then nmax = key
elseif key < nmin then nmin = key end
end
end
if nmin ~= nil then
local len = nmax - nmin + 1
if lcut < 0 then lcut = len + lcut end
if rcut < 0 then rcut = len + rcut end
if lcut + rcut - len > -1 then
for key in pairs(tbl) do
if type(key) == 'number' then tbl[key] = nil end
end
elseif lcut + rcut > 0 then
for idx = nmax - rcut + 1, nmax do tbl[idx] = nil end
for idx = nmin, nmin + lcut - 1 do tbl[idx] = nil end
local lshift = nmin + lcut - 1
if lshift > 0 then
for idx = lshift + 1, nmax, 1 do
tbl[idx - lshift], tbl[idx] =
tbl[idx], nil
end
end
end
end
return context_iterate(ctx, 3)
end
-- Syntax: #invoke:params|purging|start offset|length|pipe to
library.purging = function (ctx)
local idx = tonumber(ctx.pipe[1])
if idx == nil or math.floor(idx) ~= idx then error(modulename ..
', ‘purging’: Start offset must be an integer number', 0) end
local len = tonumber(ctx.pipe[2])
if len == nil or math.floor(len) ~= len then error(modulename ..
', ‘purging’: Length must be an integer number', 0) end
local tbl = ctx.params
if len < 1 then
len = len + table.maxn(tbl)
if idx > len then return context_iterate(ctx, 3) end
len = len - idx + 1
end
ctx.params = copy_table_reduced(tbl, idx, len)
return context_iterate(ctx, 3)
end
-- Syntax: #invoke:params|backpurging|start offset|length|pipe to
library.backpurging = function (ctx)
local last = tonumber(ctx.pipe[1])
if last == nil or math.floor(last) ~= last then error(modulename ..
', ‘backpurging’: Start offset must be an integer number', 0) end
local len = tonumber(ctx.pipe[2])
if len == nil or math.floor(len) ~= len then error(modulename ..
', ‘backpurging’: Length must be an integer number', 0) end
local idx
local tbl = ctx.params
if len > 0 then
idx = last - len + 1
else
for key in pairs(tbl) do
if type(key) == 'number' and (idx == nil or
key < idx) then idx = key end
end
if idx == nil then return context_iterate(ctx, 3) end
idx = idx - len
if last < idx then return context_iterate(ctx, 3) end
len = last - idx + 1
end
ctx.params = copy_table_reduced(ctx.params, idx, len)
return context_iterate(ctx, 3)
end
-- Syntax: #invoke:params|shifting|addend|pipe to
library.shifting = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local nshift = tonumber(ctx.pipe[1])
if nshift == nil or nshift == 0 or math.floor(nshift) ~= nshift then
error(modulename .. ', ‘shifting’: A non-zero integer number must be provided', 0) end
local tbl = {}
for key, val in pairs(ctx.params) do
if type(key) == 'number' then tbl[key + nshift] = val
else tbl[key] = val end
end
ctx.params = tbl
return context_iterate(ctx, 2)
end
-- Syntax: #invoke:params|reversing_numeric_names|pipe to
library.reversing_numeric_names = function (ctx)
local tbl, numerics, nmax = ctx.params, {}, 0
for key, val in pairs(tbl) do
if type(key) == 'number' then
numerics[key], tbl[key] = val, nil
if key > nmax then nmax = key end
end
end
for key, val in pairs(numerics) do tbl[nmax - key + 1] = val end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|pivoting_numeric_names|pipe to
--[[
library.pivoting_numeric_names = function (ctx)
local tbl = ctx.params
local shift = #tbl + 1
if shift < 2 then return library.reversing_numeric_names(ctx) end
local numerics = {}
for key, val in pairs(tbl) do
if type(key) == 'number' then
numerics[key] = val
tbl[key] = nil
end
end
for key, val in pairs(numerics) do tbl[shift - key] = val end
return context_iterate(ctx, 1)
end
]]--
-- Syntax: #invoke:params|mirroring_numeric_names|pipe to
--[[
library.mirroring_numeric_names = function (ctx)
local nmax, nmin
local tbl, numerics = ctx.params, {}
for key, val in pairs(tbl) do
if type(key) == 'number' then
numerics[key] = val
tbl[key] = nil
if nmax == nil then nmin, nmax = key, key
elseif key > nmax then nmax = key
elseif key < nmin then nmin = key end
end
end
for key, val in pairs(numerics) do tbl[nmax + nmin - key] = val end
return context_iterate(ctx, 1)
end
]]--
-- Syntax: #invoke:params|swapping_numeric_names|pipe to
--[[
library.swapping_numeric_names = function (ctx)
local tmp
local tbl, cache, nsize = ctx.params, {}, 0
for key in pairs(tbl) do
if type(key) == 'number' then
nsize = nsize + 1
cache[nsize] = key
end
end
table.sort(cache)
for idx = math.floor(nsize / 2), 1, -1 do
tmp = tbl[cache[idx] ]
tbl[cache[idx] ] = tbl[cache[nsize - idx + 1] ]
tbl[cache[nsize - idx + 1] ] = tmp
end
return context_iterate(ctx, 1)
end
]]--
-- Syntax: #invoke:params|sorting_sequential_values|[criterion]|pipe to
library.sorting_sequential_values = function (ctx)
local sortfn
if ctx.pipe[1] ~= nil then
sortfn = sortfunctions[ctx.pipe[1]:match'^%s*(.-)%s*$']
end
if sortfn then table.sort(ctx.params, sortfn)
else table.sort(ctx.params) end -- i.e. either `false` or `nil`
if sortfn == nil then return context_iterate(ctx, 1) end
return context_iterate(ctx, 2)
end
-- Syntax: #invoke:params|splicing|[add to position]|position|increment|
-- [number of elements to write]|...|pipe to
library.splicing = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local tmp2, argc, pos, refp
local opts, tbl = ctx.pipe, ctx.params
local tmp1 = opts[1]
if tmp1 ~= nil then
tmp2 = tonumber(tmp1)
if tmp2 == nil or math.floor(tmp2) ~= tmp2 then
pos, argc, tmp2 = tonumber(opts[2]), 4,
tmp1:match'^%s*(.*%S)'
if tmp2 ~= nil then
refp = position_references[tmp2]
if refp == nil then error(modulename ..
', ‘splicing’: ‘' .. tostring(tmp2) ..
'’ is not a valid first argument', 0) end
else refp = 0 end
else pos, argc, refp = tmp2, 3, 0 end
else pos, argc, refp = tonumber(opts[2]), 4, 0 end
if pos == nil or math.floor(pos) ~= pos then error(modulename ..
', ‘splicing’: The position must be an integer number', 0) end
local len = tonumber(opts[argc - 1])
if len == nil or math.floor(len) ~= len then error(modulename ..
', ‘splicing’: The increment must be an integer number', 0) end
local insn = tonumber(opts[argc])
if len == 0 and (insn == nil or insn < 1) then error(modulename ..
', ‘splicing’: When the increment is zero the number of elements to write cannot be zero', 0) end
if refp == 2 then
for _ in ipairs(tbl) do pos = pos + 1 end
refp = 0
end
tmp1, tmp2 = nil, nil
if refp ~= 0 or len ~= 0 then
for key, val in pairs(tbl) do
if type(key) == 'number' then
if tmp1 == nil then tmp1, tmp2 = key, key
elseif key < tmp1 then tmp1 = key
elseif key > tmp2 then tmp2 = key end
end
end
end
if tmp2 == nil then len = 0
elseif refp == 3 then pos = pos + tmp2
elseif refp == 1 then pos = pos + tmp1 end
if len > 0 and pos + len > tmp1 and pos <= tmp2 then
tbl = copy_table_expanded(tbl, pos, len)
elseif len < 0 and pos - len > tmp1 and pos <= tmp2 then
tbl = copy_table_reduced(tbl, pos, -len)
else tbl = copy_or_ref_table(tbl, tbl ~= ctx.oparams) end
ctx.params = tbl
if insn == nil or insn < 0 or math.floor(insn) ~= insn then
return context_iterate(ctx, argc)
end
tmp1 = argc - pos + 1
for key = pos, pos + insn - 1 do tbl[key] = opts[key + tmp1] end
return context_iterate(ctx, argc + insn + 1)
end
-- Syntax: #invoke:params|imposing|name|value|pipe to
library.imposing = function (ctx)
if ctx.pipe[1] == nil then error(modulename ..
', ‘imposing’: Missing parameter name to impose', 0) end
ctx.params[get_parameter_name(ctx.pipe[1])] = ctx.pipe[2]
return context_iterate(ctx, 3)
end
-- Syntax: #invoke:params|providing|name|value|pipe to
library.providing = function (ctx)
if ctx.pipe[1] == nil then error(modulename ..
', ‘providing’: Missing parameter name to provide', 0) end
local key = get_parameter_name(ctx.pipe[1])
if ctx.params[key] == nil then ctx.params[key] = ctx.pipe[2] end
return context_iterate(ctx, 3)
end
-- Syntax: #invoke:params|reassigning|source|destination|[mode]|pipe to
library.reassigning = function (ctx)
local opts, tbl = ctx.pipe, ctx.params
if opts[1] == nil then error(modulename ..
', ‘reassigning’: Missing source parameter', 0) end
if opts[2] == nil then error(modulename ..
', ‘reassigning’: Missing destination parameter', 0) end
local mode, argc
local src = get_parameter_name(opts[1])
local val = tbl[src]
if opts[3] ~= nil then mode = a_modes[opts[3]:match'^%s*(.-)%s*$'] end
if mode == nil then mode, argc = 0, 3 else argc = 4 end
if val == nil and mode > 1 then return context_iterate(ctx, argc) end
local dest = get_parameter_name(opts[2])
local tmp = tbl[dest] == nil
if mode % 2 == 0 or (mode == 7 and tmp) then tbl[src] = nil end
if tmp or mode < 4 then tbl[dest] = val end
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|discarding|name|[how many]|pipe to
library.discarding = function (ctx)
if ctx.pipe[1] == nil then error(modulename ..
', ‘discarding’: Missing parameter name to discard', 0) end
local len = tonumber(ctx.pipe[2])
if len == nil then
ctx.params[get_parameter_name(ctx.pipe[1])] = nil
return context_iterate(ctx, 2)
end
local key = tonumber(ctx.pipe[1])
if key == nil or math.floor(key) ~= key then error(modulename ..
', ‘discarding’: A range was provided, but the initial parameter name is not an integer number', 0) end
if len < 1 or math.floor(len) ~= len then error(modulename ..
', ‘discarding’: A range can only be an integer number greater than zero', 0) end
for idx = key, key + len - 1 do ctx.params[idx] = nil end
return context_iterate(ctx, 3)
end
-- Syntax: #invoke:params|excluding_non-numeric_names|pipe to
library['excluding_non-numeric_names'] = function (ctx)
local tmp = ctx.params
for key, val in pairs(tmp) do
if type(key) ~= 'number' then tmp[key] = nil end
end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|excluding_numeric_names|pipe to
library.excluding_numeric_names = function (ctx)
local tmp = ctx.params
for key, val in pairs(tmp) do
if type(key) == 'number' then tmp[key] = nil end
end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|with_name_matching|target 1|[plain flag 1]|[or]
-- |[target 2]|[plain flag 2]|[or]|[...]|[target N]|[plain flag
-- N]|pipe to
library.with_name_matching = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local tmp, ptn
local targets, nptns, argc = load_pattern_args(ctx.pipe,
'with_name_matching')
local tbl, newparams = ctx.params, {}
for idx = 1, nptns do
ptn = targets[idx]
if ptn[3] then
tmp = ptn[1]
if tmp == '0' or tmp:find'^%-?[1-9]%d*$' ~= nil then
tmp = tonumber(tmp)
end
newparams[tmp] = tbl[tmp]
else
for key, val in pairs(tbl) do
if tostring(key):find(ptn[1], 1, ptn[2]) then
newparams[key] = val
end
end
end
end
ctx.params = newparams
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|with_name_not_matching|target 1|[plain flag 1]
-- |[and]|[target 2]|[plain flag 2]|[and]|[...]|[target N]|[plain
-- flag N]|pipe to
library.with_name_not_matching = function (ctx)
local targets, nptns, argc = load_pattern_args(ctx.pipe,
'with_name_not_matching')
local tbl = ctx.params
if nptns == 1 and targets[1][3] then
local tmp = targets[1][1]
if tmp == '0' or tmp:find'^%-?[1-9]%d*$' ~= nil then
tbl[tonumber(tmp)] = nil
else tbl[tmp] = nil end
return context_iterate(ctx, argc)
end
local yesmatch, ptn
for key in pairs(tbl) do
yesmatch = true
for idx = 1, nptns do
ptn = targets[idx]
if ptn[3] then
if tostring(key) ~= ptn[1] then
yesmatch = false
break
end
elseif not tostring(key):find(ptn[1], 1, ptn[2]) then
yesmatch = false
break
end
end
if yesmatch then tbl[key] = nil end
end
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|with_value_matching|target 1|[plain flag 1]|[or]
-- |[target 2]|[plain flag 2]|[or]|[...]|[target N]|[plain flag
-- N]|pipe to
library.with_value_matching = function (ctx)
local nomatch, ptn
local tbl = ctx.params
local targets, nptns, argc = load_pattern_args(ctx.pipe,
'with_value_matching')
for key, val in pairs(tbl) do
nomatch = true
for idx = 1, nptns do
ptn = targets[idx]
if ptn[3] then
if val == ptn[1] then
nomatch = false
break
end
elseif val:find(ptn[1], 1, ptn[2]) then
nomatch = false
break
end
end
if nomatch then tbl[key] = nil end
end
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|with_value_not_matching|target 1|[plain flag 1]
-- |[and]|[target 2]|[plain flag 2]|[and]|[...]|[target N]|[plain
-- flag N]|pipe to
library.with_value_not_matching = function (ctx)
local yesmatch, ptn
local tbl = ctx.params
local targets, nptns, argc = load_pattern_args(ctx.pipe,
'with_value_not_matching')
for key, val in pairs(tbl) do
yesmatch = true
for idx = 1, nptns do
ptn = targets[idx]
if ptn[3] then
if val ~= ptn[1] then
yesmatch = false
break
end
elseif not val:find(ptn[1], 1, ptn[2]) then
yesmatch = false
break
end
end
if yesmatch then tbl[key] = nil end
end
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|keeping_at_most|number of parameters to pick|pipe to
library.keeping_at_most = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local len = tonumber(ctx.pipe[1])
if len == nil or len < 1 or math.floor(len) ~= len then error(modulename ..
', ‘keeping_at_most’: The number of parameters to keep must be an integer greater than zero', 0) end
ctx.params = copy_table_maxn({}, ctx.params, len)
return context_iterate(ctx, 2)
end
-- Syntax: #invoke:params|trimming_values|pipe to
library.trimming_values = function (ctx)
local tbl = ctx.params
for key, val in pairs(tbl) do tbl[key] = val:match'^%s*(.-)%s*$' end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|mapping_to_lowercase|pipe to
library.mapping_to_lowercase = function (ctx)
local tbl = ctx.params
for key, val in pairs(tbl) do tbl[key] = val:lower() end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|mapping_to_uppercase|pipe to
library.mapping_to_uppercase = function (ctx)
local tbl = ctx.params
for key, val in pairs(tbl) do tbl[key] = val:upper() end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|mapping_by_calling|template name|[call
-- style]|[let/use]|[...]|[let/use]|[...]|[number of additional
-- parameters]|[parameter 1]|[parameter 2]|[...]|[parameter N]|pipe to
library.mapping_by_calling = function (ctx)
local tname
local opts = ctx.pipe
if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end
if tname == nil then error(modulename ..
', ‘mapping_by_calling’: No template name was provided', 0) end
local margs, argc, looptype, karg, varg, tbl, mem =
load_callback_opts(opts, 1, mapping_styles.values_only, ctx.params)
local model = { title = tname, args = margs }
value_maps[looptype](tbl, margs, karg, varg, function ()
return ctx.frame:expandTemplate(model)
end)
for key, val in pairs(mem) do tbl[key] = val end
ctx.params = tbl
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|mapping_by_invoking|module name|function name|[call
-- style]|[let/use]|[...]|[let/use]|[...]|[number of additional
-- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to
library.mapping_by_invoking = function (ctx)
local mname, fname
local opts = ctx.pipe
if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end
if mname == nil then error(modulename ..
', ‘mapping_by_invoking’: No module name was provided', 0) end
if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end
if fname == nil then error(modulename ..
', ‘mapping_by_invoking’: No function name was provided', 0) end
local margs, argc, looptype, karg, varg, tbl, mem =
load_callback_opts(opts, 2, mapping_styles.values_only, ctx.params)
local model = { title = 'Module:' .. mname, args = margs }
local mfunc = require(model.title)[fname]
if mfunc == nil then error(modulename ..
', ‘mapping_by_invoking’: The function ‘' .. fname ..
'’ does not exist', 0) end
value_maps[looptype](tbl, margs, karg, varg, function ()
return tostring(mfunc(ctx.frame:newChild(model)))
end)
for key, val in pairs(mem) do tbl[key] = val end
ctx.params = tbl
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|mapping_by_magic|parser function|[call
-- style]|[let/use]|[...]|[let/use]|[...]|[number of additional
-- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to
library.mapping_by_magic = function (ctx)
local magic
local opts = ctx.pipe
if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end
if magic == nil then error(modulename ..
', ‘mapping_by_magic’: No parser function was provided', 0) end
local margs, argc, looptype, karg, varg, tbl, mem =
load_callback_opts(opts, 1, mapping_styles.values_only, ctx.params)
value_maps[looptype](tbl, margs, karg, varg, function ()
return ctx.frame:callParserFunction(magic, margs)
end)
for key, val in pairs(mem) do tbl[key] = val end
ctx.params = tbl
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|mapping_by_replacing|target|replace|[count]|[plain
-- flag]|pipe to
library.mapping_by_replacing = function (ctx)
local ptn, repl, nmax, flg, argc, die =
load_replace_args(ctx.pipe, 'mapping_by_replacing')
if die then return context_iterate(ctx, argc) end
local tbl = ctx.params
if flg == 3 then
for key, val in pairs(tbl) do
if val == ptn then tbl[key] = repl end
end
else
if flg == 2 then
-- Copied from Module:String's `str._escapePattern()`
ptn = ptn:gsub('[%(%)%.%%%+%-%*%?%[%^%$%]]', '%%%0')
end
for key, val in pairs(tbl) do
tbl[key] = val:gsub(ptn, repl, nmax)
end
end
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|mapping_by_mixing|mixing string|pipe to
library.mapping_by_mixing = function (ctx)
if ctx.pipe[1] == nil then error(modulename ..
', ‘mapping_by_mixing’: No mixing string was provided', 0) end
local tbl, mix = ctx.params, ctx.pipe[1]
if mix == '$#' then
for key in pairs(tbl) do tbl[key] = tostring(key) end
return context_iterate(ctx, 2)
end
local skel, cnv, n_parts = parse_placeholder_string(mix)
for key, val in pairs(tbl) do
for idx = 2, n_parts, 2 do
if skel[idx] then cnv[idx] = val
else cnv[idx] = tostring(key) end
end
tbl[key] = table.concat(cnv)
end
return context_iterate(ctx, 2)
end
-- Syntax: #invoke:params|mapping_to_names|pipe to
--[[
library.mapping_to_names = function (ctx)
local tbl = ctx.params
for key in pairs(tbl) do tbl[key] = tostring(key) end
return context_iterate(ctx, 1)
end
]]--
-- Syntax: #invoke:params|renaming_to_lowercase|pipe to
library.renaming_to_lowercase = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local cache = {}
for key, val in pairs(ctx.params) do
if type(key) == 'string' then cache[key:lower()] = val else
cache[key] = val end
end
ctx.params = cache
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|renaming_to_uppercase|pipe to
library.renaming_to_uppercase = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local cache = {}
for key, val in pairs(ctx.params) do
if type(key) == 'string' then cache[key:upper()] = val else
cache[key] = val end
end
ctx.params = cache
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|renaming_to_sequence|[sort order]|pipe to
library.renaming_to_sequence = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local cache, len
local tbl = ctx.params
local sortfn, argc, do_sort = load_sort_opt(ctx.pipe[1])
if do_sort then
local words, wl
cache, words, len, wl = get_key_list_sorted(tbl, sortfn)
for idx = 1, len do cache[idx] = tbl[cache[idx]] end
for idx = 1, wl do cache[len + idx] = tbl[words[idx]] end
else
len, cache = 0, {}
for _, val in pairs(tbl) do
len = len + 1
cache[len] = val
end
end
ctx.params = cache
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|renaming_by_calling|template name|[call
-- style]|[let/use]|[...]|[let/use]|[...]|[number of additional
-- parameters]|[parameter 1]|[parameter 2]|[...]|[parameter N]|pipe to
library.renaming_by_calling = function (ctx)
local tname
local opts = ctx.pipe
if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end
if tname == nil then error(modulename ..
', ‘renaming_by_calling’: No template name was provided', 0) end
local rargs, argc, looptype, karg, varg, tbl, mem =
load_callback_opts(opts, 1, mapping_styles.names_only, ctx.params)
local model = { title = tname, args = rargs }
map_names(tbl, rargs, karg, varg, looptype, function ()
return ctx.frame:expandTemplate(model)
end)
for key, val in pairs(mem) do tbl[key] = val end
ctx.params = tbl
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|renaming_by_invoking|module name|function
-- name|[call style]|[let/use]|[...]|[let/use]|[...]|[number of
-- additional arguments]|[argument 1]|[argument 2]|[...]|[argument
-- N]|pipe to
library.renaming_by_invoking = function (ctx)
local mname, fname
local opts = ctx.pipe
if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end
if mname == nil then error(modulename ..
', ‘renaming_by_invoking’: No module name was provided', 0) end
if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end
if fname == nil then error(modulename ..
', ‘renaming_by_invoking’: No function name was provided', 0) end
local rargs, argc, looptype, karg, varg, tbl, mem =
load_callback_opts(opts, 2, mapping_styles.names_only, ctx.params)
local model = { title = 'Module:' .. mname, args = rargs }
local mfunc = require(model.title)[fname]
if mfunc == nil then error(modulename ..
', ‘renaming_by_invoking’: The function ‘' .. fname ..
'’ does not exist', 0) end
map_names(tbl, rargs, karg, varg, looptype, function ()
return tostring(mfunc(ctx.frame:newChild(model)))
end)
for key, val in pairs(mem) do tbl[key] = val end
ctx.params = tbl
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|renaming_by_magic|parser function|[call
-- style]|[let/use]|[...]|[let/use]|[...]|[number of additional
-- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to
library.renaming_by_magic = function (ctx)
local opts = ctx.pipe
local magic
if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end
if magic == nil then error(modulename ..
', ‘renaming_by_magic’: No parser function was provided', 0) end
local rargs, argc, looptype, karg, varg, tbl, mem =
load_callback_opts(opts, 1, mapping_styles.names_only, ctx.params)
map_names(tbl, rargs, karg, varg, looptype, function ()
return ctx.frame:callParserFunction(magic, rargs)
end)
for key, val in pairs(mem) do tbl[key] = val end
ctx.params = tbl
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|renaming_by_replacing|target|replace|[count]|[plain
-- flag]|pipe to
library.renaming_by_replacing = function (ctx)
local ptn, repl, nmax, flg, argc, die =
load_replace_args(ctx.pipe, 'renaming_by_replacing')
if die then return context_iterate(ctx, argc) end
local tbl = ctx.params
if flg == 3 then
ptn = get_parameter_name(ptn)
local val = tbl[ptn]
if val ~= nil then
tbl[ptn], tbl[get_parameter_name(repl)] = nil, val
end
else
if flg == 2 then
-- Copied from Module:String's `str._escapePattern()`
ptn = ptn:gsub('[%(%)%.%%%+%-%*%?%[%^%$%]]', '%%%0')
end
local cache = {}
for key, val in pairs(tbl) do
steal_if_renamed(val, tbl, key, cache,
tostring(key):gsub(ptn, repl, nmax))
end
for key, val in pairs(cache) do tbl[key] = val end
end
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|renaming_by_mixing|mixing string|pipe to
library.renaming_by_mixing = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
if ctx.pipe[1] == nil then error(modulename ..
', ‘renaming_by_mixing’: No mixing string was provided', 0) end
local mix = ctx.pipe[1]:match'^%s*(.-)%s*$'
local cache = {}
if mix == '$@' then
for _, val in pairs(ctx.params) do
cache[get_parameter_name(val)] = val
end
else
local skel, canvas, n_parts = parse_placeholder_string(mix)
for key, val in pairs(ctx.params) do
for idx = 2, n_parts, 2 do
if skel[idx] then canvas[idx] = val
else canvas[idx] = tostring(key) end
end
cache[get_parameter_name(table.concat(canvas))] = val
end
end
ctx.params = cache
return context_iterate(ctx, 2)
end
-- Syntax: #invoke:params|renaming_to_values|pipe to
--[[
library.renaming_to_values = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local cache = {}
for _, val in pairs(ctx.params) do cache[val] = val end
ctx.params = cache
return context_iterate(ctx, 1)
end
]]--
-- Syntax: #invoke:params|grouping_by_calling|template
-- name|[let/use]|[...]|[let/use]|[...]|[number of additional
-- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to
library.grouping_by_calling = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local tmp, argc, tbl, mem = load_child_opts(ctx.pipe, 2, 0, ctx.params)
local gargs = {}
for key, val in pairs(tmp) do
if type(key) == 'number' and key < 1 then gargs[key - 1] = val
else gargs[key] = val end
end
tmp = ctx.pipe[1]
if tmp ~= nil then tmp = tmp:match'^%s*(.*%S)' end
if tmp == nil then error(modulename ..
', ‘grouping_by_calling’: No template name was provided', 0) end
local model = { title = tmp }
local groups = make_groups(tbl)
for gid, group in pairs(groups) do
for key, val in pairs(gargs) do group[key] = val end
group[0], model.args = gid, group
groups[gid] = ctx.frame:expandTemplate(model)
end
for key, val in pairs(mem) do groups[key] = val end
ctx.params = groups
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|parsing|string to parse|[trim flag]|[iteration
-- delimiter setter]|[...]|[key-value delimiter setter]|[...]|pipe to
library.parsing = function (ctx)
local opts = ctx.pipe
if opts[1] == nil then error(modulename ..
', ‘parsing’: No string to parse was provided', 0) end
local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc =
load_parse_opts(opts, 2, '|', '=')
parse_parameter_string(ctx.params, opts[1], isep, iplain, psep, pplain,
trimnamed, trimunnamed)
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|reinterpreting|parameter to reinterpret|[trim
-- flag]|[iteration delimiter setter]|[...]|[key-value delimiter
-- setter]|[...]|pipe to
library.reinterpreting = function (ctx)
local opts = ctx.pipe
if opts[1] == nil then error(modulename ..
', ‘reinterpreting’: No parameter to reinterpret was provided', 0) end
local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc =
load_parse_opts(opts, 2, '|', '=')
local tbl, tmp = ctx.params, get_parameter_name(opts[1])
local str = tbl[tmp]
if str ~= nil then
tbl[tmp] = nil
parse_parameter_string(tbl, str, isep, iplain, psep, pplain,
trimnamed, trimunnamed)
end
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|evaluating|string to parse|[trim flag]|[iteration
-- delimiter setter]|[...]|[key-value delimiter setter]|[...]|pipe to
library.evaluating = function (ctx)
-- NOTE: `ctx.pipe` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local opts = ctx.pipe
if opts[1] == nil then error(modulename ..
', ‘evaluating’: No string to parse was provided', 0) end
local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc =
load_parse_opts(opts, 2, '!', ':')
if opts[1]:match'^%s*(.*%S)' == nil then
ctx.pipe = copy_or_ref_table(opts, opts ~= ctx.opipe)
return context_iterate(ctx, argc)
end
local new_opts, cache = {}, {}
local shift = parse_parameter_string(cache, opts[1], isep, iplain,
psep, pplain, trimnamed, trimunnamed) - argc
for key, val in pairs(opts) do
if type(key) ~= 'number' or key < 1 then new_opts[key] = val
elseif key >= argc then new_opts[key + shift] = val end
end
for key, val in pairs(cache) do new_opts[key] = val end
ctx.pipe = new_opts
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|mixing_names_and_values|mixing string|pipe to
library.mixing_names_and_values = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
if ctx.pipe[1] == nil then error(modulename ..
', ‘mixing_names_and_values’: No mixing string was provided for parameter names', 0) end
if ctx.pipe[2] == nil then error(modulename ..
', ‘mixing_names_and_values’: No mixing string was provided for parameter values', 0) end
local tmp
local mix_k = ctx.pipe[1]:match'^%s*(.-)%s*$'
local cache, mix_v = {}, ctx.pipe[2]
if mix_k == '$@' and mix_v == '$@' then
for _, val in pairs(ctx.params) do
cache[get_parameter_name(val)] = val
end
elseif mix_k == '$@' and mix_v == '$#' then
for key, val in pairs(ctx.params) do
cache[get_parameter_name(val)] = tostring(key)
end
elseif mix_k == '$#' and mix_v == '$#' then
for key in pairs(ctx.params) do cache[key] = tostring(key) end
else
local skel_k, cnv_k, n_parts_k = parse_placeholder_string(mix_k)
local skel_v, cnv_v, n_parts_v = parse_placeholder_string(mix_v)
for key, val in pairs(ctx.params) do
tmp = tostring(key)
for idx = 2, n_parts_k, 2 do
if skel_k[idx] then cnv_k[idx] = val else cnv_k[idx] = tmp end
end
for idx = 2, n_parts_v, 2 do
if skel_v[idx] then cnv_v[idx] = val else cnv_v[idx] = tmp end
end
cache[get_parameter_name(table.concat(cnv_k))] =
table.concat(cnv_v)
end
end
ctx.params = cache
return context_iterate(ctx, 3)
end
-- Syntax: #invoke:params|swapping_names_and_values|pipe to
--[[
library.swapping_names_and_values = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local cache = {}
for key, val in pairs(ctx.params) do cache[val] = key end
ctx.params = cache
return context_iterate(ctx, 1)
end
]]--
-- Syntax: #invoke:params|combining|new parameter name|[sort
-- order]|[with/without flushed glue]|setting directives|...|pipe to
library.combining = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
return context_iterate(ctx, combine_parameters(
ctx,
function (key, val, kvs) return key .. kvs .. val end,
'combining'
) + 1)
end
-- Syntax: #invoke:params|combining_values|new parameter name|[sort
-- order]|[with/without flushed glue]|setting directives|...|pipe to
library.combining_values = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
return context_iterate(ctx, combine_parameters(
ctx,
function (key, val, kvs) return val end,
'combining_values'
) + 1)
end
-- Syntax: #invoke:params|combining_by_calling|template name|new parameter
-- name|pipe to
library.combining_by_calling = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local tname = ctx.pipe[1]
if tname ~= nil then tname = tname:match'^%s*(.*%S)'
else error(modulename ..
', ‘combining_by_calling’: No template name was provided', 0) end
if ctx.pipe[2] == nil then error(modulename ..
', ‘combining_by_calling’: No parameter name was provided', 0) end
ctx.params = {
[get_parameter_name(ctx.pipe[2])] = ctx.frame:expandTemplate{
title = tname,
args = ctx.params
}
}
return context_iterate(ctx, 3)
end
-- Syntax: #invoke:params|combining_by_invoking|module name|function name|new
-- parameter name|pipe to
library.combining_by_invoking = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local mname = ctx.pipe[1]
if mname ~= nil then mname = mname:match'^%s*(.*%S)'
else error(modulename ..
', ‘combining_by_invoking’: No module name was provided', 0) end
local fname = ctx.pipe[2]
if fname ~= nil then fname = fname:match'^%s*(.*%S)'
else error(modulename ..
', ‘combining_by_invoking’: No function name was provided', 0) end
if ctx.pipe[3] == nil then error(modulename ..
', ‘combining_by_invoking’: No parameter name was provided', 0) end
local model = { title = 'Module:' .. mname, args = ctx.params }
local mfunc = require(model.title)[fname]
if mfunc == nil then error(modulename ..
', ‘mapping_by_invoking’: The function ‘' .. fname ..
'’ does not exist', 0) end
ctx.params = {
[get_parameter_name(ctx.pipe[3])] =
tostring(mfunc(ctx.frame:newChild(model)))
}
return context_iterate(ctx, 4)
end
-- Syntax: #invoke:params|combining_by_magic|parser function|new parameter
-- name|pipe to
library.combining_by_magic = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local magic = ctx.pipe[1]
if magic ~= nil then magic = magic:match'^%s*(.*%S)'
else error(modulename ..
', ‘combining_by_magic’: No parser function was provided', 0) end
if ctx.pipe[2] == nil then error(modulename ..
', ‘combining_by_magic’: No parameter name was provided', 0) end
ctx.params = {
[get_parameter_name(ctx.pipe[2])] =
ctx.frame:callParserFunction(magic, ctx.params)
}
return context_iterate(ctx, 3)
end
-- Syntax: #invoke:params|snapshotting|[maximum number]|pipe to
library.snapshotting = function (ctx)
return context_iterate(ctx, make_child(ctx, ctx.params, 'snapshotting'))
end
-- Syntax: #invoke:params|remembering|[maximum number]|pipe to
library.remembering = function (ctx)
return context_iterate(ctx, make_child(ctx, ctx.oparams, 'remembering'))
end
-- Syntax: #invoke:params|entering_substack|[new]|pipe to
library.entering_substack = function (ctx)
local tbl, ncurrparent = ctx.params, ctx.n_parents + 1
if ctx.parents == nil then ctx.parents = { tbl }
else ctx.parents[ncurrparent] = tbl end
ctx.n_parents = ncurrparent
if ctx.pipe[1] ~= nil and ctx.pipe[1]:match'^%s*new%s*$' then
ctx.params = {}
return context_iterate(ctx, 2)
end
local currsnap = ctx.n_children
if currsnap > 0 then
ctx.params, ctx.children[currsnap], ctx.n_children =
ctx.children[currsnap], nil, currsnap - 1
else
local newparams = {}
for key, val in pairs(tbl) do newparams[key] = val end
ctx.params = newparams
end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|pulling|parameter name|pipe to
library.pulling = function (ctx)
local opts = ctx.pipe
if opts[1] == nil then error(modulename ..
', ‘pulling’: No parameter to pull was provided', 0) end
local tmp = ctx.n_parents
local parent = tmp < 1 and ctx.oparams or ctx.parents[tmp]
tmp = get_parameter_name(opts[1])
if parent[tmp] ~= nil then ctx.params[tmp] = parent[tmp] end
return context_iterate(ctx, 2)
end
-- Syntax: #invoke:params|recalling|parameter name|pipe to
library.recalling = function (ctx)
local opts = ctx.pipe
if opts[1] == nil then error(modulename ..
', ‘recalling’: No parameter to recall was provided', 0) end
local arg = get_parameter_name(opts[1])
if ctx.oparams[arg] ~= nil then ctx.params[arg] = ctx.oparams[arg] end
return context_iterate(ctx, 2)
end
-- Syntax: #invoke:params|finding|parameter name|pipe to
--[[
library.finding = function (ctx)
local opts = ctx.pipe
if opts[1] == nil then error(modulename ..
', ‘finding’: No parameter to find was provided', 0) end
local arg = get_parameter_name(opts[1])
local parent
for idx = ctx.n_parents, 1, -1 do
parent = ctx.parents[idx]
if parent[arg] ~= nil then
ctx.params[arg] = parent[arg]
return context_iterate(ctx, 2)
end
end
if ctx.oparams[arg] ~= nil then ctx.params[arg] = ctx.oparams[arg] end
return context_iterate(ctx, 2)
end
]]--
-- Syntax: #invoke:params|picking|number of parameters to pick|pipe to
--[[
library.picking = function (ctx)
local len = tonumber(ctx.pipe[1])
if len == nil or len < 1 or math.floor(len) ~= len then error(modulename ..
', ‘picking’: The number of parameters to pick must be an integer greater than zero', 0) end
if ctx.n_parents < 1 then copy_table_maxn(ctx.params, ctx.oparams, len)
else copy_table_maxn(ctx.params, ctx.parents[ctx.n_parents], len) end
return context_iterate(ctx, 2)
end
]]--
-- Syntax: #invoke:params|detaching_substack|pipe to
library.detaching_substack = function (ctx)
local ncurrparent = ctx.n_parents
if ncurrparent < 1 then error(modulename ..
', ‘detaching_substack’: No substack has been created', 0) end
local parent = ctx.parents[ncurrparent]
for key in pairs(ctx.params) do parent[key] = nil end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|dropping_substack|pipe to
library.dropping_substack = function (ctx)
local ncurrparent = ctx.n_parents
if ncurrparent < 1 then error(modulename ..
', ‘dropping_substack’: No substack has been created', 0) end
ctx.params, ctx.parents[ncurrparent], ctx.n_parents =
ctx.parents[ncurrparent], nil, ncurrparent - 1
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|leaving_substack|pipe to
library.leaving_substack = function (ctx)
local ncurrparent = ctx.n_parents
if ncurrparent < 1 then error(modulename ..
', ‘leaving_substack’: No substack has been created', 0) end
local currsnap = ctx.n_children + 1
if ctx.children == nil then ctx.children = { ctx.params }
else ctx.children[currsnap] = ctx.params end
ctx.params, ctx.parents[ncurrparent], ctx.n_parents, ctx.n_children =
ctx.parents[ncurrparent], nil, ncurrparent - 1, currsnap
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|merging_substack|pipe to
library.merging_substack = function (ctx)
local ncurrparent = ctx.n_parents
if ncurrparent < 1 then error(modulename ..
', ‘merging_substack’: No substack has been created', 0) end
local parent, child = ctx.parents[ncurrparent], ctx.params
ctx.params, ctx.parents[ncurrparent], ctx.n_parents = parent, nil,
ncurrparent - 1
for key, val in pairs(child) do parent[key] = val end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|flushing|pipe to
library.flushing = function (ctx)
if ctx.n_children < 1 then error(modulename ..
', ‘flushing’: There are no substacks to flush', 0) end
local parent, currsnap = ctx.params, ctx.n_children
for key, val in pairs(ctx.children[currsnap]) do parent[key] = val end
ctx.children[currsnap], ctx.n_children = nil, currsnap - 1
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|setting_by_flushing|pipe to
library.setting_by_flushing = function (ctx)
set_strings_from_substack(ctx, ctx, 'setting_by_flushing')
return context_iterate(ctx, 1)
end
--[[ Functions ]]--
-----------------------------
-- Syntax: #invoke:params|count
library.count = function (ctx)
-- NOTE: `ctx.pipe` and `ctx.params` might be the original metatables!
local retval = 0
for _ in ctx.iterfunc(ctx.params) do retval = retval + 1 end
if ctx.subset == -1 then retval = retval - #ctx.params end
ctx.text = retval
return false
end
-- Syntax: #invoke:args|concat_and_call|template name|[prepend 1]|[prepend 2]
-- |[...]|[item n]|[named item 1=value 1]|[...]|[named item n=value
-- n]|[...]
library.concat_and_call = function (ctx)
-- NOTE: `ctx.params` might be the original metatable!
local tname
local opts = ctx.pipe
if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end
if tname == nil then error(modulename ..
', ‘concat_and_call’: No template name was provided', 0) end
remove_numeric_keys(opts, 1, 1)
ctx.text = ctx.frame:expandTemplate{
title = tname,
args = concat_params(ctx)
}
return false
end
-- Syntax: #invoke:args|concat_and_invoke|module name|function name|[prepend
-- 1]|[prepend 2]|[...]|[item n]|[named item 1=value 1]|[...]|[named
-- item n=value n]|[...]
library.concat_and_invoke = function (ctx)
-- NOTE: `ctx.params` might be the original metatable!
local mname, fname
local opts = ctx.pipe
if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end
if mname == nil then error(modulename ..
', ‘concat_and_invoke’: No module name was provided', 0) end
if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end
if fname == nil then error(modulename ..
', ‘concat_and_invoke’: No function name was provided', 0) end
remove_numeric_keys(opts, 1, 2)
local mfunc = require('Module:' .. mname)[fname]
if mfunc == nil then error(modulename ..
', ‘concat_and_invoke’: The function ‘' .. fname ..
'’ does not exist', 0) end
ctx.text = mfunc(ctx.frame:newChild{
title = 'Module:' .. mname,
args = concat_params(ctx)
})
return false
end
-- Syntax: #invoke:args|concat_and_magic|parser function|[prepend 1]|[prepend
-- 2]|[...]|[item n]|[named item 1=value 1]|[...]|[named item n=
-- value n]|[...]
library.concat_and_magic = function (ctx)
-- NOTE: `ctx.params` might be the original metatable!
local magic
local opts = ctx.pipe
if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end
if magic == nil then error(modulename ..
', ‘concat_and_magic’: No parser function was provided', 0) end
remove_numeric_keys(opts, 1, 1)
ctx.text = ctx.frame:callParserFunction(magic, concat_params(ctx))
return false
end
-- Syntax: #invoke:params|value_of|parameter name
library.value_of = function (ctx)
-- NOTE: `ctx.pipe` and `ctx.params` might be the original metatables!
local opts = ctx.pipe
if opts[1] == nil then error(modulename ..
', ‘value_of’: No parameter name was provided', 0) end
local val
local key = opts[1]:match'^%s*(.-)%s*$'
if key == '0' or key:find'^%-?[1-9]%d*$' ~= nil then
key = tonumber(key)
val = ctx.params[key]
-- No worries: #ctx.params is unused when the modifier is in
-- first position (and therefore `ctx.params` is a metatable)
if val ~= nil and (
ctx.subset ~= -1 or key > #ctx.params or key < 1
) and (
ctx.subset ~= 1 or (key <= #ctx.params and key > 0)
) then
ctx.text = (ctx.header or '') .. val .. (ctx.footer or '')
else ctx.text = ctx.ifngiven or '' end
else
val = ctx.params[key]
if ctx.subset ~= 1 and val ~= nil then ctx.text = (ctx.header
or '') .. val .. (ctx.footer or '')
else ctx.text = ctx.ifngiven or '' end
end
return false
end
-- Syntax: #invoke:params|list
library.list = function (ctx)
-- NOTE: `ctx.pipe` might be the original metatable!
local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or ''
flush_params(ctx, function (key, val)
ret[nss + 1], ret[nss + 2], ret[nss + 3], ret[nss + 4], nss =
pps, key, kvs, val, nss + 4
end)
finalize_and_return_concatenated_list(ctx, ret, nss, 4)
return false
end
-- Syntax: #invoke:params|list_values
library.list_values = function (ctx)
-- NOTE: `ctx.pipe` might be the original metatable!
-- NOTE: `library.coins()` and `library.unique_coins()` rely on us
local ret, nss, pps = {}, 0, ctx.itersep or ''
flush_params(ctx, function (key, val)
ret[nss + 1], ret[nss + 2], nss = pps, val, nss + 2
end)
finalize_and_return_concatenated_list(ctx, ret, nss, 2)
return false
end
-- Syntax: #invoke:params|list_maybe_with_names
library.list_maybe_with_names = function (ctx)
-- NOTE: `ctx.pipe` might be the original metatable!
local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or ''
mixed_flush_params(
ctx,
function (key, val)
ret[nss + 1], ret[nss + 2], ret[nss + 3],
ret[nss + 4], nss = pps, '', '', val, nss + 4
end,
function (key, val)
ret[nss + 1], ret[nss + 2], ret[nss + 3],
ret[nss + 4], nss = pps, key, kvs, val, nss + 4
end
)
finalize_and_return_concatenated_list(ctx, ret, nss, 4)
return false
end
-- Syntax: #invoke:params|coins|[first coin = value 1]|[second coin = value
-- 2]|[...]|[last coin = value N]
--[[
library.coins = function (ctx)
-- NOTE: `ctx.pipe` might be the original metatable!
local opts, tbl = ctx.pipe, ctx.params
for key, val in pairs(tbl) do tbl[key] = opts[get_parameter_name(val)] end
return library.list_values(ctx)
end
]]--
-- Syntax: #invoke:params|unique_coins|[first coin = value 1]|[second coin =
-- value 2]|[...]|[last coin = value N]
--[[
library.unique_coins = function (ctx)
local tmp
local opts, tbl = ctx.pipe, ctx.params
for key, val in pairs(tbl) do
tmp = get_parameter_name(val)
tbl[key], opts[tmp] = opts[tmp], nil
end
return library.list_values(ctx)
end
]]
-- Syntax: #invoke:params|for_each|wikitext
library.for_each = function (ctx)
-- NOTE: `ctx.pipe` might be the original metatable!
local ret, nss, pps, txt = {}, 0, ctx.itersep or '', ctx.pipe[1] or ''
local skel, cnv, n_parts = parse_placeholder_string(txt)
flush_params(ctx, function (key, val)
for idx = 2, n_parts, 2 do
if skel[idx] then cnv[idx] = val
else cnv[idx] = tostring(key) end
end
ret[nss + 1], nss = pps, nss + 2
ret[nss] = table.concat(cnv)
end)
finalize_and_return_concatenated_list(ctx, ret, nss, 2)
return false
end
-- Syntax: #invoke:params|call_for_each|template name|[append 1]|[append 2]
-- |[...]|[append n]|[named param 1=value 1]|[...]|[named param
-- n=value n]|[...]
library.call_for_each = function (ctx)
local tname
local opts = ctx.pipe
if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end
if tname == nil then error(modulename ..
', ‘call_for_each’: No template name was provided', 0) end
local model = { title = tname, args = opts }
local ret, nss, ccs = {}, 0, ctx.itersep or ''
table.insert(opts, 1, true)
flush_params(ctx, function (key, val)
opts[1], opts[2], ret[nss + 1], nss = key, val, ccs, nss + 2
ret[nss] = ctx.frame:expandTemplate(model)
end)
finalize_and_return_concatenated_list(ctx, ret, nss, 2)
return false
end
-- Syntax: #invoke:params|invoke_for_each|module name|module function|[append
-- 1]|[append 2]|[...]|[append n]|[named param 1=value 1]|[...]
-- |[named param n=value n]|[...]
library.invoke_for_each = function (ctx)
local mname, fname
local opts = ctx.pipe
if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end
if mname == nil then error(modulename ..
', ‘invoke_for_each’: No module name was provided', 0) end
if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end
if fname == nil then error(modulename ..
', ‘invoke_for_each’: No function name was provided', 0) end
local model = { title = 'Module:' .. mname, args = opts }
local mfunc = require(model.title)[fname]
local ret, nss, ccs = {}, 0, ctx.itersep or ''
flush_params(ctx, function (key, val)
opts[1], opts[2], ret[nss + 1], nss = key, val, ccs, nss + 2
ret[nss] = mfunc(ctx.frame:newChild(model))
end)
finalize_and_return_concatenated_list(ctx, ret, nss, 2)
return false
end
-- Syntax: #invoke:params|magic_for_each|parser function|[append 1]|[append 2]
-- |[...]|[append n]|[named param 1=value 1]|[...]|[named param
-- n=value n]|[...]
library.magic_for_each = function (ctx)
local magic
local opts = ctx.pipe
if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end
if magic == nil then error(modulename ..
', ‘magic_for_each’: No parser function was provided', 0) end
local ret, nss, ccs = {}, 0, ctx.itersep or ''
table.insert(opts, 1, true)
flush_params(ctx, function (key, val)
opts[1], opts[2], ret[nss + 1], nss = key, val, ccs, nss + 2
ret[nss] = ctx.frame:callParserFunction(magic, opts)
end)
finalize_and_return_concatenated_list(ctx, ret, nss, 2)
return false
end
-- Syntax: #invoke:params|call_for_each_value|template name|[append 1]|[append
-- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param
-- n=value n]|[...]
library.call_for_each_value = function (ctx)
local tname
local opts = ctx.pipe
if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end
if tname == nil then error(modulename ..
', ‘call_for_each_value’: No template name was provided', 0) end
local model = { title = tname, args = opts }
local ret, nss, ccs = {}, 0, ctx.itersep or ''
flush_params(ctx, function (key, val)
opts[1], ret[nss + 1], nss = val, ccs, nss + 2
ret[nss] = ctx.frame:expandTemplate(model)
end)
finalize_and_return_concatenated_list(ctx, ret, nss, 2)
return false
end
-- Syntax: #invoke:params|invoke_for_each_value|module name|[append 1]|[append
-- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param
-- n=value n]|[...]
library.invoke_for_each_value = function (ctx)
local opts = ctx.pipe
local mname, fname
if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end
if mname == nil then error(modulename ..
', ‘invoke_for_each_value’: No module name was provided', 0) end
if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end
if fname == nil then error(modulename ..
', ‘invoke_for_each_value’: No function name was provided', 0) end
local model = { title = 'Module:' .. mname, args = opts }
local mfunc = require(model.title)[fname]
local ret, nss, ccs = {}, 0, ctx.itersep or ''
remove_numeric_keys(opts, 1, 1)
flush_params(ctx, function (key, val)
opts[1], ret[nss + 1], nss = val, ccs, nss + 2
ret[nss] = mfunc(ctx.frame:newChild(model))
end)
finalize_and_return_concatenated_list(ctx, ret, nss, 2)
return false
end
-- Syntax: #invoke:params|magic_for_each_value|parser function|[append 1]
-- |[append 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named
-- param n=value n]|[...]
library.magic_for_each_value = function (ctx)
local opts = ctx.pipe
local magic
if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end
if magic == nil then error(modulename ..
', ‘magic_for_each_value’: No parser function was provided', 0) end
local ret, nss, ccs = {}, 0, ctx.itersep or ''
flush_params(ctx, function (key, val)
opts[1], ret[nss + 1], nss = val, ccs, nss + 2
ret[nss] = ctx.frame:callParserFunction(magic, opts)
end)
finalize_and_return_concatenated_list(ctx, ret, nss, 2)
return false
end
-- Syntax: #invoke:params|call_for_each_group|template name|[append 1]|[append
-- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param
-- n=value n]|[...]
library.call_for_each_group = function (ctx)
-- NOTE: `ctx.pipe` and `ctx.params` might be the original metatables!
local tmp
if ctx.pipe[1] ~= nil then tmp = ctx.pipe[1]:match'^%s*(.*%S)' end
if tmp == nil then error(modulename ..
', ‘call_for_each_group’: No template name was provided', 0) end
local model = { title = tmp }
local opts, ret, nss, ccs = {}, {}, 0, ctx.itersep or ''
for key, val in pairs(ctx.pipe) do
if type(key) == 'number' then opts[key - 1] = val
else opts[key] = val end
end
ctx.pipe = opts
ctx.params = make_groups(ctx.params)
flush_params(ctx, function (gid, group)
for key, val in pairs(opts) do group[key] = val end
group[0], model.args, ret[nss + 1], nss = gid, group, ccs,
nss + 2
ret[nss] = ctx.frame:expandTemplate(model)
end)
finalize_and_return_concatenated_list(ctx, ret, nss, 2)
return false
end
--[[ First-position-only modifiers ]]--
---------------------------------------
-- Syntax: #invoke:params|new|pipe to
static_iface.new = function (child_frame)
local ctx = context_new(child_frame)
ctx.pipe = copy_or_ref_table(ctx.opipe, false)
ctx.params = {}
main_loop(ctx, context_iterate(ctx, 1))
return ctx.text
end
--[[ First-position-only functions ]]--
---------------------------------------
-- Syntax: #invoke:params|self
static_iface.self = function (frame)
return frame:getParent():getTitle()
end
--[[ Public metatable of functions ]]--
---------------------------------------
return setmetatable({}, {
__index = function (_, query)
local fname = query:match'^%s*(.*%S)'
if fname == nil then error(modulename ..
': You must specify a function to call', 0) end
local func = static_iface[fname]
if func ~= nil then return func end
func = library[fname]
if func == nil then error(modulename ..
': The function ‘' .. fname .. '’ does not exist', 0) end
return function (child_frame)
local ctx = context_new(child_frame)
ctx.pipe = copy_or_ref_table(ctx.opipe, refpipe[fname])
ctx.params = copy_or_ref_table(ctx.oparams, refparams[fname])
main_loop(ctx, func)
return ctx.text
end
end
})
9ko1dij40e2ajwgg59fvqm72uoivi2f
ವಿಕಿಪೀಡಿಯ:ಚಾವಡಿ/ತಾಂತ್ರಿಕ ಸುದ್ದಿಲು/ಪತ್ರಾಗಾರೊ/2026
4
24597
363100
362844
2026-07-23T22:52:15Z
MABot
170
Bot: Archiving 1 thread from [[ವಿಕಿಪೀಡಿಯ:ಚಾವಡಿ (ತಾಂತ್ರಿಕ ಸುದ್ದಿಲು)]]
363100
wikitext
text/x-wiki
== <span lang="en" dir="ltr">Tech News: 2026-03</span> ==
<div lang="en" dir="ltr">
<section begin="technews-2026-W03"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/03|Translations]] are available.
'''Weekly highlight'''
* The Wikimedia Foundation has shared some guiding questions for the July 2026–June 2027 Annual Plan on [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2026-2027/Product & Technology OKRs|Meta]] and ''[[diffblog:2025/12/10/shaping-wikimedia-foundations-2026-2027-annual-goals-key-questions-for-the-wikimedia-movement/|Diff]]''. These focus on global trends, faster and healthier experimentation, better support for newcomers, strengthening editors and advanced users, improving collaboration across projects, and growing and retaining readership. Feedback and ideas are welcome on the [[m:Talk:Wikimedia Foundation Annual Plan/2026-2027|talk page]].
'''Updates for editors'''
* As part of the current work of Community Tech team on the [[m:Special:MyLanguage/Community Wishlist/W372|Multiple watchlists]] project, the display of [[Special:EditWatchlist|EditWatchlist]] will be updated as a first step towards multiple watchlists. Additionally, the pagination on [[Special:Search|Search]] will be updated too, as a part of the work on the [[m:Special:MyLanguage/Community Wishlist/W186|Revamp pagination / page navigation]] wish. [https://phabricator.wikimedia.org/T411596]
* [[m:Special:GlobalWatchlist|The Global Watchlist]] is a MediaWiki [[mw:Special:MyLanguage/Extension:GlobalWatchlist|extension]] that lets you see your watchlists from different wikis on the same page. It was recently updated to look more like the regular [[Special:Watchlist|Watchlist]], such as preparing it for temporary accounts in IP masking (including rerouting user links to contributions pages), making page titles bold, and opening links in edit summaries and tags in new browser tabs. [https://phabricator.wikimedia.org/T398361][https://phabricator.wikimedia.org/T298919][https://phabricator.wikimedia.org/T273526][https://phabricator.wikimedia.org/T286309]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:28}} community-submitted {{PLURAL:28|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the issue where global blocks did not have the option to disable sending emails, has now been fixed, and will be available for use in the week of January 13. [https://phabricator.wikimedia.org/T401293]
'''Updates for technical contributors'''
* The [[mw:Special:MyLanguage/VisualEditor/Citation tool|VisualEditor citation tool]] and [[mw:Special:MyLanguage/Help:Reference Previews|Reference Previews]] now support "map" as a reference type. [https://phabricator.wikimedia.org/T411083]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.10|MediaWiki]]/[[mw:MediaWiki 1.46/wmf.11|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/03|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W03"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೧:೦೩, ೧೩ ಜನವರಿ ೨೦೨೬ (IST)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29907192 -->
== <span lang="en" dir="ltr">Tech News: 2026-04</span> ==
<div lang="en" dir="ltr">
<section begin="technews-2026-W04"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/04|Translations]] are available.
'''Updates for editors'''
* The tray shown on [[Special:Diff|Special:Diff]] in mobile view has been redesigned. It is now collapsed by default, and incorporates a link to undo the edit being viewed, making it easier for mobile editors and reviewers to take action while keeping the interface uncluttered. [https://phabricator.wikimedia.org/T402297]
* [[m:Special:GlobalWatchlist|The Global Watchlist]] lets you view your watchlists from multiple wikis on one page. The [[mw:Special:MyLanguage/Extension:GlobalWatchlist|extension]] continues to improve — it now automatically determines the text direction (ensuring correct display of sites with unusual domain names) and shows detailed descriptions for log actions. Later this week, a new permanent link for page creations and CSS classes for each entry element will be added. [https://phabricator.wikimedia.org/T412505][https://phabricator.wikimedia.org/T287929][https://phabricator.wikimedia.org/T262768][https://phabricator.wikimedia.org/T414135]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:32}} community-submitted {{PLURAL:32|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the previously observed issue in Vector 2022, where anchor link targets were obscured by the sticky header, has now been addressed. [https://phabricator.wikimedia.org/T406114]
'''Updates for technical contributors'''
* As mentioned in the [[m:Special:MyLanguage/Tech/News/2025/44|October 2025 deprecation announcement]], MediaWiki Interfaces team will begin sunsetting all transform endpoints containing a trailing slash from the MediaWiki REST API the week of January 26. Changes are expected to roll out to all wikis on or before January 30th. All API users currently calling them are encouraged to transition to the non-trailing slash versions. Both endpoint variations can be found, compared, and tested using the [https://test.wikipedia.org/wiki/Special:RestSandbox REST Sandbox]. If you have questions or encounter any problems, please file a ticket in Phabricator to the [https://phabricator.wikimedia.org/project/view/6931/ #MW-Interfaces-Team board].
* Interactive reference documentation for the [[mw:Special:MyLanguage/Wikimedia REST API|Wikimedia REST API]] has moved. Requests to API docs previously hosted through [[mw:Special:MyLanguage/RESTBase|RESTBase]] (e.g.: <code dir=ltr>https://en.wikipedia.org/api/rest_v1/</code>) are now redirected to the [[w:en:Special:RestSandbox|REST Sandbox]].
* The [[mw:Special:MyLanguage/Wikidata Platform|WMF Wikidata Platform team]] (WDP) has published its [[d:Special:MyLanguage/Wikidata:Wikidata Platform team/Newsletter|January 2026 newsletter]]. It includes updates on the legacy full-graph endpoint decommissioning, the User-Agent policy change, the monthly Blazegraph migration office hours, and efforts to reduce regressions caused by the legacy endpoint shutdown. As a reminder, you can [[m:Special:MyLanguage/Global message delivery/Targets/WDP team updates|subscribe to the WDP newsletter]]!
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.12|MediaWiki]]
'''Meetings and events'''
* The [[mw:Wikimedia Hackathon Northwestern Europe 2026|Wikimedia Hackathon Northwestern Europe 2026]] will take place on 13-14 March 2026 in Arnhem, the Netherlands. Applications opened mid-December and will close soon or when capacity is reached. It's a two-day, technically oriented hackathon bringing together Wikimedians from the region. Hope to see you there!
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/04|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W04"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೧:೫೯, ೨೦ ಜನವರಿ ೨೦೨೬ (IST)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29943403 -->
== <span lang="en" dir="ltr">Tech News: 2026-05</span> ==
<div lang="en" dir="ltr">
<section begin="technews-2026-W05"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/05|Translations]] are available.
'''Updates for editors'''
* Wikimedia Foundation invites comments on [[m:Special:MyLanguage/Product and Technology Advisory Council/Year1 Reflections and Proposed Way Forward 2026 Update|proposed future]] of the [[:m:Special:MyLanguage/Product and Technology Advisory Council|Product and Technology Advisory Council]] until 28 February.
* All users with registered accounts can now use passkeys for [[m:Special:MyLanguage/Help:Two-factor authentication|two-factor authentication]] (2FA). Passkeys are a simple way to log in without using a second device. They verify the user's identity using a fingerprint, face scan, or a PIN code. To set up a passkey, first set up a regular 2FA method. Currently, to log in with a passkey, users must also use a password. Later this quarter, passwordless login will allow users to log in with a single click and a passkey. Users with advanced rights will also be required to have 2FA enabled. This is part of the [[mw:Special:MyLanguage/Product Safety and Integrity/Account Security|Account Security]] project.
* Unregistered contributors on blocked IPs or blocked IP ranges can now interact on-wiki to appeal a block by creating a temporary account to appeal a block on the user talk page, unless the "prevent this user from editing their own talk page" is enabled. This solves the problem of logged-out users unable to use the default unblock process via user talk page. [https://phabricator.wikimedia.org/T398673]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:20}} community-submitted {{PLURAL:20|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the Two-Factor Authentication (2FA) methods description on the management page has been updated. It is now clearer and easier for users to understand and make use of. [https://phabricator.wikimedia.org/T332385]
'''Updates for technical contributors'''
* A new AbuseFilter variable, <code>account_type</code>, has been added to provide a reliable way to determine the account type being created in the <code>createaccount</code> and <code>autocreateaccount</code> actions. As part of this change, the variable <code>accountname</code> has been renamed to <code>account_name</code>, and <code>accountname</code> is now deprecated. Edit filter managers should update any filters that use hardcoded account type checks or the deprecated variable. [https://phabricator.wikimedia.org/T414049]
* Image thumbnails that are requested in non-standard sizes, and using non-standard methods such as direct requests to <code dir=ltr><nowiki>upload.wikimedia.org/…</nowiki></code> will stop working in the near future. This change is to prevent ongoing external abuse by web-scrapers and bots. Some users with custom CSS/JS, Interface Admins who can fix gadgets and local skins, and Tool-authors, will need to update their code to use standard thumbnail sizes. [[phab:T414805|Details, search-links, and examples of how to fix them, are available in the task]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.13|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/05|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W05"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೨:೪೭, ೨೭ ಜನವರಿ ೨೦೨೬ (IST)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29969530 -->
== <span lang="en" dir="ltr">Tech News: 2026-06</span> ==
<div lang="en" dir="ltr">
<section begin="technews-2026-W06"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/06|Translations]] are available.
'''Updates for editors'''
* The "{{int:pageinfo-toolboxlink}}" feature, which gives validating information about a page ([{{fullurl:{{FULLPAGENAME}}|action=info}} example]), now automatically includes a table of contents. If there is a local [[{{ns:8}}:Pageinfo-header]] page created by individual users, it can now be removed. [https://phabricator.wikimedia.org/T363726]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:21}} community-submitted {{PLURAL:21|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, VisualEditor previously added bold or italic formatting inside link descriptions, making the wikicode complex. This has now been fixed. [https://phabricator.wikimedia.org/T409669]
'''Updates for technical contributors'''
* There was no XML dump on 20 January. Additionally, from now on, dumps will be generated once per month only. [https://phabricator.wikimedia.org/T414389]
* The MediaWiki Interfaces team removed support for all transform endpoints containing a trailing slash from the [https://www.mediawiki.org/wiki/Special:MyLanguage/API:REST%20API MediaWiki REST API]. All API users currently calling those endpoints are encouraged to transition to the non-trailing slash versions. If you have questions or encounter any problems, please file a ticket in phabricator to the [https://phabricator.wikimedia.org/project/view/6931/ #MW-Interfaces-Team board].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.14|MediaWiki]]
'''Weekly highlight'''
* Users are reminded that the Wikimedia Foundation has shared some guiding questions for the July 2026–June 2027 Annual Plan on [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2026-2027/Product & Technology OKRs|Meta]] and ''[[diffblog:2025/12/10/shaping-wikimedia-foundations-2026-2027-annual-goals-key-questions-for-the-wikimedia-movement/|Diff]]''. These focus on global trends, faster and healthier experimentation, better support for newcomers, strengthening editors and advanced users, improving collaboration across projects, and growing and retaining readership. Feedback and ideas are welcome on the [[m:Talk:Wikimedia Foundation Annual Plan/2026-2027|talk page]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/06|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W06"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೨೩:೧೩, ೨ ಪೆಬ್ರವರಿ ೨೦೨೬ (IST)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30000986 -->
== <span lang="en" dir="ltr">Tech News: 2026-07</span> ==
<div lang="en" dir="ltr">
<section begin="technews-2026-W07"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/07|Translations]] are available.
'''Updates for editors'''
* [[File:Maki-gift-15.svg|12px|link=|class=skin-invert|Wishlist item]] Logged-in contributors who manage large or complex watchlists can now organise and filter watched pages in ways that improve their workflows with the new [[mw:Special:MyLanguage/Help:Watchlist labels|Watchlist labels]] feature. By adding custom labels (for example: pages you created, pages being monitored for vandalism, or discussion pages) users can more quickly identify what needs attention, reduce cognitive load, and respond more efficiently. This improves watchlist usability, especially for highly active editors.
* A new feature available on [[Special:Contributions|Special:Contributions]] shows [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|temporary accounts]] that are likely operated by the same person, and so makes patrolling less time-consuming. Upon checking contributions of a temporary account, users with access to temporary account IP addresses can now see a view of contributions from the related temporary accounts. The feature looks up all the IPs associated with a given temporary account within the data retention period and shows all the contributions of all temporary accounts that have used these IPs. [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts#February 2026: Improvements to the patroller tooling|Learn more]]. [https://phabricator.wikimedia.org/T415674]
* When editors preview a wikitext edit, the reminder box that they are only seeing a preview (which is shown at the top), now has a grey/neutral background instead of a yellow/warning background. This makes it easier to distinguish preview notes from actual warnings (for example, edit conflicts or problematic redirect targets), which will now be shown in separate warning or error boxes. [https://phabricator.wikimedia.org/T414742]
* The [[m:Special:GlobalWatchlist|Global Watchlist]] lets you view your watchlists from multiple wikis on one page. The [[mw:Special:MyLanguage/Extension:GlobalWatchlist|extension]] continues to improve — it now properly supports more than one Wikibase site, for example both [[d:|Wikidata]] and [[testwikidata:|testwikidata]]. In addition, issues regarding text direction have been fixed for users who prefer Wikidata or other Wikibase sites in right-to-left (RTL) languages. [https://phabricator.wikimedia.org/T415440][https://phabricator.wikimedia.org/T415458]
* The automatic "magic links" for ISBN, RFC, and PMID numbers have been [[mw:Special:MyLanguage/Help:Magic links|deprecated in wikitext since 2021]] due to inflexibility and difficulties with localization. Several wikis have successfully replaced RFC and PMID magic links with equivalent external links, but a template was often required to replace the functionality of the ISBN magic link. There is now a new [[mw:Special:MyLanguage/Help:Magic words#isbn|built-in parser function]] <code dir=ltr><nowiki>{{#isbn}}</nowiki></code> available to replace the basic functionality of the ISBN magic link. This makes it easier for wikis who wish to migrate off of the deprecated magic link functionality to do so. [https://phabricator.wikimedia.org/T145604]
* Two new wikis have been created:
** a {{int:project-localized-name-group-wikipedia}} in [[d:Q35401|Jju]] ([[w:kaj:|<code>w:kaj:</code>]]) [https://phabricator.wikimedia.org/T413283]
** a {{int:project-localized-name-group-wikipedia}} in [[d:Q1186896|Nawat]] ([[w:ppl:|<code>w:ppl:</code>]]) [https://phabricator.wikimedia.org/T413273]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:23}} community-submitted {{PLURAL:23|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* A new global user group has been created: [[{{int:grouppage-local-bot}}|{{int:group-local-bot}}]]. It will be used internally by the software to allow community bots to bypass rate limits that are applied to abusive [[w:en:Web scraping|web scrapers]]. Accounts that are approved as bots on at least one Wikimedia wiki will be automatically added to this group. It will not change what user permissions the bot has. [https://phabricator.wikimedia.org/T415588]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.15|MediaWiki]]
'''Meetings and events'''
* The [[mw:Special:MyLanguage/MediaWiki Users and Developers Conference Spring 2026|MediaWiki Users and Developers Conference, Spring 2026]] will be held March 25–27 in Salt Lake City, USA. This event is organized by and for the third-party MediaWiki community. You can propose sessions and register to attend. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/AZBWVI46SDEB65PGR5J6E4TYOQQEZXM7/]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/07|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W07"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೫:೦೦, ೧೦ ಪೆಬ್ರವರಿ ೨೦೨೬ (IST)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30026671 -->
== <span lang="en" dir="ltr">Tech News: 2026-08</span> ==
<div lang="en" dir="ltr">
<section begin="technews-2026-W08"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/08|Translations]] are available.
'''Weekly highlight'''
* The [[mw:Special:MyLanguage/Wikimedia Site Reliability Engineering|SRE Team]] will be performing a cleanup of Wikimedia's [[m:Special:MyLanguage/Etherpad|Etherpad]] instance, the web-based editor for real-time collaborative document editing. All pads will be permanently deleted after 30 April, 2026 – if there are still migration projects in progress at that point the team can revisit the date on a case by case basis. Please create local backups of any content you wish to keep, as deleted data cannot be recovered. This cleanup helps reduce database size and minimize infrastructure footprint. Etherpad will continue to support real-time collaboration, but long-term storage should not be expected. Additional cleanups may occur in the future without prior notice. [https://phabricator.wikimedia.org/T415237]
'''Updates for editors'''
* The Information Retrieval team will be launching an [[mw:Special:MyLanguage/Readers/Information Retrieval/Phase 1|Android mobile app experiment]] that tests hybrid search capabilities which can handle both semantic and keyword queries. The improvement of on-platform search will enable readers to find what they’re looking for directly on Wikipedia more easily. The experiment will first be launched on Greek Wikipedia in late February, followed by English, French, and Portuguese in March. [https://diff.wikimedia.org/2026/01/08/semantic-search-making-it-easier-to-find-the-information-readers-want/ Read more] on Diff blog. [https://www.mediawiki.org/wiki/Readers/Information_Retrieval]
* The Reader Growth team will run [[mw:Special:MyLanguage/Readers/Reader Growth/WE3.10.2 Mobile Table of Contents|an experiment]] for mobile web users, that adds a table of contents and automatically expands all article sections, to learn more about navigation issues they face. The test will be available on Arabic, Chinese, English, French, Indonesian, and Vietnamese Wikipedias.
* Previously, site notices ([[{{ns:8}}:Sitenotice]] and [[{{ns:8}}:Anonnotice]]) would only render on the desktop site. Now, they will render on all platforms. Users on mobile web will now see these notices and be informed. Site administrators should be prepared to test and fix notices on mobile devices to avoid interference with articles. To opt out, interface admins can add <code dir="ltr">#siteNotice { display: none; }</code> to [[{{ns:8}}:Minerva.css]]. [https://phabricator.wikimedia.org/T138572][https://phabricator.wikimedia.org/T416644]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:19}} community-submitted {{PLURAL:19|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue on [[Special:RecentChanges|Special:RecentChanges]] has been fixed. Previously, clicking hide in the active filters caused the "view new changes since…" button to disappear, though it should have remained visible. The button now behaves as expected. [https://phabricator.wikimedia.org/T406339]
'''Updates for technical contributors'''
* New documentation is now available to help editors debug on-site search features. It supports troubleshooting when pages do not appear in results, when ranking seems unexpected, and when you need to inspect what content is being indexed, helping make search behavior easier to understand and analyze. [[mw:Help:CirrusSearch/Debug|Learn more]]. [https://phabricator.wikimedia.org/T411169]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.16|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/08|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W08"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೦:೪೭, ೧೭ ಪೆಬ್ರವರಿ ೨೦೨೬ (IST)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30086330 -->
== <span lang="en" dir="ltr">Tech News: 2026-09</span> ==
<div lang="en" dir="ltr">
<section begin="technews-2026-W09"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/09|Translations]] are available.
'''Weekly highlight'''
* [[mw:Special:MyLanguage/Edit check/Reference Check|Reference Check]] has been deployed to English Wikipedia, completing its rollout across all Wikipedias. The feature prompts newcomers to add a citation before publishing new content, helping reduce common citation-related reverts and improve verifiability. In A/B testing, the impact was substantial: newcomers shown Reference Check were approximately 2.2 times more likely to include a reference on desktop and about 17.5 times more likely on mobile web. [https://analytics.wikimedia.org/published/reports/editing/reference_check_ab_test_report_final_2025.html]
'''Updates for editors'''
* The [[mw:Special:MyLanguage/Extension:InterwikiSorting|InterwikiSorting extension]], which allowed for the [[m:Special:MyLanguage/Interwiki sorting order|sorting of interwiki links]], has been undeployed from Wikipedia. As a result, editors who had enabled interwiki link sorting in non-compact mode (full list format) will now see links reordered. The links moving forward will be listed in the alphabetical order of language code. [https://phabricator.wikimedia.org/T253764]
* Later this week, people who are editing a page-section using the mobile visual editor, will notice a new "Edit full page" button. When tapped, you will be able to edit the entire article. This helps when the change you want to make is outside the section you initially opened. [https://phabricator.wikimedia.org/T387175][https://phabricator.wikimedia.org/T409112]
* [[mw:Special:MyLanguage/Readers/Reader Experience|The Reader Experience team]] is inviting editors to assess whether dark mode should still be considered "beta" on their wiki, based on their experience of how well it functions on desktop and mobile. If the feature is deemed mature, editors can update the interface messages in <code dir=ltr>MediaWiki:skin-theme-description</code> and <code dir=ltr>MediaWiki:Vector-night-mode-beta-tag</code> to indicate that dark mode is ready and no longer considered beta.
* The improved [[mw:Wikimedia_Apps/Team/iOS/Activity_Tab|Activity tab]] which displays user-insights is now available to all users of the Wikipedia iOS app (version 7.9.0 and later). Following earlier A/B testing that showed higher account creation among users with access to the feature, it has been rolled out to 100% of users along with some updates. The Activity tab now shows your edited articles in the timeline, offers editing impact insights like contribution counts and article view trends, and customization options to improve in-app experience for users.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:21}} community-submitted {{PLURAL:21|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, a bug that prevented [[mw:Special:MyLanguage/Extension:DiscussionTools|DiscussionTools]] from working on mobile has now been fixed, restoring full functionality. [https://phabricator.wikimedia.org/T415303]
'''Updates for technical contributors'''
* The [[m:Special:GlobalWatchlist|Global Watchlist]] lets you view your watchlists from multiple wikis on one page. The [[mw:Special:MyLanguage/Extension:GlobalWatchlist|extension]] that makes this possible continues to improve. The latest upgrade is the inclusion of a [[mw:Extension:GlobalWatchlist#hook|new hook]], <code dir=ltr>ext.globalwatchlist.rebuild</code>, which fires after each watchlist rebuild. This allows you to run gadgets and user scripts for the Special page. [https://phabricator.wikimedia.org/T275159]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.17|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/09|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W09"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೦:೩೩, ೨೪ ಪೆಬ್ರವರಿ ೨೦೨೬ (IST)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30119102 -->
== <span lang="en" dir="ltr">Tech News: 2026-10</span> ==
<div lang="en" dir="ltr">
<section begin="technews-2026-W10"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/10|Translations]] are available.
'''Weekly highlight'''
* Wikipedia 25 [[m:Special:MyLanguage/Wikipedia 25/Easter egg experiments|Birthday mode]] is now live on Betawi, Breton, Chinese, Czech, Dutch, English, French, Gorontalo, Indonesian, Italian, Luxembourgish, Madurese, Sicilian, Spanish, Thai, and Vietnamese Wikipedias! This limited-time campaign feature celebrates 25 years of Wikipedia with a birthday mascot, Baby Globe. When turned on, Baby Globe is shown on [[m:Special:MyLanguage/Wikipedia 25/Easter egg experiments/article configuration|~2,500 articles]], waiting to be discovered by readers. Communities can choose to turn Birthday mode on by getting consensus from their community and asking an admin to enable the feature and customize it via [[m:Special:MyLanguage/Wikipedia 25/Easter egg experiments#Community Configuration Demo|community configuration]] on the local wiki.
'''Updates for editors'''
* [[:m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|Sub-referencing]], a new feature to re-use references with different details has been released to Swedish Wikipedia, Polish Wikipedia and [[:phab:T418209|a couple of other wikis]]. You can [[:m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing#test|try the feature]] on these projects or on testwiki and [https://en.wikipedia.beta.wmcloud.org/wiki/Sub-referencing betawiki]. Learnings from the first pilot wiki German Wikipedia have been [[:m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing/Learnings|published in a report]]. Reach out to the Wikimedia Deutschland team if you are [[:m:Talk:WMDE Technical Wishes/Sub-referencing#Pilot wikis|interested in becoming a pilot wiki]].
* [[mw:Special:MyLanguage/Help:Edit check#Paste check|Paste Check]] will become available at all Wikipedias this week. The feature prompts newcomers who are pasting text they are not likely to have written into VisualEditor to consider whether doing so risks a copyright violation. Paste Check [[mw:Special:MyLanguage/Edit check/Tags|tags]] all edits where it is shown for potential review. Local administrators can configure various aspects of the feature via [[{{#special:EditChecks}}]]. [[mw:Special:MyLanguage/Edit check/Paste Check#A/B Experiment|Research]] across 22 wikis found that Paste Check resulted in an 18% decrease in relative reverted-edits compared to the control group. Translators can [https://translatewiki.net/w/i.php?title=Special%3ATranslate&group=ext-visualeditor-ve-mw-editcheck&filter=&optional=1&action=translate help to localize] this and related features.
* The [[mw:Special:MyLanguage/Readers/Reader Experience|Reader Experience team]] will be standardizing the user menu in the top right for all mobile users so that it is closer to the desktop experience. Currently this user menu is only visible to users with Advanced Mobile Controls (AMC) turned on. The only change is that a couple buttons previously in the left-side menu will move to the top right for users who do not have AMC turned on. This change is expected to go out March 9 and seeks to improve the user interface. [https://phabricator.wikimedia.org/T413912]
* Starting in the week of March 2, the emails sent out when an email address was added, removed, or changed for an account will switch to a substantially nicer and clearer HTML email from the prior plaintext one. [https://phabricator.wikimedia.org/T410807]
* Notifications are currently limited to 2,000 historic entries per user, and extend back to 2013 when the feature was released. This is going to be changed to only store Notifications from the last 5 years, but up to 10,000 of them. This will help with long-term infrastructure health and help to prevent more recent notifications from disappearing too soon. [https://phabricator.wikimedia.org/T383948]
* The [[m:Special:GlobalWatchlist|Global Watchlist]] which lets you view your watchlists from multiple wikis on a single page continues to see improvements. The latest update improves label usage experience. The [[mw:Special:MyLanguage/Extension:GlobalWatchlist|extension]] now allows activating the [[mw:Special:MyLanguage/Manual:Language#Fallback languages|language fallback system]] for Wikidata items without labels in the viewed language, and showing those labels in the user’s preferred Wikidata language if no <code dir=ltr>uselang=</code> URL parameter is provided. [https://phabricator.wikimedia.org/T373686][https://phabricator.wikimedia.org/T416111]
* The Wikipedia Android team has started a beta test of [[mw:Special:MyLanguage/Readers/Information Retrieval/Phase 1|hybrid search]] on Greek Wikipedia. Hybrid search capabilities can handle both semantic and keyword queries enabling readers to find what they’re looking for directly on Wikipedia more easily.
* For security reasons, members of certain user groups are [[m:Special:MyLanguage/Mandatory two-factor authentication for users with some extended rights|required to have two-factor authentication]] (2FA) enabled. Currently, 2FA is required to use the group, but not to be a member of it. Given that this model still has some vulnerabilities, the situation will [[phab:T418580|gradually change in March]]. Members of these groups will be unable to disable last 2FA method on their account, and it will be impossible to add users without 2FA to these groups. Users will still be able to add new authentication methods or remove them, as long as at least one method is continuously enabled. In the second half of March, users without 2FA will be removed from these groups. This applies to: CentralNotice administrators, checkusers, interface administrators, suppressors, Wikidata staff, Wikifunctions staff, WMF Office IT and WMF Trust & Safety. Nothing will change for other users. See the linked task for deployment schedule. [https://phabricator.wikimedia.org/T418580]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:27}} community-submitted {{PLURAL:27|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the issue preventing users from creating an instance in [https://www.wikibase.cloud/ Wikibase.cloud] has now been fixed. [https://phabricator.wikimedia.org/T416807]
'''Updates for technical contributors'''
* To help ensure [[mw:Special:MyLanguage/MediaWiki Product Insights/Responsible Reuse|fair use of infrastructure]], over the next month the Wikimedia Foundation will implement global API rate limits across our APIs. In early March, stricter limits will be applied to unidentified requests from outside Toolforge/WMCS and API requests that are made from web browsers. In April, higher limits will be applied to identified traffic. These limits are intentionally set as high as possible to minimise impact on the community. Bots running in Toolforge/WMCS or with the bot user right on any wiki should not be affected for now. However, all developers are advised to follow updated best practices. For more information, see [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits|Wikimedia APIs/Rate limits]].
* The Wikidata Query Service Linked Data Fragment (LDF) endpoint will be decommissioned in February. This endpoint served limited traffic, which was successfully migrated to other data access methods that were better suited to support existing use cases. The hardware used to support the LDF endpoint will be reallocated to support the ongoing backend migration efforts. [https://phabricator.wikimedia.org/T415696]
* The new Parsoid parser [[mw:Special:MyLanguage/Parsoid/Parser Unification/Updates|continues to be deployed to additional wikis]], improving platform sustainability and making it easier to introduce new reading and editing features. Parsoid is now the default parser on 488 WMF wikis (268 Wikipedias), now covering more than 10% of all Wikipedia page views.
* The process and criteria for [[Special:MyLanguage/Wikimedia Enterprise#Access|requesting exceptional access]] to the high volume feed of the ''Wikimedia Enterprise'' APIs (at no cost for mission-aligned usecases), [[m:Talk:Wikimedia Enterprise#Exceptional access criteria|have now been published]]. This is to provide more thorough and clearer documentation for users.
* [https://techblog.wikimedia.org/ Tech Blog], the blog dedicated to the Wikimedia technical community [https://techblog.wikimedia.org/2026/02/24/a-tech-blog-diff/ will be migrating] to [[diffblog:|Diff]], the community news and event blog. The migration should be complete in April 2026, after which new posts will be accepted for publishing. Readers will be able to access posts – old and new – on the landing page at https://diff.wikimedia.org/techblog.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.18|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/10|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W10"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೨೩:೨೧, ೨ ಮಾರ್ಚಿ ೨೦೨೬ (IST)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30137798 -->
== <span lang="en" dir="ltr">Tech News: 2026-11</span> ==
<div lang="en" dir="ltr">
<section begin="technews-2026-W11"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/11|Translations]] are available.
'''Weekly highlight'''
* [[m:Special:MyLanguage/Tech/Server switch|All wikis will be read-only]] for a few minutes on Wednesday, 25 March 2026 at [https://zonestamp.toolforge.org/1774450800 15:00 UTC]. This is for the datacenter server switchover backup tests, [[wikitech:Deployments/Yearly calendar|which happen twice a year]]. During the switchover, all Wikimedia website traffic is shifted from one primary data center to the backup data center to test availability and prevent service disruption even in emergencies.
* Last week, all wikis had 2 hours of read-only time, and extended unavailability for user-scripts and gadgets. This was due to a security incident which has since been resolved. Work is ongoing to prevent re-occurrences. For current information please see the [[m:Steward's noticeboard#Statement on Meta about today's user script security incident|post on the Stewards' noticeboard]] ([[m:Special:MyLanguage/Wikimedia Foundation/Product and Technology/Product Safety and Integrity/March 2026 User Script Incident|translations]]).
'''Updates for editors'''
* Users facing multiple blocks on mobile will now see the reasons for each block separately, instead of a generic message. This helps them understand why they are blocked and what steps they can take to resolve the issue. For example, users affected for using common VPNs (such as [[Special:MyLanguage/Apple iCloud Private Relay|iCloud Private Relay]]) will receive clearer guidance on what they need to do to start editing again. [https://phabricator.wikimedia.org/T357118]
* Later this week, [[mw:Special:MyLanguage/VisualEditor/Suggestion Mode|Suggestion Mode]] will become available as a beta feature within the visual editor at all Wikipedias. This feature proactively suggests various types of actions that people can consider taking to improve Wikipedia articles, and learn about related guidelines. The feature is locally configurable, and can also be locally expanded with custom Suggestions. Current settings can be seen at [[Special:EditChecks]] and there are [[mw:Special:MyLanguage/Help:Suggestion mode#For administrators %E2%80%93 local customization|instructions for how administrators can customize]] the links to point to local guidelines. The feature is connected to [[mw:Special:MyLanguage/Help:Edit check|Edit check]] which suggests improvements while someone is writing new content. In the future, the Editing team plans to evaluate the feature's impact with newcomers through a controlled experiment. [https://phabricator.wikimedia.org/T404600]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:23}} community-submitted {{PLURAL:23|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the issue where the cursor became misaligned during the use of CodeMirror’s syntax highlighting, which makes wikitext and code easier to read, has now been fixed. This problem specifically affected users who defined a font rule in a custom stylesheet while creating a new topic with DiscussionTools. [https://phabricator.wikimedia.org/T418793]
'''Updates for technical contributors'''
* API rate limiting update: To help ensure [[mw:Special:MyLanguage/MediaWiki Product Insights/Responsible Reuse|fair use of infrastructure]], global API rate limits will be applied this week to requests without a compliant User-Agent that originate from outside Toolforge/WMCS and to unauthenticated requests made from web browsers. Higher limits will be applied to identified traffic in April. Bots running in Toolforge/WMCS or with the bot user right on any wiki should not be affected for now. However, all developers are advised to follow updated best practices. For more information, see [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits|Wikimedia APIs/Rate limits]].
* The new GraphQL API has been released. The API was developed as a flexible alternative to select features of the Wikidata Query Service (WDQS), to improve developer experience and foster adaptability, and efficient data access. Try it out and [[d:Wikidata:Wikibase GraphQL#Feedback and development|give feedback]]. You can also [https://greatquestion.co/wikimediadeutschland/GraphQLAPI/apply sign up for usability tests].
* The [[m:Special:MyLanguage/Product and Technology Advisory Council/Unsupported Tools Working Group|PTAC Unsupported Tools Working Group]] continued improvements to [[commons:Special:MyLanguage/Commons:Video2commons#|Video2Commons]] in February, with fixes addressing authentication errors, large-file handling, task queue visibility, and clearer upload behavior. Work is still ongoing in some areas, including changes related to deprecated server-side uploads. Read [[m:Special:MyLanguage/Product and Technology Advisory Council/Unsupported Tools Working Group#February 2026|this update]] to learn more.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.19|MediaWiki]]
'''In depth'''
* The Article Guidance team invites experienced Wikipedia editors from selected [[mw:Special:MyLanguage/Article guidance/Pilot wikis and collaborators#Collaborators|pilot wikis]] and interested contributors from other Wikipedias to fill out this questionnaire which is available in [https://docs.google.com/forms/d/e/1FAIpQLSfmLeVWnxmsCbPoI_UF2jyRcn73WRGWCVPHzerXb4Cz97X_Ag/viewform English], [https://docs.google.com/forms/d/e/1FAIpQLSd6rzr4XXQw8r4024fE3geTPFe13M_6w7Mitj-YJi0sOlWTAw/viewform?usp=header Arabic], [https://docs.google.com/forms/d/e/1FAIpQLSdok3-RfB18lcugYTUMGkpwmqG_8p760Wv4dCXitOXOszjUDw/viewform?usp=header Bengali], [https://docs.google.com/forms/d/e/1FAIpQLSfjTfYp4jEo0akA4B1e-Nfg3QZPCudUjhJzHzzDi6AHyAaMGA/viewform?usp=header Japanese], [https://docs.google.com/forms/d/e/1FAIpQLScteVoI29Aue4xc72dekk-6RYtvmMgQxzMI900UOawrFrSTWg/viewform?usp=header Portuguese], [https://docs.google.com/forms/d/e/1FAIpQLSetdxnYwL3ub2vqA7awCg5hJZPMIYcDPaiTe12rY9h0GYnVlw/viewform?usp=header Persian], and [https://docs.google.com/forms/d/e/1FAIpQLScNvfJF-Ot-4pzA4qAN771_0QDJ4Li19YcUsaTgSKW8Nc7U_Q/viewform?usp=header Turkish]. Your answers will help the team customize guidance for less experienced editors and help them learn community policies and practices while creating an article. Learn more [[mw:Special:MyLanguage/Article guidance|on the project page]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/11|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W11"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೦:೨೨, ೧೦ ಮಾರ್ಚಿ ೨೦೨೬ (IST)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30213008 -->
== <span lang="en" dir="ltr">Tech News: 2026-12</span> ==
<div lang="en" dir="ltr">
<section begin="technews-2026-W12"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/12|Translations]] are available.
'''Updates for editors'''
* The [[mw:Special:MyLanguage/Help:Extension:CodeMirror|{{int:codemirror-beta-feature-title}}]] beta feature, also known as [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror 6]], has been used for wikitext syntax highlighting since November 2024. It will be promoted out of beta by May 2026 in order to bring improvements and new [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Features|features]] to all editors who use the standard syntax highlighter. If you have any questions or concerns about promoting the feature out of beta, [[mw:Special:MyLanguage/Help talk:Extension:CodeMirror|please share]]. [https://phabricator.wikimedia.org/T259059]
* Some changes to local user groups are performed by stewards on Meta-Wiki and logged there only. Now, interwiki rights changes will be logged both on Meta-Wiki and the wiki of the target user to make it easier to access a full record of user's rights changes on a local wiki. Past log entries for such changes will be backfilled in the coming weeks. [https://phabricator.wikimedia.org/T6055]
* On wikis using [[m:Special:MyLanguage/Flagged Revisions|Flagged Revisions]], the number of pending changes shown on [[{{#Special:PendingChanges}}]] previously counted pages which were no longer pending review, because they have been removed from the system without being reviewed, e.g. due to being deleted, moved to a different namespace, or due to wiki configuration changes. The count will be correct now. On some wikis the number shown will be much smaller than before. There should be no change to the list of pages itself. [https://phabricator.wikimedia.org/T413016]
* Wikifunctions composition language has been rewritten, resulting in a new version of the language. This change aims to increase service stability by reducing the orchestrator's memory consumption. This rewrite also enables substantial latency reduction, code simplification, and better abstractions, which will open the door to later feature additions. Read more about [[f:Special:MyLanguage/Wikifunctions:Status updates/2026-03-11|the changes]].
* Users can now sort search results alphabetically by page title. The update gives an additional option to finding pages more easily and quickly. Previously, results could be sorted by Edit date, Creation date, or Relevance. To use the new option, open 'Advanced Search' on the search results page and select 'Alphabetically' under 'Sorting Order'. [https://phabricator.wikimedia.org/T403775]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:28}} community-submitted {{PLURAL:28|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the bug that prevented UploadWizard on Wikimedia Commons from importing files from Flickr has now been fixed. [https://phabricator.wikimedia.org/T419263]
'''Updates for technical contributors'''
* A new special page, [[{{#special:LintTemplateErrors}}]], has been created to list transcluded pages that are flagged as containing lint errors to help users discover them easily. The list is sorted by the number of transclusions with errors. For example: [[{{#special:LintTemplateErrors}}/night-mode-unaware-background-color]]. [https://phabricator.wikimedia.org/T170874]
* Users of the [[mw:Special:MyLanguage/Help:Extension:CodeMirror|{{int:codemirror-beta-feature-title}}]] beta feature have been using [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror]] instead of [[mw:Special:MyLanguage/Extension:CodeEditor|CodeEditor]] for syntax highlighting when editing JavaScript, CSS, JSON, Vue and Lua content pages, for some time now. Along with promoting CodeMirror 6 out of beta, the plan is to replace CodeEditor as the standard editor for these content models by May 2026. [[mw:Special:MyLanguage/Help talk:Extension:CodeMirror|Feedback or concerns are welcome]]. [https://phabricator.wikimedia.org/T419332]
* The [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror]] JavaScript modules will soon be upgraded to CodeMirror 6. Leading up to the upgrade, loading the <code dir=ltr>ext.CodeMirror</code> or <code dir=ltr>ext.CodeMirror.lib</code> modules from gadgets and user scripts was deprecated in July 2025. The use of the <code dir=ltr>ext.CodeMirror.switch</code> hook was also deprecated in March 2025. Contributors can now make their scripts or gadgets compatible with CodeMirror 6. See the [[mw:Special:MyLanguage/Extension:CodeMirror#Gadgets and user scripts|migration guide]] for more information. [https://phabricator.wikimedia.org/T373720]
* The MediaWiki Interfaces team is expanding coverage of REST API module definitions to include [[mw:Special:MyLanguage/API:REST API/Extensions|extension APIs]]. REST API modules are groups of related endpoints that can be independently managed and versioned. Modules now exist for [https://phabricator.wikimedia.org/T414470 GrowthExperiments] and [https://phabricator.wikimedia.org/T419053 Wikifunctions] APIs. As we migrate extension APIs to this structure, documentation will move out of the main MediaWiki OpenAPI spec and REST Sandbox view, and will instead be accessible via module-specific options in the dropdown on the [https://test.wikipedia.org/wiki/Special:RestSandbox REST Sandbox] (i.e., [[{{#Special:RestSandbox}}]], available on all wiki projects).
* The [[mw:Special:MyLanguage/Extension:Scribunto|Scribunto]] extension provides different pieces of information about the wiki where the module is being used via the [[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual|mw.site]] library. Starting last week, the library also provides a [[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#mw.site.wikiId|way]] of accessing the [[mw:Special:MyLanguage/Manual:Wiki ID|wiki ID]] that can be used to facilitate cross-wiki module maintenance. [https://phabricator.wikimedia.org/T146616]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.20|MediaWiki]]
'''In depth'''
* The [[m:Special:MyLanguage/Coolest Tool Award|2026 Coolest Tool Award]] celebrating outstanding community tools, is now open for nominations! Nominate your favorite tool using the [https://wikimediafoundation.limesurvey.net/435684?lang=en nomination survey] form by 23 March 2026. For more information on privacy and data handling, please see the [[foundation:Special:MyLanguage/Legal:Coolest_Tool_Award_2026_Survey_Privacy_Statement|survey privacy statement]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/12|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W12"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೧:೦೫, ೧೭ ಮಾರ್ಚಿ ೨೦೨೬ (IST)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30260505 -->
== <span lang="en" dir="ltr">Tech News: 2026-13</span> ==
<div lang="en" dir="ltr">
<section begin="technews-2026-W13"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/13|Translations]] are available.
'''Weekly highlight'''
* Wikimedia site users can now log in without a password using passkeys. This is a secure method supported by fingerprint, facial recognition, or PIN. With this change, all users who opt for passwordless login will find it easier, faster, and more secure to log in to their accounts using any device. The new passkey login option currently appears as an autofill suggestion in the username field. An additional [[phab:T417120|"Log in with passkey" button]] will soon be available for users who have already registered a passkey. This update will improve security and user experience. The [[c:File:Passwordless_login_screencast.webm|screen recording]] demonstrates the passwordless login process step by step.
* [[m:Special:MyLanguage/Tech/Server switch|All wikis will be read-only]] for a few minutes on Wednesday, 25 March 2026 at [https://zonestamp.toolforge.org/1774450800 15:00 UTC]. This is for the datacenter server switchover backup tests, [[wikitech:Deployments/Yearly calendar|which happen twice a year]]. During the switchover, all Wikimedia website traffic is shifted from one primary data center to the backup data center to test availability and prevent service disruption even in emergencies.
'''Updates for editors'''
* Wikimedia site users can now export their notifications older than 5 years using a [[toolforge:echo-chamber|new Toolforge tool]]. This will ensure that users retain their important notifications and avoid them being lost based on the planned change to delete notifications older than 5 years, as previously announced. [https://phabricator.wikimedia.org/T383948]
* Wikipedia editors in Indonesian, Thai, Turkish, and Simple English now have access to Special:PersonalDashboard. This is an [[mw:Special:MyLanguage/Moderator Tools/Dashboard|early version of an experience]] that introduces newer editors to patrolling workflows, making it easier for them to move from making edits to participating in more advanced moderation work on their project. [https://phabricator.wikimedia.org/T402647]
* The [[Special:Block]] now has two minor interface changes. Administrators can now easily perform indefinite blocks through a dedicated radio button in the expiry section. Also, choosing an indefinite expiry provides a different set of common reasons to select from, which can be changed at: [[MediaWiki:Ipbreason-indef-dropdown]]. [https://phabricator.wikimedia.org/T401823]
* Mobile editors [[mw:Special:MyLanguage/Contributors/Account Creation Experiments#Logged-out|at several wikis]] can now see an improved logged-out edit warning, thanks to the recent updates from the Growth team. These changes released last week are part of ongoing efforts and tests to enhance [[mw:Special:MyLanguage/Contributors/Account Creation Experiments|account creation experience on mobile]] and then increase participation. [https://phabricator.wikimedia.org/T408484]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:36}} community-submitted {{PLURAL:36|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the bug that prevented mobile web users from seeing the block information when affected by multiple blocks has been fixed. They can now see messages of all the blocks currently affecting them when they access Wikipedia.
'''Updates for technical contributors'''
* Images built using Toolforge will soon get the upgraded buildpacks version, bringing support for newer language versions and other upstream improvements and fixes. If you use Toolforge Build Service, review the recent [https://lists.wikimedia.org/hyperkitty/list/cloud-announce@lists.wikimedia.org/thread/EMYTA32EV2V5SQ2JIEOD2CL66YFIZEKV/ cloud-announce email] and update your build configuration as necessary to ensure your tools are compatible. [https://wikitech.wikimedia.org/w/index.php?title=Help:Toolforge/Building_container_images&oldid=2392097#Buildpack_environment_upgrade_process][https://phabricator.wikimedia.org/T380127]
* The [https://api.wikimedia.org/wiki/Main_Page API Portal] documentation wiki will shut down in June 2026. API keys created on the API Portal will continue to work normally. api.wikimedia.org endpoints will be deprecated gradually starting in July 2026. Documentation on the API Portal is moving to [[mw:Wikimedia APIs|mediawiki.org]]. Learn more on the [[wikitech:API Portal/Deprecation|project page]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.21|MediaWiki]]
'''In depth'''
* [[m:Special:MyLanguage/WMDE Technical Wishes|WMDE Technical Wishes]] is considering improvements to [[m:WMDE Technical Wishes/References/VisualEditor automatic reference names|automatically generated reference names in VisualEditor]]. Please check out the [[m:WMDE Technical Wishes/References/VisualEditor automatic reference names#Proposed solutions|proposed solutions]] and participate in the [[m:Talk:WMDE Technical Wishes/References/VisualEditor automatic reference names#Request for comment|request for comment]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/13|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W13"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೨೨:೨೧, ೨೩ ಮಾರ್ಚಿ ೨೦೨೬ (IST)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30268305 -->
== <span lang="en" dir="ltr">Tech News: 2026-14</span> ==
<div lang="en" dir="ltr">
<section begin="technews-2026-W14"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/14|Translations]] are available.
'''Weekly highlight'''
* The Beta version of [[abstract:|Abstract Wikipedia]] a new Wikimedia project which is language-independent, was launched last week. The project allows communities to build Wikipedia articles in their native language, which can be readily accessed by other users in their own languages. The wiki is powered by instructions from Wikifunctions and also based on structured content from Wikidata. [[:f:Special:MyLanguage/Wikifunctions:Status updates/2026-03-26|Read more]].
'''Updates for editors'''
* The Growth team is running an A/B test to evaluate a clearer, more user-friendly message that promotes account creation on wikis. Currently when logged-out mobile users begin editing, they see a jarring warning message that can feel abrupt and discouraging. This also presents temporary account editing as the default rather than encouraging account creation. The test is running on ten Wikipedias, including Arabic, French, Spanish and German. [[mw:Special:MyLanguage/Contributors/Account Creation Experiments#2. Improve logged-out warning message (T415160)|Read more]].
* The Wikimedia Apps team is inviting feedback on [[mw:Special:MyLanguage/Wikimedia Apps/Team/Future of Editing on the Mobile Apps|how editing should work on the Wikipedia mobile apps]]. The discussion focuses on improving how users access editing tools when they tap "Edit". This is part of a broader effort to convert readers who develop an interest in editing, to access a more user-friendly pathway to start contributing.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:45}} community-submitted {{PLURAL:45|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where citation fetching from the large newspaper archive [https://www.newspapers.com Newspapers.com] was no longer working, due to a block in [[mw:Special:MyLanguage/Citoid|Citoid]] requests, has now been fixed. [https://phabricator.wikimedia.org/T419903]
'''Updates for technical contributors'''
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.22|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/14|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W14"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೦:೫೫, ೩೧ ಮಾರ್ಚಿ ೨೦೨೬ (IST)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30329462 -->
== <span lang="en" dir="ltr">Tech News: 2026-15</span> ==
<div lang="en" dir="ltr">
<section begin="technews-2026-W15"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/15|Translations]] are available.
'''Updates for editors'''
* The [[mw:Special:MyLanguage/Help:Extension:CampaignEvents|CampaignEvents extension]] now includes a new group goal-setting feature, enabling organizers to set and track event goals such as the number of articles created and participating contributors in real time. Similarly, participants can work toward shared targets and see their collective impact as the event unfolds. The feature is now available on all Wikimedia wikis. Learn more in [[mw:Special:MyLanguage/Help:Extension:CampaignEvents/Registration/Collaborative contributions#Goal setting|the documentation]].
* [[File:Maki-gift-15.svg|12px|link=|class=skin-invert|Wishlist item]] The new [[mw:Special:MyLanguage/Help:Watchlist labels|watchlist labels]] feature (announced in [[m:Special:MyLanguage/Tech/News/2026/07|Tech News 2026-07]]) is now available via VisualEditor, the source editor, and the 'watchstar' (or watch link, for skins that don't have a star icon). Previously it was only possible to assign labels via [[Special:EditWatchlist|EditWatchlist]]. In all three places it is a new field following the expiry field.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:23}} community-submitted {{PLURAL:23|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the issue where talk pages on mobile with Parsoid are unusable after empty section headers, has now been fixed. [https://phabricator.wikimedia.org/T419171]
'''Updates for technical contributors'''
* The [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|sub-referencing feature]], which lets editors add details to an existing reference without duplicating it, will be gradually rolled out to [[phab:T414094|more wikis]] later this year. Wikis using the [[mw:Special:MyLanguage/Reference Tooltips|Reference Tooltips]] gadget are encouraged to update their version (typically at [[m:MediaWiki:Gadget-ReferenceTooltips.js|MediaWiki:Gadget-ReferenceTooltips.js]] as shown [https://en.wikipedia.org/w/index.php?diff=1344408362 here]) to ensure compatibility. Other reference-related gadgets may also be affected. [https://phabricator.wikimedia.org/T416304]
* All Wikinews editions will be closed and switched to read-only mode on 4 May 2026. Content will remain accessible, but no new edits or articles can be added. This closure was approved by the Board of Trustees of the Wikimedia Foundation following extended discussions. [[m:Wikimedia Foundation Board noticeboard#Board of Trustees Approves Closure of Wikinews|Read more]].
* The [[:mw:Special:MyLanguage/API:Action API|Action API]] has had several formats for requested output. One of them, <bdi lang="zxx" dir="ltr"><code><nowiki>format=php</nowiki></code></bdi>, is being removed soon. Please ensure your scripts or bots use the [[mw:Special:MyLanguage/API:Data formats#Output|JSON format]]. This removal should affect very few scripts and bots. [https://phabricator.wikimedia.org/T118538]
* The [[Special:NamespaceInfo|Special:NamespaceInfo]] page now includes namespace aliases. For example "WP" for the "Project" ("Wikipedia") namespace on the German Wikipedia. [https://phabricator.wikimedia.org/T381455]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.23|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/15|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W15"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೨೧:೪೯, ೬ ಎಪ್ರಿಲ್ ೨೦೨೬ (IST)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30362761 -->
== <span lang="en" dir="ltr">Tech News: 2026-16</span> ==
<div lang="en" dir="ltr">
<section begin="technews-2026-W16"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/16|Translations]] are available.
'''Weekly highlight'''
* Experienced editors are invited to [https://b24e11a4f1.catalyst.wmcloud.org/wiki/Main_Page test] the [[mw:Special:MyLanguage/Article guidance|Article guidance]] feature, designed to help less-experienced editors create well-structured, policy-compliant Wikipedia articles. Testing instructions are [[mw:Special:MyLanguage/Article guidance/Test feature guide|available]]. Also, after reviewing [https://b24e11a4f1.catalyst.wmcloud.org/wiki/Category:Pages_using_article_guidance the outlines], please provide feedback on the [[mw:Talk:Article guidance|project talk page]]. Based on your input, the feature will be refined and transferred to the pilot Wikipedias to translate and adapt. Check out [[c:File:Article Guidance workflow demo - April 2026.webm|the video]] explaining the feature.
'''Updates for editors'''
* On most wikis, all autoconfirmed users can now use [[Special:ChangeContentModel|Special:ChangeContentModel]] page to [[mw:Special:MyLanguage/Help:ChangeContentModel|create new pages with custom content models]], such as mass message lists, making custom page formats more accessible. Check [[Special:ListGroupRights|Special:ListGroupRights]] for the status of your wiki. [https://phabricator.wikimedia.org/T248294]
* The Growth team has launched an [[mw:Special:MyLanguage/Contributors/Account_Creation_Experiments|account creation experiment]] to evaluate whether adding an account creation button to the mobile web header increases new account registrations and encourages more mobile users to contribute to the wikis. The experiment is currently live on Hindi, Indonesian, Bengali, Thai, and Hebrew Wikipedia, and targets 10% of logged-out mobile web users.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:30}} community-submitted {{PLURAL:30|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where VisualEditor could get stuck loading on Windows devices with animations turned off, has now been fixed. [https://phabricator.wikimedia.org/T382856]
'''Updates for technical contributors'''
* Starting later this week, {{int:group-abusefilter}} who have the [[mw:Special:MyLanguage/Help:Extension:CodeMirror|{{int:codemirror-beta-feature-title}}]] beta feature enabled will have [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror]] instead of [[mw:Special:MyLanguage/Extension:CodeEditor|CodeEditor]] as the editor at [[Special:AbuseFilter|Special:AbuseFilter]]. This is part of the broader effort to make the user experience more consistent across all editors. [https://phabricator.wikimedia.org/T399673][https://phabricator.wikimedia.org/T419332]
* Tools and bots that access the [[mw:Special:MyLanguage/Notifications/API|Notifications API]] (<bdi lang="zxx" dir="ltr"><code><nowiki>action=query&meta=notifications</nowiki></code></bdi>) will need to update their OAuth or BotPassword grants to also include access to private notifications. [https://phabricator.wikimedia.org/T421991]
* Due to a library upgrade, listings on category pages may be displayed out of order starting on Monday, 20th April. A migration script will be run to correct this, and will take hours to days depending on the size of the wiki (up to a week for English Wikipedia). [https://phabricator.wikimedia.org/T422544]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.24|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/16|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W16"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೨೦:೪೮, ೧೩ ಎಪ್ರಿಲ್ ೨೦೨೬ (IST)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30380527 -->
== <span lang="en" dir="ltr">Tech News: 2026-17</span> ==
<div lang="en" dir="ltr">
<section begin="technews-2026-W17"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/17|Translations]] are available.
'''Weekly highlight'''
* After two years of development, [[mw:Special:MyLanguage/Help:Extension:CodeMirror|{{int:codemirror-beta-feature-title}}]], also known as [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror 6]], is to be promoted out of beta on Tuesday, April 21. It brings better code and wikitext readability, reduction in typing errors, and other [[mw:Special:MyLanguage/Help:Extension:CodeMirror|benefits]] to all users of the standard syntax highlighter. A huge thank you to volunteer [https://phabricator.wikimedia.org/p/Bhsd/ Bhsd] who developed many of the new features, including [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Code folding|code folding]], [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Autocompletion|autocompletion]], and [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Linting|linting]]. [https://phabricator.wikimedia.org/T259059]
* A major update to the Wikipedia app for iOS is now rolling out, redesigning the interface to align with Apple's latest "Liquid Glass" visual design. [https://apps.apple.com/us/app/wikipedia/id324715238 Download the latest version] and explore the update.
'''Updates for editors'''
* [[mw:Special:MyLanguage/Readers/Reader Experience/WE3.3.4 Reading lists|Reading lists]] is a feature which allows readers to save articles to a list for reading later. This feature is now in beta on Arabic, French, Indonesian, Vietnamese, and Chinese Wikipedias and by default for all new accounts on all Wikipedias.
* An experiment which explores extending [[mw:Special:MyLanguage/Readers/Reader Growth/Mobile page previews|Page Previews to mobile web]] will be launched in the week of April 20 on Arabic, English, French, Italian, Polish, and Vietnamese Wikipedias. Page Previews are pop-ups that display a thumbnail, lead paragraph, and a link to open the full article of a blue link, thereby improving content discovery. The feature is already available on desktop and in the apps. [[m:Special:MyLanguage/List of experiments in Product and Technology#Template|Read more about this experiment and others]].
* On several wikis, logged-in editors who haven't [[mw:Special:MyLanguage/Help:Email confirmation|confirmed their email addresses]] can now see a banner encouraging them to do so. Having the email address confirmed allows a user to restore access to the account if they lose it. [[mw:Special:MyLanguage/Product Safety and Integrity/Account Security#Encouraging users to confirm their email addresses|Learn more]]. [https://phabricator.wikimedia.org/T421366]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:15}} community-submitted {{PLURAL:15|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where editing very large wiki pages in the 2017 wikitext editor caused slow loading, preview and scrolling lag, and performance issues when selecting, cutting, or pasting content, has now been fixed. [https://phabricator.wikimedia.org/T184857]
'''Updates for technical contributors'''
* As part of the promotion of [[mw:Special:MyLanguage/Help:Extension:CodeMirror|CodeMirror]] from a beta feature, all users will use [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror]] instead of [[mw:Special:MyLanguage/Extension:CodeEditor|CodeEditor]] for syntax highlighting when editing JavaScript, CSS, JSON, Vue and Lua content pages. [https://phabricator.wikimedia.org/T419332]
* The <code>mirrors.wikimedia.org</code> service for Debian and Ubuntu users will sunset and stop working on May 15. The resources for the service will be replaced with new and better options. Some users may need to switch to a different server which should take about a minute. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/LJYRIS4WB66HIRCAO4GIDTXCMDVZRBMA/ You can read more]. [https://phabricator.wikimedia.org/T416707]
* The <bdi lang="zxx" dir="ltr"><code><nowiki>image</nowiki></code></bdi> and <bdi lang="zxx" dir="ltr"><code><nowiki>oldimage</nowiki></code></bdi> table will be removed from [[wikitech:Help:Wiki Replicas|wikireplicas]]. If your tools or queries access <bdi lang="zxx" dir="ltr"><code><nowiki>image</nowiki></code></bdi> or <bdi lang="zxx" dir="ltr"><code><nowiki>oldimage</nowiki></code></bdi> directly, please update them to use the <bdi lang="zxx" dir="ltr"><code><nowiki>file</nowiki></code></bdi> and <bdi lang="zxx" dir="ltr"><code><nowiki>filerevision</nowiki></code></bdi> table before 28 May. [https://phabricator.wikimedia.org/T28741]
* Following the recent implementation of global API rate limits on unidentified traffic, the Wikimedia Foundation will continue efforts to ensure [[mw:Special:MyLanguage/MediaWiki Product Insights/Responsible Reuse|fair use of infrastructure]] by applying global limits to identified API traffic beginning the last week of April. These limits are intentionally set as high as possible to minimise impact on the community. Bots running in Toolforge/WMCS or with the bot user right on any wiki should not be affected for now. However, all developers are advised to follow updated best practices. For more information, see [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits|Wikimedia APIs/Rate limits]] and [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits/FAQ|Frequently Asked Questions]].
* The [[mw:Special:MyLanguage/Attribution API|Attribution API]] is now available as a [[mw:Special:MyLanguage/Wikimedia APIs/Stability policy|beta]]. The API fetches information for crediting Wikimedia articles and media files wherever they are used. Reference documentation is available through the REST Sandbox special page available on all Wikimedia wikis (such as the [https://en.wikipedia.org/w/index.php?api=attribution.v0-beta&title=Special%3ARestSandbox REST sandbox on English Wikipedia]). Share your feedback on the [[mw:Talk:Attribution API|project talk page]].
* There is no new MediaWiki version this week.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/17|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W17"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೨೦:೩೦, ೨೦ ಎಪ್ರಿಲ್ ೨೦೨೬ (IST)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30432763 -->
== <span lang="en" dir="ltr">Tech News: 2026-18</span> ==
<div lang="en" dir="ltr">
<section begin="technews-2026-W18"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/18|Translations]] are available.
'''Updates for editors'''
* There is a change in how new users are autoconfirmed that will improve anti-vandalism protection. Currently, users who have had an account for a few days and made a few edits are automatically added to the [[{{int:grouppage-autoconfirmed/{{CONTENTLANGUAGE}}}}|{{int:group-autoconfirmed}}]] group. This configuration tends to be exploited by some vandals, who create accounts and start to use them only after some time. To mitigate this, the configuration will be updated next week so that – for the purpose of becoming autoconfirmed – the account age will be counted from their first edit, instead of registration date. The numeric value of the age threshold will remain the same. This change will be deployed only to wikis which require at least one edit as part of the autoconfirmation conditions. [https://phabricator.wikimedia.org/T418484]
* All Wikipedia users with new accounts and those who activated the "automatically enable most beta features" option in their preference can now use the [[mw:Special:MyLanguage/Readers/Reader Experience/WE3.3.4 Reading lists|reading lists]] beta feature to save articles for later reading. This helps organize reading interests in one place for convenient access.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:30}} community-submitted {{PLURAL:30|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the issue where infobox images have huge padding in Firefox, has been fixed. [https://phabricator.wikimedia.org/T423676]
'''Updates for technical contributors'''
* As a reminder, the global API rate limits will be applied this week to identified API traffic. This is to help ensure [[mw:MediaWiki Product Insights/Responsible Reuse|fair use of infrastructure]]. Bots running in Toolforge/WMCS or with the bot user right on any wiki should not be affected for now. However, all developers are advised to follow updated best practices. For more information, including the actual rate limits, see [[mw:Wikimedia APIs/Rate limits|Wikimedia APIs/Rate limits]] and [[mw:Wikimedia APIs/Rate limits/FAQ|Frequently Asked Questions]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.26|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/18|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W18"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೨೩:೩೬, ೨೭ ಎಪ್ರಿಲ್ ೨೦೨೬ (IST)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30458046 -->
== <span lang="en" dir="ltr">Tech News: 2026-19</span> ==
<div lang="en" dir="ltr">
<section begin="technews-2026-W19"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/19|Translations]] are available.
'''Weekly highlight'''
* The [[mw:Special:MyLanguage/Article guidance|Article guidance]] team invites experienced editors of [[mw:Special:MyLanguage/Article guidance/Pilot wikis and collaborators|pilot Wikipedias]]—Arabic, Bangla, Japanese, Portuguese, Persian, Turkish, Simple English, Spanish, and French—to help translate and adapt [https://b24e11a4f1.catalyst.wmcloud.org/wiki/Category:Pages_using_article_guidance sample outlines]. These outlines will guide editors in creating clear, well-structured, and policy-compliant articles when using [https://b24e11a4f1.catalyst.wmcloud.org/wiki/Special:NewArticle the feature] once it is launched in May 2026. [[mw:Special:MyLanguage/Article guidance#Adapting a sample outline in a Wikipedia|Simple instructions]] on how to translate and adapt the outlines are available.
'''Updates for editors'''
* The [[:m:Special:MyLanguage/Product and Technology Advisory Council|Product and Technology Advisory Council]] has published [[:m:Special:MyLanguage/Product and Technology Advisory Council/May 2026 draft PTAC recommendation for feedback|draft recommendations]] on a model that affiliates can follow when contributing to the technical space. Community members are invited to provide feedback on the recommendation until May 8th [[:m:Talk:Product and Technology Advisory Council/May 2026 draft PTAC recommendation for feedback|on the talk page]].
* The number of available thumbnail size preferences in MediaWiki is being reduced to three standardized options—Small (180px), Regular (250px), and Large (400px), as part of ongoing efforts to improve performance and reduce strain on thumbnail services. As a result, existing preferences will be mapped to the nearest new size (for example, smaller selections like 120px or 150px will render at 180px, while larger ones like 300px or 360px will render at 400px). The preferences interface will soon be updated to reflect these changes, and users who wish to opt out or provide feedback can do so. [https://phabricator.wikimedia.org/T424909]
* From now on, even when a permission expires automatically, users will receive an Echo notification similar to the standard notification for permission changes. There is a difference between this and [[m:Special:MyLanguage/Global reminder bot|Global reminder bot]] in that the latter reminds users a week ''before'' the rights are due to expire, so that they can renew the rights.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:32}} community-submitted {{PLURAL:32|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the problem where the ULS language selector in [[m:Special:Translate|Special:Translate]] would scroll vertically when it shouldn't, has been resolved. Previously, when users opened the "Translate to English" dropdown and typed certain inputs, the dialog would scroll vertically by a few pixels even when there was enough space to display all results. The dropdown no longer shifts unnecessarily when filtering languages. [https://phabricator.wikimedia.org/T358864]
* The [[m:Special:GlobalWatchlist|Global Watchlist]], which lets you view your watchlists from multiple wikis on a single page, continues to improve. For example, watchlists for Wikibase sites such as [[:d:|Wikidata]] now support [[mw:Special:MyLanguage/Extension:EntitySchema|EntitySchema]] elements for better tracking. The Live Updates mode now refreshes the special page every 60 seconds to comply with the updated [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits|global API rate limits]] for improved real-time responsiveness. Additionally, a directionality bug that displayed links as "changes 3" instead of "3 changes" in mixed-direction lists has been fixed. [https://phabricator.wikimedia.org/T415450][https://phabricator.wikimedia.org/T424422][https://phabricator.wikimedia.org/T418091]
'''Updates for technical contributors'''
* The second phase of [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits|global API rate limits]] has been rolled out to reduce the [[diffblog:2026/03/26/quo-vadis-crawlers-progress-and-whats-next-on-safeguarding-our-infrastructure/|impact of AI crawlers]] and ensure fair, sustainable access to Wikimedia resources, prioritising human and mission-aligned traffic. [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits#Limits|Limits]] have been shifted from per-hour to per-minute, producing smoother traffic patterns and more predictable API load. Community users are not expected to be affected, and no action is required. Early indications show some User-Agent-based requestors are adjusting behaviour, and around 64% of automated API traffic has been identified. Monitoring continues, and Wikimedia Enterprise remains available for commercial support.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.27|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/19|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W19"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೨:೧೩, ೫ ಮೇ ೨೦೨೬ (IST)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30498077 -->
== <span lang="en" dir="ltr">Tech News: 2026-20</span> ==
<div lang="en" dir="ltr">
<section begin="technews-2026-W20"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/20|Translations]] are available.
'''Weekly highlight'''
* Community Tech has published [[m:Special:MyLanguage/Community Wishlist/How to write a good wish|new guidance]] explaining how wishes on Community Wishlist are triaged and prioritized. The documentation is intended to help contributors write stronger proposals by clarifying the factors that influence prioritization decisions. Beyond vote counts, the guidance highlights considerations such as potential impact on the community when determining which wishes move forward.
'''Updates for editors'''
* The Reader Growth team is launching an experiment to test a new [[mw:Special:MyLanguage/Readers/Reader_Growth/Share_Card|Share Card feature]] that allows readers to create visually engaging cards from Wikipedia articles or selected article sections and share them online, with each card linking back to the original article to help expand readership and article discovery. The mobile-only A/B test will be available to a portion of readers on Arabic, Chinese, French, Vietnamese, and English Wikipedia to better understand reading and sharing habits, and is scheduled to begin the week of May 18 and run for four weeks.
* The Android and iOS Wikipedia apps recently released the [[mw:Special:MyLanguage/Wikimedia_Apps/Team/25th_Birthday_Reading_Challenge|25-day reading challenge]] into Beta, as part of efforts to drive reader engagement by encouraging users to complete reading milestones. To track their reading streak during the challenge, App users can add a widget featuring Baby Globe to their home screen. The challenge officially begins May 11.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:17}} community-submitted {{PLURAL:17|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where the global preference for enabling syntax highlighting in wikitext could unexpectedly disable itself after being turned on, has now been fixed. [https://phabricator.wikimedia.org/T425286]
'''Updates for technical contributors'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The ResourceLoader module <bdi lang="zxx" dir="ltr"><code><nowiki>mediawiki.ui.input</nowiki></code></bdi>, deprecated since [[m:Special:MyLanguage/Tech/News/2023/39|September 2023]], will be removed this week. There is a [[mw:Special:MyLanguage/Codex/Migrating_from_MediaWiki_UI|guide for migrating from MediaWiki UI to Codex]] for any tools that use it. [https://phabricator.wikimedia.org/T420125]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.2|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/20|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W20"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೦:೫೦, ೧೨ ಮೇ ೨೦೨೬ (IST)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30524429 -->
== <span lang="en" dir="ltr">Tech News: 2026-21</span> ==
<div lang="en" dir="ltr">
<section begin="technews-2026-W21"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/21|Translations]] are available.
'''Weekly highlight'''
* The Abstract Wikipedia team has identified five potential pilot wikis to assess their interest in adopting abstract articles on their wikis. The pilots are Malayalam, Bengali, Dagbani, Arabic, and Indonesian Wikipedia. The feedback period will be open until May 22. If your community is interested in becoming a pilot, [[m:Talk:Abstract Wikipedia|let us know on Meta]].
'''Updates for editors'''
* An experiment to show [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|Reading Lists]] to logged-out readers on mobile web will launch on May 18 across German, Spanish, Italian, Portuguese, Polish, Dutch, Turkish, and Urdu Wikipedias, and will run for one month. The effort supports broader goals of helping readers save and organize articles for later reading, while encouraging habits that could lead to future Wikipedia contributions.
* To support a bookmark button in the Reading List beta feature, the "Tools > Action" menu has been updated to display icons, including the watch star indicator that helps editors identify temporarily watched articles. The icons now also match those used on mobile, improving consistency across platforms. The change is currently limited to the actions menu and mainly affects editors with privileged user rights. [https://phabricator.wikimedia.org/T426008]
* [[mw:Special:MyLanguage/VisualEditor/Suggestion Mode|Suggestion Mode]] was released as an [[w:en:A/B test|A/B test]] for newcomer editors on the mobile website at [[phab:T421189|~15 Wikipedias]]. The experiment will measure the impact that Suggestion Mode has on the proportion of newcomer mobile web edit sessions that result in constructive (un-reverted) article edits. The experiment will also evaluate the feature's impact on editor retention, and monitor changes in revert and block rates.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:27}} community-submitted {{PLURAL:27|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue in the Wikipedia Android app where images could sometimes fail to load after opening a recommended reading list notification, has now been fixed. [https://phabricator.wikimedia.org/T418231]
'''Updates for technical contributors'''
* The [[mw:Special:MyLanguage/Wikidata Platform|Wikidata Platform team]] has published its [[d:Special:MyLanguage/Wikidata:SPARQL query service/WDQS backend update/Backend Replacement|backend replacement recommendation]] and accompanying [[wikitech:Wikidata Query Service/WDQS Architecture re-design|technical architecture]] for the migration of the Wikidata Query Service (WDQS) away from Blazegraph. Feedback is invited until May 25th 2026, especially on potential gaps and impacts on advanced use cases. Wikidata community members and WDQS users are also encouraged to help identify high-impact tools and workflows that may need attention on [[d:Wikidata:SPARQL query service/WDQS backend update/High-Impact Use Cases|this page]]. Feedback can be shared on the [[d:Wikidata talk:SPARQL query service/WDQS backend update|Migration talk page]] or during the [[d:Special:MyLanguage/Wikidata:Blazegraph Migration Office Hours|next office hour]]. See the [[d:Special:MyLanguage/Wikidata:Wikidata Platform team/Newsletter|WDP team newsletter]] for more details.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.3|MediaWiki]]
'''In depth'''
* On English, French, Japanese, and a few other Wikipedias, there was a [[diffblog:2025/09/02/better-detecting-bots-and-replacing-our-captcha/|trial of hCaptcha]], a third-party bot detection service. The trial showed that hCaptcha effectively detects and deters some bad-faith automated activity, on its own and by giving [[w:en:Wikipedia:Village pump (technical)/Archive 225#Introducing SuggestedInvestigations|checkusers and stewards]] signals to look into. Because the results were positive, hCaptcha will be rolled out across all wikis over the next few weeks. [[mw:Special:MyLanguage/Product Safety and Integrity/Anti-abuse signals/hCaptcha|See the hCaptcha project page]] for technical information about the implementation and privacy protections. [[diffblog:2026/05/04/better-detecting-bots-and-replacing-our-captcha-part-2/|Learn more]].
* The latest Community Tech update is now available, with progress across several Community Wishlist initiatives, including Reading Lists expansion from the mobile app to the website, new language support for "Who Wrote That" and the Personal Dashboard, improvements to 3D rendering and Charts, and upcoming work on talk page sorting, audio playback, and editing workflows. The update also shares current priorities, wishlist status trends, and opportunities for community feedback on future focus areas and the Wikimedia Foundation’s 2026–2027 Annual Plan. [[m:Special:MyLanguage/Community Wishlist/Updates#May 13, 2026: Latest updates from the Community Tech team|Read the full newsletter for details]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/21|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W21"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೧:೫೧, ೧೯ ಮೇ ೨೦೨೬ (IST)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30539262 -->
== <span lang="en" dir="ltr">Tech News: 2026-22</span> ==
<div lang="en" dir="ltr">
<section begin="technews-2026-W22"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/22|Translations]] are available.
'''Weekly highlight'''
* Following a [[mw:Special:MyLanguage/Contributors/Account Creation Experiments#LOWM|successful account creation experiment]], an improved logged-out edit warning message will be deployed to all Wikimedia wikis in the first week of June. The change will only affect logged-out users on mobile web who open an editing session. The updated experience is designed to encourage account creation more clearly, while still allowing users to edit with temporary accounts. Results from the experiment showed a significant increase in account creation, with a 27% relative lift among users shown the updated message. As expected, as more people funnel into account creation, temporary accounts decreased by a relative 16%. The experiment did not show any significant changes in constructive edit rates or other monitored contributor metrics. [https://phabricator.wikimedia.org/T424595]
'''Updates for editors'''
* For security reasons, members of certain user groups are [[m:Special:MyLanguage/Mandatory two-factor authentication for users with some extended rights|required to have two-factor authentication]] (2FA) enabled. Members of these groups will be unable to disable the last 2FA method on their account, and it will be impossible to add users without 2FA to these groups. Users will still be able to add new authentication methods or remove them, as long as at least one method is continuously enabled. In the next few weeks, users without 2FA will be removed from these groups. Notably, this applies to bureaucrats. See the linked tasks for deployment schedules. [https://phabricator.wikimedia.org/T423119][https://phabricator.wikimedia.org/T423120]
* [[m:Special:MyLanguage/WMDE Technical Wishes|WMDE Technical Wishes]] will run an [[w:en:A/B testing|A/B test]] on [[:phab:T415904|10 wikis]], testing [[m:WMDE Technical Wishes/References/Reference Previews|potential improvements for Reference Previews]]. The experiment will run for ~2 weeks at the end of May / beginning of June and will affect 10% of desktop readers on the participating wikis.
* After two successful experiments, the Reader Growth team is rolling out an [[mw:Special:MyLanguage/Readers/Reader Growth/Image Browsing|Image Browsing]] beta feature for all Wikipedias on mobile on May 25. This means that anyone who has all beta features on by default will start to see this feature, and others can check the box to turn it on in their preferences. The beta feature will include a carousel of all an article's images at the top of the article, with controls for editors to [[mw:Readers/Reader_Growth/Image_Browsing#Phase_2.1_beta_feature|exclude images from the article's carousel or to exclude an article from the feature entirely]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:30}} community-submitted {{PLURAL:30|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, three dimensional STL files were being rendered incorrectly by the media viewer 3D extension which is now fixed. [https://phabricator.wikimedia.org/T416723]
'''Updates for technical contributors'''
* The legacy CSS classes <bdi lang="zxx" dir="ltr"><code><nowiki>tleft</nowiki></code></bdi> and <bdi lang="zxx" dir="ltr"><code><nowiki>tright</nowiki></code></bdi> have been replaced with <bdi lang="zxx" dir="ltr"><code><nowiki>floatleft</nowiki></code></bdi> and <bdi lang="zxx" dir="ltr"><code><nowiki>floatright</nowiki></code></bdi> as the former do not work consistently across all MediaWiki platforms, notably mobile web and mobile apps. Projects relying on these classes are encouraged to review related usage and plan for migration. Please note that <bdi lang="zxx" dir="ltr"><code><nowiki>floatleft</nowiki></code></bdi> and <bdi lang="zxx" dir="ltr"><code><nowiki>floatright</nowiki></code></bdi> may also be deprecated in future, although there are currently no plans to do so. [[phab:T426452|Read more]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.4|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/22|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W22"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೩:೨೨, ೨೬ ಮೇ ೨೦೨೬ (IST)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30584502 -->
== <span lang="en" dir="ltr">Tech News: 2026-23</span> ==
<div lang="en" dir="ltr">
<section begin="technews-2026-W23"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/23|Translations]] are available.
'''Updates for editors'''
* The [[mw:Special:MyLanguage/Readers/Reader Experience|Reader Experience team]] is conducting an experiment to show the [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|reading lists]] feature, which is still in development, to logged-out mobile readers to test whether it encourages account creation at a higher rate compared to the watchstar button. The [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists#Experiment timeline|experiment]] was launched on May 18th on German, Spanish, Italian, Portuguese, Polish, Dutch, Turkish, and Urdu wikis, and it will run for a month.
* The Wikimedia Apps team released [[mw:Special:MyLanguage/Wikimedia Apps/Team/Explore Feed Refresh/Phase 1|Phase 1]] of the redesigned Home Feed to the Android Beta app. The new Home Feed includes a refreshed "Community" tab and a personalized "For You" tab featuring daily updated reading recommendations. The redesign is part of a broader effort to improve content discovery and create more engaging learning experiences in the Wikipedia apps.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:18}} community-submitted {{PLURAL:18|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where images could fail to load for some suggested edits on [[w:Special:Homepage|Special:Homepage]], leaving the thumbnail stuck in a loading state, has now been fixed. [https://phabricator.wikimedia.org/T424048]
'''Updates for technical contributors'''
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.5|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/23|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W23"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೨:೩೮, ೨ ಜೂನ್ ೨೦೨೬ (IST)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30613639 -->
== <span lang="en" dir="ltr">Tech News: 2026-24</span> ==
<div lang="en" dir="ltr">
<section begin="technews-2026-W24"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/24|Translations]] are available.
'''Weekly highlight'''
* Wikimedia Enterprise has increased the free usage limits for its API offerings. The monthly request limit for the On-demand API has increased from 5,000 to 50,000 requests, while the Snapshot API limit has increased from 15 to 30 requests per month. In addition, Structured Contents snapshots are now available for free accounts. These changes expand access to Wikimedia Enterprise data for developers, researchers, and organizations using Wikimedia content. [https://enterprise.wikimedia.com/blog/enhanced-free-api]
'''Updates for editors'''
* The [[mw:Special:MyLanguage/Wikimedia_Apps/Team/Explore Feed Refresh/Phase 1|refreshed Explore Feed]], now called the Home Feed, is rolling out to 50% of users of the Wikipedia Android app. The Home Feed helps readers discover relevant content through two new tabs: ''Community'' and ''For You''. The Community tab provides a scrollable feed of curated content and updates from the broader Wikimedia community and movement, while the ''For You'' tab offers a full-screen, swipeable experience that shows content tailored to a user's interests. The redesign is part of a broader effort to improve discovery and enhance the learning experience in the Wikipedia app.
* The [[mw:Special:MyLanguage/Wikimedia Apps/Team/iOS/"Which came first?" Game|Which came first?]] daily trivia game is now available in the beta version of the Wikipedia iOS app in English, German, French, Portuguese, Russian, Spanish, Arabic, Chinese, and Turkish. The game uses historical events from Wikipedia's "On This Day" content and challenges readers to guess which of two events happened first. The game was previously released on Android. Communities interested in making the game available in their languages can [[mw:Special:MyLanguage/Wikimedia_Apps/Team/Games#Game availability by language|read the instructions and requirements]].
* [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|Sub-referencing]], a new MediaWiki feature that allows editors to reuse references with different details, will begin rolling out to Wikimedia wikis following a successful pilot phase. Deployment will start on 8 June for most [[wikitech:Deployments/Train#Wednesday|Group 1 wikis]] and French Wikipedia, with additional Wikipedia language editions receiving the feature over the coming months. Communities are encouraged to prepare by checking for [https://translatewiki.net/w/i.php?title=Special%3ATranslate&group=ext-cite&language=en&action_source=search&filter=%21translated&optional=1&action=translate untranslated Cite extension messages] in their language and reviewing any use of [[mw:Special:MyLanguage/Reference Tooltips|Reference Tooltips]], which may require [[:phab:T416304#11668731|updates]] to support the new functionality. Wikis using [[mw:Special:MyLanguage/Help:Reference Previews|Reference Previews]] do not need to take any action. Communities may also wish to create the ''cite-tracking-category-ref-details'' [[Special:TrackingCategories|tracking category]] as a hidden category using <code><nowiki>__HIDDENCAT__</nowiki></code> (or a dedicated template), and connect it to the corresponding Wikidata item [[d:Q129764848]]. [https://phabricator.wikimedia.org/T425662]
* The [[mw:Special:MyLanguage/Readers/Reader Growth/Mobile page previews#Experimentation|Page Previews experiment]] on mobile web has concluded. The team decided not to roll out the feature after the results showed no statistically significant impact on reader retention, as the primary success metric was retention improvement. Page Previews, which are already available on desktop and in the apps, display a thumbnail, lead paragraph, and link to the full article when readers tap a blue link. The experiment tested this experience on mobile web across six Wikipedias.
* The [[mw:Special:MyLanguage/Codex/Design/Icons|user interface icon library]] will be [[phab:T399175|updated later this week or next week]]. Most of the ~300 icons have been slightly refined and ~30 new icons have been added. These changes improve the icons to make them more consistent and comprehensible, and provide more visual balance when they are used in groups.
* The [[mw:Special:MyLanguage/Universal Language Selector|Universal Language Selector]] (ULS) interface in MediaWiki, which helps users select content in other languages, has been updated. The new version improves speed and accessibility, and users of Wikimedia projects can now pin languages for quicker language switching. The deployment to Wikimedia sites will happen gradually in the coming weeks. You can test it now as a beta feature by selecting [[Special:Preferences#mw-prefsection-betafeatures|beta features]] in your profile preferences and share your feedback on [[mw:Special:MyLanguage/Universal Language Selector/New ULS|the project page]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:21}} community-submitted {{PLURAL:21|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where the Pageviews Analysis dashboard on pageviews.wmcloud.org stopped updating graph data in May 2026, affecting all users, has been fixed. [https://phabricator.wikimedia.org/T427171]
'''Updates for technical contributors'''
* The function signature for <bdi lang="zxx" dir="ltr"><code><nowiki>mw.util.addPortletLink()</nowiki></code></bdi> has been simplified. Developers can now pass a configuration object instead of a list of positional parameters when creating portlet links. The previous function signature remains supported for backwards compatibility. For example, instead of: <bdi lang="zxx" dir="ltr"><code><nowiki>mw.util.addPortletLink('p-cactions', '#', 'Stub', 'ca-stubtag', 'Add a stub tag to this page');</nowiki></code></bdi> use <bdi lang="zxx" dir="ltr"><code><nowiki>mw.util.addPortletLink('p-cactions', { href: '#', text: 'Stub', id: 'ca-stubtag', tooltip: 'Add a stub tag to this page' });</nowiki></code></bdi>. Script maintainers are encouraged to review existing uses of <bdi lang="zxx" dir="ltr"><code><nowiki>addPortletLink()</nowiki></code></bdi> and update them where appropriate. This change will be available on all wikis from 11 June. Thanks to community volunteer Gerges for contributing this improvement. [https://phabricator.wikimedia.org/T427945]
* '''Community Wishlist discussion''': Product & Technology [[m:Special:MyLanguage/Community Wishlist/Updates#May 20, 2026: Community Tech becomes a program|introduced changes]] meant to increase the number and complexity of wishes fulfilled, including the disbanding of the Community Tech team. They are [[m:Special:MyLanguage/Community Wishlist/Updates|engaging in discussions]] about a [[m:Talk:Community Wishlist#Proposed direction for Wishlist|proposed direction for the wishlist]] from community members. Includes ways to structure annual voting, better tracking of wishes, removing focus areas, and [[m:Special:MyLanguage/Community Wishlist/Updates|staffing updates]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.6|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/24|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W24"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೨:೫೯, ೯ ಜೂನ್ ೨೦೨೬ (IST)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30650573 -->
== <span lang="en" dir="ltr">Tech News: 2026-25</span> ==
<div lang="en" dir="ltr">
<section begin="technews-2026-W25"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/25|Translations]] are available.
'''Weekly highlight'''
* The [[mw:Special:MyLanguage/Readers/Reader Growth|Reader Growth team]] has launched an [[mw:Special:MyLanguage/Readers/Reader Growth/Image Browsing|Image Browsing]] beta feature on the mobile web version of all Wikipedias. The feature shows an image carousel at the top of articles with 3 or more images. Editors can configure this feature with the following controls: to hide a specific image from a page, either use <code>class=notpageimage</code> excluding it from thumbnail previews, or <code>class=noviewer</code> excluding it from MediaViewer. The carousel can also be disabled from a page entirely, with the magic word <code><nowiki>__NOMEDIAVIEWERCAROUSEL__</nowiki></code>. To submit feedback or flag bugs, please visit the [[mw:Talk:Readers/Reader Growth/Image Browsing|project page]].
* [[mw:Special:MyLanguage/Help:Tables#class="wikitable"|Wikitables]] can now be [[mw:Special:MyLanguage/Help:Sortable tables#Forcing the initial sort direction|sorted in descending order]] on the first click by adding <code dir=ltr>data-sort-order="desc"</code> to the header cell. Previously, by default, clicking a column header for the first time sorts it in ascending order. This addition to a Wikitable gives it more control and flexibility, while the default behavior for subsequent clicks remains unchanged. [https://phabricator.wikimedia.org/T398416]
'''Updates for editors'''
* The [[mw:Special:MyLanguage/Article guidance|Article guidance]] feature is currently being tested with some editors creating new articles on the Simple English, French, and Turkish Wikipedias. The experiment will soon begin on the Arabic and Bangla Wikipedias as well. [[w:simple:Special:NewArticle|This feature]] gives editors community-curated guidance to help them create articles that follow community standards. Experienced editors can continue creating or adapting outlines for specific article types that are commonly created by less experienced contributors. The outlines guide less experienced editors in creating high-quality articles. A quick guide to markups used in outlines can be found on [[mw:Special:MyLanguage/Article guidance/Test feature guide#Markups in outlines|this page]]. [[w:simple:Wikipedia:Article Guidance|Example outlines]] that can be adapted and instructions for how to adapt them are on [[mw:Special:MyLanguage/Article guidance#Adapting a sample outline in a Wikipedia|this section]] of the project page.
* Wikis that wish to replace the "indefinitely" button in Special:Block for temporary accounts (for example, wikis that block temporary users only until account expiration) will be able to do so by creating [[MediaWiki:ipb-indefinite-expiry-temporary-account]] with the block duration they want. [https://phabricator.wikimedia.org/T427125]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:41}} community-submitted {{PLURAL:41|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* By the end of June, a valid user-agent string will be required for automated dumps downloads from the dumps.wikimedia.org website. Automated requests that provide a generic or empty user-agent will be blocked. This [[phab:T400119|extends enforcement]] of the long standing [[foundation:Special:MyLanguage/Policy:Wikimedia Foundation User-Agent Policy|user-agent policy]]. Access to dumps through Wikimedia Cloud Services will not change.
* The roll out of global [[mw:Wikimedia APIs/Rate limits|API rate limits]] is now complete, with limits enforced across all APIs and at the documented levels for all groups. Bots running in Toolforge/WMCS or with the bot user right on any wiki remain exempt. All bots should continue to follow the documented best practices to avoid being rate limited.
* The [https://api.wikimedia.org/wiki/Main_Page API Portal wiki] will be read only starting this week (June 15-18). The following week (June 22-25), all API Portal wiki URLs will redirect to [[mw:Wikimedia APIs|Wikimedia APIs on mediawiki.org]]. Learn more on the [[wikitech:API Portal/Deprecation|project page]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.7|MediaWiki]]
'''Meetings and events'''
* On June 17th at 6pm UTC the WMF will be holding Discord call focused on a code review. We've heard through the [[mw:Special:MyLanguage/Developer Satisfaction Survey/2026|Developer Satisfaction Survey]] that volunteers are struggling with code review and we'd like to discuss these experiences with the goal of surfacing workable solutions. You can join the call [https://discord.gg/wikipedia?event=1514727511102062664 via the Wikimedia Community Discord server].
* The [[m:Special:MyLanguage/Conferencia Wikimedia de América Latina 2026|Latin American Wikimedia Conference]] will host a regional hackathon that will bring together the Wikimedia movement’s technical community including developers, system administrators, data scientists, and users with extended rights. Interested technical contributors can [https://docs.google.com/forms/d/e/1FAIpQLSf4osJzTHBJjQbYJk7TMVEJjTEQv7IgtsUDfP-o-qTgeRQQxw/viewform apply for a scholarship] to participate until June 21 at midnight (Bolivia time, UTC-4).
* Sign up for Wikimania Team Challenges to join this special event. The Team challenges will take place online and in person from July 21 to 22, before Wikimania conference. Everyone is welcome, regardless of skills or Wikimania registration. Teams will work on 10 important challenges supporting the Wikimedia community. For details, visit [[wmania:Special:MyLanguage/2026:Team challenges|the Team Challenges page]] and [https://wikimedia.eventyay.com/wm/teamchallenges/ register there]. Registration closes on June 20th at 11pm UTC.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/25|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W25"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೨೨:೧೮, ೧೫ ಜೂನ್ ೨೦೨೬ (IST)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30689604 -->
== <span lang="en" dir="ltr">Tech News: 2026-26</span> ==
<div lang="en" dir="ltr">
<section begin="technews-2026-W26"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/26|Translations]] are available.
'''Weekly highlight'''
* [[mw:Special:MyLanguage/Growth/Feature summary|Growth features]] are [[phab:T418115|now available at Wikidata]]. This update enables access to Mentorship ([[mw:Special:MyLanguage/Help:Growth/Mentorship|if configured]]), Impact module, the Help Panel, and a simplified Newcomer Homepage (without Suggested Edits). Wikidata administrators are still configuring the features through Community Configuration.
'''Updates for editors'''
* The special page [[{{#special:RangeCalculator}}]] has been created. It allows users to find an IP range without needing to rely on external tools. Until now, this tool was only available to CheckUsers. [https://phabricator.wikimedia.org/T268429]
* [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|Sub-referencing]] is a new MediaWiki feature that allows editors to reuse references with different details. It will be deployed to most small and medium-sized Wikipedia language versions on June 23. The [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing#deployment|FAQ]] lists possible actions to take on your wiki to support the deployment. Check the [[:phab:T414094|rollout plan]] for the next deployment steps. [https://phabricator.wikimedia.org/T428902]
* Starting next week, users will get a notification when they are blocked or unblocked from editing, or if this block changes. [https://phabricator.wikimedia.org/T100974]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:32}} community-submitted {{PLURAL:32|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* Starting next week, abuse filters that are set to "require CAPTCHA verification" will begin to also affect users with the <code>skipcaptcha</code> right, which includes most autoconfirmed users. Bots are exempted. This change only affects edits that trigger an abuse filter. The <code>skipcaptcha</code> right will continue to exempt users from having to solve CAPTCHAs in the ordinary course of using the wikis. [https://phabricator.wikimedia.org/T402595]
* Reference documentation for the [[wikitech:Machine_Learning/LiftWing/API|Lift Wing API]] has moved from the API Portal to the interactive [https://wikitech.wikimedia.org/w/index.php?api=lift-wing&title=Special%3ARestSandbox REST Sandbox].
* The API Portal wiki is now closed. For API documentation, see [[mw:Special:MyLanguage/Wikimedia_APIs|Wikimedia APIs on mediawiki.org]]. All API Portal wiki URLs (https://api.wikimedia.org/wiki/) will redirect to the mediawiki.org page starting June 22. [https://phabricator.wikimedia.org/T427537]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.8|MediaWiki]]
'''Meetings and events'''
* Join an online call on 25 June at 2:30pm UTC to meet the current Wikimedia interns for [[mw:Google_Summer_of_Code/2026|Google Summer of Code]] and [[mw:Outreachy/Round_32|Outreachy]]. Interns will provide an overview of their projects and a brief demo of their work so far. Attendees are encouraged to [[mw:event:Google_Summer_of_Code/Summer_2026_June_Internship_open_session|share ideas and connections in their community]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/26|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W26"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೧೮:೩೫, ೨೩ ಜೂನ್ ೨೦೨೬ (IST)
<!-- Message sent by User:Trizek (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30722494 -->
m0uijtd8rnw7ht7a188uiir4ampnjh1
ದೇವಿಕಾ ನಾಗೇಶ್
0
27498
363120
362747
2026-07-24T11:54:36Z
BENET G AMANNA
60
ಉಲ್ಲೇಖೊಲು
363120
wikitext
text/x-wiki
{{Unreferenced|date=ಜುಲಾಯಿ ೨೦೨೬}}
'''ದೇವಿಕಾ ನಾಗೇಶ್''' ಕಥೆಗಾರ್ತಿ, ಕವಯಿತ್ರಿ
==ಪುಟ್ಟು==
ಕೆ. ಬೋಜ ಶೆಟ್ಟಿ ಬೊಕ್ಕ ನಳಿನಾ ದಂಪತಿಳೆಗ್ ೬ ಜೋಕುಲು. ೨೯-೫-೧೯೬೨ ದು ಹಾಸನ ಜಿಲ್ಲೆದ ಬೇಲೂರು ತಾಲೂಕುದ ಹಸುರು ಗುಡ್ಡೆ ಪನ್ಪಿ ಜಾಗೆಡ್ ಪುಟ್ಟಿಯೆರ್.
== ಬರವು ==
# ಉಡುಪಿ ಕಿದಿಯೂರು ಶ್ರಿ ವಿದ್ಯಾ ಸಮುದ್ರ ತೀರ್ಥ ಶಾಲೆಡ್ ಪ್ರಾಥಮಿಕ ಬೊಕ್ಕ ಹೈಸ್ಕೂಲು ವಿದ್ಯಾಭ್ಯಾಸ
# ಉಡಪಿದ ಪೂರ್ಣ ಪ್ರಜ್ಙ ಕಾಲೇಜ್ಡ್ ಪದವಿ ಪೂರ್ವ ಬೊಕ್ಕ ಪದವಿನ್ ಪಡೆಯೆರ್
==ಸಂಸಾರ==
ಬೇಲೂರು ತಾಲೂಕುದ ಹೊಸಳ್ಳಿಡ್ ಉಪ್ಪುನ ಕಾಪಿ ಎಸ್ಟೇಟ್ ಟ್ ಕುಟುಂಬೊದೊಟ್ಟುಗು ವಾಸ ಮಲ್ತೊಂದಿತ್ತಿ ಮೇರ್ ೧೯೮೯ ಡ್ ಅಲ್ಪನೇ ಕಟ್ಟೋಣ ನಿರ್ಮಾಣ ಕಾಂಟಷರಾಕ್ಟರ್ ಆದಿತ್ತಿ ನಾಗೇಶ್ ಶೆಟ್ರೆನ್ ಮದ್ಮೆ ಆಯಿಬೊಕ್ಕ ಕುಡ್ಲಡ್ ಪೊಸ ಸಂಸಾರೊನು ಆರಂಭ ಮಲ್ತೊಂದು ಒಂಜಿ ಮಗೆ, ಮರ್ಮಲ್ ಪುಲ್ಲಿನ್ ಪಡೆತಿನ ಮೇರ್ ಬೇಲೆದೊಟ್ಟುಗು ಬರೆಪಿನ ಹವ್ಯಾಸೊನ್ಲಾ ಪಡೆತೆರ್.
== ಉದ್ಯೋಗ==
# ಪೋಸ್ಟಲ್
# ಪ್ರಜ್ಞಾ ಸಲಹಾ ಕೇಂದ್ರ ಮಮಗಲೂರು ೨೦೦೬-೨೦೨೦
== ಸದಸ್ಯೆರಾದ್==
==ಬರವುಲು==
==ಕೃತಿಕ್ಕುಲು==
== ಪಡೆಯಿ ಪುಗರ್ತೆಲು==
# http://pustakamane.com/@devika-nagesh?srsltid=AfmBOoqpSIOpqb4Up9yFXwIb6Jd9_U0sDULqi6VDwfg598HoqGQZWmO3
# https://www.amazon.in/Kallarali-Hoovagi-Paperback-Devika-Nagesh/dp/B0DXLB153H
# https://www.amazon.in/Kallarali-Hoovagi-Paperback-Devika-Nagesh/dp/B0DXLB153H
h13jd3whdul3pgcedv9p7g5qmym7bc4
ಸದ್ಯ
0
27570
363097
2026-07-23T15:25:51Z
Shreelatha.Halemane
6351
ಪೊಸೊ ಲೇಖನೊ
363097
wikitext
text/x-wiki
ಸದ್ಯ ಅತ್ತ್ಂಡ ಊಣ್ ಸಧ್ಯ ಪಂಡ್ದ್ ಲಾ ಬರೆಪೆರ್, ಉಂದು [[ಕೇರಳ]] ಮೂಲೊದ ಬೊಕ್ಕ ಮಾತಾ [[ಮಲಯಾಳಂ ಬಾಸೆ|ಮಲಯಾಳಿ]]ಲೆಗ್ ಮಹತ್ವೊದ ಒಂಜಿ ವಣಸ್ಗ್ ಲೆಪ್ಪುನ ಪುದರ್, ಉಂದೆಟ್ ಸಾಂಪ್ರದಾಯಿಕ ಸಸ್ಯಾಹಾರಿ ಭೋಜನೊಲು ಉಪ್ಪುಂಡು, ಉಂದೆನ್ ಸಾಮಾನ್ಯವಾದ್ ಬಾರೆ ಇರೆಟ್ಟ್ ವನಸ್ ಆದ್ ಬಲಸುವೆರ್. ಸದ್ಯೊನು ಸಾಮಾನ್ಯವಾದ್ ಹಿಂದೂ ಪರ್ಬೊಲೆಡ್ ಓಣಂ ಬೊಕ್ಕ ವಿಷು,ಬೊಕ್ಕ ಪುಟ್ಟು ಪರ್ಬೊಲು ಬೊಕ್ಕ ಮದಿಮೆದಂಚಿನ ಬೇತೆ ವಿಶೇಷ ಸಂದರ್ಭೊಲೆಡ್ ಒಂಜಿ ಸಾಂಪ್ರದಾಯಿಕ ಪರ್ಬೊದ ರೂಪೊಡು ಸರ್ವ್ ಮಲ್ಪುವೆರ್.
== ವ್ಯಾಕರಣ ==
ಮಲಯಾಳಂ ಪದ ಸಧ್ಯ (സദ്യ) [[ಸಂಸ್ಕೃತ ಬಾಸೆ|ಸಂಸ್ಕೃತ]] ಭಾಷೆದ ságdhi- (सग्धि) ಡ್ದ್ ಬತ್ತ್ಂಡ್, ಉಂದು ಒಂಜಿ ಸಾಮುದಾಯಿಕ ಭೋಜನೊನು ಸೂಚಿಸವುಂಡು.
== ಸದ್ಯೊದ ವಿಶೇಷ ಭಕ್ಶ್ಯ ==
ಒಂಜಿ ಸಾಮಾನ್ಯ ಸದ್ಯೊಡು ಸುಮಾರ್ 24-28 ಖಾದ್ಯೊಲೆನ್ ಒಂಜಿ ಕೋರ್ಸ್ ಆದ್ ಸರ್ವ್ ಮಲ್ಪೊಲಿ.ಕೆಲವು ಸಂದರ್ಭೊಡು, ಉಂದು ಮಸ್ತ್ ಮಲ್ಲೆ ಆನಗ, ಉಂದೆಟ್ 64 ಡ್ದ್ ಜಾಸ್ತಿ ವಸ್ತುಲೆನ್ ಸೇರಾವೊಲಿ, ಉದಾಹರಣೆಗೆ ಅರಂಮುಲಾ ವೆಳ್ಳಂಕಳಿ (ವಲ್ಲ-ಸದ್ಯ) ಗ್ ಸದ್ಯ. ಸಾಂಪ್ರದಾಯಿಕ ಸದ್ಯ ವಣಸ್ದ ಪೊರ್ತುಡು, ಜನಕುಲು ತಿರ್ತ್ ನೆಲಟ್ಟ್ ಕಾರ್ ಮಡಿತ್ತ್ದ್ ಕುಲ್ಲುವೆರ್.ವಣಸ್ ನು ಬಲತ್ತ ಕೈಟ್, ಕಟ್ಲರಿ ಇಜ್ಜಂದೆ ಉನ್ಪೆರ್.
ಮುಖ್ಯ ಖಾದ್ಯ ಪಂಡ ಸಾದಾ ಬೇಯ್ಪಾಯಿನ ಅರಿ, ಉಂದೆನ್ ಬೇತೆ ಕರಿ/ಕೂಟಾನ್ (കൂട്ടാന്) ದ ಒಟ್ಟುಗು ಸರ್ವ್ ಮಲ್ಪುವೆರ್, ಉಂದೆಟ್ ಪರಿಪ್ಪು, ಸಾಂಬಾರ್, ರಸಮ್, ಪುಲಿಸ್ಸೆರಿ ಬೊಕ್ಕ ಕಾಳನ್, ಅವಿಯಲ್, ತೊರನ್, ಒಲನ್, ಪಚ್ಚಡಿ, ಕಿಚಡಿ, ಕೊಜಿ, ಎರ್ತುಕ್, ಮಂಟುಕ್ಲೆ, ಪಿಕ್ಕುಲೆ, ಮೆಝುಕ್ಕುಪುರಟ್ಟಿ, ನಾರಂಗ ಆಚಾರ್ (ಸುಣ್ಣದ ಉಪ್ಪಿನಕಾಯಿ), ಅಂಚನೆ ಪಾಪಡಂ, ಬಾಳೆ ಚಿಪ್ಸ್, ಶರ್ಕರ ಉಪ್ಪೆರಿ, ಪರಂದ್, ಸಾದಾ ದೋಸೆ ಬೊಕ್ಕ ಅಳೆ.ಅಳೆನ್ ಸಾಮಾನ್ಯವಾದ್ ವಣಸ್ದ ಕಡೆಕ್ಕ್ ಸರ್ವ್ ಮಲ್ಪುವೆರ್.ವಣಸ್ದದ ಕಡೆಕ್ಕ್ ಕೊರ್ಪಿನ ಪಾಯಸ ಪನ್ಪಿನ ಸಾಂಪ್ರದಾಯಿಕ ಸಿಹಿತಿಂಡಿ ಮಸ್ತ್ ಬಗೆತ ಉಪ್ಪುಂಡು.ಬೊಕ್ಕ ಸಾಮಾನ್ಯವಾದ್ ಮೂಜಿ ಅತ್ತಂಡ ಅಯಿಡ್ದ್ ಜಾಸ್ತಿ ಮಲ್ಪುವೆರ್. ಕೆಲವು ಬಗೆತ ಪಾಲಡ ಪ್ರಧಾನ, ಅಡ ಪ್ರಧಾನ, ಪರಿಪ್ಪು ಪ್ರಧಾನ, ಚಕ್ಕ ಪ್ರಧಾನ, ಗೋತಂಪು ಪಾಯಸ, ಪಾಲ ಪಾಯಸ ಇಂಚಿತ್ತಿನ ಬಹು ಕಜಿಪುಲು ಪೂರ ಬೇತೆ ಬೇತೆ ತರಕಾರಿಡ್ ಮಲ್ಪುನವು ಬೊಕ್ಕ ಅಯಿತ್ತ ಸ್ವಂತ ರುಚಿನ್ ಪಡೆಯಿನವು. ಕರಿತ ವೈವಿಧ್ಯತೆ ಸಮೃದ್ಧಿ ಬೊಕ್ಕ ಯೋಗಕ್ಷೇಮೊನು ಸಂಕೇತಿಸವುಂಡು.
== ಬಾರೆ ಇರೆಟ್ಟ್ ಬಲಸುನ ಜಾಗೆ ==
ಬಾರೆದ ಇರೆಟ್ಟ್ ಬೇತೆ ಬೇತೆ ಜಾಗೆಡ್ ಈ ಖಾದ್ಯೊಲೆನ್ ಸರ್ವ್ ಮಲ್ಪುವೆರ್.ಉದಾಹರಣೆಗ್, ಉಪ್ಪಿನಕಾಯಿಲೆನ್ ಮಿತ್ತ್ ಎಡ ಮೂಲೆಡ್ ಬೊಕ್ಕ ಪರಂದ್ ನ್ ತಿರ್ತ ಎಡ ಮೂಲೆಡ್ ಕೊರ್ಪೆರ್, ಉಂದು ವೇಟರ್ ಲೆಗ್ ಸುಲಭವಾದ್ ಗುರುತಿಸರೆ ಬೊಕ್ಕ ಹೆಚ್ಚುವರಿ ಸೇವೆಲೆನ್ ಒದಗಿಸೆರೆ ಸಹಾಯ ಮಲ್ಪುಂಡು. ಕೇರಳೊಡು ಮಸ್ತ್ ಉಪ್ಪುನೆರ್ದಾತ್ರ ಮಾತಾ ತೆನಸ್ಲೆಡ್ ಸಾಮಾನ್ಯವಾದ್ ಬಳಕೆ ಆಪಿನ ಸಾಮಗ್ರಿಲು ತಾರಾಯಿ. ತಾರಾಯಿದ ಪೇರ್ ಕೆಲವು ವನಸ್ಡ್ ಗಳಸುವೆರ್, ತಾರಾಯಿದ ಎಣ್ಣೆನ್ ಕಜಿಪುಗು ಗಳಸುವೆರ್. ಸದ್ಯ ಮೆನುಡ್ ಪ್ರಾದೇಶಿಕ ಬದಲಾವಣೆಲು ಉಂಡು, ಸ್ಥಳೀಯ ಆಚರಣೆಲು ಬೊಕ್ಕ ಪದಾರ್ಥೊಲೆನ ಲಭ್ಯತೆಡ್ದ್ ಪ್ರಭಾವಿತವಾದುಂಡು. ಕೇರಳ ಅತ್ತಂದೆ ಭಾರತದ ನೈಋತ್ಯ ಕರಾವಳಿಡ್ ಮೂಲದ ಸಾಂಪ್ರದಾಯಿಕ ಬೊಕ್ಕ ಋತುಮಾನದ ತರಕಾರಿಲೆನ್ ಬಳಕೆ ಮಲ್ಪುನ ಕ್ರಮ ಇತ್ತ್ಂಡಲಾ, ಕ್ಯಾರೆಟ್, ಅನಾನಸ್, ಬೀನ್ಸ್ ಇಂಚಿನ ತರಕಾರಿಲೆನ್ ಖಾದ್ಯೊಲೆಡ್ ಸೇರಾವುನವು ಸಾಮಾನ್ಯ ಕ್ರಮ ಆತ್ಂಡ್. ಸಾಂಪ್ರದಾಯಿಕವಾದ್, ಸದ್ಯೊಡು ಉಪ್ಪುನ ಖಾದ್ಯೊಲೆಡ್ ಈರುಳ್ಳಿ ಅತ್ತ್ಂಡ ಬೆಳ್ಳುಳ್ಳಿ ಇಜ್ಜಿ.ವಣಸ್ದ ಬೊಕ್ಕ ವೆಟ್ಟಿಲಾ ಮುರುಕ್ಕನ್, ಬಚ್ಚಿರೆ ನ್ ಸುಣ್ಣ ಬೊಕ್ಕ ಅಡಕ್ಕೆ ದ ಒಟ್ಟುಗು ಅಗಿಯೆರೆ ಸಾಧ್ಯ. ಉಂದು ವಣಸ್ದದ ಜೀರ್ಣಕ್ರಿಯೆಗ್ ಸಹಾಯ ಮಲ್ಪುಂಡು ಬೊಕ್ಕ ತಾಳ್ಮೆನ್ ಶುದ್ಧ ಮಲ್ಪುಂಡು.
== ತಯಾರಿಲು ==
ಸದ್ಯೊನು ಸಾಮಾನ್ಯವಾದ್ ಮಧ್ಯಾಹ್ನೊಗು ಕೊರ್ಪೆರ್,ಆಂಡಲಾ ಒಂಜಿ ಲೈಟ್ ಆವೃತ್ತಿನ್ ರಾತ್ರಿದ ವಣಸ್ಗುಲಾ ಕೊರ್ಪೆರ್. ದುಂಬುದ ರಾತ್ರೆ ತಯಾರಿ ಸುರು ಆಪುಂಡು, ಬೊಕ್ಕ ಆಚರಣೆದ ದಿನ ಕಾಂಡೆ ಪತ್ತ್ ಗಂಟೆದ ದುಂಬು ತೆನಸ್ ತಯಾರ್ ಮಲ್ಪುವೆರ್. ಇತ್ತೆದ ಕಾಲೊಡು, ಜನಕ್ಲೆಗ್ ನೆಲಟ್ ಕುಲ್ಲೆರೆ ಅನುಕೂಲ ಆಪುಜಿ ಪನ್ಪಿನೆಡ್ದಾವರ ಸದ್ಯೊನು ಮೇಜಿಡ್ ಮಲ್ಪುವೆರ್. ಒಂಜಿ ಸದ್ಯೊಗು ವಸ್ತುಲೆನ್/ಪದಾರ್ಥೊಲೆನ್ ಸೋರ್ಸಿಂಗ್ ಮಲ್ಪುನವು ಗುಣಮಟ್ಟೊನು ಖಚಿತಪಡಿಸವುನ ಒಂಜಿ ವಿಸ್ತಾರವಾದ್ ಬೊಕ್ಕ ಎಚ್ಚರೊಡು ಮಲ್ಪುನ ಪ್ರಕ್ರಿಯೆ. ಅಗ್ನಿಗ್ ಪ್ರಾರ್ಥನೆ ಮಲ್ತ್ದ್ ಸಾದ್ಯ ತಯಾರಾಪುನ ಬೆಂಕಿ ಬೊಲ್ಪುನೆ, ಗಣಪತಿಗ್ ಅರ್ಪಣೆ ಆದ್ ಬೊಲ್ಪುದ ನಿಲವಿಲಕ್ಕುದ ಎದುರು ಬಾರೆದ ಇರೆತ ಮಿತ್ತ್ ಸುರೂತ ಸೇವನೆನ್ ದೀಪೆರ್. ಒಂಜಿ ಸದ್ಯೊಡು,ವಣಸ್ ನು ಬಾರೆದ ಇರೆತ ಮಿತ್ತ್ ದೀಪೆರ್.ವಣಸ್ ಮುಗಿನಗ ಇರೆನ್ ಮಡತ್ ದ್ ಮುಚ್ಚುವೆರ್.ಕೆಲವು ಸಂದರ್ಭೊಡು, ನಿಕ್ಲೆನ ಕಡೆಕ್ ಎಲೆನ್ ಮುಚ್ಚುನವು ಊಟೊಡು ತೃಪ್ತಿನ್ ಸೂಚಿಸವುಂಡು, ಆಂಡ ಅಯಿನ್ ಒರಿಡ್ದ್ ದೂರ ಮಲ್ಪುನವು ಊಟೊನು ಸುಧಾರಿಸವೊಲಿ ಪನ್ಪಿನೆನ್ ಸೂಚಿಸವುಂಡು.ಆಂಡಲಾ, ಕೇರಳದ ಬೇತೆ ಬೇತೆ ಭಾಗೊಲೆಡ್ ಎಲೆನ್ ಮಡತ್ ದೀತಿನ ದಿಕ್ಕ್ ಗ್ ಬೇತೆ ಬೇತೆ ಅರ್ಥೊಲು ಉಪ್ಪುಂಡು.ಕೇಂದ್ರ [[ಟ್ರಾವಂಕೂರು]] ಶೈಲಿದ ಸದ್ಯ ಅತ್ಯಂತ ಶಿಸ್ತುಬದ್ಧ ಬೊಕ್ಕ ಸಂಪ್ರದಾಯೊಗು ಬದ್ಧವಾಯಿನವು ಪಂಡ್ದ್ ತೆರಿದ್ ಬರ್ಪುಂಡು.ಚಿಪ್ಸ್ ಬೊಕ್ಕ ಉಪ್ಪಿನಕಾಯಿಡ್ದ್ ಸುರು ಮಲ್ತ್ದ್ ಖಾದ್ಯೊಲೆನ್ ಸರ್ವ್ ಮಲ್ಪುನಗ ಸಾಮಾನ್ಯವಾದ್ ಒಂಜಿ ಆದೇಶೊನು ಅನುಸರಿಸವೆರ್.ಆಂಡಲಾ, ಸ್ಥಳೀಯ ಆದ್ಯತೆಲೆನ್ ಅವಲಂಬಿಸಾದ್ [[ಕೇರಳ]]ದ ಬೇತೆ ಬೇತೆ ಭಾಗೊಲೆಡ್ ಖಾದ್ಯೊಲೆನ್ ಮಲ್ಪುನ ಬೊಕ್ಕ ಸರ್ವ್ ಮಲ್ಪುನ ಬೇತೆ ಬೇತೆ ಶೈಲಿ ಬೊಕ್ಕ ವಿಧಾನೊಲೆನ್ ಅಳವಡಿಸವೆರ್. ಅರಂಮುಲಾ ವಲ್ಲಾ-ಸದ್ಯ ಪಂಡ 64 ಡ್ದ್ ಜಾಸ್ತಿ ವಸ್ತುಲೆನ್ ಸಾಂಪ್ರದಾಯಿಕವಾದ್ ಸರ್ವ್ ಮಲ್ಪುನ ಅತ್ಯಂತ ಪ್ರಸಿದ್ಧ ಸದ್ಯ.
sxvl7vcml5iczk6lhew8jwahf7h9sc5
363098
363097
2026-07-23T16:36:14Z
Shreelatha.Halemane
6351
363098
wikitext
text/x-wiki
[[ಫೈಲ್:Sadhya_DSW.jpg|thumb|ಸದ್ಯ(ಕೇರಳೊದ ವಣಸ್ದ ಶೈಲಿ)]]
ಸದ್ಯ ಅತ್ತ್ಂಡ ಊಣ್ ಸಧ್<ref>https://www.hindustantimes.com/more-lifestyle/happy-onam-2020-26-dishes-in-the-onam-sadhya-feast-what-they-re-called/story-Ox35zUre2YkHzMjzOcSHTN.html</ref>ಯ ಪಂಡ್ದ್ ಲಾ ಬರೆಪೆರ್, ಉಂದು [[ಕೇರಳ]] ಮೂಲೊದ ಬೊಕ್ಕ ಮಾತಾ [[ಮಲಯಾಳಂ ಬಾಸೆ|ಮಲಯಾಳಿ]]ಲೆಗ್ ಮಹತ್ವೊದ ಒಂಜಿ ವಣಸ್ಗ್ ಲೆಪ್ಪುನ ಪುದರ್, ಉಂದೆಟ್ ಸಾಂಪ್ರದಾಯಿಕ ಸಸ್ಯಾಹಾರಿ ಭೋಜನೊಲು ಉಪ್ಪುಂಡು, ಉಂದೆನ್ ಸಾಮಾನ್ಯವಾದ್ ಬಾರೆ ಇರೆಟ್ಟ್ ವನಸ್ ಆದ್ ಬಲಸುವೆರ್. ಸದ್ಯೊನು ಸಾಮಾನ್ಯವಾದ್ ಹಿಂದೂ ಪರ್ಬೊಲೆಡ್ ಓಣಂ ಬೊಕ್ಕ ವಿಷು,ಬೊಕ್ಕ ಪುಟ್ಟು ಪರ್ಬೊಲು ಬೊಕ್ಕ ಮದಿಮೆದಂಚಿನ ಬೇತೆ ವಿಶೇಷ ಸಂದರ್ಭೊಲೆಡ್ ಒಂಜಿ ಸಾಂಪ್ರದಾಯಿಕ ಪರ್ಬೊದ ರೂಪೊಡು ಸರ್ವ್ ಮಲ್ಪುವೆರ್.
== ವ್ಯಾಕರಣ ==
ಮಲಯಾಳಂ ಪದ ಸಧ್ಯ (സദ്യ) [[ಸಂಸ್ಕೃತ ಬಾಸೆ|ಸಂಸ್ಕೃತ]] ಭಾಷೆದ ságdhi- (सग्धि) ಡ್ದ್ ಬತ್ತ್ಂಡ್, ಉಂದು ಒಂಜಿ ಸಾಮುದಾಯಿಕ ಭೋಜನೊನು ಸೂಚಿಸವುಂಡು.
== ಸದ್ಯೊದ ವಿಶೇಷ ಭಕ್ಶ್ಯ ==
ಒಂಜಿ ಸಾಮಾನ್ಯ ಸದ್ಯೊಡು ಸುಮಾರ್ 24-28 ಖಾದ್ಯೊಲೆನ್ ಒಂಜಿ ಕೋರ್ಸ್ ಆದ್ ಸರ್ವ್ ಮಲ್ಪೊಲಿ.ಕೆಲವು ಸಂದರ್ಭೊಡು, ಉಂದು ಮಸ್ತ್ ಮಲ್ಲೆ ಆನಗ, ಉಂದೆಟ್ 64 ಡ್ದ್ ಜಾಸ್ತಿ ವಸ್ತುಲೆನ್ ಸೇರಾವೊಲಿ, ಉದಾಹರಣೆಗೆ ಅರಂಮುಲಾ ವೆಳ್ಳಂಕಳಿ (ವಲ್ಲ-ಸದ್ಯ) ಗ್ ಸದ್ಯ. ಸಾಂಪ್ರದಾಯಿಕ ಸದ್ಯ ವಣಸ್ದ ಪೊರ್ತುಡು, ಜನಕುಲು ತಿರ್ತ್ ನೆಲಟ್ಟ್ ಕಾರ್ ಮಡಿತ್ತ್ದ್ ಕುಲ್ಲುವೆರ್.ವಣಸ್ ನು ಬಲತ್ತ ಕೈಟ್, ಕಟ್ಲರಿ ಇಜ್ಜಂದೆ ಉನ್ಪೆರ್.<ref>https://www.india.com/festivals-events/onam-sadhya-items-that-make-the-traditional-recipe-of-kerala-festival-a-hit-2445898/</ref>
ಮುಖ್ಯ ಖಾದ್ಯ ಪಂಡ ಸಾದಾ ಬೇಯ್ಪಾಯಿನ ಅರಿ, ಉಂದೆನ್ ಬೇತೆ ಕರಿ/ಕೂಟಾನ್ (കൂട്ടാന്) ದ ಒಟ್ಟುಗು ಸರ್ವ್ ಮಲ್ಪುವೆರ್, ಉಂದೆಟ್ ಪರಿಪ್ಪು, ಸಾಂಬಾರ್, ರಸಮ್, ಪುಲಿಸ್ಸೆರಿ ಬೊಕ್ಕ ಕಾಳನ್, ಅವಿಯಲ್, ತೊರನ್, ಒಲನ್, ಪಚ್ಚಡಿ, ಕಿಚಡಿ, ಕೊಜಿ, ಎರ್ತುಕ್, ಮಂಟುಕ್ಲೆ, ಪಿಕ್ಕುಲೆ, ಮೆಝುಕ್ಕುಪುರಟ್ಟಿ, ನಾರಂಗ ಆಚಾರ್ (ಸುಣ್ಣದ ಉಪ್ಪಿನಕಾಯಿ), ಅಂಚನೆ ಪಾಪಡಂ, ಬಾಳೆ ಚಿಪ್ಸ್, ಶರ್ಕರ ಉಪ್ಪೆರಿ, ಪರಂದ್, ಸಾದಾ ದೋಸೆ ಬೊಕ್ಕ ಅಳೆ.ಅಳೆನ್ ಸಾಮಾನ್ಯವಾದ್ ವಣಸ್ದ ಕಡೆಕ್ಕ್ ಸರ್ವ್ ಮಲ್ಪುವೆರ್.ವಣಸ್ದದ ಕಡೆಕ್ಕ್ ಕೊರ್ಪಿನ ಪಾಯಸ ಪನ್ಪಿನ ಸಾಂಪ್ರದಾಯಿಕ ಸಿಹಿತಿಂಡಿ ಮಸ್ತ್ ಬಗೆತ ಉಪ್ಪುಂಡು.ಬೊಕ್ಕ ಸಾಮಾನ್ಯವಾದ್ ಮೂಜಿ ಅತ್ತಂಡ ಅಯಿಡ್ದ್ ಜಾಸ್ತಿ ಮಲ್ಪುವೆರ್. ಕೆಲವು ಬಗೆತ ಪಾಲಡ ಪ್ರಧಾನ, ಅಡ ಪ್ರಧಾನ, ಪರಿಪ್ಪು ಪ್ರಧಾನ, ಚಕ್ಕ ಪ್ರಧಾನ, ಗೋತಂಪು ಪಾಯಸ, ಪಾಲ ಪಾಯಸ ಇಂಚಿತ್ತಿನ ಬಹು ಕಜಿಪುಲು ಪೂರ ಬೇತೆ ಬೇತೆ ತರಕಾರಿಡ್ ಮಲ್ಪುನವು ಬೊಕ್ಕ ಅಯಿತ್ತ ಸ್ವಂತ ರುಚಿನ್ ಪಡೆಯಿನವು. ಕರಿತ ವೈವಿಧ್ಯತೆ ಸಮೃದ್ಧಿ ಬೊಕ್ಕ ಯೋಗಕ್ಷೇಮೊನು ಸಂಕೇತಿಸವುಂಡು.
== ಬಾರೆ ಇರೆಟ್ಟ್ ಬಲಸುನ ಜಾಗೆ ==
ಬಾರೆದ ಇರೆಟ್ಟ್ ಬೇತೆ ಬೇತೆ ಜಾಗೆಡ್ ಈ ಖಾದ್ಯೊಲೆನ್ ಸರ್ವ್ ಮಲ್ಪುವೆರ್.ಉದಾಹರಣೆಗ್, ಉಪ್ಪಿನಕಾಯಿಲೆನ್ ಮಿತ್ತ್ ಎಡ ಮೂಲೆಡ್ ಬೊಕ್ಕ ಪರಂದ್ ನ್ ತಿರ್ತ ಎಡ ಮೂಲೆಡ್ ಕೊರ್ಪೆರ್, ಉಂದು ವೇಟರ್ ಲೆಗ್ ಸುಲಭವಾದ್ ಗುರುತಿಸರೆ ಬೊಕ್ಕ ಹೆಚ್ಚುವರಿ ಸೇವೆಲೆನ್ ಒದಗಿಸೆರೆ ಸಹಾಯ ಮಲ್ಪುಂಡು. ಕೇರಳೊಡು ಮಸ್ತ್ ಉಪ್ಪುನೆರ್ದಾತ್ರ ಮಾತಾ ತೆನಸ್ಲೆಡ್ ಸಾಮಾನ್ಯವಾದ್ ಬಳಕೆ ಆಪಿನ ಸಾಮಗ್ರಿಲು ತಾರಾಯಿ. ತಾರಾಯಿದ ಪೇರ್ ಕೆಲವು ವನಸ್ಡ್ ಗಳಸುವೆರ್, ತಾರಾಯಿದ ಎಣ್ಣೆನ್ ಕಜಿಪುಗು ಗಳಸುವೆರ್. ಸದ್ಯ ಮೆನುಡ್ ಪ್ರಾದೇಶಿಕ ಬದಲಾವಣೆಲು ಉಂಡು, ಸ್ಥಳೀಯ ಆಚರಣೆಲು ಬೊಕ್ಕ ಪದಾರ್ಥೊಲೆನ ಲಭ್ಯತೆಡ್ದ್ ಪ್ರಭಾವಿತವಾದುಂಡು. ಕೇರಳ ಅತ್ತಂದೆ ಭಾರತದ ನೈಋತ್ಯ ಕರಾವಳಿಡ್ ಮೂಲದ ಸಾಂಪ್ರದಾಯಿಕ ಬೊಕ್ಕ ಋತುಮಾನದ ತರಕಾರಿಲೆನ್ ಬಳಕೆ ಮಲ್ಪುನ ಕ್ರಮ ಇತ್ತ್ಂಡಲಾ, ಕ್ಯಾರೆಟ್, ಅನಾನಸ್, ಬೀನ್ಸ್ ಇಂಚಿನ ತರಕಾರಿಲೆನ್ ಖಾದ್ಯೊಲೆಡ್ ಸೇರಾವುನವು ಸಾಮಾನ್ಯ ಕ್ರಮ ಆತ್ಂಡ್. ಸಾಂಪ್ರದಾಯಿಕವಾದ್, ಸದ್ಯೊಡು ಉಪ್ಪುನ ಖಾದ್ಯೊಲೆಡ್ ಈರುಳ್ಳಿ ಅತ್ತ್ಂಡ ಬೆಳ್ಳುಳ್ಳಿ ಇಜ್ಜಿ.ವಣಸ್ದ ಬೊಕ್ಕ ವೆಟ್ಟಿಲಾ ಮುರುಕ್ಕನ್, ಬಚ್ಚಿರೆ ನ್ ಸುಣ್ಣ ಬೊಕ್ಕ ಅಡಕ್ಕೆ ದ ಒಟ್ಟುಗು ಅಗಿಯೆರೆ ಸಾಧ್ಯ. ಉಂದು ವಣಸ್ದದ ಜೀರ್ಣಕ್ರಿಯೆಗ್ ಸಹಾಯ ಮಲ್ಪುಂಡು ಬೊಕ್ಕ ತಾಳ್ಮೆನ್ ಶುದ್ಧ ಮಲ್ಪುಂಡು.<ref>https://www.thehindu.com/features/metroplus/Food/Onam-on-a-leaf/article14630774.ece</ref>
== ತಯಾರಿಲು ==
ಸದ್ಯೊನು ಸಾಮಾನ್ಯವಾದ್ ಮಧ್ಯಾಹ್ನೊಗು ಕೊರ್ಪೆರ್,ಆಂಡಲಾ ಒಂಜಿ ಲೈಟ್ ಆವೃತ್ತಿನ್ ರಾತ್ರಿದ ವಣಸ್ಗುಲಾ ಕೊರ್ಪೆರ್. ದುಂಬುದ ರಾತ್ರೆ ತಯಾರಿ ಸುರು ಆಪುಂಡು, ಬೊಕ್ಕ ಆಚರಣೆದ ದಿನ ಕಾಂಡೆ ಪತ್ತ್ ಗಂಟೆದ ದುಂಬು ತೆನಸ್ ತಯಾರ್ ಮಲ್ಪುವೆರ್. ಇತ್ತೆದ ಕಾಲೊಡು, ಜನಕ್ಲೆಗ್ ನೆಲಟ್ ಕುಲ್ಲೆರೆ ಅನುಕೂಲ ಆಪುಜಿ ಪನ್ಪಿನೆಡ್ದಾವರ ಸದ್ಯೊನು ಮೇಜಿಡ್ ಮಲ್ಪುವೆರ್. ಒಂಜಿ ಸದ್ಯೊಗು ವಸ್ತುಲೆನ್/ಪದಾರ್ಥೊಲೆನ್ ಸೋರ್ಸಿಂಗ್ ಮಲ್ಪುನವು ಗುಣಮಟ್ಟೊನು ಖಚಿತಪಡಿಸವುನ ಒಂಜಿ ವಿಸ್ತಾರವಾದ್ ಬೊಕ್ಕ ಎಚ್ಚರೊಡು ಮಲ್ಪುನ ಪ್ರಕ್ರಿಯೆ. ಅಗ್ನಿಗ್ ಪ್ರಾರ್ಥನೆ ಮಲ್ತ್ದ್ ಸಾದ್ಯ ತಯಾರಾಪುನ ಬೆಂಕಿ ಬೊಲ್ಪುನೆ, ಗಣಪತಿಗ್ ಅರ್ಪಣೆ ಆದ್ ಬೊಲ್ಪುದ ನಿಲವಿಲಕ್ಕುದ ಎದುರು ಬಾರೆದ ಇರೆತ ಮಿತ್ತ್ ಸುರೂತ ಸೇವನೆನ್ ದೀಪೆರ್. ಒಂಜಿ ಸದ್ಯೊಡು,ವಣಸ್ ನು ಬಾರೆದ ಇರೆತ ಮಿತ್ತ್ ದೀಪೆರ್.ವಣಸ್ ಮುಗಿನಗ ಇರೆನ್ ಮಡತ್ ದ್ ಮುಚ್ಚುವೆರ್.ಕೆಲವು ಸಂದರ್ಭೊಡು, ನಿಕ್ಲೆನ ಕಡೆಕ್ ಎಲೆನ್ ಮುಚ್ಚುನವು ಊಟೊಡು ತೃಪ್ತಿನ್ ಸೂಚಿಸವುಂಡು, ಆಂಡ ಅಯಿನ್ ಒರಿಡ್ದ್ ದೂರ ಮಲ್ಪುನವು ಊಟೊನು ಸುಧಾರಿಸವೊಲಿ ಪನ್ಪಿನೆನ್ ಸೂಚಿಸವುಂಡು.ಆಂಡಲಾ, ಕೇರಳದ ಬೇತೆ ಬೇತೆ ಭಾಗೊಲೆಡ್ ಎಲೆನ್ ಮಡತ್ ದೀತಿನ ದಿಕ್ಕ್ ಗ್ ಬೇತೆ ಬೇತೆ ಅರ್ಥೊಲು ಉಪ್ಪುಂಡು.ಕೇಂದ್ರ [[ಟ್ರಾವಂಕೂರು]] ಶೈಲಿದ ಸದ್ಯ ಅತ್ಯಂತ ಶಿಸ್ತುಬದ್ಧ ಬೊಕ್ಕ ಸಂಪ್ರದಾಯೊಗು ಬದ್ಧವಾಯಿನವು ಪಂಡ್ದ್ ತೆರಿದ್ ಬರ್ಪುಂಡು.ಚಿಪ್ಸ್ ಬೊಕ್ಕ ಉಪ್ಪಿನಕಾಯಿಡ್ದ್ ಸುರು ಮಲ್ತ್ದ್ ಖಾದ್ಯೊಲೆನ್ ಸರ್ವ್ ಮಲ್ಪುನಗ ಸಾಮಾನ್ಯವಾದ್ ಒಂಜಿ ಆದೇಶೊನು ಅನುಸರಿಸವೆರ್.ಆಂಡಲಾ, ಸ್ಥಳೀಯ ಆದ್ಯತೆಲೆನ್ ಅವಲಂಬಿಸಾದ್ [[ಕೇರಳ]]ದ ಬೇತೆ ಬೇತೆ ಭಾಗೊಲೆಡ್ ಖಾದ್ಯೊಲೆನ್ ಮಲ್ಪುನ ಬೊಕ್ಕ ಸರ್ವ್ ಮಲ್ಪುನ ಬೇತೆ ಬೇತೆ ಶೈಲಿ ಬೊಕ್ಕ ವಿಧಾನೊಲೆನ್ ಅಳವಡಿಸವೆರ್. ಅರಂಮುಲಾ ವಲ್ಲಾ-ಸದ್ಯ ಪಂಡ 64 ಡ್ದ್ ಜಾಸ್ತಿ ವಸ್ತುಲೆನ್ ಸಾಂಪ್ರದಾಯಿಕವಾದ್ ಸರ್ವ್ ಮಲ್ಪುನ ಅತ್ಯಂತ ಪ್ರಸಿದ್ಧ ಸದ್ಯ.
== ಉಲ್ಲೇಕೊ ==
pyj2721kyxqkyc6wwguj0gy2w0pevy1
363099
363098
2026-07-23T16:39:48Z
Shreelatha.Halemane
6351
363099
wikitext
text/x-wiki
[[ಫೈಲ್:Sadhya_DSW.jpg|thumb|ಸದ್ಯ(ಕೇರಳೊದ ವಣಸ್ದ ಶೈಲಿ)]]
ಸದ್ಯ ಅತ್ತ್ಂಡ ಊಣ್ ಸಧ್<ref>https://www.hindustantimes.com/more-lifestyle/happy-onam-2020-26-dishes-in-the-onam-sadhya-feast-what-they-re-called/story-Ox35zUre2YkHzMjzOcSHTN.html</ref>ಯ ಪಂಡ್ದ್ ಲಾ ಬರೆಪೆರ್, ಉಂದು [[ಕೇರಳ]] ಮೂಲೊದ ಬೊಕ್ಕ ಮಾತಾ [[ಮಲಯಾಳಂ ಬಾಸೆ|ಮಲಯಾಳಿ]]ಲೆಗ್ ಮಹತ್ವೊದ ಒಂಜಿ ವಣಸ್ಗ್ ಲೆಪ್ಪುನ ಪುದರ್, ಉಂದೆಟ್ ಸಾಂಪ್ರದಾಯಿಕ ಸಸ್ಯಾಹಾರಿ ಭೋಜನೊಲು ಉಪ್ಪುಂಡು, ಉಂದೆನ್ ಸಾಮಾನ್ಯವಾದ್ ಬಾರೆ ಇರೆಟ್ಟ್ ವನಸ್ ಆದ್ ಬಲಸುವೆರ್. ಸದ್ಯೊನು ಸಾಮಾನ್ಯವಾದ್ ಹಿಂದೂ ಪರ್ಬೊಲೆಡ್ ಓಣಂ ಬೊಕ್ಕ ವಿಷು,ಬೊಕ್ಕ ಪುಟ್ಟು ಪರ್ಬೊಲು ಬೊಕ್ಕ ಮದಿಮೆದಂಚಿನ ಬೇತೆ ವಿಶೇಷ ಸಂದರ್ಭೊಲೆಡ್ ಒಂಜಿ ಸಾಂಪ್ರದಾಯಿಕ ಪರ್ಬೊದ ರೂಪೊಡು ಸರ್ವ್ ಮಲ್ಪುವೆರ್.
== ವ್ಯಾಕರಣ ==
ಮಲಯಾಳಂ ಪದ ಸಧ್ಯ (സദ്യ) [[ಸಂಸ್ಕೃತ ಬಾಸೆ|ಸಂಸ್ಕೃತ]] ಭಾಷೆದ ságdhi- (सग्धि) ಡ್ದ್ ಬತ್ತ್ಂಡ್, ಉಂದು ಒಂಜಿ ಸಾಮುದಾಯಿಕ ಭೋಜನೊನು ಸೂಚಿಸವುಂಡು.
== ಸದ್ಯೊದ ವಿಶೇಷ ಭಕ್ಶ್ಯ ==
ಒಂಜಿ ಸಾಮಾನ್ಯ ಸದ್ಯೊಡು ಸುಮಾರ್ 24-28 ಖಾದ್ಯೊಲೆನ್ ಒಂಜಿ ಕೋರ್ಸ್ ಆದ್ ಸರ್ವ್ ಮಲ್ಪೊಲಿ.ಕೆಲವು ಸಂದರ್ಭೊಡು, ಉಂದು ಮಸ್ತ್ ಮಲ್ಲೆ ಆನಗ, ಉಂದೆಟ್ 64 ಡ್ದ್ ಜಾಸ್ತಿ ವಸ್ತುಲೆನ್ ಸೇರಾವೊಲಿ, ಉದಾಹರಣೆಗೆ ಅರಂಮುಲಾ ವೆಳ್ಳಂಕಳಿ (ವಲ್ಲ-ಸದ್ಯ) ಗ್ ಸದ್ಯ. ಸಾಂಪ್ರದಾಯಿಕ ಸದ್ಯ ವಣಸ್ದ ಪೊರ್ತುಡು, ಜನಕುಲು ತಿರ್ತ್ ನೆಲಟ್ಟ್ ಕಾರ್ ಮಡಿತ್ತ್ದ್ ಕುಲ್ಲುವೆರ್.ವಣಸ್ ನು ಬಲತ್ತ ಕೈಟ್, ಕಟ್ಲರಿ ಇಜ್ಜಂದೆ ಉನ್ಪೆರ್.<ref>https://www.india.com/festivals-events/onam-sadhya-items-that-make-the-traditional-recipe-of-kerala-festival-a-hit-2445898/</ref>
ಮುಖ್ಯ ಖಾದ್ಯ ಪಂಡ ಸಾದಾ ಬೇಯ್ಪಾಯಿನ ಅರಿ, ಉಂದೆನ್ ಬೇತೆ ಕರಿ/ಕೂಟಾನ್ (കൂട്ടാന്) ದ ಒಟ್ಟುಗು ಸರ್ವ್ ಮಲ್ಪುವೆರ್, ಉಂದೆಟ್ ಪರಿಪ್ಪು, ಸಾಂಬಾರ್, ರಸಮ್, ಪುಲಿಸ್ಸೆರಿ ಬೊಕ್ಕ ಕಾಳನ್, ಅವಿಯಲ್, ತೊರನ್, ಒಲನ್, ಪಚ್ಚಡಿ, ಕಿಚಡಿ, ಕೊಜಿ, ಎರ್ತುಕ್, ಮಂಟುಕ್ಲೆ, ಪಿಕ್ಕುಲೆ, ಮೆಝುಕ್ಕುಪುರಟ್ಟಿ, ನಾರಂಗ ಆಚಾರ್ (ಸುಣ್ಣದ ಉಪ್ಪಿನಕಾಯಿ), ಅಂಚನೆ ಪಾಪಡಂ, ಬಾಳೆ ಚಿಪ್ಸ್, ಶರ್ಕರ ಉಪ್ಪೆರಿ, ಪರಂದ್, ಸಾದಾ ದೋಸೆ ಬೊಕ್ಕ ಅಳೆ.ಅಳೆನ್ ಸಾಮಾನ್ಯವಾದ್ ವಣಸ್ದ ಕಡೆಕ್ಕ್ ಸರ್ವ್ ಮಲ್ಪುವೆರ್.ವಣಸ್ದದ ಕಡೆಕ್ಕ್ ಕೊರ್ಪಿನ ಪಾಯಸ ಪನ್ಪಿನ ಸಾಂಪ್ರದಾಯಿಕ ಸಿಹಿತಿಂಡಿ ಮಸ್ತ್ ಬಗೆತ ಉಪ್ಪುಂಡು.ಬೊಕ್ಕ ಸಾಮಾನ್ಯವಾದ್ ಮೂಜಿ ಅತ್ತಂಡ ಅಯಿಡ್ದ್ ಜಾಸ್ತಿ ಮಲ್ಪುವೆರ್. ಕೆಲವು ಬಗೆತ ಪಾಲಡ ಪ್ರಧಾನ, ಅಡ ಪ್ರಧಾನ, ಪರಿಪ್ಪು ಪ್ರಧಾನ, ಚಕ್ಕ ಪ್ರಧಾನ, ಗೋತಂಪು ಪಾಯಸ, ಪಾಲ ಪಾಯಸ ಇಂಚಿತ್ತಿನ ಬಹು ಕಜಿಪುಲು ಪೂರ ಬೇತೆ ಬೇತೆ ತರಕಾರಿಡ್ ಮಲ್ಪುನವು ಬೊಕ್ಕ ಅಯಿತ್ತ ಸ್ವಂತ ರುಚಿನ್ ಪಡೆಯಿನವು. ಕರಿತ ವೈವಿಧ್ಯತೆ ಸಮೃದ್ಧಿ ಬೊಕ್ಕ ಯೋಗಕ್ಷೇಮೊನು ಸಂಕೇತಿಸವುಂಡು.
== ಬಾರೆ ಇರೆಟ್ಟ್ ಬಲಸುನ ಜಾಗೆ ==
ಬಾರೆದ ಇರೆಟ್ಟ್ ಬೇತೆ ಬೇತೆ ಜಾಗೆಡ್ ಈ ಖಾದ್ಯೊಲೆನ್ ಸರ್ವ್ ಮಲ್ಪುವೆರ್.ಉದಾಹರಣೆಗ್, ಉಪ್ಪಿನಕಾಯಿಲೆನ್ ಮಿತ್ತ್ ಎಡ ಮೂಲೆಡ್ ಬೊಕ್ಕ ಪರಂದ್ ನ್ ತಿರ್ತ ಎಡ ಮೂಲೆಡ್ ಕೊರ್ಪೆರ್, ಉಂದು ವೇಟರ್ ಲೆಗ್ ಸುಲಭವಾದ್ ಗುರುತಿಸರೆ ಬೊಕ್ಕ ಹೆಚ್ಚುವರಿ ಸೇವೆಲೆನ್ ಒದಗಿಸೆರೆ ಸಹಾಯ ಮಲ್ಪುಂಡು. ಕೇರಳೊಡು ಮಸ್ತ್ ಉಪ್ಪುನೆರ್ದಾತ್ರ ಮಾತಾ ತೆನಸ್ಲೆಡ್ ಸಾಮಾನ್ಯವಾದ್ ಬಳಕೆ ಆಪಿನ ಸಾಮಗ್ರಿಲು ತಾರಾಯಿ. ತಾರಾಯಿದ ಪೇರ್ ಕೆಲವು ವನಸ್ಡ್ ಗಳಸುವೆರ್, ತಾರಾಯಿದ ಎಣ್ಣೆನ್ ಕಜಿಪುಗು ಗಳಸುವೆರ್. ಸದ್ಯ ಮೆನುಡ್ ಪ್ರಾದೇಶಿಕ ಬದಲಾವಣೆಲು ಉಂಡು, ಸ್ಥಳೀಯ ಆಚರಣೆಲು ಬೊಕ್ಕ ಪದಾರ್ಥೊಲೆನ ಲಭ್ಯತೆಡ್ದ್ ಪ್ರಭಾವಿತವಾದುಂಡು. ಕೇರಳ ಅತ್ತಂದೆ ಭಾರತದ ನೈಋತ್ಯ ಕರಾವಳಿಡ್ ಮೂಲದ ಸಾಂಪ್ರದಾಯಿಕ ಬೊಕ್ಕ ಋತುಮಾನದ ತರಕಾರಿಲೆನ್ ಬಳಕೆ ಮಲ್ಪುನ ಕ್ರಮ ಇತ್ತ್ಂಡಲಾ, ಕ್ಯಾರೆಟ್, ಅನಾನಸ್, ಬೀನ್ಸ್ ಇಂಚಿನ ತರಕಾರಿಲೆನ್ ಖಾದ್ಯೊಲೆಡ್ ಸೇರಾವುನವು ಸಾಮಾನ್ಯ ಕ್ರಮ ಆತ್ಂಡ್. ಸಾಂಪ್ರದಾಯಿಕವಾದ್, ಸದ್ಯೊಡು ಉಪ್ಪುನ ಖಾದ್ಯೊಲೆಡ್ ಈರುಳ್ಳಿ ಅತ್ತ್ಂಡ ಬೆಳ್ಳುಳ್ಳಿ ಇಜ್ಜಿ.ವಣಸ್ದ ಬೊಕ್ಕ ವೆಟ್ಟಿಲಾ ಮುರುಕ್ಕನ್, ಬಚ್ಚಿರೆ ನ್ ಸುಣ್ಣ ಬೊಕ್ಕ ಅಡಕ್ಕೆ ದ ಒಟ್ಟುಗು ಅಗಿಯೆರೆ ಸಾಧ್ಯ. ಉಂದು ವಣಸ್ದದ ಜೀರ್ಣಕ್ರಿಯೆಗ್ ಸಹಾಯ ಮಲ್ಪುಂಡು ಬೊಕ್ಕ ತಾಳ್ಮೆನ್ ಶುದ್ಧ ಮಲ್ಪುಂಡು.<ref>https://www.thehindu.com/features/metroplus/Food/Onam-on-a-leaf/article14630774.ece</ref>
== ತಯಾರಿಲು ==
ಸದ್ಯೊನು ಸಾಮಾನ್ಯವಾದ್ ಮಧ್ಯಾಹ್ನೊಗು ಕೊರ್ಪೆರ್,ಆಂಡಲಾ ಒಂಜಿ ಲೈಟ್ ಆವೃತ್ತಿನ್ ರಾತ್ರಿದ ವಣಸ್ಗುಲಾ ಕೊರ್ಪೆರ್. ದುಂಬುದ ರಾತ್ರೆ ತಯಾರಿ ಸುರು ಆಪುಂಡು, ಬೊಕ್ಕ ಆಚರಣೆದ ದಿನ ಕಾಂಡೆ ಪತ್ತ್ ಗಂಟೆದ ದುಂಬು ತೆನಸ್ ತಯಾರ್ ಮಲ್ಪುವೆರ್. ಇತ್ತೆದ ಕಾಲೊಡು, ಜನಕ್ಲೆಗ್ ನೆಲಟ್ ಕುಲ್ಲೆರೆ ಅನುಕೂಲ ಆಪುಜಿ ಪನ್ಪಿನೆಡ್ದಾವರ ಸದ್ಯೊನು ಮೇಜಿಡ್ ಮಲ್ಪುವೆರ್. ಒಂಜಿ ಸದ್ಯೊಗು ವಸ್ತುಲೆನ್/ಪದಾರ್ಥೊಲೆನ್ ಸೋರ್ಸಿಂಗ್ ಮಲ್ಪುನವು ಗುಣಮಟ್ಟೊನು ಖಚಿತಪಡಿಸವುನ ಒಂಜಿ ವಿಸ್ತಾರವಾದ್ ಬೊಕ್ಕ ಎಚ್ಚರೊಡು ಮಲ್ಪುನ ಪ್ರಕ್ರಿಯೆ. ಅಗ್ನಿಗ್ ಪ್ರಾರ್ಥನೆ ಮಲ್ತ್ದ್ ಸಾದ್ಯ ತಯಾರಾಪುನ ಬೆಂಕಿ ಬೊಲ್ಪುನೆ, ಗಣಪತಿಗ್ ಅರ್ಪಣೆ ಆದ್ ಬೊಲ್ಪುದ ನಿಲವಿಲಕ್ಕುದ ಎದುರು ಬಾರೆದ ಇರೆತ ಮಿತ್ತ್ ಸುರೂತ ಸೇವನೆನ್ ದೀಪೆರ್. ಒಂಜಿ ಸದ್ಯೊಡು,ವಣಸ್ ನು ಬಾರೆದ ಇರೆತ ಮಿತ್ತ್ ದೀಪೆರ್.ವಣಸ್ ಮುಗಿನಗ ಇರೆನ್ ಮಡತ್ ದ್ ಮುಚ್ಚುವೆರ್.ಕೆಲವು ಸಂದರ್ಭೊಡು, ನಿಕ್ಲೆನ ಕಡೆಕ್ ಎಲೆನ್ ಮುಚ್ಚುನವು ಊಟೊಡು ತೃಪ್ತಿನ್ ಸೂಚಿಸವುಂಡು, ಆಂಡ ಅಯಿನ್ ಒರಿಡ್ದ್ ದೂರ ಮಲ್ಪುನವು ಊಟೊನು ಸುಧಾರಿಸವೊಲಿ ಪನ್ಪಿನೆನ್ ಸೂಚಿಸವುಂಡು.ಆಂಡಲಾ, ಕೇರಳದ ಬೇತೆ ಬೇತೆ ಭಾಗೊಲೆಡ್ ಎಲೆನ್ ಮಡತ್ ದೀತಿನ ದಿಕ್ಕ್ ಗ್ ಬೇತೆ ಬೇತೆ ಅರ್ಥೊಲು ಉಪ್ಪುಂಡು.ಕೇಂದ್ರ [[ಟ್ರಾವಂಕೂರು]] ಶೈಲಿದ ಸದ್ಯ ಅತ್ಯಂತ ಶಿಸ್ತುಬದ್ಧ ಬೊಕ್ಕ ಸಂಪ್ರದಾಯೊಗು ಬದ್ಧವಾಯಿನವು ಪಂಡ್ದ್ ತೆರಿದ್ ಬರ್ಪುಂಡು.ಚಿಪ್ಸ್ ಬೊಕ್ಕ ಉಪ್ಪಿನಕಾಯಿಡ್ದ್ ಸುರು ಮಲ್ತ್ದ್ ಖಾದ್ಯೊಲೆನ್ ಸರ್ವ್ ಮಲ್ಪುನಗ ಸಾಮಾನ್ಯವಾದ್ ಒಂಜಿ ಆದೇಶೊನು ಅನುಸರಿಸವೆರ್.ಆಂಡಲಾ, ಸ್ಥಳೀಯ ಆದ್ಯತೆಲೆನ್ ಅವಲಂಬಿಸಾದ್ [[ಕೇರಳ]]ದ ಬೇತೆ ಬೇತೆ ಭಾಗೊಲೆಡ್ ಖಾದ್ಯೊಲೆನ್ ಮಲ್ಪುನ ಬೊಕ್ಕ ಸರ್ವ್ ಮಲ್ಪುನ ಬೇತೆ ಬೇತೆ ಶೈಲಿ ಬೊಕ್ಕ ವಿಧಾನೊಲೆನ್ ಅಳವಡಿಸವೆರ್. ಅರಂಮುಲಾ ವಲ್ಲಾ-ಸದ್ಯ ಪಂಡ 64 ಡ್ದ್ ಜಾಸ್ತಿ ವಸ್ತುಲೆನ್ ಸಾಂಪ್ರದಾಯಿಕವಾದ್ ಸರ್ವ್ ಮಲ್ಪುನ ಅತ್ಯಂತ ಪ್ರಸಿದ್ಧ ಸದ್ಯ.
== ಉಲ್ಲೇಕೊ ==
<references />
== ವರ್ಗೊ ==
<nowiki>[[Category:Kerala Culture Month 2026]]</nowiki>
85f2nger96r4c878x6u9wqjjzivqs1d
ಜುಬೀನ್ ಗರ್ಗ್
0
27571
363103
2026-07-24T05:09:20Z
Kandarpajit Kallol
408
ಹೊಸ ಪುಟ: '''ಜುಬೀನ್ ಗರ್ಗ್''' ({{Lang-en|[[:en:Zubeen Garg|Zubeen Garg]]}}; [[೧೮ ನವೆಂಬರ್]] [[೧೯೭೨]] - [[೧೯ ಸೆಪ್ಟೆಂಬರ್]] [[೨೦೨೫]]) [[ಅಸ್ಸಾಂ]], [[ಭಾರತ]] ದ ಪ್ರಮುಖ ಗಾಯಕೆರ್. [[ನಟ]], ಚಿತ್ರ ನಿರ್ಮಾಪಕೆ, [[ಚಿತ್ರ]] ನಿರ್ದೇಶಕೆರ್, ಚಿತ್ರಕಥೆಕಾರೆರ್, ಸಂಗೀತಗಾರೆರ...
363103
wikitext
text/x-wiki
'''ಜುಬೀನ್ ಗರ್ಗ್''' ({{Lang-en|[[:en:Zubeen Garg|Zubeen Garg]]}}; [[೧೮ ನವೆಂಬರ್]] [[೧೯೭೨]] - [[೧೯ ಸೆಪ್ಟೆಂಬರ್]] [[೨೦೨೫]]) [[ಅಸ್ಸಾಂ]], [[ಭಾರತ]] ದ ಪ್ರಮುಖ ಗಾಯಕೆರ್. [[ನಟ]], ಚಿತ್ರ ನಿರ್ಮಾಪಕೆ, [[ಚಿತ್ರ]] ನಿರ್ದೇಶಕೆರ್, ಚಿತ್ರಕಥೆಕಾರೆರ್, ಸಂಗೀತಗಾರೆರ್, [[ಕವಿ]] ಬೊಕ್ಕ ಸಾಮಾಜಿಕ ಕಾರ್ಯಕರ್ತೆರ್.<ref>{{cite ಸುದ್ದಿ|url=https://indiatimes.comುಬೀನ್-ಗರ್ಗ್-ಬೇತೆ-ಟ್ರ್ಯಾಕ್ ಡ್/ಆರ್ಟಿಕಲ್ಶೋ/7791874.cms|title=ಜುಬೀನ್ ಗರ್ಗ್ ಬೇತೆ ಟ್ರ್ಯಾಕ್ ಡ್|ಕಡೆತ=ಗಂಗುಲಿ|ಮಾರ್ಗ| ೨೦೧೧|ಕೆಲಸ=[[ಇಂಡಿಯಾಟೈಮ್ಸ್]]|ಪ್ರವೇಶ-ದಿನಾಂಕ=೨ ಜುಲೈ ೨೦೧೨|ಆರ್ಕೈವ್-ದಿನಾಂಕ=೮ ಮಾರ್ಚ್ ೨೦೧೩|ಆರ್ಕೈವ್-ಯುಆರ್ಎಲ್=https://archive.org. /2011-03-26/news-interviews/29191918_1_zubeen-garg-bengali-movies-bengali-version|url-status=live}}</ref> [[ಅಸ್ಸಾಂ ಭಾಷೆ|ಅಸ್ಸಾಂ]], [[ಹಿಂದಿ ಭಾಷೆ|ಹಿಂದಿ]], [[ಬಂಗಾಳಿ ಭಾಷೆ|ಬಂಗಾಳಿ]], [[ಕೋಚ್ ರಾಜಬಂಶಿ ಭಾಷೆ|ಕೋಚ್-ರಾಜಬಂಶಿ]] ([[ಕಮತಾಪುರಿ ಭಾಷೆ|ಕಮತಾಪುರಿ]]/[[ಗೋಲ್ಪಾರಿ ಉಪಭಾಷೆ|ಗೋಲ್ಪಾರಿ]]), [[ಅಸ್ಸಾಂ ಚಹಾ ಜನಾಂಗದಕುಲು|ಚಾ ನೆಡುನಕುಲು]], [[ಹಜೊಂಗ್ ಭಾಷೆ|ಹಜೊಂಗ್]], [[ಮಿಚಿಂಗ್ ಭಾಷೆ|ಮಿಚಿಂಗ್]], [[ಕಬಿಯಾರ್ ಭಾಷೆ|ಕಬಿಯಾರ್]], [[ಗರೊ ಭಾಷೆ|ಗರೊ]], [[ರವ ಭಾಷೆ|ರವ]], [[ಪತಿರವ ಭಾಷೆ|ಪತಿರವ]], [[ದೀಮಾಸ ಭಾಷೆ|ದಿಮಾಚ]], [[ಅಹೋಮ ಭಾಷೆ|ತೈ-ಅಹೋಮ]], [[ದೇಯೂರಿ ಭಾಷೆಗಳು|ದೇಯೂರಿ]], [[ನೇಪಾಳಿ ಭಾಷೆ|ನೇಪಾಳಿ]], [[ಭೋಜ್ಪುರಿ ಭಾಷೆ|ಭೋಜ್ಪುರಿ]], [[ಮಣಿಪುರಿ ಭಾಷೆ|ಮಣಿಪುರಿ]], [[ಕಾಕಬರಕ್ ಭಾಷೆ|ಕಾಕಬರಕ್]], [[ಒರಿಯ ಭಾಷೆ|ಒರಿಯ]], [[ತಮಿಳು ಭಾಷೆ|ತಮಿಳು]], [[ತೆಲುಗು ಭಾಷೆ|ತೆಲುಗು]], [[ಕನ್ನಡ ಭಾಷೆ|ಕನ್ನಡ]], [[ಇಂಗ್ಲಿಷ್ ಭಾಷೆ|ಇಂಗ್ಲಿಷ್]], [[ಆದಿ ಭಾಷೆ|ಆದಿ]], [[ಅಲೋ ಭಾಷೆ|ಅಲೋ]], [[ತಿವಾ ಭಾಷೆ|ತಿವಾ]], [[ನಿಚಿ ಭಾಷೆ|ನಿಚಿ]], [[ಮಲಯಾಳಂ ಭಾಷೆ|ಮಲಯಾಳಂ]], [[ಮರಾಠಿ ಭಾಷೆ|ಮರಾಠಿ]], [[ಸಂಸ್ಕೃತ ಭಾಷೆ|ಸಂಸ್ಕೃತ]], [[ಸಿಂಧಿ ಭಾಷೆ|ಸಿಂಧಿ]], [[ಉರ್ದು ಭಾಷೆ|ಉರ್ದು]] ಇತ್ಯಾದಿ ವಿವಿಧ [[ಭಾಷೆ|ಭಾಷೆಲೆಡ್]] ಪಾಡ್ದನೊಲೆನ್ ಮಲ್ತೆರ್.<ref>{{ಚೆಕ್ ಬತ್ತ್ಂಡ್|url=https://dailypioneer.com|access-date=10 ಜನವರಿ 2021|work=দি পয়োনিয়ার|language=en|date=26 ಮೇ 2013|archive-date=4 ಏಪ್ರಿಲ್ 2023|archive-url=https://web.archive.org/web/20230404000432/https://dailypioneer.com|url-status=live}}</ref><ref>{{ಸಿಂಗರ್ ಗಾರ್ರಿ ಗಾಯೊಡ್ದ್ ಆಸ್ಪತ್ರೆಡ್ ದಾಖಲಾತ್ಂಡ್ |url=https://indianexpress.com |work=ದಿ ಇಂಡಿಯನ್ ಎಕ್ಸ್ ಪ್ರೆಸ್ |ದಿನಾಂಕ=20 ಜುಲೈ 2022 |ಪ್ರವೇಶ-ದಿನಾಂಕ=12 ಫೆಬ್ರವರಿ 2023 |archive-date=27 ಮಾರ್ಚ್ 2023 |archive-url=https://web.archive.org/web/20230327154132/https://indianexpress.com |url-status=live}}</ref>
fra1y0dt8gpad6lxwqf0xhrfjen8yr2
363104
363103
2026-07-24T05:13:11Z
Kandarpajit Kallol
408
/* */
363104
wikitext
text/x-wiki
'''ಜುಬೀನ್ ಗರ್ಗ್''' ({{Lang-en|[[:en:Zubeen Garg|Zubeen Garg]]}}; ೧೮ ನವೆಂಬರ್ ೧೯೭೨ - ೧೯ ಸೆಪ್ಟೆಂಬರ್ ೨೦೨೫) [[ಅಸ್ಸಾಂ]], [[ಭಾರತ]] ದ ಪ್ರಮುಖ ಗಾಯಕೆರ್. ನಟ, ಚಿತ್ರ ನಿರ್ಮಾಪಕೆ, ಚಿತ್ರ ನಿರ್ದೇಶಕೆರ್, ಚಿತ್ರಕಥೆಕಾರೆರ್, ಸಂಗೀತಗಾರೆರ್, ಕವಿ ಬೊಕ್ಕ ಸಾಮಾಜಿಕ ಕಾರ್ಯಕರ್ತೆರ್.<ref>{{cite ಸುದ್ದಿ|url=https://indiatimes.comುಬೀನ್-ಗರ್ಗ್-ಬೇತೆ-ಟ್ರ್ಯಾಕ್ ಡ್/ಆರ್ಟಿಕಲ್ಶೋ/7791874.cms|title=ಜುಬೀನ್ ಗರ್ಗ್ ಬೇತೆ ಟ್ರ್ಯಾಕ್ ಡ್|ಕಡೆತ=ಗಂಗುಲಿ|ಮಾರ್ಗ| ೨೦೧೧|ಕೆಲಸ=ಇಂಡಿಯಾಟೈಮ್ಸ್|ಪ್ರವೇಶ-ದಿನಾಂಕ=೨ ಜುಲೈ ೨೦೧೨|ಆರ್ಕೈವ್-ದಿನಾಂಕ=೮ ಮಾರ್ಚ್ ೨೦೧೩|ಆರ್ಕೈವ್-ಯುಆರ್ಎಲ್=https://archive.org. /2011-03-26/news-interviews/29191918_1_zubeen-garg-bengali-movies-bengali-version|url-status=live}}</ref> ಅಸ್ಸಾಂ, ಹಿಂದಿ, ಬಂಗಾಳಿ, ಕೋಚ್-ರಾಜಬಂಶಿ (ಕಮತಾಪುರಿ/ಗೋಲ್ಪಾರಿ), ಚಾ ನೆಡುನಕುಲು, ಹಜೊಂಗ್, ಮಿಚಿಂಗ್, ಕಬಿಯಾರ್, ಗರೊ, ರವ, ಪತಿರವ, ದಿಮಾಚ, ತೈ-ಅಹೋಮ, ದೇಯೂರಿ, ನೇಪಾಳಿ, ಭೋಜ್ಪುರಿ, ಮಣಿಪುರಿ, ಕಾಕಬರಕ್, ಒರಿಯ, ತಮಿಳು, ತೆಲುಗು, ಕನ್ನಡ, ಇಂಗ್ಲಿಷ್, ಆದಿ, ಅಲೋ, ತಿವಾ, ನಿಚಿ, ಮಲಯಾಳಂ, ಮರಾಠಿ, ಸಂಸ್ಕೃತ, ಸಿಂಧಿ, ಉರ್ದು ಇತ್ಯಾದಿ ವಿವಿಧ ಭಾಷೆಲೆಡ್ ಪಾಡ್ದನೊಲೆನ್ ಮಲ್ತೆರ್.<ref>{{ಚೆಕ್ ಬತ್ತ್ಂಡ್|url=https://dailypioneer.com|access-date=10 ಜನವರಿ 2021|work=ದಿ ಪಯೊನಿಯರ್|language=en|date=26 ಮೇ 2013|archive-date=4 ಏಪ್ರಿಲ್ 2023|archive-url=https://web.archive.org/web/20230404000432/https://dailypioneer.com|url-status=live}}</ref><ref>{{ಸಿಂಗರ್ ಗಾರ್ರಿ ಗಾಯೊಡ್ದ್ ಆಸ್ಪತ್ರೆಡ್ ದಾಖಲಾತ್ಂಡ್ |url=https://indianexpress.com |work=ದಿ |ದಿನಾಂಕ=20 ಜುಲೈ 2022 |ಪ್ರವೇಶ-ದಿನಾಂಕ=12 ಫೆಬ್ರವರಿ 2023 |archive-date=27 ಮಾರ್ಚ್ 2023 |archive-url=https://web.archive.org/web/20230327154132/https://indianexpress.com |url-status=live}}</ref>
s6wr6svcknnmca85uoue44d74h088uu
363105
363104
2026-07-24T05:14:11Z
Kandarpajit Kallol
408
/* */
363105
wikitext
text/x-wiki
'''ಜುಬೀನ್ ಗರ್ಗ್''' ({{Lang-en|[[:en:Zubeen Garg|Zubeen Garg]]}}; ೧೮ ನವೆಂಬರ್ ೧೯೭೨) ಅಸ್ಸಾಂ, ಭಾರತ ದ ಪ್ರಮುಖ ಗಾಯಕೆರ್. ನಟ, ಚಿತ್ರ ನಿರ್ಮಾಪಕೆ, ಚಿತ್ರ ನಿರ್ದೇಶಕೆರ್, ಚಿತ್ರಕಥೆಕಾರೆರ್, ಸಂಗೀತಗಾರೆರ್, ಕವಿ ಬೊಕ್ಕ ಸಾಮಾಜಿಕ ಕಾರ್ಯಕರ್ತೆರ್.<ref>{{cite news |last=Ganguly |date=26 March 2011 |title=Zubeen Garg on a different track |url=https://indiatimes.com |work=The Times of India |access-date=2 July 2012 |archive-date=8 March 2013 |archive-url=https://archive.org |url-status=live}}</ref> ಅಸ್ಸಾಂ, ಹಿಂದಿ, ಬಂಗಾಳಿ, ಕೋಚ್-ರಾಜಬಂಶಿ (ಕಮತಾಪುರಿ/ಗೋಲ್ಪಾರಿ), ಚಾ ನೆಡುನಕುಲು, ಹಜೊಂಗ್, ಮಿಚಿಂಗ್, ಕಬಿಯಾರ್, ಗರೊ, ರವ, ಪತಿರವ, ದಿಮಾಚ, ತೈ-ಅಹೋಮ, ದೇಯೂರಿ, ನೇಪಾಳಿ, ಭೋಜ್ಪುರಿ, ಮಣಿಪುರಿ, ಕಾಕಬರಕ್, ಒರಿಯ, ತಮಿಳು, ತೆಲುಗು, ಕನ್ನಡ, ಇಂಗ್ಲಿಷ್, ಆದಿ, ಅಲೋ, ತಿವಾ, ನಿಚಿ, ಮಲಯಾಳಂ, ಮರಾಠಿ, ಸಂಸ್ಕೃತ, ಸಿಂಧಿ, ಉರ್ದು ಇತ್ಯಾದಿ ವಿವಿಧ ಭಾಷೆಲೆಡ್ ಪಾಡ್ದನೊಲೆನ್ ಮಲ್ತೆರ್.<ref>{{cite news |date=26 May 2013 |title=Zubeen's arrived |url=https://dailypioneer.com |access-date=10 January 2021 |work=The Pioneer |language=en |archive-date=4 April 2023 |archive-url=https://web.archive.org/web/20230404000432/https://dailypioneer.com |url-status=live}}</ref><ref>{{cite news |date=20 July 2022 |title=Singer Zubeen Garg hospitalized in Dibrugarh after head injury |url=https://indianexpress.com |work=The Indian Express |access-date=12 February 2023 |archive-date=27 March 2023 |archive-url=https://web.archive.org/web/20230327154132/https://indianexpress.com |url-status=live}}</ref>
d3g38zybmcuugxzqbl5211wz6l9qu7p
363106
363105
2026-07-24T05:17:36Z
Kandarpajit Kallol
408
/* */
363106
wikitext
text/x-wiki
'''ಜುಬೀನ್ ಗರ್ಗ್''' ({{Lang-en|[[:en:Zubeen Garg|Zubeen Garg]]}}; ೧೮ ನವೆಂಬರ್ ೧೯೭೨) ಅಸ್ಸಾಂ, ಭಾರತ ದ ಪ್ರಮುಖ ಗಾಯಕೆರ್. ನಟ, ಚಿತ್ರ ನಿರ್ಮಾಪಕೆ, ಚಿತ್ರ ನಿರ್ದೇಶಕೆರ್, ಚಿತ್ರಕಥೆಕಾರೆರ್, ಸಂಗೀತಗಾರೆರ್, ಕವಿ ಬೊಕ್ಕ ಸಾಮಾಜಿಕ ಕಾರ್ಯಕರ್ತೆರ್.<ref>{{cite news |last=Ganguly |date=26 March 2011 |title=Zubeen Garg on a different track |url=https://indiatimes.com |work=The Times of India |access-date=2 July 2012 |archive-date=8 March 2013 |archive-url=https://archive.org |url-status=live}}</ref> ಅಸ್ಸಾಂ, ಹಿಂದಿ, ಬಂಗಾಳಿ, ಕೋಚ್-ರಾಜಬಂಶಿ (ಕಮತಾಪುರಿ/ಗೋಲ್ಪಾರಿ), ಚಾ ನೆಡುನಕುಲು, ಹಜೊಂಗ್, ಮಿಚಿಂಗ್, ಕಬಿಯಾರ್, ಗರೊ, ರವ, ಪತಿರವ, ದಿಮಾಚ, ತೈ-ಅಹೋಮ, ದೇಯೂರಿ, ನೇಪಾಳಿ, ಭೋಜ್ಪುರಿ, ಮಣಿಪುರಿ, ಕಾಕಬರಕ್, ಒರಿಯ, ತಮಿಳು, ತೆಲುಗು, ಕನ್ನಡ, ಇಂಗ್ಲಿಷ್, ಆದಿ, ಅಲೋ, ತಿವಾ, ನಿಚಿ, ಮಲಯಾಳಂ, ಮರಾಠಿ, ಸಂಸ್ಕೃತ, ಸಿಂಧಿ, ಉರ್ದು ಇತ್ಯಾದಿ ವಿವಿಧ ಭಾಷೆಲೆಡ್ ಪಾಡ್ದನೊಲೆನ್ ಮಲ್ತೆರ್.<ref>{{cite news |date=26 May 2013 |title=Zubeen's arrived |url=https://dailypioneer.com |access-date=10 January 2021 |work=The Pioneer |language=en |archive-date=4 April 2023 |archive-url=https://web.archive.org/web/20230404000432/https://dailypioneer.com |url-status=live}}</ref><ref>{{cite news |date=20 July 2022 |title=Singer Zubeen Garg hospitalized in Dibrugarh after head injury |url=https://indianexpress.com |work=The Indian Express |access-date=12 February 2023 |archive-date=27 March 2023 |archive-url=https://web.archive.org/web/20230327154132/https://indianexpress.com |url-status=live}}</ref>
ತನ್ನ 33 ವರ್ಷದ ವೃತ್ತಿಜೀವನೊಡು, ಜುಬೀನ್ ಗಾರ್ಗ್ 40 ಬಾಸೆಲೆಡ್ 38,000 ಡ್ದ್ ಜಾಸ್ತಿ ಪಾಡ್ದನೊಲು ರೆಕಾರ್ಡ್ ಮಲ್ತೆರ್.<ref>{{cite news |title=Guwahati bids tearful adieu to singing legend Zubeen Garg |url=https://thehindu.com |access-date=23 September 2025 |work=The Hindu |language=en-IN}}</ref><ref>{{cite news |last=Deb |first=Abhijit |title=From ‘Anamika’ to ‘Ya Ali’: Zubeen Garg, a man of many emotions, bids farewell |url=https://thestatesman.com |access-date=23 September 2025 |work=The Statesman |date=19 September 2025 |language=en}}</ref>
ಮೇರ್ ೧೯ ಸೆಪ್ಟೆಂಬರ್ ೨೦೨೫ ಡ್ ಸಿಂಗಾಪುರ್ ಡ್ ಮರಣೊ ಪಡೆಯೆರ್.
ss8mtcnxln2t8yfhhve49mihyqysgjr
363107
363106
2026-07-24T05:18:57Z
Kandarpajit Kallol
408
/* */
363107
wikitext
text/x-wiki
[[File:Zubin Garg Live performance (cropped).jpg|thumb]]
| caption = ২০২৫ চনত জুবিন গাৰ্গ '''ಜುಬೀನ್ ಗರ್ಗ್''' ({{Lang-en|[[:en:Zubeen Garg|Zubeen Garg]]}}; ೧೮ ನವೆಂಬರ್ ೧೯೭೨) ಅಸ್ಸಾಂ, ಭಾರತ ದ ಪ್ರಮುಖ ಗಾಯಕೆರ್. ನಟ, ಚಿತ್ರ ನಿರ್ಮಾಪಕೆ, ಚಿತ್ರ ನಿರ್ದೇಶಕೆರ್, ಚಿತ್ರಕಥೆಕಾರೆರ್, ಸಂಗೀತಗಾರೆರ್, ಕವಿ ಬೊಕ್ಕ ಸಾಮಾಜಿಕ ಕಾರ್ಯಕರ್ತೆರ್.<ref>{{cite news |last=Ganguly |date=26 March 2011 |title=Zubeen Garg on a different track |url=https://indiatimes.com |work=The Times of India |access-date=2 July 2012 |archive-date=8 March 2013 |archive-url=https://archive.org |url-status=live}}</ref> ಅಸ್ಸಾಂ, ಹಿಂದಿ, ಬಂಗಾಳಿ, ಕೋಚ್-ರಾಜಬಂಶಿ (ಕಮತಾಪುರಿ/ಗೋಲ್ಪಾರಿ), ಚಾ ನೆಡುನಕುಲು, ಹಜೊಂಗ್, ಮಿಚಿಂಗ್, ಕಬಿಯಾರ್, ಗರೊ, ರವ, ಪತಿರವ, ದಿಮಾಚ, ತೈ-ಅಹೋಮ, ದೇಯೂರಿ, ನೇಪಾಳಿ, ಭೋಜ್ಪುರಿ, ಮಣಿಪುರಿ, ಕಾಕಬರಕ್, ಒರಿಯ, ತಮಿಳು, ತೆಲುಗು, ಕನ್ನಡ, ಇಂಗ್ಲಿಷ್, ಆದಿ, ಅಲೋ, ತಿವಾ, ನಿಚಿ, ಮಲಯಾಳಂ, ಮರಾಠಿ, ಸಂಸ್ಕೃತ, ಸಿಂಧಿ, ಉರ್ದು ಇತ್ಯಾದಿ ವಿವಿಧ ಭಾಷೆಲೆಡ್ ಪಾಡ್ದನೊಲೆನ್ ಮಲ್ತೆರ್.<ref>{{cite news |date=26 May 2013 |title=Zubeen's arrived |url=https://dailypioneer.com |access-date=10 January 2021 |work=The Pioneer |language=en |archive-date=4 April 2023 |archive-url=https://web.archive.org/web/20230404000432/https://dailypioneer.com |url-status=live}}</ref><ref>{{cite news |date=20 July 2022 |title=Singer Zubeen Garg hospitalized in Dibrugarh after head injury |url=https://indianexpress.com |work=The Indian Express |access-date=12 February 2023 |archive-date=27 March 2023 |archive-url=https://web.archive.org/web/20230327154132/https://indianexpress.com |url-status=live}}</ref>
ತನ್ನ 33 ವರ್ಷದ ವೃತ್ತಿಜೀವನೊಡು, ಜುಬೀನ್ ಗಾರ್ಗ್ 40 ಬಾಸೆಲೆಡ್ 38,000 ಡ್ದ್ ಜಾಸ್ತಿ ಪಾಡ್ದನೊಲು ರೆಕಾರ್ಡ್ ಮಲ್ತೆರ್.<ref>{{cite news |title=Guwahati bids tearful adieu to singing legend Zubeen Garg |url=https://thehindu.com |access-date=23 September 2025 |work=The Hindu |language=en-IN}}</ref><ref>{{cite news |last=Deb |first=Abhijit |title=From ‘Anamika’ to ‘Ya Ali’: Zubeen Garg, a man of many emotions, bids farewell |url=https://thestatesman.com |access-date=23 September 2025 |work=The Statesman |date=19 September 2025 |language=en}}</ref>
ಮೇರ್ ೧೯ ಸೆಪ್ಟೆಂಬರ್ ೨೦೨೫ ಡ್ ಸಿಂಗಾಪುರ್ ಡ್ ಮರಣೊ ಪಡೆಯೆರ್.
2ad57elnuj5mefcx186grmq6szob4ny
363108
363107
2026-07-24T05:19:18Z
Kandarpajit Kallol
408
/* */
363108
wikitext
text/x-wiki
[[File:Zubin Garg Live performance (cropped).jpg|thumb]]
'''ಜುಬೀನ್ ಗರ್ಗ್''' ({{Lang-en|[[:en:Zubeen Garg|Zubeen Garg]]}}; ೧೮ ನವೆಂಬರ್ ೧೯೭೨) ಅಸ್ಸಾಂ, ಭಾರತ ದ ಪ್ರಮುಖ ಗಾಯಕೆರ್. ನಟ, ಚಿತ್ರ ನಿರ್ಮಾಪಕೆ, ಚಿತ್ರ ನಿರ್ದೇಶಕೆರ್, ಚಿತ್ರಕಥೆಕಾರೆರ್, ಸಂಗೀತಗಾರೆರ್, ಕವಿ ಬೊಕ್ಕ ಸಾಮಾಜಿಕ ಕಾರ್ಯಕರ್ತೆರ್.<ref>{{cite news |last=Ganguly |date=26 March 2011 |title=Zubeen Garg on a different track |url=https://indiatimes.com |work=The Times of India |access-date=2 July 2012 |archive-date=8 March 2013 |archive-url=https://archive.org |url-status=live}}</ref> ಅಸ್ಸಾಂ, ಹಿಂದಿ, ಬಂಗಾಳಿ, ಕೋಚ್-ರಾಜಬಂಶಿ (ಕಮತಾಪುರಿ/ಗೋಲ್ಪಾರಿ), ಚಾ ನೆಡುನಕುಲು, ಹಜೊಂಗ್, ಮಿಚಿಂಗ್, ಕಬಿಯಾರ್, ಗರೊ, ರವ, ಪತಿರವ, ದಿಮಾಚ, ತೈ-ಅಹೋಮ, ದೇಯೂರಿ, ನೇಪಾಳಿ, ಭೋಜ್ಪುರಿ, ಮಣಿಪುರಿ, ಕಾಕಬರಕ್, ಒರಿಯ, ತಮಿಳು, ತೆಲುಗು, ಕನ್ನಡ, ಇಂಗ್ಲಿಷ್, ಆದಿ, ಅಲೋ, ತಿವಾ, ನಿಚಿ, ಮಲಯಾಳಂ, ಮರಾಠಿ, ಸಂಸ್ಕೃತ, ಸಿಂಧಿ, ಉರ್ದು ಇತ್ಯಾದಿ ವಿವಿಧ ಭಾಷೆಲೆಡ್ ಪಾಡ್ದನೊಲೆನ್ ಮಲ್ತೆರ್.<ref>{{cite news |date=26 May 2013 |title=Zubeen's arrived |url=https://dailypioneer.com |access-date=10 January 2021 |work=The Pioneer |language=en |archive-date=4 April 2023 |archive-url=https://web.archive.org/web/20230404000432/https://dailypioneer.com |url-status=live}}</ref><ref>{{cite news |date=20 July 2022 |title=Singer Zubeen Garg hospitalized in Dibrugarh after head injury |url=https://indianexpress.com |work=The Indian Express |access-date=12 February 2023 |archive-date=27 March 2023 |archive-url=https://web.archive.org/web/20230327154132/https://indianexpress.com |url-status=live}}</ref>
ತನ್ನ 33 ವರ್ಷದ ವೃತ್ತಿಜೀವನೊಡು, ಜುಬೀನ್ ಗಾರ್ಗ್ 40 ಬಾಸೆಲೆಡ್ 38,000 ಡ್ದ್ ಜಾಸ್ತಿ ಪಾಡ್ದನೊಲು ರೆಕಾರ್ಡ್ ಮಲ್ತೆರ್.<ref>{{cite news |title=Guwahati bids tearful adieu to singing legend Zubeen Garg |url=https://thehindu.com |access-date=23 September 2025 |work=The Hindu |language=en-IN}}</ref><ref>{{cite news |last=Deb |first=Abhijit |title=From ‘Anamika’ to ‘Ya Ali’: Zubeen Garg, a man of many emotions, bids farewell |url=https://thestatesman.com |access-date=23 September 2025 |work=The Statesman |date=19 September 2025 |language=en}}</ref>
ಮೇರ್ ೧೯ ಸೆಪ್ಟೆಂಬರ್ ೨೦೨೫ ಡ್ ಸಿಂಗಾಪುರ್ ಡ್ ಮರಣೊ ಪಡೆಯೆರ್.
7irh15wszekbhxcekklvnfm33xoikeo
363110
363108
2026-07-24T05:20:00Z
Kandarpajit Kallol
408
/* */
363110
wikitext
text/x-wiki
[[File:Zubin Garg Live performance (cropped).jpg|thumb]]
'''ಜುಬೀನ್ ಗರ್ಗ್''' ({{Lang-en|[[:en:Zubeen Garg|Zubeen Garg]]}}; ೧೮ ನವೆಂಬರ್ ೧೯೭೨) ಅಸ್ಸಾಂ, ಭಾರತ ದ ಪ್ರಮುಖ ಗಾಯಕೆರ್. ನಟ, ಚಿತ್ರ ನಿರ್ಮಾಪಕೆ, ಚಿತ್ರ ನಿರ್ದೇಶಕೆರ್, ಚಿತ್ರಕಥೆಕಾರೆರ್, ಸಂಗೀತಗಾರೆರ್, ಕವಿ ಬೊಕ್ಕ ಸಾಮಾಜಿಕ ಕಾರ್ಯಕರ್ತೆರ್.<ref>{{cite news |last=Ganguly |date=26 March 2011 |title=Zubeen Garg on a different track |url=https://indiatimes.com |work=The Times of India |access-date=2 July 2012 |archive-date=8 March 2013 |archive-url=https://archive.org |url-status=live}}</ref> ಅಸ್ಸಾಂ, ಹಿಂದಿ, ಬಂಗಾಳಿ, ಕೋಚ್-ರಾಜಬಂಶಿ (ಕಮತಾಪುರಿ/ಗೋಲ್ಪಾರಿ), ಚಾ ನೆಡುನಕುಲು, ಹಜೊಂಗ್, ಮಿಚಿಂಗ್, ಕಬಿಯಾರ್, ಗರೊ, ರವ, ಪತಿರವ, ದಿಮಾಚ, ತೈ-ಅಹೋಮ, ದೇಯೂರಿ, ನೇಪಾಳಿ, ಭೋಜ್ಪುರಿ, ಮಣಿಪುರಿ, ಕಾಕಬರಕ್, ಒರಿಯ, ತಮಿಳು, ತೆಲುಗು, ಕನ್ನಡ, ಇಂಗ್ಲಿಷ್, ಆದಿ, ಅಲೋ, ತಿವಾ, ನಿಚಿ, ಮಲಯಾಳಂ, ಮರಾಠಿ, ಸಂಸ್ಕೃತ, ಸಿಂಧಿ, ಉರ್ದು ಇತ್ಯಾದಿ ವಿವಿಧ ಭಾಷೆಲೆಡ್ ಪಾಡ್ದನೊಲೆನ್ ಮಲ್ತೆರ್.<ref>{{cite news |date=26 May 2013 |title=Zubeen's arrived |url=https://dailypioneer.com |access-date=10 January 2021 |work=The Pioneer |language=en |archive-date=4 April 2023 |archive-url=https://web.archive.org/web/20230404000432/https://dailypioneer.com |url-status=live}}</ref><ref>{{cite news |date=20 July 2022 |title=Singer Zubeen Garg hospitalized in Dibrugarh after head injury |url=https://indianexpress.com |work=The Indian Express |access-date=12 February 2023 |archive-date=27 March 2023 |archive-url=https://web.archive.org/web/20230327154132/https://indianexpress.com |url-status=live}}</ref>
ತನ್ನ 33 ವರ್ಷದ ವೃತ್ತಿಜೀವನೊಡು, ಜುಬೀನ್ ಗಾರ್ಗ್ 40 ಬಾಸೆಲೆಡ್ 38,000 ಡ್ದ್ ಜಾಸ್ತಿ ಪಾಡ್ದನೊಲು ರೆಕಾರ್ಡ್ ಮಲ್ತೆರ್.<ref>{{cite news |title=Guwahati bids tearful adieu to singing legend Zubeen Garg |url=https://thehindu.com |access-date=23 September 2025 |work=The Hindu |language=en-IN}}</ref><ref>{{cite news |last=Deb |first=Abhijit |title=From ‘Anamika’ to ‘Ya Ali’: Zubeen Garg, a man of many emotions, bids farewell |url=https://thestatesman.com |access-date=23 September 2025 |work=The Statesman |date=19 September 2025 |language=en}}</ref>
ಮೇರ್ ೧೯ ಸೆಪ್ಟೆಂಬರ್ ೨೦೨೫ ಡ್ ಸಿಂಗಾಪುರ್ ಡ್ ಮರಣೊ ಪಡೆಯೆರ್.
== ಉಲ್ಲೇಕೊಲು ==
{{Reflist}}
cyjf6jn7mdlpgp8sh8w4hy4ppomu2ox
ವಿ. ಧನಂಜಯ ಕುಮಾರ್
0
27572
363109
2026-07-24T05:19:33Z
Mahaveer Indra
1023
ಪೊಸ ಬರವು
363109
wikitext
text/x-wiki
'''ವೇಣೂರು ಧನಂಜಯ ಕುಮಾರ್ ಆಳ್ವಾ''' (4 ಜೂನ್ 1951 – 4 ಮಾರ್ಚ್ 2019) ಮಾಜಿ ಕೇಂದ್ರ ಬೊಕ್ಕ ಕ್ಯಾಬಿನೆಟ್ ಸಚಿವೆರಾದಿತ್ತೆರ್. ಅಂಚನೆ ಮಂಗಳೂರು ವಿಧಾನಸಭಾ ಕ್ಷೇತ್ರೊದ ಸದಸ್ಯೆರಾದಿತ್ತೆರ್. ನಾಗರಿಕ ವಿಮಾನಯಾನ ಬೊಕ್ಕ ಪ್ರವಾಸೋದ್ಯಮ ಇಲಾಖೆದ ಕ್ಯಾಬಿನೆಟ್ ದರ್ಜೆದ ಸಚಿವೆರಾದ್, ಕೇಂದ್ರ ಹಣಕಾಸು ರಾಜ್ಯ ಸಚಿವೆರಾದ್ ಬೊಕ್ಕ ಕೇಂದ್ರ ಜವಳಿ ಖಾತೆ ರಾಜ್ಯ ಸಚಿವೆರಾದ್ ಕೇಂದ್ರೊಡು ಸೇವೆ ಮಲ್ತ್ದೆರ್. ಕಾಂಗ್ರೆಸ್ ಪಕ್ಷದ ಪ್ರಭಾವ ಉತ್ತುಂಗೊಡು ಇತ್ತಿನ ಕಾಲೊಡು, ದಕ್ಷಿಣ ಭಾರತೊರ್ದು ಆಯ್ಕೆಯಾಯಿನ ೧೮ ಬಿಜೆಪಿ ಸಂಸದೆರೆಡ್ ಆರ್ಲಾ ಒರಿಯಾದಿತ್ತೆರ್.
==ಪುಟ್ಟು ಬುಕ್ಕ ಕಲ್ಪಟಿಗೆ==
ದುಂಬದ ಅವಿಭಜಿತ ದಕ್ಷಿಣ ಕನ್ನಡ ಜಿಲ್ಲೆದ ಎಲ್ಯ ಪೇಂಟೆ ಆಯಿನ ವೇಣೂರುಡ್ ಧನಂಜಯ ಕುಮಾರ್ ಪುಟ್ಟಿಯೆರ್. ಅಮ್ಮೆರ್ ಅಂತಪ್ಪ ಆಳ್ವ. ಮೂಡುಬಿದಿರೆದ ಶ್ರೀ ಮಹಾವೀರ ಕಾಲೇಜಿರ್ದ್ ವಿಜ್ಞಾನೊಡು ಬೊಕ್ಕ ಉಡುಪಿದ ವೈಕುಂಠ ಬಾಳಿಗಾ ಕಾನೂನು ಕಾಲೇಜಿರ್ದ್ ಕಾನೂನು ಪದವಿ ಪಡೆಯೆರ್.<ref>{{cite web |title=ಯಡಿಯೂರಪ್ಪ ಬೆಂಬಲಿಗ ಧನಂಜಯ ಕುಮಾರ್ ಇನ್ನು ನೆನಪು ಮಾತ್ರ |url=https://kannada.oneindia.com/news/mangaluru/dhananjaya-kumar-died-at-unity-hospital-in-mangalore-161536.html |website=kannada.oneindia.com |access-date=24 July 2026}}</ref>
j9znnvyx7goptmt88sxublzhp8uxo4i
363111
363109
2026-07-24T06:13:24Z
Mahaveer Indra
1023
363111
wikitext
text/x-wiki
'''ವೇಣೂರು ಧನಂಜಯ ಕುಮಾರ್ ಆಳ್ವಾ''' (4 ಜೂನ್ 1951 – 4 ಮಾರ್ಚ್ 2019) ಮಾಜಿ ಕೇಂದ್ರ ಬೊಕ್ಕ ಕ್ಯಾಬಿನೆಟ್ ಸಚಿವೆರಾದಿತ್ತೆರ್. ಅಂಚನೆ ಮಂಗಳೂರು ವಿಧಾನಸಭಾ ಕ್ಷೇತ್ರೊದ ಸದಸ್ಯೆರಾದಿತ್ತೆರ್. ನಾಗರಿಕ ವಿಮಾನಯಾನ ಬೊಕ್ಕ ಪ್ರವಾಸೋದ್ಯಮ ಇಲಾಖೆದ ಕ್ಯಾಬಿನೆಟ್ ದರ್ಜೆದ ಸಚಿವೆರಾದ್, ಕೇಂದ್ರ ಹಣಕಾಸು ರಾಜ್ಯ ಸಚಿವೆರಾದ್ ಬೊಕ್ಕ ಕೇಂದ್ರ ಜವಳಿ ಖಾತೆ ರಾಜ್ಯ ಸಚಿವೆರಾದ್ ಕೇಂದ್ರೊಡು ಸೇವೆ ಮಲ್ತ್ದೆರ್. ಕಾಂಗ್ರೆಸ್ ಪಕ್ಷದ ಪ್ರಭಾವ ಉತ್ತುಂಗೊಡು ಇತ್ತಿನ ಕಾಲೊಡು, ದಕ್ಷಿಣ ಭಾರತೊರ್ದು ಆಯ್ಕೆಯಾಯಿನ ೧೮ ಬಿಜೆಪಿ ಸಂಸದೆರೆಡ್ ಆರ್ಲಾ ಒರಿಯಾದಿತ್ತೆರ್.
==ಪುಟ್ಟು ಬುಕ್ಕ ಕಲ್ಪಟಿಗೆ==
ದುಂಬದ ಅವಿಭಜಿತ ದಕ್ಷಿಣ ಕನ್ನಡ ಜಿಲ್ಲೆದ ಎಲ್ಯ ಪೇಂಟೆ ಆಯಿನ ವೇಣೂರುಡ್ ಧನಂಜಯ ಕುಮಾರ್ ಪುಟ್ಟಿಯೆರ್. ಅಮ್ಮೆರ್ ಅಂತಪ್ಪ ಆಳ್ವ. ಮೂಡುಬಿದಿರೆದ ಶ್ರೀ ಮಹಾವೀರ ಕಾಲೇಜಿರ್ದ್ ವಿಜ್ಞಾನೊಡು ಬೊಕ್ಕ ಉಡುಪಿದ ವೈಕುಂಠ ಬಾಳಿಗಾ ಕಾನೂನು ಕಾಲೇಜಿರ್ದ್ ಕಾನೂನು ಪದವಿ ಪಡೆಯೆರ್.<ref>{{cite web |title=ಯಡಿಯೂರಪ್ಪ ಬೆಂಬಲಿಗ ಧನಂಜಯ ಕುಮಾರ್ ಇನ್ನು ನೆನಪು ಮಾತ್ರ |url=https://kannada.oneindia.com/news/mangaluru/dhananjaya-kumar-died-at-unity-hospital-in-mangalore-161536.html |website=kannada.oneindia.com |access-date=24 July 2026}}</ref>
==ರಾಜಕೀಯೊಡು==
ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷದ ಯುವ ಘಟಕದ ಮುಖಾಂತರ ರಾಜಕೀಯೊಗು ಪ್ರವೇಶ ಮಲ್ತೆರ್.
ಆರ್ ಸತತ ನಾಲ್ ಸರ್ತಿ ಲೋಕಸಭೆಡ್ ಮಂಗಳೂರು ಲೋಕಸಭಾ ಕ್ಷೇತ್ರೊನು ಪ್ರತಿನಿಧಿಸಾದಿತ್ತೆರ್. ಧನಂಜಯ್ ಕುಮಾರ್ 1983ಡ್, ಮಂಗಳೂರು ನಗರ ವಿಧಾನಸಭಾ ಕ್ಷೇತ್ರೊರ್ದು ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷೊರ್ದು ಸ್ಪರ್ಧೆ ಮಲ್ತ್ದಿತ್ತೆರ್ ಬೊಕ್ಕ ಪ್ರತಿಸ್ಪರ್ಧಿ ಆಯಿನ ಕಾಂಗ್ರೆಸ್ ಪಕ್ಷದ ಪಾಲ್ ಫೆಡ್ರಿಕ್ ರಾಡ್ರಿಗಸ್ ಮೆರೆನ್ ಸೋಪಾಯೆರ್. ೧೯೮೯ಡ್ ನಡತಿನ ಲೋಕಸಭಾ ಚುನಾವಣೆಡ್ ಜನಾರ್ಧನ ಪೂಜಾರಿ ಮೆರೆನ ಎದುರು ಸೋತೆರ್. ಆಂಡ ೧೯೯೧ಡ್ ನಡತಿನ ಲೋಕಸಭಾ ಚುನಾವಣೆಡ್ ಪೂಜಾರಿ ಮೆರೆನ್ ಸೋಪಾದ್ ಗೆಂದ್ದ್ ಬತ್ತೆರ್. ಅಯಿರ್ದ್ ಬೊಕ್ಕದ ೧೯೯೬, ೧೯೯೮ ಬೊಕ್ಕ ೧೯೯೮ಡ್ ನಡತಿನ ಚುನಾವಣೆಡ್ಲಾ ಧನಂಜಯ ಕುಮಾರ್ ಮೆರೇ ಗೆಂದ್ದ್ ಬತ್ತೆರ್.
ಕರ್ನಾಟಕದ ಮಾಜಿ ಮುಖ್ಯಮಂತ್ರಿ ಬಿ.ಎಸ್. ಯಡಿಯೂರಪ್ಪ ಮೆರೆನ ಕಟ್ಟಾ ಬೆಂಬಲಿಗರಾದಿತ್ತಿನ ಆರ್, ಪೊಸತಾದ್ ಸ್ಥಾಪನೆ ಆಯಿನ 'ಕರ್ನಾಟಕ ಜನತಾ ಪಕ್ಷ'ದ ಅಧ್ಯಕ್ಷೆರಾದ್ ಆಯ್ಕೆ ಆದಿತ್ತೆರ್. ಆರ್ ನವದೆಹಲಿಡ್ ಇಪ್ಪುನ ಕೇಂದ್ರ ಸರ್ಕಾರೊಗು ಕರ್ನಾಟಕ ಸರ್ಕಾರದ ವಿಶೇಷ ಪ್ರತಿನಿಧಿಯಾದ್ಲಾ ಬೇಲೆ ಮಲ್ತ್ದಿತ್ತೆರ್.
ಕರ್ನಾಟಕೊಡು ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷದ ಉದಯದೊಟ್ಟುಗು, ಕುಮಾರ್ ಮಂಗಳೂರು (ಲೋಕಸಭಾ ಕ್ಷೇತ್ರ) ಕ್ಷೇತ್ರೊನು ಸತತ ನಾಲ್ ಸರ್ತಿ ಪ್ರತಿನಿಧಿಸಾಯೆರ್ ಬೊಕ್ಕ ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷ ಅಧಿಕಾರೊಡು ಇತ್ತಿನಗ ಭಾರತ ಸರ್ಕಾರೊಡು ಮೂಜಿ ಸರ್ತಿ ಕೇಂದ್ರ ಸಚಿವೆರಾದ್ ಸೇವೆ ಮಲ್ತ್ದಿತ್ತೆರ್. ಆರ್ 1996ಡ್ ನಾಗರಿಕ ವಿಮಾನಯಾನ ಬೊಕ್ಕ ಪ್ರವಾಸೋದ್ಯಮ ಕ್ಯಾಬಿನೆಟ್ ಸಚಿವೆರಾದ್, 1999ರ್ದ್ 2000ದ ಮುಟ್ಟ ಕೇಂದ್ರ ಹಣಕಾಸು ರಾಜ್ಯ ಸಚಿವೆರಾದ್ ಬೊಕ್ಕ 2000ರ್ದ್ 2003ದ ಮುಟ್ಟ ಕೇಂದ್ರ ಜವಳಿ ಖಾತೆ ರಾಜ್ಯ ಸಚಿವೆರಾದಿತ್ತೆರ್. ಹಾಲಿ ಸಂಸದೆರಾದಿತ್ತಂಡಲಾ, 2004ದ ಲೋಕಸಭಾ ಚುನಾವಣೆಡ್ ಅರೆಗ್ ಮಂಗಳೂರು ಕ್ಷೇತ್ರೊರ್ದು ಟಿಕೆಟ್ ಕೊರ್ಜೆರ್; ಅರೆನ ಬದಲ್ಗ್ ಡಿ. ವಿ. ಸದಾನಂದ ಗೌಡೆರೆಗ್ ಆದ್ಯತೆ ಕೊರಿಯೆರ್.
ಬಿಜೆಪಿ ರಾಜ್ಯಾಧ್ಯಕ್ಷೆರಾದಿತ್ತಿನ ಬಿ.ಎಸ್. ಯಡಿಯೂರಪ್ಪ ಮೆರೆಗ್ ಕಟ್ಟಾ ನಿಷ್ಠಾವಂತೆರಾದಿತ್ತೆರ್ ಪಂದೇ ಕುಮಾರ್ ಪುದರ್ ಪೋದಿತ್ತೆರ್. ಯಡಿಯೂರಪ್ಪ ಮೆರೆನ ಒಟ್ಟುಗು ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷೊನು ಬುಡ್ದ ಬೊಕ್ಕ, ಪೊಸ ರಾಜಕೀಯ ಪಕ್ಷವಾಯಿನ 'ಕರ್ನಾಟಕ ಜನತಾ ಪಕ್ಷ'ನ್ ಪುಟ್ಟಾವುನೆಡ್ ಆರ್ ಪ್ರಮುಖ ಪಾತ್ರ ವಹಿಸಾದಿತ್ತೆರ್. ಧನಂಜಯ್ ಮೆರೆನ್ ಆ ಪಕ್ಷದ ರಾಜ್ಯಾಧ್ಯಕ್ಷೆರನ್ನಾದ್ಲಾ ಮಲ್ತೆರ್.
==ತೀರಿನಿ==
mfc87rd86em8j3qnf9is67iu088idmy
363112
363111
2026-07-24T06:16:33Z
Mahaveer Indra
1023
/* ತೀರಿನಿ */
363112
wikitext
text/x-wiki
'''ವೇಣೂರು ಧನಂಜಯ ಕುಮಾರ್ ಆಳ್ವಾ''' (4 ಜೂನ್ 1951 – 4 ಮಾರ್ಚ್ 2019) ಮಾಜಿ ಕೇಂದ್ರ ಬೊಕ್ಕ ಕ್ಯಾಬಿನೆಟ್ ಸಚಿವೆರಾದಿತ್ತೆರ್. ಅಂಚನೆ ಮಂಗಳೂರು ವಿಧಾನಸಭಾ ಕ್ಷೇತ್ರೊದ ಸದಸ್ಯೆರಾದಿತ್ತೆರ್. ನಾಗರಿಕ ವಿಮಾನಯಾನ ಬೊಕ್ಕ ಪ್ರವಾಸೋದ್ಯಮ ಇಲಾಖೆದ ಕ್ಯಾಬಿನೆಟ್ ದರ್ಜೆದ ಸಚಿವೆರಾದ್, ಕೇಂದ್ರ ಹಣಕಾಸು ರಾಜ್ಯ ಸಚಿವೆರಾದ್ ಬೊಕ್ಕ ಕೇಂದ್ರ ಜವಳಿ ಖಾತೆ ರಾಜ್ಯ ಸಚಿವೆರಾದ್ ಕೇಂದ್ರೊಡು ಸೇವೆ ಮಲ್ತ್ದೆರ್. ಕಾಂಗ್ರೆಸ್ ಪಕ್ಷದ ಪ್ರಭಾವ ಉತ್ತುಂಗೊಡು ಇತ್ತಿನ ಕಾಲೊಡು, ದಕ್ಷಿಣ ಭಾರತೊರ್ದು ಆಯ್ಕೆಯಾಯಿನ ೧೮ ಬಿಜೆಪಿ ಸಂಸದೆರೆಡ್ ಆರ್ಲಾ ಒರಿಯಾದಿತ್ತೆರ್.
==ಪುಟ್ಟು ಬುಕ್ಕ ಕಲ್ಪಟಿಗೆ==
ದುಂಬದ ಅವಿಭಜಿತ ದಕ್ಷಿಣ ಕನ್ನಡ ಜಿಲ್ಲೆದ ಎಲ್ಯ ಪೇಂಟೆ ಆಯಿನ ವೇಣೂರುಡ್ ಧನಂಜಯ ಕುಮಾರ್ ಪುಟ್ಟಿಯೆರ್. ಅಮ್ಮೆರ್ ಅಂತಪ್ಪ ಆಳ್ವ. ಮೂಡುಬಿದಿರೆದ ಶ್ರೀ ಮಹಾವೀರ ಕಾಲೇಜಿರ್ದ್ ವಿಜ್ಞಾನೊಡು ಬೊಕ್ಕ ಉಡುಪಿದ ವೈಕುಂಠ ಬಾಳಿಗಾ ಕಾನೂನು ಕಾಲೇಜಿರ್ದ್ ಕಾನೂನು ಪದವಿ ಪಡೆಯೆರ್.<ref>{{cite web |title=ಯಡಿಯೂರಪ್ಪ ಬೆಂಬಲಿಗ ಧನಂಜಯ ಕುಮಾರ್ ಇನ್ನು ನೆನಪು ಮಾತ್ರ |url=https://kannada.oneindia.com/news/mangaluru/dhananjaya-kumar-died-at-unity-hospital-in-mangalore-161536.html |website=kannada.oneindia.com |access-date=24 July 2026}}</ref>
==ರಾಜಕೀಯೊಡು==
ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷದ ಯುವ ಘಟಕದ ಮುಖಾಂತರ ರಾಜಕೀಯೊಗು ಪ್ರವೇಶ ಮಲ್ತೆರ್.
ಆರ್ ಸತತ ನಾಲ್ ಸರ್ತಿ ಲೋಕಸಭೆಡ್ ಮಂಗಳೂರು ಲೋಕಸಭಾ ಕ್ಷೇತ್ರೊನು ಪ್ರತಿನಿಧಿಸಾದಿತ್ತೆರ್. ಧನಂಜಯ್ ಕುಮಾರ್ 1983ಡ್, ಮಂಗಳೂರು ನಗರ ವಿಧಾನಸಭಾ ಕ್ಷೇತ್ರೊರ್ದು ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷೊರ್ದು ಸ್ಪರ್ಧೆ ಮಲ್ತ್ದಿತ್ತೆರ್ ಬೊಕ್ಕ ಪ್ರತಿಸ್ಪರ್ಧಿ ಆಯಿನ ಕಾಂಗ್ರೆಸ್ ಪಕ್ಷದ ಪಾಲ್ ಫೆಡ್ರಿಕ್ ರಾಡ್ರಿಗಸ್ ಮೆರೆನ್ ಸೋಪಾಯೆರ್. ೧೯೮೯ಡ್ ನಡತಿನ ಲೋಕಸಭಾ ಚುನಾವಣೆಡ್ ಜನಾರ್ಧನ ಪೂಜಾರಿ ಮೆರೆನ ಎದುರು ಸೋತೆರ್. ಆಂಡ ೧೯೯೧ಡ್ ನಡತಿನ ಲೋಕಸಭಾ ಚುನಾವಣೆಡ್ ಪೂಜಾರಿ ಮೆರೆನ್ ಸೋಪಾದ್ ಗೆಂದ್ದ್ ಬತ್ತೆರ್. ಅಯಿರ್ದ್ ಬೊಕ್ಕದ ೧೯೯೬, ೧೯೯೮ ಬೊಕ್ಕ ೧೯೯೮ಡ್ ನಡತಿನ ಚುನಾವಣೆಡ್ಲಾ ಧನಂಜಯ ಕುಮಾರ್ ಮೆರೇ ಗೆಂದ್ದ್ ಬತ್ತೆರ್.
ಕರ್ನಾಟಕದ ಮಾಜಿ ಮುಖ್ಯಮಂತ್ರಿ ಬಿ.ಎಸ್. ಯಡಿಯೂರಪ್ಪ ಮೆರೆನ ಕಟ್ಟಾ ಬೆಂಬಲಿಗರಾದಿತ್ತಿನ ಆರ್, ಪೊಸತಾದ್ ಸ್ಥಾಪನೆ ಆಯಿನ 'ಕರ್ನಾಟಕ ಜನತಾ ಪಕ್ಷ'ದ ಅಧ್ಯಕ್ಷೆರಾದ್ ಆಯ್ಕೆ ಆದಿತ್ತೆರ್. ಆರ್ ನವದೆಹಲಿಡ್ ಇಪ್ಪುನ ಕೇಂದ್ರ ಸರ್ಕಾರೊಗು ಕರ್ನಾಟಕ ಸರ್ಕಾರದ ವಿಶೇಷ ಪ್ರತಿನಿಧಿಯಾದ್ಲಾ ಬೇಲೆ ಮಲ್ತ್ದಿತ್ತೆರ್.
ಕರ್ನಾಟಕೊಡು ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷದ ಉದಯದೊಟ್ಟುಗು, ಕುಮಾರ್ ಮಂಗಳೂರು (ಲೋಕಸಭಾ ಕ್ಷೇತ್ರ) ಕ್ಷೇತ್ರೊನು ಸತತ ನಾಲ್ ಸರ್ತಿ ಪ್ರತಿನಿಧಿಸಾಯೆರ್ ಬೊಕ್ಕ ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷ ಅಧಿಕಾರೊಡು ಇತ್ತಿನಗ ಭಾರತ ಸರ್ಕಾರೊಡು ಮೂಜಿ ಸರ್ತಿ ಕೇಂದ್ರ ಸಚಿವೆರಾದ್ ಸೇವೆ ಮಲ್ತ್ದಿತ್ತೆರ್. ಆರ್ 1996ಡ್ ನಾಗರಿಕ ವಿಮಾನಯಾನ ಬೊಕ್ಕ ಪ್ರವಾಸೋದ್ಯಮ ಕ್ಯಾಬಿನೆಟ್ ಸಚಿವೆರಾದ್, 1999ರ್ದ್ 2000ದ ಮುಟ್ಟ ಕೇಂದ್ರ ಹಣಕಾಸು ರಾಜ್ಯ ಸಚಿವೆರಾದ್ ಬೊಕ್ಕ 2000ರ್ದ್ 2003ದ ಮುಟ್ಟ ಕೇಂದ್ರ ಜವಳಿ ಖಾತೆ ರಾಜ್ಯ ಸಚಿವೆರಾದಿತ್ತೆರ್. ಹಾಲಿ ಸಂಸದೆರಾದಿತ್ತಂಡಲಾ, 2004ದ ಲೋಕಸಭಾ ಚುನಾವಣೆಡ್ ಅರೆಗ್ ಮಂಗಳೂರು ಕ್ಷೇತ್ರೊರ್ದು ಟಿಕೆಟ್ ಕೊರ್ಜೆರ್; ಅರೆನ ಬದಲ್ಗ್ ಡಿ. ವಿ. ಸದಾನಂದ ಗೌಡೆರೆಗ್ ಆದ್ಯತೆ ಕೊರಿಯೆರ್.
ಬಿಜೆಪಿ ರಾಜ್ಯಾಧ್ಯಕ್ಷೆರಾದಿತ್ತಿನ ಬಿ.ಎಸ್. ಯಡಿಯೂರಪ್ಪ ಮೆರೆಗ್ ಕಟ್ಟಾ ನಿಷ್ಠಾವಂತೆರಾದಿತ್ತೆರ್ ಪಂದೇ ಕುಮಾರ್ ಪುದರ್ ಪೋದಿತ್ತೆರ್. ಯಡಿಯೂರಪ್ಪ ಮೆರೆನ ಒಟ್ಟುಗು ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷೊನು ಬುಡ್ದ ಬೊಕ್ಕ, ಪೊಸ ರಾಜಕೀಯ ಪಕ್ಷವಾಯಿನ 'ಕರ್ನಾಟಕ ಜನತಾ ಪಕ್ಷ'ನ್ ಪುಟ್ಟಾವುನೆಡ್ ಆರ್ ಪ್ರಮುಖ ಪಾತ್ರ ವಹಿಸಾದಿತ್ತೆರ್. ಧನಂಜಯ್ ಮೆರೆನ್ ಆ ಪಕ್ಷದ ರಾಜ್ಯಾಧ್ಯಕ್ಷೆರನ್ನಾದ್ಲಾ ಮಲ್ತೆರ್.
==ತೀರಿನಿ==
ಮೂತ್ರಪಿಂಡದ ಸಮಸ್ಯೆರ್ದಾದ್ ದೀರ್ಘಕಾಲದ ಅನಾರೋಗ್ಯೊರ್ದು ಇತ್ತಿನ ಕುಮಾರ್ 4 ಮಾರ್ಚ್ 2019 ದಾನಿ ಮಂಗಳೂರುದ ಯೂನಿಟಿ ಆಸ್ಪತ್ರೆಡ್ ತೀರ್ದ್ ಪೋಯೆರ್.<ref>{{cite web |title=ಧನಂಜಯ ಕುಮಾರ್ ನಿಧನ |url=https://www.prajavani.net/news/karnataka-news/v-dhananjay-kumar-no-more-618901.html |website=prajavani.net |publisher=ಪ್ರಜಾವಾಣಿ |access-date=24 July 2026}}</ref>
1cm1blwq6z410uo0vm4dwg2fu5vzy0k
363113
363112
2026-07-24T06:18:31Z
Mahaveer Indra
1023
/* ರಾಜಕೀಯೊಡು */
363113
wikitext
text/x-wiki
'''ವೇಣೂರು ಧನಂಜಯ ಕುಮಾರ್ ಆಳ್ವಾ''' (4 ಜೂನ್ 1951 – 4 ಮಾರ್ಚ್ 2019) ಮಾಜಿ ಕೇಂದ್ರ ಬೊಕ್ಕ ಕ್ಯಾಬಿನೆಟ್ ಸಚಿವೆರಾದಿತ್ತೆರ್. ಅಂಚನೆ ಮಂಗಳೂರು ವಿಧಾನಸಭಾ ಕ್ಷೇತ್ರೊದ ಸದಸ್ಯೆರಾದಿತ್ತೆರ್. ನಾಗರಿಕ ವಿಮಾನಯಾನ ಬೊಕ್ಕ ಪ್ರವಾಸೋದ್ಯಮ ಇಲಾಖೆದ ಕ್ಯಾಬಿನೆಟ್ ದರ್ಜೆದ ಸಚಿವೆರಾದ್, ಕೇಂದ್ರ ಹಣಕಾಸು ರಾಜ್ಯ ಸಚಿವೆರಾದ್ ಬೊಕ್ಕ ಕೇಂದ್ರ ಜವಳಿ ಖಾತೆ ರಾಜ್ಯ ಸಚಿವೆರಾದ್ ಕೇಂದ್ರೊಡು ಸೇವೆ ಮಲ್ತ್ದೆರ್. ಕಾಂಗ್ರೆಸ್ ಪಕ್ಷದ ಪ್ರಭಾವ ಉತ್ತುಂಗೊಡು ಇತ್ತಿನ ಕಾಲೊಡು, ದಕ್ಷಿಣ ಭಾರತೊರ್ದು ಆಯ್ಕೆಯಾಯಿನ ೧೮ ಬಿಜೆಪಿ ಸಂಸದೆರೆಡ್ ಆರ್ಲಾ ಒರಿಯಾದಿತ್ತೆರ್.
==ಪುಟ್ಟು ಬುಕ್ಕ ಕಲ್ಪಟಿಗೆ==
ದುಂಬದ ಅವಿಭಜಿತ ದಕ್ಷಿಣ ಕನ್ನಡ ಜಿಲ್ಲೆದ ಎಲ್ಯ ಪೇಂಟೆ ಆಯಿನ ವೇಣೂರುಡ್ ಧನಂಜಯ ಕುಮಾರ್ ಪುಟ್ಟಿಯೆರ್. ಅಮ್ಮೆರ್ ಅಂತಪ್ಪ ಆಳ್ವ. ಮೂಡುಬಿದಿರೆದ ಶ್ರೀ ಮಹಾವೀರ ಕಾಲೇಜಿರ್ದ್ ವಿಜ್ಞಾನೊಡು ಬೊಕ್ಕ ಉಡುಪಿದ ವೈಕುಂಠ ಬಾಳಿಗಾ ಕಾನೂನು ಕಾಲೇಜಿರ್ದ್ ಕಾನೂನು ಪದವಿ ಪಡೆಯೆರ್.<ref>{{cite web |title=ಯಡಿಯೂರಪ್ಪ ಬೆಂಬಲಿಗ ಧನಂಜಯ ಕುಮಾರ್ ಇನ್ನು ನೆನಪು ಮಾತ್ರ |url=https://kannada.oneindia.com/news/mangaluru/dhananjaya-kumar-died-at-unity-hospital-in-mangalore-161536.html |website=kannada.oneindia.com |access-date=24 July 2026}}</ref>
==ರಾಜಕೀಯೊಡು==
ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷದ ಯುವ ಘಟಕದ ಮುಖಾಂತರ ರಾಜಕೀಯೊಗು ಪ್ರವೇಶ ಮಲ್ತೆರ್.
ಆರ್ ಸತತ ನಾಲ್ ಸರ್ತಿ ಲೋಕಸಭೆಡ್ ಮಂಗಳೂರು ಲೋಕಸಭಾ ಕ್ಷೇತ್ರೊನು ಪ್ರತಿನಿಧಿಸಾದಿತ್ತೆರ್. ಧನಂಜಯ್ ಕುಮಾರ್ 1983ಡ್, ಮಂಗಳೂರು ನಗರ ವಿಧಾನಸಭಾ ಕ್ಷೇತ್ರೊರ್ದು ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷೊರ್ದು ಸ್ಪರ್ಧೆ ಮಲ್ತ್ದಿತ್ತೆರ್ ಬೊಕ್ಕ ಪ್ರತಿಸ್ಪರ್ಧಿ ಆಯಿನ ಕಾಂಗ್ರೆಸ್ ಪಕ್ಷದ ಪಾಲ್ ಫೆಡ್ರಿಕ್ ರಾಡ್ರಿಗಸ್ ಮೆರೆನ್ ಸೋಪಾಯೆರ್. ೧೯೮೯ಡ್ ನಡತಿನ ಲೋಕಸಭಾ ಚುನಾವಣೆಡ್ ಜನಾರ್ಧನ ಪೂಜಾರಿ ಮೆರೆನ ಎದುರು ಸೋತೆರ್. ಆಂಡ ೧೯೯೧ಡ್ ನಡತಿನ ಲೋಕಸಭಾ ಚುನಾವಣೆಡ್ ಪೂಜಾರಿ ಮೆರೆನ್ ಸೋಪಾದ್ ಗೆಂದ್ದ್ ಬತ್ತೆರ್. ಅಯಿರ್ದ್ ಬೊಕ್ಕದ ೧೯೯೬, ೧೯೯೮ ಬೊಕ್ಕ ೧೯೯೮ಡ್ ನಡತಿನ ಚುನಾವಣೆಡ್ಲಾ ಧನಂಜಯ ಕುಮಾರ್ ಮೆರೇ ಗೆಂದ್ದ್ ಬತ್ತೆರ್.<ref>{{cite web |title=ಯಡಿಯೂರಪ್ಪ ಬೆಂಬಲಿಗ ಧನಂಜಯ ಕುಮಾರ್ ಇನ್ನು ನೆನಪು ಮಾತ್ರ |url=https://kannada.oneindia.com/news/mangaluru/dhananjaya-kumar-died-at-unity-hospital-in-mangalore-161536.html |website=kannada.oneindia.com |access-date=24 July 2026}}</ref>
ಕರ್ನಾಟಕದ ಮಾಜಿ ಮುಖ್ಯಮಂತ್ರಿ ಬಿ.ಎಸ್. ಯಡಿಯೂರಪ್ಪ ಮೆರೆನ ಕಟ್ಟಾ ಬೆಂಬಲಿಗರಾದಿತ್ತಿನ ಆರ್, ಪೊಸತಾದ್ ಸ್ಥಾಪನೆ ಆಯಿನ 'ಕರ್ನಾಟಕ ಜನತಾ ಪಕ್ಷ'ದ ಅಧ್ಯಕ್ಷೆರಾದ್ ಆಯ್ಕೆ ಆದಿತ್ತೆರ್. ಆರ್ ನವದೆಹಲಿಡ್ ಇಪ್ಪುನ ಕೇಂದ್ರ ಸರ್ಕಾರೊಗು ಕರ್ನಾಟಕ ಸರ್ಕಾರದ ವಿಶೇಷ ಪ್ರತಿನಿಧಿಯಾದ್ಲಾ ಬೇಲೆ ಮಲ್ತ್ದಿತ್ತೆರ್.
ಕರ್ನಾಟಕೊಡು ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷದ ಉದಯದೊಟ್ಟುಗು, ಕುಮಾರ್ ಮಂಗಳೂರು (ಲೋಕಸಭಾ ಕ್ಷೇತ್ರ) ಕ್ಷೇತ್ರೊನು ಸತತ ನಾಲ್ ಸರ್ತಿ ಪ್ರತಿನಿಧಿಸಾಯೆರ್ ಬೊಕ್ಕ ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷ ಅಧಿಕಾರೊಡು ಇತ್ತಿನಗ ಭಾರತ ಸರ್ಕಾರೊಡು ಮೂಜಿ ಸರ್ತಿ ಕೇಂದ್ರ ಸಚಿವೆರಾದ್ ಸೇವೆ ಮಲ್ತ್ದಿತ್ತೆರ್. ಆರ್ 1996ಡ್ ನಾಗರಿಕ ವಿಮಾನಯಾನ ಬೊಕ್ಕ ಪ್ರವಾಸೋದ್ಯಮ ಕ್ಯಾಬಿನೆಟ್ ಸಚಿವೆರಾದ್, 1999ರ್ದ್ 2000ದ ಮುಟ್ಟ ಕೇಂದ್ರ ಹಣಕಾಸು ರಾಜ್ಯ ಸಚಿವೆರಾದ್ ಬೊಕ್ಕ 2000ರ್ದ್ 2003ದ ಮುಟ್ಟ ಕೇಂದ್ರ ಜವಳಿ ಖಾತೆ ರಾಜ್ಯ ಸಚಿವೆರಾದಿತ್ತೆರ್. ಹಾಲಿ ಸಂಸದೆರಾದಿತ್ತಂಡಲಾ, 2004ದ ಲೋಕಸಭಾ ಚುನಾವಣೆಡ್ ಅರೆಗ್ ಮಂಗಳೂರು ಕ್ಷೇತ್ರೊರ್ದು ಟಿಕೆಟ್ ಕೊರ್ಜೆರ್; ಅರೆನ ಬದಲ್ಗ್ ಡಿ. ವಿ. ಸದಾನಂದ ಗೌಡೆರೆಗ್ ಆದ್ಯತೆ ಕೊರಿಯೆರ್.
ಬಿಜೆಪಿ ರಾಜ್ಯಾಧ್ಯಕ್ಷೆರಾದಿತ್ತಿನ ಬಿ.ಎಸ್. ಯಡಿಯೂರಪ್ಪ ಮೆರೆಗ್ ಕಟ್ಟಾ ನಿಷ್ಠಾವಂತೆರಾದಿತ್ತೆರ್ ಪಂದೇ ಕುಮಾರ್ ಪುದರ್ ಪೋದಿತ್ತೆರ್. ಯಡಿಯೂರಪ್ಪ ಮೆರೆನ ಒಟ್ಟುಗು ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷೊನು ಬುಡ್ದ ಬೊಕ್ಕ, ಪೊಸ ರಾಜಕೀಯ ಪಕ್ಷವಾಯಿನ 'ಕರ್ನಾಟಕ ಜನತಾ ಪಕ್ಷ'ನ್ ಪುಟ್ಟಾವುನೆಡ್ ಆರ್ ಪ್ರಮುಖ ಪಾತ್ರ ವಹಿಸಾದಿತ್ತೆರ್. ಧನಂಜಯ್ ಮೆರೆನ್ ಆ ಪಕ್ಷದ ರಾಜ್ಯಾಧ್ಯಕ್ಷೆರನ್ನಾದ್ಲಾ ಮಲ್ತೆರ್.<ref>{{cite web |title=ಯಡಿಯೂರಪ್ಪ ಬೆಂಬಲಿಗ ಧನಂಜಯ ಕುಮಾರ್ ಇನ್ನು ನೆನಪು ಮಾತ್ರ |url=https://kannada.oneindia.com/news/mangaluru/dhananjaya-kumar-died-at-unity-hospital-in-mangalore-161536.html |website=kannada.oneindia.com |access-date=24 July 2026}}</ref>
==ತೀರಿನಿ==
ಮೂತ್ರಪಿಂಡದ ಸಮಸ್ಯೆರ್ದಾದ್ ದೀರ್ಘಕಾಲದ ಅನಾರೋಗ್ಯೊರ್ದು ಇತ್ತಿನ ಕುಮಾರ್ 4 ಮಾರ್ಚ್ 2019 ದಾನಿ ಮಂಗಳೂರುದ ಯೂನಿಟಿ ಆಸ್ಪತ್ರೆಡ್ ತೀರ್ದ್ ಪೋಯೆರ್.<ref>{{cite web |title=ಧನಂಜಯ ಕುಮಾರ್ ನಿಧನ |url=https://www.prajavani.net/news/karnataka-news/v-dhananjay-kumar-no-more-618901.html |website=prajavani.net |publisher=ಪ್ರಜಾವಾಣಿ |access-date=24 July 2026}}</ref>
1nyukc2zgdm36l1k3cmcvz7hcdlt0mb
363114
363113
2026-07-24T06:19:01Z
Mahaveer Indra
1023
/* ತೀರಿನಿ */
363114
wikitext
text/x-wiki
'''ವೇಣೂರು ಧನಂಜಯ ಕುಮಾರ್ ಆಳ್ವಾ''' (4 ಜೂನ್ 1951 – 4 ಮಾರ್ಚ್ 2019) ಮಾಜಿ ಕೇಂದ್ರ ಬೊಕ್ಕ ಕ್ಯಾಬಿನೆಟ್ ಸಚಿವೆರಾದಿತ್ತೆರ್. ಅಂಚನೆ ಮಂಗಳೂರು ವಿಧಾನಸಭಾ ಕ್ಷೇತ್ರೊದ ಸದಸ್ಯೆರಾದಿತ್ತೆರ್. ನಾಗರಿಕ ವಿಮಾನಯಾನ ಬೊಕ್ಕ ಪ್ರವಾಸೋದ್ಯಮ ಇಲಾಖೆದ ಕ್ಯಾಬಿನೆಟ್ ದರ್ಜೆದ ಸಚಿವೆರಾದ್, ಕೇಂದ್ರ ಹಣಕಾಸು ರಾಜ್ಯ ಸಚಿವೆರಾದ್ ಬೊಕ್ಕ ಕೇಂದ್ರ ಜವಳಿ ಖಾತೆ ರಾಜ್ಯ ಸಚಿವೆರಾದ್ ಕೇಂದ್ರೊಡು ಸೇವೆ ಮಲ್ತ್ದೆರ್. ಕಾಂಗ್ರೆಸ್ ಪಕ್ಷದ ಪ್ರಭಾವ ಉತ್ತುಂಗೊಡು ಇತ್ತಿನ ಕಾಲೊಡು, ದಕ್ಷಿಣ ಭಾರತೊರ್ದು ಆಯ್ಕೆಯಾಯಿನ ೧೮ ಬಿಜೆಪಿ ಸಂಸದೆರೆಡ್ ಆರ್ಲಾ ಒರಿಯಾದಿತ್ತೆರ್.
==ಪುಟ್ಟು ಬುಕ್ಕ ಕಲ್ಪಟಿಗೆ==
ದುಂಬದ ಅವಿಭಜಿತ ದಕ್ಷಿಣ ಕನ್ನಡ ಜಿಲ್ಲೆದ ಎಲ್ಯ ಪೇಂಟೆ ಆಯಿನ ವೇಣೂರುಡ್ ಧನಂಜಯ ಕುಮಾರ್ ಪುಟ್ಟಿಯೆರ್. ಅಮ್ಮೆರ್ ಅಂತಪ್ಪ ಆಳ್ವ. ಮೂಡುಬಿದಿರೆದ ಶ್ರೀ ಮಹಾವೀರ ಕಾಲೇಜಿರ್ದ್ ವಿಜ್ಞಾನೊಡು ಬೊಕ್ಕ ಉಡುಪಿದ ವೈಕುಂಠ ಬಾಳಿಗಾ ಕಾನೂನು ಕಾಲೇಜಿರ್ದ್ ಕಾನೂನು ಪದವಿ ಪಡೆಯೆರ್.<ref>{{cite web |title=ಯಡಿಯೂರಪ್ಪ ಬೆಂಬಲಿಗ ಧನಂಜಯ ಕುಮಾರ್ ಇನ್ನು ನೆನಪು ಮಾತ್ರ |url=https://kannada.oneindia.com/news/mangaluru/dhananjaya-kumar-died-at-unity-hospital-in-mangalore-161536.html |website=kannada.oneindia.com |access-date=24 July 2026}}</ref>
==ರಾಜಕೀಯೊಡು==
ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷದ ಯುವ ಘಟಕದ ಮುಖಾಂತರ ರಾಜಕೀಯೊಗು ಪ್ರವೇಶ ಮಲ್ತೆರ್.
ಆರ್ ಸತತ ನಾಲ್ ಸರ್ತಿ ಲೋಕಸಭೆಡ್ ಮಂಗಳೂರು ಲೋಕಸಭಾ ಕ್ಷೇತ್ರೊನು ಪ್ರತಿನಿಧಿಸಾದಿತ್ತೆರ್. ಧನಂಜಯ್ ಕುಮಾರ್ 1983ಡ್, ಮಂಗಳೂರು ನಗರ ವಿಧಾನಸಭಾ ಕ್ಷೇತ್ರೊರ್ದು ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷೊರ್ದು ಸ್ಪರ್ಧೆ ಮಲ್ತ್ದಿತ್ತೆರ್ ಬೊಕ್ಕ ಪ್ರತಿಸ್ಪರ್ಧಿ ಆಯಿನ ಕಾಂಗ್ರೆಸ್ ಪಕ್ಷದ ಪಾಲ್ ಫೆಡ್ರಿಕ್ ರಾಡ್ರಿಗಸ್ ಮೆರೆನ್ ಸೋಪಾಯೆರ್. ೧೯೮೯ಡ್ ನಡತಿನ ಲೋಕಸಭಾ ಚುನಾವಣೆಡ್ ಜನಾರ್ಧನ ಪೂಜಾರಿ ಮೆರೆನ ಎದುರು ಸೋತೆರ್. ಆಂಡ ೧೯೯೧ಡ್ ನಡತಿನ ಲೋಕಸಭಾ ಚುನಾವಣೆಡ್ ಪೂಜಾರಿ ಮೆರೆನ್ ಸೋಪಾದ್ ಗೆಂದ್ದ್ ಬತ್ತೆರ್. ಅಯಿರ್ದ್ ಬೊಕ್ಕದ ೧೯೯೬, ೧೯೯೮ ಬೊಕ್ಕ ೧೯೯೮ಡ್ ನಡತಿನ ಚುನಾವಣೆಡ್ಲಾ ಧನಂಜಯ ಕುಮಾರ್ ಮೆರೇ ಗೆಂದ್ದ್ ಬತ್ತೆರ್.<ref>{{cite web |title=ಯಡಿಯೂರಪ್ಪ ಬೆಂಬಲಿಗ ಧನಂಜಯ ಕುಮಾರ್ ಇನ್ನು ನೆನಪು ಮಾತ್ರ |url=https://kannada.oneindia.com/news/mangaluru/dhananjaya-kumar-died-at-unity-hospital-in-mangalore-161536.html |website=kannada.oneindia.com |access-date=24 July 2026}}</ref>
ಕರ್ನಾಟಕದ ಮಾಜಿ ಮುಖ್ಯಮಂತ್ರಿ ಬಿ.ಎಸ್. ಯಡಿಯೂರಪ್ಪ ಮೆರೆನ ಕಟ್ಟಾ ಬೆಂಬಲಿಗರಾದಿತ್ತಿನ ಆರ್, ಪೊಸತಾದ್ ಸ್ಥಾಪನೆ ಆಯಿನ 'ಕರ್ನಾಟಕ ಜನತಾ ಪಕ್ಷ'ದ ಅಧ್ಯಕ್ಷೆರಾದ್ ಆಯ್ಕೆ ಆದಿತ್ತೆರ್. ಆರ್ ನವದೆಹಲಿಡ್ ಇಪ್ಪುನ ಕೇಂದ್ರ ಸರ್ಕಾರೊಗು ಕರ್ನಾಟಕ ಸರ್ಕಾರದ ವಿಶೇಷ ಪ್ರತಿನಿಧಿಯಾದ್ಲಾ ಬೇಲೆ ಮಲ್ತ್ದಿತ್ತೆರ್.
ಕರ್ನಾಟಕೊಡು ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷದ ಉದಯದೊಟ್ಟುಗು, ಕುಮಾರ್ ಮಂಗಳೂರು (ಲೋಕಸಭಾ ಕ್ಷೇತ್ರ) ಕ್ಷೇತ್ರೊನು ಸತತ ನಾಲ್ ಸರ್ತಿ ಪ್ರತಿನಿಧಿಸಾಯೆರ್ ಬೊಕ್ಕ ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷ ಅಧಿಕಾರೊಡು ಇತ್ತಿನಗ ಭಾರತ ಸರ್ಕಾರೊಡು ಮೂಜಿ ಸರ್ತಿ ಕೇಂದ್ರ ಸಚಿವೆರಾದ್ ಸೇವೆ ಮಲ್ತ್ದಿತ್ತೆರ್. ಆರ್ 1996ಡ್ ನಾಗರಿಕ ವಿಮಾನಯಾನ ಬೊಕ್ಕ ಪ್ರವಾಸೋದ್ಯಮ ಕ್ಯಾಬಿನೆಟ್ ಸಚಿವೆರಾದ್, 1999ರ್ದ್ 2000ದ ಮುಟ್ಟ ಕೇಂದ್ರ ಹಣಕಾಸು ರಾಜ್ಯ ಸಚಿವೆರಾದ್ ಬೊಕ್ಕ 2000ರ್ದ್ 2003ದ ಮುಟ್ಟ ಕೇಂದ್ರ ಜವಳಿ ಖಾತೆ ರಾಜ್ಯ ಸಚಿವೆರಾದಿತ್ತೆರ್. ಹಾಲಿ ಸಂಸದೆರಾದಿತ್ತಂಡಲಾ, 2004ದ ಲೋಕಸಭಾ ಚುನಾವಣೆಡ್ ಅರೆಗ್ ಮಂಗಳೂರು ಕ್ಷೇತ್ರೊರ್ದು ಟಿಕೆಟ್ ಕೊರ್ಜೆರ್; ಅರೆನ ಬದಲ್ಗ್ ಡಿ. ವಿ. ಸದಾನಂದ ಗೌಡೆರೆಗ್ ಆದ್ಯತೆ ಕೊರಿಯೆರ್.
ಬಿಜೆಪಿ ರಾಜ್ಯಾಧ್ಯಕ್ಷೆರಾದಿತ್ತಿನ ಬಿ.ಎಸ್. ಯಡಿಯೂರಪ್ಪ ಮೆರೆಗ್ ಕಟ್ಟಾ ನಿಷ್ಠಾವಂತೆರಾದಿತ್ತೆರ್ ಪಂದೇ ಕುಮಾರ್ ಪುದರ್ ಪೋದಿತ್ತೆರ್. ಯಡಿಯೂರಪ್ಪ ಮೆರೆನ ಒಟ್ಟುಗು ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷೊನು ಬುಡ್ದ ಬೊಕ್ಕ, ಪೊಸ ರಾಜಕೀಯ ಪಕ್ಷವಾಯಿನ 'ಕರ್ನಾಟಕ ಜನತಾ ಪಕ್ಷ'ನ್ ಪುಟ್ಟಾವುನೆಡ್ ಆರ್ ಪ್ರಮುಖ ಪಾತ್ರ ವಹಿಸಾದಿತ್ತೆರ್. ಧನಂಜಯ್ ಮೆರೆನ್ ಆ ಪಕ್ಷದ ರಾಜ್ಯಾಧ್ಯಕ್ಷೆರನ್ನಾದ್ಲಾ ಮಲ್ತೆರ್.<ref>{{cite web |title=ಯಡಿಯೂರಪ್ಪ ಬೆಂಬಲಿಗ ಧನಂಜಯ ಕುಮಾರ್ ಇನ್ನು ನೆನಪು ಮಾತ್ರ |url=https://kannada.oneindia.com/news/mangaluru/dhananjaya-kumar-died-at-unity-hospital-in-mangalore-161536.html |website=kannada.oneindia.com |access-date=24 July 2026}}</ref>
==ತೀರಿನಿ==
ಮೂತ್ರಪಿಂಡದ ಸಮಸ್ಯೆರ್ದಾದ್ ದೀರ್ಘಕಾಲದ ಅನಾರೋಗ್ಯೊರ್ದು ಇತ್ತಿನ ಕುಮಾರ್ 4 ಮಾರ್ಚ್ 2019 ದಾನಿ ಮಂಗಳೂರುದ ಯೂನಿಟಿ ಆಸ್ಪತ್ರೆಡ್ ತೀರ್ದ್ ಪೋಯೆರ್.<ref>{{cite web |title=ಧನಂಜಯ ಕುಮಾರ್ ನಿಧನ |url=https://www.prajavani.net/news/karnataka-news/v-dhananjay-kumar-no-more-618901.html |website=prajavani.net |publisher=ಪ್ರಜಾವಾಣಿ |access-date=24 July 2026}}</ref>
==ಉಲ್ಲೇಕ==
{{reflist}}
401hxntibrg9rb0ti8onhs4y588z7zw
363116
363114
2026-07-24T06:20:33Z
Mahaveer Indra
1023
added [[Category:ರಾಜಕಾರಣಿಲು]] using [[Help:Gadget-HotCat|HotCat]]
363116
wikitext
text/x-wiki
'''ವೇಣೂರು ಧನಂಜಯ ಕುಮಾರ್ ಆಳ್ವಾ''' (4 ಜೂನ್ 1951 – 4 ಮಾರ್ಚ್ 2019) ಮಾಜಿ ಕೇಂದ್ರ ಬೊಕ್ಕ ಕ್ಯಾಬಿನೆಟ್ ಸಚಿವೆರಾದಿತ್ತೆರ್. ಅಂಚನೆ ಮಂಗಳೂರು ವಿಧಾನಸಭಾ ಕ್ಷೇತ್ರೊದ ಸದಸ್ಯೆರಾದಿತ್ತೆರ್. ನಾಗರಿಕ ವಿಮಾನಯಾನ ಬೊಕ್ಕ ಪ್ರವಾಸೋದ್ಯಮ ಇಲಾಖೆದ ಕ್ಯಾಬಿನೆಟ್ ದರ್ಜೆದ ಸಚಿವೆರಾದ್, ಕೇಂದ್ರ ಹಣಕಾಸು ರಾಜ್ಯ ಸಚಿವೆರಾದ್ ಬೊಕ್ಕ ಕೇಂದ್ರ ಜವಳಿ ಖಾತೆ ರಾಜ್ಯ ಸಚಿವೆರಾದ್ ಕೇಂದ್ರೊಡು ಸೇವೆ ಮಲ್ತ್ದೆರ್. ಕಾಂಗ್ರೆಸ್ ಪಕ್ಷದ ಪ್ರಭಾವ ಉತ್ತುಂಗೊಡು ಇತ್ತಿನ ಕಾಲೊಡು, ದಕ್ಷಿಣ ಭಾರತೊರ್ದು ಆಯ್ಕೆಯಾಯಿನ ೧೮ ಬಿಜೆಪಿ ಸಂಸದೆರೆಡ್ ಆರ್ಲಾ ಒರಿಯಾದಿತ್ತೆರ್.
==ಪುಟ್ಟು ಬುಕ್ಕ ಕಲ್ಪಟಿಗೆ==
ದುಂಬದ ಅವಿಭಜಿತ ದಕ್ಷಿಣ ಕನ್ನಡ ಜಿಲ್ಲೆದ ಎಲ್ಯ ಪೇಂಟೆ ಆಯಿನ ವೇಣೂರುಡ್ ಧನಂಜಯ ಕುಮಾರ್ ಪುಟ್ಟಿಯೆರ್. ಅಮ್ಮೆರ್ ಅಂತಪ್ಪ ಆಳ್ವ. ಮೂಡುಬಿದಿರೆದ ಶ್ರೀ ಮಹಾವೀರ ಕಾಲೇಜಿರ್ದ್ ವಿಜ್ಞಾನೊಡು ಬೊಕ್ಕ ಉಡುಪಿದ ವೈಕುಂಠ ಬಾಳಿಗಾ ಕಾನೂನು ಕಾಲೇಜಿರ್ದ್ ಕಾನೂನು ಪದವಿ ಪಡೆಯೆರ್.<ref>{{cite web |title=ಯಡಿಯೂರಪ್ಪ ಬೆಂಬಲಿಗ ಧನಂಜಯ ಕುಮಾರ್ ಇನ್ನು ನೆನಪು ಮಾತ್ರ |url=https://kannada.oneindia.com/news/mangaluru/dhananjaya-kumar-died-at-unity-hospital-in-mangalore-161536.html |website=kannada.oneindia.com |access-date=24 July 2026}}</ref>
==ರಾಜಕೀಯೊಡು==
ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷದ ಯುವ ಘಟಕದ ಮುಖಾಂತರ ರಾಜಕೀಯೊಗು ಪ್ರವೇಶ ಮಲ್ತೆರ್.
ಆರ್ ಸತತ ನಾಲ್ ಸರ್ತಿ ಲೋಕಸಭೆಡ್ ಮಂಗಳೂರು ಲೋಕಸಭಾ ಕ್ಷೇತ್ರೊನು ಪ್ರತಿನಿಧಿಸಾದಿತ್ತೆರ್. ಧನಂಜಯ್ ಕುಮಾರ್ 1983ಡ್, ಮಂಗಳೂರು ನಗರ ವಿಧಾನಸಭಾ ಕ್ಷೇತ್ರೊರ್ದು ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷೊರ್ದು ಸ್ಪರ್ಧೆ ಮಲ್ತ್ದಿತ್ತೆರ್ ಬೊಕ್ಕ ಪ್ರತಿಸ್ಪರ್ಧಿ ಆಯಿನ ಕಾಂಗ್ರೆಸ್ ಪಕ್ಷದ ಪಾಲ್ ಫೆಡ್ರಿಕ್ ರಾಡ್ರಿಗಸ್ ಮೆರೆನ್ ಸೋಪಾಯೆರ್. ೧೯೮೯ಡ್ ನಡತಿನ ಲೋಕಸಭಾ ಚುನಾವಣೆಡ್ ಜನಾರ್ಧನ ಪೂಜಾರಿ ಮೆರೆನ ಎದುರು ಸೋತೆರ್. ಆಂಡ ೧೯೯೧ಡ್ ನಡತಿನ ಲೋಕಸಭಾ ಚುನಾವಣೆಡ್ ಪೂಜಾರಿ ಮೆರೆನ್ ಸೋಪಾದ್ ಗೆಂದ್ದ್ ಬತ್ತೆರ್. ಅಯಿರ್ದ್ ಬೊಕ್ಕದ ೧೯೯೬, ೧೯೯೮ ಬೊಕ್ಕ ೧೯೯೮ಡ್ ನಡತಿನ ಚುನಾವಣೆಡ್ಲಾ ಧನಂಜಯ ಕುಮಾರ್ ಮೆರೇ ಗೆಂದ್ದ್ ಬತ್ತೆರ್.<ref>{{cite web |title=ಯಡಿಯೂರಪ್ಪ ಬೆಂಬಲಿಗ ಧನಂಜಯ ಕುಮಾರ್ ಇನ್ನು ನೆನಪು ಮಾತ್ರ |url=https://kannada.oneindia.com/news/mangaluru/dhananjaya-kumar-died-at-unity-hospital-in-mangalore-161536.html |website=kannada.oneindia.com |access-date=24 July 2026}}</ref>
ಕರ್ನಾಟಕದ ಮಾಜಿ ಮುಖ್ಯಮಂತ್ರಿ ಬಿ.ಎಸ್. ಯಡಿಯೂರಪ್ಪ ಮೆರೆನ ಕಟ್ಟಾ ಬೆಂಬಲಿಗರಾದಿತ್ತಿನ ಆರ್, ಪೊಸತಾದ್ ಸ್ಥಾಪನೆ ಆಯಿನ 'ಕರ್ನಾಟಕ ಜನತಾ ಪಕ್ಷ'ದ ಅಧ್ಯಕ್ಷೆರಾದ್ ಆಯ್ಕೆ ಆದಿತ್ತೆರ್. ಆರ್ ನವದೆಹಲಿಡ್ ಇಪ್ಪುನ ಕೇಂದ್ರ ಸರ್ಕಾರೊಗು ಕರ್ನಾಟಕ ಸರ್ಕಾರದ ವಿಶೇಷ ಪ್ರತಿನಿಧಿಯಾದ್ಲಾ ಬೇಲೆ ಮಲ್ತ್ದಿತ್ತೆರ್.
ಕರ್ನಾಟಕೊಡು ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷದ ಉದಯದೊಟ್ಟುಗು, ಕುಮಾರ್ ಮಂಗಳೂರು (ಲೋಕಸಭಾ ಕ್ಷೇತ್ರ) ಕ್ಷೇತ್ರೊನು ಸತತ ನಾಲ್ ಸರ್ತಿ ಪ್ರತಿನಿಧಿಸಾಯೆರ್ ಬೊಕ್ಕ ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷ ಅಧಿಕಾರೊಡು ಇತ್ತಿನಗ ಭಾರತ ಸರ್ಕಾರೊಡು ಮೂಜಿ ಸರ್ತಿ ಕೇಂದ್ರ ಸಚಿವೆರಾದ್ ಸೇವೆ ಮಲ್ತ್ದಿತ್ತೆರ್. ಆರ್ 1996ಡ್ ನಾಗರಿಕ ವಿಮಾನಯಾನ ಬೊಕ್ಕ ಪ್ರವಾಸೋದ್ಯಮ ಕ್ಯಾಬಿನೆಟ್ ಸಚಿವೆರಾದ್, 1999ರ್ದ್ 2000ದ ಮುಟ್ಟ ಕೇಂದ್ರ ಹಣಕಾಸು ರಾಜ್ಯ ಸಚಿವೆರಾದ್ ಬೊಕ್ಕ 2000ರ್ದ್ 2003ದ ಮುಟ್ಟ ಕೇಂದ್ರ ಜವಳಿ ಖಾತೆ ರಾಜ್ಯ ಸಚಿವೆರಾದಿತ್ತೆರ್. ಹಾಲಿ ಸಂಸದೆರಾದಿತ್ತಂಡಲಾ, 2004ದ ಲೋಕಸಭಾ ಚುನಾವಣೆಡ್ ಅರೆಗ್ ಮಂಗಳೂರು ಕ್ಷೇತ್ರೊರ್ದು ಟಿಕೆಟ್ ಕೊರ್ಜೆರ್; ಅರೆನ ಬದಲ್ಗ್ ಡಿ. ವಿ. ಸದಾನಂದ ಗೌಡೆರೆಗ್ ಆದ್ಯತೆ ಕೊರಿಯೆರ್.
ಬಿಜೆಪಿ ರಾಜ್ಯಾಧ್ಯಕ್ಷೆರಾದಿತ್ತಿನ ಬಿ.ಎಸ್. ಯಡಿಯೂರಪ್ಪ ಮೆರೆಗ್ ಕಟ್ಟಾ ನಿಷ್ಠಾವಂತೆರಾದಿತ್ತೆರ್ ಪಂದೇ ಕುಮಾರ್ ಪುದರ್ ಪೋದಿತ್ತೆರ್. ಯಡಿಯೂರಪ್ಪ ಮೆರೆನ ಒಟ್ಟುಗು ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷೊನು ಬುಡ್ದ ಬೊಕ್ಕ, ಪೊಸ ರಾಜಕೀಯ ಪಕ್ಷವಾಯಿನ 'ಕರ್ನಾಟಕ ಜನತಾ ಪಕ್ಷ'ನ್ ಪುಟ್ಟಾವುನೆಡ್ ಆರ್ ಪ್ರಮುಖ ಪಾತ್ರ ವಹಿಸಾದಿತ್ತೆರ್. ಧನಂಜಯ್ ಮೆರೆನ್ ಆ ಪಕ್ಷದ ರಾಜ್ಯಾಧ್ಯಕ್ಷೆರನ್ನಾದ್ಲಾ ಮಲ್ತೆರ್.<ref>{{cite web |title=ಯಡಿಯೂರಪ್ಪ ಬೆಂಬಲಿಗ ಧನಂಜಯ ಕುಮಾರ್ ಇನ್ನು ನೆನಪು ಮಾತ್ರ |url=https://kannada.oneindia.com/news/mangaluru/dhananjaya-kumar-died-at-unity-hospital-in-mangalore-161536.html |website=kannada.oneindia.com |access-date=24 July 2026}}</ref>
==ತೀರಿನಿ==
ಮೂತ್ರಪಿಂಡದ ಸಮಸ್ಯೆರ್ದಾದ್ ದೀರ್ಘಕಾಲದ ಅನಾರೋಗ್ಯೊರ್ದು ಇತ್ತಿನ ಕುಮಾರ್ 4 ಮಾರ್ಚ್ 2019 ದಾನಿ ಮಂಗಳೂರುದ ಯೂನಿಟಿ ಆಸ್ಪತ್ರೆಡ್ ತೀರ್ದ್ ಪೋಯೆರ್.<ref>{{cite web |title=ಧನಂಜಯ ಕುಮಾರ್ ನಿಧನ |url=https://www.prajavani.net/news/karnataka-news/v-dhananjay-kumar-no-more-618901.html |website=prajavani.net |publisher=ಪ್ರಜಾವಾಣಿ |access-date=24 July 2026}}</ref>
==ಉಲ್ಲೇಕ==
{{reflist}}
[[ವರ್ಗೊ:ರಾಜಕಾರಣಿಲು]]
21j8rkeac5xhfl6xl2grrftz8fb31u5
363117
363116
2026-07-24T06:20:45Z
Mahaveer Indra
1023
added [[Category:ತುಳುವ ರಾಜಕಾರಿಣಿಲು]] using [[Help:Gadget-HotCat|HotCat]]
363117
wikitext
text/x-wiki
'''ವೇಣೂರು ಧನಂಜಯ ಕುಮಾರ್ ಆಳ್ವಾ''' (4 ಜೂನ್ 1951 – 4 ಮಾರ್ಚ್ 2019) ಮಾಜಿ ಕೇಂದ್ರ ಬೊಕ್ಕ ಕ್ಯಾಬಿನೆಟ್ ಸಚಿವೆರಾದಿತ್ತೆರ್. ಅಂಚನೆ ಮಂಗಳೂರು ವಿಧಾನಸಭಾ ಕ್ಷೇತ್ರೊದ ಸದಸ್ಯೆರಾದಿತ್ತೆರ್. ನಾಗರಿಕ ವಿಮಾನಯಾನ ಬೊಕ್ಕ ಪ್ರವಾಸೋದ್ಯಮ ಇಲಾಖೆದ ಕ್ಯಾಬಿನೆಟ್ ದರ್ಜೆದ ಸಚಿವೆರಾದ್, ಕೇಂದ್ರ ಹಣಕಾಸು ರಾಜ್ಯ ಸಚಿವೆರಾದ್ ಬೊಕ್ಕ ಕೇಂದ್ರ ಜವಳಿ ಖಾತೆ ರಾಜ್ಯ ಸಚಿವೆರಾದ್ ಕೇಂದ್ರೊಡು ಸೇವೆ ಮಲ್ತ್ದೆರ್. ಕಾಂಗ್ರೆಸ್ ಪಕ್ಷದ ಪ್ರಭಾವ ಉತ್ತುಂಗೊಡು ಇತ್ತಿನ ಕಾಲೊಡು, ದಕ್ಷಿಣ ಭಾರತೊರ್ದು ಆಯ್ಕೆಯಾಯಿನ ೧೮ ಬಿಜೆಪಿ ಸಂಸದೆರೆಡ್ ಆರ್ಲಾ ಒರಿಯಾದಿತ್ತೆರ್.
==ಪುಟ್ಟು ಬುಕ್ಕ ಕಲ್ಪಟಿಗೆ==
ದುಂಬದ ಅವಿಭಜಿತ ದಕ್ಷಿಣ ಕನ್ನಡ ಜಿಲ್ಲೆದ ಎಲ್ಯ ಪೇಂಟೆ ಆಯಿನ ವೇಣೂರುಡ್ ಧನಂಜಯ ಕುಮಾರ್ ಪುಟ್ಟಿಯೆರ್. ಅಮ್ಮೆರ್ ಅಂತಪ್ಪ ಆಳ್ವ. ಮೂಡುಬಿದಿರೆದ ಶ್ರೀ ಮಹಾವೀರ ಕಾಲೇಜಿರ್ದ್ ವಿಜ್ಞಾನೊಡು ಬೊಕ್ಕ ಉಡುಪಿದ ವೈಕುಂಠ ಬಾಳಿಗಾ ಕಾನೂನು ಕಾಲೇಜಿರ್ದ್ ಕಾನೂನು ಪದವಿ ಪಡೆಯೆರ್.<ref>{{cite web |title=ಯಡಿಯೂರಪ್ಪ ಬೆಂಬಲಿಗ ಧನಂಜಯ ಕುಮಾರ್ ಇನ್ನು ನೆನಪು ಮಾತ್ರ |url=https://kannada.oneindia.com/news/mangaluru/dhananjaya-kumar-died-at-unity-hospital-in-mangalore-161536.html |website=kannada.oneindia.com |access-date=24 July 2026}}</ref>
==ರಾಜಕೀಯೊಡು==
ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷದ ಯುವ ಘಟಕದ ಮುಖಾಂತರ ರಾಜಕೀಯೊಗು ಪ್ರವೇಶ ಮಲ್ತೆರ್.
ಆರ್ ಸತತ ನಾಲ್ ಸರ್ತಿ ಲೋಕಸಭೆಡ್ ಮಂಗಳೂರು ಲೋಕಸಭಾ ಕ್ಷೇತ್ರೊನು ಪ್ರತಿನಿಧಿಸಾದಿತ್ತೆರ್. ಧನಂಜಯ್ ಕುಮಾರ್ 1983ಡ್, ಮಂಗಳೂರು ನಗರ ವಿಧಾನಸಭಾ ಕ್ಷೇತ್ರೊರ್ದು ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷೊರ್ದು ಸ್ಪರ್ಧೆ ಮಲ್ತ್ದಿತ್ತೆರ್ ಬೊಕ್ಕ ಪ್ರತಿಸ್ಪರ್ಧಿ ಆಯಿನ ಕಾಂಗ್ರೆಸ್ ಪಕ್ಷದ ಪಾಲ್ ಫೆಡ್ರಿಕ್ ರಾಡ್ರಿಗಸ್ ಮೆರೆನ್ ಸೋಪಾಯೆರ್. ೧೯೮೯ಡ್ ನಡತಿನ ಲೋಕಸಭಾ ಚುನಾವಣೆಡ್ ಜನಾರ್ಧನ ಪೂಜಾರಿ ಮೆರೆನ ಎದುರು ಸೋತೆರ್. ಆಂಡ ೧೯೯೧ಡ್ ನಡತಿನ ಲೋಕಸಭಾ ಚುನಾವಣೆಡ್ ಪೂಜಾರಿ ಮೆರೆನ್ ಸೋಪಾದ್ ಗೆಂದ್ದ್ ಬತ್ತೆರ್. ಅಯಿರ್ದ್ ಬೊಕ್ಕದ ೧೯೯೬, ೧೯೯೮ ಬೊಕ್ಕ ೧೯೯೮ಡ್ ನಡತಿನ ಚುನಾವಣೆಡ್ಲಾ ಧನಂಜಯ ಕುಮಾರ್ ಮೆರೇ ಗೆಂದ್ದ್ ಬತ್ತೆರ್.<ref>{{cite web |title=ಯಡಿಯೂರಪ್ಪ ಬೆಂಬಲಿಗ ಧನಂಜಯ ಕುಮಾರ್ ಇನ್ನು ನೆನಪು ಮಾತ್ರ |url=https://kannada.oneindia.com/news/mangaluru/dhananjaya-kumar-died-at-unity-hospital-in-mangalore-161536.html |website=kannada.oneindia.com |access-date=24 July 2026}}</ref>
ಕರ್ನಾಟಕದ ಮಾಜಿ ಮುಖ್ಯಮಂತ್ರಿ ಬಿ.ಎಸ್. ಯಡಿಯೂರಪ್ಪ ಮೆರೆನ ಕಟ್ಟಾ ಬೆಂಬಲಿಗರಾದಿತ್ತಿನ ಆರ್, ಪೊಸತಾದ್ ಸ್ಥಾಪನೆ ಆಯಿನ 'ಕರ್ನಾಟಕ ಜನತಾ ಪಕ್ಷ'ದ ಅಧ್ಯಕ್ಷೆರಾದ್ ಆಯ್ಕೆ ಆದಿತ್ತೆರ್. ಆರ್ ನವದೆಹಲಿಡ್ ಇಪ್ಪುನ ಕೇಂದ್ರ ಸರ್ಕಾರೊಗು ಕರ್ನಾಟಕ ಸರ್ಕಾರದ ವಿಶೇಷ ಪ್ರತಿನಿಧಿಯಾದ್ಲಾ ಬೇಲೆ ಮಲ್ತ್ದಿತ್ತೆರ್.
ಕರ್ನಾಟಕೊಡು ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷದ ಉದಯದೊಟ್ಟುಗು, ಕುಮಾರ್ ಮಂಗಳೂರು (ಲೋಕಸಭಾ ಕ್ಷೇತ್ರ) ಕ್ಷೇತ್ರೊನು ಸತತ ನಾಲ್ ಸರ್ತಿ ಪ್ರತಿನಿಧಿಸಾಯೆರ್ ಬೊಕ್ಕ ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷ ಅಧಿಕಾರೊಡು ಇತ್ತಿನಗ ಭಾರತ ಸರ್ಕಾರೊಡು ಮೂಜಿ ಸರ್ತಿ ಕೇಂದ್ರ ಸಚಿವೆರಾದ್ ಸೇವೆ ಮಲ್ತ್ದಿತ್ತೆರ್. ಆರ್ 1996ಡ್ ನಾಗರಿಕ ವಿಮಾನಯಾನ ಬೊಕ್ಕ ಪ್ರವಾಸೋದ್ಯಮ ಕ್ಯಾಬಿನೆಟ್ ಸಚಿವೆರಾದ್, 1999ರ್ದ್ 2000ದ ಮುಟ್ಟ ಕೇಂದ್ರ ಹಣಕಾಸು ರಾಜ್ಯ ಸಚಿವೆರಾದ್ ಬೊಕ್ಕ 2000ರ್ದ್ 2003ದ ಮುಟ್ಟ ಕೇಂದ್ರ ಜವಳಿ ಖಾತೆ ರಾಜ್ಯ ಸಚಿವೆರಾದಿತ್ತೆರ್. ಹಾಲಿ ಸಂಸದೆರಾದಿತ್ತಂಡಲಾ, 2004ದ ಲೋಕಸಭಾ ಚುನಾವಣೆಡ್ ಅರೆಗ್ ಮಂಗಳೂರು ಕ್ಷೇತ್ರೊರ್ದು ಟಿಕೆಟ್ ಕೊರ್ಜೆರ್; ಅರೆನ ಬದಲ್ಗ್ ಡಿ. ವಿ. ಸದಾನಂದ ಗೌಡೆರೆಗ್ ಆದ್ಯತೆ ಕೊರಿಯೆರ್.
ಬಿಜೆಪಿ ರಾಜ್ಯಾಧ್ಯಕ್ಷೆರಾದಿತ್ತಿನ ಬಿ.ಎಸ್. ಯಡಿಯೂರಪ್ಪ ಮೆರೆಗ್ ಕಟ್ಟಾ ನಿಷ್ಠಾವಂತೆರಾದಿತ್ತೆರ್ ಪಂದೇ ಕುಮಾರ್ ಪುದರ್ ಪೋದಿತ್ತೆರ್. ಯಡಿಯೂರಪ್ಪ ಮೆರೆನ ಒಟ್ಟುಗು ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷೊನು ಬುಡ್ದ ಬೊಕ್ಕ, ಪೊಸ ರಾಜಕೀಯ ಪಕ್ಷವಾಯಿನ 'ಕರ್ನಾಟಕ ಜನತಾ ಪಕ್ಷ'ನ್ ಪುಟ್ಟಾವುನೆಡ್ ಆರ್ ಪ್ರಮುಖ ಪಾತ್ರ ವಹಿಸಾದಿತ್ತೆರ್. ಧನಂಜಯ್ ಮೆರೆನ್ ಆ ಪಕ್ಷದ ರಾಜ್ಯಾಧ್ಯಕ್ಷೆರನ್ನಾದ್ಲಾ ಮಲ್ತೆರ್.<ref>{{cite web |title=ಯಡಿಯೂರಪ್ಪ ಬೆಂಬಲಿಗ ಧನಂಜಯ ಕುಮಾರ್ ಇನ್ನು ನೆನಪು ಮಾತ್ರ |url=https://kannada.oneindia.com/news/mangaluru/dhananjaya-kumar-died-at-unity-hospital-in-mangalore-161536.html |website=kannada.oneindia.com |access-date=24 July 2026}}</ref>
==ತೀರಿನಿ==
ಮೂತ್ರಪಿಂಡದ ಸಮಸ್ಯೆರ್ದಾದ್ ದೀರ್ಘಕಾಲದ ಅನಾರೋಗ್ಯೊರ್ದು ಇತ್ತಿನ ಕುಮಾರ್ 4 ಮಾರ್ಚ್ 2019 ದಾನಿ ಮಂಗಳೂರುದ ಯೂನಿಟಿ ಆಸ್ಪತ್ರೆಡ್ ತೀರ್ದ್ ಪೋಯೆರ್.<ref>{{cite web |title=ಧನಂಜಯ ಕುಮಾರ್ ನಿಧನ |url=https://www.prajavani.net/news/karnataka-news/v-dhananjay-kumar-no-more-618901.html |website=prajavani.net |publisher=ಪ್ರಜಾವಾಣಿ |access-date=24 July 2026}}</ref>
==ಉಲ್ಲೇಕ==
{{reflist}}
[[ವರ್ಗೊ:ರಾಜಕಾರಣಿಲು]]
[[ವರ್ಗೊ:ತುಳುವ ರಾಜಕಾರಿಣಿಲು]]
3dl5rete87moeaxnq46z05p2rbfulez
363118
363117
2026-07-24T06:20:59Z
Mahaveer Indra
1023
added [[Category:ತುಳು ವಿಕಿಪೀಡಿಯ 10ನೇ ವರ್ಸಾಂತ್ಯೊ]] using [[Help:Gadget-HotCat|HotCat]]
363118
wikitext
text/x-wiki
'''ವೇಣೂರು ಧನಂಜಯ ಕುಮಾರ್ ಆಳ್ವಾ''' (4 ಜೂನ್ 1951 – 4 ಮಾರ್ಚ್ 2019) ಮಾಜಿ ಕೇಂದ್ರ ಬೊಕ್ಕ ಕ್ಯಾಬಿನೆಟ್ ಸಚಿವೆರಾದಿತ್ತೆರ್. ಅಂಚನೆ ಮಂಗಳೂರು ವಿಧಾನಸಭಾ ಕ್ಷೇತ್ರೊದ ಸದಸ್ಯೆರಾದಿತ್ತೆರ್. ನಾಗರಿಕ ವಿಮಾನಯಾನ ಬೊಕ್ಕ ಪ್ರವಾಸೋದ್ಯಮ ಇಲಾಖೆದ ಕ್ಯಾಬಿನೆಟ್ ದರ್ಜೆದ ಸಚಿವೆರಾದ್, ಕೇಂದ್ರ ಹಣಕಾಸು ರಾಜ್ಯ ಸಚಿವೆರಾದ್ ಬೊಕ್ಕ ಕೇಂದ್ರ ಜವಳಿ ಖಾತೆ ರಾಜ್ಯ ಸಚಿವೆರಾದ್ ಕೇಂದ್ರೊಡು ಸೇವೆ ಮಲ್ತ್ದೆರ್. ಕಾಂಗ್ರೆಸ್ ಪಕ್ಷದ ಪ್ರಭಾವ ಉತ್ತುಂಗೊಡು ಇತ್ತಿನ ಕಾಲೊಡು, ದಕ್ಷಿಣ ಭಾರತೊರ್ದು ಆಯ್ಕೆಯಾಯಿನ ೧೮ ಬಿಜೆಪಿ ಸಂಸದೆರೆಡ್ ಆರ್ಲಾ ಒರಿಯಾದಿತ್ತೆರ್.
==ಪುಟ್ಟು ಬುಕ್ಕ ಕಲ್ಪಟಿಗೆ==
ದುಂಬದ ಅವಿಭಜಿತ ದಕ್ಷಿಣ ಕನ್ನಡ ಜಿಲ್ಲೆದ ಎಲ್ಯ ಪೇಂಟೆ ಆಯಿನ ವೇಣೂರುಡ್ ಧನಂಜಯ ಕುಮಾರ್ ಪುಟ್ಟಿಯೆರ್. ಅಮ್ಮೆರ್ ಅಂತಪ್ಪ ಆಳ್ವ. ಮೂಡುಬಿದಿರೆದ ಶ್ರೀ ಮಹಾವೀರ ಕಾಲೇಜಿರ್ದ್ ವಿಜ್ಞಾನೊಡು ಬೊಕ್ಕ ಉಡುಪಿದ ವೈಕುಂಠ ಬಾಳಿಗಾ ಕಾನೂನು ಕಾಲೇಜಿರ್ದ್ ಕಾನೂನು ಪದವಿ ಪಡೆಯೆರ್.<ref>{{cite web |title=ಯಡಿಯೂರಪ್ಪ ಬೆಂಬಲಿಗ ಧನಂಜಯ ಕುಮಾರ್ ಇನ್ನು ನೆನಪು ಮಾತ್ರ |url=https://kannada.oneindia.com/news/mangaluru/dhananjaya-kumar-died-at-unity-hospital-in-mangalore-161536.html |website=kannada.oneindia.com |access-date=24 July 2026}}</ref>
==ರಾಜಕೀಯೊಡು==
ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷದ ಯುವ ಘಟಕದ ಮುಖಾಂತರ ರಾಜಕೀಯೊಗು ಪ್ರವೇಶ ಮಲ್ತೆರ್.
ಆರ್ ಸತತ ನಾಲ್ ಸರ್ತಿ ಲೋಕಸಭೆಡ್ ಮಂಗಳೂರು ಲೋಕಸಭಾ ಕ್ಷೇತ್ರೊನು ಪ್ರತಿನಿಧಿಸಾದಿತ್ತೆರ್. ಧನಂಜಯ್ ಕುಮಾರ್ 1983ಡ್, ಮಂಗಳೂರು ನಗರ ವಿಧಾನಸಭಾ ಕ್ಷೇತ್ರೊರ್ದು ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷೊರ್ದು ಸ್ಪರ್ಧೆ ಮಲ್ತ್ದಿತ್ತೆರ್ ಬೊಕ್ಕ ಪ್ರತಿಸ್ಪರ್ಧಿ ಆಯಿನ ಕಾಂಗ್ರೆಸ್ ಪಕ್ಷದ ಪಾಲ್ ಫೆಡ್ರಿಕ್ ರಾಡ್ರಿಗಸ್ ಮೆರೆನ್ ಸೋಪಾಯೆರ್. ೧೯೮೯ಡ್ ನಡತಿನ ಲೋಕಸಭಾ ಚುನಾವಣೆಡ್ ಜನಾರ್ಧನ ಪೂಜಾರಿ ಮೆರೆನ ಎದುರು ಸೋತೆರ್. ಆಂಡ ೧೯೯೧ಡ್ ನಡತಿನ ಲೋಕಸಭಾ ಚುನಾವಣೆಡ್ ಪೂಜಾರಿ ಮೆರೆನ್ ಸೋಪಾದ್ ಗೆಂದ್ದ್ ಬತ್ತೆರ್. ಅಯಿರ್ದ್ ಬೊಕ್ಕದ ೧೯೯೬, ೧೯೯೮ ಬೊಕ್ಕ ೧೯೯೮ಡ್ ನಡತಿನ ಚುನಾವಣೆಡ್ಲಾ ಧನಂಜಯ ಕುಮಾರ್ ಮೆರೇ ಗೆಂದ್ದ್ ಬತ್ತೆರ್.<ref>{{cite web |title=ಯಡಿಯೂರಪ್ಪ ಬೆಂಬಲಿಗ ಧನಂಜಯ ಕುಮಾರ್ ಇನ್ನು ನೆನಪು ಮಾತ್ರ |url=https://kannada.oneindia.com/news/mangaluru/dhananjaya-kumar-died-at-unity-hospital-in-mangalore-161536.html |website=kannada.oneindia.com |access-date=24 July 2026}}</ref>
ಕರ್ನಾಟಕದ ಮಾಜಿ ಮುಖ್ಯಮಂತ್ರಿ ಬಿ.ಎಸ್. ಯಡಿಯೂರಪ್ಪ ಮೆರೆನ ಕಟ್ಟಾ ಬೆಂಬಲಿಗರಾದಿತ್ತಿನ ಆರ್, ಪೊಸತಾದ್ ಸ್ಥಾಪನೆ ಆಯಿನ 'ಕರ್ನಾಟಕ ಜನತಾ ಪಕ್ಷ'ದ ಅಧ್ಯಕ್ಷೆರಾದ್ ಆಯ್ಕೆ ಆದಿತ್ತೆರ್. ಆರ್ ನವದೆಹಲಿಡ್ ಇಪ್ಪುನ ಕೇಂದ್ರ ಸರ್ಕಾರೊಗು ಕರ್ನಾಟಕ ಸರ್ಕಾರದ ವಿಶೇಷ ಪ್ರತಿನಿಧಿಯಾದ್ಲಾ ಬೇಲೆ ಮಲ್ತ್ದಿತ್ತೆರ್.
ಕರ್ನಾಟಕೊಡು ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷದ ಉದಯದೊಟ್ಟುಗು, ಕುಮಾರ್ ಮಂಗಳೂರು (ಲೋಕಸಭಾ ಕ್ಷೇತ್ರ) ಕ್ಷೇತ್ರೊನು ಸತತ ನಾಲ್ ಸರ್ತಿ ಪ್ರತಿನಿಧಿಸಾಯೆರ್ ಬೊಕ್ಕ ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷ ಅಧಿಕಾರೊಡು ಇತ್ತಿನಗ ಭಾರತ ಸರ್ಕಾರೊಡು ಮೂಜಿ ಸರ್ತಿ ಕೇಂದ್ರ ಸಚಿವೆರಾದ್ ಸೇವೆ ಮಲ್ತ್ದಿತ್ತೆರ್. ಆರ್ 1996ಡ್ ನಾಗರಿಕ ವಿಮಾನಯಾನ ಬೊಕ್ಕ ಪ್ರವಾಸೋದ್ಯಮ ಕ್ಯಾಬಿನೆಟ್ ಸಚಿವೆರಾದ್, 1999ರ್ದ್ 2000ದ ಮುಟ್ಟ ಕೇಂದ್ರ ಹಣಕಾಸು ರಾಜ್ಯ ಸಚಿವೆರಾದ್ ಬೊಕ್ಕ 2000ರ್ದ್ 2003ದ ಮುಟ್ಟ ಕೇಂದ್ರ ಜವಳಿ ಖಾತೆ ರಾಜ್ಯ ಸಚಿವೆರಾದಿತ್ತೆರ್. ಹಾಲಿ ಸಂಸದೆರಾದಿತ್ತಂಡಲಾ, 2004ದ ಲೋಕಸಭಾ ಚುನಾವಣೆಡ್ ಅರೆಗ್ ಮಂಗಳೂರು ಕ್ಷೇತ್ರೊರ್ದು ಟಿಕೆಟ್ ಕೊರ್ಜೆರ್; ಅರೆನ ಬದಲ್ಗ್ ಡಿ. ವಿ. ಸದಾನಂದ ಗೌಡೆರೆಗ್ ಆದ್ಯತೆ ಕೊರಿಯೆರ್.
ಬಿಜೆಪಿ ರಾಜ್ಯಾಧ್ಯಕ್ಷೆರಾದಿತ್ತಿನ ಬಿ.ಎಸ್. ಯಡಿಯೂರಪ್ಪ ಮೆರೆಗ್ ಕಟ್ಟಾ ನಿಷ್ಠಾವಂತೆರಾದಿತ್ತೆರ್ ಪಂದೇ ಕುಮಾರ್ ಪುದರ್ ಪೋದಿತ್ತೆರ್. ಯಡಿಯೂರಪ್ಪ ಮೆರೆನ ಒಟ್ಟುಗು ಭಾರತೀಯ ಜನತಾ ಪಕ್ಷೊನು ಬುಡ್ದ ಬೊಕ್ಕ, ಪೊಸ ರಾಜಕೀಯ ಪಕ್ಷವಾಯಿನ 'ಕರ್ನಾಟಕ ಜನತಾ ಪಕ್ಷ'ನ್ ಪುಟ್ಟಾವುನೆಡ್ ಆರ್ ಪ್ರಮುಖ ಪಾತ್ರ ವಹಿಸಾದಿತ್ತೆರ್. ಧನಂಜಯ್ ಮೆರೆನ್ ಆ ಪಕ್ಷದ ರಾಜ್ಯಾಧ್ಯಕ್ಷೆರನ್ನಾದ್ಲಾ ಮಲ್ತೆರ್.<ref>{{cite web |title=ಯಡಿಯೂರಪ್ಪ ಬೆಂಬಲಿಗ ಧನಂಜಯ ಕುಮಾರ್ ಇನ್ನು ನೆನಪು ಮಾತ್ರ |url=https://kannada.oneindia.com/news/mangaluru/dhananjaya-kumar-died-at-unity-hospital-in-mangalore-161536.html |website=kannada.oneindia.com |access-date=24 July 2026}}</ref>
==ತೀರಿನಿ==
ಮೂತ್ರಪಿಂಡದ ಸಮಸ್ಯೆರ್ದಾದ್ ದೀರ್ಘಕಾಲದ ಅನಾರೋಗ್ಯೊರ್ದು ಇತ್ತಿನ ಕುಮಾರ್ 4 ಮಾರ್ಚ್ 2019 ದಾನಿ ಮಂಗಳೂರುದ ಯೂನಿಟಿ ಆಸ್ಪತ್ರೆಡ್ ತೀರ್ದ್ ಪೋಯೆರ್.<ref>{{cite web |title=ಧನಂಜಯ ಕುಮಾರ್ ನಿಧನ |url=https://www.prajavani.net/news/karnataka-news/v-dhananjay-kumar-no-more-618901.html |website=prajavani.net |publisher=ಪ್ರಜಾವಾಣಿ |access-date=24 July 2026}}</ref>
==ಉಲ್ಲೇಕ==
{{reflist}}
[[ವರ್ಗೊ:ರಾಜಕಾರಣಿಲು]]
[[ವರ್ಗೊ:ತುಳುವ ರಾಜಕಾರಿಣಿಲು]]
[[ವರ್ಗೊ:ತುಳು ವಿಕಿಪೀಡಿಯ 10ನೇ ವರ್ಸಾಂತ್ಯೊ]]
3m1ynwnvdedy0cn3rnwp9r7pb155rzo
ಪಾತೆರ:ವಿ. ಧನಂಜಯ ಕುಮಾರ್
1
27573
363115
2026-07-24T06:20:19Z
Mahaveer Indra
1023
https://fountain.toolforge.org/editathons/10wiki-tcy
363115
wikitext
text/x-wiki
{{ವಿಕಿಪೀಡಿಯ 10ನೇ ವರ್ಸಂತಿಗೆ ಪಂತೊದ ಲೇಕನೊ}}
nekn5axm94un6rhhgr63qit15105phm