<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="id">
	<id>https://wiki.javasatu.com/index.php?action=history&amp;feed=atom&amp;title=Modul%3AYear_in_other_calendars</id>
	<title>Modul:Year in other calendars - Riwayat revisi</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.javasatu.com/index.php?action=history&amp;feed=atom&amp;title=Modul%3AYear_in_other_calendars"/>
	<link rel="alternate" type="text/html" href="https://wiki.javasatu.com/index.php?title=Modul:Year_in_other_calendars&amp;action=history"/>
	<updated>2026-04-13T05:28:03Z</updated>
	<subtitle>Riwayat revisi halaman ini di wiki</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id>https://wiki.javasatu.com/index.php?title=Modul:Year_in_other_calendars&amp;diff=1804&amp;oldid=prev</id>
		<title>Adminjavasatu: ←Membuat halaman berisi '-- Load dependencies. local getArgs = require('Module:Arguments').getArgs local htmlBuilder = require( 'Module:HtmlBuilder' ) local makeNavbar = require( 'Module:Navbar' )._navbar local numToRoman = require( 'Module:Roman' ).main local japaneseEra = require( 'Module:Japanese calendar' ).era()  -- Define constants. local lang = mw.language.getContentLanguage() local currentYear = tonumber( lang:formatDate( 'Y' ) )  -------------------------------------------------...'</title>
		<link rel="alternate" type="text/html" href="https://wiki.javasatu.com/index.php?title=Modul:Year_in_other_calendars&amp;diff=1804&amp;oldid=prev"/>
		<updated>2023-09-21T13:09:47Z</updated>

		<summary type="html">&lt;p&gt;←Membuat halaman berisi &amp;#039;-- Load dependencies. local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs local htmlBuilder = require( &amp;#039;Module:HtmlBuilder&amp;#039; ) local makeNavbar = require( &amp;#039;Module:Navbar&amp;#039; )._navbar local numToRoman = require( &amp;#039;Module:Roman&amp;#039; ).main local japaneseEra = require( &amp;#039;Module:Japanese calendar&amp;#039; ).era()  -- Define constants. local lang = mw.language.getContentLanguage() local currentYear = tonumber( lang:formatDate( &amp;#039;Y&amp;#039; ) )  -------------------------------------------------...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Halaman baru&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Load dependencies.&lt;br /&gt;
local getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
local htmlBuilder = require( 'Module:HtmlBuilder' )&lt;br /&gt;
local makeNavbar = require( 'Module:Navbar' )._navbar&lt;br /&gt;
local numToRoman = require( 'Module:Roman' ).main&lt;br /&gt;
local japaneseEra = require( 'Module:Japanese calendar' ).era()&lt;br /&gt;
&lt;br /&gt;
-- Define constants.&lt;br /&gt;
local lang = mw.language.getContentLanguage()&lt;br /&gt;
local currentYear = tonumber( lang:formatDate( 'Y' ) )&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------&lt;br /&gt;
-- Helper functions&lt;br /&gt;
--------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function isInteger( num )&lt;br /&gt;
	-- Checks if a value is an integer. If so, returns the value converted to a number.&lt;br /&gt;
	-- If not, returns false.&lt;br /&gt;
    num = tonumber( num )&lt;br /&gt;
    if num and math.floor( num ) == num and num ~= math.huge then&lt;br /&gt;
        return num&lt;br /&gt;
    else&lt;br /&gt;
        return false&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function BCToNum( s )&lt;br /&gt;
	-- Mengubah string dalam format &amp;quot;n SM&amp;quot; ke &lt;br /&gt;
	-- nilai angka.&lt;br /&gt;
    if type( s ) ~= 'string' then&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
    s = mw.ustring.match( mw.ustring.upper( s ), '^([1-9]%d*)%s*SM$' )&lt;br /&gt;
    if not s then&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
    local num = tonumber( s )&lt;br /&gt;
    num = ( num - 1 ) * -1&lt;br /&gt;
    return num&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function numToBC( num )&lt;br /&gt;
	-- For BC years, returns a string with the year name appended with &amp;quot; BC&amp;quot;.&lt;br /&gt;
	-- Otherwise returns nil.&lt;br /&gt;
    num = isInteger( num )&lt;br /&gt;
    if not num then return end&lt;br /&gt;
    if num &amp;lt;= 0 then&lt;br /&gt;
        return mw.ustring.format( '%d SM', 1 - num )&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatNegative(s)&lt;br /&gt;
	-- Replaces hyphens in a string with minus signs if the hyphen comes before a number.&lt;br /&gt;
	s = mw.ustring.gsub( s, '%-(%d)', '−%1' )&lt;br /&gt;
	return s&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------&lt;br /&gt;
-- Calendar box class definition&lt;br /&gt;
--------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local calendarBox = {}&lt;br /&gt;
calendarBox.__index = calendarBox&lt;br /&gt;
&lt;br /&gt;
function calendarBox:new( init )&lt;br /&gt;
    init = type( init ) == 'table' and init or {}&lt;br /&gt;
    local obj = {}&lt;br /&gt;
    local pagename = mw.title.getCurrentTitle().text&lt;br /&gt;
    &lt;br /&gt;
    -- Set the year. If the year is specified as an argument, use that.&lt;br /&gt;
    -- Otherwise, use the page name if it is valid. If the pagename isn't&lt;br /&gt;
    -- valid, use the current year.&lt;br /&gt;
    local yearNum = isInteger( init.year )&lt;br /&gt;
    if yearNum then -- First, see if the year parameter is a number.&lt;br /&gt;
        self.year = yearNum&lt;br /&gt;
    else&lt;br /&gt;
        local yearBC = BCToNum( init.year )&lt;br /&gt;
        if yearBC then -- Second, see if the year parameter is a &amp;quot;yyyy BC&amp;quot; string.&lt;br /&gt;
            self.year = yearBC&lt;br /&gt;
        else&lt;br /&gt;
            local pageNum = isInteger( pagename )&lt;br /&gt;
            if pageNum then -- Third, see if the pagename is an integer.&lt;br /&gt;
                self.year = pageNum&lt;br /&gt;
            else&lt;br /&gt;
                local pageBC = BCToNum( pagename )&lt;br /&gt;
                if pageBC then -- Fourth, see if the pagename is a &amp;quot;yyyy BC&amp;quot; string.&lt;br /&gt;
                    self.year = pageBC&lt;br /&gt;
                else&lt;br /&gt;
                    self.year = currentYear -- If none of the above apply, use the current year.&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Set year text values.&lt;br /&gt;
    self.BCYearName = numToBC( self.year )&lt;br /&gt;
    if self.BCYearName then&lt;br /&gt;
        self.yearText = self.BCYearName&lt;br /&gt;
    else&lt;br /&gt;
        self.yearText = tostring( self.year )&lt;br /&gt;
    end&lt;br /&gt;
        &lt;br /&gt;
    -- Set other fields.&lt;br /&gt;
    self.caption = self.yearText&lt;br /&gt;
    self.footnotes = init.footnotes&lt;br /&gt;
    self.navbar = init.navbar&lt;br /&gt;
    &lt;br /&gt;
    return setmetatable( obj, {&lt;br /&gt;
        __index = self&lt;br /&gt;
    })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function calendarBox:setCaption( s )&lt;br /&gt;
	-- Sets the calendar box caption.&lt;br /&gt;
    if type( s ) ~= 'string' or s == '' then return end&lt;br /&gt;
    self.caption = s&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function calendarBox:addCalendar( obj )&lt;br /&gt;
	-- Adds a calendar or a calendar group.&lt;br /&gt;
    if type( obj ) ~= 'table' and type( obj.new ) ~= 'function' then return end -- Exit if the object is invalid.&lt;br /&gt;
    self.calendars = self.calendars or {}&lt;br /&gt;
    table.insert( self.calendars, obj )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Add an alias for adding calendar groups. The function is the same, but it might be confusing for users&lt;br /&gt;
-- to have to use the name &amp;quot;addCalendar&amp;quot; for a calendar group.&lt;br /&gt;
calendarBox.addCalendarGroup = calendarBox.addCalendar&lt;br /&gt;
&lt;br /&gt;
function calendarBox:export()&lt;br /&gt;
	-- Outputs the calendar box wikitext.&lt;br /&gt;
    local root = htmlBuilder.create( 'table' )&lt;br /&gt;
    -- Export the calendar box headers.&lt;br /&gt;
    root&lt;br /&gt;
        .addClass( 'infobox' )&lt;br /&gt;
        .addClass( 'vevent' )&lt;br /&gt;
        .css( 'width', '22em' )&lt;br /&gt;
        .tag( 'caption' )&lt;br /&gt;
            .css( 'font-size', '125%' )&lt;br /&gt;
            .tag( 'span' )&lt;br /&gt;
                .addClass( 'summary' )&lt;br /&gt;
                .addClass( 'dtstart' )&lt;br /&gt;
                .wikitext( self.caption )&lt;br /&gt;
&lt;br /&gt;
    -- Export the calendars and calendar groups. &amp;quot;calendar:export()&amp;quot; works for both kinds&lt;br /&gt;
    -- of objects. Some export functions can return nil, so we need to check for that.&lt;br /&gt;
    if type( self.calendars ) == 'table' then&lt;br /&gt;
        for i, calendar in ipairs( self.calendars ) do&lt;br /&gt;
            local calendarText = calendar:export()&lt;br /&gt;
            if type( calendarText ) == 'string' then&lt;br /&gt;
                root.wikitext( calendarText )&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Add footnotes.&lt;br /&gt;
    if type( self.footnotes ) == 'string' and self.footnotes ~= '' then&lt;br /&gt;
        root&lt;br /&gt;
            .tag( 'tr' )&lt;br /&gt;
                .tag( 'td' )&lt;br /&gt;
                    .attr( 'colspan', '2' )&lt;br /&gt;
                    .wikitext( mw.ustring.format( '&amp;lt;small&amp;gt;%s&amp;lt;/small&amp;gt;', self.footnotes ) )&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Add navbar.&lt;br /&gt;
    if type( self.navbar ) == 'string' and self.navbar ~= '' then&lt;br /&gt;
        root&lt;br /&gt;
            .tag( 'tr' )&lt;br /&gt;
                .tag( 'td' )&lt;br /&gt;
                    .attr( 'colspan', '2' )&lt;br /&gt;
                    .css( 'text-align', 'center' )&lt;br /&gt;
                    .wikitext( makeNavbar{ self.navbar } )&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return tostring( root )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------&lt;br /&gt;
-- Calendar group class definition&lt;br /&gt;
--------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--  Calendar groups are used to group different calendars together. &lt;br /&gt;
--  Previously, the template did this by including a table row with&lt;br /&gt;
--  no year value. By using objects we can do the same thing more&lt;br /&gt;
--  semantically.&lt;br /&gt;
&lt;br /&gt;
local calendarGroup = {}&lt;br /&gt;
calendarGroup.__index = calendarGroup&lt;br /&gt;
&lt;br /&gt;
function calendarGroup:new( init )&lt;br /&gt;
    init = type( init ) == 'table' and init or {}&lt;br /&gt;
    local obj = {}&lt;br /&gt;
    &lt;br /&gt;
    -- Get the heading and throw an error if it is invalid.&lt;br /&gt;
    obj.heading = init.heading&lt;br /&gt;
    if type( obj.heading ) ~= 'string' then&lt;br /&gt;
        error( 'calendarGroup: no heading detected' )&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Set the metatable and return the object.&lt;br /&gt;
    self.__index = self&lt;br /&gt;
    return setmetatable( obj, {&lt;br /&gt;
        __index = self&lt;br /&gt;
    })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function calendarGroup:addCalendar( calendar )&lt;br /&gt;
	-- Adds a calendar object to the calendar group.&lt;br /&gt;
    self.calendars = self.calendars or {}&lt;br /&gt;
    if type( calendar ) == 'table' and type( calendar.getLink ) == 'function' then&lt;br /&gt;
        table.insert( self.calendars, calendar )&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function calendarGroup:export()&lt;br /&gt;
	-- Exports the calendar group's wikitext.&lt;br /&gt;
    -- Indent and italicise each calendar's link if it exists.&lt;br /&gt;
    for i, calendar in ipairs( self.calendars ) do&lt;br /&gt;
        local link = calendar:getLink()&lt;br /&gt;
        if type( link ) == 'string' then&lt;br /&gt;
            self.calendars[ i ]:setRawLink( mw.ustring.format( &amp;quot;&amp;amp;nbsp;- ''%s''&amp;quot;, link ) )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    -- Create the heading row html and export the calendar objects.&lt;br /&gt;
    local ret = htmlBuilder.create()&lt;br /&gt;
    ret&lt;br /&gt;
        .tag( 'tr' )&lt;br /&gt;
            .tag( 'td' )&lt;br /&gt;
                .wikitext( self.heading )&lt;br /&gt;
                .done()&lt;br /&gt;
            .tag( 'td' ) -- Use a blank tag to make the html look nice.&lt;br /&gt;
                .allDone()&lt;br /&gt;
    for i, calendar in ipairs( self.calendars ) do&lt;br /&gt;
        ret.wikitext( calendar:export() )&lt;br /&gt;
    end&lt;br /&gt;
    return tostring( ret )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------&lt;br /&gt;
-- Calendar class definition&lt;br /&gt;
--------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local calendar = {}&lt;br /&gt;
calendar.__index = calendar&lt;br /&gt;
calendar.type = 'calendar'&lt;br /&gt;
&lt;br /&gt;
function calendar:new()&lt;br /&gt;
    local obj = {}&lt;br /&gt;
    return setmetatable( obj, {&lt;br /&gt;
        __index = self&lt;br /&gt;
    })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function calendar:setLink( link, display )&lt;br /&gt;
	-- Sets the calendar's wikilink, with optional display text and italics.&lt;br /&gt;
    if type( link ) ~= 'string' or link == '' then return end&lt;br /&gt;
    display = type( display ) == 'string' and display ~= '' and display&lt;br /&gt;
    if display then&lt;br /&gt;
        self.link = mw.ustring.format( '[[%s|%s]]', link, display )&lt;br /&gt;
    else&lt;br /&gt;
        self.link = mw.ustring.format( '[[%s]]', link )&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function calendar:setRawLink( s )&lt;br /&gt;
	-- Sets the calendar's wikilink as raw wikitext.&lt;br /&gt;
    if type( s ) ~= 'string' or s == '' then return end&lt;br /&gt;
    self.link = s&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function calendar:getLink()&lt;br /&gt;
	-- Returns the calendar's link value.&lt;br /&gt;
    return self.link&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function calendar:setYear( year )&lt;br /&gt;
	-- Sets a single year. Can be passed either a string or a number.&lt;br /&gt;
	-- If passed as a number, it is formatted with minus signs instead of hyphens.&lt;br /&gt;
	-- If passed as a string, no minus-sign formatting occurs; this should be done in the individual calendar definitions.&lt;br /&gt;
    if type( year ) == 'number' then&lt;br /&gt;
        year = tostring( year )&lt;br /&gt;
		self.year = formatNegative( year )&lt;br /&gt;
    elseif type( year ) == 'string' then&lt;br /&gt;
        self.year = year&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function calendar:setYearRange( year1, year2 )&lt;br /&gt;
	-- Sets a year range. Must be passed two numbers.&lt;br /&gt;
    if type( year1 ) == 'number' and type( year2 ) == 'number' then&lt;br /&gt;
		local year&lt;br /&gt;
        if year1 &amp;lt; 0 or year2 &amp;lt; 0 then -- Leave a gap for negative years to avoid having a minus sign and a dash right next to each other.&lt;br /&gt;
            year = mw.ustring.format( '%d – %d', year1, year2 )&lt;br /&gt;
			year = formatNegative( year )&lt;br /&gt;
        else&lt;br /&gt;
            year = mw.ustring.format( '%d–%d', year1, year2 )&lt;br /&gt;
        end&lt;br /&gt;
		self.year = year&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function calendar:setYearCouple( year1, year2 )&lt;br /&gt;
	-- Same as setYearRange, only with a slash (/) in the middle. Must be passed two numbers. &lt;br /&gt;
	-- Additional text possible, must be defined as follows: addtext = string.format( 'additional text or link')&lt;br /&gt;
	-- See example in Seleucid era calendar&lt;br /&gt;
	if type( year1 ) == 'number' and type( year2 ) == 'number' then&lt;br /&gt;
		local year&lt;br /&gt;
		if year1 &amp;lt; 0 or year2 &amp;lt; 0 then -- Leave no gap for negative years.&lt;br /&gt;
			year = string.format( '%d/%d %s', year1, year2, addtext )&lt;br /&gt;
			year = formatNegative( year )&lt;br /&gt;
		else&lt;br /&gt;
			year = string.format( '%d/%d %s', year1, year2, addtext )&lt;br /&gt;
		end&lt;br /&gt;
		self.year = year&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function calendar:export()&lt;br /&gt;
	-- Outputs the calendar wikitext.&lt;br /&gt;
    -- Exit if no link has been specified.&lt;br /&gt;
    local link = self.link&lt;br /&gt;
    if type( link ) ~= 'string' or link == '' then return end&lt;br /&gt;
&lt;br /&gt;
    -- If no year has been specified, set the year value to N/A.&lt;br /&gt;
    local year = self.year&lt;br /&gt;
    if type( year ) ~= 'string' or year == '' then&lt;br /&gt;
        year = &amp;quot;''N/A''&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Build the table row.&lt;br /&gt;
    local ret = htmlBuilder.create()&lt;br /&gt;
    ret&lt;br /&gt;
        .tag( 'tr' )&lt;br /&gt;
            .tag( 'td' )&lt;br /&gt;
                .wikitext( link )&lt;br /&gt;
                .done()&lt;br /&gt;
            .tag( 'td' )&lt;br /&gt;
                .wikitext( year )&lt;br /&gt;
                .allDone()&lt;br /&gt;
    return tostring( ret )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------&lt;br /&gt;
-- Build the box&lt;br /&gt;
--------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function makeCalendarBox( args )&lt;br /&gt;
    -- Initiate the box and get the year values.&lt;br /&gt;
    local init = args&lt;br /&gt;
    init.navbar = 'Tahun dalam kalender lain'&lt;br /&gt;
    local box = calendarBox:new( init )&lt;br /&gt;
    local year = box.year&lt;br /&gt;
    local yearText = box.yearText&lt;br /&gt;
&lt;br /&gt;
    -- Set the caption.&lt;br /&gt;
    box:setCaption( box.caption .. ' dalam kalender lain' )&lt;br /&gt;
&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
    -- Gregorian calendar&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    local gregorian = calendar:new()&lt;br /&gt;
    gregorian:setLink( 'Kalender Gregorian' )&lt;br /&gt;
    -- Get the year link.&lt;br /&gt;
    local gregcal = args.gregcal&lt;br /&gt;
    if type( gregcal ) == 'string' and gregcal ~= '' then&lt;br /&gt;
        gregorian.yearLink = string.format( '[[%s|%s]]', gregcal, yearText )&lt;br /&gt;
    else&lt;br /&gt;
        gregorian.yearLink = yearText&lt;br /&gt;
    end&lt;br /&gt;
    -- Set the year.&lt;br /&gt;
    gregorian.romanYear = numToRoman{ math.abs(year) } .. (year &amp;lt; 0 and ' BC' or '')&lt;br /&gt;
    if gregorian.romanYear then&lt;br /&gt;
        gregorian:setYear( string.format(&lt;br /&gt;
				[[%s&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-family: serif;&amp;quot;&amp;gt;''%s''&amp;lt;/span&amp;gt;]],&lt;br /&gt;
            gregorian.yearLink, gregorian.romanYear&lt;br /&gt;
        ) )&lt;br /&gt;
    else&lt;br /&gt;
        gregorian:setYear( gregorian.yearLink )&lt;br /&gt;
    end&lt;br /&gt;
    box:addCalendar( gregorian ) &lt;br /&gt;
&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
    -- Bahá'í calendar&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
    local bahai = calendar:new()&lt;br /&gt;
    bahai:setLink( &amp;quot;Kalender Bahá'í&amp;quot; )&lt;br /&gt;
    bahai:setYearRange( year - 1844, year - 1843 )&lt;br /&gt;
    box:addCalendar( bahai )&lt;br /&gt;
    &lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
    -- Balinese saka calendar&lt;br /&gt;
    ---------------------------------------------------------------------- &lt;br /&gt;
    local balinese = calendar:new()&lt;br /&gt;
    balinese:setLink( 'Kalender Bali' )&lt;br /&gt;
    if year - 76 &amp;gt; 0 then&lt;br /&gt;
    	balinese:setYearRange( year - 79, year - 78 )&lt;br /&gt;
    end&lt;br /&gt;
    box:addCalendar( balinese )&lt;br /&gt;
    &lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
    -- Bengali calendar&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    local bengali = calendar:new()&lt;br /&gt;
    bengali:setLink( 'Kalender Bengali' )&lt;br /&gt;
    bengali:setYear( year - 593 )&lt;br /&gt;
    box:addCalendar( bengali )&lt;br /&gt;
&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
    -- Berber calendar&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
    local berber = calendar:new()&lt;br /&gt;
    berber:setLink( 'Kalender Berber' )&lt;br /&gt;
    berber:setYear( year + 950 )&lt;br /&gt;
    box:addCalendar( berber )&lt;br /&gt;
&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
    -- Buddhist calendar&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    local buddhist = calendar:new()&lt;br /&gt;
    buddhist:setLink( 'Kalender Buddha' )&lt;br /&gt;
    buddhist:setYear( year + 544 )&lt;br /&gt;
    box:addCalendar( buddhist )&lt;br /&gt;
&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
    -- Burmese calendar&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    local burmese = calendar:new()&lt;br /&gt;
    burmese:setLink( 'Kalender Burma' )&lt;br /&gt;
    burmese:setYear( year - 638 )&lt;br /&gt;
    box:addCalendar( burmese )&lt;br /&gt;
&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
    -- Chinese calendar&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
    local chinese = calendar:new()&lt;br /&gt;
    chinese:setLink( 'Kalender Tionghoa' )&lt;br /&gt;
&lt;br /&gt;
    -- Define the information for the &amp;quot;heavenly stems&amp;quot; and &amp;quot;earthly branches&amp;quot; year cycles.&lt;br /&gt;
    -- See [[Chinese calendar#Cycle of years]] for information.&lt;br /&gt;
&lt;br /&gt;
    local heavenlyStems = {&lt;br /&gt;
        { '甲', '[[Kayu]]' },   -- 1&lt;br /&gt;
        { '乙', '[[Kayu]]' },   -- 2&lt;br /&gt;
        { '丙', '[[Api]]' },   -- 3&lt;br /&gt;
        { '丁', '[[Api]]' },   -- 4&lt;br /&gt;
        { '戊', '[[Tanah]]' },  -- 5&lt;br /&gt;
        { '己', '[[Tanah]]' },  -- 6&lt;br /&gt;
        { '庚', '[[Logam]]' },  -- 7&lt;br /&gt;
        { '辛', '[[Logam]]' },  -- 8&lt;br /&gt;
        { '壬', '[[Air]]' },  -- 9&lt;br /&gt;
        { '癸', '[[Air]]' }   -- 10&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    local earthlyBranches = {&lt;br /&gt;
        { '子', '[[Tikus (shio)|Tikus]]' },           -- 1&lt;br /&gt;
        { '丑', '[[Kerbau (shio)|Kerbau]]' },             -- 2&lt;br /&gt;
        { '寅', '[[Macan (shio)|Macan]]' },       -- 3&lt;br /&gt;
        { '卯', '[[Kelinci (shio)|Kelinci]]' },     -- 4&lt;br /&gt;
        { '辰', '[[Naga (shio)|Naga]]' },     -- 5&lt;br /&gt;
        { '巳', '[[Ular (shio)|Ular]]' },       -- 6&lt;br /&gt;
        { '午', '[[Kuda (shio)|Kuda]]' },       -- 7&lt;br /&gt;
        { '未', '[[Kambing (shio)|Kambing]]' },         -- 8&lt;br /&gt;
        { '申', '[[Kera (shio)|Kera]]' },     -- 9&lt;br /&gt;
        { '酉', '[[Ayam (shio)|Ayam]]' },   -- 10&lt;br /&gt;
        { '戌', '[[Anjing (shio)|Anjing]]' },           -- 11&lt;br /&gt;
        { '亥', '[[Babi (shio)|Babi]]' }            -- 12&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    -- Menghitung angka siklus suatu tahun. The first sexagenary year corresponds to the ''previous'' year's entry&lt;br /&gt;
    -- in [[Chinese calendar correspondence table]], as the Chinese New Year doesn't happen until Jan/Feb in&lt;br /&gt;
    -- Gregorian years.&lt;br /&gt;
    local sexagenaryYear1 = ( year - 4 ) % 60&lt;br /&gt;
    local sexagenaryYear2 = ( year - 3 ) % 60&lt;br /&gt;
    local heavenlyNum1 = sexagenaryYear1 % 10&lt;br /&gt;
    local heavenlyNum2 = sexagenaryYear2 % 10&lt;br /&gt;
    local earthlyNum1 = sexagenaryYear1 % 12&lt;br /&gt;
    local earthlyNum2 = sexagenaryYear2 % 12&lt;br /&gt;
&lt;br /&gt;
    -- If the value is 0 increase it by one cycle so that we can use it with Lua arrays.&lt;br /&gt;
    if heavenlyNum1 == 0 then&lt;br /&gt;
        heavenlyNum1 = 10&lt;br /&gt;
    end&lt;br /&gt;
    if heavenlyNum2 == 0 then&lt;br /&gt;
        heavenlyNum2 = 10&lt;br /&gt;
    end&lt;br /&gt;
    if earthlyNum1 == 0 then&lt;br /&gt;
        earthlyNum1 = 12&lt;br /&gt;
    end&lt;br /&gt;
    if earthlyNum2 == 0 then&lt;br /&gt;
        earthlyNum2 = 12&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Get the data tables for each permutation.&lt;br /&gt;
    local heavenlyTable1 = heavenlyStems[ heavenlyNum1 ]&lt;br /&gt;
    local heavenlyTable2 = heavenlyStems[ heavenlyNum2 ]&lt;br /&gt;
    local earthlyTable1 = earthlyBranches[ earthlyNum1 ]&lt;br /&gt;
    local earthlyTable2 = earthlyBranches[ earthlyNum2 ]&lt;br /&gt;
&lt;br /&gt;
    -- Work out the continously-numbered year. (Lihat [[Chinese calendar#Continuously numbered years]].)&lt;br /&gt;
    local year1 = year + 2696&lt;br /&gt;
    local year2 = year + 2697&lt;br /&gt;
    local year1Alt = year1 - 2146&lt;br /&gt;
    local year2Alt = year2 - 2146&lt;br /&gt;
&lt;br /&gt;
	-- Format any negative numbers.&lt;br /&gt;
	year1 = formatNegative( tostring( year1 ) )&lt;br /&gt;
	year2 = formatNegative( tostring( year2 ) )&lt;br /&gt;
	year1Alt = formatNegative( tostring( year1Alt ) )&lt;br /&gt;
	year2Alt = formatNegative( tostring( year2Alt ) )&lt;br /&gt;
&lt;br /&gt;
    -- Return all of that data in a (hopefully) reader-friendly format.&lt;br /&gt;
    chinese:setYear( mw.ustring.format(&lt;br /&gt;
        [=[[[Ganzhi|%s%s]]年 &amp;lt;small&amp;gt;(%s&amp;amp;nbsp;%s)&amp;lt;/small&amp;gt;&amp;lt;br /&amp;gt;%s atau %s&amp;lt;br /&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;''—&amp;amp;nbsp;sampai&amp;amp;nbsp;—''&amp;lt;br /&amp;gt;%s%s年 &amp;lt;small&amp;gt;(%s&amp;amp;nbsp;%s)&amp;lt;/small&amp;gt;&amp;lt;br /&amp;gt;%s atau %s]=],&lt;br /&gt;
        heavenlyTable1[ 1 ],&lt;br /&gt;
        earthlyTable1[ 1 ],&lt;br /&gt;
        earthlyTable1[ 2 ],&lt;br /&gt;
        heavenlyTable1[ 2 ],&lt;br /&gt;
        year1,&lt;br /&gt;
        year1Alt,&lt;br /&gt;
        heavenlyTable2[ 1 ],&lt;br /&gt;
        earthlyTable2[ 1 ],&lt;br /&gt;
        earthlyTable2[ 2 ],&lt;br /&gt;
        heavenlyTable2[ 2 ],&lt;br /&gt;
        year2,&lt;br /&gt;
        year2Alt&lt;br /&gt;
    ) )&lt;br /&gt;
&lt;br /&gt;
    box:addCalendar( chinese )&lt;br /&gt;
    &lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
    -- Coptic calendar&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    local coptic = calendar:new()&lt;br /&gt;
    coptic:setLink( 'Kalender Koptik' )&lt;br /&gt;
    coptic:setYearRange( year - 284, year - 283 )&lt;br /&gt;
    box:addCalendar( coptic )&lt;br /&gt;
 &lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
    -- Ethiopian calendar&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    local ethiopian = calendar:new()&lt;br /&gt;
    ethiopian:setLink( 'Kalender Etiopia' )&lt;br /&gt;
    ethiopian:setYearRange( year - 8, year - 7 )&lt;br /&gt;
    box:addCalendar( ethiopian )&lt;br /&gt;
&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
    -- Hebrew calendar&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    local hebrew = calendar:new()&lt;br /&gt;
    hebrew:setLink( 'Kalender Ibrani' )&lt;br /&gt;
    hebrew:setYearRange( year + 3760, year + 3761 )&lt;br /&gt;
    box:addCalendar( hebrew )&lt;br /&gt;
&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
    -- Hindu calendars&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    local hindu = calendarGroup:new{ heading = '[[Kalender Hindu]]' }&lt;br /&gt;
&lt;br /&gt;
    -- Vikram Samvat&lt;br /&gt;
&lt;br /&gt;
    local vikramSamvat = calendar:new()&lt;br /&gt;
    vikramSamvat:setLink( 'Vikram Samvat' )&lt;br /&gt;
    vikramSamvat:setYearRange( year + 56, year + 57 )&lt;br /&gt;
    hindu:addCalendar( vikramSamvat )&lt;br /&gt;
&lt;br /&gt;
    -- Shaka Samvat&lt;br /&gt;
&lt;br /&gt;
    local shakaSamvat = calendar:new()&lt;br /&gt;
    shakaSamvat:setLink( 'Kalender Saka', 'Shaka Samvat' )&lt;br /&gt;
    if year - 76 &amp;gt; 0 then&lt;br /&gt;
        shakaSamvat:setYearRange( year - 78, year - 77 )&lt;br /&gt;
    end&lt;br /&gt;
    hindu:addCalendar( shakaSamvat )&lt;br /&gt;
&lt;br /&gt;
    -- Kali Yuga&lt;br /&gt;
    &lt;br /&gt;
    local kaliYuga = calendar:new()&lt;br /&gt;
    kaliYuga:setLink( 'Kali Yuga' ) -- use italics&lt;br /&gt;
    kaliYuga:setYearRange( year + 3101, year + 3102 )&lt;br /&gt;
    hindu:addCalendar( kaliYuga )&lt;br /&gt;
&lt;br /&gt;
    box:addCalendarGroup( hindu )&lt;br /&gt;
&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
    -- Holocene calendar&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    local holocene = calendar:new()&lt;br /&gt;
    holocene:setLink( 'Kalender Holosen' )&lt;br /&gt;
    holocene:setYear( year + 10000 )&lt;br /&gt;
    box:addCalendar( holocene )&lt;br /&gt;
&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
    -- Iranian calendar&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    local iranian = calendar:new()&lt;br /&gt;
    iranian:setLink( 'Kalender Iran')&lt;br /&gt;
    if year - 621 &amp;gt; 0 then&lt;br /&gt;
        iranian:setYearRange( year - 622, year - 621 )&lt;br /&gt;
    else&lt;br /&gt;
        iranian:setYear( mw.ustring.format( '%d BP&amp;amp;nbsp;– %d BP', 622 - year, 621 - year ) )&lt;br /&gt;
    end&lt;br /&gt;
    box:addCalendar( iranian )&lt;br /&gt;
&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
    -- Islamic calendar&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    local islamic = calendar:new()&lt;br /&gt;
    islamic:setLink( 'Kalender Islam' )&lt;br /&gt;
    local islamicMult = 1.030684 -- the factor to multiply by&lt;br /&gt;
    local islamicSub = 621.5643 -- the factor to subtract by&lt;br /&gt;
    if year - 621 &amp;gt; 0 then&lt;br /&gt;
        local year1 = math.floor( islamicMult * ( year - islamicSub ) )&lt;br /&gt;
        local year2 = math.floor( islamicMult * ( year - islamicSub + 1 ) )&lt;br /&gt;
        islamic:setYearRange( year1, year2 )&lt;br /&gt;
    else&lt;br /&gt;
        local year1 = math.ceil( -islamicMult * ( year - islamicSub ) )&lt;br /&gt;
        local year2 = math.ceil( -islamicMult * ( year - islamicSub + 1 ) )&lt;br /&gt;
        islamic:setYear( mw.ustring.format( '%d BH&amp;amp;nbsp;– %d BH', year1, year2 ) )&lt;br /&gt;
    end&lt;br /&gt;
    box:addCalendar( islamic )&lt;br /&gt;
&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
    -- Japanese calendar&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    local japanese = calendar:new()&lt;br /&gt;
    japanese:setLink( 'Kalender Jepang' )&lt;br /&gt;
&lt;br /&gt;
    japanese.thisEra = japaneseEra:new{ year = year }&lt;br /&gt;
    if japanese.thisEra then&lt;br /&gt;
        local japaneseYearText = {}&lt;br /&gt;
        japanese.oldEra = japanese.thisEra:getOldEra()&lt;br /&gt;
        if japanese.oldEra and japanese.oldEra.eraYear and japanese.thisEra.article ~= japanese.oldEra.article then&lt;br /&gt;
            japanese.oldText = mw.ustring.format( '%s %d', japanese.oldEra.link, japanese.oldEra.eraYear )&lt;br /&gt;
            table.insert( japaneseYearText, japanese.oldText )&lt;br /&gt;
            table.insert( japaneseYearText, ' / ' )&lt;br /&gt;
        end&lt;br /&gt;
        if japanese.thisEra.eraYear then&lt;br /&gt;
            table.insert( japaneseYearText, mw.ustring.format( '%s %d', japanese.thisEra.link, japanese.thisEra.eraYear ) )&lt;br /&gt;
        end&lt;br /&gt;
        table.insert( japaneseYearText, mw.ustring.format( '&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;(%s%s年)&amp;lt;/small&amp;gt;', japanese.thisEra.kanji, japanese.thisEra.eraYearKanji ) )&lt;br /&gt;
        japanese:setYear( table.concat( japaneseYearText ) )&lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
     -- Japanese imperial year&lt;br /&gt;
    &lt;br /&gt;
    local imperial = calendar:new()&lt;br /&gt;
    imperial:setLink( 'Tahun Jepang' )&lt;br /&gt;
    imperial:setYear( year + 660 )&lt;br /&gt;
 &lt;br /&gt;
    box:addCalendar( japanese )&lt;br /&gt;
    &lt;br /&gt;
	----------------------------------------------------------------------&lt;br /&gt;
	-- Javanese calendar&lt;br /&gt;
	----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
	local javanese = calendar:new()&lt;br /&gt;
	javanese:setLink( 'Kalender Jawa' )&lt;br /&gt;
	local javaneseMult = 1.030684 -- the factor to multiply by&lt;br /&gt;
	local javaneseSub = 124.9 -- the factor to subtract by&lt;br /&gt;
	if year - 124 &amp;gt; 0 then&lt;br /&gt;
		local year1 = math.floor( javaneseMult * ( year - javaneseSub ) )&lt;br /&gt;
		local year2 = math.floor( javaneseMult * ( year - javaneseSub + 1 ) )&lt;br /&gt;
		javanese:setYearRange( year1, year2 )&lt;br /&gt;
	else&lt;br /&gt;
		local year1 = math.ceil( -javaneseMult * ( year - javaneseSub ) )&lt;br /&gt;
		local year2 = math.ceil( -javaneseMult * ( year - javaneseSub + 1 ) )&lt;br /&gt;
	end&lt;br /&gt;
	box:addCalendar( javanese )&lt;br /&gt;
&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
    -- Julian calendar&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    local julian = calendar:new()&lt;br /&gt;
    julian:setLink( 'Kalender Julian' )&lt;br /&gt;
&lt;br /&gt;
    julian.yearVals = {&lt;br /&gt;
        { 1901, 'Gregorian dikurangi 13 hari' },&lt;br /&gt;
        { 1900, 'Gregorian dikurangi 12 atau 13 hari'},&lt;br /&gt;
        { 1801, 'Gregorian dikurangi 12 hari' },&lt;br /&gt;
        { 1800, 'Gregorian dikurangi 11 atau 12 hari' },&lt;br /&gt;
        { 1701, 'Gregorian dikurangi 11 hari' },&lt;br /&gt;
        { 1700, 'Gregorian dikurangi 10 atau 11 hari' },&lt;br /&gt;
        { 1582, 'Gregorian dikurangi 10 hari' },&lt;br /&gt;
        { -45, gregorian.year }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    for i, t in ipairs( julian.yearVals ) do&lt;br /&gt;
        if year &amp;gt;= t[ 1 ] then&lt;br /&gt;
            julian:setYear( t[ 2 ] )&lt;br /&gt;
            break&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    box:addCalendar( julian )&lt;br /&gt;
    &lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
    -- Korean calendar&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    local korean = calendar:new()&lt;br /&gt;
    korean:setLink( 'Kalender Korea' )&lt;br /&gt;
    korean:setYear( year + 2333 )&lt;br /&gt;
    box:addCalendar( korean )&lt;br /&gt;
&lt;br /&gt;
	----------------------------------------------------------------------&lt;br /&gt;
	-- Nanakshahi calendar&lt;br /&gt;
	----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
	local nanakshahi = calendar:new()&lt;br /&gt;
	nanakshahi:setLink( 'Kalender Nanakshahi' )&lt;br /&gt;
	nanakshahi:setYear( year - 1468 )&lt;br /&gt;
	box:addCalendar( nanakshahi )&lt;br /&gt;
    &lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
    -- Thai solar calendar&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    local thai = calendar:new()&lt;br /&gt;
    thai:setLink( 'Suriyakhati' )&lt;br /&gt;
    thai:setYear( year + 543 )&lt;br /&gt;
    box:addCalendar( thai )&lt;br /&gt;
    &lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
    -- Unix time&lt;br /&gt;
    ----------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
    local unix = calendar:new()&lt;br /&gt;
&lt;br /&gt;
    local function getUnixTime( year )&lt;br /&gt;
        if year &amp;lt; 1970 then return end&lt;br /&gt;
        local noError, unixTime = pcall( lang.formatDate, lang, 'U', '1 Jan ' .. tostring( year ) )&lt;br /&gt;
        if not noError or noError and not unixTime then return end&lt;br /&gt;
        unixTime = tonumber( unixTime )&lt;br /&gt;
        if unixTime and unixTime &amp;gt;= 0 then&lt;br /&gt;
            return unixTime&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    unix.thisYear = getUnixTime( year )&lt;br /&gt;
    unix.nextYear = getUnixTime( year + 1 )&lt;br /&gt;
    if unix.thisYear and unix.nextYear then&lt;br /&gt;
        unix:setLink( 'Unix time' )&lt;br /&gt;
        unix:setYearRange( unix.thisYear, unix.nextYear - 1 )&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    box:addCalendar( unix )&lt;br /&gt;
&lt;br /&gt;
    return box:export()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------&lt;br /&gt;
-- Process arguments from #invoke&lt;br /&gt;
--------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.main( frame )&lt;br /&gt;
	-- Process the arguments and pass them to the box-building function.&lt;br /&gt;
	local args = getArgs( frame )&lt;br /&gt;
	-- Pass year argument with 'year' parameter or without any name but first argument&lt;br /&gt;
	args.year = args.year or args[1]&lt;br /&gt;
    return makeCalendarBox( args )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Adminjavasatu</name></author>
	</entry>
</feed>