Wikipedia
enwiki
https://en.wikipedia.org/wiki/Main_Page
MediaWiki 1.40.0-wmf.24
first-letter
Media
Special
Talk
User
User talk
Wikipedia
Wikipedia talk
File
File talk
MediaWiki
MediaWiki talk
Template
Template talk
Help
Help talk
Category
Category talk
Portal
Portal talk
Draft
Draft talk
TimedText
TimedText talk
Module
Module talk
Gadget
Gadget talk
Gadget definition
Gadget definition talk
List of Hindi songs recorded by Asha Bhosle
0
70687805
1140973842
1139472232
2023-02-22T18:37:17Z
Citation bot
7903804
Alter: title, url. URLs might have been anonymized. | [[WP:UCB|Use this bot]]. [[WP:DBUG|Report bugs]]. | Suggested by AManWithNoPlan | #UCB_CommandLine
wikitext
text/x-wiki
{{Short description|None}}
{{more citations needed|date=January 2023}}
This is a list of [[Hindi]] songs recorded by [[Asha Bhosle]]. Bhosle has been cited by the [[Guinness Book of World Records]] as the most recorded singer in history.{{sfn|Premchand|2018|p=107}}
== 1940s ==
=== 1948 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
!''Afsana''
| "Dulha Babu Tu Jhule Mein Jhul"
| N/A
| N/A
| S. Balbir
|-
! Rowspan=2| ''Char Din Ki Chandni''
| "Char Sau Bees Hasinon Se"
| rowspan=2| N/A
| rowspan=2| N/A
| solo
|-
| "Taqdeer Ne Loota"
| Shankar Dasgupta
|-
!''Chunaria''
| "Tere Milne Ko Jee Dhadke"
| Hansraj Behl
| Mulk Raj Bhakri
| Geeta Dutt, Zohrabai Ambalewali
|}
=== 1949 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
!rowspan=2| ''Ek Teri Nishani''
| "Chupke Chupke Mast Nigaahen"
| Shardul Kwatra
| A Shah
| rowspan=2| solo
|-
| "Teri Kaafir Jawani Ko"
| Pandit Amarnath
| Sharshar Sailani
|-
! ''Karwat''
| "Baadal Ghir Aaye, Rimjhim Paani Barse"
| Hansraj Behl
| D. N. Madhok
| Geeta Dutt
|-
!rowspan=6| ''Lekh''
| "Kahin Bhi Aaj Muhabbat Nahin"
| rowspan=6| M. A. Krishan Dayal
| rowspan=4| Qamar Jalalabadi
| rowspan=2| solo
|-
| "O Baabu Aabad Rahega"
|-
| "Karle Kisise Pyaar, Jawani Do Din Ki"
| Mohammed Rafi
|-
| "Yeh Qafila Hai Pyaar Ka"
| Mukesh
|-
| "Kahin Hai Pyaar Ka"
| N/A
| rowspan=2| solo
|-
| "Kubwar Ji, Dhadak Dhadak Jiya Jaaye Re"
| Raghupat Rai
|-
! rowspan=1| ''Neki Aur Badi''
| "Raam Duhayi Hai"
| Roshan
| Kidar Sharma
| Rajkumari
|-
! rowspan=1| ''Parda''
| "Mere Pyare Sanam Ki Hai Pyari Gali"
| Khayyam
| Swami Ramanand
| rowspan=3| solo
|-
! rowspan=2| ''abcdefg''
| "Hai Mauj Mein Apne Begaane"
| rowspan=3| Hansraj Behl
| Arzoo Lucknawi
|-
| "Hamare Dil Lar Tera Ikhtiyar Hona Tha"
| Butaram Sharma
|-
!''Roomal''
| "Hum Sab Ke Sab Hoshiyar"
| Nazim Panipati, Aziz Khan
| Mohammed Rafi
|-
|}
== 1950s ==
=== 1950 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
!''[[Anmol Ratan]]''
| "Kaale Kaale Badalon Mein Paani"
| Vinod
| D. N. Madhok
| solo
|-
! Rowspan=2| ''Bahurani''
| "Yeh Kehdo Unse Jinhe Aashiq-e-Dilgir Kehte Hai"
| rowspan=2| Hansraj Behl
| rowspan=1| Butaram Sharma, Aziz Siddiqui, Shewan Rizvi, Bharat Vyas
| rowspan=2| Shamshad Begum
|-
| "Bas Itna Bata Do Jiye Ya Mare"
| Aziz Siddiqui
|-
! Rowspan=3| ''[[Bawre Nain]]''
| "Ghir Ghirke Aasman Par"
| rowspan=3| Roshan
| rowspan=3| Kidar Sharma
| rowspan=2| [[Rajkumari Dubey|Rajkumari]]
|-
| "Mere Roothe Hue Balma"
|-
| "Mohabbat Ke Maron Ka Haal"
| [[Mohammed Rafi]]
|-
! Rowspan=4| ''Bhagwan Shri Krishna''
| "Sundar Sundar Phool Kamal Ka"
| rowspan=4| Shankar Rao Vyas
| rowspan=4| Pandit Phani
| rowspan=10| solo
|-
| "Dol Rahi Kyun Uski Naiya"
|-
| "Kya Gaaye, Woh Kya Gaaye"
|-
| "Naina Mile Rasiya Se"
|-
! rowspan=4| ''Bhimsen''
| "Aayi Aayi Bahaar Karke Singhaar"
| rowspan=4| Avinash Vyas
| Bharat Vyas
|-
| "Koi Aaye Koi Jaaye"
| rowspan=3| B. P. Bharghav
|-
| "Mashalein Jalti Suna Rahi Hai"
|-
| "Piya Chupke Se Aake Bol Re"
|-
! ''Bhimshma Pratigya''
| "Dhal Gaya Asha Ka Sooraj"
| S. K. Pal
| M. L. Khanna
|-
! Rowspan=2| ''Bijli''
| "Taqdeer Bata, Kya Meri Khata"
| rowspan=2| Khemchand Prakash
| rowspan=2| Bharat Vyas
|-
| "Hum Toh Ho Gaye Badnaam Sawariya"
| Mukesh
|-
! Rowspan=3| ''Biwi''
| "Birah Ki Raat Mohse"
| rowspan=2| Aziz Khan
| rowspan=2| Nazim Panipati
| rowspan=1| solo
|-
| "Mausam Hai Namkeen Sawariya"
| Geeta Dutt
|-
| "Mere Mann Ke Aangan Chand Chamka"
| Khayyam
| N/A
| rowspan=8| solo
|-
!rowspan=2| ''Chor''
| "Jaate To Ho Par Yaad Rahe"
| rowspan=2| Govind Ram
| Chandrasekhar Pandey
|-
| "Barbaad Hue Par Aah Na Ki"
| Harish Bhardwaj
|-
! rowspan=5| ''Madhubala''
| "Ab Na Jaayegi Yeh"
| rowspan=5| Lachhiram Tomar
| rowspan=2| N/A
|-
| "Are O Denewale Tune Kaisi Zindagi Di Hai"
|-
| "Pyaar Bhi Dard Banega"
|rowspan=3| Rajendra Krishan
|-
| "Mujhe Maar Gayi O Balam"
|-
| "Poochho Maine Dil Se Apne"
|-
!rowspan=5| ''Muqaddar''
| "Aati Hai Humko Yaad Janwary Farwary"
| Bhola Shreshtha, Khemchand Prakash
| rowspan=2| Raj Sekhar
| rowspan=3| Kishore Kumar
|-
| "Balma Hai Diya Tujhko Dil"
| rowspan=3| Jimmy
|-
| "Ek Do Teen Chaar, Baghon Mein Aayi Bahaar"
|rowspan=2| Bharat Vyas
|-
| "Madhur Pyaar Ka Taar Kabhi Yeh Toote Na"
| Arun Kumar Mukherjee
|-
| "Jo Karna Hai Kar Lo Aaj"
| Bhola Shreshtha, Khemchand Prakash
| Raja Mehdi Ali Khan
| Kishore Kumar, Arun Kumar Mukherjee
|-
!''Nili''
| "Naacho Neel Akash Ke Taaro"
| S. Mohinder
| Surjeet Sethi
| solo
|-
! Rowspan=2| ''Sabak''
| "Dheere Dheere Haank Re Gaadi"
|rowspan=2| A. R. Qureshi
|rowspan=2| D. N. Madhok
| Surinder Kaur
|-
| "Dil Mein Shama Jale"
| solo
|-
! Rowspan=2| ''Sati Narmada''
| "Lajaaye Rahi Akhiyan Nigodi Re"
|rowspan=2| Khemchand Prakash
|rowspan=2| Neelkanth Tiwari
| rowspan=2| solo
|-
| "Beech Saba Mori Paayal Baaje"
|-
! Rowspan=3| ''Wafaa''
| "Gehri Gehri Nindiya Mein Soye Matwale"
| rowspan=2| Vinod
| D. N. Madhok
| Geeta Dutt
|-
| "Idhar Dekho Zara"
| Behzad Lakhnavi
| rowspan=2| solo
|-
| "Aayi Mehekti Raat Dulhaniya"
| Bulo C. Rani
|Hasrat Jaipuri
|-
|}
=== 1951 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! Rowspan=1| ''Bade Bhaiyya''
| "Sada Khush Rahe Tu Rula Denewale"
| rowspan=1| Prem Nath
| rowspan=1| M. L. Khanna
| solo
|-
! Rowspan=2| ''Daman''
| "Chale Hain Teer Nazar Ke"
| rowspan=2| K. Dutta
| rowspan=1| Anjum Jaipuri
| solo
|-
| "Yeh Ruki Ruki Hawayen"
| Rajendra Krishan
| Lata Mangeshkar
|-
! Rowspan=1| ''Dasavtaar''
| "Mori Gori Ke Laal Huye Gaal Re"
| rowspan=1| Avinash Vyas
| rowspan=1| Saraswati Kumar Deepak
| rowspan=1| solo
|-
! Rowspan=2| ''For Ladies Only''
| "Ashqon Ka Gar Hai Maut"
| rowspan=2| Vinod
| rowspan=1| Sharma
| rowspan=1| solo
|-
| "Mera Mann Jhoom Jhoom"
| M. S. Saharai
| Talat Mahmud
|-
!''Gumasta''
| "O Chale Jaaye Mohabbat Ka"
| K. Dutta
| Noor Lakhnavi
| solo
|-
! Rowspan=2| ''Gazab''
| "Tere Karan Sabko Chhoda"
| rowspan=2| Nisar Bazmi
| rowspan=2| A. Karim
| rowspan=1| H. Khan Mastana
|-
| "Nazar Milake Muskura Ke"
| solo
|-
! Rowspan=8| ''Imaan''
| "Bachpan Ka Zamana Yaad Hai"
| rowspan=8| Motiram
| rowspan=4| Pandit R. Priyadarshi
| rowspan=1| Talat Mahmud
|-
| "Chakma De Kar Haye Bedardi"
| rowspan=6| solo
|-
| "Doodh Ka Doodh Aur Paani Ka Paani"
|-
| "Saiyan Chhup Aap"
|-
| "O Zulmi Naina Roye Jaa Tu"
| rowspan=4| Hasrat Jaipuri
|-
| "Koi Aa Jaaye Paas Mere"
|-
| "Mera Jee Chahta Hai Ki"
|-
| "Tum Bade Woh Ho Mohabbat Ja Maza"
| Talat Mahmud
|-
! Rowspan=2| ''Ishwar Bhakti''
| "O Nirmohi"
| rowspan=2| Sonik–Girdhar
| rowspan=2| Narendra Sharma
| solo
|-
| "Koi Aanewala Hai"
| Sulochana Kadam
|-
! Rowspan=2| ''Jai Mahakali''
| "Aaja Balam Ji Saajan Ji"
| rowspan=2| Kumar
| rowspan=1| Firoz Jalandhari
| rowspan=2| solo
|-
| "Duniya Mein Basanewale"
| Ramesh Shastri
|-
! Rowspan=3| ''Jai Mahalaxmi''
| "Chhumak Chhumak Chhunk Nartan Karta" (version 1)
| rowspan=3| Avinash Vyas
| rowspan=3| B. P. Bharghav
| rowspan=3| solo
|-
| "Makhan Ke Churanewale"
|-
| "Holi Khele Re Kahan"
|-
! Rowspan=5| ''Jeevan Tara''
| "Hansna Hum Bhool Gaye"
| rowspan=2| Shankar Rao Vyas
| rowspan=2| G S Potdar
| solo
|-
| "Kya Bataye Kya Maza Iss Zindagi Mein"
| rowspan=2| G. M. Durrani
|-
| "O Chhup Chhup Ke Sapnon Mein"
| rowspan=3| Vasant Desai
| rowspan=3| Prem Dhawan
|-
| "O Mehlon Mein Rehnewale"
| Sulochana Kadam
|-
| "Jagmag Jagmag Deep Jale"
| solo
|-
! Rowspan=2| ''Johari''
| "Arre O Sanam Loote Hain Hum"
| rowspan=2| Pandit Harbanslal
| rowspan=2| Shola Kahamvi
| rowspan=1| solo
|-
| "Jab Lagi Chot Pe Chot"
| Mohammed Rafi
|-
! Rowspan=4| ''Kashmir''
| "Na Ro Taqdeer Ko Ae Dil"
| rowspan=4| Hansraj Behl
| rowspan=3| Sharshar Sailani
| rowspan=2| solo
|-
| "Hansi Chhen Lee, Dillagi Chheen Lee"
|-
| "Jawaani Ke Din Hain"
| Pramodini Desai
|-
| "Main Hoon Chhori Naye Fashion Ki"
| Baba G
| Devendra Mohan
|-
! Rowspan=2| ''Lachak''
| "Dil Ki Woh Chhodati Hai"
|rowspan=2| Motiram
|rowspan=1| Hasrat Jaipuri
| Mohammed Rafi
|-
| "Na Jaane Kiski Nazar Pad Gayi"
| P. L. Santoshi
| solo
|-
! Rowspan=5| ''Mukhda''
| "Tum Aji Dil Mein Bas Rahi Ho"
|rowspan=5| Vinod
|rowspan=5| Aziz Kashmiri
|rowspan=4| solo
|-
| "O O Jaanewale, Dil Laagi Ko Bujha"
|-
| "Mukhda Balam Ka Chanda Ko Sharmaye"
|-
| "Dil Gaya Ram Ji Seene Se"
|-
| "Jaa Teri Meri, Meri Teri"
| Mohammed Rafi
|-
! Rowspan=1| ''Murliwala''
| "Jaisi Karni Waisi Bharni"
| Sudhir Phadke
| Bharat Vyas
| Sudhir Phadke
|-
! Rowspan=2| ''Pyar Ki Baaten''
| "Unko Rupaye Mein Solah Aane"
|rowspan=2| Khayyam
|rowspan=2| Khawar Jama
| G. M. Durrani
|-
| "Humein Chhod Ke Na Jaana"
| solo
|-
! Rowspan=5| ''Ram Janma''
| "Ghar Ghar Ayodhya Mein"
| rowspan=5| Avinash Vyas
| rowspan=2| Neelkanth Tiwari
| Badrinath Vyas
|-
| "Pyari Pyari Re"
| rowspan=4| solo
|-
| "Hua Raam Ka Janma"
| rowspan=2| Saraswati Kumar Deepak
|-
| "Mann Ki Baat Kahi Na Jaaye"
|-
| "Jaise Rakhe Rahiye Raam"
| B. P. Bharghav
|-
! Rowspan=2| ''Saagar''
| "Kaun Sunega Mere Dil Ki Pukaar"
| rowspan=2| S. K. Pal
| rowspan=2| Narendra Sharma
| rowspan=2| solo
|-
| "Mann Beena Ke Taar Chhed Kar"
|-
! Rowspan=5| ''Sabz Bagh''
| "Apni Tasveer Se Kehdo"
| rowspan=3| Vinod
| rowspan=5| Aziz Kashmiri
| rowspan=2| Mohammed Rafi
|-
| "Jo Kuchh Hamein Kejna Hai"
|-
| "Qadam Qadam Par Beechhe Hai Kaante"
| rowspan=3| solo
|-
| "Na Karna Kisise Mohabbat"
|rowspan=2| Gulshan Soofi
|-
| "Yaad Teri Aayi Toh Main Chori Chori Royi Re"
|-
!rowspan=2|''Saudagar''
| "Dil Se Dil Ko Pyaar Hai"
| rowspan=2| Hanuman Prasad Triloki
| rowspan=2| Hasrat Jaipuri
| rowspan=2| G. M. Durrani
|-
| "Ab Toh Hamare Dil Ka Ishaara Badal Gaya"
|-
!rowspan=2| ''Shri Ganesh Janma''
| "Aaj More Aangna Mein"
|rowspan=2| Manna Dey, Khemchand Prakash
|rowspan=2| Bharat Vyas
|rowspan=2| solo
|-
| "Main Bandhi Prem Ki Dor"
|-
! Rowspan=4| ''Shri Vishnu Bhagwan''
| "Upkaar Karo Bhagwan"
|rowspan=4| Avinash Vyas
| Pandit Mukhram Sharma
|rowspan=4| solo
|-
| "Raja Mori Nagri Mein Dheere Dheere Aana"
|rowspan=2| Saraswati Kumar Deepak
|-
| "Jai Vishnu Bhagwan"
|-
| "Aayenge Aaj Mere Jeevan Ke Nath Re"
| Neelkanth Tiwari
|-
! Rowspan=5| ''Stage''
| "Dil Machalne Laga"
| rowspan=4| Sardar Malik
| rowspan=5| Sarshar Sailani
| rowspan=5| solo
|-
| "Jisko Na Lagi Ho Chot"
|-
| "Kisi Ke Ghar Mein Toh Ghee Ke Chirag Jalte Hain"
|-
| "Ummeedein Loot Gayi Apni"
|-
| "Jagmagati Diwali Ki Raat Aa Gayi"
| Husnlal Bhagatram
|-
|}
=== 1952 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! Rowspan=3| ''[[Aandhiyan (1952 film)|Aandhiyan]]''
| "Dard Bant Raha Hai"
| rowspan=3| Ali Akbar Khan
| rowspan=3| Narendra Sharma
| rowspan=2| solo
|-
| "Dil Ka Khazana Khol Diya"
|-
| "Woh Chand Nahin Hai, Dil Hai Kisi Deewane Ka"
| [[Hemant Kumar]]
|-
! Rowspan=2| ''[[Aladdin Aur Jadui Chirag]]''
| "Ho Sake Toh Dil Ke Badle Dil"
| rowspan=2| S. N. Tripathi
| rowspan=1| Pandit Chand
| Mohammed Rafi, Shamshad Begum, Chitragupt
|-
| "Sharma Ke Aye Zara Mast Ada"
| Anjum Jaipuri
| Shamshad Begum
|-
! Rowspan=3| ''Amar Shaheed''
| "Do Din Ki Khushi Dekhi"
| rowspan=3| Vinod
| rowspan=3| Aziz Kashmiri
| rowspan=3| solo
|-
| "Itni Baat Bataa De"
|-
| "Tera Mera Pyar"
|-
!''Anjaam''
| "Balaam Ho Toh Aisa"
| Madan Mohan
| Qamar Jalalabadi
| Shamshad Begum
|-
!''Badnam''
| "O Piya Re Ji Chalo"
| Basant Prakash
| Shailendra
| Mohammed Rafi
|-
! Rowspan=3| ''Bhakta Puran''
| "Toota Sitara Neel Gagan Se"
| rowspan=3| Chitragupt
| rowspan=1| Ramesh Gupta
| rowspan=3| solo
|-
| "Ek Din Chameli Kunj Mein"
| Gopal Singh Nepali
|-
| "Dwaare Aaj Baaje Badhaiyan"
| Ramesh Chandra Panday
|-
!''Goonj''
| "Pyaar Bhi Aata Hai Kabhi"
| Shardul Kwatra
| D. N. Madhok
| Talat Mahmud
|-
! Rowspan=10| ''Chham Chhama Chham''
| "Chal Ri Ameeran Jhak"
| rowspan=10| O. P. Nayyar
| rowspan=10| P. L. Santoshi
| rowspan=5| Kishore Kumar
|-
| "Jhoom Uthe Duniya"
|-
| "Pyar Bhare Dil Hai Mile Nadiya Kinare"
|-
| "Laddu Bhi Hai Pedda Bhi Hai"
|-
| "Zara Chupke Se Naina Mila"
|-
| "Kismat Ke Khel Dekho Dekho Mere Babu"
| Jagmohan
|-
| Ye Duniya Hai Bazar Babu"
| Shamshad Begum, Kishore Kumar
|-
| "Achha Wo Tum The Haay Zalim Tum The"
| rowspan=3| solo
|-
| "Yeh Zindagi Hai Jeene Ke Liye"
|-
| "Aa Pardesi Baalma More Aangna"
|-
! Rowspan=4| ''Devyani''
| "Baat Takat More Naina Haare"
| rowspan=4| S. Purshotham
| rowspan=4| M. L. Khanna
| rowspan=4| solo
|-
| "Madhur Madhur Sapnon Mein Aaj"
|-
| "Mere Mann Mein Umang"
|-
| "Prem Ki Mala Kahin Toot Na Jaaye"
|-
! Rowspan=3| ''[[Lal Kunwar]]''
| "Bachke Humse Bhala Sarkar Kahan Jaaoge"
|rowspan=3| S. D. Burman
|rowspan=3| Sahir Ludhianvi
| Geeta Dutt
|-
| "Dil Ka Bhed Jaan Lo"
| N/A
|-
| "Awaaz Deta Hai Solah Ka Din"
|-
! ''Maa''
| "Is Duniya Mein Humne Dekhe"
| S. K. Pal
| Bharat Vyas
| Afzal Hussain
|-
! rowspan=2| ''Maharani Jhansi''
| "Le Lo Veer Bahadur"
| rowspan=2| Lachhiram Tomar
| rowspan=2| Ratanlal Zamarud
| rowspan=2| solo
|-
| "Jhoom Jhoom Ke Ghatayen Aayi"
|-
! Rowspan=2| ''Mordhwaj''
| "Gupchup Un Sang Ho Gayi Akhiyan Chaar"
| rowspan=2| Narayan Dutt
| rowspan=2| Bharat Vyas
| rowspan=1| Mubarak Begum, Dileep Kumar Roy
|-
| "Mera Mann Hai Magan"
| H. Khan Mastana
|-
! Rowspan=2| ''[[Sangdil]]''
| "Dharti Se Door Gore Baadalon Ke Paar"
| rowspan=2| Sajjad Hussain
| rowspan=2| Rajendra Krishan
| Geeta Dutt
|-
| "Dard Bhari Kisi Ki Yaad"
| solo
|-
! Rowspan=2| ''[[Tamasha (1952 film)|Tamasha]]''
| "Thi Jinse Palbhar Ki Pehchan Bane Ab Man Ke Vo Mehman"
| rowspan=2| Manna Dey
| rowspan=2| Bharat Vyas
| rowspan=2| solo
|-
| "Koi Jal Jal Mare Koi Phansi Chadhe"
|-
! Rowspan=1| ''Usha Kiron''
| "Jaago Bhor Suhani Aayi"
|rowspan=1| Hanuman Prasad Triloki
|rowspan=1 |Kamil Rashid
| Geeta Dutt, Zohrabai Ambalewali, G. M. Durrani
|-
! rowspan=5| ''Veer Arjun''
| "Tere Dware Nand Dulare"
|rowspan=5| Avinash Vyas
|rowspan=3| Saraswati Kumar Deepak
|rowspan=4| solo
|-
| "Baaje Rumjhum Paayaliya"
|-
| "Sakhi Sapnon Mein Saajan Aaya"
|-
| "Karoon Gori Poojan Main Toh"
| rowspan=2| Pandit Indra Chandra
|-
| "More Ghungroo Baaje Jhan Jhanan"
| G. M. Durrani
|-
! rowspan=3| ''Vishwamitra''
| "Sajanwa Aan Milo"
|rowspan=3| B. Laxman
|rowspan=3| M. L. Khanna
|rowspan=3| solo
|-
| "Neel Kamal Par Dole Bhanwara"
|-
| "Man Mein Mere Jhoolo"
|-
! rowspan=2| ''Zamane Ki Hawa''
| "Waale Ki Pyaar Karen"
|rowspan=2| H. Khan Mastana
|rowspan=2| Wali Saheb
|rowspan=2| H. Khan Mastana
|-
| "Malaan Toh Aayi Bikaner Se"
|-
|}
=== 1953 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! ''Aabshar''
| "Tere Gham Ko Chhupana Hai"
| Mohammed D. Shafi
| Waheed Qureshi
| solo
|-
! Rowspan=8| ''Aag Ka Dariya''
| "Rut Barkha Ki Aayi Koyaliya Kuk"
| rowspan=8| Vinod
| rowspan=8| Aziz Kashmiri
| Sulochana Kadam
|-
| "Samajh Na Duniya Ko Ghar Khushi Ka"
| Lakshmi Roy
|-
| "Jaa Chali Ja O Ghata"
| rowspan=2| Mohammed Rafi
|-
| "Kehta Tha Zamana, Par Humne Na Maana"
|-
|-
| "Kat Jayegi Jawani Roye Ya Muskura Le"
| rowspan=4| solo
|-
| "Mujhko Maalum Nahi Tujhko Khabar Ho"
|-
| "Ram Kare Mohe Par Lag Jaye"
|-
| "Kehta Tha Zamana Magar (Sad)"
|-
! ''Alif Laila''<ref>{{cite web|url=https://m.hindigeetmala.net/movie/alif_laila_1953.htm|title=Alif Laila (1953) movie songs|accessdate=30 April 2022}}</ref>
| "Raatein Bheeg Jaayegi"
|| Shyam Sundar
|| Sahir Ludhianvi
|| solo
|-
! Rowspan=2| ''Anand Bhawan''
| "Tere Dil Jo Kehta Hai Kar Deewane"
| rowspan=2| Vasant Desai
|rowspan=2| Raja Mehdi Ali Khan
| G. M. Durrani
|-
| "Nanhe Munhe Raja Ki Salgirah Aayi Re"
| Shamshad Begum
|-
! Rowspan=4| ''Armaan''
| "Jab Duniya Badle Hain Phir Kyun Na Badle Hum"
| rowspan=4| S. D. Burman
| rowspan=4| Sahir Ludhianvi
| rowspan=3| solo
|-
| "Main Paankh Lagaake Ud Jaaoon"
|-
| "Chaahe Kitna Mujhe Tum Bulaao Ji"
|-
| "Bol Na Bol Ae Jaanewale"
| Talat Mahmud
|-
! Rowspan=4| ''Bahadur''
| "Aa Aa Badarwa, Aa Dheere Aa"
| rowspan=4| S. Mohinder
| rowspan=1| Rajendra Krishan
| rowspan=1| Santram
|-
| "Meethi Meethi Khushboo Thi"
| Firoz Jalandhari
| rowspan=3| solo
|-
| "O Bhangji, Rola Rola Aao"
| Sarshar Sailani
|-
| "Shaayad Ki Bahaar Aayi"
| Kunwar Mahendra Singh Bedi
|-
! Rowspan=1| ''Bhagyawan''
| "Naari Nahin Hai Sapna"
| rowspan=1| Avinash Vyas
| rowspan=1| Neelkanth Tiwari
| rowspan=1| solo
|-
! Rowspan=7| ''Chacha Chaudhary''
| "Koi Hai, Koi Hai, Jawani Ko Jagao Na"
| rowspan=7| Madan Mohan
| rowspan=7| Rajendra Krishan
| rowspan=2| Mohammed Rafi
|-
| "Hansna Gana Mauj Manana Duniya Se"
|-
| "Chali Radha Piya Dhundhan Ko"
| rowspan=5| solo
|-
| "Mere Piya, Chhede Jiya"
|-
| "Mori Chham Chham, O Chham Baje Payal"
|-
| "Ja Dekhi Teri Preet Re"
|-
| "Bin Barkha Sawan Sukha"
|-
! Rowspan=1| ''Char Chand''
| "Hai Yeh Wohi Aasmaan" (female)
| rowspan=1| Shaukat Dehlvi Nashad
| rowspan=1| A. Karim
| rowspan=1| solo
|-
!''Daera''
| "Kaho Dhola Utaaren Kahaar Kahaar"
| Jamal Sen
| Majrooh Sultanpuri
| solo
|-
!''Dard-e-Dil''
| "Pyaar Ho Gaya Mujhe"
| R. C. Boral
| Hasrat Jaipuri
| solo
|-
! ''Dara''
| "Naach Se Apne Jaadu Jagaati Hoon Main"
| Mohanmed D. Shafi
| Arshi Ajmeri
| Bande Hasan
|-
!''Dharm Patni''
| "Laagi Tumse Lagan, Mere Bhole Sajan"
| Jamal Sen
| Bharat Vyas
| solo
|-
! Rowspan=8| ''Ek Do Teen''
| "Tumhe Chupke Se Dil Mein Liya Jo Basa"
| rowspan=8| Vinod
| rowspan=8| Aziz Kashmiri
| rowspan=2| Mohammed Rafi
|-
| "Piya Jo Bulaaye Toh Kahun Main Kya Ji"
|-
| "Chal Meri Gadiye Tu Chhuk Chhuk Nikal"
| Mohammed Rafi, Minal Wagh
|-
| "Bela Bambina Oye Bela Bambina"
| rowspan=3| solo
|-
| "Lo Phir Chand Nikal Aaya"
|-
| "Ek Do Teen Ho To Karo Eitbar"
|-
| "Mile Nain Se Nain Toh"
| Minal Wagh, Pramodini Desai
|-
| "Thumak Thumak Chali Kamini"
| G. M. Durrani
|-
! Rowspan=2| ''Firdaus''
| "Aaja Ke Dil Tujhko Ro Ro Pukaare"
| rowspan=2| Robin Chatterjee
| rowspan=2| D. N. Madhok
| rowspan=2| solo
|-
| "Kisi Bewafa Ke Sataye Huye Hain"
|-
! rowspan=4|''[[Footpath (1953 film)|Footpath]]''
| "Suhana Hai Yeh Mausam"
| rowspan=4|[[Mohammed Zahur Khayyam|Khayyam]]
| rowspan=3|Majrooh Sultanpuri
| rowspan=4| solo
|-
| "So Ja Mere Pyare So Ja"
|-
| "Piya Aaja Re"
|-
| "Kaisa Jadu Dala Re"
| Ali Sardar Jaffri
|-
! Rowspan=1| ''Gauhar''
| "Haule Haule Dheere Dheere, Dil Mera Leke Chale"
| rowspan=1| Ghulam Mohammad
| rowspan=1| Shakeel Badayuni
| rowspan=1| Mohammed Rafi
|-
! Rowspan=4| ''Gharbaar''
| "Aaja Mere Piya, Jhukti Hain Duniyawale"
| rowspan=4| Vasant Prabhu
| rowspan=3| Indeevar
| rowspan=2| solo
|-
| "Chhup Chhupke Aaya Koi Mere Khwab Mein"
|-
| "Udhar Hain Husn Ka Jalwa"
| Talat Mahmud
|-
| "Khet Pakae Ud Jaa"
| D. N. Madhok
| Surendra
|-
!''[[Gul Sanobar]]''
| "Suno Ji Suno Ji Jaani"
| Khayyam
| Nazim Panipati
| solo
|-
! Rowspan=2| ''Hazaar Raaten''
| "Teri Yaad Aa Rahi Hai"
| rowspan=2| Ghulam Mohammad
| rowspan=2| Shakeel Badayuni
| Mohammed Rafi
|-
| "Meri Zindagi Pe Na Muskura"
| solo
|-
! rowspan=1| ''Humsafar''
| "Kisi Ne Nazar Se Nazar Jab Mila Di"
| Rowspan=1| Ali Akbar Khan
| rowspan=1| Sahir Ludhianvi
| rowspan=1| Talat Mahmud
|-
! rowspan=1| ''Husn Ka Chor''
| "Ho Gaya Tere Majnu Ko Ishq Ka Bukhaar"
| Rowspan=1| Bulo C. Rani
| rowspan=1| Raja Mehdi Ali Khan
| rowspan=1| Mohammed Rafi
|-
! Rowspan=3| ''Indrasen''
| "Na Socha Tha Kabhi Humne Ki"
| rowspan=3| Shankar Rao Vyas
| rowspan=2| Ramesh Gupta
| rowspan=3| solo
|-
| "Jhan Jhan Jhan Jhan Baaje More Mann Ka Sitaar"
|-
| "Mori Angiya Pe Chhayi Bahaar Balma"
| Moti B. A.
|-
! Rowspan=4| ''[[Jeewan Jyoti (1953 film)|Jeevan Jyoti]]''
| "Balma Ne Man Har Leena"
| rowspan=4| S. D. Burman
| rowspan=4| Sahir Ludhianvi
| rowspan=3| solo
|-
| "Chandni Ki Paalki Me Baithkar"
|-
| "Sakhi Ri Darshan Pyaase Nain"
|-
| "Chhayi Kaari Badariya Bairaniya"
| Lata Mangeshkar
|-
! Rowspan=3| ''Laila Majnu''
| "Yaad Teri Zindagi Ka Saz Ban Kar Reh Gayi"
| Ghulam Mohammad
| rowspan=3| Shakeel Badayuni
| solo
|-
| "Dekh Li Aye Ishq Teri Meherbani"
| rowspan=2| Sardar Malik
| rowspan=2| Talat Mahmud
|-
| "Baharo Ki Duniya Pukare Tu Aaja"
|-
! rowspan=2| ''Madmust''
| "Beech Bajariya Paaon Pakad Kar Bola"
| Rowspan=2| V. Balasara
| rowspan=2| Madhukar Rajasthani
| rowspan=2| solo
|-
| "Chaal Anokhi Dhang Niraale"
|-
! rowspan=1| ''Mahatma''
| "Kaun Yeh Loot Ke Hans Diya"
| Rowspan=1| Vasant Pawar
| rowspan=1| Ram Bhadavkar, Ehsan Rizvi
| rowspan=1| Prakash
|-
!rowspan=2| ''Naina''
| "Bhool Gayi Sudh Budh"
|rowspan=2| Manna Dey
|rowspan=2| Uddhav Kumar
| Ashima Banerjee
|-
| "Meri Zindagi Ek Aisa Diya"
| solo
|-
! Rowspan=8| ''[[Naag Panchami]]''
| "Aarti Karo Hari Har Ki"
| rowspan=8| Chitragupt
| rowspan=8| Gopal Singh Nepali
| rowspan=6| solo
|-
| "O Naag Kahi Jaa Basiyo Re"
|-
| "Meri Chunariya Udaaye Liye Jaaye"
|-
| "Mere Angana Mein Aaye Jabse Sajan"
|-
| "Dharti Se Gagan Tak Dhundundu Re"
|-
| "Mera Janam Kisi Ko Rulaaye Na"
|-
| "Dharti Ka Nahi Nari Ka Sansar"
| rowspan=2| Mohammed Rafi
|-
| "Na Jaane Kaisi Buri Ghadi Mein"
|-
! Rowspan=3| ''Naulakha Haar''
| "Aana Chaahun, Aa Na Sakoon Main"
|rowspan=3| Bhola Shreshtha
|rowspan=3| Bharat Vyas
| Arvind Kumar
|-
| "Jaise Ho Goonjta Surila Sur" (version 1)
| rowspan=2| N/A
|-
| "Jaise Hi Goonjta Surila Sur" (version 2)
|-
!''Nav Durga''
| "Dekho Ri SKhi Rang Bhari Holi Aayi"
| S. N. Tripathi
| Ramesh Chandra Panday
| Laxmi Bai
|-
! Rowspan=6| ''Paapi''
| "Meri Zindagi Hai Tu Mujhse Teri Just Ju"
| rowspan=6| S. Mohinder
| Surjeet Sethi
| Mohammed Rafi
|-
| "Ae Jazbaye Mohabbat Itna Asar Dikha De"
| rowspan=2| Hasrat Jaipuri
| rowspan=5| solo
|-
| "Aa Jane Bahaar Aa Ja"
|-
| "Na Pehlu Me Dil Hai Na Muh Me Juban Hai"
| Butaram Sharma
|-
| "Kaun Kahe Unse Jaake Huzur"
| Sarshar Sailani
|-
| Abhi Abhi Bahaar Thi"
| Raja Mehdi Ali Khan
|-
! Rowspan=3| ''[[Parineeta (1953 film)|Parineeta]]''
| "Gore Gore Haathon Mein Mehndi Rachake"
| rowspan=2| Arun Mukherjee
| rowspan=3| Bharat Vyas
| rowspan=2| solo
|-
| "Tum Yaad Aa Rahe"
|-
| "Aye Baandi Tum Begum Bano"
| Manna Dey
| Kishore Kumar
|-
! Rowspan=5|''Pehli Shaadi''<ref>{{Cite web|url=https://open.spotify.com/album/6Ycxr5JfNUbIqkvknUeNhz|title=Pahli Shadi (Original Motion Picture Soundtrack)|date=December 31, 1953|via=open.spotify.com}}</ref>
| "Ae Dard-E-Mohabbat Rok Unhen"
| rowspan=5| Robin Chatterjee
| rowspan=5|
| Rowspan=2| solo
|-
| "Khuli Aankh Jab Tere Pyar Mein"
|-
| "Door Sajan Ka Gaon
| Meena Kapoor, Mohantara Talpade
|-
| "Raat Chandni Saath Tumhara"
| Talat Mahmood
|-
| "Tadap Ke Kah Raha Hai Dil"
| Hemant Kumar
|-
!''Rail Ka Dibba''
| "Bhagwan Teri Duniya Mein Insaan Nahi Hai"
| Ghulam Mohammad
| Shakeel Badayuni
| solo
|-
! Rowspan=6| ''Raj Mahal''
| "Ada-O-Naaz Ko Zaalim Tere Shamsheer Kehte Hai"
| rowspan=1| G. P. Kapoor
| rowspan=5| Munshi Dil
| Shamshad Begum
|-
| "Chhayi Ghata Din Aayi Bahaar Ke"
| rowspan=4| Govind Ram
| rowspan=2| solo
|-
| "Kuchh Jaan Na Thi, Pehchaan Na Thi"
|-
| "Do Desh Dulaare Veeron Ka"
| Savitri
|-
| "In Shokh Haseenon Se Kabhi Dil Na Lagaana"
| Shamshad Begum
|-
| "Idhar Aao Ik Baar Phir Pyaar Kar Lein"
| G. P. Kapoor
| Nandini Mahendra
| Madan Mahendra
|-
! Rowspan=2| ''[[Raj Ratan]]''
| "Mere Dil Mein Aaj Machi Hulchul Re"
| rowspan=2| Ninu Majundar
| rowspan=2| Bharat Vyas
| rowspan=2| solo
|-
| "Sapnon Ki Nagariya Hai"
|-
! Rowspan=8| ''Rangila''
| "Dheere Dheere Sang Mera Gaane Laga"
| rowspan=8| Jamal Sen
| rowspan=5| S. H. Bihari
| rowspan=7| Mohammed Rafi
|-
| "Dil Aaj Nera Gaane Lagaa"
|-
| "Dil Mein Basa Le"
|-
| "Matwale Nain Kaahe Hum Par Jaadu Daale"
|-
| "Shubh Din Aaye"
|-
| "Diya Jale Chamke Taara"
| rowspan=2| Ehsan Rizvi
|-
| "Laage Karejwa Teer Sakhi"
|-
| "Mehmaan Ban Kar Aaye"
| S. H. Bihari
| solo
|-
! Rowspan=2| ''Shahenshah''
| "Aayi Bahaaren Leke Raaten Pyaar Ki"
|rowspan=2| S. D. Burman
|rowspan=2| Sahir Ludhianvi
|rowspan=2| solo
|-
| "Koi Raag Chhed, Dabi Aag Chhed"
|-
! Rowspan=3| ''Shamsheer''
| "Dheere Dheere Aana Piya Chal Ke"
| rowspan=1| Anupam Ghatak
| rowspan=1| Nazish Sikandarpuri
| rowspan=1| solo
|-
| "Gori Tere Liye Sabka Jiyara Dole"
| rowspan=2| Arun Kumar Mukherjee
| rowspan=2| Vrajendra Gaur
| Kishore Kumar
|-
| "Jawano Ho Jaao Taiyar"
| Hemant Kumar, Jagmohan Bakshi
|-
!''[[Shikast]]''
| "Chamke Bijuria"
| Shankar–Jaikishan
| Hasrat Jaipuri
| solo
|-
! Rowspan=6| ''Shuk Rambha''
| "Deep Jalaao Anagna Laakh Laakh"
| rowspan=6| Manna Dey
| rowspan=6| Bharat Vyas
| rowspan=5| solo
|-
| "Jaag Re Jogi, Jaag Re Samadhi"
|-
| "Jyoti Jagaao Ri"
|-
| "Kahaan Hai Tu"
|-
| "Na Na Jogi Tu Akele Na Jaa"
|-
| "O Mere Maai, De De Bidaai"
| Master Gopal
|-
! Rowspan=2| ''Suhaag Sindoor''
| "Main Toh Chali Re Piya Ke Des"
| rowspan=1| Sailesh Mukherjee
| rowspan=1| Suresh Tripathi
| rowspan=1| solo
|-
| "Chupke Se Ho Gaya Pyaar"
| Suresh Kumar
| Harish Bhardwaj
| Sailesh Mukherjee
|-
!''[[Surang]]''
| "Mast Bahaar Hai, Pyar Hi Pyar Hai"
| Shivram Krishnan
| Shewan Rizvi
| solo
|-
! Rowspan=1| ''Teen Batti Chaar Raasta''
| "Bengali Sindhi Gujarati Marathi Punjabi Song"
| Shivram Krishnan, Avinash Vyas, Vasant Desai, Kanu Ghosh
| P. L. Santoshi, Kanu Ghosh, Ram Punjwani
| Geeta Dutt, Lata Mangeshkar, Zohrabai Ambalewali, S. Balbir
|-
! Rowspan=8| ''[[Thokar]]''
| "Ae Gham-e-Dil Kya Karoon" (duet)
| rowspan=8| Sardar Malik
| rowspan=2| Majaz Lucknavi
| Talat Mahmud
|-
| "Ae Gham-e-Dil Kya Karoon" (female)
| rowspan=7| solo
|-
| "Jhilmil Sitare Chanda Ke Dware"
| Uddhav Kumar
|-
| "Hawa Gungunaye Fizaa Muskuraye"
| Prem Dhawan
|-
| "Ye Kaisi Raat Aayi Hai"
| rowspan=2| Harsh Tandon
|-
| "Kuch Tum Jo Kaho Humse"
|-
| "Mauj Ki Aur Na Toofan Ki Khabar"
| Shor Niyazi
|-
| "Kajri Rain Kate Na Un Bin"
| Kavita
|-
|}
=== 1954 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
!rowspan=3| ''[[Adhikar (1954 film)|Adhikar]]''
| "Dil Mein Hamare Kaun Samaaya"
|rowspan=3| Avinash Vyas
|rowspan=2| Raja Mehdi Ali Khan
|rowspan=1| Kishore Kumar
|-
| "Zindagi Haseen Hai"
| rowspan=2| solo
|-
| "Degree Lekar Baithe Hai Sab"
| Prem Dhawan
|-
! Rowspan=3| ''Alibaba and 40 Thieves''
| "Sharma Ke Laja Ke"
|rowspan=3| S. N. Tripathi, Chitragupt
|rowspan=3| Raja Mehdi Ali Khan
| Rowspan=2| solo
|-
| "Dekho Ji Chand Nikla"
|-
| "Ae Saba Unse Keh Zara"
| Mohammed Rafi
|-
! rowspan=2| ''[[Amar (1954 film)|Amar]]''<ref>{{cite web|url=https://m.hindigeetmala.net/movie/amar.htm|title=Amar (1957) movie songs|accessdate=30 April 2022}}</ref>
| "Radha Ke Pyare Krishna Kanhai"
| rowspan=2| Naushad
| rowspan=2| Shakeel Badayuni
| rowspan=2| solo
|-
| "Ek Baat Kahun Mere Piya"
|-
! rowspan=4| ''Amar Kirtan''
| "Hari Om Tat Sat" (version 2)
| rowspan=4| S. D. Batish
| rowspan=4| Wali Saheb
|rowspan=2| S. D. Batish
|-
| "Jaat Paat Aur Oonch Neech Ko"
|-
| "Jin Dhyayo Shyam, Tin Paayo Shyam"
| rowspan=2| solo
|-
| "Thaare Rail Chalu Re Sanwariya"
|-
! rowspan=4| ''Ameer''
| "Tumhe Yaad Hoga Baag-e-Mohabbat"
|rowspan=4| Lachhiram Tomar
|rowspan=1| P. L. Santoshi
|rowspan=3| solo
|-
| "Subah Ki Angdaai Hoon Main"
| rowspan=2| Asad Bhopali
|-
| "Pyaar Karo, Pyaar Badi Cheez Hai"
|-
| "Bol Saamne Aake"
| Uddhav Kumar
| S. Balbir
|-
!''[[Angarey (1954 film)|Angarey]]''
| "Pyaar Bulaye Tohe"
| S. D. Burman
| Sahir Ludhianvi
| solo
|-
! Rowspan=3| ''Aulad''
| "Mann Tinak Tinak Naache"
| rowspan=3| Sardar Malik
| rowspan=3| Prem Dhawan
| rowspan=3| solo
|-
| "Gayi Gham Ki Raat"
|-
| "Chanda Se Pyaare, Aankh Ke Taare"
|-
! rowspan=3|''Aurat Teri Yehi Kahani''
| "Raat Guzarti Jaaye, Ajahun Na Aaye"
|rowspan=3| Bulo C. Rani
| D. N. Madhok
|rowspan=3| solo
|-
| "Mukurati Ghata, Gungunati Hawa"
| Saraswati Kumar Deepak
|-
| "Diya Tumne Naiya Ko KaisaSahara"
| Pandit Phani
|-
!rowspan=3| ''Baadbaan''
| "Dekho Chanchal Hai Mera Jiya"
| rowspan=3| Timir Baran
|rowspan=2| S. K. Pal, Indeevar
| rowspan=2| solo
|-
| "Thukra Ke Teri Duniya Ko"
|-
| "Jai Deva Ho, Hum Pe Rakho Prem Ki Najariya"
| S. K. Pal, Uddhav Kumar
| Manna Dey
|-
! Rowspan=3| ''Barati''
| "Teri Nazron Ne Humko Chheda Hai"
|rowspan=3| Roshan
| Raja Mehdi Ali Khan
| C. Ramchandra
|-
| "Naach Le Baawariya"
| D. N. Madhok
| S. Balbir
|-
| "Kis Naam Se Pukaarun"
| Tanvir Naqvi
| solo
|-
! Rowspan=1| ''Bazooband''
| "Bina Dosh Seeta Maat Ko"
| Mohammed D. Shafi
| Prem Dhawan
| Hridaynath Mangeshkar
|-
! Rowspan=6| ''[[Boot Polish (1954 film)|Boot Polish]]''
| "Nanhe Munhe Bachche Teri"
| rowspan=6| Shankar–Jaikishan
| rowspan=4| Shailendra
| rowspan=2| Mohammed Rafi
|-
| "Tumhare Hain Tumse Daya Mangte Hain"
|-
| "Thahar Jara O Janewale"
| Manna Dey, Madhubala Zaveri
|-
| "Chali Kaunse Desh Gujariya Tu"
| Talat Mahmud
|-
| "Sari Duniya Hai Mujhpe Deewani"
| Hasrat Jaipuri
| solo
|-
| "Raat Gayi O Raat Gayi"
| Saraswati Kumar Deepak
| Manna Dey
|-
! Rowspan=8| ''Chakradhari''
| "Baadal Ki Palki Pe Hoke Sawaar"
| rowspan=8| Avinash Vyas
| rowspan=8| Kavi Pradeep
|rowspan=2| Hemant Kumar
|-
| "Chal Re Cahl Re, Chaak Mere"
|-
| "Kya Kuchh Bhi Nahin Bhaati"
| rowspan=4| solo
|-
| "Meri Choli Seena Sambhal Ke"
|-
| "Rajaji Mere Saiyan Ko Karo Jurmana"
|-
| "Tum Prabhu Bade Dil Ke Kathor Nikle"
|-
| "O Meri Saas Ke Ladke"
| Mohammed Rafi
|-
| "Vaah Re Dayalu, Vaah Vaah Dayalu"
| Mohammed Rafi, Kavi Pradeep
|-
! Rowspan=3| ''Chandni Chowk''
| "Har Baat Poochhiye Yeh Haqeeqat"
| rowspan=3| Roshan
| rowspan=3| Majrooh Sultanpuri
| Shamshad Begum, Lata Mangeshkar
|-
| "Tera Dil Kahan Hai"
| rowspan=2| solo
|-
| "Aijam Ji Jitne Bhi Gham Hai"
|-
! ''Chhora Chhori''
| "Jor Garam Babu, Malayam Mazedaar"
| Roshan
| Kidar Sharma
| Seeta Agarwal
|-
!''Chor Bazaar''
| "Taaron Ki Palki Mein Aayi Jawaani"
| Sardar Malik
| Shakeel Badayuni
| solo
|-
! rowspan=3| ''Dak Babu''
| "Ae Dil Ankhon Se Pee Le Ansoo"
| rowspan=3| Dhaniram
| rowspan=2| Pandit Chand
| solo
|-
| "Dil Ki Duniya Jagmagati"
| Talat Mahmud
|-
| "Sapne Toot Gaye"
| Prem Dhawan
| solo
|-
! rowspan=2| ''Daku Ki Ladki''
| "Sataa Le Humein Aasman"
| rowspan=2| Hemant Kumar
| Kaif Irfani
| rowspan=2| solo
|-
| "Gulon Ko Khilaoon, Baharon Se Kheloon"
| Indeevar
|-
! Rowspan=8| ''Danka''
| "Dekho Dekho Ji Dekho Kahan Chali Ithlaati"
|rowspan=8| Aziz Khan
|rowspan=6| Jan Nisar Akhtar
| Shamshad Begum
|-
| "Qismat Hai Mujhse Khafa"
|rowspan=6| solo
|-
| "Raat Jaagi, Jaaga Hai Pyaar"
|-
| "Tu Laakh Kiye Jaa Sitam"
|-
| "Tum Meri Zindagi Mein Ek Chand Banke Aana"
|-
| "Yeh Masti Ka Aalam, Umango Ka Mausam"
|-
| "Raan Duhaai Hai"
|rowspan=2| Arshi Ajmeri
|-
| "Shaamon Sehar Hai Safar Hi Safar"
| Manna Dey
|-
! Rowspan=5| ''[[Dhobi Doctor]]''
| "Aansoo Piye Teri"
| rowspan=5| Khayyam
| Majrooh Sultanpuri, Ali Sardar Jafri
| rowspan=5| solo
|-
| "Aaja Badli Ke Sang"
| rowspan=4| Majrooh Sultanpuri
|-
| "Pihu Pihu Bole Papihara"
|-
| "Jhilmil Tare Neel Gagan"
|-
| "Taron Se Ankhiyan Milaun"
|-
! Rowspan=5| ''Dhoop Chhaon''
| "Dekho Rakhi Ka Aaya Tyohar"
| rowspan=5| Aziz Khan
| M. L. Khanna
|Rowspan=3| Mohammed Rafi
|-
| "Jhuk Ke Zameen, Choom Raha Aasmaan"
| Jan Nisar Akhtar
|-
| "Naache Naache Yeh Mann Mora"
|rowspan=2| Arshi Ajmeri
|-
| "Pyaare Pyaare Nainon Se Laage Jab Nainwa"
| rowspan=2| solo
|-
| "Sitare Hanse Jab Kanwal Nuskuraye"
| Khawar Jama
|-
! Rowspan=7| ''Durga Puja''
| "Yeh Gajra Le Lo"
|rowspan=7| S. N. Tripathi
|rowspan=2| Saraswati Kumar Deepak
| Master Gopal
|-
| "Jai He Durga Mata"
| Mohammed Rafi
|-
| "Piya Tumse Hua Pyaar"
|rowspan=2| B D Mishra
| rowspan=4| solo
|-
| "Maiya He Tere Bina"
|-
| "Mera Ho Balidaan"
| rowspan=3| Bharat Vyas
|-
| "Gali Gali Mein Phirun"
|-
| "Mera Mann Hai Magan"
| Mohammed Rafi
|-
! Rowspan=4| ''Ehsan''
| "Mere Bas Howe Suhaag Ki Rekha"
|rowspan=4| Madan Mohan
|rowspan=4| D. N. Madhok
|rowspan=4| solo
|-
| "Mera Banka Balamwa Lakhon Mein Ek"
|-
| "Ek Baar Keh De Sajan"
|-
| "Bairi Hai Bedard Zamana"
|-
!''Guzaara''
| "Jhoothi Hai Kahani Teri"
| Ghulam Mohammad
| Munir Lakhnavi
| solo
|-
!rowspan=9| ''Halla Gulla''
| "Yun Na Chhedo Balam"
|rowspan=9| Nisar Bazmi
|rowspan=9| Saba Afghani
| rowspan=9| Mohammed Rafi
|-
| "Teri Bhi Chup Aur Meri Bhi"
|-
| "O Dil Pukaare Aana Tadpana"
|-
| "Nainon Ke Teer Jidhar Toot Pade"
|-
| "Main Hoon Baanka Chhabila Jawaan Re"
|-
| "Jaane Kya Baat Hui Nain Jhuke"
|-
| "Honewali Hoke Rahegi Gaaon Ek Tarana"
|-
| "Dil Dhadka Main Fadka"
|-
| "Chalti Ka Naam Gadi"
|-
!rowspan=4| ''Hamlet''
| "Sitamgar Ka Maza Paaya"
|rowspan=4| Ramesh Naidu
|rowspan=4| Hasrat Jaipuri
|rowspan=4| solo
|-
| "Chaahe Sataye Woh, Chaahe Rulaye"
|-
| "Ankhon Mein Pyaar Mere"
|-
| "Aaja O Mere Pyaar"
|-
! Rowspan=5| ''Ilzam''
| "Sun Mere Rasiya Balam"
|Rowspan=5| Madan Mohan
|Rowspan=5| Rajendra Krishan
|Rowspan=2| Kishore Kumar
|-
| "ABC ABC Meri Sapnon Mein Chori Chori"
|-
| "Kehti Hai Yeh Thandi Hawa"
|Rowspan=3| solo
|-
| "Duniya Mein Aake Jisne Dekha Na Pyaar Maa Ka"
|-
| "Dekhun Jab Tak Teri Raah"
|-
! Rowspan=3| ''[[Jagriti]]''
| "[[De Dee Hame Azaadi]]"
| rowspan=3| Hemant Kumar
| rowspan=3| Kavi Pradeep
| rowspan=3| solo
|-
| "Chalo Chale Maa" (happy)
|-
| "Chalo Chale Maa" (sad)
|-
! rowspan=7| ''Kalakar''
| "Ek Matwali Do Nainon Se"
|rowspan=7| Vasant Pawar, Ramchandra Vadhavkar
|rowspan=2| K. Razdan
|rowspan=7| solo
|-
| "Mere Gham Ki Unko Khabar Kyun Nahi"
|-
| "Haye Re Meri Angdayi"
|rowspan=5| Sarshar Sailani
|-
| "Hum Ab Chhod Ke Gori"
|-
| "Kisi Ki Nazar Ka Jo Ghayal Nahin Hai"
|-
| "Meri Paayal Ki Jhankaar Kare Lalkaar"
|-
| "Saiyan Sapne Mein Mile"
|-
! Rowspan=2| ''Kasturi''
| "Murliwale Se Laage Nain"
| rowspan=2| Jamal Sen
| rowspan=2| Vrajendra Gaur
| rowspan=2| solo
|-
| "Mujhko Apna Banaya Door Door Se"
|-
! Rowspan=1| ''Kavi''
| "Chali Shehar Ki Naar"
| C. Ramchandra
| Rajendra Krishan
| C. Ramchandra
|-
!''Khaiber''
| "Bhari Mehfil Mein"
| Hansraj Behl
| Asad Bhopali
| solo
|-
!rowspan=4| ''Khushboo''
| "Ankhon Mein Ankh Daal Ke Dekha To"
|rowspan=4| Shankarlal Pardesi
|rowspan=4| Gopal Singh Nepali
| solo
|-
| "Udhar Chand Nikla"
| G. M. Durrani
|-
| "Dhoondhla Dhoondhla Aasmaan Hai"
| Shankar Dasgupta
|-
| "Aurat Mari Toh Mard Ko"
| Mala
|-
! Rowspan=4| ''Laadla''
| "Zindagi Do Din Ki Hai Hans Le"
| rowspan=4| Vinod
| rowspan=2| Raja Mehdi Ali Khan
| solo
|-
| "Bura Hua Jo Unse"
| Talat Mahmud, Mohammed Rafi, Shamshad Begum
|-
| "Pyaar Nahin Chhupta Chhupane Se"
| Kaif Irfani
| Talat Mahmud
|-
| "Haye Haye Re Zamana"
| Dev Krishna
| solo
|-
! Rowspan=5| ''Laila''
| "Dilwalon Ki Jeet Hui"
|Rowspan=5| A. R. Qureshi
| Mulk Raj Bhakri
|Rowspan=4| solo
|-
| "Hasraten Barbaad Hai"
| Rowspan=2| Munshi Dil
|-
| "Sunte Jaao Meri Khamosh Nigaahon Ka Salaam"
|-
| "Nau Do Gyarah"
| Shewan Rizvi
|-
| "Main Naukar Hoon Chaukidar Ka"
| Bharat Vyas
| Shamshad Begum
|-
! Rowspan=3| ''Lal Pari''
| "Meri Tabahi Pe Tu Bhi Chup Hai" (version 1)
|Rowspan=3| Hansraj Behl
|Rowspan=3| Asad Bhopali
|Rowspan=2| solo
|-
| "Meri Tabahi Pe Tu Bhi Chup Hai" (version 2)
|-
| "O Dilwalo Dil Ko Sambhalo"
| S. Balbir
|-
!rowspan=4| ''[[Majboori]]''
| "Aankhen Ro Ro Har Gayi"
|rowspan=4| Robin Chatterjee
|rowspan=4| D. N. Madhok
|rowspan=3| solo
|-
| "Bhanware Ne Kali Se Kuchh Bol Diya"
|-
| "Yeh Behta Huwa Paani"
|-
| "Teri Poojan Ko Bhagwan Mana"
| Hamida Banu
|-
!rowspan=4| ''Mahatma Kabir''
| "Aur Kab Tak Aansu"
|rowspan=4| Anil Biswas
| Narendra Sharma
|rowspan=3| solo
|-
| "Ke Sang Kheloon Pag Pe"
| Ehsan Rizvi
|-
| "More Mandir Ablaun Nahin"
|rowspan=2| Chandrasekhar Pandey
|-
| "Kaise Kahoon Apne Mann Ki"
| Amirbai Karnataki
|-
! Rowspan=6| ''Malka-e-Alam Noor Jehan''
| "Aahon Mein Jalta Jaa"
| rowspan=6| Avinash Vyas
| rowspan=3| Keshav Trivedi
| rowspan=6| solo
|-
| "Sun Bhi Le Parwardigar"
|-
| "Woh Zaalim Hai Jo Roothenge"
|-
| "Chhup Chhupke Koi Mere"
| Ramesh Gupta
|-
| "Jo Dil Hi Dil Mein Rote Hain"
| rowspan=2| P. L. Santoshi
|-
| "Tumko Mile Vaah Jo Tumne Maanga"
|-
! Rowspan=3| ''Mangu''
| "Dol Mere Mann Pyaar Se"
| rowspan=3| O. P. Nayyar
| rowspan=3| Majrooh Sultanpuri
| rowspan=3| solo
|-
| "Bol Pardesiya Ye Tune Kya Kiya"
|-
| "Man More Ga Jhum Ke"
|-
! Rowspan=2| ''Mastana''
| "Raja Ka Haathi Le Le"
| rowspan=2| Madan Mohan
| rowspan=2| Rajendra Krishan
| rowspan=2| Mohammed Rafi
|-
| "Ro Ro Ke Yaad Kare"
|-
! ''[[Mayurpankh]]''
| "Yeh Barkha Bahaar"
| Shankar–Jaikishan
| Shailendra
| Lata Mangeshkar
|-
!''Meenar''
| "Lele Lele Bahaar Mein Bahaar Ke Maze"
| C. Ramchandra
| Rajendra Krishan
| solo
|-
! rowspan=2| ''Miss Mala''
| "Chori Chori Aana Na Khidki Tale Tum" (version 1)
|rowspan=2| Chitragupt
|rowspan=2| Anjum Jaipuri
| Mohammed Rafi
|-
| "Chori Chori Aana Na Khidki Tale Tum" (version 2)
| Mohammed Rafi, Kishore Kumar
|-
!''[[Nagin (1954 film)|Nagin]]''
| "Hasinon Mujhse Mat Poochho"
| Hemant Kumar
| Rajendra Krishan
| Hemant Kumar
|-
!rowspan=2| ''Paheli Tarikh''
| "Hum Hain Waasi Swarg Ke"
|rowspan=2| Sudhir Phadke
|rowspan=2| Qamar Jalalabadi
|rowspan=2| solo
|-
| "Gaa Le Geet Khushi Ke"
|-
!''Parichay''
| "Main Janam Janam Se Hoon Dukhiya"
| Vedpal Sharma
| Keshav Trivedi
| solo
|-
!''Pensioner''
| "Meri Jhuki Jhuki Ankhiyon Mein"
| Hansraj Behl
| Naqsh Lyallpuri
| solo
|-
! Rowspan=7| ''Pyase Nain''
| "Mere Jeevan Mein Yeh Aaya Hai Kaun"
| rowspan=6| S. K. Pal
| rowspan=4| Waheed Qureshi
| Talat Mahmud
|-
| "Manva Tu Haule Haule Gaaye Ja Geet"
| rowspan=5| solo
|-
| "Mukh Se Kuch Na Bol Bawari"
|-
| "Raat Suhani Aayi Dekho Chamke Nanhe"
|-
| "Ek Chand Banane Wale Ne Sau Chand
| Kaif Irfani
|-
| "Jo Dil Pe Tere Yeh Tes Lagti"
| Kaifi Azmi
|-
| "Kanto Me Daman Ulajh Gaya"
| Bulo C. Rani
| D. N. Madhok
| Bulo C. Rani
|-
! Rowspan=3| ''Radha Krishna''
| "Neel Gagan Mein Baadal"
| rowspan=3| S. D. Burman
| rowspan=3| Narendra Sharma
| rowspan=3| solo
|-
| "Ghir Aaye Ras Megh" (version 1)
|-
| "Ghir Aaye Ras Megh" (version 2)
|-
! Rowspan=8| ''Ramman''
| "Diya Jalake Saari Raat"
| rowspan=8| Vinod
| rowspan=7| Aziz Kashmiri
|rowspan=5| solo
|-
| "Mohabbat Ke Jo Deewane Hain"
|-
| "Teri Dard Hai Meri Zindagi"
|-
| "Tum Toh Huye Harjaai Saiyan"
|-
| "Udaas Nazron Se Poochh Lijiye"
|-
| "Humein De Ke Chali Hai Judaai"
| Sudha Malhotra
|-
| "Rutu Albeli Aayi"
| Shamshad Begum
|-
| "Le Chhod Chali Duniya Teri"
| Prakash
| solo
|-
! Rowspan=2| ''Rasiya''
| "Giri Bhanwar Mein Naav Hamaari"
| rowspan=2| Bulo C. Rani
| rowspan=2| D. N. Madhok
| rowspan=2| solo
|-
| "Yeh Kaali Kaali Ratiya"
|-
! Rowspan=4| ''Ritu Vihaar''
| "Aare Re Re Chale Buland Ke Teer"
| rowspan=4| Jamal Sen
| rowspan=4| Kavi Pradeep
| rowspan=4| solo
|-
| "Dekho Aaya Re Basant"
|-
| "Garam Garam Chale Lu"
|-
| "Khili Sharad Ki Poornima"
|-
!rowspan=4| ''Saltanat''
| "Zindagi Hai Mauj Ki"
|rowspan=4| Chitragupt
|rowspan=3| Gopal Singh Nepali
| rowspan=4| solo
|-
| "Hum The Intezaar Mein"
|-
| "Yeh Matwala Gaadiwala Jiya Le Jaata Hai"
|-
| "Chhupa Kar Laayi Hoon Main"
| Anjum Jaipuri
|-
! Rowspan=5| ''Samaj''
| "Kayi Din Se Saawan Barsaata Hai"
| rowspan=5| Arun Kumar Mukherjee
| rowspan=5| Majrooh Sultanpuri
| Sailesh Mukherjee
|-
| "Mil Ke Nigaahen"
|rowspan=3| solo
|-
| "Gham Toh Bana Mere Liye"
|-
| "Chalte Bane Leke Jiya"
|-
| "Nainon Ne Jhoola Daala"
| chorus
|-
!rowspan=3| ''Samrat''
| "Yeh Khamoshiyan Yeh Samaan" (version 1)
|rowspan=3| Hemant Kumar
|rowspan=3| Rajendra Krishan
|rowspan=3| solo
|-
| "Shabaab Hi Shabaab Hai"
|-
| "Sabko Mubarak Naya Saal"
|-
!rowspan=6| ''Savdhan''
| "Raat Muskurati Hai Dhadkanen Jagati Hai"
|rowspan=6| Vasant Pawar
|rowspan=6| Ramchandra Vadhavkar, Sahir Ludhianvi
| Geeta Dutt
|-
| "Nazar Se Dil Nein Samaanewale"
|rowspan=5| solo
|-
| "Muhabbat Ki Nazar Jab Meherbaan"
|-
| "Chalo Hato, Jaao Rasiya"
|-
| "Jhananan Baaje Mori Jhanjhan"
|-
| "Aaj Kisi Ke Haathon Ne"
|-
!''Shama Parwana''
| "Ho Jaake Laage Naina"
| Husnlal–Bhagatram
| Majrooh Sultanpuri
| Suraiya
|-
! Rowspan=4| ''[[Shart (1954 film)|Shart]]''
| "Dil Mera Hai Deewana"
| rowspan=4| Hemant Kumar
| rowspan=4| S. H. Bihari
| rowspan=4| solo
|-
| "Chala Kafila Pyar Ka"
|-
| "Jana Na Chhodke"
|-
| "Mere Humsafar"
|-
! rowspan=6| ''Shiv Kanya''
| "Ruturaaj Saaj Saaj Kar Aaye"
| Rowspan=6| Manna Dey
| rowspan=1| Saraswati Kumar Deepak
| rowspan=6| solo
|-
| "Om Namah Shivay"
| rowspan=3| Bharat Vyas
|-
| "Jay Ambe Jagadambe, Dhadak Uthi Jwala"
|-
| "Kaisa Kutil Vidhaan Hai Tumhara"
|-
| "Jay Durge De De Aaj Vardaan"
| rowspan=2| Ramesh Gupta
|-
| "Ab Kaun Mera Sansar Mein"
|-
! rowspan=6| ''Shiv Ratri''
| "Aa Gayi Maha Shivratri Padharo Shankar Ji"
| Rowspan=6| Chitragupt
| rowspan=6| Gopal Singh Nepali
| rowspan=6| solo
|-
| "He Gangadhar Paani Do"
|-
| "Jo Teer Chalaye Usi Pe"
|-
| "O Keh Dena Dooj Ke Chand Zara"
|-
| "Oonchi Oonchi Haveli Mere Liye"
|-
| "Shankar Ki Pooja Chhite Na"
|-
! rowspan=2| ''Shobha''
| "Dil-e-Nadaan Haal-e-Gham Na Suna"
| Rowspan=2| Robin Chatterjee
| rowspan=2| Mahendra Pran
| rowspan=2| solo
|-
| "Maina Boli Sun Re Tote"
|-
! rowspan=2| ''Shri Chaitanya Mahaprabhu''
| "Gokul Ke Is Raas Ko Karne Chaknachur"
| Rowspan=2| R. C. Boral
| rowspan=2| Bharat Vyas
| rowspan=1| Mohammed Rafi
|-
| "Kanha Kanha Poonam Ki Raat Hai"
| chorus
|-
! rowspan=3| ''Suhagan''
| "Lalna Aayega Shor Machayega"
| Rowspan=3| Vasant Pawar
| rowspan=3| Ram Bhadavkar, Ehsan Rizvi
| rowspan=3| solo
|-
| "Kaahe Ko Byahi Bides"
|-
| "Mere Lalla Ko Sulayegi Nindiya"
|-
! Rowspan=2| ''[[Taxi Driver (1954 film)|Taxi Driver]]''
| "O Dekho Maane Nahee Ruthee Hasina"
| rowspan=2| S. D. Burman
| rowspan=2| Sahir Ludhianvi
| Jagmohan Bakshi
|-
| "Jeene Do Aur Jiyo"
| solo
|-
!rowspan=5| ''Tilottama''
| "Phoolon Se Maarna, Nakhre Sawarna"
| rowspan=5| S. N. Tripathi
| rowspan=5| Gopal Singh Nepali
| rowspan=5| solo
|-
| "Nirali Yeh Duniya, Yeh Mausam Salona"
|-
| "Nayi Rani Ji Ka Raaj Ho Gaya"
|-
| "Maine Paayal Bajaayi Jab"
|-
| "Jab Jab Niklega Chand"
|-
! Rowspan=2| ''Toote Khilone''
| "Bhagwan Ne Jab Chheen Liya Maa Ka Sahara"
| rowspan=7| Chitragupt
| rowspan=2| Raja Mehdi Ali Khan
| rowspan=2| solo
|-
| "O Raat Rangili Chham Chham Naache"
|-
!rowspan=5| ''Tulsidas''
| "De De, Aisa Baalma"
|rowspan=5| Gopal Singh Nepali
| rowspan=2| solo
|-
| "Jeevan Bhar Aansoo Mein Doobi"
|-
| "Naiya Jaldi Le Chalo Mujhe" (version 1)
| rowspan=3| Mohammed Rafi
|-
| "Naiya Jaldi Le Chalo Mujhe" (version 2)
|-
| "Radha Ji Ke Kunwar Kanhaiya"
|-
!''Waris''
| "Badhaai Ho, Gaao Badhaiyan"
| Anil Biswas
| Majrooh Sultanpuri
| Bande Hasan
|-
! Rowspan=5| ''Watan''
| "Ye Sar Rahe Na Tan Rahe"
| rowspan=5| Hafiz Khan
| rowspan=5| Shewan Rizvi
| Mohammed Rafi
|-
| "Taqdir Ka Kehna Hai Ki"
| rowspan=4| solo
|-
| "Jahan Chand Ka Noor Bikhra Hua Tha"
|-
| "Tu Salamat Rahe Hazar Baras"
|-
| "Dard-e-Mohabbat Dard-e-Judaai"
|-
|}
=== 1955 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! ''Aaj Ki Baat''
| "Meri Nagri Mein Kyun Aaya"
| Snehal Bhatkar
| Kaif Irfani
| Mohammed Rafi
|-
! Rowspan=5| ''[[Abe-Hayat (film)|Abe–Hayat]]''
| "Ae Dile Nashad Tera Shukriya"
| rowspan=5| Sardar Malik
| Kaif Irfani
| rowspan=5| solo
|-
| "Nigahe Mili Aur Tum Muskuraye"
| Raja Mehdi Ali Khan
|-
| "Nachu Re Gau Re Jhum Jhum Sanam"
| Hasrat Jaipuri
|-
| "Nasha Pila Ke Girana To Sabko Aata Hai"
| rowspan=2| Qamar Jalalabadi
|-
| "Aa Ja Hai Tera Intezar"
|-
!''Adil-e-Jahangir''
| "Aaja Dilruba, Teri Dilruba"
| Husnlal–Bhagatram
| Qamar Jalalabadi
| solo
|-
! Rowspan=3| ''[[Albeli (1955 film)|Albeli]]''
| "Tum Sang Laagi Balam Mori Ankhiyan"
| rowspan=3| Ravi
| Ravi
|rowspan=3| solo
|-
| "O Balma Kyun Na Karun Main Tose"
| rowspan=2| Raja Mehdi Ali Khan
|-
| "Chhod Babul Ka Ghar"
|-
! Rowspan=6| ''Alladin Ka Beta''
| "Zakhmi Hai Paaon Mere"
| rowspan=6| S. Mohinder
| rowspan=6| Tanvir Naqvi
| rowspan=3| Mohammed Rafi
|-
| "Tere Darbar Mein Aaye"
|-
| "Dil Bas Mein Nahin, Dhadkan Ki Kasam"
|-
| "Main Hoon Hoor Arab Ki"
| rowspan=2| solo
|-
| "Hum Pyaar Ke Maaron Ka Dushman Hai"
|-
| "Bada Rangeen Fasana Hai"
| Geeta Dutt
|-
! Rowspan=4| ''[[Amaanat]]''
| "Chhal Chhal Pani Hamari Zindgani"
| rowspan=4| Salil Chowdhury
| rowspan=4| Shailendra
| rowspan=2| Manna Dey
|-
| "Re Murkh Tu Kya Jane"
|-
| "Meri Wafaye Tumhari Jafaye"
| rowspan=2| solo
|-
|"Jab Tumne Mohabbat Chhin Li"
|-
! rowspan=10| ''[[Baap Re Baap (1955 film)|Baap Re Baap]]''<ref>{{cite web|url=https://m.hindigeetmala.net/movie/baap_re_baap.htm|title=Baap Re Baap (1955) movie songs|accessdate=30 April 2022}}</ref>
| "Piya Piya Piya"
| rowspan=10| O. P. Nayyar
| rowspan=10| Jan Nisar Akhtar
| rowspan=2| Kishore Kumar
|-
| "Phool Se Galon Pe"
|-
| "Raat Rangeeli Chamke Taare"
| rowspan=8| solo
|-
| "Tum Na Aaye"
|-
| "Jaane Bhi De"
|-
| "Deewana Dil Gaaye"
|-
| "Kahe Dil Yeh Deewana"
|-
| "Main Bhi Jawaan Dil Bhi Jawaan"
|-
| "Ab Yeh Bataa Jaye Kaha"
|-
| "Tu Na Bataa"
|-
!''[[Bandish (1955 film)|Bandish]]''
| "Mohe Apna Bana Lo Saajan"
| Hemant Kumar
| Prem Dhawan
| solo
|-
! rowspan=6| ''Bindiya''
| "Yeh Bahaar Baar Baar Keh Rahi Hai"
| rowspan=6| Snehal Bhatkar
| rowspan=2| Bharat Vyas
| rowspan=2| solo
|-
| "Gudiya Hamari Hai Jaadu Ki Pudiya"
|-
| "Aaja Tujhe Main Ek Baar Seene Se"
|rowspan=4| Arsh Haidari
| Kamal
|-
| "Hi Tujhko Mubarak Ab Teri Taqdeer"
| Rajkumari Dubey
|-
| "Jisko Diya Hai Dil Maine"
| rowspan=2| solo
|-
| "Majboor Wafaa Ke Haathon Se"
|-
! ''Char Paise''
| "Dil Hai Nishana, Nainon Ke Teer Ka"
| B. D. Burman
| Sartaj Rahmani
| solo
|-
! rowspan=5| ''Daku''
| "Dil Ke Badle Dil Hi Loongi"
| rowspan=5| Snehal Bhatkar
| rowspan=3| M. L. Khanna
| Mukesh
|-
| "Lagi Lagi Lagi Hai, Lagi Lagi Lagi Chot Dil Par"
| rowspan=3| solo
|-
| "Qismat Dikhate Hai Kaise Kaise Rang"
|-
| "Sangdil Ban Gaya"
| Kaif Bhopali
|-
| "Mere Resham Ka Roomal"
| Kaif Irfani
| Anwar Hussain
|-
!''Darbar''
| "Kyon Dil Pe Rakha Hai"
| Hansraj Behl
| Asad Bhopali
| Madhubala Zhaveri
|-
! ''[[Devdas (1955 film)|Devdas]]''
| "O Albele Panchhi Tera Door Thikana Hai"
| S. D. Burman
| Sahir Ludhianvi
| Usha Mangeshkar
|-
!''Ganga Maiya''
| "Do Taar Mann Ke Mil Gaye"
| Shankar Rao Vyas
| Ramesh Chandra Panday
| solo
|-
! Rowspan=6| ''Ghamand''
| "Unka Shikwa Kya Kare"
| rowspan=6| Gulshan Soofi
| rowspan=1| Nazi
| rowspan=4| solo
|-
| "Kahin Thokar Na Lag Jaaye"
| Uddhav Kumar
|-
| "Duniya Ka Sitam, Taqdeer Ka Gham"
|rowspan=2| Naqsh Lyallpuri
|-
| "Aaya Re Aaya Saawan Yeh"
|-
| "Tere Dil Ki Dhadkanein Mere Dil Mein Aaye"
|rowspan=2| Kaif Irfani
|rowspan=2| Mohammed Rafi
|-
| "Saathi O Saathi Humne Tumko Kitni Khushi Se"
|-
! rowspan=6| ''Ha Ha Hee Hee Ho Ho''
| "Dheere Hans Ke Kuchh Keh Diya"
| rowspan=6| Vinod
| rowspan=6| P. L. Santoshi
| rowspan=6| solo
|-
| "Dil Maange Chnad Khilauna"
|-
| "Ha Ha He He Ho Ho"
|-
| "Na Na Na Main Toh Kehti Rahungi"
|-
| "O Main Postman, Kisika Khat"
|-
| "Vaah Baag Nahin Hai"
|-
! rowspan=8| ''Haseena''
| "Abhi Dil Toh"
| rowspan=8| Bulo C. Rani
| rowspan=8| Jan Nisar Akhtar
| rowspan=7| solo
|-
| "Teri Mehfil Uth Kar Deewnae Kahan Jaaye"
|-
| "Saiyan Tere Haathon Mein Gajra Ban Jaoongi"
|-
| "Mast Adaayen Mast Karam"
|-
| "Dil Pe Kaisi Bekhudi Chhaane Lagi"
|-
| "Bewafa Na Mita"
|-
| "Bada Siyana, Kabhi Na Aaun Main Toh"
|-
| "Arre Woh Chand Mere Dil Ki Haalat"
| Bulo C. Rani
|-
! Rowspan=5| ''[[Hatimtai Ki Beti]]''
| "Kaali Kamliwaale Tum Pe Laakho Salaam"
| rowspan=5| A. R. Qureshi
| rowspan=4| Shewan Rizvi
| Mohammed Rafi
|-
| "Dil Uski Mohabbat Me Hamesha Se"
| rowspan=4| solo
|-
| "Aasman Se Mujhpe Bhi Barsa De Aag"
|-
| "Humba Humba Humka Duniya Ghar Hai"
|-
| "Suni Suni Hai Bahar Chhodo Inkar"
| Kaifi Azmi
|-
! Rowspan=3| ''[[House No. 44]]''
| "Dum Hai Baki To Gham Nahi"
| rowspan=3| S. D. Burman
| rowspan=3| Sahir Ludhianvi
| rowspan=3| solo
|-
| "Dekh Idhar O Jadugar"
|-
| "Tum Chalo Hamare Sath Balma"
|-
! rowspan=3| ''[[Insaniyat (1955 film)|Insaniyat]]''
| "Bansuriya Bole, Madhur Ras Ghole"
| rowspan=3| C. Ramchandra
| rowspan=3| Rajendra Krishan
| rowspan=2| [[Mohammed Rafi]]
|-
| "Aisi Nainwa Ki Lagi Kataar, Ke Jiya Kare"
|-
| "Haseenon Ka Manzoor"
| solo
|-
! Rowspan=2| ''Jagadguru Shankaracharya''
| "Aaj Kaisa Yeh Suraj Chamka Re"
| rowspan=2| Avinash Vyas
| rowspan=2| Bharat Vyas
| rowspan=2| solo
|-
| "Aaja Re Aaja O Nand Dulare"
|-
! Rowspan=5| ''Jai Mahadev''
| "Ae Machhere Ne Khel Kiya"
| rowspan=5| Manna Dey
| rowspan=5| Bharat Vyas
| rowspan=2| Manna Dey
|-
| "Chapal Meen Si Ankhiyan"
|-
| "Dhoondhe Naina Bawre"
| rowspan=2| solo
|-
| "Piya More Aane Laage Pran"
|-
| "Rasiya Re Rasiya, Batiya Suno"
| Moti Sagar
|-
! Rowspan=8| ''Jalwa''
| "Falak Tera, Zameen Teri"
| rowspan=8| Vinod
| rowspan=4| Verma Malik
| rowspan=2| Mohammed Rafi
|-
| "O Main Hoon Shahi Lakadhaara"
|-
| "Har Roz Hasinon Ka"
| rowspan=5| solo
|-
| "Surma Bareli Ka, Kaajal Hai Dilli Ka"
|-
| "O Jaanewale, Jaane Se Pehle"
| Saraswati Kumar Deepak
|-
| "Shama Kehti Hai Parwane Se"
| Aziz Kashmiri
|-
| "Tu Hansta Hi Raha Bhagwan"
| Kaif Irfani
|-
| "Hum Do Ladke, Jeb Ke Kadke"
| Raja Mehdi Ali Khan
| Mohammed Rafi, Shaninder Pal
|-
! Rowspan=6| ''Jashan''
| "Bade Khubsoorat Bade Woh Hansi Hai"
| rowspan=6| Roshan
| rowspan=6| Rajendra Krishan
| rowspan=2| Mohammed Rafi
|-
| "Maarenge Kas Kas Ke Baan Saiyan"
|-
| "Roothi Huyi Khushi Ko"
| rowspan=4| solo
|-
| "Chun Chun Ke Baaghon Se Layi Main Kaliyan"
|-
| "Bolo Yeh Duniya Kiski"
|-
| "Yunhi Dil Se Aa Rahi Hai"
|-
! rowspan=6| ''Jawab''
| "Nigahen Mila Le, Mohabbat Basa Le"
|rowspan=6| Shauqat Dehlvi Nashad
|rowspan=6| Khumar Barabankvi
|rowspan=5| solo
|-
| "Dil Hi Mein Dil Ki Reh Gayi"
|-
| "Main Toh Ho Gayi Re Barbaad"
|-
| "Balam Bade Bhole"
|-
| "Ankh Michauli Jhele Chand Sitaare"
|-
| "Ab Mere Ram Rakhwala"
| G. M. Durrani
|-
! rowspan=2| ''[[Jhanak Jhanak Payal Baaje]]''
| "Udhdat Rang Lay Gat"
|rowspan=2| Vasant Desai
|rowspan=2| Hasrat Jaipuri
| solo
|-
| "Chhiyoran Chhiyo"
| Mohammed Rafi
|-
! rowspan=2| ''Joru Ka Bhai''
| "Naina Kahe Ko Lagaye"
|rowspan=2| Jaidev
| Narendra Sharma
|rowspan=2| solo
|-
| "Chhanana Chhun Chali Gori"
| Vishwamitra Adil
|-
! Rowspan=2| ''Khandaan''
| "Lakhon Ke Bol Sahe Tere Liye"
| rowspan=2| A. R. Qureshi
| rowspan=2| Tanvir Naqvi
| rowspan=2| solo
|-
| "Saawan Ka Mausam Hai Sanwra"
|-
! Rowspan=1| ''Lagan''
| "Leke Meetha Bajaa Nindiya"
| rowspan=1| Hemant Kumar
| rowspan=1| Rajendra Krishan
| rowspan=1| solo
|-
! Rowspan=3| ''Lakhon Mein Ek''
| "Yeh Dil Hai Bada Beimaan"
| rowspan=3| Bhola Shreshtha
| rowspan=3| Ramesh Pant
| rowspan=3| solo
|-
| "Meethi Meethi Neend Mein Soyi Thi Jawaani"
|-
| "Jaan Gayi, Haan Main Jaan Gayi"
|-
! Rowspan=4| ''Lutera''
| "Mera Ammi Se Pyaar Rahe"
| rowspan=4| C. Ramchandra
| rowspan=3| Rajendra Krishan
| Sabita Chowdhury
|-
| "Ek Pyaar Bhara Dil Laaya Hoon"
| Mohammed Rafi
|-
| "Jaan Gaye Haan Jaan Gaye"
| rowspan=2| solo
|-
| "Gham Ki Baaten Bhool Jaa"
| Jan Nisar Akhtar
|-
! Rowspan=2| ''Madh Bhare Nain''
| "Deewane Armaanon Ki Bheed Mein"
| rowspan=2| S. D. Burman
| rowspan=2| Shailendra
| Kishore Kumar
|-
| "Naye Zamane Ka Naye Paigham Sunane Aaye"
| solo
|-
!rowspan=2| ''Madhur Milan''
| "Ae Dil Mere Udaas Na Ho"
|rowspan=2| Bulo C. Rani
|rowspan=2| Raja Mehdi Ali Khan
| solo
|-
| "Aaja Aaja Ajja Re Dekho Raat Aayi Hai"
| Mohammed Rafi
|-
! Rowspan=6| ''Mahasati Savitri''
| "Aaj Teri Piya Ki Talash Ho Rahi Hai"
|rowspan=6| Chitragupt
|rowspan=6| Gopal Singh Nepali
|rowspan=5| solo
|-
| "Aji Kaise Kahoon Mera Pyaar Lo"
|-
| "Kaise Koi Le Jaayega Mera Piya Ki Pran"
|-
| "Kanya Hokar Bhi Jiske Gun Ki Charcha"
|-
| "Mera Pyaar Idhar, Taqdeer Udhar"
|-
| "Chori Chori Chandni Mein Chakori Chali Jaaye"
| Mohammed Rafi
|-
! Rowspan=5| ''Marine Drive''
| "Aji, Tum Aur Hum Ho Sath Sath"
| rowspan=5| N. Dutta
| rowspan=2| Qamar Jalalabadi
| rowspan=4| solo
|-
| "Main Hoon Phooljhadi, Tu Hai Shola"
|-
| "Dil Bhi Mit Jaye To Ulfat Dil Se"
| rowspan=3| Sahir Ludhianvi
|-
| "Raat Sunsan Hai, Zindagi Viran Hai"
|-
| "Mohabbat Yun Bhi Hoti Hai"
| Mohammed Rafi
|-
! Rowspan=5| ''Mast Qalandar''
|"Raat Ke Sar Se Aanchal Dhalka"
| rowspan=5| Hansraj Behl
| rowspan=5| Asad Bhopali
| rowspan=3| solo
|-
| "Jee Bhar Ke Pee Le Aankhon Ke Jaam"
|-
| "Aa Bhi Jaao Sanam"
|-
| "Dil-e-Nadaan Zamaane Mein"
| rowspan=2| Talat Mahmud
|-
| "Dil Ki Mehfil Sazaane Roz"
|-
! Rowspan=4| ''Mastani''
| "Basre Ki Hoor Gori Gori"
| rowspan=4| B. N. Bali
| rowspan=3| Raja Mehdi Ali Khan
| rowspan=2| solo
|-
| "Gadiwale Ho Zara Haule Haule Chalna"
|-
| "Dekho Dekho Jhoomti Barsaat"
| Mohammed Rafi
|-
| "Dil Toot Gaya, Har Tukde Se Aahat"
| Umar Saharanpuri
| solo
|-
!''[[Milap]]''
| "Piya Khulke Na Nain Milaye Re"
| N. Dutta
| Sahir Ludhianvi
| solo
|-
! Rowspan=4| ''[[Miss Coca Cola]]''
| "Jeena Hai Kya"
| rowspan=4| O. P. Nayyar
| rowspan=4| Majrooh Sultanpuri
| rowspan=3| solo
|-
| "Kabhi Kabhi Mere Dil"
|-
| "Zara Humse Nigahen Mila"
|-
| "Jhuka Jhukake Nigahen Milayi Jati Hai"
| [[Mukesh (singer)|Mukesh]]
|-
! Rowspan=3| ''Musafir Khana''
| "Palti Are Palti Palti Kismat Palti"
| rowspan=3| O. P. Nayyar
| rowspan=3| Majrooh Sultanpuri
| rowspan=3| solo
|-
| "Agar Babu Dil Hai Kabu, Toh Dar Nahi Tu"
|-
| "Zara Si Baat Ka Huzur Ne Fasana Kar Diya"
|-
! Rowspan=3| ''Naghma-e-Sahara''
| "Taare Hain Chandni Hain"
| rowspan=3| Khayyam
| rowspan=3| N/A
| rowspan=3| Talat Mahmud
|-
| "Do Shamme Jal Rahi Hai" (version 1)
|-
| "Do Shamme Jal Rahi Hai" (version 2)
|-
! Rowspan=2| ''Naqab''
| "Meri Kasam Tumhen, Nera Yeh Raaz"
| rowspan=2| Govind Ram
| rowspan=2| Prem Dhawan
| rowspan=2| solo
|-
| "Khatawar Hoon Gar Khata Batao"
|-
! Rowspan=8| ''[[Navratri (film)|Navratri]]''
| "Sinh Ki Hoonkar Le"
| rowspan=8| Chitragupt
| rowspan=2| Bharat Vyas
|rowspan=3| Mohammed Rafi
|-
| "Ambe Tu Hai Jagadambe Kaali"
|-
| "Baharen Aayengi, Hothon Pe Phool Khilegi"
| rowspan=6| Gopal Singh Nepali
|-
| "Nain Khule Toh Dekhe Naina"
| rowspan=5| solo
|-
| "Main Toh Chalu Rumjhum"
|-
| "Dukhiyon Ko Bananewale"
|-
| "Hum Naariyan Sukumariyan"
|-
| "Kala Bhanwara Machalne Na De"
|-
! Rowspan=7| ''Oonchi Haveli''
| "Aji Kyun Rooth Gaye"
| rowspan=7| Shivram Krishnan
|rowspan=7| Bharat Vyas
| Shamshad Begum, Parshuram
|-
| "Baap Gaaye Thumri"
| Mohammed Rafi
|-
| "Chanda Re Tujhe Dekhe Saara Alam"
| rowspan=3| solo
|-
| "Gaaon Gaaon Mein Dhoondh Rahi"
|-
| "Kiya Tha Paap Kya Maine"
|-
| "Roop Kaisa Diya Hai Tujhe Raam Ne"
| rowspan=2| Shivram Krishnan
|-
| "Sapnon Ki Gaaon Mein"
|-
!''Pehli Jhalak''
| "Mohabbat Ne Mujhe Maara"
| C. Ramchandra
| Rajendra Krishan
| solo
|-
! rowspan=4| ''Prabhu Ki Maya''
| "Chalo Dene Badhaai Guru Ki Aangan Mein"
| rowspan=4| Ravi
| rowspan=3| Saraswati Kumar Deepak
|rowspan=2| Hemant Kumar
|-
| "Ek Samay Ki Baat"
|-
| "Ghar Aaye Hamare Muniraaj"
|rowspan=2| solo
|-
| "Jogi Jogan Khadi Tere Dwaar"
| Pandit Madhur
|-
! Rowspan=5| ''Pyaara Dushman''
| "Yeh Duniya Hai Aani Jaani"
| rowspan=5| Nisar Bazmi
| rowspan=5| Saba Afghani
| rowspan=4| Mohammed Rafi
|-
| "Kuchh Bolo Zara, Mukh Kholo Zara"
|-
| "Jahan Nazren Mili Dil Kho Hi Jaata Hai"
|-
| "Abhi Toh Dil Hai Jawaan"
|-
| "Dil Leke Dil Ki Duniya Mita Di"
| rowspan=1| solo
|-
! Rowspan=6| ''Raftar''
| "Rangrejwa Sambhal Kar Rangiyo Re"
| rowspan=6| Shivram Krishnan
| rowspan=6| Nakhshab Jarachavi
| rowspan=5| solo
|-
| "Preet Ki Reet Nibhana"
|-
| "Phir Toh Kaho Ek Baar"
|-
| "Dil Tamasha Ho Magar"
|-
| "Chhalke Mann Ki Chhagalwa"
|-
| "Mohabbat Mein Jeena Hai"
| Talat Mahmud
|-
! Rowspan=3| ''[[Railway Platform (film)|Railway Platform]]''
| "Mast Sham Hai, Hathon Mein Jaam Hai"
| rowspan=3| Madan Mohan
| rowspan=3| Sahir Ludhianvi
| rowspan=2| S. D. Batish
|-
| "Bhajo Ram Bhajo Ram"
|-
| "Andher Nagari Chaupat Raja"
| Mohammed Rafi, Manmohan Krishna, [[Shiv Dayal Batish]]
|-
! Rowspan=2| ''Raj Durbar''
| "Naachun Chham Chham Tere Darbar Mein"
|rowspan=9| Chitragupt
|rowspan=9| Gopal Singh Nepali
|rowspan=2| solo
|-
| "Bulbul Ka Chaah Chaahna"
|-
! Rowspan=7| ''Raj Kanya''
| "Tasveer Nainan Mein Thi"
|rowspan=2|Mohammed Rafi
|-
| "Is Do Rangi Duniya Mein"
|-
| "Haathon Se Dil Thaam Ke"
| rowspan=5| solo
|-
| "Jab Mohan Bajaaye Murliya Re"
|-
| "Kaale Nag Nagino Jangal Ki"
|-
| "Naseeba Ke Hai Maare"
|-
| "Poochho Poochho Na Dil Ka Haal"
|-
! Rowspan=3| ''Rajkumari''
| "Sundar Mausam Sama Suhana"
|rowspan=3| Ajit Merchant
|rowspan=3| Saraswati Kumar Deepak
| Mukesh
|-
| "Nain Humare Tumhe Bulaaye"
| rowspan=2| solo
|-
| "Bezaar Hoon Main Majbooriyon Se"
|-
! Rowspan=3| ''Ratna Manjari''
| "Meri Bawri Chunariya Hawa Mein"
|rowspan=3| S. N. Tripathi
|rowspan=3| B. D. Mishra
|rowspan=2| solo
|-
| "Humein Kyun Bhulaya"
|-
| "Main Kaisi Rahungi More Raja"
| Mohammed Rafi
|-
! rowspan=4| ''Roop Basant''
| "Mere Do Nain Shikari Hai"
|rowspan=4| Dhaniram
|rowspan=4| Gafil Harnalvi
|rowspan=4| solo
|-
| "Kahan Ho Duniya Ke Bhagwan"
|-
| "Ab Naiya Kaise Paar Lage"
|-
| "Aag Bujha Le O Matwale"
|-
! Rowspan=6| ''Rukhsana''
| "Tumhe Ham Yad Karate Hai"
| rowspan=6| Sajjad Hussain
| Tanvir Naqvi
| rowpan=3| solo
|-
| "Tere Jahan Se Chal Diye" (female)
| rowspan=4| Khumar Barabankvi
|-
| "Din Raat Zafayen Karte Hai"
|-
| "Dil Ko Laga Ke Huzur Hum To Hue Majboor"
| Mubarak Begum
|-
| "Tere Jahaan Se Chal Diye"
| rowspan=2| Kishore Kumar
|-
| "Yeh Chaar Din Bahaar Ke"
| Shakeel Badayuni
|-
! Rowspan=8| ''[[Sabse Bada Rupaiya (1955 film)|Sabse Bada Rupaiya]]''
| "Bol Re Munna Duniya Mein Hai Kaun"
| rowspan=3| Nashad
| Majrooh Sultanpuri
| Mohammed Rafi, S. Balbir, Shamshad Begum
|-
| "Is Raat Diwali Yeh Kaisi"
| rowspan=4| P. L. Santoshi
| Mohammed Rafi, Shamshad Begum
|-
| "Bananewale Ne Rupaiya Gol Kyun Banaya"
|rowspan=2| Mohammed Rafi
|-
| "Sabse Bada Hai Ji"
| rowspan=5| O. P. Nayyar
|-
| "Duniya Daulatwalon Ki Hai"
| S. Balbir, Suhasini Kolhapure
|-
| "Kahe Patanga Deepak Se"
| rowspan=3| Majrooh Sultanpuri
| rowspan=3| solo
|-
| "Thodi Der Aur Baitho"
|-
| "Ae Dil Na Ro Leke Aansu Ke Haar"
|-
!rowspan=2| ''Sakhi Hatim''
| "Laate Ho Khuda Hafiz"
|rowspan=2| A. R. Qureshi
| Kaifi Azmi
|rowspan=2| solo
|-
| "Be-Sahaaron Ke Nigehbaan"
| Shewan Rizvi
|-
!rowspan=2| ''Sakhi Lutera''
| "Tumse Karte Na Agar Pyaar"
|rowspan=2| Iqbal
| rowspan=2| Farooq Kaiser
|rowspan=2| solo
|-
| "Balma Ki Chaal Mein Aa Gayi Main"
|-
! Rowspan=4| ''Sardaar''
| "Aayi Jhoom Ke Jawaani Liye Pyaar"
| rowspan=4| Jagmohan Mitra
| rowspan=4| Uddhav Kumar
| rowspan=4| solo
|-
| "Jabse Nazar Se Nazar Mili"
|-
| "Kali Khili Armaan Ki"
|-
| "Neend Nigodi Ban Gayi Bairan"
|-
! Rowspan=7| ''Sati Madalasa''
| "Sir Par Ganga Rakhnewale"
| rowspan=7| Chitragupt
| rowspan=7| Gopal Singh Nepali
| rowspan=6| solo
|-
| "Patanga Se Pyaar Hai Toh Diya Jalega"
|-
| "Naache Chham Chham"
|-
| "Koi Dekhta Rahe Toh Machalti Hoon"
|-
| "Kuan Sune Hamari Pukaar"
|-
| "Kamzor Samajhke Gayya Pe Haath Na Uthao"
|-
| "Rajaji Zara Sambhalo Paayal Ki Boli"
| Mohammed Rafi
|-
! Rowspan=3| ''Sau Ka Note''
| "Piya Bin Sakhi Mohe"
| rowspan=3| S. Mohinder
| rowspan=1| Majrooh Sultanpuri
| rowspan=3| solo
|-
| "Anjaane Mein Kar Gaya Yeh Naina Nadaani"
| Anjaan
|-
| "Sahaare Na Bana Ae Dil"
| Surjeet Sethi
|-
! Rowspan=5| ''Shahi Mehmaan''
| "Arzoo Tadpi, Muhabbat Haath Mal Kar Reh Gayi"
| rowspan=5| Bipin–Babul
| rowspan=2| Raja Mehdi Ali Khan
|rowspan=4| solo
|-
| "Aye Sanam Mere Naache Qadam"
|-
| "Laa Pila Jaam, Pila Milega Tujhko"
| rowspan=3| Anjum Jaipuri
|-
| "Mujhe Meri Kismat Ne Saza Di"
|-
| "Teer Chalake Jalim Jaana Na!
| Mohammed Rafi
|-
! rowspan=3| ''Shahzada''
| "Raat Aayi Hai, Ghunghat Nikale Aaja"
| rowspan=2| Shauqat Dehlvi Nashad
| rowspan=2| Khumar Barabankvi
| rowspan=2| solo
|-
| "Bhalo Ho Tera, O Daaga Denewale"
|-
| "Aati Hai Mere Saamne"
| S. Mohinder
| Tanvir Naqvi
| Mohammed Rafi
|-
! Rowspan=3| ''Shiv-Bhakta''
| "Bhagwan Mil Jaaye Saamne Humko"
|rowspan=3| Chitragupt
| rowspan=3| Gopal Singh Nepali
|rowspan=2| Mohammed Rafi
|-
| "Laaj Laage, Ghunghat Na Khol Baalma"
|-
| "Mile Amiri Ya Fakiri Mujhe Dar Kya"
| solo
|-
!''[[Shree 420]]''
| "Mud Mud Ke Na Dekh"<ref name="85songs">{{cite web |last1=Verma |first1=Sukanya |author1-link=Sukanya Verma |title=85 UNFORGETTABLE Asha Bhosle songs |url=https://www.rediff.com/movies/special/85-unforgettable-asha-bhosle-songs/20180907.htm |work=[[Rediff.com]] |access-date=16 June 2022 |language=en}}</ref>
| Shankar–Jaikishan
| Shailendra
| Manna Dey
|-
! Rowspan=2| ''Shri Krishna Bhakti''
| "Rimjhim Barsaat Rahe Andhiyari Raat"
|rowspan=10| Chitragupt
| rowspan=6| Gopal Singh Nepali
| rowspan=2| solo
|-
| "Baras Raha Rang Gopiyon Sang Sang"
|-
! Rowspan=8| ''Shri Ganesh Vivah''
| "Panghat Pe Chali Sawaar Gori"
| Suman Kalyanpur
|-
| "Bhagwan Tune Kya Kiya"
| Mohammed Rafi
|-
| "Mere Bhole Piya"
| rowspan=4| solo
|-
| "Aangan Mein Khele Laal"
|-
| "Jai Vandan Girja Ke Nandan"
| rowspan=4| Bharat Vyas
|-
| "Bade Bade Akhiyan, Kamal Jaisu Pakhiyan"
|-
| "Laal Rang Mein Rangi Dhwaja"
| rowspan=2| Manna Dey
|-
| "Ashram Kya Tha, Punyalok Tha"
|-
! Rowspan=7| ''Shri Nagad Narayan''
| "Yeh Muh Masur Ki Daal"
| rowspan=7| Vinod
| rowspan=1| Madhup Sharma
| rowspan=2| Mohammed Rafi
|-
| "Aaj Tumhare Charnon Mein"
| Verma Malik
|-
| "Yeh Aaj Gair Ke Ghar Mein"
| rowspan=3| Qamar Jalalabadi
| rowspan=5| solo
|-
| "Kisise Aaj Hamari Mulaqaat Hogi"
|-
| "Dekh Rahe Ho Tum, Mohabbat Ke Khwab"
|-
| "Kabhi Yeh Mujhko"
| Verma Malik
|-
| "Aye Kismat Tere Sadke"
| P. L. Santoshi
|-
! rowspan=3| ''Society''
| "Sharmili Nigahaen Kehti Tum Aaj Nigaahen"
|rowspan=3| S. D. Burman
|rowspan=3| Sahir Ludhianvi
|rowspan=3| solo
|-
| "Lehron Mein Jhoolun"
|-
| "Dil Nahin Toh Na Sahi"
|-
! rowspan=4| ''Tatar Ka Chor''
| "Dekh Zara Gar Dekh Sake"
|rowspan=4| Khayyam
|rowspan=4| Prem Dhawan
|rowspan=2| solo
|-
| "Nigaahon Mein Base Aise"
|-
| "Na Manzil Hai Na Manzil Ki Talash Hai"
| Mubarak Begum, Talat Mahmud
|-
| "Dekho Zara Ulfat Ka Asar"
| Mohammed Rafi
|-
! Rowspan=5| ''Tismar Khan''
| "Yeh Do Jaalim Naina"
| rowspan=5| Shardul Kwatra
| rowspan=3| Prem Dhawan
| S. D. Batish
|-
| "Tune Dil Leke Mora"
| Shaminder Pal
|-
| "Jigar Koi Thaam Liya"
| rowspan=3| solo
|-
| "Dole Re Dole Re Jiya"
|rowspan=2| N/A
|-
| "Dhoondhti Hai Tujhko Nazar"
|-
! rowspan=5| ''Teen Sardar''
| "Zindagi Ki Qasam"
|rowspan=5| Sumant Raj
|rowspan=5| Naqsh Lyallpuri
|rowspan=5| solo
|-
| "O Jaanewale Ji, Basa Le Pyaar Ki Duniya"
|-
| "Na Jaane Kab Talak"
|-
| "Koi Hum Sa Qismat Ka Maara Nahi"
|-
| "Jhoom Le O Mastane"
|-
! Rowspan=2| ''Toofan Mail''
| "Dil Ke Taaron Ko Chhed Gaya"
| rowspan=2| Nisar Bazmi
| rowspan=2| M. L. Khanna
| rowspan=2| solo
|-
| "Mohabbat Hai Jawani Hai"
|-
! rowspan=8| ''[[Vachan]]''<ref>{{cite web|url=https://m.hindigeetmala.net/movie/vachan.htm|title=Vachan (1955) movie songs|accessdate=30 April 2022}}</ref>
| "Jab Liya Haath Mein Haath"
| rowspan=8| Ravi
| rowspan=8| Prem Dhawan
| rowspan=3| Mohammed Rafi
|-
| "Ek Paisa De De O Babu"
|-
| "Koi Jahaan Mein Hamari Tarah"
|-
| "Chanda Mama Door Ke"<ref name="85songs"/>
| rowspan=5| solo
|-
| "Wo Din Kaha Gaye Mere"
|-
| "Iss Jahan Mein Humein Aise Jeena Pada"
|-
| "Yun Hi Chupke Chupke Bahane Bahane"
|-
| "Zara Sikh Lo Ankhiyo Sharmana"
|-
! Rowspan=3| ''Veer Rajputani''
| "Ab Dekh Ke Kya Kare"
|rowspan=3| Bulo C. Rani
|rowspan=3| Gopal Singh Nepali
| Mohammed Rafi
|-
| "Mane Bhool Mat Jaao"
| rowspan=2| solo
|-
| "O Meri Bagiya Mein"
|-
! Rowspan=5| ''Waman Avatar''
| "Aaja Re Aaja Re Aaja"
|rowspan=5| Chitragupt
| rowspan=4| Gopal Singh Nepali
| A. R. Oza
|-
| "Jal Jal Jal Re Deepak Jal"
| Mohammed Rafi
|-
| "Main Hoon Taaron Ki Rani"
|rowspan=3| solo
|-
| "Ghar Ghar Barso Lakshmi"
|-
| "Jaa Re Jaa Re Akash Je Raaja"
| Kavi Pradeep
|-
|}
=== 1956 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
!''26 January''
| "Chhod Bhi Dr Aakash Sinhaasan"
| C. Ramchandra
| Rajendra Krishan
| Manna Dey
|-
! Rowspan=2| ''Aabroo''
| "Woh Raat Bhi Kya Hogi"
| rowspan=2| Bulo C. Rani
| Gopal Singh Nepali
| rowspan=2| solo
|-
| "Jo Kal Banaya Tha Ashiyana"
| D. N. Madhok
|-
! Rowspan=4| ''Aan Baan''
| "Aji Is Faani Duniya Mein Mohabbat Ke"
| rowspan=4| Husnlal–Bhagatram
| rowspan=4| Qamar Jalalabadi
| Mubarak Begum
|-
| "Jhum Rahi Hai Zindagi"
| rowspan=3| solo
|-
| "Murali Manohar Devaki Nandan"
|-
| "Mere Dil Me Tum Chupe"
|-
! Rowspan=5| ''Alam Ara''
| "Jaan-e-Nazar Dekh Idhar Husn Mera"
| rowspan=5| A. R. Qureshi
| rowspan=5| Shewan Rizvi
| rowspan=5| solo
|-
| "Gulzar Aag Ko Kiya"
|-
| "Aadmi Ki Is Zamane Me Yahi Pehchan"
|-
| "Meri Agar Na Tune Suni"
|-
| "Mohabbat Ke Jalwo Se Roshan Hai Sina"
|-
! Rowspan=5| ''Arab Ka Saudagar''
| "Hai Yeh Duniya Musafirkhana"
| rowspan=5| Hemant Kumar
| rowspan=2| Ravi
| rowspan=3| solo
|-
| "Jeene Ka Mazaa Hai"
|-
| "Ruk Jaao Sanam, Tujhe Meri Kasam"
|rowspan=2| S. H. Bihari
|-
| "Idhar Bhi Ek Nazar"
| Ravi
|-
| "Yeh Mehfil Sitaaron Ki"
| Ravi
| Hemant Kumar
|-
! Rowspan=3| ''Astik''
| "O Jogi Jog Se Mat Kar Pyaar"
| rowspan=3| Narayan Dutt
| rowspan=3| S P Kalla
| rowspan=3| solo
|-
| "Chhod Ke Duniya Ki Maya Re"
|-
| "Milan Ki Raat Hai"
|-
! Rowspan=5| ''Ayodhyapati''
| "Aao Sajao Sakhi Phulo Se Palna"
| rowspan=5| Ravi
| rowspan=5| Saraswati Kumar Deepak
| rowspan=5| solo
|-
| "Chamak Cham Cham Ho Raja"
|-
| "Chanda Sa Mukhda Chupa Ke"
|-
| "Maya Mahal Raaj Singhasan"
|-
| "Rani Kyo Barsa Rahi"
|-
! Rowspan=3| ''Badshah Salamat''
| "Kahin Se Woh Parwana"
| rowspan=3| Bulo C. Rani
| P. L. Santoshi
| rowspan=3| solo
|-
| "Yeh Hawa Yeh Ghata Kehte Hain Nazare"
| Raja Mehdi Ali Khan
|-
| "Sitam Oe Sitam Dha Raha Hai Zamana"
| Shafiq Kanpuri
|-
!''[[Bandhan (1956 film)|Bandhan]]''
| "Hasinon Ke Ankhon Ke Dore Gulabi"
| Hemant Kumar
| Rajendra Krishan
| solo
|-
! ''[[Basant Bahar (film)|Basant Bahar]]''<ref>{{Cite web|url=https://m.hindigeetmala.net/movie/basant_bahaar.htm|title=Basant Bahaar : Lyrics and video of Songs from the Movie Basant Bahaar (1956)|website=HindiGeetMala}}</ref>
| "Kar Gaya Re, Kar Gaya Mujhpe Jaadu"
| Shankar–Jaikishan
| Shailendra
| Lata Mangeshkar
|-
! Rowspan=10| ''Basant Panchami''
| "Badal Pe Madal Baaje"
| rowspan=15| Chitragupt
| rowspan=10| Kavi Pradeep
| rowspan=2| Kavi Pradeep
|-
| "Raajon Ke Bhi Maharaj"
|-
| "Bahut Dinon Par Mile Ho Prabhu Pyaare"
| rowspan=13| solo
|-
| "O Muraliwale O Gokul Wale Gwale"
|-
| "Lete Jaao Re Prabhu Ka Naam Thoda"
|-
| "He Chakra Sudarshan Wale"
|-
| "Aa Meri Taqdeer Mein"
|-
| "Auron Ki Ankhiyan Jaane Na"
|-
| "Piye Jaao Maine Bhagwan Zehar Ka Pyala"
|-
| "Koi Jadu Hai Tum Me Zarur"
|-
! Rowspan=5| ''Basre Ki Hoor''
| "Zara Tham Jaana, Zara Ruk Jaana"
| rowspan=5| Shewan Rizvi
|-
| "Dil Si Nazuk Cheez Ko Tum Agar"
|-
| "Pyar Bhara Dil Hai Tere Hawale"
|-
| "Aaye Hai Dil Bechne Husn Ki Sarkar Mein"
|-
| "Mara Teere Mohabbat Mara Paar Jigar"
|-
! Rowspan=6| ''Bhagam Bhag''
| "Hame Koyi Gum Hai"
| rowspan=6| O. P. Nayyar
| rowspan=6| Majrooh Sultanpuri
| rowspan=3| Mohammed Rafi
|-
| "Chale Ho Kaha Karake Ji Bekarar"
|-
| "Tere Teer-e-Nazar Ka Balam"
|-
| "E Ji Jaane Jigar Tum Chale Ho Kidhar"
| rowspan=3| solo
|-
| "Chhalake Chanda Ka Paimana"
|-
| "Ye Duniya Fani Hai Aani Jaani Hai"
|-
!| ''[[C.I.D. (1956 film)|C.I.D.]]''<ref>{{cite web|url=https://m.hindigeetmala.net/movie/c_i_d.htm|title=C I D (1956) movie songs|accessdate=27 April 2022}}</ref>
| "Leke Pehla Pehla Pyaar" (part 2)
| O. P. Nayyar
| Majrooh Sultanpuri
| Mohammad Rafi, Shamshad Begum
|-
!''Chaand''
| "Yeh Dharti Hai Balidaan Ki"
| Anil Biswas
| Prem Dhawan
| Sudha Malhotra
|-
! Rowspan=4| ''[[Chandrakanta (1956 film)|Chandrakanta]]''
| "Kismat Agar Hai Saath Tumhare"
| rowspan=4| N. Dutta
| rowspan=4| Sahir Ludhianvi
| rowspan=2| solo
|-
| "Mast Hokar Zara Jhum Le"
|-
| "Ji Chahta Hai Aaj Kahi Dur Jayiye"
| rowspan=2| Mohammed Rafi
|-
| "Zindagi Tang Hai Mere Shero Utho"
|-
! Rowspan=2| ''Char Minar''
| "Chhup Chhup Jaana Re, Kar Ke Bahanaa"
|Rowspan=2| Shardul Kwatra
|Rowspan=2| Vishwamitra Adil
|Rowspan=2| solo
|-
| "Jaayen Kahan Jaalim Jahan"
|-
! Rowspan=2| ''[[Chhoo Mantar]]''
| "Main To Banke Naino Wali"
| rowspan=2| O. P. Nayyar
| rowspan=2| Jan Nisar Akhtar
| Mohammed Rafi
|-
| "Aaja Re Aaja Na Sata Re Piya"
| solo
|-
! Rowspan=1| ''[[Chori Chori (1956 film)|Chori Chori]]''
| "Mann Bhavan Ke Ghar Jaye Gori"
| Shankar–Jaikishan
| Shailendra
| Lata Mangeshkar
|-
! Rowspan=5| ''Dashera''
| "Kaam Pada Hai Aaj Tera O Ladle"
| rowspan=5| N. Dutta
| Rowspan=5| Kavi Pradeep
| Rowspan=5| solo
|-
| "Baitha Prabhu Aakash Pe"
|-
| "Is Prithvi Patal Gagan Ka"
|-
| "O Mere Kul Ke Taranhar Kunwar Chelaiya Re" (Happy)
|-
| "O Mere Kul Ke Taranhar Kunwar Chelaiya Re" (Sad)
|-
!''Delhi Durbar''
| "Jaam-e-Mohabbat Laayi Hoon"
| S. N. Tripathi
| Shailendra
| solo
|-
!''[[Devta (1956 film)|Devta]]''
| "Phoolon Ke Mele"
| C. Ramchandra
| Rajendra Krishan
| solo
|-
! Rowspan=7| ''Dhake Ki Malmal''
| "Behta Paani Behta Jaaye"
| Robin Chatterjee
| D. N. Madhok
| Kishore Kumar, Manna Dey
|-
| "Kuch Kuch Hone Laga, Mera Dil Khone Laga"
| rowspan=6| O P Nayyar
| rowspan=6| Jan Nisar Akhtar
| rowspan=2| Shamshad Begum
|-
| "Kadar More Jaane Na"
|-
| "Preetam Jab Aan Milenge"
| rowspan=4| solo
|-
| "Jadugar Sanwariya, Aisi Tan Sunai Tune"
|-
| "Ab To Tum Sang Naina Laage"
|-
| "More Man Mein Uthe Hai Pyar"
|-
! Rowspan=6| ''[[Dhola Maru]]''
| "Ae Ji Mori Far Far Ankhiyan Farke
| rowspan=6| S. K. Pal
| rowspan=6| Bharat Vyas
| rowspan=3| solo
|-
| "Le Lo Le Lo Le Lo Ji"
|-
| "Sun Sun Mori Gaural Mat"
|-
| "Aaj Ki Ye Bate Bhool Mat Jayiyo Ji"
| rowspan=3| Manna Dey
|-
| "Ek Samay Dushyant The Bhaarat Ke Samraat"
|-
| "Suno Suno Nagri Ke Logo"
|-
! Rowspan=4| ''Diwali Ki Raat''
| "Aa Ha Ha Ha Deewali"
| rowspan=4| Snehal Bhatkar
| rowspan=4| Pandit Phani
| rowspan=3| solo
|-
| "Tohot Gaya Dil Ab Kya Gaaoon"
|-
| "Jeevan Veena Ki Jab Chhede Man Ke"
|-
| "Pyaar Ka Mara Pyaar Kare Ya Doob Mare"
| Talat Mahmud, Moti Sagar
|-
! Rowspan=3| ''Do Shehzaade''
| "armaan Tadap Kar Jeh Rhae Hai"
| rowspan=3| Lachhiram Tomar
| rowspan=3| Gafil Harnalvi
| rowspan=3| solo
|-
| "Abhi Toh Hum Jawaan Hai"
|-
| "Zindagi Ke Saj Par Naghma-e-Bahaar Gaa"
|-
! Rowspan=2| ''Durgesh Nandini''
| "Raat Andheri Dar Laage Yaki Mori"
| rowspan=2|Hemant Kumar
| rowspan=2| Rajendra Krishan
| rowspan=2| solo
|-
| "Kaise Main Aaun Piya Paas Tumhare"
|-
! Rowspan=5| ''[[Dwarikadheesh]]''
| "Maine Mehandi Rachayi Re Krishan Naam Ki"
| rowspan=5| Avinash Vyas
| rowspan=5| Bharat Vyas
| rowspan=4| solo
|-
| "Dukh Se Harungi Nahi Main, Pukaarungi Nahin"
|-
| "Naam Na Prabhu Ka Meet Sake"
|-
| "O Sakhi Jamuna Kinare"
|-
| "Tarse Ankhiya Daras Ko"
| Manna Dey
|-
! Rowspan=2| ''[[Ek Hi Rasta]]''
| "Kaisi Lagi Jaaye To Jaaye Jiya"
| rowspan=2| Hemant Kumar
| rowspan=2| Majrooh Sultanpuri
| Usha Mangeshkar
|-
| "Bade Bhaiya Laaye Hain"
| solo
|-
! Rowspan=6| ''[[Ek Shola]]''
| "Chanda Se Bhi Pyara Hai"
| rowspan=6| Madan Mohan
| rowspan=6| Majrooh Sultanpuri
| Geeta Dutt
|-
| "Kahin Chal Na De, Raat Ka Kya Thikana"
| Mohammed Rafi
|-
| "Jaadugar Tune Kaisa Jaadu Ye Kiya"
| rowspan=4| solo
|-
| "Chudi Chhanke Chalu Mai Jab Tanke"
|-
| "Habba Ho Re Hayya"
|-
| "Jhum Ke Man Matwala Mera"
|-
! Rowspan=5| ''[[Funtoosh]]''
| "Jo Dekhen Woh Unki Inayat"
| rowspan=5| S. D. Burman
| rowspan=5| Sahir Ludhianvi
| rowspan=2| Kishore Kumar
|-
| "Humein Kisi Pe Dore Dalne Hai"
|-
| "Phul Gendwa Na Maro"
| rowspan=3| solo
|-
| "Pyar Ne Kitne Sapne Dekhe"
|-
| "Johnny Ji Ne Me Kya Hai"
|-
! rowspan=6| ''Gauri Puja''
| "Chale Aao Re Luteri"
|rowspan=6| Manna Dey
|rowspan=6| Gopal Singh Nepali
|rowspan=4| solo
|-
| "Kabhi Bhulo Jo Apni Dagariya Pe"
|-
| "Main Teri Kangal Pujaran"
|-
| "Panghat Pe Jaaun Toh Lambi Dagariya"
|-
| "Jay Bajrang Jay Bajrang, Siyaram Ke Pujari"
| Manna Dey
|-
| "Shehnaiyon Ke Sur Mein Baaji"
| Usha Mangeshkar
|-
!''Ghulam Begum Badshah''
| "Aaj Hai Mujhko Khushi"
| Sudipta
| Shaukat Pardesi
| solo
|-
! Rowspan=1| ''Gul-e-Bakawali''
| "La La Hua Kya Hai Bataa Tu"
| Gyan Dutt
| P. L. Santoshi
| solo
|-
! Rowspan=5| ''Guru Ghantal''
| "Zindagi Ka Sahara Jaata Raha"
| rowspan=5| Lachhiram Tomar
| rowspan=2| Khawar Jama
| rowspan=1| solo
|-
| "Hum Aapke Hain, Humse Parda Na Kijiye"
| Mohammed Rafi
|-
| "O Jaanewale Salamat Jawani Teri"
|rowspan=2| Sarshar Sailani
| rowspan=3| solo
|-
| "Dil-e-Gham Naseeb Ki Dastaan"
|-
| "Bheeni Bheeni Chandni, Bheege Mera Dil"
| Uddhav Kumar
|-
!''[[Halaku (film)|Halaku]]''
| "Aji Chale Aao"
| Shankar–Jaikishan
| Shailendra
| Lata Mangeshkar
|-
!rowspan=8|''Hamara Watan''
| "Zara Sambhal Ke O Deewane"
|rowspan=8| Hemant Kumar
|rowspan=5| S. H. Bihari
|rowspan=4| solo
|-
| "Ankhon Ko Yeh Allah Ka Jalwa"
|-
| "Zameen Aasman Jab Hau Dushman Hamare"
|-
| "Meri Zindagi Mein Koi Aa Gaya"
|-
| "Tum Jo Mile O Sanam"
| rowspan=2| Hemant Kumar
|-
| "Yeh Shokh Sitaare Karte Hain Ishaare"
| rowspan=2| Ravi
|-
| "Pyaar Ka Zamana Hai"
| rowspan=2| solo
|-
| "Jo Dekhe Pyaar Se Koi"
| Raja Mehdi Ali Khan
|-
! Rowspan=7| ''[[Ham Sab Chor Hain (1956 film)|Ham Sab Chor Hain]]''
| "O Mr Benjo, Ishara To Samjho"
| rowspan=7| O. P. Nayyar
| rowspan=7| Majrooh Sultanpuri
| Mohammed Rafi
|-
| "Bhool Ja Ae Dil Pyar Ke Woh Din"
| rowspan=6| solo
|-
| "Gudiya Tere Raaj Me Baje Baja"
|-
| "Beimaan Balma, Gayi Jaan Jaalma"
|-
| "Wo Baat Jispe Ki Dhadke Jiya"
|-
| "Tere Aage Bolna Dushwar Ho Gaya"
|-
| "Tum Hamse Kyun Darta Hai"
|-
! Rowspan=3| ''Harihar Bhakti''
| "Teri Kaisi Anokhi Hai Chaal"
|rowspan=3| K Dutta
|rowspan=2| S P Kalla
|rowspan=2| solo
|-
| "Main Laajwanti Hoon Naar"
|-
| "Chhayi Nainon Mein Barsaat"
| Chandmal Agarwal
|-
! Rowspan=2| ''[[Hatimtai (1956 film)|Hatimtai]]''
| "Jhoomta Hai Dil, Jhoomta Hai Nazar"
| rowspan=2| S. N. Tripathi
| rowspan=2| Raja Mehdi Ali Khan
| Mohammed Rafi
|-
| "Dil Kispe Aa Gaya Hai Tumhara"
| Mubarak Begum
|-
! Rowspan=3| ''Heer''
| "Khamosh Zamana Hai"
| rowspan=3| Anil Biswas
| rowspan=3| Majrooh Sultanpuri
| Mohammed Rafi
|-
| "Chhedi Maut Ne Shahnayi Aaja Aane Wale"
| rowspan=2| solo
|-
| "Jalaa Ke Khaak Na Kar Du"
|-
!''Hotel''
| "Muhabbat Ka Meri Hai Itna Fasana"
| Suresh Kumar, Tabir
| Manmohan Sabir
| solo
|-
! Rowspan=3| ''Husn Banoo''
| "Ya Nabi Salaam Alaika"
|Rowspan=3| Ramlal Hirapanna
| Rowspan=3| Sartaj Rahmani
|Rowspan=3| solo
|-
| "Pyaar Karne Ka Aaya Zamana"
|-
| "Sambhal Kar Baithana"
|-
! Rowspan=8| ''Indar Sabha''
| "Bas Mein Taqdeer Nahin"
|rowspan=8| A. R. Qureshi
|rowspan=7| Shewan Rizvi
|rowspan=2| Mohammed Rafi
|-
| "Chhalla De Diya"
|-
| "Laala Laaa Gune Laala Pyaar Kare Hain"
| Geeta Dutt
|-
| "Kashti Nooh Ko Toofan Se Bachaya Tune"
| Rowspan=5| solo
|-
| "Sanam Badnaam"
|-
| "Laut Aayi Basant Bahaar"
|-
| "Qismat Par Humein Hai Bharosa"
|-
| "Sanam Tum Deewane Kiske"
| Raja Mehdi Ali Khan
|-
! rowspan=6| ''Indra Leela''
| "Sun Lo Jiya Ki Baat"
|rowspan=6| Ajit Merchant
|rowspan=6| Saraswati Kumar Deepak
|rowspan=6| solo
|-
| "Sun Le Mamta Ki Dhun Kaliyan"
|-
| "Tu Baadal Ka Bajaa Mrudang"
|-
| "Yamuna Ke Teere Sakhi Bajte Manzire"
|-
| "Parbar Hat Jaa, Dharti Phat Jaa"
|-
| "Aaj Naam Ki Laaj Ganwaate Tujhko"
|-
! Rowspan=4| ''[[Insaaf (1956 film)|Insaaf]]''
| "Mast Raat Hai, Tu Bhi Saath Hai"
| rowspan=4| Chitragupt
| rowspan=2| Hasrat Jaipuri
| rowspan=3| solo
|-
| "Kahin Toh Phool Khushi Ke"
|-
| "Dil Pe Nazar Hai"
|rowspan=2| Asad Bhopali
|-
| "Do Dil Dhadak Rahe Hai"
| Talat Mahmud
|-
! Rowspan=4| ''[[Inspector (1956 film)|Inspector]]''
| "Mere Nainon Ki"
| rowspan=4| Hemant Kumar
| rowspan=4| S. H. Bihari
| rowspan=4| solo
|-
| "Dekho Kaisi Suhani"
|-
| "Na Poochho Ki Kiski"
|-
| "Bada Mushkil Hai"
|-
!''[[Jagte Raho]]''
| "Thandi Thandi Sawan Ki Phuhar"
| Salil Chowdhury
| Shailendra
| solo
|-
! Rowspan=4| ''Jallad''
| "Dil Ke Phaphole Jal Uthe"
| rowspan=4| Shauqat Dehlvi Nashad
| rowspan=2| Sartaj Rahmani
| rowspan=3| solo
|-
| "Kya Baat Hui Ab Tak Deewabe Nahin Aaya"
|-
| "Main Gale Lag Jaaun Toh Aag Lag Jaaye"
| Jan Nisar Akhtar
|-
| "Husn Yahan Ishq Yahan"
| Shewan Rizvi
| Mohammed Rafi
|-
! Rowspan=3| ''Jayshree''
| "Bahaaron Ne Phoolon De Maara"
| rowspan=3| Chitragupt
| rowspan=3| Gopal Singh Nepali
| rowspan=3| solo
|-
| "Maarun Naina Baan Se"
|-
| "Mausam Hai Taaza Taaza"
|-
! Rowspan=4| ''Kaarwan''
| "Bigda Naseeb Kaun Sanware Tera"
| rowspan=4| S. Mohinder
| rowspan=3| Tanvir Naqvi
| rowspan=4| solo
|-
| "Dekh Le Is Jahan Mein Dil Laga Ke"
|-
| "O Dilwale Hans Le Gaa Le"
|-
| "Ya Rab Meri Bigdi Hui Taqdeer Bana De"
| Sarshar Sailani
|-
! Rowspan=5| ''Kala Chor''
| "Bas Yeh Kasoor Kiya Hai"
| rowspan=5| Shardul Kwatra
| rowspan=4| Prem Dhawan
| rowspan=5| solo
|-
| "Dil Tera Hua Hai Ab Tera"
|-
| "Yeh Hawaayen Yeh Jhoomti Ghatayen"
|-
| "Main Bhi Jaanun, Tu Bhi Jaane"
|-
| "Chori Chori Chandni Hai Ab Tera"
| Verma Malik
|-
! Rowspan=6| ''Kar Bhala''
| "Ui Mere Allah, Kaun Aaya Saamne"
| Rowspan=6| Nisar Bazmi, Chic Chocolate
| Rowspan=6| Majrooh Sultanpuri
| rowspan=2| solo
|-
| "Salaamu Alaika"
|-
| "O Mere Zindagi Ke Sahaare"
| Rowspan=4| Mohammed Rafi
|-
| "O Dilruba Aa Nazar Mila"
|-
| "Dilwale Bhala Kar Bhala"
|-
| "Deewane Agar Magar Kaahe Soche"
|-
! Rowspan=6| ''Kismat''
| "Chand Raat Hai Tu Bhi Saath Hai"
| rowspan=6| Chitragupt
| rowspan=6| Indeevar
| Mohammed Rafi
|-
| "Haseen Raat Sitaro Se Hua Karti Hai"
| rowspan=5| solo
|-
| "Dil Me Kisi Ki Chah Kiye Ja"
|-
| "Ek Jadugar Wo Hai"
|-
| "Keh Le Dil Ki Baat Warna"
|-
| "Ye Sama Ye Chandani Ek Teri Thi Kabhi"
|-
! ''[[Kismat Ka Khel]]''
| "Chalo Le Chalu Main Taaron Mein"
| Shankar–Jaikishan
| Shailendra
| solo
|-
! Rowspan=4| ''Lal-e-Yaman''
| "Arzoo Lene Laagi Angdaiyan"
| rowspan=4| A. R. Qureshi
| rowspan=3| Kaifi Azmi
| rowspan=2| solo
|-
| "O Bhole Bhale Nazren Mila Le"
|-
| "Yeh Chand Yeh Sitare"
| Mohammed Rafi
|-
| "Ae Besakon Ki Ankh Ke Taare Salaam Le"
| Khumar Barabankvi
| solo
|-
! Rowspan=6| ''[[Mem Sahib]]''
| "Kehta Hai Dil Tum Ho Mere Liye"
| rowspan=6| Madan Mohan
| rowspan=6| Rajendra Krishan
| rowspan=2| Talat Mahmud
|-
| "Hamari Gali Aana Achha Ji"
|-
| "Dil Dil Se Mila Kar Dekho"
| rowspan=4| solo
|-
| "Ishq Ik Zahar Sahi"
|-
| "Pyar Ki Ghadiyan Gin Gin Gin"
|-
| "Chuni Muni Chuniya Oye"
|-
! Rowspan=6| ''Mr. Chakram''
| "Ek Gham Ka Din Bhi Gaya"
| rowspan=6| Husnlal–Bhagatram
| rowspan=6| Nakhshab Jarachavi
| rowspan=6| solo
|-
| "Jao Jao Balam Harjai"
|-
| "Nainon Se Nain Mile"
|-
| "Umangon Ki Din Hain"
|-
| "Sheeshe Se Gulaabi Dhalte Ho"
|-
| "Yeh Dil Ki Dhadkanon Se"
|-
! Rowspan=3| ''[[Mr. Lambu]]''
| "Kahan Jaate Ho"
| rowspan=3| O. P. Nayyar
| rowspan=2| Majrooh Sultanpuri
| rowspan=3| solo
|-
| "Kaise Kaise Teer Chalaye"
|-
| "Kitne Sitam Kitne Hi Gham"
| Jan Nisar Akhtar
|-
! Rowspan=2| ''Naqab Posh''
| "Ae Raat Tere Saath Hai"
| rowspan=2| Ramlal Hirapanna
|rowspan=2| Hasrat Jaipuri
|rowspan=2| solo
|-
| "O Dilwale Apna Bana Le"
|-
! Rowspan=2| ''Naya Aadmi''
| "Athanni Jahan Amma"
| Vishwanathan–Ramamurthy
|rowspan=2| Rajendra Krishan
|rowspan=2| solo
|-
| "Main Toh Ganga Jamuna Ki Tata Gayi"
| Vishwanathan–Ramamurthy, Madan Mohan
|-
!''[[Naya Andaz]]''
| "Yeh Raat Ashiqana, Chhaya Sama Suhana"
| O. P. Nayyar
| Jan Nisar Akhtar
| Mohammed Rafi
|-
! Rowspan=4| ''Noor-e-Yaman''
| "Tere Chand Sa Mukhda Jab Dekha"
| rowspan=4| Bulo C. Rani
| rowspan=1| Raja Mehdi Ali Khan
| rowspan=3| solo
|-
| "Har Gayi Re Main Toh"
|rowspan=3| Sartaj Rahmani
|-
| "Bhari Mehfil Hain Aur Daman Hain Khali"
|-
| "Hum Tumse Muhabbat Karte Hain"
| Mohammed Rafi
|-
! Rowspan=4| ''Paisa Hi Paisa''
| "Le Lo Sone Ki Laddu"
|rowspan=4| Anil Biswas
|rowspan=4| Majrooh Sultanpuri
|rowspan=2| Lata Mangeshkar, Kishore Kumar
|-
| "Bas Ek Tum Bin Kal Na Pade"
|-
| "Uf Na Karna Ki Muhabbat Meri"
| Mohammed Rafi
|-
| "Dil Ne Maanga Pyaar"
| Kishore Kumar, Mohammed Rafi
|-
! rowspan=3| ''Panna''
| "Rajaji More Man Ki Paayal"
| rowspan=3| S. N. Tripathi
| rowspan=3| B. D. Mishra
| rowspan=2| solo
|-
| "Main Bansari Tumhari"
|-
| "Dil Kya Badla, Duniya Badli"
| Rekh Sibnis
|-
! Rowspan=2| ''[[Parivar (1956 film)|Parivar]]''
| "Bawali Bana Ke Chhoda Haye Teri Preet Ne"
| rowspan=2| Salil Chowdhury
| rowspan=2| Shailendra
| solo
|-
| "Ek Do Teen"
| Hemant Kumar
|-
! Rowspan=8| ''Ram Navami''
| "Aaja Re Aaja Mere Ram Baghurai"
| rowspan=8| Bulo C. Rani
| rowspan=8| Kavi Pradeep
|rowspan=5| solo
|-
| "Chali Re Chali, Main Toh Chali Re"
|-
| "Kha Lo Meethe Meethe Ber"
|-
| "Main Maang Rahi Hoon Jwala"
|-
| "Patiyan Seekh Lo Re"
|-
| "Baaje Gagariya Pe Taal"
| Mohammed Rafi, S. Balbir
|-
| "Tunak Tunak Bole Mera Ektaara"
| Kavi Pradeep
|-
| "Dhanya Shaadi Shubh Aayi"
| Mohammed Rafi
|-
! Rowspan=4| ''Roop Kumari''
| "Raat Chandni Jiya Jalaye"
|rowspan=4| S. N. Tripathi
| rowspan=4| B. D. Mishra
| rowspan=4| solo
|-
| "Chhanan Chhan Payal Baaje Mori"
|-
| "Humein Kya Khabar Thi"
|-
| "O Pardesi, Aao Pardesi Mere Dware"
|-
! Rowspan=5| ''Samundari Daku''
| "Samaan Pyaara Hai, Din Hai Bade Kaam Ke"
| rowspan=5| Jaidev
| rowspan=5| Vishwamitra Adil
|rowspan=1| S. Balbir
|-
| "Ho Jaata Hai Pyaar Suno Ji"
| rowspan=3| solo
|-
| "Arre Zalim Tu Na Humse Khafaa Hota"
|-
| "Badi Main Bholi Bhaali O Balamwa"
|-
| "Dil Jawaan Hai, Arzoo Jawaan"
| Talat Mahmud
|-
! Rowspan=5| ''[[Sati Anusuya]]''
| "Aaj Kyun Na Karu Main"
| rowspan=5| Shivram Krishnan
| rowspan=5| Bharat Vyas
|rowspan=4| solo
|-
| "Aayi Hai Kaisi Umariya"
|-
| "Apni Rath Ko Thaam Le"
|-
| "Naag Devta Ho"
|-
| "Mausam Ki Raja Ki Aayi Baraat Dekho"
| Talat Mahmud
|-
! Rowspan=4| ''[[Sati Naag Kanya]]''
| "Thandi Hawayein Maare Jhatke"
| rowspan=4| S. N. Tripathi
| rowspan=1| B. D. Mishra
|rowspan=4| solo
|-
| "O Dinbandhu Kyun So Raha"
|rowspan=2| Saraswati Kumar Deepak
|-
| "Ab Tere Haath Re Aarti"
|-
| "Kab Tak Chhupega Aasmaan Megh Odh Ke"
| Gopal Singh Nepali
|-
! Rowspan=3| ''[[Shatranj]]''
| "Kahi Se Shaam Hote Hi"
| rowspan=3| C. Ramchandra
| rowspan=3| Rajendra Krishan
| rowspan=2| solo
|-
| "Baji Kahi Shehnai Aayio Ji"
|-
| "Jawani Thi Soyi Sapnon Me Khoyi"
| C. Ramchandra
|-
! Rowspan=2| ''Sheikh Chilli''
| "Jeene Se Haar Gaye Hum Toh"
| rowspan=2| Vinod
| rowspan=2| Pandit Indra
|-
| "Mera Uncha Makaan"
|-
! Rowspan=3| ''[[Shirin Farhad (1956 film)|Shirin Farhad]]''
| "Mera Aaghaz Shirin Ha"
| rowspan=3| S. Mohinder
| rowspan=3| Tanvir Naqvi
| rowspan=2| Hemant Kumar
|-
| "Ae Dilruba Jaanewafa Tere Siwa Kon Hai Mera"
|-
| "Reh Reh Ke Dil Yeh Pukaare"
| solo
|-
!''Shrimati 420''
| "Main Dhoondhti Hoon Kahan Ho Sanam"
| O. P. Nayyar
| Majrooh Sultanpuri
| Mohammed Rafi
|-
! Rowspan=3| ''Sipahsalar''
| "Ek Anaar Aur Sau Bimaar"
| rowspan=3| Iqbal
| rowspan=3| Farooq Kaiser
| solo
|-
| "Dil Ne Chheda Hai Tarana"
| Talat Mahmud
|-
| "Ankhon Mein Ankhen Daal Ke"
| Mohammed Rafi
|-
! Rowspan=6| ''Sudarshan Chakra''
| "Nartak Anek, Natraj Ek"
| rowspan=6| Chitragupt
| rowspan=6| Gopal Singh Nepali
| rowspan=6| solo
|-
| "Mujhe Mushkil Mein Daale"
|-
| "Mere Roop Ka Jawab Tere Paas"
|-
| "Bheeni Bheeni Raat Chhayi"
|-
| "Koi Din Mein Aake Kare Mujhse Mulaqat"
|-
| "Aaya Insan"
|-
! Rowspan=2| ''Sultan-e-Alam''
| "Aaja Aaja Ki Mere Dil Ki Duniya Tujhe Pukare" (version 1)
| rowspan=2| S. Mohinder
| rowspan=2| Shyamlal Shams
| rowspan=2| solo
|-
| "Aaja Aaja Ki Mere Dil Ki Duniya Tujhe Pukare" (version 2)
|-
! Rowspan=5| ''Talwar Ka Dhani''
| "Aaj Laakhon Ka Sauda"
| rowspan=5| Chitragupt
| rowspan=3| Gopal Singh Nepali
| rowspan=5| solo
|-
| "Deewana Ban Ke Kuchh Na Milega"
|-
| "Neend Na Aayi Raja"
|-
| "Ankhiyan Mila Dil Mein Sama"
|rowspan=2| Anjum Jaipuri
|-
| "Suraj Dekhe Chanda Dekhe"
|-
! Rowspan=5| ''Tankhah''
| "Daata Teri Daya Ka Jisko Mila Sahara"
| rowspan=5| Bhola Shreshtha
| rowspan=4| Shewan Rizvi
| rowspan=5| solo
|-
| "Meri Kashti Jahan Mein Doobi"
|-
| "So Jaa D-e-Nashaad
|-
| "Takrayi Hai Jis Din Se Nazar"
|-
| "Mushkilon Se Ladna Mera Kaam Hai"
| Anjaan
|-
! Rowspan=4| ''[[Yahudi Ki Beti]]''
| "Paayal Na Jaane Kya Boli"
| rowspan=4| Kamal Mitra
| rowspan=2| Kaifi Azmi
| solo
|-
| "Yeh Pyaar Bhara Dil Hai"
| Hemant Kumar
|-
| "Pyaar Ka Jab Paimaane Chhalak Raha"
|rowspan=2| Shyamlal Shams
| rowspan=2| solo
|-
| "Tera Teer Nazar O Sanam Bekhabar"
|-
! Rowspan=4| ''Zarina''
| "Dekho Woh Chand So Gaya Hai"
| rowspan=4| Nisar Bazmi
| rowspan=4| Anjum Jaipuri
| Mohammed Rafi
|-
| "Tu Hi Tu"
|rowspan=2| solo
|-
| "Mere Dil Mein Teri Arzoo"
|-
| "Safeena Bachao"
| Manna Dey
|-
! Rowspan=2| ''Zindagi''
| "Vrindavan Se Jadi Mangayi"
|Rowspan=2| Mohammed D. Shafi
|Rowspan=2| Kaifi Azmi
| Usha Mangeshkar, S. Balbir
|-
| "Lehraye Chunariya Taaron Ki"
| solo
|-
! Rowspan=2| ''Zindagi Ke Mele''
| "Than Thana Than Pe Saari Duniya Dole Re"
|Rowspan=2| Chitragupt
|Rowspan=2| Shewan Rizvi
| Usha Mangeshkar
|-
| "Leke Jiya Dole Piya"
| solo
|-
|}
=== 1957 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! Rowspan=2| ''[[Aasha (1957 film)|Aasha]]''
| "So Jaa Re Chanda"
| rowspan=2| C. Ramchandra
| rowspan=2| Rajendra Krishan
| Rowspan=2| solo
|-
| "[[Eena Meena Deeka (song)|Eena Meena Deeka]]"<ref name="85songs"/>
|-
! Rowspan=3| ''[[Ab Dilli Door Nahin]]''
| "Yeh Chaman Hamara Apna Hai"
| rowspan=3| Dattaram Wadkar
| rowspan=2| Shailendra
| rowspan=2| Geeta Dutt
|-
| "Lo Har Cheez Le Lo"
|-
| "Raghupati Raghav Raja Ram"
| Hasrat Jaipuri
| Geeta Dutt, Shamshad Begum
|-
! Rowspan=3| ''Abhimaan''
| "Akdo Na Humse Piya"
| rowspan=3| Anil Biswas
| rowspan=2| Indeevar
| solo
|-
| "Sambhalo Palla Dori Palla"
| Anil Biswas
|-
| "Chali Jawani Thokar Khane"
| Saraswati Kumar Deepak
| Mohammed Rafi
|-
! Rowspan=2| ''Agra Road''
| "Suno Sunaaye Tumhen Aaj Ek Chhoti Kahani"
| rowspan=2| Roshan
| rowspan=2| Bharat Vyas
| rowspan=2| solo
|-
| "Suno Sunaaye Tumhen Aaj Ek Chhoti Kahani" (sad)
|-
! Rowspan=3| ''Amar Singh Rathaur''
| "Main Hoon Akeli, Sang Na Saheli"
| rowspan=3| Narayan Dutt
| rowspan=3| S P Kalla
| rowspan=2| solo
|-
| "Jaan Na Pehchan, Ghar Aaye Mehmaan"
|-
|-
| "O Dilwalo Baitho Sambhal"
| Sudha Malhotra
|-
! Rowspan=3| ''[[Apradhi Kaun? (1957 film)|Apradhi Kaun?]]''
| "Baat Koi Matlab Ki Hai Zaroor"
| rowspan=3| Salil Chowdhury
| rowspan=3| Majrooh Sultanpuri
| rowspan=3| solo
|-
| "Tere Dil Se Mere Dil Ka Abhi Hona Hai Faisala"
|-
| "Koi Dekhe To Kahe Tujhko Kahi"
|-
! Rowspan=6| ''Arpan''
| "Jogiya Tohse Naina Lagaake Pachhtayi"
| rowspan=6| Jaidev
| rowspan=6| Nayaya Sharma
| rowspan=5| solo
|-
| "Deepak Se Deepak Jal Gaye"
|-
| "Mann Ki Kaa Se Kahoon"
|-
| "Raat Je Pichhale Phaharon Mein"
|-
| "Roun Main Gin Gin Taare"
|-
| "Lo Chori Pakdi Gayi"
| Meena Mangeshkar, Usha Mangeshkar, Sudha Malhotra
|-
! Rowspan=2| ''[[Baarish (film)|Baarish]]''
| "Mr John Ya Baba Khan"
| rowspan=2| C. Ramchandra
| rowspan=2| Rajendra Krishan
| solo
|-
| "Hum To Jani Pyaar Karega"
| C. Ramchandra
|-
! Rowspan=7| ''[[Bada Bhai]]''
| "Chori Chori Dil Ka Lagana Buri Baat Hai"
| rowspan=3| Shauqat Dehlvi Nashad
| Talat Mahmud
| Talat Mahmud
|-
| "Hello Hello Hyderabadi"
| Raja Mehdi Ali Khan
| rowspan=6| solo
|-
| "Ho Saiyan Jadu Dar Gaye"
| rowspan=4| Ehsan Rizvi
|-
| "Kare Jo Dur Mushkile"
|-
| "O Babu Zara Dekhta Ja"
|-
| "Bhagwan Bhagat Binaa Tu"
|-
| "Sakhi Chhed Kare Nand"
| Prem Saxena
|-
! Rowspan=3| ''[[Bade Sarkar]]''
| "Jawani Jhumti Hai Dulhan"
| rowspan=3| O. P. Nayyar
| rowspan=3| Sahir Ludhianvi
| rowspan=3| solo
|-
| "Jab Hum Tum Dono Raazi To"
|-
| "Ankhiyon Ke Nur"
|-
!''[[Bandi (1957 film)|Bandi]]''
| "Kaahe Sharmaaye Gori, Din Yeh Suhaana Hai"
| Hemant Kumar
| Ravi
| solo
|-
! Rowspan=3| ''[[Bansari Bala]]''
| "Sapno Me Aane Wale Nindiya Churane Wale"
| rowspan=3| Kamal Mitra
| rowspan=3| Pandit Phani
| rowspan=3| solo
|-
| "Main Toh Bani Re Jogan Unki"
|-
| "Chhup Chhup Ankhen Roye Humari"
|-
! Rowspan=4| ''Bhakta Dhruva''
| "Mera Lal Bane Mahipal"
| rowspan=4| Basant Prakash
| rowspan=4| Pandit Madhur
| rowspan=4| solo
|-
| "O Udte Panchi Aa Re"
|-
| "Bhagwan Meri Naav Laga De Tu Kinare"
|-
| "Tu Sagar Main Lehar Hoon"
|-
! Rowspan=2| ''Chamak Chandni''
| "Bata Do Zara Sakhiyo Ri Mere"
| rowspan=2| Sardar Malik
| rowspan=2| Qamar Jalalabadi
| rowspan=2| solo
|-
| "Bolo Bolo Dev Hamare"
|-
! Rowspan=2| ''Chandi Puja''
| "Bachpan Hua Khatam Haye Lagne Lagi"
| rowspan=2| Ajit Merchant
| rowspan=2| Kavi Pradeep
| rowspan=2| solo
|-
| "Dig Daiya Chali Meri Naiya"
|-
!''Chhote Babu''
| "Ek Gadi Idhar Se Hamari Chali"
| Madan Mohan
| P. L. Santoshi
| Shamshad Begum
|-
! Rowspan=3| ''[[Dekh Kabira Roya]]''
| "Mere Beena Tum Bin Roye"
| rowspan=3| Madan Mohan
| rowspan=3| Rajendra Krishan
| Lata Mangeshkar
|-
| "Hum Bulate Hi Rahe"
| Mohammed Rafi
|-
| "Ashqon Se Teri Humne Tasveer Banayi Hai"
| solo
|-
! Rowspan=6| ''Duniya Rang Rangeeli''
| "Woh Jo Chahnewale Hai Tere Sanam"
| rowspan=6| O. P. Nayyar
| rowspan=6| Jan Nisar Akhtar
| rowspan=3| Mohammed Rafi
|-
| "Tujhko Na Koi Gham"
|-
| "Saiyan Kyun Aayi Mujhe Angdayi"
|-
| "Saiya Saiya Chhod De Mori Bahiya"
| rowspan=3| solo
|-
| "Are Mera Balam Kitna Zalam"
|-
| "Wo Jo Chahne Wale Hai Tere Sanam (female)"
|-
! Rowspan=4| ''Dushman''
| "Aji Loot Liya Dil Ko Bahane Karke"
| rowspan=4| Husnlal–Bhahatram
| Prem Dhawan
| Mohammed Rafi
|-
| "Bahaar Aayi Ghata Chayi"
| rowspan=3| Tanvir Naqvi
| rowspan=2| solo
|-
| "Dhake Ki Malmal Mangana Balam Ji"
|-
| "Tikhe Hai Nainva Ke Ban Ji"
| S. D. Batish
|-
!''[[Ek Gaon Ki Kahani]]''
| "Kanha Kunda Langda Loola"
| Salil Chowdhury
| Shailendra
| solo
|-
! Rowspan=5| ''Ek Jhalak''
| "Ye Hansta Hua Karvaan Zindagi Ka"
| rowspan=5| Hemant Kumar
| rowspan=5| S. H. Bihari
| rowspan=4| Hemant Kumar
|-
| "Baharen Bhi Dekhi, Nazare Bhi Dekhe"
|-
| "Chal Badalon Se Aage"
|-
| "O Jal Mein Rehnewali"
|-
| "Aaya Kaun Meri Mehfil Mein"
| solo
|-
!''Ek Saal''
| "Tu Jiye Hazaron Saal Gori"
| Ravi
| Prem Dhawan
| solo
|-
!''Fashion''
| "Naya Naya Fashion, Naya Hai Zamana"
| Hemant Kumar
| Bharat Vyas
| solo
|-
! Rowspan=6| ''Garma Garam''
| "Garam Garam Garama Garam Jeb Ho Garam"
| rowspan=6| Vinod
| rowspan=5| P. L. Santoshi
| Mohammed Rafi
|-
| "Bade Door Se Layi Hoon"
| S. D. Batish
|-
| "Mere Saiyan Ne Diye Mujhe"
| rowspan=3| solo
|-
| "Aaye Hai Dware Tihare Hum"
|-
| "Suno Suno Suno Ri Aaj"
|-
| "Humko To Mohabbat Hai"
| Raja Mehdi Ali Khan, P. L. Santoshi
| Shamshad Begum, Mohammed Rafi, S. D. Batish
|-
! Rowspan=2| ''[[Gateway of India]]''
| "Jalwa Jo Dekha Tera Humne"
| rowspan=2| Madan Mohan
| rowspan=2| Rajendra Krishan
| Usha Mangeshkar, Meena Mangeshkar, Shamshad Begum
|-
| "Do Ghadi Woh Jo Paas Aa Baithe"
| Mohammed Rafi
|-
! Rowspan=7| ''Hum Panchhi Hai Ek Daal Ke''
| "Suno Suno Re Kahani Ek Bahut Puraani"
| rowspan=7| N. Dutta
| rowspan=7| P. L. Santoshi
| Shamshad Begum
|-
| "Mee Ho Maratha, Hu Chho Gujrati" (version 2)
| Suman Kalyanpur
|-
| "Lo Chip Gaya Chand, Bahe Hawa Mand Mand"
| rowspan=5| solo
|-
| "Suno Suno Re Kahaani, Ek Bhut Purani (solo)
|-
| "Ek Se Bhale Do Do Se Bhale Chaar"
|-
| "Hum Panchhi Ek Daal Ke" (version 2)
|-
| "Pooja Ke Do Phul Chadhakar"
|-
! Rowspan=2| ''Jahazi Lutera''
| "Masti Bhari Hi Raat Sanam"
|rowspan=2| Bulo C. Rani
|rowspan=2| Sartaj Rahmani
| solo
|-
| "Allah Nigaahwan, Safar Hai Zindegaani"
| Manna Dey
|-
! Rowspan=6| ''Jasoos''
| "Yehi Anjaam Hun Jaison Ka"
| rowspan=6| Anil Biswas
| Kaif Irfani
| rowspan=2| Manna Dey
|-
| "Matlabi Yaar Kiske"
| rowspan=3| Indeevar
|-
| "Babu Zara Bachna Duniya Mithi Kataar"
| rowspan=4| solo
|-
| "Hai Dil Ke Kale Ye Zalim Duniyawale"
|-
| "Tum Kahe Ko Neha Lagaye Sajan"
| rowspan=2| Anand Bakshi
|-
| "Haye Barjori"
|-
! Rowspan=3| ''Johnny Walker''
| "Thandi Thandi Hawa"
| rowspan=3| O. P. Nayyar
| rowspan=3| Hasrat Jaipuri
| rowspan=2| Geeta Dutt
|-
| "Jhuki Jhuki Pyar Ki Nazar"
|-
| "Beikhtiyar Hoke, Pyar Ka Shikar Hoke"
| Mohammed Rafi
|-
! rowspan=4| ''Kitna Badal Gaya Insaan''
| "Gori Chali Piya Ke Saath Mila Ke Haath"
| rowspan=4| Hemant Kumar
| rowspan=4| S. H. Bihari
| Hemant Kumar
|-
| "Hasinon Ka Bura Ho Jo Hame Barbaad Karte Hai"
| Shamshad Begum, Bande Hasan, Mohammed Rafi
|-
| "Pade Hai Aag Ke Sholon Mein"
| rowspan=2| solo
|-
| "Jab Ladti Hai Nigahen, Dil Hota Hai Deewana"
|-
! Rowspan=4| ''Laxmi''
| "Aao Gori Suno Karo Na Inkar Ji"
| rowspan=4| Avinash Vyas
| rowspan=4| Qamar Jalalabadi
| rowspan=3| Manna Dey
|-
| "Meri Bholi Bhali Rani"
|-
| "Reti Me Kyo Mahal Banaya"
|-
| "Nacho O Duniya Nach Rahi"
| solo
|-
! Rowspan=3| ''[[Maharani]]''
| "Main Bhi Pagal, Tu Bhi Pagal"
| rowspan=3| Basant Prakash
| Wali Saheb
| rowspan=3| solo
|-
| "Aa Jaye Phir To Ek Dil"
| rowspan=2| Hasrat Jaipuri
|-
| "Chanda Pe Jawani Ha"
|-
! Rowspan=3| ''[[Mai Baap]]''
| " Dil To Razaamand Hai"
| rowspana=3| O. P. Nayyar
| rowspan=2| Anjaan
| rowspan=3| solo
|-
| "Bhatak Gayi Kis Raah"
|-
| "Gaalon Pe Tere Gori Rangat Nayi"
| Qamar Jalalabadi
|-
! Rowspan=2| ''Mehfil''
| "Mere Dil Ki Lagi Tujhko Bhi Lag Jaye"
| rowspan=2| Shauqat Dehlvi Nashad
| rowspan=2| Khumar Barabankvi
| rowspan=2| solo
|-
| "Pyara Mukhda Ho Behki Behki Chaal"
|-
! Rowspan=6| ''Mera Salaam''
| "Unhe Dil Ne Pukara Hai"
| rowspan=6| Hafiz Khan
| rowspan=6| Shewan Rizvi
| rowspan=4| solo
|-
| "Dil Unko De Aaye Unhe Aankho Me Rakh Laye"
|-
| "Ek Lafz Ishq Tha Ki Jo Afsana Ban Gaya"
|-
| "Bale Bale Bale Bale Bulbule"
|-
| "Hasin Chaand Sitaaron Kaa Vaasta"
| rowspan=2| Talat Mahmud
|-
| "Husn Kehte Hai Mujhe Noor Ka Shola"
|-
!''Mirza Sahiban''
| "Aaj Tukde Huye Mere Dil Ke"
| Shardul Kwatra
| Verma Malik
| solo
|-
!''[[Miss Mary (1957 film)|Miss Mary]]''
| "Sakhi Ri Sun Bole Papiha"
| Hemant Kumar
| Rajendra Krishan
| Lata Mangeshkar
|-
! Rowspan=6| ''Mohini''
| "Chhup Chhup Ke Dil Ki Dhadkanon Mein"
| Rowspan=6| N. Dutta
| rowspan=4| Raja Mehdi Ali Khan
| rowspan=6| solo
|-
| "Dil Ke Karib Aa Gaye Dekha Jo Door Se"
|-
| "Kahan Karti Hai Duniya Mera Nanha Chand Jaisa Hai"
|-
| "Taqdeer Ki Thokar Aisi"
|-
| "Nainon Me Jhume Hai Pyar"
| rowspan=2| Hasrat Jaipuri
|-
| "Rehta Hai Tera Naam"
|-
!''[[Mother India]]''
| "Dukh Bhare Din Beete Re Bhaiya"
| Naushad
| Shakeel Badayuni
| Mohammed Rafi, Manna Dey, Shamshad Begum
|-
! Rowspan=2| ''Mr. X''
| "Kitna Haseen Hai Jahaan, Jaadubhara Hai Samaa"
| Rowspan=2| N. Dutta
| rowspan=2| Tanvir Naqvi
| rowspan=2| solo
|-
| "Beech Bhare Bazaar Karenge Unse Ankhen Char"
|-
! Rowspan=3| ''Naag Lok''
| "Yeh Kaisi Bijli Giri"
| rowspan=3| Ramlal Hirapanna
| rowspan=3| Bharat
| rowspan=2| solo
|-
| "Aas Liye Aakhir Kailasi"
|-
| "Shankar Bhole Bhaale"
| Mohammed Rafi
|-
! Rowspan=5| ''Naag Mani''
| "Jaanewali Dulhan Khushi Khushi Jaana"
| Rowspan=5| Avinash Vyas
| rowspan=5| Kavi Pradeep
| Usha Mangeshkar
|-
| "Aaj Kisi Ki Bujhi Huyi"
| rowspan=3| solo
|-
| "Kisi Ke Do Chumkte Nayan"
|-
| "Mera Rath Chale Chatpat Dauda Jaaye"
|-
| "Yeh Hai Pataal Ki Duniya Naagon"
| Manna Dey
|-
! Rowspan=2| ''[[Narsi Bhagat]]''
| "Sab Ki Naiya, Paar Lagaiya"
| rowspan=2| Ravi
| rowspan=2| Gopal Singh Nepali
| rowspan=2| Manna Dey
|-
| "Akhil Brahmand Mein"
|-
! rowspan=6| ''[[Nau Do Gyarah]]''<ref name="hindigeetmala1957">{{cite web|url=https://m.hindigeetmala.net/movie/nau_do_gyarah.htm|title=Nau So Gyarah (1957) movie songs|accessdate=30 April 2022}}</ref>
| "Kali Ke Roop Mein"
| rowspan=6| S. D. Burman
| rowspan=6| Majrooh Sultanpuri
| rowspan=2| Mohammad Rafi
|-
| "Aaja Panchhi Akela Hai"
|-
| "Kya Ho Phir Jo Din Rangeela Ho"
| Geeta Dutt
|-
| "Aankhon Mein Kya Ji"
| Kishore Kumar
|-
| "Dhalki Jaaye Chunariya Hamari"
| rowspan=2| solo
|-
| "Jaane Jigar Haye Haye"
|-
! Rowspan=2| ''Nausherwan-e-Adil''
| "Mere Dard-e-Jigar Ki Har Dhadkan"
| rowspan=2| C. Ramchandra
| rowspan=2| Parvez Shamsi
| Zohrabai Ambalewali, Chandbala
|-
| "Yeh Nazaqat, Yeh Aalam Shabab"
| solo
|-
! Rowspan=2| ''Neelofar''
| "Yeh Habiba Nazuk Bhaar Hoon Main"
| rowspan=2| Basant Prakash
| rowspan=2| Hasrat Jaipuri
| rowspan=2| solo
|-
| "Tere Darbar Mein"
|-
! rowspan=5| ''[[Naya Daur (1957 film)|Naya Daur]]''<ref>{{cite web|url=https://m.hindigeetmala.net/movie/naya_daur.htm|title=Naya Daur (1957) movie songs|accessdate=30 April 2022}}</ref>
| "Maang Ke Saath Tumhaara"<ref name="85songs"/>
| rowspan=5| O. P. Nayyar
| rowspan=5| Sahir Ludhianvi
| rowspan=3| Mohammad Rafi
|-
| "Uden Jab Jab Zulfein Teri"
|-
| "Saathi Haath Badhana"
|-
| "Reshmi Salwar Kurta Jaali Ka"
| Shamshad Begum
|-
| "Ek Deewana Aate Jaate"
| solo
|-
! Rowspan=3| ''Pak Daman''
| "Jahaan Wale Garibon Ki Tu Hi Bigdi"
| rowspan=3| Ghulam Mohammad
| rowspan=3| Shakeel Badayuni
| rowspan=3| solo
|-
| "Pyaar Ki Chandni Leke Raat Aayegi"
|-
| "Sun Dard Bhari Faryaad"
|-
! Rowspan=6| ''Paristan''
| "Ankho Ko Chaar Kar Ke"
| rowspan=6| S. N. Tripathi
| rowspan=6| Raja Mehdi Ali Khan
| rowspan=6| solo
|-
| "Chandni Muskura Rahi Hai"
|-
| "Hanste Hai Chand Tare"
|-
| "Tera Hi Sahara Hai Zamane Mein"
|-
| "Qamar Bandhe Huye"
|-
| "Mere Dil Se Aate Hai Yeh Sada"
|-
! rowspan=5| ''Parvin''
| "Sajan Rasiya Se, Balam Chhalia Se"
|rowspan=5| A. R. Qureshi
| rowspan=2| Shewan Rizvi
| rowspan=5| solo
|-
| "Kaahe Ko Laaye More Kangana"
|-
| "Pakad Liya Aanchal Marodi"
|rowspan=3| Raja Mehdi Ali Khan
|-
| "Nashe Mein Hamen Koi Yaad Aa Raha Hai"
|-
| "Gar Naqab Ulta Toh"
|-
! Rowspan=3| ''Patal Pari''
| "Kya Kya Khel Dikhaye Kayamat Dhaye"
| rowspan=3| S. Mohinder
| Tanvir Naqvi
| Mubarak Begum
|-
| "Haal-e-Dil Apna Suna Loon"
| rowspan=2| Sarshar Sailani
| rowspan=2| solo
|-
| "Nigah Nichi Kiye"
|-
! rowspan=2| ''Pawan Putra Hanuman''<ref name="hindigeetmala1957"/>
| "Piya Piya Piya Tu Bol Re Papiha"
| rowspan=2| Chitragupt
| rowspan=2| Gopal Singh Nepali
| solo
|-
| "Din Tarana, Tandin Tarana"
| Usha Mangeshkar
|-
! rowspan=2| ''[[Paying Guest (1957 film)|Paying Guest]]''<ref name="hindigeetmala1957"/>
| "O Nigahen Mastana"
| rowspan=2| S. D. Burman
| rowspan=2| Majrooh Sultanpuri
| rowspan=2| Kishore Kumar
|-
| "Chhod Do Aanchal"
|-
! rowspan=7| ''[[Qaidi (1957 film)|Qaidi]]''<ref>{{cite web|url=https://m.hindigeetmala.net/movie/qaidi.htm|title=Qaidi (1957) movie songs|accessdate=30 April 2022}}</ref>
| "Chhaya Hai Sama, Mera Dil Hai Jawaan"
| rowspan=7| O. P. Nayyar
| rowspan=7| Jan Nisar Akhtar
| rowspan=2| Mohammad Rafi
|-
| "Yu Muskura Ke Samne Aaya Na"
|-
| "Bedardi Preet Nahi Jaani"
| Usha Mangeshkar
|-
| "Kuchh To Aisi Baat Kar Zalim"
| rowspan=4| solo
|-
| "Humse Bhi Aate Jaate Ankh Milana"
|-
| "Ho Saiya Ja Ja Mai Teri Baat Kabhi"
|-
| "Chahe Tu Na Bata Mujhe Sab Hai Pata"
|-
! Rowspan=10| ''[[Sati Pariksha]]''
| "Hum Gwaal Baalgopal" (version 1)
| rowspan=10| Sanmukh Babu Upadhyay
| rowspan=8| Saraswati Kumar Deepak
| rowspan=10| solo
|-
| "Hum Gwaal Baalgopal" (version 2)
|-
| "Aaya Hai Mausam Suhana"
|-
| "Aaj Laaj Sankat Mein Meri"
|-
| "Laut Jaa Naagan, O Ri Suhaagan"
|-
| "Naagan Ka Sansar Yehi Hai"
|-
| "O Chanda Ruk Jaa"
|-
| "Ore Pardesiya More Man Basiya"
|-
| "Keh Do Koi Taqdeer Ke Dhokhe Mein"
| rowspan=2| Nazmi Kanpuri
|-
| "Kismat Bhi Khela Karti Hai"
|-
! rowspan=5| ''[[Sharada (1957 film)|Sharada]]''
| "O Chand Jahan Woh Jaaye"
| rowspan=5| C. Ramchandra
| rowspan=5| Rajendra Krishan
| Lata Mangeshkar
|-
| "Aaju Re, Dil Men Hai Laagi Mere"
| rowspan=2| solo
|-
| "Aa Lehraye Jiya, Balkhaye Jiya"
|-
| "Bhagwaan Zara Dhire Bol"
| Shamshad Begum, Kamal Barot, Chandbala
|-
| "Acha Hai Mauka Kisne Hai Roka"
| C. Ramchandra
|-
!rowspan=2| ''Shahi Bazar''
| "Dil Mastaane Jhoom Le"
|rowspan=1| Dhaniram
| Aziz Kashmiri
| solo
|-
| "Ae Khuda Tere Sahare Jee Rahe Hain"
| S. Haridarshan
| Madan Parihar
| Mohammed Rafi
|-
! Rowspan=2| ''Shehzadi''
| "Aurat Bhukhi Pyar Ki"
| rowspan=2| S. D. Batish
| rowspan=2| Qamar Jalalabadi
| rowspan=2| solo
|-
| "Kali Ghata Aayi Jhoom Ke"
|-
! Rowspan=2| ''[[Sheroo]]''
| "Gore Gore Badalon Pe Hoke Sawar"
| rowspan=2| Madan Mohan
| rowspan=2| Kaif Irfani
| Talat Mahmud
|-
| "Kaise Samjhaun Piya Tumko"
| solo
|-
!''[[Suvarna Sundari]]''
| "Sar Pe Matki, Akhiyan Bhatki"
| Adi Narayana Rao
| Bharat Vyas
| solo
|-
! Rowspan=4| ''Taj Poshi''
| "Badli Mein Chand Chhupa"
| rowspan=4| Bipin–Babul
| P. L. Santoshi
| rowspan=3| solo
|-
| "Dil Dhadkne Laga Sharmayi Nazar"
| rowspan=3| Anjum Jaipuri
|-
| "Nazren Bachana Kaisa Ji"
|-
| "Tum Ho Kahin Ke"
|-
! Rowspan=2| ''[[Talash (1957 film)|Talash]]''
| "Raat Hai Sitaro Wali Pyar Ke Nazaro Wali"
| rowspan=2| C. Ramchandra
| rowspan=2| Rajendra Krishan
| solo
|-
| "Are Meri Nazar Ka Teri Nazar Se Hua Samana Re"
| C. Ramchandra
|-
! rowspan=5| ''[[Tumsa Nahin Dekha (1957 film)|Tumsa Nahin Dekha]]''<ref>{{cite web|url=https://m.hindigeetmala.net/movie/tumsa_nahin_dekha.htm|title=Tumsa Nahin Dekha (1957) movie songs|accessdate=30 April 2022}}</ref>
| "Dekho Kasam Se"
| rowspan=9| O. P. Nayyar
| rowspan=5| Majrooh Sultanpuri
| rowspan=4| Mohammad Rafi
|-
| "Sar Par Topi Laal"
|-
| "Ye Mast Mast Bin Piye"
|-
| Aaye Hain Dur Se, Milane Hazur Se"
|-
| "Yun Toh Humne Lakhon Haseen Dekhe Hai" (female)
| solo
|-
!rowspan=4| ''[[Ustad (1957 film)|Ustad]]''
| "Kiske Liye Bekarar Gori Aaj Tera Pyar"
| rowspan=4| Jan Nisar Akhtar
| Mohammed Rafi
|-
| "Bedardi Beimaan Natkhat Saanwariya"
| Sudha Malhotra
|-
| "Soja Mere Raaj Dulare"
| rowspan=2| solo
|-
| "Yeh Sama Phir Kahan Aa Bhi Jaa"
|-
! rowspan=2| ''[[Yahudi Ki Ladki (1957 film)|Yahudi Ki Ladki]]''
| "Yeh Chand Bata Kabhi Tume Pyaar Kiya Hai"
|rowspan=2| Hemant Kumar
|rowspan=2| S. H. Bihari
| solo
|-
| "Dil Bekaraar Mera, Kare Intezaar Tera"
| Hemant Kumar
|-
! Rowspan=3| ''Zamana''
| "Chale Bajate Seeti Jeevan Ki Raaho Mein"
| rowspan=3| Salil Chowdhury
| rowspan=3| Prem Dhawan
| rowspan=3| solo
|-
| "Badal Jaye Duniya"
|-
| "Ulajh Jaye Naina Toh Kaun"
|-
|}
=== 1958 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! rowspan=4| ''[[Aakhri Dao]]''<ref>{{cite web|url=https://m.hindigeetmala.net/movie/aakhri_dao.htm|title=Aakhri Dao (1958) movie songs|accessdate=30 April 2022}}</ref>
| "Hamsafar Sath Apna Chhod Chale"
| rowspan=4| Madan Mohan
| rowspan=4| Majrooh Sultanpuri
| Mohammed Rafi
|-
| "Haay Unki Wo Nigahe"
| rowspan=3| solo
|-
| "Na Dar Sanam Laga Bhi Le"
|-
| "Tu Hi Aake Sambhal Ise"
|-
! rowspan=5| ''[[Adalat (1958 film)|Adalat]]''<ref>{{cite web|url=https://m.hindigeetmala.net/movie/adalat.htm|title=Adalat (1958) movie songs|accessdate=30 April 2022}}</ref>
| "Zamin Se Hamen Aasamaan Par Bithaa Ke"
| rowspan=5| Madan Mohan
| rowspan=5| Rajendra Krishan
| rowspan=2| Mohammed Rafi
|-
| "Jab Din Hasin Dil Ho Jawan"
|-
| "Ja Ja Re Ja Sajna (solo)
| solo
|-
| "Ja Ja Re Ja Sajna" (duet)
| Lata Mangeshkar
|-
| "Dupatta Mera Malmal Ka"
| Geeta Dutt
|-
! Rowspan=6| ''Aji Bas Shukriya''
| "Hone Lagaa Ye Dil Men Dard Kaisa"
| rowspan=6| Roshan
| Shailendra
| rowspan=2| solo
|-
| "Sach Kehta Hai Johnny Walker"
| Farooq Kaiser
|-
| "O Data De Hamko Bhi Ek Pyara Bangala"
| rowspan=2| Prem Dhawan
| rowspan=2| Mohammed Rafi
|-
| "Kadaki Tera Hi Naam To Clerky"
|-
| "Kya Dhadak Dhadak Dil Dhadke" (version 1)
| rowspan=2| Usha Khanna
| Usha Khanna
|-
| "Kya Dhadak Dhadak Dil Dhadke" (version 2)
| solo
|-
! Rowspan=2| ''Alladin Ka Chirag''
| "Aau Udke O Raja Tere Dwar"
| rowspan=2| S Rajeswara Rao
| rowspan=2| Pal Premi
| rowspan=2| solo
|-
| "Karo Na Der Re Ankhiya Na Pher Re"
|-
! Rowspan=7| ''[[Amar Deep (1958 film)|Amar Deep]]''
| "Dekh Hamein Awaaz Na Dena" (happy)
| rowspan=7| C. Ramchandra
| rowspan=7| Rajendra Krishan
| rowspan=2| Mohammed Rafi
|-
| "Dekh Humein Awaaz Na Dena" (sad)
|-
| "Is Jahan Ka Pyaar Jhutha"
| Manna Dey, Mohammed Rafi
|-
| "Yeh Jee Chahta Hai Kisi Din"
| rowspan=4| solo
|-
| "Lagi Apni Nazar Katar Banke"
|-
| "Jali Lo Dim Tana"
|-
| "Kisi Din Zara Dekh Mera Bhi Hoke"
|-
! Rowspan=2| ''[[Baghi Sipahi (1958 film)|Baghi Sipahi]]''
| "Sama Ye Pyar Ka"
| rowspan=2| Shankar–Jaikishan
| rowspan=2| Shailendra
| rowspan=2| Manna Dey
|-
| "Chinchan Pappulu Chhui Mui Mai"
|-
!''Balyogi Upmanyu''
| "He Bhole Bhagwan"
| Chitragupt
| Bharat Vyas
| solo
|-
! rowspan=4| ''[[Chalti Ka Naam Gaadi]]''<ref>{{cite web|url=https://m.hindigeetmala.net/movie/chalti_ka_naam_gaadi.htm|title=Chalti Ka Naam Gadi (1958) movie songs|accessdate=30 April 2022}}</ref>
| "Main Sitaron Ka Tarana"
| rowspan=4| S. D. Burman
| rowspan=4| Majrooh Sultanpuri
| Rowspan=2| Kishore Kumar
|-
| "Haal Kaisa Hai Janaab Ka"<ref name="85songs"/>
|-
| "Hum Hai Tumhare"
| Sudha Malhotra
|-
| "Ruk Jao Na Ji"
| solo
|-
!''Chalta Purza''
| "Dil Pe Kaisi Bekhudi Chhane Lagi"
| Aziz Hindi
| Jan Nisar Akhtar
| solo
|-
! rowspan=3| ''[[Chandan (film)|Chandan]]''<ref>{{cite web|url=https://m.hindigeetmala.net/movie/chandan.htm|title=Chandan (1958) movie songs|accessdate=30 April 2022}}</ref>
| "Jab Thoda Thoda"
| rowspan=3| Madan Mohan
| rowspan=3|
| rowspan=3| solo
|-
| "Chahe Lakh Zamana Roke"
|-
| "Sun Radha, Mohan Tera Kala"
|-
! rowspan=3| ''[[Chandu (1958 film)|Chandu]]''<ref>{{cite web|url=https://m.hindigeetmala.net/movie/chandu.htm|title=Chandu (1958) movie songs|accessdate=30 April 2022}}</ref>
| "Babuji Mujhe Dil Mein Chhupa Lo"
| rowspan=10| Bipin–Babul
| rowspan=3| Raj Baldev Raj
|| solo
|-
| "Do Nain Milakar Matwale"
| Agha Sarwar
|-
| "Bheegi Bheegi Channi Hain"
| Mohammed Rafi
|-
! Rowspan=7| ''[[Chaubees Ghante]]''
| "Humein Haal-E-Dil Tumse Kehna Hain"
| rowspan=7| Raja Mehdi Ali Khan
| [[Talat Mahmood]]
|-
| "Chhan Chhan Karti Daulat"
| rowspan=2| Mohammad Rafi
|-
| "Ek Dil Humare Paas Hain"
|-
| "Aaj Ka Salaam Lo"
| rowspan=3| solo
|-
| "Haye Kisika Rangin Aanchal"
|-
| "Nigahein Milake Huyi Main Deewani"
|-
| "Jawani Jalake Bedardi Raah"
| [[Shamshad Begum]]
|-
!| ''[[Detective (1958 film)|Detective]]''
| "Raahi Chal Sambhal Ke"
|| Mukul Roy
|| Shailendra
|| solo
|-
! Rowspan=5| ''[[Devar Bhabhi]]''
| "Kise Thi Khabar" (version 1)
| rowspan=5| Ravi
| rowspan=5| Raja Mehdi Ali Khan
| rowspan=4| solo
|-
| "Kise Thi Khabar" (version 2)
|-
| "Hazaaron Hasraten"
|-
| "Ye Kaisi Rut Aayi"
|-
| "Chori Chhup Jaye Re, Dakaiti Chhup Jaye"
| [[Shamshad Begum]]
|-
! Rowspan=5| ''[[Dilli Ka Thug]]''
| "C A T Cat Mane Billi"
| rowspan=5| Ravi
| Majrooh Sultanpuri
| rowspan=2| Kishore Kumar
|-
| "Yeh Raaten, Yeh Mausam, Nadi Ka Kinara"
| Shailendra
|-
| "Seekh Le Babu Pyar Ka Jadu"
| rowspan=2| S. H. Bihari
| rowspan=3| solo
|-
| "Yeh Bahar, Yeh Sama"
|-
| "Kisi Ka Dil Lena Ho"
| Majrooh Sultanpuri
|-
!''[[Do Mastane]]''
| "Gulon Ka Khilaoon"
| Hemant Kumar
| Indeevar
| solo
|-
! Rowspan=5| ''[[Do Phool (1958 film)|Do Phool]]''
| "Bachpan Ka Mora Tora Pyar Suhana"
| rowspan=5| Vasant Desai
| rowspan=5| Hasrat Jaipuri
| rowspan=2| [[Lata Mangeshkar]]
|-
| "Ruthi Jaye Re Gujariya, Na Bole Re"
|-
| "Kanha Na Chhedo Bansuri Re"
| rowspan=3| solo
|-
| "Main Bezuban Hoon Panchhi"
|-
| "Aayi Pari Rangbhari, Kisne Pukara"
|-
! Rowspan=6| ''[[Dulhan (1958 film)|Dulhan]]''
| "I Love You O Madam"
| rowspan=6| Ravi
| rowspan=5| S. H. Bihari
| rowspan=2| Geeta Dutt
|-
| "Toh Phir Tumko"
|-
| "Kaise Jaaun Mai Piya, Mora Maane Na Jiya"
| Hemant Kumar
|-
| "Jiya Sharmaye Nazar Jhuki Jaaye"
| rowspan=3| solo
|-
| "Naari Jeevan, Gehra Sagar, Dono Ek Saman"
|-
| "Dil Na Jala Gham Ko Bhula Ja"
|-
! Rowspan=5| ''Farishta''
| "Jo Waqt Pe Kaam Aa Jaye Aji"
| rowspan=5| O. P. Nayyar
| Qamar Jalalabadi
| Mohammed Rafi
|-
| "Meri Ankhiyo Me Ankhiya Na Daal"
| rowspan=4| Jan Nisar Akhtar
| rowspan=4| solo
|-
| "Aaj Maine Jana Mera Dil Hai Diwana"
|-
| "Balam Bada Jhutha, Sajan Bada Jhutha"
|-
| "Karke Ishara Nera Dil Le Gaya"
|-
!''Ghar Grihasthi''
| "Haye Haye Tera Husn Muradabadi"
| Shashank Banerjee
| Pandit Madhur
| Mohammed Rafi
|-
! Rowspan=3| ''Gauri Shankar''
| "Mera Bhola Jogi, Milne Ka Bela Kab Hogi"
| rowspan=3| Shivram Krishnan
| rowspan=3| S P Kalla
| rowspan=3| solo
|-
| "Mat Geet Preet Je Gaa"
|-
| "Sharan Tumhaari Jagat Vidhata"
|-
! Rowspan=4| ''[[Ghar Sansar]]''
| "Sapno Ki Dor Bandhi Palko Ka Palna"
| rowspan=4| Ravi
| S. H. Bihari
| rowspan=2| solo
|-
| "Bhabhi Kare Apil Aur Phir Devar Bane Vakil"
| rowspan=3| Majrooh Sultanpuri
|-
| "Honth Gulaabi Gaal Katore"
| Mohammed Rafi
|-
| "Yeh Hawa Yeh Nadi Ka Kinara"
| Manna Dey
|-
! Rowspan=4| ''Gopichand''
| "Haule Haule O Ri Hawa Tu Chal"
| rowspan=4| Avinash Vyas
| rowspan=4| Bharat Vyas
| rowspan=4| solo
|-
| "Naya Hai Suraj Nayi Hai Kirne"
|-
| "Pal Bhar Naina Khol Jogi Re"
|-
| "Rut Aaye Rut Jaye Suhagan"
|-
! Rowspan=2| ''Great Show of India''
| "Aadhi Aadhi Raat Koi Sapno Mein"
| rowspan=2| Avinash Vyas
| rowspan=2| Qamar Jalalabadi
| Manna Dey
|-
| "O Jaanewale Maan Bhi Jao"
| solo
|-
! rowspan=3| ''Hathkadi''
| "Mai Jau Kaha Lut Gaya Mera Jahaan"
| rowspan=3| Shauqat Dehlvi Nashad
| rowspan=2| Prem Saxena
| rowspan=2| solo
|-
| "Ke Chal Diye"
|-
| "Duniya Hai Badi Zaalim"
| Indeevar
| Mohammed Rafi
|-
! rowspan=5| ''[[Howrah Bridge (film)|Howrah Bridge]]''<ref>{{cite web|url=https://m.hindigeetmala.net/movie/howrah_bridge.htm|title=Howrah Bridge (1958) movie songs|accessdate=30 April 2022}}</ref>
| "Goraa Rang Chunariyaa Kaali"
| rowspan=5| O. P. Nayyar
| rowspan=4| Qamar Jalalabadi
| rowspan=3| Mohammed Rafi
|-
| "Muhabbat Ka Hath Javani Ka Palla"
|-
| "Dekh Ke Teri Nazar"
|-
| "Aaiye Meherbaan"
| rowspan=2| solo
|-
| "Yeh Kya Kar Daala Tune"
| Hasrat Jaipuri
|-
! rowspan=6| ''Hum Bhi Kuchh Kam Nahin''
| "Ye To Hai Mere Diwano Ka Mohalla"
| rowspan=6| S. D. Batish
| rowspan=3| Anand Bakshi
| rowspan=5| solo
|-
| "Ja Ja Ja Ja Laut Ja Parwane"
|-
| "Bachna Pare Pare"
|-
| "Inquilab Zindabad Inquilab Zindabad"
| Kaif Irfani
|-
| "Sau Hasino Me Koi Ek Hasin"
| Sharki Bhopali
|-
| "Jadugarni Chin Ki"
| Rahil Gorakhpuri
| Mohammed Rafi
|-
! Rowspan=5| ''Jailor''
| "Mujhi Mein Chhupkar"
| rowspan=5| Madan Mohan
| rowspan=5| Rajendra Krishan
| rowspan=3| Mohammed Rafi
|-
| "Meri Hirni Jaisi Chaal" (version 1)
|-
| "Meri Hirni Jaisi Chaal" (version 2)
|-
| "Pyaar Ki Nishaniyan"
| rowspan=2| solo
|-
| "Raggi Pappi Lalli"
|-
! ''Jisne Tera Naam Liya''
| "Tere Bina Insaaf Mera Kaun Karega"
| Shanti Kumar Dedai
| Pandit Madhur
| Mohammed Rafi
|-
! Rowspan=7| ''[[Kabhi Andhera Kabhi Ujala]]''
| "Baahon Ko Zara Lehra De"
| rowspan=7| O. P. Nayyar
| rowspan=4| Majrooh Sultanpuri
| Manna Dey
|-
| "Main Hoon Chanda Si Chhori"
| Shamshad Begum
|-
| "Ajab Hamaree Hai Jindagani"
| rowspan=5| solo
|-
| "Ladaye Saiya Naina Toh"
|-
| "Zara Sone De Balam"
| rowspan=3| Hasrat Jaipuri
|-
| "Bhagwan Tujhe Rote Hue Dil Ne Pukara"
|-
| "Dilo Ka Rishta Hai Aisa Rishta"
|-
! rowspan=5| ''[[Kala Pani (1958 film)|Kala Pani]]''<ref>{{cite web|url=https://m.hindigeetmala.net/movie/kala_pani.htm|title=Kala Pani (1958) movie songs|accessdate=30 April 2022}}</ref>
| "Achchha Ji Main Haari"
| rowspan=5| S. D. Burman
| rowspan=5| Majrooh Sultanpuri
| rowspan=2| Mohammed Rafi
|-
| "O Chhupane Wale Ab Teri"
|-
| "Nazar Lagi Raja Tore Bangle Par"<ref name="85songs"/>
| rowspan=3| solo
|-
| "Dil Laga Ke Kidhar Gayi Pyare"
|-
| "Jab Naam E Mohabbat Le Ke Kisi"
|-
!''Kamini''
| "Koi Barbaad Hota Hai"
| Vinod
| Aziz Kashmiri
| solo
|-
! rowspan=6| ''[[Khazanchi (1958 film)|Khazanchi]]''<ref>{{cite web|url=https://m.hindigeetmala.net/movie/khazanchi.htm|title=Khazanchi (1958) movie songs|accessdate=30 April 2022}}</ref>
| "Tum Saamne Aakar Jis Dam Jawaani Dikhate Ho"
| rowspan=6| Madan Mohan
| rowspan=13| Rajendra Krishan
| Mohammed Rafi
|-
| "Zulam Leke Aaya, Sitam Leke Aaya"
| rowspan=5| solo
|-
| "Aayi Diwali Aayi Kaise Ujale Lai"
|-
| "Talam Tol Kare, Ho Rahe Pare Pare"
|-
| "Meri Ankhiyo Me Jhume Dekho Saajan Ka Pyar"
|-
| "Aankhon Aankhon Me Ho Gaye Mast Ishare"
|-
! Rowspan=2| ''Karigar''
| "Main Hoon Rosy, Main Hoon Mary"
| rowspan=2| C. Ramchandra
| C. Ramchandra
|-
| "Boot Chappal Sandal"
| Usha Mangeshkar
|-
! Rowspan=5| ''Khota Paisa''
| "Ye Zalim Nigaho Ki Ghaat"
| rowspan=5| Madan Mohan
| rowspan=4| solo
|-
| "Jogiya Jogiya Kaha Jane Laga"
|-
| "O Jane Jaan Ek Muddat Ke Baad Yahan Aa"
|-
| "Holi Hai Holi Sakhi"
|-
| "Adayen Jab Ho Latkedar"
| Mohammed Rafi
|-
! Rowspan=7| ''[[Lajwanti]]''
| "Koi Aaya Dhadkan Kehti Hai"
| rowspan=7| S. D. Burman
| rowspan=7| Majrooh Sultanpuri
| rowspan=6| solo
|-
| "Gaa Mere Man Gaa"
|-
| "Kuchh Din Pahale Ek Taal Mein"
|-
| "Chanda Re, Chanda Re, Chhupe Rehna"
|-
| "Chanda Re, Chanda Re, Chhupe Rehna" (sad)
|-
| "Ek Hans Ka Joda"
|-
| "Chandamama Mere Dwar Aana"
| Manna Dey
|-
! Rowspan=4| ''[[Lala Rukh]]''
| "Pyaas Kuchh Aur Bhi Bhadka Di"
| rowspan=4| Khayyam
| rowspan=4| Kaifi Azmi
| rowspan=4| solo
|-
| "Le Ja Meri Duayen"
|-
| "Pyas Kuch Aur Bhi Bhadka Di"
|-
| "Alvida Jane Wafa Tera Nigaheba Khuda"
|-
! rowspan=5| ''Light House''
| "Tang Aa Chuke Hai Kashmakash-e-Zindagi Se Hum"
| rowspan=5| N Dutta
| rowspan=5| Sahir Ludhianvi
| rowspan=4| solo
|-
| "O Kis Jagha Jayen"
|-
| "Naino Se Naina Laage"
|-
| "Chima Chima Chimchima"
|-
| "Tu Kaala Main Gori Balam Tori"
| Mohammed Rafi
|-
! ''[[Madhumati]]''
| "Kancha Le Kanchi Lai Lajo"
| Rowspan=1| Salil Chowdhury
| Shailendra
| Sabita Chowdhury, Ghulam Mohammad
|-
! Rowspan=2| ''Malik''
| "Padhoge Likhoge Banoge Nawab"
| rowspan=2| Ghulam Mohammad
| Rowspan=2| Shakeel Badayuni
| Rowspan=2| solo
|-
| "Kiya Tha Pyar"
|-
! Rowspan=3| ''Matwala''
| "Ankh Mili Dil Mila"
| rowspan=3| R. Sudarshanan
| rowspan=3| Hargobind Duggal
| Rowspan=2| Mohammed Rafi
|-
| "Jadu Hai Kya Jadu Hai"
|-
| "Thoda Thoda Gussa Re"
| solo
|-
! Rowspan=3| ''Mausi''
| "Kya Ho Gaya Kya Ho Gaya"
| rowspan=3| Vasant Desai
| rowspan=3| Bharat Vyas
| rowspan=3| solo
|-
| "He Bambo Bambolo"
|-
| "Ja Ri Ja Bayi Mai Deu Bidaayi"
|-
! Rowspan=7| ''[[Maya Bazaar]]''
| "Har Phool Mein Masti Hai"
| rowspan=7| Chitragupt
| rowspan=2| Gopal Singh Nepali
| rowspan=3| Mohammed Rafi
|-
| "Akhiyon Mein Samaate Ho"
|-
| "Gore Gore Gulabi Gaal Re"
| rowspan=2| Indeevar
|-
| "Haste Ho Taaron Tum, Kisi Ka Pyar Rota Hai"
| rowspan=4| solo
|-
|-
| "Ja Ja Re Chhaliya Kanhaiya"
| Saraswati Kumar Deepak
|-
| "Gora Ho Chahe Kaala, Albela Hai Dilwala"
| rowspan=2| Gopal Singh Nepali
|-
| "Kaise Chalungi Mai Akeli"
|-
! Rowspan=3| ''Mehndi''
| "Gaao Ri Sakhi, Aayi Khushi Ki Ghadi"
| rowapan=3| Ravi
| Sarvar
| solo
|-
| "Meri Dulhan Bareli Se Aayi Re Aayi Re"
| rowspan=2| Khumar Barabankvi
| Usha Mangeshkar
|-
| "Jhulo Lalna, Jhulo Jhulo Jhulo Lalna"
| Chandbala
|-
! Rowspan=2| ''Miss 1958''
| "Dil Ne Dil Ko Kiya Ishaara"
| rowspan=2| N. Dutta
| rowspan=2| Tanvir Naqvi
| rowspan=2| solo
|-
| "Rang Bhare Din Hain"
|-
! Rowspan=5| ''Miss Punjab Mail''
| "Chanchal Nain Mila Ke Dil Mera Loot Liya"
| rowspan=5| B. N. Balo
| rowspan=4| Raja Mehdi Ali Khan
| Rowspan=5| solo
|-
| "Prem Nagar Se Aaya"
|-
| "O Babu Gentleman, Dekh Ke Tikhe Tikhe Nain"
|-
| "Jadugar Sawariya"
|-
| "Ae Ji Shama Kahi Bhi Jalti Hai"
|Zebunnisa
|-
! Rowspan=7| ''Mr. Cartoon M.A.''
| "Mai Mai Qartoon (Version 1)"
| rowspan=7| O. P. Nayyar
| rowspan=7| Hasrat Jaipuri
| rowspan=2| Mohammed Rafi, Geeta Dutt
|-
| "Mai Mai Qartoon (Version 2)"
|-
| "Mera Dil Ghabraye Meri Aankh Sharmaye"
| Mohammed Rafi
|-
| "Dil Tera Diwana O Mastani Bulbul"
| Geeta Dutt
|-
| "Nain Hamare Do"
| rowspan=3| solo
|-
| "Chanda Chale Jhoom Ke"
|-
| "Main Hoon Miss Bombay"
|-
! rowspan=6| ''[[Mujrim]]''
| "Jaane Jigar Yun Hi Agar"
| rowspan=6| O. P. Nayyar
| rowspan=6| Majrooh Sultanpuri
| Mohammed Rafi
|-
| "Sun Sun Madras Ki Chhori"
| Geeta Dutt
|-
| "Baithe Baithe Dur Se Lage Ho"
| rowspan=4| solo
|-
| "Jaye Na Pakad Kahi"
|-
| "Karke Pyar Pyar Pyar Jadu Dar Dar"
|-
| "Do Nigahen Teri Do Nigahen Meri"
|-
! Rowspan=2| ''Naag Champa''
| "Kis Chhaliya Ki Nainon Ki Jaal Mein"
|rowspan=2| Manna Dey
|rowspan=2| Anjaan, I. C. Kapoor
|rowspan=2| solo
|-
| "Pehli Milan Ki Raat Hai"
|-
! Rowspan=2| ''Naya Paisa''
| "O Meri Bulbul-e-Baghdad"
| rowspan=2| S. Mohinder
| rowwpan=2| Raja Mehdi Ali Khan
| rowspan=2| Mohammed Rafi
|-
| "Tere Ghungroo Jo Chham Chham Baaje"
|-
! Rowspan=6| ''Night Club''
| "Sanam Jab Ghar Se Nikal Ke Chalo"
| rowspan=6| Madan Mohan
| rowspan=6| Majrooh Sultanpuri
| Rowspan=5| solo
|-
| "Jhoom Ke Chale Ye Chale"
|-
| "Main Hoon Jaadugar"
|-
| "Tum Bade Woh Ho, Dil Jalate Ho"
|-
| "Dil Le Ke Bhage Jaate Ho"
|-
| "Nigahon Ka Ishara Hai Bahon Ka Sahara Hai"
| Shamshad Begum
|-
! Rowspan=2| ''[[Parvarish (1957 film)|Parvarish]]''
| "Jane Kaisa Jadu Kiya Re"
|rowspan=2| Dattaram Wadkar
|rowspan=2| Hasrat Jaipuri
| Sudha Malhotra
|-
| "Jhume Re Jhume Re Ho Meri God"
|-
! Rowspan=7| ''Pati Parmeshwar''
| "O Naari Apni Shakti Ko Pehchan"
| rowspan=7| Avinash Vyas
| rowspan=7| Bharat Vyas
| rowspan=6| solo
|-
| "Ek Palde Mein Pati Biraje"
|-
| "Chalo Re Man Ganga Jamuna Teer"
|-
| "Chhod Ke Gehne Mai Pehnungi Mala"
|-
| "Jogi Jogi Jog Laga Ke Baithe"
|-
| "Meri Thokar Se Dharti Ka"
|-
| "Khan Khan Khan Kya Bol Raha Hai"
| Manna Dey
|-
! rowspan=10| ''[[Phagun]]''<ref>{{cite web|url=https://m.hindigeetmala.net/movie/phagun.htm|title=Phagun (1958) movie songs|accessdate=30 April 2022}}</ref>
| "Ek Pardesi Mera Dil Le Gaya"<ref name="85songs"/>
| rowspan=10| O. P. Nayyar
| rowspan=10| Qamar Jalalabadi
| rowspan=4| Mohammed Rafi
|-
| "Tum Rooth Ke Mat Jaana"
|-
| "Mai Soya Ankhiya Miche"
|-
| "Bana De, Bana De, Bana De Prabhu Ji"
|-
| "Sun Jaa Pukaar, Beet Na Jaaye Ye Bahaar"
| rowspan=6| solo
|-
| "Piyaa Piyaa Na Laage Moraa Jiya"
|-
| "Teer Ye Chhupke Chalaaya Kisne"
|-
| "Shokh Aankhen Tujh Ko Bula Rahi Hain"
|-
| "Chham Chham Ghungroo Bole"
|-
| "Aur To Koi Nahin Sahaara"
|-
! Rowspan=4| ''[[Phir Subah Hogi]]''
| "Phir Na Kije Meri Gustakh Nigahi Ka Gila"
| rowspan=4| Khayyam
| rowspan=4| Sahir Ludhianvi
| rowspan=2| Mukesh
|-
| "Woh Subah Kabhi Toh Aayegi" (duet)
|-
| "Woh Subah Kabhi To Aayegi" (female)
| rowspan=2| solo
|-
| "Do Boonde Saawan Ki Haaye"
|-
!''Post Box No. 999''
| "Bichhde Hue Phir Milenge"
| Kalyanji–Anandji
| P. L. Santoshi
| Mohammed Rafi
|-
! rowspan=8| ''Raagini''
| "Piya Main Hoon Patang Tu Dor"
| rowspan=8| O. P. Nayyar
| rowspan=8| Jan Nisar Akhtar
| rowspan=4| Kishore Kumar
|-
| "Main Bangali Chhokra"
|-
| "Mujhko Baar Baar Yaad Na Aa"
|-
| "Mud Mud Hamako Dekhata"
|-
| "Iss Duniya Se Nirala Hu Main"
| Geeta Dutt
|-
| "Hoon Main Raat Guzaari Haye"
| rowspan=3| solo
|-
| "Chhota Sa Balma"
|-
| "Mere Dil Ki Paayal"
|-
!''Raj Pratigya''
| "Ab Toh Dil Ko Chain"
| Sanmukh Babu Upadhyay
| Bharat Vyas
| solo
|-
! Rowspan=3| ''[[Raj Tilak (1958 film)|Raj Tilak]]''
| "[[Kannum Kannum Kalanthu|Aaja Tu Raja Aaja]]"
| rowspan=3| C. Ramchandra
| rowspan=3| P. L. Santoshi
| Sudha Malhotra
|-
| "Jaan-E-Jigar, Dekho Idhar"
| solo
|-
| "Chalna Sambhal Sambhalke Ji"
| Mohammed Rafi
|-
! Rowspan=3| ''Raja Beta''
| "Diwana Dil Mastana Dil"
| rowspan=3| Roshhan
| Rowspan=3| Rajendra Krishan
| rowspan=2| solo
|-
| "Jane Ye Kaisa Ishara"
|-
| "Main To Dil Aise Ko Doon"
| Meena Kapoor
|-
! Rowspan=3| ''Ram Bhakta Hanuman''
| "Jago Jago Jago Swami Antaryami"
| rowspan=3| Ajit Merchant
| rowspan=3| Saraswati Kumar Deepak
| rowspan=3| solo
|-
| "Chapal Chameli Aaj"
|-
| "Hasti Huyi Gati Huyi Aayi Hawaye"
|-
! Rowspan=4| ''Sachche Ka Bol Bala''
| "Badi Mushkil Se Mile Ho"
| rowspan=4| Nisar Bazmi
| rowspan=4| Saba Afghani
| rowspan=2| Mohammed Rafi
|-
| "Gore Gaal Pe Til Kala Kala"
|-
| "Dekh Le Pyar Me Kaisa Maza"
| rowspan=2| solo
|-
| "Bairi Payaliya Se Dar Mohe Lage"
|-
! ''[[Sadhna (1958 film)|Sadhna]]''
| "Sambhal Aye Dil"
| S. D. Burman
| Sahir Ludhianvi
| Mohammed Rafi
|-
! Rowspan=4| ''Sanskar''
| "Radhe Tere Aansu Pi Ko Rok Na Payenge"
| rowspan=4| Anil Biswas
| rowspan=2| Indeevar
| rowspan=4| solo
|-
| "Kaanp Kaanp Jata Hai"
|-
| "Hath Mera Tham Ke Chhod Dena Na Ji"
| rowspan=2| Sarshar Sailani
|-
| "Dil Shaam Se Dooba Jaata Hai"
|-
! Rowspan=5| ''Shan-e-Hatim''
| "Dua Hai Yahi Tazdar Madina Ki Dekhe"
| rowspan=5| A. R. Qureshi
| Zebunnisa
| Mohammed Rafi
|-
| "Jhairan Hu Kis Se Pyar Karu"
| rowspan=4| Raja Mehdi Ali Khan
| rowspam=4| solo
|-
| "Duniya Ki Har Ek Chiz Pukare"
|-
| "Jinna Dekhiya Mere Ishq Di Masti"
|-
| "Meri Ankhe Hai Paimane"
|-
! Rowspan=2| ''Sitamgar''
| "Taqti Rah Kamal Nain Kab Se"
| rowspan=2| G Ramanathan, B N Bali
| rowspan=2| Sajan Bihari
| rowspan=2| solo
|-
| "Main Bhi Teri, Dil Bhi Tera"
|-
! Rowspan=4| ''Sitaron Se Aage''
| "Chanda Ke Chandni Ka Jadu"
| rowspan=7| S. D. Burman
| Rowspan=4| Majrooh Sultanpuri
| rowspan=4| solo
|-
| "Roye Jiya Aan Milo Sajna" (version 1)
|-
| "Roye Jiya Aan Milo Sajna" (version 2)
|-
| "Aaj Kal Parso Mein"
|-
! Rowspan=3| ''[[Solva Saal]]''
| "Dekho Ji Mera Haal Badal Gaye"
| rowspan=3| Majrooh Sultanpuri
| Mohammed Rafi, Sudha Malhotra
|-
| "Nazar Ki Katari Ye Kaisi Chale"
| rowspan=2| solo
|-
| "Ye Bhi Koi Ruthne Ka Mausam Hai"
|-
! rowspan=7| ''Sone Ki Chidiya''<ref>{{cite web|url=https://m.hindigeetmala.net/movie/sone_ki_chidiya.htm|title=Sone Ki Chidiya (1958) movie songs|accessdate=30 April 2022}}</ref>
| "Pyaar Par Bas To Nahin Hai Mera" (duet)
| rowspan=7| O. P. Nayyar
| rowspan=6| Sahir Ludhianvi
| rowspan=2| Talat Mahmud
|-
| "Sach Bataa Tu Mujh Pe Fidaa"
|-
| "Raat Bhar Ka Hai Mehmaan Andhera"
| Mohammed Rafi
|-
| "Pyar Par Bas To Nahi Hai Mera"
| rowspan=4| solo
|-
| "Saiyan Jab Se Ladi Hai Tose Ankhiya"
|-
| "Chhuk Chhuk Chhuk Chhuk Rel Chale"
|-
| "Bekas Ki Tabahi Ke Samaan Hazaro Hai"
| Majrooh Sultanpuri
|-
! Rowspan=4| ''Suhaag''
| "Chamko Poonam Chanda Is Dil Ka Sandesh"
| rowspan=4| T G Lingappa
| rowspan=4| Ehsan Rizvi
| rowspan=2| solo
|-
| "Raja Pyare Aaja Pyare"
|-
| "Is Lok Mein Is Raah Mein"
| rowspan=2| Manna Dey
|-
| "Nache Hum Ab Gaye Hum"
|-
! Rowspan=5| ''Sun To Le Haseena''
| "Zara Sun Toh Lo Haseena"
| rowspan=5| S. Mohinder
| rowspan=2| Sarshar Sailani
| rowspan=5| Mohammed Rafi
|-
| "Jawan Ankhon Mein Kitna Sarur Hota Hai"
|-
| "Musafir Rah Kar Paida Khuda Manzil"
| Rahil Gorakhpuri
|-
| "Husn Ki Mehfil Saji Saji"
| rowspan=2| Anand Bakshi
|-
| "Banke Teerandaz Jan Le Lena"
|-
! rowspan=5| ''Talaq''<ref>{{cite web|url=https://m.hindigeetmala.net/movie/talaq.htm|title=Talaq (1958) movie songs|accessdate=30 April 2022}}</ref>
| "Mere Jeevan Mein Kiran Banke Bikharnewale"
| rowspan=5| C. Ramchandra
| rowspan=5| Kavi Pradeep
| rowspan=2| Manna Dey
|-
| "Zara To Aankhen Dekho Mila Ke"
|-
| "Nayee Umar Ki Kaliyo Tumko"
| rowspan=2| solo
|-
| "Lagi Jo Takkar, Are Kha Gaye Chakkar"
|-
| "Aye Duniya Ke Maa Baap"
| Aarti Mukherjee
|-
!rowspan=3| ''Taxi 555''
| "Naa Naa Haan Haan Karke"
|rowspan=3| Sardar Malik
|rowspan=3| Prem Dhawan
|rowspan=2| S. Balbir
|-
| "Bhale Din Aanewale Hai"
|-
| "Ho Gaye Gentleman Balaam"
| Mohammed Rafi
|-
! Rowspan=4| ''Taxi Stand''
| "Yeh Hawa, Yeh Fiza, Yeh Sama"
| rowspan=4| Chitragupt
| Rowspan=4| Majrooh Sultanpuri
| rowspan=2| solo
|-
| "Humko Toh Teri Nigahon Ne Mara"
|-
| "Aise Mein Aapse"
| rowspan=2| Mohammed Rafi
|-
| "Aana Hai Toh Chale Aao"
|-
! Rowspan=2| ''Ten O'Clock''
| "Chand Nikla Sitare Dhime Pade"
| rowspan=2| Ram Ganguly
| rowspan=2| Shyam
| rowspan=2| solo
|-
| "Hum Dil Ki Tassalli Ka Samaan Luta Baithe"
|-
! Rowspan=3| ''Zimbo''
| "Ye Raat Hai Mahtabi Sama Hai Diwane"
| rowspan=3| Chitragupt
| rowspan=3| Majrooh Sultanpuri
| rowspan=3| solo
|-
| "Lo Chale Hum Behke Kadam"
|-
| "Ye Kiya Tune Kaisa Jadu"
|-
! Rowspan=8| ''[[Zindagi Ya Toofan]]''
| "Mujhe Hai Zara Jazbe Dil Aazmana"
| rowspan=8| Shauqat Dehlvi Nashad
| rowspan=8| Nakhshab Jarachavi
|rowspan=2| Talat Mahmood
|-
| "Hamara Kyaa Hai Hum Tadpe"
|-
| "Aye Dilwalo Pyar Na Karna"
| rowspan=3| solo
|-
| "Mubaarik Sabko Phulon Ka Sajaa Kar"
|-
| "Zindagi Hai Ya Koi Tufan Hai (Female)
|-
| "Badi Mushkil Se Hum Samjhe"
| rowspan=2| Shamshad Begum
|-
| "Angdaai Bhi Woh Lene Na Paaye"
|-
| "Khub Ulfat Me Paydari Hai"
| Sudha Malhotra
|-
|}
=== 1959 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! Rowspan=5| ''Angan''
| "Mere Ram Chala Banwas"
| rowspan=5| Roshan
| rowspan=6| Rajendra Krishan
| rowspan=3| solo
|-
| "Akhiyon Mein Basiyo Raja"
|-
| "Chhupne Ki Cheez Hai"
|-
| "Ghughat Se Kyu Naina Jhanke"
| Mohammed Rafi
|-
| "Sitamgar Dekh Le Najar Bar Dekh Le"
| Geeta Dutt
|-
! ''Baap Bete''
| "Mere Dil Mein Aanewale"
| rowspan=5| Madan Mohan
| Mohammed Rafi
|-
! Rowspan=4| ''Bank Manager''
| "Saba Se Yeh Keh Do"
| rowspan=3| Jalal Malihabadi
| Rowspan=4| solo
|-
|"Dariya Ka Kinara Haay Haay"
|-
| "Ajee O Zaraa Apni Nigahon Ko Sambhalo"
|-
|"Mera Dilbar Hazaro Me Ek Hai"
| Anwar Farrukhabadi
|-
! Rowspan=3| ''[[Bhai Bahen]]''
| "[[Saare Jahan Se Achcha]]"
| rowspan=3| N. Dutta
| Raja Mehdi Ali Khan
| rowspan=3| solo
|-
| "In Ujale Mehlon Ke Tale"
| rowspan=2| Sahir Ludhianvi
|-
| "Bachcho Sunn Lo Meri Baat"
|-
! Rowspan=2| ''Bhakt Prahlad''
| "Main Toh Hari Gun Gaaun"
| rowspan=2| S. N. Tripathi
| rowspan=2| B. D. Mishra
| rowspan=2| solo
|-
| "Suno Mann Ki Pukaar"
|-
! Rowspan=4| ''Bus Conductor''
| "Zindagi Me Rang Bhara Hai Pyar Ka"
| rowspan=4| Bipin–Babul
| rowspan=4| Noor Devasi
| rowspan=2| Mohammed Rafi
|-
| "Paas Humare Aayiye Aji Dur Se Na"
|-
| "Dil Se Mai Aur Mujhse Dil Takra Gaya"
| rowspan=2| solo
|-
| "Radha Ki Paayal, Kanhaiya Ki Choli"
|-
! Rowspan=5| ''C.I.D. Girl''
| "Khoche Jhoot Nahi"
| rowspan=5| Roshan
| rowspan=3| Anand Bakshi
| rowspan=2| Mohammed Rafi
|-
| "Badi Buland Meri Prabhu Ki Pasand"
|-
| "Darde Dil Jara Jara Deta Hai Bada Maza"
| Sudha Malhotra
|-
| "Ek Baat Sun Matwale"
| rowspan=2| Hasrat Jaipuri
| rowspan=2| solo
|-
| "Ankhiyon Mein Dil Khoya"
|-
! Rowspan=2| ''Chacha Zindabad''
| "Nazarein Utha Ke Zara Dekh Le"
| rowspan=2| Madan Mohan
| rowspan=2| Rajendra Krishan
| rowspan=2| solo
|-
| "Jao Ji Jao Tumhe Maan Liya Saiyan"
|-
! Rowspan=4| ''Chaand Ki Duniya''
| "Aa Aa Aa Jhoom Rahi Hai Mast Baharen"
| rowspan=4| S. D. Batish
| rowspan=4| Qamar Jalalabadi
| Mohammed Rafi
|-
| "Aayi Hawani Badi Deewani"
| Manna Dey
|-
| "Sachchi Hai Agar Preet Meri"
| rowspan=2| solo
|-
| "Yeh Kisne Jaadu Daala Hai"
|-
! Rowspan=5| ''Charnon Ke Dasi''
| "Aaj Pariksha Ki Ghadi"
| rowspan=5| Avinash Vyas
| rowspan=5| Bharat Vyas
| rowspan=5| solo
|-
| "Mere Man Ke Meet"
|-
| "Rok Nahin Sakta Koyi"
|-
| "Roti Chhod Ke Sang Ki Saheliya"
|-
| "Sun Le Sun Le Kyo Behra Bana"
|-
!''[[Chhoti Bahen]]''
| "Kali Anar Ki Na Itna Satao"
| Shankar–Jaikishan
| Hasrat Jaipuri
| Manna Dey
|-
! Rowspan=2| ''Commander''
| "Meri Baat Koi Maane Ya Na Maane"
| rowspan=4| Chitragupt
| rowspan=2| Sarshar Sailani
| rowspan=4| solo
|-
| "Tere Liye O Bewafa"
|-
! Rowspan=2| ''Daaka''
| "Le Le Yeh Dil, Tera Nazrana Hai"
| rowspan=2| Majrooh Sultanpuri
|-
| "Thandi Hawa Lag Na Jaaye"
|-
! Rowspan=5| ''Deep Jalta Rahe''
| "Tohre Nainwa Mein Humre Nainwa Khoyi Gawa"
| rowspan=5| Roshan
| Rahil Gorakhpuri
| rowspan=5| solo
|-
| "Dali Pe Baithi Thi Das Chidiya"
| rowspan=4| Shailendra
|-
| "Dekho Ji Ras Le Gayo Bhanwra Beiman"
|-
| "Cham Cham Geet Sunaye"
|-
| "Ek Daur Naya Duniya Me Shuru"
|-
! Rowspan=3| ''[[Dhool Ka Phool]]''
| "Dhadakane Lage Dil Ke Taaron Ki Duniya"
| rowspan=3| N. Dutta
| rowspan=3| Sahir Ludhianvi
| rowspan=3| Mahendra Kapoor
|-
| "Jhukti Ghata, Gaati Hawa, Sapne Jagaye"
|-
| "Jo Tum Muskura Do"
|-
! Rowspan=5| ''Didi''
| "Pyaar Hi Mujhe Darkar Hai"
| rowspan=5| N. Dutta
| rowspan=5| Sahir Ludhianvi
| rowspan=2| solo
|-
| "Mamaji Ki Rocket Pe Hum"
|-
| "Bachchon Tum Taqdeer Ho"
| rowspan=3| Mohammed Rafi
|-
| "Humne Suna Tha Ek Hai Bharat" (version 1)
|-
| "Humne Suna Tha Ek Hai Bharat" (version 2)
|-
! Rowspan=6| ''[[Dil Deke Dekho]]''
| "Dil Deke Dekho"
| rowspan=6| Usha Khanna
| rowspan=6| Majrooh Sultanpuri
| rowspan=6| Mohammed Rafi
|-
| "Bade Hain Dil Ke Kaale"
|-
| "Yaar Chulbula Hai, Haseen Dilruba Hai"
|-
| "Pyar Ki Kasam Hai"
|-
| "Kaun Ye Aaya Mehfil Mein"
|-
| "Rock Rock Baby Rock"
|-
! Rowspan=3| ''Do Dost''
| "Mat Samajh Mujhe Tu Kangala"
| rowspan=3| S. Mohinder
| rowspan=3| Bharat Vyas
| Mohammed Rafi
|-
| "Sun Sun Ri Saheli"
| rowspan=2| solo
|-
| "Oye Bach Ke Rehna Babu"
|-
!rowspan=4| ''Do Gunde''
| "Aise Machal Ke, Nain Badal Ke"
| rowspan=4| Ghulam Mohammad
| rowspan=4| Majrooh Sultanpuri
| rowspan=1| solo
|-
| "Kaise Bijli Chamak Gayi"
| Manna Dey, Chaand Kumari, Mohammed Rafi
|-
| "Lehron Mein Jhool Ke, Khushiyon Mein Phool Ke"
| Mohammed Rafi
|-
| "Kahin Chalo Ki Din Hai Bahar Ke"
| Mahendra Kapoor
|-
! Rowspan=7| ''[[Do Ustad (1959 film)|Do Ustad]]''
| "Khayalon Pe Mere Chhaye Huye"
| rowspan=7| O. P. Nayyar
| rowspan=7| Qamar Jalalabadi
| Mohammed Rafi, Shamshad Begum
|-
| "Nazron Ke Teer Maare Kas"
| rowspan=5| Mohammed Rafi
|-
| "Tere Dil Ka Makaan Saiyan"
|-
| "Rik Rik Tik Tik Tik Boom Boom Chik"
|-
| "Tu Ladki Main Ladka"
|-
| "Ruk Ruk Kahan Chali Deewani
|-
| "Aaya Tumpe Dil Aaya Kya Karu"
| solo
|-
! ''Doctor Z''
| "Yeh Udaas Aasman, Raat Yeh Duan"
| Manohar Arora
| Akhtar Romani
| solo
|-
! Rowspan=3| ''Duniya Na Mane''
| "Sitaron Chhup Jaana, Nazar Na Lagana"
| rowspan=3| Madan Mohan
| rowspan=3| Rajendra Krishan
| rowspan=2| solo
|-
| "Jaa Re Jaa Re Jaa Re Anadi Balama"
|-
| "Aeingan Baingan Tali Taleingan"
| Shamshad Begum
|-
! Rowspan=2| ''Fashionable Wife''
| "Yeh Bhi To Insaan" (version 1)
| rowspan=2| Suresh Talwar
| rowspan=2| Bharat Vyas
| rowspan=2| solo
|-
| "Yeh Bhi To Insaan" (version 2)
|-
! Rowspan=6| ''Flying Rani''
| "Mujhko Sanam Tere Pyar Ne"
| rowspan=6| B N Bali
| rowspan=6| Nazmi Kanpuri
| rowspan=2| Manna Dey
|-
| "Sapne Mein Saiyan Tum Aaya Na Karo"
|-
| "Mujhe Teri Nazar Ne Maara"
| rowspan=4| solo
|-
| "Chupke Se Meri Gali Aana"
|-
| "Chalna Sher Akad Ke Koi Bigade Koi Badke"
|-
| "Is Desh Je Hum Rakhwale Hai"
|-
! Rowspan=7| ''Forty Days''
| "Ho Kaho Aake Bahaar Kare Mera Singaar"
| rowspan=7| Babul
| rowspan=7| Kaifi Azmi
| Mukesh
|-
| "Nasib Hoga Mera Meharaban"
| Manna Dey
|-
| "Parvat Parvat Dera Dala"
| Mahendra Kapoor
|-
| "Dekho Ye Tare Khoye Khoye"
| rowspan=4| solo
|-
| "Jhuti Mohabbat Jhuti Adayen"
|-
| "Dhadke Dil Dildar Ka"
|-
| "Baithe Hain Rehguzar"
|-
! Rowspan=6| ''Grihalakshmi''
| "Kab Darshan Doge Saanwre"
| rowspan=6| Avinash Vyas
| rowspan=6| Bharat Vyas
| rowspan=6| solo
|-
| "Is Duniya Me Kuch Insaan"
|-
| "Darshan Bin Ab"
|-
| "Ek Nayan Mein Saas"
|-
| "Lal Chunariya Pili Choli"
|-
| "Lal Lal La Layi Ji Main"
|-
!''Heera Moti''
| "Ghar Ke Jogi Ka Bhes"
| Roshan
| Shailendra
| Usha Mangeshkar
|-
! Rowspan=6| ''[[Insaan Jaag Utha]]''
| "Mehnatkash Insaan Jaag Utha"
| rowspan=6| S. D. Burman
| rowspan=6| Shailendra
| rowspan=2| Mohammed Rafi
|-
| "Chaand Sa Mukhda Kyon Sharmaya"
|-
| "Ankhein Chaar Hote Hote"
| Rowspan=3| solo
|-
| "Baat Badhti Gayi Khel Khel Mein"
|-
| "Baharon Se Nazaron Se Yeh Dekho"
|-
| "Jaanu Jaanu Ri Kahin Khanaki Hai Tori Kangana"
| Geeta Dutt
|-
! Rowspan=3| ''[[Jaalsaaz]]''
| "Teri Nazar Ne Kiya Kya Ishara"
| rowspan=2| G. S. Kohli
| rowspan=2| Farooq Kaiser
| Mohammed Rafi
|-
| "Dil To Hamar Lai Lai"
| rowspan=2| solo
|-
| "Kal Maine Ek Sapna Dekha"
| Naqsh Lyallpuri
|-
! Rowspan=2| ''Jagir''
| "Na Na Zara Ruk Ja, Zara Ruk Jaa"
| rowspan=2| Madan Mohan
| rowspan=2| Raja Mehdi Ali Khan
| rowspan=2| solo
|-
| "Wafaon Ke Badale Jafaa Kar Rahe"
|-
! Rowspan=6| ''[[Jawani Ki Hawa]]''
| "Lo Wo Aa Gaye"
| rowspan=6| Ravi
| rowspan=4| Rajendra Krishan
| rowspan=5| solo
|-
| "Chali Kaisi Ye Jawani Ki Hawa"
|-
| "Babu Re Babu Re Garib Ki Hu Chokri"
|-
| "Bahaar Leke Aayi Karar Leke Aayi"
|-
| "Chanda Ke Paas Ek Taara"
| rowspan=2| Shailendra
|-
| "Kaun Jane Re Baba"
| Mohammed Rafi, Geeta Dutt
|-
! rowspan=2| ''[[Kaagaz Ke Phool]]''<ref>{{cite web|url=http://myswar.co/album/kaagaz-ke-phool-1959|title=Kaagaz Ke Phool (1959) movie songs|accessdate=27 April 2022}}</ref>
| "San San San Woh Chali Hawa"
| rowspan=2| S. D. Burman
| rowspan=2| Kaifi Azmi
| rowspan=2| Mohammad Rafi
|-
| "Ulte Seedhe Dao Lagaye"
|-
! Rowspan=2| ''Kal Hamara Hai''
| "Aise Na Dekho Rasiya"
| Gajanan
| Shailendra
| solo
|-
| "Jhoke Hai Badal Baalon Ke"
| rowspan=3| Chitragupt
| rowspan=3| Majrooh Sultanpuri
| rowspan=3| Mohammed Rafi
|-
! Rowspan=2|''Kali Topi Lal Rumal''
| "O Kali Topiwale Tera Naam Toh Bataa"
|-
| "Yaaron Ka Pyaar Liye, Vaaden Hazar Liye"
|-
! Rowspan=2| ''Kavi Kalidas''
| "Sakhi Hriday Mein Halchal Si Hone Laagi"
| rowspan=2| S. N. Tripathi
| rowspan=2| Bharat Vyas
| Geeta Dutt, Manna Dey
|-
| "Pranay Viraah Aur Milan Ki Abhigyan"
| Manna Dey
|-
! Rowspan=3| ''Khoobsurat Dhokha''
| "Meri Nazaro Ne Bandha Nishana"
| rowspan=3| S. Mohinder
| rowspan=3| Anand Bakshi
| rowspan=3| solo
|-
| "Lutengi Ankhe Sharmili Sambhalna"
|-
| "Hairelu Lusha Lu Lusha Lara"
|-
! Rowspan=5| ''Kya Yeh Bombai Hai''
| "Aaj Teri Jeet Ho Gayi"
|rowspan=5| Bipin Dutta
|rowspan=5| Noor Devasi
| solo
|-
| "Nain Katile Honth Rasile"
| Seeta Banerjee
|-
| "Thandi Thandi Yeh Hawa"
| Manna Dey
|-
| "E Se Banti Imli"
|rowspan=2| Mohammed Rafi
|-
| "Zara Bachke Chalna"
|-
! rowspan=2| ''Ladki''
| "Ladki Ran Namuna Kan Main Laakh Teri Maanunga"
| rowspan=2| Vinod
| rowspan=2| Verma Malik
| Mohammed Rafi
|-
| "Gore Rang Na Kisi Ka Ho"
| solo
|-
!''Maa Ke Ansoo''
| "Kisi Se Aankh Ladi"
| Sardar Malik
| Raja Mehdi Ali Khan
| Suman Kalyanpur
|-
!''Madhu''
| "Ho Deke Badnaami Zamane Bhar Ki"
| Roshan
| Prem Dhawan
| Mohammed Rafi
|-
!''Main Nashe Mein Hoon''
| "Gair Ki Gali Mein Iya Tumne Mera Naam Liya"
| Shankar–Jaikishan
| Shailendra
| solo
|-
! Rowspan=6| ''Maine Jeena Seekh Liya''
| "Itni Si Baat Pe Bigad Gaye"
| rowspan=6| Roshan
| rowspan=4| Anand Bakshi
| Mohammed Rafi
|-
| "Ye Nasha Aap Ka Sarkar Utar Jayega"
| rowspan=5| solo
|-
| "O Mere Suraj Chand Sitare"
|-
| "Chanda Tere Mama Hai, Nehru Tere Chacha Hai"
|-
| "Ye Zameen Ye Gagan"
|rowspan=2| Rahil Gorakhpuri
|-
| "Ae Ji Maine Poochha Apko" (female)
|-
! Rowspan=4| ''Minister''
| "Mujhko Teri Hi Talash Hai"
| rowspan=5| Madan Mohan
| rowspan=5| Rajendra Krishan
| Mahendra Kapoor
|-
| "Ae Ji Biwi Ko Ghar Pe Bithala Ke"
| rowspan=3| solo
|-
| "Hello, Hello, Hello, Mijaaz To Hazoor Ke Hain Achchhe"
|-
| "Lo Aaj Suno Apne Shaahido Ki Kahani"
|-
!''Mohar''
| "Surat Yatim Ki, Shauq Yatim Ka"
| solo
|-
!''Naach Ghar''
| "Jaaneman Chilman Utha Kar Dekh Le"
| N. Dutta
| Sahir Ludhianvi
| Mohammed Rafi
|-
!''Nai Raahen''
| "Tohse Naina Laage Saiyan"
| Ravi
| Shailendra
| Usha Mangeshkar
|-
! Rowspan=7| ''[[Navrang]]''
| "Aadha Hai Chandrama, Raat Aadhi"
| rowspan=7| C. Ramachandra
| rowspan=7| Bharat Vyas
| Mahendra Kapoor
|-
| "Tu Chhupi Hai Kahaan"
| rowspan=2| Manna Dey
|-
| "Rang De Re Jeevan Ka Chunariya"
|-
| "Aayaa Holi Ka Tyohaar"
| rowspan=2| C. Ramachandra
|-
| "Kaari Kaari Kaari Andhiyaari Thi Raat"
|-
| "Tum Mere Mai Teri"
| rowspan=2| solo
|-
| "Aa Dil Se Dil Mila Le"
|-
! Rowspan=6| ''[[Paigham]]''
| "Main Kyun Na Naachu Aaj"
| rowspan=6| C. Ramachandra
| rowspan=6| Kavi Pradeep
| rowspan=3| solo
|-
| "O Ameeron Ke Parmeshwar" (version 1)
|-
| "O Ameeron Ke Parmeshwar (version 2)
|-
| "Kahaan Hain Ham Ye Aaj"
| rowspan=2| Mohammed Rafi
|-
| "Badla Sara Zamana Babu"
|-
| "Hum Rang Rangili Jobanvan Ki Titliya"
| Suman Kalyanpur
|-
! Rowspan=2| ''Pakshiraj''
| "Lalchaye Re Nazar Lalchaye Re"
| rowspan=2| S. N. Tripathi
| J S Kashyap
| solo
|-
| "Hahakar Macha Hai Jag Mein"
| B. D. Mishra
| Sabita Chowdhury
|-
! Rowspan=8| ''Pehli Raat''
| "Bata Ae Aasman Mai Ab Jau Kahan"
| rowspan=8| Ravi
| rowspan=8| Majrooh Sultanpuri
| rowspan=3| solo
|-
| "Aaj Chupke Se Ho Gayi"
|-
| "So Jaa Meri Rani"
|-
| "Ye Powder Ye Surkhiya Gira Rahi Hai Bijliya"
| rowspan=2| Mohammed Rafi
|-
| "Zamana Pyar Ka Mausam Bahar Ka"
|-
| "Kyon Dil Humko De Dala"
| Manna Dey
|-
| "Humko Duaye Do Tumhe Katil Bana Diya"
| Mohammed Rafi, Sudha Malhotra
|-
| "Aurat To Bithaiye Dil Mein Tumhe"
| Talat Mahmud
|-
! Rowspan=2| ''Pyar Ki Rahen''
| "Hum Bhi Is Duniya Mein Kya Taqdeer Lekar Aaye Hai"
| rowspan=2| Kanu Ghosh
| rowspan=2| Prem Dhawan
| rowspan=2| solo
|-
| "Gori Gori Baahe Tikhi Tikhi Hai Ye Nigahen"
|-
! Rowspan=4| ''Raat Ke Rahi''
| "Tu Kya Samjhe Tu Kya Jaane"
| rowspan=2| Jaidev
| rowspan=4| Vishwamitra Adil
| rowspan=4| solo
|-
| "Paubarah Paubarah Pyar Mein Paubarah"
|-
| "Daye Baye Chhup Chhupa Ke Kaha Chale"
| rowspan=2| Bipin–Babul
|-
| "Aa Bhi Ja Bewafa"
|-
! Rowspan=8| ''Saahil''
| "Raat Aadhi Ho Gayi"
| rowspan=5| Suresh Talwar
| rowspan=2| Janardan Muktidoot
| Hemant Kumar
|-
| "Sheetal Pavan Sanasan Dole"
| solo
|-
| "Teri Nazar Ne Maara"
| Jeet
| Mohammed Rafi
|-
| "Tumhari Mohabbat Hai Ek Chiz Aisi"
| Kulbhushan
| Hemant Kumar
|-
| "Aayi Milan Ki Raat"
| Anjaan
| rowspan=4| solo
|-
| "Afsos Meri Taqdeer Bante Hi Bigad Gayi"
| rowspan=2| D S Dutt
| rowspan=2| Indeevar
|-
| "Dekho Ji Humein Na Dena Dhokha"
|-
| "Mohabbat Sabko Milti Hai"
| Suresh Kumar
| Saraswati Kumar Deepak
|-
! Rowspan=6| ''Sati Vaishalini''
| "Aare Vidhata Aare Vidhata"
| rowspan=6| Prem Nath
| rowspan=6| Bharat Vyas
| rowspan=5| solo
|-
| "Chahe Bhale Chanda Tale"
|-
| "Ghiri Ghataye Ghanghor"
|-
| "Paanv Me Kaate Bichhe"
|-
| "Tu Chahe To Raat"
|-
| "Kaho Ji Kaun Bole"
| Mohammed Rafi
|-
! Rowspan=8| ''Sazish''
| "Bachke Zara Hat Ke Zara"
| rowspan=8| S. D. Batish
| rowspan=8| Qamar Jalalabadi
| rowspan=7| solo
|-
| "Mera Naam Zubeda Khanam"
|-
| "Meri Nazron Meim Tum Hi Tum Ho"
|-
| "Basre Se Aayi Hasina"
|-
| "Hum Samjhe Anadi"
|-
| "Tum Ho Mere Sanam Khuda Kasam"
|-
| "Yun Na Dekho Meri Jaan"
|-
| "Zara Idhar To Aa Matwali"
| Mohammed Rafi
|-
!''Smuggler''
| "Behli Behki Chaal Meri"
| Jimmy
| Rahil Gorakhpuri
| solo
|-
! Rowspan=3| ''[[Sujata (1959 film)|Sujata]]''<ref>{{Cite web|url=https://m.hindigeetmala.net/movie/sujata.htm|title=Sujata : Lyrics and video of Songs from the Movie Sujata (1959)|website=HindiGeetMala}}</ref>
| "Bachpan Ke Din Bhi"
| rowspan=3| S. D. Burman
| rowspan=3| Majrooh Sultanpuri
| Geeta Dutt
|-
| "Kali Ghata Chhaye"<ref name="85songs"/>
| rowspan=2| solo
|-
| "Tum Jiyo Hazaaron Saal"
|-
! Rowspan=4| ''Tipu Sultan''
| "Aaj Deewane Chale Aag Se Takrane"
|rowspan=4| S. D. Batish
| Qamar Jalalabadi
| Sudha Malhotra
|-
| "Lagu Main Kaisi Tumko Sanam"
| rowspan=2| Rahil Gorakhpuri
| Mohammed Rafi
|-
| "Nache Umang Jhume Tarang"
| rowspan=2| solo
|-
| "Kabhi Hu Karke Kabhi Ha Karke"
| Kaif Irfani
|-
|}
== 1960s ==
=== 1960 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! Rowspan=2| ''Aai Phir Se Bahar''
| "Hua Gulshan Viran Re Ae Dil"
| rowspan=2| Vedpal Sharma
| rowspan=2| Indeevar
| rowspan=2| solo
|-
| "Mujhse Keh Di Hai Tune"
|-
! Rowspan=4|''[[Aanchal (1960 film)|Aanchal]]''
| "O O Naache Re Raadha"
| rowspan=4| C. Ramchandra
| rowspan=4| Kavi Pradeep
| Suman Kalyanpur
|-
| "Ghunghat Kali Ka Na Khol Bhanware"
| solo
|-
| "E Ji O O Kuchh To Bolo"
| rowspan=2| Mahendra Kapoor
|-
| "Gaa Raha Hai Zindagi Har Taraf"
|-
! Rowspan=3| ''Abdulla''
| "Chand Ka Tika Pad Gaya Phika"
| rowspan=3| Bulo C. Rani
| rowspan=3| Shewan Rizvi
| rowspan=3| solo
|-
| "Cham Cham Payal Bole"
|-
| "Khamosh Nazare Hai Phike"
|-
!''Air Mail''
| "Shun Sahdap Nazron Ki Jhadap Hone De"
| Shardul Kwatra
| Anand Bakshi
| solo
|-
! Rowspan=2| ''Alam Ara Ki Beti''
| "Main Hoon Toh Ujala Hai Yeh"
| rowspan=2| Bipin Dutta
| rwospan=2| Noor Devasi
| Suman Kalyanpur
|-
| "Mast Nazron Se Pee Ke Dekho"
| solo
|-
! Rowspan=3| ''[[Angulimaal]]''
| "Buddhang Sharanam Gachchhami"
| rowspan=3| Anil Biswas
| rowspan=3| Bharat Vyas
| rowspan=2| Manna Dey
|-
| "Bade Aaye Shikari Shikar Karne"
|-
| "Om Namo Brahmanadevay Muraliwale Gopal"
| solo
|-
! Rowspan=3| ''Apna Ghar''
| "Soch Samajh Le O Parwane"
| rowspan=3| Ravi
| rowspan=3| Prem Dhawan
| rowspan=2| Mohammed Rafi
|-
| "Hai Tera Bhi Irada Aur Mera Bhi Irada"
|-
| "Aaram Hai Haram"
| Mohammed Rafi
|-
!rowspan=2| ''Apna Haath Jagannath''
| "Tum Jahan Jahan"
| rowspan=2| S. D. Burman
| rowspan=2| Kaifi Azmi
| rowspan=2| Kishore Kumar
|-
| "Chhayi Ghata Bijli"
|-
!''Babar''
| "Hasinon Ke Jalwe Pareshan Rehte"
| Roshan
| Sahir Ludhianvi
| Mohammed Rafi, Manna Dey, Sudha Malhotra
|-
! Rowspan=5| ''Bade Ghar Ki Bahu''
| "Zara Sambhal Ke Dil Lagana"
| rowspan=5| Chitragupt
| rowspan=5| Tanvir Naqvi
| rowspan=5| solo
|-
| "Hawa Mein Tinka Tinka Hoke Bikhra"
|-
| "Cham Cham Chamaka Saaraa Jahaan"
|-
| "Aayi Hai Bambai Se Piya"
|-
| "Sarke Chunariya Lachke Kamariya"
|-
! Rowspan=2| ''[[Bahana (1960 film)|Bahana]]''
| "Teri Nigahon Mein, Tere Hi Bahon Mein"
| rowspan=2| Madan Mohan
| rowspan=2| Rajendra Krishan
| Talat Mahmud
|-
| "Mohabbat Kya Hai, Haseen Dhokha Hai"
| solo
|-
! Rowspan=4| ''[[Barsaat Ki Raat]]''
| "Naa To Kaaravaan Ki Talaash Hai"
| rowspan=4| Roshan
| rowspan=4| Sahir Ludhianvi
| rowspan=2| Sudha Malhotra, Mohammed Rafi, Manna Dey, S D Batish
|-
| "Yeh Ishq Ishq Hai Ishq Ishq"
|-
| "Nigaah-E-Naaz Ke Maaro Ka Haal Kya Hoga"
| Sudha Malhotra
|-
| "Na Khanjar Uthega Na Talvaar Tumse"
| Sudha Malhotra, Balbir
|-
! Rowspan=11| ''[[Basant (film)|Basant]]''
| "Mere Lehange Mein Ghungroo La De"
| rowspan=11| O. P. Nayyar
| rowspan=8| Qamar Jalalabadi
| rowspan=4| Mohammed Rafi
|-
| "Chori Chori Ek Ishara Ho Gaya Hai"
|-
| "Ghum Ke Aaya Hu Mai Bandhu"
|-
| "Mere Dil Pe Lagade Darling"
|-
| "Raat Chandani Samay Suhana Hai"
| rowspan=3| solo
|-
| "Pichhe Hat Hat Hat Babu Chhed Na"
|-
| "Ukkad Dukkad Bamba"
|-
| "Aji Ulfat Ko Khushiyo Ki Khani"
| Mohammed Rafi, S. D. Batish
|-
| "Raaste Me Ek Hasin Aji Mil Gaya"
| Shewan Rizvi
| rowspan=3| Mohammed Rafi
|-
| "Kitni Badal Gayi Hai"
|-
| "Naino Me Suraj Ki Kirane"
| S. H. Bihari
|-
! Rowspan=2| ''Bambai Ki Billi''
| "Meri Adaye Bijli Giraye"
| rowspan=2| Khayyam
| rowspan=2| Hasrat Jaipuri
| rowspan=2| solo
|-
| "Zalim Zulm Na Kar Abhi Sambhal Ja"
|-
!rowspan=2| ''[[Bewaqoof]]''
| "Tumi Piya Chikara"
| rowspan=2| S. D. Burman
| rowspan=2| Majrooh Sultanpuri
| rowspan=2| Kishore Kumar
|-
| "Michael Hai Toh Cycle Hai"
|-
! ''Bindiya''
| "Tane Tandane Bhai Tandane Tane"
| Iqbal Qureshi
| Rajendra Krishan
| solo
|-
! Rowspan=1| ''Black Prince''
| "Meethi Lagi Hai Teri Bin"
| Dulal Sen
| Upendra
| solo
|-
!rowspan=4| ''[[Bombai Ka Babu]]''
| "Deewana Mastana Hua Dil"
| rowspan=4| S. D. Burman
| rowspan=4| Majrooh Sultanpuri
| rowspan=2| Mohammed Rafi
|-
| "Pavan Chale To Uthe Nadi Mein Lahar Si"
|-
| "Dekhne Mein Bhola Hai, Dil Ka Salona"
| rowspan=2| solo
|-
| "Aise Me Kachhu Kaha Nahi Jaye"
|-
!''Captain India''
| "Chhune Na Doongi Sharir"
| Hemant Kedar
| Rajaram Saki
| solo
|-
! Rowspan=3| ''[[Chaudhvin Ka Chand]]''
| "Sharmake Yeh Kyun Pardanashin"
| rowspan=3| Ravi
| Rowspan=3| Shakeel Badayuni
| Shamshad Begum
|-
| "Bedardi Mere Saiya Shabnam Hai"
| rowspan=2| solo
|-
| "Dil Ki Kahani Rang Layi Hai"<ref name="85songs"/>
|-
! Rowspan=1| ''Dekha Jayega''
| "Aaja Mere Dilruba"
| Shardul Kwatra
| Farooq Kaiser
| solo
|-
!''[[Dil Apna Aur Preet Parai]]''
| "Ui Itni Badi Mehfil Aur Ik Dil"
| Shankar–Jaikishan
| Hasrat Jaipuri
| solo
|-
!''Do Aadmi''
| "Jaagi Saari Saari Ratiyan"
| S. N. Triapthi
| Prem Dhawan
| solo
|-
! Rowspan=2| ''Dr. Shaitan''
| "Gore Gore Galo Se Ujli Dhoop"
| rowspan=2| N. Dutta
| rowspan=2| Jan Nisar Akhtar
| solo
|-
| "Humein Raste Mein Chhede Kyun"
| Mohammed Rafi
|-
! Rowspan=5| ''Duniya Jhukti Hai''
| "Ammi O Mummy, Mera Baap Bada Dilwala"
| rowspan=5| Hemant Kumar
| rowspan=5| Rajendra Krishan
| rowspan=4| solo
|-
| "Lagi Tumse Nazariyaa Lagi"
|-
| "Bulbul Ke Nasheman Par Bijli To Giri"
|-
| "Tu Jhukane Per To Aa, Sochta Hai Kya"
|-
| "Pyaar Mein Joker Ban Gaye Hum"
| Mohammed Rafi
|-
! Rowspan=3| ''[[Ek Ke Baad Ek]]''
| "Pagli Hawa Jane Re"
| rowspan=3| S. D. Burman
| rowspan=3| Kaifi Azmi
| solo
|-
| "Nazar Milayi Toh Duniya Se Darna Kya"
| rowspan=2| [[Mohammed Rafi]]
|-
| "Aao Aao Aao Pyaro Dekho"
|-
! Rowspan=4| ''[[Ghar Ki Laaj (1960 film)|Ghar Ki Laaj]]''
| "Lal Batti Ka Nishan, Neeche Pan Ki Dukan"
| rowspan=4| Ravi
| rowspan=4| Rajendra Krishan
| rowspan=2| [[Mohammed Rafi]]
|-
| "Teri Latka Laga Hai Latka"
|-
| "Aata Hai To Aane Do"
| rowspan=2| solo
|-
| "Gham Denewale"
|-
! Rowspan=6| ''[[Ghunghat]]''
| "Ye Zindagi Ka Mausam Aur Ye Sama Suhana"
| rowspan=6| Ravi
| rowspan=6| Shakeel Badayuni
| Mohammed Rafi
|-
| "Do Nain Mile Do Phool Khil"
| rowspan=2| Mahendra Kapoor
|-
| "Kya Kya Nazare Dikhati Hai Ankhiyan"
|-
| "Dil Na Kahi Lagana Zalim Hai Ye Jamana"
| rowspan=3| solo
|-
| "Pyari Sakhi Saj Dhaj Ke Apne"
|-
| "Gori Ghunghat Me Mukhda Chupao Na"
|-
!| ''Girl Friend''
| "Boom Booma Boom"
|| Hemant Kumar
|| Sahir Ludhianvi
| Kishore Kumar
|-
! Rowspan=2| ''[[Hum Hindustani]]''
| "Balma Re Haye, Meri Lat Suljha De"
| rowspan=2| Usha Khanna
| rowspan=2| K. Manohar
| solo
|-
| "Neeli Neeli Ghata, O Bheegi Bheegi Hawa"
| Mukesh
|-
! Rowspan=7| ''[[Jaali Note]]''
| "Sach Kehta Hoon Bahot Khubsurat Ho"
| rowspan=7| O. P. Nayyar
| rowspan=7| Raja Mehdi Ali Khan
| rowspan=6| Mohammed Rafi
|-
| "Dil Hai Aapka Huzoor Ligiye Na"
|-
| "Chand Zard Zard Hai"
|-
| "O Mister Dil Badi Mushakil"
|-
| "Gustaakh Nazar Chehre Se Hata Humko Na Sataa"
|-
| "Nigaahon Ne Phenkaa Hai Panje Pe Chhakka"
|-
| "Idhar Dekh Mera Dil Tera Diwana Hai"
| Shamshad Begum
|-
! ''[[Jis Desh Mein Ganga Behti Hai]]''
| "Pyaar Ki Dagar Pe Koi"
| Shankar–Jaikishan
| Shailendra
| Lata Mangeshkar
|-
! rowspan=3| ''[[Kala Bazar]]''<ref>{{cite web|url=http://myswar.co/album/kala-bazar-1960|title=Kala Bazar (1960) movie songs|accessdate=27 April 2022}}</ref>
| "Sambhalo Sambhalo Apna Dil"
| rowspan=3| S. D. Burman
| rowspan=3| Shailendra
| rowspan=2| solo
|-
| "Sach Hue Sapne Tere"
|-
| "Shaam Dhali Dil Ki Laagi"
| Manna Dey
|-
! Rowspan=9| ''[[Kalpana (1960 film)|Kalpana]]''
| "Beqasi Hadh Se Jab Guzar Jaaye"
| rowspan=9| O. P. Nayyar
| Jan Nisar Akhtar
| rowspan=6| solo
|-
| "O Ji Saawan Me Hu Bekarar Sajnawa Se"
| Hasrat Jaipuri
|-
| "Jaaye Jahan Meri Nazar"
| rowspan=3| Qamar Jalalabadi
|-
| "Hamko Samajh Na Lijiye Daali Ghulaab Ki"
|-
| "Main Khidki Pe Aaungi"
|-
| "Aana Aana Atariya Pe Aana"
| rowspan=4| Raja Mehdi Ali Khan
|-
| "Pyara Pyara Hai Samaa"
| rowspan=2| Mohammed Rafi
|-
| "Hame Maaro Na Naino Ke Baan"
|-
| "Assalaam Aalekum Babu, Kaho Kaisa Haal Hai"
| Sudha Malhotra
|-
! ''[[Kohinoor]]''
| "Jaadugar Katil, Hazir Hai Mera Dil"
| Naushad
| Shakeel Badayuni
| solo
|-
!''Lalach''
| "Aaja Aaja, Jiya Nahi Laaage"
| S. Kishan
| Aslam
| solo
|-
! Rowspan=5| ''Lambe Haath''
| "O Diwane Chhokre Rah Mera"
| rowspan=5| G S Kohli
| rowspan=5| Anjaan
| rowspan=2| Mohammed Rafi
|-
| "Mohabbat Kar Ke Kya Loge"
|-
| "Are Main Hoon Teri Phuljhadi"
| rowspan=3| solo
|-
| "Chale Hai Ishq Ladane"
|-
| "Dil Tod Tod, Mukh Mod Mod"
|-
! Rowspan=3| ''[[Love in Simla]]''
| "Love Ka Matlab Hai Pyar"
| rowspan=3| Iqbal Qureshi
| rowspan=3| Rajendra Krishan
| rowspan=3| Mohammed Rafi
|-
| "Ae Baby Ae Jee Idhar Aao"
|-
| "Kiya Hai Dilruba Pyar Bhi Kabhi"
|-
! Rowspan=2| ''[[Manzil (1960 film)|Manzil]]''
| "Dil To Hai Deewana"
| rowspan=2| S. D. Burman
| rowspan=2| Majrooh Sultanpuri
| Mohammed Rafi
|-
| "Aye Kash Chalte Mil Le"
| Manna Dey
|-
!rowspan=5| ''[[Mehlon Ke Khwab]]''<ref>{{Cite web|url=https://m.hindigeetmala.net/movie/mehlon_ke_khwaab.htm|title=Mehlon Ke Khwaab : Lyrics and video of Songs from the Movie Mehlon Ke Khwaab (1960)|website=HindiGeetMala}}</ref>
| "Kamla Razia Ya Miss Mary"
| rowspan=5| S. Mohinder
| Raja Mehndi Ali Khan
| rowspan=2| Kishore Kumar
|-
| "Aa Jaane Jigar"
| Anand Bakshi
|-
|"Gar Tum Bura Na Mano"
|rowspan=2| Raja Mehdi Ali Khan
| Subir Sen
|-
| "Is Duniya Mein"
| Geeta Dutt
|-
| "Piyo Piyo Nazar Pilati Hai"
| Anand Bakshi
| solo
|-
!''Masoom''
| "Desh Ka Pyara, Sab Ka Sahara Kaun Banega"
| Robin Banerjee
| Raja Mehdi Ali Khan
| solo
|-
! Rowspan=2| ''Mera Ghar Mere Bachche''
| "Peena Haraam Hai Na Pilana Haraam Hai"
| rowspan=2| Sardar Malik
| rowspan=2| Hasrat Jaipuri
| rowspan=2| solo
|-
| "Galiya Hai Gulzar, Yaar Aaya Karo"
|-
! Rowspan=2| ''Miss Goodnight''
| "Mausam Suhana"
| rowspan=2| Hansraj Behl
| rowspan=2| Prem Dhawan
| rowspan=2| solo
|-
| "Hum Toh Kisi Ke Ho Gaye"
|-
! Rowspan=7| ''Mitti Mein Sona''
| "Puchho Na Hamen Ham Unake Liye"
| rowspan=7| O. P. Nayyar
| Raja Mehdi Ali Khan
| solo
|-
| "Yeh Duniya Rahe Na Rahe Kya Pata Mera Pyar"
| S H Bihari
|-
| "Maine Kaha Miss What Is This"
| rowspan=5| Mohammed Rafi
| rowspan=2| Majrooh Sultanpuri
|-
| "Baal Bikhre Huye Gal Nikhre Huye"
|-
| "Aankhon Se Aankh Mili Dil Se Dil"
| rowspan=3| Raja Mehdi Ali Khan
|-
| "Jab Is Dharti Par Dukh Pa Kar Roye Koi Insan"
|-
| "Ek Ek Ankh Teri Sawa Sawa Lakh Di"
|-
!''Miya Bibi Razi''
| "Piya Bin Nahin Mil Gaye Milanewals"
| S. D. Burman
| Shailendra
| Mahendra Kapoor
|-
! Rowspan=2| ''Mud Mud Ke Na Dekh''
| "Hai Yeh June Ka Mahina"
| rowspan=2| Hansraj Behl
| rowspan=2| Prem Dhawan
| solo
|-
| "Aao Aao Ladaki Walo Ladka"
| Geeta Dutt
|-
! Rowspan=5| ''Mukti''
| "Nigaan-e-Mehar Humse"
| rowspan=5| Malay Chakraborty
| Arzoo Lucknowi
| rowspan=2| Mohammed Rafi
|-
| "Ye Zamin Hai Do Dilo Ke Pyar Ki"
| rowspan=3| Munir Arzoo Kazmi
|-
| "Mohe Kaari Kaari Badri"
| rowspan=3| solo
|-
| "Bujh Jaaye Joo Jyoti Jal Jal Kar"
|-
| "Unke Hans Dene Par Khud Bhi Muskura Ka"
| Arzoo Lucknowi
|-
! Rowspan=6| ''Nai Maa''
| "Jang Ka Dushman Aman Ka Saathi"
| rowspan=6| Ravi
| rowspan=4| Agha Sarvar
| Mohammed Rafi
|-
| "Holi Aayi Holi Rang Gulal Udati"
| Mahendra Kapoor
|-
| "Loot Le Khushiyo Ke Ae Dil Khajaane"
| Rowspan=4| solo
|-
| "Jab Shama Jali"
|-
| "Mana Ke Wafaa Jara Bhi Nahi Karte"
| rowspan=2| Majrooh Sultanpuri
|-
| "Dil Tera Hai Diwana Khuda Sanam"
|-
! ''Not Available''
| "Ek Ladki Nikli Ghar Se"
| Pandit Harbanslal
| Anand Bakshi
| Mahendra Kapoor
|-
! Rowspan=2| ''Pedro''
| "Chale Jo Waar Kas Ke"
| rowspan=2| Bulo C. Rani
| rowspan=2| Madan Mohan
| rowspan=2| solo
|-
| "Jawani Badi Cheez Hai" (female)
|-
! Rowspan=4| ''Qatil''
| "Jab Tum Nahi To Kya Kare"
| rowspan=4| Shauqat Dehlvi Nashad
| rowspan=4| Farooq Kaiser
| Mukesh
|-
| "Naina Chaar Karna"
| Mohammed Rafi
|-
| "Sitam Bekasi Pe Ye Kya Ho Raha Hai"
| rowspan=2| solo
|-
| "Bewafa Deke Daaga Jaata Hai"
|-
! Rowspan=2| ''Rangeela Raja''
| "Pyaar Nahin Jaane Balam"
| rowspan=2| Shivram Krishnan
| rowspan=2| Asad Bhopali
| rowspan=1| solo
|-
| "Raat Rangeeli Aayi"
| Mohammed Rafi
|-
! Rowspan=4| ''Rickshawala''
| "Bolo Dil Mera Machal Raha Kis Liye"
| rowspan=4| N. Dutta
| rowspan=4| Jan Nisar Akhtar
| rowspan=2| Mohammed Rafi
|-
| "Jawani Mein Toh Ek Dil Ki Zaroorat"
|-
| "Hum Jo Zinda Hai Toh"
| solo
|-
| "Neeli Saadi Sunehra Jhampar"
| Geeta Dutt
|-
! Rowspan=3| ''Road No. 303''
| "Dil Ko Ye Kya Hua"
| rowspan=3| C. Arjun
| rowspan=3| Naqsh Lyallpuri
| solo
|-
| "Sorry Sorry Very Sorry Aap Ki Kasam"
| rowspan=2| Mohammed Rafi
|-
| "Pehli Pehlu Baar Mile Hain Do Deewane"
|-
! Rowspan=2| ''Saranga''
| "Kin Ghadiyon Mein Preet Lagayi"
| rowspan=2| Sardar Malik
| rowspan=2| Bharat Vyas
| solo
|-
| "Aa Ja Mere Saathee Aa Ja"
| Mohammed Rafi
|-
! Rowspan=7| ''[[J. P. Dutta|Sarhad]]''
| "Duniya Kya Hai Dafa Karo"
| rowspan=7| C. Ramchandra
| rowspan=7| Majrooh Sultanpuri
| Mohammed Rafi
|-
| "Aaja Re More Oiya Na Jaa Re"
| rowspan=3| solo
|-
| "Ae Mere Dil Jo Chal Diye"
|-
| "Aa Gaya Maza Pyar Ka Nash" (female)
|-
| "Naacho Ghum Ke Gaao Jhum Ke"
| rowspan=3| C. Ramchandra
|-
| "Gori Chali Kar Ke Singar"
|-
| "Aa Gaya Maza Pyar Ka Nasha" (duet)
|-
!''Shan-e-Hind''
| "O Jag Ke Palanhar"
| Sudipta
| Shyam Hindi
| solo
|-
! Rowspan=2| ''Sharif Daku''
| "Nazneenon Se, Haseenon Se"
|rowspan=2| Hafiz Khan, Arjun Hingorani
|rowspan=2| Shewan Rizvi
| Ismail Azad
|-
| "Sun Mera Saaz Sun"
| Mohammed Rafi
|-
! Rowspan=2| ''Shravan Kumar''
| "Rang Rangeelo Phagun Aayo"
| rowspan=2| Shivram Krishnan
| rowspan=2| Bharat Vyas
| Mahendra Kapoor
|-
| "O Chanda Kyon Itni Dur Humse"
| solo
|-
! Rowspan=3| ''Superman''
| "Babu O Babu Dil Thamna"
|rowspan=3| Sardar Malik
|rowspan=3| Prem Dhawan
| rowspan=2| solo
|-
| "Udh Udh Jaiye Aanchal"
|-
| "Ki Ek Tera Gora Mukhda"
| Suman Kalyanpur
|-
! Rowspan=4| ''Teer Aur Talwar''
| "Mera Balam To Hai Dil Ka Kala"
| rowspan=4| Nisar Bazmi
| rowspan=4| Farooq Kaiser
| rowspan=3| solo
|-
| "Milana Nazar Humse Balma"
|-
| "Yeh Naina Mere Unse Ulajh Nahi Jaiye"
|-
| "Na Socha Na Samjha Na Dekha"
| Mahendra Kapoor
|-
! Rowspan=5| ''Trunk Call''
| "Tune Kitne Pyar Se Dekha Mujhko"
| rowspan=5| Ravi
| rowspan=5| Qamar Jalalabadi
| rowspan=4| solo
|-
| "Door Door Rehte Ho Ji"
|-
| "Mohabbat Ka Jadu"
|-
| "Thoda Pyar Vyar Kar Lo Babuji"
|-
| "Kaho Meri Sarkar, Tabiyat Kaisi Hai"
| rowspan=5| Mohammed Rafi
|-
! Rowspan=5| ''[[Tu Nahin Aur Sahi]]''
| "Meri Mehfil Mein Aake Dekh Le Zara"
| rowspan=5| Ravi
|| Shakeel Badayuni
|-
| "Deewana Hoon Main Pyaar Ka"
| Majrooh Sultanpuri
|-
| "Yeh Rang Bhare Baadal"
| rowspan=2| Asad Bhopali
|-
| "Dekhiye Huzoor Mujhse Rehke Door"
|-
| "Man Hi Man Muskaye Re Dulhaniya"
| Shakeel Nomani
| solo
|-
! Rowspan=6| ''Zameen Ke Tare''
| "Tinke Pe Tinka Chhuti Ke Din Ka"
| rowspan=6| S. Mohinder
| rowspan=2| Anand Bakshi
| rowspan=1| solo
|-
| "Chunnu Patang Ko Kehta Hai Kite"
| Sudha Malhotra
|-
| "Kisi Ka Ma Na Mare Bachpan Mein (Duet)
| Pandit Madhur
| Mohammed Rafi
|-
| "Yeh Zamin Hamari Ye Aasman Hamara"
| rowspan=2| Tanvir Naqvi
| Manna Dey
|-
| "Deep Gagan Ke Tum Ho"
| Sudha Malhotra
|-
| "O Mere Pyaaro, Zameen Ke Taaro"
| Pandit Indra
| Mohammed Rafi, Sudha Malhotra
|-
|}
=== 1961 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! Rowspan=2| ''Amrit Manthan''
| "Andhkar Chhaya Aakash Zanzanaya"
| rowspan=2| S. N. Tripathi
| rowspan=2| B. D. Mishra
| rowspan=2| solo
|-
| "Chum Chanana Chum, Jhoom Ke Baje Payal"
|-
! Rowspan=5| ''Apsara''
| "Chalti Chakki Dekh Ke"
| rowspan=5| Husnlal–Bhagatram
| rowspan=3| Qamar Jalalabadi
| rowspan=2| solo
|-
| "Ye Dil Chhed Koye Pyar Bhari Dastaan"
|-
| "Tu Mere Saath, Main Tere Saath"
| rowspan=3| Talat Mahmud
|-
| "Har Dam Tumhi Ko Pyar Kiye Ja Rahi Hoon Main"
| Hasrat Jaipuri
|-
| "Ae Zindagi Itni Haseen"
| N/A
|-
! Rowspan=4| ''Batwara''
| "Yeh Raat Yeh Fizayen Phir Aaye Ya Na Aaye"
| rowspan=4| S. Madan
| rowspan=4| Majrooh Sultanpuri
| Mohammed Rafi
|-
| "Munna Taaro Ka Raja Leke Chanda Ka Baaja"
| rowspan=2| solo
|-
| "Baate Kahin Aur Bana"
|-
| "Gal Sun Kajrewaliye"
| Geeta Dutt
|-
! Rowspan=3| ''Bhabhi Ki Chudiyan''
| "Kahan Ud Chale Hai Man Pran Mere"
| rowspan=3| Sudhir Phadke
| rowspan=3| Narendra Sharma
| Mukesh
|-
| "Ghoda Nachaye Mera Ladla"
| rowspan=2| solo
|-
|"Chand Tu Yahan Hai Aur Chand Tu Wahan"
|-
! Rowspan=3| ''Bhagwan Balaji''
| "Sajna Hilmil Chalna"
| rowspan=3| P. Nageswara Rao
| rowspan=3| Saraswati Kumar Deepak
| Talat Mahmud
|-
| "Chhum Chhume Koyal Bole Ban Mein"
| rowspan=2| solo
|-
| "Nanhe Se O Saathi Sun Le Tu"
|-
!''Daku Mansoor''
| "Khoya Hua Dil Mil Gaya"
| Krishna Kamal
| P. Gaafil
| solo
|-
! Rowspan=2| ''[[Dharmputra]]''
| "Kya Dekha Nainon Wali"
| rowspan=2| N. Dutta
| rowspan=2| Sahir Ludhianvi
| rowspan=2| solo
|-
| "Main Jab Bhi Akeli Hoti Hoon"
|-
! Rowspan=5| ''[[Do Bhai (1969 film)|Do Bhai]]''
| "Har Har Gange Har Har Bol"
| rowspan=5| Sonik–Omi
| rowspan=5| Jan Nisar Akhtar
| rowspan=4| solo
|-
| "Chacha Daudiyo Re"
|-
| "Bala Se Dil Gaya, Mujhe Tu Mil Gaya"
|-
| "De Ke Daga Mere Dil Ko Luta"
|-
| "Kaun Jaane Har Bahaane"
| Mukesh
|-
! Rowspan=4| ''Ek Ladki Saat Ladke''
| "Agar Tum Na Hanste"
|rowspan=4| Vinod
|rowspan=4| Majrooh Sultanpuri
| Sudha Malhotra
|-
| "Teri Zulfon Ke Saaye Mein"
|rowspan=2| Mohammed Rafi
|-
| "Itni Si Baat Ka Fasana Na Banao"
|-
|-
| "Mal Mal Ke Jaaye Mera Jiya"
| Mahendra Kapoor
|-
! Rowspan=3| ''Elephant Queen''
| "Bewafa Mai Hoon"
| rowspan=2| Suresh Talwar
| rowspan=2| Prem Dhawan
| rowspan=2| solo
|-
| "Diya Re Diya Re Tujhe Dil Diya"
|-
| "Mohabbat Je Fasane Ko"
| N/A
| Mahendra Kapoor
|-
! ''Flat No. 9''
| "Naya Mausam Nai Raahen"
| Usha Khanna
| Majrooh Sultanpuri
| solo
|-
! Rowspan=8| ''[[Gharana (1961 film)|Gharana]]''<ref>{{Cite web|url=https://m.hindigeetmala.net/movie/gharana.htm|title=Gharana : Lyrics and video of Songs from the Movie Gharana (1961)|website=HindiGeetMala}}</ref>
| "Jai Raghunandan, Jai Siya Ram"
| rowspan=8| Ravi
| rowspan=8| Shakeel Badayuni
| rowspan=4| Mohammed Rafi
|-
| "Jabse Tumhe Dekha Hai"
|-
| "Ho Gayi Re Main Toh Apne Balam Ki"
|-
| "Na Dekho Humein Ghur Ke Jadugar Saiyan"
|-
| "Yeh Duniya Usi Ki Jo Pyar Karle"
| rowspan=2| solo
|-
| "Yeh Zindagi Ki Uljhanein"
|-
| "Dadi Amma, Dadi Amma, Maan Jaao"
| Kamal Barot
|-
| "Mere Banne Ki Baat Na Poochho"
| Shamshad Begum
|-
!''[[Gunga Jumna]]''
| "Tora Man Bada Paapi"
| Naushad
| Shakeel Badayuni
| solo
|-
! Rowspan=3| ''[[Hum Dono (1961 film)|Hum Dono]]''
| "Abhi Na Jao Chhod Kar"<ref name="85songs"/>
| rowspan=3| Jaidev
| rowspan=3| Sahir Ludhianvi
| Mohammed Rafi
|-
| "Jahan Mein Aisa Kaun Hai"
| rowspan=2| solo
|-
| "Dukh Aur Sukh Ke Raaste"
|-
! Rowspan=2| ''Jadoo Nagri''
| "Jadu Bhare Tere Naina Katile"
| rowspan=2| S. N. Tripathi
| rowspan=2| Hasrat Jaipuri
| Mahendra Kapoor
|-
| "Loot Liya Re Jiya Loot Liya"
| solo
|-
! Rowspan=2| ''Jai Bhawani''
| "Mausam Machalta Hua, Dil Uchhalta Hua"
| rowspan=2| S. Mohinder
| Rowspan=2| Gopal Singh Nepali
| rowspan=2| solo
|-
| "Bawara Lama Suno Suno"
|-
! Rowspan=2|''Jai Chittod''
| "Bhanwar More Jaipur Jaiyo Ji"
|rowspan=2| S. N. Tripathi
|rowspan=2| Bharat Vyas
| solo
|-
| "Zara Sa Ghata Hai Sanghma"
| Manna Dey
|-
!rowspan=5| ''[[Jhumroo]]''
| "Are Baba Lu Baba"
| rowspan=5| Kishore Kumar
| rowspan=5| Majrooh Sultanpuri
| rowspan=5| Kishore Kumar
|-
| "Ae Bhola Bhala"
|-
| "Babu Sunte Jaana"
|-
| "Hey Jhoome Re"
|-
| "Koi Albela Mastana"
|-
!''[[Junglee (1961 film)|Junglee]]''
| "Nain Tumhare Mazedaar O Janabe Aali"
| Shankar–Jaikishan
| Hasrat Jaipuri
| Mukesh
|-
! Rowspan=4| ''Kanch Ki Gudiya''
| "Saath Ho Tum Aur Raat Javaan"
| rowspan=4| Suhrid Kar
| rowspan=4| Shailendra
| Mukesh
|-
| "Tumhara Pyar Meri Zindagani Ka Sahara Hai"
| rowspan=2| solo
|-
| "Jhoomte Sharabi Zara Hosh Mein Aa"
|-
| "Aaya Ab Ja Ke Jine Ka Maza"
| Mohammed Rafi
|-
! Rowspan=4| ''Kismet Palat Ke Dekh''
| "Jaa Jaa Balamwa, Kaahe Chhede Baar Baar"
| rowspan=4| Gunjan
| rowspan=2| Akhtar Romani
| rowspan=2| solo
|-
| "Daiya Re Aaj Kahun Main Re Tohse"
|-
| "Hua Karejwa Pe Jo Jahari Ka Vaar"
| N/A
| Usha Mangeshkar
|-
| "Kadam Larzeeda Larzeeda"
| Sadiq Nizami
| Yousuf Azad Qawwal
|-
!''Krorepati''
| "Aayi Asmaan Ke Raahi"
| Shankar–Jaikishan
| Hasrat Jaipuri
| solo
|-
! Rowspan=2| ''Madan Manjari''
| "Hum Apne Gham Ko Sajakar"
| Rowspan=2| Sardar Malik
| Rowspan=2| Hasrat Jaipuri
| Rowspan=2| solo
|-
| "Is Qadar Tera Tasavar"
|-
! Rowspan=5| ''Mahavat''
| "Sun Re Balam Dil Mera Tujhko Pukare"
|Rowspan=5| R. Sudarshanam
|Rowspan=5| Hargobind Duggal
|Rowspan=5| Mohammed Rafi
|-
| "Yaar Tum Aao Ji Dheere Se"
|-
| "Raah To Hai Pyaar Ki"
|-
| "Manzil Pukare Badh Aa"
|-
| "Hum Bhale Ya Tum Bhale"
|-
! Rowspan=4| ''Main Aur Mera Bhai''
| "Aaye Ho To Jane Ka"
| rowspan=4| C. Arjun
| rowspan=4| Jan Nisar Akhtar
| rowspan=2| solo
|-
| "Zara Zara Bhi Humse Ghabrana Na"
|-
| "Main Abhi Gair Hoon"
| Mukesh
|-
| "Beeghi Beeghi Hawa Shokh Dhara"
| Manna Dey
|-
!''[[Maya (1961 film)|Maya]]''
| "Jaadu Daale Hai Machal Machal Kiski Nazar"
| Salil Chowdhury
| Majrooh Sultanpuri
| solo
|-
!''Miss Chalbaaz''
| "O Bambaiwali Chhokri"
| Jimmy
|
| Sudha Malhotra
|-
! Rowspan=4| ''Modern Girl''
| "Tod Diya Chashma Mera Tune"
| rowspan=4| Ravi
| rowspan=4| Rajendra Krishan
| Mohammed Rafi
|-
| "Saaj Bajta Rahe Raksh Hota Rahe"
| rowspan=3| solo
|-
| "Jo Pehli Mulakat Mein Sharmaata Hai"
|-
| "O Deewane Mere Jab Tera Dil Jale"
|-
! Rowspan=3| ''Mr. India''
| "Kahaan Chali Chham Se"
| rowspan=3| G. S. Kohli
| rowspan=3| Jan Nisar Akhtar
| rowspan=3| Mohammed Rafi
|-
| "Nazar Yeh Teri"
|-
| "Chod Ke Na Jaana"
|-
!''[[Nazrana (1961 film)|Nazrana]]''
| "Mere Peechhe Ek Deewana"
| Ravi
| Rajendra Krishan
| Mukesh
|-
! Rowspan=2| ''Neela Aasman''
| "Akele Hum Akele Tum"
| rowspan=2| Kishore Kumar
| rowspan=2| N/A
| rowspan=2| Kishore Kumar
|-
| "Teri Awaaz Ban Ke"
|-
! Rowspan=4| ''Oomar Qaid''
| "O Piya Jana Na Meri Raato Ki Neende Udana Na"
| rowspan=4| Iqbal Qureshi
| rowspan=4| Hasrat Jaipuri
| rowspan=3| solo
|-
| "Dil Wahan Jahan Ho Tum"
|-
| "Kaisi Bhekhudi Ka Saamna"
|-
|"Dil Ka Fasana Koi Na Jaana"
| Mahendra Kapoor
|-
! Rowspan=6| ''[[Pyaar Ka Sagar]]''
| "Raat Raat Bhar Jaag Jaag Kar"
| rowspan=6| Ravi
| Asad Bhopali
| rowspan=3| solo
|-
| "Haal Dil Ka Sunaye Toh Kaise"
| rowspan=5| Prem Dhawan
|-
| "Mohabbat Mein Kabhi Aisi Bhi Halaat"
|-
| "Tana Dere Na Tani Tum"
| Shamshad Begum
|-
| "Mujhe Pyaar Ke Zindagi Denewale"
| Mohammed Rafi
|-
| "Pyaar Ka Saagar Dekha Hai"
| Mukesh
|-
!''Pyar Ki Dastan''
| "Pyaar Aisa Hamara Tunhara"
| Shauqat Dehlvi Nashad
| Agha Sarwar
| Suman Kalyanpur
|-
! Rowspan=2| ''Pyar Ki Pyas''
| "Jhoolo More Lalna"
| rowspan=2| Vasant Desai
| rowspan=2| Bharat Vyas
| Lata Mangeshkar
|-
| "Pyas Bujhane Sabke Man Ki"
| Mahendra Kapoor, Lata Mangeshkar
|-
!''Ram Leela''
| "Kya Karun Sajna"
| S. N. Tripathi
| Prem Dhawan
| solo
|-
! Rowspan=5| ''Razia Sultan''
| "Dhalti Jaaye Raat, Keh Le Dil Ko Baat"
| rowspan=5| Lachhiram Tomar
| rowspan=2| Anand Bakshi
| Mohammed Rafi
|-
| "Kehna Naa Mano Main Jawani Ka"
| Rowspan=2| solo
|-
| "Aaja Re Deewane Aaja Re Deewanne"
| Kaifi Azmi
|-
| "Nahi Hai Koi Badaa Husn Se Zamane Mein"
|rowspan=2| Asad Bhopali
| Mahendra Kapoor
|-
| "Allah Kasam Aapse Hum Door Nahin"
| Geeta Dutt
|-
! Rowspan=3| ''Reshmi Rumal''
| "Zulfon Ki Ghata Lekar"
| rowspan=3| Babul
| rowspan=3| Raja Mehdi Ali Khan
| Manna Dey
|-
| "Kyo Ji Aakhir Kaun Ho Tum"
| Mukesh
|-
| "Sar Pe Chunariya"
| solo
|-
! Rowspan=2| ''Roop Ki Rani Choron Ka Raja''
| "Aaja Re Aaja Re, Aaja Nain Duare"
| rowspan=2| Shankar–Jaikishan
| rowspan=2| Shailendra
| Subir Sen
|-
| "Jao Na Satao Rasiya"
| solo
|-
! Rowspan=7| ''Salaam Mem Saheb''
| "Hum Bhi Akele, Tum Bhi Akele"
| rowspan=7| Ravi
| rowspan=2| Qamar Jalalabadi
| rowspan=3| Mohammed Rafi
|-
| "Kya Pyaar Nahin Mujhse"
|-
| "Kahiye Kaisa Mizaaj Hai Aapka"
| rowspan=2| Asad Bhopali
|-
| "Mera Dil Deewana Hain Sanam"
| rowspan=4| solo
|-
| "Aa Kehna Mera Aaj Maan Le"
| rowspan=3| S. H. Bihari
|-
| "Abdullah Mera Naam"
|-
| "Aja Gusse Mein Yeh Baithe Hai"
|-
!rowspan=2| ''Sampoorna Ramayana''
| "Hum Ramchandra Ki Chandrakala Mein Bhi"
|rowspan=2| Vasant Desai
|rowspan=2| Bharat Vyas
| Lata Mangeshkar
|-
| "Baar Baar Bagiya Mein Koyal Na Bole"
| solo
|-
! rowspan=2| ''Sanjog''
| "Jis Raat Jale Na Parwane"
|rowspan=2| Madan Mohan
|rowspan=2| Rajendra Krishan
| Mohammed Rafi
|-
| "Kehte Hai Chand Jisko"
| solo
|-
! rowspan=2| ''Shola Aur Shabnam''
| "Mummy Aur Daddy Mein Ladai Ho Gayi"
| rowspan=2| Khayyam
| rowspan=2|
| solo
|-
| "Phir Nahin Aane Wali Pyare"
| Manna Dey
|-
!rowspan=2| ''Shola Jo Bhadke''
| "Teri Kasam O Dilruba"
|rowspan=2| Nisar Bazmi
| Saba Afghani, Shyam Hindi, Tabish Mahmood
|rowspan=2| Mohammed Rafi
|-
| "Ghungroo Baje Chhum Chhum"
| Saba Afghani
|-
!''Stree''
| "Jhoom Raha Hai Rom Rom Kyon"
| C. Ramchandra
| Bharat Vyas
| Mahendra Kapoor
|-
! Rowspan=2| ''[[Soorat Aur Seerat]]''
| " Jaise Court Me Hakim Ki Chale Re Kalam"
| rowspan=2| Roshan
| rowspan=2| Shailendra
| rowspan=2| solo
|-
| "Garaj Ho To Nakhare Dikhati Hai Biwi"
|-
! Rowspan=3| ''Toofani Tarzan''
| "Mai Hu Jadu Garni Mera Kya Kehna"
| rowslan=3| Iqbal Qureshi
| rowspan=3| Saba Afghani
| rowspan=3| solo
|-
| "Raat Katati Nahi Haay Taron Bhari"
|-
| "Unse Meri Pehli Mulakat Ho Gayi"
|-
! Rowspan=5| ''Wanted''
| "Aayi Zindagi Ki Raat"
| rowspan=5| Ravi
| rowspan=5| Shakeel Badayuni
| rowspan=2| Mohammed Rafi
|-
| "Nigaahen Shauk Se Keh Do"
|-
| "Raat Bhar Gardish Me Saaki Aaj"
| rowspan=3| solo
|-
| "Meri Chhoti Si Duniya Basi Rahe"
|-
| "Jo Dil Pe Guzarte Hai"
|-
! Rowspan=2| ''Warrant''
| "Le Gaya Dil Nikal Ke"
| rowspan=2| Roshan
| rowspan=2| Anand Bakshi
| rowspan=2| solo
|-
| "O Beimaan Maine Tujhe Pehchana"
|-
! Rowspan=2| ''Yeh Basti Yeh Log''
| "Idhar Toh Dekho"
| rowspan=2| Bhola Shreshtha
| Shewan Rizvi
| solo
|-
| "Yeh Taaron Ki Mehfil"
| N/A
| Talat Mahmud
|-
! Rowspan=7| ''Zamana Badal Gaya''
| "Socho Ji Socho Ji Zamana Kya Kahta Hai"
| rowspan=7| Iqbal Qureshi
| rowspan=7| Aziz Kaisi
| rowspan=3| Mohammed Rafi
|-
| "Lahol Wala Aji Masha Allah"
|-
| "Udhar Se Tu Aa Idhar Se Hum"
|-
| "Ganga Ki Dhaar Bahe Ulti Re Aaj"
| rowspan=4| solo
|-
| "Angaarob Pe Chalta Hoga"
|-
| "Karne Wala Kar Gaya"
|-
| "Mere Sham Mere Giridhar"
|-
|}
=== 1962 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! Rowspan=3| ''[[Aarti (1962 film)|Aarti]]''
| "Woh Teer Dil Pe Chala"
| rowspan=3| Roshan
| rowspan=3| Majrooh Sultanpuri
| rowspan=3| Mohammed Rafi
|-
| "Na Bhanwara Na Koyi Gul"
|-
| "Pyar Ki Boliyan Bolti"
|-
!''[[Anpadh]]''
| "Dulhan Marwad Ki Aayi Chham Chham"
| Madan Mohan
| Raja Mehdi Ali Khan
| Mohammed Rafi
|-
! Rowspan=5| ''[[Apna Banake Dekho]]''
| "Hum Pyar Tumhe Karte Hain"
| rowspan=5| Ravi
| rowspan=4| S. H. Bihari
| rowspan=2| [[Mohammed Rafi]]
|-
| "Tere Sadke Mila De Mera Yaar"
|-
| "Kachchi Dagar Panghat Ki"
| rowspan=3| solo
|-
| "Chahat Ka Deewana"
|-
| "Mile Hai Aap Jab Se"
| Asad Bhopali
|-
! Rowspan=2| ''Baaje Ghungroo''
| "Saari Raat Jaagi"
| rowspan=2| Dhaniram
| Madan Mohan
| rowspan=2| solo
|-
| "Preet Bhayi Aisi"
| Shivraj Shrivastav
|-
! Rowspan=4| ''[[Baat Ek Raat Ki]]''
| "Sheeshe Ka Ho Ya Patthar Ka Dil"
| rowspan=4| S. D. Burman
| rowspan=4| Majrooh Sultanpuri
| rowspan=4| Mohammed Rafi
|-
| "Jo Ijaazat Ho To Ek Baat Kahun"
|-
| "Jo Hai Diwane Pyar Ke"
|-
| "Aaj Ka Din Bhi Phika Phika"
|-
!''Banke Sanwariya''
| "Kasan Khuda Ki Sanam"
| S. Mohinder
| Anand Bakshi
| Usha Mangeshkar
|-
! Rowspan=3| ''Bombay Ka Chor''
| " Jawaab De Ya Na De"
| rowspan=3| Ravi
| rowspan=3| Rajendra Krishan
| rowspan=2| Kishore Kumar
|-
| "Hello Hello Ji, Kaho Kya Ji"
|-
| "Naadan Hai Anjaan Hai"
| solo
|-
! Rowspan=6| ''[[China Town (1962 film)|China Town]]''
| "Yammaa Yammaa Yammaa Sau Paravaane Ik Shama"
| rowspan=6| Ravi
| rowspan=6| Majrooh Sultanpuri
| rowspan=4| Mohammed Rafi
|-
| "Humse Na Puchho Hum Kahan Chale"
|-
| "Ye Rang Na Chhootega Ulfat Ki Nishani"
|-
| "Humse Mat Poochho"
|-
| "Rangin Baharo Se Hai Gulzar China Town"
| rowspan=2| solo
|-
| "Lakhon Hasino Se Hai"
|-
!''[[Dil Tera Diwana (1962 film)|Dil Tera Diwana]]''
| "Rikshe Pe Mere, Tum Aa Baithe"
| Shankar–Jaikishan
| Shailendra
| Mohammed Rafi
|-
! Rowspan=4| ''Dilli Ka Dada''
| "Dhundhe Nazar Nazar, Mera Chaand Hai Kidhar"
| rowspan=4| N. Dutta
| Jan Nisar Akhtar
| rowspan=2| Mahendra Kapoor
|-
| "Humne Bhi Mohabbat Ki Thi"
| rowspan=3| Sahir Ludhianvi
|-
| "Rimjhim Rimjhim Sawan Barse"
| Manna Dey
|-
| "Aye Chingu Kya, Aye Shingu Kya"
| Kamal Barot
|-
! Rowspan=2| ''[[Dr. Vidya]]''
| "Aaye Hai Dilruba, Tujhko Kya Pata"
| rowspan=2| S. D. Burman
| rowspan=2| Raja Mehdi Ali Khan
| Geeta Dutt
|-
| "Yun Hans Hans Kar Mat Dekho"
|-
!rowspan=7| ''[[Ek Musafir Ek Hasina]]''<ref>{{Cite web|url=https://m.hindigeetmala.net/movie/ek_musafir_ek_hasina.htm|title=Ek Musafir Ek Hasina : Lyrics and video of Songs from the Movie Ek Musafir Ek Hasina (1962)|website=HindiGeetMala}}</ref>
| "Main Pyaar Ka Raahi Hoon"
| rowspan=7| O. P. Nayyar
| rowspan=2| Raja Mehndi Ali Khan
| rowspan=5| Mohammad Rafi
|-
| "Aap Yunhi Agar Humse Milte Rahe"
|-
| "Bahut Shukriya Badi Meherbani"
|| S H Bihari
|-
| "Kasam Khuda ki Yakeen Tumhe Mohabbat Hai"
| rowspan=4| Shewan Rizvi
|-
| "Teri Talash Mujhko Laayi Kahaan"
|-
| "Hamein Chahe Badnaam Kar De Zamana"
| rowspan=2| solo
|-
| "Udhar Woh Chal Chalte Hai"
|-
! Rowspan=4| ''[[Girls' Hostel]]''
| "Yeh Haseen Raat, Ye Bahaar Yeh Sama"
| rowspan=4| Ravi
| S. H. Bihari
| Mohammed Rafi
|-
| "Sulajhaao Na Ulajhi Zulfon Ko"
| rowspan=2| Gulshan Bawra
| Mukesh
|-
| "Main Akeli Meri Dildar Bahut"
| rowspan=2| solo
|-
| "Chirage Ummid Jal Raha Hai"
| Gulshan Bawra, S. H. Bihari, Asad Bhopali
|-
! Rowspan=3| ''[[Gyara Hazar Ladkiyan]]''
| "Sab Log Jidhar, Woh Hain Udhar"
| rowspan=3| N. Dutta
| rowspan=3| Majrooh Sultanpuri
| rowspan=2| solo
|-
| "Gham Gaya Toh Gham Na Kar"
|-
| "Dil Ki Tamanna Thi"
| Mohammed Rafi
|-
! Rowspan=2| ''Hamen Bhi Jeene Do''
| "Ankho Se Ankhe Khelengi"
| rowspan=2| M. Subbaiah Naidu
| rowspan=2| Saraswati Kumar Deepak
| rowspan=2| solo
|-
| "Pyari Tere Prano Ka Wo Pyara Hai"
|-
!''[[Hariyali Aur Rasta]]''
| "Parwanon Ki Raah Mein"
| Shankar–Jaikishan
| Shailendra
| solo
|-
!rowspan=9| ''Hong Kong''<ref>{{Cite web|url=https://m.hindigeetmala.net/movie/hong_kong.htm|title=Hong Kong : Lyrics and video of Songs from the Movie Hong Kong (1962)|website=HindiGeetMala}}</ref>
| "Tumhari Adao Pe Ae Husnwalo"
| rowspan=9| O. P. Nayyar
| rowspan=5| Raja Mehndi Ali Khan
| rowspan=2| Mohammad Rafi
|-
| "O My God, Hasino Ko Kyun De Di
|-
| "Honolulu"
| rowspan=7| solo
|-
| "Dikhati Hoon Jidhar"
|-
| "Kenya Uganda Tanganyika"
|-
| "Hong Kong China Meena Singapore"
| N/A
|-
| "Ho Jo Humkum To Meherbaan"
| S H Bihari
|-
| "Ye Zulfein Aawara"
| Qamar Jalalabadi
|-
| "Muhabbat Karne Waala"
| Shevan Rizvi
|-
! Rowspan=5| ''Isi Ka Naam Duniya Hai''
| "Akad Kar Ja Rahe Hai Jaiye"
| rowspan=5| Ravi
| Rowspan=5| S. H. Bihari
| Mohammed Rafi
|-
| "Aane Aane Do"
| Sudha Malhotra
|-
| "Ya Habibi O Aa Karibi"
| rowspan=3| solo
|-
| "Madhuban Mein Shyam Ki"
|-
| "Mujhko Sahara Denewale"
|-
! Rowspan=3| ''Jadu Mahal''
| "Jab Murali Baje Jamuna Pe"
| rowspan=3| Bulo C. Rani
| rowspan=3| Shewan Rizvi
| Usha Mangeshkar
|-
| "Kali Ghata Jhume"
| rowspan=2| solo
|-
| "Mujhe Aur De Saki"
|-
! Rowspan=3| ''Jadugar Daku''
| "Koi Pyar Bhari Dhun Chhed Piya"
| rowspan=3| S. N. Tripathi
| rowspan=3| Prem Dhawan
| Lata Mangeshkar
|-
| "Kali Julfe Gori Raat"
| Mahendra Kapoor
|-
| "Rang Bhari Titli Hoon"
| solo
|-
! Rowspan=6| ''Kala Samundar''
| "Mahobbat Karo To Karo Chhup Chhupa"
| rowspan=6| N. Dutta
| Sahir Ludhianvi
| rowspan=2| Mohammed Rafi
|-
| "Meri Tasavir Lekar Kyaa Karoge Tum"
| rowspan=4| Anand Bakshi
|-
| "Ja Re Ja Saiyan Bedardi, Mera Chain Churake"
| rowspan=4| solo
|-
| "Aap Ki Baatein Aap Ki Kasme Sab Juthe"
|-
| "Chanda Ki Doli Taron Ki Toli"
|-
| "Duniya Ne Kaha Vahshi Tum Ne Kha Saudai"
| Ramparkash Ashq
|-
! Rowspan=2| ''Madam Zorro''
| "Pakdo Na Hath Mora Chod Mori Baiya"
| rowspan=2| Bulo C. Rani
| rowspan=2| Shevan Rizvi
| rowspan=2| solo
|-
| "Mehfil Mein Bula Ke"
|-
!''Mall Road''
| "Humne Bhi Pyaar Kiya, Ankhiyon Ko Char Kiya"
| Sudarshan
| Prem Warbatani
| Mohammed Rafi
|-
!''[[Man-Mauji]]''
| "Murge Ne Jhooth Bola"
| Madan Mohan
| Rajendra Krishan
| solo
|-
! Rowspan=5| ''Maya Jaal''
| "Ya Rabu Chhoo Chhoo Mantra Chhoo"
| rowspan=8| S. N. Tripathi
| rowspan=3| Prem Dhawan
| rowspan=2| solo
|-
| "Ho Sa Ra Ra Ra Ki Mara"
|-
| "Sambhal Sambhal Ke Chalna"
| Kamal Barot
|-
| "Mai Tumhara Ho Liya"
| rowspan=4| Qamar Jalalabadi
| Mohammed Rafi
|-
| "Bach Ke Raho Haye Bach Ke Raho"
| Usha Mangeshkar
|-
! Rowspan=3| ''Naag Devta''
| "Tere Hi Chhaya Me Huyi Thi Savitri Ki Jeet"
| rowspan=3| solo
|-
| "Dharti Mata Ban Ke Sahara"
|-
| "Jhankar Payal Ki Taose Vinti Kare"
| Prakash Mehra
|-
! Rowspan=4| ''Nakli Jawab''
| "Nazar Teri Kaisi Badal Gayi Re"
| rowspan=4| Babul
| Raja Mehdi Ali Khan
| rowspan=2| solo
|-
| "Hum Jispe Hai Fida Wo Kahi Aap To Nahin"
| rowspan=3| Kaif Irfani
|-
| "Mast Ankhe Hai Ki Paimane Do"
| rowspan=2| Talat Mahmud
|-
| "Hum Diwane Tere Dar Se Nahi Talnewale"
|-
! Rowspan=5| ''Naughty Boy''
| "Tum Mere Pehchane Phir Bhi Ho Anjaane"
| rowspan=5| S. D. Burman
| rowspan=5| Shailendra
| solo
|-
| "Ho Gayi Sham Dil Badnaam"
| Manna Dey
|-
| "Jahaan Bhi Gaye Ham O Mere Hundum"
| rowspan=3| Kishore Kumar
|-
| "Ab To Batla Are Jalim"
|-
| "Taar Dilo Ke Ab Jod Do"
|-
! Rowspan=2| ''Pathan''
| "Bombay Central Par Gori"
|rowspan=2| Shyam Babu Pathak, Dattaraj
|rowspan=1| Nazim Jaipuri
|rowspan=1| Mahendra Kapoor
|-
| "O Hila Gaye, O Leharaye Re"
| Anjum Jaipuri
| solo
|-
! Rowspan=2| ''Pick Pocket''
| "Aage Pichhe Daye Baye Dil Ko Thame"
| rowspan=2| Sardar Malik
| Gulshan Bawra
| Mohammed Rafi
|-
| "Chhupi Chhupi Baat Dil Ki"
| Kaif Irfani
| solo
|-
! Rowspan=2| ''[[Professor (1962 film)|Professor]]''
| "Hamaare Gaon Koi Aayega"
| rowspan=2| Shankar–Jaikishan
| rowspan=2| Hasrat Jaipuri
| Lata Mangeshkar
|-
| "Ye Umar Hai Kya Rangeeli"
| Usha Mangeshkar, Manna Dey
|-
! Rowspan=4| ''Pyar Ki Jeet''
| "O Oonchi Atariyawale, Lena Kabhi Hamari Khabariya"
| rowspan=4| Sudhir Phadke
| rowspan=4| Qamar Jalalabadi
| rowspan=2| solo
|-
| "Bedard Anadi Sanwariya"
|-
| "Jaane Mere Akhiyon Ne Dekha Hai Kya"
|rowspan=2| Mohammed Rafi
|-
| "Is Jjag Mein Rakhiyo Kabhi Bhi"
|-
! Rowspan=2|''Raaz Ki Baat''
| "Meri Gahghri Mein Ghungroo Laga De"
|rowspan=2| Robin Banerjee
|rowspan=2| Hairat Seetapuri
|rowspan=2| solo
|-
| "Mujhko Pehchano, Mere Dard Ka Andaza Karo"
|-
! Rowspan=5| ''Raj Nandini''
| "Raat Aayi Hai Aanchal Mein Taare Liye"
| rowspan=5| Ramchandra Pal
| rowspan=2| S. H. Bihari
| Talat Mahmud
|-
| "Dil Chhed Koi Aisa Naghma"
| rowspan=4| solo
|-
| "Jhoom Jhoom Ke Chali, Ulfat Ke Gali"
| rowspan=3| Indeevar
|-
| "Mera Jhoome Jiya, Jaise Hawa Mein Diya"
|-
| "Aaya Sawan Ke Tyohar Re"
|-
! Rowspan=2| ''[[Rakhi (1962 film)|Rakhi]]''
| "Dekho Mehnat Se Daulat Ki Yaari"
| rowspan=2| Ravi
| rowspan=2| Rajendra Krishan
| Mohammed Rafi
|-
| "Sitaro Aaj To Hum Bhi Tumhare Sath"
| solo
|-
! Rowspan=4| ''Rashtraveer Shivaji''
| "Aaye The Bigde Huye"
| rowspan=4| Suresh Talwar
| rowspan=4| Anjaan
| rowspan=4| solo
|-
| "Din Baar Baar Yeh Aaye"
|-
| "Yeh Kya Mulakat Huyi"
|-
| "Mubarak Aap Ko Ho"
|-
! Rowspan=2| ''Reporter Raju''
| "Mujhe Dekh Na Kudiye Mud Ke"
| rowspan=2| S. Mohinder
| Anjaan
| rowspan=2| Mohammed Rafi
|-
| "Nazar Mili Hai Ek Katil Se"
| Shakeel Nomani
|-
! Rowspan=2| ''Sachche Moti''
| "Chahe Dekhe Ghoorke, Chahe Deve Galiya"
| rowspan=2| N. Dutta
| rowspan=2| Sahir Ludhianvi
| Mohammed Rafi
|-
| "Sachche Ka Hai Bolbala"
| Sudha Malhotra
|-
! Rowspan=4| ''[[Sahib Bibi Aur Ghulam]]''
| "Meri Baat Rahi Meri Man Men"
| rowspan=4| Hemant Kumar
| rowspan=4| Shakeel Badayuni
| rowspan=4| solo
|-
| "Meri Jaan O Meri Jaan"
|-
| "Sakhiya Aaj Mujhe Neend Nahin"
|-
| "Bhanwara Bada Nadan"
|-
! Rowspan=4| ''Sher Khan''
| "Aise To Hume Dekha Na Karo"
| rowspan=4| S. N. Tripathi
| rowspan=4| Prem Dhawan
| rowspan=1| Mahendra Kapoor
|-
| "Jug Jug Jiye Mera Bhaiya"
| Kamal Barot
|-
| "Koi Kitna Hi Dil Ko Sambhale"
| S. Balbir, Mahendra Kapoor
|-
| "Yeh Baat Bade Hi Raaz Ki Hai"
| Lata Mangeshkar
|-
! Rowspan=7| ''Shiv Parvati''
| "Koi Kali Khili Hogi"
| rowspan=7| S. N. Tripathi
| rowspan=7| Prem Dhawan
| Usha Mangeshkar
|-
| "Tum Hi Tum Din"
| rowspan=5| solo
|-
| "Kiske Naino Ka Yeh Baan"
|-
| "Palko Ki Chhaon Mein Mamta Ka Palna" (Happy)
|-
| "Palko Ki Chhaon Me Mamta Ka Palna" (Sad)
|-
| "Kshama Karo Meri Bhool"
|-
| "More Laage Re"
| Geeta Dutt
|-
! Rowspan=2| ''[[Soorat Aur Seerat]]''
| "Jaise Court Me Hakim Ki Chale Re Kalam"
| rowspan=2| Roshan
| rowspan=2| Shailendra
| rowspan=2| solo
|-
| "Garaj Ho To Nakhare Dikhati Hai Biwi"
|-
! Rowspan=3| ''Tower House''
| "Mausam Hai Jawan Noor Me Dube Hai Najare"
| rowspan=3| Ravi
| rowspan=2| Asad Bhopali
|-
| "Ye Sitam Kya Hai Bana Kar Hamko Diwana Chale"
|-
| "Zara Bach Ke Shikari Shikar Karna"
| S. H. Bihari
|-
! Rowspan=3| ''[[Ummeed (1962 film)|Ummeed]]''
| "Thodi Si Uar Pee Le O Rangeele"
| rowspan=3| Ravi
| rowspan=3| Shakeel Badayuni
| rowspan=2| solo
|-
| "Hamne Chaaha Magar Keh Na Paaye"
|-
| "Dil Ko Bachana Babuji"
| Usha Mangeshkar
|-
! Rowspan=5| ''Vallah Kya Baat Hai''
| "Ek To Surat Pyaari Aur Upar Se Ye Naaz"
| rowspan=5| Roshan
| rowspan=5| Prem Dhawan
| rowspan=3| Mohammed Rafi
|-
| "Khanke To Khanke Kyon"
|-
| "Jab Raat Ko Chamke Taare"
|-
| "Mehfil Me Jo Aaye Tum"
| rowspan=2| solo
|-
| "Teri Meri Ek Jindri Aa Ke Milja Re Mitva"
|-
|}
=== 1963 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! Rowspan=5| ''[[Aaj Aur Kal (1963 film)|Aaj Aur Kal]]''
| "Mujhe Gale Se Lagaa Lo"
| rowspan=5| Ravi
| rowspan=5| Sahir Ludhianvi
| Mohammed Rafi
|-
| "Mujhe Gale Se Laga Lo" (female)
| rowspan=3| solo
|-
| "Maut Kitni Bhi Sangdil Ho"
|-
| "Mohe Chhedo Na Kanha Bajariya Mein"
|-
| "Raja Saheb Ghar Nahin"
| Mahendra Kapoor
|-
! Rowspan=5| ''Akela''
| "Aaj Ki Raat Jawaan Allah Allah"
| rowspan=5| N. Dutta
| rowspan=5| Rajendra Krishan
| rowspan=5| solo
|-
| "Achchhi Surat Buri Nigaah"
|-
| "Paas Na Hove Jinki Roti"
|-
| "Rangeen Paani Ke Dhokhe Mein Aake"
|-
| "Ishq Mein Kya Sochna"
|-
! Rowspan=3| ''[[Akeli Mat Jaiyo]]''
| "Raste Mein Do Anjaane Aise Mile"
| rowspan=3| Madan Mohan
| rowspan=3| Majrooh Sultanpuri
| rowspan=2| Mohammed Rafi
|-
| "Ye Cycle Ka Chakkar"
|-
| "Thodi Der Ke Liye Mere Ho Jao"
| solo
|-
! Rowspan=2| ''Amar Rahe Yeh Pyaar''
| "Mere Andhere Ghar Mrin Ek Chand Aaya"
| rowspan=2| C. Ramchandra
| rowspan=2| Kavi Pradeep
| solo
|-
| "Lakhon Log Chale Hai Bilakhte"
| Kavi Pradeep
|-
! rowspan=3| ''Awara Abdulla''
| "Kahan Se Laayega Yeh Husn Yeh Shabab"
| rowspan=3| N. Dutta
| rowspan=3| Asad Bhopali
|rowspan=2| solo
|-
| "Kabhi Meherbani Kabhi Badgumani"
|-
| "Dil Hai Zaalim Nigaahon Ka Maara"
| Usha Mangeshkar
|-
!rowspan=2| ''[[Bahurani (1963 film)|Bahurani]]''
| "Bane Aisa Samaj"
|rowspan=2| C. Ramchandra
|rowspan=2| Sahir Ludhianvi
| Lata Mangeshkar, Manna Dey
|-
| "Yeh Husn Mera, Yeha Ishq Mera Rangeen"
| solo
|-
! Rowspan=2| ''[[Bandini (1963 film)|Bandini]]''<ref>{{Cite web|url=https://m.hindigeetmala.net/movie/bandini.htm|title=Bandini : Lyrics and video of Songs from the Movie Bandini (1963)|website=HindiGeetMala}}</ref>
| "Do Nainan Ke Milan Ko"
| rowspan=2| S. D. Burman
| rowspan=5| Shailendra
| rowspan=2| solo
|-
| "Ab Ke Baras Bhejo"<ref name="85songs"/>
|-
! Rowspan=3| ''[[Begaana (1963 film)|Begaana]]''
| "Tose Nazar Ladi Sajna Re Mere Man"
| rowspan=3| Sapan–Jagmohan
| rowspan=2| solo
|-
| "Pyar Nibhana Bhul Na Jana Sajan Salone"
|-
| "Sagar Ka Jhilmil Pani Machhariya Balkhati Jaye"
| Manna Dey
|-
! Rowspan=3| ''[[Bharosa]]''
| "Dhadakaa O Dil Dhadka"
| rowspan=3| Ravi
| rowspan=3| Rajendra Krishan
| Lata Mangeshkar
|-
| "Kaahe Itna Guman Chhoriye"
| rowspan=3| Mohammed Rafi
|-
| "Kabhi Dushmani Kabhi Dosti"
|-
! Rowspan=2| ''Bin Badal Barsaat''
| "Dil Me Teri Yad Sanam Lab Pe Tera Nam"
| rowspan=2| Hemant Bhosle
| rowspan=2| Shakeel Badayuni
|-
| "Bin Badal Barsaat Na Hogi"
| solo
|-
! Rowspan=5| ''Captain Sheroo''
| "Ishq Ki Manzil Badi Mushkil"
| rowspan=5| S. Mohinder
| rowspan=3| Raja Mehdi Ali Khan
| rowspan=2| solo
|-
| "Raat Ki Dulhan Saji"
|-
| "Jab Shammein Haseen Jalti Hai"
| rowspan=2| Mohammed Rafi
|-
| "Kiska Intezar Hai Janabe Man"
| rowspan=2| Naqsh Lyallpuri
|-
| "Nazar Ko Milana Mila Kar Jhukana"
| Usha Mangeshkar
|-
! Rowspan=1| ''Chandrashekhar Azad''
| "Humse Nazrein Pher Ke Woh Kya Gaye"
| Shardul Kwatra
| Bhagwant Kwatra
| solo
|-
! Rowspan=5| ''Cobra Girl''
| "Aankh Mili To Dil Dhadka"
| rowspan=5| S. N. Tripathi
| rowspan=5| Prem Dhawan
| rowspan=3| solo
|-
| "Oye Hoy Oye Kar Gaya Dekho Jhutha Wada"
|-
| "Humein Sahara Ek Tihara"
|-
| "Jadugar Dekho Kaisa Ye Jadu"
| Usha Mangeshkar
|-
| "Bada Pachtaye Najariya Mailaike"
| Mohammed Rafi
|-
! Rowspan=2| ''Commercial Pilot Officer''
| "Rimjhim Rimjhim Kajri Badri Barkhane Laagi Re"
| rowspan=2| Roshan
| rowspan=2| Anand Bakshi
| solo
|-
| "Nashili Hawa Hai, Sama Hai Gulaabi"
| Mohammed Rafi
|-
!''Daanveer Karan''
| "Har Dum Rahe Tu More Sang Mein"
| K. Balakrishna
| Prem Dhawan
| Mohammed Rafi
|-
! Rowspan=2| ''Dekha Pyaar Tumhara''
| "Haay Re Haay Masoom Ishare"
| rowspan=2| Raj Ratan
| rowspan=2| Majrooh Sultanpuri
| Mohammed Rafi
|-
| "Chale Aana Sanam Uthaye Kadam"
| solo
|-
! Rowspan=6| ''Dev Kanya''
| "Pag Ghungharoo Bole Chhananan Chhum"
| rowspan=6| S. N. Tripathi
| rowspan=6| B. D. Mishra
| Mahendra Kapoor
|-
| "Zara Pehchano Toh Main Kaun"
| Mukesh
|-
| "Saiyan Chhod De Mera Hath"
| Mohammed Rafi
|-
| "Mata O Mata Jeevan Ki Data"
| rowspan=3| solo
|-
| "O Sansar Banane Wale"
|-
| "Bole Jhan Jhan Jhan Payal Bole"
|-
! Rowspan=2| ''[[Dil Hi To Hai (1963 film)|Dil Hi To Hai]]''
| "Parda Utthe Salaam Ho Jaaye"
| rowspan=2| Roshan
| rowspan=2| Sahir Ludhianvi
| Manna Dey
|-
| "Nigaahen Milaane Ko Jee Chahta Hai"
| solo
|-
! Rowspan=2| ''Ek Tha Alibaba''
| "Yehi Hai Tamanna Yehi Arzoo"
| rowspan=2| Hansraj Behl
| rowspan=2| Prem Dhawan
| solo
|-
| "Mehfil Ki Shama Ko Gul Kar Do"
| Usha Mangeshkar
|-
! rowspan=5| ''[[Faulad]]''
| "Paon Mein Jhanjhar"
| rowspan=5| G. S. Kohli
| rowspan=3| Anjaan
| rowspan=5| solo
|-
| "O Matware Saajna"
|-
| "Jaane Jaana Yun Na Dekho"
|-
| "Yaha To Kate Mauj Se Zindagi"
| rowspan=2| Farooq Kaiser
|-
| "Yaad Tori Aayi Main To Chham Chham Royi Re"
|-
! Rowspan=4| ''[[Gehra Daag (1963 film)|Gehra Daag]]''
| "Tumhe Paake Humne Jahaan Paa Liya Hai"
| rowspan=4| Ravi
| rowspan=4| Shakeel Badayuni
| Mohammed Rafi
|-
| "Kaise Kahoon Main Baat Jiya Ki Sanwariya"
| rowspan=3| solo
|-
| "Main Teri Hui Re Balma"
|-
| "Subah Kaa Bhoola Jab Shaam Ko Ghar Aa Jaye"
|-
!''[[Godaan]]''
| "Janam Liyo Lalna"
| Ravi Shankar
| Anjaan
| solo
|-
! Rowspan=4| ''[[Grihasti]]''
| "Paayal Khul Khul Jaaye Ram Mori"
| rowspan=4| Ravi
| rowspan=4| Shakeel Badayuni
| rowspan=2| Mohammed Rafi
|-
| "Jaa Jaa Re Jaa Diwane"
|-
| "Khile Hain Sakhi Aaj Phulwa Man Ke"
| Lata Mangeshkar, Usha Mangeshkar
|-
| "Jeevan Jyot Jale"
| solo
|-
! Rowspan=3| ''Gul-e-Bakavali''
| "Yeh Kehdo tumhen Humse Kya Chahiye"
| rowspan=3| Hansraj Behl
| Naqsh Lyallpuri
| Surinder Kohli
|-
| "Nigahen Bhi Jawaan Hai"
| Gulshan Bawra
|-
| "Allah Re Kisse Kahe Yeh Jawaani"
| Prem Warbatani
| Usha Mangeshkar
|-
! Rowspan=4| ''[[Gumrah (1963 film)|Gumrah]]''
| "Aa Ja Aa Ja Re"
| rowspan=4| Ravi
| rowspan=4| Sahir Ludhianvi
| rowspan=2| [[Mahendra Kapoor]]
|-
| "Tujhko Mera Pyar Pukare"
|-
| "Ek Pardesi Door Se Aaya"
| rowspan=2| solo
|-
| "Ek Thi Ladki Meri Saheli"
|-
! Rowspan=4| ''[[Gumrah (1963 film)|Gumrah]]''
| "Aa Ja Aa Ja Re"
| rowspan=4| Ravi
| rowspan=4| Sahir Ludhianvi
| rowspan=2| [[Mahendra Kapoor]]
|-
| "Tujhko Mera Pyar Pukare"
|-
| "Ek Pardesi Door Se Aaya"
| rowspan=2| solo
|-
| "Ek Thi Ladki Meri Saheli"
|-
! Rowspan=2| ''Harishchandra Taramati''
| "Hum Jiye Ya Mare"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Kavi Pradeep
| rowspan=2| Usha Mangeshkar
|-
| "Yeh Jawaani Phir Nahin Aani"
|-
! Rowspan=3| ''Holiday in Bombay''
| "Chhaliya Chhailya Pakad Ke Haath"
| rowspan=3| N. Dutta
| N/A
| Usha Mangeshkar
|-
| "Pyar Ki Chandni Dil Ki Dushman Bani"
| Anjaan
| solo
|-
| "Aye Chanda Dena Tu Gawahi"
| Anwar Farrukhabadi
| Mohammed Rafi
|-
! Rowspan=2| ''Jab Se Tumhen Dekha Hai''
| "Are Re Dil Kho Gaya"
| rowspan=2| Dattaram Wadkar
| Anand Bakshi
| Manna Dey, Lata Mangeshkar, Mohammed Rafi
|-
| "Mohammed Shah Rangile"
| Shailendra
| Manna Dey
|-
!''Kahin Pyaar Na Ho Jaaye''
| "Haye Kaisa Yeh Rog Laga Baithe"
| Kalyanji–Anandji
| Asad Bhopali
| Lata Mangeshkar
|-
! Rowspan=3| ''[[Kaun Apna Kaun Paraya]]''
| "Zindagi Bhar Yahi Ikraar Kiye Jayenge"
| rowspan=3| Ravi
| rowspan=3| Shakeel Badayuni
| [[Mohammed Rafi]]
|-
| "Allah Kare, Main Bhi Dulhan Ban Jaun"
| [[Shamshad Begum]]
|-
| "Aaya Bahar Ka Zamana"
| solo
|-
! Rowspan=2| ''Kinare Kinare''
| "Kadmon Mein Sama Ke Parwane"
| rowspan=2| Jaidev
| rowspan=2| Nyay Sharma
| rowspan=2| solo
|-
| "Chhaliya Teri Baaton Baaton Mein"
|-
!rowspan=4| ''Magic Box''
| "Teri Mast Nigabon Ne Banaya Hai"
|rowspan=4| Bulo C. Rani
|rowspan=4| Indeevar
| Mohammed Rafi
|-
| "Gheere Ghata Ghanghor, Saiyan Aaja"
|rowspan=2| solo
|-
| "Raat Pyaar Ka Mila, Chand Kuchh Aur Khila"
|-
| "Kahan Ho Dilwale, Aa Gayi Husn Ki Toliya"
| Jani Babu Qawwal
|-
! rowspan=5| ''Mere Arman Mere Sapne''
| "Unse Pehchan Huyo Jaati Hai"
| rowspan=5| N. Dutta
| rowspan=5| Rajendra Krishan
| rowspan=2| solo
|-
| "Dheere Dheere Bol Mere Paayal Ke Ghungroo"
|-
| "Ek Ladki To Kya"
| Usha Mangeshkar
|-
| "Hai Badi Zor Ki Dhoop"
|rowspan=2| Mohammed Rafi
|-
| "Aankh Hamari Ho, Sapne Tumhari Ho"
|-
!''[[Meri Surat Teri Ankhen]]''
| "Mujhse Nazar Milane Mein"
| S. D. Burman
| Shailendra
| solo
|-
! Rowspan=2| ''[[Mere Mehboob]]''
| "Mere Mehboob Mein Kya Nahin"
| rowspan=2| Naushad
| rowspan=2| Shakeel Badayuni
| rowspan=2| Lata Mangeshkar
|-
| "Janeman Ek Nazar Dekh Le"
|-
! Rowspan=3| ''[[Mujhe Jeene Do]]''
| "Maang Mein Bhar Le Rang Sakhi Ri"
| rowspan=3| Jaidev
| Sahir Ludhianvi
| rowspan=3| solo
|-
| "Moko Pihar Me Mat Chhed Re Balam"
| rowspan=2| Traditional
|-
| "Nadi Naare Na Jaao Shaam"
|-
! Rowspan=2| ''Mulzim''
| "Sang Sang Rahenge Tumhare O Huzur" (Happy)
| rowspan=2| Ravi
| rowspan=2| Shakeel Badayuni
| Mohammed Rafi
|-
| "Aate Hi Jawani Ka Mausam"
| solo
|-
! Rowspan=2| ''Naag Jyoti''
| "Mana Tum Na Rahoge Mana Hum Na Rahenge"
| rowspan=2| Sardar Malik
| rowspan=2| Bharat Vyas
| Mohammed Rafi
|-
| "Jatatavi Galat Jalab Pravah Pavit Sthale"
| solo
|-
! Rowspan=4| ''[[Nartaki (1963 film)|Nartaki]]''
| "Aaj Duniya Badi Suhaani Hai"
| rowspan=4| Ravi
| rowspan=4| Shakeel Badayuni
| rowspan=4| solo
|-
| "Tumne Ankhon Se Pee Ho Toh"
|-
| "Insaan Mohabbat Mein"
|-
| "Zindagi Uljhanon Ko Bhool Kar"
|-
! Rowspan=4| ''Patal Nagri''
| "Apni Garaj Pakad Lini"
| rowspan=4| B. N. Bali
| rowspan=4| S. H. Bihari
| rowspan=4| solo
|-
| "Chanchal Jiyara Nahi More Bas Mein"
|-
| "Jab Tum Mile Toh Kuch Gul Khile"
|-
| "Jiya Mera Jhum Jhum Nache Re"
|-
! Rowspan=6| ''[[Phir Wohi Dil Laya Hoon]]''
| "Door Bahutat Jaiye"
| rowspan=6| O. P. Nayyar
| rowspan=6| Majrooh Sultanpuri
| rowspan=3| Mohammed Rafi
|-
| "O Hamdam Mere Khel Na Jano"
|-
| "Zulf Ki Chhaaon Mein"
|-
| "Mujhe Pyar Me Tum Na Ilzaam Dete"
| rowspan=2| solo
|-
| "Ankhon Se Jo Utri Hai"
|-
| "Dekho Bijalee Dole Bin Baadal Ke"
| Usha Mangeshkar
|-
! Rowspan=5| ''Pyaar Kiya Toh Darna Kya''
| "Mohabbat Ka Naghma Zubaan Par Na Aata"
| rowspan=10| Ravi
|rowspan=5| Shakeel Badayuni
|rowspan=3| Mohammed Rafi
|-
| "Mera Dil Aashiqana Hai"
|-
| "Dil Tumko De Diya"
|-
| "Duniya Mein Mohabbat Walon Ki"
| rowspan=2| solo
|-
| "Baharon Ki Kahani, Sunati Hai Jawani"
|-
! Rowspan=5| ''Pyar Ka Bandhan''
| "Meri Pahali Aarazu Ka"
| Qamar Jalalabadi
| rowspan=2| Mohammed Rafi
|-
| "Aa Meri Ankhon Ki Gehrayi Mein"
| Naqsh Lyallpuri
|-
| "Zaraa Bach Ke O Baliye"
| rowspan=3| Sahir Ludhianvi
| Mahendra Kapoor
|-
| "Ek Pyar Ke Bandhan Ki Khatir" (sad)
| rowspan=2| solo
|-
| "Ek Pyar Ke Bandhan Ki Khatir" (happy)
|-
! Rowspan=4| ''Raja''
| "Tadpe Is Karvat Se Us Karvat"
| rowspan=4| S. N. Tripathi
| rowspan=2| N/A
| rowspan=4| solo
|-
| "Aisi Bhi Kya Jaldi Hai, Thehro Zara"
|-
| "Idhar Bijli Udhar Shola"
| Prem Dhawan
|-
| "Hum Akele Yahan Reh Gaye The"
| Anand Bakshi
|-
! rowspan=4| ''Razia Sultana''
| "Dhalti Jaaye Raat, Keh Le Dil Ki Baat"
| rowspan=4| Lachhiram Tomar
| rowspan=2| Anand Bakshi
| Mohammed Rafi
|-
| "Kehna Naa Mano Main Jawani Ka"
| rowspan=2| solo
|-
| "Aaja Re Deewane Aaja Re Deewane"
| Kaifi Azmi
|-
| "Nahin Hai Koi Bada Husn Se Zamane Mein"
| Asad Bhopali
| Mahendra Kapoor
|-
! Rowspan=2| ''[[Rustom-E-Baghdad]]''
| "Chehra Lal Lal Hai Badli Hui Chal Hai"
| rowspan=2| N. Dutta
| rowspan=2| Asad Bhopali
| rowspan=2| solo
|-
| "Yeh Baat Nahin Hai, Kahen Ki Hum"
|-
!''[[Rustam Sohrab]]''
| "Ab Der Ho Gayi Wallah"
| Sajjad Hussain
| Qamar Jalalabadi
| solo
|-
!''Sehra''
| "Hum Hai Nashe Mein"
| Ramlal
| Hasrat Jaipuri
| solo
|-
! Rowspan=2| ''[[Shikari (1963 film)|Shikari]]''
| "Yeh Rangeen Mehfil Gulaabi Gulaabi"
| rowspan=2| G. S. Kohli
| Qamar Jalalabadi
| solo
|-
| "Maangi Hain Duaaen Hamane Sanam"
| Farooq Kaiser
| Usha Mangeshkar
|-
! Rowspan=2| ''[[Taj Mahal (1963 film)|Taj Mahal]]''
| "Chaandi Kaa Badan Sone Ki Nazar"
| rowspan=2| Roshan
| rowspan=2| Sahir Ludhianvi
| Manna Dey, Meena Kapoor, Mohammed Rafi
|-
| "Husn Se Hai Dunia Hasin"
| solo
|-
! Rowspan=5| ''Tarzan Aur Jadugar''
| Khayalon Mein Tum Ho"
| rowspan=5| Suresh Kumar
| rowspan=5| Talwar, Zafar Rahi
| rowspan=4| solo
|-
| "Pyaar Ke Parwanon Ko"
|-
| "Raja Munne Pyare"
|-
| "Yeh Kaisa Sama Hai, Yeh Kaisi Fiza"
|-
| "Reshmi Ghataon Ke Kaafile"
| Mahendra Kapoor
|-
! ''[[Tere Ghar Ke Samne]]''
| "Dil Ki Manzil Kuchh Aisi Hai"
| S. D. Burman
| Hasrat Jaipuri
| solo
|-
! Rowspan=4| ''[[Ustadon Ke Ustad (1963 film)|Ustadon Ke Ustad]]''
| "Milte Hi Nazar Tumse"
| rowspan=4| Ravi
| rowspan=4| Asad Bhopali
| Mohammed Rafi, Manna Dey
|-
| "Raat Chup Hain, Chandni Madhosh Hain"
| Ravi
|-
| "Mere Dil Ko Jiski Talash Thi"
| rowspan=2| Mohammed Rafi
|-
| "Maine Kaha Tha Aana Sunday Ko"
|-
! Rowspan=7| ''Yeh Dil Kisko Doon''
| "Tera Naam Mera Naam"
| rowspan=7| Iqbal Qureshi
| rowspan=7| Qamar Jalalabadi
| rowspan=3| Mohammed Rafi
|-
| "Kitni Hasin Ho Tum"
|-
| "Kya Hua Maine Agar Ishq Ka Izhaar Kiya"
|-
| "Hume Dum Dai Ke Sautan Ghar Jana"
| Mubarak Begum
|-
| "Main Gavalin Chatki"
| rowspan=3| solo
|-
| "Wah Re Dildaar Banke Tum Pe"
|-
| "Mai Hu Pyare Teri Diwani"
|-
! Rowspan=5| ''Yeh Raste Hain Pyaar Ke''
| "Yeh Khamoshiyan Yeh Tanhaiyan"
| rowspan=5| Ravi
| rowspan=5| Rajendra Krishan
| Mohammed Rafi
|-
| "Yeh Raaste Hain Pyar Ke"
| rowspan=3| solo
|-
| "Jane Chali Kaha Aaj Yeh Meri Zindagi"
|-
| "Gunaaho Ka Diya Tha Haque"
|-
| "Jane Jana Paas Aao"
| Sunil Dutt
|-
! Rowspan=3| ''Zarak Khan''
| "Sham Ki Tanhaiyan Hain"
| rowspan=3| S. Mohinder
| rowspan=3| Anand Bakshi
| rowspan=3| solo
|-
| "Nazar Ne Intezar-e-Yaar Mein Dhokhe Bade Khaye"
|-
| "Nakara Bola Yeh Dil Ka Shola"
|-
!rowspan=2| ''Zingaro''
| "Mohabbat Mein Sab Kuchh Lutaate Chalo"
|rowspan=2| S. N. Tripathi
|rowspan=2| Prem Dhawan
| solo
|-
| "Madhosh Hoke Hum To Chale"
| Mahendra Kapoor
|-
|}
=== 1964 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! Rowspan=2| ''[[Aap Ki Parchhaiyan]]''
| "Kabhi Ithla Ke Chalte Ho"
| rowspan=2| Madan Mohan
| rowspan=2| Raja Mehdi Ali Khan
| Mohammed Rafi
|-
| "Jab Tak Ke Hai Akash Pe Chand Aur Sitare"
| solo
|-
! ''[[Apne Huye Paraye]]''
| "Kahin Ansoo Nikalte Hai"
| Shankar–Jaikishan
| Hasrat Jaipuri
| solo
|-
! Rowspan=5| ''[[Awara Badal]]''
| "Aamna Samna Tose Jab"
| rowspan=5| Usha Khanna
| rowspan=5| Javed Akhtar
| Kamal Barot
|-
| "Chhanke Mori Payal"
| rowspan=4| solo
|-
| "Dil To Nirala Hi Sharabi Hai"
|-
| "Ek Hai Dil Pyar Bhara Kis Ko Mai Du"
|-
| "Parwane Teri Shama Jal Uthi"
|-
!''[[Ayee Milan Ki Bela]]''
| "Aa Ha Ayee Milan Ki Bela"
| Shankar–Jaikishan
| Shailendra
| Mohammed Rafi
|-
! Rowspan=5| ''Badshah''
| "Kuch Tumhe Aur Bhi Aata Hai"
| rowspan=5| N. Dutta
| rowspan=5| Anand Bakshi
| rowspan=4| solo
|-
| "Rahenge Jab Tak Khamosh Hum"
|-
| "Eji Maine Kaha Suniye To Zara Ek Baat"
|-
| "Ankhon Mein Tum Ho Samaye"
|-
| "Nigaahen Aur Chaahe Toh Hamara"
| Poorna Seth
|-
! rowspan=2| ''Baghi''
| "Sakhiya Mera Ek Kaam Kar De"
| rowspan=2| Chitragupt
|rowspan=2| Hasrat Jaipuri
| Usha Mangeshkar
|-
| "Eid Ki Raat Pyaar Layi Hai"
| solo
|-
! Rowspan=3| ''Baghi Shahzada''
| "Udi Udi Jau Mai Udi Udi Jau"
| rowspan=3| Bipin Datta
| rowspan=3| Noor Devasi
| rowspan=3| solo
|-
| "Ja Ja Ja Re Dilbar"
|-
| "Hans Rahi Zindagi Har Taraf"
|-
! Rowspan=2| ''[[Benazir (film)|Benazir]]''
| "Mubarak Ho Woh Dil Jisko"
| rowspan=2| S. D. Burman
| rowspan=2| Shakeel Badayuni
| Lata Mangeshkar, Usha Mangeshkar
|-
| "Gham Nahij Gar Zibdagi Veeran Hai"
| solo
|-
!''Beti Bete''
| "Gori Chalo Na Hanske Chal"
| Shankar–Jaikishan
| Hasrat Jaipuri
| Mohammed Rafi
|-
! Rowspan=2| ''Cha Cha Cha''
| "Ik Chamelee Key Mandave Tale"
| rowspan=2| Iqbal Qureshi
| Maqdoom Mohiuddin
| rowspan=2| Mohammed Rafi
|-
| "Tumse Mano Na Mano"
| Bharat Vyas
|-
!rowspan=3| ''Challenge''<ref>{{Cite web|url=https://www.hindigeetmala.net/movie/challenge.htm|title=Challenge : Lyrics and video of Songs from the Movie Challenge (1964)|website=HindiGeetMala}}</ref>
| "Pukaren Kab Se Tumko"
|rowspan=3| Ajit Merchant
|rowspan=3| Prem Dhawan
| Mukesh
|-
| "Mohabbat Ne Kiya Badnaam"
| rowspan=2| solo
|-
| "Din Hai Suhane Albele"
|-
! Rowspan=3| ''Chandi Ki Deewar''
| "Laage Tohse Nain"
|rowspan=3| N. Dutta
|rowspan=3| Sahir Ludhianvi
| Talat Mahmud
|-
| "Ka Se Kul Duniya Humari"
| solo
|-
| "Jo Kahe Se Tum Sharmaati Ho"
| Mohammed Rafi
|-
! Rowspan=3| ''Char Darvesh''
| "Le Liya Dil Mera Le Liya"
| rowspan=3| G. S. Kohli
| rowspan=2| Raja Mehdi Ali Khan
| rowspan=1| solo
|-
| "Tadpa Le Jitna Chahe"
| Usha Mangeshkar
|-
| "Kali Kali Ankho Me Chamak Gayi Bijli"
| Anjaan
| solo
|-
! Rowspan=2| ''[[Chitralekha (1964 film)|Chitralekha]]''
| "Kahin Tarsaye Jiyara"
| rowspan=2| Roshan
| rowspan=2| Sahir Ludhianvi
| Usha Mangeshkar
|-
| "Chha Gaye Badal Nil Gagan Par"
| Mohammed Rafi
|-
! Rowspan=5| ''Daal Mein Kala''
| "Mohabbat Karna Hai Asan"
| rowspan=5| C. Ramchandra
| rowspan=2| Raja Mehdi Ali Khan
| C. Ramchandra, Kishore Kumar
|-
| "In Ankhon Ko Tumhen Apna Banane Ki Tamanna Hai"
| rowspan=3| solo
|-
| "Samjhe Na Dil Ki Lagi Sajan"
| Majrooh Sultanpuri
|-
| "Tum Chale Aaye Badi Meherbani"
| P. L. Santoshi
|-
| "Do Ankhen Janani, Do Ankhen Mardani"
| Bharat Vyas
| Kishore Kumar
|-
! Rowspan=3| ''Dara Singh''
| "Chhodo Mori Baiya Balma Beimaan Re"
| rowspan=3| Hansraj Behl
| rowspan=3| Prem Dhawan
| solo
|-
| Rasiya O Rasiya Re Nimbuaa Mangaye De"
| Mahendra Kapoor
|-
| "Ghazab Ho Gaya Re, Julam Ho Gayi"
| Shamshad Begum
|-
!''Dooj Ka Chand''
| "Sajan Salona Maang Lo Ji Koi"
| Roshan
| Sahir Ludhianvi
| Lata Mangeshkar
|-
! Rowspan=3| ''[[Door Gagan Ki Chhaon Mein]]''
| "Path Bhula Ik Aaya Musafir"
| rowspan=3| Kishore Kumar
| rowspan=3| Shailendra
| rowspan=3| solo
|-
| "Khoya Khoya Chanda Khoye Khoye Taare"
|-
| "Chhod Meri Baiyya Balam"
|-
! Rowspan=4| ''[[Door Ki Awaaz]]''
| "Haathon Men Haath Honthon Pe Afasaane Pyaar Ke"
| Rowspan=4| Ravi
| Rajendra Krishan
| Mohammed Rafi
|-
| "Mohe Tirchhi Najariya Na Maro"
| rowspan=3| Shakeel Badayuni
| rowspan=2| solo
|-
| "Tut Gayi Mere Man Ki Muraliya"
|-
| "Duniya Kehti Happy Bithday To You"
| Mohammed Rafi, Manna Dey
|-
! Rowspan=2| ''Ek Din Ka Badshah''
| "Tere Hathon Mein Apne Zindagi Ke Sej Dete Hai" (duet)
| rowspan=2| Hansraj Behl
| rowspan=2| Prem Warbatani
| Mahendra Kapoor
|-
| "Bandanawaz Dekhiye Aisa Na Kijiye"
| S. Balbir, Miss Vijay, Surender Kohli, Kishore Sharma, Mohammed Rafi
|-
!''Ganga Ki Lehren''
| "Dekho Ri Koi Kaminiya"
| Chitragupt
| Majrooh Sultanpuri
| solo
|-
!''Gazal''
| "Ada Qaatil, Nazar Barq-e-Aala"
| Madan Mohan
| Sahir Ludhianvi
| solo
|-
! Rowspan=6| ''Geeta Gaaya Pattharon Ne''
| "Aaiye Padhariye"
| rowspan=6| Ram Lal
| Vishwamitra Adil
| rowspan=2| Mahendra Kapoor
|-
| "Sanson Ke Tar Par"
| rowspan=5| Hasrat Jaipuri
|-
| "Tere Khayaalon Mein Hum"
| rowspan=4| solo
|-
| "Aaja Jaanejan Mere Meherbaan"
|-
| "Raat Naujawan"
|-
| "Janaewale O Mere Pyar"
|-
! ''Haqdaar''
| "Kanha Mohe Murli Se Chhal Gayo Re"
| Bulo C. Rani
| S. T. Hussaini
| Usha Mangeshkar
|-
!''Hameer Haath''
| "Na Jeene Ki Ijaazat Hai"
| Sanmukh Babu Upadhyay
| Uday Khanna
| solo
|-
! Rowspan=4| ''Hercules''
| "Ho Gaya Hai Kuch Hame Bhi"
| rowspan=4| N. Dutta
| rowspan=4| Anand Bakshi
| rowspan=4| solo
|-
| "Na Idhar Dekhna Na Udhar Dekhna"
|-
| "Dekh Dekh Chal Ek Ek Pal"
|-
| "Iss Jawani Se Tauba Mastani Se Tauba"
|-
! Rowspan=5| ''His Highness''
| "Aa Ja Re Ankh To Sharmaye Haye"
| rowspan=5| Bhanu Tjakur
| rowspan=5| B. D. Mishra
| rowspan=5| solo
|-
| "Ankh Ladi Dil Mein Gadi Zulmi Nazar"
|-
| "Has Ke Na Jina Julm Hai Balam"
|-
| "Kaha Khoye Radha Ke Saware"
|-
| "Nainawale Yeh Kaise Dore Daale"
|-
!rowspan=2| ''Idd Ka Chand''
| "Dil Uski Mohabbat Mein"
|rowspan=2| A. R. Qureshi
|rowspan=2| Kaifi Azmi
|rowspan=2| solo
|-
| "Ae Bekason Ki Aankg Ke Taare Salaam Le"
|-
!| ''[[Jahan Ara (film)|Jahan Ara]]''
| "Jab Jab Tumhen Bulaaya"
|| Madan Mohan
|| Rajendra Krishan
| Lata Mangeshkar
|-
! Rowspan=3| ''Jantar Mantar''
| "Kya Kahe Tujhse Mohabbat Ho Gayi"
| rowspan=3| Sardar Malik
| rowspan=3| Hasrat Jaipuri
| rowspan=2| solo
|-
| "Jaanewale Laut Ke Aan"
|-
| "Ek Diwana Aayega Ek Mastana"
| Kamal Barot
|-
!''[[Kaise Kahoon]]''
| "Kisi Ke Mohabbat Mein Sab Kuchh Bhula Ke"
| S. D. Burman
| Shakeel Badayuni
| Mohammed Rafi
|-
! Rowspan=5| ''[[Kashmir Ki Kali]]''
| "Isharon Isharon Mein Dil Lenewale"
| rowspan=5| O. P. Nayyar
| rowspan=5| S. H. Bihari
| rowspan=3| [[Mohammed Rafi]]
|-
| "Haay Re Haay, Yeh Mere Haath Mein Tera Haath"
|-
| "Deewana Hua Badal, Sawan Ki Ghata Chhay"
|-
| "Balma Khuli Hawa Mein"
| rowspan=2| solo
|-
| "Phir Thes Lagi Dil Ko"
|-
! Rowspan=2| ''Khufia Mahal''
| "Mere Dil Mein Bhara Hai Pyaar"
| rowspan=2| Pardesi
| rowspan=2| Shyam Hindi
| Usha Mangeshkar
|-
| "Pyaar Hoga Ji, Iqraar Hoga Ji"
| solo
|-
!''[[Kohra (1964 film)|Kohra]]''
| "Kaahe Bajayi Tune Paapi Bansuriya"
| Hemant Kumar
| Kaifi Azmi
| Mahendra Kapoor
|-
! Rowspan=2| ''[[Leader (1964 film)|Leader]]''
| "Daiya Re Daiya Laaj Mohe Laage"
| rowspan=2| Naushad
| rowspan=2| Shakeel Badayuni
| solo
|-
| "Aajkal Shauq-E-Deedar Hai"
| Mohammed Rafi
|-
! Rowspan=2| ''Magic Carpet''
| "Pyaar Ki Baaten Koyi Na Jaane"
| rowspan=2| Ram Prasad
| Shakeel Nomani"
| Mohammed Rafi
|-
| "O Saiyan Bepir Koyi Teer Na Chalana"
| Zia Dehlvi
| solo
|-
!''Maharani Padmini''
| "Unse Kehdo, Kankhaiyon Se Na Dekhe"
| Sardar Malik
| D. N. Madhok
| Kamal Barot
|-
! Rowspan=2| ''Main Bhi Ladki Hoon''
| "Aaye The Huzoor Bade Tan Ke" (Female)
| rowspan=2| Chitragupt
| rowspan=2| Rajendra Krishan
| solo
|-
| "Yahi To Din Hai Baharo Ke"
| Mohammed Rafi
|-
! Rowspan=3| ''Main Suhagan Hoon''
| "Gori Tere Nainwa Kajar Bin Kare Kaee"
| rowspan=3| Lachhiram Tamar
| rowspan=2| Kaifi Azmi
| rowspan=2| Mohammed Rafi
|-
| "Tu Shokh Hawa Main Mast Pawan"
|-
| "Hum Bhi The Anjaan Se"
| Aziz Kashmiri
| Sudha Malhotra
|-
! Rowspan=2| ''[[Phoolon Ki Sej]]''
| "Aaj Ki Raat Mohabbat Ka Nasha"
| rowspan=2| Adi Narayana Rao
| rowspan=2| Hasrat Jaipuri
| Lata Mangeshkar
|-
| "Pyar Ko Madhur"
| Mohammed Rafi
|-
! Rowspan=3| ''[[Pooja Ke Phool]]''
| "Hey Jhummalo, O Baba Jhummalo"
| rowspan=3| Madan Mohan
| rowspan=3| Rajendra Krishan
| rowspan=2| Mohammed Rafi
|-
| "Ab Do Dilo Ki Mushkil Aasaan Ho Gayi Hai"
|-
| "Banda Paravar Ho Rat Ke Andhere Mein Yun"
| solo
|-
! Rowspan=3| ''[[Punar Milan]]''
| "In Pyar Ki Rahon Mein"
| rowspan=3| C. Arjun
| rowspan=2| Indeevar
| Mohammed Rafi
|-
| "Na Jane Kaun Ye Aawaz Deta Hai"
| rowspan=2| solo
|-
| "Ruk Ja O Jaanewale"
| Gulshan Bawra
|-
! rowspan=5| ''Qawwali Ki Raat''
| "Husnwale Husn Ka Anjam Dekh"
| rowspan=5| Iqbal Qureshi
| rowspan=5| Shewan Rizvi
| rowspan=3| Mohammed Rafi
|-
| "Aa Main Bataun Tu Hai Kya"
|-
| "Pyar Ki Hasraten Khaak Mein Mil Gayi"
|-
| "Kehnewale Tu Bhi Keh Le"
| Mohammed Rafi, Manna Dey
|-
| "Maula Tere Karam Kaa"
| solo
|-
!''Rahul''
| "Dim Dim Dim Digo, Ham Waka Gabru Igo"
| Vasant Desai
| Madhukar Rajasthani
| solo
|-
! Rowspan=2| ''[[Rajkumar (1964 film)|Rajkumar]]''
| "Dilruba Dil Pe Tu"
| rowspan=2| Shankar–Jaikishan
| rowspan=2| Shailendra
| Lata Mangeshkar
|-
| "Naach Re Mann Badkamma"
| Mohammed Rafi
|-
!''Roop Sundari''
| "Pyaar Kar Le, Mila Le Nazar"
| Sardar Malik
| Bharat Vyas
| solo
|-
! Rowspan=3| ''Rustom-e-Rome''
| "Jab Se Dekha Tumhen"
| rowspan=3| Suresh Kumar
| rowspan=3| Naza Sholapuri, Zafar Rahi
| Mahendra Kapoor
|-
| "Ye Bahakti Ghataye"
| Mohammed Rafi
|-
| "Pila De Aaj Paimana, Bana De Humko Diwana"
| solo
|-
! Rowspan=2| ''Samson''
| "Tere Deed Se Tasalli"
| rowspan=2| Chitragupt
| rowspan=2| Majrooh Sultanpuri
| solo
|-
| "Poochho Na Hame Ishq Mein Kya Hoga"
| Manna Dey, Mahendra Kapoor
|-
!''[[Sanjh Aur Savera]]''
| "Jiske Liye Tadpe Hum"
| Shankar–Jaikishan
| Hasrat Jaipuri
| Mohammed Rafi
|-
! Rowspan=1| ''Sarfarosh''
| "Phool Muskuraye Kyun"
| S. Mohinder
| Naqsh Lyallpuri
| solo
|-
!''Shabnam''
| "Anadi Hai Shikari Dekho Dillagi"
| Usha Khanna
| Majrooh Sultanpuri
| Usha Mangeshkar
|-
! Rowspan=2| ''Sharabi''
| "Jaao Ji Jaao, Dekhe Hain Bade Tum Jaise"
| rowspan=2| Madan Mohan
| rowspan=5| Rajendra Krishan
| rowspan=2| Mohammed Rafi
|-
| "Tum Ho Hasin Kahan Ke"
|-
! Rowspan=3| ''[[Shehnai (1964 film)|Shehnai]]''
| "Sadiyon Purani Apni Kahani"
| rowspan=3| Ravi
| [[Mohammed Rafi]],
|-
| "Is Tarah Toda Mera Dil"
| rowspan=2| solo
|-
| "Pawan More Angna Mein"
|-
! Rowspan=5| ''Subhadra Haran''
| "Reh Gayi Main Dekhti"
| rowspan=5| Prabhakar Jog
| rowspan=5| Saraswati Kumar Deepak
| rowspan=4| solo
|-
| "Aaya Basant Hai Aaya"
|-
| "Sune Naa Koi Man Ki Vyatha"
|-
| "Kaminiyo Ko Riza Raha Jo"
|-
| "Milan Ki Jaag Uthi Bhavna"
| Mahendra Kapoor
|-
! Rowspan=1| ''[[Suhagan]]''
| "Aayi Dulhan Badi Albeli Mehekti"
| Madan Mohan
| Hasrat Jaipuri
| solo
|-
! Rowspan=2| ''Tarzan Aur Jalpari''
| "Kaun Tum, Tunhi Mere Zindagi Mein Pyaar"
| rowspan=2| Suresh Kumar
| rowspan=2| Zafar Rahi
| rowspan=2| solo
|-
| "Geet Hue Hain Ghazal"
|-
! Rowspan=2| ''Teen Dost''
| "Ho Gayi Balma"
| rowspan=2| T. R. Paapa
| rowspan=2| Prem Dhawan
| Manna Dey
|-
| "Zara Pyaar Karke Dekh"
| solo
|-
! Rowspan=4| ''Tere Dwaar Khada Bhagwan''
| "Baadrawa Kare Jahaan Sajan Hamare"
| rowspan=4| Shanti Kumar Desai
| rowspan=2| P. L. Santoshi
| rowspan=3| solo
|-
| "Main Chahun Tumhen Dekhun Saiyan"
|-
| "Mere Akhiyon Se Dil Mein Tu Aa Rasiya"
| rowspan=2| Pandit Madhur
|-
| "Tere Bina Insaaf Mera Kaun Karega"
| Mohammed Rafi
|-
! Rowspan=5| ''Veer Bhimsen''
| "Mai Tum Pe Teer Chala Doon"
| rowspan=5| C. Ramchandra
| rowspan=5| Kavi Pradeep
| rowspan=4| solo
|-
| "Aayi Aaj Bida Ki Bela"
|-
| "Sakshi Rehna Dharti Mata"
|-
| "Dekho Ji Dekho Meri Ankh"
|-
| "Jiske Pyaar Mein Aatho Pahar Main"
| Mahendra Kapoor
|-
! Rowspan=2| ''[[Woh Kaun Thi?]]''
| "Shokh Nazar Ki Bijliyan"
| rowspan=2| Madan Mohan
| rowspan=2| Raja Mehdi Ali Khan
| solo
|-
| "Tiki Riki Tiki Riki Takori"
| Mohammed Rafi
|-
! Rowspan=1| ''[[Ziddi (1964 film)|Ziddi]]''
| "Champakali Dekho Jhuk Hi Gayi"
| S. D. Burman
| Hasrat Jaipuri
| Mohammed Rafi
|-
! Rowspan=3| ''[[Zindagi (1964 film)|Zindagi]]''
| "Ghungharva Mora, Chham Chham Baaje"
| rowspan=3| Shankar–Jaikishan
| Hasrat Jaipuri
| rowspan=2| Mohammed Rafi
|-
| "Aaj Bhagwan Ke Charanon Mein"
| Shailendra
|-
|"Chhune Na Dungi Haath Re"
| Hasrat Jaipuri
| Lata Mangeshkar
|-
|}
=== 1965 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
!''Aadhi Raat Ke Baad''
| "Kaafir Nazar Takrayi, Dil Ki Huyi Ruswayi"
| Chitragupt
| Anand Bakshi
| Mohammed Rafi
|-
! Rowspan=2| ''Aakash Deep''
| "Jaa Raha Hoon Zindagi Se Door"
| rowspan=2| Chitragupt
| rowspan=2| Majrooh Sultanpuri
| S. Balbir, Manna Dey
|-
| "Gudiya Banke Naachun"
| Usha Mangeshkar
|-
! Rowspan=2| ''Adventures of Robinhood''
|"Jawaan Jawaan Husn Ke Rangin Ye Khafile"
| rowspan=2| G. S. Kohli
| rowspan=2| Anjaan
| Mohammed Rafi
|-
| "Chik Chari O Chari"
| solo
|-
!''Amar Jyoti''
| "Aji O O Saajan Jeevan Bhar Hum Tum Saath Rahe"
| Vasant Desai
| Bharat Vyas
| Mahendra Kapoor
|-
!''[[Arzoo (1965 film)|Arzoo]]''
| "Adab Arz Hai"
| Shankar–Jaikishan
| Hasrat Jaipuri
| Mubarak Begum
|-
! Rowspan=2| ''Baghi Haseena''
| "Bholo Soorat Pe Na Jaana"
| rowspan=2| P. D. Sharma
| rowspan=2| Anjum Jaipuri, Shamim Jaipuri, Shakeel Nomani
| rowspan=2| solo
|-
| "Ye Ada Ya Jawaani"
|-
! Rowspan=4| ''Bahu Beti''
| "Rangeen Fiza Hai Aaja"
| rowspan=4| Ravi
| rowspan=4| Sahir Ludhianvi
| Mahendra Kapoor
|-
| "Meri Mang Ke Rang Mein"
| rowspan=3| solo
|-
| "Aaj Hai Karva Chauth"
|-
| "Bharat Maa Ki Aankh Ke Taaro"
|-
! Rowspan=3| ''Bedaagh''
| "Aankho Aankho Me Naa Jane Kya"
| rowspan=3| Roshan
| rowspan=3| Shakeel Badayuni
| Mohammed Rafi
|-
| "Nikolasa Mere Sanam Jhum Le Zara Sa"
| rowspan=2| solo
|-
| "Bedhadak Dalo Rang Dalo DaRoshan
|-
! Rowspan=3| ''Bekhabar''
| " Karte Ho Mujhse Kitni Mohabbat"
| Rowspan=3| S. Mohinder
| Rowspan=3| Raja Mehdi Ali Khan
| Mohammed Rafi
|-
| "Kyon Chamke Bijiriya Saawan Ki"
| Rowspan=2| solo
|-
| "Idhar Humne Pee Lo Koi Shai Nasheeli"
|-
! Rowspan=3|''Bhakt Prahlad''
| " Pag Ghungroo Baandh Lehraoon Gaoon"
|Rowspan=3| B. N. Bali
|Rowspan=3| Bharat Vyas
|Rowspan=2| solo
|-
| "Raat Basanti Mein Rasvanti Laayi Hoon"
|-
| "Laal Mere Na Jaa"
| Usha Mangeshkar
|-
!''Bheegi Raat''
| "Uff O Tera Baakpan"
| Roshan
| Majrooh Sultanpuri
| solo
|-
!''Bhool Na Jaana''
| "Jhuka Lo Bade Bade Naina"
| Daan Singh
| Indeevar
| solo
|-
! Rowspan=3| ''Bombay Race Course''
| "Yeh Kaun Hai Jo Meri Zindagi Mein Aane Laga"
|Rowspan=3| Madan Mohan
|Rowspan=3| Rajendra Krishan
|Rowspan=3| solo
|-
| "Balam Kabhi Aa, Sajan Kabhi Aa"
|-
| "Pehle Khoon Kharaba, Peechhe Daur Sharaba"
|-
! Rowspan=2| ''Boxer''
| "Tune Jo Samjha Hai Mujhko Ae Jaan-e-Wafa"
|rowspan=2| Laxmikant–Pyarelal
|rowspan=2| Asad Bhopali
|rowspan=2| solo
|-
| "Jaanun Na Jaanun Na, Kasto Ooncho Pyaar"
|-
! Rowspan=2| ''[[Chand Aur Suraj]]''
| "Meri Aur Unki Preet Purani"
| rowspan=2| Salil Chowdhury
| rowspan=2| Shailendra
| rowspan=2| solo
|-
| "Baag Mein Kali Khili"
|-
! Rowspan=1| ''Char Chakram''
| "O Babu Sun Sun Sun Zara"
| Suresh Kumar
| Talwar, Anjaan
| solo
|-
!''Ek Saal Pehle''
| "Nazar Utha Ke Yeh Rangeen Sama Rahe Na Rahe"
| C. Arjun
| Jan Nisar Akhtar
| Talat Mahmud
|-
!''Flying Man''
| "Chand Ko Chand Keh Diya Humne"
| Shauqat Dehlvi Nashad
| Khawar Zaman
| Mohammed Rafi
|-
! Rowspan=2| ''Gopal Krishna''
| "Na Jaao Re Kanhaiya"
| rowspan=2| N. Dutta
| rowspan=2| Bharat Vyas
| rowspan=2| solo
|-
| "Raswanti Naar Aayi Saaj Ke"
|-
!''[[Gumnaam]]''
| "Pee Ke Hum Tum Jo"
| Shankar–Jaikishan
| Hasrat Jaipuri
| solo
|-
! rowspan=6| ''Hum Diwane''
| "Pyar Ki Pehli Mulaqaaton Mein"
| rowspan=6| C. Ramchandra
| rowspan=6| Anand Bakshi
| rowspan=3| C. Ramchandra
|-
| "Suno Husn Walo Ka Humse Fasana"
|-
| "Kabhi Laya Jhumke Na"
|-
| "Humse Ye Dil Kahta Hai"
| Mahendra Kapoor
|-
| "O Janeman Jane Jaan"
| rowspan=2| solo
|-
| "Zulm Hua Haye Sitam Hua"
|-
! Rowspan=2| ''[[Hum Sab Ustad Hain]]''
| "Aha Kya Teri Zulfen Hain"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Asad Bhopali
| rowspan=2| Kishore Kumar
|-
| "Uff Yeh Nikhra Huwa Chehra
|-
!''Jadui Angoothi''
| "Hawa Lehraye Haye Re"
| Suresh Kumar
| Zafar Rahi
| solo
|-
! Rowspan=3| ''Jahan Sati Wahan Bhagwan''
| "Meri Payal Jhanke Baar Baar"
| rowspan=3| Lala Sattar
| N/A
| rowspan=2| solo
|-
| "Dukhiya Nari Kise Pukare"
| B. D. Mishra
|-
| "Din Bite Ladakpan Ke"
| Kamal Barot
| Madhukar Rajasthani
|-
! Rowspan=3| ''[[Janwar (1965 film)|Janwar]]''
| "Dekho Ab To Kisi Ko Nahi Hai Khabar"
| rowspan=3| Shankar–Jaikishan
| rowspan=3| Shailendra
| Balbir, Mohammed Rafi
|-
| "Raat Yun Dil Me Teri Khoyi Hui Yaad Aayi"
| Mohammed Rafi
|-
| "Ankhon Ankhon Mein Kisi Se Baat Hui Hai"
| Manna Dey, Lata Mangeshkar
|-
! Rowspan=7| ''[[Kaajal (1965 film)|Kaajal]]''
| "Cham Cham Ghungaru Bole Dekho"
| rowspan=7| Ravi
| rowspan=7| Sahir Ludhianvi
| rowspan=4| solo
|-
| "Tora Man Darpan Kehlaye"
|-
| "Mere Bhaiya, Mere Chanda, Mere Anamol Ratan"
|-
| "Samajhi Thi Ke Ye Ghar Mera Hai"
|-
| "Agar Mujhe Na Mili Tum To Mai Ye Samjhunga"
| Mahendra Kapoor
|-
| "Zara Si Aur Pila Do Bhang"
| rowspan=2| Mohammed Rafi
|-
| "Kabiraa Nirbhay Raam Jape"
|-
! Rowspan=3| ''Khakaan''
| "Kiya Jo Ishq Toh Hum Ho Haye Deewane Se"
|rowspan=3| N. Dutta
|rowspan=3| Anand Bakshi
| Mohammed Rafi, Kamal Barot
|-
| "Aapki Khayalon Mein Khoye"
| rowspan=2| solo
|-
| "Jaadu Kar Gayi Hai Nazar"
|-
! Rowspan=4| ''[[Khandan (1965 film)|Khandan]]''
| "Neel Gagan Par Udte Badal"
| rowspan=4| Ravi
| rowspan=4| Rajendra Krishan
| rowspan=3| [[Mohammed Rafi]]
|-
| "O Ballo, Sochke Mele Jana"
|-
| "Aa Dance Karen, Thoda Romance Karen"
|-
| "Meri Mitti Mein Mil Gayi Jawani"
| [[Usha Mangeshkar]]
|-
!''Mahabharat''
| "Champakali Chhup Chhup Jaye Re"
| Chitragupt
| Bharat Vyas
| solo
|-
! Rowspan=3| ''Maharaja Vikram''
| "Chale Aao Ji Meri Gali Saiyan"
| rowspan=5| S. N. Tripathi
| rowspan=3| B. D. Mishra
| rowspan=2| solo
|-
| "Nirdayi Insaan"
|-
| "Baaje Re"
| Usha Mangeshkar
|-
! Rowspan=2| ''Mahasati Anusuya''
| "Maar Nazar Tadpaye"
| rowspan=2| Bharat Vyas
| rowspan=2| solo
|-
| "Man Mera Jhule Re"
|-
!''Main Hoon Aladdin''
| "Ae Haseena Main Tujhi Se Pyaar Karta Hoon"
| Usha Khanna
| Farooq Kaiser
| Mohammed Rafi
|-
! Rowspan=5| ''[[Mere Sanam]]''
| "Hamane To Dil Ko Aapake Kadamon Pe Rakh Diya"
| rowspan=5| O. P. Nayyar
| rowspan=5| Majrooh Sultanpuri
| rowspan=3| Mohammed Rafi
|-
| "Roka Kai Baar Maine"
|-
| "Haan Ji Baba"
|-
| "Jaaiye Aap Kahaan Jaayenge"
| rowspan=2| solo
|-
| "Yeh Hai Reshmi"
|-
! Rowspan=2| ''Mohabbat Isko Kehte Hain''
| "Aji Tum Kitne Haseen Ho"
| rowspan=2| Khayyam
| rowspan=2| Majrooh Sultanpuri
| solo
|-
| "Humse Hoti Mohabbat Jo Tumko"
| Mukesh
|-
!''Mujrim Kaun Khooni Kaun''
| Dekh Dekh Duniya Ke Rang"
| Babul
| Anjum Jaipuri
| solo
|-
!''Nai Umar Ki Nai Fasal''
| "Aaj Ki Raat Badi Natkhat" (duet)
| Roshan
| Neeraj
| Mohammed Rafi
|-
! Rowspan=2| ''Namaste Ji''
| "Aasman Gulabi Huyi"
| rowspan=2| G. S. Kohli
| rowspan=2| Anjaan
| rowspan=2| solo
|-
| "Koi Zalim Baharo Ke Bich"
|-
! Rowspan=1| ''Nartaki Chitra''
| "Le Gayo Baaton Mein"
| Ramesh Naidu
| Prem Dhawan
| Manna Dey
|-
! Rowspan=5| ''[[Naya Kanoon]]''
| "Lijiye Dil Ka Nazarana"
| rowspan=5| Madan Mohan
| rowspan=5| Hasrat Jaipuri
| Mohammed Rafi
|-
| "Unhein Kissa-E-Gham Likhne Ko Baithe"
| rowspan=4| solo
|-
| "Aankh Mein Rehte Hai Woh"
|-
| "Meri Rakhi Ki Rakhiyo Tu Aan Re"
|-
| Mere Rasiya, Mere Man Basiya"
|-
! Rowspan=5| ''Neela Akash''
| "In Aankhon Se Nazar Ka Teer"
| rowspan=5| Madan Mohan
| rowspan=5| Raja Mehdi Ali Khan
| rowspan=2| solo
|-
| "Preet Basi Hai Meri Nas Nas Mein"
|-
| "Mere Dil Se Aake Lipat Gayi"
| rowspan=3| Mohammed Rafi
|-
| "Tere Paas Aa Ke Mera Waqt Gujar Jata Hai"
|-
| "Aap Ko Pyaar Chhupaane Kee Buree Aadat Hain"
|-
!''[[Oonche Log (1965 film)|Oonche Log]]''
| "Kaisi Tune Reet Rachi Bhagwan"
| Chitragupt
| Majrooh Sultanpuri
| Manna Dey
|-
!| ''Phir Wohi Shaam'' (unreleased)
| "Phir Wohi Shaam" (female)
|| Madan Mohan
|| Rajendra Krishan
| solo
|-
! Rowspan=2| ''[[Poonam Ki Raat]]''
| "Bhole Piya Jane Kya Tumne Kiya"
| rowspan=2| Salil Chowdhury
| rowspan=2| Shailendra
| rowspan=2| solo
|-
| "Ta Deem Tana Deem"
|-
! Rowspan=4| ''Raaka''
| "Hum Bhi Naye Tum Bhi Naye"
| rowspan=4| N. Dutta
| rowspan=4| Asad Bhopali
| Manna Dey, Mohammed Rafi, Kamal Barot
|-
| "Teri Meharbani Hogi Teri Meharbani"
| Mohammed Rafi
|-
| "Koi Mila Raah Mein Aur Dil Kho Gaya"
| rowspan=2| solo
|-
| "Ho Nain Se Nain Uljh Gaye Re Saiya"
|-
! Rowspan=2| ''Rustom-e-Hind''
| "Nazar Meri Badhi Idhar Se"
| rowspan=2| Hansraj Behl
| rowspan=2| Qamar Jalalabadi
| rowspan=2| solo
|-
| "Raja Ji Tore Raj Me Gujari Maine Ratiya"
|-
! rowspan=3| ''Saat Samandar Paar''
| "Ek Baat Meri Manige Sanam"
|rowspan=3| Chitragupt
|rowspan=3| Farooq Kaiser
| solo
|-
| "Bairi Balma Mora Jia Leke Jaaye"
| rowspan=2| Usha Mangeshkar
|-
| "Chori Chori Aap Pe Dil Aaya"
|-
!''Sangram''
| "Tik Zik Zunga Ki Zunga"
| Lala Sattar
| Madhukar Rajasthani
| solo
|-
! ''Sant Tukaram''
| "Yeh Poonam Ki Chandni"
| Vedpal
| Bharat Vyas
| Manna Dey
|-
! Rowspan=1| ''Sati Nari''
| "Mera Bujhta Hua Deep Jala De"
| Shivram Krishnan
| Neeraj
| solo
|-
! Rowspan=1| ''Shahi Lutera''
| "Ho Gaya Dil Pe Mere Tere Nigaahon Ka Ishaara"
| Bulo C. Rani
| Gulshan Bawra
| Mohammed Rafi
|-
! Rowspan=5| ''Shankar Sita Anusuya''
| "Ayodhya Ki Maaon Zara Aaj Rona"
| rowspan=5| Shivram Krishnan
| rowspan=5| Kavi Pradeep
| rowspan=2| Kamal Barot
|-
| "Meri Rang Rangili Jawani"
|-
| "Raja Ram Ke Beto Phate Aasan Pe Tum"
| rowspan=3| solo
|-
| "Hey Kirano Ke Raja Na Karo"
|-
| "Tu Pritam Se Karle Pyar"
|-
! Rowspan=4| ''Sher Dil''
| "Shikwa Hai Mere Dil Ke Sun Le Jahanwale"
|rowspan=4| C. Ramchandra
|rowspan=4| Hasrat Jaipuri
|rowspan=3| solo
|-
| "Khayalon Mein Woh Ab Toh Aane Lage"
|-
| "Hansta Hua Gulaab Hoon"
|-
| "Sambhal Ke Aana Mukaabil Mein Husnwalon Ke"
| C. Ramchandra
|-
! Rowspan=2| ''Shree Ram Bharat Milan''
| "He Parakrami Surya Devta"
| rowspan=2| Shivram Krishnan
| rowspan=2| Kavi Pradeep
| Kamal Barot
|-
| "Yehi Raho"
| Usha Mangeshkar
|-
! Rowspan=2| ''Sikander-e-Azam''
| "O More Gore Badan Pe Gulabi Nazariya Na Daal"
| rowspan=2| Hansraj Behl
| rowspan=2| Rajendra Krishan
| Usha Mangeshkar
|-
| "Pilaai Tune O Sakiya"
| solo
|-
! Rowspan=7| ''Sindbad Alibaba Aladdin''
| "Lai Lai Maula Lai Lai"
| rowspan=7| Ravi
| rowspan=7| S. H. Bihari
| Minoo Purushottam, Usha Mangeshkar
|-
| "Kya Jawan Raat Hai Baharo Ki"
| Mohammed Rafi
|-
| "Layi Bhar Ke Muhabbat Ke Jam"
| Usha Mangeshkar
|-
| "Banda Parwar Mohabbat Ka Salam Le Lijiye"
| Manna Dey, Mohammed Rafi
|-
| "Ye Hasin Nazare Muntzil Hai Sare"
| rowspan=3| solo
|-
| "Mera Naam Jinny"
|-
| "Aaj Hai Gulfam Se Bhi Badhkar Teri Shaan"
|-
! Rowspan=4| ''Tarzan And Circus''
| "Chand Hai Mehman Ae Dil Aaj Ki Is Rat Ka"
| rowspan=4| Husnlal–Bhagatram
| rowspan=4| Madhukar Rajasthani
| rowspan=2| solo
|-
| "Meri Zulfo Ki Chhao Tale"
|-
| "Gar Hata Do Ae Sanam Parda Zara"
| rowspan=2| Mahendra Kapoor "
|-
| "Meri Bulbul Karti Chulbul"
|-
! Rowspan=4| ''Tarzan Comes To Delhi''
| "Kaari Kaari Ankhiyon Se"
| rowspan=4| Dattaram Wadkar
| Rowspan=4| Anand Bakshi
| Mohammed Rafi
|-
| "Dil Laga Le Dilwale Tujhe Samjhati Hai"
| rowspan=2| Usha Mangeshkar
|-
| "Chham Chham Baje Payal Matwali"
|-
| "Nigahen Chaar Karun Yehi Meri Tamanna Hai"
| solo
|-
!''[[Teen Devian]]''
| "Arre Yaar Meri Ho Tum Bhi Ghajab"<ref name="85songs"/>
| S. D. Burman
| Majrooh Sultanpuri
| Kishore Kumar
|-
! Rowspan=3| ''Teen Sardar''
| "Hum Rukh Se Utha De"
| riwspan=3| Hansraj Behl
| rowspan=3| Prem Warbatani
|-
| "Jaam Ho Bahaar Ho"
| solo
|-
| "Mujhe Behosh Karo"
| Mahendra Kapoor
|-
! Rowspan=2| ''Teesra Kaun''
| "Achha Sanam Kar Le Sitam"
| rowspan=2| R D Burman
| rowspan=2| Anand Bakshi
| rowspan=2| solo
|-
| "O Dilruba Tu Muskura"
|-
! Rowspan=5| ''Tu Hi Meri Zindagi''
| "Jidhar Bhi Main Dekhun"
| rowspan=5| Rono Deb Mukherjee
| rowspan=3| Raja Mehdi Ali Khan
| rowspan=2| Mohammed Rafi
|-
| "Suhana Sama Tum Kaha Hum Yahan"
|-
| "Mere Watan Ka Hai Tu (Sad)
| rowspan=3| solo
|-
| "Yeh Kaun Thak Ke So Raha Hai"
| rowspan=2| Neeraj
|-
| "Mere Watan Ka Hai Tu" (Happy)
|-
! Rowspan=6| ''[[Waqt (1965 film)|Waqt]]''<ref>{{Cite web|url=https://m.hindigeetmala.net/movie/waqt.htm|title=Waqt : Lyrics and video of Songs from the Movie Waqt (1965)|website=HindiGeetMala}}</ref>
| "Maine Dekha Hai Ki Phoolon Se"
| rowspan=6| Ravi
| rowspan=6| Sahir Ludhianvi
| rowspan=3| Mahendra Kapoor
|-
| "Hum Jab Simat Ke Aapki"
|-
| "Din Hai Bahaar Ke"
|-
| "Chehre Pe Khushi Chhaa Jaati Hai"
| rowspan=3| solo
|-
| "Kaun Aaya Ke Nigahon Mein"
|-
| "Aage Bhi Jaane Na Tu"<ref name="85songs"/>
|-
! Rowspan=4| ''Zindagi Aur Maut''
| "Dil Lagakar Ham Ye Samjhe" (female)
| rowspan=4| C. Ramchandra
| rowspan=4| Shakeel Badayuni
| rowspan=4| solo
|-
| "Zindagi Aur Maut Dono Ek Hai"
|-
| "Teri Najro Ka Ishara Mil Gaya"
|-
| "Zara Dekh Mohabat Karke"
|-
|}
=== 1966 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
!''[[Aasra]]''
| "Mere Soone Jeevan Ka Aasra Hai Tu"
| Laxmikant–Pyarelal
| Anand Bakshi
| solo
|-
! Rowspan=2| ''[[Aaye Din Bahar Ke]]''
| "Aye Kaash Kisi Diwane Ko"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Anand Bakshi
| Lata Mangeshkar
|-
| "Khat Likh De Sawariya Ke Naam"
| solo
|-
! Rowspan=2| ''Afsana''
| "Milne Ki Rut Andhiyayi Re"
| rowspan=2| Chitragupt
| rowspan=2| Majrooh Sultanpuri
| rowspan=2| solo
|-
| "Kitni Hai Albelu Zulfen Teri Saheli"
|-
! Rowspan=2| ''Ajnabi''
| "Na Jaane Baat Kya Hai"
| rowspan=2| K. Dutta
| rowspan=2| Hasrat Jaipuri
| rowspan=2| solo
|-
| "Na Jaane Baat Kya Hai Jo"
|-
! Rowspan=3| ''[[Akalmand]]''
| "Sach Kahun I Love You Very Much"
| rowspan=3| O. P. Nayyar
| P. L. Santoshi
| solo
|-
| "Jab Do Dil Ho Bechain"
| N/A
| Shamshad Begum
|-
| "Balma Sajna Duniya Bhula Di"
| Aziz Kashmiri
|rowspan=2| Usha Mangeshkar
|-
! Rowspan=3| ''Alibaba & 40 Thieves''
|"Dil Ki Jazbaat Mohabbat Ki Khushi Aapse Hai"
| rowspan=3| Usha Khanna
| Asad Bhopali
|-
| "Main Masum Dil Masum"
| Javed Anwar
| Rowspan=2| solo
|-
| "Alibaba Alibaba"
| Prem Dhawan
|-
! Rowspan=2| ''[[Anupama (1966 film)|Anupama]]''
| "Kyon Mujhe Itni Khushi"
| rowspan=2| Hemant Kumar
| rowspan=2| Kaifi Azmi
| rowspan=2| solo
|-
| "Bheegi Bheegi Faza"
|-
! Rowspan=2| ''Badal''
| "Nain Bedardi Chhaliya Ke Sang Gaaye"
| rowspan=2| Usha Khanna
| rowspan=2| Asad Bhopali
| solo
|-
| "Aapko Jo Dekhega, Pyaar Hi Se Dekhega"
| Bhupinder Singh
|-
! Rowspan=5| ''[[Baharen Phir Bhi Aayegi]]''
| "Suno Suno Miss Chatterjee"
| rowspan=5| O. P. Nayyar
| Anjaan
| rowspan=2| [[Mohammed Rafi]]
|-
| "Dil To Pehle Hi Se Madhosh Hai"
| Shewan Rizvi
|-
| "Koi Kehde Zamane Se Jaake"
| Aziz Kashmiri
| rowspan=3| solo
|-
| "Woh Hanske Mile Humse"
| S. H. Bihari
|-
| "Badal Jaaye Agar Maali (Sad)"
| Kaifi Azmi
|-
!''[[Biradari (1966 film)|Biradari]]''
| "Sagaar Ko Choom"
| Chitragupt
| Prem Dhawan
| solo
|-
! Rowspan=2| ''[[Biwi Aur Makaan]]''
| "Aise Daaton Mein Ungliya Chubhao Nahi"
| rowspan=2| Hemant Kumar
| rowspan=2| Gulzar
| Usha Mangeshkar
|-
| "Dabe Labon Se Kabhi Jo Koi"
| Lata Mangeshkar
|-
!''[[Budtameez]]''
| "Sirf Tum Hi To Ho"
| Shankar–Jaikishan
| Hasrat Jaipuri
| Mohammed Rafi
|-
!''Chale Hain Sasural''
| "Nayi Nayi Pehchan"
| C. Arjun
| Qamar Jalalabadi
| solo
|-
!''[[Chhota Bhai]]''
| "Baaje Mridang, Kanha Khele Rang"
| Laxmikant–Pyarelal
| Anand Bakshi
| solo
|-
! Rowspan=2| ''Daadi Maa''
| "Maine Aur Kya Kiya, Balam Yahi To Kah Diya"
| rowspan=2| Roshan
| rowspan=2| Majrooh Sultanpuri
| solo
|-
| "Jaane Na Dunga, Na Jaane Dunga"
| Manna Dey
|-
!''Dada''
| "Saawan Ka Mausam Hai"
| Usha Khanna
| Asad Bhopali
| solo
|-
!''Daku Mangal Singh''
| "Pyaar Kiya Hai Humne Jise"
| Laxmikant–Pyarelal
| rowspan=2| Anand Bakshi
| solo
|-
!''Devar''
| "Mushkil Mein Padh Gayi Jaan"
| Roshan
| Usha Mangeshkar
|-
! Rowspan=3| ''[[Dil Diya Dard Liya]]''
| "Sawan Aaye Ya Na Aaye"
| rowspan=3| Naushad
| rowspan=3| Shakeel Badayuni
| [[Mohammed Rafi]]
|-
| "Rasiya Tu Bada Bedardi"
| rowspan=2| solo
|-
| "Dil Haarnewale Aur Bhi Hai"
|-
!rowspan=3| ''[[Dil Ne Phir Yaad Kiya (1966 film)|Dil Ne Phir Yaad Kiya]]''<ref>{{Cite web|url=https://m.hindigeetmala.net/movie/dil_ne_phir_yaad_kiya.htm|title=Dil Ne Phir Yaad Kiya : Lyrics and video of Songs from the Movie Dil Ne Phir Yaad Kiya (1966)|website=HindiGeetMala}}</ref>
| "Humein Toh Khushi Hain"
| rowspan=3| Sonik–Omi
| rowspan=3| G S Rawal
| solo
|-
| "Main Suraj Hu Tu Meri Kiran"
| Mohammed Rafi
|-
| "Jal Jaoge Humne Jalava Dikhaya To"
| Manna Dey
|-
! Rowspan=4| ''Dilawar''
| "Uthe Hai Haath Mere Ab To"
| rowspan=4| N. Dutta
| Rowspan=4| Aziz Kashmiri
| rowspan=3| solo
|-
| "Huzur Aap Ka Tha Intezaar"
|-
| "Janab-E-Ali Idhar Bhi"
|-
| "O Pardanasheen, Parde Ko Zara Chehre Se Hata Do"
| Usha Mangeshkar
|-
!''[[Dillagi (1966 film)|Dillagi]]''
| "Ab Jeene Ka Mausam Aaya"
| Laxmikant–Pyarelal
| Majrooh Sultanpuri
| Mohammed Rafi
|-
! Rowspan=2| ''[[Do Badan]]''
| "Mat Jaiyo Naukariya Chhodke"
| rowspan=2| Ravi
| rowspan=2| Shakeel Badayuni
| rowspan=2| solo
|-
| "Jab Chali Thandi Hawa"<ref name="85songs"/>
|-
! Rowspan=6| ''Do Dilon Ki Dastaan''
| "Kahiye Janabe Ali Kaha Rahe"
| rowspan=6| O. P. Nayyar
| N/A
| rowspan=2| solo
|-
| "Yeh Machalta Samaa Aa Meri Jaane Jaan
| rowspan=4| Raja Mehdi Ali Khan
|-
| "Milati Hai Nazar Nazaron Se Agar"
| rowspan=4| Mohammed Rafi
|-
| "Mujhe Akhiyon Pe Apni Yakin Hai"
|-
| "Aji Pehle Mulakat Mein, Nahi Pyar Jataya Karte"
|-
| "Hum Toh Loot Gaye Pyaar Mein Haye Rama"
| Shewan Rizvi
|-
! Rowspan=2| ''Do Matwale''
| "Hata De Jaam Nazar Se Nazar Mila"
| Rowspan=2| G. S. Kohli
| Rowspan=2| Farooq Kaiser
| solo
|-
| "Aji O Suno To Mera Dil Gaya Re"
| Mahendra Kapoor
|-
! Rowspan=3| ''Duniya Hai Dilwalon Ki''
| "Dil Liya Gham Diya Kya Kiya"
| rowspan=3| Jimmy
| Anjum Jaipuri
| rowspan=2| solo
|-
| "Behki Behki Chaal Meri"
| rowspan=2| Rahil Gorakhpuri
|-
| "Chinya Patakh Dham O Hum Mastana"
| Mohammed Rafi
|-
! Rowspan=6| ''[[Dus Lakh]]''
| "Garibon Ki Suno, Woh Tumhara Sunega" (duet)
| rowspan=6| Ravi
| rowspan=6| Prem Dhawan
| rowspan=3| Mohammed Rafi
|-
| "Duniya Uski Sunti Hai"
|-
| "Teri Patli Kamar Teri Bali Umar"
|-
| "Garibo Ki Suno Wo Tumhaari Sunega (Female)"
| solo
|-
| "Agre Ka Lala Angreji Dulhan Laya Re"
| rowspan=2| Usha Mangeshkar
|-
| "Baje Mori Payal Chhanan Chhanan"
|-
! ''Hum Kahan Jaa Rahe Hain''
| "Rafta Rafta Woh Fil Ke Armaan Ho Rahe Hain"
| Basant Prakash
| Qamar Jalalabadi
| Mahendra Kapoor
|-
! rowspan=2| ''Husn Aur Ishq''
| "Dil Ki Fariyad Se Darr"
| rowspan=2| Ganesh
| rowspan=2| Asad Bhopali
| rowspan=2| solo
|-
| "Maza Barsaat Ka Chaho"
|-
! ''Insaaf''
| "Yeh Tune Kya Kaha"
| Usha Khanna
|Akhtar Romani
| Mukesh
|-
!''Jadoo''
| "Dhadkate Hue Do Dilon Ki Kahani"
| Bulo C. Rani
| Prem Warbatani
| solo
|-
! Rowspan=4|''Jawan Mard''
| "Tune Kyu Mere Dil Ka Chain"
| rowspan=4| N. Dutta
| rowspan=4| Anand Bakshi
| rowspan=4| solo
|-
| "Sharab Shishe Ke Sagar Mein"
|-
| "Mubarak Ho Ki Hotho Pe"
|-
| "Maujon Mein Doob Gaya Sahil Hamara"
|-
! ''Khoon Ka Khoon''
| "Leke Dil Mein Pyaar"
| Usha Khanna
| S. H. Bihari
| solo
|-
! Rowspan=2| ''Kunwari''
| "Kahta Hai Mera Dil Ke Sanam"
| rowspan=2| S. N. Tripathi
| Shailendra
| Mukesh
|-
| "Jhan Jhan Baje Kaisi Madhur"
| B. D. Mishra
| solo
|-
! Rowspan=2| ''Laadla''
| "Aye Malik Dilwa De Ek Ladki"
| rowspan=2| C. Ramchandra
| rowspan=2| Rajendra Krishan
| rowspan=2| Mohammed Rafi
|-
| "Paas Aakar Toh Na Yun Sharmaiye"
|-
! Rowspan=6| ''Labela''
| "Kabhi Taqdeer Ne Itna Hamein"
| rowspan=6| C. Ramchandra
| rowspan=6| Anand Bakshi
| rowspan=3| solo
|-
| "Bhari Mehfil Mein Kya Aise"
|-
| "Li Angdayi Khankaye Kangna"
|-
| "Ek Zamana Tha Aisa"
| rowspan=3| C. Ramchandra
|-
| "O My Dear O My Sanam"
|-
| "Aye Dil Ae Mere Dil"
|-
! Rowspan=2| ''Ladka Ladki''
| "Kismat Jo Pilaye Humko"
| rowspan=2| Madan Mohan
| rowspan=2| Rajendra Krishan
| rowspan=1| solo
|-
| "Aankhon Ko Meri Tum Apne"
| Mahendra Kapoor
|-
! Rowspan=6| ''[[Ladki Sahyadri Ki]]''
| "Kahan Chale Chhaliya Mera Loot Ke Jiya"
| rowspan=6| Vasant Desai
| rowspan=6| Bharat Vyas
| rowspan=5| solo
|-
| "Kyun Lage Laaj Preet Ki"
|-
| "Meri Jhansi Nahi Doongi"
|-
| "Tum Mujhe Khoon Do"
|-
| "Karo Sab Nichhawar Bano Sab Fakir"
|-
| "Angrezo Ne Jeet Li Jhansi"
| [[Mahendra Kapoor]], Amar Shaikh
|-
!''Lal Bungla''
| "Bahon mEin Aaja"
| Usha Khanna
| Gulshan Bawra
| solo
|-
! Rowspan=4| ''Love and Murder''
| "Ye Jiwan Jitni Baar Mile"
| rowspan=4| O. P. Nayyar
| N/A
| rowspan=4| solo
|-
| "Mere Dil Meri Ja Tu Kah De To"
| rowspan=2| Shewan Rizvi
|-
| "Jaan Aur Dil Dono Hai Haazir"
|-
| "Sajan Mere Dil Mein"
| Aziz Kashmiri
|-
!''[[Mamta (1966 film)|Mamta]]''
| "In Paharon Mein Akele Na Phero"
| Roshan
| Majrooh Sultanpuri
| Mohammed Rafi
|-
! Rowspan=2| ''[[Mera Saaya]]''<ref>{{Cite web|url=https://m.hindigeetmala.net/movie/mera_saaya.htm|title=Mera Saaya : Lyrics and video of Songs from the Movie Mera Saaya (1966)|website=HindiGeetMala}}</ref>
| "Naino Wali Ne, Haye Mera Dil Loota"
| rowspan=2| Madan Mohan
| rowspan=2| Raja Mehdi Ali Khan
| rowspan=2| solo
|-
| "[[Jhumka Gira Re]]"
|-
! Rowspan=4| ''[[Mohabbat Zindagi Hai (1966 film)|Mohabbat Zindagi Hai]]''
| "Raaton Ko Chori Chori"
| rowspan=4| O. P. Nayyar
| rowspan=4| S. H. Bihari
| rowspan=2| solo
|-
| "Nazar Nazar Se Milao To"
|-
| "Tum Sabse Haseen Ho"
| rowspan=2| Mahendra Kapoor
|-
| "Mehfil Mein Dilwaalon Ki"
|-
! Rowspan=2| ''Nagin Aur Sapera''
| "Na Badla Aakash Ka Chanda"
| rowspan=2| Harbans
| rowspan=2| Satya Pal Varma
| rowspan=2| solo
|-
| "Teri Been Hai Jadu Mera"
|-
!''Naujawan''
| "Koi Nazar Aashiqana Toh Dekhe"
| G. S. Kohli
| Anjaan
| Usha Mangeshkar
|-
! Rowspan=5| ''[[Neend Hamari Khwab Tumhare (1966 film)|Neend Humari Khwab Tumhare]]''
| "Kabhi Tera Daman Na Chhodenge Hum"
| rowspan=5| Madan Mohan
| rowspan=5| Rajendra Krishan
| rowspan=2| Mohammed Rafi
|-
| "Husn Jab Jab Ishq Se Takra Gaya"
|-
| "Koi Shikwa Bhi Nahi"
| rowspan=2| solo
|-
| "Bheegi Hui Is Raat Ka Aanchal"
|-
| "Sakiya Ek Jaam Woh Bhi To De"
| Mubarak Begum
|-
! rowspan=2| ''Pati Patni''
| "Maar Dalega Dard-e-Jigar"
| rowspan=2| R D Burman
| rowspan=2| Anand Bakshi
| solo
|-
| "Kaise Dekha Hai Mujhe Ji"
| Manna Dey
|-
! Rowspan=4| ''[[Phool Aur Patthar]]''
| "Laaya Hai Hazaron Rang Holi"
| rowspan=4| Ravi
| rowspan=4| Shakeel Badayuni
| Rowspan=4| solo
|-
| "Shishe Se Pi Yaa Paimaane Se Pi"
|-
| "Sun Le Pukar Aayi Aaj Tere Dwaar"
|-
| "Zindagi Mein Pyar Karna Seekh Le"
|-
! Rowspan=5| ''Picnic''
| "Mausam Lehra Gaya Nasha Sa Chha Gaya"
| rowspan=5| S. Mohinder
| rowspan=5| Majrooh Sultanpuri
| rowspan=3| Mohammed Rafi
|-
| "Dil Mera Le Lo Ha Ha Bah?"
|-
| "Jab Mera Aanchal Dhalega"
|-
| "Anchal Ko Udne Do"
| solo
|-
| "He Nainva Na Pher Pher Ke"
| Usha Mangeshkar
|-
!''Pinjre Ka Panchhi''
| "Jhoom Le Jhoom Le Ae Matwale Dil"
| Salil Chowdhury
| Shailendra
| solo
|-
!''Pyar Kiye Ja''
| "Sun Le Pyar Ki Dushman Duniya"
| Laxmikant–Pyarelal
| Rajendra Krishan
| Lata Mangeshkar, Kishore Kumar, Manna Dey
|-
! Rowspan=3| ''[[Pyar Mohabbat]]''
| "Tujhko Dekh Kar Nooro Allah"
| rowspan=3| Shankar–Jaikishan
| rowspan=2| Hasrat Jaipuri
|-
| "Hurre Pyaar Mohabbat Ke Sivaa"
|-
| "Aaj Aaye Ri Banke More Saiyan"
| Shailendra
| Usha Mangeshkar
|-
! Rowspan=2| ''[[Saaz Aur Awaaz]]''
| "Pyaar Ki Raah Bahar Ki Manzil"
| rowspan=2| Naushad
| rowspan=2| Khumar Barabankvi
| rowspan=3| Mohammed Rafi
|-
| "Tum Ishq Ki Mehfil Ho"
|-
! Rowspan=3| ''[[Sagaai]]''
| "Na Yeh Zameen Thi, Na Yeh Asmaan Tha"
| rowspan=3| Ravi
| rowspan=3| Rajendra Krishan
|-
| "Khaak Mein Mila To Kya"
| Usha Khanna, Usha Mangeshkar
|-
| "Sajan Tori Preet Raat Bhar Ki"
| solo
|-
! Rowspan=5| ''Sarhadi Lutera''
| "Jannat Ki Hur Aapki Mehfil Mein"
| rowspan=5| Iqbal Qureshi
| rowspan=5| M. A. Taj
| Mohammed Rafi
|-
| "Allah Kasam Aaya"
| Usha Mangeshkar
|-
| "Aisi Qatil Ada Aisa Zalim Shabab"
| rowspan=3| solo
|-
| "Haale Dil Sunaane"
|-
| "Tum Mile Toh Zindagi Mili"
|-
! Rowspan=7| ''[[Sawan Ki Ghata]]''
| "Honthon Pe Hasi Sawan Ki Ghata"
| rowspan=7| O. P. Nayyar
| rowspan=7| S. H. Bihari
| Mohammed Rafi
|-
| "Khuda Huzur Ko Meri Bhi Zindagi De De"
| Usha Mangeshkar
|-
| "Jo Dil Ki Tadap Na Jaane"
| rowspan=5| solo
|-
| "Zara Haule Haule Chalo More Sajna"
|-
| "Meri Jaan Tum Pe Sadake" (female)
|-
| "Aaj Koi Pyar Se Dil Ki Baate Kah Gaya"
|-
| "Haule Haule Sajna, Dhire Dhire Balma"
|-
! rowspan=2| ''Shankar Khan''
| "Dil Kho Gaya Hai Mera"
| rowspan=2| S. N. Tripathi
| rowspan=2| B. D. Mishra
| rowspan=2| solo
|-
| "Haseeno Nazneeno Naacho"
|-
!''Sher Afghan''
| "Yeh Jawani Ka Bichhua"
| Husnlal–Bhagatram
| Hasrat Jaipuri
| Minoo Purushottam
|-
! Rowspan=3| ''Shera Daku''
| "Dil De Ke Darde Mohabbat Liya Hai"
| rowspan=3| Ganesh
| rowspan=2| N/A
| rowspan=3| solo
|-
| "Hans Ke Chala Teer Pe Teer"
|-
| "O Kanta Babulwa Ka Chubh"
| Noor Devasi
|-
! Rowspan=2| ''Smuggler''
| "Kaise Kaise Kaam Kiya"
| rowspan=2| Ganesh
| rowspan=1| Indeevar
| Mahendra Kapoor
|-
| "Na Aaya Hamein Pyyaar Karna"
| solo
|-
! Rowspan=2| ''Sunehre Kadam''
| "Yeh Jawaani Badi Badnaam Hai"
| rowspan=2| S. Mohinder
| rowspan=2| Anand Bakshi
| Sudha Malhotra
|-
| "Nazuk Hoon Albeli Hoon"
| solo
|-
! Rowspan=2| ''Sunehre Kadam''
| "Yeh Jawaani Badi Badnaam Hai"
| rowspan=2| S. Mohinder
| rowspan=2| Anand Bakshi
| Sudha Malhotra
|-
| "Nazuk Hoon Albeli Hoon"
| solo
|-
! Rowspan=2| ''[[Suraj (1966 film)|Suraj]]''
| "Kasie Samjhaaon Badi Nasaamjh Ho"
| rowspan=2| Shankar–Jaikishan
| rowspan=2| Hasrat Jaipuri
| rowspan=2| Mohammed Rafi
|-
| "Ek Baar Aati Hai Rut Aisi"
|-
!rowspan=2| ''Sushila''
| "Satyamev Jayate"
|rowspan=2| C. Arjun
|rowspan=2| Jan Nisar Akhtar
| Usha Mangeshkar, chorus
|-
| "Mere Aanchal Ka Diya"
| solo
|-
! Rowspan=3| ''Tasveer''
| "Main Teri DilTera Re Mitwa"
| rowspan=3| C. Ramchandra
| rowspan=3| D. N. Madhok
| rowspan=3| solo
|-
| "Samjhoge Tum Kya Bhala"
|-
| "Mere Sulagte Huye Dil Ko"
|-
! Rowspan=3| ''[[Teesri Kasam]]''<ref>{{Cite web|url=https://m.hindigeetmala.net/movie/teesri_kasam.htm|title=Teesri Kasam : Lyrics and video of Songs from the Movie Teesri Kasam (1966)|website=HindiGeetMala}}</ref>
| "Paan Khaye Saiyan Hamaro"
| rowspan=3| Shankar–Jaikishan
| rowspan=3| Shailendra
| rowspan=3| solo
|-
| "Haye Gajab Kahin Taara Toota"
|-
| "Laali Laali Doliya Mein"
|-
! Rowspan=4| ''[[Teesri Manzil]]''<ref>{{Cite web|url=https://m.hindigeetmala.net/movie/teesri_manzil.htm|title=Teesri Manzil : Lyrics and video of Songs from the Movie Teesri Manzil (1966)|website=HindiGeetMala}}</ref>
| "Dekhiye Saahibo Woh Koi Aaur Thi"
| rowspan=4| R D Burman
| rowspan=4| Majrooh Sultanpuri
| rowspan=3| Mohammed Rafi
|-
| "Aaja Aaja Main Hoon Pyaar Tera"
|-
| "O Haseena Zulfonwali"
|-
| "O Mere Sona Re"
| solo
|-
! Rowspan=3| ''[[Thakur Jernail Singh]]''
| "Aayi Naino Me Kajra Daal Ke"
| rowspan=3| Ganesh
| Farooq Kaiser
| rowspan=3| solo
|-
| "Dil Mila Ke Milo Paas Aa Ke Milo"
| Indeevar
|-
| "Hum Tere Bin Jee Nahin Sakenge"
| Asad Bhopali
|-
! Rowspan=2| ''Veer Bajrang''
| "Meri Aankhdiyon Mein Hai Jo Palak"
|rowspan=2| Shivram Krishnan
|rowspan=2| Kavi Pradeep
|rowspan=2| solo
|-
| "Pinjare Ki Maina, Sun Meri Kehna"
|-
! Rowspan=7| ''[[Yeh Raat Phir Na Aayegi (1966 film)|Yeh Raat Phir Na Aayegi]]''
| "Aap Se Meri Jaan Maine Mohabbat Ki Hai"
| rowspan=7| O. P. Nayyar
| rowspan=4| S. H. Bihari
| rowspan=2| Mohammed Rafi
|-
| "Phir Miloge Kabhi Is Baat Ka Vaada Karlo"
|-
| "Main Shaayad Tumhare Liye Ajnabi Hoon"
| rowspan=4| solo
|-
| "Yehi Woh Jagaah Hai"
|-
| "Mohabbat Chiz Hai Kya"
| rowspan=3| Aziz Kashmiri
|-
| "Har Tukda Mere Dil Ka Deta Hai Duhai"
|-
| "Huzurevaalaa Jo Ho Ijaazat To"
| Minoo Purushottam
|-
! Rowspan=4| ''Yeh Zindagi Kitni Haseen Hai''
| "Jeene Ka Agar Andaz Aaye"
| rowspan=4| Ravi
| rowspan=4| Rajendra Krishan
| rowspan=4| solo
|-
| "Mashalla Tum Jawa Ho" (Female)
|-
| "Koi Aankh Mila Ke Dekhe"
|-
| "Dekho Yeh Diwana"
|-
! Rowspan=4| ''Zimbo Ka Beta''
| "Meri Jaan Yunhi Raho"
| rowspan=4| Sapan–Jagmohan
| rowspan=4| Naqsh Lyallpuri
| Usha Mangeshkar
|-
| "Gungun Gaoon, Hawaon Mein Lehraoon"
| Rowspan=3| solo
|-
| "Meri Ankhen Hai Nashili"
|-
| "Dil Jiske Liye Betaab Raha"
|-
|}
=== 1967 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! Rowspan=3| ''Aag''
| "Teri Reshmi Zulfen Chhu Kar Jab"
| rowspan=3| Usha Khanna
| rowspan=3| Asad Bhopali
| rowspan=2| Mahendra Kapoor
|-
| "Ek Bijli Se Meri Ankh Lad Gayi"
|-
| "Ghunghat Na Kholungi"
| solo
|-
! Rowspan=3| ''Aayega Aanewala''
| "Koi Aayega Aag Se Aag Bujhane"
| rowspan=3| Sapan–Jagmohan
| rowspan=3| Naqsh Lyallpuri
| rowspan=3| solo
|-
| "Mere Anchal Se Khele Hawa"
|-
| "Le Le Haath Se Chala Bada Chulbula Hai Dil"
|-
! Rowspan=2| ''[[An Evening in Paris]]''
| "Zuby Zuby Zalembu"
| rowspan=2| Shankar–Jaikishan
| Hasrat Jaipuri
| solo
|-
| "Raat Ke Humsafar"
| Shailendra
| Mohammed Rafi
|-
! Rowspan=3| ''Arabian Nights''
| "Ya Jale Mehfil Aarzu Hai Bas Ek Jaam Ki"
| rowspan=3| Lala Sattar
| Akhtar Romani
| rowspan=3| solo
|-
| "Husn Ke Jalwe Hai Jawaan"
| Madhukar Rajasthani
|-
| "Dekho Ji Dil Gaya Dil Gaya"
| Aish kanwal
|-
! Rowspan=3| ''[[Aurat (1967 film)|Aurat]]''
| "Shola Ulfat Ka Bhadkake"
| rowspan=3| Ravi
| rowspan=3| Shakeel Badayuni
| [[Mohammed Rafi]]
|-
| "Yeh Kaun Hai, Jiske Aane Se Suraj Ki Kiran Sharmaye"
| [[Mahendra Kapoor]]
|-
| "Hamen Tumse Mohabbat"
| solo
|-
! rowspan=2| ''[[Awara Ladki]]''
| "Aare Jaanewale Nazar Toh Mila Jaa"
| rowspan=2| Dhaniram
| Kaif Irfani
| rowspan=2| solo
|-
| "Tum Chale Tum Chale"
| N/A
|-
!''Badrinath Yatra''
| "Yeh Zindagi Hai Chaar Din Ki"
| Shivram Krishnan
| Madan Bharti
| solo
|-
! ''[[Baharon Ke Sapne]]''
| "Do Pal Jo Teri Aankhon Se"
| R D Burman
| Majrooh Sultanpuri
| Usha Mangeshkar
|-
! Rowspan=4| ''[[Bahu Begum]]''
| "Nikle The Kahan Jaane Ke Liye"
| rowspan=4| Roshan
| rowspan=4| Sahir Ludhianvi
| rowspan=2| solo
|-
| "Sirf Apne Khayalon Ki Parchhayi Hai"
|-
| "Padh Gaye Jhoole, Sawan Rut Aayi Re"
| Lata Mangeshkar
|-
| "Hum Intezar Karenge" (duet)
| Mohammed Rafi
|-
!''Bhakta Prahlad''
| "O Ro Chatpat Chatpat Chhori"
| S. Rajeswara Rao, Rajagopal Krishnan
| P. L. Santoshi
| Mohammed Rafi
|-
! Rowspan=3| ''[[Boond Jo Ban Gayee Moti]]''<ref name=Hindigeetmala>{{cite web|title=Boond Jo Ban Gayi Moti|url=lhttp://www.hindigeetmala.net/movie/boond_jo_ban_gaye_moti.htm|website=hindigeetmaa|publisher=Hindi Geetmala|access-date=13 February 2015}}</ref>
| "Meri Zindagi Ek Khwab Hai"
| rowspan=3| Satish Bhatia
| rowspan=3| Bharat Vyas
| solo
|-
| "Lovely Lovely Hai Sama"
| [[Mahendra Kapoor]]
|-
| "Boond Jo Ban Gayee Moti"
| [[Manna Dey]]
|-
! Rowspan=6| ''[[C.I.D. 909]]''
| "Dhadka To Hoga Dil Zarur"
| rowspan=6| O. P. Nayyar
| Aziz Kashmiri
| rowspan=2| Mahendra Kapoor, Kamal Barot
|-
| "Tera Nikhra Nikhra Chehra"
| rowspan=2| Shewan Rizvi
|-
| "Yaar Badmash Hai Dilruba"
| rowspan=3| solo
|-
| "Aadi Ka Kinara Ho Pani Aawara Ho"
| Verma Malik
|-
| "Chaho To Jan Le Lo Malik"
| rowspan=2| S. H. Bihari
|-
| "Jaane Tamanna Kya Kar Dala"
| Mahendra Kapoor
|-
! Rowspan=3| ''[[Chandan Ka Palna]]''
| "Mastana Hoye Parwana Hoye"
| rowspan=3| R D Burman
| rowspan=3| Anand Bakshi
| rowspan=2| [[Manna Dey]]
|-
| "Baat Karte Ho"
|-
| "Zulfon Ko Aap Yun Na Sawaara Karo"
| Mohammad Rafi
|-
! Rowspan=1| ''[[Chhaila Babu]]''
| "Tum Sanwarte Jo Toh Hu. Darte Hain"
| Laxmikant–Pyarelal
| M A Taj
| C. Ramchandra
|-
! Rowspan=2| ''[[Chhoti Si Mulaqat]]''
| "Mta Jaa Mat Jaa, Mere Bachpan Nadaan"
| rowspan=2| Shankar–Jaikishan
| Shailendra
| solo
|-
| "Chhoti Si Mulaqaat Pyaar Ban Gayi"
| Hasrat Jaipuri
| Mohammed Rafi
|-
! ''Dil Ne Pukara''
| "Kis Qadar Zaalim Ho Qatil"
| Kalyanji–Anandji
| Qamar Jalalabadi
| Manna Dey
|-
! Rowspan=3| ''Dilruba''
| "Main Kaise Qadam Apne Peechhe Hata Lpon"
|rowspan=3| Usha Khanna
|rowspan=1| S. H. Bihari
| rowspan=2| solo
|-
| "Jaane Jigar Na Dekh Idhar"
| rowspan=2| Asad Bhopali
|-
| "Haye Allah Kyun Humne Pyaar Kiya Tha Tumse"
| Usha Mangeshkar
|-
! Rowspan=5| ''Do Dushman''
| "Vai Vai Loshe Loshe O Dilbar Ishq Kurbana"
| rowspan=5| Manohar
| rowspan=5| Aziz Kaisi
| Mohammed Rafi
|-
| "Aan Hi Kaha Ban Than Ke Chali"
| Kamal Barot, Mahendra Kapoor, Bhupinder Singh
|-
| "Chammak Challo Jiyo Walla"
| Kamal Barot
|-
| "O Yara Yaar Mile To"
| Minoo Purushottam
|-
| "Ya Kurban Ae Husn Tera Jana"
| Manna Dey
|-
!''Dulhan Ek Raat Ki''
| "Hamar Kaha Maano Raja Ji"
| Madan Mohan
| Raja Mehdi Ali Khan
| Usha Mangeshkar
|-
! Rowspan=3| ''Duniya Nachegi''
| "Raat Ko Bagh Mein Mere Dilbar"
| rowspan=3| Laxmikant–Pyarelal
| rowspan=3| Majrooh Sultanpuri, Raja Mehdi Ali Khan
| solo
|-
| "Anjam-E-Mohabbat Hum Kya Jane"
| Usha Mangeshkar
|-
| "Ki Jo Mai Hota Hawa Ka Jhonka"
| Manna Dey
|-
!''[[Farz (1967 film)|Farz]]''
| "Aaja Aaja Mere Paas"
| Laxmikant–Pyarelal
| Anand Bakshi
| solo
|-
! Rowspan=3| ''Ghar Ka Chirag''
| "Jaane Kaise Chori Chori Balama Ne Dekha"
| rowspan=3| Madan Mohan
| rowspan=3| Kaifi Azmi
| rowspan=3| solo
|-
| "Ae Mahalon Mein Rahnewlo"
|-
| "Jaane Mera Chanda Khoya Hai Kahan"
|-
! Rowspan=3| ''Gunehgar''
| "Sham Dhali Shama Jali"
| rowspan=3| Ved Pal
| N/A
| rowspan=3| solo
|-
| "Bajariya Mein Kaise Najariya"
| rowspan=2| Akhtar Romani
|-
| "Husn Hai Dil"
|-
!''Hamare Gam Se Mat Khelo''
| "Shaukh-e-Bepaayan Ka Izhaar Karun Ya Na Karun"
| Jaidev
| Nyaya Sharma
| solo
|-
!''[[Hamraaz]]''
| "Tu Husn Hai, Main Ishq Hoon"
| Ravi
| Sahir Ludhianvi
| Mahendra Kapoor
|-
! Rowspan=2| ''[[Hare Kanch Ki Chooriyan]]''<ref>{{Cite web|url=https://m.hindigeetmala.net/movie/hare_kanch_ki_chooriyan.htm|title=Hare Kanch Ki Chooriyan : Lyrics and video of Songs from the Movie Hare Kanch Ki Chooriyan (1967)|website=HindiGeetMala}}</ref>
| "Dhani Chunri Pahan Sajke Banke Dulhan"
| rowspan=2| Shankar–Jaikishan
| rowspan=2| Shailendra
| solo
|-
| "Panchchi Re O Panchchi Panchchi Re O Panchchi"
| Mohammad Rafi
|-
!''[[Hum Do Daku]]''
| "Ae Haseeno Nazneeno"
| Kishore Kumar
| Shailendra
| Kishore Kumar, Usha Mangeshkar
|-
!''[[Jaal (1067 film)|Jaal]]''
| "Dil De De"
| Laxmikant–Pyarelal
| Anand Bakshi
| Mohammed Rafi
|-
! Rowspan=2| ''[[Jewel Thief]]''
| "Baithe Hai Kya Uske Paas"
| rowspan=2| S. D. Burman
| rowspan=2| Majrooh Sultanpuri
| rowspan=2| solo
|-
| "[[Raat Akeli Hai]]"
|-
! Rowspan=2| ''[[Laat Saab]]''<ref>{{Cite web|url=https://m.hindigeetmala.net/movie/laat_saab.htm|title=Laat Saab : Lyrics and video of Songs from the Movie Laat Saab (1967)|website=HindiGeetMala}}</ref>
| "Tan Mein Agni Man Men Chubhan"
| rowspan=2| Shankar–Jaikishan
| Shailendra
| rowspan=2| Mohammed Rafi
|-
| "Ai Chand Jara Chhup Ja"
| Hasrat Jaipuri
|-
! Rowspan=4| ''Lamboo In Hong Kong''
| "Mere Dil Ka Dil Meri Jaan Ki Jaan"
| rowspan=4| C. Arjun
| rowspan=4| Qamar Jalalabadi
| Mohammed Rafi
|-
| "Ye Hai Hongkong"
| rowspan=3| solo
|-
| "Tera Jalwa Subhan Allah"
|-
| "Tere Bin Sajna"
|-
!''Lav Kush''
| "Sarayu Ke Nire Teere Avadh Nagariya"
| S. N. Tripathi
| Saraswati Kumar Deepak
| Usha Mangeshkar
|-
! Rowspan=2| ''Maikhana''
| "Yeh Tamanna Hi Rahi Unka Payaam Aayega"
| rowspan=2| Bhushan Mehta
| rowspan=2| Kidar Sharma
| solo
|-
| "Uyi Allah Re Di Naina"
| Usha Mangeshkar
|-
!''Mehrban''
| "Saawan Ki Raat Kaari Kaari"
| Ravi
| Rajendra Krishan
| solo
|-
! Rowspan=3| ''Mere Bhai Mere Dushman''
| "Ada Jadoo Haseen Qatil"
| rowspan=3| Khayyam
| rowspan=3| Majrooh Sultanpuri, Kaifi Azmi
| rowspan=3| solo
|-
| "Hum Toh Dekhte Chale Gaye"
|-
| "Raat Ka Anchal"
|-
!rowspan=2| ''Mere Munna''
| "Aengan Baingan Tali Talaingan"
| rowspan=2| Kalyanji–Anandji
| Qamar Jalalabadi
| solo
|-
| "Khushiyon Ke Deep Jalao"
| Indeevar
| Usha Timothy
|-
! Rowspan=2| ''Milan Ki Raat''
| "Babu Re Babu Is Zamane"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Anand Bakshi
| rowspan=2| solo
|-
| "Doom Tara Ek Doom Tara"
|-
!''[[Nai Roshni (1967 film)|Nai Roshni]]''
| "Yeh Tohfa Tumhare Pyaar Ka"
| Ravi
| Rajendra Krishan
| solo
|-
! Rowspan=4| ''[[Nasihat]]''
| "Teri Ankho Ne In Ankhon Se Jo Baat Kahi"
| rowspan=4| O. P. Nayyar
| rowspan=3| S. H. Bihari
| Mahendra Kapoor, Kamal Barot
|-
| "Kabhi Humari Mohabbat Ka Imthan Na Lo"
| rowspan=3| solo
|-
| "Mujhko Diwana Na Kar Aa Mere Karib Aa"
|-
| "Aankhon Se Ishaara Karke Humein"
| Aziz Kashmiri
|-
!''[[Naunihal]]''
| "Gore Galon Ki Bhi Le Lo"
| Madan Mohan
| Kaifi Azmi
| Usha Mangeshkar
|-
! Rowspan=4| ''[[Nawab Sirazuddaula]]''
| "Bin Bulaye Tere Mehfil Mein"
| rowspan=4| Madan Mohan
| rowspan=4| Raja Mehdi Ali Khan
| rowspan=4| solo
|-
| "Sakiya Sakiya Aankh Se Jaam Pila De"
|-
| "Mujhse Bichhade Tere Deewane"
|-
| "Mohabbat Se Roshan Hai"
|-
! Rowspan=4| ''Noor Jehan''
| "Aap Jab Se Karib Aaye Hain"
| rowspan=4| Roshan
| rowspan=4| Shakeel Badayuni
| Mohammed Rafi
|-
| "Aa Gaya Lab Pe Afsana"
| Usha Mangeshkar
|-
| "Mohabbat Ho Gayi Mere Meherbaan Ko"
| rowspan=2| solo
|-
| "Kasam Hai Tujhe Mere In Ansuon Ki"
|-
!''Palki''
| "Main Idhar Jaoon Ya Udhar Jaoon"
| Naushad
| Shakeel Badayuni
| Manna Dey, Mohammed Rafi
|-
! ''[[Patthar Ke Sanam]]''
| "Yeh Bahar Yeh Sama"
| Laxmikant–Pyarelal
| Majrooh Sultanpuri
| solo
|-
! rowspan=2| ''Poonam Ka Chand''
| "Ek Suhagan Bani"
| rowspan=2| Neenu Majumdar
| rowspan=2| Amar Chaturvedi
| rowspan=2| solo
|-
| "O Chhori Gori"
|-
! Rowspan=4| ''Raat Andheri Thi''
| "Zindagi Pyasi Hai Pyas Bujha De"
| rowspan=4| Usha Khanna
| rowspan=3| Akhtar Romani
| Sharda
|-
| "Moshi Moshi Kaise Ho Ji"
| rowspan=2| solo
|-
| "I Love You, You Love Me"
|-
| "Jaan E Chaman Aaja O Gul Badan Aaja"
| Asad Bhopali
| Mohammed Rafi
|-
! Rowspan=2| ''Rajoo''
| "Mere Munne Re, Seedhi Raah Pe Chalna"
|rowspan=2| N. Dutta
|rowspan=2| Sahir Ludhianvi
| solo
|-
| "Chahe Dekh Ghoor Ke, Chahe Deve Galiyan"
| Mohammed Rafi
|-
! Rowspan=3| ''[[Ram Aur Shyam]]''
| "O Balam Tere Pyaar Ki Thandi Aag Mein"
| rowspan=3| Naushad
| rowspan=3| Shakeel Badayuni
| Mohammed Rafi
|-
| "Aaj Sakhi Ri More Piya Ghar Aaye Re"
| solo
|-
| "Dhire Dhire Bol Koi Sun Lega"
| Mahendra Kapoor
|-
!''Ram Rajya''
| "Dharti Pawan Purti Ki Hai Hum"
| Vasant Desai
| Bharat Vyas
| Usha Timothy
|-
! Rowspan=3| ''Sangdil''
| "Aaja Re Sard Rat Ye Sard Hawa"
| rowspan=3| G. S. Kohli
| rowspan=3| Naqsh Lyallpuri
| rowspan=3| solo
|-
| "Mera Dil Dil Dil Meri Jaan Jaan Jaan"
|-
| "Na Hosh Mein Saaki Hai"
|-
!''Sardar''
| "Kabhi Deewana Dil"
| Usha Khanna
| Asad Bhopali
| solo
|-
! Rowspan=5| ''Shamsheer''
| "Baar Baar Dhadke Jiya"
| rowspan=5| Lala Sattar
| Asad Bhopali
| rowspan=2| Kamal Barot
|-
| "Rangile Piya Ho Pukare Jiya Ho"
| Aish Kanwal
|-
| "Dur Papiha Bole Re"
| Madhukar Rajasthani
|-
| "Tirchhi Nazaro Ka Waar"
| Bharat Vyas
| rowspan=2| Usha Mangeshkar
|-
| "Ud Ud More Sar Se Dupatta"
| Aish Kanwal
|-
! Rowspan=5| ''Sub Ka Ustad''
| "Raja Aana Humare Bangle Pe"
| rowspan=5| Ganesh
| rowspan=5| Asad Bhopali
| Kamal Barot
|-
| "Maine Kaha Jaaneman Meharbaan"
| rowspan=3| solo
|-
| "Balkhaye Qamariya Humar Sanware"
|-
| "Mohabbat Bikti Hai Dil Bikta"
|-
| "Meri Dulhan Aayi Sang Doli Na Qahar"
| Mohammed Rafi
|-
! Rowspan=1| ''Trip To Moon''
| "Dekha Janaab Ko, Ab Dil Par Khair Ho"
| Usha Khanna
| Asad Bhopali, Indeevar, Prem Dhawan, Qamar Jalalabadi
| solo
|-
! Rowspan=2| ''[[Upkar (1967 film)|Upkar]]''
| "Gulabi Raat Gulabi"
| rowspan=2| Kalyanji–Anandji
| Indeevar
| solo
|-
| "Aayi Jhum Ke Basant"
| Sunder, Shamshad Begum, Manna Dey, Mahendra Kapoor
|-
! Rowspan=2| ''Wahan Ke Log''
| "Zindagi Ka Nasha Halka Halka Surur"
| rowspan=2| C. Ramchandra
| rowspan=2| Shakeel Badayuni
| rowspan=5| solo
|-
| "Jab Tumko Pukaaru Mai Sarkaar Chale Aana"
|-
! Rowspan=3| ''Woh Koi Aur Hoga''
| "Wo Koi Aur Hoga"
| rowspan=3| Usha Khanna
| rowspan=3| Asad Bhopali
|-
| "Ae Raat Ke Andhere Mujhko Gale Laga Le" (Version 1)"
|-
| "Ae Raat Ke Andhere Mujhko Gale Laga Le" (Version 2)
|-
|}
=== 1968 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! Rowspan=2| ''[[Aabroo (1968 film)|Aabroo]]''
| "Aapse Pyaar Hua, Aap Khafa Ho Baithe"
| rowspan=2| Sonik–Omi
| rowspan=2| G S Rawal
| solo
|-
| "Holi Aai Re"
| Manna Dey
|-
! ''[[Aashirwad (film)|Aashirwad]]''
| "Saf Karo, Insaaf Karo"
| Vasant Desai
| Gulzar
| Manna Dey, Ashok Kumar
|-
!''Abhilasha''
| "Munna Mere Aa, Sadke Tere Aa"
| S. D. Burman
| Majrooh Sultanpuri
| solo
|-
! Rowspan=2| ''Anjam''
| "Main Jo Gale Lag Jaoongi"
| rowspan=2| Ganesh
| rowspan=2| Qamar Jalalabadi
| rowspan=2| solo
|-
| "Tujhko Sanam Kyun Maana"
|-
! Rowspan=2| ''[[Ankhen (1968 film)|Ankhen]]''
| "Loot Jaa, Yehi Din Hai"
| rowspan=2| Ravi
| rowspan=2| Sahir Ludhianvi
| Kamal Barot, Usha Mangeshkar
|-
| "Tujhko Rakhe Ram, Tujhko Allah Rakhe"
| Manna Dey
|-
!''Anokhi Raat''
| "Meri Beri Ke Ber Mat Todo"
| Roshan
| Indeevar
| solo
|-
! Rowspan=2| ''Apna Ghar Apni Kahani''
| "Peena Haraam Hai Na Pilana Haraam Hai "
| rowspan=2| N. Dutta
| rowspan=2| Qamar Jalalabadi
| solo
|-
| "Chand Bhi Koi Deewana Hai"
| Mahendra Kapoor
|-
!''[[Aulad (1968 film)|Aulad]]''
| "Jodi Hamara Jamega Kaise Jani"
| Chitragupt
| Majrooh Sultanpuri
| Manna Dey
|-
! Rowspan=3| ''[[Baazi (1968 film)|Baazi]]''
| "Main Haseena Nazneena"
| rowspan=3| Kalyanji–Anandji
| rowspan=3|
| [[Lata Mangeshkar]]
|-
| "Dil Toota, Roye Naina"
| rowspan=2| solo
|-
| "Pyar Ki Yeh Baaten"
|-
! Rowspan=4| ''Balram Shri Krishna''
| "Koyi Bata Do Pata Piya Ka"
| rowspan=4| C. Ramchandra
| rowspan=4| Kavi Pradeep
| rowspan=2| solo
|-
| "Mujhko Auro Se Kya "
|-
| "Are Kar Lo Balma Pyaar"
| rowspan=2| Kamal Barot
|-
| "Bada Hai Banka Mera Devariya"
|-
!''Bambai Raat Ke Baahon Mein''
| "Bombai Raat Ki Baahon Mein"
| Jag Phool Kaushik
| Hasan Kamal
| solo
|-
! Rowspan=5| ''Dil Aur Mohabbat''
| "Hath Aaya Hai Jab Se Tera Hath Mein"
| rowspan=5| O. P. Nayyar
| Shewan Rizvi
| rowspan=2| Mahendra Kapoor
|-
| "Kitaabi Chehra Gulaabi Aankhen"
| S. H. Bihari
|-
| "Uff Ye Bekarar Dil"
|rowspan=2| Shewan Rizvi
| rowspan=3| solo
|-
| "My Name Is Kishori"
|-
| "Bade Khubsurat Bade Hi Hasin"
| Aziz Kashmiri
|-
! Rowspan=2| ''[[Do Kaliyaan]]''
| "Chitnandan Aake Naachungi"
| rowspan=2| Ravi
| rowspan=2| Sahir Ludhianvi
| rowspan=2| solo
|-
| "Sajna O Sajna, Aise Mein Ji Na Jala"
|-
! Rowspan=2| ''[[Duniya (1968 film)|Duniya]]''
| "Dooriyan Nazdikiyan Ban Gayi"
| rowspan=2| Shankar–Jaikishan
| [[Hasrat Jaipuri]]
| [[Kishore Kumar]]
|-
| "Yeh Dharti Hindustan Ki"
| [[Gopaldas Neeraj]]
| solo
|-
! Rowspan=2| ''Ek Phool Ek Bhool''
| "Kahan Leke Dil Chale Mere Saiya Manchale"
| rowspan=4| Usha Khanna
| rowspan=2| Indeevar
| rowspan=3| solo
|-
| "Pee Ke Aur Pyas Badhi"
|-
! Rowspan=2| ''Ek Raat''
| "Mere Gesuon Se Chankar"
| rowspan=2| Yogesh
|-
| "Aaj Ki Hasin Raat Hans Ke Guzar"
| Usha Khanna
|-
! Rowspan=4| ''Farishta''
| "Ek Khoobsurat Ladki, Mere Nahin"
| rowspan=4| Dattaram Wadkar
| rowspan=4| Asad Bhopali
| Kishore Kumar
|-
| "Sabse Pyara Bhai Bahan Ka Pyar Hain"
| rowspan=3| solo
|-
| "Ruth Badli More Rasiya Mile"
|-
| "Duniya Ek Jhamela Hai"
|-
! Rowspan=2| ''Gauri''
| "Pehle Wafaa Ka Apni Yaqeen Toh Dilaaye"
| rowspan=2| Ravi
| rowspan=2| Rajendra Krishan
| rowspan=2| solo
|-
| "Baaj Ri Mori Paayaliya"
|-
! Rowspan=5| ''Golden Eyes: Secret Agent 007''
| "Idjar Toh Dekho, Ek Nazar Toh Dekho"
| rowspan=5| B. N. Bali
| rowspan=5| Shewan Rizvi
| rowspan=2| solo
|-
| "Par Ghata Chhayi"
|-
| "Tera Husn Ka Yeh Nazaara"
| rowspan=2| Mahendra Kapoor
|-
| "Yeh Aankhen Teri Hai Kaatil"
|-
| "Ulfat Oi Nishaani Deke Chale Woh Chhalla"
| Kamal Barot
|-
! Rowspan=2| ''Har Har Gange''
| "Arre Maar Dala"
| rowspan=2| S. N. Tripathi
| rowspan=2| Kavi Pradeep
| solo
|-
| "O Rajaji Dekho"
| Usha Timothy
|-
!''[[Haseena Maan Jayegi]]''
| "Mere Mehboob Mujhko Itna Bata"
| Kalyanji–Anandji
| Qamar Jalalabadi
| Manna Dey
|-
!''Hum Sab Ek Hain''
| "Bharat Desh Mahaan"
| Dattaram Wadkar
| Farooq Kaiser
| solo
|-
! Rowspan=6| ''[[Humsaya]]''
| "Mujhe Mera Pyar De De"
| rowspan=6| O. P. Nayyar
| rowspan=2| Shewan Rizvi
| [[Mohammed Rafi]]
|-
| "Woh Haseen Dard De Do"
| rowspan=4| solo
|-
| "Aaja Mere Pyar Ke Sahare"
| rowspan=2| S. H. Bihari
|-
| "O Kanhaiya Kanhaiya"
|-
| "Kitna Haseen Hai Yeh Jahan"
|rowspan=2| Hasrat Jaipuri
|-
| "Badi Mushkil Se Kaabu Mein"
| [[Mahendra Kapoor]]
|-
!''[[Izzat (1968 film)|Izzat]]''
| "Sar Le Lamba Top Leke"
| Laxmikant–Pyarelal
| Sahir Ludhianvi
| Mohammed Rafi
|-
!''Jahan Mile Dharti Aakash''
| "Ab Kitne Baaje Hain"
| Madan Mohan
| Rajendra Krishan
| Mohammed Rafi
|-
!''[[Jhuk Gaya Aasman]]''
| "Kisi Ki Jaan Lete Hain"
| Shankar–Jaikishan
| S. H. Bihari
| solo
|-
!''[[Jung Aur Mohabbat]]''
| "Nigahon Mein Mohabbat Ka"
| G. S. Kohli
| Hasrat Jaipuri
| solo
|-
!''Kaafir''
| "Apna Dil Pesh Karoon"
| Khayyam
| Sahir Ludhianvi
| solo
|-
!''[[Kahin Aur Chal]]''
| "Shokh Aanjhen Dekh Kar"
| Shankar–Jaikishan
| Hasrat Jaipuri
| Mohammed Rafi
|-
! Rowspan=4| ''Kahin Din Kahin Raat''
| "Mohabbat Ho Gayi Jinse"
| rowspan=4| O. P. Nayyar
| rowspan=4| S. H. Bihari
| rowspan=2| solo
|-
| "Hum Pe Yeh Ilzam Kyun Hain"
|-
| "Tumhara Chahnewala Khuda Ki Duniya Mein"
| Mahendra Kapoor
|-
| "Jab Aa Hi Gaye Hain"
| Shankar Dasgupta, Badrinath Pawar, Mahendra Kapoor
|-
! ''[[kanyadaan (1968 film)|Kanyadaan]]''
| "Sunday Ko Pyaar Hua, Monday Ko Iqraar Hia"
| Shankar–Jaikishan
| Neeraj
| Mahendra Kapoor
|-
! Rowspan=4| ''Khiladi''
| "Pyaar Koo Kam Kam Kare"
| rowspan=4| Lala Sattar
| rowspan=4| Farooq Kaiser
| Mohammed Rafi
|-
| "Sun Zara Jane Jaha"
| rowspan=3| solo
|-
| "Aaj Dil Ka Khiladi Kya Aaya"
|-
| "Pichhe Pichhe Aaye Mere"
|-
! Rowspan=5| ''[[Kismat (1968 film)|Kismat]]''
| "Kajra Mohabbatwala"
| rowspan=5| O. P. Nayyar
| rowspan=3| S. H. Bihari
| rowspan=2| Shamshad Begum
|-
| "Kajra Mohabbatwala" (revival)
|-
| "One Two Three Baby"
| Mahendra Kapoor
|-
| "[[Aao Huzoor Tumko]]"
| rowspan=2| Noor Devasi
| rowspan=2| solo
|-
| "Aao Huzoor Tumko" (revival)
|-
! Rowspan=4| ''Man Ka Meet''
| "Kali Kali Raat Daraye"
| rowspan=4| Ravi
| rowspan=4| Rajendra Krishan
| rowspan=2| solo
|-
| "Ek Anari Jangali Janwar Badtamij Diwana"
|-
| "Apni Aankhon Ke Jarokhon Mein Bitha Lo Mujko"
| Mahendra Kapoor
|-
| "Fere Jaise Toh Aata Hai"
| Raj Grover
|-
!''Mera Naam Johar''
| "Saare Chirag Ko Gul Kar Do"
| Usha Khanna
| Asad Bhopali
| solo
|-
!''[[Mere Huzoor]]''
| "Mere Jaan Apne Aashiq Ko Sataana"
| Shankar–Jaikishan
| Hasrat Jaipuri
| Mohammed Rafi
|-
! Rowspan=2| ''Nadir Shah''
| "Sakhiya Bahaar Aaye Jhoom Jhoom"
| rowspan=2| S. N. Tripathi
| rowspan=2| Majrooh Sultanpuri
| rowspan=2| solo
|-
| "Phulo Tale Ham Tum Se Mile"
|-
! Rowspan=3| ''[[Neel Kamal (1968 film)|Neel Kamal]]''
| "Vo Zindagi Jo Thi Ab Tak"
| rowspan=3| Ravi
| rowspan=3| Sahir Ludhianvi
| rowspan=3| solo
|-
| "Hey Rom Rom Me Basne Waale Raam"
|-
| "Dono Ke Vich Kar Lagta"
|-
!''Not Abailable''
| "Kahin Pe Ek Shama Thi"
|Daan Singh
| Anand Bakshi
| Mohammed Rafi
|-
!''[[Padosan]]''<ref>{{Cite web|url=https://m.hindigeetmala.net/movie/padosan.htm|title=Padosan : Lyrics and video of Songs from the Movie Padosan (1968)|website=HindiGeetMala}}</ref>
| "Main Chali, Main Chali"
| R D Burman
| Rajendra Krishan
| Lata Mangeshkar
|-
!''[[Parivar (1968 film)|Parivar]]''
| "Andaz Toh Pyaar Jataane Ka"
| Kalyanji–Anandji
| Gulshan Bawra
| Mahendra Kapoor
|-
! Rowspan=4| ''Pativrata''
| "Madhur Mann Geet Gaa"
| rowspan=4| Ramesh Naidu
| rowspan=4| N/A
| rowspan=4| solo
|-
| "O Re Vidhaata"
|-
| "Soye Ho Kyun Deva"
|-
| "Sajke Aaye Hain Dekho"
|-
!''Payal Ki Jhankar''
| "Aye Mere Soye Huye Pyaar" (female)
| C. Ramchandra
| Rajendra Krishan
| solo
|-
! rowspan=3| ''Pyaar Bana Afsana''
| "Pyaar Deewana Bane Kyun"
|rowspan=3| Iqbal Qureshi
|rowspan=3| Aziz Qaisi
|rowspan=2| Mohammed Rafi
|-
| "Kaho Jo Tumhen Kisise Pyaar Hai"
|-
| "Mere Jahaan Mein Tum Pyaar Leke Aaye"
| solo
|-
!''[[Raja Aur Runk]]''
| "Mere Raja Mere Lal"
| Laxmikant–Pyarelal
| Anand Bakshi
| Usha Mangeshkar
|-
! Rowspan=2| ''Ramdoot Hanuman''
| "Aayo Re Aayo Re Laal Mere"
| rowspan=2| Dakshina Mohan Tagore
| rowspan=2| Bharat Vyas
| Manna Dey
|-
| "Haye Jhananan Jhananan Baaje"
| Usha Mangeshkar
|-
! Rowspan=5| ''Roop Rupaiya''
| "Dekhi Zamane Ki Humne Ye Reet"
| rowspan=5| Usha Khanna
| rowspan=5| P. L. Santoshi
| Mohammed Rafi
|-
| "Ae Babu Ae Babu Itna Bata Do"
|-
| "Chaaron Taraf Hai Chhaye Badra"
|-
| "Kaise Bedardi Se Pala Pad Gaya"
|-
| "Zulfe Kali Kali Jo Galo Pe"
|-
! Rowspan=2| ''[[Sadhu Aur Shaitaan]]''
| "Nandlal Gopal Daya Karke"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Rajendra Krishan
| Usha Mangeshkar
|-
| "A For Apple, B For Baby"
| Manna Dey
|-
! Rowspan=4| ''[[Shikar (1968 film)|Shikar]]''
| "Jabse Lagi Tose Najariya"
| rowspan=4| Shankar–Jaikishan
| rowspan=3| Hasrat Jaipuri
| [[Lata Mangeshkar]]
|-
| "Main Albeli Pyar Jatakar"
| rowspan=3| solo
|-
| "Hay Mere Paas To Aa"
|-
| "Parde Mein Rahne Do"
|-
! Rowspan=3| ''Shrimanji''
| "Pahalu Men Yaar Ho To"
| rowspan=3| O. P. Nayyar
| Aziz Kashmiri
| Kishore Kumar
|-
| "Gori Sharmao Na"
| rowspan=2| S. H. Bihari
| rowspan=2| Kamal Barot
|-
| "Jhoote Balam Ka Babuji Pyar Jhoota"
|-
! Rowspan=3| ''Spy In Rome''
| "Chalo Chaman Mein Jaye"
| rowspan=3| Laxmikant–Pyarelal
| rowspan=3| Anand Bakshi
| rowspan=3| solo
|-
| "Chalka Chalka Paimana Pee Le"
|-
| "Mujhe Pyar Kiya Bekarar Kiya"
|-
!''[[Suhaag Raat (1968 film)|Suhaag Raat]]''
| "Main Qayamat Hoon"
| Kalyanji–Anandji
| Akhtar Romani
| Lata Mangeshkar
|-
!''[[Sunghursh]]''
| "Tasveer-e-Mohabbat"
| Naushad
| Shakeel Badayuni
| solo
|-
! Rowspan=5| ''[[Teen Bahuraniyan]]''
| "Humre Angan Bagiya, Bagiya Mein Do Panchhi"
| rowspan=5| Kalyanji–Anandji
| rowspan=5| Anand Bakshi
| [[Lata Mangeshkar]], [[Usha Mangeshkar]]
|-
| "Aamdani Athanni, Kharcha Rupaiya, Bhaiya Na Poochho"
| [[Mahendra Kapoor]], [[Kamal Barot]]
|-
| "Aa Sapnon Ki Rani, Aa Sapnon Ke Raja"
| [[Kishore Kumar]],
|-
| "Meri Taraf Zara Dekh"
| rowspan=2| solo
|-
| "Dilli Ke Bazaar Mein"
|-
! Rowspan=5| ''Teri Talash Mein''
| "Kho Diye Hain Sanam Teri Talaash Mein"
| rowspan=5| Sapan–Jagmohan
| rowspan=5| Naqsh Lyallpuri
| rowspan=3| solo
|-
| "Raaz-e-Dil Hum Se Kaho"
|-
| "Mera Dil Behka Behka Sa Hai"
|-
| "Koi Diwana Tumhe Chahega"
| Mohammed Rafi
|-
| "Kisne Kaha Aapse"
| Usha Mangeshkar
|-
! Rowspan=4| ''Thief of Baghdad''
| "Kisi Ka Agar Tumko Dil Lootna"
| roaspan=4| B. N. Bali
| rowspan=3| S. H. Bihari
| Usha Mangeshkar
|-
| "Lo Saaf Bata Dete Hai Tumhe"
| Manna Dey
|-
| "Mujhko Diwana Kar Gaye"
| rowspan=2| solo
|-
| "Humko Bhi Mana Hai"
| N/A
|-
!''Vaasna''
| "Mulk Mein Bachchon Ki Gar Sarkar Ho"
| Chitragupt
| Sahir Ludhianvi
| Lata Mangeshkar
|-
! Rowspan=3| ''[[Watan Se Door]]''
| "Pyare Pyare Tere Andaz Ke Qurban"
| rowspan=3| Lala Sattar
| rowspan=3| Farooq Kaiser
| rowspan=2| Mohammed Rafi
|-
| "Kaisa Jadu Dala"
|-
| "Main Toh Naachun, Main Toh Gaaun"
| Kamal Barot
|-
|}
=== 1969 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! Rowspan=6| ''[[Aadmi Aur Insaan]]''
| "Zindagi Ittefaq Hai"
| rowspan=6| Ravi
| rowspan=6| Sahir Ludhianvi
| rowspan=3| Mahendra Kapoor
|-
| "Ijazat Hai"
|-
| "O Neele Parbaton Ki Dhaara"
|-
| "Zindagi Ke Rang Kai Re Saathi Re"
| rowspan=3| solo
|-
| "Zindagi Ittefaq Hai"
|-
| "Itni Jaldi Na Karo"
|-
! Rowspan=3| ''[[Aansoo Ban Gaye Phool]]''
| "Jane Kaisa Hai, Mera Deewana"
| rowspan=3| Laxmikant–Pyarelal
| Govind Munees
| [[Kishore Kumar]]
|-
| "Meharban Mehboob Dilbar"
| rowspan=2| Taj Bhopali
| rowspan=2| solo
|-
| "Ho O, Suno To Jani"
|-
!''Anjaan Hai Koi''
| "Doobe Hai Gilason Mein"
| Usha Khanna
| N/A
| solo
|-
! Rowspan=3| ''[[Anmol Moti]]''
| "Aaja Raja Leke Baaraat"
| rowspan=3| Ravi
| rowspan=3| Rajendra Krishan
| rowspan=3| solo
|-
| "Main Kya Se Ho Gayi"
|-
| "Koi Mera Bachpan"
|-
! Rowspan=4| ''Apna Khoon Apna Dushman''
| "Tumhari Chand Si Surat Pe Hamko Pyar"
| rowspan=4| Lala Sattar
| rowspan=4| Farooq Kaiser
| Mohammed Rafi
|-
| "Chhapan Chhuri Hai Mera Naam"
| Usha Timothy
|-
| "Zara Nazre Mila"
| rowspan=2| solo
|-
| "Khata Maaf Karna Humari Khudaya"
|-
!''[[Aradhana (1969 film)|Aradhana]]''
| "Gunguna Rahe Hain Bhawre"
| S. D. Burman
| Anand Bakshi
| Mohammed Rafi
|-
!''[[Aya Sawan Jhoom Ke]]''
| "Main Ik Haseena"
| Laxmikant–Pyarelal
| Anand Bakshi
| solo
|-
!''[[Bandhan (1969 film)|Bandhan]]''
| "Are Jaana Hai Toh Jaao"
| Kalyanji–Anandji
| Anjaan
| Mahendra Kapoor
|-
! ''[[Aradhana (1969 film)|Aradhana]]''
| "Gunguba Rahe Hain Bhanwre"
| S. D. Burman
| Anand Bakshi
| Mohammed Rafi
|-
! Rowspan=2| ''Badi Didi''
| "Sajna Maine Kal Dekha Ek Sapna"
| rowspan=2| Ravi
| rowspan=2| Rajendra Krishan
| rowspan=2| solo
|-
| "Is Desh Ko Swaarg Banana Hai"
|-
|-
!''Balak''
| "Chandaniya Chandaniya Haay Raat Sajan Rahiyo Ki Jaiyo"
| Dattaram Wadkar
| Bharat Vyas
| solo
|-
! Rowspan=3| ''Bandish''
| "Ajab Hai Ye Duniyaa Ajab Zindgi Hai"
| rowspan=3| Usha Khanna
| rowspan=3| Akmal Hyderabadi
| rowspan=3| solo
|-
| "Aaja Tu Idhar Aa Aa Tu Idhar Aa"
|-
| "Teri Aayi Hai Barat"
|-
! Rowspan=3| ''Bank Robbery''
| "Haye Maar Dala Pehli Mulaqat Mein"
| rowspan=3| Chitragupt
| rowspan=3| Prem Dhawan
| Usha Mangeshkar
|-
| "Garibon Ka Jeena Nahi Koi Jeena"
| rowspan=2| solo
|-
|"Uff Ye Nazar Mohabbat Ki"
|-
! Rowspan=3| ''Beqasoor''
| "Rukhsana Rukhsana Dekho Ji Rukhsana"
| rowspan=3| Dattaram Wadkar
| rowspan=3| Farooq Kaiser
| Mohammed Rafi
|-
| "Mohabbat Se Keh Do"
| rowspan=2| solo
|-
| "Naam Gulabi Hain Mera"
|-
! Rowspan=2| ''Beti''
|"Ek Meethi Nazar Phool Barsa Gayi"
| rowspan=2| Sonik–Omi
| rowspan=2| Shakeel Badayuni
| Mohammed Rafi
|-
| "Lehenga Maangwa De Mere Babu"
| Usha Mangeshkar
|-
! Rowspan=4| ''[[Bhai Bahen]]''
| "Chori Chori Aa Ja, Tu Meri Gali Aa Ja"
| rowspan=4| Shankar–Jaikishan
| Hasrat Jaipuri
| rowspan=2| solo
|-
| "Dastur Zamane Ka Ye Badla Nahi"
| rowspan=2| S. H. Bihari
|-
| "Dheere Dheere Mohabbat Jawaan Ho Gayi"
| rowspan=2| Mohammed Rafi
|-
| "Chand Nikla Bhi Nahi Aur Chandni Hai Saamne"
| Rajendra Krishan
|-
! Rowspan=4| ''Chalbaaz''
| "Tum Apne Mohabbat Ka Asar Dikhate Jaao"
| rowspan=4| Lala Sattar
| rowspan=4| Farooq Kaiser
| rowspan=2| solo
|-
| "Tere Bina Kal Aaye Na Sajna"
|-
| "Sooni Sooni Lag Rahi Hai Chandni Tere Bagair"
| rowspan=2| Mohammed Rafi
|-
| "Shukriya Aap Ko Inayat Ka"
|-
! Rowspan=4| ''[[Chanda Aur Bijli]]''
| "Dekh Tamasha Dekh Jamure"
| rowspan=4| Shankar–Jaikishan
| Neeraj
| rowspan=3| solo
|-
| "Aaj Koi Aayega Dil Se Lagayega"
| Indeevar
|-
| "Bijli Hu Main Toh"
| rowspan=2| Hasrat Jaipuri
|-
| "Teri Chahat Me Sanam"
|-
! Rowspan=2| ''[[Do Bhai (1969 film)|Do Bhai]]''
| "Geet Nahin Ban Sakte"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Anand Bakshi
| [[Mohammed Rafi]]
|-
| "Main Sunati Hoon"
| solo
|-
! Rowspan=4| ''[[Doli (1969 film)|Doli]]''
| "Pehle Jhuk Kar Karo Salaam"
| rowspan=4| Ravi
| rowspan=4| Rajendra Krishan
| rowspan=2| Mohammed Rafi
|-
| "Aaj Main Dekhun Jidhar Jidhar"
|-
| "Sajna Sath Nibhana"
| Mohammed Rafi
|-
| "Aaj Pila De Saaqi Apni"
| Mahendra Kapoor
|-
! Rowspan=2| ''[[Duniya (1969 film)|Duniya]]''
| "Dooriyan Nazdeekiyan Ban Gayi"
| rowspan=2| Shankar–Jaikishan
| Hasrat Jaipuri
| Kishore Kumar
|-
| "Tu Kahe Maharashtra Mera"
| Neeraj
| solo
|-
!rowspan=4| ''Ek Masoom''
| "Poochh Le Dil Se Mere"
| rowspan=4| N. Dutta
| rowspan=4| Farid Tonki
| Mohammed Rafi
|-
| "Jo Na Poore Huye"
| Rowspan=3| solo
|-
| "Mohtaram Chhodiye Sa Re Ga Ma"
|-
| "Tu Hi Meri Zindagi Tu Hi Arman"
|-
! Rowspan=5| ''[[Ek Phool Do Mali]]''
| "Kar De Madad Garib Ki"
| rowspan=5| Ravi
| Ravi
| rowspan=2| Mohammed Rafi
|-
| "Chal Chal Re Naujawan"
| rowspan=3| Prem Dhawan
|-
| "Yeh Parda Hataa Do
| rowspan=3| solo
|-
| "Sajna Sajna, O Sajna"
|-
| "Saiyan Le Gayi Jiya"
| Indrajit Singh Tulsi
|-
! Rowspan=3| ''[[Ek Shriman Ek Shrimati]]''
| "Pyar To Ek Din Hona Tha, Ho Gaya, Ho Gaya"
| Rowspan=3| Kalyanji–Anandji
| rowspan=3| Rajendra Krishan
| [[Mohammed Rafi]]
|-
| "Raja Tohe Nainon Se Madira"
| rowspan=2| solo
|-
| "Hello Hello Everybody"
|-
!''Ek Tha Chander Ek Thi Sudha''
| "Lambi Lambi Kaali Kaali Zulfen Bikjraaye"
| Laxmikant–Pyarelal
| Anand Bakshi
| solo
|-
! Rowspan=2| ''Gunda''
| "Nam Saqi Rahe Baki"
| rowspan=2| G. S. Kohli
| Shabab
| rowspan=2| solo
|-
| "Khushi Se Jan Le Lo Ji"
| Dev Kohli
|-
! Rowspan=3| ''Gustakhi Maaf''
| "Ae Jaanejaan Chali Kahana"
| Rowspan=3| Sapan–Jagmohan
| rowspan=3| Naqsh Lyallpuri
| Mohammed Rafi
|-
| "Tum Door Jaaoge Kaise"
| rowspan=2| solo
|-
| "Sajna Meraa Jiyara Jale"
|-
!''Haseena Man Jayegi''
| "Mere Mehboob Mujhko Tu Itna Bata"
| Kalyanji–Anandji
| Qamar Jalalabadi
| Manna Dey
|-
! Rowspan=2| ''[[Hum Ek Hain (1969 film)|Hum Ek Hain]]''
| "Ek Bijli Se Meri Aankh Lad Gayi"
| rowspan=2| Usha Khanna
| Asad Bhopali
| Mahendra Kapoor
|-
| "Hum Punjabi Hain, Hum Bengali"
| Indeevar
| Mohammed Rafi, Manna Dey
|-
! Rowspan=4| ''[[Insaaf Ka Mandir]]''
| "Sun Pyare Sajna Re Mann Gaye Geet Suhane"
| rowspan=4| Sapan–Jagmohan
| rowspan=3| Naqsh Lyallpuri
| Mukesh
|-
| "Aap Hi Ki Qasam"
| Usha Mangeshkar
|-
| "Pyaare Aaja Chori Chori"
| rowspan=2| solo
|-
| 'Nindiya Kho Kar Nain Hanse"
| Anwar Sahasrami
|-
! Rowspan=3| ''Jaalsaaz''
| "Teri Nazar Ne Kiya Kya Ishara"
| rowspan=3| G. S. Kohli
| rowspan=2| Farooq Kaiser
| Mohammed Rafi
|-
| "Dil To Hamar Lai Lai"
| rowspan=2| solo
|-
| "Kal Maine Ek Sapna Dekha"
| Naqsh Lyallpuri
|-
! ''[[Jeene Ki Raah]]''
| "Chanda Ko Dhoondhne Sabhi Taare Nikal Pade"
| Laxmikant–Pyarelal
| Anand Bakshi
| Mohammed Rafi, Usha Mangeshkar, Hemlata
|-
! ''[[Jigri Dost]]''
| "Chanda Ko Dhoondhne Sabhi Taare Nikal Pade"
| Laxmikant–Pyarelal
| Anand Bakshi
| solo
|-
!''Jiyo Aur Jeene Do''
| "Rut Albeli Dagariya Naveli"
| Jaidev
| Naqsh Lyallpuri
| solo
|-
! Rowspan=3| ''[[Madhavi (1969 film)|Madhavi]]''
| "Parda Hata De Mukhda Dikha De"
| rowspan=3| Laxmikant–Pyarelal
| rowspan=3| Anand Bakshi
| rowspan=2| Mohammed Rafi
|-
| "Tum Mere Sapno Mein Aana"
|-
| "Nandkishor Nand Gopal Jhule"
| Lata Mangeshkar
|-
! Rowspan=3| ''[[Mahal (1969 film)|Mahal]]''
| "Chhedo Na, Dekho Na, Main Sharma Jaaungi"
| rowspan=3| Kalyanji–Anandji
| rowspan=3| Anand Bakshi
| Dev Anand
|-
| "Ankhon Ankhon Mein Hum Tum"
| rowspan=2| Kishore Kumar
|-
| "Yeh Duniyawale Poochhenge"
|-
! Rowspan=5| ''[[Mahuaa (film)|Mahua]]''
| "Sajan Tere Pyaar Men Main To Hui Barabaad"
| rowspan=5| Sonik–Omi
| rowspan=5| Qamar Jalalabadi
| Omi
|-
| "Main Hoon Tera Geet Gori"
| Mohammed Rafi
|-
| "Chham Chham Chhani Chhamak Chhana"
| rowspan=2| solo
|-
| "Pyar Mera Jo Tune Loota"
|-
| "Mohe Bikata Sajan Mil Jaye To Le Lu"
| Usha Timothy
|-
! Rowspan=2| ''Mera Dost''
| "Hume Aap Apna Bana Lijiye"
| Rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Anand Bakshi
| rowspan=2| solo
|-
| "Mohabbat Se Zyada"
|+
! Rowspan=4| ''Mr. Murder''
| "Sakhi Ri Mujhe Duniya Se"
| rowspan=4| Sonik–Omi
| rowspan=2| Shakeel Badayuni
| Usha Mangeshkar
|-
| "Hum Toh Dil Jaan Dono Hi Kho Baithe"
| rowspan=3| solo
|-
| "Thandi Hawayen Behki Adayen"
| rowspan=2| Qamar Jalalabadi
|-
| "Roop Nagar Ki Phoolwari Main"
|-
! Rowspan=4| ''Mujhe Seene Se Laga Lo''
| "Makhmur Nigaho Me Teri"
| rowspan=4| Hansraj Behl
| Qamar Jalalabadi
| Rowspan=3| solo
|-
| "Mujhe Sine Se Laga Lo"
| N/A
|-
| "Mere Sovat Nand Kishor"
| Prem Dhawan
|-
| "Ek Jhalak Dikhlane Maa Ko"
| Mahendra Dalvi
| Mahendra Kapoor
|-
! Rowspan=2| ''Nai Zindagi''
| "Dheere Dheere Chalna"
| rowspan=2| Chitragupt
| rowspan=2| Prem Dhawan
| Manna Dey
|-
| "Laga Sidha Kaleje Pe"
| Usha Mangeshkar
|-
!''Nanha Farishta''
| "O Re O Sharabi, Tujh Mein Ek Kharabi"
| Kalyanji–Anandji
| rowspan=5| Sahir Ludhianvi
| solo
|-
! Rowspan=4| ''Paisa Ya Pyar''
| "Mujhe Chhu Nahi Waise Hi Mil Le"
| rowspan=4| Ravi
| Mohammed Rafi
|-
| "Ber Le Lo Ber Meva Garibon Ka"
| rowspan=2| solo
|-
| "Jane Kyon Bar Bar Mera Dil Mujhe Kahe Usse Mil"
|-
| "Tu Bhi Number Ek Hai Pyare"
| Kishore Kumar
|-
! Rowspan=2| ''Prarthana''
| "O Bawari Jayegi Tu Kaise Piya Dware"
| rowspan=2| Hridaynath Mangeshkar
| rowspan=2| Majrooh Sultanpuri
| rowspan=2| solo
|-
| "O Rasiya More Piya"
|-
!''[[Prince (1969 film)|Prince]]''
| "Muqabla Humse Na Karo"
| Shankar–Jaikishan
| Hasrat Jaipuri
| Lata Mangeshkar, Mohammed Rafi
|-
!''[[Pyar Ka Sapna]]''
| "Night Is Lovely, Dark and Cool"
| Chitragupt
| Rajendra Krishan
| solo
|-
! Rowspan=2| ''[[Pyar Hi Pyar]]''
| " Mera Mai Teri Duniya Jale To Jale"
| rowspan=2| Shankar–Jaikishan
| rowspan=2| Hasrat Jaipuri
| Mohammed Rafi
|-
| "O Sakhiya O Sakhiya Mori Ankhiya Lad Gayi"
| solo
|-
!''Pyasi Shaam''
| "Saiyan Bijli Hai Mere Badan Mein"
| Laxmikant–Pyarelal
| Majrooh Sultanpuri
| solo
|-
!''Raat Ke Andhere Main''
| "Raat Ke Andhere Mein, Baahon Ke Ghere Mein"
| colspan=2| Prem Dhawan
| solo
|-
! Rowspan=2| ''[[Rahgir]]''
| "Babu Ghabrate Hai"
| rowspan=2| Hemant Kumar
| rowspan=2| Guzlar
| [[Kishore Kumar]]
|-
| "Daiya Kasam Sharam Sharam Laage"
| [[Usha Mangeshkar]]
|-
! Rowspan=2| ''Road To Sikkim''
| "Aji Ye Dil Dhadka"
| rowspan=2| Vijay Singh
| N/A
| rowspan=2| solo
|-
| "Hum Hasin Tum Jawaan"
| Hasrat Jaipuri
|-
! Rowspan=4| ''[[Sachaai]]''
| "More Saiyan Pakde Baiyan"
| Rowspan=4| Shankar–Jaikishan
| rowspan=4| Rajendra Krishan
| rowspan=2| solo
|-
| "Beet Chali Hai Ram"
|-
| "Kab Se Dhari Hai Saamne Botal"
| rowspan=2| Mohammed Rafi
|-
| "Sau Baras Ki Zindagi Se Achchha Hai"
|-
! Rowspan=3| ''Samay Bada Balwan''
| "Teri Tasveer Se Ankhen Meri"
| rowspan=3| Usha Khanna
| rowspan=3| D. N. Madhok
| Mohammed Rafi
|-
| "Ruth Kar Tum Bhala Yun Kaha"
| rowspan=2| solo
|-
| "Yun Na Dekho Humein"
|-
! Rowspan=5| ''[[Sambandh]]''
| "Hey Jagat Pita Parmatma Karo Nirmal Meri Aatma"
| rowspan=5| O. P. Nayyar
| rowspan=5| Kavi Pradeep
| Hemant Kumar
|-
| "Apni Maa Ki Kismat Par"
| rowspan=4| solo
|-
| "Hoon Main Piya Aa"
|-
| "Tumko Toh Karodo Saal Huye"
|-
| "Main Ankhon Mein Milan Ki"
|-
! Rowspan=2| ''[[Shart (1969 film)|Shart]]''
| "Koi Is Baat Ko Jaan Le"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Anand Bakshi
| rowspan=2| solo
|-
| "Chori Se Saiyan Ne Mohe Pukaara Re"
|-
! Rowspan=2| ''Shatranj''
| "Na Socha Na Samjha, Na Seekha, Na Jaana"
| rowspan=2| Shankar–JaikisSan
| Hasrat Jaipuri
| solo
|-
| "Tadap Jiski Hai Tumko"
| S. H. Bihari
| Mohammed Rafi
|-
! Rowspan=3| ''Soldier''
| "Baazar Sara Lut Liya"
| rowspan=3| Sonik–Omi
| rowspan=3| Aziz Kashmiri
| rowspan=3| solo
|-
| "Tum Ek Nazar Dekho To Idhar"
|-
| "Zameen Ke Chand Tere Dil"
|-
! ''Tamanna''
| "O Soniya Matwaliya, Main Jaan Gayi Dilwaliya"
| Kalyanji–Anandji
| Anand Bakshi
| Mohammed Rafi
|-
! Rowspan=6| ''The Killers''
| "Mere Dil Zindagi Safar Hai"
| rowspan=6| O. P. Nayyar
| rowspan=2| Aziz Kashmiri
| Usha Khanna
|-
| "Churate Ho Nazrein Aji Kis Liye"
| rowspan=3| solo
|-
| "Nazre Mila Ke Aapne Ahsan Kar Diye"
| Rowspan=4| S. H. Bihari
|-
| "Dil Janab Ke Kadmon Mein"
|-
| "Yeh Jo Dil Mangte Hai"
| Kamal Barot
|-
| "Sabse Aala Meri Jaan"
| Mahendra Kapoor
|-
!rowspan=5| ''Toofan''
| "Mera Naam Shola, Na Ban Itna Bhola"
|rowspan=5| Daan Singh
|rowspan=5| Akhtar Romani
| Usha Mangeshkar
|-
| "Laga Mohe Ab Ki Baar"
| rowspan=2| solo
|-
| "Husn Mein Bhi Hai Nasha"
|-
| "Humne Toh Pyaar Kiya, Pyaar Pyaar" (version 1)
| rowspan=2| Mukesh
|-
| "Humne Toh Pyaar Kiya, Pyaar Pyaar" (version 2)
|-
!''Ustad 420''
| "Kare Woh Kya, Jisko Pyaar Ho Gaya"
| N. Dutta
| Aziz Kashmiri
| solo
|-
!''Vishwas''
| "Muskurake Humko Loota Aapne"
| Kalyanji–Anandji
| Gulshan Bawra
| Mukesh
|-
! Rowspan=2| ''[[Waris (1969 film)|Waris]]''<ref>{{cite web|url=http://myswar.com/album/waris-1969|title=Waris 1969|publisher=MySwar|accessdate=28 October 2014}}</ref><ref>{{cite web|url=http://play.raaga.com/hindi/browse/movies/year-1960-1969/popular/Waris-1969-H004082|title=Waris 1969|publisher=Raaga.com|accessdate=27 October 2014}}</ref>
| "Chahe Koi Mujhe Bhoot Kaho"
| rowspan=2| R D Burman
| rowspan=2| Rajendra Krishan
| Mohammed Rafi
|-
| "Kaun Hai Woh Kaun Mujhe Jisne Jagaya"
| Manna Dey
|-
!''[[Yakeen(1969 film)|Yakeen]]''
| "Bach Bachke Bachke Kahan Jaaoge"
|Shankar–Jaikishan
| Hasrat Jaipuri
| solo
|-
|}
== 1970s ==
=== 1970 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! Rowspan=3| ''[[Aag Aur Daag]]''
| "Humse Badhkar Kaun Hoga Aapka Deewana"
| rowspan=3| N. Dutta
| rowspan=3| S. H. Bihari
| Mohammed Rafi
|-
| "Choli Bheegi Lat Bheegi"
| Rowspan=4| solo
|-
| "Kam Nahin Sharab Se"
|-
! ''[[Aan Milo Sajna]]''
| "Palat Meri Jaan, Teri Qurbaan"
| rowspan=2| Laxmikant–Pyarelal
| Anand Bakshi
|-
!''[[Abhinetri (1970 film)|Abhinetri]]''
| "Bane Bade Raja"
| Majrooh Sultanpuri
|-
! Rowspan=3| ''Begunah''
| "Antul Mehbubi Antul Mehbubi"
| Rowspan=3| Usha Khanna
| Rowspan=3| Asad Bhopali
| Mohammed Rafi
|-
| "Aaj Maine Pee Hai"
| rowspan=5| solo
|-
| "Andhera Ujale Se Takda Raha Hai"
|-
! Rowspan=2| ''[[Bhagwan Parshuram]]''
| "Mere Man Ke Manasarovar Mein"
| rowspan=2| Jai Kumar
| Rowspan=2| Madan Bharti
|-
| "Jane Wale Piyaa Tune Ye Kya Kiya"
|-
!''[[Bhai-Bhai (1970 film)|Bhai Bhai]]''
| "Aaj Raat Hai Jawaan, Dil Mera Todiye"
| Shankar–Jaikishan
| Hasrat Jaipuri
|-
! Rowspan=2| ''[[Choron Ka Chor]]''
<ref>{{Cite web |title=Bombay Talkie (1971) {{!}} Hindi Movie Songs - Bollywood MuVyz |url=http://muvyz.com/moviepage/gv937526/songs/ |access-date=2022-04-03 |website=Bombay Talkie (1971) {{!}} Hindi Movie Songs - Bollywood MuVyz |language=en}}</ref>
| "O Mere Dildaar"
| rowspan=2| N. Dutta
| rowspan=2| Farooq Kaiser
| Mohammed Rafi
|-
| "Tera Mera Pyaar"
| solo
|-
! ''[[Darpan (1970 film)|Darpan]]''
| "Jal Gayi Jal Gayi"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Anand Bakshi
| Kishore Kumar
|-
!''Devi''
| "Ek Hain Sab Hindustani"
| solo
|-
!''[[Dharti (1970 film)|Dharti]]''
| "Shu Shu, Dheere Dheere Bolo Ji"
| Shankar-Jaikishan
| Hasrat Jaipuri
| solo
|-
! Rowspan=4| ''Ehsan''
| "Aaja Tujhe Pyaar Kar Loon O Jaan-E-Jaana"
| rowspan=4| R D Burman
| Rowspan=4| Majrooh Sultanpuri
| Kishore Kumar
|-
| "Aaj Tere Naina Milke Jhuke Kyu Kai Baar"
| Mohammed Rafi
|-
| "Yeh Jhalak Yeh Jhalak"
| rowspan=4| solo
|-
| "Aayi Hu Main Dil Ke Taron Mein"
|-
! Rowspan=2| ''[[Ek Nanhi Munni Ladki Thi]]''
| "Kahan Gaya Mera Sanam"
| rowspan=2| Ganesh
| rowspan=2| Asad Bhopali
|-
| "Yeh Jalte Hue Lab"
|-
! Rowspan=2| ''[[Ganwaar]]''
| "Humse To Achhi Teri Payal Gori"
| rowspan=2| Naushad
| rowspan=2| Rajendra Krishan
| rowspan=2| Mohammed Rafi
|-
| "Tera Chikna Roop Hai Aisa"
|-
! Rowspan=2| ''[[Geet (1970 film)|Geet]]''
| "Tujhe Majnu Ki Kasam"
| rowspan=2| Kalyanji–Anandji
| rowspan=2| Hasrat Jaipuri
| Mohammed Rafi
|-
| "Jo Dil Me Basai Thi Tasveer"
| solo
|-
! rowspan="3"|''[[Gunah Aur Kanoon]]''
| "Ab To Jane Do Saiya Mulaqat Ho Gayi"
| rowspan="3"|Sapan Jagmohan
| rowspan=9| Naqsh Lyallpuri
| Rowspan=5| solo
|-
| "Ek Ek Pal Ro Ro Beete"
|-
| "Kisne Mujhe Chauka Diya"
|-
! Rowspan=3| ''Gunahon Ke Raste''
| "Ae Sanam Tunse Kuchh Kehna Hai Akele Mein"
| Rowspan=6| Jagdish Khanna
|-
| "Meri Bhi Yeh Zid Hau Saiyan Ko Tadpaoongi"
|-
| "Chori Chori Jaise Mori Bindiya Bhi Haari"
| Usha Timothy
|-
! Rowspan=3| ''Hamara Adhikar''
| "Ae Sanam Kuch Kahnaa Hai Tumse"
| rowspan=2| solo
|-
| "Meri Bhi Ye Zid Hai Meri Bhi Ye Zid "
|-
| "Chori Chori Jaise Mori Bindiya"
| Usha Mangeshkar
|-
! ''Harishchandra Taramati''
| "Hum Jiye Ya Mare"
| Hridaynath Mangeshkar
| Virendra Mishra
| Usha Mangeshkar
|-
! Rowspan=3| ''[[Haveli]]''
| "Gesuon Ki Hasin Chhaon Mein"
| rowspan=3| Sapan–Jagmohan
| Rowspan=3| Naqsh Lyallpuri
| rowspan=3| solo
|-
| "Na Hum Gair Hai Na Tum Ajnabi"
|-
| "O Nirmohi Suni Suni Rate "
|-
! Rowspan=4| ''[[Himmat (1970 film)|Himmat]]''
| "Maan Jaaiye Maan Jaaiye"
| rowspan=4| Laxmikant–Pyarelal
| rowspan=4| Anand Bakshi
| rowspan=2| Mohammed Rafi
|-
| "Hip Hip, Aao Piyo Peene Ka Zamana Aaya"
|-
| "Main Hoon Akeli"
| rowspan=2| solo
|-
| "Jaal Bichhe Hain Nigahon Ke"
|-
! Rowspan=2| ''[[Humjoli]]''
| "Maan Jaaiye Maan Jaaiye"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Anand Bakshi
| Mohammed Rafi
|-
| "Gaon Ki Main Gori"
| Kamal Barot
|-
! Rowspan=3| ''Ilzam''
| "Mere Hotho Ki Lali Jane Kisne Chura Li"
| rowspan=6| Usha Khanna
| Indeevar
| rowspan=9| solo
|-
| "Sawariya Aaye Hai Badarwa Chaye Hai"
| rowspan=5| Asad Bhopali
|-
| "Tumhare Bina Hume Nindiya Na"
|-
! Rowspan=3| ''[[Insaan Aur Shaitan]]''
| "Koi Aaye Bahon Mein Le Le"
|-
| "Humne Jo Tumko Salam Kiya"
|-
| "Meri Ada Hai Aa Aa"
|-
! Rowspan=5| ''Inspector''
| "Haye Yeh Tera Dil"
| Rowspan=5| N. Dutta
| rowspan=5| S. H. Bihari
|-
| "Pee Lo Pee Loo"
|-
| "Haaye Haye Kisiki Patli Kamar"
|-
| "Bura Tum Na Mano To Ek Bat Keh Doon"
| Mohammed Rafi
|-
| "Marhaba Marhaba Marhaba Aye Husn"
| rowspan=2| solo
|-
!''[[Ishq Par Zor Nahin]]''
| "Pyaar B Ik Baat Chali"
| S. D. Burman
| Anand Bakshi
|-
! Rowspan=3| ''[[Jawab (1970 film)|Jawab]]''
| "Aaja Meri Jaan Yeh Hai June Ka Mahina"
| rowspan=3| Laxmikant–Pyarelal
| rowspan=5| Rajendra Krishan
| Kishore Kumar
|-
| "Chali Kahan Hansti Gaati"
| Hemlata, Mohammed Rafi
|-
| "Arre Amma Wohi Mua"
| Hemlata
|-
! Rowspan=2| ''[[Johnny Mera Naam]]''
| "O Mere Raja Khafaa Na Hona"
| rowspan=4| Kalyanji–Anandji
| Kishore Kumar
|-
| "Husn Ke Lakhon Rang"
| solo
|-
! Rowspan=2| ''[[Kab? Kyun? Aur Kahaan?]]''
| "Pyaar Se Dil Bhar De Nahin Nahin"
| Indeevar
| Mohammed Rafi
|-
| "Yeh Aankhen Jhuki Jhuki Si"
| Anjaan
| Usha Khanna
|-
! Rowspan=1| ''Kaun Ho Tum''
| "Daiya Re Daiya Kya Hua, Dil Kho Gaya"
| Usha Khanna
| Asad Bhopali
| Usha Khanna
|-
! Rowspan=2| ''[[Khilona (1970 film)|Khilona]]''
| "Mai Sharabi Nahin"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Anand Bakshi
| Mohammed Rafi
|-
| "Roz Roz Rozi"
| Kishore Kumar
|-
! rowspan=4| ''Koi Ghulam Nahin''
| "Koi Ghulam Nahin"
|rowspan=4| S. N. Tripathi
|rowspan=4| Saraswati Kumar Deepak
|rowspan=2| Manna Dey
|-
| "Aayi Milan Ki Bela"
|-
| "Amma Ka Laal Hai Tu"
| solo
|-
| "Andhiyan Dooe Huyi Hain"
| P. Susheela
|-
! Rowspan=1| ''[[Maa Aur Mamta]]''
| "Tere Roop Ne Yeh Kaam Kiya"
| Laxmikant–Pyarelal
| Anand Bakshi
| Mohammed Rafi
|-
! Rowspan=5| ''[[Maa Ka Aanchal]]''
| "Jane Kya Hal Ho Kal Shishe Ka Paimane Ka"
| rowspan=5| Madan Mohan
| rowspan=5| Kaifi Azmi
| rowspan=5| solo
|-
| "Waqt Meherbaan Hai"
|-
| "Teree Jhoothe Vade Ka Aetbar Kiya"
|-
| "Maa Ka Aanchal Laadale Daaman Hai Bhagwaan Ka"
|-
| "Bhanwar Mein Meree Naiya"
|-
! Rowspan=3| ''Maharaja''
| "Kitni Hasin Hai Mere Pyar Ki Nazar"
| rowspan=3| Madan Mohan
| Hasrat Jaipuri
| rowspan=9| solo
|-
| "Pee Ki Nazar Gore Tan Se Lipat Gayi"
| Indeevar
|-
| "Maine Pee Li Mera Dil"
| Kaifi Azmi
|-
! Rowspan=2| ''[[Man Ki Aankhen]]''
| "Arre Maa Gauri Maa"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Sahir
|-
| "Bahut Der Tumne Sataya Hai Mujhko"
|-
! Rowspan=4| ''Mangu Dada''
| "Dhunde Na Milega Dildar Tumhe"
| rowspan=4| C. Arjun
| Indeevar
|-
| "Hosh Me Tum Bhi"
| rowspan=2| S. H. Bihari
|-
| "Abhi To Baki Hai Kahani Raaton Ki"
|-
| "Peenewale Meri Aankho Se Piya"
| Jan Nisar Akhtar
|-
!''Mastana''
| "Hoye Nandlala Holi Khele, Biraj Mein Dhoom Maachi Hai"
| Laxmikant–Pyarelal
| Anand Bakshi
| Mohammed Rafi, Mukesh
|-
! Rowspan=4| ''[[Mera Naam Joker]]''
| "Daag Na Lag Jaaye"
| rowspan=4| Shankar–Jaikishan
| rowspan=2| Hasrat Jaipuri
| rowspan=2| Mukesh
|-
| "Titar Ke Do Aage Titar"
|-
| "Kaate Na Kaate Raina"
| rowspan=2| Shailendra
| Manna Dey
|-
| "Ang Lag Jaa Balmaa"
| solo
|-
!''[[Mere Humsafar]]''
| "Haye Mar Gayi"
| Kalyanji–Anandji
| Anand Bakshi
| solo
|-
! Rowspan=4| ''[[Mujrim (1970 film)|Mujrim]]''
| "Raat Bhi Sard Hai"
| rowspan=4| Sonik–Omi
| Hasrat Jaipuri
| rowspan=3| solo
|-
| "Mujrim Ye Mujrim Woh"
| rowspan=3| Verma Malik
|-
| "Dil Ka Mehmaan Mujhe Kahan Chala Chhod Ke"
|-
| "Balle Shava Balle Shava"
| Shamshad Begum, Mahendra Kapoor
|-
! Rowspan=4| ''My Love''
| "Sunate Hai Sitare Raat Bhar Sabko Ye Afsana"
| rowspan=4| Daan Singh
| rowspan=4| Anand Bakshi
| rowspan=4| solo
|-
| "Sunate Hai Sitare Raat Bhar"
|-
| "Bheegi Bheegi Raat Mein"
|-
| "Guzar Gaye Jo Haseen Zamane Khyaal Mein"
|-
! Rowspan=4| ''[[Naya Raasta]]''
| "Jaan Gayi Mai To Jaan Gayi"
| rowspan=4| N. Dutta
| rowspan=4| Sahir Ludhianvi
| Mohammed Rafi
|-
| "Chunar Mori Kori kori kori"
| rowspan=3| solo
|-
| "Zulfon Ke Mahkte Saye Hai"
|-
| "More Saiyya Padu Paiya"
|-
! Rowspan=2| ''Oos Rata Ke Baad''
| "Bhari Mehfil Mein Ishaare Re Bulaya Kije"
| rowspan=2| Hemant Kumar
| rowspan=2| Gulzar
| solo
|-
| "Bahut Achchhe Laago Toh Jaan Keh Doon"
| Mukesh
|-
!''[[Pagla Kahin Ka]]''
| "Suno Zindagi Gaati Hai"
| Shankar–Jaikishan
| Hasrat Jaipuri
| solo
|-
! Rowspan=2| ''Pardesi''
| "Pardesi Piya Ho Pardesi Piya"
| rowspan=2| Chitragupt
| rowspan=2| Majrooh Sultanpuri
| rowspan=1| Mohammed Rafi
|-
| "Kal Ki Kuchh Adhoori Baatein Hai Zaroori"
| solo
|-
! Rowspan=2| ''Patni''
| "Aayi Aayi Nayi Dulhan Koyi"
| rowspan=2| Vishnu Khanna
| rowspan=2| Indeevar
| Usha Mangeshkar
|-
| "Lakhon Mein Khumari Hai"
| solo
|-
! Rowspan=4| ''[[Pavitra Papi]]''
| "Le De Saiyan Odhni"
| rowspan=4| Prem Dhawan
| rowspan=4| Prem Dhawan
| Mohammed Rafi
|-
| "Shada Shadak Dil Kare Dhak Dhak"
| Usha Mangeshkar
|-
| "O Munni Ke Lalaa Hanji"
| Usha Khanna
|-
| "Poochho Na Kaise Haye Ji"
| solo
|-
!''[[Pehchan (1970 film)|Pehchan]]''
| "Lo Aayi Hai Jawani Roop Ke Nagmein Gaati"
| Shankar–Jaikishan
| Hasrat Jaipuri
| solo
|-
! rowspan=2| ''[[Purab Aur Paschim]]''
| "Twinkle Twinkle Little Star"
| rowspan=2| Kalyanji–Anandji
| rowspan=2| Prem Dhawan
| rowspan=2| Mahendra Kapoor
|-
| "Hare Rama Hare Krishna"
|-
! rowspan=4| ''[[Puraskar]]''
| "Ae Meri Jaan Chand Sa Gora Mukhda"
| rowspan=4| R D Burman
| rowspan=4| S. H. Bihari
| rowspan=2| Mukesh
|-
| "Natija Humari Mohabbat Ka Hai"
|-
| "Dekho To Kya Hai Aaj Ki Mehfil"
| rowspan=2| solo
|-
| "Yeh Nashili Meri Aankhe"
|-
!''Priya''
| "Maa Tune Kyun Bheja Sasural"
| Kalyanji–Anandji
| Indeevar
| Shammi
|-
!''[[Pushpanjali]]''
| "Bade Haseen Bahanon Se"
| Laxmikant–Pyarelal
| Anand Bakshi
| solo
|-
! Rowspan=2| ''[[Raaton Ka Raja]]''
| "Door Se Tera Deewana Aaya Hai, Ruk Jaa Zara"
| rowspan=2| R D Burman
| Rowspan=2| Majrooh Sultanpuri
| Mahendra Kapoor
|-
| "Aye Dekho Toh, Yahan Koyi Nahin Hai"
| solo
|-
! Rowspan=3| ''[[Rootha Na Karo]]''
| "Aap Ka Chehra Mashallah, Zulf Ka Pehra Subhanallah"
| rowspan=3| C. Ramchandra
| rowspan=3| Hasrat Jaipuri
| [[Mohammed Rafi]]
|-
| "Mera Dil Hai Chulbula"
| Rowspan=2| solo
|-
| "Tumhare Rooth Jane Se"
|-
!''Saas Bhi Kabhi Bahu Thi''
| "Ran kahe Main Itni Jawaan Ho Gayi"
| R D Burman
| Rajendra Krishan
| rowspan=2| Usha Mangeshkar
|-
! Rowspan=4| ''Saat Phere''
| "Aji Hum Hi To Hai"
| rowspan=4| Sudhir Sen
| rowspan=4| Kaifi Azmi
|-
| "Ghunghar Baje Saath"
| rowspan=3| solo
|-
| "Sata Ke Mujhko Dilruba"
|-
| "Tumse Dil Ki To Koi Baat"
|-
!''[[Sachaa Jhutha]]''
| "Karle Pyaar Karle"
| Kalyanji–Anandji
| Gulshan Bawra
| solo
|-
! Rowspan=3| ''[[Samaj Ko Badal Dalo]]''
| "Paayal Chham Chham Bole Sakhi"
| rowspan=3| Ravi
| rowspan=3| Sahir Ludhianvi
| Usha Mangeshkar
|-
| "Tum Apne Saheli Ko Itna Bataa Do"
| rowspan=2| Mohammed Rafi
|-
| "Yeh Mausam Yeh Khuli Hawa"
|-
!rowspan=6| ''[[Sawan Bhadon]]''
| "Sun Sun Sun, O Gulabi Kali"
| rowspan=6| Somik-Omi
| rowspan=6| Verma Malik
| [[Mohammed Rafi]]
|-
| "Ek Dard Utha, Haay Ek Dard Utha"
| [[Usha Khanna]]
|-
| "Aankhen Meri Maikhana"
| rowspan=4| solo
|-
| "Ae Najarbaaz Saiyan"
|-
| "Mera Man Ghabraye"
|-
| "Akhiyan Na Maar"
|-
! rowspan=3| ''Sasta Khoon Mahenga Pyaar''
| "Holo Hai Holi Aayi Re Holo Aayi"
| Rowspan=5| Usha Khanna
| rowspan=3| Asad Bhopali
| Mukesh
|-
| "Pi Se Milna Ghazab Hua Raat Dhale"
|Rowspan=2| solo
|-
| "Roothe Roothe Sanan Tumhe Meri Kasam"
|-
! Rowspan=2| ''Sau Saal Beet Gaye''
| "Kya Pila Diya Tune Dekha"
|Rowspan=2| Indeevar
|-
| "Brahmachari Ji O Brahmachari Ji"
|-
!''[[Sharafat (1970 film)|Sharafat]]''
| "Ek Din Aap Ko Yaad Kiye Magar"
| Laxmikant–Pyarelal
| Anand Bakshi
| solo
|-
! Rowspan=3| ''[[Soldier Thakur Daler Singh]]''
| "Hum Ne Suna Tha Bada Charcha Janaab Ka"
| rowspan=3| Sonik–Omi
| rowspan=3| Aziz Kashmiri
| rowspan=3| solo
|-
| "Tum Ek Nazar Dekho To Idhar"
|-
| "Zameen Ke Chaand Tere Dil Mein"
|-
!''[[Suhana Safar]]''
| "Chudiyan Bazaar Se Mangwaa De"
| Laxmikant–Pyarelal
| Anand Bakshi
| Mohammed Rafi
|-
!''Taqat Aur Talwar''
| "Chor Ko Dhoondhe Pehredaar"
| Avinash Vyas
| Madan Bharti
| solo
|-
! Rowspan=3| ''Tarzan 303''
| "Haye Re Haye Tera Jawab Kahan"
| Rowspan=3| Harish Dhawan
| rowspan=3| Prem Dhawan
| Usha Mangeshkar
|-
| "Jawani Pe Bahare"
| rowspan=2| solo
|-
| "Tum Bhi Chup Ho"
|-
! rowspan=3| ''[[The Train (1970 film)|The Train]]''
| "Chhaiya Re Chhaiya, Taaron Ki Chhaiya"
| rowspan=3| R D Burman
| rowspan=3| Anand Bakshi
| rowspan=2| solo
|-
| "Maine Dil Abhi Diya Nahi"
|-
| "O Meri Jaan Maine Kaha"
| R D Burman
|-
! Rowspan=3| ''Truck Driver''
| "Jhuki Jaati Hai Kyun Nazren"
| rowspan=3| Sonik–Omi
| Amar Chaturvedi
| Mahendra Kapoor
|-
| "Aisa Ek Mehman Aaj Ghar Aaya"
| rowspan=2| Jan Nisar Akhtar
| rowspan=2| solo
|-
| "Tikhi Tikhi Nazre Ki"
|-
! rowspan=2| ''[[Tum Haseen Main Jawaan]]''
| "Tum Haseen Main Jawaan"
| rowspan=2| Shankar–Jaikishan
| rowspan=2| Hasrat Jaipuri
| Mohammed Rafi
|-
| "Cheenk Meri Jaan"
| rowspan="1"|solo
|-
! Rowspan=2| ''Umang''
| "Sachcha Pyaar Toh Jhuk Nahin Sakta"
| rowspan=2| Shankar–Jaikishan
| Hasrat Jaipuri
| rowspan=2| solo
|-
| "Na Main Hoon Main"
| Anjaan
|-
! Rowspan=5| ''Veer Abhimanyu''
| "Kya Kahun Kaun Hi Tum"
| rowspan=8| Prem Dhawan
| rowspan=8| Prem Dhawan
| rowspan=2| Mahendra Kapoor
|-
| "Sundar Mukhda Khilta Jovan"
|-
| "Aare Swamy Aare"
| rowspan=3| solo
|-
| "Chhalia Kapti Gopiyo Wale"
|-
| "Kisne Chhu Liya Nazuk Tan"
|-
! Rowspan=3| ''Veer Amarsingh Rathore''
| "Ho Akhiya Milake Akhiya"
| Usha Mangeshkar
|-
| "Haaye Dil De Diya Aise Dildar Ko"
| Rowspan=2| solo
|-
| "Pehli Pehli Aayi Milan Ki Raat"
|-
!''[[Yaadgar (1970 film)|Yaadgar]]''
| "Baharon Ka Hai Sama"
| Kalyanji–Anandji
| Indeevar
| solo
|-
! Rowspan=1| ''Ziarat Rahe Hind''
| "Husn Ki Mehfil Mein Deewana Chala"
| Mustafa Yousuf
| Abdur Rab Chaush
| solo
|-
|}
=== 1971 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
!''[[Aan Milo Sajna]]''
| "Palat Meri Jaan, Main Tere Qurbaan"
| Laxmikant–Pyarelal
| Anand Bakshi
| solo
|-
! Rowspan=3| ''[[Adhikar (1971 film)|Adhikar]]''
| "Koi Mane Ya Na Mane, Jo Kal Tak The Anjane"
| rowspan=3| R D Burman
| rowspan=3| Ramesh Pant
| [[Kishore Kumar]]
|-
| "Tum To Sabke Ho Rakhwale"
| rowspan=2| solo
|-
| "Sharaab Nahin Hoon"
|-
! Rowspan=2| ''Aisa Bhi Hota Hai''
| "Chand Rato Ko Nikle Na Nikle"
| rowspan=2| O. P. Nayyar
| rowspan=2| S. H. Bihari
| rowspan=2| solo
|-
| "Ram Jaane Kiski Lagi Haye Mujhko Najariya"
|-
! Rowspan=3| ''[[Andaz (1971 film)|Andaz]]''
| "Mujhe Pyaas Aisi Pyaas Lagi Hai"
| rowspan=3| Shankar–Jaikishan
| rowspan=3| Hasrat Jaipuri
| rowspan=2| solo
|-
| "[[Zindagi Ek Safar Hai Suhana]]" (female)
|-
| "Dil Usse Do Jo Jaan De De"
| Mohammed Rafi
|-
! Rowspan=3| ''[[Badnam Farishte]]''
| "Na Saathi Hai Na Manzil Ka Pata"
| rowspan=3| N. Dutta
| rowspan=3| Asad Bhopali
| rowspan=2| solo
|-
| "Nashili Aankho Se Nagar Sa Ek Baras Ke"
|-
| "Aaj Ka Vaada Pakka Haath Milao"
| [[Mahendra Kapoor]]
|-
! Rowspan=5| ''Bagawat''
| "Naach Lo Jhoom Lo"
|Rowspan=5| T. V. Raju
|Rowspan=5| Prem Dhawan
| S. Janaki
|-
| "Laahi Laahi Japa Japa Japa"
|Rowspan=4| solo
|-
| "Khushiyon Ki Toh Duniya Mil
|-
| "Chanda Se Pyaara O Teekhe Nainwala O"
|-
| "Baaz Aa Na Sata Payaliya"
|-
! ''[[Balidaan (1971 film)|Balidaan]]''
| "Haaye Haaye Re Daiyya Moyi Mai To Kyo Jawaan Huyi"
| Shankar–Jaikishan
| Verma Malik
| Mahendra Kapoor
|-
! Rowspan=5| ''Behroopia''
| "Bhanwre Sun Sun Kahe Kare Gun Gun"
| rowspan=5| Usha Khanna
| rowspan=5| Anjaan
| Mahendra Kapoor
|-
| "Uye Ma Uye Ma Koi Bachaye"
| Usha Khanna
|-
| "Bin Baja O Sapere"
| rowspan=2| solo
|-
| "O Re Banke Sipahiya Ran Banke"
|-
| "Kya Tu Hai Kya Wahi Hai"
| Nandu Bohra
|-
! Rowspan=2| ''[[Bikhre Moti]]''
| "Ek Nazar Chahu Mai Halki Halki"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Majrooh Sultanpuri
| rowspan=2| solo
|-
| "Main Bhi Sochu Door Khada Hai Koun Ye Jentelman"
|-
!''[[Bombay Talkie]]''
| "Typewriter Tip Tip Tip"
| Shankar–Jaikishan
| Hasrat Jaipuri
| Kishore Kumar
|-
!''[[Buddha Mil Gaya]]''
| "Bhali Bhali Si Ek Surat"
| rowspan=5| R D Burman
| rowspan=5| Majrooh Sultanpuri
| Kishore Kumar
|-
!rowspan=4| ''[[Caravan (1971 film)|Caravan]]''<ref>{{Cite web|url=https://m.hindigeetmala.net/movie/caravan.htm|title=Caravan : Lyrics and video of Songs from the Movie Caravan (1971)|website=HindiGeetMala}}</ref>
| "Goriyan Kahan Tera Desh"
| [[Mohammed Rafi]]
|-
| "Ab Jo Mile Hain Toh"
| rowspan=3| solo
|-
| "[[Piya Tu Ab Toh Aaja]]"
|-
| "Daiya Yeh Main Kahan Phaansi"
|-
! Rowspan=2| ''Chahat''
| "Humein Tumse Tumhein HumsShikayat Ho Toh Aisi Ho"
| rowspan=2| Laxmikant–Pyarelal
| Rowspan=2| Anand Bakshi
| Mohammed Rafi
|-
| "Aa Tu Na Jaa Aisi Rut Mein"
| solo
|-
! ''[[Chandan (1971 film)|Chandan]]''
| "Aye Re Sakhi Jabse Laga Hau Saal Solva"
| Sonik–Omi
| Omkar Verma
| solo
|-
!''[[Chhoti Bahu]]''
| "Dulhaniya Bataa De Ri Ghoonghat Hataa Ke"
| Kalyanji–Anandji
| Uddhav Kumar
| Usha Khanna
|-
! rowspan=5| ''Chingari''
| "Tu Bol Na Bol"
| Rowspan=5| Ravi
| Rowspan=5| Sahir Ludhianvi
| Rowspan=2| Mahendra Kapoor
|-
| "Main Kaun Hoon, Main Kya Hoon"
|-
| "Meri Baari Re Kaahe Ko Bhule"
| Usha Mangeshkar
|-
| "Ae Yaar Muje Thaam"
| rowspan=2| solo
|-
| "Pighli Aag Se Sagar Bhar Le"
|-
! Rowspan=2| ''Daku Mansingh''
| "Gol Pindaliyon Par Pehen Ke Resham Ka Pajama"
| rowspan=2| Sardul Kwatra
| rowspan=2| Shakeel Nomani
| Mahendra Kapoor
|-
| "Tumse Kya Parda Karna"
| solo
|-
! Rowspan=3| ''[[Dharti Ki God Mein]]''
| "Ek Pyaar Ka Fasaana Sun Lo"
| rowspan=3| Sonik–Omi
| rowspan=3| Hasrat Jaipuri
| rowspan=3| Mahendra Kapoor
|-
| "Milate Nahi Muskuraye Jaate Hai"
|-
| "Kaaliya, Kaaliya, Hoth Tere Hai Gulab"
|-
!''[[Do Boond Pani]]''
| "Jaa Ri Pawaniya Piya Ke Des Jaa"
| Jaidev
| Kaifi Azmi
| solo
|-
! Rowspan=3| ''[[Do Raha]]''
| "Tumhi Rehnuma Ho"
| rowspan=3| Sapan–Jagmohan
| rowspan=3| Indeevar
| rowspan=3| solo
|-
| "Dole Jhumka Mera"
|-
| "Meri Bagiya Ki Kali"
|-
! Rowspan=4| ''[[Duniya Kya Jane]]''
| "Saanjh Savere Naina Tere Mere"
| rowspan=4| Shankar–Jaikishan
| rowspan=4| Rajendra Krishan
| Kishore Kumar
|-
| "Bekhabar Bekhabar Bekhabar, Dekh Le Dekh Le Ek Nazar"
| rowspan=3| solo
|-
| "Kitna Suhana Wo Din Hoga Jis Din Hamara Milan Hoga"
|-
| "Ek Tamasha Hu Mai Dekhiye Dekhiye"
|-
! Rowspan=3| ''Ek Din Adhi Raat''
| "Mera Dil Jhum Jhum Gaye"
| rowspan=3| Dattaram Wadkar
| rowspan=2| Farooq Kaiser
| solo
|-
| "Saamne Aa Parda Hata"
| Mohammed Rafi
|-
| "Chhedo Na Saiyan Ki Baate Sakhi"
| Noor Devasi
| Usha Timothy
|-
! Rowspan=2| ''[[Ek Nari Ek Brahmachari]]''
| "Are Tu Hai Buddhu Brahmachari"
| rowspan=2| Shankar–Jaikishan
| Neeraj
| [[Kishore Kumar]], [[Manna Dey]], [[Sharda Rajan Iyengar|Sharda]]
|-
| "Lapa Tosa Nanapa"
| Hasrat Jaipuri
| Kishore Kumar
|-
! Rowspan=7| ''Ek Thi Reeta''
| "Jo Mere Pyar Par Ho Shak Toh"
| rowspan=7| Jaidev
| rowspan=3| Prem Jalandhari
| Mohammed Rafi
|-
| "Bataun Baat Toh Baaton Se Baat"
| Jagjit Singh
|-
| "Jane Kyo Pritam Na Aaye"
| rowsoan=3| solo
|-
| "Duniya Chhup Chhupi Si Chor"
| rowspan=3| Sarshar Sailani
|-
| "Kahin Hath Ham Se Chhuda Toh Na Loge"
|-
| "Wah Wah Re Lachhi Tera"
| Sarla Kapoor
|-
| "Mamma Says I Am Nineteen"
| N/A
| Hemdry Dargwitcz
|-
!''Elaan''
| Aaj Tunhare Kaan Mein Yeh Keh Doon"
| Shankar–Jaikishan
| Farooq Kaiser
| solo
|-
! Rowspan=2| ''[[Ganga Tera Pani Amrit]]''
| "Is Dharti, Is Khule Gagan Ka Kya Kehna"
| rowspan=2| Ravi
| rowspan=2| Sahir Ludhianvi
| Mohammed Rafi
|-
| "O Ladke Makhan Se"
| solo
|-
!rowspan=3| ''[[Hare Rama Hare Krishna (1971 film)|Hare Rama Hare Krishna]]''<ref>{{Cite web|url=https://m.hindigeetmala.net/movie/hare-rama-hare-krishna|title=Hare Rama Hare Krishna (1971) songs}}</ref>
| "[[Dum Maro Dum (song)|Dum Maro Dum]]"
| rowspan=3| R D Burman
| rowspan=7| Anand Bakshi
| rowspan=2| solo
|-
| "Dum Maro Dum" (version 2)
|-
| "I Love You" (Hare Krishna Hare Rama)
| Usha Uthup
|-
! rowspan=4| ''Haseenon Ka Devta''
| "Preet Na Jaane Haye Haye"
| rowspan=4| Laxmikant–Pyarelal
| rowspan=3| solo
|-
| "Jiske Liye Mera Dil Jale Haay"
|-
| "Dhadkan Kehti Hai O Sach Hi Kehti Hai"
|-
| "Balam Dewane Mujhe Chhod De"
| Mohammed Rafi
|-
! Rowspan=4| ''[[Hungama (1971 film)|Hungama]]''
| "Waah Ri Kismat Waah Waah"
| rowspan=4| R D Burman
| rowspan=4| Anjaan
|rowspan=2| Manna Dey
|-
| "Kachchi Kali Kachnaar Ki"
|-
| "Meri Jawaani Teri Deewaani"
| solo
|-
| "Ai Door Se Baat Karna Ri"
| Kishore Kumar
|-
! Rowspan=2| ''Jai Bangladesh''
| "Dil Tarse Tujhe Dekho"
| rowspan=2| Kalyanji–Anandji
| Qamar Jalalabadi
| Usha Mangeshkar
|-
| "Zindagi Tumne Laakho Ki"
| Farooq Kaiser
| solo
|-
!''Jane Anjane''
| "Haye Chahe Tum Pyaar Kari Ya Bekaraar Karo"
| rowspan=5| Shankar–Jaikishan
| Hasrat Jaipuri
| solo
|-
! Rowspan=4| ''[[Jawan Mohabbat]]''
| "Na Rutho Na Rutho Meri Jaan"
| rowspan=4| Hasrat Jaipuri
| rowspan=3| Mohammed Rafi
|-
| "O Mil Gayi Mere Sapnon Ki Rani"
|-
| "Mere Sapno Ki Rani Tum Nahin Ho"
|-
| "In Nigaahon Me Ghar Tumhara Hai"
| solo
|-
!''[[Johar Mehmood in Hong Kong]]''
| "Balam Calcutta Pahuchh Gahe"
| Kalyanji–Anandji
| Qamar Jalalabadi
| Usha Mangeshkar
|-
!''[[Jwala (1971 film)|Jwala]]''
| "Aha Le Gayi O Jiya"
| Shankar–Jaikishan
| Shailendra
| Lata Mangeshkar
|-
! Rowspan=5| ''Kahin Aar Kahin Paar''
| "Allah Allah, Kya Adaye Janab Laye Hai"
| rowspan=5| Ganesh
| rowspan=2| S. H. Bihari
| Shamshad Begum, Mahendra Kapoor
|-
| "Kahin Aar Kahin Paar"
| Usha Mangeshkar
|-
| "Dil Hai Hamara"
| rowspan=2| Asad Bhopali
| Rowspan=3| solo
|-
| "Dil Mein Badi Badi Baate Hai"
|-
| "Jaam Hotho Se Laga Lu To"
| Jan Nisar Akhtar
|-
! Rowspan=3| ''[[Kal Aaj Aur Kal]]''
| "Ham Jab Honge Saath Saal Ke, Aur Tum Hogi"
| rowspan=3| Shankar–Jaikishan
| Shaily Shailendra
| rowspan=2| Kishore Kumar
|-
| "Aap Yahaan Aaye Kis Liye"
|-
| "Tik Tik Tik Tik Chalti Jaaye Ghadi"
| Kishore Kumar, Mukesh
|-
! Rowspan=3| ''[[Kathputli (1971 film)|Kathputli]]''
| "Jeena Kaisa Ho Pyar Bina Jeena Kaisa"
| rowspan=3| Kalyanji–Anandji
| rowspan=1| Indeevar
| solo
|-
| "Ho Jai Jai Jal Raja"
| rowspan=2| Verma Malik
| Mahendra Kapoor
|-
| "Likha Hai Likha Hai Haan"
| Kishore Kumar
|-
!''[[Kati Patang]]''
| "My Name Is Shabnam"
| R D Burman
| rowspan=11| Anand Bakshi
| solo
|-
! Rowspan=2| ''Lagan''
| "Ek Chhora Hai Gora Gora Hai"
| rowspan=2| Laxmikant–Pyarelal
| solo
|-
| "Tute To Tute Koi Dil Ka Sahara"
| Mohammed Rafi
|-
! Rowspan=3| ''[[Lakhon Mein Ek]]''
| "Ye Duniya Khel Tamasha"
| rowspan=3| R D Burman
| Mohammed Rafi
|-
| "Main Tera Nam Janu Na"
| solo
|-
| "Mere Samne Wale Kamre Me Ek Bhade Ka Tatu Rehta Hai"
| Manna Dey
|-
! Rowspan=5| ''[[Main Sundar Hoon]]''
| "Mujhko Thand Lag Rahi Hai"
| rowspan=5| Shankar–Jaikishan
| rowspan=3| [[Kishore Kumar]]
|-
| "Naach Meri Jaan"
|-
| "Kurukoo, Do Mastane Do Deewane, Ek Mai Hu Ek Tu"
|-
| "Parivar Niyojan (Parody)"
| Shahu Modak, [[Aruna Irani]], [[Mehmood (actor)|Mehmood]], [[Manna Dey]], [[Mukesh (singer)|Mukesh]],
|-
| "Khamosh Ye Aasmaan Hai Ye Kaun Hai"
| Mukesh, Manna Dey
|-
! Rowspan=2| ''[[Man Mandir]]''
| "Kahiye Ji Kya Loge"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Rajendra Krishan
| solo
|-
| "Aa Aaja Abhi Nahi Abhi Nahi"
| Jishore Kumar
|-
! Rowspan=3| ''[[Man Tera Tan Mera]]''
| "Main Bhi Hoon, Tu Bhi Hai"
| rowspan=3| Sapan–Jagmohan
| rowspan=3| Naqsh Lyallpuri
| rowspan=3| solo
|-
| "Na Main Boli, Na Woh Bole"
|-
| "Kahin Kaanton Mein Mehak Hai"
|-
! Rowspan=1| ''[[Maryada (1971 film)|Maryada]]''
| "Dil Ka Lena Dena Humne"
| Kalyanji–Anandji
| Anand Bakshi
| Mohammed Rafi
|-
! Rowspan=2| ''Mata Vaishno Devi''
| "Chand Ne Aisa Jadoo Daala"
| rowspan=2| Dilip Roy
| rowspan=2| B. D. Mishra
| rowspan=2| solo
|-
| "O Nadaan Meri Mana, Tu Na Chhed Mujhe"
|-
!''[[Mela (1971 film)|Mela]]''
| "Mere Sakhiyo Bolo, Zara Mukhda Toh Kholo"
| R D Burman
| Majrooh Sultanpuri
| Mohammed Rafi
|-
!''[[Memsaab (film)|Memsaab]]''
| "Haye Re Mohe Laage"
| Sonik–Omi
| Verma Malik
| solo
|-
! Rowspan=2| ''Murder In Circus''
| "Duniya Mein Raho Aur Pyaar Karo"
| rowspan=4| Usha Khanna
| rowspan=2| Hasrat Jaipuri
| solo
|-
| "Banke Bahroopiya Usne Mera Dil Liya"
| Usha Khanna
|-
! Rowspan=2| ''Naag Pooja''
| "Main Baalak Tum Jagpalak Ho"
| Bharat Vyas
|Rowspan=2| solo
|-
| "Gulaabi Ankhonwale Yeh Kya Pila Diya"
| A. Irshad
|-
! Rowspan=3| ''[[Nadaan (1971 film)|Nadaan]]''
| "Naach Ae Dil, Gaa Ae Dil"
| rowspan=3| Shankar–Jaikishan
| rowspan=3| Hasrat Jaipuri
| rowspan=3| solo
|-
| "Bol Nadan Dil Tujhko Kya Ho Gaya"
|-
| "Uyi Chubh Gayi Karijava Mein"
|-
! Rowspan=3| ''[[Padosi]]''
| "Woh Pyar Humse Karte Hai, Ikraar Nahi Karte"
| rowspan=3| Ravi
| Pravasi
| rowspan=3| solo
|-
| "Taqdeer Ke Bazaar Mein"
| rowspan=2| Asad Bhopali
|-
| "Farz Roke Mohabbat Bulaye"
|-
! Rowspan=3| ''[[Paras (1971 film)|Paras]]''
| " Sajna Ke Samne Main To Rahungi Chup"
| rowspan=3| Kalyanji–Anandji
| Qamar Jalalabadi
| rowspan=2| solo
|-
| "O Jugni Kehti Hai Baat Pate Ki"
| Verma Malik
|-
| "Sachai Se Bad Kar Dharm Nhi Koi Duja"
| Indeevar
| Mahendra Kapoor
|-
! Rowspan=3| ''[[Paraya Dhan]]''
| "Aasha Gayi, Usha Gayi, Main Na Gayi"
| rowspan=3| R D Burman
| rowspan=3| Anand Bakshi
| solo
|-
| "Aao Jhoome Gaaye Milke Dhoom Machayae"
| Kishore Kumar
|-
| "Holi Re Holi, Rangon Ki Holi"
| Manna Dey
|-
! Rowspan=3| ''Parde Ke Peechhey''
| "Teen Kanwariyaa Teen Kanwariya Haathon Mein Mehndi Racha De Koi"
| rowspan=3| Shankar–Jaikishan
| Rowspan=3| Rajendra Krishan
| Shamshad Begum, Usha Mangeshkar
|-
| "Tum Jab Jab Samne Aate Ho"
| Kishore Kumar
|-
| "Jab Husn Ka Jaadu Sir Pe Chad Ke Bolta Hai"
| solo
|-
! Rowspan=4| ''[[Parwana (1971 film)|Parwana]]''
| "Chale Ladkhadaake"
| rowspan=4| Madan Mohan
| rwospan=4| Kaifi Azmi
| solo
|-
| "Piya Ki Gali Laage Bhali"
| [[Parveen Sultana]]
|-
| "Jis Din Se Maine Tumko Dekha Hai"
| rowspan=2| [[Mohammed Rafi]]
|-
| "O Jameela Chhammak Chhallo"
|-
!''Patanga''
| "O Lahariayewali, O Motiwali"
| Shankar–Jaikishan
| Hasrat Jaipuri
| Mohammed Rafi
|-
! Rowspan=2| ''[[Preet Ki Dori]]''
| "Jane Na Jane Dil Ki Baat"
| rowspan=2| Kalyanji–Anandji
| rowspan=2| Indeevar
| rowspan=2| solo
|-
| "Roop Hai, Rang Hai"
|-
!''Preetam''
| "Hum Bhi Shikari, Tum Bhi Shikari"
| Shankar–Jaikishan
| Rajendra Krishan
| solo
|-
! Rowspan=5| ''Purani Pehchan''
| "Yeh Na Humse Poochhiye Mil Gaya Hai Kya Humko"
| rowspan=5| Bhushan
| rowspan=5| Naqsh Lyallpuri
| Mohammed Rafi
|-
| "Aaj Ki Raat Koyi Shamma Na Jalne Paaye"
| rowspan=4| solo
|-
| "Mujhe Neend Aa Gayi Thi"
|-
| "Murali Na Chhed Kanha Mora Ang Ang Lehraye"
|-
| "Bachpan Ka Saath Chhuta Hai"
|-
!''Rakhwale''
| "Rehne Do Gile Shikwe"
| Kalyanji–Anandji
| rowspan=2| Rajendra Krishan
| Mohammed Rafi
|-
! Rowspan=2| ''[[Reshma Aur Shera]]''
| "Tauba Tauba Meri Tauba"
| rowspan=2| Jaidev
| rowspan=2| solo
|-
| "Jab Se Lagan Lagaayi Re"
| Neeraj
|-
! Rowspan=5| ''Saat Sawal Yane Hatim Tai''
| "Zindagi Mili Zindagi"
| rowspan=5| Lala Sattar
| Asad Bhopali, Farooq Kaiser
| rowspan=4| solo
|-
| "Yeh Husn Teh Shabab Yeh Jawaani"
| rowspan=2| Farooq Kaiser
|-
| "Nazron Ki Chhori Jis Dil Pe Chali"
|-
| "Pyaar Leke Aaya Hai"
| rowspan=2| Asad Bhopali
|-
| "Jaan-e-Mohabbat Jaan-e-Tamanna
| Mohammed Rafi
|-
!''[[Saaz Aur Sanam]]''
| "Pal Pal Botal Chhalke"
| Chitragupt
| Kaifi Azmi
| solo
|-
! Rowspan=3| ''Sampoorna Devi Darshan''
| "Tumhare Sang Jeena Tha"
| rowspan=3| S. N. Tripathi
| rowspan=3| B. D. Mishra
| rowspan=3| solo
|-
| "Sansar Ki Kaisi Reet Hai"
|-
| "O Raja Aaja Na Mere Paas"
|-
!''[[Sanjog (1971 film)|Sanjog]]''
| "Man Mandir Mein Preet Ka Dera"
| R D Burman
| Anand Bakshi
| Lata Mangeshkar
|-
! Rowspan=2| ''[[Sansar (1971 film)|Sansar]]''
| "Mere Babu Khilona Leja"
| rowspan=2| Chitragupt
| rowspan=2| Sahir Ludhianvi
| solo
|-
| "Ab Bas Tarsana Chhod Do"
| Kishore Kumar
|-
! Rowspan=3| ''[[Seema (1971 film)|Seema]]''
| "Waqt Thoda Sa Abhi Kuchh Aur Guzar Jaane De"
| rowspan=3| Shankar–Jaikishan
| Indeevar
| towspan=2| Kishore Kumar
|-
| "Dil Mera Kho Gaya, Kho Jane Do"
| rowspan=2| Verma Malik
|-
| "Kispe Hai Tera Dil, Naam Lena Mushkil"
| Mohammed Rafi
|-
! Rowspan=4| ''Shaan-e-Khuda''
| "Milta Hai Kya Nmaaz Mein"
| rowspan=4| Iqbal Qureshi
| rowspan=2| S. H. Bihari
| rowspan=3| solo
|-
| "Sai Kamali Wale"
|-
| "Rakhta Hai Jo Roza Kabhi"
| Kaifi Azmi
|-
| "Yaa Nabi Salam Alaika"
| A. H. Rizvi
| chorus
|-
!''[[Sharmilee]]''
| "Reshmi Ujala Hai, Nakhmali Andhera"
| S. D. Burman
| Neeraj
| solo
|-
! Rowspan=3| ''Sher-e-Watan''
| "Meraa Mehboob Mujhko Mil Jaye"
| rowspan=3| Usha Khanna
| rowspan=3| Asad Bhopali
| rowspan=2| solo
|-
| "Zindagi Bhar Hume Tumse Pyaar Rahega"
|-
| "Zara Humse Milo"
| Mukesh
|-
! Rowspan=6| ''Shri Krishna Leela''
| "Chandra Chhupaa Suraj Ugaa"
| rowspan=6| S. N. Tripathi
| rowspan=6| Bharat Vyas
| rowspan=4| solo
|-
| "Sharad Poonam Ki Suhani Raat"
|-
| "Palkon Ka Palna Naino Ki Dori"
|-
| "Tera Panth Nihar Kanhaiya Main To Gayi Hu Haar"
|-
| "Hathi Ghodaa Paalki Hathi Ghodaa Paalki"
| Dolly Davjekar, Sunil
|-
| "Nari Ek Doosri Dharti Aur Tisari Gaiyaa"
| Usha Timothy
|-
!rowspan=3| ''[[Tere Mere Sapne (1971 film)|Tere Mere Sapne]]''<ref>{{Cite web|url=https://m.hindigeetmala.net/movie/tere_mere_sapne|title=Tere Mere Sapne (1971) songs}}</ref>
| "Tha Thai Thatha Thai"
| rowspan=3| S. D. Burman
| Hasrat Jaipuri
| rowspan=3| solo
|-
| "Phur Ud Chala Hawaon Ke Sang"
| rowspan=2| Neeraj
|-
| "Mera Saajan Phool Kamaal Ka"
|-
! Rowspan=6| ''[[Tulsi Vivah]]''
| "Bhagwan Yeh De Vardaan"
| rowspan=6| Ravi
| rowspan=6| Kavi Pradeep
| rowspan=6| solo
|-
| "Tulsi Kunwari Bani Hai Dulhan"
|-
| "Mar Jayenge Hum Phir Bhi Sajan Yehi Kahenge"
|-
| "Arre Meri Sawa Lakh Ki Nathni Lut Gayi"
|-
| "Meri Tapasyaon Meri Sahay Karo"
|-
| "Natraj Mai Naari Niraali"
|-
! Rowspan=3| ''[[Upaasna]]''
| "Meri Jawani Pyar Ko"
| rowspan=3| Kalyanji–Anandji
| rowspan=3|
| rowspan=3| solo
|-
| "Mujhko To Peeni Hai"
|-
| "Tumhein Apna Na Banaya"
|-
! Rowspan=4| ''Ustad Mera Naam''
| "Aa Tose Miley Nain More Mitwa"
| rowspan=4| C. Satyam
| rowspan=4| Prem Dhawan
| rowspan=4| solo
|-
| "O Sardar Subhan Allaah"
|-
| "Apna Dil Zara Thamo"
|-
| "Hai Jo Teri Tamanna"
|-
! Rowspan=5| ''Ustad Pedro''
| "Kal Ka Raaja Aaj Bhikhari"
| rowspan=5| C. Arjun
| rowspan=5| Asad Bhopali
| Manna Dey
|-
| "Chhayi Ghata Baagon Mein Mor Bole"
|-
| "Ye Khubsurat Sham Bahaaro Ke Salam"
| rowspan=3| solo
|-
| "Kahan Giri Ram More"
|-
| "Saiyya Bele Ka Phool Mai Chameli Ki Kali"
|-
|}
=== 1972 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
!''Aan Baan''
| "Badnaam Ho Gaya Dil"
| rowspan=8| Shankar–Jaikishan
| Hasrat Jaipuri
| solo
|-
! Rowspan=3| ''[[Aankh Micholi]]''
| "Dil Ki Murad Puri Ho Gayi"<ref name="s">{{cite web|url=http://hindigeetmala.net/movie/aankh_micholi.html|title=Aankh Micholi : Lyrics and video of Songs from the Movie Aankh Micholi (1972)|website=HindiGeetMala}}</ref>
| Rowspan=3| Rajendra Krishan
| rowspan=2| solo
|-
| "Deewani Chandni Raat Bhi Pagal"<ref name=" s" />
|-
| "Aa Ja Re"<ref name="s" />
| Kishore Kumar
|-
! Rowspan=4| ''[[Aankhon Aankhon Mein]]''
| "Aankhon Aankhon Mein Baat Hone Do"
| Hasrat Jaipuri
| rowspan=3| Kishore Kumar
|-
| "Ho Tera Mera Mel Hai"
| rowspan=3| Verma Malik
|-
| "Yeh Do Baaten Pyaar Bhari Kar Loon"
|-
| "Gora Rang Mera Gori Baahe"
| Usha Mangeshkar
|-
! Rowspan=2| ''[[Anokhi Pehchan]]''
| "Yeh Mera Pehla Pehla Pyar Hai"
| rowspan=2| Kalyanji–Anandji
| Rowspan=2| Anand Bakshi
| rowspan=2| solo
|-
| "O Mr Jolly Mera Naam Hai Miss Dolly"
|-
! Rowspan=2| ''[[Apna Desh]]''
| "Aaja O Mere Raja"
| rowspan=2| R D Burman
| rowspan=2| Anand Bakshi
| solo
|-
| "Duniya Mein Logon Ko"
| R D Burman
|-
! Rowspan=3| ''[[Apradh]]''
| "Tum Mile Pyaar Se"
| rowspan=3| Kalyanji–Anandji
| rowspan=2| Indeevar
| Kishore Kumar
|-
| "Aye Naujawan Sab Kuchh Yahaan"
| solo
|-
| "Assalam Alaikum"
| Hasrat Jaipuri
| Mahendra Kapoor
|-
! Rowspan=3| ''Baankelal''
| "Kya Doge Dil Leke Babuji Bolo"
| rowspan=3| Chand Pardesi
| Rowspan=3| Pandit Madhur
| rowspan=2| solo
|-
| "Hum Yaad Me Unki Chandini Raate" (female)
|-
| "Hum Kisse Kahe Kya Shikwa Kare"
| Shamshad Begum
|-
! Rowspan=4| ''Baazigar''
| "Meri Jhoom Ke Naachi Jawani"
| rowspan=4|Sapan–Jagmohan
| rowspan=4| Naqsh Lyallpuri
| rowspan=4| solo
|-
| "Aaj Aaya Hai Tu"
|-
| "Saiyan Mila Mohe Nadiya Kinare"
|-
| "Panwaran Hoon Main Lucknow Ki"
|-
! Rowspan=5| ''Babul ki Galiyan''
| "Mera Naam Hai Chaupati"
| rowspan=5| Ravi
| Rowspan=5| Rajendra Krishan
| Mahendra Kapoor
|-
| "Ek Cheez Maangte Hain Hum Tumse"
| Kishore Kumar
|-
| "Door Se Karna Nazara"
| rowspan=3| solo
|-
| "Bairi Chhod De Mera Raasta"
|-
| "Pehle Soonghi Phir Chakhi"
|-
! Rowspan=2| ''Baharon Phool Barsao''
| "O Dharti Ke Chand"
| rowspan=2| Rajan Pal
| rowspan=2| Qamar Jalalabadi
| rowspan=2| solo
|-
| "Suno Ek Baat Sanam"
|-
! Rowspan=3| ''[[Bandagi]]''
| "Phoolon Ki Taazgi Ho Tu"
| rowspan=3| Shankar–Jaikishan
| rowspan=3| Rajendra Krishan
| Kishore Kumar
|-
| "Bade Anadi Seedhe Saadhe"
| rowspan=2| solo
|-
| "Mera Naam Hai Jawaani Mastani"
|-
!''[[Bawarchi]]''
| "Hey Good Morning"
| Madan Mohan
| Gulzar
| Kishore Kumar, Hridaynath Chattopadhyay, Nirmala Devi, Lakshmi Shankar
|-
! Rowspan=3| ''[[Be-Imaan]]''
| "Dekho Ji Raat Ko Julam Ho Gaya"
| rowspan=3| Shankar–Jaikishan
| rowspan=3| Verma Malik
| solo
|-
| "Patla Patla Reshami Kurta"
| Mahendra Kapoor
|-
| "Chali Saj Ke Hai Dil Ko Milane Main"
| Sharda
|-
!''[[Bees Saal Pehle]]''
| "Abhi Toh Dua Deke Bachpan Gaya Hai"
| Hemant Kumar
| S. H. Bihari
| Kishore Kumar
|-
! ''[[Bhai Ho To Aisa]]''
| "Sun Le Naag Raja"
| Sonik–Omi
| Sahir Ludhianvi
| solo
|-
! Rowspan=2| ''Bharat Ke Shaheed''
| "Aayega Dulha Mera, Baandh Ke Sehra"
| Rowspan=2| Prem Dhawan
| Prem Dhawan
| rowspan=2| solo
|-
| "Mere Daaman Ki Thandi Hawa Chahiye Ya"
|-
! Rowspan=3| ''[[Bhavna (film)|Bhavna]]''
| "Phir Milengi Kahan Aisi Tanhaiyan"
| Rowspan=3| Jaidev
|Rowspan=3| Naqsh Lyallpuri
| Mukesh
|-
| "Meri Iltija Hai Bas Ek Iltija Hain"
| solo
|-
| "Koi Vaada Nahin Hai Mulaqaat Kam"
| Usha Mangeshkar
|-
! Rowspan=3| ''Bijlee''
| "Zara Bol De Gori Tera Saiyan Kaisa Hoga"
| rowspan=3| Usha Khanna
| Rowspan=3| Asad Bhopali
| Rowspan=3| solo
|-
| "Naina Jhapke, Kamariya Mori Lachke"
|-
| "Jaadugarni Aayi Prem Nagariya Se"
|-
! Rowspan=4| ''[[Bindiya Aur Bandook]]''
| "Chhori Loot Gayi Re, Tere Liye Sajna"
| rowspan=4| Sonik–Omi
| rowspan=4| Gulshan Bawra
| rowspan=4| solo
|-
| "Kela Aane Aane"
|-
| "Bindiya Lagaungi"
|-
| "Najariya Jhuka Ke"
|-
!''[[Bombay to Goa (1972 film)|Bombay To Goa]]''
| "Haye Haye Yeh Thanda Pani"
| R D Burman
| Rajendra Krishan
| solo
|-
! Rowspan=2| ''Daraar''
| "Chhot Gayi Sakhiya, Bhar Aayi Ankhiyan"
| rowspan=2| Sudhir Phadke
| rowspan=2| Mahendra Dalvi
| rowspan=2| Mohammed Rafi
|-
| "Kyun Chamke Bol Kuchh Bol"
|-
! Rowspan=3| ''[[Dastan]]''
| "Woh Koi Aaya Lachak Uthi"
| rowspan=3| Laxmikant–Pyarelal
| rowspan=3| Sahir Ludhianvi
| rowspan=2| solo
|-
| "Hay Main Ki Kara"
|-
| "Maria My Sweetheart"
| Mahendra Kapoor
|-
! rowspan=4| ''[[Dharkan]]''
| "Maine Pehli Baar Dekha Gussa"
| rowspan=4| Ravi
| rowspan=2| Prem Dhawan
| Kishore Kumar
|-
| "Jab Tu Ne Kuch Na Kiya"
| Manna Dey
|-
| "Pee Meri Aankhon Se Aa Meri Baahon Mein"
| Ravi, Prem Dhawan
| solo
|-
| "Tumse Nazar Mili Milte Hi Jhookane"
| Ravi, Prem Dhawan, Ali Jalili
| Kishore Kumar, Ravi
|-
! Rowspan=3| ''[[Dil Daulat Duniya]]''
| "O Meri Lara Loo"
| rowspan=3| Shankar–Jaikishan
| Hasrat Jaipuri, Neeraj
| Kishore Kumar
|-
| "Masti Aur Jawani Ho"
| rowspan=2| Verma Malik
| Kishore Kumar, Sharda
|-
| "Deep Jale Dekho"
| Usha Khanna, Rekha Jayker
|-
! Rowspan=3| ''[[Dil Ka Raaja]]''
| "Sundar Hoon Aisi Main"
| rowspan=3| R D Burman
| rowspan=3| Majrooh Sultanpuri
| rowspan=1| solo
|-
| "Bade Hain Shohrat Tumhara"
| rowspan=2| Mohammed Rafi
|-
| "Jinke Paad Haathi Ghoda"
|-
! Rowspan=2| ''[[Do Bachche Dus Haath]]''
|"Mar Gai Mai To Haye Rabba"
| rowspan=2| Sonik–Omi
| rowspan=2| Verma Malik
| rowspan=2| solo
|-
| "Chal Laga Le Sutta"
|-
!''[[Do Gaz Zameen Ke Neeche]]''<ref>{{Cite web|url=http://muvyz.com/moviepage/bw399840/songs/#|title = Do Gaz Zameen Ke Neeche (1972) | Hindi Movie Songs - Bollywood MuVyz}}</ref>
| "Pee Ke Aaye Gharwa Bedardi"
| Sapan–Jagmohan
| Naqsh Lyallpuri
| solo
|-
! Rowspan=4| ''[[Do Yaar]]''
| "Ni Loot Laye Aye Goriye"
| rowspan=4| Sonik–Omi
| rowspan=4| Verma Malik
| Manna Dey, Mohammed Rafi
|-
| "Kajre Ki Dhar Hai Katar"
| rowspan=3| solo
|-
| "Mita Kar Har Tamannaa Aaj"
|-
| "Auro Ki Khushi Me Khush Rah Kar"
|-
! Rowspan=4| ''[[Doctor X (1972 film)|Doctor X]]''
| "Luk Chup Jaana Ye Mera Hai Nishana"
| rowspan=4| Sonik–Omi
| rowspan=4| Indeevar
| rowspan=2| solo
|-
| "Ye Raat Bhi Hai Jawaan"
|-
| "Badi Khushi Hui Aap Se Milkar"
| Mohammed Rafi
|-
| "Sukh Dukh Me Rahenge Saath"
| Mahendra Kapoor
|-
! Rowspan=4| ''[[Ek Baar Muskura Do]]''
| "Chehare Se Zaraa Aanchal"
| rowspan=4| O. P. Nayyar
| rowspan=2| S. H. Bihari
| rowspan=2| Mukesh
|-
| "O O Ye Dil Le Kar Nazrana"
|-
| "Ek Bar Muskura Do"
| Shewan Rizvi
| rowspan=2| Kishore Kumar
|-
| "Kitne Atal The"
| Indeevar
|-
!''[[Ek Bechara]]''
| "Saagar Labon Se Laga Le"
| Laxmikant–Pyarelal
| Anand Bakshi
| solo
|-
! Rowspan=2| ''[[Ek Hasina Do Diwane]]''
| "Aaja Ya Aa Jane De Paas"
| rowspan=2| Kalyanji–Anandji
| Anjaan
| [[Kishore Kumar]]
|-
| "Prem Pujarin Maang Mein Bharke"
| Prakash Mehra
| solo
|-
! Rowspan=4| ''Ek Khilari Bawan Pattey''
| "Behrupiye Log Sare Firte Hai"
| rowspan=4| Sonik–Omi
| rowspan=4| Hasrat Jaipuri
| rowspan=4| solo
|-
| "Jab Pyaar Ka Mujh Mein Ujala"
|-
| "Jiyo Mere Ladle Tujhko Najar Na Lage"
|-
| "Le Le Ye Dil Ka Nagina"
|-
!''[[Gaaon Hamara Shaher Tumhara]]''
| "Kaise Kahun Kisse Kahun"
| Laxmikant–Pyarelal
| Anand Bakshi
| solo
|-
! Rowspan=5| ''[[Garam Masala]]''
| "Haay Re, Na Maaro"
| rowspan=5| R D Burman
| rowspan=5| Majrooh Sultanpuri
| rowpsan=3| solo
|-
| "Raja Bana Mera Chhaila"
|-
| "Tum Jaise Ko To Payal Mein"
|-
| "Mujhko Bacha Le Meri Maa"
| rowspan=2| Mohammed Rafi
|-
| "Chunri Dharke Kinare Gori Nadiya Nahaay"
|-
! Rowspan=2| ''[[Gomti Ke Kinare]]''
| "Aao Aao Jaane Jahan"
| rowspan=2| R D Burman
| rowspan=2| Majrooh Sultanpuri
| Kishore Kumar
|-
| "Jackpot Lag Gaya"
| Manna Dey
|-
! Rowspan=5| ''Gun Fighter Johnny''
| "Aaja O Mere Raja"
| rowspan=5| Adi Narayana Rao
| rowspan=5| Randheer
| rowspan=3| solo
|-
| "Chutney Jitni Pee Lo"
|-
| "Haath Chhudakar Jaanewale"
|-
| "Gore Sajan Teri Meri Lagan"
| rowspan=2| Mahendra Kapoor
|-
| "Teri Tundi Meri Mundi Todunga"
|-
! Rowspan=2| ''[[Haar Jeet (1972 film)|Haar Jeet]]''
| "Itne Din Tum Kahan Rahe"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Anand Bakshi
| Kishore Kumar
|-
| "Tu Badi Kismatwali Hai"
| Lata Mangeshkar
|-
! Rowspan=4| ''[[Hum Tum Aur Woh (1971 film)|Hum Tum Aur Woh]]''
| "So Baaton Ki Mujhko Tamanna"
| rowspan=4| Kalyanji–Anandji
| rowspan=4| Verma Malik
| Kishore Kumar
|-
| "Hai Re Hai, Jawani Aayi Aisi Nirdayi"
| rowspan=2| solo
|-
| "Husn Agar Zid Pe Aa Jaaye"
|-
| "Tu Mila Le Aaj Nigaho Ko Tu Mila Le Aaj Nigaho Ko"
| Vinod Khanna
|-
!''Hunterwali''
| "Hai Chor Kahin Ka"
| C. Satyam
| Madhukar Rajasthani
| solo
|-
! Rowspan=3| ''[[Jai Jwala]]''
| "Maa Tu Durga Tu Vaishnav"
| rowspan=3| Kamal Kant
| rowspan=3| Naqsh Lyallpuri
| rowspan=3| solo
|-
| "Mere Aangana Mein Jhumti Gaati"
|-
| "Rang Hu Nur Hu"
|-
! Rowspan=4| ''[[Jangal Mein Mangal]]''
| "Awara Bhanwro Sharm Karo"
| rowspan=4| Shankar–Jaikishan
| rowspan=4| Hasrat Jaipuri, Neeraj
| Usha Mangeshkar
|-
| "Dekhta Hai Kya Dekhta Hai Kya"
| rowspan=3| solo
|-
| "Meri Nazro Ne Kaise Kaise Kaam Kar Diye"
|-
| "Ada Aayi Jafa Aayi Gurur Aaya"
|-
! Rowspan=4| ''[[Jawani Diwani]]''
| "Nahi Nahi, Abhi Nahi"
| rowspan=4| R D Burman
| rowspan=4| Anand Bakshi
| rowspan=3| Kishore Kumar
|-
| "Jaanejaan, Dhoondhta Phir Raha"
|-
| "Agar Saaz Chheda, Taraane Banenge"
|-
| "Haye Tauba"
| solo
|-
!''Joru Ka Ghulam''
| "Mera Chain Khoya Hua Hai"
| Kalyanji–Anandji
| Anand Bakshi
| Kishore Kumar
|-
! Rowspan=1| ''Kanch Aur Heera''
| "Ek Kadwi Ej Meethi"
| colspan=2| Ravindra Jain
| rowspan=3| solo
|-
! Rowspan=2| ''Kaun Sachcha Kaun Jhootha''
| "Saawan Hai Kaisa Mera"
| rowspan=2| C. Satyam
| rowspan=2| Keval
|-
| "Dekho Jawani Chum Chum Naache"
|-
! Rowspan=3| ''Kundan''
| "Aa Gaya Hai Panchi"
| rowspan=3| Ganesh
| rowspan=3| Majrooh Sultanpuri
| rowspan=2| solo
|-
| "Uthne De Parda Chalne De Teer"
|-
| "Haatho Me Bottol"
| Usha Mangeshkar
|-
! Rowspan=4| ''[[Lal Patthar]]''
| "Re Man Sur Mein Gaa"
| rowspan=4| Shankar–Jaikishan
| rowspan=3| Neeraj
| Manna Dey
|-
| "Phoolon Se Meri Sej Sajao"
| rowspan=3| solo
|-
| "Sooni Sooni Saans Ki Sitaar Par"
|-
| "Aaja, Dikhaaon Tujhe Jannat Ki Shaam"
| Hasrat Jaipuri
|-
!''[[Lalkaar]]''
| "Maine Kahan Na Na"
| Kalyanji–Anandji
| Kulwant Jani
| solo
|-
! Rowspan=3| ''Mangetar''
| "Ye Dil Bhi Tera Ye Jan Bhi Teri"
| rowspan=3| Sudhir Sen
| rowspan=3| Kaifi Azmi
| rowspan=2| solo
|-
| "Ham Sharabi Sab Sharabi"
|-
| "Teri Laila Banke Teri Heer Banke"
| Mohammed Rafi, Usha Mangeshkar
|-
! Rowspan=4| ''Mehmil''
| "Kitna Hai Suna Suna" (duet)
| rowspan=4| Sonik–Omi
| rowspan=2| Kafil Azar
| rowspan=2| Mohammed Rafi
|-
| "Meri Jaan Hai Sona"
|-
| "Humse Milna Thik Nahi"
| rowspan=2| Qamar Jalalabadi
| rowspan=2| solo
|-
| "Kash Main Ladki Hota"
|-
!''[[Mere Jeevan Saathi (1972 film)|Mere Jeevan Saathi]]''
| "Aao Na, Gale Lagao Na"
| R D Burman
| Majrooh Sultanpuri
| solo
|-
! Rowspan=2| ''[[Milap]]''
| "Bajariya Ke Beech"
| rowspan=2| Brij Bhushan
| rowspan=2| Naqsh Lyallpuri
| rowspan=2| solo
|-
| "Kehne Ka Raaz Hai"
|-
!''[[Mome Ki Gudiya]]''
| "Nainon Ki Gaadi Chali"
| Laxmikant–Pyarelal
| Anand Bakshi
| solo
|-
!''Naag Panchami''
| "Sajne Do Aangna, Rachne Do Mehndi"
| Ravi
| Indeevar
| solo
|-
! Rowspan=2| ''[[Parchhaiyan (film)|Parchhaiyan]]''
| "O Garam Garam Kaya, Thandi Thandi Lehar"
| rowspan=2| R D Burman
| rowspan=2| Majrooh Sultanpuri
| solo
|-
| "Sanson Mein Kabhi, Dil Mein Kabhi"
| Mohammed Rafi
|-
!''[[Parichay (film)|Parichay]]''
| "Sare Ke Sare Gama Ko Lekar Gaate Chale"
| R D Burman
| Gulzar
| Kishore Kumar
|-
! Rowspan=5| ''Pistolwali''
| "Kya Hua Kya Hua Dil Ko"
| rowspan=5| C. Satyam
| rowspan=5| Mohanlal Kaul
| rowspan=5| solo
|-
| "Kaisa Hai Gham Tere Saath Hardum"
|-
| "Hoga So Hoga Re Aisa Kyun Dikhta"
|-
| "Hey Udti Si Chidiya"
|-
| "Hai Maa Ladi Hai"
|-
! Rowspan=3| ''Putlibai''
| "Babu Chhedo Na"
| rowspan=3| Jaikumar Paarte
| rowspan=3| Anjaan
| rowspan=2| solo
|-
| "Kaise Besharm Aashiq Hai"
|-
| "Mere Meet Bata Tujhe Mujhse Kab Pyaar Hua"
| Kishore Kumar
|-
! Rowspan=4| ''Pyar Diwana''
| "Ab Mai Jaanu"
| rowspan=4| Lala Sattar
| rowspan=4| Asad Bhopali
| Kishore Kumar
|-
| "Haye Mere Allah Yeh Kya Baat Huyi"
| Usha Mangeshkar
|-
| "Ye Zindagi Bhi Kya Hai"
| rowspan=2| solo
|-
|"Mera Saiyan Bada Albela"
|-
! Rowspan=2| ''[[Raampur Ka Lakshman]]''
| "Kahe Apnon Ka Kaam Nahi"
| rowspan=2| R D Burman
| rowspan=2| Majrooh Sultanpuri
| Kishore Kumar
|-
| "Sanwla Rang Hai Mera"
| solo
|-
! Rowspan=4| ''[[Raaste Kaa Patthar]]''
| "Main Hardam Kisi Ko Dhundta Hoon"
| rowspan=4| Laxmikant–Pyarelal
| Rowspan=4| Anand Bakshi
| rowspan=2| Mukesh
|-
| "Ib Tum Paas Na Aana, Door Hi Rehna"
|-
| "Mujhse Kahan Tu Bachke Jaayega"
| rowspan=2| solo
|-
| "Main Sharab Bechti Hoon"
|-
! Rowspan=7| ''[[Rakhi Aur Hathkadi]]''
| "Achhi Nahin Sanam Dillagi Dil-E-Bekarar Se"
| rowspan=11| R D Burman
| rowspan=11| Majrooh Sultanpuri
| rowspan=2| [[Kishore Kumar]]
|-
| "Tum To Kya Ho Ji, Tum Ho Meri Chhaya"
|-
| "Tere Milan Ko Kaise Chalun"
| rowspan=8| solo
|-
| "Jeeye Tumharo Lalna"
|-
| "Aaja Aaja Sajan" (Part 1)
|-
| "Aaja Aaja Sajan" (Part 2)
|-
| "Bahiya Dharke Lipta"
|-
! Rowspan=4| ''[[Rani Mera Naam]]''
| "Andhera Andhera"
|-
| "Tum Bhi Jhuthe"
|-
| "Lap Jhap Kahan Jate Ho Jani"
|-
| "Sare Jag Se Achha Apna Pyara Hindustan"
| Manna Dey
|-
! Rowspan=6| ''Return of Johnny''
| "Oh My Lovely Darling"
| rowspan=6| N. Dutta
| rowspan=6| S. R. Saaz
| rowspan=2| Mohammed Rafi
|-
| "Tumko Mere Naina Chume"
|-
| "O Balma Dil Tujhpe Hai Qurbaan"
|rowspan=4| solo
|-
| "Mere Sapnon Mein Aaye Jo"
|-
| "Maan Jaa Are Buddhu Jaan Jaa"
|-
| "Hello Anadi Bhole Babu"
|-
!''[[Rivaaj]]''
| "Tujh Mein Hoon Main, Mujh Mein Hain Tu"
| Shankar–Jaikishan
| S. H. Bihari
| Mohammed Rafi
|-
! Rowspan=2| ''[[Rut Rangeeli Ayee]]''
| "Ek Zara Sa Kaam Karo"
| rowspan=2| Ratandeep–Hemraj
| Tajdar Taj
| Kishore Kumar
|-
| "Shola Hoon Jawaan"
| Hasrat Jaipuri
| solo
|-
!''Samaanta''
| "Main Toh Chup Hi Rahungi"
| Nitin–Mangesh
| Qamar Jalalabadi
| solo
|-
! Rowspan=2| ''[[Samadhi (1972 film)|Samadhi]]''
| "O Yaara Yaara"
| rowspan=2| R D Burman
| rowspan=2| Majrooh Sultanpuri
| rowspan=2| solo
|-
| "Jab Tak Rahe"
|-
!''[[Savera]]''
| "Jam Jam Ke Naach Babua"
| R D Burman
| Majrooh Sultanpuri
| solo
|-
! Rowspan=5| ''[[Sazaa (1972 film)|Sazaa]]''
| "Hum Hai Teen Tum Ho Chaar"
| rowspan=5| Sonik–Omi
| rowspan=5| Verma Malik
| Usha Mangeshkar, Minoo Purushottam
|-
| "Beech Wale Saiyaa Se Ladh Gayi Najariya"
| rowspan=2| Mohammed Rafi
|-
| "O Roop Ki Raani Dekh Phul Woh Kali"
|-
| "Ye Hai Husn Bhi Hai Ek Maikhana"
| solo
|-
| "Naam Mera Hai Banto Jatti"
| Mohammed Rafi, Manna Dey, Minoo Purushottam
|-
! Rowspan=2| ''[[Seeta Aur Geeta]]''
| "O Saathi Chal"
| rowspan=2| R D Burman
| rowspan=2| Anand Bakshi
| Kishore Kumar
|-
| "Are Zindagi Hai Khel"
| Manna Dey
|-
! Rowspan=2| ''[[Shaher Se Door]]''
| "Mere Pyar Ka Aaj Mahurat Hai"
| rowspan=2| Sonik–Omi
| rowspan=2| Verma Malik
| Mohammed Rafi
|-
| "Aankhon Ne Kiya Ishara"
| solo
|-
!rowspan=2| ''Shararat''
| "Kal Raat Sapne Mein Aaye The Tum"
| rowspan=2| Ganesh
| Asad Bhopali
| rowspan=2| solo
|-
| "Chilman Ka Gir Jaana Allah Allah"
| Hasrat Jaipuri
|-
! ''Sub Ka Sathi''
| "Dil Toh Dil Hai"
| Kalyanji–Anandji
| Rajendra Krishan
| Kamal Barot
|-
! ''[[Subah-O-Shaam]]''
| "Teri Meri Meri Teri Nazar"
| Laxmikant-Pyarelal
| Anand Bakshi
| Kishore Kumaar
|-
! Rowspan=4| ''[[Sultana Daku (1972 film)|Sultana Daku]]''
| "Aake Apni Suratiya Dikhaya Jaya Karo"
| rowspan=4| Madan Mohan
| rowspan=4| Kaifi Azmi
| rowspan=3| solo
|-
| "Bhor Hote Baalam Chale Jayenge Mai Ro Ro Marungi"
|-
| "Tune Dil Meraa Churaya Hai Bhari Mehfil Mein"
|-
| "Humko Bhi Munna Dila De Upar Waale"
| Mohammed Rafi
|-
! Rowspan=2| ''[[Tangewala]]''
| "Do Diwane Aaye"
| rowspan=2| Naushad
| rowspan=2| Majrooh Sultanpuri
| rowspan=2| Mohammed Rafi
|-
| "Aisa Phanda Mare Gori"
|-
! Rowspan=2| ''[[Tanhaai]]''
| "Karishma Dekho Nazara Dekho"
| rowspan=2| Usha Khanna
| Usha Khanna
| rowspan=2| solo
|-
| "La La La Ae Mister Edher Aao"
| Asad Bhopali
|-
!''[[Wafaa (film)|Wafaa]]''
| "Hum Sab Mastane Hippie"
| Laxmikant–Pyarelal
| Rajendra Krishan
| Kishore Kumar
|-
!''[[Yaar Mera]]''
| "Husnwalon Ke Panje Mein Aa"
| Shankar–Jaikishan
| S. H. Bihari
| solo
|-
! Rowspan=3| ''[[Zameen Aasman]]''
| "Hum Tum Chale"
| rowspan=3| Kishore Kumar
| Anand Bakshi
| Kishore Kumar
|-
| "Kisne Yaha Kisko Jaana"
| rowspan=2| Indeevar
| rowspan=2| solo
|-
| "Ek Raat Ki Hai Baat, Main Soyi Thi Akeli"
|}
=== 1973 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! Rowspan=2| ''[[Aaj Ki Taaza Khabar]]''
| "Khilta Hua Shabab Hai"
| rowspan=2| Shankar–Jaikishan
| rowspan=2| Hasrat Jaipuri
| rowspan=2| solo
|-
| "Happy Birthday To Pinky"
|-
! Rowspan=4| ''[[Aangan (1973 film)|Aangan]]''
| "Madira Hi Madira Tere Badan Mein"
| rowspan=4| Sonik–Omi
| rowspan=4| Indeevar
| Mukesh
|-
| "Holi Hai"
| Manna Dey
|-
| "Khatrey Jo Uthhaeyga"
| solo
|-
| "Makhan Se Bhi Chikna Badan"
| Chandrani Mukherjee
|-
! Rowspan=3| ''[[Agni Rekha]]''
| "Hawaen Payal Baja Rahi Hain"
| rowspan=3| Kalyanji–Anandji
| rowspan=3| Kavi Pradeep
| rowspan=3| solo
|-
| "Jan-E-Man Jan-E-Jan"
|-
| "Lut Gaya Hai Kiska Dil"
|-
! rowspan=3| ''[[Anamika (1973 film)|Anamika]]''
| "Lago Na Maaro Ise"
| rowspan=3| R D Burman
| rowspan=3| Majrooh Sultanpuri
| rowspan=3| solo
|-
| "Aaj Ki Raat Koi Aane Ko Hai"
|-
| "Jau To Kaha Jau Sab Kuch Yahi Hai"
|-
!rowspan=3| ''[[Anhonee (1973 film)|Anhonee]]''<ref>{{Cite web|url=https://m.hindigeetmala.net/movie/anhonee.htm|title=Anhonee : Lyrics and video of Songs from the Movie Anhonee (1952)|website=HindiGeetMala}}</ref>
| "Maine Honthon Pe Lagayi Toh"
| rowspan=5| Laxmikant–Pyarelal
| rowspan=3| Verma Malik
| rowspan=2| solo
|-
| "Balma Hamaar Motor Car Leke Aayo Re"
|-
| "Main To Ek Pagal"
| Kishore Kumar
|-
! Rowspan=2| ''[[Anokhi Ada (1973 film)|Anokhi Ada]]''
| "Jawaani Tera Bolbala, Budhape Tera Munh Kaala"
| rowspan=2| Majrooh Sultanpuri
| [[Manna Dey]]
|-
| "Gum Gayi, Gum Gayi"
| solo
|-
! Rowspan=4| ''[[Bada Kabutar]]''
| "Haye Re Haye Re, Yeh Dil Mera"
| rowspan=4| R D Burman
| rowspan=4| Yogesh
| Kishore Kumar
|-
| "Chanda Mama Bole"
| rowspan=3| solo
|-
| "Mubarak Ho Yeh Raat Jawan"
|-
| "Raaz Ki Ek Baat Hai"
|-
!rowspan=1| ''[[Banarasi Babu (1973 film)|Banarasi Babu]]''
| "Aap Yahan Se Jaane Ka"
| rowspan=1| Kalyanji-Anandji
| rowspan=1| Rajendra Krishan
| rowspan=1| Kishore Kumar
|-
!rowspan=2| ''[[Bandhe Haath]]''
| "O Majhi Re, Jayen Kahan"
| rowspan=2| R D Burman
| rowspan=3| Majrooh Sultanpuri
| solo
|-
| "Dil To Lai Gawa, Ab Ka Hoga Re"
| [[R D Burman]], [[Manna Dey]], [[Mahendra Kapoor]]
|-
!''[[Barkha Bahar]]''
| "Jalla De Tu Hi Koi Aag"
| Laxmikant–Pyarelal
| solo
|-
! Rowspan=4| ''[[Bindiya Aur Bandook]]''
| "Chhori Loot Gayi Re"
| rowspan=4| Sonik–Omi
| rowspan=4| Gulshan Bawra
| rowspan=4| solo
|-
| "Nazariya Jhuka Ke Marungi"
|-
| "Bindiya Lagaungi"
|-
| "Kela Aane Do Kele Aane Ke"
|-
!rowspan=2| ''[[Chaalak]]''
| "Piye Jaa Jiye Jaa"
| rowspan=2| Ganesh
| rowspan=2| Hasrat Jaipuri
| rowspan=2| Kishore Kumar
|-
| "Dil Ka Nazrana Le"
|-
!''Chhalia''
| "O Jaane Man"
| R D Burman
| Rajendra Krishan
| Kishore Kumar
|-
! rowspan=5| ''[[Chhupa Rustam]]''
| "Jaloon Main, Jaloon Main"
| rowspan=5| S. D. Burman
| rowspan=2| Neeraj
| solo
|-
| "Dheere Se Jana Khatiyan Mein"
| [[Kishore Kumar]]
|-
| "Bolo Kya Humko Doge, Poochho Kya Humse Loge"
| rowspan=3| Vijay Anand
|-
| "Bante Sang Sang, Mitte Sang Sang"
|-
| "Main Hoon Chhuee Muee"
| solo
|-
! Rowspan=2| ''[[Chhote Sarkar (1974 film)|Chhote Sarkar]]''
| "O Jhuke Jhuke Nainonwali"
| rowspan=6| Shankar–Jaikishan
| rowspan=2| Rajendra Krishan
| Mohammed Rafi
|-
| "Roz Roz Kya Peena Ji"
| solo
|-
! Rowspan=2| ''Chori Chori''
| "Hamse Kar Le Dosti, Le Thodi Si Aur Pee"
| rowspan=2| Gulshan Bawra
| towspan=2| solo
|-
| "Nikhar Aa Raha Hai, Khumar Aa Raha Hai"
|-
! Rowspan=2| ''[[Daman Aur Aag]]''
| "Thirka Badan Toh Geeton Ke"
| rowspan=2| Hasrat Jaipuri
| Lata Mangeshkar
|-
| "Muskurati Huyi Ek Husn Ki Tasveer Ho Tum"
| Mohammed Rafi
|-
!rowspan=3| ''[[Dharma (1973 film)|Dharma]]''<ref>{{Cite web|url=https://m.hindigeetmala.net/movie/dharma.htm|title=Dharma : Lyrics and video of Songs from the Movie Dharma (1973)|website=HindiGeetMala}}</ref>
| "Maine Teri Gunehgaar Hoon"
| rowspan=3| Sonik–Omi
| rowspan=3| Verma Malik
| rowspan=2| Mohammed Rafi
|-
| "Raaz Ki Baat Keh Du To Jane Mehfil Me Phir Kya Ho"
|-
| "Aur Saqi Jo Kal Ko Hai Bachi"
| Omi
|-
! Rowspan=3| ''[[Dhund (1973 film)|Dhund]]''
| "Uljhan Sulajhe Na"
| rowspan=3| Ravi
| rowspan=3| Sahir Ludhianvi
| solo
|-
| "Jo Yaha Tha Wo Wahan"
| Usha Mangeshkar
|-
| "Jubna Se Chunariya"
| Manna Dey
|-
! Rowspan=3| ''[[Do Phool]]''
| "Maaf Karo Haa Maaf Karo" (version 1)
| rowspan=8| R D Burman
| rowspan=3| Majrooh Sultanpuri
| rowspan=2| Kishore Kumar, Usha Mangeshkar, Mehmood
|-
| "Maaf Karo Haa Maaf Karo" (version 2)
|-
| "Muthu Kodi Kawari Hadaa"
| Mehmood
|-
!rowspan=2| ''[[Do Phool]]''
| "Maaf Karo O Baba"
| rowspan=2| Majrooh Sultanpuri
| rowspan=2| Kishore Kumar, Usha Mangeshkar, Manna Dey
|-
| "Maaf Karo O Baba" (Part 2)
|-
!rowspan=3| ''[[Double Cross (1972 film)|Double Cross]]''
| "Aiyo Aiyo Keh Do"
|rowspan=3| Majrooh Sultanpuri
|rowspan=3|Kishore Kumar
|-
| "Jeevan Bhar Ke Loye"
|-
| "Maine Tumko Chaha Pehli Baar"
|-
!''[[Ek Kunwari Ek Kunwara]]''
| "Pehli Baar Pehli Haar Hui"
| Kalyanji-Anandji
| Prakash Mehra
| Kishore Kumar
|-
! Rowspan=2| ''[[Ek Mutthi Aasmaan]]''
| "Baat Baat Hai Ek Raat Ki"
| rowspan=2| Madan Mohan
| rowspan=2| Indeevar
| rowspan=2| solo
|-
| "Tu Tu Hai Qaatil, Tera Bachna Hai Mushkil"
|-
! Rowspan=2| ''Ek Nao Do Kinare''
| "Yeh Sha Hai Dhuan Dhuan"
|rowspan=2| Brij Bhushan Sahni
|rowspan=2| Naqsh Lyallpuri
|rowspan=2| solo
|-
| "Main Haari Tose Sajna Naina Milake"
|-
!''Ek Nari Do Roop''
| "Tum Samjho To Achcha Hai"
| Ganesh
| Naqsh Lyallpuri
| Kishore Kumar
|-
! Rowspan=2| ''[[Gaai Aur Gori]]''
| "Raja Meri Matki Ko"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Anand Bakshi
| rowspan=2| solo
|-
| "Main Teri Nigahon Se"
|-
! Rowspan=4| ''[[Gehri Chaal]]''
| "Bada Pyara Lage Tu"
| rowspan=4| Laxmikant–Pyarelal
| rowspan=6| Rajendra Krishan
| Rowspan=3| solo
|-
| "Sham Bheegi Bheegi"
|-
| "Mara Vade Ne Tere Aise"
|-
| "Jaipur Ki Choli Mangwa De Re Saiyan"
| Kishore Kumar
|-
! Rowspan=2| ''[[Ghulam Begam Badshah]]''
| "Raste Raste Janewali, Lehrake Lat Kali Kali"
| rowspan=2| Kalyanji–Anandji
| [[Kishore Kumar]]
|-
| "Kaahe Ko Kali Se Main"
| solo
|-
! Rowspan=4| ''Guru Aur Chela''
| "Yeh Surkhiya Ye Laaliya"
| rowspan=4| C. Arjun
| rowspan=2| Verma Malik
| Mohammed Rafi, Ghulam Mohammad
|-
| "Main Jidhar Jidhar Jaao Ki Dilbar Naye Naye"
|solo
|-
| "Sadke Tera Roop Salauna"
| Dev Kohli
| Usha Mangeshkar
|-
| "Yeh Raate Sajeeli Nashili Jawaan"
| Asad Bhopali
| solo
|-
!''Haathi Ke Daant''
| "Man Ka Mere Tan Ka Mere Singaar Tum Hi Ho"
| Ravindra Jain
| Kapil Kumar
| solo
|-
!''[[Hanste Zakhm]]''
| "Gali Gali Mein Kiya Re Badnaam"
| Madan Mohan
| Kaifi Azmi
| solo
|-
!''[[Heera (film)|Heera]]''
| "Ek Chhokroya Beech Bajariya"
| Kalyanji-Anandji
| Anjaan
| Kishore Kumar, Usha Khanna, Mukri
|-
!rowspan=1| ''[[Heera Panna]]''
| "Ek Paheli Hai Tu"
| rowspan=1| R D Burman
| rowspan=1| Anand Bakshi
| Kishore Kumar
|-
! Rowspan=3| ''[[Hifazat (1973 film)|Hifazat]]''
| "Mere Hamrahi, Mere Pyar"
| Rowspan=3| R D Burman
| rowspan=3| Majrooh Sultanpuri
| rowspan=3| solo
|-
| "Aiya Habbi, Aiya Habbi"
|-
| "Yeh Mastani Dagar"
|-
!rowspan=3| ''[[Honeymoon (1973 film)|Honeymoon]]''
| "Do Dil Mile"
| rowspan=3| Usha Khanna
| rowspan=3| Yogesh
| rowspan=3|Kishore Kumar
|-
| "Jeevan Hai Ek Sapna"
|-
| "Mere Pyase Man Ki Bahar"
|-
!rowspan=2| ''Hum Junglee Hain''
| "Na Mehndi Racha Saki"
| Rowspan=2| Vedpal Sharma
| Rowspan=2| Vedpal Sharma
| rowspan=2| solo
|-
| "Main Mehndi Rachaoongi"
|-
! Rowspan=2| ''[[Hum Sub Chor Hain (1973 film)|Hum Sub Chor Hain]]''
| "Aaja Mere Saathi"
| Rowspan=2| Usha Khanna
| Indeevar
| rowspan=2| solo
|-
| "Dekhoon Kisko Chahoon Kisko"
| Asad Bhopali
|-
! Rowspan=2| ''Insaf''
| "Tu Kathputli Naach Mere Hath Teri Dor"
| rowspan=2| Laxmikant–Pyarelal
| Rowspan=2| Anand Bakshi
| solo
|-
| "Mera Naam Mai Tera Naam Tu"
| Shailendra Singh
|-
! Rowspan=4| ''Jai Hanuman''
| "Tum Kahan Ho Pran Pyare"
| rowspan=4| Narayan Dutt
| rowspan=4| Bharat Vyas
| rowspn=3| solo
|-
| "Bole Bole Re Are Bol Brhmachari"
|-
| "Aaya Aaya Re Aaya Aaya Basant Aaya"
|-
| "Re Re Bahaar Aayi"
| Mahendra Kapoor
|-
! Rowspan=2| ''[[Jaise Ko Taisa]]''
| "Kaun Si Hai Woh Cheez Jo Yahan Nahin Milti"
| rowspan=2| R D Burman
| Rowspan=2| Anand Bakshi
| rowspan=2| [[Kishore Kumar]]
|-
| "Bhaiya Re, Bhaiya Re, Paap Ki Naiya Re"
|-
!''[[Jalte Badan]]''
| "Aag Se Aag Bujha Pe, Ghan Na Kar"
| Laxmikant–Pyarelal
| Maya Govind
| Lata Mangeshkar
|-
! Rowspan=2| ''Jeevan Sukh''
| "Meri Paayal Kahin Na Kuchh Keh De"
| Sapan–Jagmohan
| Naqsh Lyallpuri
| solo
|-
| "Do Nigaahein Teri, Do Nigaahein Meri"
| Kishore Kumar
|-
!''[[Jheel Ke Us Paar]]''
| "Haye Bichhua Das Gayo Re"
| R D Burman
| Anand Bakshi
| solo
|-
! Rowspan=4| ''[[Joshila]]''
| "Sharma Na Yu Ghabara Na"
| rowspan=4| R D Burman
| rowspan=4| Sahir Ludhianvi
| Dev Anand
|-
| "Dil Me Jo Baate Hain"
| Kishore Kumar
|-
| "Sona Rupa Layo Re"
| rowspan=2| solo
|-
| "Kanp Rahi Main Abhi Zara Tham Janam"
|-
! Rowspan=2| ''[[Jwaar Bhata]]''
| "Hothon Pe Tera Naam"
| Rowspan=2| Laxmikant–Pyarelal
| rowspan=4| Rajendra Krishan
| rowspan=2| solo
|-
| "Peene Ki Der Hai Na Pilane Ki"
|-
! Rowspan=2| ''[[Kahani Kismat Ki]]''
| "Kab Tak Na Dogi Dil"
| rowspan=5| Kalyanji–Anandji
| rowspan=2| solo
|-
| "Tu Yaar Mera, Dildaar Mera"
|-
! Rowspan=3| ''[[Kashmakash (1973 film)|Kashmakash]]''
| "Kashmakash Chhod De"
| Maya Govind
| rowspan=2| solo
|-
| "Pyar Tujhe Aisa Karungi"
| Indeevar
|-
| "Mere Peechhe Hai Deewane, Aage Aage Mastane"
| Verma Malik
| Shatrughan Sinha
|-
! Rowspan=4| ''[[Keemat (1973 film)|Keemat]]''
| "Rang Roop Ka Bazaar Hai"
| rowspan=4| Laxmikant–Pyarelal
| rowspan=4| Anand Bakshi
| rowpsan=4| solo
|-
| "Main To Pani Piya Tha"
|-
| "Dil Rang Loon Kaunse Rang Mein"
|-
| "Maine Poochha Meri Shaadi Kab Hogi"
|-
! Rowspan=2| ''[[Khoon Khoon]]''
| "Kitni Thandi Pawan Aaja"
| rowspan=2| Vijay Singh
| rowspan=2| Hasrat Jaipuri
| Tirath Singh
|-
| "Meri Aankho Mein Masti Hai"
| Vijay Singh
|-
! Rowspan=2| ''[[Kisan Aur Bhagwan]]''
| "Ban Gayi Baat Sajna"
| rowspan=2| Prem Dhawan
| Rowspan=2| Kavi Pradeep
| [[Kishore Kumar]]
|-
| "Badi Door Se Ho Ji"
| solo
|-
! Rowspan=5| ''Kora Aanchal''
| "Aap Agar Mujhko Ijazat De"
| rowspan=5| Roshanlal Khatri
| rowspan=1| Shadab
| Mohammed Rafi
|-
| "Kaha Se Kaha Aa Gai Zindagani"
| Paras Budhwani
| Rowspan=4| solo
|-
| "Mere Dil Se Khelo"
| Gauhar Kanpuri
|-
| "Rona Mere Naseeb Hai"
| Somesh Joshi
|-
| "Umeedon Ke Khilone"
| Shadab
|-
! Rowspan=2| ''[[Kunwara Badan]]''
| "Kal Ki Na Soch"
| rowspan=2| Ghanshyam
| rowspan=2| Rajendra Krishan
| rowspan=2| solo
|-
| "Haathon Mein Mehndi Rachai Jayegi"
|-
!rowspan=3| ''[[Loafer (1973 film)|Loafer]]''<ref>{{Cite web|url=https://m.hindigeetmala.net/movie/loafer.htm|title=Loafer : Lyrics and video of Songs from the Movie Loafer (1973)|website=HindiGeetMala}}</ref>
| "Kahan Hai Woh Deewana"
| rowspan=3| Laxmikant–Pyarelal
| rowspan=3| Anand Bakshi
| rowspan=3| solo
|-
| "Motiyon Ki Ladi Hoon Main"
|-
| "Koi Shaheri Babu"
|-
! Rowspan=4| ''[[Maha Sati Savitri]]''
| "Chupke Chupke Chupchap"
| rowspan=4| Avinash Vyas
| rowspan=4| Kavi Pradeep
| [[Mahendra Kapoor]]
|-
| "Hansa Rana Na Jao Chod Ke"
| rowspan=3| solo
|-
| "Meri Dunia Badal Gayi Aaj Re"
|-
| "Naino Ki Kothari Saja Ke"
|-
! Rowspan=3| ''[[Mera Desh Mera Dharam]]''
| "Lakho Ussey Salaam"
| rowspan=3| Prem Dhawan
| rowspan=3| Prem Dhawan
| rowspan=2| solo
|-
| "Ruk Jaao O Jaani Ruk Jaao"
|-
| "Matwali Raftar Qayamat Payal Ki Jhankar"
| Usha Mangeshkar
|-
! Rowspan=3| ''[[Mera Shikaar]]''
| "Dil Ki Laagi Ko Koi Na Jaane"
| rowspan=3| Sajjad Hussain
| rowspan=3| Shakeel Nomani
| solo
|-
| "Teri Mehfil Mein Aaye Hain"
| rowspan=2| Mohammed Rafi, Usha Mangeshkar
|-
| "Teri Chaahat Mein Jiye"
|-
! ''Mere Gharib Nawaz''
| "Shikasta Saaz Hain"
| Kamal Rajasthani
| Mehboob Sarwar
| solo
|-
! Rowspan=3| ''Naag Mere Saathi''
| "Chhaliye Tum Chhaliye"
| rowspan=3| S. N. Tripathi
| rowspan=3| Bharat Vyas
| rowspan=3| solo
|-
| "Nilkanth Mahadev Ki Tumhe"
|-
| "Aaja Re Tu Aaja Re"
|-
! Rowspan=3| ''[[Nafrat]]''
| "Mere Yaar Dildaar, Jo Na Hota Tera Pyaar"
| rowspan=3| R D Burman
| rowspan=3| Majrooh Sultanpuri
| Kishore Kumar
|-
| "Dhalta Yeh Aanchal, Chadhti Jawaani"
| rowspan=2| solo
|-
| "Lo Mera Pyaar Le Lo"
|-
!''[[Nai Duniya Naye Log]]''
| "Mujhe Tere Baahon Mein Na Jaane Kya Milta Hai"
| Sapan–Jagmohan
| Naqsh Lyallpuri
| solo
|-
!''[[Naina (1973 film)|Naina]]''
| "Hone Laagi Hai Raat Jawaan"
| Shankar–Jaikishan
| Kaifi Azmi
| solo
|-
!''[[Namak Haraam]]''
| "Sooni Re Sejaria"
| R D Burman
| Anand Bakshi
| Usha Mangeshkar
|-
! Rowspan=2| ''[[Nanha Shikari]]''
| "Tu Meri Manzil, Main To Raahi Hoon Sanam"
| rowspan=2| Bappi Lahiri
| Gauhar Kanpuri
| Kishore Kumar
|-
| "Mushkil Jeena Hai Yahan"
| S. H. Bihari
| solo
|-
! Rowspan=2| ''[[Naya Nasha]]''
| "Mujhse Aisi Bhool Hui"
| rowspan=2| Sapan Chakraborty
| rowspan=2| Anand Bakshi
| rowspan=2| solo
|-
| "Kash Pe Kash Lagane De"
|-
!rowspan=3| ''[[Nirdosh (1973 film)|Nirdosh]]''<ref>{{Cite web|url=https://m.hindigeetmala.net/movie/nirdosh.htm|title=Nirdosh : Lyrics and video of Songs from the Movie Nirdosh (1941)|website=HindiGeetMala}}</ref>
| "Tujhe Pyaar Se Kya Maarun"
| rowspan=3| Laxmikant–Pyarelal
| rowspan=3| Asad Bhopali
| rowspan=2| solo
|-
| "Koi Mantar Maar De Aisa"
|-
| "Koi Pyaar Se Tohe Dekhe Sanwariya"
| Mohammed Rafi
|-
!''Not Available''
| "Chhumak Chhumak"
| Vasu Mano
| Anand Bakshi
| solo
|-
!''[[Phagun (1973 film)|Phagun]]''
| "Kab Maane O Dil Ke Mastaane"
| S. D. Burman
| Majrooh Sultanpuri
| Kishore Kumar
|-
! Rowspan=3| ''Pyar Ka Rishta''
| "Oye Nakh Nakh Nakhrewali"
| rowspan=3| Shankar–Jaikishan
| rowspan=3| Shakeel Badayuni
| Kishore Kumar
|-
| "Hay Hay Dukhi Jaaye Mori Kamariya"
| solo
|-
| "Mera Naam Hai Flory"
| Sharda
|-
! Rowspan=3| ''Pyasi Nadi''
| "Zaalim Ne Pila Di"
| rowspan=3| Ratandeep–Hemraj
| Mahendra Dalvi
| rowspan=3| solo
|-
| "Three Six Two Four"
| Gulshan Bawra
|-
| "Laakh Yugo Ka Ek Baras Ho"
| Tajdar Taj
|-
! ''[[Raja Rani (1973 film)|Raja Rani]]''
| "Jab Andhera Hota Hain"
| R D Burman
| Anand Bakshi
| Bhupinder Singh
|-
! Rowspan=3| ''[[Rani Aur Jani]]''
| "Hum Jo Mile Toh Sara Zamana Jale"
| rowspan=3| C. Satyam
| rowspan=3| Hasrat Jaipuri
| Kishore Kumar
|-
| "Mera Chehra Sunehara Gulaab Rasiya"
| solo
|-
| "Mubarak Ho Tumhe Pyaare"
| Usha Mangeshkar
|-
! Rowspan=3| ''[[Rickshawala (1973 film)|Rickshawala]]''
| " Phulo Ki Duniya Se"
| rowspan=3| R D Burman
| rowspan=3| Anand Bakshi
| Kishore Kumar
|-
| "Main Haseen Hu Mai Jawan Hoon"
| rowspan=2| solo
|-
| "Main Ghazab Ki Cheez Hoon"
|-
! Rowspan=2| ''Rocky Mera Naam''
| "Gham-e-Aashiqui Mein Hai Kya Maza"
| rowpsan=2| Sapan–Jagmohan
| rowspan=2| Naqsh Lyallpuri
| rowspan=2| solo
|-
| "Deewana Dil Hai Pyaar Ka"
|-
! Rowspan=2| ''[[Saudagar (1973 film)|Saudagar]]''
| "Kyun Laayo Saiyan Paan"
| rowspan=2| Ravindra Jain
| rowspan=2| Ravindra Jain
| rowspan=2| solo
|-
| "Sajna Hai Mujhe"
|-
! Rowspan=2| ''[[Shareef Badmaash]]''
| "Mohabbat Baazi Jitegi"
| rowspan=2| R D Burman
| rowspan=2| Anand Bakshi
| solo
|-
| "Neend Chura Ke Raaton Mein"
| Kishore Kumar
|-
! Rowspan=4| ''Sone Ke Haath''
| "Saheli Poochhun Ek Paheli"
| rowspan=4| Ravi
| rowspan=4| Rajendra Krishan
| Usha Khanna
|-
| "Kidher Ja Rahe Ho Kaha Ja Rahe Ho
| rowspan=3| solo
|-
| "Leilo Champa Chameli Gulab Leilo"
|-
| "Inse Milye Ye Yaaro Ke Yaar Bhi Hai"
|-
!''Sweekar''
| "Kahin Pyaar Ho Na Jaaye"
| Laxmikant–Pyarelal
| Anand Bakshi
| solo
|-
! Rowspan=4| ''[[Taxi Driver (1973 film)|Taxi Driver]]''
| "Khaa Kar Tune Paan"
| rowspan=4| O. P. Nayyar
| rowspan=4| Farooq Kaiser
| rowspan=2| Mohammed Rafi
|-
| "Teri Nili Nili Jacket"
|-
| "Balam Harjaiyi Ja Mai To"
| rowspan=2| solo
|-
| "Jinhe Ho Pyar Sanam"
|-
! Rowspan=4| ''Vishnu Puran''
| "O Maa Itni Toh Daya Kar De"
| rowspan=4| S. N. Tripathi
| rowspan=4| B. D. Mishra
| rowspan=2| solo
|-
| "O Vishnu, O Ramakrishna, O Sab Ke Ishwar"
|-
| "Tumhari Hoon, Mere Ho Tum"
| rowspan=2| Mohammed Rafi
|-
| "Tumhari Hoon, Mere Ho Tum"
|-
! rowspan=3| ''[[Woh Raat Wohi Awaaz]]''
| "Mera Man Bhatak Raha Deewana"
| rowspan=3| Sonik–Omi
| rowspan=3| Hasrat Jaipuri
| rowspan=2| solo
|-
| "Sochta Hai Kya"
|-
| "Aayi To Se Milne Deewana Dil Le Ke"
| Usha Khanna
|-
! Rowspan=5| ''[[Yaadon Ki Baraat]]''
| "Chura Liya Hai Tumne Jo Dil Ko"
| rowspan=5| R D Burman
| rowspan=5| Majrooh Sultanpuri
| Mohammed Rafi
|-
| "Aapke Kamare Me Koyee Rehata Hai"
| Kishore Kumar, R D Burman
|-
| "Dil Mil Gaye Ho To Hum Khil Gaye"
| rowspan=3| Kishore Kumar
|-
| "O Meri Soni, Meri Tamanna"
|-
| "Lekar Ham Deewana Dil"
|-
! Rowspan=4| ''[[Yauwan]]''
| "Kuch Chhaaye He Aa"
| rowspan=4| Sonik–Omi
| rowspan=4| Omkar Verma
| rowspan=4| solo
|-
| "Jalta Hai Yeh Tan"
|-
| "Yeh Reshmi Andhera Mit Jaane Ka"
|-
| "Bandariya Naach Dikhaye"
|-
! Rowspan=2| ''[[Zanjeer (1973 film)|Zanjeer]]''
| "Dil Jalon Ka Dil Jala Ke"
| rowspan=2| Kalyanji–Anandji
| rowspan=2| Gulshan Bawra
| rowspan=2| solo
|-
| "Chakku Chhuriyan Tez Kara Lo"
|-
|}
=== 1974 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! ''36 Ghante''
| "Jaane Aaj Kya Hua"
| Sapan Chakraborty
| Sahir Ludhianvi
| Kishore Kumar
|-
!''[[5 Rifles]]''
| "Malmal Mein Badan Mora Chamke"
| Kalyanji–Anandji
| Rajendra Krishan
| solo
|-
!''Aahat''
| "Raat Badi Nasheeli Hai"
| Chetan
| Kafil Azar
| solo
|-
! Rowspan=2| ''[[Aarop]]''
| "Sab Kuchh Mila Tu Na Mila"
| rowspan=2| Bhupen Hazarika
| rowspan=2| Maya Govind
| rowspan=2| solo
|-
| "Chale Aao Na Satao"
|-
!''[[Aashiana]]''
| "Pyaar Pykare Singaar Pukare"
| Hari–Arjun
| Yogesh
| Mahendra Kapoor
|-
!''[[Ajnabee (1974 film)|Ajnabee]]''
| "Satrah Baras Ki Chhokriyan"
| R D Burman
| Anand Bakshi
| solo
|-
!''Albeli''
| "Kaa Kari Kaa Kari, Pehle Pehle Pyaar Maa Tu Aankh Ladaayi"
| Kalyanji–Anandji
| Gulshan Bawra
| Manna Dey
|-
!rowspan=2| ''Alingan''
| "Chilam Ka Ek Dum"
|rowspan=2| Sapan–Jagmohan, Jaidev
|rowspan=2| Jan Nisar Akhtar
| solo
|-
| "Humare Dil Ko Tumne Dil Bana Diya"
| Mohammed Rafi
|-
! Rowspan=2| ''Ang Se Ang Laga Le''
| "Charno Me Tere Jo Aa Ke Gira"
| rowspan=2| Pradeep Roychowdhury
| rowspan=2| Naqsh Lyallpuri
| rowspan=2| solo
|-
| "Pyar Sajao Bahare Lootao"
|-
! rowspan=2| ''Archana''
| "Jab Hum hai Tere Saath, Toh Darne Ki Kya Baat"
|rowspan=2| Shankar–Jaikishan
| Indeevar
|rowspan=2| solo
|-
| "Jo Dil Mein Chubha"
| Hasrat Jaipuri
|-
!''[[Asliyat]]''
| "Armaan Se Khelte Hai, Toofan Se Khelte Hai"
| Madan Mohan
| Kaifi Azmi
| solo
|-
!''[[Avishkaar]]''
| "Naina Hain Pyaase Mere"
| Kanu Roy
| Kapil Kumar
| solo
|-
!''[[Azad Mohabbat]]''
| "Baat Ek Nazar Ek Baar Idhar Bhi Ho Jaaye"
| Laxmikant–Pyarelal
| Asad Bhopali
| solo
|-
! Rowspan=4| ''Badla''
| "Koi Chori Chori Chupke Chupke Mujhse Chupke"
| rowspan=4| Laxmikant–Pyarelal
| rowspan=4| Anand Bakshi
| Rowspan=3| solo
|-
| "It Happens Aisa Hota Hai"
|-
| "Jata Hai To Ja O Sanam, Nikla Bada Bepeer Tu"
|-
| "Jane Walo Idhar Dekho Khade Hai Hum Raste Mein"
| Minoo Purushottam
|-
!''[[Badhti Ka Naam Dadhi]]''
| "Bhole Re Saajan, Are Jaate Ho Kahan"
| Kishore Kumar
| Irshad
| Kishore Kumar
|-
! Rowspan=2| ''[[Balak Dhruv]]''
| "Naagan Hu Main Chandan Ban Ki"
| rowspan=2| Govind–Naresh
| rowspan=2| Madan Bharti
| rowspan=2| solo
|-
| "He Jag Ke Bhagwan Aao Aao Mujhe Apnao"
|-
! Rowspan=3| ''[[Bazaar Band Karo]]''
| "Nahin Chhodoge Kabhi Mera Saath"
| rowspan=3| Bappi Lahiri
| rowspan=2| Kulwant Jani
| [[Kishore Kumar]]
|-
| "Har Ek Dil Ko Humne"
| rowspan=2| solo
|-
| "Pyaasi Nigahon Me Sajan"
| Naqsh Lyallpuri
|-
!''[[Benaam (1974 film)|Benaam]]''
| "Aa Raat Jaati Hai"
| R D Burman
| Majrooh Sultanpuri
| Mohammed Rafi
|-
! ''[[Bidaai (film)|Bidaai]]''
| "Main Jaa Rahi Thi Lekin"
| Laxmikant–Pyarelal
| Anand Bakshi
| solo
|-
! Rowspan=2| ''Call Girl''
| "Hum Hai Jahan, Woh Pyaar Ki Mehki"
| rowspan=2| Sapan–Jagmohan
| rowspan=2| Naqsh Lyallpuri
| Kishore Kumar
|-
| "Dil Jale Toh Koi Aaya Kare"
| solo
|-
!rowspan=2| ''[[Charitraheen (film)|Charitraheen]]''
| "Daaga Beimaan Dai Gaya"
|rowspan=2| R D Burman
|rowspan=2| Anand Bakshi
|rowspan=2| solo
|-
| "Teri Meri Yaari Badi Purani"
|-
! Rowspan=3| ''[[Chattan Singh]]''
| "Mera Chimata Bole Chhanak Chhanak Chhan"
| rowspan=3| Kalyanji–Anandji
| rowspan=3| Verma Malik
| Mukesh
|-
| "Jab Koi Ladki, Jab Koi Ladki Baar Baar"
| Kishore Kumar
|-
| "Main Toh Nahi Jaana Sasural"
| solo
|-
! Rowspan=2| ''[[Chhote Sarkar (1974 film)|Chhote Sarkar]]''
| "O Jhuke Jhuke Nainonwali, Aaja Mere Paas"
| rowspan=2| Shankar–Jaikishan
| Rowspan=2| Rajendra Krishan
| [[Mohammed Rafi]]
|-
| "Kya Roz Roz Peena"
| solo
|-
! Rowspan=3| ''[[Chor Machaye Shor]]''
| "Paon Mein Dori, Dori Mein Ghunghroo"
| rowspan=3| Ravindra Jain
| rowspan=3| Ravindra Jain
| Mohammad Rafi
|-
| "Agre Se Ghaghro Manga De"
| solo
|-
| "Le Jayenge, Le Jayenge, Dilwale Dulhaniya Le Jayenge"
| Kishore Kumar
|-
! Rowspan=3| ''[[Chowkidar]]''
| "Thoda Sa Aitbaar Kijiye"
| rowspan=3| Madan Mohan
| rowspan=3| Rajendra Krishan
| rowspan=2| solo
|-
| "Aji Rehne Do Chanda Badli Mein"
|-
| "Zindagi Zindagi, Chhoti Ho Ya Lambi Ho"
| [[Mohammed Rafi]], [[Mukesh (singer)|Mukesh]]
|-
!''Dagdarbabu''
| "Jaagi Ho Sadguru"
| R D Burman
| Yogesh
| solo
|-
!rowspan=3| ''Dawat''
| "Tadap Tadap Ke Guzaari Hai Zindagi Humne"
| rowspan=3| Bipin–Babul
| rowspan=3| Naqsh Lyallpuri
| rowspan=2| solo
|-
| "Aa Zara Mere Paas"
|-
| "Aise Bhi Na Rootho Tum"
| Mukesh
|-
! Rowspan=4| ''[[Dhamkee]]''
| "Yaaro Mujhe Peene Do Peeke Behekne Do"
| rowspan=4| Ganesh
| rowspan=4| Asad Bhopali
| solo
|-
| "Kon Wafadaar Hai Kon Bewafa Hai"
| rowspan=2| Usha Mangeshkar
|-
| "Hum Safar Gham Na Kar"
|-
| "Chand Kya Hai"
| Kishore Kumar
|-
! Rowspan=5| ''[[Dil Diwana]]''
| "Kisi Se Dosti Karlo"
| rowspan=5| R D Burman
| rowspan=5| Anand Bakshi
| rowspan=3| Kishore Kumar
|-
| "Ja Re Jaa Bewafa, Nahi Tujhko Pata"
|-
| "Khan Chacha, Ye Ladki Mujhe Pyar Karti Hai"
|-
| "Main Ladki Hoon Tu Ladka"
| solo
|-
| "Mujhko Mohabbat Mein Dhokha"
| Kishore Kumar, Manna Dey
|-
!''[[Do Aankhen]]''
| "Babu Babu Dil Pe Nahin Kabu"
| Chitragupt
| Verma Malik
| solo
|-
! Rowspan=2| ''[[Do Chattane]]''
| "Jisne Dekha Wo Bola Ye Bijli"
| rowspan=2| Sonik–Omi
| rowspan=2| M G Hashmat
| solo
|-
| "Mud Yaar Mera Ghar Aaya"
| Minoo Purushottam
|-
! Rowspan=4| ''[[Do Nambar Ke Ameer]]''
| "Dil Kisi Ko Jo Diya Na Ho"
| rowspan=4| Sapan–Jagmohan
| rowspan=4| Indeevar
| [[Kishore Kumar]]
|-
| "Roop Ka Nasha Hai"
| rowspan=3| solo
|-
| "Insaniyat Ke Naam Pe Koi"
|-
| "Nashe Di Yeh Bandh Botalen"
|-
! Rowspan=2| ''[[Doosri Sita]]''
| "Aayi Re Aayi"
| rowspan=2| R D Burman
| rowspan=2| Gulzar
| rowspan=2| solo
|-
| "Tu Jahan Mile Mujhe"
|-
!''[[Duniya Ka Mela]]''
| "Dil Tod Ke Sadak Par"
| Laxmikant–Pyarelal
| Anand Bakshi
| solo
|-
!''Farebi''
| "Jab Suni Ho Gali, Khuli Jogi Khidki"
| Laxmikant–Pyarelal
| Verma Malik
| solo
|-
! ''Ganga''
| "Pyaar Se Koi dil Deta Hai"
| N. Dutta
| S H Bihari, Khalik, Aziz Kashmiri, Shad Fidayi
| Mohammed Rafi
|-
!''[[Geetaa Mera Naam]]''
| "Mujhe Maar Daalo"
| Laxmikant–Pyarelal
| Rajendra Krishan
| solo
|-
! Rowspan=2| ''[[Goonj (1974 film)|Goonj]]''
| "Kar Loongi Duja Koi"
| rowspan=2| R D Burman
| rowspan=2| Majrooh Sultanpuri
| Mohammed Rafi
|-
| "Re Mita De Tu Agar Mujhko Mitana Hai Re"
| solo
|-
! Rowspan=2| ''[[Hamrahi (1974 film)|Hamrahi]]''
| "Mehfil Mein Husn Mera"
| rowspan=2| Kalyanji–Anandji
| Hasrat Jaipuri
| rowspan=2| solo
|-
| "Saiyan Ne Baiyan Pakadke"
| Kulwant Jani
|-
! Rowspan=1| ''Hanuman Vijay''
| "Haan Keh De Toh Aaj Yeh Laaj Ka Aanchal Hata Doon"
| Ajay–Vishwanath
| Madan Bharti
| solo
|-
! Rowspan=4| ''[[Hawas (1974 film)|Hawas]]''<ref>{{cite web| title = Binaca Geetmala Annual List 1974| publisher = [[hindigeetmala.com]]| url =http://hindigeetmala.net/binaca_geetmala_1974.htm}}</ref>
| "Kal Raat Usne"
| rowspan=4| Usha Khanna
| rowspan=4| Sawan Kumar Tak
| rowspan=4| solo
|-
| "Aao Yaaron Gaao"
|-
| "Yeh Hawas Kya Hai"
|-
| "Apne Dil Mein Jagah"
|-
! Rowspan=4| ''[[Humshakal (1974 film)|Humshakal]]''
| "Hum Tum, Gumsum Raat Milan Ki"
| rowspan=4| R D Burman
| rowspan=4| Anand Bakshi
| rowspan=2| [[Kishore Kumar]]
|-
| "Main Tumko Doongi Saiyan Pyar Ki Nishani"
|-
| "Dekho Mujhe Dekho"
| rowspan=2| solo
|-
| "Udti Chidiya Udte Udte"
|-
!rowspan=1| ''Imaan''
| "Babuji Mujhe Maaf Karo"
| R D Burman
| Anand Bakshi
| solo
|-
! Rowspan=2| ''Imtihaan''
| "Bujha De Jal Gayi"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Majrooh Sultanpuri
| solo
|-
| "Dekho Idhar Bhi Jaane Tamanna"
| Usha Mangeshkar
|-
!''[[Insaaniyat]]''
|"Baat Bhi Kya Karoge Humse Nahin"
|rowspan=3| Shankar–Jaikishan
| Indeevar
| solo
|-
!rowspan=2| ''[[International Crook]]''
| "Pyaar Ki Mujhpe Kya Nazar Daali"
|rowspan=2| Aziz Kashmiri
|rowspan=2| Kishore Kumar
|-
| "Poochha Jo Pyaar Kya Hain"
|-
! Rowspan=5| ''[[Ishk Ishk Ishk]]''
| "Bheegi Bheegi Aankhen"
| rowspan=5| R D Burman
| rowspan=5| Anand Bakshi
| rowspan=3| Kishore Kumar
|-
| "Ishk Ishk Ishk"
|-
| "Tim Tim Chamka Jhilmil Taara"
|-
| "Vallah Kya Nazara Hai"
| Kishore Kumar, Poornima
|-
| "Kisi Na Kisi Se Toh Hogi Mohabbat"
| solo
|-
! Rowspan=4| ''Jab Andhera Hota Hai''
| "Zindagi Ka Maza Pyar Se Lijiye Ji"
| rowspan=4| Sapan Chakraborty
| rowspan=4| Gulshan Bawra
| solo
|-
| "Jaane Jaan Meri Kasam Tujhko"
|Bhupinder Singh
|-
| 'Hua Yun Pyar Jawan"
| Rowspan=2| Nitin Mukesh
|-
| "Jab Andhera Hota Hai"
|-
! Rowspan=1| ''Jai Radhekrishna''
| "Suna Tha Kanhaiya Ke Teri Bansuriya Hai Jadu Bhari"
| rowspan=1| Vasant Desai
| rowspan=1| Yogesh
| rowspan=1| solo
|-
! Rowspan=3| ''Jeevan Rekha''
| "Loot Gaya Hai Kis Ka Dil"
| rowspan=3| Summan Raj
| Dev Kohli
| Rowspan=3| solo
|-
| "Jaaneman Jaaneman"
| Kafil Azar
|-
| "Hawayen Paayal Baja Rahi Hai"
| Anjaan
|-
! Rowspan=2| ''[[Jeevan Sangram]]''
| "Aaj Ki Aaj Sunaaoon Yaaron Kal Ki Sunna Kal"
| rowspan=2| Kalyanji–Anandji
| Gulzar
| Mahendra Kapoor
|-
| "Main Tere Desh Ki Ladki Tu Mere Desh Ka Ladka"
| Indeevar
| Usha Mangeshkar
|-
! Rowspan=2| ''[[Jurm Aur Sazaa]]''
| "Bhari Mehfil Se Tujhe Na Utha Doon"
| rowspan=2| Laxmikant–Pyarelal
| Ram Bhardwaj
| [[Mohammed Rafi]]
|-
| "Khoobsurat Tu Sanam, Khoobsurat Main"
| [[Asad Bhopali]]
| [[Kishore Kumar]]
|-
! Rowspan=3| ''[[Kasauti]]''
| "Yeh Time Time Ki Baat"
| rowspan=3| Kalyanji–Anandji
| rowspan=2| Verma Malik
| rowspan=2| solo
|-
| "Saat Mare Aur Satra Ghayal"
|-
| "Baby Ho Gayi Hai Jawaan"
| [[Anand Bakshi]]
| [[Mahendra Kapoor]]
|-
! Rowspan=2| ''[[Khote Sikkay]]''
| "Maar Sutiya, Maar Sutiya"
| rowspan=2| R D Burman
| rowspan=2| Majrooh Sultanpuri
| solo
|-
| "Pyari Pyari Suratwale"
| [[Usha Mangeshkar]]
|-
! Rowspan=4| ''[[Khoon Ki Keemat]]''
| "Beet Gaye Hain Kitne Zamaane"
| rowspan=4| Sonik–Omi
| rowspan=4| Verma Malik
| rowspan=3| solo
|-
| "Kaun Hai Tu Ye Jaan Liya"
|-
| "Ari O Champa Chameli"
|-
| "Hai Kismat Se Ye Mehfil Milti"
| Kishore Kumar
|-
! Rowspan=3| ''[[Kora Badan]]''
| "Paas Aake Baat Meri Sun"
| rowspan=3| Vedpal Sharma
| rowspan=2| Kashmir Kadar
|-
| "Main Dudh Ban Jaaungi"
|-
| "Zindagi Zindadili Ka Naam Hai"
| Mahendra Dalvi
|-
! Rowspan=6| ''[[Madhosh (1974 film)|Madhosh]]''
| "Sharabi Aankhen, Gulabi Chehra Kaisa Lage Mera"
| rowspan=6| R D Burman
| rowspan=6| Majrooh Sultanpuri
| rowspan=2| R D Burman
|-
| "Sharabi Aankhen, Gulabi Chehra Kaisa Lage Mera" (Short)
|-
| "Mera Chhota Sa Dil Tune Chheena"
| rowspan=2| [[Kishore Kumar]]
|-
| "Kasam Khaao Tum Ek Baar, Mere Yaar"
|-
| "Jaan Mare Balmu Hamaar"
| rowspan=2| solo
|-
| "Nathani Meri Dole Re"
|-
!''[[Majboor (1974 film)|Majboor]]''
| "Roothe Rab Ko"
| Laxmikant–Pyarelal
| Anand Bakshi
| Mohammed Rafi
|-
! Rowspan=3| ''[[Manoranjan]]''
| "Aaya Hoon Main Tujhko Le Jaoonga"
| rowspan=3| R D Burman
| rowspan=3| Anand Bakshi
| Kishore Kumar
|-
| "Dulhan Maike Chali"
| Lata Mangeshkar, Usha Mangeshkar
|-
| "Chori Chori Solah Singaar Karungi"
| solo
|-
!''[[Manzilein Aur Bhi Hain]]''
| "Aaj Naye Geet Saje Meri Paayal Mein"
| Bhupendra Soni
| Yogesh
| solo
|-
! Rowspan=2| ''[[Mehmaan (film)|Mehmaan]]''
| "Chhod Are Jaa"
| rowspan=2| Ravi
| rowspan=2| Sahir Ludhianvi
| [[Mohammed Rafi|Mohd Rafi]]
|-
| "Tu Dar Maat"
| solo
|-
! Rowspan=4| ''Mr. Romeo''
| "Dil Toota Kya Hai Apna"
| rowspan=4| R D Burman
| rowspan=4| Anand Bakshi
| rowspan=2| R D Burman, Kishore Kumar, Bhupinder Singh
|-
| "He Mujhe Dil De Nahi To"
|-
| "Yahan Nahi Kahungi To Kahan Kahogi"
| Kishore Kumar
|-
| "Isi Sheher Ki Kisi Gali Me Piya Ka Ghar"
| solo
|-
!''[[Naya Din Nai Raat]]''
| "Sanam Na Jaao Abhi"
| rowspan=4| Laxmikant–Pyarelal
| Rajendra Krishan
| solo
|-
! Rowspan=2| ''[[Nirmaan]]''
| "Kasam Khuda Ki, Jo Kuch Kahunga, Sach Sach Kahunga"
| rowspan=2| Majrooh Sultanpuri
| [[Kishore Kumar]]
|-
| "Tauba Tera Husn-E-Jawan Aafat Hai Jaan-E-Jaan"
| [[Shailendra Singh (singer)|Shailendra Singh]]
|-
!''Paise Ki Gudiya''
| "Pagal Pagal Hum Sab Pagal"
| Verma Malik
| solo
|-
! Rowspan=2| ''[[Patthar Aur Payal]]''
| "Kaun Hu Mai Tu Kya Jaane"
| Kishore Kumar
| Gulshan Bawra
| rowspan=2| solo
|-
| "Na Mila Tu Nazar Na Mila Tu Nazar"
| Kalyanji–Anandji
| Indeevar
|-
! Rowspan=6| ''[[Pran Jaye Per Vachan Na Jaye]]''
| "Aa Ke Dard Jawan Hai"
| rowspan=6| O. P. Nayyar
| Ahmed Wasi
| rowspan=6| solo
|-
| "Bikaner Ki Chunri Odhi"
| rowspan=5| S. H. Bihari
|-
| "Chain Se Humko Kabhi"
|-
| "Dekho Raja Dekho"
|-
| "Dekho Arey Dilbar"
|-
| "Ek Tu Hai Piya"
|-
!rowspan=2| ''[[Prem Nagar (1974 film)|Prem Nagar]]''
| "Pyase Do Badan Pyaasi Raat Mein"
|rowspan=2| S. D. Burman
|rowspan=9| Anand Bakshi
| solo
|-
| "Thandi Hawaon Ne Gori Ka Ghunghat Utha Diya"
| Kishore Kumar
|-
! Rowspan=2| ''[[Pocket Maar (1974 film)|Pocket Maar]]''
| "Dushmani Hai Yeh To Pyaar Nahi"
| rowspan=7| Laxmikant–Pyarelal
| solo
|-
| "Uyi Kya Ho Gaya"
| "Manna Dey
|-
! Rowspan=4| ''[[Prem Shastra]]''
| "Mujhe Pyaar Kar"
| rowspan=2| Kishore Kumar
|-
| "Naam Hamara Mashur Ho Gaya"
|-
| "Tip Tip Tip"
| rowspan=3| solo
|-
| "Main Hu Dekhne Ki Cheez"
|-
!''Pugli''
| "Dhak Dhak Dhadke Kya Karoon Re Dil"
|-
!rowspan=2| ''Raja Kaka''
| "Jee Chahta Hai Utha Le Jaoon" (version 1)
| rowspan=2| Kalyanji-Anandji
| rowspan=2| Anjaan
| rowspan=2| Kishore Kumar
|-
| "Jee Chahta Hai Utha Le Jaoon" (version 2)
|-
! Rowspan=2| ''[[Resham Ki Dori]]''
| "Zohra Jamal Hoon"
| rowspan=2| Shankar–Jaikishan
| Hasrat Jaipuri
| solo
|-
| "Sona Hai Chandi Hai"
| Neeraj
| chorus
|-
!''[[Sagina (1974 film)|Sagina]]''
| "Ghazab Chamkegi Bindiya Tori Adhi Raat"
| S. D. Burman
| Majrooh Sultanpuri
| Kishore Kumar
|-
! Rowspan=2| ''[[Sauda (1974 film)|Sauda]]''
| "Jhoothe Jhoothi Teri Prem Kahani"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Rajendra Krishan
| solo
|-
| "Duniya Bhookhi Hai Paise Ki"
| Mukesh
|-
! Rowspan=3| ''[[Shaitaan (film)|Shaitaan]]''
| "Meri Aankh Phadakti Hai"
| rowspan=3| R D Burman
| rowspan=3| Majrooh Sultanpuri
| rowspan=2| solo
|-
| "Woh Jo Kal Gaye The"
|-
| "Dil To Maane Na, Meri Jaan"
| R D Burman
|-
! Rowspan=2| ''[[Shaandaar (1974 film)|Shaandaar]]''
| "Itni Badi Duniya Mein"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Rajendra Krishan
| [[Kishore Kumar]]
|-
| "Jhumka Bola Kajra Se"
| solo
|-
! Rowspan=2| ''Shatranj Ke Mohre''
| "Haye Ri Mori Dhani Chunar Udi Udi Jaye"
| rowspan=2| Ravindra Jain
| Nida Fazli
| rowspan=2| solo
|-
| "Log To Loote Hai Andhere Mein"
| Neeraj
|-
!''Shikwa''
| "Tu Jhoom Le Sharaabi"
| Chitragupt
| Hasrat Jaipuri
| solo
|-
!''[[Shubh Din]]''
| "Bhar Bhar Ke Pee Le Jaam"
| Kalyanji–Anandji
| Verma Malik
| solo
|-
! Rowspan=2| ''[[Trimurti]]''
| "Ab Rahoge Tum Apne Hi Bas Mein"
| rowspan=2| R D Burman
| rowspan=2| Gulshan Bawra
| solo
|-
| "Daulat Ke Rang Hazar Hain"
| [[Manna Dey]]
|-
! Rowspan=4| ''[[Ujala Hi Ujala]]''
| "Maine Toh Ye Jaana, Tu Hain Toh Zamana"
| rowspan=4| R D Burman
| rowspan=4| Majrooh Sultanpuri
| Kishore Kumar
|-
| "Aaj Kahi Raja Chalo Mere Sang"
| Mohammed Rafi
|-
| "Aye Mere Dil Bhool Jaa Bhool Jaa"
| rowspan=2| solo
|-
| "Dil Ka Churana Ya Maal Churana Bolo Buri Baat Hai"
|-
!''Us-Paar''
| "Pyaara Hindola Mera, Udaan Khatola Mera"
| S. D. Burman
| Yogesh
| solo
|-
! Rowspan=4| ''[[Woh Main Nahin]]''
| "Mera Roop Mera Rang Mere Chalne Ka Dhang"
| rowspan=4| Sonik–Omi
| rowspan=4| Verma Malik
| Mohammed Rafi
|-
| "Honthon Se Kayi Lutaye Taraane"
| Kishore Kumar
|-
| "Cheecho Cheech Ganeria, Do Teria Do Meria"
| solo
|-
| "Tujhe Ladki Mile Jawaan"
| Naveen Nischol
|-
! Rowspan=2| ''[[Zehreela Insaan]]''
| "Mere Dil Se Yeh Nain"
| rowspan=2| R D Burman
| rowspan=2| Majrooh Sultanpuri
| Shailendra Singh
|-
| "Yeh Silsila, Pyaar Se Chala"
| solo
|-
|}
=== 1975 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! Rowspan=3| ''[[Aa Jaa Sanam]]''
| "Ae Mere Chanchal Chanda So Jaa Chain Se"
| rowspan=3| Usha Khanna
| Indeevar
| Usha Timothy
|-
| "Aaj Ki Raat Mere Waaste Kya Layi Hai"
| Kafil Azar
| rowspan=2| solo
|-
| "Aaja, Khadi Hoon Teri Raahon Mein"
| M. K. Javed
|-
! Rowspan=2| ''[[Aakhri Dao]]''
| "O Allah Meri Khair Ho"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Hasrat Jaipuri
| Mohammed Rafi
|-
| "Tum Sang Preet Lagai"
| solo
|-
!''[[Aakraman]]''
| "Punjabi Gaayenge Marathi Gaayenge"
| Laxmikant–Pyarelal
| Anand Bakshi
| Mahendra Kapoor
|-
! Rowspan=3| ''[[Amanush (1975 film)|Amanush]]''
| "Kal Ke Apne Na Jaane Kyun"
| rowspan=3| Shyamal Mitra
| rowspan=3| Indeevar
| rowspan=2| Kishore Kumar
|-
| "Tere Gaalonko Choomoon"
|-
| "Ghum Ki Dawaa To Pyaar Hai"
| solo
|-
! Rowspan=2| ''[[Anari (1975 film)|Anari]]''
| "Hame Kya Garz Log Kya Maante Hai"
| towspan=2| Laxmikant–Pyarelal
| rowspan=2| Majrooh Sultanpuri
| Kishore Kumar
|-
| "Thandi Pavan Hai Deewaani Chhine Dupatta Mera"
| solo
|-
! Rowspan=2| ''[[Andhera]]''
| "Kuchh Toh Samjho Aati Hai Kisliye Jawani"
| rowspan=2| Sonik–Omi
| rowspan=2| Gulshan Bawra
| rowspan=2| solo
|-
| "Husn Aur Sharab Ka Jo Rishta Hai"
|-
!''Andolan''
| "Piya Ko Milan Kaise Hiye Ri Main Jaanu Nahi"
| Jaidev
| Meera
| solo
|-
! Rowspan=2| ''[[Angaare]]''
| "Tang Main Aa Gayaa Hun Javaani Se"
| rowspan=2| Chitragupt
| rowspan=2| Anand Bakshi
| Kishore Kumar
|-
| "Ladki Gali Ki Le Gayi Dekho Mera Dil"
| Mohammed Rafi
|-
!''Awara Ladki''
| "Raat Main Akeli Thi"
| Mahesh–Naresh
| Abhilash
| solo
|-
!''[[Balak Aur Janwar]]''
| "Aaja Sanam Chhod Sharam"
| Chitragupt
| Bharat Vyas
| solo
|-
! Rowspan=3| ''Badnaam''
| "Sheeshe Ki Jawani"
| rowspan=3| Ganesh
| Naqsh Lyallpuri
| rowspan=3| solo
|-
| "Pehra Hai Yahaan"
| rowspan=2| Asad Bhopali
|-
| "Bhaiya Phool Main"
|-
! Rowspan=2| ''Biwi Kiraye Ki''
| "Tamannayen Pareshan"
| rowspan=2| H. Parshuram
| rowspan=2| Anjum Jaipuri
| Mukesh
|-
| "Dil Tera Hai, Yeh Zindagi Teri"
| solo
|-
! Rowspan=2| ''[[Chori Mera Kaam]]''
| "Chori Mera Kaam Yaaron"
| rowspan=2| Kalyanji–Anandji
| rowspan=2| Verma Malik
| rowspan=2| Kishore Kumar
|-
| "Kaahe Ko, Kaahe Ko Mere Peechhe Padi Hai"
|-
! Rowspan=2| ''[[Dafaa 302]]''
| "Kya Lenge Aap Kuch To Lena Padega"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Indeevar
| rowspan=2| solo
|-
| "Himmatwala Meri Doli Le Jayega"
|-
! Rowspan=6| ''Dayar-e-Madina''
| "Gulon Ka Rang Jo Nikhra"
| rowspan=6| Mohammed Shafi
| rowspan=6| Abdur Rab Chaush
| Mohammed Rafi
|-
| "Ya Nabi Lije Khabar"
| rowspan=5| solo
|-
| "Madad Kijiye Tajedar-E-Madina" (female)
|-
| "Manzil Talash Karte Hai"
|-
| "Hum Hawa Me Bhi Chirag Apna"
|-
| "Madad Kijiye Tajdar Madeena" (version 2)
|-
!rowspan=3| ''[[Deewaar]]''
| "Keh Doon Tumhe"
| rowspan=3| R D Burman
| rowspan=3| Sahir Ludhianvi
| rowspan=2| Kishore Kumar
|-
| "Maine Tujhe Maanga, Tujhe Paya Hai"
|-
| "Koi Mar Jaye Kisi Pe"
| Usha Mangeshkar
|-
!''[[Dharam Karam]]''
| "Tere Humsafar Geet Hain Tere"
| R D Burman
| Majrooh Sultanpuri
| Kishore Kumar, Mukesh
|-
!''[[Do Jasoos]]''
| "Allah Meri Tauba"
| Ravindra Jain
| Ravindra Jain, Hasrat Jaipuri
| solo
|-
! Rowspan=4| ''[[Do Thug]]''
| "Humne Karjke Mohabbat"
| rowspan=4| Kalyanji–Anandji
| rowspan=4| Rajendra Krishan
| Kishore Kumar
|-
| "Lo Aaj Maine Chehre Se"
| Usha Timothy
|-
| "O Thandi Thandi Rut"
| rowspan=2| solo
|-
| "Ye Duniya To Hai Bas Paise Ki"
|-
! Rowspan=3| ''Ek Gaon Ki Kahani''
| "Kesar Jaise Tu Kishori"
| rowspan=3| Ravindra Jain
| rowspan=3| Indeevar
| Rowspan=2| solo
|-
| "Tuhi Bata Tujhe Pane Ka Kaun Sa Hai Tarika"
|-
| "Banno Pyari Banno"
| Usha Mangeshkar
|-
! Rowspan=3| ''Ek Hanson Ka Joda''
| "Pyaar Se Tum Mile Mil Gayi Har Khushi"
| rowspan=3| Jaidev
| rowspan=3| Naqsh Lyallpuri
| Kishore Kumar
|-
| "Aa Jao Ki Mil Kar Badle Duniya"
| rowspan=2| solo
|-
| "Mere Dil Me Teri Tasvir"
|-
! rowspan=2| ''[[Faraar]]''
| "Hamara Yeh Dil Jaani"
|rowspan=2| Kalyanji–Anandji
|Rowspan=2| Rajendra Krishan
|rowspan=2| Usha Mangeshkar
|-
| "Hamara Yeh Dil Jaani" (version 2)
|-
! Rowspan=4| ''[[Ganga Ki Kasam (1975 film)|Ganga Ki Kasam]]''
| "O Mere Dil Jaani"
| rowspan=4| Sonik–Omi
| rowspan=4| Qamar Jalalabadi
| rowspan=4| Kishore Kumar, Minoo Purushottam
|-
| "Aam Le Lo Aam"
|-
| "Maa Kahega Mujhko"
|-
| "Pyaar Ka Tu Lekar Naam"
|-
!''[[Geet Gaata Chal]]''
| "Shyam Abhimani"
| colspan=2| Ravindra Jain
| Mohammed Rafi
|-
! Rowspan=3| ''[[Jaggu]]''
| "Mera Naam Ka Chala Hai Yeh Jaam"
| rowspan=3| Sonik–Omi
| rowspan=3| Vishweshwar Sharma
| rowspan=3| solo
|-
| "Chanda Kiran Pyasi Hai"
|-
| "Kasme Dekhi Vaade Dekhe"
|-
!''Jogi Aur Jawaani''
| "Dariya-e-Dil Mein"
| V. Balsara
| Avkash Anand
| solo
|-
!''[[Julie (1975 film)|Julie]]''
| "Sancha Naam Tera"
| Rajesh Roshan
| Anand Bakshi
| Usha Mangeshkar
|-
! Rowspan=4| ''[[Kaala Sona]]''
| "Sun Sun Kasam Se, Laagun Tere Kadam Se"
| rowspan=4| R D Burman
| rowspan=4| Majrooh Sultanpuri
| Danny Denzongpa
|-
| "Tak Jhoom Naacho Nashe Mein Chur"
| Kishore Kumar
|-
| "Ek Baar Jaan-E-Jaana"
| rowspan=2| solo
|-
| "Koi Aaya, Aane Bhi De"
|-
! Rowspan=3| ''Kaam Shastra''
| "Khiche Khiche Se Kyo Ho Raat Ja Rahi Hai"
| rowspan=3| Brij Bhushan
| rowspan=6| Naqsh Lyallpuri
| rowspan=3| solo
|-
| "Jawani Ki Ye Rate Yu Hi Na Dhal Jaye"
|-
| "Utha Ke Neechi Nazar Maine Jab Salaam Kiya"
|-
! Rowspan=3| ''[[Kaagaz Ki Nao]]''
| "Har Janam Me Hamara Milan"
| rowspan=3| Sapan–Jagmohan
| [[Manhar Udhas]]
|-
| "Main Tumhare Khayalon Mein"
| rowspan=2| solo
|-
| "Na Jaiyo Re Sautan Ghar Saiyan"
|-
! Rowspan=4| ''[[Kahte Hain Mujhko Raaja]]''
| "Aiyo Re, Gaya Kaam Se"
| rowpsan=4| R D Burman
| rowspan=4| Majrooh Sultanpuri
| [[Kishore Kumar]]
|-
| "Maine Kab Chaha Ke Dulha Banunga"
| [[Mohammed Rafi]]
|-
| "Liyo Na Babu Tanik Piyo Na"
| rowspan=2| solo
|-
| "Jiya Mein Toofan Jagake"
|-
!rowspan=4| ''[[Khel Khel Mein (1975 film)|Khel Khel Mein]]''
| "Ahe Lo Pyaar Ke Din Aaye"
| rowspan=4| R D Burman
| rowspan=4| Gulshan Bawra
| rowspan=3| Kishore Kumar
|-
| "Khullam Khulla Pyaar Karenge"
|-
| "Ek Main Aur Ek Tu"
|-
| "Sapna Nera Toot Gaya"
| R D Burman
|-
! Rowspan=3| ''Khooni Kaun''
| "Aa Lag Ja Gale"
| rowspan=3| C. Satyam
| rowspan=3| Prem Dhawan
|rowspan=3| solo
|-
| Aaja Re Bichde"
|-
| "Yeh Bata"
|-
!rowspan=2| ''[[Khushboo (1975 film)|Khushboo]]''
| "Bechara Dil Kya Kare"
| rowspan=2| R D Burman
| rowspan=2| Gulzar
| rowspan=2| solo
|-
| "Ghar Jaayegi Tar Jaayegi"
|-
! rowspan=2| ''[[Lafange]]''
| "Ib Lagan Lagi Lagan Lagi"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Anand Bakshi
| Mohammed Rafi
|-
| "Aai Kisi Ki Yaad To"
| Manna Dey
|-
!rowspan=2| ''Love In Bombay''
| "Saiyan Saiyan Haye Saiyan"
| rowspan=2|Shankar–Jaikishan
| rowspan=2| Majrooh Sultanpuri
| rowspan=2| solo
|-
| "Na Main Boli, Na Woh Bola"
|-
! ''[[Mausam (1975 film0|Mausam]]''
| "Mere Ishq Mein"
| Madan Mohan
| Gulzar
|solo
|-
! Rowspan=2| ''Maya Machhindra''
| "Phagun Ka Mahina Aayo Sakhi"
| rowspan=2| Govind–Naresh
| rowspan=2| Madan Bharti
| Usha Mangeshkar
|-
| "Chhalak Rahi Boonde"
| solo
|-
!''[[Mazaaq]]''
| "Takra Gaye Do Baadal"
| R D Burman
| Yogesh
| solo
|-
!''[[Mere Sajna]]''
| "Tumhari Aankh Se Joda Hai"
| Laxmikant–Pyarelal
| Anand Bakshi
| solo
|-
! Rowspan=4| ''Mounto''
| "Mere Husn Ke Jalwe Beshumaar"
| rowspan=4| Kalyanji–Anandji
| rowspan=4| Verma Malik
| rowspan=3| solo
|-
| "Main Shamma Kahan Hai Parwana"
|-
| "Teri Toh Buddhi Pe Pad Gaya Taala"
|-
| "Door Door Se Aayi Hoon Main Toh Milne Ko"
| Mahendra Kapoor, Amit Kumar
|-
! Rowspan=2| ''Mutthi Bhar Chawal''
| "Saari Ratiyan Machaave Utpaat"
| rowspan=2| Khayyam
| rowspan=2| Maya Govind
| rowspan=2| solo
|-
| "Humein Hukum Tha Gham Uthana Padega"
|-
! Rowspan=3| ''Naatak''
| "Mera Rang Roop Mere Baal"
| rowspan=3| Laxmikant–Pyarelal
| rowspan=3| Anand Bakshi
| rowspan=3| solo
|-
| "Zindagi Ek Natak Hai (part 1)
|-
| "Zindagi Ek Natak Hai" (part 2)
|-
!''[[Neelima]]''
| "Tu Jo Kahe Ban Jaoongi Main Wahi"
| Shankar–Jaikishan
| Majrooh Sultanpuri
| solo
|-
! Rowspan=3| ''Phanda''
| "Tu Jo Le Le Nigaho Se Mera Salaam"
| rowspan=3| N. Dutta
| rowspan=3| Shakir Kotwi
| rowspan=2| solo
|-
| "Zindagi Ki Pehli Zaroorat Hai"
|-
| "Yeh Haseen Parchhayia"
| Usha Mangeshkar
|-
!''[[Ponga Pandit]]''
| "Jijaji Jijaji, Mere Didi Hai Anadi"
| Laxmikant–Pyarelal
| Rajendra Krishan
| Kishore Kumar, Usha Mangeshkar
|-
!''[[Qaid (film)|Qaid]]''
| "Beliya Aale Beliya"
| Nitin–Mangesh
| Maya Govind
| Nitin Mukesh
|-
! Rowspan=2| ''[[Raaja]]''
| "Mere Roothe Balam Se Kehdo"
| rowspan=2| R D Burman
| rowspan=2| Anand Bakshi
| solo
|-
| "Kaun Hoon Main, Kaun Hai Tu"
| Kishore Kumar
|-
! Rowspan=2| ''[[Rafoo Chakkar]]''
| "Kisi Pe Dil Agar Aa Jaye To"
| rowspan=2| Kalyanji–Anandji
| rowspan=2| Gulshan Bawra
| Shailendra Singh
|-
| "Chhuk Chhuk Chak Chak Bombay Se Baroda"
| Mahesh Kumar, Usha Mangeshkar
|-
! Rowspan=5| ''[[Raftaar (1985 film)|Raftaar]]''
| "Sansaar Hai Ik Nadiya"
| rowspan=5| Sonik–Omi
| rowspan=2| Abhilash
| Mukesh
|-
| "Nari Jeevan Bhi Kya Jeevan Hai"
| rowspan=3| solo
|-
| "Yeh Kaisi Lagi Agan Jale Badan"
| Omkar Verma
|-
| "Loota Hai Tune Mujhe"
| rowspan=2| Verma Malik
|-
| "Ye Sun Haaniya Oye Dil Janiya"
| Mohammed Rafi
|-
! Rowspan=6| ''[[Ranga Khush]]''
| "Uparwala Tera Is Dharti Mein"
| rowspan=6| Sonik–Omi
| rowspan=6| M G Hashmat
| rowspan=5| Omi, Joginder, Minoo Purushottam
|-
| "Gud Gud Bole"
|-
| "Chhedega Mujhko To Katungi Tujhko"
|-
| "Nanhi Nanhi Palke Tori"
|-
| "Chhutti Kar Doongi"
|-
| "Ban Ke Pawan Ud Jaungi Main"
| solo
|-
! Rowspan=5| ''Rangeen Duniya''
| "Chaayi Mast Bahare"
| rowspan=5| Chitragupt
| rowspan=5| Prem Dhawan
| rowspan=3| Manna Dey
|-
| "Pehli Jhalak Mein"
|-
| "Rang Ye Dekh"
|-
| "Tan Ye Sone Ka Shabnami"
| rowspan=2| Mahendra Kapoor
|-
| "Naina Mila Lo Khul Ke Tum"
|-
! rowspan=5| ''Rani Aur Lalpari''
| "Rani Ki Jo Na Maani Tune Baat"
| rowspan=5| Vasant Desai
| rowspan=5| Balkavi Bairagi
| rowspan=2| Dilraj Kaur
|-
| "Kirnon Se Jagmagaye, Khushboo Se Phail Jaaye"
|-
| "Maa Ke Aansu Maa Ke Mamta"
| rowspan=2| solo
|-
| "Mera Phool Badan Kumhlaaye Re"
|-
| "Ek Baar Ek Ladki Thi, Naam Tha Jiska Cindrela"
| Manna Dey, Dilraj Kaur, Pramila Datar, Faiyaz
|-
! Rowspan=3| ''[[Saazish (1975 film)|Saazish]]''
| "Na Takht Chaahiye Na Taaj Chaahiye"
| Rowspan=3| Shankar–Jaikishan
| rowspan=3| Hasrat Jaipuri
| rowspan=2| solo
|-
| "Na Takht Chhaahiye" (version 2)
|-
| "How Sweet Daadaaji Aise Na"
| Ranu Mukhrjee
|-
! Rowspan=3| ''[[Sewak (film)|Sewak]]''
| "Banke Sanwarke Main"
| rowspan=3| Laxmikant–Pyarelal
| rowspan=3| Anjaan
| rowspan=2| solo
|-
| "Kahoon To Kahoon Kaise"
|-
| "Gin Ginke Badle Lena Hai, Bachke Na Jane Dena Hai"
| [[Minoo Purushottam]]
|-
! Rowspan=1| ''Shri Ram Hanuman Yudha''
| "Shri Raghupati Shri Raam Naam Hai"
| Jagdish J
| Anjaan
| solo
|-
! Rowspan=1| ''Shri Satya Narayan Ki Pooja''
| "Kya Bhool Hui, Kyun Rooth Gaye"
| S. N. Tripathi
| Bharat Vyas, B. R. Tripathi
| solo
|-
!''[[Sunehra Sansar]]''
| "Hello Hello, Kya Haal Hai"
| Naushad
| Anand Bakshi
| Kishore Kumar
|-
! Rowspan=6| ''Toofan''
| "Baaj Jaayega Baja"
| rowspan=6| Ravindra Jain
| rowspan=6| Ravindra Jain
| rowspan=4| Mohammed Rafi
|-
| "Chalo Koi Khel Khele Hum"
|-
|"Pyaar Kar Dhaar Kar"
|-
| "O Barkha Mujhe Sach Sach Bata"
|-
|"Reshma Mera Naam Hai"
| solo
|-
| "Sacche Ka Bolbala"
| Mahendra Kapoor
|-
!''[[Uljhan]]''
| "Mujhko Toh Qaatil Ki Itni Pehchan Hai"
| Kalyanji–Anandji
| M G Hashmat
| Mohammed Rafi, Sudesh Kumar
|-
! Rowspan=3| ''[[Umar Qaid]]''
| "Phinjauda Bhk Bhai, Apni Baat Zara Maan"
| rowspan=3| Sonik–Omi
| rowspan=3| Gulshan Bawra
| Minoo Purushottam, Mohammed Rafi
|-
| "Aag Me Jale Jawaani"
| rowspan=2| solo
|-
| "Yun Naa Dekh Mujhe"
|-
!''[[Vandana (film)|Vandana]]''
| "Ae Sichta Hai Kya, Aaja!
| colspan=2| Ravi
| solo
|-
!''[[Zakhmee]]''
| "Jalta Hai Jiya Mera"
| Bappi Lahiri
| Gauhar Kanpuri
| Kishore Kumar
|-
!''[[Zameer (1975 film)|Zameer]]''
| "Tum Bhi Chalo, Hum Bhi Chale"
| Sapan Chakraborty
| Sahir Ludhianvi
| Kishore Kumar
|-
! Rowspan=3| ''[[Zindagi Aur Toofan]]''
| "Raat Madhosh Hai"
| rowspan=3| Laxmikant–Pyarelal
| Indeevar
| rowspan=2| solo
|-
| "Meri Kashti Toofan Mein"
| Ram Akhtar Tyagi
|-
| "Main Bhi To Akela Hoon"
| Ram Bhardwaj
| [[Amit Kumar (singer)|Amit Kumar]]
|-
! rowspan=5| ''[[Zorro (1975 Hindi film)|Zorro]]''
| "Dilwalon Se Pyar Kar Lo, Pyar Ke Naam Ka Jaam Bhar Lo"
| rowspan=5|Kalyanji-Anandji
| rowspan=5| Verma Malik
| Mohammed Rafi, [[Usha Timothy]]
|-
| "Kya Cheez Hai Aurat Duniya Mein"
| Kishore Kumar
|-
| "Haay Re Tauba, Mujhe Kya Hua"
| rowspan=3| solo
|-
| "Dil Tere Naam Kar Doongi"
|-
| "Haay Haay Main Mar Gayi"
|-
|}
=== 1976 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
!''[[Aaj Ka Mahaatma]]''
| "Chandni Cahnd Se Hoti Hai"
| Laxmikant–Pyarelal
| Majrooh Sultanpuri
| Kishore Kumar
|-
! Rowspan=4| ''Alibaba''
| "Hamre Ishq Ka Itna To Ehtraam Karo"
| Aziz Nazan
| rowspan=4| Kafil Azar
| Aziz Nazan
|-
| "Ae Khuda Gham Se Chhuda Hum"
| rowspan=3| Hansraj Behl
| rowspan=3| solo
|-
| "Husn Na Jaane Sar Ko Jhukana"
|-
| "Shabnam Meri Mohabbat"
|-
! Rowspan=2| ''[[Bairaag]]''
| "Saare Shehar Mein Aap Sa"
| rowspan=4| Kalyanji–Anandji
| rowspan=2| Anand Bakshi
| rowspan=2| Mohammed Rafi
|-
| "Peete Peete Kabhi Kabhi Yun"
|-
! Rowspan=2| ''[[Bajrangbali (film)|Bajrangbali]]''
| "He Maryada Purushottam Bolo"
| Rowspan=2| Kavi Pradeep
| Lata Mangeshkar
|-
| "Hamara Naam Hai Ram Katori"
| solo
|-
! ''[[Balika Badhu (1976 film)|Balika Badhu]]''
|"O Jhunkewale"
| R D Burman
| Anand Bakshi
|Kishore Kumar
|-
!''[[Barood (1976 film)|Barood]]''
| "I Love You"
| S. D. Burman
| Anand Bakshi
| solo
|-
!''Bhagwan Samaye Sansar Mein''
| "O Bairagi Ban Anuragi"
| Anil–Arun
| B D Mishra
| solo
|-
! Rowspan=3| ''[[Bhanwar]]''
| "Aankhe Milayenge Bate Sunayenge"
| rowspan=3| R D Burman
| rowspan=3| Anand Bakshi
| rowspan=2| Kishore Kumar
|-
| "Rang Le Aayenge, Roop Le Aayenge"
|-
| "Baraat Mein Log Kam Kyun Aaye Hai"
| R D Burman, Kishore Kumar
|-
! Rowspan=2| ''Bhoola Bhatka''
| "Chali Chilman Ke Peechhe"
| rowspan=2| Kalyanji–Anandji
| rowspan=2| Anand Bakshi
| Aziz Nazan
|-
| "Kahin Se Koi Raasta Mil Gaya"
| solo
|-
! Rowspan=2| ''[[Bullet (1977 film)|Bullet]]''
| "Ae Chori Chori Chupke Chupke"
| rowspan=2| R D Burman
| rowspan=2| Anand Bakshi
| Kishore Kumar
|-
| "Peene Ke Baad Aati Hai Yaad"
| solo
|-
! ''[[Bundal Baaz]]''
|"Kya Hua Yaaron"
| R D Burman
| Majrooh Sultanpuri
|Kishore Kumar
|-
! Rowspan=2| ''[[Charas (1976 film)|Charas]]''
| "Mera Naam Ballerina"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Anand Bakshi
| solo
|-
| "Charas Charas"
| [[Mahendra Kapoor]]
|-
!''[[Chhoti Si Baat]]''
| "Jaaneman Jaaneman Tere Do Nayan"
| Salil Chowdhury
| Yogesh
| K. J. Yesudas
|-
! Rowspan=2| ''[[Deewaangee]]''
| "Woh Bhi Mujhse Karne Laga Hai Zara Zara Sa Pyaar"
| rowspan=2| Ravindra Jain
| Ravindra Jain
| rowspan=2| solo
|-
| "Meei Jawani Kare Ishare"
| Naqsh Lyallpuri
|-
! Rowspan=1| ''[[Dus Numbri]]''
| "Dilruba Dilliwali"
| rowspan=1| Laxmikant–Pyarelal
| rowspan=1| Majrooh Sultanpuri
| rowspan=1| Mukesh, Manna Dey
|-
! Rowspan=3| ''[[Ek Se Badhkar Ek (1976 film)|Ek Se Badhkar Ek]]''
| "Zara Bach Ke"
| rowspan=3| Kalyanji–Anandji
| rowspan=3| Verma Malik
| rowspan=3| Mohammed Rafi
|-
| "Masti Jo Teri Ankhon Mein Hai"
|-
| "Main Toh Chhuriyon Ki Dhar Pe"
|-
!''[[Fakira]]''
| "Yeh Mera Jaadu, Zor Hoke Kabu"
| colspan=2| Ravindra Jain
| solo
|-
! Rowspan=3| ''[[Fauji (1976 film)|Fauji]]''
| "Vardi Hai Bhagwan"
| rowspan=3| Sonik–Omi
| rowspan=3| M G Hashmat
| Mohammed Rafi, Manna Dey, Minoo Purushottam
|-
| "Garmi Lagi Hai"
| Minoo Purushottam
|-
| "Phataphat Jaam Pila De"
| Manna Dey, Narendra Chanchal, Kumar Sonik, Minoo Purushottam
|-
! Rowspan=2| ''Gumrah''
| "Pyaase Hoth Chalakte Saagar
| rowspan=2| Usha Khanna
| rowspan=2| Asad Bhopali
| rowspan=2| solo
|-
| "Tere Chehre Se Chilman Hata Dun"
|-
! Rowspan=5| ''Harfan Maula''
| "Dori Pyaar Ki Na Toote"
| rowspan=5| Shyamji–Ghanshyamji
| rowspan=5| Majrooh Sultanpuri
| rowspan=4| Mohammed Rafi
|-
| "Main Hu Hansi Tumne Kaha"
|-
| "Sab Ke Lab Par Naam Hamara"
|-
| "Dilwale Karte Hai Ghulami"
|-
| "Jaye Naa Paiyo"
| solo
|-
! Rowspan=2| ''[[Hera Pheri (1976 film)|Hera Pheri]]''
| "Aap Ka Sarkar Kya Kuchh Kho Gaya Hai"
| rowspan=2| Kalyanji–Anandji
|Anjaan
| rowspan=2| solo
|-
| "Mujhe Pyaar Mein Khat Kisine Likha Hai"
| Indeevar
|-
!''Jai Mahalaxmi Maa''
| "Baanki Ada Se Bach Payega"
| Chitragupt
| Bharat Vyas
| solo
|-
! Rowspan=2| ''[[Jeevan Jyoti (1976 film)|Jeevan Jyoti]]''
| "Yeh Ghunghroo"
| rowspan=2| Salil Chowdhury
| rowspan=2| Anand Bakshi
| solo
|-
| "Suno Sunate Hai Tumko Ek Dukhbhari Kahani"
| [[Usha Mangeshkar]]
|-
!''[[Kabeela]]''
| "Teri Meri Ho Gayi Yaari"
| Kalyanji–Anandji
| Farooq Kaiser
| solo
|-
!''[[Kadambari (1976 film)|Kadambari]]''
| "Ambar Ki Ek Paak Suraahi"
| Vilayat Ali Khan
| Amrita Pritam
| solo
|-
! Rowspan=2| ''[[Kalicharan]]''
| "Tum Jaano Ya Hum Jaane"
| rowspan=2| Kalyanji–Anandji
| rowspan=2| Ravindra Jain
| Mohammed Rafi
|-
| "Yeh Pal Chanchal Kho Na Dena O Deewane"
| Kishore Kumar
|-
! Rowspan=2| ''Kasam''
| "Aa Paas Aa Darr Tujhko Kya"
| rowspan=2| Surender Kohli
| Mahendra Dalvi
| rowspan=2| solo
|-
| "Hai Mai Mari Hui Mai Mari"
| Naqsh Lyallpuri
|-
! Rowspan=2| ''Khalifa''
| "Dil Machal Raha Hai"
| rowspan=2| R D Burman
| rowspan=2| Gulshan Bawra
| Rowspan=2| Kishore Kumar
|-
| "Dekh Tujhko Dil Ne Kaha"
|-
! Rowspan=1| ''Kitne Paas Kitne Door''
| "Nazron Se Nazren Mila Zara"
| Chand Pardesi
| D S Sultania
| solo
|-
! Rowspan=2| ''[[Koi Jeeta Loo Haara]]''
| "Aaj Hum Tum Dono Chup Rahenge"
| rowspan=2| Laxmika
| rowspan=2| Anand Bakshi
| rowspan=2| Kishore Kumar
|-
| "Ban Gayi Baat Baaton Mein"
|-
! Rowspan=3| ''[[Ladki Bholi Bhali]]''
| "Ji Maine Nahi Pi Hai"
| rowspan=3| Usha Khanna
| rowspan=3| Hasrat Jaipuri
| rowspan=3| solo
|-
| "Main Hu Kya Bataye"
|-
| "Roshni Bujha Dil Ko Tu Jala"
|-
!''[[Lagaam]]''
| "Aa Idhar Aa Zara Nazar To Mila"
| Kalyanji–Anandji
| Kulwant Jani
| solo
|-
! Rowspan=2| ''[[Maha Chor]]''
| "Mithi Mithi Ankhiyon Se Man Bhar De"
| rowspan=2| Anand Bakshi
| rowspan=2| R D Burman
| [[Kishore Kumar]]
|-
| "Sun Banto Baat Mero"
| Anand Bakshi
|-
! Rowspan=4| ''[[Main Chor Hoon]]''
| "Neela Akash Ho"
| rowspan=4| L Chakravarty
| rowspan=4| Arudra, Acharya Attrey, Prem Dhawan
| rowspan=3| Mahendra Kapoor
|-
| "Govind Ho Govinda"
|-
| "Radha Ye Dil To Hai Tere Bus Mein"
|-
| "Babu Tu Muskura"
| solo
|-
! Rowspan=2| ''[[Mazdoor Zindabad]]''
| "Yeh Aaj Ka Bharat Hai"
| rowspan=2| Usha Khanna
| rowspan=2| Asad Bhopali
| Jaspal Singh
|-
| "Humko Paisa Na Do, Hum Bikhari Nahi"
| Anupama Deshpande
|-
! Rowspan=2| ''[[Meera Shyam]]''
| "Itni Binti Suno Meri"
| rowspan=2| Govind–Naresh
| Meera
| rowspan=2| solo
|-
| "Ankhiyan Shyam Milan Ki Pyasi"
| Narendra Sharma
|-
! Rowspan=3| ''Mere Sartaj''
| "Mera Sab Kuch Hai Ae Dilruba Tumhare Liye"
| rowspan=3| Ravi
| rowspan=3| Mehboob Sarwar
| rowspan=3| solo
|-
| "Main Hu Dukhtare Angoor"
|-
| "Jali Hai Shama Karwan Ko Lutne Ke Liye"
|-
!''Mrig Trishna''
| "Saajan Saajan Main Karun"
| colspan=2| Shambhu Sen
| solo
|-
! Rowspan=5| ''Naag Champa''
| "Been Baja Mere Mast Sapere"
| rowspan=5| S. N. Tripathi
| rowspan=5| Bharat Vyas
| rowspan=4| solo
|-
| "O Matwaale Pyaale Par Kyo Bana Deewana Hai"
|-
| "Meri Dard Bhari Ye Pukaar Hai"
|-
| "Naag Panchami Ka Aaya Hai Yeh Mangal Tyohaar"
|-
|"Raat Gayi Prabhaat Hua Chamka Suraj"
| Manna Dey
|-
!''[[Nagin (1976 film)|Nagin]]''
| "Tere Ishq Ka Mujhpe"
| Laxmikant–Pyarelal
| Verma Malik
| Mohammed Rafi
|-
!''[[Nehle Pe Dehla]]''
| "Main Choron Ki Rani Hoon"
| R D Burman
| Anand Bakshi
| solo
|-
! ''Play Boy''
| "Ek Pagle Se Pad Gaya Pala"
| Sonik–Omi
| Mukhtar
| solo
|-
! Rowspan=3| ''[[Rakhi Aur Rifle]]''
| "Kabhi Kabhi Saiyya Sharab Pike Aaye"
| rowspan=3| Sapan–Jagmohan
| rowspan=2| Madan Bharti
| rowspan=3| solo
|-
| "Tum Pyare Ho Balam Mohe Praan Se"
|-
| "Ye Rakhi Bhi Pyari Hai"
| Gauhar Kanpuri
|-
! Rowspan=2| ''[[Raees (1976 film)|Raees]]''
| "Tere Zurm Ki Maut Hai Saza"
| rowspan=2| Sapan–Jagmohan
| rowspan=2| Naqsh Lyallpuri
| rowspan=2| solo
|-
| "Mauka Yeh Kho Na Dena Ae Dil"
|-
!''Raeeszada''
| "Jiska Man Hi Prem Ka Darpan"
| Ravindra Jain
| Tajdar Taj
| Mohammed Rafi
|-
!''[[Rangila Ratan]]''
| "Tera Mera Mera Tera"
| Kalyanji–Anandji
| Gulshan Bawra
| Kishore Kumar
|-
! Rowspan=4| ''[[Sajjo Rani]]''
| "Saiyyan Ke Gaon Mein Taaro Ki Chhaav Mein"
| rowspan=4| Sapan–Jagmohan
| Rowspan=3| Jan Nisar Akhtar
| rowspan=4| solo
|-
| "Jiya Mane Nahi Khadi Taako Saiyya"
|-
| "Paao Mein Payal"
|-
| "Mori Bali Umariya Kharab Kini Balma"
| Jainendra Jain
|-
! Rowspan=3| ''[[Salaakhen (1975 film)|Salaakhen]]''
|"Maze Uda Lo Jawani Rahe Na Rahe"
| Rowspan=3| Ravindra Jain
| rowspan=2| Hasrat Jaipuri
| rowspan=2| solo
|-
|"Mere Dekh Ke Lambe Baal"
|-
|"Seema Seema Seema"
| Ravindra Jain
|Kishore Kumar
|-
!| ''[[Sankoch (1976 film)|Sankoch]]''<ref name="Sankoch (Songs)">{{cite web|url=http://www.hindigeetmala.net/movie/sankoch.htm |title=Sankoch (Songs) |publisher=Hindi Geetmala}}</ref><ref name="Sankoch (Music)">{{cite web|url=http://www.saavn.com/s/album/hindi/Sankoch-1976/RxtHxn2ZPCo_|title=Sankoch (Music) |publisher=Saavn.com}}</ref>
| "Pyare Pyare Ghungat Mein"
|| Kalyanji-Anandji
|| M G Hashmat
| solo
|-
! Rowspan=4| ''[[Shahi Lutera]]''
| "Dil Se Dil Takra Lo"
| rowspan=4| Sonik–Omi
| rowspan=4| Verma Malik
| Mohammed Rafi, Omi
|-
| "Garr Ishq Me Aisa Haal Hai"
| Manna Dey
|-
| "Husn Hai Parda Daar Hoshiyar Khabardaar"
| Omi
|-
| "Tikhi Tikhi Naro Ke Teer Chalaye"
| solo
|-
! Rowspan=3| ''[[Shankar Dada]]''
| "Ek Main Ek Tu"
| rowspan=3| Sonik–Omi
| rowspan=3| Verma Malik
| Mohammed Rafi
|-
| "Tune Jalwe Nahi Dekhe Jalal Nahi Dekha"
| Manna Dey
|-
| "Hay Hay Mar Jaava"
| solo
|-
! Rowspan=2| ''[[Shankar Shambhu]]''
| "Agar Nibhane Ki Himmat"
| rowspan=2| Kalyanji–Anandji
| rowspan=2| Sahir Ludhianvi
| solo
|-
| "Bheege Hue Jalwon Par Aise Na Nazar Dalo"
| [[Mohammed Rafi]]
|-
! Rowspan=6| ''[[Sharafat Chhod Di Maine]]''
| "Shyam Salona" (version 1)
| rowspan=6| Madan Mohan
| rowspan=6| Verma Malik
| rowspan=5| solo
|-
| "Shyam Salona" (version 2)
|-
| "Ek Mutthi Mein Dil"
|-
| "Meri Gali Mein Saiyan"
|-
| "Aaj Ki Mehfil, Aaj Ki Saham"
|-
| "Ek Sapna Maine Dekha Hai, Ek Sapna Maine Dekha Hai"
| [[Mohammed Rafi]]
|-
! Rowspan=4| ''Sikka''
| "Aa Gayi Ab To Samajh Me Ye Haqiqat Pyare"
| rowspan=4| Chitragupt
| rowspan=4| Kafil Azar
| Mohammed Rafi
|-
| "Dil Hai Mera Shishe Jaisa Dheere Se Lijiye"
| rowspan=3| solo
|-
| "Balma Buddhu Anandi, Main Kaise Karun Pyar"
|-
| "Hath Yu Na Chuddao"
|-
! Rowspan=5| ''[[Suntan (1976 film)|Suntan]]''
| "Pappu Ki Mummy, Tu Badi Nikammi, Teri Jaan Ko"
| rowspan=5| Laxmikant–Pyarelal
| rowspan=5| Verma Malik
| [[Kishore Kumar]]
|-
| "Aaj Khushi Se Jhum Raha" (version 1)
| rowspan=4| solo
|-
| "Aaj Khushi Se Jhum Raha" (version 2)
|-
| "Laaton Ke Bhoot Baaton Se"
|-
| "Jawani Ke Din Chaar"
|-
! rowspan=4| ''[[Toofan Aur Bijlee]]''
| "Yeh Dil Tera Hi Tha"
| rowspan=4| Chitragupt
| rowspan=4| Kafil Azar
| Mahendra Kapoor, Ranu Mukherjee
|-
| "Galyaat Saankli Sonyachi Hi Pori Konachi"
| Mahendra Kapoor
|-
| "Zulfi Main Tere Pyar Mein Diwani Ho Gayi"
| rowspan=2| solo
|-
| "Main Hoon Toofan, Main Hoon Bijli"
|-
! Rowspan=3| ''[[Udhar Ka Sindur]]''
| "Jannat Se Aayi Pari"
| rowspan=3| Rajesh Roshan
| rowspan=3| Majrooh Sultanpuri
| Mukesh
|-
| "Lejiye Vo Aagaye Nashe Ki Sham"
| rowspan=2| solo
|-
| "Pyar Mangda Ikraar Mangda"
|-
!rowspan=3| ''Yaari Zindabad''
| "Husn Bole Ishq Se Deedar Kar Ke Dekh Le"
|rowspan=3| Sonik–Omi
|rowspan=3| M G Hashmat
| Usha Mangeshkar
|-
| "Panwa Khaike"
| solo
|-
| "Ari Kya Hua Bolta Kyun Nahin"
| Kamal Barot
|-
! Rowspan=3| ''[[Zid (1976 film)|Zid]]''
| "Tere Liye Maine Thami Re Mala"
| rowspan=3| Ravindra Jain
| rowspan=3| Ravindra Jain
| rowspan=2 |Jaspal Singh
|-
| "Holi Hai Ho Ho La La La"
|-
| "Jab Talak Dum Mein Dum"
| solo
|-
|}
=== 1977 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! Rowspan=3| ''[[Adha Din Aadhi Raat]]''
| "Saathi Banega, Saath Apne Chalega"
| rowspan=3| Laxmikant–Pyarelal
| rowspan=3| Anand Bakshi
| Mohammed Rafi
|-
| "Ek Baar, Sirf Ek Baar Tu Jo Muskura De"
| rowspan=2| solo
|-
| "Kaahe Ko Byaahi Videsh Re Baabul"
|-
!''[[Aadmi Sadak Ka]]''
| "Basti Basti Nagri Nagri"
| Ravi
| Verma Malik
| Mohammed Rafi
|-
!''[[Aaina (1977 Indian film)|Aaina]]''
| "Kaho Toh Aaj Bol Doon"
| Naushad
| Jan Nisar Akhtar
| solo
|-
! Rowspan=2| ''[[Aakhri Goli]]''
| "Kaise Keh Doon Mujhe"
| rowspan=2| Kalyanji–Anandji
| rowspan=2|
| rowspan=2| solo
|-
| "Ek Baat Batane Aayi Hoon"
|-
! Rowspan=5| ''[[Ab Kya Hoga]]''
| "Sare Mahafil Mera Iman Beiman Ho Gaya"
| rowspan=5| Usha Khanna
| rowspan=5| Sawan Kumar Tak
|| Mohammed Rafi
|-
| "Sone Se Jeevan Ke"
| rowspan=4| solo
|-
| "Aa Devta Tu Apni Pujarin Ke Pas"
|-
| "Main Rat Bhar Na Soyi Re"
|-
| "Teri Dulhun Hun Tere Nakhre Uthaungi"
|-
! Rowspan=2| ''Abhi Toh Jee Lein''
| "Kabhi Toh ChaliAa Aashiqon Ki Gali"
| rowspan=2| Sapan–Jagmohan
| rowspan=2| Naqsh Lyallpuri
| rowspan=2| Kishore Kumar
|-
|"Tu Laali Hai Savere Wali"
|-
!''Adalat''
| "Tumse Door Reh Ke"
| Kalyanji–Anandji
| Gulshan Bawra
| Mohammed Rafi
|-
! rowspan="3"|''[[Agar]]''
| "Aa Lag Ja Gale Mere Lehrake"
| rowspan="3"| Sonik–Omi
| rowspan="3"| Gulshan Bawra
| Mohammed Rafi
|-
| "Jiwan Path Ke Ek Rath Ke Do Pahiye"
| K. J. Yesudas
|-
| "Mammi Mujhe Gudiya Si Behnaa Chahiye"
| Sushma Shrestha, Amol Palekar, Master Raju
|-
! rowspan="3"|''[[Agent Vinod (1977 film)|Agent Vinod]]''
| "Band Kamare Mein Ek Ladaki Akeli"
| rowspan="3"|Raam Laxman
| rowspan="3"|Ravinder Rawal
| solo
|-
| "Loveleena Aa Gaya Mai, Tu Aa Gaya Toh Jaanejaa Baaho Me Tham Le"
|[[Shailendra Singh (singer)|Shailendra Singh]]
|-
| "Mehfil Me Aaye Ho Aapka Dil Jaan Jaaynge"
| [[Manna Dey]]
|-
! Rowspan=4| ''Alibaba Marjina''
| "Gulbadan Aa Gayi, Lo Aa Gayi"
| rowspan=4| Usha Khanna
| rowspan=4| Kulwant Jani
| rowspan=3| solo
|-
| "Basre Ki Hoor Dekho Aayi"
|-
| "Gulistan Se Nikalkar Gulaab Aa Gaya"
|-
| "Main Hoon Kafir Mast Hasina"
| Anuradha Paudwal
|-
! Rowspan=2| ''[[Amaanat]]''
| "Cycle Pe Haseenon Ki Toli"
| rowspan=2| Ravi
| rowspan=2| Sahir Ludhianvi
| Mohammed Rafi, Manna Dey
|-
| "Bujhe Bujhe Rang Hai"
| solo
|-
! Rowspan=7| ''Amar shilpi''
| "Dekho To Aaya Nahi Kanha Mera"
| rowspan=7| S. Rajeswara Rao, M. Ranga Rao
| rowspan=7| P. L. Santoshi, V. Premkumar
| rowspan=7| Manna Dey, Usha Mangeshkar
|-
| "Hai Vahi Hai Vahi Rani Meri Karti Hai"
|-
| "Man Ke Phulwa Khile"
|-
| "Pathoro Me Rehne Wale"
|-
| "Pyaar Kar Le Mujhse"
|-
| "Shri Venu Gopala Chinmayanand"
|-
| "Suno To Zarra Ae"
|-
!''[[Anand Ashram]]''
| "Saara Pyaar Tumhara"
| Shyamal Mitra
| Indeevar
| Kishore Kumar
|-
! Rowspan=1| ''[[Apnapan]]''
| "Dil Pe Zara Haath Rakh Lo"
| rowspan=1| Laxmikant–Pyarelal
| rowspan=1| Anand Bakshi
| solo
|-
! Rowspan=2| ''Bahadur Bachche''
| "Dil Lut Ke Mera Pyaar Se"
| rowspan=2| C. Satyam
| rowspan=2| Prem Dhawan
| Nitin Mukesh
|-
| "Hey Pintu, Hey Hey Chintu"
| Usha Mangeshkar, Mahendra Kapoor
|-
! Rowspan=5| ''Bolo He Chakradhari''
| "Bolo He Chakradhari"
| rowspan=5| Ravindra Jain
| rowspan=5| Kavi Pradeep
| rowspan=3| solo
|-
| "Jai Purushottam"
|-
| "O Shehar Ke Banke Babu"
|-
| "Jai Bolo Kanhaiya Laal Mere"
| Mahendra Kapoor
|-
|"O Re O Re O Kanhaai"
| Usha Mangeshkar
|-
!rowspan=2| ''Chacha Batija''
| "Hey La La Jhumo Zara Jhumo Nacho Jara"
| roespan=2| Laxmikant–Pyarelal
| Rowspan=2| Anand Bakshi
| Shailendra Singh, Mohammed Rafi
|-
| "Bhoot Raja Bahar Aaja"
| solo
|-
! Rowspan=4| ''[[Chakkar Pe Chakkar]]''
| "Kahan Kahan Kis Kis Din"
| rowspan=4| Kalyanji–Anandji
| rowspan=4|
| [[Kishore Kumar]]
|-
| "Nigahon Ka Adaaon Ka Wafaaon Ka Jafaaon Ka"
| rowspan=2| solo
|-
| "Toot Paini Marjaani Jawaani Kyun Aayi"
|-
| "Sone Ki Kataari Ya Chandi Ki Ya Pital Ki"
| [[Manna Dey]]
|-
! Rowspan=3| ''[[Chala Murari Heri Banne]]''
| "Khoye Ho Aakhir Kis Bekhudi Mein"
| rowspan=3| R D Burman
| rowspan=3| Yogesh
| rowspan=2| solo
|-
| "Do Pal Ki Hey Ye Zindagani"
|-
| "Pas Aao Na"
| Simi Garewal
|-
! Rowspan=3| ''Chalu Mera Naam''
| "Ruk Ruk Meri Raani"
| rowspan=3| Kalyanji–Anandji
| rowspan=3| Verma Malik
| Mohammed Rafi
|-
| "Is Rangbhari Mehfil Se Ek Cheez Churane Aaye Hai"
| Kishore Kumar
|-
| "Kahi Jo Baat Bado Ne Pehle"
| solo
|-
!''[[Chalta Purza]]''
| "Yeh Raat Ne Rang Jamaya Hai"
| rowspan=4| R D Burman
| Anand Bakshi
| solo
|-
! Rowspan=3| ''[[Chandi Sona]]''
| "Uljhan Hajar Koi Dale"
| rowspan=3| Majrooh Sultanpuri
| Manna Dey, Kishore Kumar
|-
| "Socha Tha Maine To Ae Jaan"
| rowspan=2| Kishore Kumar
|-
| "Aap Sa Koi Hasin"
|-
! rowspan=3| ''Charandas''
| "Kuchh Soch Ke Pyaar Kiya Hai"
| rowspan=3| Rajesh Roshan
| rowspan=3| Rajendra Krishan
| Mohammed Rafi
|-
| "Yeh Zanana Agar Raah Roke"
| Kishore Kumar
|-
|"Dil Ki Lagi Aisi Lagi"
| solo
|-
!rowspan=3| ''[[Chhaila Babu]]''
| "Yaar Dildaar Tujhe Kaisa Chahiye"
| rowspan=8| Laxmikant–Pyarelal
| rowspan=3| Anand Bakshi
| rowspan=3| Kishore Kumar
|-
| "Kal Raat Sadak Pe Ek Ladki"
|-
| "Humko Nikaloge Ghar Se Saajan"
|-
! Rowspan=3| ''[[Chhota Baap]]''
| "Tutegi Kalai Phir Hogi Na Sagai"
| rowspan=3| Bharat Vyas
| rowspan=3| solo
|-
| "Jab Bhi Dekhu Tu Kanha Ke"
|-
| "Mehendi Raccha Bindiya Saja"
|-
! rowspan=2| ''[[Chor Sipahee]]''
| "Ek Taraf Hai Ye Zamana"
| rowspan=2| Anand Bakshi
| Bhupinder Singh, Manna Dey, Mohammed Rafi
|-
| "Dekha Sahab O Sahab Kahna Aasana"
| solo
|-
! ''Darinda''
| "Ladki Kaahe Ki Bani"
| Kalyanji–Anandji
| Indeevar
| Kishore Kumar
|-
! Rowspan=4| ''[[Daku Aur Mahatma]]''
| "Angoothi Angoothi"
| rowspan=4| Ravindra Jain
| rowspan=4| Ravindra Jain
| rowspan=3| solo
|-
| "Suno Suno Re Mera Sandesh"
|-
| "Kajarwa Ne Maare Kayi Naujawan"
|-
| "Jaat Na Poochho Saddu Ki"
| Mohammed Rafi
|-
!rowspan=3| ''[[Darling Darling (1977 film)|Darling Darling]]''
| "Ek Main Hun Aur Ek Tu Aur Kya Chahiye"
| rowspan=3| R D Burman
| rowspan=3| Anand Bakshi
| rowspan=3| Kishore Kumar
|-
| "Raat Gayi Baat Gayi"
|-
| "Hello Darling, Kisi Naye Shahar Ka Naam Le Babu"
|-
! Rowspan=1| ''[[Dharam Veer (film)|Dharam Veer]]''
| "Bandh Ho Mutthi Toh Laakh Ki"
| rowspan=1| Laxmikant–Pyarelal
| rowspan=1| Anand Bakshi
| Lata Mangeshkar
|-
! Rowspan=2| ''Dhoop Chhaon''
| "Nazren Churake Baithi, Daaman Bachake Baithi"
| Rowspan=2| Shankar–Jaikishan
| Rowspan=7| Kaifi Azmi
| Rowspan=2| solo
|-
| "Jal Jaana Phighal Jaana"
|-
! Rowspan=5| ''Dil Aur Patthar''
| "Are Chipku Chuna Na Na"
| rowspan=5| Iqbal Qureshi
| Rowspan=4| solo
|-
| "Aayega Aa Ha Aayega Koi Aayega"
|-
| "Allah Na Jaanu Raam Na Jaanu"
|-
| "Oh Zulmi Tori Motor Car"
|-
| "Hun Ha Hu Hai Yahi To Zameen Aasmaan"
| Manna Dey
|-
!rowspan=4| ''[[Dildaar]]''
| "Hum Jaise Jo Dildaar Hote Hain"
| rowspan=4| Laxmikant–Pyarelal
| rowspan=4| Anand Bakshi
| rowspan=4| Kishore Kumar
|-
| "Gaon Mein Hote Haste Rote"
|-
| "Dekhna Kaise Dara Diya"
|-
| "Main Raja Tu Rani"
|-
! Rowspan=1| ''Dimple''
| "Nadaan Hoon, Sharmili Hoon"
| Vijay Singh
| Dev Kohli
| Vijay Singh
|-
! rowspan=3| ''[[Do Chehre]]''
| "Chali Thi Thumka De Ke Thaske"
| rowspan=3| Sonik–Omi
| rowspan=3| Bharat Vyas
| Minoo Purushottam
|-
| "Mai To Sapne Sanwar Kar Baithi"
| rowspan=2| solo
|-
| "Iss Raat Ke Sannate Mein"
|-
!''[[Do Sholay]]''
| "Yeh Bairi Mujhe Kala Mil Gaya"
| Sonik–Omi
| Saraswati Kumar Deepak
| solo
|-
!''[[Dream Girl (1977 film)|Dream Girl]]''
| "Duniya Ke Log"
| Laxmikant–Pyarelal
| Anand Bakshi
| solo
|-
!''Duniyadari''
| "Teen Baaje Bola Tha, Baaj Gaye Chaat"
| Shankar–Jaikishan
| M G Hashmat
| rowspan=2| Amit Kumar
|-
!Rowspan=2|''Ek Hi Rasta''
| "Dil Ko Mila Lo, Dil Ko Takra Lo"
|rowspan=2| Rajesh Roshan
|rowspan=2| Verma Malik
|-
| "Itni Jaldi Kahan Jaate Ho"
| Kishore Kumar
|-
!''[[Farishta Ya Qatil]]''
| "Kahin Dekha Na Dekha Aisa Shabaab"
| Kalyanji–Anandji
| Anjaan
| Mohammed Rafi
|-
!''Gayatri Mahima''
| "Deepak Hai Tu Piya"
| Chitragupt
| Bharat Vyas
| Mohammed Rafi
|-
! Rowspan=1| ''Gyani Ji''
| "Ek Pyaar Se Yaara Dekho Badal Jaaye Zindagani"
| Sardar Malik, Prem Nath
| Qamar Jalalabadi
| Mohammed Rafi, Pascal Paul, Jaspal Singh
|-
!''[[Haiwan]]''
| "Pagal Pagal Hai Yeh Mausam"
| Bappi Lahiri
| Pradeep Roychowdhury
| Hemant Kumar
|-
!''[[Hatyara (1977 film)|Hatyara]]''
| "Mere Noor Ke Charche Door Door"
| rowspan=2| Kalyanji–Anandji
| Vishweshwar Sharma
| solo
|-
!''[[Hira Aur Patthar]]''
| "Na Jaao Saiyan Riske"
| Maya Govind
| solo
|-
!rowspan=4| ''[[Hum Kisise Kum Naheen]]''
| "Humko Toh Yaara Teri Yaari"
| rowspan=4| R D Burman
| rowspan=4| Majrooh Sultanpuri
| rowspan=2| Kishore Kumar
|-
| "Mil Gaya Humko Teri Yaari"
|-
| "Hai Agar Dushman"
| rowspan=2| Mohammad Rafi
|-
| "[[Yeh Ladka Haye Allah]]"
|-
!''[[Imman Dharam]]''
| "Kuncham Kuncham"
| Laxmikant–Pyarelal
| Anand Bakshi
| Mukesh, Mahendra Kapoor
|-
!''[[Inkaar (1977 film)|Inkaar]]''
| "Chhodo Yeh Nigaahon Ka Ishaara"
| Rajesh Roshan
| Majrooh Sultanpuri
| Kishore Kumar
|-
! Rowspan=3| ''Jadu Tona''
| "Har Sannata Kuchh Kehta Hai"
| rowspan=3| Hemant Bhosle
| rowspan=3| Balkavi Bairagi
| K. J. Yesudas
|-
| "Sawari Saloni Jamna Ka Jeewan"
| K. J. Yesudas, Shivangi Kolhapure
|-
| "Sevak Shri Ram Ke"
| Brij Bhishan, Hemant Kumar
|-
! Rowspan=3| ''Jagriti''
| "Meharbaan Kaise Kaise Kadardan"
| rowspan=3| Laxmikant–Pyarelal
| rowspan=3| Sahir Ludhianvi
| rowspab=2| solo
|-
| "Ai Mere Nanhe Gulfam Meree Nind Tere Naam"
|-
| "One Two Three Four Ae Hero"
| Dilraj Kaur, Meenu Purushottam, Suman Kalyanpur
|-
!''Jai Dwarkadheesh''
| "Kaise Kaise Umar Aayi"
| Ajay Swami
| Bharat Vyas
| solo
|-
!''[[Jay Vejay]]''
| "Sone Jaisi Tumhari Jawani"
| Rajesh Roshan
| Majrooh Sultanpuri
| Bhupinder Singh, Usha Mangeshkar
|-
! Rowspan=4| ''[[Jeevan Mukt]]''
| "Humne Kabhi Eocha Nahin"
| Rowspan=4| R D Burman
| Rowspan=4| Yogesh
| Rowspan=4| solo
|-
|"Lehra Ke Dagar, Chali Jaati Hai Kidhar"
|-
| "He Shyam Kahu Kaise"
|-
| "Aao Wahi Ham Chale"
|-
! Rowspan=4| ''[[Kachcha Chor]]''
| "Kabhi Gareebo Se Pyaar Kar Le"
| rowspan=4| Laxmikant–Pyarelal
| rowspan=4| Qamar Jalalabadi
| Kishore Kumar
|-
| "Pehle Hum Muskuraye Phir Woh Mushkuraye"
| solo
|-
| "Dil Ki Chori Jaanu Na"
| Mahendra Kapoor
|-
| "Dhola Dhola Dhola Sautan Sang Na Jaye"
| Usha Mangeshkar
|-
! Rowspan=1| ''[[Kalabaaz]]''
| "Are Humse Jo Takrayega"
| Kalyanji–Anandji
| Anand Bakshi
| Kishore Kumar
|-
!''Kali Raat''
| "Arre Mera Naam Chalta Raam"
| Laxmikant–Pyarelal
| Majrooh Sultanpuri
| Kishore Kumar
|-
!rowspan=4| ''[[Karm]]''
| "Samay Tu Dheere Dheere Chal"
| rowspan=4| R D Burman
| rowspan=2| Indrajit Singh Tulsi
| rowspan=3| Kishore Kumar
|-
| "Samay Tu Jaldi Jaldi Chal"
|-
| "Maine Dekha Tujhe"
| Anand Bakshi
|-
| "Jab Charon Taraf Andhera Ho"
| Bharat Vyas
| Mahendra Kapoor
|-
! Rowspan=3| ''[[Khel Khilari Ka]]''
| "Jaan Ab Ja Rahi Hai"
| Rowspan=3| Kalyanji–Anandji
| rowspan=6| Rajendra Krishan
| [[Manna Dey]]
|-
| "Pyar Bada Hai Ya Jaan Badi Hai"
| Lata Mangeshkar
|-
| "Sabak Pada Hai Jab Se"
| Kishore Kumar, Manna Dey, Kanchan
|-
! Rowspan=3| ''[[Khel Kismat Ka]]''
| "Hum Tum Jo Rahe Ek Ho Ke"
| Kishore Kumar
|-
| "Chanda Chode Chandani"
| rowspan=2| solo
|-
| "Dil Jiske Liye Bekarar"
|-
!''[[Khoon Pasina]]''
| "Raja Dil Maange Chavanni Uchhalke"
| Kalyanji–Anandji
| Anjaan
| solo
|-
! Rowspan=2| ''[[Kotwal Saab]]''
| "Hamara Balma Beimaan"
| rowspan=2| Ravindra Jain
| rowspan=2| Ravindra Jain
| rowspan=2| solo
|-
| "Saathi Re Bhool Na Jaana"
|-
! rowspan=3| ''Ladki Jawab Ho Gai''
| "Ek Paheli Tum Se Punchu"
| rowspan=3| Sonik–Omi
| rowspan=2| Vishweshwar Sharma
| Kishore Kumar
|-
| "Ek To Vaisi Hi Deewani"
| solo
|-
| "Jawani Hoti Hai Sau Aftaab Ka Jaadu"
| Shadab
| Mahendra Kapoor
|-
! Rowspan=3| ''[[Maha Badmaash]]''
| "Nazar Zara Badli Badli Si"
| rowspan=3| Ravindra Jain
| Kulwant Jani
| Mohammed Rafi
|-
| "Abhi Zarra Si Der Mein Yeh Raat Gungunayegi"
| Naqsh Lyallpuri
| rowspan=2| solo
|-
| "Yun Husn Ka Jalwa"
| Noor Devasi
|-
! Rowspan=2| ''[[Mama Bhanja]]''
| "Baat Yeh Kaisi Keh Di Zalim"
| rowdpan=2| Rajesh Roshan
| rowspan=2| Rajendra Krishan
| Mohammed Rafi
|-
| "Meri Jhilmil Jhilmil Bindiya"
| Usha Mangeshkar
|-
! Rowspan=3| ''Mamta''
| "Hai Yeh Pal Chanchal Badi Hulchul"
|Rowspan=3| Shyamal Mitra
|Rowspan=3| Yogesh
| Shyamal Mitra
|-
| "Kabhi Toh Miloge, Kahin Toh Miloge"
| Rowspan=2| solo
|-
| "Nanhe Munne Pyare Abhi Toh Dulare"
|-
! Rowspan=2| ''[[Mastan Dada]]''
| "Dil Hai Tera Jaisa Bhi Hai"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Majrooh Sultanpuri
| solo
|-
| "Tum Jo Mile Ho Gair Se"
| Mahendra Kapoor, Jaani Babu Qawwal
|-
! Rowspan=5| ''[[Mera Vachan Geeta Ki Kasam]]''
| "Pyaar Kiya Nahin Jaata"
| rowspan=5| Shankar–Jaikishan
| rowspan=5| Hasrat Jaipuri
| rowspan=5| solo
|-
| "Man Mohan Se Preet Badhayi"
|-
| "Mora Resham Ka Ghagra"
|-
| "Doongi Yeh Dil Tujhe"
|-
| "Achchha Lagta Hai Yeh Bhola Bhala Sanwariya"
|-
! Rowspan=2| ''[[Mukti (1977 film)|Mukti]]''
| "Main Jo Chala Peekar"
| rowspan=2| R D Burman
| rowspan=2| Anand Bakshi
| Kishore Kumar
|-
| "Dil Saajan Jalta Hai, Yeh Badan Jalta Hai"
| solo
|-
! Rowspan=3| ''[[Naami Chor]]''
| "Aapse Mujhe Aapse Maniye Na Maniye"
| rowspan=3| Kalyanji–Anandji
| S. H. Bihari
| solo
|-
| "Aaye Hai Jo Mehfil Mein"
| rowspan=2| Shabab
| [[Mahendra Kapoor]]
|-
| "Gori Tori Mathe Pe Saj Gayi Bindiya"
| [[Usha Mangeshkar]]
|-
!''Niyaz Aur Namaz''
| "Muhabbat Sab Ki Dil Mein Hai"
| Shanji–Ghanshamji
| Hasrat Jaipuri
| solo
|-
!''[[Palkon Ki Chhaon Mein]]''
| "Allah Megh De"
| Laxmikant–Pyarelal
| Gulzar
| Kishore Kumar
|-
! Rowspan=4| ''[[Pandit Aur Pathan]]''
| "Tune Pyar Se Liya Jo Mera Naam"
| rowspan=4| Sonik–Omi
| rowspan=4| M G Hashmat
| solo
|-
| "Kaise Bholu Meri Khatir Tune"
| rowspan=2| Manna Dey, Mohammed Rafi, Dilraj Kaur, Kumar Sonik, Sunita
|-
| "Bataye Rakhi Ka Tyohaar"
|-
| "Bam Bam Bhole, Khila De Bhang Ke Gole"
| Manna Dey
|-
! Rowspan=2| ''Parvarish''
| "Aji Thehro Zara Kuchh Socho"
| Rowspan=2| Laxmikant–Pyarelal
| Rowspan=2| Majrooh Sultanpuri
| Aarti Mukherjee, Shailendra Singh, Amit Kumar
|-
| "Aaiye ShaShauq Se Kahiye"
| Kishore Kumar
|-
!''[[Priyatama]]''
| "Chham Chham Barse"
| Rajesh Roshan
| Anjaan
| solo
|-
! Rowspan=3| ''Ram Bharose''
| "Neend Udeygi Tera Chein Udega"
| Rowspan=3| Ravindra Jain
| Hasrat Jaipuri
| Mohammed Rafi
|-
| "Oh Husno Wafa Ke Diwano"
| Ravindra Jain
| Kishore Kunar
|-
| "Ha Jee Le Gaya Sajna"
| Dev Kohli
| solo
|-
! Rowspan=4| ''[[Ranga Aur Rajaa]]''
| "Raja Mere Dil Ke Raja"
| rowspan=4| Sonik–Omi
| rowspan=4| Verma Malik
| Mohammed Rafi
|-
| "Are Re Re Jaata Kaha Hai"
| rowspan=2| solo
|-
| "Ho Gayi Yaari Jo Tujhse Yara"
|-
| "Mubarak Ho Khushi Ka Mauka Hai"
| Manna Dey
|-
! Rowspan=2| ''Safed Jhooth''
| "Chori Chori Aiyo Raadhe Jamuna Kinare"
| rowspan=2| Shyamal Mitra
| Rowspan=2| Yogesh
| Rowspan=2| solo
|-
| "Matwale Pal Ye Kar Gaye Pagal Re"
|-
!''Sahib Bahadur''
| "Yeh Pyaar Ka Nasha, Nasha Hai Ausa"
| Madan Mohan
| Rajendra Krishan
| Kishore Kumar
|-
! Rowspan=3| ''[[Shaque]]''
| "Ek Dil Hai Ek Jaan Hai"
| rowspan=3| Vasant Desai
| rowspan=3| Gulzar
| Mohammed Rafi
|-
| "Megha Barasne Laga Hai Aaj Ki Raat"
| Rowspan=2| solo
|-
| "Kaha Aa Gayi Mai Ye Kaha Aa Gayi Main"
|-
! Rowspan=3| ''[[Shirdi Ke Sai Baba]]''
| "Deepavali Manaayi Suhani"
| Rowspan=3| Pandurag Dikshit
| rowspan=3| Dev Kishan
| rowspan=3| solo
|-
| "O Dukhiyo Ke Daata"
|-
| "Dar Bhi Chhoda, Tujhe Man Mein Basa Ke"
|-
! Rowspan=2| ''Subah Zaroor Aayegi''
| "Meri Aanchal Ka Diya Hai Tu"
|rowspan=2| C. Arjun
| Indeevar
| solo
|-
| "Bharat Ke Hum Rehnewale"
| Jan Nisar Akhtar
| Usha Mangeshkar
|-
!''[[Swami (1977 film)|Swami]]''
| "Aaj Ki Raat Hogi Kuchh Aisi Baat"
| Rajesh Roshan
| Amit Khanna
| K. J. Yesudas
|-
! Rowspan=3| ''[[Taxi-Taxie]]''
| "Humein Toh Aaj Aisi Baat Par"
| rowspan=3| Hemant Bhosle
| rowspan=3| Majrooh Sultanpuri
| rowspan=2| solo
|-
| "Bhavron Kj Gungun"
|-
| "Laayi Kahan Aye Zindagi"
| Lata Mangeshkar, chorus
|-
! Rowspan=2| ''Thief of Baghdad''
| "Daroga Babu Hume Band Kar Lo"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Anand Bakshi
| Usha Mangeshkar
|-
| "Teri Khatao Ki Kya Du Saza"
| Sulakshana Pandit
|-
! Rowspan=2| ''[[Tyaag (1977 film)|Tyaag]]''
| "Tujhe Pyaas Hai Mere Paas Hai"
| rowspan=2| S. D. Burman
| rowspan=2| Anand Bakshi
| solo
|-
| "Kora Kagaz Pe Likhwa Le"
| Kishore Kumar
|-
! Rowspan=4| ''[[Veeru Ustad]]''
| "Aisi Shaam Kabhi Na Aayi Hai"
| rowspan=4| Sonik–Omi
| rowspan=4| M G Hashmat
| Om, Dilraj Kaur
|-
| "Khol De Tijori Armano Ki"
| Dilraj Kaur
|-
| "Jai Shiv Shankar Jhuth Bolne Wale Ka"
| Dilraj Kaur, Usha Mangeshkar
|-
| "Mar Jaungi Main Gadi Nichey Aake"
| Usha Mangeshkar, Kumar Sonik, Jaspal Singh
|-
! Rowspan=2| ''[[Vishwasghaat]]''
| "Duniya Mein Sukh Bhi Hai, Dukh Bhi Hai"
| Rowspan=2| R D Burman
| Rowspan=2| Gulshan Bawra
| Rowspan=2| solo
|-
| "Har Cheez Ki Hadh Hoti Hai"
|-
! Rowspan=3| ''[[Wohi Baat]]''
| "Zahar Deta Hai Mujhe Koi" (female)
| Rowspan=3| Jaidev
| Rowspan=3| Naqsh Lyallpuri
| Rowspan=2| solo
|-
| "Zindagi Hum Tere Haal Par"
|-
| "Zahar Deta Hai Mujhe Koi" (duet)
| Bhupinder Singh
|-
! Rowspan=3| ''[[Yaaron Ka Yaar]]''
| "Pehli Pehli Baar Mujhko Yeh Kya Ho Gaya"
| rowspan=3| Kalyanji–Anandji
| Rowspan=3| Verma Malik
| [[Mohammed Rafi]]
|-
| "Mere Lal, Mujh Pe Kar Tu"
| rowspan=2| solo
|-
| "Dekho Mehfil Mein Main"
|-
!''[[Yehi Hai Zindagi]]''
| "Kaali Kaali Kaise Kaate Raaten"
| Rajesh Roshan
| Anand Bakshi
| solo
|-
! Rowspan=4| ''[[Zamaanat (1977 film)|Zamaanat]]''
| "Kahe Mujhse Kare Tu Chhedchar"
| rowspan=4| Sonik–Omi
| rowspan=4| Indarjeet Singh Tulsi
| Mohammed Rafi
|-
| "Teri Diwani Nachegi Gayegi"
| rowspan=3| solo
|-
| "Yak Tuk Migla Giggla Bola"
|-
| "Main Hoon Rani Jaduwali"
|-
|}
=== 1978 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
!''[[Aakhri Daku]]''
| "Kahin Na Jiya Laage Toh"
| Kalyanji–Anandji
| Anjaan
| solo
|-
! rowspan=2| ''Aatish''
| "Aji Zara Si Baat Par"
|rowspan=2| Jaidev
|rowspan=2| Naqsh Lyallpuri
|rowspan=2| solo
|-
| "Haye Main mari"
|-
! Rowspan=2| ''[[Amar Shakti]]''
| "Sahibon Hum Aapko"
| rowspan=2| Laxmikant–Pyarelal
| Rowspan=2| Anand Bakshi
| Kishore Kumar
|-
| "Thehro Thehro"
| solo
|-
! Rowspan=3| ''Anjaam''
| "Janeman Chod Kar Apni Sharmo Haya"
| Rowspan=5| Kalyanji–Anandji
| Nandi Khanna
| rowspan=2| solo
|-
| "Kasam Hai Tujhko Aaj To Sun Le"
| rowspan=2| Vishweshwar Sharma
|-
| "O Gori Yunhi Sharm Agar Mujhse Jo Karti Rahi"
| Mohammed Rafi
|-
! Rowspan=2| ''[[Anjane Mein]]''
| "Dil Ka Rishta Jod Diya Hai"
| rowspan=2| Gulshan Bawra
| Rowspan=4| [[Kishore Kumar]]
|-
| "Meri Jaan Zara Thik Se Dekho"
|-
! Rowspan=5| ''Anpadh''
| "Salamat Raho Tum Ke Mujhko Jami Se Utha Ke"
| rowspan=5| Hemant Kumar
| rowspan=5| Majrooh Sultanpuri
|-
| "Ae Ji Kaho Kya Haal Hai Ae Ji Kaho Kya Haal Hai"
|-
| "Humra Mukhda Chand Ke Tukda Humra Mukhda Chand Ke Tukda"
| rowspan=3| Mohammed Rafi
|-
| Allah Miya Jodi Salamat Rakhna"
|-
| "Ghar Ke Andar Ammi Baba"
|-
! Rowspan=7| ''[[Apna Khoon]]''
| "Kuchh Aur Bhi Tujhse"
| rowspan=7| Sonik–Omi
| rowspan=7| Verma Malik
| rowspan=4| Mohammed Rafi
|-
| "Hakim Tarachand Jo Rupaye Maange Paanch"
|-
| "Sun Sajna Kuch Aur Bhi Tujhse Kahna Hai"
|-
| "Mere Budhape Ko Tu Cash Karlo"
|-
| "Char Char Hai Lutere"
| Omi
|-
| "Mujhpe Bhi To Dalo Ek Nazar"
| rowspan=2| solo
|-
| "Thehriye Huzur Suniye Janaab"
|-
! ''[[Atithee]]''
| "Tu Hi Hai He Prabhi"
| Kalyanji–Anandji
| Verma Malik
| Usha Timothy, Kanchan
|-
!''Bade Miyaan''
| "Intezaar Sii Mauke Ka Tha"
| R D Burman
| Majrooh Sultanpuri
| Kishore Kumar
|-
! Rowspan=3| ''[[Bandie]]''
| "Range Na Mann Rang Mein Agar"
| rowpsan=3| Shyamal Mitra
| Rowspan=3| Indeevar
| Kishore Kumar
|-
| "Honth Bhale Inkar Kare Ikrar Nahi Chhupta Hai
| rowspan=2| solo
|-
| "Dil Use Dungi Jo Ho Sare Zamane Se Niraala"
|-
!''[[Bebus]]''
| "Pyaar Jab Kiya To Dil Ka Aetbaar Karna"
| R D Burman
| Anand Bakshi
| Kishore Kumar
|-
! ''[[Besharam (1978 film)|Besharam]]''
| "Mere Kis Kaam Ki Yeh Jawani"
| Kalyanji–Anandji
| Yogesh
| solo
|-
! Rowspan=2| ''[[Bhakti Mein Shakti]]''
| "Saasu Meri Mangti Hai Munna Re"
| rowspan=2| Sonik–Omi
| rowspan=2| Inderjeet Singh Tulsi
| Kumar Sonik
|-
| "Sun Kamla Sun Bimla"
| Dilraj Kaur
|-
! Rowspan=2| ''[[Bhola Bhala]]''
| "Kaali Kaali Raaton Mein"
| rowspan=2| R D Burman
| rowspan=2| Anand Bakshi
| rowspan=2| solo
|-
| "Kal Ki Fikar Karega Jo"
|-
! Rowspan=6| ''[[Bhookh (1978 film)|Bhookh]]''
| "Balma Anadi Rang Dale Holi Ka"
| rowspan=6| Sonik–Omi
| rowspan=6| Verma Malik
| rowspan=2| Mohammed Rafi
|-
| "Us Maalik Ki Daya Se Ab"
|-
| "Kaam Karo Ha Kaam Karo"
| Mohammed Rafi, Dilraj Kaur, Kumar Sonik
|-
| "Jai Bolo Bolo Bholenath Ki"
| Kumar Sonik, Mohammed Rafi
|-
| "Ghunghru Chhanke Bin Tore Kaise"
| solo
|-
| "Tapti Dupariya Ma Paon Jalat More"
| Dilraj Kaur
|-
!''[[Chakravyuha (1978 film)|Chakravyuha]]''
| "Shaadi Karne Se Pyaar"
| Laxmikant–Pyarelal
| Anand Bakshi
| Kishore Kumar
|-
!''Chautha Paalana''
| "Chautha Paalana"
| S. N. Tripathi
| Balkavi Bairagi
| solo
|-
! Rowspan=2| ''Chhoti Bahen''
| "Jhanan Jhanan Jhanke"
| rowspan=2| Avinash Vyas
| rowspan=2| Pradeep Oatel
| Asit Desai
|-
| "Chakki Gham Gham Gaaye"
| solo
|-
! Rowspan=4| ''[[Chor Ho To Aisa]]''
| "Gusse Mein Tan Ke Chal Padi Main"
| rowspan=4| R D Burman
| rowspan=4| Majrooh Sultanpuri
| rowspan=2| solo
|-
| "Piya Agar Abhi Na Toh Kabhi Na"
|-
| "Yaha Se Hum Uthe Toh"
| Manna Dey, Mohammed Rafi
|-
| "Masti Mein Baith Ke Lagao"
| Hemant Kumar, Kishore Kumar
|-
!''[[Chor Ke Ghar Chor]]''
| "Nathaniya Kaga Lekar Bhaaga"
| Kalyanji–Anandji
| Verma Malik
| solo
|-
! Rowspan=2| ''[[Daaku Aur Jawan]]''
| "Rakh Di Haay Beech Sadak Maine Gagariya"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Anand Bakshi
| [[Kishore Kumar]]
|-
| "Jhoola Jhoolat Kanhaiya Re"
| [[Lata Mangeshkar]]
|-
!''Daan Dahej''
| "Jab Se Dil"
| colspan=2| N/A
| Kishore Kumar
|-
! Rowspan=4| ''[[Damaad]]''
| "Zindagi Ke Safar Mein Na Jaane"
| rowspan=4| Hemant Bhosle
| rowspan=4| Yogesh
| rowspan=2| Mohammed Rafi
|-
| "Mujhe Tadpati Rahi Roz Stati Rahi"
|-
| "Jaage Jaage Nainon Mein Andekhe Sapne"
| solo
|-
| "Chalo Na No No Please"
| Amol Palekar
|-
! Rowspan=2| ''[[Darwaza]]''
| "Lo Hamen Bahon Mein"
| Rowspan=2| Sapan–Jagmohan
| rowspan=2| Naqsh Lyallpuri
| rowspan=2| solo
|-
| "Ae Ji Kahan Gum Ho"
|-
! Rowspan=2| ''[[Dil Aur Deewaar]]''
| "Yeh Dhuan Kahan Se Utha Hai"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Anand Bakshi
| solo
|-
| "Tod De Tu Is Bandhan Ko, Yeh Farz Nahin"
| [[Lata Mangeshkar]]
|-
!''[[Do Musafir]]''
| "More Waiyan Bhaye Kotwal"
| rowspan=2| Kalyanji–Anandji
| Indeevar
| solo
|-
!''[[Don (1978 film)|Don]]''
| "Yeh Mera Dil"
| Indeevar
| solo
|-
! Rowspan=6| ''[[Ganga Ki God Mein]]''
| "Bhanwara O Bhanwata Yeh To Bata"
| rowspan=6| Vishwanathan–Ramamurthy
| rowspan=6| Prem Dhawan
| Rowspan=3| solo
|-
| "Hat Chhod Raah Mori Julmi"
|-
| "Paalanhari Pranon Se Pyari O Gange"
|-
| "Yeh To Keh Chand Hamen"
| rowspan=2| P. B. Sreenivas
|-
| "Naache Re Man Mora"
|-
| "Le Hi Gayi Baaton Mein Tu"
| Manna Dey
|-
! Rowspan=2| ''[[Ganga Ki Saugandh]]''
| "Aankh Ladi Humse" (female)
| rowspan=2| Kalyanji–Anandji
| rowspan=2| Anjaan
| solo
|-
| "Aankh Ladi Humse" (duet)
| [[Kishore Kumar]]
|-
!''Geeta Banee Geet''
| "Suno Toh Meri Jaan"
| Manik Banerjee
| Gauhar Kanpuri
| Manna Dey
|-
!''[[Ghar (film)|Ghar]]''
| "Botal Se Ek Baat Chali Hai"
| R D Burman
| Gulzar
| Mohammed Rafi
|-
!''Gunaahon Ka Devta''
| "Chhapan Chhuri Main"
| R D Burman
| Vitthalbhai Patel
| solo
|-
! Rowspan=2| ''[[Hamara Sansar]]''
| "Taji Taji Lelo Bhaji"
| rowspan=2| Ravindra Jain
| rowspan=2| Ravindra Jain
| solo
|-
| "Zulfen Jo Munh Pe"
| [[Manna Dey]]
|-
! Rowspan=3| ''[[Heeralaal Pannalal (1978 film)|Heeralal Pannalal]]''
| "Kisne Dekha Hai Kal"
| rowspan=3| R D Burman
| rowspan=3| Majrooh Sultanpuri
| R D Burman
|-
| "Kahiye Kahan Se Aana Hua"
| Kishore Kumar, Lata Mangeshkar, Bhupinder Singh
|-
| "Main Dhal Gayi Rang Mein Tere"
| Kishore Kumar
|-
! Rowspan=2| ''Hunterwali 77''
| "Zulmon Sitam Par Itranewale"
| rowspan=2| Anu Malik
| rowspan=2| Hasrat Jaipuri
| rowspan=2| solo
|-
| "Mere Kitne Roop, Kabhi Chhaya Kabhi Dhoop"
|-
!''Insaan Aur Insaan''
| "Holi Aayi Re Dulhan Banke"
| Ratandeep–Hemraj
| Tajdar Taj
| Mahendra Kapoor, Chandrani Mukherjee, S. Balbir
|-
! Rowspan=2| ''Jaan Se Pyaara''
| "Pyaar Ka Jalwa Bhadke Jiya Mein"
| rrowspan=2| R D Burman
| rowspan=2| Majrooh Sultanpuri
| rowspan=2| solo
|-
| "Main Akeli Haseena"
|-
! Rowspan=3| ''Jai Ganesh''
| "Tu Hai Mera Sanwarita"
| rowspan=3| S. N. Tripathi
| Rowspan=3| Bharat Vyas, Vishweshwar Sharma
| solo
|-
| "Jai Mangalmurti Moriya"
| Poornima
|-
| "Hey Gajanand Anand Kand Mai Aayi"
| Mahendra Kapoor
|-
! Rowspan=3| ''[[Jalan]]''
| "Jo soch Ke Karega, Woh Pyaar Kya Karega"
| rowpsan=3| Madan Mohan
| Rowspan=3| Indeevar
| Mohammed Rafi
|-
| "Aise Kyon Maara Tune Bhari Jawaani Mein"
| solo
|-
| "Mere Hothon Ka Jaam Saari Mahfil Ke Naam"
| Minoo Purushottam
|-
! Rowspan=3| ''[[Johnny Uska Naam]]''
| Humse Jo Kaanon Mein Kaho"
| Rowspan=3| Sapan–Jagmohan
| rowspan=3| Naqsh Lyallpuri
| rowspan=3| solo
|-
| "Aa Ab Toh Saajan"
|-
| "Humse Sharmate Hain"
|-
!''[[Junoon (1978 film)|Junoon]]''
| "Ghir Aayi Kari Ghata"
| Vanraj Bhatia
| Yogesh Praveen
| Varsha Bhosle
|-
! Rowspan=3| ''[[Kaala Aadmi]]''
| "Aaj Hamen Ek Jaan Ka Dushman"
| rowspan=3| Laxmikant–Pyarelal
| Rowspan=3| Verma Malik
| [[Mohammed Rafi]], [[Manna Dey]]
|-
| "Kisi Tarah Se Koi Raat Ko Lamba Kar Do"
| [[Usha Mangeshkar]]
|-
| "Bujha Do Diye"
| solo
|-
! Rowspan=3| ''[[Karmayogi (1978 film)|Karmayogi]]''
| "Aaiye Huzoor, Aaiye Baithiye"
| rowspan=3| Kalyanji–Anandji
| rowspan=3|Verma Malik
| rowspan=2| solo
|-
| "Mohabbat Hoon, Haqeeqat Hoon"
|-
| "Aaj Faisla Ho Jayeg"
| [[Kishore Kumar]], [[Mohammed Rafi]]
|-
! Rowspan=4| ''[[Kasme Vaade]]''
| "Aati Rahengi Baharen"
| rowspan=4| R D Burman
| rowspan=4| Gulshan Bawra
| Kishore Kumar, Amit Kumar
|-
| "Mile Jo Kadi Kadi Ek Zanjeer Bane"
| Kishore Kumar, Mohammed Rafi
|-
| "Pyaar Ke Rang Se Tu Dil Ko"
| Anand Kumar C.
|-
| "Gumsum Kyun Hai Sanam"
| solo
|-
!''Kharidaar''
| "Aaj Tujhe Main Aisa Jalwa Dikhaoongi"
| R D Burman
| Gulshan Bawra
| solo
|-
! Rowspan=6| ''[[Kissa Kursi Ka]]''
| "Jan Gan Desh Ke Gaayak Hai" (version 1)
| rowspan=6| Raghunath Seth
| rowspan=6| Rakesh
| rowpsan=6| [[Mahendra Kapoor]]
|-
| "Jan Gan Desh Ke Gaayak Hai" (version 2)
|-
| "Jan Gan Desh Ke Gaayak Hai" (version 3)
|-
| "Jan Gan Desh Ke Gaayak Hai" (version 4)
|-
| "Jan Gan Desh Ke Gaayak Hai" (version 5)
|-
| "Jan Gan Desh Ke Gaayak Hai" (version 6)
|-
! Rowspan=3| ''[[Lal Kothi]]''
| "Ae Mere Dil Dewane"
| rowspan=3| Sapan–Jagmohan
| rowspan=3| Naqsh Lyallpuri
| rowspan=2| solo
|-
| "Dil Se, Bhulayi Gayi Na Teri Yaad"
|-
| "Dhala Din Aise"
| [[Amit Kumar]]
|-
!''Maa Baap''
| "Amrit Bhara Hai Antar Jiska"
| Avinash Vyas
| Bharat Vyas
| solo
|-
!rowspan=3| ''Mahima Shri Ram Ki''
| "Bol Sakhi Bol Bhed Zara Khol"
| rowspan=3| Govind–Naresh
| Rowspan=3| B. D. Mishra
| Usha Mangeshkar
|-
| "Main Hoon Teri"
| Mahendra Kapoor
|-
| "O Nishkalank Gange"
| solo
|-
!''[[Main tulsi Tere Aangan Ki]]''
| "Chhap Tilak Sab Chhini Re"
| Laxmikant–Pyarelal
| Anand Bakshi
| Lata Mangeshkar
|-
! Rowspan=2| ''Mauqaa''
| "Gaya Dil Haathon Se"
|rowspan=2| Asit Ganguly
| Mahendra Dalvi
| Bhupinder Singh
|-
| "Sadkon Ka Raaja, Sabka Hoon Saathi"
| Abhilash
|-
!''[[Mera Rakshak]]''
| "Kya Hua Tujhe Kya Hua"
| colspan=2| Ravindra Jain
| solo
|-
! Rowspan=3| ''Mezaan''
| "Koi Dil Ka Haal Na Jaane"
| rowspan=4| R D Burman
| rowspan=3| Nida Fazli
| rowspan=2| Hariharan
|-
| "Dil Hai Tera Ghar"
|-
| "Gussa Hokar"
| Amit Kumar, R D Burman
|-
!''Mr. Hasmukh''
| "Jo Hoga Dekha Jaayega, Aao Hum Tum pyaar Karein"
| Anand Bakshi
| Kishore Kumar
|-
!''Muqable Ki Raat''
| "Mujhe Ek Ladka Chahiye"
| Iqbal Qureshi
| Fauk Jami
| Mohammed Rafi
|-
! Rowspan=3| ''Murder On Highway''
| "Saawan Ki Pari, Chup Hai Khadi"
| rowspan=3| C. Arjun
| rowspan=3| Asad Bhopali
| Mohammed Rafi
|-
| "O Matwale Jaam Utha Le"
| rowspan=2| solo
|-
| "Aap Khoobsurat Hai"
|-
! Rowspan=3| ''[[Muqaddar Ka Sikandar]]''
| "O Sathi Re Tere Bina Bhi Kya Jeena" (female)
| rowspan=3| Kalyanji-Anandji
| rowspan=3| Anjaan
| rowspan=2| solo
|-
| "Wafa Jo Na Ki To Jafa Bhi Na Kije"
|-
| "Pyar Zindagi Hai Pyar Bandagi Hai"
| Lata Mangeshkar, Mahendra Kapoor
|-
! Rowspan=2| ''Nageena''
| "Tere Mere Pyaar Ka Andaaz Hai Nirala"
| rowspan=2| Shankar–Jaikishan
| rowspan=2| Hasrat Jaipuri
| Kishore Kumar
|-
| "Dil Kis Kisko Doongi Main"
| solo
|-
!''Naukri''
| "Teri Duhayi Harjaai, Tere Naam Se Badnaam Ho Gaye"
| R D Burman
| Anand Bakshi
| solo
|-
!''Nawab Sahib''
| "Ek Khwab-e-Tamanna Bhule The"
| C. Arjun
| Sahir Ludhianvi
| solo
|-
! Rowspan=2| ''[[Naya Daur (1978 film)|Naya Daur]]''
| "Mujhe Doston Tum Gale Se Laga Lo"
| rowspan=2| R D Burman
| rowspan=2| Anand Bakshi
| [[Mohammed Rafi]], [[Danny Denzongpa]]
|-
| "Chalo Kahin Aur Chalte Hain"
| [[Kishore Kumar]]
|-
!''Nazrana''
| "Ek Roz Mujhse Poochha Kisi Ne"
| R D Burman
| Yogesh
| solo
|-
!''Pal Do Pal Ka Saath''
| "Yeh Radha Kanhaiya Ke Naam Kaise"
| Shyam Sagar
| Bairagi Balkavi
| solo
|-
! Rowspan=5| ''[[Parmatma]]''
| "Pyar Ka Tum Badla"
| rowspan=5| K. Babuji
| rowspan=5| Indeevar
| rowspan=2| solo
|-
| "Apni Nazar Mein"
|-
| "Aankh Ladti Hai"
| chorus
|-
| "Ty Sab Ki Maata"
| Ganga Prasad & chorus
|-
| "Surangani"
| [[Bhupinder Singh (musician)|Bhupinder]] & chorus
|-
! Rowspan=2| ''[[Pati Patni Aur Woh (1978 film)|Pati Patni Aur Woh]]''
| "Ladki Cycle Wali"
| rowspan=2| Ravindra Jain
| rowspan=2| Anand Bakshi
| [[Mahendra Kapoor]]
|-
| "Thande Thande Paani Se Nahana"
| Mahendra Kapoor, [[Sushma Shrestha|Poornima]]
|-
!''[[Phandebaaz]]''
| "Tera Dimaag Aur Mera Shabab"
| R D Burman
| Anand Bakshi
| solo
|-
!''[[Phool Khile Hain Gulshan Gulshan (film)|Phool Khile Hain Gulshan Gulshan]]''
| "Jo Insan Jitna Hi Paseena Bahaye"
| Laxmikant–Pyarelal
| Rajendra Krishan
| Manna Dey, Mohammed Rafi
|-
! Rowspan=3| ''[[Premi Gangaram]]''
| "Laddu Vand Di Gali De"
| rowspan=3| Sonik–Omi
| rowspan=3| Verma Malik
| rowspan=2| solo
|-
| "Billiya Billiya Aakkha De Wich"
|-
| "Ik Mahi Dil Ko Das Gaya"
| Rani Gairola
|-
! Rowspan=3| ''[[Rahu Ketu]]''
| "Yeh Surahi Kare"
| Rowspan=3| Kalyanji–Anandji
| rowspan=3| Verma Malik
| rowspan=3| solo
|-
| "Mujhe Chhuna Na"
|-
| "Thehri Tujhpe Meri Nazar"
|-
! Rowspan=4| ''[[Ram Kasam]]''
| "Do Milte Toh Kasam Khuda Ki"
| rowspan=4| Sonik–Omi
| rowspan=4| Verma Malik
| Omi
|-
| "Haye Meri Majboor Jawaani"
| solo
|-
| "Aaj Teri Mehfil Mein"
| Manna Dey
|-
| "Uyi Maa Machhaiya Hai"
| Mahendra Kapoor
|-
!''Saahira''
| "Dhadkan Hai Tu Har Dil Ki"
| Madan Mohan
| Rajendra Krishan
| Mohammed Rafi, S. Balbir, Brij Bhushan
|-
!''[[Saajan Bina Suhagan]]''
| "O Jaani, Jaani Tum, O Jaane Tum"
| Usha Kahnna
| Saawan Kumar Tak
| solo
|-
!''Sajni''
| "Ghazab Hua Sajna Tune Roka Mujhe Shaam Se"
| Sonik–Omi
| Naqsh Lyallpuri
| Mohammed Rafi
|-
!''[[Shalimar (1978 film)|Shalimar]]''
| "Mera Pyaar Shalimar"
| R D Burman
| Anand Bakshi
| solo
|-
! Rowspan=2| ''Shikar Shikaru Ka''
| "Saathi Mere saathi"
| rowspan=2| R D Burman
| rowspan=2| Gulshan Bawra
| rowspan=2| solo
|-
| "Shikar Shikari Ka"
|-
!''[[Swarag Narak]]''
| "Nahi Nahi Koi Tumsa Nahin"
| Rajesh Roshan
| Anand Bakshi
| Kishore Kumar
|-
!''[[Sone Ka Dil Lohe Ka Haath]]''
| "Mohabbat Ho Gayi Hai, Qayamat Ho Gayi Hai"
| Usha Khanna
| Asad Bhopali
| solo
|-
!''Subah Kahin Shaam Kahin''
| "Mohe Chhuna Na"
| Himanshu Bishwas
| R S Preetam
| solo
|-
! Rowspan=5| ''Teen Eekay''
| "Tun Ho Johri"
| rowspan=5| Sonik–Omi
| rowspan=2| Naqsh Lyallpuri
| Dilraj Kaur, Joginder
|-
| "Jua Kisi Ka Na Hua"
| rowspan=3| solo
|-
| "Yeh Gora Badan"
| Gauhar Kanpuri
|-
| "Parde Me Pyar Kare"
|-
| "Najar Kajrari Ho"
| M G Hashmat
| Usha Mangeshkar
|-
! Rowspan=2| ''Teri Nazar Teri Ada''
| "Dilwalon Ki Toli Nikli"
| rowspan=2| N/A
| rowspan=2| N/A
| rowspan=2| Mohammed Rafi
|-
| "Likha Hai Itihaas Mein"
|-
! Rowspan=3| ''The Revenger''
| "Masti Mein Hoon"
|Rowspan=3| Surinder Kohli
|rowspan=3| V. N. Mangal
| solo
|-
| "Loot Lo Meri Duniya"
| Mohammed Rafi
|-
| "Ari Bin Bulaye Main Aoongi Nahi"
| Ambar Kumar
|-
! Rowspan=2| ''[[Tumhare Liye]]''
|"Mere Hathon Mein Lage To Rang"
| rowspan=2| Jaidev
| rowspan=2| Naqsh Lyallpuri
| Rowspan=2| solo
|-
|"Bansuriya Man Har Legayi"
|-
!''[[Tumhari Kasam]]''
| "Hum Dono Milke, Kaagaz Pe Dil Ke"
| Rajesh Roshan
| Anand Bakshi
| Mukesh
|-
! Rowspan=1| ''[[Vishwanath (1978 film)|Vishwanath]]''
| "Bibadha-Aaj Karegi Manmani"<ref>{{Cite web |title=Vishwanath |url=https://gaana.com/album/vishwanath |url-status=live |archive-url=https://web.archive.org/web/20140429102923/http://gaana.com/album/vishwanath |archive-date=29 April 2014 |access-date=22 December 2020 |website=[[Gaana (music streaming service)|Gaana]]}}</ref>
| Rajesh Roshan
| Anjaan
| solo
|-
!''Waapsi''
| "Aaj Ka Din Ko Dekha Hi Nahin"
| R D Burman
| N/A
| solo
|-
! Rowspan=2| ''[[Yasmeen (1978 film)|Yasmeen]]''
| "Hai Raat Pyasi Chhodo Udaasi"
| rowspan=2| Basu–Manohari
| rowspan=2| Yogesh
| rowspan=2| solo
|-
| "Suno Ek Kahani"
|-
|}
=== 1979 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! Rowspan=3| ''[[Aaj Ki Radha]]''
| "Khilta Hai Jo Raat Ko"
| Rowspan=3| Sapan–Jagmohan
| rowspan=3| Naqsh Lyallpuri
| rowspan=3| solo
|-
| "Main Zindagi Ki Talash Mein"
|-
| "Yeh Ham Jaante Hain"
|-
! Rowspan=3| ''[[Aatish (film)|Aatish]]''
| "Kahin Naam Na Apna Likh Dena"
| rowspan=3| Ravindra Jain
| Rowspan=3| Ravindra Jain
| [[Mohammed Rafi]], [[Hemlata (singer)|Hemlata]]
|-
| "Ho Rabba, Ladke Ke Bhes Mein Ladki Hoon"
| Rowspan=2| solo
|-
| "Main Nehla Thi Bas Nehla"
|-
!Rowspan=3|''Adventures of Aladdin''
| "Jaadu Teri Nazar Ka"
| Rowspan=3| Chitragupt
| Rowspan=2| Naqsh Lyallpuri
| solo
|-
| "Ae Mere Hunnawa Tu Nahin Jaanta"
| Mohammed Rafi
|-
| "Aa Gaya Aa Gaya"
| Kafil Azar
| Manna Dey
|-
! Rowspan=3| ''[[Ahinsa (1979 film)|Ahinsa]]''
| "Mujhe Dena Re Badhai Gaonwalon"
| Rowspan=3| Kalyanji–Anandji
| rowspan=2| Inderjeet Singh Tulsi
| Mohammed Rafi
|-
| "Thoda Thoda Sach"
| Rowspan=2| solo
|-
| "Maine Tan Man De Dala"
| Ram Bhardwaj
|-
!''[[Ahsaas]]''
| "Kuchh Khone Ko Dil Karta Hai"
| Bappi Lahiri
| Indeevar
| solo
|-
! Rowspan=1| ''[[Amar Deep (1979 film)|Amar Deep]]''
| "Duniya Hai Bewafa"
| Laxmikant–Pyarelal
| Anand Bakshi
| solo
|-
!Rowspan=2| ''Atmaram''
| "Kahan Hai Woh Jinhe Naaz Hai In Kinaaron Par"
| rowspan=2| Shankar–Jaikishan
| Rowspan=2| M G Hashmat
| Rowspan=2| solo
|-
| "Mujhe Ladka Pasand Tu Hi Aaya"
|-
! Rowspan=2| ''[[Bagula Bhagat]]''
| "Mehfil Mein Meri Aaye Hai"
| rowspan=2| Kalyanji–Anandji
| rowspan=2| Anjaan
| Kishore Kumar
|-
| "Chali Aayi Tere Pichhe"
| solo
|-
! Rowspan=2| ''[[Baton Baton Mein]]''
| "Suniye, Kahiye"
| rowspan=2| Rajesh Roshan
| rowspan=2| Yogesh
| Kishore Kumar
|-
| "Na Bole Tum Na Maine Kuchh Kaha"
| Amit Kumar
|-
! Rowspan=5| ''[[Bhala Manus]]''
| "Jaan Pehchaan To Pahle Se Thi"
| rowspan=5| R D Burman
| rowspan=5| Gulshan Bawra
| Kishore Kumar
|-
| "Kabhi Hansi Aur Kabhi Reham Aata Hai Tere Hal Pe"
| rowspan=4| solo
|-
| "Kaise Kahu Man Ki Baat"
|-
| "Jo Tu Kahe To Main Pol Teri Khol Du"
|-
| "Gumsum Kyun Hain Sanam"
|-
! Rowspan=2| ''[[Bin Phere Hum Tere]]''
| "Mujhko Inhi Logon Ne"
| rowspan=2| Usha Khanna
| Vishweshwar Sharma
| rowspan=2| solo
|-
| "Main Kya Maangun"
| Indeevar
|-
!''Chhathh Mayiya Ki Mahima''
| "Rasik Bhanware Ore Ek Kamsin Kali Ka Ras Le Le"
| Bhupen Hazarika
| Kavi Pradeep
| solo
|-
!rowspan=4| ''Deen Aur Imaan''
| "La Ilaahi Bhej De Mushkil"
| rowspan=4| Shyamji–Ghanshyamji
| rowspan=4| Anjum Jaipuri
| rowspan=2| solo
|-
| "Nazar Bhar Ke Tumhen Dekha Nahin Jaata"
|-
| "Tum Par Salaam Arsh Ki"
| rowspan=2| Mohammed Rafi
|-
| "Tum Pe Nazil Hua Quran"
|-
! rowspan=4| ''[[Dhongee]]''
| "Haye Re Haye Tera Ghongta"
| rowspan=4| R D Burman
| rowspan=8| Anand Bakshi
| rowspan=2| [[Kishore Kumar]]
|-
| "Wahan Chalo Jis Jagah Aur Koi Na Ho"
|-
| "Dil Chheena Chain Churaya"
| solo
|-
| "Rangon Ki Chhanv Dhoop Mein"
| Kishore Kumar and [[Amit Kumar]]
|-
! Rowspan=4| ''[[Dil Kaa Heera]]''
| "Hanste Hanste Log Lagte Hain Rone"
| rowspan=4| Laxmikant–Pyarelal
| rowspan=2| solo
|-
| Hanste Hanste Tu Kyon Lag Gaya Rone"
|-
| "Zindagi Ka Yoon Jubaan Par Naam Aana Chaahiye" (version 1)
| rowspan=2| Mohammed Rafi, [[Amit Kumar (singer)|Amit Kumar]]
|-
| "Zindagi Ka Yoon Jubaan Par Naam Aana Chaahiye" (version 1)
|-
!''[[Do Ladke Dono Kadke]]''
| "Chanda Ki Doli Mein"
| Hemant Kumar
| Yogesh
| K. J. Yesudas
|-
! Rowspan=2| ''[[Do Shikaari]]''
| "Honth Ye Mere Aag Se Nahi Kam"
| rowspan=2| Chitragupt
| N/A
| rowspan=2| solo
|-
| "Pagal Hawa Raate Diwani"
| Jan Nisar Akhtar
|-
! Rowspan=3| ''[[Duniya Meri Jeb Mein]]''
| "Saari Ki Saari Yeh Duniya Meri Jeb Mein"
| rowspan=3| Rajesh Roshan
| Rowspan=3| Gulshan Bawra
| rowspan=2| [[Kishore Kumar]]
|-
| "Kuch Sochoon, Haan Socho, Kuch Boloon, Haan Bolo"
|-
| "Yeh Bhi Dil Maangta"
| solo
|-
!''Ganga Aur Geeta''
| "Aise Pee Li Uthna Mushkil Hai"
| Shankar–Jaikishan
| Qamar Jalalabadi
| solo
|-
! Rowspan=2| ''[[Gautam Govinda]]''
| "O Tera Bitwa Jawan Hoi Gawa"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Anand Bakshi
| Mohammed Rafi
|-
| "Daroga Ji Chori Ho Gato"
| solo
|-
! Rowspan=2| ''[[Gawaah]]''
| "Duniya Meri Deewani"
| rowspan=2| Jaikumar Paarte
| rowspan=2| Hasrat Jaipuri
| rowspan=2| solo
|-
| "Aayi Door Se, Laayi Pyaar Se"
|-
! Rowspan=1| ''[[Guru Ho Jaa Shuru]]''
| "Saare Duniya Mein Qatil Hi Qatil Bhare"
| Kalyanji–Anandji
| Rajendra Krishan
| solo
|-
!''Habari''
| "Tu Hai Mera Khuda Ka Kamaal"
| Sapan–Jagmohan
| M G Hashmat
| Kishore Kumar
|-
! Rowspan=4| ''[[Har Har Gange]]''
| "Main Janam Janam Se Karu Tapasya"
| rowspan=4| Ravindra Jain
| rowspan=4| Bharat Vyas
| rowspan=3| solo
|-
| "Tum Ho Madhu Pyase Bhanware"
|-
| "Main Janam Janam Se Karu Tapasya"
|-
| "Main Rambha Roop Ki Raani"
| Hemlata
|-
! Rowspan=3| ''Heroine Ek Raat Ki''
| "Kismat Me Tabahi Likhi Thi"
| rowspan=3| Shyamji–Ghanshyamji
| rowspan=3| Sajan Dehlvi
| rowspan=2| solo
|-
| "Main Jaam Pilati Hun"
|-
| "Chal Gori Chal"
| Mohammed Rafi
|-
! Rowspan=5| ''[[Hum Tere Aashiq Hain]]''
| "Naacho Re Masti Mein"
| Rowspan=5| Ravindra Jain
| Rowspan=5| Sahir Ludhianvi
| Rowspan=2| solo
|-
| "Hindi English Ki Pothi"
|-
| "Zara Hanskar Kar Le Baat"
| rowspan=2| [[Mahendra Kapoor]]
|-
| "Mushkil Hai Ab Raaz Chhupana"
|-
| "Hurrey, Maar Liya Maidan"
| [[Kishore Kumar]]
|-
! Rowspan=3| ''Inspector Eagle''
| "Tum Kyun Aate Nahin"
|Rowspan=3| Madan Mohan
| Rowspan=3| Kaifi Azmi
| Rowspan=3| solo
|-
| "Chalo Aaye Aam Uthayen"
|-
| "Aao Pal Bhar Ko Tum Roshni Mein"
|-
! Rowspan=4| ''[[Jaandaar]]''
| "Gokul Ki Galiyon Ka"
| rowspan=4| Kalyanji–Anandji
| rowspan=3| Rajendra Krishan
| [[Kishore Kumar]] & chorus
|-
| "Suniye Hawaldar"
| Mahendra Kapoor, Mahesh Kumar & chorus
|-
| "Koi Mere Dil Ke"
| rowspan=2| solo
|-
| "Lo Chala Nazar Ka Teer"
| Inderjeet Singh Tulsi
|-
! Rowspan=3| ''[[Jaani Dushman]]''
| "Arre Sun Bhai Sadho"
| rowspan=3| Laxmikant–Pyarelal
| rowspan=3| Verma Malik
| Kishore Kumar, Mohammed Rafi
|-
| "Aisi Waisi Na, Samajh Sajna"
| Shatrughan Sinha
|-
| "Tere Hathon Mein Pehnake Choodi"
| Mohammed Rafi
|-
! Rowspan=4| ''[[Jhoota Kahin Ka]]''
| "Jeevan Ke Har Mod Pe"
| rowspan=5| R D Burman
| rowspan=4| Gulshan Bawra
| rowspan=2| Kishore Kumar
|-
| "Barah Baje Kee Suiyo Jaise"
|-
| "Dekho Mera Jadoo"
| rowspan=2| solo
|-
| "Jhutha Kahee Ka Mujhe Aisa Mila"
|-
!''[[Jurmana (1979 film)|Jurmana]]''
| "Naachun Main Gaao Tum"
| Anand Bakshi
| R D Burman
|-
! Rowspan=2| ''Kanoon Ka Shikar''
| "Kya Haseen Shaam Hai"
| rowspan=2| Meena Mangeshkar
| Abhilash
| rowspan=2| solo
|-
| "Hanste Hi Rehna Mere Yaar"
| Yogesh
|-
! Rowspan=2| ''[[Kartavya (1979 film)|Kartavya]]''
| "Maine Thodi Si Chadhayi To Aisi Chadhi"
| Rowspan=2| Laxmikant–Pyarelal
| Verma Malik
| [[Mohammed Rafi]]
|-
| "Mera Dil Leke Chal Diye"
| Kafil Azar
| solo
|-
! Rowspan=4| ''[[Lok Parlok]]''
| "Amma Ri Amma, Yeh To Deewana Raste Mein Chhede"
| rowspan=4| Laxmikant–Pyarelal
| rowspan=4| Anand Bakshi
| Rowspan=3| [[Kishore Kumar]]
|-
| "Baadal Kab Barsoge, Jab Barsoge, Tab Barsoge"
|-
| "Hum Tum Jeet Gaye, Dushman Haar Gaye"
|-
| "Bedardi Piya, Tune Jo Bhi Kaha"
| solo
|-
! ''[[Maan Apmaan]]''
| "Apni Garaj Bairi Peechhe Peechhe Aaye"
| Laxmikant–Pyarelal
| Bharat Vyas
| solo
|-
! Rowspan=2| ''[[Magroor (1979 film)|Magroor]]''
| "Haseen Raat Mein, Allah Kasam, Mulaqat Mein"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Anand Bakshi
| [[Mohammed Rafi]]
|-
| "Rukhsana Rukhsana, Main Tera Deewana"
| [[Manna Dey]]
|-
! ''[[Manzil (1979 film)|Manzil]]''
| "Man Mera Chahe"
| R D Burman
| Yogesh
| solo
|-
!''[[Meri Biwi Ki Shaadi]]''
| "Mujhse Shaam Suhaani Poochhe Prem Kahani"
| Usha Khanna
| Ravindra Jain
| Mohammed Rafi
|-
!''[[Mr. Natwarlal]]''
| "Tauba Tauba Kya Hoga"
| Rajesh Roshan
| Anand Bakshi
| solo
|-
! Rowspan=4| ''[[Muqabla (1979 film)|Muqabla]]''
| "Aaja Na, Aaja Na, Aaja Na"
| rowspan=4| Laxmikant–Pyarelal
| rowspan=4| Verma Malik
| solo
|-
| "Dilwale Yaar Sajna, Yahi Mera Dil Dua Kare"
| [[Anwar (singer)|Anwar]]
|-
| "Muqabla Hai Muqabla, Muqabla Hai Muqabla"
| [[Mahendra Kapoor]]
|-
| "Meri Rus Gayi Jhanjharwali"
| [[Kishore Kumar]]
|-
! Rowspan=3| ''[[Naukar (1979 film)|Naukar]]''
| "Pallo Latke Re Mharo Pallo Latke"
| rowspan=3| R D Burman
| rowspan=3| Majrooh Sultanpuri
| [[Kishore Kumar]]
|-
| "Dekhi Hazaron Mehfilen, Par Yeh Fiza Kuch Aur Hai"
| [[Mohammed Rafi]]
|-
| "Aaya Na Karo Gudiya"
| solo
|-
!''[[Noorie]]''
| "Qadar Tune Na Jaani"
| Khayyam
| Naqsh Lyallpuri
| solo
|-
!''Phool Aur Insaan''
| "Raqasa Hoon Main Par"
| Surinder Kohli
| Kartar Singh
| solo
|-
! Rowspan=3| ''[[Prem Bandhan (1979 film)|Prem Bandhan]]''
| "Hoti Hai Kisi Se Jab Preet"
| rowspan=3| Laxmikant–Pyarelal
| rowspan=3| Anand Bakshi
| Kishore Kumar, Pankaj
|-
| "Aamli Ki Taamli Taamli Ke Gaon Mein"
| Manna Dey
|-
| "Meri Payal Me Ye Ghungru"
| solo
|-
! Rowspan=5| ''[[Raakhi Ki Saugandh]]''
| "Jina Chahe To Jee Le"
| rowspan=5| Sonik–Omi
| rowspan=5| Verma Malik
| rowspan=3| solo
|-
| "Pehli Pehli Hai Raja Mulaqat"
|-
| "O Qaidi Do Baaton Ka"
|-
| "Tu Ashiq Hai Ya Majnu Hai"
| Mahendra Kapoor
|-
| "I Like You"
| Manna Dey
|-
! Rowspan=3| ''[[Ratnadeep (film)|Ratnadeep]]''
| "Man Bahek Raha Hai"
| rowspan=3| R D Burman
| rowspan=3| Gulzar
| rowspan=2| solo
|-
| "Aisa Ho To Kaisa Hoga"
|-
| "Kabhi Kabhi Sapna Lagta Hai"
| Kishore Kumar
|-
!''Saahas''
| "Ek Ghar Banaye, Sapne Sajaye"
| Amin–Sangeet
| Padma Sachdev
| Bhupinder Singh
|-
! Rowspan=2| ''[[Salaam Memsaab]]''
| "Tera Kaha Maine Kiya"
| rowspan=2| R D Burman
| rowspan=2| Majrooh Sultanpuri
| rowspan=2| solo
|-
| "Tum Bhi Meri Jaan"
|-
! Rowspan=5| ''[[Sarkari Mehman]]''
| "Bambai Sham Ke Baad Hasin"
| rowspan=5| Ravindra Jain
| rowspan=3| Ravindra Jain
| rowspan=5| solo
|-
| "Sun Sun Re Sarkari Mehman"
|-
| "Parcha Mohabbat Ka De De Re Babu"
|-
| "Lucknow Chhuta To Dilli Ne Loota"
| rowspan=2| Hasrat Jaipuri
|-
| "Na Zulm Ki Mari Hoon"
|-
! Rowspan=2| ''[[Shaayad]]''
| "Main Suraj Ki Roshni Tu Chanda Ki Chandani"
| rowspan=2| Manas Mukherjee
| Rowspan=2| Vitthalbhai Patel
| Mohammed Rafi
|-
| "Mausam Ayega Jayega, Pyaar Sada Muskurayega"
| Manna Dey
|-
!''[[Shabash Daddy]]''
| "O Meri Jaanejaan"
| Kishore Kumar
| Irshad
| Kishore Kumar
|-
!''Shyamla''
| "Main Karti Hoon Tumse Pyaar"
| Kanu Roy
| Jan Nisar Akhtar
| solo
|-
! Rowspan=4| ''[[Suhaag (1979 film)|Suhaag]]''
| "O Sheronwali"
| rowspan=4| Laxmikant–Pyarelal
| rowspan=4| Anand Bakshi
| Mohammed Rafi
|-
| "Main Toh Beghar Hoon"
| Shashi Kapoor
|-
| "Teri Rab Ne Bana Di Jodi"
| rowspan=2| Shailendra Singh, Mohammed Rafi
|-
| "Ae Yaar Sun Yaari Teri"
|-
!rowspan=5| ''[[The Great Gambler]]''
| "Tum Kitne Din Baad Mile"
| rowspan=5| R D Burman
| rowspan=5| Anand Bakshi
| rowspan=2| solo
|-
| "O Deewano Dil Sambhalo"
|-
| "Do Lafzon Ki Hai"<ref>{{cite web |last=Pandya |first=Sonal |title=40 years of an Italian romance with 'Do Lafzon Ki Hai Dil Ki Kahaani' |url=https://www.cinestaan.com/articles/2019/apr/6/19929 |access-date=2021-08-30 |website=Cinestaan}}</ref>
| Sharat Kumar
|-
| "Pehle Pehle Pyaar Ki Mulaqaaten"
| Kishore Kumar
|-
| "Raqqasa Mera Naam"
|rowspan=2| Mohammad Rafi
|-
! Rowspan=2| ''Yuvraaj''
| "Aankhob Se Na Baatein Kar"
| Rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Anand Bakshi
|-
| "Mere Yaro Zara Muh Udhar Pher Lo"
| Kishore Kumar
|-
|}
== 1980s ==
=== 1980 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! Rowspan=2| ''[[Aanchal (1980 film)|Aanchal]]''
| "Paise Ka Kajal"
| rowspan=2| R D Burman
| rowspan=2| Majrooh Sultanpuri
| Kishore Kumar
|-
| "Jane De Gaadi Teri"
| solo
|-
! Rowspan=2| ''[[Aap To Aise Na The]]''
| "Mera Yaar Rahe Zinda, Mera Pyaar Rahe Zinda"
| rowspan=2| Usha Khanna
| Indeevar
| solo
|-
| "Kismat Ki Baazi Ka Faisla To Ho Gaya Hai"
| Nida Fazli
| [[Manhar Udhas]], [[Suresh Wadkar]]
|-
! Rowspan=2| ''[[Abdullah (film)|Abdullah]]''
| "Jashn-e-Bahara Mehfil-e-Aala"
| rowspan=2| R D Burman
| rowspan=2| Anand Bakshi
| rowspan=2| solo
|-
| "Bheega Badan Jalne Laga"
|-
! Rowspan=3| ''[[Alibaba aur 40 Chor]]''
| "Khabouba Khatouba"
| rowspan=3| R D Burman
| rowspan=3| Anand Bakshi
| solo
|-
| "Sare Shehar Mein Ek Hasin Hai"
| Lata Mangeshkar
|-
| "Jadugar Jadu Kar Jayega"
| Kishore Kumar
|-
! Rowspan=4| ''[[Angaar (1980 film)|Angaar]]''
| "Phenk Pyar Ka Jaal"
| rowspan=4| Sonik–Omi
| rowspan=2| Verma Malik
| solo
|-
| "Koi Bhi Khud Ko Kitna Bachaye"
| Omi
|-
| "Chalti Sanse Thandi Aahe"
| rowspan=2| Kaifi Azmi
| Yogita Bali
|-
| "Is Jahan Mein Mera Na Koi Dooja"
| solo
|-
!''[[Apne Paraye]]''
| "Gaao Mere Mann Chahe Surah Chamke"
| Bappi Lahiri
| Yogesh
| K. J. Yesudas
|-
! Rowspan=2| ''[[Badla Aur Balidaan]]''
| "Tune Roop Churaya Goriye"
| rowspan=2| Sonik–Omi
| K. L. Sharma
| Omi, Mohammed Rafi
|-
| "Mujhe Mil Gaya Bichhda Yaar"
| Sajan Dehlvi
| Manna Dey, Mohammed Rafi
|-
! Rowspan=2| ''Bambai Ka Maharaja''
| "Bambai Ka Maharaja Kabhi To Kahin Se Aayga"
| rowspan=2| Usha Khanna
| rowspan=2| Anjaan
| solo
|-
| "Mil Gaya Mil Gaya Dil Se Dil Jaane Jaan"
| Amit Kumar
|-
! Rowspan=3| ''Ban Manush''
| "Gore Mukhde Se Mera Hata De Naqaab"
| rowspan=3| Chand Pardesi
| rowspan=3| Farooq Kaiser
| solo
|-
| "Rang Bhi Uda Uda Hai,
| Mohammed Rafi
|-
| "Haath Mein Baja, Saath Mein Bandar"
| Shailendra Singh
|-
! Rowspan=4| ''[[Bandish (1980 Indian film)|Bandish]]''
| "Rang Bhare Mausam Se Rang Le Lo"
| rowspan=4| Laxmikant–Pyarelal
| rowspan=4| Anand Bakshi
| rowspan=3| Kishore Kumar
|-
| "Mere Hosh Le Lo Diwana Bana Do"
|-
| "Are Bhago Are Daudo Are Dekho"
|-
| "Saiyya Ji Ne Ghar Banwaya"
| solo
|-
! Rowspan=2| ''Beqasoor''
| "Aankh Jhukne Lagi"
| rowspan=2| Bappi Lahiri
| Nida Fazli
| rowspan=2| solo
|-
| "Aisa Ji Koi Aata"
| Rukhsar Amrohi
|-
! Rowspan=3| ''[[Be-Reham]]''
| "Ek Lafz-E-Mohabbat Ka"
| rowspan=2| solo
|-
| "Milne Ko Aate Ho"
|-
| "Hum Aaj Yeh Qissa Khatm Karen"
| [[Mahendra Kapoor]]
|-
!''[[Bharat Ke Santan]]''
| "Shaba Shaba Bambai Ke Banane Wale"
| Sonik–Omi
| Verma Malik
| Usha Mangeshkar
|-
! Rowspan=2| ''[[Bombay 405 Miles]]''
| "Kasam Na Lo Koi Humse"
| Rowspan=2| Kalyanji–Anandji
| rowspan=2| Indeevar
| [[Kishore Kumar]]
|-
| "Ho Gaye Hum Aapke, Kasam Se, Kasam Se, Kasam Se"
| [[Mohammed Rafi]]
|-
! Rowspan=2| ''[[Chaal Baaz]]''
| "Tujhe Lattoo Bana Doon"
| rowspan=2| Madan Mohan
| Rowspan=2| Yogesh
| solo
|-
| "Hai Shaam Badi Matwali"
| [[Amit Kumar]]
|-
!rowspan=2| ''Chetna Dorahe Par''
| "Laaj Meri Teri Haath Hai Ab Sanam"
|rowspan=2| Raj Sonik
| Onkar Verma
| Mohammed Rafi
|-
| "Main Samjhati Thi Jise Dil Ki Kharidaron Mein"
| Shamim Jaipuri
| solo
|-
! Rowspan=3| ''[[Chunaoti]]''
| "Har Subah Tumhari Mehfil Mein"
| Rowspan=3| Laxmikant–Pyarelal
| rowspan=3| Verma Malik
| [[Lata Mangeshkar]]
|-
| "Main Rok Loongi Tujhe Aake"
| rowspan=2| solo
|-
| "Sanjh Ki Bela Ek Albela"
|-
! Rowspan=2| ''Cobra''
| "O Saathi Re"
| rowspan=2| Somdev Kashyap
| Ravinder Rawal
| Anwar
|-
| "Toote Bihar Ki Ghungroo"
| Somdev Kashyap
| solo
|-
! Rowspan=2| ''[[Desh Drohi (1980 film)|Desh Drohi]]''
| "Idhar Gaya Ya Udhar Gaya Dil"
| rowspan=2| Kalyanji–Anandji
| Rowspan=2| Gulshan Bawra
| solo
|-
| "Holi Khelat Nandlal"
| [[Kishore Kumar]], [[Mahendra Kapoor]]
|-
!''Dhamaka''
| "Meru Ankhon Mein Shole"
| J. Kaushik
| Nida Fazli
| solo
|-
! Rowspan=4| ''[[Dhan Daulat]]''
| "Jeena Kya Aji Pyar Bina, Jeevan Ke Yahi Chaar Dina"
| rowspan=4| R D Burman
| rowspan=4| Majrooh Sultanpuri
| Rowspan=3| [[Kishore Kumar]]
|-
| "Ho Jaaye Phir Us Din Ka Jo Vaada Hai"
|-
| "Woh Jinki Nai Yeh Duniya, Manzil Hai Nai"
|-
| "Shikwa Koi Tum Se, Na Hai Tum Pe Koi Zor"
| solo
|-
! Rowspan=| ''[[Do Aur Do Paanch]]''
| "Yeh Zulfon Ki Bikhri Ghata"
| Rajesh Roshan
| Anjaan
| solo
|-
! Rowspan=2| ''[[Do Premee]]''
| "Pyar Kar Pyar Kar"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Anand Bakshi
| rowspan=2| Mohammed Rafi
|-
| "Mausam Pe Jawani Hai"
|-
! Rowspan=3| ''Do Shatru''
| "Ni Tu Pyaar Karke Chali Jaaye Bichhad Ke"
| Rowspan=3| Kalyanji–Anandji
| rowspan=3| Verma Malik
| rowspan=3| solo
|-
| "Ye Najar Hai Najar Hai Najar"
|-
| "Main Billo Bangalore Ki"
|-
!''[[Dostana (1980 film)|Dostana]]''
| "Dillagi Ne Di Hawa"
| Laxmikant–Pyarelal
| Anand Bakshi
| Kishore Kumar
|-
!''[[Ek Gunah Aur Sahi]]''
| "Yehi Hai Tamanna"
| Jaidev
| Jan Nisar Akhtar
| solo
|-
! Rowspan=3| ''Ganga Aur Suraj''
| "Ye Rahi Meri Jawani Koi Aankh To Uthaye"
| rowspan=3| Laxmikant–Pyarelal
| rowspan=3| Anand Bakshi
| Mohammed Rafi
|-
| "Hai Hai Re Mora Rangila Sajanwa"
| rowspan=2| solo
|-
| "Jali Hai Nafrat Ki Aag DiL Mein"
|-
! Rowspan=3| ''Gangadham''
| "Tere Hi Liye Hoga Har Jeevan Mera"
|rowspan=3| Sapan–Jagmohan
|rowspan=3| Indeevar
| rowspan=2| Suresh Wadkar
|-
| "Jhinak Tina, Jee Na Lage Tere Bina"
|-
| "Mor Bhangia Ka Munni De O"
| Mohammed Rafi
|-
!''[[Garam Khoon]]''
| "Paina Loopi Kehke Pukaaro"
| Shankar–Jaikishan
| Singhar
| solo
|-
! Rowspan=3| ''Gunehgaar''
| "Tum Jaha Jaaoge"
| rowspan=3| R D Burman
| rowspan=3| Gulshan Bawra
| solo
|-
| "Kuch Din Baad Hi Ban Jayenge Hum Tum Daddy Mummy"
| R D Burman
|-
| "Chaar Dinon Ki Hai Yeh Zindgani"
| Kishore Kumar, Bhupinder Singh
|-
! Rowspan=3| ''Hum Nahin Sudhrenge''
| "Rani O Rani"
| rowspan=6| Ravindra Jain
| rowspan=3| Ravindra Jain
| rowspan=2| Kishore Kumar
|-
| "Machhua Machhua"
|-
| "Bhaag Phoote"
| rowspan=2| solo
|-
! Rowspan=3| ''[[Insaf Ka Tarazu]]''
| "Log Aurat Ko"
| rowspan=3| Sahir Ludhianvi
|-
| "Hazaar Khwab Haqeeqat Ke Roop"
| Mahendra Kapoor
|-
| "Hai Jo Yahi Pyar Ka Trailor"
| Mahendra Kapoor, Hemlata
|-
! Rowspan=2| ''[[Jaayen To Jaayen Kahan]]''
| "Gori Tere Aang Aang Lagayenge Rang"
| rowspan=2| K. Babuji
| rowspan=2| Vitthalbhai Patel
| rowspan=2| Amit Kumar
|-
| "Chalti Hai Gaadi, Chadhna Maana Hai"
|-
! Rowspan=3| ''[[Jal Mahal (film)|Jal Mahal]]''
| "Jai Jai Shyam"
| rowspan=3| R D Burman
| rowspan=3| Majrooh Sultanpuri
| Rowspan=2| solo
|-
| "Zindagi Ko Jab"
|-
| "Tataiya Ne Dank Mara, Hay Mori Maiya"
| [[Mohammed Rafi]]
|-
! Rowspan=3| ''[[Judaai (1980 film)|Judaai]]''
| "Saamne Aa Dekhe Zamaana Sara"
| rowspan=3| Laxmikant–Pyarelal
| rowspan=3| Anand Bakshi
| rowspan=2| Kishore Kumar
|-
| "Maar Gayi Mujhe Teri Judaai"
|-
| "Mausam O Mausam Suhane Aa Gaye"
| Mohammed Rafi
|-
! Rowspan=2| ''[[Jwalamukhi (1980 film)|Jwalamukhi]]''
| "Kabhi Tumne Kisiko Phansa"
| rowspan=2| Kalyanji–Anandji
| rowspan=2| Anjaan
| Kishore Kumar
|-
| "Tere Bina Bhi Nahin Jee Sakte"
| Kishore Kumar, Mahendra Kapoor, Hemlata
|-
! Rowspan=2| ''[[Jyoti Bane Jwala]]''
| "Main Jogan Hoon, Tu Jogi"
| rowspan=11| Laxmikant–Pyarelal
| rowspan=11| Anand Bakshi
| [[Kishore Kumar]]
|-
| "Tel Malish, Boot Polish"
| [[Usha Mangeshkar]]
|-
! Rowspan=4| ''Kala Pani''
| "Garmi Karti Hai Nuksaan"
|Rowspan=2| solo
|-
| "Shama Jalti Hai"
|-
| "Koi Roko Ke Hum Pyar Karne Lage"
| Mohammed Rafi
|-
| "Pyar Zindagi Hai"
| Bhupinder Singh, Laxmikant
|-
! Rowspan=4| ''[[Kali Ghata (1980 film)|Kali Ghata]]''
| "Tu Chali Aa, Chali Aa Meri Mehbooba"
| [[Mohammed Rafi]]
|-
| "Nainon Ki Khidki"
| rowspan=2| solo
|-
| "O Piya Bahroopiya"
|-
| "Mohabbat Ek Vaada Hai, Yeh Vaada Tod Mat Jana"
| [[Hemlata (singer)|Hemlata]]
|-
!''[[Karz (film)|Karz]]''
| "[[Ek Hasina Thi (song)|Ek Hasina Thi]]"
| Kishore Kumar
|-
!''Kashish''
| "Pardes Mein Jaake Tu Piya"
| Kalyanji–Anandji
| Anjaan
| solo
|-
!''Khoon Kharaba''
| "Raat Hone Lagi Jawaan"
| colspan=2| Ravindra Jain
| solo
|-
! Rowspan=3| ''[[Khubsoorat]]''
| "Saare Niyam Tod Do" (version 2)
| rowspan=3| R D Burman
| rowspan=3| Gulzar
| rowspan=3| solo
|-
| "Piya Bawri"
|-
| "Sun Sun Sun Didi, Tere Liye"
|-
! Rowspan=2| ''[[Kismet (1980 film)|Kismet]]''
| "Kuch Chhup Chhupke"
| rowspan=2| Bappi Lahiri
| rowspan=2| Amit Khanna
| rowspan=2| solo
|-
| "Ek To Main Jawaan"
|-
! Rowspan=2| ''Krishna Bhakta Sudama''
| "Bhagwan Kisi Ko Bhi"
|Rowspan=2| Neeta Sen
|Rowspan=2| Kavi Pradeep
|Rowspan=2| solo
|-
| "Batla De Prabhu Kya"
|-
! Rowspan=4| ''[[Lahoo Pukarega]]''
| "Gulshan Aur Gulzaron Mein"
| rowspan=4| Sonik–Omi
| rowspan=4| Verma Malik
| Mohammed Rafi
|-
| "Galiyo Me Bazaro Mein"
| Usha Mangeshkar
|-
| "Kachchi Umar Hai Meri"
| rowspan=2| solo
|-
| "Kisi Ko Suhani Shaam Ka Hai Intezar"
|-
!''[[Lootmaar]]''
| "Jab Chhaye Mera Jadoo"
| Rajesh Roshan
| Amit Khanna
| solo
|-
! Rowspan=4| ''[[Maang Bharo Sajana]]''
|"Deepak Mere Suhaag Ka Jalta Rahe"
|rowspan=4| Laxmikant–Pyarelal
| rowspan=4| Anand Bakshi
|[[Lata Mangeshkar]]
|-
|"Kisi Bazaar Se Dil Ki Khushi"
| solo
|-
|"Hum Barson Baad Mile, Yaadon Ke Phool Khile"
| rowspan=2| [[Kishore Kumar]]
|-
|"O Mere Mehboob, Hai Yeh Jodi Khoob"
|-
! rowspan=5| ''[[Nazrana Pyar Ka]]''
| "Baho Ke Ghere Me Mausam Bhar Ka"
| rowspan=5| Hemant Bhosle
| Vitthalbhai Patel
| rowspan=2| Kishore Kumar
|-
| "Jab Se Dekha Hai Giraftar Hai"
| rowspan=3| Nida Fazli
|-
| "Naya Saal Aaye, Tamase Dikhaye"
| Amit Kumar, Anwar
|-
| "Gham Chhupate Raho"
| Mohammed Rafi
|-
| "Ye Dupatta Dupatta Dupatta Mera"
| Anjaan
| solo
|-
! Rowspan=2| ''[[Neeyat (film)|Neeyat]]''
| "Tumhe Aise Kaise De Doon"
| rowspan=2| Kalyanji–Anandji
| Indeevar
| rowspan=2| solo
|-
| "Pyase Dil Ki Pyas Bujhane"
| Gulshan Bawra
|-
! Rowspan=4| ''[[Nishana (1980 film)|Nishana]]''
| "Tip Tip Hone Lagi, Jadu Chalne Lage"
|rowspan=4| Laxmikant–Pyarelal
| rowspan=4| Anand Bakshi
| rowspan=3| [[Kishore Kumar]]
|-
| "Jana, Zara Samne Aana"
|-
| "Apni Mohabbat Se Sab Log Jalte Hai"
|-
| "Maine Tujhe Jeet Liya, Tune Mujhe Jeet Liya"
| [[Mohammed Rafi]]
|-
! Rowspan=3| ''Parchhayeen''
| "Koi Bhi Mausam Aaye Ke Jaaye"
| rowspan=3| Ravindra Jain
| Ravindra Jain
| rowspan=3| solo
|-
| "Tere Rang Me Rangi"
| Vrajendra Gaur
|-
| "Chehre Pe Parda"
| Hasrat Jaipuri
|-
! Rowspan=2| ''[[Phir Wohi Raat]]''
| "Dekho Idhar Dekho, Ae Mere Humsafar"
| rowspan=2| R D Burman
| rowspan=2| Majrooh Sultanpuri
| [[Kishore Kumar]], Poornima
|-
| "Phir Wahi Raat Aayi"
| solo
|-
!''Premikaa''
| "Yeh Duniya Hai, Koi Khoye Koi Paaye"
| colspan=2| Ravi
| solo
|-
! Rowspan=5| ''[[Pyaara Dushman]]''
| "Saiyyan Aaye Na"
| rowspan=5| Bappi Lahiri
| rowspan=3| Anjaan
| rowspan=4| Kishore Kumar
|-
| "Tu Hai Meri Deewani"
|-
| "Goriya Hame Jeena Teri Gali"
|-
| "Ek Dhundho Milte Hai Hazaron"
| rowspan=2| Indeevar
|-
| "Ae Tum Baahar Kaha Chale"
| solo
|-
!''Pyaar To Hona Hi Tha''
| "Chale Kahan Kahan Chale"
| R D Burman
| Anjaan, Indeevar
| solo
|-
! ''[[Qurbani (1980 film)|Qurbani]]''
| "Kya Dekhte Ho"
| Kalyanji–Anandji
| Indeevar
| Mohammed Rafi
|-
! Rowspan=3| ''[[Ram Balram]]''
| "Humse Bhool Ho Gayi"
| rowspan=3| Laxmikant–Pyarelal
| rowspan=3| Anand Bakshi
| rowspan=2| Kishore Kumar
|-
| "Yaar Ki Khabar Mil Gayi"
|-
| "Balram Ne Bahut Samjhaya"
| Mohammed Rafi, Dilraj Kaur
|-
! Rowspan=4| ''[[Red Rose (1980 film)|Red Rose]]''
| "Kiski Sadaayen Mujhko Bulaayen"
| rowspan=5| R D Burman
| Nida Fazli
| rowspan=4| [[Kishore Kumar]]
|-
| "Tere Bin Jeena Kya, Tere Bin Marna Kya" (version 1)
| rowspan=3| Vitthalbhai Patel
|-
| "Tere Bin Jeena Kya, Tere Bin Marna Kya" (version 2)
|-
| "Tere Bin Jeena Kya, Tere Bin Marna Kya" (version 3)
|-
!''Reshma O Reshma''
| "Le Chal Kahin Nujhko"
| N/A
| solo
|-
! Rowspan=2| ''Room No. 203''
| "Kal Tha Mera, Aaj Tera Yeh Dil Hai"
| Rowspan=2| Salil Chowdhury
| Rowspan=2| Yogesh
| Rowspan=2| solo
|-
| "Yeh Jawaan Dil Ke Armaan"
|-
!''[[Saboot (1980 film)|Saboot]]''
| "Loot Ada Ko Loot Le Raja"
| Bappi Lahiri
| Amit Khanna
| solo
|-
! Rowspan=2| ''Sada Suhaagan''
| "Humrahi Agar Kho Jaaye"
| rowspan=2| R D Burman
| rowspan=2| Nida Fazli
| rowspan=2| R D Burman
|-
| "Humrahi Agar Mil Jaaye"
|-
!''Sau Din Saas Ke''
| "Sau Saal Jiyo Hamare Saasu Ji"
| Kalyanji–Anandji
| Indeevar
| Hemlata
|-
! Rowspan=4| ''[[Shaan (1980 film)|Shaan]]''
| "Pyaar Karnewale"
| rowspan=4| R D Burman
| rowspan=4| Anand Bakshi
| Pankaj Udhas
|-
| "Tere Liye Jina Teri Liye Marna"
| Lata Mangeshkar
|-
| "Dariya Mein Jahaaz Chale"
| Usha Mangeshkar, Kishore Kumar
|-
| "Jaanu Meri Jaan"
| Usha Mangeshkar, Kishore Kumar, Mohammed Rafi
|-
! Rowspan=2| ''Shadi Se Pehle''
| "Mere Nainon Mein Nandlala"
| rowspan=2| Sapan–Jagmohan
| rowspan=2| Gauhar Kanpuri
| solo
|-
| "Teri Sanson Mein"
| Mohammed Rafi
|-
!''Shiv Shakti''
| "Palken Bichhaye Aas Lagaye, Tumko Pukaare Nera Pyaar"
| Chitragupt
| Bharat Vyas
| solo
|-
! Rowspan=4| ''[[Sitara (1980 film)|Sitara]]''<ref>{{Cite web |title=Sitara |url=https://gaana.com/album/sitara-hindi |url-status=live |archive-url=https://web.archive.org/web/20170206182922/http://gaana.com/album/sitara-hindi |archive-date=6 February 2017 |access-date=4 March 2022 |website=[[Gaana (music streaming service)|Gaana]]}}</ref>
| "Yeh Saaye Hai"
| Rowspan=4| R D Burman
| Rowspan=4| Gulzar
| Rowspan=2| solo
|-
| "Aap Aaye Garibkhane"
|-
| "Sajna Ka Kangna, Kangna Mein Heera"
| rowspan=2| [[Bhupinder Singh (musician)|Bhupinder Singh]]
|-
| "Saath Saath Tum Chalo To Raat Raatbhar Chale"
|-
! Rowspan=4| ''[[Takkar (1980 film)|Takkar]]''
| "Achha Bahana Hai"
| rowspan=4| R D Burman
| rowspan=4| Anand Bakshi
| rowspan=3| solo
|-
| "Duniya Kya Hai"
|-
| "Yeh Tanhaiyan"
|-
| "Makhanchor Nandkishore Manmohan Ghanshyam Re"
| [[Mohammed Rafi]]
|-
! Rowspan=1| ''[[Taxi Chor]]''
| "Yaar Mera Laut Aaya Re"
| Bappi Lahiri
| Anjaan
| [[Suresh Wadkar]], [[Anwar (singer)|Anwar]]
|-
! Rowspan=5| ''[[The Burning Train]]''
| "Pal Do Pal Ka Saath Hamara"
| rowspan=5| R D Burman
| rowspan=5| Sahir Ludhianvi
| Mohammed Rafi
|-
| "Pahali Nazar Me Hamne To Apna"
| Usha Mangeshkar, R D Burman, Amit Kumar
|-
| "Kisi Ke Wade Pe Kyo Aetbaar Humne Kiya"
| rowspan=2| solo
|-
| "Meri Nazar Hai Tujh Pe"
|-
| "Vaadaa Ha Vaadaa Jab Tak Ambar Par"
| Kishore Kumar
|-
!''[[Thodisi Bewafaii]]''
| "Barse Phuhar"
| Khayyam
| Gulzar
| solo
|-
! Rowspan=3| ''[[Yari Dushmani]]''
| "Sambhalkar Haseenon Se Aankhen Ladana"
| rowspan=3| Laxmikant–Pyarelal
| rowspan=3| Rajendra Krishan
| [[Mohammed Rafi]]
|-
| "Zulf Mahekegi Gardish Mein Jaam Aayega"
| [[Usha Mangeshkar]]
|-
| "Abba Abba, Abba Abba"
| solo
|-
! Rowspan=2| ''Yeh Kaisa Insaaf''
| "Kuchh Kehne Ko Aaya Tha"
| rowspan=3| Ravindra Jain
| rowspan=2| Ravindra Jain
| rowspan=2| Kishore Kumar
|-
| "Pyaar Main Karoonga"
|-
!''Zakhmon Ka Hisab''
| "Sheeshe Ka Mera Badan"
| Hasrat Jaipuri
| solo
|-
!''Zaalim''
| "Chalo Kho Jaaye In Baharon Mein Hum"
| Laxmikant–Pyarelal
| Anand Bakshi
| Kishore Kumar
|-
|}
=== 1981 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! Rowspan=3| ''[[Aakhri Mujra]]''
| "Tum Mere Koi Nahin"
| rowspan=3| Kalyanji–Anandji
| Indeevar
| rowspan=3| solo
|-
| "Nindiya Mori Nindiya"
| Rahi Masoom Raza
|-
| "Mori Nathani Jhoome Re"
| Kaifi Azmi
|-
! Rowspan=2| ''[[Aapas Ki Baat]]''
| "Rang Ude, Rangon Mein Dil Dooba"
| rowspan=2| Anu Malik
| rowspan=2| Anjaan
| [[Kishore Kumar]]
|-
| "Sun O Dilruba Dil Ki Sada"
| solo
|-
!''Agent 009''
| "Teri Umar Ka Saal Badha"
| Sonik–Omi
| Pankaj Gyani
| solo
|-
!''[[Agni Pareeksha (1981 film)|Agni Pareeksha]]''
| "Pyaar Hi Pyaar Aur, Kuchh Bhi Nahin Hai"
| Salil Chowdhury
| Yogesh
| solo
|-
! Rowspan=6| ''[[Ahista Ahista (1981 film)|Ahista Ahista]]''
| "Kabhi Kisi Ko Mukammal Jahaan"
| rowspan=6| Khayyam
| rowspan=4| Nida Fazli
| rowspan=2| solo
|-
| "Jab Kabhi Khwab Chamakta Hai"
|-
| "Nazar Se Phul Chunti Hai Nazar"
| rowspan=2| Anwar
|-
| "Humko Mile Tum, Tumko Mile Hum"
|-
| "Kai Sal Pehle"
| rowspan=2| Naqsh Lyallpuri
|-
| "Bin Bulaye Hum Chale Aaye"
| solo
|-
!''[[Barsaat Ki Ek Raat]]''
| "Manchali O Manchali"
| R D Burman
| Anand Bakshi
| Kishore Kumar
|-
!''[[Beshaque]]''
| "Aa Jaye Na Aaye Na Kahin Dil Ko"
| Usha Khanna
| Anjaan
| solo
|-
! Rowspan=2| ''Bharosa''
| "Kaise Dekhoon Meri Aankhon Ki Bahot Kareeb Ho Tum"
| rowspan=5| R D Burman
| rowspan=5| Gulzar
|rowspan=2| Kishore Kumar
|-
| "Phoolon Ki Zubaan"
|-
! Rowspan=3| ''[[Baseraa]]''
| "Chhup Chhup Chhupa Chhupi"
| Vanita Mishra
|-
| "Tumhe Chhod Ke Ab Jine Ko Jee To Nain"
| Kishore Kumar
|-
| "Aaungi Ek Din Aaj Jaaun"
| solo
|-
! Rowspan=2| ''[[Bhula Na Dena]]''
| "Dil Humne Jise"
| rowspan=2| [[Bappi Lahiri]]
| rowspan=2| Amit Khanna
| rowspan=2| solo
|-
| "Socha Na Samjha"
|-
! Rowspan=| ''[[Biwi-O-Biwi]]''
| "Paise Ka Khel Nirala"
| rowspan=5| R D Burman
| Nida Fazli
| Mohammed Rafi
|-
! Rowspan=4| ''[[Bulundi]]''
| "Kaho Kahan Chale, Jahan Tum Le Chalo"
| rowspan=4| Majrooh Sultanpuri
| [[Kishore Kumar]]
|-
| "Hum Jab Ek Saath Hai Phir Yeh To Koi Daur Nahin"
| [[Mohammed Rafi]]
|-
| "Ab Raat Ho Gayi Jawan, Gesu Kamar Tak Dhale"
| [[Mohammed Rafi]], [[Amit Kumar (singer)|Amit Kumar]], [[Dilraj Kaur]]
|-
| "Tera Dil O Re Babau"
| solo
|-
! Rowspan=2| ''[[Chehre Pe Chehra]]''
| "Main Hoon Pari Adaonbhari"
| rowspan=2| N. Dutta
| rowspan=2| Sahir Ludhianvi
| rowspan=2| solo
|-
| "Jaam Le Jaam, Pakad Jaam"
|-
! Rowspan=1| ''Chhupa Chhupi''
| "Aa Baahon Mein Aa"
| Bhuvan–Hari
| Lokendra
| solo
|-
! Rowspan=2| ''[[Commander (1981 film)|Commander]]''
| "Tu Pappa Ka Beta Hai"
| rowspan=2| Kalyanji–Anandji
| rowspan=2| Anjaan
| [[Mahendra Kapoor]], Poornima
|-
| "Itni Jaldi Kya Hai Jaaneman"
| solo
|-
! Rowspan=3| ''[[Dard (1981 film)|Dard]]''
| "Qubool Kijiye"
| rowspan=3| Khayyam
| rowspan=3| Naqsh Lyallpuri
| solo
|-
| "Jagmag Jagmag Si Mehfil"
| rowspan=2| Kishore Kumar
|-
| "Pyaar Ka Dard Hai, Meetha Meetha Pyara Pyara"
|-
! Rowspan=2| ''[[Dhuan]]''
| "Yeh Hai Mauka"
| rowspan=2| R D Burman
| rowspan=2| Majrooh Sultanpuri
| rowspan=2| solo
|-
| "Phir Aankh Phadki"
|-
!rowspan=4| ''Dushman Dost''
| "Main Hoon Woh Jaadugar"
| rowspan=4| R D Burman
| rowspan=4| Anand Bakshi
| Mohammed Rafi, Kishore Kumar
|-
| "Main Wohi Hoon"
| rowspan=2| solo
|-
| "Pardesi Bahen"
|-
| "Meri Behna Badi Pyari Hai"
| Manna Dey, Shivangi Kolhapure
|-
! Rowspan=2| ''[[Ek Aur Ek Gyarah (1981 film)|Ek Aur Ek Gyarah]]''
| "Garibon Ki Holi Tarang Wali"
| rowspan=5| Laxmikant–Pyarelal
| rowspan=2| Majrooh Sultanpuri
| Kishore Kumar, Hemlata
|-
| "Oh Jaani Aafat Tumhari"
| Mohammed Rafi
|-
! Rowspan=3| ''[[Ek Hi Bhool]]''
| "Bistar Chhod Ke So Gaya"
| rowspan=3| Anand Bakshi
| solo
|-
| "Hum Tunse Pyaar Na Karte Toh"
| rowspan=2| S. P. Balasubrahmanyam
|-
| "Sard Sard Raaton Mein"
|-
!''Farz Aur Pyaar''
| "Bahaar Ko Nazaare Jaise"
| Surinder Kohli, Gurubachan
| Sudarshan Sharma
| Mohammed Rafi
|-
! Rowspan=4| ''[[Fiffty Fiffty]]''
| "Pyar Ka Vaada, Fiffty Fiffty"
| rowspan=4| Laxmikant–Pyarelal
| Rowspan=4| Anand Bakshi
| [[Kishore Kumar]]
|-
| "Chhod Maza Haath, Mala Peene De"
| [[Amit Kumar (singer)|Amit Kumar]]
|-
| "Jogan Ban Gayi Chhodke Main Saara Sansar"
| Rowspan=2| solo
|-
| "Pardesi O Pardesi"
|-
!''Ganga Mang Rahi Balidan''
| "Tum Mere Nainon Se Praanon Mein"
| colspan=2| Prem Dhawan
| solo
|-
! Rowspan=4| ''[[Gehra Zakham]]''
| "Chaal Mein Maal Leke Aaya Hai"
| rowspan=4| R D Burman
| rowspan=2| Vitthalbhai Patel
| [[Mohammed Rafi]], [[Anand Kumar]], [[Udit Narayan]]
|-
| "Mausam Bheega Bheega, Balam Seedha Seedha"
| [[Kishore Kumar]]
|-
| "Chand Sa Chehra, Raat Si Zulfen, Hirni Jaisi Chaal"
| Rowspan=2| Nida Fazli
| [[Mohammed Rafi]], [[Bhupinder Singh (musician)|Bhupinder Singh]]
|-
| "Sheesha-E-Dil Mein Teri Hi Tasveer Hai"
| [[Amit Kumar (singer)|Amit Kumar]], [[Bhupinder Singh (musician)|Bhupinder Singh]], [[Suresh Wadkar]]
|-
! Rowspan=3| ''[[Ghamandee]]''
| "Kehta Hai Man Ka Panchhi"
| rowspan=3| Govind–Naresh
| Mahendra Dalvi
| Suresh Wadkar
|-
| "Ghunghat Me Naina"
| rowspan=2| Mehboob Sarvar
| rowspan=2| solo
|-
| "Sathi Hai Hum Janmo Ke"
|-
! Rowspan=3| ''[[Ghungroo Ki Awaaz]]''
| "Ankhiyon Ka Kajra"
| rowspan=3| R D Burman
| rowspan=3| Vijay Anand
| Kishore Kumar
|-
| "Jo Bhi Tune Dekha"
| rowspan=2| solo
|-
| "Roti Roti Raina"
|-
!rowspan=2| ''Guru Suleman Chela Pahalwan''
| "Nageena Hoon Nageena, Angoothi Mein Jhada Le"
|rowspan=2| Manas Mukherjee
| rowspan=2| Satish Tiwari
| Usha Mangeshkar
|-
| "Aaye Qayamaat Jo Kholun Pat Ghoonghat Ke"
| solo
|-
! Rowspan=3| ''[[Haqdaar]]''
| "Aaja Re Aaja Mere Pyar Ko Pyaas Pukare"
| rowspan=3| Kalyanji–Anandji
| rowspan=3| Rajendra Krishan
| [[Anwar (singer)|Anwar]]
|-
| "O Deewane Jeena Hai To Jhoom Jhoomkar Jee Le"
| [[Amit Kumar (singer)|Amit Kumar]]
|-
| "Nayi Zindagi, Nayi Baharen, Din Albele Aaye"
| [[Manhar Udhas]]
|-
! Rowspan=2| ''[[Harjaee]]''
| "Jeevan Mein Jab Aise Pal Aayenge"
| rowspan=2| R D Burman
| rowspan=2| Gulshan Bawra
| rowspan=2| [[Kishore Kumar]]
|-
| "Sun Zara Shokh Haseena, Tu Hai Anmol Nagina"
|-
!''Hotel''
| "Pyaar Karte Hain Hum Tumhen Itna"
| Usha Khanna
| Indeevar
| Manhar Udhas
|-
! Rowspan=3| ''[[Hum Se Badkar Kaun]]''
| "Deva Ho Deva, Ganpati Deva, Tum Se Badhkar Kaun"
| rowspan=3| Raam Laxman
| rowspan=3| Ravinder Rawal
| [[Mohammed Rafi]], [[Bhupinder Singh (musician)|Bhupinder Singh]], [[Shailendra Singh (singer)|Shailendra Singh]], Sapan Chakraborty
|-
| "Dekho Logon, Yeh Kaisa Zamana"
| [[Mohammed Rafi]]
|-
| "Huyi Umar Yeh"
| solo
|-
! Rowspan=| ''[[Jail Yatra (1981 film)|Jail Yatra]]''
| "Kya Takalluf Hai Wallah, Lijiye Dil Bismillah"
| R D Burman
| Majrooh Sultanpuri
| [[Mohammed Rafi]], [[Bhupinder Singh (musician)|Bhupinder Singh]]
|-
! Rowspan=2| ''[[Jeene Ki Arzoo]]''
| "Kachi Kachi Ambiya"
| rowspan=2| Bappi Lahiri
| rowspan=2| Anjaan
| rowspan=2| solo
|-
| "Haath Na Lagana"
|-
! Rowspan=3| ''Josh''
| "Sheesha Sharab Shabnam Kabhi Gul Kabhi Gul"
| rowspan=3| Bappi Lahiri
| rowspan=3| Amit Khanna
| rowspan=3| solo
|-
| "Jeet Lo Haar Ke, Jhel Yeh Pyaar Ke"
|-
| "Sab Kuchh To Hai Sab Kuchh To Hai"
|-
! Rowspan=3| ''[[Jwaala Daaku]]''
| "Paisa Phenk Tamasha Dekh"
| rowspan=3| Sonik–Omi
| rowspan=3| Kulwant Jani
| rowspan=3| solo
|-
| "Jinhe Ek Baar"
|-
| "Mera Pyar Hai Rang Rangeela"
|-
! Rowspan=4| ''[[Kaalia]]''<ref>{{Cite web|url=https://m.hindigeetmala.net/movie/kaalia.htm|title=Kaalia : Lyrics and video of Songs from the Movie Kaalia (1981)|website=HindiGeetMala}}</ref>
| "Tum Saath Ho Jab Apne"
| rowspan=4| R D Burman
| rowspan=4| Majrooh Sultanpuri
| rowspan=2| Kishore Kumar
|-
| "Jabse Tumko Dekha, Kehte Hain"
|-
| "Sanam Tum Jahan Mera Dil Wahan"
| rowspan=2| solo
|-
| "Dil Toh Dete Nahin"
|-
! Rowspan=3| ''Kal Hamara Hai''
| "Hum Tumse Shaadi Banana Mangta"
| rowspan=3| Shyam Sagar
| rowspan=3| Lakshman Shahabadi
| rowspan=| Mohammed Rafi
|-
| "Hai Ratiya Mori Nathiya"
| solo
|-
| "Yeh Nadiya Behti Hai"
| Bhupinder Singh
|-
! Rowspan=2| ''[[Kahani Ek Chor Ki]]''
| "Yeh Raat Sard Sard Hai"
| rowspan=2| Ravindra Jain
| rowspan=2| Ravindra Jain, Hasrat Jaipuri
| solo
|-
| "Sabko Muraden Milti Hai"
| rowspan=1| Kishore Kumar
|-
! Rowspan=4| ''Kanhaiya''
| "Ataa Pata Koi Na Jane"
| rowspan=4| Basu–Manohari
| Nida Fazli
| Usha Mangeshkar
|-
| "Janani Jagat Ki"
| rowspan=3| Vitthalbhai Patel
| rowspan=3| solo
|-
| "Rajdulara Aankho Ka Tara"
|-
| "Rajdulara Aankh Ka Tara" (Sad)
|-
! Rowspan=2| ''Kasam Bhawani Ki''
| "Julam Bhayo Mope Kal Raat"
| Rowspan=2| Usha Khanna
| rowspan=2| Majrooh Sultanpuri
| Rowspan=2| solo
|-
| "Hum Jo Bewafa Huye"
|-
! Rowspan=2| ''[[Katilon Ke Kaatil]]''
| "Yak Bayak Koi Kahin Mil Jaata Hai"
| rowspan=2| Kalyanji–Anandji
| rowpsan=2| Rajendra Krishan
| rowspan=2| Kishore Kumar
|-
| "Sare Bazaar Karenge Pyar"
|-
! Rowspan=2| ''Khara Khota''
| "Kabhi Hoti Nahin Hia Jiski Haar"
| rowspan=2| Babla
| rowspan=2| Indeevar
| rowspan=2| solo
|-
| "Zamane Mein Hamara Naam"
|-
! Rowspan=2| ''[[Khoon Aur Paani]]''
| "Duniya Ke Sitam"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Majrooh Sultanpuri
| Lata Mangeshkar
|-
| "Mat Jaa, Mat Jaa, Royega Dil"
| Kishore Kumar
|-
! Rowspan=4| ''[[Khoon Ki Takkar]]''
| "Teri Meri Mohabbat Bhi Ek Amar Kahani Hai" (version 1)
| rowspan=4| Sonik–Omi
| rowspan=4| Verma Malik
| rowspan=2| Mohammed Rafi
|-
| "Tu Been Baja Sajna"
|-
| "Ae Tu Kya Hai"
| solo
|-
| "Teri Meri Mohabbat Bhi Ek Amar Kahani Hai" (version 2)
| Aarti Mukherjee
|-
! Rowspan=3| ''[[Khuda Kasam (1981 film)|Khuda Kasam]]''
| "Aap Ne Yeh Kya Keh Diya"
| rowspan=5| Laxmikant–Pyarelal
| rowspan=3| Majrooh Sultanpuri
| Mohammed Rafi
|-
| "Kachchi Kali Gulab Ki"
| rowspan=2| solo
|-
| "Pyar Ne Di Awaaz"
|-
! Rowspan=2| ''[[Krodhi]]''
| "Ladkiwalon, Ladki Tumhari Kunwari Reh Jaati"
| rowspan=2| Anand Bakshi
| [[Kishore Kumar]]
|-
| "Phoolmati Ka Gajra"
| solo
|-
! Rowspan=2| ''[[Kudrat]]''
| "Sawan Nahin, Bhadon Nahin, O Bindiyawali Bata"
| rowspan=2| R D Burman
| rowspan=2| Majrooh Sultanpuri
| [[Suresh Wadkar]]
|-
| "Sajti Hai Yun Hi Mehfil"
| solo
|-
!''[[Laawaris (1981 film)|Laawaris]]''
| "Kab Ke Bichhade Huye Hum"
| Kalyanji–Anandji
| Anjaan
| Kishore Kumar
|-
! Rowspan=2| ''Ladies Tailor''
| "Mere Mehboob Tum Ho Tumhi Ho"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Majrooh Sultanpuri
| rowspan=1| Mohammed Rafi
|-
| "Sanam Ko Aane To Do"
| Mahendra Kapoor, Manna Dey
|-
! rowspan=2| ''[[Love Story (1981 film)|Love Story]]''
| "Kya Ghazab Karte Ho Ji"
| rowspan=2| R D Burman
| rowspan=2| Anand Bakshi
| solo
|-
| "Yeh Ladki Zara Si Deewani Lagti Hai"
| Amit Kumar
|-
!''Mahabali Hanuman''
| "Thirak Thirak Jhoom Jhoom"
| Kamal Kant
| Uday Khanna
| solo
|-
! Rowspan=4| ''[[Maan Gaye Ustad]]''
| "Ek Chhatri Aur Hum Hain Do"
| rowspan=4| Sonik–Omi
| rowspan=4| Verma Malik
| Mohammed Rafi
|-
| "Hum Salaam Karte Hai Mehfil Mein"
| rowspan=3| solo
|-
| "Jawaani Ki Kahani Bhi Ajeeb Hai"
|-
| "Mujhpe Bhi To Dalo Ek Nazar"
|-
! Rowspan=3| ''Mahfil''
| "Idhar Aao Pyare Kahi"
| rowspan=3| Shankar–Jaikishan
| Rowspan=3| Majrooh Sultanpuri
| rowspan=3| solo
|-
| "Kiwadiya Laga Le"
|-
| "Looti Kaisi Mehfil"
|-
! rowspan=2| ''Mangalsutra''
| "Raat Banu Main Aur Chand Bano Tum"
| rowspan=2| R D Burman
| rowspan=2| Nida Fazli
| Bhupinder Singh
|-
| "Jawani Shararat Kare, Ude Aanchal Baaje Payal"
| S. P. Balasubrahmanyam
|-
!''Meena Kumari Ki Amar Kahani''
| "Chhayi Chhayi Nazar Lag Gayi"
| Khayyam
| Afzal Shadab
| Lata Mangeshkar
|-
! Rowspan=2| ''Mera Salaam''
| "Mera Mehboob Hai"
| rowspan=2| Raj Kamal
| Rowspan=2| Kulwant Jani
| Rowspan=2| solo
|-
| "Uyi Tauba Tauba"
|-
! Rowspan=6| ''[[Meri Aawaz Suno]]''
| "Hay, Kya Soch Rahi Ho"
| rowspan=6| Laxmikant–Pyarelal
| rowspan=6| Anand Bakshi
| rowspan=2| [[Kishore Kumar]]
|-
| "Mehmanon Ko Salaam Hai Mera"
|-
| "Gudiya Ri Gudiya Tu Batla"
| rowspan=4| solo
|-
| "Gudiya Ri Gudiya Tu Batla" (Sad)
|-
| "Tumhe Dekha Hai To Aisa Lagta"
|-
| "Achha Hua Tum Mil Gaye"
|-
! rowspan=4| ''Naag Devta''
| "Chhaya Mein Aaj Teri Meri Pyaar"
|rowspan=4| Avinash Vyas
|rowspan=4| Rajkumar Bohra
|rowspan=3| solo
|-
| "Jaaye Kahan Yeh Piya Ke Joganiya"
|-
| "Jhankar Paayal Ki Tose Binti Kare"
|-
| "Jai Jai Naag Devta"
| Mahendra Kapoor
|-
! ''[[Nakhuda (film)|Nakhuda]]''
| "Tujhe Maroongi Phoolon Ki Maar Sajna"
| Khayyam
| Nida Fazli
| Mahendra Kapoor
|-
! Rowspan=3| ''[[Naram Garam]]''
| "Hame Rasto Ki Jarurat Nahi Hai"
| rowspan=3| R D Burman
| rowspan=3| Gulzar
| rowspan=3| solo
|-
| "Mere Aangna Aaya Re Ghansham"
|-
| "Mere Chehre Mein Chhupa Hai"
|-
!''[[Naseeb (1981 film)|Naseeb]]''
| "Rang Jamake Jaayenge"
| Laxmikant–Pyarelal
| Anand Bakshi
| Usha Mangeshkar, Kishore Kumar, Mohammed Rafi
|-
! Rowspan=2| ''Paanch Qaidi''
| "O Ripapa, O Ripapa"
| rowspan=2| Bappi Lahiri
| rowspan=2| Anjaan
| rowspan=1| solo
|-
| "Meri Mummy Jaisi Koi Mummy Nahin Hai"
| Chandrani Mukherjee
|-
! Rowspan=2| ''Poonam''
| "Mahiya Mera Mann Le Jiya"
| rowspan=2| Anu Malik
| rowspan=2| Anjaan
| rowspan=2| solo
|-
| "Haye O Rabba Nahin Lagta"
|-
! Rowspan=3| ''[[Prem Geet (1981 film)|Prem Geet]]''
| "Tumne Kya Kya Kiya Hai Hamare Liye"
| rowspan=3| Jagjit Singh
| rowspan=3| Indeevar
| rowspan=3| solo
|-
| "Tere Geeton Ki Main Diwani"
|-
| "Dulhe Raja Aayenge"
|-
! Rowspan=5| ''[[Professor Pyarelal]]''
| "Aage Aage Ek Haseena"
| rowspan=5| Kalyanji–Anandji
| rowspan=5| Rajendra Krishan
| rowspan=3| solo
|-
| "Ga Ga Ga Gaaye Jaa" (version 2)
|-
| "Dilwala Mastana"
|-
| "Tere Siwa Na Kisi Ka Banoonga"
| rowspan=2| Mohammed Rafi
|-
| "Yeh Vaada Raha Dilruba"
|-
!''[[Pyaasa Sawan]]''
| "O Meri Chhammak Chhallo"
| Laxmikant–Pyarelal
| Santosh Anand
| Kishore Kumar
|-
!''[[Rocky (1981 film)|Rocky]]''
| "[[Aa Dekhe Zara (song)|Aa Dekhe Zara]]"
| R D Burman
| Anand Bakshi
| Kishore Kumar
|-
!''Roohi''
| "Sajna Mujhe Roohi Keh Ke Bulaya"
| Manoj–Gyan
| Manoj Bhatnagar
| solo
|-
!''Saajan Ki Saheli''
| "Nautak Maangta Ke Pau Ser Maangta"
| Usha Khanna
| Majrooh Sultanpuri
| solo
|-
!''Sadka Kamliwaale Ka''
| "Mere Najariya Ka Maar"
| Yunus Malik
| Maya Govind
| solo
|-
! Rowspan=2| ''[[Sahhas]]''
| "Saare Zamaane Mein"
| Rowspan=2| Bappi Lahiri
| Anjaan
| solo
|-
| "Kaali Kaali Aankhonwali"
| Farooq Kaiser
| Bappi Lahiri
|-
! Rowspan=2| ''Sangdil''
| "Sapne Tere Sach Ho Jahan Aa Door"
| rowspan=2| Brij Bhushan
| rowspan=2| Anjaan
| Mohammed Rafi
|-
| "Hai Kuchh Kuchh Hosh Bhi"
| solo
|-
!''Sanjh Ki Bela''
| "Yeh Dil Hai Teri Hi Nigaahon Ka Nishana"
| Ravi
| Prem Dhawan
| solo
|-
!''Sant Gyaneshwar''
| "Prem Ki Boli Bol Tu Mukh Se"
| Shrikant
| Bharat Vyas
| solo
|-
! Rowspan=3| ''Shama''
| "Hum Tum Dono Rahenge"
| rowspan=3| Usha Khanna
| rowspan=3| Asad Bhopali, Zafar Gorakhpuri
| rowspan=3| solo
|-
| "Khushboo Ban Tohare"
|-
| "Ek Baar Sirf Ek Baar Tu Jo Muskura De" (version 2)
|-
!''[[Shakka (film)|Shakka]]''
| "Tera Woh Raasta, Mera Woh Raasta"
| Rajesh Roshan
| Verma Malik
| Mohammed Rafi
|-
!''[[Sharda (1981 film)|Sharda]]''
| "Aa Main Tujhko Pyaar Karoon"
| Laxmikant–Pyarelal
| Anand Bakshi
| solo
|-
! Rowspan=4| ''Shraddhanjali''
| "Yun To Haseen Hazaro Najar Se Gujar Gaye"
| rowspan=4| Hemant Bhosle
| rowspan=4| Anjaan
| rowspan=2| Amit Kumar
|-
| "Hai Bada Natkhat Hai Bada Shaitan"
|-
| "Jana Kahan Jaoon Kahan"
| solo
|-
| "Jane Kyo Aisa Lagta Hai"
| Bhupunder Singh
|-
! Rowspan=5| ''Sweety''
| "Aaj Akeli Main"
| rowspan=5| Hemant Bhosle
| rowspan=3| Majrooh Sultanpuri
| rowspan=2| solo
|-
| "Leke Dil Chala Gaya"
|-
| "Chhodo Na Kya Karte Ho"
| rowspan=2| Amit Kumar
|-
| "Aate Jaate Tujhe Dekha Tha"
| rowspan=2| Anjaan
|-
| "Aaiye Aur Paas"
| solo
|-
!''Tajurba''
| "Dil Chura Le Jo Mera"
| Usha Khanna
| Indeevar
| Naseeruddin Shah
|-
!rowspan=5| ''[[Umrao Jaan (1981 film)|Umrao Jaan]]''<ref name="auto">{{Cite web|url=https://www.hindigeetmala.net/movie/umrao_jaan.htm|title=Umrao Jaan : Lyrics and video of Songs from the Movie Umrao Jaan (1981)|website=HindiGeetMala}}</ref>
| "Jab Chor Ban Jaaye Sipahiya"
|rowspan=5| Khayyam
|rowspan=5| [[Akhlaq Mohammed Khan|Shahryar]]
| rowspan=5| solo
|-
| "[[In Ankhon Ki Masti Ke]]"
|-
| "Jab Bhi Milti Hai"
|-
| "Justuju Jiski Thi"
|-
| "Yeh Kya Jagah Hai Doston"
|-
! Rowspan=4| ''[[Waqt Ki Deewar]]''
| "Jawani Ka Guzra Zamana"
| rowspan=4| Laxmikant–Pyarelal
| rowspan=4| Anjaan
| Mohammed Rafi, Manna Dey
|-
| "Mannchahi Ladki Kahin Koi Mil Jaaye"
| rowspan=2| Kishore Kumar
|-
| "Chal Cinema Dekhne Ko Jaaye Gori"
|-
| "Khel Tamaashe Waali"
| solo
|-
!''[[Wardat]]''
| "Na Main Hoon Tera"
| Bappi Lahiri
| Ramesh Pant
| Bappi Lahiri
|-
!''Yeh Kaisa Nasha Hai''
| "Dekh Ke Tera Roop"
| Chand Pardesi
| D S Sultania
| Shailendra Singh
|-
!''[[Yeh Rishta Na Tootay]]''
| "Main Khubsoorat Hoon, Har Dil Ki Zaroorat Hoon"
| Kalyanji–Anandji
| Anjaan
| solo
|-
|}
=== 1982 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
!''[[Aadat Se Majboor (film)|Aadat Se Majboor]]''
| "Tera Pyar Mila"
| Usha Khanna
| Indeevar
| rowspan=9| solo
|-
! Rowspan=2| ''[[Adhura Aadmi]]''
| "Jaani Tum Haseen Ho"
| rowspan=6| R D Burman
| rowspan=2| Yogesh
|-
| "Husn Par Meri Nathmi Ka Ghera Hai"
|-
! Rowspan=2| ''[[Aamne Samne (1982 film)|Aamne Samne]]''
| "Oonchi Neechi Palki"
| Rowspan=2| Anjaan
|-
| "Gale Mil Lo, O Deewanon"
|-
! Rowspan=2| ''[[Angoor (1982 film)|Angoor]]''
| "Honthon Pe Beeti Baat Aayi Hai"
| rowspan=2| Gulzar
|-
| "Roz Roz Dali Dali"
|-
! Rowspan=3| ''[[Anokha Bandhan]]''
| "Ram Lakhan The Do Bhai"
| rowspan=3| Usha Khanna
| Yogesh
|-
| "Ram Tumhi Ne Humko Diya Hai"
| Nida Fazli
|-
| "Piya Tune Apne Rang Me Rang Diya Piya"
| Asad Bhopali
| Shabbir Kumar
|-
! Rowspan=2| ''Apna Bana Lo''<ref>{{Cite web|url=https://m.hindigeetmala.net/movie/apna_bana_lo.htm|title=Apna Bana Lo : Lyrics and video of Songs from the Movie Apna Bana Lo (1982)|website=HindiGeetMala}}</ref>
| "Pani Me Aag Lagane"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=7| Anand Bakshi
| rowspan=2| solo
|-
| "Apne Apne Miya Pe"
|-
! Rowspan=3| ''[[Ashanti (1982 film)|Ashanti]]''
| "Dil Diya Hai Maine Yaad Rakhna"
| rowspan=3| R D Burman
| Amit Kumar
|-
| "Na Tujse Na Mujhse"
| Kishore Kumar, Shailendra Singh
|-
| "Lawangi Mirchi Main Kolhapur Ki"
| Lata Mangeshkar
|-
! Rowspan=2| ''Ayaash''
| "Suno Balam Harjayi"
| rowspan=2| Ravindra Jain
| rowspan=2| solo
|-
| "Topi Wale Ne Karke Salaam"
|-
! Rowspan=3| ''[[Baawri]]''
| ""Hey Ambike, Jagadambike, Hey Maa"
| rowspan=3| Khayyam
| rowspan=3| Maya Govind
| rowspan=3| solo
|-
| "Aai Karke Singhar Tohe Nindiya Laagi"
|-
| "Kahan Phansi Jaan"
|-
! Rowspan=3| ''[[Badle Ki Aag]]''
| "Yaar Mera Chikna Gadha"
| Rowspan=6| Laxmikant–Pyarelal
| Suresh Wadkar, Poornima
| Anand Bakshi
|-
| "Teri Mehfil Mein Hi Tujhko Woh Tamsha Dikhungi"
| Rowspan=2| Verma Malik
| solo
|-
| "Main Bewafa Nahin, Nazron Ne Na Utariye"
| Mahendra Kapoor
|-
! Rowspan=3| ''[[Baghawat]]''
| "Mere Mehboob Tujhe Salaam"
| rowspan=3| Anand Bakshi
| Mohammed Rafi
|-
| Duniya Se Dilwalon Se"
| Mahendra Kapoor
|-
| "Ae Mere Deewane Dil"
| solo
|-
! Rowspan=5| ''[[Barrister]]''
| "Gora Gora Chhora"
| Rowspan=5| Hemant Bhosle
| Rowspan=5| Yogesh
| Kishore Kumar
|-
| "Na Tum Bhoole Na Hum Bhoole"
| Bhupinder Singh
|-
| "Masti Bhari Raat Hai"
| Rowspan=6| solo
|-
| "Aaya Rangeela Sawan"
|-
| "Suno Kahani Ek Ladke Ki"
|-
!rowspan=2| ''Bedard''
| "Mere Baalon Ka Gajra Na Bole"
| rowspan=2| Kanti–Kiran
| Rowspan=2| Naqsh Lyallpuri
|-
| "Sapnon Ke Moti Bikhrate Nindiya"
|-
!''[[Begunaah Qaidi]]''
| "Main Toh Patnewali Hoon"
| Sonik–Omi
|Asad Bhopali
|-
! Rowspan=2| ''[[Bezubaan]]''
| "Yeh Mausam Hai Matwala"
| rowspan=2| Raam Laxman
| rowspan=2| Ravinder Rawal
| Vinod Sehgal
|-
| "Gaaon Gakiyo, Phoolon Kaliyo"
| Kishore Kumar
|-
! Rowspan=2| ''[[Bheegi Palkein]]''
| "Aadmi Ki Zindagi Ka Aurat Nasha Hai"
| rowspan=2| Jugal Kishore–Tilak Raj
| rowspan=2| M G Hashmat
| Mohammed Rafi
|-
| "Nainon Mein Sapne Samaye"
| Amit Kumar
|-
! ''[[Chalti Ka Naam Zindagi]]''
| "Yeh Mohabbat Kya Karenge"
| Kishore Kumar
| Anjaan
| Shankar Dasgupta, Kishore Kumar, Dilraj Kaur, Anoop Kumar
|-
! Rowspan=4| ''[[Chambal Ke Daku]]''
| "Asha Ka Sooraj Dooba Hain"
| rowspan=4| B. T. Singh
| rowspan=4| Gauhar Kanpuri
| rowspan=2| solo
|-
| "Ram Kasam Yeh Jawaani"
|-
| "Are Hardam Kam Zaroori"
| Javed Khan
|-
| "Uljhan Ho, Chahe Koi Aa Jaaye Mushkil"
| Mohammed Rafi, Manna Dey
|-
!''[[Chorni]]''
| "Haye Yeh Kaisa Nasha"
| Shankar–Jaikishan
|Shaily Shailendra
| solo
|-
! Rowspan=3| ''[[Daulat (1982 film)|Daulat]]''
| "Khoobsurat Ho Khoobsurat Ho"
| rowspan=3| R D Burman
| rowspan=3| Nida Fazli, Vitthalbhai Patel
| Kishore Kumar
|-
| "Aaj Taron Me Chamak Phulo Me Rangat"
| Suresh Wadkar
|-
| "Main Toh Hoon Shola Badan"
| solo
|-
! Rowspan=3| ''Deedar-e-Yaar''
| "Jana Jana Jaldi Kya Hai"
| Rowspan=5| Laxmikant–Pyarelal
| rowspan=2| Kaifi Azmi
| Rowspan=2| solo
|-
| "Marne Ka Gham Nahi Hai"
|-
| "Eid Ka Din Hain"
| Sahir Ludhianvi
| Mohammed Rafi
|-
! Rowspan=2| ''[[Desh Premee]]''
| "Ari O Potti, Khaatun Ki Khidamat Mein"
| rowspan=2| Anand Bakshi
| Kishore Kumar
|-
| "Gore Nahi Hum Kale Sahi"
| Laxmikant
|-
! Rowspan=4| ''[[Dharam Kanta]]''
| "Yeh Gotedar Lahenga"
| Rowspan=4| Naushad
| Rowspan=4| Majrooh Sultanpuri
| Rowspan=2| Mohammed Rafi
|-
| "Tera Nam Liya Dil Tham Liya"
|-
| "Ghunghroo Toot Gaye"
| Rowspan=2| solo
|-
| "Teri Meri Hai Nazar Qatil Ki"
|-
! Rowspan=3| ''Dial 100''
| "Koi Kunwara Mara Gaya"
| rowspan=3| Bappi Lahiri
| rowspan=3| Anjaan
| Bappi Lahiri, Manna Dey
|-
| "Aadhi Aadhi Raat Meri"
| Rowspan=2| Kishore Kumar
|-
| "Nachoon Main Tu Sajh Utha"
|-
!''Dil Hi Dil Mein''
| "Jiska Jawaab Nahin"
| Jatin–Mandheer
| Anwar Allahabafi
| Mohammed Rafi
|-
! Rowspan=3| ''[[Dil-e-Nadaan]]''
| "Jab Prem Agan Lag Jaaye"
| rowspan=3| Khayyam
| rowspan=3| [[Naqsh Lyallpuri]]
| [[Suresh Wadkar]]
|-
|"Dil Tera Hai, Jaan Bhi Hai Teri Piya"
| rowspan=2| solo
|-
| "Saji Sawaari Sej Ki"
|-
!''Dil... Akhir Dil Hai''
| "Chandan Ko Choom Choom Mast Hai Pawan"
| Khayyam
| Anil Mohile
| solo
|-
!''[[Do Dishayen]]''
| "Main Tere Paas Hu"
| Laxmikant–Pyarelal
| Anand Bakshi
| Anwar
|-
!''Do Guru''
| "Kisi Ne Humse"
| Kalyanji–Anandji
| rowspan=4| Verma Malik
| Rowspan=4| solo
|-
! Rowspan=3| ''[[Do Ustad (1982 film)|Do Ustad]]''
| "Meri Choli Pe Chameli"
| rowspan=3| Bappi Lahiri
|-
| "Us Raat Ki Subah"
|-
| "Ae Dil Tu Kya Jaane"
|-
! Rowspan=2| ''Eent Ka Jawaab Patthar''
| "Hum Darde Mohabbat Ki Dil Ko Na Saja Dete"
| rowspan=2| Shankar–Jaikishan
| Rowspan=2| Naqsh Lyallpuri
| Rowspan=2| solo
|-
| "Sau Baar Kaha Dil Ne"
|-
! ''Ek Aur Sangram''
| Shaadi Main Karoongi"
| Sapan–Jagmohan
| Gauhar Kanpuri
| Suresh Wadkar
|-
! Rowspan=4| ''[[Farz Aur Kanoon]]''
| "Naujawan"
| Rowspan=4| Laxmikant–Pyarelal
| rowspan=4| Anand Bakshi
| rowspan=2| [[Kishore Kumar]]
|-
| "Mere Ghar Ka"
|-
| "Jab Tak Pyar"
| [[Shabbir Kumar]]
|-
| "Dil Ko Zara Sambhalo"
| [[Shabbir Kumar]], [[Suresh Wadkar]]
|-
! Rowspan=4| ''[[Geet Ganga]]''
| "Mere Ghunghroo Kare Jo Jhankar"
| Rowspan=4| Sapan–Jagmohan
| Rowspan=4| Anjaan
| Mahendra Kapoor
|-
| "Hum Roz Dulhan Ban Jate Hai"
| rowspan=3| solo
|-
| "Le Gayo Re Daaka Daal Ke"
|-
| "Chanda Se Pyaari Dulhaniya"
|-
!''Gul-e-Bakavali''
| "Sarkar Aaiye, Tasreef Laiye"
| Rajesh Roshan
| Indeevar
| Mohammed Rafi, Usha Mangeshkar, Jaspal Singh
|-
! Rowspan=2| ''Gumsoom''
| "Ari O Paro"
| Rowspan=2| Bappi Lahiri
| Rowspan=2| Yogesh
| Kishore Kumar
|-
| "Chhup Chhup Taake Saiyan"
| solo
|-
! Rowspan=4| ''[[Haathkadi (1982 film)|Hathkadi]]''
| "Disco Station"
| rowspan=4| Bappi Lahiri
| Rowspan=4| Majrooh Sultanpuri
| solo
|-
| "Ek Baar Milke Jaye Nahi Dil Se"
| rowspan=3| Kishore Kumar
|-
| "Kabhi Tum Aag, Kabhi Tum Paani"
|-
| "Jiyo Jiyo Pyare, Kya Thaath Hai Tumhare"
|-
! rowspan=3| ''[[Heeron Ka Chor]]''
| "Yeh Jawaani Hai Meri Jaan"
| rowspan=3| Sonik–Omi
| rowspan=3| Verma Malik
| rowspan=2| Mohammed Rafi
|-
| "Kuch Aise Aashiq"
|-
| "Chilman Se Nikal Kar Saamne Aa"
| Aziz Nazan
|-
! Rowspan=4| ''[[Insaan (1982 film)|Insaan]]''
| "Holi Mein Haule Haule Dil Dole"
| rowspan=5| Laxmikant–Pyarelal
| rowspan=4| Anand Bakshi
| [[Mohammed Rafi]], [[Shailendra Singh (singer)|Shailendra Singh]]
|-
| "Saathiya Tu Mere Sapnon Ka Meet Hai"
| rowspan=2| Mohammed Rafi
|-
| "Pee Li Thodi Bhang, Tabiyat Huyi Malang"
|-
| "Raja Mori Baali Umar"
| solo
|-
! ''[[Jaanwar (1982 film)|Jaanwar]]''
| "Yeh Kaisa Nasha Sa Chhane Laga"
| Majrooh Sultanpuri
| [[Kishore Kumar]]
|-
! Rowspan=5| ''Jawalaa Dahej Ki''
| "Mana Safar Hai Mushkil Manzil Bhi Door Hai"
| rowspan=5| Chitragupt
| rowspan=5| Anjaan
| Kishore Kumar
|-
| "Mai Hoon Kali Nadaan"
| Usha Mangeshkar
|-
| "Mile Ho Aaj To Hamse Nazar"
| Rowspan=3| solo
|-
| "Mori Daihya Balam Ki Zamindari"
|-
| "Saiyan Teri Godi Mein"
|-
! Rowspan=3| ''[[Jeeo Aur Jeene Do]]''
| "Hathapai Na Karo"
| rowspan=3| Laxmikant–Pyarelal
| Rowspan=3| Verma Malik
| rowspan=2| solo
|-
| "Bulbula Pani Ka"
|-
| "Kurta Malmal Ka"
| [[Suresh Wadkar]]
|-
!''[[Jeevan Dhaara]]''
| "Samay Ke Darpan Mein"
| Laxmikant–Pyarelal
| Anand Bakshi
| Suresh Wadkar
|-
! Rowspan=4| ''Jogi''
| "Gehri Taliya Hai Naina Hamaar"
| rowspan=4| Ravi
| Anjum Jaipuri
| rowspan=3| solo
|-
| "Tune To Jogi Jog Liya"
| rowspan=3| Shakeel Badayuni
|-
| "Ek Bhuli Yad Ne Phir Dil Mera Tadpa Diya"
|-
| "Ab Mujhe Chand Sitaron Ki Zarurat Nahi"
| Mohammed Rafi
|-
! Rowspan=2| ''[[Johnny I Love You]]''
| "Rang Rangila Hai Yeh"
| rowspan=2| Rajesh Roshan
| rowspan=2| Anand Bakshi
| solo
|-
| "Aage Aage Dulha Chale"
| Kishore Kumar
|-
! Rowspan=2| ''[[Kachche Heere]]''
| "Mere Jhumke Ke"
| rowspan=2| R D Burman
| rowspan=2| Majrooh Sultanpuri
| rowspan=2| solo
|-
| "Chadhi Jawaani"
|-
!''[[Kasam Durga Ki]]''
| "Jee Kardai Mai Dig Paoon Dharam"
| Sonik–Omi
| Naqsh Lyallpuri
| solo
|-
!''Keh Do Pyaar Hai''
| "Milte Hain Sab Se"
| Bappi Lahiri
| Indeevar
| solo
|-
! Rowspan=3| ''[[Khush Naseeb]]''
| "O Sajna" (version 1)
| Rowspan=3| Kalyanji–Anandji
| rowspan=2| Anjaan
| rowspan=2| solo
|-
| "O Sajna" (version 2)
|-
| "Baar Baar Log Mujhe Poochhe"
| Maya Govind
| Amit Kumar
|-
! Rowspan=5| ''[[Lakshmi (1982 film)|Lakshmi]]''<ref>{{cite web|url=http://myswar.com/album/lakshmi-1982|title=Lakshmi(Music)|work=My Swar}}</ref>
| "Kora Man Kori Kaya"
| rowspan=5| Usha Khanna
| rowspan=2| Indeevar
| Amit Kumar
|-
| "Kabhi Dekhe Khushiyaan Kabhi"
| rowspan=3| solo
|-
| "Haalat Se Ladna Mushkil Tha"
| Sahir Ludhianvi
|-
| "Shaam Peene Ki Phir"
| rowspan=2| Kaifi Azmi
|-
| "Kya Baat Hai"
| Mahendra Kapoor
|-
!''[[Log Kya Kahenge (film)|Log Kya Kahenge]]''
| "Aap Kyun Udaas Hain"
| Kalyanji–Anandji
| Indrajeet Singh Tulsi
| Rowspan=2| solo
|-
!''Lubna''
| "Mubarakbaad Bismillah, Meri Banno Ban Gayi Dulhan"
| Manas Mukherjee
| Aish Kanwal
|-
! Rowspan=2| ''[[Mehndi Rang Layegi]]''
| "Aankh Milti Hai To"
| rowspan=2| Laxmikant–Pyarelal
| Rowspan=2| Anjaan
| [[Kishore Kumar]]
|-
| "Heer Sohni Shirin Laila"
| solo
|-
! Rowspan=2| ''[[Main Intaquam Loonga]]''
| "Mujhe Na Bulaya Karo"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Anand Bakshi
| Kishore Kumar
|-
| "Is Sapnon Ki Shehzadi Ko"
| Shabbir Kumar
|-
!''[[Meharbani]]''
| "Mat Poochh Ke Kis Ki Aashiq Hain"
| colspan=2| Ravindra Jain
| Mohammed Rafi
|-
! Rowspan=3| ''[[Namak Halaal]]''
| "Aaj Rapat Jaayen To"
| rowspan=3| Bappi Lahiri
| rowspan=3| Anjaan
| Kishore Kumar
|-
| "Raat Baki, Baat Baki"
| Bappi Lahiri, Shashi Kapoor
|-
| "Jawani Janeman Haseen Dilruba"
| solo
|-
! Rowspan=3| ''[[Namkeen]]''
| "Anki Chali Main Banki Chali"
| rowspan=3| R D Burman
| rowspan=3| Gulzar
| rowspan=2| solo
|-
| "Badi Der Se Megha Barsa"
|-
| "Phir Se Aaiyo, Badra Bidesi"
| R D Burman
|-
! Rowspan=3| ''[[Naya Safar]]''
| "Ke Dekho Aaye Humare Mehman"
| rowspan=3| Nadeem–Shravan
| rowspan=3| Surendra Sathi
| Rowspan=2| solo
|-
| "Jai Shiv Shankar"
|-
| "Jane Kyu Log Mujhe Baar Baar"
| [[Usha Mangeshkar]]
|-
!''[[Nikaah]]''
| "Chehra Chhupa Liya Hai Kisi Ne Hijab Mein"
| Ravi
| Hasan Kamal
| Mahendra Kapoor, Salma Agha
|-
! Rowspan=3| ''[[Patthar Ki Lakeer]]''
| "Hum Woh Badal Hai"
| rowspan=3| Usha Khanna
| rowspan=3| Anjaan
| rowspan=3| solo
|-
| "Kis Thane Mein Rapat Likhwaoon"
|-
| "Chhota Sa Yeh Mera Ghar" (female)
|-
!''Pyaar Mein Sauda Nahin''
| "Humko Toh Pyaar Ho Gaya Hai"
| Amar–Utpal
| Majrooh Sultanpuri
| solo
|-
! Rowspan=2| ''[[Raaj Mahal]]''
| "Tere Dil Se Teri Mehfil Se
| rowspan=2| Kalyanji–Anandji
| rowspan=2| Verma Malik
| [[Hemlata (singer)|Hemlata]]
|-
| "Aayi Hai Pyar Ki Bahar"
| solo
|-
! Rowspan=2| ''[[Raakh Aur Chingari]]''
| "Gora Mukhda"
| rowspan=2| Ratandeep–Hemraj
| Tajdar Taj
| rowspan=2| solo
|-
| "Itni Wafa To"
| Indeevar
|-
! Rowspan=3| ''[[Raaste Pyar Ke]]''
| "Saara Din Satate Ho"
| rowspan=3| Laxmikant–Pyarelal
| rowspan=3| Anand Bakshi
| Kishore Kumar
|-
| "Gokul Ki Galiyon Ka Gwala"
| Kishore Kumar, Usha Mangeshkar
|-
| "Kisi Ne Prem Ka Amrit Chakha"
| Lata Mangeshkar, Usha Mangeshkar
|-
! Rowspan=3| ''Raja Jogi''
| "Jogi Re Jogi"
| Rowspan=3| Hemant Bhosle
| rowspan=3| Naqsh Lyallpuri
| Usha Mangeshkar
|-
| "Mera Maheka Badan"
| rowspan=2| solo
|-
| "Tu Ang Laga Ja"
|-
!''Rajput''
| "Bhagi Re Bhagi Re Bhagi Brijbala"
| Laxmikant–Pyarelal
| Anand Bakshi
| Mahendra Kapoor, Dhiraj Kaur
|-
! Rowspan=4| ''[[Raksha (1982 film)|Raksha]]''
| "Mil Gaye, Dil Mil Gaye, Phool Banke Khil Gaye"
| rowspan=4| R D Burman
| rowspan=4| Anand Bakshi
| rowspan=2| [[Kishore Kumar]]
|-
| "Naye Purane Saal Mein Ek Raat Baki Hai"
|-
| "Main Chalta Hoon, Mujhe Jane Do"
| [[Mohammed Rafi]]
|-
| "Jani Dilbar Jani"
| solo
|-
!''[[Rustom (1982 film)|Rustom]]''
| "Mujhko Pasand Hai Tu"
| Kalyanji–Anandji
| Indeevar
| solo
|-
! Rowspan=4| ''[[Samraat (1982 film)|Samraat]]''
| "Dil Se Duniya Ke Darr Ko Nikal De"
| rowspan=4| Laxmikant–Pyarelal
| rowspan=4| Anand Bakshi
| rowspan=2| Kishore Kumar
|-
| "Ladki Haseen Ho Ladka Naujawaan Ho"
|-
| "Meri Jaan Tujhe Mere Hatho Marna"
| solo
|-
| "Panja Chhaka Phir Satta"
| Kishore Kumar, Shailendra Singh
|-
! Rowspan=3| ''[[Sanam Teri Kasam (1982 film)|Sanam Teri Kasam]]''
| "Jaan-E-Jaan, O Meri Jaan-E-Jaan"
| rowspan=3| R D Burman
| rowspan=3| Gulshan Bawra
| R D Burman
|-
| "Kitna Bhi Tu Kar Le Sitam" (female)
| solo
|-
| "Kitna Bhi Tu Kar Le Sitam" (duet)
| Kishore Kumar
|-
! Rowspan=3| ''[[Satte Pe Satta]]''
| "Dukki Pe Dukki Ho"
| rowspan=3| R D Burman
| rowspan=3| Gulshan Bawra
| Bhupinder Singh, Sapan Chakraborty, Kishore Kumar, R D Burman
|-
| "Jhuka Ke Sar Ko Poochho"
| Sapan Chakraborty
|-
| "Mausam Mastana"
| Dilraj Kaur
|-
! Rowspan=3| ''[[Sawaal (film)|Sawaal]]''
| "Sab Ki Nigaah Mein Sawwaal Hai"
| rowspan=3| Khayyam
| rowspan=3| Majrooh Sultanpuri
| rowspan=2| solo
|-
| "Dilruba Hoon Dilruba"
|-
| "Maana Churaoge Badan"
| Kishore Kumar
|-
! Rowspan=2| ''[[Shaukeen]]''
| "Ye Range Mehfil"
| Rowspan=2| R D Burman
| rowspan=2| Yogesh
| rowspan=2| solo
|-
| "Suhani Shaam Aayi Hai"
|-
!''[[Shiv Charan]]''<ref>{{Cite web|url=https://gaana.com/album/shiv-charan|title=Shiv Charan Songs: Shiv Charan MP3 Songs by Chandrani Mukherjee Online Free on Gaana.com|via=gaana.com}}</ref>
| "Meri Hai Jawani"
| Bappi Lahiri
| Amit Khanna
| solo
|-
! Rowspan=2| ''Sister''
| "Na Tooti Koi Khidki Vidki" (version 1)
| Rowspan=2| Jag Phool Kaushik
| rowspan=2| Harish Kataariya
| Rowspan=2| solo
|-
| "Na Tooti Koi Khidki Vidki" (version 2)
|-
! Rowspan=3| ''[[Situm (film)|Sitam]]''
| "Saans Leti Hui" (version 1)
| rowspan=3| Jagjit Singh, Chitra Singh
| rowspan=3| Gulzar
| Rowspan=3| solo
|-
| "Saans Leti Hui" (version 2)
|-
| "Kaun Gali Se Nikloo" (female)
|-
! Rowspan=4| ''Sugandh''
| "Sajan Tere Pyar Mein"
| rowspan=7| Bappi Lahiri
| Ramesh Pant
| rowspan=2| solo
|-
| "Su Su Su Suhani Raat"
| rowspan=4| Farooq Kaiser
|-
| "Din Bhi Khile Khile"
| rowspan=2| [[S. P. Balasubrahmanyam]]
|-
| "Tu Agre Ka Launda"
|-
! Rowspan=3| ''Sumbandh''
| "Diwane Mera Jo Hain Sawal"
| rowspan=2| Bappi Lahiri
|-
| "Raat Ko Mere Kamre Mein"
| rowspan=2| Gauhar Kanpuri
|-
| "Paas Aao Naa"
| solo
|-
! Rowspan=2| ''[[Suraag (1982 film)|Suraag]]''
| "Mera Dil Liye Jaa"
| rowspan=2| Bappi Lahiri
| rowspan=2| Kaifi Azmi
| solo
|-
| "Woh Nazar Leke"
| Mohammed Rafi
|-
! Rowspan=3| ''[[Swami Dada]]''<ref>{{Cite web|url=https://www.hindigeetmala.net/movie/swami_dada.htm|title=Swami Dada : Lyrics and video of Songs from the Movie Swami Dada (1982)|website=HindiGeetMala}}</ref>
| "Patakha Phooljhadi"
| rowspan=3| R D Burman
| rowspan=3| Anjaan
| solo
|-
| "Zindagi Yeh Kaisi Hai, Jaise Jeeyo Waisi Hai"
| Kishore Kumar, Amit Kumar
|-
| "Ek Roop Kai Naam, Man Mandir Tera Dhaam"
| Kishore Kumar
|-
! rowspan=2| ''Taaqat''
| "Sapnon Mein Toh Dekha Tumko"
|rowspan=2| Laxmikant–Pyarelal
|Rowspan=2| Anand Bakshi
| rowspan=2| solo
|-
| "Ikkad Dukkad Bamba Bo"
|-
!''[[Taqdeer Ka Badshah]]''
| "Pyaar Ka Hai Match Sanam"
| Bappi Lahiri
| Anjaan
| Bappi Lahiri
|-
!''[[Teesri Aankh (1982 film)|Teesri Aankh]]''
| "Superman"
|rowspan=2| Laxmikant–Pyarelal
|Rowspan=2| Anand Bakshi
| Kishore Kumar
|-
!''Teri Maang Sitaron Se Bhar Doon''
| "Ae Pardanasheen"
| Manna Dey
|-
! Rowspan=5| ''[[Ustadi Ustad Se]]''
| "Saathi Tere Naam" (version 1)
| rowspan=5| Raam Laxman
| rowspan=2| Dalip Tahil
| [[Usha Mangeshkar]]
|-
| "Saathi Tere Naam" (version 2)
| [[Bhupinder Singh (musician)|Bhupinder Singh]]
|-
| "Tumsa Nahin Mila"
| rowspan=1| Gauhar Kanpuri
| [[Amit Kumar]]
|-
| "Rehmatullah Mashallah"
| rowspan=2| Ravinder Rawal
| [[Mohammed Rafi]]
|-
| "Ustadi Ustad Se"
| [[Mohammed Rafi]], [[Manna Dey]]
|-
! Rowspan=2| ''[[Vakil Babu]]''
| "Aa Gayi Jawani Phir Kya Hua"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=4| Anand Bakshi
| rowspan=5| solo
|-
| "Ae Musafiro Naye Safar Ki Tyari Karo"
|-
! Rowspan=2| ''[[Vidhaata]]''
| "Pyaar Ka Imtihaan"
| rowspan=2| Kalyanji–Anandji
|-
| "Uri Baba"
|-
! Rowspan=2| ''Waqt Waqt Ki Baat''
| "Oh Meherbaan Ye Mera Dil Kisi Gahne Ka Phool Nahi"
| rowspan=2| Rajesh Roshan
| rowspan=2| Anjaan
|-
| "Ko Hi Toh Woh Haq Hai Ke Jo Tu Chahe"
| Kishore Kumar
|-
! Rowspan=2| ''[[Yeh Nazdeekiyan]]''
| "Kitni Haseen Hai Ye Nashili"
| rowspan=2| Raghunath Seth
| rowspan=2| Vinod Pande
| rowspan=2| solo
|-
| "Dil Dil Dil"
|-
! Rowspan=2| ''[[Yeh To Kamaal Ho Gaya]]''<ref>{{cite web|url=https://www.tribuneindia.com/news/entertainment/how-balasubrahmanyam-broke-the-language-barrier-148349 |title=How Balasubrahmanyam broke the language barrier |date=29 September 2020 |access-date=11 January 2021 |website=[[The Tribune (Chandigarh)|The Tribune]]}}</ref>
| "Yeh Duniya Ghum Rahi Hai"
| rowspan=2| R D Burman
| rowspan=2| Anand Bakshi
| rowspan=2| S. P. Balasubrahmanyam
|-
| "Main Awara Banjara"
|-
! Rowspan=5| ''[[Yeh Vaada Raha (film)|Yeh Vaada Raha]]''
| "Tu Tu Hai Wahi"
| rowspan=5| R D Burman
| rowspan=5| Gulshan Bawra
| rowspan=4| Kishore Kumar
|-
| "Maine Tujhe Kabhie Kuch Kaha Tha"
|-
| "Ishq Mera Bandagi Hai"
|-
| "Jeene Ko Toh Jite Hain Sabhi"
|-
| "Mil Gayi Aaj Do Lehre"
| solo
|-
! Rowspan=3| ''[[Zamaane Ko Dikhana Hai]]''
| "Puchho Naa Yaar Kyaa Hua"
| rowspan=3| R D Burman
| rowspan=3| Majrooh Sultanpuri
| Mohammed Rafi, Rishi Kapoor, Padmini Kolhapure
|-
| "Kya Ishq Ne Samjha Hai"
| Rishi Kapoor, Shailendra Singh
|-
| "Bolo Bolo Kuch To Bolo"
| Mohammed Rafi
|-
|}
=== 1983 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! ''Ab Meri Baari''
| "Socha Na Hum Tumhein"
| Bappi Lahiri
| N/A
| Lata Mangeshkar, Mohammed Rafi, Kishore Kumar
|-
! Rowspan=2| ''[[Achha Bura]]''<ref>{{cite web|url=http://muvyz.com/moviepage/ni879848/songs/#tabs|title = Achha Bura (1983) | Hindi Movie Songs - Bollywood MuVyz}}</ref>
| "Aa Jaao Yahaan"
| rowspan=2| Usha Khanna
| rowspan=2| Indeevar
| solo
|-
| "Kya Aisa Ho Sa"
| Suresh Wadkar
|-
! Rowspan=2| ''[[Agar Tum Na Hote]]''
| "Dheere Dheere Zara Zara"
| rowspan=2| R D Burman
| rowspan=2| Gulshan Bawra
| rowspan=2| solo
|-
| "Hum Toh Hai Chhui Mui"
|-
! Rowspan=4| ''[[Andhaa Kaanoon]]''
| "Meri Bahena"
| rowspan=4| Laxmikant–Pyarelal
| rowspan=4| Anand Bakshi
| Kishore Kumar
|-
| "Ek Taraf Hum Tum, Ek Taraf Sare"
| rowspan=2| S. P. Balasubrahmanyam
|-
| "Mausam Ka Taqaaza Hai"
|-
| "Kabhi Na Kabhi"
| solo
|-
!''Atyachar''
| "Chhed Kaahe Kare, Baith Haath Ke Pare"
| Ravindra Jain
| Naqsh Lyallpuri
| solo
|-
! Rowspan=| ''[[Avtaar]]''
| "Chalo, Bulaawa Aaya Hai"
| Laxmikant–Pyarelal
| Anand Bakshi
| [[Mahendra Kapoor]], [[Narendra Chanchal]]
|-
! Rowspan=2| ''[[Bandhan Kuchchey Dhaagon Ka]]''
| "Hands Up Jaani Hands Up"
| rowspan=2| Hemant Bhosle
| rowspan=2| Anjaan
| [[Usha Uthup]], [[Suresh Wadkar]]
|-
| "Piya Tohe Laaj Nahi Aave"
| Kishore Kumar
|-
!rowspan=4| ''Bekaraar''
| "Siya Pati Ramchandra Ke Jai
|rowspan=4| Laxmikant–Pyarelal
|rowspan=4| Anand Bakshi
|rowspan=2| solo
|-
| "Gadi Chhuk Chhuk Chalti Hai"
|-
| "Tum Chale Aaye Ho"
| rowspan=2| Kishore Kumar
|-
| "Maine Yeh Faisala Kar Liya"
|-
!rowspan=2| ''Bekhabar''
| "Kal Raat Darwaze"
|rowspan=2| Usha Khanna
|rowspan=2| Yogesh
|rowspan=2| solo
|-
| "Are Logon Pakdo"
|-
!rowspan=2| ''Beta''
| "Mere Mathe Pe"
| Rowspan=2| Hemant Bhosle
| rowspan=2| Anjaan
| solo
|-
| "Saawan Ke Jhoole"
| Mahendra Kapoor
|-
!''Bura Aadmi''
| "Raaste Mein Ek Ladki Mili"
| Bappi Lahiri
| Indeevar
| Bappi Lahiri
|-
! Rowspan=5| ''[[Chatpati]]''
| "Holi Ke Din Aai Aai Re Holi"
| rowspan=5| Basu–Manohari
| rowspan=5| Yogesh
| [[Suresh Wadkar]]
|-
| "Hai Raat Pyasi"
| Rowspan=4| solo
|-
| "Mai Hu Madam Chatpati"
|-
| "Maine Nahi Pee"
|-
| "Naye Berukhi"
|-
! Rowspan=4| ''[[Chor Police]]''
| "Meri Jawani Hai Chandi Sona"
| rowspan=4| R D Burman
| rowspan=4| Nida Fazli
| rowspan=2| solo
|-
| "Aaj Mera Dil Jhoom Jhoom"
|-
| "Atkan Batkan Dahi Chatakan Chu Chu Bho Bho Meow"
| [[Vinod Sehgal]]
|-
| "Tum Kaho Aur Hum Sune, Hum Kahe, Tum Suno" || [[Suresh Wadkar]], [[Manna Dey]], [[Vanita Mishra]]
|-
! Rowspan=3| ''[[Coolie (1983 Hindi film)|Coolie]]''
| "Mujhe Peene Ka Shauk Nahi"
| rowspan=3| Laxmikant–Pyarelal
| rowspan=3| Anand Bakshi
| rowspan=3| Shabbir Kumar
|-
| "Humko Isaq Huwa Hai Yaaro"
|-
| "Dono Jawani Ke Masti Mein Chur"
|-
! Rowspan=2| ''[[Daulat Ke Dushman]]''
| "Bichhua Bane Piya Tere Nain"
| Rowspan=2| R D Burman
| rowspan=2| Majrooh Sultanpuri
| solo
|-
| "Hum Toh Hain Sabke Yaar"
| Kishore Kumar
|-
!rowspan=2| ''Dharti Aakash''
| "Mujhe Kuchh"
| rowspan=2| Hemant Bhosle
| rowspan=2| Kulwant Jani
| solo
|-
| "Rut Hai"
| Mahendra Kapoor
|-
!''Dhat Tere... Ki''
| "Is Waqt Ke Paon Mein Kaanta Hai"
| Kuldeep Singh
| Sayeed Quadri
| Ashok Shukla
|-
! Rowspan=4| ''[[Do Gulab]]''
| "Pyara Pyara Laage Mitha Mitha Lage"
| rowspan=4| Bappi Lahiri
| rowspan=4| Indeevar
| solo
|-
| "Mere Liye Tu Bani"
| rowspan=4| Kishore Kumar
|-
| "Come Near Aaiye Na"
|-
| "Jab Do Dil Takrayege"
|-
!''Do Shabd''
| "Do Dilon Ka Saathiya Rishta"
| colspan=2| N/A
|-
!''[[Door-Desh]]''
| "Yaaron Mere Yaar Se Milo"
| Usha Khanna
| Indeevar
| solo
|-
! Rowspan=5| ''[[Doosri Dulhan]]''
| "Mera Saiyan"
| Rowspan=5| Bappi Lahiri
| Rowspan=5| Amit Khanna
| rowspan=3| solo
|-
| "Khila Khila Mukhda" (version 1)
|-
| "Khila Khila Mukhda"(version 2)
|-
| "Khel Khel Kar Kulel Nandaji Ka Lala" (duet version 1)
| rowspan=2| Bappi Lahiri
|-
| "Khel Khel Kar Kulel Nandaji Ka Lala" (duet version 2)
|-
! Rowspan=5| ''[[Ek Baar Chale Aao]]''
| "Chirmi Babul Ki Ladli" (Part 1)
| rowspan=5| Chand Pardesi
| Rowspan=4| M. Iqbal Khan
| rowspan=4| solo
|-
| "Chirmi Babul Ki Ladli" (Part 1)
|-
| "Ek Baar Chale Aao"
|-
| "Chadhti Jawani Meri Sanam, Kar Le Pyar Tu Meri Kasam"
|-
| "Main Hoon Tere Liye" (Duet)
| Anjaan
| Nitin Mukesh
|-
! Rowspan=2| ''Ek Din Bahu Ka''
| "Hum Tum Juda Na Hinge"
| rowspan=2| Bappi Lahiri
| rowspan=2| Indeevar
| Suresh Wadkar
|-
| "Ek Jaan Hain Hum"
| Kavita Arun
|-
! Rowspan=3| ''[[Ek Jaan Hain Hum]]''
| "Dil Dil Hai Koi Shisha To Nahi"
| rowspan=3| Anu Malik
| rowspan=3| Anjaan
| rowspan=2| Shabbir Kumar
|-
| "Aasmaan Pe Likh Doon"
|-
| "Dil Lagana Tum Kya Jano"
| Kishore Kumar"
|-
! Rowspan=2| ''Faraib''
| "Shor Macha Hat"
| rowspan=2| Bappi Lahiri
| rowspan=2| Indeevar
| rowspan=2| Kishore Kumar
|-
| "Yeh Mausam Pyaar Ka"
|-
! Rowspan=3| ''Film Hi Film''
| "Kitna Rangeen Hai Yeh Chand Sitaron Ka Sama"
|rowspan=2| N. Dutta
| Indeevar
| Mohammed Rafi
|-
| "Aadmi Ko Jeena Hai"
| Sahir Ludhianvi
|rowspan=2| solo
|-
| "Idhar To Dekho"
| Bhola Shreshtha
| Prem Warbatani
|-
! Rowspan=4| ''[[Ganga Meri Maa]]''
| "Main Pyar Ki Kitaab Hoon"
| rowspan=4| R D Burman
| rowspan=4| Gulshan Bawra
| rowspan=3| solo
|-
| "Dil Aap Ko Jabse Diya Hai"
|-
| "Andaz Tere Pyar Ka Haay Kitna Nirala"
|-
| "Yaar Mil Gaya To Khuda Mil Gaya"
| [[Mohammed Rafi]], [[Manna Dey]]
|-
! Rowspan=2| ''Ghungroo''
| "Yen Jashn E Mohabbat, Tohafa Qubul Hai"
| rowspan=2| Kalyanji–Anandji
| Anjaan
| rowspan=2| solo
|-
| "Tum Salamat Raho"
| Prabha Thakur
|-
! Rowspan=6| ''Gumnaam Hai Koi''
| "Assalam Alaikum"
|rowspan=6| Raam Laxman
|rowspan=3| Kulwant Jani
| Usha Mangeshkar
|-
| "Chaka Chak Chaka Chak"
| Bhupinder Singh
|-
| "Jo Aaya Hai Woh Aayega"
| rowspan=4| solo
|-
| "Dil Ke Zakhmon Pe Dawa"
| rowspan=3| Ravinder Rawal
|-
| "Na Chauwanni, Na Athanni, Na Rupaiya"
|-
| "Sapne Jhimil"
|-
! Rowspan=3| ''[[Himmatwala (2013 film)|Himmatwala]]''
| "Wah Wah Wah, Khel Shuru Ho Gaya"
| rowspan=3| Bappi Lahiri
| rowspan=3| Indeevar
| rowspan=3| Kishore Kumar
|-
| "Ladki Nahin Hai Tu"
|-
| "Taki O Taki"
|-
! Rowspan=3| ''[[Hum Se Hai Zamana]]''
| "Tere Naam Ki Deewani"
| rowspan=3| Raam Laxman
| rowspan=2| Ravinder Rawal
| solo
|-
| "Gustakhi Maaf Ho, Ae Jaan-E-Jahan"
| [[Kishore Kumar]]
|-
| "Tainu Mainu Vekhe Zamana, Tu Jo Sadda Yaar Ho Gaya"
| Maya Govind
| [[Amit Kumar]]
|-
! Rowspan=2| ''Humse Na Jeeta Koi''
| "Gum Sum Gum Sum Kyun Rehate Ho"
| rowspan=7| Bappi Lahiri
| Farooq Kaiser
| solo
|-
| "Kholake Rakhana Darwaaja"
| Gauhar Kanpuri
| rowspan=6| Kishore Kumar
|-
! Rowspan=5| ''[[Jaani Dost]]''
| "Jawani Jawani Jalti Jawani"
| rowspan=5| Indeevar
|-
| "Aayee Aayee Mai Toh Aayi Jannat Chhupa Ke"
|-
| "Jeevan Bana Jeevan Mil Gaya Tera Daman"
|-
| "Ham Nahin Jhumte Hain, Jhumta Hai Saara Jahaan"
|-
| "Bagon Ki Tu Rani Hai"
|-
! Rowspan=2| ''Jeena Hai Pyaar Mein''
| "Jeena Hai Pyaar Mein"
| roaspan=2| Basu–Manohari
| rowspan=2| Naqsh Lyallpuri
| Kishore Kumar
|-
| "Dil Hai Banjara"
| Dilraj Kaur
|-
! Rowspan=2| ''Jeet Hamari''
| "Tumko Agar Hai Pyar"
| roaspan=2| Bappi Lahiri
| rowspan=1| Indeevar
| S. P. Balasubrahmanyam
|-
| "Aane Wala Aaya Hai Pyar Se Dil Ne Bulaya Hai"
| Maya Govind
| solo
|-
! Rowspan=4| ''[[Justice Chaudhary]]''
| "Maine Tujhe Chhuwa Toh Tan Jala"
| rowspan=4| Bappi Lahiri
| rowspan=4| Indeevar
| rowspan=4| Kishore Kumar
|-
| "Lakshmi O Lakshmi Ghar Ki Tu Lakshmi"
|-
| "Mama Miya Pom Pom"
|-
| "Saath Mere Aaogi"
|-
! Rowspan=2| ''[[Karate (film)|Karate]]''
| "Yeh Salaam Aakhri"
| rowspan=2| Bappi Lahiri
| rowspan=2|
| rowspan=2| solo
|-
| "Baazi Pyar Ki"
|-
! Rowspan=3| ''Kaun? Kaisey?''
| "Main Bhi Joon Yahaan"
| rowspan=3| R D Burman
| rowspan=3| Gulshan Bawra
| Rowspan=3| solo
|-
| "Kyun Kaise Hua?"
|-
| "Aayega Mera Sapnon Ka Raja"
|-
! Rowspan=3| ''Khushi''
| "Tumne Likha Mujhe Jo Pyara Khat"
| rowspan=3| Asit Ganguly
| rowspan=8| Yogesh
| Amit Kumar
|-
| "Aao Mere Saath Aao"
| Harihar
|-
| "Chalo Zindagi Ko Naya Mod Do"
| solo
|-
! Rowspan=5| ''[[Kissi Se Na Kehna]]''
| "Dhundhe Jashodaa Chahu"
| rowspan=5| Bappi Lahiri
| rowspan=4| solo
|-
| "Kissi Se Na Kahana"
|-
| "Phoolon Tumhe Pata Hai Man Kyo Khila Khila Hai"
|-
| "Tum Jab Se Jivan Mein Kushboo Ki Tarah Chhaye"
|-
| "Kaahe Jhatke Itne Maare Nagin"
| Bappi Lahiri
|-
!''[[Lal Chunariya]]''
| "Jise Jalwon Ki Zaroorat Ho Woh"
| Shyamji–Ghanshyamji
| Kulwant Jani
| solo
|-
! Rowspan=3| ''[[Love in Goa]]''
| "Ek Ladka, Ek Ladki Se Jab Milta Hai"
| rowspan=3| Bappi Lahiri
| rowspan=3| Anjaan
| Rowspan=3| [[Amit Kumar]]
|-
| "Na Jane Tune Kya Kaha"(happy)
|-
| "Na Jane Tune Kya Kaha" (sad)
|-
! Rowspan=2| ''[[Mahaan (1983 film)|Mahaan]]''
| "Yeh Din Toh Aata Hai"
| rowspan=4| R D Burman
| rowspan=2| Anjaan
| R D Burman
|-
| "Pyaar Mein Dil Pe Maar De Goli"
| Kishore Kumar
|-
! Rowspan=2| ''[[Main Awara Hoon]]''
| "Pyar Kise Kehte Hai, Pyar Ise Kehte Hai"
| rowspan=2| Anand Bakshi
| Kishore Kumar
|-
| "Yahi To Mohabbat Hai"
| solo
|-
! Rowspan=5| ''[[Mandi (film)|Mandi]]''
| "Zabaane Badalte Hain, Har Aan Kubaan"
| rowspan=5| Vanraj Bhatia
| Mir Taqi Mir
| rowspan=5| solo
|-
| "Chubti Hai Yeh To Nigodi Chubti Hai"
| rowspan=4|
|-
| "Alaap In Raga Malhar"
|-
| "Alaap In Raga Todi"
|-
| "Ishq Ke Sholay Bhadkao"
|-
! rowspan=2| ''[[Mangal Pandey (1982 film)|Nangal Pandey]]''
| "Aate Ho Jaate Ho"
| rowspan=2| Anu Malik
| Anjaan
| rowspan=2| solo
|-
| "Mohabbat Na Hoti"
| Kafil Azar
|-
! Rowspan=3| ''[[Mazdoor]]''
| "Naach Uthi"
| rowspan=3| R D Burman
| rowspan=3| Hasan Kamal
| rowspan=3| solo
|-
| "Tumhe Bhool Jaane Ka Haq Hai"
|-
| "Baat Adhoori Kyun Hai"
|-
! Rowspan=5| ''[[Mehndi (1983 film)|Mehndi]]''
| "Mere Angna Mehndi Ka Boota"
| rowspan=5| Khayyam
| rowspan=5| Verma Malik
| rowspan=4| solo
|-
| "Bus Ek Tabassum"
|-
| "Jeena Seekh Liya"
|-
| "Mere Aangna Mehndi" (Sad)
|-
| "Boliya Bhangra Mahiya Tappe"
| Mahendra Kapoor
|-
! Rowspan=4| ''[[Mujhe Insaaf Chahiye]]''
| "Nahin Main Woh" (version 1)
| rowspan=4| Laxmikant–Pyarelal
| rowspan=4| Anand Bakshi
| rowspan=2| solo
|-
| "Nahin Main Woh" (version 2)
|-
| "I Love You, Do You Love Me?"
| [[Shailendra Singh (singer)|Shailendra Singh]]
|-
| "Premdoot Aaya, Prem Sandesha Laya"
| [[Abhijeet Bhattacharya|Abhijeet]]
|-
! Rowspan=2| ''Mujhe Vachan Do''
| "Tumhare Oopar"
| rowspan=2| Raam Laxman
| rowspan=2| Ravinder Rawal
| rowspan=2| Kishore Kumar
|-
| "Aap Ki Khidmat Mein"
|-
! Rowspan=2| ''[[Nastik (1983 film)|Nastik]]''
| "Main Hoon Tere Saamne"
| rowspan=2| Kalyanji–Anandji
| rowspan=2| Anand Bakshi
| solo
|-
| "Pyare Tere Pyar Mein Lut Gaye Hum"
| [[Amit Kumar (singer)|Amit Kumar]]
|-
! Rowspan=4| ''[[Naukar Biwi Ka]]''
| "Main Nahin Doon"
| rowspan=4| Bappi Lahiri
| rowspan=4| Anjaan
| Bappi Lahiri
|-
| "Kya Naam Hai Tera"
|rowspan=2| [[Kishore Kumar]]
|-
| "Yaar Mila"
|-
| "O Mere Sajna"
| solo
|-
!''Nishan''
| "Sun Sun Sun Meri Jaan"
| Rajesh Roshan
| rowspan=2| Gulshan Bawra
| rowspan=2| Kishore Kumar
|-
!''[[Nikamma]]''
| "Tere Bina Main Kuchh Nahin"
| R D Burman
|-
!rowspan=2| ''Pehredaar''
| "Aha Mujhe Dard Uthe"
| rowspan=2| Sapan–Jagmohan
| rowspan=2| Mahendra Dalvi
| Kishore Kumar
|-
| "Neel Gagan Ke Panchhi Re"
| solo
|-
! Rowspan=3| ''[[Prem Tapasya]]''
| "Devi Kuch To Bol"
| rowspan=3| Laxmikant–Pyarelal
| rowspan=3| Anand Bakshi
| rowspan=3| [[Kishore Kumar]]
|-
| "Mere Chand Ko Chand Ne Dekha"
|-
| "Raqqasa Raqs Kar"
|-
! Rowspan=3| ''[[Pukar (1983 film)|Pukar]]''
| "Bachke Rehna Re Baba"
| rowspan=3| R D Burman
| rowspan=3| Gulshan Bawra
| Kishore Kumar, R D Burman
|-
| "Main Tere Liye, Tu Mere Liye"
| solo
|-
| "Marenge Ya Mar Jayenge"
| R D Burman
|-
! Rowspan=3| ''[[Pyaar Bina Jag Soona]]''
| "dildaaron Dilwaalon"
| rowspan=3| Usha Khanna
| rowspan=2| Nida Fazli
| Abhijeet Bhattacharya
|-
| "Shama Jalne Do
| rowspan=2| solo
|-
| "Jhumka Kho Gaya"
| Asad Bhopali
|-
! Rowspan=3| ''[[Pyaas]]''
| "Om Namah Shivay" (female)
| rowspan=3| Bappi Lahiri
| rowspan=2| Kulwant Jani
| rowspan=3| solo
|-
| "Mera Dil Tera Dil"
|-
| "Raat Sone Ko Hai"
|Naqsh Lyallpuri
|-
!''Pyaasi Aankhen''
| "Raat Aandhi Ho Gayi Baaje Paune Do"
| Usha Khanna
| Indeevar
| Kishore Kumar
|-
! Rowspan=4| ''[[Qayamat (1983 film)|Qayamat]]''
| "Aaj Qayamat Ho Gayi"
| rowspan=4| R D Burman
| rowspan=4| Majrooh Sultanpuri
| rowspan=4| solo
|-
| "Poochho Nahin Dil Mera"
|-
| "Ek Aankh To Maare Dank"
|-
| "Udhar Se Jo Phursat Mile"
|-
!''Raaste Aur Rishte''
| "Aap Aaye Toh Tashrif Laaye"
| Usha Khanna
| Yogesh
| solo
|-
!''[[Razia Sultan (film)|Razia Sultan]]''
| "Hariyala Banna Aaya Re"
| Khayyam
| Nida Fazli
| Jagjit Kaur, chorus
|-
!''[[Rishta Kagaz Ka]]''
| "Kya Ho Gaya Mujhe Poochho Na Jaanejaan"
| Rajesh Roshan
| Majrooh Sultanpuri
| Kishore Kumar
|-
!''[[Romance (1983 film)|Romance]]''
| "Love Love Love"
| R D Burman
| Anand Bakshi
| Manna Dey, Chandrashekhar Gadgil
|-
! Rowspan=2| ''[[Sadma]]''
| "O Babua, Yeh Mahua"
| rowspan=2| Ilayaraaja
| rowspan=2| Gulzar
| solo
|-
| "Yeh Hawaa, Yey Fiza"
| [[Suresh Wadkar]]
|-
! Rowspan=3| ''Salam-e-Mohabbat''
| "Jane Kyun Aap Mohabbat Ko"
| Rowspan=3| Usha Khanna
| Rowspan=3| Gauhar Kanpuri
| Aziz Nazan
|-
| "Al-Madad Ehmada-e-Mukhtar"
| rowspan=2| solo
|-
| "Ghungroo Tootenge Mehfil"
|-
!''Sampark''
| "Koi Pehna Gaya Pyaar Se, Pyaar Ki Nishaani"
| Ravindra Jain
| Yogesh
| solo
|-
! Rowspan=5| ''Sansani''
| "Saqiya Tu Koi"
| rowspan=5| Hemant Bhosle
| rowspan=5| Irshad Kamil
| Varsha Bhosle
|-
| "Ab Kahan Jaayenge Hum"
| Amit Kumar, Bhupinder Singh, Varsha Bhosle
|-
| "Patthar Ka Hain Sanam"
| Amit Kumar
|-
| "Phir Teri Yaad Aa Gaye"
| solo
|-
| "Sansanikhez Koi Baat"
| Hemant Bhosle
|-
! Rowspan=3| ''[[Shubh Kaamna]]''
| "Baghon Mein Khile Hai"
|rowspan=3| R D Burman
| rowspan=3| Anjaan
| rowspan=3| [[S. P. Balasubrahmanyam]]
|-
| "Is Dil Ne Socha Hai Jo"
|-
| "Tumko Hai Pyar Mana"
|-
!''[[Souten (1983 film)|Souten]]''
| "Jab Apne Ho Jaaye Bewafa"
| Usha Khanna
| Saawan Kumar Tak
| solo
|-
!''Sweekar Kiya Maine''
| "Kamai Toh Bahut Phir Bhi"
| Usha Khanna
| Vitthalbhai Patel
| Kishore Kumar
|-
!''[[Talabandi]]''
| "Mera Jalwa Meri Mehfil"
| Dhiraj Kumar
| Prashant Raipuri
| solo
|-
! Rowspan=3| ''[[Taqdeer (1983 film)|Taqdeer]]''
| "Aisa Waisa Koi Mujhe" (version 1)
| rowspan=3| Kalyanji–Anandji
| rowspan=3| Indeevar
| rowspan=3| solo
|-
| "Aisa Waisa Koi Mujhe" (version 2)
|-
| "Main Mastani Diljani"
|-
!''[[Vijeta (1982 film)|Vijeta]]''
| "Man Aanand Aanand Chhaayo"
| Ajit Varman
| Satyasheel Deshpande
|-
! ''[[Woh Saat Din]]''
| "Anari Ka Khelna Khel Ka Satiyanas"
| Laxmikant–Pyarelal
| Anand Bakshi
| solo
|-
! Rowspan=2| ''[[Woh Jo Hasina]]''
| "Zora Zori"
| Rowspan=2| Raam Laxman
| Gauhar Kanpuri
| Amit Kumar
|-
| "Kab Ke Bichhde"
| Ravindra Rawal
| solo
|-
!''Zakhmi Dil''
| "Raah Mushkil Mod Anjaane"
| Ved Pal
| Mahendra Dalvi
| solo
|-
! ''[[Zara Si Zindagi]]''
| "Tana Dim, Tana Dim" (Duet)<ref>{{cite news |last1=Service |first1=Tribune News |title=How Balasubrahmanyam broke the language barrier |url=https://www.tribuneindia.com/news/entertainment/how-balasubrahmanyam-broke-the-language-barrier-148349 |access-date=16 June 2022 |work=[[The Tribune (Chandigarh)|The Tribune]] |date=30 September 2020 |language=en}}</ref>
| [[Laxmikant–Pyarelal]]
| Anand Bakshi
| [[S. P. Balasubrahmanyam]]
|-
|}
=== 1984 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! Rowspan=2| ''[[Aan Aur Shaan]]''
| "Ganga Ban Jaaun Kaho"
| rowspan=2| R D Burman
| rowspan=2| Majrooh Sultanpuri
| Mohammed Rafi
|-
| "Sherni Bahu Hai Mera Yaar"
| Kishore Kumar
|-
! Rowspan=3| ''[[Aaj Ka M.L.A. Ram Avtar]]''
| "Tukur Tukur Dekha Karoon"
| rowspan=3| Bappi Lahiri
| Rowspan=3| Indeevar
| Kishore Kumar
|-
| "Jaago Re Jaago, Shuru Ho Gayi Hai Aaj Jung Hamari"
| Mahendra Kapoor
|-
| "Woh Jo Bichhde Hai"
| solo
|-
! Rowspan=3| ''Aakhir''
| "Bahut Pila Di Hai"
| rowspan=3| Jimmy
| Rowspan=2| Abhilash
| Rowspan=2| solo
|-
| "Palla Tori Palla"
|-
| "Tere Dil Mein Mujhe Rehna Hai"
| Abhilsh, Dev Kohli
| Suresh Wadkar
|-
! Rowspan=3| ''[[Aasmaan]]''
| "Jo Mere Kareeb Aayega, Jaan Jahan Se Jaayega"
| rowspan=3| Anu Malik
| rowspan=3| Anand Bakshi
| rowspan=2| Kishore Kumar
|-
| "Tere Nain Hai Kaise, Mujhe Dekh Na Aise"
|-
| "Baghon Mein Lagiya Ambiya"
| Rajeev Kapoor
|-
! Rowspan=2| ''[[Ab Ayega Mazaa]]''
| "Solah Baras Ki Kamsin Umariya"
| rowspan=2| Anand
| Rowspan=2| Sameer
| rowspan=2| Kishore Kumar
|-
| "Kab Jaane Anjaane"
|-
! Rowspan=3| ''Akalmand''
| "Madrasi Ladki Ya Punjabi Ladke Se"
| rowspan=3| Laxmikant–Pyarelal
| rowspan=3| Anand Bakshi
| rowspan=2| solo
|-
| "Nazar Dekho"
|-
| "I Love You"
| Kishore Kumar
|-
!''[[All Rounder (1984 film)|All Rounder]]''
| "Hum Kaun Hain"
| Laxmikant–Pyarelal
| Anand Bakshi
| [[Suresh Wadkar]]
|-
! Rowspan=2| ''Amar Jyoti''
| "Janam Janam Ka Naata"
| Rowspan=2| Jaidev
| rowspan=2| Naqsh Lyallpuri
| rowspan=| solo
|-
| "Kaare Kajre Badra"
| Hariharan
|-
! ''[[Anand Aur Anand]]''
| "Waadon Ki Shaam Aayi"
| rowspan=4| R D Burman
| Anjaan
| Kishore Kumar, Abhijeet Bhattacharya
|-
! Rowspan=3| ''[[Andar Bahaar]]''
| "Mausam Bada Suhana Hai, Achha Ji"
| Rowspan=3| Gulshan Bawra
| [[Shailendra Singh (singer)|Shailendra Singh]]
|-
| "Kaise Kaise Hai Mere Meherbaan"
| rowspan=2| solo
|-
| "Meri Aankhon Mein Zaraa Jhaanko To"
|-
! Rowspan=4| ''[[Awaaz]]''
| "Zindagi Sau Baras Ki"
| rowspan=4| R D Burman
| rowspan=4| Anand Bakshi
| rowspan=3| Kishore Kumar
|-
| "Bolo Pyar Karogi"
|-
| "Ankhon Ki Zuban Ne"
|-
| "Zindagi Awaaz Deti Hai"
| solo
|-
! Rowspan=4| ''[[Asha Jyoti]]''
| "Mehboob Se Mehbooba Mil Gayi"
| rowspan=4| Laxmikant–Pyarelal
| rowspan=4| Anjaan
| Kishore Kumar
|-
| "Chikna Chikna, Yaar Mera"
| rowspan=3| solo
|-
| "Aayi Milan Ki Woh" (Happy)
|-
| "Aayi Milan Ki Woh" (Sad)
|-
! Rowspan=5| ''[[Baazi (1984 film)|Baazi]]''
| "Kaise Pyar Hota Hai"
| rowspan=5| Laxmikant–Pyarelal
| rowspan=5| Anand Bakshi
| solo
|-
| "Noora De De"
| Kishore Kumar
|-
| "Gupchup Hai Mummy Gumsum Hai Daddy"
| Kishore Kumar, Shivangi Kolhapure, Baby Rajeshwari
|-
| "Thodi Si Khusi Hai, Thoda Sa Hai"
| Shabbir Kumar, Shivangi Kolhapure, Baby Rajeshwari
|-
| "Sehari Babu Hai Mera Yaar"
| Kishore Kumar
|-
!''[[Bad Aur Badnaam]]''
| "Humein Tumse Mohabbat Hai"
| solo
|-
!''[[Bandh Honth]]''
| "Awara Sadiyon Se"
| Kalyanji–Anandji
| M G Hashmat
| solo
|-
! Rowspan=2| ''[[Bhatakte Kadam]]''
| "Suroor Shaam Ka, Nasha Jaam Ka"
| rowspan=2| Ganga Sagar
| rowspan=2| Satish Tiwari
| Mohammed Aziz
|-
| "Arey Re Re Re Mil Gaya"
| solo
|-
! rowspan=2| ''Bhatke Rahee''
| "Mere Sajna Main Tujhe Haal-e-Dil Kya Sunaoon"
|rowspan=2| Kamal Makhdoom
|rowspan=2| Anwar Warsi
|rowspan=2| solo
|-
| "Duniya Ne Kiya Majboor"
|-
! Rowspan=2| ''[[Bhavna (film)|Bhavna]]''
| "Paheli Chhoti Si"
| Rowspan=2| Bappi Lahiri
| rowspan=2| Kaifi Azmi
| Kavita Paudwal, Vanita Mishra, Gurpreet Kaur
|-
| "Dekho Din Ye Na Dhalne Paye"
| Kavita Paudwal
|-
! Rowspan=4| ''[[Bhemaa]]''
| "Deewane Kya Hai"
| rowspan=6| R D Burman
| rowspan=6| Anjaan
| rowspan=6| solo
|-
| "Gori Gori Titli Main"
|-
| "Jhoom Bindiya, Jhoom Kajra"
|-
| "Maanungi Na Teri Manmaani"
|-
! Rowspan=2| ''[[Bindiya Chamkegi]]''
| "Phansai Liyo Re Hamen"
|-
| "Baj Gayi Ghanti"
|-
!''[[Boxer (1984 film)|Boxer]]''
| "Tere Dil Mein Bhi Kya Kuchh Kuchh Hoti Hai"
| R D Burman
| Gulshan Bawra
| Kishore Kumar
|-
! Rowspan=3| ''Captain Barry''
| "Jab Saath Aa Gaye Ho"
| Rowspan=3| Usha Khanna
| Rowspan=3| Anjaan
| rowspan=2| solo
|-
| "Raja Ji Ne Dekha"
|-
| "Teru Meri Ek Zindagi"
| Anwar
|-
! Rowspan=2| ''Chakma''
| "Toh Tumne Bhi Pee Li"
| rowspan=2| Bappi Lahiri
| rowspan=2| Anand Bakshi
| rowspan=2| solo
|-
| "Yaaron Ki Mehfil"
|-
! Rowspan=2| ''[[Dharm Aur Qanoon]]''
| "Dil Se Dil Ki Baat Hogayi"
| rowspan=2| Kalyanji–Anandji
| Anjaan
| [[Kishore Kumar]]
|-
| "Aashiq Hun Tumhara"
| Ravinder Rawal
| [[Shailender Singh|Shailendra Singh]]
|-
! Rowspan=2| ''Dhokhebaaz''
| "Hey Tera Mukhda Bada Salona"
| rowspan=2| Ravindra Jain
| Rowspan=2| Ravindra Jain
| Mohammed Rafi
|-
| "Hun Tujhko Pilane Aaye Hain"
| Mohammed Rafi, Mahendra Kapoor
|-
! Rowspan=4| ''Dilawar''
| "Ek Ladke Ne Kahi"
| Rowspan=4| Manas Mukherjee
| Rowspan=4| Yogesh
| Kishore Kumar
|-
| "Toot Gayi Choodiya"
| rowspan=2| solo
|-
| "Bachke Rahna Ae"
|-
| "Jab Jab Aaye"
| Hariharan
|-
! Rowspan=5| ''Divorce''
| "Woh Mera Mehboob"
| rowspan=5| Usha Khanna
| rowspan=5| Vitthalbhai Patel
| rowspan=2| Suresh Wadkar
|-
| "Taxiwale Meter Gira"
|-
| "Tumse Bichad Ke Kaise Jiyenge"
| rowspan=2| solo
|-
| "Humein Diya Hai Aapne Dhokha"
|-
| "Dheere Dheere Bolo"
| K. J. Yesudas
|-
!''[[Duniya (1984 film)|Duniya]]''
| "Jhumti Raat Jawan, Jagmagata Hai Jahan"
| R D Burman
| Javed Akhtar
| Kishore Kumar, Mahendra Kapoor
|-
!''[[Ek Nai Paheli]]''
| "Kuchh Na Kuchh Zaroor Hai"
| Laxmikant–Pyarelal
| Anand Bakshi
| solo
|-
! Rowspan=3| ''[[Gangvaa]]''
| "O Jaanam Jaanam Jaanam"
| rowspan=3| Bappi Lahiri
| Anjaan
| solo
|-
| "Angaara Hoon Main, Tu Komal Kali, Kyun Tu Mujhe Pyar Karne Chali"
| rowspan=2| Indeevar
| Kishore Kumar
|-
| "Tan Ke Khadi Hai, Kya Phooljhadi Hai"
| Bappi Lahiri
|-
!''[[Ghar Ek Mandir (film)|Ghar Ek Mandir]]''
| "Kab Se Khada Main Tere Liye"
| Laxmikant–Pyarelal
| Anand Bakshi
| Kishore Kumar
|-
! Rowspan=2| ''[[Haisiyat]]''
| "Uttar Mein Dekhoon To Surat Teri"
| rowspan=2| Bappi Lahiri
| rowspan=2| Indeevar
| rowspan=2| Kishore Kumar
|-
| "Daftar Ko Der Ho Gayi"
|-
! Rowspan=2| ''Hip Hip Hurray''
| Jab Kabhi Mud Ke Dekhta Hoon"
| rowspan=2| Vanraj Bhatia
| rowspan=2| Gulzar
|Bhupinder Singh
|-
| "Hip Hip Hip Hurray Ho"
| Shailendra Singh, [[Udit Narayan]]
|-
! Rowspan=3| ''Hum Do Hamare Do''
| "Kisi Bedard Ko Hum Pyaar Ke Kabil Samajh Baithe"
| Rowspan=3| Ravi
| rowspan=3| Hasan Kamal
| rowspan=2| solo
|-
| "Paise Ki Jhankaar Pe Jawaani Nache Jhoom Ke"
|-
| "Lehrata Mausam Aaya Sajna"
| Mahendra Kapoor
|-
!''[[Hum Hain Lajawab (1984 film)|Hum Hain Lajawab]]''
| "Dilbar Diljani"
| R D Burman
| Anand Bakshi
| Kishore Kumar
|-
! ''Hum Rahe Na Hum''
| "Roshan Roshan Raatein Apni"
| Bappi Lahiri
| Kaifi Azmi
| Kishore Kumar
|-
! Rowspan=6| ''Hum Se Mile Tum''
| "Hum Se Mile Tum"
| rowspan=6| Narayan Dutt
| Rowspan=2| Hasrat Jaipuri
| rowspan=6| Shabbir Kumar
|-
| "Hum Se Mile Tum" (sad)
|-
| "Dheere Dheere Dheere Bol"
| rowspan=3| Bharat Vyas
|-
| "Tu Mere Maina"
|-
| "Aayi Teri Yaad Aayi"
|-
| "Sawan Aayo Re"
| Suraj Dadheech
|-
! rowspan=3| ''Humdam''
| "Dilwalon Ki Is Duniya Mein"
|Rowspan=3| Ghamshyan Pyase
|Rowspan=3| Rajendra Krishan
|rowspan=2| Minoo Purushottam, Suresh Wadkar, Mahendra Kapoor
|-
| "Do Hai Kunware Ladke"
|-
| "Is Ko Ya Us Ko"
| solo
|-
! Rowspan=2| ''[[Inquilaab (1984 film)|Inquilaab]]''
| "Aaj Abhi Yahin, Nahin Nahin Nahin"
| rowspan=2| Laxmikant–Pyarelal
| Rowspan=2| Anand Bakshi
| rowspan=2| Kishore Kumar
|-
| "Sare Badan Mein Zahar Chad Gaya"
|-
! Rowspan=2| ''[[Inteha (1984 film)|Inteha]]''
| "Loot Gayi Main Toh Loot Gayi Saiyan"
| rowspan=5| Rajesh Roshan
| rowspan=2| Rajesh Roshan
| rowspan=2| solo
|-
| "Duniya Yeh Duniya"
|-
!rowspan=3| ''[[Jaag Utha Insan]]''<ref>{{Cite web|url=https://www.hindigeetmala.net/movie/jaag_utha_insan.htm|title=Jaag Utha Insan : Lyrics and video of Songs from the Movie Jaag Utha Insan (1984)|website=HindiGeetMala}}</ref>
| "Tere Zindagi Ki Raagini Par"
|rowspan=3| Indeevar
| rowspan=2| Kishore Kumar
|-
| "Aayi Parvaton Pe Jhoomti Ghata"
|-
| "Morni Ne Seekha Humse Hi"
| solo
|-
! rowspan="3"|''[[Jagir (film)|Jagir]]''
| "Aaj Ki Raat"
| rowspan="5"| R D Burman
| rowspan="3"| Anand Bakshi
| solo
|-
| "Sach Kahta Hai"
| Kishore Kumar
|-
| "Sabko Salam Karte Hain"
| R D Burman
|-
! Rowspan=2| ''[[Jawaani]]''
| "Bheega Bheega Pyara Pyara"
| rowspan=2| Gulshan Bawra
| rowspan=2| Amit Kumar
|-
| "Tu Rootha Toh Main Ro Doongi Sanam"
|-
! Rowspan=4| ''Jeene Nahin Doonga''
| "Yaad Rakhna Sajna"
| rowspan=4| Laxmikant–Pyarelal
| rowspan=4| Anand Bakshi
| rowspan=2| solo
|-
| "Tera Guroor Tukde Tukde Hua"
|-
| "Hum Bhi Na Mane Tum Bhi Na Mane"
| Shabbir Kumar
|-
| "Gali Gali Me Baat Chali"
| Usha Mangeshkar
|-
! Rowspan=4| ''[[Jhutha Sach (film)|Jhutha Sach]]''
| "Kisi Ko Khona, Kisi Ko Pana"
| rowspan=4| R D Burman
| Rowspan=4| Majrooh Sultanpuri
| [[Kishore Kumar]], [[Preeti Sagar]], [[Priya Mayekar]]
|-
| "Jahan Bin Hawa Ke Parda Hile"
| rowspan=3| solo
|-
| "Kya Karoon Main To Nikli"
|-
| "Loot Gayi Main To Aaj"
|-
! Rowspan=4| ''[[Kaamyab]]''
| "Ek Baar Dekha To"
| rowspan=4| Bappi Lahiri
| Rowspan=4| Indeevar
| rowspan=4| Kishore Kumar
|-
| "Dhakkam Dhakka Hua"
|-
| "Ek Number Ka Ladka"
|-
| "Chhoti Chhoti Dikhti Thi"
|-
!rowspan=3| ''Kahan Tak Aasmaan Hai''
| "Mujhe Seene Se Laga Lo"
| rowspan=3| Raghunath Seth
| rowspan=3| Kaifi Azmi
| rowspan=3| solo
|-
| "Zulfon Ki Ghatayen Tere Liye"
|-
| "Cham Cham Chikara Hay"
|-
! Rowspan=2| ''[[Kanoon Meri Mutthi Mein]]''
| "Aate Hi Kahte Ho, Jana Hai Jaldi Hay"
| Rowspan=2| Raj Kamal
| Rowspan=2| Ram Bhardwaj
| Rowspan=2| solo
|-
| "Ingali Mungali Khaike"<ref>{{Cite web|title=Kanoon Meri Mutthi Mein : Lyrics and video of Songs from the Movie Kanoon Meri Mutthi Mein (1984)|url=https://www.hindigeetmala.net/movie/kanoon_meri_mutthi_mein.htm|access-date=2021-06-10|website=HindiGeetMala|language=en}}</ref>
|-
! Rowspan=3| ''[[Karishmaa]]''
| "Ek Haseen Lakhon Mein, Uske Lakhon Deewane"
| rowspan=3| R D Burman
| rowspan=3| Gulshan Bawra
| Kavita Krishnamurthy
|-
| "Teri Nazar Se Meri Nazar Ka Rishta Bada Purana"
| rowspan=2| Kishore Kumar
|-
| "Khol Doongi Dil Ka Tala"
|-
!''Kiski Biwi''
| "Jab Hum Huzoor Aap Ke"
| Vijay Batalvi
| Gauhar Kanpuri, Sudhakar Sharma
| solo
|-
! Rowspan=2| ''Kunwari Bahu''
| "Are Launda Badnam Hua Laundiya Tere Liye"
| rowspan=3| Usha Khanna
| rwospan=2| Nida Fazli
| rowspan=3| solo
|-
| "Yeh Jab Ki Baat Hai, Tum Hi Na The Nigahon Mein"
|-
!''[[Laila (1984 film)|Laila]]''
| "Bekhabar Thi Main Apni Jawaani Se"
| Sawan Kumar Tak
|-
! Rowspan=2| ''[[Lorie (film)|Lorie]]''
| "Tumhi Se Roshan Hai Raat"
| rowspan=2| Khayyam
| rowspan=2| Bashar Nawaz
| Talat Aziz
|-
| "Gudiya, Chidiya, Chand, Chakori"
| Pamela Chopra, Jagjit Kaur
|-
! Rowspan=2| ''Maang Saja Do Meri''
| "Aaj Ki Yeh Ladkiyan"
| Rowspan=2| Laxmikant–Pyarelal
| Anjaan
| Suresh Wadkar
|-
| "Na Chhupa Tu Raaz Humse"
| Naqsh Lyallpuri
| solo
|-
!''Maati Maangey Khoon''
| "Mere Ghungroo Mujhe De Do"
| R D Burman
| Anand Bakshi
| solo
|-
! Rowspan=7| ''Mahadaan''
| "Aankhen Dikhana Raja Jani"
| rowspan=7| G S Kohli
| rowspan=7| Anjaan
| Rowspan=6| solo
|-
| "Udta Hua Ek Panchhi"
|-
| "Udta Hua Ek Panchhi" (sad)
|-
| "Mera Dil Chala Chalen"
|-
| "Jaata Jogu De Gaya Khushiyon Ka Mala"
|-
| "Kuchh Din Pehle Ki Baat Hai"
|-
| "O Meri Jeevan Sangini"
| Amit Khanna
|-
! Rowspan=4| ''[[Maqsad]]''
| "Pyaar Tumne Kiya Na"
| rowspan=4| Bappi Lahiri
| rowspan=4| Indeevar
| rowspan=2| Kishore Kumar
|-
| "Garmi Hain Kahan Hain"
|-
| "Lachari Ko Majburi Ko"
| rowspan=2| solo
|-
| "Lachari Ko Majburi Ko" (Sad)
|-
! Rowspan=5| ''[[Manzil Manzil]]''
| "O Meri Jaanejaan, Ab Nahin Rehna Tere Bina"
| rowspan=5| R D Burman
| rowspan=5| Gulshan Bawra
| rowspan=3| Shailendra Singh
|-
| "Yeh Naina Yaad Hain Piya K"
|-
| "Lut Gaye Hum To Raho Me Manzil Koya"
|-
| "He Baba He Baba, Mil Ke Ek Din"
| rowspan=2| solo
|-
| "O Mitwaa Mitwaa Tujhko Aana Hi Padega"
|-
! Rowspan=3| ''[[Mera Faisla]]''
| "Idhar Ho Raha Hai, Udhar Ho Raha Hai"
| rowspan=6| Laxmikant–Pyarelal
| rowspan=8| Anand Bakshi
| [[Shabbir Kumar]]
|-
| "Mera Ek Deewana Mujhe Telephone Karta Hai"
| [[Suresh Wadkar]]
|-
| "Photographer Jaldi Kar"
| solo
|-
! Rowspan=3| ''[[Meraa Dost Meraa Dushman]]''
| "Kaise Bedardi Se Aankh Ladi Re"
| [[Kishore Kumar]]
|-
| "Kya Isi Ka Naam Jawani Hai"
| rowspan=2| solo
|-
| "Jawani Cheez Badi"
|-
! Rowspan=2| ''[[Meri Adalat (1984 film)|Meri Adalat]]''
| "You Are Beautiful"
| rowspan=2| Bappi Lahiri
| Kishore Kumar
|-
| "Raja Ji Rani Ji"
| Shabbir Kumar
|-
! Rowspan=6| ''Mujhe Shakti Do''
| "Main Tere Liye Kya Kya Laoon"
| rowspan=6| Ravi
| Rowspan=6| Indeevar
| Nitin Mukesh
|-
| "Dua Hai Meri Kadam Kadam Par"
| Suresh Wadkar
|-
| "Yeh Kya Kiya Tune Yeh Kya Kiya"
| Kishore Kumar
|-
| "Rukh Mod"
| rowspan=3| solo
|-
| "Bolo Muh Dikhai Kaa Kya Mol Doge"
|-
| "Main Tere Liye Kya Laopn" (female)
|-
!rowspan=2| ''Naseeb Ki Naat''
| "Angdayi Lee Jo Tan Ke"
| rowspan=2| Shankar–Jaikishan
| rowspan=2| Anjaan
| solo
|-
| "Holi Hai Holi Hai Bardon Hai Tarsaya Tune"
| Suresh Wadkar
|-
! Rowspan=5| ''[[Naya Kadam]]''
| "Zindagi Ka Hum Itihaas Likhenge"
| rowspan=5| Bappi Lahiri
| rowspan=5| Indeevar
| rowspan=2| Kishore Kumar
|-
| "Saaila Aaya More Man Bhaaya"
|-
| "Phool Jahan Wahan Bahar"
| rowspan=3| S. P. Balasubramanyam
|-
|"Ram Ho Kya Tum Patthar Ko Chukar"
|-
| "Yeh Kya Hua Kya Hua"
|-
!''Paapi Pet Ka Sawaal Hai''
| "Khilona Ban Ke Main Aa Gayi Hoon"
| Shankar–Jaikishan
| Hasrat Jaipuri
| solo
|-
! Rowspan=2| ''Pakhandee''
| "Tu Jab Bhi Dekhega"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Majrooh Sultanpuri
| Kishore Kumar
|-
| "Mehfil Yaaron Ki Mehfil"
| Suresh Wadkar
|-
!''Patthar Ke Log''
| "Aaya Bade Ghar Se Daroga Babu"
| Jagdish J
| Anjaan
| solo
|-
! rowspan=2| ''Pavitra Ganga''
| "Ek Abla Ne Tujhko Pukara"
|rowspan=2| Dilshad Kamal
|rowspan=2| Farooq kaiser
| solo
|-
| "Hum Bhi Tere Deewane"
| Mohammed Rafi
|-
!''Pet Pyar Aur Paap''
| "Yeh Zindagi Kin Tohmaton Ki Naam Ho Gayi"
| Bappi Lahiri
| Bhushan Banmali
| solo
|-
!rowspan=4| ''Preet Na Jaane Preet''
| "Bata Aye Dil Wafa Badnaam"
|rowspan=4| Iqbal Qureshi
|rowspan=4| S. H. Bihari
|rowspan=3| solo
|-
| "Humri Gori Kaliyan Ma"
|-
| "Mujhe Us Paar Ki Duniya Mein"
|-
| "Abhi Na Itne Kareeb Aao"
| Anwar
|-
! Rowspan=2| ''[[Purana Mandir]]''
| "Main Hoon Akeli Raat Jawaan"
| rowspan=2| Ajit Singh
| rowspan=2| Amit Khanna
| rowspan=2| solo
|-
| "Woh Beete Din Yaad Hai" (female)
|-
! Rowspan=4| ''[[Qaidi (1984 film)|Qaidi]]''
| "Jawani Ka Khazana Hai, Romance Ka Zamana Hai"
| rowspan=4| Bappi Lahiri
| rowspan=4| Indeevar
| Rowspan=3| Kishore Kumar
|-
| "Chandni Raat Hai Sanam"
|-
| "Sanwali Se Hai Mujhe Pyar, Goriya Dafa Karo"
|-
| "Baango Baango Baango"
| solo
|-
! Rowspan=3| ''[[Raaj Tilak]]''
| "Devta Re, Devta Re"
| rowspan=3| Kalyanji–Anandji
| rowspan=6| Verma Malik
| solo
|-
| "Ajooba Ajooba"
| Suresh Wadkar
|-
| "Ek Lafz-E-Mohabbat"
| Shabbir Kumar
|-
! Rowspan=3| ''Raja Aur Rana''
| "Bheega Badan Sard Hawa"
| rowspan=3| Bappi Lahiri
| solo
|-
| "Laga Le Dum"
| rowspan=2| Mahendra Kapoor, Suresh Wadkar
|-
| "Haye Masibat Jawani Ka Aana"
|-
!''Ram Ki Ganga''
| "Aaya Hai Maza"
| Hridaynath Mangeshkar
| M G Hashmat
| solo
|-
! Rowspan=3| ''Ram Tera Desh''
| "Kal Tak Izzatdar Thi"
| rowspan=3| Anu Malik
| rowspan=3| Anjaan
| rowspan=3| solo
|-
| "Ram Tera Desh"
|-
| "Zalzala"
|-
!rowspan=2| ''Sab Se Bada Paap''
| "Suno Suno Meri Binati"
| rowspan=2| R D Burman
| rowspan=2| Indeevar
| solo
|-
| "Teri Nazar Meri Nazar"
| Mohammed Aziz
|-
!''Sardaar''
| "Bua Bhadak Gaya"
| Usha Khanna
| Kulwant Jani
| solo
|-
!''Shapath''
| "Do Phool Jawani Ke"
| Bappi Lahiri
| Kaisar
| solo
|-
!rowspan=3| ''[[Sharaabi]]''<ref>{{Cite web|url=https://www.hindigeetmala.net/movie/sharaabi.htm|title=Sharaabi : Lyrics and video of Songs from the Movie Sharaabi (1984)|website=HindiGeetMala}}</ref>
| "Intehaa Ho Gayi, Intezaar Ki"
|rowspan=3| Bappi Lahiri
|rowspan=3| Anjaan
| rowspan=3| Kishore Kumar
|-
| "Log Kehta Hain Main Sharabi Hoon"
|-
| "Mujhe Naulakha Maanga De"
|-
! Rowspan=2| ''Sharara''
| "Apna Dil Toh Hai Awara"
|Rowspan=2| Laxmikant–Pyarelal
|Rowspan=2| Anand Bakshi
| solo
|-
| "Maine Kiya Tyne Kiya"
| Suresh Wadkar
|-
! Rowspan=5| ''[[Sohni Mahiwal (1984 film)|Sohni Mahiwal]]''
| "Rab Tumhe Maaf Kare"
| rowspan=5| Anu Malik
| rowspan=5| Anand Bakshi
| rowspan=2| Anwar
|-
| "Sohni Meri Sohni"
|-
| "Bol Do Mithe Bol Sohniye"
| rowspan=3| Shabbir Kumar
|-
| "Mujhe Dulhe Ka Sehra Gane Do"
|-
| "Chand Ruka Hai Raat Ruki Hai"
|-
!''[[Tarang (film)|Tarang]]''
| "Tarang Tarang"
| Vanraj Bhatia
| Raghuveer Sahay
| solo
|-
! rowspan=2| ''[[Tarkeeb]]''
| "Chhuk Chhuk"
| rowspan=3| Bappi Lahiri
| rowspan=2| Anjaan
| Kishore Kumar
|-
| "O Jaani"
| Bappi Lahiri
|-
!''Teri Bahon Mein''
| "Money Money"
| Amit Khanna
| solo
|-
! Rowspan=2| ''The Gold Medal''
| "Mere Kaatil Utha Botal"
| rowspan=2| Shankar–Jaikishan
| Verma Malik
| rowspan=2| solo
|-
| "Main Tumko Dikhati Hoon Dupatta Tan Ke"
| Hasrat Jaipuri
|-
! Rowspan=5| ''[[Tohfa]]''
| "Pyaar Ka Tohfa Tera"
| rowspan=5| Bappi Lahiri
| rowspan=5| Indeevar
| rowspan=4| Kishore Kumar
|-
| "Gori Tere Ang Ang Mein"
|-
| "Milan Maujo Se Maujo Ka"
|-
| "Ek Aankh Marun Toh, Chhori Pat Jaye"
|-
| "O Milan Maujon Ka"
| S P Balasubrahmanyam
|-
!rowspan=2| ''Unchi Uraan''
| "Raat Bheegi Jaaye" (version 1)
| Rowspan=2| Jeetu–Tapan
| rowspan=2| Jan Nisar Akhtar
| Rowspan=2| Kishore kumar
|-
| "Raat Bheegi Jaaye" (version 2)
|-
!''[[Utsav]]''
| "Mann Kyun Behka Re"
| Laxmikant–Pyarelal
| Vasant Dev
| solo
|-
! Rowspan=3| ''[[Wanted: Dead or Alive (1984 film)|Wanted]]''
| "Tu Hai Deewana, Tu Nahin Mana Mere Yaar"
| Rowspan=5|Bappi Lahiri
| rowspan=3| Anjaan
| Kishore Kumar
|-
| "Koi Lootera Dil Leke"
| rowspan=1| solo
|-
| "Raat Aaye, Raat Jaye, Raaton Ki Rani Main"
| Bappi Lahiri
|-
!''[[Waqt Ki Pukar]]''
| "Aale Dulha Raja Baaje Band Baaja"
| Gauhar Kanpuri
| solo
|-
!''[[Yaadgaar (1984 film)|Yaadgaar]]''<ref>{{cite web|title=Yaadgaar Vinyl LP Records|url=http://www.ebay.com/itm/Yaadgaar-Bollywood-Vinyl-Lp-Record-OST-Music-India-Music-by-Bappi-Lahiri-l2274-/261353432262?pt=Music_on_Vinyl&hash=item3cd9e0e4c6|access-date=2013-12-15}}</ref><ref>{{cite web|title=I'm still learning: Runa Laila |url=https://www.newagebd.net/article/47502/im-still-learning-runa-laila |date=2 August 2018 |work=newagebd.net |access-date=11 January 2021}}</ref>
| "Saathi Yeh Rishta Hai Pyar Ka"
| Indeevar
| Kishore Kumar
|-
!''Yaadon Ki Zanjeer''
| "Kudrat Ke Insaaf Ko Tum Haath Mein Na Lo"
| Rajesh Roshan
| Indeevar
| solo
|-
! Rowspan=2| ''[[Yeh Desh]]''<ref>{{cite web|url=http://archive.indianexpress.com/news/eighties--and--counting/330868/ |title=Eighties - and COUNTING |date=3 July 2008 |access-date=10 January 2021 |website=[[The Indian Express]]}}</ref>
| "Aaj Ki Raat Main"
| rowspan=2| R D Burman
| rowspan=2| Anand Bakshi
| solo
|-
| "Meri Umar Ka Ek Ladka"
| Kishore Kumar
|-
!''[[Yeh Ishq Nahin Aasan]]''
| "Dilrubaon Se Pyaar Nahin Karna"
| rowspan=2| Laxmikant–Pyarelal
| Anand Bakshi
| Anwar
|-
!''[[Zakhmi Sher]]''
| "O Mere Honewale Bachchon Ki Amma"
| Santosh Anand
| Kishore Kumar
|-
! Rowspan=| ''[[Zameen Aasmaan (1984 film)|Zameen Aasmaan]]''
| "Pyar Naghma Hai, Pyar Sargam Hai"
| R D Burman
| Anjaan
| R D Burman
|-
! Rowspan=2| ''Zindagi Jeene Ke Liye''
| "Raaz-e-Dil Khol De"
| Rowspan=2| Rajesh Roshan
| Rowspan=2| Rajesh Roshan
|Kishore Kumar
|-
| "Aaja Ri Nindiya Aa"
| solo
|-
|}
=== 1985 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! Rowspan=3| ''[[Aaj Ka Daur]]''
| "Hum Tujh Par Hi Shaida Hue Hai"
| rowspan=3| Bappi Lahiri
| rowspan=3| Indeevar
| rowspan=2| Kishore Kumar
|-
| "Gori Gori Gori Gori, Tan Tera Roop Ki Nadiya"
|-
| "Shanivaar Tak Woh Officer Rehta Hai"
| Shabbir Kumar
|-
!| ''Aakhir Kyon''<ref name="auto"/>
| "Komal Hai Kamzor Nahin Hai Tu"
|| Rajesh Roshan
|| Indeevar
|| solo
|-
! Rowspan=4| ''[[Aandhi-Toofan]]''
| "Peechha Tera Chhodunga Na"
| rowspan=4| Bappi Lahiri
| rowspan=4| Anjaan
| Kishore Kumar
|-
| "O Baba O Baba"
| rowspan=2| solo
|-
| "Bareba Bareba"
|-
| "Banu Ko Mil Gaya Jaanu"
| Vijay Benedict, Manhar Udhas
|-
! ''[[Aar Paar (1985 film)|Aar Paar]]''
| "Mera Naam Pannabai Patnewali"
| R D Burman
| Anand Bakshi
| Shailendra Singh
|-
! Rowspan=3| ''[[Aetbaar]]''
| "Awaaz Di Hain Aaj Ek Nazar Ne"
| rowspan=3| Bappi Lahiri
| rowspan=2| Hasan Kamal
| rowspan=2| Bhupinder Singh
|-
| "Kisi Nazar Ko Tera Intezaar Aaj Bhi Hai"
|-
| "Tum Aur Main Aur Yeh Bekhudi"
| Farooq Kaiser
| solo
|-
! ''[[Alag Alag]]''
| "Ram Rahim Mein Antar Nahi"
| R D Burman
| Anand Bakshi
| K. J. Yesudas
|-
! Rowspan=3| ''Amber''
| "Aaj Hum Taaron Se Khelenge"
| rowspan=3| Sapan–Jagmohan
| rowspan=3| Gauhar Kanpuri
| rowspan=3| solo
|-
| "Kal Ka Har Sapna Hamen, Aaj Pyaara Sa Lage"
|-
| "Kal Ka Har Sapna Hamen, Aaj Pyaara Sa Lage" (sad)
|-
! Rowspan=2| ''[[Ameer Aadmi Gareeb Aadmi]]''
| "Aisa Kyun Hota Hai"
| rowspan=2| R D Burman
| rowspan=2| Nida Fazli
| rowspan=2| solo
|-
| "Har Ek Raasta Saja Ke Chal"
|-
! Rowspan=3| ''[[Ankahee (1985 film)|Ankahee]]''
| "Kauno Thagava Nagariya Lutal Ho"
| rowspan=3| Jaidev
| Kabir
| rowspan=3| solo
|-
| "Mujhko Bhi Radha Bana Le Nandlal"
| rowspan=2| Balkavi Bairagi
|-
| "Mujhko Bhi Radha Bana Le Nandlal" (Sad)
|-
! Rowspan=2| ''[[Arjun (1985 film)|Arjun]]''
| "Munni Pappu Aur Chunnum"
| rowspan=5| R D Burman
| rowspan=2| Javed Akhtar
| rowspan=4| solo
|-
| "Dhadkan Pal Pal Badhti Jaaye"
|-
! Rowspan=3| ''[[Awara Baap]]''
| "Dil Ke Dushman Pe Dil Aa Gaya"
| M G Hashmat
|-
| "Kori Kori Gagarsi Jawani"
| rowspan=2| Vishweshwar Sharma
|-
| "Umar Sari Humari"
| Amit Kumar
|-
!| ''[[Babu (1985 film)|Babu]]''<ref>{{Cite web|url=https://www.hindigeetmala.net/movie/babu.htm|title=Babu : Lyrics and video of Songs from the Movie Babu (1985)|website=HindiGeetMala}}</ref>
| "Main Kunwari Albeli"
|| Rajesh Roshan
|| Majrooh Sultanpuri
|| Kishore Kumar
|-
! Rowspan=4| ''[[Balidaan (1985 film)|Balidaan]]''
| "Aaja, Ek Ho Ja"
| rowspan=4| Bappi Lahiri
| Indeevar
| rowspan=2| Kishore Kumar
|-
| "Jaan-E-Man Humko Aaj Pyar Karne Ka Licence Mil Gaya"
| rowspan=3| Farooq Kaiser
|-
| "Kare Kaun, Bhare Kaun"
| rowspan=2| solo
|-
| "More Saajan Pyaar Karoon Tohe"
|-
! Rowspan=3| ''[[Bayen Hath Ka Khel]]''
| "Yeh Jhooth Bolti Hai"
| rowspan=3| Laxmikant–Pyarelal
| rowspan=3| Majrooh Sultanpuri
| rowspan=3| Kishore Kumar
|-
| "Ek Bosa Humne Manga Wah Re Maula Shahji"
|-
| "Kisi Ko Harana, Kisi Ko Jeetana"
|-
! Rowspan=3| ''[[Bepanaah]]''
| "Najariya Teer Chalaye, Kamariya Sau Balkhaye"
| rowspan=3| Khayyam
| rowspan=3| Nida Fazli
| [[Kishore Kumar]]
|-
| "Akelapan Mita Do Na"
| rowspan=2| solo
|-
| "Jab Se Tum Ho Meri"
|-
! Rowspan=6| ''[[Bewafai]]''
| "Aaiye Na Kasam Se"
| rowspan=6| Bappi Lahiri
| rowspan=2| Indeevar
| rowspan=6| solo
|-
| "Piya Aa, Piya Aa"
|-
| "Allah Hoo, Allah Hoo"
| rowspan=2| Faruk Kaiser
|-
| "Ek Nazar Bas Dekhe"
|-
| "Suno Zara Mere Sanam"
| rowspan=2| Hasan Kamal
|-
| "Lachakta Jism, Jalte Lab"
|-
! Rowspan=2| ''[[Bond 303]]''
| "Ab Jo Hoga So Hone Do"
| rowspan=2| R D Burman
| rowspan=2| Gulshan Bawra
| Kishore Kumar
|-
| "Main Hoon Lily, Aayi Hoon"
| solo
|-
! Rowspan=2| ''[[Chaar Maharathi]]''
| "Prem Sikhai Je Premi"
| rowspan=2| Sonik–Omi
| Gauhar Kanpuri
| Mohammed Aziz
|-
| "Humara Jiyara Khoi Gawa"
| Verma Malik
| solo
|-
!''Cheekh''
| "Le Maza Raat Guzar Jaaye Naa"
| Nadeem–Shravan
| Hasrat Jaipuri
| solo
|-
! Rowspan=2| ''[[Dekha Pyar Tumhara]]''
| "Chaahe Duniya Chhute"
| Rowspan=4| Laxmikant–Pyarelal
| Rowspan=4| Anjaan
| solo
|-
| "Ek Hum Hain Jo Dinbhar Intezar"
| S. P. Balasubrahmanyam
|-
! Rowspan=2| ''[[Do Dilon Ki Dastaan (1985 film)|Do Dilon Ki Dastaan]]''
| "Main Main Na Raha, Tu Tu Na Rahi"
| Shabbir Kumar
|-
| "Aap Ko Aap Se Chura Loon"
| solo
|-
! Rowspan=3| ''Durga''
| "Ab Naya Tamasha Dekhegi Ye Duniya Sari"
| rowspan=3| Sonik–Omi
| rowspan=3| Verma Malik
| rowspan=3| solo
|-
| "O Nari Dukhiyari"
|-
| "Shera Wali Tera Darbar"
|-
! Rowspan=2| ''[[Ek Chitthi Pyar Bhari]]''
| "Yeh Hamari Tumari Khaani"
| rowspan=2| Kalyanji–Anandji
| rowspan=2| Indeevar, Verma Malik
| rowspan=| solo
|-
| "O Tune Di Aawaz"
| Manhar Udhas
|-
! Rowspan=3| ''[[Ek Se Bhale Do]]''
| "Aaja Re Meri Zamborin"
| rowspan=3| R D Burman
| rowspan=3| Anjaan
| Kishore Kumar
|-
| "Kaam Karo Kaam"
| S. P. Balasubrahmanyam, Shailendra Singh]]
|-
| "Main To Nachungi"
| solo
|-
! Rowspan=3| ''[[Farz Ki Keemat]]''
| "Aankho Me Meri Chhaya Nasha"
| rowspan=3| Sonik–Omi
| rowspan=3| Hasrat Jaipuri
| rowspan=3| solo
|-
| "Dheere Dheere Haule Haule"
|-
| "Ek Shama Kitne Hai Parwane"
|-
! Rowspan=2| ''[[Geraftaar]]''
| "Dhoop Mein Nikla Na Karo"
| rowspan=2| Bappi Lahiri
| rowspan=2| Indeevar
| Kishore Kumar
|-
| "Dil Se Dil Ki Pappi"
| Mohammed Aziz
|-
! Rowspan=2| ''Ganga Kinare''
| "Jeevan Mein Sukh Paana Hai To"
| Rowspan=2| Jeetu–Tapan
| rowspan=2| Nirmal Maharaj
| Rowspan=2| solo
|-
| "Kaise Dhyaan Karoon Main Bhagwan"
|-
!''Ghar Dwaar''
| "Saat Pheron Pe"
| Chitragupt
| Anjaan
| solo
|-
!''[[Haqeeqat (1985 film)|Haqeeqat]]''
| "Main Bharatmata"
| Bappi Lahiri
| Indeevar
| Shabbir Kumar
|-
! Rowspan=6| ''[[Hoshiyar]]''
| "Bhaiya Ke Haath Mein"
| rowspan=6| Bappi Lahiri
| rowspan=6| Indeevar
| S. P. Balasubrahmanyam
|-
| "Deewana Dil Sangeet Ka Deewana"
| Bappi Lahiri
|-
| "Ho Ja Hoshiyaar"
| solo
|-
| "Choli Tere Tan Par Kasi Kasi"
| rowspan=3| Kishore Kumar
|-
| "Atka Atka Dil Mera Atka"
|-
| "Teri Jaisi Koi Shreemati Chahiye"
|-
! Rowspan=3| ''[[Hum Dono (1985 film)|Hum Dono]]''
| "Tu Laajawab Tu Bemisaal"
| rowspan=3| R D Burman
| rowspan=3| Anand Bakshi
| rowspan=2| Kishore Kumar
|-
| "Sun Le Zameen Aasmaan"
|-
| "Doctor Baabu Doctor Baabu"
| solo
|-
! Rowspan=3| ''[[Hum Naujawan]]''
| "Aa Jana Bahon Mein"
| rowspan=3| R D Burman
| Rowspan=3| Anjaan
| rowspan=3| solo
|-
| "Ek Pal Pyar Ka Kabhi"
|-
| "Tera Aana Ek Pal Mere"
|-
! Rowspan=3| ''Hum Paagal Premee''
| "Aankhein Teri Humein Badi"
| Rowspan=3| Anu Malik
| Rowspan=3| Hasrat Jaipuri
| Mohammed Rafi
|-
| "Humse Tum Mile"
| Amit Kumar
|-
| "Jaanejaana Yeh Hawayein"
| Kishore Kumar
|-
! Rowspan=2| ''[[Insaaf Main Karoonga]]''
| "Aap Ki Nazron Se Dil Pe Goli Chalne Lagi"
| rowspan=2| Bappi Lahiri
| rowspan=2| Anjaan
| Kishore Kumar
|-
| "Honey Honey, Kuch Maangun To Dena"
| Bappi Lahiri
|-
!''[[Jaago (1985 film)|Jaago]]''
| "Zindagi Hai Chaar Din Ko"
| Jai Singh
| N/A
| Mahendra Kapoor
|-
! Rowspan=3| ''[[Jaan Ki Baazi]]''
| "Aate Aate Teri Yaad Aa Gayi"
| rowspan=3| Anu Malik
| rowspan=3| Anjaan
| Mohammed Aziz
|-
| "Mujhko Khuda Mil Gaya"
| Shabbir Kumar
|-
| "Baba Main To Tun Ho Gaya"
| Amit Kumar
|-
!''Jab Pyar Hua''
| "Is Duniya Mein Thi"
| R D Burman
| Anand Bakshi
| Kishore Kumar
|-
! Rowspan=3| ''[[Jhoothi]]''
| "Bhaaga Bhaaga"
| rowspan=3| Bappi Lahiri
| rowspan=3| Maya Govind
| rowspan=2| solo
|-
| "Jhoothi Jhoothi"
|-
| "Thoda Jhuth To Akal Ka Ek Moti Hai"
| Usha Mangeshkar
|-
!rowspan=2| ''Kab Tak Pukaroon''
| "Kaise Jiyen Hum"
| rowspan=2| Trina Chakraborty
| Shyam Anuragi
|Rowspan=2| solo
|-
| "Ek Baar Cahle Aao"
| Shakil Akhtar
|-
!''[[Kala Suraj]]''
| "Ang Ang Mera Gaane Laga"
| Bappi Lahiri
| Kulwant Jani
| solo
|-
!''[[Kali Basti]]''
| "Kabhi Bole Haan, Kabhi Naa"
| Laxmikant–Pyarelal
| Anjaan
| Suresh Wadkar
|-
! Rowspan=3| ''[[Karm Yudh]]''
| "Jawani Se Mile"
| rowspan=3| Bappi Lahiri
| rowspan=3| Anjaan
| solo
|-
| "Jinka Chika"
| Amit Kumar
|-
| "Bahama Bahama"
| Mohammed Aziz
|-
!''Kashmakash''
| "Yeh Jawaani Yahaan"
| R D Burman
| Anjaan
| solo
|-
!''[[Lallu Ram]]''
| "Happy Birthday To You"
| colspan=2| Ravindra Jain
| solo
|-
! Rowspan=4| ''[[Lava (1985 film)|Lava]]''
| "Dil Kya Hai Ek Sheesha Hai"
| rowspan=4| R D Burman
| rowspan=4| Anand Bakshi
| Kishore Kumar, Shailendra Singh
|-
| "Jeene De Ye Duniya" (sad)
| rowspan=2| solo
|-
| "Jeene De Yeh Duniya, Chahe Maar Daale" (female)
|-
| "Jeene De Ye Duniya Chahe Maar Dale" (Duet)
| Manmohan Singh
|-
! Rowspan=7| ''Lover Boy''
| "Baahon Mein Leke Mujhe Dil Chhu Liya" (version 1)
| rowspan=7| Bappi Lahiri
| rowspan=6| Anjaan
| Rowspan=3| Kishore Kumar
|-
| "Baahon Mein Leke Nujhe Dil Chhu Liya" (version 2)
|-
| "Main Tera Pyaar Hoon"
|-
| "Jana Le Mujhe, Pehchan Le Mujhe"
| Bappi Lahiri
|-
| "Janam Janam Se Teri Kahani Yehi Hai"
| rowspan=2| solo
|-
| "Maa Indira" (Saare Jahan Se Achchha)
|-
| "Yaara Yaara Tu Seekh Le"
| S. H. Bihari
| Amit Kumar
|-
! Rowspan=3| ''[[Maha Shaktimaan]]''
| "Gali Gali Mein Tujhe Dhoonda Sanam"
| rowspan=3| Bappi Lahiri
| rowspan=3| Indeevar
| Shabbir Kumar
|-
| "Mamalu Mamalu O Papalu Papalu"
| rowspan=2| solo
|-
| "Akhtar Akhtar"
|-
! Rowspan=4| ''[[Mahaguru (1985 film)|Mahaguru]]''
| "Chikni Chikni Kanwal Jaisi Teri Jawaani"
| rowspan=4| Bappi Lahiri
| rowspan=4| Indeevar
| Kishore Kumar
|-
| "Daalo Ji, Tum Jaal Daalo Ji, Jaal Mujh Par Daalo Ji"
| Amit Kumar
|-
| "Phir Milne Aap Kab Aayenge"
| Shabbir Kumar
|-
| "Kuch Din Pehle Tha Jo Begana"
| Manhar Udhas
|-
! Rowspan=4| ''Main Qatil Hoon''
| "Apna Muqaddar Bana Le Mujhe"
| rowspan=4| Basudev
| rowspan=4| Nida Fazli
| rowspan=2| solo
|-
| "Teri Khudai Se Kuchh Nahi Maanga"
|-
| "Hawaye Geet Gaaye Fizaye Jagmagaye"" (happy)
| rowspan=2| Mohammed Rafi
|-
| "Hawaye Geet Gaaye Fizaye Jagmagaye" (sad)
|-
! Rowspan=2| ''Majboori''
| "Badnaam Zindagi Se"
| rowspan=2| Roshan Lal
| K. Kashmiri
| Rowspan=2| solo
|-
| "Jab Pyaar Kisi Se Karna"
| Aish Kanwal
|-
! Rowspan=2| ''[[Mard (1985 film)|Mard]]''
| "Hum To Tambu Mein Bambu"
| rowspan=2| Anu Malik
| rowspan=2| Prayag Raj
| Mohammed Aziz
|-
| "Will You Marry Me?"
| Anu Malik
|-
! Rowspan=4| ''[[Masterji]]''
| "Ankhen Khojo Toh Swami"
| rowspan=4| Bappi Lahiri
| rowspan=4| Indeevar
| rowspan=3| Kishore Kumar
|-
| "Jab Tanhai Me Do Badan Pas Ahte Hai"
|-
| "Galo Par Ye Kaise Nishan"
|-
| "Dum Kham Wala Balam Matwala"
| solo
|-
!''Mehak''
| "Dheere Dheere Saanwariya Bol"
| Usha Khanna
| Shail Singh
| solo
|-
! Rowspan=4| ''[[Mera Saathi]]''
| "Sapnon Mein Kho Ja, Chupke Se So Ja"
| rowspan=4| Bappi Lahiri
| rowspan=4| Indeevar
| rowspan=2| Kishore Kumar
|-
| "Daddy Se Tujhko Milaungi"
|-
| "Pyar Se Pyara Tu Tu, Mera Nazara Tu Tu"
| Bappi Lahiri
|-
| "Sare Sapne Tu Tod Gayi"
| S. P. Balasubrahmanyam
|-
!''[[Meraa Ghar Mere Bachche]]''
| "Jhansi Pe Rail Gaadi"
| Laxmikant–Pyarelal
| Anand Bakshi
| solo
|-
! ''[[Mohabbat (1985 film)|Mohabbat]]''<ref>{{Cite web |title=Mohabbat |url=https://www.jiosaavn.com/album/mohabbat/oUSPIPKPYRw_ |access-date=14 August 2021 |website=[[JioSaavn]]|date=3 October 2008 }}</ref>
| "Zindagi Mein Pehla Pehla Tune Mujhko Pyar Diya Hai"
| Bappi Lahiri
| Indeevar
| Kishore Kumar
|-
! Rowspan=6| ''Naya Bakra''
| "Aapse Dil Mila Ho Aapka Ho Gaya"
| rowspan=6| K. Babuji
| rowspan=6| Anjaan
| Kishore Kumar
|-
| "Mai Hu Pyar Ki Kitab Panna Panna Lajabab"
| Rowspan=2| solo
|-
| "Nayi Nayi Ye Jawani"
|-
| "Sajna Bin Tere Na Saje"
| rowspan=2| Amit Kumar
|-
| "Chatur Sundari Nach Zara"
|-
| "O Rekha Tujhe Dekha Jabse"
| Mohammed Rafi
|-
!''[[Oonche Log (1985 film)|Oonche Log]]''
| "Mastani Mastani Diljaani"
| R D Burman
| Anjaan
| solo
|-
! Rowspan=2| ''[[Pataal Bhairavi]]''
| "Jhanak Jhanak Jhanak Lehar Nache, Jiya Nache"
| rowspan=2| Bappi Lahiri
| rowspan=2| Indeevar
| rowspan=2| Kishore Kumar
|-
| "Jhum Jhumke Nacho Tum, Gao Geet Milan Ke"
|-
! Rowspan=4| ''[[Patthar]]''
| "Main Tere Saath Hoon" (female)
| rowspan=4| Raam Laxman
| rowspan=4| Naqsh Lyallpuri, Kulwant Jani, Ravinder Rawal
| rowspan=3| solo
|-
| "Mujhe Pyaar Mila"
|-
| "Mujhe Pyaar Mila" (sad)
|-
| "Main Tere Saath Hoon" (duet)
| Pankaj Udhas
|-
!rowspan=3| ''Patthar Dil''
| "Kya Karte Ho, Koi Dekh lEga"
| rowspan=3| Laxmikant–Pyarelal
| rowspan=2| Sudarshan Fakir
| Suresh Wadkar
|-
| "Hum Pyaar Karnewale"
| Rowspan=2| solo
|-
| "Aye Haye Haye Haye"
| Santosh Anand
|-
!''[[Phaansi Ke Baad]]''
| "Motor Yaaron Ki"
| Anu Malik
| Anand Bakshi
| Shabbir Kumar
|-
! Rowspan=2| ''[[Pyari Behna]]''
| "Tujhe Chhune Se"
| rowspan=2| Bappi Lahiri
| rowspan=2| Indeevar
| Rowspan=2| Kishore Kumar
|-
| "Shaadi Ka Matlab"
|-
! Rowspan=2| ''[[Rahi Badal Gaye]]''
| "Aasman Se Ek Sitara"
| rowspan=2| R D Burman
| Rowspan=2| Gulshan Bawra
| R D Burman
|-
| "Chori Chori"
| Shailendra Singh
|-
! Rowspan=3| ''[[Ramkali]]''
| "Iss Mehfil Mein Pal Do Pal Mein"
| rowspan=3| Sonik–Omi
| rowspan=3| Verma Malik
| rowspan=3| solo
|-
| "Nazar Jhukaye Baithe Ho"
|-
| "Huyi Gali Gali Badnaam"
|-
! ''Rusvai''
| "Honge Kayi Raaz Hamare"
| R D Burman
| Indeevar
| solo
|-
! Rowspan=2| ''[[Saagar (1985 film)|Saagar]]''<ref>{{Cite web|url=https://m.hindigeetmala.net/movie/saagar.htm|title=Saagar : Lyrics and video of Songs from the Movie Saagar (1985)|website=HindiGeetMala}}</ref>
| "O Maria"
| rowspan=2| R D Burman
| rowspan=2| Javed Akhtar
| S P Balasubrahmanyam
|-
| "Jaane Do Naa"
| Shailendra Singh
|-
! Rowspan=2| ''[[Saaheb]]''
| "Tukur Tukur Pyar Karoongi" (version 1)
| rowspan=2| Bappi Lahiri
| Rowspan=2| Anjaan
| rowspan=2| solo
|-
| "Tukur Tukur Pyar Karoongi" (version 2)
|-
! Rowspan=2| ''[[Sanjog (1985 film)|Sanjog]]''
| "Dil Kya Chaahe"
| Rowspan=2| Laxmikant–Pyarelal
| Rowspan=2| Anjaan
| Kishore Kumar
|-
| "Chham Se Tu Aaye"
| Suresh Wadkar
|-
! Rowspan=2| ''Sarfarosh''
| "Raat Meri Saiyan Se Aanban Ho Gayi"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Anand Bakshi
| solo
|-
| "Ch Ch Ch Chor Chor"
| rowspan=2| Kishore Kumar
|-
! Rowspan=4|''Sautela Pati''
| "Tum Humse Mile Jab Se"
| Rowspan=4| Iqbal Qureshi
| rowspan=4| Nida Fazli
|-
| "Dhoop Bhare Chhat Pe"
| solo
|-
| "Humne Jaana Nahin Hum Chale Do Kadam" (version 1)
| Rowspan=2| Mohammed Aziz
|-
| "Humne Jaana Nahin Hun Chale Do Kadam" (version 2)
|-
!''Sej Piya Ki''
| "Yeh Main Kahan Aa Gayi"
| colspan=2| Ravindra Jain
| Mohammed Rafi
|-
! Rowspan=3| ''[[Shiva Ka Insaaf (1985 film)|Shiva Ka Insaaf]]''
| "Ja Ja Re Mawaali"
| rowspan=3| R D Burman
| Rowspan=3| Gulshan Bawra
| solo
|-
| "Aankhon Hi Aankhon Mein Jaan-E-Jaan Vaade Hue"
| rowspan=2| Mohammed Aziz
|-
| "Bhang Jamaye Rang Zara Sa"
|-
! rowspan=2| ''[[Sitamgar]]''
| "Meri Tarah Allah Kare"
| rowspan=2| R D Burman
| rowspan=2| Majrooh Sultanpuri
| solo
|-
| "Mausam Pyaar Ka"
| Kishore Kumar
|-
!''Sooraj Mukhi''
| "Chhamiya Re Chalogi"
| Ajay Swami
| Laxman Shahabadi
| Mahendra Kapoor
|-
!''Sulagte Armaan''
| "Ilzamon Ka Naam Zindagi"
| Jugal Kishore–Tilak Raj
| Indeevar
| solo
|-
! Rowspan=4| ''Surkhiyaan''
| "Tere Hothon Ke Amrit Jab Na Mila"
| rowspan=4| Vanraj Bhatia
| rowspan=4| Indeevar
| rowspan=2| Kishore Kumar
|-
| "Dil Zibda Rakhne Ke Liye"
|-
| "Woh Ek Dost Jo Mujhe Khuda Sa Lagta Hai" (female)
| rowspan=2| solo
|-
| "Kya Hai Awaaz Wahi"
|-
! Rowspan=4| ''[[Tawaif (film)|Tawaif]]''
| "Mera Shauhar Bada Sharmeela"
| rowspan=4| Ravi
| rowspan=4| Hasan Kamal
| Mahendra Kapoor
|-
| "Joban Anmol Balma"
| rowspan=3| solo
|-
| "Bahut Der Kar Di"
|-
| "Aaj Ki Shaam"
|-
! Rowspan=2| ''Telephone''
| "Main Hoon Tujhpe Sun Fida"
| rowspan=2| Rajesh Roshan
| rowspan=2| Rajesh Roshan
| rowspan=2| solo
|-
| "Saal Mubarak Ho"
|-
! Rowspan=2| ''Triveni''
| "Chahat Ke Rang Chadhne Lage"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Anjaan
| rowspan=2| solo
|-
| "O Raaja Ji"
|-
! Rowspan=2| ''[[Ulta Seedha]]''
| "Uncle Robert Kya Bole Tumko"
| rowspan=2| Rajesh Roshan
| rowspan=2| Majrooh Sultanpuri
| Kishore Kumar, Bonny Remedious
|-
| "Zulfon Ke Andhere Mein"
| solo
|-
! Rowspan=3| ''[[Wafadaar]]''
| "Dim Dim Dim Tana Dim"
| rowspan=3| Bappi Lahiri
| rowspan=3| Indeevar
| rowspan=2| Kishore Kumar
|-
| "Ek Chandan Ki Khushboo"
|-
| "Sapnon Ka Tu Raja, Jeevan Mein Tu Aaja"
| Mohammed Aziz
|-
!''Yaar Kasam''
| "Kahe Sarangi Suno Balamji"
| Usha Khanna
| Ram Bhardwaj
| solo
|-
! Rowspan=2| ''Yeh Kaisa Farz''
| "Aaj Pyaar Ke Naam Par"
| rowspan=2| Raam Laxman
| Rowspan=2| Indeevar
| solo
|-
| "Let's Have A Good Time Together"
| Raam Laxman
|-
! Rowspan=2| ''[[Yudh (film)|Yudh]]''
| "Kya Hua, Kya Nahin"
| rowspan=2| Kalyanji–Anandji
| rowspan=2| Anand Bakshi
| Amit Kumar
|-
| "Main Kya Aise Pyar Karoongi"
| Mahendra Kapoor
|-
! Rowspan=4| ''[[Zabardast]]''
| "Bhool Ho Gayi, Jaane De Sajna"
| rowspan=4| R D Burman
| rowspan=4| Majrooh Sultanpuri
| rowspan=2| Kishore Kumar
|-
| "Karega Zamana Kya, Sach Ko Chhupana Kya"
|-
| "Suno Sitamgar Mere"
| R D Burman
|-
| "Aise Na Thukrao, Ae Sanam"
| solo
|-
!Rowspan=2| ''[[Zamana (1985 film)|Zamana]]''
| "Ik Baat Hai Tumse"
| rowspan=2| Usha Khanna
|rowspan=2| Majrooh Sultanpuri
| rowspan=1| Kishore Kumar
|-
| "Ganyat Saankli Sonachi"
| Kishore Kumar, Shailendra Singh
|-
! Rowspan=3| ''[[Zulm Ka Badla]]''
| "Pehle Kabhi Yeh Mausam Na Tha Itna Suhaana"
| Rowspan=3| Sonik–Omi
| Rowspan=3| Kulwant Jani
| Mohammed Rafi
|-
| "Hai Allah Nigehbaan"
| rowspan=2| solo
|-
| "Mumbai Ka Tu Maharaja"
|-
|}
=== 1986 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
!''[[Aag Aur Shola]]''
| "Meethi Meethi Hoti Hai Kasak"
| Laxmikant–Pyarelal
| Anand Bakshi
| Manhar Udhas
|-
! Rowspan=4| ''[[Allah Rakha (film)|Allah Rakha]]''
| "Na Amar, Na Akbar, Na Main Anthony"
| Rowspan=6| Anu Malik
| Prayag Raj
| Shabbir Kumar
|-
| "Chahe Sholon Mein Jala Do"
| Rowspan=5| Rajendra Krishan
| Mohammed Aziz
|-
| "Parvardigar-E-Aalam"
| rowspan=2| solo
|-
| "Badtameezi Pe Hum"
|-
! Rowspan=2| ''[[Angaaray (1986 film)|Angaaray]]''
| "Mujhe Zindagi Ne Mara"
| rowspan=2| solo
|-
| "Tauba Tauba Karoge"
|-
! Rowspan=3| ''Anjaam Khuda Jaane''
| "Bazaar Mein Baithi Aurat Ko"
| Rowspan=3| Manoj–Gyan
| Rowspan=3| Shakir Kotwi
| rowspan=3| solo
|-
| "Aap Jo Aa Gaye, Raat Kat Jaayegi"
|-
| "Paane Ko Pyaar Kisi Ka"
|-
! Rowspan=3| ''[[Anokha Rishta]]''
| "Aaj Ka Din Na Jaane Kyun"
| rowspan=3| R D Burman
| rowspan=3| Anand Bakshi
| Rowspan=3| solo
|-
| "Chal Saheli Jhoomke"
|-
| "Tune Yeh Jaana"
|-
! ''[[Anubhav (1986 film)|Anubhav]]''
| "Tere Hi Pyar Se Bhuje To Bhuje"
| Rajesh Roshan
| Indeevar
| solo
|-
!''[[Avinash (film)|Avinash]]''
| "Yeh Pehli Mulakat Hai"
| Bappi Lahiri
| Amit Khanna
| Bappi Lahiri
|-
!''[[Baat Ban Jaye]]''
| "Raja Tore Baag Ke"
| Kalyanji–Anandji
| Anand Bakshi
| solo
|-
!''Bad-Kaar''
| "Pyar Karo" (Duniya Ki Aiso Taisi)
| Usha Khanna
| Nida Fazli
|solo
|-
! Rowspan=3| ''[[Begaana (1986 film)|Begaana]]''
| "O Dil Jaani Rab Di Mehrbani"
| rowspan=3| Anu Malik
| rowspan=3| Anjaan
| solo
|-
| "Waqt Ke Saath"
| Mohammed Aziz
|-
| "Dear Sir Aap Ko Main Bhut Chahti Hu"
| Kishore Kumar
|-
! Rowspan=3| ''[[Bhagwaan Dada]]''
| "Aaya Aaya Pyaar Ka Zamana"
| rowspan=3| Rajesh Roshan
| Farooq Kaiser
| Mohammed Aziz
|-
| "Chug Gayi Chidiya Jo Khet"
| rowspan=2| Indeevar
| rowspan=2| solo
|-
| "Pehli Baar Dil Jaala"
|-
!''Bud-Naseeb''
| "Bas Itni Meherbaani Aur Mere Meherbaan Kar Do"
| Ajay Swami
| Zafar Rahi
| solo
|-
! ''Car Thief''
| "Jaane Mera Dil Kyun Chahe Tujhe"
| Anu Malik
| Anjaan
| Kishore Kumar
|-
! Rowspan=2| ''[[Chameli Ki Shaadi]]''
| "Utar Aayi Akhade Mein"
| rowspan=2| Kalyanji–Anandji
| Rowspan=2| Farooq Kaiser
| rowspan=2| solo
|-
| "Tu Jahan Bhi Chalega"
|-
!''Chhota Aadmi''
| "Haule Haule Haule Se Sajna"
| Mahesh–Naresh
| Jainendra Jain
| Naresh Kanodia
|-
! Rowspan=3| ''[[Dahleez (film)|Dahleez]]''
| "Jhoomti Baharon Ka Sama"
| rowspan=3| Ravi
| rowspan=3| Hasan Kamal
| rowspan=3| Mahendra Kapoor
|-
| "Tum Aaye To Humko Aaj Woh Phir Bhula Hua Qissa"
|-
| "Dil Bekaraar, Wai Wai, Tujhpe Nisaar, Wai Wai"
|-
! Rowspan=3| ''Devar Bhabhi''
| "Kabhi Is Paar Milenge"
| rowspan=3| Khayyam
| rowspan=3| Naqsh Lyallpuri
| Mahendra Kapoor
|-
| "Devar Ki Shaadi Mein Nachegi Bhabhi"
| rowspan=2| solo
|-
| "Hey Kalyani"
|-
! Rowspan=4| ''[[Dharam Adhikari]]''
| "Ek To Kam Zindegani, Ussse Bhi Kam Naujawaani"
| rowspan=4| Bappi Lahiri
| rowspan=4| Indeevar
| rowspan=4| Shabbir Kumar
|-
| "Rup Dekhu Rang Dekhu"
|-
| "Jab Ladki Seeti Bajaaye"
|-
|"Suno Suno Suno Meree Zubaani"
|-
! Rowspan=2| ''[[Dilwaala]]''
| "Saath Saath Rehna Mere Saari Zindagi"
| rowspan=2| Bappi Lahiri
| rowspan=2| Indeevar
| rowspan=2| Kishore Kumar
|-
| "Chor Ko Pakdo, Zor Se Pakdo"
|-
! Rowspan=3| ''[[Ek Chadar Maili Si]]''
| "Is Duniya Mein Aurat Kya Hai"
| rowspan=3| Anu Malik
|Sudarshan Fakir
| solo
|-
| "Mar Gayi, Mar Gayi, Mar Gayi"
| Gurcharan Kaur
| Makhan Singh
|-
| "Koi Sona, Koi Chandi, Koi Pitalbhari Paraat"
| Sardar Panchhi
| Shabbir Kumar
|-
! Rowspan=3| ''Ek Main Aur Ek Tu''
| "Re Main Logon Se Bol Doonga"
| rowspan=3| R D Burman
| rowspan=3| Anand Bakshi
| rowspan=2| Mohammed Aziz
|-
| "Main Deewana"
|-
| "Jhanjhar Behta Hai"
| solo
|-
!''Ek Pal''
| "Aanewali Hai Bajaar"
| Bhupen Hazarika
| Kaifi Azmi
| solo
|-
!''Ganga Aakhir Ganga Hai''
| "Tum Rootho Chahe Manu"
| Surinder Kohli
| Akhtar Indori
| solo
|-
! Rowspan=2| ''[[Ghar Sansar]]''
| "Chot Lagi Kahan, Yahan Wahan"
| rowspan=2| Rajesh Roshan
| rowspan=2| Indeevar
| Kishore Kumar
|-
| "Ghar Tere Aaungi Dulhan Banke"
| Mohammed Aziz
|-
! Rowspan=3| ''[[Ilzaam]]''
| "Pehle Pehle Pyar Ki, Kya Hai Yeh Deewangi" (Slow)
| rowspan=3| Bappi Lahiri
| rowspan=3| Anjaan
| rowspan=2| Amit Kumar
|-
| "Pehle Pehle Pyar Ki, Kya Hai Yeh Deewangi" (Fast)
|-
| "Pyar Kiya Hai, Pyar Karenge"
| Shabbir Kumar
|-
! Rowspan=2| ''Inteqaam Ki Aag''
| "Saawan Ki Sargam"
| rowspan=2| Shankar–Jaikishan
| rowspan=2| Indeevar
| solo
|-
| "Qayamat Naam Hai Kiska"
| Mohammed Rafi
|-
!rowspan=2| ''[[Jaal (1986 film)|Jaal]]''<ref>{{Cite web|url=https://www.hindigeetmala.net/movie/jaal.htm|title=Jaal : Lyrics and video of Songs from the Movie Jaal (1952)|website=HindiGeetMala}}</ref>
| "Main Hoon Dulhan Ek Raat Ki"
|rowspan=2| Anu Malik
|rowspan=2| Anand Bakshi
| Mohammed Aziz
|-
| "Break Dance"
| solo
|-
!rowspan=5| ''[[Jeeva (1986 film)|Jeeva]]''<ref>{{Cite web|url=https://www.hindigeetmala.net/movie/jeeva.htm|title=Jeeva : Lyrics and video of Songs from the Movie Jeeva (1986)|website=HindiGeetMala}}</ref>
| "Roz Roz Ankhon Tale"
|rowspan=5| R D Burman
|rowspan=5|[[Gulzar]]
| Amit Kumar
|-
| "Chal Aaj Ke Din Rat Ka Wada"
| Suresh Wadkar
|-
| "Aa Jagmagata Chaand Hai"
| rowspan=3| solo
|-
| "Dil Pukare Dil Pukare Jeeva Re"
|-
| "Bas Ek Nazar Pe Jaan Ka Daromadar Hai"
|-
! Rowspan=4| ''Jwala''
| "O Dekhi Aaye Jawani Ke Din"
| Rowspan=4| Jagjit Singh
| Rowspan=3| S. H. Bihari
| Kavita Krishnamurthy
|-
| "Jhoothe Balma Ka Babuji Pyaar Jhootha"
| rowspan=3| solo
|-
| "Abhi Toh Mehfil Jami Nahin"
|-
| "Tu Bhi Luta De"
|-
!''[[Kaanch Ki Deewar]]''
| "Baaton Mein Na Talo Ji"
| Shankar–Jaikishan
| Indeevar
| Mohammed Rafi
|-
!''Karamdaata''
| "Ikdam Tikdam Tikdayee Re"
| Anu Malik
| Hasrat Jaipuri
| solo
|-
! Rowspan=5| ''[[Khamosh Nigahen (1986 film)|Khamosh Nigahen]]''
| "Maine Tumse Muskurake Baat Ki"
| rowspan=5| Ravi
| Rowspan=5| solo
| Kishore Kumar
|-
| "So Ja Re So Ja Raja"
| rowspan=4| solo
|-
| "Khamosh Nigahen" (version 1)
|-
| "Khamosh Nigahen" (version 2)
|-
| "Khamosh Nigahen" (version 3)
|-
! Rowspan=3| ''Khoon Aur Sazaa''
| "Palal Tori Palla"
| rowspan=3| Jimmy
| rowspan=2| Abhilaash
| rowspan=2| solo
|-
| "Bahut Pila Di Hai"
|-
| "Tere Dil Mein Mujhe Rehna Hai"
| Abhilash, Dev Kohli
| Suresh Wadkar
|-
! Rowspan=4| ''Kirayedar''
| "Akkad Bakkad"
| rowspan=4| Bappi Lahiri
| rowspan=4| Hasan Kamal
| rowspan=2| solo
|-
| "Dil Diya Dil DLiya"
|-
| "Charon Taraf Pyaar Hai"
| Mohammed Aziz
|-
| "Gaa Rahe Hain Dil Yehi"
| Mahendra Kapoor
|-
!''[[Kismetwala]]''
| "Boogie Boogie"
| Bappi Lahiri
| Anjaan
| Bappi Lahiri
|-
!''[[Krishna-Krishna]]''
| "Nirmohi Natwar Se Pad Gaya Pala Re"
| Shankar–Jaikishan
| Upendra Jha
| solo
|-
!''[[Love and God]]''
| "Mohabbat Khuda Hai" (version 1)
| Naushad
| Khumar Barabankvi
| solo
|-
!rowspan=2| ''Maa Ki Saugandh''<ref>{{Cite web|url=https://open.spotify.com/album/2KAeHmLMQ6NFStc9UoEEhE|title=Maa Ki Saugandh (Original Motion Picture Soundtrack)|date=January 1, 1980|via=open.spotify.com}}</ref>
| "Jab Chor Ban Jaaye Sipahiya"
|rowspan=2| Sapan-Jagmohan
|rowspan=2| Anjaan
| rowspan=2| solo
|-
| "Chunri Le Gaya Kabutar Banke"
|-
! Rowspan=2| ''Mangal Dada''
| "Jahan Jidhar Se Jab Bhi Main Guzroon"
| rowspan=2| Kalyanji–Anandji
| rowspan=2| Shaily Shailendra
| rowspan=2| solo
|-
| "Aa Jaanejaan Tera Mera Saath"
|-
! Rowspan=4| ''[[Mera Dharam]]''
| "Jao Jao Humse Kya"
| rowspan=4| Bappi Lahiri
| rowspan=4| Hasan Kamal
| rowspan=2| Mohammed Aziz
|-
| "Jai Mata Ki"
|-
| "Janam Janam Janam Janam"
| Kishore Kumar
|-
| "Dhoondhti Hai Tujhe Meri Tanhaiyan"
| Manhar Udhas
|-
! Rowspan=4| ''[[Muddat]]''
| "Pyaar Humara Amar Rahega"
| rowspan=4| Bappi Lahiri
| rowspan=4| Indeevar
| Mohammed Aziz
|-
| "Love Express"
| rowspan=2| Kishore Kumar
|-
| "Pedon Ko Gali Dene Do"
|-
| "Utho Behno, Kali Banke"
| solo
|-
!''Musafir''
| "Sawan Sanwri Aankhen Choome"
| R D Burman
| Gulzar
| solo
|-
!rowspan=4| ''Naasamajh''
| "Na Vaada Karo Tum, Na Nibha Sakoge"
|Rowspan=4| Jeetu–Tapan
|Rowspan=4| Sikandar Bharti
|rowspan=2| Anwar
|-
| "Na Vaada Karo Tum, Na Nibhana Sakoge"
|-
| "Saanson Mein Khushboo Hai"
| Vinod Sehgal
|-
| "Teri Meri Kahani"
| Suresh Wadkar
|-
! Rowspan=3| ''[[Naseeb Apna Apna (1986 film)|Naseeb Apna Apna]]''
| "Ek Ek Ankh Mere Sawa Sawa Lakh Ki"
| rowspan=3| Laxmikant–Pyarelal
| rowspan=3| S. H. Bihari
| solo
|-
| "Zindagi Ki Jhoomti Gaati Baharon Mein Sanam"
| Mohammed Aziz
|-
| "Pyar Pyar Pyar Pyar, Only Love, Only Love"
| Shabbir Kumar
|-
! Rowspan=2| ''[[Nasihat]]''
| "Yeh Hawaayein Sard Sard Hain"
| rowspan=2| Kalyanji–Anandji
| rowspan=2| Anjaan
| Suresh Wadkar
|-
| "Zindagi Hai Kitne Din Ki"
| Kishore Kumar
|-
! Rowspan=2| ''[[Palay Khan (film)|Palay Khan]]''<ref>{{cite web|url=https://itunes.apple.com/in/album/palay-khan-original-motion/id918811817|title=Palay Khan (Original Motion Picture Soundtrack) by R. D. Burman|work=[[iTunes Store]]|date=1 December 1986}}</ref>
| "Allah Kare Chham Se"
| rowspan=2| R D Burman
| rowspan=2| Anand Bakshi
| rowspan=2| solo
|-
| "Kabul Se Aaya Hai"
|-
! Rowspan=6| ''[[Patton Ki Bazi]]''
| "Jalta Hai Yeh Badan"
| rowspan=6| Anup Jalota
| rowspan=6| Maya Govind
| rowspan=2| solo
|-
| "Mera Sajna Mujhe Mil Gaya"
|-
| "Mora Saiyan Na Pakde Baiyan"
| Udit Narayan
|-
| "Aaja Re Aaja Tu Aaja"
| rowspan=3| Anup Jalota
|-
| "Kanhaiya Tu Naiya Ko Paar Lagade"
|-
| "Chhum Chhananan Payal More Bole"
|-
! Rowspan=3| ''Peechha Karro''
| "Jaane Kya Hua Rama Rama"
| rowspan=3| Anand–Milind
| rowspan=3| Sameer
| rowspan=2| Kishore Kumar
|-
| "Chhan Se Aaye, Chham Se Aaye"
|-
| "Roz Shaam Piya Ghar Jaldi Se Aana"
| solo
|-
!''Pyaasi Mamta''
| "Gali Gali Mein Dil Do Lekar"
| Surinder Kohli
|rowspan=2| Mahendra Dalvi
|rowspan=2| solo
|-
!''Pyar Ki Pahli Nazar''
| "Le Le Nigahon Ka Salaaam"
| Sulochana Manandhar
|-
!''[[Qatil Aur Ashiq]]''
| "Teri Meri Preet"
| Nadeem–Shravan
| Anjaan
| Shabbir Kumar
|-
! ''[[Sadaa Suhagan]]''
| "Yeh Gussa Kaise Utrega"
| Laxmikant–Pyarelal
| Anand Bakshi
| Mohammed Aziz
|-
!''Sajna Saath Nibhana''
| "Sajna Saath Nibhana"
| Jagdish J
| Maya Govind
| Suresh Wadkar
|-
! ''[[Savere Wali Gaadi]]''
| "Dekho Yeh Kaun Aaya"
|Rowspan=2| R D Burman
| Majrooh Sultanpuri
| Suresh Wadkar
|-
!''[[Shatru]]''
| "Babuji Dil Loge"
| Anand Bakshi
| solo
|-
!''[[Samundar]]''
| "Rang-E-Mehfil Badal Raha Hai"
| R D Burman
| Anand Bakshi
| solo
|-
!''Sasti Dulhan Mahenga Dulha''
| "Aaj Jawani Aur Budhape Ka Mail Hoga"
| Usha Khanna
| Saba Fazli
| Mohammed Aziz
|-
! rowspan="3"| ''[[Singhasan]]''
| "Kismat Likhnewale Par Zara Bas Jo Chale Hamara"
| rowspan="6"| Bappi Lahiri
| rowspan="6"| Indeevar
| rowspan="2"| Kishore Kumar
|-
| "Wah Wah, Kya Rang Hai, Wah Wah, Kya Roop Hai"
|-
| "Booba Booba, Meri Booba"
| Bappi Lahiri
|-
! Rowspan=3| ''[[Suhaagan]]''
| "Ghunghta, Kholna Ghunghta"
| rowspan=3| Kishore Kumar
|-
| "Chhama Chham Chhai Chhai Chhai"
|-
| "Aankhon Se Girana Na Tare, Mere Pyar"
|-
! Rowspan=3| ''[[Sultanat]]''
| "Yaara Dilbar Dildaara Kitna Hai Pyara Pyara"
| rowspan=3| Kalyanji–Anandji
| rowspan=3| Anjaan
| rowspan=2| solo
|-
| "Kya Hoon Main Tu Jaane Na"
|-
| "Jaanu Jaanam Jaan-E-Man Jaan-E-Tamanna Jaan-E-Jigar"
|Shabbir Kumar
|-
! Rowspan=4| ''Swarg Se Sunder''
| "Ab Ke Baras, Barson Ke Baad"
| rowspan=4| Laxmikant–Pyarelal
| rowspan=4| Anand Bakshi
| rowspan=3| Kishore Kumar
|-
| "Apna Ghar Hai Swarg Se Sunder"
|-
| "Woh Din Yad Karo"
|-
| "Sun Ri Meri Behna"
| Lata Mangeshkar
|-
! Rowspan=2| ''[[Swati (1986 film)|Swati]]''
| "Aane Do Ab Zubaan Par"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Anand Bakshi
| Manhar Udhas
|-
| "Jannat Ka Khwab Hoon"
| solo
|-
!''[[Tahkhana]]''
| "Main Hoon Paagal"
| Ajit Singh
| Yogesh
| solo
|-
!''Tere Shehar Mein''
| "Kehte Hai Kya Main Karun"
| Khayyam
| Naqsh Lyallpuri
| solo
|-
!''Teri Aarzoo''
| "Masoom Nazar Ka Bholapan"
| Usha Khanna
| Aarzoo Lucknowi
| Suresh Wadkar
|-
! Rowspan=2| ''[[Zindagani]]''
| "Pyar Mujhe Kab Dogi"
| Rowspan=2| R D Burman
| Indeevar
| Suresh Wadkar
|-
| "Tum Tum Ho To Hum Bhi Hai Kam Nahin"
| Anjaan
| Shailendra Singh
|-
|}
=== 1987 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! Rowspan=3| ''[[Aag Hi Aag]]''
| "Lagli Lagli Aisi Hichki"
| rowspan=3| Bappi Lahiri
| rowspan=3| Anjaan
| rowspan=2| solo
|-
| "Saajan Aa Jaao, Waada Karle Pyaar Mein"
|-
| "Aaja Re Saajan Aaja Re"
| Shabbir Kumar
|-
!''Aage Mod Hai''
| "Dupahariya Basawariya Peeshe"
| Raghunath Seth
| Ravi Misra
| solo
|-
!''Anjaam''
| "Gore Hathon Se Kha Lo Ji Paan"
| Laxmikant–Pyarelal
| Farooq Kaiser
| Kavita Krishnamurthy
|-
!''Apne Apne Sanskar''
| "Daru Piyela Majha Navara"
| Rajla Sharma
| K. R. Gupta
| solo
|-
! Rowspan=6| ''[[Awaam]]''
| "Yeh Raat Yeh Barsaat Yeh Tanhai Ka Aalam"
| rowspan=6| Ravi
| rowspan=6| Hasan Kamal
| rowspan=4| Mahendra Kapoor
|-
| "Raghupati Raghava Raja Ram"
|-
| "Raghupati Raghava Raja Ram" (Part- 2)
|-
| "Teri Aankhon Mein Dhundh Li Maine"
|-
| "Kaise Murli Bajayee Ghanshyam"
| rowspan=2| solo
|-
| "Mast Jawani Allah Hi Allah"
|-
! rowspan=4| ''Badla Aurat Ka''
| "Ae Bhola Bhala Mann"
| rowspan=4| C. Satyam
|rowspan=4| N/A
|rowspan=4| solo
|-
| "Duniya Jalne De"
|-
| "Vaada Chhota Sa Vaada"
|-
| "Mangal Gauri Ko Sajao Ri"
|-
! Rowspan=3| ''Bayen Hath Ka Khel''
| "Ek Bosa Ham Ne Manga"
| rowspan=3| Laxmikant–Pyarelal
| rowspan=3| Majrooh Sultanpuri
| rowspan=3| Kishore Kumar
|-
| "Ye Jhooth Bolti Hai"
|-
| "Kisi Ko Hasana Kisi Ko Rulana"
|-
! Rowspan=2| ''Dak Bangla''
| "Welcome Welcome"
| rowspan=2| Bappi Lahiri
| Amit Khanna
| Rowspan=2| solo
|-
| "I Love You Jaanam"
| Farooq Kaiser
|-
! Rowspan=3| ''[[Dacait]]''
| "Gaon Mein Mach Gaya Shor"
| rowspan=3| R D Burman
| rowspan=3| Anand Bakshi
| Kishore Kumar, Suresh Wadkar
|-
| "Maine Kaha, Tumne Suna, Yeh Hawa Kehti Hai Kya"
| rowspan=2| Suresh Wadkar
|-
| "Kis Kaaran Naiya Doli"
|-
!''[[Daku Hasina]]''
| "Nagar Nagar Hai Taza Khabar"
| Usha Khanna
| Mahendra Dalvi
| solo
|-
!''[[Dance Dance (film)|Dance Dance]]''
| "Aa Gaya Aa Gaya Halwa Wala Aa Gaya" (version 2)
| Bappi Lahiri
| Anjaan
| Vijay Benedict
|-
! Rowspan=2| ''[[Deewana Tere Naam Ka]]''
| "Ae Sharmana Chhod De"
| rowspan=2| Raam Laxman
| Anjaan
| Ashok Khare
|-
| "Aise Mara Thumka"
| Ravinder Rawal
| solo
|-
! Rowspan=2| ''[[Dil Tujhko Diya]]''
| "Zindagi Chand Dino Ki"
| rowspan=2| Rajesh Roshan
| rowspan=2| Rajesh Roshan
| Kishore Kumar
|-
| "Mast Sama, O Meri Jaan"
| solo
|-
! Rowspan=3| ''[[Diljalaa]]''
| "Pyaar Ki Jab Koi Baat Chali"
| rowspan=3| Bappi Lahiri
| rowspan=3| Indeevar
| Kishore Kumar
|-
| "Jaan Tan Se Tan Jaan Se"
| rowspan=2| solo
|-
| "Khushiyan Ho Teri Ham Dam"
|-
! Rowspan=2| ''Ek Ladki Badnaam Si''
| "Bam Bhole, Koi Mare Koi Jiye"
| rowspan=2| Bappi Lahiri
| rowspan=2| Kulwant Jani
| Ranu Mukherjee, Ajit Singh
|-
| "Zindagi Hai Hans Hans Ke Jeene Ke Liye"
| Kishore Kumar
|-
! Rowspan=4| ''Faqeer Badshah''
| "Bahut Kala Savera Hai"
| rowspan=4| Sonik–Omi
| Gauhar Kanpuri
| Chandrani Mukherjee
|-
| "Yu Na Dekh Mujhe"
| Gulshan Bawra
| rowspan=3| solo
|-
| "Beet Gaye Hai Kitne Zamane"
| Verma Malik
|-
| "Maine Rakh Di Nishane Pe Jaan"
| Kulwant Jani
|-
! Rowspan=2| ''[[Ghar Ka Sukh]]''
| "Ab Sun Le Meri Pukaar"
| rowspan=2| Ravi
| rowspan=2| Ravi
| Sujata
|-
| "Le Lo Le Lo Babuji"
| solo
|-
! Rowspan=3| ''Goraa''
| "Jhumka Jhula Le, Chahe Ghungta Utha Le"
| rowspan=3| Sonik–Omi
| rowspan=3| Verma Malik
| rowspan=2| solo
|-
| "Chhankegi Payal Toofan Mach Jaayega"
|-
| "In Aankho Ko Aashiq Sharab Kahe To"
| Mohammed Aziz, Mahendra Kapoor
|-
! Rowspan=3| ''[[Hawalaat]]''
| "Hay Re, Tera Bholapan"
| rowspan=3| Kalyanji–Anandji
| Rowspan=3| Gulshan Bawra
| solo
|-
| "Aage Phir Jo Landan Mein Ho"
| Kishore Kumar
|-
| "Tere Husn Ka Charcha Ab To Hone Laga Hai Gali Gali"
| Mohammed Aziz
|-
! Rowspan=5| ''[[Hifazat (1987 film)|Hifazat]]''
| "Duniya Ka Athwa Ajooba"
| rowspan=5| R D Burman
| rowspan=5| Anand Bakshi
| Kishore Kumar
|-
| "Bataata Vada"
| S. P. Balasubrahmanyam
|-
| "Dil Ka Darwajja Khol De"
| solo
|-
| "Mohabbat Hai Kya Cheej"
| Suresh Wadkar
|-
| "Dil Toh Chaahe Hamaara Jaise"
| Amit Kumar
|-
! rowspan=7| ''[[Himmat Aur Mehanat]]''
| "Chhuee Muee, Chhuee Muee Ho Gayi"
| rowspan=7| Bappi Lahiri
| rowspan=7| Indeevar
| Mohammed Aziz
|-
| "Touch Me, Touch Me, I Want To Feel Your Body"
| rowspan=2| Kishore Kumar
|-
| "Mumbai Roke To Roke, Dilli Roke To Roke"
|-
| "Woh Ek Dost Jo Mujhko"
| rowspan=4| solo
|-
| "Amma" (happy)
|-
| "Amma" (sad version 1)
|-
| "Amma" (sad version 2)
|-
! rowspan=3| ''[[Hiraasat]]''
| "Baaton Se Baat Na Banegi"
| rowspan=5| Kalyanji–Anandji
| rowspan=3| Vishweshwar Sharma
| Kishore Kumar
|-
| "Main Hoon Albeli"
| rowspan=2| solo
|-
| "Makhmali Badan"
|-
! Rowspan=2| ''[[Imaandaar]]''
| "Bada Shaitan Hai Dil" (female)
| rowspan=2| Prakash Mehra
| rowspan=2| solo
|-
| "Aur Is Dil Mein" (female)
|-
! Rowspan=2| ''[[Inaam Dus Hazaar]]''
| "Chand Koi Hoga Tumsa Kahan"
| rowspan=2| R D Burman
| rowspan=2| Majrooh Sultanpuri
| Kishore Kumar
|-
| "Jo Chham Se Nikal Gayi Raat"
| solo
|-
! Rowspan=3| ''[[Insaniyat Ke Dushman]]''
| "Aisa Ladka Mila Na"
| rowspan=3| Anu Malik
| rowspan=3| Indeevar
| Shabbir Kumar
|-
| "Om Sai Ram"
| rowspan=2| Suresh Wadkar
|-
| "O Meri Soniye, O Meri Heeriye"
|-
! Rowspan=3| ''[[Itihaas (1987 film)|Itihaas]]''
| "Dilruba O Dilruba"
| rowspan=3| R D Burman
| rowspan=3| Anand Bakshi
| Shabbir Kumar
|-
| "Mausam Awara"
| Suresh Wadkar
|-
| "Shabba Khair"
| solo
|-
!''[[Jaan Hatheli Pe]]''
| "Chhuo Na, Chhune Do, Chhodo Bhi"
| Laxmikant–Pyarelal
| Anjaan
| Kishore Kumar
|-
!''[[Kaash]]''
| "Chhoti Si Hai Baat, Koi Nahin Yeh Jane"
| Rajesh Roshan
| Farooq Kaiser
| Mohammed Aziz
|-
! Rowspan=2| ''[[Kalyug Aur Ramayan]]''
| "Kya Kya Na Sitam"
| rowspan=2| Kalyanji–Anandji
| Maya Govind
| Vishal Goswami
|-
| "Yahan Lukhta Yahan Mukhta"
| Verma Malik
| Mahendra Kapoor
|-
! Rowspan=2| ''[[Kamagni]]''
| "Aa Gaya Sapna Koi"
| rowspan=2| Ilaiyaraaja
| rowspan=2| Indeevar
| Suresh Wadkar
|-
| "Mai Hasin Tu Jawan"
| solo
|-
! Rowspan=2| ''[[Khazana (1987 film)|Khazana]]''
| "Mehfil Mein Sayanon Ki Ek Deewana Aa Gaya"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Anand Bakshi
| Mohammed Rafi, Usha Mangeshkar
|-
| "Khazane Ki Chabi Mere Paas Hai"
| solo
|-
!''[[Khooni Darinda]]''
| "Aayega Koi Mere Paas"
| Ratandeep–Hemraj
| Agha Sarwar
| solo
|-
!''Maashuka''
| "Ghungroo Bole Chham Chham"
| R. K. Arun
| Shardanand Tiwari
| Suresh Wadkar
|-
! rowspan=3| ''[[Madadgaar]]''
| "Ek Do Teen Chaar, Humse Karo Pyar"
| rowspan=3| Laxmikant–Pyarelal
| rowspan=3| Anand Bakshi
| Kishore Kumar
|-
| "Kaun Si Jaane Film Thi"
| rowspan=3| solo
|-
| "Ikraar Kar De Ya Inkaar Kar De"
|-
!''[[Mahananda (1987 film)|Mahananda]]''
| "Sapne Mein Chupke Se"
| Manas Mukherjee
| Kapil Kumar
|-
! Rowspan=5| ''[[Majaal]]''
| "Hay Rama, Hay Rama"
| rowspan=5| Bappi Lahiri
| rowspan=5| Indeevar
| rowspan=4| Kishore Kumar
|-
| "Sharabon Se Kya Mujhko Kaam"
|-
| "Ting Ting Ghanti Baje, Dil Mein Ghanti Baje"
|-
| "Tum Into Main, Main Into Tum"
|-
| "Itni Kisi Ki Majaal Kahan"
| Mohammed Aziz
|-
!''[[Marte Dam Tak]]''
| "Nautak Nautak"
| colspan=2| Ravindra Jain
|-
!''[[Mera Karam Mera Dharam]]''
| "Mor Papiha Koyal"
| Laxmikant–Pyarelal
| Anand Bakshi
| solo
|-
! Rowspan=2| ''[[Mera Yaar Mera Dushman]]''
| "Kabhi Khulke Mile, Kabhi Milke Khule"
| rowspan=2| Bappi Lahiri
| rowspan=2| Gulshan Bawra
| Kishore Kumar
|-
| "Hansee Loot Gayi"
| solo
|-
! Rowspan=5| ''Meraa Suhaag''
| "Kismat Walon Ko Milta Hai"
| rowspan=5| Ravi
| rowspan=5| Ravi
| rowspan=3| solo
|-
| "Kismat Walo Ko Milta Hai" (part 2)
|-
| "Parody Song"
|-
| "Mera Dil Tera"
| Kishore Kumar
|-
| "Jaa Tu Bada Anari"
| Pankaj Dheer
|-
! Rowspan=3| ''[[Muqaddar Ka Faisla]]''
| "Teen Lok Ke Nath Kanhaiya Ji Ne Janam Liyo Re"
| rowspan=3| Bappi Lahiri
| rowspan=3| Anjaan
| Kishore Kumar
|-
| "Hum Na Hum Rahe"
| rowspan=2| solo
|-
| "Hay, Yeh Paisa"
|-
! Rowspan=3| ''[[Naam O Nishan]]''
| "Naam O Nishan"
| rowspan=3| Anu Malik
| rowspan=3| Indeevar
| rowspan=3| solo
|-
| "Peena Hai Agar"
|-
| "Sona Main Sona"
|-
! Rowspan=2| ''Nafrat''
| "Aaja Mere Yaar"
| rowspan=2| Surinder Kohli
| rowspan=2| Asad Bhopali
| rowspan=2| solo
|-
| "Aaj Ka Din Toh Sanam"
|-
! Rowspan=4| ''[[Param Dharam]]''
| "Main Loot Jaaun, Main Mit Jaaun"
| rowspan=4| Bappi Lahiri
| rowspan=4| Anjaan
| rowspan=2| Bappi Lahiri
|-
| "Pyar Pyar Pyar, Pyar To Hai Pyar"
|-
| "Jab Se Tujhe Piya Honthon Se Chhoo Liya"
| rowspan=2| Mohammed Aziz
|-
| "Allah, Jab Se Hui Main Jawaan"
|-
! Rowspan=2| ''[[Pyaar Karke Dekho]]''
| "Hakki Petai Lakamma, Hakki Petai Lakamma"
| Rowspan=2| Bappi Lahiri
| Rowspan=2| Indeevar
| S. P. Balasubrahmanyam
|-
| "Tumhare Bin Hum Adhure, Hamare Bin Tum Adhure"
| Vijay Benedict
|-
!''Pyar Ajnabi Hai''
| "Tumse Saje Hain Mere Sapne Sunehre"
| colspan=2| Kishore Kumar
| solo
|-
! rowspan=2| ''Pyar Ke Kabil''
| "Aaj Ki Raat Dono Saath"
| rowspan=2| Bappi Lahiri
| rowspan=2| Indeevar
| rowspan=2| solo
|-
| "Baby Baby Baby, Meri Pyaari Baby"
|-
! Rowspan=6| ''[[Pyar Ki Jeet (1987 film)|Pyar Ki Jeet]]''
| "Mujhe Rehna Hai Tere Dil Mein"
| rowspan=6| Usha Khanna
| rowspan=6| Sawan Kumar Tak
| Kishore Kumar
|-
| "Meri Ek Ada Lakh Lakh Di"
| rowspan=5| solo
|-
| "Ae Dost Tu Be-imaan Hai"
|-
| "Aaj Mere Pyar Ki Jeet"
|-
| "Mainu Rab Di Saun"
|-
| "Dulhe Raja Dekh"
|-
!''Raahi''
| "Maa Ne Keh Di Haan"
| Jagjit Singh
| Naqsh Lyallpuri
| Suresh Wadkar
|-
! Rowspan=4| ''Secret Agent''
| "Humne Dekha Yehi"
|Rowspan=4| Bappi Lahiri
|Rowspan=4| Farooq Kaiser
|Rowspan=| solo
|-
| "Hoke Kabhi Kabhi"
| Bappi Lahiri
|-
| "Maikal Ki Kimsat"
| Mohammed Rafi
|-
| "Mukh Pe Naqab Dala Hai"
|-
! Rowspan=3| ''Sher Shivaji''
| "O Dukhiyan Ke Daata Bholenath Bhagwan"
|Rowspan=3| Pandurang Dixit
| Rowspan=2| Dev Kishan
| rowspan=3| solo
|-
| "Darr Bhi Chhoda Tujhe Mann Mein Basa Ke"
|-
| "Deepawali Manayi Suhaani Mere Sai Ke Haathon Mein"
| Pandurang Dixit
|-
! Rowspan=3| ''[[Sitapur Ki Geeta]]''
| "Lachak Lachak Jaye Jawani"
| rowspan=3| Sonik–Omi
| rowspan=3| Verma Malik
| Amit Kumar
|-
| "Yaad Kar Yaad Kar"
| rowspan=2| solo
|-
| "Phaink More Raja Rupaiya"
|-
! Rowspan=2| ''[[Thikana (film)|Thikana]]''
| "Ajnabee Koi Kabhi"
| rowspan=2| Kalyanji–Anandji
| rowspan=2| Anjaan
| rowspan=2| solo
|-
| "Bachana Dil Bachana"
|-
!''Vishal''
| "Seene Mein Dil Mera Dhak Dhak"
| Usha Khanna
| Nida Fazli
| Kishore Kumar
|-
! Rowspan=4| ''Woh Din Aayega''
| "Yeh Jo Hua Sach Kaho Kya Hua"
| Rowspan=4| Aalok Ganguly
| Rowspan=4| Majrooh Sultanpuri
| Kishore Kumar
|-
| "Haye Re Nazar Lad Gayi"
| rowspan=3| solo
|-
| "Ram Kasam Babu"
|-
| "Yeh Hai Mere Pyaar Ki Nishani"
|-
|}
=== 1988 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! Rowspan=2| ''[[Aakhri Muqabla]]''
| "Paayal Pagli Pyaar Jagaaye"
| rowspan=2| Usha Khanna
| rowspan=2| Gauhar Kanpuri, Indeevar, Jagmohan Singh
| rowspan=2| solo
|-
| "Jaaneman Tune Paani Mein Kya Jaadu Daala"
|-
! Rowspan=2| ''[[Bahaar]]''
| "Baahon Mein Aasmaan Le Chala"
| rowspan=2| Manoj–Gyan
| rowspan=2| Naqsh Lyallpuri
| rowspan=2| solo
|-
| "Main Paani Mein Bheege Aise"
|-
! ''Be-Lagaam''
| "Phool Ki Dali Kehke Na Modo"
|rowspan=6| R D Burman
| Majrooh Sultanpuri
| Suresh Wadkar
|-
! rowspan=5| ''Chatran''
| "Dhoop Chhaon Mein Bani Aisi Zindagi"
| rowspan=5| Gulzar
| rowspan=4| solo
|-
| "Na Toh Dariya Ruka"
|-
| "Pyaar Hi Pyaar Hai"
|-
| "Zindagi Zindagi Khubsoorat Hai Tu" (version 1)
|-
| "Zindagi Zindagi Khubsoorat Hai Tu" (version 2)
| Gulzar
|-
!''Chintamani Surdas''
| "Ghungroo Chhod Diye Maine"
| colspan=2| Ravindra Jain
| solo
|-
!''[[Commando (1988 film)|Commando]]''
| "Ga Ga Re Ga, Gadi Chale"
| Bappi Lahiri
|rowspan=4| Anjaan
| Kishore Kumar
|-
! Rowspan=3| ''[[Dharam Shatru]]''
| "Barson Se Pyaar Ka Deewana Mera Dil"
| rowspan=3| Hemant Bhosle
| rowspan=2| solo
|-
| "De Doongi Jaan Tujhe"
|-
| "Woh Dilruba Door Se Aayi Hai"
| Amit Kumar
|-
! Rowspan=2| ''[[Dharmyudh]]''
| "Sawan Ka Mahina"
| rowspan=2| Rajesh Roshan
| rowspan=2| Kulwant Jani
| rowspan=2| solo
|-
| "Chhoti Si Zindagi Ke Liye"
|-
! rowspan=3| ''Do Waqt Ki Roti''
| "Aaj Ki Raat Meri Gali Mein"
|rowspan=3| Laxmikant–Pyarelal
|rowspan=3| Anand Bakshi
| Chandrani Mukherjee
|-
| "Kisi Pe Dil Ke Aane Se"
| rowspan=2| solo
|-
| "Main Aayi Main Aayi"
|-
! Rowspan=2| ''Dukh Dard''
| "Yugon Se Yehi Hota Hai"
| rowspan=2| Alok Ganguly
| rowspan=2| Gauhar Kanpuri
| Rowspan=2| solo
|-
| "Meri Aankh Jab Khuli"
|-
! Rowspan=2| ''Ek Hi Maqsad''
| "Mere Mehboob Hai Aur"
|rowspan=2| Pankaj Udhas
|rowspan=2| Mumtaz Rashid
| solo
|-
| "Ghungroo Toot Gaye"
| Pankaj Udhas
|-
!''[[Ek Naya Rishta]]''
| "Mera Mehboob"
| Khayyam
| Nida Fazli
| solo
|-
! Rowspan=4| ''[[Faisla]]''
| "Champa Khili Daar"
| rowspan=4| R D Burman
| rowspan=4| Majrooh Sultanpuri
| rowspan=1| [[Mohammed Rafi]]
|-
| "Dulha Raja Mera"
| Kishore Kumar
|-
| "Andheri Hai Raat Sajan"
| rowspan=2| solo
|-
| "Koi Toh Aaye Re, Bada Intezaar Hai"
|-
!rowspan=2| ''Falak''
| "Tere Naam Ka Hai Hai" (version 1)
| rowspan=2| Kalyanji–Anandji
| rowspan=2| Anjaan
| rowspan=2| Mohammed Aziz
|-
| "Tere Naam Ka Hai Hai" (version 2)
|-
! Rowspan=2| ''[[Ghar Ghar Ki Kahani (1988 film)|Ghar Ghar Ki Kahani]]''
| "Noorjahan Tu Kahan"
| rowspan=2| Bappi Lahiri
| Indeevar
| Bappi Lahiri
|-
| "Kisi Se Jab Pyaar Hua"
| Majrooh Sultanpuri
| solo
|-
! ''Gharwali Baharwali''
| "Sharab Ya Shabab"
| Swami Ameet
| Wahid Mohsin
| solo
|-
! Rowspan=3| ''[[Gunahon Ka Faisla]]''
| "Jawani Mein Jawani Ka Maza Lena"
| rowspan=6| Bappi Lahiri
| rowspan=5| Anjaan
| rowspan=3| solo
|-
| "Bandh Kamre Mein Hoga Faisla"
|-
| "Chal Hat Baaju Raja"
|-
! Rowspan=2| ''[[Halaal Ki Kamaai]]''
| "Chhote Jahaan Ab Tera Damaan"
| solo
|-
| "Ankhon Mein Tu Hi Tu"
| Shabbir Kumar
|-
!''Hatya''
| "Aapko Agar Zarurat Hai"
| Indeevar
| Kishore Kumar
|-
! rowspan=2| ''[[Hum Farishte Nahin]]''
| "Abhi Abhi Mera Dil Mere Paas Tha"
| rowspan=2| Manoj–Gyan
| Shail Chaturvedi
| rowspan=2| solo
|-
| "Sanwala Badan Aisi"
| Manoj Bhatnagar
|-
!''Hum To Chale Pardes''
| "Mil Gaye Hum Aur Tum"
| Vijay Singh
| Ravindra Peepat
| Shabbir Kumar
|-
! Rowspan=4| ''[[Ijaazat]]''
| "[[Mera Kuchh Saamaan]]"
| rowspan=5| R D Burman
| rowspan=4| Gulzar
| rowspan=4| solo
|-
| "Khali Haath Shaam Aayi Hai"
|-
| "Chhoti Si Kahani Se"
|-
| "Katra Katra Milti Hai"
|-
!''Jaan-e-Jaana''
| "Tu Na Mila Toh"
| Indeevar
| solo
|-
!''Kabrastan''
| "Do Din Ka Hai Khel Jawaani"
| Uttam–Jagdish
| Nida Fazli
| solo
|-
!''[[Kabzaa]]''
| "Heere Motiyon Se Pehle Mujhe Tol Sajna"
| Rajesh Roshan
| Anand Bakshi
| solo
|-
! Rowspan=2| ''[[Kanwarlal]]''
| "Kanwarlal Kanwarlal"
| rowspan=7| Bappi Lahiri
| rowspan=4| Indeevar
| Amit Kumar
|-
| "Jahan Mile, Jidhar Mile"
| solo
|-
! Rowspan=5| ''[[Kasam (1988 film)|Kasam]]''
| "Kasam Kya Hoti Hai" (female)
| solo
|-
| "Kasam Kya Hoti Hai" (version 1)
| rowspan=2| Nitin Mukesh
|-
| "Kasam Kya Hoti Hai" (version 2)
| rowspan=3| Anjaan
|-
| "Oh Kanha"
| Mohammed Aziz
|-
| "Garam Garam Pani"
| rowspan=2| solo
|-
! Rowspan=2| ''[[Kehkasha]]''
| "Koi Humnafas Nhain Hai"
| Madhu Mukherjee
| Traditional
|-
| "Aja Jaane Ki Zid Na Karo"
| Madhu Mukherjee, Sohail Rana
| Fayyaz Hashmi
| Bhupinder Singh
|-
! Rowspan=2| ''[[Khoon Bhari Maang]]''
| "Jeene Ke Bahaane Lakhon Hain"
| rowspan=2| Rajesh Roshan
| rowspan=2| Indeevar
| solo
|-
| "Main Haseena Ghazab Ki"
| Sadhana Sargam
|-
!''[[Libaas]]''
| "Kal Ki Raat Giri Thi Shabnam"
| R D Burman
| Gulzar
| solo
|-
! Rowspan=2| ''[[Mahaveera]]''
| "Kachiyan Kaliyan Na Tod Ve"
| rowspan=2| Kalyanji–Anandji
| rowspan=2| Anand Bakshi
| rowspan=2| solo
|-
| "Is Bairan Taqdeer Ko"
|-
! Rowspan=3| ''[[Mardangi]]''
| "Gharwali Bana Le Mujhe"
| rowspan=3| Bappi Lahiri
| rowspan=3| Indeevar
| Mohammed Aziz
|-
| "Hamare Husn Ka Jadoo"
| Shabbir Kumar
|-
| "Chahe Dushman Bane Zamana"
| solo
|-
!''[[Mardon Mein Mard]]''
| "Nako Nako Bole"
| Amar–Utpal
| Anjaan
| solo
|-
! Rowspan=4| ''[[Mardon Wali Baat]]''
| "Aaja Tujhe Main Bahon Mein Kas Loon"
| rowspan=4| R D Burman
| rowspan=4| Indeevar
| rowspan=2| S. P. Balasubrahmanyam
|-
| "O Saajan Beet Na Jaaye Saawan"
|-
| "Mardon Wali Baat Kare"
| solo
|-
| "Nasha Husn Ka Utar Jaayega"
| Suresh Wadkar
|-
! Rowspan=3| ''[[Mera Shikaar]]''
| "Chalo Prem Daas"
| rowspan=3| Bappi Lahiri
| rowspan=3| Indeevar
| Rowspan=3| solo
|-
| "Thoda Sa Pyaar"
|-
| "Humko Yaad Na Karna"
|-
! ''[[Mere Baad]]''
| "Kaise Bhulaoon Re Amma"
| Usha Khanna
| Maya Govind
| solo
|-
! Rowspan=4| ''[[Mohabbat Ke Dushman]]''
| "Dil Khoya Khoya Gumsum"
| rowspan=4| Kalyanji–Anandji
| rowspan=4| Prakash Mehra, Anjaan
| rowspan=4| solo
|-
| "Tumne Kaha Hum Bin"
|-
| "Bahut Kaat Chuka Hai Safar"
|-
| "Mohabbat Ibadaat Hai"
|-
! Rowspan=3| ''[[Mulzim (1988 film)|Mulzim]]''
| "Pyaar Ka Badla"
| rowspan=3| Bappi Lahiri
| rowspan=3| Indeevar
| Mohammed Aziz
|-
| "Chal Gori Pyaar Ke Gaaon"
| Nitin Mukesh
|-
| "Sau Saal Tu Jeeti Rahe"
| Mohammed Aziz, Rema Lahiri
|-
! Rowspan=2| ''Nagin Aur Nagina''
| "Main Hoon Teri Nagin"
| Rowspan=2| Jeetu–Tapan
| R. K. Pashaan
| Shabbir Kumar
|-
| "Nagin Hoon Main"
| B. D. Mishra
| solo
|-
!''Naam Hai Krishna''
| "Na Hota Main Awara"
| R D Burman
| M G Hashmat
| Amit Kumar
|-
!''[[Paanch Fauladi]]''
| "Lach Lach Lachke Kamariya"
| Uttam–Jagdish
| Nida Fazli
| solo
|-
! Rowspan=2| ''[[Paap Ki Duniya]]''
| "Ganga Ko Dekha, Jamuna Ko Dekha"
| rowspan=2| Bappi Lahiri
| rowspan=2| Anjaan
| Shabbir Kumar, Rema Lahiri
|-
| "Zindagi Pyaar Hai"
| Shabbir Kumar, Shailendra Singh
|-
! Rowspan=4| ''[[Parbat Ke Us Paar]]''
| "Aaja Ke Meri Jaan Ko Karaar Nahin Hai"
| rowspan=4| Khayyam
| rowspan=3| Naqsh Lyallpuri
| rowspan=4| [[Mohammed Aziz]]
|-
| "Aaja Ranjhan Yaara Aaja" (Happy)
|-
| "Aaja Ranjhan Yaara Aaja" (Sad)
|-
| "Ishqe Di Dor Na Toote"
| Nida Fazli
|-
!''Police Ke Peechhe Police''
| "Rabba Ve Mainu"
| R D Burman
| Anand Bakshi
| solo
|-
!''Prem Sandesh''
| "Dil Se Jo Dil Mile"
| Basu Chakraborty
| Nida Fazli
|Mohammed Aziz
|-
!rowspan=2| ''Pyar Ki Manzil''
| "Mujhko Daga Denewale"
|rowspan=2| Usha Khanna
|rowspan=2| Sajan Dehlvi
| solo
|-
| "Yeh Awaaz Kaisi Aayi"
| Suresh Wadkar
|-
!''Rama O Rama''
| "Tauba Aashiq Aur Aisa"
| R D Burman
| Anand Bakshi
| Mohammed Aziz
|-
!''[[Rihaee (film)|Rihaee]]''
| "Teru Meri Bairan Raat Ladi"
| Shaarang Dev
| Babu Ranpura, Suraj Sanim
| solo
|-
! Rowspan=2| ''[[Saazish (1988 film)|Saazish]]''
| "Yeh Jawani Badi Jawani"
| rowspan=2| Kalyanji–Anandji
| rowspan=2| Anand Bakshi
| Amit Kumar
|-
| "Yeh Shehar Yeh Shehar"
| Kishore Kumar
|-
! Rowspan=2| ''[[Sagar Sangam]]''
| "Humri Mano To"
| rowspan=2| Bappi Lahiri
| rowspan=2| Anjaan
| solo
|-
| "Gaon Ki Chhori"
| [[Bappi Lahiri]]
|-
!''[[Shahenshah (1988 film)|Shahenshah]]''
| "Hey You"
| Amar–Utpal
| Anand Bakshi
| solo
|-
! Rowspan=2| ''[[Sherni (1988 film)|Sherni]]''
| "Mushkil Hai Mushkil"
|rowspan=2| Kalyanji–Anandji
| Nida Fazli
| solo
|-
| "Koi Mard Mila Na Aisa"
| Anjaan
| Mohammed Aziz
|-
! Rowspan=2| ''Shree Datta Darshan''
| "Vandan Hai Vandan Hai"
|rowspan=2| K. V. Mahadevan
|rowspan=2| Madhukar
|rowspan=2| solo
|-
| "Laay Hoon Kanchan Se"
|-
! Rowspan=4| ''[[Sone Pe Suhaaga]]''
| "Dil Afridam"
| rowspan=4| Bappi Lahiri
| rowspan=4| Indeevar
| rowspan=2| Kishore Kumar
|-
| "Seene Se Laga Loon Tujhe"
|-
| "Meena Ki Shaadi Aa Gayi"
| solo
|-
| "Tune Mujhe Taaka"
| Nitin Mukesh
|-
!''[[Soorma Bhopali]]''
| "Baadal Sataye"
| Dilip Sen–Sameer Sen
| Asad Bhopali
| solo
|-
! Rowspan=4| ''[[Tadap Aisi Bho Hoti Hai]]''
| "Yaaro Zara Thaam Ke Bajaao"
| rowspan=4| R D Burman
| rowspan=2| M G Hashmat
| rowspan=2| Shailendra Singh
|-
| "Bhool Jaa Duniya Ko"
|-
| "Ishq Mein Jab Hum Qatl Huye Toh"
| rowspan=2| Vishweshwar Sharma
| solo
|-
| "Tadap Jeene Nahin Deti"
| Amit Kumar, Sadhana Sargam
|-
! Rowspan=2| ''[[Tamacha]]''
| "Sara Din Bas Duty Duty"
| rowspan=2| Bappi Lahiri
| rowspan=2| Anand Bakshi
| solo
|-
| "Dilbar Dilbar, O Dilbar Jani, Kehti Hai Rut Yeh Suhani"
| [[Mohammed Aziz]], [[Shailendra Singh (singer)|Shailendra Singh]]
|-
!''Tawaaif Ki Beti''
| "Pyar Diwana Ho Gaya"
| Ghulam Ali Chander
| Naqsh Lyallpuri
| Anwar
|-
! Rowspan=3| ''[[Tohfa Mohabbat Ka]]''
| "Tujhe Bhoolne Ki Koshish"
|rowspan=3| Anup Jalota
|rowspan=3| Maya Govind
| solo
|-
| "Sun Sun Aye Sunita"
|rowspan=2| Anup Jalota
|-
| "Sun Sun Ho Gori"
|-
!''[[Trishagni]]''
| "Aisa Laage Kahin Door Se"
| Salil Chowdhury
| Yogesh
| solo
|-
! Rowspan=2| ''[[Vijay (1988 film)|Vijay]]''
| "Tera Karam Hi Tera Vijay Hai"
| rowspan=2| Shiv–Hari
| rowspan=2| Nida Fazli
| rowspan=2| solo
|-
| "Rakhna Athanni Sambhal Ke"
|-
! ''[[Waaris (1988 film)|Waaris]]''
| "Aare Munhe, Taare Munhe"
| Uttam–Jagdish
| Verma Malik
| solo
|-
!rowspan=4| ''[[Waqt Ki Awaz]]''
| "I Want To Hit Somebody"
| rowspan=4| Bappi Lahiri
| rowspan=4| Indeevar
| rowspan=3| Kishore Kumar
|-
| "Ladki Akeli Tu Bhi Akela"
|-
| "Guru Guru Jao Guru"
|-
| "Tu Bhi Bekaraar, Main Bhi Bekaraar"
| Mohammed Aziz
|-
! ''Woh Mili Thi''
| "Hamein Kya Garaz"
| Laxmikant-Pyarelal
| Majrooh Sultanpuri
| Kishore Kumar
|-
! Rowspan=2| ''[[Zakhmi Aurat]]''
| "Tauba Tauba, Allah Tauba"
| rowspan=2| Bappi Lahiri
| rowspan=2| Farooq Kaiser
| rowspan=2| solo
|-
| "Pal Pal Jale Meri Aatma"
|-
!''[[Zalzala (1988 film)|Zalzala]]''
| "Dil Hai Kab Kis Pe"
| R D Burman
| Gulshan Bawra
| solo
|-
! Rowspan=2| ''[[Zulm Ko Jala Doonga]]''
| "Dhak Dhak Dhak Dil Karne Laga"
| rowspan=2| Nadeem–Shravan
| rowspan=2| Madan Pal, Anwar Sagar, Rani Malik
| rowspan=2| [[Mohammed Aziz]]
|-
| "Din Shuru Hota Hai Tere Naam Se"
|-
|}
=== 1989 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
!''[[Aag Ka Gola]]''
| "Aa Aa, Aa Bhi Jao Na, Na Na, Yun Satao Na"
| Bappi Lahiri
| Anjaan
| rowspan=2| Mohammed Aziz
|-
! Rowspan=5| ''[[Aag Se Khelenge]]''
| "Meri Patli Kamar"
| rowspan=5| R D Burman
| rowspan=5| Anand Bakshi
|-
| "Help Me"
| rowspan=3| [[Amit Kumar (singer)|Amit Kumar]]
|-
| "Tere Naina"
|-
| "Mere Sajan"
|-
| "Chhede Been Sapera, Nache Nagan Kali"
| Amit Kumar, Kavita Krishnamurthy, Udit Narayan
|-
! Rowspan=| ''[[Aakhri Badla]]''
| "Jaane Kaisa Jaadoo Yeh Chal Gaya"
| Salil Chowdhury
| Yogesh
| solo
|-
! Rowspan=2| ''[[Aakhri Ghulam]]''
| "Pyar Mila To Jaana Yeh Dil Ne"
| rowspan=4| Bappi Lahiri
| rowspan=4| Anjaan
| rowspan=2| Shabbir Kumar
|-
| "Saathiya O Saathiya" (Part-1)
|-
! Rowspan=2| ''[[Albela (1989 film)|Albela]]''
| "Badi Mushkil Se"
| solo
|-
| "Music Is My Life"
| Amit Kumar
|-
!''Anaar''
| "Main Toh Balam Tore"
| Anil Singh
| K K Shahi
| solo
|-
! Rowspan=2| ''[[Apne Begaane]]''
| "Dushman Ho Gayi Meri Jawani"
| rowspan=2| Prem Gupta
| rowspan=2| Rajesh Johri
| Suresh Wadkar
|-
| "Jabse Piya Laage Tose More Nainwa"
| solo
|-
! Rowspan=4| ''[[Bahurani (1989 film)|Bahurani]]''
| "Woh Kya The"
| rowspan=4| R D Burman
| rowspan=4| Anjaan
| solo
|-
| "Ek Haseena Jab Se Mili, Dil Hai Bekaraar"
| Amit Kumar
|-
| "Duniya Ki Nazaron Se Chhupke Mile"
| Shailendra Singh]]
|-
| "Chhora Chhori Se Bhi Gora"
| Dilraj Kaur
|-
!''[[Chandni (1989 film)|Chandni]]''
| "Parbat Se Kai Ghata Thakraee"
| Shiv–Hari
| Anand Bakshi
| Vinod Rathod
|-
!''[[Daata]]''
| "Meri Jaan Pyar Karo, Pyar Hi Pyar Karo Pyare"
| Kalyanji–Anandji
| Asad Bhopali
| solo
|-
! Rowspan=4| ''[[Desh Ke Dushman]]''
| "Jo Mujhe Dekhe"
| rowspan=4| Sonik–Omi
| rowspan=4| Verma Malik
| rowspan=2| Mohammed Aziz
|-
| "Main Hoon Nagina"
|-
| "Jo Zulm Kiye Tune Unka Badla"
| rowspan=2| solo
|-
| "Shikari Brahamchari"
|-
!''[[Doorie (film)|Doorie]]''
| "Yeh Mausam Yunhi Aata Jaata Rahe"
| Kuldeep Singh
| Ibrahim Rangla
| Suresh Wadkar
|-
! Rowspan=4| ''[[Dost (1989 film)|Dost]]''
| "Tu Hi Heera"
| rowspan=4| R D Burman
| rowspan=4| Indeevar
| rowspan=4| Amit Kumar
|-
| "Step By Step"
|-
| "Dil To Chahe Yeh"
|-
| "Chhota Sa Parivar"
|-
! Rowspan=2| ''[[Farz Ki Jung]]''
| "Aap Se Mile"
| rowspan=2| Anjaan
| Rowspan=2| solo
|-
| "Abhi Abhi"
|-
!''[[Galiyon Ka Badshah]]''
| "Kya Yeh Mumkin Hai"
| Kalyanji–Anandji
| Indeevar
| Kishore Kumar
|-
! Rowspan=3| ''[[Gair Kanooni]]''
| "Sare Shahar Mein Ek Ladka"
| Rowspan=3| Bappi Lahiri
| rowspan=3| Indeevar
| Kishore Kumar
|-
| "Jai Laxmi, Jai Laxmi, Jai Jai Bolo"
| rowspan=2| Bappi Lahiri
|-
| "Nakko Baba, Nakko Baba, Pyar Ka Yeh Rog"
|-
!''Ghabrahat''
| "Yaari Aasan Tere Naal"
| Ravindra Jain
| Ravindra Jain
| solo
|-
!''[[Ghar Ka Chiraag]]''
| "Tutak Tutak Tutiyan" (female)
|rowspan=3| Bappi Lahiri
| Sikandar Bharti
| solo
|-
!''[[Gola Barood]]''
| "Dard-E-Dil Ka Mere"
| rowspan=2| Anjaan
| solo
|-
!''[[Guru (1989 film)|Guru]]''
| "Aai Aai Yo"
| solo
|-
! Rowspan=2| ''[[Hisaab Khoon Ka]]''
| "Hey You, Do You Love Me"
| Rowspan=2| Nadeem–Shravan
| Hasrat Jaipuri
| solo
|-
| "Shokh Baharon Ka Mausam"
| Anwar Sagar
| Mohammed Aziz
|-
!''[[Hum Intezaar Karenge]]''
| "Door Hai Toh Kya"
| Bappi Lahiri
| Anjaan, Indeevar
| solo
|-
! Rowspan=4| ''[[Ilaaka]]''
| "Khali Botal Ki Tarah Har Aadmi Hai Khali"
| Rowspan=4| Nadeem–Shravan
| Anwar Sagar
| rowspan=2| Kishore Kumar
|-
| "Deva O Deva, Gali Gali Mein Tere Naam Ka Hai Shor"
| rowspan=2| Anjaan
|-
| "Aayi Hai Aaj To Holi Khelenge Hum, Dubke Rang Mein"
| Amit Kumar
|-
| "Pyar Se Bhi Zyada Tujhe Pyar Karta Hoon"
| Sameer
| Mohammed Aziz
|-
! Rowspan=4| ''[[Joshilaay]]''
| "Dhar Dham Chak Lag Gayi"
| rowspan=4| R D Burman
| rowspan=4| Javed Akhtar
| solo
|-
| "Na Ja Jaan-E-Jaan"
| R. D. Burman
|-
| "O Dhola Dhol Manjira Baje Re"
| Suresh Wadkar
|-
| "Dhak Dhak Jiya Kare, Jane Kya Piya Kare"
| Usha Mangeshkar
|-
!''[[Jung Baaz]]''
| "Rain Andheri, Akeli Jawani"
| colspan=2| Ravindra Jain
| Mohammed Aziz
|-
! Rowspan=2| ''[[Jurrat (film)|Jurrat]]''
| "Main Neend Chura Loongi"
| rowspan=2| R D Burman
| rowspan=2| Anand Bakshi
| rowspan=2| solo
|-
| "O Saiyaad, Rakh Yaad"
|-
! Rowspan=2| ''[[Kahan Hai Kanoon]]''
| "Do Jism Ek Jaan Hain Hum"
| rowspan=2| Bappi Lahiri
| rowspan=2| Shaily Shailendra
| solo
|-
| "Do Jism Ek Jaan Hain Hum" (Duet)
| Bappi Lahiri
|-
!''[[Kala Bazaar]]''
| "Kehdo Yeh Haseenon Se"
| Rajesh Roshan
| Payam Sayeedi
| Anwar, Kumar Sanu, Sadhana Sargam
|-
! Rowspan=3| ''[[Kanoon Apna Apna]]''
| "Pehli Nazar Mein"
|rowspan=3| Bappi Lahiri
| rowspan=3| Indeevar
| S. P. Balasubrahmanyam
|-
| "Gayi Gayi"
| Mohammed Aziz
|-
| "Chini Mini"
| Amit Kumar
|-
!''[[Kanoon Ki Awaaz]]''
| "Aankhon Hi Aankhon Mein"
| Jagjit Singh
| Nida Fazli
| solo
|-
! Rowspan=3| ''[[Kasam Vardi Ki]]''
| "Aayi Main Aayi, Dil Lene Aayi"
| rowspan=4| Bappi Lahiri
|rowspan=4| Anjaan
| solo
|-
| "Dil Kahin Kho Gaya, Main Kahin Kho Gayi"
| Mohammed Aziz
|-
| "Pyar Mein Kya Ghabrana"
| Amit Kumar
|-
! ''[[Love Love Love (1989 film)|Love Love Love]]''
| "Hum To Hain"
| Vijay Benedict
|-
! Rowspan=3| ''[[Mahaadev]]''
| "Fikar Na Kar"
| rowspan=3| Ilaiyaraaja
| rowspan=3| Farooq Kaiser
| rowspan=2| solo
|-
| "Dilwale Raat Hai"
|-
| "Rimjhim Rimjhim"
| Suresh Wadkar
|-
! Rowspan=2| ''Manu The Great''
| "Re Baba Re Baba Kaisi Yeh Jawanu"
| rowspan=2| Ravi
| rowspan=2| Ravi
| rowspan=2| solo
|-
| "Jo Tere Kaam Na Aayi"
|-
! Rowspan=2| ''[[Mera Farz]]''
| "Chandni Mein Lipti Hui"
| rowspan=2| Ilaiyaraaja
| rowspan=2| Indeevar
| rowspan=2| Amit Kumar
|-
| "Yeh Gulaabi Shaam Ka Nasha"
|-
! Rowspan=4| ''Mera Naseeb''
| "Main Hoon Angoothi, Tu Hai Nageena"
| rowspan=4| Iqbal Qureshi
| rowspan=2| Zafar Rahi
| Mohammed Aziz
|-
| "Kya Soch Rahe Ho Jaani"
| rowspan=2| solo
|-
| "Jo Hoga So Hoga"
| Qaisar Ul Jafri
|-
| "Darwaza Bandh Thi, Khidki Khuli Thi"
| Gauhar Kanpuri
| Dilraj Kaur
|-
! Rowspan=2| ''[[Meri Zabaan]]''
| "Honthon Pe Naam"
| rowspan=2| Anu Malik
| rowspan=2| Anjaan
| solo
|-
| "Dam Maara"
| Anu Malik
|-
! Rowspan=5| ''[[Mil Gayee Manzil Mujhe]]''
| "Jaanam Kahin Na Jaaya Karo"
| rowspan=5| R D Burman
| Majrooh Sultanpuri
| rowspan=2| solo
|-
| "Jaa Main Yihse Rooth Gayi"
| rowspan=4| Anand Bakshi
|-
| "Yeh Zindagi Ka Fasana Hai Kya"
| rowspan=2| Kishore Kumar
|-
| "Tum Jo Mile Toh Phool Khile"
|-
| "Ek Taraf Tum, Ek Taraf Hum"
| Kishore Kumar, Shailendra Singh
|-
! Rowspan=3| ''[[Mitti Aur Sona]]''
| "One Two Three"
| rowspan=4| Bappi Lahiri
| rowspan=4| Anjaan
| rowspan=2| Amit Kumar
|-
| "Mitti Ban Jaye"
|-
| "Mara Jisko"
| Shabbir Kumar
|-
!''[[Nafrat Ki Aandhi]]''
| "Kaise Tum Thanedar"
| solo
|-
! Rowspan=6| ''[[Naqaab (1988 film)|Naqab]]''
| "Nainon Se Naina Lad Gaye"
| rowspan=6| Kamal Makhdoom
| rowspan=6| Farooq Kaiser
| Suresh Wadkar
|-
| "Na Kisi Ka Dil Mujhe Chahiye"
| Rowspan=5| solo
|-
| "Jaaneman Jaanewafa"
|-
| "Aankhen Meri Badalne Laga"
|-
| "Do Phool Meri Kabar Mein"
|-
| "Beti Nahin Main Teri"
|-
! rowspan=2| ''Nehru – The Jewel of India''
| "Hato Chhodo Sanwariya"
| rowspan=2| Salil Chowdhury
| Rowspan=2| Majrooh Sultanpuri
| rowspan=2| solo
|-
| "Nain Chubhat Saajan Bina"
|-
! Rowspan=2| ''Paanch Papi''
| "Dhak Dhak Dil Mera Karta Hai"
| Rowspan=2| Bappi Lahiri
| Rowspan=2| Anjaan
| Mohammed Aziz
|-
| "Aap Ki Khatir Jaan Hai Hazir"
| Amit Kumar
|-
!''Paap Ki Sazaa''
| "Main Kaisi Lagti Hoon"
| Raam Laxman
| Dev Kohli
| Shabbir Kumar
|-
! Rowspan=3| ''[[Parinda]]''
| "Pyaar Ke Mod Par"
| rowspan=3| R D Burman
| rowspan=3| Khurshid Hallauri
| rowspan=2| Suresh Wadkar
|-
| "Tumse Mil Ke"
|-
| "Tumse Mil Ke"
| Suresh Wadkar, R D Burman
|-
! Rowspan=3| ''[[Prem Pratigyaa]]''
| "Pyaar Kabhi Na Nahin Karna"
| rowspan=3| Bappi Lahiri
| rowspan=3| Indeevar
| Bappi Lahiri
|-
| "Baaho Me Bottle, Bottle Me Daaru"
| Kishore Kumar
|-
| "Na Jaanu Ram Meri Bindiya Kaha Gayi"
| solo
|-
!''Saat Ladkiyan''
| "Meri Jaan Mera Pyaar Hai Tu"
| Kaka Rajput
| Indeevar
| solo
|-
! ''[[Saaya (1989 film)|Saaya]]''
| "Janamdin Mubarak Ho"
| Bappi Lahiri
| Anjaan
| solo
|-
! Rowspan=2| ''[[Sachche Ka Bol-Bala]]''
| "Main Toh Hoon Malamaal"
| rowspan=2| Bappi Lahiri
| rowspan=2| Amit Khanna
| Bappi Lahiri
|-
| "Yeh Hawayen"
| Kishore Kumar
|-
!''[[Santosh (1989 film)|Santosh]]''
| "Batao Tumhe Pyaar Kaise Karun"
| Laxmikant–Pyarelal
| Santosh Anand
| Nitin Mukesh
|-
!''Shagun''
| "Kanha Re"
| Jaidev
| Sayeed Quadri
| solo
|-
! Rowspan=2| ''[[Sikka (1989 film)|Sikka]]''
| "Jab Tak Hai Dum Mein Dum"
| rowspan=2| Bappi Lahiri
| rowspan=2| Indeevar
| Vijay Benedict
|-
| "Adhi Raat Ko Aankh Khuli"
| Kishore Kumar
|-
! Rowspan=2| ''Socha Naa Tha''
| "Socha Naa Tha Tumse"
|Rowspan=2| N/A
|Rowspan=2| N/A
| Shahid Rafi
|-
| "Hey Hey Babu"
| solo
|-
! Rowspan=4| ''[[Tauhean]]''
| "Tujhe Usse Mohabbat Hai"
| rowspan=4| Bappi Lahiri
| rowspan=2| Indeevar
| Kishore Kumar
|-
| "Pyaar Karo, Pyaar Karo, Pyaar Karo"
| Mohammed Aziz, Manhar Udhas
|-
| "Babbai Babbai, Tu Mera Babbai"
| Anjaan
| solo
|-
| "Yaad Unko Nahin Aaj Ke Raat Bhi"
| Naqsh Lyallpuri
| Bappi Lahiri
|-
! Rowspan=2| ''[[Tere Bina Kya Jeena]]''
| "Mohabbat Ka Zamana"
| Rowspan=2| Jugal Kishore–Tilak Raj
| rowspan=2| Gulab Hussain
| Shabbir Kumar
|-
| "Mere Dil KI Halat Dekh"
| solo
|-
!''Time Limit''
| "Aji Ruko Toh Zara"
| R D Burman
| Sameer
| Amit Kumar
|-
!''[[Tujhe Nahin Chhodunga]]''
| "Dhalke Chunariya Re"
| C. P. Bhati
| Hasan Kamal
| Shabbir Kumar
|-
! Rowspan=2| ''[[Vardi (film)|Vardi]]''
| "Oye, Rab Ne Tujhe Husn Diya"
| rowspan=2| Anu Malik
| rowspan=2| Anand Bakshi
| [[Shabbir Kumar]]
|-
| "Maine Kitne Dil Liye"
| solo
|-
! Rowspan=2| ''[[Vidhaan]]''
| "Poochho Na Zindagi Se"
| rowspan=2| Anil Nanda
| rowspan=2| Naqsh Lyallpuri
| solo
|-
| "Nazar Milti Hai"
| Shailendra Singh
|-
! Rowspan=3| ''Vidrohi''
| "Bahen Meri Dulhan Bani"
| rowspan=3| Ravindra Jain
| rowspan=3| Ravindra Jain
| rowspan=3| solo
|-
| "Nazar Imaan Ki"
|-
| "Raat Bhar Rahiyo"
|-
! Rowspan=2| ''Waasta''
| "Chali Purvai Jhoome Angnaai"
| rowspan=2| Ajit Varman
| Abhilash
| rowspan=2| solo
|-
| "Maa Bolo Kan Talak Yun"
| Vasant Dev
|-
! Rowspan=2| ''Waqt Ki Zanjeer''
| "Qismat Hamein Layi Hai"
| rowspan=2| Ratnesh Sarkar
| rowspan=2| Navrang Bharti, Aarif Abrar
| rowspan=2| solo
|-
| "Sar-e-Bazaar"
|-
! Rowspan=2| ''[[Zakham (1989 film)|Zakham]]''
| "Aise Jeene Se Kya Haasil"
| rowspan=2| Bappi Lahiri
| rowspan=2| Anjaan
| [[Mohammed Aziz]]
|-
| "Mumbai Chi Chhokri"
| [[Bappi Lahiri]]
|-
|}
== 1990s ==
=== 1990 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
!''[[Agneekal]]''
| "Pankhida O Pankhida"
| Pankaj Bhatt
| rowspan=| Shyam Raj
| Udit Narayan, Tinu Anand
|-
! Rowspan=2| ''Aag Ka Dariya''
| "Dilbar Dilbar"
| Rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Rajendra Krishan
| Shabbir Kumar
|-
| "Goriya Uski Deewani"
| solo
|-
!rowspan=4| ''[[Andher Gardi]]''
| Aise Na Dekho Deewane"
| rowspan=4| Sonik–Omi
| rowspan=4| Sameer
| rowspan=3| Amit Kumar
|-
| "Raat Ke Sar Se Aanchal Dhalka"
|-
| "Gulbadan Jaan-e-Chaman"
|-
| "Pehle Bhi Tanhaai Thi"
| solo
|-
! Rowspan=2| ''Appu Raja''
| "Matwale Yaar Teri Jay"
| Rowspan=2| Ilaiyaraaja
| rowspan=2| Prem Dhawan
| Rowspan=2| S. P. Balasubrahmanyam
|-
| "Woh To Bana Apna"
|-
!''Aulad Ki Khatir''
| "Tu Bhi Tadpega, Mujhe Tadpanewale"
| colspan=2| Ravi
| Suresh Wadkar
|-
!''[[Awaargi]]''
| "Dak Babu Aaya"
| Anu Malik
| Anand Bakshi
| solo
|-
!''[[Awwal Number]]''
| "Tere Liye Aayi Hoon"
| Bappi Lahiri
| Amit Khanna
| solo
|-
!''Chhotu Ka Badla''
| "Aa Pee Le Pee Le"
| Deepen Chatterjee
| Sameer
| solo
|-
! Rowspan=3| ''[[Chor Pe Mor]]''
| "Woh Din Kab"
| rowspan=3| R D Burman
| Rowspan=3| Gulshan Bawra
| solo
|-
| "Baj Uthe Ghungroo"
| rowspan=2| Amit Kumar
|-
| "Aur Sunao Kya Haal"
|-
! Rowspan=3| ''College Girl''
| "Dheere Dheere Raat Dhale"
| rowspan=3| Babul Bose
| rowspan=3| Ravinder Rawal
| Rowspan=3| solo
|-
| "College Girl College Girl"
|-
| "College Girl College Girl" (sad)
|-
! ''Danga Fasad''
| "Babushah O My Darling"
| Dhiraj Kumar
| Abhilash
| Amit Kumar
|-
!''Din Dahade''
| "Ladi Ladi Jab Se Nazar"
| Jeetu–Tapan
| Surendra Sathi
| Kumar Sanu
|-
! Rowspan=2| ''[[Dushman (1990 film)|Dushman]]''
| "Mera Naam Sweet Sixteen"
| rowspan=2| R D Burman
| Rowspan=2| Indeevar
| rowspan=2| Amit Kumar
|-
| "Yeh Jhilmil Qaatil Raaten"
|-
!''[[Ghar Ho To Aisa]]''
| "January February March April May Aur June July"
| Bappi Lahiri
| Majrooh Sultanpuri
| Mohammed Aziz
|-
!''[[Ghayal (1990 film)|Ghayal]]''
| "Sochna Kya Jo Bhi Hoga Dekha Jaayega"
| Bappi Lahiri
| Anjaan
| Kumar Sanu, Shabbir Kumar
|-
!''[[Gunahon Ka Devta (1990 film)|Gunahon Ka Devta]]''
| "Hum Goa Ka Jenny Nahin"
| Anu Malik
| Indeevar
| rowspan=3| solo
|-
!''Haar Jeet''
| "Teri Ghungroo Toot Gaye Toh Kya"
| Bappi Lahiri
| Qateel Shifai
|-
!''Insaaf Ka Suraj''
| "Khat Aaya Ni Aaya Mere Natte Da"
| Vipin Reshammiya
| Sudhakar Sharma
|-
! Rowspan=2| ''Is Paar Ya Us Paar''
| "Hum Tum Ya Tum Hum"
| rowspan=2| Khokan Chowdhury
| rowspan=2| Shardanand Tiwari
| Yunus Parvez
|-
| "Zambo Zambo"
| Yunus Parvez, Khokan Chowdhury
|-
!''Izzat Aabroo''
| "Main Apni Badan Ki Chandni"
| Ajay Swami
| Zafar Rahi
| solo
|-
! Rowspan=3| ''Jaan-e-Wafaa''
| "Lehra Je Guzar Jaaye Hain"
| rowspan=3| Khayyam
| Asar Malkapuri
| rowspan=3| solo
|-
| "Raaz-e-Mohabbat Dil Mein Chhupana"
| Nida Fazli
|-
| "Ab Toh Hum Hain Aur Yeh Ruswaiyan"
| Bashar Nawaz
|-
! Rowspan=2| ''Jai Shiv Shankar''
| "Tu Andar Kaise Aaya"
| rowspan=4| R D Burman
| rowspan=4| Anand Bakshi
| Amit Kumar
|-
| "Lab Pe Tera Naam"
| Mohammed Aziz
|-
! rowspan=2| ''[[Jeene Do]]''
| "Boliya Oye Boliya, Aaja Raja"
| Amit Kumar, Suresh Wadkar
|-
| "Sari Raat Guzari Maine Dekhke Chand Ki Bindiya"
| Babla Mehta
|-
!''[[Jurm (1990 film)|Jurm]]''
| "Marne Ke Darr Se Mere Dil"
| Rajesh Roshan
| Indeevar
| Mohammed Aziz
|-
! ''[[Kaarnama]]''
| "Ki Karan Dus Ki Karan"
| colspan=2| Ravindra Jain
| Sushil Kumar
|-
!''Karishma Kali Kaa''
| "Sabhi Bhakton Ke Man Mein"
| Bappi Lahiri
| Indeevar
| solo
|-
!''[[Khatarnaak]]''
| "Zindagi Ne Pukara Chale Aaye Hum"
| Anu Malik
| Anjaan, Indeevar
| solo
|-
!''[[Kishen Kanhaiya]]''
| "Kuchh Ho Gaya, Kya Ho Gaya"
| Rajesh Roshan
| Indeevar
| Mohammed Aziz
|-
! Rowspan=2| ''Lohe Ke Haath''
| "Humne Suna Hai, Tu Hai Daku"
| rowspan=2| Usha Khanna
| rowspan=2| Anjaan
| Usha Khanna
|-
| "Dekhiye Jawani Ka Nasha Is Mein"
| solo
|-
! Rowspan=2| ''[[Indru Chandrudu|Mayor Saab]]'' (Dubbed)
| "Chhora Chhori Dono Milk Ke"
| rowspan=2| Ilaiyaraaja
| rowspan=2| Indeevar
| Amit Kumar
|-
| "Dil Ke Saaz Mein"
| Babla Mehta
|-
! Rowspan=3| ''Naaka Bandi''
| "Main Hoon Naughty Girl"
| rowspan=3| Bappi Lahiri
| rowspan=3| Anjaan
| rowspan=2| solo
|-
| "Rekha Ko Dekha"
|-
| "Sun Sun Meri Soni"
| Shabbir Kumar
|-
!''Phaansi Ka Phaanda''
| "Rangeen Hai Mehfil"
| Vishwanath More
| Jagdish Khebudkar, Suroor Lucknowi, Dhan Singh Yadav
| solo
|-
! Rowspan=3| ''[[Police Public]]''
| "Chattaungi Chamche Se Chat"
| rowspan=3| Raam Laxman
| rowspan=3| Asad Bhopali
| rowspan=3| solo
|-
| "Bichhua Ne Das Liya"
|-
| "Fursat Mili Hai Aa Jao"
|-
!''Pyasi Nigahen''
| "Tu Hi Tu, Tu Hai Mera Pyaar"
| Vidyut Goswami
| Manzur Saburi
| solo
|-
! ''[[Roti Ki Keemat]]''
| "Hathon Mein Choodi Khanke"
| Bappi Lahiri
| Indeevar
| solo
|-
!''[[Sailaab (1990 film)|Sailaab]]''
| "Mujhko Yeh Zindagi"
| Bappi Lahiri
| Javed Akhtar
| Amit Kumar
|-
!rowspan=2| ''Shatrutaa''
| "Ho Gaya Bewafa Khid Naseeba"
|rowspan=2| Kalyanji–Anandji
|rowspan=2| Maya Govind, Indeevar
|rowspan=2| solo
|-
| "Mujhe Apna Bana Le"
|-
! Rowspan=2| ''Shera Shamshera''
| "Zalim Yeh Na Jaane"
| rowspan=2| Bappi Lahiri
| rowspan=2| Anjaan
| rowspan=2| solo
|-
| "Ghungroo Baandh Liye"
|-
! ''[[Shiva (1990 film)|Shiva]]''
| Marte Hai"
| Ilaiyaraaja
| Majrooh Sultanpuri
| Suresh Wadkar
|-
!''[[Tejaa]]''
| "Aage Aage Jaye Mera Dil"
| Anu Malik
| Anjaan
| rowspan=3|solo
|-
! Rowspan=5| ''[[Thanedaar]]''
| "Pehli Pehli Baar Aisa Thanedaar Aaya"
| rowspan=5| Bappi Lahiri
| rowspan=2| Sameer
|-
| "Zulmi Saiyan Thanedaar"
|-
| "Jeena Hai Toh Hans Ke Jiyo" (version 1)
| rowspan=3| Indeevar
| Amit Kumar
|-
| "Jeena Hai Toh Hans Ke Jiyo" (version 2)
| Amit Kumar, Reema Lahiri
|-
| "Jeena Hai Toh Hans Ke Jiyo" (version 3)
| rowspan=2|solo
|-
!''[[Zimmedaaar]]''
| "Dilbar Dil Leke Dil De Do"
| Anu Malik
| Indeevar
|-
! Rowspan=8| ''Zooni''
| "Allah Khair Allah Khair Maango Sab Ki"
| rowspan=8| Khayyam
| rowspan=8| Shahryar
| Jaywant Kulkarni, Sunil Kumar, Bhushan Mehta
|-
| "Allah Khair Allah Khair Maango Sab Ki" (female)
| rowspan=7| solo
|-
| "Jeene Ki Koi Raah Dikhayi"
|-
| "Nazar Mein Noor Ki Shamma Jali"
|-
| "Rookh-e-Dildar Deedam Daras Ko"
|-
| "Shah-e-Mardaan, Sher-e-Yajdaan"
|-
| "Tere Bin Yeh Jeevan Kya Hai"
|-
| "Yeh Shamme Yeh Savere Jo Hain"
|-
|}
=== 1991 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! Rowspan=2| ''[[Aag Laga Do Sawan Ko]]''
| "Pani O Paani"
| rowspan=2| Usha Khanna
| rowspan=2| Anil Khanna
| rowspan=2| solo
|-
| "Tawaif Hoon, Dil Sab Ka Behlaaungi"
|-
!''[[Aaj Ka Samson]]''
| "Ek Bar Hans"
| Prem Gupta
| Abhilash
| Meenakshi
|-
! Rowspan=3| ''[[Afsana Pyar Ka]]''
| "Nazren Mili"
| rowspan=3| Bappi Lahiri
| rowspan=3| Sameer
| rowspan=2| Amit Kumar
|-
| "Tip Tip Tip Tip Baarish"
|-
| "Afsana Pyar Ka"
| Udit Narayan
|-
! Rowspan=2| ''[[Baat Hai Pyaar Ki]]''
| "Preet Adhuri"
| rowspan=2| Vijay Batalvi
| Ameer Qazalbash
| Rowspan=2| solo
|-
| "Shikwa Bhi Nahi"
| Bhim Sain<ref>{{Cite web|url=http://muvyz.com/moviepage/cf455229/songs/#tabs|title = Baat Hai Pyar Ki (1991) | Hindi Movie Songs - Bollywood MuVyz}}</ref>
|-
! Rowspan=2| ''[[Begunaah]]''
| "Khareedaaron Bataao"
| rowspan=2| Rajesh Roshan
| rowspan=2| Nida Fazli
| Rowspan=2| solo
|-
| "Na Do Humko Ilzaam"
|-
!''[[Dushman Devta]]''
| "Pyar Ke Ghar Mere"
| Bappi Lahiri
| Anjaan
| solo
|-
!''[[First Love Letter]]''
| "Kambal Na Hatao, Mujhe Lagta Hai Darr"
| rowspan=3| Bappi Lahiri
| Anjaan
| S. P. Balasubrahmanyam
|-
! Rowspan=2| ''[[Garajna]]''
| "Pyar Kiya Phir Gham Hai Kya"
| rowspan=2| Indeevar
| Mohammed Aziz
|-
| "Mushkil Nahin Pani Ki Dhaar"
| Kishore Kumar
|-
! Rowspan=3| ''[[Gunehgar Kaun]]''
| "Aapko Main Gul Kehke Utha Loon Jab Kahiye"
| rowspan=3| R D Burman
| rowspan=3| Majrooh Sultanpuri
| Shailendra Singh
|-
| "Na Sanam" (Female)
| rowspan=2| solo
|-
| "Rona Mujhe Aata Hai Re"
|-
!''[[Hafta Bandh]]''
| "Kyun Soch Mein"
| Bappi Lahiri
| Javed Akhtar
| rowspan=4| Amit Kumar
|-
! Rowspan=3| ''[[Indrajeet]]''
| "Ab To Humko Ek Duje Ka"
| rowspan=3| R D Burman
| rowspan=3| Gulshan Bawra
|-
| "Main Khule Aam Keh Doon"
|-
| "Main Na Jhooth Boloon"
|-
! Rowspan=3| ''[[Insaaf Ka Khoon]]''
| "Farebi Lootere Awaara Lafange Behaya"
| rowspan=3| Hansraj Behl
| rowspan=2| Munsif
| rowspan=3| Vinod Sehgal
|-
| "Tere Bin Dil Dhadakta Hai"
|-
| "Tere Mere Pyar Ki Baat Phail Gayi Zamane Mein"
| Mahendra Dalvi
|-
!''Inspector Kiron''
| "Aisa Lagta Hai"
| Bappi Lahiri
| Anand Bakshi
| solo
|-
! Rowspan=4| ''[[Jhoothi Shaan]]''
| "Rim Zim Rim Zim Barse Sawan"
| rowspan=4| R D Burman
| rowspan=4| Yogesh
| Amit Kumar
|-
| "Janu Janu Thari Yaari"
| [[Shailendra Singh (singer)|Shailendra Singh]]
|-
| "Jo Aap Aaye Bahar Laye"
| Amit Kumar, Chandrani Mukherjee
|-
| "Dil Mere Lehra Le"
| Suresh Wadkar
|-
! Rowspan=3| ''[[Jigarwala]]''
| "Aisa Lagta Tha Yeh Bairi Sawan Chala Jayega"
| Rowspan=3| Nadeem–Shravan
| Rani Malik
| rowspan=2| Amit Kumar
|-
| "Hum To Hain Teen Bhai"
| rowspan=2| Madan Pal
|-
| "Chale Hain Barati Ban Thanke"
| Shabbir Kumar
|-
!''[[Kohraam]]''
| "Jab Nadiyan Meri"
| Bappi Lahiri
| Anjaan
| solo
|-
!''[[Lakshmanrekha]]''
| "Yeh Sitam"
| Laxmikant–Pyarelal
| Anand Bakshi
| solo
|-
!''[[Lekin...]]''
| "Jhoothe Naina"
| Hridaynath Mangeshkar
| Gulzar
| solo
|-
!''[[Naamcheen]]''
| "Log Zamane Mein"
| Anu Malik
| Dev Kohli
| solo
|-
! ''[[Numbri Aadmi]]''
| "Chham Chham Bole Mere Ghunghroo"
| Bappi Lahiri
| Anjaan
| solo
|-
! Rowspan=2| ''[[Pratikar]]''
| "Chitthi Mujhe Likhna"
| rowspan=2| Bappi Lahiri
| rowspan=2| Anand Bakshi
| Amit Kumar
|-
| "Kaali Zulfen Gore Gaal"
| Mohammed Aziz
|-
! Rowspan=2| ''[[Pyaar Ka Saaya]]''
| "Teri Dosti Se Mila Hai Mujhe"
| rowspan=2| Nadeem–Shravan
| rowspan=2| Sameer
| rowspan=2| Kumar Sanu
|-
| "Har Ghadi Mere Pyaar Ka Saya" (duet)
|-
! Rowspan=2| ''[[Pyaar Ka Saudagar]]''
| "Tera Dil Mere Dil Pe Fit Ho Gaya"
| rowspan=2| Bappi Lahiri
| rowspan=2| Shaily Shailendra
| Kumar Sanu
|-
| "Jaanam Mere Jaanam"
| solo
|-
! Rowspan=2| ''[[Qurbani Rang Layegi]]''
| "Tirchhi Nazar Ka Mara Teer Topiwale Ne"
| rowspan=2| Laxmikant–Pyarelal
| rowspan=2| Gulshan Bawra
| rowspan=2| Shabbir Kumar
|-
| "Abhi Abhi Taaza Taaza Mili Hai Khabar"
|-
! Rowspan=2| ''[[Raiszaada]]''
| "Nashe Ki Botal"
| rowspan=5| Bappi Lahiri
| rowspan=2| Indeevar
| Shabbir Kumar
|-
| "Pehle Aankh Lad Gayee"
| Mohammed Aziz
|-
! Rowspan=2| ''[[Rupaye Dus Karod]]''
| "Jhatka O Haay Jhatka"
| rowspan=2| Sikandar Bharti
| Sudesh Bhosle
|-
| "Ram Kare Toot Jaaye Rail Gaadi"
| solo
|-
!''[[Sau Crore]]''
| "Desi Dhun, Videsi Taal"
| Suraj Sanim
| Kumar Sanu, Udit Narayan
|-
!''Swayam''
| "Maine Har Haal Mein"
| Ajit Varman
| N/A
| solo
|-
!''[[Vishnu-Devaa]]''
| "Dil Tera Assi Tere Hai Deewane"
| Rajesh Roshan
| Anjaan
| Mohammed Aziz
|-
!''[[Yodha (1991 film)|Yodha]]''
| "Ladka Kunwara"
| Bappi Lahiri
| Anand Bakshi
| solo
|-
|}
=== 1992 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
!''[[Balwaan]]''
| "Assa Dil Tere Kadman"
| Mahesh–Kishore
| Gauhar Kanpuri
| Arun Bakshi
|-
! Rowspan=3| ''[[Bandhu (1992 film)|Bandhu]]''
| "Chalo Chale Saathiyan"
| rowspan=3| Ranjit Gazmer
| rowspan=3| Kiran Mishra
| Kumar Sanu
|-
| "Kaun Ho Mere Tum"
| Danny Denzongpa
|-
| "Ek Jyoti Chita Se Jalakar"
| solo
|-
! Rowspan=6| ''[[Bekhudi]]''
| "Aa Khel Khelen Hum, Ek Khel Khelen Hum"
| rowspan=6| Nadeem–Shravan
| Saima Nadeem
| rowspan=5| [[Kumar Sanu]]
|-
| "Khat Maine Tere Naam Likha, Haal-E-Dil Tamaam Likha"
| Surendra Sathi
|-
| "Mujhe Kya Pata Tera Ghar Hai Kahan"
| rowspan=2| Anwar Sagar
|-
| "Daddy Mummy Meri Shaadi Karwa Rahe Hain"
|-
| "Dekhke Yeh Rumal Mujhe Yaad Karna" (Happy)
| rowspan=2| Sikander Bharti
|-
| "Dekhke Yeh Rumal Mujhe Yaad Karna" (Sad)
| solo
|-
! Rowspan=2| ''[[Bewaffa Se Waffa]]''
| "Aa Mere Paas, O Meri Jaan"
| rowspan=2| Usha Khanna
| rowspan=2| Saawan Kumar Tak
| rowspan=3| solo
|-
| "Waise To Zamane Mein"
|-
!''Bombay Ka Raja''
| "Ruby Mera Naam"
| Rajesh Roshan
| Ibrahim Ashq
|-
! Rowspan=2| ''[[Chamatkar]]''
| "Yeh Hai Pyar Pyar"
| rowspan=2| Anu Malik
| Rowspan=2| Anand Bakshi
| Kumar Sanu
|-
| "Bichhoo O Bichhoo"
| solo
|-
!''Daisy''
| "Do Panchhi"
| Kailash–Pradyuman
| Madan Pal
| solo
|-
! Rowspan=2| ''Daman''
| "Din Dhalte Hi Dil Doobne Lagta Hai"
| rowspan=2| Khayyam
| rowspan=2| N/A
| solo
|-
| "Manjar Tarah Tarah Ke Daman"
| Abhijeet Bhattacharya
|-
! Rowspan=3| ''Deewana Aashiq''
| "Tu Bhi Hai Hai Beqaraar"
| rowspan=3| Bappi Lahiri
| Rowspan=2| Bhushan Banmali
| rowspan=2| solo
|-
| "Sunn Sunn Mere"
|-
| "Pyaar Kuchh Bhi Ho"
| Farooq Kaiser
| Shabbir Kumar, Shailendra Singh
|-
! Rowspan=2| ''[[Dil Ka Kya Kasoor]]''
| "Milne Ki Tum Koshish Karna"
| rowspan=2| Nadeem–Shravan
| Madan Pal
| rowspan=2| Kumar Sanu
|-
| "Mera Sanam Sabse Pyara Hai"
| Sameer
|-
! Rowspan=3| ''[[Antham|Drohi]]''
| "Panchi Gaaye Re
| rowspan=3| R. D. Burman
| Rowspan=3| Javed Akhtar
|rowspan=2| solo
|-
| "Aise Hamen Dekho"
|-
| "Dooba Dooba"
| Jolly Mukherjee
|-
! Rowspan=4| ''[[Insaaf Ki Devi]]''
| "Yeh Haseen Raat"
| rowspan=4| Bappi Lahiri
| rowspan=4| Indeevar
| rowspan=3| solo
|-
| "Kashmir Se Leke"
|-
| "Sun Mere Sajna"
|-
| "Tumbi Tumbi"
| Amit Kumar
|-
!''[[Isi Ka Naam Zindagi]]''
| "Aiyo Arre Aiyo Bina Paas Aaye More"
| Bappi Lahiri
| Ramesh Pant
| solo
|-
! ''[[Jai Kaali]]''
| "Chude Baje"
| Usha Khanna
| Yogesh, Nida Fazli
| Usha Khanna
|-
!''[[Jaan Tere Naam]]''
| "Hum Laakh Chhupaye Pyaar Magar"
| Nadeem–Shravan
| Rani Malik
| Kumar Sanu
|-
! Rowspan=6| ''Kal Ki Awaaz''
| "Hamare Khwabo Ke Anjuman Mein"
| rowspan=6| Nadeem–Shravan
| rowspan=6| Sameer
| solo
|-
| "Jabse Dekha Tumko Mere Dil Ne Kaha"
| rowspan=5| Kumar Sanu
|-
| "Kar Na Sake Hum Pyar Ka Sauda"
|-
| "Kisi Meharban Ne Aake Meri Zindagi Saja Di"
|-
| "Kyu Ladkiya Humse Ye Raaz Chhupati Hai"
|-
| "Tumhari Nazron Mein Humne Dekha"
|-
!''[[Karm Yoddha]]''
| "Uff Ye Kya Hua"
| Ajit Varman
| Nadira Babbar
| Mohammed Aziz
|-
! Rowspan=2| ''[[Khel (film)|Khel]]''
| "Ek Baat Maan Lo Tum" (version 1)
| rowspan=2| Rajesh Roshan
| rowspan=2| Javed Akhtar
| rowspan=2| solo
|-
| "Ek Baat Maan Lo Tum" (version 2)
|-
! Rowspan=3| ''[[Khiladi (1992 film)|Khiladi]]''
| "Hoke Man Aaj Magan"
| Anwar Sagar
| Abhijeet Bhattacharya, Udit Narayan
|-
| "Dekha Teri Mast Nigaho Mein"
| Mahendra Dalvi
| Kumar Sanu
|-
| "Kya Khabar Thi Jaana"
| Dev Kohli
| Abhijeet Bhattacharya
|-
! Rowspan=3| ''[[Khule-Aam]]''
| "Kaam Kisi Ke Koi Aye Na"
| rowspan=3| R D Burman
| rowspan=3| Indeevar
| rowspan=3| Gautam Roy
|-
| "Parbat Se Neeche Gira Du"
|-
| "Pehle Pehle Pyar Hua"
|-
!''[[Laat Saab]]''
| "Battiya Bujhegi"
| Anu Malik
| Gulshan Bawra
| solo
|-
!''Lambu Dada''
| "Teri Zindagi Hai"
| Rajesh Roshan
| Payam Sayeedi, Anwar Sagar, Indeevar
| Sadhana Sargam
|-
!''[[Maarg]]''
| "Mere Mehboob Aa"
| Anu Malik
| Anand Bakshi
| solo
|-
! rowspan=2| ''Mere Meherban''
| "Aapse Pyaar Hua"
| rowspan=4| Bappi Lahiri
| Ashok Verma
| S. P. Choudhary
|-
| "Tere Kaale Baal"
| R. K. Saharawat
| Kumar Sanu
|-
! rowspan=2| ''[[Naseebwala]]''
| "Mere Bhaiya Ki Saali"
| Indeevar
| Mohammed Aziz
|-
| "Yere Yere Pavsa"
| Anjaan
| Amit Kumar
|-
!''[[Panaah (film)|Panaah]]''
| "De De Na Mujhko Mere Yaar"
| Nadeem–Shravan
| Vishweshwar Sharma
| solo
|-
! Rowspan=2| ''Pyar Hua Badnam''
| "Main Prem Nagar Ka Raja"
| rowspan=3| Anand–Milind
| Rani Malik
| Shabbir Kumar
|-
| "Is Jahan Se Us Jahaan"
|rowspan=2| Sameer
| Nitin Mukesh
|-
!''Sachcha Pyar''
| "Mere Liye Tu"
| S. P. Balasubrahmanyam
|-
! Rowspan=4| ''[[Sarphira]]''
| "Deewane O Deewane"
| rowspan=5| R D Burman
| Rowspan=4| Farooq Kaiser
| solo
|-
| "Khwab Dekh Dekhke Zindagi Guzar Gayi"
| Mohammed Aziz
|-
| "Sardi Zukham Ka Hai Ek Hi Ilaj"
| Suresh Wadkar
|-
| "Meri Honewali Bhabhi, Tumhe Dena Hoga Vaada"
| Amit Kumar
|-
!''Siyasat''
| "Masti Ke Hai Din Chaar"
| Hasan Kamal
| solo
|-
! Rowspan=3| ''[[Suryavanshi (film)|Suryavanshi]]''
| "Main Nahin Kehta"
| rowspan=3| Anand–Milind
| rowspan=3| Kulwant Jani
| Kumar Sanu
|-
| "Jogi Tere Pyar Mein"
| Udit Narayan
|-
| "Tu Hi Mere Dil Ka Jaani"
| Mangal Singh
|-
!''[[Tyagi (film)|Tyagi]]''
| "Mujhko To Kuch Kuch Hota Hai"
| Bappi Lahiri
| Gulrez
| Kumar Sanu
|-
!''[[Vansh]]''
| "Sard Mausam, Bheega Tan Hai"
| Anand–Milind
| Sameer
| solo
|-
! Rowspan=2| ''[[Virodhi (1992 film)|Virodhi]]''
| "Nain Kabootar Ud Gaye Dono"
| rowspan=2| Anu Malik
| rowspan=2| Dev Kohli
| rowspan=2| Kumar Sanu
|-
| "Jaanam Jaanam Jaanam"
|-
! Rowspan=2| ''[[Yeh Raat Phir Na Aayegi (1992 film)|Yeh Raat Phir Na Aayegi]]''
| "Aa Bhi Ja Ke Raat Hai Baaki"
| rowspan=2| Rajesh Roshan
| Rowspan=2| Ibrahim Ashq, Raj Tilak, Payam Sayeedi
|-
| "Jaanu Na Main Ye Kya Hua"
| Anwar
|-
! Rowspan=3| ''[[Zakhmi Rooh]]''
| "Ang Se Ang Mila Le"
| rowspan=3| Nandi Duggal
| rowspan=3| Dilip Tahir
| rowspan=2| solo
|-
| "Kisne Samjha Kisne Jaana"
|-
| "Tu Hain Mera, Main Hoon Teri"
| Amit Kumar
|-
! Rowspan=3| ''[[Zindagi Ek Juaa]]''
| "Yeh Zindagi Hai" (female)
| Rowspan=3| Bappi Lahiri
| Rowspan=2| Prakash Mehra
| Rowspan=3| solo
|-
| "Dil To Dil Hai" (female)
|-
| "Na Ja Re Na Ja Pardes"
| Anjaan
|-
!''[[Zulm Ki Hukumat]]''
| "Hum Aap Ki Zulfon Se Khele"
| Dilip Sen–Sameer Sen
| Sameer
| Amit Kumar
|-
|}
=== 1993 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! Rowspan=3| ''[[Aaina (1993 film)|Aaina]]''
| "Aaina Hai Mera Chehra"
| rowspan=3| Dilip Sen–Sameer Sen
| rowspan=3| solo
| Lata Mangeshkar, Suresh Wadkar
|-
| "Meri Saanson Mein Tum, Dil Ki Dhadkan Mein Tum"
| Kumar Sanu
|-
| "Saansen Behki"
| solo
|-
!''[[Aankhen (1993 film)|Aankhen]]''
| "Ek Tamanna Jeevan Ki"
| Bappi Lahiri
| Indeevar
| Kumar Sanu
|-
!''[[Aasoo Bane Angaarey]]''
| "Dil Bas Mein Nahin"
| Rajesh Roshan
| Indeevar, Dev Kohli and Payam Sayeedi<ref>{{cite web|url=http://myswar.com/album/aansoo-bane-angaarey-1993|title=Aasoo Bane Angaarey (Music!')|work=My Swar}}</ref>
| solo
|-
!''Andha Intaquam''
| "Ruk Jaa Zara Tu, Ae Jaaneman"
| Sreerang Aras
| Shyam Anuragi
| Udit Narayan
|-
! Rowspan=2| ''[[Apaatkaal]]''
| "Hum Bhi Tum Bhi"
| rowspan=2| Rajesh Roshan
| rowspan=2| Majrooh Sultanpuri
| Mohammed Aziz
|-
| "Mehandi Ni Mehandi"
| Sadhana Sargam
|-
!''[[Baazigar]]''
| "Kitaabe Bahut Si"<ref>{{Cite web|url=http://www.lyricsgram.com/song/kitabein-bahut-si-3802|title=Kitabein Bahut Si Lyrics | Kitabein Bahut Si Baazigar lyrics | lyricsgram.com|website=www.lyricsgram.com}}</ref>
| Anu Malik
| Zafar Gorakhpuri
| Vinod Rathod
|-
! rowspan=4| ''[[Balmaa]]''
| "Mere Khayaal Se Tum"
| rowspan=4| Nadeem–Shravan
| rowspan=4| Sameer
| Nitin Mukesh
|-
| "Agar Jindagi Ho To Tere Sang Ho"
| rowspan=2| Kumar Sanu
|-
| "Meri Saheliyon Mere Saath Aao"
|-
| "Mehandi Se Likh Gori"
| solo
|-
!''[[Bhookamp]]''
| "Tan Man Mile To"
| Jatin–Lalit
| Mahendra Dalvi
| solo
|-
! Rowspan=3| ''Bonny''
| "Jaaneman Jaanejaan"
| rowspan=3| Binju Ali
| rowspan=3| Majrooh Sultanpuri
| Rowspan=3| Binju Ali
|-
| "Dhun Ki Mein"
|-
| "Khelo Na"
|-
! Rowspan=2| ''Dil Ne Ikraar Kiya''
| "Chhoone Se Tere"
| Rowspan=2| Anu Malik
| rowspan=2| Anand Bakshi
| Anu Malik
|-
| "Waapas Kar Do Meri Neend"
| Suresh Wadkar
|-
! Rowspan=2| ''[[Divya Shakti]]''
| "O Mere Gudde Raja"
| rowspan=2| Anand–Milind
| rowspan=2| Sameer
| Kumar Sanu
|-
| "Aao Na Mujhse Pyar Karo"
| solo
|-
! Rowspan=5| ''[[Gardish]]''
| "Ae Mere Deewanon"
| rowspan=5| R D Burman
| rowspan=5| Javed Akhtar
| rowspan=3| S. P. Balasubrahmanyam
|-
| "Yeh Mera Dil To Pagal Hai"
|-
| "Rang Rangeeli Raat Gaaye"
|-
| "Tum Jo Mile"
| M. G. Sreekumar
|-
| "Badal Jo Barse"
| solo
|-
!''[[Geetanjali (1993 film)|Geetanjali]]''
| "I Love You"
| Bappi Lahiri
| Indeevar
| solo
|-
!''[[Gumrah (1993 film)|Gumrah]]''
| "Yeh Hai Sharabkhana"
| Laxmikant–Pyarelal
| Anand Bakshi
| solo
|-
! Rowspan=4| ''[[Gurudev (film)|Gurudev]]''
| "Mera Kaha Manoge"
| rowspan=4| R D Burman
| rowspan=4| Majrooh Sultanpuri
| solo
|-
| "Aaja, Sunle Sada, Tu Hai Kahan Jaan-E-Wafa"
| R D Burman
|-
| "Jaipur Se Nikli Gaadi Dilli Chale Halle Halle"
| Shailendra Singh
|-
| "Aana Re, Aana Re, Dil Hai Deewana Re"
| Shailendra Singh, Amit Kumar
|-
!''Jaan Pe Khelkar''
| "Aaj Ki Raat"
| colspan=2| Ravindra Jain
| solo
|-
!''Jeena Nahin Bin Tere''
| "Parda Utha Toh"
| Rajesh Roshan
| Indeevar, Naqsh Lyallpuri, Payam Sayeedi
| solo
|-
!''[[Jeevan Ki Shatranj]]''
| "O Jaan-E-Jaana"
| Anand–Milind
| Sameer
| solo
|-
!''Kala Coat''
| "Tadpake Woh Bhi Tadpe Hain"
| Iqbal Gill
| Aish Kanwal
| Mohammed Rafi
|-
! Rowspan=2| ''[[Kanyadaan]]''
| "Dekho Dus Baj Gaye Hain"
| rowspan=2| Aadesh Shrivastava
| rowspan=2| Shyam Raj
| Mukul Agarwal
|-
| "Maina Bol Rahi"
| Kumar Sanu
|-
! ''[[King Uncle]]''
| "Fenny Ne Mujhe Bulaya"
| Rajesh Roshan
| Javed Akhtar
| Sudesh Bhosle
|-
!''[[Lootere]]''
| "Aa Ja Aanewale Aaja"
| Anand–Milind
| Majrooh Sultanpuri
| solo
|-
! Rowspan=6| ''[[Meera Ke Girdhar]]''
| "Mere Hai Girdhar Gopal"
| rowspan=6| Kanak Raj
| rowspan=6| Zaheer Anwar
| rowspan=6| solo
|-
| "Babul Ka Ghar Chod Ke Gori"
|-
| "Bhulkar Reet Sari"
|-
| "Saj Dhaj Ke Main To Doli Chadhungi"
|-
| "Radha Ko Mila Jaise Krishan" (part 2)
|-
| "Radha Ko Mila Jaise Kishan" (part 1)
|-
! Rowspan=3| ''[[Meri Aan]]''
| "Bewafa Ajnabi" (version 1)
| rowspan=3| Ravindra Jain
| rowspan=3| Ravindra Jain
| rowspan=3| Kumar Sanu
|-
| "Bewafa Ajnabi" (version 2)
|-
| "Is Nazar Ne Kabhi Pehle Dekhi Na Thi"
|-
!''Nargis''
| "O Jaanejaana Qurbana"
| Basu Chakraborty
| Majrooh Sultanpuri
| Naseeruddin Shah
|-
! Rowspan=5| ''[[Pehla Nasha]]''
| "Aaj Raat Bas Mein" (part 1)
| rowspan=5| Uttankk–Neeraj
| rowspan=5| Anand Bakshi
| rowspan=2| solo
|-
| "Aaj Raat Bas Mein" (part 2)
|-
| "Nadiya Kinare"
| rowspan=3| Vinod Rathod
|-
| "Pyar Ki Raat"
|-
| "Tu Hai Haseena"
|-
!''[[Police Wala]]''
| "Kaun Hai Asli"
| Bappi Lahiri
| Anjaan
| Amit Kumar
|-
! Rowspan=3| ''[[Pyaar Ka Tarana]]''
| "Love Letter, Love Letter"
| rowspan=3| Raam Laxman
| rowspan=3| M. G. Hashmat
| S. P. Balasubrahmanyam, Udit Narayan
|-
| "Jane Ke Liye Kaise Kahoon"
| rowspan=2| S. P. Balasubrahmanyam
|-
| "Tumse Milke Humdum"
|-
!''Pyar Hua Dheere Dheere''
| "Main Toh Seh Na Sakungi"
| N/A
| N/A
| Suresh Wadkar
|-
!''[[Rudaali]]''
| "Samay O Dheere Chalo" (part 1)
| Bhupen Hazarika
| Gulzar
| solo
|-
!''[[Sainik]]''
| "Meri Wafayein Yaad Karoge"
| Nadeem–Shravan
| rowspan=4| Sameer
| Kumar Sanu
|-
! Rowspan=3| ''[[Shaktiman (1993 film)|Shaktiman]]''
| "Meri Haath Ki Choodi Bole"
| rowspan=3| Channi Singh
| Udit Narayan
|-
| "Haule Haule Dil Doongi"
| solo
|-
| "Sun Goriye"
| Channi Singh
|-
!''[[Shreeman Aashique]]''
| "Bade Be-Sharam Ladki"
| Nadeem–Shravan
| Noor Kaskar
| Annu Kapoor
|-
! Rowspan=4| ''Tum Karo Vaada''
| "Tujhe Pyaar Karne Se"
|rowspan=4| R D Burman
| rowspan=3| Faiz Anwar
| rowspan=3| Kumar Sanu
|-
| "Ise Pyaar Kahiye Ya Deewangi"
|-
| "Tum Karo Vaada"
|-
| "Mujhe Maaf Karo"
| Manhar Udhas
|-
!''[[Tahqiqaat]]''<ref>{{Cite web |title=Tahqiqaat |url=http://myswar.co/album/tehqiqaat-1993 |access-date=25 February 2022 |website=MySwar}}</ref>
| "Doob Gaye Mere Nain Saajan"
| Anu Malik
| Qateel Shafai
| Vinod Rathod
|-
! Rowspan=3| ''[[Veerta]]''
| "Na Na Na Jana"
| rowspan=3| Bappi Lahiri
| rowspan=3| Ajit Singh Deol
| rowspan=2| Kumar Sanu
|-
| "O Choodhewali"
|-
| "Sha Ra Ra Ra"
| Mangal Singh
|-
!''[[Waqt Hamara Hai]]''
| "Kachchi Kali Kachnar Todi Nahin Jaati"
| Nadeem–Shravan
| Sameer
| Kumar Sanu
|-
!''[[Zakhmo Ka Hisaab]]''
| "Pehle Aap Kaha, Phir Tum Kaha"
| Rajesh Roshan
| Anwar Sagar
| Mohammed Aziz
|-
|}
=== 1994 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
!''[[Andaz Apna Apna]]''
| "Yeh Raat Aur Yeh Doori"
| Tushar Bhatia
| Majrooh Sultanpuri
| S. P. Balasubrahmanyam
|-
!''Andhera''
| "Nazron Ko Takrane De"
| Dilip Dutta
| Shaily Shailendra, Mithilesh Sinha, Deepak Sneh, Parwana
| solo
|-
! Rowspan=2| ''[[Baali Umar Ko Salaam]]''
| "Darte Darte Tum Kaho Kuch"
| rowspan=2| Bappi Lahiri
| rowspan=2| Nawab Arzoo
| Kumar Sanu
|-
| "Chupke Teri Aankhon Mein"
| [[Udit Narayan]]
|-
!''Beta Ho Toh Aisa''
| "Teri Zinda Dilli Mujhe Maar Gayi"
| Ravindra Jain
| Ravindra Jain
| solo
|-
!rowspan=2|''Bhairav Dweep''
| "Babua O Babua"
| rowspan=2| M. Suresh
| rowspan=2| P. K. Mishra
| rowspan=2| solo
|-
| "Sun Ri Sakhi Basant Aaya"
|-
!''[[Brahma (1994 film)|Brahma]]''
| "Naam Jiska Zindadili Hai"
| Bappi Lahiri
| Prayag Raj
| solo
|-
! Rowspan=4| ''[[Chaand Kaa Tukdaa]]''
| "Aaja Deewane Aaja Le Chal Aakar Sabko"
| rowspan=4| Mahesh–Kishore
| rowspan=4| Sawan Kumar Tak
| rowspan=2| solo
|-
| "Darwaja Khula Rakhna Mera Yaar Aa Raha Hai"
|-
| "Jo Peete Nahin Sharab"
| Jolly Mukherjee
|-
| "Tu Ladka Hai Londan Ka, Main Ladki Hindustani"
| Vipin Sachdeva
|-
!''[[Do Fantoosh]]''
| "Aaj Chhatri Ki Chhaon Mein"
| Hari–Arjun
| Sikandar Bharti
| Shabbir Kumar
|-
! Rowspan=4| ''[[Ganga Aur Ranga]]''<ref>{{Cite web|url=http://muvyz.com/moviepage/vj740849/songs/#tabs|title = Ganga Aur Ranga (1994) | Hindi Movie Songs - Bollywood MuVyz}}</ref>
| "Ek Din Aisa"
| rowspan=4| Sonik–Omi
| rowspan=4|
| rowspan=4| solo
|-
| "Ghoonghroo Toot Gaye"
|-
| "Tu Jhootha Teri Kasmein Jhoothi"
|-
| "Yaar Manaoon"
|-
! Rowspan=3| ''[[Gangster (1994 film)|Gangster]]''
| "Gangster Gangster"
| rowspan=3| Jatin–Lalit
| rowspan=3| M G Hashmat
| [[Kumar Sanu]]
|-
| "Ek Ladki Mili" (version 1)
| rowspan=2| [[Udit Narayan]]
|-
| "Ek Ladki Mili" (version 2)
|-
!''[[Ghar Ki Izzat (1994 film)|Ghar Ki Izzat]]''
| "Mausam Yeh Suhana Hai"
| Amar–Utpal
| Anjaan
| Udit Narayan
|-
!''[[Hanste Khelte]]''
| "Darwaza Kaahe Bandh Kiya"
| Jatin–Lalit
| Rani Malik, Manohar Iyer
| Sudesh Bhosle
|-
!''[[Insaniyat (1994 film)|Insaniyat]]''
| "Saare Ladke Kare Toh"
| Rajesh Roshan
| Anjaan
| Shabbir Kumar
|-
!''[[Janam Se Pehle]]''
| "Aye Mere Humsafar"
| R D Burman
| Naqsh Lyallpuri
| solo
|-
! rowspan=3| ''Jazbaat''
| "Dil Udta Hai"
|rowspan=3| Raam Laxman
| Suman Sarin
|rowspan=2| Sameer Date
|-
| "Ek Tu Haseen"
| Dev Kohli
|-
| "Khushiyan Manane Ki Raat"
| Dilip Tahir
| solo
|-
! Rowspan=2| ''Khudai''
| "Haye Re Kismat Humein Kahan Layi"
|rowspan=2| Jagjit Singh
| rowspan=2| Sudarshan Fakir
| rowspan=2| solo
|-
| "Kehti Hai Bindiya"
|-
!''[[Main Khiladi Tu Anari]]''
| "Lakhon Haseen"
| Anu Malik
| Anwar Sagar
| Kumar Sanu
|-
! ''Path-Bhrashta''
| "Chahat Bina Haya Kya"
| Usha Khanna
| N/A
| Roop Kumar Rathod
|-
!''Pyaara Sangam''
| "Gham Tere Hum"
| Pratibha Dutt
| Ramnath Roy
| solo
|-
! Rowspan=2| ''[[Rakhwale]]''
| "Sohni Dekhi Sassi Dekhi"
| rowspan=2| Sonik–Omi
| rowspan=2| Kulwant Jani
| Udit Narayan
|-
| "Woh Din Na Rahe Toh"
| solo
|-
!''[[Salaami]]''
| "Chehra Kya Dekhte Ho"
| Nadeem–Shravan
| Madan Pal
| Kumar Sanu
|-
! ''[[Vaade Iraade]]''
| "Dil Nashin Hai"
| Jatin–Lalit
| Dev Kohli
| solo
|-
!''Zamane Se Kya Darna''
| "Yaara Yaara Yaara"
| Anand–Milind
| Sameer
| solo
|-
|}
=== 1995 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! Rowspan=1| ''Adhuri Dulhan''
| "Main Mar Jaoon Toh"
| Triveni–Bhavani
| Aziz Hyderabadi
| solo
|-
!''[[Dil Ka Doctor]]''
| "Upar Se Dekha"
| Bappi Lahiri
| Dev Kohli
| solo
|-
!''[[Dilwale Dulhaniya Le Jayenge]]''
| "Zara Sa Jhoom Loon Main"
| Jatin–Lalit
| Anand Bakshi
| Abhijeet Bhattacharya
|-
!''[[Fauji (1995 film)|Fauji]]''
| "Mera Naam Reshma"
| Vishal Bhardwaj
| Madan Pal
| solo
|-
!''[[Kalyug Ke Avtaar]]''
| "Soone Soone Se Jeevan"
| colspan=2| Ravindra Jain
| Suresh Wadkar
|-
! rowspan=3| ''Karmo Ki Sazaa''
| "Dhak Dhak Dhak"
|rowspan=3| Charanjit Ahuja
|rowspan=3| Hasrat Jaipuri, Shyam Bhateja
|rowspan=2| Kumar Sanu
|-
| "Reason Reason"
|-
| "Kitna Pyaar Hai"
| Udit Narayan
|-
! Rowspan=2| ''[[Param Vir Chakra (film)|Param Vir Chakra]]''
| "Tujh Pe Qurban"
| rowspan=2| Ravindra Jain
| rowspan=2| Ravindra Jain
| Ravindra Jain
|-
| "Mere Mehboob Mere Watan"
| Kumar Sanu, Suresh Wadkar, Mohammed Aziz
|-
!''[[Policewala Gunda]]''
| "Kangana Khanak Khanak"
| Bappi Lahiri
| Maya Govind
| solo
|-
! rowspan=2| ''[[Rangeela (1995 film)|Rangeela]]''
| "Rangeela Re"
| rowspan=2| A. R. Rahman
| rowspan=2| Mahboob
| Aditya Narayan
|-
| "Tanha Tanha Yahaan Pe Jeena"
| solo
|-
!''[[Saajan Ki Baahon Mein]]''
| "Purab Se Chali"
| Nadeem–Shravan
| Sameer
| Kumar Sanu
|-
!''Sanam Harjai''
| "Jaane Kaun Thi Haseena"
| Usha Khanna
| Sawan Kumar Tak
| Abhijeet Bhattacharya
|-
!''[[Sarhad: The Border of Crime|Sarhad]]''
| "Doodh Ban Jaoongi"
| Sukhwinder Singh
| Sameer
| solo
|-
!''[[Sauda]]''
| "Koi Dil Na Kisise Lagaye"
| Aadesh Shrivastava
| Kulwant Jani
| Sonu Nigam
|-
! Rowspan=4| ''[[Vartmaan]]''
| "Jhumka Kajra Bindiya"
|rowspan=4| Raam Laxman
| Rani Malik
| solo
|-
| "Kabhi Tum Sanam Ho"
|rowspan=2| Dev Kohli
|rowspan=2| Kumar Sanu
|-
| "Rumba Rumba, Tu Jo Mera Yaar Bane"
|-
| "Tujhe Main Dil Kahoon"
| Maya Govind
| Vipin Sachdeva
|-
! Rowspan=1| ''Zulm Ka Jawab''
| "Aa Re Aa Zara Ab Der Kya"
| rowspan=1| Bappi Lahiri
| rowspan=1| Indeevar, Sunil Sinha
| rowspan=1| Shailendra Singh
|-
|}
=== 1996 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! Rowspan=3| ''[[Aatank]]''
| "Main Door Chali"
| rowspan=3| Laxmikant–Pyarelal
| rowspan=3| Dev Kohli, Rani Malik
| rowspan=2| solo
|-
| "Meri Jawani"
|-
| "Kya Raat Hai"
| [[Jolly Mukherjee]]
|-
! Rowspan=2| ''Armaan''
| "Main Dilwalon Ki Tamanna"
| rowspan=2| N/A
| rowspan=2| N/A
| rowspan=2| solo
|-
| "Yeh Haseen Wadiyaan"
|-
! Rowspan=4| ''[[Aur Ek Prem Kahani]]''
| "Hona Hai To Ho Hi Jayega"
| rowspan=4| Ilaiyaraaja
| rowspan=4| Amit Khanna
| Mano
|-
| "Naina Bole Naina" (part 1)
| rowspan=3| solo
|-
| "Naina Bole Naina" (part 2)
|-
| "Meri Zindagi Mile Kya Kab Yaha Hai"
|-
!''[[Aurat Aurat Aurat]]''
| "Bolo Jai Seeta Ram"
| Laxmikant–Pyarelal
| Anand Bakshi
| solo
|-
!''[[Bal Bramhachari (1996 film)|Bal Bramhachari]]''
| "Zara Chhu Ke Toh Dikha"
| Bappi Lahiri
| Prakash Mehra
| solo
|-
! rowspan=2| ''[[Daayraa]]''
| "Bolo Kya Tum, Bas Itna Sa"
| rowspan=2| Anand–Milind
| rowspan=2| Gulzar
| rowspan=2| solo
|-
| "Palkon Pe Chalte Chalte" (female)
|-
!''[[Dushman Duniya Ka]]''
| "Darwaza Kaahe Bandh Kiya"
| Anu Malik
| Ravindra Jain
| Sudesh Bhosle
|-
! ''English Babu Desi Mam''
| "Kaise Mukhde Se Nazrein Hataun"
| Nikhil–Vinay
| Yogesh
| solo
|-
!''[[Ghatak: Lethal]]''
| "Aaki Naaki"
| R D Burman
| Majrooh Sultanpuri
| solo
|-
!''[[Super Police|Khel Khiladi Ka]]''
| "Pakka Dilbar Jaani"
| A. R. Rahman
| Mehboob
| Udit Narayan
|-
! rowspan=2| ''[[Kisi Se Dil Laga Ke Dekho]]''
| "Tere Naina Neend Churaye"
| rowspan=2| Rajesh Roshan
| rowspan=2| Sameer
| Mohammed Aziz
|-
| "Pyaar Ki Kitaab Khol De"
| Amit Kumar
|-
!''[[Megha (film)|Megha]]''
| "Suna Hai Ji Jijaji"
| Raam Laxman
| Dev Kohli
| solo
|-
!''[[Raja Ki Aayegi Baraat]]''
| "Ankhein Ladi Tumse"
| Aadesh Shrivastava
| Dev Kohli, Madan Pal, Shyam Raj
| Kumar Sanu
|-
! Rowspan=2| ''[[Return of Jewel Thief]]''
| "Shaher Mein Shor"
| rowspan=2| Jatin–Lalit
| rowspan=2| Anand Bakshi
| solo
|-
| "O Jaan Jaan Jaani"
| Vinod Rathod
|-
! Rowspan=2| ''[[Sapoot]]''
| "Kajal Kajal"
| rowspan=2| Anu Malik
| rowspan=2| Dev Kohli
| rowspan=2| Amit Kumar
|-
| "Tukur Tukur"
|-
! Rowspan=2| ''[[Sardrai Begum]]''
| "More Kanha Jo Aaye"
| rowspan=2| Vanraj Bhatia
| rowspan=2| Javed Akhtar
| rowspan=2| solo
|-
| "Chaahe Maar Dalo Raja"
|-
! Rowspan=2|''[[Sautela Bhai]]''
| "Sajan Sajan"
| rowspan=2| R D Burman
| rowspan=2| Majrooh Sultanpuri
| solo
|-
| "Chahe Poochh Lo"
| Babla Mehta
|-
|}
=== 1997 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
!''[[Agnichakra (film)|Agnichakra]]''
| "Paisa Hi Paisa"
| Bappi Lahiri
| Amit Khanna
| solo
|-
! Rowspan=4| ''[[Aakhri Sanghursh]]''
| "Woh Sharaab Hai"
| rowspan=4| Hemant Bhosle
| rowspan=4| Anjaan
| rowspan=2| solo
|-
| "Nasha Hi Nasha Hai"
|-
| "Aanchal Pe Tera Hi Naam Likha"
| [[Mohammed Rafi]]
|-
| "Diya Dil Tujhko Diya"
| [[Kishore Kumar]]
|-
! Rowspan=2| ''[[Aar Ya Paar]]''
| "Aar Ya Paar" (Female)
| rowspan=2| Viju Shah
| rowspan=2| Maya Govind
| solo
|-
| "Dil Diya, Pyar Kiya"
| [[Sudesh Bhosle]]
|-
! ''Anjaane''
| "Sun Ai Master"
| Rajesh Roshan
| Amit Khanna
| Mohammed Aziz
|-
! Rowspan=2| ''[[Aur Pyaar Ho Gaya]]''<ref>{{Cite web|url=http://www.hindigeetmala.net/movie/aur_pyar_ho_gaya.htm|title = Aur Pyar Ho Gaya : Lyrics and video of Songs from the Movie Aur Pyar Ho Gaya (1997)}}</ref>
|"Jaagi Hui Fizayein"
| rowspan=2| Nusrat Fateh Ali Khan
| Rowspan=2| Javed Akhtar
|Udit Narayan
|-
|"Thoda Sa Pagla Thoda Siyaana"
| solo
|-
! ''[[Betaabi]]''
| "Tumhari Khushboo"
| colspan=2| Vishal Bhardwaj
| Suresh Wadkar
|-
! Rowspan=2| ''[[Chachi 420]]''
| "Jago Gori"
| rowspan=2| Vishal Bhardwaj
| rowspan=2| Gulzar
| Kamal Haasan, Shruti Haasan
|-
| "Gare Dore"
| [[Hariharan (singer)|Hariharan]]
|-
! Rowspan=1| ''Chand Grahan''
| "Kyun Khoon Baha"
| Santosh Nair
| Raajesh Johri
| solo
|-
!''[[Daadagiri]]''
| "Gore Rang Ka Hai Zamana"
| Dilip Sen–Sameer Sen
| Nawab Arzoo
| Udit Narayan
|-
!''[[Daava]]''
| "Kyun Aanchal Hamara"
| Jatin–Lalit
| Israr Ansari
| solo
|-
! Rowspan=6| ''[[Darmiyaan]]''
| "Pighalta Hua Ye Sama"
| rowspan=6| Bhupen Hazarika
| rowspan=6| Javed Akhtar
| Udit Narayan
|-
| "Main Juari Hoon"
| rowspan=3| solo
|-
| "Nadiya Pe Lehre Lehro Pe Naiya"
|-
| "Dekh Lu Jo Nazar Bhar Ke"
|-
| "Shina Gore Hazy Hazy Bobling"
| rowspan=2| Sudesh Bhosle
|-
| "Sa Ra Ra Ra Ra"
|-
! Rowspan=3| ''[[Daud (film)|Daud]]''
| "Zehreela Pyar"
| rowspan=3| A. R. Rahman
| rowspan=3| Mehboob
| Deena Chandra Das
|-
| "O Bhavre"
| K. J. Yesudas
|-
| "Oh! Sai Yaiye"
| S. P. Balasubrahmanyam
|-
!''[[Dil To Pagal Hai]]''
| "Dil Le Gayi Le Gayi"<ref>{{cite web |last1=Yadav |first1=Prerna |title=Happy Birthday Asha Bhosle: Revisit some iconic songs of legendry singer |url=https://www.indiatvnews.com/entertainment/celebrities/happy-birthday-asha-bhosle-revisit-some-iconic-songs-of-legendry-singer-732503 |publisher=[[India TV]] |access-date=16 June 2022 |language=en |date=8 September 2021}}</ref>
| Uttam Singh
| Anand Bakshi
| solo
|-
!''Dus''
| " Sur Mile Hain"
| Shankar–Ehsaan–Loy
| Sameer
| Udit Narayan, Shankar Mahadevan
|-
! Rowspan=2| ''Ghoonghat''
| "Ladki Hai Bholi"
|rowspan=2| Anand Raj Anand
| Dev Kohli
| Udit Narayan
|-
| "Gore Gore Paon Mein"
| Anand Raj Anand
| S. P. Balasubrahmanyam
|-
!''[[Krishna Arjun]]''
| "Namaste Ji"
| Arup–Pranay
| Yogesh, Nitesh Raj
| Abhijeet Bhattacharya, Nitesh Raj
|-
!''[[Lav Kush]]''
| "Nanha Munha Aayega Mehmaan"
| Raam Laxman
| Dev Kohli, Bhring Tupkari
| Usha Mangeshkar
|-
! Rowspan=3| ''Police Station''
| "De De Dil De De"
|rowspan=3| Kaushik
|rowspan=3| Navdeep
| Udit Narayan
|-
| "Dilli Se Mangwaya Anokhe Chudiyan"
| rowspan=2| solo
|-
| "Mere Sone Ka Badan"
|-
! Rowspan=1| ''Sajana Doli Leke Aana''
| "Teri Meri Hogi Shaadi"
|rowspan=1| M. M. Keeravani
|rowspan=1| P. K. Mishra
| Vinod Rathod
|-
! Rowspan=3| ''Salma Pe Dil Aa Gaya''
| "Zara Dholaki Bajaao Goriyo"
| rowspan=3| Aadesh Shrivastava
| rowspan=1| Sawan Kumar Tak
| rowspan=1| Udit Narayan
|-
| "Salma Pe Dil Aa Gaya" (version 1)
| rowspan=2| Shyam Raj
| Udit Narayan, Amit Kumar
|-
| "Salma Pe Dil Aa Gaya" (version 2)
| Kumar Sanu, Amit Kumar
|-
|}
=== 1998 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
!''[[Aakrosh (1998 film)|Akrosh]]''
| "Madhosh Ho Gaya Main"
| Anand Raj Anand
| Faiz Anwar
| Abhijeet Bhattacharya
|-
!''[[Badmaash (1998 film)|Badmaash]]''
| "Naam Chhalka-e-Jaam"
| Shyam–Surender
| Ibrahim Ashq
| solo
|-
!''[[Dand Nayak]]''
| "Aa Piya Aa Oiya, Meri Gali Aaja"
| Rajesh Roshan
| Anand Bakshi
| Udit Narayan
|-
!''[[Dushman (1998 film)|Dushman]]''
| "Hippy Hippy Ya"
| Uttam Singh
| Anand Bakshi
| Shankar Mahadevan
|-
!''[[Ghar Bazar]]''
| "Dil Ki Awaaz Hai Main Teri Ho Gayi"
| Usha Khanna
| Kulwant Jani
|solo
|-
!''[[Hitler]]''
| Haseen Sama Hai"
| Dilip Sen–Sameer Sen
| Sameer
| Abhijeet Bhattacharya
|-
!''[[Kabhi Na Kabhi]]''
| "Mere Fil Ka Woh Shehzada"
| A. R. Rahman
| Javed Akhtar
| solo
|-
! Rowspan=5| ''[[Mil Gayee Manzil Mujhe]]''
| "Ja Main Tose Rooth Gayi"
| rowspan=5| R D Burman
| rowspan=5| Anand Bakshi
| rowspan=2| solo
|-
| "Janam Kahin Na Jaya Karo"
|-
| "Tum Jo Mile To Phool Khile"
| rowspan=2| [[Kishore Kumar]]
|-
| "Yeh Zindagi Ka Fasana Hai Kya"
|-
| "Ek Taraf Tum, Ek Taraf Hum"
| [[Kishore Kumar]], [[Shailendra Singh (singer)|Shailendra Singh]]
|-
!rowspan=3| ''[[Pyaar To Hona Hi Tha]]''
| "Ajnabi Mujhko Itna Bataa De"
| rowspan=3| Jatin–Lalit
| rowspan=3| Sameer
| rowspan=2| Udit Narayan
|-
| "Aashiq Hoon Main"
|-
| "Jo Hona Hai"
| Mohammad Aziz, Sudesh Bhosle, Vinod Rathod, Bali Brahmabhatt
|-
! ''[[Qila (film)|Qila]]''
| "Ankhiyan Teh Ankhiyan"
| Anand Raj Anand
| Dev Kohli
| Udit Narayan
|-
! ''[[Satya (1998 film)|Satya]]''<ref>{{Cite web|url=https://m.hindigeetmala.net/movie/satya.htm|title=Satya : Lyrics and video of Songs from the Movie Satya (1998)|website=HindiGeetMala}}</ref>
| "Sapne Mein Milta Hai"
| Vishal Bhardwaj
| Gulzar
| Suresh Wadkar
|-
! ''Sham Ghansham''
| "Prem Mein Paagal Ho Gayi Meera"
| Vishal Bhardwaj
| Anand Bakshi
| Suresh Wadkar, Vishwajeet, Brahmacharya
|-
!''[[Swami Vivekananda (1998 film)|Swami Vivekananda]]''
| "Sanyasi Talaasi Jiski Hai"
| Salil Chowdhury
| Gulzar
| K. J. Yesudas
|-
! Rowspan=1| ''[[Yugpurush]]''
| "Koi Jaise Mere Dil Ka"
| Rajesh Roshan
| Majrooh Sultanpuri
| solo
|-
|}
=== 1999 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
!''Akeli''
| "Kya Ajeeb Sheh Haye Yeh Zindagi"
| Jeetu–Tarpan
|
| solo
|-
!''Dil Ka Sauda''
| "Kya Sama Hai Kya Husn Hai"
| Baba Jagirdar
| Himanshu Upadhyay
| solo
|-
! Rowspan=3| ''Double Gadbad''
| "Holey Holey"
| rowspan=3| Baba Sehgal
| rowspan=3| Baba Sehgal
| rowspan=3| Baba Sehgal
|-
| "Main Deewana"
|-
| "Sainya Sainya"
|-
!''[[Hindustan Ki Kasam (1999 film)|Hindustan Ki Kasam]]''
| "Tere Dil Ke Paas"
| Sukhwinder Singh
| Anand Bakshi
| Sonu Nigam
|-
!''[[Lal Baadshah]]''
| "Koi Hai Dil Denewala"
| Aadesh Shrivastava
| Shyam Raj
| Sudesh Bhosle
|-
! Rowspan=3| ''[[Mast (film)|Mast]]''
| "Hey Rama Krishna Govinda Gopala"
| rowspan=3| Sandeep Chowta
| rowspan=3| Nitin Raikwar
| rowspan=2| solo
|-
| "Na Govinda Na Shah Rukh"
|-
| "Main Tere Dil Ki Malika"
| Sonu Nigam
|-
!''[[Pyaar Koi Khel Nahin]]''
| "Apni To Life Mein"
| Jatin–Lalit
| Majrooh Sultanpuri
| solo
|-
!''Split Wide Open''
| "Jaane Na Koi"
|
|
| solo
|-
!''[[Taal (film)|Taal]]''
| "Kahin Aag Lage"
| A. R. Rahman
| Anand Bakshi
| Aditya Narayan, Richa Sharma
|-
!''[[Takshak]]''
| "Mujhe Rang De"
| A. R. Rahman
| Mehboob
| solo
|-
! Rowspan=7| ''[[Zulmi]]''
| "Teri Badmashiyan Aur Meri"
| rowspan=5| Dilip Sen–Sameer Sen
| rowspan=7| Gulshan Bawra
| [[Udit Narayan]]
|-
| "Bhool Se Humne Bhool Ki" (Happy)
| [[Kumar Sanu]]
|-
| "Mere Liye To Fit Hai Tu"
| Amit Kumar
|-
| "Zulmi Toone Zulm Kiya"
| rowspan=4| solo
|-
| "Bhool Se Humne Bhool Ki" (Sad)
|-
| "Sapne Mein Aake Loot Gaya"
| Satyedhar Pal
|-
| "Phir Chand Se"
| R D Burman
|-
|}
== 2000s ==
=== 2000 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
!''[[Agniputra]]''
| "Solah Baras Intezaar Kar Liya"
| Nikhil–Vinay
| Anand Bakshi
| solo
|-
!''[[Fiza]]''
| "Badtamizi Pe Hum Aa Gaye Toh, Aankh Milaoongi"
| Anu Malik
| Sameer
| solo
|-
! ''[[Dil Pe Mat Le Yaar!]]''
| "Dil Pe Mat Le Yaar"
| Vishal Bhardwaj
| Abbas Tyrewala
| solo
|-
!''[[Gang (film)|Gang]]''
| "Chhodke Na Jaana"
| R D Burman
| Javed Akhtar
| solo
|-
!''[[Hey Ram]]''
| "Janmon Ki Jwala"
| Ilaiyaraaja
| Sameer
| Hariharan
|-
!''[[Kaho Naa... Pyaar Hai]]''
| "Janeman Janeman"
| Rajesh Roshan
| Sawan Kumar Tak
| solo
|-
!''[[Karobaar]]''
| "Duniya Mein Sabse"
| Rajesh Roshan
| Javed Akhtar
| Kumar Sanu, Udit Narayan
|-
!''[[Khauff]]''
| "Naach Baby Naach Kudi"
| Anu Malik
| Dev Kohli
| Daler Mehndi
|-
!''Le Chal Apne Sang''
| "Haseena Haseena"
| Raam Laxman
| Shaily Shailendra
| Udit Narayan
|-
!rowspan=4| ''Pyaase Honth''
| "Chalo Do Dilon Ki Mohabbat Ke Naam"
| rowspan=4| Laxmikant–Pyarelal
| rowspan=4| Rajendra Krishan
| rowspan=4| solo
|-
| "Dilwale O Dilwale"
|-
| "Kisi Ne Poochha Main Kya Bechti Hoon"
|-
| "Nikli Jo Koi Lehar"
|-
!''[[Shikari (2000 film)|Shikari]]''
| "Bheja Hai Ek Gulaab"
| Aadesh Shrivastava
| Madan Pal
| Kumar Sanu
|-
|}
=== 2001 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! rowspan=2| ''Do Yaar''
| "Ankhon Mein Masti Hai"
|rowspan=2| Usha Khanna
|rowspan=2| Indeevar, Naqsh Lyallpuri, Onkar Verma
|rowspan=2| solo
|-
| "Yeh Gajra Tujhe Bulaaye"
|-
! Rowspan=3| ''[[Grahan]]''
| "Yeh Sochta Hai"
| rowspan=3| Karthik Raja
| rowspan=3| Mehboob
| [[Hariharan (singer)|Hariharan]]
|-
| "Chup Chup"
| rowspan=2| [[Abhijeet Bhattacharya|Abhijeet]]
|-
| "Aaj Main Khush"
|-
! ''[[Lagaan]]''
| "Radha Kaise Na Jale"<ref>{{cite web |title=WATCH: These Lord Krishna-inspired Songs will Get You in the Mood to Celebrate Janmashtami 2021 |url=https://www.news18.com/news/lifestyle/watch-these-lord-krishna-inspired-songs-will-get-you-in-the-mood-to-celebrate-janmashtami-2021-4142528.html |publisher=[[News18]] |access-date=17 June 2022 |language=en |date=30 August 2021}}</ref>
| A. R. Rahman
| Javed Akhtar
| solo
|-
! rowspan=2| ''[[Love Ke Liye Kuch Bhi Karega]]''
| "Rama Rama"
| rowspan=2| Vishal Bhardwaj
| rowspan=2| Abbas Tyrewala
| Sonu Nigam
|-
| "Socho Kya Karogi"
| KK
|-
! Rowspan=2| ''[[Pyaar Tune Kya Kiya]]''
| "Kambakht Ishq"
| rowspan=2| Sandeep Chowta
| rowspan=2| Nitin Raikwar
| rowspan=2| [[Sonu Nigam]], [[Sukhwinder Singh]]
|-
| "Kambakht Ishq" (remix)
|-
! rowspan=3| ''Raat Ke Sauagar''
| "Mere Khayalon Mein"
|rowspan=3| Dilip Sen–Sameer Sen
|rowspan=3| Mahendra Dalvi, Yogesh
| Kumar Sanu
|-
| "Hai Ishq Ab"
| solo
|-
| "Logon Ne Kaha"
| Mohammed Aziz
|-
!''Shirdi Sai Baba''
| "Dwarakami Tere Angan Mein"
| colspan=2| Pandurang Dixit
| solo
|-
!''[[Yaadein (2001 film)|Yaadein]]''
| "Jab Dil Miley"
| Anu Malik
| Anand Bakshi
| Udit Narayan, Sukhwinder Singh, Sunidhi Chauhan
|-
|}
=== 2002 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
!''Anita and Me''
| "Gunguna Rahe Hain Bhawre"
| S. D. Burman
| Anand Bakshi
| Mohammed Rafi
|-
! rowspan=3| ''Aakhir Kaun Thi Woh''
| "Ganpati Bappa Morya"
| rowspan=3| Sumanji Suman
| rowspan=3|
| Suresh Wadkar
|-
| "Mujhko Toh Pyaar Ho Gaya"
| Mohammed Aziz
|-
| "Jaise Jaise Raat Ka Yeh Rang Jaayega"
| solo
|-
!''Be-Lagaam''
| "Mehfil Mein Aaya Hai"
| Amar–Akbar
| Gauhar Kanpuri, Tauqeer Zaidi
| solo
|-
!''[[Chhal]]''
| "Dil Jhanjhana Le"
| Viju Shah
| Amitabh Verma
| solo
|-
! Rowspan=2| ''[[Company (2002 film)|Company]]''
| "Khallas"
| rowspan=2| [[Sandeep Chowta]]
| rowspan=2| Nitin Raikwar
| rowspan=2| [[Sudesh Bhosle]], [[Sapna Awasthi]]
|-
| "Khallas" (remix)
|-
!''[[Filhaal...]]''
| "Filhaal"
| Anu Malik
| Gulzar
| solo
|-
! Rowspan=2| ''[[Hathyar (2002 film)|Hathyar]]''
| "Thamba Re Thamba, Rok Teekhi Najariya"
| rowspan=2| Anand Raj Anand
| Dev Kohli
| rowspan=2| Mohammad Salamat
|-
| "Nazar Nazar Mein Haal-e-Dil Ka Pataa Chalta Hai"
| Praveen Bhardwaj
|-
! Rowspan=2| ''Inth Ka Jawaab Paththar''
| "Rajai Odh Ke"
| rowspan=2| Ramalaxman
| rowspan=2| Shaheen Iqbal
| rowspan=2| Udit Narayan
|-
| "Ik Ladke Pe Aa Gaya Hai"
|-
!''[[Kranti (2002 film)|Kranti]]''
| "Jung Ho Ya Pyaar"
| Jatin–Lalit
| Anand Bakshi
| solo
|-
!''[[Maa Tujhhe Salaam (2002 film)|Maa Tujhe Salaam]]''
| "Sone Ke Jaisi Hai Meri Jawaani"
| Sajid–Wajid
| Sameer
| solo
|-
!''[[Mere Yaar Ki Shaadi Hai]]''
| "Sharara Sharara"
| Jeet Ganguly and Pritam Chakraborty
| Javed Akhtar
| Sonu Nigam
|-
!''[[Mujhse Dosti Karoge!]]''
| "Mujhse Dosti Karoge!"
| Rahul Sharma
| Anand Bakshi
| Alka Yagnik, Udit Narayan
|-
!''[[Rishtey (film)|Rishtey]]''
| "Dilbar Dilbar"
| Sanjeev–Darshan
| Abbas Katka
| solo
|-
!''[[Saathiya (2002 film)|Saathiya]]''
| "Chori Pe Chori"
| A. R. Rahman
| Gulzar
| Karthik, Blaaze
|-
!''[[Soch]]''
| "Dil Dhoonde"
| Jatin–Lalit
| Sameer
| KK
|-
|}
=== 2003 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
!''[[Aapko Pehle Bhi Kahin Dekha Hai]]''
| "Aisi Aankhen Nahin Dekhi"
| Nikhil–Vinay
| Sameer
| Jagjit Singh
|-
! rowspan=2| ''[[Bhoot (film)|Bhoot]]''
| "Bhoot Hai Yahan Koi"
| rowspan=2| Amar Mohile
| Jaideep Sahni
| rowspan=2| solo
|-
| "Dead But Not Asleep"
| N/A
|-
!''[[Chupke Se]]''
| "Kehte Kehte Ruk Jaati Hai"
| Vishal Bhardwaj
| Gulzar
| Lucky Ali
|-
!''[[Escape From Taliban]]''
| "Kahan Se Aate Hai"
| Babul Bose
| Mehboob
| Sunidhi Chauhan
|-
! ''[[Footpath (2003 film)|Footpath]]''
| "Chain Aapko Mila"
| Nadeem–Shravan
| rowspan=2| Sameer
| S. P. Balasubrahmanyam
|-
!''[[Joggers' Park]]''
| "Habba Habba Hui"
| Tabun Sutradhar
| solo
|-
! Rowspan=6| ''[[Khwahish]]''
| "Baila Baila"
| rowspan=6| Milind Sagar
| rowspan=6| Faiz Anwar
| rowspan=3| solo
|-
| "Rang Raliyan"
|-
| "Sapnon Mein"
|-
| "Hum Dono Hain Khoye"
| rowspan=2| [[Udit Narayan]]
|-
| "Gungunati Hai"
|-
| "Jaaneman"
| [[Krishnakumar Kunnath|KK]]
|-
! Rowspan=2| ''Kyon?''
| "Badalon Ki Oat Mein" (female)
| rowspan=2| Bhupen Hazarika
| rowspan=2| Prasoon Joshi
| rowspan=2| solo
|-
| "Jaa Re Jaa"
|-
!''[[Paanch]]''
| "Jism Hai"
| Vishal Bhardwaj
| Abbas Tyrewala
| solo
|-
!''Sandhya''
| "Maar Gayo Re" (version 2)
| colspan=2| Anand Raj Anand
| solo
|-
! Rowspan=2| ''[[Satta (2003 film)|Satta]]''
| "Gungunaati Hai, Geet Gaati Hai" (female)
| rowspan=2| Raju Singh
| rowspan=2| Javed Akhtar
| rowspan=2| solo
|-
| "More Saiyan Bhaye Kotwal"
|-
!''[[Tehzeeb (2003 film)|Tehzeeb]]''
| "Meherbaan"
| A. R. Rahman
| Javed Akhtar
| Sukhwinder Singh
|-
|}
=== 2004 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
!''[[Dev (2004 film)|Dev]]''
| "Meri Justuju Bhi Tu Hai"
| Aadesh Shrivastava
| Saawan Kumar Tak
| Aadesh Shrivastava
|-
!''[[Kis Kis Ki Kismat]]''
| "Talk of The Town"
| D. Imman
| Farhad Wadia
| solo
|-
!''Kuchh To Gadbad Hai''
| "Makn Bhi Jawaan, Tu Bhi Jawaan"
| Baba Jagirdar
| Jay Babla
| Sonu Nigam
|-
!''[[Lakeer]]''
| "Offho Jalta Hai"
| A. R. Rahman
| Mehboob
| Sonu Nigam
|-
!''[[Meenaxi]]''
| "Dhuan"
| A. R. Rahman
| Rahat Indori
| solo
|-
!''[[Thoda Tum Badlo Thoda Hum]]''
| "Uff Yumma"
| Amar Mohile
| Nitin Raikwar
| KK
|-
! Rowspan=3|''[[Yeh Lamhe Judaai Ke]]''
| "Tum Paas Ho Jab Mere"
| rowspan=3| Nikhil–Vinay
| Chander
| Kumar Sanu
|-
| "Teriyan Mohabattan"
| Rani Malik
|-
| "Mere Dil Ko Kare Bekaboo"
| N/A
| [[Udit Narayan]]
|-
|}
=== 2005 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
! ''Ankhon Mein Sapne Liye''
| "Maria"
| Nilu Niranjana
| Leena Chandavarkar
| solo
|-
! ''[[Bewafaa (2005 film)|Bewafaa]]''
| "Kehta Hai Kabutar Kya"
| Nadeem–Shravan
| Sameer
| Shaan
|-
!rowspan=2| ''[[Bhagmati (2005 film)|Bhagmati]]''
| "Jiya Jaye Amma"
| rowspan=2| Vishal Bhardwaj
| Nida Fazli
| Roop Kumar Rathod
|-
| "Prem Diwani"
| Ashok Kaul
|-
!rowspan=2| ''[[Double Cross (2005 film)|Double Cross]]''
| "Nahin Nahin Abhi Nahin"
| rowspan=2| DJ Aqeel, R D Burman
| rowspan=2| Anand Bakshi
| Kishore Kumar
|-
| "Jaanu Meri Jaan"
| Kishore Kumar, Mohammed Rafi, Usha Mangeshkar
|-
!''[[Koi Mere Dil Mein Hai]]''
| "Bahon Mein Nahin Rehna"
| Nikhil–Vinay
| Faiz Anwar
| Adnan Sami
|-
!rowspan=2| ''[[Lucky: No Time for Love]]''
| "Lucky Lips"
| rowspan=2| Adnan Sami
| rowspan=2| Sameer
| rowspan=2| solo
|-
| "Lucky Lips" (Bulsoi Mix)
|-
!''Mahiya: Call of Love''
| "Aaja Meri Bahon Mein Aa"
| J. Subhash, Shekhar Sharma
| Sudhakar Sharma, Vinay Bihari
| solo
|-
!''[[Page 3 (film)|Page 3]]''
| "Huzoor-e-Ala"
| Shamir Tandon
| Sandeep Nath
| Abhijeet Bhattacharya
|-
|}
=== 2006 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
!''[[Aatma (2006 film)|Aatma]]''
| "Ishq Hua Mujhe"
| Anchal Telesara
| Ibrahim Ashq
| solo
|-
! rowspan=2| ''[[Corporate (2006 film)|Corporate]]''
| "Lamha Lamha Zindagi Hai"
| rowspan=2| Shamir Tandon
|rowspan=2| Sandeep Nath
| rowspan=2| solo
|-
| "Lamha Lamha Zindagi Hai" (sad)
|-
!''[[Sandwich (2006 film)|Sandwich]]''
| "Hum Tum Hai Tanhai Hai"
| Sandeep Chowta
| Taabish Romani
| Sonu Nigam
|-
!''[[Teesri Aankh (2006 film)|Teesri Aankh]]''
| "Sharabiyon"
| colspan=2| Nitin Arora
| solo
|-
!''[[Utthaan]]''
| "Yeh Kaisa Utthaan Hai" (female)
| Kumar Sanu
| Sudhakar Sharma
| solo
|-
! Rowspan=2| ''[[Yatra (2006 film)|Yatra]]''
| "Jaam-e-Mohabbat Aankhon Se Hi"
| rowspan=2| Khayyam
| Ahmed Wasi
| rowspan=2| solo
|-
| "Madhur Madhur Door Koyi Bansuri Bajaaye"
| Maya Govind
|-
|}
=== 2007 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
!''50 Lakh''
| "Jaane Jaane Jaana"
| Hanif Sumra
| N/A
| solo
|-
!''[[Aap Kaa Surroor]]''
| "Mehbooba O Mehbooba"
| Himesh Reshammiya
| Sameer
| Himesh Reshammiya
|-
! Rowspan=2| ''Bal Ganesh''
| "Nanha Munna Bal Ganesh"
| rowspan=2| Sanjay Dhakan
| rowspan=2| Shabbir Ahmed
| Usha Mangeshkar
|-
| "Teeno Lok Me Pooja Jaye"
| Aneek Dhar, Amanat Ali
|-
!''[[Dhamaal]]''
| "Chandni Raat Hai Saiyan"
| Adnan Sami
| Sameer
| Amit Kumar
|-
|}
=== 2008 ===
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
!''[[1920 (film)|1920]]''
| "Aise Jalta Hai Jiya"
| Adnan Sami
| Sameer
| solo
|-
!''[[Don Muthu Swami]]''
| "Saath Saath Tum Chalo"
| Anu Malik
|
| Bhupinder Singh
|-
! rowspan=2| ''[[Mr. Black Mr. White]]''
| "Tu Makke Di Roti"
| rowspan=2| Shamir Tandon
| rowspan=2| Sameer
| rowspan=2| Mika Singh, Daler Mehndi
|-
| "Tu Makke Di Roti" (Alternate Dance Mix)
|-
! Rowspan=4| ''[[Yaar Meri Zindagi]]''
| "Naache Mera Pyar"
| rowspan=4| R D Burman
| rowspan=4| Majrooh Sultanpuri
| rowspan=4| solo
|-
| "Piya Tore Nanoya Ke"
|-
| "Pyara Ye Rishta Hai Mera"
|-
| "Raja Ke Aangna Aaye"
|-
|}
==2010s==
{| class="wikitable plainrowheaders" style="width:100%; textcolor:#000"
|- style="background:#b0e0e66;
! scope="col" style="width:23%;"|'''Year'''
! scope="col" style="width:23%;"|'''Film'''
! scope="col" style="width:23%;"|'''Song'''
! scope="col" style="width:20%;"|'''Composer(s)'''
! scope="col" style="width:16%;"|'''Writer(s)'''
! scope="col" style="width:18%;"|'''Co-artist(s)'''
|-
| rowspan=4| 2011
! Rowspan=2| ''[[Chargesheet (film)|Chargesheet]]''
| "Sapnon ki Hoon Main Rani"
| Sanjay Jaydeep
| Anant Joshi
| rowspan=2| solo
|-
| "Har Dil Akela"
| AD Boyz
| N/A
|-
!''[[Ragini MMS]]''
| "Raat Akeli Hai"
| S. D. Burman
| Majrooh Sultanpuri
| solo
|-
!''[[Tanu Weds Manu Returns]]''
| "Kajra Mohabbatwala"
| O. P. Nayyar
| S. H. Bihari
| Shamshad Begum
|-
| rowspan=4| 2013
!''[[Hai Golmaal In White House]]''
| "Dil Lagane Ko Jab Dil"
| Shamir Tandon
|
| solo
|-
! rowspan=2| ''[[Mai (2013 film)|Mai]]''
| "Mai (Title Song)"
| rowspan=2| Manoj Tapadia
| rowspan=2| Nitin R Shankar
| rowspan=2| solo
|-
| "Chanda Ki Bindiya"
|-
!''Sona Spa''
| "Neend Ka Bijness"
| Shamir Tandon
| Sameer
| Sudesh Bhosle
|-
| rowspan=8| 2014
!''Darr Ke Aage Jeet Hai''
| "Shikh Ishaare Mast Nazaare" (female)
| N/A
| N/A
| solo
|-
!''Enough Is Enough''
| "Kayamat Se Pehle Kayamat Hai Aayi"
| Arshad Ahmed
| Shahid Hamdani
| solo
|-
!''[[Kaash Tum Hote]]''
| "Betaab Tamanna Thi"
| Vinay Tiwari
| Shabbir Ahmed
| Sonu Nigam
|-
!''[[Queen (2013 film)|Queen]]''
| "Hungama Ho Gaya" (remix)
| Laxmikant–Pyarelal, Amit Trivedi
| Verma Malik
| Arijit Singh
|-
!''[[Revolver Rani]]''
| "Kaafi Nahin Chand"
| Sanjeev Shrivastava
| Shaheen Iqbal
| solo
|-
! Rowspan=3| ''[[Tamanchey]]''
| "Pyar Mein Dil Pe Maar De Goli"
| R D Burman, Krsna
| rowspan=3| Puneet Sharma
| Bappi Lahiri and Kishore Kumar
|-
| "Pyar Mein Dil Pe Maar De Goli" (Munna & Babu Love Remix)
| DJ Khushi
| rowspan=2| Bappi Lahiri, Kishore Kumar and Luv O Trigger
|-
| "Pyar Mein Dil Pe Maar De Goli" (Disco Mix)
| DJ Shilpi Sharma
|-
| 2016
!''30 Minutes''
| "Tere Ishq Mein"
| Jaspal Moni
| Sanjay Dhupa Mishra
| Kunal Ganjawala
|-
| 2017
!''[[Begum Jaan]]''
| "Prem Mein Tohre"
| Anu Malik
| Kausar Munir
| solo
|-
| rowspan=2| 2019
!''[[Mere Pyare Prime Minister]]''
| "Bajaa Bajaa, Dhol Bajaa"<ref>{{Cite web|url=https://bollyspice.com/for-mere-pyare-prime-minister-rakeysh-omprakash-mehra-pays-homage-to-are-ja-re-hat-natkhat/|title=For Mere Pyare Prime Minister Rakeysh Omprakash Mehra pays homage to 'Are Ja Re Hat Natkhat'|first=Joginder|last=Tuteja|date=March 10, 2019}}</ref>
| Shankar–Ehsaan–Loy
| Gulzar
| Shankar Mahadevan, Divya Kumar, Rekha Bhardwaj, Neela Mulhekar, Shrinidhi Ghatate
|-
!''[[Saand Ki Aankh]]''
| "Aasmaa"
| Vishal Mishra
| Raj Shekhar
| solo
|-
| 2020
!''[[Bhangra Paa Le]]''
| "Ho Jaa Rangeela Re"
| Yash Narvekar, Kiranee, Shubham Shirule, Rishi Rich
| Shlok Laal, Yash Narvekar, Kiranee
| Shashwat Singh
|-
| 2022
! ''[[Life's Good (film)|Life's Good]]''
| "Rut Bheege Tan"
| [[Abhishek Ray]]
| Manvendra
| solo
|-
|}
==Hindi non-film songs==
{| class="wikitable sortable" style="width:100%"
|-
! Year
!Film!! Song || Music Director(s)|| Lyrics || Co-singer(s)
|-
| rowspan=2| 1950
!Rowspan=2| ''Aisi Lagan Laagi''
| "Aisi Lagan Laagi"
| rowspan=2| Jaidev
| rowspan=2| Meera
| rowspan=2| solo
|-
| "Phangan Ke Din Chaar"
|-
| rowspan=2| 1954
!''N/A''
| "Mann More Gaa Jhoom Ke"
| N/A
| N/A
| solo
|-
!''Umangon Ko Sakhi''
| "Ik Baat Kahun Mere Piya"
| Naushad
| Shakeel Badayuni
| solo
|-
| 1957
!''Vrindavan Ka Krishna Kanhaiya''
| "Sakhi Ri Sun Bole Papeeha"
| Shankar–Jaikishan
| N/A
| Lata Mangeshkar
|-
| rowspan=2| 1959
! Rowspan=2| ''Family Planning Songs''
| "Laal Tikon" (version 1)
| Rowspan=2| Prem Dhawan
| Rowspan=2| Prem Dhawan
| Rowspan=2| Mohammed Rafi
|-
| "Laal Tikon" (version 2)
|-
| rowspan=12| 1965
! Rowspan=12| ''Asha Bhosle''<ref>{{Cite web|url=https://www.discogs.com/release/9380872-Asha-Bhosle-Asha-Bhosle|title=Asha Bhosle - Asha Bhosle|via=www.discogs.com}}</ref>
| "Bhanwara Bada Nadan"
| Hemant Kumar
| Shakeel Badayuni
|-
| "Aaja Jaanejan Mere Meherban"
| Ramlal
| Hasrat Jaipuri
|-
| "Dayya Re Dayya"
| rowspan=2| Naushad
| rowspan=4| Shakeel Badayuni
|-
| "Tora Man Bada Papi"
|-
| "Dil Ki Kahani Rang Lai Hai"
| rowspan=4| Ravi
|-
| "Mohe Tircchi Nazaria"
|-
| "Mujhe Gale Se Laga Lo"
| Sahir Ludhianvi
|-
| "Iss Tarah Toda Mera Dil"
| Rajendra Krishan
|-
| "Nadi Nare Na Jao Shyam"
| Jaidev
| –
|-
| "Ankhon Se Jo Utri Hai"
| Rowspan=2| O. P. Nayyar
| Majrooh Sultanpuri
|-
| "Balma Khuli Hawa Men"
| S. H. Bihari
|-
| "Shokh Nazar Ki Bijliyan"
| Madan Mohan
| Raja Mehdi Ali Khan
|-
| rowspan=8| 1971
! Rowspan=8| ''An Unforgettable Treat''
| "Kabhi Neki Bhi Uske Ji Mein"
| rowspan=8| Jaidev
| rowspan=8| N/A
| rowspan=8| solo
|-
| "Kabhi Shak-O-Sabza-O-Barg Par"
|-
| "Shauq Har Rang Rakibe"
|-
| "Carvan Guzra Kiya"
|-
| "Aali Re Mere Naina Baan Par"
|-
| "Kaise Un Ko Paoon Aali"
|-
| "Na MainLadi Thi"
|-
| "Kolahal Kalahmen"
|-
| rowspan=12| 1978
! Rowspan=12| ''The Vibrantly Versatile''
| "Karle Pyar Karle"
| Rowspan=12| N/A
| rowspan=12| N/A
| rowspan=12| solo
|-
| "Phul Ud Chala"
|-
| "Hai Tauba Mujhe Tune"
|-
| "I Love You, You Love Me"
|-
| "Kali Kali Raat"
|-
| "Husn Ke Lakhon Rang"
|-
| "Do Pal Ki Hai Yeh Zindagani"
|-
| "Mere Noor Ke Charche"
|-
| "Mohabbat Sub Ke Dil Men Hai"
|-
| "Raja Dil Magey Chavanny Uchhal Ke"
|-
| "Aapka Sarkar Kya Kuchh"
|-
| "Jaga Jage Naino Mein"
|-
| rowspan=17| 1985
! Rowspan=9| ''Aabshar-e-Ghazal''
| "Yehi Wafa Ka Sila Hai Toh"
| rowspan=9| R D Burman
| rowspan=9| Gulzar
| rowspan=7| solo
|-
| "Log Kehte Hain Ajanabi Tum Ho"
|-
| "Kahin Taare Kahin Shabanam"
|-
| "Yu Na Thi Mujhse Berukhi Pehle"
|-
| "Jab Raat Ki Tanhaai"
|-
| "Salona Sa Sajan Hai Aur Main Hoon"
|-
| "Dard Dil Mein Utha Sochte Sochte"
|-
| "Kuch Dur Hamaare Saath Chalo"
| rowspan=2| Hariharan
|-
| "Pehle Bhi Jite The Magar"
|-
! Rowspan=8| ''Maa Ki Mahima''
| "Chalo Bhakto Chalo"
| rowspan=8| Surinder Kohli
| rowspan=2| Kartarchand Nirbal
| rowspan=8| solo
|-
| "Paar Karo Maa Bera"
|-
| "Tu Hi Durga Tu Hi Bhawani"
| rowspan=4| Akhtar Indori
|-
| "Main Tere Hi Gun Gaun
|-
| "Jai Mata Ki"
|-
| "Maa Ki Mahima"
|-
| "Maaye Ni Kunda Khol De"
| rowspan=2| Balbir Nirdesh
|-
| "Gal Sun Sheran Waliye"
|-
| rowspan=24| 1993
! rowspan=12| ''Bala Main Bairagan Hungi''<ref>{{Cite web|url=https://www.discogs.com/master/2741966-Asha-Bhosle-Bala-Main-Bairagan-Hungi-|title=Asha Bhosle - Bala Main Bairagan Hungi|via=www.discogs.com}}</ref>
| "Phagun Ke Din Chaar Holi Khel Mana Re"
| rowspan=12| N/A
| roaspan=12| N/A
| rowspan=12| Usha Mangeshkar, Meena Khadikar
|-
| "Sakhi Meri Neend Nasani Ho"
|-
| "Jo Tum Sunahu Jasoda"
|-
| "Jasoda Hari Palane Jhulavay"
|-
| "Mane Chakar Rakho Ji"
|-
| "Tum Suna Dayal Mhari Aaji"
|-
| "Re Sanwalia Mharay"
|-
| "Bala Main Bairagan Hungi"
|-
| "Aali Re Mere Naina Baan Par"
|-
| "Kaise Unko Paoon Aali"
|-
| "Na Main Ladi Thi"
|-
| "Tumul Kolahal Kalah Mein"
|-
! rowspan=12| ''Bala Main Bairagan Hungi'' (UK Version)<ref>[Bala Main Bairagan Hungi Asha Bhosle – Bala Main Bairagan Hungi – UK Version (1993) album at Discogs]</ref>
| "Phagun Ke Din Chaar Holi Khel Mana Re"
| rowspan=12| N/A
| roaspan=12| N/A
| rowspan=12| Usha Mangeshkar, Meena Khadikar
|-
| "Sakhi Meri Neend Nasani Ho"
|-
| "Jo Tum Sunahu Jasoda"
|-
| "Jasoda Hari Palane Jhulavay"
|-
| "Mane Chakar Rakho Ji"
|-
| "Tum Suna Dayal Mhari Aaji"
|-
| "Re Sanwalia Mharay"
|-
| "Bala Main Bairagan Hungi"
|-
| "Aali Re Mere Naina Baan Par"
|-
| "Kaise Unko Paoon Aali"
|-
| "Na Main Ladi Thi"
|-
| "Tumul Kolahal Kalah Mein"
|-
| rowspan=14| 1994
! Rowspan=7| ''Ishq Di Mala''
| "Balle Balle"
| rowapan=7| N/A
| rowspan=7| N/A
| rowspan=7| Jagjit Singh, Bhupinder Singh, Suresh Wadkar
|-
| "Thooha Larh Gaya"
|-
| "Pippal Pattiyan"
|-
| "Dil Mangiya"
|-
| "Ishq Dee Mala"
|-
| "Sari Raat"
|-
| "Jindua"
|-
! Rowspan=7| ''Ishq Di Mala'' (UK Version)
| "Balle Balle"
| rowapan=7| N/A
| rowspan=7| N/A
| rowspan=7| Jagjit Singh, Bhupinder Singh, Suresh Wadkar
|-
| "Thooha Larh Gaya"
|-
| "Pippal Pattiyan"
|-
| "Dil Mangiya"
|-
| "Ishq Dee Mala"
|-
| "Sari Raat"
|-
| "Jindua"
|-
| rowspan=16| 1996
! Rowspan=15| ''Asha Bhosle Sings for O. P. Nayyar''
| "Aaiye Meherbaan"
| rowspan=15| O. P. Nayyar
| rowspan=15| Various
| rowspan=15| solo
|-
| "Raat Rengeeli Chamke Tare"
|-
| "Poochho Na Hamen"
|-
| "Chhun Chhun Ghungroo Bole"
|-
| "Balma Khuli Hawa Mein"
|-
| "Yeh Hai Reshmi Zulfonka Andhera"
|-
| "Aankhon Se Jo Utri Hai Dil Mein"
|-
| "Yehi Woh Jagah Hai"
|-
| "Zara Haule Haule Chalo Mere Sajna"
|-
| "Yaar Badshah Yaar Dilruba"
|-
| "Raaton Ko Chori Chori"
|-
| "Woh Hanske Mile Hum Se"
|-
| "[[Aao Huzoor Tumko]]"
|-
| "Woh Haseen Dard De Do"
|-
| "Chain Se Ham Ko Kabhi"
|-
!''Shiv Parvati''
| "Ayi Milan Ki Bela"
| Sharang Dev
|
| Kumar Sanu
|-
| rowspan=40| 1997
! Rowspan=8| ''Asha – Once More''
| "Parde Mein Rehne Do"
| Rowspan=8| Various
| Rowspan=8| Various
| rowspan=8| solo
|-
| "Aage Bhi Jaane Na Tu"
|-
| "Ek Pardesi Mera Dil"
|-
| "Yeh Mera Dil Pyar Ka Diwana"
|-
| "Jhumka Gira Re"
|-
| "Ude Jab Jab Zulfen Teri"
|-
| "Yeh Mera Dil Pyar Ka Diwana" (Hip Hop)
|-
| "Jaane Jaan O Meri Jaane Jaan"
|-
! Rowspan=8| ''Jaanam Samjha Karo'' (Indian Version 1)
| "Raat Shabnami"
| Rowspan=8| Leslie Lewis
| Rowspan=8| Majrooh Sultanpuri
| rowspan=8| solo
|-
| "Maine Dekhi Ek Pari"
|-
| "Ailo Tum To Dillagi Mein"
|-
| "Woh Na Bhule Jahan"
|-
| "Oye Hoye Oye Hoye"
|-
| "Dil Pe Naaz Tha"
|-
| "Bas Ek Bar Kahin Ek Bar"
|-
| "Saari Raat Kyon"
|-
! Rowspan=8| ''Jaanam Samjha Karo'' (Indian Version 2)
| "Raat Shabnami"
| Rowspan=8| Leslie Lewis
| Rowspan=8| Majrooh Sultanpuri
| rowspan=8| solo
|-
| "Maine Dekhi Ek Pari"
|-
| "Ailo Tum To Dillagi Mein"
|-
| "Woh Na Bhule Jahan"
|-
| "Oye Hoye Oye Hoye"
|-
| "Dil Pe Naaz Tha"
|-
| "Bas Ek Bar Kahin Ek Bar"
|-
| "Saari Raat Kyon"
|-
! Rowspan=8| ''Jaanam Samjha Karo'' (Uk Version 1)
| "Raat Shabnami"
| Rowspan=8| Leslie Lewis
| Rowspan=8| Majrooh Sultanpuri
| rowspan=8| solo
|-
| "Maine Dekhi Ek Pari"
|-
| "Ailo Tum To Dillagi Mein"
|-
| "Woh Na Bhule Jahan"
|-
| "Oye Hoye Oye Hoye"
|-
| "Dil Pe Naaz Tha"
|-
| "Bas Ek Bar Kahin Ek Bar"
|-
| "Saari Raat Kyon"
|-
! Rowspan=8| ''Jaanam Samjha Karo'' (Uk Version 2)
| "Raat Shabnami"
| Rowspan=8| Leslie Lewis
| Rowspan=8| Majrooh Sultanpuri
| rowspan=8| solo
|-
| "Maine Dekhi Ek Pari"
|-
| "Ailo Tum To Dillagi Mein"
|-
| "Woh Na Bhule Jahan"
|-
| "Oye Hoye Oye Hoye"
|-
| "Dil Pe Naaz Tha"
|-
| "Bas Ek Bar Kahin Ek Bar"
|-
| "Saari Raat Kyon"
|-
| rowspan=39| 1998
! Rowspan=8| ''Mausam Pyar Ka''
| "Barse Badal"
| Rowspan=8| Adnan Sami
| Rowspan=8| Gulzar, Riyaz–Ul–Rehman
| rowspan=8| solo
|-
| "Pyar Hai"
|-
| "Bheega Mausam"
|-
| "Aap Ki Surat"
|-
| "Yaad Aaya"
|-
| "Suhani Rut"
|-
| "Aye Khuda"
|-
| "Pyar Bina"
|-
! Rowspan=31| ''The Golden collection (Asha Bhosle and Mohammed Rafi Duets)''
| "Abhi Na Jao Chhod Kar"
| Jaidev
| Sahir Ludhianvi
| rowspan=31| Mohammed Rafi
|-
| "Aaja Panchhi Akela Hai"
| rowspan=3| S. D. Burman
| rowspan=3| Majrooh Sultanpuri
|-
| "Achhaji Main Hari Chalo"
|-
| "Deewana Mastana Hua Badal"
|-
| "Uden Jab Jab Zulfen Teri"
| rowspan=2| O. P. Nayyar
| Sahir Ludhianvi
|-
| "Aaye Hain Door Se"
| Majrooh Sultanpuri
|-
| "Zameen Se Humen Aasman"
| rowspan=2| Madan Mohan
| rowspan=3| Rajendra Krishan
|-
| "Kabhi Tera Daman"
|-
| "Dekh Humen Aawaz Na Dena"
| C. Ramchandra
|-
| "Yeh Raat Yeh Fizayen"
| S. Madan
| Majrooh Sultanpuri
|-
| "Chand Sa Mukhda"
| S. D. Burman
| Shailendra
|-
| "Ek Pardesi Mera Dil Le Gaya"
| O. P. Nayyar
| Qamar Jalalabadi
|-
| "Bahut Shukriya Badi Meharbani"
| S. H. Bihari
|-
| 'Dhalti Jaye Raat
| Lachhiram Tomar
| Anand Bakshi
|-
| "Jabse Tumhen Dekha Hai"
| Ravi
| Shakeel Badayuni
|-
| "In Baharon Mein"
| Roshan
|rowspan=2| Majrooh Sultanpuri
|-
| "Aaja Aaja Main Hoon Pyaar Tera"
| R. D. Burman
|-
| "Isharon Isharon Mein"
| rowspan=3| O. P. Nayyar
| rowspan=2| S. H. Bihari
|-
| "Aap Se Maine"
|-
| "Yeh Ab Aap Sochiye"
| Majrooh Sultanpuri
|-
| "Chha Gaye Badal"
| Roshan
| Sahir Ludhianvi
|-
| "Aap Ko Pyar Chhupane Ki"
| Madan Mohan
| Raja Mehdi Ali Khan
|-
| "Dilruba Dil Pe Tu"
| rowspan=3| Shankar–Jaikishan
| rowspan=3| Shailendra
|-
| "Panchhi Re O Panchhi"
|-
| "Raat Ke Humsafar"
|-
| "Sawan Aaye Ya Na Aaye"
| Naushad
| Shakeel Badayuni
|-
| "Dil To Pahle Se Madhosh Hai"
| O. P. Nayyar
| Shewan Rizvi
|-
| "Dhal Gaya Din"
| Laxmikant–Pyarelal
| rowspan=2| Anand Bakshi
|-
| "Gunguna Rahe Hain Bhanvre"
| S. D. Burman
|-
| "Jis Din Se Maine Tumko Dekha Hai"
| Madan Mohan
| rowspan=2| Majrooh Sultanpuri
|-
| "Chura Liya Hai Tumbe Jo Dil Ko"
| R. D. Burman
|-
| rowspan=38| 2001
! Rowspan=10| ''Aap Ki Asha''
| "Na Marte Hum"
| rowspan=10| N/A
| Rowspan=10| N/A
| rowspan=10| solo
|-
| "Has Ke Mila Na Karo"
|-
| "Aisa Bhi Kya" (Fast)
|-
| "Dil Pyar Mein Lutake"
|-
| "Uljhi Laton Ki Tarah"
|-
| "Salamat Salamat"
|-
| "Dekhna Ha-Aa"
|-
| "Dil Mere Gaye Ja"
|-
| "Aisa Bhi Kya" (Hip Hop)
|-
| Tribute To Majrooh Sahab"
|-
! Rowspan=25| ''Eternal Asha:Aaj...Kal...Hamesha''
| "Welcome By Asha"
| rowspan=25| various
| rowspan=25| various
| rowspan=24| solo
|-
| "Aaiye Meherbaan"
|-
| "Yeh Hai Reshmi Zulfonka"
|-
| "Asha As Helen"
|-
| "Aao Na, Gale Lagao Na"
|-
| "The Monica Legend"
|-
| "Piya Tu Ab To Aaja"
|-
| "Aaja Aaja"
|-
| "Asha On Madan Mohan"
|-
| "Jhumka Geera Re"
|-
| "Asha : The Making Of Chura Liya"
|-
| "Chura Liya"
|-
| "Yeh Mera Dil"
|-
| "Dum Maaro Dum"
|-
| "Dil Cheez Kya Hai"
|-
| "Yeh Ladka Hai Allah"
|-
| "Jaanam Samjha Karo"
|-
| "Asha Introduces Lucky Ali"
|-
| "Asha : The A.R. Rahman Experience"
|-
| "Rangeela Re"
|-
| "Asha On The Shobbana Samarth Family"
|-
| "Zara Sa Jhoom Loon Main"
|-
| "Range De"
|-
| "Le Gayee Le Gayee"
|-
| "Jaane Ja"
| Babul Supriyo
|-
! Rowspan=3| ''Shiv Stuti'' <ref>{{Cite web|url=https://gaana.com/album/shiv-stuti-hindi-0|title=Shiv Stuti (2001) Devotional Album by Asha Bhosle and Anuradha Paudwal}}</ref>
| "Utaro Aarti Bholenath Ki"
| rowspan=3| Gulshan Kumar
| rowspan=3| N/A
| rowspan=3| solo
|-
| "Le Ke Man Mein Aitbaar"
|-
| "Shiv Shiv Shiv"
|-
| rowspan=22| 2003
! Rowspan=10| ''Asha Top 10''
| "[[Dum Maro Dum (song)]]"
| rowspan=3| R D Burman
| rowspan=3| Majrooh Sultanpuri
| rowspan=1| solo
|-
| "[[Piya Tu Ab To Aaja]]"
| R D Burman
|-
| "[[Chura Liya Hai Tumne Jo Dil Ko]]"
|rowspan=2| Mohammed Rafi
|-
| "[[Yeh Ladka Hai Allah]]"
|-
| "Rangeela Re"
|rowspan=3| A. R. Rahman
| Mehboob
| solo
|-
| "Radha Kaise Na Jale"
| Javed Akhtar
| Udit Narayan, A. R. Rahman, Vaishali Samant
|-
| "Rang De"
| Sukhwinder Singh
| A. R. Rahman
|-
| "Le Gayee Le Gayee"
| Uttam Singh
| rowspan=2| Anand Bakshi
| solo
|-
| "Zara Sa Jhoom Loon Main"
| Jatin–Lalit
| Abhijeet Bhattacharya
|-
| "Ye Mera Dil"
| Kalyanji–Anandji
| Indeevar
|-
! rowspan=12| ''Bala Main Bairagan Hungi''<ref>{{Cite web|url=https://www.discogs.com/release/19619524-Asha-Bhosle-Main-Bairagan-Ho-Gayi-म-बरगन-ह-गई|title=Asha Bhosle - Main Bairagan Ho Gayi = मैं बैरागन हो गई|via=www.discogs.com}}</ref>
| "Phagun Ke Din Chaar Holi Khel Mana Re"
| rowspan=12| N/A
| roaspan=12| N/A
| rowspan=12| solo
|-
| "Sakhi Meri Neend Nasani Ho"
|-
| "Jo Tum Sunahu Jasoda"
|-
| "Jasoda Hari Palane Jhulavay"
|-
| "Mane Chakar Rakho Ji"
|-
| "Tum Suna Dayal Mhari Aaji"
|-
| "Re Sanwalia Mharay"
|-
| "Bala Main Bairagan Hungi"
|-
| "Aali Re Mere Naina Baan Par"
|-
| "Kaise Unko Paoon Aali"
|-
| "Na Main Ladi Thi"
|-
| "Tumul Kolahal Kalah Mein"
|-
| rowspan=9 | 2005
! Rowspan=9| ''A Brand Bew Album''
| "Aaj Jaane Ki Zid Na Karo"
| rowspan=9| various
| rowspan=9| various
| Rowspan=9| solo
|-
| "Sarakti Jaye Hai" (Ahista Ahista)
|-
| "Aawargi"
|-
| "Dil Mein Ek Lehar"
|-
| "Rafta Rafta"
|-
| "Mujhe Tum Nazar Se"
|-
| "Ranjish Hi Sahi"
|-
| "Chupke Chupke"
|-
| "Aaj Jaane Ki Zid Na Karo" (Video Edit)
|-
| rowspan=6| 2006
! Rowspan=6| ''Asha and Friends – Volume 1''
| "Mehbooba Dilruba"
| rowspan=6| Shamir Tandon
| rowspan=3| Vijay Akela
| Urmila Matondkar
|-
| "Aapke Dil Mein"
| rowspan=2| Sanjay Dutt
|-
| "Aapke Dil Mein (Dance Mix)
|-
| "Jamane Mein Aaye Diwane Naye"
| Ajay Jhingran
| solo
|-
| "Haan Mai Tumhara Hu"
| rowspan=2| Shamir Tandon, Brett Lee
| rowspan=2| Brett Lee
|-
| "Haan Main Tumhara Hu" (Remix)
|-
| rowspan=12| 2008
! Rowspan=12| ''Generations: A Musical Journey To Eternity''<ref>{{Cite web|url=https://www.discogs.com/release/20465074-Asha-Bhosle-Ghulam-Ali-Aamir-Ghulam-Ali-Generations-A-Musical-Journey-To-Eternity|title=Asha Bhosle, Ghulam Ali, Aamir Ghulam Ali - Generations / A Musical Journey To Eternity...|via=www.discogs.com}}</ref>
| "Naina Re Naina"
| rowspan=12| Aamir Ghulam Ali
| rowspan=12| Ahmad Anees
| Rowspan=12| Ghulam Ali
|-
| "Dheere Dheere Tere Pyar Mein"
|-
| "Socho Mein Gum Kyoon Hoon"
|-
| "Shaam Se Mann Udhas"
|-
| "Dil Se"
|-
| "Tore Bina"
|-
| "Ek Lamhe"
|-
| "Dil Bichadne Se"
|-
| "Naina Re Naina"
|-
| "Socho Mein Gum Kyoon Hoon" (Remix)
|-
| "Naina Re Naina" (Remix)
|-
| "Dheere Dheere Tere Pyar Mein" (Remix)
|-
| rowspan=4| 2010
! Rowspan=4| ''Psych Funk Sa-Re-Ga!''
| "Lekar Ham Diwana Dil"
| rowspan=3| R. D. Burman
| rowspan=4| various
| Kishore Kumar
|-
| "Aaj Mera Dil"
| rowspan=3| solo
|-
| "Dum Maro Dum Live" (Edit)
|-
| "Phir Teri Yaad"
| Hemant Bhosle
|-
| 2020
!''Single''
| "Main Hoon"
| Rohit Shridhar
| Rajita Kulkarni
| solo
|-
| N/A
! ''Single''
| "Maina O Maina"
| Salil Chowdhury
| N/A
| solo
|-
| N/A
! ''Single''
| "Neeyat-E-Shauq"
| Mohsin Raza
| Nasir Kazmi
| solo
|-
|}
===Hindi TV serial songs===
{| class="wikitable sortable" style="width:100%"
|-
! Year
!Film!! Song || Music Director(s)|| Lyrics || Co-singer(s)
|-
| 1993
! ''Alif Laila'' (Hindi)
| "Tera Hi Intezaar Tha"
| colspan=2| Ravindra Jain
| solo
|}
==Bibliography==
*{{cite book |last1=Premchand |first1=Manek |title=Yesterday's Melodies Today's Memories |date=27 December 2018 |publisher=Notion Press |isbn=978-1-64429-877-0 |url=https://books.google.com/books?id=ZJCBDwAAQBAJ&dq=asha+bhosle+recorded+songs&pg=PT107 |language=en}}
==References==
{{reflist|colwidth=30em}}
{{reflist|group=note}}
[[Category:Lists of songs recorded by Indian singers|Bhosle, Asha]]
mj0y9af07xgj8o6jmg36ty3kqpf5ai9
Module:Yesno
828
38665046
948473803
948472535
2020-04-01T06:27:55Z
MusikAnimal
14882394
Undid revision 948472533 by [[Special:Contributions/w>Vogone|w>Vogone]] ([[User talk:w>Vogone|talk]])
Scribunto
text/plain
-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to the template {{yesno}}.
return function (val, default)
-- If your wiki uses non-ascii characters for any of "yes", "no", etc., you
-- should replace "val:lower()" with "mw.ustring.lower(val)" in the
-- following line.
val = type(val) == 'string' and val:lower() or val
if val == nil then
return nil
elseif val == true
or val == 'yes'
or val == 'y'
or val == 'true'
or val == 't'
or val == 'on'
or tonumber(val) == 1
then
return true
elseif val == false
or val == 'no'
or val == 'n'
or val == 'false'
or val == 'f'
or val == 'off'
or tonumber(val) == 0
then
return false
else
return default
end
end
swdskn7svew8i9wuydn9uj5l3r2ghcs
Module:Arguments
828
41298065
948472485
948472482
2020-04-01T06:12:40Z
MusikAnimal
14882394
1 revision imported
Scribunto
text/plain
-- This module provides easy processing of arguments passed to Scribunto from
-- #invoke. It is intended for use by other Lua modules, and should not be
-- called from #invoke directly.
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local arguments = {}
-- Generate four different tidyVal functions, so that we don't have to check the
-- options every time we call it.
local function tidyValDefault(key, val)
if type(val) == 'string' then
val = val:match('^%s*(.-)%s*$')
if val == '' then
return nil
else
return val
end
else
return val
end
end
local function tidyValTrimOnly(key, val)
if type(val) == 'string' then
return val:match('^%s*(.-)%s*$')
else
return val
end
end
local function tidyValRemoveBlanksOnly(key, val)
if type(val) == 'string' then
if val:find('%S') then
return val
else
return nil
end
else
return val
end
end
local function tidyValNoChange(key, val)
return val
end
local function matchesTitle(given, title)
local tp = type( given )
return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title
end
local translate_mt = { __index = function(t, k) return k end }
function arguments.getArgs(frame, options)
checkType('getArgs', 1, frame, 'table', true)
checkType('getArgs', 2, options, 'table', true)
frame = frame or {}
options = options or {}
--[[
-- Set up argument translation.
--]]
options.translate = options.translate or {}
if getmetatable(options.translate) == nil then
setmetatable(options.translate, translate_mt)
end
if options.backtranslate == nil then
options.backtranslate = {}
for k,v in pairs(options.translate) do
options.backtranslate[v] = k
end
end
if options.backtranslate and getmetatable(options.backtranslate) == nil then
setmetatable(options.backtranslate, {
__index = function(t, k)
if options.translate[k] ~= k then
return nil
else
return k
end
end
})
end
--[[
-- Get the argument tables. If we were passed a valid frame object, get the
-- frame arguments (fargs) and the parent frame arguments (pargs), depending
-- on the options set and on the parent frame's availability. If we weren't
-- passed a valid frame object, we are being called from another Lua module
-- or from the debug console, so assume that we were passed a table of args
-- directly, and assign it to a new variable (luaArgs).
--]]
local fargs, pargs, luaArgs
if type(frame.args) == 'table' and type(frame.getParent) == 'function' then
if options.wrappers then
--[[
-- The wrappers option makes Module:Arguments look up arguments in
-- either the frame argument table or the parent argument table, but
-- not both. This means that users can use either the #invoke syntax
-- or a wrapper template without the loss of performance associated
-- with looking arguments up in both the frame and the parent frame.
-- Module:Arguments will look up arguments in the parent frame
-- if it finds the parent frame's title in options.wrapper;
-- otherwise it will look up arguments in the frame object passed
-- to getArgs.
--]]
local parent = frame:getParent()
if not parent then
fargs = frame.args
else
local title = parent:getTitle():gsub('/sandbox$', '')
local found = false
if matchesTitle(options.wrappers, title) then
found = true
elseif type(options.wrappers) == 'table' then
for _,v in pairs(options.wrappers) do
if matchesTitle(v, title) then
found = true
break
end
end
end
-- We test for false specifically here so that nil (the default) acts like true.
if found or options.frameOnly == false then
pargs = parent.args
end
if not found or options.parentOnly == false then
fargs = frame.args
end
end
else
-- options.wrapper isn't set, so check the other options.
if not options.parentOnly then
fargs = frame.args
end
if not options.frameOnly then
local parent = frame:getParent()
pargs = parent and parent.args or nil
end
end
if options.parentFirst then
fargs, pargs = pargs, fargs
end
else
luaArgs = frame
end
-- Set the order of precedence of the argument tables. If the variables are
-- nil, nothing will be added to the table, which is how we avoid clashes
-- between the frame/parent args and the Lua args.
local argTables = {fargs}
argTables[#argTables + 1] = pargs
argTables[#argTables + 1] = luaArgs
--[[
-- Generate the tidyVal function. If it has been specified by the user, we
-- use that; if not, we choose one of four functions depending on the
-- options chosen. This is so that we don't have to call the options table
-- every time the function is called.
--]]
local tidyVal = options.valueFunc
if tidyVal then
if type(tidyVal) ~= 'function' then
error(
"bad value assigned to option 'valueFunc'"
.. '(function expected, got '
.. type(tidyVal)
.. ')',
2
)
end
elseif options.trim ~= false then
if options.removeBlanks ~= false then
tidyVal = tidyValDefault
else
tidyVal = tidyValTrimOnly
end
else
if options.removeBlanks ~= false then
tidyVal = tidyValRemoveBlanksOnly
else
tidyVal = tidyValNoChange
end
end
--[[
-- Set up the args, metaArgs and nilArgs tables. args will be the one
-- accessed from functions, and metaArgs will hold the actual arguments. Nil
-- arguments are memoized in nilArgs, and the metatable connects all of them
-- together.
--]]
local args, metaArgs, nilArgs, metatable = {}, {}, {}, {}
setmetatable(args, metatable)
local function mergeArgs(tables)
--[[
-- Accepts multiple tables as input and merges their keys and values
-- into one table. If a value is already present it is not overwritten;
-- tables listed earlier have precedence. We are also memoizing nil
-- values, which can be overwritten if they are 's' (soft).
--]]
for _, t in ipairs(tables) do
for key, val in pairs(t) do
if metaArgs[key] == nil and nilArgs[key] ~= 'h' then
local tidiedVal = tidyVal(key, val)
if tidiedVal == nil then
nilArgs[key] = 's'
else
metaArgs[key] = tidiedVal
end
end
end
end
end
--[[
-- Define metatable behaviour. Arguments are memoized in the metaArgs table,
-- and are only fetched from the argument tables once. Fetching arguments
-- from the argument tables is the most resource-intensive step in this
-- module, so we try and avoid it where possible. For this reason, nil
-- arguments are also memoized, in the nilArgs table. Also, we keep a record
-- in the metatable of when pairs and ipairs have been called, so we do not
-- run pairs and ipairs on the argument tables more than once. We also do
-- not run ipairs on fargs and pargs if pairs has already been run, as all
-- the arguments will already have been copied over.
--]]
metatable.__index = function (t, key)
--[[
-- Fetches an argument when the args table is indexed. First we check
-- to see if the value is memoized, and if not we try and fetch it from
-- the argument tables. When we check memoization, we need to check
-- metaArgs before nilArgs, as both can be non-nil at the same time.
-- If the argument is not present in metaArgs, we also check whether
-- pairs has been run yet. If pairs has already been run, we return nil.
-- This is because all the arguments will have already been copied into
-- metaArgs by the mergeArgs function, meaning that any other arguments
-- must be nil.
--]]
if type(key) == 'string' then
key = options.translate[key]
end
local val = metaArgs[key]
if val ~= nil then
return val
elseif metatable.donePairs or nilArgs[key] then
return nil
end
for _, argTable in ipairs(argTables) do
local argTableVal = tidyVal(key, argTable[key])
if argTableVal ~= nil then
metaArgs[key] = argTableVal
return argTableVal
end
end
nilArgs[key] = 'h'
return nil
end
metatable.__newindex = function (t, key, val)
-- This function is called when a module tries to add a new value to the
-- args table, or tries to change an existing value.
if type(key) == 'string' then
key = options.translate[key]
end
if options.readOnly then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; the table is read-only',
2
)
elseif options.noOverwrite and args[key] ~= nil then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; overwriting existing arguments is not permitted',
2
)
elseif val == nil then
--[[
-- If the argument is to be overwritten with nil, we need to erase
-- the value in metaArgs, so that __index, __pairs and __ipairs do
-- not use a previous existing value, if present; and we also need
-- to memoize the nil in nilArgs, so that the value isn't looked
-- up in the argument tables if it is accessed again.
--]]
metaArgs[key] = nil
nilArgs[key] = 'h'
else
metaArgs[key] = val
end
end
local function translatenext(invariant)
local k, v = next(invariant.t, invariant.k)
invariant.k = k
if k == nil then
return nil
elseif type(k) ~= 'string' or not options.backtranslate then
return k, v
else
local backtranslate = options.backtranslate[k]
if backtranslate == nil then
-- Skip this one. This is a tail call, so this won't cause stack overflow
return translatenext(invariant)
else
return backtranslate, v
end
end
end
metatable.__pairs = function ()
-- Called when pairs is run on the args table.
if not metatable.donePairs then
mergeArgs(argTables)
metatable.donePairs = true
end
return translatenext, { t = metaArgs }
end
local function inext(t, i)
-- This uses our __index metamethod
local v = t[i + 1]
if v ~= nil then
return i + 1, v
end
end
metatable.__ipairs = function (t)
-- Called when ipairs is run on the args table.
return inext, t, 0
end
return args
end
return arguments
5qx9tzlul9ser30uxj9nbasjt92cevn
Module:Message box
828
40574910
1117705817
1097616255
2022-10-23T04:26:44Z
Legoktm
3855926
Replace [[Module:No globals]] with require( "strict" )
Scribunto
text/plain
require('strict')
local getArgs
local yesno = require('Module:Yesno')
local lang = mw.language.getContentLanguage()
local CONFIG_MODULE = 'Module:Message box/configuration'
local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'}
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getTitleObject(...)
-- Get the title object, passing the function through pcall
-- in case we are over the expensive function count limit.
local success, title = pcall(mw.title.new, ...)
if success then
return title
end
end
local function union(t1, t2)
-- Returns the union of two arrays.
local vals = {}
for i, v in ipairs(t1) do
vals[v] = true
end
for i, v in ipairs(t2) do
vals[v] = true
end
local ret = {}
for k in pairs(vals) do
table.insert(ret, k)
end
table.sort(ret)
return ret
end
local function getArgNums(args, prefix)
local nums = {}
for k, v in pairs(args) do
local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')
if num then
table.insert(nums, tonumber(num))
end
end
table.sort(nums)
return nums
end
--------------------------------------------------------------------------------
-- Box class definition
--------------------------------------------------------------------------------
local MessageBox = {}
MessageBox.__index = MessageBox
function MessageBox.new(boxType, args, cfg)
args = args or {}
local obj = {}
-- Set the title object and the namespace.
obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()
-- Set the config for our box type.
obj.cfg = cfg[boxType]
if not obj.cfg then
local ns = obj.title.namespace
-- boxType is "mbox" or invalid input
if args.demospace and args.demospace ~= '' then
-- implement demospace parameter of mbox
local demospace = string.lower(args.demospace)
if DEMOSPACES[demospace] then
-- use template from DEMOSPACES
obj.cfg = cfg[DEMOSPACES[demospace]]
elseif string.find( demospace, 'talk' ) then
-- demo as a talk page
obj.cfg = cfg.tmbox
else
-- default to ombox
obj.cfg = cfg.ombox
end
elseif ns == 0 then
obj.cfg = cfg.ambox -- main namespace
elseif ns == 6 then
obj.cfg = cfg.imbox -- file namespace
elseif ns == 14 then
obj.cfg = cfg.cmbox -- category namespace
else
local nsTable = mw.site.namespaces[ns]
if nsTable and nsTable.isTalk then
obj.cfg = cfg.tmbox -- any talk namespace
else
obj.cfg = cfg.ombox -- other namespaces or invalid input
end
end
end
-- Set the arguments, and remove all blank arguments except for the ones
-- listed in cfg.allowBlankParams.
do
local newArgs = {}
for k, v in pairs(args) do
if v ~= '' then
newArgs[k] = v
end
end
for i, param in ipairs(obj.cfg.allowBlankParams or {}) do
newArgs[param] = args[param]
end
obj.args = newArgs
end
-- Define internal data structure.
obj.categories = {}
obj.classes = {}
-- For lazy loading of [[Module:Category handler]].
obj.hasCategories = false
return setmetatable(obj, MessageBox)
end
function MessageBox:addCat(ns, cat, sort)
if not cat then
return nil
end
if sort then
cat = string.format('[[Category:%s|%s]]', cat, sort)
else
cat = string.format('[[Category:%s]]', cat)
end
self.hasCategories = true
self.categories[ns] = self.categories[ns] or {}
table.insert(self.categories[ns], cat)
end
function MessageBox:addClass(class)
if not class then
return nil
end
table.insert(self.classes, class)
end
function MessageBox:setParameters()
local args = self.args
local cfg = self.cfg
-- Get type data.
self.type = args.type
local typeData = cfg.types[self.type]
self.invalidTypeError = cfg.showInvalidTypeError
and self.type
and not typeData
typeData = typeData or cfg.types[cfg.default]
self.typeClass = typeData.class
self.typeImage = typeData.image
-- Find if the box has been wrongly substituted.
self.isSubstituted = cfg.substCheck and args.subst == 'SUBST'
-- Find whether we are using a small message box.
self.isSmall = cfg.allowSmall and (
cfg.smallParam and args.small == cfg.smallParam
or not cfg.smallParam and yesno(args.small)
)
-- Add attributes, classes and styles.
self.id = args.id
self.name = args.name
if self.name then
self:addClass('box-' .. string.gsub(self.name,' ','_'))
end
if yesno(args.plainlinks) ~= false then
self:addClass('plainlinks')
end
for _, class in ipairs(cfg.classes or {}) do
self:addClass(class)
end
if self.isSmall then
self:addClass(cfg.smallClass or 'mbox-small')
end
self:addClass(self.typeClass)
self:addClass(args.class)
self.style = args.style
self.attrs = args.attrs
-- Set text style.
self.textstyle = args.textstyle
-- Find if we are on the template page or not. This functionality is only
-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory
-- and cfg.templateCategoryRequireName are set.
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
if self.useCollapsibleTextFields
or cfg.templateCategory
and cfg.templateCategoryRequireName
then
if self.name then
local templateName = mw.ustring.match(
self.name,
'^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$'
) or self.name
templateName = 'Template:' .. templateName
self.templateTitle = getTitleObject(templateName)
end
self.isTemplatePage = self.templateTitle
and mw.title.equals(self.title, self.templateTitle)
end
-- Process data for collapsible text fields. At the moment these are only
-- used in {{ambox}}.
if self.useCollapsibleTextFields then
-- Get the self.issue value.
if self.isSmall and args.smalltext then
self.issue = args.smalltext
else
local sect
if args.sect == '' then
sect = 'This ' .. (cfg.sectionDefault or 'page')
elseif type(args.sect) == 'string' then
sect = 'This ' .. args.sect
end
local issue = args.issue
issue = type(issue) == 'string' and issue ~= '' and issue or nil
local text = args.text
text = type(text) == 'string' and text or nil
local issues = {}
table.insert(issues, sect)
table.insert(issues, issue)
table.insert(issues, text)
self.issue = table.concat(issues, ' ')
end
-- Get the self.talk value.
local talk = args.talk
-- Show talk links on the template page or template subpages if the talk
-- parameter is blank.
if talk == ''
and self.templateTitle
and (
mw.title.equals(self.templateTitle, self.title)
or self.title:isSubpageOf(self.templateTitle)
)
then
talk = '#'
elseif talk == '' then
talk = nil
end
if talk then
-- If the talk value is a talk page, make a link to that page. Else
-- assume that it's a section heading, and make a link to the talk
-- page of the current page with that section heading.
local talkTitle = getTitleObject(talk)
local talkArgIsTalkPage = true
if not talkTitle or not talkTitle.isTalkPage then
talkArgIsTalkPage = false
talkTitle = getTitleObject(
self.title.text,
mw.site.namespaces[self.title.namespace].talk.id
)
end
if talkTitle and talkTitle.exists then
local talkText
if self.isSmall then
local talkLink = talkArgIsTalkPage and talk or (talkTitle.prefixedText .. '#' .. talk)
talkText = string.format('([[%s|talk]])', talkLink)
else
talkText = 'Relevant discussion may be found on'
if talkArgIsTalkPage then
talkText = string.format(
'%s [[%s|%s]].',
talkText,
talk,
talkTitle.prefixedText
)
else
talkText = string.format(
'%s the [[%s#%s|talk page]].',
talkText,
talkTitle.prefixedText,
talk
)
end
end
self.talk = talkText
end
end
-- Get other values.
self.fix = args.fix ~= '' and args.fix or nil
local date
if args.date and args.date ~= '' then
date = args.date
elseif args.date == '' and self.isTemplatePage then
date = lang:formatDate('F Y')
end
if date then
self.date = string.format(" <span class='date-container'><i>(<span class='date'>%s</span>)</i></span>", date)
end
self.info = args.info
if yesno(args.removalnotice) then
self.removalNotice = cfg.removalNotice
end
end
-- Set the non-collapsible text field. At the moment this is used by all box
-- types other than ambox, and also by ambox when small=yes.
if self.isSmall then
self.text = args.smalltext or args.text
else
self.text = args.text
end
-- Set the below row.
self.below = cfg.below and args.below
-- General image settings.
self.imageCellDiv = not self.isSmall and cfg.imageCellDiv
self.imageEmptyCell = cfg.imageEmptyCell
-- Left image settings.
local imageLeft = self.isSmall and args.smallimage or args.image
if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'
or not cfg.imageCheckBlank and imageLeft ~= 'none'
then
self.imageLeft = imageLeft
if not imageLeft then
local imageSize = self.isSmall
and (cfg.imageSmallSize or '30x30px')
or '40x40px'
self.imageLeft = string.format('[[File:%s|%s|link=|alt=]]', self.typeImage
or 'Imbox notice.png', imageSize)
end
end
-- Right image settings.
local imageRight = self.isSmall and args.smallimageright or args.imageright
if not (cfg.imageRightNone and imageRight == 'none') then
self.imageRight = imageRight
end
-- set templatestyles
self.base_templatestyles = cfg.templatestyles
self.templatestyles = args.templatestyles
end
function MessageBox:setMainspaceCategories()
local args = self.args
local cfg = self.cfg
if not cfg.allowMainspaceCategories then
return nil
end
local nums = {}
for _, prefix in ipairs{'cat', 'category', 'all'} do
args[prefix .. '1'] = args[prefix]
nums = union(nums, getArgNums(args, prefix))
end
-- The following is roughly equivalent to the old {{Ambox/category}}.
local date = args.date
date = type(date) == 'string' and date
local preposition = 'from'
for _, num in ipairs(nums) do
local mainCat = args['cat' .. tostring(num)]
or args['category' .. tostring(num)]
local allCat = args['all' .. tostring(num)]
mainCat = type(mainCat) == 'string' and mainCat
allCat = type(allCat) == 'string' and allCat
if mainCat and date and date ~= '' then
local catTitle = string.format('%s %s %s', mainCat, preposition, date)
self:addCat(0, catTitle)
catTitle = getTitleObject('Category:' .. catTitle)
if not catTitle or not catTitle.exists then
self:addCat(0, 'Articles with invalid date parameter in template')
end
elseif mainCat and (not date or date == '') then
self:addCat(0, mainCat)
end
if allCat then
self:addCat(0, allCat)
end
end
end
function MessageBox:setTemplateCategories()
local args = self.args
local cfg = self.cfg
-- Add template categories.
if cfg.templateCategory then
if cfg.templateCategoryRequireName then
if self.isTemplatePage then
self:addCat(10, cfg.templateCategory)
end
elseif not self.title.isSubpage then
self:addCat(10, cfg.templateCategory)
end
end
-- Add template error categories.
if cfg.templateErrorCategory then
local templateErrorCategory = cfg.templateErrorCategory
local templateCat, templateSort
if not self.name and not self.title.isSubpage then
templateCat = templateErrorCategory
elseif self.isTemplatePage then
local paramsToCheck = cfg.templateErrorParamsToCheck or {}
local count = 0
for i, param in ipairs(paramsToCheck) do
if not args[param] then
count = count + 1
end
end
if count > 0 then
templateCat = templateErrorCategory
templateSort = tostring(count)
end
if self.categoryNums and #self.categoryNums > 0 then
templateCat = templateErrorCategory
templateSort = 'C'
end
end
self:addCat(10, templateCat, templateSort)
end
end
function MessageBox:setAllNamespaceCategories()
-- Set categories for all namespaces.
if self.invalidTypeError then
local allSort = (self.title.namespace == 0 and 'Main:' or '') .. self.title.prefixedText
self:addCat('all', 'Wikipedia message box parameter needs fixing', allSort)
end
if self.isSubstituted then
self:addCat('all', 'Pages with incorrectly substituted templates')
end
end
function MessageBox:setCategories()
if self.title.namespace == 0 then
self:setMainspaceCategories()
elseif self.title.namespace == 10 then
self:setTemplateCategories()
end
self:setAllNamespaceCategories()
end
function MessageBox:renderCategories()
if not self.hasCategories then
-- No categories added, no need to pass them to Category handler so,
-- if it was invoked, it would return the empty string.
-- So we shortcut and return the empty string.
return ""
end
-- Convert category tables to strings and pass them through
-- [[Module:Category handler]].
return require('Module:Category handler')._main{
main = table.concat(self.categories[0] or {}),
template = table.concat(self.categories[10] or {}),
all = table.concat(self.categories.all or {}),
nocat = self.args.nocat,
page = self.args.page
}
end
function MessageBox:export()
local root = mw.html.create()
-- Add the subst check error.
if self.isSubstituted and self.name then
root:tag('b')
:addClass('error')
:wikitext(string.format(
'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.',
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
))
end
local frame = mw.getCurrentFrame()
root:wikitext(frame:extensionTag{
name = 'templatestyles',
args = { src = self.base_templatestyles },
})
-- Add support for a single custom templatestyles sheet. Undocumented as
-- need should be limited and many templates using mbox are substed; we
-- don't want to spread templatestyles sheets around to arbitrary places
if self.templatestyles then
root:wikitext(frame:extensionTag{
name = 'templatestyles',
args = { src = self.templatestyles },
})
end
-- Create the box table.
local boxTable = root:tag('table')
boxTable:attr('id', self.id or nil)
for i, class in ipairs(self.classes or {}) do
boxTable:addClass(class or nil)
end
boxTable
:cssText(self.style or nil)
:attr('role', 'presentation')
if self.attrs then
boxTable:attr(self.attrs)
end
-- Add the left-hand image.
local row = boxTable:tag('tr')
if self.imageLeft then
local imageLeftCell = row:tag('td'):addClass('mbox-image')
if self.imageCellDiv then
-- If we are using a div, redefine imageLeftCell so that the image
-- is inside it. Divs use style="width: 52px;", which limits the
-- image width to 52px. If any images in a div are wider than that,
-- they may overlap with the text or cause other display problems.
imageLeftCell = imageLeftCell:tag('div'):addClass('mbox-image-div')
end
imageLeftCell:wikitext(self.imageLeft or nil)
elseif self.imageEmptyCell then
-- Some message boxes define an empty cell if no image is specified, and
-- some don't. The old template code in templates where empty cells are
-- specified gives the following hint: "No image. Cell with some width
-- or padding necessary for text cell to have 100% width."
row:tag('td')
:addClass('mbox-empty-cell')
end
-- Add the text.
local textCell = row:tag('td'):addClass('mbox-text')
if self.useCollapsibleTextFields then
-- The message box uses advanced text parameters that allow things to be
-- collapsible. At the moment, only ambox uses this.
textCell:cssText(self.textstyle or nil)
local textCellDiv = textCell:tag('div')
textCellDiv
:addClass('mbox-text-span')
:wikitext(self.issue or nil)
if (self.talk or self.fix) then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:wikitext(self.talk and (' ' .. self.talk) or nil)
:wikitext(self.fix and (' ' .. self.fix) or nil)
end
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
if self.info and not self.isSmall then
textCellDiv
:tag('span')
:addClass('hide-when-compact')
:wikitext(self.info and (' ' .. self.info) or nil)
end
if self.removalNotice then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:tag('i')
:wikitext(string.format(" (%s)", self.removalNotice))
end
else
-- Default text formatting - anything goes.
textCell
:cssText(self.textstyle or nil)
:wikitext(self.text or nil)
end
-- Add the right-hand image.
if self.imageRight then
local imageRightCell = row:tag('td'):addClass('mbox-imageright')
if self.imageCellDiv then
-- If we are using a div, redefine imageRightCell so that the image
-- is inside it.
imageRightCell = imageRightCell:tag('div'):addClass('mbox-image-div')
end
imageRightCell
:wikitext(self.imageRight or nil)
end
-- Add the below row.
if self.below then
boxTable:tag('tr')
:tag('td')
:attr('colspan', self.imageRight and '3' or '2')
:addClass('mbox-text')
:cssText(self.textstyle or nil)
:wikitext(self.below or nil)
end
-- Add error message for invalid type parameters.
if self.invalidTypeError then
root:tag('div')
:addClass('mbox-invalid-type')
:wikitext(string.format(
'This message box is using an invalid "type=%s" parameter and needs fixing.',
self.type or ''
))
end
-- Add categories.
root:wikitext(self:renderCategories() or nil)
return tostring(root)
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p, mt = {}, {}
function p._exportClasses()
-- For testing.
return {
MessageBox = MessageBox
}
end
function p.main(boxType, args, cfgTables)
local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))
box:setParameters()
box:setCategories()
return box:export()
end
function mt.__index(t, k)
return function (frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))
end
end
return setmetatable(p, mt)
m5otf5q36525cl6ogsrbcxa26anpog5
Module:Message box/configuration
828
40627038
1097616239
1074852220
2022-07-11T18:19:26Z
Izno
2927383
add templatestyles, remove a variable or two as a result
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Message box configuration --
-- --
-- This module contains configuration data for [[Module:Message box]]. --
--------------------------------------------------------------------------------
return {
ambox = {
types = {
speedy = {
class = 'ambox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'ambox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'ambox-content',
image = 'Ambox important.svg'
},
style = {
class = 'ambox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'ambox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'ambox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'ambox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
allowBlankParams = {'talk', 'sect', 'date', 'issue', 'fix', 'subst', 'hidden'},
allowSmall = true,
smallParam = 'left',
smallClass = 'mbox-small-left',
substCheck = true,
classes = {'metadata', 'ambox'},
imageEmptyCell = true,
imageCheckBlank = true,
imageSmallSize = '20x20px',
imageCellDiv = true,
useCollapsibleTextFields = true,
imageRightNone = true,
sectionDefault = 'article',
allowMainspaceCategories = true,
templateCategory = 'Article message templates',
templateCategoryRequireName = true,
templateErrorCategory = 'Article message templates with missing parameters',
templateErrorParamsToCheck = {'issue', 'fix', 'subst'},
removalNotice = '<small>[[Help:Maintenance template removal|Learn how and when to remove this template message]]</small>',
templatestyles = 'Module:Message box/ambox.css'
},
cmbox = {
types = {
speedy = {
class = 'cmbox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'cmbox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'cmbox-content',
image = 'Ambox important.svg'
},
style = {
class = 'cmbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'cmbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'cmbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'cmbox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'cmbox'},
imageEmptyCell = true,
templatestyles = 'Module:Message box/cmbox.css'
},
fmbox = {
types = {
warning = {
class = 'fmbox-warning',
image = 'Ambox warning pn.svg'
},
editnotice = {
class = 'fmbox-editnotice',
image = 'Information icon4.svg'
},
system = {
class = 'fmbox-system',
image = 'Information icon4.svg'
}
},
default = 'system',
showInvalidTypeError = true,
classes = {'fmbox'},
imageEmptyCell = false,
imageRightNone = false,
templatestyles = 'Module:Message box/fmbox.css'
},
imbox = {
types = {
speedy = {
class = 'imbox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'imbox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'imbox-content',
image = 'Ambox important.svg'
},
style = {
class = 'imbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'imbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'imbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
license = {
class = 'imbox-license licensetpl',
image = 'Imbox license.png' -- @todo We need an SVG version of this
},
featured = {
class = 'imbox-featured',
image = 'Cscr-featured.svg'
},
notice = {
class = 'imbox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'imbox'},
imageEmptyCell = true,
below = true,
templateCategory = 'File message boxes',
templatestyles = 'Module:Message box/imbox.css'
},
ombox = {
types = {
speedy = {
class = 'ombox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'ombox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'ombox-content',
image = 'Ambox important.svg'
},
style = {
class = 'ombox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'ombox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'ombox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'ombox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'ombox'},
allowSmall = true,
imageEmptyCell = true,
imageRightNone = true,
templatestyles = 'Module:Message box/ombox.css'
},
tmbox = {
types = {
speedy = {
class = 'tmbox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'tmbox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'tmbox-content',
image = 'Ambox important.svg'
},
style = {
class = 'tmbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'tmbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'tmbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'tmbox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'tmbox'},
allowSmall = true,
imageRightNone = true,
imageEmptyCell = true,
templateCategory = 'Talk message boxes',
templatestyles = 'Module:Message box/tmbox.css'
}
}
ldagdlymcob5mvkzqgflnky08km8w0g
Template:Ambox
10
13179742
1052357064
948474634
2021-10-28T18:27:47Z
GKFX
14918984
Copy fix from sandbox; only articles should go in this category.
wikitext
text/x-wiki
{{#invoke:Message box|ambox}}{{#ifeq:{{{small}}};{{NAMESPACENUMBER}}|left;0|[[Category:Articles using small message boxes]]}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
1esfeyakvmpfhej10fmg3ujt1lsetw6
Module:Unsubst
828
40945493
1048913973
872090768
2021-10-08T18:22:16Z
Trappist the monk
10289486
sync from sandbox; see [[Module_talk:Unsubst#template_invocation_name_override|talk]];
Scribunto
text/plain
local checkType = require('libraryUtil').checkType
local p = {}
local BODY_PARAM = '$B'
local specialParams = {
['$params'] = 'parameter list',
['$aliases'] = 'parameter aliases',
['$flags'] = 'flags',
['$B'] = 'template content',
['$template-name'] = 'template invocation name override',
}
function p.main(frame, body)
-- If we are substing, this function returns a template invocation, and if
-- not, it returns the template body. The template body can be specified in
-- the body parameter, or in the template parameter defined in the
-- BODY_PARAM variable. This function can be called from Lua or from
-- #invoke.
-- Return the template body if we aren't substing.
if not mw.isSubsting() then
if body ~= nil then
return body
elseif frame.args[BODY_PARAM] ~= nil then
return frame.args[BODY_PARAM]
else
error(string.format(
"no template content specified (use parameter '%s' from #invoke)",
BODY_PARAM
), 2)
end
end
-- Sanity check for the frame object.
if type(frame) ~= 'table'
or type(frame.getParent) ~= 'function'
or not frame:getParent()
then
error(
"argument #1 to 'main' must be a frame object with a parent " ..
"frame available",
2
)
end
-- Find the invocation name.
local mTemplateInvocation = require('Module:Template invocation')
local name
if frame.args['$template-name'] and '' ~= frame.args['$template-name'] then
name = frame.args['$template-name'] -- override whatever the template name is with this name
else
name = mTemplateInvocation.name(frame:getParent():getTitle())
end
-- Combine passed args with passed defaults
local args = {}
if string.find( ','..(frame.args['$flags'] or '')..',', ',%s*override%s*,' ) then
for k, v in pairs( frame:getParent().args ) do
args[k] = v
end
for k, v in pairs( frame.args ) do
if not specialParams[k] then
if v == '__DATE__' then
v = mw.getContentLanguage():formatDate( 'F Y' )
end
args[k] = v
end
end
else
for k, v in pairs( frame.args ) do
if not specialParams[k] then
if v == '__DATE__' then
v = mw.getContentLanguage():formatDate( 'F Y' )
end
args[k] = v
end
end
for k, v in pairs( frame:getParent().args ) do
args[k] = v
end
end
-- Trim parameters, if not specified otherwise
if not string.find( ','..(frame.args['$flags'] or '')..',', ',%s*keep%-whitespace%s*,' ) then
for k, v in pairs( args ) do args[k] = mw.ustring.match(v, '^%s*(.*)%s*$') or '' end
end
-- Pull information from parameter aliases
local aliases = {}
if frame.args['$aliases'] then
local list = mw.text.split( frame.args['$aliases'], '%s*,%s*' )
for k, v in ipairs( list ) do
local tmp = mw.text.split( v, '%s*>%s*' )
aliases[tonumber(mw.ustring.match(tmp[1], '^[1-9][0-9]*$')) or tmp[1]] = ((tonumber(mw.ustring.match(tmp[2], '^[1-9][0-9]*$'))) or tmp[2])
end
end
for k, v in pairs( aliases ) do
if args[k] and ( not args[v] or args[v] == '' ) then
args[v] = args[k]
end
args[k] = nil
end
-- Remove empty parameters, if specified
if string.find( ','..(frame.args['$flags'] or '')..',', ',%s*remove%-empty%s*,' ) then
local tmp = 0
for k, v in ipairs( args ) do
if v ~= '' or ( args[k+1] and args[k+1] ~= '' ) or ( args[k+2] and args[k+2] ~= '' ) then
tmp = k
else
break
end
end
for k, v in pairs( args ) do
if v == '' then
if not (type(k) == 'number' and k < tmp) then args[k] = nil end
end
end
end
-- Order parameters
if frame.args['$params'] then
local params, tmp = mw.text.split( frame.args['$params'], '%s*,%s*' ), {}
for k, v in ipairs(params) do
v = tonumber(mw.ustring.match(v, '^[1-9][0-9]*$')) or v
if args[v] then tmp[v], args[v] = args[v], nil end
end
for k, v in pairs(args) do tmp[k], args[k] = args[k], nil end
args = tmp
end
return mTemplateInvocation.invocation(name, args)
end
p[''] = p.main -- For backwards compatibility
return p
eu3d3ip0gtd6n65iz4vmtpogb62rxdi
Module:Citation/CS1
828
38573037
1133582667
1117704869
2023-01-14T14:43:47Z
Trappist the monk
10289486
sync from sandbox;
Scribunto
text/plain
require('strict');
--[[--------------------------< F O R W A R D D E C L A R A T I O N S >--------------------------------------
each of these counts against the Lua upvalue limit
]]
local validation; -- functions in Module:Citation/CS1/Date_validation
local utilities; -- functions in Module:Citation/CS1/Utilities
local z = {}; -- table of tables in Module:Citation/CS1/Utilities
local identifiers; -- functions and tables in Module:Citation/CS1/Identifiers
local metadata; -- functions in Module:Citation/CS1/COinS
local cfg = {}; -- table of configuration tables that are defined in Module:Citation/CS1/Configuration
local whitelist = {}; -- table of tables listing valid template parameter names; defined in Module:Citation/CS1/Whitelist
--[[------------------< P A G E S C O P E V A R I A B L E S >---------------
declare variables here that have page-wide scope that are not brought in from
other modules; that are created here and used here
]]
local added_deprecated_cat; -- Boolean flag so that the category is added only once
local added_vanc_errs; -- Boolean flag so we only emit one Vancouver error / category
local added_generic_name_errs; -- Boolean flag so we only emit one generic name error / category and stop testing names once an error is encountered
local Frame; -- holds the module's frame table
local is_preview_mode; -- true when article is in preview mode; false when using 'Preview page with this template' (previewing the module)
local is_sandbox; -- true when using sandbox modules to render citation
--[[--------------------------< F I R S T _ S E T >------------------------------------------------------------
Locates and returns the first set value in a table of values where the order established in the table,
left-to-right (or top-to-bottom), is the order in which the values are evaluated. Returns nil if none are set.
This version replaces the original 'for _, val in pairs do' and a similar version that used ipairs. With the pairs
version the order of evaluation could not be guaranteed. With the ipairs version, a nil value would terminate
the for-loop before it reached the actual end of the list.
]]
local function first_set (list, count)
local i = 1;
while i <= count do -- loop through all items in list
if utilities.is_set( list[i] ) then
return list[i]; -- return the first set list member
end
i = i + 1; -- point to next
end
end
--[[--------------------------< A D D _ V A N C _ E R R O R >----------------------------------------------------
Adds a single Vancouver system error message to the template's output regardless of how many error actually exist.
To prevent duplication, added_vanc_errs is nil until an error message is emitted.
added_vanc_errs is a Boolean declared in page scope variables above
]]
local function add_vanc_error (source, position)
if added_vanc_errs then return end
added_vanc_errs = true; -- note that we've added this category
utilities.set_message ('err_vancouver', {source, position});
end
--[[--------------------------< I S _ S C H E M E >------------------------------------------------------------
does this thing that purports to be a URI scheme seem to be a valid scheme? The scheme is checked to see if it
is in agreement with http://tools.ietf.org/html/std66#section-3.1 which says:
Scheme names consist of a sequence of characters beginning with a
letter and followed by any combination of letters, digits, plus
("+"), period ("."), or hyphen ("-").
returns true if it does, else false
]]
local function is_scheme (scheme)
return scheme and scheme:match ('^%a[%a%d%+%.%-]*:'); -- true if scheme is set and matches the pattern
end
--[=[-------------------------< I S _ D O M A I N _ N A M E >--------------------------------------------------
Does this thing that purports to be a domain name seem to be a valid domain name?
Syntax defined here: http://tools.ietf.org/html/rfc1034#section-3.5
BNF defined here: https://tools.ietf.org/html/rfc4234
Single character names are generally reserved; see https://tools.ietf.org/html/draft-ietf-dnsind-iana-dns-01#page-15;
see also [[Single-letter second-level domain]]
list of TLDs: https://www.iana.org/domains/root/db
RFC 952 (modified by RFC 1123) requires the first and last character of a hostname to be a letter or a digit. Between
the first and last characters the name may use letters, digits, and the hyphen.
Also allowed are IPv4 addresses. IPv6 not supported
domain is expected to be stripped of any path so that the last character in the last character of the TLD. tld
is two or more alpha characters. Any preceding '//' (from splitting a URL with a scheme) will be stripped
here. Perhaps not necessary but retained in case it is necessary for IPv4 dot decimal.
There are several tests:
the first character of the whole domain name including subdomains must be a letter or a digit
internationalized domain name (ASCII characters with .xn-- ASCII Compatible Encoding (ACE) prefix xn-- in the TLD) see https://tools.ietf.org/html/rfc3490
single-letter/digit second-level domains in the .org, .cash, and .today TLDs
q, x, and z SL domains in the .com TLD
i and q SL domains in the .net TLD
single-letter SL domains in the ccTLDs (where the ccTLD is two letters)
two-character SL domains in gTLDs (where the gTLD is two or more letters)
three-plus-character SL domains in gTLDs (where the gTLD is two or more letters)
IPv4 dot-decimal address format; TLD not allowed
returns true if domain appears to be a proper name and TLD or IPv4 address, else false
]=]
local function is_domain_name (domain)
if not domain then
return false; -- if not set, abandon
end
domain = domain:gsub ('^//', ''); -- strip '//' from domain name if present; done here so we only have to do it once
if not domain:match ('^[%w]') then -- first character must be letter or digit
return false;
end
if domain:match ('^%a+:') then -- hack to detect things that look like s:Page:Title where Page: is namespace at Wikisource
return false;
end
local patterns = { -- patterns that look like URLs
'%f[%w][%w][%w%-]+[%w]%.%a%a+$', -- three or more character hostname.hostname or hostname.tld
'%f[%w][%w][%w%-]+[%w]%.xn%-%-[%w]+$', -- internationalized domain name with ACE prefix
'%f[%a][qxz]%.com$', -- assigned one character .com hostname (x.com times out 2015-12-10)
'%f[%a][iq]%.net$', -- assigned one character .net hostname (q.net registered but not active 2015-12-10)
'%f[%w][%w]%.%a%a$', -- one character hostname and ccTLD (2 chars)
'%f[%w][%w][%w]%.%a%a+$', -- two character hostname and TLD
'^%d%d?%d?%.%d%d?%d?%.%d%d?%d?%.%d%d?%d?', -- IPv4 address
}
for _, pattern in ipairs (patterns) do -- loop through the patterns list
if domain:match (pattern) then
return true; -- if a match then we think that this thing that purports to be a URL is a URL
end
end
for _, d in ipairs (cfg.single_letter_2nd_lvl_domains_t) do -- look for single letter second level domain names for these top level domains
if domain:match ('%f[%w][%w]%.' .. d) then
return true
end
end
return false; -- no matches, we don't know what this thing is
end
--[[--------------------------< I S _ U R L >------------------------------------------------------------------
returns true if the scheme and domain parts of a URL appear to be a valid URL; else false.
This function is the last step in the validation process. This function is separate because there are cases that
are not covered by split_url(), for example is_parameter_ext_wikilink() which is looking for bracketted external
wikilinks.
]]
local function is_url (scheme, domain)
if utilities.is_set (scheme) then -- if scheme is set check it and domain
return is_scheme (scheme) and is_domain_name (domain);
else
return is_domain_name (domain); -- scheme not set when URL is protocol-relative
end
end
--[[--------------------------< S P L I T _ U R L >------------------------------------------------------------
Split a URL into a scheme, authority indicator, and domain.
First remove Fully Qualified Domain Name terminator (a dot following TLD) (if any) and any path(/), query(?) or fragment(#).
If protocol-relative URL, return nil scheme and domain else return nil for both scheme and domain.
When not protocol-relative, get scheme, authority indicator, and domain. If there is an authority indicator (one
or more '/' characters immediately following the scheme's colon), make sure that there are only 2.
Any URL that does not have news: scheme must have authority indicator (//). TODO: are there other common schemes
like news: that don't use authority indicator?
Strip off any port and path;
]]
local function split_url (url_str)
local scheme, authority, domain;
url_str = url_str:gsub ('([%a%d])%.?[/%?#].*$', '%1'); -- strip FQDN terminator and path(/), query(?), fragment (#) (the capture prevents false replacement of '//')
if url_str:match ('^//%S*') then -- if there is what appears to be a protocol-relative URL
domain = url_str:match ('^//(%S*)')
elseif url_str:match ('%S-:/*%S+') then -- if there is what appears to be a scheme, optional authority indicator, and domain name
scheme, authority, domain = url_str:match ('(%S-:)(/*)(%S+)'); -- extract the scheme, authority indicator, and domain portions
if utilities.is_set (authority) then
authority = authority:gsub ('//', '', 1); -- replace place 1 pair of '/' with nothing;
if utilities.is_set(authority) then -- if anything left (1 or 3+ '/' where authority should be) then
return scheme; -- return scheme only making domain nil which will cause an error message
end
else
if not scheme:match ('^news:') then -- except for news:..., MediaWiki won't link URLs that do not have authority indicator; TODO: a better way to do this test?
return scheme; -- return scheme only making domain nil which will cause an error message
end
end
domain = domain:gsub ('(%a):%d+', '%1'); -- strip port number if present
end
return scheme, domain;
end
--[[--------------------------< L I N K _ P A R A M _ O K >---------------------------------------------------
checks the content of |title-link=, |series-link=, |author-link=, etc. for properly formatted content: no wikilinks, no URLs
Link parameters are to hold the title of a Wikipedia article, so none of the WP:TITLESPECIALCHARACTERS are allowed:
# < > [ ] | { } _
except the underscore which is used as a space in wiki URLs and # which is used for section links
returns false when the value contains any of these characters.
When there are no illegal characters, this function returns TRUE if value DOES NOT appear to be a valid URL (the
|<param>-link= parameter is ok); else false when value appears to be a valid URL (the |<param>-link= parameter is NOT ok).
]]
local function link_param_ok (value)
local scheme, domain;
if value:find ('[<>%[%]|{}]') then -- if any prohibited characters
return false;
end
scheme, domain = split_url (value); -- get scheme or nil and domain or nil from URL;
return not is_url (scheme, domain); -- return true if value DOES NOT appear to be a valid URL
end
--[[--------------------------< L I N K _ T I T L E _ O K >---------------------------------------------------
Use link_param_ok() to validate |<param>-link= value and its matching |<title>= value.
|<title>= may be wiki-linked but not when |<param>-link= has a value. This function emits an error message when
that condition exists
check <link> for inter-language interwiki-link prefix. prefix must be a MediaWiki-recognized language
code and must begin with a colon.
]]
local function link_title_ok (link, lorig, title, torig)
local orig;
if utilities.is_set (link) then -- don't bother if <param>-link doesn't have a value
if not link_param_ok (link) then -- check |<param>-link= markup
orig = lorig; -- identify the failing link parameter
elseif title:find ('%[%[') then -- check |title= for wikilink markup
orig = torig; -- identify the failing |title= parameter
elseif link:match ('^%a+:') then -- if the link is what looks like an interwiki
local prefix = link:match ('^(%a+):'):lower(); -- get the interwiki prefix
if cfg.inter_wiki_map[prefix] then -- if prefix is in the map, must have preceding colon
orig = lorig; -- flag as error
end
end
end
if utilities.is_set (orig) then
link = ''; -- unset
utilities.set_message ('err_bad_paramlink', orig); -- URL or wikilink in |title= with |title-link=;
end
return link; -- link if ok, empty string else
end
--[[--------------------------< C H E C K _ U R L >------------------------------------------------------------
Determines whether a URL string appears to be valid.
First we test for space characters. If any are found, return false. Then split the URL into scheme and domain
portions, or for protocol-relative (//example.com) URLs, just the domain. Use is_url() to validate the two
portions of the URL. If both are valid, or for protocol-relative if domain is valid, return true, else false.
Because it is different from a standard URL, and because this module used external_link() to make external links
that work for standard and news: links, we validate newsgroup names here. The specification for a newsgroup name
is at https://tools.ietf.org/html/rfc5536#section-3.1.4
]]
local function check_url( url_str )
if nil == url_str:match ("^%S+$") then -- if there are any spaces in |url=value it can't be a proper URL
return false;
end
local scheme, domain;
scheme, domain = split_url (url_str); -- get scheme or nil and domain or nil from URL;
if 'news:' == scheme then -- special case for newsgroups
return domain:match('^[%a%d%+%-_]+%.[%a%d%+%-_%.]*[%a%d%+%-_]$');
end
return is_url (scheme, domain); -- return true if value appears to be a valid URL
end
--[=[-------------------------< I S _ P A R A M E T E R _ E X T _ W I K I L I N K >----------------------------
Return true if a parameter value has a string that begins and ends with square brackets [ and ] and the first
non-space characters following the opening bracket appear to be a URL. The test will also find external wikilinks
that use protocol-relative URLs. Also finds bare URLs.
The frontier pattern prevents a match on interwiki-links which are similar to scheme:path URLs. The tests that
find bracketed URLs are required because the parameters that call this test (currently |title=, |chapter=, |work=,
and |publisher=) may have wikilinks and there are articles or redirects like '//Hus' so, while uncommon, |title=[[//Hus]]
is possible as might be [[en://Hus]].
]=]
local function is_parameter_ext_wikilink (value)
local scheme, domain;
if value:match ('%f[%[]%[%a%S*:%S+.*%]') then -- if ext. wikilink with scheme and domain: [xxxx://yyyyy.zzz]
scheme, domain = split_url (value:match ('%f[%[]%[(%a%S*:%S+).*%]'));
elseif value:match ('%f[%[]%[//%S+.*%]') then -- if protocol-relative ext. wikilink: [//yyyyy.zzz]
scheme, domain = split_url (value:match ('%f[%[]%[(//%S+).*%]'));
elseif value:match ('%a%S*:%S+') then -- if bare URL with scheme; may have leading or trailing plain text
scheme, domain = split_url (value:match ('(%a%S*:%S+)'));
elseif value:match ('//%S+') then -- if protocol-relative bare URL: //yyyyy.zzz; may have leading or trailing plain text
scheme, domain = split_url (value:match ('(//%S+)')); -- what is left should be the domain
else
return false; -- didn't find anything that is obviously a URL
end
return is_url (scheme, domain); -- return true if value appears to be a valid URL
end
--[[-------------------------< C H E C K _ F O R _ U R L >-----------------------------------------------------
loop through a list of parameters and their values. Look at the value and if it has an external link, emit an error message.
]]
local function check_for_url (parameter_list, error_list)
for k, v in pairs (parameter_list) do -- for each parameter in the list
if is_parameter_ext_wikilink (v) then -- look at the value; if there is a URL add an error message
table.insert (error_list, utilities.wrap_style ('parameter', k));
end
end
end
--[[--------------------------< S A F E _ F O R _ U R L >------------------------------------------------------
Escape sequences for content that will be used for URL descriptions
]]
local function safe_for_url( str )
if str:match( "%[%[.-%]%]" ) ~= nil then
utilities.set_message ('err_wikilink_in_url', {});
end
return str:gsub( '[%[%]\n]', {
['['] = '[',
[']'] = ']',
['\n'] = ' ' } );
end
--[[--------------------------< E X T E R N A L _ L I N K >----------------------------------------------------
Format an external link with error checking
]]
local function external_link (URL, label, source, access)
local err_msg = '';
local domain;
local path;
local base_url;
if not utilities.is_set (label) then
label = URL;
if utilities.is_set (source) then
utilities.set_message ('err_bare_url_missing_title', {utilities.wrap_style ('parameter', source)});
else
error (cfg.messages["bare_url_no_origin"]); -- programmer error; valid parameter name does not have matching meta-parameter
end
end
if not check_url (URL) then
utilities.set_message ('err_bad_url', {utilities.wrap_style ('parameter', source)});
end
domain, path = URL:match ('^([/%.%-%+:%a%d]+)([/%?#].*)$'); -- split the URL into scheme plus domain and path
if path then -- if there is a path portion
path = path:gsub ('[%[%]]', {['['] = '%5b', [']'] = '%5d'}); -- replace '[' and ']' with their percent-encoded values
URL = table.concat ({domain, path}); -- and reassemble
end
base_url = table.concat ({ "[", URL, " ", safe_for_url (label), "]" }); -- assemble a wiki-markup URL
if utilities.is_set (access) then -- access level (subscription, registration, limited)
base_url = utilities.substitute (cfg.presentation['ext-link-access-signal'], {cfg.presentation[access].class, cfg.presentation[access].title, base_url}); -- add the appropriate icon
end
return base_url;
end
--[[--------------------------< D E P R E C A T E D _ P A R A M E T E R >--------------------------------------
Categorize and emit an error message when the citation contains one or more deprecated parameters. The function includes the
offending parameter name to the error message. Only one error message is emitted regardless of the number of deprecated
parameters in the citation.
added_deprecated_cat is a Boolean declared in page scope variables above
]]
local function deprecated_parameter(name)
if not added_deprecated_cat then
added_deprecated_cat = true; -- note that we've added this category
utilities.set_message ('err_deprecated_params', {name}); -- add error message
end
end
--[=[-------------------------< K E R N _ Q U O T E S >--------------------------------------------------------
Apply kerning to open the space between the quote mark provided by the module and a leading or trailing quote
mark contained in a |title= or |chapter= parameter's value.
This function will positive kern either single or double quotes:
"'Unkerned title with leading and trailing single quote marks'"
" 'Kerned title with leading and trailing single quote marks' " (in real life the kerning isn't as wide as this example)
Double single quotes (italic or bold wiki-markup) are not kerned.
Replaces Unicode quote marks in plain text or in the label portion of a [[L|D]] style wikilink with typewriter
quote marks regardless of the need for kerning. Unicode quote marks are not replaced in simple [[D]] wikilinks.
Call this function for chapter titles, for website titles, etc.; not for book titles.
]=]
local function kern_quotes (str)
local cap = '';
local wl_type, label, link;
wl_type, label, link = utilities.is_wikilink (str); -- wl_type is: 0, no wl (text in label variable); 1, [[D]]; 2, [[L|D]]
if 1 == wl_type then -- [[D]] simple wikilink with or without quote marks
if mw.ustring.match (str, '%[%[[\"“”\'‘’].+[\"“”\'‘’]%]%]') then -- leading and trailing quote marks
str = utilities.substitute (cfg.presentation['kern-left'], str);
str = utilities.substitute (cfg.presentation['kern-right'], str);
elseif mw.ustring.match (str, '%[%[[\"“”\'‘’].+%]%]') then -- leading quote marks
str = utilities.substitute (cfg.presentation['kern-left'], str);
elseif mw.ustring.match (str, '%[%[.+[\"“”\'‘’]%]%]') then -- trailing quote marks
str = utilities.substitute (cfg.presentation['kern-right'], str);
end
else -- plain text or [[L|D]]; text in label variable
label = mw.ustring.gsub (label, '[“”]', '\"'); -- replace “” (U+201C & U+201D) with " (typewriter double quote mark)
label = mw.ustring.gsub (label, '[‘’]', '\''); -- replace ‘’ (U+2018 & U+2019) with ' (typewriter single quote mark)
cap = mw.ustring.match (label, "^([\"\'][^\'].+)"); -- match leading double or single quote but not doubled single quotes (italic markup)
if utilities.is_set (cap) then
label = utilities.substitute (cfg.presentation['kern-left'], cap);
end
cap = mw.ustring.match (label, "^(.+[^\'][\"\'])$") -- match trailing double or single quote but not doubled single quotes (italic markup)
if utilities.is_set (cap) then
label = utilities.substitute (cfg.presentation['kern-right'], cap);
end
if 2 == wl_type then
str = utilities.make_wikilink (link, label); -- reassemble the wikilink
else
str = label;
end
end
return str;
end
--[[--------------------------< F O R M A T _ S C R I P T _ V A L U E >----------------------------------------
|script-title= holds title parameters that are not written in Latin-based scripts: Chinese, Japanese, Arabic, Hebrew, etc. These scripts should
not be italicized and may be written right-to-left. The value supplied by |script-title= is concatenated onto Title after Title has been wrapped
in italic markup.
Regardless of language, all values provided by |script-title= are wrapped in <bdi>...</bdi> tags to isolate RTL languages from the English left to right.
|script-title= provides a unique feature. The value in |script-title= may be prefixed with a two-character ISO 639-1 language code and a colon:
|script-title=ja:*** *** (where * represents a Japanese character)
Spaces between the two-character code and the colon and the colon and the first script character are allowed:
|script-title=ja : *** ***
|script-title=ja: *** ***
|script-title=ja :*** ***
Spaces preceding the prefix are allowed: |script-title = ja:*** ***
The prefix is checked for validity. If it is a valid ISO 639-1 language code, the lang attribute (lang="ja") is added to the <bdi> tag so that browsers can
know the language the tag contains. This may help the browser render the script more correctly. If the prefix is invalid, the lang attribute
is not added. At this time there is no error message for this condition.
Supports |script-title=, |script-chapter=, |script-<periodical>=
]]
local function format_script_value (script_value, script_param)
local lang=''; -- initialize to empty string
local name;
if script_value:match('^%l%l%l?%s*:') then -- if first 3 or 4 non-space characters are script language prefix
lang = script_value:match('^(%l%l%l?)%s*:%s*%S.*'); -- get the language prefix or nil if there is no script
if not utilities.is_set (lang) then
utilities.set_message ('err_script_parameter', {script_param, cfg.err_msg_supl['missing title part']}); -- prefix without 'title'; add error message
return ''; -- script_value was just the prefix so return empty string
end
-- if we get this far we have prefix and script
name = cfg.lang_code_remap[lang] or mw.language.fetchLanguageName( lang, cfg.this_wiki_code ); -- get language name so that we can use it to categorize
if utilities.is_set (name) then -- is prefix a proper ISO 639-1 language code?
script_value = script_value:gsub ('^%l+%s*:%s*', ''); -- strip prefix from script
-- is prefix one of these language codes?
if utilities.in_array (lang, cfg.script_lang_codes) then
utilities.add_prop_cat ('script', {name, lang})
else
utilities.set_message ('err_script_parameter', {script_param, cfg.err_msg_supl['unknown language code']}); -- unknown script-language; add error message
end
lang = ' lang="' .. lang .. '" '; -- convert prefix into a lang attribute
else
utilities.set_message ('err_script_parameter', {script_param, cfg.err_msg_supl['invalid language code']}); -- invalid language code; add error message
lang = ''; -- invalid so set lang to empty string
end
else
utilities.set_message ('err_script_parameter', {script_param, cfg.err_msg_supl['missing prefix']}); -- no language code prefix; add error message
end
script_value = utilities.substitute (cfg.presentation['bdi'], {lang, script_value}); -- isolate in case script is RTL
return script_value;
end
--[[--------------------------< S C R I P T _ C O N C A T E N A T E >------------------------------------------
Initially for |title= and |script-title=, this function concatenates those two parameter values after the script
value has been wrapped in <bdi> tags.
]]
local function script_concatenate (title, script, script_param)
if utilities.is_set (script) then
script = format_script_value (script, script_param); -- <bdi> tags, lang attribute, categorization, etc.; returns empty string on error
if utilities.is_set (script) then
title = title .. ' ' .. script; -- concatenate title and script title
end
end
return title;
end
--[[--------------------------< W R A P _ M S G >--------------------------------------------------------------
Applies additional message text to various parameter values. Supplied string is wrapped using a message_list
configuration taking one argument. Supports lower case text for {{citation}} templates. Additional text taken
from citation_config.messages - the reason this function is similar to but separate from wrap_style().
]]
local function wrap_msg (key, str, lower)
if not utilities.is_set ( str ) then
return "";
end
if true == lower then
local msg;
msg = cfg.messages[key]:lower(); -- set the message to lower case before
return utilities.substitute ( msg, str ); -- including template text
else
return utilities.substitute ( cfg.messages[key], str );
end
end
--[[----------------< W I K I S O U R C E _ U R L _ M A K E >-------------------
Makes a Wikisource URL from Wikisource interwiki-link. Returns the URL and appropriate
label; nil else.
str is the value assigned to |chapter= (or aliases) or |title= or |title-link=
]]
local function wikisource_url_make (str)
local wl_type, D, L;
local ws_url, ws_label;
local wikisource_prefix = table.concat ({'https://', cfg.this_wiki_code, '.wikisource.org/wiki/'});
wl_type, D, L = utilities.is_wikilink (str); -- wl_type is 0 (not a wikilink), 1 (simple wikilink), 2 (complex wikilink)
if 0 == wl_type then -- not a wikilink; might be from |title-link=
str = D:match ('^[Ww]ikisource:(.+)') or D:match ('^[Ss]:(.+)'); -- article title from interwiki link with long-form or short-form namespace
if utilities.is_set (str) then
ws_url = table.concat ({ -- build a Wikisource URL
wikisource_prefix, -- prefix
str, -- article title
});
ws_label = str; -- label for the URL
end
elseif 1 == wl_type then -- simple wikilink: [[Wikisource:ws article]]
str = D:match ('^[Ww]ikisource:(.+)') or D:match ('^[Ss]:(.+)'); -- article title from interwiki link with long-form or short-form namespace
if utilities.is_set (str) then
ws_url = table.concat ({ -- build a Wikisource URL
wikisource_prefix, -- prefix
str, -- article title
});
ws_label = str; -- label for the URL
end
elseif 2 == wl_type then -- non-so-simple wikilink: [[Wikisource:ws article|displayed text]] ([[L|D]])
str = L:match ('^[Ww]ikisource:(.+)') or L:match ('^[Ss]:(.+)'); -- article title from interwiki link with long-form or short-form namespace
if utilities.is_set (str) then
ws_label = D; -- get ws article name from display portion of interwiki link
ws_url = table.concat ({ -- build a Wikisource URL
wikisource_prefix, -- prefix
str, -- article title without namespace from link portion of wikilink
});
end
end
if ws_url then
ws_url = mw.uri.encode (ws_url, 'WIKI'); -- make a usable URL
ws_url = ws_url:gsub ('%%23', '#'); -- undo percent-encoding of fragment marker
end
return ws_url, ws_label, L or D; -- return proper URL or nil and a label or nil
end
--[[----------------< F O R M A T _ P E R I O D I C A L >-----------------------
Format the three periodical parameters: |script-<periodical>=, |<periodical>=,
and |trans-<periodical>= into a single Periodical meta-parameter.
]]
local function format_periodical (script_periodical, script_periodical_source, periodical, trans_periodical)
if not utilities.is_set (periodical) then
periodical = ''; -- to be safe for concatenation
else
periodical = utilities.wrap_style ('italic-title', periodical); -- style
end
periodical = script_concatenate (periodical, script_periodical, script_periodical_source); -- <bdi> tags, lang attribute, categorization, etc.; must be done after title is wrapped
if utilities.is_set (trans_periodical) then
trans_periodical = utilities.wrap_style ('trans-italic-title', trans_periodical);
if utilities.is_set (periodical) then
periodical = periodical .. ' ' .. trans_periodical;
else -- here when trans-periodical without periodical or script-periodical
periodical = trans_periodical;
utilities.set_message ('err_trans_missing_title', {'periodical'});
end
end
return periodical;
end
--[[------------------< F O R M A T _ C H A P T E R _ T I T L E >---------------
Format the four chapter parameters: |script-chapter=, |chapter=, |trans-chapter=,
and |chapter-url= into a single chapter meta- parameter (chapter_url_source used
for error messages).
]]
local function format_chapter_title (script_chapter, script_chapter_source, chapter, chapter_source, trans_chapter, trans_chapter_source, chapter_url, chapter_url_source, no_quotes, access)
local ws_url, ws_label, L = wikisource_url_make (chapter); -- make a wikisource URL and label from a wikisource interwiki link
if ws_url then
ws_label = ws_label:gsub ('_', ' '); -- replace underscore separators with space characters
chapter = ws_label;
end
if not utilities.is_set (chapter) then
chapter = ''; -- to be safe for concatenation
else
if false == no_quotes then
chapter = kern_quotes (chapter); -- if necessary, separate chapter title's leading and trailing quote marks from module provided quote marks
chapter = utilities.wrap_style ('quoted-title', chapter);
end
end
chapter = script_concatenate (chapter, script_chapter, script_chapter_source); -- <bdi> tags, lang attribute, categorization, etc.; must be done after title is wrapped
if utilities.is_set (chapter_url) then
chapter = external_link (chapter_url, chapter, chapter_url_source, access); -- adds bare_url_missing_title error if appropriate
elseif ws_url then
chapter = external_link (ws_url, chapter .. ' ', 'ws link in chapter'); -- adds bare_url_missing_title error if appropriate; space char to move icon away from chap text; TODO: better way to do this?
chapter = utilities.substitute (cfg.presentation['interwiki-icon'], {cfg.presentation['class-wikisource'], L, chapter});
end
if utilities.is_set (trans_chapter) then
trans_chapter = utilities.wrap_style ('trans-quoted-title', trans_chapter);
if utilities.is_set (chapter) then
chapter = chapter .. ' ' .. trans_chapter;
else -- here when trans_chapter without chapter or script-chapter
chapter = trans_chapter;
chapter_source = trans_chapter_source:match ('trans%-?(.+)'); -- when no chapter, get matching name from trans-<param>
utilities.set_message ('err_trans_missing_title', {chapter_source});
end
end
return chapter;
end
--[[----------------< H A S _ I N V I S I B L E _ C H A R S >-------------------
This function searches a parameter's value for non-printable or invisible characters.
The search stops at the first match.
This function will detect the visible replacement character when it is part of the Wikisource.
Detects but ignores nowiki and math stripmarkers. Also detects other named stripmarkers
(gallery, math, pre, ref) and identifies them with a slightly different error message.
See also coins_cleanup().
Output of this function is an error message that identifies the character or the
Unicode group, or the stripmarker that was detected along with its position (or,
for multi-byte characters, the position of its first byte) in the parameter value.
]]
local function has_invisible_chars (param, v)
local position = ''; -- position of invisible char or starting position of stripmarker
local capture; -- used by stripmarker detection to hold name of the stripmarker
local stripmarker; -- boolean set true when a stripmarker is found
capture = string.match (v, '[%w%p ]*'); -- test for values that are simple ASCII text and bypass other tests if true
if capture == v then -- if same there are no Unicode characters
return;
end
for _, invisible_char in ipairs (cfg.invisible_chars) do
local char_name = invisible_char[1]; -- the character or group name
local pattern = invisible_char[2]; -- the pattern used to find it
position, _, capture = mw.ustring.find (v, pattern); -- see if the parameter value contains characters that match the pattern
if position and (cfg.invisible_defs.zwj == capture) then -- if we found a zero-width joiner character
if mw.ustring.find (v, cfg.indic_script) then -- it's ok if one of the Indic scripts
position = nil; -- unset position
elseif cfg.emoji_t[mw.ustring.codepoint (v, position+1)] then -- is zwj followed by a character listed in emoji{}?
position = nil; -- unset position
end
end
if position then
if 'nowiki' == capture or 'math' == capture or -- nowiki and math stripmarkers (not an error condition)
('templatestyles' == capture and utilities.in_array (param, {'id', 'quote'})) then -- templatestyles stripmarker allowed in these parameters
stripmarker = true; -- set a flag
elseif true == stripmarker and cfg.invisible_defs.del == capture then -- because stripmakers begin and end with the delete char, assume that we've found one end of a stripmarker
position = nil; -- unset
else
local err_msg;
if capture and not (cfg.invisible_defs.del == capture or cfg.invisible_defs.zwj == capture) then
err_msg = capture .. ' ' .. char_name;
else
err_msg = char_name .. ' ' .. 'character';
end
utilities.set_message ('err_invisible_char', {err_msg, utilities.wrap_style ('parameter', param), position}); -- add error message
return; -- and done with this parameter
end
end
end
end
--[[-------------------< A R G U M E N T _ W R A P P E R >----------------------
Argument wrapper. This function provides support for argument mapping defined
in the configuration file so that multiple names can be transparently aliased to
single internal variable.
]]
local function argument_wrapper ( args )
local origin = {};
return setmetatable({
ORIGIN = function ( self, k )
local dummy = self[k]; -- force the variable to be loaded.
return origin[k];
end
},
{
__index = function ( tbl, k )
if origin[k] ~= nil then
return nil;
end
local args, list, v = args, cfg.aliases[k];
if type( list ) == 'table' then
v, origin[k] = utilities.select_one ( args, list, 'err_redundant_parameters' );
if origin[k] == nil then
origin[k] = ''; -- Empty string, not nil
end
elseif list ~= nil then
v, origin[k] = args[list], list;
else
-- maybe let through instead of raising an error?
-- v, origin[k] = args[k], k;
error( cfg.messages['unknown_argument_map'] .. ': ' .. k);
end
-- Empty strings, not nil;
if v == nil then
v = '';
origin[k] = '';
end
tbl = rawset( tbl, k, v );
return v;
end,
});
end
--[[--------------------------< N O W R A P _ D A T E >-------------------------
When date is YYYY-MM-DD format wrap in nowrap span: <span ...>YYYY-MM-DD</span>.
When date is DD MMMM YYYY or is MMMM DD, YYYY then wrap in nowrap span:
<span ...>DD MMMM</span> YYYY or <span ...>MMMM DD,</span> YYYY
DOES NOT yet support MMMM YYYY or any of the date ranges.
]]
local function nowrap_date (date)
local cap = '';
local cap2 = '';
if date:match("^%d%d%d%d%-%d%d%-%d%d$") then
date = utilities.substitute (cfg.presentation['nowrap1'], date);
elseif date:match("^%a+%s*%d%d?,%s+%d%d%d%d$") or date:match ("^%d%d?%s*%a+%s+%d%d%d%d$") then
cap, cap2 = string.match (date, "^(.*)%s+(%d%d%d%d)$");
date = utilities.substitute (cfg.presentation['nowrap2'], {cap, cap2});
end
return date;
end
--[[--------------------------< S E T _ T I T L E T Y P E >---------------------
This function sets default title types (equivalent to the citation including
|type=<default value>) for those templates that have defaults. Also handles the
special case where it is desirable to omit the title type from the rendered citation
(|type=none).
]]
local function set_titletype (cite_class, title_type)
if utilities.is_set (title_type) then
if 'none' == cfg.keywords_xlate[title_type] then
title_type = ''; -- if |type=none then type parameter not displayed
end
return title_type; -- if |type= has been set to any other value use that value
end
return cfg.title_types [cite_class] or ''; -- set template's default title type; else empty string for concatenation
end
--[[--------------------------< S A F E _ J O I N >-----------------------------
Joins a sequence of strings together while checking for duplicate separation characters.
]]
local function safe_join( tbl, duplicate_char )
local f = {}; -- create a function table appropriate to type of 'duplicate character'
if 1 == #duplicate_char then -- for single byte ASCII characters use the string library functions
f.gsub = string.gsub
f.match = string.match
f.sub = string.sub
else -- for multi-byte characters use the ustring library functions
f.gsub = mw.ustring.gsub
f.match = mw.ustring.match
f.sub = mw.ustring.sub
end
local str = ''; -- the output string
local comp = ''; -- what does 'comp' mean?
local end_chr = '';
local trim;
for _, value in ipairs( tbl ) do
if value == nil then value = ''; end
if str == '' then -- if output string is empty
str = value; -- assign value to it (first time through the loop)
elseif value ~= '' then
if value:sub(1, 1) == '<' then -- special case of values enclosed in spans and other markup.
comp = value:gsub( "%b<>", "" ); -- remove HTML markup (<span>string</span> -> string)
else
comp = value;
end
-- typically duplicate_char is sepc
if f.sub(comp, 1, 1) == duplicate_char then -- is first character same as duplicate_char? why test first character?
-- Because individual string segments often (always?) begin with terminal punct for the
-- preceding segment: 'First element' .. 'sepc next element' .. etc.?
trim = false;
end_chr = f.sub(str, -1, -1); -- get the last character of the output string
-- str = str .. "<HERE(enchr=" .. end_chr .. ")" -- debug stuff?
if end_chr == duplicate_char then -- if same as separator
str = f.sub(str, 1, -2); -- remove it
elseif end_chr == "'" then -- if it might be wiki-markup
if f.sub(str, -3, -1) == duplicate_char .. "''" then -- if last three chars of str are sepc''
str = f.sub(str, 1, -4) .. "''"; -- remove them and add back ''
elseif f.sub(str, -5, -1) == duplicate_char .. "]]''" then -- if last five chars of str are sepc]]''
trim = true; -- why? why do this and next differently from previous?
elseif f.sub(str, -4, -1) == duplicate_char .. "]''" then -- if last four chars of str are sepc]''
trim = true; -- same question
end
elseif end_chr == "]" then -- if it might be wiki-markup
if f.sub(str, -3, -1) == duplicate_char .. "]]" then -- if last three chars of str are sepc]] wikilink
trim = true;
elseif f.sub(str, -3, -1) == duplicate_char .. '"]' then -- if last three chars of str are sepc"] quoted external link
trim = true;
elseif f.sub(str, -2, -1) == duplicate_char .. "]" then -- if last two chars of str are sepc] external link
trim = true;
elseif f.sub(str, -4, -1) == duplicate_char .. "'']" then -- normal case when |url=something & |title=Title.
trim = true;
end
elseif end_chr == " " then -- if last char of output string is a space
if f.sub(str, -2, -1) == duplicate_char .. " " then -- if last two chars of str are <sepc><space>
str = f.sub(str, 1, -3); -- remove them both
end
end
if trim then
if value ~= comp then -- value does not equal comp when value contains HTML markup
local dup2 = duplicate_char;
if f.match(dup2, "%A" ) then dup2 = "%" .. dup2; end -- if duplicate_char not a letter then escape it
value = f.gsub(value, "(%b<>)" .. dup2, "%1", 1 ) -- remove duplicate_char if it follows HTML markup
else
value = f.sub(value, 2, -1 ); -- remove duplicate_char when it is first character
end
end
end
str = str .. value; -- add it to the output string
end
end
return str;
end
--[[--------------------------< I S _ S U F F I X >-----------------------------
returns true if suffix is properly formed Jr, Sr, or ordinal in the range 1–9.
Puncutation not allowed.
]]
local function is_suffix (suffix)
if utilities.in_array (suffix, {'Jr', 'Sr', 'Jnr', 'Snr', '1st', '2nd', '3rd'}) or suffix:match ('^%dth$') then
return true;
end
return false;
end
--[[--------------------< I S _ G O O D _ V A N C _ N A M E >-------------------
For Vancouver style, author/editor names are supposed to be rendered in Latin
(read ASCII) characters. When a name uses characters that contain diacritical
marks, those characters are to be converted to the corresponding Latin
character. When a name is written using a non-Latin alphabet or logogram, that
name is to be transliterated into Latin characters. The module doesn't do this
so editors may/must.
This test allows |first= and |last= names to contain any of the letters defined
in the four Unicode Latin character sets
[http://www.unicode.org/charts/PDF/U0000.pdf C0 Controls and Basic Latin] 0041–005A, 0061–007A
[http://www.unicode.org/charts/PDF/U0080.pdf C1 Controls and Latin-1 Supplement] 00C0–00D6, 00D8–00F6, 00F8–00FF
[http://www.unicode.org/charts/PDF/U0100.pdf Latin Extended-A] 0100–017F
[http://www.unicode.org/charts/PDF/U0180.pdf Latin Extended-B] 0180–01BF, 01C4–024F
|lastn= also allowed to contain hyphens, spaces, and apostrophes.
(http://www.ncbi.nlm.nih.gov/books/NBK7271/box/A35029/)
|firstn= also allowed to contain hyphens, spaces, apostrophes, and periods
This original test:
if nil == mw.ustring.find (last, "^[A-Za-zÀ-ÖØ-öø-ƿDŽ-ɏ%-%s%']*$")
or nil == mw.ustring.find (first, "^[A-Za-zÀ-ÖØ-öø-ƿDŽ-ɏ%-%s%'%.]+[2-6%a]*$") then
was written outside of the code editor and pasted here because the code editor
gets confused between character insertion point and cursor position. The test has
been rewritten to use decimal character escape sequence for the individual bytes
of the Unicode characters so that it is not necessary to use an external editor
to maintain this code.
\195\128-\195\150 – À-Ö (U+00C0–U+00D6 – C0 controls)
\195\152-\195\182 – Ø-ö (U+00D8-U+00F6 – C0 controls)
\195\184-\198\191 – ø-ƿ (U+00F8-U+01BF – C0 controls, Latin extended A & B)
\199\132-\201\143 – DŽ-ɏ (U+01C4-U+024F – Latin extended B)
]]
local function is_good_vanc_name (last, first, suffix, position)
if not suffix then
if first:find ('[,%s]') then -- when there is a space or comma, might be first name/initials + generational suffix
first = first:match ('(.-)[,%s]+'); -- get name/initials
suffix = first:match ('[,%s]+(.+)$'); -- get generational suffix
end
end
if utilities.is_set (suffix) then
if not is_suffix (suffix) then
add_vanc_error (cfg.err_msg_supl.suffix, position);
return false; -- not a name with an appropriate suffix
end
end
if nil == mw.ustring.find (last, "^[A-Za-z\195\128-\195\150\195\152-\195\182\195\184-\198\191\199\132-\201\143%-%s%']*$") or
nil == mw.ustring.find (first, "^[A-Za-z\195\128-\195\150\195\152-\195\182\195\184-\198\191\199\132-\201\143%-%s%'%.]*$") then
add_vanc_error (cfg.err_msg_supl['non-Latin char'], position);
return false; -- not a string of Latin characters; Vancouver requires Romanization
end;
return true;
end
--[[--------------------------< R E D U C E _ T O _ I N I T I A L S >------------------------------------------
Attempts to convert names to initials in support of |name-list-style=vanc.
Names in |firstn= may be separated by spaces or hyphens, or for initials, a period.
See http://www.ncbi.nlm.nih.gov/books/NBK7271/box/A35062/.
Vancouver style requires family rank designations (Jr, II, III, etc.) to be rendered
as Jr, 2nd, 3rd, etc. See http://www.ncbi.nlm.nih.gov/books/NBK7271/box/A35085/.
This code only accepts and understands generational suffix in the Vancouver format
because Roman numerals look like, and can be mistaken for, initials.
This function uses ustring functions because firstname initials may be any of the
Unicode Latin characters accepted by is_good_vanc_name ().
]]
local function reduce_to_initials(first, position)
local name, suffix = mw.ustring.match(first, "^(%u+) ([%dJS][%drndth]+)$");
if not name then -- if not initials and a suffix
name = mw.ustring.match(first, "^(%u+)$"); -- is it just initials?
end
if name then -- if first is initials with or without suffix
if 3 > mw.ustring.len (name) then -- if one or two initials
if suffix then -- if there is a suffix
if is_suffix (suffix) then -- is it legitimate?
return first; -- one or two initials and a valid suffix so nothing to do
else
add_vanc_error (cfg.err_msg_supl.suffix, position); -- one or two initials with invalid suffix so error message
return first; -- and return first unmolested
end
else
return first; -- one or two initials without suffix; nothing to do
end
end
end -- if here then name has 3 or more uppercase letters so treat them as a word
local initials, names = {}, {}; -- tables to hold name parts and initials
local i = 1; -- counter for number of initials
names = mw.text.split (first, '[%s,]+'); -- split into a table of names and possible suffix
while names[i] do -- loop through the table
if 1 < i and names[i]:match ('[%dJS][%drndth]+%.?$') then -- if not the first name, and looks like a suffix (may have trailing dot)
names[i] = names[i]:gsub ('%.', ''); -- remove terminal dot if present
if is_suffix (names[i]) then -- if a legitimate suffix
table.insert (initials, ' ' .. names[i]); -- add a separator space, insert at end of initials table
break; -- and done because suffix must fall at the end of a name
end -- no error message if not a suffix; possibly because of Romanization
end
if 3 > i then
table.insert (initials, mw.ustring.sub(names[i], 1, 1)); -- insert the initial at end of initials table
end
i = i + 1; -- bump the counter
end
return table.concat(initials) -- Vancouver format does not include spaces.
end
--[[--------------------------< I N T E R W I K I _ P R E F I X E N _ G E T >----------------------------------
extract interwiki prefixen from <value>. Returns two one or two values:
false – no prefixen
nil – prefix exists but not recognized
project prefix, language prefix – when value has either of:
:<project>:<language>:<article>
:<language>:<project>:<article>
project prefix, nil – when <value> has only a known single-letter prefix
nil, language prefix – when <value> has only a known language prefix
accepts single-letter project prefixen: 'd' (wikidata), 's' (wikisource), and 'w' (wikipedia) prefixes; at this
writing, the other single-letter prefixen (b (wikibook), c (commons), m (meta), n (wikinews), q (wikiquote), and
v (wikiversity)) are not supported.
]]
local function interwiki_prefixen_get (value, is_link)
if not value:find (':%l+:') then -- if no prefix
return false; -- abandon; boolean here to distinguish from nil fail returns later
end
local prefix_patterns_linked_t = { -- sequence of valid interwiki and inter project prefixen
'^%[%[:([dsw]):(%l%l+):', -- wikilinked; project and language prefixes
'^%[%[:(%l%l+):([dsw]):', -- wikilinked; language and project prefixes
'^%[%[:([dsw]):', -- wikilinked; project prefix
'^%[%[:(%l%l+):', -- wikilinked; language prefix
}
local prefix_patterns_unlinked_t = { -- sequence of valid interwiki and inter project prefixen
'^:([dsw]):(%l%l+):', -- project and language prefixes
'^:(%l%l+):([dsw]):', -- language and project prefixes
'^:([dsw]):', -- project prefix
'^:(%l%l+):', -- language prefix
}
local cap1, cap2;
for _, pattern in ipairs ((is_link and prefix_patterns_linked_t) or prefix_patterns_unlinked_t) do
cap1, cap2 = value:match (pattern);
if cap1 then
break; -- found a match so stop looking
end
end
if cap1 and cap2 then -- when both then :project:language: or :language:project: (both forms allowed)
if 1 == #cap1 then -- length == 1 then :project:language:
if cfg.inter_wiki_map[cap2] then -- is language prefix in the interwiki map?
return cap1, cap2; -- return interwiki project and interwiki language
end
else -- here when :language:project:
if cfg.inter_wiki_map[cap1] then -- is language prefix in the interwiki map?
return cap2, cap1; -- return interwiki project and interwiki language
end
end
return nil; -- unknown interwiki language
elseif not (cap1 or cap2) then -- both are nil?
return nil; -- we got something that looks like a project prefix but isn't; return fail
elseif 1 == #cap1 then -- here when one capture
return cap1, nil; -- length is 1 so return project, nil language
else -- here when one capture and its length it more than 1
if cfg.inter_wiki_map[cap1] then -- is language prefix in the interwiki map?
return nil, cap1; -- return nil project, language
end
end
end
--[[--------------------------< L I S T _ P E O P L E >--------------------------
Formats a list of people (authors, contributors, editors, interviewers, translators)
names in the list will be linked when
|<name>-link= has a value
|<name>-mask- does NOT have a value; masked names are presumed to have been
rendered previously so should have been linked there
when |<name>-mask=0, the associated name is not rendered
]]
local function list_people (control, people, etal)
local sep;
local namesep;
local format = control.format;
local maximum = control.maximum;
local name_list = {};
if 'vanc' == format then -- Vancouver-like name styling?
sep = cfg.presentation['sep_nl_vanc']; -- name-list separator between names is a comma
namesep = cfg.presentation['sep_name_vanc']; -- last/first separator is a space
else
sep = cfg.presentation['sep_nl']; -- name-list separator between names is a semicolon
namesep = cfg.presentation['sep_name']; -- last/first separator is <comma><space>
end
if sep:sub (-1, -1) ~= " " then sep = sep .. " " end
if utilities.is_set (maximum) and maximum < 1 then return "", 0; end -- returned 0 is for EditorCount; not used for other names
for i, person in ipairs (people) do
if utilities.is_set (person.last) then
local mask = person.mask;
local one;
local sep_one = sep;
if utilities.is_set (maximum) and i > maximum then
etal = true;
break;
end
if mask then
local n = tonumber (mask); -- convert to a number if it can be converted; nil else
if n then
one = 0 ~= n and string.rep("—", n) or nil; -- make a string of (n > 0) mdashes, nil else, to replace name
person.link = nil; -- don't create link to name if name is replaces with mdash string or has been set nil
else
one = mask; -- replace name with mask text (must include name-list separator)
sep_one = " "; -- modify name-list separator
end
else
one = person.last; -- get surname
local first = person.first -- get given name
if utilities.is_set (first) then
if ("vanc" == format) then -- if Vancouver format
one = one:gsub ('%.', ''); -- remove periods from surnames (http://www.ncbi.nlm.nih.gov/books/NBK7271/box/A35029/)
if not person.corporate and is_good_vanc_name (one, first, nil, i) then -- and name is all Latin characters; corporate authors not tested
first = reduce_to_initials (first, i); -- attempt to convert first name(s) to initials
end
end
one = one .. namesep .. first;
end
end
if utilities.is_set (person.link) then
one = utilities.make_wikilink (person.link, one); -- link author/editor
end
if one then -- if <one> has a value (name, mdash replacement, or mask text replacement)
local proj, tag = interwiki_prefixen_get (one, true); -- get the interwiki prefixen if present
if 'w' == proj and ('Wikipedia' == mw.site.namespaces.Project['name']) then
proj = nil; -- for stuff like :w:de:<article>, :w is unnecessary TODO: maint cat?
end
if proj then
proj = ({['d'] = 'Wikidata', ['s'] = 'Wikisource', ['w'] = 'Wikipedia'})[proj]; -- :w (wikipedia) for linking from a non-wikipedia project
if proj then
one = one .. utilities.wrap_style ('interproj', proj); -- add resized leading space, brackets, static text, language name
tag = nil; -- unset; don't do both project and language
end
end
if tag == cfg.this_wiki_code then
tag = nil; -- stuff like :en:<article> at en.wiki is pointless TODO: maint cat?
end
if tag then
local lang = cfg.lang_code_remap[tag] or cfg.mw_languages_by_tag_t[tag];
if lang then -- error messaging done in extract_names() where we know parameter names
one = one .. utilities.wrap_style ('interwiki', lang); -- add resized leading space, brackets, static text, language name
end
end
table.insert (name_list, one); -- add it to the list of names
table.insert (name_list, sep_one); -- add the proper name-list separator
end
end
end
local count = #name_list / 2; -- (number of names + number of separators) divided by 2
if 0 < count then
if 1 < count and not etal then
if 'amp' == format then
name_list[#name_list-2] = " & "; -- replace last separator with ampersand text
elseif 'and' == format then
if 2 == count then
name_list[#name_list-2] = cfg.presentation.sep_nl_and; -- replace last separator with 'and' text
else
name_list[#name_list-2] = cfg.presentation.sep_nl_end; -- replace last separator with '(sep) and' text
end
end
end
name_list[#name_list] = nil; -- erase the last separator
end
local result = table.concat (name_list); -- construct list
if etal and utilities.is_set (result) then -- etal may be set by |display-authors=etal but we might not have a last-first list
result = result .. sep .. ' ' .. cfg.messages['et al']; -- we've got a last-first list and etal so add et al.
end
return result, count; -- return name-list string and count of number of names (count used for editor names only)
end
--[[--------------------< M A K E _ C I T E R E F _ I D >-----------------------
Generates a CITEREF anchor ID if we have at least one name or a date. Otherwise
returns an empty string.
namelist is one of the contributor-, author-, or editor-name lists chosen in that
order. year is Year or anchor_year.
]]
local function make_citeref_id (namelist, year)
local names={}; -- a table for the one to four names and year
for i,v in ipairs (namelist) do -- loop through the list and take up to the first four last names
names[i] = v.last
if i == 4 then break end -- if four then done
end
table.insert (names, year); -- add the year at the end
local id = table.concat(names); -- concatenate names and year for CITEREF id
if utilities.is_set (id) then -- if concatenation is not an empty string
return "CITEREF" .. id; -- add the CITEREF portion
else
return ''; -- return an empty string; no reason to include CITEREF id in this citation
end
end
--[[--------------------------< C I T E _ C L A S S _A T T R I B U T E _M A K E >------------------------------
construct <cite> tag class attribute for this citation.
<cite_class> – config.CitationClass from calling template
<mode> – value from |mode= parameter
]]
local function cite_class_attribute_make (cite_class, mode)
local class_t = {};
table.insert (class_t, 'citation'); -- required for blue highlight
if 'citation' ~= cite_class then
table.insert (class_t, cite_class); -- identify this template for user css
table.insert (class_t, utilities.is_set (mode) and mode or 'cs1'); -- identify the citation style for user css or javascript
else
table.insert (class_t, utilities.is_set (mode) and mode or 'cs2'); -- identify the citation style for user css or javascript
end
for _, prop_key in ipairs (z.prop_keys_t) do
table.insert (class_t, prop_key); -- identify various properties for user css or javascript
end
return table.concat (class_t, ' '); -- make a big string and done
end
--[[---------------------< N A M E _ H A S _ E T A L >--------------------------
Evaluates the content of name parameters (author, editor, etc.) for variations on
the theme of et al. If found, the et al. is removed, a flag is set to true and
the function returns the modified name and the flag.
This function never sets the flag to false but returns its previous state because
it may have been set by previous passes through this function or by the associated
|display-<names>=etal parameter
]]
local function name_has_etal (name, etal, nocat, param)
if utilities.is_set (name) then -- name can be nil in which case just return
local patterns = cfg.et_al_patterns; -- get patterns from configuration
for _, pattern in ipairs (patterns) do -- loop through all of the patterns
if name:match (pattern) then -- if this 'et al' pattern is found in name
name = name:gsub (pattern, ''); -- remove the offending text
etal = true; -- set flag (may have been set previously here or by |display-<names>=etal)
if not nocat then -- no categorization for |vauthors=
utilities.set_message ('err_etal', {param}); -- and set an error if not added
end
end
end
end
return name, etal;
end
--[[---------------------< N A M E _ I S _ N U M E R I C >----------------------
Add maint cat when name parameter value does not contain letters. Does not catch
mixed alphanumeric names so |last=A. Green (1922-1987) does not get caught in the
current version of this test but |first=(1888) is caught.
returns nothing
]]
local function name_is_numeric (name, list_name)
if utilities.is_set (name) then
if mw.ustring.match (name, '^[%A]+$') then -- when name does not contain any letters
utilities.set_message ('maint_numeric_names', cfg.special_case_translation [list_name]); -- add a maint cat for this template
end
end
end
--[[-----------------< N A M E _ H A S _ M U L T _ N A M E S >------------------
Evaluates the content of last/surname (authors etc.) parameters for multiple names.
Multiple names are indicated if there is more than one comma or any "unescaped"
semicolons. Escaped semicolons are ones used as part of selected HTML entities.
If the condition is met, the function adds the multiple name maintenance category.
returns nothing
]]
local function name_has_mult_names (name, list_name)
local _, commas, semicolons, nbsps;
if utilities.is_set (name) then
_, commas = name:gsub (',', ''); -- count the number of commas
_, semicolons = name:gsub (';', ''); -- count the number of semicolons
-- nbsps probably should be its own separate count rather than merged in
-- some way with semicolons because Lua patterns do not support the
-- grouping operator that regex does, which means there is no way to add
-- more entities to escape except by adding more counts with the new
-- entities
_, nbsps = name:gsub (' ',''); -- count nbsps
-- There is exactly 1 semicolon per entity, so subtract nbsps
-- from semicolons to 'escape' them. If additional entities are added,
-- they also can be subtracted.
if 1 < commas or 0 < (semicolons - nbsps) then
utilities.set_message ('maint_mult_names', cfg.special_case_translation [list_name]); -- add a maint message
end
end
end
--[=[-------------------------< I S _ G E N E R I C >----------------------------------------------------------
Compares values assigned to various parameters according to the string provided as <item> in the function call.
<item> can have on of two values:
'generic_names' – for name-holding parameters: |last=, |first=, |editor-last=, etc
'generic_titles' – for |title=
There are two types of generic tests. The 'accept' tests look for a pattern that should not be rejected by the
'reject' test. For example,
|author=[[John Smith (author)|Smith, John]]
would be rejected by the 'author' reject test. But piped wikilinks with 'author' disambiguation should not be
rejected so the 'accept' test prevents that from happening. Accept tests are always performed before reject
tests.
Each of the 'accept' and 'reject' sequence tables hold tables for en.wiki (['en']) and local.wiki (['local'])
that each can hold a test sequence table The sequence table holds, at index [1], a test pattern, and, at index
[2], a boolean control value. The control value tells string.find() or mw.ustring.find() to do plain-text search (true)
or a pattern search (false). The intent of all this complexity is to make these searches as fast as possible so
that we don't run out of processing time on very large articles.
Returns
true when a reject test finds the pattern or string
false when an accept test finds the pattern or string
nil else
]=]
local function is_generic (item, value, wiki)
local test_val;
local str_lower = { -- use string.lower() for en.wiki (['en']) and use mw.ustring.lower() or local.wiki (['local'])
['en'] = string.lower,
['local'] = mw.ustring.lower,
}
local str_find = { -- use string.find() for en.wiki (['en']) and use mw.ustring.find() or local.wiki (['local'])
['en'] = string.find,
['local'] = mw.ustring.find,
}
local function test (val, test_t, wiki) -- local function to do the testing; <wiki> selects lower() and find() functions
val = test_t[2] and str_lower[wiki](value) or val; -- when <test_t[2]> set to 'true', plaintext search using lowercase value
return str_find[wiki] (val, test_t[1], 1, test_t[2]); -- return nil when not found or matched
end
local test_types_t = {'accept', 'reject'}; -- test accept patterns first, then reject patterns
local wikis_t = {'en', 'local'}; -- do tests for each of these keys; en.wiki first, local.wiki second
for _, test_type in ipairs (test_types_t) do -- for each test type
for _, generic_value in pairs (cfg.special_case_translation[item][test_type]) do -- spin through the list of generic value fragments to accept or reject
for _, wiki in ipairs (wikis_t) do
if generic_value[wiki] then
if test (value, generic_value[wiki], wiki) then -- go do the test
return ('reject' == test_type); -- param value rejected, return true; false else
end
end
end
end
end
end
--[[--------------------------< N A M E _ I S _ G E N E R I C >------------------------------------------------
calls is_generic() to determine if <name> is a 'generic name' listed in cfg.generic_names; <name_alias> is the
parameter name used in error messaging
]]
local function name_is_generic (name, name_alias)
if not added_generic_name_errs and is_generic ('generic_names', name) then
utilities.set_message ('err_generic_name', name_alias); -- set an error message
added_generic_name_errs = true;
end
end
--[[--------------------------< N A M E _ C H E C K S >--------------------------------------------------------
This function calls various name checking functions used to validate the content of the various name-holding parameters.
]]
local function name_checks (last, first, list_name, last_alias, first_alias)
local accept_name;
if utilities.is_set (last) then
last, accept_name = utilities.has_accept_as_written (last); -- remove accept-this-as-written markup when it wraps all of <last>
if not accept_name then -- <last> not wrapped in accept-as-written markup
name_has_mult_names (last, list_name); -- check for multiple names in the parameter (last only)
name_is_numeric (last, list_name); -- check for names that are composed of digits and punctuation
name_is_generic (last, last_alias); -- check for names found in the generic names list
end
end
if utilities.is_set (first) then
first, accept_name = utilities.has_accept_as_written (first); -- remove accept-this-as-written markup when it wraps all of <first>
if not accept_name then -- <first> not wrapped in accept-as-written markup
name_is_numeric (first, list_name); -- check for names that are composed of digits and punctuation
name_is_generic (first, first_alias); -- check for names found in the generic names list
end
local wl_type, D = utilities.is_wikilink (first);
if 0 ~= wl_type then
first = D;
utilities.set_message ('err_bad_paramlink', first_alias);
end
end
return last, first; -- done
end
--[[----------------------< E X T R A C T _ N A M E S >-------------------------
Gets name list from the input arguments
Searches through args in sequential order to find |lastn= and |firstn= parameters
(or their aliases), and their matching link and mask parameters. Stops searching
when both |lastn= and |firstn= are not found in args after two sequential attempts:
found |last1=, |last2=, and |last3= but doesn't find |last4= and |last5= then the
search is done.
This function emits an error message when there is a |firstn= without a matching
|lastn=. When there are 'holes' in the list of last names, |last1= and |last3=
are present but |last2= is missing, an error message is emitted. |lastn= is not
required to have a matching |firstn=.
When an author or editor parameter contains some form of 'et al.', the 'et al.'
is stripped from the parameter and a flag (etal) returned that will cause list_people()
to add the static 'et al.' text from Module:Citation/CS1/Configuration. This keeps
'et al.' out of the template's metadata. When this occurs, an error is emitted.
]]
local function extract_names(args, list_name)
local names = {}; -- table of names
local last; -- individual name components
local first;
local link;
local mask;
local i = 1; -- loop counter/indexer
local n = 1; -- output table indexer
local count = 0; -- used to count the number of times we haven't found a |last= (or alias for authors, |editor-last or alias for editors)
local etal = false; -- return value set to true when we find some form of et al. in an author parameter
local last_alias, first_alias, link_alias; -- selected parameter aliases used in error messaging
while true do
last, last_alias = utilities.select_one ( args, cfg.aliases[list_name .. '-Last'], 'err_redundant_parameters', i ); -- search through args for name components beginning at 1
first, first_alias = utilities.select_one ( args, cfg.aliases[list_name .. '-First'], 'err_redundant_parameters', i );
link, link_alias = utilities.select_one ( args, cfg.aliases[list_name .. '-Link'], 'err_redundant_parameters', i );
mask = utilities.select_one ( args, cfg.aliases[list_name .. '-Mask'], 'err_redundant_parameters', i );
if last then -- error check |lastn= alias for unknown interwiki link prefix; done here because this is where we have the parameter name
local project, language = interwiki_prefixen_get (last, true); -- true because we expect interwiki links in |lastn= to be wikilinked
if nil == project and nil == language then -- when both are nil
utilities.set_message ('err_bad_paramlink', last_alias); -- not known, emit an error message -- TODO: err_bad_interwiki?
last = utilities.remove_wiki_link (last); -- remove wikilink markup; show display value only
end
end
if link then -- error check |linkn= alias for unknown interwiki link prefix
local project, language = interwiki_prefixen_get (link, false); -- false because wiki links in |author-linkn= is an error
if nil == project and nil == language then -- when both are nil
utilities.set_message ('err_bad_paramlink', link_alias); -- not known, emit an error message -- TODO: err_bad_interwiki?
link = nil; -- unset so we don't link
link_alias = nil;
end
end
last, etal = name_has_etal (last, etal, false, last_alias); -- find and remove variations on et al.
first, etal = name_has_etal (first, etal, false, first_alias); -- find and remove variations on et al.
last, first = name_checks (last, first, list_name, last_alias, first_alias); -- multiple names, extraneous annotation, etc. checks
if first and not last then -- if there is a firstn without a matching lastn
local alias = first_alias:find ('given', 1, true) and 'given' or 'first'; -- get first or given form of the alias
utilities.set_message ('err_first_missing_last', {
first_alias, -- param name of alias missing its mate
first_alias:gsub (alias, {['first'] = 'last', ['given'] = 'surname'}), -- make param name appropriate to the alias form
}); -- add this error message
elseif not first and not last then -- if both firstn and lastn aren't found, are we done?
count = count + 1; -- number of times we haven't found last and first
if 2 <= count then -- two missing names and we give up
break; -- normal exit or there is a two-name hole in the list; can't tell which
end
else -- we have last with or without a first
local result;
link = link_title_ok (link, link_alias, last, last_alias); -- check for improper wiki-markup
if first then
link = link_title_ok (link, link_alias, first, first_alias); -- check for improper wiki-markup
end
names[n] = {last = last, first = first, link = link, mask = mask, corporate = false}; -- add this name to our names list (corporate for |vauthors= only)
n = n + 1; -- point to next location in the names table
if 1 == count then -- if the previous name was missing
utilities.set_message ('err_missing_name', {list_name:match ("(%w+)List"):lower(), i - 1}); -- add this error message
end
count = 0; -- reset the counter, we're looking for two consecutive missing names
end
i = i + 1; -- point to next args location
end
return names, etal; -- all done, return our list of names and the etal flag
end
--[[--------------------------< N A M E _ T A G _ G E T >------------------------------------------------------
attempt to decode |language=<lang_param> and return language name and matching tag; nil else.
This function looks for:
<lang_param> as a tag in cfg.lang_code_remap{}
<lang_param> as a name in cfg.lang_name_remap{}
<lang_param> as a name in cfg.mw_languages_by_name_t
<lang_param> as a tag in cfg.mw_languages_by_tag_t
when those fail, presume that <lang_param> is an IETF-like tag that MediaWiki does not recognize. Strip all
script, region, variant, whatever subtags from <lang_param> to leave just a two or three character language tag
and look for the new <lang_param> in cfg.mw_languages_by_tag_t{}
on success, returns name (in properly capitalized form) and matching tag (in lowercase); on failure returns nil
]]
local function name_tag_get (lang_param)
local lang_param_lc = mw.ustring.lower (lang_param); -- use lowercase as an index into the various tables
local name;
local tag;
name = cfg.lang_code_remap[lang_param_lc]; -- assume <lang_param_lc> is a tag; attempt to get remapped language name
if name then -- when <name>, <lang_param> is a tag for a remapped language name
return name, lang_param_lc; -- so return <name> from remap and <lang_param_lc>
end
tag = lang_param_lc:match ('^(%a%a%a?)%-.*'); -- still assuming that <lang_param_lc> is a tag; strip script, region, variant subtags
name = cfg.lang_code_remap[tag]; -- attempt to get remapped language name with language subtag only
if name then -- when <name>, <tag> is a tag for a remapped language name
return name, tag; -- so return <name> from remap and <tag>
end
if cfg.lang_name_remap[lang_param_lc] then -- not a tag, assume <lang_param_lc> is a name; attempt to get remapped language tag
return cfg.lang_name_remap[lang_param_lc][1], cfg.lang_name_remap[lang_param_lc][2]; -- for this <lang_param_lc>, return a (possibly) new name and appropriate tag
end
tag = cfg.mw_languages_by_name_t[lang_param_lc]; -- assume that <lang_param_lc> is a language name; attempt to get its matching tag
if tag then
return cfg.mw_languages_by_tag_t[tag], tag; -- <lang_param_lc> is a name so return the name from the table and <tag>
end
name = cfg.mw_languages_by_tag_t[lang_param_lc]; -- assume that <lang_param_lc> is a tag; attempt to get its matching language name
if name then
return name, lang_param_lc; -- <lang_param_lc> is a tag so return it and <name>
end
tag = lang_param_lc:match ('^(%a%a%a?)%-.*'); -- is <lang_param_lc> an IETF-like tag that MediaWiki doesn't recognize? <tag> gets the language subtag; nil else
if tag then
name = cfg.mw_languages_by_tag_t[tag]; -- attempt to get a language name using the shortened <tag>
if name then
return name, tag; -- <lang_param_lc> is an unrecognized IETF-like tag so return <name> and language subtag
end
end
end
--[[-------------------< L A N G U A G E _ P A R A M E T E R >------------------
Gets language name from a provided two- or three-character ISO 639 code. If a code
is recognized by MediaWiki, use the returned name; if not, then use the value that
was provided with the language parameter.
When |language= contains a recognized language (either code or name), the page is
assigned to the category for that code: Category:Norwegian-language sources (no).
For valid three-character code languages, the page is assigned to the single category
for '639-2' codes: Category:CS1 ISO 639-2 language sources.
Languages that are the same as the local wiki are not categorized. MediaWiki does
not recognize three-character equivalents of two-character codes: code 'ar' is
recognized but code 'ara' is not.
This function supports multiple languages in the form |language=nb, French, th
where the language names or codes are separated from each other by commas with
optional space characters.
]]
local function language_parameter (lang)
local tag; -- some form of IETF-like language tag; language subtag with optional region, sript, vatiant, etc subtags
local lang_subtag; -- ve populates |language= with mostly unecessary region subtags the MediaWiki does not recognize; this is the base language subtag
local name; -- the language name
local language_list = {}; -- table of language names to be rendered
local names_t = {}; -- table made from the value assigned to |language=
local this_wiki_name = mw.language.fetchLanguageName (cfg.this_wiki_code, cfg.this_wiki_code); -- get this wiki's language name
names_t = mw.text.split (lang, '%s*,%s*'); -- names should be a comma separated list
for _, lang in ipairs (names_t) do -- reuse lang here because we don't yet know if lang is a language name or a language tag
name, tag = name_tag_get (lang); -- attempt to get name/tag pair for <lang>; <name> has proper capitalization; <tag> is lowercase
if utilities.is_set (tag) then
lang_subtag = tag:gsub ('^(%a%a%a?)%-.*', '%1'); -- for categorization, strip any IETF-like tags from language tag
if cfg.this_wiki_code ~= lang_subtag then -- when the language is not the same as this wiki's language
if 2 == lang_subtag:len() then -- and is a two-character tag
utilities.add_prop_cat ('foreign-lang-source', {name, tag}, lang_subtag); -- categorize it; tag appended to allow for multiple language categorization
else -- or is a recognized language (but has a three-character tag)
utilities.add_prop_cat ('foreign-lang-source-2', {lang_subtag}, lang_subtag); -- categorize it differently TODO: support multiple three-character tag categories per cs1|2 template?
end
elseif cfg.local_lang_cat_enable then -- when the language and this wiki's language are the same and categorization is enabled
utilities.add_prop_cat ('local-lang-source', {name, lang_subtag}); -- categorize it
end
else
name = lang; -- return whatever <lang> has so that we show something
utilities.set_message ('maint_unknown_lang'); -- add maint category if not already added
end
table.insert (language_list, name);
name = ''; -- so we can reuse it
end
name = utilities.make_sep_list (#language_list, language_list);
if (1 == #language_list) and (lang_subtag == cfg.this_wiki_code) then -- when only one language, find lang name in this wiki lang name; for |language=en-us, 'English' in 'American English'
return ''; -- if one language and that language is this wiki's return an empty string (no annotation)
end
return (" " .. wrap_msg ('language', name)); -- otherwise wrap with '(in ...)'
--[[ TODO: should only return blank or name rather than full list
so we can clean up the bunched parenthetical elements Language, Type, Format
]]
end
--[[-----------------------< S E T _ C S _ S T Y L E >--------------------------
Gets the default CS style configuration for the given mode.
Returns default separator and either postscript as passed in or the default.
In CS1, the default postscript and separator are '.'.
In CS2, the default postscript is the empty string and the default separator is ','.
]]
local function set_cs_style (postscript, mode)
if utilities.is_set(postscript) then
-- emit a maintenance message if user postscript is the default cs1 postscript
-- we catch the opposite case for cs2 in set_style
if mode == 'cs1' and postscript == cfg.presentation['ps_' .. mode] then
utilities.set_message ('maint_postscript');
end
else
postscript = cfg.presentation['ps_' .. mode];
end
return cfg.presentation['sep_' .. mode], postscript;
end
--[[--------------------------< S E T _ S T Y L E >-----------------------------
Sets the separator and postscript styles. Checks the |mode= first and the
#invoke CitationClass second. Removes the postscript if postscript == none.
]]
local function set_style (mode, postscript, cite_class)
local sep;
if 'cs2' == mode then
sep, postscript = set_cs_style (postscript, 'cs2');
elseif 'cs1' == mode then
sep, postscript = set_cs_style (postscript, 'cs1');
elseif 'citation' == cite_class then
sep, postscript = set_cs_style (postscript, 'cs2');
else
sep, postscript = set_cs_style (postscript, 'cs1');
end
if cfg.keywords_xlate[postscript:lower()] == 'none' then
-- emit a maintenance message if user postscript is the default cs2 postscript
-- we catch the opposite case for cs1 in set_cs_style
if 'cs2' == mode or 'citation' == cite_class then
utilities.set_message ('maint_postscript');
end
postscript = '';
end
return sep, postscript
end
--[=[-------------------------< I S _ P D F >-----------------------------------
Determines if a URL has the file extension that is one of the PDF file extensions
used by [[MediaWiki:Common.css]] when applying the PDF icon to external links.
returns true if file extension is one of the recognized extensions, else false
]=]
local function is_pdf (url)
return url:match ('%.pdf$') or url:match ('%.PDF$') or
url:match ('%.pdf[%?#]') or url:match ('%.PDF[%?#]') or
url:match ('%.PDF#') or url:match ('%.pdf#');
end
--[[--------------------------< S T Y L E _ F O R M A T >-----------------------
Applies CSS style to |format=, |chapter-format=, etc. Also emits an error message
if the format parameter does not have a matching URL parameter. If the format parameter
is not set and the URL contains a file extension that is recognized as a PDF document
by MediaWiki's commons.css, this code will set the format parameter to (PDF) with
the appropriate styling.
]]
local function style_format (format, url, fmt_param, url_param)
if utilities.is_set (format) then
format = utilities.wrap_style ('format', format); -- add leading space, parentheses, resize
if not utilities.is_set (url) then
utilities.set_message ('err_format_missing_url', {fmt_param, url_param}); -- add an error message
end
elseif is_pdf (url) then -- format is not set so if URL is a PDF file then
format = utilities.wrap_style ('format', 'PDF'); -- set format to PDF
else
format = ''; -- empty string for concatenation
end
return format;
end
--[[---------------------< G E T _ D I S P L A Y _ N A M E S >------------------
Returns a number that defines the number of names displayed for author and editor
name lists and a Boolean flag to indicate when et al. should be appended to the name list.
When the value assigned to |display-xxxxors= is a number greater than or equal to zero,
return the number and the previous state of the 'etal' flag (false by default
but may have been set to true if the name list contains some variant of the text 'et al.').
When the value assigned to |display-xxxxors= is the keyword 'etal', return a number
that is one greater than the number of authors in the list and set the 'etal' flag true.
This will cause the list_people() to display all of the names in the name list followed by 'et al.'
In all other cases, returns nil and the previous state of the 'etal' flag.
inputs:
max: A['DisplayAuthors'] or A['DisplayEditors']; a number or some flavor of etal
count: #a or #e
list_name: 'authors' or 'editors'
etal: author_etal or editor_etal
]]
local function get_display_names (max, count, list_name, etal, param)
if utilities.is_set (max) then
if 'etal' == max:lower():gsub("[ '%.]", '') then -- the :gsub() portion makes 'etal' from a variety of 'et al.' spellings and stylings
max = count + 1; -- number of authors + 1 so display all author name plus et al.
etal = true; -- overrides value set by extract_names()
elseif max:match ('^%d+$') then -- if is a string of numbers
max = tonumber (max); -- make it a number
if max >= count then -- if |display-xxxxors= value greater than or equal to number of authors/editors
utilities.set_message ('err_disp_name', {param, max}); -- add error message
max = nil;
end
else -- not a valid keyword or number
utilities.set_message ('err_disp_name', {param, max}); -- add error message
max = nil; -- unset; as if |display-xxxxors= had not been set
end
end
return max, etal;
end
--[[----------< E X T R A _ T E X T _ I N _ P A G E _ C H E C K >---------------
Adds error if |page=, |pages=, |quote-page=, |quote-pages= has what appears to be
some form of p. or pp. abbreviation in the first characters of the parameter content.
check page for extraneous p, p., pp, pp., pg, pg. at start of parameter value:
good pattern: '^P[^%.P%l]' matches when page begins PX or P# but not Px
where x and X are letters and # is a digit
bad pattern: '^[Pp][PpGg]' matches when page begins pp, pP, Pp, PP, pg, pG, Pg, PG
]]
local function extra_text_in_page_check (val, name)
if not val:match (cfg.vol_iss_pg_patterns.good_ppattern) then
for _, pattern in ipairs (cfg.vol_iss_pg_patterns.bad_ppatterns) do -- spin through the selected sequence table of patterns
if val:match (pattern) then -- when a match, error so
utilities.set_message ('err_extra_text_pages', name); -- add error message
return; -- and done
end
end
end
end
--[[--------------------------< E X T R A _ T E X T _ I N _ V O L _ I S S _ C H E C K >------------------------
Adds error if |volume= or |issue= has what appears to be some form of redundant 'type' indicator.
For |volume=:
'V.', or 'Vol.' (with or without the dot) abbreviations or 'Volume' in the first characters of the parameter
content (all case insensitive). 'V' and 'v' (without the dot) are presumed to be roman numerals so
are allowed.
For |issue=:
'No.', 'I.', 'Iss.' (with or without the dot) abbreviations, or 'Issue' in the first characters of the
parameter content (all case insensitive).
Single character values ('v', 'i', 'n') allowed when not followed by separator character ('.', ':', '=', or
whitespace character) – param values are trimmed of whitespace by MediaWiki before delivered to the module.
<val> is |volume= or |issue= parameter value
<name> is |volume= or |issue= parameter name for error message
<selector> is 'v' for |volume=, 'i' for |issue=
sets error message on failure; returns nothing
]]
local function extra_text_in_vol_iss_check (val, name, selector)
if not utilities.is_set (val) then
return;
end
local patterns = 'v' == selector and cfg.vol_iss_pg_patterns.vpatterns or cfg.vol_iss_pg_patterns.ipatterns;
local handler = 'v' == selector and 'err_extra_text_volume' or 'err_extra_text_issue';
val = val:lower(); -- force parameter value to lower case
for _, pattern in ipairs (patterns) do -- spin through the selected sequence table of patterns
if val:match (pattern) then -- when a match, error so
utilities.set_message (handler, name); -- add error message
return; -- and done
end
end
end
--[=[-------------------------< G E T _ V _ N A M E _ T A B L E >----------------------------------------------
split apart a |vauthors= or |veditors= parameter. This function allows for corporate names, wrapped in doubled
parentheses to also have commas; in the old version of the code, the doubled parentheses were included in the
rendered citation and in the metadata. Individual author names may be wikilinked
|vauthors=Jones AB, [[E. B. White|White EB]], ((Black, Brown, and Co.))
]=]
local function get_v_name_table (vparam, output_table, output_link_table)
local name_table = mw.text.split(vparam, "%s*,%s*"); -- names are separated by commas
local wl_type, label, link; -- wl_type not used here; just a placeholder
local i = 1;
while name_table[i] do
if name_table[i]:match ('^%(%(.*[^%)][^%)]$') then -- first segment of corporate with one or more commas; this segment has the opening doubled parentheses
local name = name_table[i];
i = i + 1; -- bump indexer to next segment
while name_table[i] do
name = name .. ', ' .. name_table[i]; -- concatenate with previous segments
if name_table[i]:match ('^.*%)%)$') then -- if this table member has the closing doubled parentheses
break; -- and done reassembling so
end
i = i + 1; -- bump indexer
end
table.insert (output_table, name); -- and add corporate name to the output table
table.insert (output_link_table, ''); -- no wikilink
else
wl_type, label, link = utilities.is_wikilink (name_table[i]); -- wl_type is: 0, no wl (text in label variable); 1, [[D]]; 2, [[L|D]]
table.insert (output_table, label); -- add this name
if 1 == wl_type then
table.insert (output_link_table, label); -- simple wikilink [[D]]
else
table.insert (output_link_table, link); -- no wikilink or [[L|D]]; add this link if there is one, else empty string
end
end
i = i + 1;
end
return output_table;
end
--[[--------------------------< P A R S E _ V A U T H O R S _ V E D I T O R S >--------------------------------
This function extracts author / editor names from |vauthors= or |veditors= and finds matching |xxxxor-maskn= and
|xxxxor-linkn= in args. It then returns a table of assembled names just as extract_names() does.
Author / editor names in |vauthors= or |veditors= must be in Vancouver system style. Corporate or institutional names
may sometimes be required and because such names will often fail the is_good_vanc_name() and other format compliance
tests, are wrapped in doubled parentheses ((corporate name)) to suppress the format tests.
Supports generational suffixes Jr, 2nd, 3rd, 4th–6th.
This function sets the Vancouver error when a required comma is missing and when there is a space between an author's initials.
]]
local function parse_vauthors_veditors (args, vparam, list_name)
local names = {}; -- table of names assembled from |vauthors=, |author-maskn=, |author-linkn=
local v_name_table = {};
local v_link_table = {}; -- when name is wikilinked, targets go in this table
local etal = false; -- return value set to true when we find some form of et al. vauthors parameter
local last, first, link, mask, suffix;
local corporate = false;
vparam, etal = name_has_etal (vparam, etal, true); -- find and remove variations on et al. do not categorize (do it here because et al. might have a period)
v_name_table = get_v_name_table (vparam, v_name_table, v_link_table); -- names are separated by commas
for i, v_name in ipairs(v_name_table) do
first = ''; -- set to empty string for concatenation and because it may have been set for previous author/editor
local accept_name;
v_name, accept_name = utilities.has_accept_as_written (v_name); -- remove accept-this-as-written markup when it wraps all of <v_name>
if accept_name then
last = v_name;
corporate = true; -- flag used in list_people()
elseif string.find(v_name, "%s") then
if v_name:find('[;%.]') then -- look for commonly occurring punctuation characters;
add_vanc_error (cfg.err_msg_supl.punctuation, i);
end
local lastfirstTable = {}
lastfirstTable = mw.text.split(v_name, "%s+")
first = table.remove(lastfirstTable); -- removes and returns value of last element in table which should be initials or generational suffix
if not mw.ustring.match (first, '^%u+$') then -- mw.ustring here so that later we will catch non-Latin characters
suffix = first; -- not initials so assume that whatever we got is a generational suffix
first = table.remove(lastfirstTable); -- get what should be the initials from the table
end
last = table.concat(lastfirstTable, ' ') -- returns a string that is the concatenation of all other names that are not initials and generational suffix
if not utilities.is_set (last) then
first = ''; -- unset
last = v_name; -- last empty because something wrong with first
add_vanc_error (cfg.err_msg_supl.name, i);
end
if mw.ustring.match (last, '%a+%s+%u+%s+%a+') then
add_vanc_error (cfg.err_msg_supl['missing comma'], i); -- matches last II last; the case when a comma is missing
end
if mw.ustring.match (v_name, ' %u %u$') then -- this test is in the wrong place TODO: move or replace with a more appropriate test
add_vanc_error (cfg.err_msg_supl.initials, i); -- matches a space between two initials
end
else
last = v_name; -- last name or single corporate name? Doesn't support multiword corporate names? do we need this?
end
if utilities.is_set (first) then
if not mw.ustring.match (first, "^%u?%u$") then -- first shall contain one or two upper-case letters, nothing else
add_vanc_error (cfg.err_msg_supl.initials, i); -- too many initials; mixed case initials (which may be ok Romanization); hyphenated initials
end
is_good_vanc_name (last, first, suffix, i); -- check first and last before restoring the suffix which may have a non-Latin digit
if utilities.is_set (suffix) then
first = first .. ' ' .. suffix; -- if there was a suffix concatenate with the initials
suffix = ''; -- unset so we don't add this suffix to all subsequent names
end
else
if not corporate then
is_good_vanc_name (last, '', nil, i);
end
end
link = utilities.select_one ( args, cfg.aliases[list_name .. '-Link'], 'err_redundant_parameters', i ) or v_link_table[i];
mask = utilities.select_one ( args, cfg.aliases[list_name .. '-Mask'], 'err_redundant_parameters', i );
names[i] = {last = last, first = first, link = link, mask = mask, corporate = corporate}; -- add this assembled name to our names list
end
return names, etal; -- all done, return our list of names
end
--[[--------------------------< S E L E C T _ A U T H O R _ E D I T O R _ S O U R C E >------------------------
Select one of |authors=, |authorn= / |lastn / firstn=, or |vauthors= as the source of the author name list or
select one of |editorn= / editor-lastn= / |editor-firstn= or |veditors= as the source of the editor name list.
Only one of these appropriate three will be used. The hierarchy is: |authorn= (and aliases) highest and |authors= lowest;
|editorn= (and aliases) highest and |veditors= lowest (support for |editors= withdrawn)
When looking for |authorn= / |editorn= parameters, test |xxxxor1= and |xxxxor2= (and all of their aliases); stops after the second
test which mimicks the test used in extract_names() when looking for a hole in the author name list. There may be a better
way to do this, I just haven't discovered what that way is.
Emits an error message when more than one xxxxor name source is provided.
In this function, vxxxxors = vauthors or veditors; xxxxors = authors as appropriate.
]]
local function select_author_editor_source (vxxxxors, xxxxors, args, list_name)
local lastfirst = false;
if utilities.select_one ( args, cfg.aliases[list_name .. '-Last'], 'none', 1 ) or -- do this twice in case we have a |first1= without a |last1=; this ...
utilities.select_one ( args, cfg.aliases[list_name .. '-First'], 'none', 1 ) or -- ... also catches the case where |first= is used with |vauthors=
utilities.select_one ( args, cfg.aliases[list_name .. '-Last'], 'none', 2 ) or
utilities.select_one ( args, cfg.aliases[list_name .. '-First'], 'none', 2 ) then
lastfirst = true;
end
if (utilities.is_set (vxxxxors) and true == lastfirst) or -- these are the three error conditions
(utilities.is_set (vxxxxors) and utilities.is_set (xxxxors)) or
(true == lastfirst and utilities.is_set (xxxxors)) then
local err_name;
if 'AuthorList' == list_name then -- figure out which name should be used in error message
err_name = 'author';
else
err_name = 'editor';
end
utilities.set_message ('err_redundant_parameters', err_name .. '-name-list parameters'); -- add error message
end
if true == lastfirst then return 1 end; -- return a number indicating which author name source to use
if utilities.is_set (vxxxxors) then return 2 end;
if utilities.is_set (xxxxors) then return 3 end;
return 1; -- no authors so return 1; this allows missing author name test to run in case there is a first without last
end
--[[--------------------------< I S _ V A L I D _ P A R A M E T E R _ V A L U E >------------------------------
This function is used to validate a parameter's assigned value for those parameters that have only a limited number
of allowable values (yes, y, true, live, dead, etc.). When the parameter value has not been assigned a value (missing
or empty in the source template) the function returns the value specified by ret_val. If the parameter value is one
of the list of allowed values returns the translated value; else, emits an error message and returns the value
specified by ret_val.
TODO: explain <invert>
]]
local function is_valid_parameter_value (value, name, possible, ret_val, invert)
if not utilities.is_set (value) then
return ret_val; -- an empty parameter is ok
end
if (not invert and utilities.in_array (value, possible)) then -- normal; <value> is in <possible> table
return cfg.keywords_xlate[value]; -- return translation of parameter keyword
elseif invert and not utilities.in_array (value, possible) then -- invert; <value> is not in <possible> table
return value; -- return <value> as it is
else
utilities.set_message ('err_invalid_param_val', {name, value}); -- not an allowed value so add error message
return ret_val;
end
end
--[[--------------------------< T E R M I N A T E _ N A M E _ L I S T >----------------------------------------
This function terminates a name list (author, contributor, editor) with a separator character (sepc) and a space
when the last character is not a sepc character or when the last three characters are not sepc followed by two
closing square brackets (close of a wikilink). When either of these is true, the name_list is terminated with a
single space character.
]]
local function terminate_name_list (name_list, sepc)
if (string.sub (name_list, -3, -1) == sepc .. '. ') then -- if already properly terminated
return name_list; -- just return the name list
elseif (string.sub (name_list, -1, -1) == sepc) or (string.sub (name_list, -3, -1) == sepc .. ']]') then -- if last name in list ends with sepc char
return name_list .. " "; -- don't add another
else
return name_list .. sepc .. ' '; -- otherwise terminate the name list
end
end
--[[-------------------------< F O R M A T _ V O L U M E _ I S S U E >-----------------------------------------
returns the concatenation of the formatted volume and issue (or journal article number) parameters as a single
string; or formatted volume or formatted issue, or an empty string if neither are set.
]]
local function format_volume_issue (volume, issue, article, cite_class, origin, sepc, lower)
if not utilities.is_set (volume) and not utilities.is_set (issue) and not utilities.is_set (article) then
return '';
end
-- same condition as in format_pages_sheets()
local is_journal = 'journal' == cite_class or (utilities.in_array (cite_class, {'citation', 'map', 'interview'}) and 'journal' == origin);
local is_numeric_vol = volume and (volume:match ('^[MDCLXVI]+$') or volume:match ('^%d+$')); -- is only uppercase roman numerals or only digits?
local is_long_vol = volume and (4 < mw.ustring.len(volume)); -- is |volume= value longer than 4 characters?
if volume and (not is_numeric_vol and is_long_vol) then -- when not all digits or Roman numerals, is |volume= longer than 4 characters?
utilities.add_prop_cat ('long-vol'); -- yes, add properties cat
end
if is_journal then -- journal-style formatting
local vol = '';
if utilities.is_set (volume) then
if is_numeric_vol then -- |volume= value all digits or all uppercase Roman numerals?
vol = utilities.substitute (cfg.presentation['vol-bold'], {sepc, volume}); -- render in bold face
elseif is_long_vol then -- not all digits or Roman numerals; longer than 4 characters?
vol = utilities.substitute (cfg.messages['j-vol'], {sepc, utilities.hyphen_to_dash (volume)}); -- not bold
else -- four or fewer characters
vol = utilities.substitute (cfg.presentation['vol-bold'], {sepc, utilities.hyphen_to_dash (volume)}); -- bold
end
end
vol = vol .. (utilities.is_set (issue) and utilities.substitute (cfg.messages['j-issue'], issue) or '')
vol = vol .. (utilities.is_set (article) and utilities.substitute (cfg.messages['j-article-num'], article) or '')
return vol;
end
if 'podcast' == cite_class and utilities.is_set (issue) then
return wrap_msg ('issue', {sepc, issue}, lower);
end
if 'conference' == cite_class and utilities.is_set (article) then -- |article-number= supported only in journal and conference cites
if utilities.is_set (volume) and utilities.is_set (article) then -- both volume and article number
return wrap_msg ('vol-art', {sepc, utilities.hyphen_to_dash (volume), article}, lower);
elseif utilities.is_set (article) then -- article number alone; when volume alone, handled below
return wrap_msg ('art', {sepc, article}, lower);
end
end
-- all other types of citation
if utilities.is_set (volume) and utilities.is_set (issue) then
return wrap_msg ('vol-no', {sepc, utilities.hyphen_to_dash (volume), issue}, lower);
elseif utilities.is_set (volume) then
return wrap_msg ('vol', {sepc, utilities.hyphen_to_dash (volume)}, lower);
else
return wrap_msg ('issue', {sepc, issue}, lower);
end
end
--[[-------------------------< F O R M A T _ P A G E S _ S H E E T S >-----------------------------------------
adds static text to one of |page(s)= or |sheet(s)= values and returns it with all of the others set to empty strings.
The return order is:
page, pages, sheet, sheets
Singular has priority over plural when both are provided.
]]
local function format_pages_sheets (page, pages, sheet, sheets, cite_class, origin, sepc, nopp, lower)
if 'map' == cite_class then -- only cite map supports sheet(s) as in-source locators
if utilities.is_set (sheet) then
if 'journal' == origin then
return '', '', wrap_msg ('j-sheet', sheet, lower), '';
else
return '', '', wrap_msg ('sheet', {sepc, sheet}, lower), '';
end
elseif utilities.is_set (sheets) then
if 'journal' == origin then
return '', '', '', wrap_msg ('j-sheets', sheets, lower);
else
return '', '', '', wrap_msg ('sheets', {sepc, sheets}, lower);
end
end
end
local is_journal = 'journal' == cite_class or (utilities.in_array (cite_class, {'citation', 'map', 'interview'}) and 'journal' == origin);
if utilities.is_set (page) then
if is_journal then
return utilities.substitute (cfg.messages['j-page(s)'], page), '', '', '';
elseif not nopp then
return utilities.substitute (cfg.messages['p-prefix'], {sepc, page}), '', '', '';
else
return utilities.substitute (cfg.messages['nopp'], {sepc, page}), '', '', '';
end
elseif utilities.is_set (pages) then
if is_journal then
return utilities.substitute (cfg.messages['j-page(s)'], pages), '', '', '';
elseif tonumber(pages) ~= nil and not nopp then -- if pages is only digits, assume a single page number
return '', utilities.substitute (cfg.messages['p-prefix'], {sepc, pages}), '', '';
elseif not nopp then
return '', utilities.substitute (cfg.messages['pp-prefix'], {sepc, pages}), '', '';
else
return '', utilities.substitute (cfg.messages['nopp'], {sepc, pages}), '', '';
end
end
return '', '', '', ''; -- return empty strings
end
--[[--------------------------< I N S O U R C E _ L O C _ G E T >----------------------------------------------
returns one of the in-source locators: page, pages, or at.
If any of these are interwiki links to Wikisource, returns the label portion of the interwiki-link as plain text
for use in COinS. This COinS thing is done because here we convert an interwiki-link to an external link and
add an icon span around that; get_coins_pages() doesn't know about the span. TODO: should it?
TODO: add support for sheet and sheets?; streamline;
TODO: make it so that this function returns only one of the three as the single in-source (the return value assigned
to a new name)?
]]
local function insource_loc_get (page, page_orig, pages, pages_orig, at)
local ws_url, ws_label, coins_pages, L; -- for Wikisource interwiki-links; TODO: this corrupts page metadata (span remains in place after cleanup; fix there?)
if utilities.is_set (page) then
if utilities.is_set (pages) or utilities.is_set (at) then
pages = ''; -- unset the others
at = '';
end
extra_text_in_page_check (page, page_orig); -- emit error message when |page= value begins with what looks like p., pp., etc.
ws_url, ws_label, L = wikisource_url_make (page); -- make ws URL from |page= interwiki link; link portion L becomes tooltip label
if ws_url then
page = external_link (ws_url, ws_label .. ' ', 'ws link in page'); -- space char after label to move icon away from in-source text; TODO: a better way to do this?
page = utilities.substitute (cfg.presentation['interwiki-icon'], {cfg.presentation['class-wikisource'], L, page});
coins_pages = ws_label;
end
elseif utilities.is_set (pages) then
if utilities.is_set (at) then
at = ''; -- unset
end
extra_text_in_page_check (pages, pages_orig); -- emit error message when |page= value begins with what looks like p., pp., etc.
ws_url, ws_label, L = wikisource_url_make (pages); -- make ws URL from |pages= interwiki link; link portion L becomes tooltip label
if ws_url then
pages = external_link (ws_url, ws_label .. ' ', 'ws link in pages'); -- space char after label to move icon away from in-source text; TODO: a better way to do this?
pages = utilities.substitute (cfg.presentation['interwiki-icon'], {cfg.presentation['class-wikisource'], L, pages});
coins_pages = ws_label;
end
elseif utilities.is_set (at) then
ws_url, ws_label, L = wikisource_url_make (at); -- make ws URL from |at= interwiki link; link portion L becomes tooltip label
if ws_url then
at = external_link (ws_url, ws_label .. ' ', 'ws link in at'); -- space char after label to move icon away from in-source text; TODO: a better way to do this?
at = utilities.substitute (cfg.presentation['interwiki-icon'], {cfg.presentation['class-wikisource'], L, at});
coins_pages = ws_label;
end
end
return page, pages, at, coins_pages;
end
--[[--------------------------< I S _ U N I Q U E _ A R C H I V E _ U R L >------------------------------------
add error message when |archive-url= value is same as |url= or chapter-url= (or alias...) value
]]
local function is_unique_archive_url (archive, url, c_url, source, date)
if utilities.is_set (archive) then
if archive == url or archive == c_url then
utilities.set_message ('err_bad_url', {utilities.wrap_style ('parameter', source)}); -- add error message
return '', ''; -- unset |archive-url= and |archive-date= because same as |url= or |chapter-url=
end
end
return archive, date;
end
--[=[-------------------------< A R C H I V E _ U R L _ C H E C K >--------------------------------------------
Check archive.org URLs to make sure they at least look like they are pointing at valid archives and not to the
save snapshot URL or to calendar pages. When the archive URL is 'https://web.archive.org/save/' (or http://...)
archive.org saves a snapshot of the target page in the URL. That is something that Wikipedia should not allow
unwitting readers to do.
When the archive.org URL does not have a complete timestamp, archive.org chooses a snapshot according to its own
algorithm or provides a calendar 'search' result. [[WP:ELNO]] discourages links to search results.
This function looks at the value assigned to |archive-url= and returns empty strings for |archive-url= and
|archive-date= and an error message when:
|archive-url= holds an archive.org save command URL
|archive-url= is an archive.org URL that does not have a complete timestamp (YYYYMMDDhhmmss 14 digits) in the
correct place
otherwise returns |archive-url= and |archive-date=
There are two mostly compatible archive.org URLs:
//web.archive.org/<timestamp>... -- the old form
//web.archive.org/web/<timestamp>... -- the new form
The old form does not support or map to the new form when it contains a display flag. There are four identified flags
('id_', 'js_', 'cs_', 'im_') but since archive.org ignores others following the same form (two letters and an underscore)
we don't check for these specific flags but we do check the form.
This function supports a preview mode. When the article is rendered in preview mode, this function may return a modified
archive URL:
for save command errors, return undated wildcard (/*/)
for timestamp errors when the timestamp has a wildcard, return the URL unmodified
for timestamp errors when the timestamp does not have a wildcard, return with timestamp limited to six digits plus wildcard (/yyyymm*/)
]=]
local function archive_url_check (url, date)
local err_msg = ''; -- start with the error message empty
local path, timestamp, flag; -- portions of the archive.org URL
if (not url:match('//web%.archive%.org/')) and (not url:match('//liveweb%.archive%.org/')) then -- also deprecated liveweb Wayback machine URL
return url, date; -- not an archive.org archive, return ArchiveURL and ArchiveDate
end
if url:match('//web%.archive%.org/save/') then -- if a save command URL, we don't want to allow saving of the target page
err_msg = cfg.err_msg_supl.save;
url = url:gsub ('(//web%.archive%.org)/save/', '%1/*/', 1); -- for preview mode: modify ArchiveURL
elseif url:match('//liveweb%.archive%.org/') then
err_msg = cfg.err_msg_supl.liveweb;
else
path, timestamp, flag = url:match('//web%.archive%.org/([^%d]*)(%d+)([^/]*)/'); -- split out some of the URL parts for evaluation
if not path then -- malformed in some way; pattern did not match
err_msg = cfg.err_msg_supl.timestamp;
elseif 14 ~= timestamp:len() then -- path and flag optional, must have 14-digit timestamp here
err_msg = cfg.err_msg_supl.timestamp;
if '*' ~= flag then
local replacement = timestamp:match ('^%d%d%d%d%d%d') or timestamp:match ('^%d%d%d%d'); -- get the first 6 (YYYYMM) or first 4 digits (YYYY)
if replacement then -- nil if there aren't at least 4 digits (year)
replacement = replacement .. string.rep ('0', 14 - replacement:len()); -- year or yearmo (4 or 6 digits) zero-fill to make 14-digit timestamp
url=url:gsub ('(//web%.archive%.org/[^%d]*)%d[^/]*', '%1' .. replacement .. '*', 1) -- for preview, modify ts to 14 digits plus splat for calendar display
end
end
elseif utilities.is_set (path) and 'web/' ~= path then -- older archive URLs do not have the extra 'web/' path element
err_msg = cfg.err_msg_supl.path;
elseif utilities.is_set (flag) and not utilities.is_set (path) then -- flag not allowed with the old form URL (without the 'web/' path element)
err_msg = cfg.err_msg_supl.flag;
elseif utilities.is_set (flag) and not flag:match ('%a%a_') then -- flag if present must be two alpha characters and underscore (requires 'web/' path element)
err_msg = cfg.err_msg_supl.flag;
else
return url, date; -- return ArchiveURL and ArchiveDate
end
end
-- if here, something not right so
utilities.set_message ('err_archive_url', {err_msg}); -- add error message and
if is_preview_mode then
return url, date; -- preview mode so return ArchiveURL and ArchiveDate
else
return '', ''; -- return empty strings for ArchiveURL and ArchiveDate
end
end
--[[--------------------------< P L A C E _ C H E C K >--------------------------------------------------------
check |place=, |publication-place=, |location= to see if these params include digits. This function added because
many editors misuse location to specify the in-source location (|page(s)= and |at= are supposed to do that)
returns the original parameter value without modification; added maint cat when parameter value contains digits
]]
local function place_check (param_val)
if not utilities.is_set (param_val) then -- parameter empty or omitted
return param_val; -- return that empty state
end
if mw.ustring.find (param_val, '%d') then -- not empty, are there digits in the parameter value
utilities.set_message ('maint_location'); -- yep, add maint cat
end
return param_val; -- and done
end
--[[--------------------------< I S _ A R C H I V E D _ C O P Y >----------------------------------------------
compares |title= to 'Archived copy' (placeholder added by bots that can't find proper title); if matches, return true; nil else
]]
local function is_archived_copy (title)
title = mw.ustring.lower(title); -- switch title to lower case
if title:find (cfg.special_case_translation.archived_copy.en) then -- if title is 'Archived copy'
return true;
elseif cfg.special_case_translation.archived_copy['local'] then
if mw.ustring.find (title, cfg.special_case_translation.archived_copy['local']) then -- mw.ustring() because might not be Latin script
return true;
end
end
end
--[[--------------------------< C I T A T I O N 0 >------------------------------------------------------------
This is the main function doing the majority of the citation formatting.
]]
local function citation0( config, args )
--[[
Load Input Parameters
The argument_wrapper facilitates the mapping of multiple aliases to single internal variable.
]]
local A = argument_wrapper ( args );
local i
-- Pick out the relevant fields from the arguments. Different citation templates
-- define different field names for the same underlying things.
local author_etal;
local a = {}; -- authors list from |lastn= / |firstn= pairs or |vauthors=
local Authors;
local NameListStyle = is_valid_parameter_value (A['NameListStyle'], A:ORIGIN('NameListStyle'), cfg.keywords_lists['name-list-style'], '');
local Collaboration = A['Collaboration'];
do -- to limit scope of selected
local selected = select_author_editor_source (A['Vauthors'], A['Authors'], args, 'AuthorList');
if 1 == selected then
a, author_etal = extract_names (args, 'AuthorList'); -- fetch author list from |authorn= / |lastn= / |firstn=, |author-linkn=, and |author-maskn=
elseif 2 == selected then
NameListStyle = 'vanc'; -- override whatever |name-list-style= might be
a, author_etal = parse_vauthors_veditors (args, args.vauthors, 'AuthorList'); -- fetch author list from |vauthors=, |author-linkn=, and |author-maskn=
elseif 3 == selected then
Authors = A['Authors']; -- use content of |authors=
if 'authors' == A:ORIGIN('Authors') then -- but add a maint cat if the parameter is |authors=
utilities.set_message ('maint_authors'); -- because use of this parameter is discouraged; what to do about the aliases is a TODO:
end
end
if utilities.is_set (Collaboration) then
author_etal = true; -- so that |display-authors=etal not required
end
end
local editor_etal;
local e = {}; -- editors list from |editor-lastn= / |editor-firstn= pairs or |veditors=
do -- to limit scope of selected
local selected = select_author_editor_source (A['Veditors'], nil, args, 'EditorList'); -- support for |editors= withdrawn
if 1 == selected then
e, editor_etal = extract_names (args, 'EditorList'); -- fetch editor list from |editorn= / |editor-lastn= / |editor-firstn=, |editor-linkn=, and |editor-maskn=
elseif 2 == selected then
NameListStyle = 'vanc'; -- override whatever |name-list-style= might be
e, editor_etal = parse_vauthors_veditors (args, args.veditors, 'EditorList'); -- fetch editor list from |veditors=, |editor-linkn=, and |editor-maskn=
end
end
local Chapter = A['Chapter']; -- done here so that we have access to |contribution= from |chapter= aliases
local Chapter_origin = A:ORIGIN ('Chapter');
local Contribution; -- because contribution is required for contributor(s)
if 'contribution' == Chapter_origin then
Contribution = Chapter; -- get the name of the contribution
end
local c = {}; -- contributors list from |contributor-lastn= / contributor-firstn= pairs
if utilities.in_array (config.CitationClass, {"book", "citation"}) and not utilities.is_set (A['Periodical']) then -- |contributor= and |contribution= only supported in book cites
c = extract_names (args, 'ContributorList'); -- fetch contributor list from |contributorn= / |contributor-lastn=, -firstn=, -linkn=, -maskn=
if 0 < #c then
if not utilities.is_set (Contribution) then -- |contributor= requires |contribution=
utilities.set_message ('err_contributor_missing_required_param', 'contribution'); -- add missing contribution error message
c = {}; -- blank the contributors' table; it is used as a flag later
end
if 0 == #a then -- |contributor= requires |author=
utilities.set_message ('err_contributor_missing_required_param', 'author'); -- add missing author error message
c = {}; -- blank the contributors' table; it is used as a flag later
end
end
else -- if not a book cite
if utilities.select_one (args, cfg.aliases['ContributorList-Last'], 'err_redundant_parameters', 1 ) then -- are there contributor name list parameters?
utilities.set_message ('err_contributor_ignored'); -- add contributor ignored error message
end
Contribution = nil; -- unset
end
local Title = A['Title'];
local TitleLink = A['TitleLink'];
local auto_select = ''; -- default is auto
local accept_link;
TitleLink, accept_link = utilities.has_accept_as_written (TitleLink, true); -- test for accept-this-as-written markup
if (not accept_link) and utilities.in_array (TitleLink, {'none', 'pmc', 'doi'}) then -- check for special keywords
auto_select = TitleLink; -- remember selection for later
TitleLink = ''; -- treat as if |title-link= would have been empty
end
TitleLink = link_title_ok (TitleLink, A:ORIGIN ('TitleLink'), Title, 'title'); -- check for wiki-markup in |title-link= or wiki-markup in |title= when |title-link= is set
local Section = ''; -- {{cite map}} only; preset to empty string for concatenation if not used
if 'map' == config.CitationClass and 'section' == Chapter_origin then
Section = A['Chapter']; -- get |section= from |chapter= alias list; |chapter= and the other aliases not supported in {{cite map}}
Chapter = ''; -- unset for now; will be reset later from |map= if present
end
local Periodical = A['Periodical'];
local Periodical_origin = '';
if utilities.is_set (Periodical) then
Periodical_origin = A:ORIGIN('Periodical'); -- get the name of the periodical parameter
local i;
Periodical, i = utilities.strip_apostrophe_markup (Periodical); -- strip apostrophe markup so that metadata isn't contaminated
if i then -- non-zero when markup was stripped so emit an error message
utilities.set_message ('err_apostrophe_markup', {Periodical_origin});
end
end
if 'mailinglist' == config.CitationClass then -- special case for {{cite mailing list}}
if utilities.is_set (Periodical) and utilities.is_set (A ['MailingList']) then -- both set emit an error TODO: make a function for this and similar?
utilities.set_message ('err_redundant_parameters', {utilities.wrap_style ('parameter', Periodical_origin) .. cfg.presentation['sep_list_pair'] .. utilities.wrap_style ('parameter', 'mailinglist')});
end
Periodical = A ['MailingList']; -- error or no, set Periodical to |mailinglist= value because this template is {{cite mailing list}}
Periodical_origin = A:ORIGIN('MailingList');
end
local ScriptPeriodical = A['ScriptPeriodical'];
-- web and news not tested for now because of
-- Wikipedia:Administrators%27_noticeboard#Is_there_a_semi-automated_tool_that_could_fix_these_annoying_"Cite_Web"_errors?
if not (utilities.is_set (Periodical) or utilities.is_set (ScriptPeriodical)) then -- 'periodical' templates require periodical parameter
-- local p = {['journal'] = 'journal', ['magazine'] = 'magazine', ['news'] = 'newspaper', ['web'] = 'website'}; -- for error message
local p = {['journal'] = 'journal', ['magazine'] = 'magazine'}; -- for error message
if p[config.CitationClass] then
utilities.set_message ('err_missing_periodical', {config.CitationClass, p[config.CitationClass]});
end
end
local Volume;
local ScriptPeriodical_origin = A:ORIGIN('ScriptPeriodical');
if 'citation' == config.CitationClass then
if utilities.is_set (Periodical) then
if not utilities.in_array (Periodical_origin, cfg.citation_no_volume_t) then -- {{citation}} does not render |volume= when these parameters are used
Volume = A['Volume']; -- but does for all other 'periodicals'
end
elseif utilities.is_set (ScriptPeriodical) then
if 'script-website' ~= ScriptPeriodical_origin then -- {{citation}} does not render volume for |script-website=
Volume = A['Volume']; -- but does for all other 'periodicals'
end
else
Volume = A['Volume']; -- and does for non-'periodical' cites
end
elseif utilities.in_array (config.CitationClass, cfg.templates_using_volume) then -- render |volume= for cs1 according to the configuration settings
Volume = A['Volume'];
end
extra_text_in_vol_iss_check (Volume, A:ORIGIN ('Volume'), 'v');
local Issue;
if 'citation' == config.CitationClass then
if utilities.is_set (Periodical) and utilities.in_array (Periodical_origin, cfg.citation_issue_t) then -- {{citation}} may render |issue= when these parameters are used
Issue = utilities.hyphen_to_dash (A['Issue']);
end
elseif utilities.in_array (config.CitationClass, cfg.templates_using_issue) then -- conference & map books do not support issue; {{citation}} listed here because included in settings table
if not (utilities.in_array (config.CitationClass, {'conference', 'map', 'citation'}) and not (utilities.is_set (Periodical) or utilities.is_set (ScriptPeriodical))) then
Issue = utilities.hyphen_to_dash (A['Issue']);
end
end
local ArticleNumber;
if utilities.in_array (config.CitationClass, {'journal', 'conference'}) or ('citation' == config.CitationClass and utilities.is_set (Periodical) and 'journal' == Periodical_origin) then
ArticleNumber = A['ArticleNumber'];
end
extra_text_in_vol_iss_check (Issue, A:ORIGIN ('Issue'), 'i');
local Page;
local Pages;
local At;
local QuotePage;
local QuotePages;
if not utilities.in_array (config.CitationClass, cfg.templates_not_using_page) then -- TODO: rewrite to emit ignored parameter error message?
Page = A['Page'];
Pages = utilities.hyphen_to_dash (A['Pages']);
At = A['At'];
QuotePage = A['QuotePage'];
QuotePages = utilities.hyphen_to_dash (A['QuotePages']);
end
local Edition = A['Edition'];
local PublicationPlace = place_check (A['PublicationPlace'], A:ORIGIN('PublicationPlace'));
local Place = place_check (A['Place'], A:ORIGIN('Place'));
local PublisherName = A['PublisherName'];
local PublisherName_origin = A:ORIGIN('PublisherName');
if utilities.is_set (PublisherName) then
local i = 0;
PublisherName, i = utilities.strip_apostrophe_markup (PublisherName); -- strip apostrophe markup so that metadata isn't contaminated; publisher is never italicized
if i then -- non-zero when markup was stripped so emit an error message
utilities.set_message ('err_apostrophe_markup', {PublisherName_origin});
end
end
local Newsgroup = A['Newsgroup']; -- TODO: strip apostrophe markup?
local Newsgroup_origin = A:ORIGIN('Newsgroup');
if 'newsgroup' == config.CitationClass then
if utilities.is_set (PublisherName) then -- general use parameter |publisher= not allowed in cite newsgroup
utilities.set_message ('err_parameter_ignored', {PublisherName_origin});
end
PublisherName = nil; -- ensure that this parameter is unset for the time being; will be used again after COinS
end
local URL = A['URL']; -- TODO: better way to do this for URL, ChapterURL, and MapURL?
local UrlAccess = is_valid_parameter_value (A['UrlAccess'], A:ORIGIN('UrlAccess'), cfg.keywords_lists['url-access'], nil);
if not utilities.is_set (URL) and utilities.is_set (UrlAccess) then
UrlAccess = nil;
utilities.set_message ('err_param_access_requires_param', 'url');
end
local ChapterURL = A['ChapterURL'];
local ChapterUrlAccess = is_valid_parameter_value (A['ChapterUrlAccess'], A:ORIGIN('ChapterUrlAccess'), cfg.keywords_lists['url-access'], nil);
if not utilities.is_set (ChapterURL) and utilities.is_set (ChapterUrlAccess) then
ChapterUrlAccess = nil;
utilities.set_message ('err_param_access_requires_param', {A:ORIGIN('ChapterUrlAccess'):gsub ('%-access', '')});
end
local MapUrlAccess = is_valid_parameter_value (A['MapUrlAccess'], A:ORIGIN('MapUrlAccess'), cfg.keywords_lists['url-access'], nil);
if not utilities.is_set (A['MapURL']) and utilities.is_set (MapUrlAccess) then
MapUrlAccess = nil;
utilities.set_message ('err_param_access_requires_param', {'map-url'});
end
local this_page = mw.title.getCurrentTitle(); -- also used for COinS and for language
local no_tracking_cats = is_valid_parameter_value (A['NoTracking'], A:ORIGIN('NoTracking'), cfg.keywords_lists['yes_true_y'], nil);
-- check this page to see if it is in one of the namespaces that cs1 is not supposed to add to the error categories
if not utilities.is_set (no_tracking_cats) then -- ignore if we are already not going to categorize this page
if cfg.uncategorized_namespaces[this_page.namespace] then -- is this page's namespace id one of the uncategorized namespace ids?
no_tracking_cats = "true"; -- set no_tracking_cats
end
for _, v in ipairs (cfg.uncategorized_subpages) do -- cycle through page name patterns
if this_page.text:match (v) then -- test page name against each pattern
no_tracking_cats = "true"; -- set no_tracking_cats
break; -- bail out if one is found
end
end
end
-- check for extra |page=, |pages= or |at= parameters. (also sheet and sheets while we're at it)
utilities.select_one (args, {'page', 'p', 'pp', 'pages', 'at', 'sheet', 'sheets'}, 'err_redundant_parameters'); -- this is a dummy call simply to get the error message and category
local coins_pages;
Page, Pages, At, coins_pages = insource_loc_get (Page, A:ORIGIN('Page'), Pages, A:ORIGIN('Pages'), At);
local NoPP = is_valid_parameter_value (A['NoPP'], A:ORIGIN('NoPP'), cfg.keywords_lists['yes_true_y'], nil);
if utilities.is_set (PublicationPlace) and utilities.is_set (Place) then -- both |publication-place= and |place= (|location=) allowed if different
utilities.add_prop_cat ('location-test'); -- add property cat to evaluate how often PublicationPlace and Place are used together
if PublicationPlace == Place then
Place = ''; -- unset; don't need both if they are the same
end
elseif not utilities.is_set (PublicationPlace) and utilities.is_set (Place) then -- when only |place= (|location=) is set ...
PublicationPlace = Place; -- promote |place= (|location=) to |publication-place
end
if PublicationPlace == Place then Place = ''; end -- don't need both if they are the same
local URL_origin = A:ORIGIN('URL'); -- get name of parameter that holds URL
local ChapterURL_origin = A:ORIGIN('ChapterURL'); -- get name of parameter that holds ChapterURL
local ScriptChapter = A['ScriptChapter'];
local ScriptChapter_origin = A:ORIGIN ('ScriptChapter');
local Format = A['Format'];
local ChapterFormat = A['ChapterFormat'];
local TransChapter = A['TransChapter'];
local TransChapter_origin = A:ORIGIN ('TransChapter');
local TransTitle = A['TransTitle'];
local ScriptTitle = A['ScriptTitle'];
--[[
Parameter remapping for cite encyclopedia:
When the citation has these parameters:
|encyclopedia= and |title= then map |title= to |article= and |encyclopedia= to |title=
|encyclopedia= and |article= then map |encyclopedia= to |title=
|trans-title= maps to |trans-chapter= when |title= is re-mapped
|url= maps to |chapter-url= when |title= is remapped
All other combinations of |encyclopedia=, |title=, and |article= are not modified
]]
local Encyclopedia = A['Encyclopedia']; -- used as a flag by this module and by ~/COinS
if utilities.is_set (Encyclopedia) then -- emit error message when Encyclopedia set but template is other than {{cite encyclopedia}} or {{citation}}
if 'encyclopaedia' ~= config.CitationClass and 'citation' ~= config.CitationClass then
utilities.set_message ('err_parameter_ignored', {A:ORIGIN ('Encyclopedia')});
Encyclopedia = nil; -- unset because not supported by this template
end
end
if ('encyclopaedia' == config.CitationClass) or ('citation' == config.CitationClass and utilities.is_set (Encyclopedia)) then
if utilities.is_set (Periodical) and utilities.is_set (Encyclopedia) then -- when both set emit an error TODO: make a function for this and similar?
utilities.set_message ('err_redundant_parameters', {utilities.wrap_style ('parameter', A:ORIGIN ('Encyclopedia')) .. cfg.presentation['sep_list_pair'] .. utilities.wrap_style ('parameter', Periodical_origin)});
end
if utilities.is_set (Encyclopedia) then
Periodical = Encyclopedia; -- error or no, set Periodical to Encyclopedia; allow periodical without encyclopedia
Periodical_origin = A:ORIGIN ('Encyclopedia');
end
if utilities.is_set (Periodical) then -- Periodical is set when |encyclopedia= is set
if utilities.is_set (Title) or utilities.is_set (ScriptTitle) then
if not utilities.is_set (Chapter) then
Chapter = Title; -- |encyclopedia= and |title= are set so map |title= to |article= and |encyclopedia= to |title=
ScriptChapter = ScriptTitle;
ScriptChapter_origin = A:ORIGIN('ScriptTitle')
TransChapter = TransTitle;
ChapterURL = URL;
ChapterURL_origin = URL_origin;
ChapterUrlAccess = UrlAccess;
if not utilities.is_set (ChapterURL) and utilities.is_set (TitleLink) then
Chapter = utilities.make_wikilink (TitleLink, Chapter);
end
Title = Periodical;
ChapterFormat = Format;
Periodical = ''; -- redundant so unset
TransTitle = '';
URL = '';
Format = '';
TitleLink = '';
ScriptTitle = '';
end
elseif utilities.is_set (Chapter) or utilities.is_set (ScriptChapter) then -- |title= not set
Title = Periodical; -- |encyclopedia= set and |article= set so map |encyclopedia= to |title=
Periodical = ''; -- redundant so unset
end
end
end
-- special case for cite techreport.
local ID = A['ID'];
if (config.CitationClass == "techreport") then -- special case for cite techreport
if utilities.is_set (A['Number']) then -- cite techreport uses 'number', which other citations alias to 'issue'
if not utilities.is_set (ID) then -- can we use ID for the "number"?
ID = A['Number']; -- yes, use it
else -- ID has a value so emit error message
utilities.set_message ('err_redundant_parameters', {utilities.wrap_style ('parameter', 'id') .. cfg.presentation['sep_list_pair'] .. utilities.wrap_style ('parameter', 'number')});
end
end
end
-- Account for the oddity that is {{cite conference}}, before generation of COinS data.
local ChapterLink -- = A['ChapterLink']; -- deprecated as a parameter but still used internally by cite episode
local Conference = A['Conference'];
local BookTitle = A['BookTitle'];
local TransTitle_origin = A:ORIGIN ('TransTitle');
if 'conference' == config.CitationClass then
if utilities.is_set (BookTitle) then
Chapter = Title;
Chapter_origin = 'title';
-- ChapterLink = TitleLink; -- |chapter-link= is deprecated
ChapterURL = URL;
ChapterUrlAccess = UrlAccess;
ChapterURL_origin = URL_origin;
URL_origin = '';
ChapterFormat = Format;
TransChapter = TransTitle;
TransChapter_origin = TransTitle_origin;
Title = BookTitle;
Format = '';
-- TitleLink = '';
TransTitle = '';
URL = '';
end
elseif 'speech' ~= config.CitationClass then
Conference = ''; -- not cite conference or cite speech so make sure this is empty string
end
-- CS1/2 mode
local Mode = is_valid_parameter_value (A['Mode'], A:ORIGIN('Mode'), cfg.keywords_lists['mode'], '');
-- separator character and postscript
local sepc, PostScript = set_style (Mode:lower(), A['PostScript'], config.CitationClass);
-- controls capitalization of certain static text
local use_lowercase = ( sepc == ',' );
-- cite map oddities
local Cartography = "";
local Scale = "";
local Sheet = A['Sheet'] or '';
local Sheets = A['Sheets'] or '';
if config.CitationClass == "map" then
if utilities.is_set (Chapter) then --TODO: make a function for this and similar?
utilities.set_message ('err_redundant_parameters', {utilities.wrap_style ('parameter', 'map') .. cfg.presentation['sep_list_pair'] .. utilities.wrap_style ('parameter', Chapter_origin)}); -- add error message
end
Chapter = A['Map'];
Chapter_origin = A:ORIGIN('Map');
ChapterURL = A['MapURL'];
ChapterURL_origin = A:ORIGIN('MapURL');
TransChapter = A['TransMap'];
ScriptChapter = A['ScriptMap']
ScriptChapter_origin = A:ORIGIN('ScriptMap')
ChapterUrlAccess = MapUrlAccess;
ChapterFormat = A['MapFormat'];
Cartography = A['Cartography'];
if utilities.is_set ( Cartography ) then
Cartography = sepc .. " " .. wrap_msg ('cartography', Cartography, use_lowercase);
end
Scale = A['Scale'];
if utilities.is_set ( Scale ) then
Scale = sepc .. " " .. Scale;
end
end
-- Account for the oddities that are {{cite episode}} and {{cite serial}}, before generation of COinS data.
local Series = A['Series'];
if 'episode' == config.CitationClass or 'serial' == config.CitationClass then
local SeriesLink = A['SeriesLink'];
SeriesLink = link_title_ok (SeriesLink, A:ORIGIN ('SeriesLink'), Series, 'series'); -- check for wiki-markup in |series-link= or wiki-markup in |series= when |series-link= is set
local Network = A['Network'];
local Station = A['Station'];
local s, n = {}, {};
-- do common parameters first
if utilities.is_set (Network) then table.insert(n, Network); end
if utilities.is_set (Station) then table.insert(n, Station); end
ID = table.concat(n, sepc .. ' ');
if 'episode' == config.CitationClass then -- handle the oddities that are strictly {{cite episode}}
local Season = A['Season'];
local SeriesNumber = A['SeriesNumber'];
if utilities.is_set (Season) and utilities.is_set (SeriesNumber) then -- these are mutually exclusive so if both are set TODO: make a function for this and similar?
utilities.set_message ('err_redundant_parameters', {utilities.wrap_style ('parameter', 'season') .. cfg.presentation['sep_list_pair'] .. utilities.wrap_style ('parameter', 'seriesno')}); -- add error message
SeriesNumber = ''; -- unset; prefer |season= over |seriesno=
end
-- assemble a table of parts concatenated later into Series
if utilities.is_set (Season) then table.insert(s, wrap_msg ('season', Season, use_lowercase)); end
if utilities.is_set (SeriesNumber) then table.insert(s, wrap_msg ('seriesnum', SeriesNumber, use_lowercase)); end
if utilities.is_set (Issue) then table.insert(s, wrap_msg ('episode', Issue, use_lowercase)); end
Issue = ''; -- unset because this is not a unique parameter
Chapter = Title; -- promote title parameters to chapter
ScriptChapter = ScriptTitle;
ScriptChapter_origin = A:ORIGIN('ScriptTitle');
ChapterLink = TitleLink; -- alias |episode-link=
TransChapter = TransTitle;
ChapterURL = URL;
ChapterUrlAccess = UrlAccess;
ChapterURL_origin = URL_origin;
ChapterFormat = Format;
Title = Series; -- promote series to title
TitleLink = SeriesLink;
Series = table.concat(s, sepc .. ' '); -- this is concatenation of season, seriesno, episode number
if utilities.is_set (ChapterLink) and not utilities.is_set (ChapterURL) then -- link but not URL
Chapter = utilities.make_wikilink (ChapterLink, Chapter);
elseif utilities.is_set (ChapterLink) and utilities.is_set (ChapterURL) then -- if both are set, URL links episode;
Series = utilities.make_wikilink (ChapterLink, Series);
end
URL = ''; -- unset
TransTitle = '';
ScriptTitle = '';
Format = '';
else -- now oddities that are cite serial
Issue = ''; -- unset because this parameter no longer supported by the citation/core version of cite serial
Chapter = A['Episode']; -- TODO: make |episode= available to cite episode someday?
if utilities.is_set (Series) and utilities.is_set (SeriesLink) then
Series = utilities.make_wikilink (SeriesLink, Series);
end
Series = utilities.wrap_style ('italic-title', Series); -- series is italicized
end
end
-- end of {{cite episode}} stuff
-- handle type parameter for those CS1 citations that have default values
local TitleType = A['TitleType'];
local Degree = A['Degree'];
if utilities.in_array (config.CitationClass, {'AV-media-notes', 'interview', 'mailinglist', 'map', 'podcast', 'pressrelease', 'report', 'speech', 'techreport', 'thesis'}) then
TitleType = set_titletype (config.CitationClass, TitleType);
if utilities.is_set (Degree) and "Thesis" == TitleType then -- special case for cite thesis
TitleType = Degree .. ' ' .. cfg.title_types ['thesis']:lower();
end
end
if utilities.is_set (TitleType) then -- if type parameter is specified
TitleType = utilities.substitute ( cfg.messages['type'], TitleType); -- display it in parentheses
-- TODO: Hack on TitleType to fix bunched parentheses problem
end
-- legacy: promote PublicationDate to Date if neither Date nor Year are set.
local Date = A['Date'];
local Date_origin; -- to hold the name of parameter promoted to Date; required for date error messaging
local PublicationDate = A['PublicationDate'];
local Year = A['Year'];
if not utilities.is_set (Date) then
Date = Year; -- promote Year to Date
Year = nil; -- make nil so Year as empty string isn't used for CITEREF
if not utilities.is_set (Date) and utilities.is_set (PublicationDate) then -- use PublicationDate when |date= and |year= are not set
Date = PublicationDate; -- promote PublicationDate to Date
PublicationDate = ''; -- unset, no longer needed
Date_origin = A:ORIGIN('PublicationDate'); -- save the name of the promoted parameter
else
Date_origin = A:ORIGIN('Year'); -- save the name of the promoted parameter
end
else
Date_origin = A:ORIGIN('Date'); -- not a promotion; name required for error messaging
end
if PublicationDate == Date then PublicationDate = ''; end -- if PublicationDate is same as Date, don't display in rendered citation
--[[
Go test all of the date-holding parameters for valid MOS:DATE format and make sure that dates are real dates. This must be done before we do COinS because here is where
we get the date used in the metadata.
Date validation supporting code is in Module:Citation/CS1/Date_validation
]]
local DF = is_valid_parameter_value (A['DF'], A:ORIGIN('DF'), cfg.keywords_lists['df'], '');
if not utilities.is_set (DF) then
DF = cfg.global_df; -- local |df= if present overrides global df set by {{use xxx date}} template
end
local ArchiveURL;
local ArchiveDate;
local ArchiveFormat = A['ArchiveFormat'];
ArchiveURL, ArchiveDate = archive_url_check (A['ArchiveURL'], A['ArchiveDate'])
ArchiveFormat = style_format (ArchiveFormat, ArchiveURL, 'archive-format', 'archive-url');
ArchiveURL, ArchiveDate = is_unique_archive_url (ArchiveURL, URL, ChapterURL, A:ORIGIN('ArchiveURL'), ArchiveDate); -- add error message when URL or ChapterURL == ArchiveURL
local AccessDate = A['AccessDate'];
local LayDate = A['LayDate'];
local COinS_date = {}; -- holds date info extracted from |date= for the COinS metadata by Module:Date verification
local DoiBroken = A['DoiBroken'];
local Embargo = A['Embargo'];
local anchor_year; -- used in the CITEREF identifier
do -- create defined block to contain local variables error_message, date_parameters_list, mismatch
local error_message = '';
-- AirDate has been promoted to Date so not necessary to check it
local date_parameters_list = {
['access-date'] = {val = AccessDate, name = A:ORIGIN ('AccessDate')},
['archive-date'] = {val = ArchiveDate, name = A:ORIGIN ('ArchiveDate')},
['date'] = {val = Date, name = Date_origin},
['doi-broken-date'] = {val = DoiBroken, name = A:ORIGIN ('DoiBroken')},
['pmc-embargo-date'] = {val = Embargo, name = A:ORIGIN ('Embargo')},
['lay-date'] = {val = LayDate, name = A:ORIGIN ('LayDate')},
['publication-date'] = {val = PublicationDate, name = A:ORIGIN ('PublicationDate')},
['year'] = {val = Year, name = A:ORIGIN ('Year')},
};
local error_list = {};
anchor_year, Embargo = validation.dates(date_parameters_list, COinS_date, error_list);
-- start temporary Julian / Gregorian calendar uncertainty categorization
if COinS_date.inter_cal_cat then
utilities.add_prop_cat ('jul-greg-uncertainty');
end
-- end temporary Julian / Gregorian calendar uncertainty categorization
if utilities.is_set (Year) and utilities.is_set (Date) then -- both |date= and |year= not normally needed;
validation.year_date_check (Year, A:ORIGIN ('Year'), Date, A:ORIGIN ('Date'), error_list);
end
if 0 == #error_list then -- error free dates only; 0 when error_list is empty
local modified = false; -- flag
if utilities.is_set (DF) then -- if we need to reformat dates
modified = validation.reformat_dates (date_parameters_list, DF); -- reformat to DF format, use long month names if appropriate
end
if true == validation.date_hyphen_to_dash (date_parameters_list) then -- convert hyphens to dashes where appropriate
modified = true;
utilities.set_message ('maint_date_format'); -- hyphens were converted so add maint category
end
-- for those wikis that can and want to have English date names translated to the local language; not supported at en.wiki
if cfg.date_name_auto_xlate_enable and validation.date_name_xlate (date_parameters_list, cfg.date_digit_auto_xlate_enable ) then
utilities.set_message ('maint_date_auto_xlated'); -- add maint cat
modified = true;
end
if modified then -- if the date_parameters_list values were modified
AccessDate = date_parameters_list['access-date'].val; -- overwrite date holding parameters with modified values
ArchiveDate = date_parameters_list['archive-date'].val;
Date = date_parameters_list['date'].val;
DoiBroken = date_parameters_list['doi-broken-date'].val;
LayDate = date_parameters_list['lay-date'].val;
PublicationDate = date_parameters_list['publication-date'].val;
end
else
utilities.set_message ('err_bad_date', {utilities.make_sep_list (#error_list, error_list)}); -- add this error message
end
end -- end of do
local ID_list = {}; -- sequence table of rendered identifiers
local ID_list_coins = {}; -- table of identifiers and their values from args; key is same as cfg.id_handlers's key
local Class = A['Class']; -- arxiv class identifier
local ID_support = {
{A['ASINTLD'], 'ASIN', 'err_asintld_missing_asin', A:ORIGIN ('ASINTLD')},
{DoiBroken, 'DOI', 'err_doibroken_missing_doi', A:ORIGIN ('DoiBroken')},
{Embargo, 'PMC', 'err_embargo_missing_pmc', A:ORIGIN ('Embargo')},
}
ID_list, ID_list_coins = identifiers.identifier_lists_get (args, {DoiBroken = DoiBroken, ASINTLD = A['ASINTLD'], Embargo = Embargo, Class = Class}, ID_support);
-- Account for the oddities that are {{cite arxiv}}, {{cite biorxiv}}, {{cite citeseerx}}, {{cite ssrn}}, before generation of COinS data.
if utilities.in_array (config.CitationClass, whitelist.preprint_template_list) then -- |arxiv= or |eprint= required for cite arxiv; |biorxiv=, |citeseerx=, |ssrn= required for their templates
if not (args[cfg.id_handlers[config.CitationClass:upper()].parameters[1]] or -- can't use ID_list_coins k/v table here because invalid parameters omitted
args[cfg.id_handlers[config.CitationClass:upper()].parameters[2]]) then -- which causes unexpected parameter missing error message
utilities.set_message ('err_' .. config.CitationClass .. '_missing'); -- add error message
end
Periodical = ({['arxiv'] = 'arXiv', ['biorxiv'] = 'bioRxiv', ['citeseerx'] = 'CiteSeerX', ['ssrn'] = 'Social Science Research Network'})[config.CitationClass];
end
-- Link the title of the work if no |url= was provided, but we have a |pmc= or a |doi= with |doi-access=free
if config.CitationClass == "journal" and not utilities.is_set (URL) and not utilities.is_set (TitleLink) and not utilities.in_array (cfg.keywords_xlate[Title], {'off', 'none'}) then -- TODO: remove 'none' once existing citations have been switched to 'off', so 'none' can be used as token for "no title" instead
if 'none' ~= cfg.keywords_xlate[auto_select] then -- if auto-linking not disabled
if identifiers.auto_link_urls[auto_select] then -- manual selection
URL = identifiers.auto_link_urls[auto_select]; -- set URL to be the same as identifier's external link
URL_origin = cfg.id_handlers[auto_select:upper()].parameters[1]; -- set URL_origin to parameter name for use in error message if citation is missing a |title=
elseif identifiers.auto_link_urls['pmc'] then -- auto-select PMC
URL = identifiers.auto_link_urls['pmc']; -- set URL to be the same as the PMC external link if not embargoed
URL_origin = cfg.id_handlers['PMC'].parameters[1]; -- set URL_origin to parameter name for use in error message if citation is missing a |title=
elseif identifiers.auto_link_urls['doi'] then -- auto-select DOI
URL = identifiers.auto_link_urls['doi'];
URL_origin = cfg.id_handlers['DOI'].parameters[1];
end
end
if utilities.is_set (URL) then -- set when using an identifier-created URL
if utilities.is_set (AccessDate) then -- |access-date= requires |url=; identifier-created URL is not |url=
utilities.set_message ('err_accessdate_missing_url'); -- add an error message
AccessDate = ''; -- unset
end
if utilities.is_set (ArchiveURL) then -- |archive-url= requires |url=; identifier-created URL is not |url=
utilities.set_message ('err_archive_missing_url'); -- add an error message
ArchiveURL = ''; -- unset
end
end
end
-- At this point fields may be nil if they weren't specified in the template use. We can use that fact.
-- Test if citation has no title
if not utilities.is_set (Title) and not utilities.is_set (TransTitle) and not utilities.is_set (ScriptTitle) then -- has special case for cite episode
utilities.set_message ('err_citation_missing_title', {'episode' == config.CitationClass and 'series' or 'title'});
end
if utilities.in_array (cfg.keywords_xlate[Title], {'off', 'none'}) and
utilities.in_array (config.CitationClass, {'journal', 'citation'}) and
(utilities.is_set (Periodical) or utilities.is_set (ScriptPeriodical)) and
('journal' == Periodical_origin or 'script-journal' == ScriptPeriodical_origin) then -- special case for journal cites
Title = ''; -- set title to empty string
utilities.set_message ('maint_untitled'); -- add maint cat
end
-- COinS metadata (see <http://ocoins.info/>) for automated parsing of citation information.
-- handle the oddity that is cite encyclopedia and {{citation |encyclopedia=something}}. Here we presume that
-- when Periodical, Title, and Chapter are all set, then Periodical is the book (encyclopedia) title, Title
-- is the article title, and Chapter is a section within the article. So, we remap
local coins_chapter = Chapter; -- default assuming that remapping not required
local coins_title = Title; -- et tu
if 'encyclopaedia' == config.CitationClass or ('citation' == config.CitationClass and utilities.is_set (Encyclopedia)) then
if utilities.is_set (Chapter) and utilities.is_set (Title) and utilities.is_set (Periodical) then -- if all are used then
coins_chapter = Title; -- remap
coins_title = Periodical;
end
end
local coins_author = a; -- default for coins rft.au
if 0 < #c then -- but if contributor list
coins_author = c; -- use that instead
end
-- this is the function call to COinS()
local OCinSoutput = metadata.COinS({
['Periodical'] = utilities.strip_apostrophe_markup (Periodical), -- no markup in the metadata
['Encyclopedia'] = Encyclopedia, -- just a flag; content ignored by ~/COinS
['Chapter'] = metadata.make_coins_title (coins_chapter, ScriptChapter), -- Chapter and ScriptChapter stripped of bold / italic / accept-as-written markup
['Degree'] = Degree; -- cite thesis only
['Title'] = metadata.make_coins_title (coins_title, ScriptTitle), -- Title and ScriptTitle stripped of bold / italic / accept-as-written markup
['PublicationPlace'] = PublicationPlace,
['Date'] = COinS_date.rftdate, -- COinS_date has correctly formatted date if Date is valid;
['Season'] = COinS_date.rftssn,
['Quarter'] = COinS_date.rftquarter,
['Chron'] = COinS_date.rftchron or (not COinS_date.rftdate and Date) or '', -- chron but if not set and invalid date format use Date; keep this last bit?
['Series'] = Series,
['Volume'] = Volume,
['Issue'] = Issue,
['ArticleNumber'] = ArticleNumber,
['Pages'] = coins_pages or metadata.get_coins_pages (first_set ({Sheet, Sheets, Page, Pages, At, QuotePage, QuotePages}, 7)), -- pages stripped of external links
['Edition'] = Edition,
['PublisherName'] = PublisherName or Newsgroup, -- any apostrophe markup already removed from PublisherName
['URL'] = first_set ({ChapterURL, URL}, 2),
['Authors'] = coins_author,
['ID_list'] = ID_list_coins,
['RawPage'] = this_page.prefixedText,
}, config.CitationClass);
-- Account for the oddities that are {{cite arxiv}}, {{cite biorxiv}}, {{cite citeseerx}}, and {{cite ssrn}} AFTER generation of COinS data.
if utilities.in_array (config.CitationClass, whitelist.preprint_template_list) then -- we have set rft.jtitle in COinS to arXiv, bioRxiv, CiteSeerX, or ssrn now unset so it isn't displayed
Periodical = ''; -- periodical not allowed in these templates; if article has been published, use cite journal
end
-- special case for cite newsgroup. Do this after COinS because we are modifying Publishername to include some static text
if 'newsgroup' == config.CitationClass and utilities.is_set (Newsgroup) then
PublisherName = utilities.substitute (cfg.messages['newsgroup'], external_link( 'news:' .. Newsgroup, Newsgroup, Newsgroup_origin, nil ));
end
local Editors;
local EditorCount; -- used only for choosing {ed.) or (eds.) annotation at end of editor name-list
local Contributors; -- assembled contributors name list
local contributor_etal;
local Translators; -- assembled translators name list
local translator_etal;
local t = {}; -- translators list from |translator-lastn= / translator-firstn= pairs
t = extract_names (args, 'TranslatorList'); -- fetch translator list from |translatorn= / |translator-lastn=, -firstn=, -linkn=, -maskn=
local Interviewers;
local interviewers_list = {};
interviewers_list = extract_names (args, 'InterviewerList'); -- process preferred interviewers parameters
local interviewer_etal;
-- Now perform various field substitutions.
-- We also add leading spaces and surrounding markup and punctuation to the
-- various parts of the citation, but only when they are non-nil.
do
local last_first_list;
local control = {
format = NameListStyle, -- empty string or 'vanc'
maximum = nil, -- as if display-authors or display-editors not set
mode = Mode
};
do -- do editor name list first because the now unsupported coauthors used to modify control table
control.maximum , editor_etal = get_display_names (A['DisplayEditors'], #e, 'editors', editor_etal, A:ORIGIN ('DisplayEditors'));
Editors, EditorCount = list_people (control, e, editor_etal);
if 1 == EditorCount and (true == editor_etal or 1 < #e) then -- only one editor displayed but includes etal then
EditorCount = 2; -- spoof to display (eds.) annotation
end
end
do -- now do interviewers
control.maximum, interviewer_etal = get_display_names (A['DisplayInterviewers'], #interviewers_list, 'interviewers', interviewer_etal, A:ORIGIN ('DisplayInterviewers'));
Interviewers = list_people (control, interviewers_list, interviewer_etal);
end
do -- now do translators
control.maximum, translator_etal = get_display_names (A['DisplayTranslators'], #t, 'translators', translator_etal, A:ORIGIN ('DisplayTranslators'));
Translators = list_people (control, t, translator_etal);
end
do -- now do contributors
control.maximum, contributor_etal = get_display_names (A['DisplayContributors'], #c, 'contributors', contributor_etal, A:ORIGIN ('DisplayContributors'));
Contributors = list_people (control, c, contributor_etal);
end
do -- now do authors
control.maximum, author_etal = get_display_names (A['DisplayAuthors'], #a, 'authors', author_etal, A:ORIGIN ('DisplayAuthors'));
last_first_list = list_people (control, a, author_etal);
if utilities.is_set (Authors) then
Authors, author_etal = name_has_etal (Authors, author_etal, false, 'authors'); -- find and remove variations on et al.
if author_etal then
Authors = Authors .. ' ' .. cfg.messages['et al']; -- add et al. to authors parameter
end
else
Authors = last_first_list; -- either an author name list or an empty string
end
end -- end of do
if utilities.is_set (Authors) and utilities.is_set (Collaboration) then
Authors = Authors .. ' (' .. Collaboration .. ')'; -- add collaboration after et al.
end
end
local ConferenceFormat = A['ConferenceFormat'];
local ConferenceURL = A['ConferenceURL'];
ConferenceFormat = style_format (ConferenceFormat, ConferenceURL, 'conference-format', 'conference-url');
Format = style_format (Format, URL, 'format', 'url');
-- special case for chapter format so no error message or cat when chapter not supported
if not (utilities.in_array (config.CitationClass, {'web', 'news', 'journal', 'magazine', 'pressrelease', 'podcast', 'newsgroup', 'arxiv', 'biorxiv', 'citeseerx', 'ssrn'}) or
('citation' == config.CitationClass and (utilities.is_set (Periodical) or utilities.is_set (ScriptPeriodical)) and not utilities.is_set (Encyclopedia))) then
ChapterFormat = style_format (ChapterFormat, ChapterURL, 'chapter-format', 'chapter-url');
end
if not utilities.is_set (URL) then
if utilities.in_array (config.CitationClass, {"web", "podcast", "mailinglist"}) or -- |url= required for cite web, cite podcast, and cite mailinglist
('citation' == config.CitationClass and ('website' == Periodical_origin or 'script-website' == ScriptPeriodical_origin)) then -- and required for {{citation}} with |website= or |script-website=
utilities.set_message ('err_cite_web_url');
end
-- do we have |accessdate= without either |url= or |chapter-url=?
if utilities.is_set (AccessDate) and not utilities.is_set (ChapterURL) then -- ChapterURL may be set when URL is not set;
utilities.set_message ('err_accessdate_missing_url');
AccessDate = '';
end
end
local UrlStatus = is_valid_parameter_value (A['UrlStatus'], A:ORIGIN('UrlStatus'), cfg.keywords_lists['url-status'], '');
local OriginalURL
local OriginalURL_origin
local OriginalFormat
local OriginalAccess;
UrlStatus = UrlStatus:lower(); -- used later when assembling archived text
if utilities.is_set ( ArchiveURL ) then
if utilities.is_set (ChapterURL) then -- if chapter-url= is set apply archive url to it
OriginalURL = ChapterURL; -- save copy of source chapter's url for archive text
OriginalURL_origin = ChapterURL_origin; -- name of |chapter-url= parameter for error messages
OriginalFormat = ChapterFormat; -- and original |chapter-format=
if 'live' ~= UrlStatus then
ChapterURL = ArchiveURL -- swap-in the archive's URL
ChapterURL_origin = A:ORIGIN('ArchiveURL') -- name of |archive-url= parameter for error messages
ChapterFormat = ArchiveFormat or ''; -- swap in archive's format
ChapterUrlAccess = nil; -- restricted access levels do not make sense for archived URLs
end
elseif utilities.is_set (URL) then
OriginalURL = URL; -- save copy of original source URL
OriginalURL_origin = URL_origin; -- name of URL parameter for error messages
OriginalFormat = Format; -- and original |format=
OriginalAccess = UrlAccess;
if 'live' ~= UrlStatus then -- if URL set then |archive-url= applies to it
URL = ArchiveURL -- swap-in the archive's URL
URL_origin = A:ORIGIN('ArchiveURL') -- name of archive URL parameter for error messages
Format = ArchiveFormat or ''; -- swap in archive's format
UrlAccess = nil; -- restricted access levels do not make sense for archived URLs
end
end
elseif utilities.is_set (UrlStatus) then -- if |url-status= is set when |archive-url= is not set
utilities.set_message ('maint_url_status'); -- add maint cat
end
if utilities.in_array (config.CitationClass, {'web', 'news', 'journal', 'magazine', 'pressrelease', 'podcast', 'newsgroup', 'arxiv', 'biorxiv', 'citeseerx', 'ssrn'}) or -- if any of the 'periodical' cites except encyclopedia
('citation' == config.CitationClass and (utilities.is_set (Periodical) or utilities.is_set (ScriptPeriodical)) and not utilities.is_set (Encyclopedia)) then
local chap_param;
if utilities.is_set (Chapter) then -- get a parameter name from one of these chapter related meta-parameters
chap_param = A:ORIGIN ('Chapter')
elseif utilities.is_set (TransChapter) then
chap_param = A:ORIGIN ('TransChapter')
elseif utilities.is_set (ChapterURL) then
chap_param = A:ORIGIN ('ChapterURL')
elseif utilities.is_set (ScriptChapter) then
chap_param = ScriptChapter_origin;
else utilities.is_set (ChapterFormat)
chap_param = A:ORIGIN ('ChapterFormat')
end
if utilities.is_set (chap_param) then -- if we found one
utilities.set_message ('err_chapter_ignored', {chap_param}); -- add error message
Chapter = ''; -- and set them to empty string to be safe with concatenation
TransChapter = '';
ChapterURL = '';
ScriptChapter = '';
ChapterFormat = '';
end
else -- otherwise, format chapter / article title
local no_quotes = false; -- default assume that we will be quoting the chapter parameter value
if utilities.is_set (Contribution) and 0 < #c then -- if this is a contribution with contributor(s)
if utilities.in_array (Contribution:lower(), cfg.keywords_lists.contribution) then -- and a generic contribution title
no_quotes = true; -- then render it unquoted
end
end
Chapter = format_chapter_title (ScriptChapter, ScriptChapter_origin, Chapter, Chapter_origin, TransChapter, TransChapter_origin, ChapterURL, ChapterURL_origin, no_quotes, ChapterUrlAccess); -- Contribution is also in Chapter
if utilities.is_set (Chapter) then
Chapter = Chapter .. ChapterFormat ;
if 'map' == config.CitationClass and utilities.is_set (TitleType) then
Chapter = Chapter .. ' ' .. TitleType; -- map annotation here; not after title
end
Chapter = Chapter .. sepc .. ' ';
elseif utilities.is_set (ChapterFormat) then -- |chapter= not set but |chapter-format= is so ...
Chapter = ChapterFormat .. sepc .. ' '; -- ... ChapterFormat has error message, we want to see it
end
end
-- Format main title
local plain_title = false;
local accept_title;
Title, accept_title = utilities.has_accept_as_written (Title, true); -- remove accept-this-as-written markup when it wraps all of <Title>
if accept_title and ('' == Title) then -- only support forced empty for now "(())"
Title = cfg.messages['notitle']; -- replace by predefined "No title" message
-- TODO: utilities.set_message ( 'err_redundant_parameters', ...); -- issue proper error message instead of muting
ScriptTitle = ''; -- just mute for now
TransTitle = ''; -- just mute for now
plain_title = true; -- suppress text decoration for descriptive title
utilities.set_message ('maint_untitled'); -- add maint cat
end
if not accept_title then -- <Title> not wrapped in accept-as-written markup
if '...' == Title:sub (-3) then -- if ellipsis is the last three characters of |title=
Title = Title:gsub ('(%.%.%.)%.+$', '%1'); -- limit the number of dots to three
elseif not mw.ustring.find (Title, '%.%s*%a%.$') and -- end of title is not a 'dot-(optional space-)letter-dot' initialism ...
not mw.ustring.find (Title, '%s+%a%.$') then -- ...and not a 'space-letter-dot' initial (''Allium canadense'' L.)
Title = mw.ustring.gsub(Title, '%' .. sepc .. '$', ''); -- remove any trailing separator character; sepc and ms.ustring() here for languages that use multibyte separator characters
end
if utilities.is_set (ArchiveURL) and is_archived_copy (Title) then
utilities.set_message ('maint_archived_copy'); -- add maintenance category before we modify the content of Title
end
if is_generic ('generic_titles', Title) then
utilities.set_message ('err_generic_title'); -- set an error message
end
end
if (not plain_title) and (utilities.in_array (config.CitationClass, {'web', 'news', 'journal', 'magazine', 'pressrelease', 'podcast', 'newsgroup', 'mailinglist', 'interview', 'arxiv', 'biorxiv', 'citeseerx', 'ssrn'}) or
('citation' == config.CitationClass and (utilities.is_set (Periodical) or utilities.is_set (ScriptPeriodical)) and not utilities.is_set (Encyclopedia)) or
('map' == config.CitationClass and (utilities.is_set (Periodical) or utilities.is_set (ScriptPeriodical)))) then -- special case for cite map when the map is in a periodical treat as an article
Title = kern_quotes (Title); -- if necessary, separate title's leading and trailing quote marks from module provided quote marks
Title = utilities.wrap_style ('quoted-title', Title);
Title = script_concatenate (Title, ScriptTitle, 'script-title'); -- <bdi> tags, lang attribute, categorization, etc.; must be done after title is wrapped
TransTitle = utilities.wrap_style ('trans-quoted-title', TransTitle );
elseif plain_title or ('report' == config.CitationClass) then -- no styling for cite report and descriptive titles (otherwise same as above)
Title = script_concatenate (Title, ScriptTitle, 'script-title'); -- <bdi> tags, lang attribute, categorization, etc.; must be done after title is wrapped
TransTitle = utilities.wrap_style ('trans-quoted-title', TransTitle ); -- for cite report, use this form for trans-title
else
Title = utilities.wrap_style ('italic-title', Title);
Title = script_concatenate (Title, ScriptTitle, 'script-title'); -- <bdi> tags, lang attribute, categorization, etc.; must be done after title is wrapped
TransTitle = utilities.wrap_style ('trans-italic-title', TransTitle);
end
if utilities.is_set (TransTitle) then
if utilities.is_set (Title) then
TransTitle = " " .. TransTitle;
else
utilities.set_message ('err_trans_missing_title', {'title'});
end
end
if utilities.is_set (Title) then -- TODO: is this the right place to be making Wikisource URLs?
if utilities.is_set (TitleLink) and utilities.is_set (URL) then
utilities.set_message ('err_wikilink_in_url'); -- set an error message because we can't have both
TitleLink = ''; -- unset
end
if not utilities.is_set (TitleLink) and utilities.is_set (URL) then
Title = external_link (URL, Title, URL_origin, UrlAccess) .. TransTitle .. Format;
URL = ''; -- unset these because no longer needed
Format = "";
elseif utilities.is_set (TitleLink) and not utilities.is_set (URL) then
local ws_url;
ws_url = wikisource_url_make (TitleLink); -- ignore ws_label return; not used here
if ws_url then
Title = external_link (ws_url, Title .. ' ', 'ws link in title-link'); -- space char after Title to move icon away from italic text; TODO: a better way to do this?
Title = utilities.substitute (cfg.presentation['interwiki-icon'], {cfg.presentation['class-wikisource'], TitleLink, Title});
Title = Title .. TransTitle;
else
Title = utilities.make_wikilink (TitleLink, Title) .. TransTitle;
end
else
local ws_url, ws_label, L; -- Title has italic or quote markup by the time we get here which causes is_wikilink() to return 0 (not a wikilink)
ws_url, ws_label, L = wikisource_url_make (Title:gsub('^[\'"]*(.-)[\'"]*$', '%1')); -- make ws URL from |title= interwiki link (strip italic or quote markup); link portion L becomes tooltip label
if ws_url then
Title = Title:gsub ('%b[]', ws_label); -- replace interwiki link with ws_label to retain markup
Title = external_link (ws_url, Title .. ' ', 'ws link in title'); -- space char after Title to move icon away from italic text; TODO: a better way to do this?
Title = utilities.substitute (cfg.presentation['interwiki-icon'], {cfg.presentation['class-wikisource'], L, Title});
Title = Title .. TransTitle;
else
Title = Title .. TransTitle;
end
end
else
Title = TransTitle;
end
if utilities.is_set (Place) then
Place = " " .. wrap_msg ('written', Place, use_lowercase) .. sepc .. " ";
end
local ConferenceURL_origin = A:ORIGIN('ConferenceURL'); -- get name of parameter that holds ConferenceURL
if utilities.is_set (Conference) then
if utilities.is_set (ConferenceURL) then
Conference = external_link( ConferenceURL, Conference, ConferenceURL_origin, nil );
end
Conference = sepc .. " " .. Conference .. ConferenceFormat;
elseif utilities.is_set (ConferenceURL) then
Conference = sepc .. " " .. external_link( ConferenceURL, nil, ConferenceURL_origin, nil );
end
local Position = '';
if not utilities.is_set (Position) then
local Minutes = A['Minutes'];
local Time = A['Time'];
if utilities.is_set (Minutes) then
if utilities.is_set (Time) then --TODO: make a function for this and similar?
utilities.set_message ('err_redundant_parameters', {utilities.wrap_style ('parameter', 'minutes') .. cfg.presentation['sep_list_pair'] .. utilities.wrap_style ('parameter', 'time')});
end
Position = " " .. Minutes .. " " .. cfg.messages['minutes'];
else
if utilities.is_set (Time) then
local TimeCaption = A['TimeCaption']
if not utilities.is_set (TimeCaption) then
TimeCaption = cfg.messages['event'];
if sepc ~= '.' then
TimeCaption = TimeCaption:lower();
end
end
Position = " " .. TimeCaption .. " " .. Time;
end
end
else
Position = " " .. Position;
At = '';
end
Page, Pages, Sheet, Sheets = format_pages_sheets (Page, Pages, Sheet, Sheets, config.CitationClass, Periodical_origin, sepc, NoPP, use_lowercase);
At = utilities.is_set (At) and (sepc .. " " .. At) or "";
Position = utilities.is_set (Position) and (sepc .. " " .. Position) or "";
if config.CitationClass == 'map' then
local Sections = A['Sections']; -- Section (singular) is an alias of Chapter so set earlier
local Inset = A['Inset'];
if utilities.is_set ( Inset ) then
Inset = sepc .. " " .. wrap_msg ('inset', Inset, use_lowercase);
end
if utilities.is_set ( Sections ) then
Section = sepc .. " " .. wrap_msg ('sections', Sections, use_lowercase);
elseif utilities.is_set ( Section ) then
Section = sepc .. " " .. wrap_msg ('section', Section, use_lowercase);
end
At = At .. Inset .. Section;
end
local Others = A['Others'];
if utilities.is_set (Others) and 0 == #a and 0 == #e then -- add maint cat when |others= has value and used without |author=, |editor=
if config.CitationClass == "AV-media-notes"
or config.CitationClass == "audio-visual" then -- special maint for AV/M which has a lot of 'false' positives right now
utilities.set_message ('maint_others_avm')
else
utilities.set_message ('maint_others');
end
end
Others = utilities.is_set (Others) and (sepc .. " " .. Others) or "";
if utilities.is_set (Translators) then
Others = safe_join ({sepc .. ' ', wrap_msg ('translated', Translators, use_lowercase), Others}, sepc);
end
if utilities.is_set (Interviewers) then
Others = safe_join ({sepc .. ' ', wrap_msg ('interview', Interviewers, use_lowercase), Others}, sepc);
end
local TitleNote = A['TitleNote'];
TitleNote = utilities.is_set (TitleNote) and (sepc .. " " .. TitleNote) or "";
if utilities.is_set (Edition) then
if Edition:match ('%f[%a][Ee]d%n?%.?$') or Edition:match ('%f[%a][Ee]dition$') then -- Ed, ed, Ed., ed., Edn, edn, Edn., edn.
utilities.set_message ('err_extra_text_edition'); -- add error message
end
Edition = " " .. wrap_msg ('edition', Edition);
else
Edition = '';
end
Series = utilities.is_set (Series) and wrap_msg ('series', {sepc, Series}) or ""; -- not the same as SeriesNum
local Agency = A['Agency'];
Agency = utilities.is_set (Agency) and wrap_msg ('agency', {sepc, Agency}) or "";
Volume = format_volume_issue (Volume, Issue, ArticleNumber, config.CitationClass, Periodical_origin, sepc, use_lowercase);
if utilities.is_set (AccessDate) then
local retrv_text = " " .. cfg.messages['retrieved']
AccessDate = nowrap_date (AccessDate); -- wrap in nowrap span if date in appropriate format
if (sepc ~= ".") then retrv_text = retrv_text:lower() end -- if mode is cs2, lower case
AccessDate = utilities.substitute (retrv_text, AccessDate); -- add retrieved text
AccessDate = utilities.substitute (cfg.presentation['accessdate'], {sepc, AccessDate}); -- allow editors to hide accessdates
end
if utilities.is_set (ID) then ID = sepc .. " " .. ID; end
local Docket = A['Docket'];
if "thesis" == config.CitationClass and utilities.is_set (Docket) then
ID = sepc .. " Docket " .. Docket .. ID;
end
if "report" == config.CitationClass and utilities.is_set (Docket) then -- for cite report when |docket= is set
ID = sepc .. ' ' .. Docket; -- overwrite ID even if |id= is set
end
if utilities.is_set (URL) then
URL = " " .. external_link( URL, nil, URL_origin, UrlAccess );
end
local Quote = A['Quote'];
local TransQuote = A['TransQuote'];
local ScriptQuote = A['ScriptQuote'];
if utilities.is_set (Quote) or utilities.is_set (TransQuote) or utilities.is_set (ScriptQuote) then
if utilities.is_set (Quote) then
if Quote:sub(1, 1) == '"' and Quote:sub(-1, -1) == '"' then -- if first and last characters of quote are quote marks
Quote = Quote:sub(2, -2); -- strip them off
end
end
Quote = kern_quotes (Quote); -- kern if needed
Quote = utilities.wrap_style ('quoted-text', Quote ); -- wrap in <q>...</q> tags
if utilities.is_set (ScriptQuote) then
Quote = script_concatenate (Quote, ScriptQuote, 'script-quote'); -- <bdi> tags, lang attribute, categorization, etc.; must be done after quote is wrapped
end
if utilities.is_set (TransQuote) then
if TransQuote:sub(1, 1) == '"' and TransQuote:sub(-1, -1) == '"' then -- if first and last characters of |trans-quote are quote marks
TransQuote = TransQuote:sub(2, -2); -- strip them off
end
Quote = Quote .. " " .. utilities.wrap_style ('trans-quoted-title', TransQuote );
end
if utilities.is_set (QuotePage) or utilities.is_set (QuotePages) then -- add page prefix
local quote_prefix = '';
if utilities.is_set (QuotePage) then
extra_text_in_page_check (QuotePage, 'quote-page'); -- add to maint cat if |quote-page= value begins with what looks like p., pp., etc.
if not NoPP then
quote_prefix = utilities.substitute (cfg.messages['p-prefix'], {sepc, QuotePage}), '', '', '';
else
quote_prefix = utilities.substitute (cfg.messages['nopp'], {sepc, QuotePage}), '', '', '';
end
elseif utilities.is_set (QuotePages) then
extra_text_in_page_check (QuotePages, 'quote-pages'); -- add to maint cat if |quote-pages= value begins with what looks like p., pp., etc.
if tonumber(QuotePages) ~= nil and not NoPP then -- if only digits, assume single page
quote_prefix = utilities.substitute (cfg.messages['p-prefix'], {sepc, QuotePages}), '', '';
elseif not NoPP then
quote_prefix = utilities.substitute (cfg.messages['pp-prefix'], {sepc, QuotePages}), '', '';
else
quote_prefix = utilities.substitute (cfg.messages['nopp'], {sepc, QuotePages}), '', '';
end
end
Quote = quote_prefix .. ": " .. Quote;
else
Quote = sepc .. " " .. Quote;
end
PostScript = ""; -- cs1|2 does not supply terminal punctuation when |quote= is set
end
-- We check length of PostScript here because it will have been nuked by
-- the quote parameters. We'd otherwise emit a message even if there wasn't
-- a displayed postscript.
-- TODO: Should the max size (1) be configurable?
-- TODO: Should we check a specific pattern?
if utilities.is_set(PostScript) and mw.ustring.len(PostScript) > 1 then
utilities.set_message ('maint_postscript')
end
local Archived;
if utilities.is_set (ArchiveURL) then
local arch_text;
if not utilities.is_set (ArchiveDate) then
utilities.set_message ('err_archive_missing_date');
ArchiveDate = ''; -- empty string for concatenation
end
if "live" == UrlStatus then
arch_text = cfg.messages['archived'];
if sepc ~= "." then arch_text = arch_text:lower() end
if utilities.is_set (ArchiveDate) then
Archived = sepc .. ' ' .. utilities.substitute ( cfg.messages['archived-live'],
{external_link( ArchiveURL, arch_text, A:ORIGIN('ArchiveURL'), nil) .. ArchiveFormat, ArchiveDate } );
else
Archived = '';
end
if not utilities.is_set (OriginalURL) then
utilities.set_message ('err_archive_missing_url');
Archived = ''; -- empty string for concatenation
end
elseif utilities.is_set (OriginalURL) then -- UrlStatus is empty, 'dead', 'unfit', 'usurped', 'bot: unknown'
if utilities.in_array (UrlStatus, {'unfit', 'usurped', 'bot: unknown'}) then
arch_text = cfg.messages['archived-unfit'];
if sepc ~= "." then arch_text = arch_text:lower() end
Archived = sepc .. ' ' .. arch_text .. ArchiveDate; -- format already styled
if 'bot: unknown' == UrlStatus then
utilities.set_message ('maint_bot_unknown'); -- and add a category if not already added
else
utilities.set_message ('maint_unfit'); -- and add a category if not already added
end
else -- UrlStatus is empty, 'dead'
arch_text = cfg.messages['archived-dead'];
if sepc ~= "." then arch_text = arch_text:lower() end
if utilities.is_set (ArchiveDate) then
Archived = sepc .. " " .. utilities.substitute ( arch_text,
{ external_link( OriginalURL, cfg.messages['original'], OriginalURL_origin, OriginalAccess ) .. OriginalFormat, ArchiveDate } ); -- format already styled
else
Archived = ''; -- unset for concatenation
end
end
else -- OriginalUrl not set
arch_text = cfg.messages['archived-missing'];
if sepc ~= "." then arch_text = arch_text:lower() end
utilities.set_message ('err_archive_missing_url');
Archived = ''; -- empty string for concatenation
end
elseif utilities.is_set (ArchiveFormat) then
Archived = ArchiveFormat; -- if set and ArchiveURL not set ArchiveFormat has error message
else
Archived = '';
end
local Lay = '';
local LaySource = A['LaySource'];
local LayURL = A['LayURL'];
local LayFormat = A['LayFormat'];
LayFormat = style_format (LayFormat, LayURL, 'lay-format', 'lay-url');
if utilities.is_set (LayURL) then
if utilities.is_set (LayDate) then LayDate = " (" .. LayDate .. ")" end
if utilities.is_set (LaySource) then
LaySource = " – ''" .. utilities.safe_for_italics (LaySource) .. "''";
else
LaySource = "";
end
if sepc == '.' then
Lay = sepc .. " " .. external_link( LayURL, cfg.messages['lay summary'], A:ORIGIN('LayURL'), nil ) .. LayFormat .. LaySource .. LayDate
else
Lay = sepc .. " " .. external_link( LayURL, cfg.messages['lay summary']:lower(), A:ORIGIN('LayURL'), nil ) .. LayFormat .. LaySource .. LayDate
end
elseif utilities.is_set (LayFormat) then -- Test if |lay-format= is given without giving a |lay-url=
Lay = sepc .. LayFormat; -- if set and LayURL not set, then LayFormat has error message
end
local TranscriptURL = A['TranscriptURL']
local TranscriptFormat = A['TranscriptFormat'];
TranscriptFormat = style_format (TranscriptFormat, TranscriptURL, 'transcript-format', 'transcripturl');
local Transcript = A['Transcript'];
local TranscriptURL_origin = A:ORIGIN('TranscriptURL'); -- get name of parameter that holds TranscriptURL
if utilities.is_set (Transcript) then
if utilities.is_set (TranscriptURL) then
Transcript = external_link( TranscriptURL, Transcript, TranscriptURL_origin, nil );
end
Transcript = sepc .. ' ' .. Transcript .. TranscriptFormat;
elseif utilities.is_set (TranscriptURL) then
Transcript = external_link( TranscriptURL, nil, TranscriptURL_origin, nil );
end
local Publisher;
if utilities.is_set (PublicationDate) then
PublicationDate = wrap_msg ('published', PublicationDate);
end
if utilities.is_set (PublisherName) then
if utilities.is_set (PublicationPlace) then
Publisher = sepc .. " " .. PublicationPlace .. ": " .. PublisherName .. PublicationDate;
else
Publisher = sepc .. " " .. PublisherName .. PublicationDate;
end
elseif utilities.is_set (PublicationPlace) then
Publisher= sepc .. " " .. PublicationPlace .. PublicationDate;
else
Publisher = PublicationDate;
end
local TransPeriodical = A['TransPeriodical'];
local TransPeriodical_origin = A:ORIGIN ('TransPeriodical');
-- Several of the above rely upon detecting this as nil, so do it last.
if (utilities.is_set (Periodical) or utilities.is_set (ScriptPeriodical) or utilities.is_set (TransPeriodical)) then
if utilities.is_set (Title) or utilities.is_set (TitleNote) then
Periodical = sepc .. " " .. format_periodical (ScriptPeriodical, ScriptPeriodical_origin, Periodical, TransPeriodical, TransPeriodical_origin);
else
Periodical = format_periodical (ScriptPeriodical, ScriptPeriodical_origin, Periodical, TransPeriodical, TransPeriodical_origin);
end
end
local Language = A['Language'];
if utilities.is_set (Language) then
Language = language_parameter (Language); -- format, categories, name from ISO639-1, etc.
else
Language=''; -- language not specified so make sure this is an empty string;
--[[ TODO: need to extract the wrap_msg from language_parameter
so that we can solve parentheses bunching problem with Format/Language/TitleType
]]
end
--[[
Handle the oddity that is cite speech. This code overrides whatever may be the value assigned to TitleNote (through |department=) and forces it to be " (Speech)" so that
the annotation directly follows the |title= parameter value in the citation rather than the |event= parameter value (if provided).
]]
if "speech" == config.CitationClass then -- cite speech only
TitleNote = TitleType; -- move TitleType to TitleNote so that it renders ahead of |event=
TitleType = ''; -- and unset
if utilities.is_set (Periodical) then -- if Periodical, perhaps because of an included |website= or |journal= parameter
if utilities.is_set (Conference) then -- and if |event= is set
Conference = Conference .. sepc .. " "; -- then add appropriate punctuation to the end of the Conference variable before rendering
end
end
end
-- Piece all bits together at last. Here, all should be non-nil.
-- We build things this way because it is more efficient in LUA
-- not to keep reassigning to the same string variable over and over.
local tcommon;
local tcommon2; -- used for book cite when |contributor= is set
if utilities.in_array (config.CitationClass, {"journal", "citation"}) and utilities.is_set (Periodical) then
if not (utilities.is_set (Authors) or utilities.is_set (Editors)) then
Others = Others:gsub ('^' .. sepc .. ' ', ''); -- when no authors and no editors, strip leading sepc and space
end
if utilities.is_set (Others) then Others = safe_join ({Others, sepc .. " "}, sepc) end -- add terminal punctuation & space; check for dup sepc; TODO why do we need to do this here?
tcommon = safe_join( {Others, Title, TitleNote, Conference, Periodical, Format, TitleType, Series, Language, Edition, Publisher, Agency, Volume}, sepc );
elseif utilities.in_array (config.CitationClass, {"book", "citation"}) and not utilities.is_set (Periodical) then -- special cases for book cites
if utilities.is_set (Contributors) then -- when we are citing foreword, preface, introduction, etc.
tcommon = safe_join( {Title, TitleNote}, sepc ); -- author and other stuff will come after this and before tcommon2
tcommon2 = safe_join( {Conference, Periodical, Format, TitleType, Series, Language, Volume, Others, Edition, Publisher, Agency}, sepc );
else
tcommon = safe_join( {Title, TitleNote, Conference, Periodical, Format, TitleType, Series, Language, Volume, Others, Edition, Publisher, Agency}, sepc );
end
elseif 'map' == config.CitationClass then -- special cases for cite map
if utilities.is_set (Chapter) then -- map in a book; TitleType is part of Chapter
tcommon = safe_join( {Title, Format, Edition, Scale, Series, Language, Cartography, Others, Publisher, Volume}, sepc );
elseif utilities.is_set (Periodical) then -- map in a periodical
tcommon = safe_join( {Title, TitleType, Format, Periodical, Scale, Series, Language, Cartography, Others, Publisher, Volume}, sepc );
else -- a sheet or stand-alone map
tcommon = safe_join( {Title, TitleType, Format, Edition, Scale, Series, Language, Cartography, Others, Publisher}, sepc );
end
elseif 'episode' == config.CitationClass then -- special case for cite episode
tcommon = safe_join( {Title, TitleNote, TitleType, Series, Language, Edition, Publisher}, sepc );
else -- all other CS1 templates
tcommon = safe_join( {Title, TitleNote, Conference, Periodical, Format, TitleType, Series, Language,
Volume, Others, Edition, Publisher, Agency}, sepc );
end
if #ID_list > 0 then
ID_list = safe_join( { sepc .. " ", table.concat( ID_list, sepc .. " " ), ID }, sepc );
else
ID_list = ID;
end
local Via = A['Via'];
Via = utilities.is_set (Via) and wrap_msg ('via', Via) or '';
local idcommon;
if 'audio-visual' == config.CitationClass or 'episode' == config.CitationClass then -- special case for cite AV media & cite episode position transcript
idcommon = safe_join( { ID_list, URL, Archived, Transcript, AccessDate, Via, Lay, Quote }, sepc );
else
idcommon = safe_join( { ID_list, URL, Archived, AccessDate, Via, Lay, Quote }, sepc );
end
local text;
local pgtext = Position .. Sheet .. Sheets .. Page .. Pages .. At;
local OrigDate = A['OrigDate'];
OrigDate = utilities.is_set (OrigDate) and wrap_msg ('origdate', OrigDate) or '';
if utilities.is_set (Date) then
if utilities.is_set (Authors) or utilities.is_set (Editors) then -- date follows authors or editors when authors not set
Date = " (" .. Date .. ")" .. OrigDate .. sepc .. " "; -- in parentheses
else -- neither of authors and editors set
if (string.sub(tcommon, -1, -1) == sepc) then -- if the last character of tcommon is sepc
Date = " " .. Date .. OrigDate; -- Date does not begin with sepc
else
Date = sepc .. " " .. Date .. OrigDate; -- Date begins with sepc
end
end
end
if utilities.is_set (Authors) then
if (not utilities.is_set (Date)) then -- when date is set it's in parentheses; no Authors termination
Authors = terminate_name_list (Authors, sepc); -- when no date, terminate with 0 or 1 sepc and a space
end
if utilities.is_set (Editors) then
local in_text = " ";
local post_text = "";
if utilities.is_set (Chapter) and 0 == #c then
in_text = in_text .. cfg.messages['in'] .. " "
if (sepc ~= '.') then
in_text = in_text:lower() -- lowercase for cs2
end
end
if EditorCount <= 1 then
post_text = " (" .. cfg.messages['editor'] .. ")"; -- be consistent with no-author, no-date case
else
post_text = " (" .. cfg.messages['editors'] .. ")";
end
Editors = terminate_name_list (in_text .. Editors .. post_text, sepc); -- terminate with 0 or 1 sepc and a space
end
if utilities.is_set (Contributors) then -- book cite and we're citing the intro, preface, etc.
local by_text = sepc .. ' ' .. cfg.messages['by'] .. ' ';
if (sepc ~= '.') then by_text = by_text:lower() end -- lowercase for cs2
Authors = by_text .. Authors; -- author follows title so tweak it here
if utilities.is_set (Editors) and utilities.is_set (Date) then -- when Editors make sure that Authors gets terminated
Authors = terminate_name_list (Authors, sepc); -- terminate with 0 or 1 sepc and a space
end
if (not utilities.is_set (Date)) then -- when date is set it's in parentheses; no Contributors termination
Contributors = terminate_name_list (Contributors, sepc); -- terminate with 0 or 1 sepc and a space
end
text = safe_join( {Contributors, Date, Chapter, tcommon, Authors, Place, Editors, tcommon2, pgtext, idcommon }, sepc );
else
text = safe_join( {Authors, Date, Chapter, Place, Editors, tcommon, pgtext, idcommon }, sepc );
end
elseif utilities.is_set (Editors) then
if utilities.is_set (Date) then
if EditorCount <= 1 then
Editors = Editors .. cfg.presentation['sep_name'] .. cfg.messages['editor'];
else
Editors = Editors .. cfg.presentation['sep_name'] .. cfg.messages['editors'];
end
else
if EditorCount <= 1 then
Editors = Editors .. " (" .. cfg.messages['editor'] .. ")" .. sepc .. " "
else
Editors = Editors .. " (" .. cfg.messages['editors'] .. ")" .. sepc .. " "
end
end
text = safe_join( {Editors, Date, Chapter, Place, tcommon, pgtext, idcommon}, sepc );
else
if utilities.in_array (config.CitationClass, {"journal", "citation"}) and utilities.is_set (Periodical) then
text = safe_join( {Chapter, Place, tcommon, pgtext, Date, idcommon}, sepc );
else
text = safe_join( {Chapter, Place, tcommon, Date, pgtext, idcommon}, sepc );
end
end
if utilities.is_set (PostScript) and PostScript ~= sepc then
text = safe_join( {text, sepc}, sepc ); -- Deals with italics, spaces, etc.
text = text:sub(1, -sepc:len() - 1);
end
text = safe_join( {text, PostScript}, sepc );
-- Now enclose the whole thing in a <cite> element
local options_t = {};
options_t.class = cite_class_attribute_make (config.CitationClass, Mode);
local Ref = is_valid_parameter_value (A['Ref'], A:ORIGIN('Ref'), cfg.keywords_lists['ref'], nil, true); -- nil when |ref=harv; A['Ref'] else
if 'none' ~= cfg.keywords_xlate[(Ref and Ref:lower()) or ''] then
local namelist_t = {}; -- holds selected contributor, author, editor name list
local year = first_set ({Year, anchor_year}, 2); -- Year first for legacy citations and for YMD dates that require disambiguation
if #c > 0 then -- if there is a contributor list
namelist_t = c; -- select it
elseif #a > 0 then -- or an author list
namelist_t = a;
elseif #e > 0 then -- or an editor list
namelist_t = e;
end
local citeref_id;
if #namelist_t > 0 then -- if there are names in namelist_t
citeref_id = make_citeref_id (namelist_t, year); -- go make the CITEREF anchor
if mw.uri.anchorEncode (citeref_id) == ((Ref and mw.uri.anchorEncode (Ref)) or '') then -- Ref may already be encoded (by {{sfnref}}) so citeref_id must be encoded before comparison
utilities.set_message ('maint_ref_duplicates_default');
end
else
citeref_id = ''; -- unset
end
options_t.id = Ref or citeref_id;
end
if string.len (text:gsub('%b<>', '')) <= 2 then -- remove html and html-like tags; then get length of what remains;
z.error_cats_t = {}; -- blank the categories list
z.error_msgs_t = {}; -- blank the error messages list
OCinSoutput = nil; -- blank the metadata string
text = ''; -- blank the the citation
utilities.set_message ('err_empty_citation'); -- set empty citation message and category
end
local render_t = {}; -- here we collect the final bits for concatenation into the rendered citation
if utilities.is_set (options_t.id) then -- here we wrap the rendered citation in <cite ...>...</cite> tags
table.insert (render_t, utilities.substitute (cfg.presentation['cite-id'], {mw.uri.anchorEncode(options_t.id), mw.text.nowiki(options_t.class), text})); -- when |ref= is set or when there is a namelist
else
table.insert (render_t, utilities.substitute (cfg.presentation['cite'], {mw.text.nowiki(options_t.class), text})); -- when |ref=none or when namelist_t empty and |ref= is missing or is empty
end
if OCinSoutput then -- blanked when citation is 'empty' so don't bother to add boilerplate metadata span
table.insert (render_t, utilities.substitute (cfg.presentation['ocins'], OCinSoutput)); -- format and append metadata to the citation
end
local template_name = ('citation' == config.CitationClass) and 'citation' or 'cite ' .. (cfg.citation_class_map_t[config.CitationClass] or config.CitationClass);
local template_link = '[[Template:' .. template_name .. '|' .. template_name .. ']]';
local msg_prefix = '<code class="cs1-code">{{' .. template_link .. '}}</code>: ';
if 0 ~= #z.error_msgs_t then
mw.addWarning (utilities.substitute (cfg.messages.warning_msg_e, template_link));
table.insert (render_t, ' '); -- insert a space between citation and its error messages
table.sort (z.error_msgs_t); -- sort the error messages list; sorting includes wrapping <span> and <code> tags; hidden-error sorts ahead of visible-error
local hidden = true; -- presume that the only error messages emited by this template are hidden
for _, v in ipairs (z.error_msgs_t) do -- spin through the list of error messages
if v:find ('cs1-visible-error', 1, true) then -- look for the visible error class name
hidden = false; -- found one; so don't hide the error message prefix
break; -- and done because no need to look further
end
end
z.error_msgs_t[1] = table.concat ({utilities.error_comment (msg_prefix, hidden), z.error_msgs_t[1]}); -- add error message prefix to first error message to prevent extraneous punctuation
table.insert (render_t, table.concat (z.error_msgs_t, '; ')); -- make a big string of error messages and add it to the rendering
end
if 0 ~= #z.maint_cats_t then
mw.addWarning (utilities.substitute (cfg.messages.warning_msg_m, template_link));
table.sort (z.maint_cats_t); -- sort the maintenance messages list
local maint_msgs_t = {}; -- here we collect all of the maint messages
if 0 == #z.error_msgs_t then -- if no error messages
table.insert (maint_msgs_t, msg_prefix); -- insert message prefix in maint message livery
end
for _, v in ipairs( z.maint_cats_t ) do -- append maintenance categories
table.insert (maint_msgs_t, -- assemble new maint message and add it to the maint_msgs_t table
table.concat ({v, ' (', utilities.substitute (cfg.messages[':cat wikilink'], v), ')'})
);
end
table.insert (render_t, utilities.substitute (cfg.presentation['hidden-maint'], table.concat (maint_msgs_t, ' '))); -- wrap the group of maint messages with proper presentation and save
end
if not no_tracking_cats then
for _, v in ipairs (z.error_cats_t) do -- append error categories
table.insert (render_t, utilities.substitute (cfg.messages['cat wikilink'], v));
end
for _, v in ipairs (z.maint_cats_t) do -- append maintenance categories
table.insert (render_t, utilities.substitute (cfg.messages['cat wikilink'], v));
end
for _, v in ipairs (z.prop_cats_t) do -- append properties categories
table.insert (render_t, utilities.substitute (cfg.messages['cat wikilink'], v));
end
end
return table.concat (render_t); -- make a big string and done
end
--[[--------------------------< V A L I D A T E >--------------------------------------------------------------
Looks for a parameter's name in one of several whitelists.
Parameters in the whitelist can have three values:
true - active, supported parameters
false - deprecated, supported parameters
nil - unsupported parameters
]]
local function validate (name, cite_class, empty)
local name = tostring (name);
local enum_name; -- for enumerated parameters, is name with enumerator replaced with '#'
local state;
local function state_test (state, name) -- local function to do testing of state values
if true == state then return true; end -- valid actively supported parameter
if false == state then
if empty then return nil; end -- empty deprecated parameters are treated as unknowns
deprecated_parameter (name); -- parameter is deprecated but still supported
return true;
end
if 'tracked' == state then
local base_name = name:gsub ('%d', ''); -- strip enumerators from parameter names that have them to get the base name
utilities.add_prop_cat ('tracked-param', {base_name}, base_name); -- add a properties category; <base_name> modifies <key>
return true;
end
return nil;
end
if name:find ('#') then -- # is a cs1|2 reserved character so parameters with # not permitted
return nil;
end
if utilities.in_array (cite_class, whitelist.preprint_template_list ) then -- limited parameter sets allowed for these templates
state = whitelist.limited_basic_arguments[name];
if true == state_test (state, name) then return true; end
state = whitelist.preprint_arguments[cite_class][name]; -- look in the parameter-list for the template identified by cite_class
if true == state_test (state, name) then return true; end
-- limited enumerated parameters list
enum_name = name:gsub("%d+", "#" ); -- replace digit(s) with # (last25 becomes last#) (mw.ustring because non-Western 'local' digits)
state = whitelist.limited_numbered_arguments[enum_name];
if true == state_test (state, name) then return true; end
return false; -- not supported because not found or name is set to nil
end -- end limited parameter-set templates
if utilities.in_array (cite_class, whitelist.unique_param_template_list) then -- experiment for template-specific parameters for templates that accept parameters from the basic argument list
state = whitelist.unique_arguments[cite_class][name]; -- look in the template-specific parameter-lists for the template identified by cite_class
if true == state_test (state, name) then return true; end
end -- if here, fall into general validation
state = whitelist.basic_arguments[name]; -- all other templates; all normal parameters allowed
if true == state_test (state, name) then return true; end
-- all enumerated parameters allowed
enum_name = name:gsub("%d+", "#" ); -- replace digit(s) with # (last25 becomes last#) (mw.ustring because non-Western 'local' digits)
state = whitelist.numbered_arguments[enum_name];
if true == state_test (state, name) then return true; end
return false; -- not supported because not found or name is set to nil
end
--[=[-------------------------< I N T E R _ W I K I _ C H E C K >----------------------------------------------
check <value> for inter-language interwiki-link markup. <prefix> must be a MediaWiki-recognized language
code. when these values have the form (without leading colon):
[[<prefix>:link|label]] return label as plain-text
[[<prefix>:link]] return <prefix>:link as plain-text
return value as is else
]=]
local function inter_wiki_check (parameter, value)
local prefix = value:match ('%[%[(%a+):'); -- get an interwiki prefix if one exists
local _;
if prefix and cfg.inter_wiki_map[prefix:lower()] then -- if prefix is in the map, needs preceding colon so
utilities.set_message ('err_bad_paramlink', parameter); -- emit an error message
_, value, _ = utilities.is_wikilink (value); -- extract label portion from wikilink
end
return value;
end
--[[--------------------------< M I S S I N G _ P I P E _ C H E C K >------------------------------------------
Look at the contents of a parameter. If the content has a string of characters and digits followed by an equal
sign, compare the alphanumeric string to the list of cs1|2 parameters. If found, then the string is possibly a
parameter that is missing its pipe. There are two tests made:
{{cite ... |title=Title access-date=2016-03-17}} -- the first parameter has a value and whitespace separates that value from the missing pipe parameter name
{{cite ... |title=access-date=2016-03-17}} -- the first parameter has no value (whitespace after the first = is trimmed by MediaWiki)
cs1|2 shares some parameter names with XML/HTML attributes: class=, title=, etc. To prevent false positives XML/HTML
tags are removed before the search.
If a missing pipe is detected, this function adds the missing pipe maintenance category.
]]
local function missing_pipe_check (parameter, value)
local capture;
value = value:gsub ('%b<>', ''); -- remove XML/HTML tags because attributes: class=, title=, etc.
capture = value:match ('%s+(%a[%w%-]+)%s*=') or value:match ('^(%a[%w%-]+)%s*='); -- find and categorize parameters with possible missing pipes
if capture and validate (capture) then -- if the capture is a valid parameter name
utilities.set_message ('err_missing_pipe', parameter);
end
end
--[[--------------------------< H A S _ E X T R A N E O U S _ P U N C T >--------------------------------------
look for extraneous terminal punctuation in most parameter values; parameters listed in skip table are not checked
]]
local function has_extraneous_punc (param, value)
if 'number' == type (param) then
return;
end
param = param:gsub ('%d+', '#'); -- enumerated name-list mask params allow terminal punct; normalize
if cfg.punct_skip[param] then
return; -- parameter name found in the skip table so done
end
if value:match ('[,;:]$') then
utilities.set_message ('maint_extra_punct'); -- has extraneous punctuation; add maint cat
end
if value:match ('^=') then -- sometimes an extraneous '=' character appears ...
utilities.set_message ('maint_extra_punct'); -- has extraneous punctuation; add maint cat
end
end
--[[--------------------------< H A S _ E X T R A N E O U S _ U R L >------------------------------------------
look for extraneous url parameter values; parameters listed in skip table are not checked
]]
local function has_extraneous_url (url_param_t)
local url_error_t = {};
check_for_url (url_param_t, url_error_t); -- extraneous url check
if 0 ~= #url_error_t then -- non-zero when there are errors
table.sort (url_error_t);
utilities.set_message ('err_param_has_ext_link', {utilities.make_sep_list (#url_error_t, url_error_t)}); -- add this error message
end
end
--[[--------------------------< C I T A T I O N >--------------------------------------------------------------
This is used by templates such as {{cite book}} to create the actual citation text.
]]
local function citation(frame)
Frame = frame; -- save a copy in case we need to display an error message in preview mode
local config = {}; -- table to store parameters from the module {{#invoke:}}
for k, v in pairs( frame.args ) do -- get parameters from the {{#invoke}} frame
config[k] = v;
-- args[k] = v; -- crude debug support that allows us to render a citation from module {{#invoke:}}; skips parameter validation; TODO: keep?
end
-- i18n: set the name that your wiki uses to identify sandbox subpages from sandbox template invoke (or can be set here)
local sandbox = ((config.SandboxPath and '' ~= config.SandboxPath) and config.SandboxPath) or '/sandbox'; -- sandbox path from {{#invoke:Citation/CS1/sandbox|citation|SandboxPath=/...}}
is_sandbox = nil ~= string.find (frame:getTitle(), sandbox, 1, true); -- is this invoke the sandbox module?
sandbox = is_sandbox and sandbox or ''; -- use i18n sandbox to load sandbox modules when this module is the sandox; live modules else
local pframe = frame:getParent()
local styles;
cfg = mw.loadData ('Module:Citation/CS1/Configuration' .. sandbox); -- load sandbox versions of support modules when {{#invoke:Citation/CS1/sandbox|...}}; live modules else
whitelist = mw.loadData ('Module:Citation/CS1/Whitelist' .. sandbox);
utilities = require ('Module:Citation/CS1/Utilities' .. sandbox);
validation = require ('Module:Citation/CS1/Date_validation' .. sandbox);
identifiers = require ('Module:Citation/CS1/Identifiers' .. sandbox);
metadata = require ('Module:Citation/CS1/COinS' .. sandbox);
styles = 'Module:Citation/CS1' .. sandbox .. '/styles.css';
utilities.set_selected_modules (cfg); -- so that functions in Utilities can see the selected cfg tables
identifiers.set_selected_modules (cfg, utilities); -- so that functions in Identifiers can see the selected cfg tables and selected Utilities module
validation.set_selected_modules (cfg, utilities); -- so that functions in Date validataion can see selected cfg tables and the selected Utilities module
metadata.set_selected_modules (cfg, utilities); -- so that functions in COinS can see the selected cfg tables and selected Utilities module
z = utilities.z; -- table of error and category tables in Module:Citation/CS1/Utilities
is_preview_mode = not utilities.is_set (frame:preprocess ('{{REVISIONID}}'));
local args = {}; -- table where we store all of the template's arguments
local suggestions = {}; -- table where we store suggestions if we need to loadData them
local error_text; -- used as a flag
local capture; -- the single supported capture when matching unknown parameters using patterns
local empty_unknowns = {}; -- sequence table to hold empty unknown params for error message listing
for k, v in pairs( pframe.args ) do -- get parameters from the parent (template) frame
v = mw.ustring.gsub (v, '^%s*(.-)%s*$', '%1'); -- trim leading/trailing whitespace; when v is only whitespace, becomes empty string
if v ~= '' then
if ('string' == type (k)) then
k = mw.ustring.gsub (k, '%d', cfg.date_names.local_digits); -- for enumerated parameters, translate 'local' digits to Western 0-9
end
if not validate( k, config.CitationClass ) then
if type (k) ~= 'string' then -- exclude empty numbered parameters
if v:match("%S+") ~= nil then
error_text = utilities.set_message ('err_text_ignored', {v});
end
elseif validate (k:lower(), config.CitationClass) then
error_text = utilities.set_message ('err_parameter_ignored_suggest', {k, k:lower()}); -- suggest the lowercase version of the parameter
else
if nil == suggestions.suggestions then -- if this table is nil then we need to load it
suggestions = mw.loadData ('Module:Citation/CS1/Suggestions' .. sandbox); --load sandbox version of suggestion module when {{#invoke:Citation/CS1/sandbox|...}}; live module else
end
for pattern, param in pairs (suggestions.patterns) do -- loop through the patterns to see if we can suggest a proper parameter
capture = k:match (pattern); -- the whole match if no capture in pattern else the capture if a match
if capture then -- if the pattern matches
param = utilities.substitute (param, capture); -- add the capture to the suggested parameter (typically the enumerator)
if validate (param, config.CitationClass) then -- validate the suggestion to make sure that the suggestion is supported by this template (necessary for limited parameter lists)
error_text = utilities.set_message ('err_parameter_ignored_suggest', {k, param}); -- set the suggestion error message
else
error_text = utilities.set_message ('err_parameter_ignored', {k}); -- suggested param not supported by this template
v = ''; -- unset
end
end
end
if not utilities.is_set (error_text) then -- couldn't match with a pattern, is there an explicit suggestion?
if (suggestions.suggestions[ k:lower() ] ~= nil) and validate (suggestions.suggestions[ k:lower() ], config.CitationClass) then
utilities.set_message ('err_parameter_ignored_suggest', {k, suggestions.suggestions[ k:lower() ]});
else
utilities.set_message ('err_parameter_ignored', {k});
v = ''; -- unset value assigned to unrecognized parameters (this for the limited parameter lists)
end
end
end
end
args[k] = v; -- save this parameter and its value
elseif not utilities.is_set (v) then -- for empty parameters
if not validate (k, config.CitationClass, true) then -- is this empty parameter a valid parameter
k = ('' == k) and '(empty string)' or k; -- when k is empty string (or was space(s) trimmed to empty string), replace with descriptive text
table.insert (empty_unknowns, utilities.wrap_style ('parameter', k)); -- format for error message and add to the list
end
-- crude debug support that allows us to render a citation from module {{#invoke:}} TODO: keep?
-- elseif args[k] ~= nil or (k == 'postscript') then -- when args[k] has a value from {{#invoke}} frame (we don't normally do that)
-- args[k] = v; -- overwrite args[k] with empty string from pframe.args[k] (template frame); v is empty string here
end -- not sure about the postscript bit; that gets handled in parameter validation; historical artifact?
end
if 0 ~= #empty_unknowns then -- create empty unknown error message
utilities.set_message ('err_param_unknown_empty', {
1 == #empty_unknowns and '' or 's',
utilities.make_sep_list (#empty_unknowns, empty_unknowns)
});
end
local url_param_t = {};
for k, v in pairs( args ) do
if 'string' == type (k) then -- don't evaluate positional parameters
has_invisible_chars (k, v); -- look for invisible characters
end
has_extraneous_punc (k, v); -- look for extraneous terminal punctuation in parameter values
missing_pipe_check (k, v); -- do we think that there is a parameter that is missing a pipe?
args[k] = inter_wiki_check (k, v); -- when language interwiki-linked parameter missing leading colon replace with wiki-link label
if 'string' == type (k) and not cfg.url_skip[k] then -- when parameter k is not positional and not in url skip table
url_param_t[k] = v; -- make a parameter/value list for extraneous url check
end
end
has_extraneous_url (url_param_t); -- look for url in parameter values where a url does not belong
return table.concat ({
frame:extensionTag ('templatestyles', '', {src=styles}),
citation0( config, args)
});
end
--[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------
]]
return {citation = citation};
i7z918lp7p82rgiud4zhl7nejkm3ae9
Module:Citation/CS1/Configuration
828
39043527
1140737058
1138816858
2023-02-21T14:30:30Z
Trappist the monk
10289486
bump ssrn;
Scribunto
text/plain
local lang_obj = mw.language.getContentLanguage(); -- make a language object for the local language; used here for languages and dates
--[[--------------------------< U N C A T E G O R I Z E D _ N A M E S P A C E S >------------------------------
List of namespaces identifiers for namespaces that will not be included in citation error categories.
Same as setting notracking = true by default.
For wikis that have a current version of Module:cs1 documentation support, this #invoke will return an unordered
list of namespace names and their associated identifiers:
{{#invoke:cs1 documentation support|uncategorized_namespace_lister|all=<anything>}}
]]
uncategorized_namespaces_t = {[2]=true}; -- init with user namespace id
for k, _ in pairs (mw.site.talkNamespaces) do -- add all talk namespace ids
uncategorized_namespaces_t[k] = true;
end
local uncategorized_subpages = {'/[Ss]andbox', '/[Tt]estcases', '/[^/]*[Ll]og', '/[Aa]rchive'}; -- list of Lua patterns found in page names of pages we should not categorize
--[[--------------------------< M E S S A G E S >--------------------------------------------------------------
Translation table
The following contains fixed text that may be output as part of a citation.
This is separated from the main body to aid in future translations of this
module.
]]
local messages = {
['agency'] = '$1 $2', -- $1 is sepc, $2 is agency
['archived-dead'] = 'Archived from $1 on $2',
['archived-live'] = '$1 from the original on $2',
['archived-missing'] = 'Archived from the original$1 on $2',
['archived-unfit'] = 'Archived from the original on ',
['archived'] = 'Archived',
['by'] = 'By', -- contributions to authored works: introduction, foreword, afterword
['cartography'] = 'Cartography by $1',
['editor'] = 'ed.',
['editors'] = 'eds.',
['edition'] = '($1 ed.)',
['episode'] = 'Episode $1',
['et al'] = 'et al.',
['in'] = 'In', -- edited works
['inactive'] = 'inactive',
['inset'] = '$1 inset',
['interview'] = 'Interviewed by $1',
['lay summary'] = 'Lay summary',
['mismatch'] = '<code class="cs1-code">|$1=</code> / <code class="cs1-code">|$2=</code> mismatch', -- $1 is year param name; $2 is date param name
['newsgroup'] = '[[Usenet newsgroup|Newsgroup]]: $1',
['notitle'] = 'No title', -- for |title=(()) and (in the future) |title=none
['original'] = 'the original',
['origdate'] = ' [$1]',
['published'] = ' (published $1)',
['retrieved'] = 'Retrieved $1',
['season'] = 'Season $1',
['section'] = '§ $1',
['sections'] = '§§ $1',
['series'] = '$1 $2', -- $1 is sepc, $2 is series
['seriesnum'] = 'Series $1',
['translated'] = 'Translated by $1',
['type'] = ' ($1)', -- for titletype
['written'] = 'Written at $1',
['vol'] = '$1 Vol. $2', -- $1 is sepc; bold journal style volume is in presentation{}
['vol-no'] = '$1 Vol. $2, no. $3', -- sepc, volume, issue (alternatively insert $1 after $2, but then we'd also have to change capitalization)
['issue'] = '$1 No. $2', -- $1 is sepc
['art'] = '$1 Art. $2', -- $1 is sepc; for {{cite conference}} only
['vol-art'] = '$1 Vol. $2, art. $3', -- sepc, volume, article-number; for {{cite conference}} only
['j-vol'] = '$1 $2', -- sepc, volume; bold journal volume is in presentation{}
['j-issue'] = ' ($1)',
['j-article-num'] = ' $1', -- TODO: any punctuation here? static text?
['nopp'] = '$1 $2'; -- page(s) without prefix; $1 is sepc
['p-prefix'] = "$1 p. $2", -- $1 is sepc
['pp-prefix'] = "$1 pp. $2", -- $1 is sepc
['j-page(s)'] = ': $1', -- same for page and pages
['sheet'] = '$1 Sheet $2', -- $1 is sepc
['sheets'] = '$1 Sheets $2', -- $1 is sepc
['j-sheet'] = ': Sheet $1',
['j-sheets'] = ': Sheets $1',
['language'] = '(in $1)',
['via'] = " – via $1",
['event'] = 'Event occurs at',
['minutes'] = 'minutes in',
-- Determines the location of the help page
['help page link'] = 'Help:CS1 errors',
['help page label'] = 'help',
-- categories
['cat wikilink'] = '[[Category:$1]]', -- $1 is the category name
[':cat wikilink'] = '[[:Category:$1|link]]', -- category name as maintenance message wikilink; $1 is the category name
-- Internal errors (should only occur if configuration is bad)
['undefined_error'] = 'Called with an undefined error condition',
['unknown_ID_key'] = 'Unrecognized ID key: ', -- an ID key in id_handlers not found in ~/Identifiers func_map{}
['unknown_ID_access'] = 'Unrecognized ID access keyword: ', -- an ID access keyword in id_handlers not found in keywords_lists['id-access']{}
['unknown_argument_map'] = 'Argument map not defined for this variable',
['bare_url_no_origin'] = 'Bare URL found but origin indicator is nil or empty',
['warning_msg_e'] = '<span style="color:#d33">One or more <code style="color: inherit; background: inherit; border: none; padding: inherit;">{{$1}}</code> templates have errors</span>; messages may be hidden ([[Help:CS1_errors#Controlling_error_message_display|help]]).'; -- $1 is template link
['warning_msg_m'] = '<span style="color:#3a3">One or more <code style="color: inherit; background: inherit; border: none; padding: inherit;">{{$1}}</code> templates have maintenance messages</span>; messages may be hidden ([[Help:CS1_errors#Controlling_error_message_display|help]]).'; -- $1 is template link
}
--[[--------------------------< C I T A T I O N _ C L A S S _ M A P >------------------------------------------
this table maps the value assigned to |CitationClass= in the cs1|2 templates to the canonical template name when
the value assigned to |CitationClass= is different from the canonical template name. |CitationClass= values are
used as class attributes in the <cite> tag that encloses the citation so these names may not contain spaces while
the canonical template name may. These names are used in warning_msg_e and warning_msg_m to create links to the
template's documentation when an article is displayed in preview mode.
Most cs1|2 template |CitationClass= values at en.wiki match their canonical template names so are not listed here.
]]
local citation_class_map_t = { -- TODO: if kept, these and all other config.CitationClass 'names' require some sort of i18n
['audio-visual'] = 'AV media',
['AV-media-notes'] = 'AV media notes',
['encyclopaedia'] = 'encyclopedia',
['mailinglist'] = 'mailing list',
['pressrelease'] = 'press release'
}
--[=[-------------------------< E T _ A L _ P A T T E R N S >--------------------------------------------------
This table provides Lua patterns for the phrase "et al" and variants in name text
(author, editor, etc.). The main module uses these to identify and emit the 'etal' message.
]=]
local et_al_patterns = {
"[;,]? *[\"']*%f[%a][Ee][Tt]%.? *[Aa][Ll][%.;,\"']*$", -- variations on the 'et al' theme
"[;,]? *[\"']*%f[%a][Ee][Tt]%.? *[Aa][Ll][Ii][AaIi][Ee]?[%.;,\"']*$", -- variations on the 'et alia', 'et alii' and 'et aliae' themes (false positive 'et aliie' unlikely to match)
"[;,]? *%f[%a]and [Oo]thers", -- an alternative to et al.
"%[%[ *[Ee][Tt]%.? *[Aa][Ll]%.? *%]%]", -- a wikilinked form
"%(%( *[Ee][Tt]%.? *[Aa][Ll]%.? *%)%)", -- a double-bracketed form (to counter partial removal of ((...)) syntax)
"[%(%[] *[Ee][Tt]%.? *[Aa][Ll]%.? *[%)%]]", -- a bracketed form
}
--[[--------------------------< P R E S E N T A T I O N >------------------------
Fixed presentation markup. Originally part of citation_config.messages it has
been moved into its own, more semantically correct place.
]]
local presentation =
{
-- .citation-comment class is specified at Help:CS1_errors#Controlling_error_message_display
['hidden-error'] = '<span class="cs1-hidden-error citation-comment">$1</span>',
['visible-error'] = '<span class="cs1-visible-error citation-comment">$1</span>',
['hidden-maint'] = '<span class="cs1-maint citation-comment">$1</span>',
['accessdate'] = '<span class="reference-accessdate">$1$2</span>', -- to allow editors to hide accessdate using personal CSS
['bdi'] = '<bdi$1>$2</bdi>', -- bidirectional isolation used with |script-title= and the like
['cite'] = '<cite class="$1">$2</cite>'; -- for use when citation does not have a namelist and |ref= not set so no id="..." attribute
['cite-id'] = '<cite id="$1" class="$2">$3</cite>'; -- for use when when |ref= is set or when citation has a namelist
['format'] = ' <span class="cs1-format">($1)</span>', -- for |format=, |chapter-format=, etc.
['interwiki'] = ' <span class="cs1-format">[in $1]</span>', -- for interwiki-language-linked author, editor, etc
['interproj'] = ' <span class="cs1-format">[at $1]</span>', -- for interwiki-project-linked author, editor, etc (:d: and :s: supported; :w: ignored)
-- various access levels, for |access=, |doi-access=, |arxiv=, ...
-- narrow no-break space   may work better than nowrap CSS. Or not? Browser support?
['ext-link-access-signal'] = '<span class="$1" title="$2">$3</span>', -- external link with appropriate lock icon
['free'] = {class='cs1-lock-free', title='Freely accessible'}, -- classes defined in Module:Citation/CS1/styles.css
['registration'] = {class='cs1-lock-registration', title='Free registration required'},
['limited'] = {class='cs1-lock-limited', title='Free access subject to limited trial, subscription normally required'},
['subscription'] = {class='cs1-lock-subscription', title='Paid subscription required'},
['interwiki-icon'] = '<span class="$1" title="$2">$3</span>',
['class-wikisource'] = 'cs1-ws-icon',
['italic-title'] = "''$1''",
['kern-left'] = '<span class="cs1-kern-left"></span>$1', -- spacing to use when title contains leading single or double quote mark
['kern-right'] = '$1<span class="cs1-kern-right"></span>', -- spacing to use when title contains trailing single or double quote mark
['nowrap1'] = '<span class="nowrap">$1</span>', -- for nowrapping an item: <span ...>yyyy-mm-dd</span>
['nowrap2'] = '<span class="nowrap">$1</span> $2', -- for nowrapping portions of an item: <span ...>dd mmmm</span> yyyy (note white space)
['ocins'] = '<span title="$1" class="Z3988"></span>',
['parameter'] = '<code class="cs1-code">|$1=</code>',
['ps_cs1'] = '.'; -- CS1 style postscript (terminal) character
['ps_cs2'] = ''; -- CS2 style postscript (terminal) character (empty string)
['quoted-text'] = '<q>$1</q>', -- for wrapping |quote= content
['quoted-title'] = '"$1"',
['sep_cs1'] = '.', -- CS1 element separator
['sep_cs2'] = ',', -- CS2 separator
['sep_nl'] = ';', -- CS1|2 style name-list separator between names is a semicolon
['sep_nl_and'] = ' and ', -- used as last nl sep when |name-list-style=and and list has 2 items
['sep_nl_end'] = '; and ', -- used as last nl sep when |name-list-style=and and list has 3+ names
['sep_name'] = ', ', -- CS1|2 style last/first separator is <comma><space>
['sep_nl_vanc'] = ',', -- Vancouver style name-list separator between authors is a comma
['sep_name_vanc'] = ' ', -- Vancouver style last/first separator is a space
['sep_list'] = ', ', -- used for |language= when list has 3+ items except for last sep which uses sep_list_end
['sep_list_pair'] = ' and ', -- used for |language= when list has 2 items
['sep_list_end'] = ', and ', -- used as last list sep for |language= when list has 3+ items
['trans-italic-title'] = "[''$1'']",
['trans-quoted-title'] = "[$1]", -- for |trans-title= and |trans-quote=
['vol-bold'] = '$1 <b>$2</b>', -- sepc, volume; for bold journal cites; for other cites ['vol'] in messages{}
}
--[[--------------------------< A L I A S E S >---------------------------------
Aliases table for commonly passed parameters.
Parameter names on the right side in the assignments in this table must have been
defined in the Whitelist before they will be recognized as valid parameter names
]]
local aliases = {
['AccessDate'] = {'access-date', 'accessdate'}, -- Used by InternetArchiveBot
['Agency'] = 'agency',
['ArchiveDate'] = {'archive-date', 'archivedate'}, -- Used by InternetArchiveBot
['ArchiveFormat'] = 'archive-format',
['ArchiveURL'] = {'archive-url', 'archiveurl'}, -- Used by InternetArchiveBot
['ArticleNumber'] = 'article-number',
['ASINTLD'] = 'asin-tld',
['At'] = 'at', -- Used by InternetArchiveBot
['Authors'] = {'authors', 'people', 'credits'},
['BookTitle'] = {'book-title', 'booktitle'},
['Cartography'] = 'cartography',
['Chapter'] = {'chapter', 'contribution', 'entry', 'article', 'section'},
['ChapterFormat'] = {'chapter-format', 'contribution-format', 'entry-format',
'article-format', 'section-format'};
['ChapterURL'] = {'chapter-url', 'contribution-url', 'entry-url', 'article-url', 'section-url', 'chapterurl'}, -- Used by InternetArchiveBot
['ChapterUrlAccess'] = {'chapter-url-access', 'contribution-url-access',
'entry-url-access', 'article-url-access', 'section-url-access'}, -- Used by InternetArchiveBot
['Class'] = 'class', -- cite arxiv and arxiv identifier
['Collaboration'] = 'collaboration',
['Conference'] = {'conference', 'event'},
['ConferenceFormat'] = 'conference-format',
['ConferenceURL'] = 'conference-url', -- Used by InternetArchiveBot
['Date'] = {'date', 'air-date', 'airdate'}, -- air-date and airdate for cite episode and cite serial only
['Degree'] = 'degree',
['DF'] = 'df',
['DisplayAuthors'] = {'display-authors', 'display-subjects'},
['DisplayContributors'] = 'display-contributors',
['DisplayEditors'] = 'display-editors',
['DisplayInterviewers'] = 'display-interviewers',
['DisplayTranslators'] = 'display-translators',
['Docket'] = 'docket',
['DoiBroken'] = 'doi-broken-date',
['Edition'] = 'edition',
['Embargo'] = 'pmc-embargo-date',
['Encyclopedia'] = {'encyclopedia', 'encyclopaedia', 'dictionary'}, -- cite encyclopedia only
['Episode'] = 'episode', -- cite serial only TODO: make available to cite episode?
['Format'] = 'format',
['ID'] = {'id', 'ID'},
['Inset'] = 'inset',
['Issue'] = {'issue', 'number'},
['Language'] = {'language', 'lang'},
['LayDate'] = 'lay-date',
['LayFormat'] = 'lay-format',
['LaySource'] = 'lay-source',
['LayURL'] = 'lay-url',
['MailingList'] = {'mailing-list', 'mailinglist'}, -- cite mailing list only
['Map'] = 'map', -- cite map only
['MapFormat'] = 'map-format', -- cite map only
['MapURL'] = {'map-url', 'mapurl'}, -- cite map only -- Used by InternetArchiveBot
['MapUrlAccess'] = 'map-url-access', -- cite map only -- Used by InternetArchiveBot
['Minutes'] = 'minutes',
['Mode'] = 'mode',
['NameListStyle'] = 'name-list-style',
['Network'] = 'network',
['Newsgroup'] = 'newsgroup', -- cite newsgroup only
['NoPP'] = {'no-pp', 'nopp'},
['NoTracking'] = {'no-tracking', 'template-doc-demo'},
['Number'] = 'number', -- this case only for cite techreport
['OrigDate'] = {'orig-date', 'orig-year', 'origyear'},
['Others'] = 'others',
['Page'] = {'page', 'p'}, -- Used by InternetArchiveBot
['Pages'] = {'pages', 'pp'}, -- Used by InternetArchiveBot
['Periodical'] = {'journal', 'magazine', 'newspaper', 'periodical', 'website', 'work'},
['Place'] = {'place', 'location'},
['PostScript'] = 'postscript',
['PublicationDate'] = {'publication-date', 'publicationdate'},
['PublicationPlace'] = {'publication-place', 'publicationplace'},
['PublisherName'] = {'publisher', 'institution'},
['Quote'] = {'quote', 'quotation'},
['QuotePage'] = 'quote-page',
['QuotePages'] = 'quote-pages',
['Ref'] = 'ref',
['Scale'] = 'scale',
['ScriptChapter'] = {'script-chapter', 'script-contribution', 'script-entry',
'script-article', 'script-section'},
['ScriptMap'] = 'script-map',
['ScriptPeriodical'] = {'script-journal', 'script-magazine', 'script-newspaper',
'script-periodical', 'script-website', 'script-work'},
['ScriptQuote'] = 'script-quote',
['ScriptTitle'] = 'script-title', -- Used by InternetArchiveBot
['Season'] = 'season',
['Sections'] = 'sections', -- cite map only
['Series'] = {'series', 'version'},
['SeriesLink'] = {'series-link', 'serieslink'},
['SeriesNumber'] = {'series-number', 'series-no'},
['Sheet'] = 'sheet', -- cite map only
['Sheets'] = 'sheets', -- cite map only
['Station'] = 'station',
['Time'] = 'time',
['TimeCaption'] = 'time-caption',
['Title'] = 'title', -- Used by InternetArchiveBot
['TitleLink'] = {'title-link', 'episode-link', 'episodelink'}, -- Used by InternetArchiveBot
['TitleNote'] = 'department',
['TitleType'] = {'type', 'medium'},
['TransChapter'] = {'trans-article', 'trans-chapter', 'trans-contribution',
'trans-entry', 'trans-section'},
['Transcript'] = 'transcript',
['TranscriptFormat'] = 'transcript-format',
['TranscriptURL'] = {'transcript-url', 'transcripturl'}, -- Used by InternetArchiveBot
['TransMap'] = 'trans-map', -- cite map only
['TransPeriodical'] = {'trans-journal', 'trans-magazine', 'trans-newspaper',
'trans-periodical', 'trans-website', 'trans-work'},
['TransQuote'] = 'trans-quote',
['TransTitle'] = 'trans-title', -- Used by InternetArchiveBot
['URL'] = {'url', 'URL'}, -- Used by InternetArchiveBot
['UrlAccess'] = 'url-access', -- Used by InternetArchiveBot
['UrlStatus'] = 'url-status', -- Used by InternetArchiveBot
['Vauthors'] = 'vauthors',
['Veditors'] = 'veditors',
['Via'] = 'via',
['Volume'] = 'volume',
['Year'] = 'year',
['AuthorList-First'] = {"first#", "author-first#", "author#-first", "given#",
"author-given#", "author#-given"},
['AuthorList-Last'] = {"last#", "author-last#", "author#-last", "surname#",
"author-surname#", "author#-surname", "author#", "subject#", 'host#'},
['AuthorList-Link'] = {"author-link#", "author#-link", "subject-link#",
"subject#-link", "authorlink#", "author#link"},
['AuthorList-Mask'] = {"author-mask#", "author#-mask", "subject-mask#", "subject#-mask"},
['ContributorList-First'] = {'contributor-first#', 'contributor#-first',
'contributor-given#', 'contributor#-given'},
['ContributorList-Last'] = {'contributor-last#', 'contributor#-last',
'contributor-surname#', 'contributor#-surname', 'contributor#'},
['ContributorList-Link'] = {'contributor-link#', 'contributor#-link'},
['ContributorList-Mask'] = {'contributor-mask#', 'contributor#-mask'},
['EditorList-First'] = {"editor-first#", "editor#-first", "editor-given#", "editor#-given"},
['EditorList-Last'] = {"editor-last#", "editor#-last", "editor-surname#",
"editor#-surname", "editor#"},
['EditorList-Link'] = {"editor-link#", "editor#-link"},
['EditorList-Mask'] = {"editor-mask#", "editor#-mask"},
['InterviewerList-First'] = {'interviewer-first#', 'interviewer#-first',
'interviewer-given#', 'interviewer#-given'},
['InterviewerList-Last'] = {'interviewer-last#', 'interviewer#-last',
'interviewer-surname#', 'interviewer#-surname', 'interviewer#'},
['InterviewerList-Link'] = {'interviewer-link#', 'interviewer#-link'},
['InterviewerList-Mask'] = {'interviewer-mask#', 'interviewer#-mask'},
['TranslatorList-First'] = {'translator-first#', 'translator#-first',
'translator-given#', 'translator#-given'},
['TranslatorList-Last'] = {'translator-last#', 'translator#-last',
'translator-surname#', 'translator#-surname', 'translator#'},
['TranslatorList-Link'] = {'translator-link#', 'translator#-link'},
['TranslatorList-Mask'] = {'translator-mask#', 'translator#-mask'},
}
--[[--------------------------< P U N C T _ S K I P >---------------------------
builds a table of parameter names that the extraneous terminal punctuation check should not check.
]]
local punct_meta_params = { -- table of aliases[] keys (meta parameters); each key has a table of parameter names for a value
'BookTitle', 'Chapter', 'ScriptChapter', 'ScriptTitle', 'Title', 'TransChapter', 'Transcript', 'TransMap', 'TransTitle', -- title-holding parameters
'AuthorList-Mask', 'ContributorList-Mask', 'EditorList-Mask', 'InterviewerList-Mask', 'TranslatorList-Mask', -- name-list mask may have name separators
'PostScript', 'Quote', 'ScriptQuote', 'TransQuote', 'Ref', -- miscellaneous
'ArchiveURL', 'ChapterURL', 'ConferenceURL', 'LayURL', 'MapURL', 'TranscriptURL', 'URL', -- URL-holding parameters
}
local url_meta_params = { -- table of aliases[] keys (meta parameters); each key has a table of parameter names for a value
'ArchiveURL', 'ChapterURL', 'ConferenceURL', 'ID', 'LayURL', 'MapURL', 'TranscriptURL', 'URL', -- parameters allowed to hold urls
'Page', 'Pages', 'At', 'QuotePage', 'QuotePages', -- insource locators allowed to hold urls
}
local function build_skip_table (skip_t, meta_params)
for _, meta_param in ipairs (meta_params) do -- for each meta parameter key
local params = aliases[meta_param]; -- get the parameter or the table of parameters associated with the meta parameter name
if 'string' == type (params) then
skip_t[params] = 1; -- just a single parameter
else
for _, param in ipairs (params) do -- get the parameter name
skip_t[param] = 1; -- add the parameter name to the skip table
local count;
param, count = param:gsub ('#', ''); -- remove enumerator marker from enumerated parameters
if 0 ~= count then -- if removed
skip_t[param] = 1; -- add param name without enumerator marker
end
end
end
end
return skip_t;
end
local punct_skip = {};
local url_skip = {};
--[[--------------------------< S I N G L E - L E T T E R S E C O N D - L E V E L D O M A I N S >----------
this is a list of tlds that are known to have single-letter second-level domain names. This list does not include
ccTLDs which are accepted in is_domain_name().
]]
local single_letter_2nd_lvl_domains_t = {'cash', 'company', 'foundation', 'org', 'today'};
--[[-----------< S P E C I A L C A S E T R A N S L A T I O N S >------------
This table is primarily here to support internationalization. Translations in
this table are used, for example, when an error message, category name, etc.,
is extracted from the English alias key. There may be other cases where
this translation table may be useful.
]]
local is_Latn = 'A-Za-z\195\128-\195\150\195\152-\195\182\195\184-\198\191\199\132-\201\143';
local special_case_translation = {
['AuthorList'] = 'authors list', -- used to assemble maintenance category names
['ContributorList'] = 'contributors list', -- translation of these names plus translation of the base maintenance category names in maint_cats{} table below
['EditorList'] = 'editors list', -- must match the names of the actual categories
['InterviewerList'] = 'interviewers list', -- this group or translations used by name_has_ed_markup() and name_has_mult_names()
['TranslatorList'] = 'translators list',
-- Lua patterns to match pseudo-titles used by InternetArchiveBot and others as placeholder for unknown |title= value
['archived_copy'] = { -- used with CS1 maint: Archive[d] copy as title
['en'] = '^archived?%s+copy$', -- for English; translators: keep this because templates imported from en.wiki
['local'] = nil, -- translators: replace ['local'] = nil with lowercase translation only when bots or tools create generic titles in your language
},
-- Lua patterns to match generic titles; usually created by bots or reference filling tools
-- translators: replace ['local'] = nil with lowercase translation only when bots or tools create generic titles in your language
-- generic titles and patterns in this table should be lowercase only
-- leave ['local'] nil except when there is a matching generic title in your language
-- boolean 'true' for plain-text searches; 'false' for pattern searches
['generic_titles'] = {
['accept'] = {
},
['reject'] = {
{['en'] = {'^wayback%s+machine$', false}, ['local'] = nil},
{['en'] = {'are you a robot', true}, ['local'] = nil},
{['en'] = {'hugedomains.com', true}, ['local'] = nil},
{['en'] = {'^[%(%[{<]?no +title[>}%]%)]?$', false}, ['local'] = nil},
{['en'] = {'page not found', true}, ['local'] = nil},
{['en'] = {'subscribe to read', true}, ['local'] = nil},
{['en'] = {'^[%(%[{<]?unknown[>}%]%)]?$', false}, ['local'] = nil},
{['en'] = {'website is for sale', true}, ['local'] = nil},
{['en'] = {'^404', false}, ['local'] = nil},
{['en'] = {'internet archive wayback machine', true}, ['local'] = nil},
{['en'] = {'log into facebook', true}, ['local'] = nil},
{['en'] = {'login • instagram', true}, ['local'] = nil},
{['en'] = {'redirecting...', true}, ['local'] = nil},
{['en'] = {'usurped title', true}, ['local'] = nil}, -- added by a GreenC bot
{['en'] = {'webcite query result', true}, ['local'] = nil},
{['en'] = {'wikiwix\'s cache', true}, ['local'] = nil},
}
},
-- boolean 'true' for plain-text searches, search string must be lowercase only
-- boolean 'false' for pattern searches
-- leave ['local'] nil except when there is a matching generic name in your language
['generic_names'] = {
['accept'] = {
{['en'] = {'%[%[[^|]*%(author%) *|[^%]]*%]%]', false}, ['local'] = nil},
},
['reject'] = {
{['en'] = {'about us', true}, ['local'] = nil},
{['en'] = {'%f[%a][Aa]dvisor%f[%A]', false}, ['local'] = nil},
{['en'] = {'allmusic', true}, ['local'] = nil},
{['en'] = {'%f[%a][Aa]uthor%f[%A]', false}, ['local'] = nil},
{['en'] = {'business', true}, ['local'] = nil},
{['en'] = {'cnn', true}, ['local'] = nil},
{['en'] = {'collaborator', true}, ['local'] = nil},
{['en'] = {'contributor', true}, ['local'] = nil},
{['en'] = {'contact us', true}, ['local'] = nil},
{['en'] = {'directory', true}, ['local'] = nil},
{['en'] = {'%f[%(%[][%(%[]%s*eds?%.?%s*[%)%]]?$', false}, ['local'] = nil},
{['en'] = {'[,%.%s]%f[e]eds?%.?$', false}, ['local'] = nil},
{['en'] = {'^eds?[%.,;]', false}, ['local'] = nil},
{['en'] = {'^[%(%[]%s*[Ee][Dd][Ss]?%.?%s*[%)%]]', false}, ['local'] = nil},
{['en'] = {'%f[%a][Ee]dited%f[%A]', false}, ['local'] = nil},
{['en'] = {'%f[%a][Ee]ditors?%f[%A]', false}, ['local'] = nil},
{['en'] = {'%f[%a]]Ee]mail%f[%A]', false}, ['local'] = nil},
{['en'] = {'facebook', true}, ['local'] = nil},
{['en'] = {'google', true}, ['local'] = nil},
{['en'] = {'home page', true}, ['local'] = nil},
{['en'] = {'^[Ii]nc%.?$', false}, ['local'] = nil},
{['en'] = {'instagram', true}, ['local'] = nil},
{['en'] = {'interviewer', true}, ['local'] = nil},
{['en'] = {'linkedIn', true}, ['local'] = nil},
{['en'] = {'^[Nn]ews$', false}, ['local'] = nil},
{['en'] = {'pinterest', true}, ['local'] = nil},
{['en'] = {'policy', true}, ['local'] = nil},
{['en'] = {'privacy', true}, ['local'] = nil},
{['en'] = {'reuters', true}, ['local'] = nil},
{['en'] = {'translator', true}, ['local'] = nil},
{['en'] = {'tumblr', true}, ['local'] = nil},
{['en'] = {'twitter', true}, ['local'] = nil},
{['en'] = {'site name', true}, ['local'] = nil},
{['en'] = {'statement', true}, ['local'] = nil},
{['en'] = {'submitted', true}, ['local'] = nil},
{['en'] = {'super.?user', false}, ['local'] = nil},
{['en'] = {'%f['..is_Latn..'][Uu]ser%f[^'..is_Latn..']', false}, ['local'] = nil},
{['en'] = {'verfasser', true}, ['local'] = nil},
}
}
}
--[[--------------------------< D A T E _ N A M E S >----------------------------------------------------------
This table of tables lists local language date names and fallback English date names.
The code in Date_validation will look first in the local table for valid date names.
If date names are not found in the local table, the code will look in the English table.
Because citations can be copied to the local wiki from en.wiki, the English is
required when the date-name translation function date_name_xlate() is used.
In these tables, season numbering is defined by
Extended Date/Time Format (EDTF) Specification (https://www.loc.gov/standards/datetime/)
which became part of ISO 8601 in 2019. See '§Sub-year groupings'. The standard
defines various divisions using numbers 21-41. CS1|2 only supports generic seasons.
EDTF does support the distinction between north and south hemisphere seasons
but CS1|2 has no way to make that distinction.
33-36 = Quarter 1, Quarter 2, Quarter 3, Quarter 4 (3 months each)
The standard does not address 'named' dates so, for the purposes of CS1|2,
Easter and Christmas are defined here as 98 and 99, which should be out of the
ISO 8601 (EDTF) range of uses for a while.
local_date_names_from_mediawiki is a boolean. When set to:
true – module will fetch local month names from MediaWiki for both date_names['local']['long'] and date_names['local']['short']
false – module will *not* fetch local month names from MediaWiki
Caveat lector: There is no guarantee that MediaWiki will provide short month names. At your wiki you can test
the results of the MediaWiki fetch in the debug console with this command (the result is alpha sorted):
=mw.dumpObject (p.date_names['local'])
While the module can fetch month names from MediaWiki, it cannot fetch the quarter, season, and named date names
from MediaWiki. Those must be translated manually.
]]
local local_date_names_from_mediawiki = true; -- when false, manual translation required for date_names['local']['long'] and date_names['local']['short']
-- when true, module fetches long and short month names from MediaWiki
local date_names = {
['en'] = { -- English
['long'] = {['January'] = 1, ['February'] = 2, ['March'] = 3, ['April'] = 4, ['May'] = 5, ['June'] = 6, ['July'] = 7, ['August'] = 8, ['September'] = 9, ['October'] = 10, ['November'] = 11, ['December'] = 12},
['short'] = {['Jan'] = 1, ['Feb'] = 2, ['Mar'] = 3, ['Apr'] = 4, ['May'] = 5, ['Jun'] = 6, ['Jul'] = 7, ['Aug'] = 8, ['Sep'] = 9, ['Oct'] = 10, ['Nov'] = 11, ['Dec'] = 12},
['quarter'] = {['First Quarter'] = 33, ['Second Quarter'] = 34, ['Third Quarter'] = 35, ['Fourth Quarter'] = 36},
['season'] = {['Winter'] = 24, ['Spring'] = 21, ['Summer'] = 22, ['Fall'] = 23, ['Autumn'] = 23},
['named'] = {['Easter'] = 98, ['Christmas'] = 99},
},
-- when local_date_names_from_mediawiki = false
['local'] = { -- replace these English date names with the local language equivalents
['long'] = {['January'] = 1, ['February'] = 2, ['March'] = 3, ['April'] = 4, ['May'] = 5, ['June'] = 6, ['July'] = 7, ['August'] = 8, ['September'] = 9, ['October'] = 10, ['November'] = 11, ['December'] = 12},
['short'] = {['Jan'] = 1, ['Feb'] = 2, ['Mar'] = 3, ['Apr'] = 4, ['May'] = 5, ['Jun'] = 6, ['Jul'] = 7, ['Aug'] = 8, ['Sep'] = 9, ['Oct'] = 10, ['Nov'] = 11, ['Dec'] = 12},
['quarter'] = {['First Quarter'] = 33, ['Second Quarter'] = 34, ['Third Quarter'] = 35, ['Fourth Quarter'] = 36},
['season'] = {['Winter'] = 24, ['Spring'] = 21, ['Summer'] = 22, ['Fall'] = 23, ['Autumn'] = 23},
['named'] = {['Easter'] = 98, ['Christmas'] = 99},
},
['inv_local_long'] = {}, -- used in date reformatting & translation; copy of date_names['local'].long where k/v are inverted: [1]='<local name>' etc.
['inv_local_short'] = {}, -- used in date reformatting & translation; copy of date_names['local'].short where k/v are inverted: [1]='<local name>' etc.
['inv_local_quarter'] = {}, -- used in date translation; copy of date_names['local'].quarter where k/v are inverted: [1]='<local name>' etc.
['inv_local_season'] = {}, -- used in date translation; copy of date_names['local'].season where k/v are inverted: [1]='<local name>' etc.
['inv_local_named'] = {}, -- used in date translation; copy of date_names['local'].named where k/v are inverted: [1]='<local name>' etc.
['local_digits'] = {['0'] = '0', ['1'] = '1', ['2'] = '2', ['3'] = '3', ['4'] = '4', ['5'] = '5', ['6'] = '6', ['7'] = '7', ['8'] = '8', ['9'] = '9'}, -- used to convert local language digits to Western 0-9
['xlate_digits'] = {},
}
if local_date_names_from_mediawiki then -- if fetching local month names from MediaWiki is enabled
local long_t = {};
local short_t = {};
for i=1, 12 do -- loop 12x and
local name = lang_obj:formatDate('F', '2022-' .. i .. '-1'); -- get long month name for each i
long_t[name] = i; -- save it
name = lang_obj:formatDate('M', '2022-' .. i .. '-1'); -- get short month name for each i
short_t[name] = i; -- save it
end
date_names['local']['long'] = long_t; -- write the long table – overwrites manual translation
date_names['local']['short'] = short_t; -- write the short table – overwrites manual translation
end
-- create inverted date-name tables for reformatting and/or translation
for _, invert_t in pairs {{'long', 'inv_local_long'}, {'short', 'inv_local_short'}, {'quarter', 'inv_local_quarter'}, {'season', 'inv_local_season'}, {'named', 'inv_local_named'}} do
for name, i in pairs (date_names['local'][invert_t[1]]) do -- this table is ['name'] = i
date_names[invert_t[2]][i] = name; -- invert to get [i] = 'name' for conversions from ymd
end
end
for ld, ed in pairs (date_names.local_digits) do -- make a digit translation table for simple date translation from en to local language using local_digits table
date_names.xlate_digits [ed] = ld; -- en digit becomes index with local digit as the value
end
local df_template_patterns = { -- table of redirects to {{Use dmy dates}} and {{Use mdy dates}}
'{{ *[Uu]se +(dmy) +dates *[|}]', -- 1159k -- sorted by approximate transclusion count
'{{ *[Uu]se +(mdy) +dates *[|}]', -- 212k
'{{ *[Uu]se +(MDY) +dates *[|}]', -- 788
'{{ *[Uu]se +(DMY) +dates *[|}]', -- 343
'{{ *([Mm]dy) *[|}]', -- 176
'{{ *[Uu]se *(dmy) *[|}]', -- 156 + 18
'{{ *[Uu]se *(mdy) *[|}]', -- 149 + 11
'{{ *([Dd]my) *[|}]', -- 56
'{{ *[Uu]se +(MDY) *[|}]', -- 5
'{{ *([Dd]MY) *[|}]', -- 3
'{{ *[Uu]se(mdy)dates *[|}]', -- 1
'{{ *[Uu]se +(DMY) *[|}]', -- 0
'{{ *([Mm]DY) *[|}]', -- 0
}
local function get_date_format ()
local title_object = mw.title.getCurrentTitle();
if title_object.namespace == 10 then -- not in template space so that unused templates appear in unused-template-reports;
return nil; -- auto-formatting does not work in Template space so don't set global_df
end
local content = title_object:getContent() or ''; -- get the content of the article or ''; new pages edited w/ve do not have 'content' until saved; ve does not preview; phab:T221625
for _, pattern in ipairs (df_template_patterns) do -- loop through the patterns looking for {{Use dmy dates}} or {{Use mdy dates}} or any of their redirects
local start, _, match = content:find(pattern); -- match is the three letters indicating desired date format
if match then
content = content:match ('%b{}', start); -- get the whole template
if content:match ('| *cs1%-dates *= *[lsy][sy]?') then -- look for |cs1-dates=publication date length access-/archive-date length
return match:lower() .. '-' .. content:match ('| *cs1%-dates *= *([lsy][sy]?)');
else
return match:lower() .. '-all'; -- no |cs1-dates= k/v pair; return value appropriate for use in |df=
end
end
end
end
local global_df;
--[[-----------------< V O L U M E , I S S U E , P A G E S >------------------
These tables hold cite class values (from the template invocation) and identify those templates that support
|volume=, |issue=, and |page(s)= parameters. Cite conference and cite map require further qualification which
is handled in the main module.
]]
local templates_using_volume = {'citation', 'audio-visual', 'book', 'conference', 'encyclopaedia', 'interview', 'journal', 'magazine', 'map', 'news', 'report', 'techreport', 'thesis'}
local templates_using_issue = {'citation', 'conference', 'episode', 'interview', 'journal', 'magazine', 'map', 'news', 'podcast'}
local templates_not_using_page = {'audio-visual', 'episode', 'mailinglist', 'newsgroup', 'podcast', 'serial', 'sign', 'speech'}
--[[
These tables control when it is appropriate for {{citation}} to render |volume= and/or |issue=. The parameter
names in the tables constrain {{citation}} so that its renderings match the renderings of the equivalent cs1
templates. For example, {{cite web}} does not support |volume= so the equivalent {{citation |website=...}} must
not support |volume=.
]]
local citation_no_volume_t = { -- {{citation}} does not render |volume= when these parameters are used
'website', 'mailinglist', 'script-website',
}
local citation_issue_t = { -- {{citation}} may render |issue= when these parameters are used
'journal', 'magazine', 'newspaper', 'periodical', 'work',
'script-journal', 'script-magazine', 'script-newspaper', 'script-periodical', 'script-work',
}
--[[
Patterns for finding extra text in |volume=, |issue=, |page=, |pages=
]]
local vol_iss_pg_patterns = {
good_ppattern = '^P[^%.PpGg]', -- OK to begin with uppercase P: P7 (page 7 of section P), but not p123 (page 123); TODO: this allows 'Pages' which it should not
bad_ppatterns = { -- patterns for |page= and |pages=
'^[Pp][PpGg]?%.?[ %d]',
'^[Pp][Pp]?%. ', -- from {{p.}} and {{pp.}} templates
'^[Pp]ages?',
'^[Pp]gs.?',
},
vpatterns = { -- patterns for |volume=
'^volumes?',
'^vols?[%.:=]?'
},
ipatterns = { -- patterns for |issue=
'^issues?',
'^iss[%.:=]?',
'^numbers?',
'^nos?%A', -- don't match 'november' or 'nostradamus'
'^nr[%.:=]?',
'^n[%.:= ]' -- might be a valid issue without separator (space char is sep char here)
}
}
--[[--------------------------< K E Y W O R D S >-------------------------------
These tables hold keywords for those parameters that have defined sets of acceptable keywords.
]]
--[[-------------------< K E Y W O R D S T A B L E >--------------------------
this is a list of keywords; each key in the list is associated with a table of
synonymous keywords possibly from different languages.
for I18N: add local-language keywords to value table; do not change the key.
For example, adding the German keyword 'ja':
['affirmative'] = {'yes', 'true', 'y', 'ja'},
Because CS1|2 templates from en.wiki articles are often copied to other local wikis,
it is recommended that the English keywords remain in these tables.
]]
local keywords = {
['amp'] = {'&', 'amp', 'ampersand'}, -- |name-list-style=
['and'] = {'and', 'serial'}, -- |name-list-style=
['affirmative'] = {'yes', 'true', 'y'}, -- |no-tracking=, |no-pp= -- Used by InternetArchiveBot
['afterword'] = {'afterword'}, -- |contribution=
['bot: unknown'] = {'bot: unknown'}, -- |url-status= -- Used by InternetArchiveBot
['cs1'] = {'cs1'}, -- |mode=
['cs2'] = {'cs2'}, -- |mode=
['dead'] = {'dead', 'deviated'}, -- |url-status= -- Used by InternetArchiveBot
['dmy'] = {'dmy'}, -- |df=
['dmy-all'] = {'dmy-all'}, -- |df=
['foreword'] = {'foreword'}, -- |contribution=
['free'] = {'free'}, -- |<id>-access= -- Used by InternetArchiveBot
['harv'] = {'harv'}, -- |ref=; this no longer supported; is_valid_parameter_value() called with <invert> = true
['introduction'] = {'introduction'}, -- |contribution=
['limited'] = {'limited'}, -- |url-access= -- Used by InternetArchiveBot
['live'] = {'live'}, -- |url-status= -- Used by InternetArchiveBot
['mdy'] = {'mdy'}, -- |df=
['mdy-all'] = {'mdy-all'}, -- |df=
['none'] = {'none'}, -- |postscript=, |ref=, |title=, |type= -- Used by InternetArchiveBot
['off'] = {'off'}, -- |title= (potentially also: |title-link=, |postscript=, |ref=, |type=)
['preface'] = {'preface'}, -- |contribution=
['registration'] = {'registration'}, -- |url-access= -- Used by InternetArchiveBot
['subscription'] = {'subscription'}, -- |url-access= -- Used by InternetArchiveBot
['unfit'] = {'unfit'}, -- |url-status= -- Used by InternetArchiveBot
['usurped'] = {'usurped'}, -- |url-status= -- Used by InternetArchiveBot
['vanc'] = {'vanc'}, -- |name-list-style=
['ymd'] = {'ymd'}, -- |df=
['ymd-all'] = {'ymd-all'}, -- |df=
-- ['yMd'] = {'yMd'}, -- |df=; not supported at en.wiki
-- ['yMd-all'] = {'yMd-all'}, -- |df=; not supported at en.wiki
}
--[[------------------------< X L A T E _ K E Y W O R D S >---------------------
this function builds a list, keywords_xlate{}, of the keywords found in keywords{} where the values from keywords{}
become the keys in keywords_xlate{} and the keys from keywords{} become the values in keywords_xlate{}:
['affirmative'] = {'yes', 'true', 'y'}, -- in keywords{}
becomes
['yes'] = 'affirmative', -- in keywords_xlate{}
['true'] = 'affirmative',
['y'] = 'affirmative',
the purpose of this function is to act as a translator between a non-English keyword and its English equivalent
that may be used in other modules of this suite
]]
local function xlate_keywords ()
local out_table = {}; -- output goes here
for k, keywords_t in pairs (keywords) do -- spin through the keywords table
for _, keyword in ipairs (keywords_t) do -- for each keyword
out_table[keyword] = k; -- create an entry in the output table where keyword is the key
end
end
return out_table;
end
local keywords_xlate = xlate_keywords (); -- the list of translated keywords
--[[----------------< M A K E _ K E Y W O R D S _ L I S T >---------------------
this function assembles, for parameter-value validation, the list of keywords appropriate to that parameter.
keywords_lists{}, is a table of tables from keywords{}
]]
local function make_keywords_list (keywords_lists)
local out_table = {}; -- output goes here
for _, keyword_list in ipairs (keywords_lists) do -- spin through keywords_lists{} and get a table of keywords
for _, keyword in ipairs (keyword_list) do -- spin through keyword_list{} and add each keyword, ...
table.insert (out_table, keyword); -- ... as plain text, to the output list
end
end
return out_table;
end
--[[----------------< K E Y W O R D S _ L I S T S >-----------------------------
this is a list of lists of valid keywords for the various parameters in [key].
Generally the keys in this table are the canonical en.wiki parameter names though
some are contrived because of use in multiple differently named parameters:
['yes_true_y'], ['id-access'].
The function make_keywords_list() extracts the individual keywords from the
appropriate list in keywords{}.
The lists in this table are used to validate the keyword assignment for the
parameters named in this table's keys.
]]
local keywords_lists = {
['yes_true_y'] = make_keywords_list ({keywords.affirmative}),
['contribution'] = make_keywords_list ({keywords.afterword, keywords.foreword, keywords.introduction, keywords.preface}),
['df'] = make_keywords_list ({keywords.dmy, keywords['dmy-all'], keywords.mdy, keywords['mdy-all'], keywords.ymd, keywords['ymd-all']}),
-- ['df'] = make_keywords_list ({keywords.dmy, keywords['dmy-all'], keywords.mdy, keywords['mdy-all'], keywords.ymd, keywords['ymd-all'], keywords.yMd, keywords['yMd-all']}), -- not supported at en.wiki
['mode'] = make_keywords_list ({keywords.cs1, keywords.cs2}),
['name-list-style'] = make_keywords_list ({keywords.amp, keywords['and'], keywords.vanc}),
['ref'] = make_keywords_list ({keywords.harv}), -- inverted check; |ref=harv no longer supported
['url-access'] = make_keywords_list ({keywords.subscription, keywords.limited, keywords.registration}),
['url-status'] = make_keywords_list ({keywords.dead, keywords.live, keywords.unfit, keywords.usurped, keywords['bot: unknown']}),
['id-access'] = make_keywords_list ({keywords.free}),
}
--[[---------------------< S T R I P M A R K E R S >----------------------------
Common pattern definition location for stripmarkers so that we don't have to go
hunting for them if (when) MediaWiki changes their form.
]]
local stripmarkers = {
['any'] = '\127[^\127]*UNIQ%-%-(%a+)%-[%a%d]+%-QINU[^\127]*\127', -- capture returns name of stripmarker
['math'] = '\127[^\127]*UNIQ%-%-math%-[%a%d]+%-QINU[^\127]*\127' -- math stripmarkers used in coins_cleanup() and coins_replace_math_stripmarker()
}
--[[------------< I N V I S I B L E _ C H A R A C T E R S >---------------------
This table holds non-printing or invisible characters indexed either by name or
by Unicode group. Values are decimal representations of UTF-8 codes. The table
is organized as a table of tables because the Lua pairs keyword returns table
data in an arbitrary order. Here, we want to process the table from top to bottom
because the entries at the top of the table are also found in the ranges specified
by the entries at the bottom of the table.
Also here is a pattern that recognizes stripmarkers that begin and end with the
delete characters. The nowiki stripmarker is not an error but some others are
because the parameter values that include them become part of the template's
metadata before stripmarker replacement.
]]
local invisible_defs = {
del = '\127', -- used to distinguish between stripmarker and del char
zwj = '\226\128\141', -- used with capture because zwj may be allowed
}
local invisible_chars = {
{'replacement', '\239\191\189'}, -- U+FFFD, EF BF BD
{'zero width joiner', '('.. invisible_defs.zwj .. ')'}, -- U+200D, E2 80 8D; capture because zwj may be allowed
{'zero width space', '\226\128\139'}, -- U+200B, E2 80 8B
{'hair space', '\226\128\138'}, -- U+200A, E2 80 8A
{'soft hyphen', '\194\173'}, -- U+00AD, C2 AD
{'horizontal tab', '\009'}, -- U+0009 (HT), 09
{'line feed', '\010'}, -- U+000A (LF), 0A
{'no-break space', '\194\160'}, -- U+00A0 (NBSP), C2 A0
{'carriage return', '\013'}, -- U+000D (CR), 0D
{'stripmarker', stripmarkers.any}, -- stripmarker; may or may not be an error; capture returns the stripmaker type
{'delete', '('.. invisible_defs.del .. ')'}, -- U+007F (DEL), 7F; must be done after stripmarker test; capture to distinguish isolated del chars not part of stripmarker
{'C0 control', '[\000-\008\011\012\014-\031]'}, -- U+0000–U+001F (NULL–US), 00–1F (except HT, LF, CR (09, 0A, 0D))
{'C1 control', '[\194\128-\194\159]'}, -- U+0080–U+009F (XXX–APC), C2 80 – C2 9F
-- {'Specials', '[\239\191\185-\239\191\191]'}, -- U+FFF9-U+FFFF, EF BF B9 – EF BF BF
-- {'Private use area', '[\238\128\128-\239\163\191]'}, -- U+E000–U+F8FF, EE 80 80 – EF A3 BF
-- {'Supplementary Private Use Area-A', '[\243\176\128\128-\243\191\191\189]'}, -- U+F0000–U+FFFFD, F3 B0 80 80 – F3 BF BF BD
-- {'Supplementary Private Use Area-B', '[\244\128\128\128-\244\143\191\189]'}, -- U+100000–U+10FFFD, F4 80 80 80 – F4 8F BF BD
}
--[[
Indic script makes use of zero width joiner as a character modifier so zwj
characters must be left in. This pattern covers all of the unicode characters
for these languages:
Devanagari 0900–097F – https://unicode.org/charts/PDF/U0900.pdf
Devanagari extended A8E0–A8FF – https://unicode.org/charts/PDF/UA8E0.pdf
Bengali 0980–09FF – https://unicode.org/charts/PDF/U0980.pdf
Gurmukhi 0A00–0A7F – https://unicode.org/charts/PDF/U0A00.pdf
Gujarati 0A80–0AFF – https://unicode.org/charts/PDF/U0A80.pdf
Oriya 0B00–0B7F – https://unicode.org/charts/PDF/U0B00.pdf
Tamil 0B80–0BFF – https://unicode.org/charts/PDF/U0B80.pdf
Telugu 0C00–0C7F – https://unicode.org/charts/PDF/U0C00.pdf
Kannada 0C80–0CFF – https://unicode.org/charts/PDF/U0C80.pdf
Malayalam 0D00–0D7F – https://unicode.org/charts/PDF/U0D00.pdf
plus the not-necessarily Indic scripts for Sinhala and Burmese:
Sinhala 0D80-0DFF - https://unicode.org/charts/PDF/U0D80.pdf
Myanmar 1000-109F - https://unicode.org/charts/PDF/U1000.pdf
Myanmar extended A AA60-AA7F - https://unicode.org/charts/PDF/UAA60.pdf
Myanmar extended B A9E0-A9FF - https://unicode.org/charts/PDF/UA9E0.pdf
the pattern is used by has_invisible_chars() and coins_cleanup()
]]
local indic_script = '[\224\164\128-\224\181\191\224\163\160-\224\183\191\225\128\128-\225\130\159\234\167\160-\234\167\191\234\169\160-\234\169\191]';
-- list of emoji that use a zwj character (U+200D) to combine with another emoji
-- from: https://unicode.org/Public/emoji/15.0/emoji-zwj-sequences.txt; version: 15.0; 2022-05-06
-- table created by: [[:en:Module:Make emoji zwj table]]
local emoji_t = { -- indexes are decimal forms of the hex values in U+xxxx
[9760] = true, -- U+2620 ☠ skull and crossbones
[9792] = true, -- U+2640 ♀ female sign
[9794] = true, -- U+2642 ♂ male sign
[9877] = true, -- U+2695 ⚕ staff of aesculapius
[9878] = true, -- U+2696 ⚖ scales
[9895] = true, -- U+26A7 ⚧ male with stroke and male and female sign
[9992] = true, -- U+2708 ✈ airplane
[10052] = true, -- U+2744 ❄ snowflake
[10084] = true, -- U+2764 ❤ heavy black heart
[11035] = true, -- U+2B1B ⬛ black large square
[127752] = true, -- U+1F308 🌈 rainbow
[127787] = true, -- U+1F32B 🌫 fog
[127806] = true, -- U+1F33E 🌾 ear of rice
[127859] = true, -- U+1F373 🍳 cooking
[127868] = true, -- U+1F37C 🍼 baby bottle
[127876] = true, -- U+1F384 🎄 christmas tree
[127891] = true, -- U+1F393 🎓 graduation cap
[127908] = true, -- U+1F3A4 🎤 microphone
[127912] = true, -- U+1F3A8 🎨 artist palette
[127979] = true, -- U+1F3EB 🏫 school
[127981] = true, -- U+1F3ED 🏭 factory
[128102] = true, -- U+1F466 👦 boy
[128103] = true, -- U+1F467 👧 girl
[128104] = true, -- U+1F468 👨 man
[128105] = true, -- U+1F469 👩 woman
[128139] = true, -- U+1F48B 💋 kiss mark
[128168] = true, -- U+1F4A8 💨 dash symbol
[128171] = true, -- U+1F4AB 💫 dizzy symbol
[128187] = true, -- U+1F4BB 💻 personal computer
[128188] = true, -- U+1F4BC 💼 brief case
[128293] = true, -- U+1F525 🔥 fire
[128295] = true, -- U+1F527 🔧 wrench
[128300] = true, -- U+1F52C 🔬 microscope
[128488] = true, -- U+1F5E8 🗨 left speech bubble
[128640] = true, -- U+1F680 🚀 rocket
[128658] = true, -- U+1F692 🚒 fire engine
[129309] = true, -- U+1F91D 🤝 handshake
[129455] = true, -- U+1F9AF 🦯 probing cane
[129456] = true, -- U+1F9B0 🦰 emoji component red hair
[129457] = true, -- U+1F9B1 🦱 emoji component curly hair
[129458] = true, -- U+1F9B2 🦲 emoji component bald
[129459] = true, -- U+1F9B3 🦳 emoji component white hair
[129466] = true, -- U+1F9BA 🦺 safety vest
[129468] = true, -- U+1F9BC 🦼 motorized wheelchair
[129469] = true, -- U+1F9BD 🦽 manual wheelchair
[129489] = true, -- U+1F9D1 🧑 adult
[129657] = true, -- U+1FA79 🩹 adhesive bandage
[129778] = true, -- U+1FAF2 🫲 leftwards hand
}
--[[----------------------< L A N G U A G E S U P P O R T >-------------------
These tables and constants support various language-specific functionality.
]]
--local this_wiki_code = mw.getContentLanguage():getCode(); -- get this wiki's language code
local this_wiki_code = lang_obj:getCode(); -- get this wiki's language code
if string.match (mw.site.server, 'wikidata') then
this_wiki_code = mw.getCurrentFrame():preprocess('{{int:lang}}'); -- on Wikidata so use interface language setting instead
end
local mw_languages_by_tag_t = mw.language.fetchLanguageNames (this_wiki_code, 'all'); -- get a table of language tag/name pairs known to Wikimedia; used for interwiki tests
local mw_languages_by_name_t = {};
for k, v in pairs (mw_languages_by_tag_t) do -- build a 'reversed' table name/tag language pairs know to MediaWiki; used for |language=
v = mw.ustring.lower (v); -- lowercase for tag fetch; get name's proper case from mw_languages_by_tag_t[<tag>]
if mw_languages_by_name_t[v] then -- when name already in the table
if 2 == #k or 3 == #k then -- if tag does not have subtags
mw_languages_by_name_t[v] = k; -- prefer the shortest tag for this name
end
else -- here when name not in the table
mw_languages_by_name_t[v] = k; -- so add name and matching tag
end
end
local inter_wiki_map = {}; -- map of interwiki prefixes that are language-code prefixes
for k, v in pairs (mw.site.interwikiMap ('local')) do -- spin through the base interwiki map (limited to local)
if mw_languages_by_tag_t[v["prefix"]] then -- if the prefix matches a known language tag
inter_wiki_map[v["prefix"]] = true; -- add it to our local map
end
end
--[[--------------------< S C R I P T _ L A N G _ C O D E S >-------------------
This table is used to hold ISO 639-1 two-character and ISO 639-3 three-character
language codes that apply only to |script-title= and |script-chapter=
]]
local script_lang_codes = {
'ab', 'am', 'ar', 'be', 'bg', 'bn', 'bo', 'bs', 'dv', 'dz', 'el', 'fa', 'gu',
'he', 'hi', 'hy', 'ja', 'ka', 'kk', 'km', 'kn', 'ko', 'ku', 'ky', 'lo', 'mk',
'ml', 'mn', 'mr', 'my', 'ne', 'or', 'ota', 'pa', 'ps', 'ru', 'sd', 'si', 'sr',
'syc', 'ta', 'te', 'tg', 'th', 'ti', 'tt', 'ug', 'uk', 'ur', 'uz', 'yi', 'yue', 'zh'
};
--[[---------------< L A N G U A G E R E M A P P I N G >----------------------
These tables hold language information that is different (correct) from MediaWiki's definitions
For each ['code'] = 'language name' in lang_code_remap{} there must be a matching ['language name'] = {'language name', 'code'} in lang_name_remap{}
lang_code_remap{}:
key is always lowercase ISO 639-1, -2, -3 language code or a valid lowercase IETF language tag
value is properly spelled and capitalized language name associated with key
only one language name per key;
key/value pair must have matching entry in lang_name_remap{}
lang_name_remap{}:
key is always lowercase language name
value is a table the holds correctly spelled and capitalized language name [1] and associated code [2] (code must match a code key in lang_code_remap{})
may have multiple keys referring to a common preferred name and code; For example:
['kolsch'] and ['kölsch'] both refer to 'Kölsch' and 'ksh'
]]
local lang_code_remap = { -- used for |language= and |script-title= / |script-chapter=
['als'] = 'Tosk Albanian', -- MediaWiki returns Alemannisch
['bh'] = 'Bihari', -- MediaWiki uses 'bh' as a subdomain name for Bhojpuri Wikipedia: bh.wikipedia.org
['bla'] = 'Blackfoot', -- MediaWiki/IANA/ISO 639: Siksika; use en.wiki preferred name
['bn'] = 'Bengali', -- MediaWiki returns Bangla
['ca-valencia'] = 'Valencian', -- IETF variant of Catalan
['ilo'] = 'Ilocano', -- MediaWiki/IANA/ISO 639: Iloko; use en.wiki preferred name
['ksh'] = 'Kölsch', -- MediaWiki: Colognian; use IANA/ISO 639 preferred name
['ksh-x-colog'] = 'Colognian', -- override MediaWiki ksh; no IANA/ISO 639 code for Colognian; IETF private code created at Module:Lang/data
['mis-x-ripuar'] = 'Ripuarian', -- override MediaWiki ksh; no IANA/ISO 639 code for Ripuarian; IETF private code created at Module:Lang/data
['nan-tw'] = 'Taiwanese Hokkien', -- make room for MediaWiki/IANA/ISO 639 nan: Min Nan Chinese and support en.wiki preferred name
}
local lang_name_remap = { -- used for |language=; names require proper capitalization; tags must be lowercase
['alemannisch'] = {'Swiss German', 'gsw'}, -- not an ISO or IANA language name; MediaWiki uses 'als' as a subdomain name for Alemannic Wikipedia: als.wikipedia.org
['bangla'] = {'Bengali', 'bn'}, -- MediaWiki returns Bangla (the endonym) but we want Bengali (the exonym); here we remap
['bengali'] = {'Bengali', 'bn'}, -- MediaWiki doesn't use exonym so here we provide correct language name and 639-1 code
['bhojpuri'] = {'Bhojpuri', 'bho'}, -- MediaWiki uses 'bh' as a subdomain name for Bhojpuri Wikipedia: bh.wikipedia.org
['bihari'] = {'Bihari', 'bh'}, -- MediaWiki replaces 'Bihari' with 'Bhojpuri' so 'Bihari' cannot be found
['blackfoot'] = {'Blackfoot', 'bla'}, -- MediaWiki/IANA/ISO 639: Siksika; use en.wiki preferred name
['colognian'] = {'Colognian', 'ksh-x-colog'}, -- MediaWiki preferred name for ksh
['ilocano'] = {'Ilocano', 'ilo'}, -- MediaWiki/IANA/ISO 639: Iloko; use en.wiki preferred name
['kolsch'] = {'Kölsch', 'ksh'}, -- use IANA/ISO 639 preferred name (use non-diacritical o instead of umlaut ö)
['kölsch'] = {'Kölsch', 'ksh'}, -- use IANA/ISO 639 preferred name
['ripuarian'] = {'Ripuarian', 'mis-x-ripuar'}, -- group of dialects; no code in MediaWiki or in IANA/ISO 639
['taiwanese hokkien'] = {'Taiwanese Hokkien', 'nan-tw'}, -- make room for MediaWiki/IANA/ISO 639 nan: Min Nan Chinese
['tosk albanian'] = {'Tosk Albanian', 'als'}, -- MediaWiki replaces 'Tosk Albanian' with 'Alemannisch' so 'Tosk Albanian' cannot be found
['valencian'] = {'Valencian', 'ca-valencia'}, -- variant of Catalan; categorizes as Valencian
}
--[[---------------< P R O P E R T I E S _ C A T E G O R I E S >----------------
Properties categories. These are used for investigating qualities of citations.
]]
local prop_cats = {
['foreign-lang-source'] = 'CS1 $1-language sources ($2)', -- |language= categories; $1 is foreign-language name, $2 is ISO639-1 code
['foreign-lang-source-2'] = 'CS1 foreign language sources (ISO 639-2)|$1', -- |language= category; a cat for ISO639-2 languages; $1 is the ISO 639-2 code used as a sort key
['jul-greg-uncertainty'] = 'CS1: Julian–Gregorian uncertainty', -- probably temporary cat to identify scope of template with dates 1 October 1582 – 1 January 1926
['local-lang-source'] = 'CS1 $1-language sources ($2)', -- |language= categories; $1 is local-language name, $2 is ISO639-1 code; not emitted when local_lang_cat_enable is false
['location-test'] = 'CS1 location test',
['long-vol'] = 'CS1: long volume value', -- probably temporary cat to identify scope of |volume= values longer than 4 characters
['script'] = 'CS1 uses $1-language script ($2)', -- |script-title=xx: has matching category; $1 is language name, $2 is ISO639-1 code
['tracked-param'] = 'CS1 tracked parameter: $1', -- $1 is base (enumerators removed) parameter name
['year-range-abbreviated'] = 'CS1: abbreviated year range', -- probably temporary cat to identify scope of |date=, |year= values using YYYY–YY form
}
--[[-------------------< T I T L E _ T Y P E S >--------------------------------
Here we map a template's CitationClass to TitleType (default values for |type= parameter)
]]
local title_types = {
['AV-media-notes'] = 'Media notes',
['interview'] = 'Interview',
['mailinglist'] = 'Mailing list',
['map'] = 'Map',
['podcast'] = 'Podcast',
['pressrelease'] = 'Press release',
['report'] = 'Report',
['speech'] = 'Speech',
['techreport'] = 'Technical report',
['thesis'] = 'Thesis',
}
--[[===================<< E R R O R M E S S A G I N G >>======================
]]
--[[----------< E R R O R M E S S A G E S U P P L I M E N T S >-------------
I18N for those messages that are supplemented with additional specific text that
describes the reason for the error
TODO: merge this with special_case_translations{}?
]]
local err_msg_supl = {
['char'] = 'invalid character', -- |isbn=, |sbn=
['check'] = 'checksum', -- |isbn=, |sbn=
['flag'] = 'flag', -- |archive-url=
['form'] = 'invalid form', -- |isbn=, |sbn=
['group'] = 'invalid group id', -- |isbn=
['initials'] = 'initials', -- Vancouver
['invalid language code'] = 'invalid language code', -- |script-<param>=
['journal'] = 'journal', -- |bibcode=
['length'] = 'length', -- |isbn=, |bibcode=, |sbn=
['liveweb'] = 'liveweb', -- |archive-url=
['missing comma'] = 'missing comma', -- Vancouver
['missing prefix'] = 'missing prefix', -- |script-<param>=
['missing title part'] = 'missing title part', -- |script-<param>=
['name'] = 'name', -- Vancouver
['non-Latin char'] = 'non-Latin character', -- Vancouver
['path'] = 'path', -- |archive-url=
['prefix'] = 'invalid prefix', -- |isbn=
['punctuation'] = 'punctuation', -- Vancouver
['save'] = 'save command', -- |archive-url=
['suffix'] = 'suffix', -- Vancouver
['timestamp'] = 'timestamp', -- |archive-url=
['unknown language code'] = 'unknown language code', -- |script-<param>=
['value'] = 'value', -- |bibcode=
['year'] = 'year', -- |bibcode=
}
--[[--------------< E R R O R _ C O N D I T I O N S >---------------------------
Error condition table. This table has two sections: errors at the top, maintenance
at the bottom. Maint 'messaging' does not have a 'message' (message=nil)
The following contains a list of IDs for various error conditions defined in the
code. For each ID, we specify a text message to display, an error category to
include, and whether the error message should be wrapped as a hidden comment.
Anchor changes require identical changes to matching anchor in Help:CS1 errors
TODO: rename error_conditions{} to something more generic; create separate error
and maint tables inside that?
]]
local error_conditions = {
err_accessdate_missing_url = {
message = '<code class="cs1-code">|access-date=</code> requires <code class="cs1-code">|url=</code>',
anchor = 'accessdate_missing_url',
category = 'CS1 errors: access-date without URL',
hidden = false
},
err_apostrophe_markup = {
message = 'Italic or bold markup not allowed in: <code class="cs1-code">|$1=</code>', -- $1 is parameter name
anchor = 'apostrophe_markup',
category = 'CS1 errors: markup',
hidden = false
},
err_archive_missing_date = {
message = '<code class="cs1-code">|archive-url=</code> requires <code class="cs1-code">|archive-date=</code>',
anchor = 'archive_missing_date',
category = 'CS1 errors: archive-url',
hidden = false
},
err_archive_missing_url = {
message = '<code class="cs1-code">|archive-url=</code> requires <code class="cs1-code">|url=</code>',
anchor = 'archive_missing_url',
category = 'CS1 errors: archive-url',
hidden = false
},
err_archive_url = {
message = '<code class="cs1-code">|archive-url=</code> is malformed: $1', -- $1 is error message detail
anchor = 'archive_url',
category = 'CS1 errors: archive-url',
hidden = false
},
err_arxiv_missing = {
message = '<code class="cs1-code">|arxiv=</code> required',
anchor = 'arxiv_missing',
category = 'CS1 errors: arXiv', -- same as bad arxiv
hidden = false
},
err_asintld_missing_asin = {
message = '<code class="cs1-code">|$1=</code> requires <code class="cs1-code">|asin=</code>', -- $1 is parameter name
anchor = 'asintld_missing_asin',
category = 'CS1 errors: ASIN TLD',
hidden = false
},
err_bad_arxiv = {
message = 'Check <code class="cs1-code">|arxiv=</code> value',
anchor = 'bad_arxiv',
category = 'CS1 errors: arXiv',
hidden = false
},
err_bad_asin = {
message = 'Check <code class="cs1-code">|asin=</code> value',
anchor = 'bad_asin',
category ='CS1 errors: ASIN',
hidden = false
},
err_bad_asin_tld = {
message = 'Check <code class="cs1-code">|asin-tld=</code> value',
anchor = 'bad_asin_tld',
category ='CS1 errors: ASIN TLD',
hidden = false
},
err_bad_bibcode = {
message = 'Check <code class="cs1-code">|bibcode=</code> $1', -- $1 is error message detail
anchor = 'bad_bibcode',
category = 'CS1 errors: bibcode',
hidden = false
},
err_bad_biorxiv = {
message = 'Check <code class="cs1-code">|biorxiv=</code> value',
anchor = 'bad_biorxiv',
category = 'CS1 errors: bioRxiv',
hidden = false
},
err_bad_citeseerx = {
message = 'Check <code class="cs1-code">|citeseerx=</code> value',
anchor = 'bad_citeseerx',
category = 'CS1 errors: citeseerx',
hidden = false
},
err_bad_date = {
message = 'Check date values in: $1', -- $1 is a parameter name list
anchor = 'bad_date',
category = 'CS1 errors: dates',
hidden = false
},
err_bad_doi = {
message = 'Check <code class="cs1-code">|doi=</code> value',
anchor = 'bad_doi',
category = 'CS1 errors: DOI',
hidden = false
},
err_bad_hdl = {
message = 'Check <code class="cs1-code">|hdl=</code> value',
anchor = 'bad_hdl',
category = 'CS1 errors: HDL',
hidden = false
},
err_bad_isbn = {
message = 'Check <code class="cs1-code">|isbn=</code> value: $1', -- $1 is error message detail
anchor = 'bad_isbn',
category = 'CS1 errors: ISBN',
hidden = false
},
err_bad_ismn = {
message = 'Check <code class="cs1-code">|ismn=</code> value',
anchor = 'bad_ismn',
category = 'CS1 errors: ISMN',
hidden = false
},
err_bad_issn = {
message = 'Check <code class="cs1-code">|$1issn=</code> value', -- $1 is 'e' or '' for eissn or issn
anchor = 'bad_issn',
category = 'CS1 errors: ISSN',
hidden = false
},
err_bad_jfm = {
message = 'Check <code class="cs1-code">|jfm=</code> value',
anchor = 'bad_jfm',
category = 'CS1 errors: JFM',
hidden = false
},
err_bad_jstor = {
message = 'Check <code class="cs1-code">|jstor=</code> value',
anchor = 'bad_jstor',
category = 'CS1 errors: JSTOR',
hidden = false
},
err_bad_lccn = {
message = 'Check <code class="cs1-code">|lccn=</code> value',
anchor = 'bad_lccn',
category = 'CS1 errors: LCCN',
hidden = false
},
err_bad_mr = {
message = 'Check <code class="cs1-code">|mr=</code> value',
anchor = 'bad_mr',
category = 'CS1 errors: MR',
hidden = false
},
err_bad_oclc = {
message = 'Check <code class="cs1-code">|oclc=</code> value',
anchor = 'bad_oclc',
category = 'CS1 errors: OCLC',
hidden = false
},
err_bad_ol = {
message = 'Check <code class="cs1-code">|ol=</code> value',
anchor = 'bad_ol',
category = 'CS1 errors: OL',
hidden = false
},
err_bad_osti = {
message = 'Check <code class="cs1-code">|osti=</code> value',
anchor = 'bad_osti',
category = 'CS1 errors: OSTI',
hidden = false
},
err_bad_paramlink = { -- for |title-link=, |author/editor/translator-link=, |series-link=, |episode-link=
message = 'Check <code class="cs1-code">|$1=</code> value', -- $1 is parameter name
anchor = 'bad_paramlink',
category = 'CS1 errors: parameter link',
hidden = false
},
err_bad_pmc = {
message = 'Check <code class="cs1-code">|pmc=</code> value',
anchor = 'bad_pmc',
category = 'CS1 errors: PMC',
hidden = false
},
err_bad_pmid = {
message = 'Check <code class="cs1-code">|pmid=</code> value',
anchor = 'bad_pmid',
category = 'CS1 errors: PMID',
hidden = false
},
err_bad_rfc = {
message = 'Check <code class="cs1-code">|rfc=</code> value',
anchor = 'bad_rfc',
category = 'CS1 errors: RFC',
hidden = false
},
err_bad_s2cid = {
message = 'Check <code class="cs1-code">|s2cid=</code> value',
anchor = 'bad_s2cid',
category = 'CS1 errors: S2CID',
hidden = false
},
err_bad_sbn = {
message = 'Check <code class="cs1-code">|sbn=</code> value: $1', -- $1 is error message detail
anchor = 'bad_sbn',
category = 'CS1 errors: SBN',
hidden = false
},
err_bad_ssrn = {
message = 'Check <code class="cs1-code">|ssrn=</code> value',
anchor = 'bad_ssrn',
category = 'CS1 errors: SSRN',
hidden = false
},
err_bad_url = {
message = 'Check $1 value', -- $1 is parameter name
anchor = 'bad_url',
category = 'CS1 errors: URL',
hidden = false
},
err_bad_usenet_id = {
message = 'Check <code class="cs1-code">|message-id=</code> value',
anchor = 'bad_message_id',
category = 'CS1 errors: message-id',
hidden = false
},
err_bad_zbl = {
message = 'Check <code class="cs1-code">|zbl=</code> value',
anchor = 'bad_zbl',
category = 'CS1 errors: Zbl',
hidden = false
},
err_bare_url_missing_title = {
message = '$1 missing title', -- $1 is parameter name
anchor = 'bare_url_missing_title',
category = 'CS1 errors: bare URL',
hidden = false
},
err_biorxiv_missing = {
message = '<code class="cs1-code">|biorxiv=</code> required',
anchor = 'biorxiv_missing',
category = 'CS1 errors: bioRxiv', -- same as bad bioRxiv
hidden = false
},
err_chapter_ignored = {
message = '<code class="cs1-code">|$1=</code> ignored', -- $1 is parameter name
anchor = 'chapter_ignored',
category = 'CS1 errors: chapter ignored',
hidden = false
},
err_citation_missing_title = {
message = 'Missing or empty <code class="cs1-code">|$1=</code>', -- $1 is parameter name
anchor = 'citation_missing_title',
category = 'CS1 errors: missing title',
hidden = false
},
err_citeseerx_missing = {
message = '<code class="cs1-code">|citeseerx=</code> required',
anchor = 'citeseerx_missing',
category = 'CS1 errors: citeseerx', -- same as bad citeseerx
hidden = false
},
err_cite_web_url = { -- this error applies to cite web and to cite podcast
message = 'Missing or empty <code class="cs1-code">|url=</code>',
anchor = 'cite_web_url',
category = 'CS1 errors: requires URL',
hidden = false
},
err_class_ignored = {
message = '<code class="cs1-code">|class=</code> ignored',
anchor = 'class_ignored',
category = 'CS1 errors: class',
hidden = false
},
err_contributor_ignored = {
message = '<code class="cs1-code">|contributor=</code> ignored',
anchor = 'contributor_ignored',
category = 'CS1 errors: contributor',
hidden = false
},
err_contributor_missing_required_param = {
message = '<code class="cs1-code">|contributor=</code> requires <code class="cs1-code">|$1=</code>', -- $1 is parameter name
anchor = 'contributor_missing_required_param',
category = 'CS1 errors: contributor',
hidden = false
},
err_deprecated_params = {
message = 'Cite uses deprecated parameter <code class="cs1-code">|$1=</code>', -- $1 is parameter name
anchor = 'deprecated_params',
category = 'CS1 errors: deprecated parameters',
hidden = false
},
err_disp_name = {
message = 'Invalid <code class="cs1-code">|$1=$2</code>', -- $1 is parameter name; $2 is the assigned value
anchor = 'disp_name',
category = 'CS1 errors: display-names',
hidden = false,
},
err_doibroken_missing_doi = {
message = '<code class="cs1-code">|$1=</code> requires <code class="cs1-code">|doi=</code>', -- $1 is parameter name
anchor = 'doibroken_missing_doi',
category = 'CS1 errors: DOI',
hidden = false
},
err_embargo_missing_pmc = {
message = '<code class="cs1-code">|$1=</code> requires <code class="cs1-code">|pmc=</code>', -- $1 is parameter name
anchor = 'embargo_missing_pmc',
category = 'CS1 errors: PMC embargo',
hidden = false
},
err_empty_citation = {
message = 'Empty citation',
anchor = 'empty_citation',
category = 'CS1 errors: empty citation',
hidden = false
},
err_etal = {
message = 'Explicit use of et al. in: <code class="cs1-code">|$1=</code>', -- $1 is parameter name
anchor = 'explicit_et_al',
category = 'CS1 errors: explicit use of et al.',
hidden = false
},
err_extra_text_edition = {
message = '<code class="cs1-code">|edition=</code> has extra text',
anchor = 'extra_text_edition',
category = 'CS1 errors: extra text: edition',
hidden = false,
},
err_extra_text_issue = {
message = '<code class="cs1-code">|$1=</code> has extra text', -- $1 is parameter name
anchor = 'extra_text_issue',
category = 'CS1 errors: extra text: issue',
hidden = false,
},
err_extra_text_pages = {
message = '<code class="cs1-code">|$1=</code> has extra text', -- $1 is parameter name
anchor = 'extra_text_pages',
category = 'CS1 errors: extra text: pages',
hidden = false,
},
err_extra_text_volume = {
message = '<code class="cs1-code">|$1=</code> has extra text', -- $1 is parameter name
anchor = 'extra_text_volume',
category = 'CS1 errors: extra text: volume',
hidden = true,
},
err_first_missing_last = {
message = '<code class="cs1-code">|$1=</code> missing <code class="cs1-code">|$2=</code>', -- $1 is first alias, $2 is matching last alias
anchor = 'first_missing_last',
category = 'CS1 errors: missing name', -- author, contributor, editor, interviewer, translator
hidden = false
},
err_format_missing_url = {
message = '<code class="cs1-code">|$1=</code> requires <code class="cs1-code">|$2=</code>', -- $1 is format parameter $2 is url parameter
anchor = 'format_missing_url',
category = 'CS1 errors: format without URL',
hidden = false
},
err_generic_name = {
message = '<code class="cs1-code">|$1=</code> has generic name', -- $1 is parameter name
anchor = 'generic_name',
category = 'CS1 errors: generic name',
hidden = false,
},
err_generic_title = {
message = 'Cite uses generic title',
anchor = 'generic_title',
category = 'CS1 errors: generic title',
hidden = false,
},
err_invalid_param_val = {
message = 'Invalid <code class="cs1-code">|$1=$2</code>', -- $1 is parameter name $2 is parameter value
anchor = 'invalid_param_val',
category = 'CS1 errors: invalid parameter value',
hidden = false
},
err_invisible_char = {
message = '$1 in $2 at position $3', -- $1 is invisible char $2 is parameter name $3 is position number
anchor = 'invisible_char',
category = 'CS1 errors: invisible characters',
hidden = false
},
err_missing_name = {
message = 'Missing <code class="cs1-code">|$1$2=</code>', -- $1 is modified NameList; $2 is enumerator
anchor = 'missing_name',
category = 'CS1 errors: missing name', -- author, contributor, editor, interviewer, translator
hidden = false
},
err_missing_periodical = {
message = 'Cite $1 requires <code class="cs1-code">|$2=</code>', -- $1 is cs1 template name; $2 is canonical periodical parameter name for cite $1
anchor = 'missing_periodical',
category = 'CS1 errors: missing periodical',
hidden = true
},
err_missing_pipe = {
message = 'Missing pipe in: <code class="cs1-code">|$1=</code>', -- $1 is parameter name
anchor = 'missing_pipe',
category = 'CS1 errors: missing pipe',
hidden = false
},
err_param_access_requires_param = {
message = '<code class="cs1-code">|$1-access=</code> requires <code class="cs1-code">|$1=</code>', -- $1 is parameter name
anchor = 'param_access_requires_param',
category = 'CS1 errors: param-access',
hidden = false
},
err_param_has_ext_link = {
message = 'External link in <code class="cs1-code">$1</code>', -- $1 is parameter name
anchor = 'param_has_ext_link',
category = 'CS1 errors: external links',
hidden = false
},
err_parameter_ignored = {
message = 'Unknown parameter <code class="cs1-code">|$1=</code> ignored', -- $1 is parameter name
anchor = 'parameter_ignored',
category = 'CS1 errors: unsupported parameter',
hidden = false
},
err_parameter_ignored_suggest = {
message = 'Unknown parameter <code class="cs1-code">|$1=</code> ignored (<code class="cs1-code">|$2=</code> suggested)', -- $1 is unknown parameter $2 is suggested parameter name
anchor = 'parameter_ignored_suggest',
category = 'CS1 errors: unsupported parameter',
hidden = false
},
err_redundant_parameters = {
message = 'More than one of $1 specified', -- $1 is error message detail
anchor = 'redundant_parameters',
category = 'CS1 errors: redundant parameter',
hidden = false
},
err_script_parameter = {
message = 'Invalid <code class="cs1-code">|$1=</code>: $2', -- $1 is parameter name $2 is script language code or error detail
anchor = 'script_parameter',
category = 'CS1 errors: script parameters',
hidden = false
},
err_ssrn_missing = {
message = '<code class="cs1-code">|ssrn=</code> required',
anchor = 'ssrn_missing',
category = 'CS1 errors: SSRN', -- same as bad arxiv
hidden = false
},
err_text_ignored = {
message = 'Text "$1" ignored', -- $1 is ignored text
anchor = 'text_ignored',
category = 'CS1 errors: unrecognized parameter',
hidden = false
},
err_trans_missing_title = {
message = '<code class="cs1-code">|trans-$1=</code> requires <code class="cs1-code">|$1=</code> or <code class="cs1-code">|script-$1=</code>', -- $1 is base parameter name
anchor = 'trans_missing_title',
category = 'CS1 errors: translated title',
hidden = false
},
err_param_unknown_empty = {
message = 'Cite has empty unknown parameter$1: $2', -- $1 is 's' or empty space; $2 is emty unknown param list
anchor = 'param_unknown_empty',
category = 'CS1 errors: empty unknown parameters',
hidden = false
},
err_vancouver = {
message = 'Vancouver style error: $1 in name $2', -- $1 is error detail, $2 is the nth name
anchor = 'vancouver',
category = 'CS1 errors: Vancouver style',
hidden = false
},
err_wikilink_in_url = {
message = 'URL–wikilink conflict', -- uses ndash
anchor = 'wikilink_in_url',
category = 'CS1 errors: URL–wikilink conflict', -- uses ndash
hidden = false
},
--[[--------------------------< M A I N T >-------------------------------------
maint messages do not have a message (message = nil); otherwise the structure
is the same as error messages
]]
maint_archived_copy = {
message = nil,
anchor = 'archived_copy',
category = 'CS1 maint: archived copy as title',
hidden = true,
},
maint_authors = {
message = nil,
anchor = 'authors',
category = 'CS1 maint: uses authors parameter',
hidden = true,
},
maint_bot_unknown = {
message = nil,
anchor = 'bot:_unknown',
category = 'CS1 maint: bot: original URL status unknown',
hidden = true,
},
maint_date_auto_xlated = { -- date auto-translation not supported by en.wiki
message = nil,
anchor = 'date_auto_xlated',
category = 'CS1 maint: date auto-translated',
hidden = true,
},
maint_date_format = {
message = nil,
anchor = 'date_format',
category = 'CS1 maint: date format',
hidden = true,
},
maint_date_year = {
message = nil,
anchor = 'date_year',
category = 'CS1 maint: date and year',
hidden = true,
},
maint_doi_ignore = {
message = nil,
anchor = 'doi_ignore',
category = 'CS1 maint: ignored DOI errors',
hidden = true,
},
maint_doi_inactive = {
message = nil,
anchor = 'doi_inactive',
category = 'CS1 maint: DOI inactive',
hidden = true,
},
maint_doi_inactive_dated = {
message = nil,
anchor = 'doi_inactive_dated',
category = 'CS1 maint: DOI inactive as of $2$3$1', -- $1 is year, $2 is month-name or empty string, $3 is space or empty string
hidden = true,
},
maint_extra_punct = {
message = nil,
anchor = 'extra_punct',
category = 'CS1 maint: extra punctuation',
hidden = true,
},
maint_isbn_ignore = {
message = nil,
anchor = 'ignore_isbn_err',
category = 'CS1 maint: ignored ISBN errors',
hidden = true,
},
maint_issn_ignore = {
message = nil,
anchor = 'ignore_issn',
category = 'CS1 maint: ignored ISSN errors',
hidden = true,
},
maint_jfm_format = {
message = nil,
anchor = 'jfm_format',
category = 'CS1 maint: JFM format',
hidden = true,
},
maint_location = {
message = nil,
anchor = 'location',
category = 'CS1 maint: location',
hidden = true,
},
maint_mr_format = {
message = nil,
anchor = 'mr_format',
category = 'CS1 maint: MR format',
hidden = true,
},
maint_mult_names = {
message = nil,
anchor = 'mult_names',
category = 'CS1 maint: multiple names: $1', -- $1 is '<name>s list'; gets value from special_case_translation table
hidden = true,
},
maint_numeric_names = {
message = nil,
anchor = 'numeric_names',
category = 'CS1 maint: numeric names: $1', -- $1 is '<name>s list'; gets value from special_case_translation table
hidden = true,
},
maint_others = {
message = nil,
anchor = 'others',
category = 'CS1 maint: others',
hidden = true,
},
maint_others_avm = {
message = nil,
anchor = 'others_avm',
category = 'CS1 maint: others in cite AV media (notes)',
hidden = true,
},
maint_pmc_embargo = {
message = nil,
anchor = 'embargo',
category = 'CS1 maint: PMC embargo expired',
hidden = true,
},
maint_pmc_format = {
message = nil,
anchor = 'pmc_format',
category = 'CS1 maint: PMC format',
hidden = true,
},
maint_postscript = {
message = nil,
anchor = 'postscript',
category = 'CS1 maint: postscript',
hidden = true,
},
maint_ref_duplicates_default = {
message = nil,
anchor = 'ref_default',
category = 'CS1 maint: ref duplicates default',
hidden = true,
},
maint_unfit = {
message = nil,
anchor = 'unfit',
category = 'CS1 maint: unfit URL',
hidden = true,
},
maint_unknown_lang = {
message = nil,
anchor = 'unknown_lang',
category = 'CS1 maint: unrecognized language',
hidden = true,
},
maint_untitled = {
message = nil,
anchor = 'untitled',
category = 'CS1 maint: untitled periodical',
hidden = true,
},
maint_url_status = {
message = nil,
anchor = 'url_status',
category = 'CS1 maint: url-status',
hidden = true,
},
maint_zbl = {
message = nil,
anchor = 'zbl',
category = 'CS1 maint: Zbl',
hidden = true,
},
}
--[[--------------------------< I D _ H A N D L E R S >--------------------------------------------------------
The following contains a list of values for various defined identifiers. For each
identifier we specify a variety of information necessary to properly render the
identifier in the citation.
parameters: a list of parameter aliases for this identifier; first in the list is the canonical form
link: Wikipedia article name
redirect: a local redirect to a local Wikipedia article name; at en.wiki, 'ISBN (identifier)' is a redirect to 'International Standard Book Number'
q: Wikidata q number for the identifier
label: the label preceding the identifier; label is linked to a Wikipedia article (in this order):
redirect from id_handlers['<id>'].redirect when use_identifier_redirects is true
Wikidata-supplied article name for the local wiki from id_handlers['<id>'].q
local article name from id_handlers['<id>'].link
prefix: the first part of a URL that will be concatenated with a second part which usually contains the identifier
suffix: optional third part to be added after the identifier
encode: true if URI should be percent-encoded; otherwise false
COinS: identifier link or keyword for use in COinS:
for identifiers registered at info-uri.info use: info:.... where '...' is the appropriate identifier label
for identifiers that have COinS keywords, use the keyword: rft.isbn, rft.issn, rft.eissn
for |asin= and |ol=, which require assembly, use the keyword: url
for others make a URL using the value in prefix/suffix and #label, use the keyword: pre (not checked; any text other than 'info', 'rft', or 'url' works here)
set to nil to leave the identifier out of the COinS
separator: character or text between label and the identifier in the rendered citation
id_limit: for those identifiers with established limits, this property holds the upper limit
access: use this parameter to set the access level for all instances of this identifier.
the value must be a valid access level for an identifier (see ['id-access'] in this file).
custom_access: to enable custom access level for an identifier, set this parameter
to the parameter that should control it (normally 'id-access')
]]
local id_handlers = {
['ARXIV'] = {
parameters = {'arxiv', 'eprint'},
link = 'arXiv',
redirect = 'arXiv (identifier)',
q = 'Q118398',
label = 'arXiv',
prefix = 'https://arxiv.org/abs/', -- protocol-relative tested 2013-09-04
encode = false,
COinS = 'info:arxiv',
separator = ':',
access = 'free', -- free to read
},
['ASIN'] = {
parameters = { 'asin', 'ASIN' },
link = 'Amazon Standard Identification Number',
redirect = 'ASIN (identifier)',
q = 'Q1753278',
label = 'ASIN',
prefix = 'https://www.amazon.',
COinS = 'url',
separator = ' ',
encode = false;
},
['BIBCODE'] = {
parameters = {'bibcode'},
link = 'Bibcode',
redirect = 'Bibcode (identifier)',
q = 'Q25754',
label = 'Bibcode',
prefix = 'https://ui.adsabs.harvard.edu/abs/',
encode = false,
COinS = 'info:bibcode',
separator = ':',
custom_access = 'bibcode-access',
},
['BIORXIV'] = {
parameters = {'biorxiv'},
link = 'bioRxiv',
redirect = 'bioRxiv (identifier)',
q = 'Q19835482',
label = 'bioRxiv',
prefix = 'https://doi.org/',
COinS = 'pre', -- use prefix value
access = 'free', -- free to read
encode = true,
separator = ' ',
},
['CITESEERX'] = {
parameters = {'citeseerx'},
link = 'CiteSeerX',
redirect = 'CiteSeerX (identifier)',
q = 'Q2715061',
label = 'CiteSeerX',
prefix = 'https://citeseerx.ist.psu.edu/viewdoc/summary?doi=',
COinS = 'pre', -- use prefix value
access = 'free', -- free to read
encode = true,
separator = ' ',
},
['DOI'] = { -- Used by InternetArchiveBot
parameters = { 'doi', 'DOI'},
link = 'Digital object identifier',
redirect = 'doi (identifier)',
q = 'Q25670',
label = 'doi',
prefix = 'https://doi.org/',
COinS = 'info:doi',
separator = ':',
encode = true,
custom_access = 'doi-access',
},
['EISSN'] = {
parameters = {'eissn', 'EISSN'},
link = 'International Standard Serial Number#Electronic ISSN',
redirect = 'eISSN (identifier)',
q = 'Q46339674',
label = 'eISSN',
prefix = 'https://www.worldcat.org/issn/',
COinS = 'rft.eissn',
encode = false,
separator = ' ',
},
['HDL'] = {
parameters = { 'hdl', 'HDL' },
link = 'Handle System',
redirect = 'hdl (identifier)',
q = 'Q3126718',
label = 'hdl',
prefix = 'https://hdl.handle.net/',
COinS = 'info:hdl',
separator = ':',
encode = true,
custom_access = 'hdl-access',
},
['ISBN'] = { -- Used by InternetArchiveBot
parameters = {'isbn', 'ISBN'},
link = 'International Standard Book Number',
redirect = 'ISBN (identifier)',
q = 'Q33057',
label = 'ISBN',
prefix = 'Special:BookSources/',
COinS = 'rft.isbn',
separator = ' ',
},
['ISMN'] = {
parameters = {'ismn', 'ISMN'},
link = 'International Standard Music Number',
redirect = 'ISMN (identifier)',
q = 'Q1666938',
label = 'ISMN',
prefix = '', -- not currently used;
COinS = nil, -- nil because we can't use pre or rft or info:
separator = ' ',
},
['ISSN'] = {
parameters = {'issn', 'ISSN'},
link = 'International Standard Serial Number',
redirect = 'ISSN (identifier)',
q = 'Q131276',
label = 'ISSN',
prefix = 'https://www.worldcat.org/issn/',
COinS = 'rft.issn',
encode = false,
separator = ' ',
},
['JFM'] = {
parameters = {'jfm', 'JFM'},
link = 'Jahrbuch über die Fortschritte der Mathematik',
redirect = 'JFM (identifier)',
q = '',
label = 'JFM',
prefix = 'https://zbmath.org/?format=complete&q=an:',
COinS = 'pre', -- use prefix value
encode = true,
separator = ' ',
},
['JSTOR'] = {
parameters = {'jstor', 'JSTOR'},
link = 'JSTOR',
redirect = 'JSTOR (identifier)',
q = 'Q1420342',
label = 'JSTOR',
prefix = 'https://www.jstor.org/stable/', -- protocol-relative tested 2013-09-04
COinS = 'pre', -- use prefix value
encode = false,
separator = ' ',
custom_access = 'jstor-access',
},
['LCCN'] = {
parameters = {'lccn', 'LCCN'},
link = 'Library of Congress Control Number',
redirect = 'LCCN (identifier)',
q = 'Q620946',
label = 'LCCN',
prefix = 'https://lccn.loc.gov/', -- protocol-relative tested 2015-12-28
COinS = 'info:lccn',
encode = false,
separator = ' ',
},
['MR'] = {
parameters = {'mr', 'MR'},
link = 'Mathematical Reviews',
redirect = 'MR (identifier)',
q = 'Q211172',
label = 'MR',
prefix = 'https://mathscinet.ams.org/mathscinet-getitem?mr=',
COinS = 'pre', -- use prefix value
encode = true,
separator = ' ',
},
['OCLC'] = {
parameters = {'oclc', 'OCLC'},
link = 'OCLC',
redirect = 'OCLC (identifier)',
q = 'Q190593',
label = 'OCLC',
prefix = 'https://www.worldcat.org/oclc/',
COinS = 'info:oclcnum',
encode = true,
separator = ' ',
id_limit = 9999999999, -- 10-digits
},
['OL'] = {
parameters = { 'ol', 'OL' },
link = 'Open Library',
redirect = 'OL (identifier)',
q = 'Q1201876',
label = 'OL',
prefix = 'https://openlibrary.org/',
COinS = 'url',
separator = ' ',
encode = true,
custom_access = 'ol-access',
},
['OSTI'] = {
parameters = {'osti', 'OSTI'},
link = 'Office of Scientific and Technical Information',
redirect = 'OSTI (identifier)',
q = 'Q2015776',
label = 'OSTI',
prefix = 'https://www.osti.gov/biblio/', -- protocol-relative tested 2018-09-12
COinS = 'pre', -- use prefix value
encode = true,
separator = ' ',
id_limit = 23010000,
custom_access = 'osti-access',
},
['PMC'] = {
parameters = {'pmc', 'PMC'},
link = 'PubMed Central',
redirect = 'PMC (identifier)',
q = 'Q229883',
label = 'PMC',
prefix = 'https://www.ncbi.nlm.nih.gov/pmc/articles/PMC',
suffix = '',
COinS = 'pre', -- use prefix value
encode = true,
separator = ' ',
id_limit = 10100000,
access = 'free', -- free to read
},
['PMID'] = {
parameters = {'pmid', 'PMID'},
link = 'PubMed Identifier',
redirect = 'PMID (identifier)',
q = 'Q2082879',
label = 'PMID',
prefix = 'https://pubmed.ncbi.nlm.nih.gov/',
COinS = 'info:pmid',
encode = false,
separator = ' ',
id_limit = 36900000,
},
['RFC'] = {
parameters = {'rfc', 'RFC'},
link = 'Request for Comments',
redirect = 'RFC (identifier)',
q = 'Q212971',
label = 'RFC',
prefix = 'https://tools.ietf.org/html/rfc',
COinS = 'pre', -- use prefix value
encode = false,
separator = ' ',
id_limit = 9300,
access = 'free', -- free to read
},
['SBN'] = {
parameters = {'sbn', 'SBN'},
link = 'Standard Book Number', -- redirect to International_Standard_Book_Number#History
redirect = 'SBN (identifier)',
label = 'SBN',
prefix = 'Special:BookSources/0-', -- prefix has leading zero necessary to make 9-digit sbn a 10-digit isbn
COinS = nil, -- nil because we can't use pre or rft or info:
separator = ' ',
},
['SSRN'] = {
parameters = {'ssrn', 'SSRN'},
link = 'Social Science Research Network',
redirect = 'SSRN (identifier)',
q = 'Q7550801',
label = 'SSRN',
prefix = 'https://papers.ssrn.com/sol3/papers.cfm?abstract_id=',
COinS = 'pre', -- use prefix value
encode = true,
separator = ' ',
id_limit = 4400000,
custom_access = 'ssrn-access',
},
['S2CID'] = {
parameters = {'s2cid', 'S2CID'},
link = 'Semantic Scholar',
redirect = 'S2CID (identifier)',
q = 'Q22908627',
label = 'S2CID',
prefix = 'https://api.semanticscholar.org/CorpusID:',
COinS = 'pre', -- use prefix value
encode = false,
separator = ' ',
id_limit = 258000000,
custom_access = 's2cid-access',
},
['USENETID'] = {
parameters = {'message-id'},
link = 'Usenet',
redirect = 'Usenet (identifier)',
q = 'Q193162',
label = 'Usenet:',
prefix = 'news:',
encode = false,
COinS = 'pre', -- use prefix value
separator = ' ',
},
['ZBL'] = {
parameters = {'zbl', 'ZBL' },
link = 'Zentralblatt MATH',
redirect = 'Zbl (identifier)',
q = 'Q190269',
label = 'Zbl',
prefix = 'https://zbmath.org/?format=complete&q=an:',
COinS = 'pre', -- use prefix value
encode = true,
separator = ' ',
},
}
--[[--------------------------< E X P O R T S >---------------------------------
]]
return {
use_identifier_redirects = true, -- when true use redirect name for identifier label links; always true at en.wiki
local_lang_cat_enable = false; -- when true categorizes pages where |language=<local wiki's language>; always false at en.wiki
date_name_auto_xlate_enable = false; -- when true translates English month-names to the local-wiki's language month names; always false at en.wiki
date_digit_auto_xlate_enable = false; -- when true translates Western date digit to the local-wiki's language digits (date_names['local_digits']); always false at en.wiki
-- tables and variables created when this module is loaded
global_df = get_date_format (), -- this line can be replaced with "global_df = 'dmy-all'," to have all dates auto translated to dmy format.
punct_skip = build_skip_table (punct_skip, punct_meta_params),
url_skip = build_skip_table (url_skip, url_meta_params),
aliases = aliases,
special_case_translation = special_case_translation,
date_names = date_names,
err_msg_supl = err_msg_supl,
error_conditions = error_conditions,
editor_markup_patterns = editor_markup_patterns,
et_al_patterns = et_al_patterns,
id_handlers = id_handlers,
keywords_lists = keywords_lists,
keywords_xlate = keywords_xlate,
stripmarkers = stripmarkers,
invisible_chars = invisible_chars,
invisible_defs = invisible_defs,
indic_script = indic_script,
emoji_t = emoji_t,
maint_cats = maint_cats,
messages = messages,
presentation = presentation,
prop_cats = prop_cats,
script_lang_codes = script_lang_codes,
lang_code_remap = lang_code_remap,
lang_name_remap = lang_name_remap,
this_wiki_code = this_wiki_code,
title_types = title_types,
uncategorized_namespaces = uncategorized_namespaces_t,
uncategorized_subpages = uncategorized_subpages,
templates_using_volume = templates_using_volume,
templates_using_issue = templates_using_issue,
templates_not_using_page = templates_not_using_page,
vol_iss_pg_patterns = vol_iss_pg_patterns,
single_letter_2nd_lvl_domains_t = single_letter_2nd_lvl_domains_t,
inter_wiki_map = inter_wiki_map,
mw_languages_by_tag_t = mw_languages_by_tag_t,
mw_languages_by_name_t = mw_languages_by_name_t,
citation_class_map_t = citation_class_map_t,
citation_issue_t = citation_issue_t,
citation_no_volume_t = citation_no_volume_t,
}
qfso9ykndyky8971k5ecurf4m5cd1b5
Module:Citation/CS1/Whitelist
828
39013723
1133582654
1067249016
2023-01-14T14:43:42Z
Trappist the monk
10289486
sync from sandbox;
Scribunto
text/plain
--[[--------------------------< S U P P O R T E D P A R A M E T E R S >--------------------------------------
Because a steady-state signal conveys no useful information, whitelist.basic_arguments[] list items can have three values:
true - these parameters are valid and supported parameters
false - these parameters are deprecated but still supported
tracked - these parameters are valid and supported parameters tracked in an eponymous properties category
nil - these parameters are no longer supported. remove entirely
]]
local basic_arguments = {
['accessdate'] = true,
['access-date'] = true,
['agency'] = true,
['archivedate'] = true,
['archive-date'] = true,
['archive-format'] = true,
['archiveurl'] = true,
['archive-url'] = true,
['article'] = true,
['article-format'] = true,
['article-number'] = true, -- {{cite journal}}, {{cite conference}}; {{citation}} when |journal= has a value
['article-url'] = true,
['article-url-access'] = true,
['arxiv'] = true, -- cite arxiv; here because allowed in cite ... as identifier
['asin'] = true,
['ASIN'] = true,
['asin-tld'] = true,
['at'] = true,
['author'] = true,
['author-first'] = true,
['author-given'] = true,
['author-last'] = true,
['author-surname'] = true,
['authorlink'] = true,
['author-link'] = true,
['author-mask'] = true,
['authors'] = true,
['bibcode'] = true,
['bibcode-access'] = true,
['biorxiv'] = true, -- cite biorxiv; here because allowed in cite ... as identifier
['chapter'] = true,
['chapter-format'] = true,
['chapter-url'] = true,
['chapter-url-access'] = true,
['citeseerx'] = true, -- cite citeseerx; here because allowed in cite ... as identifier
['collaboration'] = true,
['contribution'] = true,
['contribution-format'] = true,
['contribution-url'] = true,
['contribution-url-access'] = true,
['contributor'] = true,
['contributor-first'] = true,
['contributor-given'] = true,
['contributor-last'] = true,
['contributor-surname'] = true,
['contributor-link'] = true,
['contributor-mask'] = true,
['date'] = true,
['department'] = true,
['df'] = true,
['dictionary'] = true,
['display-authors'] = true,
['display-contributors'] = true,
['display-editors'] = true,
['display-interviewers'] = true,
['display-subjects'] = true,
['display-translators'] = true,
['doi'] = true,
['DOI'] = true,
['doi-access'] = true,
['doi-broken-date'] = true,
['edition'] = true,
['editor'] = true,
['editor-first'] = true,
['editor-given'] = true,
['editor-last'] = true,
['editor-surname'] = true,
['editor-link'] = true,
['editor-mask'] = true,
['eissn'] = true,
['EISSN'] = true,
['encyclopaedia'] = true,
['encyclopedia'] = true,
['entry'] = true,
['entry-format'] = true,
['entry-url'] = true,
['entry-url-access'] = true,
['eprint'] = true, -- cite arxiv; here because allowed in cite ... as identifier
['first'] = true,
['format'] = true,
['given'] = true,
['hdl'] = true,
['HDL'] = true,
['hdl-access'] = true,
['host'] = true, -- unique to certain templates?
['id'] = true,
['ID'] = true,
['institution'] = true, -- constrain to cite thesis?
['interviewer'] = true,
['interviewer-first'] = true,
['interviewer-given'] = true,
['interviewer-last'] = true,
['interviewer-surname'] = true,
['interviewer-link'] = true,
['interviewer-mask'] = true,
['isbn'] = true,
['ISBN'] = true,
['ismn'] = true,
['ISMN'] = true,
['issn'] = true,
['ISSN'] = true,
['issue'] = true,
['jfm'] = true,
['JFM'] = true,
['journal'] = true,
['jstor'] = true,
['JSTOR'] = true,
['jstor-access'] = true,
['lang'] = true,
['language'] = true,
['last'] = true,
['lay-date'] = false,
['lay-format'] = false,
['lay-source'] = false,
['lay-url'] = false,
['lccn'] = true,
['LCCN'] = true,
['location'] = true,
['magazine'] = true,
['medium'] = true,
['minutes'] = true, -- constrain to cite AV media and podcast?
['mode'] = true,
['mr'] = true,
['MR'] = true,
['name-list-style'] = true,
['newspaper'] = true,
['no-pp'] = true,
['no-tracking'] = true,
['number'] = true,
['oclc'] = true,
['OCLC'] = true,
['ol'] = true,
['OL'] = true,
['ol-access'] = true,
['orig-date'] = true,
['origyear'] = true,
['orig-year'] = true,
['osti'] = true,
['OSTI'] = true,
['osti-access'] = true,
['others'] = true,
['p'] = true,
['page'] = true,
['pages'] = true,
['people'] = true,
['periodical'] = true,
['place'] = true,
['pmc'] = true,
['PMC'] = true,
['pmc-embargo-date'] = true,
['pmid'] = true,
['PMID'] = true,
['postscript'] = true,
['pp'] = true,
['publication-date'] = true,
['publication-place'] = true,
['publisher'] = true,
['quotation'] = true,
['quote'] = true,
['quote-page'] = true,
['quote-pages'] = true,
['ref'] = true,
['rfc'] = true,
['RFC'] = true,
['sbn'] = true,
['SBN'] = true,
['scale'] = true,
['script-article'] = true,
['script-chapter'] = true,
['script-contribution'] = true,
['script-entry'] = true,
['script-journal'] = true,
['script-magazine'] = true,
['script-newspaper'] = true,
['script-periodical'] = true,
['script-quote'] = true,
['script-section'] = true,
['script-title'] = true,
['script-website'] = true,
['script-work'] = true,
['section'] = true,
['section-format'] = true,
['section-url'] = true,
['section-url-access'] = true,
['series'] = true,
['ssrn'] = true, -- cite ssrn; these three here because allowed in cite ... as identifier
['SSRN'] = true,
['ssrn-access'] = true,
['subject'] = true,
['subject-link'] = true,
['subject-mask'] = true,
['surname'] = true,
['s2cid'] = true,
['S2CID'] = true,
['s2cid-access'] = true,
['template-doc-demo'] = true,
['time'] = true, -- constrain to cite av media and podcast?
['time-caption'] = true, -- constrain to cite av media and podcast?
['title'] = true,
['title-link'] = true,
['translator'] = true,
['translator-first'] = true,
['translator-given'] = true,
['translator-last'] = true,
['translator-surname'] = true,
['translator-link'] = true,
['translator-mask'] = true,
['trans-article'] = true,
['trans-chapter'] = true,
['trans-contribution'] = true,
['trans-entry'] = true,
['trans-journal'] = true,
['trans-magazine'] = true,
['trans-newspaper'] = true,
['trans-periodical'] = true,
['trans-quote'] = true,
['trans-section'] = true,
['trans-title'] = true,
['trans-website'] = true,
['trans-work'] = true,
['type'] = true,
['url'] = true,
['URL'] = true,
['url-access'] = true,
['url-status'] = true,
['vauthors'] = true,
['veditors'] = true,
['version'] = true,
['via'] = true,
['volume'] = true,
['website'] = true,
['work'] = true,
['year'] = true,
['zbl'] = true,
['ZBL'] = true,
}
local numbered_arguments = {
['author#'] = true,
['author-first#'] = true,
['author#-first'] = true,
['author-given#'] = true,
['author#-given'] = true,
['author-last#'] = true,
['author#-last'] = true,
['author-surname#'] = true,
['author#-surname'] = true,
['author-link#'] = true,
['author#-link'] = true,
['authorlink#'] = true,
['author#link'] = true,
['author-mask#'] = true,
['author#-mask'] = true,
['contributor#'] = true,
['contributor-first#'] = true,
['contributor#-first'] = true,
['contributor-given#'] = true,
['contributor#-given'] = true,
['contributor-last#'] = true,
['contributor#-last'] = true,
['contributor-surname#'] = true,
['contributor#-surname'] = true,
['contributor-link#'] = true,
['contributor#-link'] = true,
['contributor-mask#'] = true,
['contributor#-mask'] = true,
['editor#'] = true,
['editor-first#'] = true,
['editor#-first'] = true,
['editor-given#'] = true,
['editor#-given'] = true,
['editor-last#'] = true,
['editor#-last'] = true,
['editor-surname#'] = true,
['editor#-surname'] = true,
['editor-link#'] = true,
['editor#-link'] = true,
['editor-mask#'] = true,
['editor#-mask'] = true,
['first#'] = true,
['given#'] = true,
['host#'] = true,
['interviewer#'] = true,
['interviewer-first#'] = true,
['interviewer#-first'] = true,
['interviewer-given#'] = true,
['interviewer#-given'] = true,
['interviewer-last#'] = true,
['interviewer#-last'] = true,
['interviewer-surname#'] = true,
['interviewer#-surname'] = true,
['interviewer-link#'] = true,
['interviewer#-link'] = true,
['interviewer-mask#'] = true,
['interviewer#-mask'] = true,
['last#'] = true,
['subject#'] = true,
['subject-link#'] = true,
['subject#-link'] = true,
['subject-mask#'] = true,
['subject#-mask'] = true,
['surname#'] = true,
['translator#'] = true,
['translator-first#'] = true,
['translator#-first'] = true,
['translator-given#'] = true,
['translator#-given'] = true,
['translator-last#'] = true,
['translator#-last'] = true,
['translator-surname#'] = true,
['translator#-surname'] = true,
['translator-link#'] = true,
['translator#-link'] = true,
['translator-mask#'] = true,
['translator#-mask'] = true,
}
--[[--------------------------< P R E P R I N T S U P P O R T E D P A R A M E T E R S >--------------------
Cite arXiv, cite biorxiv, cite citeseerx, and cite ssrn are preprint templates that use the limited set of parameters
defined in the limited_basic_arguments and limited_numbered_arguments tables. Those lists are supplemented with a
template-specific list of parameters that are required by the particular template and may be exclusive to one of the
preprint templates. Some of these parameters may also be available to the general cs1|2 templates.
Same conventions for true/false/tracked/nil as above.
]]
local preprint_arguments = {
arxiv = {
['arxiv'] = true, -- cite arxiv and arxiv identifiers
['class'] = true,
['eprint'] = true, -- cite arxiv and arxiv identifiers
},
biorxiv = {
['biorxiv'] = true,
},
citeseerx = {
['citeseerx'] = true,
},
ssrn = {
['ssrn'] = true,
['SSRN'] = true,
['ssrn-access'] = true,
},
}
--[[--------------------------< L I M I T E D S U P P O R T E D P A R A M E T E R S >----------------------
cite arxiv, cite biorxiv, cite citeseerx, and cite ssrn templates are preprint templates so are allowed only a
limited subset of parameters allowed to all other cs1|2 templates. The limited subset is defined here.
Same conventions for true/false/tracked/nil as above.
]]
local limited_basic_arguments = {
['at'] = true,
['author'] = true,
['author-first'] = true,
['author-given'] = true,
['author-last'] = true,
['author-surname'] = true,
['author-link'] = true,
['authorlink'] = true,
['author-mask'] = true,
['authors'] = true,
['collaboration'] = true,
['date'] = true,
['df'] = true,
['display-authors'] = true,
['first'] = true,
['given'] = true,
['language'] = true,
['last'] = true,
['mode'] = true,
['name-list-style'] = true,
['no-tracking'] = true,
['p'] = true,
['page'] = true,
['pages'] = true,
['postscript'] = true,
['pp'] = true,
['quotation'] = true,
['quote'] = true,
['ref'] = true,
['surname'] = true,
['template-doc-demo'] = true,
['title'] = true,
['trans-title'] = true,
['vauthors'] = true,
['year'] = true,
}
local limited_numbered_arguments = {
['author#'] = true,
['author-first#'] = true,
['author#-first'] = true,
['author-given#'] = true,
['author#-given'] = true,
['author-last#'] = true,
['author#-last'] = true,
['author-surname#'] = true,
['author#-surname'] = true,
['author-link#'] = true,
['author#-link'] = true,
['authorlink#'] = true,
['author#link'] = true,
['author-mask#'] = true,
['author#-mask'] = true,
['first#'] = true,
['given#'] = true,
['last#'] = true,
['surname#'] = true,
}
--[[--------------------------< U N I Q U E _ A R G U M E N T S >----------------------------------------------
Some templates have unique parameters. Those templates and their unique parameters are listed here. Keys in this
table are the template's CitationClass parameter value
Same conventions for true/false/tracked/nil as above.
]]
local unique_arguments = {
['audio-visual'] = {
['transcript'] = true,
['transcript-format'] = true,
['transcript-url'] = true,
},
conference = {
['book-title'] = true,
['conference'] = true,
['conference-format'] = true,
['conference-url'] = true,
['event'] = true,
},
episode = {
['airdate'] = true,
['air-date'] = true,
['credits'] = true,
['episode-link'] = true, -- alias of |title-link=
['network'] = true,
['season'] = true,
['series-link'] = true,
['series-no'] = true,
['series-number'] = true,
['station'] = true,
['transcript'] = true,
['transcript-format'] = true,
['transcripturl'] = false,
['transcript-url'] = true,
},
mailinglist = {
['mailing-list'] = true,
},
map = {
['cartography'] = true,
['inset'] = true,
['map'] = true,
['map-format'] = true,
['map-url'] = true,
['map-url-access'] = true,
['script-map'] = true,
['sections'] = true,
['sheet'] = true,
['sheets'] = true,
['trans-map'] = true,
},
newsgroup = {
['message-id'] = true,
['newsgroup'] = true,
},
report = {
['docket'] = true,
},
serial = {
['airdate'] = true,
['air-date'] = true,
['credits'] = true,
['episode'] = true, -- cite serial only TODO: make available to cite episode?
['episode-link'] = true, -- alias of |title-link=
['network'] = true,
['series-link'] = true,
['station'] = true,
},
speech = {
['conference'] = true,
['conference-format'] = true,
['conference-url'] = true,
['event'] = true,
},
thesis = {
['degree'] = true,
['docket'] = true,
},
}
--[[--------------------------< T E M P L A T E _ L I S T _ G E T >--------------------------------------------
gets a list of the templates from table t
]]
local function template_list_get (t)
local out = {}; -- a table for output
for k, _ in pairs (t) do -- spin through the table and collect the keys
table.insert (out, k) -- add each key to the output table
end
return out; -- and done
end
--[[--------------------------< E X P O R T E D T A B L E S >------------------------------------------------
]]
return {
basic_arguments = basic_arguments,
numbered_arguments = numbered_arguments,
limited_basic_arguments = limited_basic_arguments,
limited_numbered_arguments = limited_numbered_arguments,
preprint_arguments = preprint_arguments,
preprint_template_list = template_list_get (preprint_arguments), -- make a template list from preprint_arguments{} table
unique_arguments = unique_arguments,
unique_param_template_list = template_list_get (unique_arguments), -- make a template list from unique_arguments{} table
};
ejafum0fj56ec1jr28vf2x10nm4d2x0
Module:Citation/CS1/Utilities
828
48808487
1067249005
999303015
2022-01-22T14:11:16Z
Trappist the monk
10289486
update per [[Wikipedia:Village_pump_(proposals)#rfc:_shall_we_update_cs1/2?|RfC]];
Scribunto
text/plain
local z = {
error_cats_t = {}; -- for categorizing citations that contain errors
error_ids_t = {}; -- list of error identifiers; used to prevent duplication of certain errors; local to this module
error_msgs_t = {}; -- sequence table of error messages
maint_cats_t = {}; -- for categorizing citations that aren't erroneous per se, but could use a little work
prop_cats_t = {}; -- for categorizing citations based on certain properties, language of source for instance
prop_keys_t = {}; -- for adding classes to the citation's <cite> tag
};
--[[--------------------------< F O R W A R D D E C L A R A T I O N S >--------------------------------------
]]
local cfg; -- table of tables imported from selected Module:Citation/CS1/Configuration
--[[--------------------------< I S _ S E T >------------------------------------------------------------------
Returns true if argument is set; false otherwise. Argument is 'set' when it exists (not nil) or when it is not an empty string.
]]
local function is_set (var)
return not (var == nil or var == '');
end
--[[--------------------------< I N _ A R R A Y >--------------------------------------------------------------
Whether needle is in haystack
]]
local function in_array (needle, haystack)
if needle == nil then
return false;
end
for n, v in ipairs (haystack) do
if v == needle then
return n;
end
end
return false;
end
--[[--------------------------< H A S _ A C C E P T _ A S _ W R I T T E N >------------------------------------
When <str> is wholly wrapped in accept-as-written markup, return <str> without markup and true; return <str> and false else
with allow_empty = false, <str> must have at least one character inside the markup
with allow_empty = true, <str> the markup frame can be empty like (()) to distinguish an empty template parameter from the specific condition "has no applicable value" in citation-context.
After further evaluation the two cases might be merged at a later stage, but should be kept separated for now.
]]
local function has_accept_as_written (str, allow_empty)
if not is_set (str) then
return str, false;
end
local count;
if true == allow_empty then
str, count = str:gsub ('^%(%((.*)%)%)$', '%1'); -- allows (()) to be an empty set
else
str, count = str:gsub ('^%(%((.+)%)%)$', '%1');
end
return str, 0 ~= count;
end
--[[--------------------------< S U B S T I T U T E >----------------------------------------------------------
Populates numbered arguments in a message string using an argument table. <args> may be a single string or a
sequence table of multiple strings.
]]
local function substitute (msg, args)
return args and mw.message.newRawMessage (msg, args):plain() or msg;
end
--[[--------------------------< E R R O R _ C O M M E N T >----------------------------------------------------
Wraps error messages with CSS markup according to the state of hidden. <content> may be a single string or a
sequence table of multiple strings.
]]
local function error_comment (content, hidden)
return substitute (hidden and cfg.presentation['hidden-error'] or cfg.presentation['visible-error'], content);
end
--[[--------------------------< H Y P H E N _ T O _ D A S H >--------------------------------------------------
Converts a hyphen to a dash under certain conditions. The hyphen must separate
like items; unlike items are returned unmodified. These forms are modified:
letter - letter (A - B)
digit - digit (4-5)
digit separator digit - digit separator digit (4.1-4.5 or 4-1-4-5)
letterdigit - letterdigit (A1-A5) (an optional separator between letter and
digit is supported – a.1-a.5 or a-1-a-5)
digitletter - digitletter (5a - 5d) (an optional separator between letter and
digit is supported – 5.a-5.d or 5-a-5-d)
any other forms are returned unmodified.
str may be a comma- or semicolon-separated list
]]
local function hyphen_to_dash (str)
if not is_set (str) then
return str;
end
local accept; -- boolean
str = str:gsub ("(%(%(.-%)%))", function(m) return m:gsub(",", ","):gsub(";", ";") end) -- replace commas and semicolons in accept-as-written markup with similar unicode characters so they'll be ignored during the split
str = str:gsub ('&[nm]dash;', {['–'] = '–', ['—'] = '—'}); -- replace — and – entities with their characters; semicolon mucks up the text.split
str = str:gsub ('-', '-'); -- replace HTML numeric entity with hyphen character
str = str:gsub (' ', ' '); -- replace entity with generic keyboard space character
local out = {};
local list = mw.text.split (str, '%s*[,;]%s*'); -- split str at comma or semicolon separators if there are any
for _, item in ipairs (list) do -- for each item in the list
item, accept = has_accept_as_written (item); -- remove accept-this-as-written markup when it wraps all of item
if not accept and mw.ustring.match (item, '^%w*[%.%-]?%w+%s*[%-–—]%s*%w*[%.%-]?%w+$') then -- if a hyphenated range or has endash or emdash separators
if item:match ('^%a+[%.%-]?%d+%s*%-%s*%a+[%.%-]?%d+$') or -- letterdigit hyphen letterdigit (optional separator between letter and digit)
item:match ('^%d+[%.%-]?%a+%s*%-%s*%d+[%.%-]?%a+$') or -- digitletter hyphen digitletter (optional separator between digit and letter)
item:match ('^%d+[%.%-]%d+%s*%-%s*%d+[%.%-]%d+$') or -- digit separator digit hyphen digit separator digit
item:match ('^%d+%s*%-%s*%d+$') or -- digit hyphen digit
item:match ('^%a+%s*%-%s*%a+$') then -- letter hyphen letter
item = item:gsub ('(%w*[%.%-]?%w+)%s*%-%s*(%w*[%.%-]?%w+)', '%1–%2'); -- replace hyphen, remove extraneous space characters
else
item = mw.ustring.gsub (item, '%s*[–—]%s*', '–'); -- for endash or emdash separated ranges, replace em with en, remove extraneous whitespace
end
end
table.insert (out, item); -- add the (possibly modified) item to the output table
end
local temp_str = ''; -- concatenate the output table into a comma separated string
temp_str, accept = has_accept_as_written (table.concat (out, ', ')); -- remove accept-this-as-written markup when it wraps all of concatenated out
if accept then
temp_str = has_accept_as_written (str); -- when global markup removed, return original str; do it this way to suppress boolean second return value
return temp_str:gsub(",", ","):gsub(";", ";");
else
return temp_str:gsub(",", ","):gsub(";", ";"); -- else, return assembled temp_str
end
end
--[=[-------------------------< M A K E _ W I K I L I N K >----------------------------------------------------
Makes a wikilink; when both link and display text is provided, returns a wikilink in the form [[L|D]]; if only
link is provided (or link and display are the same), returns a wikilink in the form [[L]]; if neither are
provided or link is omitted, returns an empty string.
]=]
local function make_wikilink (link, display)
if not is_set (link) then return '' end
if is_set (display) and link ~= display then
return table.concat ({'[[', link, '|', display, ']]'});
else
return table.concat ({'[[', link, ']]'});
end
end
--[[--------------------------< S E T _ M E S S A G E >----------------------------------------------------------
Sets an error message using the ~/Configuration error_conditions{} table along with arguments supplied in the function
call, inserts the resulting message in z.error_msgs_t{} sequence table, and returns the error message.
<error_id> – key value for appropriate error handler in ~/Configuration error_conditions{} table
<arguments> – may be a single string or a sequence table of multiple strings to be subsititued into error_conditions[error_id].message
<raw> – boolean
true – causes this function to return the error message not wrapped in visible-error, hidden-error span tag;
returns error_conditions[error_id].hidden as a second return value
does not add message to z.error_msgs_t sequence table
false, nil – adds message wrapped in visible-error, hidden-error span tag to z.error_msgs_t
returns the error message wrapped in visible-error, hidden-error span tag; there is no second return value
<prefix> – string to be prepended to <message> -- TODO: remove support for these unused(?) arguments?
<suffix> – string to be appended to <message>
TODO: change z.error_cats_t and z.maint_cats_t to have the form cat_name = true? this to avoid dups without having to have an extra table
]]
local added_maint_cats = {} -- list of maintenance categories that have been added to z.maint_cats_t; TODO: figure out how to delete this table
local function set_message (error_id, arguments, raw, prefix, suffix)
local error_state = cfg.error_conditions[error_id];
prefix = prefix or '';
suffix = suffix or '';
if error_state == nil then
error (cfg.messages['undefined_error'] .. ': ' .. error_id); -- because missing error handler in Module:Citation/CS1/Configuration
elseif is_set (error_state.category) then
if error_state.message then -- when error_state.message defined, this is an error message
table.insert (z.error_cats_t, error_state.category);
else
if not added_maint_cats[error_id] then
added_maint_cats[error_id] = true; -- note that we've added this category
table.insert (z.maint_cats_t, substitute (error_state.category, arguments)); -- make cat name then add to table
end
return; -- because no message, nothing more to do
end
end
local message = substitute (error_state.message, arguments);
message = table.concat (
{
message,
' (',
make_wikilink (
table.concat (
{
cfg.messages['help page link'],
'#',
error_state.anchor
}),
cfg.messages['help page label']),
')'
});
z.error_ids_t[error_id] = true;
if z.error_ids_t['err_citation_missing_title'] and -- if missing-title error already noted
in_array (error_id, {'err_bare_url_missing_title', 'err_trans_missing_title'}) then -- and this error is one of these
return '', false; -- don't bother because one flavor of missing title is sufficient
end
message = table.concat ({prefix, message, suffix});
if true == raw then
return message, error_state.hidden; -- return message not wrapped in visible-error, hidden-error span tag
end
message = error_comment (message, error_state.hidden); -- wrap message in visible-error, hidden-error span tag
table.insert (z.error_msgs_t, message); -- add it to the messages sequence table
return message; -- and done; return value generally not used but is used as a flag in various functions of ~/Identifiers
end
--[[-------------------------< I S _ A L I A S _ U S E D >-----------------------------------------------------
This function is used by select_one() to determine if one of a list of alias parameters is in the argument list
provided by the template.
Input:
args – pointer to the arguments table from calling template
alias – one of the list of possible aliases in the aliases lists from Module:Citation/CS1/Configuration
index – for enumerated parameters, identifies which one
enumerated – true/false flag used to choose how enumerated aliases are examined
value – value associated with an alias that has previously been selected; nil if not yet selected
selected – the alias that has previously been selected; nil if not yet selected
error_list – list of aliases that are duplicates of the alias already selected
Returns:
value – value associated with alias we selected or that was previously selected or nil if an alias not yet selected
selected – the alias we selected or the alias that was previously selected or nil if an alias not yet selected
]]
local function is_alias_used (args, alias, index, enumerated, value, selected, error_list)
if enumerated then -- is this a test for an enumerated parameters?
alias = alias:gsub ('#', index); -- replace '#' with the value in index
else
alias = alias:gsub ('#', ''); -- remove '#' if it exists
end
if is_set (args[alias]) then -- alias is in the template's argument list
if value ~= nil and selected ~= alias then -- if we have already selected one of the aliases
local skip;
for _, v in ipairs (error_list) do -- spin through the error list to see if we've added this alias
if v == alias then
skip = true;
break; -- has been added so stop looking
end
end
if not skip then -- has not been added so
table.insert (error_list, alias); -- add error alias to the error list
end
else
value = args[alias]; -- not yet selected an alias, so select this one
selected = alias;
end
end
return value, selected; -- return newly selected alias, or previously selected alias
end
--[[--------------------------< A D D _ M A I N T _ C A T >------------------------------------------------------
Adds a category to z.maint_cats_t using names from the configuration file with additional text if any.
To prevent duplication, the added_maint_cats table lists the categories by key that have been added to z.maint_cats_t.
]]
local function add_maint_cat (key, arguments)
if not added_maint_cats [key] then
added_maint_cats [key] = true; -- note that we've added this category
table.insert (z.maint_cats_t, substitute (cfg.maint_cats [key], arguments)); -- make name then add to table
end
end
--[[--------------------------< A D D _ P R O P _ C A T >--------------------------------------------------------
Adds a category to z.prop_cats_t using names from the configuration file with additional text if any.
foreign_lang_source and foreign_lang_source_2 keys have a language code appended to them so that multiple languages
may be categorized but multiples of the same language are not categorized.
added_prop_cats is a table declared in page scope variables above
]]
local added_prop_cats = {}; -- list of property categories that have been added to z.prop_cats_t
local function add_prop_cat (key, arguments, key_modifier)
local key_modified = key .. ((key_modifier and key_modifier) or ''); -- modify <key> with <key_modifier> if present and not nil
if not added_prop_cats [key_modified] then
added_prop_cats [key_modified] = true; -- note that we've added this category
table.insert (z.prop_cats_t, substitute (cfg.prop_cats [key], arguments)); -- make name then add to table
table.insert (z.prop_keys_t, 'cs1-prop-' .. key); -- convert key to class for use in the citation's <cite> tag
end
end
--[[--------------------------< S A F E _ F O R _ I T A L I C S >----------------------------------------------
Protects a string that will be wrapped in wiki italic markup '' ... ''
Note: We cannot use <i> for italics, as the expected behavior for italics specified by ''...'' in the title is that
they will be inverted (i.e. unitalicized) in the resulting references. In addition, <i> and '' tend to interact
poorly under Mediawiki's HTML tidy.
]]
local function safe_for_italics (str)
if not is_set (str) then return str end
if str:sub (1, 1) == "'" then str = "<span></span>" .. str; end
if str:sub (-1, -1) == "'" then str = str .. "<span></span>"; end
return str:gsub ('\n', ' '); -- Remove newlines as they break italics.
end
--[[--------------------------< W R A P _ S T Y L E >----------------------------------------------------------
Applies styling to various parameters. Supplied string is wrapped using a message_list configuration taking one
argument; protects italic styled parameters. Additional text taken from citation_config.presentation - the reason
this function is similar to but separate from wrap_msg().
]]
local function wrap_style (key, str)
if not is_set (str) then
return "";
elseif in_array (key, {'italic-title', 'trans-italic-title'}) then
str = safe_for_italics (str);
end
return substitute (cfg.presentation[key], {str});
end
--[[--------------------------< M A K E _ S E P _ L I S T >------------------------------------------------------------
make a separated list of items using provided separators.
<sep_list> - typically '<comma><space>'
<sep_list_pair> - typically '<space>and<space>'
<sep_list_end> - typically '<comma><space>and<space>' or '<comma><space>&<space>'
defaults to cfg.presentation['sep_list'], cfg.presentation['sep_list_pair'], and cfg.presentation['sep_list_end']
if <sep_list_end> is specified, <sep_list> and <sep_list_pair> must also be supplied
]]
local function make_sep_list (count, list_seq, sep_list, sep_list_pair, sep_list_end)
local list = '';
if not sep_list then -- set the defaults
sep_list = cfg.presentation['sep_list'];
sep_list_pair = cfg.presentation['sep_list_pair'];
sep_list_end = cfg.presentation['sep_list_end'];
end
if 2 >= count then
list = table.concat (list_seq, sep_list_pair); -- insert separator between two items; returns list_seq[1] then only one item
elseif 2 < count then
list = table.concat (list_seq, sep_list, 1, count - 1); -- concatenate all but last item with plain list separator
list = table.concat ({list, list_seq[count]}, sep_list_end); -- concatenate last item onto end of <list> with final separator
end
return list;
end
--[[--------------------------< S E L E C T _ O N E >----------------------------------------------------------
Chooses one matching parameter from a list of parameters to consider. The list of parameters to consider is just
names. For parameters that may be enumerated, the position of the numerator in the parameter name is identified
by the '#' so |author-last1= and |author1-last= are represented as 'author-last#' and 'author#-last'.
Because enumerated parameter |<param>1= is an alias of |<param>= we must test for both possibilities.
Generates an error if more than one match is present.
]]
local function select_one (args, aliases_list, error_condition, index)
local value = nil; -- the value assigned to the selected parameter
local selected = ''; -- the name of the parameter we have chosen
local error_list = {};
if index ~= nil then index = tostring(index); end
for _, alias in ipairs (aliases_list) do -- for each alias in the aliases list
if alias:match ('#') then -- if this alias can be enumerated
if '1' == index then -- when index is 1 test for enumerated and non-enumerated aliases
value, selected = is_alias_used (args, alias, index, false, value, selected, error_list); -- first test for non-enumerated alias
end
value, selected = is_alias_used (args, alias, index, true, value, selected, error_list); -- test for enumerated alias
else
value, selected = is_alias_used (args, alias, index, false, value, selected, error_list); -- test for non-enumerated alias
end
end
if #error_list > 0 and 'none' ~= error_condition then -- for cases where this code is used outside of extract_names()
for i, v in ipairs (error_list) do
error_list[i] = wrap_style ('parameter', v);
end
table.insert (error_list, wrap_style ('parameter', selected));
set_message (error_condition, {make_sep_list (#error_list, error_list)});
end
return value, selected;
end
--[=[-------------------------< R E M O V E _ W I K I _ L I N K >----------------------------------------------
Gets the display text from a wikilink like [[A|B]] or [[B]] gives B
The str:gsub() returns either A|B froma [[A|B]] or B from [[B]] or B from B (no wikilink markup).
In l(), l:gsub() removes the link and pipe (if they exist); the second :gsub() trims whitespace from the label
if str was wrapped in wikilink markup. Presumably, this is because without wikimarkup in str, there is no match
in the initial gsub, the replacement function l() doesn't get called.
]=]
local function remove_wiki_link (str)
return (str:gsub ("%[%[([^%[%]]*)%]%]", function(l)
return l:gsub ("^[^|]*|(.*)$", "%1" ):gsub ("^%s*(.-)%s*$", "%1");
end));
end
--[=[-------------------------< I S _ W I K I L I N K >--------------------------------------------------------
Determines if str is a wikilink, extracts, and returns the wikilink type, link text, and display text parts.
If str is a complex wikilink ([[L|D]]):
returns wl_type 2 and D and L from [[L|D]];
if str is a simple wikilink ([[D]])
returns wl_type 1 and D from [[D]] and L as empty string;
if not a wikilink:
returns wl_type 0, str as D, and L as empty string.
trims leading and trailing whitespace and pipes from L and D ([[L|]] and [[|D]] are accepted by MediaWiki and
treated like [[D]]; while [[|D|]] is not accepted by MediaWiki, here, we accept it and return D without the pipes).
]=]
local function is_wikilink (str)
local D, L
local wl_type = 2; -- assume that str is a complex wikilink [[L|D]]
if not str:match ('^%[%[[^%]]+%]%]$') then -- is str some sort of a wikilink (must have some sort of content)
return 0, str, ''; -- not a wikilink; return wl_type as 0, str as D, and empty string as L
end
L, D = str:match ('^%[%[([^|]+)|([^%]]+)%]%]$'); -- get L and D from [[L|D]]
if not is_set (D) then -- if no separate display
D = str:match ('^%[%[([^%]]*)|*%]%]$'); -- get D from [[D]] or [[D|]]
wl_type = 1;
end
D = mw.text.trim (D, '%s|'); -- trim white space and pipe characters
return wl_type, D, L or '';
end
--[[--------------------------< S T R I P _ A P O S T R O P H E _ M A R K U P >--------------------------------
Strip wiki italic and bold markup from argument so that it doesn't contaminate COinS metadata.
This function strips common patterns of apostrophe markup. We presume that editors who have taken the time to
markup a title have, as a result, provided valid markup. When they don't, some single apostrophes are left behind.
Returns the argument without wiki markup and a number; the number is more-or-less meaningless except as a flag
to indicate that markup was replaced; do not rely on it as an indicator of how many of any kind of markup was
removed; returns the argument and nil when no markup removed
]]
local function strip_apostrophe_markup (argument)
if not is_set (argument) then
return argument, nil; -- no argument, nothing to do
end
if nil == argument:find ( "''", 1, true ) then -- Is there at least one double apostrophe? If not, exit.
return argument, nil;
end
local flag;
while true do
if argument:find ("'''''", 1, true) then -- bold italic (5)
argument, flag = argument:gsub ("%'%'%'%'%'", ""); -- remove all instances of it
elseif argument:find ("''''", 1, true) then -- italic start and end without content (4)
argument, flag=argument:gsub ("%'%'%'%'", "");
elseif argument:find ("'''", 1, true) then -- bold (3)
argument, flag=argument:gsub ("%'%'%'", "");
elseif argument:find ("''", 1, true) then -- italic (2)
argument, flag = argument:gsub ("%'%'", "");
else
break;
end
end
return argument, flag; -- done
end
--[[--------------------------< S E T _ S E L E C T E D _ M O D U L E S >--------------------------------------
Sets local cfg table to same (live or sandbox) as that used by the other modules.
]]
local function set_selected_modules (cfg_table_ptr)
cfg = cfg_table_ptr;
end
--[[--------------------------< E X P O R T S >----------------------------------------------------------------
]]
return {
add_maint_cat = add_maint_cat, -- exported functions
add_prop_cat = add_prop_cat,
error_comment = error_comment,
has_accept_as_written = has_accept_as_written,
hyphen_to_dash = hyphen_to_dash,
in_array = in_array,
is_set = is_set,
is_wikilink = is_wikilink,
make_sep_list = make_sep_list,
make_wikilink = make_wikilink,
remove_wiki_link = remove_wiki_link,
safe_for_italics = safe_for_italics,
select_one = select_one,
set_message = set_message,
set_selected_modules = set_selected_modules,
strip_apostrophe_markup = strip_apostrophe_markup,
substitute = substitute,
wrap_style = wrap_style,
z = z, -- exported table
}
kk801mqzkv4xrvmuck62gy23fyu6dl0
Module:Citation/CS1/Date validation
828
42164542
1133582645
1096003150
2023-01-14T14:43:40Z
Trappist the monk
10289486
sync from sandbox;
Scribunto
text/plain
--[[--------------------------< F O R W A R D D E C L A R A T I O N S >--------------------------------------
]]
local add_prop_cat, is_set, in_array, set_message, substitute, wrap_style; -- imported functions from selected Module:Citation/CS1/Utilities
local cfg; -- table of tables imported from selected Module:Citation/CS1/Configuration
--[[--------------------------< F I L E - S C O P E D E C L A R A T I O N S >--------------------------------
File-scope variables are declared here
]]
local lang_object = mw.getContentLanguage(); -- used by is_valid_accessdate(), is_valid_year(), date_name_xlate(); TODO: move to ~/Configuration?
local year_limit; -- used by is_valid_year()
--[=[-------------------------< I S _ V A L I D _ A C C E S S D A T E >----------------------------------------
returns true if:
Wikipedia start date <= accessdate < today + 2 days
Wikipedia start date is 2001-01-15T00:00:00 UTC which is 979516800 seconds after 1970-01-01T00:00:00 UTC (the start of Unix time)
accessdate is the date provided in |access-date= at time 00:00:00 UTC
today is the current date at time 00:00:00 UTC plus 48 hours
if today is 2015-01-01T00:00:00 then
adding 24 hours gives 2015-01-02T00:00:00 – one second more than today
adding 24 hours gives 2015-01-03T00:00:00 – one second more than tomorrow
This function does not work if it is fed month names for languages other than English. Wikimedia #time: parser
apparently doesn't understand non-English date month names. This function will always return false when the date
contains a non-English month name because good1 is false after the call to lang.formatDate(). To get around that
call this function with YYYY-MM-DD format dates.
]=]
local function is_valid_accessdate (accessdate)
local good1, good2;
local access_ts, tomorrow_ts; -- to hold Unix time stamps representing the dates
good1, access_ts = pcall (lang_object.formatDate, lang_object, 'U', accessdate ); -- convert accessdate value to Unix timestamp
good2, tomorrow_ts = pcall (lang_object.formatDate, lang_object, 'U', 'today + 2 days' ); -- today midnight + 2 days is one second more than all day tomorrow
if good1 and good2 then -- lang.formatDate() returns a timestamp in the local script which which tonumber() may not understand
access_ts = tonumber (access_ts) or lang_object:parseFormattedNumber (access_ts); -- convert to numbers for the comparison;
tomorrow_ts = tonumber (tomorrow_ts) or lang_object:parseFormattedNumber (tomorrow_ts);
else
return false; -- one or both failed to convert to Unix time stamp
end
if 979516800 <= access_ts and access_ts < tomorrow_ts then -- Wikipedia start date <= accessdate < tomorrow's date
return true;
else
return false; -- accessdate out of range
end
end
--[[--------------------------< G E T _ M O N T H _ N U M B E R >----------------------------------------------
returns a number according to the month in a date: 1 for January, etc. Capitalization and spelling must be correct.
If not a valid month, returns 0
]]
local function get_month_number (month)
return cfg.date_names['local'].long[month] or cfg.date_names['local'].short[month] or -- look for local names first
cfg.date_names['en'].long[month] or cfg.date_names['en'].short[month] or -- failing that, look for English names
0; -- not a recognized month name
end
--[[--------------------------< G E T _ S E A S O N _ N U M B E R >--------------------------------------------
returns a number according to the sequence of seasons in a year: 21 for Spring, etc. Capitalization and spelling
must be correct. If not a valid season, returns 0.
21-24 = Spring, Summer, Autumn, Winter, independent of “Hemisphere”
returns 0 when <param> is not |date=
Season numbering is defined by Extended Date/Time Format (EDTF) specification (https://www.loc.gov/standards/datetime/)
which became part of ISO 8601 in 2019. See '§Sub-year groupings'. The standard defines various divisions using
numbers 21-41. cs1|2 only supports generic seasons. EDTF does support the distinction between north and south
hemisphere seasons but cs1|2 has no way to make that distinction.
These additional divisions not currently supported:
25-28 = Spring - Northern Hemisphere, Summer- Northern Hemisphere, Autumn - Northern Hemisphere, Winter - Northern Hemisphere
29-32 = Spring – Southern Hemisphere, Summer– Southern Hemisphere, Autumn – Southern Hemisphere, Winter - Southern Hemisphere
33-36 = Quarter 1, Quarter 2, Quarter 3, Quarter 4 (3 months each)
37-39 = Quadrimester 1, Quadrimester 2, Quadrimester 3 (4 months each)
40-41 = Semestral 1, Semestral-2 (6 months each)
]]
local function get_season_number (season, param)
if 'date' ~= param then
return 0; -- season dates only supported by |date=
end
return cfg.date_names['local'].season[season] or -- look for local names first
cfg.date_names['en'].season[season] or -- failing that, look for English names
0; -- not a recognized season name
end
--[[--------------------------< G E T _ Q U A R T E R _ N U M B E R >------------------------------------------
returns a number according to the sequence of quarters in a year: 33 for first quarter, etc. Capitalization and spelling
must be correct. If not a valid quarter, returns 0.
33-36 = Quarter 1, Quarter 2, Quarter 3, Quarter 4 (3 months each)
returns 0 when <param> is not |date=
Quarter numbering is defined by Extended Date/Time Format (EDTF) specification (https://www.loc.gov/standards/datetime/)
which became part of ISO 8601 in 2019. See '§Sub-year groupings'. The standard defines various divisions using
numbers 21-41. cs1|2 only supports generic seasons and quarters.
These additional divisions not currently supported:
37-39 = Quadrimester 1, Quadrimester 2, Quadrimester 3 (4 months each)
40-41 = Semestral 1, Semestral-2 (6 months each)
]]
local function get_quarter_number (quarter, param)
if 'date' ~= param then
return 0; -- quarter dates only supported by |date=
end
quarter = mw.ustring.gsub (quarter, ' +', ' '); -- special case replace multiple space chars with a single space char
return cfg.date_names['local'].quarter[quarter] or -- look for local names first
cfg.date_names['en'].quarter[quarter] or -- failing that, look for English names
0; -- not a recognized quarter name
end
--[[--------------------------< G E T _ P R O P E R _ N A M E _ N U M B E R >----------------------------------
returns a non-zero number if date contains a recognized proper-name. Capitalization and spelling must be correct.
returns 0 when <param> is not |date=
]]
local function get_proper_name_number (name, param)
if 'date' ~= param then
return 0; -- proper-name dates only supported by |date=
end
return cfg.date_names['local'].named[name] or -- look for local names dates first
cfg.date_names['en'].named[name] or -- failing that, look for English names
0; -- not a recognized named date
end
--[[--------------------------< G E T _ E L E M E N T _ N U M B E R <------------------------------------------
returns true if month or season or quarter or proper name is valid (properly spelled, capitalized, abbreviated)
]]
local function get_element_number (element, param)
local num;
local funcs = {get_month_number, get_season_number, get_quarter_number, get_proper_name_number}; -- list of functions to execute in order
for _, func in ipairs (funcs) do -- spin through the function list
num = func (element, param); -- call the function and get the returned number
if 0 ~= num then -- non-zero when valid month season quarter
return num; -- return that number
end
end
return nil; -- not valid
end
--[[--------------------------< I S _ V A L I D _ Y E A R >----------------------------------------------------
Function gets current year from the server and compares it to year from a citation parameter. Years more than one
year in the future are not acceptable.
Special case for |pmc-embargo-date=: years more than two years in the future are not acceptable
]]
local function is_valid_year (year, param)
if not is_set (year_limit) then
year_limit = tonumber(os.date("%Y"))+1; -- global variable so we only have to fetch it once
end
year = tonumber (year) or lang_object:parseFormattedNumber (year); -- convert to number for the comparison;
if 'pmc-embargo-date' == param then -- special case for |pmc-embargo-date=
return year and (year <= tonumber(os.date("%Y"))+2) or false; -- years more than two years in the future are not accepted
end
return year and (year <= year_limit) or false;
end
--[[--------------------------< I S _ V A L I D _ D A T E >----------------------------------------------------
Returns true if day is less than or equal to the number of days in month and year is no farther into the future
than next year; else returns false.
Assumes Julian calendar prior to year 1582 and Gregorian calendar thereafter. Accounts for Julian calendar leap
years before 1582 and Gregorian leap years after 1582. Where the two calendars overlap (1582 to approximately
1923) dates are assumed to be Gregorian.
]]
local function is_valid_date (year, month, day, param)
local days_in_month = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
local month_length;
if not is_valid_year (year, param) then -- no farther into the future than next year except |pmc-embargo-date= no more than two years in the future
return false;
end
month = tonumber (month); -- required for YYYY-MM-DD dates
if (2 == month) then -- if February
month_length = 28; -- then 28 days unless
if 1582 > tonumber(year) then -- Julian calendar
if 0 == (year%4) then -- is a leap year?
month_length = 29; -- if leap year then 29 days in February
end
else -- Gregorian calendar
if (0 == (year%4) and (0 ~= (year%100) or 0 == (year%400))) then -- is a leap year?
month_length = 29; -- if leap year then 29 days in February
end
end
else
month_length = days_in_month[month];
end
if tonumber (day) > month_length then
return false;
end
return true;
end
--[[--------------------------< I S _ V A L I D _ M O N T H _ R A N G E _ S T Y L E >--------------------------
Months in a range are expected to have the same style: Jan–Mar or October–December but not February–Mar or Jul–August.
This function looks in cfg.date_names{} to see if both month names are listed in the long subtable or both are
listed in the short subtable. When both have the same style (both are listed in the same table), returns true; false else
]]
local function is_valid_month_range_style (month1, month2)
if (cfg.date_names.en.long[month1] and cfg.date_names.en.long[month2]) or -- are both English names listed in the long subtable?
(cfg.date_names.en.short[month1] and cfg.date_names.en.short[month2]) or -- are both English names listed in the short subtable?
(cfg.date_names['local'].long[month1] and cfg.date_names['local'].long[month2]) or -- are both local names listed in the long subtable?
(cfg.date_names['local'].short[month1] and cfg.date_names['local'].short[month2]) then -- are both local names listed in the short subtable?
return true;
end
return false; -- names are mixed
end
--[[--------------------------< I S _ V A L I D _ M O N T H _ S E A S O N _ R A N G E >------------------------
Check a pair of months or seasons to see if both are valid members of a month or season pair.
Month pairs are expected to be left to right, earliest to latest in time.
All season ranges are accepted as valid because there are publishers out there who have published a Summer–Spring YYYY issue, hence treat as ok
]]
local function is_valid_month_season_range(range_start, range_end, param)
local range_start_number = get_month_number (range_start);
local range_end_number;
if 0 == range_start_number then -- is this a month range?
range_start_number = get_season_number (range_start, param); -- not a month; is it a season? get start season number
range_end_number = get_season_number (range_end, param); -- get end season number
if (0 ~= range_start_number) and (0 ~= range_end_number) and (range_start_number ~= range_end_number) then
return true; -- any season pairing is accepted except when both are the same
end
return false; -- range_start and/or range_end is not a season
end
-- here when range_start is a month
range_end_number = get_month_number (range_end); -- get end month number
if range_start_number < range_end_number and -- range_start is a month; does range_start precede range_end?
is_valid_month_range_style (range_start, range_end) then -- do months have the same style?
return true; -- proper order and same style
end
return false; -- range_start month number is greater than or equal to range end number; or range end isn't a month
end
--[[--------------------------< M A K E _ C O I N S _ D A T E >------------------------------------------------
This function receives a table of date parts for one or two dates and an empty table reference declared in
Module:Citation/CS1. The function is called only for |date= parameters and only if the |date=<value> is
determined to be a valid date format. The question of what to do with invalid date formats is not answered here.
The date parts in the input table are converted to an ISO 8601 conforming date string:
single whole dates: yyyy-mm-dd
month and year dates: yyyy-mm
year dates: yyyy
ranges: yyyy-mm-dd/yyyy-mm-dd
yyyy-mm/yyyy-mm
yyyy/yyyy
Dates in the Julian calendar are reduced to year or year/year so that we don't have to do calendar conversion from
Julian to Proleptic Gregorian.
The input table has:
year, year2 – always present; if before 1582, ignore months and days if present
month, month2 – 0 if not provided, 1-12 for months, 21-24 for seasons; 99 Christmas
day, day2 – 0 if not provided, 1-31 for days
the output table receives:
rftdate: an ISO 8601 formatted date
rftchron: a free-form version of the date, usually without year which is in rftdate (season ranges and proper-name dates)
rftssn: one of four season keywords: winter, spring, summer, fall (lowercase)
rftquarter: one of four values: 1, 2, 3, 4
]]
local function make_COinS_date (input, tCOinS_date)
local date; -- one date or first date in a range
local date2 = ''; -- end of range date
-- start temporary Julian / Gregorian calendar uncertainty detection
local year = tonumber(input.year); -- this temporary code to determine the extent of sources dated to the Julian/Gregorian
local month = tonumber(input.month); -- interstice 1 October 1582 – 1 January 1926
local day = tonumber (input.day);
if (0 ~= day) and -- day must have a value for this to be a whole date
(((1582 == year) and (10 <= month) and (12 >= month)) or -- any whole 1582 date from 1 October to 31 December or
((1926 == year) and (1 == month) and (1 == input.day)) or -- 1 January 1926 or
((1582 < year) and (1925 >= year))) then -- any date 1 January 1583 – 31 December 1925
tCOinS_date.inter_cal_cat = true; -- set category flag true
end
-- end temporary Julian / Gregorian calendar uncertainty detection
if 1582 > tonumber(input.year) or 20 < tonumber(input.month) then -- Julian calendar or season so &rft.date gets year only
date = input.year;
if 0 ~= input.year2 and input.year ~= input.year2 then -- if a range, only the second year portion when not the same as range start year
date = string.format ('%.4d/%.4d', tonumber(input.year), tonumber(input.year2)) -- assemble the date range
end
if 20 < tonumber(input.month) then -- if season or proper-name date
local season = {[24] = 'winter', [21] = 'spring', [22] = 'summer', [23] = 'fall', [33] = '1', [34] = '2', [35] = '3', [36] = '4', [98] = 'Easter', [99] = 'Christmas'}; -- seasons lowercase, no autumn; proper-names use title case
if 0 == input.month2 then -- single season date
if 40 < tonumber(input.month) then
tCOinS_date.rftchron = season[input.month]; -- proper-name dates
elseif 30 < tonumber(input.month) then
tCOinS_date.rftquarter = season[input.month]; -- quarters
else
tCOinS_date.rftssn = season[input.month]; -- seasons
end
else -- season range with a second season specified
if input.year ~= input.year2 then -- season year – season year range or season year–year
tCOinS_date.rftssn = season[input.month]; -- start of range season; keep this?
if 0~= input.month2 then
tCOinS_date.rftchron = string.format ('%s %s – %s %s', season[input.month], input.year, season[input.month2], input.year2);
end
else -- season–season year range
tCOinS_date.rftssn = season[input.month]; -- start of range season; keep this?
tCOinS_date.rftchron = season[input.month] .. '–' .. season[input.month2]; -- season–season year range
end
end
end
tCOinS_date.rftdate = date;
return; -- done
end
if 0 ~= input.day then
date = string.format ('%s-%.2d-%.2d', input.year, tonumber(input.month), tonumber(input.day)); -- whole date
elseif 0 ~= input.month then
date = string.format ('%s-%.2d', input.year, tonumber(input.month)); -- year and month
else
date = string.format ('%s', input.year); -- just year
end
if 0 ~= input.year2 then
if 0 ~= input.day2 then
date2 = string.format ('/%s-%.2d-%.2d', input.year2, tonumber(input.month2), tonumber(input.day2)); -- whole date
elseif 0 ~= input.month2 then
date2 = string.format ('/%s-%.2d', input.year2, tonumber(input.month2)); -- year and month
else
date2 = string.format ('/%s', input.year2); -- just year
end
end
tCOinS_date.rftdate = date .. date2; -- date2 has the '/' separator
return;
end
--[[--------------------------< P A T T E R N S >--------------------------------------------------------------
this is the list of patterns for date formats that this module recognizes. Approximately the first half of these
patterns represent formats that might be reformatted into another format. Those that might be reformatted have
'indicator' letters that identify the content of the matching capture: 'd' (day), 'm' (month), 'a' (anchor year),
'y' (year); second day, month, year have a '2' suffix.
These patterns are used for both date validation and for reformatting. This table should not be moved to ~/Configuration
because changes to this table require changes to check_date() and to reformatter() and reformat_date()
]]
local patterns = {
-- year-initial numerical year-month-day
['ymd'] = {'^(%d%d%d%d)%-(%d%d)%-(%d%d)$', 'y', 'm', 'd'},
-- month-initial: month day, year
['Mdy'] = {'^(%D-) +([1-9]%d?), +((%d%d%d%d?)%a?)$', 'm', 'd', 'a', 'y'},
-- month-initial day range: month day–day, year; days are separated by endash
['Md-dy'] = {'^(%D-) +([1-9]%d?)[%-–]([1-9]%d?), +((%d%d%d%d)%a?)$', 'm', 'd', 'd2', 'a', 'y'},
-- day-initial: day month year
['dMy'] = {'^([1-9]%d?) +(%D-) +((%d%d%d%d?)%a?)$', 'd', 'm', 'a', 'y'},
-- year-initial: year month day; day: 1 or 2 two digits, leading zero allowed; not supported at en.wiki
-- ['yMd'] = {'^((%d%d%d%d?)%a?) +(%D-) +(%d%d?)$', 'a', 'y', 'm', 'd'},
-- day-range-initial: day–day month year; days are separated by endash
['d-dMy'] = {'^([1-9]%d?)[%-–]([1-9]%d?) +(%D-) +((%d%d%d%d)%a?)$', 'd', 'd2', 'm', 'a', 'y'},
-- day initial month-day-range: day month - day month year; uses spaced endash
['dM-dMy'] = {'^([1-9]%d?) +(%D-) +[%-–] +([1-9]%d?) +(%D-) +((%d%d%d%d)%a?)$', 'd', 'm', 'd2', 'm2', 'a', 'y'},
-- month initial month-day-range: month day – month day, year; uses spaced endash
['Md-Mdy'] = {'^(%D-) +([1-9]%d?) +[%-–] +(%D-) +([1-9]%d?), +((%d%d%d%d)%a?)$','m', 'd', 'm2', 'd2', 'a', 'y'},
-- day initial month-day-year-range: day month year - day month year; uses spaced endash
['dMy-dMy'] = {'^([1-9]%d?) +(%D-) +(%d%d%d%d) +[%-–] +([1-9]%d?) +(%D-) +((%d%d%d%d)%a?)$', 'd', 'm', 'y', 'd2', 'm2', 'a', 'y2'},
-- month initial month-day-year-range: month day, year – month day, year; uses spaced endash
['Mdy-Mdy'] = {'^(%D-) +([1-9]%d?), +(%d%d%d%d) +[%-–] +(%D-) +([1-9]%d?), +((%d%d%d%d)%a?)$', 'm', 'd', 'y', 'm2', 'd2', 'a', 'y2'},
-- these date formats cannot be converted, per se, but month name can be rendered short or long
-- month/season year - month/season year; separated by spaced endash
['My-My'] = {'^(%D-) +(%d%d%d%d) +[%-–] +(%D-) +((%d%d%d%d)%a?)$', 'm', 'y', 'm2', 'a', 'y2'},
-- month/season range year; months separated by endash
['M-My'] = {'^(%D-)[%-–](%D-) +((%d%d%d%d)%a?)$', 'm', 'm2', 'a', 'y'},
-- month/season year or proper-name year; quarter year when First Quarter YYYY etc.
['My'] = {'^([^%d–]-) +((%d%d%d%d)%a?)$', 'm', 'a', 'y'}, -- this way because endash is a member of %D; %D- will match January–March 2019 when it shouldn't
-- these date formats cannot be converted
['Sy4-y2'] = {'^(%D-) +((%d%d)%d%d)[%-–]((%d%d)%a?)$'}, -- special case Winter/Summer year-year (YYYY-YY); year separated with unspaced endash
['Sy-y'] = {'^(%D-) +(%d%d%d%d)[%-–]((%d%d%d%d)%a?)$'}, -- special case Winter/Summer year-year; year separated with unspaced endash
['y-y'] = {'^(%d%d%d%d?)[%-–]((%d%d%d%d?)%a?)$'}, -- year range: YYY-YYY or YYY-YYYY or YYYY–YYYY; separated by unspaced endash; 100-9999
['y4-y2'] = {'^((%d%d)%d%d)[%-–]((%d%d)%a?)$'}, -- year range: YYYY–YY; separated by unspaced endash
['y'] = {'^((%d%d%d%d?)%a?)$'}, -- year; here accept either YYY or YYYY
}
--[[--------------------------< I S _ V A L I D _ E M B A R G O _ D A T E >------------------------------------
returns true and date value if that value has proper dmy, mdy, ymd format.
returns false and 9999 (embargoed forever) when date value is not proper format; assumes that when |pmc-embargo-date= is
set, the editor intended to embargo a PMC but |pmc-embargo-date= does not hold a single date.
]]
local function is_valid_embargo_date (v)
if v:match (patterns['ymd'][1]) or -- ymd
v:match (patterns['Mdy'][1]) or -- dmy
v:match (patterns['dMy'][1]) then -- mdy
return true, v;
end
return false, '9999'; -- if here not good date so return false and set embargo date to long time in future
end
--[[--------------------------< C H E C K _ D A T E >----------------------------------------------------------
Check date format to see that it is one of the formats approved by WP:DATESNO or WP:DATERANGE. Exception: only
allowed range separator is endash. Additionally, check the date to see that it is a real date: no 31 in 30-day
months; no 29 February when not a leap year. Months, both long-form and three character abbreviations, and seasons
must be spelled correctly. Future years beyond next year are not allowed.
If the date fails the format tests, this function returns false and does not return values for anchor_year and
COinS_date. When this happens, the date parameter is (DEBUG: not?) used in the COinS metadata and the CITEREF identifier gets
its year from the year parameter if present otherwise CITEREF does not get a date value.
Inputs:
date_string - date string from date-holding parameters (date, year, publication-date, access-date, pmc-embargo-date, archive-date, lay-date)
Returns:
false if date string is not a real date; else
true, anchor_year, COinS_date
anchor_year can be used in CITEREF anchors
COinS_date is ISO 8601 format date; see make_COInS_date()
]]
local function check_date (date_string, param, tCOinS_date)
local year; -- assume that year2, months, and days are not used;
local year2 = 0; -- second year in a year range
local month = 0;
local month2 = 0; -- second month in a month range
local day = 0;
local day2 = 0; -- second day in a day range
local anchor_year;
local coins_date;
if date_string:match (patterns['ymd'][1]) then -- year-initial numerical year month day format
year, month, day = date_string:match (patterns['ymd'][1]);
if 12 < tonumber(month) or 1 > tonumber(month) or 1582 > tonumber(year) or 0 == tonumber(day) then return false; end -- month or day number not valid or not Gregorian calendar
anchor_year = year;
elseif mw.ustring.match(date_string, patterns['Mdy'][1]) then -- month-initial: month day, year
month, day, anchor_year, year = mw.ustring.match(date_string, patterns['Mdy'][1]);
month = get_month_number (month);
if 0 == month then return false; end -- return false if month text isn't one of the twelve months
elseif mw.ustring.match(date_string, patterns['Md-dy'][1]) then -- month-initial day range: month day–day, year; days are separated by endash
month, day, day2, anchor_year, year = mw.ustring.match(date_string, patterns['Md-dy'][1]);
if tonumber(day) >= tonumber(day2) then return false; end -- date range order is left to right: earlier to later; dates may not be the same;
month = get_month_number (month);
if 0 == month then return false; end -- return false if month text isn't one of the twelve months
month2=month; -- for metadata
year2 = year;
elseif mw.ustring.match(date_string, patterns['dMy'][1]) then -- day-initial: day month year
day, month, anchor_year, year = mw.ustring.match(date_string, patterns['dMy'][1]);
month = get_month_number (month);
if 0 == month then return false; end -- return false if month text isn't one of the twelve months
--[[ NOT supported at en.wiki
elseif mw.ustring.match(date_string, patterns['yMd'][1]) then -- year-initial: year month day; day: 1 or 2 two digits, leading zero allowed
anchor_year, year, month, day = mw.ustring.match(date_string, patterns['yMd'][1]);
month = get_month_number (month);
if 0 == month then return false; end -- return false if month text isn't one of the twelve months
-- end NOT supported at en.wiki ]]
elseif mw.ustring.match(date_string, patterns['d-dMy'][1]) then -- day-range-initial: day–day month year; days are separated by endash
day, day2, month, anchor_year, year = mw.ustring.match(date_string, patterns['d-dMy'][1]);
if tonumber(day) >= tonumber(day2) then return false; end -- date range order is left to right: earlier to later; dates may not be the same;
month = get_month_number (month);
if 0 == month then return false; end -- return false if month text isn't one of the twelve months
month2 = month; -- for metadata
year2 = year;
elseif mw.ustring.match(date_string, patterns['dM-dMy'][1]) then -- day initial month-day-range: day month - day month year; uses spaced endash
day, month, day2, month2, anchor_year, year = mw.ustring.match(date_string, patterns['dM-dMy'][1]);
if (not is_valid_month_season_range(month, month2)) or not is_valid_year(year) then return false; end -- date range order is left to right: earlier to later;
month = get_month_number (month); -- for metadata
month2 = get_month_number (month2);
year2 = year;
elseif mw.ustring.match(date_string, patterns['Md-Mdy'][1]) then -- month initial month-day-range: month day – month day, year; uses spaced endash
month, day, month2, day2, anchor_year, year = mw.ustring.match(date_string, patterns['Md-Mdy'][1]);
if (not is_valid_month_season_range(month, month2, param)) or not is_valid_year(year) then return false; end
month = get_month_number (month); -- for metadata
month2 = get_month_number (month2);
year2 = year;
elseif mw.ustring.match(date_string, patterns['dMy-dMy'][1]) then -- day initial month-day-year-range: day month year - day month year; uses spaced endash
day, month, year, day2, month2, anchor_year, year2 = mw.ustring.match(date_string, patterns['dMy-dMy'][1]);
if tonumber(year2) <= tonumber(year) then return false; end -- must be sequential years, left to right, earlier to later
if not is_valid_year(year2) or not is_valid_month_range_style(month, month2) then return false; end -- year2 no more than one year in the future; months same style
month = get_month_number (month); -- for metadata
month2 = get_month_number (month2);
if 0 == month or 0 == month2 then return false; end -- both must be valid
elseif mw.ustring.match(date_string, patterns['Mdy-Mdy'][1]) then -- month initial month-day-year-range: month day, year – month day, year; uses spaced endash
month, day, year, month2, day2, anchor_year, year2 = mw.ustring.match(date_string, patterns['Mdy-Mdy'][1]);
if tonumber(year2) <= tonumber(year) then return false; end -- must be sequential years, left to right, earlier to later
if not is_valid_year(year2) or not is_valid_month_range_style(month, month2) then return false; end -- year2 no more than one year in the future; months same style
month = get_month_number (month); -- for metadata
month2 = get_month_number(month2);
if 0 == month or 0 == month2 then return false; end -- both must be valid
elseif mw.ustring.match(date_string, patterns['Sy4-y2'][1]) then -- special case Winter/Summer year-year (YYYY-YY); year separated with unspaced endash
local century;
month, year, century, anchor_year, year2 = mw.ustring.match(date_string, patterns['Sy4-y2'][1]);
if 'Winter' ~= month and 'Summer' ~= month then return false end; -- 'month' can only be Winter or Summer
anchor_year = year .. '–' .. anchor_year; -- assemble anchor_year from both years
year2 = century..year2; -- add the century to year2 for comparisons
if 1 ~= tonumber(year2) - tonumber(year) then return false; end -- must be sequential years, left to right, earlier to later
if not is_valid_year(year2) then return false; end -- no year farther in the future than next year
month = get_season_number(month, param);
elseif mw.ustring.match(date_string, patterns['Sy-y'][1]) then -- special case Winter/Summer year-year; year separated with unspaced endash
month, year, anchor_year, year2 = mw.ustring.match(date_string, patterns['Sy-y'][1]);
month = get_season_number (month, param); -- <month> can only be winter or summer; also for metadata
if (month ~= cfg.date_names['en'].season['Winter']) and (month ~= cfg.date_names['en'].season['Summer']) then
return false; -- not Summer or Winter; abandon
end
anchor_year = year .. '–' .. anchor_year; -- assemble anchor_year from both years
if 1 ~= tonumber(year2) - tonumber(year) then return false; end -- must be sequential years, left to right, earlier to later
if not is_valid_year(year2) then return false; end -- no year farther in the future than next year
elseif mw.ustring.match(date_string, patterns['My-My'][1]) then -- month/season year - month/season year; separated by spaced endash
month, year, month2, anchor_year, year2 = mw.ustring.match(date_string, patterns['My-My'][1]);
anchor_year = year .. '–' .. anchor_year; -- assemble anchor_year from both years
if tonumber(year) >= tonumber(year2) then return false; end -- left to right, earlier to later, not the same
if not is_valid_year(year2) then return false; end -- no year farther in the future than next year
if 0 ~= get_month_number(month) and 0 ~= get_month_number(month2) and is_valid_month_range_style(month, month2) then -- both must be month year, same month style
month = get_month_number(month);
month2 = get_month_number(month2);
elseif 0 ~= get_season_number(month, param) and 0 ~= get_season_number(month2, param) then -- both must be season year, not mixed
month = get_season_number(month, param);
month2 = get_season_number(month2, param);
else
return false;
end
elseif mw.ustring.match(date_string, patterns['M-My'][1]) then -- month/season range year; months separated by endash
month, month2, anchor_year, year = mw.ustring.match(date_string, patterns['M-My'][1]);
if (not is_valid_month_season_range(month, month2, param)) or (not is_valid_year(year)) then return false; end
if 0 ~= get_month_number(month) then -- determined to be a valid range so just check this one to know if month or season
month = get_month_number(month);
month2 = get_month_number(month2);
if 0 == month or 0 == month2 then return false; end
else
month = get_season_number(month, param);
month2 = get_season_number(month2, param);
end
year2 = year;
elseif mw.ustring.match(date_string, patterns['My'][1]) then -- month/season/quarter/proper-name year
month, anchor_year, year = mw.ustring.match(date_string, patterns['My'][1]);
if not is_valid_year(year) then return false; end
month = get_element_number(month, param); -- get month season quarter proper-name number or nil
if not month then return false; end -- not valid whatever it is
elseif mw.ustring.match(date_string, patterns['y-y'][1]) then -- Year range: YYY-YYY or YYY-YYYY or YYYY–YYYY; separated by unspaced endash; 100-9999
year, anchor_year, year2 = mw.ustring.match(date_string, patterns['y-y'][1]);
anchor_year = year .. '–' .. anchor_year; -- assemble anchor year from both years
if tonumber(year) >= tonumber(year2) then return false; end -- left to right, earlier to later, not the same
if not is_valid_year(year2) then return false; end -- no year farther in the future than next year
elseif mw.ustring.match(date_string, patterns['y4-y2'][1]) then -- Year range: YYYY–YY; separated by unspaced endash
local century;
year, century, anchor_year, year2 = mw.ustring.match(date_string, patterns['y4-y2'][1]);
anchor_year = year .. '–' .. anchor_year; -- assemble anchor year from both years
if in_array (param, {'date', 'publication-date', 'year'}) then
add_prop_cat ('year-range-abbreviated');
end
if 13 > tonumber(year2) then return false; end -- don't allow 2003-05 which might be May 2003
year2 = century .. year2; -- add the century to year2 for comparisons
if tonumber(year) >= tonumber(year2) then return false; end -- left to right, earlier to later, not the same
if not is_valid_year(year2) then return false; end -- no year farther in the future than next year
elseif mw.ustring.match(date_string, patterns['y'][1]) then -- year; here accept either YYY or YYYY
anchor_year, year = mw.ustring.match(date_string, patterns['y'][1]);
if false == is_valid_year(year) then
return false;
end
else
return false; -- date format not one of the MOS:DATE approved formats
end
if param ~= 'date' then -- CITEREF disambiguation only allowed in |date=; |year= & |publication-date= promote to date
if anchor_year:match ('%l$') then
return false;
end
end
if 'access-date' == param then -- test accessdate here because we have numerical date parts
if 0 ~= year and 0 ~= month and 0 ~= day and -- all parts of a single date required
0 == year2 and 0 == month2 and 0 == day2 then -- none of these; accessdate must not be a range
if not is_valid_accessdate(year .. '-' .. month .. '-' .. day) then
return false; -- return false when accessdate out of bounds
end
else
return false; -- return false when accessdate is a range of two dates
end
end
local result=true; -- check whole dates for validity; assume true because not all dates will go through this test
if 0 ~= year and 0 ~= month and 0 ~= day and 0 == year2 and 0 == month2 and 0 == day2 then -- YMD (simple whole date)
result = is_valid_date (year, month, day, param); -- <param> for |pmc-embargo-date=
elseif 0 ~= year and 0 ~= month and 0 ~= day and 0 == year2 and 0 == month2 and 0 ~= day2 then -- YMD-d (day range)
result = is_valid_date (year, month, day);
result = result and is_valid_date (year, month, day2);
elseif 0 ~= year and 0 ~= month and 0 ~= day and 0 == year2 and 0 ~= month2 and 0 ~= day2 then -- YMD-md (day month range)
result = is_valid_date (year, month, day);
result = result and is_valid_date (year, month2, day2);
elseif 0 ~= year and 0 ~= month and 0 ~= day and 0 ~= year2 and 0 ~= month2 and 0 ~= day2 then -- YMD-ymd (day month year range)
result = is_valid_date(year, month, day);
result = result and is_valid_date(year2, month2, day2);
end
if false == result then return false; end
if nil ~= tCOinS_date then -- this table only passed into this function when testing |date= parameter values
make_COinS_date ({year = year, month = month, day = day, year2 = year2, month2 = month2, day2 = day2}, tCOinS_date); -- make an ISO 8601 date string for COinS
end
return true, anchor_year; -- format is good and date string represents a real date
end
--[[--------------------------< D A T E S >--------------------------------------------------------------------
Cycle the date-holding parameters in passed table date_parameters_list through check_date() to check compliance with MOS:DATE. For all valid dates, check_date() returns
true. The |date= parameter test is unique, it is the only date holding parameter from which values for anchor_year (used in CITEREF identifiers) and COinS_date (used in
the COinS metadata) are derived. The |date= parameter is the only date-holding parameter that is allowed to contain the no-date keywords "n.d." or "nd" (without quotes).
Unlike most error messages created in this module, only one error message is created by this function. Because all of the date holding parameters are processed serially,
parameters with errors are added to the <error_list> sequence table as the dates are tested.
]]
local function dates(date_parameters_list, tCOinS_date, error_list)
local anchor_year; -- will return as nil if the date being tested is not |date=
local COinS_date; -- will return as nil if the date being tested is not |date=
local embargo_date; -- if embargo date is a good dmy, mdy, ymd date then holds original value else reset to 9999
local good_date = false;
for k, v in pairs(date_parameters_list) do -- for each date-holding parameter in the list
if is_set(v.val) then -- if the parameter has a value
v.val = mw.ustring.gsub(v.val, '%d', cfg.date_names.local_digits); -- translate 'local' digits to Western 0-9
if v.val:match("^c%. [1-9]%d%d%d?%a?$") then -- special case for c. year or with or without CITEREF disambiguator - only |date= and |year=
local year = v.val:match("c%. ([1-9]%d%d%d?)%a?"); -- get the year portion so it can be tested
if 'date' == k then
anchor_year, COinS_date = v.val:match("((c%. [1-9]%d%d%d?)%a?)"); -- anchor year and COinS_date only from |date= parameter
good_date = is_valid_year(year);
elseif 'year' == k then
good_date = is_valid_year(year);
end
elseif 'date' == k then -- if the parameter is |date=
if v.val:match("^n%.d%.%a?$") then -- ToDo: I18N -- if |date=n.d. with or without a CITEREF disambiguator
good_date, anchor_year, COinS_date = true, v.val:match("((n%.d%.)%a?)"); -- ToDo: I18N -- "n.d."; no error when date parameter is set to no date
elseif v.val:match("^nd%a?$") then -- ToDo: I18N -- if |date=nd with or without a CITEREF disambiguator
good_date, anchor_year, COinS_date = true, v.val:match("((nd)%a?)"); -- ToDo: I18N -- "nd"; no error when date parameter is set to no date
else
good_date, anchor_year, COinS_date = check_date (v.val, k, tCOinS_date); -- go test the date
end
elseif 'year' == k then -- if the parameter is |year= it should hold only a year value
if v.val:match("^[1-9]%d%d%d?%a?$") then -- if |year = 3 or 4 digits only with or without a CITEREF disambiguator
good_date, anchor_year, COinS_date = true, v.val:match("((%d+)%a?)");
end
elseif 'pmc-embargo-date' == k then -- if the parameter is |pmc-embargo-date=
good_date = check_date (v.val, k); -- go test the date
if true == good_date then -- if the date is a valid date
good_date, embargo_date = is_valid_embargo_date (v.val); -- is |pmc-embargo-date= date a single dmy, mdy, or ymd formatted date? yes: returns embargo date; no: returns 9999
end
else -- any other date-holding parameter
good_date = check_date (v.val, k); -- go test the date
end
if false == good_date then -- assemble one error message so we don't add the tracking category multiple times
table.insert (error_list, wrap_style ('parameter', v.name)); -- make parameter name suitable for error message list
end
end
end
return anchor_year, embargo_date; -- and done
end
--[[--------------------------< Y E A R _ D A T E _ C H E C K >------------------------------------------------
Compare the value provided in |year= with the year value(s) provided in |date=. This function sets a local numeric value:
0 - year value does not match the year value in date
1 - (default) year value matches the year value in date or one of the year values when date contains two years
2 - year value matches the year value in date when date is in the form YYYY-MM-DD and year is disambiguated (|year=YYYYx)
the numeric value in <result> determines the 'output' if any from this function:
0 – adds error message to error_list sequence table
1 – adds maint cat
2 – does nothing
]]
local function year_date_check (year_string, year_origin, date_string, date_origin, error_list)
local year;
local date1;
local date2;
local result = 1; -- result of the test; assume that the test passes
year = year_string:match ('(%d%d%d%d?)');
if date_string:match ('%d%d%d%d%-%d%d%-%d%d') and year_string:match ('%d%d%d%d%a') then --special case where both date and year are required YYYY-MM-DD and YYYYx
date1 = date_string:match ('(%d%d%d%d)');
year = year_string:match ('(%d%d%d%d)');
if year ~= date1 then
result = 0; -- years don't match
else
result = 2; -- years match; but because disambiguated, don't add to maint cat
end
elseif date_string:match ("%d%d%d%d?.-%d%d%d%d?") then -- any of the standard range formats of date with two three- or four-digit years
date1, date2 = date_string:match ("(%d%d%d%d?).-(%d%d%d%d?)");
if year ~= date1 and year ~= date2 then
result = 0;
end
elseif mw.ustring.match(date_string, "%d%d%d%d[%-–]%d%d") then -- YYYY-YY date ranges
local century;
date1, century, date2 = mw.ustring.match(date_string, "((%d%d)%d%d)[%-–]+(%d%d)");
date2 = century..date2; -- convert YY to YYYY
if year ~= date1 and year ~= date2 then
result = 0;
end
elseif date_string:match ("%d%d%d%d?") then -- any of the standard formats of date with one year
date1 = date_string:match ("(%d%d%d%d?)");
if year ~= date1 then
result = 0;
end
else -- should never get here; this function called only when no other date errors
result = 0; -- no recognizable year in date
end
if 0 == result then -- year / date mismatch
table.insert (error_list, substitute (cfg.messages['mismatch'], {year_origin, date_origin})); -- add error message to error_list sequence table
elseif 1 == result then -- redundant year / date
set_message ('maint_date_year'); -- add a maint cat
end
end
--[[--------------------------< R E F O R M A T T E R >--------------------------------------------------------
reformat 'date' into new format specified by format_param if pattern_idx (the current format of 'date') can be
reformatted. Does the grunt work for reformat_dates().
The table re_formats maps pattern_idx (current format) and format_param (desired format) to a table that holds:
format string used by string.format()
identifier letters ('d', 'm', 'y', 'd2', 'm2', 'y2') that serve as indexes into a table t{} that holds captures
from mw.ustring.match() for the various date parts specified by patterns[pattern_idx][1]
Items in patterns{} have the general form:
['ymd'] = {'^(%d%d%d%d)%-(%d%d)%-(%d%d)$', 'y', 'm', 'd'}, where:
['ymd'] is pattern_idx
patterns['ymd'][1] is the match pattern with captures for mw.ustring.match()
patterns['ymd'][2] is an indicator letter identifying the content of the first capture
patterns['ymd'][3] ... the second capture etc.
when a pattern matches a date, the captures are loaded into table t{} in capture order using the idemtifier
characters as indexes into t{} For the above, a ymd date is in t{} as:
t.y = first capture (year), t.m = second capture (month), t.d = third capture (day)
To reformat, this function is called with the pattern_idx that matches the current format of the date and with
format_param set to the desired format. This function loads table t{} as described and then calls string.format()
with the format string specified by re_format[pattern_idx][format_param][1] using values taken from t{} according
to the capture identifier letters specified by patterns[pattern_idx][format_param][n] where n is 2..
]]
local re_formats = {
['ymd'] = { -- date format is ymd; reformat to:
['mdy'] = {'%s %s, %s', 'm', 'd', 'y'}, -- |df=mdy
['dmy'] = {'%s %s %s', 'd', 'm', 'y'}, -- |df=dmy
-- ['yMd'] = {'%s %s %s', 'y', 'm', 'd'}, -- |df=yMd; not supported at en.wiki
},
['Mdy'] = { -- date format is Mdy; reformat to:
['mdy'] = {'%s %s, %s', 'm', 'd', 'y'}, -- for long/short reformatting
['dmy'] = {'%s %s %s', 'd', 'm', 'y'}, -- |df=dmy
['ymd'] = {'%s-%s-%s', 'y', 'm', 'd'}, -- |df=ymd
-- ['yMd'] = {'%s %s %s', 'y', 'm', 'd'}, -- |df=yMd; not supported at en.wiki
},
['dMy'] = { -- date format is dMy; reformat to:
['dmy'] = {'%s %s %s', 'd', 'm', 'y'}, -- for long/short reformatting
['mdy'] = {'%s %s, %s', 'm', 'd', 'y'}, -- |df=mdy
['ymd'] = {'%s-%s-%s', 'y', 'm', 'd'}, -- |df=ymd
-- ['yMd'] = {'%s %s %s', 'y', 'm', 'd'}, -- |df=yMd; not supported at en.wiki
},
['Md-dy'] = { -- date format is Md-dy; reformat to:
['mdy'] = {'%s %s–%s, %s', 'm', 'd', 'd2', 'y'}, -- for long/short reformatting
['dmy'] = {'%s–%s %s %s', 'd', 'd2', 'm', 'y'}, -- |df=dmy -> d-dMy
},
['d-dMy'] = { -- date format is d-d>y; reformat to:
['dmy'] = {'%s–%s %s %s', 'd', 'd2', 'm', 'y'}, -- for long/short reformatting
['mdy'] = {'%s %s–%s, %s', 'm', 'd', 'd2', 'y'}, -- |df=mdy -> Md-dy
},
['dM-dMy'] = { -- date format is dM-dMy; reformat to:
['dmy'] = {'%s %s – %s %s %s', 'd', 'm', 'd2', 'm2', 'y'}, -- for long/short reformatting
['mdy'] = {'%s %s – %s %s, %s', 'm', 'd', 'm2', 'd2', 'y'}, -- |df=mdy -> Md-Mdy
},
['Md-Mdy'] = { -- date format is Md-Mdy; reformat to:
['mdy'] = {'%s %s – %s %s, %s', 'm', 'd', 'm2', 'd2', 'y'}, -- for long/short reformatting
['dmy'] = {'%s %s – %s %s %s', 'd', 'm', 'd2', 'm2', 'y'}, -- |df=dmy -> dM-dMy
},
['dMy-dMy'] = { -- date format is dMy-dMy; reformat to:
['dmy'] = {'%s %s %s – %s %s %s', 'd', 'm', 'y', 'd2', 'm2', 'y2'}, -- for long/short reformatting
['mdy'] = {'%s %s, %s – %s %s, %s', 'm', 'd', 'y', 'm2', 'd2', 'y2'}, -- |df=mdy -> Mdy-Mdy
},
['Mdy-Mdy'] = { -- date format is Mdy-Mdy; reformat to:
['mdy'] = {'%s %s, %s – %s %s, %s', 'm', 'd', 'y', 'm2', 'd2', 'y2'}, -- for long/short reformatting
['dmy'] = {'%s %s %s – %s %s %s', 'd', 'm', 'y', 'd2', 'm2', 'y2'}, -- |df=dmy -> dMy-dMy
},
['My-My'] = { -- these for long/short reformatting
['any'] = {'%s %s – %s %s', 'm', 'y', 'm2', 'y2'}, -- dmy/mdy agnostic
},
['M-My'] = { -- these for long/short reformatting
['any'] = {'%s–%s %s', 'm', 'm2', 'y'}, -- dmy/mdy agnostic
},
['My'] = { -- these for long/short reformatting
['any'] = {'%s %s', 'm', 'y'}, -- dmy/mdy agnostic
},
-- ['yMd'] = { -- not supported at en.wiki
-- ['mdy'] = {'%s %s, %s', 'm', 'd', 'y'}, -- |df=mdy
-- ['dmy'] = {'%s %s %s', 'd', 'm', 'y'}, -- |df=dmy
-- ['ymd'] = {'%s-%s-%s', 'y', 'm', 'd'}, -- |df=ymd
-- },
}
local function reformatter (date, pattern_idx, format_param, mon_len)
if not in_array (pattern_idx, {'ymd', 'Mdy', 'Md-dy', 'dMy', 'yMd', 'd-dMy', 'dM-dMy', 'Md-Mdy', 'dMy-dMy', 'Mdy-Mdy', 'My-My', 'M-My', 'My'}) then
return; -- not in this set of date format patterns then not a reformattable date
end
if 'ymd' == format_param and in_array (pattern_idx, {'ymd', 'Md-dy', 'd-dMy', 'dM-dMy', 'Md-Mdy', 'dMy-dMy', 'Mdy-Mdy', 'My-My', 'M-My', 'My'}) then
return; -- ymd date ranges not supported at en.wiki; no point in reformatting ymd to ymd
end
if in_array (pattern_idx, {'My', 'M-My', 'My-My'}) then -- these are not dmy/mdy so can't be 'reformatted' into either
format_param = 'any'; -- so format-agnostic
end
-- yMd is not supported at en.wiki; when yMd is supported at your wiki, uncomment the next line
-- if 'yMd' == format_param and in_array (pattern_idx, {'yMd', 'Md-dy', 'd-dMy', 'dM-dMy', 'Md-Mdy', 'dMy-dMy', 'Mdy-Mdy'}) then -- these formats not convertable; yMd not supported at en.wiki
if 'yMd' == format_param then -- yMd not supported at en.wiki; when yMd is supported at your wiki, remove or comment-out this line
return; -- not a reformattable date
end
local c1, c2, c3, c4, c5, c6, c7; -- these hold the captures specified in patterns[pattern_idx][1]
c1, c2, c3, c4, c5, c6, c7 = mw.ustring.match (date, patterns[pattern_idx][1]); -- get the captures
local t = { -- table that holds k/v pairs of date parts from the captures and patterns[pattern_idx][2..]
[patterns[pattern_idx][2]] = c1; -- at minimum there is always one capture with a matching indicator letter
[patterns[pattern_idx][3] or 'x'] = c2; -- patterns can have a variable number of captures; each capture requires an indicator letter;
[patterns[pattern_idx][4] or 'x'] = c3; -- where there is no capture, there is no indicator letter so n in patterns[pattern_idx][n] will be nil;
[patterns[pattern_idx][5] or 'x'] = c4; -- the 'x' here spoofs an indicator letter to prevent 'table index is nil' error
[patterns[pattern_idx][6] or 'x'] = c5;
[patterns[pattern_idx][7] or 'x'] = c6;
[patterns[pattern_idx][8] or 'x'] = c7;
};
if t.a then -- if this date has an anchor year capture (all convertable date formats except ymd)
if t.y2 then -- for year range date formats
t.y2 = t.a; -- use the anchor year capture when reassembling the date
else -- here for single date formats (except ymd)
t.y = t.a; -- use the anchor year capture when reassembling the date
end
end
if tonumber(t.m) then -- if raw month is a number (converting from ymd)
if 's' == mon_len then -- if we are to use abbreviated month names
t.m = cfg.date_names['inv_local_short'][tonumber(t.m)]; -- convert it to a month name
else
t.m = cfg.date_names['inv_local_long'][tonumber(t.m)]; -- convert it to a month name
end
t.d = t.d:gsub ('0(%d)', '%1'); -- strip leading '0' from day if present
elseif 'ymd' == format_param then -- when converting to ymd
t.y = t.y:gsub ('%a', ''); -- strip CITREF disambiguator if present; anchor year already known so process can proceed; TODO: maint message?
if 1582 > tonumber (t.y) then -- ymd format dates not allowed before 1582
return;
end
t.m = string.format ('%02d', get_month_number (t.m)); -- make sure that month and day are two digits
t.d = string.format ('%02d', t.d);
elseif mon_len then -- if mon_len is set to either 'short' or 'long'
for _, mon in ipairs ({'m', 'm2'}) do -- because there can be two month names, check both
if t[mon] then
t[mon] = get_month_number (t[mon]); -- get the month number for this month (is length agnostic)
if 0 == t[mon] then return; end -- seasons and named dates can't be converted
t[mon] = (('s' == mon_len) and cfg.date_names['inv_local_short'][t[mon]]) or cfg.date_names['inv_local_long'][t[mon]]; -- fetch month name according to length
end
end
end
local new_date = string.format (re_formats[pattern_idx][format_param][1], -- format string
t[re_formats[pattern_idx][format_param][2]], -- named captures from t{}
t[re_formats[pattern_idx][format_param][3]],
t[re_formats[pattern_idx][format_param][4]],
t[re_formats[pattern_idx][format_param][5]],
t[re_formats[pattern_idx][format_param][6]],
t[re_formats[pattern_idx][format_param][7]],
t[re_formats[pattern_idx][format_param][8]]
);
return new_date;
end
--[[-------------------------< R E F O R M A T _ D A T E S >--------------------------------------------------
Reformats existing dates into the format specified by format.
format is one of several manual keywords: dmy, dmy-all, mdy, mdy-all, ymd, ymd-all. The -all version includes
access- and archive-dates; otherwise these dates are not reformatted.
This function allows automatic date formatting. In ~/Configuration, the article source is searched for one of
the {{use xxx dates}} templates. If found, xxx becomes the global date format as xxx-all. If |cs1-dates= in
{{use xxx dates}} has legitimate value then that value determines how cs1|2 dates will be rendered. Legitimate
values for |cs1-dates= are:
l - all dates are rendered with long month names
ls - publication dates use long month names; access-/archive-dates use abbreviated month names
ly - publication dates use long month names; access-/archive-dates rendered in ymd format
s - all dates are rendered with abbreviated (short) month names
sy - publication dates use abbreviated month names; access-/archive-dates rendered in ymd format
y - all dates are rendered in ymd format
the format argument for automatic date formatting will be the format specified by {{use xxx dates}} with the
value supplied by |cs1-dates so one of: xxx-l, xxx-ls, xxx-ly, xxx-s, xxx-sy, xxx-y, or simply xxx (|cs1-dates=
empty, omitted, or invalid) where xxx shall be either of dmy or mdy.
dates are extracted from date_parameters_list, reformatted (if appropriate), and then written back into the
list in the new format. Dates in date_parameters_list are presumed here to be valid (no errors). This function
returns true when a date has been reformatted, false else. Actual reformatting is done by reformatter().
]]
local function reformat_dates (date_parameters_list, format)
local all = false; -- set to false to skip access- and archive-dates
local len_p = 'l'; -- default publication date length shall be long
local len_a = 'l'; -- default access-/archive-date length shall be long
local result = false;
local new_date;
if format:match('%a+%-all') then -- manual df keyword; auto df keyword when length not specified in {{use xxx dates}};
format = format:match('(%a+)%-all'); -- extract the format
all = true; -- all dates are long format dates because this keyword doesn't specify length
elseif format:match('%a+%-[lsy][sy]?') then -- auto df keywords; internal only
all = true; -- auto df applies to all dates; use length specified by capture len_p for all dates
format, len_p, len_a = format:match('(%a+)%-([lsy])([sy]?)'); -- extract the format and length keywords
if 'y' == len_p then -- because allowed by MOS:DATEUNIFY (sort of) range dates and My dates not reformatted
format = 'ymd'; -- override {{use xxx dates}}
elseif (not is_set(len_a)) or (len_p == len_a) then -- no access-/archive-date length specified or same length as publication dates then
len_a = len_p; -- in case len_a not set
end
end -- else only publication dates and they are long
for param_name, param_val in pairs (date_parameters_list) do -- for each date-holding parameter in the list
if is_set (param_val.val) then -- if the parameter has a value
if not (not all and in_array (param_name, {'access-date', 'archive-date'})) then -- skip access- or archive-date unless format is xxx-all; yeah, ugly; TODO: find a better way
for pattern_idx, pattern in pairs (patterns) do
if mw.ustring.match (param_val.val, pattern[1]) then
if all and in_array (param_name, {'access-date', 'archive-date'}) then -- if this date is an access- or archive-date
new_date = reformatter (param_val.val, pattern_idx, (('y' == len_a) and 'ymd') or format, len_a); -- choose ymd or dmy/mdy according to len_a setting
else -- all other dates
new_date = reformatter (param_val.val, pattern_idx, format, len_p);
end
if new_date then -- set when date was reformatted
date_parameters_list[param_name].val = new_date; -- update date in date list
result = true; -- and announce that changes have been made
end
end -- if
end -- for
end -- if
end -- if
end -- for
return result; -- declare boolean result and done
end
--[[--------------------------< D A T E _ H Y P H E N _ T O _ D A S H >----------------------------------------
Loops through the list of date-holding parameters and converts any hyphen to an ndash. Not called if the cs1|2
template has any date errors.
Modifies the date_parameters_list and returns true if hyphens are replaced, else returns false.
]]
local function date_hyphen_to_dash (date_parameters_list)
local result = false;
local n;
for param_name, param_val in pairs(date_parameters_list) do -- for each date-holding parameter in the list
if is_set (param_val.val) and
not mw.ustring.match (param_val.val, patterns.ymd[1]) then -- for those that are not ymd dates (ustring because here digits may not be Western)
param_val.val, n = param_val.val:gsub ('%-', '–'); -- replace any hyphen with ndash
if 0 ~= n then
date_parameters_list[param_name].val = param_val.val; -- update the list
result = true;
end
end
end
return result; -- so we know if any hyphens were replaced
end
--[[-------------------------< D A T E _ N A M E _ X L A T E >------------------------------------------------
Attempts to translate English date names to local-language date names using names supplied by MediaWiki's
date parser function. This is simple name-for-name replacement and may not work for all languages.
if xlat_dig is true, this function will also translate Western (English) digits to the local language's digits.
This will also translate ymd dates.
]]
local function date_name_xlate (date_parameters_list, xlt_dig)
local xlate;
local mode; -- long or short month names
local modified = false;
local date;
local sources_t = {
{cfg.date_names.en.long, cfg.date_names.inv_local_long}, -- for translating long English month names to long local month names
{cfg.date_names.en.short, cfg.date_names.inv_local_short}, -- short month names
{cfg.date_names.en.quarter, cfg.date_names.inv_local_quarter}, -- quarter date names
{cfg.date_names.en.season, cfg.date_names.inv_local_season}, -- season date nam
{cfg.date_names.en.named, cfg.date_names.inv_local_named}, -- named dates
}
local function is_xlateable (month) -- local function to get local date name that replaces existing English-language date name
for _, date_names_t in ipairs (sources_t) do -- for each sequence table in date_names_t
if date_names_t[1][month] then -- if date name is English month (long or short), quarter, season or named and
if date_names_t[2][date_names_t[1][month]] then -- if there is a matching local date name
return date_names_t[2][date_names_t[1][month]]; -- return the local date name
end
end
end
end
for param_name, param_val in pairs(date_parameters_list) do -- for each date-holding parameter in the list
if is_set(param_val.val) then -- if the parameter has a value
date = param_val.val;
for month in mw.ustring.gmatch (date, '[%a ]+') do -- iterate through all date names in the date (single date or date range)
month = mw.text.trim (month); -- this because quarterly dates contain whitespace
xlate = is_xlateable (month); -- get translate <month>; returns translation or nil
if xlate then
date = mw.ustring.gsub (date, month, xlate); -- replace the English with the translation
date_parameters_list[param_name].val = date; -- save the translated date
modified = true;
end
end
if xlt_dig then -- shall we also translate digits?
date = date:gsub ('%d', cfg.date_names.xlate_digits); -- translate digits from Western to 'local digits'
date_parameters_list[param_name].val = date; -- save the translated date
modified = true;
end
end
end
return modified;
end
--[[--------------------------< S E T _ S E L E C T E D _ M O D U L E S >--------------------------------------
Sets local imported functions table to same (live or sandbox) as that used by the other modules.
]]
local function set_selected_modules (cfg_table_ptr, utilities_page_ptr)
add_prop_cat = utilities_page_ptr.add_prop_cat ; -- import functions from selected Module:Citation/CS1/Utilities module
is_set = utilities_page_ptr.is_set;
in_array = utilities_page_ptr.in_array;
set_message = utilities_page_ptr.set_message;
substitute = utilities_page_ptr.substitute;
wrap_style = utilities_page_ptr.wrap_style;
cfg = cfg_table_ptr; -- import tables from selected Module:Citation/CS1/Configuration
end
--[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------
]]
return { -- return exported functions
dates = dates,
year_date_check = year_date_check,
reformat_dates = reformat_dates,
date_hyphen_to_dash = date_hyphen_to_dash,
date_name_xlate = date_name_xlate,
set_selected_modules = set_selected_modules
}
8a90tdzc01kru5rn12zzcqdyok84u39
Module:Citation/CS1/Identifiers
828
48812124
1133582641
1067249010
2023-01-14T14:43:38Z
Trappist the monk
10289486
sync from sandbox;
Scribunto
text/plain
--[[--------------------------< F O R W A R D D E C L A R A T I O N S >--------------------------------------
]]
local has_accept_as_written, is_set, in_array, set_message, select_one, -- functions in Module:Citation/CS1/Utilities
substitute, make_wikilink;
local z; -- table of tables defined in Module:Citation/CS1/Utilities
local cfg; -- table of configuration tables that are defined in Module:Citation/CS1/Configuration
--[[--------------------------< P A G E S C O P E V A R I A B L E S >--------------------------------------
declare variables here that have page-wide scope that are not brought in from other modules; that are created here and used here
]]
local auto_link_urls = {}; -- holds identifier URLs for those identifiers that can auto-link |title=
--============================<< H E L P E R F U N C T I O N S >>============================================
--[[--------------------------< W I K I D A T A _ A R T I C L E _ N A M E _ G E T >----------------------------
as an aid to internationalizing identifier-label wikilinks, gets identifier article names from Wikidata.
returns :<lang code>:<article title> when <q> has an <article title> for <lang code>; nil else
for identifiers that do not have q, returns nil
for wikis that do not have mw.wikibase installed, returns nil
]]
local function wikidata_article_name_get (q)
if not is_set (q) or (q and not mw.wikibase) then -- when no q number or when a q number but mw.wikibase not installed on this wiki
return nil; -- abandon
end
local wd_article;
local this_wiki_code = cfg.this_wiki_code; -- Wikipedia subdomain; 'en' for en.wikipedia.org
wd_article = mw.wikibase.getSitelink (q, this_wiki_code .. 'wiki'); -- fetch article title from WD; nil when no title available at this wiki
if wd_article then
wd_article = table.concat ({':', this_wiki_code, ':', wd_article}); -- interwiki-style link without brackets if taken from WD; leading colon required
end
return wd_article; -- article title from WD; nil else
end
--[[--------------------------< L I N K _ L A B E L _ M A K E >------------------------------------------------
common function to create identifier link label from handler table or from Wikidata
returns the first available of
1. redirect from local wiki's handler table (if enabled)
2. Wikidata (if there is a Wikidata entry for this identifier in the local wiki's language)
3. label specified in the local wiki's handler table
]]
local function link_label_make (handler)
local wd_article;
if not (cfg.use_identifier_redirects and is_set (handler.redirect)) then -- redirect has priority so if enabled and available don't fetch from Wikidata because expensive
wd_article = wikidata_article_name_get (handler.q); -- if Wikidata has an article title for this wiki, get it;
end
return (cfg.use_identifier_redirects and is_set (handler.redirect) and handler.redirect) or wd_article or handler.link;
end
--[[--------------------------< E X T E R N A L _ L I N K _ I D >----------------------------------------------
Formats a wiki-style external link
]]
local function external_link_id (options)
local url_string = options.id;
local ext_link;
local this_wiki_code = cfg.this_wiki_code; -- Wikipedia subdomain; 'en' for en.wikipedia.org
local wd_article; -- article title from Wikidata
if options.encode == true or options.encode == nil then
url_string = mw.uri.encode (url_string, 'PATH');
end
if options.auto_link and is_set (options.access) then
auto_link_urls[options.auto_link] = table.concat ({options.prefix, url_string, options.suffix});
end
ext_link = mw.ustring.format ('[%s%s%s %s]', options.prefix, url_string, options.suffix or "", mw.text.nowiki (options.id));
if is_set (options.access) then
ext_link = substitute (cfg.presentation['ext-link-access-signal'], {cfg.presentation[options.access].class, cfg.presentation[options.access].title, ext_link}); -- add the free-to-read / paywall lock
end
return table.concat ({
make_wikilink (link_label_make (options), options.label), -- redirect, Wikidata link, or locally specified link (in that order)
options.separator or ' ',
ext_link
});
end
--[[--------------------------< I N T E R N A L _ L I N K _ I D >----------------------------------------------
Formats a wiki-style internal link
TODO: Does not currently need to support options.access, options.encode, auto-linking and COinS (as in external_link_id),
but may be needed in the future for :m:Interwiki_map custom-prefixes like :arxiv:, :bibcode:, :DOI:, :hdl:, :ISSN:,
:JSTOR:, :Openlibrary:, :PMID:, :RFC:.
]]
local function internal_link_id (options)
local id = mw.ustring.gsub (options.id, '%d', cfg.date_names.local_digits); -- translate 'local' digits to Western 0-9
return table.concat (
{
make_wikilink (link_label_make (options), options.label), -- wiki-link the identifier label
options.separator or ' ', -- add the separator
make_wikilink (
table.concat (
{
options.prefix,
id, -- translated to Western digits
options.suffix or ''
}),
substitute (cfg.presentation['bdi'], {'', mw.text.nowiki (options.id)}) -- bdi tags to prevent Latin script identifiers from being reversed at RTL language wikis
); -- nowiki because MediaWiki still has magic links for ISBN and the like; TODO: is it really required?
});
end
--[[--------------------------< I S _ E M B A R G O E D >------------------------------------------------------
Determines if a PMC identifier's online version is embargoed. Compares the date in |pmc-embargo-date= against
today's date. If embargo date is in the future, returns the content of |pmc-embargo-date=; otherwise, returns
an empty string because the embargo has expired or because |pmc-embargo-date= was not set in this cite.
]]
local function is_embargoed (embargo)
if is_set (embargo) then
local lang = mw.getContentLanguage();
local good1, embargo_date, todays_date;
good1, embargo_date = pcall (lang.formatDate, lang, 'U', embargo);
todays_date = lang:formatDate ('U');
if good1 then -- if embargo date is a good date
if tonumber (embargo_date) >= tonumber (todays_date) then -- is embargo date is in the future?
return embargo; -- still embargoed
else
set_message ('maint_pmc_embargo'); -- embargo has expired; add main cat
return ''; -- unset because embargo has expired
end
end
end
return ''; -- |pmc-embargo-date= not set return empty string
end
--[=[-------------------------< I S _ V A L I D _ B I O R X I V _ D A T E >------------------------------------
returns true if:
2019-12-11T00:00Z <= biorxiv_date < today + 2 days
The dated form of biorxiv identifier has a start date of 2019-12-11. The Unix timestamp for that date is {{#time:U|2019-12-11}} = 1576022400
biorxiv_date is the date provided in those |biorxiv= parameter values that are dated at time 00:00:00 UTC
today is the current date at time 00:00:00 UTC plus 48 hours
if today is 2015-01-01T00:00:00 then
adding 24 hours gives 2015-01-02T00:00:00 – one second more than today
adding 24 hours gives 2015-01-03T00:00:00 – one second more than tomorrow
This function does not work if it is fed month names for languages other than English. Wikimedia #time: parser
apparently doesn't understand non-English date month names. This function will always return false when the date
contains a non-English month name because good1 is false after the call to lang_object.formatDate(). To get
around that call this function with date parts and create a YYYY-MM-DD format date.
]=]
local function is_valid_biorxiv_date (y, m, d)
local biorxiv_date = table.concat ({y, m, d}, '-'); -- make ymd date
local good1, good2;
local biorxiv_ts, tomorrow_ts; -- to hold Unix timestamps representing the dates
local lang_object = mw.getContentLanguage();
good1, biorxiv_ts = pcall (lang_object.formatDate, lang_object, 'U', biorxiv_date); -- convert biorxiv_date value to Unix timestamp
good2, tomorrow_ts = pcall (lang_object.formatDate, lang_object, 'U', 'today + 2 days' ); -- today midnight + 2 days is one second more than all day tomorrow
if good1 and good2 then -- lang.formatDate() returns a timestamp in the local script which tonumber() may not understand
biorxiv_ts = tonumber (biorxiv_ts) or lang_object:parseFormattedNumber (biorxiv_ts); -- convert to numbers for the comparison;
tomorrow_ts = tonumber (tomorrow_ts) or lang_object:parseFormattedNumber (tomorrow_ts);
else
return false; -- one or both failed to convert to Unix timestamp
end
return ((1576022400 <= biorxiv_ts) and (biorxiv_ts < tomorrow_ts)) -- 2012-12-11T00:00Z <= biorxiv_date < tomorrow's date
end
--[[--------------------------< IS _ V A L I D _ I S X N >-----------------------------------------------------
ISBN-10 and ISSN validator code calculates checksum across all ISBN/ISSN digits including the check digit.
ISBN-13 is checked in isbn().
If the number is valid the result will be 0. Before calling this function, ISBN/ISSN must be checked for length
and stripped of dashes, spaces and other non-ISxN characters.
]]
local function is_valid_isxn (isxn_str, len)
local temp = 0;
isxn_str = { isxn_str:byte(1, len) }; -- make a table of byte values '0' → 0x30 .. '9' → 0x39, 'X' → 0x58
len = len + 1; -- adjust to be a loop counter
for i, v in ipairs (isxn_str) do -- loop through all of the bytes and calculate the checksum
if v == string.byte ("X" ) then -- if checkdigit is X (compares the byte value of 'X' which is 0x58)
temp = temp + 10 * (len - i); -- it represents 10 decimal
else
temp = temp + tonumber (string.char (v) )*(len-i);
end
end
return temp % 11 == 0; -- returns true if calculation result is zero
end
--[[--------------------------< IS _ V A L I D _ I S X N _ 1 3 >-----------------------------------------------
ISBN-13 and ISMN validator code calculates checksum across all 13 ISBN/ISMN digits including the check digit.
If the number is valid, the result will be 0. Before calling this function, ISBN-13/ISMN must be checked for length
and stripped of dashes, spaces and other non-ISxN-13 characters.
]]
local function is_valid_isxn_13 (isxn_str)
local temp=0;
isxn_str = { isxn_str:byte(1, 13) }; -- make a table of byte values '0' → 0x30 .. '9' → 0x39
for i, v in ipairs (isxn_str) do
temp = temp + (3 - 2*(i % 2)) * tonumber (string.char (v) ); -- multiply odd index digits by 1, even index digits by 3 and sum; includes check digit
end
return temp % 10 == 0; -- sum modulo 10 is zero when ISBN-13/ISMN is correct
end
--[[--------------------------< N O R M A L I Z E _ L C C N >--------------------------------------------------
LCCN normalization (https://www.loc.gov/marc/lccn-namespace.html#normalization)
1. Remove all blanks.
2. If there is a forward slash (/) in the string, remove it, and remove all characters to the right of the forward slash.
3. If there is a hyphen in the string:
a. Remove it.
b. Inspect the substring following (to the right of) the (removed) hyphen. Then (and assuming that steps 1 and 2 have been carried out):
1. All these characters should be digits, and there should be six or less. (not done in this function)
2. If the length of the substring is less than 6, left-fill the substring with zeroes until the length is six.
Returns a normalized LCCN for lccn() to validate. There is no error checking (step 3.b.1) performed in this function.
]]
local function normalize_lccn (lccn)
lccn = lccn:gsub ("%s", ""); -- 1. strip whitespace
if nil ~= string.find (lccn, '/') then
lccn = lccn:match ("(.-)/"); -- 2. remove forward slash and all character to the right of it
end
local prefix
local suffix
prefix, suffix = lccn:match ("(.+)%-(.+)"); -- 3.a remove hyphen by splitting the string into prefix and suffix
if nil ~= suffix then -- if there was a hyphen
suffix = string.rep("0", 6-string.len (suffix)) .. suffix; -- 3.b.2 left fill the suffix with 0s if suffix length less than 6
lccn = prefix..suffix; -- reassemble the LCCN
end
return lccn;
end
--============================<< I D E N T I F I E R F U N C T I O N S >>====================================
--[[--------------------------< A R X I V >--------------------------------------------------------------------
See: https://arxiv.org/help/arxiv_identifier
format and error check arXiv identifier. There are three valid forms of the identifier:
the first form, valid only between date codes 9107 and 0703, is:
arXiv:<archive>.<class>/<date code><number><version>
where:
<archive> is a string of alpha characters - may be hyphenated; no other punctuation
<class> is a string of alpha characters - may be hyphenated; no other punctuation; not the same as |class= parameter which is not supported in this form
<date code> is four digits in the form YYMM where YY is the last two digits of the four-digit year and MM is the month number January = 01
first digit of YY for this form can only 9 and 0
<number> is a three-digit number
<version> is a 1 or more digit number preceded with a lowercase v; no spaces (undocumented)
the second form, valid from April 2007 through December 2014 is:
arXiv:<date code>.<number><version>
where:
<date code> is four digits in the form YYMM where YY is the last two digits of the four-digit year and MM is the month number January = 01
<number> is a four-digit number
<version> is a 1 or more digit number preceded with a lowercase v; no spaces
the third form, valid from January 2015 is:
arXiv:<date code>.<number><version>
where:
<date code> and <version> are as defined for 0704-1412
<number> is a five-digit number
]]
local function arxiv (options)
local id = options.id;
local class = options.Class; -- TODO: lowercase?
local handler = options.handler;
local year, month, version;
local err_msg = false; -- assume no error message
local text; -- output text
if id:match("^%a[%a%.%-]+/[90]%d[01]%d%d%d%d$") or id:match("^%a[%a%.%-]+/[90]%d[01]%d%d%d%dv%d+$") then -- test for the 9107-0703 format with or without version
year, month = id:match("^%a[%a%.%-]+/([90]%d)([01]%d)%d%d%d[v%d]*$");
year = tonumber (year);
month = tonumber (month);
if ((not (90 < year or 8 > year)) or (1 > month or 12 < month)) or -- if invalid year or invalid month
((91 == year and 7 > month) or (7 == year and 3 < month)) then -- if years ok, are starting and ending months ok?
err_msg = true; -- flag for error message
end
elseif id:match("^%d%d[01]%d%.%d%d%d%d$") or id:match("^%d%d[01]%d%.%d%d%d%dv%d+$") then -- test for the 0704-1412 with or without version
year, month = id:match("^(%d%d)([01]%d)%.%d%d%d%d[v%d]*$");
year = tonumber (year);
month = tonumber (month);
if ((7 > year) or (14 < year) or (1 > month or 12 < month)) or -- is year invalid or is month invalid? (doesn't test for future years)
((7 == year) and (4 > month)) then -- when year is 07, is month invalid (before April)?
err_msg = true; -- flag for error message
end
elseif id:match("^%d%d[01]%d%.%d%d%d%d%d$") or id:match("^%d%d[01]%d%.%d%d%d%d%dv%d+$") then -- test for the 1501- format with or without version
year, month = id:match("^(%d%d)([01]%d)%.%d%d%d%d%d[v%d]*$");
year = tonumber (year);
month = tonumber (month);
if ((15 > year) or (1 > month or 12 < month)) then -- is year invalid or is month invalid? (doesn't test for future years)
err_msg = true; -- flag for error message
end
else
err_msg = true; -- not a recognized format; flag for error message
end
if err_msg then
options.coins_list_t['ARXIV'] = nil; -- when error, unset so not included in COinS
end
local err_msg_t = {};
if err_msg then
set_message ('err_bad_arxiv');
end
text = external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect,
prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode, access = handler.access});
if is_set (class) then
if id:match ('^%d+') then
text = table.concat ({text, ' [[//arxiv.org/archive/', class, ' ', class, ']]'}); -- external link within square brackets, not wikilink
else
set_message ('err_class_ignored');
end
end
return text;
end
--[[--------------------------< B I B C O D E >--------------------------------------------------------------------
Validates (sort of) and formats a bibcode ID.
Format for bibcodes is specified here: https://adsabs.harvard.edu/abs_doc/help_pages/data.html#bibcodes
But, this: 2015arXiv151206696F is apparently valid so apparently, the only things that really matter are length, 19 characters
and first four digits must be a year. This function makes these tests:
length must be 19 characters
characters in position
1–4 must be digits and must represent a year in the range of 1000 – next year
5 must be a letter
6–8 must be letter, digit, ampersand, or dot (ampersand cannot directly precede a dot; &. )
9–18 must be letter, digit, or dot
19 must be a letter or dot
]]
local function bibcode (options)
local id = options.id;
local access = options.access;
local handler = options.handler;
local err_type;
local err_msg = '';
local year;
local text = external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect,
prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode,
access = access});
if 19 ~= id:len() then
err_type = cfg.err_msg_supl.length;
else
year = id:match ("^(%d%d%d%d)[%a][%w&%.][%w&%.][%w&%.][%w.]+[%a%.]$");
if not year then -- if nil then no pattern match
err_type = cfg.err_msg_supl.value; -- so value error
else
local next_year = tonumber (os.date ('%Y')) + 1; -- get the current year as a number and add one for next year
year = tonumber (year); -- convert year portion of bibcode to a number
if (1000 > year) or (year > next_year) then
err_type = cfg.err_msg_supl.year; -- year out of bounds
end
if id:find('&%.') then
err_type = cfg.err_msg_supl.journal; -- journal abbreviation must not have '&.' (if it does it's missing a letter)
end
end
end
if is_set (err_type) then -- if there was an error detected
set_message ('err_bad_bibcode', {err_type});
options.coins_list_t['BIBCODE'] = nil; -- when error, unset so not included in COinS
end
return text;
end
--[[--------------------------< B I O R X I V >-----------------------------------------------------------------
Format bioRxiv ID and do simple error checking. Before 2019-12-11, biorXiv IDs were 10.1101/ followed by exactly
6 digits. After 2019-12-11, biorXiv IDs retained the six-digit identifier but prefixed that with a yyyy.mm.dd.
date and suffixed with an optional version identifier.
The bioRxiv ID is the string of characters:
https://doi.org/10.1101/078733 -> 10.1101/078733
or a date followed by a six-digit number followed by an optional version indicator 'v' and one or more digits:
https://www.biorxiv.org/content/10.1101/2019.12.11.123456v2 -> 10.1101/2019.12.11.123456v2
see https://www.biorxiv.org/about-biorxiv
]]
local function biorxiv (options)
local id = options.id;
local handler = options.handler;
local err_msg = true; -- flag; assume that there will be an error
local patterns = {
'^10.1101/%d%d%d%d%d%d$', -- simple 6-digit identifier (before 2019-12-11)
'^10.1101/(20[1-9]%d)%.([01]%d)%.([0-3]%d)%.%d%d%d%d%d%dv%d+$', -- y.m.d. date + 6-digit identifier + version (after 2019-12-11)
'^10.1101/(20[1-9]%d)%.([01]%d)%.([0-3]%d)%.%d%d%d%d%d%d$', -- y.m.d. date + 6-digit identifier (after 2019-12-11)
}
for _, pattern in ipairs (patterns) do -- spin through the patterns looking for a match
if id:match (pattern) then
local y, m, d = id:match (pattern); -- found a match, attempt to get year, month and date from the identifier
if m then -- m is nil when id is the six-digit form
if not is_valid_biorxiv_date (y, m, d) then -- validate the encoded date; TODO: don't ignore leap-year and actual month lengths ({{#time:}} is a poor date validator)
break; -- date fail; break out early so we don't unset the error message
end
end
err_msg = nil; -- we found a match so unset the error message
break; -- and done
end
end -- err_cat remains set here when no match
if err_msg then
options.coins_list_t['BIORXIV'] = nil; -- when error, unset so not included in COinS
set_message ('err_bad_biorxiv'); -- and set the error message
end
return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect,
prefix = handler.prefix, id = id, separator = handler.separator,
encode = handler.encode, access = handler.access});
end
--[[--------------------------< C I T E S E E R X >------------------------------------------------------------
CiteSeerX use their own notion of "doi" (not to be confused with the identifiers resolved via doi.org).
The description of the structure of this identifier can be found at Help_talk:Citation_Style_1/Archive_26#CiteSeerX_id_structure
]]
local function citeseerx (options)
local id = options.id;
local handler = options.handler;
local matched;
local text = external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect,
prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode,
access = handler.access});
matched = id:match ("^10%.1%.1%.[1-9]%d?%d?%d?%.[1-9]%d?%d?%d?$");
if not matched then
set_message ('err_bad_citeseerx' );
options.coins_list_t['CITESEERX'] = nil; -- when error, unset so not included in COinS
end
return text;
end
--[[--------------------------< D O I >------------------------------------------------------------------------
Formats a DOI and checks for DOI errors.
DOI names contain two parts: prefix and suffix separated by a forward slash.
Prefix: directory indicator '10.' followed by a registrant code
Suffix: character string of any length chosen by the registrant
This function checks a DOI name for: prefix/suffix. If the DOI name contains spaces or endashes, or, if it ends
with a period or a comma, this function will emit a bad_doi error message.
DOI names are case-insensitive and can incorporate any printable Unicode characters so the test for spaces, endash,
and terminal punctuation may not be technically correct but it appears, that in practice these characters are rarely
if ever used in DOI names.
https://www.doi.org/doi_handbook/2_Numbering.html -- 2.2 Syntax of a DOI name
https://www.doi.org/doi_handbook/2_Numbering.html#2.2.2 -- 2.2.2 DOI prefix
]]
local function doi (options)
local id = options.id;
local inactive = options.DoiBroken
local access = options.access;
local ignore_invalid = options.accept;
local handler = options.handler;
local err_flag;
local text;
if is_set (inactive) then
local inactive_year = inactive:match("%d%d%d%d") or ''; -- try to get the year portion from the inactive date
local inactive_month, good;
if is_set (inactive_year) then
if 4 < inactive:len() then -- inactive date has more than just a year (could be anything)
local lang_obj = mw.getContentLanguage(); -- get a language object for this wiki
good, inactive_month = pcall (lang_obj.formatDate, lang_obj, 'F', inactive); -- try to get the month name from the inactive date
if not good then
inactive_month = nil; -- something went wrong so make sure this is unset
end
end
else
inactive_year = nil; -- |doi-broken-date= has something but it isn't a date
end
if is_set (inactive_year) and is_set (inactive_month) then
set_message ('maint_doi_inactive_dated', {inactive_year, inactive_month, ' '});
elseif is_set (inactive_year) then
set_message ('maint_doi_inactive_dated', {inactive_year, '', ''});
else
set_message ('maint_doi_inactive');
end
inactive = " (" .. cfg.messages['inactive'] .. ' ' .. inactive .. ')';
end
local registrant = mw.ustring.match (id, '^10%.([^/]+)/[^%s–]-[^%.,]$'); -- registrant set when DOI has the proper basic form
local registrant_err_patterns = { -- these patterns are for code ranges that are not supported
'^[^1-3]%d%d%d%d%.%d%d*$', -- 5 digits with subcode (0xxxx, 40000+); accepts: 10000–39999
'^[^1-5]%d%d%d%d$', -- 5 digits without subcode (0xxxx, 60000+); accepts: 10000–59999
'^[^1-9]%d%d%d%.%d%d*$', -- 4 digits with subcode (0xxx); accepts: 1000–9999
'^[^1-9]%d%d%d$', -- 4 digits without subcode (0xxx); accepts: 1000–9999
'^%d%d%d%d%d%d+', -- 6 or more digits
'^%d%d?%d?$', -- less than 4 digits without subcode (3 digits with subcode is legitimate)
'^%d%d?%.[%d%.]+', -- 1 or 2 digits with subcode
'^5555$', -- test registrant will never resolve
'[^%d%.]', -- any character that isn't a digit or a dot
}
if not ignore_invalid then
if registrant then -- when DOI has proper form
for i, pattern in ipairs (registrant_err_patterns) do -- spin through error patterns
if registrant:match (pattern) then -- to validate registrant codes
err_flag = set_message ('err_bad_doi'); -- when found, mark this DOI as bad
break; -- and done
end
end
else
err_flag = set_message ('err_bad_doi'); -- invalid directory or malformed
end
else
set_message ('maint_doi_ignore');
end
if err_flag then
options.coins_list_t['DOI'] = nil; -- when error, unset so not included in COinS
end
text = external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect,
prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode, access = access,
auto_link = not (err_flag or is_set (inactive) or ignore_invalid) and 'doi' or nil -- do not auto-link when |doi-broken-date= has a value or when there is a DOI error or (to play it safe, after all, auto-linking is not essential) when invalid DOIs are ignored
}) .. (inactive or '');
return text;
end
--[[--------------------------< H D L >------------------------------------------------------------------------
Formats an HDL with minor error checking.
HDL names contain two parts: prefix and suffix separated by a forward slash.
Prefix: character string using any character in the UCS-2 character set except '/'
Suffix: character string of any length using any character in the UCS-2 character set chosen by the registrant
This function checks a HDL name for: prefix/suffix. If the HDL name contains spaces, endashes, or, if it ends
with a period or a comma, this function will emit a bad_hdl error message.
HDL names are case-insensitive and can incorporate any printable Unicode characters so the test for endashes and
terminal punctuation may not be technically correct but it appears, that in practice these characters are rarely
if ever used in HDLs.
Query string parameters are named here: https://www.handle.net/proxy_servlet.html. query strings are not displayed
but since '?' is an allowed character in an HDL, '?' followed by one of the query parameters is the only way we
have to detect the query string so that it isn't URL-encoded with the rest of the identifier.
]]
local function hdl (options)
local id = options.id;
local access = options.access;
local handler = options.handler;
local query_params = { -- list of known query parameters from https://www.handle.net/proxy_servlet.html
'noredirect',
'ignore_aliases',
'auth',
'cert',
'index',
'type',
'urlappend',
'locatt',
'action',
}
local hdl, suffix, param = id:match ('(.-)(%?(%a+).+)$'); -- look for query string
local found;
if hdl then -- when there are query strings, this is the handle identifier portion
for _, q in ipairs (query_params) do -- spin through the list of query parameters
if param:match ('^' .. q) then -- if the query string begins with one of the parameters
found = true; -- announce a find
break; -- and stop looking
end
end
end
if found then
id = hdl; -- found so replace id with the handle portion; this will be URL-encoded, suffix will not
else
suffix = ''; -- make sure suffix is empty string for concatenation else
end
local text = external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect,
prefix = handler.prefix, id = id, suffix = suffix, separator = handler.separator, encode = handler.encode, access = access})
if nil == id:match("^[^%s–]-/[^%s–]-[^%.,]$") then -- HDL must contain a forward slash, must not contain spaces, endashes, and must not end with period or comma
set_message ('err_bad_hdl' );
options.coins_list_t['HDL'] = nil; -- when error, unset so not included in COinS
end
return text;
end
--[[--------------------------< I S B N >----------------------------------------------------------------------
Determines whether an ISBN string is valid
]]
local function isbn (options)
local isbn_str = options.id;
local ignore_invalid = options.accept;
local handler = options.handler;
local function return_result (check, err_type) -- local function to handle the various returns
local ISBN = internal_link_id ({link = handler.link, label = handler.label, redirect = handler.redirect,
prefix = handler.prefix, id = isbn_str, separator = handler.separator});
if ignore_invalid then -- if ignoring ISBN errors
set_message ('maint_isbn_ignore'); -- add a maint category even when there is no error
else -- here when not ignoring
if not check then -- and there is an error
options.coins_list_t['ISBN'] = nil; -- when error, unset so not included in COinS
set_message ('err_bad_isbn', err_type); -- set an error message
return ISBN; -- return id text
end
end
return ISBN; -- return id text
end
if nil ~= isbn_str:match ('[^%s-0-9X]') then
return return_result (false, cfg.err_msg_supl.char); -- fail if isbn_str contains anything but digits, hyphens, or the uppercase X
end
local id = isbn_str:gsub ('[%s-]', ''); -- remove hyphens and whitespace
local len = id:len();
if len ~= 10 and len ~= 13 then
return return_result (false, cfg.err_msg_supl.length); -- fail if incorrect length
end
if len == 10 then
if id:match ('^%d*X?$') == nil then -- fail if isbn_str has 'X' anywhere but last position
return return_result (false, cfg.err_msg_supl.form);
end
if not is_valid_isxn (id, 10) then -- test isbn-10 for numerical validity
return return_result (false, cfg.err_msg_supl.check); -- fail if isbn-10 is not numerically valid
end
if id:find ('^63[01]') then -- 630xxxxxxx and 631xxxxxxx are (apparently) not valid isbn group ids but are used by amazon as numeric identifiers (asin)
return return_result (false, cfg.err_msg_supl.group); -- fail if isbn-10 begins with 630/1
end
return return_result (true, cfg.err_msg_supl.check); -- pass if isbn-10 is numerically valid
else
if id:match ('^%d+$') == nil then
return return_result (false, cfg.err_msg_supl.char); -- fail if ISBN-13 is not all digits
end
if id:match ('^97[89]%d*$') == nil then
return return_result (false, cfg.err_msg_supl.prefix); -- fail when ISBN-13 does not begin with 978 or 979
end
if id:match ('^9790') then
return return_result (false, cfg.err_msg_supl.group); -- group identifier '0' is reserved to ISMN
end
return return_result (is_valid_isxn_13 (id), cfg.err_msg_supl.check);
end
end
--[[--------------------------< A S I N >----------------------------------------------------------------------
Formats a link to Amazon. Do simple error checking: ASIN must be mix of 10 numeric or uppercase alpha
characters. If a mix, first character must be uppercase alpha; if all numeric, ASINs must be 10-digit
ISBN. If 10-digit ISBN, add a maintenance category so a bot or AWB script can replace |asin= with |isbn=.
Error message if not 10 characters, if not ISBN-10, if mixed and first character is a digit.
|asin=630....... and |asin=631....... are (apparently) not a legitimate ISBN though it checksums as one; these
do not cause this function to emit the maint_asin message
This function is positioned here because it calls isbn()
]]
local function asin (options)
local id = options.id;
local domain = options.ASINTLD;
local err_flag;
if not id:match("^[%d%u][%d%u][%d%u][%d%u][%d%u][%d%u][%d%u][%d%u][%d%u][%d%u]$") then
err_flag = set_message ('err_bad_asin'); -- ASIN is not a mix of 10 uppercase alpha and numeric characters
else
if id:match("^%d%d%d%d%d%d%d%d%d[%dX]$") then -- if 10-digit numeric (or 9 digits with terminal X)
if is_valid_isxn (id, 10) then -- see if ASIN value is or validates as ISBN-10
if not id:find ('^63[01]') then -- 630xxxxxxx and 631xxxxxxx are (apparently) not a valid isbn prefixes but are used by amazon as a numeric identifier
err_flag = set_message ('err_bad_asin'); -- ASIN has ISBN-10 form but begins with something other than 630/1 so probably an isbn
end
elseif not is_set (err_flag) then
err_flag = set_message ('err_bad_asin'); -- ASIN is not ISBN-10
end
elseif not id:match("^%u[%d%u]+$") then
err_flag = set_message ('err_bad_asin'); -- asin doesn't begin with uppercase alpha
end
end
if (not is_set (domain)) or in_array (domain, {'us'}) then -- default: United States
domain = "com";
elseif in_array (domain, {'jp', 'uk'}) then -- Japan, United Kingdom
domain = "co." .. domain;
elseif in_array (domain, {'z.cn'}) then -- China
domain = "cn";
elseif in_array (domain, {'au', 'br', 'mx', 'sg', 'tr'}) then -- Australia, Brazil, Mexico, Singapore, Turkey
domain = "com." .. domain;
elseif not in_array (domain, {'ae', 'ca', 'cn', 'de', 'es', 'fr', 'in', 'it', 'nl', 'pl', 'sa', 'se', 'co.jp', 'co.uk', 'com', 'com.au', 'com.br', 'com.mx', 'com.sg', 'com.tr'}) then -- Arabic Emirates, Canada, China, Germany, Spain, France, Indonesia, Italy, Netherlands, Poland, Saudi Arabia, Sweden (as of 2021-03 Austria (.at), Liechtenstein (.li) and Switzerland (.ch) still redirect to the German site (.de) with special settings, so don't maintain local ASINs for them)
err_flag = set_message ('err_bad_asin_tld'); -- unsupported asin-tld value
end
local handler = options.handler;
if not is_set (err_flag) then
options.coins_list_t['ASIN'] = handler.prefix .. domain .. "/dp/" .. id; -- asin for coins
else
options.coins_list_t['ASIN'] = nil; -- when error, unset so not included in COinS
end
return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect,
prefix = handler.prefix .. domain .. "/dp/",
id = id, encode = handler.encode, separator = handler.separator})
end
--[[--------------------------< I S M N >----------------------------------------------------------------------
Determines whether an ISMN string is valid. Similar to ISBN-13, ISMN is 13 digits beginning 979-0-... and uses the
same check digit calculations. See https://www.ismn-international.org/download/Web_ISMN_Users_Manual_2008-6.pdf
section 2, pages 9–12.
ismn value not made part of COinS metadata because we don't have a url or isn't a COinS-defined identifier (rft.xxx)
or an identifier registered at info-uri.info (info:)
]]
local function ismn (options)
local id = options.id;
local handler = options.handler;
local text;
local valid_ismn = true;
local id_copy;
id_copy = id; -- save a copy because this testing is destructive
id = id:gsub ('[%s-]', ''); -- remove hyphens and white space
if 13 ~= id:len() or id:match ("^9790%d*$" ) == nil then -- ISMN must be 13 digits and begin with 9790
valid_ismn = false;
else
valid_ismn=is_valid_isxn_13 (id); -- validate ISMN
end
-- text = internal_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, -- use this (or external version) when there is some place to link to
-- prefix = handler.prefix, id = id_copy, separator = handler.separator, encode = handler.encode})
text = table.concat ( -- because no place to link to yet
{
make_wikilink (link_label_make (handler), handler.label),
handler.separator,
id_copy
});
if false == valid_ismn then
options.coins_list_t['ISMN'] = nil; -- when error, unset so not included in COinS; not really necessary here because ismn not made part of COinS
set_message ('err_bad_ismn'); -- create an error message if the ISMN is invalid
end
return text;
end
--[[--------------------------< I S S N >----------------------------------------------------------------------
Validate and format an ISSN. This code fixes the case where an editor has included an ISSN in the citation but
has separated the two groups of four digits with a space. When that condition occurred, the resulting link looked
like this:
|issn=0819 4327 gives: [https://www.worldcat.org/issn/0819 4327 0819 4327] -- can't have spaces in an external link
This code now prevents that by inserting a hyphen at the ISSN midpoint. It also validates the ISSN for length
and makes sure that the checkdigit agrees with the calculated value. Incorrect length (8 digits), characters
other than 0-9 and X, or checkdigit / calculated value mismatch will all cause a check ISSN error message. The
ISSN is always displayed with a hyphen, even if the ISSN was given as a single group of 8 digits.
]]
local function issn (options)
local id = options.id;
local handler = options.handler;
local ignore_invalid = options.accept;
local issn_copy = id; -- save a copy of unadulterated ISSN; use this version for display if ISSN does not validate
local text;
local valid_issn = true;
id = id:gsub ('[%s-]', ''); -- remove hyphens and whitespace
if 8 ~= id:len() or nil == id:match ("^%d*X?$" ) then -- validate the ISSN: 8 digits long, containing only 0-9 or X in the last position
valid_issn = false; -- wrong length or improper character
else
valid_issn = is_valid_isxn (id, 8); -- validate ISSN
end
if true == valid_issn then
id = string.sub (id, 1, 4 ) .. "-" .. string.sub (id, 5 ); -- if valid, display correctly formatted version
else
id = issn_copy; -- if not valid, show the invalid ISSN with error message
end
text = external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect,
prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode})
if ignore_invalid then
set_message ('maint_issn_ignore');
else
if false == valid_issn then
options.coins_list_t['ISSN'] = nil; -- when error, unset so not included in COinS
set_message ('err_bad_issn', (options.hkey == 'EISSN') and 'e' or ''); -- create an error message if the ISSN is invalid
end
end
return text;
end
--[[--------------------------< J F M >-----------------------------------------------------------------------
A numerical identifier in the form nn.nnnn.nn
]]
local function jfm (options)
local id = options.id;
local handler = options.handler;
local id_num;
id_num = id:match ('^[Jj][Ff][Mm](.*)$'); -- identifier with jfm prefix; extract identifier
if is_set (id_num) then
set_message ('maint_jfm_format');
else -- plain number without JFM prefix
id_num = id; -- if here id does not have prefix
end
if id_num and id_num:match('^%d%d%.%d%d%d%d%.%d%d$') then
id = id_num; -- jfm matches pattern
else
set_message ('err_bad_jfm' ); -- set an error message
options.coins_list_t['JFM'] = nil; -- when error, unset so not included in COinS
end
return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect,
prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode});
end
--[[--------------------------< J S T O R >--------------------------------------------------------------------
Format a JSTOR with some error checking
]]
local function jstor (options)
local id = options.id;
local access = options.access;
local handler = options.handler;
if id:find ('[Jj][Ss][Tt][Oo][Rr]') or id:find ('^https?://') or id:find ('%s') then
set_message ('err_bad_jstor'); -- set an error message
options.coins_list_t['JSTOR'] = nil; -- when error, unset so not included in COinS
end
return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect,
prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode, access = access});
end
--[[--------------------------< L C C N >----------------------------------------------------------------------
Format LCCN link and do simple error checking. LCCN is a character string 8-12 characters long. The length of
the LCCN dictates the character type of the first 1-3 characters; the rightmost eight are always digits.
https://oclc-research.github.io/infoURI-Frozen/info-uri.info/info:lccn/reg.html
length = 8 then all digits
length = 9 then lccn[1] is lowercase alpha
length = 10 then lccn[1] and lccn[2] are both lowercase alpha or both digits
length = 11 then lccn[1] is lower case alpha, lccn[2] and lccn[3] are both lowercase alpha or both digits
length = 12 then lccn[1] and lccn[2] are both lowercase alpha
]]
local function lccn (options)
local lccn = options.id;
local handler = options.handler;
local err_flag; -- presume that LCCN is valid
local id = lccn; -- local copy of the LCCN
id = normalize_lccn (id); -- get canonical form (no whitespace, hyphens, forward slashes)
local len = id:len(); -- get the length of the LCCN
if 8 == len then
if id:match("[^%d]") then -- if LCCN has anything but digits (nil if only digits)
err_flag = set_message ('err_bad_lccn'); -- set an error message
end
elseif 9 == len then -- LCCN should be adddddddd
if nil == id:match("%l%d%d%d%d%d%d%d%d") then -- does it match our pattern?
err_flag = set_message ('err_bad_lccn'); -- set an error message
end
elseif 10 == len then -- LCCN should be aadddddddd or dddddddddd
if id:match("[^%d]") then -- if LCCN has anything but digits (nil if only digits) ...
if nil == id:match("^%l%l%d%d%d%d%d%d%d%d") then -- ... see if it matches our pattern
err_flag = set_message ('err_bad_lccn'); -- no match, set an error message
end
end
elseif 11 == len then -- LCCN should be aaadddddddd or adddddddddd
if not (id:match("^%l%l%l%d%d%d%d%d%d%d%d") or id:match("^%l%d%d%d%d%d%d%d%d%d%d")) then -- see if it matches one of our patterns
err_flag = set_message ('err_bad_lccn'); -- no match, set an error message
end
elseif 12 == len then -- LCCN should be aadddddddddd
if not id:match("^%l%l%d%d%d%d%d%d%d%d%d%d") then -- see if it matches our pattern
err_flag = set_message ('err_bad_lccn'); -- no match, set an error message
end
else
err_flag = set_message ('err_bad_lccn'); -- wrong length, set an error message
end
if not is_set (err_flag) and nil ~= lccn:find ('%s') then
err_flag = set_message ('err_bad_lccn'); -- lccn contains a space, set an error message
end
if is_set (err_flag) then
options.coins_list_t['LCCN'] = nil; -- when error, unset so not included in COinS
end
return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect,
prefix = handler.prefix, id = lccn, separator = handler.separator, encode = handler.encode});
end
--[[--------------------------< M R >--------------------------------------------------------------------------
A seven digit number; if not seven digits, zero-fill leading digits to make seven digits.
]]
local function mr (options)
local id = options.id;
local handler = options.handler;
local id_num;
local id_len;
id_num = id:match ('^[Mm][Rr](%d+)$'); -- identifier with mr prefix
if is_set (id_num) then
set_message ('maint_mr_format'); -- add maint cat
else -- plain number without mr prefix
id_num = id:match ('^%d+$'); -- if here id is all digits
end
id_len = id_num and id_num:len() or 0;
if (7 >= id_len) and (0 ~= id_len) then
id = string.rep ('0', 7-id_len) .. id_num; -- zero-fill leading digits
else
set_message ('err_bad_mr'); -- set an error message
options.coins_list_t['MR'] = nil; -- when error, unset so not included in COinS
end
return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect,
prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode});
end
--[[--------------------------< O C L C >----------------------------------------------------------------------
Validate and format an OCLC ID. https://www.oclc.org/batchload/controlnumber.en.html {{dead link}}
archived at: https://web.archive.org/web/20161228233804/https://www.oclc.org/batchload/controlnumber.en.html
]]
local function oclc (options)
local id = options.id;
local handler = options.handler;
local number;
if id:match('^ocm%d%d%d%d%d%d%d%d$') then -- ocm prefix and 8 digits; 001 field (12 characters)
number = id:match('ocm(%d+)'); -- get the number
elseif id:match('^ocn%d%d%d%d%d%d%d%d%d$') then -- ocn prefix and 9 digits; 001 field (12 characters)
number = id:match('ocn(%d+)'); -- get the number
elseif id:match('^on%d%d%d%d%d%d%d%d%d%d+$') then -- on prefix and 10 or more digits; 001 field (12 characters)
number = id:match('^on(%d%d%d%d%d%d%d%d%d%d+)$'); -- get the number
elseif id:match('^%(OCoLC%)[1-9]%d*$') then -- (OCoLC) prefix and variable number digits; no leading zeros; 035 field
number = id:match('%(OCoLC%)([1-9]%d*)'); -- get the number
if 9 < number:len() then
number = nil; -- constrain to 1 to 9 digits; change this when OCLC issues 10-digit numbers
end
elseif id:match('^%d+$') then -- no prefix
number = id; -- get the number
if 10 < number:len() then
number = nil; -- constrain to 1 to 10 digits; change this when OCLC issues 11-digit numbers
end
end
if number then -- proper format
id = number; -- exclude prefix, if any, from external link
else
set_message ('err_bad_oclc') -- add an error message if the id is malformed
options.coins_list_t['OCLC'] = nil; -- when error, unset so not included in COinS
end
return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect,
prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode});
end
--[[--------------------------< O P E N L I B R A R Y >--------------------------------------------------------
Formats an OpenLibrary link, and checks for associated errors.
]]
local function openlibrary (options)
local id = options.id;
local access = options.access;
local handler = options.handler;
local ident, code = id:gsub('^OL', ''):match("^(%d+([AMW]))$"); -- strip optional OL prefix followed immediately by digits followed by 'A', 'M', or 'W';
local err_flag;
local prefix = { -- these are appended to the handler.prefix according to code
['A']='authors/OL',
['M']='books/OL',
['W']='works/OL',
['X']='OL' -- not a code; spoof when 'code' in id is invalid
};
if not ident then
code = 'X'; -- no code or id completely invalid
ident = id; -- copy id to ident so that we display the flawed identifier
err_flag = set_message ('err_bad_ol');
end
if not is_set (err_flag) then
options.coins_list_t['OL'] = handler.prefix .. prefix[code] .. ident; -- experiment for ol coins
else
options.coins_list_t['OL'] = nil; -- when error, unset so not included in COinS
end
return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect,
prefix = handler.prefix .. prefix[code],
id = ident, separator = handler.separator, encode = handler.encode,
access = access});
end
--[[--------------------------< O S T I >----------------------------------------------------------------------
Format OSTI and do simple error checking. OSTIs are sequential numbers beginning at 1 and counting up. This
code checks the OSTI to see that it contains only digits and is less than test_limit specified in the configuration;
the value in test_limit will need to be updated periodically as more OSTIs are issued.
NB. 1018 is the lowest OSTI number found in the wild (so far) and resolving OK on the OSTI site
]]
local function osti (options)
local id = options.id;
local access = options.access;
local handler = options.handler;
if id:match("[^%d]") then -- if OSTI has anything but digits
set_message ('err_bad_osti'); -- set an error message
options.coins_list_t['OSTI'] = nil; -- when error, unset so not included in COinS
else -- OSTI is only digits
local id_num = tonumber (id); -- convert id to a number for range testing
if 1018 > id_num or handler.id_limit < id_num then -- if OSTI is outside test limit boundaries
set_message ('err_bad_osti'); -- set an error message
options.coins_list_t['OSTI'] = nil; -- when error, unset so not included in COinS
end
end
return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect,
prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode, access = access});
end
--[[--------------------------< P M C >------------------------------------------------------------------------
Format a PMC, do simple error checking, and check for embargoed articles.
The embargo parameter takes a date for a value. If the embargo date is in the future the PMC identifier will not
be linked to the article. If the embargo date is today or in the past, or if it is empty or omitted, then the
PMC identifier is linked to the article through the link at cfg.id_handlers['PMC'].prefix.
PMC embargo date testing is done in function is_embargoed () which is called earlier because when the citation
has |pmc=<value> but does not have a |url= then |title= is linked with the PMC link. Function is_embargoed ()
returns the embargo date if the PMC article is still embargoed, otherwise it returns an empty string.
PMCs are sequential numbers beginning at 1 and counting up. This code checks the PMC to see that it contains only digits and is less
than test_limit; the value in local variable test_limit will need to be updated periodically as more PMCs are issued.
]]
local function pmc (options)
local id = options.id;
local embargo = options.Embargo; -- TODO: lowercase?
local handler = options.handler;
local err_flag;
local id_num;
local text;
id_num = id:match ('^[Pp][Mm][Cc](%d+)$'); -- identifier with PMC prefix
if is_set (id_num) then
set_message ('maint_pmc_format');
else -- plain number without PMC prefix
id_num = id:match ('^%d+$'); -- if here id is all digits
end
if is_set (id_num) then -- id_num has a value so test it
id_num = tonumber (id_num); -- convert id_num to a number for range testing
if 1 > id_num or handler.id_limit < id_num then -- if PMC is outside test limit boundaries
err_flag = set_message ('err_bad_pmc'); -- set an error message
else
id = tostring (id_num); -- make sure id is a string
end
else -- when id format incorrect
err_flag = set_message ('err_bad_pmc'); -- set an error message
end
if is_set (embargo) and is_set (is_embargoed (embargo)) then -- is PMC is still embargoed?
text = table.concat ( -- still embargoed so no external link
{
make_wikilink (link_label_make (handler), handler.label),
handler.separator,
id,
});
else
text = external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, -- no embargo date or embargo has expired, ok to link to article
prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode, access = handler.access,
auto_link = not err_flag and 'pmc' or nil -- do not auto-link when PMC has error
});
end
if err_flag then
options.coins_list_t['PMC'] = nil; -- when error, unset so not included in COinS
end
return text;
end
--[[--------------------------< P M I D >----------------------------------------------------------------------
Format PMID and do simple error checking. PMIDs are sequential numbers beginning at 1 and counting up. This
code checks the PMID to see that it contains only digits and is less than test_limit; the value in local variable
test_limit will need to be updated periodically as more PMIDs are issued.
]]
local function pmid (options)
local id = options.id;
local handler = options.handler;
if id:match("[^%d]") then -- if PMID has anything but digits
set_message ('err_bad_pmid'); -- set an error message
options.coins_list_t['PMID'] = nil; -- when error, unset so not included in COinS
else -- PMID is only digits
local id_num = tonumber (id); -- convert id to a number for range testing
if 1 > id_num or handler.id_limit < id_num then -- if PMID is outside test limit boundaries
set_message ('err_bad_pmid'); -- set an error message
options.coins_list_t['PMID'] = nil; -- when error, unset so not included in COinS
end
end
return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect,
prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode});
end
--[[--------------------------< R F C >------------------------------------------------------------------------
Format RFC and do simple error checking. RFCs are sequential numbers beginning at 1 and counting up. This
code checks the RFC to see that it contains only digits and is less than test_limit specified in the configuration;
the value in test_limit will need to be updated periodically as more RFCs are issued.
An index of all RFCs is here: https://tools.ietf.org/rfc/
]]
local function rfc (options)
local id = options.id;
local handler = options.handler;
if id:match("[^%d]") then -- if RFC has anything but digits
set_message ('err_bad_rfc'); -- set an error message
options.coins_list_t['RFC'] = nil; -- when error, unset so not included in COinS
else -- RFC is only digits
local id_num = tonumber (id); -- convert id to a number for range testing
if 1 > id_num or handler.id_limit < id_num then -- if RFC is outside test limit boundaries
set_message ('err_bad_rfc'); -- set an error message
options.coins_list_t['RFC'] = nil; -- when error, unset so not included in COinS
end
end
return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect,
prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode, access = handler.access});
end
--[[--------------------------< S 2 C I D >--------------------------------------------------------------------
Format an S2CID, do simple error checking
S2CIDs are sequential numbers beginning at 1 and counting up. This code checks the S2CID to see that it is only
digits and is less than test_limit; the value in local variable test_limit will need to be updated periodically
as more S2CIDs are issued.
]]
local function s2cid (options)
local id = options.id;
local access = options.access;
local handler = options.handler;
local id_num;
local text;
id_num = id:match ('^[1-9]%d*$'); -- id must be all digits; must not begin with 0; no open access flag
if is_set (id_num) then -- id_num has a value so test it
id_num = tonumber (id_num); -- convert id_num to a number for range testing
if handler.id_limit < id_num then -- if S2CID is outside test limit boundaries
set_message ('err_bad_s2cid'); -- set an error message
options.coins_list_t['S2CID'] = nil; -- when error, unset so not included in COinS
end
else -- when id format incorrect
set_message ('err_bad_s2cid'); -- set an error message
options.coins_list_t['S2CID'] = nil; -- when error, unset so not included in COinS
end
text = external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect,
prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode, access = access});
return text;
end
--[[--------------------------< S B N >------------------------------------------------------------------------
9-digit form of ISBN-10; uses same check-digit validation when SBN is prefixed with an additional '0' to make 10 digits
sbn value not made part of COinS metadata because we don't have a url or isn't a COinS-defined identifier (rft.xxx)
or an identifier registered at info-uri.info (info:)
]]
local function sbn (options)
local id = options.id;
local ignore_invalid = options.accept;
local handler = options.handler;
local function return_result (check, err_type) -- local function to handle the various returns
local SBN = internal_link_id ({link = handler.link, label = handler.label, redirect = handler.redirect,
prefix = handler.prefix, id = id, separator = handler.separator});
if not ignore_invalid then -- if not ignoring SBN errors
if not check then
options.coins_list_t['SBN'] = nil; -- when error, unset so not included in COinS; not really necessary here because sbn not made part of COinS
set_message ('err_bad_sbn', {err_type}); -- display an error message
return SBN;
end
else
set_message ('maint_isbn_ignore'); -- add a maint category even when there is no error (ToDo: Possibly switch to separate message for SBNs only)
end
return SBN;
end
if id:match ('[^%s-0-9X]') then
return return_result (false, cfg.err_msg_supl.char); -- fail if SBN contains anything but digits, hyphens, or the uppercase X
end
local ident = id:gsub ('[%s-]', ''); -- remove hyphens and whitespace; they interfere with the rest of the tests
if 9 ~= ident:len() then
return return_result (false, cfg.err_msg_supl.length); -- fail if incorrect length
end
if ident:match ('^%d*X?$') == nil then
return return_result (false, cfg.err_msg_supl.form); -- fail if SBN has 'X' anywhere but last position
end
return return_result (is_valid_isxn ('0' .. ident, 10), cfg.err_msg_supl.check);
end
--[[--------------------------< S S R N >----------------------------------------------------------------------
Format an SSRN, do simple error checking
SSRNs are sequential numbers beginning at 100? and counting up. This code checks the SSRN to see that it is
only digits and is greater than 99 and less than test_limit; the value in local variable test_limit will need
to be updated periodically as more SSRNs are issued.
]]
local function ssrn (options)
local id = options.id;
local handler = options.handler;
local id_num;
local text;
id_num = id:match ('^%d+$'); -- id must be all digits
if is_set (id_num) then -- id_num has a value so test it
id_num = tonumber (id_num); -- convert id_num to a number for range testing
if 100 > id_num or handler.id_limit < id_num then -- if SSRN is outside test limit boundaries
set_message ('err_bad_ssrn'); -- set an error message
options.coins_list_t['SSRN'] = nil; -- when error, unset so not included in COinS
end
else -- when id format incorrect
set_message ('err_bad_ssrn'); -- set an error message
options.coins_list_t['SSRN'] = nil; -- when error, unset so not included in COinS
end
text = external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect,
prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode, access = options.access});
return text;
end
--[[--------------------------< U S E N E T _ I D >------------------------------------------------------------
Validate and format a usenet message id. Simple error checking, looks for 'id-left@id-right' not enclosed in
'<' and/or '>' angle brackets.
]]
local function usenet_id (options)
local id = options.id;
local handler = options.handler;
local text = external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect,
prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode})
if not id:match('^.+@.+$') or not id:match('^[^<].*[^>]$') then -- doesn't have '@' or has one or first or last character is '< or '>'
set_message ('err_bad_usenet_id') -- add an error message if the message id is invalid
options.coins_list_t['USENETID'] = nil; -- when error, unset so not included in COinS
end
return text;
end
--[[--------------------------< Z B L >-----------------------------------------------------------------------
A numerical identifier in the form nnnn.nnnnn - leading zeros in the first quartet optional
format described here: http://emis.mi.sanu.ac.rs/ZMATH/zmath/en/help/search/
temporary format is apparently eight digits. Anything else is an error
]]
local function zbl (options)
local id = options.id;
local handler = options.handler;
if id:match('^%d%d%d%d%d%d%d%d$') then -- is this identifier using temporary format?
set_message ('maint_zbl'); -- yes, add maint cat
elseif not id:match('^%d?%d?%d?%d%.%d%d%d%d%d$') then -- not temporary, is it normal format?
set_message ('err_bad_zbl'); -- no, set an error message
options.coins_list_t['ZBL'] = nil; -- when error, unset so not included in COinS
end
return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect,
prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode});
end
--============================<< I N T E R F A C E F U N C T I O N S >>==========================================
--[[--------------------------< E X T R A C T _ I D S >------------------------------------------------------------
Populates ID table from arguments using configuration settings. Loops through cfg.id_handlers and searches args for
any of the parameters listed in each cfg.id_handlers['...'].parameters. If found, adds the parameter and value to
the identifier list. Emits redundant error message if more than one alias exists in args
]]
local function extract_ids (args)
local id_list = {}; -- list of identifiers found in args
for k, v in pairs (cfg.id_handlers) do -- k is uppercase identifier name as index to cfg.id_handlers; e.g. cfg.id_handlers['ISBN'], v is a table
v = select_one (args, v.parameters, 'err_redundant_parameters' ); -- v.parameters is a table of aliases for k; here we pick one from args if present
if is_set (v) then id_list[k] = v; end -- if found in args, add identifier to our list
end
return id_list;
end
--[[--------------------------< E X T R A C T _ I D _ A C C E S S _ L E V E L S >--------------------------------------
Fetches custom id access levels from arguments using configuration settings. Parameters which have a predefined access
level (e.g. arxiv) do not use this function as they are directly rendered as free without using an additional parameter.
returns a table of k/v pairs where k is same as the identifier's key in cfg.id_handlers and v is the assigned (valid) keyword
access-level values must match the case used in cfg.keywords_lists['id-access'] (lowercase unless there is some special reason for something else)
]]
local function extract_id_access_levels (args, id_list)
local id_accesses_list = {};
for k, v in pairs (cfg.id_handlers) do
local access_param = v.custom_access; -- name of identifier's access-level parameter
if is_set (access_param) then
local access_level = args[access_param]; -- get the assigned value if there is one
if is_set (access_level) then
if not in_array (access_level, cfg.keywords_lists['id-access']) then -- exact match required
set_message ('err_invalid_param_val', {access_param, access_level});
access_level = nil; -- invalid so unset
end
if not is_set (id_list[k]) then -- identifier access-level must have a matching identifier
set_message ('err_param_access_requires_param', {k:lower()}); -- parameter name is uppercase in cfg.id_handlers (k); lowercase for error message
end
id_accesses_list[k] = cfg.keywords_xlate[access_level]; -- get translated keyword
end
end
end
return id_accesses_list;
end
--[[--------------------------< B U I L D _ I D _ L I S T >----------------------------------------------------
render the identifiers into a sorted sequence table
<ID_list_coins_t> is a table of k/v pairs where k is same as key in cfg.id_handlers and v is the assigned value
<options_t> is a table of various k/v option pairs provided in the call to new_build_id_list();
modified by this function and passed to all identifier rendering functions
<access_levels_t> is a table of k/v pairs where k is same as key in cfg.id_handlers and v is the assigned value (if valid)
returns a sequence table of sorted (by hkey - 'handler' key) rendered identifier strings
]]
local function build_id_list (ID_list_coins_t, options_t, access_levels_t)
local ID_list_t = {};
local accept;
local func_map = { --function map points to functions associated with hkey identifier
['ARXIV'] = arxiv,
['ASIN'] = asin,
['BIBCODE'] = bibcode,
['BIORXIV'] = biorxiv,
['CITESEERX'] = citeseerx,
['DOI'] = doi,
['EISSN'] = issn,
['HDL'] = hdl,
['ISBN'] = isbn,
['ISMN'] = ismn,
['ISSN'] = issn,
['JFM'] = jfm,
['JSTOR'] = jstor,
['LCCN'] = lccn,
['MR'] = mr,
['OCLC'] = oclc,
['OL'] = openlibrary,
['OSTI'] = osti,
['PMC'] = pmc,
['PMID'] = pmid,
['RFC'] = rfc,
['S2CID'] = s2cid,
['SBN'] = sbn,
['SSRN'] = ssrn,
['USENETID'] = usenet_id,
['ZBL'] = zbl,
}
for hkey, v in pairs (ID_list_coins_t) do
v, accept = has_accept_as_written (v); -- remove accept-as-written markup if present; accept is boolean true when markup removed; false else
-- every function gets the options table with value v and accept boolean
options_t.hkey = hkey; -- ~/Configuration handler key
options_t.id = v; -- add that identifier value to the options table
options_t.accept = accept; -- add the accept boolean flag
options_t.access = access_levels_t[hkey]; -- add the access level for those that have an |<identifier-access= parameter
options_t.handler = cfg.id_handlers[hkey];
options_t.coins_list_t = ID_list_coins_t; -- pointer to ID_list_coins_t; for |asin= and |ol=; also to keep erroneous values out of the citation's metadata
options_t.coins_list_t[hkey] = v; -- id value without accept-as-written markup for metadata
if options_t.handler.access and not in_array (options_t.handler.access, cfg.keywords_lists['id-access']) then
error (cfg.messages['unknown_ID_access'] .. options_t.handler.access); -- here when handler access key set to a value not listed in list of allowed id access keywords
end
if func_map[hkey] then
local id_text = func_map[hkey] (options_t); -- call the function to get identifier text and any error message
table.insert (ID_list_t, {hkey, id_text}); -- add identifier text to the output sequence table
else
error (cfg.messages['unknown_ID_key'] .. hkey); -- here when func_map doesn't have a function for hkey
end
end
local function comp (a, b) -- used by following table.sort()
return a[1]:lower() < b[1]:lower(); -- sort by hkey
end
table.sort (ID_list_t, comp); -- sequence table of tables sort
for k, v in ipairs (ID_list_t) do -- convert sequence table of tables to simple sequence table of strings
ID_list_t[k] = v[2]; -- v[2] is the identifier rendering from the call to the various functions in func_map{}
end
return ID_list_t;
end
--[[--------------------------< O P T I O N S _ C H E C K >----------------------------------------------------
check that certain option parameters have their associated identifier parameters with values
<ID_list_coins_t> is a table of k/v pairs where k is same as key in cfg.id_handlers and v is the assigned value
<ID_support_t> is a sequence table of tables created in citation0() where each subtable has four elements:
[1] is the support parameter's assigned value; empty string if not set
[2] is a text string same as key in cfg.id_handlers
[3] is cfg.error_conditions key used to create error message
[4] is original ID support parameter name used to create error message
returns nothing; on error emits an appropriate error message
]]
local function options_check (ID_list_coins_t, ID_support_t)
for _, v in ipairs (ID_support_t) do
if is_set (v[1]) and not ID_list_coins_t[v[2]] then -- when support parameter has a value but matching identifier parameter is missing or empty
set_message (v[3], (v[4])); -- emit the appropriate error message
end
end
end
--[[--------------------------< I D E N T I F I E R _ L I S T S _ G E T >--------------------------------------
Creates two identifier lists: a k/v table of identifiers and their values to be used locally and for use in the
COinS metadata, and a sequence table of the rendered identifier strings that will be included in the rendered
citation.
]]
local function identifier_lists_get (args_t, options_t, ID_support_t)
local ID_list_coins_t = extract_ids (args_t); -- get a table of identifiers and their values for use locally and for use in COinS
options_check (ID_list_coins_t, ID_support_t); -- ID support parameters must have matching identifier parameters
local ID_access_levels_t = extract_id_access_levels (args_t, ID_list_coins_t); -- get a table of identifier access levels
local ID_list_t = build_id_list (ID_list_coins_t, options_t, ID_access_levels_t); -- get a sequence table of rendered identifier strings
return ID_list_t, ID_list_coins_t; -- return the tables
end
--[[--------------------------< S E T _ S E L E C T E D _ M O D U L E S >--------------------------------------
Sets local cfg table and imported functions table to same (live or sandbox) as that used by the other modules.
]]
local function set_selected_modules (cfg_table_ptr, utilities_page_ptr)
cfg = cfg_table_ptr;
has_accept_as_written = utilities_page_ptr.has_accept_as_written; -- import functions from select Module:Citation/CS1/Utilities module
is_set = utilities_page_ptr.is_set;
in_array = utilities_page_ptr.in_array;
set_message = utilities_page_ptr.set_message;
select_one = utilities_page_ptr.select_one;
substitute = utilities_page_ptr.substitute;
make_wikilink = utilities_page_ptr.make_wikilink;
z = utilities_page_ptr.z; -- table of tables in Module:Citation/CS1/Utilities
end
--[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------
]]
return {
auto_link_urls = auto_link_urls, -- table of identifier URLs to be used when auto-linking |title=
identifier_lists_get = identifier_lists_get, -- experiment to replace individual calls to build_id_list(), extract_ids, extract_id_access_levels
is_embargoed = is_embargoed;
set_selected_modules = set_selected_modules;
}
epcxjm1e7vnxg0m69646hxwauvwdfwq
Module:Citation/CS1/COinS
828
48828620
1133582634
1067248994
2023-01-14T14:43:36Z
Trappist the monk
10289486
sync from sandbox;
Scribunto
text/plain
--[[--------------------------< F O R W A R D D E C L A R A T I O N S >--------------------------------------
]]
local has_accept_as_written, is_set, in_array, remove_wiki_link, strip_apostrophe_markup; -- functions in Module:Citation/CS1/Utilities
local cfg; -- table of configuration tables that are defined in Module:Citation/CS1/Configuration
--[[--------------------------< M A K E _ C O I N S _ T I T L E >----------------------------------------------
Makes a title for COinS from Title and / or ScriptTitle (or any other name-script pairs)
Apostrophe markup (bold, italics) is stripped from each value so that the COinS metadata isn't corrupted with strings
of %27%27...
]]
local function make_coins_title (title, script)
title = has_accept_as_written (title);
if is_set (title) then
title = strip_apostrophe_markup (title); -- strip any apostrophe markup
else
title = ''; -- if not set, make sure title is an empty string
end
if is_set (script) then
script = script:gsub ('^%l%l%s*:%s*', ''); -- remove language prefix if present (script value may now be empty string)
script = strip_apostrophe_markup (script); -- strip any apostrophe markup
else
script = ''; -- if not set, make sure script is an empty string
end
if is_set (title) and is_set (script) then
script = ' ' .. script; -- add a space before we concatenate
end
return title .. script; -- return the concatenation
end
--[[--------------------------< E S C A P E _ L U A _ M A G I C _ C H A R S >----------------------------------
Returns a string where all of Lua's magic characters have been escaped. This is important because functions like
string.gsub() treat their pattern and replace strings as patterns, not literal strings.
]]
local function escape_lua_magic_chars (argument)
argument = argument:gsub("%%", "%%%%"); -- replace % with %%
argument = argument:gsub("([%^%$%(%)%.%[%]%*%+%-%?])", "%%%1"); -- replace all other Lua magic pattern characters
return argument;
end
--[[--------------------------< G E T _ C O I N S _ P A G E S >------------------------------------------------
Extract page numbers from external wikilinks in any of the |page=, |pages=, or |at= parameters for use in COinS.
]]
local function get_coins_pages (pages)
local pattern;
if not is_set (pages) then return pages; end -- if no page numbers then we're done
while true do
pattern = pages:match("%[(%w*:?//[^ ]+%s+)[%w%d].*%]"); -- pattern is the opening bracket, the URL and following space(s): "[url "
if nil == pattern then break; end -- no more URLs
pattern = escape_lua_magic_chars (pattern); -- pattern is not a literal string; escape Lua's magic pattern characters
pages = pages:gsub(pattern, ""); -- remove as many instances of pattern as possible
end
pages = pages:gsub("[%[%]]", ""); -- remove the brackets
pages = pages:gsub("–", "-" ); -- replace endashes with hyphens
pages = pages:gsub("&%w+;", "-" ); -- and replace HTML entities (– etc.) with hyphens; do we need to replace numerical entities like   and the like?
return pages;
end
--[=[-------------------------< C O I N S _ R E P L A C E _ M A T H _ S T R I P M A R K E R >------------------
There are three options for math markup rendering that depend on the editor's math preference settings. These
settings are at [[Special:Preferences#mw-prefsection-rendering]] and are
PNG images
TeX source
MathML with SVG or PNG fallback
All three are heavy with HTML and CSS which doesn't belong in the metadata.
Without this function, the metadata saved in the raw wikitext contained the rendering determined by the settings
of the last editor to save the page.
This function gets the rendered form of an equation according to the editor's preference before the page is saved. It
then searches the rendering for the text equivalent of the rendered equation and replaces the rendering with that so
that the page is saved without extraneous HTML/CSS markup and with a reasonably readable text form of the equation.
When a replacement is made, this function returns true and the value with replacement; otherwise false and the initial
value. To replace multipe equations it is necessary to call this function from within a loop.
]=]
local function coins_replace_math_stripmarker (value)
local stripmarker = cfg.stripmarkers['math'];
local rendering = value:match (stripmarker); -- is there a math stripmarker
if not rendering then -- when value doesn't have a math stripmarker, abandon this test
return false, value;
end
rendering = mw.text.unstripNoWiki (rendering); -- convert stripmarker into rendered value (or nil? ''? when math render error)
if rendering:match ('alt="[^"]+"') then -- if PNG math option
rendering = rendering:match ('alt="([^"]+)"'); -- extract just the math text
elseif rendering:match ('$%s+.+%s+%$') then -- if TeX math option; $ is legit character that is escapes as \$
rendering = rendering:match ('$%s+(.+)%s+%$') -- extract just the math text
elseif rendering:match ('<annotation[^>]+>.+</annotation>') then -- if MathML math option
rendering = rendering:match ('<annotation[^>]+>(.+)</annotation>') -- extract just the math text
else
return false, value; -- had math stripmarker but not one of the three defined forms
end
return true, value:gsub (stripmarker, rendering, 1);
end
--[[--------------------------< C O I N S _ C L E A N U P >----------------------------------------------------
Cleanup parameter values for the metadata by removing or replacing invisible characters and certain HTML entities.
2015-12-10: there is a bug in mw.text.unstripNoWiki (). It replaces math stripmarkers with the appropriate content
when it shouldn't. See https://phabricator.wikimedia.org/T121085 and Wikipedia_talk:Lua#stripmarkers_and_mw.text.unstripNoWiki.28.29
TODO: move the replacement patterns and replacement values into a table in /Configuration similar to the invisible
characters table?
]]
local function coins_cleanup (value)
local replaced = true; -- default state to get the do loop running
while replaced do -- loop until all math stripmarkers replaced
replaced, value = coins_replace_math_stripmarker (value); -- replace math stripmarker with text representation of the equation
end
value = value:gsub (cfg.stripmarkers['math'], "MATH RENDER ERROR"); -- one or more couldn't be replaced; insert vague error message
value = mw.text.unstripNoWiki (value); -- replace nowiki stripmarkers with their content
value = value:gsub ('<span class="nowrap" style="padding%-left:0%.1em;">'(s?)</span>', "'%1"); -- replace {{'}} or {{'s}} with simple apostrophe or apostrophe-s
value = value:gsub (' ', ' '); -- replace entity with plain space
value = value:gsub ('\226\128\138', ' '); -- replace hair space with plain space
if not mw.ustring.find (value, cfg.indic_script) then -- don't remove zero-width joiner characters from indic script
value = value:gsub ('‍', ''); -- remove ‍ entities
value = mw.ustring.gsub (value, '[\226\128\141\226\128\139\194\173]', ''); -- remove zero-width joiner, zero-width space, soft hyphen
end
value = value:gsub ('[\009\010\013 ]+', ' '); -- replace horizontal tab, line feed, carriage return with plain space
return value;
end
--[[--------------------------< C O I N S >--------------------------------------------------------------------
COinS metadata (see <http://ocoins.info/>) allows automated tools to parse the citation information.
]]
local function COinS(data, class)
if 'table' ~= type(data) or nil == next(data) then
return '';
end
for k, v in pairs (data) do -- spin through all of the metadata parameter values
if 'ID_list' ~= k and 'Authors' ~= k then -- except the ID_list and Author tables (author nowiki stripmarker done when Author table processed)
data[k] = coins_cleanup (v);
end
end
local ctx_ver = "Z39.88-2004";
-- treat table strictly as an array with only set values.
local OCinSoutput = setmetatable( {}, {
__newindex = function(self, key, value)
if is_set(value) then
rawset( self, #self+1, table.concat{ key, '=', mw.uri.encode( remove_wiki_link( value ) ) } );
end
end
});
if in_array (class, {'arxiv', 'biorxiv', 'citeseerx', 'ssrn', 'journal', 'news', 'magazine'}) or
(in_array (class, {'conference', 'interview', 'map', 'press release', 'web'}) and is_set(data.Periodical)) or
('citation' == class and is_set(data.Periodical) and not is_set (data.Encyclopedia)) then
OCinSoutput.rft_val_fmt = "info:ofi/fmt:kev:mtx:journal"; -- journal metadata identifier
if in_array (class, {'arxiv', 'biorxiv', 'citeseerx', 'ssrn'}) then -- set genre according to the type of citation template we are rendering
OCinSoutput["rft.genre"] = "preprint"; -- cite arxiv, cite biorxiv, cite citeseerx, cite ssrn
elseif 'conference' == class then
OCinSoutput["rft.genre"] = "conference"; -- cite conference (when Periodical set)
elseif 'web' == class then
OCinSoutput["rft.genre"] = "unknown"; -- cite web (when Periodical set)
else
OCinSoutput["rft.genre"] = "article"; -- journal and other 'periodical' articles
end
OCinSoutput["rft.jtitle"] = data.Periodical; -- journal only
OCinSoutput["rft.atitle"] = data.Title; -- 'periodical' article titles
-- these used only for periodicals
OCinSoutput["rft.ssn"] = data.Season; -- keywords: winter, spring, summer, fall
OCinSoutput["rft.quarter"] = data.Quarter; -- single digits 1->first quarter, etc.
OCinSoutput["rft.chron"] = data.Chron; -- free-form date components
OCinSoutput["rft.volume"] = data.Volume; -- does not apply to books
OCinSoutput["rft.issue"] = data.Issue;
OCinSoutput['rft.artnum'] = data.ArticleNumber; -- {{cite journal}} only
OCinSoutput["rft.pages"] = data.Pages; -- also used in book metadata
elseif 'thesis' ~= class then -- all others except cite thesis are treated as 'book' metadata; genre distinguishes
OCinSoutput.rft_val_fmt = "info:ofi/fmt:kev:mtx:book"; -- book metadata identifier
if 'report' == class or 'techreport' == class then -- cite report and cite techreport
OCinSoutput["rft.genre"] = "report";
elseif 'conference' == class then -- cite conference when Periodical not set
OCinSoutput["rft.genre"] = "conference";
OCinSoutput["rft.atitle"] = data.Chapter; -- conference paper as chapter in proceedings (book)
elseif in_array (class, {'book', 'citation', 'encyclopaedia', 'interview', 'map'}) then
if is_set (data.Chapter) then
OCinSoutput["rft.genre"] = "bookitem";
OCinSoutput["rft.atitle"] = data.Chapter; -- book chapter, encyclopedia article, interview in a book, or map title
else
if 'map' == class or 'interview' == class then
OCinSoutput["rft.genre"] = 'unknown'; -- standalone map or interview
else
OCinSoutput["rft.genre"] = 'book'; -- book and encyclopedia
end
end
else -- {'audio-visual', 'AV-media-notes', 'DVD-notes', 'episode', 'interview', 'mailinglist', 'map', 'newsgroup', 'podcast', 'press release', 'serial', 'sign', 'speech', 'web'}
OCinSoutput["rft.genre"] = "unknown";
end
OCinSoutput["rft.btitle"] = data.Title; -- book only
OCinSoutput["rft.place"] = data.PublicationPlace; -- book only
OCinSoutput["rft.series"] = data.Series; -- book only
OCinSoutput["rft.pages"] = data.Pages; -- book, journal
OCinSoutput["rft.edition"] = data.Edition; -- book only
OCinSoutput["rft.pub"] = data.PublisherName; -- book and dissertation
else -- cite thesis
OCinSoutput.rft_val_fmt = "info:ofi/fmt:kev:mtx:dissertation"; -- dissertation metadata identifier
OCinSoutput["rft.title"] = data.Title; -- dissertation (also patent but that is not yet supported)
OCinSoutput["rft.degree"] = data.Degree; -- dissertation only
OCinSoutput['rft.inst'] = data.PublisherName; -- book and dissertation
end
-- NB. Not currently supported are "info:ofi/fmt:kev:mtx:patent", "info:ofi/fmt:kev:mtx:dc", "info:ofi/fmt:kev:mtx:sch_svc", "info:ofi/fmt:kev:mtx:ctx"
-- and now common parameters (as much as possible)
OCinSoutput["rft.date"] = data.Date; -- book, journal, dissertation
for k, v in pairs( data.ID_list ) do -- what to do about these? For now assume that they are common to all?
if k == 'ISBN' then v = v:gsub( "[^-0-9X]", "" ); end
local id = cfg.id_handlers[k].COinS;
if string.sub( id or "", 1, 4 ) == 'info' then -- for ids that are in the info:registry
OCinSoutput["rft_id"] = table.concat{ id, "/", v };
elseif string.sub (id or "", 1, 3 ) == 'rft' then -- for isbn, issn, eissn, etc. that have defined COinS keywords
OCinSoutput[ id ] = v;
elseif 'url' == id then -- for urls that are assembled in ~/Identifiers; |asin= and |ol=
OCinSoutput["rft_id"] = table.concat ({data.ID_list[k], "#id-name=", cfg.id_handlers[k].label});
elseif id then -- when cfg.id_handlers[k].COinS is not nil so urls created here
OCinSoutput["rft_id"] = table.concat{ cfg.id_handlers[k].prefix, v, cfg.id_handlers[k].suffix or '', "#id-name=", cfg.id_handlers[k].label }; -- others; provide a URL and indicate identifier name as #fragment (human-readable, but transparent to browsers)
end
end
local last, first;
for k, v in ipairs( data.Authors ) do
last, first = coins_cleanup (v.last), coins_cleanup (v.first or ''); -- replace any nowiki stripmarkers, non-printing or invisible characters
if k == 1 then -- for the first author name only
if is_set(last) and is_set(first) then -- set these COinS values if |first= and |last= specify the first author name
OCinSoutput["rft.aulast"] = last; -- book, journal, dissertation
OCinSoutput["rft.aufirst"] = first; -- book, journal, dissertation
elseif is_set(last) then
OCinSoutput["rft.au"] = last; -- book, journal, dissertation -- otherwise use this form for the first name
end
else -- for all other authors
if is_set(last) and is_set(first) then
OCinSoutput["rft.au"] = table.concat{ last, ", ", first }; -- book, journal, dissertation
elseif is_set(last) then
OCinSoutput["rft.au"] = last; -- book, journal, dissertation
end
-- TODO: At present we do not report "et al.". Add anything special if this condition applies?
end
end
OCinSoutput.rft_id = data.URL;
OCinSoutput.rfr_id = table.concat{ "info:sid/", mw.site.server:match( "[^/]*$" ), ":", data.RawPage };
-- TODO: Add optional extra info:
-- rfr_dat=#REVISION<version> (referrer private data)
-- ctx_id=<data.RawPage>#<ref> (identifier for the context object)
-- ctx_tim=<ts> (timestamp in format yyyy-mm-ddThh:mm:ssTZD or yyyy-mm-dd)
-- ctx_enc=info:ofi/enc:UTF-8 (character encoding)
OCinSoutput = setmetatable( OCinSoutput, nil );
-- sort with version string always first, and combine.
-- table.sort( OCinSoutput );
table.insert( OCinSoutput, 1, "ctx_ver=" .. ctx_ver ); -- such as "Z39.88-2004"
return table.concat(OCinSoutput, "&");
end
--[[--------------------------< S E T _ S E L E C T E D _ M O D U L E S >--------------------------------------
Sets local cfg table and imported functions table to same (live or sandbox) as that used by the other modules.
]]
local function set_selected_modules (cfg_table_ptr, utilities_page_ptr)
cfg = cfg_table_ptr;
has_accept_as_written = utilities_page_ptr.has_accept_as_written; -- import functions from selected Module:Citation/CS1/Utilities module
is_set = utilities_page_ptr.is_set;
in_array = utilities_page_ptr.in_array;
remove_wiki_link = utilities_page_ptr.remove_wiki_link;
strip_apostrophe_markup = utilities_page_ptr.strip_apostrophe_markup;
end
--[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------
]]
return {
make_coins_title = make_coins_title,
get_coins_pages = get_coins_pages,
COinS = COinS,
set_selected_modules = set_selected_modules,
}
a0gmpnpcb8ubdmyykxu2uq3uavog7ta
Module:Citation/CS1/styles.css
828
57940169
1133582631
1067248974
2023-01-14T14:43:34Z
Trappist the monk
10289486
sync from sandbox;
sanitized-css
text/css
/* Protection icon
the following line controls the page-protection icon in the upper right corner
it must remain within this comment
{{sandbox other||{{pp-template}}}}
*/
/* Overrides
Some wikis do not override user agent default styles for HTML <cite> and <q>,
unlike en.wp. On en.wp, keep these the same as [[MediaWiki:Common.css]].
The word-wrap and :target styles were moved here from Common.css.
On en.wp, keep these the same as [[Template:Citation/styles.css]].
*/
cite.citation {
font-style: inherit; /* Remove italics for <cite> */
/* Break long urls, etc., rather than overflowing box */
word-wrap: break-word;
}
.citation q {
quotes: '"' '"' "'" "'"; /* Straight quote marks for <q> */
}
/* Highlight linked elements (such as clicked references) in blue */
.citation:target {
/* ignore the linter - all browsers of interest implement this */
background-color: rgba(0, 127, 255, 0.133);
}
/* ID and URL access
Both core and Common.css have selector .mw-parser-output a[href$=".pdf"].external
for PDF pages. All TemplateStyles pages are hoisted to .mw-parser-output. We need
to have specificity equal to a[href$=".pdf"].external for locks to override PDF icon.
That's essentially 2 classes and 1 element.
the .id-lock-... selectors are for use by non-citation templates like
{{Catalog lookup link}} which do not have to handle PDF links
*/
.id-lock-free a,
.citation .cs1-lock-free a {
background: url(//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg)
right 0.1em center/9px no-repeat;
}
.id-lock-limited a,
.id-lock-registration a,
.citation .cs1-lock-limited a,
.citation .cs1-lock-registration a {
background: url(//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg)
right 0.1em center/9px no-repeat;
}
.id-lock-subscription a,
.citation .cs1-lock-subscription a {
background: url(//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg)
right 0.1em center/9px no-repeat;
}
/* Wikisource
Wikisource icon when |chapter= or |title= is wikilinked to Wikisource
as in cite wikisource
*/
.cs1-ws-icon a {
background: url(//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg)
right 0.1em center/12px no-repeat;
}
/* Errors and maintenance */
.cs1-code {
/* <code>...</code> style override: mediawiki's css definition is specified here:
https://git.wikimedia.org/blob/mediawiki%2Fcore.git/
69cd73811f7aadd093050dbf20ed70ef0b42a713/skins%2Fcommon%2FcommonElements.css#L199
*/
color: inherit;
background: inherit;
border: none;
padding: inherit;
}
.cs1-hidden-error {
display: none;
color: #d33;
}
.cs1-visible-error {
color: #d33;
}
.cs1-maint {
display: none;
color: #3a3;
margin-left: 0.3em;
}
/* Small text size
Set small text size in one place. 0.95 (here) * 0.9 (from references list) is
~0.85, which is the lower bound for size for accessibility. Old styling for this
was just 0.85. We could write the rule so that when this template is inside
references/reflist, only then does it multiply by 0.95; else multiply by 0.85 */
.cs1-format {
font-size: 95%;
}
/* kerning */
.cs1-kern-left {
padding-left: 0.2em;
}
.cs1-kern-right {
padding-right: 0.2em;
}
/* selflinks – avoid bold font style when cs1|2 template links to the current page */
.citation .mw-selflink {
font-weight: inherit;
}
ejxb7w00q7ab6z612s0f3eb5n73ikia
Template:Pagetype
10
23143954
616197024
580855388
2014-07-09T08:29:38Z
Callanecc
10440891
Changed protection level of Template:Pagetype: [[WP:High-risk templates|Highly visible template]]: With more than 5.5 million transclusions and cascade protections this should be full protected as well ([Edit=Allow only administrators] (indefinite) [Move=
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#invoke:pagetype|main}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
lljnsh3xa96oyrio8us1qbonct9sq7b
Module:Pagetype
828
40875383
963271820
960206111
2020-06-18T21:22:08Z
RexxS
6112901
add caps parameter per talk request
Scribunto
text/plain
--------------------------------------------------------------------------------
-- --
-- PAGETYPE --
-- --
-- This is a meta-module intended to replace {{pagetype}} and similar --
-- templates. It automatically detects namespaces, and allows for a --
-- great deal of customisation. It can easily be ported to other --
-- wikis by changing the values in the [[Module:Pagetype/config]]. --
-- --
--------------------------------------------------------------------------------
-- Load config.
local cfg = mw.loadData('Module:Pagetype/config')
-- Load required modules.
local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')
local nsDetectModule = require('Module:Namespace detect')
local nsDetect = nsDetectModule._main
local getParamMappings = nsDetectModule.getParamMappings
local getPageObject = nsDetectModule.getPageObject
local p = {}
local function shallowCopy(t)
-- Makes a shallow copy of a table.
local ret = {}
for k, v in pairs(t) do
ret[k] = v
end
return ret
end
local function checkPagetypeInput(namespace, val)
-- Checks to see whether we need the default value for the given namespace,
-- and if so gets it from the pagetypes table.
-- The yesno function returns true/false for "yes", "no", etc., and returns
-- val for other input.
local ret = yesno(val, val)
if ret and type(ret) ~= 'string' then
ret = cfg.pagetypes[namespace]
end
return ret
end
local function getPagetypeFromClass(class, param, aliasTable, default)
-- Gets the pagetype from a class specified from the first positional
-- parameter.
param = yesno(param, param)
if param ~= false then -- No check if specifically disallowed.
for _, alias in ipairs(aliasTable) do
if class == alias then
if type(param) == 'string' then
return param
else
return default
end
end
end
end
end
local function getNsDetectValue(args)
-- Builds the arguments to pass to [[Module:Namespace detect]] and returns
-- the result.
-- Get the default values.
local ndArgs = {}
local defaultns = args[cfg.defaultns]
if defaultns == cfg.defaultnsAll then
ndArgs = shallowCopy(cfg.pagetypes)
else
local defaultnsArray
if defaultns == cfg.defaultnsExtended then
defaultnsArray = cfg.extendedNamespaces
elseif defaultns == cfg.defaultnsNone then
defaultnsArray = {}
else
defaultnsArray = cfg.defaultNamespaces
end
for _, namespace in ipairs(defaultnsArray) do
ndArgs[namespace] = cfg.pagetypes[namespace]
end
end
--[[
-- Add custom values passed in from the arguments. These overwrite the
-- defaults. The possible argument names are fetched from
-- Module:Namespace detect automatically in case new namespaces are
-- added. Although we accept namespace aliases as parameters, we only pass
-- the local namespace name as a parameter to Module:Namespace detect.
-- This means that the "image" parameter can overwrite defaults for the
-- File: namespace, which wouldn't work if we passed the parameters through
-- separately.
--]]
local mappings = getParamMappings()
for ns, paramAliases in pairs(mappings) do
-- Copy the aliases table, as # doesn't work with tables returned from
-- mw.loadData.
paramAliases = shallowCopy(paramAliases)
local paramName = paramAliases[1]
-- Iterate backwards along the array so that any values for the local
-- namespace names overwrite those for namespace aliases.
for i = #paramAliases, 1, -1 do
local paramAlias = paramAliases[i]
local ndArg = checkPagetypeInput(paramAlias, args[paramAlias])
if ndArg == false then
-- If any arguments are false, convert them to nil to protect
-- against breakage by future changes to
-- [[Module:Namespace detect]].
ndArgs[paramName] = nil
elseif ndArg then
ndArgs[paramName] = ndArg
end
end
end
-- Check for disambiguation-class and N/A-class pages in mainspace.
if ndArgs.main then
local class = args[1]
if type(class) == 'string' then
-- Put in lower case so e.g. "Dab" and "dab" will both match.
class = mw.ustring.lower(class)
end
local dab = getPagetypeFromClass(
class,
args[cfg.dab],
cfg.dabAliases,
cfg.dabDefault
)
if dab then
ndArgs.main = dab
else
local na = getPagetypeFromClass(
class,
args[cfg.na],
cfg.naAliases,
cfg.naDefault
)
if na then
ndArgs.main = na
end
end
end
-- If there is no talk value specified, use the corresponding subject
-- namespace for talk pages.
if not ndArgs.talk then
ndArgs.subjectns = true
end
-- Add the fallback value. This can also be customised, but it cannot be
-- disabled.
local other = args[cfg.other]
-- We will ignore true/false/nil results from yesno here, but using it
-- anyway for consistency.
other = yesno(other, other)
if type(other) == 'string' then
ndArgs.other = other
else
ndArgs.other = cfg.otherDefault
end
-- Allow custom page values.
ndArgs.page = args.page
return nsDetect(ndArgs)
end
local function detectRedirects(args)
local redirect = args[cfg.redirect]
-- The yesno function returns true/false for "yes", "no", etc., and returns
-- redirect for other input.
redirect = yesno(redirect, redirect)
if redirect == false then
-- Detect redirects unless they have been explicitly disallowed with
-- "redirect=no" or similar.
return
end
local pageObject = getPageObject(args.page)
-- If we are using subject namespaces elsewhere, do so here as well.
if pageObject
and not yesno(args.talk, true)
and args[cfg.defaultns] ~= cfg.defaultnsAll
then
pageObject = getPageObject(
pageObject.subjectNsText .. ':' .. pageObject.text
)
end
-- Allow custom values for redirects.
if pageObject and pageObject.isRedirect then
if type(redirect) == 'string' then
return redirect
else
return cfg.redirectDefault
end
end
end
function p._main(args)
local redirect = detectRedirects(args)
local pagetype = ""
if redirect then
pagetype = redirect
else
pagetype = getNsDetectValue(args)
end
if yesno(args.plural, false) then
if cfg.irregularPlurals[pagetype] then
pagetype = cfg.irregularPlurals[pagetype]
else
pagetype = pagetype .. cfg.plural -- often 's'
end
end
if yesno(args.caps, false) then
pagetype = mw.ustring.upper(mw.ustring.sub(pagetype, 1, 1)) ..
mw.ustring.sub(pagetype, 2)
end
return pagetype
end
function p.main(frame)
local args = getArgs(frame)
return p._main(args)
end
return p
3uutklb10j89clizor7gnyrlkhbqg0d
Module:Pagetype/config
828
42396800
1032938598
1029747509
2021-07-10T15:47:32Z
Trialpears
35786750
Book namespace removal will happen within a few days
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Module:Pagetype configuration data --
-- This page holds localisation and configuration data for Module:Pagetype. --
--------------------------------------------------------------------------------
local cfg = {} -- Don't edit this line.
--------------------------------------------------------------------------------
-- Start configuration data --
--------------------------------------------------------------------------------
-- This table holds the values to use for "main=true", "user=true", etc. Keys to
-- this table should be namespace parameters that can be used with
-- [[Module:Namespace detect]].
cfg.pagetypes = {
['main'] = 'article',
['user'] = 'user page',
['project'] = 'project page',
['wikipedia'] = 'project page',
['wp'] = 'project page',
['file'] = 'file',
['image'] = 'file',
['mediawiki'] = 'interface page',
['template'] = 'template',
['help'] = 'help page',
['category'] = 'category',
['portal'] = 'portal',
['draft'] = 'draft',
['timedtext'] = 'Timed Text page',
['module'] = 'module',
['topic'] = 'topic',
['gadget'] = 'gadget',
['gadget definition'] = 'gadget definition',
['talk'] = 'talk page',
['special'] = 'special page',
['media'] = 'file',
}
-- This table holds the names of the namespaces to be looked up from
-- cfg.pagetypes by default.
cfg.defaultNamespaces = {
'main',
'file',
'template',
'category',
'module'
}
-- This table holds the names of the namespaces to be looked up from
-- cfg.pagetypes if cfg.defaultnsExtended is set.
cfg.extendedNamespaces = {
'main',
'user',
'project',
'file',
'mediawiki',
'template',
'category',
'help',
'portal',
'module',
'draft'
}
-- The parameter name to set which default namespace values to be looked up from
-- cfg.pagetypes.
cfg.defaultns = 'defaultns'
-- The value of cfg.defaultns to set all namespaces, including talk.
cfg.defaultnsAll = 'all'
-- The value of cfg.defaultns to set the namespaces listed in
-- cfg.extendedNamespaces
cfg.defaultnsExtended = 'extended'
-- The value of cfg.defaultns to set no default namespaces.
cfg.defaultnsNone = 'none'
-- The parameter name to use for disambiguation pages page.
cfg.dab = 'dab'
-- This table holds the different possible aliases for disambiguation-class
-- pages. These should be lower-case.
cfg.dabAliases = {
'disambiguation',
'disambig',
'disamb',
'dab'
}
-- The default value for disambiguation pages.
cfg.dabDefault = 'page'
-- The parameter name to use for N/A-class page.
cfg.na = 'na'
-- This table holds the different possible aliases for N/A-class pages. These
-- should be lower-case.
cfg.naAliases = {'na', 'n/a'}
-- The default value for N/A-class pages.
cfg.naDefault = 'page'
-- The parameter name to use for redirects.
cfg.redirect = 'redirect'
-- The default value to use for redirects.
cfg.redirectDefault = 'redirect'
-- The parameter name for undefined namespaces.
cfg.other = 'other'
-- The value used if the module detects an undefined namespace.
cfg.otherDefault = 'page'
-- The usual suffix denoting a plural.
cfg.plural = 's'
-- This table holds plurals not formed by a simple suffix.
cfg.irregularPlurals = {
["category"] = "categories"
}
--------------------------------------------------------------------------------
-- End configuration data --
--------------------------------------------------------------------------------
return cfg -- Don't edit this line
qi8m5o0e66j9quw6kiawd2otsulzq9m
Module:Namespace detect
828
39762919
602886406
601020017
2014-04-05T17:01:23Z
Mr. Stradivarius
4708675
use demopage instead of page as the main "page" parameter
Scribunto
text/plain
--[[
--------------------------------------------------------------------------------
-- --
-- NAMESPACE DETECT --
-- --
-- This module implements the {{namespace detect}} template in Lua, with a --
-- few improvements: all namespaces and all namespace aliases are supported, --
-- and namespace names are detected automatically for the local wiki. The --
-- module can also use the corresponding subject namespace value if it is --
-- used on a talk page. Parameter names can be configured for different wikis --
-- by altering the values in the "cfg" table in --
-- Module:Namespace detect/config. --
-- --
--------------------------------------------------------------------------------
--]]
local data = mw.loadData('Module:Namespace detect/data')
local argKeys = data.argKeys
local cfg = data.cfg
local mappings = data.mappings
local yesno = require('Module:Yesno')
local mArguments -- Lazily initialise Module:Arguments
local mTableTools -- Lazily initilalise Module:TableTools
local ustringLower = mw.ustring.lower
local p = {}
local function fetchValue(t1, t2)
-- Fetches a value from the table t1 for the first key in array t2 where
-- a non-nil value of t1 exists.
for i, key in ipairs(t2) do
local value = t1[key]
if value ~= nil then
return value
end
end
return nil
end
local function equalsArrayValue(t, value)
-- Returns true if value equals a value in the array t. Otherwise
-- returns false.
for i, arrayValue in ipairs(t) do
if value == arrayValue then
return true
end
end
return false
end
function p.getPageObject(page)
-- Get the page object, passing the function through pcall in case of
-- errors, e.g. being over the expensive function count limit.
if page then
local success, pageObject = pcall(mw.title.new, page)
if success then
return pageObject
else
return nil
end
else
return mw.title.getCurrentTitle()
end
end
-- Provided for backward compatibility with other modules
function p.getParamMappings()
return mappings
end
local function getNamespace(args)
-- This function gets the namespace name from the page object.
local page = fetchValue(args, argKeys.demopage)
if page == '' then
page = nil
end
local demospace = fetchValue(args, argKeys.demospace)
if demospace == '' then
demospace = nil
end
local subjectns = fetchValue(args, argKeys.subjectns)
local ret
if demospace then
-- Handle "demospace = main" properly.
if equalsArrayValue(argKeys.main, ustringLower(demospace)) then
ret = mw.site.namespaces[0].name
else
ret = demospace
end
else
local pageObject = p.getPageObject(page)
if pageObject then
if pageObject.isTalkPage then
-- Get the subject namespace if the option is set,
-- otherwise use "talk".
if yesno(subjectns) then
ret = mw.site.namespaces[pageObject.namespace].subject.name
else
ret = 'talk'
end
else
ret = pageObject.nsText
end
else
return nil -- return nil if the page object doesn't exist.
end
end
ret = ret:gsub('_', ' ')
return ustringLower(ret)
end
function p._main(args)
-- Check the parameters stored in the mappings table for any matches.
local namespace = getNamespace(args) or 'other' -- "other" avoids nil table keys
local params = mappings[namespace] or {}
local ret = fetchValue(args, params)
--[[
-- If there were no matches, return parameters for other namespaces.
-- This happens if there was no text specified for the namespace that
-- was detected or if the demospace parameter is not a valid
-- namespace. Note that the parameter for the detected namespace must be
-- completely absent for this to happen, not merely blank.
--]]
if ret == nil then
ret = fetchValue(args, argKeys.other)
end
return ret
end
function p.main(frame)
mArguments = require('Module:Arguments')
local args = mArguments.getArgs(frame, {removeBlanks = false})
local ret = p._main(args)
return ret or ''
end
function p.table(frame)
--[[
-- Create a wikitable of all subject namespace parameters, for
-- documentation purposes. The talk parameter is optional, in case it
-- needs to be excluded in the documentation.
--]]
-- Load modules and initialise variables.
mTableTools = require('Module:TableTools')
local namespaces = mw.site.namespaces
local cfg = data.cfg
local useTalk = type(frame) == 'table'
and type(frame.args) == 'table'
and yesno(frame.args.talk) -- Whether to use the talk parameter.
-- Get the header names.
local function checkValue(value, default)
if type(value) == 'string' then
return value
else
return default
end
end
local nsHeader = checkValue(cfg.wikitableNamespaceHeader, 'Namespace')
local aliasesHeader = checkValue(cfg.wikitableAliasesHeader, 'Aliases')
-- Put the namespaces in order.
local mappingsOrdered = {}
for nsname, params in pairs(mappings) do
if useTalk or nsname ~= 'talk' then
local nsid = namespaces[nsname].id
-- Add 1, as the array must start with 1; nsid 0 would be lost otherwise.
nsid = nsid + 1
mappingsOrdered[nsid] = params
end
end
mappingsOrdered = mTableTools.compressSparseArray(mappingsOrdered)
-- Build the table.
local ret = '{| class="wikitable"'
.. '\n|-'
.. '\n! ' .. nsHeader
.. '\n! ' .. aliasesHeader
for i, params in ipairs(mappingsOrdered) do
for j, param in ipairs(params) do
if j == 1 then
ret = ret .. '\n|-'
.. '\n| <code>' .. param .. '</code>'
.. '\n| '
elseif j == 2 then
ret = ret .. '<code>' .. param .. '</code>'
else
ret = ret .. ', <code>' .. param .. '</code>'
end
end
end
ret = ret .. '\n|-'
.. '\n|}'
return ret
end
return p
j7kygz1y56jpz4doq0m2c6x1td5d8ar
Module:Namespace detect/data
828
42257476
948472520
948472519
2020-04-01T06:12:45Z
MusikAnimal
14882394
1 revision imported
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Namespace detect data --
-- This module holds data for [[Module:Namespace detect]] to be loaded per --
-- page, rather than per #invoke, for performance reasons. --
--------------------------------------------------------------------------------
local cfg = require('Module:Namespace detect/config')
local function addKey(t, key, defaultKey)
if key ~= defaultKey then
t[#t + 1] = key
end
end
-- Get a table of parameters to query for each default parameter name.
-- This allows wikis to customise parameter names in the cfg table while
-- ensuring that default parameter names will always work. The cfg table
-- values can be added as a string, or as an array of strings.
local defaultKeys = {
'main',
'talk',
'other',
'subjectns',
'demospace',
'demopage'
}
local argKeys = {}
for i, defaultKey in ipairs(defaultKeys) do
argKeys[defaultKey] = {defaultKey}
end
for defaultKey, t in pairs(argKeys) do
local cfgValue = cfg[defaultKey]
local cfgValueType = type(cfgValue)
if cfgValueType == 'string' then
addKey(t, cfgValue, defaultKey)
elseif cfgValueType == 'table' then
for i, key in ipairs(cfgValue) do
addKey(t, key, defaultKey)
end
end
cfg[defaultKey] = nil -- Free the cfg value as we don't need it any more.
end
local function getParamMappings()
--[[
-- Returns a table of how parameter names map to namespace names. The keys
-- are the actual namespace names, in lower case, and the values are the
-- possible parameter names for that namespace, also in lower case. The
-- table entries are structured like this:
-- {
-- [''] = {'main'},
-- ['wikipedia'] = {'wikipedia', 'project', 'wp'},
-- ...
-- }
--]]
local mappings = {}
local mainNsName = mw.site.subjectNamespaces[0].name
mainNsName = mw.ustring.lower(mainNsName)
mappings[mainNsName] = mw.clone(argKeys.main)
mappings['talk'] = mw.clone(argKeys.talk)
for nsid, ns in pairs(mw.site.subjectNamespaces) do
if nsid ~= 0 then -- Exclude main namespace.
local nsname = mw.ustring.lower(ns.name)
local canonicalName = mw.ustring.lower(ns.canonicalName)
mappings[nsname] = {nsname}
if canonicalName ~= nsname then
table.insert(mappings[nsname], canonicalName)
end
for _, alias in ipairs(ns.aliases) do
table.insert(mappings[nsname], mw.ustring.lower(alias))
end
end
end
return mappings
end
return {
argKeys = argKeys,
cfg = cfg,
mappings = getParamMappings()
}
ojp6d3pc8mql5nufaqdg576c9so3479
Module:Namespace detect/config
828
42256703
948472518
948472515
2020-04-01T06:12:44Z
MusikAnimal
14882394
1 revision imported
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Namespace detect configuration data --
-- --
-- This module stores configuration data for Module:Namespace detect. Here --
-- you can localise the module to your wiki's language. --
-- --
-- To activate a configuration item, you need to uncomment it. This means --
-- that you need to remove the text "-- " at the start of the line. --
--------------------------------------------------------------------------------
local cfg = {} -- Don't edit this line.
--------------------------------------------------------------------------------
-- Parameter names --
-- These configuration items specify custom parameter names. Values added --
-- here will work in addition to the default English parameter names. --
-- To add one extra name, you can use this format: --
-- --
-- cfg.foo = 'parameter name' --
-- --
-- To add multiple names, you can use this format: --
-- --
-- cfg.foo = {'parameter name 1', 'parameter name 2', 'parameter name 3'} --
--------------------------------------------------------------------------------
---- This parameter displays content for the main namespace:
-- cfg.main = 'main'
---- This parameter displays in talk namespaces:
-- cfg.talk = 'talk'
---- This parameter displays content for "other" namespaces (namespaces for which
---- parameters have not been specified):
-- cfg.other = 'other'
---- This parameter makes talk pages behave as though they are the corresponding
---- subject namespace. Note that this parameter is used with [[Module:Yesno]].
---- Edit that module to change the default values of "yes", "no", etc.
-- cfg.subjectns = 'subjectns'
---- This parameter sets a demonstration namespace:
-- cfg.demospace = 'demospace'
---- This parameter sets a specific page to compare:
cfg.demopage = 'page'
--------------------------------------------------------------------------------
-- Table configuration --
-- These configuration items allow customisation of the "table" function, --
-- used to generate a table of possible parameters in the module --
-- documentation. --
--------------------------------------------------------------------------------
---- The header for the namespace column in the wikitable containing the list of
---- possible subject-space parameters.
-- cfg.wikitableNamespaceHeader = 'Namespace'
---- The header for the wikitable containing the list of possible subject-space
---- parameters.
-- cfg.wikitableAliasesHeader = 'Aliases'
--------------------------------------------------------------------------------
-- End of configuration data --
--------------------------------------------------------------------------------
return cfg -- Don't edit this line.
1o6ozz56i8q0xgyl6xa41n2v7kelhli
Template:Short description
10
55686718
1129169224
1127645963
2022-12-23T23:04:16Z
Fayenatic london
1639942
remove categories for several more namespaces, see [[Wikipedia:Categories for discussion/Log/2022 December 15#Pages with short description]]
wikitext
text/x-wiki
{{#ifeq:{{lc:{{{1|}}}}}|none|<nowiki /><!--Prevents whitespace issues when used with adjacent newlines-->|<div class="shortdescription nomobile noexcerpt noprint searchaux" style="display:none">{{{1|}}}{{SHORTDESC:{{{1|}}}|{{{2|}}}}}</div>}}<includeonly>{{#ifeq:{{{pagetype}}}|Disambiguation pages||{{#ifeq:{{pagetype |defaultns = all |user=exclude}}|exclude||{{#ifeq:{{#switch: {{NAMESPACENUMBER}} | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | 100 | 101 | 118 | 119 | 828 | 829 | = exclude|#default=}}|exclude||[[Category:{{{pagetype|{{pagetype |defaultns = extended |plural=y}}}}} with short description]]}}}}}}</includeonly><!-- Start tracking
-->{{#invoke:Check for unknown parameters|check|unknown={{Main other|[[Category:Pages using short description with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Short description]] with unknown parameter "_VALUE_"|ignoreblank=y| 1 | 2 | pagetype | bot |plural }}<!--
-->{{#ifexpr: {{#invoke:String|len|{{{1|}}}}}>100 | [[Category:{{{pagetype|{{pagetype |defaultns = extended |plural=y}}}}} with long short description]]}}<!--
--><includeonly>{{#if:{{{1|}}}||[[Category:Pages with empty short description]]}}</includeonly><!--
-->{{Short description/lowercasecheck|{{{1|}}}}}<!--
-->{{Main other |{{SDcat |sd={{{1|}}} }} }}<noinclude>
{{Documentation}}
</noinclude>
s7dwi9n93v9jz4i8x666jwhuo4epr2k
Template:Main other
10
17220251
1059626360
388689011
2021-12-10T16:08:06Z
Xaosflux
502540
<!-- Add categories to the /doc subpage; interwikis go to Wikidata, thank you! -->
wikitext
text/x-wiki
{{#switch:
<!--If no or empty "demospace" parameter then detect namespace-->
{{#if:{{{demospace|}}}
| {{lc: {{{demospace}}} }} <!--Use lower case "demospace"-->
| {{#ifeq:{{NAMESPACE}}|{{ns:0}}
| main
| other
}}
}}
| main = {{{1|}}}
| other
| #default = {{{2|}}}
}}<noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage; interwikis go to Wikidata, thank you! -->
</noinclude>
fqcj40f1ojeitvtz4m2eefrp1ymhi6o
Template:Short description/lowercasecheck
10
69815941
1071437571
1071316119
2022-02-12T16:35:05Z
ToBeFree
16759563
Changed protection settings for "[[Template:Short description/lowercasecheck]]": 4 million transclusions, through [[Template:Short description]] ([[WP:HRT]]) ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite))
wikitext
text/x-wiki
{{#ifeq:<!--test first character for lower-case letter-->{{#invoke:string|find|1={{{1|}}}|2=^%l|plain=false}}|1
|<!-- first character is a lower case letter; test against whitelist
-->{{#switch: {{First word|{{{1|}}}}}<!--begin whitelist-->
|c. <!--for circa-->
|gTLD
|iMac
|iOS
|iOS,
|iPad
|iPhone
|iTunes
|macOS
|none
|pH
|pH-dependent=<!-- end whitelist; short description starts with an allowed lower-case string; whitelist matched; do nothing -->
|#default=<!-- apply category to track lower-case short descriptions -->{{main other|[[Category:Pages with lower-case short description|{{trim|{{{1|}}}}}]]}}{{Testcases other|{{red|CATEGORY APPLIED}}}}<!-- end whitelist test -->}}
|<!-- short description does not start with lower-case letter; do nothing; end lower-case test -->
}}<noinclude>
{{documentation}}
</noinclude>
i1e9w8d3rdcgxtws9nvbvfopq7y0nnk
Template:SDcat
10
64752604
971699885
971165861
2020-08-07T18:02:31Z
MusikBot II
29539620
Protected "[[Template:SDcat]]": [[Wikipedia:High-risk templates|High-risk template or module]] ([[User:MusikBot II/TemplateProtector|more info]]) ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
wikitext
text/x-wiki
<includeonly>{{#invoke:SDcat |setCat}}</includeonly><noinclude>
{{documentation}}
</noinclude>
gejktck2ca8vfelabmrprhfecoxzlpi
Module:Check for unknown parameters
828
42286729
1073136630
1055951540
2022-02-21T05:24:13Z
BusterD
346148
Changed protection settings for "[[Module:Check for unknown parameters]]": [[WP:High-risk templates|Highly visible template]]; requested at [[WP:RfPP]] ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite))
Scribunto
text/plain
-- This module may be used to compare the arguments passed to the parent
-- with a list of arguments, returning a specified result if an argument is
-- not on the list
local p = {}
local function trim(s)
return s:match('^%s*(.-)%s*$')
end
local function isnotempty(s)
return s and s:match('%S')
end
local function clean(text)
-- Return text cleaned for display and truncated if too long.
-- Strip markers are replaced with dummy text representing the original wikitext.
local pos, truncated
local function truncate(text)
if truncated then
return ''
end
if mw.ustring.len(text) > 25 then
truncated = true
text = mw.ustring.sub(text, 1, 25) .. '...'
end
return mw.text.nowiki(text)
end
local parts = {}
for before, tag, remainder in text:gmatch('([^\127]*)\127[^\127]*%-(%l+)%-[^\127]*\127()') do
pos = remainder
table.insert(parts, truncate(before) .. '<' .. tag .. '>...</' .. tag .. '>')
end
table.insert(parts, truncate(text:sub(pos or 1)))
return table.concat(parts)
end
function p._check(args, pargs)
if type(args) ~= "table" or type(pargs) ~= "table" then
-- TODO: error handling
return
end
-- create the list of known args, regular expressions, and the return string
local knownargs = {}
local regexps = {}
for k, v in pairs(args) do
if type(k) == 'number' then
v = trim(v)
knownargs[v] = 1
elseif k:find('^regexp[1-9][0-9]*$') then
table.insert(regexps, '^' .. v .. '$')
end
end
-- loop over the parent args, and make sure they are on the list
local ignoreblank = isnotempty(args['ignoreblank'])
local showblankpos = isnotempty(args['showblankpositional'])
local values = {}
for k, v in pairs(pargs) do
if type(k) == 'string' and knownargs[k] == nil then
local knownflag = false
for _, regexp in ipairs(regexps) do
if mw.ustring.match(k, regexp) then
knownflag = true
break
end
end
if not knownflag and ( not ignoreblank or isnotempty(v) ) then
table.insert(values, clean(k))
end
elseif type(k) == 'number' and knownargs[tostring(k)] == nil then
local knownflag = false
for _, regexp in ipairs(regexps) do
if mw.ustring.match(tostring(k), regexp) then
knownflag = true
break
end
end
if not knownflag and ( showblankpos or isnotempty(v) ) then
table.insert(values, k .. ' = ' .. clean(v))
end
end
end
-- add results to the output tables
local res = {}
if #values > 0 then
local unknown_text = args['unknown'] or 'Found _VALUE_, '
if mw.getCurrentFrame():preprocess( "{{REVISIONID}}" ) == "" then
local preview_text = args['preview']
if isnotempty(preview_text) then
preview_text = require('Module:If preview')._warning({preview_text})
elseif preview == nil then
preview_text = unknown_text
end
unknown_text = preview_text
end
for _, v in pairs(values) do
-- Fix odd bug for | = which gets stripped to the empty string and
-- breaks category links
if v == '' then v = ' ' end
-- avoid error with v = 'example%2' ("invalid capture index")
local r = unknown_text:gsub('_VALUE_', {_VALUE_ = v})
table.insert(res, r)
end
end
return table.concat(res)
end
function p.check(frame)
local args = frame.args
local pargs = frame:getParent().args
return p._check(args, pargs)
end
return p
h9rooqvu67gk81cpbiswol48lpmwmym
Module:String
828
38569505
970815276
924313232
2020-08-02T15:49:42Z
RexxS
6112901
separate annotations for str.match from those for str._match
Scribunto
text/plain
--[[
This module is intended to provide access to basic string functions.
Most of the functions provided here can be invoked with named parameters,
unnamed parameters, or a mixture. If named parameters are used, Mediawiki will
automatically remove any leading or trailing whitespace from the parameter.
Depending on the intended use, it may be advantageous to either preserve or
remove such whitespace.
Global options
ignore_errors: If set to 'true' or 1, any error condition will result in
an empty string being returned rather than an error message.
error_category: If an error occurs, specifies the name of a category to
include with the error message. The default category is
[Category:Errors reported by Module String].
no_category: If set to 'true' or 1, no category will be added if an error
is generated.
Unit tests for this module are available at Module:String/tests.
]]
local str = {}
--[[
len
This function returns the length of the target string.
Usage:
{{#invoke:String|len|target_string|}}
OR
{{#invoke:String|len|s=target_string}}
Parameters
s: The string whose length to report
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from the target string.
]]
function str.len( frame )
local new_args = str._getParameters( frame.args, {'s'} )
local s = new_args['s'] or ''
return mw.ustring.len( s )
end
--[[
sub
This function returns a substring of the target string at specified indices.
Usage:
{{#invoke:String|sub|target_string|start_index|end_index}}
OR
{{#invoke:String|sub|s=target_string|i=start_index|j=end_index}}
Parameters
s: The string to return a subset of
i: The fist index of the substring to return, defaults to 1.
j: The last index of the string to return, defaults to the last character.
The first character of the string is assigned an index of 1. If either i or j
is a negative value, it is interpreted the same as selecting a character by
counting from the end of the string. Hence, a value of -1 is the same as
selecting the last character of the string.
If the requested indices are out of range for the given string, an error is
reported.
]]
function str.sub( frame )
local new_args = str._getParameters( frame.args, { 's', 'i', 'j' } )
local s = new_args['s'] or ''
local i = tonumber( new_args['i'] ) or 1
local j = tonumber( new_args['j'] ) or -1
local len = mw.ustring.len( s )
-- Convert negatives for range checking
if i < 0 then
i = len + i + 1
end
if j < 0 then
j = len + j + 1
end
if i > len or j > len or i < 1 or j < 1 then
return str._error( 'String subset index out of range' )
end
if j < i then
return str._error( 'String subset indices out of order' )
end
return mw.ustring.sub( s, i, j )
end
--[[
This function implements that features of {{str sub old}} and is kept in order
to maintain these older templates.
]]
function str.sublength( frame )
local i = tonumber( frame.args.i ) or 0
local len = tonumber( frame.args.len )
return mw.ustring.sub( frame.args.s, i + 1, len and ( i + len ) )
end
--[[
_match
This function returns a substring from the source string that matches a
specified pattern. It is exported for use in other modules
Usage:
strmatch = require("Module:String")._match
sresult = strmatch( s, pattern, start, match, plain, nomatch )
Parameters
s: The string to search
pattern: The pattern or string to find within the string
start: The index within the source string to start the search. The first
character of the string has index 1. Defaults to 1.
match: In some cases it may be possible to make multiple matches on a single
string. This specifies which match to return, where the first match is
match= 1. If a negative number is specified then a match is returned
counting from the last match. Hence match = -1 is the same as requesting
the last match. Defaults to 1.
plain: A flag indicating that the pattern should be understood as plain
text. Defaults to false.
nomatch: If no match is found, output the "nomatch" value rather than an error.
For information on constructing Lua patterns, a form of [regular expression], see:
* http://www.lua.org/manual/5.1/manual.html#5.4.1
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns
]]
-- This sub-routine is exported for use in other modules
function str._match( s, pattern, start, match_index, plain_flag, nomatch )
if s == '' then
return str._error( 'Target string is empty' )
end
if pattern == '' then
return str._error( 'Pattern string is empty' )
end
start = tonumber(start) or 1
if math.abs(start) < 1 or math.abs(start) > mw.ustring.len( s ) then
return str._error( 'Requested start is out of range' )
end
if match_index == 0 then
return str._error( 'Match index is out of range' )
end
if plain_flag then
pattern = str._escapePattern( pattern )
end
local result
if match_index == 1 then
-- Find first match is simple case
result = mw.ustring.match( s, pattern, start )
else
if start > 1 then
s = mw.ustring.sub( s, start )
end
local iterator = mw.ustring.gmatch(s, pattern)
if match_index > 0 then
-- Forward search
for w in iterator do
match_index = match_index - 1
if match_index == 0 then
result = w
break
end
end
else
-- Reverse search
local result_table = {}
local count = 1
for w in iterator do
result_table[count] = w
count = count + 1
end
result = result_table[ count + match_index ]
end
end
if result == nil then
if nomatch == nil then
return str._error( 'Match not found' )
else
return nomatch
end
else
return result
end
end
--[[
match
This function returns a substring from the source string that matches a
specified pattern.
Usage:
{{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}}
OR
{{#invoke:String|match|s=source_string|pattern=pattern_string|start=start_index
|match=match_number|plain=plain_flag|nomatch=nomatch_output}}
Parameters
s: The string to search
pattern: The pattern or string to find within the string
start: The index within the source string to start the search. The first
character of the string has index 1. Defaults to 1.
match: In some cases it may be possible to make multiple matches on a single
string. This specifies which match to return, where the first match is
match= 1. If a negative number is specified then a match is returned
counting from the last match. Hence match = -1 is the same as requesting
the last match. Defaults to 1.
plain: A flag indicating that the pattern should be understood as plain
text. Defaults to false.
nomatch: If no match is found, output the "nomatch" value rather than an error.
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from each string. In some circumstances this is desirable, in
other cases one may want to preserve the whitespace.
If the match_number or start_index are out of range for the string being queried, then
this function generates an error. An error is also generated if no match is found.
If one adds the parameter ignore_errors=true, then the error will be suppressed and
an empty string will be returned on any failure.
For information on constructing Lua patterns, a form of [regular expression], see:
* http://www.lua.org/manual/5.1/manual.html#5.4.1
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns
]]
-- This is the entry point for #invoke:String|match
function str.match( frame )
local new_args = str._getParameters( frame.args, {'s', 'pattern', 'start', 'match', 'plain', 'nomatch'} )
local s = new_args['s'] or ''
local start = tonumber( new_args['start'] ) or 1
local plain_flag = str._getBoolean( new_args['plain'] or false )
local pattern = new_args['pattern'] or ''
local match_index = math.floor( tonumber(new_args['match']) or 1 )
local nomatch = new_args['nomatch']
return str._match( s, pattern, start, match_index, plain_flag, nomatch )
end
--[[
pos
This function returns a single character from the target string at position pos.
Usage:
{{#invoke:String|pos|target_string|index_value}}
OR
{{#invoke:String|pos|target=target_string|pos=index_value}}
Parameters
target: The string to search
pos: The index for the character to return
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from the target string. In some circumstances this is desirable, in
other cases one may want to preserve the whitespace.
The first character has an index value of 1.
If one requests a negative value, this function will select a character by counting backwards
from the end of the string. In other words pos = -1 is the same as asking for the last character.
A requested value of zero, or a value greater than the length of the string returns an error.
]]
function str.pos( frame )
local new_args = str._getParameters( frame.args, {'target', 'pos'} )
local target_str = new_args['target'] or ''
local pos = tonumber( new_args['pos'] ) or 0
if pos == 0 or math.abs(pos) > mw.ustring.len( target_str ) then
return str._error( 'String index out of range' )
end
return mw.ustring.sub( target_str, pos, pos )
end
--[[
str_find
This function duplicates the behavior of {{str_find}}, including all of its quirks.
This is provided in order to support existing templates, but is NOT RECOMMENDED for
new code and templates. New code is recommended to use the "find" function instead.
Returns the first index in "source" that is a match to "target". Indexing is 1-based,
and the function returns -1 if the "target" string is not present in "source".
Important Note: If the "target" string is empty / missing, this function returns a
value of "1", which is generally unexpected behavior, and must be accounted for
separatetly.
]]
function str.str_find( frame )
local new_args = str._getParameters( frame.args, {'source', 'target'} )
local source_str = new_args['source'] or ''
local target_str = new_args['target'] or ''
if target_str == '' then
return 1
end
local start = mw.ustring.find( source_str, target_str, 1, true )
if start == nil then
start = -1
end
return start
end
--[[
find
This function allows one to search for a target string or pattern within another
string.
Usage:
{{#invoke:String|find|source_str|target_string|start_index|plain_flag}}
OR
{{#invoke:String|find|source=source_str|target=target_str|start=start_index|plain=plain_flag}}
Parameters
source: The string to search
target: The string or pattern to find within source
start: The index within the source string to start the search, defaults to 1
plain: Boolean flag indicating that target should be understood as plain
text and not as a Lua style regular expression, defaults to true
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from the parameter. In some circumstances this is desirable, in
other cases one may want to preserve the whitespace.
This function returns the first index >= "start" where "target" can be found
within "source". Indices are 1-based. If "target" is not found, then this
function returns 0. If either "source" or "target" are missing / empty, this
function also returns 0.
This function should be safe for UTF-8 strings.
]]
function str.find( frame )
local new_args = str._getParameters( frame.args, {'source', 'target', 'start', 'plain' } )
local source_str = new_args['source'] or ''
local pattern = new_args['target'] or ''
local start_pos = tonumber(new_args['start']) or 1
local plain = new_args['plain'] or true
if source_str == '' or pattern == '' then
return 0
end
plain = str._getBoolean( plain )
local start = mw.ustring.find( source_str, pattern, start_pos, plain )
if start == nil then
start = 0
end
return start
end
--[[
replace
This function allows one to replace a target string or pattern within another
string.
Usage:
{{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}}
OR
{{#invoke:String|replace|source=source_string|pattern=pattern_string|replace=replace_string|
count=replacement_count|plain=plain_flag}}
Parameters
source: The string to search
pattern: The string or pattern to find within source
replace: The replacement text
count: The number of occurences to replace, defaults to all.
plain: Boolean flag indicating that pattern should be understood as plain
text and not as a Lua style regular expression, defaults to true
]]
function str.replace( frame )
local new_args = str._getParameters( frame.args, {'source', 'pattern', 'replace', 'count', 'plain' } )
local source_str = new_args['source'] or ''
local pattern = new_args['pattern'] or ''
local replace = new_args['replace'] or ''
local count = tonumber( new_args['count'] )
local plain = new_args['plain'] or true
if source_str == '' or pattern == '' then
return source_str
end
plain = str._getBoolean( plain )
if plain then
pattern = str._escapePattern( pattern )
replace = mw.ustring.gsub( replace, "%%", "%%%%" ) --Only need to escape replacement sequences.
end
local result
if count ~= nil then
result = mw.ustring.gsub( source_str, pattern, replace, count )
else
result = mw.ustring.gsub( source_str, pattern, replace )
end
return result
end
--[[
simple function to pipe string.rep to templates.
]]
function str.rep( frame )
local repetitions = tonumber( frame.args[2] )
if not repetitions then
return str._error( 'function rep expects a number as second parameter, received "' .. ( frame.args[2] or '' ) .. '"' )
end
return string.rep( frame.args[1] or '', repetitions )
end
--[[
escapePattern
This function escapes special characters from a Lua string pattern. See [1]
for details on how patterns work.
[1] https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
Usage:
{{#invoke:String|escapePattern|pattern_string}}
Parameters
pattern_string: The pattern string to escape.
]]
function str.escapePattern( frame )
local pattern_str = frame.args[1]
if not pattern_str then
return str._error( 'No pattern string specified' )
end
local result = str._escapePattern( pattern_str )
return result
end
--[[
count
This function counts the number of occurrences of one string in another.
]]
function str.count(frame)
local args = str._getParameters(frame.args, {'source', 'pattern', 'plain'})
local source = args.source or ''
local pattern = args.pattern or ''
local plain = str._getBoolean(args.plain or true)
if plain then
pattern = str._escapePattern(pattern)
end
local _, count = mw.ustring.gsub(source, pattern, '')
return count
end
--[[
endswith
This function determines whether a string ends with another string.
]]
function str.endswith(frame)
local args = str._getParameters(frame.args, {'source', 'pattern'})
local source = args.source or ''
local pattern = args.pattern or ''
if pattern == '' then
-- All strings end with the empty string.
return "yes"
end
if mw.ustring.sub(source, -mw.ustring.len(pattern), -1) == pattern then
return "yes"
else
return ""
end
end
--[[
join
Join all non empty arguments together; the first argument is the separator.
Usage:
{{#invoke:String|join|sep|one|two|three}}
]]
function str.join(frame)
local args = {}
local sep
for _, v in ipairs( frame.args ) do
if sep then
if v ~= '' then
table.insert(args, v)
end
else
sep = v
end
end
return table.concat( args, sep or '' )
end
--[[
Helper function that populates the argument list given that user may need to use a mix of
named and unnamed parameters. This is relevant because named parameters are not
identical to unnamed parameters due to string trimming, and when dealing with strings
we sometimes want to either preserve or remove that whitespace depending on the application.
]]
function str._getParameters( frame_args, arg_list )
local new_args = {}
local index = 1
local value
for _, arg in ipairs( arg_list ) do
value = frame_args[arg]
if value == nil then
value = frame_args[index]
index = index + 1
end
new_args[arg] = value
end
return new_args
end
--[[
Helper function to handle error messages.
]]
function str._error( error_str )
local frame = mw.getCurrentFrame()
local error_category = frame.args.error_category or 'Errors reported by Module String'
local ignore_errors = frame.args.ignore_errors or false
local no_category = frame.args.no_category or false
if str._getBoolean(ignore_errors) then
return ''
end
local error_str = '<strong class="error">String Module Error: ' .. error_str .. '</strong>'
if error_category ~= '' and not str._getBoolean( no_category ) then
error_str = '[[Category:' .. error_category .. ']]' .. error_str
end
return error_str
end
--[[
Helper Function to interpret boolean strings
]]
function str._getBoolean( boolean_str )
local boolean_value
if type( boolean_str ) == 'string' then
boolean_str = boolean_str:lower()
if boolean_str == 'false' or boolean_str == 'no' or boolean_str == '0'
or boolean_str == '' then
boolean_value = false
else
boolean_value = true
end
elseif type( boolean_str ) == 'boolean' then
boolean_value = boolean_str
else
error( 'No boolean value found' )
end
return boolean_value
end
--[[
Helper function that escapes all pattern characters so that they will be treated
as plain text.
]]
function str._escapePattern( pattern_str )
return mw.ustring.gsub( pattern_str, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1" )
end
return str
cufmbepw7ml3gut4lchtqrhtj5r63cp
Module:SDcat
828
64744418
973333723
973332619
2020-08-16T17:20:37Z
RexxS
6112901
if no connection to Wikidata, then do nothing
Scribunto
text/plain
--[[
SDcat
Module to check whether local short description matches that on Wikidata
--]]
local p = {}
-------------------------------------------------------------------------------
--[[
setCat has the qid of a Wikidata entity passed as |qid=
(it defaults to the associated qid of the current article if omitted)
and the local short description passed as |sd=
It returns a category if there is an associated Wikidata entity.
It returns one of the following tracking categories, as appropriate:
* Category:Short description matches Wikidata (case-insensitive)
* Category:Short description is different from Wikidata
* Category:Short description with empty Wikidata description
For testing purposes, a link prefix |lp= may be set to ":" to make the categories visible.
--]]
-- function exported for use in other modules
-- (local short description, Wikidata entity-ID, link prefix)
p._setCat = function(sdesc, itemID, lp)
if not mw.wikibase then return nil end
if itemID == "" then itemID = nil end
-- Wikidata description field
local wdesc = (mw.wikibase.getDescription(itemID) or ""):lower()
if wdesc == "" then
return "[[" .. lp .. "Category:Short description with empty Wikidata description]]"
elseif wdesc == sdesc then
return "[[" .. lp .. "Category:Short description matches Wikidata]]"
else
return "[[" .. lp .. "Category:Short description is different from Wikidata]]"
end
end
-- function exported for call from #invoke
p.setCat = function(frame)
local args
if frame.args.sd then
args = frame.args
else
args = frame:getParent().args
end
-- local short description
local sdesc = mw.text.trim(args.sd or ""):lower()
-- Wikidata entity-ID
local itemID = mw.text.trim(args.qid or "")
-- link prefix, strip quotes
local lp = mw.text.trim(args.lp or ""):gsub('"', '')
return p._setCat(sdesc, itemID, lp)
end
return p
cml06m2kvz7og9bi5f1xe6ylhi3d9a0
Module:Category handler
828
39772274
948472489
948472486
2020-04-01T06:12:40Z
MusikAnimal
14882394
1 revision imported
Scribunto
text/plain
--------------------------------------------------------------------------------
-- --
-- CATEGORY HANDLER --
-- --
-- This module implements the {{category handler}} template in Lua, --
-- with a few improvements: all namespaces and all namespace aliases --
-- are supported, and namespace names are detected automatically for --
-- the local wiki. This module requires [[Module:Namespace detect]] --
-- and [[Module:Yesno]] to be available on the local wiki. It can be --
-- configured for different wikis by altering the values in --
-- [[Module:Category handler/config]], and pages can be blacklisted --
-- from categorisation by using [[Module:Category handler/blacklist]]. --
-- --
--------------------------------------------------------------------------------
-- Load required modules
local yesno = require('Module:Yesno')
-- Lazily load things we don't always need
local mShared, mappings
local p = {}
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function trimWhitespace(s, removeBlanks)
if type(s) ~= 'string' then
return s
end
s = s:match('^%s*(.-)%s*$')
if removeBlanks then
if s ~= '' then
return s
else
return nil
end
else
return s
end
end
--------------------------------------------------------------------------------
-- CategoryHandler class
--------------------------------------------------------------------------------
local CategoryHandler = {}
CategoryHandler.__index = CategoryHandler
function CategoryHandler.new(data, args)
local obj = setmetatable({ _data = data, _args = args }, CategoryHandler)
-- Set the title object
do
local pagename = obj:parameter('demopage')
local success, titleObj
if pagename then
success, titleObj = pcall(mw.title.new, pagename)
end
if success and titleObj then
obj.title = titleObj
if titleObj == mw.title.getCurrentTitle() then
obj._usesCurrentTitle = true
end
else
obj.title = mw.title.getCurrentTitle()
obj._usesCurrentTitle = true
end
end
-- Set suppression parameter values
for _, key in ipairs{'nocat', 'categories'} do
local value = obj:parameter(key)
value = trimWhitespace(value, true)
obj['_' .. key] = yesno(value)
end
do
local subpage = obj:parameter('subpage')
local category2 = obj:parameter('category2')
if type(subpage) == 'string' then
subpage = mw.ustring.lower(subpage)
end
if type(category2) == 'string' then
subpage = mw.ustring.lower(category2)
end
obj._subpage = trimWhitespace(subpage, true)
obj._category2 = trimWhitespace(category2) -- don't remove blank values
end
return obj
end
function CategoryHandler:parameter(key)
local parameterNames = self._data.parameters[key]
local pntype = type(parameterNames)
if pntype == 'string' or pntype == 'number' then
return self._args[parameterNames]
elseif pntype == 'table' then
for _, name in ipairs(parameterNames) do
local value = self._args[name]
if value ~= nil then
return value
end
end
return nil
else
error(string.format(
'invalid config key "%s"',
tostring(key)
), 2)
end
end
function CategoryHandler:isSuppressedByArguments()
return
-- See if a category suppression argument has been set.
self._nocat == true
or self._categories == false
or (
self._category2
and self._category2 ~= self._data.category2Yes
and self._category2 ~= self._data.category2Negative
)
-- Check whether we are on a subpage, and see if categories are
-- suppressed based on our subpage status.
or self._subpage == self._data.subpageNo and self.title.isSubpage
or self._subpage == self._data.subpageOnly and not self.title.isSubpage
end
function CategoryHandler:shouldSkipBlacklistCheck()
-- Check whether the category suppression arguments indicate we
-- should skip the blacklist check.
return self._nocat == false
or self._categories == true
or self._category2 == self._data.category2Yes
end
function CategoryHandler:matchesBlacklist()
if self._usesCurrentTitle then
return self._data.currentTitleMatchesBlacklist
else
mShared = mShared or require('Module:Category handler/shared')
return mShared.matchesBlacklist(
self.title.prefixedText,
mw.loadData('Module:Category handler/blacklist')
)
end
end
function CategoryHandler:isSuppressed()
-- Find if categories are suppressed by either the arguments or by
-- matching the blacklist.
return self:isSuppressedByArguments()
or not self:shouldSkipBlacklistCheck() and self:matchesBlacklist()
end
function CategoryHandler:getNamespaceParameters()
if self._usesCurrentTitle then
return self._data.currentTitleNamespaceParameters
else
if not mappings then
mShared = mShared or require('Module:Category handler/shared')
mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData
end
return mShared.getNamespaceParameters(
self.title,
mappings
)
end
end
function CategoryHandler:namespaceParametersExist()
-- Find whether any namespace parameters have been specified.
-- We use the order "all" --> namespace params --> "other" as this is what
-- the old template did.
if self:parameter('all') then
return true
end
if not mappings then
mShared = mShared or require('Module:Category handler/shared')
mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData
end
for ns, params in pairs(mappings) do
for i, param in ipairs(params) do
if self._args[param] then
return true
end
end
end
if self:parameter('other') then
return true
end
return false
end
function CategoryHandler:getCategories()
local params = self:getNamespaceParameters()
local nsCategory
for i, param in ipairs(params) do
local value = self._args[param]
if value ~= nil then
nsCategory = value
break
end
end
if nsCategory ~= nil or self:namespaceParametersExist() then
-- Namespace parameters exist - advanced usage.
if nsCategory == nil then
nsCategory = self:parameter('other')
end
local ret = {self:parameter('all')}
local numParam = tonumber(nsCategory)
if numParam and numParam >= 1 and math.floor(numParam) == numParam then
-- nsCategory is an integer
ret[#ret + 1] = self._args[numParam]
else
ret[#ret + 1] = nsCategory
end
if #ret < 1 then
return nil
else
return table.concat(ret)
end
elseif self._data.defaultNamespaces[self.title.namespace] then
-- Namespace parameters don't exist, simple usage.
return self._args[1]
end
return nil
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p = {}
function p._exportClasses()
-- Used for testing purposes.
return {
CategoryHandler = CategoryHandler
}
end
function p._main(args, data)
data = data or mw.loadData('Module:Category handler/data')
local handler = CategoryHandler.new(data, args)
if handler:isSuppressed() then
return nil
end
return handler:getCategories()
end
function p.main(frame, data)
data = data or mw.loadData('Module:Category handler/data')
local args = require('Module:Arguments').getArgs(frame, {
wrappers = data.wrappers,
valueFunc = function (k, v)
v = trimWhitespace(v)
if type(k) == 'number' then
if v ~= '' then
return v
else
return nil
end
else
return v
end
end
})
return p._main(args, data)
end
return p
letwavu3yvlayfzew66uuwixmwebq5b
Module:Category handler/data
828
43233647
948472496
894414581
2020-04-01T06:12:41Z
MusikAnimal
14882394
1 revision imported
Scribunto
text/plain
-- This module assembles data to be passed to [[Module:Category handler]] using
-- mw.loadData. This includes the configuration data and whether the current
-- page matches the title blacklist.
local data = require('Module:Category handler/config')
local mShared = require('Module:Category handler/shared')
local blacklist = require('Module:Category handler/blacklist')
local title = mw.title.getCurrentTitle()
data.currentTitleMatchesBlacklist = mShared.matchesBlacklist(
title.prefixedText,
blacklist
)
data.currentTitleNamespaceParameters = mShared.getNamespaceParameters(
title,
mShared.getParamMappings()
)
return data
k26mwixuaeijisfddb0sxkg82iux8v4
Module:Category handler/config
828
42291997
948472494
894414603
2020-04-01T06:12:40Z
MusikAnimal
14882394
1 revision imported
Scribunto
text/plain
--------------------------------------------------------------------------------
-- [[Module:Category handler]] configuration data --
-- Language-specific parameter names and values can be set here. --
-- For blacklist config, see [[Module:Category handler/blacklist]]. --
--------------------------------------------------------------------------------
local cfg = {} -- Don't edit this line.
--------------------------------------------------------------------------------
-- Start configuration data --
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- Parameter names --
-- These configuration items specify custom parameter names. --
-- To add one extra name, you can use this format: --
-- --
-- foo = 'parameter name', --
-- --
-- To add multiple names, you can use this format: --
-- --
-- foo = {'parameter name 1', 'parameter name 2', 'parameter name 3'}, --
--------------------------------------------------------------------------------
cfg.parameters = {
-- The nocat and categories parameter suppress
-- categorisation. They are used with Module:Yesno, and work as follows:
--
-- cfg.nocat:
-- Result of yesno() Effect
-- true Categorisation is suppressed
-- false Categorisation is allowed, and
-- the blacklist check is skipped
-- nil Categorisation is allowed
--
-- cfg.categories:
-- Result of yesno() Effect
-- true Categorisation is allowed, and
-- the blacklist check is skipped
-- false Categorisation is suppressed
-- nil Categorisation is allowed
nocat = 'nocat',
categories = 'categories',
-- The parameter name for the legacy "category2" parameter. This skips the
-- blacklist if set to the cfg.category2Yes value, and suppresses
-- categorisation if present but equal to anything other than
-- cfg.category2Yes or cfg.category2Negative.
category2 = 'category2',
-- cfg.subpage is the parameter name to specify how to behave on subpages.
subpage = 'subpage',
-- The parameter for data to return in all namespaces.
all = 'all',
-- The parameter name for data to return if no data is specified for the
-- namespace that is detected.
other = 'other',
-- The parameter name used to specify a page other than the current page;
-- used for testing and demonstration.
demopage = 'page',
}
--------------------------------------------------------------------------------
-- Parameter values --
-- These are set values that can be used with certain parameters. Only one --
-- value can be specified, like this: --
-- --
-- cfg.foo = 'value name' -- --
--------------------------------------------------------------------------------
-- The following settings are used with the cfg.category2 parameter. Setting
-- cfg.category2 to cfg.category2Yes skips the blacklist, and if cfg.category2
-- is present but equal to anything other than cfg.category2Yes or
-- cfg.category2Negative then it supresses cateogrisation.
cfg.category2Yes = 'yes'
cfg.category2Negative = '¬'
-- The following settings are used with the cfg.subpage parameter.
-- cfg.subpageNo is the value to specify to not categorise on subpages;
-- cfg.subpageOnly is the value to specify to only categorise on subpages.
cfg.subpageNo = 'no'
cfg.subpageOnly = 'only'
--------------------------------------------------------------------------------
-- Default namespaces --
-- This is a table of namespaces to categorise by default. The keys are the --
-- namespace numbers. --
--------------------------------------------------------------------------------
cfg.defaultNamespaces = {
[ 0] = true, -- main
[ 6] = true, -- file
[ 12] = true, -- help
[ 14] = true, -- category
[100] = true, -- portal
[108] = true, -- book
}
--------------------------------------------------------------------------------
-- Wrappers --
-- This is a wrapper template or a list of wrapper templates to be passed to --
-- [[Module:Arguments]]. --
--------------------------------------------------------------------------------
cfg.wrappers = 'Template:Category handler'
--------------------------------------------------------------------------------
-- End configuration data --
--------------------------------------------------------------------------------
return cfg -- Don't edit this line.
6ga9hbq2pdwalsvx68i53dmbr421rq5
Module:Category handler/shared
828
43232937
948472498
894414384
2020-04-01T06:12:41Z
MusikAnimal
14882394
1 revision imported
Scribunto
text/plain
-- This module contains shared functions used by [[Module:Category handler]]
-- and its submodules.
local p = {}
function p.matchesBlacklist(page, blacklist)
for i, pattern in ipairs(blacklist) do
local match = mw.ustring.match(page, pattern)
if match then
return true
end
end
return false
end
function p.getParamMappings(useLoadData)
local dataPage = 'Module:Namespace detect/data'
if useLoadData then
return mw.loadData(dataPage).mappings
else
return require(dataPage).mappings
end
end
function p.getNamespaceParameters(titleObj, mappings)
-- We don't use title.nsText for the namespace name because it adds
-- underscores.
local mappingsKey
if titleObj.isTalkPage then
mappingsKey = 'talk'
else
mappingsKey = mw.site.namespaces[titleObj.namespace].name
end
mappingsKey = mw.ustring.lower(mappingsKey)
return mappings[mappingsKey] or {}
end
return p
omlsnhudxz6juptvtxz7ns97jutbzc5
Module:Category handler/blacklist
828
43232926
951673917
948472491
2020-04-18T08:48:05Z
Jo-Jo Eumerus
17449355
Per category talk page
Scribunto
text/plain
-- This module contains the blacklist used by [[Module:Category handler]].
-- Pages that match Lua patterns in this list will not be categorised unless
-- categorisation is explicitly requested.
return {
'^Main Page$', -- don't categorise the main page.
-- Don't categorise the following pages or their subpages.
-- "%f[/\0]" matches if the next character is "/" or the end of the string.
'^Wikipedia:Cascade%-protected items%f[/\0]',
'^User:UBX%f[/\0]', -- The userbox "template" space.
'^User talk:UBX%f[/\0]',
-- Don't categorise subpages of these pages, but allow
-- categorisation of the base page.
'^Wikipedia:Template index/.*$',
-- Don't categorise archives.
'/[aA]rchive',
"^Wikipedia:Administrators' noticeboard/IncidentArchive%d+$",
}
fsv1drcay6t25e91hzhqxtyp7pckbpx
Template:Cite web
10
1252907
753103437
753063659
2016-12-05T05:36:52Z
Anthony Appleyard
119438
Protected "[[Template:Cite web]]": restore old protection ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite))
wikitext
text/x-wiki
<includeonly>{{#invoke:citation/CS1|citation
|CitationClass=web
}}</includeonly><noinclude>
{{documentation}}
</noinclude>
rcgmbcxu7hvs583g1f3rzz4c4dkizda
Template:Reflist
10
7585648
1092654215
1011094246
2022-06-11T17:42:16Z
Izno
2927383
correct my error per [[Template talk:Reflist#liststyle and group]]
wikitext
text/x-wiki
<templatestyles src="Reflist/styles.css" /><div class="reflist <!--
-->{{#if:{{{1|}}}{{{colwidth|}}}|reflist-columns references-column-width}} <!--
-->{{#switch:{{{liststyle|{{{group|}}}}}}|upper-alpha|upper-roman|lower-alpha|lower-greek|lower-roman=reflist-{{{liststyle|{{{group}}}}}}}} <!--
-->{{#if:{{{1|}}}|{{#iferror:{{#ifexpr: {{{1|1}}} > 1 }}||{{#switch:{{{1|}}}|1=|2=reflist-columns-2|#default=reflist-columns-3}} }}}}" <!-- end class
-->{{#if: {{{1|}}}<!-- start style -->
| {{#iferror: {{#ifexpr: {{{1|1}}} > 1 }} |style="column-width: {{{1}}};"}}
| {{#if: {{{colwidth|}}}|style="column-width: {{{colwidth}}};"}}
}}>
{{#tag:references|{{{refs|}}}|group={{{group|}}}|responsive={{#if:{{{1|}}}{{{colwidth|}}}|0|1}}}}</div>{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using reflist with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Reflist]] with unknown parameter "_VALUE_"|ignoreblank=y| 1 | colwidth | group | liststyle | refs }}<noinclude>
{{Documentation}}
</noinclude>
geeeydvb5368tzzflcyuzs20a5hlnbz
Template:Reflist/styles.css
10
66126274
1011085734
1010048464
2021-03-08T23:00:26Z
Izno
2927383
Changed protection level for "[[Template:Reflist/styles.css]]": match parent ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite))
sanitized-css
text/css
/* {{pp|small=yes}} */
/* can we remove the font size declarations? .references gets a font-size in
* common.css that is always 90, and there is nothing else in reflist out in
* the wild. May affect column sizes.
*/
.reflist {
font-size: 90%; /* Default font-size */
margin-bottom: 0.5em;
list-style-type: decimal;
}
.reflist .references {
font-size: 100%; /* Reset font-size when nested in div.reflist */
margin-bottom: 0; /* Avoid double margin when nested in div.reflist */
list-style-type: inherit; /* Enable custom list style types */
}
/* columns-2 and columns-3 are legacy for "2 or more" column view from when the
* template was implemented with column-count.
*/
.reflist-columns-2 {
column-width: 30em;
}
.reflist-columns-3 {
column-width: 25em;
}
/* Reset top margin for lists embedded in columns */
.reflist-columns {
margin-top: 0.3em;
}
.reflist-columns ol {
margin-top: 0;
}
/* Avoid elements breaking between columns */
.reflist-columns li {
page-break-inside: avoid; /* Removed from CSS in favor of break-inside c. 2020 */
break-inside: avoid-column;
}
.reflist-upper-alpha {
list-style-type: upper-alpha;
}
.reflist-upper-roman {
list-style-type: upper-roman;
}
.reflist-lower-alpha {
list-style-type: lower-alpha;
}
.reflist-lower-greek {
list-style-type: lower-greek;
}
.reflist-lower-roman {
list-style-type: lower-roman;
}
9pglv18rwto8wyb2wiymxh52wdd5ut0
Template:Find sources mainspace
10
43983930
781356043
781355927
2017-05-20T18:49:40Z
Plastikspork
5075409
Fix
wikitext
text/x-wiki
{{#invoke:Find sources|Find sources mainspace}}<noinclude>
{{#invoke:Find sources/autodoc|Find sources mainspace}}
</noinclude>
8dqgswr68gd5uthbnrpvyiemcqiw1rm
Module:Find sources
828
43953355
1074289944
1058913897
2022-02-27T13:33:28Z
Primefac
11508456
Changed protection settings for "[[Module:Find sources]]": re-raise, 1.5million transclusions and no edits from the EXCON editor ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
Scribunto
text/plain
-- This module implements {{find sources}} and other similar templates, and
-- also provides a mechanism to easily create new source-finding templates.
-- Define constants
local ROOT_PAGE = 'Module:Find sources'
local TEMPLATE_ROOT = ROOT_PAGE .. '/templates/' -- for template config modules
local LINK_CONFIG = ROOT_PAGE .. '/links' -- for link config modules
local CONFIG_PAGE = ROOT_PAGE .. '/config' -- for global config
-- Load required modules
local checkType = require('libraryUtil').checkType
local cfg = mw.loadData(CONFIG_PAGE)
local p = {}
local function maybeLoadData(page)
local success, data = pcall(mw.loadData, page)
return success and data
end
local function substituteParams(msg, ...)
return mw.message.newRawMessage(msg, ...):plain()
end
local function renderSearchString(searchTerms, separator, transformFunc)
-- This takes a table of search terms and turns it into a search string
-- that can be used in a URL or in a display value. The transformFunc
-- parameter can be used to transform each search term in some way (for
-- example, URL-encoding them).
local searchStrings = {}
for i, s in ipairs(searchTerms) do
searchStrings[i] = s
end
if transformFunc then
for i, s in ipairs(searchStrings) do
searchStrings[i] = transformFunc(s)
end
end
return table.concat(searchStrings, separator)
end
function p._renderLink(code, searchTerms, display, tooltip)
-- Renders the external link wikicode for one link, given the link code,
-- a table of search terms, and an optional display value and tooltip.
-- Get link config.
local links = maybeLoadData(LINK_CONFIG)
local linkCfg = links[code]
if not linkCfg then
error(string.format(
"invalid link code '%s'; no link config found at [[%s]]",
code,
LINK_CONFIG
))
end
-- Make URL.
local url
do
local separator = linkCfg.separator or "+"
local searchString = renderSearchString(
searchTerms,
separator,
mw.uri.encode
)
url = substituteParams(linkCfg.url, searchString)
end
if tooltip then
return string.format('<span title="%s" style="border-bottom: 1px dotted;">[%s %s]</span>',
mw.text.encode(tooltip), url, display or linkCfg.display)
else
return string.format('[%s %s]', url, display or linkCfg.display)
end
end
function p._main(template, args)
-- The main access point from Lua.
checkType('_main', 1, template, 'string')
checkType('_main', 2, args, 'table', true)
args = args or {}
local title = mw.title.getCurrentTitle()
-- Get the template config.
local templateCfgPage = TEMPLATE_ROOT .. template
local templateCfg = maybeLoadData(templateCfgPage)
if not templateCfg then
error(string.format(
"invalid template name '%s'; no template config found at [[%s]]",
template, templateCfgPage
))
end
-- Namespace check.
if not templateCfg.isUsedInMainspace and title.namespace == 0 then
local formatString = '<strong class="error">%s</strong>'
if cfg['namespace-error-category'] then
formatString = formatString .. '[[%s:%s]]'
end
return string.format(
formatString,
cfg['namespace-error'],
mw.site.namespaces[14].name,
cfg['namespace-error-category']
)
end
-- Get the search terms from the arguments.
local searchTerms = {}
for i, s in ipairs(args) do
searchTerms[i] = s
end
if not searchTerms[1] then
-- Use the current subpage name as the default search term, unless
-- another title is provided. If the page uses a disambiguator like
-- "Foo (bar)", make "Foo" the first term and "bar" the second.
local searchTitle = args.title or title.subpageText
local term, dab = searchTitle:match('^(.*) (%b())$')
if dab then
dab = dab:sub(2, -2) -- Remove parens
end
if term and dab then
searchTerms[1] = term
searchTerms[2] = dab
else
searchTerms[1] = searchTitle
end
end
searchTerms[1] = '"' .. searchTerms[1] .. '"'
-- Make the intro link
local introLink
if templateCfg.introLink then
local code = templateCfg.introLink.code
local display = templateCfg.introLink.display or renderSearchString(
searchTerms,
' '
)
local tooltip = templateCfg.introLink.tooltip
introLink = p._renderLink(code, searchTerms, display, tooltip)
else
introLink = ''
end
-- Make the other links
local links = {}
local separator = templateCfg.separator or cfg['default-separator']
local sep = ''
for i, t in ipairs(templateCfg.links) do
links[i] = sep .. p._renderLink(t.code, searchTerms, t.display, t.tooltip) ..
(t.afterDisplay or '')
sep = t.separator or separator
end
links = table.concat(links)
-- Make the blurb.
local blurb = substituteParams(templateCfg.blurb, introLink, links)
local span = mw.html.create('span')
span
:addClass('plainlinks')
:addClass(templateCfg.class)
:cssText(templateCfg.style)
:wikitext(blurb)
return tostring(span)
end
setmetatable(p, { __index = function(t, template)
-- The main access point from #invoke.
-- Invocations will look like {{#invoke:Find sources|template name}},
-- where "template name" is a subpage of [[Module:Find sources/templates]].
local tname = template
if tname:sub(-8) == '/sandbox' then
-- This makes {{Find sources/sandbox|Albert Einstein}} work.
tname = tname:sub(1, -9)
end
return function(frame)
local args = require('Module:Arguments').getArgs(frame, {
wrappers = mw.site.namespaces[10].name .. ':' .. tname
})
return t._main(template, args)
end
end})
return p
1yhevceok8j6vbf0gkpzr3810k80rdc
Module:Find sources/config
828
43955540
1055868813
627555846
2021-11-18T08:35:23Z
Primefac
11508456
Changed protection settings for "[[Module:Find sources/config]]": dropping per request of EXCON editor ([Edit=Require extended confirmed access] (indefinite) [Move=Require template editor access] (indefinite))
Scribunto
text/plain
-- Configuration data for [[Module:Find sources]].
return {
-- Define the error message and category to be used if the module is used in
-- the main namespace and the template config doesn't set the
-- isUsedInMainspace key to true. The category is optional; if it is not
-- wanted, it can be removed.
['namespace-error'] = 'Error: Please do not use this template in articles.',
['namespace-error-category'] = 'Pages with templates in the wrong namespace',
-- The separator to be used if no separator is specified in the template
-- config.
['default-separator'] = mw.message.new('Dot-separator'):plain()
}
7m3rfryxbtzywc5g6f1j85l2czfqd1t
Module:Find sources/templates/Find sources mainspace
828
43983923
1074626963
1055868839
2022-03-01T07:33:51Z
Primefac
11508456
Changed protection settings for "[[Module:Find sources/templates/Find sources mainspace]]": match main module ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
Scribunto
text/plain
return {
blurb = "''Find sources:'' $1 – $2",
introLink = {
code = 'google'
},
links = {
{
code = 'google news',
display = 'news'
},
{
code = 'google newspapers',
display = 'newspapers'
},
{
code = 'google books',
display = 'books'
},
{
code = 'google scholar',
display = 'scholar'
},
{
code = 'jstor',
display = 'JSTOR'
}
},
isUsedInMainspace = true
}
k39u38p2vc24ts3y9zywym3jkiq7787
Module:Find sources/links
828
44568058
1127965076
1100311103
2022-12-17T17:18:01Z
Paine Ellsworth
9092818
per edit request on talk page - display = "WP Library" → "TWL"
Scribunto
text/plain
-- This is a list of links used by [[Module:Find sources]].
return {
["archive.org"] = {
url = 'https://archive.org/search.php?query=$1%20AND%20mediatype:texts',
display = 'Archive.org',
description = "The [[Internet Archive]], a digital library of public websites.",
},
["bing"] = {
url = 'https://www.bing.com/search?q=$1',
display = 'Bing',
description = "[[Bing (search engine)|Bing]], Microsoft's flagship search engine.",
},
["britannica"] = {
url = 'https://www.britannica.com/search?nop=1a15&cse=on&query=$1&cx=ccef96e8363da4b5f&tbm=3&fxx=3',
display = 'Encyclopedia Britannica',
description = "[[Encyclopedia Britannica]]",
},
["british library"] = {
url = 'https://explore.bl.uk/primo_library/libweb/action/search.do?fn=search&ct=search&initialSearch=true&mode=Basic&tab=local_tab&indx=1&dum=true&srt=rank&vid=BLVU1&frbg=&tb=t&vl%28freeText0%29=$1',
display = 'British Library',
description = "National library of the United Kingdom",
},
["ccsearch"] = {
url = "https://search.creativecommons.org/search?q=$1&license_type=commercial,modification",
display = "CC Search",
description = "CC Search: The official search engine of [[Creative Commons]]",
},
["cochrane"] = {
url = "https://www.cochranelibrary.com/en/advanced-search?searchBy=-1&isWordVariations=&resultPerPage=25&searchType=advanced&selectedType=review&displayText=&orderBy=relevancy&p_p_id=scolarissearchresultsportlet_WAR_scolarissearchresults&p_p_lifecycle=0&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_pos=1&p_p_col_count=2&searchText=$1",
display = "Cochrane",
description = "[[Cochrane Library]]: Leading publisher of systematic reviews.",
},
["doaj"] = {
url = "https://www.doaj.org/search/articles?source=%7B%22query%22%3A%7B%22query_string%22%3A%7B%22query%22%3A$1%2C%22default_operator%22%3A%22AND%22%7D%7D%7D",
display = "DOAJ",
description = "[[Directory of Open Access Journals|DOAJ]]: Directory of Open Access Journals",
},
["duckduckgo"] = {
url = 'https://duckduckgo.com/?q=$1',
display = 'DuckDuckGo',
description = "[[DuckDuckGo]], a search engine that emphasizes protecting searchers' privacy and avoiding the \"filter bubble\" of personalized search results.",
},
["eowb"] = {
url = 'https://search.lib.umich.edu/everything?query=$1',
display = 'Encyclopedia of World Biography',
tooltip = 'Encyclopedia of World Biography, by Gale Research; online results provided by University of Michigan.',
},
["free news sources"] = {
url = '//en.wikipedia.org/wiki/Wikipedia:Free_English_newspaper_sources',
display = 'free news sources',
},
["gale"] = {
url = "https://go.gale.com/ps/basicSearch.do?inputFieldNames%5B0%5D=OQE&nwf=y&searchType=BasicSearchForm&userGroupName=anon%7Ee3e4f4eb&prodId=AONE&spellCheck=true&method=doSearch&dblist=&stw.option=&ebook=&singleLimiterFieldValues%5BAC%5D=y&_singleLimiterFieldValues%5BAC%5D=on&_singleLimiterFieldValues%5BRE%5D=on&standAloneLimiters=LI&_singleLimiterFieldValues%5BLI%5D=on&inputFieldValues%5B0%5D=$1",
display = "Gale Academic OneFile",
description = " Gale Academic OneFile: Academic publisher portal from [[Gale (publisher)|Gale]]. Access via [[Wikipedia:The Wikipedia Library|Wikipedia Library]]",
},
["gin"] = {
url = "https://guidelines.ebmportal.com/guidelines-international-network?type=search&search=$1",
display = "GIN guidelines",
tooltip = "Content from the library and the registry of guidelines in development provided by the Guidelines International Network",
},
["globe and mail"] = {
url = 'https://www.theglobeandmail.com/search/?q=$1',
display = "''The Globe and Mail''",
description = "The website of ''[[The Globe and Mail]]'', a [[newspaper of record]] for Canada.",
},
["google"] = {
url = '//www.google.com/search?as_eq=wikipedia&q=$1',
display = 'Google',
description = "[[Google]], the flagship search engine from Google Inc.",
},
["google books"] = {
url = '//www.google.com/search?tbs=bks:1&q=$1+-wikipedia',
display = 'Google Books',
description = "[[Google Books]], Google's search engine for books."
},
["google free images"] = {
url = 'https://www.google.com/search?safe=off&tbs=sur:fmc&tbm=isch&q=$1+-site:wikipedia.org+-site:wikimedia.org',
display = 'Free Google Images',
description = "[[Google Images]], Google's search engine for images. Only images compatible with Wikipedia's licensing are included.",
},
["google news"] = {
url = '//www.google.com/search?tbm=nws&q=$1+-wikipedia&tbs=ar:1',
display = 'Google News',
description = "[[Google News]], Google's search engine for news sites.",
notes = "In the past this link searched news archives, but this functionality has been removed by Google. Currently, only recent news articles are searched.",
},
["google newspapers"] = {
url = '//www.google.com/search?&q=$1&tbs=bkt:s&tbm=bks',
display = 'Google Newspapers',
description = "Google Newspapers, a search of Google's digital archive of print newspapers.",
},
["google scholar"] = {
url = '//scholar.google.com/scholar?q=$1',
display = 'Google Scholar',
description = "[[Google Scholar]], Google's search engine for academic papers and other scholarly research.",
},
["haaretz"] = {
url = 'https://www.haaretz.com/search-results?q=$1',
display = "''Haaretz''",
description = "The website of ''[[Haaretz]]'', a [[newspaper of record]] for Israel.",
},
["internet archive scholar"] = {
url = 'https://scholar.archive.org/search?&sort_order=time_desc&q=$1',
display = 'IA scholar',
description = "The [[Internet Archive Scholar]], a digital library of open access academic journals.",
tooltip = "The [[Internet Archive Scholar]], a digital library of open access academic journals.",
},
["infoplease"] = {
url = 'https://www.infoplease.com/search/$1',
display = 'Infoplease',
tooltip = 'Infoplease encyclopedia, dictionary, and almanac',
},
["jstor"] = {
url = 'https://www.jstor.org/action/doBasicSearch?Query=$1&acc=on&wc=on',
display = 'JSTOR',
description = "[[JSTOR]], an online library containing digitised versions of academic journals. Requires a subscription."
},
["library of congress"] = {
url = 'https://www.loc.gov/search/?in=&q=$1',
display = "Library of Congress",
description = "U.S. [[Library of Congress]]",
},
["mail and guardian"] = {
url = 'https://mg.co.za/?s=$1',
display = "''Mail & Guardian''",
description = "The website of the ''[[Mail & Guardian]]'', a [[newspaper of record]] for South Africa.",
},
["medrs"] = {
url = "https://en.wikipedia.org/wiki/Wikipedia:Identifying_reliable_sources_(medicine)",
display = "find medical sources",
tooltip = "Ideal sources for biomedical material include recent literature reviews and medical guidelines; learn how to identify reliable sources for medical content at Wikipedia at WP:MEDRS.",
description = "[[WP:MEDRS|MEDRS]]: Ideal sources for biomedical material include recent literature reviews and medical guidelines; learn how to identify reliable sources for medical content.",
},
["muse"] = {
url = 'https://muse.jhu.edu/search?action=search&min=1&max=10&t=header&query=content:$1:and',
display = 'MUSE',
tooltip = 'Project MUSE: humanities and social science content from academic journals and societies.',
},
["new york times"] = {
url = 'https://www.nytimes.com/search/$1',
display = "''New York Times''",
description = "The website of ''[[The New York Times]]'', a [[newspaper of record]] for the United States.",
},
["new zealand herald"] = {
url = 'https://www.nzherald.co.nz/search/$1/',
display = "''The New Zealand Herald''",
description = "The website of ''[[The New Zealand Herald]]'', a [[newspaper of record]] for New Zealand.",
},
["openlibrary"] = {
url = '//openlibrary.org/search?q=$1&mode=everything',
display = 'OpenLibrary',
separator = '+',
},
["openmd"] = {
url = "https://openmd.com/search?q=$1",
display = "OpenMD",
description = "OpenMD: Search engine for medical literature.",
},
["pubmed"] = {
url = "https://pubmed.ncbi.nlm.nih.gov/?term=$1&filter=pubt.meta-analysis&filter=pubt.review&filter=pubt.systematicreview&filter=datesearch.y_10",
display = "PubMed",
description = "[[PubMed]]: Search engine for biomedical literature from [[United States National Library of Medicine|NLM]].",
},
["sciencedirect"] = {
url = "https://www.sciencedirect.com/search?qs=$1&articleTypes=REV%2CEN%2CCH%2CSSU%2CPGL&lastSelectedFacet=articleTypes",
display = "ScienceDirect",
description = "ScienceDirect: [[Elsevier]]'s scientific, technical, and medical research portal.",
},
["south china morning post"] = {
url = 'https://www.scmp.com/search/$1',
display = "''South China Morning Post''",
description = "The website of the ''[[South China Morning Post]]'', a [[newspaper of record]] for Hong Kong.",
},
["springer"] = {
url = "https://link.springer.com/search?query=$1",
display = "Springer",
description = "Springer Nature's portal for journals, books, and reference works.",
},
["statpearls"] = {
url = "https://www.ncbi.nlm.nih.gov/books/NBK430685/?term=$1",
display = "StatPearls",
description = "StatPearls: the largest provider of healthcare continuing education worldwide, providing peer-reviewed practice-guiding knowledge authored by clinical experts.",
},
["straits times"] = {
url = 'https://www.straitstimes.com/search?searchkey=$1',
display = "''The Straits Times''",
description = "The website of ''[[The Straits Times]]'', a [[newspaper of record]] for Singapore.",
},
["sydney morning herald"] = {
url = 'https://www.smh.com.au/search?text=$1',
display = "''The Sydney Morning Herald''",
description = "The website of ''[[The Sydney Morning Herald]]'', a [[newspaper of record]] for Australia.",
},
["the age"] = {
url = 'https://www.theage.com.au/search?text=$1',
display = "''The Age''",
description = "The website of ''[[The Age]]'', a [[newspaper of record]] for Australia.",
},
["the guardian"] = {
url = 'https://www.google.co.uk/search?as_sitesearch=www.theguardian.com&q=$1',
display = 'The Guardian',
description = "''[[The Guardian]]'' newspaper, U.K.",
},
["the hindu"] = {
url = 'https://www.thehindu.com/search/?q=$1',
display = "''The Hindu''",
description = "The website of ''[[The Hindu]]'', a [[newspaper of record]] for India.",
},
["the times"] = {
url = 'https://www.thetimes.co.uk/search?source=search-page&q=$1',
display = "''The Times''",
description = "The website of ''[[The Times]]'', a [[newspaper of record]] for the United Kingdom.",
},
["times of india"] = {
url = 'https://timesofindia.indiatimes.com/topic/$1',
display = "''The Times of India''",
description = "The website of ''[[The Times of India]]'', a [[newspaper of record]] for India.",
},
["trip"] = {
url = "https://www.tripdatabase.com/Searchresult?search_type=standard&criteria=$1&from_date=2012",
display = "Trip Database",
description = "Trip Database: Search engine for clinical research evidence.",
},
["uptodate"] = {
url = "https://www.uptodate.com/contents/search?sp=0&searchType=PLAIN_TEXT&source=USER_INPUT&searchControl=TOP_PULLDOWN&searchOffset=1&autoComplete=false&language=en&max=10&search=$1",
display = "UpToDate",
tooltip = "Evidence-based resource for clinical decision support written for and by physicians",
},
["vgrl"] = {
url = 'https://en.wikipedia.org/wiki/Special:Search?search=$1&prefix=Wikipedia%3AWikiProject+Video+games%2FReference+library&fulltext=Search+reference+library&fulltext=Search',
display = 'VGRL',
description = "[[Wikipedia:WikiProject Video games/Reference library]] internal archive search.",
},
["vgrs"] = {
url = 'https://www.google.com/cse?cx=009782238053898643791%3A8naerdbd-oy&q=$1',
display = 'VGRS',
description = "[http://www.google.com/cse/home?cx=003516479746865699832:leawcwkqifq Google RS], a [[custom Google search engine]] that limits the search to sites listed in [[Wikipedia:WikiProject Video games/Sources]].",
},
["vgtalk"] = {
url = 'https://en.wikipedia.org/w/index.php?search=$1+prefix%3AWikipedia+talk%3AWikiProject+Video+games&title=Special:Search&profile=default&fulltext=1',
display = 'WPVG Talk',
description = "A search in the WikiProject Video games talk page and its archives under [[Wikipedia talk:WikiProject Video games]].",
},
["wikipedia library"] = {
url = "https://wikipedialibrary.wmflabs.org/search/?q=$1",
display = "TWL",
tooltip = "The Wikipedia Library",
description = "Search results from dozens of services provided via EBSCOhost to Wikipedians via [[Wikipedia:The Wikipedia Library]].",
},
["wikipedia reference search"] = {
url = 'https://www.google.com/custom?hl=en&cx=007734830908295939403%3Agalkqgoksq0&cof=FORID%3A13%3BAH%3Aleft%3BCX%3AWikipedia%2520Reference%2520Search&q=$1',
display = 'Wikipedia Reference Search',
description = "[[WP:WRS|Wikipedia Reference Search]], a Google search that only searches sites vetted by Wikipedians.",
},
["wiley"] = {
url = "https://onlinelibrary.wiley.com/action/doSearch?AllField=$1",
display = "Wiley",
description = "Wiley Online Library: [[Wiley (publisher)|Wiley's]] portal for academic articles, books, and collections.",
},
}
mj19agr38luxymlokcecnj2e5ogsrx0
Template:Cite news
10
4321630
828626614
828404709
2018-03-03T19:19:37Z
Jo-Jo Eumerus
17449355
Per edit request on [[Help talk:Citation Style 1]]
wikitext
text/x-wiki
<includeonly>{{#invoke:citation/CS1|citation
|CitationClass=news
}}</includeonly><noinclude>
{{documentation}}
</noinclude>
pbjnspfej5gxihr9izxrzkow3f1uf3i
Template:Cite book
10
4086375
810449908
810433573
2017-11-15T09:11:45Z
Salix alba
212526
put TD in a collapse top / bottom section
wikitext
text/x-wiki
<includeonly>{{#invoke:citation/CS1|citation
|CitationClass=book
}}</includeonly><noinclude>
{{documentation}}
{{collapse top|TemplateData}}
{{Cite book/TemplateData}}
{{collapse bottom}}
</noinclude>
my4yy07itdv4e2t5sc1x4l3pzgpmzo7
Template:Sfn
10
23092408
1000405995
1000116676
2021-01-14T23:46:10Z
Jonesey95
9755426
add undocumented "ignore-err" (which should be "ignore-error", no?) to error check per a note on my talk page
wikitext
text/x-wiki
<includeonly>{{#invoke:Footnotes|sfn|template=sfn}}</includeonly>{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using sfn with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Sfn]] with unknown parameter "_VALUE_"|ignoreblank=y| 1 | 2 | 3 | 4 | 5 | ignore-err | loc | p | page | pages | postscript | pp | ps | ref | Ref }}<noinclude>
{{documentation}}
</noinclude>
rf0flsau14dh7x1y90pgyjzzmg34yvn
Module:Footnotes
828
38969239
1117462452
1044276984
2022-10-21T21:15:31Z
Legoktm
3855926
Replace [[Module:No globals]] with require( "strict" )
Scribunto
text/plain
require('strict');
local getArgs = require ('Module:Arguments').getArgs;
--[[--------------------------< A R G S _ D E F A U L T >------------------------------------------------------
a table to specify initial values.
]]
local args_default = {
bracket_left = '',
bracket_right = '',
bracket_year_left = '',
bracket_year_right = '',
postscript = '',
page = '',
pages = '',
location = '',
page_sep = ", p. ",
pages_sep = ", pp. ",
ref = '',
template = 'harv', -- if template name not provided in {{#invoke:}} use this
};
--[[--------------------------< T A R G E T _ C H E C K >------------------------------------------------------
look for anchor_id (CITEREF name-list and year or text from |ref=) in anchor_id_list
the 'no target' error may be suppressed with |ignore-err=yes when target cannot be found because target is inside
a template that wraps another template; 'multiple targets' error may not be suppressed
]]
local function target_check (anchor_id, args)
local namespace = mw.title.getCurrentTitle().namespace;
local anchor_id_list_module = mw.loadData ('Module:Footnotes/anchor_id_list');
local anchor_id_list = anchor_id_list_module.anchor_id_list;
local article_whitelist = anchor_id_list_module.article_whitelist;
local template_list = anchor_id_list_module.template_list;
local whitelist_module = mw.loadData ('Module:Footnotes/whitelist');
local whitelist = whitelist_module.whitelist;
local special_patterns = whitelist_module.special_patterns;
local DNB_special_patterns = whitelist_module.DNB_special_patterns;
local DNB_template_names = whitelist_module.DNB_template_names;
if 10 == namespace then
return ''; -- automatic form of |no-tracking=yes; TODO: is this too broad?
end
local tally = anchor_id_list[anchor_id]; -- nil when anchor_id not in list; else a tally
local msg;
local category;
if not tally then
if args.ignore then
return ''; -- if ignore is true then no message, no category
end
if article_whitelist and article_whitelist[anchor_id] then -- if an article-local whitelist and anchor ID is in it
return ''; -- done
end
local wl_anchor_id = anchor_id; -- copy to be modified to index into the whitelist
if args.year then -- for anchor IDs created by this template (not in |ref=) that have a date
if args.year:match ('%d%l$') or -- use the date value to determine if we should remove the disambiguator
args.year:match ('n%.d%.%l$') or
args.year:match ('nd%l$') then
wl_anchor_id = wl_anchor_id:gsub ('%l$', ''); -- remove the disambiguator
end
end
local t_tbl = whitelist[wl_anchor_id]; -- get list of templates associated with this anchor ID
if t_tbl then -- when anchor ID not whitelisted t_tbl is nil
for _, t in ipairs (t_tbl) do -- spin through the list of templates associated with this anchor ID
if template_list[t] then -- if associated template is found in the list of templates in the article
return ''; -- anchor ID is whitlisted and article has matching template so no error
end
end
end
for _, pattern in ipairs (special_patterns) do -- spin through the spcial patterns and try to match
if anchor_id:match (pattern) then
return '';
end
end
for _, dnb_t in ipairs (DNB_template_names or {}) do -- getting desparate now, are there any DNB templates? DNB_template_names may be nil; empty table prevents script error
if template_list[dnb_t] then -- if the article has this DNB template
for _, pattern in ipairs (DNB_special_patterns) do -- spin through the DNB-specifiec wildcard patterns
if anchor_id:match (pattern) then -- and attempt a match
return ''; -- found a match
end
end
end
end
msg = 'no target: ' .. anchor_id; -- anchor_id not found
category = '[[Category:Harv and Sfn no-target errors]]';
elseif 1 < tally then
msg = 'multiple targets (' .. tally .. '×): ' .. anchor_id; -- more than one anchor_id in this article
category = 0 == namespace and '[[Category:Harv and Sfn multiple-target errors]]' or ''; -- only categorize in article space
return '<span class="error harv-error" style="display: inline; font-size:100%"> ' .. args.template .. ' error: ' .. msg .. ' ([[:Category:Harv and Sfn template errors|help]])</span>' .. category;
end
-- category = 0 == namespace and '[[Category:Harv and Sfn template errors]]' or ''; -- only categorize in article space
category = 0 == namespace and category or ''; -- only categorize in article space
--use this version to show error messages
-- return msg and '<span class="error harv-error" style="display: inline; font-size:100%"> ' .. args.template .. ' error: ' .. msg .. ' ([[:Category:Harv and Sfn template errors|help]])</span>' .. category or '';
--use this version to hide error messages
return msg and '<span class="error harv-error" style="display: none; font-size:100%"> ' .. args.template .. ' error: ' .. msg .. ' ([[:Category:Harv and Sfn template errors|help]])</span>' .. category or '';
end
--[[--------------------------< I S _ Y E A R >----------------------------------------------------------------
evaluates param to see if it is one of these forms with or without lowercase letter disambiguator:
YYYY
n.d.
nd
c. YYYY
YYYY–YYYY (separator is endash)
YYYY–YY (separator is endash)
return true when param has a recognized form; false else
]]
local patterns_date= {
'^%d%d%d%d?%l?$',
'^n%.d%.%l?$',
'^nd%l?$',
'^c%. %d%d%d%d?%l?$',
'^%d%d%d%d–%d%d%d%d%l?$',
'^%d%d%d%d–%d%d%l?$',
}
local function is_year (param, args)
args.year = ''; -- used for harv error;
for _, pattern in ipairs (patterns_date) do
if mw.ustring.match (param, pattern) then
args.year = param; -- used for harv error;
return true;
end
end
end
--[[--------------------------< C O R E >----------------------------------------------------------------------
returns an anchor link (CITEREF) formed from one to four author names, year, and insource location (|p=, |pp=, loc=)
]]
local function core( args )
local result;
local err_msg = ''
if args.P5 ~= '' then
if is_year (args.P5, args) then
result = table.concat ({args.P1, ' et al. ', args.bracket_year_left, args.P5, args.bracket_year_right});
else
args.P5 = ''; -- when P5 not a year don't include in anchor
result = table.concat ({args.P1, ' et al.'}); -- and don't render it
end
elseif args.P4 ~= '' then
if is_year (args.P4, args) then
result = table.concat ({args.P1, ', ', args.P2, ' & ', args.P3, ' ', args.bracket_year_left, args.P4, args.bracket_year_right}); -- three names and a year
else
result = table.concat ({args.P1, ' et al.'}); -- four names
end
elseif args.P3 ~= '' then
if is_year (args.P3, args) then
result = table.concat ({args.P1, ' & ', args.P2, ' ', args.bracket_year_left, args.P3, args.bracket_year_right}); -- two names and a year
else
result = table.concat ({args.P1, ', ', args.P2, ' ', ' & ', args.P3}); -- three names
end
elseif args.P2 ~= '' then
if is_year (args.P2, args) then
result = table.concat ({args.P1, ' ', args.bracket_year_left, args.P2, args.bracket_year_right}); -- one name and year
else
result = table.concat ({args.P1, ' & ', args.P2}); -- two names
end
else
result = args.P1; -- one name
end
-- when author-date result ends with a dot (typically when the last positional parameter holds 'n.d.')
-- and when no in-source location (no |p=, |pp=, or |loc=)
-- and when the first or only character in args.postscript is a dot
-- remove the author-date result trailing dot
-- the author-date result trailing dot will be replaced later with the content of args.postscript (usually a dot)
if ('.' == result:sub(-1)) and ('.' == args.postscript:sub(1)) and ('' == args.page) and ('' == args.pages) and ('' == args.location) then
result = result:gsub ('%.$', '');
end
if args.ref ~= 'none' then
local anchor_id;
if args.ref ~= '' then
anchor_id = mw.uri.anchorEncode (args.ref);
err_msg = target_check (anchor_id, args);
result = table.concat ({'[[#', anchor_id, '|', result, ']]'});
else
anchor_id = mw.uri.anchorEncode (table.concat ({'CITEREF', args.P1, args.P2, args.P3, args.P4, args.P5}));
err_msg = target_check (anchor_id, args);
result = table.concat ({'[[#', anchor_id, '|', result, ']]'});
end
end
if args.page ~= '' then
result = table.concat ({result, args.page_sep, args.page});
elseif args.pages ~= ''then
result = table.concat ({result, args.pages_sep, args.pages});
end
if args.location ~= '' then
result = table.concat ({result, ', ', args.location});
end
result = table.concat ({args.bracket_left, result, args.bracket_right, args.postscript}):gsub ('%s+', ' '); -- strip redundant spaces
return result .. err_msg;
end
--[[--------------------------< H Y P H E N _ T O _ D A S H >--------------------------------------------------
Converts a hyphen to a dash under certain conditions. The hyphen must separate
like items; unlike items are returned unmodified. These forms are modified:
letter - letter (A - B)
digit - digit (4-5)
digit separator digit - digit separator digit (4.1-4.5 or 4-1-4-5)
letterdigit - letterdigit (A1-A5) (an optional separator between letter and
digit is supported – a.1-a.5 or a-1-a-5)
digitletter - digitletter (5a - 5d) (an optional separator between letter and
digit is supported – 5.a-5.d or 5-a-5-d)
any other forms are returned unmodified.
str may be a comma- or semicolon-separated list
This code copied from Module:Citation/CS1. The only modification is to require Module:Citation/CS1/Utilities
so that it has access to the functions is_set() and has_accept_as_written()
]]
local function hyphen_to_dash( str )
local utilities = require ('Module:Citation/CS1/Utilities'); -- only modification so that this function has access to is_set() and has_accept_as_written()
if not utilities.is_set (str) then
return str;
end
local accept; -- Boolean
str = str:gsub ('&[nm]dash;', {['–'] = '–', ['—'] = '—'}); -- replace — and – entities with their characters; semicolon mucks up the text.split
str = str:gsub ('-', '-'); -- replace HTML numeric entity with hyphen character
str = str:gsub (' ', ' '); -- replace entity with generic keyboard space character
local out = {};
local list = mw.text.split (str, '%s*[,;]%s*'); -- split str at comma or semicolon separators if there are any
for _, item in ipairs (list) do -- for each item in the list
item, accept = utilities.has_accept_as_written (item); -- remove accept-this-as-written markup when it wraps all of item
if not accept and mw.ustring.match (item, '^%w*[%.%-]?%w+%s*[%-–—]%s*%w*[%.%-]?%w+$') then -- if a hyphenated range or has endash or emdash separators
if item:match ('^%a+[%.%-]?%d+%s*%-%s*%a+[%.%-]?%d+$') or -- letterdigit hyphen letterdigit (optional separator between letter and digit)
item:match ('^%d+[%.%-]?%a+%s*%-%s*%d+[%.%-]?%a+$') or -- digitletter hyphen digitletter (optional separator between digit and letter)
item:match ('^%d+[%.%-]%d+%s*%-%s*%d+[%.%-]%d+$') or -- digit separator digit hyphen digit separator digit
item:match ('^%d+%s*%-%s*%d+$') or -- digit hyphen digit
item:match ('^%a+%s*%-%s*%a+$') then -- letter hyphen letter
item = item:gsub ('(%w*[%.%-]?%w+)%s*%-%s*(%w*[%.%-]?%w+)', '%1–%2'); -- replace hyphen, remove extraneous space characters
else
item = mw.ustring.gsub (item, '%s*[–—]%s*', '–'); -- for endash or emdash separated ranges, replace em with en, remove extraneous whitespace
end
end
table.insert (out, item); -- add the (possibly modified) item to the output table
end
local temp_str = ''; -- concatenate the output table into a comma separated string
temp_str, accept = utilities.has_accept_as_written (table.concat (out, ', ')); -- remove accept-this-as-written markup when it wraps all of concatenated out
if accept then
temp_str = utilities.has_accept_as_written (str); -- when global markup removed, return original str; do it this way to suppress boolean second return value
return temp_str;
else
return temp_str; -- else, return assembled temp_str
end
end
--[[--------------------------< A R G S _ F E T C H >---------------------------------------------------------
Because all of the templates share a common set of parameters, a single common function to fetch those parameters
from frame and parent frame.
]]
local function args_fetch (frame, ps)
local args = args_default; -- create a copy of the default table
local pframe = frame:getParent(); -- point to the template's parameter table
for k, v in pairs (frame.args) do -- override defaults with values provided in the #invoke: if any
args[k] = v;
end
args.postscript = pframe.args.postscript or pframe.args.ps or ps;
if 'none' == args.postscript then
args.postscript = '';
end
args.page = pframe.args.p or pframe.args.page or '';
args.pages = pframe.args.pp or pframe.args.pages or '';
args.pages = ('' ~= args.pages) and hyphen_to_dash (args.pages) or '';
args.location = pframe.args.loc or '';
args.ref = pframe.args.ref or pframe.args.Ref or '';
args.ignore = ('yes' == pframe.args['ignore-false-positive']) or ('yes' == pframe.args['ignore-err']);
for i, v in ipairs ({'P1', 'P2', 'P3', 'P4', 'P5'}) do -- loop through the five positional parameters and trim if set else empty string
args[v] = (pframe.args[i] and mw.text.trim (pframe.args[i])) or '';
end
if args.P5 and not is_year (args.P5, args) then
local i = 6; -- initialize the indexer to the sixth positional parameter
while pframe.args[i] do -- in case there are too many authors loop through the authors looking for a year
local v = mw.text.trim (pframe.args[i]); -- trim
if is_year (v, args) then -- if a year
args.P5 = v; -- overwrite whatever was in args.P5 with year
break; -- and abandon the search
end
i = i + 1; -- bump the indexer
end
end
return args;
end
--[[--------------------------< H A R V A R D _ C I T A T I O N >----------------------------------------------
common entry point for:
{{harvard citation}} aka {{harv}}
{{Harvard citation no brackets}} aka {{harvnb}}
{{harvcol}}
{{harvcolnb}}
{{harvcoltxt}}
{{Harvard citation text}} aka {{harvtxt}}
{{Harvp}}
Distinguishing features (brackets and page separators) are specified in this module's {{#invoke}} in the respective templates.
]]
local function harvard_citation (frame)
local args = args_fetch (frame, ''); -- get the template and invoke parameters; default postscript is empty string
return core (args);
end
--[[--------------------------< S T R I P _ U R L >------------------------------------------------------------
used by sfn() and sfnm(). This function fixes an issue with reference tooltip gadget where the tooltip is not displayed
when an insource locator (|p=, |pp=, |loc=) has an external wikilink that contains a # character
strip uri-reserved characters from urls in |p=, |pp-, and |loc= parameters The researved characters are:
!#$&'()*+,/:;=?@[]
]]
local function strip_url (pages)
local escaped_uri;
if not pages or ('' == pages) then
return pages;
end
for uri in pages:gmatch ('%[(%a[%w%+%.%-]*://%S+)') do -- for each external link get the uri
escaped_uri = uri:gsub ("([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1" ); -- save a copy with lua pattern characters escaped
uri = uri:gsub ("[!#%$&'%(%)%*%+,/:;=%?@%[%]%.%%]", ''); -- remove reserved characters and '%' because '%20' (space character) is a lua 'invalid capture index'
pages = pages:gsub (escaped_uri, uri, 1); -- replace original uri with the stripped version
end
return pages;
end
--[[--------------------------< S F N >------------------------------------------------------------------------
entry point for {{sfn}} and {{sfnp}}
]]
local function sfn (frame)
local args = args_fetch (frame, '.'); -- get the template and invoke parameters; default postscript is a dot
local result = core (args); -- go make a CITEREF anchor
-- put it all together and then strip redundant spaces
local name = table.concat ({'FOOTNOTE', args.P1, args.P2, args.P3, args.P4, args.P5, strip_url (args.page), strip_url (args.pages), strip_url (args.location)}):gsub ('%s+', ' ');
return frame:extensionTag ({name='ref', args={name=name}, content=result});
end
--[[--------------------------< S F N M >----------------------------------------------------------------------
common entry point for {{sfnm}} and {{sfnmp}}
Distinguishing features (brackets) are specified in this module's {{#invoke}} in the respective templates.
]]
local function sfnm (frame)
local args = args_default; -- create a copy of the default table
local pframe = frame:getParent(); -- point to the template's parameter table
local n = 1; -- index of source; this is the 'n' in na1, ny, etc
local first_pnum = 1; -- first of a pair of positional parameters
local second_pnum = 2; -- second of a pair of positional parameters
local last_ps = 0; -- index of the last source with |nps= set
local last_index = 0; -- index of the last source; these used to determine which of |ps= or |nps= will terminate the whole rendering
local out = {}; -- table to hold rendered sources
local footnote = {'FOOTNOTE'}; -- all author, date, insource location stuff becomes part of the reference's footnote id; added as we go
for k, v in pairs (frame.args) do -- override defaults with values provided in the #invoke: if any
args[k] = v;
end
while true do
if not pframe.args[table.concat ({n, 'a1'})] and not pframe.args[first_pnum] then
break; -- no na1 or matching positional parameter so done
end
if pframe.args[table.concat ({n, 'a1'})] then -- does this source use named parameters?
for _, v in ipairs ({'P1', 'P2', 'P3', 'P4', 'P5'}) do -- initialize for this source
args[v] = '';
end
for i, v in ipairs ({'P1', 'P2', 'P3', 'P4', 'P5'}) do -- extract author and year parameters for this source
args[v] = pframe.args[table.concat ({n, 'a', i})] or ''; -- attempt to assign author name
if '' == args[v] then -- when there wasn't an author name
args[v] = pframe.args[table.concat ({n, 'y'})] or ''; -- attempt to assign year
break; -- done with author/date for this source
end
end
else -- this source uses positional parameters
args.P1 = mw.text.trim (pframe.args[first_pnum]); -- yes, only one author supported
args.P2 = (pframe.args[second_pnum] and mw.text.trim (pframe.args[second_pnum])) or ''; -- when positional author, year must also be positional
for _, v in ipairs ({'P3', 'P4', 'P5'}) do -- blank the rest of these for this source
args[v] = '';
end
first_pnum = first_pnum + 2; -- source must use positional author and positional year
second_pnum = first_pnum + 1; -- bump these for possible next positional source
end
args.postscript = pframe.args[table.concat ({n, 'ps'})] or '';
if 'none' == args.postscript then -- this for compatibility with other footnote templates; does nothing
args.postscript = '';
end
args.ref = pframe.args[table.concat ({n, 'ref'})] or ''; -- alternate reference for this source
args.page = pframe.args[table.concat ({n, 'p'})] or ''; -- insource locations for this source
args.pages = pframe.args[table.concat ({n, 'pp'})] or '';
args.pages = ('' ~= args.pages) and hyphen_to_dash (args.pages) or '';
args.location = pframe.args[table.concat ({n, 'loc'})] or '';
args.ignore = ('yes' == pframe.args[table.concat ({n, 'ignore-false-positive'})]) or ('yes' == pframe.args[table.concat ({n, 'ignore-err'})]);
table.insert (out, core (args)); -- save the rendering of this source
for k, v in ipairs ({'P1', 'P2', 'P3', 'P4', 'P5'}) do -- create the FOOTNOTE id
if '' ~= args[v] then
table.insert (footnote, args[v]);
end
end
for k, v in ipairs ({'page', 'pages', 'location'}) do -- these done separately so that we can strip uri-reserved characters from extlinked page numbers
if '' ~= args[v] then
table.insert (footnote, strip_url (args[v]))
end
end
last_index = n; -- flags used to select terminal postscript from nps or from end_ps
if '' ~= args.postscript then
last_ps = n;
end
n = n+1; -- bump for the next one
end
local name = table.concat (footnote):gsub ('%s+', ' '); -- put the footnote together and strip redundant space
args.end_ps = pframe.args.postscript or pframe.args.ps or '.'; -- this is the postscript for the whole not for the individual sources
if 'none' == args.end_ps then -- not an original sfnm parameter value; added for compatibility with other footnote templates
args.end_ps = '';
end
local result = table.concat ({table.concat (out, '; '), (last_index == last_ps) and '' or args.end_ps});
return frame:extensionTag ({name='ref', args={name=name}, content=result});
end
--[[--------------------------< S F N R E F >------------------------------------------------------------------
implements {{sfnref}}
]]
local function sfnref (frame)
local args = getArgs (frame);
local out = {};
for i=1, 5 do -- get the first five args if there are five args
if args[i] then
out[i] = args[i];
else
break; -- less than 5 args break out
end
end
if 5 == #out then -- when we have seen five args there may bemore
local i = 6; -- initialize the indexer to the sixth positional parameter
while args[i] do -- in case there are too many authors loop through the authors looking for a year
if is_year (args[i], args) then -- if a year
out[5] = args[i]; -- overwrite whatever was in args[5] with year
break; -- and abandon the search
end
i = i + 1; -- bump the indexer
end
end
return mw.uri.anchorEncode ('CITEREF' .. table.concat (out));
end
--[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------
]]
return {
harvard_citation = harvard_citation,
sfn = sfn,
sfnm = sfnm,
sfnref = sfnref,
};
cweab9vnqkc5ogsbjj21peoxjs5ku0z
Module:Footnotes/anchor id list
828
63248705
1117587958
1061266347
2022-10-22T14:43:49Z
WOSlinker
3138265
use require('strict') instead of require('Module:No globals')
Scribunto
text/plain
require('strict');
local data = mw.loadData ('Module:Footnotes/anchor id list/data');
local whitelist = mw.loadData ('Module:Footnotes/whitelist');
local Lang_obj = mw.language.getContentLanguage(); -- used by template_list_add() to uppercase first letter of template name TODO: better way to do that?
local redirects_date = {
['date'] = true,
['datetomos'] = true,
['formatdate'] = true,
['isotodmymdy'] = true,
['isotomos'] = true,
}
local redirects_patent = { -- special case cs1-like templates because uses different parameters for name and date in anchor ID
['Cite patent'] = true,
['Citeref patent'] = true,
['Ref patent'] = true,
}
local redirects_sfnref = {
['sfnref'] = true,
['harvid'] = true,
}
local aliases_author = { -- these use pseudo-patterns in the same way as cs1|2; '#' represents 1 or more enumerator digits
'last#',
'author#',
'surname#',
'author-last#',
'author#-last',
'subject#',
'host#',
}
local aliases_contributor = {
'contributor#',
'contributor-last#',
'contributor#-last',
'contributor-surname#',
'contributor#-surname',
}
local aliases_editor = {
'editor#',
'editor-last#',
'editor#-last',
'editor-surname#',
'editor#-surname',
}
local aliases_harvc_author = {
'last#',
'author#',
}
local aliases_inventor = { -- cite patent
'inventor#',
'inventor-last#',
'inventor#-last',
'inventor-surname#',
'inventor#-surname',
'invent#',
'invent-#',
}
local alias_patterns_date = { -- normal lua patterns for most cs1|2-like templates
'|%s*year%s*=%s*',
'|%s*date%s*=%s*',
'|%s*publication%-?date%s*=%s*',
'|%s*air%-?date%s*=%s*',
}
local alias_patterns_harvc_date = { -- normal lua patterns for harvc template
'|%s*anchor%-year%s*=%s*',
'|%s*year%s*=%s*',
}
local alias_patterns_patent_date = { -- normal lua patterns for cite patent templates
'|%s*issue%-date%s*=%s*',
'|%s*gdate%s*=%s*',
'|%s*publication%-date%s*=%s*',
'|%s*pubdate%s*=%s*',
}
local patterns_date = { -- normal lua patterns
'(%d%d%d%d–%d%d%d%d%l?)$', -- YYYY–YYYY four-digit year range at end (Season YYYY–YYYY); with or without dab
'^(%d%d%d%d–%d%d%l?)$', -- YYYY–YY two-digit year range; with or without dab
'^(c%. %d%d%d%d?%l?)$', -- three- or four-digit circa year; with or without dab
'(%d%d%d%d?%l?)$', -- three- or four-digit year at end of date (dmy or mdy); with or without dab
'^(%d%d%d%d?%l?)', -- three- or four-digit year at beginning of date (ymd or YYYY); with or without dab
'^(n%.d%.%l?)$', -- 'no date' with dots; with or without dab
'^(nd%l?)$', -- 'no date' without dots; with or without dab
}
local patterns_tags = {
'<nowiki>.-</nowiki>',
'<!%-%-.-%-%->',
'<pre>.-</pre>',
'<syntaxhighlight.->.-</syntaxhighlight>',
'<source.->.-</source>', -- deprecated alias of syntaxhighlight tag
}
local template_skip = { -- templates to be skipped for whatever reason; mostly because they resemble cs1-like templates
['Citation-attribution'] = true,
}
local Article_content;
local anchor_id_list = {}; -- exported tables
local template_list = {};
local article_whitelist = {};
--[[--------------------------< A R T I C L E _ C O N T E N T _ G E T >----------------------------------------
get article content, remove certain html-like tags and their content so that this code doesn't include any citation
templates inside the tags as valid tagets; they are not.
]]
local function article_content_get ()
if not Article_content then
Article_content = mw.title.getCurrentTitle():getContent() or ''; -- get the content of the article or ''; new pages edited w/ve do not have 'content' until saved; ve does not preview; phab:T221625
for _, tag in ipairs (patterns_tags) do
Article_content = Article_content:gsub (tag, ''); -- remove certain html-like tags and their content
end
end
end
--[[--------------------------< S F N R E F _ G E T >----------------------------------------------------------
make an anchor id from the contents of {{sfnref}} or {{harvid}}. this function assumes that {{sfnref}} and {{harvid}}
are correctly formed.
]]
local function sfnref_get (template)
template = template:gsub ('{{%s*(.-)%s*}}', '%1'); -- strip bounding template markup and trim
local parts = mw.text.split (template, '%s*|%s*'); -- split at the pipe and remove extraneous space characters
local anchor_id = {};
if redirects_sfnref[parts[1]:lower()] then
anchor_id[1] = 'CITEREF';
else
return nil; -- not an sfnref or harvid template
end
local i = 2; -- indexer into parts{} table
local j = 2; -- indexer into anchor_id{} table which already has 'CITEREF' at [1]
while parts[i] and 7 > j do -- loop through what should be just positional parameters for names and year (2-6 four names and a date)
if not parts[i]:find ('=') then -- look for equal sign (named paraneter in a template that doesn't support named parameters)
anchor_id[j] = parts[i]; -- positional parameters are saved
j = j+1; -- bump the anchor_id{} indexer
end
i = i+ 1; -- bump the parts{} indexer
end
return table.concat (anchor_id, '');
end
--[[--------------------------< D A T E _ G E T >--------------------------------------------------------------
extract year from one of |year=, |date=, |publicationdate=, or |publication-date in that order. Does not error
check (that is left to the cs1|2 templates to do)
also gets date from |<date alias>={{date|...}}
]]
local function date_get (template, aliases)
local date;
local rvalue;
for _, pattern in ipairs (aliases) do -- spin through the date alias patterns
rvalue = tostring(template):match (pattern); -- is this |<date alias>= used (tostring() because something makes match() think template is a table)
if rvalue then
rvalue = tostring(template):match (pattern .. '(%b{})'); -- is rvalue a template?
if rvalue then
rvalue = rvalue:gsub ('{{%s*(.-)%s*}}', '%1'); -- strip bounding template markup and trim
local parts = mw.text.split (rvalue, '%s*|%s*'); -- split at the pipe and remove extraneous space characters
if redirects_date[parts[1]:lower()] then -- if parts[1] names {{date}} or redirect
rvalue = parts[2]; -- assume that date template is properly formed, first positional parameter is the date
else
return ''; -- |date= holds some other template than {{date}} or redirect
end
else
rvalue = template:match (pattern .. '([^|}]+)');
if rvalue then -- if rvalue is something
rvalue = mw.text.trim (rvalue); -- trim it
end
if not rvalue or '' == rvalue then -- if rvale was nothing or trimed to nothing
rvalue = nil; -- ensure that it is unset so we can try the next parameter in the list
end
end
if rvalue then
for _, pattern in ipairs (patterns_date) do -- spin through the recognized date formats
date = rvalue:match (pattern); -- attempt to extract year portion according to the pattern
if date then
return date; -- matched so return;
end
end
break; -- found a date but it was malformed so abandon
end
end
end
return ''; -- no date param or date param doesn't hold a recognized date; empty string for concatenation
end
--[[--------------------------< V N A M E S _ G E T >----------------------------------------------------------
extract names from |vauthors= or |veditors=; there is no |vcontributors= parameter.
splits the v parameter value at the comma; correctly handles accept-as-witten markup when used to wrap a comma-
separated names (corporate)
]]
local function vnames_get (params, vparam)
local vnames = {}; -- first four author or editor names go here
local split = {}; -- temp table to assist in decoding accept-as-witten-markup
if params[vparam] then -- test for |vauthors= or |veditor=
split = mw.text.split (params[vparam], '%s*,%s*'); -- this will separate portions of ((Black, Brown, White, an Co.))
local i = 1; -- an indexer
while split[i] do
if split[i]:match ('^%(%(.*[^%)][^%)]$') then -- first segment of comma-separated accept-as-witten; this segment has the opening doubled parens
local name = split[i];
i=i+1; -- bump indexer to next segment
while split[i] do
name = name .. ', ' .. split[i]; -- concatenate with previous segments
if split[i]:match ('^.*%)%)$') then -- if this table member has the closing doubled parens
break; -- and done reassembling so
end
i=i+1; -- bump indexer
end
table.insert (vnames, name); -- and add accept-as-witten name to the vnames table
else
table.insert (vnames, split[i]); -- and add name to the vnames table
end
i=i+1; -- bump indexer
if 5 == i then break; end -- limit to four names
end
for i, vname in ipairs (vnames) do
if not vname:match ('%(%(.-%)%)') then -- without accept-this-value-as-written markup
vnames[i] = vname:gsub ('(.-)%s+%u+$', '%1'); -- extract and save surname(s)
end
end
for i, vname in ipairs (vnames) do -- repeat, this time for accept-this-value-as-written markup
vnames[i] = vname:gsub ('%(%((.-)%)%)', '%1'); -- remove markup if present and save the whole name
end
end
return 0 ~= #vnames and table.concat (vnames) or nil -- return a concatenation of the vnames; nil else
end
--[[--------------------------< N A M E S _ G E T >------------------------------------------------------------
cs1|2 makes anchor id from contributor, author, or editor name-lists in that order
get the names from the cs1|2 template; if there are no contributor names, try author names, then try editor names.
returns concatenated names in enumeration order when successful; nil else
empty name (nameholding parameter n is present without value) and missing name (nameholding parameter n is not
present) are included as empty string with all other names
]]
local function names_get (params, aliases_list)
local names = {}; -- first four author or editor names go here
local enum_alias; -- alias with '#' replaced with a digit
for enum=1, 4 do -- four names only
for i, alias in ipairs (aliases_list) do
if not names[enum] then -- hanven't found a previous alias with this [enum]? see if we can find this alias with this enum
enum_alias = alias:gsub ('#', enum); -- replace '#' to make 'lastn'
if 1 == enum then -- because |last= and last1= are exact aliases
if params[enum_alias] then -- test |last1= first
names[enum] = params[enum_alias]; -- found so save the value assigned to |last1=
break; -- next enum
else
enum_alias = alias:gsub ('#', ''); -- replace '#' to make 'last'
if params[enum_alias] then
names[enum] = params[enum_alias]; -- found so save the value assigned to |last=
break; -- next enum
end
end
else -- here for enum 2, 3, 4
if params[enum_alias] then
names[enum] = params[enum_alias]; -- found so save the value assigned to |lastn=
break; -- next enum
end
end
end
end
end
for enum=1, 4 do -- spin through the names table and
local name = names[enum];
if not name then -- when nameholding parameter n is not present (nil)
name = ''; -- convert to empty string for concatenation
end
name = name:gsub('%(%((.-)%)%)', '%1'); -- remove accept-as-written markup if present
names[enum] = name; -- save the modified name
end
local name_str = table.concat (names); -- concatenate the names
return '' ~= name_str and name_str or nil; -- return the concatenation if not empty string; nil else
end
--[[--------------------------< T E M P L A T E _ S T R I P >--------------------------------------------------
removes the citation or havrc template's {{ and }} markup then removes, in whole, any templates found inside the
citation or harvc template.
Templates are not allowed in parameters that are made part of COinS metadata; yet, they will appear. cs1|2 does
not see the template markup but instead sees the result of the template as html. cs1|2 strips the html which
leaves the displayed value for the anchor id. We can't do that here so, because templates aren't allowed in
parameters, we simply discard any templates found in the cs1|2 template.
this may leave a |lastn= parameter empty which will be treated as if it were really empty as cs1|2 do (three authors,
|last2= empty -> CITEREFLast1Last3YYYY (the harv and sfn render: 'Last1, & Last3 YYYY' with CITEREFLast1Last3YYYY).
]]
local function template_strip (template)
template = template:gsub ('^{{%s*', ''):gsub ('%s*}}$', '', 1); -- remove outer {{ and }} (cs1|2 template delimiters with trailing/leading whitespace)
template = template:gsub ('%b{}', ''); -- remove any templates from the cs1|2 template
return template;
end
--[[--------------------------< E S C A P E _ L U A _ M A G I C _ C H A R S >----------------------------------
Returns a string where all of lua's magic characters have been escaped. This is important because functions like
string.gsub() treat their pattern and replace strings as patterns, not literal strings.
]]
local function escape_lua_magic_chars (argument)
argument = argument:gsub("%%", "%%%%"); -- replace % with %%
argument = argument:gsub("([%^%$%(%)%.%[%]%*%+%-%?])", "%%%1"); -- replace all other lua magic pattern characters
return argument;
end
--[=[-------------------------< W I K I L I N K _ S T R I P >--------------------------------------------------
Wikilink markup does not belong in an anchor id and can / does confuse the code that parses apart citation and
harvc templates so here we remove any wiki markup:
[[link|label]] -> label
[[link]] -> link
]=]
local function wikilink_strip (template)
for wikilink in template:gmatch ('%[%b[]%]') do -- get a wikilink
template = template:gsub ('%[%b[]%]', '__57r1P__', 1); -- install a marker
if wikilink:match ('%[%[.-|(.-)%]%]') then
wikilink = wikilink:match ('%[%[.-|(.-)%]%]'); -- extract label from complex [[link|label]] wikilink
else
wikilink = wikilink:match ('%[%[(.-)%]%]'); -- extract link from simple [[link]] wikilinks
end
wikilink = escape_lua_magic_chars (wikilink); -- in case there are lua magic characters in wikilink
template = template:gsub ('__57r1P__', wikilink, 1); -- replace the marker with the appropriate text
end
return template;
end
--[[--------------------------< T E M P L A T E _ N A M E _ G E T >--------------------------------------------
return the citation or harvc template's name; convert to lower case and trim leading and trailing whitespace;
when the template is a sandbox the subpage portion of the template name is omitted from the returned template name
{{Cite book/new |...}} returns cite book
]]
local function template_name_get (template)
local template_name = template:match ('^{{%s*([^/|}]+)'); -- get template name; ignore subpages ~/new, ~/sandbox; parser functions
if not template_name or template_name:match ('^#') then -- parser functions, magic words don't count as templates
return nil; -- could not get template name from (possibly corrupt) template; extraneous opening { mid template can cause this;
end;
template_name = template_name:gsub ('%s*$', ''); -- trim trailing whitespace; leading whitespace already removed
return Lang_obj:ucfirst (template_name); -- first character in template name must be uppercase (same as canonical template name) TODO: better way to do this?
end
--[[--------------------------< T E M P L A T E _ P A R A M S _ G E T >----------------------------------------
parse apart a template's parameters and store in the params table where key is the parameter's name and value is
the parameter's value; empty parameters are not saved
]]
local function template_params_get (template, params_t)
template = wikilink_strip (template); -- because piped wikilinks confuse code that builds params_t{} and because wikilinks not allowed in an anchor id
-- strip templates after getting |ref= value because |ref={{sfnref}} and |ref={{harvid}} are allowed
template = template_strip (template); -- because template markup can confuse code that builds params_t{} and because templates in name parameters are not allowed
local temp_t = mw.text.split (template, '%s*|%s*'); --split on the pipe
for _, param in ipairs (temp_t) do
if param:find ('=', 1, true) then -- a named parameter?
local k, v = param:match ('%s*([^=]-)%s*=%s*([^|}]+)');
if v then -- there must be a value
if '' ~= v and not v:match ('^%s$') then -- skip when value is empty string or only whitespace
params_t[k] = mw.text.trim (v); -- add trimmed value else
end
end
end
end
end
--[[--------------------------< C I T E R E F _ M A K E _ H A R V C >------------------------------------------
makes anchor_id from {{harvc}} or redirects
]]
local function anchor_id_make_harvc (template)
local date = date_get (template, alias_patterns_harvc_date); -- get date; done here because might be in {{date}}; return date if valid; empty string else
local anchor_id;
local params = {}; -- table of harvc parameters
local id; -- custom anchor id for this {{harvc}} template
id = template:match ('|%s*id%s*=%s*(%b{})'); -- in case |id={{sfnref}}; done here because templates will be stripped
template_params_get (template, params); -- build a table of template parameters and their values; this strips wikilinks and templates
if id then -- when set is {{sfnref}} or {{harvid}} template
return sfnref_get (id); -- returns content of {{sfnref}} or {{harvid}}; nil else
end
if params.id then -- custom anchor for this {{harvc}} template (text)
return params.id; -- |id= value as written
end
anchor_id = names_get (params, aliases_harvc_author); -- get the harvc contributor names
if anchor_id then -- if names were gotten
return 'CITEREF' .. anchor_id .. date;
end
return nil; -- no names; no anchor_id
end
--[[--------------------------< A N C H O R _ I D _ M A K E _ W R A P P E R >----------------------------------
for wrapper templates
inspect externally visible |ref= to decide what to do:
|ref= - empty or missing: get names and date from whitelist defaults; override defaults from externally visible template parameters
|ref=harv - same as empty or missing
|ref={{SfnRef|name|name|name|name|year}} - assemble an anchor id from {{sfnref}} positional parameters
|ref={{Harvid|name|name|name|name|year}} - assemble an anchor id from {{harvid}} positional parameters
|ref=none - skip; do nothing because an anchor id intentionally suppressed; TODO: keep with a type code of '0'?
|ref=<text> - save param value because may match an anchor id override value in {{harv}} template |ref= parameter or {{harvc}} |id= parameter
]]
local function anchor_id_make_wrapper (template)
local ref; -- content of |ref=
local template_name; -- name of the template
local anchor_id; -- the assembled anchor id from this template
local date;
local name_default;
local date_default;
local vol;
local params = {}; -- table of template parameters
template_name = template_name_get (template); -- get first char uppercase trimmed template name; ignore subpages ~/new, ~/sandbox
if not template_name or template_skip[template_name] then
return nil; -- could not extract template name from (possibly corrupted) template (extraneous opening { in the template will cause this)
end
date = date_get (template, alias_patterns_date); -- get date; done here because might be in {{date}}
-- if '' == date then
-- date = whitelist.wrapper_templates[template_name][2] or ''; -- no externally visible date so get default date
-- end
ref = template:match ('|%s*ref%s*=%s*(%b{})'); -- first look for |ref={{sfnref}} or |ref={{harvid}} because we will strip templates from the wrapper template
if not ref then
if template:match ('|%s*ref%s*=([^|}]+)') then -- |ref={{template}} not found; if there is a |ref= param with an assigned value
ref = template:match ('|%s*ref%s*=([^|}]+)'); -- get the value; whitespace is a 'value'
if ref then -- nil when |ref=|... or when |ref=}} (no spaces between assignment operator and pipe or closing brace)
ref = mw.text.trim (ref); -- something, could be just whitespace, so trim leading / trailing whitespace
if '' == ref then -- trimming a string of whitespace makes an empty string
ref = nil; -- make empty ref same as missing ref
end
end
end
end
template_params_get (template, params); -- build a table of template parameters and their values
if whitelist.wrapper_templates[template_name][1] then -- is this wrapper a simple-default wrapper?
name_default = whitelist.wrapper_templates[template_name][1]; -- get the default names
date_default = whitelist.wrapper_templates[template_name][2]; -- get the default date
else
vol = params['volume'] or 'default';
if not whitelist.wrapper_templates[template_name][vol] then -- make sure this volume exists
vol = 'default'; -- doesn't exist, use default volume
end
name_default = whitelist.wrapper_templates[template_name][vol][1]; -- get the default names
date_default = whitelist.wrapper_templates[template_name][vol][2]; -- get the default date
end
if 'harv' == ref or not ref then -- |ref=harv specified or |ref= missing or empty
anchor_id = names_get (params, aliases_contributor) or -- get contributor, author, or editor names
names_get (params, aliases_author) or
vnames_get (params, 'vauthors') or -- |vauthors=
names_get (params, aliases_editor) or
vnames_get (params, 'veditors') or -- |veditors=
name_default; -- default names from whitelist
-- whitelist.wrapper_templates[template_name][1]; -- default names from whitelist
if '' == date then -- if date not provided in the template
date = date_default; -- use the default date from whitelist
end
if anchor_id then -- if names were gotten
anchor_id = 'CITEREF' .. anchor_id .. date;
end
elseif ref:match ('%b{}') then -- ref holds a template
anchor_id = sfnref_get (ref); -- returns content of {{sfnref}} or {{harvid}}; nil else
elseif 'none' == ref then -- |ref=none
return nil; -- anchor id expicitly suppressed
else
anchor_id = ref; -- |ref=<text> may match an anchor id override value in {{harv}} template |ref= parameter
end
return anchor_id; -- anchor_id text; nil else
end
--[[--------------------------< A N C H O R _ I D _ M A K E _ C S 1 2 >----------------------------------------
for cs1|2 template and cs1-like templates
inspect |ref= to decide what to do:
|ref= - empty or missing: get names and date from template parameters; all cs1|2 create CITEREF anchor IDs
|ref=harv - get names and date from template parameters
|ref={{SfnRef|name|name|name|name|year}} - assemble an anchor id from {{sfnref}} positional parameters
|ref={{Harvid|name|name|name|name|year}} - assemble an anchor id from {{harvid}} positional parameters
|ref=none - skip; do nothing because an anchor id intentionally suppressed; TODO: keep with a type code of '0'?
|ref=<text> - save param value because may match an anchor id override value in {{harv}} template |ref= parameter or {{harvc}} |id= parameter
]]
local function anchor_id_make_cs12 (template)
local ref; -- content of |ref=
local template_name; -- name of the template
local anchor_id; -- the assembled anchor id from this template
local date;
local params = {}; -- table of template parameters
template_name = template_name_get (template); -- get first char uppercase trimmed template name; ignore subpages ~/new, ~/sandbox
if not template_name or template_skip[template_name] then
return nil; -- could not extract template name from (possibly corrupted) template (extraneous opening { in the template will cause this)
end
if redirects_patent[template_name] then
date = date_get (template, alias_patterns_patent_date); -- get date; done here because might be in {{date}}
else
date = date_get (template, alias_patterns_date);
end
ref = template:match ('|%s*ref%s*=%s*(%b{})'); -- first look for |ref={{sfnref}} or |ref={{harvid}} because we will strip templates from the cs1|2 template
if not ref then
if template:match ('|%s*ref%s*=([^|}]+)') then -- |ref={{template}} not found; if there is a |ref= param with an assigned value
ref = template:match ('|%s*ref%s*=([^|}]+)'); -- get the value; whitespace is a 'value'
if ref then -- nil when |ref=|... or when |ref=}} (no spaces between assignment operator and pipe or closing brace)
ref = mw.text.trim (ref); -- something, could be just whitespace, so trim leading / trailing whitespace
if '' == ref then -- trimming a string of whitespace makes an empty string
ref = nil; -- make empty ref same as missing ref
end
end
end
end
template_params_get (template, params); -- build a table of template parameters and their values
if not ref then -- |ref= not set, might be cite LSA which doesn't support |ref=
if 'cite lsa' == template_name then
return 'CITEREF' .. (params.last or '') .. (params.year or ''); -- cite LSA always creates an anchor id using only |last= and |year= (no aliases)
end
end
if 'harv' == ref or not ref then -- |ref=harv specified or |ref= missing or empty
if redirects_patent[template_name] then -- if this is a cite patent template
anchor_id = names_get (params, aliases_inventor); -- inventor names only
else -- cs1|2 template
anchor_id = names_get (params, aliases_contributor) or -- get contributor, author, or editor names
names_get (params, aliases_author) or
vnames_get (params, 'vauthors') or -- |vauthors=
names_get (params, aliases_editor) or
vnames_get (params, 'veditors'); -- |veditors=
end
if anchor_id then -- if names were gotten
anchor_id = 'CITEREF' .. anchor_id .. date;
end
elseif ref:match ('%b{}') then -- ref holds a template
anchor_id = sfnref_get (ref); -- returns content of {{sfnref}} or {{harvid}}; nil else
elseif 'none' == ref and not redirects_patent[template_name] then -- |ref=none; not supported by cite patent
return nil; -- anchor id expicitly suppressed
else
anchor_id = ref; -- |ref=<text> may match an anchor id override value in {{harv}} template |ref= parameter
end
return anchor_id; -- anchor_id text; nil else
end
--[[--------------------------< L I S T _ A D D >--------------------------------------------------------------
adds an <item> to <list> table; for anchor IDs, the boolean <encode> argument must be set true; no return value
]]
local function list_add (item, list, encode)
if item then -- if there was an item
if encode then -- for anchor IDs ...
item = mw.uri.anchorEncode (item); -- encode to remove wikimarkup, convert spaces to underscores etc
end
if not list[item] then -- if not already saved
list[item] = 1; -- save it
else -- here when this item already saved
list[item] = list[item] + 1; -- to indicate that there are multiple items
end
end
end
--[[--------------------------< A N C H O R _ I D _ M A K E _ A N C H O R >------------------------------------
make anchor IDs from {{anchor}}; there may be more than one because {{anchor}} is not limited to the number of
anchors it may hold.
]]
local function anchor_id_make_anchor (template, anchor_id_list)
template = template:gsub ('^{{[^|]+|', ''):gsub ('}}$', '', 1); -- remove outer {{ and }} and template name
template = wikilink_strip (template); -- strip any wikilink markup (there shouldn't be any but just in case)
local params = {};
local anchor_id;
for param in template:gmatch ('%b{}') do -- loop through the template; remove and save templates (presumed to be sfnref or harvid)
table.insert (params, param); -- save it
template = template:gsub ('%b{}', '', 1); -- remove it from source template
end
for _, t in ipairs (params) do -- spin through the templates in params
anchor_id = sfnref_get (t); -- attempt to decode {{sfnref}} and {{harvid}}
if anchor_id then -- nil when not {{sfnref}} or {{harvid}}
list_add (anchor_id, anchor_id_list, true); -- add anchor ID to the list
end
end
template = template:gsub ('|%s*|', '|'); -- when pipe follows pipe with or without white space, remove extraneous pipe
template = template:gsub ('^|', ''):gsub('|$', ''); -- remove extraneous leading and trailing pipes
params = mw.text.split (template, '%s*|%s*'); -- split at the pipe and remove extraneous space characters
for _, t in ipairs (params) do -- spin through the anchor IDs
anchor_id = mw.text.trim (t); -- trim white space
if '' ~= anchor_id then -- should always have something
list_add (anchor_id, anchor_id_list, true); -- add anchor ID to the list
end
end
end
--[[--------------------------< T E M P L A T E _ L I S T _ A D D >--------------------------------------------
makes a list of templates use in the article.
]]
local function template_list_add (template)
local template = template:match ('{{%s*(.-)[|}]'); -- keep the case of the template - this is different from template_name_get()
if template and not template:match ('^#') then -- found a template or magic word; ignore magic words
template=mw.text.trim (template); -- trim whitespace
template = Lang_obj:ucfirst (template); -- first character in template name must be uppercase (same as canonical template name) TODO: better way to do this?
list_add (template, template_list); -- add to list with (unused) tally
end
end
--[[--------------------------< A N C H O R _ I D _ L I S T _ M A K E >----------------------------------------
makes a list of anchor ids from cs1|2, cs1|2-like, vcite xxx, harvc, anchor, wikicite templates
Because cs1|2 wrapper templates can, and often do, hide the author and date parameters inside the wrapper,
these parameters are not available in the article's wikisource so {{harv}}, {{sfn}}, and {{harvc}} templates that
link correctly to those wrapper templates will incorrectly show error messages. Use |ignore-err=yes in the {{harv}},
{{sfn}}, and {{harvc}} templates to supress the error message.
creates a list of templates used in the article for use with the whitelist
creates a list of article-local whitelisted anchor IDs from {{sfn whitelist}}
]]
local function anchor_id_list_make ()
article_content_get (); -- attempt to get this article's content
if '' == Article_content then -- when there is no article content
return ''; -- no point in continuing
end
local template; -- place to hold the template that we found
local template_name;
local anchor_id; -- place to hold an anchor id as it is extracted / decoded
local find_pattern = '%f[{]{{[^{]';
local tstart, tend = Article_content:find (find_pattern); -- find the first template; do not find template variables: {{{template var|}}}
while tstart do
template = Article_content:match ('%b{}', tstart); -- get the whole template
if not template then
break; -- template is nil for some reason (last template missing closing }} for example) so declare ourselves done
end
template_name = template_name_get (template); -- get first char uppercase trimmed template name; ignore subpages ~/new, ~/sandbox
template_list_add (template); -- add this template's name to the list
if data.known_templates_cs12 [template_name] then
anchor_id = anchor_id_make_cs12 (template); -- extract an anchor id from this template
list_add (anchor_id, anchor_id_list, true)
elseif data.known_templates_vcite [template_name] then
local ref = template:match ('|%s*ref%s*=%s*(%b{})'); -- first look for |ref={{sfnref}} or |ref={{harvid}} because we will strip templates from the vcite template
if ref then -- |ref={{template}}
anchor_id = sfnref_get (ref); -- returns content of {{sfnref}} or {{harvid}}; nil else
list_add (anchor_id, anchor_id_list, true);
else
local params = {};
template_params_get (template, params); -- build a table of template parameters and their values
anchor_id = params['ref']; -- when both set, vcite uses value from |ref=
if not anchor_id and params['harvid'] then
anchor_id = 'CITEREF' .. params['harvid']; -- in vcite, |harvid= auto-adds 'CITEREF' prefix to the value in |harvid=
end
list_add (anchor_id, anchor_id_list, true);
end
elseif data.known_templates_harvc [template_name] then
anchor_id = anchor_id_make_harvc (template); -- extract an anchor id from this template
list_add (anchor_id, anchor_id_list, true);
elseif data.known_templates_wikicite [template_name] then
local ref = template:match ('|%s*ref%s*=%s*(%b{})'); -- first look for |ref={{sfnref}} or |ref={{harvid}}
if ref then
anchor_id = sfnref_get (ref);
elseif template:match ('|%s*ref%s*=([^|}]+)') then
anchor_id = template:match ('|%s*ref%s*=([^|}]+)'); -- plain-text
elseif template:match ('|%s*id%s*=%s*(%b{})') then
ref = template:match ('|%s*id%s*=%s*(%b{})');
anchor_id = 'Reference-' .. sfnref_get (ref);
elseif template:match ('|%s*id%s*=([^|}]+)') then
anchor_id = 'Reference-' .. template:match ('|%s*id%s*=([^|}]+)'); -- plain-text
else
anchor_id = nil; -- no matches, ensure that anchor_id has no value
end
if anchor_id then
list_add (anchor_id, anchor_id_list, true);
end
elseif data.known_templates_anchor [template_name] then
anchor_id_make_anchor (template, anchor_id_list); -- extract anchor ids from this template if any
elseif data.known_templates_sfn_whitelist [template_name] then
template = template:gsub ('^{{[^|]+|', ''):gsub ('}}$', '', 1); -- remove outer {{ and }} and template name
template = mw.text.trim (template, '%s|'); -- trim leading trailing white space and pipes
template = mw.text.split (template, '%s*|%s*'); -- make a table of the template's parameters
for _, anchor_id in ipairs (template) do -- spin through this template's parameter
if '' ~= anchor_id and not article_whitelist[anchor_id] then
anchor_id = mw.uri.anchorEncode (anchor_id)
article_whitelist[anchor_id] = 1; -- add to the whitelist
end
end
elseif template_name and whitelist.wrapper_templates[template_name] then
anchor_id = anchor_id_make_wrapper (template); -- extract an anchor id from this template if possible
list_add (anchor_id, anchor_id_list, true);
elseif template_name and template_name:match ('^Cit[ea]') then -- not known, not known wrapper; last gasp, try as cs1-like
anchor_id = anchor_id_make_cs12 (template); -- extract an anchor id from this template if possible
list_add (anchor_id, anchor_id_list, true);
end
tstart, tend = Article_content:find (find_pattern, tend); -- search for another template; begin at end of last search
end
mw.logObject (anchor_id_list, 'anchor_id_list');
mw.logObject (template_list, 'template_list');
mw.logObject (article_whitelist, 'article_whitelist');
return anchor_id_list;
end
--[[--------------------------< E X P O R T E D _ T A B L E S >------------------------------------------------
]]
return {
anchor_id_list = anchor_id_list_make(), -- table of anchor ids available in this article
article_whitelist = article_whitelist, -- table of anchor ids with false-positive error message to be suppressed
template_list = template_list, -- table of templates used in this article
}
qmvza320ft2102zzdqtmgk3eugl71rq
Module:Footnotes/anchor id list/data
828
64016762
1117549671
958410539
2022-10-22T09:20:53Z
WOSlinker
3138265
use require('strict') instead of require('Module:No globals')
Scribunto
text/plain
-- copied from Module:Ref info/data - maybe overkill here?
-- for this application make lists from the redirect lists and force all template names first character uppercase
require('strict');
--[[--------------------------< C S 1 _ T E M P L A T E _ P A T T E R N S >------------------------------------
These are patterns for cs1 templates and their redirects. These patterns exclude redirects that are vcite-like
which redirects should be deleted because vcite is not cs1.
]]
local cs1_template_patterns = { -- lua patterns of the cannonical names and redirects
'[Cc]ite ar[Xx]iv', -- arXiv is the canonical name
'[Cc]ite ArXiv',
'[Cc]ite AV media', -- canonical
'[Cc]ite audio', '[Cc]ite AV', '[Cc]ite AV ?Media', '[Cc]ite av media',
'[Cc]ite cd', '[Cc]ite DVD', '[Cc]ite dvd', '[Cc]ite film',
'[Cc]ite image', '[Cc]ite media', '[Cc]ite movie',
'[Cc]ite music video', '[Cc]ite radio', '[Cc]ite song',
'[Cc]ite ?video', '[Cc]ite visual', '[Cc]ite You[Tt]ube',
'[Cc]ita vídeo', -- non-English redirect; TODO: tally separately?
'[Cc]ite AV media notes', -- canonical
'[Cc]ite album[ %-]notes', '[Cc]ite av media notes',
'[Cc]ite DVD[ %-]notes', '[Cc]ite dvd%-notes', '[Cc]ite liner notes',
'[Cc]ite music release notes', '[Ll]iner notes',
'[Cc]ite bio[Rr]xiv', -- bioRxiv is the canonical form
'[Cc]ite [Bb]ook', -- book is the canonical form
'[Bb]ook cite', '[Bb]ook reference', '[Bb]ook reference url',
'[Cc] book', '[Cc]it book', '[Cc]ite books', '[Cc]ite chapter',
'[Cc]ite ebook', '[Cc]ite manual', '[Cc]ite page',
'[Cc]ite publication', '[Cc]ite score',
'[Cc]ite work', '[Cc]ite%-?book',
'[Bb]okref', '[Cc]itace monografie', '[Cc]itar livro', -- non-English redirects; TODO: tally separately?
'[Cc]iteer boek', '[Oo]uvrage', '[Rr]ef%-llibre', '서적 인용',
'[Cc]ite citeseerx', -- canonical
'[Cc]ite conference', -- canonical
'[Cc]ita conferenza', '[Cc]ite proceedings', '[Cc]onference reference', -- cita conferenza is non-English; TODO: tally separately?
'[Cc]ite ?encyclopedia', -- cite encyclopedia is the canonical name
'[Cc]ite contribution', '[Cc]ite dic', '[Cc]ite dictionary',
'[Cc]ite encyclopaedia', '[Cc]ite encyclopædia', '[Ee]ncyclopedia',
'[Cc]ite [Ee]pisode', -- episode is the canonical form
'[Cc]ite show',
'[Cc]ite interview', -- canonical
'[Cc]ite ?journal', -- cite journal is the canonical form
'[Cc] journal', '[Cc]itation journal', '[Cc]ite abstract',
'[Cc]ite document', '[Cc]ite Journal', '[Cc]ite journal zh',
'[Cc]ite ?paper', '[Vv]cite2 journal',
'[Cc]ita pubblicazione', '[Cc]itace periodika', '[Cc]itar jornal', -- non-English redirects; TODO: tally separately?
'[Cc]itar publicació', '[Cc]ytuj pismo', '[Tt]idskriftsref',
'Навод из стручног часописа', '저널 인용',
'[Cc]ite [Mm]agazine', -- magazine is the canonical form
'[Cc]ite mag', '[Cc]ite magazine article', '[Cc]ite newsletter',
'[Cc]ite periodical',
'[Cc]ite mailing ?list', -- mailing list is the canonical form
'[Cc]ite list',
'[Cc]ite maps?', -- map is the canonical form
'[Cc]ite[ %-]?news', -- cite news is the canonical form
'[Cc] news', '[Cc]it news', '[Cc]itation news', '[Cc]ite article',
'[Cc]ite n', '[Cc]ite new', '[Cc]ite newspaper', '[Cc]ite News',
'[Cc]ite news%-q', '[Cc]ite news2', '[Cc]itenewsauthor', '[Cc]ute news',
'[Cc]itar notícia', '[Hh]aber kaynağı', '[Tt]idningsref', 'استشهاد بخبر', -- non-English redirects; TODO: tally separately?
'뉴스 인용',
'[Cc]ite newsgroup', -- canonical
'[Cc]ite usenet',
'[Cc]ite podcast', -- canonical
'[Cc]ite [Pp]ress release', -- press release is the canonical form
'[Cc]ite media release', '[Cc]ite news release', '[Cc]ite pr',
'[Cc]ite press', '[Cc]ite press release\.', '[Cc]ite press[%-]?release',
'[Cc]ite report', -- canonical
'[Cc]ite serial', -- canonical
'[Cc]ite sign', -- canonical
'[Cc]ite plaque',
'[Cc]ite speech', -- canonical
'[Cc]ite ssrn', -- canonical
'[Cc]ite SSRN',
'[Cc]ite tech ?report', -- techreport is the canonical form
'[Cc]ite standard', '[Cc]ite technical report', '[Tt]echrep reference',
'[Cc]ite thesis', -- canonical
'[Cc]ite dissertation',
'[Cc]itar tese', -- non-English redirect; TODO: tally separately?
'[Cc]ite [Ww]eb', -- web is the canonical form
'[Cc] web', '[Cc]it web', '[Cc]ite blog', '[Cc]ite URL', '[Cc]ite url',
'[Cc]ite w', '[Cc]ite wb', '[Cc]ite we', '[Cc]ite web\.',
'[Cc]ite webpage', '[Cc]ite website', '[Cc]ite website article',
'[Cc]ite%-?web', '[Cc]itweb', '[Cc]w', '[Rr]ef web', '[Ww]eb citation',
'[Ww]eb cite', '[Ww]eb link', '[Ww]eb[ %-]reference', '[Ww]eblink',
'[Cc]hú thích web', '[Cc]ita web', '[Cc]itace elektronické monografie', -- non-English redirects; TODO: tally separately?
'[Cc]itat web', 'مرجع ويب', 'یادکرد وب', '웹 인용',
}
--[[--------------------------< C S 2 _ T E M P L A T E _ P A T T E R N S >------------------------------------
These are patterns for cs2 templates redirects.
]]
local cs2_template_patterns = { -- lua patterns of the cannonical names and redirects
'[Cc]itation',
'[Cc]ite', '[Cc]ite citation', '[Cc]ite study',
'[Cc]ite [Tt]echnical standard',
}
--[[--------------------------< V C I T E _ T E M P L A T E _ P A T T E R N S >--------------------------------
These are patterns for Vcite-family templates and their redirects.
]]
local vcite_template_patterns = {
'[Vv]cite book', -- canonical
'[Vv]ancite book', '[Vv]ancite report', '[Vv]cite encyclopedia',
'[Vv]cite report',
'[Vv]cite journal', -- canonical
'[Cc]it journal', '[Cc]it paper', '[Vv]ancite journal', '[Vv]cite paper',
'[Vv]cite news', -- canonical
'[Vv]ancite news',
'[Vv]cite web', -- canonical
'[Vv]ancite web',
}
--[[--------------------------< H A R V C _ T E M P L A T E _ P A T T E R N S >--------------------------------
These are patterns for the harvc template and its redirects.
]]
local harvc_template_patterns = {
'[Hh]arvc', -- canonical
'[Cc]itec',
}
--[[--------------------------< C S 1 _ L I K E _ T E M P L A T E _ P A T T E R N S >--------------------------
These are patterns for miscellaneous templates and their redirects that 'look like' cs1 templates (begin with cite ...)
Because they 'look like' cs1 templates they are handled as if they were cs1 templates. These templates are NOT
wrapper templates; names and dates are always to be extracted from the article instantiation of the template.
]]
local cs1_like_template_patterns = {
'[Cc]ite LSA', -- canonical
}
--[[--------------------------< W I K I C I T E _ T E M P L A T E _ P A T T E R N S >--------------------------
These are patterns for the wikicite template and its redirects.
]]
local wikicite_template_patterns = {
'[Ww]ikicite', -- canonical
}
--[[--------------------------< A N C H O R _ T E M P L A T E _ P A T T E R N S >------------------------------
These are patterns for the anchor template and its redirects.
]]
local anchor_template_patterns = {
'[Aa]nchors?', -- anchor is canonical form
'[Aa]nchor for redirect',
'[Aa]nchro',
'[Aa]ncor',
}
--[[--------------------------< S F N _ W H I T E L I S T _ P A T T E R N S >----------------------------------
These are patterns for the anchor template and its redirects.
]]
local sfn_whitelist_patterns = {
'[Ss]fn whitelist', -- canonical
'[Hh]arv whitelist',
}
--[[--------------------------< K N O W N _ T E M P L A T E S >------------------------------------------------
These tables are created from the *_template_patterns tables. To make these tables, entries in the source tables
are evaluated to replace lua patterns with the appropriate characters to create names for the output tables.
First charqacter is always uppercase
For example:
[Cc]ite ar[Xx]iv
becomes
Cite arXiv
Cite arxiv
]]
local known_templates_cs12 = {}; -- the exported tables
local known_templates_vcite = {};
local known_templates_harvc = {};
local known_templates_wikicite = {};
local known_templates_anchor = {};
local known_templates_sfn_whitelist = {};
local function add_stripped (list, name)
if not list[name] then
list[name] = true;
end
end
local function pattern_convert (pattern, list)
local lead, tail, c, l, name;
local first_char_patterns = {
'^%[(%a)%a%]', -- leading character (usually uppercase)
'^%[%a(%a)%]', -- leading character (usually lowercase)
}
c = tostring (pattern:match ('%u')); -- tostring() required because I don't know why; lua chokes complaining that c is not a string
name = pattern:gsub ('^%[%a%a%]', c); -- replace bracketed first character [Xx] with selected character from the match
if name:match ('(.-)%[(%a)(%a)%](.*)') then -- mixed case optional letters
lead, c, l, tail = name:match ('(.-)%[(%a)(%a)%](.*)');
add_stripped (list, lead .. c .. tail); -- uppercase
add_stripped (list, lead .. l .. tail); -- lowercase
elseif name:match ('^([^%[]+)(%[ %%%-%]%?)(.+)$') then -- [ %-]?
lead, c, tail = name:match ('^([^%[]+)(%[ %%%-%]%?)(.+)$');
add_stripped (list, lead .. tail); -- neither char
add_stripped (list, lead .. ' ' .. tail); -- space
add_stripped (list, lead .. '-' .. tail); -- hyphen
elseif name:match ('^([^%[]+)(%[%%%-%]%?)(.+)$') then -- [%-]?
lead, c, tail = name:match ('^([^%[]+)(%[%%%-%]%?)(.+)$');
add_stripped (list, lead .. tail); -- no hyphen
add_stripped (list, lead .. '-' .. tail); -- hyphen
elseif name:match ('^([^%[]+)(%[ %%%-%])(.+)$') then -- [ %-]
lead, c, tail = name:match ('^([^%[]+)(%[ %%%-%])(.+)$');
add_stripped (list, lead .. ' ' .. tail); -- space
add_stripped (list, lead .. '-' .. tail); -- hyphen
elseif name:match ('^([^%?]+)(%%%-%?)(.+)$') then -- %-?
lead, c, tail = name:match ('^([^%?]+)(%%%-%?)(.+)$');
add_stripped (list, lead .. tail); -- no hyphen
add_stripped (list, lead .. '-' .. tail); -- hyphen
elseif name:match ('^(.-)(%%%-)(.+)$') then -- %-
lead, c, tail = name:match ('^(.-)(%%%-)(.+)$');
add_stripped (list, lead .. '-' .. tail); -- hyphen
elseif name:match ('^(.-)(.)%?(.*)$') then -- .?
lead, c, tail = name:match ('^(.-)(.)%?(.*)$');
add_stripped (list, lead .. tail); -- no character
add_stripped (list, lead .. c .. tail); -- character
else
add_stripped (list, name); -- no patterns so save as is
end
end
for _, t in ipairs ({
{cs1_template_patterns, known_templates_cs12},
{cs2_template_patterns, known_templates_cs12},
{cs1_like_template_patterns, known_templates_cs12},
{vcite_template_patterns, known_templates_vcite},
{harvc_template_patterns, known_templates_harvc},
{wikicite_template_patterns, known_templates_wikicite},
{anchor_template_patterns, known_templates_anchor},
{sfn_whitelist_patterns, known_templates_sfn_whitelist},
}) do
for _, pattern in ipairs (t[1]) do -- for each patern in *_template_patterns
pattern_convert (pattern, t[2]) -- convert and store in known_templates_*
end
end
--[[--------------------------< E X P O R T S >----------------------------------------------------------------
]]
return
{
known_templates_anchor = known_templates_anchor,
known_templates_cs12 = known_templates_cs12,
known_templates_harvc = known_templates_harvc,
known_templates_vcite = known_templates_vcite,
known_templates_wikicite = known_templates_wikicite,
known_templates_sfn_whitelist = known_templates_sfn_whitelist,
}
4vgg5jc78xnonnsru5c1cq8tc7ayxdk
Module:Footnotes/whitelist
828
63517642
1140410698
1140361481
2023-02-20T00:04:39Z
Renata3
320236
per talk
Scribunto
text/plain
--[[--------------------------< W R A P P E R _ T E M P L A T E _ D E F A U L T S >----------------------------
A list of wrapper templates by their canonical names – spelling and capitalization is important. Each wrapper
template has a table of two values: [1] is the wrapper's default name-list as it is used in an anchor ID; [2] is
the default year. This table is indexed indirectly through the wrapper_templates table.
This table is not available externally.
]]
local wrapper_template_defaults = { -- keys are canonical template names
['Americana'] = {'Rines', '1920'}, -- tables with default name and default year
['Cite EB1911'] = {'Chisholm', '1911'}, -- tables with default name and default year
['EB1911'] = {'Chisholm', '1911'},
['EI3'] = {'FleetKrämerMatringeNawas', ''},
['ODNB'] = {'', ''}, -- there is no default anchor ID; this forces evaluation of {{cite ODNB}} redirects
}
--[[--------------------------< W R A P P E R _ T E M P L A T E _ D E F A U L T S _ V O L >--------------------
For wrapper templates that use |volume= to specify default name (often editor names) and year. Wrapper templates
are indexed by their canonical names – spelling and capitalization is important. Each wrapper template has a table
of values for every volume. Volumes may be indexed by Arabic or Roman numerals. Each volume index has a table of
twp values" [1] is the wrapper's default name-list as it is used in an anchor ID; [2] is the default year. Each
wrapper template in this table must have a ['default'] key for those occasions when |volume= is omitted or empty.
This table is indexed indirectly through the wrapper_templates table.
This table is not available externally.
]]
local wrapper_template_defaults_vol = { -- primary keys are canonical template names; TODO: do these keys have to be canonical template names?
['Cite Catholic Encyclopedia'] = { -- secondary keys are volume
['1'] = {'Herbermann', '1907'},
['2'] = {'Herbermann', '1907'},
['3'] = {'Herbermann', '1908'},
['4'] = {'Herbermann', '1908'},
['5'] = {'Herbermann', '1909'},
['6'] = {'Herbermann', '1909'},
['7'] = {'Herbermann', '1910'},
['8'] = {'Herbermann', '1910'},
['9'] = {'Herbermann', '1910'},
['10'] = {'Herbermann', '1911'},
['11'] = {'Herbermann', '1911'},
['12'] = {'Herbermann', '1911'},
['13'] = {'Herbermann', '1912'},
['14'] = {'Herbermann', '1912'},
['15'] = {'Herbermann', '1912'},
['default'] = {'Herbermann', '1913'},
},
['Cite EB9'] = {
['1'] = {'Baynes', '1878'}, ['I'] = {'Baynes', '1878'},
['2'] = {'Baynes', '1878'}, ['II'] = {'Baynes', '1878'},
['3'] = {'Baynes', '1878'}, ['III'] = {'Baynes', '1878'},
['4'] = {'Baynes', '1878'}, ['IV'] = {'Baynes', '1878'},
['5'] = {'Baynes', '1878'}, ['V'] = {'Baynes', '1878'},
['6'] = {'Baynes', '1878'}, ['VI'] = {'Baynes', '1878'},
['7'] = {'Baynes', '1878'}, ['VII'] = {'Baynes', '1878'},
['8'] = {'Baynes', '1878'}, ['VIII'] = {'Baynes', '1878'},
['9'] = {'Baynes', '1879'}, ['IX'] = {'Baynes', '1879'},
['10'] = {'Baynes', '1879'}, ['X'] = {'Baynes', '1879'},
['11'] = {'BaynesSmith', '1880'}, ['XI'] = {'BaynesSmith', '1880'},
['12'] = {'BaynesSmith', '1881'}, ['XII'] = {'BaynesSmith', '1881'},
['13'] = {'BaynesSmith', '1881'}, ['XIII'] = {'BaynesSmith', '1881'},
['14'] = {'BaynesSmith', '1882'}, ['XIV'] = {'BaynesSmith', '1882'},
['15'] = {'BaynesSmith', '1883'}, ['XV'] = {'BaynesSmith', '1883'},
['16'] = {'BaynesSmith', '1883'}, ['XVI'] = {'BaynesSmith', '1883'},
['17'] = {'BaynesSmith', '1884'}, ['XVII'] = {'BaynesSmith', '1884'},
['18'] = {'BaynesSmith', '1885'}, ['XVIII'] = {'BaynesSmith', '1885'},
['19'] = {'BaynesSmith', '1885'}, ['XIX'] = {'BaynesSmith', '1885'},
['20'] = {'BaynesSmith', '1886'}, ['XX'] = {'BaynesSmith', '1886'},
['21'] = {'BaynesSmith', '1886'}, ['XXI'] = {'BaynesSmith', '1886'},
['22'] = {'BaynesSmith', '1887'}, ['XXII'] = {'BaynesSmith', '1887'},
['23'] = {'BaynesSmith', '1888'}, ['XXIII'] = {'BaynesSmith', '1888'},
['24'] = {'BaynesSmith', '1888'}, ['XXIV'] = {'BaynesSmith', '1888'},
['default'] = {'Baynes', '1875–1889'},
},
['Encyclopaedia of Islam, New Edition'] = {
['1'] = {'GibbKramersLévi-ProvençalSchacht', '1960'},
['2'] = {'LewisPellatSchacht', '1965'},
['3'] = {'LewisMénagePellatSchacht', '1971'},
['4'] = {'van_DonzelLewisPellatBosworth', '1978'},
['5'] = {'Bosworthvan_DonzelLewisPellat', '1986'},
['6'] = {'Bosworthvan_DonzelPellat', '1991'},
['7'] = {'Bosworthvan_DonzelHeinrichsPellat', '1993'},
['8'] = {'Bosworthvan_DonzelHeinrichsLecomte', '1995'},
['9'] = {'Bosworthvan_DonzelHeinrichsLecomte', '1997'},
['10'] = {'BearmanBianquisBosworthvan_Donzel', '2000'},
['11'] = {'BearmanBianquisBosworthvan_Donzel', '2002'},
['12'] = {'BearmanBianquisBosworthvan_Donzel', '2004'},
['atlas'] = {'Brice', '1981'},
['abridged'] = {'van_Donzel', '1994'},
['default'] = {'BearmanBianquisBosworthvan_Donzel', '1960–2005'},
},
['New Cambridge Medieval History'] = {
['1'] = {'Fouracre', '2005'},
['2'] = {'McKitterick', '1995'},
['3'] = {'Reuter', '2000'},
['4a'] = {'LuscombeRiley-Smith', '2004'},
['4b'] = {'LuscombeRiley-Smith', '2004'},
['5'] = {'Abulafia', '1999'},
['6'] = {'Jones', '2000'},
['7'] = {'Allmand', '1998'},
['default'] = {'', '1995–2005'},
},
['The History of al-Tabari'] = {
['1'] = {'Rosenthal', '1989'},
['2'] = {'Brinner', '1986'},
['3'] = {'Brinner', '1991'},
['4'] = {'Perlmann', '1987'},
['5'] = {'Bosworth', '1999'},
['6'] = {'WattMcDonald', '1989'},
['7'] = {'McDonald', '1987'},
['8'] = {'Fishbein', '1997'},
['9'] = {'Poonawala', '1990'},
['10'] = {'Donner', '1993'},
['11'] = {'Blankinship', '1993'},
['12'] = {'Friedmann', '1992'},
['13'] = {'Juynboll', '1989'},
['14'] = {'Smith', '1994'},
['15'] = {'Humphreys', '1990'},
['16'] = {'Brockett', '1997'},
['17'] = {'Hawting', '1996'},
['18'] = {'Morony', '1987'},
['19'] = {'Howard', '1990'},
['20'] = {'Hawting', '1989'},
['21'] = {'Fishbein', '1990'},
['22'] = {'Rowson', '1989'},
['23'] = {'Hinds', '1990'},
['24'] = {'Powers', '1989'},
['25'] = {'Blankinship', '1989'},
['26'] = {'Hillenbrand', '1989'},
['27'] = {'Williams', '1985'},
['28'] = {'McAuliffe', '1995'},
['29'] = {'Kennedy', '1990'},
['30'] = {'Bosworth', '1989'},
['31'] = {'Fishbein', '1992'},
['32'] = {'Bosworth', '1987'},
['33'] = {'Bosworth', '1991'},
['34'] = {'Kraemer', '1989'},
['35'] = {'Saliba', '1985'},
['36'] = {'Waines', '1992'},
['37'] = {'Fields', '1987'},
['38'] = {'Rosenthal', '1985'},
['39'] = {'Landau-Tasseron', '1998'},
['40'] = {'Popovkin', '2007'},
['default'] = {'Yarshater', '1985–2007'},
},
}
--[[--------------------------< W R A P P E R _ T E M P L A T E S >--------------------------------------------
A list of wrapper templates and their redirects – spelling and capitalization is important; first character is
always uppercase. Each wrapper template gets its value from a k/v pair in the wrapper_template_defaults table.
article reader queries this table to see if template_name is a wrapper template
]]
local wrapper_templates = { -- keys are names of wrapper templates and their redirects
['Americana'] = wrapper_template_defaults['Americana'], -- canonical name; this template calls Cite Americana
['Catholic Encyclopedia'] = wrapper_template_defaults_vol['Cite Catholic Encyclopedia'],
['1913Catholic'] = wrapper_template_defaults_vol['Cite Catholic Encyclopedia'],
['Catholic'] = wrapper_template_defaults_vol['Cite Catholic Encyclopedia'],
['Catholic encyclopedia'] = wrapper_template_defaults_vol['Cite Catholic Encyclopedia'],
['CatholicEncyclopedia'] = wrapper_template_defaults_vol['Cite Catholic Encyclopedia'],
['CE13'] = wrapper_template_defaults_vol['Cite Catholic Encyclopedia'],
['CE1913'] = wrapper_template_defaults_vol['Cite Catholic Encyclopedia'],
['Cite Americana'] = wrapper_template_defaults['Americana'], -- canonical name
['Cite Catholic Encyclopedia'] = wrapper_template_defaults_vol['Cite Catholic Encyclopedia'],
['CathEncy'] = wrapper_template_defaults_vol['Cite Catholic Encyclopedia'],
['Cite Catholic Encyclopædia'] = wrapper_template_defaults_vol['Cite Catholic Encyclopedia'],
['Cite CE1913'] = wrapper_template_defaults_vol['Cite Catholic Encyclopedia'],
['Cite EB1911'] = wrapper_template_defaults['Cite EB1911'], -- canonical name
['1911EB'] = wrapper_template_defaults['Cite EB1911'], -- redirects
['EB1911 cite'] = wrapper_template_defaults['Cite EB1911'],
['Wikisource1911Enc Citation'] = wrapper_template_defaults['Cite EB1911'],
['Wikisource1911Enc citation'] = wrapper_template_defaults['Cite EB1911'],
['Cite EB9'] = wrapper_template_defaults_vol['Cite EB9'], -- canonical
['Eb9'] = wrapper_template_defaults_vol['Cite EB9'],
['Cite ODNB'] = wrapper_template_defaults['ODNB'], -- canonical
['Cite odnb'] = wrapper_template_defaults['ODNB'],
['DNBweb'] = wrapper_template_defaults['ODNB'],
['OBDNweb'] = wrapper_template_defaults['ODNB'],
['ODNB'] = wrapper_template_defaults['ODNB'],
['ODNBref'] = wrapper_template_defaults['ODNB'],
['ODNBweb'] = wrapper_template_defaults['ODNB'],
['EB1911'] = wrapper_template_defaults['EB1911'], -- canonical name; this template calls Cite EB1911
['1911'] = wrapper_template_defaults['EB1911'], -- redirects
['1911s'] = wrapper_template_defaults['EB1911'],
['Britannica 1911'] = wrapper_template_defaults['EB1911'],
['Encyclopedia Britannica 1911'] = wrapper_template_defaults['EB1911'],
['Encyclopædia Britannica 1911'] = wrapper_template_defaults['EB1911'],
['EB9'] = wrapper_template_defaults_vol['Cite EB9'], -- canonical; this template calls Cite EB9
['Encyclopaedia of Islam, New Edition'] = wrapper_template_defaults_vol['Encyclopaedia of Islam, New Edition'], -- canonical
['EI2'] = wrapper_template_defaults_vol['Encyclopaedia of Islam, New Edition'],
['Encyclopaedia of Islam, THREE'] = wrapper_template_defaults['EI3'], -- canonical
['EI3'] = wrapper_template_defaults['EI3'],
['New Cambridge Medieval History'] = wrapper_template_defaults_vol['New Cambridge Medieval History'], -- canonical
['The History of al-Tabari'] = wrapper_template_defaults_vol['The History of al-Tabari'], -- canonical
['The History of Al-Tabari'] = wrapper_template_defaults_vol['The History of al-Tabari'], -- redirects
['The History of al-Ṭabarī'] = wrapper_template_defaults_vol['The History of al-Tabari'], -- redirects
}
--[[--------------------------< T E M P L A T E _ N A M E S >--------------------------------------------------
This table holds the names of templates and the names of their redirects. Template names must be written exactly
as they are named at their templatespace page. This same also applies to redirects.
The indexes in this table are not critical but should be short and concise.
]]
local template_names = {
['ADB'] = {'Allgemeine Deutsche Biographie', 'Cite ADB'},
['Butt_Stations'] = {'Butt-Stations', 'Butt-stations'},
['Cam_Hist_Iran'] = {'Cambridge History of Iran', 'The Cambridge History of Iran'},
['DNB'] = {'Cite DNB', 'DNB', 'DNB Cite', 'Cite DNBSupp', 'DNBSupp', 'Cite DNB12', 'Cite DNBIE', 'DNB12', 'DNBIE', 'DNBfirst'},
['ME-ref'] = {'ME-ref', 'Me-ref'},
['ODB'] = {'ODB', 'Oxford Dictionary of Byzantium'},
['ODLA'] = {'ODLA', 'Oxford Dictionary of Late Antiquity'},
['NDB'] = {'Cite NDB', 'NDB'},
['Iranica'] = {'Encyclopædia Iranica Online', 'Encyclopædia Iranica', 'Encyclopaedia Iranica', 'Cite Encyclopædia Iranica Online'},
}
--[[--------------------------< S P E C I A L _ P A T T E R N S >----------------------------------------------
Lua patterns. These are scanned sequentially which costs time and processing far and above the time and processing
needed to index into whitelist{}. Do not create a pattern here if a normal whitelist entry or entries can be created.
]]
local special_patterns = {
'CITEREFACAD%u%u%u?%u?%d+%u%u?', -- {{Acad}} ID appears to be 2-4 letters, then 3 numbers, then 1-2 letters
'CITEREFAHD%d+', -- {{Cite AHD}}
'CITEREFHistoric_England%d+', -- {{National Heritage List for England}} & {{PastScape}}
'CITEREFHistoric_Environment_Scotland%u%u%u?%u?%d', -- {{Historic Environment Scotland}} %u can be BTL, GLD, HMPA, LB, SM
'CITEREFQHR%d+', -- {{Cite QHR}}
'CITEREF[%d%a_%pöüäß→]+_at_Bach_Digital', -- {{BDh}}
'CITEREF[BR]GBl_[12]%d%d%d%-?I?I?%/%d+', -- {{Cite Austrian gazette}}
'CITEREFStGBl_[12]%d%d%d%/%d+', -- {{Cite Austrian gazette}}
'CITEREFGBlÖ_[12]%d%d%d%/%d+', -- {{Cite Austrian gazette}}
}
--[[--------------------------< D N B _ S P E C I A L _ P A T T E R N S >--------------------------------------
Lua patterns. Note at special_patterns applies. These for the DNB templates only; these will be tried only when
there is a DNB template in the article.
Pretty much any author name during the period 1885–1901 inclusive, and 1912.
The DNBIE was published in 1903, and Template:DNBIE says that its use is deprecated, but we do not fight that battle here.
]]
local DNB_special_patterns = {
'CITEREF%a[%a%-_\']*188[5-9]', -- 1885–1889
'CITEREF%a[%a%-_\']*189%d', -- 1890–1899
'CITEREF%a[%a%-_\']*190[0-1]', -- 1900–1901
'CITEREF%a[%a%-_\']*1903', -- 1903 IE
'CITEREF%a[%a%-_\']*1912', -- 1912 supplement
}
--[[--------------------------< W H I T E L I S T >------------------------------------------------------------
This is a list of anchor IDs known to be associated with specific wrapper templates. The anchor ID serves as an
index into the table. The assigned value is another table that lists the associated template and any redirects.
Except for year disambiguators, anchor IDs must have the same form as the anchor creator makes; must be the
anchor-encoded form. Remove the year disambiguator.
Template names must be written exactly as they are named at their templatespace page. This same also applies to
redirects. Module:Footnotes reads the template names left to right so most-commonly-used template or redirect name
should appear first. When there are more than one name and when those templates have various anchor IDs the template
namelist should be added to the template_names{} table.
Note that references to Template:EB1911 are listed under "E" in the alphabetical list below to keep them organized.
]]
local whitelist = {
----------< # >----------
['CITEREF2013_Statistical_Yearbook_of_the_Republic_of_Croatia'] = {'Croatia Yearbook 2013'},
----------< A >----------
['CITEREFAGA_1884–1897'] = {'Schubert\'s compositions (references)'},
['CITEREFATOC2009'] = {'ATOCConnectingCommunitiesReportS10'},
['CITEREFAbaevBailey1985'] = template_names['Iranica'],
['CITEREFAbbas1988'] = template_names['Iranica'],
['CITEREFAbbas1989'] = template_names['Iranica'],
['CITEREFAbramowitzStegun1983'] = {'Abramowitz Stegun ref'},
['CITEREFActa_Lipsiensium1723'] = {'Bach\'s compositions (sources)'},
['CITEREFAdamsFranzosa2009'] = {'Adams Franzosa Introduction to Topology Pure and Applied'},
['CITEREFAdaschErnstKeim1978'] = {'Adasch Topological Vector Spaces'},
['CITEREFAffleck1978'] = {'Affleck-On Track'},
['CITEREFAhlgrimm1969'] = {'Bach\'s compositions (sources)'},
['CITEREFAhmadiNegahban2013'] = {'Encyclopaedia Islamica'},
['CITEREFAhrons1927'] = {'Book-Ahrons-British Steam Railway Locomotive'},
['CITEREFAl-Kindi1912'] = {'The Governors and Judges of Egypt'},
['CITEREFAlbert_Schumann1886'] = {'Cite ADB'},
['CITEREFAlden1916'] = {'Shakespeare sonnets bibliography'},
['CITEREFAldrich1969'] = {'Aldrich-LocosGER7'},
['CITEREFAleksidze2018'] = template_names['ODLA'],
['CITEREFAlexiou2010'] = {'Cite flatiron'},
['CITEREFAlgar1983'] = template_names['Iranica'],
['CITEREFAlgar1989'] = template_names['Iranica'],
['CITEREFAlgar1990'] = template_names['Iranica'],
['CITEREFAlgar2003'] = template_names['Iranica'],
['CITEREFAlizadeh1990'] = template_names['Iranica'],
['CITEREFAllamaniPanagiotopoulou1978'] = {'Ιστορία του Ελληνικού Έθνους'},
['CITEREFAllcockDaviesle_FlemingMaskelyne1968'] = {'RCTS-LocosGWR-1'},
['CITEREFAllenBoddyBrownFry1970'] = {'RCTS-LocosLNER-8A'},
['CITEREFAllenBoddyBrownFry1971'] = {'RCTS-LocosLNER-8B'},
['CITEREFAllenBoddyBrownFry1983'] = {'RCTS-LocosLNER-8A'},
['CITEREFAmanat1998'] = template_names['Iranica'],
['CITEREFAmanat1999'] = template_names['Iranica'],
['CITEREFAmbartsumian2014'] = template_names['Iranica'],
['CITEREFAmerican_Railway_Association1922'] = {'1922 Locomotive Cyclopedia'},
['CITEREFAnderson1952'] = {'Naval Wars in the Levant 1559–1853'},
['CITEREFAndo2000'] = template_names['Iranica'],
['CITEREFAngelov2018'] = template_names['ODLA'],
['CITEREFAnwārEIr1985'] = template_names['Iranica'],
['CITEREFArkhangel'skiiPonomarev1984'] = {'Arkhangel\'skii Ponomarev Fundamentals of General Topology Problems and Exercises'},
['CITEREFArrey_von_Dommer1875'] = {'Cite ADB'},
['CITEREFAshraf2006'] = template_names['Iranica'],
['CITEREFAslanianBerberian2009'] = template_names['Iranica'],
['CITEREFAsmus1966'] = template_names['NDB'],
['CITEREFAsmussen1985'] = template_names['Iranica'],
['CITEREFAspreas1929'] = {'Great Military and Naval Encyclopaedia'},
['CITEREFAtkins2007'] = {'Shakespeare sonnets bibliography'},
['CITEREFAube2011'] = template_names['Iranica'],
['CITEREFAudiKondevWangHuang2017'] = {'NUBASE2016'},
['CITEREFAvdoyan2018'] = template_names['ODLA'],
['CITEREFAwdry1990'] = {'Awdry-RailCo', 'Carnarvonshire Railway'},
['CITEREFAzarnoosh2021'] = template_names['Iranica'],
['CITEREFRamelli2018'] = {'Oxford Dictionary of Late Antiquity'},['CITEREFA_History_of_the_Crusades'] = {'Setton-A History of the Crusades'},
----------< B >----------
['CITEREFBabinger1962'] = {'DBI', 'Dizionario Biografico degli Italiani'},
['CITEREFBabinger1978'] = {'Mehmed the Conqueror and His Time'},
['CITEREFBabinger1992'] = {'Mehmed the Conqueror and His Time'},
['CITEREFBachAgricola1754'] = {'Bach\'s compositions (sources)'},
['CITEREFBadura-SkodaBranscombe2008'] = {'Schubert\'s compositions (references)'},
['CITEREFBahramianHirtensteinGholami2013'] = {'Encyclopaedia Islamica'},
['CITEREFBalcer1990'] = template_names['Iranica'],
['CITEREFBaldwin1969'] = {'Setton-A History of the Crusades'},
['CITEREFBaldwin1985'] = {'Setton-A History of the Crusades'},
['CITEREFBaldwinKazhdan1991'] = template_names['ODB'],
['CITEREFBaldwinTalbot1991'] = template_names['ODB'],
['CITEREFBaltzer1916'] = {'Baltzer-Kolonialbahnen'},
['CITEREFBanach1932'] = {'Banach Théorie des Opérations Linéaires'},
['CITEREFBandy2021'] = template_names['Iranica'],
['CITEREFBartusis1991'] = template_names['ODB'],
['CITEREFBaxter1971'] = {'Baxter-BritishLocoCat1'},
['CITEREFBaxter1977'] = {'Baxter-BritishLocoCat1'},
['CITEREFBaxter1978'] = {'Baxter-BritishLocoCat2A'},
['CITEREFBaxter1979'] = {'Baxter-BritishLocoCat2B'},
['CITEREFBaxter1982'] = {'Baxter-BritishLocoCat3A', 'Baxter-BritishLocoCat3B'},
['CITEREFBaxter1984'] = {'Baxter-BritishLocoCat4'},
['CITEREFBaxter1986'] = {'Baxter-BritishLocoCat5A'},
['CITEREFBaxter1988'] = {'Baxter-BritishLocoCat5B'},
['CITEREFBaxter2012'] = {'Baxter-BritishLocoCat6'},
['CITEREFBeattie1986'] = template_names['Iranica'],
['CITEREFBeißwenger1991'] = {'Bach\'s compositions (sources)'},
['CITEREFBek2001'] = {'Cite Grove'},
['CITEREFBelke1996'] = {'Tabula Imperii Byzantini'},
['CITEREFBelkeMersisch1990'] = {'Tabula Imperii Byzantini'},
['CITEREFBelkeRestle1984'] = {'Tabula Imperii Byzantini'},
['CITEREFBellini2008'] = {'DBI', 'Dizionario Biografico degli Italiani'},
['CITEREFBernardini2003'] = template_names['Iranica'],
['CITEREFBernhard_von_Poten1889'] = template_names['ADB'],
['CITEREFBernhard_von_Poten1898'] = template_names['ADB'],
['CITEREFBernjian2008'] = {'Encyclopaedia Islamica'},
['CITEREFBezilla1980'] = {'Bezilla-PRR-Electric-Traction'},
['CITEREFBianquis1998'] = {'The Cambridge History of Egypt', 'Cambridge History of Egypt'},
['CITEREFBickerman1983'] = template_names['Cam_Hist_Iran'],
['CITEREFBierstedt1988'] = {'Bierstedt An Introduction to Locally Convex Inductive Limits'},
['CITEREFBiran2009'] = template_names['Iranica'],
['CITEREFBirken1976'] = {'Die Provinzen des Osmanischen Reiches'},
['CITEREFBivar1983'] = template_names['Cam_Hist_Iran'],
['CITEREFBivar2003'] = template_names['Iranica'],
['CITEREFBlair2002'] = template_names['Iranica'],
['CITEREFBlair2021'] = template_names['Iranica'],
['CITEREFBlake1966'] = {'DisraeliRef'},
['CITEREFBlanken2019'] = {'Bach\'s compositions (sources)'},
['CITEREFBlankinship1994'] = {'The End of the Jihâd State', 'The End of the Jihad State'},
['CITEREFBlautSchulze2008'] = {'Bach\'s compositions (sources)'},
['CITEREFBloom2007'] = {'Cite Routledge Broadway', 'Cite Broadway Routledge', 'Cite Routledge Guide to Broadway', 'Routledge Guide to Broadway'},
['CITEREFBock1978'] = {'Audie-bock-directors'},
['CITEREFBoddyBrownFryHennigan1968'] = {'RCTS-LocosLNER-4'},
['CITEREFBoddyBrownFryHennigan1975'] = {'RCTS-LocosLNER-2B'},
['CITEREFBoddyBrownFryHennigan1977'] = {'RCTS-LocosLNER-9A', 'RCTS-LocosLNER-9B'},
['CITEREFBoddyBrownFryHennigan1979'] = {'RCTS-LocosLNER-3A'},
['CITEREFBoddyBrownHenniganHoole1984'] = {'RCTS-LocosLNER-6C'},
['CITEREFBoddyBrownHenniganNeve1981'] = {'RCTS-LocosLNER-3B'},
['CITEREFBoddyBrownNeveYeadon1983'] = {'RCTS-LocosLNER-6B'},
['CITEREFBoddyFryHenniganHoole1990'] = {'RCTS-LocosLNER-10B'},
['CITEREFBoddyFryHenniganProud1963'] = {'RCTS-LocosLNER-1'},
['CITEREFBoddyNeveTeeYeadon1982'] = {'RCTS-LocosLNER-6A'},
['CITEREFBoddyNeveYeadon1973'] = {'RCTS-LocosLNER-2A'},
['CITEREFBody1989'] = {'Body-Railways-Vol2'},
['CITEREFBon1969'] = {'La Morée franque'},
['CITEREFBonebakker1997'] = template_names['Iranica'],
['CITEREFBonner2010'] = {'New Cambridge History of Islam'},
['CITEREFBonnett2005'] = {'Bonnett Practical Rail Engineering'},
['CITEREFBonporti1712'] = {'Bach\'s compositions (sources)'},
['CITEREFBooth2000'] = {'Shakespeare sonnets bibliography'},
['CITEREFBorsari1964'] = {'DBI', 'Dizionario Biografico degli Italiani'},
['CITEREFBossert1914'] = {'Schaff-Herzog'},
['CITEREFBosworth1968'] = template_names['Cam_Hist_Iran'],
['CITEREFBosworth1975'] = template_names['Cam_Hist_Iran'],
['CITEREFBosworth1983'] = template_names['Iranica'],
['CITEREFBosworth1984'] = template_names['Iranica'],
['CITEREFBosworth1987'] = template_names['Iranica'],
['CITEREFBosworth1988'] = template_names['Iranica'],
['CITEREFBosworth1989'] = template_names['Iranica'],
['CITEREFBosworth1994'] = template_names['Iranica'],
['CITEREFBosworth1995'] = template_names['Iranica'],
['CITEREFBosworth1997'] = template_names['Iranica'],
['CITEREFBosworth1998'] = template_names['Iranica'],
['CITEREFBosworth2000'] = template_names['Iranica'],
['CITEREFBosworth2001'] = template_names['Iranica'],
['CITEREFBosworth2002'] = template_names['Iranica'],
['CITEREFBosworth2003'] = template_names['Iranica'],
['CITEREFBosworth2008'] = template_names['Iranica'],
['CITEREFBosworth2009'] = template_names['Iranica'],
['CITEREFBosworth2010'] = template_names['Iranica'],
['CITEREFBosworth2011'] = template_names['Iranica'],
['CITEREFBosworthCrane1984'] = template_names['Iranica'],
['CITEREFBottoMitchell2002'] = {'Cite ATT Broadway', 'Cite At This Theatre Broadway', 'Cite Broadway At This Theatre', 'Cite Broadway ATT'},
['CITEREFBourbaki1987'] = {'Bourbaki Topological Vector Spaces'},
['CITEREFBourbaki1989'] = {'Bourbaki General Topology Part I Chapters 1-4', 'Bourbaki General Topology Part II Chapters 5-10', 'Bourbaki Algebra I Chapters 1-3 Springer'},
['CITEREFBourbaki1994'] = {'Bourbaki EHM'},
['CITEREFBowen1928'] = {'The Life and Times of Ali ibn Isa'},
['CITEREFBowmanCameronGarnsey2005'] = {'Cambridge Ancient History'},
['CITEREFBoyce1983'] = template_names['Iranica'],
['CITEREFBoyce1986'] = template_names['Iranica'],
['CITEREFBoyce1989'] = template_names['Iranica'],
['CITEREFBoyce2000'] = template_names['Iranica'],
['CITEREFBoyce2009'] = template_names['Iranica'],
['CITEREFBoyd1970'] = {'Boyd-MidWales'},
['CITEREFBoyd1975'] = {'Boyd-FR1'},
['CITEREFBoyd1985'] = {'Boyd-NCaerns2Penrhyn'},
['CITEREFBoyd1986'] = {'Boyd-NCaerns3Dinorwic'},
['CITEREFBoyd1988'] = {'Boyd-SCaerns1'},
['CITEREFBoyd1989'] = {'Boyd-SCaerns2'},
['CITEREFBoyd1990'] = {'Boyd-NCaerns1'},
['CITEREFBradshaw1968'] = {'Bradshaw-1910April'},
['CITEREFBradshaw1985'] = {'Bradshaw-1922July'},
['CITEREFBradshaw2011'] = {'Bradshaw-1895December'},
['CITEREFBradshaw2012'] = {'Bradshaw-1850March'},
['CITEREFBrand1968'] = {'Byzantium Confronts the West'},
['CITEREFBrand1991'] = {'DBI', 'ODB', 'Oxford Dictionary of Byzantium'},
['CITEREFBray2010'] = {'Bray-SDJR'},
['CITEREFBrett2010'] = {'New Cambridge History of Islam'},
['CITEREFBriant1985'] = template_names['Iranica'],
['CITEREFBrosius2000'] = template_names['Iranica'],
['CITEREFBrown2000'] = template_names['Iranica'],
['CITEREFBrown2008'] = {'The Cambridge History of the Byzantine Empire'},
['CITEREFBrunner1975'] = template_names['Cam_Hist_Iran'],
['CITEREFBrunner1983'] = template_names['Cam_Hist_Iran'],
['CITEREFBrunner1984'] = template_names['Iranica'],
['CITEREFBrunner1986'] = template_names['Iranica'],
['CITEREFBryan1886'] = {'Bryan (3rd edition)'},
['CITEREFBryan1889'] = {'Bryan (3rd edition)'},
['CITEREFBuhle1909'] = {'Bach\'s compositions (sources)'},
['CITEREFBulliet1984'] = template_names['Iranica'],
['CITEREFBulookbashiNegahban2008'] = {'Encyclopaedia Islamica'},
['CITEREFBunbury1857'] = {'DGRG'},
['CITEREFBurant1987'] = {'Cite DCB'},
['CITEREFBurch1911'] = {'Burch Electric Traction'},
['CITEREFBurke1866'] = {'O\'Donnell family tree'},
['CITEREFBurn1985'] = template_names['Cam_Hist_Iran'],
['CITEREFBurrowsWallace1999'] = {'Cite gotham'},
['CITEREFBury1911'] = {'The Imperial Administrative System of the Ninth Century'},
['CITEREFBusse1975'] = template_names['Cam_Hist_Iran'],
['CITEREFBusse1982'] = template_names['Iranica'],
['CITEREFButcherNicholson2018'] = template_names['ODLA'],
['CITEREFButt1995'] = template_names['Butt_Stations'],
['CITEREFBöwering1995'] = template_names['Iranica'],
['CITEREFBürgelMottahedeh1988'] = template_names['Iranica'],
----------< C >----------
['CITEREFCIC1983'] = {'CIC1983bib'},
['CITEREFCalifornia1988'] = {'CA-Rail Passenger Development Plan-1988'},
['CITEREFCalmard1988'] = template_names['Iranica'],
['CITEREFCalmard1999'] = template_names['Iranica'],
['CITEREFCaltrans1984'] = {'Countrystudy'},
['CITEREFCameronWard-PerkinsWhitby2000'] = {'Cambridge Ancient History'},
['CITEREFCanepa2018'] = template_names['ODLA'],
['CITEREFCanny2008'] = {'O\'Donnell family tree'},
['CITEREFCappelCutlerKazhdan1991'] = template_names['ODB'],
['CITEREFCarl_von_Prantl1879'] = {'Cite ADB'},
['CITEREFCarlson2010'] = {'Dlmf'},
['CITEREFCaro1974'] = {'Cite Power Broker'},
['CITEREFCarpenter1977'] = template_names['ME-ref'],
['CITEREFCarpenter1981'] = template_names['ME-ref'],
['CITEREFCarra_de_VauxHodgson1965'] = {'EI2'},
['CITEREFCarter2006'] = {'Carter-RailwaysMotivePowerArgentina'},
['CITEREFCasserley1968'] = {'Casserley-joint'},
['CITEREFCasserleyJohnston1966'] = {'Casserley-LocoGrouping3'},
['CITEREFCasserleyJohnston1974'] = {'Casserley-LocoGrouping3', 'Casserley-LocoGrouping2', '0-7110-0554-0'},
['CITEREFCasway1984'] = {'O\'Donnell family tree'},
['CITEREFCavanna_Ciappina2001'] = {'DBI'},
['CITEREFCawley2001'] = {'Medieval Lands by Charles Cawley', 'MLCC'},
['CITEREFCawley2001'] = {'Medieval Lands by Charles Cawley'},
['CITEREFCawley2010'] = {'MLCC'},
['CITEREFCawley2011'] = {'MLCC'},
['CITEREFChaléardChanson-JabeurBéranger2006'] = {'Chaléard-Le cdf en Afrique'},
['CITEREFChambers1728'] = {'Cyclopaedia 1728'},
['CITEREFChasiotis1975'] = {'Ιστορία του Ελληνικού Έθνους'},
['CITEREFChaumont1985'] = template_names['Iranica'],
['CITEREFChaumont1986'] = template_names['Iranica'],
['CITEREFChaumont1987'] = template_names['Iranica'],
['CITEREFChaumont1990'] = template_names['Iranica'],
['CITEREFChaumontSchippmann1988'] = template_names['Iranica'],
['CITEREFCheyneBlack1899'] = {'Biblica', 'Cite Biblica'},
['CITEREFCheyneBlack1899–1903'] = {'Cite Biblica'},
['CITEREFCheyneBlack1901'] = {'Cite Biblica'},
['CITEREFCheyneBlack1902'] = {'Cite Biblica'},
['CITEREFCheyneBlack1903'] = {'Cite Biblica'},
['CITEREFChisholm1922'] = {'EB1922', 'Cite EB1922'},
['CITEREFChittick1997'] = template_names['Iranica'],
['CITEREFChkeidze2001'] = template_names['Iranica'],
['CITEREFChoniates1984'] = {'O City of Byzantium'},
['CITEREFChrista_Jost1999'] = template_names['NDB'],
['CITEREFChung1994'] = {'Country study'},
['CITEREFChurchmanHurst2001'] = {'Churchman & Hurst Railways of New Zealand'},
['CITEREFChurchman_&_Hurst2001'] = {'Churchman & Hurst Railways of New Zealand'},
['CITEREFChurella2013'] = {'Churella-PRR-1'},
['CITEREFClementsMcMahon2008'] = {'ClementsMcMahon-GSR Locomotives'},
['CITEREFClinker1978'] = {'Clinker-Stations'},
['CITEREFClinker1988'] = {'Clinker-Stations'},
['CITEREFCoates1990'] = {'Coates-Reading'},
['CITEREFColbyWilliams1916'] = {'New International Encyclopedia', 'NIE'},
['CITEREFColledgeWarlow2006'] = {'Colledge', 'Cite Colledge2006'},
['CITEREFColledgeWarlow2010'] = {'Cite Colledge2010'},
['CITEREFCollins2016'] = {'Cite Collins 2016'},
['CITEREFConolly1998'] = {'IanAllan-PreGroup-Atlas1998'},
['CITEREFConway1990'] = {'Conway A Course in Functional Analysis'},
['CITEREFCosentino2008'] = {'DBI'},
['CITEREFCoulthard-Clark2002'] = {'Australian Dictionary of Biography'},
['CITEREFCousin1910'] = {'A Short Biographical Dictionary of English Literature', 'Cite SBDEL'},
['CITEREFCox1967'] = {'Cox-Upper Darby'},
['CITEREFCox2011'] = {'Cox-Dixie'},
['CITEREFCrevier1993'] = {'Crevier 1993'},
['CITEREFCrockett2007'] = {'Australian Dictionary of Biography'},
['CITEREFCroke2018'] = template_names['ODLA'],
['CITEREFCrone1980'] = {'Slaves on Horses'},
['CITEREFCronin2011'] = template_names['Iranica'],
['CITEREFCroughtonKidnerYoung1982'] = {'Croughton-PrivateStations'},
['CITEREFCruickshanks1970'] = {'HistoryofParliament'},
['CITEREFCudahy2002'] = {'Cudahy-Hudson'},
['CITEREFCudahy2003'] = {'Cudahy-Subways'},
['CITEREFCurta2006'] = {'Southeastern Europe in the Middle Ages, 500–1250'},
----------< D >----------
['CITEREFDBI'] = {'DBI', 'Dizionario Biografico degli Italiani'},
['CITEREFDZS2015'] = {'Croatia Yearbook 2015'},
['CITEREFDadelsen1957'] = {'Bach\'s compositions (sources)'},
['CITEREFDaftary1990'] = {'Daftary-The Ismailis'},
['CITEREFDaftary2003'] = template_names['Iranica'],
['CITEREFDaftary2007'] = {'Daftary-The Ismailis'},
['CITEREFDaftary2015'] = template_names['Iranica'],
['CITEREFDaiber1988'] = template_names['Iranica'],
['CITEREFDandamayevShahbaziLecoq1986'] = template_names['Iranica'],
['CITEREFDaniel2000'] = template_names['Iranica'],
['CITEREFDaniel2010'] = {'New Cambridge History of Islam'},
['CITEREFDanielsDench1963'] = {'Daniels-NoMore'},
['CITEREFDanielsDench1973'] = {'Daniels-NoMore'},
['CITEREFDanner1975'] = template_names['Cam_Hist_Iran'],
['CITEREFDarleyCanepa2018'] = {'Oxford Dictionary of Late Antiquity'},
['CITEREFDaryaee2009'] = template_names['Iranica'],
['CITEREFDaryaee2018'] = template_names['ODLA'],
['CITEREFDaryaeeCanepa2018'] = template_names['ODLA'],
['CITEREFDavid1961'] = {'Bach\'s compositions (sources)'},
['CITEREFDavidson2010'] = {'HistoryofParliament'},
['CITEREFDavidsonThrush2010'] = {'HistoryofParliament'},
['CITEREFDavies1996'] = {'Davies-PLMLocoList'},
['CITEREFDavies1997'] = {'Davies-NordLocoList'},
['CITEREFDavies2001'] = {'Davies-EstLocoList3', 'Davies-ÉtatLocoList'},
['CITEREFDavies2003'] = {'Davies-SNCFLocoList'},
['CITEREFDaviesFirthLuckingThomas1966'] = {'RCTS-LocosGWR-10'},
['CITEREFDavud2018'] = {'Encyclopaedia Islamica'},
['CITEREFDavudNazerian2008'] = {'Encyclopaedia Islamica'},
['CITEREFDe_Negri1997'] = {'DBI'},
['CITEREFDemircan2010'] = {'TDV Encyclopedia of Islam'},
['CITEREFDeutsch1951'] = {'Schubert\'s compositions (references)'},
['CITEREFDeutsch1978'] = {'Schubert\'s compositions (references)'},
['CITEREFDeutsche_Autos,_Band_2,2001'] = {'Deutsche Autos-2'},
['CITEREFDeutsche_Autos,_Band_3,2001'] = {'Deutsche Autos-3'},
['CITEREFDeutsche_Autos,_Band_4,2001'] = {'Deutsche Autos-4'},
['CITEREFDeutsche_Autos,_Band_5,2001'] = {'Deutsche Autos-5'},
['CITEREFDeutsche_Autos,_Band_6,2001'] = {'Deutsche Autos-6'},
['CITEREFDewick2005'] = {'Dewick-Atlas'},
['CITEREFDiamonstein-Spielvogel2011'] = {'Cite landmarks'},
['CITEREFDickens2018'] = template_names['ODLA'],
['CITEREFDirksen1998'] = {'Bach\'s compositions (sources)'},
['CITEREFDirksen2010'] = {'Bach\'s compositions (sources)'},
['CITEREFDirksen2016'] = {'Bach\'s compositions (sources)'},
['CITEREFDixmier1984'] = {'Dixmier General Topology'},
['CITEREFDoerfer1989'] = template_names['Iranica'],
['CITEREFDoganis1930'] = {'Great Military and Naval Encyclopaedia'},
['CITEREFDoleckiMynard2016'] = {'Dolecki Mynard Convergence Foundations Of Topology'},
['CITEREFDolkart1998'] = {'Cite morningside'},
['CITEREFDonner1995'] = template_names['Iranica'],
['CITEREFDonohue2003'] = {'The Buwayhid Dynasty in Iraq'},
['CITEREFDorin1972'] = {'Dorin-North Western'},
['CITEREFDow1962'] = {'Dow-GC2'},
['CITEREFDow1965'] = {'Dow-GC3'},
['CITEREFDow1985'] = {'Dow-GC1'},
['CITEREFDowney2007'] = {'Downey-Chicago'},
['CITEREFDrechsler2005'] = template_names['Iranica'],
['CITEREFDrummond1964'] = {'HistoryofParliament'},
['CITEREFDrury1985'] = {'Drury Historical Guide 1985'},
['CITEREFDrury1993'] = {'Drury-North American Steam'},
['CITEREFDuchesne-Guillemin1994'] = template_names['Iranica'],
['CITEREFDugundji1966'] = {'Dugundji Topology'},
['CITEREFDuke1995'] = {'Duke-Santa Fe-1'},
['CITEREFDukeKeilty1990'] = {'Duke-RDC'},
['CITEREFDumbarton_Oaks_Hagiography_Database'] = {'Dumbarton Oaks Hagiography Database'},
['CITEREFDunbar1969'] = {'Dunbar-Railroads'},
['CITEREFDuncan-Jones2010'] = {'Shakespeare sonnets bibliography'},
['CITEREFDunlop1895'] = {'O\'Donnell family tree'},
['CITEREFDunlop1985'] = template_names['Iranica'],
['CITEREFDunn2013'] = {'Dunn-Comeng-5'},
['CITEREFDurand-Guédy2008'] = template_names['Iranica'],
['CITEREFDurand-Guédy2010'] = template_names['Iranica'],
['CITEREFDurand-Guédy2013'] = {'Encyclopaedia Islamica'},
['CITEREFDurham1998'] = {'California\'s Geographic Names'},
['CITEREFDurrant1972'] = {'Durrant-Steam Locos Eastern Europe'},
['CITEREFDurrant1981'] = {'Durrant-Garratt-Rev'},
['CITEREFDurrantLewisJorgensen1981'] = {'Durrant-SteamAfrica'},
['CITEREFDömlingKohlhase1971'] = {'Bach\'s compositions (sources)'},
['CITEREFDürr1952'] = {'Bach\'s compositions (sources)'},
['CITEREFDürr1954'] = {'Bach\'s compositions (sources)'},
['CITEREFDürr1987'] = {'Bach\'s compositions (sources)'},
['CITEREFDürrJones2006'] = {'Bach\'s compositions (sources)'},
['CITEREFDürrKobayashi1998'] = {'Bach\'s compositions (sources)'},
['CITEREFde_Blois2000'] = template_names['Iranica'],
['CITEREFde_Planhol1987'] = template_names['Iranica'],
['CITEREFde_Planhol1988'] = template_names['Iranica'],
----------< E >----------
['CITEREFEIr.1994'] = template_names['Iranica'],
['CITEREFEarle2018'] = {'Gymnosperm Database'},
['CITEREFEbata2019'] = {'BDh'},
['CITEREFEbata2020'] = {'BDh'},
['CITEREFEbrahimKhodaverdian2018'] = {'Encyclopaedia Islamica'},
['CITEREFEdwards1995'] = {'Edwards Functional Analysis Theory and Applications'},
['CITEREFEichberg1976'] = {'Bach\'s compositions (sources)'},
['CITEREFEilers1983'] = template_names ['Cam_Hist_Iran'],
['CITEREFEkbal1991'] = template_names['Iranica'],
['CITEREFEl-Hibri2010'] = {'New Cambridge History of Islam'},
['CITEREFEldredgeHorenstein2014'] = {'Cite concrete'},
['CITEREFElsholz1982'] = {'Schubert\'s compositions (references)'},
['CITEREFElwell-Sutton1984'] = template_names['Iranica'],
['CITEREFEppstein1966'] = {'Bach\'s compositions (sources)'},
['CITEREFEppstein1982'] = {'Bach\'s compositions (sources)'},
['CITEREFEquasis'] = {'Csr', 'Cite ship register'},
['CITEREFEuDaly2009'] = {'Complete Book of North American Railroading'},
['CITEREFEuDalySchaferJessupBoyd2009'] = {'Complete Book of North American Railroading'},
----------< F >----------
['CITEREFFacella2021'] = template_names['Iranica'],
['CITEREFFang1943'] = {'Cite ECCP'},
['CITEREFFarinella2001'] = {'DBI'},
['CITEREFFatehi-NezhadAzarnooshNegahban2008'] = {'Encyclopaedia Islamica'},
['CITEREFFatehi-nezhadRahimi2008'] = {'Encyclopaedia Islamica'},
['CITEREFFeder1958'] = {'Bach\'s compositions (sources)'},
['CITEREFFederal_Writers'_Project1939'] = {'Cite fednyc'},
['CITEREFFelixMadelung1995'] = template_names['Iranica'],
['CITEREFFernandez1983'] = {'Fernandez1983'},
['CITEREFFesharaki2015'] = {'Encyclopaedia Islamica'},
['CITEREFFiaccadori1991'] = template_names['ODB'],
['CITEREFFikratUmar2008'] = template_names['Iranica'],
['CITEREFFine1991'] = {'The Early Medieval Balkans'},
['CITEREFFine1994'] = {'The Late Medieval Balkans'},
['CITEREFFletcher,_Great_Tank_Scandal'] = {'Book-Fletcher-Great Tank Scandal'},
['CITEREFFletcher,_Universal_Tank'] = {'Book-Fletcher-Universal Tank'},
['CITEREFFloor1992'] = template_names['Iranica'],
['CITEREFFloor2005'] = template_names['Iranica'],
['CITEREFFlora_of_North_America'] = {'EFloras'},
['CITEREFFlora_of_North_America2009'] = {'EFloras'},
['CITEREFFluckMarshallWilson1996'] = {'FluMarWil-LocRailCR'},
['CITEREFFonstad1991'] = template_names['ME-ref'],
['CITEREFForkelTerry1920'] = {'Bach\'s compositions (sources)'},
['CITEREFFornaçon,_Siegfried1957'] = template_names['NDB'],
['CITEREFForrestal1999'] = {'Forrestal-Wineries'},
['CITEREFForster1990'] = {'Cite DCB'},
['CITEREFFoss1991'] = template_names['ODB'],
['CITEREFFoster1971'] = template_names['ME-ref'],
['CITEREFFoster1996'] = {'Foster-Field Guide'},
['CITEREFFrailey2010'] = {'Frailey-Twilight'},
['CITEREFFranke1994'] = {'Cite Cambridge History of China'},
['CITEREFFranz_Schnorr_von_Carolsfeld1883'] = {'Cite ADB'},
['CITEREFFriedrich_Wilhelm_Bautz1975'] = {'BBKL'},
['CITEREFFriedrich_Wilhelm_Bautz1990'] = {'BBKL'},
['CITEREFFry1964'] = {'RCTS-LocosLNER-7'},
['CITEREFFry1966'] = {'RCTS-LocosLNER-5'},
['CITEREFFrye1975'] = template_names['Cam_Hist_Iran'],
['CITEREFFrye1983'] = template_names['Cam_Hist_Iran'],
['CITEREFFrye2004'] = template_names['Iranica'],
['CITEREFFubini2012'] = {'DBI', 'Dizionario Biografico degli Italiani'},
['CITEREFFudenbergTirole1991'] = {'Cite Fudenberg Tirole 1991'},
['CITEREFFultonHarris1991'] = {'Fulton-Harris'},
----------< G >----------
['CITEREFGarakaniBrown2013'] = {'Encyclopaedia Islamica'},
['CITEREFGardner2005'] = {'MSW3 Microbiotheria'},
['CITEREFGardoni2015'] = {'DBI', 'Dizionario Biografico degli Italiani'},
['CITEREFGareyJohnson1979'] = {'Garey-Johnson'},
['CITEREFGarsoian2000'] = template_names['Iranica'],
['CITEREFGarsoian2004'] = template_names['Iranica'],
['CITEREFGarsoian2005'] = template_names['Iranica'],
['CITEREFGarth2003'] = template_names['ME-ref'],
['CITEREFGazette34205'] = {'London Gazette'},
['CITEREFGazette34339'] = {'London Gazette'},
['CITEREFGazette34390'] = {'London Gazette'},
['CITEREFGazette34427'] = {'London Gazette'},
['CITEREFGazette34558'] = {'London Gazette'},
['CITEREFGazette34870'] = {'London Gazette'},
['CITEREFGazette34978'] = {'London Gazette'},
['CITEREFGazette34989'] = {'London Gazette'},
['CITEREFGazette35037'] = {'London Gazette'},
['CITEREFGazette35107'] = {'London Gazette'},
['CITEREFGazette35134'] = {'London Gazette'},
['CITEREFGazette35284'] = {'London Gazette'},
['CITEREFGazette37560'] = {'London Gazette'},
['CITEREFGazette37590'] = {'London Gazette'},
['CITEREFGazette37598'] = {'London Gazette'},
['CITEREFGazette37610'] = {'London Gazette'},
['CITEREFGazette38020'] = {'London Gazette'},
['CITEREFGazette38611'] = {'London Gazette'},
['CITEREFGeanakoplos1959'] = {'Emperor Michael Palaeologus and the West'},
['CITEREFGeorg_von_Dadelsen1953'] = template_names['NDB'],
['CITEREFGhanoonparvar1989'] = template_names['Iranica'],
['CITEREFGhereghlou2009'] = template_names['Iranica'],
['CITEREFGhereghlou2016'] = template_names['Iranica'],
['CITEREFGhulamiyan2015'] = template_names['Iranica'],
['CITEREFGhulamiyan2015'] = {'Encyclopaedia Islamica'},
['CITEREFGiannasi1975'] = {'DBI', 'Dizionario Biografico degli Italiani'},
['CITEREFGibb1923'] = {'The Arab Conquests in Central Asia'},
['CITEREFGignoux1983'] = template_names['Iranica'],
['CITEREFGignoux1994'] = template_names['Iranica'],
['CITEREFGil1997'] = {'A History of Palestine, 634-1099', 'A History of Palestine, 634–1099'},
['CITEREFGillham2001'] = {'Gillham-Waterloo-City'},
['CITEREFGilliland1969'] = {'Gilliland'},
['CITEREFGilliland1994'] = {'Pop Chronicles 40s'},
['CITEREFGilliverMarshallWeiner2006'] = template_names['ME-ref'],
['CITEREFGilmanPeckColby1905'] = {'Cite NIE', 'New International Encyclopedia', 'NIE'},
['CITEREFGilmanPeckColby1916'] = {'New International Encyclopedia', 'NIE'},
['CITEREFGiunashvili2016'] = template_names['Iranica'],
['CITEREFGleaves1921'] = {'Gleaves'},
['CITEREFGlischinski1997'] = {'Glischinski-Santa Fe'},
['CITEREFGlöckner1983'] = {'Bach\'s compositions (sources)'},
['CITEREFGoldberg1981'] = {'Goldberg-Amtrak'},
['CITEREFGordon2001'] = {'Gordon-The Breaking of a Thousand Swords'},
['CITEREFGraham1974'] = {'Cite DCB'},
['CITEREFGrant1994'] = {'Grant-Death'},
['CITEREFGrant2010'] = {'Grant-Twilight'},
['CITEREFGrant2017'] = {'Grant-RailCo'},
['CITEREFGrassi2018'] = template_names['Iranica'],
['CITEREFGray1986'] = template_names['Cam_Hist_Iran'],
['CITEREFGreenlaw2007'] = {'Greenlaw-Via Rail'},
['CITEREFGregory1991'] = template_names['ODB'],
['CITEREFGregoryŠevčenko1991'] = template_names['ODB'],
['CITEREFGrete_Schemann1957'] = template_names['NDB'],
['CITEREFGrey2002'] = {'Australian Dictionary of Biography'},
['CITEREFGrierson1903'] = {'Cite LSI', 'LSI', 'Linguistic Survey of India'},
['CITEREFGrierson1908'] = {'Cite LSI', 'LSI', 'Linguistic Survey of India'},
['CITEREFGrierson1919'] = {'Cite LSI', 'LSI', 'Linguistic Survey of India'},
['CITEREFGrierson1967'] = {'Cite LSI', 'LSI', 'Linguistic Survey of India'},
['CITEREFGriffith1991'] = template_names['ODB'],
['CITEREFGriffithsSmith1999'] = {'Griffiths-Sheds1'},
['CITEREFGriffithsSmith2000'] = {'Griffiths-Sheds2'},
['CITEREFGrothendieck1955'] = {'Grothendieck Produits Tensoriels Topologiques et Espaces Nucléaires'},
['CITEREFGrothendieck1973'] = {'Grothendieck Topological Vector Spaces'},
['CITEREFGrothendieckDieudonné1960'] = {'EGA'},
['CITEREFGrothendieckDieudonné1961'] = {'EGA'},
['CITEREFGrothendieckDieudonné1963'] = {'EGA'},
['CITEREFGrothendieckDieudonné1964'] = {'EGA'},
['CITEREFGrothendieckDieudonné1965'] = {'EGA'},
['CITEREFGrothendieckDieudonné1966'] = {'EGA'},
['CITEREFGrothendieckDieudonné1967'] = {'EGA'},
['CITEREFGrothendieckDieudonné1971'] = {'EGA'},
['CITEREFGroves2005'] = {'MSW3 Primates', 'MSW3 Groves'},
['CITEREFGrubb2005'] = {'MSW3 Artiodactyla'},
['CITEREFGuilland1967'] = {'Recherches sur les institutions byzantines'},
['CITEREFGulino2005'] = {'DBI', 'Dizionario Biografico degli Italiani'},
['CITEREFGunzburg1984'] = {'Gunzburg-History WAGR Steam'},
['CITEREFGurneyNabavi1993'] = template_names['Iranica'],
['CITEREFGutas1987'] = template_names['Iranica'],
['CITEREFGvakharia2001'] = template_names['Iranica'],
['CITEREFGüner1997'] = {'TDV Encyclopedia of Islam'},
----------< H >----------
['CITEREFHaarer2018'] = template_names['ODLA'],
['CITEREFHabibi2021'] = template_names['Iranica'],
['CITEREFHadidi2000'] = template_names['Iranica'],
['CITEREFHaji2008'] = template_names['Iranica'],
['CITEREFHaldon1999'] = {'Warfare, State and Society in the Byzantine World, 565–1204'},
['CITEREFHalliday1985'] = {'Halliday-AustWineCompend'},
['CITEREFHalliday2008'] = {'Halliday-JHWAtlasAust2008'},
['CITEREFHalliday2009'] = {'Halliday-AustWineEncyc'},
['CITEREFHalm1998'] = template_names['Iranica'],
['CITEREFHalpenny1990'] = {'Canadabio'},
['CITEREFHambly1990'] = template_names['Cam_Hist_Iran'],
['CITEREFHambly1991'] = template_names['Cam_Hist_Iran'],
['CITEREFHammondAnderson1993'] = template_names['ME-ref'],
['CITEREFHammondScull1995'] = template_names['ME-ref'],
['CITEREFHammondScull2005'] = template_names['ME-ref'],
['CITEREFHammondScull2006a'] = template_names['ME-ref'],
['CITEREFHammondScull2006b'] = template_names['ME-ref'],
['CITEREFHanaway1988'] = template_names['Iranica'],
['CITEREFHanaway1989'] = template_names['Iranica'],
['CITEREFHanawayLewisohn2004'] = template_names['Iranica'],
['CITEREFHans_Heinrich_Borcherdt1955'] = template_names['NDB'],
['CITEREFHans_Knudsen1972'] = template_names['NDB'],
['CITEREFHansen1988'] = {'Book-Hansen-US Nuclear Weapons'},
['CITEREFHansman1991'] = template_names['Iranica'],
['CITEREFHartshorne1977'] = {'Hartshorne AG'},
['CITEREFHassanpour1989'] = template_names['Iranica'],
['CITEREFHassanpour1995'] = template_names['Iranica'],
['CITEREFHasumi2003'] = {'Hasumi-shiguehiko-ozu-2003'},
['CITEREFHaswell-Smith2004'] = {'Haswell-Smith'},
['CITEREFHaugic1908'] = {'Schaff-Herzog'},
['CITEREFHawting1987'] = {'The First Dynasty of Islam'},
['CITEREFHawting2000'] = {'The First Dynasty of Islam'},
['CITEREFHaynes2011'] = {'RubberBible92nd'},
['CITEREFHeinichen1728'] = {'Bach\'s compositions (sources)'},
['CITEREFHeinrich_Welti1890'] = {'Cite ADB'},
['CITEREFHelgen2005'] = {'MSW3 Scandentia'},
['CITEREFHellmann1965'] = {'Bach\'s compositions (sources)'},
['CITEREFHenrici1725'] = {'Bach\'s compositions (sources)'},
['CITEREFHenryOrsmond1928'] = {'Raiatea family tree'},
['CITEREFHermann_Palm1876'] = {'Cite ADB'},
['CITEREFHerr2000'] = {'Herr-LN'},
['CITEREFHeschel2007'] = {'Encyclopaedia Judaica', 'Cite EJ', 'Cite Encyclopaedia Judaica'},
['CITEREFHewsen1988'] = template_names['Iranica'],
['CITEREFHidyHidyScottHofsummer2004'] = {'Hidy-Great Northern'},
['CITEREFHildHellenkemper1990'] = {'Tabula Imperii Byzantini'},
['CITEREFHildHellenkemper1994'] = {'Tabula Imperii Byzantini'},
['CITEREFHildRestle1981'] = {'Tabula Imperii Byzantini'},
['CITEREFHillenbrand1986'] = template_names['Iranica'],
['CITEREFHills,_Power_from_Steam'] = {'Book-Hills-Power from Steam'},
['CITEREFHills1989'] = {'Book-Hills-Power from Steam'},
['CITEREFHilmarJestremski2004'] = {'Schubert\'s compositions (references)'},
['CITEREFHilton1980'] = {'Hilton-Amtrak'},
['CITEREFHilton1990'] = {'Hilton Narrow Gauge'},
['CITEREFHiltonDue1960'] = {'Hilton-Interurban'},
['CITEREFHinton1986'] = {'HistoryofParliament'},
['CITEREFHirsch1906'] = {'Cite JE1906'},
['CITEREFHistoric_Environment_Scotland'] = {'Canmore'},
['CITEREFHistoric_Environment_Scotland1972'] = {'Historic Environment Scotland'},
['CITEREFHistoric_Environment_Scotland1976'] = {'Historic Environment Scotland'},
['CITEREFHistoric_Environment_Scotland2020'] = {'Historic Environment Scotland'},
['CITEREFHistoric_Environment_Scotland:_Rusco_Tower2020'] = {'Historic Environment Scotland'},
['CITEREFHistoric_Environment_ScotlandLB33744'] = {'Historic Environment Scotland'},
['CITEREFHistoric_Environment_ScotlandLB50114'] = {'Historic Environment Scotland'},
['CITEREFHob.'] = {'Schubert\'s compositions (references)'},
['CITEREFHoffmanSmith2005'] = {'MSW3 Lagomorpha'},
['CITEREFHoffmann1738'] = {'Bach\'s compositions (sources)'},
['CITEREFHofmann1983'] = {'Bach\'s compositions (sources)'},
['CITEREFHofmann1987'] = {'Bach\'s compositions (sources)'},
['CITEREFHofmann1999'] = {'Bach\'s compositions (sources)'},
['CITEREFHolland1972'] = {'Holland-Vol 2'},
['CITEREFHolland1988'] = {'Cite DCB'},
['CITEREFHolland2001'] = {'Holland-Classic'},
['CITEREFHollingsworth1980'] = {'Hollingsworth-Atlas-Rigby'},
['CITEREFHollingsworth1991'] = template_names['ODB'],
['CITEREFHollingsworthCutler1991'] = template_names['ODB'],
['CITEREFHolmgren2003'] = {'EFloras'},
['CITEREFHoltBiddle1986'] = {'Holt-NorthWest'},
['CITEREFHolton1989'] = {'Holton-Reading-1'},
['CITEREFHonigmann1935'] = {'Byzance et les Arabes'},
['CITEREFHopley1983'] = {'Australian Dictionary of Biography'},
['CITEREFHort1911'] = {'DCBL'},
['CITEREFHorváth1966'] = {'Horváth Topological Vector Spaces and Distributions Volume 1 1966'},
['CITEREFHosseini2017'] = template_names['Iranica'],
['CITEREFHounshell1984'] = {'Hounshell1984'},
['CITEREFHudson1997'] = {'Country study'},
['CITEREFHughes1990'] = {'Hughes-IndianLocos1'},
['CITEREFHughes1992'] = {'Hughes-IndianLocos2'},
['CITEREFHughes1994'] = {'Hughes-IndianLocos3'},
['CITEREFHughes1996'] = {'Hughes-IndianLocos4'},
['CITEREFHummel1943'] = {'Cite ECCP'},
['CITEREFHumphreys2018'] = template_names['ODLA'],
['CITEREFHunter-Crawley2018'] = template_names['ODLA'],
['CITEREFHunter2008'] = {'Country study'},
['CITEREFHutter2009'] = template_names['Iranica'],
['CITEREFHutterer2005'] = {'MSW3 Soricomorpha'},
['CITEREFHütter2012'] = {'Hütter-50bis53'},
['CITEREFHütter2015'] = {'Hütter-54bis59'},
['CITEREFHütter2021'] = {'Hütter-60bis91'},
----------< I >----------
['CITEREFIbn_Khallikan1843'] = {'Ibn Khallikan\'s Biographical Dictionary'},
['CITEREFImber2002'] = {'Imber-The Ottoman Empire, 1300–1650'},
['CITEREFInalcik1989'] = {'Setton-A History of the Crusades'},
['CITEREFIranica:_Bahrām'] = template_names['Iranica'],
['CITEREFIrvine2006'] = template_names['Iranica'],
['CITEREFIshino1998'] = {'Teishajo'},
['CITEREFIshkevariNejad2008'] = {'Encyclopaedia Islamica'},
['CITEREFIvey1919'] = {'Ivey-Marquette'},
----------< J >----------
['CITEREFJackson1908'] = {'Schaff-Herzog'},
['CITEREFJackson1988'] = template_names['Iranica'],
['CITEREFJackson1989'] = template_names['Iranica'],
['CITEREFJackson1995'] = {'Cite enc-nyc'},
['CITEREFJackson2010'] = {'Cite enc-nyc2'},
['CITEREFJacksonMelville2001'] = template_names['Iranica'],
['CITEREFJacobs1904'] = {'Cite Jewish Encyclopedia'},
['CITEREFJarchow1981'] = {'Jarchow Locally Convex Spaces'},
['CITEREFJavadiBurrill1988'] = template_names['Iranica'],
['CITEREFJohn_O'Donovan1856'] = {'Cite AFM'},
['CITEREFJohnstonWelshSchafer2001'] = {'Johnston-Streamliner'},
['CITEREFJones2011'] = {'Cite EPD'},
['CITEREFJordan2002'] = {'Jordan-WineWABest'},
['CITEREFJoshi1983'] = {'Joshi Introduction to General Topology'},
['CITEREFJoslen2003'] = {'Joslen-OOB'},
['CITEREFJowett1867'] = {'DGRBM', 'Cite DGRBM'},
['CITEREFJowett1989'] = {'Jowett-Atlas', 'Carnarvonshire Railway'},
['CITEREFJowett2000'] = {'Jowett-Nationalised'},
['CITEREFJullien2018'] = template_names['ODLA'],
['CITEREFJupp1986'] = {'HistoryofParliament'},
----------< K >----------
['CITEREFK.'] = {'Schubert\'s compositions (references)'},
['CITEREFKadinsky2016'] = {'Cite Hidden Waters NYC'},
['CITEREFKaegi1991'] = template_names['ODB'],
['CITEREFKamaly2006'] = template_names['Iranica'],
['CITEREFKamp1981'] = {'DBI', 'Dizionario Biografico degli Italiani'},
['CITEREFKang2008'] = {'Country study'},
['CITEREFKaramatiMelvin-Koushki2021'] = template_names['Iranica'],
['CITEREFKaramatiMelvin-Koushki2021'] = {'Encyclopaedia Islamica'},
['CITEREFKarimi-Hakkak1997'] = template_names['Iranica'],
['CITEREFKarimiMaghsoodi2013'] = {'Encyclopaedia Islamica'},
['CITEREFKarl_Frohnmeyer1953'] = template_names['NDB'],
['CITEREFKarnow1989'] = {'Cite-Karnow'},
['CITEREFKasheff2001'] = template_names['Iranica'],
['CITEREFKayvaniGholami2008'] = {'Encyclopaedia Islamica'},
['CITEREFKazhdan1991'] = template_names['ODB'],
['CITEREFKazhdanCutler1991'] = template_names['ODB'],
['CITEREFKazhdanJeffreys1991'] = template_names['ODB'],
['CITEREFKazhdanŠevčenko1991'] = template_names['ODB'],
['CITEREFKeall1987'] = template_names['Iranica'],
['CITEREFKeefe2006'] = {'Schubert\'s compositions (references)'},
['CITEREFKeller1937'] = {'Bach\'s compositions (sources)'},
['CITEREFKelly1988'] = {'Cite GEIL'},
['CITEREFKellyBurrage1920'] = {'Cite AMB1920'},
['CITEREFKennedy1998'] = {'The Cambridge History of Egypt', 'Cite Kennedy 1998', 'Cambridge History of Egypt'},
['CITEREFKennedy2001'] = {'Kennedy-The Armies of the Caliphs'},
['CITEREFKennedy2004'] = {'The Prophet and the Age of the Caliphates'},
['CITEREFKennedy2007'] = {'Kennedy-The Great Arab Conquests'},
['CITEREFKennedy2016'] = {'The Prophet and the Age of the Caliphates'},
['CITEREFKenyon2011'] = {'Bach\'s compositions (sources)'},
['CITEREFKerrigan1995'] = {'Shakespeare sonnets bibliography'},
['CITEREFKettenhofen1995'] = template_names['Iranica'],
['CITEREFKettenhofen2001'] = template_names['Iranica'],
['CITEREFKettenhofenBournoutianHewsen1998'] = template_names['Iranica'],
['CITEREFKhaleelulla1982'] = {'Khaleelulla Counterexamples in Topological Vector Spaces'},
['CITEREFKhaleghi-Motlagh1999'] = template_names['Iranica'],
['CITEREFKhaleghi-Motlagh2001'] = template_names['Iranica'],
['CITEREFKhan2012'] = {'Cite Banglapedia'},
['CITEREFKhatibiNegahban2013'] = {'Encyclopaedia Islamica'},
['CITEREFKim1994'] = {'Country study'},
['CITEREFKirnberger1774'] = {'Bach\'s compositions (sources)'},
['CITEREFKirnberger1780'] = {'Bach\'s compositions (sources)'},
['CITEREFKlein2006'] = {'Klein-UP-2'},
['CITEREFKlíma1988'] = template_names['Iranica'],
['CITEREFKobayashi1978'] = {'Bach\'s compositions (sources)'},
['CITEREFKoderHild1976'] = {'Tabula Imperii Byzantini'},
['CITEREFKoderSoustalKoder1998'] = {'Tabula Imperii Byzantini'},
['CITEREFKoeppel2015'] = {'Cite citygrid'},
['CITEREFKofos1977'] = {'Ιστορία του Ελληνικού Έθνους'},
['CITEREFKohler1902'] = {'Cite Jewish Encyclopedia'},
['CITEREFKolde1914'] = {'Schaff-Herzog'},
['CITEREFKoliopoulos1978'] = {'Ιστορία του Ελληνικού Έθνους'},
['CITEREFKolmogorovFomin1957'] = {'Kolmogorov Fomin Elements of the Theory of Functions and Functional Analysis'},
['CITEREFKonrad_Ameln1985'] = template_names['NDB'],
['CITEREFKoska2011'] = {'Bach\'s compositions (sources)'},
['CITEREFKratville1962'] = {'Kratville-SSL'},
['CITEREFKretzschmar1910'] = {'Bach\'s compositions (sources)'},
['CITEREFKube2009'] = {'Schubert\'s compositions (references)'},
['CITEREFKurz1983'] = template_names['Cam_Hist_Iran'],
['CITEREFKuznik2008'] = {'Bach\'s compositions (sources)'},
['CITEREFKöthe1969'] = {'Köthe Topological Vector Spaces I'},
['CITEREFKöthe1979'] = {'Köthe Topological Vector Spaces II'},
['CITEREFKöthe1983'] = {'Köthe Topological Vector Spaces I'},
['CITEREFKülzer2008'] = {'Tabula Imperii Byzantini'},
['CITEREFKüçükaşcı2001'] = {'TDV Encyclopedia of Islam'},
----------< L >----------
['CITEREFLa_Porta2018'] = template_names['ODLA'],
['CITEREFLacourcière1974'] = {'Cite DCB'},
['CITEREFLadefogedMaddieson1996'] = {'SOWL'},
['CITEREFLandau-Tasseron2010'] = {'New Cambridge History of Islam'},
['CITEREFLandauCondit1996'] = {'Cite nysky'},
['CITEREFLandmann1907'] = {'Bach\'s compositions (sources)'},
['CITEREFLang1983'] = template_names['Cam_Hist_Iran'],
['CITEREFLangaroodiCooper2008'] = {'Encyclopaedia Islamica'},
['CITEREFLangaroodiCooper2015'] = template_names['Iranica'],
['CITEREFLangaroodiCooper2015'] = {'Encyclopaedia Islamica'},
['CITEREFLangaroodiNegahban2008'] = {'Encyclopaedia Islamica'},
['CITEREFLangaroodiNegahban2015'] = template_names['Iranica'],
['CITEREFLangaroodiNegahban2015'] = {'Encyclopaedia Islamica'},
['CITEREFLangaroudi2001'] = template_names['Iranica'],
['CITEREFLatham1982–2021'] = template_names['Iranica'],
['CITEREFLazard1975'] = template_names['Cam_Hist_Iran'],
['CITEREFLaërtius1925'] = {'Cite Lives of the Eminent Philosophers', 'Cite LotEP'},
['CITEREFLeCoq1986'] = template_names['Iranica'],
['CITEREFLe_Quien1740'] = {'Oriens Christianus'},
['CITEREFLe_Strange1900'] = {'Baghdad During the Abbasid Caliphate'},
['CITEREFLe_Strange1905'] = {'Lands of the Eastern Caliphate'},
['CITEREFLe_Strange1922'] = {'Baghdad During the Abbasid Caliphate'},
['CITEREFLeblanc1979'] = {'Cite DCB'},
['CITEREFLee1903'] = {'Cite DNBIE'},
['CITEREFLee2018'] = template_names['ODLA'],
['CITEREFLeisingerWollny1993'] = {'Bach\'s compositions (sources)'},
['CITEREFLerner1988'] = template_names['Iranica'],
['CITEREFLev1999'] = {'Saladin in Egypt'},
['CITEREFLevitan2001'] = {'Springer'},
['CITEREFLewin1925'] = {'Lewin-EarlyRail'},
['CITEREFLewis1969'] = {'Setton-A History of the Crusades'},
['CITEREFLewis1986'] = {'Lewis-Shortline-1986'},
['CITEREFLewis1991'] = {'Lewis-Shortline-1991'},
['CITEREFLewis1996'] = {'Lewis-Shortline-1996'},
['CITEREFLewis2001'] = template_names['Iranica'],
['CITEREFLiederNet_Archive'] = {'Schubert\'s compositions (references)'},
['CITEREFLieu1997'] = template_names['Iranica'],
['CITEREFLighthouses_of_Australia_Inc'] = {'Cite loa'},
['CITEREFLind1986'] = {'Lind-Limiteds'},
['CITEREFLittle1974'] = {'Cite DCB'},
['CITEREFLongnon1969'] = {'Setton-A History of the Crusades'},
['CITEREFLosensky2003'] = template_names['Iranica'],
['CITEREFLoverance2018'] = template_names['ODLA'],
['CITEREFLukonin1983'] = {'Cambridge History of Iran'},
['CITEREFLurje2010'] = template_names['Iranica'],
['CITEREFLuttrell1975'] = {'Setton-A History of the Crusades'},
['CITEREFLuttrell1987'] = {'DBI'},
['CITEREFLynch2004'] = {'Lynch-Penn Central'},
['CITEREFLynch2005'] = {'Lynch-New Haven passenger'},
['CITEREFLynch2018'] = template_names['ODLA'],
['CITEREFLéger1990'] = {'Cite DCB'},
['CITEREFle_Fleming1953'] = {'RCTS-LocosGWR-8'},
['CITEREFle_Fleming1960'] = {'RCTS-LocosGWR-8'},
----------< M >----------
['CITEREFMacDermot1927'] = {'Infobox GWR'},
['CITEREFMacDermot1931'] = {'Infobox GWR'},
['CITEREFMacEoin1988'] = template_names['Iranica'],
['CITEREFMacKenzie1992'] = template_names['Iranica'],
['CITEREFMadelung1975'] = template_names['Cam_Hist_Iran'],
['CITEREFMadelung1978'] = {'EI2'},
['CITEREFMadelung1983'] = template_names['Iranica'],
['CITEREFMadelung1984'] = template_names['Iranica'],
['CITEREFMadelung1988'] = template_names['Iranica'],
['CITEREFMadelung1993'] = template_names['Iranica'],
['CITEREFMadelung2003'] = template_names['Iranica'],
['CITEREFMadelungFelix1995'] = template_names['Iranica'],
['CITEREFMaeda2009'] = template_names['Iranica'],
['CITEREFMagdalino2002'] = {'The Empire of Manuel I Komnenos'},
['CITEREFMaiken1989'] = {'Maiken-Night Trains'},
['CITEREFMailer2004'] = {'Mailer-Omaha Road'},
['CITEREFMajidiNegahban'] = {'Encyclopaedia Islamica'},
['CITEREFMalandra2009'] = template_names['Iranica'],
['CITEREFManfred_Knedlik2007'] = {'BBKL'},
['CITEREFMarshak1994'] = template_names['Iranica'],
['CITEREFMarshak2002'] = template_names['Iranica'],
['CITEREFMarshall1823'] = {'Cite RNB1823'},
['CITEREFMarshall1824'] = {'Cite RNB1823'},
['CITEREFMarshall1825'] = {'Cite RNB1823'},
['CITEREFMarshall1827'] = {'Cite RNB1823'},
['CITEREFMarshall1828'] = {'Cite RNB1823'},
['CITEREFMarshall1829'] = {'Cite RNB1823'},
['CITEREFMarshall1830'] = {'Cite RNB1823'},
['CITEREFMarshall1831'] = {'Cite RNB1823'},
['CITEREFMarshall1832'] = {'Cite RNB1823'},
['CITEREFMarshall1833'] = {'Cite RNB1823'},
['CITEREFMarshall1835'] = {'Cite RNB1823'},
['CITEREFMarshall1972'] = {'Lancashire & Yorkshire Railway 3'},
['CITEREFMarshall2001'] = {'Marshall-INGSR'},
['CITEREFMartin_Persch1992'] = {'BBKL'},
['CITEREFMartin_Persch1993'] = {'BBKL'},
['CITEREFMartin_Persch1996'] = {'BBKL'},
['CITEREFMartindale1980'] = {'Prosopography of the Later Roman Empire', 'PLRE'},
['CITEREFMartindale1992'] = {'Prosopography of the Later Roman Empire', 'PLRE'},
['CITEREFMartindaleJonesMorris1971'] = {'Prosopography of the Later Roman Empire', 'PLRE'},
['CITEREFMasoud_Jalali-Moqaddam2015'] = {'Encyclopaedia Islamica'},
['CITEREFMatini1987'] = template_names['Iranica'],
['CITEREFMatthee2008'] = template_names['Iranica'],
['CITEREFMatthee2015'] = template_names['Iranica'],
['CITEREFMaul2005'] = {'Bach\'s compositions (sources)'},
['CITEREFMayGray2006'] = {'MayGray-WAGRPassCar'},
['CITEREFMazzaoui2002'] = template_names['Iranica'],
['CITEREFMcArthurMcArthur2003'] = {'Cite ogn', 'Cite Oregon Geographic Names'},
['CITEREFMcCaffrey1990'] = template_names['Iranica'],
['CITEREFMcCorduck2004'] = {'McCorduck 2004'},
['CITEREFMcCurdyRogers1902'] = {'Cite Jewish Encyclopedia'},
['CITEREFMcDonnell2015'] = {'McDonnell-Locomotives-2nd'},
['CITEREFMcGhee2008'] = {'Cite McGhee 2008'},
['CITEREFMeiningen1704'] = {'Bach\'s compositions (sources)'},
['CITEREFMeints1992'] = {'Meints-Companies'},
['CITEREFMeints2005'] = {'Meints-Lines'},
['CITEREFMelamed1988'] = {'Bach\'s compositions (sources)'},
['CITEREFMelamed1995'] = {'Bach\'s compositions (sources)'},
['CITEREFMelville1997'] = template_names['Iranica'],
['CITEREFMelville2003'] = template_names['Iranica'],
['CITEREFMennell1892'] = {'Dictionary of Australasian Biography'},
['CITEREFMetcalfe2009'] = {'The Muslims of Medieval Italy'},
['CITEREFMiddleton1961'] = {'Middleton-Interurban'},
['CITEREFMiddleton2001'] = {'Middleton-Electrified-2nd'},
['CITEREFMiddleton2002'] = {'Middleton-PRR-Under-Wire'},
['CITEREFMiddletonSmerkDiehl2007'] = {'Encyclopedia of North American Railroads'},
['CITEREFMiles1975'] = template_names['Cam_Hist_Iran'],
['CITEREFMillar2011'] = {'NZR Steam Locomotive'},
['CITEREFMiller'] = {'Encyclopaedia Islamica'},
['CITEREFMiller1908'] = {'The Latins in the Levant', 'Latins in the Levant'},
['CITEREFMiller1921'] = {'Essays on the Latin Orient'},
['CITEREFMinnich2008'] = {'Country study'},
['CITEREFMiramar_Ship_Index'] = {'Csr', 'Cite ship register'},
['CITEREFMitchell1965'] = {'Mitchell TOC'},
['CITEREFMittermeierKonstantHawkinsLouis2006'] = {'LoM2'},
['CITEREFMittermeierLouisRichardsonSchwitzer2010'] = {'LoM3'},
['CITEREFMittermeierTattersallKonstantMeyers1994'] = {'LoM1'},
['CITEREFMoore1875'] = {'Cite CEM'},
['CITEREFMorana1993'] = {'Bach\'s compositions (sources)'},
['CITEREFMorony2009'] = template_names['Iranica'],
['CITEREFMoschonas1975'] = {'Ιστορία του Ελληνικού Έθνους'},
['CITEREFMottahedeh1975'] = template_names['Cam_Hist_Iran'],
['CITEREFMozartHaydnHaydn2008'] = {'Schubert\'s compositions (references)'},
['CITEREFMunkres1974'] = {'Munkres Topology'},
['CITEREFMunkres2000'] = {'Munkres Topology'},
['CITEREFMurray2006'] = {'Murray-Illinois Central'},
['CITEREFMusserCarleton2005'] = {'MSW3 Muroidea'},
['CITEREFMüller,_Hans-Christian1966'] = template_names['NDB'],
----------< N >----------
['CITEREFNSA_II,_15'] = {'Schubert\'s compositions (references)'},
['CITEREFNSA_scores'] = {'Schubert\'s compositions (references)'},
['CITEREFNSA_website'] = {'Schubert\'s compositions (references)'},
['CITEREFNagel1990'] = template_names['Iranica'],
['CITEREFNariciBeckenstein2011'] = {'Narici Beckenstein Topological Vector Spaces'},
['CITEREFNavāʾī1988'] = template_names['Iranica'],
['CITEREFNegahban2008'] = {'Encyclopaedia Islamica'},
['CITEREFNersessian2018'] = template_names['ODLA'],
['CITEREFNetzer1998'] = template_names['Iranica'],
['CITEREFNetzer2007'] = template_names['Iranica'],
['CITEREFNeukirch1999'] = {'Neukirch ANT'},
['CITEREFNeukirchSchmidtWingberg2000'] = {'Neukirch et al. CNF'},
['CITEREFNew_York_City_Landmarks_Preservation_CommissionDolkartPostal2009'] = {'Cite nycland'},
['CITEREFNewbould1999'] = {'Schubert\'s compositions (references)'},
['CITEREFNewman1994'] = template_names['Iranica'],
['CITEREFNicholsonCanepaDaryaee2018'] = template_names['ODLA'],
['CITEREFNicol1988'] = {'Byzantium and Venice: A Study in Diplomatic and Cultural Relations'},
['CITEREFNicol1992'] = {'The Immortal Emperor: The Life and Legend of Constantine Palaiologos, Last Emperor of the Romans'},
['CITEREFNicol1993'] = {'The Last Centuries of Byzantium, 1261–1453', 'The Last Centuries of Byzantium'},
['CITEREFNock1974'] = {'Nock-EustonGlasgow'},
----------< O >----------
['CITEREFO'Byrne1849'] = {'Cite NBD1849'},
['CITEREFO'ConnorRobertson1996'] = {'MacTutor Biography', 'MacTutor'},
['CITEREFO'ConnorRobertson2000'] = {'MacTutor Biography', 'MacTutor'},
['CITEREFO'Donoghue1897'] = {'Cite DNB'},
['CITEREFODB'] = template_names['ODB'],
['CITEREFODLA'] = template_names['ODLA'],
['CITEREFOberling1984'] = template_names['Iranica'],
['CITEREFOberling2008'] = template_names['Iranica'],
['CITEREFOberling2010'] = template_names['Iranica'],
['CITEREFOdisheli2018'] = template_names['ODLA'],
['CITEREFOfficial_Guide_of_the_Railways1950'] = {'Official Guide of the Railways'},
['CITEREFOgorek2012'] = {'Ogorek-South Shore'},
['CITEREFOikonomides1991'] = template_names['ODB'],
['CITEREFOikonomou1977'] = {'Ιστορία του Ελληνικού Έθνους'},
['CITEREFOlbrycht2021'] = template_names['Iranica'],
----------< P >----------
['CITEREFPLP'] = {'Prosopographisches Lexikon der Palaiologenzeit', 'PLP'},
['CITEREFPalmer1875'] = {'Cite ADB'},
['CITEREFPalmerStewart1965'] = {'Palmer & Stewart'},
['CITEREFPanainoAbdollahyBalland1990'] = template_names['Iranica'],
['CITEREFPandariHirtensteinNegahban2013'] = {'Encyclopaedia Islamica'},
['CITEREFParvin2003'] = template_names['Iranica'],
['CITEREFParvin2009'] = template_names['Iranica'],
['CITEREFPatience1996'] = {'Patience-SteamTwilight'},
['CITEREFPatton2005'] = {'MSW3 Geomyidae'},
['CITEREFPaul2000'] = template_names['Iranica'],
['CITEREFPawson1979'] = {'Pawson-Delaware Valley'},
['CITEREFPaxtonBourne1985'] = {'Paxton-Bourne'},
['CITEREFPeacock2011'] = template_names['Iranica'],
['CITEREFPeck1898'] = {'HDCA'},
['CITEREFPerlis2001'] = {'Springer'},
['CITEREFPerreault2004'] = {'Bach\'s compositions (sources)'},
['CITEREFPerry1983'] = template_names['Cam_Hist_Iran'],
['CITEREFPerry1990'] = template_names['Cam_Hist_Iran'],
['CITEREFPerry1991'] = template_names['Cam_Hist_Iran'],
['CITEREFPetropoulosKoumarianou1977'] = {'Ιστορία του Ελληνικού Έθνους'},
['CITEREFPetrucci1982'] = {'DBI'},
['CITEREFPezeshk2017'] = {'Encyclopaedia Islamica'},
['CITEREFPezeshkKhaleeli2017'] = template_names['Iranica'],
['CITEREFPezeshkKhaleeli2017'] = {'Encyclopaedia Islamica'},
['CITEREFPfau2008'] = {'Bach\'s compositions (sources)'},
['CITEREFPinkepank1973'] = {'Pinkepank diesel spotters guide 2'},
['CITEREFPlantlist2016'] = {'Plantlist'},
['CITEREFPlaten1976'] = {'Bach\'s compositions (sources)'},
['CITEREFPloumidisAlexiou1974'] = {'Ιστορία του Ελληνικού Έθνους'},
['CITEREFPmbZ'] = {'Prosopographie der mittelbyzantinischen Zeit', 'PMBZ'},
['CITEREFPolemis1968'] = {'Polemis-The Doukai'},
['CITEREFPope2007'] = {'Encyclopaedia Judaica', 'Cite EJ', 'Cite Encyclopaedia Judaica'},
['CITEREFPopplewell'] = {'Popplewell-Gazetteer'},
['CITEREFPotts2018'] = template_names['ODLA'],
['CITEREFPottsCanepa2018'] = template_names['ODLA'],
['CITEREFPourshariati2017'] = {'Encyclopædia Iranica Online'},
['CITEREFPozza1992'] = {'DBI', 'Dizionario Biografico degli Italiani'},
['CITEREFPrawer1985'] = {'Setton-A History of the Crusades'},
['CITEREFPritsak1991'] = template_names['ODB'],
['CITEREFProsopographie_der_mittelbyz._Zeit'] = {'Prosopographie der mittelbyzantinischen Zeit'},
----------< Q >----------
['CITEREFQuick2009'] = {'Quick-Stations'},
['CITEREFQuick2019'] = {'Quick-stations-5'},
['CITEREFQuick2020'] = {'Quick-stations-5'},
['CITEREFQuick2022'] = {'Quick-stations-5'},
['CITEREFQuinn2003'] = template_names['Iranica'],
----------< R >----------
['CITEREFRaditsa1983'] = template_names['Cam_Hist_Iran'],
['CITEREFRahman1983'] = template_names['Iranica'],
['CITEREFRaja'i1987'] = template_names['Iranica'],
['CITEREFRamaer1974'] = {'Ramaer-SteamLocosEAR'},
['CITEREFRansome-Wallis1971'] = {'Ransome-Wallis 1'},
['CITEREFRateliff2007'] = template_names['ME-ref'],
['CITEREFRavegnano2000'] = {'DBI'},
['CITEREFReed1953'] = {'RCTS-LocosGWR-2'},
['CITEREFReed1975'] = {'Reed-Streamline era'},
['CITEREFReed1997'] = {'Schubert\'s compositions (references)'},
['CITEREFReinhard_Tenberg1990'] = {'BBKL'},
['CITEREFRettinghaus2020'] = {'BDh'},
['CITEREFReynolds1921'] = {'Cite Collier\'s', 'Collier\'s'},
['CITEREFReynoldsOroszi2000'] = {'Reynolds-BO'},
['CITEREFRezaHirtensteinGholami2021'] = {'Encyclopaedia Islamica'},
['CITEREFRezakhani2018'] = template_names['ODLA'],
['CITEREFRezvani2014'] = template_names['Iranica'],
['CITEREFRichter-Bernburg2003'] = template_names['Iranica'],
['CITEREFRichter2018'] = {'BDh'},
['CITEREFRigo2005'] = template_names['ODB'],
['CITEREFRipleyDana1863'] = {'New American Cyclopedia'},
['CITEREFRipleyDana1864'] = {'New American Cyclopedia'},
['CITEREFRipleyDana1879'] = {'Cite AmCyc'},
['CITEREFRistaino1988'] = {'Country study'},
['CITEREFRobert_Eitner1891'] = {'Cite ADB'},
['CITEREFRobertson1983'] = {'Robertson-OriginScot'},
['CITEREFRoe1916'] = {'Roe1916'},
['CITEREFRoe1937'] = {'Roe1937'},
['CITEREFRoemer1986'] = template_names['Cam_Hist_Iran'],
['CITEREFRoemer1989'] = template_names['Iranica'],
['CITEREFRoemer2004'] = template_names['Iranica'],
['CITEREFRolt1965'] = {'Rolt1965'},
['CITEREFRoltKichenside1982'] = {'Rolt-Red'},
['CITEREFRose1857'] = {'Cite Newgenbio'},
['CITEREFRosenfeld1974'] = template_names['NDB'],
['CITEREFRosenzweigBlackmar1992'] = {'Cite Central Park History', 'Cite Central Park history'},
['CITEREFRowledge1975'] = {'Rowledge-Engines of the LMS'},
['CITEREFRowledge1993'] = {'Rowledge-Irish Steam Register'},
['CITEREFRowlett'] = {'Cite rowlett', 'Cite Rowlett'},
['CITEREFRowlett2007'] = {'Cite rowlett', 'Cite Rowlett'},
['CITEREFRowlett2012'] = {'Cite rowlett', 'Cite Rowlett'},
['CITEREFRowlett2013'] = {'Cite rowlett', 'Cite Rowlett'},
['CITEREFRowlett2016'] = {'Cite rowlett', 'Cite Rowlett'},
['CITEREFRowlett2017'] = {'Cite rowlett', 'Cite Rowlett'},
['CITEREFRowson1998'] = template_names['Iranica'],
['CITEREFRudin1973'] = {'Rudin Walter Functional Analysis'},
['CITEREFRudin1991'] = {'Rudin Walter Functional Analysis'},
['CITEREFRunciman1951'] = {'Runciman-A History of the Crusades'},
['CITEREFRunciman1951–1954'] = {'Runciman-A History of the Crusades'},
['CITEREFRunciman1952'] = {'Runciman-A History of the Crusades'},
['CITEREFRunciman1954'] = {'Runciman-A History of the Crusades'},
['CITEREFRunciman1989'] = {'Runciman-A History of the Crusades'},
['CITEREFRussell1985'] = {'Setton-A History of the Crusades', 'Encyclopædia Iranica Online', 'Encyclopædia Iranica', 'Encyclopaedia Iranica', 'Cite Encyclopædia Iranica Online'},
['CITEREFRussell1986'] = template_names['Iranica'],
['CITEREFRussell1987'] = template_names['Iranica'],
['CITEREFRussellNorvig2003'] = {'Russell Norvig 2003'},
['CITEREFRybczynski2000'] = {'Rybczynski2000'},
['CITEREFRypka1968'] = template_names['Cam_Hist_Iran'],
----------< S >----------
['CITEREFSR_staff2013'] = {'Houston family tree'},
['CITEREFSadeghiTehrani2008'] = {'Encyclopaedia Islamica'},
['CITEREFSadıkoğlu1996'] = {'TDV Encyclopedia of Islam'},
['CITEREFSafa1987'] = template_names['Iranica'],
['CITEREFSafa1988'] = template_names['Iranica'],
['CITEREFSafa1989'] = template_names['Iranica'],
['CITEREFSafa1994'] = template_names['Iranica'],
['CITEREFSafa2003'] = template_names['Iranica'],
['CITEREFSajjadiAsatryanMelvin-Koushki'] = {'Encyclopaedia Islamica Online'},
['CITEREFSajjadiAsatryanMelvin-Koushki'] = {'Encyclopaedia Islamica'},
['CITEREFSajjadiAsatryanMelvin-Koushki2021'] = template_names['Iranica'],
['CITEREFSalbiev2021'] = template_names['Iranica'],
['CITEREFSalo2004'] = template_names['ME-ref'],
['CITEREFSamiʿiMelvin-Koushki2013'] = {'Encyclopaedia Islamica'},
['CITEREFSanders1998'] = {'The Cambridge History of Egypt', 'Cambridge History of Egypt'},
['CITEREFSanders2003'] = {'Sanders-Indiana'},
['CITEREFSanders2006'] = {'Sanders-Heartland'},
['CITEREFSanders2007'] = {'Sanders-Akron'},
['CITEREFSarikakis1974'] = {'Ιστορία του Ελληνικού Έθνους'},
['CITEREFSaunders2001'] = {'Saunders-Merging Lines'},
['CITEREFSaunders2013'] = {'Saunders-Giants of the Seas'},
['CITEREFSavadaShaw1992'] = {'Country study'},
['CITEREFSavoryKaramustafa1998'] = template_names['Iranica'],
['CITEREFScarce1986'] = template_names['Iranica'],
['CITEREFSchaeferWolff1999'] = {'Schaefer Wolff Topological Vector Spaces'},
['CITEREFSchafer1996'] = {'Schafer-Classic-Railroads-1'},
['CITEREFSchafer1998'] = {'Schafer-Vintage Diesel'},
['CITEREFSchafer2000'] = {'Schafer-More-Classic'},
['CITEREFSchafer2003'] = {'Schafer-Classic-Railroads-3'},
['CITEREFSchaferSolomon1997'] = {'Schafer-Pennsylvania'},
['CITEREFSchaferWelsh1997'] = {'Schafer-Classic'},
['CITEREFSchaferWelsh2002'] = {'Schafer-Streamliners'},
['CITEREFSchaferWelshHolland2001'] = {'Schafer-American passenger train'},
['CITEREFSchaff-Herzog'] = {'Schaff-Herzog'},
['CITEREFSchechter1996'] = {'Schechter Handbook of Analysis and Its Foundations'},
['CITEREFScheide1960'] = {'Bach\'s compositions (sources)'},
['CITEREFSchicht1805'] = {'Bach\'s compositions (sources)'},
['CITEREFSchilling1997'] = {'Schilling-pop-culture'},
['CITEREFSchindel2013'] = template_names['Iranica'],
['CITEREFSchippmann1986'] = template_names['Iranica'],
['CITEREFSchippmann1987'] = template_names['Iranica'],
['CITEREFSchlitter2005'] = {'MSW3 Tubulidentata'},
['CITEREFSchlumberger1983'] = template_names['Cam_Hist_Iran'],
['CITEREFSchmieder1950'] = {'Bach\'s compositions (sources)'},
['CITEREFSchmieder1990'] = {'Bach\'s compositions (sources)'},
['CITEREFSchmitt1986'] = template_names['Iranica'],
['CITEREFSchmitt1989'] = template_names['Iranica'],
['CITEREFSchmitt1993'] = template_names['Iranica'],
['CITEREFSchmitt1994'] = template_names['Iranica'],
['CITEREFSchmitt1995'] = template_names['Iranica'],
['CITEREFSchmitt2002'] = template_names['Iranica'],
['CITEREFSchmitt2004'] = template_names['Iranica'],
['CITEREFSchmitt2005'] = template_names['Iranica'],
['CITEREFSchmitt2018'] = template_names['Iranica'],
['CITEREFSchmittBailey1986'] = template_names['Iranica'],
['CITEREFSchmitz1870'] = {'Cite DGRBM'},
['CITEREFSchneider1907'] = {'Bach\'s compositions (sources)'},
['CITEREFSchneider1912'] = {'Bach\'s compositions (sources)'},
['CITEREFScholze1736'] = {'Bach\'s compositions (sources)'},
['CITEREFSchroeter1961'] = {'Schroeter-Eisenbahnen'},
['CITEREFSchroeterRamaer1993'] = {'Schroeter-Ramaer-Eisenbahnen'},
['CITEREFSchubert-online'] = {'Schubert\'s compositions (references)'},
['CITEREFSchubert1968'] = {'Schubert Topology'},
['CITEREFSchulenberg2010'] = {'Bach\'s compositions (sources)'},
['CITEREFSchulenberg2013'] = {'Bach\'s compositions (sources)'},
['CITEREFSchulze1980'] = {'Bach\'s compositions (sources)'},
['CITEREFSchulze1983'] = {'Bach\'s compositions (sources)'},
['CITEREFSchulze1984'] = {'Bach\'s compositions (sources)'},
['CITEREFSchwieterman2001'] = {'Schwieterman-Leaves-Eastern'},
['CITEREFScottNegus2011'] = {'Scott-Negus-Cellar Door'},
['CITEREFScribbins1970'] = {'Scribbins-Hiawatha'},
['CITEREFScribbins2008'] = {'Scribbins-400-2008', 'Scribbins-Remembered'},
['CITEREFSearle'] = {'Cite sslidx'},
['CITEREFSegal1982'] = template_names['Iranica'],
['CITEREFSellwood1983'] = template_names['Cam_Hist_Iran'],
['CITEREFSemmensGoldfinch2003'] = {'Book-Semmens-Goldfinch-How Steam Locomotives Really Work'},
['CITEREFSemsarZand2008'] = {'Encyclopaedia Islamica'},
['CITEREFSetton1975'] = {'Setton-A History of the Crusades'},
['CITEREFSetton1976'] = {'The Papacy and the Levant'},
['CITEREFSetton1978'] = {'The Papacy and the Levant'},
['CITEREFSetton1984'] = {'The Papacy and the Levant'},
['CITEREFSettonHazard1975'] = {'Setton-A History of the Crusades'},
['CITEREFSfyroeras1975'] = {'Ιστορία του Ελληνικού Έθνους'},
['CITEREFShahbazi1986'] = template_names['Iranica'],
['CITEREFShahbazi1987'] = template_names['Iranica'],
['CITEREFShahbazi1988'] = template_names['Iranica'],
['CITEREFShahbazi1989'] = template_names['Iranica'],
['CITEREFShahbazi1991'] = template_names['Iranica'],
['CITEREFShahbazi1994'] = template_names['Iranica'],
['CITEREFShahbazi2002'] = template_names['Iranica'],
['CITEREFShahbazi2003'] = template_names['Iranica'],
['CITEREFShahbazi2004'] = template_names['Iranica'],
['CITEREFShahbazi2005'] = template_names['Iranica'],
['CITEREFShahbaziBosworth1990'] = template_names['Iranica'],
['CITEREFShahbaziRichter-Bernburg2002'] = template_names['Iranica'],
['CITEREFShaki1991'] = template_names['Iranica'],
['CITEREFShaughnessy1997'] = {'Shaughnessy-DH'},
['CITEREFShaw1978'] = {'Shaw-RailroadAccidents'},
['CITEREFShayegan2004'] = template_names['Iranica'],
['CITEREFShayesteh2013'] = template_names['Iranica'],
['CITEREFSheikhsofla2018'] = {'Encyclopaedia Islamica'},
['CITEREFShindo2004'] = {'Kaneto-shindo-shinario-jinsei'},
['CITEREFShoarian-SattariRezaeeNegahban2008'] = {'Encyclopaedia Islamica'},
['CITEREFShoshani2005'] = {'MSW3 Shoshani'},
['CITEREFShtern2001'] = {'Springer', 'SpringerEOM'},
['CITEREFSiegele1957'] = {'Bach\'s compositions (sources)'},
['CITEREFSilanos2014'] = {'DBI', 'Dizionario Biografico degli Italiani'},
['CITEREFSilke2006'] = {'O\'Donnell family tree'},
['CITEREFSimmons2005'] = {'MSW3 Chiroptera'},
['CITEREFSimon1966'] = {'Simon-Wines Australia'},
['CITEREFSimonWarner2011'] = {'Amtrak By the Numbers'},
['CITEREFSinclair1911'] = {'DCBL'},
['CITEREFSinger1905'] = {'Jewish Encyclopedia'},
['CITEREFSix1934'] = {'Cite Six', 'Cite six'},
['CITEREFSkjærvø2018'] = template_names['ODLA'],
['CITEREFSkoulatos1980'] = {'Les personnages byzantins de l\'Alexiade'},
['CITEREFSloan1964'] = {'Sloan1964'},
['CITEREFSmith1854'] = {'Cite DGRG', 'DGRG'},
['CITEREFSmith1870'] = {'DGRBM', 'Cite DGRBM'},
['CITEREFSmith1873'] = {'DGRBM', 'Cite DGRBM'},
['CITEREFSmith1876'] = {'DGRBM', 'Cite DGRBM'},
['CITEREFSmith1880'] = {'DGRBM', 'Cite DGRBM'},
['CITEREFSmith2010'] = {'Smith-Cruise Ships-2010'},
['CITEREFSolomentsev2001'] = {'Springer', 'SpringerEOM'},
['CITEREFSolomon2000'] = {'Solomon-American Diesel', 'Solomon-UP'},
['CITEREFSolomon2003'] = {'Solomon-Masterpieces'},
['CITEREFSolomon2004'] = {'Solomon-Amtrak'},
['CITEREFSolomon2005'] = {'Solomon-SP-Passenger'},
['CITEREFSolomon2006'] = {'Solomon-EMD Locomotives'},
['CITEREFSolomon2011'] = {'Solomon-Modern Diesel'},
['CITEREFSolomon2014'] = {'Solomon-GE and EMD'},
['CITEREFSolomonSchafer2007'] = {'Solomon-New York Central'},
['CITEREFSolopova2009'] = template_names['ME-ref'],
['CITEREFSoucek1982'] = template_names['Iranica'],
['CITEREFSoucek1983'] = template_names['Iranica'],
['CITEREFSoustal1991'] = {'Tabula Imperii Byzantini'},
['CITEREFSoustalKoder1981'] = {'Tabula Imperii Byzantini'},
['CITEREFSpielhoff1991'] = {'Spielhoff-EL'},
['CITEREFSpitta1894'] = {'Bach\'s compositions (sources)'},
['CITEREFSpitta1899'] = {'Bach\'s compositions (sources)'},
['CITEREFSpringirth2016'] = {'Springirth-Philadelphia'},
['CITEREFSpuhler1986'] = template_names['Cam_Hist_Iran'],
['CITEREFSpuler1983'] = template_names['Iranica'],
['CITEREFSpuler1987'] = template_names['Iranica'],
['CITEREFStagner1993'] = {'Stagner-Transition'},
['CITEREFStansfield1999'] = {'Stansfield-AyrRenfrew'},
['CITEREFStatistical_Yearbook_of_the_Republic_of_Croatia_2015'] = {'Croatia Yearbook 2015'},
['CITEREFStaufer1993'] = {'Staufer-Pennsy_III'},
['CITEREFStauferPennypacker1962'] = {'Staufer-Pennsy'},
['CITEREFStauferPennypacker1968'] = {'Staufer-Pennsy Power II'},
['CITEREFStaunton1988'] = {'Australian Dictionary of Biography'},
['CITEREFSternFishmanTilove2006'] = {'Cite New York 2000', 'Cite NY2000', 'Cite ny2000', 'Cite NY 2000', 'Cite ny 2000'},
['CITEREFSternGilmartinMassengale1983'] = {'Cite New York 1900', 'Cite NY1900'},
['CITEREFSternGilmartinMellins1987'] = {'Cite New York 1930', 'Cite NY 1930', 'Cite NY1930', 'Cite ny1930', 'Cite ny 1930'},
['CITEREFSternMellinsFishman1995'] = {'Cite New York 1960', 'Cite NY1960', 'Cite NY 1960', 'Cite ny1960', 'Cite ny 1960'},
['CITEREFSternMellinsFishman1999'] = {'Cite New York 1880', 'Cite NY1880', 'Cite NY 1880', 'Cite ny1880', 'Cite ny 1880'},
['CITEREFStewart1974'] = {'When Steam Was King'},
['CITEREFStrachey1981'] = template_names['ME-ref'],
['CITEREFStrickland1983'] = {'Strickland Locomotive Directory'},
['CITEREFStähelin1909'] = {'Schaff-Herzog'},
['CITEREFSuetin2001'] = {'Springer', 'SpringerEOM'},
['CITEREFSundermann1988'] = template_names['Iranica'],
['CITEREFSusanne_Schurr1992'] = {'BBKL'},
['CITEREFSusanne_Siebert1992'] = {'BBKL'},
['CITEREFSvolopoulos1977'] = {'Ιστορία του Ελληνικού Έθνους'},
['CITEREFSwartz1992'] = {'Swartz An Introduction to Functional Analysis'},
----------< T >----------
['CITEREFLondon_Gazette'] = {'London Gazette'},
['CITEREFTaber1977'] = {'Taber-DLW-19th'},
['CITEREFTaberTaber1980'] = {'Taber-DLW-20th-1'},
['CITEREFTaberTaber1981'] = {'Taber-DLW-20th-2'},
['CITEREFTafazzoli1999'] = template_names['Iranica'],
['CITEREFTafazzoli1999'] = {'Encyclopaedia Islamica'},
['CITEREFTafazzoli2000'] = template_names['Iranica'],
['CITEREFTalbot1991'] = template_names['ODB'],
['CITEREFTalbotKazhdan1991'] = template_names['ODB'],
['CITEREFTanındı2008'] = template_names['Iranica'],
['CITEREFTao2009'] = {'Cite Cambridge History of China'},
['CITEREFTer-Ghewondyan1976'] = {'The Arab Emirates in Bagratid Armenia'},
['CITEREFThe_London_Gazette1950'] = {'London Gazette'},
['CITEREFThe_London_Gazette_26_September_1919'] = {'London Gazette'},
['CITEREFThielemann2012'] = {'Bach\'s compositions (sources)'},
['CITEREFThomas1970'] = {'HistoryofParliament'},
['CITEREFThomas1971'] = {'Thomas-History-VI'},
['CITEREFThrush2010'] = {'HistoryofParliament'},
['CITEREFTikhomirov2001'] = {'Springer'},
['CITEREFTittel1966'] = {'Bach\'s compositions (sources)'},
['CITEREFTodt1996'] = {'BBKL'},
['CITEREFTodtVest2014'] = {'Tabula Imperii Byzantini'},
['CITEREFTolkien1937'] = template_names['ME-ref'],
['CITEREFTolkien1954'] = template_names['ME-ref'],
['CITEREFTolkien1955'] = template_names['ME-ref'],
['CITEREFTolkien1964'] = template_names['ME-ref'],
['CITEREFTolkien1966'] = template_names['ME-ref'],
['CITEREFTolkien1977'] = template_names['ME-ref'],
['CITEREFTolkien1980'] = template_names['ME-ref'],
['CITEREFTolkien1982'] = template_names['ME-ref'],
['CITEREFTolkien1983'] = template_names['ME-ref'],
['CITEREFTolkien1984'] = template_names['ME-ref'],
['CITEREFTolkien1985'] = template_names['ME-ref'],
['CITEREFTolkien1986'] = template_names['ME-ref'],
['CITEREFTolkien1987'] = template_names['ME-ref'],
['CITEREFTolkien1988'] = template_names['ME-ref'],
['CITEREFTolkien1989'] = template_names['ME-ref'],
['CITEREFTolkien1990'] = template_names['ME-ref'],
['CITEREFTolkien1992'] = template_names['ME-ref'],
['CITEREFTolkien1993'] = template_names['ME-ref'],
['CITEREFTolkien1994'] = template_names['ME-ref'],
['CITEREFTolkien1996'] = template_names['ME-ref'],
['CITEREFTolkien1998'] = template_names['ME-ref'],
['CITEREFTolkien1999'] = template_names['ME-ref'],
['CITEREFTolkien2007'] = template_names['ME-ref'],
['CITEREFTolkienSwann1978'] = template_names['ME-ref'],
['CITEREFTolkienTolkien1992'] = template_names['ME-ref'],
['CITEREFTonks1988'] = {'Tonks ironstone'},
['CITEREFTonks1989'] = {'Tonks ironstone'},
['CITEREFTonks1992'] = {'Tonks ironstone'},
['CITEREFTorri2013'] = {'Bach\'s compositions (sources)'},
['CITEREFTougher2018'] = template_names['ODLA'],
['CITEREFToumanoff1986'] = template_names['Iranica'],
['CITEREFToumanoff2010'] = template_names['Iranica'],
['CITEREFToumanoffChaumont1987'] = template_names['Iranica'],
['CITEREFTourret1995'] = {'Tourret-Allied Military Locomotives'},
['CITEREFTrapp1991'] = template_names['ODB'],
['CITEREFTrappBeyerSturm-Schnabl1983'] = {'Prosopographisches Lexikon der Palaiologenzeit'},
['CITEREFTrappWaltherBeyer1976'] = {'Prosopographisches Lexikon der Palaiologenzeit'},
['CITEREFTrappWaltherBeyerSturm-Schnabl1978'] = {'Prosopographisches Lexikon der Palaiologenzeit'},
['CITEREFTreadgold1988'] = {'The Byzantine Revival, 780–842'},
['CITEREFTreadgold1997'] = {'A History of the Byzantine State and Society'},
['CITEREFTrèves2006'] = {'Trèves François Topological vector spaces, distributions and kernels'},
['CITEREFTucker2009'] = {'Encyclopaedia Islamica'},
['CITEREFTurim1998'] = {'Turim-oshima'},
['CITEREFTuring1950'] = {'Turing 1950'},
----------< U >----------
['CITEREFUS-NHub_Music_Deposit_31_(Klavierbüchlein_für_W._F._Bach)_at_Bach_Digital'] = {'Bach\'s compositions (sources)'},
['CITEREFUtas2002'] = template_names['Iranica'],
['CITEREFUwe_Eckardt2001'] = {'BBKL'},
['CITEREFunknown_author1881'] = {'Cite ADB'},
['CITEREFunknown_author1882'] = {'Cite ADB'},
----------< V >----------
['CITEREFVakalopoulos1975'] = {'Ιστορία του Ελληνικού Έθνους'},
['CITEREFVan_Cleve1969'] = {'Setton-A History of the Crusades'},
['CITEREFVan_Hoorickx1971'] = {'Schubert\'s compositions (references)'},
['CITEREFVan_Hoorickx_1974–1976'] = {'Schubert\'s compositions (references)'},
['CITEREFVan_Lint2018'] = template_names['ODLA'],
['CITEREFVan_Riemsdijk,_Compound_Locomotives'] = {'Book-Van Riemsdijk-Compound Locomotives'},
['CITEREFVan_Tricht2011'] = {'The Latin Renovatio of Byzantium'},
['CITEREFVandenberghen1989'] = {'Vandenberghen-SNCB12.2'},
['CITEREFVarzos1984'] = {'Η Γενεαλογία των Κομνηνών', 'Varzos-Genealogy of the Komnenoi'},
['CITEREFVasiliev1935'] = {'Byzance et les Arabes'},
['CITEREFVasiliev1968'] = {'Byzance et les Arabes'},
['CITEREFVendler1997'] = {'Shakespeare sonnets bibliography'},
['CITEREFVenetis2012'] = template_names['Iranica'],
['CITEREFVenn1954'] = {'VennAC'},
['CITEREFVesel1999'] = template_names['Iranica'],
['CITEREFVetter1713'] = {'Bach\'s compositions (sources)'},
['CITEREFVevainaCanepa2018'] = template_names['ODLA'],
['CITEREFVeysey1958'] = {'Veysey-PE-1958'},
['CITEREFVischer1912'] = {'Schaff-Herzog'},
['CITEREFVogelsang2003'] = template_names['Iranica'],
['CITEREFVolkmer1991'] = {'Volkmer-Pennsy-Electric'},
['CITEREFvan_Leyden1956'] = {'Bach\'s compositions (sources)'},
['CITEREFvan_Lint2018'] = template_names['ODLA'],
['CITEREFvon_Prantl1879'] = {'Cite ADB'},
----------< W >----------
['CITEREFWagnerBäzoldZschechLüderitz1990'] = {'Wagner-EFA2.3.2'},
['CITEREFWalter_Asmus1966'] = template_names['NDB'],
['CITEREFWayner1972'] = {'Wayner - Car names, numbers, consists'},
['CITEREFWayner1973'] = {'Wayner-Spotter-2nd'},
['CITEREFWebb2018'] = template_names['ODLA'],
['CITEREFWeber2016'] = template_names['Iranica'],
['CITEREFWechsler1979'] = {'Cite Cambridge History of China'},
['CITEREFWegman2008'] = {'Wegman-Illustrated'},
['CITEREFWeibel1994'] = {'Weibel IHA'},
['CITEREFWeinrebHibbertKeayKeay2008'] = {'London encyclopedia'},
['CITEREFWeisbrod1991'] = {'Weisbrod-EFA1.5'},
['CITEREFWeisbrodMüllerPetznik1978'] = {'Weisbrod-EFA1.2'},
['CITEREFWeiskopf1987'] = template_names['Iranica'],
['CITEREFWeiskopf1989'] = template_names['Iranica'],
['CITEREFWeiskopf1990'] = template_names['Iranica'],
['CITEREFWeiskopf1993'] = template_names['Iranica'],
['CITEREFWellhausen1927'] = {'The Arab Kingdom and its Fall'},
['CITEREFWells1982'] = {'Accents of English'},
['CITEREFWells2008'] = {'Cite LPD'},
['CITEREFWelsh2006'] = {'Welsh-Broadway'},
['CITEREFWelsh2008'] = {'Welsh-UP'},
['CITEREFWerner_Raupp2001'] = {'BBKL'},
['CITEREFWestcott1911'] = {'DCBL'},
['CITEREFWestermayer,_Georg1882'] = {'Cite ADB'},
['CITEREFWham1997'] = {'Wham-Ayrshire'},
['CITEREFWharton1991'] = template_names['ODB'],
['CITEREFWhishaw1842'] = {'Whishaw-RailofGB-2ndEd'},
['CITEREFWhishaw1969'] = {'Whishaw-RailofGB'},
['CITEREFWhite1985'] = {'White-Passenger-1985'},
['CITEREFWhite1993'] = {'White - American railroad freight car'},
['CITEREFWhiteWillenskyLeadon2010'] = {'Cite aia5'},
['CITEREFWhitehurst1973'] = {'Whitehurst GW Engines from 1940'},
['CITEREFWhittow1996'] = {'The Making of Byzantium, 600–1025'},
['CITEREFWickman1982'] = {'Country study'},
['CITEREFWiesehöfer1986'] = template_names['Iranica'],
['CITEREFWiesehöfer2018'] = template_names['ODLA'],
['CITEREFWilansky2013'] = {'Wilansky Modern Methods in Topological Vector Spaces'},
['CITEREFWillard2004'] = {'Willard General Topology'},
['CITEREFWilliams1998'] = {'Williams-Philadelphia'},
['CITEREFWilliams2003'] = {'Bach\'s compositions (sources)'},
['CITEREFWilliams2014'] = template_names['Iranica'],
['CITEREFWillis1750'] = {'Cite Notitia Parliamentaria'},
['CITEREFWilson2017'] = {'Wilson-Guide'},
['CITEREFWilsonFiske1891'] = {'Appletons\'', 'Cite Appletons\'', 'Appletons'},
['CITEREFWilsonFiske1892'] = {'Appletons\'', 'Cite Appletons\'', 'Appletons'},
['CITEREFWilsonFiske1900'] = {'Appletons\'', 'Cite Appletons\'', 'Appletons'},
['CITEREFWiltshire2000'] = {'Lloyd-Margaret River'},
['CITEREFWinfieldLyon2004'] = {'Winfield'},
['CITEREFWinkler1883'] = template_names['ADB'],
['CITEREFWitakowski2018'] = template_names['ODLA'],
['CITEREFWolff1969'] = {'Setton-A History of the Crusades'},
['CITEREFWollny2015'] = {'Bach\'s compositions (sources)'},
['CITEREFWood1907'] = {'Cite Nuttall', 'Nuttall'},
['CITEREFWoodsKilpatrick2005'] = {'MSW3 Hystricognathi'},
['CITEREFWorden2008'] = {'Country study'},
['CITEREFWortley2010'] = {'John Skylitzes: A Synopsis of Byzantine History, 811–1057'},
['CITEREFWozencraft2005'] = {'MSW3 Carnivora'},
['CITEREFWright1979'] = {'Cite Cambridge History of China'},
['CITEREFWright2000'] = {'Bach\'s compositions (sources)'},
['CITEREFWägliJacobi2010'] = {'Schienennetz Schweiz'},
['CITEREFWürsch2013'] = template_names['Iranica'],
----------< X >----------
----------< Y >----------
['CITEREFYakubova2016'] = template_names['Iranica'],
['CITEREFYarshater1983'] = template_names['Iranica'],
['CITEREFYarshater1986'] = template_names['Cam_Hist_Iran'],
['CITEREFYarshater1988'] = template_names['Iranica'],
['CITEREFYarshater2018'] = template_names['Iranica'],
['CITEREFYarshater2021'] = template_names['Iranica'],
['CITEREFYazici2002'] = template_names['Iranica'],
['CITEREFYenne2005'] = {'Yenne-Chiefs'},
['CITEREFYildiz2004'] = template_names['Iranica'],
['CITEREFYonge1990'] = {'Quail-4'},
['CITEREFYonge1994'] = {'Quail-5'},
['CITEREFYonge2002'] = {'Quail-5'},
['CITEREFYonge2008'] = {'Quail-5'},
['CITEREFYonge2016'] = {'Quail-2-2016'},
['CITEREFYongePadgettSzwenk2013'] = {'Quail-4-Paper-3rdEd'},
['CITEREFYusofi1990'] = template_names['Iranica'],
----------< Z >----------
['CITEREFZahn1889–1893'] = {'Bach\'s compositions (sources)'},
['CITEREFZakeri2021'] = template_names['Iranica'],
['CITEREFZarrinkoubNegahban2008'] = {'Encyclopaedia Islamica'},
['CITEREFZarrinkub1975'] = template_names['Cam_Hist_Iran'],
['CITEREFZeiniWiesehöfer2018'] = template_names['ODLA'],
['CITEREFZekulich2000'] = {'Zekulich-WineWA'},
['CITEREFZimmermann2004'] = {'Zimmermann-Burlington'},
['CITEREFZimmermann2007'] = {'Zimmermann-GrandLuxe'},
['CITEREFZuccaric._1747'] = {'Bach\'s compositions (sources)'},
----------< UNSORTED >----------
['CITEREFGazette27462'] = {'London Gazette'},
['CITEREFCawley2012'] = {'Medieval Lands by Charles Cawley'},
['CITEREFCrone2003'] = {'Slaves on Horses'},
['CITEREFΙστορία_του_Ελληνικού_Έθνους'] = {'Ιστορία του Ελληνικού Έθνους'},
['CITEREFSpyropoulos1928'] = {'Great Military and Naval Encyclopaedia'},
['CITEREFPikros1977'] = {'Ιστορία του Ελληνικού Έθνους'},
['CITEREFÖz1993'] = {'TDV Encyclopedia of Islam'},
['CITEREFÖzgüdenli2008'] = template_names['Iranica'],
['CITEREFÖzaydın2002'] = {'TDV Encyclopedia of Islam'},
['CITEREFÖzaydın2006'] = {'TDV Encyclopedia of Islam'},
['CITEREFÖzkuyumcu2006'] = {'TDV Encyclopedia of Islam'},
['CITEREFÖztürk2013'] = {'TDV Encyclopedia of Islam'},
['CITEREFΜεγάλη_Στρατιωτικὴ_καὶ_Ναυτικὴ_Ἐγκυκλοπαιδεία'] = {'Great Military and Naval Encyclopaedia'},
['CITEREFŞeşen1988'] = {'TDV Encyclopedia of Islam'},
['CITEREFFranke1994'] = {'Cite Cambridge History of China', 'The Cambridge History of China'},
['CITEREFTao2009'] = {'Cite Cambridge History of China', 'The Cambridge History of China'},
['CITEREFWechsler1979'] = {'Cite Cambridge History of China', 'The Cambridge History of China'},
['CITEREFWright1979'] = {'Cite Cambridge History of China', 'The Cambridge History of China'},
['CITEREFHistoric_England_Benty_Grange'] = {'NHLE'},
['CITEREFWalter1967'] = {'DBI', 'Dizionario Biografico degli Italiani'},
['CITEREFAliprantisBorder2006'] = {'Aliprantis Border Infinite Dimensional Analysis A Hitchhiker\'s Guide Third Edition'},
['CITEREFAmanat1985'] = template_names['Iranica'],
['CITEREFBaldwin1991'] = template_names['ODB'],
['CITEREFCallwell1999'] = {'Muni Chronology'},
['CITEREFHalmos1982'] = {'Halmos A Hilbert Space Problem Book 1982'},
['CITEREFHistoric_England'] = {'NHLE', 'National Heritage List for England'},
['CITEREFHitchins2001'] = template_names['Iranica'],
['CITEREFJohnson1906'] = {'BDA1906', 'Cite BDA1906'},
['CITEREFMachinery's_Handbook1996'] = {'MachinerysHandbook25e'},
['CITEREFMatthee2012'] = template_names['Iranica'],
['CITEREFNicholson2018'] = template_names['ODLA'],
['CITEREFNicol1968'] = {'The Byzantine Family of Kantakouzenos'},
['CITEREFWilsonFiske1889'] = {'Appletons\'', 'Cite Appletons\'', 'Appletons'},
['CITEREFTolkien1954a'] = template_names['ME-ref'],
['CITEREFShippey2005'] = template_names['ME-ref'],
['CITEREFColvin1947'] = {'Colvin1947'},
['CITEREFSorensen1956'] = {'Sorensen1956'},
['CITEREFBosworth1999'] = template_names['Iranica'],
['CITEREFGregoryKazhdan1991'] = template_names['ODB'],
['CITEREFKelley1975'] = {'Kelley General Topology'},
['CITEREFIacocca1984'] = {'Iacocca1984'},
['CITEREFNestruev2020'] = {'Nestruev Smooth Manifolds and Observables 2020'},
['CITEREFOrmsby1982'] = {'Cite DCB'},
['CITEREFVentura1963'] = {'DBI', 'Dizionario Biografico degli Italiani'},
['CITEREFZălinescu2002'] = {'Zălinescu Convex Analysis in General Vector Spaces 2002'},
['CITEREFGreenwoodEarnshaw1997'] = {'Greenwood&Earnshaw2nd'},
['CITEREFMullié1852'] = {'Cite Mullié', 'Mullié'},
['CITEREFEl-Hibri2021'] = {'The Abbasid Caliphate: A History'},
['CITEREFHolland1989'] = {'Holland1989'},
['CITEREFHowes1995'] = {'Howes Modern Analysis and Topology 1995'},
['CITEREFRockafellarWets2009'] = {'Rockafellar Wets Variational Analysis 2009 Springer'},
['CITEREFSearle1980'] = {'Searle 1980'},
['CITEREFVan_Riemsdijk1994'] = {'Book-Van Riemsdijk-Compound Locomotives'},
['CITEREFGaines2008'] = {'Cite Gaines 2008'},
['CITEREFSmid2008'] = {'Smid2008'},
['CITEREFSmid2010'] = {'Smid2010'},
['CITEREFNesbittOikonomides1991'] = {'Catalogue of Byzantine Seals at Dumbarton Oaks and in the Fogg Museum of Art'},
['CITEREFNesbittOikonomides1994'] = {'Catalogue of Byzantine Seals at Dumbarton Oaks and in the Fogg Museum of Art'},
['CITEREFNesbittOikonomides1996'] = {'Catalogue of Byzantine Seals at Dumbarton Oaks and in the Fogg Museum of Art'},
['CITEREFMcGeerNesbittOikonomides2001'] = {'Catalogue of Byzantine Seals at Dumbarton Oaks and in the Fogg Museum of Art'},
['CITEREFMcGeerNesbittOikonomides2005'] = {'Catalogue of Byzantine Seals at Dumbarton Oaks and in the Fogg Museum of Art'},
['CITEREFNesbittMorrisson2009'] = {'Catalogue of Byzantine Seals at Dumbarton Oaks and in the Fogg Museum of Art'},
['CITETEFCotsonis2020'] = {'Catalogue of Byzantine Seals at Dumbarton Oaks and in the Fogg Museum of Art'},
['CITEREFTolkienSwann2002'] = {'ME-ref'},
['CITEREFApostol1976'] = {'Apostol IANT'},
['CITEREFBournoutian2018'] = {'Cite Armenia and Imperial Decline'},
['CITEREFCsászár1978'] = {'Császár General Topology'},
['CITEREFHovannisian1971'] = {'Cite The Republic of Armenia Volume 1'},
['CITEREFКавказский_календарь_на_1913_год'] = {'Cite Kavkazskiy Kalendar 1913'},
['CITEREFКавказский_календарь_на_1917_год'] = {'Cite Kavkazskiy Kalendar 1917'},
['CITEREFLang2002'] = {'Lang Algebra'},
['CITEREFLurie'] = {'Lurie-HA'},
['CITEREFTsutsiev2014'] = {'Cite Atlas of the Ethno-Political History of the Caucasus'},
['CITEREFVenables1911'] = {'DCBL'},
['CITEREFWilansky2008'] = {'Wilansky Topology for Analysis 2008'},
['CITEREFKazemzadeh1951'] = {'The Struggle for Transcaucasia'},
['CITEREFNicol1984'] = {'The Despotate of Epiros, 1267–1479'},
['CITEREFKorkotyan1932'] = {'Cite The Population of Soviet Armenia'},
['CITEREFHalm1991'] = {'Das Reich des Mahdi'},
['CITEREFHalm2014'] = {'Kalifen und Assassinen'},
['CITEREFHovannisian1982'] = {'Cite The Republic of Armenia Volume 2'},
['CITEREFHovannisian1996a'] = {'Cite The Republic of Armenia Volume 3'},
['CITEREFHovannisian1996b'] = {'Cite The Republic of Armenia Volume 4'},
['CITEREFHovannisian1967'] = {'Cite Armenia on the Road to Independence'},
['CITEREFKazemzadeh1951'] = {'Cite The Struggle for Transcaucasia'},
['CITEREFКавказский_календарь_на_1910_год'] = {'Cite Kavkazskiy Kalendar 1910'},
['CITEREFКавказский_календарь_на_1915_год'] = {'Cite Kavkazskiy Kalendar 1915'},
['CITEREFNicol1994'] = {'The Byzantine Lady: Ten Portraits, 1250–1500'},
['CITEREFTolkien1979'] = {'ME-ref'},
['CITEREFTopping1975'] = {'Setton-A History of the Crusades', 'Wisconsin History of the Crusades'},
['CITEREFHalm2003'] = {'Die Kalifen von Kairo'},
}
--[[--------------------------< E X P O R T E D T A B L E S >------------------------------------------------
]]
return {
DNB_special_patterns = DNB_special_patterns,
DNB_template_names = template_names['DNB'],
special_patterns = special_patterns,
whitelist = whitelist,
wrapper_templates = wrapper_templates,
}
7gp0rm44clczc433u6oy7q5dr6pw7ib
Template:More citations needed
10
10160967
1036150355
1035974784
2021-07-29T20:09:41Z
Wugapodes
24484530
[[Wikipedia:Templates for discussion/Log/2021 July 28#Template:More citations needed section]] closed as keep ([[WP:XFDC#4.0.12|XFDcloser]])
wikitext
text/x-wiki
{{SAFESUBST:<noinclude />#invoke:Unsubst||date=__DATE__ |$B=
{{Ambox
| name = {{{name|More citations needed}}}
| small = {{#if:{{{small|}}}|left}}
| type = content
| class = ambox-Refimprove
| image = [[File:Question book-new.svg|50x40px|alt=]]
| issue = This {{#if:{{{1|}}}|{{{1}}}|article}} '''needs additional citations for [[Wikipedia:Verifiability|verification]]'''.
| fix = Please help [{{fullurl:{{FULLPAGENAME}}|action=edit}} improve this article] by [[Help:Referencing for beginners|adding citations to reliable sources]]. Unsourced material may be challenged and removed.{{#if:{{{find2|{{{unquoted|}}}}}}| <br /><small>{{find sources mainspace|{{#if:{{{find|}}}|{{{find}}}|.}}|{{{find2|{{{unquoted|}}}}}}}}</small> |{{#if:{{{find|}}}|{{#ifeq: {{{find|}}} |none ||<br /><small>{{find sources mainspace|{{{find}}} }}</small>}}|<br /><small>{{find sources mainspace}}</small>}} }}
| removalnotice = yes
| talk = {{{talk|}}}
| date = {{{date|}}}
| cat = Articles needing additional references
| all = All articles needing additional references
}}
}}<noinclude>
<!-- Please add categories to the /doc subpage, thanks -->
{{Documentation}}
</noinclude>
49lgo5o0t5abyeszktk8s2h6gqbr6eh
Module:Message box/ambox.css
828
61270105
1097763485
1097270771
2022-07-12T15:25:07Z
Izno
2927383
hack around mf being opinionated
sanitized-css
text/css
/* {{pp|small=y}} */
.ambox {
border: 1px solid #a2a9b1;
/* @noflip */
border-left: 10px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
/* Single border between stacked boxes. Take into account base templatestyles,
* user styles, and Template:Dated maintenance category.
* remove link selector when T200206 is fixed
*/
.ambox + link + .ambox,
.ambox + link + style + .ambox,
.ambox + link + link + .ambox,
/* TODO: raise these as "is this really that necessary???". the change was Dec 2021 */
.ambox + .mw-empty-elt + link + .ambox,
.ambox + .mw-empty-elt + link + style + .ambox,
.ambox + .mw-empty-elt + link + link + .ambox {
margin-top: -1px;
}
/* For the "small=left" option. */
/* must override .ambox + .ambox styles above */
html body.mediawiki .ambox.mbox-small-left {
/* @noflip */
margin: 4px 1em 4px 0;
overflow: hidden;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
.ambox-speedy {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
.ambox-delete {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
}
.ambox-content {
/* @noflip */
border-left: 10px solid #f28500; /* Orange */
}
.ambox-style {
/* @noflip */
border-left: 10px solid #fc3; /* Yellow */
}
.ambox-move {
/* @noflip */
border-left: 10px solid #9932cc; /* Purple */
}
.ambox-protection {
/* @noflip */
border-left: 10px solid #a2a9b1; /* Gray-gold */
}
.ambox .mbox-text {
border: none;
/* @noflip */
padding: 0.25em 0.5em;
width: 100%;
}
.ambox .mbox-image {
border: none;
/* @noflip */
padding: 2px 0 2px 0.5em;
text-align: center;
}
.ambox .mbox-imageright {
border: none;
/* @noflip */
padding: 2px 0.5em 2px 0;
text-align: center;
}
/* An empty narrow cell */
.ambox .mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
.ambox .mbox-image-div {
width: 52px;
}
/* Hack around MobileFrontend being opinionated */
html.client-js body.skin-minerva .mbox-text-span {
margin-left: 23px !important;
}
@media (min-width: 720px) {
.ambox {
margin: 0 10%; /* 10% = Will not overlap with other elements */
}
}
4uo84hdwizsmv7kmpu8kgevjeag35wk