Wikipedia zuwiki https://zu.wikipedia.org/wiki/Ikhasi_Elikhulu MediaWiki 1.47.0-wmf.10 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 TimedText TimedText talk Module Module talk Event Event talk INyanga 0 4296 126077 124218 2026-07-15T08:43:34Z Fongcwele 16873 126077 wikitext text/x-wiki {{Lowercase title}} {{infobox planet | name = Moon | apsis = gee | symbol = [[File:Moon decrescent symbol (bold).svg|24px|☾|class=skin-invert]] or [[File:Moon crescent symbol (bold).svg|24px|☽|class=skin-invert]] | image = FullMoon2010.jpg | image_alt = Full Moon in the darkness of the night sky. It is patterned with a mix of light-tone regions and darker, irregular blotches, and scattered with varied circles surrounded by out-thrown rays of bright ejecta: impact craters. | caption = The [[near side of the Moon]] with the [[lunar north pole]] at the top | background = #fcbba9 | mpc_name = Earth I | alt_names = {{hlist |[[Luna (goddess)|Luna]] |{{nowrap|[[Selene]] (poetic)}}|{{nowrap|[[wikt:Cynthia|Cynthia]] (poetic)}}}} | adjectives = | periapsis = {{gaps |362 |600}}&nbsp;km<br />({{gaps |356 |400}}–{{gaps |370 |400}}&nbsp;km) | apoapsis = {{gaps |405 |400}}&nbsp;km<br />({{gaps |404 |000}}–{{gaps |406 |700}}&nbsp;km) | mean_orbit_radius = {{val |384784|u=km}}<ref name="NASAfactsheet" /><br/>({{val |1.28 |u=[[light-second|ls]]}}; 1/384 [[Astronomical unit|AU]]; {{val |1.001|ul=LD}}) | semimajor = {{val |384399 |u=km}}{{nbsp |2}}({{val |1.28 |u=[[light-second|ls]]}}; 1/389 [[Astronomical unit|AU]]; {{val |1 |ul=LD}})<ref name="W06"/> | eccentricity = {{val |0.0549}}<ref name="W06"/> | period = {{longitem |{{val|27.321661 |ul=d}}<br />(27&nbsp;d 7&nbsp;h 43&nbsp;min 11.5&nbsp;s<ref name="W06"/>)}} | synodic_period = {{longitem|{{val |29.530589 |u=d}}<br />(29&nbsp;d 12&nbsp;h 44&nbsp;min 2.9&nbsp;s)}} | avg_speed = {{val|1.022|ul=km/s}} | inclination = 5.145° to the [[ecliptic]]<ref name="Lang2011"/>{{efn|name=inclination|Between 18.29° and 28.58° to Earth's [[equator]]<ref name="W06"/><!--Wieczorek et al. 2006; 18.29° when the longitude of the Moon's ascending node is 180°, 28.58° when it is 0°-->}} | asc_node = {{longitem|[[Lunar precession#Nodal precession|Regressing]] by one revolution in 18.61&nbsp;years}} | arg_peri = {{longitem|[[Lunar precession#Apsidal precession|Progressing]] by one<br /> revolution in 8.85&nbsp;years}} | satellite_of = [[Earth]]{{efn|name=near-Earth asteroids}}<ref name="Morais2002"/> | flattening = {{val|0.0012}}<ref name="NSSDC"/> | equatorial_radius = {{val|1738.1 |u=km}}{{nbsp |2}}<br />(0.2725 of Earth's)<ref name="NSSDC"/> | polar_radius = {{val|1736.0|u=km}}{{nbsp|2}}<br />(0.2731 of Earth's)<ref name="NSSDC"/> | mean_radius = {{val|1737.4|u=km}}{{nbsp|2}}<br />(0.2727 of Earth's)<ref name="W06"/><ref name="NSSDC"/><ref>{{cite journal |last1=Smith |first1=David E. |last2=Zuber |first2=Maria T. |last3=Neumann |first3=Gregory A. |last4=Lemoine |first4=Frank G. |title=Topography of the Moon from the Clementine lidar |journal=[[Journal of Geophysical Research]] |date=1997 |volume=102 |issue=E1 |page=1601 |doi=10.1029/96JE02940 |bibcode=1997JGR...102.1591S |hdl=2060/19980018849 |hdl-access=free }}</ref> | circumference = {{val|10921|u=km}}{{nbsp |2}}([[equator]]ial) | surface_area = {{val|3.793|e=7|u=km2}}{{nbsp|2}}<br />(0.074 of Earth's) | volume = {{val|2.1958|e=10|u=km3}}{{nbsp |2}}<br />(0.02 of Earth's)<ref name="NSSDC"/> | mass = {{val|7.346|e=22|u=kg}}{{nbsp |2}}<br />({{val|0.0123}} of Earth's)<ref name="W06"/><ref name="NSSDC"/><ref>{{cite book |title=Top 10 of Everything |first=Paul |last=Terry |publisher=Octopus Publishing Group Ltd |year=2013 |isbn=978-0-600-62887-3 |page=226}}</ref> | density = {{val|3.344|ul=g/cm3}}<ref name="W06"/><ref name="NSSDC"/><br />{{val|0.606}} × Earth | surface_grav = {{cvt|1.622|m/s2|ft/s2}}<ref name="NSSDC"/><br />{{cvt|1.622|m/s2|g0|disp=out|lk=out}} | moment_of_inertia_factor = {{val|0.3929|0.0009}}<ref name="Williams1996" /> | escape_velocity = {{convert|2.38|km/s|km/h mph|comma=gaps|abbr=on|disp=x|<br />(|)}} | rotation = {{longitem|{{val|29.530589|u=d}}<br />(29&nbsp;d 12&nbsp;h 44&nbsp;min 2.9&nbsp;s; [[synodic day|synodic; solar day]]) ([[tidal locking|spin-orbit locked]])}} | sidereal_day = {{val|27.321661|u=d}}{{nbsp|2}}(spin-orbit locked) <!-- Wieczorek et al. 2006 -->| rot_velocity = {{nowrap|4.627 m/s}} | axial_tilt = {{ublist|1.5424° to [[ecliptic]]<ref name="SolarViews" /><!--1.533° according to Conn 2007-->|6.687° to [[Orbital plane (astronomy)|orbit plane]]<ref name="Lang2011"/><!--6.4° according to Grego;<ref name="Grego2005">Grego, Peter, [https://books.google.com/books?id=z6Pgt9xEW9gC&pg=PA48 ''The Moon and How to Observe It''], Springer, 2005</ref> 6.6783° according to Conn.<ref name="Conn2007">Conn, David (2007); ''Lednorf's Dilemma'', AuthorHouse, Bloomington (IN)</ref>-->|24° to Earth's equator<ref>{{cite journal |last=Makemson |first=Maud W. |year=1971 |title=Determination of selenographic positions |journal=The Moon |volume=2 |issue=3 |pages=293–308 |doi=10.1007/BF00561882 |bibcode=1971Moon....2..293M }}</ref>}} | epoch = [[J2000]] | uncertainty = 0 | right_asc_north_pole = {{plainlist| * {{RA|17|47|26}} * 266.86°<ref name="report">{{cite journal |last1=Archinal |first1=B.A. |last2=A'Hearn |first2=M.F. |last3=Bowell |first3=E. |last4=Conrad |first4=A. |last5=Consolmagno |first5=G.J. |last6=Courtin |first6=R. |last7=Fukushima |first7=T. |last8=Hestroffer |first8=D. |last9=Hilton |first9=J.L. |last10=Krasinsky |first10=G.A. |last11=Neumann |first11=G. |last12=Oberst |first12=J. |last13=Seidelmann |first13=P. K. |last14=Stooke |first14=P. |last15=Tholen |first15=D.J. |last16=Thomas |first16=P.C. |last17=Williams |first17=I.P. |title=Report of the IAU Working Group on Cartographic Coordinates and Rotational Elements: 2009 |journal=Celestial Mechanics and Dynamical Astronomy |volume=109 |issue=2 |pages=101–135 |date=February 2011 |bibcode=2011CeMDA.109..101A |doi=10.1007/s10569-010-9320-4}}</ref> }} | declination = 65.64°<ref name="report" /> | albedo = {{val|0.136}}<ref name="Saari"/> | temp_name1 = Equator | min_temp_1 = 100&nbsp;[[Kelvin|K]]<ref name=Bugby_et_al_2010/> | mean_temp_1 = 250&nbsp;K | max_temp_1 = 390&nbsp;K<ref name=Bugby_et_al_2010>{{cite conference |last1=Bugby |first1=D.C. |last2=Farmer |first2=J.T. |last3=O'Connor |first3=B.F. |last4=Wirzburger |first4=M.J. |last5=Abel |first5=E.D. |last6=Stouffer |first6=C.J. |title=Two-Phase Thermal Switching System for a Small, Extended Duration Lunar Surface Science Platform |series=AIP Conference Proceedings |volume=1208 |pages=76–83 |date=January 2010 |bibcode=2010AIPC.1208...76B |hdl=2060/20100009810 |hdl-access=free |doi=10.1063/1.3326291}}</ref> | temp_name2 = 85°N&nbsp; | min_temp_2 = | mean_temp_2 = 150&nbsp;K | max_temp_2 = 230&nbsp;K<ref name="Vasavada1999"/> | surface_equivalent_dose_rate = {{convert |1.369 |mSv/d |μSv/h |disp=out}}<br />(during lunar daytime)<ref name="surface-radiation">{{Cite journal |vauthors=Zhang S, Wimmer-Schweingruber RF, Yu J, Wang C, Fu Q, Zou Y, Sun Y, Wang C, Hou D, Böttcher SI, Burmeister S |display-authors=6 |title=First measurements of the radiation dose on the lunar surface |journal=Science Advances |year=2020 |volume=6 |issue=39 |article-number=eaaz1334 |doi=10.1126/sciadv.aaz1334 |pmc=7518862 |pmid=32978156 |bibcode=2020SciA....6.1334Z |quote=We measured an average total absorbed dose rate in silicon of 13.2 ± 1 μGy/hour ... LND measured an average dose equivalent of 1369 μSv/day on the surface of the Moon}}</ref> | surface_absorbed_dose_rate = 13.2 μGy/h<br />(during lunar [[daytime]])<ref name="surface-radiation"/> | magnitude = {{ublist|−2.5 to −12.9{{efn |name=maxval}}|−12.74{{nbsp |2}}(mean [[full moon]])<ref name="NSSDC"/>}} | abs_magnitude = 0.2<ref name="IMCCE">{{cite web |title=Encyclopedia – the brightest bodies |website=IMCCE |url=https://promenade.imcce.fr/en/pages1/101.html |access-date=June 1, 2023 |archive-date=March 21, 2023 |archive-url=https://web.archive.org/web/20230321023334/https://promenade.imcce.fr/en/pages1/101.html |url-status=live}}</ref> | angular_size = 29.3 to 34.1 [[arcminutes]]<ref name="NSSDC"/>{{efn |name=angular size}} | atmosphere = trace | atmosphere_ref = <ref name="L06"/> | surface_pressure = {{ublist |10{{sup |−7}} [[Pascal (unit)|Pa]] (1 [[picobar]]){{nbsp |2}}(day) |10{{sup |−10}} Pa (1 femtobar) {{nbsp |2}} <br />(night){{efn |name=pressure explanation}}}} | atmosphere_composition = {{hlist|[[Helium|He]]|[[Argon|Ar]]|[[Neon|Ne]]|[[Sodium|Na]]|[[Potassium|K]]|[[Hydrogen|H]]}} }} [[File:Full_Moon_Luc_Viatour.jpg|thumb|iNyanga edilingene]] '''iNyanga''' (uphawu: [[file:Moon decrescent symbol (bold).svg|16px|☾]]) iwukuphela [[Iduna|kweduna]] elizungeza [[uMhlaba]]. INyanga izungeza uMhlaba isebangeni elingamakhilomitha ayizi-384,399. INyanga iqeda uzungezo lwayo ngesikhathi esiyinyanga eyodwa, noma ngezinsuku ezingama-29.5. INyanga noMhlaba zibanjwe ukuheha [[UmNyondo|komnyondo]] onamandla emacaleni azo abukene. Lokhu kwenza kube neziphoqi zamabuya okuyizona ezidala amabuya eMhlabeni, futhi zadonsa iNyanga ukuba ibuke uMhlaba ngohlangothi olulodwa kuphela. Lokhu kukhweqa kwamabuya ngokomphumela kwenza uzungezo lweNyanga (usuku lwayo) ukuba luhambisane nenkathi ezungeza ngayo uMhlaba (inyanga eyodwa). [[Uzungezohlelo lweLanga|Kuzungezohlelo lweLanga]], iNyanga iyiduna elikhulu nelinesisindo ukwedlula [[Umzulane oyisichwe|nemizulane esichwe]] eyaziwayo, futhi iyiduna lesihlanu elikhulu. Umnyondo wobuso bayo ulingana nengxenye eyodwa yesithupha yomnyondo woMhlaba, okuyisigamu somnyondo kaNotshezi, futhi ungowesibili omkhulu ezinyageni zozungezohlelo lweLanga kulandela inyanga kaMkhulukhulwana ebizwa uSontshaba. Umzimba weNyanga umahlukohluko futhi uhlabathi, unengcosana yamanzimbulunga, umoyambulunga newonga. Ubuso benyanga bumbozw nge-regolith, equkethe izincushuzo eziphafuke egobohleni ngenxa yokugadlazeke. Ingakho kuthiwa umaqubintuli, futhi igobohla lakhe [[Isigqabhozi sokugadlazeka|linezigqabhozi zokugadlazeka]] eziningi. Inyanga yake yaba nobuqhebeqhebe bezintshabamlilo eminyakeni eyisigidinqindi (1.2 billion) edlule. Indabuko yeNyanga ayaziwa, kodwa kukhona abahlawumbisela ukuthi yabumbeka ngezithako zoMhlaba, ezaphafuka lapho ugadlazwa indikimba elingana noNotshezi ebizwa gokuthi uThiyana eminyakeni eyizigidinqindi ezi-4.51 edlule, ngemva kokubumbeka koMhlaba. Ebangeni elikuyo, izimo zobusuku nemini zikamaqubintuli thina sizibona [[Izimo zenyanga|kuyizimo zenyanga]], nalapho iNyanga idlula ethunzini loMhlaba kuba [[UNyezibomvu|noNyezibomvu]]. Ubungako obubonwayo beNyanga esibhakabhakeni cishe balingana nobeLanga, okwenza ukwazi ukulisitheza ngokugcwele lapho [[Insitholanga|kunensitholanga]] egcwele. INyanga iyindikimba eqhakazayo ebusuku ngenxa yokulwentuza ukukhanya. INyanga ibilokhu ingumthombo obalulekile wogqozi nolwazi emlandweni ikakhulu kwezenkolo, ubuciko, [[Inzululwazi yemvelo]], nokundiza emkhathini. Izindizamkhathi zokuqala ezaya endikimbeni esemkhathini zaya eNyangeni, kusuka ngowe-1959 lapho kuyingeleza i-Luna 1 (eyathunyelwa i Soviet Union), Kanye ne- Luna 2 yaba nohlonze emhlabeni wonke, ezalandelwa ngowe-1966 umcababalo othambile we- Luna 9 nozungezo lwe- Luna 10. Abantu baqala ukunyatuela ebusweni heNyanga ngo July 20, 1969, besebenzisa indizamkhathi i-Apollo 11. Ngowe-1972, kwase kuthunyelwe izindizamkhathi iziyisithupha, kwacababala abantu abayishumi nambili eNyangeni. Maduze kulindelwe ukuba uhlelo lwe-Artemis lubuyosele abantu eNyangeni. ==uMsukagama== Igama lesiZulu elithi ''inyanga'' liyibizonto leduna loMhlaba elibonakala ngonyezi ebusuku. Aligcini ekubeni igama lendikimba esemkhathini njengoba kubalwa isikhathi ngokuhambisana nozungezo lwayo. Uzungezo olulodwa lezinsuku ezingama-29 lubizwa iNyanga. Umsuka walo usolimini olwandulela isintu kwelithi -mʊ̀gàngà elisebenza kokubili [[Inyanga (umelaphi)|kumuntu owelaphayo]] nasendikimbeni esemkhathini. Ngokwesichazamazwi sikaVilakazi elinye igama lenyanga nguMaqibuntuli. Elithi 'unyezi' libhekisela ekukhanyeni kwayo ebusuku, lihlobene nesijobelelo esithi ''nyezi'' esisemagameni inkanyezi, ubhaqanyezi, iqhumanyezi. Igama lesiZulu lokuhlonipha lenyanga elithi impengu nelithi inelekehle. ==uMlando wendalo== === Ukubumbeka kwayo === [[File:Big Splash Theia.gif|thumb|Umdwebo onyakazayo obonisa ukubumbeka kwenyanga lapho umzulane, obizwa uNomthiya, olingana noNotshezi ungqubuzana noMhlaba.]] Ukuhlolwa kwamachembe ezangulo zenyanga kusikisela ukuthi inyanga yabumbeka eminyakeni eyizigidi ezingama-50 ngemuva kokuvela [[Uzungezohlelo lweLanga|kozungezohlelo lweLanga]].<ref>{{cite journal |title=Early Moon formation inferred from hafnium-tungsten systematics |last1=Thiemens |first1=Maxwell M. |last2=Sprung |first2=Peter |last3=Fonseca |first3=Raúl O. C. |last4=Leitzke |first4=Felipe P. |last5=Münker |first5=Carsten |journal=Nature Geoscience |volume=12 |issue=9 |pages=696–700 |date=July 2019 |doi=10.1038/s41561-019-0398-3 |pmid=39649009 |bibcode=2019NatGe..12..696T |pmc=7617097}}</ref><ref name="Age">{{cite news |url=https://www.universetoday.com/143025/the-moon-is-older-than-scientists-thought/ |title=The Moon is older than scientists thought |website=Universe Today |access-date=August 3, 2019 |archive-date=August 3, 2019 |archive-url=https://web.archive.org/web/20190803125139/https://www.universetoday.com/143025/the-moon-is-older-than-scientists-thought/ |url-status=live}}</ref> Ngokomlando, kunezindlela ezimbalwa eziphakanyiswayo zokubumbeka kwayo,<ref>{{cite journal |doi=10.1126/sciadv.1602365 |pmid=28097222 |pmc=5226643 |journal=Science Advances |date=2017 |volume=3 |issue=1 |title=Early formation of the Moon 4.51 billion years ago |last=Barboni |first=M. |author2=Boehnke, P. |author3=Keller, C. B. |author4=Kohl, I. E. |author5=Schoene, B. |author6=Young, E. D. |author7=McKeegan, K. D. |article-number=e1602365 |bibcode=2017SciA....3E2365B}}</ref> kodwa ayikho enencazelo echaza izici zohlelo lwenyanga-nomhlaba ngokukholisayo. Abanye bathi inyanga iwucezu olwaklewuka eMhlabeni endulo, abanye bathi inyanga yayizidlulela emkhathini yabanjwa umnyondo woMhlaba, abanye bona bathi uMhlaba nenyanga zadalwa ngesikhathi esisodwa. Kodwa asikho kuzo zonke lezi zihlawumbiselo, esichaza ngengoni yomjijiyane wohlelo lenyanga-nomhlaba.<ref>{{cite journal |last=Stevenson |first=D. J. |title=Origin of the moon–The collision hypothesis |journal=[[Annual Review of Earth and Planetary Sciences]] |date=1987 |volume=15 |issue=1 |pages=271–315 |bibcode=1987AREPS..15..271S |doi=10.1146/annurev.ea.15.050187.001415 }}</ref> Umchachiso oseqhulwini wohlelo lwenyanga-nomhlaba uthi inyanga yabumbeka lapho uMhlaba wanguna ugadlazwa indikimba ewumzulane olingana [[UNotshezi|noNotshezi]], ebizwa uNomthiya. Lokhu kugadlazeka kwaqhumisa futhi kwasakaza izingcezu zoMhlaba esibhakabhakeni futhi zaqala ukuzungeza uMhlaba futhi ihlumelelo lazo labumba inyanga<ref name="taylor1998" /><ref>{{cite web |url=http://news.nationalgeographic.com/2015/04/150416-asteroids-scars-moon-formation-space/ |title=Asteroids Bear Scars of Moon's Violent Formation |date=April 16, 2015 |archive-url=https://web.archive.org/web/20161008160812/http://news.nationalgeographic.com/2015/04/150416-asteroids-scars-moon-formation-space/ |archive-date=October 8, 2016}}</ref> eduze nomngcele kaRoche.<ref>{{cite journal |title=Scaling in global tidal dissipation of the Earth–Moon system |last=van Putten |first=Maurice H. P. M. |journal=New Astronomy |volume=54 |pages=115–121 |date=July 2017 |doi=10.1016/j.newast.2017.01.012 |arxiv=1609.07474 |bibcode=2017NewA...54..115V }}</ref> Kuthiwa ukugadlazeka kwaloluhlobo kwakuyinsakavukela ezinsukwini zokuqala [[Uzungezohlelo lweLanga|kozungezohlelo lweLanga]]. Imifefenyeko yesicikizi yalokhu kungqubuzana iveza iziphumo ezifanayo futhi ezihambisana nesisindo sikaMaqubintuli nengoni yomjijiyane wohlelo lwenyanga-noMhlaba. Le [[UmFefenyeko|mifefenyeko]] ibonisa ukuthi iningi lezakhi zenyanga livela endikimbeni eyagadlaza uMhlaba wanguna..<ref>{{cite journal |last=Canup |first=R. |author1-link=Robin Canup |author2=Asphaug, E. |title=Origin of the Moon in a giant impact near the end of Earth's formation |journal=[[Nature (journal)|Nature]] |volume=412 |pages=708–712 |date=2001 |doi=10.1038/35089010 |pmid=11507633 |issue=6848 |bibcode=2001Natur.412..708C }}</ref> Kodwa, izinongo zowezi-2007 nakamuva zisikisela ukuthi ucezu olukhulu lwenyaga lwaluvela eMhlabeni wanguna.<ref>{{cite magazine |url=http://news.nationalgeographic.com/news/2007/12/071219-moon-collision.html |title=Earth–Asteroid Collision Formed Moon Later Than Thought |magazine=[[National Geographic]] |date=October 28, 2010 |access-date=May 7, 2012 |archive-url=https://web.archive.org/web/20090418171528/http://news.nationalgeographic.com/news/2007/12/071219-moon-collision.html |archive-date=April 18, 2009}}</ref><ref>{{cite journal |title=2008 Pellas-Ryder Award for Mathieu Touboul |journal=Meteoritics and Planetary Science |volume=43 |issue=S7 |pages=A11–A12 |date=2008 |bibcode=2008M&PS...43...11K |last1=Kleine |first1=Thorsten |doi=10.1111/j.1945-5100.2008.tb00709.x }}</ref><ref>{{cite journal |doi=10.1038/nature06428 |title=Late formation and prolonged differentiation of the Moon inferred from W isotopes in lunar metals |date=2007 |last1=Touboul |first1=M. |last2=Kleine |first2=T. |last3=Bourdon |first3=B. |last4=Palme |first4=H. |last5=Wieler |first5=R. |journal=[[Nature (journal)|Nature]] |volume=450 |issue=7173 |pages=1206–1209 |pmid=18097403 |bibcode=2007Natur.450.1206T }}</ref><ref>{{cite magazine |url=http://news.nationalgeographic.com/2015/04/150408-moon-form-giant-impact-earth |title=Flying Oceans of Magma Help Demystify the Moon's Creation |magazine=[[National Geographic]] |date=April 8, 2015 |archive-url=https://web.archive.org/web/20150409220422/http://news.nationalgeographic.com/2015/04/150408-moon-form-giant-impact-earth/ |archive-date=April 9, 2015}}</ref> Ezinye izindikimba zozungezohlelo lweLanga ezifana noNotshezi noma umhlabana obizwa uNovolo (Vesta), ngokweziphololwane ezikuyo, zinezigubo [[IChembe|zamachembe]] wesOhwe nomZithowe ahlukile kunawoMhlaba. Kodwa uMhlaba kanye neNyanga ziqukethe izigubo ezicishe zifana ncamashi. Ukulingana kwamachembe wohlelo lwenyanga-noMhlaba kungachazwa ngokokuxubana kwezithako ezihwamukeli okwenzeka emva kokungqubuzana, nakuba kunempikiswano ngalomchachiso.<ref>{{cite magazine |last=Nield |first=Ted |title=Moonwalk (summary of meeting at Meteoritical Society's 72nd Annual Meeting, Nancy, France) |magazine=[[Geoscientist (magazine)|Geoscientist]] |volume=19 |page=8 |date=2009 |url=http://www.geolsoc.org.uk/gsl/geoscientist/geonews/page6072.html |archive-url=https://web.archive.org/web/20120927034348/http://www.geolsoc.org.uk/gsl/geoscientist/geonews/page6072.html |archive-date=September 27, 2012}}</ref> Ukugadlazeka koMhlaba kwadedela isidlakalasi esanele ukuba siketshezise (liquefy) kokubili ezingcezu ezivela eMhlabeni kanye negobohla loMhlaba, kanjalo kwabumbeka ulwandle lwentshekeza (magma).<ref name="Warren1985" /><ref>{{cite journal |last=Tonks |first=W. Brian |author2=Melosh, H. Jay |date=1993 |title=Magma ocean formation due to giant impacts |journal=[[Journal of Geophysical Research]] |volume=98 |issue=E3 |pages=5319–5333 |bibcode=1993JGR....98.5319T |doi=10.1029/92JE02726}}</ref> Inyanga esanda kubunjwa kungenzeka yayinolwayo ulwandle lomtshekeza. Nakuba lo mchachiso wokugadlazeka uchaza ngendlela eyenza umqondo ubufakazi obukhona, kusanemibuzo engakaphendulwa iningi layo ethinta isigubo senyanga.<ref>{{cite journal |journal=[[Science (journal)|Science]] |author=Daniel Clery |title=Impact Theory Gets Whacked |volume=342 |pages=183–185 |date=October 11, 2013 |doi=10.1126/science.342.6155.183 |bibcode=2013Sci...342..183C |issue=6155 |pmid=24115419}}</ref> Izinongo ezithi iNyanga yakhiwe ngoMhlaba wanguna zikuthola kunzima ukucacisa imininingo yezinhlwa zevange ezifana neZambedu, isOhwe,, iSiphemba nezinye.<ref>{{cite journal |title=Zirconium isotope constraints on the composition of Theia and current Moon-forming theories |first1=W. |last1=Akram |first2=M. |last2=Schönbächler |journal=Earth and Planetary Science Letters |volume=449 |date=September 1, 2016 |pages=302–310 |doi=10.1016/j.epsl.2016.05.022 |bibcode=2016E&PSL.449..302A |doi-access=free |hdl=20.500.11850/117905 |hdl-access=free}}</ref> Ucwaningo lowezi-2022, olwasebenzisa umfefenyeko womgqamophezulu lwathola ukuthi ukugadlazeka okunjalo kunamandla wokudala iduna elinesisindo nesiqikili sensimbi esingangesinyanga emkhathini ukuba lizungeze uMhlaba likude nomngcele kaRoche. Ngisho [[Isivoko|nezivoko]] ezidlula emngceleni kaRoche ziyakwazi ukuqhubeka zisebenza.<ref>{{cite journal |last1=Kegerreis |first1=J.A. |last2=Ruiz-Bonilla |first2=S. |last3=Eke |first3=V.R. |last4=Massey |first4=R.J. |last5=Sandnes |first5=T.D. |last6=Teodoro |first6=L.F.A. |display-authors=1 |date=October 4, 2022 |title=Immediate Origin of the Moon as a Post-impact Satellite |journal=The Astrophysical Journal Letters |volume=937 |issue=L40 |pages=L40 |doi=10.3847/2041-8213/ac8d96 |arxiv=2210.01814 |bibcode=2022ApJ...937L..40K |doi-access=free}}</ref> Mhla zil-1 kuNovemba wezi-2023, osonzululwazi babika ukuthi ngokwemifefenyeko yesicikizi, izinsalela zikaNomthiya kungenzeka zisekhona eMhlabeni.<ref name="NYT-20231101">{{cite news |last=Chang |first=Kenneth |title=A 'Big Whack' Formed the Moon and Left Traces Deep in Earth, a Study Suggests – Two enormous blobs deep inside Earth could be remnants of the birth of the moon. |url=https://www.nytimes.com/2023/11/01/science/moon-formation-theia.html |date=November 1, 2023 |work=[[The New York Times]] |url-status=live |archive-url=https://web.archive.org/web/20231101164127/https://www.nytimes.com/2023/11/01/science/moon-formation-theia.html |archive-date=November 1, 2023 |access-date=February 23, 2026}}</ref><ref name="NAT-20231101">{{cite journal |last1=Yuan |first1=Qian |last2=Li |first2=Mingming |last3=Desch |first3=Steven J. |last4=Ko |first4=Byeongkwan |last5=Deng |first5=Hongping |last6=Garnero |first6=Edward J. |last7=Gabriel |first7=Travis S. J. |last8=Kegerreis |first8=Jacob A. |last9=Miyazaki |first9=Yoshinori |last10=Eke |first10=Vincent |last11=Asimow |first11=Paul D. |title=Moon-forming impactor as a source of Earth's basal mantle anomalies |journal=Nature |date=2 November 2023 |volume=623 |issue=7985 |pages=95–99 |doi=10.1038/s41586-023-06589-1 |pmid=37914947 |bibcode=2023Natur.623...95Y }}</ref> <gallery> File:NASA-Apollo8-Dec24-Earthrise.jpg|Umhlaba enyanga ngoKhisimusi 1968 File:Aldrin Apollo 11 original.jpg|Abahambi amafu: u[[Neil Armstrong]] ubethatha isithombe ngo-[[Buzz Aldrin]] enyanga, 1969 File:Solar_eclipse_1999_4_NR.jpg|Ukuhlwa kwelanga ngo-1999 File:STEREO-B solar eclipse.jpg|Inyanga phambi kwelanga ngo-2007<ref>Tony Phillips [https://science.nasa.gov/Science@NASA]{{Dead link|date=August 2021 |bot=InternetArchiveBot |fix-attempted=yes }} Stereo Eclipse 12 March 2007|17 March 2010|[https://science.nasa.gov/headlines/y2007/12mar_stereoeclipse.htm http://science.nasa.gov/headlines/y2007/12mar_stereoeclipse.htm] {{Webarchive|url=https://web.archive.org/web/20080610082213/http://science.nasa.gov/headlines/y2007/12mar_stereoeclipse.htm |date=2008-06-10 }}</ref> File:Main lunar core en.jpg|Amaqeqeba wenyanga File:Lunar libration with phase Oct 2007 (continuous loop).gif|Izikhathi wenyanga </gallery> ==References== {{reflist}} [[Category:Uhambo amafu]] [[Category:Ukufunda umkhathi]] bsklf5po67yhz7i4tjpoq2o1vvvup8o 126098 126077 2026-07-15T11:23:45Z Fongcwele 16873 126098 wikitext text/x-wiki {{Lowercase title}} {{infobox planet | name = Inyanga | apsis = gee | symbol = [[File:Moon decrescent symbol (bold).svg|24px|☾|class=skin-invert]] or [[File:Moon crescent symbol (bold).svg|24px|☽|class=skin-invert]] | image = FullMoon2010.jpg | image_alt = Full Moon in the darkness of the night sky. It is patterned with a mix of light-tone regions and darker, irregular blotches, and scattered with varied circles surrounded by out-thrown rays of bright ejecta: impact craters. | caption = Uhlangothi lwenyanga esilubonayo | background = #fcbba9 | mpc_name = UMaqubituli | alt_names = {{hlist |{{nowrap|INelekehle (isihlonipho)}}|{{nowrap|Impengu (isihlonipho)}}}} | adjectives = | periapsis = {{gaps |362 |600}}&nbsp;km<br />({{gaps |356 |400}}–{{gaps |370 |400}}&nbsp;km) | apoapsis = {{gaps |405 |400}}&nbsp;km<br />({{gaps |404 |000}}–{{gaps |406 |700}}&nbsp;km) | mean_orbit_radius = {{val |384784|u=km}}<ref name="NASAfactsheet" /><br/>({{val |1.28 |u=[[light-second|ls]]}}; 1/384 [[Astronomical unit|AU]]; {{val |1.001|ul=LD}}) | semimajor = {{val |384399 |u=km}}{{nbsp |2}}({{val |1.28 |u=[[light-second|ls]]}}; 1/389 [[Astronomical unit|AU]]; {{val |1 |ul=LD}})<ref name="W06"/> | eccentricity = {{val |0.0549}}<ref name="W06"/> | period = {{longitem |{{val|27.321661 |ul=d}}<br />(27&nbsp;d 7&nbsp;h 43&nbsp;min 11.5&nbsp;s<ref name="W06"/>)}} | synodic_period = {{longitem|{{val |29.530589 |u=d}}<br />(29&nbsp;d 12&nbsp;h 44&nbsp;min 2.9&nbsp;s)}} | avg_speed = {{val|1.022|ul=km/s}} | inclination = 5.145° to the [[ecliptic]]<ref name="Lang2011"/>{{efn|name=inclination|Between 18.29° and 28.58° to Earth's [[equator]]<ref name="W06"/><!--Wieczorek et al. 2006; 18.29° when the longitude of the Moon's ascending node is 180°, 28.58° when it is 0°-->}} | asc_node = {{longitem|[[Lunar precession#Nodal precession|Regressing]] by one revolution in 18.61&nbsp;years}} | arg_peri = {{longitem|[[Lunar precession#Apsidal precession|Progressing]] by one<br /> revolution in 8.85&nbsp;years}} | satellite_of = [[Earth]]{{efn|name=near-Earth asteroids}}<ref name="Morais2002"/> | flattening = {{val|0.0012}}<ref name="NSSDC"/> | equatorial_radius = {{val|1738.1 |u=km}}{{nbsp |2}}<br />(0.2725 of Earth's)<ref name="NSSDC"/> | polar_radius = {{val|1736.0|u=km}}{{nbsp|2}}<br />(0.2731 of Earth's)<ref name="NSSDC"/> | mean_radius = {{val|1737.4|u=km}}{{nbsp|2}}<br />(0.2727 of Earth's)<ref name="W06"/><ref name="NSSDC"/><ref>{{cite journal |last1=Smith |first1=David E. |last2=Zuber |first2=Maria T. |last3=Neumann |first3=Gregory A. |last4=Lemoine |first4=Frank G. |title=Topography of the Moon from the Clementine lidar |journal=[[Journal of Geophysical Research]] |date=1997 |volume=102 |issue=E1 |page=1601 |doi=10.1029/96JE02940 |bibcode=1997JGR...102.1591S |hdl=2060/19980018849 |hdl-access=free }}</ref> | circumference = {{val|10921|u=km}}{{nbsp |2}}([[equator]]ial) | surface_area = {{val|3.793|e=7|u=km2}}{{nbsp|2}}<br />(0.074 of Earth's) | volume = {{val|2.1958|e=10|u=km3}}{{nbsp |2}}<br />(0.02 of Earth's)<ref name="NSSDC"/> | mass = {{val|7.346|e=22|u=kg}}{{nbsp |2}}<br />({{val|0.0123}} of Earth's)<ref name="W06"/><ref name="NSSDC"/><ref>{{cite book |title=Top 10 of Everything |first=Paul |last=Terry |publisher=Octopus Publishing Group Ltd |year=2013 |isbn=978-0-600-62887-3 |page=226}}</ref> | density = {{val|3.344|ul=g/cm3}}<ref name="W06"/><ref name="NSSDC"/><br />{{val|0.606}} × Earth | surface_grav = {{cvt|1.622|m/s2|ft/s2}}<ref name="NSSDC"/><br />{{cvt|1.622|m/s2|g0|disp=out|lk=out}} | moment_of_inertia_factor = {{val|0.3929|0.0009}}<ref name="Williams1996" /> | escape_velocity = {{convert|2.38|km/s|km/h mph|comma=gaps|abbr=on|disp=x|<br />(|)}} | rotation = {{longitem|{{val|29.530589|u=d}}<br />(29&nbsp;d 12&nbsp;h 44&nbsp;min 2.9&nbsp;s; [[synodic day|synodic; solar day]]) ([[tidal locking|spin-orbit locked]])}} | sidereal_day = {{val|27.321661|u=d}}{{nbsp|2}}(spin-orbit locked) <!-- Wieczorek et al. 2006 -->| rot_velocity = {{nowrap|4.627 m/s}} | axial_tilt = {{ublist|1.5424° to [[ecliptic]]<ref name="SolarViews" /><!--1.533° according to Conn 2007-->|6.687° to [[Orbital plane (astronomy)|orbit plane]]<ref name="Lang2011"/><!--6.4° according to Grego;<ref name="Grego2005">Grego, Peter, [https://books.google.com/books?id=z6Pgt9xEW9gC&pg=PA48 ''The Moon and How to Observe It''], Springer, 2005</ref> 6.6783° according to Conn.<ref name="Conn2007">Conn, David (2007); ''Lednorf's Dilemma'', AuthorHouse, Bloomington (IN)</ref>-->|24° to Earth's equator<ref>{{cite journal |last=Makemson |first=Maud W. |year=1971 |title=Determination of selenographic positions |journal=The Moon |volume=2 |issue=3 |pages=293–308 |doi=10.1007/BF00561882 |bibcode=1971Moon....2..293M }}</ref>}} | epoch = [[J2000]] | uncertainty = 0 | right_asc_north_pole = {{plainlist| * {{RA|17|47|26}} * 266.86°<ref name="report">{{cite journal |last1=Archinal |first1=B.A. |last2=A'Hearn |first2=M.F. |last3=Bowell |first3=E. |last4=Conrad |first4=A. |last5=Consolmagno |first5=G.J. |last6=Courtin |first6=R. |last7=Fukushima |first7=T. |last8=Hestroffer |first8=D. |last9=Hilton |first9=J.L. |last10=Krasinsky |first10=G.A. |last11=Neumann |first11=G. |last12=Oberst |first12=J. |last13=Seidelmann |first13=P. K. |last14=Stooke |first14=P. |last15=Tholen |first15=D.J. |last16=Thomas |first16=P.C. |last17=Williams |first17=I.P. |title=Report of the IAU Working Group on Cartographic Coordinates and Rotational Elements: 2009 |journal=Celestial Mechanics and Dynamical Astronomy |volume=109 |issue=2 |pages=101–135 |date=February 2011 |bibcode=2011CeMDA.109..101A |doi=10.1007/s10569-010-9320-4}}</ref> }} | declination = 65.64°<ref name="report" /> | albedo = {{val|0.136}}<ref name="Saari"/> | temp_name1 = Equator | min_temp_1 = 100&nbsp;[[Kelvin|K]]<ref name=Bugby_et_al_2010/> | mean_temp_1 = 250&nbsp;K | max_temp_1 = 390&nbsp;K<ref name=Bugby_et_al_2010>{{cite conference |last1=Bugby |first1=D.C. |last2=Farmer |first2=J.T. |last3=O'Connor |first3=B.F. |last4=Wirzburger |first4=M.J. |last5=Abel |first5=E.D. |last6=Stouffer |first6=C.J. |title=Two-Phase Thermal Switching System for a Small, Extended Duration Lunar Surface Science Platform |series=AIP Conference Proceedings |volume=1208 |pages=76–83 |date=January 2010 |bibcode=2010AIPC.1208...76B |hdl=2060/20100009810 |hdl-access=free |doi=10.1063/1.3326291}}</ref> | temp_name2 = 85°N&nbsp; | min_temp_2 = | mean_temp_2 = 150&nbsp;K | max_temp_2 = 230&nbsp;K<ref name="Vasavada1999"/> | surface_equivalent_dose_rate = {{convert |1.369 |mSv/d |μSv/h |disp=out}}<br />(during lunar daytime)<ref name="surface-radiation">{{Cite journal |vauthors=Zhang S, Wimmer-Schweingruber RF, Yu J, Wang C, Fu Q, Zou Y, Sun Y, Wang C, Hou D, Böttcher SI, Burmeister S |display-authors=6 |title=First measurements of the radiation dose on the lunar surface |journal=Science Advances |year=2020 |volume=6 |issue=39 |article-number=eaaz1334 |doi=10.1126/sciadv.aaz1334 |pmc=7518862 |pmid=32978156 |bibcode=2020SciA....6.1334Z |quote=We measured an average total absorbed dose rate in silicon of 13.2 ± 1 μGy/hour ... LND measured an average dose equivalent of 1369 μSv/day on the surface of the Moon}}</ref> | surface_absorbed_dose_rate = 13.2 μGy/h<br />(during lunar [[daytime]])<ref name="surface-radiation"/> | magnitude = {{ublist|−2.5 to −12.9{{efn |name=maxval}}|−12.74{{nbsp |2}}(mean [[full moon]])<ref name="NSSDC"/>}} | abs_magnitude = 0.2<ref name="IMCCE">{{cite web |title=Encyclopedia – the brightest bodies |website=IMCCE |url=https://promenade.imcce.fr/en/pages1/101.html |access-date=June 1, 2023 |archive-date=March 21, 2023 |archive-url=https://web.archive.org/web/20230321023334/https://promenade.imcce.fr/en/pages1/101.html |url-status=live}}</ref> | angular_size = 29.3 to 34.1 [[arcminutes]]<ref name="NSSDC"/>{{efn |name=angular size}} | atmosphere = trace | atmosphere_ref = <ref name="L06"/> | surface_pressure = {{ublist |10{{sup |−7}} [[Pascal (unit)|Pa]] (1 [[picobar]]){{nbsp |2}}(day) |10{{sup |−10}} Pa (1 femtobar) {{nbsp |2}} <br />(night){{efn |name=pressure explanation}}}} | atmosphere_composition = {{hlist|[[Helium|He]]|[[Argon|Ar]]|[[Neon|Ne]]|[[Sodium|Na]]|[[Potassium|K]]|[[Hydrogen|H]]}} }} [[File:Full_Moon_Luc_Viatour.jpg|thumb|iNyanga edilingene]] '''iNyanga''' (uphawu: [[file:Moon decrescent symbol (bold).svg|16px|☾]]) iwukuphela [[Iduna|kweduna]] elizungeza [[uMhlaba]]. INyanga izungeza uMhlaba isebangeni elingamakhilomitha ayizi-384,399. INyanga iqeda uzungezo lwayo ngesikhathi esiyinyanga eyodwa, noma ngezinsuku ezingama-29.5. INyanga noMhlaba zibanjwe ukuheha [[UmNyondo|komnyondo]] onamandla emacaleni azo abukene. Lokhu kwenza kube neziphoqi zamabuya okuyizona ezidala amabuya eMhlabeni, futhi zadonsa iNyanga ukuba ibuke uMhlaba ngohlangothi olulodwa kuphela. Lokhu kukhweqa kwamabuya ngokomphumela kwenza uzungezo lweNyanga (usuku lwayo) ukuba luhambisane nenkathi ezungeza ngayo uMhlaba (inyanga eyodwa). [[Uzungezohlelo lweLanga|Kuzungezohlelo lweLanga]], iNyanga iyiduna elikhulu nelinesisindo ukwedlula [[Umzulane oyisichwe|nemizulane esichwe]] eyaziwayo, futhi iyiduna lesihlanu elikhulu. Umnyondo wobuso bayo ulingana nengxenye eyodwa yesithupha yomnyondo woMhlaba, okuyisigamu somnyondo kaNotshezi, futhi ungowesibili omkhulu ezinyageni zozungezohlelo lweLanga kulandela inyanga kaMkhulukhulwana ebizwa uSontshaba. Umzimba weNyanga umahlukohluko futhi uhlabathi, unengcosana yamanzimbulunga, umoyambulunga newonga. Ubuso benyanga bumbozw nge-regolith, equkethe izincushuzo eziphafuke egobohleni ngenxa yokugadlazeke. Ingakho kuthiwa umaqubintuli, futhi igobohla lakhe [[Isigqabhozi sokugadlazeka|linezigqabhozi zokugadlazeka]] eziningi. Inyanga yake yaba nobuqhebeqhebe bezintshabamlilo eminyakeni eyisigidinqindi (1.2 billion) edlule. Indabuko yeNyanga ayaziwa, kodwa kukhona abahlawumbisela ukuthi yabumbeka ngezithako zoMhlaba, ezaphafuka lapho ugadlazwa indikimba elingana noNotshezi ebizwa gokuthi uThiyana eminyakeni eyizigidinqindi ezi-4.51 edlule, ngemva kokubumbeka koMhlaba. Ebangeni elikuyo, izimo zobusuku nemini zikamaqubintuli thina sizibona [[Izimo zenyanga|kuyizimo zenyanga]], nalapho iNyanga idlula ethunzini loMhlaba kuba [[UNyezibomvu|noNyezibomvu]]. Ubungako obubonwayo beNyanga esibhakabhakeni cishe balingana nobeLanga, okwenza ukwazi ukulisitheza ngokugcwele lapho [[Insitholanga|kunensitholanga]] egcwele. INyanga iyindikimba eqhakazayo ebusuku ngenxa yokulwentuza ukukhanya. INyanga ibilokhu ingumthombo obalulekile wogqozi nolwazi emlandweni ikakhulu kwezenkolo, ubuciko, [[Inzululwazi yemvelo]], nokundiza emkhathini. Izindizamkhathi zokuqala ezaya endikimbeni esemkhathini zaya eNyangeni, kusuka ngowe-1959 lapho kuyingeleza i-Luna 1 (eyathunyelwa i Soviet Union), Kanye ne- Luna 2 yaba nohlonze emhlabeni wonke, ezalandelwa ngowe-1966 umcababalo othambile we- Luna 9 nozungezo lwe- Luna 10. Abantu baqala ukunyatuela ebusweni heNyanga ngo July 20, 1969, besebenzisa indizamkhathi i-Apollo 11. Ngowe-1972, kwase kuthunyelwe izindizamkhathi iziyisithupha, kwacababala abantu abayishumi nambili eNyangeni. Maduze kulindelwe ukuba uhlelo lwe-Artemis lubuyosele abantu eNyangeni. ==uMsukagama== Igama lesiZulu elithi ''inyanga'' liyibizonto leduna loMhlaba elibonakala ngonyezi ebusuku. Aligcini ekubeni igama lendikimba esemkhathini njengoba kubalwa isikhathi ngokuhambisana nozungezo lwayo. Uzungezo olulodwa lezinsuku ezingama-29 lubizwa iNyanga. Umsuka walo usolimini olwandulela isintu kwelithi -mʊ̀gàngà elisebenza kokubili [[Inyanga (umelaphi)|kumuntu owelaphayo]] nasendikimbeni esemkhathini. Ngokwesichazamazwi sikaVilakazi elinye igama lenyanga nguMaqibuntuli. Elithi 'unyezi' libhekisela ekukhanyeni kwayo ebusuku, lihlobene nesijobelelo esithi ''nyezi'' esisemagameni inkanyezi, ubhaqanyezi, iqhumanyezi. Igama lesiZulu lokuhlonipha lenyanga elithi impengu nelithi inelekehle. ==uMlando wendalo== === Ukubumbeka kwayo === [[File:Big Splash Theia.gif|thumb|Umdwebo onyakazayo obonisa ukubumbeka kwenyanga lapho umzulane, obizwa uNomthiya, olingana noNotshezi ungqubuzana noMhlaba.]] Ukuhlolwa kwamachembe ezangulo zenyanga kusikisela ukuthi inyanga yabumbeka eminyakeni eyizigidi ezingama-50 ngemuva kokuvela [[Uzungezohlelo lweLanga|kozungezohlelo lweLanga]].<ref>{{cite journal |title=Early Moon formation inferred from hafnium-tungsten systematics |last1=Thiemens |first1=Maxwell M. |last2=Sprung |first2=Peter |last3=Fonseca |first3=Raúl O. C. |last4=Leitzke |first4=Felipe P. |last5=Münker |first5=Carsten |journal=Nature Geoscience |volume=12 |issue=9 |pages=696–700 |date=July 2019 |doi=10.1038/s41561-019-0398-3 |pmid=39649009 |bibcode=2019NatGe..12..696T |pmc=7617097}}</ref><ref name="Age">{{cite news |url=https://www.universetoday.com/143025/the-moon-is-older-than-scientists-thought/ |title=The Moon is older than scientists thought |website=Universe Today |access-date=August 3, 2019 |archive-date=August 3, 2019 |archive-url=https://web.archive.org/web/20190803125139/https://www.universetoday.com/143025/the-moon-is-older-than-scientists-thought/ |url-status=live}}</ref> Ngokomlando, kunezindlela ezimbalwa eziphakanyiswayo zokubumbeka kwayo,<ref>{{cite journal |doi=10.1126/sciadv.1602365 |pmid=28097222 |pmc=5226643 |journal=Science Advances |date=2017 |volume=3 |issue=1 |title=Early formation of the Moon 4.51 billion years ago |last=Barboni |first=M. |author2=Boehnke, P. |author3=Keller, C. B. |author4=Kohl, I. E. |author5=Schoene, B. |author6=Young, E. D. |author7=McKeegan, K. D. |article-number=e1602365 |bibcode=2017SciA....3E2365B}}</ref> kodwa ayikho enencazelo echaza izici zohlelo lwenyanga-nomhlaba ngokukholisayo. Abanye bathi inyanga iwucezu olwaklewuka eMhlabeni endulo, abanye bathi inyanga yayizidlulela emkhathini yabanjwa umnyondo woMhlaba, abanye bona bathi uMhlaba nenyanga zadalwa ngesikhathi esisodwa. Kodwa asikho kuzo zonke lezi zihlawumbiselo, esichaza ngengoni yomjijiyane wohlelo lenyanga-nomhlaba.<ref>{{cite journal |last=Stevenson |first=D. J. |title=Origin of the moon–The collision hypothesis |journal=[[Annual Review of Earth and Planetary Sciences]] |date=1987 |volume=15 |issue=1 |pages=271–315 |bibcode=1987AREPS..15..271S |doi=10.1146/annurev.ea.15.050187.001415 }}</ref> Umchachiso oseqhulwini wohlelo lwenyanga-nomhlaba uthi inyanga yabumbeka lapho uMhlaba wanguna ugadlazwa indikimba ewumzulane olingana [[UNotshezi|noNotshezi]], ebizwa uNomthiya. Lokhu kugadlazeka kwaqhumisa futhi kwasakaza izingcezu zoMhlaba esibhakabhakeni futhi zaqala ukuzungeza uMhlaba futhi ihlumelelo lazo labumba inyanga<ref name="taylor1998" /><ref>{{cite web |url=http://news.nationalgeographic.com/2015/04/150416-asteroids-scars-moon-formation-space/ |title=Asteroids Bear Scars of Moon's Violent Formation |date=April 16, 2015 |archive-url=https://web.archive.org/web/20161008160812/http://news.nationalgeographic.com/2015/04/150416-asteroids-scars-moon-formation-space/ |archive-date=October 8, 2016}}</ref> eduze nomngcele kaRoche.<ref>{{cite journal |title=Scaling in global tidal dissipation of the Earth–Moon system |last=van Putten |first=Maurice H. P. M. |journal=New Astronomy |volume=54 |pages=115–121 |date=July 2017 |doi=10.1016/j.newast.2017.01.012 |arxiv=1609.07474 |bibcode=2017NewA...54..115V }}</ref> Kuthiwa ukugadlazeka kwaloluhlobo kwakuyinsakavukela ezinsukwini zokuqala [[Uzungezohlelo lweLanga|kozungezohlelo lweLanga]]. Imifefenyeko yesicikizi yalokhu kungqubuzana iveza iziphumo ezifanayo futhi ezihambisana nesisindo sikaMaqubintuli nengoni yomjijiyane wohlelo lwenyanga-noMhlaba. Le [[UmFefenyeko|mifefenyeko]] ibonisa ukuthi iningi lezakhi zenyanga livela endikimbeni eyagadlaza uMhlaba wanguna..<ref>{{cite journal |last=Canup |first=R. |author1-link=Robin Canup |author2=Asphaug, E. |title=Origin of the Moon in a giant impact near the end of Earth's formation |journal=[[Nature (journal)|Nature]] |volume=412 |pages=708–712 |date=2001 |doi=10.1038/35089010 |pmid=11507633 |issue=6848 |bibcode=2001Natur.412..708C }}</ref> Kodwa, izinongo zowezi-2007 nakamuva zisikisela ukuthi ucezu olukhulu lwenyaga lwaluvela eMhlabeni wanguna.<ref>{{cite magazine |url=http://news.nationalgeographic.com/news/2007/12/071219-moon-collision.html |title=Earth–Asteroid Collision Formed Moon Later Than Thought |magazine=[[National Geographic]] |date=October 28, 2010 |access-date=May 7, 2012 |archive-url=https://web.archive.org/web/20090418171528/http://news.nationalgeographic.com/news/2007/12/071219-moon-collision.html |archive-date=April 18, 2009}}</ref><ref>{{cite journal |title=2008 Pellas-Ryder Award for Mathieu Touboul |journal=Meteoritics and Planetary Science |volume=43 |issue=S7 |pages=A11–A12 |date=2008 |bibcode=2008M&PS...43...11K |last1=Kleine |first1=Thorsten |doi=10.1111/j.1945-5100.2008.tb00709.x }}</ref><ref>{{cite journal |doi=10.1038/nature06428 |title=Late formation and prolonged differentiation of the Moon inferred from W isotopes in lunar metals |date=2007 |last1=Touboul |first1=M. |last2=Kleine |first2=T. |last3=Bourdon |first3=B. |last4=Palme |first4=H. |last5=Wieler |first5=R. |journal=[[Nature (journal)|Nature]] |volume=450 |issue=7173 |pages=1206–1209 |pmid=18097403 |bibcode=2007Natur.450.1206T }}</ref><ref>{{cite magazine |url=http://news.nationalgeographic.com/2015/04/150408-moon-form-giant-impact-earth |title=Flying Oceans of Magma Help Demystify the Moon's Creation |magazine=[[National Geographic]] |date=April 8, 2015 |archive-url=https://web.archive.org/web/20150409220422/http://news.nationalgeographic.com/2015/04/150408-moon-form-giant-impact-earth/ |archive-date=April 9, 2015}}</ref> Ezinye izindikimba zozungezohlelo lweLanga ezifana noNotshezi noma umhlabana obizwa uNovolo (Vesta), ngokweziphololwane ezikuyo, zinezigubo [[IChembe|zamachembe]] wesOhwe nomZithowe ahlukile kunawoMhlaba. Kodwa uMhlaba kanye neNyanga ziqukethe izigubo ezicishe zifana ncamashi. Ukulingana kwamachembe wohlelo lwenyanga-noMhlaba kungachazwa ngokokuxubana kwezithako ezihwamukeli okwenzeka emva kokungqubuzana, nakuba kunempikiswano ngalomchachiso.<ref>{{cite magazine |last=Nield |first=Ted |title=Moonwalk (summary of meeting at Meteoritical Society's 72nd Annual Meeting, Nancy, France) |magazine=[[Geoscientist (magazine)|Geoscientist]] |volume=19 |page=8 |date=2009 |url=http://www.geolsoc.org.uk/gsl/geoscientist/geonews/page6072.html |archive-url=https://web.archive.org/web/20120927034348/http://www.geolsoc.org.uk/gsl/geoscientist/geonews/page6072.html |archive-date=September 27, 2012}}</ref> Ukugadlazeka koMhlaba kwadedela isidlakalasi esanele ukuba siketshezise (liquefy) kokubili ezingcezu ezivela eMhlabeni kanye negobohla loMhlaba, kanjalo kwabumbeka ulwandle lwentshekeza (magma).<ref name="Warren1985" /><ref>{{cite journal |last=Tonks |first=W. Brian |author2=Melosh, H. Jay |date=1993 |title=Magma ocean formation due to giant impacts |journal=[[Journal of Geophysical Research]] |volume=98 |issue=E3 |pages=5319–5333 |bibcode=1993JGR....98.5319T |doi=10.1029/92JE02726}}</ref> Inyanga esanda kubunjwa kungenzeka yayinolwayo ulwandle lomtshekeza. Nakuba lo mchachiso wokugadlazeka uchaza ngendlela eyenza umqondo ubufakazi obukhona, kusanemibuzo engakaphendulwa iningi layo ethinta isigubo senyanga.<ref>{{cite journal |journal=[[Science (journal)|Science]] |author=Daniel Clery |title=Impact Theory Gets Whacked |volume=342 |pages=183–185 |date=October 11, 2013 |doi=10.1126/science.342.6155.183 |bibcode=2013Sci...342..183C |issue=6155 |pmid=24115419}}</ref> Izinongo ezithi iNyanga yakhiwe ngoMhlaba wanguna zikuthola kunzima ukucacisa imininingo yezinhlwa zevange ezifana neZambedu, isOhwe,, iSiphemba nezinye.<ref>{{cite journal |title=Zirconium isotope constraints on the composition of Theia and current Moon-forming theories |first1=W. |last1=Akram |first2=M. |last2=Schönbächler |journal=Earth and Planetary Science Letters |volume=449 |date=September 1, 2016 |pages=302–310 |doi=10.1016/j.epsl.2016.05.022 |bibcode=2016E&PSL.449..302A |doi-access=free |hdl=20.500.11850/117905 |hdl-access=free}}</ref> Ucwaningo lowezi-2022, olwasebenzisa umfefenyeko womgqamophezulu lwathola ukuthi ukugadlazeka okunjalo kunamandla wokudala iduna elinesisindo nesiqikili sensimbi esingangesinyanga emkhathini ukuba lizungeze uMhlaba likude nomngcele kaRoche. Ngisho [[Isivoko|nezivoko]] ezidlula emngceleni kaRoche ziyakwazi ukuqhubeka zisebenza.<ref>{{cite journal |last1=Kegerreis |first1=J.A. |last2=Ruiz-Bonilla |first2=S. |last3=Eke |first3=V.R. |last4=Massey |first4=R.J. |last5=Sandnes |first5=T.D. |last6=Teodoro |first6=L.F.A. |display-authors=1 |date=October 4, 2022 |title=Immediate Origin of the Moon as a Post-impact Satellite |journal=The Astrophysical Journal Letters |volume=937 |issue=L40 |pages=L40 |doi=10.3847/2041-8213/ac8d96 |arxiv=2210.01814 |bibcode=2022ApJ...937L..40K |doi-access=free}}</ref> Mhla zil-1 kuNovemba wezi-2023, osonzululwazi babika ukuthi ngokwemifefenyeko yesicikizi, izinsalela zikaNomthiya kungenzeka zisekhona eMhlabeni.<ref name="NYT-20231101">{{cite news |last=Chang |first=Kenneth |title=A 'Big Whack' Formed the Moon and Left Traces Deep in Earth, a Study Suggests – Two enormous blobs deep inside Earth could be remnants of the birth of the moon. |url=https://www.nytimes.com/2023/11/01/science/moon-formation-theia.html |date=November 1, 2023 |work=[[The New York Times]] |url-status=live |archive-url=https://web.archive.org/web/20231101164127/https://www.nytimes.com/2023/11/01/science/moon-formation-theia.html |archive-date=November 1, 2023 |access-date=February 23, 2026}}</ref><ref name="NAT-20231101">{{cite journal |last1=Yuan |first1=Qian |last2=Li |first2=Mingming |last3=Desch |first3=Steven J. |last4=Ko |first4=Byeongkwan |last5=Deng |first5=Hongping |last6=Garnero |first6=Edward J. |last7=Gabriel |first7=Travis S. J. |last8=Kegerreis |first8=Jacob A. |last9=Miyazaki |first9=Yoshinori |last10=Eke |first10=Vincent |last11=Asimow |first11=Paul D. |title=Moon-forming impactor as a source of Earth's basal mantle anomalies |journal=Nature |date=2 November 2023 |volume=623 |issue=7985 |pages=95–99 |doi=10.1038/s41586-023-06589-1 |pmid=37914947 |bibcode=2023Natur.623...95Y }}</ref> <gallery> File:NASA-Apollo8-Dec24-Earthrise.jpg|Umhlaba enyanga ngoKhisimusi 1968 File:Aldrin Apollo 11 original.jpg|Abahambi amafu: u[[Neil Armstrong]] ubethatha isithombe ngo-[[Buzz Aldrin]] enyanga, 1969 File:Solar_eclipse_1999_4_NR.jpg|Ukuhlwa kwelanga ngo-1999 File:STEREO-B solar eclipse.jpg|Inyanga phambi kwelanga ngo-2007<ref>Tony Phillips [https://science.nasa.gov/Science@NASA]{{Dead link|date=August 2021 |bot=InternetArchiveBot |fix-attempted=yes }} Stereo Eclipse 12 March 2007|17 March 2010|[https://science.nasa.gov/headlines/y2007/12mar_stereoeclipse.htm http://science.nasa.gov/headlines/y2007/12mar_stereoeclipse.htm] {{Webarchive|url=https://web.archive.org/web/20080610082213/http://science.nasa.gov/headlines/y2007/12mar_stereoeclipse.htm |date=2008-06-10 }}</ref> File:Main lunar core en.jpg|Amaqeqeba wenyanga File:Lunar libration with phase Oct 2007 (continuous loop).gif|Izikhathi wenyanga </gallery> ==References== {{reflist}} [[Category:Uhambo amafu]] [[Category:Ukufunda umkhathi]] 9c6cx4ypg2tkojmki957oa1imppsl2u Template:Convert 10 4607 126097 27458 2026-07-15T11:01:31Z Fongcwele 16873 126097 wikitext text/x-wiki <includeonly>{{{{{♥|safesubst:}}}#invoke:convert|convert}}</includeonly><noinclude> {{documentation}} <!-- Add categories to the /doc subpage, interwikis to Wikidata, not here --> </noinclude> hf9zof3enslixmyfgs0toady52qiq06 User:GerardM/Members of the Senate of Zimbabwe 2 9791 126068 125971 2026-07-15T00:55:36Z ListeriaBot 10758 Wikidata list updated [V2] 126068 wikitext text/x-wiki This list is not ready for use on Wikipedia because a Member of the Senate of Zimbabwe who was a member twice does not show twice. {{Wikidata list |sparql=SELECT ?item WHERE { ?item wdt:P39 wd:Q21295155 } |section= |sort=P39/Q21295155/P580 |sort_order=desc |columns=label:Article,description,P27:Country,P39/Q21295155/P580:Start date,P39/Q21295155/P582:End date,P18:Image |thumb=128 |min_section=2 }} {| class='wikitable sortable' ! Article ! description ! Country ! Start date ! End date ! Image |- | ''[[:d:Q443215|Garfield Todd]]'' | | [[IZimbabwe]]<br/>[[INyuzilandi]] | | | [[File:Garfield todd.jpg|center|128px]] |- | ''[[:d:Q514464|Simbarashe Mumbengegwi]]'' | | [[IZimbabwe]] | | | [[File:Simbarashe Mumbengegwi.jpg|center|128px]] |- | ''[[:d:Q1399766|Joseph Msika]]'' | | [[IZimbabwe]] | | | [[File:Joseph Msika.jpg|center|128px]] |- | ''[[:d:Q2011278|Obert Mpofu]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q3133488|Herbert Murerwa]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q3274147|John Nkomo]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q3369338|Patrick Chinamasa]]'' | | [[IZimbabwe]] | | | [[File:Patrick Chinamasa.png|center|128px]] |- | ''[[:d:Q5017585|Cain Mathema]]'' | | [[IZimbabwe]] | | | [[File:Minister Cain Mathema.jpg|center|128px]] |- | ''[[:d:Q5091394|Chenhanho Chimutengwende]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q5232494|David Coltart]]'' | | [[IZimbabwe]] | | | [[File:David Coltart.JPG|center|128px]] |- | ''[[:d:Q5238373|David Parirenyatwa]]'' | | [[IZimbabwe]] | | | [[File:David Parirenyatwa (cropped).png|center|128px]] |- | ''[[:d:Q5301822|Douglas Mombeshora]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q5340066|Edna Madzongwe]]'' | | [[IZimbabwe]] | | | [[File:Edna Madzongwe at the 53rd Commonwealth Parliamentary Conference, in New Delhi on September 22, 2007.jpg|center|128px]] |- | ''[[:d:Q5360562|Elias Mudzuri]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q5427612|Faber Chidarikire]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q5460278|Flora Buka]]'' | | [[IZimbabwe]] | | | |- | [[Gibson Sibanda]] | | [[IZimbabwe]] | | | |- | ''[[:d:Q5576402|Godfrey Chidyausiku]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q5622273|Guy Georgias]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q5725372|Henry Madzorera]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q6217016|Johannes Tomana]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q6775305|Martin Dinha]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q6848219|Mike Nyambuya]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q7088073|Olivia Muchena]]'' | | [[IZimbabwe]] | | | [[File:Olivia muchena.jpg|center|128px]] |- | ''[[:d:Q7146962|Patrick Kombayi]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q7317489|Reuben Marumahoko]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q7412244|Samuel Mumbengegwi]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q7412644|Samuel Sipepa Nkomo]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q7447116|Sekai Holland]]'' | | [[IZimbabwe]] | | | [[File:Sekai Holland.jpg|center|128px]] |- | ''[[:d:Q7550235|Sobusa Gula-Ndebele]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q7660136|Sydney Sekeramayi]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q7936864|Vitalis Zvinavashe]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q8003386|Willard Chiwewe]]'' | | [[IZimbabwe]] | | | |- | [[Thokozani Khuphe]] | | [[IZimbabwe]] | | | [[File:Thokozani Khuphe.jpg|center|128px]] |- | ''[[:d:Q16011177|Jeremiah Chirau]]'' | | [[IZimbabwe]]<br/>''[[:d:Q217169|Rhodesia]]'' | | | [[File:Internal Settlement.jpg|center|128px]] |- | ''[[:d:Q16091552|Naison Ndlovu]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q16136022|Morgan Femai]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q16733075|Tracy Mutinhiri]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q16866539|Simon Khaya-Moyo]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q16886031|Lutho Tapela]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q20872132|Prisca Mupfumira]]'' | | [[IZimbabwe]] | | | [[File:Prisca Mupfumira - 2018 (cropped).jpg|center|128px]] |- | ''[[:d:Q25697807|Kumbirai Kangai]]'' | | [[IZimbabwe]] | | | [[File:Independence Day Celebrations at the Ambassador's Residence, Harare, Zimbabwe. Guests at the function included Deputy Speaker of Parliament, Kumbirai Kangai.jpg|center|128px]] |- | ''[[:d:Q85118775|Monica Mutsvangwa]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q94704254|Jock Alves]]'' | | | | | |- | ''[[:d:Q106269407|Ellen Gwaradzimba]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q107491736|Peter Haritatos]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q107534597|Bekithemba Mpofu]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111281646|Getrude Chibagu]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111281682|Lovemore Matuke]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111281756|Tendayi Makunde]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111282851|Annah Rungani]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111282876|Lwazi Sibanda]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111282883|Miriam Chikukwa]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111282888|Sabina Thembani]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111282889|Sibusisiwe Budha]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111282890|Sikhanyisiwe Mpofu]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111283546|Address Matiirira]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111283547|Agnes Sibanda]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111283548|Alice Chimbudzi]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111283549|Alma Mkhwebu]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111283551|Alphina Juba]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111283552|Angelina Masuku]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111283554|Charles Tawengwa]]'' | | | | | |- | ''[[:d:Q111283555|Damian D. E. Mumvuri]]'' | | | | | |- | ''[[:d:Q111283556|Dorothy Tholakele Khumalo]]'' | | | | | |- | ''[[:d:Q111283557|Dzikamai Calisto Mavhaire]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111283558|Farirai Ethel Mabhungu]]'' | | | | | |- | ''[[:d:Q111283559|Grace Tsitsi Jadagu]]'' | | | | | |- | ''[[:d:Q111283560|Herbert M. Sinampande]]'' | | | | | |- | ''[[:d:Q111283561|Jaison Max Korerai Machaya]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111283562|James Makore]]'' | | | | | |- | ''[[:d:Q111283563|Jane Chifamba]]'' | | | | | |- | ''[[:d:Q111283564|Jenia Manyeruke]]'' | | | | | |- | ''[[:d:Q111283565|Josiah D. Hungwe]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111283566|Joyce Ndhlovu]]'' | | | | | |- | ''[[:d:Q111283567|Judith Mawire]]'' | | | | | |- | ''[[:d:Q111283568|Keresina Chabuka]]'' | | | | | |- | ''[[:d:Q111283569|Lilian Timveos]]'' | | | | | |- | ''[[:d:Q111283571|Martha Muronzi]]'' | | | | | |- | ''[[:d:Q111283572|Matson M. Hlalo]]'' | | | | | |- | ''[[:d:Q111283573|Medelina Bhebhe]]'' | | | | | |- | ''[[:d:Q111283574|Michael Norman Carter]]'' | | | | | |- | ''[[:d:Q111283575|Mike M. Byton]]'' | | | | | |- | ''[[:d:Q111283576|Misheck Marava]]'' | | | | | |- | ''[[:d:Q111283577|Mlotshwa Sithembile]]'' | | | | | |- | ''[[:d:Q111283578|Molly Mkandla]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111283579|Monicah Mavhunga]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111283580|Morgen Komichi]]'' | | | | | |- | ''[[:d:Q111283581|Muhlava Otilia Maluleke]]'' | | | | | |- | ''[[:d:Q111283582|Patrick Chitaka]]'' | | | | | |- | ''[[:d:Q111283583|Rorana Muchihwa]]'' | | | | | |- | ''[[:d:Q111283584|Rosemary Goto]]'' | | | | | |- | ''[[:d:Q111283585|Rosemary Nyathi]]'' | | | | | |- | ''[[:d:Q111283586|Ruth Mafoko Labode]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111283587|Shuvai Ben Mahofa]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111283588|Siphiwe Ncube]]'' | | | | | |- | ''[[:d:Q111283590|Tapera Machingaifa]]'' | | | | | |- | ''[[:d:Q111283592|Thokozile A. Mathuthu]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111283594|Tsitsi Veronica Muzenda]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111283595|Violet Moeketsi]]'' | | | | | |- | ''[[:d:Q111283596|Virginia Muchenje]]'' | | | | | |- | ''[[:d:Q111283597|Watchy Sibanda]]'' | | | | | |- | ''[[:d:Q111283842|Annah Shiri]]'' | | | | | |- | ''[[:d:Q111283843|Ashel Sithole]]'' | | | | | |- | ''[[:d:Q111283844|Clemence Nembire]]'' | | | | | |- | ''[[:d:Q111283845|Cleveria Chizema]]'' | | | | | |- | ''[[:d:Q111283846|Daniel Gwenzi]]'' | | | | | |- | ''[[:d:Q111283847|Daster Chisunga]]'' | | | | | |- | ''[[:d:Q111283848|Enos Masakwa]]'' | | | | | |- | ''[[:d:Q111283849|Feleni Chauke]]'' | | | | | |- | ''[[:d:Q111283850|Fortune Charumbira]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111283851|Joseph Mudhe]]'' | | | | | |- | ''[[:d:Q111283852|Mike Musaka]]'' | | | | | |- | ''[[:d:Q111283853|Milton Ntabeni]]'' | | | | | |- | ''[[:d:Q111283854|Mtshane Khumalo]]'' | | | | | |- | ''[[:d:Q111283855|Ndabazekhaya Matema]]'' | | | | | |- | ''[[:d:Q111283857|Nkathazo Siansole]]'' | | | | | |- | ''[[:d:Q111283858|Nyamayabo Mashavakure]]'' | | | | | |- | ''[[:d:Q111283859|Rivai Mbaimbai]]'' | | | | | |- | ''[[:d:Q111283860|Samson Katsande]]'' | | | | | |- | ''[[:d:Q111283861|Sindalizwe Dube]]'' | | | | | |- | ''[[:d:Q111283863|Tambudzani Mohadi]]'' | | | | | |- | ''[[:d:Q111283865|Try Manyepa]]'' | | | | | |- | ''[[:d:Q111283866|Vuyani Ndiweni]]'' | | | | | |- | ''[[:d:Q111283867|Wilson Nebiri]]'' | | | | | |- | ''[[:d:Q111283868|Zama Mkhwananzi]]'' | | | | | |- | ''[[:d:Q111291735|Alice Dube]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111291737|Angeline Tongogara]]'' | | | | | |- | ''[[:d:Q111291738|Annias Mapungwana]]'' | | | | | |- | ''[[:d:Q111291739|Aplonia Munzverengwi]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111291740|Bybit Tsomondo]]'' | | | | | |- | ''[[:d:Q111291741|Christine Rambanepasi]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111291742|Clara Shumba]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111291744|Douglas Mwonzora]]'' | | [[IZimbabwe]] | | | [[File:Image of Douglas Mwonzora seated in Formal lounge.jpg|center|128px]] |- | ''[[:d:Q111291745|Esnath Rwambiwa]]'' | | | | | |- | ''[[:d:Q111291746|Gideon Shoko]]'' | | | | | |- | ''[[:d:Q111291747|Helen Zivira]]'' | | | | | |- | ''[[:d:Q111291750|Joseph Madziva]]'' | | | | | |- | ''[[:d:Q111291751|Joshua Teke Malinga]]'' | | | | | |- | ''[[:d:Q111291753|Kerina Gweshe]]'' | | | | | |- | ''[[:d:Q111291754|Langton Chikukwa]]'' | | | | | |- | ''[[:d:Q111291755|Larry Mavhima]]'' | | | | | |- | ''[[:d:Q111291756|Maybe Mbowa]]'' | | | | | |- | ''[[:d:Q111291757|Meliwe Phuthi]]'' | | | | | |- | ''[[:d:Q111291758|Mildred Reason Dube]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111291759|Molly Ndlovu]]'' | | | | | |- | ''[[:d:Q111291761|Morgan Komichi]]'' | | | | | |- | ''[[:d:Q111291762|Oliver Chidawu]]'' | | | | | |- | ''[[:d:Q111291764|Phyllis Ndlovu]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111291765|Rejoice Timire]]'' | | [[IZimbabwe]] | 2018-08 | | |- | ''[[:d:Q111291766|Shephered Chengeta Gundu]]'' | | | | | |- | ''[[:d:Q111291767|Sikelela Gumpo]]'' | | | | | |- | ''[[:d:Q111291768|Spinani Hungwe]]'' | | | | | |- | ''[[:d:Q111291769|Tambudzani Moyo]]'' | | | | | |- | ''[[:d:Q111291770|Tapfumanei Wunganayi]]'' | | | | | |- | ''[[:d:Q111291771|Themba Mathuthu]]'' | | | | | |- | ''[[:d:Q111291772|Theresa Maonei Makone]]'' | | | | | |- | ''[[:d:Q111291774|Tichinani Mavetera]]'' | | | | | |- | ''[[:d:Q111291775|Voice Chinake]]'' | | | | | |- | ''[[:d:Q111291776|Watson Khupe]]'' | | | | | |- | ''[[:d:Q111291777|Witness Bungu]]'' | | | | | |- | ''[[:d:Q111295117|Shaddy Sai]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111313041|Jefta Chindanya]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111313199|Phone Madiro]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111313735|Agnes Dete]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111313737|Edmund Jacob]]'' | | | | | |- | ''[[:d:Q111313738|Enna Chitsa]]'' | | | | | |- | ''[[:d:Q111313740|Gladys Dube]]'' | | | | | |- | ''[[:d:Q111313741|Gladys Mabhiza]]'' | | | | | |- | ''[[:d:Q111313742|Josiah Rimbi]]'' | | | | | |- | ''[[:d:Q111313743|Matson Mpofu]]'' | | | | | |- | ''[[:d:Q111313745|Misheck Chando]]'' | | | | | |- | ''[[:d:Q111313746|Monica Mustvangwa]]'' | | | | | |- | ''[[:d:Q111313747|Obert Gutu]]'' | | | | | |- | ''[[:d:Q111313748|Oriah Kabayanjiri]]'' | | | | | |- | ''[[:d:Q111313749|Rutendo Chikukwa]]'' | | | | | |- | ''[[:d:Q111313750|Samuel Tsungirirai]]'' | | | | | |- | ''[[:d:Q111313751|Stanley Sakupwanya]]'' | | | | | |- | ''[[:d:Q111313752|Sydney Sekeremayi]]'' | | | | | |- | ''[[:d:Q111313822|Ananias Nyathi]]'' | | | | | |- | ''[[:d:Q111313824|Betty Chikava]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111313825|Cephas Chikwanha]]'' | | | | | |- | ''[[:d:Q111313827|Chiratidzo Gava]]'' | | | | | |- | ''[[:d:Q111313828|Clarissa Muchengeti]]'' | | | | | |- | ''[[:d:Q111313829|Dalumuzi Khumalo]]'' | | | | | |- | ''[[:d:Q111313830|Diamond Mumvuri]]'' | | | | | |- | ''[[:d:Q111313832|Edmond Jacob]]'' | | | | | |- | ''[[:d:Q111313833|Egneti Makono]]'' | | | | | |- | ''[[:d:Q111313834|Eunice Sandi]]'' | | | | | |- | ''[[:d:Q111313835|Fanuel Bayayi]]'' | | | | | |- | ''[[:d:Q111313836|Forbes Magadu]]'' | | | | | |- | ''[[:d:Q111313837|Grace Dube]]'' | | | | | |- | ''[[:d:Q111313838|Greenfield Nyoni]]'' | | | | | |- | ''[[:d:Q111313839|Henry Chikumbiro]]'' | | | | | |- | ''[[:d:Q111313840|Josephine Moyo]]'' | | | | | |- | ''[[:d:Q111313841|Kantibhai Patel]]'' | | [[IZimbabwe]] | 2005-04-12<br/>1985 | 2008-03-28<br/>1990 | [[File:The Vice President, Shri M. Venkaiah Naidu at the Samadhi of Kantibhai Govardhanbhai Patel who had migrated to Zimbabwe in 1961 and rose to become a senator and was elected as Member of Parliament, in Harare, Zimbabwe.JPG|center|128px]] |- | ''[[:d:Q111313842|Leonard Munotengwa]]'' | | | | | |- | ''[[:d:Q111313843|Livia Gumbura]]'' | | | | | |- | ''[[:d:Q111313844|Lot Mbambo]]'' | | | | | |- | ''[[:d:Q111313845|Mandy Chimene]]'' | | | | | |- | ''[[:d:Q111313846|Oria Kabayanjiri]]'' | | | | | |- | ''[[:d:Q111313847|Richard Hove]]'' | | [[IZimbabwe]] | | | |- | ''[[:d:Q111313848|Rittah Ndlovu]]'' | | | | | |- | ''[[:d:Q111313849|Sheila Mahere]]'' | | | | | |- | ''[[:d:Q111313850|Sibangilizwe Msipa]]'' | | | | | |- | ''[[:d:Q111313851|Siriro Majuru]]'' | | | | | |- | ''[[:d:Q111313852|Stefano Mukusha]]'' | | | | | |- | ''[[:d:Q111313853|Tazvitya Mapfumo]]'' | | | | | |- | ''[[:d:Q111313854|Thabiso Ndlovu]]'' | | | | | |- | ''[[:d:Q111313855|Tobias Matanga]]'' | | | | | |- | ''[[:d:Q111313857|Virginia Muchengeti]]'' | | | | | |- | ''[[:d:Q111313858|Vivian Muchicho]]'' | | | | | |} {{Wikidata list end}} 6lf00wkgqtcbiljoqb5o5afgzc1tdge User:GerardM/Members of the Parliament of Uganda 2 9949 126066 125970 2026-07-14T21:40:45Z ListeriaBot 10758 Wikidata list updated [V2] 126066 wikitext text/x-wiki This list is not ready for use on Wikipedia because a Member of the Parliament of Uganda who was a member twice does not show twice. {{Wikidata list |sparql=SELECT ?item WHERE { ?item wdt:P39 wd:Q21296005 } |section= |sort=P39/Q21296005/P580 |sort_order=desc |columns=label:Article,description,P27:Country,P39/Q21296005/P580:Start date,P39/Q21296005/P582:End date,P18:Image |thumb=128 |min_section=2 }} {| class='wikitable sortable' ! Article ! description ! Country ! Start date ! End date ! Image |- | ''[[:d:Q21759|Winnie Byanyima]]'' | | [[IYuganda]] | | | [[File:Winnie Byanyima, directrice exécutive d'Oxfam international.jpg|center|128px]] |- | ''[[:d:Q49253|Irene Muloni]]'' | | [[IYuganda]] | | | [[File:Irene Muloni - 2018 (cropped).jpg|center|128px]] |- | ''[[:d:Q57873|Amama Mbabazi]]'' | | [[IYuganda]] | 2003-02-11 | 2016-02-18 | [[File:The Minister of Security, Uganda, Mr. Amama Mbabazi meeting with the Minister of State for External Affairs Shri Anand Sharma, in New Delhi on August 28, 2007.jpg|center|128px]] |- | ''[[:d:Q58240|Sam Kutesa]]'' | | [[IYuganda]] | | | [[File:Sam Kutesa - 2018 (32521275868) (cropped).jpg|center|128px]] |- | ''[[:d:Q393388|Aggrey Awori]]'' | | [[IYuganda]] | 2001 | 2006 | [[File:Aggrey-awori.jpg|center|128px]] |- | ''[[:d:Q486859|Paul Ssemogerere]]'' | | [[IYuganda]] | | | [[File:Paul Kawanga Ssemogerere (cropped).jpg|center|128px]] |- | ''[[:d:Q1026465|Rebecca Kadaga]]'' | | [[IYuganda]] | | | [[File:Kadaga Rebecca 2.jpg|center|128px]] |- | ''[[:d:Q1173623|David Bahati]]'' | | [[IYuganda]] | | | [[File:Bahati David.jpg|center|128px]] |- | ''[[:d:Q1307960|Ken Lukyamuzi]]'' | | [[IYuganda]] | | 2016 | [[File:Ken Lukyamuzi.jpg|center|128px]] |- | ''[[:d:Q1354926|Eriya Kategaya]]'' | | [[IYuganda]] | | | [[File:The Right Honorable Eriya Kategaya (cropped).jpg|center|128px]] |- | ''[[:d:Q1441372|Francis Ayume]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q1740843|Ruhakana Rugunda]]'' | | [[IYuganda]] | | | [[File:Prime Minister Rugunda.png|center|128px]] |- | ''[[:d:Q1949128|Moses Ali]]'' | | [[IYuganda]] | | | [[File:Ali Moses.jpg|center|128px]] |- | ''[[:d:Q2605033|Betty Oyella Bigombe]]'' | | [[IYuganda]] | | | [[File:Bigombe Betty Atuku.jpg|center|128px]] |- | ''[[:d:Q3105642|Gilbert Bukenya]]'' | | [[IYuganda]] | | | [[File:Dr. Gilbert Balibaseka Bukenya (cropped).jpg|center|128px]] |- | ''[[:d:Q3784984|Henry Oryem Okello]]'' | | [[IYuganda]] | | | [[File:Acting Foreign Minister Okello Oryem (cropped).jpg|center|128px]] |- | ''[[:d:Q4280983|Norbert Mao]]'' | | [[IYuganda]] | | | [[File:Norbert Mao (cropped).jpg|center|128px]] |- | ''[[:d:Q4665198|Abdu Katuntu]]'' | | [[IYuganda]] | 2021 | | [[File:Abdul-Katuntu1.jpg|center|128px]] |- | ''[[:d:Q4684139|Adolf Mwesige]]'' | | [[IYuganda]] | | | [[File:Mwesige Adolf.jpg|center|128px]] |- | ''[[:d:Q4693003|Agnes Akiror]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q4696656|Aidah Nantaba]]'' | | [[IYuganda]] | | | [[File:Nantaba Idah Erios.jpg|center|128px]] |- | ''[[:d:Q4700611|Akena p'Ojok]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q4716143|Alengot Oromait]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q4717580|Alex Onzima]]'' | | [[IYuganda]] | | | [[File:Aadroa Alex Onzima.jpg|center|128px]] |- | ''[[:d:Q4726787|Alintuma Nsambu]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q4742276|Amelia Kyambadde]]'' | | [[IYuganda]] | 2021 | | [[File:Amelia Kyambadde.jpg|center|128px]] |- | ''[[:d:Q4795550|Aronda Nyakairima]]'' | | [[IYuganda]] | | | [[File:Gen. Nyakayirima Aronda (cropped).jpg|center|128px]] |- | ''[[:d:Q4810985|Aston Kajara]]'' | | [[IYuganda]] | | | [[File:Kajara Aston Peterson.jpg|center|128px]] |- | ''[[:d:Q4811869|Asuman Kiyingi]]'' | | [[IYuganda]] | | | [[File:Mohd. Hamid Ansari with the Minister of State for Regional Cooperation & Acting Foreign Minister of Uganda, Mr. Asuman Kiyingi, on his arrival at Entebbe International Airport, Uganda on July 08, 2011 (cropped).jpg|center|128px]] |- | ''[[:d:Q4859206|Barbara Oundo Nekesa]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q4877118|Beatrice Atim Anywar]]'' | | [[IYuganda]] | | | [[File:Atim Beatrice Anywar.jpg|center|128px]] |- | ''[[:d:Q4877205|Beatrice Wabudeya]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q4935806|Bobi Wine]]'' | | [[IYuganda]] | 2017-07-11 | 2021 | [[File:Bobi Wine 2024.png|center|128px]] |- | ''[[:d:Q5045178|Caroline Okao Amali]]'' | | [[IYuganda]] | | | [[File:Amali, Caroline Okao.jpg|center|128px]] |- | ''[[:d:Q5064251|Cerinah Nebanda]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q5075388|Charles Bakkabulindi]]'' | | [[IYuganda]] | | | [[File:Bakkabulindi Charles.jpg|center|128px]] |- | ''[[:d:Q5110904|Christine Amongin Aporu]]'' | | [[IYuganda]] | | | [[File:Amongin, Christine Aporu Hellen.jpg|center|128px]] |- | ''[[:d:Q5186066|Crispus Kiyonga]]'' | | [[IYuganda]] | | | [[File:Hon. Dr. Cryspus Kiyonga, minister of Defence speaking during the AMISOM Retreat in Kampala- Uganda (16220704751).jpg|center|128px]] |- | ''[[:d:Q5227877|Daudi Migereko]]'' | | [[IYuganda]] | | | [[File:Migereko Daudi.jpg|center|128px]] |- | ''[[:d:Q5240436|David Tinyefunza]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q5240772|David Wakikona]]'' | | [[IYuganda]] | | | [[File:Wakikona Wandendeya David.jpg|center|128px]] |- | ''[[:d:Q5345394|Edward Ssekandi]]'' | | [[IYuganda]] | | | [[File:Edward Ssekandi.jpg|center|128px]] |- | ''[[:d:Q5366225|Elly Tumwine]]'' | | [[IYuganda]] | | | [[File:General Elly Tumwine.jpg|center|128px]] |- | ''[[:d:Q5373324|Emmanuel Otala]]'' | | [[IYuganda]] | | | [[File:Otiam Emmanuel Otaala.jpg|center|128px]] |- | ''[[:d:Q5377366|Abner Nangwale]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q5382289|Ephraim Kamuntu]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q5385927|Erias Lukwago]]'' | | [[IYuganda]] | | | [[File:Independence Cup.jpg|center|128px]] |- | ''[[:d:Q5393381|Ernest Kiiza]]'' | | [[IYuganda]] | | | [[File:Kiiza, Monday Ernest Apuuli.jpg|center|128px]] |- | ''[[:d:Q5458060|Flavia Nabugere Munaaba]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q5490025|Frank Tumwebaze]]'' | | [[IYuganda]] | | | [[File:Tumwebaze Frank Kagyigyi.jpg|center|128px]] |- | ''[[:d:Q5495976|Fred Mukisa]]'' | | [[IYuganda]] | | | [[File:Fred Mukisa.jpg|center|128px]] |- | ''[[:d:Q5496029|Fred Omach]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q5496187|Fred Ruhindi]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q5515776|Gabriel Opio]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q5549595|Gerald Ssendaula]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q5590968|Grace Akello]]'' | | [[IYuganda]] | 1996 | 2006 | [[File:Grace Akello, Ausschnitt aus dem Foto von Filo gèn'.jpg|center|128px]] |- | ''[[:d:Q5717682|Henry Bagiire]]'' | | [[IYuganda]] | | | [[File:Bagiire Aggrey Henry.jpg|center|128px]] |- | ''[[:d:Q5717757|Henry Banyenzaki]]'' | | [[IYuganda]] | | | [[File:Banyenzaki Henry.jpg|center|128px]] |- | ''[[:d:Q5724197|Henry Kajura]]'' | | [[IYuganda]] | | | [[File:Kajura, Henry Muganwa.jpg|center|128px]] |- | ''[[:d:Q5761037|Hilary Onek]]'' | | [[IYuganda]] | | | [[File:Hilary Onek (cropped).jpg|center|128px]] |- | ''[[:d:Q6076821|Isaac Musumba]]'' | | [[IYuganda]] | 1996 | 2011 | [[File:Salaamu Musumba.jpg|center|128px]] |- | ''[[:d:Q6087896|Israel Kibirige Ssebunya]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q6096678|Ivan Koreta]]'' | | [[IYuganda]] | | | [[File:Ivan Koreta Atlas Drop 11, Soroti, Uganda, April 2011.jpg|center|128px]] |- | ''[[:d:Q6119076|Jacob Oulanyah]]'' | | [[IYuganda]] | 2011 | | [[File:Jacoub Oulanyah (cropped).jpg|center|128px]] |- | ''[[:d:Q6129213|James Baba]]'' | | [[IYuganda]] | | | [[File:James Boliba Baba (cropped).jpg|center|128px]] |- | ''[[:d:Q6140211|James Mutende]]'' | | [[IYuganda]] | | | [[File:2013-Uganda's Minister of State for Industry Shinyabulo-Mutende (cropped).jpg|center|128px]] |- | ''[[:d:Q6140434|James Nsaba Buturo]]'' | | [[IYuganda]] | | | [[File:Buturo Nsaba.jpg|center|128px]] |- | ''[[:d:Q6150822|Janat Mukwaya]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q6176542|Jeje Odongo]]'' | | [[IYuganda]] | 2006 | | [[File:Jeje Odongo (cropped).jpg|center|128px]] |- | ''[[:d:Q6180999|Jeremiah Twa-Twa]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q6187188|Jessica Eriyo]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q6224194|John Byabagambi]]'' | | [[IYuganda]] | | | [[File:Byabagambi John.jpg|center|128px]] |- | ''[[:d:Q6226097|John Chrysostom Muyingo]]'' | | [[IYuganda]] | | | [[File:Muyingo John Chrysestom.jpg|center|128px]] |- | ''[[:d:Q6250155|John Nasasira]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q6287007|James Simpson]]'' | | [[IYuganda]] | | | [[File:James-Simpson-1962.jpg|center|128px]] |- | ''[[:d:Q6318370|Justine Lumumba Kasule]]'' | | [[IYuganda]] | | | [[File:Kasule, Justine Lumumba.jpg|center|128px]] |- | ''[[:d:Q6343791|Kabakumba Masiko]]'' | | [[IYuganda]] | | | [[File:Kabakumba, Masiko Labwoni.jpg|center|128px]] |- | ''[[:d:Q6346972|Kahinda Otafiire]]'' | | [[IYuganda]] | | | [[File:Kahinda Otafiire (cropped).jpg|center|128px]] |- | ''[[:d:Q6378429|Katumba Wamala]]'' | | [[IYuganda]] | | | [[File:Katumba Wamala.jpg|center|128px]] |- | ''[[:d:Q6404722|Kiddu Makubuya]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q6414662|Kipoi Tonny Nsubuga]]'' | | [[IYuganda]] | 2011 | 2014 | [[File:Kipoi Tonny Nsubuga.jpg|center|128px]] |- | ''[[:d:Q6702541|Lukia Isanga Nakadama]]'' | | [[IYuganda]] | | | [[File:Lukia Nakadama Isanga.jpg|center|128px]] |- | ''[[:d:Q6702958|Lulume Bayiga]]'' | | [[IYuganda]] | 2007 | 2016 | [[File:Bayigga Michael Philip Lulume.jpg|center|128px]] |- | ''[[:d:Q6761446|Maria Mutagamba]]'' | | [[IYuganda]] | | | [[File:Hon Dr Maria Emily Lubega Mutagamba, Minister of Tourism, Uganda (26294629095).jpg|center|128px]] |- | ''[[:d:Q6779980|Mary Karooro Okurut]]'' | | [[IYuganda]] | 2006 | 2021 | [[File:Mary Karooro Okurut (cropped) (cropped).jpg|center|128px]] |- | ''[[:d:Q6787393|Matia Kasaija]]'' | | [[IYuganda]] | | | [[File:Matia Kasaija profile.jpg|center|128px]] |- | ''[[:d:Q6847499|Mike Kennedy Sebalu]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q6873258|Miria Matembe]]'' | | [[IYuganda]] | 1996 | 2006 | [[File:Miria-Matembe.png|center|128px]] |- | ''[[:d:Q6932197|Mugisha Muntu]]'' | | [[IYuganda]] | | | [[File:Mugisha Muntu 2020.jpg|center|128px]] |- | ''[[:d:Q6939908|Musa Ecweru]]'' | | [[IYuganda]] | 2011 | | [[File:Ecweru Musa Francis.jpg|center|128px]] |- | ''[[:d:Q6944303|Muyanja Mbabaali]]'' | | [[IYuganda]] | | | [[File:Mbabaali, Muyanja.jpg|center|128px]] |- | ''[[:d:Q6944729|Mwesigwa Rukutana]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q6961899|Namirembe Bitamazire]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q7045634|Nobel Mayombo]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q7070387|Nusura Tiperu]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q7089874|Omara Atubo]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q7175509|Peter Lokeris]]'' | | [[IYuganda]] | | | [[File:Lokeris Teko Peter.jpg|center|128px]] |- | ''[[:d:Q7176147|Peter Nyombi]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q7301855|Rebecca Otengo Amuge]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q7328008|Richard Nduhura]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q7329499|Richard Todwong]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q7365019|Ronald Kibuule]]'' | | [[IYuganda]] | | | [[File:Kibuule, Ronald.jpg|center|128px]] |- | ''[[:d:Q7367874|Rose Namayanja]]'' | | [[IYuganda]] | 2006-05 | 2016-02 | |- | ''[[:d:Q7368409|Rosemary Najjemba]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q7378868|Rukiya Chekamondo]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q7383142|Ruth Nankabirwa]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q7403915|Saleh Kamba]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q7407448|Sam Engola]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q7417487|Sandy Stevens Tickodri-Togboa]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q7422470|Sarah Kataike]]'' | | [[IYuganda]] | | | [[File:Kataike, Sarah Ndoboli.jpg|center|128px]] |- | ''[[:d:Q7422653|Sarah Opendi Achieng]]'' | | [[IYuganda]] | | | [[File:Achieng Sarah Opendi.jpg|center|128px]] |- | ''[[:d:Q7452728|Serapio Rukundo]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q7459446|Sezi Mbaguta]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q7518558|Simon D'Ujanga]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q7518688|Simon Ejua]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q7519223|Simon Lokodo]]'' | | [[IYuganda]] | | | [[File:Lokodo simon.jpg|center|128px]] |- | ''[[:d:Q7608889|Stephen Chebrot]]'' | | [[IYuganda]] | | | [[File:Chebrot Stephen Chemoiko.jpg|center|128px]] |- | ''[[:d:Q7635964|Sulaiman Kyebakoze Madada]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q7659743|Syda Bbumba]]'' | | [[IYuganda]] | | | [[File:Bbumba Syda Namirembe.jpg|center|128px]] |- | ''[[:d:Q7686751|Tarsis Kabwegyere]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q7781207|Thembo Nyombi]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q7815151|Tom Butime]]'' | | [[IYuganda]] | | | [[File:Butime Tom Ateenyi.jpg|center|128px]] |- | ''[[:d:Q7838817|Tress Bucyanayandi]]'' | | [[IYuganda]] | | | [[File:Bucyanayandi Tress.jpg|center|128px]] |- | ''[[:d:Q7900065|Urban Tibamanya]]'' | | [[IYuganda]] | | | [[File:Urban Tibamanya.jpg|center|128px]] |- | ''[[:d:Q7927031|Victoria Sekitoleko]]'' | | [[IYuganda]] | | | [[File:Victoria Sekitoleko.jpg|center|128px]] |- | ''[[:d:Q7931970|Vincent Nyanzi]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q7983291|Werikhe Kafabusa]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q8023150|Wilson Muruuli Mukasa]]'' | | [[IYuganda]] | | | [[File:Mukasa Muruuli Wilson.jpg|center|128px]] |- | ''[[:d:Q8069664|Zerubabel Nyiira]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q15993247|Stephen Mallinga]]'' | | [[IYuganda]] | | | [[File:Mallinga Stephen Oscar.jpg|center|128px]] |- | ''[[:d:Q16145569|Jim Muhwezi]]'' | | [[IYuganda]] | | | [[File:Muhwezi Jim Katugugu.jpg|center|128px]] |- | ''[[:d:Q16148125|Charles Angina]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q16186459|Bright Rwamirama]]'' | | [[IYuganda]] | | | [[File:Rwamirama Bright Kanyontore.jpg|center|128px]] |- | ''[[:d:Q16187230|Hope Mwesigye]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q16193010|Kamanda Bataringaya]]'' | | [[IYuganda]] | | | [[File:Kamanda, Cos Bataringaya.jpg|center|128px]] |- | ''[[:d:Q16194600|Dorothy Samali Hyuha]]'' | | [[IYuganda]] | | | [[File:Dorothy Hyuha (cropped).jpg|center|128px]] |- | ''[[:d:Q16194624|James Kakooza]]'' | | [[IYuganda]] | | | [[File:Kakooza James.jpg|center|128px]] |- | ''[[:d:Q16196528|Evelyn Kaabule]]'' | | [[IYuganda]] | | | [[File:Kaabule, Evelyn Naome Mpagi N.jpg|center|128px]] |- | ''[[:d:Q16200545|Jennifer Namuyangu]]'' | | [[IYuganda]] | | | [[File:Namuyangu Kacha Jenipher.jpg|center|128px]] |- | ''[[:d:Q16203636|Abraham Byandaala]]'' | | [[IYuganda]] | | | [[File:Byandala Abraham James.jpg|center|128px]] |- | ''[[:d:Q16203647|Henry Musasizi]]'' | | [[IYuganda]] | | | [[File:Musasizi Dec 2015.jpg|center|128px]] |- | ''[[:d:Q16727764|Loyce Biira Bwambale]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q16745020|Stanislaus Okurut]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q16751154|Phillip Wafula Ogutu]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q16875907|Chris Baryomunsi]]'' | | [[IYuganda]] | 2006 | | [[File:Chris Baryomunsi.jpg|center|128px]] |- | ''[[:d:Q17020396|Oliver Wonekha]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q18683782|Concy Aciro]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q18764172|Judith Babirye]]'' | | [[IYuganda]] | | | [[File:Judith-babirye.jpg|center|128px]] |- | ''[[:d:Q18977763|Jaberi Bidandi Ssali]]'' | | [[IYuganda]] | | | [[File:Jaberi Bidandi Ssali.jpg|center|128px]] |- | ''[[:d:Q19276819|Cecilia Ogwal]]'' | | [[IYuganda]] | 1994<br/>2011 | 2006<br/>2016 | [[File:Atim Ogwal Cecilia Barbara.jpg|center|128px]] |- | ''[[:d:Q19364579|Sam Otada]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q19609598|Evelyn Anite]]'' | | [[IYuganda]] | | | [[File:Anite Evelyn.jpg|center|128px]] |- | ''[[:d:Q19609616|Gabriel Ajedra Aridru]]'' | | [[IYuganda]] | | | [[File:Ajedra Gabriel Gadison Aridru.jpg|center|128px]] |- | ''[[:d:Q19666374|Vincent Ssempijja]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q19666505|Mariam Nalubega]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q19667631|Elioda Tumwesigye]]'' | | [[IYuganda]] | | | [[File:Elioda.jpg|center|128px]] |- | ''[[:d:Q19667761|Innocent Oula]]'' | | [[IYuganda]] | | | [[File:Innocent Oula.jpg|center|128px]] |- | ''[[:d:Q19668408|Adison Kakuru]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q19668441|Ibrahim Ssemujju Nganda]]'' | | [[IYuganda]] | | | [[File:Ssemujju Ibrahim.jpg|center|128px]] |- | ''[[:d:Q19668599|Beti Kamya-Turwomwe]]'' | | [[IYuganda]] | | | [[File:Beti Kamya 2015.jpg|center|128px]] |- | ''[[:d:Q19892030|Shem Bageine]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q19893338|Philemon Mateke]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q19893521|Mike Mukula]]'' | | [[IYuganda]] | | | [[File:AF6A9993.png|center|128px]] |- | ''[[:d:Q20684666|Nandala Mafabi]]'' | | [[IYuganda]] | | | [[File:Nandala Mafabi Nathan James.jpg|center|128px]] |- | ''[[:d:Q20684950|Florence Nebanda]]'' | | [[IYuganda]] | | | [[File:Nebanda Andiru Florence.jpg|center|128px]] |- | ''[[:d:Q20810576|Dora Byamukama]]'' | | | | | |- | ''[[:d:Q21062725|Patrick Mutono]]'' | | [[IYuganda]] | | | [[File:Mutono Patrick Lodoi.jpg|center|128px]] |- | ''[[:d:Q22007122|Betty Nambooze]]'' | | [[IYuganda]] | | | [[File:Betty Nambooze.webp|center|128px]] |- | ''[[:d:Q24565103|Dennis Galabuzi Ssozi]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q24565843|Sam Cheptoris]]'' | | [[IYuganda]] | | | [[File:Cheptoris Sam Mangusho.jpg|center|128px]] |- | ''[[:d:Q24565855|Monica Azuba Ntege]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q24565886|Baltazar Kasirivu-Atwooki]]'' | | [[IYuganda]] | | | [[File:Kasirivu, Atwoki.jpg|center|128px]] |- | ''[[:d:Q24572355|Kevinah Taaka Wanaha Wandera]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q24572616|Jane Aceng]]'' | | [[IYuganda]] | 2016 | | [[File:Ugandan Health Minister Dr. Jane Aceng (37922701691).jpg|center|128px]] |- | ''[[:d:Q24572619|Betty Amongi]]'' | | [[IYuganda]] | | | [[File:Hon Betty Amongi Ongom WE4D Launch WE4D Launch 2024-306 4.jpg|center|128px]] |- | ''[[:d:Q24572620|Florence Nakiwala Kiyingi]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q24572629|Abdul Nadduli]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q24572632|William Byaruhanga]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q24572633|Esther Mbulakubuza Mbayo]]'' | | [[IYuganda]] | | | [[File:Mbayo.png|center|128px]] |- | ''[[:d:Q24572652|Grace Kwiyucwiny]]'' | | [[IYuganda]] | | | [[File:Kwiyucwiny Grace Freedom.jpg|center|128px]] |- | ''[[:d:Q24572655|Joyce Moriku]]'' | | [[IYuganda]] | | | [[File:Moriku Joyce Kaducu.jpg|center|128px]] |- | ''[[:d:Q24572657|Julius Wandera Maganda]]'' | | [[IYuganda]] | | | [[File:Maganda Julius Samia.jpg|center|128px]] |- | ''[[:d:Q24572671|Harriet Ntabazi]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q24572683|Moses Kizige]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q24572701|David Karubanga]]'' | | [[IYuganda]] | | | [[File:Karubanga David.jpg|center|128px]] |- | ''[[:d:Q24572708|Joy Kabatsi]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q24572730|Ruth Achieng]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q24572733|Persis Princess Namuganza]]'' | | [[IYuganda]] | | | [[File:Namuganza Persis Princess.jpg|center|128px]] |- | ''[[:d:Q24572738|Mary Goretti Kitutu]]'' | | [[IYuganda]] | | | [[File:Kitutu Mary Goretti Kimono.jpg|center|128px]] |- | ''[[:d:Q24572740|Christopher Kibanzanga]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q24572753|Rosemary Seninde]]'' | | [[IYuganda]] | | | [[File:Rosemary Seninde.jpg|center|128px]] |- | ''[[:d:Q24572755|Benna Namugwanya]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q24572836|Adrian Tibaleka]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q24572839|Aggrey Bagiire]]'' | | [[IYuganda]] | | | [[File:Bagiire Aggrey Henry.jpg|center|128px]] |- | ''[[:d:Q24572841|Haruna Kasolo Kyeyune]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q24572842|Ismael Orot]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q24668795|Peace Mutuuzo]]'' | | [[IYuganda]] | | | [[File:Mutuuzo Peace Regis.jpg|center|128px]] |- | ''[[:d:Q24851611|Frederick Ngobi Gume]]'' | | [[IYuganda]] | | | [[File:Frederick Ngobi Gume (cropped).jpg|center|128px]] |- | ''[[:d:Q24851613|Godfrey Kiwanda]]'' | | [[IYuganda]] | | | [[File:Godfrey Kiwanda (cropped).jpg|center|128px]] |- | ''[[:d:Q24851618|Kania Obiga]]'' | | [[IYuganda]] | | | [[File:Obiga Kania.jpg|center|128px]] |- | ''[[:d:Q24851651|Charles Engola]]'' | | [[IYuganda]] | | | [[File:Okello Charles Patrick Engola Macodwogo.jpg|center|128px]] |- | ''[[:d:Q24896277|Herbert Kabafunzaki]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q25755641|Felix Kulayigye]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q27688647|Nabilah Naggayi Sempala]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q27973946|Jacob Marksons Oboth]]'' | | [[IYuganda]] | | | [[File:Oboth Marksons Jacob.jpg|center|128px]] |- | ''[[:d:Q28136300|Kirya Balaki Kebba]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q29618018|Alex Ruhunda]]'' | | [[IYuganda]] | | | [[File:Ruhunda Alex.jpg|center|128px]] |- | ''[[:d:Q29898231|Vincent Woboya]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q29913996|Andrew Baryayanga]]'' | | [[IYuganda]] | | | [[File:Baryayanga Andrew Aja.jpg|center|128px]] |- | ''[[:d:Q29917557|Paul Amoru]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q29947195|Makmot Otto]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q29963755|Michael Tusiime]]'' | | [[IYuganda]] | | | [[File:Tusiime.jpg|center|128px]] |- | ''[[:d:Q30070354|Mariam Naigaga]]'' | | [[IYuganda]] | | | [[File:Mariam naigaga.jpg|center|128px]] |- | ''[[:d:Q30091390|Allan Ssewanyana]]'' | | [[IYuganda]] | | | [[File:Allan Ssewanyana.jpg|center|128px]] |- | ''[[:d:Q30110261|Lawrence Akugizibwe]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q30150061|Richard Gafabusa]]'' | | [[IYuganda]] | | | [[File:Gafabusa.jpg|center|128px]] |- | ''[[:d:Q30228752|Deo Rwabiita]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q30234278|Daudi Ochieng]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q30302621|Jack Sabiiti]]'' | | [[IYuganda]] | | | [[File:Jack Sabiiti.jpg|center|128px]] |- | ''[[:d:Q30323559|Sam Bitangaro]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q30323636|Sam Byibesho]]'' | | [[IYuganda]] | | | [[File:Byibesho.jpg|center|128px]] |- | ''[[:d:Q30323658|Jacklet Atuhaire]]'' | | [[IYuganda]] | | | [[File:Atuhaire.jpg|center|128px]] |- | ''[[:d:Q30323685|Boaz Ninsiima]]'' | | [[IYuganda]] | | | [[File:Ninsiima Boaz Kasirabo.jpg|center|128px]] |- | ''[[:d:Q30899710|Jastine Ayebazibwe]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q30945317|Rosemary Tumusiime]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q31153326|Ismail Ogama]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q31213353|Moses Adome]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q32538609|Beatrice Rwakimari]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q32540570|Paulson Luttamaguzi]]'' | | [[IYuganda]] | | | [[File:Luttamaguzi Semakula Paulson.jpg|center|128px]] |- | ''[[:d:Q33125043|Kassiano Wadri]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q33978057|John Bosco Ikojo]]'' | | [[IYuganda]] | | | [[File:Ikojo John Bosco.jpg|center|128px]] |- | ''[[:d:Q34345403|Simon Mulongo]]'' | | [[IYuganda]] | | | [[File:Simon Mulongo.jpg|center|128px]] |- | ''[[:d:Q36490457|Okin Ojara]]'' | | [[IYuganda]] | | | [[File:Okin P.P Ojara.jpg|center|128px]] |- | ''[[:d:Q36824970|Lawrence Mangusho]]'' | | [[IYuganda]] | | | [[File:Mangusho EBB 278.jpg|center|128px]] |- | ''[[:d:Q37122067|Emma Boona]]'' | | [[IYuganda]] | | | [[File:HON.BOONA EMMA.jpg|center|128px]] |- | ''[[:d:Q38587500|Andrew Kaluya]]'' | | [[IYuganda]] | | | [[File:Andrew Kaluya Cropped.jpg|center|128px]] |- | ''[[:d:Q39059042|Augustine Nshimye]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q39073765|Isaac Mulindwa]]'' | | [[IYuganda]] | | | [[File:Isaac Mulindwa.jpg|center|128px]] |- | ''[[:d:Q41693469|Molly Kamukama]]'' | | | | | |- | ''[[:d:Q41768539|Agnes Atim Apea]]'' | | [[IYuganda]] | | | [[File:Atim Agnes Apea.jpg|center|128px]] |- | ''[[:d:Q42122025|Doreen Amule]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q42664267|Winnie Kiiza]]'' | | [[IYuganda]] | 2006 | 2021 | [[File:Winnie Kiiza.jpg|center|128px]] |- | ''[[:d:Q42759362|Angelline Osegge]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q42820085|Anna Ebaju Adeke]]'' | | [[IYuganda]] | | | [[File:Adeke Anna Ebaju.jpg|center|128px]] |- | ''[[:d:Q42868219|Grace Tubwita]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q43267627|Joy Atim]]'' | | [[IYuganda]] | 2011 | 2021 | |- | ''[[:d:Q43375707|Lucy Akello]]'' | | [[IYuganda]] | | | [[File:Akello Lucy.jpg|center|128px]] |- | ''[[:d:Q44231567|Lillian Nakate]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q47130307|James Makumbi]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q50146409|Florence Alice Lubega]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q51844074|Hellen Kahunde]]'' | | [[IYuganda]] | | | [[File:Kahunde Helen.jpg|center|128px]] |- | ''[[:d:Q52615829|Judith Nabakooba]]'' | | [[IYuganda]] | | | [[File:Judith Nabakooba.jpg|center|128px]] |- | ''[[:d:Q53707363|Jacqueline Amongin]]'' | | [[IYuganda]] | | | [[File:Honorable Jacqueline Amongin (cropped).jpg|center|128px]] |- | ''[[:d:Q54233287|Agnes Nandutu]]'' | | [[IYuganda]] | 2021 | | [[File:Nandutu Agnes.jpg|center|128px]] |- | ''[[:d:Q54233867|Victoria Mwaka]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q54874973|Ibrahim Abiriga]]'' | | [[IYuganda]] | 2016 | 2018-06-08 | |- | ''[[:d:Q55583703|Joyce Mpanga]]'' | | [[IYuganda]] | 1996 | 2001 | [[File:Hon. Joyce Mpanga (cropped).jpg|center|128px]] |- | ''[[:d:Q55584067|Sylvia Rwabogo]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q56043365|Betty Aol Ochan]]'' | | [[IYuganda]] | 2006 | 2026 | [[File:Betty Aol Ocan.jpg|center|128px]] |- | ''[[:d:Q56949745|Sylvia Nayebale]]'' | | [[IYuganda]] | | | [[File:Nayebale Sylvia.jpg|center|128px]] |- | ''[[:d:Q57824490|Rosette Kajungu Mutambi]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q57825185|Sheila Mwine Kabaije]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q57825198|Adoa Hellen Abeku]]'' | | [[IYuganda]] | | | [[File:Adoa Hellen.jpg|center|128px]] |- | ''[[:d:Q57825270|Molly Lanyero]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q57825400|Idah Nabayiga]]'' | | [[IYuganda]] | 2016<br/>2026-07-08 | 2021 | |- | ''[[:d:Q57825425|Tophace Kaahwa]]'' | | [[IYuganda]] | | | [[File:Kaahwa, Tophace Byagira.jpg|center|128px]] |- | ''[[:d:Q57826830|Margaret Komuhangi]]'' | | [[IYuganda]] | | | [[File:Komuhangi Margaret.jpg|center|128px]] |- | ''[[:d:Q57828013|Lilly Adong]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q57828421|Ajilo Elogu Maria Goretti]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q57828565|Jesca Ababiku]]'' | | [[IYuganda]] | 2021 | | [[File:Ababiku Jessica 1.jpg|center|128px]] |- | ''[[:d:Q57828964|Achiro Lucy Otim]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q57829630|Alum Sandra Ogwang Santa]]'' | | [[IYuganda]] | 2016 | | [[File:Alum Santa Sandra.jpg|center|128px]] |- | ''[[:d:Q57829781|Margaret Aachilla Aleper]]'' | | [[IYuganda]] | | | [[File:Aleper, Margaret Achilla.jpg|center|128px]] |- | ''[[:d:Q57829968|Faith Alupo]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q57830246|Alyek Judith]]'' | | [[IYuganda]] | 2016 | | [[File:Alyek Judith.jpg|center|128px]] |- | ''[[:d:Q58003275|Evarlyne Buregyeya Asiimwe]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q58003644|Jane Avur Pacuto]]'' | | [[IYuganda]] | | | [[File:Avur Jane Pacuto.jpg|center|128px]] |- | ''[[:d:Q58003789|Betty Awori Engola]]'' | | [[IYuganda]] | | | [[File:Awor Betty Engola.jpg|center|128px]] |- | ''[[:d:Q58041073|Davinia Esther Anyakun]]'' | | [[IYuganda]] | | | [[File:Esther Davinia Anyakun.jpg|center|128px]] |- | ''[[:d:Q58041343|Rama Jacqueline Aol]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q58041487|Rose Atima Ayaka]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q58042010|Margaret Baba Diri]]'' | | [[IYuganda]] | | | [[File:Baba Diri Margaret.jpg|center|128px]] |- | ''[[:d:Q58042319|Breeze Sarah Babirye Kityo]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q58042467|Mary Babirye Kabanda]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q58042684|Veronica Babirye Kadogo]]'' | | [[IYuganda]] | | | [[File:Babirye Veronica Kadogo.jpg|center|128px]] |- | ''[[:d:Q60467181|Anita Among]]'' | | [[IYuganda]] | | | [[File:Anita Annet Among.jpg|center|128px]] |- | ''[[:d:Q60643201|Abigaba Cuthbert Mirembe]]'' | | [[IYuganda]] | | | [[File:Abigaba Cuthbert Mirembe.jpg|center|128px]] |- | ''[[:d:Q60745744|Basil Kiiza Bataringaya]]'' | | [[IYuganda]] | | | [[File:Basil Kiiza Bataringaya, 1964.jpg|center|128px]] |- | ''[[:d:Q61662345|Flavia Byekwaso]]'' | | | | | [[File:Brig. Gen Flavia Byekwaso.jpg|center|128px]] |- | ''[[:d:Q61696432|Susan Lakot]]'' | | | | | |- | ''[[:d:Q62060614|Zaitun Driwaru]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q62067646|Veronica Isala Eragu Bichetero]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q62067701|Pamela Nasiyo Kamugo]]'' | | [[IYuganda]] | | | [[File:Kamugo Pamela Nasiyo.jpg|center|128px]] |- | ''[[:d:Q62068243|Elizabeth Beikiriize Karungi]]'' | | [[IYuganda]] | | | [[File:Karungi, Elizabeth.jpg|center|128px]] |- | ''[[:d:Q62099508|Susan Amero]]'' | | [[IYuganda]] | 2011 | 2026 | [[File:Amero Susan.jpg|center|128px]] |- | ''[[:d:Q62099975|Loy Katali]]'' | | [[IYuganda]] | 2016 | 2021 | |- | ''[[:d:Q62100397|Oliver Katwesigye Koyekyenga]]'' | | [[IYuganda]] | | | [[File:Katwesigye Oliver Koyekyanga.jpg|center|128px]] |- | ''[[:d:Q62100579|Pauline Kemirembe Kyaka]]'' | | [[IYuganda]] | 2016 | | [[File:Kemirembe Pauline Kyaka.jpg|center|128px]] |- | ''[[:d:Q62100890|Grace Kesande Bataringaya]]'' | | [[IYuganda]] | | | [[File:Kesande Grace Bataringaya.jpg|center|128px]] |- | ''[[:d:Q62129102|Caroline Kamusiime]]'' | | [[IYuganda]] | | | [[File:Kamusiime Caroline.jpg|center|128px]] |- | ''[[:d:Q62129115|Naome Kibaaju]]'' | | [[IYuganda]] | | | [[File:Kibaaju Naome.jpg|center|128px]] |- | ''[[:d:Q62129125|Noeline Kisembo Basemera]]'' | | [[IYuganda]] | | | [[File:Kisembo Basemera Noeline.jpg|center|128px]] |- | ''[[:d:Q62129153|Agnes Kunihira]]'' | | [[IYuganda]] | | | [[File:Abwoli Kunihira Agnes.jpg|center|128px]] |- | ''[[:d:Q62129230|Margaret Mbeiza Kisira]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q62129269|Lydia Daphine Mirembe]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q62480234|Stella Namoe Nyomera]]'' | | [[IYuganda]] | | | [[File:Barnabas Nawangwe.jpg|center|128px]] |- | ''[[:d:Q62480909|Julie Mukoda Zabwe]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q62481397|Robinah Nabbanja]]'' | | [[IYuganda]] | 2011 | | [[File:Robinah Nabbanja.jpg|center|128px]] |- | ''[[:d:Q62487344|Sarah Najjuma]]'' | | [[IYuganda]] | | | [[File:Najjuma Sarah.jpg|center|128px]] |- | ''[[:d:Q63004552|Wilberforce Kisamba Mugerwa]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q63228590|Beatrice Byenkya]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q63249359|Odonga Otto]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q63314320|Gad Gasatura]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q64495988|Agnes Ameede]]'' | | [[IYuganda]] | | | [[File:Ameede Agnes.jpg|center|128px]] |- | ''[[:d:Q65984578|Catheline Ndamira Atwakiire]]'' | | [[IYuganda]] | | | [[File:Atwakiire Catheline Ndamira.jpg|center|128px]] |- | ''[[:d:Q67080123|Everlyn Chemutai]]'' | | [[IYuganda]] | | | [[File:Chemutai Everlyn.jpg|center|128px]] |- | ''[[:d:Q67080169|Robina Hope Mukisa]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q67500811|Margaret Lamwaka]]'' | | [[IYuganda]] | | | [[File:Lamwaka Margaret.jpg|center|128px]] |- | ''[[:d:Q77586230|Francis Takirwa]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q84558223|Peter Ogwang]]'' | | [[IYuganda]] | | | [[File:Peter Ogwang (cropped).jpg|center|128px]] |- | ''[[:d:Q84702556|Denis Obua]]'' | | [[IYuganda]] | 2021<br/>2016 | 2026<br/>2021 | [[File:Obua Denis Hamson.jpg|center|128px]] |- | ''[[:d:Q84755125|Jackson Kafuuzi]]'' | | [[IYuganda]] | | | [[File:Kafuuzi Jackson Karugaba.jpg|center|128px]] |- | ''[[:d:Q89370497|Rose Kabagyeni]]'' | | [[IYuganda]] | 2016 | 2021 | |- | ''[[:d:Q89876044|Michael Mawanda]]'' | | [[IYuganda]] | | | [[File:Mawanda Micheal Maranga.jpg|center|128px]] |- | ''[[:d:Q90805964|Hellen Grace Asamo]]'' | | [[IYuganda]] | | | [[File:Asamo, Hellen Grace.jpg|center|128px]] |- | ''[[:d:Q90914975|Safia Juuko Nalule]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q90916518|Aisha Sekindi]]'' | | [[IYuganda]] | | | [[File:Sekindi Aisha.jpg|center|128px]] |- | ''[[:d:Q90920801|Rosemary Nauwat]]'' | | [[IYuganda]] | 2011 | 2016 | |- | ''[[:d:Q90923330|Norah Nyendwoha Bigirwa]]'' | | [[IYuganda]] | | | [[File:Bigirwa Norah Nyendwoha.jpg|center|128px]] |- | ''[[:d:Q90924025|Milly Mugeni]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q90926112|Christine Nakwang Tubo]]'' | | [[IYuganda]] | | | [[File:Nakwang Christine Tubo.jpg|center|128px]] |- | ''[[:d:Q90927411|Spellanza Baguma Muhenda]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q90929827|Mourine Osoru]]'' | | | | | [[File:Osoru Mourine.jpg|center|128px]] |- | ''[[:d:Q90931389|Sarah Nakawunde]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q90932356|Bangirana Kawooya Anifa]]'' | | [[IYuganda]] | | | [[File:Bangirana Anifa Kawooya.jpg|center|128px]] |- | ''[[:d:Q90932931|Jovrine Kaliisa Kyomukama]]'' | | [[IYuganda]] | 2016 | 2021 | [[File:The Honourable Jovrine Kyomukama Kaliisa.jpg|center|128px]] |- | ''[[:d:Q90934802|Ann Maria Nankabirwa]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q95451495|Mwine Mpaka Rwamirama]]'' | | [[IYuganda]] | | | [[File:Mwine Mpaka Rwamirama.jpg|center|128px]] |- | ''[[:d:Q95918194|Janet Grace Akech Okori-Moe]]'' | | [[IYuganda]] | | | [[File:Okori Moe Janet Grace Akech.jpg|center|128px]] |- | ''[[:d:Q96769674|Thomas Tayebwa]]'' | | [[IYuganda]] | | | [[File:Tayebwa Thomas.jpg|center|128px]] |- | ''[[:d:Q105666074|Rosemary Nyakikongoro]]'' | | [[IYuganda]] | | | [[File:Nyakikongoro Rosemary.jpg|center|128px]] |- | ''[[:d:Q105759499|Ricky Richard Anywar]]'' | | [[IYuganda]] | | | [[File:Ricky Richard Anywar ,.jpg|center|128px]] |- | ''[[:d:Q105759689|Dorcus Acen]]'' | | [[IYuganda]] | 2016 | | [[File:Acan Dorcas.jpg|center|128px]] |- | ''[[:d:Q105825933|Cissy Dionizia Namujju]]'' | | [[IYuganda]] | | | [[File:Namujju Cissy Dionizia.jpg|center|128px]] |- | ''[[:d:Q105890715|Esther Afoyochan]]'' | | [[IYuganda]] | | | [[File:Hon Esther Afoyochan.jpg|center|128px]] |- | ''[[:d:Q105903344|Jennifer Ayoo]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q105906038|Naima Melsa Gule Avako]]'' | | [[IYuganda]] | | | [[File:Avako Melsa Naima Gule.jpg|center|128px]] |- | ''[[:d:Q105906548|Betty Esther Naluyima]]'' | | [[IYuganda]] | 2026 | | [[File:Naluyima Betty Ethel.jpg|center|128px]] |- | ''[[:d:Q105942517|Jacinta Athieno Ayo]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q105942809|Rose Obigah]]'' | | [[IYuganda]] | | | [[File:Rose Obinga.jpg|center|128px]] |- | ''[[:d:Q105944500|Florence Nambozo Wamala]]'' | | [[IYuganda]] | | | [[File:Wamala Nambozo Florence.jpg|center|128px]] |- | ''[[:d:Q105944681|Mary Begumisa]]'' | | [[IYuganda]] | | | [[File:Begumisa Mary.jpg|center|128px]] |- | ''[[:d:Q105945785|Stella Isodo Apolot]]'' | | [[IYuganda]] | | | [[File:Stella Apolot Isodo.jpg|center|128px]] |- | ''[[:d:Q105956270|Nancy Acora]]'' | | [[IYuganda]] | | | [[File:Acora Nancy.jpg|center|128px]] |- | ''[[:d:Q105956412|Brenda Nabukenya]]'' | | [[IYuganda]] | | | [[File:Nabukenya Brenda.jpg|center|128px]] |- | ''[[:d:Q105956578|Jennifer Driwaru]]'' | | [[IYuganda]] | | | [[File:Driwaru Jennifer.jpg|center|128px]] |- | ''[[:d:Q105956689|Juliet Kakande Nakabuye]]'' | | [[IYuganda]] | | | [[File:Nakabuye Juliet Kakande.jpg|center|128px]] |- | ''[[:d:Q105958189|Molly Musiime Asiimwe]]'' | | [[IYuganda]] | | | [[File:Asiimwe Musiime Molly.jpg|center|128px]] |- | ''[[:d:Q105958498|Medius Kaharata Natukunda]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q105962114|Prossy Akampurira]]'' | | [[IYuganda]] | | | [[File:Akampurira Prossy Mbabazi.jpg|center|128px]] |- | ''[[:d:Q105962464|Juliet Kyinyamatama Suubi]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q105964879|Annet Nyakecho]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q105964981|Joan Acom Alobo]]'' | | [[IYuganda]] | | | [[File:Acom Joan Alobo.jpg|center|128px]] |- | ''[[:d:Q105965184|Gorreth Namugga]]'' | | [[IYuganda]] | | | [[File:Namugga Gorreth.jpg|center|128px]] |- | ''[[:d:Q105965226|Shartsi Musherure Kuteesa]]'' | | [[IYuganda]] | | | [[File:Musherure Shartsi Nayebare Kutesa.jpg|center|128px]] |- | ''[[:d:Q105965509|Kevin Ojinga Kaala]]'' | | [[IYuganda]] | | | [[File:Kaala Kevin Ojinga.jpg|center|128px]] |- | ''[[:d:Q105965895|Santa Okot]]'' | | [[IYuganda]] | | | [[File:Okot Santa.jpg|center|128px]] |- | ''[[:d:Q105965987|Suzan Jolly Abeja]]'' | | [[IYuganda]] | | | [[File:Abeja Susan Jolly.jpg|center|128px]] |- | ''[[:d:Q105966087|Zomura Manezo]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q105966150|Judith Peace Achan]]'' | | [[IYuganda]] | | | [[File:Achan Judith Peace.jpg|center|128px]] |- | ''[[:d:Q105966258|Josyline Kamateneti]]'' | | [[IYuganda]] | | | [[File:Kamateneti Josyline.jpg|center|128px]] |- | ''[[:d:Q105966331|Kabasharira Naome]]'' | | [[IYuganda]] | | | [[File:Kabasharira, Naome.jpg|center|128px]] |- | ''[[:d:Q105966392|Anne Mary Kobugabe Tumwine]]'' | | [[IYuganda]] | | | [[File:Tumwine Anne Mary.jpg|center|128px]] |- | ''[[:d:Q105966555|Faith Nakut]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q105966644|Sarah Kayaki Netalisile]]'' | | [[IYuganda]] | | | [[File:Kayagi Sarah Netalisire.jpg|center|128px]] |- | ''[[:d:Q105966714|Margret Okunga Makoha]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q105966758|Victorious Zawedde]]'' | | [[IYuganda]] | | | [[File:Zawedde Victorious.jpg|center|128px]] |- | ''[[:d:Q105966807|Sylvia Vicky Awas]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q105966841|Remigio Achia]]'' | | [[IYuganda]] | | | [[File:Achia Remigio.jpg|center|128px]] |- | ''[[:d:Q106263496|Christine Ayo Achen]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q106338475|Margaret Rwabushaija]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q106612689|Irene Linda Mugisha]]'' | | [[IYuganda]] | | | [[File:Linda Irene.jpg|center|128px]] |- | ''[[:d:Q108336637|Moses Okot Jr]]'' | | [[IYuganda]] | 2021 | 2026 | [[File:Hon. Bitek Junior.png|center|128px]] |- | ''[[:d:Q108760136|Moses Ogwal]]'' | | [[IYuganda]] | 2021 | | [[File:Ogwal Moses Goli.jpg|center|128px]] |- | ''[[:d:Q111094566|Godfrey Pereza Ahabwe]]'' | | [[IYuganda]] | 2001 | 2011 | |- | ''[[:d:Q111181361|Huda Abason Oleru]]'' | | [[IYuganda]] | | | [[File:Oleru Huda Abason.jpg|center|128px]] |- | ''[[:d:Q111442160|Wilfred Niwagaba]]'' | | [[IYuganda]] | 2021 | 2026 | |- | ''[[:d:Q111462677|Joy Ruth Acheng]]'' | | [[IYuganda]]<br/>[[IKhanada]] | | | [[File:Acheng Joy Ruth.jpg|center|128px]] |- | ''[[:d:Q111530547|Phiona Nyamutoro]]'' | | [[IYuganda]] | | | [[File:Phiona Nyamutooro 01.jpg|center|128px]] |- | ''[[:d:Q113376149|Mathias Mpuuga]]'' | | [[IYuganda]] | 2010 | 2026 | [[File:Mathias Mpuuga.jpg|center|128px]] |- | ''[[:d:Q116547881|Beatrice Kiraso]]'' | | [[IYuganda]] | 1996 | 2006 | |- | ''[[:d:Q116602976|Anthony Okello]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q116604844|Beatrice Amongi Lagada]]'' | | [[IYuganda]] | 2011 | 2016 | |- | ''[[:d:Q116605534|Silvia Akello]]'' | | [[IYuganda]] | 2016 | 2021 | |- | ''[[:d:Q116638520|Godfrey Taire Idhwege]]'' | | [[IYuganda]] | 1996 | 2001 | |- | ''[[:d:Q116638598|Festo Higiro Semajege]]'' | | | 1989 | 1996 | |- | ''[[:d:Q125750508|Joan Namutaawe]]'' | | [[IYuganda]] | | | [[File:Namutaawe Joan.jpg|center|128px]] |- | ''[[:d:Q130742217|Paul Kwizera Bucyana]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q130742354|John Nizeyimana Kamara]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q130742642|Alex Niyonsaba]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q130742745|Eddie Wa-Gahungu Kwizera]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q130750970|Nicholas Thadeus Kamara]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q132129979|Geoffrey Mutiwa]]'' | | [[IYuganda]] | 2021 | | |- | ''[[:d:Q133502704|Betty Muzanira]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q134732645|Godfrey Kabbyanga]]'' | | [[IYuganda]] | 2016 | | |- | ''[[:d:Q136682385|Tibasiimwa Joram Ruranga]]'' | | [[IYuganda]] | 2021 | | |- | ''[[:d:Q136682386|Simon Peter Opolot]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q136682387|Ayoo Tonny]]'' | | [[IYuganda]] | 2011 | | [[File:Ayoo Tonny.jpg|center|128px]] |- | ''[[:d:Q136682452|Henry Maurice Kibalya]]'' | | [[IYuganda]] | 2021 | 2026 | [[File:Kibalya Henry Maurice.jpg|center|128px]] |- | ''[[:d:Q136682453|Wilson Kajwengye]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q136682531|Simon Peter Wokorach]]'' | | [[IYuganda]] | 2021 | 2026 | [[File:Wokorach Simon Peter.jpg|center|128px]] |- | ''[[:d:Q136682532|Lubega Bashir Ssempa]]'' | | [[IYuganda]] | 2021 | 2026 | [[File:Lubega Bashir Ssempa.jpg|center|128px]] |- | ''[[:d:Q136682546|Alex Bakunda Byarugaba]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q136682547|Achayo Juliet Lodou]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q136682548|Hassan Kirumira]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q136682549|Charles Tebandeke]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q136682572|Komol Joseph Midi]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q136682575|Twinomujuni Francis Kazini]]'' | | [[IYuganda]] | 2021 | | |- | ''[[:d:Q136682581|Peggy Joy Waako]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q136682582|Midius Natukunda]]'' | | [[IYuganda]] | | | [[File:Natukunda Midius.jpg|center|128px]] |- | ''[[:d:Q136682587|Grace Aulo Mbabazi]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q136682588|Janat Akorimoe Akech]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q136682593|Katabaazi Francis Katongole]]'' | | [[IYuganda]] | 2021 | | [[File:Katabaazi Francis Katongole.jpg|center|128px]] |- | ''[[:d:Q136682624|David Kaggwa]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q136682647|Beatrice Akello]]'' | | [[IYuganda]] | 2021 | | |- | ''[[:d:Q136682664|Lokwang Hillary]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q136768743|Muhamad Ssentayi]]'' | | [[IYuganda]] | 2021 | 2026 | [[File:Ssentayi Muhamad.jpg|center|128px]] |- | ''[[:d:Q136768744|Sanon Nadeeba Bwiire]]'' | | [[IYuganda]] | 2021 | 2026 | |- | ''[[:d:Q136768745|Sam Otukol]]'' | | [[IYuganda]] | 2021 | 2026 | [[File:Otukol Sam.jpg|center|128px]] |- | ''[[:d:Q136956452|Kagabo Twaha Mzee]]'' | | [[IYuganda]] | | | [[File:Kagabo Twaha Mzee.jpg|center|128px]] |- | ''[[:d:Q136956453|Ssejjoba Isaac]]'' | | [[IYuganda]] | | | [[File:Ssejjoba Isaac.jpg|center|128px]] |- | ''[[:d:Q137821107|Josephat Tumwesigye]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q137991462|Christine Lanyero Awany]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q137993772|Pamela Annet Kirungi]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q137994155|Atukunda Rebecca]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q137994254|Enid Origumisiriza]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q137995601|Ibaseret Josephine]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q137996715|Ayoo Phoebe Obol]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q137999672|Loyda Kyarikunda Twinomujuni]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q138001320|Esther Lucy Acom]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q138001597|Harriet Nalweende]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q138001782|Harriet Anyimo]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q138024590|Justine Nameere]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q138127838|Jeniva Arinaitwe]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q138161330|Sarah Nanyonga]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q138161331|Prossy Nanyonga]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q138161332|Resty Nanyonga]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q138161334|Brenda Aciro]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q138161336|Betty Aciro]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q138161337|Janet Chebet]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q138161339|Prossy Namusisi]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q138161340|Sarah Nabirye]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q138161342|Ruth Namutaawe]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q138161343|Sarah Akol]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q138161345|Brenda Achieng]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q138161346|Prossy Katusiime]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q138161349|Hellen Kyomugisha]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q138161350|Sarah Tumwine]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q138161351|Q138161351]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q138161352|Joan Kansiime]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q138161354|Prossy Kabugho]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q138161355|Janet Kyaligonza]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q138161356|Ruth Kyomugisha]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q138161357|Grace Nyakato]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q138539067|George Didi Bhoka]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q138751304|Acan Joyce Okeny]]'' | | [[IYuganda]] | | | [[File:Acan Joyce Okeny.jpg|center|128px]] |- | ''[[:d:Q138819084|Lilian Nakate]]'' | | [[IYuganda]] | 2016 | 2021 | |- | ''[[:d:Q139554877|Kanaabi Jimmy]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q139554958|Modoi Isaac]]'' | | [[IYuganda]] | | | [[File:Modoi Isaac.jpg|center|128px]] |- | ''[[:d:Q139719426|Wasswa Lule]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q139752461|Okupa Elijah]]'' | | [[IYuganda]] | | | [[File:Okupa Elijah,.jpg|center|128px]] |- | ''[[:d:Q139752949|Twesigye Nathan Itungo]]'' | | [[IYuganda]] | | | [[File:Twesigye Nathan Itungo.jpg|center|128px]] |- | ''[[:d:Q139753935|Businge Joab]]'' | | [[IYuganda]] | | | [[File:Businge Joab.jpg|center|128px]] |- | ''[[:d:Q139754316|Biyika Lawrence Songa]]'' | | [[IYuganda]] | | | [[File:Biyika Lawrence Songa.jpg|center|128px]] |- | ''[[:d:Q139763956|Byakatonda Abdulhu]]'' | | [[IYuganda]] | | | [[File:Byakatonda Abdulhu.jpg|center|128px]] |- | ''[[:d:Q139764000|Byamukama Nulu]]'' | | [[IYuganda]] | | | [[File:Byamukama Nulu Joseph.jpg|center|128px]] |- | ''[[:d:Q139780066|Chelangat Alinga Solomon]]'' | | [[IYuganda]] | | | [[File:Chelangat Alinga Solomon.jpg|center|128px]] |- | ''[[:d:Q139780080|Chemaswet Abdi Fadhil Kisos]]'' | | [[IYuganda]] | | | [[File:Chemaswet Abdi Fadhil Kisos.jpg|center|128px]] |- | ''[[:d:Q139780114|Afidra Ronald Olema]]'' | | [[IYuganda]] | | | [[File:Afidra Olema Ronald.jpg|center|128px]] |- | ''[[:d:Q139780160|Akamba Paul]]'' | | [[IYuganda]] | | | [[File:Akamba Paul Busiki.jpg|center|128px]] |- | ''[[:d:Q139780202|Aleper Moses]]'' | | [[IYuganda]] | | | [[File:Aleper Moses.jpg|center|128px]] |- | ''[[:d:Q139780242|Nsabimana Paul Asaba]]'' | | [[IYuganda]] | | | [[File:Paul Asaba Nsabimana.jpg|center|128px]] |- | ''[[:d:Q139780260|Aseera Stephen Itaza]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q139780288|Asiimwe Enos Kinywamachunda]]'' | | [[IYuganda]] | | | |- | ''[[:d:Q139782548|Atima Jackson Lee Buti]]'' | | [[IYuganda]] | | | [[File:Atima Jackson Lee Buti, Arua Central Division, Arua City (NRM).jpg|center|128px]] |- | ''[[:d:Q139782619|Baka Stephen Mugabi]]'' | | [[IYuganda]] | | | [[File:Baka Stephen Mugabi.jpg|center|128px]] |- | ''[[:d:Q139782798|Ekanya Geofrey]]'' | | [[IYuganda]] | | | [[File:Ekanya Geofrey.jpg|center|128px]] |- | ''[[:d:Q139782828|Ekudo Tom Julius]]'' | | [[IYuganda]] | | | [[File:Ekudo Tom Julius.jpg|center|128px]] |} {{Wikidata list end}} fbaf84rz1q84isk3zsjg651e6pv4qnt User:GerardM/Fellows of the Royal Society of South Africa 2 11116 126069 125972 2026-07-15T01:28:53Z ListeriaBot 10758 Wikidata list updated [V2] 126069 wikitext text/x-wiki [https://tools.wmflabs.org/reasonator/?q=Q60986464 Fellows of the Royal Society of South Africa] {{Wikidata list |sparql= SELECT DISTINCT ?item (COUNT(DISTINCT ?publications) AS ?count) (REPLACE(STR(?item), ".*Q", "Q") AS ?qid) (CONCAT( "[[toolforge:scholia/author/", ?qid , "|", ENCODE_FOR_URI(?count), "]] / ", "[[toolforge:scholia/author/", ?qid , "/missing{{!}}📖]]") AS ?scholia) WHERE { ?item wdt:P166 wd:Q60986464 . OPTIONAL { ?publications wdt:P50 ?item } } GROUP BY ?item|section= |sort=P166/Q60986464/P585 |sort_order=desc |columns=label:Article,P106,P496,P1960,P214,P166/Q60986464/P585:Date conferred,P18:Image,?scholia:Publications (known/missing) |thumb=128 |min_section=2 }} {| class='wikitable sortable' ! Article ! occupation ! ORCID ! Google Scholar author ID ! VIAF ! Date conferred ! Image ! Publications (known/missing) |- | ''[[:d:Q81710423|Joseph P. Michael]]'' | | | | | 2001 | | [[toolforge:scholia/author/Q81710423|0]] / [[toolforge:scholia/author/Q81710423/missing|📖]] |- | ''[[:d:Q80701780|Donald A. Cowan]]'' | | | | | 2005 | | [[toolforge:scholia/author/Q80701780|0]] / [[toolforge:scholia/author/Q80701780/missing|📖]] |- | ''[[:d:Q21448010|Tebello Nyokong]]'' | ''[[:d:Q593644|chemist]]''<br/>[[USolwazi]]<br/>''[[:d:Q1162163|director]]'' | [https://orcid.org/0000-0002-4590-9926 0000-0002-4590-9926] | [https://scholar.google.com/citations?user=QUpAXHcAAAAJ QUpAXHcAAAAJ] | [https://viaf.org/en/viaf/6031160486121605180005 6031160486121605180005] | 2001 | | [[toolforge:scholia/author/Q21448010|0]] / [[toolforge:scholia/author/Q21448010/missing|📖]] |- | ''[[:d:Q81711757|Graham Mitchell]]'' | | | | | 2001 | | [[toolforge:scholia/author/Q81711757|0]] / [[toolforge:scholia/author/Q81711757/missing|📖]] |- | ''[[:d:Q42931372|Bert Klumperman]]'' | ''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0003-1561-274X 0000-0003-1561-274X] | | [https://viaf.org/en/viaf/313554514 313554514] | 2008 | | [[toolforge:scholia/author/Q42931372|0]] / [[toolforge:scholia/author/Q42931372/missing|📖]] |- | ''[[:d:Q77820561|Fazal M. Mahomed]]'' | ''[[:d:Q72271334|professor of mathematics]]'' | [https://orcid.org/0000-0002-6995-5820 0000-0002-6995-5820] | [https://scholar.google.com/citations?user=phJrkvwAAAAJ phJrkvwAAAAJ] | | 2010 | | [[toolforge:scholia/author/Q77820561|0]] / [[toolforge:scholia/author/Q77820561/missing|📖]] |- | ''[[:d:Q1267093|Elisabeth Vrba]]'' | ''[[:d:Q1662561|paleontologist]]''<br/>''[[:d:Q350979|zoologist]]''<br/>''[[:d:Q1622272|university teacher]]'' | | | [https://viaf.org/en/viaf/85250115 85250115]<br/>[https://viaf.org/en/viaf/93322823 93322823] | 1985 | [[File:Elisabeth Vrba 2009-02.JPG|center|128px]] | [[toolforge:scholia/author/Q1267093|2]] / [[toolforge:scholia/author/Q1267093/missing|📖]] |- | ''[[:d:Q83012615|Nikolaas J van der Merwe]]'' | | | | | 1984 | | [[toolforge:scholia/author/Q83012615|0]] / [[toolforge:scholia/author/Q83012615/missing|📖]] |- | ''[[:d:Q20731808|Grae Worster]]'' | [[umfundindalo]] | | | | 2017 | | [[toolforge:scholia/author/Q20731808|0]] / [[toolforge:scholia/author/Q20731808/missing|📖]] |- | ''[[:d:Q83158893|David Woods]]'' | | | | | 1987 | | [[toolforge:scholia/author/Q83158893|0]] / [[toolforge:scholia/author/Q83158893/missing|📖]] |- | ''[[:d:Q28086200|Geoff Garrett]]'' | | | | [https://viaf.org/en/viaf/52270408 52270408] | 2000 | [[File:Geoff Garrett CS6 270116-lg.jpg|center|128px]] | [[toolforge:scholia/author/Q28086200|0]] / [[toolforge:scholia/author/Q28086200/missing|📖]] |- | ''[[:d:Q83159139|Walter Zucchini]]'' | ''[[:d:Q2732142|statistician]]''<br/>''[[:d:Q864503|biologist]]''<br/>''[[:d:Q1622272|university teacher]]'' | | | [https://viaf.org/en/viaf/2722490 2722490] | 2005 | | [[toolforge:scholia/author/Q83159139|0]] / [[toolforge:scholia/author/Q83159139/missing|📖]] |- | ''[[:d:Q5019897|Calie Pistorius]]'' | ''[[:d:Q3400985|academic]]'' | | | | 2002 | [[File:Calie Pistorius.jpg|center|128px]] | [[toolforge:scholia/author/Q5019897|0]] / [[toolforge:scholia/author/Q5019897/missing|📖]] |- | ''[[:d:Q61679353|Dudley Shallcross]]'' | ''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0001-7614-9221 0000-0001-7614-9221] | [https://scholar.google.com/citations?user=igQanooAAAAJ igQanooAAAAJ] | | 2013 | | [[toolforge:scholia/author/Q61679353|0]] / [[toolforge:scholia/author/Q61679353/missing|📖]] |- | ''[[:d:Q58220468|Francesco Petruccione]]'' | [[umfundindalo]]<br/>[[Usonzululwazi|imfundondalo]]<br/>''[[:d:Q1622272|university teacher]]'' | [https://orcid.org/0000-0002-8604-0913 0000-0002-8604-0913] | [https://scholar.google.com/citations?user=chM4fT4AAAAJ chM4fT4AAAAJ] | [https://viaf.org/en/viaf/51907883 51907883] | 2013 | [[File:Francesco Petruccione blazer.jpg|center|128px]] | [[toolforge:scholia/author/Q58220468|1]] / [[toolforge:scholia/author/Q58220468/missing|📖]] |- | ''[[:d:Q61104159|Duncan Mitchell]]'' | ''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0001-8989-4773 0000-0001-8989-4773] | | | 1984 | | [[toolforge:scholia/author/Q61104159|0]] / [[toolforge:scholia/author/Q61104159/missing|📖]] |- | ''[[:d:Q81144632|Arnold Knopfmacher]]'' | ''[[:d:Q1650915|umcwaningi]]'' | | | | 2010 | | [[toolforge:scholia/author/Q81144632|0]] / [[toolforge:scholia/author/Q81144632/missing|📖]] |- | ''[[:d:Q80568773|Ronald J. Clarke]]'' | | | | | 2002 | | [[toolforge:scholia/author/Q80568773|0]] / [[toolforge:scholia/author/Q80568773/missing|📖]] |- | ''[[:d:Q80569011|John D. Clemens]]'' | | | | | 2013 | | [[toolforge:scholia/author/Q80569011|0]] / [[toolforge:scholia/author/Q80569011/missing|📖]] |- | ''[[:d:Q80569202|T. Eugene Cloete]]'' | | | [https://scholar.google.com/citations?user=fOUypFkAAAAJ fOUypFkAAAAJ] | | 2012 | | [[toolforge:scholia/author/Q80569202|0]] / [[toolforge:scholia/author/Q80569202/missing|📖]] |- | ''[[:d:Q81146665|Rosina C. Krecek]]'' | | | | | 2003 | | [[toolforge:scholia/author/Q81146665|0]] / [[toolforge:scholia/author/Q81146665/missing|📖]] |- | ''[[:d:Q81147058|Peter G.L. Leach]]'' | | | | | 1998 | | [[toolforge:scholia/author/Q81147058|0]] / [[toolforge:scholia/author/Q81147058/missing|📖]] |- | ''[[:d:Q81147828|Richard H. Lemmer]]'' | [[umfundindalo]] | | | | 1989 | | [[toolforge:scholia/author/Q81147828|0]] / [[toolforge:scholia/author/Q81147828/missing|📖]] |- | ''[[:d:Q15839341|Jill Farrant]]'' | ''[[:d:Q15839136|cell biologist]]''<br/>''[[:d:Q2374149|botanist]]''<br/>''[[:d:Q1650915|umcwaningi]]''<br/>''[[:d:Q1622272|university teacher]]'' | [https://orcid.org/0000-0002-1450-7967 0000-0002-1450-7967] | [https://scholar.google.com/citations?user=OIeulVQAAAAJ OIeulVQAAAAJ] | [https://viaf.org/en/viaf/275262507 275262507] | 2005 | | [[toolforge:scholia/author/Q15839341|1]] / [[toolforge:scholia/author/Q15839341/missing|📖]] |- | ''[[:d:Q56065756|Shabir A. Madhi]]'' | ''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0002-7629-0636 0000-0002-7629-0636] | | | 2016 | [[File:Shabir Madhi for Fundación Civio.jpg|center|128px]] | [[toolforge:scholia/author/Q56065756|0]] / [[toolforge:scholia/author/Q56065756/missing|📖]] |- | ''[[:d:Q6759640|Margaret Levyns]]'' | ''[[:d:Q2374149|botanist]]''<br/>''[[:d:Q1907198|taxonomist]]''<br/>''[[:d:Q47825396|phytogeographer]]''<br/>''[[:d:Q2083925|botanical collector]]''<br/>''[[:d:Q98544732|scientific collector]]'' | | | [https://viaf.org/en/viaf/76028114 76028114] | | [[File:Margaret Rutherford Bryan Levyns.jpg|center|128px]] | [[toolforge:scholia/author/Q6759640|0]] / [[toolforge:scholia/author/Q6759640/missing|📖]] |- | ''[[:d:Q79853945|Theodor John Stewart]]'' | ''[[:d:Q2732142|statistician]]''<br/>''[[:d:Q170790|mathematician]]'' | [https://orcid.org/0000-0002-2107-5955 0000-0002-2107-5955] | | [https://viaf.org/en/viaf/15146153191805252771 15146153191805252771] | 2005 | | [[toolforge:scholia/author/Q79853945|0]] / [[toolforge:scholia/author/Q79853945/missing|📖]] |- | ''[[:d:Q82016605|Harald Pasch]]'' | ''[[:d:Q1650915|umcwaningi]]''<br/>''[[:d:Q593644|chemist]]'' | [https://orcid.org/0000-0003-1132-3393 0000-0003-1132-3393] | | [https://viaf.org/en/viaf/116848382 116848382] | 2013 | | [[toolforge:scholia/author/Q82016605|0]] / [[toolforge:scholia/author/Q82016605/missing|📖]] |- | ''[[:d:Q23772750|Herbert Basil Sutton Cooke]]'' | ''[[:d:Q1662561|paleontologist]]''<br/>''[[:d:Q520549|geologist]]'' | | | [https://viaf.org/en/viaf/79388488 79388488] | 1946 | | [[toolforge:scholia/author/Q23772750|0]] / [[toolforge:scholia/author/Q23772750/missing|📖]] |- | ''[[:d:Q2150124|Richard M. Cowling]]'' | ''[[:d:Q2374149|botanist]]''<br/>''[[:d:Q1622272|university teacher]]'' | [https://orcid.org/0000-0003-3514-2685 0000-0003-3514-2685] | [https://scholar.google.com/citations?user=eH34bIQAAAAJ eH34bIQAAAAJ] | [https://viaf.org/en/viaf/34611234 34611234] | 2015 | | [[toolforge:scholia/author/Q2150124|0]] / [[toolforge:scholia/author/Q2150124/missing|📖]] |- | ''[[:d:Q57078993|Claude Carignan]]'' | ''[[:d:Q1650915|umcwaningi]]''<br/>[[Ugqayinyanga]]<br/>''[[:d:Q752129|astrophysicist]]'' | [https://orcid.org/0000-0001-9089-6151 0000-0001-9089-6151] | | [https://viaf.org/en/viaf/232336283 232336283] | 2014 | | [[toolforge:scholia/author/Q57078993|0]] / [[toolforge:scholia/author/Q57078993/missing|📖]] |- | ''[[:d:Q81732311|Luigi R. Nassimbeni]]'' | | | | | 1993 | | [[toolforge:scholia/author/Q81732311|0]] / [[toolforge:scholia/author/Q81732311/missing|📖]] |- | ''[[:d:Q80435053|Janine B. Adams]]'' | | | | | 2011 | | [[toolforge:scholia/author/Q80435053|0]] / [[toolforge:scholia/author/Q80435053/missing|📖]] |- | ''[[:d:Q80435477|Christopher C. Appleton]]'' | ''[[:d:Q12773412|parasitologist]]'' | | | | 2015 | | [[toolforge:scholia/author/Q80435477|0]] / [[toolforge:scholia/author/Q80435477/missing|📖]] |- | ''[[:d:Q80435992|D. Margaret Avery]]'' | ''[[:d:Q16831394|mammalogist]]''<br/>''[[:d:Q1662561|paleontologist]]'' | [https://orcid.org/0000-0003-0784-7047 0000-0003-0784-7047] | | [https://viaf.org/en/viaf/311367956 311367956] | 2001 | | [[toolforge:scholia/author/Q80435992|0]] / [[toolforge:scholia/author/Q80435992/missing|📖]] |- | ''[[:d:Q80436020|Len J. Barbour]]'' | | | | | 2008 | | [[toolforge:scholia/author/Q80436020|0]] / [[toolforge:scholia/author/Q80436020/missing|📖]] |- | ''[[:d:Q81733608|Vernon M. Neppe]]'' | | | | | 2002 | | [[toolforge:scholia/author/Q81733608|0]] / [[toolforge:scholia/author/Q81733608/missing|📖]] |- | ''[[:d:Q23777458|Patricia Berjak]]'' | ''[[:d:Q2374149|botanist]]'' | | | [https://viaf.org/en/viaf/43105677 43105677] | 1996 | | [[toolforge:scholia/author/Q23777458|0]] / [[toolforge:scholia/author/Q23777458/missing|📖]] |- | ''[[:d:Q81013097|Peter W. Froneman]]'' | | | | | 2011 | | [[toolforge:scholia/author/Q81013097|0]] / [[toolforge:scholia/author/Q81013097/missing|📖]] |- | ''[[:d:Q4891802|Beric Skews]]'' | ''[[:d:Q3400985|academic]]'' | | | | 1997 | | [[toolforge:scholia/author/Q4891802|0]] / [[toolforge:scholia/author/Q4891802/missing|📖]] |- | ''[[:d:Q32860776|Felix Dapare Dakora]]'' | ''[[:d:Q2374149|botanist]]'' | [https://orcid.org/0000-0002-9070-6896 0000-0002-9070-6896] | [https://scholar.google.com/citations?user=DW22bZEAAAAJ DW22bZEAAAAJ] | [https://viaf.org/en/viaf/9379653 9379653] | 2007 | | [[toolforge:scholia/author/Q32860776|0]] / [[toolforge:scholia/author/Q32860776/missing|📖]] |- | ''[[:d:Q79427702|Keith P. Klugman]]'' | [[Inyanga (umelaphi)|inyanga]]<br/>''[[:d:Q12765408|epidemiologist]]'' | [https://orcid.org/0000-0001-6637-728X 0000-0001-6637-728X] | [https://scholar.google.com/citations?user=T-mgWmkAAAAJ T-mgWmkAAAAJ] | [https://viaf.org/en/viaf/5261457 5261457] | 1996 | | [[toolforge:scholia/author/Q79427702|0]] / [[toolforge:scholia/author/Q79427702/missing|📖]] |- | ''[[:d:Q23778547|Peter B. Best]]'' | ''[[:d:Q350979|zoologist]]'' | | | [https://viaf.org/en/viaf/16138947 16138947] | 2004 | | [[toolforge:scholia/author/Q23778547|1]] / [[toolforge:scholia/author/Q23778547/missing|📖]] |- | ''[[:d:Q712043|Arthur William Rogers]]'' | ''[[:d:Q520549|geologist]]''<br/>''[[:d:Q18805|naturalist]]'' | | | [https://viaf.org/en/viaf/17978036 17978036] | | | [[toolforge:scholia/author/Q712043|1]] / [[toolforge:scholia/author/Q712043/missing|📖]] |- | ''[[:d:Q80438063|Guy C. Bate]]'' | | | | | 1997 | | [[toolforge:scholia/author/Q80438063|0]] / [[toolforge:scholia/author/Q80438063/missing|📖]] |- | ''[[:d:Q81014873|Andrew K. Galwey]]'' | | | | | 2002 | | [[toolforge:scholia/author/Q81014873|0]] / [[toolforge:scholia/author/Q81014873/missing|📖]] |- | ''[[:d:Q81015192|Christoph F. Garbers]]'' | | | | | 1990 | | [[toolforge:scholia/author/Q81015192|0]] / [[toolforge:scholia/author/Q81015192/missing|📖]] |- | ''[[:d:Q75969884|Ahmed C. Bawa]]'' | [[umfundindalo]] | | | [https://viaf.org/en/viaf/249897491 249897491] | 1997 | | [[toolforge:scholia/author/Q75969884|0]] / [[toolforge:scholia/author/Q75969884/missing|📖]] |- | ''[[:d:Q52758677|Susan W. Nicolson]]'' | ''[[:d:Q350979|zoologist]]''<br/>''[[:d:Q864503|biologist]]'' | [https://orcid.org/0000-0001-6024-9383 0000-0001-6024-9383] | | [https://viaf.org/en/viaf/19932833 19932833] | 2010 | | [[toolforge:scholia/author/Q52758677|0]] / [[toolforge:scholia/author/Q52758677/missing|📖]] |- | ''[[:d:Q42666979|Steven L. Chown]]'' | ''[[:d:Q15839134|ecologist]]'' | [https://orcid.org/0000-0001-6069-5105 0000-0001-6069-5105] | | [https://viaf.org/en/viaf/64258857 64258857] | 2005 | | [[toolforge:scholia/author/Q42666979|1]] / [[toolforge:scholia/author/Q42666979/missing|📖]] |- | ''[[:d:Q29981691|Nigel C. Bennett]]'' | ''[[:d:Q350979|zoologist]]''<br/>''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0001-9748-2947 0000-0001-9748-2947] | | | 2002 | | [[toolforge:scholia/author/Q29981691|0]] / [[toolforge:scholia/author/Q29981691/missing|📖]] |- | ''[[:d:Q22340726|Jennifer Thomson]]'' | ''[[:d:Q3779582|microbiologist]]''<br/>''[[:d:Q1622272|university teacher]]'' | [https://orcid.org/0000-0002-2243-0357 0000-0002-2243-0357] | | [https://viaf.org/en/viaf/54380859 54380859] | 2000 | | [[toolforge:scholia/author/Q22340726|0]] / [[toolforge:scholia/author/Q22340726/missing|📖]] |- | ''[[:d:Q60834357|Brian Warner]]'' | [[Ugqayinyanga]]<br/>[[umbhali]]<br/>''[[:d:Q16063546|historian of science]]'' | | | [https://viaf.org/en/viaf/109805982 109805982] | 1976 | | [[toolforge:scholia/author/Q60834357|0]] / [[toolforge:scholia/author/Q60834357/missing|📖]] |- | ''[[:d:Q18161438|Salim Abdool Karim]]'' | ''[[:d:Q12765408|epidemiologist]]''<br/>''[[:d:Q1622272|university teacher]]'' | [https://orcid.org/0000-0002-4986-2133 0000-0002-4986-2133] | [https://scholar.google.com/citations?user=Xh1qaJ4AAAAJ Xh1qaJ4AAAAJ] | [https://viaf.org/en/viaf/273180719 273180719] | 2003 | [[File:Slim portrait 2020.jpg|center|128px]] | [[toolforge:scholia/author/Q18161438|2]] / [[toolforge:scholia/author/Q18161438/missing|📖]] |- | ''[[:d:Q20756981|Peter Vale]]'' | ''[[:d:Q1238570|political scientist]]'' | [https://orcid.org/0000-0003-0805-9325 0000-0003-0805-9325] | | [https://viaf.org/en/viaf/39521399 39521399] | 2005 | | [[toolforge:scholia/author/Q20756981|0]] / [[toolforge:scholia/author/Q20756981/missing|📖]] |- | ''[[:d:Q80444317|Kanti D. Bhoola]]'' | | | | | 1996 | | [[toolforge:scholia/author/Q80444317|0]] / [[toolforge:scholia/author/Q80444317/missing|📖]] |- | ''[[:d:Q71650707|Hendrik B. Geyer]]'' | ''[[:d:Q1650915|umcwaningi]]'' | | | | 2004 | | [[toolforge:scholia/author/Q71650707|0]] / [[toolforge:scholia/author/Q71650707/missing|📖]] |- | ''[[:d:Q82175664|Michael Perrin]]'' | | | | | 2010 | | [[toolforge:scholia/author/Q82175664|0]] / [[toolforge:scholia/author/Q82175664/missing|📖]] |- | ''[[:d:Q6775598|Martin Hall]]'' | ''[[:d:Q4773904|anthropologist]]''<br/>''[[:d:Q3621491|archaeologist]]'' | | | [https://viaf.org/en/viaf/117559096 117559096] | 2001 | [[File:Professor Martin Hall.jpg|center|128px]] | [[toolforge:scholia/author/Q6775598|1]] / [[toolforge:scholia/author/Q6775598/missing|📖]] |- | ''[[:d:Q80447055|R.D. Bigalke]]'' | ''[[:d:Q202883|veterinarian]]'' | | | [https://viaf.org/en/viaf/287462074 287462074] | 2004 | | [[toolforge:scholia/author/Q80447055|0]] / [[toolforge:scholia/author/Q80447055/missing|📖]] |- | ''[[:d:Q1586575|Harry Irving]]'' | ''[[:d:Q593644|chemist]]'' | | | [https://viaf.org/en/viaf/422145857117322922525 422145857117322922525]<br/>[https://viaf.org/en/viaf/91856523 91856523] | | | [[toolforge:scholia/author/Q1586575|0]] / [[toolforge:scholia/author/Q1586575/missing|📖]] |- | ''[[:d:Q61993822|David Glasser]]'' | ''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0001-9510-722X 0000-0001-9510-722X] | [https://scholar.google.com/citations?user=G8kEvt8AAAAJ G8kEvt8AAAAJ] | [https://viaf.org/en/viaf/121088199 121088199] | 1997 | | [[toolforge:scholia/author/Q61993822|0]] / [[toolforge:scholia/author/Q61993822/missing|📖]] |- | ''[[:d:Q61993821|Diane Hildebrandt]]'' | ''[[:d:Q7888586|chemical engineer]]'' | [https://orcid.org/0000-0001-7873-8855 0000-0001-7873-8855] | [https://scholar.google.com/citations?user=2SQ-120AAAAJ 2SQ-120AAAAJ] | [https://viaf.org/en/viaf/34119349 34119349] | 2001 | | [[toolforge:scholia/author/Q61993821|0]] / [[toolforge:scholia/author/Q61993821/missing|📖]] |- | ''[[:d:Q80447621|Judy M. Bishop]]'' | ''[[:d:Q82594|computer scientist]]'' | [https://orcid.org/0000-0001-9986-7269 0000-0001-9986-7269] | [https://scholar.google.com/citations?user=fTryeZAAAAAJ fTryeZAAAAAJ] | [https://viaf.org/en/viaf/111091523 111091523] | 2006 | | [[toolforge:scholia/author/Q80447621|0]] / [[toolforge:scholia/author/Q80447621/missing|📖]] |- | ''[[:d:Q71654754|Andries Johannes van der Walt]]'' | ''[[:d:Q2325224|constitutional lawyer]]''<br/>''[[:d:Q1650915|umcwaningi]]''<br/>''[[:d:Q185351|jurist]]'' | | | [https://viaf.org/en/viaf/58628637 58628637] | 2008 | | [[toolforge:scholia/author/Q71654754|0]] / [[toolforge:scholia/author/Q71654754/missing|📖]] |- | ''[[:d:Q2165640|Ronald J. Clarke]]'' | ''[[:d:Q3621491|archaeologist]]''<br/>''[[:d:Q4773904|anthropologist]]''<br/>''[[:d:Q17488316|prehistorian]]''<br/>''[[:d:Q2145981|restorer]]''<br/>''[[:d:Q21272406|paleoanthropologist]]'' | | | [https://viaf.org/en/viaf/147008726 147008726] | | [[File:Ronald Clarke.jpg|center|128px]] | [[toolforge:scholia/author/Q2165640|0]] / [[toolforge:scholia/author/Q2165640/missing|📖]] |- | ''[[:d:Q38640649|Andrew E. McKechnie]]'' | ''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0002-1524-1021 0000-0002-1524-1021] | | | 2017 | | [[toolforge:scholia/author/Q38640649|0]] / [[toolforge:scholia/author/Q38640649/missing|📖]] |- | ''[[:d:Q15429379|Paul Cilliers]]'' | ''[[:d:Q81096|engineer]]''<br/>''[[:d:Q4964182|philosopher]]''<br/>''[[:d:Q1622272|university teacher]]'' | | | [https://viaf.org/en/viaf/328371 328371] | | | [[toolforge:scholia/author/Q15429379|0]] / [[toolforge:scholia/author/Q15429379/missing|📖]] |- | ''[[:d:Q21340974|Bruce S. Rubidge]]'' | ''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0003-2477-1873 0000-0003-2477-1873] | [https://scholar.google.com/citations?user=Z7edricAAAAJ Z7edricAAAAJ] | [https://viaf.org/en/viaf/147053915 147053915]<br/>[https://viaf.org/en/viaf/475150323917709972010 475150323917709972010] | 2003 | | [[toolforge:scholia/author/Q21340974|0]] / [[toolforge:scholia/author/Q21340974/missing|📖]] |- | ''[[:d:Q82901586|Stuart J. Saunders]]'' | ''[[:d:Q1622272|university teacher]]'' | | | [https://viaf.org/en/viaf/38148628 38148628] | 1992 | [[File:Stuart Saunders, Vice-chancellor of UCT.jpg|center|128px]] | [[toolforge:scholia/author/Q82901586|0]] / [[toolforge:scholia/author/Q82901586/missing|📖]] |- | ''[[:d:Q21341244|Ansie Dippenaar-Schoeman]]'' | ''[[:d:Q17344952|arachnologist]]'' | [https://orcid.org/0000-0003-1532-1379 0000-0003-1532-1379] | | [https://viaf.org/en/viaf/68612009 68612009] | 2006 | | [[toolforge:scholia/author/Q21341244|1]] / [[toolforge:scholia/author/Q21341244/missing|📖]] |- | ''[[:d:Q81027633|Andre Goosen]]'' | | | | | 1993 | | [[toolforge:scholia/author/Q81027633|0]] / [[toolforge:scholia/author/Q81027633/missing|📖]] |- | ''[[:d:Q21341400|Maureen Coetzee]]'' | ''[[:d:Q3055126|entomologist]]''<br/>''[[:d:Q107292086|medical entomologist]]'' | [https://orcid.org/0000-0003-2019-866X 0000-0003-2019-866X] | [https://scholar.google.com/citations?user=jbWH4QUAAAAJ jbWH4QUAAAAJ] | | 2011 | | [[toolforge:scholia/author/Q21341400|0]] / [[toolforge:scholia/author/Q21341400/missing|📖]] |- | ''[[:d:Q26820569|John Francis Thackeray]]'' | ''[[:d:Q1622272|university teacher]]''<br/>''[[:d:Q1662561|paleontologist]]'' | [https://orcid.org/0000-0001-6884-382X 0000-0001-6884-382X] | [https://scholar.google.com/citations?user=SMN_CbwAAAAJ SMN_CbwAAAAJ] | [https://viaf.org/en/viaf/56318959 56318959] | 2009 | [[File:Koenigswald-Lecture 2016 John Francis Thackeray 01.jpg|center|128px]] | [[toolforge:scholia/author/Q26820569|2]] / [[toolforge:scholia/author/Q26820569/missing|📖]] |- | ''[[:d:Q81028595|John J. Gurney]]'' | | | | | 1989 | | [[toolforge:scholia/author/Q81028595|0]] / [[toolforge:scholia/author/Q81028595/missing|📖]] |- | ''[[:d:Q5340086|Edna P. Plumstead]]'' | ''[[:d:Q2374149|botanist]]''<br/>''[[:d:Q1662561|paleontologist]]''<br/>''[[:d:Q30059961|paleobotanist]]'' | | | [https://viaf.org/en/viaf/23411195 23411195] | | | [[toolforge:scholia/author/Q5340086|0]] / [[toolforge:scholia/author/Q5340086/missing|📖]] |- | ''[[:d:Q81029575|Friedrich W. Hahne]]'' | | | | | 1991 | | [[toolforge:scholia/author/Q81029575|0]] / [[toolforge:scholia/author/Q81029575/missing|📖]] |- | ''[[:d:Q82903855|Louis Scott]]'' | | | | | 2009 | | [[toolforge:scholia/author/Q82903855|0]] / [[toolforge:scholia/author/Q82903855/missing|📖]] |- | ''[[:d:Q49168166|Terence J. Robinson]]'' | ''[[:d:Q350979|zoologist]]'' | [https://orcid.org/0000-0002-4298-4891 0000-0002-4298-4891] | [https://scholar.google.com/citations?user=LLaJvSEAAAAJ LLaJvSEAAAAJ] | | 2003 | | [[toolforge:scholia/author/Q49168166|0]] / [[toolforge:scholia/author/Q49168166/missing|📖]] |- | ''[[:d:Q78434764|David Mason]]'' | ''[[:d:Q1650915|umcwaningi]]'' | | | | 1998 | | [[toolforge:scholia/author/Q78434764|0]] / [[toolforge:scholia/author/Q78434764/missing|📖]] |- | ''[[:d:Q82904164|Michael S. Scurrell]]'' | | | | | 2006 | | [[toolforge:scholia/author/Q82904164|0]] / [[toolforge:scholia/author/Q82904164/missing|📖]] |- | ''[[:d:Q81030104|Raymond J. Haines]]'' | | | | | 1990 | | [[toolforge:scholia/author/Q81030104|0]] / [[toolforge:scholia/author/Q81030104/missing|📖]] |- | ''[[:d:Q60991028|George Ekama]]'' | ''[[:d:Q1622272|university teacher]]''<br/>''[[:d:Q81096|engineer]]'' | | [https://scholar.google.com/citations?user=PWje2ogAAAAJ PWje2ogAAAAJ] | [https://viaf.org/en/viaf/311249909 311249909] | 1993 | | [[toolforge:scholia/author/Q60991028|0]] / [[toolforge:scholia/author/Q60991028/missing|📖]] |- | ''[[:d:Q81031522|Eric H. Harley]]'' | | | | | 2005 | | [[toolforge:scholia/author/Q81031522|0]] / [[toolforge:scholia/author/Q81031522/missing|📖]] |- | ''[[:d:Q7793599|Thomas Robertson Sim]]'' | ''[[:d:Q2374149|botanist]]''<br/>''[[:d:Q16334507|bryologist]]''<br/>''[[:d:Q11900058|explorer]]''<br/>''[[:d:Q2083925|botanical collector]]'' | | | [https://viaf.org/en/viaf/20209164 20209164] | | [[File:Tr sim00.JPG|center|128px]] | [[toolforge:scholia/author/Q7793599|3]] / [[toolforge:scholia/author/Q7793599/missing|📖]] |- | ''[[:d:Q81176926|Steven J. Lennon]]'' | | | | | 2002 | | [[toolforge:scholia/author/Q81176926|0]] / [[toolforge:scholia/author/Q81176926/missing|📖]] |- | ''[[:d:Q76419491|Jan-Hendrik S. Hofmeyr]]'' | ''[[:d:Q2919046|biochemist]]'' | | | | 2003 | | [[toolforge:scholia/author/Q76419491|0]] / [[toolforge:scholia/author/Q76419491/missing|📖]] |- | ''[[:d:Q76419567|Igor Barashenkov]]'' | | | | | 2008 | | [[toolforge:scholia/author/Q76419567|0]] / [[toolforge:scholia/author/Q76419567/missing|📖]] |- | ''[[:d:Q81177218|Owen A.M. Lewis]]'' | | | | | 1980 | | [[toolforge:scholia/author/Q81177218|0]] / [[toolforge:scholia/author/Q81177218/missing|📖]] |- | ''[[:d:Q77717266|Michael Charles Kew]]'' | ''[[:d:Q1650915|umcwaningi]]'' | | | | 1987 | | [[toolforge:scholia/author/Q77717266|0]] / [[toolforge:scholia/author/Q77717266/missing|📖]] |- | ''[[:d:Q81177625|James D. Lewis-Williams]]'' | | | | | 1993 | | [[toolforge:scholia/author/Q81177625|0]] / [[toolforge:scholia/author/Q81177625/missing|📖]] |- | ''[[:d:Q11256815|David Mark Richardson]]'' | ''[[:d:Q15839134|ecologist]]'' | [https://orcid.org/0000-0001-9574-8297 0000-0001-9574-8297] | [https://scholar.google.com/citations?user=Rdfu4uoAAAAJ Rdfu4uoAAAAJ] | [https://viaf.org/en/viaf/85249968 85249968] | 2008 | | [[toolforge:scholia/author/Q11256815|5]] / [[toolforge:scholia/author/Q11256815/missing|📖]] |- | ''[[:d:Q42830282|Peter Henzi]]'' | ''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0001-6175-1674 0000-0001-6175-1674] | | | 2011 | | [[toolforge:scholia/author/Q42830282|0]] / [[toolforge:scholia/author/Q42830282/missing|📖]] |- | ''[[:d:Q15438215|Walter Wargau]]'' | [[Ugqayinyanga]]<br/>''[[:d:Q1622272|university teacher]]'' | | | [https://viaf.org/en/viaf/72240426 72240426] | | [[File:Walter Wargau (Student).jpg|center|128px]] | [[toolforge:scholia/author/Q15438215|0]] / [[toolforge:scholia/author/Q15438215/missing|📖]] |- | ''[[:d:Q79306387|Norman Pammenter]]'' | | | | | 2011 | | [[toolforge:scholia/author/Q79306387|0]] / [[toolforge:scholia/author/Q79306387/missing|📖]] |- | ''[[:d:Q81036719|William F. Harris]]'' | ''[[:d:Q7888586|chemical engineer]]''<br/>''[[:d:Q1622272|university teacher]]'' | | | | 2001 | | [[toolforge:scholia/author/Q81036719|0]] / [[toolforge:scholia/author/Q81036719/missing|📖]] |- | ''[[:d:Q42544590|Daniela Cristina Stefan]]'' | ''[[:d:Q1650915|umcwaningi]]''<br/>''[[:d:Q1919436|pediatrician]]''<br/>''[[:d:Q16062369|oncologist]]'' | [https://orcid.org/0000-0001-5740-1209 0000-0001-5740-1209] | | | 2015 | | [[toolforge:scholia/author/Q42544590|0]] / [[toolforge:scholia/author/Q42544590/missing|📖]] |- | ''[[:d:Q82912218|Yackoob K. Seedat]]'' | | | | | 1995 | | [[toolforge:scholia/author/Q82912218|0]] / [[toolforge:scholia/author/Q82912218/missing|📖]] |- | ''[[:d:Q81038008|Walter D. Heiss]]'' | | | | | 1998 | | [[toolforge:scholia/author/Q81038008|0]] / [[toolforge:scholia/author/Q81038008/missing|📖]] |- | ''[[:d:Q82912585|Mary K. Seely]]'' | ''[[:d:Q15839134|ecologist]]'' | | | | 1991 | | [[toolforge:scholia/author/Q82912585|0]] / [[toolforge:scholia/author/Q82912585/missing|📖]] |- | ''[[:d:Q82912954|Milton Shain]]'' | | | | | 2014 | | [[toolforge:scholia/author/Q82912954|0]] / [[toolforge:scholia/author/Q82912954/missing|📖]] |- | ''[[:d:Q37643854|Gregory L. Blatch]]'' | ''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0003-0778-8577 0000-0003-0778-8577] | | [https://viaf.org/en/viaf/272043681 272043681] | 2008 | | [[toolforge:scholia/author/Q37643854|0]] / [[toolforge:scholia/author/Q37643854/missing|📖]] |- | ''[[:d:Q19623171|Clarence Van Riet Lowe]]'' | ''[[:d:Q3621491|archaeologist]]''<br/>''[[:d:Q13582652|civil engineer]]'' | | | [https://viaf.org/en/viaf/62837606 62837606] | | | [[toolforge:scholia/author/Q19623171|0]] / [[toolforge:scholia/author/Q19623171/missing|📖]] |- | ''[[:d:Q82914193|Vere Shannon]]'' | ''[[:d:Q3546255|oceanographer]]'' | | | | 1993 | | [[toolforge:scholia/author/Q82914193|0]] / [[toolforge:scholia/author/Q82914193/missing|📖]] |- | ''[[:d:Q43267916|Susan A. Bourne]]'' | ''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0002-2491-2843 0000-0002-2491-2843] | [https://scholar.google.com/citations?user=OlFQMW4AAAAJ OlFQMW4AAAAJ] | | 2011 | | [[toolforge:scholia/author/Q43267916|0]] / [[toolforge:scholia/author/Q43267916/missing|📖]] |- | ''[[:d:Q82915241|Merwyn Shear]]'' | | | | | 1978 | | [[toolforge:scholia/author/Q82915241|0]] / [[toolforge:scholia/author/Q82915241/missing|📖]] |- | ''[[:d:Q450598|Lee Berger]]'' | ''[[:d:Q21272406|paleoanthropologist]]''<br/>''[[:d:Q4773904|anthropologist]]''<br/>''[[:d:Q205375|inventor]]''<br/>''[[:d:Q3621491|archaeologist]]''<br/>''[[:d:Q1622272|university teacher]]''<br/>''[[:d:Q239272|Australopithecus africanus]]'' | [https://orcid.org/0000-0002-0367-7629 0000-0002-0367-7629] | [https://scholar.google.com/citations?user=PpW_J88AAAAJ PpW_J88AAAAJ] | [https://viaf.org/en/viaf/6169562 6169562] | 2011 | [[File:Lee Berger image 2006.JPG|center|128px]] | [[toolforge:scholia/author/Q450598|9]] / [[toolforge:scholia/author/Q450598/missing|📖]] |- | ''[[:d:Q76716731|Thomas Ford]]'' | | | | | 1998 | | [[toolforge:scholia/author/Q76716731|0]] / [[toolforge:scholia/author/Q76716731/missing|📖]] |- | ''[[:d:Q7660145|Sydney Skaife]]'' | ''[[:d:Q3055126|entomologist]]''<br/>''[[:d:Q18805|naturalist]]''<br/>''[[:d:Q864503|biologist]]'' | | | [https://viaf.org/en/viaf/117949603 117949603]<br/>[https://viaf.org/en/viaf/86323194 86323194] | | [[File:Hendrik Brand.jpg|center|128px]] | [[toolforge:scholia/author/Q7660145|1]] / [[toolforge:scholia/author/Q7660145/missing|📖]] |- | ''[[:d:Q82917146|Peter E. Spargo]]'' | | | | | 1986 | | [[toolforge:scholia/author/Q82917146|0]] / [[toolforge:scholia/author/Q82917146/missing|📖]] |- | ''[[:d:Q52353159|Stephanie G. Burton]]'' | ''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0002-3094-8420 0000-0002-3094-8420] | | | 2011 | | [[toolforge:scholia/author/Q52353159|0]] / [[toolforge:scholia/author/Q52353159/missing|📖]] |- | ''[[:d:Q73836164|Perry T. Kaye]]'' | ''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0002-5997-8121 0000-0002-5997-8121] | | | 1998 | | [[toolforge:scholia/author/Q73836164|0]] / [[toolforge:scholia/author/Q73836164/missing|📖]] |- | ''[[:d:Q70377150|Lynn Morris]]'' | ''[[:d:Q15634281|virologist]]''<br/>''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0002-1836-8415 0000-0002-1836-8415]<br/>[https://orcid.org/0000-0003-3961-7828 0000-0003-3961-7828] | [https://scholar.google.com/citations?user=atnn-0AAAAAJ atnn-0AAAAAJ] | | 2015 | | [[toolforge:scholia/author/Q70377150|0]] / [[toolforge:scholia/author/Q70377150/missing|📖]] |- | ''[[:d:Q54086671|Norman Owen-Smith]]'' | ''[[:d:Q15839134|ecologist]]''<br/>''[[:d:Q1622272|university teacher]]'' | [https://orcid.org/0000-0001-8429-1201 0000-0001-8429-1201] | [https://scholar.google.com/citations?user=BoSadf0AAAAJ BoSadf0AAAAJ] | [https://viaf.org/en/viaf/29615824 29615824]<br/>[https://viaf.org/en/viaf/496166656941922710006 496166656941922710006] | 2003 | | [[toolforge:scholia/author/Q54086671|2]] / [[toolforge:scholia/author/Q54086671/missing|📖]] |- | ''[[:d:Q5213742|Dan J. Stein]]'' | ''[[:d:Q211346|psychiatrist]]''<br/>[[USolwazi]]<br/>''[[:d:Q1622272|university teacher]]''<br/>[[Inyanga (umelaphi)|inyanga]] | [https://orcid.org/0000-0001-7218-7810 0000-0001-7218-7810] | [https://scholar.google.com/citations?user=LOHkEw8AAAAJ LOHkEw8AAAAJ] | [https://viaf.org/en/viaf/39468370 39468370] | 2012 | [[File:Dan-Stein-20130904.jpg|center|128px]] | [[toolforge:scholia/author/Q5213742|29]] / [[toolforge:scholia/author/Q5213742/missing|📖]] |- | ''[[:d:Q17612495|Quarraisha Karim]]'' | ''[[:d:Q12765408|epidemiologist]]''<br/>''[[:d:Q1622272|university teacher]]''<br/>''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0002-0985-477X 0000-0002-0985-477X] | [https://scholar.google.com/citations?user=ARaZ9-MAAAAJ ARaZ9-MAAAAJ] | [https://viaf.org/en/viaf/24336962 24336962] | 2014 | [[File:Quarraisha Abdool Karim.jpg|center|128px]] | [[toolforge:scholia/author/Q17612495|1]] / [[toolforge:scholia/author/Q17612495/missing|📖]] |- | ''[[:d:Q57259567|Charles B. de Koning]]'' | ''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0003-4525-5130 0000-0003-4525-5130] | | | 2013 | | [[toolforge:scholia/author/Q57259567|0]] / [[toolforge:scholia/author/Q57259567/missing|📖]] |- | ''[[:d:Q15451201|Geoffrey Blight]]'' | ''[[:d:Q11424604|earth scientist]]'' | | | [https://viaf.org/en/viaf/63422447 63422447] | 1991 | [[File:Geoff Blight.jpg|center|128px]] | [[toolforge:scholia/author/Q15451201|0]] / [[toolforge:scholia/author/Q15451201/missing|📖]] |- | ''[[:d:Q2043552|Johannes van Staden]]'' | ''[[:d:Q2374149|botanist]]''<br/>''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0003-0515-1281 0000-0003-0515-1281] | | [https://viaf.org/en/viaf/562159234013403370477 562159234013403370477] | 1990 | [[File:Prof johannes van staden-1595341335.jpg|center|128px]] | [[toolforge:scholia/author/Q2043552|0]] / [[toolforge:scholia/author/Q2043552/missing|📖]] |- | ''[[:d:Q80761328|W.P.M. de Ruijter]]'' | ''[[:d:Q3546255|oceanographer]]'' | | [https://scholar.google.com/citations?user=N6GAWu8AAAAJ N6GAWu8AAAAJ] | [https://viaf.org/en/viaf/55454984 55454984] | 2001 | | [[toolforge:scholia/author/Q80761328|0]] / [[toolforge:scholia/author/Q80761328/missing|📖]] |- | ''[[:d:Q81915116|Haralambos Parolis]]'' | | | | | 1995 | | [[toolforge:scholia/author/Q81915116|0]] / [[toolforge:scholia/author/Q81915116/missing|📖]] |- | ''[[:d:Q80762518|Cesáreo A. Dominguez]]'' | | | [https://scholar.google.com/citations?user=AynPRjkAAAAJ AynPRjkAAAAJ] | [https://viaf.org/en/viaf/76115383 76115383] | 1996 | | [[toolforge:scholia/author/Q80762518|0]] / [[toolforge:scholia/author/Q80762518/missing|📖]] |- | ''[[:d:Q80762761|Siegfried E. Drewes]]'' | | | | | 1990 | | [[toolforge:scholia/author/Q80762761|0]] / [[toolforge:scholia/author/Q80762761/missing|📖]] |- | ''[[:d:Q71104683|Willem Albert Hanekom]]'' | ''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0002-6788-1645 0000-0002-6788-1645] | [https://scholar.google.com/citations?user=GNFho0kAAAAJ GNFho0kAAAAJ] | | 2013 | | [[toolforge:scholia/author/Q71104683|0]] / [[toolforge:scholia/author/Q71104683/missing|📖]] |- | ''[[:d:Q5074942|Charles Abercrombie Smith]]'' | [[Usonzululwazi|imfundondalo]]<br/>[[Usopolitiki|usombusazwe]] | | | | | [[File:Sir Charles Abercrombie Smith - Scientist and politician - Cape Colony.png|center|128px]] | [[toolforge:scholia/author/Q5074942|0]] / [[toolforge:scholia/author/Q5074942/missing|📖]] |- | ''[[:d:Q53952047|William J. Bond]]'' | ''[[:d:Q15839134|ecologist]]''<br/>''[[:d:Q1622272|university teacher]]'' | [https://orcid.org/0000-0002-3441-2084 0000-0002-3441-2084] | [https://scholar.google.com/citations?user=8vuc6rIAAAAJ 8vuc6rIAAAAJ] | [https://viaf.org/en/viaf/279051097 279051097] | 1998 | | [[toolforge:scholia/author/Q53952047|0]] / [[toolforge:scholia/author/Q53952047/missing|📖]] |- | ''[[:d:Q53808040|Michael T Davies-Coleman]]'' | ''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0001-5344-894X 0000-0001-5344-894X] | | [https://viaf.org/en/viaf/85647578 85647578] | 2008 | | [[toolforge:scholia/author/Q53808040|0]] / [[toolforge:scholia/author/Q53808040/missing|📖]] |- | ''[[:d:Q81056277|Michael J.R. Hoch]]'' | | | | | 1995 | | [[toolforge:scholia/author/Q81056277|0]] / [[toolforge:scholia/author/Q81056277/missing|📖]] |- | ''[[:d:Q15459092|Charles K. Brain]]'' | ''[[:d:Q1662561|paleontologist]]'' | | | [https://viaf.org/en/viaf/30825610 30825610] | 1976 | | [[toolforge:scholia/author/Q15459092|1]] / [[toolforge:scholia/author/Q15459092/missing|📖]] |- | ''[[:d:Q81056623|Alan N. Hodgson]]'' | | | | | 2008 | | [[toolforge:scholia/author/Q81056623|0]] / [[toolforge:scholia/author/Q81056623/missing|📖]] |- | ''[[:d:Q42420373|Guy F. Midgley]]'' | ''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0001-8264-0869 0000-0001-8264-0869] | | [https://viaf.org/en/viaf/53146094231500331476 53146094231500331476] | 2014 | | [[toolforge:scholia/author/Q42420373|0]] / [[toolforge:scholia/author/Q42420373/missing|📖]] |- | ''[[:d:Q56406446|Alan K. Whitfield]]'' | ''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0003-1452-7367 0000-0003-1452-7367] | [https://scholar.google.com/citations?user=NIDj1ksAAAAJ NIDj1ksAAAAJ] | | 2005 | | [[toolforge:scholia/author/Q56406446|2]] / [[toolforge:scholia/author/Q56406446/missing|📖]] |- | ''[[:d:Q81060675|Leon C. Isaacson]]'' | | | | | 1975 | | [[toolforge:scholia/author/Q81060675|0]] / [[toolforge:scholia/author/Q81060675/missing|📖]] |- | ''[[:d:Q81060977|Tom Jarrett]]'' | [[Ugqayinyanga]] | | | | 2015 | | [[toolforge:scholia/author/Q81060977|0]] / [[toolforge:scholia/author/Q81060977/missing|📖]] |- | ''[[:d:Q61598221|Chaudry Masood Khalique]]'' | ''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0002-1986-4859 0000-0002-1986-4859] | [https://scholar.google.com/citations?user=4ILEyUYAAAAJ 4ILEyUYAAAAJ] | | 2016 | | [[toolforge:scholia/author/Q61598221|0]] / [[toolforge:scholia/author/Q61598221/missing|📖]] |- | ''[[:d:Q78610632|Ebrahim Momoniat]]'' | ''[[:d:Q170790|mathematician]]'' | | | | 2017 | | [[toolforge:scholia/author/Q78610632|0]] / [[toolforge:scholia/author/Q78610632/missing|📖]] |- | ''[[:d:Q5084053|Charles van Onselen]]'' | ''[[:d:Q201788|historian]]''<br/>''[[:d:Q864380|biographer]]'' | [https://orcid.org/0000-0002-3903-8052 0000-0002-3903-8052] | | [https://viaf.org/en/viaf/64050944 64050944] | 1998 | | [[toolforge:scholia/author/Q5084053|1]] / [[toolforge:scholia/author/Q5084053/missing|📖]] |- | ''[[:d:Q26998207|Athelstan Cornish-Bowden]]'' | | | | | | [[File:Athelstan Hall Cornish-Bowden in about 1885.jpg|center|128px]] | [[toolforge:scholia/author/Q26998207|0]] / [[toolforge:scholia/author/Q26998207/missing|📖]] |- | ''[[:d:Q60590121|Robin Wood]]'' | ''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0002-4276-7117 0000-0002-4276-7117] | | | 2013 | | [[toolforge:scholia/author/Q60590121|0]] / [[toolforge:scholia/author/Q60590121/missing|📖]] |- | ''[[:d:Q21664327|Lawrence Crawford]]'' | ''[[:d:Q170790|mathematician]]'' | | | | | | [[toolforge:scholia/author/Q21664327|0]] / [[toolforge:scholia/author/Q21664327/missing|📖]] |- | ''[[:d:Q80053967|Peter Doughtrey Tyson]]'' | | | | | 1989 | | [[toolforge:scholia/author/Q80053967|0]] / [[toolforge:scholia/author/Q80053967/missing|📖]] |- | ''[[:d:Q20656400|Hoosen Coovadia]]'' | [[Inyanga (umelaphi)|inyanga]]<br/>''[[:d:Q134284649|anti-apartheid activist]]'' | | | | 2003 | | [[toolforge:scholia/author/Q20656400|0]] / [[toolforge:scholia/author/Q20656400/missing|📖]] |- | ''[[:d:Q70827557|Simon Henry Connell]]'' | ''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0001-6000-7245 0000-0001-6000-7245] | [https://scholar.google.com/citations?user=pVS2ZiMAAAAJ pVS2ZiMAAAAJ] | | 2006 | | [[toolforge:scholia/author/Q70827557|0]] / [[toolforge:scholia/author/Q70827557/missing|📖]] |- | ''[[:d:Q81064210|Graham I.H. Kerley]]'' | ''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0003-2702-5200 0000-0003-2702-5200] | | | 2017 | | [[toolforge:scholia/author/Q81064210|1]] / [[toolforge:scholia/author/Q81064210/missing|📖]] |- | ''[[:d:Q42571640|Jane Carruthers]]'' | ''[[:d:Q201788|historian]]''<br/>''[[:d:Q1622272|university teacher]]'' | [https://orcid.org/0000-0001-8210-4599 0000-0001-8210-4599] | | [https://viaf.org/en/viaf/4128165628894642480006 4128165628894642480006]<br/>[https://viaf.org/en/viaf/48310877 48310877] | 2005 | | [[toolforge:scholia/author/Q42571640|0]] / [[toolforge:scholia/author/Q42571640/missing|📖]] |- | ''[[:d:Q21522991|Richard N. Pienaar]]'' | ''[[:d:Q2374149|botanist]]''<br/>''[[:d:Q12358881|phycologist]]'' | | | [https://viaf.org/en/viaf/187578662 187578662] | 2002 | | [[toolforge:scholia/author/Q21522991|0]] / [[toolforge:scholia/author/Q21522991/missing|📖]] |- | ''[[:d:Q42572405|Marion Bamford]]'' | ''[[:d:Q30059961|paleobotanist]]''<br/>''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0003-0667-130X 0000-0003-0667-130X] | [https://scholar.google.com/citations?user=WT8NxO0AAAAJ WT8NxO0AAAAJ] | | 2006 | [[File:Prof. Marion Bamford.jpg|center|128px]] | [[toolforge:scholia/author/Q42572405|0]] / [[toolforge:scholia/author/Q42572405/missing|📖]] |- | ''[[:d:Q5236554|David Lewis-Williams]]'' | ''[[:d:Q4773904|anthropologist]]''<br/>''[[:d:Q3621491|archaeologist]]''<br/>''[[:d:Q1371378|ethnologist]]'' | | | [https://viaf.org/en/viaf/14885319 14885319] | | | [[toolforge:scholia/author/Q5236554|2]] / [[toolforge:scholia/author/Q5236554/missing|📖]] |- | ''[[:d:Q56849521|Leon M.T. Dicks]]'' | ''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0002-5157-9046 0000-0002-5157-9046] | | | 2013 | | [[toolforge:scholia/author/Q56849521|0]] / [[toolforge:scholia/author/Q56849521/missing|📖]] |- | ''[[:d:Q5092799|Cheryl de la Rey]]'' | ''[[:d:Q212980|psychologist]]'' | | | | 2010 | [[File:Cheryl de la Rey.jpg|center|128px]] | [[toolforge:scholia/author/Q5092799|0]] / [[toolforge:scholia/author/Q5092799/missing|📖]] |- | ''[[:d:Q54254936|Kelly Chibale]]'' | ''[[:d:Q3400985|academic]]''<br/>''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0002-4541-646X 0000-0002-4541-646X] | [https://scholar.google.com/citations?user=BAk6GbcAAAAJ BAk6GbcAAAAJ] | | 2009 | [[File:2025UniLeiden450-4.jpg|center|128px]] | [[toolforge:scholia/author/Q54254936|0]] / [[toolforge:scholia/author/Q54254936/missing|📖]] |- | ''[[:d:Q81791833|Darragh O’Donoghue]]'' | | | | [https://viaf.org/en/viaf/315709107 315709107] | 2005 | | [[toolforge:scholia/author/Q81791833|0]] / [[toolforge:scholia/author/Q81791833/missing|📖]] |- | ''[[:d:Q1348676|Sydney Samuel Hough]]'' | [[Ugqayinyanga]]<br/>''[[:d:Q170790|mathematician]]''<br/>[[umfundindalo]] | | | [https://viaf.org/en/viaf/35236785 35236785] | | | [[toolforge:scholia/author/Q1348676|0]] / [[toolforge:scholia/author/Q1348676/missing|📖]] |- | ''[[:d:Q42293328|Patricia Ann Whitelock]]'' | ''[[:d:Q752129|astrophysicist]]''<br/>''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0002-4678-4432 0000-0002-4678-4432] | | [https://viaf.org/en/viaf/24755014 24755014] | 2000 | | [[toolforge:scholia/author/Q42293328|1]] / [[toolforge:scholia/author/Q42293328/missing|📖]] |- | ''[[:d:Q22109577|Richard S. K. Barnes]]'' | ''[[:d:Q350979|zoologist]]''<br/>''[[:d:Q16868721|carcinologist]]''<br/>''[[:d:Q1622272|university teacher]]'' | [https://orcid.org/0000-0002-5773-5994 0000-0002-5773-5994] | | [https://viaf.org/en/viaf/64066109 64066109] | 2013 | | [[toolforge:scholia/author/Q22109577|0]] / [[toolforge:scholia/author/Q22109577/missing|📖]] |- | ''[[:d:Q7837812|Trefor Jenkins]]'' | ''[[:d:Q3126128|geneticist]]'' | | | [https://viaf.org/en/viaf/46916068 46916068] | 1975 | [[File:Trefor Jenkins00.jpg|center|128px]] | [[toolforge:scholia/author/Q7837812|0]] / [[toolforge:scholia/author/Q7837812/missing|📖]] |- | ''[[:d:Q22112378|Roger M. H. Smith]]'' | ''[[:d:Q1662561|paleontologist]]'' | | [https://scholar.google.com/citations?user=NlTbMPoAAAAJ NlTbMPoAAAAJ] | | 2008 | | [[toolforge:scholia/author/Q22112378|0]] / [[toolforge:scholia/author/Q22112378/missing|📖]] |- | ''[[:d:Q71274564|Fazal Mahmood Mahomed]]'' | ''[[:d:Q1650915|umcwaningi]]'' | | | | 2010 | | [[toolforge:scholia/author/Q71274564|0]] / [[toolforge:scholia/author/Q71274564/missing|📖]] |- | ''[[:d:Q19661724|Lyn Wadley]]'' | ''[[:d:Q3621491|archaeologist]]'' | [https://orcid.org/0000-0003-0053-0813 0000-0003-0053-0813] | [https://scholar.google.com/citations?user=bK8F68UAAAAJ bK8F68UAAAAJ] | [https://viaf.org/en/viaf/59117828 59117828] | 2014 | | [[toolforge:scholia/author/Q19661724|2]] / [[toolforge:scholia/author/Q19661724/missing|📖]] |- | ''[[:d:Q21392406|Richard Vernon Dingle]]'' | ''[[:d:Q21484199|ostracodologist]]''<br/>''[[:d:Q1662561|paleontologist]]'' | | | | 1983 | | [[toolforge:scholia/author/Q21392406|0]] / [[toolforge:scholia/author/Q21392406/missing|📖]] |- | ''[[:d:Q81511934|Marcelo P. Loewe]]'' | | | | | 2010 | | [[toolforge:scholia/author/Q81511934|0]] / [[toolforge:scholia/author/Q81511934/missing|📖]] |- | ''[[:d:Q81512201|John E. Lowther]]'' | | | | | 2005 | | [[toolforge:scholia/author/Q81512201|0]] / [[toolforge:scholia/author/Q81512201/missing|📖]] |- | ''[[:d:Q19519928|Henda C. Swart]]'' | ''[[:d:Q170790|mathematician]]'' | | | [https://viaf.org/en/viaf/7895173973184923810009 7895173973184923810009] | 1996 | | [[toolforge:scholia/author/Q19519928|0]] / [[toolforge:scholia/author/Q19519928/missing|📖]] |- | ''[[:d:Q21394246|William Wardlaw Thompson]]'' | ''[[:d:Q4205432|ichthyologist]]'' | | | | | | [[toolforge:scholia/author/Q21394246|0]] / [[toolforge:scholia/author/Q21394246/missing|📖]] |- | ''[[:d:Q78629970|Vincent Clifford Moran]]'' | | | | | 1991 | | [[toolforge:scholia/author/Q78629970|0]] / [[toolforge:scholia/author/Q78629970/missing|📖]] |- | ''[[:d:Q80936790|Paul de Villiers du Plessis]]'' | | | | | 1993 | | [[toolforge:scholia/author/Q80936790|0]] / [[toolforge:scholia/author/Q80936790/missing|📖]] |- | ''[[:d:Q80937821|Patrick G. Eriksson]]'' | ''[[:d:Q1650915|umcwaningi]]'' | | | | 2010 | | [[toolforge:scholia/author/Q80937821|0]] / [[toolforge:scholia/author/Q80937821/missing|📖]] |- | ''[[:d:Q80938027|Arthur G. Every]]'' | | | | | 1997 | | [[toolforge:scholia/author/Q80938027|0]] / [[toolforge:scholia/author/Q80938027/missing|📖]] |- | ''[[:d:Q80938181|Melvin Faierman]]'' | | | | | 1999 | | [[toolforge:scholia/author/Q80938181|0]] / [[toolforge:scholia/author/Q80938181/missing|📖]] |- | ''[[:d:Q43165660|Edward Rybicki]]'' | ''[[:d:Q1622272|university teacher]]'' | [https://orcid.org/0000-0001-8024-9911 0000-0001-8024-9911] | | [https://viaf.org/en/viaf/8027168049010038410006 8027168049010038410006] | 2002 | | [[toolforge:scholia/author/Q43165660|0]] / [[toolforge:scholia/author/Q43165660/missing|📖]] |- | ''[[:d:Q15485098|Michael William Feast]]'' | [[Ugqayinyanga]]<br/>''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0002-8908-1630 0000-0002-8908-1630] | | [https://viaf.org/en/viaf/34323769 34323769] | 1982 | | [[toolforge:scholia/author/Q15485098|0]] / [[toolforge:scholia/author/Q15485098/missing|📖]] |- | ''[[:d:Q60610431|Brian R. Allanson]]'' | ''[[:d:Q3640160|marine biologist]]''<br/>''[[:d:Q350979|zoologist]]''<br/>''[[:d:Q3644587|hydrologist]]'' | | | [https://viaf.org/en/viaf/45581243 45581243] | 1968 | | [[toolforge:scholia/author/Q60610431|1]] / [[toolforge:scholia/author/Q60610431/missing|📖]] |- | ''[[:d:Q80939015|John G. Field]]'' | ''[[:d:Q3546255|oceanographer]]'' | | | | 1989 | | [[toolforge:scholia/author/Q80939015|0]] / [[toolforge:scholia/author/Q80939015/missing|📖]] |- | ''[[:d:Q80939244|John S. Field]]'' | | | | | 1989 | | [[toolforge:scholia/author/Q80939244|0]] / [[toolforge:scholia/author/Q80939244/missing|📖]] |- | ''[[:d:Q80939459|Peter I. Folb]]'' | [[Inyanga (umelaphi)|inyanga]]<br/>''[[:d:Q2114605|pharmacologist]]''<br/>''[[:d:Q1622272|university teacher]]'' | | | [https://viaf.org/en/viaf/10782647 10782647] | 1998 | | [[toolforge:scholia/author/Q80939459|0]] / [[toolforge:scholia/author/Q80939459/missing|📖]] |- | ''[[:d:Q348933|Isaac Schapera]]'' | ''[[:d:Q4773904|anthropologist]]''<br/>''[[:d:Q1622272|university teacher]]'' | | | [https://viaf.org/en/viaf/108544741 108544741] | | [[File:Isaac Schapera, c1950s.jpg|center|128px]] | [[toolforge:scholia/author/Q348933|0]] / [[toolforge:scholia/author/Q348933/missing|📖]] |- | ''[[:d:Q80653014|John D. Comins]]'' | | | | | 1996 | | [[toolforge:scholia/author/Q80653014|0]] / [[toolforge:scholia/author/Q80653014/missing|📖]] |- | ''[[:d:Q61046038|Pieter Steyn]]'' | ''[[:d:Q593644|chemist]]'' | | | | 1996 | | [[toolforge:scholia/author/Q61046038|0]] / [[toolforge:scholia/author/Q61046038/missing|📖]] |- | ''[[:d:Q61046041|Douglas Butterworth]]'' | | | | | 2001 | | [[toolforge:scholia/author/Q61046041|0]] / [[toolforge:scholia/author/Q61046041/missing|📖]] |- | ''[[:d:Q61046058|Lionel Opie]]'' | ''[[:d:Q1650915|umcwaningi]]''<br/>[[Inyanga (umelaphi)|inyanga]]<br/>''[[:d:Q3264451|cardiologist]]''<br/>''[[:d:Q1622272|university teacher]]'' | | | [https://viaf.org/en/viaf/59161562 59161562] | 1983 | | [[toolforge:scholia/author/Q61046058|0]] / [[toolforge:scholia/author/Q61046058/missing|📖]] |- | ''[[:d:Q61046066|B. Daya Reddy]]'' | ''[[:d:Q81096|engineer]]''<br/>''[[:d:Q170790|mathematician]]'' | [https://orcid.org/0000-0002-8250-4821 0000-0002-8250-4821] | | [https://viaf.org/en/viaf/108617120 108617120] | 1992 | [[File:Daya Reddy 2018.jpg|center|128px]] | [[toolforge:scholia/author/Q61046066|0]] / [[toolforge:scholia/author/Q61046066/missing|📖]] |- | ''[[:d:Q4819906|Chris Brink]]'' | ''[[:d:Q170790|mathematician]]''<br/>''[[:d:Q1622272|university teacher]]'' | | | [https://viaf.org/en/viaf/62228603 62228603] | 1995 | | [[toolforge:scholia/author/Q4819906|0]] / [[toolforge:scholia/author/Q4819906/missing|📖]] |- | ''[[:d:Q82533058|Raymond Pollard]]'' | | | | | 2001 | | [[toolforge:scholia/author/Q82533058|0]] / [[toolforge:scholia/author/Q82533058/missing|📖]] |- | ''[[:d:Q80082536|Brian W. Van Wilgen]]'' | ''[[:d:Q1650915|umcwaningi]]''<br/>''[[:d:Q15839134|ecologist]]'' | [https://orcid.org/0000-0002-1536-7521 0000-0002-1536-7521] | [https://scholar.google.com/citations?user=5FfLX_4AAAAJ 5FfLX_4AAAAJ] | | 2014 | | [[toolforge:scholia/author/Q80082536|1]] / [[toolforge:scholia/author/Q80082536/missing|📖]] |- | ''[[:d:Q71576562|Neil John Coville]]'' | ''[[:d:Q1650915|umcwaningi]]'' | | | | 1997 | | [[toolforge:scholia/author/Q71576562|0]] / [[toolforge:scholia/author/Q71576562/missing|📖]] |- | ''[[:d:Q20831540|Judith Sealy]]'' | ''[[:d:Q3621491|archaeologist]]'' | [https://orcid.org/0000-0001-5071-8211 0000-0001-5071-8211] | [https://scholar.google.com/citations?user=hjy8MDAAAAAJ hjy8MDAAAAAJ] | [https://viaf.org/en/viaf/27100360 27100360] | 2006 | | [[toolforge:scholia/author/Q20831540|0]] / [[toolforge:scholia/author/Q20831540/missing|📖]] |- | ''[[:d:Q80520476|Michael E. Brown]]'' | ''[[:d:Q104693589|chemistry teacher]]''<br/>''[[:d:Q593644|chemist]]''<br/>''[[:d:Q1622272|university teacher]]'' | | | | 1988 | | [[toolforge:scholia/author/Q80520476|0]] / [[toolforge:scholia/author/Q80520476/missing|📖]] |- | ''[[:d:Q80521092|Michael N. Bruton]]'' | | | | | 1992 | | [[toolforge:scholia/author/Q80521092|0]] / [[toolforge:scholia/author/Q80521092/missing|📖]] |- | ''[[:d:Q29052586|Brenda Wingfield]]'' | ''[[:d:Q1650915|umcwaningi]]''<br/>''[[:d:Q3126128|geneticist]]'' | [https://orcid.org/0000-0002-6189-1519 0000-0002-6189-1519] | | | 2007 | | [[toolforge:scholia/author/Q29052586|1]] / [[toolforge:scholia/author/Q29052586/missing|📖]] |- | ''[[:d:Q82539949|Roger E. Raab]]'' | [[umfundindalo]]<br/>''[[:d:Q1622272|university teacher]]'' | | | | 1992 | | [[toolforge:scholia/author/Q82539949|0]] / [[toolforge:scholia/author/Q82539949/missing|📖]] |- | ''[[:d:Q80521586|James R. Bull]]'' | | | | | 1991 | | [[toolforge:scholia/author/Q80521586|0]] / [[toolforge:scholia/author/Q80521586/missing|📖]] |- | ''[[:d:Q80522068|Mino R. Caira]]'' | | | | | 2010 | | [[toolforge:scholia/author/Q80522068|0]] / [[toolforge:scholia/author/Q80522068/missing|📖]] |- | ''[[:d:Q79946604|Edward Sturrock]]'' | | | | | 2006 | | [[toolforge:scholia/author/Q79946604|0]] / [[toolforge:scholia/author/Q79946604/missing|📖]] |- | ''[[:d:Q70720643|Mike Wingfield]]'' | ''[[:d:Q1650915|umcwaningi]]''<br/>''[[:d:Q2487799|mycologist]]''<br/>''[[:d:Q2374149|botanist]]''<br/>''[[:d:Q864503|biologist]]'' | [https://orcid.org/0000-0001-9346-2009 0000-0001-9346-2009] | [https://scholar.google.com/citations?user=wT4V7isAAAAJ wT4V7isAAAAJ] | [https://viaf.org/en/viaf/14989035 14989035]<br/>[https://viaf.org/en/viaf/22155914471039401883 22155914471039401883] | 1998 | | [[toolforge:scholia/author/Q70720643|0]] / [[toolforge:scholia/author/Q70720643/missing|📖]] |- | ''[[:d:Q77803|Selmar Schonland]]'' | ''[[:d:Q2374149|botanist]]''<br/>''[[:d:Q1622272|university teacher]]''<br/>''[[:d:Q2083925|botanical collector]]'' | | | [https://viaf.org/en/viaf/40795045 40795045] | | [[File:Schonland Pretoria.jpg|center|128px]] | [[toolforge:scholia/author/Q77803|1]] / [[toolforge:scholia/author/Q77803/missing|📖]] |- | ''[[:d:Q59187857|Douglas E. Rawlings]]'' | ''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0002-2521-8167 0000-0002-2521-8167] | | | 1993 | | [[toolforge:scholia/author/Q59187857|0]] / [[toolforge:scholia/author/Q59187857/missing|📖]] |- | ''[[:d:Q79660900|Roland Schulze]]'' | ''[[:d:Q3644587|hydrologist]]'' | | | | 1993 | | [[toolforge:scholia/author/Q79660900|0]] / [[toolforge:scholia/author/Q79660900/missing|📖]] |- | ''[[:d:Q52701989|Robin M Crewe]]'' | ''[[:d:Q1650915|umcwaningi]]''<br/>''[[:d:Q1622272|university teacher]]''<br/>''[[:d:Q3055126|entomologist]]''<br/>''[[:d:Q864503|biologist]]'' | [https://orcid.org/0000-0003-4398-8250 0000-0003-4398-8250] | | [https://viaf.org/en/viaf/172379736 172379736] | 1990 | | [[toolforge:scholia/author/Q52701989|0]] / [[toolforge:scholia/author/Q52701989/missing|📖]] |- | ''[[:d:Q42178276|Renée Kraan-Korteweg]]'' | [[Ugqayinyanga]] | [https://orcid.org/0000-0002-0202-6250 0000-0002-0202-6250] | | [https://viaf.org/en/viaf/272584657 272584657] | 2012 | | [[toolforge:scholia/author/Q42178276|1]] / [[toolforge:scholia/author/Q42178276/missing|📖]] |- | ''[[:d:Q43188044|Willem Heber van Zyl]]'' | ''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0001-8195-353X 0000-0001-8195-353X] | | | 2014 | | [[toolforge:scholia/author/Q43188044|0]] / [[toolforge:scholia/author/Q43188044/missing|📖]] |- | ''[[:d:Q60055963|João P. Rodrigues]]'' | ''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0002-1980-3845 0000-0002-1980-3845] | | | 2005 | | [[toolforge:scholia/author/Q60055963|0]] / [[toolforge:scholia/author/Q60055963/missing|📖]] |- | ''[[:d:Q91052641|John Parkington]]'' | ''[[:d:Q1650915|umcwaningi]]''<br/>''[[:d:Q3621491|archaeologist]]'' | [https://orcid.org/0000-0001-6127-6826 0000-0001-6127-6826] | [https://scholar.google.com/citations?user=tk-A4MsAAAAJ tk-A4MsAAAAJ] | [https://viaf.org/en/viaf/36952076 36952076] | | | [[toolforge:scholia/author/Q91052641|11]] / [[toolforge:scholia/author/Q91052641/missing|📖]] |- | ''[[:d:Q59624330|Paul R. Manger]]'' | ''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0002-1881-2854 0000-0002-1881-2854] | | | 2013 | | [[toolforge:scholia/author/Q59624330|0]] / [[toolforge:scholia/author/Q59624330/missing|📖]] |- | ''[[:d:Q76926947|Ronald Harley]]'' | ''[[:d:Q1326886|electrical engineer]]'' | | | [https://viaf.org/en/viaf/192970031 192970031] | 1990 | | [[toolforge:scholia/author/Q76926947|0]] / [[toolforge:scholia/author/Q76926947/missing|📖]] |- | ''[[:d:Q82549683|Laurence J. Robb]]'' | | | | | | | [[toolforge:scholia/author/Q82549683|0]] / [[toolforge:scholia/author/Q82549683/missing|📖]] |- | ''[[:d:Q51697828|Kathryn H. Myburgh]]'' | ''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0003-4501-2120 0000-0003-4501-2120] | [https://scholar.google.com/citations?user=DXNUiEEAAAAJ DXNUiEEAAAAJ] | [https://viaf.org/en/viaf/205963403 205963403] | 2017 | | [[toolforge:scholia/author/Q51697828|0]] / [[toolforge:scholia/author/Q51697828/missing|📖]] |- | ''[[:d:Q23008763|Johann Carl Vogel]]'' | ''[[:d:Q1622272|university teacher]]''<br/>[[umfundindalo]]<br/>''[[:d:Q3621491|archaeologist]]'' | | | [https://viaf.org/en/viaf/171593751 171593751] | | | [[toolforge:scholia/author/Q23008763|0]] / [[toolforge:scholia/author/Q23008763/missing|📖]] |- | ''[[:d:Q77793537|Horst Helmut Klump]]'' | | | | | 2000 | | [[toolforge:scholia/author/Q77793537|0]] / [[toolforge:scholia/author/Q77793537/missing|📖]] |- | ''[[:d:Q77793851|Klaus Koch]]'' | ''[[:d:Q593644|chemist]]'' | [https://orcid.org/0000-0003-3845-4406 0000-0003-3845-4406] | | | 2002 | | [[toolforge:scholia/author/Q77793851|0]] / [[toolforge:scholia/author/Q77793851/missing|📖]] |- | ''[[:d:Q82984689|Rudolph J van Aarde]]'' | | | | | 2004 | | [[toolforge:scholia/author/Q82984689|0]] / [[toolforge:scholia/author/Q82984689/missing|📖]] |- | ''[[:d:Q80533870|Philip Charles]]'' | | | | | 2008 | | [[toolforge:scholia/author/Q80533870|0]] / [[toolforge:scholia/author/Q80533870/missing|📖]] |- | ''[[:d:Q80534086|Robert W. Charlton]]'' | | | | | 1991 | | [[toolforge:scholia/author/Q80534086|0]] / [[toolforge:scholia/author/Q80534086/missing|📖]] |- | ''[[:d:Q18685421|Anusuya Chinsamy-Turan]]'' | ''[[:d:Q1662561|paleontologist]]''<br/>''[[:d:Q1622272|university teacher]]''<br/>''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0002-9786-5080 0000-0002-9786-5080] | | [https://viaf.org/en/viaf/27342603 27342603] | 2006 | [[File:Anusuya Chinsamy-Turan, West Coast Fossil Park tour.jpg|center|128px]] | [[toolforge:scholia/author/Q18685421|0]] / [[toolforge:scholia/author/Q18685421/missing|📖]] |- | ''[[:d:Q82985262|Jan van den Ende]]'' | | | | | 1995 | | [[toolforge:scholia/author/Q82985262|0]] / [[toolforge:scholia/author/Q82985262/missing|📖]] |- | ''[[:d:Q82553257|Allen L. Rodgers]]'' | | | | | 2010 | | [[toolforge:scholia/author/Q82553257|0]] / [[toolforge:scholia/author/Q82553257/missing|📖]] |- | ''[[:d:Q76931737|Manfred Armin Hellberg]]'' | | | | | 1992 | | [[toolforge:scholia/author/Q76931737|0]] / [[toolforge:scholia/author/Q76931737/missing|📖]] |- | ''[[:d:Q51846346|Renfrew Christie]]'' | ''[[:d:Q134284649|anti-apartheid activist]]''<br/>''[[:d:Q20826540|scholar]]'' | | | [https://viaf.org/en/viaf/62928676 62928676] | 2003 | | [[toolforge:scholia/author/Q51846346|0]] / [[toolforge:scholia/author/Q51846346/missing|📖]] |- | ''[[:d:Q1387629|George F. R. Ellis]]'' | [[umfundindalo]]<br/>''[[:d:Q170790|mathematician]]''<br/>''[[:d:Q1622272|university teacher]]''<br/>''[[:d:Q15980158|non-fiction writer]]''<br/>[[Ugqayinyanga]] | [https://orcid.org/0000-0001-8484-0629 0000-0001-8484-0629] | | [https://viaf.org/en/viaf/109637661 109637661] | 1983 | [[File:George Ellis 0040.jpg|center|128px]] | [[toolforge:scholia/author/Q1387629|4]] / [[toolforge:scholia/author/Q1387629/missing|📖]] |- | ''[[:d:Q83132581|Albertus S. van Jaarsveld]]'' | | | | | 2005 | | [[toolforge:scholia/author/Q83132581|0]] / [[toolforge:scholia/author/Q83132581/missing|📖]] |- | ''[[:d:Q524221|John Hewitt]]'' | ''[[:d:Q4773904|anthropologist]]''<br/>''[[:d:Q3621491|archaeologist]]''<br/>''[[:d:Q350979|zoologist]]''<br/>''[[:d:Q16271064|herpetologist]]''<br/>''[[:d:Q17344952|arachnologist]]'' | | | | | | [[toolforge:scholia/author/Q524221|0]] / [[toolforge:scholia/author/Q524221/missing|📖]] |- | ''[[:d:Q58336810|Andrew Cooper]]'' | ''[[:d:Q11424604|earth scientist]]'' | [https://orcid.org/0000-0003-4972-8812 0000-0003-4972-8812] | [https://scholar.google.com/citations?user=wck4s-UAAAAJ wck4s-UAAAAJ] | [https://viaf.org/en/viaf/55808460 55808460] | | | [[toolforge:scholia/author/Q58336810|0]] / [[toolforge:scholia/author/Q58336810/missing|📖]] |- | ''[[:d:Q83134393|Johan van Zyl]]'' | | | | | 1997 | | [[toolforge:scholia/author/Q83134393|0]] / [[toolforge:scholia/author/Q83134393/missing|📖]] |- | ''[[:d:Q2976150|John Jackson]]'' | [[Ugqayinyanga]]<br/>''[[:d:Q752129|astrophysicist]]''<br/>''[[:d:Q1622272|university teacher]]'' | | | [https://viaf.org/en/viaf/51317806 51317806] | 1934 | [[File:JohnJackson(astronomer).jpg|center|128px]] | [[toolforge:scholia/author/Q2976150|0]] / [[toolforge:scholia/author/Q2976150/missing|📖]] |- | ''[[:d:Q22006961|Valerie Mizrahi]]'' | ''[[:d:Q864503|biologist]]''<br/>''[[:d:Q15839206|molecular biologist]]''<br/>''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0003-4824-9115 0000-0003-4824-9115] | | [https://viaf.org/en/viaf/8150380426913370197 8150380426913370197] | 2000 | | [[toolforge:scholia/author/Q22006961|0]] / [[toolforge:scholia/author/Q22006961/missing|📖]] |- | ''[[:d:Q81549700|Adolf Conrad Matthee]]'' | | | | | 2014 | | [[toolforge:scholia/author/Q81549700|0]] / [[toolforge:scholia/author/Q81549700/missing|📖]] |- | ''[[:d:Q83135813|Morris J. Viljoen]]'' | ''[[:d:Q520549|geologist]]'' | | | [https://viaf.org/en/viaf/29202617 29202617] | 1994 | | [[toolforge:scholia/author/Q83135813|0]] / [[toolforge:scholia/author/Q83135813/missing|📖]] |- | ''[[:d:Q39885100|Aletta E. Schutte]]'' | ''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0001-9217-4937 0000-0001-9217-4937] | [https://scholar.google.com/citations?user=f1oels0AAAAJ f1oels0AAAAJ] | | 2015 | | [[toolforge:scholia/author/Q39885100|0]] / [[toolforge:scholia/author/Q39885100/missing|📖]] |- | ''[[:d:Q5861359|John Patrick Rourke]]'' | ''[[:d:Q2374149|botanist]]'' | | | [https://viaf.org/en/viaf/33298739 33298739] | 1995 | | [[toolforge:scholia/author/Q5861359|0]] / [[toolforge:scholia/author/Q5861359/missing|📖]] |- | ''[[:d:Q83137250|Richard P. Viljoen]]'' | | | | | 1998 | | [[toolforge:scholia/author/Q83137250|0]] / [[toolforge:scholia/author/Q83137250/missing|📖]] |- | ''[[:d:Q1681675|Jan C. A. Boeyens]]'' | ''[[:d:Q593644|chemist]]''<br/>''[[:d:Q1622272|university teacher]]'' | | | [https://viaf.org/en/viaf/29820137 29820137] | 1988 | | [[toolforge:scholia/author/Q1681675|0]] / [[toolforge:scholia/author/Q1681675/missing|📖]] |- | ''[[:d:Q96489|Achim Richter]]'' | ''[[:d:Q16742096|nuclear physicist]]''<br/>''[[:d:Q1622272|university teacher]]''<br/>[[umfundindalo]] | | [https://scholar.google.com/citations?user=WU_HsKkAAAAJ WU_HsKkAAAAJ] | [https://viaf.org/en/viaf/232819266 232819266] | | | [[toolforge:scholia/author/Q96489|0]] / [[toolforge:scholia/author/Q96489/missing|📖]] |- | ''[[:d:Q1971138|Mary Agard Pocock]]'' | ''[[:d:Q2374149|botanist]]''<br/>''[[:d:Q12358881|phycologist]]''<br/>''[[:d:Q11900058|explorer]]''<br/>''[[:d:Q3148760|botanical illustrator]]''<br/>[[UMfundisi]]<br/>''[[:d:Q2083925|botanical collector]]''<br/>''[[:d:Q98544732|scientific collector]]'' | | | [https://viaf.org/en/viaf/16153470956745082416 16153470956745082416] | | | [[toolforge:scholia/author/Q1971138|1]] / [[toolforge:scholia/author/Q1971138/missing|📖]] |- | ''[[:d:Q25615160|Paul Daniel Hahn]]'' | ''[[:d:Q593644|chemist]]''<br/>''[[:d:Q5428874|academic staff]]'' | | | | | [[File:Prof Paul Daniel Hahn.jpg|center|128px]] | [[toolforge:scholia/author/Q25615160|0]] / [[toolforge:scholia/author/Q25615160/missing|📖]] |- | ''[[:d:Q38304462|Robert P. Millar]]'' | ''[[:d:Q2919046|biochemist]]''<br/>''[[:d:Q350979|zoologist]]''<br/>''[[:d:Q1622272|university teacher]]'' | [https://orcid.org/0000-0003-3606-2708 0000-0003-3606-2708] | | [https://viaf.org/en/viaf/94387090 94387090] | 2008 | | [[toolforge:scholia/author/Q38304462|0]] / [[toolforge:scholia/author/Q38304462/missing|📖]] |- | ''[[:d:Q38305842|Wayne M. Getz]]'' | ''[[:d:Q170790|mathematician]]''<br/>''[[:d:Q864503|biologist]]''<br/>''[[:d:Q12765408|epidemiologist]]''<br/>''[[:d:Q3055126|entomologist]]''<br/>''[[:d:Q61791734|biomathematician]]''<br/>''[[:d:Q1622272|university teacher]]'' | [https://orcid.org/0000-0001-8784-9354 0000-0001-8784-9354] | | [https://viaf.org/en/viaf/93683896 93683896] | 2003 | | [[toolforge:scholia/author/Q38305842|0]] / [[toolforge:scholia/author/Q38305842/missing|📖]] |- | ''[[:d:Q81701088|Terence S. McCarthy]]'' | ''[[:d:Q520549|geologist]]'' | | [https://scholar.google.com/citations?user=8nW-dTkAAAAJ 8nW-dTkAAAAJ] | [https://viaf.org/en/viaf/11612688 11612688]<br/>[https://viaf.org/en/viaf/65534637 65534637] | 1994 | | [[toolforge:scholia/author/Q81701088|0]] / [[toolforge:scholia/author/Q81701088/missing|📖]] |- | ''[[:d:Q63391519|Sunil D. Maharaj]]'' | ''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0002-1967-2849 0000-0002-1967-2849] | | | 2011 | | [[toolforge:scholia/author/Q63391519|0]] / [[toolforge:scholia/author/Q63391519/missing|📖]] |- | ''[[:d:Q81701559|Anton McLachlan]]'' | | | | | 1992 | | [[toolforge:scholia/author/Q81701559|0]] / [[toolforge:scholia/author/Q81701559/missing|📖]] |- | ''[[:d:Q43496916|Michael J. Samways]]'' | ''[[:d:Q3055126|entomologist]]''<br/>''[[:d:Q1622272|university teacher]]'' | [https://orcid.org/0000-0003-4237-6025 0000-0003-4237-6025] | | [https://viaf.org/en/viaf/94489949 94489949] | 1999 | | [[toolforge:scholia/author/Q43496916|1]] / [[toolforge:scholia/author/Q43496916/missing|📖]] |- | ''[[:d:Q40902255|Julia Lee-Thorp]]'' | ''[[:d:Q3621491|archaeologist]]''<br/>''[[:d:Q1622272|university teacher]]'' | [https://orcid.org/0000-0002-3291-0258 0000-0002-3291-0258] | | [https://viaf.org/en/viaf/36637061 36637061] | 2004 | | [[toolforge:scholia/author/Q40902255|0]] / [[toolforge:scholia/author/Q40902255/missing|📖]] |- | ''[[:d:Q28648152|Martin P. Hill]]'' | ''[[:d:Q3055126|entomologist]]''<br/>''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0003-0579-5298 0000-0003-0579-5298] | [https://scholar.google.com/citations?user=GKGAgoUAAAAJ GKGAgoUAAAAJ] | | 2016 | | [[toolforge:scholia/author/Q28648152|0]] / [[toolforge:scholia/author/Q28648152/missing|📖]] |- | ''[[:d:Q81702755|David S. McLachlan]]'' | | [https://orcid.org/0000-0002-1560-1293 0000-0002-1560-1293] | | | 1997 | | [[toolforge:scholia/author/Q81702755|0]] / [[toolforge:scholia/author/Q81702755/missing|📖]] |- | ''[[:d:Q81702888|Chrisopher D. McQuaid]]'' | | | | | 1999 | | [[toolforge:scholia/author/Q81702888|0]] / [[toolforge:scholia/author/Q81702888/missing|📖]] |- | ''[[:d:Q55175748|Helder M. Marques]]'' | ''[[:d:Q1650915|umcwaningi]]''<br/>''[[:d:Q593644|chemist]]'' | [https://orcid.org/0000-0003-1675-3835 0000-0003-1675-3835] | | | 2004 | | [[toolforge:scholia/author/Q55175748|0]] / [[toolforge:scholia/author/Q55175748/missing|📖]] |- | ''[[:d:Q63764|Harriet Margaret Louisa Bolus]]'' | ''[[:d:Q2374149|botanist]]''<br/>''[[:d:Q2083925|botanical collector]]''<br/>''[[:d:Q19507792|scientific illustrator]]''<br/>''[[:d:Q674426|curator]]''<br/>''[[:d:Q1907198|taxonomist]]''<br/>''[[:d:Q98544732|scientific collector]]'' | | | [https://viaf.org/en/viaf/171765397 171765397] | | [[File:Harriet Margaret Louisa Bolus.jpg|center|128px]] | [[toolforge:scholia/author/Q63764|1]] / [[toolforge:scholia/author/Q63764/missing|📖]] |- | ''[[:d:Q64835914|Karl Schilcher]]'' | [[umfundindalo]]<br/>''[[:d:Q1622272|university teacher]]'' | | | [https://viaf.org/en/viaf/59603504 59603504] | 2012 | | [[toolforge:scholia/author/Q64835914|0]] / [[toolforge:scholia/author/Q64835914/missing|📖]] |- | ''[[:d:Q69449514|Mary Scholes]]'' | ''[[:d:Q1650915|umcwaningi]]''<br/>''[[:d:Q60244908|plant physiologist]]'' | [https://orcid.org/0000-0001-5762-9537 0000-0001-5762-9537] | [https://scholar.google.com/citations?user=qNlkIIMAAAAJ qNlkIIMAAAAJ] | [https://viaf.org/en/viaf/177145857889223021078 177145857889223021078] | 2003 | | [[toolforge:scholia/author/Q69449514|0]] / [[toolforge:scholia/author/Q69449514/missing|📖]] |- | ''[[:d:Q48256805|Gordon D Brown]]'' | ''[[:d:Q1650915|umcwaningi]]'' | [https://orcid.org/0000-0003-4922-936X 0000-0003-4922-936X] | | | 2012 | | [[toolforge:scholia/author/Q48256805|0]] / [[toolforge:scholia/author/Q48256805/missing|📖]] |- | ''[[:d:Q42778663|Robert J. Scholes]]'' | ''[[:d:Q15839134|ecologist]]''<br/>''[[:d:Q1622272|university teacher]]''<br/>''[[:d:Q2374149|botanist]]'' | [https://orcid.org/0000-0001-5537-6935 0000-0001-5537-6935] | [https://scholar.google.com/citations?user=WR7VpKUAAAAJ WR7VpKUAAAAJ] | [https://viaf.org/en/viaf/71468733 71468733] | 1999 | | [[toolforge:scholia/author/Q42778663|0]] / [[toolforge:scholia/author/Q42778663/missing|📖]] |- | ''[[:d:Q20721396|Anna-Lise Williamson]]'' | ''[[:d:Q15634281|virologist]]'' | [https://orcid.org/0000-0002-5467-1200 0000-0002-5467-1200] | | | 2005 | | [[toolforge:scholia/author/Q20721396|0]] / [[toolforge:scholia/author/Q20721396/missing|📖]] |- | ''[[:d:Q81707103|Barry V. Mendelow]]'' | | | | | 1995 | | [[toolforge:scholia/author/Q81707103|0]] / [[toolforge:scholia/author/Q81707103/missing|📖]] |- | ''[[:d:Q37736202|John Morrison]]'' | ''[[:d:Q170790|mathematician]]''<br/>[[umfundindalo]]<br/>''[[:d:Q1622272|university teacher]]'' | | | [https://viaf.org/en/viaf/3862173124540430300008 3862173124540430300008] | | | [[toolforge:scholia/author/Q37736202|0]] / [[toolforge:scholia/author/Q37736202/missing|📖]] |- | ''[[:d:Q83150510|Anthony D. M. Walker]]'' | | | | | 1988 | | [[toolforge:scholia/author/Q83150510|0]] / [[toolforge:scholia/author/Q83150510/missing|📖]] |- | ''[[:d:Q79402317|Otto Walter Prozesky]]'' | | | | | 1989 | | [[toolforge:scholia/author/Q79402317|0]] / [[toolforge:scholia/author/Q79402317/missing|📖]] |- | ''[[:d:Q83150751|Heribert Weigert]]'' | | | | | 2015 | | [[toolforge:scholia/author/Q83150751|0]] / [[toolforge:scholia/author/Q83150751/missing|📖]] |- | ''[[:d:Q80700386|Lesley A. Cornish]]'' | | | | | 2009 | | [[toolforge:scholia/author/Q80700386|0]] / [[toolforge:scholia/author/Q80700386/missing|📖]] |- | ''[[:d:Q12364088|Hugh Paterson]]'' | ''[[:d:Q3055126|entomologist]]''<br/>''[[:d:Q16063497|evolutionary biologist]]'' | | | [https://viaf.org/en/viaf/35854115 35854115] | 1980 | | [[toolforge:scholia/author/Q12364088|0]] / [[toolforge:scholia/author/Q12364088/missing|📖]] |- | ''[[:d:Q42784019|Kevin J. Naidoo]]'' | ''[[:d:Q593644|chemist]]'' | [https://orcid.org/0000-0002-9898-3708 0000-0002-9898-3708] | | [https://viaf.org/en/viaf/65994373 65994373] | 2015 | | [[toolforge:scholia/author/Q42784019|0]] / [[toolforge:scholia/author/Q42784019/missing|📖]] |- | ''[[:d:Q57777886|Michael Meadows]]'' | ''[[:d:Q2560911|physical geographer]]''<br/>''[[:d:Q333634|umhumushi]]'' | [https://orcid.org/0000-0001-8322-3055 0000-0001-8322-3055] | [https://scholar.google.com/citations?user=EufqPQMAAAAJ EufqPQMAAAAJ] | [https://viaf.org/en/viaf/78996 78996] | 2015 | | [[toolforge:scholia/author/Q57777886|0]] / [[toolforge:scholia/author/Q57777886/missing|📖]] |} {{Wikidata list end}} az7tsob8o40h76pibf6flw4n14e0m5f Module:Location map 828 13435 126080 117985 2026-07-15T10:23:44Z Fongcwele 16873 126080 Scribunto text/plain require('strict') local p = {} local getArgs = require('Module:Arguments').getArgs local function round(n, decimals) local pow = 10^(decimals or 0) return math.floor(n * pow + 0.5) / pow end function p.getMapParams(map, frame) if not map then error('The name of the location map definition to use must be specified', 2) end local moduletitle = mw.title.new('Module:Location map/data/' .. map) if not moduletitle then error(string.format('%q is not a valid name for a location map definition', map), 2) elseif moduletitle.exists then local mapData = mw.loadData('Module:Location map/data/' .. map) return function(name, params) if name == nil then return 'Module:Location map/data/' .. map elseif mapData[name] == nil then return '' elseif params then return mw.message.newRawMessage(tostring(mapData[name]), unpack(params)):plain() else return mapData[name] end end else error('Unable to find the specified location map definition: "Module:Location map/data/' .. map .. '" does not exist', 2) end end function p.data(frame, args, map) if not args then args = getArgs(frame, {frameOnly = true}) end if not map then map = p.getMapParams(args[1], frame) end local params = {} for k,v in ipairs(args) do if k > 2 then params[k-2] = v end end return map(args[2], #params ~= 0 and params) end local hemisphereMultipliers = { longitude = { W = -1, w = -1, E = 1, e = 1 }, latitude = { S = -1, s = -1, N = 1, n = 1 } } local function decdeg(degrees, minutes, seconds, hemisphere, decimal, direction) if decimal then if degrees then error('Decimal and DMS degrees cannot both be provided for ' .. direction, 2) elseif minutes then error('Minutes can only be provided with DMS degrees for ' .. direction, 2) elseif seconds then error('Seconds can only be provided with DMS degrees for ' .. direction, 2) elseif hemisphere then error('A hemisphere can only be provided with DMS degrees for ' .. direction, 2) end local retval = tonumber(decimal) if retval then return retval end error('The value "' .. decimal .. '" provided for ' .. direction .. ' is not valid', 2) elseif seconds and not minutes then error('Seconds were provided for ' .. direction .. ' without minutes also being provided', 2) elseif not degrees then if minutes then error('Minutes were provided for ' .. direction .. ' without degrees also being provided', 2) elseif hemisphere then error('A hemisphere was provided for ' .. direction .. ' without degrees also being provided', 2) end return nil end decimal = tonumber(degrees) if not decimal then error('The degree value "' .. degrees .. '" provided for ' .. direction .. ' is not valid', 2) elseif minutes and not tonumber(minutes) then error('The minute value "' .. minutes .. '" provided for ' .. direction .. ' is not valid', 2) elseif seconds and not tonumber(seconds) then error('The second value "' .. seconds .. '" provided for ' .. direction .. ' is not valid', 2) end decimal = decimal + (minutes or 0)/60 + (seconds or 0)/3600 if hemisphere then local multiplier = hemisphereMultipliers[direction][hemisphere] if not multiplier then error('The hemisphere "' .. hemisphere .. '" provided for ' .. direction .. ' is not valid', 2) end decimal = decimal * multiplier end return decimal end -- Finds a parameter in a transclusion of {{Coord}}. local function coord2text(para,coord) -- this should be changed for languages which do not use Arabic numerals or the degree sign local lat, long = mw.ustring.match(coord,'<span class="p%-latitude latitude">([^<]+)</span><span class="p%-longitude longitude">([^<]+)</span>') if lat then return tonumber(para == 'longitude' and long or lat) end local result = mw.text.split(mw.ustring.match(coord,'%-?[%.%d]+°[NS] %-?[%.%d]+°[EW]') or '', '[ °]') if para == 'longitude' then result = {result[3], result[4]} end if not tonumber(result[1]) or not result[2] then mw.log('Malformed coordinates value') mw.logObject(para, 'para') mw.logObject(coord, 'coord') return error('Malformed coordinates value', 2) end return tonumber(result[1]) * hemisphereMultipliers[para][result[2]] end -- effectively make removeBlanks false for caption and maplink, and true for everything else -- if useWikidata is present but blank, convert it to false instead of nil -- p.top, p.bottom, and their callers need to use this function p.valueFunc(key, value) if value then value = mw.text.trim(value) end if value ~= '' or key == 'caption' or key == 'maplink' then return value elseif key == 'useWikidata' then return false end end local function getContainerImage(args, map) if args.AlternativeMap then return args.AlternativeMap elseif args.relief then local digits = mw.ustring.match(args.relief,'^[1-9][0-9]?$') or '1' -- image1 to image99 if map('image' .. digits) ~= '' then return map('image' .. digits) end end return map('image') end function p.top(frame, args, map) if not args then args = getArgs(frame, {frameOnly = true, valueFunc = p.valueFunc}) end if not map then map = p.getMapParams(args[1], frame) end local width local default_as_number = tonumber(mw.ustring.match(tostring(args.default_width),"%d*")) if not args.width then width = round((default_as_number or 240) * (tonumber(map('defaultscale')) or 1)) elseif mw.ustring.sub(args.width, -2) == 'px' then width = mw.ustring.sub(args.width, 1, -3) else width = args.width end local width_as_number = tonumber(mw.ustring.match(tostring(width),"%d*")) or 0; if width_as_number == 0 then -- check to see if width is junk. If it is, then use default calculation width = round((default_as_number or 240) * (tonumber(map('defaultscale')) or 1)) width_as_number = tonumber(mw.ustring.match(tostring(width),"%d*")) or 0; end if args.max_width ~= "" and args.max_width ~= nil then -- check to see if width bigger than max_width local max_as_number = tonumber(mw.ustring.match(args.max_width,"%d*")) or 0; if width_as_number>max_as_number and max_as_number>0 then width = args.max_width; end end local retval = frame:extensionTag{name = 'templatestyles', args = {src = 'Module:Location map/styles.css'}} if args.float == 'center' then retval = retval .. '<div class="center">' end if args.caption and args.caption ~= '' and args.border ~= 'infobox' then retval = retval .. '<div class="locmap noresize thumb ' if args.float == '"left"' or args.float == 'left' then retval = retval .. 'floatleft' elseif args.float == '"center"' or args.float == 'center' or args.float == '"none"' or args.float == 'none' then retval = retval .. 'tnone' else retval = retval .. 'floatright' end retval = retval .. '"><div class="thumbinner" style="width:' .. (width + 2) .. 'px' if args.border == 'none' then retval = retval .. ';border:none' elseif args.border then retval = retval .. ';border-color:' .. args.border end retval = retval .. '"><div style="position:relative;width:' .. width .. 'px' .. (args.border ~= 'none' and ';border:1px solid lightgray">' or '">') else retval = retval .. '<div class="locmap" style="width:' .. width .. 'px;' if args.float == '"left"' or args.float == 'left' then retval = retval .. 'float:left;clear:left' elseif args.float == '"center"' or args.float == 'center' then retval = retval .. 'float:none;clear:both;margin-left:auto;margin-right:auto' elseif args.float == '"none"' or args.float == 'none' then retval = retval .. 'float:none;clear:none' else retval = retval .. 'float:right;clear:right' end retval = retval .. '"><div style="width:' .. width .. 'px;padding:0"><div style="position:relative;width:' .. width .. 'px">' end local image = getContainerImage(args, map) local currentTitle = mw.title.getCurrentTitle() retval = string.format( '%s[[File:%s|%spx|%s%s|class=notpageimage noviewer]]', retval, image, width, args.alt or ((args.label or currentTitle.text) .. ' is located in ' .. map('name')), args.maplink and ('|link=' .. args.maplink) or '' ) if args.caption and args.caption ~= '' then if (currentTitle.namespace == 0) and mw.ustring.find(args.caption, '##') then retval = retval .. '[[Category:Pages using location map with a double number sign in the caption]]' end end if args.overlay_image then return retval .. '<div style="position:absolute;top:0;left:0">[[File:' .. args.overlay_image .. '|' .. width .. 'px|class=notpageimage noviewer]]</div>' else return retval end end function p.bottom(frame, args, map) if not args then args = getArgs(frame, {frameOnly = true, valueFunc = p.valueFunc}) end if not map then map = p.getMapParams(args[1], frame) end local retval = '</div>' local currentTitle = mw.title.getCurrentTitle() if not args.caption or args.border == 'infobox' then if args.border then retval = retval .. '<div style="padding-top:0.2em">' else retval = retval .. '<div style="font-size:91%;padding-top:3px">' end retval = retval .. (args.caption or (args.label or currentTitle.text) .. ' (' .. map('name') .. ')') .. '</div>' elseif args.caption ~= '' then -- This is not the pipe trick. We're creating a link with no text on purpose, so that CSS can give us a nice image retval = retval .. '<div class="thumbcaption"><div class="magnify">[[:File:' .. getContainerImage(args, map) .. '| ]]</div>' .. args.caption .. '</div>' end if args.switcherLabel then retval = retval .. '<span class="switcher-label" style="display:none">' .. args.switcherLabel .. '</span>' elseif args.autoSwitcherLabel then retval = retval .. '<span class="switcher-label" style="display:none">Show map of ' .. map('name') .. '</span>' end retval = retval .. '</div></div>' if args.caption_undefined then mw.log('Removed parameter caption_undefined used.') local parent = frame:getParent() if parent then mw.log('Parent is ' .. parent:getTitle()) end mw.logObject(args, 'args') if currentTitle.namespace == 0 then retval = retval .. '[[Category:Location maps with removed parameters|caption_undefined]]' end end if map('skew') ~= '' or map('lat_skew') ~= '' or map('crosses180') ~= '' or map('type') ~= '' then mw.log('Removed parameter used in map definition ' .. map()) if currentTitle.namespace == 0 then local key = (map('skew') ~= '' and 'skew' or '') .. (map('lat_skew') ~= '' and 'lat_skew' or '') .. (map('crosses180') ~= '' and 'crosses180' or '') .. (map('type') ~= '' and 'type' or '') retval = retval .. '[[Category:Location maps with removed parameters|' .. key .. ' ]]' end end if string.find(map('name'), '|', 1, true) then mw.log('Pipe used in name of map definition ' .. map()) if currentTitle.namespace == 0 then retval = retval .. '[[Category:Location maps with a name containing a pipe]]' end end if args.float == 'center' then retval = retval .. '</div>' end return retval end local function markOuterDiv(x, y, imageDiv, labelDiv, label_size) return mw.html.create('div') :addClass('od') :addClass('notheme') -- T236137 :cssText('top:' .. round(y, 3) .. '%;left:' .. round(x, 3) .. '%;font-size:' .. label_size .. '%') :node(imageDiv) :node(labelDiv) end local function markImageDiv(mark, marksize, label, link, alt, title) local builder = mw.html.create('div') :addClass('id') :cssText('left:-' .. round(marksize / 2) .. 'px;top:-' .. round(marksize / 2) .. 'px') :attr('title', title) if marksize ~= 0 then builder:wikitext(string.format( '[[File:%s|%dx%dpx|%s|link=%s%s|class=notpageimage noviewer]]', mark, marksize, marksize, label, link, alt and ('|alt=' .. alt) or '' )) end return builder end local function markLabelDiv(label, label_size, label_width, position, background, x, marksize) if tonumber(label_size) == 0 then return mw.html.create('div'):addClass('l0'):wikitext(label) end local builder = mw.html.create('div') :cssText('width:' .. label_width .. 'em') local distance = round(marksize / 2 + 1) if position == 'top' then -- specified top builder:addClass('pv'):cssText('bottom:' .. distance .. 'px;left:' .. (-label_width / 2) .. 'em') elseif position == 'bottom' then -- specified bottom builder:addClass('pv'):cssText('top:' .. distance .. 'px;left:' .. (-label_width / 2) .. 'em') elseif position == 'left' or (tonumber(x) > 70 and position ~= 'right') then -- specified left or autodetected to left builder:addClass('pl'):cssText('right:' .. distance .. 'px') else -- specified right or autodetected to right builder:addClass('pr'):cssText('left:' .. distance .. 'px') end builder = builder:tag('div') :wikitext(label) if background then builder:cssText('background-color:' .. background) end return builder:done() end local function getX(longitude, left, right) local width = (right - left) % 360 if width == 0 then width = 360 end local distanceFromLeft = (longitude - left) % 360 -- the distance needed past the map to the right equals distanceFromLeft - width. the distance needed past the map to the left equals 360 - distanceFromLeft. to minimize page stretching, go whichever way is shorter if distanceFromLeft - width / 2 >= 180 then distanceFromLeft = distanceFromLeft - 360 end return 100 * distanceFromLeft / width end local function getY(latitude, top, bottom) return 100 * (top - latitude) / (top - bottom) end function p.mark(frame, args, map) if not args then args = getArgs(frame, {wrappers = 'Template:Location map~'}) end local mapnames = {} if not map then if args[1] then map = {} for mapname in mw.text.gsplit(args[1], '#', true) do map[#map + 1] = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), frame) mapnames[#mapnames + 1] = mapname end if #map == 1 then map = map[1] end else map = p.getMapParams('World', frame) args[1] = 'World' end end if type(map) == 'table' then local outputs = {} local oldargs = args[1] for k,v in ipairs(map) do args[1] = mapnames[k] outputs[k] = tostring(p.mark(frame, args, v)) end args[1] = oldargs return table.concat(outputs, '#PlaceList#') .. '#PlaceList#' end local x, y, longitude, latitude longitude = decdeg(args.lon_deg, args.lon_min, args.lon_sec, args.lon_dir, args.long, 'longitude') latitude = decdeg(args.lat_deg, args.lat_min, args.lat_sec, args.lat_dir, args.lat, 'latitude') if args.excludefrom then -- If this mark is to be excluded from certain maps entirely (useful in the context of multiple maps) for exclusionmap in mw.text.gsplit(args.excludefrom, '#', true) do -- Check if this map is excluded. If so, return an empty string. if args[1] == exclusionmap then return '' end end end local builder = mw.html.create() local currentTitle = mw.title.getCurrentTitle() if args.coordinates then -- Temporarily removed to facilitate infobox conversion. See [[Wikipedia:Coordinates in infoboxes]] -- if longitude or latitude then -- error('Coordinates from [[Module:Coordinates]] and individual coordinates cannot both be provided') -- end longitude = coord2text('longitude', args.coordinates) latitude = coord2text('latitude', args.coordinates) elseif not longitude and not latitude and args.useWikidata then -- If they didn't provide either coordinate, try Wikidata. If they provided one but not the other, don't. local entity = mw.wikibase.getEntity() if entity and entity.claims and entity.claims.P625 and entity.claims.P625[1].mainsnak.snaktype == 'value' then local value = entity.claims.P625[1].mainsnak.datavalue.value longitude, latitude = value.longitude, value.latitude end if args.link and (currentTitle.namespace == 0) then builder:wikitext('[[Category:Location maps with linked markers with coordinates from Wikidata]]') end end if not longitude then error('No value was provided for longitude') elseif not latitude then error('No value was provided for latitude') end if currentTitle.namespace > 0 then if (not args.lon_deg) ~= (not args.lat_deg) then builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Degrees]]') elseif (not args.lon_min) ~= (not args.lat_min) then builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Minutes]]') elseif (not args.lon_sec) ~= (not args.lat_sec) then builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Seconds]]') elseif (not args.lon_dir) ~= (not args.lat_dir) then builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Hemisphere]]') elseif (not args.long) ~= (not args.lat) then builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Decimal]]') end end if ((tonumber(args.lat_deg) or 0) < 0) and ((tonumber(args.lat_min) or 0) ~= 0 or (tonumber(args.lat_sec) or 0) ~= 0 or (args.lat_dir and args.lat_dir ~='')) then builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]') end if ((tonumber(args.lon_deg) or 0) < 0) and ((tonumber(args.lon_min) or 0) ~= 0 or (tonumber(args.lon_sec) or 0) ~= 0 or (args.lon_dir and args.lon_dir ~= '')) then builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]') end if (((tonumber(args.lat_min) or 0) < 0) or ((tonumber(args.lat_sec) or 0) < 0)) then builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]') end if (((tonumber(args.lon_min) or 0) < 0) or ((tonumber(args.lon_sec) or 0) < 0)) then builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]') end if args.skew or args.lon_shift or args.markhigh then mw.log('Removed parameter used in invocation.') local parent = frame:getParent() if parent then mw.log('Parent is ' .. parent:getTitle()) end mw.logObject(args, 'args') if currentTitle.namespace == 0 then local key = (args.skew and 'skew' or '') .. (args.lon_shift and 'lon_shift' or '') .. (args.markhigh and 'markhigh' or '') builder:wikitext('[[Category:Location maps with removed parameters|' .. key ..' ]]') end end if map('x') ~= '' then x = tonumber(mw.ext.ParserFunctions.expr(map('x', { latitude, longitude }))) else x = tonumber(getX(longitude, map('left'), map('right'))) end if map('y') ~= '' then y = tonumber(mw.ext.ParserFunctions.expr(map('y', { latitude, longitude }))) else y = tonumber(getY(latitude, map('top'), map('bottom'))) end if (x < 0 or x > 100 or y < 0 or y > 100) and not args.outside then mw.log('Mark placed outside map boundaries without outside flag set. x = ' .. x .. ', y = ' .. y) local parent = frame:getParent() if parent then mw.log('Parent is ' .. parent:getTitle()) end mw.logObject(args, 'args') if currentTitle.namespace == 0 then local key = currentTitle.prefixedText builder:wikitext('[[Category:Location maps with marks outside map and outside parameter not set|' .. key .. ' ]]') end end local mark = args.mark or map('mark') if mark == '' then mark = 'Red pog.svg' end local marksize = tonumber(args.marksize) or tonumber(map('marksize')) or 8 local imageDiv = markImageDiv(mark, marksize, args.label or mw.title.getCurrentTitle().text, args.link or '', args.alt, args[2]) local label_size = args.label_size or 91 local labelDiv if args.label and args.position ~= 'none' then labelDiv = markLabelDiv(args.label, label_size, args.label_width or 6, args.position, args.background, x, marksize) end return builder:node(markOuterDiv(x, y, imageDiv, labelDiv, label_size)) end local function switcherSeparate(s) if s == nil then return {} end local retval = {} for i in string.gmatch(s .. '#', '([^#]*)#') do i = mw.text.trim(i) retval[#retval + 1] = (i ~= '' and i) end return retval end function p.infobox_pushpin_map(frame) --This function is designed to be invoked from an infobox template --* Some parameters (generally starting with "pushpin_") are meant to be exposed as parameters -- in the outer infobox, settable by editors --* Others are meant to be "hidden" (e.g., only set inside the infobox template code) -- First get the combined arguments from both parent and invocation frame local raw_args = getArgs(frame) --If no map is supplied, return. if not raw_args['pushpin_map'] then return end --If no coordinates supplied, return. if not raw_args['coordinates'] then return end -- Now get arguments from just the invocation frame local frame_args = getArgs(frame,{frameOnly=true}) -- parsed_args will have the resulting merged parameters local parsed_args = {} -- Parse the arguments parsed_args[1] = raw_args['pushpin_map'] parsed_args.float = frame_args.float or 'center' parsed_args.border = frame_args.border or 'infobox' parsed_args.default_width = frame_args.default_width parsed_args.max_width = frame_args.max_width parsed_args.coordinates = raw_args['coordinates'] parsed_args.caption = raw_args['pushpin_caption'] parsed_args.relief = raw_args['pushpin_relief'] parsed_args.label = raw_args['pushpin_label'] parsed_args.label_size = raw_args['pushpin_label_size'] parsed_args.position = raw_args['pushpin_label_position'] parsed_args.mark = raw_args['pushpin_mark'] parsed_args.marksize = raw_args['pushpin_mark_size'] parsed_args.alt = raw_args['pushpin_alt'] parsed_args.background = raw_args['pushpin_background'] parsed_args.width = raw_args['pushpin_map_size'] local map = {} local caption_list = {} for mapname in string.gmatch(parsed_args[1], '[^#]+') do map[#map + 1] = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), frame) end if parsed_args['caption'] then for caption in mw.text.gsplit(parsed_args['caption'], '##', true) do caption_list[#caption_list + 1] = caption end end if #map == 1 then map = map[1] if not parsed_args.caption then parsed_args.caption = 'Location within ' .. map('name') end end if type(map) == 'table' then mw.log('----') mw.logObject(map) if #caption_list > #map then error(string.format('%d captions were provided, but only %d maps were provided', #caption_list, #map)) elseif not parsed_args.caption then -- Set a default caption for each of the multiple maps for i=1, #map do caption_list[#caption_list + 1] = 'Location within '.. map[i]('name') end end local outputs = {} parsed_args.autoSwitcherLabel = true for k,v in ipairs(map) do parsed_args.caption = caption_list[k] outputs[k] = p.main(frame, parsed_args, v) end return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>' else return p.top(frame, parsed_args, map) .. tostring( p.mark(frame, parsed_args, map) ) .. p.bottom(frame, parsed_args, map) end end function p.main(frame, args, map) local caption_list = {} if not args then args = getArgs(frame, {wrappers = 'Template:Location map', valueFunc = p.valueFunc}) end if args.useWikidata == nil then args.useWikidata = true end if not map then if args[1] then map = {} for mapname in string.gmatch(args[1], '[^#]+') do map[#map + 1] = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), frame) end if args['caption'] then if args['caption'] == "" then while #caption_list < #map do caption_list[#caption_list + 1] = args['caption'] end else for caption in mw.text.gsplit(args['caption'], '##', true) do caption_list[#caption_list + 1] = caption end end end if #map == 1 then map = map[1] end else map = p.getMapParams('World', frame) end end if type(map) == 'table' then local altmaps = switcherSeparate(args.AlternativeMap) if #altmaps > #map then error(string.format('%d AlternativeMaps were provided, but only %d maps were provided', #altmaps, #map)) end local overlays = switcherSeparate(args.overlay_image) if #overlays > #map then error(string.format('%d overlay_images were provided, but only %d maps were provided', #overlays, #map)) end if #caption_list > #map then error(string.format('%d captions were provided, but only %d maps were provided', #caption_list, #map)) end local outputs = {} args.autoSwitcherLabel = true for k,v in ipairs(map) do args.AlternativeMap = altmaps[k] args.overlay_image = overlays[k] args.caption = caption_list[k] outputs[k] = p.main(frame, args, v) end return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>' else return p.top(frame, args, map) .. tostring( p.mark(frame, args, map) ) .. p.bottom(frame, args, map) end end return p cpcmh096iw3rqpvhf6kk0zdva3ovzd5 Template:Location map Khongo-Brazzaville 10 14817 126067 65565 2026-07-14T22:21:03Z Milenioscuro 6214 126067 wikitext text/x-wiki {{#switch:{{{1}}} | name = Khongo-Brazzaville | top = 3.736 | bottom = -5.76 | left = 10.29 | right = 19.126 | image = Congo adm location map.svg | image1 = Congo physical map.svg }}<noinclude> {{Location map/Info}} {{Documentation}} [[Category:Location map by country templates|IKhongo-Brazzaville]] </noinclude> skey6ef6mtma2aekrzk4ebb0lwnyohk Template:Location map Eritrea 10 17092 126070 69873 2026-07-15T04:23:03Z Milenioscuro 6214 126070 wikitext text/x-wiki {{#switch:{{{1}}} | name = I-Eritrea | top = 18.4 | bottom = 12.0 | left = 36.0 | right = 43.8 | image = Eritrea adm location map.svg | image1 = Eritrea relief location map.svg }}<noinclude> {{Location map/Info}} {{Documentation}} [[Category:Location map by country templates|I-Eritrea]] </noinclude> ryemt5vw77keske13z633txmei1r5wv Module:Infobox 828 18175 126076 72231 2026-07-15T08:39:31Z Fongcwele 16873 126076 Scribunto text/plain local p = {} local args = {} local origArgs = {} local root local empty_row_categories = {} local category_in_empty_row_pattern = '%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]' local has_rows = false local yesno = require("Module:Yesno") local lists = { plainlist_t = { patterns = { '^plainlist$', '%splainlist$', '^plainlist%s', '%splainlist%s' }, found = false, styles = 'Plainlist/styles.css' }, hlist_t = { patterns = { '^hlist$', '%shlist$', '^hlist%s', '%shlist%s' }, found = false, styles = 'Hlist/styles.css' } } local function has_list_class(args_to_check) for _, list in pairs(lists) do if not list.found then for _, arg in pairs(args_to_check) do for _, pattern in ipairs(list.patterns) do if mw.ustring.find(arg or '', pattern) then list.found = true break end end if list.found then break end end end end end local function isUntitledChildBox(sval) return sval and ( sval:match( '^%s*<%s*[Tt][Rr]' ) or sval:match( '^%s*\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127%s*<%s*[Tt][Rr]' ) ) end local function fixChildBoxes(sval, tt) local function notempty( s ) return s and s:match( '%S' ) end if notempty(sval) then local marker = '<span class=special_infobox_marker>' local s = sval -- start moving templatestyles and categories inside of table rows local slast = '' while slast ~= s do slast = s s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%])', '%2%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)', '%2%1') end -- end moving templatestyles and categories inside of table rows s = mw.ustring.gsub(s, '(<%s*[Tt][Rr])', marker .. '%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>)', '%1' .. marker) if s:match(marker) then s = mw.ustring.gsub(s, marker .. '%s*' .. marker, '') s = mw.ustring.gsub(s, '([\r\n]|-[^\r\n]*[\r\n])%s*' .. marker, '%1') s = mw.ustring.gsub(s, marker .. '%s*([\r\n]|-)', '%1') s = mw.ustring.gsub(s, '(</[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*>%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '(<%s*[Tt][Aa][Bb][Ll][Ee][^<>]*>%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '^(%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '([\r\n]%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1') s = mw.ustring.gsub(s, marker .. '(%s*</[Tt][Aa][Bb][Ll][Ee]%s*>)', '%1') s = mw.ustring.gsub(s, marker .. '(%s*\n|%})', '%1') end if s:match(marker) then local subcells = mw.text.split(s, marker) s = '' for k = 1, #subcells do if k == 1 then s = s .. subcells[k] .. '</' .. tt .. '></tr>' elseif k == #subcells then local rowstyle = ' style="display:none"' if notempty(subcells[k]) then rowstyle = '' end s = s .. '<tr' .. rowstyle ..'><' .. tt .. ' colspan=2>\n' .. subcells[k] elseif notempty(subcells[k]) then if (k % 2) == 0 then s = s .. subcells[k] else s = s .. '<tr><' .. tt .. ' colspan=2>\n' .. subcells[k] .. '</' .. tt .. '></tr>' end end end end -- the next two lines add a newline at the end of lists for the PHP parser -- [[Special:Diff/849054481]] -- remove when [[:phab:T191516]] is fixed or OBE s = mw.ustring.gsub(s, '([\r\n][%*#;:][^\r\n]*)$', '%1\n') s = mw.ustring.gsub(s, '^([%*#;:][^\r\n]*)$', '%1\n') s = mw.ustring.gsub(s, '^([%*#;:])', '\n%1') s = mw.ustring.gsub(s, '^(%{%|)', '\n%1') return s else return sval end end -- Cleans empty tables local function cleanInfobox() root = tostring(root) if has_rows == false then root = mw.ustring.gsub(root, '<table[^<>]*>%s*</table>', '') end end -- Returns the union of the values of two tables, as a sequence. local function union(t1, t2) local vals = {} for k, v in pairs(t1) do vals[v] = true end for k, v in pairs(t2) do vals[v] = true end local ret = {} for k, v in pairs(vals) do table.insert(ret, k) end return ret end -- Returns a table containing the numbers of the arguments that exist -- for the specified prefix. For example, if the prefix was 'data', and -- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}. local function getArgNums(prefix) local nums = {} for k, v in pairs(args) do local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$') if num then table.insert(nums, tonumber(num)) end end table.sort(nums) return nums end -- Adds a row to the infobox, with either a header cell -- or a label/data cell combination. local function addRow(rowArgs) if rowArgs.header and rowArgs.header ~= '_BLANK_' then has_rows = true has_list_class({ rowArgs.rowclass, rowArgs.class, args.headerclass }) root :tag('tr') :addClass(rowArgs.rowclass) :addClass( isUntitledChildBox( rowArgs.header ) and 'infobox-hiddenrow' or nil ) :cssText(rowArgs.rowstyle) :tag('th') :attr('colspan', '2') :addClass('infobox-header') :addClass(rowArgs.class) :addClass(args.headerclass) -- @deprecated next; target .infobox-<name> .infobox-header :cssText(args.headerstyle) :cssText(rowArgs.rowcellstyle) :wikitext(fixChildBoxes(rowArgs.header, 'th')) if rowArgs.data and not yesno(args.decat) then root:wikitext( '[[Category:Pages using infobox templates with ignored data cells]]' ) end elseif rowArgs.data and rowArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then has_rows = true has_list_class({ rowArgs.rowclass, rowArgs.class }) local row = root:tag('tr') row:addClass(rowArgs.rowclass) row:cssText(rowArgs.rowstyle) if rowArgs.label then row :tag('th') :attr('scope', 'row') :addClass('infobox-label') -- @deprecated next; target .infobox-<name> .infobox-label :cssText(args.labelstyle) :cssText(rowArgs.rowcellstyle) :wikitext(rowArgs.label) :done() else row:addClass( isUntitledChildBox( rowArgs.data ) and 'infobox-hiddenrow' or nil ) end local dataCell = row:tag('td') dataCell :attr('colspan', not rowArgs.label and '2' or nil) :addClass(not rowArgs.label and 'infobox-full-data' or 'infobox-data') :addClass(rowArgs.class) -- @deprecated next; target .infobox-<name> .infobox(-full)-data :cssText(rowArgs.datastyle) :cssText(rowArgs.rowcellstyle) :wikitext(fixChildBoxes(rowArgs.data, 'td')) else table.insert(empty_row_categories, rowArgs.data or '') end end local function renderTitle() if not args.title then return end has_rows = true has_list_class({args.titleclass}) root :tag('caption') :addClass('infobox-title') :addClass(args.titleclass) -- @deprecated next; target .infobox-<name> .infobox-title :cssText(args.titlestyle) :wikitext(args.title) end local function renderAboveRow() if not args.above then return end has_rows = true has_list_class({ args.aboveclass }) root :tag('tr') :addClass( isUntitledChildBox( args.above ) and 'infobox-hiddenrow' or nil ) :tag('th') :attr('colspan', '2') :addClass('infobox-above') :addClass(args.aboveclass) -- @deprecated next; target .infobox-<name> .infobox-above :cssText(args.abovestyle) :wikitext(fixChildBoxes(args.above,'th')) end local function renderBelowRow() if not args.below then return end has_rows = true has_list_class({ args.belowclass }) root :tag('tr') :addClass( isUntitledChildBox( args.below ) and 'infobox-hiddenrow' or nil ) :tag('td') :attr('colspan', '2') :addClass('infobox-below') :addClass(args.belowclass) -- @deprecated next; target .infobox-<name> .infobox-below :cssText(args.belowstyle) :wikitext(fixChildBoxes(args.below,'td')) end local function addSubheaderRow(subheaderArgs) if subheaderArgs.data and subheaderArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then has_rows = true has_list_class({ subheaderArgs.rowclass, subheaderArgs.class }) local row = root:tag('tr') row:addClass(subheaderArgs.rowclass) row:addClass( isUntitledChildBox( subheaderArgs.data ) and 'infobox-hiddenrow' or nil ) local dataCell = row:tag('td') dataCell :attr('colspan', '2') :addClass('infobox-subheader') :addClass(subheaderArgs.class) :cssText(subheaderArgs.datastyle) :cssText(subheaderArgs.rowcellstyle) :wikitext(fixChildBoxes(subheaderArgs.data, 'td')) else table.insert(empty_row_categories, subheaderArgs.data or '') end end local function renderSubheaders() if args.subheader then args.subheader1 = args.subheader end if args.subheaderrowclass then args.subheaderrowclass1 = args.subheaderrowclass end local subheadernums = getArgNums('subheader') for k, num in ipairs(subheadernums) do addSubheaderRow({ data = args['subheader' .. tostring(num)], -- @deprecated next; target .infobox-<name> .infobox-subheader datastyle = args.subheaderstyle, rowcellstyle = args['subheaderstyle' .. tostring(num)], class = args.subheaderclass, rowclass = args['subheaderrowclass' .. tostring(num)] }) end end local function addImageRow(imageArgs) if imageArgs.data and imageArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then has_rows = true has_list_class({ imageArgs.rowclass, imageArgs.class }) local row = root:tag('tr') row:addClass(imageArgs.rowclass) row:addClass( isUntitledChildBox( imageArgs.data ) and 'infobox-hiddenrow' or nil ) local dataCell = row:tag('td') dataCell :attr('colspan', '2') :addClass('infobox-image') :addClass(imageArgs.class) :cssText(imageArgs.datastyle) :wikitext(fixChildBoxes(imageArgs.data, 'td')) else table.insert(empty_row_categories, imageArgs.data or '') end end local function renderImages() if args.image then args.image1 = args.image end if args.caption then args.caption1 = args.caption end local imagenums = getArgNums('image') for k, num in ipairs(imagenums) do local caption = args['caption' .. tostring(num)] local data = mw.html.create():wikitext(args['image' .. tostring(num)]) if caption then data :tag('div') :addClass('infobox-caption') -- @deprecated next; target .infobox-<name> .infobox-caption :cssText(args.captionstyle) :wikitext(caption) end addImageRow({ data = tostring(data), -- @deprecated next; target .infobox-<name> .infobox-image datastyle = args.imagestyle, class = args.imageclass, rowclass = args['imagerowclass' .. tostring(num)] }) end end -- When autoheaders are turned on, preprocesses the rows local function preprocessRows() if not args.autoheaders then return end local rownums = union(getArgNums('header'), getArgNums('data')) table.sort(rownums) local lastheader for k, num in ipairs(rownums) do if args['header' .. tostring(num)] then if lastheader then args['header' .. tostring(lastheader)] = nil end lastheader = num elseif args['data' .. tostring(num)] and args['data' .. tostring(num)]:gsub( category_in_empty_row_pattern, '' ):match('^%S') then local data = args['data' .. tostring(num)] if data:gsub(category_in_empty_row_pattern, ''):match('%S') then lastheader = nil end end end if lastheader then args['header' .. tostring(lastheader)] = nil end end -- Gets the union of the header and data argument numbers, -- and renders them all in order local function renderRows() local rownums = union(getArgNums('header'), getArgNums('data')) table.sort(rownums) for k, num in ipairs(rownums) do addRow({ header = args['header' .. tostring(num)], label = args['label' .. tostring(num)], data = args['data' .. tostring(num)], datastyle = args.datastyle, class = args['class' .. tostring(num)], rowclass = args['rowclass' .. tostring(num)], -- @deprecated next; target .infobox-<name> rowclass rowstyle = args['rowstyle' .. tostring(num)], rowcellstyle = args['rowcellstyle' .. tostring(num)] }) end end local function renderNavBar() if not args.name then return end has_rows = true root :tag('tr') :tag('td') :attr('colspan', '2') :addClass('infobox-navbar') :wikitext(require('Module:Navbar')._navbar{ args.name, mini = 1, }) end local function renderItalicTitle() local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title']) if italicTitle == '' or italicTitle == 'force' or italicTitle == 'yes' then root:wikitext(require('Module:Italic title')._main({})) end end -- Categories in otherwise empty rows are collected in empty_row_categories. -- This function adds them to the module output. It is not affected by -- args.decat because this module should not prevent module-external categories -- from rendering. local function renderEmptyRowCategories() for _, s in ipairs(empty_row_categories) do root:wikitext(s) end end -- Render tracking categories. args.decat == turns off tracking categories. local function renderTrackingCategories() if yesno(args.decat) then return end if args.child == 'yes' then if args.title then root:wikitext( '[[Category:Pages using embedded infobox templates with the title parameter]]' ) end elseif #(getArgNums('data')) == 0 and mw.title.getCurrentTitle().namespace == 0 then root:wikitext('[[Category:Articles using infobox templates with no data rows]]') end end --[=[ Loads the templatestyles for the infobox. TODO: FINISH loading base templatestyles here rather than in MediaWiki:Common.css. There are 4-5000 pages with 'raw' infobox tables. See [[Mediawiki_talk:Common.css/to_do#Infobox]] and/or come help :). When we do this we should clean up the inline CSS below too. Will have to do some bizarre conversion category like with sidebar. ]=] local function loadTemplateStyles() local frame = mw.getCurrentFrame() local hlist_templatestyles = '' if lists.hlist_t.found then hlist_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = lists.hlist_t.styles } } end local plainlist_templatestyles = '' if lists.plainlist_t.found then plainlist_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = lists.plainlist_t.styles } } end -- See function description local base_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = 'Module:Infobox/styles.css' } } local templatestyles = '' if args['templatestyles'] then templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['templatestyles'] } } end local child_templatestyles = '' if args['child templatestyles'] then child_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['child templatestyles'] } } end local grandchild_templatestyles = '' if args['grandchild templatestyles'] then grandchild_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['grandchild templatestyles'] } } end return table.concat({ -- hlist -> plainlist -> base is best-effort to preserve old Common.css ordering. -- this ordering is not a guarantee because the rows of interest invoking -- each class may not be on a specific page hlist_templatestyles, plainlist_templatestyles, base_templatestyles, templatestyles, child_templatestyles, grandchild_templatestyles }) end -- common functions between the child and non child cases local function structure_infobox_common() renderSubheaders() renderImages() preprocessRows() renderRows() renderBelowRow() renderNavBar() renderItalicTitle() renderEmptyRowCategories() renderTrackingCategories() cleanInfobox() end -- Specify the overall layout of the infobox, with special settings if the -- infobox is used as a 'child' inside another infobox. local function _infobox() if args.child ~= 'yes' then root = mw.html.create('table') root :addClass(args.subbox == 'yes' and 'infobox-subbox' or 'infobox') :addClass(args.bodyclass) -- @deprecated next; target .infobox-<name> :cssText(args.bodystyle) has_list_class({ args.bodyclass }) renderTitle() renderAboveRow() else root = mw.html.create() root :wikitext(args.title) end structure_infobox_common() return loadTemplateStyles() .. root end -- If the argument exists and isn't blank, add it to the argument table. -- Blank arguments are treated as nil to match the behaviour of ParserFunctions. local function preprocessSingleArg(argName) if origArgs[argName] and origArgs[argName] ~= '' then args[argName] = origArgs[argName] end end -- Assign the parameters with the given prefixes to the args table, in order, in -- batches of the step size specified. This is to prevent references etc. from -- appearing in the wrong order. The prefixTable should be an array containing -- tables, each of which has two possible fields, a "prefix" string and a -- "depend" table. The function always parses parameters containing the "prefix" -- string, but only parses parameters in the "depend" table if the prefix -- parameter is present and non-blank. local function preprocessArgs(prefixTable, step) if type(prefixTable) ~= 'table' then error("Non-table value detected for the prefix table", 2) end if type(step) ~= 'number' then error("Invalid step value detected", 2) end -- Get arguments without a number suffix, and check for bad input. for i,v in ipairs(prefixTable) do if type(v) ~= 'table' or type(v.prefix) ~= "string" or (v.depend and type(v.depend) ~= 'table') then error('Invalid input detected to preprocessArgs prefix table', 2) end preprocessSingleArg(v.prefix) -- Only parse the depend parameter if the prefix parameter is present -- and not blank. if args[v.prefix] and v.depend then for j, dependValue in ipairs(v.depend) do if type(dependValue) ~= 'string' then error('Invalid "depend" parameter value detected in preprocessArgs') end preprocessSingleArg(dependValue) end end end -- Get arguments with number suffixes. local a = 1 -- Counter variable. local moreArgumentsExist = true while moreArgumentsExist == true do moreArgumentsExist = false for i = a, a + step - 1 do for j,v in ipairs(prefixTable) do local prefixArgName = v.prefix .. tostring(i) if origArgs[prefixArgName] then -- Do another loop if any arguments are found, even blank ones. moreArgumentsExist = true preprocessSingleArg(prefixArgName) end -- Process the depend table if the prefix argument is present -- and not blank, or we are processing "prefix1" and "prefix" is -- present and not blank, and if the depend table is present. if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then for j,dependValue in ipairs(v.depend) do local dependArgName = dependValue .. tostring(i) preprocessSingleArg(dependArgName) end end end end a = a + step end end -- Parse the data parameters in the same order that the old {{infobox}} did, so -- that references etc. will display in the expected places. Parameters that -- depend on another parameter are only processed if that parameter is present, -- to avoid phantom references appearing in article reference lists. local function parseDataParameters() preprocessSingleArg('autoheaders') preprocessSingleArg('child') preprocessSingleArg('bodyclass') preprocessSingleArg('subbox') preprocessSingleArg('bodystyle') preprocessSingleArg('title') preprocessSingleArg('titleclass') preprocessSingleArg('titlestyle') preprocessSingleArg('above') preprocessSingleArg('aboveclass') preprocessSingleArg('abovestyle') preprocessArgs({ {prefix = 'subheader', depend = {'subheaderstyle', 'subheaderrowclass'}} }, 10) preprocessSingleArg('subheaderstyle') preprocessSingleArg('subheaderclass') preprocessArgs({ {prefix = 'image', depend = {'caption', 'imagerowclass'}} }, 10) preprocessSingleArg('captionstyle') preprocessSingleArg('imagestyle') preprocessSingleArg('imageclass') preprocessArgs({ {prefix = 'header'}, {prefix = 'data', depend = {'label'}}, {prefix = 'rowclass'}, {prefix = 'rowstyle'}, {prefix = 'rowcellstyle'}, {prefix = 'class'} }, 50) preprocessSingleArg('headerclass') preprocessSingleArg('headerstyle') preprocessSingleArg('labelstyle') preprocessSingleArg('datastyle') preprocessSingleArg('below') preprocessSingleArg('belowclass') preprocessSingleArg('belowstyle') preprocessSingleArg('name') -- different behaviour for italics if blank or absent args['italic title'] = origArgs['italic title'] preprocessSingleArg('decat') preprocessSingleArg('templatestyles') preprocessSingleArg('child templatestyles') preprocessSingleArg('grandchild templatestyles') end -- If called via #invoke, use the args passed into the invoking template. -- Otherwise, for testing purposes, assume args are being passed directly in. function p.infobox(frame) if frame == mw.getCurrentFrame() then origArgs = frame:getParent().args else origArgs = frame end parseDataParameters() return _infobox() end -- For calling via #invoke within a template function p.infoboxTemplate(frame) origArgs = {} for k,v in pairs(frame.args) do origArgs[k] = mw.text.trim(v) end parseDataParameters() return _infobox() end return p kueb5p6xeoq6x7bxu2zyyl7pmxgesrs Impango yasePhalaphala yangowezi-2020 0 30687 126082 104052 2026-07-15T10:26:42Z Fongcwele 16873 126082 wikitext text/x-wiki {{Infobox event | image = | date = 9 February 2020 | location = Epulazini lasePhala Phala lezinyamazane | motive = Ukuphangwa | outcome = Kwebiwa isamba semali engaziwa }} '''Ukuphangwa ePhalaPhala ngowezi-2020''' noma '''impango yasePhalaphala yowezi-2020''' kwaba ukugqekezwa kwepulazi elisisulu likaMengameli waseNingizimu Afrika [[Cyril Ramaphosa|uCyril Ramaphosa]] iPhalaPhala ngaseBela [[IBela-Bela|-Bela]], [[ILimpopo|eLimpopo]], [[IRiphabhuliki yaseNingizimu Afrika|eNingizimu Afrika]].<ref>{{Cite web |last=Sadike |first=Mashudu |title=Cyril Ramaphosa denies involvement in crime after R60m stolen from his Phala Phala farm |url=https://www.iol.co.za/pretoria-news/news/cyril-ramaphosa-denies-involvement-in-crime-after-r60m-stolen-from-his-phala-phala-farm-12a87167-b949-47c1-ac32-34f82d475d1c |access-date=2022-06-08 |website=www.iol.co.za |language=en}}</ref><ref>{{Cite web |last=Davis |first=Rebecca |date=2022-06-07 |title=SPIES R US EXPLAINER: Unpacking the Cyril Ramaphosa home robbery story, and why you should care |url=https://www.dailymaverick.co.za/article/2022-06-08-unpacking-the-cyril-ramaphosa-home-robbery-story-and-why-you-should-care/ |access-date=2022-06-08 |website=Daily Maverick |language=en}}</ref><ref>{{Cite web |last=Ndenze |first=Babalo |title=Cele: Presidential Protection Unit head knew about robbery at Ramaphosa farm |url=https://ewn.co.za/2022/06/07/cele-presidential-protection-unit-head-knew-about-robbery-at-ramaphosa-farm |access-date=2022-06-08 |website=ewn.co.za |language=en-US}}</ref> Lesigameko senzeka mhla ziyi-9 kuNhlolanja 2020 lapho okwebiwa khona isamba semali esingaziwa. UMnumzane Arthur Fraser, owangumphathi-jikelele womnyango wokuhlumeleliswa kwesimilo namajele wathi kwebiwa imali engamadola waseMelika ayizigidi ezi-4 (izigidi ezingama-60 zamarandi aseNingizimu afrika) eyayingabikiwe ukuthi ikuleli.<ref>{{Cite web |title=Hawks take over the probe into the burglary at Ramaphosa's game farm |url=https://www.businesslive.co.za/amp/bd/national/2022-06-07-hawks-take-over-the-probe-into-the-burglary-at-ramaphosas-game-farm/ |access-date=2022-06-08 |website=BusinessLIVE |language=en-ZA}}</ref><ref>{{Cite web |date=2022-06-07 |title=Ramaphosa to appear before ANC after farm robbery |url=https://www.moneyweb.co.za/news/south-africa/ramaphosa-to-appear-before-anc-after-farm-robbery/ |access-date=2022-06-08 |website=Moneyweb |language=en}}</ref><ref>{{Cite web |title=Ramaphosa Farm Theft. Give police space to investigate: Cele |url=https://www.enca.com/news/ramaphosa-farm-theft-give-police-space-investigate-cele |access-date=2022-06-08 |website=www.enca.com |language=en |archive-date=2022-06-17 |archive-url=https://web.archive.org/web/20220617003022/https://www.enca.com/news/ramaphosa-farm-theft-give-police-space-investigate-cele |dead-url=yes }}</ref> Kodwa, imibiko eyalandela yakhomba ukuthi imali eyebiwe kwakungamadola ayisamba esingama- $580 000<ref>[https://www.news24.com/news24/investigations/phala-phala-mystery-sudanese-businessman-paid-580-000-to-ramaphosas-farmhand-45-days-before-theft-20220906-2]</ref> URamaphosa waphika wama- ngekhanda,<ref name="guardianLegalAction">[https://www.theguardian.com/world/2022/dec/03/south-africa-president-to-mount-legal-action-in-face-of-impeachment-threat-cyril-ramaphosa]</ref> futhi wathi uzodlulisa umbiko wethimba eliqokwe iphalemende ukuze ubuyekezwe ngokomthetho. Lombiko wakhululwa ngowezi-2022 futhi wamsola "ngokungaziphathi ngendlela efanele isikhundla sakhe." <ref name="guardianLegalAction"/> == uMongo == Mhla zilu-1 kuNhlaba 2022, lowo oyengumphathi-jikelele wezokuVikelwa komBuso, uArthur Fraser,<ref>{{Cite web |date=2022-06-15 |title=Furore over a theft bedevils the ANC |url=https://www.moneyweb.co.za/news/south-africa/furore-over-a-theft-bedevils-the-anc/ |access-date=2022-06-15 |website=Moneyweb |language=en}}</ref> wafaka isimangalo secala ngokumelene no-Cyril Ramaphosa ngokuphazamisa ingalo yomthetho ngokuthi ephule UMthetho wokuvinjwa kobuGebengu obuhleliwe wangowe-1998, kanye nomthetho wokuvinjwa kwezenzo zokukhwabanisa wongowezi-2004.<ref name="Daniels">{{Cite web |last=Daniels |first=Nicola |title=Sars, Reserve Bank mum on Ramaphosa's farmgate |url=https://www.iol.co.za/capetimes/news/sars-reserve-bank-mum-on-ramaphosas-farmgate-f16ce460-5b8a-4e70-9c71-8d5706f757c4 |access-date=2022-06-15 |website=www.iol.co.za |language=en}}</ref> Isimangalo sika-Fraser saveza ukuthi isamba samadola ayizigidi ezi-4 (ezilingana namarandi ayizigidi ezingama-62)<ref name=":1">{{Cite web |last=Haffajee |first=Ferial |date=2022-06-02 |title=SPIES R US: Why Ramaphosa (apparently) kept mum about multimillion-dollar robbery at his farm |url=https://www.dailymaverick.co.za/article/2022-06-02-why-ramaphosa-apparently-kept-mum-about-multimillion-dollar-robbery-at-his-farm/ |access-date=2022-06-15 |website=Daily Maverick |language=en}}</ref> eyayigxishwe ngaphakathi kosofa zebiwa emzini ka-Ramaphosa osepulazini elisePhalaPhala elikumkhandlu wesifunda i-Waterberg ,<ref>{{Cite web |last=Gerber |first=Jan |title=ANC does not want to 'interfere' with investigations into 'Rama-Phala Phala' |url=https://www.news24.com/news24/southafrica/politics/anc-does-not-want-to-interfere-with-investigations-into-rama-phala-phala-20220615-2 |access-date=2022-06-15 |website=News24 |language=en-US}}</ref> “cishe" ngomhla ziyi-9 kuNhlolanja 2020.<ref name=":0">{{Cite web |last=O’Regan |first=Victoria |date=2022-06-12 |title=SPIES R US: Ramaphosa's Farmgate scandal – a timeline of what we know (and don't know) so far |url=https://www.dailymaverick.co.za/article/2022-06-12-ramaphosas-farmgate-scandal-a-timeline-of-what-we-know-and-dont-know-so-far/ |access-date=2022-06-15 |website=Daily Maverick |language=en}}</ref> Saqhubeka saveza nokuthi [[Umongameli waseNingizimu Afrika|umengameli]] akawabikelanga amaphoyisa ngalobulelesi nokuthi ukuba khona kwesamba esikhulu salenkece yangaphandle kwakungabikiwe kwibhangengodla ngokulandela umthetho. Isimangalo sikaFraser saveza nokuthi abasolwa abahileleke ekwebeni bathunjwa ukuze bayohlonywa ngemibuzo.<ref name="Daniels" /> epulazini<ref>{{Cite web |last=Bhengu |first=Cebelihle |date=15 June 2022 |title='We have sides hidden under a mattress. It's a steal' — Nando's throws jab at Ramaphosa's 'farmgate' scandal |url=https://www.timeslive.co.za/news/south-africa/2022-06-15-we-have-sides-hidden-under-a-mattress-its-a-steal-nandos-throws-jab-at-ramaphosas-farmgate-scandal/ |access-date=2022-06-15 |website=TimesLIVE |language=en-ZA}}</ref> futhi bakhokhelwa ukuba bangasithi vo! nakancane kunoma ubani lesehlakalo.<ref name=":1" /> Abasemagunyeni eNamibiya bahlonza abasolwa ababandakanyeka ekwebeni lungakaziwa loludaba kodwa baluthalalisa emva kwezicelo zezingede zokuvikela zaseNingizimu afrika..<ref>{{Cite web |title=Ramaphosa 'Farmgate': What we know, what we don't know and why you should care |url=https://www.msn.com/en-za/news/other/ramaphosa-farmgate-what-we-know-what-we-don-t-know-and-why-you-should-care/ar-AAYjlfL |access-date=2022-06-15 |website=MSN |language=en-ZA}}</ref> Imithombo eseduze nomengameli yona yaveza ukuthi nakuba ukwebiwa kwemali kwenzeka epulazini, isamba semali esibandakanyekayo sasiphansi kunaleso esivezwa uFraser nokuthi yonke leyomali yazuzwa ngokusemthethweni kolundela ukudayiswa kwezinkomo zama-ankole.<ref name=":1" /> URamaposa wathi akasibikanga lesigameko sokweba ukuze agweme ukuba imbangela yokuyaluza emphakathini wabalimi kodwa kunalokho kwaba ngcono ukuba abophiko labalindi bakamongameli kube yibo abaphenya lesehlakalo sokweba.<ref name=":1" /> == Ukugqekezwa okusolwayo kwangowezi-2020 == Kusuka ezinsolweni nasemacaleni avulwa ngu-Arthur Fraser, nazi izehlakalo ezenzeka: umsebenzi wasendlini oqashwe epulazini ePhala Phala wavubukula inkece yangaphandle kwezwe ithukuswe empahleni yasendlini.<ref name="ST01">{{Cite news |last1=Jika |first1=Thanduxolo |last2=Makinana |first2=Andisiwe |last3=Nombembe |first3=Philani |date=5 June 2022 |title=Did the president break the law? |pages=1–5 |work=Sunday Times (South Africa)}}</ref> Lomsebenzi ube hlala ngaphandle kwepulazi emzini wase-Cyferskyl.<ref name=ST01/> Kunesibalo esikhulu sabantu baseNamibiya esihlala kulomuzi futhi badabuka kulabo ababelwa besohlangothini loMbutho wezokuVikela wasNingizimu Afrika ngesikhathi seMpi yaseNingizimu Afrika yaseMgceleni bagcina sebehlala kuleli ngemuva konyaka we-1989.<ref name=ST01/> Waxoxa ngakutholile nabanye bomakhelwane bakhe abamxhumanisa nabanye abantu baseNamibiya abahlala [[IKapa|eKapa]], abangamsiza.<ref name=ST01/> Ukugqekezwa kwenzeka ngobusuku bukaNhlolanja 9 2020, ngehora le-10. U-Fraser uthi sonke lesenzakalo saqoshwa uhlelo lwe-CCTV.<ref name=ST01/> Abagqekezi ekuqaleni bagqekeza bangena egumbini okungelona futhi kwadingeka basizwe ngomsebenzi wasendlini ukuba hate egumbini elifanele.<ref name=ST01/> Emva kokugqekezwa, khona babalekela eKapa.<ref name=ST01/> Lapho kutholakala ukuthi kugqekeziwe, inhloko yophiko lwezoVikelwa kukaMongameli uJenene-nduna u-Wally Rhoode kuthiwa wabandkanyeka, eyalezwe nguMengameli Cyril Ramaphosa ukuba aphenye.<ref name=ST01/> Ekugcineni abasolwa batholwa eKapa ngemuva kokuhlonywa ngemibuzo lomsebenzi wasendlini nasekuhlolweni kukamakhalekhikhini wakhe ukuba awunayo yini imiyalezo nabagqekezi.<ref name=ST01/> eKapa, abagqekezi bashintsha inkece yangaphandle kwaba ngamaRandi waseNingizimu Afrika endaweni yokuNana imali yamaShayina.<ref>{{Cite web |last=Daniels |first=Nicola |title=Ramaphosa's farmgate loot splurged in Cape Town |url=https://www.iol.co.za/capetimes/news/ramaphosas-farmgate-loot-splurged-in-cape-town-07c23aea-e100-4989-b7de-7346cfb69e21 |access-date=2022-06-18 |website=www.iol.co.za |language=en}}</ref> U-Fraser uthi abasolwa bahlonywa imibuzo, futhi imali eyayisele yabuyiswa, futhi abagqekezi bakhokhelwa ngemali eyizi-R150,000.<ref name=ST01/> Ngokungenani oyedwa wabagqekezi wahlonywa imibuzo ngo-Rhoode ekwelaseNamibiya.<ref name=ST01/> Lokhu kwenzeka ngenxa yokungenelela kukaRamaphosa kanye noMengameli waseNamibiya uHage Geingob. Umsebenzi wasendlini yena kusolwa ukuthi waxoshwa khona kamuva waqashwa futhi wayesekhokhelwa imali engamadola angu-$150,000. kvn56n2kh2cjhdjcz41gqxd1bk9ftn2 126083 126082 2026-07-15T10:26:44Z KiranBOT 23584 removed AMP tracking from URLs ([[:m:User:KiranBOT/AMP|details]]) ([[User talk:Usernamekiran|report error]]) v2.2.9s 126083 wikitext text/x-wiki {{Infobox event | image = | date = 9 February 2020 | location = Epulazini lasePhala Phala lezinyamazane | motive = Ukuphangwa | outcome = Kwebiwa isamba semali engaziwa }} '''Ukuphangwa ePhalaPhala ngowezi-2020''' noma '''impango yasePhalaphala yowezi-2020''' kwaba ukugqekezwa kwepulazi elisisulu likaMengameli waseNingizimu Afrika [[Cyril Ramaphosa|uCyril Ramaphosa]] iPhalaPhala ngaseBela [[IBela-Bela|-Bela]], [[ILimpopo|eLimpopo]], [[IRiphabhuliki yaseNingizimu Afrika|eNingizimu Afrika]].<ref>{{Cite web |last=Sadike |first=Mashudu |title=Cyril Ramaphosa denies involvement in crime after R60m stolen from his Phala Phala farm |url=https://www.iol.co.za/pretoria-news/news/cyril-ramaphosa-denies-involvement-in-crime-after-r60m-stolen-from-his-phala-phala-farm-12a87167-b949-47c1-ac32-34f82d475d1c |access-date=2022-06-08 |website=www.iol.co.za |language=en}}</ref><ref>{{Cite web |last=Davis |first=Rebecca |date=2022-06-07 |title=SPIES R US EXPLAINER: Unpacking the Cyril Ramaphosa home robbery story, and why you should care |url=https://www.dailymaverick.co.za/article/2022-06-08-unpacking-the-cyril-ramaphosa-home-robbery-story-and-why-you-should-care/ |access-date=2022-06-08 |website=Daily Maverick |language=en}}</ref><ref>{{Cite web |last=Ndenze |first=Babalo |title=Cele: Presidential Protection Unit head knew about robbery at Ramaphosa farm |url=https://ewn.co.za/2022/06/07/cele-presidential-protection-unit-head-knew-about-robbery-at-ramaphosa-farm |access-date=2022-06-08 |website=ewn.co.za |language=en-US}}</ref> Lesigameko senzeka mhla ziyi-9 kuNhlolanja 2020 lapho okwebiwa khona isamba semali esingaziwa. UMnumzane Arthur Fraser, owangumphathi-jikelele womnyango wokuhlumeleliswa kwesimilo namajele wathi kwebiwa imali engamadola waseMelika ayizigidi ezi-4 (izigidi ezingama-60 zamarandi aseNingizimu afrika) eyayingabikiwe ukuthi ikuleli.<ref>{{Cite web |title=Hawks take over the probe into the burglary at Ramaphosa's game farm |url=https://www.businesslive.co.za/bd/national/2022-06-07-hawks-take-over-the-probe-into-the-burglary-at-ramaphosas-game-farm/ |access-date=2022-06-08 |website=BusinessLIVE |language=en-ZA}}</ref><ref>{{Cite web |date=2022-06-07 |title=Ramaphosa to appear before ANC after farm robbery |url=https://www.moneyweb.co.za/news/south-africa/ramaphosa-to-appear-before-anc-after-farm-robbery/ |access-date=2022-06-08 |website=Moneyweb |language=en}}</ref><ref>{{Cite web |title=Ramaphosa Farm Theft. Give police space to investigate: Cele |url=https://www.enca.com/news/ramaphosa-farm-theft-give-police-space-investigate-cele |access-date=2022-06-08 |website=www.enca.com |language=en |archive-date=2022-06-17 |archive-url=https://web.archive.org/web/20220617003022/https://www.enca.com/news/ramaphosa-farm-theft-give-police-space-investigate-cele |dead-url=yes }}</ref> Kodwa, imibiko eyalandela yakhomba ukuthi imali eyebiwe kwakungamadola ayisamba esingama- $580 000<ref>[https://www.news24.com/news24/investigations/phala-phala-mystery-sudanese-businessman-paid-580-000-to-ramaphosas-farmhand-45-days-before-theft-20220906-2]</ref> URamaphosa waphika wama- ngekhanda,<ref name="guardianLegalAction">[https://www.theguardian.com/world/2022/dec/03/south-africa-president-to-mount-legal-action-in-face-of-impeachment-threat-cyril-ramaphosa]</ref> futhi wathi uzodlulisa umbiko wethimba eliqokwe iphalemende ukuze ubuyekezwe ngokomthetho. Lombiko wakhululwa ngowezi-2022 futhi wamsola "ngokungaziphathi ngendlela efanele isikhundla sakhe." <ref name="guardianLegalAction"/> == uMongo == Mhla zilu-1 kuNhlaba 2022, lowo oyengumphathi-jikelele wezokuVikelwa komBuso, uArthur Fraser,<ref>{{Cite web |date=2022-06-15 |title=Furore over a theft bedevils the ANC |url=https://www.moneyweb.co.za/news/south-africa/furore-over-a-theft-bedevils-the-anc/ |access-date=2022-06-15 |website=Moneyweb |language=en}}</ref> wafaka isimangalo secala ngokumelene no-Cyril Ramaphosa ngokuphazamisa ingalo yomthetho ngokuthi ephule UMthetho wokuvinjwa kobuGebengu obuhleliwe wangowe-1998, kanye nomthetho wokuvinjwa kwezenzo zokukhwabanisa wongowezi-2004.<ref name="Daniels">{{Cite web |last=Daniels |first=Nicola |title=Sars, Reserve Bank mum on Ramaphosa's farmgate |url=https://www.iol.co.za/capetimes/news/sars-reserve-bank-mum-on-ramaphosas-farmgate-f16ce460-5b8a-4e70-9c71-8d5706f757c4 |access-date=2022-06-15 |website=www.iol.co.za |language=en}}</ref> Isimangalo sika-Fraser saveza ukuthi isamba samadola ayizigidi ezi-4 (ezilingana namarandi ayizigidi ezingama-62)<ref name=":1">{{Cite web |last=Haffajee |first=Ferial |date=2022-06-02 |title=SPIES R US: Why Ramaphosa (apparently) kept mum about multimillion-dollar robbery at his farm |url=https://www.dailymaverick.co.za/article/2022-06-02-why-ramaphosa-apparently-kept-mum-about-multimillion-dollar-robbery-at-his-farm/ |access-date=2022-06-15 |website=Daily Maverick |language=en}}</ref> eyayigxishwe ngaphakathi kosofa zebiwa emzini ka-Ramaphosa osepulazini elisePhalaPhala elikumkhandlu wesifunda i-Waterberg ,<ref>{{Cite web |last=Gerber |first=Jan |title=ANC does not want to 'interfere' with investigations into 'Rama-Phala Phala' |url=https://www.news24.com/news24/southafrica/politics/anc-does-not-want-to-interfere-with-investigations-into-rama-phala-phala-20220615-2 |access-date=2022-06-15 |website=News24 |language=en-US}}</ref> “cishe" ngomhla ziyi-9 kuNhlolanja 2020.<ref name=":0">{{Cite web |last=O’Regan |first=Victoria |date=2022-06-12 |title=SPIES R US: Ramaphosa's Farmgate scandal – a timeline of what we know (and don't know) so far |url=https://www.dailymaverick.co.za/article/2022-06-12-ramaphosas-farmgate-scandal-a-timeline-of-what-we-know-and-dont-know-so-far/ |access-date=2022-06-15 |website=Daily Maverick |language=en}}</ref> Saqhubeka saveza nokuthi [[Umongameli waseNingizimu Afrika|umengameli]] akawabikelanga amaphoyisa ngalobulelesi nokuthi ukuba khona kwesamba esikhulu salenkece yangaphandle kwakungabikiwe kwibhangengodla ngokulandela umthetho. Isimangalo sikaFraser saveza nokuthi abasolwa abahileleke ekwebeni bathunjwa ukuze bayohlonywa ngemibuzo.<ref name="Daniels" /> epulazini<ref>{{Cite web |last=Bhengu |first=Cebelihle |date=15 June 2022 |title='We have sides hidden under a mattress. It's a steal' — Nando's throws jab at Ramaphosa's 'farmgate' scandal |url=https://www.timeslive.co.za/news/south-africa/2022-06-15-we-have-sides-hidden-under-a-mattress-its-a-steal-nandos-throws-jab-at-ramaphosas-farmgate-scandal/ |access-date=2022-06-15 |website=TimesLIVE |language=en-ZA}}</ref> futhi bakhokhelwa ukuba bangasithi vo! nakancane kunoma ubani lesehlakalo.<ref name=":1" /> Abasemagunyeni eNamibiya bahlonza abasolwa ababandakanyeka ekwebeni lungakaziwa loludaba kodwa baluthalalisa emva kwezicelo zezingede zokuvikela zaseNingizimu afrika..<ref>{{Cite web |title=Ramaphosa 'Farmgate': What we know, what we don't know and why you should care |url=https://www.msn.com/en-za/news/other/ramaphosa-farmgate-what-we-know-what-we-don-t-know-and-why-you-should-care/ar-AAYjlfL |access-date=2022-06-15 |website=MSN |language=en-ZA}}</ref> Imithombo eseduze nomengameli yona yaveza ukuthi nakuba ukwebiwa kwemali kwenzeka epulazini, isamba semali esibandakanyekayo sasiphansi kunaleso esivezwa uFraser nokuthi yonke leyomali yazuzwa ngokusemthethweni kolundela ukudayiswa kwezinkomo zama-ankole.<ref name=":1" /> URamaposa wathi akasibikanga lesigameko sokweba ukuze agweme ukuba imbangela yokuyaluza emphakathini wabalimi kodwa kunalokho kwaba ngcono ukuba abophiko labalindi bakamongameli kube yibo abaphenya lesehlakalo sokweba.<ref name=":1" /> == Ukugqekezwa okusolwayo kwangowezi-2020 == Kusuka ezinsolweni nasemacaleni avulwa ngu-Arthur Fraser, nazi izehlakalo ezenzeka: umsebenzi wasendlini oqashwe epulazini ePhala Phala wavubukula inkece yangaphandle kwezwe ithukuswe empahleni yasendlini.<ref name="ST01">{{Cite news |last1=Jika |first1=Thanduxolo |last2=Makinana |first2=Andisiwe |last3=Nombembe |first3=Philani |date=5 June 2022 |title=Did the president break the law? |pages=1–5 |work=Sunday Times (South Africa)}}</ref> Lomsebenzi ube hlala ngaphandle kwepulazi emzini wase-Cyferskyl.<ref name=ST01/> Kunesibalo esikhulu sabantu baseNamibiya esihlala kulomuzi futhi badabuka kulabo ababelwa besohlangothini loMbutho wezokuVikela wasNingizimu Afrika ngesikhathi seMpi yaseNingizimu Afrika yaseMgceleni bagcina sebehlala kuleli ngemuva konyaka we-1989.<ref name=ST01/> Waxoxa ngakutholile nabanye bomakhelwane bakhe abamxhumanisa nabanye abantu baseNamibiya abahlala [[IKapa|eKapa]], abangamsiza.<ref name=ST01/> Ukugqekezwa kwenzeka ngobusuku bukaNhlolanja 9 2020, ngehora le-10. U-Fraser uthi sonke lesenzakalo saqoshwa uhlelo lwe-CCTV.<ref name=ST01/> Abagqekezi ekuqaleni bagqekeza bangena egumbini okungelona futhi kwadingeka basizwe ngomsebenzi wasendlini ukuba hate egumbini elifanele.<ref name=ST01/> Emva kokugqekezwa, khona babalekela eKapa.<ref name=ST01/> Lapho kutholakala ukuthi kugqekeziwe, inhloko yophiko lwezoVikelwa kukaMongameli uJenene-nduna u-Wally Rhoode kuthiwa wabandkanyeka, eyalezwe nguMengameli Cyril Ramaphosa ukuba aphenye.<ref name=ST01/> Ekugcineni abasolwa batholwa eKapa ngemuva kokuhlonywa ngemibuzo lomsebenzi wasendlini nasekuhlolweni kukamakhalekhikhini wakhe ukuba awunayo yini imiyalezo nabagqekezi.<ref name=ST01/> eKapa, abagqekezi bashintsha inkece yangaphandle kwaba ngamaRandi waseNingizimu Afrika endaweni yokuNana imali yamaShayina.<ref>{{Cite web |last=Daniels |first=Nicola |title=Ramaphosa's farmgate loot splurged in Cape Town |url=https://www.iol.co.za/capetimes/news/ramaphosas-farmgate-loot-splurged-in-cape-town-07c23aea-e100-4989-b7de-7346cfb69e21 |access-date=2022-06-18 |website=www.iol.co.za |language=en}}</ref> U-Fraser uthi abasolwa bahlonywa imibuzo, futhi imali eyayisele yabuyiswa, futhi abagqekezi bakhokhelwa ngemali eyizi-R150,000.<ref name=ST01/> Ngokungenani oyedwa wabagqekezi wahlonywa imibuzo ngo-Rhoode ekwelaseNamibiya.<ref name=ST01/> Lokhu kwenzeka ngenxa yokungenelela kukaRamaphosa kanye noMengameli waseNamibiya uHage Geingob. Umsebenzi wasendlini yena kusolwa ukuthi waxoshwa khona kamuva waqashwa futhi wayesekhokhelwa imali engamadola angu-$150,000. r1lta61zfap976pu9iqczlmzv3h0z9e Mhlengikhona/Draft4/Okusalungiswa5 0 34488 126071 125181 2026-07-15T05:16:03Z Mhlengukhona 25426 umlando wakwaGina 126071 wikitext text/x-wiki UMLANDO WAKWAGINA [[File:Traditional Zulu house, South Africa (1588615030).jpg|thumb|Isithombe Sendlu yaMakhosi]] Umlando wakwaGina uxhumene eduze nendabuko yamaNguni.Isibongo sakwaGina sitholakala kakhulu Kwazulu-Natal baziwa kakhulu njengabantu abahlonishwayo nasebukhosini, nase zindaweni ezahlukene futhi imvelaphi yabo ivame ukulandelwa ezizweni ezinkulu zaseNyakatho naseMpumalanga yeNingizimu Afrika.<ref>https://www.familysearch.org/en/surname</ref> Mhlungu wasendlukulu iNkosana kaNdaba uMjokwana yahlaselwa yizitha zashisa umuzi wayo , yase iyabaleka yayocasha nomndeni wayo kodwa yamxaka impilo wabuyela emanxiweni lapho kwaku shiswe khona .Omunye wamakhosikazi khe wayezithwele , bathi befika wabeletha wazala umfana.Lapho kwakushe khona kwasukumila IHLUNGU wase emqamba ngokuthi uMhlungu nguye umhlungu owazala uGina yena wazala uMagadlela yena wazala uBukhosini.<ref>https://izithakazelo.blog/surnames-and-their-clan-names/#google_vignette</ref> Izithakazelo zakwaGina oMagadlela, Mhlungu Wasendlunkulu, Bukhosini,Ncama Ngethusi ,Mageza Ngobisi. == UMTHOMBO == 6cgrcb24kmnf2ks5n916yeeq7hg4rye Umlando wakwaGina 0 34719 126072 2026-07-15T05:20:08Z Mhlengukhona 25426 Umlando WakwaGina 126072 wikitext text/x-wiki UMLANDO WAKWAGINA [[File:Traditional_Zulu_house,_South_Africa_(1588615030).jpg|thumb|Isithombe Sendlu yaMakhosi]] Umlando wakwaGina uxhumene eduze nendabuko yamaNguni.Isibongo sakwaGina sitholakala kakhulu Kwazulu-Natal baziwa kakhulu njengabantu abahlonishwayo nasebukhosini, nase zindaweni ezahlukene futhi imvelaphi yabo ivame ukulandelwa ezizweni ezinkulu zaseNyakatho naseMpumalanga yeNingizimu Afrika.<ref>https://www.familysearch.org/en/surname</ref> Mhlungu wasendlukulu iNkosana kaNdaba uMjokwana yahlaselwa yizitha zashisa umuzi wayo , yase iyabaleka yayocasha nomndeni wayo kodwa yamxaka impilo wabuyela emanxiweni lapho kwaku shiswe khona .Omunye wamakhosikazi khe wayezithwele , bathi befika wabeletha wazala umfana.Lapho kwakushe khona kwasukumila IHLUNGU wase emqamba ngokuthi uMhlungu nguye umhlungu owazala uGina yena wazala uMagadlela yena wazala uBukhosini.<ref>https://izithakazelo.blog/surnames-and-their-clan-names/#google_vignette</ref> Izithakazelo zakwaGina oMagadlela, Mhlungu Wasendlunkulu, Bukhosini,Ncama Ngethusi ,Mageza Ngobisi. == UMTHOMBO == im5pqoquf0d6cxlafijqzotg81sucmn Umlando wokwakhiwa kwesikole uHhoye 0 34720 126073 2026-07-15T05:26:34Z Mhlengukhona 25426 Umlando wokwakhiwa kwesikole u Hhoye Secondary School 126073 wikitext text/x-wiki [[File:Vaajakosken_kouluparakki.JPG|thumb|Isikole]] UMLANDO WOKWAKHIWA KWESIKOLE U HHOYE SECONDARY SCHOOL Isikole uHhoye Secondary school isikole esaziwa khakhulu ngokuzimisela ezifundweni nokuphasa kahle.Lesisikole sitholakala Kwazulu-Natal ngaphansi koMkhanyakude District , <ref>https://www.ukdm.gov.za/</ref>endaweni yaseBhambanana. Lesi sikole saqala ukufundisa ngonyaka ka- sifundisela ethendeni lomphakathi lelithende lalifakwa ngamalungu oMphakathi njalo ngeSonto liphinde likhishwe ngoLwesihlanu.Lesi sikole saqalwa uMphakathi , uMphakathi waqale wathola indawo emndenini wakwaNdlazi bathi sebayitholile indawo iNduna yabacela ukuba balule isandla ukusiza ukuba lendawo iheshwe ukuze izingane zingeke zihambe ibanga elide ukuya esikoleni zisuka oNaleni ziya ePhungaza High School. Kwathi sekuheshiwe kwakhiwa amagumbi amathathu okwakuyigumbi loThisha kanye namaKilasi amabili okufundela abanye baqhubeka bafundela ethendeni kanye naphansi kwezihlahla. Ngemuva kwesikhathi kwangezwa ngeKilasi lesithathu, kwathi sekubonakala ukuthi isikole sesinezingane eziningi kwalethwa lezizindlu zamagogogo (Container) lesisikole besinamabanga agcina kweleshumi nanye (Grade11)<ref>https://www.education.gov.za/</ref>.Kwase kwathi ngonyaka ka-2015 ilapho okwaqala khona ukuba nomaTikuletsheni (Matric) umaTikuletsheni waphasa kahle.Kwase kwathi ngonyaka ka-2016 wphasakahle kakhulu kwase kwaqalwa ukwakhiwa lesisikole ngoba sisihle kangaka. == Umthombo == hra76h314y0r6nvdnmcafpjg55l5ux9 Ingqibamasondo 0 34721 126074 2026-07-15T06:15:09Z Mhlengukhona 25426 inqibamasondo 126074 wikitext text/x-wiki '''INQIBAMASONDO''' INqibamasondo usiko lwesintu samaZulu lapho umakoti esuke ehambisa khona umbondo emzini.Lomcimbi wenzeka ngemuva kokuba abakamkhwenyana sebelobolile kwamakoti ,yingakho lolusiko lubizwa ngenqibamasondo ngoba basuke bayogqiba amasondo ezinkomo zomkhwenyana.Abakwa makoti bayahamba ke baye kamkhwenyana ukuyoqgiba amasondo baphatha umbondo wokudla okuhlukahlukene kungaba izithelo, utshwala besiZulu, izitshalo ezifana nobhathanathi kanye nokudla kwesizulu okufana namadumbe.Abakwamakoti uma bafika emzini babahlabisa inkomo okusuke kungeyabo bodwa kuba kubo ukuthi bayabapha yini abakamkhwenyana.<ref>https://www.southafrica.net/in/en/travel/article/ceremonies-and-traditions-food-of-south-africa</ref> [[File:Women's_Ritual_Preparation_Space,_Ancestral_Ceremony.jpg|thumb|Ukudla kweSintu]] Uma kufikwa emzini umakoti usuke ephelezelwe izintombi zangakubo kufike kuculwe kusinwe ngaphandle kwamasango kamkhwenyana.Umakoti uma esengena kwamkhwenyana uphosa amaswidi ebaleni abakamkhwenyana babese bawacoshe izintombi ziqhubeke zisine kuthokozwe ,umakoti uphatha noma uthwala ubhasikidi kamamezala wakhe ogcwele ukudla noma amaswidi ukukhombisa ukuthi ngoba esefikile kulelikhaya ngeke asalamba noma ashele emabhodweni.<ref>https://www.southafrica.net/in/en/travel/article/ceremonies-and-traditions-food-of-south-africa</ref>Inhloso yalelisiko ukukhombisa ukuthi umakoti ukhuliswe kahle noma usuka ekhaya elinomthetho.Lokhu kuveza ukuthi umakoti uzihlonipha zombili izinhlangothi zomndeni.Abanye ke lolusiko bayalwenza noma sebashadile. == UMTHOMBO: == 9e945iq6l54pj1jy8crgno5eafaskki Template:Infobox planet 10 34722 126075 2026-07-15T08:33:31Z Fongcwele 16873 Created page with "{{#invoke:infobox|infoboxTemplate | class = vcard | titleclass = fn org | title = {{{name|<includeonly>{{PAGENAMEBASE}}</includeonly>}}} | image = {{#invoke:InfoboxImage|InfoboxImage|image={{{image|}}}|upright={{if empty|{{{image_scale|}}}|1.1}}|alt={{{image_alt|}}}}} | caption = {{{caption|}}} | headerstyle = {{#if:{{{background|}}}{{{bgcolour|}}}|background-color:{{if empty|{{{background|}}}|{{{bgcolour|}}}}}|background-color:#E0CCFF}}; color:inh..." 126075 wikitext text/x-wiki {{#invoke:infobox|infoboxTemplate | class = vcard | titleclass = fn org | title = {{{name|<includeonly>{{PAGENAMEBASE}}</includeonly>}}} | image = {{#invoke:InfoboxImage|InfoboxImage|image={{{image|}}}|upright={{if empty|{{{image_scale|}}}|1.1}}|alt={{{image_alt|}}}}} | caption = {{{caption|}}} | headerstyle = {{#if:{{{background|}}}{{{bgcolour|}}}|background-color:{{if empty|{{{background|}}}|{{{bgcolour|}}}}}|background-color:#E0CCFF}}; color:inherit; | labelstyle = max-width:{{if empty|{{{label_width|}}}|11em}}; | autoheaders = y | header1 = Discovery{{{discovery_ref|}}} | label2 = [[List of minor planet discoverers|Discovered&nbsp;by]] | data2 = {{{discoverer|}}} | label3 = Indawo yokuvubukulwa | data3 = {{{discovery_site|}}} | label4 = Usuku&nbsp;lokuvubukulwa | data4 = {{{discovered|}}} | label5 = {{longitem|Indlela yokusihlonga}} | data5 = {{{discovery_method|}}} | header10 = {{#if:{{{extrasolarplanet|}}}{{{Imizulendle|}}}|[[Exoplanet#Nomenclature|Designations]]|Amagama}} | label11 = {{longitem|{{#if:{{{minorplanet|}}}|<!--[[Minor-planet designation|MPC&nbsp;designation]]-->|Igama}}}} | data11 = {{#if:{{{minorplanet|}}}||{{if empty|{{{mpc_name|}}}|{{{mp_name|}}}}}}} | label12 = Ukuphinyiswa | data12 = {{if empty|{{{pronounce|}}}|{{{pronounced|}}}}} | label13 = {{longitem|Eqanjwe ngakho}} | data13 = {{{named_after|}}} | label14 = {{longitem|{{#if:{{{minorplanet|}}}|[[Provisional designation in astronomy|Alternative designations]]|[[Provisional designation in astronomy|Amanye amagama]]}}}} | data14 = {{{alt_names|}}} | label15 = {{longitem|[[Minor planet#Populations|Minor&nbsp;planet category]]}} | data15 = {{{mp_category|}}} | label16 = [[List of adjectivals and demonyms of astronomical bodies|Iziphawulo]] | data16 = {{if empty|{{{adjectives|}}}|{{{adjective|}}}}} | label17 = [[Planet symbols|Uphawu]] | data17 = {{{symbol|}}} | header20 = [[Osculating orbit|Izinkondolo zozungezo]]{{#ifeq:{{{barycentric|}}}|yes|&nbsp;[[Barycenter#Inside or outside the Sun?|(barycentric)]]}}{{{orbit_ref|}}} | data21 = {{{orbit_diagram|}}} | data22 = {{#if:{{{epoch|}}} |[[Epoch (astronomy)|Ikhathi]] {{{epoch}}}}} | data23 = {{#if:{{{uncertainty|}}} | [[Uncertainty parameter]] {{{uncertainty}}}}} | label24 = [[Observation arc]] | data24 = {{{observation_arc|}}} | label25 = Usuku langaphambilini | data25 = {{{earliest_precovery_date|}}} | label26 = {{#switch:{{{apsis}}} |apsis|gee|barion|center|centre|(apsis)=[[Apsis|Apo{{{apsis}}}]] |[[Perihelion and aphelion|Ku{{if empty|{{{apsis|}}}|dana}}]]}} | data26 = {{{aphelion|}}} | label27 = [[Perihelion and aphelion|Fuphi{{if empty|{{{apsis|}}}|nelanga}}]] | data27 = {{{perihelion|}}} | label28 = [[Apsis|Fuphinejika]] | data28 = {{{periapsis|}}} | label29 = {{#switch:{{{apsis}}} |helion|astron=[[Apsis|Ap{{{apsis}}}]] |[[Apsis|Apo{{if empty|{{{apsis|}}}|apsis}}]]}} | data29 = {{{apoapsis|}}} | label30 = [[Apsis|Periastron]] | data30 = {{{periastron|}}} | label31 = [[Apsis|Apoastron]] | data31 = {{{apoastron|}}} | label32 = {{longitem|[[Semi-major and semi-minor axes|Semi-major axis]]}} | data32 = {{{semimajor|}}} | label33 = {{longitem|Mean orbit [[radius]]}} | data33 = {{{mean_orbit_radius|}}} | label34 = [[Orbital eccentricity|Ubukhophelana]] | data34 = {{{eccentricity|}}} | label35 = {{longitem|[[Orbital period|Inkathi yozungezo (sidereal)]]}} | data35 = {{{period|}}} | label36 = {{longitem|[[Orbital period|Orbital period (synodic)]]}} | data36 = {{{synodic_period|}}} | label37 = {{longitem|Average [[orbital speed]]}} | data37 = {{{avg_speed|}}} | label38 = {{longitem|[[Mean anomaly#Mean anomaly at epoch|Mean anomaly]]}} | data38 = {{{mean_anomaly|}}} | label39 = {{longitem|[[Mean motion]]}} | data39 = {{{mean_motion|}}} | label40 = [[Orbital inclination|Inclination]] | data40 = {{{inclination|}}} | label41 = {{longitem|[[Angular distance]]}} | data41 = {{{angular_dist|}}} | label42 = {{longitem|[[Longitude of the ascending node|Longitude&nbsp;of ascending&nbsp;node]]}} | data42 = {{{asc_node|}}} | label43 = {{longitem|[[Longitude of the periapsis|Longitude&nbsp;of]] [[Apsis|peri{{if empty|{{{apsis|}}}|helion}}]]}} | data43 = {{{long_periastron|}}} | label44 = {{longitem|[[Apsis|Time&nbsp;of peri{{if empty|{{{apsis|}}}|helion}}]]}} | data44 = {{{time_periastron|}}} | label45 = {{longitem|[[Argument of periapsis|Argument&nbsp;of peri{{if empty|{{{apsis|}}}|helion}}]]}} | data45 = {{{arg_peri|}}} | label46 = {{nowrap|[[Amplitude|Semi-amplitude]]}} | data46 = {{{semi-amplitude|}}} | label47 = [[Natural satellite|Satellite&nbsp;of]] | data47 = {{{satellite_of|}}} | label48 = [[Irregular moon#Group|Group]] | data48 = {{{group|}}} | label49 = {{#switch:{{{allsatellites|}}} |yes|true=[[Natural satellite|Satellite]]s |Known [[Natural satellite|satellite]]s}} | data49 = {{{satellites|}}} | label50 = Star | data50 = {{{star|}}} | label51 = Earth&nbsp;[[Minimum orbit intersection distance|MOID]] | data51 = {{{moid|}}} | label52 = Mercury&nbsp;[[Minimum orbit intersection distance|MOID]] | data52 = {{{mercury_moid|}}} | label53 = Venus&nbsp;[[Minimum orbit intersection distance|MOID]] | data53 = {{{venus_moid|}}} | label54 = Mars&nbsp;[[Minimum orbit intersection distance|MOID]] | data54 = {{{mars_moid|}}} | label55 = Jupiter&nbsp;[[Minimum orbit intersection distance|MOID]] | data55 = {{{jupiter_moid|}}} | label56 = Saturn&nbsp;[[Minimum orbit intersection distance|MOID]] | data56 = {{{saturn_moid|}}} | label57 = Uranus&nbsp;[[Minimum orbit intersection distance|MOID]] | data57 = {{{uranus_moid|}}} | label58 = Neptune&nbsp;[[Minimum orbit intersection distance|MOID]] | data58 = {{{neptune_moid|}}} | label59 = [[Tisserand's parameter|T<sub>Jupiter</sub>]] | data59 = {{{tisserand|}}} | header60 = [[Proper orbital elements]]{{{p_orbit_ref|}}} | label61 = {{longitem|Proper [[Semi-major and semi-minor axes|semi-major axis]]}} | data61 = {{#if:{{{p_semimajor|}}} |{{{p_semimajor}}}&nbsp;[[Astronomical unit|AU]]}} | label62 = {{longitem|Proper [[Semi-major and semi-minor axes|semi-major axis]]}} | data62 = {{{p_semimajor_unitless|}}} | label63 = {{longitem|Proper [[Orbital eccentricity|eccentricity]]}} | data63 = {{{p_eccentricity|}}} | label64 = {{longitem|Proper [[Orbital inclination|inclination]]}} | data64 = {{{p_inclination|}}} | label65 = {{longitem|Proper [[mean motion]]}} | data65 = {{#if:{{{p_mean_motion|}}} |{{{p_mean_motion}}}&nbsp;[[Degree (angle)|deg]]{{\}}[[Julian year (astronomy)|yr]]}} | label66 = {{longitem|Proper [[orbital period]]}} | data66 = {{#if:{{{p_mean_motion|}}}|{{#expr:360/{{if empty|{{{p_mean_motion|}}}|1}} round 5}} [[Julian year (astronomy)|yr]]<br />({{#expr:365.25*360/{{if empty|{{{p_mean_motion|}}}|1}} round 3}} [[day|d]]) }} | label67 = {{longitem|Proper [[orbital period]]}} | data67 = {{{p_period_unitless|}}} | label68 = {{longitem|Precession of [[longitude of periapsis|perihelion long.]]}} | data68 = {{#if:{{{perihelion_rate|}}}|{{{perihelion_rate}}}&nbsp;[[Arcsecond|arcsec]]{{\}}[[Julian year (astronomy)|yr]] }} | label69 = {{longitem|Precession of [[Longitude of the ascending node|asc. node]]}} | data69 = {{#if:{{{node_rate|}}}|{{{node_rate}}}&nbsp;[[Arcsecond|arcsec]]{{\}}[[Julian year (astronomy)|yr]]}} | header70 = {{anchor|Infobox Physical characteristics}}{{#if:{{{minorplanet|}}}| [[Standard asteroid physical characteristics|Physical characteristics]]|Physical characteristics}}{{{physical_ref|}}} | label71 = [[Mean radius (astronomy)|Dimensions]] | data71 = {{{dimensions|}}} | label72 = {{longitem|[[Mean radius (astronomy)|Mean diameter]]}} | data72 = {{{mean_diameter|}}} | label73 = {{longitem|[[Mean radius (astronomy)|Mean radius]]}} | data73 = {{{mean_radius|}}} | label74 = {{longitem|[[Equator]]ial radius}} | data74 = {{{equatorial_radius|}}} | label75 = {{longitem|[[Geographical pole|Polar]] radius}} | data75 = {{{polar_radius|}}} | label76 = [[Flattening]] | data76 = {{{flattening|}}} | label77 = Circumference | data77 = {{{circumference|}}} | label78 = {{longitem|[[Spheroid#Area|Surface area]]}} | data78 = {{{surface_area|}}} | label79 = [[Volume]] | data79 = {{{volume|}}} | label80 = [[Mass]] | data80 = {{{mass|}}} | label81 = {{longitem|Mean [[density]]}} | data81 = {{{density|}}} | label82 = {{longitem|{{#if:{{{minorplanet|}}}|Equatorial [[Standard asteroid physical characteristics#Surface gravity|surface&nbsp;gravity]]|[[Surface gravity]]}}}} | data82 = {{{surface_grav|}}} | label83 = {{longitem|[[Moment of inertia factor]]}} | data83 = {{{moment_of_inertia_factor|}}} | label84 = {{longitem|{{#if:{{{minorplanet|}}} |Equatorial [[escape velocity]] |[[Escape velocity]]}}}} | data84 = {{{escape_velocity|}}} | label85 = {{longitem|[[Synodic rotation period]]}} | data85 = {{{rotation|}}} | label86 = {{longitem|[[Sidereal rotation period]]}} | data86 = {{{sidereal_day|}}} | label87 = {{longitem|Equatorial rotation&nbsp;velocity}} | data87 = {{{rot_velocity|}}} | label88 = {{longitem|[[Axial tilt]]}} | data88 = {{{axial_tilt|}}} | label89 = {{longitem|North&nbsp;pole {{nowrap|[[right ascension]]}}}} | data89 = {{{right_asc_north_pole|}}} | label90 = {{longitem|North&nbsp;pole [[declination]]}} | data90 = {{{declination|}}} | label91 = {{longitem|Pole [[Ecliptic coordinate system|ecliptic longitude]]}} | data91 = {{{pole_ecliptic_lon|}}} | label92 = {{longitem|Pole [[Ecliptic coordinate system|ecliptic latitude]]}} | data92 = {{{pole_ecliptic_lat|}}} | label93 = {{#if:{{{minorplanet|}}} |{{longitem|[[Geometric albedo]]}} |[[Albedo]]}} | data93 = {{{albedo|}}} | label94 = [[Temperature]] | data94 = {{{single_temperature|}}} | data100 = {{#if:{{{temp_name1|}}}{{{temp_name2|}}}{{{temp_name3|}}}{{{temp_name4|}}}| <table style="border-spacing: 0px; width:100%; border:none; margin:0; line-height:1.2em; white-space:nowrap"><tr> <th style="width:33%; padding-right:0.25em; text-align:left">Surface [[temperature|temp.]]</th> <th style="padding-right:0.25em; text-align:center">min</th> <th style="padding-right:0.25em; text-align:center">mean</th> <th style="padding-right:0.25em; text-align:center">max</th> </tr>{{#if:{{{temp_name1|}}}|<tr> <th style="padding-left:1.0em">{{{temp_name1}}}</th> <td style="text-align:center">{{{min_temp_1|}}}</td> <td style="text-align:center">{{{mean_temp_1|}}}</td> <td style="text-align:center">{{{max_temp_1|}}}</td> </tr>}}{{#if:{{{temp_name2|}}}|<tr> <th style="padding-left:1.0em">{{{temp_name2}}}</th> <td style="text-align:center">{{{min_temp_2|}}}</td> <td style="text-align:center">{{{mean_temp_2|}}}</td> <td style="text-align:center">{{{max_temp_2|}}}</td> </tr>}}{{#if:{{{temp_name3|}}}|<tr> <th style="padding-left:1.0em">{{{temp_name3}}}</th> <td style="text-align:center">{{{min_temp_3|}}}</td> <td style="text-align:center">{{{mean_temp_3|}}}</td> <td style="text-align:center">{{{max_temp_3|}}}</td> </tr>}}{{#if:{{{temp_name4|}}}|<tr> <th style="padding-left:1.0em">{{{temp_name4}}}</th> <td style="text-align:center">{{{min_temp_4|}}}</td> <td style="text-align:center">{{{mean_temp_4|}}}</td> <td style="text-align:center">{{{max_temp_4|}}}</td> </tr>}} </table>}} | label101 = Surface [[absorbed dose]] [[Dose rate|rate]] | data101 = {{{surface_absorbed_dose_rate|}}} | label102 = Surface [[equivalent dose]] [[Dose rate|rate]] | data102 = {{{surface_equivalent_dose_rate|}}} | label103 = {{longitem|{{#if:{{{minorplanet|}}}|[[Asteroid spectral types|Spectral type]]|Spectral type}}}} | data103 = {{{spectral_type|}}} | label104 = {{longitem|[[Asteroid family]]}} | data104 = {{{family|}}} | label105 = {{longitem|[[Apparent magnitude]]}} | data105 = {{{magnitude|}}} | label106 = {{longitem|[[Absolute magnitude#Solar System bodies (H)|Absolute magnitude&nbsp;''(H)'']]}} | data106 = {{{abs_magnitude|}}} | label107 = {{longitem|[[Angular diameter]]}} | data107 = {{{angular_size|}}} | header110 = Atmosphere{{{atmosphere_ref|}}} | label111 = {{longitem|Surface [[Atmospheric pressure|pressure]]}} | data111 = {{{surface_pressure|}}} | label112 = {{longitem|[[Scale height]]}} | data112 = {{{scale_height|}}} | label113 = [[Atmospheric chemistry#Atmospheric composition|Composition by volume]] | data113 = {{{atmosphere_composition|}}} | below = <includeonly>{{#if:{{{note|}}}||{{reflist|group="note"}} }}</includeonly> }}{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using infobox planet with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Infobox planet]] with unknown parameter "_VALUE_"|ignoreblank=y| abs_magnitude | adjective | adjectives | albedo | allsatellites | alt_names | angular_dist | angular_size | aphelion | apoapsis | apsis | apoastron | arg_peri | asc_node | atmosphere | atmosphere_composition | atmosphere_ref | avg_speed | axial_tilt | background | barycentric | bgcolour | caption | circumference | declination | density | dimensions | discovered | discoverer | discovery_method | discovery_ref | discovery_site | earliest_precovery_date | eccentricity | epoch | equatorial_radius | escape_velocity | exosolar planets | extrasolarplanet | family | flattening | group | image | image_alt | image_scale | inclination | jupiter_moid | label_width | long_periastron | magnitude | mars_moid | mass | max_temp_1 | max_temp_2 | max_temp_3 | max_temp_4 | mean_anomaly | mean_diameter | mean_motion | mean_orbit_radius | mean_radius | mean_temp_1 | mean_temp_2 | mean_temp_3 | mean_temp_4 | mercury_moid | min_temp_1 | min_temp_2 | min_temp_3 | min_temp_4 | minorplanet | moid | moment_of_inertia_factor | mp_category | mp_name | mpc_name | name | named_after | neptune_moid | node_rate | note | observation_arc | orbit_diagram | orbit_ref | p_eccentricity | p_inclination | p_mean_motion | p_orbit_ref | p_period_unitless | p_semimajor | p_semimajor_unitless | periapsis | periastron | perihelion | perihelion_rate | period | physical_ref | polar_radius | pole_ecliptic_lat | pole_ecliptic_lon | pronounce | pronounced | right_asc_north_pole | rot_velocity | rotation | satellite_of | satellites | saturn_moid | scale_height | semi-amplitude | semimajor | sidereal_day | single_temperature | spectral_type | star | surface_area | surface_grav | surface_pressure | surface_absorbed_dose_rate | surface_equivalent_dose_rate | symbol | synodic_period | temp_name1 | temp_name2 | temp_name3 | temp_name4 | time_periastron | tisserand | uncertainty | uranus_moid | venus_moid | volume }}{{#invoke:Check for conflicting parameters|check | template = [[Template:Infobox planet]] | cat = {{main other|Category:Pages using infobox planet with conflicting parameters}} | background; bgcolour | mpc_name; mp_name | pronounce; pronounced | adjectives; adjective | p_semimajor; p_semimajor_unitless | p_mean_motion; p_period_unitless }}<noinclude> {{documentation}} </noinclude> sj2aaac509rnxddk76kizfc52qicdg4 126088 126075 2026-07-15T10:44:09Z Fongcwele 16873 126088 wikitext text/x-wiki {{#invoke:infobox|infoboxTemplate | class = vcard | titleclass = fn org | title = {{{name|<includeonly>{{PAGENAMEBASE}}</includeonly>}}} | image = {{#invoke:InfoboxImage|InfoboxImage|image={{{image|}}}|upright={{if empty|{{{image_scale|}}}|1.1}}|alt={{{image_alt|}}}}} | caption = {{{caption|}}} | headerstyle = {{#if:{{{background|}}}{{{bgcolour|}}}|background-color:{{if empty|{{{background|}}}|{{{bgcolour|}}}}}|background-color:#E0CCFF}}; color:inherit; | labelstyle = max-width:{{if empty|{{{label_width|}}}|11em}}; | autoheaders = y | header1 = Discovery{{{discovery_ref|}}} | label2 = [[List of minor planet discoverers|Discovered&nbsp;by]] | data2 = {{{discoverer|}}} | label3 = Indawo yokuvubukulwa | data3 = {{{discovery_site|}}} | label4 = Usuku&nbsp;lokuvubukulwa | data4 = {{{discovered|}}} | label5 = {{longitem|Indlela yokusihlonga}} | data5 = {{{discovery_method|}}} | header10 = {{#if:{{{extrasolarplanet|}}}{{{Imizulendle|}}}|[[Exoplanet#Nomenclature|Designations]]|Amagama}} | label11 = {{longitem|{{#if:{{{minorplanet|}}}|<!--[[Minor-planet designation|MPC&nbsp;designation]]-->|Igama}}}} | data11 = {{#if:{{{minorplanet|}}}||{{if empty|{{{mpc_name|}}}|{{{mp_name|}}}}}}} | label12 = Ukuphinyiswa | data12 = {{if empty|{{{pronounce|}}}|{{{pronounced|}}}}} | label13 = {{longitem|Eqanjwe ngakho}} | data13 = {{{named_after|}}} | label14 = {{longitem|{{#if:{{{minorplanet|}}}|[[Provisional designation in astronomy|Alternative designations]]|[[Provisional designation in astronomy|Amanye amagama]]}}}} | data14 = {{{alt_names|}}} | label15 = {{longitem|[[Minor planet#Populations|Minor&nbsp;planet category]]}} | data15 = {{{mp_category|}}} | label16 = [[List of adjectivals and demonyms of astronomical bodies|Iziphawulo]] | data16 = {{if empty|{{{adjectives|}}}|{{{adjective|}}}}} | label17 = [[Planet symbols|Uphawu]] | data17 = {{{symbol|}}} | header20 = [[Osculating orbit|Izinkondolo zozungezo]]{{#ifeq:{{{barycentric|}}}|yes|&nbsp;[[Barycenter#Inside or outside the Sun?|(barycentric)]]}}{{{orbit_ref|}}} | data21 = {{{orbit_diagram|}}} | data22 = {{#if:{{{epoch|}}} |[[Epoch (astronomy)|Ikhathi]] {{{epoch}}}}} | data23 = {{#if:{{{uncertainty|}}} | [[Uncertainty parameter]] {{{uncertainty}}}}} | label24 = [[Observation arc]] | data24 = {{{observation_arc|}}} | label25 = Usuku langaphambilini | data25 = {{{earliest_precovery_date|}}} | label26 = {{#switch:{{{apsis}}} |apsis|gee|barion|center|centre|(apsis)=[[Apsis|Apo{{{apsis}}}]] |[[Perihelion and aphelion|Ku{{if empty|{{{apsis|}}}|dana}}]]}} | data26 = {{{aphelion|}}} | label27 = [[Perihelion and aphelion|Fuphi{{if empty|{{{apsis|}}}|nelanga}}]] | data27 = {{{perihelion|}}} | label28 = [[Apsis|eFuphi]] | data28 = {{{periapsis|}}} | label29 = Fuphinelanga | data29 = {{{apoapsis|}}} | label30 = [[Apsis|Periastron]] | data30 = {{{periastron|}}} | label31 = [[Apsis|Apoastron]] | data31 = {{{apoastron|}}} | label32 = {{longitem|[[Semi-major and semi-minor axes|Ibanga elilangiselwe]]}} | data32 = {{{semimajor|}}} | label33 = {{longitem|Mean orbit [[radius]]}} | data33 = {{{mean_orbit_radius|}}} | label34 = [[Orbital eccentricity|Ubukhophelana]] | data34 = {{{eccentricity|}}} | label35 = {{longitem|[[Orbital period|Inkathi yozungezo (sidereal)]]}} | data35 = {{{period|}}} | label36 = {{longitem|[[Orbital period|Orbital period (synodic)]]}} | data36 = {{{synodic_period|}}} | label37 = {{longitem|Average [[orbital speed]]}} | data37 = {{{avg_speed|}}} | label38 = {{longitem|[[Mean anomaly#Mean anomaly at epoch|Mean anomaly]]}} | data38 = {{{mean_anomaly|}}} | label39 = {{longitem|[[Mean motion]]}} | data39 = {{{mean_motion|}}} | label40 = [[Orbital inclination|Inclination]] | data40 = {{{inclination|}}} | label41 = {{longitem|[[Angular distance]]}} | data41 = {{{angular_dist|}}} | label42 = {{longitem|[[Longitude of the ascending node|Longitude&nbsp;of ascending&nbsp;node]]}} | data42 = {{{asc_node|}}} | label43 = {{longitem|[[Longitude of the periapsis|Longitude&nbsp;of]] [[Apsis|peri{{if empty|{{{apsis|}}}|helion}}]]}} | data43 = {{{long_periastron|}}} | label44 = {{longitem|[[Apsis|Time&nbsp;of peri{{if empty|{{{apsis|}}}|helion}}]]}} | data44 = {{{time_periastron|}}} | label45 = {{longitem|[[Argument of periapsis|Argument&nbsp;of peri{{if empty|{{{apsis|}}}|helion}}]]}} | data45 = {{{arg_peri|}}} | label46 = {{nowrap|[[Amplitude|Semi-amplitude]]}} | data46 = {{{semi-amplitude|}}} | label47 = [[Natural satellite|Satellite&nbsp;of]] | data47 = {{{satellite_of|}}} | label48 = [[Irregular moon#Group|Group]] | data48 = {{{group|}}} | label49 = {{#switch:{{{allsatellites|}}} |yes|true=[[Natural satellite|Satellite]]s |Known [[Natural satellite|satellite]]s}} | data49 = {{{satellites|}}} | label50 = Star | data50 = {{{star|}}} | label51 = Earth&nbsp;[[Minimum orbit intersection distance|MOID]] | data51 = {{{moid|}}} | label52 = Mercury&nbsp;[[Minimum orbit intersection distance|MOID]] | data52 = {{{mercury_moid|}}} | label53 = Venus&nbsp;[[Minimum orbit intersection distance|MOID]] | data53 = {{{venus_moid|}}} | label54 = Mars&nbsp;[[Minimum orbit intersection distance|MOID]] | data54 = {{{mars_moid|}}} | label55 = Jupiter&nbsp;[[Minimum orbit intersection distance|MOID]] | data55 = {{{jupiter_moid|}}} | label56 = Saturn&nbsp;[[Minimum orbit intersection distance|MOID]] | data56 = {{{saturn_moid|}}} | label57 = Uranus&nbsp;[[Minimum orbit intersection distance|MOID]] | data57 = {{{uranus_moid|}}} | label58 = Neptune&nbsp;[[Minimum orbit intersection distance|MOID]] | data58 = {{{neptune_moid|}}} | label59 = [[Tisserand's parameter|T<sub>Jupiter</sub>]] | data59 = {{{tisserand|}}} | header60 = [[Proper orbital elements]]{{{p_orbit_ref|}}} | label61 = {{longitem|Proper [[Semi-major and semi-minor axes|semi-major axis]]}} | data61 = {{#if:{{{p_semimajor|}}} |{{{p_semimajor}}}&nbsp;[[Astronomical unit|AU]]}} | label62 = {{longitem|Proper [[Semi-major and semi-minor axes|semi-major axis]]}} | data62 = {{{p_semimajor_unitless|}}} | label63 = {{longitem|Proper [[Orbital eccentricity|eccentricity]]}} | data63 = {{{p_eccentricity|}}} | label64 = {{longitem|Proper [[Orbital inclination|inclination]]}} | data64 = {{{p_inclination|}}} | label65 = {{longitem|Proper [[mean motion]]}} | data65 = {{#if:{{{p_mean_motion|}}} |{{{p_mean_motion}}}&nbsp;[[Degree (angle)|deg]]{{\}}[[Julian year (astronomy)|yr]]}} | label66 = {{longitem|Proper [[orbital period]]}} | data66 = {{#if:{{{p_mean_motion|}}}|{{#expr:360/{{if empty|{{{p_mean_motion|}}}|1}} round 5}} [[Julian year (astronomy)|yr]]<br />({{#expr:365.25*360/{{if empty|{{{p_mean_motion|}}}|1}} round 3}} [[day|d]]) }} | label67 = {{longitem|Proper [[orbital period]]}} | data67 = {{{p_period_unitless|}}} | label68 = {{longitem|Precession of [[longitude of periapsis|perihelion long.]]}} | data68 = {{#if:{{{perihelion_rate|}}}|{{{perihelion_rate}}}&nbsp;[[Arcsecond|arcsec]]{{\}}[[Julian year (astronomy)|yr]] }} | label69 = {{longitem|Precession of [[Longitude of the ascending node|asc. node]]}} | data69 = {{#if:{{{node_rate|}}}|{{{node_rate}}}&nbsp;[[Arcsecond|arcsec]]{{\}}[[Julian year (astronomy)|yr]]}} | header70 = {{anchor|Infobox Physical characteristics}}{{#if:{{{minorplanet|}}}| [[Standard asteroid physical characteristics|Physical characteristics]]|Physical characteristics}}{{{physical_ref|}}} | label71 = [[Mean radius (astronomy)|Dimensions]] | data71 = {{{dimensions|}}} | label72 = {{longitem|[[Mean radius (astronomy)|Mean diameter]]}} | data72 = {{{mean_diameter|}}} | label73 = {{longitem|[[Mean radius (astronomy)|Mean radius]]}} | data73 = {{{mean_radius|}}} | label74 = {{longitem|[[Equator]]ial radius}} | data74 = {{{equatorial_radius|}}} | label75 = {{longitem|[[Geographical pole|Polar]] radius}} | data75 = {{{polar_radius|}}} | label76 = [[Flattening]] | data76 = {{{flattening|}}} | label77 = Circumference | data77 = {{{circumference|}}} | label78 = {{longitem|[[Spheroid#Area|Surface area]]}} | data78 = {{{surface_area|}}} | label79 = [[Volume]] | data79 = {{{volume|}}} | label80 = [[Mass]] | data80 = {{{mass|}}} | label81 = {{longitem|Mean [[density]]}} | data81 = {{{density|}}} | label82 = {{longitem|{{#if:{{{minorplanet|}}}|Equatorial [[Standard asteroid physical characteristics#Surface gravity|surface&nbsp;gravity]]|[[Surface gravity]]}}}} | data82 = {{{surface_grav|}}} | label83 = {{longitem|[[Moment of inertia factor]]}} | data83 = {{{moment_of_inertia_factor|}}} | label84 = {{longitem|{{#if:{{{minorplanet|}}} |Equatorial [[escape velocity]] |[[Escape velocity]]}}}} | data84 = {{{escape_velocity|}}} | label85 = {{longitem|[[Synodic rotation period]]}} | data85 = {{{rotation|}}} | label86 = {{longitem|[[Sidereal rotation period]]}} | data86 = {{{sidereal_day|}}} | label87 = {{longitem|Equatorial rotation&nbsp;velocity}} | data87 = {{{rot_velocity|}}} | label88 = {{longitem|[[Axial tilt]]}} | data88 = {{{axial_tilt|}}} | label89 = {{longitem|North&nbsp;pole {{nowrap|[[right ascension]]}}}} | data89 = {{{right_asc_north_pole|}}} | label90 = {{longitem|North&nbsp;pole [[declination]]}} | data90 = {{{declination|}}} | label91 = {{longitem|Pole [[Ecliptic coordinate system|ecliptic longitude]]}} | data91 = {{{pole_ecliptic_lon|}}} | label92 = {{longitem|Pole [[Ecliptic coordinate system|ecliptic latitude]]}} | data92 = {{{pole_ecliptic_lat|}}} | label93 = {{#if:{{{minorplanet|}}} |{{longitem|[[Geometric albedo]]}} |[[Albedo]]}} | data93 = {{{albedo|}}} | label94 = [[Temperature]] | data94 = {{{single_temperature|}}} | data100 = {{#if:{{{temp_name1|}}}{{{temp_name2|}}}{{{temp_name3|}}}{{{temp_name4|}}}| <table style="border-spacing: 0px; width:100%; border:none; margin:0; line-height:1.2em; white-space:nowrap"><tr> <th style="width:33%; padding-right:0.25em; text-align:left">Surface [[temperature|temp.]]</th> <th style="padding-right:0.25em; text-align:center">min</th> <th style="padding-right:0.25em; text-align:center">mean</th> <th style="padding-right:0.25em; text-align:center">max</th> </tr>{{#if:{{{temp_name1|}}}|<tr> <th style="padding-left:1.0em">{{{temp_name1}}}</th> <td style="text-align:center">{{{min_temp_1|}}}</td> <td style="text-align:center">{{{mean_temp_1|}}}</td> <td style="text-align:center">{{{max_temp_1|}}}</td> </tr>}}{{#if:{{{temp_name2|}}}|<tr> <th style="padding-left:1.0em">{{{temp_name2}}}</th> <td style="text-align:center">{{{min_temp_2|}}}</td> <td style="text-align:center">{{{mean_temp_2|}}}</td> <td style="text-align:center">{{{max_temp_2|}}}</td> </tr>}}{{#if:{{{temp_name3|}}}|<tr> <th style="padding-left:1.0em">{{{temp_name3}}}</th> <td style="text-align:center">{{{min_temp_3|}}}</td> <td style="text-align:center">{{{mean_temp_3|}}}</td> <td style="text-align:center">{{{max_temp_3|}}}</td> </tr>}}{{#if:{{{temp_name4|}}}|<tr> <th style="padding-left:1.0em">{{{temp_name4}}}</th> <td style="text-align:center">{{{min_temp_4|}}}</td> <td style="text-align:center">{{{mean_temp_4|}}}</td> <td style="text-align:center">{{{max_temp_4|}}}</td> </tr>}} </table>}} | label101 = Surface [[absorbed dose]] [[Dose rate|rate]] | data101 = {{{surface_absorbed_dose_rate|}}} | label102 = Surface [[equivalent dose]] [[Dose rate|rate]] | data102 = {{{surface_equivalent_dose_rate|}}} | label103 = {{longitem|{{#if:{{{minorplanet|}}}|[[Asteroid spectral types|Spectral type]]|Spectral type}}}} | data103 = {{{spectral_type|}}} | label104 = {{longitem|[[Asteroid family]]}} | data104 = {{{family|}}} | label105 = {{longitem|[[Apparent magnitude]]}} | data105 = {{{magnitude|}}} | label106 = {{longitem|[[Absolute magnitude#Solar System bodies (H)|Absolute magnitude&nbsp;''(H)'']]}} | data106 = {{{abs_magnitude|}}} | label107 = {{longitem|[[Angular diameter]]}} | data107 = {{{angular_size|}}} | header110 = Atmosphere{{{atmosphere_ref|}}} | label111 = {{longitem|Surface [[Atmospheric pressure|pressure]]}} | data111 = {{{surface_pressure|}}} | label112 = {{longitem|[[Scale height]]}} | data112 = {{{scale_height|}}} | label113 = [[Atmospheric chemistry#Atmospheric composition|Composition by volume]] | data113 = {{{atmosphere_composition|}}} | below = <includeonly>{{#if:{{{note|}}}||{{reflist|group="note"}} }}</includeonly> }}{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using infobox planet with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Infobox planet]] with unknown parameter "_VALUE_"|ignoreblank=y| abs_magnitude | adjective | adjectives | albedo | allsatellites | alt_names | angular_dist | angular_size | aphelion | apoapsis | apsis | apoastron | arg_peri | asc_node | atmosphere | atmosphere_composition | atmosphere_ref | avg_speed | axial_tilt | background | barycentric | bgcolour | caption | circumference | declination | density | dimensions | discovered | discoverer | discovery_method | discovery_ref | discovery_site | earliest_precovery_date | eccentricity | epoch | equatorial_radius | escape_velocity | exosolar planets | extrasolarplanet | family | flattening | group | image | image_alt | image_scale | inclination | jupiter_moid | label_width | long_periastron | magnitude | mars_moid | mass | max_temp_1 | max_temp_2 | max_temp_3 | max_temp_4 | mean_anomaly | mean_diameter | mean_motion | mean_orbit_radius | mean_radius | mean_temp_1 | mean_temp_2 | mean_temp_3 | mean_temp_4 | mercury_moid | min_temp_1 | min_temp_2 | min_temp_3 | min_temp_4 | minorplanet | moid | moment_of_inertia_factor | mp_category | mp_name | mpc_name | name | named_after | neptune_moid | node_rate | note | observation_arc | orbit_diagram | orbit_ref | p_eccentricity | p_inclination | p_mean_motion | p_orbit_ref | p_period_unitless | p_semimajor | p_semimajor_unitless | periapsis | periastron | perihelion | perihelion_rate | period | physical_ref | polar_radius | pole_ecliptic_lat | pole_ecliptic_lon | pronounce | pronounced | right_asc_north_pole | rot_velocity | rotation | satellite_of | satellites | saturn_moid | scale_height | semi-amplitude | semimajor | sidereal_day | single_temperature | spectral_type | star | surface_area | surface_grav | surface_pressure | surface_absorbed_dose_rate | surface_equivalent_dose_rate | symbol | synodic_period | temp_name1 | temp_name2 | temp_name3 | temp_name4 | time_periastron | tisserand | uncertainty | uranus_moid | venus_moid | volume }}{{#invoke:Check for conflicting parameters|check | template = [[Template:Infobox planet]] | cat = {{main other|Category:Pages using infobox planet with conflicting parameters}} | background; bgcolour | mpc_name; mp_name | pronounce; pronounced | adjectives; adjective | p_semimajor; p_semimajor_unitless | p_mean_motion; p_period_unitless }}<noinclude> {{documentation}} </noinclude> 89s24qrum5ygnlqo17intsvi7gxorf0 126099 126088 2026-07-15T11:24:19Z Fongcwele 16873 126099 wikitext text/x-wiki {{#invoke:infobox|infoboxTemplate | class = vcard | titleclass = fn org | title = {{{name|<includeonly>{{PAGENAMEBASE}}</includeonly>}}} | image = {{#invoke:InfoboxImage|InfoboxImage|image={{{image|}}}|upright={{if empty|{{{image_scale|}}}|1.1}}|alt={{{image_alt|}}}}} | caption = {{{caption|}}} | headerstyle = {{#if:{{{background|}}}{{{bgcolour|}}}|background-color:{{if empty|{{{background|}}}|{{{bgcolour|}}}}}|background-color:#E0CCFF}}; color:inherit; | labelstyle = max-width:{{if empty|{{{label_width|}}}|11em}}; | autoheaders = y | header1 = Discovery{{{discovery_ref|}}} | label2 = [[List of minor planet discoverers|Discovered&nbsp;by]] | data2 = {{{discoverer|}}} | label3 = Indawo yokuvubukulwa | data3 = {{{discovery_site|}}} | label4 = Usuku&nbsp;lokuvubukulwa | data4 = {{{discovered|}}} | label5 = {{longitem|Indlela yokusihlonga}} | data5 = {{{discovery_method|}}} | header10 = {{#if:{{{extrasolarplanet|}}}{{{Imizulendle|}}}|[[Exoplanet#Nomenclature|Designations]]|Amagama}} | label11 = {{longitem|{{#if:{{{minorplanet|}}}|<!--[[Minor-planet designation|MPC&nbsp;designation]]-->|Igama}}}} | data11 = {{#if:{{{minorplanet|}}}||{{if empty|{{{mpc_name|}}}|{{{mp_name|}}}}}}} | label12 = Ukuphinyiswa | data12 = {{if empty|{{{pronounce|}}}|{{{pronounced|}}}}} | label13 = {{longitem|Eqanjwe ngakho}} | data13 = {{{named_after|}}} | label14 = {{longitem|{{#if:{{{minorplanet|}}}|[[Provisional designation in astronomy|Alternative designations]]|[[Provisional designation in astronomy|Amanye amagama]]}}}} | data14 = {{{alt_names|}}} | label15 = {{longitem|[[Minor planet#Populations|Minor&nbsp;planet category]]}} | data15 = {{{mp_category|}}} | label16 = [[List of adjectivals and demonyms of astronomical bodies|Iziphawulo]] | data16 = {{if empty|{{{adjectives|}}}|{{{adjective|}}}}} | label17 = [[Planet symbols|Uphawu]] | data17 = {{{symbol|}}} | header20 = [[Osculating orbit|Izinkondolo zozungezo]]{{#ifeq:{{{barycentric|}}}|yes|&nbsp;[[Barycenter#Inside or outside the Sun?|(barycentric)]]}}{{{orbit_ref|}}} | data21 = {{{orbit_diagram|}}} | data22 = {{#if:{{{epoch|}}} |[[Epoch (astronomy)|Ikhathi]] {{{epoch}}}}} | data23 = {{#if:{{{uncertainty|}}} | [[Uncertainty parameter]] {{{uncertainty}}}}} | label24 = [[Observation arc]] | data24 = {{{observation_arc|}}} | label25 = Usuku langaphambilini | data25 = {{{earliest_precovery_date|}}} | label26 = {{#switch:{{{apsis}}} |apsis|gee|barion|center|centre|(apsis)=[[Apsis|Apo{{{apsis}}}]] |[[Perihelion and aphelion|Ku{{if empty|{{{apsis|}}}|dana}}]]}} | data26 = {{{aphelion|}}} | label27 = [[Perihelion and aphelion|Fuphi{{if empty|{{{apsis|}}}|nelanga}}]] | data27 = {{{perihelion|}}} | label28 = [[Apsis|eFuphi]] | data28 = {{{periapsis|}}} | label29 = Kude nomhlaba | data29 = {{{apoapsis|}}} | label30 = [[Apsis|Periastron]] | data30 = {{{periastron|}}} | label31 = [[Apsis|Apoastron]] | data31 = {{{apoastron|}}} | label32 = {{longitem|[[Semi-major and semi-minor axes|Ibanga elilangiselwe]]}} | data32 = {{{semimajor|}}} | label33 = {{longitem|Umugqazinga wozungezo}} | data33 = {{{mean_orbit_radius|}}} | label34 = Ubukhophelana | data34 = {{{eccentricity|}}} | label35 = {{longitem|[[Orbital period|Inkathi yozungezo (elangeni)]]}} | data35 = {{{period|}}} | label36 = {{longitem|[[Orbital period|Orbital period (kobukayo)]]}} | data36 = {{{synodic_period|}}} | label37 = {{longitem|Average [[orbital speed]]}} | data37 = {{{avg_speed|}}} | label38 = {{longitem|[[Mean anomaly#Mean anomaly at epoch|Mean anomaly]]}} | data38 = {{{mean_anomaly|}}} | label39 = {{longitem|[[Mean motion]]}} | data39 = {{{mean_motion|}}} | label40 = [[Orbital inclination|Umthambeko]] | data40 = {{{inclination|}}} | label41 = {{longitem|[[Ibanga lengoni]]}} | data41 = {{{angular_dist|}}} | label42 = {{longitem|[[Longitude of the ascending node|Longitude&nbsp;of ascending&nbsp;node]]}} | data42 = {{{asc_node|}}} | label43 = {{longitem|[[Longitude of the periapsis|Longitude&nbsp;of]] [[Apsis|peri{{if empty|{{{apsis|}}}|helion}}]]}} | data43 = {{{long_periastron|}}} | label44 = {{longitem|[[Apsis|Time&nbsp;of peri{{if empty|{{{apsis|}}}|helion}}]]}} | data44 = {{{time_periastron|}}} | label45 = {{longitem|[[Argument of periapsis|Argument&nbsp;of peri{{if empty|{{{apsis|}}}|helion}}]]}} | data45 = {{{arg_peri|}}} | label46 = {{nowrap|[[Amplitude|Semi-amplitude]]}} | data46 = {{{semi-amplitude|}}} | label47 = [[Iduna|Idunanbsp;lawo]] | data47 = {{{satellite_of|}}} | label48 = [[Irregular moon#Group|Group]] | data48 = {{{group|}}} | label49 = {{#switch:{{{allsatellites|}}} |yes|true=[[Iduna|Iduna]]|[[Iduna|Aduna]]aziwayo}} | data49 = {{{satellites|}}} | label50 = Inkanyezi | data50 = {{{star|}}} | label51 = Earth&nbsp;[[Minimum orbit intersection distance|MOID]] | data51 = {{{moid|}}} | label52 = Mercury&nbsp;[[Minimum orbit intersection distance|MOID]] | data52 = {{{mercury_moid|}}} | label53 = Venus&nbsp;[[Minimum orbit intersection distance|MOID]] | data53 = {{{venus_moid|}}} | label54 = Mars&nbsp;[[Minimum orbit intersection distance|MOID]] | data54 = {{{mars_moid|}}} | label55 = Jupiter&nbsp;[[Minimum orbit intersection distance|MOID]] | data55 = {{{jupiter_moid|}}} | label56 = Saturn&nbsp;[[Minimum orbit intersection distance|MOID]] | data56 = {{{saturn_moid|}}} | label57 = Uranus&nbsp;[[Minimum orbit intersection distance|MOID]] | data57 = {{{uranus_moid|}}} | label58 = Neptune&nbsp;[[Minimum orbit intersection distance|MOID]] | data58 = {{{neptune_moid|}}} | label59 = [[Tisserand's parameter|T<sub>Jupiter</sub>]] | data59 = {{{tisserand|}}} | header60 = [[Proper orbital elements]]{{{p_orbit_ref|}}} | label61 = {{longitem|Proper [[Semi-major and semi-minor axes|semi-major axis]]}} | data61 = {{#if:{{{p_semimajor|}}} |{{{p_semimajor}}}&nbsp;[[Astronomical unit|AU]]}} | label62 = {{longitem|Proper [[Semi-major and semi-minor axes|semi-major axis]]}} | data62 = {{{p_semimajor_unitless|}}} | label63 = {{longitem|Proper [[Orbital eccentricity|eccentricity]]}} | data63 = {{{p_eccentricity|}}} | label64 = {{longitem|Proper [[Orbital inclination|inclination]]}} | data64 = {{{p_inclination|}}} | label65 = {{longitem|Proper [[mean motion]]}} | data65 = {{#if:{{{p_mean_motion|}}} |{{{p_mean_motion}}}&nbsp;[[Degree (angle)|deg]]{{\}}[[Julian year (astronomy)|yr]]}} | label66 = {{longitem|Proper [[orbital period]]}} | data66 = {{#if:{{{p_mean_motion|}}}|{{#expr:360/{{if empty|{{{p_mean_motion|}}}|1}} round 5}} [[Julian year (astronomy)|yr]]<br />({{#expr:365.25*360/{{if empty|{{{p_mean_motion|}}}|1}} round 3}} [[day|d]]) }} | label67 = {{longitem|Proper [[orbital period]]}} | data67 = {{{p_period_unitless|}}} | label68 = {{longitem|Precession of [[longitude of periapsis|perihelion long.]]}} | data68 = {{#if:{{{perihelion_rate|}}}|{{{perihelion_rate}}}&nbsp;[[Arcsecond|arcsec]]{{\}}[[Julian year (astronomy)|yr]] }} | label69 = {{longitem|Precession of [[Longitude of the ascending node|asc. node]]}} | data69 = {{#if:{{{node_rate|}}}|{{{node_rate}}}&nbsp;[[Arcsecond|arcsec]]{{\}}[[Julian year (astronomy)|yr]]}} | header70 = {{anchor|Infobox Physical characteristics}}{{#if:{{{minorplanet|}}}| [[Standard asteroid physical characteristics|Izinkondolo zoqobo]]|Physical characteristics}}{{{physical_ref|}}} | label71 = [[Mean radius (astronomy)|Imingako]] | data71 = {{{dimensions|}}} | label72 = {{longitem|[[Mean radius (astronomy)|Ibangandilinga]]}} | data72 = {{{mean_diameter|}}} | label73 = {{longitem|[[Mean radius (astronomy)|Umugqazinga ophakathi]]}} | data73 = {{{mean_radius|}}} | label74 = {{longitem|Umugqazinga wenkabazwe}} | data74 = {{{equatorial_radius|}}} | label75 = {{longitem|Umugqazinga wechopho}} | data75 = {{{polar_radius|}}} | label76 = Isicaba | data76 = {{{flattening|}}} | label77 = Ubundilinga | data77 = {{{circumference|}}} | label78 = {{longitem|[[Spheroid#Area|Ububanzi bobuso]]}} | data78 = {{{surface_area|}}} | label79 = [[Ummumatho]] | data79 = {{{volume|}}} | label80 = [[Isisindo]] | data80 = {{{mass|}}} | label81 = {{longitem|Mean [[density]]}} | data81 = {{{density|}}} | label82 = {{longitem|{{#if:{{{minorplanet|}}}|Equatorial [[Standard asteroid physical characteristics#Surface gravity|surface&nbsp;gravity]]|[[Surface gravity]]}}}} | data82 = {{{surface_grav|}}} | label83 = {{longitem|[[Moment of inertia factor]]}} | data83 = {{{moment_of_inertia_factor|}}} | label84 = {{longitem|{{#if:{{{minorplanet|}}} |Equatorial [[escape velocity]] |[[Escape velocity]]}}}} | data84 = {{{escape_velocity|}}} | label85 = {{longitem|[[Synodic rotation period]]}} | data85 = {{{rotation|}}} | label86 = {{longitem|[[Sidereal rotation period]]}} | data86 = {{{sidereal_day|}}} | label87 = {{longitem|Equatorial rotation&nbsp;velocity}} | data87 = {{{rot_velocity|}}} | label88 = {{longitem|[[Axial tilt]]}} | data88 = {{{axial_tilt|}}} | label89 = {{longitem|North&nbsp;pole {{nowrap|[[right ascension]]}}}} | data89 = {{{right_asc_north_pole|}}} | label90 = {{longitem|North&nbsp;pole [[declination]]}} | data90 = {{{declination|}}} | label91 = {{longitem|Pole [[Ecliptic coordinate system|ecliptic longitude]]}} | data91 = {{{pole_ecliptic_lon|}}} | label92 = {{longitem|Pole [[Ecliptic coordinate system|ecliptic latitude]]}} | data92 = {{{pole_ecliptic_lat|}}} | label93 = {{#if:{{{minorplanet|}}} |{{longitem|[[Geometric albedo]]}} |[[Albedo]]}} | data93 = {{{albedo|}}} | label94 = [[Temperature]] | data94 = {{{single_temperature|}}} | data100 = {{#if:{{{temp_name1|}}}{{{temp_name2|}}}{{{temp_name3|}}}{{{temp_name4|}}}| <table style="border-spacing: 0px; width:100%; border:none; margin:0; line-height:1.2em; white-space:nowrap"><tr> <th style="width:33%; padding-right:0.25em; text-align:left">Surface [[temperature|temp.]]</th> <th style="padding-right:0.25em; text-align:center">min</th> <th style="padding-right:0.25em; text-align:center">mean</th> <th style="padding-right:0.25em; text-align:center">max</th> </tr>{{#if:{{{temp_name1|}}}|<tr> <th style="padding-left:1.0em">{{{temp_name1}}}</th> <td style="text-align:center">{{{min_temp_1|}}}</td> <td style="text-align:center">{{{mean_temp_1|}}}</td> <td style="text-align:center">{{{max_temp_1|}}}</td> </tr>}}{{#if:{{{temp_name2|}}}|<tr> <th style="padding-left:1.0em">{{{temp_name2}}}</th> <td style="text-align:center">{{{min_temp_2|}}}</td> <td style="text-align:center">{{{mean_temp_2|}}}</td> <td style="text-align:center">{{{max_temp_2|}}}</td> </tr>}}{{#if:{{{temp_name3|}}}|<tr> <th style="padding-left:1.0em">{{{temp_name3}}}</th> <td style="text-align:center">{{{min_temp_3|}}}</td> <td style="text-align:center">{{{mean_temp_3|}}}</td> <td style="text-align:center">{{{max_temp_3|}}}</td> </tr>}}{{#if:{{{temp_name4|}}}|<tr> <th style="padding-left:1.0em">{{{temp_name4}}}</th> <td style="text-align:center">{{{min_temp_4|}}}</td> <td style="text-align:center">{{{mean_temp_4|}}}</td> <td style="text-align:center">{{{max_temp_4|}}}</td> </tr>}} </table>}} | label101 = Surface [[absorbed dose]] [[Dose rate|rate]] | data101 = {{{surface_absorbed_dose_rate|}}} | label102 = Surface [[equivalent dose]] [[Dose rate|rate]] | data102 = {{{surface_equivalent_dose_rate|}}} | label103 = {{longitem|{{#if:{{{minorplanet|}}}|[[Asteroid spectral types|Spectral type]]|Spectral type}}}} | data103 = {{{spectral_type|}}} | label104 = {{longitem|[[Asteroid family]]}} | data104 = {{{family|}}} | label105 = {{longitem|[[Apparent magnitude]]}} | data105 = {{{magnitude|}}} | label106 = {{longitem|[[Absolute magnitude#Solar System bodies (H)|Absolute magnitude&nbsp;''(H)'']]}} | data106 = {{{abs_magnitude|}}} | label107 = {{longitem|[[Angular diameter]]}} | data107 = {{{angular_size|}}} | header110 = Atmosphere{{{atmosphere_ref|}}} | label111 = {{longitem|Surface [[Atmospheric pressure|pressure]]}} | data111 = {{{surface_pressure|}}} | label112 = {{longitem|[[Scale height]]}} | data112 = {{{scale_height|}}} | label113 = [[Atmospheric chemistry#Atmospheric composition|Composition by volume]] | data113 = {{{atmosphere_composition|}}} | below = <includeonly>{{#if:{{{note|}}}||{{reflist|group="note"}} }}</includeonly> }}{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using infobox planet with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Infobox planet]] with unknown parameter "_VALUE_"|ignoreblank=y| abs_magnitude | adjective | adjectives | albedo | allsatellites | alt_names | angular_dist | angular_size | aphelion | apoapsis | apsis | apoastron | arg_peri | asc_node | atmosphere | atmosphere_composition | atmosphere_ref | avg_speed | axial_tilt | background | barycentric | bgcolour | caption | circumference | declination | density | dimensions | discovered | discoverer | discovery_method | discovery_ref | discovery_site | earliest_precovery_date | eccentricity | epoch | equatorial_radius | escape_velocity | exosolar planets | extrasolarplanet | family | flattening | group | image | image_alt | image_scale | inclination | jupiter_moid | label_width | long_periastron | magnitude | mars_moid | mass | max_temp_1 | max_temp_2 | max_temp_3 | max_temp_4 | mean_anomaly | mean_diameter | mean_motion | mean_orbit_radius | mean_radius | mean_temp_1 | mean_temp_2 | mean_temp_3 | mean_temp_4 | mercury_moid | min_temp_1 | min_temp_2 | min_temp_3 | min_temp_4 | minorplanet | moid | moment_of_inertia_factor | mp_category | mp_name | mpc_name | name | named_after | neptune_moid | node_rate | note | observation_arc | orbit_diagram | orbit_ref | p_eccentricity | p_inclination | p_mean_motion | p_orbit_ref | p_period_unitless | p_semimajor | p_semimajor_unitless | periapsis | periastron | perihelion | perihelion_rate | period | physical_ref | polar_radius | pole_ecliptic_lat | pole_ecliptic_lon | pronounce | pronounced | right_asc_north_pole | rot_velocity | rotation | satellite_of | satellites | saturn_moid | scale_height | semi-amplitude | semimajor | sidereal_day | single_temperature | spectral_type | star | surface_area | surface_grav | surface_pressure | surface_absorbed_dose_rate | surface_equivalent_dose_rate | symbol | synodic_period | temp_name1 | temp_name2 | temp_name3 | temp_name4 | time_periastron | tisserand | uncertainty | uranus_moid | venus_moid | volume }}{{#invoke:Check for conflicting parameters|check | template = [[Template:Infobox planet]] | cat = {{main other|Category:Pages using infobox planet with conflicting parameters}} | background; bgcolour | mpc_name; mp_name | pronounce; pronounced | adjectives; adjective | p_semimajor; p_semimajor_unitless | p_mean_motion; p_period_unitless }}<noinclude> {{documentation}} </noinclude> 2rratysc0htll9b8dttoepbnz8xcqwt Template:Infobox event 10 34723 126078 2026-07-15T10:14:39Z Fongcwele 16873 Created page with "{{#invoke:infobox|infoboxTemplate | bodyclass = {{#if:{{{nongregorian|}}}||vevent}} | subheader = {{#if:{{{part_of|}}}|Part of {{{part_of|}}}}} | child = {{if empty|{{{child|}}}|no}} | titleclass = summary | title = {{if empty | {{{name|}}} | {{#ifeq:{{{child|}}}|yes||{{PAGENAMEBASE}}}} }} | image1 = {{#invoke:InfoboxImage|InfoboxImage|image={{{logo|}}}|sizedefault=frameless|maxsize=300|size={{{logo_size|}}}|upright={{if empty|{{{logo_upright|}}}|1}}|al..." 126078 wikitext text/x-wiki {{#invoke:infobox|infoboxTemplate | bodyclass = {{#if:{{{nongregorian|}}}||vevent}} | subheader = {{#if:{{{part_of|}}}|Part of {{{part_of|}}}}} | child = {{if empty|{{{child|}}}|no}} | titleclass = summary | title = {{if empty | {{{name|}}} | {{#ifeq:{{{child|}}}|yes||{{PAGENAMEBASE}}}} }} | image1 = {{#invoke:InfoboxImage|InfoboxImage|image={{{logo|}}}|sizedefault=frameless|maxsize=300|size={{{logo_size|}}}|upright={{if empty|{{{logo_upright|}}}|1}}|alt={{{logo_alt|}}}}} | caption1 = {{{logo_caption|}}} | image2 = {{#invoke:InfoboxImage|InfoboxImage|image={{{image|}}}|size={{{image_size|}}}|sizedefault=frameless|upright={{if empty|{{{image_upright|}}}|1.1}}|thumbtime={{{thumbtime|}}}|alt={{{image_alt|}}}}} | caption2 = {{{image_caption|}}} | imagestyle = {{#if:{{{image_caption|}}}|border-bottom:#aaa solid 1px}} | image3 = {{#invoke:InfoboxImage|InfoboxImage |image={{{map|}}} |size={{{map_size|}}} |sizedefault=250px |alt={{{map_alt|}}} }} | caption3 = {{{map_caption|}}} | image4 = {{#invoke:Location map|infobox_pushpin_map | pushpin_label = {{if empty | {{{pushpin_label|}}} | {{{name|}}} | {{PAGENAMEBASE}} }} | pushpin_mark = Blue_pog.svg | pushpin_mark_size = 9 | coordinates = {{if empty|{{{coordinates|}}}|{{#property:P625}}}} }} | image5 = {{#invoke:Infobox mapframe|autoWithCaption | onByDefault = {{#if:{{{map|}}}{{{pushpin_map|}}}{{{child|}}}|no|yes}} }} | datastyle = text-align: left; | headerstyle = background-color:lavender;color:inherit; | label1 = Native&nbsp;name | data1 = {{#if:{{{native_name|}}}|<span {{#if:{{{native_name_lang|}}}|lang="{{{native_name_lang}}}"}}> {{{native_name}}}</span>}} | label2 = English&nbsp;name | data2 = {{{english_name|}}} | label3 = Usuku | data3 = {{{date|}}} | label4 = Isikhathi | data4 = {{{time|}}} {{#if:{{{timezone|}}}|({{{timezone}}})}} | label5 = Ubude besehlakalo | data5 = {{{duration|}}} | label6 = Indawo | data6 = {{{venue|}}} | label7 = Indawo | class7 = location | data7 = {{ubl | {{{location|}}} | {{{coordinates|}}} }} | label9 = Saziwa&nbsp;nangokuthi | data9 = {{{also_known_as|}}} | label10 = Uhlobo | data10 = {{{type|}}} | label11 = Ingqikithi | data11 = {{{theme|}}} | label12 = Imbangela | data12 = {{{cause|}}} | label13 = Isisusa | data13 = {{{motive|}}} | label14 = Ingcwimbi | data14 = {{{target|}}} | label15 = Umgili{{pluralize from text|{{{Abagili|}}}|plural=}} | data15 = {{{perpetrator|}}} | label16 = {{#if:{{{reporter|}}}|Umbiki|First&nbsp;reporter}} | data16 = {{if empty|{{{reporter|}}}|{{{first_reporter|}}}}} | label17 = Isabelomali | data17 = {{{budget|}}} | label18 = Isihameli{{pluralize from text|{{{Izihambeli|}}}|plural=}} | data18 = {{{patrons|}}} | label19 = {{#if:{{{organisers|}}}|Organised|Organized}}&nbsp;by | data19 = {{if empty|{{{organisers|}}}|{{{organizers|}}}}} | label20 = Sathwetshulwa ngu | data20 = {{{filmed_by|}}} | label21 = Abahlanganyeli | data21 = {{{participants|}}} | class21 = attendee | label22 = Iziphumo | data22 = {{{outcome|}}} | class22 = description | label26 = Abagilwa | data26 = {{{casualties|}}} | label27 = Abashona | data27 = {{{deaths|}}} | label28 = Abalimala | data28 = {{{injuries|}}} | label29 = Abalahleka | data29 = {{{missing|}}} | label30 = {{longitem|Umonakalo wempahla}} | data30 = {{{property_damage|}}} | label31 = Umgcwabo | data31 = {{{burial|}}} | label32 = Abakhwebuka | data32 = {{{displaced|}}} | label33 = Inquiries | data33 = {{{inquiries|}}} | label34 = Inquest | data34 = {{{inquest|}}} | label35 = Coroner | data35 = {{{coroner|}}} | label36 = Ababoshwa | data36 = {{{arrests|}}} | label37 = Abasolwayo | data37 = {{{suspects|}}} | label38 = Abamanglelwa | data38 = {{{accused|}}} | label39 = Abalahlwa icala | data39 = {{{convicted|}}} | label40 = Amacala | data40 = {{{charges|}}} | label41 = Ukuqulwa kwecala | data41 = {{{trial|}}} | label42 = Isigibo | data42 = {{{verdict|}}} | label43 = Agwetshiwe | data43 = {{{convictions|}}} | label44 = Isigwebo | data44 = {{{sentence|}}} | label45 = Publication&nbsp;bans | data45 = {{{publication_bans|}}} | label46 = Litigation | data46 = {{{litigation|}}} | label47 = Izindodo | data47 = {{{awards|}}} | label48 = Footage | data48 = {{{footage|}}} | label49 = {{{custom_label|}}} | data49 = {{#if:{{{custom_label|}}}|{{{custom_data|}}}}} | label50 = {{{custom_label1|}}} | data50 = {{#if:{{{custom_label1|}}}|{{{custom_data1|}}}}} | label51 = {{{custom_label2|}}} | data51 = {{#if:{{{custom_label2|}}}|{{{custom_data2|}}}}} | label52 = Isizindalwebu | data52 = {{{website|}}} | data53 = {{{module|}}} | belowstyle = border-top: #aaa 1px solid; | below = {{{notes|}}} }}{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using infobox event with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Infobox event]] with unknown parameter "_VALUE_"|ignoreblank=y|mapframe_args=y|pushpin_map_args=y| accused | also_known_as | arrests | awards | budget | burial | casualties | cause | charges | child | convicted | convictions | coordinates | coroner | custom_data | custom_data1 | custom_data2 | custom_label | custom_label1 | custom_label2 | date | deaths | displaced | duration | english_name | filmed_by | first_reporter | footage | image | image_alt | image_caption | image_size | image_upright | injuries | inquest | inquiries | litigation | location | logo | logo_alt | logo_caption | logo_size | logo_upright | map | map_alt | map_caption | map_size | missing | module | motive | name | native_name | native_name_lang | nongregorian | notes | organisers | organizers | outcome | part_of | participants | patrons | perpetrator | property_damage | publication_bans | reporter | sentence | suspects | target | theme | thumbtime | time | timezone | trial | type | venue | verdict | website }}{{#invoke:Check for conflicting parameters|check | template = [[Template:Infobox event]] | cat = {{main other|Category:Pages using infobox event with conflicting parameters}} | reporter; first_reporter | organisers; organizers }}<noinclude> {{Documentation}} <!-- please add category links to the /doc sub-page, not here --> </noinclude> qdek1vgv2ow7uu8dylwknlyx90la070 Module:Mapframe 828 34724 126079 2026-07-15T10:17:06Z Fongcwele 16873 Created page with "-- Note: Originally written on English Wikipedia at https://en.wikipedia.org/wiki/Module:Mapframe --[[---------------------------------------------------------------------------- ##### Localisation (L10n) settings ##### Replace values in quotes ("") with localised values ----------------------------------------------------------------------------]]-- local L10n = {} local wb = mw.wikibase -- Modue dependencies local parser -- local copy of https://www.mediawiki.org/w..." 126079 Scribunto text/plain -- Note: Originally written on English Wikipedia at https://en.wikipedia.org/wiki/Module:Mapframe --[[---------------------------------------------------------------------------- ##### Localisation (L10n) settings ##### Replace values in quotes ("") with localised values ----------------------------------------------------------------------------]]-- local L10n = {} local wb = mw.wikibase -- Modue dependencies local parser -- local copy of https://www.mediawiki.org/wiki/Module:WikitextParser loaded lazily -- "strict" should not be used, at least until all other modules which require this module are not using globals. -- Template parameter names (unnumbered versions only) -- Specify each as either a single string, or a table of strings (aliases) -- Aliases are checked left-to-right, i.e. `{ "one", "two" }` is equivalent to using `{{{one| {{{two|}}} }}}` in a template L10n.para = { display = "display", type = "type", id = { "id", "ids" }, from = "from", raw = "raw", title = "title", description = "description", strokeColor = { "stroke-color", "stroke-colour" }, strokeWidth = "stroke-width", strokeOpacity = "stroke-opacity", fill = "fill", fillOpacity = "fill-opacity", coord = "coord", marker = "marker", markerColor = { "marker-color", "marker-colour" }, markerSize = "marker-size", radius = { "radius", "radius_m" }, radiusKm = "radius_km", radiusFt = "radius_ft", radiusMi = "radius_mi", edges = "edges", text = "text", icon = "icon", zoom = "zoom", frame = "frame", plain = "plain", frameWidth = "frame-width", frameHeight = "frame-height", frameCoordinates= { "frame-coordinates", "frame-coord" }, frameLatitude = { "frame-lat", "frame-latitude" }, frameLongitude = { "frame-long", "frame-longitude" }, frameAlign = "frame-align", switch = "switch", overlay = "overlay", overlayBorder = "overlay-border", overlayHorizontalAlignment = "overlay-horizontal-alignment", overlayVerticalAlignment = "overlay-vertical-alignment", overlayHorizontalOffset = "overlay-horizontal-offset", overlayVerticalOffset = "overlay-vertical-offset" } -- Names of other templates this module can extract coordinates from L10n.template = { templates = { -- The coord template, as well as templates with output that contains {{coord}} "Coord", "Coord/sandbox", "NRHP row", "NRHP row/sandbox", "WikidataCoord", "WikidataCoord/sandbox", "Wikidatacoord", "Wikidata coord" }, modules = { -- The coordinates module, as well as modules with output that contains {{coord}} "Coordinates", "Coordinates/sandbox", "WikidataCoord", "WikidataCoord/sandbox" } } -- Error messages L10n.error = { badDisplayPara = "Invalid display parameter", noCoords = "Coordinates must be specified on Wikidata or in |" .. ( type(L10n.para.coord)== 'table' and L10n.para.coord[1] or L10n.para.coord ) .. "=", wikidataCoords = "Coordinates not found on Wikidata", noCircleCoords = "Circle centre coordinates must be specified, or available via Wikidata", negativeRadius = "Circle radius must be a positive number", noRadius = "Circle radius must be specified", negativeEdges = "Circle edges must be a positive number", noSwitchPara = "Found only one switch value in |" .. ( type(L10n.para.switch)== 'table' and L10n.para.switch[1] or L10n.para.switch ) .. "=", oneSwitchLabel = "Found only one label in |" .. ( type(L10n.para.switch)== 'table' and L10n.para.switch[1] or L10n.para.switch ) .. "=", noSwitchLists = "At least one parameter must have a SWITCH: list", switchMismatches = "All SWITCH: lists must have the same number of values", -- "%s" and "%d" tokens will be replaced with strings and numbers when used oneSwitchValue = "Found only one switch value in |%s=", fewerSwitchLabels = "Found %d switch values but only %d labels in |" .. ( type(L10n.para.switch)== 'table' and L10n.para.switch[1] or L10n.para.switch ) .. "=", noNamedCoords = "No named coordinates found in %s" } -- Other strings L10n.str = { -- valid values for display parameter, e.g. (|display=inline) or (|display=title) or (|display=inline,title) or (|display=title,inline) inline = "inline", title = "title", dsep = ",", -- separator between inline and title (comma in the example above) -- valid values for type parameter line = "line", -- geoline feature (e.g. a road) shape = "shape", -- geoshape feature (e.g. a state or province) shapeInverse = "shape-inverse", -- geomask feature (the inverse of a geoshape) data = "data", -- geoJSON data page on Commons point = "point", -- single point feature (coordinates) circle = "circle", -- circular area around a point named = "named", -- all named coordinates in an article or section -- Keyword to indicate a switch list. Must NOT use the special characters ^$()%.[]*+-? switch = "SWITCH", -- valid values for icon, frame, and plain parameters affirmedWords = ' '..table.concat({ "add", "added", "affirm", "affirmed", "include", "included", "on", "true", "yes", "y" }, ' ')..' ', declinedWords = ' '..table.concat({ "decline", "declined", "exclude", "excluded", "false", "none", "not", "no", "n", "off", "omit", "omitted", "remove", "removed" }, ' ')..' ' } -- Default values for parameters L10n.defaults = { display = L10n.str.inline, text = "Map", frameWidth = "300", frameHeight = "200", frameAlign = "right", markerColor = "5E74F3", markerSize = nil, strokeColor = "#ff0000", strokeWidth = 6, edges = 32, -- number of edges used to approximate a circle overlayBorder = "1px solid white", overlayHorizontalAlignment = "right", overlayHorizontalOffset = "0", overlayVerticalAlignment = "bottom", overlayVerticalOffset = "0" } -- #### End of L10n settings #### --[[---------------------------------------------------------------------------- Utility methods ----------------------------------------------------------------------------]]-- local util = {} --[[ Looks up a parameter value based on the id (a key from the L10n.para table) and optionally a suffix, for parameters that can be suffixed (e.g. type2 is type with suffix 2). @param {table} args key-value pairs of parameter names and their values @param {string} param_id id for parameter name (key from the L10n.para table) @param {string} [suffix] suffix for parameter name @returns {string|nil} parameter value if found, or nil if not found ]]-- function util.getParameterValue(args, param_id, suffix) suffix = suffix or '' if type( L10n.para[param_id] ) ~= 'table' then return args[L10n.para[param_id]..suffix] end for _i, paramAlias in ipairs(L10n.para[param_id]) do if args[paramAlias..suffix] then return args[paramAlias..suffix] end end return nil end --[[ Trim whitespace from args, and remove empty args. Also fix control characters. @param {table} argsTable @returns {table} trimmed args table ]]-- function util.trimArgs(argsTable) local cleanArgs = {} for key, val in pairs(argsTable) do if type(key) == 'string' and type(val) == 'string' then val = val:match('^%s*(.-)%s*$') if val ~= '' then -- control characters inside json need to be escaped, but stripping them is simpler -- See also T214984 -- However, *don't* strip control characters from wikitext (text or description parameters) or you'll break strip markers -- Alternatively it might be better to only strip control char from raw parameter content if util.matchesParam('text', key) or util.matchesParam('description', key, key:gsub('^%D+(%d+)$', '%1') ) then cleanArgs[key] = val else cleanArgs[key] = val:gsub('%c',' ') end end else cleanArgs[key] = val end end return cleanArgs end --[[ Check if a parameter name matches an unlocalized parameter key @param {string} key - the unlocalized parameter name to search through @param {string} name - the localized parameter name to check @param {string|nil} - an optional suffix to apply to the value(s) from the localization key @returns {boolean} true if the name matches the parameter, false otherwise ]]-- function util.matchesParam(key, name, suffix) local param = L10n.para[key] suffix = suffix or '' if type(param) == 'table' then for _, v in pairs(param) do if (v .. suffix) == name then return true end end return false end return ((param .. suffix) == name) end --[[ Check if a value is affirmed (one of the values in L10n.str.affirmedWords) @param {string} val Value to be checked @returns {boolean} true if affirmed, false otherwise ]]-- function util.isAffirmed(val) if not(val) then return false end return string.find(L10n.str.affirmedWords, ' '..val..' ', 1, true ) and true or false end --[[ Check if a value is declined (one of the values in L10n.str.declinedWords) @param {string} val Value to be checked @returns {boolean} true if declined, false otherwise ]]-- function util.isDeclined(val) if not(val) then return false end return string.find(L10n.str.declinedWords , ' '..val..' ', 1, true ) and true or false end --[[ Check if the name of a template matches the known coord templates or wrappers (in L10n.template.templates and L10n.template.modules). The name is normalised when checked, so e.g. the names "Coord", "coord", and " Coord" all return true. @param {string} name @returns {boolean} true if it is a coord template or wrapper, false otherwise ]]-- function util.isCoordTemplateOrWrapper(name) name = mw.text.trim(name) local modName = mw.ustring.gsub(name, '#invoke:', '') local inputTitle = mw.title.new(modName, (name ~= modName) and 'Module' or 'Template') if not inputTitle then return false end -- Create (or reuse) mw.title objects for each known coord template/wrapper. -- Stored in L10n.template.title so that they don't need to be recreated -- each time this function is called if not L10n.template.titles then L10n.template.titles = {} for _, v in pairs(L10n.template.templates) do table.insert(L10n.template.titles, mw.title.new(v, 'Template')) end for _, v in pairs(L10n.template.modules) do table.insert(L10n.template.titles, mw.title.new(v, 'Module')) end end for _, templateTitle in pairs(L10n.template.titles) do if mw.title.equals(inputTitle, templateTitle) then return true end end return false end --[[ Recursively extract coord templates which have a name parameter. @param {string} wikitext @returns {table} table sequence of coord templates ]]-- function util.extractCoordTemplates(wikitext) local output = {} local templates = mw.ustring.gmatch(wikitext, '{%b{}}') for template in templates do local templateName = mw.ustring.match(template, '{{([^}|]+)') local nameParam = mw.ustring.match(template, "|%s*name%s*=%s*[^}|]+") if util.isCoordTemplateOrWrapper(templateName) then if nameParam then table.insert(output, template) end elseif mw.ustring.find(mw.ustring.sub(template, 2), "{{") then local subOutput = util.extractCoordTemplates(mw.ustring.sub(template, 2)) for _, t in pairs(subOutput) do table.insert(output, t) end end end -- ensure coords are not using title display for k, v in pairs(output) do output[k] = mw.ustring.gsub(v, "|%s*display%s*=[^|}]+", "|display=inline") end return output end --[[ Gets all named coordiates from a page or a section of a page. @param {string|nil} page Page name, or name#section, to get named coordinates from. If the name is omitted, i.e. #section or nil or empty string, then the current page will be used. @returns {table} sequence of {coord, name, description} tables where coord is the coordinates in a format suitable for #util.parseCoords, name is a string, and description is a string (coordinates in a format suitable for displaying to the reader). If for some reason the name can't be found, the description is nil and the name contains display-format coordinates. @throws {L10n.error.noNamedCoords} if no named coordinates are found. ]]-- function util.getNamedCoords(page) local parts = mw.text.split(page or "", "#", true) local name = parts[1] == "" and mw.title.getCurrentTitle().prefixedText or parts[1] local section = parts[2] local title = mw.title.new(name) if title.isRedirect then title = title.redirectTarget end local pageWikitext = title:getContent() if section then if parser == nil then -- load [[Module:WikitextParser]] lazily so it is only transcluded on pages that use it parser = require("Module:WikitextParser") end pageWikitext = parser.getSection(pageWikitext, section) or '' end local coordTemplates = util.extractCoordTemplates(pageWikitext) if #coordTemplates == 0 then error(string.format(L10n.error.noNamedCoords, page or name), 0) end local frame = mw.getCurrentFrame() local sep = "________" local expandedContent = frame:preprocess(table.concat(coordTemplates, sep)) local expandedTemplates = mw.text.split(expandedContent, sep) local namedCoords = {} for _, expandedTemplate in pairs(expandedTemplates) do local coord = mw.ustring.match(expandedTemplate, "<span class=\"geo%-dec\".->(.-)</span>") if coord then local coordname = ( -- name specified by a wrapper template, e.g [[Article|Name]] mw.ustring.match(expandedTemplate, "<span class=\"mapframe%-coord%-name\">(.-)</span>") or -- name passed into coord template mw.ustring.match(expandedTemplate, "<span class=\"fn org\">(.-)</span>") or -- default to the coordinates if the name can't be retrieved coord ) local description = coordname ~= coord and coord table.insert(namedCoords, { coord=mw.ustring.gsub(coord, "[° ]", "_"), name=coordname, description=description }) end end if #namedCoords == 0 then error(string.format(L10n.error.noNamedCoords, page or name), 0) end return namedCoords end --[[ Parse coordinate values from the params passed in a GeoHack url (such as //tools.wmflabs.org/geohack/geohack.php?pagename=Example&params=1_2_N_3_4_W_ or //tools.wmflabs.org/geohack/geohack.php?pagename=Example&params=1.23_S_4.56_E_ ) or non-url string in the same format (such as `1_2_N_3_4_W_` or `1.23_S_4.56_E_`) @param {string} coords string containing coordinates @returns {number, number} latitude, longitude ]]-- function util.parseCoords(coords) local coordsPatt if mw.ustring.find(coords, "params=", 1, true) then -- prevent false matches from page name, e.g. ?pagename=Lorem_S._Ipsum coordsPatt = 'params=([_%.%d]+[NS][_%.%d]+[EW])' else -- not actually a geohack url, just the same format coordsPatt = '[_%.%d]+[NS][_%.%d]+[EW]' end local parts = mw.text.split((mw.ustring.match(coords, coordsPatt) or ''), '_') local lat_d = tonumber(parts[1]) assert(lat_d, "Unable to get latitude from input '"..coords.."'.") local lat_m = tonumber(parts[2]) -- nil if coords are in decimal format local lat_s = lat_m and tonumber(parts[3]) -- nil if coords are either in decimal format or degrees and minutes only local lat = lat_d + (lat_m or 0)/60 + (lat_s or 0)/3600 if parts[#parts/2] == 'S' then lat = lat * -1 end local long_d = tonumber(parts[1+#parts/2]) assert(long_d, "Unable to get longitude from input '"..coords.."'.") local long_m = tonumber(parts[2+#parts/2]) -- nil if coords are in decimal format local long_s = long_m and tonumber(parts[3+#parts/2]) -- nil if coords are either in decimal format or degrees and minutes only local long = long_d + (long_m or 0)/60 + (long_s or 0)/3600 if parts[#parts] == 'W' then long = long * -1 end return lat, long end --[[ Get coordinates from a Wikidata item @param {string} item_id Wikidata item id (Q number) @returns {number, number} latitude, longitude @throws {L10n.error.noCoords} if item_id is invalid or the item does not exist @throws {L10n.error.wikidataCoords} if the the item does not have a P625 statement (coordinates), or it is set to "no value" ]]-- function util.wikidataCoords(item_id) if not (item_id and wb.isValidEntityId(item_id) and wb.entityExists(item_id)) then error(L10n.error.noCoords, 0) end local coordStatements = wb.getBestStatements(item_id, 'P625') if not coordStatements or #coordStatements == 0 then error(L10n.error.wikidataCoords, 0) end local hasNoValue = ( coordStatements[1].mainsnak and (coordStatements[1].mainsnak.snaktype == 'novalue' or coordStatements[1].mainsnak.snaktype == 'somevalue') ) if hasNoValue then error(L10n.error.wikidataCoords, 0) end local wdCoords = coordStatements[1]['mainsnak']['datavalue']['value'] return tonumber(wdCoords['latitude']), tonumber(wdCoords['longitude']) end --[[ Creates a polygon that approximates a circle @param {number} lat Latitude @param {number} long Longitude @param {number} radius Radius in metres @param {number} n Number of edges for the polygon @returns {table} sequence of {latitude, longitude} table sequences, where latitude and longitude are both numbers ]]-- function util.circleToPolygon(lat, long, radius, n) -- n is number of edges -- Based on https://github.com/gabzim/circle-to-polygon, ISC licence local function offset(cLat, cLon, distance, bearing) local lat1 = math.rad(cLat) local lon1 = math.rad(cLon) local dByR = distance / 6378137 -- distance divided by 6378137 (radius of the earth) wgs84 local offet_lat = math.asin( math.sin(lat1) * math.cos(dByR) + math.cos(lat1) * math.sin(dByR) * math.cos(bearing) ) local offet_lon = lon1 + math.atan2( math.sin(bearing) * math.sin(dByR) * math.cos(lat1), math.cos(dByR) - math.sin(lat1) * math.sin(offet_lat) ) return {math.deg(offet_lon), math.deg(offet_lat)} end local coordinates = {}; local i = 0; while i < n do table.insert(coordinates, offset(lat, long, radius, (2*math.pi*i*-1)/n) ) i = i + 1 end table.insert(coordinates, offset(lat, long, radius, 0)) return coordinates end --[[ Get the number of key-value pairs in a table, which might not be a sequence. @param {table} t @returns {number} count of key-value pairs ]]-- function util.tableCount(t) local count = 0 for k, v in pairs(t) do count = count + 1 end return count end --[[ For a table where the values are all tables, returns either the util.tableCount of the subtables if they are all the same, or nil if they are not all the same. @param {table} t @returns {number|nil} count of key-value pairs of subtable, or nil if subtables have different counts ]]-- function util.subTablesCount(t) local count = nil for k, v in pairs(t) do if count == nil then count = util.tableCount(v) elseif count ~= util.tableCount(v) then return nil end end return count end --[[ Splits a list into a table sequence. The items in the list may be separated by commas, or by semicolons (if items may contain commas), or by "###" (if items may contain semicolons). @param {string} listString @returns {table} sequence of list items ]]-- function util.tableFromList(listString) if type(listString) ~= "string" or listString == "" then return nil end local separator = (mw.ustring.find(listString, "###", 0, true ) and "###") or (mw.ustring.find(listString, ";", 0, true ) and ";") or "," local pattern = "%s*"..separator.."%s*" return mw.text.split(listString, pattern) end -- Boolean in outer scope indicating if Kartographer should be able to -- automatically calculate coordinates (see phab:T227402) local coordsDerivedFromFeatures = false; --[[---------------------------------------------------------------------------- Make methods: These take in a table of arguments, and return either a string or a table to be used in the eventual output. ----------------------------------------------------------------------------]]-- local make = {} --[[ Makes content to go inside the maplink or mapframe tag. @param {table} args @returns {string} tag content ]]-- function make.content(args) if util.getParameterValue(args, 'raw') then coordsDerivedFromFeatures = true -- Kartographer should be able to automatically calculate coords from raw geoJSON return util.getParameterValue(args, 'raw') end local content = {} local argsExpanded = {} for k, v in pairs(args) do local index = string.match( k, '^[^0-9]+([0-9]*)$' ) if index ~= nil then local indexNumber if index ~= '' then indexNumber = tonumber(index) else indexNumber = 1 end if argsExpanded[indexNumber] == nil then argsExpanded[indexNumber] = {} end argsExpanded[indexNumber][ string.gsub(k, index, '') ] = v end end for contentIndex, contentArgs in pairs(argsExpanded) do local argType = util.getParameterValue(contentArgs, "type") -- Kartographer automatically calculates coords if geolines/shapes are used (T227402) if not coordsDerivedFromFeatures then coordsDerivedFromFeatures = ( argType == L10n.str.line or argType == L10n.str.shape ) and true or false end if argType == L10n.str.named then local namedCoords = util.getNamedCoords(util.getParameterValue(contentArgs, "from")) local typeKey = type(L10n.para.type) == "table" and L10n.para.type[1] or L10n.para.type local coordKey = type(L10n.para.coord) == "table" and L10n.para.coord[1] or L10n.para.coord local titleKey = type(L10n.para.title) == "table" and L10n.para.title[1] or L10n.para.title local descKey = type(L10n.para.description) == "table" and L10n.para.description[1] or L10n.para.description for _, namedCoord in pairs(namedCoords) do contentArgs[typeKey] = "point" contentArgs[coordKey] = namedCoord.coord contentArgs[titleKey] = namedCoord.name contentArgs[descKey] = namedCoord.description content[#content+1] = make.contentJson(contentArgs) end else content[#content + 1] = make.contentJson(contentArgs) end end --Single item, no array needed if #content==1 then return content[1] end --Multiple items get placed in a FeatureCollection local contentArray = '[\n' .. table.concat( content, ',\n') .. '\n]' return contentArray end --[[ Make coordinates from the coord arg, or the id arg, or the current page's Wikidata item. @param {table} args @param {boolean} [plainOutput] @returns {Mixed} Either: {number, number} latitude, longitude if plainOutput is true; or {table} table sequence of longitude, then latitude (gives the required format for GeoJSON when encoded) ]]-- function make.coords(args, plainOutput) local coords, lat, long local frame = mw.getCurrentFrame() if util.getParameterValue(args, 'coord') then coords = frame:preprocess( util.getParameterValue(args, 'coord') ) lat, long = util.parseCoords(coords) else lat, long = util.wikidataCoords(util.getParameterValue(args, 'id') or wb.getEntityIdForCurrentPage()) end if plainOutput then return lat, long end return {[0] = long, [1] = lat} end --[[ Makes a table of coordinates that approximate a circle. @param {table} args @returns {table} sequence of {latitude, longitude} table sequences, where latitude and longitude are both numbers @throws {L10n.error.noCircleCoords} if centre coordinates are not specified @throws {L10n.error.noRadius} if radius is not specified @throws {L10n.error.negativeRadius} if radius is negative or zero @throws {L10n.error.negativeEdges} if edges is negative or zero ]]-- function make.circleCoords(args) local lat, long = make.coords(args, true) local radius = util.getParameterValue(args, 'radius') if not radius then radius = util.getParameterValue(args, 'radiusKm') and tonumber(util.getParameterValue(args, 'radiusKm'))*1000 if not radius then radius = util.getParameterValue(args, 'radiusMi') and tonumber(util.getParameterValue(args, 'radiusMi'))*1609.344 if not radius then radius = util.getParameterValue(args, 'radiusFt') and tonumber(util.getParameterValue(args, 'radiusFt'))*0.3048 end end end local edges = util.getParameterValue(args, 'edges') or L10n.defaults.edges if not lat or not long then error(L10n.error.noCircleCoords, 0) elseif not radius then error(L10n.error.noRadius, 0) elseif tonumber(radius) <= 0 then error(L10n.error.negativeRadius, 0) elseif tonumber(edges) <= 0 then error(L10n.error.negativeEdges, 0) end return util.circleToPolygon(lat, long, radius, tonumber(edges)) end --[[ Makes JSON data for a feature @param contentArgs args for this feature. Keys must be the non-suffixed version of the parameter names, i.e. use type, stroke, fill,... rather than type3, stroke3, fill3,... @returns {string} JSON encoded data ]]-- function make.contentJson(contentArgs) local data = {} if util.getParameterValue(contentArgs, 'type') == L10n.str.point or util.getParameterValue(contentArgs, 'type') == L10n.str.circle then local isCircle = util.getParameterValue(contentArgs, 'type') == L10n.str.circle data.type = "Feature" data.geometry = { type = isCircle and "LineString" or "Point", coordinates = isCircle and make.circleCoords(contentArgs) or make.coords(contentArgs) } data.properties = { title = util.getParameterValue(contentArgs, 'title') or mw.getCurrentFrame():getParent():getTitle() } if isCircle then -- TODO: This is very similar to below, should be extracted into a function data.properties.stroke = util.getParameterValue(contentArgs, 'strokeColor') or L10n.defaults.strokeColor data.properties["stroke-width"] = tonumber(util.getParameterValue(contentArgs, 'strokeWidth')) or L10n.defaults.strokeWidth local strokeOpacity = util.getParameterValue(contentArgs, 'strokeOpacity') if strokeOpacity then data.properties['stroke-opacity'] = tonumber(strokeOpacity) end local fill = util.getParameterValue(contentArgs, 'fill') if fill then data.properties.fill = fill local fillOpacity = util.getParameterValue(contentArgs, 'fillOpacity') data.properties['fill-opacity'] = fillOpacity and tonumber(fillOpacity) or 0.6 end else -- is a point local markerSymbol = util.getParameterValue(contentArgs, 'marker') or L10n.defaults.marker -- allow blank to be explicitly specified, for overriding infoboxes or other templates with a default value if markerSymbol ~= "blank" then data.properties["marker-symbol"] = markerSymbol end data.properties["marker-color"] = util.getParameterValue(contentArgs, 'markerColor') or L10n.defaults.markerColor data.properties["marker-size"] = util.getParameterValue(contentArgs, 'markerSize') or L10n.defaults.markerSize end else data.type = "ExternalData" if util.getParameterValue(contentArgs, 'type') == L10n.str.data or util.getParameterValue(contentArgs, 'from') then data.service = "page" elseif util.getParameterValue(contentArgs, 'type') == L10n.str.line then data.service = "geoline" elseif util.getParameterValue(contentArgs, 'type') == L10n.str.shape then data.service = "geoshape" elseif util.getParameterValue(contentArgs, 'type') == L10n.str.shapeInverse then data.service = "geomask" end if util.getParameterValue(contentArgs, 'id') or (not (util.getParameterValue(contentArgs, 'from')) and wb.getEntityIdForCurrentPage()) then data.ids = util.getParameterValue(contentArgs, 'id') or wb.getEntityIdForCurrentPage() else data.title = util.getParameterValue(contentArgs, 'from') end data.properties = { stroke = util.getParameterValue(contentArgs, 'strokeColor') or L10n.defaults.strokeColor, ["stroke-width"] = tonumber(util.getParameterValue(contentArgs, 'strokeWidth')) or L10n.defaults.strokeWidth } local strokeOpacity = util.getParameterValue(contentArgs, 'strokeOpacity') if strokeOpacity then data.properties['stroke-opacity'] = tonumber(strokeOpacity) end local fill = util.getParameterValue(contentArgs, 'fill') if fill and (data.service == "geoshape" or data.service == "geomask") then data.properties.fill = fill local fillOpacity = util.getParameterValue(contentArgs, 'fillOpacity') if fillOpacity then data.properties['fill-opacity'] = tonumber(fillOpacity) end end end data.properties.title = util.getParameterValue(contentArgs, 'title') or mw.title.getCurrentTitle().text if util.getParameterValue(contentArgs, 'description') then data.properties.description = util.getParameterValue(contentArgs, 'description') end return mw.text.jsonEncode(data) end --[[ Makes attributes for the maplink or mapframe tag. @param {table} args @param {boolean} [isTitle] Tag is to be displayed in the title of page rather than inline @returns {table<string,string>} key-value pairs of attribute names and values ]]-- function make.tagAttribs(args, isTitle) local attribs = {} if util.getParameterValue(args, 'zoom') then attribs.zoom = util.getParameterValue(args, 'zoom') end if util.isDeclined(util.getParameterValue(args, 'icon')) then attribs.class = "no-icon" end if util.getParameterValue(args, 'type') == L10n.str.point and not coordsDerivedFromFeatures then local lat, long = make.coords(args, 'plainOutput') attribs.latitude = tostring(lat) attribs.longitude = tostring(long) end if util.isAffirmed(util.getParameterValue(args, 'frame')) and not(isTitle) then attribs.width = util.getParameterValue(args, 'frameWidth') or L10n.defaults.frameWidth attribs.height = util.getParameterValue(args, 'frameHeight') or L10n.defaults.frameHeight if util.getParameterValue(args, 'frameCoordinates') then local frameLat, frameLong = util.parseCoords(util.getParameterValue(args, 'frameCoordinates')) attribs.latitude = frameLat attribs.longitude = frameLong else if util.getParameterValue(args, 'frameLatitude') then attribs.latitude = util.getParameterValue(args, 'frameLatitude') end if util.getParameterValue(args, 'frameLongitude') then attribs.longitude = util.getParameterValue(args, 'frameLongitude') end end if not attribs.latitude and not attribs.longitude and not coordsDerivedFromFeatures then local success, lat, long = pcall(util.wikidataCoords, util.getParameterValue(args, 'id') or wb.getEntityIdForCurrentPage()) if success then attribs.latitude = tostring(lat) attribs.longitude = tostring(long) end end if util.getParameterValue(args, 'frameAlign') then attribs.align = util.getParameterValue(args, 'frameAlign') end if util.isAffirmed(util.getParameterValue(args, 'plain')) then attribs.frameless = "1" else attribs.text = util.getParameterValue(args, 'text') or L10n.defaults.text end else attribs.text = util.getParameterValue(args, 'text') or L10n.defaults.text end return attribs end --[[ Makes maplink wikitext that will be located in the top-right of the title of the page (the same place where coords with |display=title are positioned). @param {table} args @param {string} tagContent Content for the maplink tag @returns {string} ]]-- function make.titleOutput(args, tagContent) local titleTag = mw.text.tag('maplink', make.tagAttribs(args, true), tagContent) local spanAttribs = { style = "font-size: small;", id = "mapframe-coordinates" } local indicatorContent = mw.text.tag('span', spanAttribs, titleTag) return mw.getCurrentFrame():extensionTag { name = "indicator", content = indicatorContent, args = { name = "zzz-mapframe" --zzz: show as last indicator } } end --[[ Makes maplink or mapframe wikitext that will be located inline. @param {table} args @param {string} tagContent Content for the maplink tag @returns {string} ]]-- function make.inlineOutput(args, tagContent) local tagName = 'maplink' if util.getParameterValue(args, 'frame') then tagName = 'mapframe' end return mw.text.tag(tagName, make.tagAttribs(args), tagContent) end --[[ Makes the HTML required for the swicther to work, including the templatestyles tag. @param {table} params table sequence of {map, label} tables @param {string} params{}.map Wikitext for mapframe map @param {string} params{}.label Label text for swicther option @param {table} options @param {string} options.alignment "left" or "center" or "right" @param {boolean} options.isThumbnail Display in a thumbnail @param {string} options.width Width of frame, e.g. "200" @param {string} [options.caption] Caption wikitext for thumnail @retruns {string} swicther HTML ]]-- function make.switcherHtml(params, options) options = options or {} local frame = mw.getCurrentFrame() local styles = frame:extensionTag{ name = "templatestyles", args = {src = "Template:Maplink/styles-multi.css"} } local container = mw.html.create("div") :addClass("switcher-container") :addClass("mapframe-multi-container") if options.alignment == "left" or options.alignment == "right" then container:addClass("float"..options.alignment) else -- alignment is "center" container:addClass("center") end for i = 1, #params do container :tag("div") :wikitext(params[i].map) :tag("span") :addClass("switcher-label") :css("display", "none") :wikitext(mw.text.trim(params[i].label)) end if not options.isThumbnail then return styles .. tostring(container) end local classlist = container:getAttr("class") classlist = mw.ustring.gsub(classlist, "%a*"..options.alignment, "") container:attr("class", classlist) local outerCountainer = mw.html.create("div") :addClass("mapframe-multi-outer-container") :addClass("mw-kartographer-container") :addClass("thumb") if options.alignment == "left" or options.alignment == "right" then outerCountainer:addClass("float"..options.alignment) else -- alignment is "center" outerCountainer :addClass("tnone") :addClass("center") end outerCountainer :tag("div") :addClass("thumbinner") :css("width", options.width.."px") :node(container) :node(options.caption and mw.html.create("div") :addClass("thumbcaption") :wikitext(options.caption) ) return styles .. tostring(outerCountainer) end --[[ Makes the HTML required for an overlay map to work tag. @param {string} overlayMap wikitext for the overlay map @param {string} baseMap wikitext for the base map @param {table} options various styling/display options @param {string} options.align "left" or "center" or "right" @param {string|number} options.width Width of the base map, e.g. "300" @param {string|number} options.width Height of the base map, e.g. "200" @param {string} options.border Border style for the overlayed map, e.g. "1px solid white" @param {string} options.horizontalAlignment Horizontal alignment for overlay map, "left" or "right" @param {string|number} options.horizontalOffset Horizontal offset in pixels from the alignment edge, e.g "10" @param {string} options.verticalAlignment Vertical alignment for overlay map, "top" or "bottom" @param {string|number} options.verticalOffset Vertical offset in pixels from the alignment edge, e.g. is "10" @param {boolean} options.isThumbnail Display in a thumbnail @param {string} [options.caption] Caption wikitext for thumnail @retruns {string} HTML for basemap with overlay ]]-- function make.overlayHtml(overlayMap, baseMap, options) options = options or {} local containerFloatClass = "float"..(options.align or "none") if options.align == "center" then containerFloatClass = "center" end local containerStyle = { position = "relative", width = options.width .. "px", height = options.height .. "px", overflow = "hidden" -- mobile/minerva tends to add scrollbars for a couple of pixels } if options.align == "center" then containerStyle["margin-left"] = "auto" containerStyle["margin-right"] = "auto" end local container = mw.html.create("div") :addClass("mapframe-withOverlay-container") :addClass(containerFloatClass) :addClass("noresize") :css(containerStyle) local overlayStyle = { position = "absolute", ["z-index"] = "1", border = options.border or "1px solid white" } if options.horizontalAlignment == "right" then overlayStyle.right = options.horizontalOffset .. "px" else overlayStyle.left = options.horizontalOffset .. "px" end if options.verticalAlignment == "bottom" then overlayStyle.bottom = options.verticalOffset .. "px" else overlayStyle.top = options.verticalOffset .. "px" end local overlayDiv = mw.html.create("div") :css(overlayStyle) :wikitext(overlayMap) container :node(overlayDiv) :wikitext(baseMap) if not options.isThumbnail then return tostring(container) end local classlist = container:getAttr("class") classlist = mw.ustring.gsub(classlist, "%a*"..options.align, "") container:attr("class", classlist) local outerCountainer = mw.html.create("div") :addClass("mapframe-withOverlay-outerContainer") :addClass("mw-kartographer-container") :addClass("thumb") if options.align == "left" or options.align == "right" then outerCountainer:addClass("t"..options.align) else -- alignment is "center" outerCountainer :addClass("tnone") :addClass("center") end outerCountainer :tag("div") :addClass("thumbinner") :css("width", options.width.."px") :node(container) :node(options.caption and mw.html.create("div") :addClass("thumbcaption") :wikitext(options.caption) ) return tostring(outerCountainer) end --[[---------------------------------------------------------------------------- Package to be exported, i.e. methods which will available to templates and other modules. ----------------------------------------------------------------------------]]-- local p = {} -- Entry point for templates function p.main(frame) local parent = frame.getParent(frame) -- Check for overlay option local overlay = util.getParameterValue(parent.args, 'overlay') local hasOverlay = overlay and mw.text.trim(overlay) ~= "" -- Check for switch option local switch = util.getParameterValue(parent.args, 'switch') local isMulti = switch and mw.text.trim(switch) ~= "" -- Create output by choosing method to suit options local output if hasOverlay then output = p.withOverlay(parent.args) elseif isMulti then output = p.multi(parent.args) else output = p._main(parent.args) end -- Preprocess output before returning it return frame:preprocess(output) end -- Entry points for modules function p._main(_args) local args = util.trimArgs(_args) local tagContent = make.content(args) local display = mw.text.split(util.getParameterValue(args, 'display') or L10n.defaults.display, '%s*' .. L10n.str.dsep .. '%s*') local displayInTitle = display[1] == L10n.str.title or display[2] == L10n.str.title local displayInline = display[1] == L10n.str.inline or display[2] == L10n.str.inline local output if displayInTitle and displayInline then output = make.titleOutput(args, tagContent) .. make.inlineOutput(args, tagContent) elseif displayInTitle then output = make.titleOutput(args, tagContent) elseif displayInline then output = make.inlineOutput(args, tagContent) else error(L10n.error.badDisplayPara) end return output end function p.multi(_args) local args = util.trimArgs(_args) if not args[L10n.para.switch] then error(L10n.error.noSwitchPara, 0) end local switchParamValue = util.getParameterValue(args, 'switch') local switchLabels = util.tableFromList(switchParamValue) if #switchLabels == 1 then error(L10n.error.oneSwitchLabel, 0) end local mapframeArgs = {} local switchParams = {} for name, val in pairs(args) do -- Copy to mapframeArgs, if not the switch labels or a switch parameter if val ~= switchParamValue and not string.match(val, "^"..L10n.str.switch..":") then mapframeArgs[name] = val end -- Check if this is a param to switch. If so, store the name and switch -- values in switchParams table. local switchList = string.match(val, "^"..L10n.str.switch..":(.+)") if switchList ~= nil then local values = util.tableFromList(switchList) if #values == 1 then error(string.format(L10n.error.oneSwitchValue, name), 0) end switchParams[name] = values end end if util.tableCount(switchParams) == 0 then error(L10n.error.noSwitchLists, 0) end local switchCount = util.subTablesCount(switchParams) if not switchCount then error(L10n.error.switchMismatches, 0) elseif switchCount > #switchLabels then error(string.format(L10n.error.fewerSwitchLabels, switchCount, #switchLabels), 0) end -- Ensure a plain frame will be used (thumbnail will be built by the -- make.switcherHtml function if required, so that switcher options are -- inside the thumnail) mapframeArgs.plain = "yes" local switcher = {} for i = 1, switchCount do local label = switchLabels[i] for name, values in pairs(switchParams) do mapframeArgs[name] = values[i] end table.insert(switcher, { map = p._main(mapframeArgs), label = "Show "..label }) end return make.switcherHtml(switcher, { alignment = args["frame-align"] or "right", isThumbnail = (args.frame and not args.plain) and true or false, width = args["frame-width"] or L10n.defaults.frameWidth, caption = args.text }) end function p.withOverlay(_args) -- Get and trim wikitext for overlay map local overlayMap = _args.overlay if type(overlayMap) == 'string' then overlayMap = overlayMap:match('^%s*(.-)%s*$') end local isThumbnail = (util.getParameterValue(_args, "frame") and not util.getParameterValue(_args, "plain")) and true or false -- Get base map using the _main function, as a plain map local args = util.trimArgs(_args) args.plain = "yes" local basemap = p._main(args) -- Extract overlay options from args local overlayOptions = { width = util.getParameterValue(args, "frameWidth") or L10n.defaults.frameWidth, height = util.getParameterValue(args, "frameHeight") or L10n.defaults.frameHeight, align = util.getParameterValue(args, "frameAlign") or L10n.defaults.frameAlign, border = util.getParameterValue(args, "overlayBorder") or L10n.defaults.overlayBorder, horizontalAlignment = util.getParameterValue(args, "overlayHorizontalAlignment") or L10n.defaults.overlayHorizontalAlignment, horizontalOffset = util.getParameterValue(args, "overlayHorizontalOffset") or L10n.defaults.overlayHorizontalOffset, verticalAlignment = util.getParameterValue(args, "overlayVerticalAlignment") or L10n.defaults.overlayVerticalAlignment, verticalOffset = util.getParameterValue(args, "overlayVerticalOffset") or L10n.defaults.overlayVerticalOffset, isThumbnail = isThumbnail, caption = util.getParameterValue(args, "text") or L10n.defaults.text } -- Make the HTML for the overlaying maps return make.overlayHtml(overlayMap, basemap, overlayOptions) end -- Entry point for testcase tests p.test = util return p ctsgv4ln5giysy1bit377346v8nejri Template:Module other 10 34725 126081 2026-07-15T10:25:41Z Fongcwele 16873 Created page with "{{safesubst:<noinclude/>#switch: <noinclude><!-- If no or empty "demospace" parameter then detect namespace --></noinclude> {{safesubst:<noinclude/>#if:{{{demospace|}}} | {{safesubst:<noinclude/>lc: {{{demospace}}} }} <noinclude><!-- Use lower case "demospace" --></noinclude> | {{safesubst:<noinclude/>#ifeq:{{safesubst:<noinclude/>NAMESPACE}}|{{safesubst:<noinclude/>ns:Module}} | module | other }} }} | module = {{{module|{{{1|}}}}}} | other | #de..." 126081 wikitext text/x-wiki {{safesubst:<noinclude/>#switch: <noinclude><!-- If no or empty "demospace" parameter then detect namespace --></noinclude> {{safesubst:<noinclude/>#if:{{{demospace|}}} | {{safesubst:<noinclude/>lc: {{{demospace}}} }} <noinclude><!-- Use lower case "demospace" --></noinclude> | {{safesubst:<noinclude/>#ifeq:{{safesubst:<noinclude/>NAMESPACE}}|{{safesubst:<noinclude/>ns:Module}} | module | other }} }} | module = {{{module|{{{1|}}}}}} | other | #default = {{{other|{{{2|}}}}}} }}<noinclude><!--End switch--> {{documentation}} <!-- Add categories to the /doc subpage, not here! --> </noinclude> 6mo4qg9nwfuq6vj2r8irxnjnd71296k Template:Gaps 10 34726 126084 2026-07-15T10:38:09Z Fongcwele 16873 Created page with "<includeonly>{{#invoke:Gaps|main}}</includeonly><noinclude> {{Documentation}} <!-- PLEASE ADD THIS TEMPLATE'S CATEGORIES AND INTERWIKIS TO THE /doc SUBPAGE, THANKS --> </noinclude>" 126084 wikitext text/x-wiki <includeonly>{{#invoke:Gaps|main}}</includeonly><noinclude> {{Documentation}} <!-- PLEASE ADD THIS TEMPLATE'S CATEGORIES AND INTERWIKIS TO THE /doc SUBPAGE, THANKS --> </noinclude> ob3fbxi7z1cdhxnfxneo5ab02yk2e6z Template:Val 10 34727 126085 2026-07-15T10:39:54Z Fongcwele 16873 Created page with "<includeonly>{{safesubst:<noinclude/>#invoke:val|main}}</includeonly><noinclude> {{documentation}} </noinclude>" 126085 wikitext text/x-wiki <includeonly>{{safesubst:<noinclude/>#invoke:val|main}}</includeonly><noinclude> {{documentation}} </noinclude> pyd5z3vtnjv2hvt8nvjbkl8gerasot4 Module:Gaps 828 34728 126086 2026-07-15T10:41:19Z Fongcwele 16873 Created page with "local p = {} local getArgs function p.main(frame) if not getArgs then getArgs = require('Module:Arguments').getArgs end local args = getArgs(frame, {wrappers = 'Template:Gaps'}) local ret = mw.html.create('span') :css({['white-space'] = 'nowrap', ['font-size'] = args.size}) if args.lhs then ret:wikitext(args.lhs .. ' = ') end local gap = string.lower(args.gap or '') local gapSize, gapUnit = string.match(gap,'([%d%.]+)%s*([ep][mnx])') local acc..." 126086 Scribunto text/plain local p = {} local getArgs function p.main(frame) if not getArgs then getArgs = require('Module:Arguments').getArgs end local args = getArgs(frame, {wrappers = 'Template:Gaps'}) local ret = mw.html.create('span') :css({['white-space'] = 'nowrap', ['font-size'] = args.size}) if args.lhs then ret:wikitext(args.lhs .. ' = ') end local gap = string.lower(args.gap or '') local gapSize, gapUnit = string.match(gap,'([%d%.]+)%s*([ep][mnx])') local acceptedUnits = { em = 'em', en = 'en', px = 'px' } gapUnit = acceptedUnits[gapUnit] if gapSize and gapUnit then gap = gapSize..gapUnit else gap = '0.25em' end for k,v in ipairs(args) do if k == 1 then ret:wikitext(v) else ret:tag('span') :css('margin-left',gap) :wikitext(v) end end if args.e then ret :tag('span') :css({['margin-left'] = '0.27em', ['margin-right']= '0.27em'}) :wikitext('×') :done() :wikitext(args.base or '10') :tag('span') :css('display','none') :wikitext('^') :done() :tag('sup') -- the double parentheses here are not redundant. -- they keep the second return value from being passed :wikitext((mw.ustring.gsub(args.e,'-','−'))) :done() end if args.u then ret:wikitext('&nbsp;' .. args.u) end return ret end return p c9ulvvt8huwb88rp1u5dz7cbgyqgyuh Module:Val 828 34729 126087 2026-07-15T10:43:02Z Fongcwele 16873 Created page with "-- For Template:Val, output a number and optional unit. -- Format options include scientific and uncertainty notations. local numdot = '.' -- decimal mark (use ',' for Italian) local numsep = ',' -- group separator (use ' ' for Italian) local mtext = { -- Message and other text that should be localized. ['mt-bad-exponent'] = 'exponent parameter (<b>e</b>)', ['mt-parameter'] = 'parameter ', ['mt-not-number'] = 'is not a valid number', ['mt-c..." 126087 Scribunto text/plain -- For Template:Val, output a number and optional unit. -- Format options include scientific and uncertainty notations. local numdot = '.' -- decimal mark (use ',' for Italian) local numsep = ',' -- group separator (use ' ' for Italian) local mtext = { -- Message and other text that should be localized. ['mt-bad-exponent'] = 'exponent parameter (<b>e</b>)', ['mt-parameter'] = 'parameter ', ['mt-not-number'] = 'is not a valid number', ['mt-cannot-range'] = 'cannot use a range if the first parameter includes "e"', ['mt-need-range'] = 'needs a range in parameter 2', ['mt-should-range'] = 'should be a range', ['mt-cannot-with-e'] = 'cannot be used if the first parameter includes "e"', ['mt-not-range'] = 'does not accept a range', ['mt-cannot-e'] = 'cannot use e notation', ['mt-too-many-parameter'] = 'too many parameters', ['mt-need-number'] = 'need a number after the last parameter because it is a range.', ['mt-ignore-parameter4'] = 'Val parameter 4 ignored', ['mt-val-not-supported'] = 'Val parameter "%s=%s" is not supported', ['mt-invalid-scale'] = 'Unit "%s" has invalid scale "%s"', ['mt-both-u-ul'] = 'unit (<b>u</b>) and unit with link (<b>ul</b>) are both specified, only one is allowed.', ['mt-both-up-upl'] = 'unit per (<b>up</b>) and unit per with link (<b>upl</b>) are both specified, only one is allowed.', } local data_module = 'Module:Val/units' local convert_module = 'Module:Convert' local function valerror(msg, nocat, iswarning) -- Return formatted message text for an error or warning. -- Can append "#FormattingError" to URL of a page with a problem to find it. local anchor = '<span id="FormattingError"></span>' local body, category if nocat or mw.title.getCurrentTitle():inNamespaces(1, 2, 3, 5) then -- No category in Talk, User, User_talk, or Wikipedia_talk. category = '' else category = '[[Category:Pages with incorrect formatting templates use]]' end iswarning = false -- problems are infrequent so try showing large error so editor will notice if iswarning then body = '<sup class="noprint Inline-Template" style="white-space:nowrap;">' .. '[[Template:Val|<span title="' .. msg:gsub('"', '&quot;') .. '">warning</span>]]</sup>' else body = '<strong class="error">' .. 'Error in &#123;&#123;[[Template:val|val]]&#125;&#125;: ' .. msg .. '</strong>' end return anchor .. body .. category end local range_types = { -- No need for '&nbsp;' because nowrap applies to all output. [","] = ", ", ["by"] = " by ", ["-"] = "–", ["–"] = "–", ["and"] = " and ", ["or"] = " or " , ["to"] = " to " , ["x"] = " × ", ["×"] = " × ", ["/"] = "/", } local range_repeat_unit = { -- WP:UNIT wants unit repeated when a "multiply" range is used. ["x"] = true, ["×"] = true, } local function extract_item(index, numbers, arg) -- Extract an item from arg and store the result in numbers[index]. -- If no argument or if argument is valid, return nil (no error); -- otherwise, return an error message. -- The stored result is: -- * a table for a number (empty if there was no specified number); or -- * a string for range text -- Input like 1e3 is regarded as invalid for all except argument 1 -- which accepts e notation as an alternative to the 'e' argument. -- Input group separators are removed. local which = index local function fail(msg) local description if which == 'e' then description = mtext['mt-bad-exponent'] else description = mtext['mt-parameter'] .. which end return description .. ' ' .. (msg or mtext['mt-not-number']) .. '.' end local result = {} local range = range_types[arg] if range then if type(index) == 'number' and (index % 2 == 0) then if index == 2 then if numbers[1] and numbers[1].exp then return fail(mtext['mt-cannot-range']) end numbers.has_ranges = true else if not numbers.has_ranges then return fail(mtext['mt-need-range']) end end numbers[index] = range if range_repeat_unit[arg] then -- Any "repeat" range forces unit (if any) to be repeated for all items. numbers.isrepeat = true end return nil end return fail(mtext['mt-not-range']) end if numbers.has_ranges and type(index) == 'number' and (index % 2 == 0) then return fail(mtext['mt-should-range']) end if index == 'e' then local e = numbers[1] and numbers[1].exp if e then if arg then return fail(mtext['mt-cannot-with-e']) end arg = e which = 1 end end if arg and arg ~= '' then arg = arg:gsub(numsep, '') if numdot ~= '.' then arg = arg:gsub(numdot, '.') end if arg:sub(1, 1) == '(' and arg:sub(-1) == ')' then result.parens = true arg = arg:sub(2, -2) end local a, b = arg:match('^(.+)[Ee](.+)$') if a then if index == 1 then arg = a result.exp = b else return fail(mtext['mt-cannot-e']) end end local isnegative, propersign, prefix local minus = '−' prefix, arg = arg:match('^(.-)([%d.]+)$') local value = tonumber(arg) if not value then return fail() end if arg:sub(1, 1) == '.' then arg = '0' .. arg end if prefix == '' then -- Ignore. elseif prefix == '±' then -- Display for first number, ignore for others. if index == 1 then propersign = '±' end elseif prefix == '+' then propersign = '+' elseif prefix == '-' or prefix == minus then propersign = minus isnegative = true else return fail() end result.clean = arg result.sign = propersign or '' result.value = isnegative and -value or value end numbers[index] = result return nil -- no error end local function get_args(numbers, args) -- Extract arguments and store the results in numbers. -- Return nothing (no error) if ok; otherwise, return an error message. for index = 1, 99 do local which = index local arg = args[which] -- has been trimmed if not arg then which = 'e' arg = args[which] end local msg = extract_item(which, numbers, arg) if msg then return msg end if which == 'e' then break end if index > 19 then return mtext['mt-too-many-parameter'] end end if numbers.has_ranges and (#numbers % 2 == 0) then return mtext['mt-need-number'] end end local function get_scale(text, ucode) -- Return the value of text as a number, or throw an error. -- This supports extremely basic expressions of the form: -- a / b -- a ^ b -- where a and b are numbers or 'pi'. local n = tonumber(text) if n then return n end n = text:gsub('pi', math.pi) for _, op in ipairs({ '/', '^' }) do local a, b = n:match('^(.-)' .. op .. '(.*)$') if a then a = tonumber(a) b = tonumber(b) if a and b then if op == '/' then return a / b elseif op == '^' then return a ^ b end end break end end error(string.format(mtext['mt-invalid-scale'], ucode, text)) end local function get_builtin_unit(ucode, definitions) -- Return table of information for the specified built-in unit, or nil if not known. -- Each defined unit code must be followed by two spaces (not tab characters). local _, pos = definitions:find('\n' .. ucode .. ' ', 1, true) if pos then local endline = definitions:find('%s*\n', pos) if endline then local result = {} local n = 0 local text = definitions:sub(pos + 1, endline - 1):gsub('%s%s+', '\t') for item in (text .. '\t'):gmatch('(%S.-)\t') do if item == 'ALIAS' then result.alias = true elseif item == 'ANGLE' then result.isangle = true result.nospace = true elseif item == 'NOSPACE' then result.nospace = true elseif item == 'SI' then result.si = true else n = n + 1 if n == 1 then local link, symbol = item:match('^%[%[([^|]+)|(.+)%]%]$') if link then result.symbol = symbol result.link = link n = 2 else result.symbol = item end elseif n == 2 then result.link = item elseif n == 3 then result.scale_text = item result.scale = get_scale(item, ucode) else result.more_ignored = item break end end end if result.si then local s = result.symbol if ucode == 'mc' .. s or ucode == 'mu' .. s then result.ucode = 'µ' .. s -- unit code for convert should be this end end if n >= 2 or (n >= 1 and result.alias) then return result end -- Ignore invalid definition, treating it as a comment. end end end local function convert_lookup(ucode, value, scaled_top, want_link, si, options) local lookup = require(convert_module)._unit return lookup(ucode, { value = value, scaled_top = scaled_top, link = want_link, si = si, sort = options.sortable, }) end local function get_unit(ucode, value, scaled_top, options) local want_link = options.want_link if scaled_top then want_link = options.want_per_link end local data = mw.loadData(data_module) local result = options.want_longscale and get_builtin_unit(ucode, data.builtin_units_long_scale) or get_builtin_unit(ucode, data.builtin_units) local si, use_convert if result then if result.alias then ucode = result.symbol use_convert = true end if result.scale then -- Setting si means convert will use the unit as given, and the sort key -- will be calculated from the value without any extra scaling that may -- occur if convert found the unit code. For example, if val defines the -- unit 'year' with a scale and if si were not set, convert would also apply -- its own scale because convert knows that a year is 31,557,600 seconds. si = { result.symbol, result.link } value = value * result.scale end if result.si then ucode = result.ucode or ucode si = { result.symbol, result.link } use_convert = true end else result = {} use_convert = true end local convert_unit = convert_lookup(ucode, value, scaled_top, want_link, si, options) result.sortkey = convert_unit.sortspan if use_convert then result.text = convert_unit.text result.scaled_top = convert_unit.scaled_value else if want_link then result.text = '[[' .. result.link .. '|' .. result.symbol .. ']]' else result.text = result.symbol end result.scaled_top = value end return result end local function makeunit(value, options) -- Return table of information for the requested unit and options, or -- return nil if no unit. options = options or {} local unit local ucode = options.u local percode = options.per if ucode then unit = get_unit(ucode, value, nil, options) elseif percode then unit = { nospace = true, scaled_top = value } else return nil end local text = unit.text or '' local sortkey = unit.sortkey if percode then local function bracketed(code, text) return code:find('[*./]') and '(' .. text .. ')' or text end local perunit = get_unit(percode, 1, unit.scaled_top, options) text = (ucode and bracketed(ucode, text) or '') .. '/' .. bracketed(percode, perunit.text) sortkey = perunit.sortkey end if not (unit.nospace or options.nospace) then text = '&nbsp;' .. text end return { text = text, isangle = unit.isangle, sortkey = sortkey } end local function list_units(mode) -- Return wikitext to list the built-in units. -- A unit code should not contain wikimarkup so don't bother escaping. local data = mw.loadData(data_module) local definitions = data.builtin_units .. data.builtin_units_long_scale local last_was_blank = true local n = 0 local result = {} local function add(line) if line == '' then last_was_blank = true else if last_was_blank and n > 0 then n = n + 1 result[n] = '' end last_was_blank = false n = n + 1 result[n] = line end end local si_prefixes = { -- These are the prefixes recognized by convert; u is accepted for micro. y = 'y', z = 'z', a = 'a', f = 'f', p = 'p', n = 'n', u = 'µ', ['µ'] = 'µ', m = 'm', c = 'c', d = 'd', da = 'da', h = 'h', k = 'k', M = 'M', G = 'G', T = 'T', P = 'P', E = 'E', Z = 'Z', Y = 'Y', } local function is_valid(ucode, unit) if unit and not unit.more_ignored then assert(type(unit.symbol) == 'string' and unit.symbol ~= '') if unit.alias then if unit.link or unit.scale_text or unit.si then return false end end if unit.si then if unit.scale_text then return false end ucode = unit.ucode or ucode local base = unit.symbol if ucode == base then unit.display = base return true end local plen = #ucode - #base if plen > 0 then local prefix = si_prefixes[ucode:sub(1, plen)] if prefix and ucode:sub(plen + 1) == base then unit.display = prefix .. base return true end end else unit.display = unit.symbol return true end end return false end local lookup = require(convert_module)._unit local function show_convert(ucode, unit) -- If a built-in unit defines a scale or sets the SI flag, any unit defined in -- convert is not used (the scale or SI prefix's scale is used for a sort key). -- If there is no scale or SI flag, and the unit is not defined in convert, -- the sort key may not be correct; this allows such units to be identified. if not (unit.si or unit.scale_text) then if mode == 'convert' then unit.show = not lookup(unit.alias and unit.symbol or ucode).unknown unit.show_text = 'CONVERT' elseif mode == 'unknown' then unit.show = lookup(unit.alias and unit.symbol or ucode).unknown unit.show_text = 'UNKNOWN' elseif not unit.alias then -- Show convert's scale in square brackets ('[1]' for an unknown unit). -- Don't show scale for an alias because it's misleading for temperature -- and an alias is probably not useful for anything else. local scale = lookup(ucode, {value=1, sort='on'}).scaled_value if type(scale) == 'number' then scale = string.format('%.5g', scale):gsub('e%+?(%-?)0*(%d+)', 'e%1%2') else scale = '?' end unit.show = true unit.show_text = '[' .. scale .. ']' end end end for line in definitions:gmatch('([^\n]*)\n') do local pos, _ = line:find(' ', 1, true) if pos then local ucode = line:sub(1, pos - 1) local unit = get_builtin_unit(ucode, '\n' .. line .. '\n') if is_valid(ucode, unit) then show_convert(ucode, unit) local flags, text if unit.alias then text = unit.symbol else text = '[[' .. unit.link .. '|' .. unit.display .. ']]' end if unit.isangle then unit.nospace = nil -- don't show redundant flag end for _, f in ipairs({ { 'alias', 'ALIAS' }, { 'isangle', 'ANGLE' }, { 'nospace', 'NOSPACE' }, { 'si', 'SI' }, { 'scale_text', unit.scale_text }, { 'show', unit.show_text }, }) do if unit[f[1]] then local t = f[2] if t:match('^%u+$') then t = '<small>' .. t .. '</small>' end if flags then flags = flags .. ' ' .. t else flags = t end end end if flags then text = text .. ' • ' .. flags end add(ucode .. ' = ' .. text .. '<br />') else add(line .. ' ◆ <b>invalid definition</b><br />') end else add(line) end end return table.concat(result, '\n') end local delimit_groups = require('Module:Gapnum').groups local function delimit(sign, numstr, fmt) -- Return sign and numstr (unsigned digits or numdot only) after formatting. -- Four-digit integers are not formatted with gaps. fmt = (fmt or ''):lower() if fmt == 'none' or (fmt == '' and #numstr == 4 and numstr:match('^%d+$')) then return sign .. numstr end -- Group number by integer and decimal parts. -- If there is no decimal part, delimit_groups returns only one table. local ipart, dpart = delimit_groups(numstr) local result if fmt == 'commas' then result = sign .. table.concat(ipart, numsep) if dpart then result = result .. numdot .. table.concat(dpart) end else -- Delimit with a small gap by default. local groups = {} groups[1] = table.remove(ipart, 1) for _, v in ipairs(ipart) do table.insert(groups, '<span style="margin-left:.25em;">' .. v .. '</span>') end if dpart then table.insert(groups, numdot .. (table.remove(dpart, 1) or '')) for _, v in ipairs(dpart) do table.insert(groups, '<span style="margin-left:.25em;">' .. v .. '</span>') end end result = sign .. table.concat(groups) end return result end local function sup_sub(sup, sub, align) -- Return the same result as Module:Su except val defaults to align=right. if align == 'l' or align == 'left' then align = 'left' elseif align == 'c' or align == 'center' then align = 'center' else align = 'right' end return '<span style="display:inline-block;margin-bottom:-0.3em;vertical-align:-0.4em;line-height:1.2em;font-size:85%;text-align:' .. align .. ';">' .. sup .. '<br />' .. sub .. '</span>' end local function range_text(items, unit_table, options) local fmt = options.fmt local nend = items.nend or '' if items.isrepeat or unit_table.isangle then nend = nend .. unit_table.text end local text = '' for i = 1, #items do if i % 2 == 0 then text = text .. items[i] else text = text .. delimit(items[i].sign, items[i].clean, fmt) .. nend end end return text end local function uncertainty_text(uncertainty, unit_table, options) local angle, text, need_parens if unit_table.isangle then angle = unit_table.text end local upper = uncertainty.upper or {} local lower = uncertainty.lower or {} local uncU = upper.clean if uncU then local fmt = options.fmt local uncL = lower.clean if uncL then uncU = delimit('+', uncU, fmt) .. (upper.errend or '') uncL = delimit('−', uncL, fmt) .. (lower.errend or '') if angle then uncU = uncU .. angle uncL = uncL .. angle end text = (angle or '') .. '<span style="margin-left:0.3em;">' .. sup_sub(uncU, uncL, options.align) .. '</span>' else if upper.parens then text = '(' .. uncU .. ')' -- old template did not delimit else text = (angle or '') .. '<span style="margin-left:0.225em;margin-right:0.225em;">±</span>' .. delimit('', uncU, fmt) need_parens = true end if uncertainty.errend then text = text .. uncertainty.errend end if angle then text = text .. angle end end else if angle then text = angle end end return text, need_parens end local function _main(values, unit_spec, options) if options.sandbox then data_module = data_module .. '/sandbox' convert_module = convert_module .. '/sandbox' end local action = options.action if action then if action == 'list' then -- Kludge: am using the align parameter (a=xxx) for type of list. return list_units(options.align) end return valerror('invalid action "' .. action .. '".', options.nocat) end local number = values.number or (values.numbers and values.numbers[1]) or {} local e_10 = options.e or {} local novalue = (number.value == nil and e_10.clean == nil) local fmt = options.fmt local want_sort = true local sortable = options.sortable if sortable == 'off' or (sortable == nil and novalue) then want_sort = false elseif sortable == 'debug' then -- Same as sortable = 'on' but the sort key is displayed. else sortable = 'on' end local sort_value = 1 if want_sort then sort_value = number.value or 1 if e_10.value and sort_value ~= 0 then -- The 'if' avoids {{val|0|e=1234}} giving an invalid sort_value due to overflow. sort_value = sort_value * 10^e_10.value end end local unit_table = makeunit(sort_value, { u = unit_spec.u, want_link = unit_spec.want_link, per = unit_spec.per, want_per_link = unit_spec.want_per_link, nospace = novalue, want_longscale = unit_spec.want_longscale, sortable = sortable, }) local sortkey if unit_table then if want_sort then sortkey = unit_table.sortkey end else unit_table = { text = '' } if want_sort then sortkey = convert_lookup('dummy', sort_value, nil, nil, nil, { sortable = sortable }).sortspan end end local final_unit = unit_table.isangle and '' or unit_table.text local e_text, n_text, need_parens local uncertainty = values.uncertainty if uncertainty then if number.clean then n_text = delimit(number.sign, number.clean, fmt) .. (number.nend or '') local text text, need_parens = uncertainty_text(uncertainty, unit_table, options) if text then n_text = n_text .. text end else n_text = '' end else if values.numbers.isrepeat then final_unit = '' end n_text = range_text(values.numbers, unit_table, options) need_parens = true end if e_10.clean then if need_parens then n_text = '(' .. n_text .. ')' end e_text = '10<sup>' .. delimit(e_10.sign, e_10.clean, fmt) .. '</sup>' if number.clean then e_text = '<span style="margin-left:0.25em;margin-right:0.15em;">×</span>' .. e_text end else e_text = '' end local result = (sortkey or '') .. (options.prefix or '') .. n_text .. e_text .. final_unit .. (options.suffix or '') if result ~= '' then result = '<span class="nowrap">' .. result .. '</span>' end return result .. (options.warning or '') end local function check_parameters(args, has_ranges, nocat) -- Return warning text for the first problem parameter found, or nothing if ok. local whitelist = { a = true, action = true, debug = true, e = true, ['end'] = true, errend = true, ['+errend'] = true, ['-errend'] = true, fmt = true, ['long scale'] = true, long_scale = true, longscale = true, nocategory = true, p = true, s = true, sortable = true, u = true, ul = true, up = true, upl = true, } for k, v in pairs(args) do if type(k) == 'string' and not whitelist[k] then local warning = string.format(mtext['mt-val-not-supported'], k, v) return valerror(warning, nocat, true) end end if not has_ranges and args[4] then return valerror(mtext['mt-ignore-parameter4'], nocat, true) end end local function main(frame) local getArgs = require('Module:Arguments').getArgs local args = getArgs(frame, {wrappers = { 'Template:Val' }}) local nocat = args.nocategory local numbers = {} -- table of number tables, perhaps with range text local msg = get_args(numbers, args) if msg then return valerror(msg, nocat) end if args.u and args.ul then return valerror(mtext['mt-both-u-ul'], nocat) end if args.up and args.upl then return valerror(mtext['mt-both-up-upl'], nocat) end local values if numbers.has_ranges then -- Multiple values with range separators but no uncertainty. numbers.nend = args['end'] values = { numbers = numbers, } else -- A single value with optional uncertainty. local function setfield(i, dst, src) local v = args[src] if v then if numbers[i] then numbers[i][dst] = v else numbers[i] = { [dst] = v } end end end setfield(1, 'nend', 'end') setfield(2, 'errend', '+errend') setfield(3, 'errend', '-errend') values = { number = numbers[1], uncertainty = { upper = numbers[2], lower = numbers[3], errend = args.errend, } } end local unit_spec = { u = args.ul or args.u, want_link = args.ul ~= nil, per = args.upl or args.up, want_per_link = args.upl ~= nil, want_longscale = (args.longscale or args.long_scale or args['long scale']) == 'on', } local options = { action = args.action, align = args.a, e = numbers.e, fmt = args.fmt, nocat = nocat, prefix = args.p, sandbox = string.find(frame:getTitle(), 'sandbox', 1, true) ~= nil, sortable = args.sortable or (args.debug == 'yes' and 'debug' or nil), suffix = args.s, warning = check_parameters(args, numbers.has_ranges, nocat), } return _main(values, unit_spec, options) end return { main = main, _main = _main } cf2vy01lmmi4xusv9uok74d8k7gzawo Module:Gapnum 828 34730 126089 2026-07-15T10:45:25Z Fongcwele 16873 Created page with "local p = {} local getArgs function p.main(frame) if not getArgs then getArgs = require('Module:Arguments').getArgs end local args = getArgs(frame, {wrappers = 'Template:Gapnum'}) local n = args[1] if not n then error('Parameter 1 is required') elseif not tonumber(n) and not tonumber(n, 36) then -- Validates any number with base ≤ 36 error('Unable to convert "' .. args[1] .. '" to a number') end local gap = args.gap local precision = tonumber(args.p..." 126089 Scribunto text/plain local p = {} local getArgs function p.main(frame) if not getArgs then getArgs = require('Module:Arguments').getArgs end local args = getArgs(frame, {wrappers = 'Template:Gapnum'}) local n = args[1] if not n then error('Parameter 1 is required') elseif not tonumber(n) and not tonumber(n, 36) then -- Validates any number with base ≤ 36 error('Unable to convert "' .. args[1] .. '" to a number') end local gap = args.gap local precision = tonumber(args.prec) return p.gaps(n,{gap=gap,prec=precision}) end -- Not named p._main so that it has a better function name when required by Module:Val function p.gaps(n,tbl) local nstr = tostring(n) if not tbl then tbl = {} end local gap = tbl.gap or '.25em' local int_part, frac_part = p.groups(n,tbl.prec) local ret = mw.html.create('span') :css('white-space','nowrap') -- No gap necessary on first group :wikitext(table.remove(int_part,1)) -- Build int part for _, v in ipairs(int_part) do ret:tag('span') :css('margin-left',gap) :wikitext(v) end if frac_part then -- The first group after the decimal shouldn't have a gap ret:wikitext('.' .. table.remove(frac_part,1)) -- Build frac part for _, v in ipairs(frac_part) do ret:tag('span') :css('margin-left',gap) :wikitext(v) end end return ret end -- Creates tables where each element is a different group of the number function p.groups(num,precision) local nstr = tostring(num) if not precision then precision = -1 end local decimalloc = nstr:find('.', 1, true) local int_part, frac_part if decimalloc == nil then int_part = nstr else int_part = nstr:sub(1, decimalloc-1) frac_part = nstr:sub(decimalloc + 1) end -- only define ret_i as an empty table, let ret_d stay nil local ret_i,ret_d = {} -- Loop to handle most of the groupings; from right to left, so that if a group has less than 3 members, it will be the first group while int_part:len() > 3 do -- Insert in first spot, since we're moving backwards table.insert(ret_i,1,int_part:sub(-3)) int_part = int_part:sub(1,-4) end -- handle any left over numbers if int_part:len() > 0 then table.insert(ret_i,1,int_part) end if precision ~= 0 and frac_part then ret_d = {} if precision == -1 then precision = frac_part:len() end -- Reduce the length of the string if required precision is less than actual precision -- OR -- Increase it (by adding 0s) if the required precision is more than actual local offset = precision - frac_part:len() if offset < 0 then frac_part = frac_part:sub(1,precision) elseif offset > 0 then frac_part = frac_part .. string.rep('0', offset) end -- Allow groups of 3 or 2 (3 first) for v in string.gmatch(frac_part,'%d%d%d?') do table.insert(ret_d,v) end -- Preference for groups of 4 instead of groups of 1 at the end if #frac_part % 3 == 1 then if frac_part:len() == 1 then ret_d = {frac_part} else local last_g = ret_d[#ret_d] or '' last_g = last_g..frac_part:sub(-1) ret_d[#ret_d] = last_g end end end return ret_i,ret_d end return p lj5n3lgypceqtbnvwbvlt9k8birgmdl Module:Val/units 828 34731 126090 2026-07-15T10:49:08Z Fongcwele 16873 Created page with "-- Definitions for units known to val -- File format is two strings and a return statement with them in it: -- string in quotes [=[ ... builtin_units ... ]=]. -- string in quotes [=[ ... builtin_units_long_scale ... ]=]. -- First string, builtin_units, is short-scale, second string is long scale. -- Entry format: -- One record per line, starting in first column, having 2-4 fields. -- Field separator: two or more spaces -- Between first and second fields: two or more spa..." 126090 Scribunto text/plain -- Definitions for units known to val -- File format is two strings and a return statement with them in it: -- string in quotes [=[ ... builtin_units ... ]=]. -- string in quotes [=[ ... builtin_units_long_scale ... ]=]. -- First string, builtin_units, is short-scale, second string is long scale. -- Entry format: -- One record per line, starting in first column, having 2-4 fields. -- Field separator: two or more spaces -- Between first and second fields: two or more spaces -- Between all other fields: two or more spaces, or one or more tabs -- Entries without two spaces in them are ignored. -- There must be a blank line before the first entry and after the last. -- I.e. the first two and last two characters of the string must be newlines. -- Format of entry. Two record types: -- -- One record type is a wikilink: -- Unit-code [[ pagename | Symbol-accepts-HTML-only ]] -- Text-field separator is still two spaces. Two spaces not allowed in wikilink. -- -- The other record type is all fields: -- Unit-code symbol-accepts-HTML-only pagename#section-OK -- -- Plus there is an optional field that goes at the end after two or more spaces. -- Whether it is a number or an equation or the letters SI, -- any of these three has the same function: a wikitable sorting "scale". -- It is for sorting, and it works for either record type. -- Difference is SI can't accept HTML. But SI correctly scales any SI prefix. -- (Optional fields ALIAS and NOSPACE and ANGLE are for advanced users.) -- "Invalid unit" error: -- Using SI requires that the symbol equal unit-code, so never allows HTML. -- Any difference between SI or symbol must be an SI prefix, such as k, M, or G. -- A space at the end of an entry is an error. No space at each EOL. local builtin_units = [=[ == Test == Foo [[Hz|<samp>Foo</samp>]] Baz [[Hertz|baz<sub>0</sub>]] Baz [[Kelvins|baz<sub>0</sub>]] Bar [[Foobar|bar<abbr title="super duper">0</abbr>]] quux [[Foobar|<span title="super duper 2">bar0</span>]] == Unsorted units == c0 [[Speed of light#Numerical value, notation, and units|''c''<sub>0</sub>]] lbf [[Pound (force)|<span title="pound-force">lb<sub>F</sub></span>]] N.s [[Newton-second|N&sdot;s]] J.K-1 [[Joule per kelvin|J&sdot;K<sup>−1</sup>]] C.mol-1 [[Faraday constant|C&sdot;mol<sup>−1</sup>]] C/mol [[Faraday constant|C/mol]] C.kg-1 [[Roentgen (unit)|C&sdot;kg<sup>−1</sup>]] C/kg [[Roentgen (unit)|C/kg]] F.m-1 [[vacuum permittivity|F&sdot;m<sup>−1</sup>]] F/m [[vacuum permittivity|F/m]] e [[Elementary charge|''e'']] kB [[Kilobyte|kB]] 8e3 KB [[Kilobyte|KB]] 8e3 MB [[Megabyte|MB]] 8e6 GB [[Gigabyte|GB]] 8e9 TB [[Terabyte|TB]] 8e12 lx [[Lux (unit)|lx]] nat [[nat (unit)|nat]] == Time and frequency == byte/s [[Data rate units|byte/s]] 8 kB/s [[Data rate units#Kilobyte per second|<span title="Kilobytes per second">kB/s</span>]] 8e3 MB/s [[Data rate units#Megabyte per second|<span title="Megabytes per second">MB/s</span>]] 8e6 GB/s [[Data rate units#Gigabyte per second|<span title="Gigabytes per second">GB/s</span>]] 8e9 TB/s [[Data rate units#Terabyte per second|<span title="Terabytes per second">TB/s</span>]] 8e12 bit/s [[Bit per second|bit/s]] 1 bps [[Bit per second|bit/s]] 1 kbit/s [[Kilobit per second|kbit/s]] 1e3 Mbit/s [[Megabit per second|Mbit/s]] 1e6 Gbit/s [[Gigabit per second|Gbit/s]] 1e9 Tbit/s [[Terabit per second|Tbit/s]] 1e12 kT/s [[Transfer (computing)|<span title="Kilotransfers per second">kT/s</span>]] 1e3 MT/s [[Transfer (computing)|<span title="Megatransfers per second">MT/s</span>]] 1e6 GT/s [[Transfer (computing)|<span title="Gigatransfers per second">GT/s</span>]] 1e9 year [[Year|year]] 31557600 years [[Year|years]] 31557600 yr [[Year#Symbols and abbreviations|yr]] 31557600 y [[Year|y]] 31557600 a [[Annum|a]] 31557600 Ga [[Gigaannum|Ga]] 31557600000000000 Ma [[Megaannum|Ma]] 31557600000000 ka [[Kiloannum|ka]] 31557600000 kyr [[kyr|kyr]] 31557600000 kya [[kyr|kya]] 31557600000 myr [[myr|myr]] 31557600000000 mya [[Mya (unit)|mya]] 31557600000000 byr [[Billion years|byr]] 31557600000000000 bya [[Billion years ago|bya]] 31557600000000000 Gyr [[billion years|Gyr]] 31557600000000000 BP [[Before present|BP]] uBP [[Radiocarbon dating#Calibration|<sup>14</sup>C yr BP]] BC [[Before Christ|BC]] -1 AD [[Anno Domini|AD]] 1 BCE [[Before the Common Era|BCE]] -1 CE [[Common Era|CE]] 1 JD [[Julian date|JD]] 1 MJD [[Modified Julian date|MJD]] 1 s-1 [[Second|s<sup>−1</sup>]] s-2 [[Second|s<sup>−2</sup>]] s2 [[Second|s<sup>2</sup>]] s [[Second|s]] SI as [[Attosecond|s]] SI cs [[Second|s]] SI das [[Second|s]] SI ds [[Second|s]] SI Es [[Second|s]] SI fs [[Femtosecond|s]] SI Gs [[Second|s]] SI hs [[Second|s]] SI ks [[Second|s]] SI ms [[Millisecond|s]] SI µs [[Microsecond|s]] SI us [[Microsecond|s]] SI Ms [[Second|s]] SI ns [[Nanosecond|s]] SI ps [[Picosecond|s]] SI Ps [[Second|s]] SI Ts [[Second|s]] SI Ys [[Second|s]] SI ys [[Yoctosecond|s]] SI Zs [[Second|s]] SI zs [[Zeptosecond|s]] SI Hz [[Hertz|Hz]] SI aHz [[Hertz|Hz]] SI cHz [[Hertz|Hz]] SI daHz [[Hertz|Hz]] SI dHz [[Hertz|Hz]] SI EHz [[Hertz|Hz]] SI fHz [[Hertz|Hz]] SI hHz [[Hertz|Hz]] SI GHz [[Gigahertz|Hz]] SI kHz [[Kilohertz|Hz]] SI MHz [[Megahertz|Hz]] SI mHz [[Hertz|Hz]] SI uHz [[Hertz|Hz]] SI µHz [[Hertz|Hz]] SI nHz [[Hertz|Hz]] SI pHz [[Hertz|Hz]] SI PHz [[Hertz|Hz]] SI THz [[Hertz|Hz]] SI yHz [[Hertz|Hz]] SI YHz [[Hertz|Hz]] SI zHz [[Hertz|Hz]] SI ZHz [[Hertz|Hz]] SI ips [[Inch per second|ips]] == Length, area, volume == Å3 [[Ångström|Å<sup>3</sup>]] fb-1 [[Barn (unit)#Inverse femtobarn|fb<sup>−1</sup>]] m-1 [[Metre|m<sup>−1</sup>]] m-2 [[Square metre|m<sup>−2</sup>]] m-3 [[Cubic metre|m<sup>−3</sup>]] km2 [[Square kilometre|km<sup>2</sup>]] km3 [[Cubic kilometre|km<sup>3</sup>]] µm2 [[Square metre|μm<sup>2</sup>]] um2 [[Square metre|μm<sup>2</sup>]] am2 [[Square metre|am<sup>2</sup>]] cm2 [[Square centimetre|cm<sup>2</sup>]] dam2 [[Square metre|dam<sup>2</sup>]] dm2 [[Square metre|dm<sup>2</sup>]] Em2 [[Square metre|Em<sup>2</sup>]] fm2 [[Square metre|fm<sup>2</sup>]] Gm2 [[Square metre|Gm<sup>2</sup>]] hm2 [[Square metre|hm<sup>2</sup>]] mm2 [[Square metre|mm<sup>2</sup>]] Mm2 [[Square metre|Mm<sup>2</sup>]] nm2 [[Square metre|nm<sup>2</sup>]] pm2 [[Square metre|pm<sup>2</sup>]] Pm2 [[Square metre|Pm<sup>2</sup>]] Tm2 [[Square metre|Tm<sup>2</sup>]] ym2 [[Square metre|ym<sup>2</sup>]] Ym2 [[Square metre|Ym<sup>2</sup>]] zm2 [[Square metre|zm<sup>2</sup>]] Zm2 [[Square metre|Zm<sup>2</sup>]] gal [[Gallon|gal]] Gal [[Gal (unit)|Gal]] uGal [[Gal (unit)|μGal]] µGal [[Gal (unit)|μGal]] mGal [[Gal (unit)|mGal]] b [[Barn (unit)|b]] SI ab [[Barn (unit)|b]] SI cb [[Barn (unit)|b]] SI dab [[Barn (unit)|b]] SI db [[Barn (unit)|b]] SI Eb [[Barn (unit)|b]] SI fb [[Barn (unit)|b]] SI Gb [[Barn (unit)|b]] SI hb [[Barn (unit)|b]] SI kb [[Barn (unit)|b]] SI mb [[Barn (unit)|b]] SI µb [[Barn (unit)|b]] SI ub [[Barn (unit)|b]] SI Mb [[Barn (unit)|b]] SI nb [[Barn (unit)|b]] SI pb [[Barn (unit)|b]] SI Pb [[Barn (unit)|b]] SI Tb [[Barn (unit)|b]] SI Yb [[Barn (unit)|b]] SI yb [[Barn (unit)|b]] SI Zb [[Barn (unit)|b]] SI zb [[Barn (unit)|b]] SI == Velocity and acceleration == m.s-2 [[Metre per second squared|m&sdot;s<sup>−2</sup>]] m/s2 [[Metre per second squared|m/s<sup>2</sup>]] m.s-1 [[Metre per second|m&sdot;s<sup>−1</sup>]] m/s [[Metre per second|m/s]] km.s-1 [[Metre per second|km&sdot;s<sup>−1</sup>]] km/s [[Metre per second|km/s]] == Mass and energy == lbm [[Pound (mass)|<span title="pound-mass">lb<sub>m</sub></span>]] uJ [[Joule|μJ]] J.s [[Joule-second|J&sdot;s]] kWh [[Kilowatt-hour|kWh]] kW.h [[Kilowatt-hour|kW&sdot;h]] J/C [[Volt|J/C]] J/kg [[Joule|J/kg]] Da [[Dalton (unit)|Da]] SI EDa [[Dalton (unit)|Da]] SI PDa [[Dalton (unit)|Da]] SI TDa [[Dalton (unit)|Da]] SI GDa [[Dalton (unit)|Da]] SI MDa [[Dalton (unit)|Da]] SI kDa [[Dalton (unit)|Da]] SI mDa [[Dalton (unit)|Da]] SI uDa [[Dalton (unit)|Da]] SI μDa [[Dalton (unit)|Da]] SI nDa [[Dalton (unit)|Da]] SI pDa [[Dalton (unit)|Da]] SI fDa [[Dalton (unit)|Da]] SI aDa [[Dalton (unit)|Da]] SI g [[Gram|g]] SI ag [[Attogram|g]] SI cg [[Centigram|g]] SI dag [[Gram|g]] SI dg [[Decigram|g]] SI Eg [[Exagram|g]] SI fg [[Femtogram|g]] SI Gg [[Gigagram|g]] SI hg [[Kilogram#SI multiples|g]] SI kg [[Kilogram|g]] SI mcg [[Microgram|g]] SI Mg [[Megagram|g]] SI mg [[Milligram|g]] SI ug [[Microgram|g]] SI µg [[Microgram|g]] SI ng [[Nanogram|g]] SI Pg [[Petagram|g]] SI pg [[Picogram|g]] SI Tg [[Tonne|g]] SI yg [[Yoctogram|g]] SI Yg [[Yottagram|g]] SI zg [[Zeptogram|g]] SI Zg [[Zettagram|g]] SI == Pressure and density == psi [[Pounds per square inch|psi]] g.cm-3 [[Gram per cubic centimetre|g&sdot;cm<sup>−3</sup>]] g/cm3 [[Gram per cubic centimetre|g/cm<sup>3</sup>]] kg.m-3 [[Kilogram per cubic metre|kg&sdot;m<sup>−3</sup>]] kg/m3 [[Kilogram per cubic metre|kg/m<sup>3</sup>]] kg/cm3 [[Density#Formula and common units|kg/cm<sup>3</sup>]] g/L [[Gram per litre|g/L]] g/l [[Gram per litre|g/l]] mcg/dL [[Gram per litre|μg/dL]] mcg/dl [[Gram per litre|μg/dl]] mg/mL [[Gram per litre|mg/mL]] mg/ml [[Gram per litre|mg/ml]] ug/dL [[Gram per litre|μg/dL]] ug/dl [[Gram per litre|μg/dl]] μg/dL [[Gram per litre|μg/dL]] μg/dl [[Gram per litre|μg/dl]] mg.L-1 [[Gram per litre|<abbr title="milligrams per liter">mg/L</abbr>]] mg/L [[Gram per litre|<abbr title="milligrams per liter">mg/L</abbr>]] mg.l-1 [[Gram per litre|<abbr title="milligrams per liter">mg/l</abbr>]] mg/l [[Gram per litre|<abbr title="milligrams per liter">mg/l</abbr>]] == Fracture toughness == MPa.m.5 [[Fracture toughness|MPa&sdot;m<sup>1/2</sup>]] kPa.m.5 [[Fracture toughness|kPa&sdot;m<sup>1/2</sup>]] Pa.m.5 [[Fracture toughness|Pa&sdot;m<sup>1/2</sup>]] == Temperature == degC °C ALIAS degF °F ALIAS degR °R ALIAS K [[Kelvin|K]] SI YK [[Yottakelvin|K]] SI ZK [[Zettakelvin|K]] SI EK [[Kelvin|K]] SI PK [[Petakelvin|K]] SI TK [[Terakelvin|K]] SI GK [[Gigakelvin|K]] SI MK [[Megakelvin|K]] SI kK [[Kilokelvin|K]] SI hK [[Hectokelvin|K]] SI daK [[Decakelvin|K]] SI dK [[Decikelvin|K]] SI cK [[Centikelvin|K]] SI mK [[Millikelvin|K]] SI µK [[Microkelvin|K]] SI uK [[Microkelvin|K]] SI nK [[Nanokelvin|K]] SI pK [[Picokelvin|K]] SI fK [[Femtokelvin|K]] SI aK [[Attokelvin|K]] SI zK [[Zeptokelvin|K]] SI yK [[Yoctokelvin|K]] SI == Electromagnetism == Wb [[Weber (unit)|Wb]] N.A-2 [[Permeability (electromagnetism)|N&sdot;A<sup>−2</sup>]] H.m-1 [[Permeability (electromagnetism)|H&sdot;m<sup>−1</sup>]] V.m-1 [[Electric field|V&sdot;m<sup>−1</sup>]] V/m [[Electric field|V/m]] C [[Coulomb|C]] SI YC [[Coulomb|C]] SI ZC [[Coulomb|C]] SI EC [[Coulomb|C]] SI PC [[Coulomb|C]] SI TC [[Coulomb|C]] SI GC [[Coulomb|C]] SI MC [[Coulomb|C]] SI kC [[Coulomb|C]] SI hC [[Coulomb|C]] SI daC [[Coulomb|C]] SI dC [[Coulomb|C]] SI cC [[Coulomb|C]] SI mC [[Coulomb|C]] SI µC [[Coulomb|C]] SI uC [[Coulomb|C]] SI nC [[Coulomb|C]] SI pC [[Coulomb|C]] SI fC [[Coulomb|C]] SI aC [[Coulomb|C]] SI zC [[Coulomb|C]] SI yC [[Coulomb|C]] SI F [[Farad|F]] SI YF [[Farad|F]] SI ZF [[Farad|F]] SI EF [[Farad|F]] SI PF [[Farad|F]] SI TF [[Farad|F]] SI GF [[Farad|F]] SI MF [[Farad|F]] SI kF [[Farad|F]] SI hF [[Farad|F]] SI daF [[Farad|F]] SI dF [[Farad|F]] SI cF [[Farad|F]] SI mF [[Farad|F]] SI µF [[Farad|F]] SI uF [[Farad|F]] SI nF [[Farad|F]] SI pF [[Farad|F]] SI fF [[Farad|F]] SI aF [[Farad|F]] SI zF [[Farad|F]] SI yF [[Farad|F]] SI H [[Henry (unit)|H]] SI YH [[Henry (unit)|H]] SI ZH [[Henry (unit)|H]] SI EH [[Henry (unit)|H]] SI PH [[Henry (unit)|H]] SI TH [[Henry (unit)|H]] SI GH [[Henry (unit)|H]] SI MH [[Henry (unit)|H]] SI kH [[Henry (unit)|H]] SI hH [[Henry (unit)|H]] SI daH [[Henry (unit)|H]] SI dH [[Henry (unit)|H]] SI cH [[Henry (unit)|H]] SI mH [[Henry (unit)|H]] SI µH [[Henry (unit)|H]] SI uH [[Henry (unit)|H]] SI nH [[Henry (unit)|H]] SI pH [[Henry (unit)|H]] SI fH [[Henry (unit)|H]] SI aH [[Henry (unit)|H]] SI zH [[Henry (unit)|H]] SI yH [[Henry (unit)|H]] SI A [[Ampere|A]] SI YA [[Ampere|A]] SI ZA [[Ampere|A]] SI EA [[Ampere|A]] SI PA [[Ampere|A]] SI TA [[Ampere|A]] SI GA [[Ampere|A]] SI MA [[Ampere|A]] SI kA [[Ampere|A]] SI hA [[Ampere|A]] SI daA [[Ampere|A]] SI dA [[Ampere|A]] SI cA [[Ampere|A]] SI mA [[Ampere|A]] SI µA [[Ampere|A]] SI uA [[Ampere|A]] SI nA [[Ampere|A]] SI pA [[Ampere|A]] SI fA [[Ampere|A]] SI aA [[Ampere|A]] SI zA [[Ampere|A]] SI yA [[Ampere|A]] SI V [[Volt|V]] SI YV [[Volt|V]] SI ZV [[Volt|V]] SI EV [[Volt|V]] SI PV [[Volt|V]] SI TV [[Volt|V]] SI GV [[Volt|V]] SI MV [[Volt|V]] SI kV [[Volt|V]] SI hV [[Volt|V]] SI daV [[Volt|V]] SI dV [[Volt|V]] SI cV [[Volt|V]] SI mV [[Volt|V]] SI µV [[Volt|V]] SI uV [[Volt|V]] SI nV [[Volt|V]] SI pV [[Volt|V]] SI fV [[Volt|V]] SI aV [[Volt|V]] SI zV [[Volt|V]] SI yV [[Volt|V]] SI VA [[Volt-ampere|VA]] SI YVA [[Volt-ampere|VA]] SI ZVA [[Volt-ampere|VA]] SI EVA [[Volt-ampere|VA]] SI PVA [[Volt-ampere|VA]] SI TVA [[Volt-ampere|VA]] SI GVA [[Volt-ampere|VA]] SI MVA [[Volt-ampere|VA]] SI kVA [[Volt-ampere|VA]] SI hVA [[Volt-ampere|VA]] SI daVA [[Volt-ampere|VA]] SI dVA [[Volt-ampere|VA]] SI cVA [[Volt-ampere|VA]] SI mVA [[Volt-ampere|VA]] SI µVA [[Volt-ampere|VA]] SI uVA [[Volt-ampere|VA]] SI nVA [[Volt-ampere|VA]] SI pVA [[Volt-ampere|VA]] SI fVA [[Volt-ampere|VA]] SI aVA [[Volt-ampere|VA]] SI zVA [[Volt-ampere|VA]] SI yVA [[Volt-ampere|VA]] SI Ω [[Ohm|Ω]] SI GΩ [[Ohm|Ω]] SI MΩ [[Ohm|Ω]] SI kΩ [[Ohm|Ω]] SI mΩ [[Ohm|Ω]] SI μΩ [[Ohm|Ω]] SI uΩ [[Ohm|Ω]] SI nΩ [[Ohm|Ω]] SI ohm [[Ohm|Ω]] Gohm [[Ohm|GΩ]] 1e9 Mohm [[Ohm|MΩ]] 1e6 kohm [[Ohm|kΩ]] 1e3 mohm [[Ohm|mΩ]] 1e-3 μohm [[Ohm|μΩ]] 1e-6 uohm [[Ohm|μΩ]] 1e-6 nohm [[Ohm|nΩ]] 1e-9 YΩ.m [[Electrical resistivity and conductivity#Definition|YΩ&sdot;m]] 1e24 ZΩ.m [[Electrical resistivity and conductivity#Definition|ZΩ&sdot;m]] 1e21 EΩ.m [[Electrical resistivity and conductivity#Definition|EΩ&sdot;m]] 1e18 PΩ.m [[Electrical resistivity and conductivity#Definition|PΩ&sdot;m]] 1e15 TΩ.m [[Electrical resistivity and conductivity#Definition|TΩ&sdot;m]] 1e12 GΩ.m [[Electrical resistivity and conductivity#Definition|GΩ&sdot;m]] 1e9 MΩ.m [[Electrical resistivity and conductivity#Definition|MΩ&sdot;m]] 1e6 kΩ.m [[Electrical resistivity and conductivity#Definition|kΩ&sdot;m]] 1e3 Ω.m [[Electrical resistivity and conductivity#Definition|Ω&sdot;m]] 1 mΩ.m [[Electrical resistivity and conductivity#Definition|mΩ&sdot;m]] 1e-3 µΩ.m [[Electrical resistivity and conductivity#Definition|μΩ&sdot;m]] 1e-6 uΩ.m [[Electrical resistivity and conductivity#Definition|μΩ&sdot;m]] 1e-6 nΩ.m [[Electrical resistivity and conductivity#Definition|nΩ&sdot;m]] 1e-9 pΩ.m [[Electrical resistivity and conductivity#Definition|pΩ&sdot;m]] 1e-12 fΩ.m [[Electrical resistivity and conductivity#Definition|fΩ&sdot;m]] 1e-15 aΩ.m [[Electrical resistivity and conductivity#Definition|aΩ&sdot;m]] 1e-18 zΩ.m [[Electrical resistivity and conductivity#Definition|zΩ&sdot;m]] 1e-21 yΩ.m [[Electrical resistivity and conductivity#Definition|yΩ&sdot;m]] 1e-24 R [[Rayleigh (unit)|R]] SI G [[Gauss (unit)|G]] SI aG [[Attogauss|G]] SI cG [[Centigauss|G]] SI daG [[Decagauss|G]] SI dG [[Decigauss|G]] SI EG [[Exagauss|G]] SI fG [[Femtogauss|G]] SI GG [[Gigagauss|G]] SI hG [[Hectogauss|G]] SI kG [[Kilogauss|G]] SI MG [[Megagauss|G]] SI mG [[Milligauss|G]] SI uG [[Microgauss|G]] SI µG [[Microgauss|G]] SI nG [[Nanogauss|G]] SI PG [[Petagauss|G]] SI pG [[Picogauss|G]] SI TG [[Teragauss|G]] SI yG [[Yoctogauss|G]] SI YG [[Yottagauss|G]] SI zG [[Zeptogauss|G]] SI ZG [[Zettagauss|G]] SI T [[Tesla (unit)|T]] SI aT [[Attotesla|T]] SI cT [[Centitesla|T]] SI daT [[Decatesla|T]] SI dT [[Decitesla|T]] SI ET [[Exatesla|T]] SI fT [[Femtotesla|T]] SI GT [[Gigatesla|T]] SI hT [[Hectotesla|T]] SI kT [[Kilotesla|T]] SI MT [[Megatesla|T]] SI mT [[Millitesla|T]] SI uT [[Microtesla|T]] SI µT [[Microtesla|T]] SI nT [[Nanotesla|T]] SI PT [[Petatesla|T]] SI pT [[Picotesla|T]] SI TT [[Teratesla|T]] SI yT [[Yoctotesla|T]] SI YT [[Yottatesla|T]] SI zT [[Zeptotesla|T]] SI ZT [[Zettatesla|T]] SI == Astrophysics == au [[Astronomical unit|au]] c [[Speed of light|''c'']] ly [[Light-year|ly]] Earth mass [[Earth mass|''M''<sub>🜨</sub>]] Earth radius [[Earth radius|''R''<sub>🜨</sub>]] M_Earth [[Earth mass|''M''<sub>🜨</sub>]] R_Earth [[Earth radius|''R''<sub>🜨</sub>]] M+ [[Earth mass|''M''<sub>🜨</sub>]] R+ [[Earth radius|''R''<sub>🜨</sub>]] Jupiter mass [[Jupiter mass|''M''<sub>J</sub>]] Jupiter radius [[Jupiter radius|''R''<sub>J</sub>]] Jy [[Jansky|Jy]] M_Jupiter [[Jupiter mass|''M''<sub>J</sub>]] R_Jupiter [[Jupiter radius|''R''<sub>J</sub>]] Solar mass [[Solar mass|''M''<sub>&#x2609;</sub>]] solar mass [[Solar mass|''M''<sub>&#x2609;</sub>]] M_Solar [[Solar mass|''M''<sub>&#x2609;</sub>]] M_solar [[Solar mass|''M''<sub>&#x2609;</sub>]] R_Solar [[Solar radius|''R''<sub>&#x2609;</sub>]] R_solar [[Solar radius|''R''<sub>&#x2609;</sub>]] Solar radius [[Solar radius|''R''<sub>&#x2609;</sub>]] solar radius [[Solar radius|''R''<sub>&#x2609;</sub>]] Solar luminosity [[Solar luminosity|''L''<sub>&#x2609;</sub>]] solar luminosity [[Solar luminosity|''L''<sub>&#x2609;</sub>]] L_solar [[Solar luminosity|''L''<sub>&#x2609;</sub>]] L_Solar [[Solar luminosity|''L''<sub>&#x2609;</sub>]] Lo [[Solar luminosity|''L''<sub>&#x2609;</sub>]] pc2 [[Parsec|pc<sup>2</sup>]] pc3 [[Parsec|pc<sup>3</sup>]] kpc2 [[Parsec#Parsecs and kiloparsecs|kpc<sup>2</sup>]] kpc3 [[Parsec#Parsecs and kiloparsecs|kpc<sup>3</sup>]] kpc [[Parsec#Parsecs and kiloparsecs|kpc]] Mpc2 [[Parsec#Megaparsecs and gigaparsecs|Mpc<sup>2</sup>]] Mpc3 [[Parsec#Megaparsecs and gigaparsecs|Mpc<sup>3</sup>]] Mpc [[Parsec#Megaparsecs and gigaparsecs|Mpc]] Gpc2 [[Parsec#Megaparsecs and gigaparsecs|Gpc<sup>2</sup>]] Gpc3 [[Parsec#Megaparsecs and gigaparsecs|Gpc<sup>3</sup>]] Gpc [[Parsec#Megaparsecs and gigaparsecs|Gpc]] == Nuclear physics and chemistry == cm-1 [[Wavenumber|cm<sup>−1</sup>]] u [[Unified atomic mass unit|u]] osmol [[Osmole (unit)|osmol]] Osm [[Osmole (unit)|Osm]] M [[Molarity|M]] TM [[Molarity|M]] SI GM [[Molarity|M]] SI MM [[Molarity|M]] SI kM [[Molarity|M]] SI hM [[Molarity|M]] SI daM [[Molarity|M]] SI dM [[Molarity|M]] SI cM [[Molarity|M]] SI mM [[Molarity|M]] SI uM [[Molarity|M]] 1e-6 nM [[Molarity|M]] SI pM [[Molarity|M]] SI kg.mol-1 [[Molar mass|kg&sdot;mol<sup>−1</sup>]] kg/mol [[Molar mass|kg/mol]] g.mol-1 [[Molar mass|g&sdot;mol<sup>−1</sup>]] g/mol [[Molar mass|g/mol]] eV/c2 [[Electronvolt#Mass|eV/''c''<sup>2</sup>]] keV/c2 [[Electronvolt#Mass|keV/''c''<sup>2</sup>]] MeV/c2 [[Electronvolt#Mass|MeV/''c''<sup>2</sup>]] GeV/c2 [[Electronvolt#Mass|GeV/''c''<sup>2</sup>]] TeV/c2 [[Electronvolt#Mass|TeV/''c''<sup>2</sup>]] eV [[Electronvolt|eV]] meV [[Electronvolt|meV]] keV [[Electronvolt|keV]] MeV [[Electronvolt|MeV]] GeV [[Electronvolt|GeV]] TeV [[Electronvolt|TeV]] mol-1 [[Avogadro constant|mol<sup>−1</sup>]] J.mol-1 [[Joule per mole|J&sdot;mol<sup>−1</sup>]] J/mol [[Joule per mole|J/mol]] kJ.mol-1 [[Joule per mole|kJ&sdot;mol<sup>−1</sup>]] kJ/mol [[Joule per mole|kJ/mol]] MJ.mol-1 [[Joule per mole|MJ&sdot;mol<sup>−1</sup>]] MJ/mol [[Joule per mole|MJ/mol]] GJ.mol-1 [[Joule per mole|GJ&sdot;mol<sup>−1</sup>]] GJ/mol [[Joule per mole|GJ/mol]] TJ.mol-1 [[Joule per mole|TJ&sdot;mol<sup>−1</sup>]] TJ/mol [[Joule per mole|TJ/mol]] μB [[Bohr magneton|''μ''<sub>B</sub>]] == Numbers and phrases == pp [[Page (paper)|pp]] ppb [[Parts per billion|ppb]] 1e-9 ppm [[Parts per million|ppm]] 1e-6 billiard [[Orders of magnitude (numbers)#1015|billiard]] 1e15 billion [[1,000,000,000|billion]] 1e9 billionth [[1,000,000,000|billionth]] 1e-9 billionths [[1,000,000,000|billionths]] 1e-9 decilliard [[Orders of magnitude (numbers)#1063|decilliard]] 1e63 decillion [[Orders of magnitude (numbers)#1033|decillion]] 1e33 decillionth [[Orders of magnitude (numbers)#1033|decillionth]] 1e-33 decillionths [[Orders of magnitude (numbers)#1033|decillionths]] 1e-33 milliard [[1,000,000,000|milliard]] 1e9 million [[Million|million]] 1e6 millionth [[Million|millionth]] 1e-6 millionths [[Million|millionths]] 1e-6 nonilliard [[Orders of magnitude (numbers)#1057|nonilliard]] 1e57 nonillion [[Orders of magnitude (numbers)#1030|nonillion]] 1e30 nonillionth [[Orders of magnitude (numbers)#1030|nonillionth]] 1e-30 nonillionths [[Orders of magnitude (numbers)#1030|nonillionths]] 1e-30 octilliard [[Orders of magnitude (numbers)#1051|octilliard]] 1e51 octillion [[Orders of magnitude (numbers)#1027|octillion]] 1e27 octillionth [[Orders of magnitude (numbers)#1027|octillionth]] 1e-27 octillionths [[Orders of magnitude (numbers)#1027|octillionths]] 1e-27 quadrilliard [[Orders of magnitude (numbers)#1027|quadrilliard]] 1e27 quadrillion [[Orders of magnitude (numbers)#1015|quadrillion]] 1e15 quadrillionth [[Orders of magnitude (numbers)#1015|quadrillionth]] 1e-15 quadrillionths [[Orders of magnitude (numbers)#1015|quadrillionths]] 1e-15 quintilliard [[Orders of magnitude (numbers)#1033|quintilliard]] 1e33 quintillion [[Orders of magnitude (numbers)#1018|quintillion]] 1e18 quintillionth [[Orders of magnitude (numbers)#1018|quintillionth]] 1e-18 quintillionths [[Orders of magnitude (numbers)#1018|quintillionths]] 1e-18 septilliard [[Orders of magnitude (numbers)#1045|septilliard]] 1e45 septillion [[Orders of magnitude (numbers)#1024|septillion]] 1e24 septillionth [[Orders of magnitude (numbers)#1024|septillionth]] 1e-24 septillionths [[Orders of magnitude (numbers)#1024|septillionths]] 1e-24 sextilliard [[Orders of magnitude (numbers)#1039|sextilliard]] 1e39 sextillion [[Orders of magnitude (numbers)#1021|sextillion]] 1e21 sextillionth [[Orders of magnitude (numbers)#1021|sextillionth]] 1e-21 sextillionths [[Orders of magnitude (numbers)#1021|sextillionths]] 1e-21 trilliard [[Orders of magnitude (numbers)#1021|trilliard]] 1e21 trillion [[Orders of magnitude (numbers)#1012|trillion]] 1e12 trillionth [[Orders of magnitude (numbers)#1012|trillionth]] 1e-12 trillionths [[Orders of magnitude (numbers)#1012|trillionths]] 1e-12 == Angle and square angle == % % Percent ANGLE 0.01 percent % Percent ANGLE 0.01 per cent % Percent ANGLE 0.01 ‰ ‰ Per mil ANGLE 1e-3 per mil ‰ Per mil ANGLE 1e-3 per mill ‰ Per mil ANGLE 1e-3 per mille ‰ Per mil ANGLE 1e-3 permil ‰ Per mil ANGLE 1e-3 permill ‰ Per mil ANGLE 1e-3 permille ‰ Per mil ANGLE 1e-3 ° ° Degree (angle) ANGLE pi/180 deg ° Degree (angle) ANGLE pi/180 degree ° Degree (angle) NOSPACE pi/180 -- for a degree symbol that does not repeat ' ′ Minute of arc ANGLE pi/10800 ′ ′ Minute of arc ANGLE pi/10800 arcmin ′ Minute of arc ANGLE pi/10800 arcminute ′ Minute of arc ANGLE pi/10800 " ″ Second of arc ANGLE pi/648000 ″ ″ Second of arc ANGLE pi/648000 arcsec ″ Second of arc ANGLE pi/648000 arcsecond ″ Second of arc ANGLE pi/648000 mas [[Milliarcsecond|mas]] pi/648000000 uas [[Microarcsecond|μas]] pi/648000000000 μas [[Microarcsecond|μas]] pi/648000000000 sr [[Steradian|sr]] SI Ysr [[Steradian|sr]] SI Zsr [[Steradian|sr]] SI Esr [[Steradian|sr]] SI Psr [[Steradian|sr]] SI Tsr [[Steradian|sr]] SI Gsr [[Steradian|sr]] SI Msr [[Steradian|sr]] SI ksr [[Steradian|sr]] SI hsr [[Steradian|sr]] SI dasr [[Steradian|sr]] SI dsr [[Steradian|sr]] SI csr [[Steradian|sr]] SI msr [[Steradian|sr]] SI usr [[Steradian|sr]] SI μsr [[Steradian|sr]] SI nsr [[Steradian|sr]] SI psr [[Steradian|sr]] SI fsr [[Steradian|sr]] SI asr [[Steradian|sr]] SI zsr [[Steradian|sr]] SI ysr [[Steradian|sr]] SI -- next three symbols from [[MNRAS]] (https://academic.oup.com/mnras/pages/general_instructions) deg2 [[Square degree|deg<sup>2</sup>]] arcmin2 [[Square degree|arcmin<sup>2</sup>]] arcsec2 [[Square degree|arcsec<sup>2</sup>]] mas2 [[Square degree|mas<sup>2</sup>]] uas2 [[Square degree|μas<sup>2</sup>]] μas2 [[Square degree|μas<sup>2</sup>]] ]=] -- If val has "|long scale=on" the following definitions are used -- (then, if not found here, the normal definitions are used). -- Unit code [[Link|Symbol]] Flags/Scale local builtin_units_long_scale = [=[ == Long scale numbers and phrases == billion [[Orders of magnitude (numbers)#1012|billion]] 1e12 billionth [[Orders of magnitude (numbers)#1012|billionth]] 1e-12 billionths [[Orders of magnitude (numbers)#1012|billionths]] 1e-12 decillion [[Orders of magnitude (numbers)#1060|decillion]] 1e60 decillionth [[Orders of magnitude (numbers)#1060|decillionth]] 1e-60 decillionths [[Orders of magnitude (numbers)#1060|decillionths]] 1e-60 nonillion [[Orders of magnitude (numbers)#1054|nonillion]] 1e54 nonillionth [[Orders of magnitude (numbers)#1054|nonillionth]] 1e-54 nonillionths [[Orders of magnitude (numbers)#1054|nonillionths]] 1e-54 octillion [[Orders of magnitude (numbers)#1048|octillion]] 1e48 octillionth [[Orders of magnitude (numbers)#1048|octillionth]] 1e-48 octillionths [[Orders of magnitude (numbers)#1048|octillionths]] 1e-48 quadrillion [[Orders of magnitude (numbers)#1024|quadrillion]] 1e24 quadrillionth [[Orders of magnitude (numbers)#1024|quadrillionth]] 1e-24 quadrillionths [[Orders of magnitude (numbers)#1024|quadrillionths]] 1e-24 quintillion [[Orders of magnitude (numbers)#1030|quintillion]] 1e30 quintillionth [[Orders of magnitude (numbers)#1030|quintillionth]] 1e-30 quintillionths [[Orders of magnitude (numbers)#1030|quintillionths]] 1e-30 septillion [[Orders of magnitude (numbers)#1042|septillion]] 1e42 septillionth [[Orders of magnitude (numbers)#1042|septillionth]] 1e-42 septillionths [[Orders of magnitude (numbers)#1042|septillionths]] 1e-42 sextillion [[Orders of magnitude (numbers)#1036|sextillion]] 1e36 sextillionth [[Orders of magnitude (numbers)#1036|sextillionth]] 1e-36 sextillionths [[Orders of magnitude (numbers)#1036|sextillionths]] 1e-36 trillion [[Orders of magnitude (numbers)#1018|trillion]] 1e18 trillionth [[Orders of magnitude (numbers)#1018|trillionth]] 1e-18 trillionths [[Orders of magnitude (numbers)#1018|trillionths]] 1e-18 ]=] return { builtin_units = builtin_units, builtin_units_long_scale = builtin_units_long_scale } s7a93709ut3v4eqoq5rddkz3xns5jtn Module:Convert 828 34732 126091 2026-07-15T10:50:59Z Fongcwele 16873 Created page with "-- Convert a value from one unit of measurement to another. -- Example: {{convert|123|lb|kg}} --> 123 pounds (56 kg) -- See [[:en:Template:Convert/Transwiki guide]] if copying to another wiki. local MINUS = '−' -- Unicode U+2212 MINUS SIGN (UTF-8: e2 88 92) local abs = math.abs local floor = math.floor local format = string.format local log10 = math.log10 local ustring = mw.ustring local ulen = ustring.len local usub = ustring.sub -- Configuration options to keep ma..." 126091 Scribunto text/plain -- Convert a value from one unit of measurement to another. -- Example: {{convert|123|lb|kg}} --> 123 pounds (56 kg) -- See [[:en:Template:Convert/Transwiki guide]] if copying to another wiki. local MINUS = '−' -- Unicode U+2212 MINUS SIGN (UTF-8: e2 88 92) local abs = math.abs local floor = math.floor local format = string.format local log10 = math.log10 local ustring = mw.ustring local ulen = ustring.len local usub = ustring.sub -- Configuration options to keep magic values in one location. -- Conversion data and message text are defined in separate modules. local config, maxsigfig local numdot -- must be '.' or ',' or a character which works in a regex local numsep, numsep_remove, numsep_remove2 local data_code, all_units local text_code local varname -- can be a code to use variable names that depend on value local from_en_table -- to translate an output string of en digits to local language local to_en_table -- to translate an input string of digits in local language to en -- Use translation_table in convert/text to change the following. local en_default -- true uses lang=en unless convert has lang=local or local digits local group_method = 3 -- code for how many digits are in a group local per_word = 'per' -- for units like "liters per kilometer" local plural_suffix = 's' -- only other useful value is probably '' to disable plural unit names local omitsep -- true to omit separator before local symbol/name -- All units should be defined in the data module. However, to cater for quick changes -- and experiments, any unknown unit is looked up in an extra data module, if it exists. -- That module would be transcluded in only a small number of pages, so there should be -- little server overhead from making changes, and changes should propagate quickly. local extra_module -- name of module with extra units local extra_units -- nil or table of extra units from extra_module -- Some options in the invoking template can set variables used later in the module. local currency_text -- for a user-defined currency symbol: {{convert|12|$/ha|$=€}} (euro replaces dollar) local function from_en(text) -- Input is a string representing a number in en digits with '.' decimal mark, -- without digit grouping (which is done just after calling this). -- Return the translation of the string with numdot and digits in local language. if numdot ~= '.' then text = text:gsub('%.', numdot) end if from_en_table then text = text:gsub('%d', from_en_table) end return text end local function to_en(text) -- Input is a string representing a number in the local language with -- an optional numdot decimal mark and numsep digit grouping. -- Return the translation of the string with '.' mark and en digits, -- and no separators (they have to be removed here to handle cases like -- numsep = '.' and numdot = ',' with input "1.234.567,8"). if to_en_table then text = ustring.gsub(text, '%d', to_en_table) end if numsep_remove then text = text:gsub(numsep_remove, '') end if numsep_remove2 then text = text:gsub(numsep_remove2, '') end if numdot ~= '.' then text = text:gsub(numdot, '.') end return text end local function decimal_mark(text) -- Return ',' if text probably is using comma for decimal mark, or has no decimal mark. -- Return '.' if text probably is using dot for decimal mark. -- Otherwise return nothing (decimal mark not known). if not text:find('[.,]') then return ',' end text = text:gsub('^%-', ''):gsub('%+%d+/%d+$', ''):gsub('[Ee]%-?%d+$', '') local decimal = text:match('^0?([.,])%d+$') or text:match('%d([.,])%d?%d?$') or text:match('%d([.,])%d%d%d%d+$') if decimal then return decimal end if text:match('%.%d+%.') then return ',' end if text:match('%,%d+,') then return '.' end end local add_warning, with_separator -- forward declarations local function to_en_with_check(text, parms) -- Version of to_en() for a wiki using numdot = ',' and numsep = '.' to check -- text (an input number as a string) which might have been copied from enwiki. -- For example, in '1.234' the '.' could be a decimal mark or a group separator. -- From viwiki. if to_en_table then text = ustring.gsub(text, '%d', to_en_table) end if decimal_mark(text) == '.' then local original = text text = text:gsub(',', '') -- for example, interpret "1,234.5" as an enwiki value if parms then add_warning(parms, 0, 'cvt_enwiki_num', original, with_separator({}, text)) end else if numsep_remove then text = text:gsub(numsep_remove, '') end if numsep_remove2 then text = text:gsub(numsep_remove2, '') end if numdot ~= '.' then text = text:gsub(numdot, '.') end end return text end local function omit_separator(id) -- Return true if there should be no separator before id (a unit symbol or name). -- For zhwiki, there should be no separator if id uses local characters. -- The following kludge should be a sufficient test. if omitsep then if id:sub(1, 2) == '-{' then -- for "-{...}-" content language variant return true end if id:byte() > 127 then local first = usub(id, 1, 1) if first ~= 'Å' and first ~= '°' and first ~= 'µ' then return true end end end return id:sub(1, 1) == '/' -- no separator before units like "/ha" end local spell_module -- name of module that can spell numbers local speller -- function from that module to handle spelling (set if needed) local wikidata_module, wikidata_data_module -- names of Wikidata modules local wikidata_code, wikidata_data -- exported tables from those modules (set if needed) local function set_config(args) -- Set configuration options from template #invoke or defaults. config = args maxsigfig = config.maxsigfig or 14 -- maximum number of significant figures local data_module, text_module local sandbox = config.sandbox and ('/' .. config.sandbox) or '' data_module = "Module:Convert/data" .. sandbox text_module = "Module:Convert/text" .. sandbox extra_module = "Module:Convert/extra" .. sandbox wikidata_module = "Module:Convert/wikidata" .. sandbox wikidata_data_module = "Module:Convert/wikidata/data" .. sandbox spell_module = "Module:ConvertNumeric" data_code = mw.loadData(data_module) text_code = mw.loadData(text_module) all_units = data_code.all_units local translation = text_code.translation_table if translation then numdot = translation.numdot numsep = translation.numsep if numdot == ',' and numsep == '.' then if text_code.all_messages.cvt_enwiki_num then to_en = to_en_with_check end end if translation.group then group_method = translation.group end if translation.per_word then per_word = translation.per_word end if translation.plural_suffix then plural_suffix = translation.plural_suffix end varname = translation.varname from_en_table = translation.from_en local use_workaround = true if use_workaround then -- 2013-07-05 workaround bug by making a copy of the required table. -- mw.ustring.gsub fails with a table (to_en_table) as the replacement, -- if the table is accessed via mw.loadData. local source = translation.to_en if source then to_en_table = {} for k, v in pairs(source) do to_en_table[k] = v end end else to_en_table = translation.to_en end if translation.lang == 'en default' then en_default = true -- for hiwiki end omitsep = translation.omitsep -- for zhwiki end numdot = config.numdot or numdot or '.' -- decimal mark before fractional digits numsep = config.numsep or numsep or ',' -- group separator for numbers -- numsep should be ',' or '.' or '' or '&nbsp;' or a Unicode character. -- numsep_remove must work in a regex to identify separators to be removed. if numsep ~= '' then numsep_remove = (numsep == '.') and '%.' or numsep end if numsep ~= ',' and numdot ~= ',' then numsep_remove2 = ',' -- so numbers copied from enwiki will work end end local function collection() -- Return a table to hold items. return { n = 0, add = function (self, item) self.n = self.n + 1 self[self.n] = item end, } end local function divide(numerator, denominator) -- Return integers quotient, remainder resulting from dividing the two -- given numbers, which should be unsigned integers. local quotient, remainder = floor(numerator / denominator), numerator % denominator if not (0 <= remainder and remainder < denominator) then -- Floating point limits may need this, as in {{convert|160.02|Ym|ydftin}}. remainder = 0 end return quotient, remainder end local function split(text, delimiter) -- Return a numbered table with fields from splitting text. -- The delimiter is used in a regex without escaping (for example, '.' would fail). -- Each field has any leading/trailing whitespace removed. local t = {} text = text .. delimiter -- to get last item for item in text:gmatch('%s*(.-)%s*' .. delimiter) do table.insert(t, item) end return t end local function strip(text) -- If text is a string, return its content with no leading/trailing -- whitespace. Otherwise return nil (a nil argument gives a nil result). if type(text) == 'string' then return text:match("^%s*(.-)%s*$") end end local function table_len(t) -- Return length (<100) of a numbered table to replace #t which is -- documented to not work if t is accessed via mw.loadData(). for i = 1, 100 do if t[i] == nil then return i - 1 end end end local function wanted_category(catkey, catsort, want_warning) -- Return message category if it is wanted in current namespace, -- otherwise return ''. local cat local title = mw.title.getCurrentTitle() if title then local nsdefault = '0' -- default namespace: '0' = article; '0,10' = article and template local namespace = title.namespace for _, v in ipairs(split(config.nscat or nsdefault, ',')) do if namespace == tonumber(v) then cat = text_code.all_categories[want_warning and 'warning' or catkey] if catsort and catsort ~= '' and cat:sub(-2) == ']]' then cat = cat:sub(1, -3) .. '|' .. mw.text.nowiki(usub(catsort, 1, 20)) .. ']]' end break end end end return cat or '' end local function message(parms, mcode, is_warning) -- Return wikitext for an error message, including category if specified -- for the message type. -- mcode = numbered table specifying the message: -- mcode[1] = 'cvt_xxx' (string used as a key to get message info) -- mcode[2] = 'parm1' (string to replace '$1' if any in message) -- mcode[3] = 'parm2' (string to replace '$2' if any in message) -- mcode[4] = 'parm3' (string to replace '$3' if any in message) local msg if type(mcode) == 'table' then if mcode[1] == 'cvt_no_output' then -- Some errors should cause convert to output an empty string, -- for example, for an optional field in an infobox. return '' end msg = text_code.all_messages[mcode[1]] end parms.have_problem = true local function subparm(fmt, ...) local rep = {} for i, v in ipairs({...}) do rep['$' .. i] = v end return (fmt:gsub('$%d+', rep)) end if msg then local parts = {} local regex, replace = msg.regex, msg.replace for i = 1, 3 do local limit = 40 local s = mcode[i + 1] if s then if regex and replace then s = s:gsub(regex, replace) limit = nil -- allow long "should be" messages end -- Escape user input so it does not break the message. -- To avoid tags (like {{convert|1<math>23</math>|m}}) breaking -- the mouseover title, any strip marker starting with char(127) is -- replaced with '...' (text not needing i18n). local append local pos = s:find(string.char(127), 1, true) if pos then append = '...' s = s:sub(1, pos - 1) end if limit and ulen(s) > limit then s = usub(s, 1, limit) append = '...' end s = mw.text.nowiki(s) .. (append or '') else s = '?' end parts['$' .. i] = s end local function ispreview() -- Return true if a prominent message should be shown. if parms.test == 'preview' or parms.test == 'nopreview' then -- For testing, can preview a real message or simulate a preview -- when running automated tests. return parms.test == 'preview' end local success, revid = pcall(function () return (parms.frame):preprocess('{{REVISIONID}}') end) return success and (revid == '') end local want_warning = is_warning and not config.warnings and -- show unobtrusive warnings if config.warnings not configured not msg.nowarn -- but use msg settings, not standard warning, if specified local title = string.gsub(msg[1] or 'Missing message', '$%d+', parts) local text = want_warning and '*' or msg[2] or 'Missing message' local cat = wanted_category(msg[3], mcode[2], want_warning) local anchor = msg[4] or '' local fmtkey = ispreview() and 'cvt_format_preview' or (want_warning and 'cvt_format2' or msg.format or 'cvt_format') local fmt = text_code.all_messages[fmtkey] or 'convert: bug' return subparm(fmt, title:gsub('"', '&quot;'), text, cat, anchor) end return 'Convert internal error: unknown message' end function add_warning(parms, level, key, text1, text2) -- for forward declaration above -- If enabled, add a warning that will be displayed after the convert result. -- A higher level is more verbose: more kinds of warnings are displayed. -- To reduce output noise, only the first warning is displayed. if level <= (tonumber(config.warnings) or 1) then if parms.warnings == nil then parms.warnings = message(parms, { key, text1, text2 }, true) end end end local function spell_number(parms, inout, number, numerator, denominator) -- Return result of spelling (number, numerator, denominator), or -- return nil if spelling is not available or not supported for given text. -- Examples (each value must be a string or nil): -- number numerator denominator output -- ------ --------- ----------- ------------------- -- "1.23" nil nil one point two three -- "1" "2" "3" one and two thirds -- nil "2" "3" two thirds if not speller then local function get_speller(module) return require(module).spell_number end local success success, speller = pcall(get_speller, spell_module) if not success or type(speller) ~= 'function' then add_warning(parms, 1, 'cvt_no_spell', 'spell') return nil end end local case if parms.spell_upper == inout then case = true parms.spell_upper = nil -- only uppercase first word in a multiple unit end local sp = not parms.opt_sp_us local adj = parms.opt_adjectival return speller(number, numerator, denominator, case, sp, adj) end ------------------------------------------------------------------------ -- BEGIN: Code required only for built-in units. -- LATER: If need much more code, move to another module to simplify this module. local function speed_of_sound(altitude) -- This is for the Mach built-in unit of speed. -- Return speed of sound in metres per second at given altitude in feet. -- If no altitude given, use default (zero altitude = sea level). -- Table gives speed of sound in miles per hour at various altitudes: -- altitude = -17,499 to 402,499 feet -- mach_table[a + 4] = s where -- a = (altitude / 5000) rounded to nearest integer (-3 to 80) -- s = speed of sound (mph) at that altitude -- From: http://www.aerospaceweb.org/question/atmosphere/q0112.shtml local mach_table = { -- a = 799.5, 787.0, 774.2, 761.207051, -- -3 to 0 748.0, 734.6, 721.0, 707.0, 692.8, 678.3, 663.5, 660.1, 660.1, 660.1, -- 1 to 10 660.1, 660.1, 660.1, 662.0, 664.3, 666.5, 668.9, 671.1, 673.4, 675.6, -- 11 to 20 677.9, 683.7, 689.9, 696.0, 702.1, 708.1, 714.0, 719.9, 725.8, 731.6, -- 21 to 30 737.3, 737.7, 737.7, 736.2, 730.5, 724.6, 718.8, 712.9, 707.0, 701.0, -- 31 to 40 695.0, 688.9, 682.8, 676.6, 670.4, 664.1, 657.8, 652.9, 648.3, 643.7, -- 41 to 50 639.1, 634.4, 629.6, 624.8, 620.0, 615.2, 613.2, 613.2, 613.2, 613.5, -- 51 to 60 614.4, 615.3, 616.7, 619.8, 623.4, 629.7, 635.0, 641.1, 650.6, 660.0, -- 61 to 70 672.5, 674.3, 676.1, 677.9, 679.7, 681.5, 683.3, 685.1, 686.8, 688.6, -- 71 to 80 } local function lerp(t, v0, v1) return t * v1 + (1 - t) * v0 end altitude = (altitude or 0) / 5000 if altitude < -3 then altitude = -3 elseif altitude > 80 then altitude = 80 end local mach_mph local a = math.floor(altitude) if a == altitude then mach_mph = mach_table[a + 4] else mach_mph = lerp(altitude - a, mach_table[a + 4], mach_table[a + 5]) end return mach_mph * 0.44704 -- mph converted to m/s end -- END: Code required only for built-in units. ------------------------------------------------------------------------ local function add_style(parms, class) -- Add selected template style to parms if not already present. parms.templatestyles = parms.templatestyles or {} if not parms.templatestyles[class] then parms.templatestyles[class] = parms.frame:extensionTag({ name = 'templatestyles', args = { src = text_code.titles[class] } }) end end local function get_styles(parms) -- Return string of required template styles, empty if none. if parms.templatestyles then local t = {} for _, v in pairs(parms.templatestyles) do table.insert(t, v) end return table.concat(t) end return '' end local function get_range(word) -- Return a range (string or table) corresponding to word (like "to"), -- or return nil if not a range word. local ranges = text_code.ranges return ranges.types[word] or ranges.types[ranges.aliases[word]] end local function check_mismatch(unit1, unit2) -- If unit1 cannot be converted to unit2, return an error message table. -- This allows conversion between units of the same type, and between -- Nm (normally torque) and ftlb (energy), as in gun-related articles. -- This works because Nm is the base unit (scale = 1) for both the -- primary type (torque), and the alternate type (energy, where Nm = J). -- A match occurs if the primary types are the same, or if unit1 matches -- the alternate type of unit2, and vice versa. That provides a whitelist -- of which conversions are permitted between normally incompatible types. if unit1.utype == unit2.utype or (unit1.utype == unit2.alttype and unit1.alttype == unit2.utype) then return nil end return { 'cvt_mismatch', unit1.utype, unit2.utype } end local function override_from(out_table, in_table, fields) -- Copy the specified fields from in_table to out_table, but do not -- copy nil fields (keep any corresponding field in out_table). for _, field in ipairs(fields) do if in_table[field] then out_table[field] = in_table[field] end end end local function shallow_copy(t) -- Return a shallow copy of table t. -- Do not need the features and overhead of the Scribunto mw.clone(). local result = {} for k, v in pairs(t) do result[k] = v end return result end local unit_mt = { -- Metatable to get missing values for a unit that does not accept SI prefixes. -- Warning: The boolean value 'false' is returned for any missing field -- so __index is not called twice for the same field in a given unit. __index = function (self, key) local value if key == 'name1' or key == 'sym_us' then value = self.symbol elseif key == 'name2' then value = self.name1 .. plural_suffix elseif key == 'name1_us' then value = self.name1 if not rawget(self, 'name2_us') then -- If name1_us is 'foot', do not make name2_us by appending plural_suffix. self.name2_us = self.name2 end elseif key == 'name2_us' then local raw1_us = rawget(self, 'name1_us') if raw1_us then value = raw1_us .. plural_suffix else value = self.name2 end elseif key == 'link' then value = self.name1 else value = false end rawset(self, key, value) return value end } local function prefixed_name(unit, name, index) -- Return unit name with SI prefix inserted at correct position. -- index = 1 (name1), 2 (name2), 3 (name1_us), 4 (name2_us). -- The position is a byte (not character) index, so use Lua's sub(). local pos = rawget(unit, 'prefix_position') if type(pos) == 'string' then pos = tonumber(split(pos, ',')[index]) end if pos then return name:sub(1, pos - 1) .. unit.si_name .. name:sub(pos) end return unit.si_name .. name end local unit_prefixed_mt = { -- Metatable to get missing values for a unit that accepts SI prefixes. -- Before use, fields si_name, si_prefix must be defined. -- The unit must define _symbol, _name1 and -- may define _sym_us, _name1_us, _name2_us -- (_sym_us, _name2_us may be defined for a language using sp=us -- to refer to a variant unrelated to U.S. units). __index = function (self, key) local value if key == 'symbol' then value = self.si_prefix .. self._symbol if value == 'l' then value = 'L' end elseif key == 'sym_us' then value = rawget(self, '_sym_us') if value then value = self.si_prefix .. value else value = self.symbol end elseif key == 'name1' then value = prefixed_name(self, self._name1, 1) elseif key == 'name2' then value = rawget(self, '_name2') if value then value = prefixed_name(self, value, 2) else value = self.name1 .. plural_suffix end elseif key == 'name1_us' then value = rawget(self, '_name1_us') if value then value = prefixed_name(self, value, 3) else value = self.name1 end elseif key == 'name2_us' then value = rawget(self, '_name2_us') if value then value = prefixed_name(self, value, 4) elseif rawget(self, '_name1_us') then value = self.name1_us .. plural_suffix else value = self.name2 end elseif key == 'link' then value = self.name1 else value = false end rawset(self, key, value) return value end } local unit_per_mt = { -- Metatable to get values for a per unit of form "x/y". -- This is never called to determine a unit name or link because per units -- are handled as a special case. -- Similarly, the default output is handled elsewhere, and for a symbol -- this is only called from get_default() for default_exceptions. __index = function (self, key) local value if key == 'symbol' then local per = self.per local unit1, unit2 = per[1], per[2] if unit1 then value = unit1[key] .. '/' .. unit2[key] else value = '/' .. unit2[key] end elseif key == 'sym_us' then value = self.symbol elseif key == 'scale' then local per = self.per local unit1, unit2 = per[1], per[2] value = (unit1 and unit1.scale or 1) * self.scalemultiplier / unit2.scale else value = false end rawset(self, key, value) return value end } local function make_per(unitcode, unit_table, ulookup) -- Return true, t where t is a per unit with unit codes expanded to unit tables, -- or return false, t where t is an error message table. local result = { unitcode = unitcode, utype = unit_table.utype, per = {} } override_from(result, unit_table, { 'invert', 'iscomplex', 'default', 'link', 'symbol', 'symlink' }) result.symbol_raw = (result.symbol or false) -- to distinguish between a defined exception and a metatable calculation local prefix for i, v in ipairs(unit_table.per) do if i == 1 and v == '' then -- First unit symbol can be empty; that gives a nil first unit table. elseif i == 1 and text_code.currency[v] then prefix = currency_text or v else local success, t = ulookup(v) if not success then return false, t end result.per[i] = t end end local multiplier = unit_table.multiplier if not result.utype then -- Creating an automatic per unit. local unit1 = result.per[1] local utype = (unit1 and unit1.utype or prefix or '') .. '/' .. result.per[2].utype local t = data_code.per_unit_fixups[utype] if t then if type(t) == 'table' then utype = t.utype or utype result.link = result.link or t.link multiplier = multiplier or t.multiplier else utype = t end end result.utype = utype end result.scalemultiplier = multiplier or 1 result.vprefix = prefix or false -- set to non-nil to avoid calling __index return true, setmetatable(result, unit_per_mt) end local function lookup(parms, unitcode, what, utable, fails, depth) -- Return true, t where t is a copy of the unit's converter table, -- or return false, t where t is an error message table. -- Parameter 'what' determines whether combination units are accepted: -- 'no_combination' : single unit only -- 'any_combination' : single unit or combination or output multiple -- 'only_multiple' : single unit or output multiple only -- Parameter unitcode is a symbol (like 'g'), with an optional SI prefix (like 'kg'). -- If, for example, 'kg' is in this table, that entry is used; -- otherwise the prefix ('k') is applied to the base unit ('g'). -- If unitcode is a known combination code (and if allowed by what), -- a table of output multiple unit tables is included in the result. -- For compatibility with the old template, an underscore in a unitcode is -- replaced with a space so usage like {{convert|350|board_feet}} works. -- Wikignomes may also put two spaces or "&nbsp;" in combinations, so -- replace underscore, "&nbsp;", and multiple spaces with a single space. utable = utable or parms.unittable or all_units fails = fails or {} depth = depth and depth + 1 or 1 if depth > 9 then -- There are ways to mistakenly define units which result in infinite -- recursion when lookup() is called. That gives a long delay and very -- confusing error messages, so the depth parameter is used as a guard. return false, { 'cvt_lookup', unitcode } end if unitcode == nil or unitcode == '' then return false, { 'cvt_no_unit' } end unitcode = unitcode:gsub('_', ' '):gsub('&nbsp;', ' '):gsub(' +', ' ') local function call_make_per(t) return make_per(unitcode, t, function (ucode) return lookup(parms, ucode, 'no_combination', utable, fails, depth) end ) end local t = utable[unitcode] if t then if t.shouldbe then return false, { 'cvt_should_be', t.shouldbe } end if t.sp_us then parms.opt_sp_us = true end local target = t.target -- nil, or unitcode is an alias for this target if target then local success, result = lookup(parms, target, what, utable, fails, depth) if not success then return false, result end override_from(result, t, { 'customary', 'default', 'link', 'symbol', 'symlink', 'usename' }) if t.default then result.defkey = unitcode -- so default_exceptions uses the alias code, not the target symbol end local multiplier = t.multiplier if multiplier then result.multiplier = tostring(multiplier) result.scale = result.scale * multiplier end return true, result end if t.per then return call_make_per(t) end local combo = t.combination -- nil or a table of unitcodes if combo then local multiple = t.multiple if what == 'no_combination' or (what == 'only_multiple' and not multiple) then return false, { 'cvt_bad_unit', unitcode } end -- Recursively create a combination table containing the -- converter table of each unitcode. local result = { utype = t.utype, multiple = multiple, combination = {} } local cvt = result.combination for i, v in ipairs(combo) do local success, t = lookup(parms, v, multiple and 'no_combination' or 'only_multiple', utable, fails, depth) if not success then return false, t end cvt[i] = t end return true, result end local result = shallow_copy(t) result.unitcode = unitcode if result.prefixes then result.si_name = '' result.si_prefix = '' return true, setmetatable(result, unit_prefixed_mt) end return true, setmetatable(result, unit_mt) end local SIprefixes = text_code.SIprefixes for plen = SIprefixes[1] or 2, 1, -1 do -- Look for an SI prefix; should never occur with an alias. -- Check for longer prefix first ('dam' is decametre). -- SIprefixes[1] = prefix maximum #characters (as seen by mw.ustring.sub). local prefix = usub(unitcode, 1, plen) local si = SIprefixes[prefix] if si then local t = utable[usub(unitcode, plen+1)] if t and t.prefixes then local result = shallow_copy(t) result.unitcode = unitcode result.si_name = parms.opt_sp_us and si.name_us or si.name result.si_prefix = si.prefix or prefix result.scale = t.scale * 10 ^ (si.exponent * t.prefixes) return true, setmetatable(result, unit_prefixed_mt) end end end -- Accept user-defined combinations like "acre+m2+ha" or "acre m2 ha" for output. -- If '+' is used, each unit code can include a space, and any error is fatal. -- If ' ' is used and if each space-separated word is a unit code, it is a combo, -- but errors are not fatal so the unit code can be looked up as an extra unit. local err_is_fatal local combo = collection() if unitcode:find('+', 1, true) then err_is_fatal = true for item in (unitcode .. '+'):gmatch('%s*(.-)%s*%+') do if item ~= '' then combo:add(item) end end elseif unitcode:find('%s') then for item in unitcode:gmatch('%S+') do combo:add(item) end end if combo.n > 1 then local function lookup_combo() if what == 'no_combination' or what == 'only_multiple' then return false, { 'cvt_bad_unit', unitcode } end local result = { combination = {} } local cvt = result.combination for i, v in ipairs(combo) do local success, t = lookup(parms, v, 'only_multiple', utable, fails, depth) if not success then return false, t end if i == 1 then result.utype = t.utype else local mismatch = check_mismatch(result, t) if mismatch then return false, mismatch end end cvt[i] = t end return true, result end local success, result = lookup_combo() if success or err_is_fatal then return success, result end end -- Accept any unit with an engineering notation prefix like "e6cuft" -- (million cubic feet), but not chained prefixes like "e3e6cuft", -- and not if the unit is a combination or multiple, -- and not if the unit has an offset or is a built-in. -- Only en digits are accepted. local e, exponent, baseunit = unitcode:match('^([Ee])(%d+)(.*)') if exponent then local engscale = text_code.eng_scales[exponent] if engscale then local success, result = lookup(parms, baseunit, 'no_combination', utable, fails, depth) if success and not (result.offset or result.builtin or result.engscale) then if e == 'E' then result.this_number_word = true unitcode = 'e' .. unitcode:sub(2) end result.unitcode = unitcode -- 'e6cuft' not 'cuft' result.defkey = unitcode -- key to lookup default exception result.engscale = engscale result.scale = result.scale * 10 ^ tonumber(exponent) return true, result end end end -- Look for x/y; split on right-most slash to get scale correct (x/y/z is x/y per z). local top, bottom = unitcode:match('^(.-)/([^/]+)$') if top and not unitcode:find('e%d') then -- If valid, create an automatic per unit for an "x/y" unit code. -- The unitcode must not include extraneous spaces. -- Engineering notation (apart from at start and which has been stripped before here), -- is not supported so do not make a per unit if find text like 'e3' in unitcode. local success, result = call_make_per({ per = {top, bottom} }) if success then return true, result end end if not parms.opt_no_extra and not get_range(unitcode) then -- Want the "what links here" list for the extra_module to show only cases -- where an extra unit is used, so do not require it when not needed -- or if looking up a range word which cannot be a unit. if not extra_units then local success, extra = pcall(function () return require(extra_module).extra_units end) if success and type(extra) == 'table' then extra_units = extra end end if extra_units then -- A unit in one data table might refer to a unit in the other table, so -- switch between them, relying on fails or depth to terminate loops. if not fails[unitcode] then fails[unitcode] = true local other = (utable == all_units) and extra_units or all_units local success, result = lookup(parms, unitcode, what, other, fails, depth) if success then return true, result end end end end if to_en_table then -- At fawiki it is common to translate all digits so a unit like "km2" becomes "km۲". local en_code = ustring.gsub(unitcode, '%d', to_en_table) if en_code ~= unitcode then return lookup(parms, en_code, what, utable, fails, depth) end end return false, { 'cvt_unknown', unitcode } end local function valid_number(num) -- Return true if num is a valid number. -- In Scribunto (different from some standard Lua), when expressed as a string, -- overflow or other problems are indicated with text like "inf" or "nan" -- which are regarded as invalid here (each contains "n"). if type(num) == 'number' and tostring(num):find('n', 1, true) == nil then return true end end local function hyphenated(name, parts) -- Return a hyphenated form of given name (for adjectival usage). -- The name may be linked and the target of the link must not be changed. -- Hypothetical examples: -- [[long ton|ton]] → [[long ton|ton]] (no change) -- [[tonne|long ton]] → [[tonne|long-ton]] -- [[metric ton|long ton]] → [[metric ton|long-ton]] -- [[long ton]] → [[long ton|long-ton]] -- Input can also have multiple links in a single name like: -- [[United States customary units|U.S.]] [[US gallon|gallon]] -- [[mile]]s per [[United States customary units|U.S.]] [[quart]] -- [[long ton]]s per [[short ton]] -- Assume that links cannot be nested (never like "[[abc[[def]]ghi]]"). -- This uses a simple and efficient procedure that works for most cases. -- Some units (if used) would require more, and can later think about -- adding a method to handle exceptions. -- The procedure is to replace each space with a hyphen, but -- not a space after ')' [for "(pre-1954&nbsp;US) nautical mile"], and -- not spaces immediately before '(' or in '(...)' [for cases like -- "British thermal unit (ISO)" and "Calorie (International Steam Table)"]. if name:find(' ', 1, true) then if parts then local pos if name:sub(1, 1) == '(' then pos = name:find(')', 1, true) if pos then return name:sub(1, pos+1) .. name:sub(pos+2):gsub(' ', '-') end elseif name:sub(-1) == ')' then pos = name:find('(', 1, true) if pos then return name:sub(1, pos-2):gsub(' ', '-') .. name:sub(pos-1) end end return name:gsub(' ', '-') end parts = collection() for before, item, after in name:gmatch('([^[]*)(%[%[[^[]*%]%])([^[]*)') do if item:find(' ', 1, true) then local prefix local plen = item:find('|', 1, true) if plen then prefix = item:sub(1, plen) item = item:sub(plen + 1, -3) else prefix = item:sub(1, -3) .. '|' item = item:sub(3, -3) end item = prefix .. hyphenated(item, parts) .. ']]' end parts:add(before:gsub(' ', '-') .. item .. after:gsub(' ', '-')) end if parts.n == 0 then -- No link like "[[...]]" was found in the original name. parts:add(hyphenated(name, parts)) end return table.concat(parts) end return name end local function hyphenated_maybe(parms, want_name, sep, id, inout) -- Return s, f where -- s = id, possibly modified -- f = true if hyphenated -- Possible modifications: hyphenate; prepend '-'; append mid text. if id == nil or id == '' then return '' end local mid = (inout == (parms.opt_flip and 'out' or 'in')) and parms.mid or '' if want_name then if parms.opt_adjectival then return '-' .. hyphenated(id) .. mid, true end if parms.opt_add_s and id:sub(-1) ~= 's' then id = id .. 's' -- for nowiki end end return sep .. id .. mid end local function use_minus(text) -- Return text with Unicode minus instead of '-', if present. if text:sub(1, 1) == '-' then return MINUS .. text:sub(2) end return text end local function digit_groups(parms, text, method) -- Return a numbered table of groups of digits (left-to-right, in local language). -- Parameter method is a number or nil: -- 3 for 3-digit grouping (default), or -- 2 for 3-then-2 grouping (only for digits before decimal mark). local len_right local len_left = text:find('.', 1, true) if len_left then len_right = #text - len_left len_left = len_left - 1 else len_left = #text end local twos = method == 2 and len_left > 5 local groups = collection() local run = len_left local n if run < 4 or (run == 4 and parms.opt_comma5) then if parms.opt_gaps then n = run else n = #text end elseif twos then n = run % 2 == 0 and 1 or 2 else n = run % 3 == 0 and 3 or run % 3 end while run > 0 do groups:add(n) run = run - n n = (twos and run > 3) and 2 or 3 end if len_right then if groups.n == 0 then groups:add(0) end if parms.opt_gaps and len_right > 3 then local want4 = not parms.opt_gaps3 -- true gives no gap before trailing single digit local isfirst = true run = len_right while run > 0 do n = (want4 and run == 4) and 4 or (run > 3 and 3 or run) if isfirst then isfirst = false groups[groups.n] = groups[groups.n] + 1 + n else groups:add(n) end run = run - n end else groups[groups.n] = groups[groups.n] + 1 + len_right end end local pos = 1 for i, length in ipairs(groups) do groups[i] = from_en(text:sub(pos, pos + length - 1)) pos = pos + length end return groups end function with_separator(parms, text) -- for forward declaration above -- Input text is a number in en digits with optional '.' decimal mark. -- Return an equivalent, formatted for display: -- with a custom decimal mark instead of '.', if wanted -- with thousand separators inserted, if wanted -- digits in local language -- The given text is like '123' or '123.' or '12345.6789'. -- The text has no sign (caller inserts that later, if necessary). -- When using gaps, they are inserted before and after the decimal mark. -- Separators are inserted only before the decimal mark. -- A trailing dot (as in '123.') is removed because their use appears to -- be accidental, and such a number should be shown as '123' or '123.0'. -- It is useful for convert to suppress the dot so, for example, '4000.' -- is a simple way of indicating that all the digits are significant. if text:sub(-1) == '.' then text = text:sub(1, -2) end if #text < 4 or parms.opt_nocomma or numsep == '' then return from_en(text) end local groups = digit_groups(parms, text, group_method) if parms.opt_gaps then if groups.n <= 1 then return groups[1] or '' end local nowrap = '<span style="white-space: nowrap">' local gap = '<span style="margin-left: 0.25em">' local close = '</span>' return nowrap .. groups[1] .. gap .. table.concat(groups, close .. gap, 2, groups.n) .. close .. close end return table.concat(groups, numsep) end -- An input value like 1.23e12 is displayed using scientific notation (1.23×10¹²). -- That also makes the output use scientific notation, except for small values. -- In addition, very small or very large output values use scientific notation. -- Use format(fmtpower, significand, '10', exponent) where each argument is a string. local fmtpower = '%s<span style="margin:0 .15em 0 .25em">×</span>%s<sup>%s</sup>' local function with_exponent(parms, show, exponent) -- Return wikitext to display the implied value in scientific notation. -- Input uses en digits; output uses digits in local language. return format(fmtpower, with_separator(parms, show), from_en('10'), use_minus(from_en(tostring(exponent)))) end local function make_sigfig(value, sigfig) -- Return show, exponent that are equivalent to the result of -- converting the number 'value' (where value >= 0) to a string, -- rounded to 'sigfig' significant figures. -- The returned items are: -- show: a string of digits; no sign and no dot; -- there is an implied dot before show. -- exponent: a number (an integer) to shift the implied dot. -- Resulting value = tonumber('.' .. show) * 10^exponent. -- Examples: -- make_sigfig(23.456, 3) returns '235', 2 (.235 * 10^2). -- make_sigfig(0.0023456, 3) returns '235', -2 (.235 * 10^-2). -- make_sigfig(0, 3) returns '000', 1 (.000 * 10^1). if sigfig <= 0 then sigfig = 1 elseif sigfig > maxsigfig then sigfig = maxsigfig end if value == 0 then return string.rep('0', sigfig), 1 end local exp, fracpart = math.modf(log10(value)) if fracpart >= 0 then fracpart = fracpart - 1 exp = exp + 1 end local digits = format('%.0f', 10^(fracpart + sigfig)) if #digits > sigfig then -- Overflow (for sigfig=3: like 0.9999 rounding to "1000"; need "100"). digits = digits:sub(1, sigfig) exp = exp + 1 end assert(#digits == sigfig, 'Bug: rounded number has wrong length') return digits, exp end -- Fraction output format. local fracfmt = { { -- Like {{frac}} (fraction slash). '<span class="frac">{SIGN}<span class="num">{NUM}</span>&frasl;<span class="den">{DEN}</span></span>', -- 1/2 '<span class="frac">{SIGN}{WHOLE}<span class="sr-only">+</span><span class="num">{NUM}</span>&frasl;<span class="den">{DEN}</span></span>', -- 1+2/3 style = 'frac', }, { -- Like {{sfrac}} (stacked fraction, that is, horizontal bar). '<span class="sfrac tion">{SIGN}<span class="num">{NUM}</span><span class="sr-only">/</span><span class="den">{DEN}</span></span>', -- 1//2 '<span class="sfrac">{SIGN}{WHOLE}<span class="sr-only">+</span><span class="tion"><span class="num">{NUM}</span><span class="sr-only">/</span><span class="den">{DEN}</span></span></span>', -- 1+2//3 style = 'sfrac', }, } local function format_fraction(parms, inout, negative, wholestr, numstr, denstr, do_spell, style) -- Return wikitext for a fraction, possibly spelled. -- Inputs use en digits and have no sign; output uses digits in local language. local wikitext if not style then style = parms.opt_fraction_horizontal and 2 or 1 end if wholestr == '' then wholestr = nil end local substitute = { SIGN = negative and MINUS or '', WHOLE = wholestr and with_separator(parms, wholestr), NUM = from_en(numstr), DEN = from_en(denstr), } wikitext = fracfmt[style][wholestr and 2 or 1]:gsub('{(%u+)}', substitute) if do_spell then if negative then if wholestr then wholestr = '-' .. wholestr else numstr = '-' .. numstr end end local s = spell_number(parms, inout, wholestr, numstr, denstr) if s then return s end end add_style(parms, fracfmt[style].style) return wikitext end local function format_number(parms, show, exponent, isnegative) -- Parameter show is a string or a table containing strings. -- Each string is a formatted number in en digits and optional '.' decimal mark. -- A table represents a fraction: integer, numerator, denominator; -- if a table is given, exponent must be nil. -- Return t where t is a table with fields: -- show = wikitext formatted to display implied value -- (digits in local language) -- is_scientific = true if show uses scientific notation -- clean = unformatted show (possibly adjusted and with inserted '.') -- (en digits) -- sign = '' or MINUS -- exponent = exponent (possibly adjusted) -- The clean and exponent fields can be used to calculate the -- rounded absolute value, if needed. -- -- The value implied by the arguments is found from: -- exponent is nil; and -- show is a string of digits (no sign), with an optional dot; -- show = '123.4' is value 123.4, '1234' is value 1234.0; -- or: -- exponent is an integer indicating where dot should be; -- show is a string of digits (no sign and no dot); -- there is an implied dot before show; -- show does not start with '0'; -- show = '1234', exponent = 3 is value 0.1234*10^3 = 123.4. -- -- The formatted result: -- * Is for an output value and is spelled if wanted and possible. -- * Includes a Unicode minus if isnegative and not spelled. -- * Uses a custom decimal mark, if wanted. -- * Has digits grouped where necessary, if wanted. -- * Uses scientific notation if requested, or for very small or large values -- (which forces result to not be spelled). -- * Has no more than maxsigfig significant digits -- (same as old template and {{#expr}}). local xhi, xlo -- these control when scientific notation (exponent) is used if parms.opt_scientific then xhi, xlo = 4, 2 -- default for output if input uses e-notation elseif parms.opt_scientific_always then xhi, xlo = 0, 0 -- always use scientific notation (experimental) else xhi, xlo = 10, 4 -- default end local sign = isnegative and MINUS or '' local maxlen = maxsigfig local tfrac if type(show) == 'table' then tfrac = show show = tfrac.wholestr assert(exponent == nil, 'Bug: exponent given with fraction') end if not tfrac and not exponent then local integer, dot, decimals = show:match('^(%d*)(%.?)(.*)') if integer == '0' or integer == '' then local zeros, figs = decimals:match('^(0*)([^0]?.*)') if #figs == 0 then if #zeros > maxlen then show = '0.' .. zeros:sub(1, maxlen) end elseif #zeros >= xlo then show = figs exponent = -#zeros elseif #figs > maxlen then show = '0.' .. zeros .. figs:sub(1, maxlen) end elseif #integer >= xhi then show = integer .. decimals exponent = #integer else maxlen = maxlen + #dot if #show > maxlen then show = show:sub(1, maxlen) end end end if exponent then local function zeros(n) return string.rep('0', n) end if #show > maxlen then show = show:sub(1, maxlen) end if exponent > xhi or exponent <= -xlo or (exponent == xhi and show ~= '1' .. zeros(xhi - 1)) then -- When xhi, xlo = 10, 4 (the default), scientific notation is used if the -- rounded value satisfies: value >= 1e9 or value < 1e-4 (1e9 = 0.1e10), -- except if show is '1000000000' (1e9), for example: -- {{convert|1000000000|m|m|sigfig=10}} → 1,000,000,000 metres (1,000,000,000 m) local significand if #show > 1 then significand = show:sub(1, 1) .. '.' .. show:sub(2) else significand = show end return { clean = '.' .. show, exponent = exponent, sign = sign, show = sign .. with_exponent(parms, significand, exponent-1), is_scientific = true, } end if exponent >= #show then show = show .. zeros(exponent - #show) -- result has no dot elseif exponent <= 0 then show = '0.' .. zeros(-exponent) .. show else show = show:sub(1, exponent) .. '.' .. show:sub(exponent+1) end end local formatted_show if tfrac then show = tostring(tfrac.value) -- to set clean in returned table formatted_show = format_fraction(parms, 'out', isnegative, tfrac.wholestr, tfrac.numstr, tfrac.denstr, parms.opt_spell_out) else if isnegative and show:match('^0.?0*$') then sign = '' -- don't show minus if result is negative but rounds to zero end formatted_show = sign .. with_separator(parms, show) if parms.opt_spell_out then formatted_show = spell_number(parms, 'out', sign .. show) or formatted_show end end return { clean = show, sign = sign, show = formatted_show, is_scientific = false, -- to avoid calling __index } end local function extract_fraction(parms, text, negative) -- If text represents a fraction, return -- value, altvalue, show, denominator -- where -- value is a number (value of the fraction in argument text) -- altvalue is an alternate interpretation of any fraction for the hands -- unit where "12.1+3/4" means 12 hands 1.75 inches -- show is a string (formatted text for display of an input value, -- and is spelled if wanted and possible) -- denominator is value of the denominator in the fraction -- Otherwise, return nil. -- Input uses en digits and '.' decimal mark (input has been translated). -- Output uses digits in local language and local decimal mark, if any. ------------------------------------------------------------------------ -- Originally this function accepted x+y/z where x, y, z were any valid -- numbers, possibly with a sign. For example '1.23e+2+1.2/2.4' = 123.5, -- and '2-3/8' = 1.625. However, such usages were found to be errors or -- misunderstandings, so since August 2014 the following restrictions apply: -- x (if present) is an integer or has a single digit after decimal mark -- y and z are unsigned integers -- e-notation is not accepted -- The overall number can start with '+' or '-' (so '12+3/4' and '+12+3/4' -- and '-12-3/4' are valid). -- Any leading negative sign is removed by the caller, so only inputs -- like the following are accepted here (may have whitespace): -- negative = false false true (there was a leading '-') -- text = '2/3' '+2/3' '2/3' -- text = '1+2/3' '+1+2/3' '1-2/3' -- text = '12.3+1/2' '+12.3+1/2' '12.3-1/2' -- Values like '12.3+1/2' are accepted, but are intended only for use -- with the hands unit (not worth adding code to enforce that). ------------------------------------------------------------------------ local leading_plus, prefix, numstr, slashes, denstr = text:match('^%s*(%+?)%s*(.-)%s*(%d+)%s*(/+)%s*(%d+)%s*$') if not leading_plus then -- Accept a single U+2044 fraction slash because that may be pasted. leading_plus, prefix, numstr, denstr = text:match('^%s*(%+?)%s*(.-)%s*(%d+)%s*⁄%s*(%d+)%s*$') slashes = '/' end local numerator = tonumber(numstr) local denominator = tonumber(denstr) if numerator == nil or denominator == nil or (negative and leading_plus ~= '') then return nil end local whole, wholestr if prefix == '' then wholestr = '' whole = 0 else -- Any prefix must be like '12+' or '12-' (whole number and fraction sign); -- '12.3+' and '12.3-' are also accepted (single digit after decimal point) -- because '12.3+1/2 hands' is valid (12 hands 3½ inches). local num1, num2, frac_sign = prefix:match('^(%d+)(%.?%d?)%s*([+%-])$') if num1 == nil then return nil end if num2 == '' then -- num2 must be '' or like '.1' but not '.' or '.12' wholestr = num1 else if #num2 ~= 2 then return nil end wholestr = num1 .. num2 end if frac_sign ~= (negative and '-' or '+') then return nil end whole = tonumber(wholestr) if whole == nil then return nil end end local value = whole + numerator / denominator if not valid_number(value) then return nil end local altvalue = whole + numerator / (denominator * 10) local style = #slashes -- kludge: 1 or 2 slashes can be used to select style if style > 2 then style = 2 end local wikitext = format_fraction(parms, 'in', negative, leading_plus .. wholestr, numstr, denstr, parms.opt_spell_in, style) return value, altvalue, wikitext, denominator end local function extract_number(parms, text, another, no_fraction) -- Return true, info if can extract a number from text, -- where info is a table with the result, -- or return false, t where t is an error message table. -- Input can use en digits or digits in local language and can -- have references at the end. Accepting references is intended -- for use in infoboxes with a field for a value passed to convert. -- Parameter another = true if the expected value is not the first. -- Before processing, the input text is cleaned: -- * Any thousand separators (valid or not) are removed. -- * Any sign is replaced with '-' (if negative) or '' (otherwise). -- That replaces Unicode minus with '-'. -- If successful, the returned info table contains named fields: -- value = a valid number -- altvalue = a valid number, usually same as value but different -- if fraction used (for hands unit) -- singular = true if value is 1 or -1 (to use singular form of units) -- clean = cleaned text with any separators and sign removed -- (en digits and '.' decimal mark) -- show = text formatted for output, possibly with ref strip markers -- (digits in local language and custom decimal mark) -- The resulting show: -- * Is for an input value and is spelled if wanted and possible. -- * Has a rounded value, if wanted. -- * Has digits grouped where necessary, if wanted. -- * If negative, a Unicode minus is used; otherwise the sign is -- '+' (if the input text used '+'), or is '' (if no sign in input). text = strip(text or '') local reference local pos = text:find('\127', 1, true) if pos then local before = text:sub(1, pos - 1) local remainder = text:sub(pos) local refs = {} while #remainder > 0 do local ref, spaces ref, spaces, remainder = remainder:match('^(\127[^\127]*UNIQ[^\127]*%-ref[^\127]*\127)(%s*)(.*)') if ref then table.insert(refs, ref) else refs = {} break end end if #refs > 0 then text = strip(before) reference = table.concat(refs) end end local clean = to_en(text, parms) if clean == '' then return false, { another and 'cvt_no_num2' or 'cvt_no_num' } end local isnegative, propersign = false, '' -- most common case local singular, show, denominator local value = tonumber(clean) local altvalue if value then local sign = clean:sub(1, 1) if sign == '+' or sign == '-' then propersign = (sign == '+') and '+' or MINUS clean = clean:sub(2) end if value < 0 then isnegative = true value = -value end else local valstr for _, prefix in ipairs({ '-', MINUS, '&minus;' }) do -- Including '-' sets isnegative in case input is a fraction like '-2-3/4'. local plen = #prefix if clean:sub(1, plen) == prefix then valstr = clean:sub(plen + 1) if valstr:match('^%s') then -- "- 1" is invalid but "-1 - 1/2" is ok return false, { 'cvt_bad_num', text } end break end end if valstr then isnegative = true propersign = MINUS clean = valstr value = tonumber(clean) end if value == nil then if not no_fraction then value, altvalue, show, denominator = extract_fraction(parms, clean, isnegative) end if value == nil then return false, { 'cvt_bad_num', text } end if value <= 1 then singular = true -- for example, "½ mile" or "one half mile" (singular unit) end end end if not valid_number(value) then -- for example, "1e310" may overflow return false, { 'cvt_invalid_num' } end if show == nil then -- clean is a non-empty string with no spaces, and does not represent a fraction, -- and value = tonumber(clean) is a number >= 0. -- If the input uses e-notation, show will be displayed using a power of ten, but -- we use the number as given so it might not be normalized scientific notation. -- The input value is spelled if specified so any e-notation is ignored; -- that allows input like 2e6 to be spelled as "two million" which works -- because the spell module converts '2e6' to '2000000' before spelling. local function rounded(value, default, exponent) local precision = parms.opt_ri if precision then local fmt = '%.' .. format('%d', precision) .. 'f' local result = fmt:format(tonumber(value) + 2e-14) -- fudge for some common cases of bad rounding if not exponent then singular = (tonumber(result) == 1) end return result end return default end singular = (value == 1) local scientific local significand, exponent = clean:match('^([%d.]+)[Ee]([+%-]?%d+)') if significand then show = with_exponent(parms, rounded(significand, significand, exponent), exponent) scientific = true else show = with_separator(parms, rounded(value, clean)) end show = propersign .. show if parms.opt_spell_in then show = spell_number(parms, 'in', propersign .. rounded(value, clean)) or show scientific = false end if scientific then parms.opt_scientific = true end end if isnegative and (value ~= 0) then value = -value altvalue = -(altvalue or value) end return true, { value = value, altvalue = altvalue or value, singular = singular, clean = clean, show = show .. (reference or ''), denominator = denominator, } end local function get_number(text) -- Return v, f where: -- v = nil (text is not a number) -- or -- v = value of text (text is a number) -- f = true if value is an integer -- Input can use en digits or digits in local language or separators, -- but no Unicode minus, and no fraction. if text then local number = tonumber(to_en(text)) if number then local _, fracpart = math.modf(number) return number, (fracpart == 0) end end end local function gcd(a, b) -- Return the greatest common denominator for the given values, -- which are known to be positive integers. if a > b then a, b = b, a end if a <= 0 then return b end local r = b % a if r <= 0 then return a end if r == 1 then return 1 end return gcd(r, a) end local function fraction_table(value, denominator) -- Return value as a string or a table: -- * If result is a string, there is no fraction, and the result -- is value formatted as a string of en digits. -- * If result is a table, it represents a fraction with named fields: -- wholestr, numstr, denstr (strings of en digits for integer, numerator, denominator). -- The result is rounded to the nearest multiple of (1/denominator). -- If the multiple is zero, no fraction is included. -- No fraction is included if value is very large as the fraction would -- be unhelpful, particularly if scientific notation is required. -- Input value is a non-negative number. -- Input denominator is a positive integer for the desired fraction. if value <= 0 then return '0' end if denominator <= 0 or value > 1e8 then return format('%.2f', value) end local integer, decimals = math.modf(value) local numerator = floor((decimals * denominator) + 0.5 + 2e-14) -- add fudge for some common cases of bad rounding if numerator >= denominator then integer = integer + 1 numerator = 0 end local wholestr = tostring(integer) if numerator > 0 then local div = gcd(numerator, denominator) if div > 1 then numerator = numerator / div denominator = denominator / div end return { wholestr = (integer > 0) and wholestr or '', numstr = tostring(numerator), denstr = tostring(denominator), value = value, } end return wholestr end local function preunits(count, preunit1, preunit2) -- If count is 1: -- ignore preunit2 -- return p1 -- else: -- preunit1 is used for preunit2 if the latter is empty -- return p1, p2 -- where: -- p1 is text to insert before the input unit -- p2 is text to insert before the output unit -- p1 or p2 may be nil to mean "no preunit" -- Using '+' gives output like "5+ feet" (no space before, but space after). local function withspace(text, wantboth) -- Return text with space before and, if wantboth, after. -- However, no space is added if there is a space or '&nbsp;' or '-' -- at that position ('-' is for adjectival text). -- There is also no space if text starts with '&' -- (e.g. '&deg;' would display a degree symbol with no preceding space). local char = text:sub(1, 1) if char == '&' then return text -- an html entity can be used to specify the exact display end if not (char == ' ' or char == '-' or char == '+') then text = ' ' .. text end if wantboth then char = text:sub(-1, -1) if not (char == ' ' or char == '-' or text:sub(-6, -1) == '&nbsp;') then text = text .. ' ' end end return text end local PLUS = '+ ' preunit1 = preunit1 or '' local trim1 = strip(preunit1) if count == 1 then if trim1 == '' then return nil end if trim1 == '+' then return PLUS end return withspace(preunit1, true) end preunit1 = withspace(preunit1) preunit2 = preunit2 or '' local trim2 = strip(preunit2) if trim1 == '+' then if trim2 == '' or trim2 == '+' then return PLUS, PLUS end preunit1 = PLUS end if trim2 == '' then if trim1 == '' then return nil, nil end preunit2 = preunit1 elseif trim2 == '+' then preunit2 = PLUS elseif trim2 == '&#32;' then -- trick to make preunit2 empty preunit2 = nil else preunit2 = withspace(preunit2) end return preunit1, preunit2 end local function range_text(range, want_name, parms, before, after, inout, options) -- Return before .. rtext .. after -- where rtext is the text that separates two values in a range. local rtext, adj_text, exception options = options or {} if type(range) == 'table' then -- Table must specify range text for ('off' and 'on') or ('input' and 'output'), -- and may specify range text for 'adj=on', -- and may specify exception = true. rtext = range[want_name and 'off' or 'on'] or range[((inout == 'in') == (parms.opt_flip == true)) and 'output' or 'input'] adj_text = range['adj'] exception = range['exception'] else rtext = range end if parms.opt_adjectival then if want_name or (exception and parms.abbr_org == 'on') then rtext = adj_text or rtext:gsub(' ', '-'):gsub('&nbsp;', '-') end end if rtext == '–' and (options.spaced or after:sub(1, #MINUS) == MINUS) then rtext = '&nbsp;– ' end return before .. rtext .. after end local function get_composite(parms, iparm, in_unit_table) -- Look for a composite input unit. For example, {{convert|1|yd|2|ft|3|in}} -- would result in a call to this function with -- iparm = 3 (parms[iparm] = "2", just after the first unit) -- in_unit_table = (unit table for "yd"; contains value 1 for number of yards) -- Return true, iparm, unit where -- iparm = index just after the composite units (7 in above example) -- unit = composite unit table holding all input units, -- or return true if no composite unit is present in parms, -- or return false, t where t is an error message table. local default, subinfo local composite_units, count = { in_unit_table }, 1 local fixups = {} local total = in_unit_table.valinfo[1].value local subunit = in_unit_table while subunit.subdivs do -- subdivs is nil or a table of allowed subdivisions local subcode = strip(parms[iparm+1]) local subdiv = subunit.subdivs[subcode] or subunit.subdivs[(all_units[subcode] or {}).target] if not subdiv then break end local success success, subunit = lookup(parms, subcode, 'no_combination') if not success then return false, subunit end -- should never occur success, subinfo = extract_number(parms, parms[iparm]) if not success then return false, subinfo end iparm = iparm + 2 subunit.inout = 'in' subunit.valinfo = { subinfo } -- Recalculate total as a number of subdivisions. -- subdiv[1] = number of subdivisions per previous unit (integer > 1). total = total * subdiv[1] + subinfo.value if not default then -- set by the first subdiv with a default defined default = subdiv.default end count = count + 1 composite_units[count] = subunit if subdiv.unit or subdiv.name then fixups[count] = { unit = subdiv.unit, name = subdiv.name, valinfo = subunit.valinfo } end end if count == 1 then return true -- no error and no composite unit end for i, fixup in pairs(fixups) do local unit = fixup.unit local name = fixup.name if not unit or (count > 2 and name) then composite_units[i].fixed_name = name else local success, alternate = lookup(parms, unit, 'no_combination') if not success then return false, alternate end -- should never occur alternate.inout = 'in' alternate.valinfo = fixup.valinfo composite_units[i] = alternate end end return true, iparm, { utype = in_unit_table.utype, scale = subunit.scale, -- scale of last (least significant) unit valinfo = { { value = total, clean = subinfo.clean, denominator = subinfo.denominator } }, composite = composite_units, default = default or in_unit_table.default } end local function translate_parms(parms, kv_pairs) -- Update fields in parms by translating each key:value in kv_pairs to terms -- used by this module (may involve translating from local language to English). -- Also, checks are performed which may display warnings, if enabled. -- Return true if successful or return false, t where t is an error message table. currency_text = nil -- local testing can hold module in memory; must clear globals if kv_pairs.adj and kv_pairs.sing then -- For enwiki (before translation), warn if attempt to use adj and sing -- as the latter is a deprecated alias for the former. if kv_pairs.adj ~= kv_pairs.sing and kv_pairs.sing ~= '' then add_warning(parms, 1, 'cvt_unknown_option', 'sing=' .. kv_pairs.sing) end kv_pairs.sing = nil end kv_pairs.comma = kv_pairs.comma or config.comma -- for plwiki who want default comma=5 for loc_name, loc_value in pairs(kv_pairs) do local en_name = text_code.en_option_name[loc_name] if en_name then local en_value = text_code.en_option_value[en_name] if en_value == 'INTEGER' then -- altitude_ft, altitude_m, frac, sigfig en_value = nil if loc_value == '' then add_warning(parms, 2, 'cvt_empty_option', loc_name) else local minimum local number, is_integer = get_number(loc_value) if en_name == 'sigfig' then minimum = 1 elseif en_name == 'frac' then minimum = 2 if number and number < 0 then parms.opt_fraction_horizontal = true number = -number end else minimum = -1e6 end if number and is_integer and number >= minimum then en_value = number else local m if en_name == 'frac' then m = 'cvt_bad_frac' elseif en_name == 'sigfig' then m = 'cvt_bad_sigfig' else m = 'cvt_bad_altitude' end add_warning(parms, 1, m, loc_name .. '=' .. loc_value) end end elseif en_value == 'TEXT' then -- $, input, qid, qual, stylein, styleout, tracking en_value = loc_value ~= '' and loc_value or nil -- accept non-empty user text with no validation if not en_value and (en_name == '$' or en_name == 'qid' or en_name == 'qual') then add_warning(parms, 2, 'cvt_empty_option', loc_name) elseif en_name == '$' then -- Value should be a single character like "€" for the euro currency symbol, but anything is accepted. currency_text = (loc_value == 'euro') and '€' or loc_value elseif en_name == 'error' then -- May have something like {{convert|...|error=x}} which will return the -- conversion result if successful, or x if not (no error return). parms.error_text = loc_value -- keep value because parms.error is nil if loc_value == '' parms.opt_no_extra = true elseif en_name == 'input' then -- May have something like {{convert|input=}} (empty input) if source is an infobox -- with optional fields. In that case, want to output nothing rather than an error. parms.input_text = loc_value -- keep value because parms.input is nil if loc_value == '' end else en_value = en_value[loc_value] if en_value and en_value:sub(-1) == '?' then en_value = en_value:sub(1, -2) add_warning(parms, -1, 'cvt_deprecated', loc_name .. '=' .. loc_value) end if en_value == nil then if loc_value == '' then add_warning(parms, 2, 'cvt_empty_option', loc_name) else add_warning(parms, 1, 'cvt_unknown_option', loc_name .. '=' .. loc_value) end elseif en_value == '' then en_value = nil -- an ignored option like adj=off elseif type(en_value) == 'string' and en_value:sub(1, 4) == 'opt_' then for _, v in ipairs(split(en_value, ',')) do local lhs, rhs = v:match('^(.-)=(.+)$') if rhs then parms[lhs] = tonumber(rhs) or rhs else parms[v] = true end end en_value = nil end end parms[en_name] = en_value else add_warning(parms, 1, 'cvt_unknown_option', loc_name .. '=' .. loc_value) end end local abbr_entered = parms.abbr local cfg_abbr = config.abbr if cfg_abbr then -- Don't warn if invalid because every convert would show that warning. if cfg_abbr == 'on always' then parms.abbr = 'on' elseif cfg_abbr == 'off always' then parms.abbr = 'off' elseif parms.abbr == nil then if cfg_abbr == 'on default' then parms.abbr = 'on' elseif cfg_abbr == 'off default' then parms.abbr = 'off' end end end if parms.abbr then if parms.abbr == 'unit' then parms.abbr = 'on' parms.number_word = true end parms.abbr_org = parms.abbr -- original abbr, before any flip elseif parms.opt_hand_hh then parms.abbr_org = 'on' parms.abbr = 'on' else parms.abbr = 'out' -- default is to abbreviate output only (use symbol, not name) end if parms.opt_order_out then -- Disable options that do not work in a useful way with order=out. parms.opt_flip = nil -- override adj=flip parms.opt_spell_in = nil parms.opt_spell_out = nil parms.opt_spell_upper = nil end if parms.opt_spell_out and not abbr_entered then parms.abbr = 'off' -- should show unit name when spelling the output value end if parms.opt_flip then local function swap_in_out(option) local value = parms[option] if value == 'in' then parms[option] = 'out' elseif value == 'out' then parms[option] = 'in' end end swap_in_out('abbr') swap_in_out('lk') if parms.opt_spell_in and not parms.opt_spell_out then -- For simplicity, and because it does not appear to be needed, -- user cannot set an option to spell the output only. parms.opt_spell_in = nil parms.opt_spell_out = true end end if parms.opt_spell_upper then parms.spell_upper = parms.opt_flip and 'out' or 'in' end if parms.opt_table or parms.opt_tablecen then if abbr_entered == nil and parms.lk == nil then parms.opt_values = true end parms.table_align = parms.opt_table and 'right' or 'center' end if parms.table_align or parms.opt_sortable_on then parms.need_table_or_sort = true end local disp_joins = text_code.disp_joins local default_joins = disp_joins['b'] parms.join_between = default_joins[3] or '; ' local disp = parms.disp if disp == nil then -- special case for the most common setting parms.joins = default_joins elseif disp == 'x' then -- Later, parms.joins is set from the input parameters. else -- Old template does this. local abbr = parms.abbr if disp == 'slash' then if abbr_entered == nil then disp = 'slash-nbsp' elseif abbr == 'in' or abbr == 'out' then disp = 'slash-sp' else disp = 'slash-nosp' end elseif disp == 'sqbr' then if abbr == 'on' then disp = 'sqbr-nbsp' else disp = 'sqbr-sp' end end parms.joins = disp_joins[disp] or default_joins parms.join_between = parms.joins[3] or parms.join_between parms.wantname = parms.joins.wantname end if (en_default and not parms.opt_lang_local and (parms[1] or ''):find('%d')) or parms.opt_lang_en then from_en_table = nil end if en_default and from_en_table then -- For hiwiki: localized symbol/name is defined with the US symbol/name field, -- and is used if output uses localized numbers. parms.opt_sp_us = true end return true end local function get_values(parms) -- If successful, update parms and return true, v, i where -- v = table of input values -- i = index to next entry in parms after those processed here -- or return false, t where t is an error message table. local valinfo = collection() -- numbered table of input values local range = collection() -- numbered table of range items (having, for example, 2 range items requires 3 input values) local had_nocomma -- true if removed "nocomma" kludge from second parameter (like "tonocomma") local parm2 = strip(parms[2]) if parm2 and parm2:sub(-7, -1) == 'nocomma' then parms[2] = strip(parm2:sub(1, -8)) parms.opt_nocomma = true had_nocomma = true end local function extractor(i) -- If the parameter is not a value, try unpacking it as a range ("1-23" for "1 to 23"). -- However, "-1-2/3" is a negative fraction (-1⅔), so it must be extracted first. -- Do not unpack a parameter if it is like "3-1/2" which is sometimes incorrectly -- used instead of "3+1/2" (and which should not be interpreted as "3 to ½"). -- Unpacked items are inserted into the parms table. -- The tail recursion allows combinations like "1x2 to 3x4". local valstr = strip(parms[i]) -- trim so any '-' as a negative sign will be at start local success, result = extract_number(parms, valstr, i > 1) if not success and valstr and i < 20 then -- check i to limit abuse local lhs, sep, rhs = valstr:match('^(%S+)%s+(%S+)%s+(%S.*)') if lhs and not (sep == '-' and rhs:match('/')) then if sep:find('%d') then return success, result -- to reject {{convert|1 234 567|m}} with a decent message (en only) end parms[i] = rhs table.insert(parms, i, sep) table.insert(parms, i, lhs) return extractor(i) end if not valstr:match('%-.*/') then for _, sep in ipairs(text_code.ranges.words) do local start, stop = valstr:find(sep, 2, true) -- start at 2 to skip any negative sign for range '-' if start then parms[i] = valstr:sub(stop + 1) table.insert(parms, i, sep) table.insert(parms, i, valstr:sub(1, start - 1)) return extractor(i) end end end end return success, result end local i = 1 local is_change while true do local success, info = extractor(i) -- need to set parms.opt_nocomma before calling this if not success then return false, info end i = i + 1 if is_change then info.is_change = true -- value is after "±" and so is a change (significant for range like {{convert|5|±|5|°C}}) is_change = nil end valinfo:add(info) local range_item = get_range(strip(parms[i])) if not range_item then break end i = i + 1 range:add(range_item) if type(range_item) == 'table' then -- For range "x", if append unit to some values, append it to all. parms.in_range_x = parms.in_range_x or range_item.in_range_x parms.out_range_x = parms.out_range_x or range_item.out_range_x parms.abbr_range_x = parms.abbr_range_x or range_item.abbr_range_x is_change = range_item.is_range_change end end if range.n > 0 then if range.n > 30 then -- limit abuse, although 4 is a more likely upper limit return false, { 'cvt_invalid_num' } -- misleading message but it will do end parms.range = range elseif had_nocomma then return false, { 'cvt_unknown', parm2 } end return true, valinfo, i end local function simple_get_values(parms) -- If input is like "{{convert|valid_value|valid_unit|...}}", -- return true, i, in_unit, in_unit_table -- i = index in parms of what follows valid_unit, if anything. -- The valid_value is not negative and does not use a fraction, and -- no options requiring further processing of the input are used. -- Otherwise, return nothing or return false, parm1 for caller to interpret. -- Testing shows this function is successful for 96% of converts in articles, -- and that on average it speeds up converts by 8%. local clean = to_en(strip(parms[1] or ''), parms) if parms.opt_ri or parms.opt_spell_in or #clean > 10 or not clean:match('^[0-9.]+$') then return false, clean end local value = tonumber(clean) if not value then return end local info = { value = value, altvalue = value, singular = (value == 1), clean = clean, show = with_separator(parms, clean), } local in_unit = strip(parms[2]) local success, in_unit_table = lookup(parms, in_unit, 'no_combination') if not success then return end in_unit_table.valinfo = { info } return true, 3, in_unit, in_unit_table end local function wikidata_call(parms, operation, ...) -- Return true, s where s is the result of a Wikidata operation, -- or return false, t where t is an error message table. local function worker(...) wikidata_code = wikidata_code or require(wikidata_module) wikidata_data = wikidata_data or mw.loadData(wikidata_data_module) return wikidata_code[operation](wikidata_data, ...) end local success, status, result = pcall(worker, ...) if success then return status, result end if parms.opt_sortable_debug then -- Use debug=yes to crash if an error while accessing Wikidata. error('Error accessing Wikidata: ' .. status, 0) end return false, { 'cvt_wd_fail' } end local function get_parms(parms, args) -- If successful, update parms and return true, unit where -- parms is a table of all arguments passed to the template -- converted to named arguments, and -- unit is the input unit table; -- or return false, t where t is an error message table. -- For special processing (not a convert), can also return -- true, wikitext where wikitext is the final result. -- The returned input unit table may be for a fake unit using the specified -- unit code as the symbol and name, and with bad_mcode = message code table. -- MediaWiki removes leading and trailing whitespace from the values of -- named arguments. However, the values of numbered arguments include any -- whitespace entered in the template, and whitespace is used by some -- parameters (example: the numbered parameters associated with "disp=x"). local kv_pairs = {} -- table of input key:value pairs where key is a name; needed because cannot iterate parms and add new fields to it for k, v in pairs(args) do if type(k) == 'number' or k == 'test' then -- parameter "test" is reserved for testing and is not translated parms[k] = v else kv_pairs[k] = v end end if parms.test == 'wikidata' then local ulookup = function (ucode) -- Use empty table for parms so it does not accumulate results when used repeatedly. return lookup({}, ucode, 'no_combination') end return wikidata_call(parms, '_listunits', ulookup) end local success, msg = translate_parms(parms, kv_pairs) if not success then return false, msg end if parms.input then success, msg = wikidata_call(parms, '_adjustparameters', parms, 1) if not success then return false, msg end end local success, i, in_unit, in_unit_table = simple_get_values(parms) if not success then if type(i) == 'string' and i:match('^NNN+$') then -- Some infoboxes have examples like {{convert|NNN|m}} (3 or more "N"). -- Output an empty string for these. return false, { 'cvt_no_output' } end local valinfo success, valinfo, i = get_values(parms) if not success then return false, valinfo end in_unit = strip(parms[i]) i = i + 1 success, in_unit_table = lookup(parms, in_unit, 'no_combination') if not success then in_unit = in_unit or '' if parms.opt_ignore_error then -- display given unit code with no error (for use with {{val}}) in_unit_table = '' -- suppress error message and prevent processing of output unit end in_unit_table = setmetatable({ symbol = in_unit, name2 = in_unit, utype = in_unit, scale = 1, default = '', defkey = '', linkey = '', bad_mcode = in_unit_table }, unit_mt) end in_unit_table.valinfo = valinfo end if parms.test == 'msg' then -- Am testing the messages produced when no output unit is specified, and -- the input unit has a missing or invalid default. -- Set two units for testing that. -- LATER: Remove this code. if in_unit == 'chain' then in_unit_table.default = nil -- no default elseif in_unit == 'rd' then in_unit_table.default = "ft!X!m" -- an invalid expression end end in_unit_table.inout = 'in' -- this is an input unit if not parms.range then local success, inext, composite_unit = get_composite(parms, i, in_unit_table) if not success then return false, inext end if composite_unit then in_unit_table = composite_unit i = inext end end if in_unit_table.builtin == 'mach' then -- As with old template, a number following Mach as the input unit is the altitude. -- That is deprecated: should use altitude_ft=NUMBER or altitude_m=NUMBER. local success, info success = tonumber(parms[i]) -- this will often work and will give correct result for values like 2e4 without forcing output scientific notation if success then info = { value = success } else success, info = extract_number(parms, parms[i], false, true) end if success then i = i + 1 in_unit_table.altitude = info.value end end local word = strip(parms[i]) i = i + 1 local precision, is_bad_precision local function set_precision(text) local number, is_integer = get_number(text) if number then if is_integer then precision = number else precision = text is_bad_precision = true end return true -- text was used for precision, good or bad end end if word and not set_precision(word) then parms.out_unit = parms.out_unit or word if set_precision(strip(parms[i])) then i = i + 1 end end if parms.opt_adj_mid then word = parms[i] i = i + 1 if word then -- mid-text words if word:sub(1, 1) == '-' then parms.mid = word else parms.mid = ' ' .. word end end end if parms.opt_one_preunit then parms[parms.opt_flip and 'preunit2' or 'preunit1'] = preunits(1, parms[i]) i = i + 1 end if parms.disp == 'x' then -- Following is reasonably compatible with the old template. local first = parms[i] or '' local second = parms[i+1] or '' i = i + 2 if strip(first) == '' then -- user can enter '&#32;' rather than ' ' to avoid the default first = ' [&nbsp;' .. first second = '&nbsp;]' .. second end parms.joins = { first, second } elseif parms.opt_two_preunits then local p1, p2 = preunits(2, parms[i], parms[i+1]) i = i + 2 if parms.preunit1 then -- To simplify documentation, allow unlikely use of adj=pre with disp=preunit -- (however, an output unit must be specified with adj=pre and with disp=preunit). parms.preunit1 = parms.preunit1 .. p1 parms.preunit2 = p2 else parms.preunit1, parms.preunit2 = p1, p2 end end if precision == nil then if set_precision(strip(parms[i])) then i = i + 1 end end if is_bad_precision then add_warning(parms, 1, 'cvt_bad_prec', precision) else parms.precision = precision end for j = i, i + 3 do local parm = parms[j] -- warn if find a non-empty extraneous parameter if parm and parm:match('%S') then add_warning(parms, 1, 'cvt_unknown_option', parm) break end end return true, in_unit_table end local function record_default_precision(parms, out_current, precision) -- If necessary, adjust parameters and return a possibly adjusted precision. -- When converting a range of values where a default precision is required, -- that default is calculated for each value because the result sometimes -- depends on the precise input and output values. This function may cause -- the entire convert process to be repeated in order to ensure that the -- same default precision is used for each individual convert. -- If that were not done, a range like 1000 to 1000.4 may give poor results -- because the first output could be heavily rounded, while the second is not. -- For range 1000.4 to 1000, this function can give the second convert the -- same default precision that was used for the first. if not parms.opt_round_each then local maxdef = out_current.max_default_precision if maxdef then if maxdef < precision then parms.do_convert_again = true out_current.max_default_precision = precision else precision = out_current.max_default_precision end else out_current.max_default_precision = precision end end return precision end local function default_precision(parms, invalue, inclean, denominator, outvalue, in_current, out_current, extra) -- Return a default value for precision (an integer like 2, 0, -2). -- If denominator is not nil, it is the value of the denominator in inclean. -- Code follows procedures used in old template. local fudge = 1e-14 -- {{Order of magnitude}} adds this, so we do too local prec, minprec, adjust local subunit_ignore_trailing_zero local subunit_more_precision -- kludge for "in" used in input like "|2|ft|6|in" local composite = in_current.composite if composite then subunit_ignore_trailing_zero = true -- input "|2|st|10|lb" has precision 0, not -1 if composite[#composite].exception == 'subunit_more_precision' then subunit_more_precision = true -- do not use standard precision with input like "|2|ft|6|in" end end if denominator and denominator > 0 then prec = math.max(log10(denominator), 1) else -- Count digits after decimal mark, handling cases like '12.345e6'. local exponent local integer, dot, decimals, expstr = inclean:match('^(%d*)(%.?)(%d*)(.*)') local e = expstr:sub(1, 1) if e == 'e' or e == 'E' then exponent = tonumber(expstr:sub(2)) end if dot == '' then prec = subunit_ignore_trailing_zero and 0 or -integer:match('0*$'):len() else prec = #decimals end if exponent then -- So '1230' and '1.23e3' both give prec = -1, and '0.00123' and '1.23e-3' give 5. prec = prec - exponent end end if in_current.istemperature and out_current.istemperature then -- Converting between common temperatures (°C, °F, °R, K); not keVT. -- Kelvin value can be almost zero, or small but negative due to precision problems. -- Also, an input value like -300 C (below absolute zero) gives negative kelvins. -- Calculate minimum precision from absolute value. adjust = 0 local kelvin = abs((invalue - in_current.offset) * in_current.scale) if kelvin < 1e-8 then -- assume nonzero due to input or calculation precision problem minprec = 2 else minprec = 2 - floor(log10(kelvin) + fudge) -- 3 sigfigs in kelvin end else if invalue == 0 or outvalue <= 0 then -- We are never called with a negative outvalue, but it might be zero. -- This is special-cased to avoid calculation exceptions. return record_default_precision(parms, out_current, 0) end if out_current.exception == 'integer_more_precision' and floor(invalue) == invalue then -- With certain output units that sometimes give poor results -- with default rounding, use more precision when the input -- value is equal to an integer. An example of a poor result -- is when input 50 gives a smaller output than input 49.5. -- Experiment shows this helps, but it does not eliminate all -- surprises because it is not clear whether "50" should be -- interpreted as "from 45 to 55" or "from 49.5 to 50.5". adjust = -log10(in_current.scale) elseif subunit_more_precision then -- Conversion like "{{convert|6|ft|1|in|cm}}" (where subunit is "in") -- has a non-standard adjust value, to give more output precision. adjust = log10(out_current.scale) + 2 else adjust = log10(abs(invalue / outvalue)) end adjust = adjust + log10(2) -- Ensure that the output has at least two significant figures. minprec = 1 - floor(log10(outvalue) + fudge) end if extra then adjust = extra.adjust or adjust minprec = extra.minprec or minprec end return record_default_precision(parms, out_current, math.max(floor(prec + adjust), minprec)) end local function convert(parms, invalue, info, in_current, out_current) -- Convert given input value from one unit to another. -- Return output_value (a number) if a simple convert, or -- return f, t where -- f = true, t = table of information with results, or -- f = false, t = error message table. local inscale = in_current.scale local outscale = out_current.scale if not in_current.iscomplex and not out_current.iscomplex then return invalue * (inscale / outscale) -- minimize overhead for most common case end if in_current.invert or out_current.invert then -- Inverted units, such as inverse length, inverse time, or -- fuel efficiency. Built-in units do not have invert set. if (in_current.invert or 1) * (out_current.invert or 1) < 0 then return 1 / (invalue * inscale * outscale) end return invalue * (inscale / outscale) elseif in_current.offset then -- Temperature (there are no built-ins for this type of unit). if info.is_change then return invalue * (inscale / outscale) end return (invalue - in_current.offset) * (inscale / outscale) + out_current.offset else -- Built-in unit. local in_builtin = in_current.builtin local out_builtin = out_current.builtin if in_builtin and out_builtin then if in_builtin == out_builtin then return invalue end -- There are no cases (yet) where need to convert from one -- built-in unit to another, so this should never occur. return false, { 'cvt_bug_convert' } end if in_builtin == 'mach' or out_builtin == 'mach' then -- Should check that only one altitude is given but am planning to remove -- in_current.altitude (which can only occur when Mach is the input unit), -- and out_current.altitude cannot occur. local alt = parms.altitude_ft or in_current.altitude if not alt and parms.altitude_m then alt = parms.altitude_m / 0.3048 -- 1 ft = 0.3048 m end local spd = speed_of_sound(alt) if in_builtin == 'mach' then inscale = spd return invalue * (inscale / outscale) end outscale = spd local adjust = 0.1 / inscale return true, { outvalue = invalue * (inscale / outscale), adjust = log10(adjust) + log10(2), } elseif in_builtin == 'hand' then -- 1 hand = 4 inches; 1.2 hands = 6 inches. -- Decimals of a hand are only defined for the first digit, and -- the first fractional digit should be a number of inches (1, 2 or 3). -- However, this code interprets the entire fractional part as the number -- of inches / 10 (so 1.75 inches would be 0.175 hands). -- A value like 12.3 hands is exactly 12*4 + 3 inches; base default precision on that. local integer, fracpart = math.modf(invalue) local inch_value = 4 * integer + 10 * fracpart -- equivalent number of inches local factor = inscale / outscale if factor == 4 then -- Am converting to inches: show exact result, and use "inches" not "in" by default. if parms.abbr_org == nil then out_current.usename = true end local show = format('%g', abs(inch_value)) -- show and clean are unsigned if not show:find('e', 1, true) then return true, { invalue = inch_value, outvalue = inch_value, clean = show, show = show, } end end local outvalue = (integer + 2.5 * fracpart) * factor local fracstr = info.clean:match('%.(.*)') or '' local fmt if fracstr == '' then fmt = '%.0f' else fmt = '%.' .. format('%d', #fracstr - 1) .. 'f' end return true, { invalue = inch_value, clean = format(fmt, inch_value), outvalue = outvalue, minprec = 0, } end end return false, { 'cvt_bug_convert' } -- should never occur end local function user_style(parms, i) -- Return text for a user-specified style for a table cell, or '' if none, -- given i = 1 (input style) or 2 (output style). local style = parms[(i == 1) and 'stylein' or 'styleout'] if style then style = style:gsub('"', '') if style ~= '' then if style:sub(-1) ~= ';' then style = style .. ';' end return style end end return '' end local function make_table_or_sort(parms, invalue, info, in_current, scaled_top) -- Set options to handle output for a table or a sort key, or both. -- The text sort key is based on the value resulting from converting -- the input to a fake base unit with scale = 1, and other properties -- required for a conversion derived from the input unit. -- For other modules, return the sort key in a hidden span element, and -- the scaled value used to generate the sort key. -- If scaled_top is set, it is the scaled value of the numerator of a per unit -- to be combined with this unit (the denominator) to make the sort key. -- Scaling only works with units that convert with a factor (not temperature). local sortkey, scaled_value if parms.opt_sortable_on then local base = { -- a fake unit with enough fields for a valid convert scale = 1, invert = in_current.invert and 1, iscomplex = in_current.iscomplex, offset = in_current.offset and 0, } local outvalue, extra = convert(parms, invalue, info, in_current, base) if extra then outvalue = extra.outvalue end if in_current.istemperature then -- Have converted to kelvin; assume numbers close to zero have a -- rounding error and should be zero. if abs(outvalue) < 1e-12 then outvalue = 0 end end if scaled_top and outvalue ~= 0 then outvalue = scaled_top / outvalue end scaled_value = outvalue if not valid_number(outvalue) then if outvalue < 0 then sortkey = '1000000000000000000' else sortkey = '9000000000000000000' end elseif outvalue == 0 then sortkey = '5000000000000000000' else local mag = floor(log10(abs(outvalue)) + 1e-14) local prefix if outvalue > 0 then prefix = 7000 + mag else prefix = 2999 - mag outvalue = outvalue + 10^(mag+1) end sortkey = format('%d', prefix) .. format('%015.0f', floor(outvalue * 10^(14-mag))) end end local sortspan if sortkey and not parms.table_align then sortspan = parms.opt_sortable_debug and '<span data-sort-value="' .. sortkey .. '♠"><span style="border:1px solid">' .. sortkey .. '♠</span></span>' or '<span data-sort-value="' .. sortkey .. '♠"></span>' parms.join_before = sortspan end if parms.table_align then local sort if sortkey then sort = ' data-sort-value="' .. sortkey .. '"' if parms.opt_sortable_debug then parms.join_before = '<span style="border:1px solid">' .. sortkey .. '</span>' end else sort = '' end local style = 'style="text-align:' .. parms.table_align .. ';' local joins = {} for i = 1, 2 do joins[i] = (i == 1 and '' or '\n|') .. style .. user_style(parms, i) .. '"' .. sort .. '|' end parms.table_joins = joins end return sortspan, scaled_value end local cvt_to_hand local function cvtround(parms, info, in_current, out_current) -- Return true, t where t is a table with the conversion results; fields: -- show = rounded, formatted string with the result of converting value in info, -- using the rounding specified in parms. -- singular = true if result (after rounding and ignoring any negative sign) -- is "1", or like "1.00", or is a fraction with value < 1; -- (and more fields shown below, and a calculated 'absvalue' field). -- or return false, t where t is an error message table. -- Input info.clean uses en digits (it has been translated, if necessary). -- Output show uses en or non-en digits as appropriate, or can be spelled. if out_current.builtin == 'hand' then return cvt_to_hand(parms, info, in_current, out_current) end local invalue = in_current.builtin == 'hand' and info.altvalue or info.value local outvalue, extra = convert(parms, invalue, info, in_current, out_current) if parms.need_table_or_sort then parms.need_table_or_sort = nil -- process using first input value only make_table_or_sort(parms, invalue, info, in_current) end if extra then if not outvalue then return false, extra end invalue = extra.invalue or invalue outvalue = extra.outvalue end if not valid_number(outvalue) then return false, { 'cvt_invalid_num' } end local isnegative if outvalue < 0 then isnegative = true outvalue = -outvalue end local precision, show, exponent local denominator = out_current.frac if denominator then show = fraction_table(outvalue, denominator) else precision = parms.precision if not precision then if parms.sigfig then show, exponent = make_sigfig(outvalue, parms.sigfig) elseif parms.opt_round then local n = parms.opt_round if n == 0.5 then local integer, fracpart = math.modf(floor(2 * outvalue + 0.5) / 2) if fracpart == 0 then show = format('%.0f', integer) else show = format('%.1f', integer + fracpart) end else show = format('%.0f', floor((outvalue / n) + 0.5) * n) end elseif in_current.builtin == 'mach' then local sigfig = info.clean:gsub('^[0.]+', ''):gsub('%.', ''):len() + 1 show, exponent = make_sigfig(outvalue, sigfig) else local inclean = info.clean if extra then inclean = extra.clean or inclean show = extra.show end if not show then precision = default_precision(parms, invalue, inclean, info.denominator, outvalue, in_current, out_current, extra) end end end end if precision then if precision >= 0 then local fudge if precision <= 8 then -- Add a fudge to handle common cases of bad rounding due to inability -- to precisely represent some values. This makes the following work: -- {{convert|-100.1|C|K}} and {{convert|5555000|um|m|2}}. -- Old template uses #expr round, which invokes PHP round(). -- LATER: Investigate how PHP round() works. fudge = 2e-14 else fudge = 0 end local fmt = '%.' .. format('%d', precision) .. 'f' local success success, show = pcall(format, fmt, outvalue + fudge) if not success then return false, { 'cvt_big_prec', tostring(precision) } end else precision = -precision -- #digits to zero (in addition to any digits after dot) local shift = 10 ^ precision show = format('%.0f', outvalue/shift) if show ~= '0' then exponent = #show + precision end end end local t = format_number(parms, show, exponent, isnegative) if type(show) == 'string' then -- Set singular using match because on some systems 0.99999999999999999 is 1.0. if exponent then t.singular = (exponent == 1 and show:match('^10*$')) else t.singular = (show == '1' or show:match('^1%.0*$')) end else t.fraction_table = show t.singular = (outvalue <= 1) -- cannot have 'fraction == 1', but if it were possible it would be singular end t.raw_absvalue = outvalue -- absolute value before rounding return true, setmetatable(t, { __index = function (self, key) if key == 'absvalue' then -- Calculate absolute value after rounding, if needed. local clean, exponent = rawget(self, 'clean'), rawget(self, 'exponent') local value = tonumber(clean) -- absolute value (any negative sign has been ignored) if exponent then value = value * 10^exponent end rawset(self, key, value) return value end end }) end function cvt_to_hand(parms, info, in_current, out_current) -- Convert input to hands, inches. -- Return true, t where t is a table with the conversion results; -- or return false, t where t is an error message table. if parms.abbr_org == nil then out_current.usename = true -- default is to show name not symbol end local precision = parms.precision local frac = out_current.frac if not frac and precision and precision > 1 then frac = (precision == 2) and 2 or 4 end local out_next = out_current.out_next if out_next then -- Use magic knowledge to determine whether the next unit is inches without requiring i18n. -- The following ensures that when the output combination "hand in" is used, the inches -- value is rounded to match the hands value. Also, displaying say "61½" instead of 61.5 -- is better as 61.5 implies the value is not 61.4. if out_next.exception == 'subunit_more_precision' then out_next.frac = frac end end -- Convert to inches; calculate hands from that. local dummy_unit_table = { scale = out_current.scale / 4, frac = frac } local success, outinfo = cvtround(parms, info, in_current, dummy_unit_table) if not success then return false, outinfo end local tfrac = outinfo.fraction_table local inches = outinfo.raw_absvalue if tfrac then inches = floor(inches) -- integer part only; fraction added later else inches = floor(inches + 0.5) -- a hands measurement never shows decimals of an inch end local hands, inches = divide(inches, 4) outinfo.absvalue = hands + inches/4 -- supposed to be the absolute rounded value, but this is close enough local inchstr = tostring(inches) -- '0', '1', '2' or '3' if precision and precision <= 0 then -- using negative or 0 for precision rounds to nearest hand hands = floor(outinfo.raw_absvalue/4 + 0.5) inchstr = '' elseif tfrac then -- Always show an integer before fraction (like "15.0½") because "15½" means 15-and-a-half hands. inchstr = numdot .. format_fraction(parms, 'out', false, inchstr, tfrac.numstr, tfrac.denstr) else inchstr = numdot .. from_en(inchstr) end outinfo.show = outinfo.sign .. with_separator(parms, format('%.0f', hands)) .. inchstr return true, outinfo end local function evaluate_condition(value, condition) -- Return true or false from applying a conditional expression to value, -- or throw an error if invalid. -- A very limited set of expressions is supported: -- v < 9 -- v * 9 < 9 -- where -- 'v' is replaced with value -- 9 is any number (as defined by Lua tonumber) -- only en digits are accepted -- '<' can also be '<=' or '>' or '>=' -- In addition, the following form is supported: -- LHS and RHS -- where -- LHS, RHS = any of above expressions. local function compare(value, text) local arithop, factor, compop, limit = text:match('^%s*v%s*([*]?)(.-)([<>]=?)(.*)$') if arithop == nil then error('Invalid default expression', 0) elseif arithop == '*' then factor = tonumber(factor) if factor == nil then error('Invalid default expression', 0) end value = value * factor end limit = tonumber(limit) if limit == nil then error('Invalid default expression', 0) end if compop == '<' then return value < limit elseif compop == '<=' then return value <= limit elseif compop == '>' then return value > limit elseif compop == '>=' then return value >= limit end error('Invalid default expression', 0) -- should not occur end local lhs, rhs = condition:match('^(.-%W)and(%W.*)') if lhs == nil then return compare(value, condition) end return compare(value, lhs) and compare(value, rhs) end local function get_default(value, unit_table) -- Return true, s where s = name of unit's default output unit, -- or return false, t where t is an error message table. -- Some units have a default that depends on the input value -- (the first value if a range of values is used). -- If '!' is in the default, the first bang-delimited field is an -- expression that uses 'v' to represent the input value. -- Example: 'v < 120 ! small ! big ! suffix' (suffix is optional) -- evaluates 'v < 120' as a boolean with result -- 'smallsuffix' if (value < 120), or 'bigsuffix' otherwise. -- Input must use en digits and '.' decimal mark. local default = data_code.default_exceptions[unit_table.defkey or unit_table.symbol] or unit_table.default if not default then local per = unit_table.per if per then local function a_default(v, u) local success, ucode = get_default(v, u) if not success then return '?' -- an unlikely error has occurred; will cause lookup of default to fail end -- Attempt to use only the first unit if a combination or output multiple. -- This is not bulletproof but should work for most cases. -- Where it does not work, the convert will need to specify the wanted output unit. local t = all_units[ucode] if t then local combo = t.combination if combo then -- For a multiple like ftin, the "first" unit (ft) is last in the combination. local i = t.multiple and table_len(combo) or 1 ucode = combo[i] end else -- Try for an automatically generated combination. local item = ucode:match('^(.-)%+') or ucode:match('^(%S+)%s') if all_units[item] then return item end end return ucode end local unit1, unit2 = per[1], per[2] local def1 = (unit1 and a_default(value, unit1) or unit_table.vprefix or '') local def2 = a_default(1, unit2) -- 1 because per unit of denominator return true, def1 .. '/' .. def2 end return false, { 'cvt_no_default', unit_table.symbol } end if default:find('!', 1, true) == nil then return true, default end local t = split(default, '!') if #t == 3 or #t == 4 then local success, result = pcall(evaluate_condition, value, t[1]) if success then default = result and t[2] or t[3] if #t == 4 then default = default .. t[4] end return true, default end end return false, { 'cvt_bad_default', unit_table.symbol } end local linked_pages -- to record linked pages so will not link to the same page more than once local function unlink(unit_table) -- Forget that the given unit has previously been linked (if it has). -- That is needed when processing a range of inputs or outputs when an id -- for the first range value may have been evaluated, but only an id for -- the last value is displayed, and that id may need to be linked. linked_pages[unit_table.unitcode or unit_table] = nil end local function make_link(link, id, unit_table) -- Return wikilink "[[link|id]]", possibly abbreviated as in examples: -- [[Mile|mile]] --> [[mile]] -- [[Mile|miles]] --> [[mile]]s -- However, just id is returned if: -- * no link given (so caller does not need to check if a link was defined); or -- * link has previously been used during the current convert (to avoid overlinking). local link_key if unit_table then link_key = unit_table.unitcode or unit_table else link_key = link end if not link or link == '' or linked_pages[link_key] then return id end linked_pages[link_key] = true -- Following only works for language en, but it should be safe on other wikis, -- and overhead of doing it generally does not seem worthwhile. local l = link:sub(1, 1):lower() .. link:sub(2) if link == id or l == id then return '[[' .. id .. ']]' elseif link .. 's' == id or l .. 's' == id then return '[[' .. id:sub(1, -2) .. ']]s' else return '[[' .. link .. '|' .. id .. ']]' end end local function variable_name(clean, unit_table, exp_multiplier, key_id) -- A unit name may depend on the value in some languages. -- Parameter clean is the unsigned value in en digits, as a string. -- It may represent a number ("1.0") or a fraction ("1+2/3"). -- In varname, fields are separated with "!" and are not empty. -- A field for a unit using an SI prefix has the prefix name inserted, -- replacing '#' if found, or before the field otherwise. if clean:match('[./]') or clean:find('⁄', 1, true) then -- float or fraction if exp_multiplier then clean = exp_multiplier -- force selection of name for a large integer else clean = 34.5 -- force selection of name for a float value end else clean = tonumber(clean) * (exp_multiplier or 1) end local name1, vname if key_id == 'pername' and unit_table.pername then vname = unit_table.pername elseif unit_table.varname then local splitvname = split(unit_table.varname, '!') name1 = unit_table.name1 vname = mw.language.getContentLanguage():convertPlural(clean, name1, unpack(splitvname)) else return clean == 1 and unit_table.name1 or unit_table.name2 end if vname == name1 then -- SI prefix (if any) has been inserted by unit_prefixed_mt. else local si_name = rawget(unit_table, 'si_name') or '' local pos = vname:find('#', 1, true) if pos then vname = vname:sub(1, pos - 1) .. si_name .. vname:sub(pos + 1) else vname = si_name .. vname end end return vname end local function linked_id(parms, unit_table, key_id, want_link, clean, exp_multiplier) -- Return final unit id (symbol or name), optionally with a wikilink, -- and update unit_table.sep if required. -- key_id is one of: 'symbol', 'sym_us', 'name1', 'name1_us', 'name2', 'name2_us', 'pername'. local abbr_on = (key_id == 'symbol' or key_id == 'sym_us') if abbr_on and want_link then local symlink = rawget(unit_table, 'symlink') if symlink then return symlink -- for exceptions that have the linked symbol built-in end end local multiplier = rawget(unit_table, 'multiplier') local per = unit_table.per if per then local paren1, paren2 = '', '' -- possible parentheses around bottom unit local unit1 = per[1] -- top unit_table, or nil local unit2 = per[2] -- bottom unit_table if abbr_on then if not unit1 then unit_table.sep = '' -- no separator in "$2/acre" end if not want_link then local symbol = unit_table.symbol_raw if symbol then return symbol -- for exceptions that have the symbol built-in end end if (unit2.symbol):find('⋅', 1, true) then paren1, paren2 = '(', ')' end end local key_id2 -- unit2 is always singular if key_id == 'name2' then key_id2 = 'name1' elseif key_id == 'name2_us' then key_id2 = 'name1_us' else key_id2 = key_id end if key_id2 == 'name1' or key_id2 == 'name1_us' then key_id2 = unit2.pername and 'pername' or key_id2 -- ukwiki has some units with a different name in "per unitname" end local result if abbr_on then result = '/' elseif omitsep then result = per_word elseif unit1 then result = ' ' .. per_word .. ' ' else result = per_word .. ' ' end if want_link and unit_table.link then if varname and not abbr_on then result = (unit1 and variable_name(clean, unit1, exp_multiplier) or '') .. result .. variable_name('1', unit2, exp_multiplier, key_id2) else result = (unit1 and linked_id(parms, unit1, key_id, false, clean) or '') .. result .. linked_id(parms, unit2, key_id2, false, '1') end if omit_separator(result) then unit_table.sep = '' end return make_link(unit_table.link, result, unit_table) end if unit1 then result = linked_id(parms, unit1, key_id, want_link, clean) .. result if unit1.sep then unit_table.sep = unit1.sep end elseif omitsep then unit_table.sep = '' end return result .. paren1 .. linked_id(parms, unit2, key_id2, want_link, '1') .. paren2 end if multiplier then -- A multiplier (like "100" in "100km") forces the unit to be plural. multiplier = from_en(multiplier) if not omitsep then multiplier = multiplier .. (abbr_on and '&nbsp;' or ' ') end if not abbr_on then if key_id == 'name1' then key_id = 'name2' elseif key_id == 'name1_us' then key_id = 'name2_us' end end else multiplier = '' end local id = unit_table.fixed_name or ((varname and not abbr_on) and variable_name(clean, unit_table, exp_multiplier, key_id) or unit_table[key_id]) if omit_separator(id) then unit_table.sep = '' end if want_link then local link = data_code.link_exceptions[unit_table.linkey or unit_table.symbol] or unit_table.link if link then local before = '' local i = unit_table.customary if i == 1 and parms.opt_sp_us then i = 2 -- show "U.S." not "US" end if i == 3 and abbr_on then i = 4 -- abbreviate "imperial" to "imp" end local customary = text_code.customary_units[i] if customary then -- LATER: This works for language en only, but it's esoteric so ignore for now. local pertext if id:sub(1, 1) == '/' then -- Want unit "/USgal" to display as "/U.S. gal", not "U.S. /gal". pertext = '/' id = id:sub(2) elseif id:sub(1, 4) == 'per ' then -- Similarly want "per U.S. gallon", not "U.S. per gallon" (but in practice this is unlikely to be used). pertext = 'per ' id = id:sub(5) else pertext = '' end -- Omit any "US"/"U.S."/"imp"/"imperial" from start of id since that will be inserted. local removes = (i < 3) and { 'US&nbsp;', 'US ', 'U.S.&nbsp;', 'U.S. ' } or { 'imp&nbsp;', 'imp ', 'imperial ' } for _, prefix in ipairs(removes) do local plen = #prefix if id:sub(1, plen) == prefix then id = id:sub(plen + 1) break end end before = pertext .. make_link(customary.link, customary[1]) .. ' ' end id = before .. make_link(link, id, unit_table) end end return multiplier .. id end local function make_id(parms, which, unit_table) -- Return id, f where -- id = unit name or symbol, possibly modified -- f = true if id is a name, or false if id is a symbol -- using the value for index 'which', and for 'in' or 'out' (unit_table.inout). -- Result is '' if no symbol/name is to be used. -- In addition, set unit_table.sep = ' ' or '&nbsp;' or '' -- (the separator that caller will normally insert before the id). if parms.opt_values then unit_table.sep = '' return '' end local inout = unit_table.inout local info = unit_table.valinfo[which] local lk = parms.lk local want_link = (lk == 'on' or lk == inout) local singular = info.singular local want_name local exp_multiplier if unit_table.usename then want_name = true else if parms.abbr_org == nil then if parms.wantname then want_name = true end if unit_table.usesymbol then want_name = false end end if want_name == nil then local abbr = parms.abbr if abbr == 'on' or abbr == inout or (abbr == 'mos' and inout == 'out') then want_name = false else want_name = true end end end local key if want_name then if lk == nil and unit_table.builtin == 'hand' then want_link = true end if parms.opt_use_nbsp then unit_table.sep = '&nbsp;' else unit_table.sep = ' ' end if parms.opt_singular then local value if inout == 'in' then value = info.value else value = info.absvalue end if value then -- some unusual units do not always set value field value = abs(value) singular = (0 < value and value < 1.0001) end end if unit_table.engscale then -- engscale: so "|1|e3kg" gives "1 thousand kilograms" (plural) singular = false exp_multiplier = 10^unit_table.engscale.exponent -- '1 gram' and '1 thousand grams', for example, may use different names for the unit in some languages end key = (parms.opt_adjectival or singular) and 'name1' or 'name2' if parms.opt_sp_us then key = key .. '_us' end else if unit_table.builtin == 'hand' then if parms.opt_hand_hh then unit_table.symbol = 'hh' -- LATER: might want i18n applied to this end end unit_table.sep = '&nbsp;' key = parms.opt_sp_us and 'sym_us' or 'symbol' end return linked_id(parms, unit_table, key, want_link, info.clean, exp_multiplier), want_name end local function decorate_value(parms, unit_table, which, enable_number_word) -- If needed, update unit_table so values will be shown with extra information. -- For consistency with the old template (but different from fmtpower), -- the style to display powers of 10 includes "display:none" to allow some -- browsers to copy, for example, "10³" as "10^3", rather than as "103". -- The engscale table may have entries such as either of the following: -- ["3"] = { "thousand", exponent = 3 }, -- ["3"] = { name1 = "A", varname = "B!C!D", exponent = 3 }, -- The first option always uses "thousand" as the exponent name. -- The second option uses one of A, B, C, D as the exponent name, depending on the value. local info local engscale = unit_table.engscale local prefix = unit_table.vprefix if engscale or prefix then info = unit_table.valinfo[which] if info.decorated then return -- do not redecorate if repeating convert end info.decorated = true if engscale then -- Range |10|-|20|e3km| gives '10×10³–20×10³' or '10–20 thousand'. local inout = unit_table.inout local abbr = parms.abbr if (abbr == 'on' or abbr == inout) and not (unit_table.this_number_word or parms.number_word) then info.show = info.show .. '<span style="margin-left:0.2em">×<span style="margin-left:0.1em">' .. from_en('10') .. '</span></span><s style="display:none">^</s><sup>' .. from_en(tostring(engscale.exponent)) .. '</sup>' elseif enable_number_word then local number_id local name = engscale.varname and variable_name(info.clean, engscale) or engscale[1] if parms.lk == 'on' or parms.lk == inout then number_id = make_link(engscale.link, name) else number_id = name end -- WP:NUMERAL recommends "&nbsp;" in values like "12 million". info.show = info.show .. (parms.opt_adjectival and '-' or '&nbsp;') .. number_id end end if prefix then info.show = prefix .. info.show end end end local function process_input(parms, in_current) -- Processing required once per conversion. -- Return block of text to represent input (value/unit). if parms.opt_output_only or parms.opt_output_number_only or parms.opt_output_unit_only then parms.joins = { '', '' } return '' end local first_unit local composite = in_current.composite -- nil or table of units if composite then first_unit = composite[1] else first_unit = in_current end local id1, want_name = make_id(parms, 1, first_unit) local sep = first_unit.sep -- separator between value and unit, set by make_id local preunit = parms.preunit1 if preunit then sep = '' -- any separator is included in preunit else preunit = '' end if parms.opt_input_unit_only then parms.joins = { '', '' } if composite then local parts = { id1 } for i, unit in ipairs(composite) do if i > 1 then table.insert(parts, (make_id(parms, 1, unit))) end end id1 = table.concat(parts, ' ') end if want_name and parms.opt_adjectival then return preunit .. hyphenated(id1) end return preunit .. id1 end if parms.opt_also_symbol and not composite and not parms.opt_flip then local join1 = parms.joins[1] if join1 == ' (' or join1 == ' [' then parms.joins = { ' [' .. first_unit[parms.opt_sp_us and 'sym_us' or 'symbol'] .. ']' .. join1 , parms.joins[2] } end end if in_current.builtin == 'mach' and first_unit.sep ~= '' then -- '' means omitsep with non-enwiki name local prefix = id1 .. '&nbsp;' local range = parms.range local valinfo = first_unit.valinfo local result = prefix .. valinfo[1].show if range then -- For simplicity and because more not needed, handle one range item only. local prefix2 = make_id(parms, 2, first_unit) .. '&nbsp;' result = range_text(range[1], want_name, parms, result, prefix2 .. valinfo[2].show, 'in', {spaced=true}) end return preunit .. result end if composite then -- Simplify: assume there is no range, and no decoration. local mid = (not parms.opt_flip) and parms.mid or '' local sep1 = '&nbsp;' local sep2 = ' ' if parms.opt_adjectival and want_name then sep1 = '-' sep2 = '-' end if omitsep and sep == '' then -- Testing the id of the most significant unit should be sufficient. sep1 = '' sep2 = '' end local parts = { first_unit.valinfo[1].show .. sep1 .. id1 } for i, unit in ipairs(composite) do if i > 1 then table.insert(parts, unit.valinfo[1].show .. sep1 .. (make_id(parms, 1, unit))) end end return table.concat(parts, sep2) .. mid end local add_unit = (parms.abbr == 'mos') or parms[parms.opt_flip and 'out_range_x' or 'in_range_x'] or (not want_name and parms.abbr_range_x) local range = parms.range if range and not add_unit then unlink(first_unit) end local id = range and make_id(parms, range.n + 1, first_unit) or id1 local extra, was_hyphenated = hyphenated_maybe(parms, want_name, sep, id, 'in') if was_hyphenated then add_unit = false end local result local valinfo = first_unit.valinfo if range then for i = 0, range.n do local enable_number_word if i == range.n then add_unit = false enable_number_word = true end decorate_value(parms, first_unit, i+1, enable_number_word) local show = valinfo[i+1].show if add_unit then show = show .. first_unit.sep .. (i == 0 and id1 or make_id(parms, i+1, first_unit)) end if i == 0 then result = show else result = range_text(range[i], want_name, parms, result, show, 'in') end end else decorate_value(parms, first_unit, 1, true) result = valinfo[1].show end return result .. preunit .. extra end local function process_one_output(parms, out_current) -- Processing required for each output unit. -- Return block of text to represent output (value/unit). local inout = out_current.inout -- normally 'out' but can be 'in' for order=out local id1, want_name = make_id(parms, 1, out_current) local sep = out_current.sep -- set by make_id local preunit = parms.preunit2 if preunit then sep = '' -- any separator is included in preunit else preunit = '' end if parms.opt_output_unit_only then if want_name and parms.opt_adjectival then return preunit .. hyphenated(id1) end return preunit .. id1 end if out_current.builtin == 'mach' and out_current.sep ~= '' then -- '' means omitsep with non-enwiki name local prefix = id1 .. '&nbsp;' local range = parms.range local valinfo = out_current.valinfo local result = prefix .. valinfo[1].show if range then -- For simplicity and because more not needed, handle one range item only. result = range_text(range[1], want_name, parms, result, prefix .. valinfo[2].show, inout, {spaced=true}) end return preunit .. result end local add_unit = (parms[parms.opt_flip and 'in_range_x' or 'out_range_x'] or (not want_name and parms.abbr_range_x)) and not parms.opt_output_number_only local range = parms.range if range and not add_unit then unlink(out_current) end local id = range and make_id(parms, range.n + 1, out_current) or id1 local extra, was_hyphenated = hyphenated_maybe(parms, want_name, sep, id, inout) if was_hyphenated then add_unit = false end local result local valinfo = out_current.valinfo if range then for i = 0, range.n do local enable_number_word if i == range.n then add_unit = false enable_number_word = true end decorate_value(parms, out_current, i+1, enable_number_word) local show = valinfo[i+1].show if add_unit then show = show .. out_current.sep .. (i == 0 and id1 or make_id(parms, i+1, out_current)) end if i == 0 then result = show else result = range_text(range[i], want_name, parms, result, show, inout) end end else decorate_value(parms, out_current, 1, true) result = valinfo[1].show end if parms.opt_output_number_only then return result end return result .. preunit .. extra end local function make_output_single(parms, in_unit_table, out_unit_table) -- Return true, item where item = wikitext of the conversion result -- for a single output (which is not a combination or a multiple); -- or return false, t where t is an error message table. if parms.opt_order_out and in_unit_table.unitcode == out_unit_table.unitcode then out_unit_table.valinfo = in_unit_table.valinfo else out_unit_table.valinfo = collection() for _, v in ipairs(in_unit_table.valinfo) do local success, info = cvtround(parms, v, in_unit_table, out_unit_table) if not success then return false, info end out_unit_table.valinfo:add(info) end end return true, process_one_output(parms, out_unit_table) end local function make_output_multiple(parms, in_unit_table, out_unit_table) -- Return true, item where item = wikitext of the conversion result -- for an output which is a multiple (like 'ftin'); -- or return false, t where t is an error message table. local inout = out_unit_table.inout -- normally 'out' but can be 'in' for order=out local multiple = out_unit_table.multiple -- table of scaling factors (will not be nil) local combos = out_unit_table.combination -- table of unit tables (will not be nil) local abbr = parms.abbr local abbr_org = parms.abbr_org local disp = parms.disp local want_name = (abbr_org == nil and (disp == 'or' or disp == 'slash')) or not (abbr == 'on' or abbr == inout or abbr == 'mos') local want_link = (parms.lk == 'on' or parms.lk == inout) local mid = parms.opt_flip and parms.mid or '' local sep1 = '&nbsp;' local sep2 = ' ' if parms.opt_adjectival and want_name then sep1 = '-' sep2 = '-' end local do_spell = parms.opt_spell_out parms.opt_spell_out = nil -- so the call to cvtround does not spell the value local function make_result(info, isfirst) local fmt, outvalue, sign local results = {} for i = 1, #combos do local tfrac, thisvalue, strforce local out_current = combos[i] out_current.inout = inout local scale = multiple[i] if i == 1 then -- least significant unit ('in' from 'ftin') local decimals out_current.frac = out_unit_table.frac local success, outinfo = cvtround(parms, info, in_unit_table, out_current) if not success then return false, outinfo end if isfirst then out_unit_table.valinfo = { outinfo } -- in case output value of first least significant unit is needed end sign = outinfo.sign tfrac = outinfo.fraction_table if outinfo.is_scientific then strforce = outinfo.show decimals = '' elseif tfrac then decimals = '' else local show = outinfo.show -- number as a string in local language local p1, p2 = show:find(numdot, 1, true) decimals = p1 and show:sub(p2 + 1) or '' -- text after numdot, if any end fmt = '%.' .. ulen(decimals) .. 'f' -- to reproduce precision if decimals == '' then if tfrac then outvalue = floor(outinfo.raw_absvalue) -- integer part only; fraction added later else outvalue = floor(outinfo.raw_absvalue + 0.5) -- keep all integer digits of least significant unit end else outvalue = outinfo.absvalue end end if scale then outvalue, thisvalue = divide(outvalue, scale) else thisvalue = outvalue end local id if want_name then if varname then local clean if strforce or tfrac then clean = '.1' -- dummy value to force name for floating point else clean = format(fmt, thisvalue) end id = variable_name(clean, out_current) else local key = 'name2' if parms.opt_adjectival then key = 'name1' elseif tfrac then if thisvalue == 0 then key = 'name1' end elseif parms.opt_singular then if 0 < thisvalue and thisvalue < 1.0001 then key = 'name1' end else if thisvalue == 1 then key = 'name1' end end id = out_current[key] end else id = out_current['symbol'] end if i == 1 and omit_separator(id) then -- Testing the id of the least significant unit should be sufficient. sep1 = '' sep2 = '' end if want_link then local link = out_current.link if link then id = make_link(link, id, out_current) end end local strval local spell_inout = (i == #combos or outvalue == 0) and inout or '' -- trick so the last value processed (first displayed) has uppercase, if requested if strforce and outvalue == 0 then sign = '' -- any sign is in strforce strval = strforce -- show small values in scientific notation; will only use least significant unit elseif tfrac then local wholestr = (thisvalue > 0) and tostring(thisvalue) or nil strval = format_fraction(parms, spell_inout, false, wholestr, tfrac.numstr, tfrac.denstr, do_spell) else strval = (thisvalue == 0) and from_en('0') or with_separator(parms, format(fmt, thisvalue)) if do_spell then strval = spell_number(parms, spell_inout, strval) or strval end end table.insert(results, strval .. sep1 .. id) if outvalue == 0 then break end fmt = '%.0f' -- only least significant unit can have a non-integral value end local reversed, count = {}, #results for i = 1, count do reversed[i] = results[count + 1 - i] end return true, sign .. table.concat(reversed, sep2) end local valinfo = in_unit_table.valinfo local success, result = make_result(valinfo[1], true) if not success then return false, result end local range = parms.range if range then for i = 1, range.n do local success, result2 = make_result(valinfo[i+1]) if not success then return false, result2 end result = range_text(range[i], want_name, parms, result, result2, inout, {spaced=true}) end end return true, result .. mid end local function process(parms, in_unit_table, out_unit_table) -- Return true, s, outunit where s = final wikitext result, -- or return false, t where t is an error message table. linked_pages = {} local success, bad_output local bad_input_mcode = in_unit_table.bad_mcode -- nil if input unit is a valid convert unit local out_unit = parms.out_unit if out_unit == nil or out_unit == '' or type(out_unit) == 'function' then -- out_unit can be set to a function by adjustparameters in Module:Convert/wikidata. if bad_input_mcode or parms.opt_input_unit_only then bad_output = '' else local getdef = type(out_unit) == 'function' and out_unit or get_default success, out_unit = getdef(in_unit_table.valinfo[1].value, in_unit_table) parms.out_unit = out_unit if not success then bad_output = out_unit end end end if not bad_output and not out_unit_table then success, out_unit_table = lookup(parms, out_unit, 'any_combination') if success then local mismatch = check_mismatch(in_unit_table, out_unit_table) if mismatch then bad_output = mismatch end else bad_output = out_unit_table end end local lhs, rhs local flipped = parms.opt_flip and not bad_input_mcode if bad_output then rhs = (bad_output == '') and '' or message(parms, bad_output) elseif parms.opt_input_unit_only then rhs = '' else local combos -- nil (for 'ft' or 'ftin'), or table of unit tables (for 'm ft') if not out_unit_table.multiple then -- nil/false ('ft' or 'm ft'), or table of factors ('ftin') combos = out_unit_table.combination end local frac = parms.frac -- nil or denominator of fraction for output values if frac then -- Apply fraction to the unit (if only one), or to non-SI units (if a combination), -- except that if a precision is also specified, the fraction only applies to -- the hand unit; that allows the following result: -- {{convert|156|cm|in hand|1|frac=2}} → 156 centimetres (61.4 in; 15.1½ hands) -- However, the following is handled elsewhere as a special case: -- {{convert|156|cm|hand in|1|frac=2}} → 156 centimetres (15.1½ hands; 61½ in) if combos then local precision = parms.precision for _, unit in ipairs(combos) do if unit.builtin == 'hand' or (not precision and not unit.prefixes) then unit.frac = frac end end else out_unit_table.frac = frac end end local outputs = {} local imax = combos and #combos or 1 -- 1 (single unit) or number of unit tables if imax == 1 then parms.opt_order_out = nil -- only useful with an output combination end if not flipped and not parms.opt_order_out then -- Process left side first so any duplicate links (from lk=on) are suppressed -- on right. Example: {{convert|28|e9pc|e9ly|abbr=off|lk=on}} lhs = process_input(parms, in_unit_table) end for i = 1, imax do local success, item local out_current = combos and combos[i] or out_unit_table out_current.inout = 'out' if i == 1 then if imax > 1 and out_current.builtin == 'hand' then out_current.out_next = combos[2] -- built-in hand can influence next unit in a combination end if parms.opt_order_out then out_current.inout = 'in' end end if out_current.multiple then success, item = make_output_multiple(parms, in_unit_table, out_current) else success, item = make_output_single(parms, in_unit_table, out_current) end if not success then return false, item end outputs[i] = item end if parms.opt_order_out then lhs = outputs[1] table.remove(outputs, 1) end local sep = parms.table_joins and parms.table_joins[2] or parms.join_between rhs = table.concat(outputs, sep) end if flipped or not lhs then local input = process_input(parms, in_unit_table) if flipped then lhs = rhs rhs = input else lhs = input end end if parms.join_before then lhs = parms.join_before .. lhs end local wikitext if bad_input_mcode then if bad_input_mcode == '' then wikitext = lhs else wikitext = lhs .. message(parms, bad_input_mcode) end elseif parms.table_joins then wikitext = parms.table_joins[1] .. lhs .. parms.table_joins[2] .. rhs else wikitext = lhs .. parms.joins[1] .. rhs .. parms.joins[2] end if parms.warnings and not bad_input_mcode then wikitext = wikitext .. parms.warnings end return true, get_styles(parms) .. wikitext, out_unit_table end local function _main_convert(confArgs, parmsArgs, frame) -- Do convert, and if needed, do it again with higher default precision. local parms = { frame = frame or mw.getCurrentFrame() } -- will hold template arguments, after translation set_config(confArgs) local success, result = get_parms(parms, parmsArgs) if success then if type(result) ~= 'table' then return tostring(result) end local in_unit_table = result local out_unit_table for _ = 1, 2 do -- use counter so cannot get stuck repeating convert success, result, out_unit_table = process(parms, in_unit_table, out_unit_table) if success and parms.do_convert_again then parms.do_convert_again = false else break end end end -- If input=x gives a problem, the result should be just the user input -- (if x is a property like P123 it has been replaced with ''). -- An unknown input unit would display the input and an error message -- with success == true at this point. -- Also, can have success == false with a message that outputs an empty string. if parms.input_text then if success and not parms.have_problem then return result end local cat if parms.tracking then -- Add a tracking category using the given text as the category sort key. -- There is currently only one type of tracking, but in principle multiple -- items could be tracked, using different sort keys for convenience. cat = wanted_category('tracking', parms.tracking) end return parms.input_text .. (cat or '') end if parms.error_text then if success and not parms.have_problem then return result end return parms.error_text end return success and result or message(parms, result) end local function main_convert(frame) return _main_convert(frame.args, frame:getParent().args, frame) end local function _unit(unitcode, options) -- Helper function for Module:Val to look up a unit. -- Parameter unitcode must be a string to identify the wanted unit. -- Parameter options must be nil or a table with optional fields: -- value = number (for sort key; default value is 1) -- scaled_top = nil for a normal unit, or a number for a unit which is -- the denominator of a per unit (for sort key) -- si = { 'symbol', 'link' } -- (a table with two strings) to make an SI unit -- that will be used for the look up -- link = true if result should be [[linked]] -- sort = 'on' or 'debug' if result should include a sort key in a -- span element ('debug' makes the key visible) -- name = true for the name of the unit instead of the symbol -- us = true for the US spelling of the unit, if any -- Return nil if unitcode is not a non-empty string. -- Otherwise return a table with fields: -- text = requested symbol or name of unit, optionally linked -- scaled_value = input value adjusted by unit scale; used for sort key -- sortspan = span element with sort key like that provided by {{ntsh}}, -- calculated from the result of converting value -- to a base unit with scale 1. -- unknown = true if the unitcode was not known unitcode = strip(unitcode) if unitcode == nil or unitcode == '' then return nil end set_config({}) linked_pages = {} options = options or {} local parms = { abbr = options.name and 'off' or 'on', lk = options.link and 'on' or nil, opt_sp_us = options.us and true or nil, opt_ignore_error = true, opt_no_extra = true, -- do not add pages using this function to 'what links here' for Module:Convert/extra opt_sortable_on = options.sort == 'on' or options.sort == 'debug', opt_sortable_debug = options.sort == 'debug', } if options.si then -- Make a dummy table of units (just one unit) for lookup to use. -- This makes lookup recognize any SI prefix in the unitcode. local symbol = options.si[1] or '?' parms.unittable = { [symbol] = { _name1 = symbol, _name2 = symbol, _symbol = symbol, utype = symbol, scale = symbol == 'g' and 0.001 or 1, prefixes = 1, default = symbol, link = options.si[2], }} end local success, unit_table = lookup(parms, unitcode, 'no_combination') if not success then unit_table = setmetatable({ symbol = unitcode, name2 = unitcode, utype = unitcode, scale = 1, default = '', defkey = '', linkey = '' }, unit_mt) end local value = tonumber(options.value) or 1 local clean = tostring(abs(value)) local info = { value = value, altvalue = value, singular = (clean == '1'), clean = clean, show = clean, } unit_table.inout = 'in' unit_table.valinfo = { info } local sortspan, scaled_value if options.sort then sortspan, scaled_value = make_table_or_sort(parms, value, info, unit_table, options.scaled_top) end return { text = make_id(parms, 1, unit_table), sortspan = sortspan, scaled_value = scaled_value, unknown = not success and true or nil, } end return { convert = main_convert, _convert = _main_convert, _unit = _unit } r4djqnuzbxaut805hk89ncew56hajfu Module:Convert/data 828 34733 126092 2026-07-15T10:52:45Z Fongcwele 16873 Created page with "-- Conversion data used by [[Module:Convert]] which uses mw.loadData() for -- read-only access to this module so that it is loaded only once per page. -- See [[:en:Template:Convert/Transwiki guide]] if copying to another wiki. -- -- These data tables follow: -- all_units all properties for a unit, including default output -- default_exceptions exceptions for default output ('kg' and 'g' have different defaults) -- link_exceptions exceptions for links..." 126092 Scribunto text/plain -- Conversion data used by [[Module:Convert]] which uses mw.loadData() for -- read-only access to this module so that it is loaded only once per page. -- See [[:en:Template:Convert/Transwiki guide]] if copying to another wiki. -- -- These data tables follow: -- all_units all properties for a unit, including default output -- default_exceptions exceptions for default output ('kg' and 'g' have different defaults) -- link_exceptions exceptions for links ('kg' and 'g' have different links) -- -- These tables are generated by a script which reads the wikitext of a page that -- documents the required properties of each unit; see [[:en:Module:Convert/doc]]. --------------------------------------------------------------------------- -- Do not change the data in this table because it is created by running -- -- a script that reads the wikitext from a wiki page (see note above). -- --------------------------------------------------------------------------- local all_units = { ["Gy"] = { _name1 = "gray", _symbol = "Gy", utype = "absorbed radiation dose", scale = 1, prefixes = 1, default = "rad", link = "Gray (unit)", }, ["rad"] = { _name1 = "rad", _symbol = "rad", utype = "absorbed radiation dose", scale = 0.01, prefixes = 1, default = "Gy", link = "Rad (unit)", }, ["cm/s2"] = { name1 = "centimetre per second squared", name1_us = "centimeter per second squared", name2 = "centimetres per second squared", name2_us = "centimeters per second squared", symbol = "cm/s<sup>2</sup>", utype = "acceleration", scale = 0.01, default = "ft/s2", link = "Gal (unit)", }, ["ft/s2"] = { name1 = "foot per second squared", name2 = "feet per second squared", symbol = "ft/s<sup>2</sup>", utype = "acceleration", scale = 0.3048, default = "m/s2", }, ["g0"] = { name1 = "standard gravity", name2 = "standard gravities", symbol = "''g''<sub>0</sub>", utype = "acceleration", scale = 9.80665, default = "m/s2", }, ["g-force"] = { name2 = "''g''", symbol = "''g''", utype = "acceleration", scale = 9.80665, default = "m/s2", link = "g-force", }, ["km/hs"] = { name1 = "kilometre per hour per second", name1_us = "kilometer per hour per second", name2 = "kilometres per hour per second", name2_us = "kilometers per hour per second", symbol = "km/(h⋅s)", utype = "acceleration", scale = 0.27777777777777779, default = "mph/s", link = "Acceleration", }, ["km/s2"] = { name1 = "kilometre per second squared", name1_us = "kilometer per second squared", name2 = "kilometres per second squared", name2_us = "kilometers per second squared", symbol = "km/s<sup>2</sup>", utype = "acceleration", scale = 1000, default = "mph/s", link = "Acceleration", }, ["m/s2"] = { name1 = "metre per second squared", name1_us = "meter per second squared", name2 = "metres per second squared", name2_us = "meters per second squared", symbol = "m/s<sup>2</sup>", utype = "acceleration", scale = 1, default = "ft/s2", }, ["mph/s"] = { name1 = "mile per hour per second", name2 = "miles per hour per second", symbol = "mph/s", utype = "acceleration", scale = 0.44704, default = "km/hs", link = "Acceleration", }, ["km/h/s"] = { target = "km/hs", }, ["standard gravity"] = { target = "g0", }, ["1000sqft"] = { name1 = "thousand square feet", name2 = "thousand square feet", symbol = "1000&nbsp;sq&nbsp;ft", utype = "area", scale = 92.90304, default = "m2", link = "Square foot", }, ["a"] = { _name1 = "are", _symbol = "a", utype = "area", scale = 100, prefixes = 1, default = "sqft", link = "Hectare#Are", }, ["acre"] = { symbol = "acre", usename = 1, utype = "area", scale = 4046.8564224, default = "ha", subdivs = { ["rood"] = { 4, default = "ha" }, ["sqperch"] = { 160, default = "ha" } }, }, ["acre-sing"] = { target = "acre", }, ["arpent"] = { symbol = "arpent", usename = 1, utype = "area", scale = 3418.89, default = "ha", }, ["cda"] = { name1 = "cuerda", symbol = "cda", utype = "area", scale = 3930.395625, default = "ha acre", }, ["daa"] = { name1 = "decare", symbol = "daa", utype = "area", scale = 1000, default = "km2 sqmi", }, ["dunam"] = { symbol = "dunam", usename = 1, utype = "area", scale = 1000, default = "km2 sqmi", }, ["dunum"] = { symbol = "dunum", usename = 1, utype = "area", scale = 1000, default = "km2 sqmi", link = "Dunam", }, ["ha"] = { name1 = "hectare", symbol = "ha", utype = "area", scale = 10000, default = "acre", }, ["hectare"] = { name1 = "hectare", symbol = "ha", usename = 1, utype = "area", scale = 10000, default = "acre", }, ["Irish acre"] = { name1 = "Irish acre", symbol = "Irish&nbsp;acres", utype = "area", scale = 6555.2385024, default = "ha", link = "Acre (Irish)", }, ["m2"] = { _name1 = "square metre", _name1_us= "square meter", _symbol = "m<sup>2</sup>", prefix_position= 8, utype = "area", scale = 1, prefixes = 2, default = "sqft", link = "Square metre", }, ["pondemaat"] = { name1 = "pondemaat", name2 = "pondemaat", symbol = "pond", utype = "area", scale = 3674.363358816, default = "m2", link = ":nl:pondemaat", }, ["pyeong"] = { name2 = "pyeong", symbol = "pyeong", usename = 1, utype = "area", scale = 3.3057851239669422, default = "m2", }, ["rai"] = { name2 = "rai", symbol = "rai", utype = "area", scale = 1600, default = "m2", link = "Rai (unit)", }, ["rood"] = { symbol = "rood", usename = 1, utype = "area", scale = 1011.7141056, default = "sqft m2", subdivs = { ["sqperch"] = { 40, default = "m2" } }, link = "Rood (unit)", }, ["sqfoot"] = { name1 = "square foot", name2 = "square foot", symbol = "sq&nbsp;ft", utype = "area", scale = 0.09290304, default = "m2", }, ["sqft"] = { name1 = "square foot", name2 = "square feet", symbol = "sq&nbsp;ft", utype = "area", scale = 0.09290304, default = "m2", }, ["sqin"] = { name1 = "square inch", name2 = "square inches", symbol = "sq&nbsp;in", utype = "area", scale = 0.00064516, default = "cm2", }, ["sqmi"] = { name1 = "square mile", symbol = "sq&nbsp;mi", utype = "area", scale = 2589988.110336, default = "km2", }, ["sqnmi"] = { name1 = "square nautical mile", symbol = "sq&nbsp;nmi", utype = "area", scale = 3429904, default = "km2 sqmi", link = "Nautical mile", }, ["sqperch"] = { name2 = "perches", symbol = "perch", usename = 1, utype = "area", scale = 25.29285264, default = "m2", link = "Rod (unit)#Area and volume", }, ["sqverst"] = { symbol = "square verst", usename = 1, utype = "area", scale = 1138062.24, default = "km2 sqmi", link = "Verst", }, ["sqyd"] = { name1 = "square yard", symbol = "sq&nbsp;yd", utype = "area", scale = 0.83612736, default = "m2", }, ["tsubo"] = { name2 = "tsubo", symbol = "tsubo", usename = 1, utype = "area", scale = 3.3057851239669422, default = "m2", link = "Japanese units of measurement#Area", }, ["acres"] = { target = "acre", }, ["are"] = { target = "a", }, ["decare"] = { target = "daa", }, ["foot2"] = { target = "sqfoot", }, ["ft2"] = { target = "sqft", symbol = "ft<sup>2</sup>", }, ["in2"] = { target = "sqin", symbol = "in<sup>2</sup>", }, ["km²"] = { target = "km2", }, ["mi2"] = { target = "sqmi", symbol = "mi<sup>2</sup>", }, ["million acre"] = { target = "e6acre", }, ["million acres"] = { target = "e6acre", }, ["million hectares"] = { target = "e6ha", }, ["m²"] = { target = "m2", }, ["nmi2"] = { target = "sqnmi", }, ["pond"] = { target = "pondemaat", }, ["sq arp"] = { target = "arpent", }, ["sqkm"] = { target = "km2", }, ["sqm"] = { target = "m2", }, ["square verst"] = { target = "sqverst", }, ["verst2"] = { target = "sqverst", }, ["yd2"] = { target = "sqyd", symbol = "yd<sup>2</sup>", }, ["m2/ha"] = { name1 = "square metre per hectare", name1_us = "square meter per hectare", name2 = "square metres per hectare", name2_us = "square meters per hectare", symbol = "m<sup>2</sup>/ha", utype = "area per unit area", scale = 0.0001, default = "sqft/acre", link = "Basal area", }, ["sqft/acre"] = { name1 = "square foot per acre", name2 = "square feet per acre", symbol = "sq&nbsp;ft/acre", utype = "area per unit area", scale = 2.295684113865932e-5, default = "m2/ha", link = "Basal area", }, ["cent"] = { name1 = "cent", symbol = "¢", utype = "cent", scale = 1, default = "cent", link = "Cent (currency)", }, ["¢"] = { target = "cent", }, ["A.h"] = { name1 = "ampere hour", symbol = "A⋅h", utype = "charge", scale = 3600, default = "coulomb", }, ["coulomb"] = { _name1 = "coulomb", _symbol = "C", utype = "charge", scale = 1, prefixes = 1, default = "e", link = "Coulomb", }, ["e"] = { name1 = "elementary charge", symbol = "''e''", utype = "charge", scale = 1.602176634e-19, default = "coulomb", }, ["g-mol"] = { name1 = "gram-mole", symbol = "g&#8209;mol", utype = "chemical amount", scale = 1, default = "lbmol", link = "Mole (unit)", }, ["gmol"] = { name1 = "gram-mole", symbol = "gmol", utype = "chemical amount", scale = 1, default = "lbmol", link = "Mole (unit)", }, ["kmol"] = { name1 = "kilomole", symbol = "kmol", utype = "chemical amount", scale = 1000, default = "lbmol", link = "Mole (unit)", }, ["lb-mol"] = { name1 = "pound-mole", symbol = "lb&#8209;mol", utype = "chemical amount", scale = 453.59237, default = "mol", }, ["lbmol"] = { name1 = "pound-mole", symbol = "lbmol", utype = "chemical amount", scale = 453.59237, default = "mol", }, ["mol"] = { name1 = "mole", symbol = "mol", utype = "chemical amount", scale = 1, default = "lbmol", link = "Mole (unit)", }, ["kgCO2/L"] = { name1 = "kilogram per litre", name1_us = "kilogram per liter", name2 = "kilograms per litre", name2_us = "kilograms per liter", symbol = "kg(CO<sub>2</sub>)/L", utype = "co2 per unit volume", scale = 1000, default = "lbCO2/USgal", link = "Exhaust gas", }, ["lbCO2/USgal"] = { name1 = "pound per US gallon", name2 = "pounds per US gallon", symbol = "lbCO2/US&nbsp;gal", utype = "co2 per unit volume", scale = 119.82642731689663, default = "kgCO2/L", link = "Exhaust gas", }, ["oz/lb"] = { per = { "oz", "lb" }, utype = "concentration", default = "mg/kg", }, ["mg/kg"] = { per = { "mg", "kg" }, utype = "concentration", default = "oz/lb", }, ["g/dm3"] = { name1 = "gram per cubic decimetre", name1_us = "gram per cubic decimeter", name2 = "grams per cubic decimetre", name2_us = "grams per cubic decimeter", symbol = "g/dm<sup>3</sup>", utype = "density", scale = 1, default = "kg/m3", link = "Density", }, ["g/L"] = { name1 = "gram per litre", name1_us = "gram per liter", name2 = "grams per litre", name2_us = "grams per liter", symbol = "g/L", utype = "density", scale = 1, default = "lb/cuin", link = "Density", }, ["g/mL"] = { name1 = "gram per millilitre", name1_us = "gram per milliliter", name2 = "grams per millilitre", name2_us = "grams per milliliter", symbol = "g/mL", utype = "density", scale = 1000, default = "lb/cuin", link = "Density", }, ["g/ml"] = { name1 = "gram per millilitre", name1_us = "gram per milliliter", name2 = "grams per millilitre", name2_us = "grams per milliliter", symbol = "g/ml", utype = "density", scale = 1000, default = "lb/cuin", link = "Density", }, ["kg/dm3"] = { name1 = "kilogram per cubic decimetre", name1_us = "kilogram per cubic decimeter", name2 = "kilograms per cubic decimetre", name2_us = "kilograms per cubic decimeter", symbol = "kg/dm<sup>3</sup>", utype = "density", scale = 1000, default = "lb/cuft", link = "Density", }, ["kg/L"] = { name1 = "kilogram per litre", name1_us = "kilogram per liter", name2 = "kilograms per litre", name2_us = "kilograms per liter", symbol = "kg/L", utype = "density", scale = 1000, default = "lb/USgal", link = "Density", }, ["kg/l"] = { name1 = "kilogram per litre", name1_us = "kilogram per liter", name2 = "kilograms per litre", name2_us = "kilograms per liter", symbol = "kg/l", utype = "density", scale = 1000, default = "lb/USgal", link = "Density", }, ["kg/m3"] = { name1 = "kilogram per cubic metre", name1_us = "kilogram per cubic meter", name2 = "kilograms per cubic metre", name2_us = "kilograms per cubic meter", symbol = "kg/m<sup>3</sup>", utype = "density", scale = 1, default = "lb/cuyd", link = "Density", }, ["lb/cuft"] = { name1 = "pound per cubic foot", name2 = "pounds per cubic foot", symbol = "lb/cu&nbsp;ft", utype = "density", scale = 16.018463373960142, default = "g/cm3", link = "Density", }, ["lb/cuin"] = { name1 = "pound per cubic inch", name2 = "pounds per cubic inch", symbol = "lb/cu&nbsp;in", utype = "density", scale = 27679.904710203122, default = "g/cm3", link = "Density", }, ["lb/cuyd"] = { name1 = "pound per cubic yard", name2 = "pounds per cubic yard", symbol = "lb/cu&nbsp;yd", utype = "density", scale = 0.5932764212577829, default = "kg/m3", link = "Density", }, ["lb/impgal"] = { name1 = "pound per imperial gallon", name2 = "pounds per imperial gallon", symbol = "lb/imp&nbsp;gal", utype = "density", scale = 99.776372663101697, default = "kg/L", link = "Density", }, ["lb/in3"] = { name1 = "pound per cubic inch", name2 = "pounds per cubic inch", symbol = "lb/cu&thinsp;in", utype = "density", scale = 27679.904710203122, default = "g/cm3", link = "Density", }, ["lb/U.S.gal"] = { name1 = "pound per U.S. gallon", name2 = "pounds per U.S. gallon", symbol = "lb/U.S.&nbsp;gal", utype = "density", scale = 119.82642731689663, default = "kg/L", link = "Density", }, ["lb/USbu"] = { name1 = "pound per US bushel", name2 = "pounds per US bushel", symbol = "lb/US&nbsp;bu", utype = "density", scale = 12.871859780974471, default = "kg/m3", link = "Bushel", }, ["lb/USgal"] = { name1 = "pound per US gallon", name2 = "pounds per US gallon", symbol = "lb/US&nbsp;gal", utype = "density", scale = 119.82642731689663, default = "kg/L", link = "Density", }, ["lbm/cuin"] = { name1 = "pound mass per cubic inch", name2 = "pounds mass per cubic inch", symbol = "lbm/cu&thinsp;in", utype = "density", scale = 27679.904710203122, default = "g/cm3", link = "Density", }, ["mg/L"] = { name1 = "milligram per litre", name1_us = "milligram per liter", name2 = "milligrams per litre", name2_us = "milligrams per liter", symbol = "mg/L", utype = "density", scale = 0.001, default = "lb/cuin", link = "Density", }, ["oz/cuin"] = { name1 = "ounce per cubic inch", name2 = "ounces per cubic inch", symbol = "oz/cu&nbsp;in", utype = "density", scale = 1729.9940443876951, default = "g/cm3", link = "Density", }, ["g/cm3"] = { per = { "g", "cm3" }, utype = "density", default = "lb/cuin", }, ["g/m3"] = { per = { "g", "m3" }, utype = "density", default = "lb/cuyd", link = "Density", }, ["Mg/m3"] = { per = { "Mg", "m3" }, utype = "density", default = "lb/cuft", }, ["mg/l"] = { per = { "mg", "ll" }, utype = "density", default = "oz/cuin", }, ["μg/dL"] = { per = { "μg", "dL" }, utype = "density", default = "lb/cuin", }, ["μg/l"] = { per = { "μg", "ll" }, utype = "density", default = "oz/cuin", }, ["lb/ft3"] = { target = "lb/cuft", }, ["lb/yd3"] = { target = "lb/cuyd", }, ["lbm/in3"] = { target = "lbm/cuin", }, ["mcg/dL"] = { target = "μg/dL", }, ["oz/in3"] = { target = "oz/cuin", }, ["ug/dL"] = { target = "μg/dL", }, ["ug/l"] = { target = "μg/l", }, ["B.O.T.U."] = { name1 = "Board of Trade Unit", symbol = "B.O.T.U.", utype = "energy", scale = 3600000, default = "MJ", link = "Kilowatt-hour", }, ["bboe"] = { name1 = "barrel of oil equivalent", name2 = "barrels of oil equivalent", symbol = "bboe", utype = "energy", scale = 6117863200, default = "GJ", }, ["BOE"] = { name1 = "barrel of oil equivalent", name2 = "barrels of oil equivalent", symbol = "BOE", utype = "energy", scale = 6117863200, default = "GJ", }, ["BTU"] = { name1 = "British thermal unit", symbol = "BTU", utype = "energy", scale = 1055.05585262, default = "kJ", }, ["Btu"] = { name1 = "British thermal unit", symbol = "Btu", utype = "energy", scale = 1055.05585262, default = "kJ", }, ["BTU-39F"] = { name1 = "British thermal unit (39°F)", name2 = "British thermal units (39°F)", symbol = "BTU<sub>39°F</sub>", utype = "energy", scale = 1059.67, default = "kJ", link = "British thermal unit", }, ["Btu-39F"] = { name1 = "British thermal unit (39°F)", name2 = "British thermal units (39°F)", symbol = "Btu<sub>39°F</sub>", utype = "energy", scale = 1059.67, default = "kJ", link = "British thermal unit", }, ["BTU-59F"] = { name1 = "British thermal unit (59°F)", name2 = "British thermal units (59°F)", symbol = "BTU<sub>59°F</sub>", utype = "energy", scale = 1054.804, default = "kJ", link = "British thermal unit", }, ["Btu-59F"] = { name1 = "British thermal unit (59°F)", name2 = "British thermal units (59°F)", symbol = "Btu<sub>59°F</sub>", utype = "energy", scale = 1054.804, default = "kJ", link = "British thermal unit", }, ["BTU-60F"] = { name1 = "British thermal unit (60°F)", name2 = "British thermal units (60°F)", symbol = "BTU<sub>60°F</sub>", utype = "energy", scale = 1054.68, default = "kJ", link = "British thermal unit", }, ["Btu-60F"] = { name1 = "British thermal unit (60°F)", name2 = "British thermal units (60°F)", symbol = "Btu<sub>60°F</sub>", utype = "energy", scale = 1054.68, default = "kJ", link = "British thermal unit", }, ["BTU-63F"] = { name1 = "British thermal unit (63°F)", name2 = "British thermal units (63°F)", symbol = "BTU<sub>63°F</sub>", utype = "energy", scale = 1054.6, default = "kJ", link = "British thermal unit", }, ["Btu-63F"] = { name1 = "British thermal unit (63°F)", name2 = "British thermal units (63°F)", symbol = "Btu<sub>63°F</sub>", utype = "energy", scale = 1054.6, default = "kJ", link = "British thermal unit", }, ["BTU-ISO"] = { name1 = "British thermal unit (ISO)", name2 = "British thermal units (ISO)", symbol = "BTU<sub>ISO</sub>", utype = "energy", scale = 1055.056, default = "kJ", link = "British thermal unit", }, ["Btu-ISO"] = { target = "BTU-ISO", }, ["BTU-IT"] = { name1 = "British thermal unit (IT)", name2 = "British thermal units (IT)", symbol = "BTU<sub>IT</sub>", utype = "energy", scale = 1055.05585262, default = "kJ", link = "British thermal unit", }, ["Btu-IT"] = { name1 = "British thermal unit (IT)", name2 = "British thermal units (IT)", symbol = "Btu<sub>IT</sub>", utype = "energy", scale = 1055.05585262, default = "kJ", link = "British thermal unit", }, ["BTU-mean"] = { name1 = "British thermal unit (mean)", name2 = "British thermal units (mean)", symbol = "BTU<sub>mean</sub>", utype = "energy", scale = 1055.87, default = "kJ", link = "British thermal unit", }, ["Btu-mean"] = { name1 = "British thermal unit (mean)", name2 = "British thermal units (mean)", symbol = "Btu<sub>mean</sub>", utype = "energy", scale = 1055.87, default = "kJ", link = "British thermal unit", }, ["BTU-th"] = { name1 = "British thermal unit (thermochemical)", name2 = "British thermal units (thermochemical)", symbol = "BTU<sub>th</sub>", utype = "energy", scale = 1054.35026444, default = "kJ", link = "British thermal unit", }, ["Btu-th"] = { name1 = "British thermal unit (thermochemical)", name2 = "British thermal units (thermochemical)", symbol = "Btu<sub>th</sub>", utype = "energy", scale = 1054.35026444, default = "kJ", link = "British thermal unit", }, ["Cal"] = { name1 = "calorie", symbol = "Cal", utype = "energy", scale = 4184, default = "kJ", }, ["cal"] = { name1 = "calorie", symbol = "cal", utype = "energy", scale = 4.184, default = "J", }, ["Cal-15"] = { name1 = "Calorie (15°C)", name2 = "Calories (15°C)", symbol = "Cal<sub>15</sub>", utype = "energy", scale = 4185.8, default = "kJ", link = "Calorie", }, ["cal-15"] = { name1 = "calorie (15°C)", name2 = "calories (15°C)", symbol = "cal<sub>15</sub>", utype = "energy", scale = 4.1858, default = "J", link = "Calorie", }, ["Cal-IT"] = { name1 = "Calorie (International Steam Table)", name2 = "Calories (International Steam Table)", symbol = "Cal<sub>IT</sub>", utype = "energy", scale = 4186.8, default = "kJ", link = "Calorie", }, ["cal-IT"] = { name1 = "calorie (International Steam Table)", name2 = "calories (International Steam Table)", symbol = "cal<sub>IT</sub>", utype = "energy", scale = 4.1868, default = "J", link = "Calorie", }, ["Cal-th"] = { name1 = "Calorie (thermochemical)", name2 = "Calories (thermochemical)", symbol = "Cal<sub>th</sub>", utype = "energy", scale = 4184, default = "kJ", link = "Calorie", }, ["cal-th"] = { name1 = "calorie (thermochemical)", name2 = "calories (thermochemical)", symbol = "cal<sub>th</sub>", utype = "energy", scale = 4.184, default = "J", link = "Calorie", }, ["CHU-IT"] = { name1 = "Celsius heat unit (International Table)", name2 = "Celsius heat units (International Table)", symbol = "CHU<sub>IT</sub>", utype = "energy", scale = 1899.100534716, default = "kJ", link = "Conversion of units#Energy", }, ["cufootnaturalgas"] = { name1 = "cubic foot of natural gas", name2 = "cubic foot of natural gas", symbol = "cuftnaturalgas", usename = 1, utype = "energy", scale = 1055055.85262, default = "MJ", link = "Conversion of units#Energy", }, ["cuftnaturalgas"] = { name1 = "cubic foot of natural gas", name2 = "cubic feet of natural gas", symbol = "cuftnaturalgas", usename = 1, utype = "energy", scale = 1055055.85262, default = "MJ", link = "Conversion of units#Energy", }, ["Eh"] = { name1 = "Hartree", symbol = "''E''<sub>h</sub>", utype = "energy", scale = 4.35974417e-18, default = "eV", }, ["erg"] = { symbol = "erg", utype = "energy", scale = 0.0000001, default = "μJ", }, ["eV"] = { _name1 = "electronvolt", _symbol = "eV", utype = "energy", scale = 1.602176634e-19, prefixes = 1, default = "aJ", link = "Electronvolt", }, ["foe"] = { symbol = "foe", utype = "energy", scale = 1e44, default = "YJ", link = "Foe (unit)", }, ["ftlb"] = { name1 = "foot-pound", symbol = "ft⋅lb", utype = "energy", alttype = "torque", scale = 1.3558179483314004, default = "J", link = "Foot-pound (energy)", }, ["ftlb-f"] = { name1 = "foot-pound force", name2 = "foot-pounds force", symbol = "ft⋅lb<sub>f</sub>", utype = "energy", alttype = "torque", scale = 1.3558179483314004, default = "J", link = "Foot-pound (energy)", }, ["ftlbf"] = { name1 = "foot-pound force", name2 = "foot-pounds force", symbol = "ft⋅lbf", utype = "energy", alttype = "torque", scale = 1.3558179483314004, default = "J", link = "Foot-pound (energy)", }, ["ftpdl"] = { name1 = "foot-poundal", symbol = "ft⋅pdl", utype = "energy", scale = 0.0421401100938048, default = "J", }, ["gTNT"] = { name2 = "grams of TNT", symbol = "gram of TNT", usename = 1, utype = "energy", scale = 4184, default = "kJ", link = "TNT equivalent", }, ["Gtoe"] = { name1 = "gigatonne of oil equivalent", name2 = "gigatonnes of oil equivalent", symbol = "Gtoe", utype = "energy", scale = 4.1868e19, default = "EJ", link = "Tonne of oil equivalent", }, ["GtonTNT"] = { name2 = "gigatons of TNT", symbol = "gigaton of TNT", usename = 1, utype = "energy", scale = 4.184e18, default = "EJ", link = "TNT equivalent", }, ["GtTNT"] = { name2 = "gigatonnes of TNT", symbol = "gigatonne of TNT", usename = 1, utype = "energy", scale = 4.184e18, default = "EJ", link = "TNT equivalent", }, ["GW.h"] = { name1 = "gigawatt-hour", symbol = "GW⋅h", utype = "energy", scale = 3.6e12, default = "TJ", link = "Kilowatt-hour", }, ["GWh"] = { name1 = "gigawatt-hour", symbol = "GWh", utype = "energy", scale = 3.6e12, default = "TJ", link = "Kilowatt-hour", }, ["hph"] = { name1 = "horsepower-hour", symbol = "hp⋅h", utype = "energy", scale = 2684519.537696172792, default = "kWh", link = "Horsepower", }, ["inlb"] = { name1 = "inch-pound", symbol = "in⋅lb", utype = "energy", alttype = "torque", scale = 0.1129848290276167, default = "mJ", link = "Foot-pound (energy)", }, ["inlb-f"] = { name1 = "inch-pound force", name2 = "inch-pounds force", symbol = "in⋅lb<sub>f</sub>", utype = "energy", alttype = "torque", scale = 0.1129848290276167, default = "mJ", link = "Foot-pound (energy)", }, ["inlbf"] = { name1 = "inch-pound force", name2 = "inch-pounds force", symbol = "in⋅lbf", utype = "energy", alttype = "torque", scale = 0.1129848290276167, default = "mJ", link = "Foot-pound (energy)", }, ["inoz-f"] = { name1 = "inch-ounce force", name2 = "inch-ounces force", symbol = "in⋅oz<sub>f</sub>", utype = "energy", alttype = "torque", scale = 0.00706155181422604375, default = "mJ", link = "Foot-pound (energy)", }, ["inozf"] = { name1 = "inch-ounce force", name2 = "inch-ounces force", symbol = "in⋅ozf", utype = "energy", alttype = "torque", scale = 0.00706155181422604375, default = "mJ", link = "Foot-pound (energy)", }, ["J"] = { _name1 = "joule", _symbol = "J", utype = "energy", scale = 1, prefixes = 1, default = "cal", link = "Joule", }, ["kBOE"] = { name1 = "kilo barrel of oil equivalent", name2 = "kilo barrels of oil equivalent", symbol = "kBOE", utype = "energy", scale = 6.1178632e12, default = "TJ", link = "Barrel of oil equivalent", }, ["kcal"] = { name1 = "kilocalorie", symbol = "kcal", utype = "energy", scale = 4184, default = "kJ", link = "Calorie", }, ["kcal-15"] = { name1 = "kilocalorie (15°C)", name2 = "kilocalories (15°C)", symbol = "kcal<sub>15</sub>", utype = "energy", scale = 4185.8, default = "kJ", link = "Calorie", }, ["kcal-IT"] = { name1 = "kilocalorie (International Steam Table)", name2 = "kilocalories (International Steam Table)", symbol = "kcal<sub>IT</sub>", utype = "energy", scale = 4186.8, default = "kJ", link = "Calorie", }, ["kcal-th"] = { name1 = "kilocalorie (thermochemical)", name2 = "kilocalories (thermochemical)", symbol = "kcal<sub>th</sub>", utype = "energy", scale = 4184, default = "kJ", link = "Calorie", }, ["kerg"] = { name1 = "kiloerg", symbol = "kerg", utype = "energy", scale = 0.0001, default = "mJ", link = "Erg", }, ["kgTNT"] = { name2 = "kilograms of TNT", symbol = "kilogram of TNT", usename = 1, utype = "energy", scale = 4184000, default = "MJ", link = "TNT equivalent", }, ["kt(TNT)"] = { name1 = "kilotonne", name1_us = "kiloton", symbol = "kt", utype = "energy", scale = 4.184e12, default = "TJ", link = "TNT equivalent", }, ["ktoe"] = { name1 = "kilotonne of oil equivalent", name2 = "kilotonnes of oil equivalent", symbol = "ktoe", utype = "energy", scale = 4.1868e13, default = "TJ", link = "Tonne of oil equivalent", }, ["ktonTNT"] = { name1 = "kiloton of TNT", name2 = "kilotons of TNT", symbol = "kt", utype = "energy", scale = 4.184e12, default = "TJ", link = "TNT equivalent", }, ["ktTNT"] = { name2 = "kilotonnes of TNT", symbol = "kilotonne of TNT", usename = 1, utype = "energy", scale = 4.184e12, default = "TJ", link = "TNT equivalent", }, ["kW.h"] = { name1 = "kilowatt-hour", symbol = "kW⋅h", utype = "energy", scale = 3600000, default = "MJ", }, ["kWh"] = { name1 = "kilowatt-hour", symbol = "kWh", utype = "energy", scale = 3600000, default = "MJ", }, ["Mcal"] = { name1 = "megacalorie", symbol = "Mcal", utype = "energy", scale = 4184000, default = "MJ", link = "Calorie", }, ["mcal"] = { name1 = "millicalorie", symbol = "mcal", utype = "energy", scale = 0.004184, default = "mJ", link = "Calorie", }, ["Mcal-15"] = { name1 = "megacalorie (15°C)", name2 = "megacalories (15°C)", symbol = "Mcal<sub>15</sub>", utype = "energy", scale = 4185800, default = "MJ", link = "Calorie", }, ["mcal-15"] = { name1 = "millicalorie (15°C)", name2 = "millicalories (15°C)", symbol = "mcal<sub>15</sub>", utype = "energy", scale = 0.0041858, default = "mJ", link = "Calorie", }, ["Mcal-IT"] = { name1 = "megacalorie (International Steam Table)", name2 = "megacalories (International Steam Table)", symbol = "Mcal<sub>IT</sub>", utype = "energy", scale = 4186800, default = "MJ", link = "Calorie", }, ["mcal-IT"] = { name1 = "millicalorie (International Steam Table)", name2 = "millicalories (International Steam Table)", symbol = "mcal<sub>IT</sub>", utype = "energy", scale = 0.0041868, default = "mJ", link = "Calorie", }, ["Mcal-th"] = { name1 = "megacalorie (thermochemical)", name2 = "megacalories (thermochemical)", symbol = "Mcal<sub>th</sub>", utype = "energy", scale = 4184000, default = "MJ", link = "Calorie", }, ["mcal-th"] = { name1 = "millicalorie (thermochemical)", name2 = "millicalories (thermochemical)", symbol = "mcal<sub>th</sub>", utype = "energy", scale = 0.004184, default = "mJ", link = "Calorie", }, ["Merg"] = { name1 = "megaerg", symbol = "Merg", utype = "energy", scale = 0.1, default = "J", link = "Erg", }, ["merg"] = { name1 = "millierg", symbol = "merg", utype = "energy", scale = 0.0000000001, default = "μJ", link = "Erg", }, ["MMBtu"] = { name1 = "million British thermal units", name2 = "million British thermal units", symbol = "MMBtu", utype = "energy", scale = 1055055852.62, default = "GJ", link = "British thermal unit", }, ["Mt(TNT)"] = { name1 = "megatonne", name1_us = "megaton", symbol = "Mt", utype = "energy", scale = 4.184e15, default = "PJ", link = "TNT equivalent", }, ["Mtoe"] = { name1 = "megatonne of oil equivalent", name2 = "megatonnes of oil equivalent", symbol = "Mtoe", utype = "energy", scale = 4.1868e16, default = "PJ", link = "Tonne of oil equivalent", }, ["MtonTNT"] = { name1 = "megaton of TNT", name2 = "megatons of TNT", symbol = "Mt", utype = "energy", scale = 4.184e15, default = "PJ", link = "TNT equivalent", }, ["mtonTNT"] = { name2 = "millitons of TNT", symbol = "milliton of TNT", usename = 1, utype = "energy", scale = 4184000, default = "MJ", link = "TNT equivalent", }, ["MtTNT"] = { name2 = "megatonnes of TNT", symbol = "megatonne of TNT", usename = 1, utype = "energy", scale = 4.184e15, default = "PJ", link = "TNT equivalent", }, ["mtTNT"] = { name2 = "millitonnes of TNT", symbol = "millitonne of TNT", usename = 1, utype = "energy", scale = 4184000, default = "MJ", link = "TNT equivalent", }, ["MW.h"] = { name1 = "megawatt-hour", symbol = "MW⋅h", utype = "energy", scale = 3600000000, default = "GJ", link = "Kilowatt-hour", }, ["mW.h"] = { name1 = "milliwatt-hour", symbol = "mW⋅h", utype = "energy", scale = 3.6, default = "J", link = "Kilowatt-hour", }, ["MWh"] = { name1 = "megawatt-hour", symbol = "MWh", utype = "energy", scale = 3600000000, default = "GJ", link = "Kilowatt-hour", }, ["mWh"] = { name1 = "milliwatt-hour", symbol = "mWh", utype = "energy", scale = 3.6, default = "J", link = "Kilowatt-hour", }, ["PSh"] = { name1 = "Pferdestärkenstunde", symbol = "PSh", utype = "energy", scale = 2647795.5, default = "kWh", }, ["quad"] = { name1 = "quadrillion British thermal units", name2 = "quadrillion British thermal units", symbol = "quad", utype = "energy", scale = 1.054804e18, default = "EJ", link = "Quad (unit)", }, ["Ry"] = { name1 = "rydberg", symbol = "Ry", utype = "energy", scale = 2.1798741e-18, default = "eV", link = "Rydberg constant", }, ["scf"] = { name1 = "standard cubic foot", name2 = "standard cubic feet", symbol = "scf", utype = "energy", scale = 2869.2044809344, default = "kJ", }, ["scfoot"] = { name1 = "standard cubic foot", name2 = "standard cubic foot", symbol = "scf", utype = "energy", scale = 2869.2044809344, default = "kJ", }, ["t(TNT)"] = { name1 = "tonne", name1_us = "ton", symbol = "t", utype = "energy", scale = 4184000000, default = "GJ", link = "TNT equivalent", }, ["th"] = { name1 = "thermie", symbol = "th", utype = "energy", scale = 4186800, default = "MJ", link = "Conversion of units#Energy", }, ["thm-EC"] = { name1 = "therm (EC)", name2 = "therms (EC)", symbol = "thm (EC)", utype = "energy", scale = 105506000, default = "MJ", link = "Therm", }, ["thm-UK"] = { name1 = "therm (UK)", name2 = "therms (UK)", symbol = "thm (UK)", utype = "energy", scale = 105505585.257348, default = "MJ", link = "Therm", }, ["thm-US"] = { name1 = "therm (US)", name1_us = "therm (U.S.)", name2 = "therms (US)", name2_us = "therms (U.S.)", symbol = "thm (US)", sym_us = "thm (U.S.)", utype = "energy", scale = 105480400, default = "MJ", link = "Therm", }, ["toe"] = { name1 = "tonne of oil equivalent", name2 = "tonnes of oil equivalent", symbol = "toe", utype = "energy", scale = 41868000000, default = "GJ", }, ["tonTNT"] = { name2 = "tons of TNT", symbol = "ton of TNT", usename = 1, utype = "energy", scale = 4184000000, default = "GJ", link = "TNT equivalent", }, ["tTNT"] = { name2 = "tonnes of TNT", symbol = "tonne of TNT", usename = 1, utype = "energy", scale = 4184000000, default = "GJ", link = "TNT equivalent", }, ["TtonTNT"] = { name2 = "teratons of TNT", symbol = "teraton of TNT", usename = 1, utype = "energy", scale = 4.184e21, default = "ZJ", link = "TNT equivalent", }, ["TtTNT"] = { name2 = "teratonnes of TNT", symbol = "teratonne of TNT", usename = 1, utype = "energy", scale = 4.184e21, default = "ZJ", link = "TNT equivalent", }, ["TW.h"] = { name1 = "terawatt-hour", symbol = "TW⋅h", utype = "energy", scale = 3.6e15, default = "PJ", link = "Kilowatt-hour", }, ["TWh"] = { name1 = "terawatt-hour", symbol = "TWh", utype = "energy", scale = 3.6e15, default = "PJ", link = "Kilowatt-hour", }, ["W.h"] = { name1 = "watt-hour", symbol = "W⋅h", utype = "energy", scale = 3600, default = "kJ", link = "Kilowatt-hour", }, ["Wh"] = { name1 = "watt-hour", symbol = "Wh", utype = "energy", scale = 3600, default = "kJ", link = "Kilowatt-hour", }, ["μerg"] = { name1 = "microerg", symbol = "μerg", utype = "energy", scale = 1e-13, default = "nJ", link = "Erg", }, ["μW.h"] = { name1 = "microwatt-hour", symbol = "μW⋅h", utype = "energy", scale = 0.0036, default = "mJ", link = "Kilowatt-hour", }, ["μWh"] = { name1 = "microwatt-hour", symbol = "μWh", utype = "energy", scale = 0.0036, default = "mJ", link = "Kilowatt-hour", }, ["-kW.h"] = { target = "kW.h", link = "Kilowatt hour", }, ["btu"] = { target = "BTU", }, ["Calorie"] = { target = "Cal", }, ["ft.lbf"] = { target = "ftlbf", }, ["ft·lbf"] = { target = "ftlbf", }, ["g-cal-15"] = { target = "cal-15", }, ["g-cal-IT"] = { target = "cal-IT", }, ["g-cal-th"] = { target = "cal-th", }, ["g-kcal-15"] = { target = "kcal-15", }, ["g-kcal-IT"] = { target = "kcal-IT", }, ["g-kcal-th"] = { target = "kcal-th", }, ["g-Mcal-15"] = { target = "Mcal-15", }, ["g-mcal-15"] = { target = "mcal-15", }, ["g-Mcal-IT"] = { target = "Mcal-IT", }, ["g-mcal-IT"] = { target = "mcal-IT", }, ["g-Mcal-th"] = { target = "Mcal-th", }, ["g-mcal-th"] = { target = "mcal-th", }, ["GW-h"] = { target = "GW.h", }, ["GW·h"] = { target = "GW.h", }, ["Hartree"] = { target = "Eh", }, ["hp.h"] = { target = "hph", }, ["in.lb-f"] = { target = "inlb-f", }, ["in.lbf"] = { target = "inlbf", }, ["in.oz-f"] = { target = "inoz-f", }, ["in.ozf"] = { target = "inozf", }, ["kbboe"] = { target = "kBOE", symbol = "kbboe", }, ["kg-cal-15"] = { target = "Cal-15", }, ["kg-cal-IT"] = { target = "Cal-IT", }, ["kg-cal-th"] = { target = "Cal-th", }, ["kW-h"] = { target = "kW.h", }, ["kW·h"] = { target = "kW.h", }, ["MW-h"] = { target = "MW.h", }, ["mW-h"] = { target = "mW.h", }, ["MW·h"] = { target = "MW.h", }, ["TW-h"] = { target = "TW.h", }, ["uerg"] = { target = "μerg", }, ["uW-h"] = { target = "μW.h", }, ["uW.h"] = { target = "μW.h", }, ["uWh"] = { target = "μWh", }, ["W-h"] = { target = "W.h", }, ["eVpar"] = { _name1 = "electronvolt", _symbol = "eV", utype = "energy per chemical amount", scale = 96485.332123310014, prefixes = 1, default = "kcal/mol", defkey = "eVpar", linkey = "eVpar", link = "Electronvolt", }, ["kcal/mol"] = { per = { "kcal", "mol" }, utype = "energy per chemical amount", default = "kJ/mol", link = "Kilocalorie per mole", }, ["kJ/mol"] = { per = { "kJ", "mol" }, utype = "energy per chemical amount", default = "kcal/mol", link = "Joule per mole", }, ["kWh/100 km"] = { name1 = "kilowatt-hour per 100 kilometres", name1_us = "kilowatt-hour per 100 kilometers", name2 = "kilowatt-hours per 100 kilometres", name2_us = "kilowatt-hours per 100 kilometers", symbol = "kW⋅h/100&nbsp;km", utype = "energy per unit length", scale = 36, default = "MJ/km kWh/mi", link = "Kilowatt-hour", }, ["kWh/100 mi"] = { name1 = "kilowatt-hour per 100 miles", name2 = "kilowatt-hours per 100 miles", symbol = "kW⋅h/100&nbsp;mi", utype = "energy per unit length", scale = 22.3694, default = "mpge", link = "Miles per gallon gasoline equivalent", }, ["MJ/100 km"] = { name1 = "megajoule per 100 kilometres", name1_us = "megajoule per 100 kilometers", name2 = "megajoules per 100 kilometres", name2_us = "megajoules per 100 kilometers", symbol = "MJ/100&nbsp;km", utype = "energy per unit length", scale = 10, default = "BTU/mi", link = "British thermal unit", }, ["mpge"] = { name1 = "mile per gallon gasoline equivalent", name2 = "miles per gallon gasoline equivalent", symbol = "mpg&#8209;e", utype = "energy per unit length", scale = 1.3263314048360777e-5, invert = -1, iscomplex= true, default = "kWh/100 mi", link = "Miles per gallon gasoline equivalent", }, ["BTU/mi"] = { per = { "BTU", "mi" }, utype = "energy per unit length", default = "v > 1525 ! M ! k ! J/km", }, ["kJ/km"] = { per = { "kJ", "km" }, utype = "energy per unit length", default = "BTU/mi", }, ["kWh/km"] = { per = { "-kW.h", "km" }, utype = "energy per unit length", default = "MJ/km kWh/mi", }, ["kWh/mi"] = { per = { "-kW.h", "mi" }, utype = "energy per unit length", default = "kWh/km MJ/km", }, ["MJ/km"] = { per = { "MJ", "km" }, utype = "energy per unit length", default = "BTU/mi", }, ["mpg-e"] = { target = "mpge", }, ["BTU/lb"] = { name1 = "British thermal unit per pound", name2 = "British thermal units per pound", symbol = "BTU/lb", utype = "energy per unit mass", scale = 2326, default = "kJ/kg", link = "British thermal unit", }, ["cal/g"] = { name1 = "calorie per gram", name2 = "calories per gram", symbol = "cal/g", utype = "energy per unit mass", scale = 4184, default = "J/g", }, ["GJ/kg"] = { name1 = "gigajoule per kilogram", name2 = "gigajoules per kilogram", symbol = "GJ/kg", utype = "energy per unit mass", scale = 1e9, default = "ktTNT/t", link = "Specific energy", }, ["J/g"] = { name1 = "joule per gram", name2 = "joules per gram", symbol = "J/g", utype = "energy per unit mass", scale = 1000, default = "kcal/g", link = "Specific energy", }, ["kcal/g"] = { name1 = "kilocalorie per gram", name2 = "kilocalories per gram", symbol = "kcal/g", utype = "energy per unit mass", scale = 4184000, default = "kJ/g", }, ["kJ/g"] = { name1 = "kilojoule per gram", name2 = "kilojoules per gram", symbol = "kJ/g", utype = "energy per unit mass", scale = 1000000, default = "kcal/g", link = "Specific energy", }, ["kJ/kg"] = { name1 = "kilojoule per kilogram", name2 = "kilojoules per kilogram", symbol = "kJ/kg", utype = "energy per unit mass", scale = 1000, default = "BTU/lb", link = "Specific energy", }, ["ktonTNT/MT"] = { name2 = "kilotons of TNT per metric ton", symbol = "kiloton of TNT per metric ton", usename = 1, utype = "energy per unit mass", scale = 4184000000, default = "GJ/kg", link = "TNT equivalent", }, ["ktTNT/t"] = { name2 = "kilotonnes of TNT per tonne", symbol = "kilotonne of TNT per tonne", usename = 1, utype = "energy per unit mass", scale = 4184000000, default = "GJ/kg", link = "TNT equivalent", }, ["MtonTNT/MT"] = { name2 = "megatons of TNT per metric ton", symbol = "megaton of TNT per metric ton", usename = 1, utype = "energy per unit mass", scale = 4.184e12, default = "TJ/kg", link = "TNT equivalent", }, ["MtTNT/MT"] = { name2 = "megatonnes of TNT per tonne", symbol = "megatonne of TNT per tonne", usename = 1, utype = "energy per unit mass", scale = 4.184e12, default = "TJ/kg", link = "TNT equivalent", }, ["TJ/kg"] = { name1 = "terajoule per kilogram", name2 = "terajoules per kilogram", symbol = "TJ/kg", utype = "energy per unit mass", scale = 1e12, default = "MtTNT/MT", link = "Specific energy", }, ["Cal/g"] = { per = { "Cal", "g" }, utype = "energy per unit mass", default = "kJ/g", }, ["BTU/cuft"] = { per = { "BTU", "cuft" }, utype = "energy per unit volume", default = "kJ/L", }, ["Cal/12USoz(mL)serve"] = { per = { "Cal", "-12USoz(mL)serve" }, utype = "energy per unit volume", default = "kJ/L", }, ["Cal/12USoz(ml)serve"] = { per = { "Cal", "-12USoz(ml)serve" }, utype = "energy per unit volume", default = "kJ/l", }, ["Cal/12USozserve"] = { per = { "Cal", "-12USozserve" }, utype = "energy per unit volume", default = "kJ/L", }, ["Cal/USoz"] = { per = { "Cal", "USoz" }, utype = "energy per unit volume", default = "kJ/ml", }, ["kJ/L"] = { per = { "kJ", "L" }, utype = "energy per unit volume", default = "BTU/cuft", }, ["kJ/l"] = { per = { "kJ", "ll" }, utype = "energy per unit volume", default = "BTU/cuft", }, ["kJ/ml"] = { per = { "kJ", "ml" }, utype = "energy per unit volume", default = "Cal/USoz", }, ["MJ/m3"] = { per = { "MJ", "m3" }, utype = "energy per unit volume", default = "BTU/cuft", }, ["Sv"] = { _name1 = "sievert", _symbol = "Sv", utype = "equivalent radiation dose", scale = 1, prefixes = 1, default = "rem", link = "Sievert", }, ["rem"] = { _name1 = "rem", _symbol = "rem", utype = "equivalent radiation dose", scale = 0.01, prefixes = 1, default = "Sv", link = "Roentgen equivalent man", }, ["g/km"] = { name1 = "gram per kilometre", name1_us = "gram per kilometer", name2 = "grams per kilometre", name2_us = "grams per kilometer", symbol = "g/km", utype = "exhaust emission", scale = 1e-6, default = "oz/mi", link = "Exhaust gas", }, ["g/mi"] = { name1 = "gram per mile", name2 = "grams per mile", symbol = "g/mi", utype = "exhaust emission", scale = 6.2137119223733397e-7, default = "g/km", link = "Exhaust gas", }, ["gCO2/km"] = { name1 = "gram of CO<sub>2</sub> per kilometre", name1_us = "gram of CO<sub>2</sub> per kilometer", name2 = "grams of CO<sub>2</sub> per kilometre", name2_us = "grams of CO<sub>2</sub> per kilometer", symbol = "g(CO<sub>2</sub>)/km", utype = "exhaust emission", scale = 1e-6, default = "ozCO2/mi", link = "Exhaust gas", }, ["gCO2/mi"] = { name1 = "gram of CO<sub>2</sub> per mile", name2 = "grams of CO<sub>2</sub> per mile", symbol = "g(CO<sub>2</sub>)/mi", utype = "exhaust emission", scale = 6.2137119223733397e-7, default = "gCO2/km", link = "Exhaust gas", }, ["kg/km"] = { name1 = "kilogram per kilometre", name1_us = "kilogram per kilometer", name2 = "kilograms per kilometre", name2_us = "kilograms per kilometer", symbol = "kg/km", utype = "exhaust emission", scale = 0.001, default = "lb/mi", link = "Exhaust gas", }, ["kgCO2/km"] = { name1 = "kilogram of CO<sub>2</sub> per kilometre", name1_us = "kilogram of CO<sub>2</sub> per kilometer", name2 = "kilograms of CO<sub>2</sub> per kilometre", name2_us = "kilograms of CO<sub>2</sub> per kilometer", symbol = "kg(CO<sub>2</sub>)/km", utype = "exhaust emission", scale = 0.001, default = "lbCO2/mi", link = "Exhaust gas", }, ["lb/mi"] = { name1 = "pound per mile", name2 = "pounds per mile", symbol = "lb/mi", utype = "exhaust emission", scale = 0.00028184923173665794, default = "kg/km", link = "Exhaust gas", }, ["lbCO2/mi"] = { name1 = "pound of CO<sub>2</sub> per mile", name2 = "pounds of CO<sub>2</sub> per mile", symbol = "lb(CO<sub>2</sub>)/mi", utype = "exhaust emission", scale = 0.00028184923173665794, default = "kgCO2/km", link = "Exhaust gas", }, ["oz/mi"] = { name1 = "ounce per mile", name2 = "ounces per mile", symbol = "oz/mi", utype = "exhaust emission", scale = 1.7615576983541121e-5, default = "g/km", link = "Exhaust gas", }, ["ozCO2/mi"] = { name1 = "ounce of CO<sub>2</sub> per mile", name2 = "ounces of CO<sub>2</sub> per mile", symbol = "oz(CO<sub>2</sub>)/mi", utype = "exhaust emission", scale = 1.7615576983541121e-5, default = "gCO2/km", link = "Exhaust gas", }, ["cuft/a"] = { name1 = "cubic foot per annum", name2 = "cubic feet per annum", symbol = "cu&nbsp;ft/a", utype = "flow", scale = 8.9730672142368242e-10, default = "m3/a", link = "Cubic foot per second", }, ["cuft/d"] = { name1 = "cubic foot per day", name2 = "cubic feet per day", symbol = "cu&nbsp;ft/d", utype = "flow", scale = 3.2774128000000003e-7, default = "m3/d", link = "Cubic foot per second", }, ["cuft/h"] = { name1 = "cubic foot per hour", name2 = "cubic feet per hour", symbol = "cu&nbsp;ft/h", utype = "flow", scale = 7.8657907200000004e-6, default = "m3/h", link = "Cubic foot per second", }, ["cuft/min"] = { name1 = "cubic foot per minute", name2 = "cubic feet per minute", symbol = "cu&nbsp;ft/min", utype = "flow", scale = 0.00047194744319999999, default = "m3/min", }, ["cuft/s"] = { name1 = "cubic foot per second", name2 = "cubic feet per second", symbol = "cu&nbsp;ft/s", utype = "flow", scale = 28316846592e-12, default = "m3/s", }, ["cumi/a"] = { name1 = "cubic mile per annum", name2 = "cubic miles per annum", symbol = "cu&nbsp;mi/a", utype = "flow", scale = 132.08171170940057, default = "km3/a", link = "Cubic foot per second", }, ["cuyd/h"] = { name1 = "cubic yard per hour", name2 = "cubic yards per hour", symbol = "cuyd/h", utype = "flow", scale = 0.00021237634944000001, default = "m3/h", link = "Cubic foot per second", }, ["cuyd/s"] = { name1 = "cubic yard per second", name2 = "cubic yards per second", symbol = "cu&nbsp;yd/s", utype = "flow", scale = 0.76455485798400002, default = "m3/s", }, ["Goilbbl/a"] = { name1 = "billion barrels per year", name2 = "billion barrels per year", symbol = "Gbbl/a", utype = "flow", scale = 5.0380033629933836, default = "v * 1.58987294928 < 10 ! e6 ! e9 ! m3/a", link = "Barrel per day", }, ["impgal/h"] = { name1 = "imperial gallon per hour", name2 = "imperial gallons per hour", symbol = "imp&nbsp;gal/h", utype = "flow", scale = 1.2628027777777779e-6, default = "m3/h", link = "Gallon", }, ["impgal/min"] = { name1 = "imperial gallon per minute", name2 = "imperial gallons per minute", symbol = "imp gal/min", utype = "flow", scale = 7.5768166666666671e-5, default = "m3/s", link = "Gallon", }, ["impgal/s"] = { name1 = "imperial gallon per second", name2 = "imperial gallons per second", symbol = "impgal/s", utype = "flow", scale = 0.00454609, default = "m3/s", link = "Imperial gallons per second", }, ["km3/a"] = { name1 = "cubic kilometre per annum", name1_us = "cubic kilometer per annum", name2 = "cubic kilometres per annum", name2_us = "cubic kilometers per annum", symbol = "km<sup>3</sup>/a", utype = "flow", scale = 31.68808781402895, default = "cumi/a", link = "Cubic metre per second", }, ["km3/d"] = { name1 = "cubic kilometre per day", name1_us = "cubic kilometer per day", name2 = "cubic kilometres per day", name2_us = "cubic kilometers per day", symbol = "km<sup>3</sup>/d", utype = "flow", scale = 11574.074074074075, default = "cuft/d", link = "Cubic metre per second", }, ["koilbbl/a"] = { name1 = "thousand barrels per year", name2 = "thousand barrels per year", symbol = "kbbl/a", utype = "flow", scale = 5.0380033629933841e-6, default = "v * 1.58987294928 < 10 ! ! e3 ! m3/a", link = "Barrel per day", }, ["koilbbl/d"] = { name1 = "thousand barrels per day", name2 = "thousand barrels per day", symbol = "kbbl/d", utype = "flow", scale = 0.0018401307283333335, default = "v * 1.58987294928 < 10 ! ! e3 ! m3/d", link = "Barrel per day", }, ["L/h"] = { name1 = "litre per hour", name1_us = "liter per hour", name2 = "litres per hour", name2_us = "liters per hour", symbol = "L/h", utype = "flow", scale = 2.7777777777777776e-7, default = "impgal/h USgal/h", link = "Cubic metre per second", }, ["L/min"] = { name1 = "litre per minute", name1_us = "liter per minute", name2 = "litres per minute", name2_us = "liters per minute", symbol = "L/min", utype = "flow", scale = 1.6666666666666667e-5, default = "impgal/min USgal/min", link = "Cubic metre per second", }, ["L/s"] = { name1 = "litre per second", name1_us = "liter per second", name2 = "litres per second", name2_us = "liters per second", symbol = "L/s", utype = "flow", scale = 0.001, default = "cuft/s", link = "Cubic metre per second", }, ["m3/a"] = { name1 = "cubic metre per annum", name1_us = "cubic meter per annum", name2 = "cubic metres per annum", name2_us = "cubic meters per annum", symbol = "m<sup>3</sup>/a", utype = "flow", scale = 3.1688087814028947e-8, default = "cuft/a", link = "Cubic metre per second", }, ["m3/d"] = { name1 = "cubic metre per day", name1_us = "cubic meter per day", name2 = "cubic metres per day", name2_us = "cubic meters per day", symbol = "m<sup>3</sup>/d", utype = "flow", scale = 1.1574074074074073e-5, default = "cuft/d", link = "Cubic metre per second", }, ["m3/h"] = { name1 = "cubic metre per hour", name1_us = "cubic meter per hour", name2 = "cubic metres per hour", name2_us = "cubic meters per hour", symbol = "m<sup>3</sup>/h", utype = "flow", scale = 0.00027777777777777778, default = "cuft/h", link = "Cubic metre per second", }, ["m3/min"] = { name1 = "cubic metre per minute", name1_us = "cubic meter per minute", name2 = "cubic metres per minute", name2_us = "cubic meters per minute", symbol = "m<sup>3</sup>/min", utype = "flow", scale = 0.016666666666666666, default = "cuft/min", link = "Cubic metre per second", }, ["m3/s"] = { name1 = "cubic metre per second", name1_us = "cubic meter per second", name2 = "cubic metres per second", name2_us = "cubic meters per second", symbol = "m<sup>3</sup>/s", utype = "flow", scale = 1, default = "cuft/s", }, ["Moilbbl/a"] = { name1 = "million barrels per year", name2 = "million barrels per year", symbol = "Mbbl/a", utype = "flow", scale = 0.0050380033629933837, default = "v * 1.58987294928 < 10 ! e3 ! e6 ! m3/a", link = "Barrel per day", }, ["Moilbbl/d"] = { name1 = "million barrels per day", name2 = "million barrels per day", symbol = "Mbbl/d", utype = "flow", scale = 1.8401307283333335, default = "v * 1.58987294928 < 10 ! e3 ! e6 ! m3/d", link = "Barrel per day", }, ["oilbbl/a"] = { name1 = "barrel per year", name2 = "barrels per year", symbol = "bbl/a", utype = "flow", scale = 5.0380033629933841e-9, default = "m3/a", link = "Barrel per day", }, ["oilbbl/d"] = { name1 = "barrel per day", name2 = "barrels per day", symbol = "bbl/d", utype = "flow", scale = 1.8401307283333336e-6, default = "m3/d", }, ["Toilbbl/a"] = { name1 = "trillion barrels per year", name2 = "trillion barrels per year", symbol = "Tbbl/a", utype = "flow", scale = 5038.0033629933832, default = "v * 1.58987294928 < 10 ! e9 ! e12 ! m3/a", link = "Barrel per day", }, ["U.S.gal/d"] = { name1 = "U.S. gallon per day", name2 = "U.S. gallons per day", symbol = "U.S.&nbsp;gal/d", utype = "flow", scale = 4.3812636388888893e-8, default = "m3/s", customary= 1, }, ["U.S.gal/h"] = { name1 = "gallon per hour", name2 = "gallons per hour", symbol = "gal/h", utype = "flow", scale = 1.0515032733333334e-6, default = "m3/h", link = "Gallon", customary= 2, }, ["U.S.gal/min"] = { name1 = "U.S. gallon per minute", name2 = "U.S. gallons per minute", symbol = "U.S.&nbsp;gal/min", utype = "flow", scale = 6.3090196400000003e-5, default = "m3/s", link = "Gallon", }, ["USgal/a"] = { name1 = "US gallon per year", name2 = "US gallons per year", symbol = "US&nbsp;gal/a", utype = "flow", scale = 1.1995246102365199e-10, default = "m3/s", }, ["USgal/d"] = { name1 = "US gallon per day", name2 = "US gallons per day", symbol = "US&nbsp;gal/d", utype = "flow", scale = 4.3812636388888893e-8, default = "m3/s", }, ["USgal/h"] = { name1 = "gallon per hour", name2 = "gallons per hour", symbol = "gal/h", utype = "flow", scale = 1.0515032733333334e-6, default = "m3/h", link = "Gallon", customary= 1, }, ["USgal/min"] = { name1 = "US gallon per minute", name2 = "US gallons per minute", symbol = "US&nbsp;gal/min", utype = "flow", scale = 6.3090196400000003e-5, default = "m3/s", link = "Gallon", }, ["USgal/s"] = { name1 = "US gallon per second", name1_us = "U.S. gallon per second", name2 = "US gallons per second", name2_us = "U.S. gallons per second", symbol = "USgal/s", utype = "flow", scale = 0.003785411784, default = "m3/s", link = "US gallons per second", }, ["ft3/a"] = { target = "cuft/a", }, ["ft3/d"] = { target = "cuft/d", }, ["ft3/h"] = { target = "cuft/h", }, ["ft3/s"] = { target = "cuft/s", }, ["Gcuft/a"] = { target = "e9cuft/a", }, ["Gcuft/d"] = { target = "e9cuft/d", }, ["kcuft/a"] = { target = "e3cuft/a", }, ["kcuft/d"] = { target = "e3cuft/d", }, ["kcuft/s"] = { target = "e3cuft/s", }, ["Mcuft/a"] = { target = "e6cuft/a", }, ["Mcuft/d"] = { target = "e6cuft/d", }, ["Mcuft/s"] = { target = "e6cuft/s", }, ["m³/s"] = { target = "m3/s", }, ["Tcuft/a"] = { target = "e12cuft/a", }, ["Tcuft/d"] = { target = "e12cuft/d", }, ["u.s.gal/min"] = { target = "U.S.gal/min", }, ["usgal/min"] = { target = "USgal/min", }, ["-LTf"] = { name1 = "long ton-force", name2 = "long tons-force", symbol = "LTf", utype = "force", scale = 9964.01641818352, default = "kN", }, ["-STf"] = { name1 = "short ton-force", name2 = "short tons-force", symbol = "STf", utype = "force", scale = 8896.443230521, default = "kN", }, ["dyn"] = { name1 = "dyne", symbol = "dyn", utype = "force", scale = 0.00001, default = "gr-f", }, ["g-f"] = { name1 = "gram-force", name2 = "grams-force", symbol = "g<sub>f</sub>", utype = "force", scale = 0.00980665, default = "mN oz-f", link = "Kilogram-force", }, ["gf"] = { name1 = "gram-force", name2 = "grams-force", symbol = "gf", utype = "force", scale = 0.00980665, default = "mN ozf", link = "Kilogram-force", }, ["gr-f"] = { name1 = "grain-force", name2 = "grains-force", symbol = "gr<sub>f</sub>", utype = "force", scale = 0.0006354602307515, default = "μN", link = "Pound (force)", }, ["grf"] = { name1 = "grain-force", name2 = "grains-force", symbol = "grf", utype = "force", scale = 0.0006354602307515, default = "μN", link = "Pound (force)", }, ["kdyn"] = { name1 = "kilodyne", symbol = "kdyn", utype = "force", scale = 0.01, default = "oz-f", link = "Dyne", }, ["kg-f"] = { name1 = "kilogram-force", name2 = "kilograms-force", symbol = "kg<sub>f</sub>", utype = "force", scale = 9.80665, default = "N lb-f", }, ["kgf"] = { name1 = "kilogram-force", name2 = "kilograms-force", symbol = "kgf", utype = "force", scale = 9.80665, default = "N lbf", }, ["kp"] = { name1 = "kilopond", symbol = "kp", utype = "force", scale = 9.80665, default = "N lb-f", link = "Kilogram-force", }, ["L/T-f"] = { name1 = "long ton-force", name2 = "long tons-force", symbol = "L/T<sub>f</sub>", utype = "force", scale = 9964.01641818352, default = "kN", }, ["L/Tf"] = { name1 = "long ton-force", name2 = "long tons-force", symbol = "L/Tf", utype = "force", scale = 9964.01641818352, default = "kN", }, ["lb-f"] = { name1 = "pound-force", name2 = "pounds-force", symbol = "lb<sub>f</sub>", utype = "force", scale = 4.4482216152605, default = "N", link = "Pound (force)", }, ["lbf"] = { name1 = "pound-force", name2 = "pounds-force", symbol = "lbf", utype = "force", scale = 4.4482216152605, default = "N", link = "Pound (force)", }, ["lb(f)"] = { name1 = "pound", symbol = "lb", utype = "force", scale = 4.4482216152605, default = "N", link = "Pound (force)", }, ["LT-f"] = { name1 = "long ton-force", name2 = "long tons-force", symbol = "LT<sub>f</sub>", utype = "force", scale = 9964.01641818352, default = "kN", }, ["LTf"] = { name1 = "long ton-force", name2 = "long tons-force", symbol = "LTf", usename = 1, utype = "force", scale = 9964.01641818352, default = "kN", }, ["Mdyn"] = { name1 = "megadyne", symbol = "Mdyn", utype = "force", scale = 10, default = "lb-f", link = "Dyne", }, ["mdyn"] = { name1 = "millidyne", symbol = "mdyn", utype = "force", scale = 0.00000001, default = "gr-f", link = "Dyne", }, ["mg-f"] = { name1 = "milligram-force", name2 = "milligrams-force", symbol = "mg<sub>f</sub>", utype = "force", scale = 0.00000980665, default = "μN gr-f", link = "Kilogram-force", }, ["mgf"] = { name1 = "milligram-force", name2 = "milligrams-force", symbol = "mgf", utype = "force", scale = 0.00000980665, default = "μN grf", link = "Kilogram-force", }, ["Mp"] = { name1 = "megapond", symbol = "Mp", utype = "force", scale = 9806.65, default = "kN LT-f ST-f", link = "Kilogram-force", }, ["mp"] = { name1 = "millipond", symbol = "mp", utype = "force", scale = 0.00000980665, default = "μN gr-f", link = "Kilogram-force", }, ["N"] = { _name1 = "newton", _symbol = "N", utype = "force", scale = 1, prefixes = 1, default = "lb-f", link = "Newton (unit)", }, ["oz-f"] = { name1 = "ounce-force", name2 = "ounces-force", symbol = "oz<sub>f</sub>", utype = "force", scale = 0.2780138203095378125, default = "mN", link = "Pound (force)", }, ["ozf"] = { name1 = "ounce-force", name2 = "ounces-force", symbol = "ozf", utype = "force", scale = 0.2780138203095378125, default = "mN", link = "Pound (force)", }, ["p"] = { name1 = "pond", symbol = "p", utype = "force", scale = 0.00980665, default = "mN oz-f", link = "Kilogram-force", }, ["pdl"] = { name1 = "poundal", symbol = "pdl", utype = "force", scale = 0.138254954376, default = "N", }, ["S/T-f"] = { name1 = "short ton-force", name2 = "short tons-force", symbol = "S/T<sub>f</sub>", utype = "force", scale = 8896.443230521, default = "kN", }, ["S/Tf"] = { name1 = "short ton-force", name2 = "short tons-force", symbol = "S/Tf", utype = "force", scale = 8896.443230521, default = "kN", }, ["ST-f"] = { name1 = "short ton-force", name2 = "short tons-force", symbol = "ST<sub>f</sub>", utype = "force", scale = 8896.443230521, default = "kN", }, ["STf"] = { name1 = "short ton-force", name2 = "short tons-force", symbol = "STf", usename = 1, utype = "force", scale = 8896.443230521, default = "kN", }, ["t-f"] = { name1 = "tonne-force", name2 = "tonnes-force", symbol = "t<sub>f</sub>", utype = "force", scale = 9806.65, default = "kN LT-f ST-f", link = "Ton-force#Tonne-force", }, ["tf"] = { name1 = "tonne-force", name2 = "tonnes-force", symbol = "tf", utype = "force", scale = 9806.65, default = "kN LTf STf", link = "Ton-force#Tonne-force", }, ["dyne"] = { target = "dyn", }, ["newtons"] = { target = "N", }, ["poundal"] = { target = "pdl", }, ["tonne-force"] = { target = "tf", }, ["impgal/mi"] = { per = { "@impgal", "mi" }, utype = "fuel efficiency", invert = 1, iscomplex= true, default = "L/km USgal/mi", }, ["km/L"] = { per = { "km", "L" }, utype = "fuel efficiency", invert = -1, iscomplex= true, default = "mpgimp mpgus", }, ["km/l"] = { per = { "km", "ll" }, utype = "fuel efficiency", invert = -1, iscomplex= true, default = "mpgimp mpgus", }, ["L/100 km"] = { per = { "L", "100km" }, utype = "fuel efficiency", invert = 1, iscomplex= true, default = "mpgimp mpgus", symlink = "[[Fuel economy in automobiles#Units of measure|L/100&nbsp;km]]", }, ["l/100 km"] = { per = { "ll", "100km" }, utype = "fuel efficiency", invert = 1, iscomplex= true, default = "mpgimp mpgus", symlink = "[[Fuel economy in automobiles#Units of measure|l/100&nbsp;km]]", }, ["L/km"] = { per = { "L", "km" }, utype = "fuel efficiency", invert = 1, iscomplex= true, default = "mpgimp mpgus", }, ["l/km"] = { per = { "ll", "km" }, utype = "fuel efficiency", invert = 1, iscomplex= true, default = "mpgimp mpgus", }, ["mi/impqt"] = { per = { "mi", "impqt" }, utype = "fuel efficiency", invert = -1, iscomplex= true, default = "km/L", }, ["mi/U.S.qt"] = { per = { "mi", "U.S.qt" }, utype = "fuel efficiency", invert = -1, iscomplex= true, default = "km/L", }, ["mi/USqt"] = { per = { "mi", "USqt" }, utype = "fuel efficiency", invert = -1, iscomplex= true, default = "km/L", }, ["mi/usqt"] = { per = { "mi", "usqt" }, utype = "fuel efficiency", invert = -1, iscomplex= true, default = "km/L", }, ["mpgimp"] = { per = { "mi", "@impgal" }, symbol = "mpg<sub>&#8209;imp</sub>", utype = "fuel efficiency", invert = -1, iscomplex= true, default = "L/100 km+mpgus", symlink = "[[Fuel economy in automobiles#Units of measure|mpg]]<sub>&#8209;[[Imperial units|imp]]</sub>", }, ["mpgus"] = { per = { "mi", "+USgal" }, symbol = "mpg<sub>&#8209;US</sub>", utype = "fuel efficiency", invert = -1, iscomplex= true, default = "L/100 km+mpgimp", symlink = "[[Fuel economy in automobiles#Units of measure|mpg]]<sub>&#8209;[[United States customary units|US]]</sub>", }, ["U.S.gal/mi"] = { per = { "*U.S.gal", "mi" }, sp_us = true, utype = "fuel efficiency", invert = 1, iscomplex= true, default = "L/km impgal/mi", }, ["usgal/mi"] = { per = { "+USgal", "mi" }, utype = "fuel efficiency", invert = 1, iscomplex= true, default = "L/km impgal/mi", }, ["L/100km"] = { target = "L/100 km", }, ["l/100km"] = { target = "l/100 km", }, ["mpg"] = { shouldbe = "Use %{mpgus%} for miles per US gallon or %{mpgimp%} for miles per imperial gallon (not %{mpg%})", }, ["mpgU.S."] = { target = "mpgus", symbol = "mpg<sub>&#8209;U.S.</sub>", sp_us = true, symlink = "[[Fuel economy in automobiles#Units of measure|mpg]]<sub>&#8209;[[United States customary units|U.S.]]</sub>", }, ["mpgu.s."] = { target = "mpgus", symbol = "mpg<sub>&#8209;U.S.</sub>", sp_us = true, symlink = "[[Fuel economy in automobiles#Units of measure|mpg]]<sub>&#8209;[[United States customary units|U.S.]]</sub>", }, ["mpgUS"] = { target = "mpgus", }, ["USgal/mi"] = { target = "usgal/mi", }, ["kPa/m"] = { per = { "kPa", "-m-frac" }, utype = "fracture gradient", default = "psi/ft", }, ["psi/ft"] = { per = { "psi", "-ft-frac" }, utype = "fracture gradient", default = "kPa/m", }, ["cm/km"] = { name1 = "centimetre per kilometre", name1_us = "centimeter per kilometer", name2 = "centimetres per kilometre", name2_us = "centimeters per kilometer", symbol = "cm/km", utype = "gradient", scale = 0.00001, default = "ft/mi", link = "Grade (slope)", }, ["ft/mi"] = { name1 = "foot per mile", name2 = "feet per mile", symbol = "ft/mi", utype = "gradient", scale = 0.00018939393939393939, default = "v < 5.28 ! c ! ! m/km", link = "Grade (slope)", }, ["ft/nmi"] = { name1 = "foot per nautical mile", name2 = "feet per nautical mile", symbol = "ft/nmi", utype = "gradient", scale = 0.00016457883369330455, default = "v < 6.076 ! c ! ! m/km", link = "Grade (slope)", }, ["in/ft"] = { name1 = "inch per foot", name2 = "inches per foot", symbol = "in/ft", utype = "gradient", scale = 0.083333333333333329, default = "mm/m", link = "Grade (slope)", }, ["in/mi"] = { name1 = "inch per mile", name2 = "inches per mile", symbol = "in/mi", utype = "gradient", scale = 1.5782828282828283e-5, default = "v < 0.6336 ! m ! c ! m/km", link = "Grade (slope)", }, ["m/km"] = { name1 = "metre per kilometre", name1_us = "meter per kilometer", name2 = "metres per kilometre", name2_us = "meters per kilometer", symbol = "m/km", utype = "gradient", scale = 0.001, default = "ft/mi", link = "Grade (slope)", }, ["mm/km"] = { name1 = "millimetre per kilometre", name1_us = "millimeter per kilometer", name2 = "millimetres per kilometre", name2_us = "millimeters per kilometer", symbol = "mm/km", utype = "gradient", scale = 0.000001, default = "in/mi", link = "Grade (slope)", }, ["mm/m"] = { name1 = "millimetre per metre", name1_us = "millimeter per meter", name2 = "millimetres per metre", name2_us = "millimeters per meter", symbol = "mm/m", utype = "gradient", scale = 0.001, default = "in/ft", link = "Grade (slope)", }, ["admi"] = { name1 = "admiralty mile", symbol = "nmi&nbsp;(admiralty)", utype = "length", scale = 1853.184, default = "km mi", link = "Nautical mile", }, ["AU"] = { name1 = "astronomical unit", symbol = "AU", utype = "length", scale = 149597870700, default = "km mi", }, ["Brnmi"] = { name1 = "British nautical mile", symbol = "(Brit)&nbsp;nmi", utype = "length", scale = 1853.184, default = "km mi", link = "Nautical mile", }, ["bu"] = { name2 = "bu", symbol = "bu", usename = 1, utype = "length", scale = 0.0030303030303030303, default = "mm", link = "Japanese units of measurement#Length", }, ["ch"] = { name1 = "chain", symbol = "ch", utype = "length", scale = 20.1168, default = "ft m", subdivs = { ["ft"] = { 66, default = "m" }, ["yd"] = { 22, default = "m" } }, link = "Chain (unit)", }, ["chlk"] = { name1 = "[[Chain (unit)|chain]]", symbol = "[[Chain (unit)|ch]]", utype = "length", scale = 20.1168, default = "ft m", link = "", }, ["chain"] = { symbol = "chain", usename = 1, utype = "length", scale = 20.1168, default = "ft m", subdivs = { ["ft"] = { 66, default = "m" }, ["yd"] = { 22, default = "m" } }, link = "Chain (unit)", }, ["chainlk"] = { symbol = "[[Chain (unit)|chain]]", usename = 1, utype = "length", scale = 20.1168, default = "ft m", link = "", }, ["dpcm"] = { name2 = "dot/cm", symbol = "dot/cm", utype = "length", scale = 100, invert = -1, iscomplex= true, default = "dpi", link = "Dots per inch", }, ["dpi"] = { name2 = "DPI", symbol = "DPI", utype = "length", scale = 39.370078740157481, invert = -1, iscomplex= true, default = "pitch", link = "Dots per inch", }, ["fathom"] = { symbol = "fathom", usename = 1, utype = "length", scale = 1.8288, default = "ft m", }, ["foot"] = { name1 = "foot", name2 = "foot", symbol = "ft", utype = "length", scale = 0.3048, default = "m", subdivs = { ["in"] = { 12, default = "m" } }, link = "Foot (unit)", }, ["ft"] = { name1 = "foot", name2 = "feet", symbol = "ft", utype = "length", scale = 0.3048, exception= "integer_more_precision", default = "m", subdivs = { ["in"] = { 12, default = "m" } }, link = "Foot (unit)", }, ["furlong"] = { symbol = "furlong", usename = 1, utype = "length", scale = 201.168, default = "ft m", }, ["Gly"] = { name1 = "gigalight-year", symbol = "Gly", utype = "length", scale = 9.4607304725808e24, default = "Mpc", link = "Light-year#Definitions", }, ["Gpc"] = { name1 = "gigaparsec", symbol = "Gpc", utype = "length", scale = 3.0856775814671916e25, default = "Gly", link = "Parsec#Megaparsecs and gigaparsecs", }, ["hand"] = { name1 = "hand", symbol = "h", utype = "length", builtin = "hand", scale = 0.1016, iscomplex= true, default = "in cm", link = "Hand (unit)", }, ["in"] = { name1 = "inch", name2 = "inches", symbol = "in", utype = "length", scale = 0.0254, exception= "subunit_more_precision", default = "mm", }, ["inabbreviated"] = { name2 = "in", symbol = "in", utype = "length", scale = 0.0254, default = "mm", link = "Inch", }, ["kly"] = { name1 = "kilolight-year", symbol = "kly", utype = "length", scale = 9.4607304725808e18, default = "pc", link = "Light-year#Definitions", }, ["kpc"] = { name1 = "kiloparsec", symbol = "kpc", utype = "length", scale = 3.0856775814671916e19, default = "kly", link = "Parsec#Parsecs and kiloparsecs", }, ["LD"] = { name1 = "lunar distance", symbol = "LD", utype = "length", scale = 384403000, default = "km mi", link = "Lunar distance (astronomy)", }, ["league"] = { symbol = "league", usename = 1, utype = "length", scale = 4828.032, default = "km", link = "League (unit)", }, ["ly"] = { name1 = "light-year", symbol = "ly", utype = "length", scale = 9.4607304725808e15, default = "AU", }, ["m"] = { _name1 = "metre", _name1_us= "meter", _symbol = "m", utype = "length", scale = 1, prefixes = 1, default = "v > 0 and v < 3 ! ftin ! ft", link = "Metre", }, ["mi"] = { name1 = "mile", symbol = "mi", utype = "length", scale = 1609.344, default = "km", subdivs = { ["ch"] = { 80, default = "km" }, ["chlk"] = { 80, default = "km" }, ["chain"] = { 80, default = "km" }, ["chainlk"] = { 80, default = "km" }, ["ft"] = { 5280, default = "km" }, ["furlong"] = { 8, default = "km" }, ["yd"] = { 1760, default = "km" } }, }, ["mil"] = { symbol = "mil", usename = 1, utype = "length", scale = 0.0000254, default = "mm", link = "Thousandth of an inch", }, ["Mly"] = { name1 = "megalight-year", symbol = "Mly", utype = "length", scale = 9.4607304725808e21, default = "kpc", link = "Light-year#Definitions", }, ["Mpc"] = { name1 = "megaparsec", symbol = "Mpc", utype = "length", scale = 3.0856775814671916e22, default = "Mly", link = "Parsec#Megaparsecs and gigaparsecs", }, ["NM"] = { name1 = "nautical mile", symbol = "NM", utype = "length", scale = 1852, default = "km mi", }, ["nmi"] = { name1 = "nautical mile", symbol = "nmi", utype = "length", scale = 1852, default = "km mi", }, ["oldUKnmi"] = { name1 = "nautical mile", symbol = "nmi", utype = "length", scale = 1853.184, default = "km mi", }, ["oldUSnmi"] = { name1 = "nautical mile", symbol = "nmi", utype = "length", scale = 1853.24496, default = "km mi", }, ["pc"] = { name1 = "parsec", symbol = "pc", utype = "length", scale = 3.0856775814671916e16, default = "ly", }, ["perch"] = { name2 = "perches", symbol = "perch", usename = 1, utype = "length", scale = 5.0292, default = "ft m", link = "Rod (unit)", }, ["pitch"] = { name2 = "μm", symbol = "μm", utype = "length", scale = 1e-6, default = "dpi", defkey = "pitch", linkey = "pitch", link = "Dots per inch", }, ["pole"] = { symbol = "pole", usename = 1, utype = "length", scale = 5.0292, default = "ft m", link = "Rod (unit)", }, ["pre1954U.S.nmi"] = { name1 = "(pre-1954&nbsp;U.S.) nautical mile", symbol = "(pre&#8209;1954&nbsp;U.S.) nmi", utype = "length", scale = 1853.24496, default = "km mi", link = "Nautical mile", }, ["pre1954USnmi"] = { name1 = "(pre-1954&nbsp;US) nautical mile", name1_us = "(pre-1954&nbsp;U.S.) nautical mile", symbol = "(pre&#8209;1954&nbsp;US) nmi", sym_us = "(pre&#8209;1954&nbsp;U.S.) nmi", utype = "length", scale = 1853.24496, default = "km mi", link = "Nautical mile", }, ["rd"] = { name1 = "rod", symbol = "rd", utype = "length", scale = 5.0292, default = "ft m", link = "Rod (unit)", }, ["royal cubit"] = { name1 = "royal cubit", symbol = "cu", utype = "length", scale = 0.524, default = "mm", }, ["rtkm"] = { name1 = "route kilometre", name1_us = "route kilometer", symbol = "km", utype = "length", scale = 1000, default = "mi", link = "Kilometre", }, ["rtmi"] = { name1 = "route mile", symbol = "mi", utype = "length", scale = 1609.344, default = "km", link = "Mile", }, ["shaku"] = { name2 = "shaku", symbol = "shaku", usename = 1, utype = "length", scale = 0.30303030303030304, default = "m", link = "Shaku (unit)", }, ["sm"] = { name1 = "smoot", symbol = "sm", utype = "length", scale = 1.70180, default = "m", link = "Smoot (unit)", }, ["smi"] = { name1 = "statute mile", symbol = "mi", utype = "length", scale = 1609.344, default = "km", subdivs = { ["chain"] = { 80, default = "km" } }, }, ["solar radius"] = { name1 = "solar radius", name2 = "solar radii", symbol = "''R''<sub>☉</sub>", utype = "length", scale = 695700e3, default = "km", }, ["sun"] = { name2 = "sun", symbol = "sun", usename = 1, utype = "length", scale = 0.030303030303030304, default = "mm", link = "Japanese units of measurement#Length", }, ["thou"] = { name2 = "thou", symbol = "thou", usename = 1, utype = "length", scale = 0.0000254, default = "mm", link = "Thousandth of an inch", }, ["verst"] = { symbol = "verst", usename = 1, utype = "length", scale = 1066.8, default = "km mi", }, ["yd"] = { name1 = "yard", symbol = "yd", utype = "length", scale = 0.9144, default = "m", subdivs = { ["ft"] = { 3, default = "m" } }, }, ["μin"] = { name1 = "microinch", name2 = "microinches", symbol = "μin", utype = "length", scale = 0.0000000254, default = "nm", link = "SI prefix#Non-metric units", }, ["Å"] = { name1 = "ångström", symbol = "Å", utype = "length", scale = 0.0000000001, default = "in", }, ["Hz"] = { _name1 = "hertz", _name2 = "hertz", _symbol = "Hz", utype = "length", scale = 3.3356409519815204e-9, invert = -1, iscomplex= true, prefixes = 1, default = "m", link = "Hertz", }, ["rpm"] = { name1 = "revolution per minute", name2 = "revolutions per minute", symbol = "rpm", utype = "length", scale = 5.5594015866358675e-11, invert = -1, iscomplex= true, default = "Hz", link = "Revolutions per minute", }, ["-ft-frac"] = { target = "ft", link = "Fracture gradient", }, ["-in-stiff"] = { target = "in", link = "Stiffness", }, ["-m-frac"] = { target = "m", link = "Fracture gradient", }, ["-m-stiff"] = { target = "m", link = "Stiffness", }, ["100km"] = { target = "km", multiplier= 100, }, ["100mi"] = { target = "mi", multiplier= 100, }, ["100miles"] = { target = "mi", symbol = "miles", multiplier= 100, }, ["admiralty nmi"] = { target = "oldUKnmi", }, ["angstrom"] = { target = "Å", }, ["au"] = { target = "AU", symbol = "au", }, ["feet"] = { target = "ft", }, ["hands"] = { target = "hand", }, ["inch"] = { target = "in", }, ["inches"] = { target = "in", }, ["light-year"] = { target = "ly", }, ["meter"] = { target = "m", sp_us = true, }, ["meters"] = { target = "m", sp_us = true, }, ["metre"] = { target = "m", }, ["metres"] = { target = "m", }, ["micrometre"] = { target = "μm", }, ["micron"] = { target = "μm", default = "μin", }, ["mile"] = { target = "mi", usename = 1, }, ["miles"] = { target = "mi", usename = 1, }, ["parsec"] = { target = "pc", }, ["rod"] = { target = "rd", }, ["smoot"] = { target = "sm", }, ["uin"] = { target = "μin", }, ["yard"] = { target = "yd", }, ["yards"] = { target = "yd", }, ["yds"] = { target = "yd", }, ["dtex"] = { name1 = "decitex", name2 = "decitex", symbol = "dtex", utype = "linear density", scale = 1e-7, default = "lb/yd", link = "Units of textile measurement#Units", }, ["kg/cm"] = { name1 = "kilogram per centimetre", name1_us = "kilogram per centimeter", name2 = "kilograms per centimetre", name2_us = "kilograms per centimeter", symbol = "kg/cm", utype = "linear density", scale = 100, default = "lb/yd", link = "Linear density", }, ["kg/m"] = { name1 = "kilogram per metre", name1_us = "kilogram per meter", name2 = "kilograms per metre", name2_us = "kilograms per meter", symbol = "kg/m", utype = "linear density", scale = 1, default = "lb/yd", link = "Linear density", }, ["lb/ft"] = { name1 = "pound per foot", name2 = "pounds per foot", symbol = "lb/ft", utype = "linear density", scale = 1.4881639435695539, default = "kg/m", link = "Linear density", }, ["lb/yd"] = { name1 = "pound per yard", name2 = "pounds per yard", symbol = "lb/yd", utype = "linear density", scale = 0.49605464785651798, default = "kg/m", link = "Linear density", }, ["G"] = { _name1 = "gauss", _name2 = "gauss", _symbol = "G", utype = "magnetic field strength", scale = 0.0001, prefixes = 1, default = "T", link = "Gauss (unit)", }, ["T"] = { _name1 = "tesla", _symbol = "T", utype = "magnetic field strength", scale = 1, prefixes = 1, default = "G", link = "Tesla (unit)", }, ["A/m"] = { name1 = "ampere per metre", name1_us = "ampere per meter", name2 = "amperes per metre", name2_us = "amperes per meter", symbol = "A/m", utype = "magnetizing field", scale = 1, default = "Oe", }, ["kA/m"] = { name1 = "kiloampere per metre", name1_us = "kiloampere per meter", name2 = "kiloamperes per metre", name2_us = "kiloamperes per meter", symbol = "kA/m", utype = "magnetizing field", scale = 1000, default = "kOe", link = "Ampere per metre", }, ["MA/m"] = { name1 = "megaampere per metre", name1_us = "megaampere per meter", name2 = "megaamperes per metre", name2_us = "megaamperes per meter", symbol = "MA/m", utype = "magnetizing field", scale = 1e6, default = "kOe", link = "Ampere per metre", }, ["Oe"] = { _name1 = "oersted", _symbol = "Oe", utype = "magnetizing field", scale = 79.5774715, prefixes = 1, default = "kA/m", link = "Oersted", }, ["-Lcwt"] = { name1 = "hundredweight", name2 = "hundredweight", symbol = "cwt", utype = "mass", scale = 50.80234544, default = "lb", }, ["-Scwt"] = { name1 = "hundredweight", name2 = "hundredweight", symbol = "cwt", utype = "mass", scale = 45.359237, default = "lb", }, ["-ST"] = { name1 = "short ton", symbol = "ST", utype = "mass", scale = 907.18474, default = "t", }, ["carat"] = { symbol = "carat", usename = 1, utype = "mass", scale = 0.0002, default = "g", link = "Carat (mass)", }, ["Da"] = { _name1 = "dalton", _symbol = "Da", utype = "mass", scale = 1.66053906892e-27, prefixes = 1, default = "kg", link = "Dalton (unit)", }, ["drachm"] = { name1_us = "dram", symbol = "drachm", usename = 1, utype = "mass", scale = 0.001771845195, default = "g", link = "Dram (unit)", }, ["dram"] = { target = "drachm", }, ["dwt"] = { name1 = "pennyweight", symbol = "dwt", utype = "mass", scale = 0.00155517384, default = "oz g", }, ["DWton"] = { symbol = "deadweight ton", usename = 1, utype = "mass", scale = 1016.0469088, default = "DWtonne", link = "Deadweight tonnage", }, ["DWtonne"] = { name1_us = "deadweight metric ton", symbol = "deadweight tonne", sym_us = "~deadweight metric ton", usename = 1, utype = "mass", scale = 1000, default = "DWton", link = "Deadweight tonnage", }, ["g"] = { _name1 = "gram", _symbol = "g", utype = "mass", scale = 0.001, prefixes = 1, default = "oz", link = "Gram", }, ["gr"] = { name1 = "grain", symbol = "gr", utype = "mass", scale = 0.00006479891, default = "g", link = "Grain (unit)", }, ["Gt"] = { name1 = "gigatonne", symbol = "Gt", utype = "mass", scale = 1000000000000, default = "LT ST", link = "Tonne", }, ["impgalh2o"] = { name1 = "imperial gallon of water", name2 = "imperial gallons of water", symbol = "imp&nbsp;gal H<sub>2</sub>O", utype = "mass", scale = 4.5359236999999499, default = "lb kg", link = "Imperial gallon", }, ["kt"] = { name1 = "kilotonne", symbol = "kt", utype = "mass", scale = 1000000, default = "LT ST", link = "Tonne", }, ["lb"] = { name1 = "pound", symbol = "lb", utype = "mass", scale = 0.45359237, exception= "integer_more_precision", default = "kg", subdivs = { ["oz"] = { 16, default = "kg" } }, link = "Pound (mass)", }, ["Lcwt"] = { name1 = "long hundredweight", name2 = "long hundredweight", symbol = "Lcwt", usename = 1, utype = "mass", scale = 50.80234544, default = "lb", subdivs = { ["qtr"] = { 4, default = "kg" }, ["st"] = { 8, default = "kg" } }, link = "Hundredweight", }, ["long cwt"] = { name1 = "long hundredweight", name2 = "long hundredweight", symbol = "long&nbsp;cwt", utype = "mass", scale = 50.80234544, default = "lb kg", subdivs = { ["qtr"] = { 4, default = "kg" } }, link = "Hundredweight", }, ["long qtr"] = { name1 = "long quarter", symbol = "long&nbsp;qtr", utype = "mass", scale = 12.70058636, default = "lb kg", }, ["LT"] = { symbol = "long ton", usename = 1, utype = "mass", scale = 1016.0469088, default = "t", subdivs = { ["Lcwt"] = { 20, default = "t", unit = "-Lcwt" } }, }, ["lt"] = { name1 = "long ton", symbol = "LT", utype = "mass", scale = 1016.0469088, default = "t", subdivs = { ["Lcwt"] = { 20, default = "t", unit = "-Lcwt" } }, }, ["metric ton"] = { symbol = "metric ton", usename = 1, utype = "mass", scale = 1000, default = "long ton", link = "Tonne", }, ["MT"] = { name1 = "metric ton", symbol = "t", utype = "mass", scale = 1000, default = "LT ST", link = "Tonne", }, ["Mt"] = { name1 = "megatonne", symbol = "Mt", utype = "mass", scale = 1000000000, default = "LT ST", link = "Tonne", }, ["oz"] = { name1 = "ounce", symbol = "oz", utype = "mass", scale = 0.028349523125, default = "g", }, ["ozt"] = { name1 = "troy ounce", symbol = "ozt", utype = "mass", scale = 0.0311034768, default = "oz g", }, ["pdr"] = { name1 = "pounder", symbol = "pdr", utype = "mass", scale = 0.45359237, default = "kg", link = "Pound (mass)", }, ["qtr"] = { name1 = "quarter", symbol = "qtr", utype = "mass", scale = 12.70058636, default = "lb kg", subdivs = { ["lb"] = { 28, default = "kg" } }, link = "Long quarter", }, ["Scwt"] = { name1 = "short hundredweight", name2 = "short hundredweight", symbol = "Scwt", usename = 1, utype = "mass", scale = 45.359237, default = "lb", link = "Hundredweight", }, ["short cwt"] = { name1 = "short hundredweight", name2 = "short hundredweight", symbol = "short&nbsp;cwt", utype = "mass", scale = 45.359237, default = "lb kg", link = "Hundredweight", }, ["short qtr"] = { name1 = "short quarter", symbol = "short&nbsp;qtr", utype = "mass", scale = 11.33980925, default = "lb kg", }, ["ST"] = { symbol = "short ton", usename = 1, utype = "mass", scale = 907.18474, default = "t", subdivs = { ["Scwt"] = { 20, default = "t", unit = "-Scwt" } }, }, ["shtn"] = { name1 = "short ton", symbol = "sh&nbsp;tn", utype = "mass", scale = 907.18474, default = "t", }, ["shton"] = { symbol = "ton", usename = 1, utype = "mass", scale = 907.18474, default = "t", }, ["solar mass"] = { name1 = "solar mass", name2 = "solar masses", symbol = "''M''<sub>☉</sub>", utype = "mass", scale = 1.98855e30, default = "kg", }, ["st"] = { name1 = "stone", name2 = "stone", symbol = "st", utype = "mass", scale = 6.35029318, default = "lb kg", subdivs = { ["lb"] = { 14, default = "kg lb" } }, link = "Stone (unit)", }, ["t"] = { name1 = "tonne", name1_us = "metric ton", symbol = "t", utype = "mass", scale = 1000, default = "LT ST", }, ["tonne"] = { name1 = "tonne", name1_us = "metric ton", symbol = "t", utype = "mass", scale = 1000, default = "shton", }, ["troy pound"] = { symbol = "troy pound", usename = 1, utype = "mass", scale = 0.3732417216, default = "lb kg", link = "Troy weight", }, ["usgalh2o"] = { name1 = "US gallon of water", name1_us = "U.S. gallon of water", name2 = "US gallons of water", name2_us = "U.S. gallons of water", symbol = "US&nbsp;gal H<sub>2</sub>O", utype = "mass", scale = 3.7776215836051126, default = "lb kg", link = "United States customary units#Fluid volume", }, ["viss"] = { name2 = "viss", symbol = "viss", utype = "mass", scale = 1.632932532, default = "kg", link = "Myanmar units of measurement#Mass", }, ["billion tonne"] = { target = "e9t", }, ["grain"] = { target = "gr", }, ["kilogram"] = { target = "kg", }, ["kilotonne"] = { target = "kt", }, ["lbs"] = { target = "lb", }, ["lbt"] = { target = "troy pound", }, ["lcwt"] = { target = "Lcwt", }, ["long ton"] = { target = "LT", }, ["mcg"] = { target = "μg", }, ["million tonne"] = { target = "e6t", }, ["scwt"] = { target = "Scwt", }, ["short ton"] = { target = "ST", }, ["stone"] = { target = "st", }, ["thousand tonne"] = { target = "e3t", }, ["tonnes"] = { target = "t", }, ["kg/kW"] = { name1 = "kilogram per kilowatt", name2 = "kilograms per kilowatt", symbol = "kg/kW", utype = "mass per unit power", scale = 0.001, default = "lb/hp", link = "Kilowatt", }, ["lb/hp"] = { name1 = "pound per horsepower", name2 = "pounds per horsepower", symbol = "lb/hp", utype = "mass per unit power", scale = 0.00060827738784176115, default = "kg/kW", link = "Horsepower", }, ["kg/h"] = { per = { "kg", "h" }, utype = "mass per unit time", default = "lb/h", }, ["lb/h"] = { per = { "lb", "h" }, utype = "mass per unit time", default = "kg/h", }, ["g-mol/d"] = { name1 = "gram-mole per day", name2 = "gram-moles per day", symbol = "g&#8209;mol/d", utype = "molar rate", scale = 1.1574074074074073e-5, default = "μmol/s", link = "Mole (unit)", }, ["g-mol/h"] = { name1 = "gram-mole per hour", name2 = "gram-moles per hour", symbol = "g&#8209;mol/h", utype = "molar rate", scale = 0.00027777777777777778, default = "mmol/s", link = "Mole (unit)", }, ["g-mol/min"] = { name1 = "gram-mole per minute", name2 = "gram-moles per minute", symbol = "g&#8209;mol/min", utype = "molar rate", scale = 0.016666666666666666, default = "g-mol/s", link = "Mole (unit)", }, ["g-mol/s"] = { name1 = "gram-mole per second", name2 = "gram-moles per second", symbol = "g&#8209;mol/s", utype = "molar rate", scale = 1, default = "lb-mol/min", link = "Mole (unit)", }, ["gmol/d"] = { name1 = "gram-mole per day", name2 = "gram-moles per day", symbol = "gmol/d", utype = "molar rate", scale = 1.1574074074074073e-5, default = "μmol/s", link = "Mole (unit)", }, ["gmol/h"] = { name1 = "gram-mole per hour", name2 = "gram-moles per hour", symbol = "gmol/h", utype = "molar rate", scale = 0.00027777777777777778, default = "mmol/s", link = "Mole (unit)", }, ["gmol/min"] = { name1 = "gram-mole per minute", name2 = "gram-moles per minute", symbol = "gmol/min", utype = "molar rate", scale = 0.016666666666666666, default = "gmol/s", link = "Mole (unit)", }, ["gmol/s"] = { name1 = "gram-mole per second", name2 = "gram-moles per second", symbol = "gmol/s", utype = "molar rate", scale = 1, default = "lbmol/min", link = "Mole (unit)", }, ["kmol/d"] = { name1 = "kilomole per day", name2 = "kilomoles per day", symbol = "kmol/d", utype = "molar rate", scale = 0.011574074074074073, default = "mmol/s", link = "Mole (unit)", }, ["kmol/h"] = { name1 = "kilomole per hour", name2 = "kilomoles per hour", symbol = "kmol/h", utype = "molar rate", scale = 0.27777777777777779, default = "mol/s", link = "Mole (unit)", }, ["kmol/min"] = { name1 = "kilomole per minute", name2 = "kilomoles per minute", symbol = "kmol/min", utype = "molar rate", scale = 16.666666666666668, default = "mol/s", link = "Kilomole (unit)", }, ["kmol/s"] = { name1 = "kilomole per second", name2 = "kilomoles per second", symbol = "kmol/s", utype = "molar rate", scale = 1000, default = "lb-mol/s", link = "Mole (unit)", }, ["lb-mol/d"] = { name1 = "pound-mole per day", name2 = "pound-moles per day", symbol = "lb&#8209;mol/d", utype = "molar rate", scale = 0.0052499116898148141, default = "mmol/s", link = "Pound-mole", }, ["lb-mol/h"] = { name1 = "pound-mole per hour", name2 = "pound-moles per hour", symbol = "lb&#8209;mol/h", utype = "molar rate", scale = 0.12599788055555555, default = "mol/s", link = "Pound-mole", }, ["lb-mol/min"] = { name1 = "pound-mole per minute", name2 = "pound-moles per minute", symbol = "lb&#8209;mol/min", utype = "molar rate", scale = 7.5598728333333334, default = "mol/s", link = "Pound-mole", }, ["lb-mol/s"] = { name1 = "pound-mole per second", name2 = "pound-moles per second", symbol = "lb&#8209;mol/s", utype = "molar rate", scale = 453.59237, default = "kmol/s", link = "Pound-mole", }, ["lbmol/d"] = { name1 = "pound-mole per day", name2 = "pound-moles per day", symbol = "lbmol/d", utype = "molar rate", scale = 0.0052499116898148141, default = "mmol/s", link = "Pound-mole", }, ["lbmol/h"] = { name1 = "pound-mole per hour", name2 = "pound-moles per hour", symbol = "lbmol/h", utype = "molar rate", scale = 0.12599788055555555, default = "mol/s", link = "Pound-mole", }, ["lbmol/min"] = { name1 = "pound-mole per minute", name2 = "pound-moles per minute", symbol = "lbmol/min", utype = "molar rate", scale = 7.5598728333333334, default = "mol/s", link = "Pound-mole", }, ["lbmol/s"] = { name1 = "pound-mole per second", name2 = "pound-moles per second", symbol = "lbmol/s", utype = "molar rate", scale = 453.59237, default = "kmol/s", link = "Pound-mole", }, ["mmol/s"] = { name1 = "millimole per second", name2 = "millimoles per second", symbol = "mmol/s", utype = "molar rate", scale = 0.001, default = "lb-mol/d", link = "Mole (unit)", }, ["mol/d"] = { name1 = "mole per day", name2 = "moles per day", symbol = "mol/d", utype = "molar rate", scale = 1.1574074074074073e-5, default = "μmol/s", link = "Mole (unit)", }, ["mol/h"] = { name1 = "mole per hour", name2 = "moles per hour", symbol = "mol/h", utype = "molar rate", scale = 0.00027777777777777778, default = "mmol/s", link = "Mole (unit)", }, ["mol/min"] = { name1 = "mole per minute", name2 = "moles per minute", symbol = "mol/min", utype = "molar rate", scale = 0.016666666666666666, default = "mol/s", link = "Mole (unit)", }, ["mol/s"] = { name1 = "mole per second", name2 = "moles per second", symbol = "mol/s", utype = "molar rate", scale = 1, default = "lb-mol/min", link = "Mole (unit)", }, ["μmol/s"] = { name1 = "micromole per second", name2 = "micromoles per second", symbol = "μmol/s", utype = "molar rate", scale = 0.000001, default = "lb-mol/d", link = "Mole (unit)", }, ["umol/s"] = { target = "μmol/s", }, ["/acre"] = { name1 = "per acre", name2 = "per acre", symbol = "/acre", utype = "per unit area", scale = 0.00024710538146716532, default = "/ha", link = "Acre", }, ["/ha"] = { name1 = "per hectare", name2 = "per hectare", symbol = "/ha", utype = "per unit area", scale = 100e-6, default = "/acre", link = "Hectare", }, ["/sqcm"] = { name1 = "per square centimetre", name1_us = "per square centimeter", name2 = "per square centimetre", name2_us = "per square centimeter", symbol = "/cm<sup>2</sup>", utype = "per unit area", scale = 1e4, default = "/sqin", link = "Square centimetre", }, ["/sqin"] = { name1 = "per square inch", name2 = "per square inch", symbol = "/in<sup>2</sup>", utype = "per unit area", scale = 1550.0031000062002, default = "/sqcm", link = "Square inch", }, ["/sqkm"] = { name1 = "per square kilometre", name1_us = "per square kilometer", name2 = "per square kilometre", name2_us = "per square kilometer", symbol = "/km<sup>2</sup>", utype = "per unit area", scale = 1e-6, default = "/sqmi", link = "Square kilometre", }, ["/sqmi"] = { name1 = "per square mile", name2 = "per square mile", symbol = "/sq&nbsp;mi", utype = "per unit area", scale = 3.8610215854244582e-7, default = "/sqkm", link = "Square mile", }, ["PD/acre"] = { name1 = "inhabitant per acre", name2 = "inhabitants per acre", symbol = "/acre", utype = "per unit area", scale = 0.00024710538146716532, default = "PD/ha", link = "Acre", }, ["PD/ha"] = { name1 = "inhabitant per hectare", name2 = "inhabitants per hectare", symbol = "/ha", utype = "per unit area", scale = 100e-6, default = "PD/acre", link = "Hectare", }, ["PD/sqkm"] = { name1 = "inhabitant per square kilometre", name1_us = "inhabitant per square kilometer", name2 = "inhabitants per square kilometre", name2_us = "inhabitants per square kilometer", symbol = "/km<sup>2</sup>", utype = "per unit area", scale = 1e-6, default = "PD/sqmi", link = "Square kilometre", }, ["PD/sqmi"] = { name1 = "inhabitant per square mile", name2 = "inhabitants per square mile", symbol = "/sq&nbsp;mi", utype = "per unit area", scale = 3.8610215854244582e-7, default = "PD/sqkm", link = "Square mile", }, ["/cm2"] = { target = "/sqcm", }, ["/in2"] = { target = "/sqin", }, ["/km2"] = { target = "/sqkm", }, ["pd/acre"] = { target = "PD/acre", }, ["pd/ha"] = { target = "PD/ha", }, ["PD/km2"] = { target = "PD/sqkm", }, ["pd/km2"] = { target = "PD/sqkm", }, ["PD/km²"] = { target = "PD/sqkm", }, ["pd/sqkm"] = { target = "PD/sqkm", }, ["pd/sqmi"] = { target = "PD/sqmi", }, ["/l"] = { name1 = "per litre", name1_us = "per liter", name2 = "per litre", name2_us = "per liter", symbol = "/l", utype = "per unit volume", scale = 1000, default = "/usgal", link = "Litre", }, ["/L"] = { name1 = "per litre", name1_us = "per liter", name2 = "per litre", name2_us = "per liter", symbol = "/L", utype = "per unit volume", scale = 1000, default = "/usgal", link = "Litre", }, ["/USgal"] = { name1 = "per gallon", name2 = "per gallon", symbol = "/gal", utype = "per unit volume", scale = 264.172052, default = "/L", link = "US gallon", customary= 2, }, ["/usgal"] = { target = "/USgal", }, ["bhp"] = { name1 = "brake horsepower", name2 = "brake horsepower", symbol = "bhp", utype = "power", scale = 745.69987158227022, default = "kW", link = "Horsepower#Brake horsepower", }, ["Cal/d"] = { name1 = "large calorie per day", name2 = "large calories per day", symbol = "Cal/d", utype = "power", scale = 0.048425925925925928, default = "kJ/d", link = "Calorie", }, ["Cal/h"] = { name1 = "large calorie per hour", name2 = "large calories per hour", symbol = "Cal/h", utype = "power", scale = 1.1622222222222223, default = "kJ/h", link = "Calorie", }, ["cal/h"] = { name1 = "calorie per hour", name2 = "calories per hour", symbol = "cal/h", utype = "power", scale = 0.0011622222222222223, default = "W", link = "Calorie", }, ["CV"] = { name1 = "metric horsepower", name2 = "metric horsepower", symbol = "CV", utype = "power", scale = 735.49875, default = "kW", }, ["hk"] = { name1 = "metric horsepower", name2 = "metric horsepower", symbol = "hk", utype = "power", scale = 735.49875, default = "kW", }, ["hp"] = { name1 = "horsepower", name2 = "horsepower", symbol = "hp", utype = "power", scale = 745.69987158227022, default = "kW", }, ["hp-electric"] = { name1 = "electric horsepower", name2 = "electric horsepower", symbol = "hp", utype = "power", scale = 746, default = "kW", link = "Horsepower#Electrical horsepower", }, ["hp-electrical"] = { name1 = "electrical horsepower", name2 = "electrical horsepower", symbol = "hp", utype = "power", scale = 746, default = "kW", link = "Horsepower#Electrical horsepower", }, ["hp-metric"] = { name1 = "metric horsepower", name2 = "metric horsepower", symbol = "hp", utype = "power", scale = 735.49875, default = "kW", }, ["ihp"] = { name1 = "indicated horsepower", name2 = "indicated horsepower", symbol = "ihp", utype = "power", scale = 745.69987158227022, default = "kW", link = "Horsepower#Indicated horsepower", }, ["kcal/h"] = { name1 = "kilocalorie per hour", name2 = "kilocalories per hour", symbol = "kcal/h", utype = "power", scale = 1.1622222222222223, default = "kW", link = "Calorie", }, ["kJ/d"] = { name1 = "kilojoule per day", name2 = "kilojoules per day", symbol = "kJ/d", utype = "power", scale = 0.011574074074074073, default = "Cal/d", link = "Kilojoule", }, ["kJ/h"] = { name1 = "kilojoule per hour", name2 = "kilojoules per hour", symbol = "kJ/h", utype = "power", scale = 0.27777777777777779, default = "W", link = "Kilojoule", }, ["PS"] = { name1 = "metric horsepower", name2 = "metric horsepower", symbol = "PS", utype = "power", scale = 735.49875, default = "kW", }, ["shp"] = { name1 = "shaft horsepower", name2 = "shaft horsepower", symbol = "shp", utype = "power", scale = 745.69987158227022, default = "kW", link = "Horsepower#Shaft horsepower", }, ["W"] = { _name1 = "watt", _symbol = "W", utype = "power", scale = 1, prefixes = 1, default = "hp", link = "Watt", }, ["BTU/h"] = { per = { "BTU", "h" }, utype = "power", default = "W", }, ["Btu/h"] = { per = { "Btu", "h" }, utype = "power", default = "W", }, ["BHP"] = { target = "bhp", }, ["btu/h"] = { target = "BTU/h", }, ["HP"] = { target = "hp", }, ["Hp"] = { target = "hp", }, ["hp-mechanical"] = { target = "hp", }, ["IHP"] = { target = "ihp", }, ["SHP"] = { target = "shp", }, ["whp"] = { target = "hp", }, ["hp/lb"] = { name1 = "horsepower per pound", name2 = "horsepower per pound", symbol = "hp/lb", utype = "power per unit mass", scale = 1643.986806, default = "kW/kg", link = "Power-to-weight ratio", }, ["hp/LT"] = { name1 = "horsepower per long ton", name2 = "horsepower per long ton", symbol = "hp/LT", utype = "power per unit mass", scale = 0.73392268125000004, default = "kW/t", link = "Power-to-weight ratio", }, ["hp/ST"] = { name1 = "horsepower per short ton", name2 = "horsepower per short ton", symbol = "hp/ST", utype = "power per unit mass", scale = 0.821993403, default = "kW/t", link = "Power-to-weight ratio", }, ["hp/t"] = { name1 = "horsepower per tonne", name2 = "horsepower per tonne", symbol = "hp/t", utype = "power per unit mass", scale = 0.74569987158227022, default = "kW/t", link = "Power-to-weight ratio", }, ["kW/kg"] = { name1 = "kilowatt per kilogram", name2 = "kilowatts per kilogram", symbol = "kW/kg", utype = "power per unit mass", scale = 1000, default = "hp/lb", link = "Power-to-weight ratio", }, ["kW/t"] = { name1 = "kilowatt per tonne", name2 = "kilowatts per tonne", symbol = "kW/t", utype = "power per unit mass", scale = 1, default = "PS/t", link = "Power-to-weight ratio", }, ["PS/t"] = { name1 = "metric horsepower per tonne", name2 = "metric horsepower per tonne", symbol = "PS/t", utype = "power per unit mass", scale = 0.73549875, default = "kW/t", link = "Power-to-weight ratio", }, ["shp/lb"] = { name1 = "shaft horsepower per pound", name2 = "shaft horsepower per pound", symbol = "shp/lb", utype = "power per unit mass", scale = 1643.986806, default = "kW/kg", link = "Power-to-weight ratio", }, ["hp/tonne"] = { target = "hp/t", symbol = "hp/tonne", default = "kW/tonne", }, ["kW/tonne"] = { target = "kW/t", symbol = "kW/tonne", }, ["-lb/in2"] = { name1 = "pound per square inch", name2 = "pounds per square inch", symbol = "lb/in<sup>2</sup>", utype = "pressure", scale = 6894.7572931683608, default = "kPa kgf/cm2", }, ["atm"] = { name1 = "standard atmosphere", symbol = "atm", utype = "pressure", scale = 101325, default = "kPa", link = "Atmosphere (unit)", }, ["Ba"] = { name1 = "barye", symbol = "Ba", utype = "pressure", scale = 0.1, default = "Pa", }, ["bar"] = { symbol = "bar", utype = "pressure", scale = 100000, default = "kPa", link = "Bar (unit)", }, ["dbar"] = { name1 = "decibar", symbol = "dbar", utype = "pressure", scale = 10000, default = "kPa", link = "Bar (unit)", }, ["inHg"] = { name1 = "inch of mercury", name2 = "inches of mercury", symbol = "inHg", utype = "pressure", scale = 3386.388640341, default = "kPa", }, ["kBa"] = { name1 = "kilobarye", symbol = "kBa", utype = "pressure", scale = 100, default = "hPa", link = "Barye", }, ["kg-f/cm2"] = { name1 = "kilogram-force per square centimetre", name1_us = "kilogram-force per square centimeter", name2 = "kilograms-force per square centimetre", name2_us = "kilograms-force per square centimeter", symbol = "kg<sub>f</sub>/cm<sup>2</sup>", utype = "pressure", scale = 98066.5, default = "psi", link = "Kilogram-force", }, ["kg/cm2"] = { name1 = "kilogram per square centimetre", name1_us = "kilogram per square centimeter", name2 = "kilograms per square centimetre", name2_us = "kilograms per square centimeter", symbol = "kg/cm<sup>2</sup>", utype = "pressure", scale = 98066.5, default = "psi", link = "Kilogram-force", }, ["kgf/cm2"] = { name1 = "kilogram-force per square centimetre", name1_us = "kilogram-force per square centimeter", name2 = "kilograms-force per square centimetre", name2_us = "kilograms-force per square centimeter", symbol = "kgf/cm<sup>2</sup>", utype = "pressure", scale = 98066.5, default = "psi", link = "Kilogram-force", }, ["ksi"] = { name1 = "kilopound per square inch", name2 = "kilopounds per square inch", symbol = "ksi", utype = "pressure", scale = 6894757.2931683613, default = "MPa", link = "Pound per square inch", }, ["lbf/in2"] = { name1 = "pound-force per square inch", name2 = "pounds-force per square inch", symbol = "lbf/in<sup>2</sup>", utype = "pressure", scale = 6894.7572931683608, default = "kPa kgf/cm2", }, ["mb"] = { name1 = "millibar", symbol = "mb", utype = "pressure", scale = 100, default = "hPa", link = "Bar (unit)", }, ["mbar"] = { name1 = "millibar", symbol = "mbar", utype = "pressure", scale = 100, default = "hPa", link = "Bar (unit)", }, ["mmHg"] = { name1 = "millimetre of mercury", name1_us = "millimeter of mercury", name2 = "millimetres of mercury", name2_us = "millimeters of mercury", symbol = "mmHg", utype = "pressure", scale = 133.322387415, default = "kPa", }, ["Pa"] = { _name1 = "pascal", _symbol = "Pa", utype = "pressure", scale = 1, prefixes = 1, default = "psi", link = "Pascal (unit)", }, ["psf"] = { name1 = "pound per square foot", name2 = "pounds per square foot", symbol = "psf", utype = "pressure", scale = 47.880258980335839, default = "kPa", link = "Pound per square inch", }, ["psi"] = { name1 = "pound per square inch", name2 = "pounds per square inch", symbol = "psi", utype = "pressure", scale = 6894.7572931683608, default = "kPa", }, ["Torr"] = { name1 = "torr", symbol = "Torr", utype = "pressure", scale = 133.32236842105263, default = "kPa", }, ["N/cm2"] = { per = { "N", "cm2" }, utype = "pressure", default = "psi", }, ["N/m2"] = { per = { "N", "m2" }, utype = "pressure", default = "psi", }, ["g/cm2"] = { per = { "g", "cm2" }, utype = "pressure", default = "lb/sqft", multiplier= 9.80665, }, ["g/m2"] = { per = { "g", "m2" }, utype = "pressure", default = "lb/sqft", multiplier= 9.80665, }, ["kg/ha"] = { per = { "kg", "ha" }, utype = "pressure", default = "lb/acre", multiplier= 9.80665, }, ["kg/m2"] = { per = { "kg", "m2" }, utype = "pressure", default = "lb/sqft", multiplier= 9.80665, }, ["lb/1000sqft"] = { per = { "lb", "1000sqft" }, utype = "pressure", default = "g/m2", multiplier= 9.80665, }, ["lb/acre"] = { per = { "lb", "acre" }, utype = "pressure", default = "kg/ha", multiplier= 9.80665, }, ["lb/sqft"] = { per = { "lb", "sqft" }, utype = "pressure", default = "kg/m2", multiplier= 9.80665, }, ["lb/sqyd"] = { per = { "lb", "sqyd" }, utype = "pressure", default = "kg/m2", multiplier= 9.80665, }, ["LT/acre"] = { per = { "LT", "acre" }, utype = "pressure", default = "t/ha", multiplier= 9.80665, }, ["MT/ha"] = { per = { "MT", "ha" }, utype = "pressure", default = "LT/acre ST/acre", multiplier= 9.80665, }, ["oz/sqft"] = { per = { "oz", "sqft" }, utype = "pressure", default = "g/m2", multiplier= 9.80665, }, ["oz/sqyd"] = { per = { "oz", "sqyd" }, utype = "pressure", default = "g/m2", multiplier= 9.80665, }, ["ST/acre"] = { per = { "ST", "acre" }, utype = "pressure", default = "t/ha", multiplier= 9.80665, }, ["t/ha"] = { per = { "t", "ha" }, utype = "pressure", default = "LT/acre ST/acre", multiplier= 9.80665, }, ["tonne/acre"] = { per = { "tonne", "acre" }, utype = "pressure", default = "tonne/ha", multiplier= 9.80665, }, ["tonne/ha"] = { per = { "tonne", "ha" }, utype = "pressure", default = "tonne/acre", multiplier= 9.80665, }, ["kgfpsqcm"] = { target = "kgf/cm2", }, ["kgpsqcm"] = { target = "kg/cm2", }, ["kN/m2"] = { target = "kPa", }, ["lb/in2"] = { target = "lbf/in2", }, ["torr"] = { target = "Torr", }, ["Bq"] = { _name1 = "becquerel", _symbol = "Bq", utype = "radioactivity", scale = 1, prefixes = 1, default = "pCi", link = "Becquerel", }, ["Ci"] = { _name1 = "curie", _symbol = "Ci", utype = "radioactivity", scale = 3.7e10, prefixes = 1, default = "GBq", link = "Curie (unit)", }, ["Rd"] = { _name1 = "rutherford", _symbol = "Rd", utype = "radioactivity", scale = 1e6, prefixes = 1, default = "MBq", link = "Rutherford (unit)", }, ["cm/h"] = { name1 = "centimetre per hour", name1_us = "centimeter per hour", name2 = "centimetres per hour", name2_us = "centimeters per hour", symbol = "cm/h", utype = "speed", scale = 2.7777777777777775e-6, default = "in/h", link = "Metre per second", }, ["cm/s"] = { name1 = "centimetre per second", name1_us = "centimeter per second", name2 = "centimetres per second", name2_us = "centimeters per second", symbol = "cm/s", utype = "speed", scale = 0.01, default = "in/s", link = "Metre per second", }, ["cm/year"] = { name1 = "centimetre per year", name1_us = "centimeter per year", name2 = "centimetres per year", name2_us = "centimeters per year", symbol = "cm/year", utype = "speed", scale = 3.168873850681143e-10, default = "in/year", link = "Orders of magnitude (speed)", }, ["foot/s"] = { name1 = "foot per second", name2 = "foot per second", symbol = "ft/s", utype = "speed", scale = 0.3048, default = "m/s", }, ["ft/min"] = { name1 = "foot per minute", name2 = "feet per minute", symbol = "ft/min", utype = "speed", scale = 0.00508, default = "m/min", link = "Feet per second", }, ["ft/s"] = { name1 = "foot per second", name2 = "feet per second", symbol = "ft/s", utype = "speed", scale = 0.3048, default = "m/s", link = "Feet per second", }, ["furlong per fortnight"] = { name2 = "furlongs per fortnight", symbol = "furlong per fortnight", usename = 1, utype = "speed", scale = 0.00016630952380952381, default = "km/h mph", link = "FFF system", }, ["in/h"] = { name1 = "inch per hour", name2 = "inches per hour", symbol = "in/h", utype = "speed", scale = 7.0555555555555559e-6, default = "cm/h", link = "Inch", }, ["in/s"] = { name1 = "inch per second", name2 = "inches per second", symbol = "in/s", utype = "speed", scale = 0.0254, default = "cm/s", link = "Inch", }, ["in/year"] = { name1 = "inch per year", name2 = "inches per year", symbol = "in/year", utype = "speed", scale = 8.0489395807301024e-10, default = "cm/year", link = "Orders of magnitude (speed)", }, ["isp"] = { name1 = "second", symbol = "s", utype = "speed", scale = 9.80665, default = "km/s", link = "Specific impulse", }, ["km/d"] = { name1 = "kilometre per day", name1_us = "kilometer per day", name2 = "kilometres per day", name2_us = "kilometers per day", symbol = "km/d", utype = "speed", scale = 1.1574074074074074e-2, default = "mi/d", link = "Orders of magnitude (speed)", }, ["km/h"] = { name1 = "kilometre per hour", name1_us = "kilometer per hour", name2 = "kilometres per hour", name2_us = "kilometers per hour", symbol = "km/h", utype = "speed", scale = 0.27777777777777779, default = "mph", link = "Kilometres per hour", }, ["km/s"] = { name1 = "kilometre per second", name1_us = "kilometer per second", name2 = "kilometres per second", name2_us = "kilometers per second", symbol = "km/s", utype = "speed", scale = 1000, default = "mi/s", link = "Metre per second", }, ["kn"] = { name1 = "knot", symbol = "kn", utype = "speed", scale = 0.51444444444444448, default = "km/h mph", link = "Knot (unit)", }, ["kNs/kg"] = { name2 = "kN&#8209;s/kg", symbol = "kN&#8209;s/kg", utype = "speed", scale = 1000, default = "isp", link = "Specific impulse", }, ["m/min"] = { name1 = "metre per minute", name1_us = "meter per minute", name2 = "metres per minute", name2_us = "meters per minute", symbol = "m/min", utype = "speed", scale = 0.016666666666666666, default = "ft/min", link = "Metre per second", }, ["m/s"] = { name1 = "metre per second", name1_us = "meter per second", name2 = "metres per second", name2_us = "meters per second", symbol = "m/s", utype = "speed", scale = 1, default = "ft/s", }, ["Mach"] = { name2 = "Mach", symbol = "Mach", utype = "speed", builtin = "mach", scale = 0, iscomplex= true, default = "km/h mph", link = "Mach number", }, ["mi/d"] = { name1 = "mile per day", name2 = "miles per day", symbol = "mi/d", utype = "speed", scale = 1.8626666666666667e-2, default = "km/d", link = "Orders of magnitude (speed)", }, ["mi/s"] = { name1 = "mile per second", name2 = "miles per second", symbol = "mi/s", utype = "speed", scale = 1609.344, default = "km/s", link = "Mile", }, ["mm/h"] = { name1 = "millimetre per hour", name1_us = "millimeter per hour", name2 = "millimetres per hour", name2_us = "millimeters per hour", symbol = "mm/h", utype = "speed", scale = 2.7777777777777781e-7, default = "in/h", link = "Metre per second", }, ["mph"] = { name1 = "mile per hour", name2 = "miles per hour", symbol = "mph", utype = "speed", scale = 0.44704, default = "km/h", link = "Miles per hour", }, ["Ns/kg"] = { name2 = "N&#8209;s/kg", symbol = "N&#8209;s/kg", utype = "speed", scale = 1, default = "isp", link = "Specific impulse", }, ["si tsfc"] = { name2 = "g/(kN⋅s)", symbol = "g/(kN⋅s)", utype = "speed", scale = 9.9999628621379242e-7, invert = -1, iscomplex= true, default = "tsfc", link = "Thrust specific fuel consumption", }, ["tsfc"] = { name2 = "lb/(lbf⋅h)", symbol = "lb/(lbf⋅h)", utype = "speed", scale = 2.832545036049801e-5, invert = -1, iscomplex= true, default = "si tsfc", link = "Thrust specific fuel consumption", }, ["cm/y"] = { target = "cm/year", }, ["cm/yr"] = { target = "cm/year", }, ["in/y"] = { target = "in/year", }, ["in/yr"] = { target = "in/year", }, ["knot"] = { target = "kn", }, ["knots"] = { target = "kn", }, ["kph"] = { target = "km/h", }, ["mi/h"] = { target = "mph", }, ["mm/s"] = { per = { "mm", "s" }, utype = "speed", default = "in/s", link = "Metre per second", }, ["C"] = { name1 = "degree Celsius", name2 = "degrees Celsius", symbol = "°C", usesymbol= 1, utype = "temperature", scale = 1, offset = -273.15, iscomplex= true, istemperature= true, default = "F", link = "Celsius", }, ["F"] = { name1 = "degree Fahrenheit", name2 = "degrees Fahrenheit", symbol = "°F", usesymbol= 1, utype = "temperature", scale = 0.55555555555555558, offset = 32-273.15*(9/5), iscomplex= true, istemperature= true, default = "C", link = "Fahrenheit", }, ["K"] = { _name1 = "kelvin", _symbol = "K", usesymbol= 1, utype = "temperature", scale = 1, offset = 0, iscomplex= true, istemperature= true, prefixes = 1, default = "C F", link = "Kelvin", }, ["keVT"] = { name1 = "kiloelectronvolt", symbol = "keV", utype = "temperature", scale = 11604518.121550081, offset = 0, iscomplex= true, default = "MK", defkey = "keVT", linkey = "keVT", link = "Electronvolt", }, ["R"] = { name1 = "degree Rankine", name2 = "degrees Rankine", symbol = "°R", usesymbol= 1, utype = "temperature", scale = 0.55555555555555558, offset = 0, iscomplex= true, istemperature= true, default = "K F C", link = "Rankine scale", }, ["Celsius"] = { target = "C", }, ["°C"] = { target = "C", }, ["°F"] = { target = "F", }, ["°R"] = { target = "R", }, ["C-change"] = { name1 = "degree Celsius change", name2 = "degrees Celsius change", symbol = "°C", usesymbol= 1, utype = "temperature change", scale = 1, default = "F-change", link = "Celsius", }, ["F-change"] = { name1 = "degree Fahrenheit change", name2 = "degrees Fahrenheit change", symbol = "°F", usesymbol= 1, utype = "temperature change", scale = 0.55555555555555558, default = "C-change", link = "Fahrenheit", }, ["K-change"] = { name1 = "kelvin change", name2 = "kelvins change", symbol = "K", usesymbol= 1, utype = "temperature change", scale = 1, default = "F-change", link = "Kelvin", }, ["°C-change"] = { target = "C-change", }, ["°F-change"] = { target = "F-change", }, ["century"] = { name1 = "century", name2 = "centuries", symbol = "ha", utype = "time", scale = 3155760000, default = "Gs", }, ["d"] = { name1 = "day", symbol = "d", utype = "time", scale = 86400, default = "ks", }, ["decade"] = { name1 = "decade", symbol = "daa", utype = "time", scale = 315576000, default = "Ms", }, ["dog year"] = { name1 = "dog year", symbol = "dog yr", utype = "time", scale = 220903200, default = "years", link = "List of unusual units of measurement#Dog year", }, ["fortnight"] = { symbol = "fortnight", usename = 1, utype = "time", scale = 1209600, default = "week", }, ["h"] = { name1 = "hour", symbol = "h", utype = "time", scale = 3600, default = "ks", }, ["long billion year"] = { name1 = "billion years", name2 = "billion years", symbol = "Ta", utype = "time", scale = 31557600000000000000, default = "Es", link = "Annum", }, ["millennium"] = { name1 = "millennium", name2 = "millennia", symbol = "ka", utype = "time", scale = 31557600000, default = "Gs", }, ["milliard year"] = { name1 = "milliard years", name2 = "milliard years", symbol = "Ga", utype = "time", scale = 31557600000000000, default = "Ps", link = "Annum", }, ["million year"] = { name1 = "million years", name2 = "million years", symbol = "Ma", utype = "time", scale = 31557600000000, default = "Ts", link = "Annum", }, ["min"] = { name1 = "minute", symbol = "min", utype = "time", scale = 60, default = "s", }, ["month"] = { symbol = "month", usename = 1, utype = "time", scale = 2629800, default = "Ms", }, ["months"] = { name1 = "month", symbol = "mo", utype = "time", scale = 2629800, default = "year", }, ["s"] = { _name1 = "second", _symbol = "s", utype = "time", scale = 1, prefixes = 1, default = "v < 7200 ! min ! h", link = "Second", }, ["short billion year"] = { name1 = "billion years", name2 = "billion years", symbol = "Ga", utype = "time", scale = 31557600000000000, default = "Ps", link = "Annum", }, ["short trillion year"] = { name1 = "trillion years", name2 = "trillion years", symbol = "Ta", utype = "time", scale = 31557600000000000000, default = "Es", link = "Annum", }, ["thousand million year"] = { name1 = "thousand million years", name2 = "thousand million years", symbol = "Ga", utype = "time", scale = 31557600000000000, default = "Ps", link = "Annum", }, ["wk"] = { symbol = "week", usename = 1, utype = "time", scale = 604800, default = "Ms", }, ["year"] = { name1 = "year", symbol = "a", utype = "time", scale = 31557600, default = "Ms", link = "Annum", }, ["years"] = { name1 = "year", symbol = "yr", utype = "time", scale = 31557600, default = "Ms", link = "Annum", }, ["byr"] = { target = "short billion year", }, ["day"] = { target = "d", }, ["days"] = { target = "d", }, ["dog yr"] = { target = "dog year", }, ["Gyr"] = { target = "thousand million year", }, ["hour"] = { target = "h", }, ["hours"] = { target = "h", }, ["kMyr"] = { target = "thousand million year", }, ["kmyr"] = { target = "thousand million year", }, ["kyr"] = { target = "millennium", }, ["long byr"] = { target = "long billion year", }, ["minute"] = { target = "min", }, ["minutes"] = { target = "min", }, ["mth"] = { target = "month", }, ["Myr"] = { target = "million year", }, ["myr"] = { target = "million year", }, ["sec"] = { target = "s", }, ["second"] = { target = "s", }, ["seconds"] = { target = "s", }, ["tmyr"] = { target = "thousand million year", }, ["tryr"] = { target = "short trillion year", }, ["tyr"] = { target = "millennium", }, ["week"] = { target = "wk", }, ["weeks"] = { target = "wk", }, ["yr"] = { target = "year", }, ["kg.m"] = { name1 = "kilogram metre", name1_us = "kilogram meter", symbol = "kg⋅m", utype = "torque", scale = 9.80665, default = "Nm lbft", link = "Kilogram metre (torque)", }, ["kgf.m"] = { name1 = "kilogram force-metre", name1_us = "kilogram force-meter", symbol = "kgf⋅m", utype = "torque", scale = 9.80665, default = "Nm lbfft", link = "Kilogram metre (torque)", }, ["kgm"] = { name1 = "kilogram metre", name1_us = "kilogram meter", symbol = "kg⋅m", utype = "torque", scale = 9.80665, default = "Nm lbfft", link = "Kilogram metre (torque)", }, ["kpm"] = { name1 = "kilopond metre", name1_us = "kilopond meter", symbol = "kp⋅m", utype = "torque", scale = 9.80665, default = "Nm lbft", link = "Kilogram metre (torque)", }, ["lb-fft"] = { name1 = "pound force-foot", name2 = "pound force-feet", symbol = "ft⋅lb<sub>f</sub>", utype = "torque", scale = 1.3558179483314004, default = "Nm", link = "Pound-foot (torque)", }, ["lb.ft"] = { name1 = "pound force-foot", name2 = "pound force-feet", symbol = "lb⋅ft", utype = "torque", scale = 1.3558179483314004, default = "Nm", link = "Pound-foot (torque)", }, ["lb.in"] = { name1 = "pound force-inch", symbol = "lb⋅in", utype = "torque", scale = 0.1129848290276167, default = "mN.m", link = "Pound-foot (torque)", }, ["lbfft"] = { name1 = "pound force-foot", name2 = "pound force-feet", symbol = "lbf⋅ft", utype = "torque", scale = 1.3558179483314004, default = "Nm", link = "Pound-foot (torque)", }, ["lbft"] = { name1 = "pound-foot", name2 = "pound-feet", symbol = "lb⋅ft", utype = "torque", scale = 1.3558179483314004, default = "Nm", link = "Pound-foot (torque)", }, ["m.kg-f"] = { name1 = "metre kilogram-force", name1_us = "meter kilogram-force", name2 = "metre kilograms-force", name2_us = "meter kilograms-force", symbol = "m⋅kg<sub>f</sub>", utype = "torque", scale = 9.80665, default = "Nm lbfft", link = "Kilogram metre (torque)", }, ["m.kgf"] = { name1 = "metre kilogram-force", name1_us = "meter kilogram-force", name2 = "metre kilograms-force", name2_us = "meter kilograms-force", symbol = "m⋅kgf", utype = "torque", scale = 9.80665, default = "Nm lbfft", link = "Kilogram metre (torque)", }, ["mN.m"] = { name1 = "millinewton-metre", name1_us = "millinewton-meter", symbol = "mN⋅m", utype = "torque", scale = 0.001, default = "lb.in", link = "Newton-metre", }, ["Nm"] = { _name1 = "newton-metre", _name1_us= "newton-meter", _symbol = "N⋅m", utype = "torque", alttype = "energy", scale = 1, prefixes = 1, default = "lbfft", link = "Newton-metre", }, ["kN/m"] = { per = { "kN", "-m-stiff" }, utype = "torque", default = "lbf/in", }, ["lbf/in"] = { per = { "lbf", "-in-stiff" }, utype = "torque", default = "kN/m", }, ["lb-f.ft"] = { target = "lb-fft", }, ["lbf.ft"] = { target = "lbfft", }, ["lbf·ft"] = { target = "lbfft", }, ["lb·ft"] = { target = "lb.ft", }, ["mkg-f"] = { target = "m.kg-f", }, ["mkgf"] = { target = "m.kgf", }, ["N.m"] = { target = "Nm", }, ["N·m"] = { target = "Nm", }, ["ton-mile"] = { symbol = "ton-mile", usename = 1, utype = "transportation", scale = 1.4599723182105602, default = "tkm", }, ["tkm"] = { name1 = "tonne-kilometre", name1_us = "tonne-kilometer", symbol = "tkm", utype = "transportation", scale = 1, default = "ton-mile", }, ["-12USoz(mL)serve"] = { name1_us = "12&nbsp;U.S.&nbsp;fl&nbsp;oz (355&nbsp;mL) serving", symbol = "12&nbsp;US&nbsp;fl&nbsp;oz (355&nbsp;mL) serving", sym_us = "12&nbsp;U.S.&nbsp;fl&nbsp;oz (355&nbsp;mL) serving", utype = "volume", scale = 0.00035488235475000004, default = "mL", link = "Beverage can#Standard sizes", }, ["-12USoz(ml)serve"] = { name1_us = "12&nbsp;U.S.&nbsp;fl&nbsp;oz (355&nbsp;ml) serving", symbol = "12&nbsp;US&nbsp;fl&nbsp;oz (355&nbsp;ml) serving", sym_us = "12&nbsp;U.S.&nbsp;fl&nbsp;oz (355&nbsp;ml) serving", utype = "volume", scale = 0.00035488235475000004, default = "ml", link = "Beverage can#Standard sizes", }, ["-12USozserve"] = { name1_us = "12&nbsp;U.S.&nbsp;fl&nbsp;oz serving", symbol = "12&nbsp;US&nbsp;fl&nbsp;oz serving", sym_us = "12&nbsp;U.S.&nbsp;fl&nbsp;oz serving", utype = "volume", scale = 0.00035488235475000004, default = "mL", link = "Beverage can#Standard sizes", }, ["acre-foot"] = { name1 = "acre-foot", name2 = "acre-foot", symbol = "acre⋅ft", utype = "volume", scale = 1233.48183754752, default = "m3", }, ["acre-ft"] = { name1 = "acre-foot", name2 = "acre-feet", symbol = "acre⋅ft", utype = "volume", scale = 1233.48183754752, default = "m3", }, ["AUtbsp"] = { name1 = "Australian tablespoon", symbol = "AU&nbsp;tbsp", utype = "volume", scale = 0.000020, default = "ml", }, ["Bcuft"] = { name1 = "billion cubic foot", name2 = "billion cubic feet", symbol = "billion cu&nbsp;ft", utype = "volume", scale = 28316846.592, default = "Gl", link = "Cubic foot", }, ["bdft"] = { name1 = "board foot", name2 = "board feet", symbol = "bd&nbsp;ft", utype = "volume", scale = 0.0023597372167, default = "m3", }, ["board feet"] = { name2 = "board feet", symbol = "board foot", usename = 1, utype = "volume", scale = 0.0023597372167, default = "m3", }, ["board foot"] = { name2 = "board foot", symbol = "board foot", usename = 1, utype = "volume", scale = 0.0023597372167, default = "m3", }, ["cc"] = { name1 = "cubic centimetre", name1_us = "cubic centimeter", symbol = "cc", utype = "volume", scale = 0.000001, default = "cuin", }, ["CID"] = { name1 = "cubic inch", name2 = "cubic inches", symbol = "cu&nbsp;in", utype = "volume", scale = 0.000016387064, default = "cc", link = "Cubic inch#Engine displacement", }, ["cord"] = { symbol = "cord", utype = "volume", scale = 3.624556363776, default = "m3", link = "Cord (unit)", }, ["cufoot"] = { name1 = "cubic foot", name2 = "cubic foot", symbol = "cu&nbsp;ft", utype = "volume", scale = 0.028316846592, default = "m3", }, ["cuft"] = { name1 = "cubic foot", name2 = "cubic feet", symbol = "cu&nbsp;ft", utype = "volume", scale = 0.028316846592, default = "m3", }, ["cuin"] = { name1 = "cubic inch", name2 = "cubic inches", symbol = "cu&nbsp;in", utype = "volume", scale = 0.000016387064, default = "cm3", }, ["cumi"] = { name1 = "cubic mile", symbol = "cu&nbsp;mi", utype = "volume", scale = 4168181825.440579584, default = "km3", }, ["cuyd"] = { name1 = "cubic yard", symbol = "cu&nbsp;yd", utype = "volume", scale = 0.764554857984, default = "m3", }, ["firkin"] = { symbol = "firkin", usename = 1, utype = "volume", scale = 0.04091481, default = "L impgal USgal", link = "Firkin (unit)", }, ["foot3"] = { target = "cufoot", }, ["Goilbbl"] = { name1 = "billion barrels", name2 = "billion barrels", symbol = "Gbbl", utype = "volume", scale = 158987294.928, default = "v * 1.58987294928 < 10 ! e6 ! e9 ! m3", link = "Barrel (unit)#Oil barrel", }, ["gr water"] = { name1 = "grains water", name2 = "grains water", symbol = "gr H<sub>2</sub>O", utype = "volume", scale = 0.00000006479891, default = "cm3", link = "Grain (unit)", }, ["grt"] = { name1 = "gross register ton", symbol = "grt", utype = "volume", scale = 2.8316846592, default = "m3", link = "Gross register tonnage", }, ["impbbl"] = { name1 = "imperial barrel", symbol = "imp&nbsp;bbl", utype = "volume", scale = 0.16365924, default = "L impgal USgal", link = "Barrel (unit)", }, ["impbsh"] = { name1 = "imperial bushel", symbol = "imp&nbsp;bsh", utype = "volume", scale = 0.03636872, default = "L impgal USdrygal", }, ["impbu"] = { name1 = "imperial bushel", symbol = "imp&nbsp;bu", utype = "volume", scale = 0.03636872, default = "m3", }, ["impgal"] = { name1 = "imperial gallon", symbol = "imp&nbsp;gal", utype = "volume", scale = 0.00454609, default = "L USgal", }, ["impgi"] = { name1 = "gill", symbol = "gi", utype = "volume", scale = 0.0001420653125, default = "ml USoz", link = "Gill (unit)", }, ["impkenning"] = { name1 = "imperial kenning", symbol = "kenning", utype = "volume", scale = 0.01818436, default = "L USdrygal", link = "Kenning (unit)", }, ["impoz"] = { name1 = "imperial fluid ounce", symbol = "imp&nbsp;fl&nbsp;oz", utype = "volume", scale = 0.0000284130625, default = "ml USoz", }, ["imppk"] = { name1 = "imperial peck", symbol = "pk", utype = "volume", scale = 0.00909218, default = "L USdrygal", link = "Peck", }, ["imppt"] = { name1 = "imperial pint", symbol = "imp&nbsp;pt", utype = "volume", scale = 0.00056826125, default = "L", }, ["impqt"] = { name1 = "imperial quart", symbol = "imp&nbsp;qt", utype = "volume", scale = 0.0011365225, default = "ml USoz", customary= 3, }, ["kilderkin"] = { symbol = "kilderkin", usename = 1, utype = "volume", scale = 0.08182962, default = "L impgal USgal", }, ["koilbbl"] = { name1 = "thousand barrels", name2 = "thousand barrels", symbol = "kbbl", utype = "volume", scale = 158.987294928, default = "v * 1.58987294928 < 10 ! ! e3 ! m3", link = "Barrel (unit)#Oil barrel", }, ["L"] = { _name1 = "litre", _name1_us= "liter", _symbol = "L", utype = "volume", scale = 0.001, prefixes = 1, default = "impgal USgal", link = "Litre", }, ["l"] = { _name1 = "litre", _name1_us= "liter", _symbol = "l", utype = "volume", scale = 0.001, prefixes = 1, default = "impgal USgal", link = "Litre", }, ["ll"] = { name1 = "litre", name1_us = "liter", symbol = "l", utype = "volume", scale = 0.001, default = "impgal USgal", }, ["m3"] = { _name1 = "cubic metre", _name1_us= "cubic meter", _symbol = "m<sup>3</sup>", prefix_position= 7, utype = "volume", scale = 1, prefixes = 3, default = "cuft", link = "Cubic metre", }, ["Mbbl"] = { name1 = "thousand barrels", name2 = "thousand barrels", symbol = "Mbbl", utype = "volume", scale = 158.987294928, default = "v * 1.58987294928 < 10 ! e3 ! ! m3", link = "Barrel (unit)#Oil barrel", }, ["MMoilbbl"] = { name1 = "million barrels", name2 = "million barrels", symbol = "MMbbl", utype = "volume", scale = 158987.294928, default = "v * 1.58987294928 < 10 ! e3 ! e6 ! m3", link = "Barrel (unit)#Oil barrel", }, ["Moilbbl"] = { name1 = "million barrels", name2 = "million barrels", symbol = "Mbbl", utype = "volume", scale = 158987.294928, default = "v * 1.58987294928 < 10 ! e3 ! e6 ! m3", link = "Barrel (unit)#Oil barrel", }, ["MTON"] = { name1 = "measurement ton", symbol = "MTON", utype = "volume", scale = 1.13267386368, default = "m3", }, ["MUSgal"] = { name1 = "million US gallons", name1_us = "million U.S. gallons", name2 = "million US gallons", name2_us = "million U.S. gallons", symbol = "million US&nbsp;gal", sym_us = "million U.S.&nbsp;gal", utype = "volume", scale = 3785.411784, default = "Ml", link = "US gallon", }, ["oilbbl"] = { name1 = "barrel", symbol = "bbl", utype = "volume", scale = 0.158987294928, default = "m3", link = "Barrel (unit)#Oil barrel", }, ["stere"] = { symbol = "stere", usename = 1, utype = "volume", scale = 1, default = "cuft", }, ["tmcft"] = { name2 = "tmcft", symbol = "tmcft", utype = "volume", scale = 28316846.592, default = "km3", }, ["Tmcft"] = { name1 = "thousand million cubic feet", name2 = "thousand million cubic feet", symbol = "tmcft", utype = "volume", scale = 28316846.592, default = "km3", link = "Tmcft", }, ["Toilbbl"] = { name1 = "trillion barrels", name2 = "trillion barrels", symbol = "Tbbl", utype = "volume", scale = 158987294928, default = "v * 1.58987294928 < 10 ! e9 ! e12 ! m3", link = "Barrel (unit)#Oil barrel", }, ["USbbl"] = { name1 = "US barrel", name1_us = "U.S. barrel", symbol = "US&nbsp;bbl", sym_us = "U.S.&nbsp;bbl", utype = "volume", scale = 0.119240471196, default = "L USgal impgal", link = "Barrel (unit)", }, ["USbeerbbl"] = { name1 = "US beer barrel", name1_us = "U.S. beer barrel", symbol = "US&nbsp;bbl", sym_us = "U.S.&nbsp;bbl", utype = "volume", scale = 0.117347765304, default = "L USgal impgal", link = "Barrel (unit)", }, ["USbsh"] = { name1 = "US bushel", name1_us = "U.S. bushel", symbol = "US&nbsp;bsh", sym_us = "U.S.&nbsp;bsh", utype = "volume", scale = 0.03523907016688, default = "L USdrygal impgal", link = "Bushel", }, ["USbu"] = { name1 = "US bushel", name1_us = "U.S. bushel", symbol = "US&nbsp;bu", sym_us = "U.S.&nbsp;bu", utype = "volume", scale = 0.03523907016688, default = "L USdrygal impgal", link = "Bushel", }, ["USdrybbl"] = { name1 = "US dry barrel", name1_us = "U.S. dry barrel", symbol = "US&nbsp;dry&nbsp;bbl", sym_us = "U.S.&nbsp;dry&nbsp;bbl", utype = "volume", scale = 0.11562819898508, default = "m3", link = "Barrel (unit)", }, ["USdrygal"] = { name1 = "US dry gallon", name1_us = "U.S. dry gallon", symbol = "US&nbsp;dry&nbsp;gal", sym_us = "U.S.&nbsp;dry&nbsp;gal", utype = "volume", scale = 0.00440488377086, default = "L", link = "Gallon", }, ["USdrypt"] = { name1 = "US dry pint", name1_us = "U.S. dry pint", symbol = "US&nbsp;dry&nbsp;pt", sym_us = "U.S.&nbsp;dry&nbsp;pt", utype = "volume", scale = 0.0005506104713575, default = "ml", link = "Pint", }, ["USdryqt"] = { name1 = "US dry quart", name1_us = "U.S. dry quart", symbol = "US&nbsp;dry&nbsp;qt", sym_us = "U.S.&nbsp;dry&nbsp;qt", utype = "volume", scale = 0.001101220942715, default = "ml", link = "Quart", }, ["USflgal"] = { name1 = "US gallon", name1_us = "U.S. gallon", symbol = "US fl gal", sym_us = "U.S.&nbsp;fl&nbsp;gal", utype = "volume", scale = 0.003785411784, default = "L impgal", link = "Gallon", }, ["USgal"] = { name1 = "US gallon", name1_us = "U.S. gallon", symbol = "US&nbsp;gal", sym_us = "U.S.&nbsp;gal", utype = "volume", scale = 0.003785411784, default = "L impgal", }, ["USgi"] = { name1 = "gill", symbol = "gi", utype = "volume", scale = 0.0001182941183, default = "ml impoz", link = "Gill (unit)", }, ["USkenning"] = { name1 = "US kenning", name1_us = "U.S. kenning", symbol = "US&nbsp;kenning", sym_us = "U.S.&nbsp;kenning", utype = "volume", scale = 0.01761953508344, default = "L impgal", link = "Kenning (unit)", }, ["USmin"] = { name1 = "US minim", name1_us = "U.S. minim", symbol = "US&nbsp;min", sym_us = "U.S.&nbsp;min", utype = "volume", scale = 0.000000061611519921875, default = "ml", link = "Minim (unit)", }, ["USoz"] = { name1 = "US fluid ounce", name1_us = "U.S. fluid ounce", symbol = "US&nbsp;fl&nbsp;oz", sym_us = "U.S.&nbsp;fl&nbsp;oz", utype = "volume", scale = 0.0000295735295625, default = "ml", }, ["USpk"] = { name1 = "US peck", name1_us = "U.S. peck", symbol = "US&nbsp;pk", sym_us = "U.S.&nbsp;pk", utype = "volume", scale = 0.00880976754172, default = "L impgal", link = "Peck", }, ["USpt"] = { name1 = "US pint", name1_us = "U.S. pint", symbol = "US&nbsp;pt", sym_us = "U.S.&nbsp;pt", utype = "volume", scale = 0.000473176473, default = "L imppt", link = "Pint", }, ["USqt"] = { name1 = "US quart", name1_us = "U.S. quart", symbol = "US&nbsp;qt", sym_us = "U.S.&nbsp;qt", utype = "volume", scale = 0.000946352946, default = "ml", link = "Quart", customary= 1, }, ["USquart"] = { name1 = "US quart", name1_us = "U.S. quart", symbol = "US&nbsp;qt", sym_us = "U.S.&nbsp;qt", utype = "volume", scale = 0.000946352946, default = "ml impoz", link = "Quart", }, ["UStbsp"] = { name1 = "US tablespoon", name1_us = "U.S. tablespoon", symbol = "US&nbsp;tbsp", sym_us = "U.S.&nbsp;tbsp", utype = "volume", scale = 1.4786764781250001e-5, default = "ml", }, ["winecase"] = { symbol = "case", usename = 1, utype = "volume", scale = 0.009, default = "L", link = "Case (goods)", }, ["*U.S.drygal"] = { target = "USdrygal", sp_us = true, customary= 2, }, ["*U.S.gal"] = { target = "USgal", sp_us = true, customary= 2, }, ["+USdrygal"] = { target = "USdrygal", customary= 1, }, ["+usfloz"] = { target = "USoz", link = "Fluid ounce", customary= 1, }, ["+USgal"] = { target = "USgal", customary= 1, }, ["+USoz"] = { target = "USoz", customary= 1, }, ["@impgal"] = { target = "impgal", link = "Gallon", customary= 3, }, ["acre feet"] = { target = "acre-ft", }, ["acre foot"] = { target = "acre-foot", }, ["acre ft"] = { target = "acre-ft", }, ["acre-feet"] = { target = "acre-ft", }, ["acre.foot"] = { target = "acre-foot", }, ["acre.ft"] = { target = "acre-ft", }, ["acre·ft"] = { target = "acre-ft", }, ["bushels"] = { target = "USbsh", }, ["cid"] = { target = "CID", }, ["ft3"] = { target = "cuft", symbol = "ft<sup>3</sup>", }, ["gal"] = { target = "USgal", }, ["gallon"] = { shouldbe = "Use %{USgal%} for US gallons or %{impgal%} for imperial gallons (not %{gallon%})", }, ["gallons"] = { shouldbe = "Use %{USgal%} for US gallons or %{impgal%} for imperial gallons (not %{gallons%})", }, ["Gcuft"] = { target = "e9cuft", }, ["impfloz"] = { target = "impoz", }, ["Impgal"] = { target = "impgal", }, ["in3"] = { target = "cuin", symbol = "in<sup>3</sup>", }, ["hm³"] = { target = "hm3", }, ["kcuft"] = { target = "e3cuft", }, ["kcum"] = { target = "e3m3", }, ["km³"] = { target = "km3", }, ["liter"] = { target = "L", sp_us = true, }, ["liters"] = { target = "L", sp_us = true, }, ["litre"] = { target = "L", }, ["litres"] = { target = "L", }, ["Mcuft"] = { target = "e6cuft", }, ["Mcum"] = { target = "e6m3", }, ["Mft3"] = { target = "e6cuft", }, ["mi3"] = { target = "cumi", symbol = "mi<sup>3</sup>", }, ["m³"] = { target = "m3", }, ["Pcuft"] = { target = "e15cuft", }, ["pt"] = { shouldbe = "Use %{USpt%} for US pints or %{imppt%} for imperial pints (not %{pt%})", }, ["qt"] = { shouldbe = "Use %{USqt%} for US quarts or %{impqt%} for imperial quarts (not %{qt%})", }, ["Tcuft"] = { target = "e12cuft", }, ["Tft3"] = { target = "e12cuft", }, ["U.S.bbl"] = { target = "USbbl", sp_us = true, default = "L U.S.gal impgal", }, ["U.S.beerbbl"] = { target = "USbeerbbl", sp_us = true, default = "L U.S.gal impgal", }, ["U.S.bsh"] = { target = "USbsh", sp_us = true, default = "L U.S.drygal impgal", }, ["U.S.bu"] = { target = "USbu", sp_us = true, default = "L U.S.drygal impgal", }, ["U.S.drybbl"] = { target = "USdrybbl", sp_us = true, }, ["U.S.drygal"] = { target = "USdrygal", sp_us = true, }, ["U.S.drypt"] = { target = "USdrypt", sp_us = true, }, ["U.S.dryqt"] = { target = "USdryqt", sp_us = true, }, ["U.S.flgal"] = { target = "USflgal", sp_us = true, }, ["U.S.floz"] = { target = "USoz", sp_us = true, }, ["U.S.gal"] = { target = "USgal", sp_us = true, link = "U.S. gallon", }, ["u.s.gal"] = { target = "USgal", sp_us = true, link = "U.S. gallon", }, ["U.S.gi"] = { target = "USgi", sp_us = true, }, ["U.S.kenning"] = { target = "USkenning", sp_us = true, }, ["U.S.oz"] = { target = "USoz", sp_us = true, }, ["U.S.pk"] = { target = "USpk", sp_us = true, }, ["U.S.pt"] = { target = "USpt", sp_us = true, }, ["U.S.qt"] = { target = "USqt", sp_us = true, default = "L impqt", customary= 2, }, ["usbbl"] = { target = "USbbl", }, ["usbeerbbl"] = { target = "USbeerbbl", }, ["usbsh"] = { target = "USbsh", }, ["usbu"] = { target = "USbu", }, ["usdrybbl"] = { target = "USdrybbl", }, ["usdrygal"] = { target = "USdrygal", }, ["usdrypt"] = { target = "USdrypt", }, ["usdryqt"] = { target = "USdryqt", }, ["USfloz"] = { target = "USoz", }, ["usfloz"] = { target = "USoz", }, ["USGAL"] = { target = "USgal", }, ["usgal"] = { target = "USgal", }, ["usgi"] = { target = "USgi", }, ["uskenning"] = { target = "USkenning", }, ["usoz"] = { target = "USoz", }, ["uspk"] = { target = "USpk", }, ["uspt"] = { target = "USpt", }, ["usqt"] = { target = "USqt", }, ["yd3"] = { target = "cuyd", symbol = "yd<sup>3</sup>", }, ["cuft/sqmi"] = { per = { "cuft", "sqmi" }, utype = "volume per unit area", default = "m3/km2", }, ["m3/ha"] = { name1 = "cubic metre per hectare", name1_us = "cubic meter per hectare", name2 = "cubic metres per hectare", name2_us = "cubic meters per hectare", symbol = "m<sup>3</sup>/ha", utype = "volume per unit area", scale = 0.0001, default = "USbu/acre", link = "Hectare", }, ["m3/km2"] = { per = { "m3", "km2" }, utype = "volume per unit area", default = "cuft/sqmi", }, ["U.S.gal/acre"] = { per = { "U.S.gal", "acre" }, utype = "volume per unit area", default = "m3/km2", }, ["USbu/acre"] = { name2 = "US bushels per acre", symbol = "US bushel per acre", usename = 1, utype = "volume per unit area", scale = 8.7077638761350888e-6, default = "m3/ha", link = "Bushel", }, ["USgal/acre"] = { per = { "USgal", "acre" }, utype = "volume per unit area", default = "m3/km2", }, ["cuyd/mi"] = { per = { "cuyd", "mi" }, utype = "volume per unit length", default = "m3/km", }, ["m3/km"] = { per = { "m3", "km" }, utype = "volume per unit length", default = "cuyd/mi", }, ["mich"] = { combination= { "ch", "mi" }, multiple = { 80 }, utype = "length", }, ["michlk"] = { combination= { "chlk", "mi" }, multiple = { 80 }, utype = "length", }, ["michainlk"] = { combination= { "chainlk", "mi" }, multiple = { 80 }, utype = "length", }, ["miyd"] = { combination= { "yd", "mi" }, multiple = { 1760 }, utype = "length", }, ["miydftin"] = { combination= { "in", "ft", "yd", "mi" }, multiple = { 12, 3, 1760 }, utype = "length", }, ["mift"] = { combination= { "ft", "mi" }, multiple = { 5280 }, utype = "length", }, ["ydftin"] = { combination= { "in", "ft", "yd" }, multiple = { 12, 3 }, utype = "length", }, ["ydft"] = { combination= { "ft", "yd" }, multiple = { 3 }, utype = "length", }, ["ftin"] = { combination= { "in", "ft" }, multiple = { 12 }, utype = "length", }, ["footin"] = { combination= { "in", "foot" }, multiple = { 12 }, utype = "length", }, ["handin"] = { combination= { "in", "hand" }, multiple = { 4 }, utype = "length", }, ["lboz"] = { combination= { "oz", "lb" }, multiple = { 16 }, utype = "mass", }, ["stlb"] = { combination= { "lb", "st" }, multiple = { 14 }, utype = "mass", }, ["stlboz"] = { combination= { "oz", "lb", "st" }, multiple = { 16, 14 }, utype = "mass", }, ["st and lb"] = { combination= { "lb", "st" }, multiple = { 14 }, utype = "mass", }, ["GN LTf"] = { combination= { "GN", "-LTf" }, utype = "force", }, ["GN LTf STf"] = { combination= { "GN", "-LTf", "-STf" }, utype = "force", }, ["GN STf"] = { combination= { "GN", "-STf" }, utype = "force", }, ["GN STf LTf"] = { combination= { "GN", "-STf", "-LTf" }, utype = "force", }, ["kN LTf"] = { combination= { "kN", "-LTf" }, utype = "force", }, ["kN LTf STf"] = { combination= { "kN", "-LTf", "-STf" }, utype = "force", }, ["kN STf"] = { combination= { "kN", "-STf" }, utype = "force", }, ["kN STf LTf"] = { combination= { "kN", "-STf", "-LTf" }, utype = "force", }, ["LTf STf"] = { combination= { "-LTf", "-STf" }, utype = "force", }, ["MN LTf"] = { combination= { "MN", "-LTf" }, utype = "force", }, ["MN LTf STf"] = { combination= { "MN", "-LTf", "-STf" }, utype = "force", }, ["MN STf"] = { combination= { "MN", "-STf" }, utype = "force", }, ["MN STf LTf"] = { combination= { "MN", "-STf", "-LTf" }, utype = "force", }, ["STf LTf"] = { combination= { "-STf", "-LTf" }, utype = "force", }, ["L/100 km mpgimp"] = { combination= { "L/100 km", "mpgimp" }, utype = "fuel efficiency", }, ["l/100 km mpgimp"] = { combination= { "l/100 km", "mpgimp" }, utype = "fuel efficiency", }, ["L/100 km mpgUS"] = { combination= { "L/100 km", "mpgus" }, utype = "fuel efficiency", }, ["L/100 km mpgus"] = { combination= { "L/100 km", "mpgus" }, utype = "fuel efficiency", }, ["l/100 km mpgus"] = { combination= { "l/100 km", "mpgus" }, utype = "fuel efficiency", }, ["mpgimp L/100 km"] = { combination= { "mpgimp", "L/100 km" }, utype = "fuel efficiency", }, ["LT ST t"] = { combination= { "lt", "-ST", "t" }, utype = "mass", }, ["LT t ST"] = { combination= { "lt", "t", "-ST" }, utype = "mass", }, ["ST LT t"] = { combination= { "-ST", "lt", "t" }, utype = "mass", }, ["ST t LT"] = { combination= { "-ST", "t", "lt" }, utype = "mass", }, ["t LT ST"] = { combination= { "t", "lt", "-ST" }, utype = "mass", }, ["ton"] = { combination= { "LT", "ST" }, utype = "mass", }, ["kPa kg/cm2"] = { combination= { "kPa", "kgf/cm2" }, utype = "pressure", }, ["kPa lb/in2"] = { combination= { "kPa", "-lb/in2" }, utype = "pressure", }, ["floz"] = { combination= { "impoz", "USoz" }, utype = "volume", }, } --------------------------------------------------------------------------- -- Do not change the data in this table because it is created by running -- -- a script that reads the wikitext from a wiki page (see note above). -- --------------------------------------------------------------------------- local default_exceptions = { -- Prefixed units with a default different from that of the base unit. -- Each key item is a prefixed symbol (unitcode for engineering notation). ["cm<sup>2</sup>"] = "sqin", ["dm<sup>2</sup>"] = "sqin", ["e3acre"] = "km2", ["e3m2"] = "e6sqft", ["e6acre"] = "km2", ["e6ha"] = "e6acre", ["e6km2"] = "e6sqmi", ["e6m2"] = "e6sqft", ["e6sqft"] = "v * 9.290304 < 100 ! e3 ! e6 ! m2", ["e6sqmi"] = "e6km2", ["hm<sup>2</sup>"] = "acre", ["km<sup>2</sup>"] = "sqmi", ["mm<sup>2</sup>"] = "sqin", ["aJ"] = "eV", ["e3BTU"] = "MJ", ["e6BTU"] = "GJ", ["EJ"] = "kWh", ["eV"] = "aJ", ["feV"] = "yJ", ["fJ"] = "keV", ["GeV"] = "nJ", ["GJ"] = "kWh", ["keV"] = "fJ", ["MeV"] = "pJ", ["meV"] = "zJ", ["MJ"] = "kWh", ["neV"] = "yJ", ["PeV"] = "mJ", ["peV"] = "yJ", ["PJ"] = "kWh", ["pJ"] = "MeV", ["TeV"] = "μJ", ["TJ"] = "kWh", ["YJ"] = "kWh", ["yJ"] = "μeV", ["ZJ"] = "kWh", ["zJ"] = "meV", ["μeV"] = "yJ", ["e12cuft/a"] = "v * 2.8316846592 < 100 ! e9 ! e12 ! m3/a", ["e12cuft/d"] = "v * 2.8316846592 < 100 ! e9 ! e12 ! m3/d", ["e12m3/a"] = "Tcuft/a", ["e12m3/d"] = "Tcuft/d", ["e3cuft/a"] = "v * 2.8316846592 < 100 ! ! e3 ! m3/a", ["e3cuft/d"] = "v * 2.8316846592 < 100 ! ! e3 ! m3/d", ["e3cuft/s"] = "v * 2.8316846592 < 100 ! ! e3 ! m3/s", ["e3m3/a"] = "v < 28.316846592 ! k ! M ! cuft/a", ["e3m3/d"] = "v < 28.316846592 ! k ! M ! cuft/d", ["e3m3/s"] = "v < 28.316846592 ! k ! M ! cuft/s", ["e3USgal/a"] = "v * 3.785411784 < 1000 ! ! e3 ! m3/a", ["e6cuft/a"] = "v * 2.8316846592 < 100 ! e3 ! e6 ! m3/a", ["e6cuft/d"] = "v * 2.8316846592 < 100 ! e3 ! e6 ! m3/d", ["e6cuft/s"] = "v * 2.8316846592 < 100 ! e3 ! e6 ! m3/s", ["e6m3/a"] = "v < 28.316846592 ! M ! G ! cuft/a", ["e6m3/d"] = "v < 28.316846592 ! M ! G ! cuft/d", ["e6m3/s"] = "v < 28.316846592 ! e6 ! e9 ! cuft/s", ["e6USgal/a"] = "v * 3.785411784 < 1000 ! e3 ! e6 ! m3/a", ["e9cuft/a"] = "m3/a", ["e9cuft/d"] = "v * 2.8316846592 < 100 ! e6 ! e9 ! m3/d", ["e9m3/a"] = "v < 28.316846592 ! G ! T ! cuft/a", ["e9m3/d"] = "v < 28.316846592 ! G ! T ! cuft/d", ["e9m3/s"] = "v < 28.316846592 ! e9 ! e12 ! cuft/s", ["e9USgal/a"] = "v * 3.785411784 < 1000 ! e6 ! e9 ! m3/a", ["e9USgal/s"] = "v * 3.785411784 < 1000 ! e6 ! e9 ! m3/s", ["nN"] = "gr-f", ["μN"] = "gr-f", ["mN"] = "oz-f", ["am"] = "in", ["cm"] = "in", ["dam"] = "ft", ["dm"] = "in", ["e12km"] = "e12mi", ["e12mi"] = "e12km", ["e3AU"] = "ly", ["e3km"] = "e3mi", ["e3mi"] = "e3km", ["e6km"] = "e6mi", ["e6mi"] = "e6km", ["e9km"] = "AU", ["e9mi"] = "e9km", ["Em"] = "mi", ["fm"] = "in", ["Gm"] = "mi", ["hm"] = "ft", ["km"] = "mi", ["mm"] = "in", ["Mm"] = "mi", ["nm"] = "in", ["Pm"] = "mi", ["pm"] = "in", ["Tm"] = "mi", ["Ym"] = "mi", ["ym"] = "in", ["Zm"] = "mi", ["zm"] = "in", ["μm"] = "in", ["e12lb"] = "v * 4.5359237 < 10 ! Mt ! Gt", ["e3lb"] = "v * 4.5359237 < 10 ! kg ! t", ["e3ozt"] = "v * 0.311034768 < 10 ! kg ! t", ["e3t"] = "LT ST", ["e6carat"] = "t", ["e6lb"] = "v * 4.5359237 < 10 ! t ! kilotonne", ["e6ozt"] = "lb kg", ["e6ST"] = "Mt", ["e6t"] = "LT ST", ["e9lb"] = "v * 4.5359237 < 10 ! kilotonne ! Mt", ["e9t"] = "LT ST", ["Gg"] = "lb", ["kg"] = "lb", ["mg"] = "gr", ["Mg"] = "LT ST", ["ng"] = "gr", ["μg"] = "gr", ["mBq"] = "fCi", ["kBq"] = "nCi", ["MBq"] = "μCi", ["GBq"] = "mCi", ["TBq"] = "Ci", ["PBq"] = "kCi", ["EBq"] = "kCi", ["fCi"] = "mBq", ["pCi"] = "Bq", ["nCi"] = "Bq", ["μCi"] = "kBq", ["mCi"] = "MBq", ["kCi"] = "TBq", ["MCi"] = "PBq", ["ns"] = "μs", ["μs"] = "ms", ["ms"] = "s", ["ks"] = "h", ["Ms"] = "week", ["Gs"] = "decade", ["Ts"] = "millennium", ["Ps"] = "million year", ["Es"] = "thousand million year", ["MK"] = "keVT", ["cL"] = "impoz usoz", ["cl"] = "impoz usoz", ["cm<sup>3</sup>"] = "cuin", ["dL"] = "impoz usoz", ["dl"] = "impoz usoz", ["mm<sup>3</sup>"] = "cuin", ["dm<sup>3</sup>"] = "cuin", ["e12cuft"] = "v * 2.8316846592 < 100 ! e9 ! e12 ! m3", ["e12impgal"] = "v * 4.54609 < 1000 ! T ! P ! l", ["e12m3"] = "v < 28.316846592 ! T ! P ! cuft", ["e12U.S.gal"] = "v * 3.785411784 < 1000 ! T ! P ! l", ["e12USgal"] = "v * 3.785411784 < 1000 ! T ! P ! l", ["e15cuft"] = "v * 2.8316846592 < 100 ! e12 ! e15 ! m3", ["e15m3"] = "Pcuft", ["e3bdft"] = "v * 0.23597372167 < 100 ! e3 ! e6 ! m3", ["e3cuft"] = "v * 2.8316846592 < 100 ! ! e3 ! m3", ["e3impgal"] = "v * 4.54609 < 1000 ! k ! M ! l", ["e3m3"] = "v < 28.316846592 ! k ! M ! cuft", ["e3U.S.gal"] = "v * 3.785411784 < 1000 ! k ! M ! l", ["e3USgal"] = "v * 3.785411784 < 1000 ! k ! M ! l", ["e6bdft"] = "v * 0.23597372167 < 100 ! e3 ! e6 ! m3", ["e6cuft"] = "v * 2.8316846592 < 100 ! e3 ! e6 ! m3", ["e6cuyd"] = "v * 7.64554857984 < 10 ! e3 ! e6 ! m3", ["e6impgal"] = "v * 4.54609 < 1000 ! M ! G ! l", ["e6L"] = "USgal", ["e6m3"] = "v < 28.316846592 ! M ! G ! cuft", ["e6U.S.gal"] = "v * 3.785411784 < 1000 ! M ! G ! l", ["e6USgal"] = "v * 3.785411784 < 1000 ! M ! G ! l", ["e9bdft"] = "v * 0.23597372167 < 100 ! e6 ! e9 ! m3", ["e9cuft"] = "v * 2.8316846592 < 100 ! e6 ! e9 ! m3", ["e9impgal"] = "v * 4.54609 < 1000 ! G ! T ! l", ["e9m3"] = "v < 28.316846592 ! G ! T ! cuft", ["e9U.S.gal"] = "v * 3.785411784 < 1000 ! G ! T ! l", ["e9USgal"] = "v * 3.785411784 < 1000 ! G ! T ! l", ["GL"] = "cuft", ["Gl"] = "cuft", ["kL"] = "cuft", ["kl"] = "cuft", ["km<sup>3</sup>"] = "cumi", ["mL"] = "impoz usoz", ["ml"] = "impoz usoz", ["Ml"] = "v < 28.316846592 ! e3 ! e6 ! cuft", ["ML"] = "v < 28.316846592 ! e3 ! e6 ! cuft", ["TL"] = "cumi", ["Tl"] = "cumi", ["μL"] = "cuin", ["μl"] = "cuin", } --------------------------------------------------------------------------- -- Do not change the data in this table because it is created by running -- -- a script that reads the wikitext from a wiki page (see note above). -- --------------------------------------------------------------------------- local link_exceptions = { -- Prefixed units with a linked article different from that of the base unit. -- Each key item is a prefixed symbol (not unitcode). ["mm<sup>2</sup>"] = "Square millimetre", ["cm<sup>2</sup>"] = "Square centimetre", ["dm<sup>2</sup>"] = "Square decimetre", ["km<sup>2</sup>"] = "Square kilometre", ["kJ"] = "Kilojoule", ["MJ"] = "Megajoule", ["GJ"] = "Gigajoule", ["TJ"] = "Terajoule", ["fm"] = "Femtometre", ["pm"] = "Picometre", ["nm"] = "Nanometre", ["μm"] = "Micrometre", ["mm"] = "Millimetre", ["cm"] = "Centimetre", ["dm"] = "Decimetre", ["dam"] = "Decametre", ["hm"] = "Hectometre", ["km"] = "Kilometre", ["Mm"] = "Megametre", ["Gm"] = "Gigametre", ["Tm"] = "Terametre", ["Pm"] = "Petametre", ["Em"] = "Exametre", ["Zm"] = "Zettametre", ["Ym"] = "Yottametre", ["μg"] = "Microgram", ["mg"] = "Milligram", ["kg"] = "Kilogram", ["Mg"] = "Tonne", ["yW"] = "Yoctowatt", ["zW"] = "Zeptowatt", ["aW"] = "Attowatt", ["fW"] = "Femtowatt", ["pW"] = "Picowatt", ["nW"] = "Nanowatt", ["μW"] = "Microwatt", ["mW"] = "Milliwatt", ["kW"] = "Kilowatt", ["MW"] = "Megawatt", ["GW"] = "Gigawatt", ["TW"] = "Terawatt", ["PW"] = "Petawatt", ["EW"] = "Exawatt", ["ZW"] = "Zettawatt", ["YW"] = "Yottawatt", ["as"] = "Attosecond", ["fs"] = "Femtosecond", ["ps"] = "Picosecond", ["ns"] = "Nanosecond", ["μs"] = "Microsecond", ["ms"] = "Millisecond", ["ks"] = "Kilosecond", ["Ms"] = "Megasecond", ["Gs"] = "Gigasecond", ["Ts"] = "Terasecond", ["Ps"] = "Petasecond", ["Es"] = "Exasecond", ["Zs"] = "Zettasecond", ["Ys"] = "Yottasecond", ["mm<sup>3</sup>"] = "Cubic millimetre", ["cm<sup>3</sup>"] = "Cubic centimetre", ["dm<sup>3</sup>"] = "Cubic decimetre", ["dam<sup>3</sup>"] = "Cubic decametre", ["km<sup>3</sup>"] = "Cubic kilometre", ["μL"] = "Microlitre", ["μl"] = "Microlitre", ["mL"] = "Millilitre", ["ml"] = "Millilitre", ["cL"] = "Centilitre", ["cl"] = "Centilitre", ["dL"] = "Decilitre", ["dl"] = "Decilitre", ["daL"] = "Decalitre", ["dal"] = "Decalitre", ["hL"] = "Hectolitre", ["hl"] = "Hectolitre", ["kL"] = "Kilolitre", ["kl"] = "Kilolitre", ["ML"] = "Megalitre", ["Ml"] = "Megalitre", ["GL"] = "Gigalitre", ["Gl"] = "Gigalitre", ["TL"] = "Teralitre", ["Tl"] = "Teralitre", ["PL"] = "Petalitre", ["Pl"] = "Petalitre", } --------------------------------------------------------------------------- -- Do not change the data in this table because it is created by running -- -- a script that reads the wikitext from a wiki page (see note above). -- --------------------------------------------------------------------------- local per_unit_fixups = { -- Automatically created per units of form "x/y" may have their unit type -- changed, for example, "length/time" is changed to "speed". -- Other adjustments can also be specified. ["/area"] = "per unit area", ["/volume"] = "per unit volume", ["area/area"] = "area per unit area", ["energy/length"] = "energy per unit length", ["energy/mass"] = "energy per unit mass", ["energy/time"] = { utype = "power", link = "Power (physics)" }, ["energy/volume"] = "energy per unit volume", ["force/area"] = { utype = "pressure", link = "Pressure" }, ["length/length"] = { utype = "gradient", link = "Grade (slope)" }, ["length/time"] = { utype = "speed", link = "Speed" }, ["length/time/time"] = { utype = "acceleration", link = "Acceleration" }, ["mass/area"] = { utype = "pressure", multiplier = 9.80665 }, ["mass/length"] = "linear density", ["mass/mass"] = "concentration", ["mass/power"] = "mass per unit power", ["mass/time"] = "mass per unit time", ["mass/volume"] = { utype = "density", link = "Density" }, ["power/mass"] = "power per unit mass", ["power/volume"] = { link = "Power density" }, ["pressure/length"] = "fracture gradient", ["speed/time"] = { utype = "acceleration", link = "Acceleration" }, ["volume/area"] = "volume per unit area", ["volume/length"] = "volume per unit length", ["volume/time"] = "flow", } return { all_units = all_units, default_exceptions = default_exceptions, link_exceptions = link_exceptions, per_unit_fixups = per_unit_fixups, } hqgudow086bv1ct4yxtqfzm8bjmx0b1 Module:Convert/text 828 34734 126093 2026-07-15T10:54:16Z Fongcwele 16873 Created page with "-- Text used by Module:Convert for enwiki. -- This is a separate module to simplify translation for use on another wiki. -- See [[:en:Template:Convert/Transwiki guide]] if copying to another wiki. -- Some units accept an SI prefix before the unit code, such as "kg" for kilogram. local SIprefixes = { -- The prefix field is what the prefix should be, if different from the prefix used. ['Q'] = { exponent = 30, name = 'quetta', }, ['R'] = { exponent = 27,..." 126093 Scribunto text/plain -- Text used by Module:Convert for enwiki. -- This is a separate module to simplify translation for use on another wiki. -- See [[:en:Template:Convert/Transwiki guide]] if copying to another wiki. -- Some units accept an SI prefix before the unit code, such as "kg" for kilogram. local SIprefixes = { -- The prefix field is what the prefix should be, if different from the prefix used. ['Q'] = { exponent = 30, name = 'quetta', }, ['R'] = { exponent = 27, name = 'ronna', }, ['Y'] = { exponent = 24, name = 'yotta', }, ['Z'] = { exponent = 21, name = 'zetta', }, ['E'] = { exponent = 18, name = 'exa' , }, ['P'] = { exponent = 15, name = 'peta' , }, ['T'] = { exponent = 12, name = 'tera' , }, ['G'] = { exponent = 9, name = 'giga' , }, ['M'] = { exponent = 6, name = 'mega' , }, ['k'] = { exponent = 3, name = 'kilo' , }, ['h'] = { exponent = 2, name = 'hecto', }, ['da']= { exponent = 1, name = 'deca' , name_us = 'deka' }, ['d'] = { exponent = -1, name = 'deci' , }, ['c'] = { exponent = -2, name = 'centi', }, ['m'] = { exponent = -3, name = 'milli', }, ['μ'] = { exponent = -6, name = 'micro', }, -- key = 'GREEK SMALL LETTER MU' (U+03BC) utf-8 CE BC ['µ'] = { exponent = -6, name = 'micro', prefix = 'μ' }, -- key = 'MICRO SIGN' (U+00B5) utf-8 C2 B5 ['u'] = { exponent = -6, name = 'micro', prefix = 'μ' }, -- not an SI prefix, but allow for people typing this ['n'] = { exponent = -9, name = 'nano' , }, ['p'] = { exponent =-12, name = 'pico' , }, ['f'] = { exponent =-15, name = 'femto', }, ['a'] = { exponent =-18, name = 'atto' , }, ['z'] = { exponent =-21, name = 'zepto', }, ['y'] = { exponent =-24, name = 'yocto', }, ['r'] = { exponent =-27, name = 'ronto', }, ['q'] = { exponent =-30, name = 'quecto', }, } -- Some units can be qualified with one of the following prefixes, when linked. local customary_units = { { "US", link = "United States customary units" }, { "U.S.", link = "United States customary units" }, { "imperial", link = "Imperial units" }, { "imp", link = "Imperial units" }, } -- Names when using engineering notation (a prefix of "eN" where N is a number; example "e6km"). -- key = { "name", link = "article title", exponent = numeric_key_value } -- If lk=on and link is defined, the name of the number will appear as a link. local eng_scales = { ["3"] = { "thousand", exponent = 3 }, ["6"] = { "million", exponent = 6 }, ["9"] = { "billion", link = "1000000000 (number)", exponent = 9 }, ["12"] = { "trillion", link = "1000000000000 (number)", exponent = 12 }, ["15"] = { "quadrillion", link = "1000000000000000 (number)", exponent = 15 }, } local all_categories = { unit = "[[Category:Convert errors]]", option = "[[Category:Convert errors]]", warning = '[[Category:Convert invalid options]]', tracking = '[[Category:Convert tracking]]', } -- For some error messages, the following puts the wanted style around -- each unit code marked like '...%{ft%}...'. local unitcode_regex = '%%([{}])' local unitcode_replace = { ['{'] = '"', ['}'] = '"' } -- no longer need the more elaborate substitute used before 2013-09-28 -- All messages that may be displayed if a problem occurs. local all_messages = { -- Message format string: $1=title, $2=text, $3=category, $4=anchor. -- Each displayed message starts with "Convert:" so can easily locate by searching article. cvt_format = '<sup class="noprint Inline-Template" style="white-space:nowrap;">[<i>[[Help:Convert messages#$4|<span title="Convert: $1">convert: $2</span>]]</i>]</sup>$3<span class="error"></span>', cvt_format2 = '<sup class="noprint Inline-Template" style="white-space:nowrap;">[[Help:Convert messages#$4|<span title="Convert: $1">$2</span>]]</sup>$3<span class="error"></span>', cvt_format_preview = '<strong class="error">Error in convert: $1 [[Help:Convert messages#$4|(help)]]</strong>$3', -- Each of following messages is a table: -- { [1] = 'title', -- mouseover title text -- [2] = 'text', -- link text displayed in article -- [3] = 'category key', -- key to lookup category in all_categories -- [4] = 'anchor', -- anchor for link to relevant section on help page -- regex = gsub_regex, -- replace = gsub_table, -- } Mouseover title text Link text CatKey Anchor cvt_bad_input = { 'input "$1" must be a number and unit' , 'invalid input' , 'option', 'invalid_input' }, cvt_bad_num = { 'Value "$1" must be a number' , 'invalid number' , 'option', 'invalid_number' }, cvt_big_prec = { 'Precision "$1" is too large' , 'precision too large' , 'option', 'precision_too_large' }, cvt_invalid_num = { 'Number has overflowed' , 'number overflow' , 'option', 'number_overflow' }, cvt_no_num = { 'Needs the number to be converted' , 'needs a number' , 'option', 'needs_number' }, cvt_no_num2 = { 'Needs another number for a range' , 'needs another number', 'option', 'needs_another_number' }, cvt_bad_altitude = { '"$1" needs an integer' , 'invalid altitude' , 'option', 'invalid_altitude' }, cvt_bad_frac = { '"$1" needs an integer above 1' , 'invalid fraction' , 'option', 'invalid_fraction' }, cvt_bad_prec = { 'Precision "$1" must be an integer' , 'invalid precision' , 'option', 'invalid_precision' }, cvt_bad_sigfig = { '"$1" needs a positive integer' , 'invalid sigfig' , 'option', 'invalid_sigfig' }, cvt_empty_option = { 'Ignored empty option "$1"' , 'empty option' , 'option', 'empty_option' }, cvt_deprecated = { 'Option "$1" is deprecated' , '*' , 'option', 'deprecated_option', format = 'cvt_format2', nowarn = true }, cvt_no_spell = { 'Spelling is not available' , 'bug, ask for help' , 'option', 'ask_for_help' }, cvt_unknown_option = { 'Ignored invalid option "$1"' , 'invalid option' , 'option', 'invalid_option' }, cvt_wd_fail = { 'Unable to access Wikidata' , 'wikidata problem' , 'option', 'wikidata_problem' }, cvt_bad_default = { 'Unit "$1" has an invalid default' , 'bug, ask for help' , 'unit' , 'ask_for_help' }, cvt_bad_unit = { 'Unit "$1" is invalid here' , 'unit invalid here' , 'unit' , 'unit_invalid_here' }, cvt_no_default = { 'Unit "$1" has no default output unit' , 'bug, ask for help' , 'unit' , 'ask_for_help' }, cvt_no_unit = { 'Needs name of unit' , 'needs unit name' , 'unit' , 'needs_unit_name' }, cvt_unknown = { 'Unit name "$1" is not known' , 'unknown unit' , 'unit' , 'unknown_unit' }, cvt_should_be = { '$1' , 'ambiguous unit' , 'unit' , 'ambiguous_unit', regex = unitcode_regex, replace = unitcode_replace }, cvt_mismatch = { 'Cannot convert "$1" to "$2"' , 'unit mismatch' , 'unit' , 'unit_mismatch' }, cvt_bug_convert = { 'Bug: Cannot convert between specified units', 'bug, ask for help' , 'unit' , 'ask_for_help' }, cvt_lookup = { 'Unit "$1" is incorrectly defined' , 'bug, ask for help' , 'unit' , 'ask_for_help' }, } -- Text to join input value/unit with output value/unit. local disp_joins = { -- [1]=before output, [2]=after output, [3]=between outputs in a combination; default "; " -- [wantname] gives default abbr=off ["or"] = { " or " , "" , " or ", wantname = true }, ["sqbr-sp"] = { " [" , "]" }, ["sqbr-nbsp"] = { "&nbsp;[" , "]" }, ["comma"] = { ", " , "" , ", " }, ["semicolon"] = { "; " , "" }, ["slash-sp"] = { " / " , "" , wantname = true }, ["slash-nbsp"] = { "&nbsp;/ ", "" , wantname = true }, ["slash-nosp"] = { "/" , "" , wantname = true }, ["b"] = { " (" , ")" }, ["(or)"] = { " (" , ")", " or " }, ["br"] = { "<br />" , "" , wantname = true }, ["br()"] = { "<br />(" , ")", wantname = true }, } -- Text to separate values in a range. local range_types = { -- Specifying a table requires either: -- * "off" and "on" values (for "abbr=off" and "abbr=on"), or -- * "input" and "output" values (for LHS and RHS); -- other fields are optional. -- When "adj=on|abbr=off" applies, spaces in range text are replaced with hyphens. -- With "exception = true", that also occurs with "adj=on|abbr=on". -- If "adj" is defined here, that text (unchanged) is used with "adj=on". ["+"] = " + ", [","] = ",&nbsp;", [", and"] = ", and ", [", or"] = ", or ", ["by"] = " by ", ["-"] = "–", ["to about"] = " to about ", ["and"] = { off = " and ", on = " and ", exception = true }, ["and(-)"] = { input = " and ", output = "–" }, ["or"] = { off = " or " , on = " or " , exception = true }, ["to"] = { off = " to " , on = " to " , exception = true }, ["to(-)"] = { input = "&nbsp;to ", output = "–" }, ["+/-"] = { off = "&nbsp;±&nbsp;", on = "&nbsp;±&nbsp;", adj = "&nbsp;±&nbsp;", is_range_change = true }, ["by(x)"] = { input = " by ", output = " ×&nbsp;", out_range_x = true }, ["x"] = { off = " by ", on = " ×&nbsp;", abbr_range_x = true }, ["xx"] = "&nbsp;×&nbsp;", ["*"] = "×", ["/"] = "&thinsp;/&thinsp;", -- for a table of high/low temperatures with {{convert|83|/|63|F|disp=br()|abbr=values}} } local range_aliases = { -- ["alternative name for a range"] = "standard range name" ["–"] = "-", ["&ndash;"] = "-", ["×"] = "x", ["&times;"] = "x", ["±"] = "+/-", ["&plusmn;"] = "+/-", } -- Convert accepts range text delimited with whitespace, for example, {{convert|1 to 2|ft}}. -- In addition, the following "words" are accepted without spaces, for example, {{convert|1-2|ft}}. -- Words must be in correct order for searching, for example, 'x' after 'xx'. local range_words = { '-', '–', 'xx', 'x', '*' } local ranges = { types = range_types, aliases = range_aliases, words = range_words, } -- Valid option names. local en_option_name = { -- ["local text for option name"] = "en name used in this module" ["$"] = "$", ["abbr"] = "abbr", ["adj"] = "adj", ["altitude_ft"] = "altitude_ft", ["altitude_m"] = "altitude_m", ["comma"] = "comma", ["debug"] = "debug", ["disp"] = "disp", ["error"] = "error", ["frac"] = "frac", ["input"] = "input", ["lang"] = "lang", ["link"] = "lk", ["lk"] = "lk", ["order"] = "order", ["qid"] = "qid", ["qual"] = "qual", ["qualifier"] = "qual", ["round"] = "round", ["sigfig"] = "sigfig", ["sing"] = "adj", -- "sing" is an old alias for "adj" ["sortable"] = "sortable", ["sp"] = "sp", ["spell"] = "spell", ["stylein"] = "stylein", ["styleout"] = "styleout", ["tracking"] = "tracking", } -- Valid option values. -- Convention: parms.opt_xxx refers to an option that is set here -- (not intended to be set by the template which invokes this module). -- Example: At enwiki, "abbr" includes: -- ["values"] = "opt_values" -- As a result, if the template uses abbr=values, Module:Convert sets: -- parms["opt_values"] = true -- parms["abbr"] = nil -- Therefore parms.abbr will be nil, or will have one of the listed values -- that do not start with "opt_". -- An option value of form "xxx?" is the same as "xxx" but shows the input as deprecated. -- Options removed in January 2018 with remnants still in Module:Convert: -- abbr=mos (in a range, repeat the input unit) -- adj=1 (set opt_singular to make the unit name singular when 0 < abs(value) <= 1) local en_option_value = { ["$"] = 'TEXT', -- TEXT should be a currency symbol that will be used instead of "$" ["abbr"] = { -- ["local text for option value"] = "en value used in this module" ["def"] = "", -- ignored (some wrapper templates call convert with "abbr=def" to mean "default abbreviation") ["h"] = "on", -- abbr=on + use "h" for hand unit (default) ["hh"] = "opt_hand_hh", -- abbr=on + use "hh" for hand unit ["in"] = "in", -- use symbol for LHS unit ["none"] = "off", -- old name for "off" ["off"] = "off", -- use name for all units ["on"] = "on", -- use symbol for all units ["out"] = "out", -- use symbol for RHS unit (default) ["unit"] = "unit", -- abbr=on but abbreviate units only: e6km → million km (not ×10⁶ km) ["values"] = "opt_values", -- show only input and output numbers, not units ["~"] = "opt_also_symbol", -- show input unit symbol as well as name }, ["adj"] = { ["mid"] = "opt_adjectival, opt_adj_mid", -- adj=on with user-specified text after input unit (between input and output) ["off"] = "", -- ignored (off is the default) ["on"] = "opt_adjectival", -- unit name is singular and hyphenated ["pre"] = "opt_one_preunit", -- user-specified text before input unit ["ri0"] = "opt_ri=0", -- round input with precision = 0 ["ri1"] = "opt_ri=1", -- round input with precision = 1 ["ri2"] = "opt_ri=2", -- round input with precision = 2 ["ri3"] = "opt_ri=3", -- round input with precision = 3 ["~"] = "opt_also_symbol", -- same as abbr=~ so can have {{convert|1|C|K|abbr=off|adj=~}} }, ["altitude_ft"] = 'INTEGER', ["altitude_m"] = 'INTEGER', ["comma"] = { ["5"] = "opt_comma5", -- only use numsep grouping if 5 or more digits ["gaps"] = "opt_gaps", -- use gaps, not numsep, to separate groups of digits ["gaps3"] = "opt_gaps, opt_gaps3", -- group only in threes rather than default of no gap before a single digit after decimal mark ["off"] = "opt_nocomma", -- no numsep in input or output numbers }, ["debug"] = { ["yes"] = "opt_sortable_debug", -- make the normally hidden sort key visible }, ["disp"] = { ["5"] = "opt_round=5?", -- round output value to nearest 5 ["b"] = "b", -- join: '(...)' ["(or)"] = "(or)", -- join: '(...)' with 'or' between outputs in a combination ["br"] = "br", -- join: '<br />' ["br()"] = "br()", -- join: '<br />(...)' ["comma"] = "comma", -- join: ',' ["flip"] = "opt_flip", -- reverse order of input/output ["number"] = "opt_output_number_only", -- display output value (not input, and not output symbol/name) ["or"] = "or", -- join: 'or' ["out"] = "opt_output_only", ["output number only"] = "opt_output_number_only", ["output only"] = "opt_output_only", ["preunit"] = "opt_two_preunits", -- user-specified text before input and output units ["semicolon"] = "semicolon", -- join: ';' ["sqbr"] = "sqbr", -- join: '[...]' ["table"] = "opt_table", -- output is suitable for a table cell with align="right" ["tablecen"] = "opt_tablecen", -- output is suitable for a table cell with align="center" ["unit"] = "opt_input_unit_only", -- display input symbol/name (not output, and not input value) ["unit or text"] = "opt_input_unit_only, opt_ignore_error", -- display input symbol/name, or given unit code if not known ["unit2"] = "opt_output_unit_only", ["x"] = "x", -- join: <first>...<second> (user-specified text) }, ["error"] = 'TEXT', -- TEXT is any text that will be returned if the conversion fails, instead of an error occurring ["frac"] = 'INTEGER', ["input"] = 'TEXT', -- TEXT should be <value><space><unitcode> or <wikidata-property-id> ["lang"] = { -- language for output digits (both en and local digits are always accepted for input) ["en"] = "opt_lang_en", -- use en digits for numbers, regardless of local language ["local"] = "opt_lang_local", -- use local digits for numbers (default, although config can change default to en) }, ["lk"] = { ["in"] = "in", -- link LHS unit name or symbol ["off"] = "off", -- do not link: same as default except for hand unit ["on"] = "on", -- link all unit names or symbols (but not twice for the same unit) ["out"] = "out", -- link RHS unit name or symbol }, ["order"] = { ["flip"] = "opt_flip", -- reverse order of input/output ["out"] = "opt_order_out", -- do not show input; instead, use order in output combination, with the first output shown as the input }, ["qid"] = 'TEXT', -- TEXT should be a Wikidata Q item identifier ["qual"] = 'TEXT', -- TEXT should be a Wikidata Q item identifier ["round"] = { ["0.5"] = "opt_round=0.5", -- round output value to nearest 0.5 ["5"] = "opt_round=5", -- round output value to nearest 5 ["10"] = "opt_round=10", -- round output value to nearest 10 (same as but clearer than "|-1") ["25"] = "opt_round=25", -- round output value to nearest 25 ["50"] = "opt_round=50", -- round output value to nearest 50 ["each"] = "opt_round_each", -- using default precision in a range, round each output separately (default uses highest precision of each item in range) }, ["sigfig"] = 'INTEGER', ["sortable"] = { ["off"] = "", -- ignored (off is the default) ["on"] = "opt_sortable_on", -- output sort key for use in a sortable table, based on value from converting to a standard base unit ["debug"] = "opt_sortable_on, opt_sortable_debug", -- |sortable=debug is the same as |sortable=on|debug=yes }, ["sp"] = { ["us"] = "opt_sp_us", -- use U.S. spelling (like "meter" instead of default "metre") }, ["spell"] = { -- only English spelling is supported; not scientific notation; only some fractions ["in"] = "opt_spell_in", -- spell input value in words ["In"] = "opt_spell_in, opt_spell_upper", -- spell input value in words with first letter uppercase ["on"] = "opt_spell_in, opt_spell_out", -- spell input and output values in words ["On"] = "opt_spell_in, opt_spell_out, opt_spell_upper", -- same, with first letter of first word in result uppercase ["us"] = "opt_sp_us", -- use U.S. spelling; same as sp=us so spell=us also works }, ["stylein"] = 'TEXT', ["styleout"] = 'TEXT', ["tracking"] = 'TEXT', } local titles = { ["frac"] = "Fraction/styles.css", ["sfrac"] = "Sfrac/styles.css", } return { SIprefixes = SIprefixes, all_categories = all_categories, all_messages = all_messages, currency = { ['$'] = true, ['£'] = true, ['€'] = true, ['₱'] = true, ['₽'] = true, ['¥'] = true }, customary_units = customary_units, disp_joins = disp_joins, en_option_name = en_option_name, en_option_value = en_option_value, eng_scales = eng_scales, ranges = ranges, titles = titles, } 8m007l7jx7mdwwt2dfy66a3yo6no2nr Template:Anchor 10 34735 126094 2026-07-15T10:56:04Z Fongcwele 16873 Created page with "{{<includeonly>safesubst:</includeonly>#invoke:anchor|main}}<noinclude> {{Documentation}} <!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --> </noinclude>" 126094 wikitext text/x-wiki {{<includeonly>safesubst:</includeonly>#invoke:anchor|main}}<noinclude> {{Documentation}} <!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --> </noinclude> enb6c4d9v8ozj2bh2wvmo7698r1sot4 Module:Anchor 828 34736 126095 2026-07-15T10:57:15Z Fongcwele 16873 Created page with "-- This module implements {{anchor}}. local getArgs = require('Module:Arguments').getArgs local tableTools = require('Module:TableTools') local p = {} function p.main(frame) -- Get the positional arguments from #invoke, remove any nil values, -- and pass them to p._main. local args = getArgs(frame) local argArray = tableTools.compressSparseArray(args) return p._main(unpack(argArray)) end function p._main(...) -- Generate the list of anchors. local anchors = {...." 126095 Scribunto text/plain -- This module implements {{anchor}}. local getArgs = require('Module:Arguments').getArgs local tableTools = require('Module:TableTools') local p = {} function p.main(frame) -- Get the positional arguments from #invoke, remove any nil values, -- and pass them to p._main. local args = getArgs(frame) local argArray = tableTools.compressSparseArray(args) return p._main(unpack(argArray)) end function p._main(...) -- Generate the list of anchors. local anchors = {...} local ret = {} for _, anchor in ipairs(anchors) do ret[#ret + 1] = '<span class="anchor" id="' .. anchor .. '"></span>' end return table.concat(ret) end return p qn9l8z10vmc8ghld7804a9aaffg6g8o Template:Convert abbreviated 10 34737 126096 2026-07-15T10:59:21Z Fongcwele 16873 Created page with "<includeonly>{{{{{♥|safesubst:}}}#invoke:convert|convert|abbr=on always|warnings=1}}</includeonly><noinclude>{{documentation}}</noinclude>" 126096 wikitext text/x-wiki <includeonly>{{{{{♥|safesubst:}}}#invoke:convert|convert|abbr=on always|warnings=1}}</includeonly><noinclude>{{documentation}}</noinclude> a9iqlg8hn8h767etzaou9sv20yz40sm