From WikiChip
Module:arch timeline

Documentation for this module may be created at Module:arch timeline/doc

local p = {
  arch = {
    intel = {
      {"09/01/2015", "01/01/2018", "[[intel/microarchitectures/skylake|Skylake]]" },
      {"08/30/2016", "01/01/2019", "[[intel/microarchitectures/kaby_lake|Kaby Lake]]" },
      {"07/01/2017", "01/01/2019", "[[intel/microarchitectures/coffee_lake|Coffee Lake]]" },
      {"10/01/2017", "10/01/2019", "[[intel/microarchitectures/cannonlake|Cannonlake]]" },
      {"08/01/2018", "01/01/2020", "[[intel/microarchitectures/icelake|Icelake]]" },
      {"08/01/2019", "01/01/2021", "[[intel/microarchitectures/tigerlake|Tigerlake]]" }
    }
  }
}

function p.new_timeline(w, h, s, e)
		return [[
<timeline>
ImageSize  = width:]] .. w .. [[ height:]] .. h .. [[
PlotArea   = left:150 right:10 top:10 bottom:25 #left:0 right:0 bottom:20 top:0

DateFormat = mm/dd/yyyy
Period     = from:]] .. s .. [[ till:]] .. e .. [[
ScaleMajor = unit:year increment:1 start:]] .. s .. [[
ScaleMinor = unit:month increment:1 start:]] .. s .. [[

TimeAxis   = orientation:horizontal
AlignBars  = justify

Colors =
   id:c_arch1 value:rgb(1,0.96,0.90)
   id:c_arch2 value:rgb(1,0.92,0.90)
   id:c_arch3 value:rgb(1,0.88,0.80)
   id:c_arch4 value:rgb(1,0.84,0.80)
   id:c_arch5 value:rgb(1,0.80,0.70)
   id:c_arch6 value:rgb(1,0.76,0.70)
   id:c_arch7 value:rgb(1,0.72,0.60)
   id:c_arch8 value:rgb(1,0.68,0.60)
   id:c_arch9 value:rgb(1,0.64,0.50)

   id:c_core1 value:rgb(0.47,0.83,0.91)
   id:c_core2 value:rgb(0.97,0.90,0.72)
   id:c_core3 value:rgb(0.68,1,0.91)
   id:c_core4 value:rgb(0.98,0.73,0.87)
   id:c_core5 value:rgb(0.78,0.82,0.96)
   id:c_core6 value:rgb(0.84,0.97,0.96)
   id:c_core7 value:rgb(0.95,0.83,1)
   id:c_core8 value:rgb(0.89,0.95,0.87)
   id:c_core9 value:rgb(0.78,0.93,1)

BarData =
  barset:Microarchitectures
    bar:arch1
    bar:arch2
    bar:arch3
    bar:arch4
    bar:arch5
    bar:arch6
    bar:arch7
    bar:arch8
    bar:arch9
  barset:Cores1
    bar:core11
    bar:core12
    bar:core13
    bar:core14
    bar:core15
    bar:core16
  barset:Cores2
    bar:core21
    bar:core22
    bar:core23
    bar:core24
    bar:core25
    bar:core26
  barset:Cores3
    bar:core31
    bar:core32
    bar:core33
    bar:core34
    bar:core35
    bar:core36
  barset:Cores4
    bar:core41
    bar:core42
    bar:core43
    bar:core44
    bar:core45
    bar:core46
  barset:Cores5
    bar:core51
    bar:core52
    bar:core53
    bar:core54
    bar:core55
    bar:core56
  barset:Cores6
    bar:core61
    bar:core62
    bar:core63
    bar:core64
    bar:core65
    bar:core66
  barset:Cores7
    bar:core71
    bar:core72
    bar:core73
    bar:core74
    bar:core75
    bar:core76
  barset:Cores8
    bar:core81
    bar:core82
    bar:core83
    bar:core84
    bar:core85
    bar:core86
  barset:Cores9
    bar:core91
    bar:core92
    bar:core93
    bar:core94
    bar:core95
    bar:core96
]]

end

function p.intel (frame)
  local timeline
  local lang = mw.language.getContentLanguage()
  
  if not frame.args.date_start or not frame.args.date_end then
    return "MISSING START OR END DATE"
  end
  
  if not frame.args.width or not frame.args.height then
    return "MISSING WIDTH OR HEIGHT"
  end
  
  local start_date = frame.args.date_start
  local end_date = frame.args.date_end
  
  timeline = p.new_timeline(frame.args.width, frame.args.height, start_date, end_date)
  
  return timeline .. '\n</timeline>'
end

return p