Moduuli:Kitarakirja/Sointuselain

Tämän moduulin ohjeistuksen voi tehdä sivulle Moduuli:Kitarakirja/Sointuselain/ohje

local p = {}

local tekstipohja = require "Moduuli:Tekstipohja"

local div_template = [=[
<div style="margin: auto; text-align: center; border: solid black 1px;">
<div>{{{RINNAKKAISET}}}</div>
{{{HAKEMISTOLINKKI
}}}{{{TAULUKKO}}}
</div>
]=]


local lahisointudata = {
   [""] = {
      [3] = { { { "s3", "→s2/9", "sus2" }, { "s3", "→p3", "m" } }, { { "s3", "→4/11", "sus4" } } }, 
      [5] = { { nil }, { { "5", "→y5", "+" } } }, 
      [6] = { { nil }, { { "s6/13", "+", "6" } } }, 
      [7] = { { nil }, { { "p7", "+", "7" }, { "s7", "+", "maj7" } } }, 
      [9] = { { nil }, { { "p2/9", "+", "(♭9)" }, { "s2/9", "+", "add9" } } }, 
   },

   ["+"] = {
      [5] = { { { "y5", "→5", "" } }, { nil } }, 
      [7] = { { nil }, { { "p7", "+", "7♯5" }, { "s7", "+", "maj7♯5" } } }, 
   },

   ["7♯5"] = {
      [5] = { { { "y5", "→v5", "7♭5" }, { "y5", "→5", "7" } }, { nil } }, 
      [7] = { { { "p7", "-", "+" } }, { { "p7", "→s7", "maj7♯5" } } }, 
      [9] = { { nil }, { { "p2/9", "+", "7♯5♭9" }, { "s2/9", "+", "9♯5" }, { "y2/9", "+", "7♯5♯9" } } }, 
   },

   ["9♯5"] = {
      [5] = { { { "y5", "→v5", "9♭5" }, { "y5", "→5", "9" } }, { nil } }, 
      [7] = { { nil }, { { "p7", "→s7", "maj9♯5" } } }, 
      [9] = { { { "s2/9", "-", "7♯5" }, { "s2/9", "→p2/9", "7♯5♭9" } }, { { "s2/9", "→y2/9", "7♯5♯9" } } }, 
   },

   ["maj7♯5"] = {
      [5] = { { { "y5", "→5", "maj7" } }, { nil } }, 
      [7] = { { { "s7", "-", "+" }, { "s7", "→p7", "7♯5" } }, { nil } }, 
      [9] = { { nil }, { { "s2/9", "+", "maj9♯5" } } }, 
   },

   ["maj9♯5"] = {
      [5] = { { { "y5", "→5", "maj9" } }, { nil } }, 
      [7] = { { { "s7", "→p7", "9♯5" } }, { nil } }, 
      [9] = { { { "s2/9", "-", "maj7♯5" } }, { { "s2/9", "→y9", "maj7♯9♯5" } } }, 
   },
   
   ["maj7♯9♯5"] = {
      [7] = { { { "s7", "→p7", "7♯9♯5" } }, { nil } }, 
      [9] = { { { "y2/9", "-", "maj7♯5" } }, { { "y2/9", "→s9", "maj9♯5" } } }, 
   },

   ["11"] = {
      [3] = { { { "s3", "→p3", "m11" } }, { nil } }, 
      [7] = { { nil }, { { "p7", "→s7", "maj11" } } }, 
      [11] = { { { "4/11", "-", "9" } }, { nil } }, 
      [13] = { { nil }, { { "s6/13", "+", "13" } } }, 
   },

   ["13"] = {
      [3] = { { { "s3", "→p3", "m13" } }, { nil } }, 
      [7] = { { nil }, { { "p7", "→s7", "maj13" } } }, 
      [9] = { { { "s2/9", "→p2/9", "13♭9" } }, { { "s2/9", "→y2/9", "13♯9" } } }, 
      [11] = { { nil }, { { "4/11", "→y4/11", "13♯11" } } }, 
      [13] = { { { "s6/13", "-", "11" } }, { nil } }, 
   },
   
   ["13sus4"] = {
      [4] = { { nil }, { { "4/11", "→s3", "13" } } }, 
      [7] = { { nil }, { { "p7", "→s7", "maj13sus4" } } },
      [9] = { { { "s2/9", "→p2/9", "13sus4♭9" } }, { nil } }, 
      [13] = { { { "s6/13", "→p6/13", "9♭13sus4" } }, { nil } }, 
   },   

   ["13♭9"] = {
      [9] = { { nil }, { { "p2/9", "→s2/9", "13" }, { "p2/9", "→y2/9", "13♯9" } } }, 
      [13] = { { { "s6/13", "→p6/13", "7♭13♭9" } }, { nil } },
   },

   ["13♯9"] = {
      [9] = { { { "y2/9", "→p2/9", "13♭9" }, { "y2/9", "→s2/9", "13" } }, { nil } }, 
   },

   ["6"] = {
      [3] = { { { "s3", "→s2/9", "6sus2" }, { "s3", "→p3", "m6" } }, { nil } }, 
      [5] = { { { "5", "→v5", "6♭5" } }, { nil } },       
      [6] = { { { "s6/13", "-", "" } }, { { "s6/13", "→p7", "7" }, { "s6/13", "→s7", "maj7" } } }, 
      [9] = { { nil }, { { "s2/9", "+", "6/9" } } }, 
   },
   
   ["6♭5"] = {
      [5] = { { { "v5", "→5", "6" } }, { nil } },       
      [6] = { { { "s6/13", "-", "(♭5)" } }, { { "s6/13", "→p7", "7♭5" }, { "s6/13", "→s7", "maj7♭5" } } }, 
      [9] = { { nil }, { { "s2/9", "+", "6/9♭5" } } }, 
   },   

   ["6sus2"] = {
      [3] = { { { "s2/9", "→p3", "m6" }, { "s2/9", "→s3", "6" } }, { nil } }, 
   },
   
   ["6/9"] = {
      [3] = { { { "s3", "-", "6sus2" }, { "s3", "→p3", "m6/9" } }, { nil } }, 
      [6] = { { { "s6/13", "-", "add9" } }, { { "s6/13", "→p7", "9" }, { "s6/13", "→s7", "maj9" } } }, 
      [7] = { { nil }, { { "s7", "+", "6/9maj7" } } }, 
      [9] = { { { "s2/9", "-", "6" } }, { nil } }, 
      [11] = { { nil }, { { "y4/11", "+", "6/9♯11" } } }, 
   },

   ["6/9maj7"] = {
      [3] = { { { "s3", "→p3", "m6/9maj7" } }, { { "s3", "→4/11", "maj13sus4" } } }, 
      [6] = { { { "s6/13", "-", "maj9" } }, { nil } }, 
      [7] = { { { "s7", "-", "6/9" } }, { nil } }, 
      [11] = { { nil }, { { "4/11", "+", "maj13" } } }, 
   },

   ["6/9♯11"] = {
      [4] = { { { "y4/11", "-", "6/9" } }, { nil } }, 
   },

   ["7"] = {
      [3] = { { { "s3", "→s2/9", "7sus2" }, { "s3", "→p3", "m7" } }, { { "s3", "→4/11", "7sus4" } } }, 
      [5] = { { { "5", "→v5", "7♭5" } }, { { "5", "→y5", "7♯5" } } }, 
      [7] = { { { "p7", "-", "" }, { "p7", "→s6/13", "6" } }, { { "p7", "→s7", "maj7" } } }, 
      [9] = { { nil }, { { "p2/9", "+", "7(♭9)" }, { "s2/9", "+", "9" }, { "y2/9", "+", "7(♯9)" } } }, 
   },

   ["7(♭9)"] = {
      [3] = { { nil }, { { "s3", "→4/11", "7sus4♭9" } } },    	
      [5] = { { { "5", "→v5", "7♭5♭9" } }, { { "5", "→y5", "7♯5♭9" } } }, 
      [9] = { { { "p2/9", "-", "7" } }, { { "p2/9", "→s2/9", "9" }, { "p2/9", "→y2/9", "7(♯9)" } } }, 
   },

   ["7(♯9)"] = {
      [5] = { { { "5", "→y5", "7♭5♯9" } }, { { "5", "→y5", "7♯5♯9" } } }, 
      [9] = { { { "y2/9", "-", "7" }, { "y2/9", "→p2/9", "7(♭9)" }, { "y2/9", "→s2/9", "9" } }, { nil } }, 
   },

   ["7sus2"] = {
      [2] = { { nil }, { { "s2/9", "→p3", "m7" }, { "s2/9", "→s3", "7" }, { "s2/9", "→4/11", "7sus4" } } }, 
      [3] = { { nil }, { { "p3", "+", "m9" }, { "s3", "+", "9" } } }, 
      [4] = { { { "4/11", "+", "9sus4" } }, { nil } }, 
      [7] = { { { "p7", "-", "sus2" }, { "p7", "→s6/13", "6sus2" } }, { nil } }, 
   },

   ["7sus4"] = {
      [4] = { { { "4/11", "→s2/9", "7sus2" }, { "4/11", "→p3", "m7" }, { "4/11", "→s3", "7" } }, { nil } }, 
      [5] = { { { "5", "→v5", "7sus4♭5" } }, { nil } }, 
      [7] = { { { "p7", "-", "sus4" } }, { { "p7", "→s7", "maj7sus4" } } }, 
      [9] = { { { "p2/9", "+", "7sus4♭9" }, { "s2/9", "+", "9sus4" } }, { nil } },       
   },

   ["7♭5"] = {
      [3] = { { { "s3", "→p3", "m7♭5" } }, { { "s3", "→4/11", "7sus4♭5" } } }, 
      [5] = { { nil }, { { "v5", "→5", "7" }, { "v5", "→y5", "7♯5" } } }, 
      [9] = { { nil }, { { "s2/9", "+", "9♭5" } } }, 
   },
   
   ["7sus4♭5"] = {
      [4] = { { { "4/11", "→p3", "m7♭5" }, { "4/11", "→s3", "7♭5" } }, { nil } }, 
      [5] = { { nil }, { { "v5", "→5", "7sus4" } } }, 
   },

   ["7♯5♭9"] = {
      [5] = { { { "y5", "→5", "7(♭9)" } }, { nil } }, 
      [9] = { { { "p2/9", "-", "7♯5" } }, { { "p2/9", "→s2/9", "9♯5" }, { "p2/9", "→y2/9", "7♯5♯9" } } }, 
   },

   ["7♯5♯9"] = {
      [5] = { { { "y5", "→5", "7(♯9)" } }, { nil } }, 
      [9] = { { { "y2/9", "-", "7♯5" }, { "y2/9", "→p2/9", "7♯5♭9" }, { "y2/9", "→s2/9", "9♯5" } }, { nil } }, 
   },

   ["9"] = {
      [3] = { { { "s3", "-", "7sus2" }, { "s3", "→p3", "m9" } }, { { "s3", "→4/11", "9sus4" } } }, 
      [5] = { { { "5", "→v5", "9♭5" } }, { { "5", "→y5", "9♯5" } } }, 
      [7] = { { { "p7", "-", "add9" }, { "p7", "→s6/13", "6/9" } }, { { "p7", "→s7", "maj9" } } }, 
      [9] = { { { "s2/9", "-", "7" }, { "s2/9", "→p2/9", "7(♭9)" } }, { { "s2/9", "→y2/9", "7(♯9)" } } }, 
      [11] =  { { nil }, { { "4/11", "+", "11" } } }, 
   },

   ["9sus4"] = {
      [4] = { { { "4/11", "-", "7sus2" }, { "4/11", "→p3", "m9" } }, { { "4/11", "s3", "9" } } }, 
      [7] = { { { "p7", "-", "add9sus4" } }, { { "p7", "→s7", "maj9sus4" } } }, 
      [9] = { { { "s2/9", "-", "7sus4" }, { "s2/9", "→p2/9", "7sus4♭9" } }, { nil } }, 
      [13] =  { { nil }, { { "s6/13", "+", "13sus4" } } }, 
   },
   
    ["7sus4♭9"] = {
      [4] = { { nil }, { { "4/11", "s3", "7(♭9)" } } }, 
      [7] = { { { "p7", "-", "sus4♭9" } }, { nil } }, 
      [9] = { { { "p2/9", "-", "7sus4" }, { "p2/9", "→s2/9", "9sus4" } }, { nil } }, 
      [13] =  { { nil }, { { "s6/13", "+", "13sus4♭9" } } }, 
   },  
   
   ["9♭5"] = {
      [5] = { { nil }, { { "v5", "→5", "9" }, { "v5", "→y5", "9♯5" } } }, 
      [9] = { { { "s2/9", "-", "7♭5" } }, { nil } }, 
   },

   ["add9"] = {
      [3] = { { { "s3", "-", "sus2" }, { "s3", "→p3", "madd9" } }, { { "s3", "→4/11", "add9sus4" } } }, 
      [6] = { { { "s6/13", "+", "6/9" } }, { nil } }, 
      [7] = { { nil }, { { "p7", "+", "9" }, { "s7", "+", "maj9" } } }, 
      [9] = { { { "s2/9", "-", "" }, { "s2/9", "→p2/9", "(♭9)"} }, { nil } }, 
   },
   
   ["add9sus4"] = {
      [4] = { { { "4/11", "-", "sus2" }, { "4/11", "→p3", "madd9" }, { "4/11", "→s3", "add9" } }, { nil } }, 
      [7] = { { nil }, { { "p7", "+", "9sus4" }, { "s7", "+", "maj9sus4" } } }, 
      [9] = { { { "s2/9", "-", "sus4" }, { "s2/9", "→p2/9", "sus4♭9"} }, { nil } }, 
   },
   
   ["(♭9)"] = {
      [3] = { { nil }, { { "s3", "→4/11", "sus4♭9" } } }, 
      [7] = { { nil }, { { "p7", "+", "7(♭9)" } } }, 
      [9] = { { { "p2/9", "-", "" }, { "p2/9", "→s2/9", "add9"} }, { nil } }, 
   },   
   
   ["m"] = {
      [9] = { { nil }, { { "s2/9", "+", "madd9" } } }, 
      [3] = { { { "p3", "→s2/9", "sus2" } }, { { "p3", "→s3", "" }, { "p3", "→4/11", "sus4" } } }, 
      [5] = { { { "5", "→v5", "°" } }, { nil } }, 
      [6] = { { nil }, { { "p6/13", "+", "m♭6" }, { "s6/13", "+", "m6" } } }, 
      [7] = { { nil }, { { "p7", "+", "m7" }, { "s7", "+", "mmaj7" } } }, 
   },

   ["m11"] = {
      [3] = { { nil }, { { "p3", "→s3", "11" } } }, 
      [7] = { { nil }, { { "p7", "→s7", "mmaj11" } } }, 
      [11] = { { { "4/11", "-", "m9" } }, { nil } }, 
      [13] = { { nil }, { { "s6/13", "+", "m13" } } }, 
   },

   ["m13"] = {
      [3] = { { nil }, { { "p3", "→s3", "13" } } }, 
      [7] = { { nil }, { { "p7", "→s7", "mmaj13" } } }, 
      [13] = { { { "s6/13", "-", "m11" } }, { nil } }, 
   },

   ["m6"] = {
      [3] = { { { "p3", "→s2/9", "6sus2" } }, { { "p3", "→s3", "6" } } }, 
      [6] = { { { "s6/13", "-", "m" }, { "s6/13", "→p6/13", "m♭6" } }, { { "s6/13", "→p7", "m7" }, { "s6/13", "→s7", "mmaj7" } } }, 
      [9] = { { nil }, { { "s2/9", "+", "m6/9" } } }, 
   },

   ["m6/9"] = {
      [3] = { { { "p3", "-", "6sus2" } }, { { "p3", "→s3", "6/9" } } }, 
      [6] = { { { "s6/13", "-", "madd9" } }, { { "s6/13", "→p7", "m9" }, { "s6/13", "→s7", "mmaj9" } } }, 
      [9] = { { { "s2/9", "-", "m6" } }, { nil } }, 
   },

   ["m7"] = {
      [3] = { { { "p3", "→s2/9", "7sus2" } }, { { "p3", "→s3", "7" }, { "p3", "→4/11", "7sus4" } } }, 
      [5] = { { { "5", "→v5", "m7♭5" } }, { nil } }, 
      [7] = { { { "p7", "-", "m" }, { "p7", "→p6/13", "m♭6" }, { "p7", "→s6/13", "m6" } }, { { "p7", "→s7", "mmaj7" } } }, 
      [9] = { { nil }, { { "s2/9", "+", "m9" } } }, 
   },

   ["m7♭5"] = {
      [3] = { { nil }, { { "p3", "→s3", "7♭5" }, { "p3", "→4/11", "7sus4♭5" } } }, 
      [5] = { { nil }, { { "v5", "→5", "m7" } } }, 
      [7] = { { { "p7", "-", "°" }, { "p7", "→v7", "°7" } }, { { "p7", "→s7", "°maj7" } } }, 
   },

   ["m9"] = {
      [3] = { { { "p3", "-", "7sus2" } }, { { "p3", "→s3", "9" } } }, 
      [7] = { { { "p7", "-", "madd9" }, { "p7", "→s6/13", "m6/9" } }, { { "p7", "→s7", "mmaj9" } } }, 
      [9] = { { { "s2/9", "-", "m7" } }, { nil } }, 
      [11] = { { nil }, { { "4/11", "+", "m11" } } }, 
   },

   ["madd9"] = {
      [3] = { { { "p3", "-", "sus2" } }, { { "p3", "→s3", "add9" } } }, 
      [6] = { { nil }, { { "s6/13", "+", "m6/9" } } }, 
      [7] = { { nil }, { { "p7", "+", "m9" }, { "s7", "+", "mmaj9" } } }, 
      [9] = { { { "s2/9", "-", "m" } }, { nil } }, 
   },

   ["maj11"] = {
      [3] = { { { "s3", "→p3", "mmaj11" } }, { nil } }, 
      [7] = { { { "s7", "→p7", "11" } }, { nil } }, 
      [11] = { { { "4/11", "-", "maj9" } }, { nil } }, 
      [13] = { { nil }, { { "s6/13", "+", "maj13" } } }, 
   },

   ["maj13"] = {
      [3] = { { { "s3", "→p3", "mmaj13" } }, { nil } }, 
      [7] = { { { "s7", "→p7", "13" } }, { nil } }, 
      [11] = { { { "4/11", "-", "6/9maj7" } }, { { "4/11", "→y4/11", "maj13♯11" } } }, 
      [13] = { { { "s6/13", "-", "maj11" } }, { nil } }, 
   },
   
   ["maj13sus4"] = {
      [4] = { { { "4/11", "→p3", "mmaj13" }, { "4/11", "→s3", "maj13" } }, { nil } }, 
      [7] = { { { "s7", "→p7", "13sus4" } }, { nil } }, 
      [13] = { { { "s6/13", "-", "maj9sus4" } }, { nil } }, 
   },   

   ["maj7"] = {
      [3] = { { { "s3", "→p3", "mmaj7" } }, { { "s3", "→4/11", "maj7sus4" } } }, 
      [5] = { { { "5", "→v5", "maj7♭5" } }, { { "5", "→y5", "maj7♯5" } } }, 
      [7] = { { { "s7", "-", "" }, { "s7", "→s6/13", "6" }, { "s7", "→p7", "7" } }, { nil } }, 
      [9] = { { nil }, { { "s2/9", "+", "maj9" } } }, 
      [11] = { { nil }, { { "y4/11", "+", "maj7♯11" } } }, 
   },
   
   ["maj7sus4"] = {
      [4] = { { { "4/11", "→p3", "mmaj7" } }, { { "4/11", "→s3", "maj7" } } }, 
      [7] = { { { "s7", "-", "sus4" }, { "s7", "→p7", "7sus4" } }, { nil } }, 
      [9] = { { nil }, { { "s2/9", "+", "maj9sus4" } } }, 
      [13] = { { nil }, { { "s6/13", "+", "maj13sus4" } } },  
   },

   ["maj7♭5"] = {
      [3] = { { { "s3", "→p3", "°maj7" } }, { nil } }, 
      [5] = { { { "5", "→5", "maj7" } }, { { "5", "→y5", "maj7♯5" } } }, 
      [7] = { { { "s7", "-", "(♭5)" }, { "s7", "→s6/13", "6♭5" }, { "s7", "→p7", "7♭5" } }, { nil } }, 
   },

   ["maj7♯11"] = {
      [11] = { { { "y4/11", "-", "maj7" } }, { nil } }, 
   },

   ["maj9"] = {
      [3] = { { { "s3", "→p3", "mmaj9" } }, { nil } }, 
      [5] = { { nil }, { { "5", "→y5", "maj9♯5" } } }, 
      [6] = { { nil }, { { "s6/13", "+", "6/9maj7" } } }, 
      [7] = { { { "s7", "-", "add9" }, { "s7", "→s6/13", "6/9" }, { "s7", "→p7", "9" } }, { nil } }, 
      [9] = { { { "s2/9", "-", "maj7" } }, { nil } }, 
      [11] = { { nil }, { { "4/11", "+", "maj11" } } }, 
   },

   ["mmaj11"] = {
      [3] = { { nil }, { { "p3", "→s3", "maj11" } } }, 
      [7] = { { { "s7", "→p7", "m11" } }, { nil } }, 
      [11] = { { { "4/11", "-", "mmaj9" } }, { nil } }, 
      [13] = { { nil }, { { "s6/13", "+", "mmaj13" } } }, 
   },

   ["mmaj13"] = {
      [3] = { { nil }, { { "p3", "→s3", "maj13" } } }, 
      [13] = { { { "s6/13", "-", "mmaj11" } }, { nil } }, 
      [7] = { { { "s7", "→p7", "m13" } }, { nil } }, 
   },

   ["mmaj7"] = {
      [3] = { { nil }, { { "p3", "→s3", "maj7" } } }, 
      [7] = { { { "s7", "-", "m" }, { "s7", "→p6/13", "m♭6" }, { "s7", "→s6/13", "m6" }, { "s7", "→p7", "m7" } }, { nil } }, 
      [9] = { { nil }, { { "s2/9", "+", "mmaj9" } } }, 
   },

   ["mmaj9"] = {
      [3] = { { nil }, { { "p3", "→s3", "maj9" } } }, 
      [7] = { { { "s7", "-", "madd9" }, { "s7", "→s6/13", "m6/9" }, { "s7", "→p7", "m9" } }, { nil } }, 
      [9] = { { { "s2/9", "-", "mmaj7" } }, { nil } }, 
      [11] = { { nil }, { { "4/11", "+", "mmaj11" } } }, 
   },

   ["m♭6"] = {
      [6] = { { { "p6/13", "-", "m" } }, { { "p6/13", "→s6/13", "m6" }, { "p6/13", "→p7", "m7" }, { "p6/13", "→s7", "mmaj7" } } }, 
   },

   ["sus2"] = {
      [2] = { { nil }, { { "s2/9", "→p3", "m" }, { "s2/9", "→s3", "" }, { "s2/9", "→4/11", "sus4" } } }, 
      [3] = { { nil }, { { "p3", "+", "madd9" }, { "s3", "+", "add9" } } }, 
      [6] = { { nil }, { { "s6/13", "+", "6sus2" } } },
      [7] = { { nil }, { { "p7", "+", "7sus2" } } }, 
   },

   ["sus4"] = {
      [4] = { { { "4/11", "→s2/9", "sus2" }, { "4/11", "→p3", "m" }, { "4/11", "→s3", "" } }, { nil } }, 
      [7] = { { nil }, { { "p7", "+", "7sus4" } } }, 
      [9] = { { nil }, { { "p2/9", "+", "sus4♭9" }, { "s2/9", "+", "add9sus4" } } }, 
   },

   ["sus4♭9"] = {
      [4] = { { { "4/11", "→s3", "(♭9)" } }, { nil } }, 
      [7] = { { nil }, { { "p7", "+", "7sus4♭9" } } }, 
      [9] = { { nil }, { { "p2/9", "-", "sus4" }, { "p2/9", "→s2/9", "add9sus4" } } }, 
   },

   ["°"] = {
   	  [3] = { { nil }, { { "p3", "→s3", "(♭5)" } } },
      [5] = { { nil }, { { "v5", "→5", "m" } } }, 
      [7] = { { nil }, { { "v7", "+", "°7" }, { "p7", "+", "m7♭5" }, { "s7", "+", "°maj7" } } }, 
   },

   ["°7"] = {
      [7] = { { { "v7", "-", "°" }, { "s7", "+", "°7maj7" } }, { { "v7", "→p7", "m7♭5" }, { "v7", "→s7", "°maj7" } } }, 
   },
   
   ["°maj7"] = {
   	  [3] = { { nil }, { { "p3", "→s3", "maj7♭5" } } },
   	  [5] = { { nil }, { { "v5", "→5", "mmaj7" } } }, 
      [7] = { { { "s7", "→v7", "°7" }, { "s7", "→p7", "m7♭5" } }, { { "v7", "+", "°7maj7" }, { "s7", "-", "°" } } }, 
   },
      
   ["°7maj7"] = {
      [7] = { { { "s7", "-", "°7" } }, { { "v7", "-", "°maj7" } } }, 
   },
}



local function get_link_text(note, chord_type)
   if type(note) == "string" then -- Yksittäinen nimi, esim. D.
      local title = note .. chord_type
      return "[[Kitarakirja/Sointuluettelo:" .. title .. "|" .. title .. "]]"

   else -- Nimipari (esim. F#, Gb)
   	  local title
   	  if note[1] == "C♯" or note[1] == "F♯" then
         title = note[1] .. chord_type
      else
         title = note[2] .. chord_type
      end
	  local text = note[1] .. chord_type .. " / " .. note[2] .. chord_type
      
      return "[[Kitarakirja/Sointuluettelo:" .. title .. "|" .. text .. "]]"
   end
end

local function get_table(rootnote, chordform)
   local data = lahisointudata[chordform]
   local rows = { "", "", "", "", "", "", "", "", "", "", "", "" }
   
    if not data then
   		return ""
   	end

   local table_elem = mw.html.create("table"):css("margin", "auto"):css("font-size", "0.8em"):css("width", "100%")
   
   for interval, line in pairs(data) do
      local left = line[1]
      local right = line[2]
      local output = { }
      local tr_elem = mw.html.create("tr") --table_elem:tag("tr")
      local td_left_elem  = tr_elem:tag("td"):css("width", "49%"):css("text-align", "right")
      local td_mid_elem   = tr_elem:tag("td"):node("◯"):css("text-align", "center")
      local td_right_elem = tr_elem:tag("td"):css("width", "49%"):css("text-align", "left")

      local sep = ""
      for i, item in ipairs(left) do
	 if i > 1 then
	    sep = " • "
	 end

	 td_left_elem
	    :node(sep .. "" .. get_link_text(rootnote, item[3]) .. "&nbsp;")
      end

      sep = ""
      for i, item in ipairs(right) do
	 if i > 1 then
	    sep = " • "
	 end

	 td_right_elem
	    :node("&nbsp;" .. get_link_text(rootnote, item[3]) .. " ")
      end

      rows[interval] = tr_elem
   end

   for i = #rows, 1, -1 do
   	  row = rows[i]
      table_elem:node(row)
   end

   return table_elem
end


local function join1(note, list)
   local output = {}

   if not list then
      return { "" }
   end

   for i, chord_type in ipairs(list) do
      output[i] = get_link_text(note, chord_type)
   end

   return output
end


function p.Sointuselain(frame)
   local root1 = frame.args["juurisävel1"]
   local root2 = frame.args["juurisävel2"]
   local chord_type = frame.args["tyyppi"]
   local root

   if root1 and root2 and roo1 ~= "{{{juurisävel1}}}" and root2 ~= "{{{juurisävel2}}}"
		and root2 ~="B♯" and root2 ~="C♭" and root2 ~="F♭" and root2 ~="E♯" then -- Sivunnimissä esiintymättömät synonyymit
      root = { root1, root2 }
   else
      root = root1
   end
   
   local notenames  = { "C", { "C♯", "D♭" }, "D", { "D♯", "E♭" }, "E", "F",
			{ "F♯", "G♭" }, "G", { "G♯", "A♭" }, "A", { "A♯", "B♭" }, "B" }

   local output = {}

   -- Erijuuriset
   for i, note in ipairs(notenames) do
      output[i] = join1(note, { chord_type })[1]
   end

   local tbl = get_table(root, chord_type)
	
	local hakemistolinkki = ''
	if type(root) == "string" then
		hakemistolinkki = '<div>[[Kitarakirja/Sointuluettelo:' .. root .. ' (hakemisto)|hakemisto: ' .. root .. ']]</div>'
	end

   return tekstipohja.korvaaMuuttujat(div_template, {
					 ["RINNAKKAISET"] = table.concat(output, " • "),
					 ["TAULUKKO"] = tostring(tbl),
					 ["HAKEMISTOLINKKI"] = hakemistolinkki
   })
   
end

return p