As for the prot one this is it [warning spoiler lol]
[spoiler]
Code:
/startattack
/run if IsUsableSpell("Charge")==1 and GetSpellCooldown("Charge")==0 and IsSpellInRange("Charge", "target")==1 then CastSpellByName("Charge") elseif IsUsableSpell("Intercept")==1 and GetSpellCooldown("Intercept")==0 and IsSpellInRange("Intercept", "target")==1 then CastSpellByName("Intercept") end
/run if UnitCastingInfo("target") and GetSpellCooldown("Shield Bash")==0 then CastSpellByName("Shield Bash") end
/run local _,a,_ = GetSpellCooldown("Shield Block") if (a == 0) then CastSpellByName("Shield Block") end
/run if UnitHealth('player')<13000 and GetSpellCooldown("Enraged Regeneration")==0 and IsUsableSpell("Enraged Regeneration")==1 then CastSpellByName("Enraged Regeneration") end
/run if UnitHealth('player')<11000 and GetSpellCooldown("Shield Wall")==0 then CastSpellByName("Shield Wall") end
/run if UnitHealth('player')<10000 and GetSpellCooldown("Last Stand")==0 then CastSpellByName("Last Stand") end
/run local _,d,_ = GetSpellCooldown("Bloodrage") if (d == 0) then CastSpellByName("Bloodrage") end
/run if not UnitDebuff("target", "Demoralizing Shout") and not UnitDebuff("target", "Demoralizing Roar") and not UnitDebuff("target", "Vindication") and not UnitDebuff("target", "Curse of Weakness") and IsSpellInRange("Shield Slam", "target")==1 then CastSpellByName("Demoralizing Shout") end
/run if UnitBuff("player", "Glyph of Revenge") then CastSpellByName("Heroic Strike") end
/run if not UnitBuff("player", "Commanding Shout") then CastSpellByName("Commanding Shout") end
/run local _,a,_ = GetSpellCooldown("Shield Slam") if (a == 0) and IsSpellInRange("Shield Slam", "target")==1 then CastSpellByName("Shield Slam") end
/run i=1 d=120 while(i<=40)do a={UnitDebuff("target",i)} if a[1]=="Sunder Armor" and a[8]=="player" then d=a[7]-GetTime() if a[4]==5 then break end end i=i+1 end if i>40 or d<4 then CastSpellByName("Devastate") end
/run if GetSpellCooldown("Revenge")==0 and IsUsableSpell("Revenge")==1 then CastSpellByName("Revenge") end
/run local _,a,_ = GetSpellCooldown("Thunder Clap") if (a == 0) then CastSpellByName("Thunder Clap") end
/run local _,a,_ = GetSpellCooldown("Shockwave") if (a == 0) and IsSpellInRange("Shockwave", "target")==1 then CastSpellByName("Shockwave") end
/run local _,a,_ = GetSpellCooldown("Concussion blow") if (a == 0) and IsSpellInRange("Concussion blow", "target")==1 then CastSpellByName("Concussion blow") end
/run local _,a,_ = GetSpellCooldown("Heroic Throw") if (a == 0) and IsSpellInRange("Heroic Throw", "target")==1 then CastSpellByName("Heroic Throw") end
/run if UnitPower("Player") > 79 then CastSpellByName("Heroic Strike") end
/run if UnitPower("Player") > 20 then CastSpellByName("Devastate") end
/run if UnitHealth('player')<13000 then RunMacroText("/use Medallion of Heroism") end
/run if UnitHealth('player')<13000 then RunMacroText("/use Offering of Sacrifice") end
/run StaticPopup_Hide("MACRO_ACTION_FORBIDDEN");
[/spoiler]
And for the sake of keeping this shit understandable I'll post teh logic 
1: If your target is in range of Charge cast Charge elseif Charge is on cooldown, cast Intercept.
2: If your unit is casting, cast Shield Bash
3: Cast Shield Block
4: Use several defensive spells. If less than 13k hp and you have an enrage effect, cast Enraged Regeneration, if below 11k hp, cast Shield Wall, if below 10k, cast Last Stand
5: If less than 80 rage, cast Bloodrage
6: If your unit haven't gotten any attackpower reducing debuff, cast Demoralizing Shout. (Vindication, roar, Curse of Weakness)
7: If revenge glyph is active, cast heroic strike.
8: If you haven't gotten Commanding Shout, cast Commanding Shout
9: If shield slam is off cooldown (As it happens with Sword and broad and just standard rotation), cast Shield Slam
10: If your target has less than 5 sunders or less than 4 seconds remaining of sunder armor, cast Devastate
11: If you you've just blocked, parried or dodged, cast Revenge
12: Cast Thunder Clap
13: Cast Shockwave
14: Cast Concussion Blow
15: Cast Heroic Throw(If all the other spells aren't in range and charge/intercept range is too short or on cooldown, this will be prioritized as well)
16: If rage is above 79, cast Heroic Strike
17: If rage is above 20 and all other abilities are on CD, cast Devastate
18: If less than 13k hp (Using items is prioritized above all other abilities, so no reason to have this any other place than buttom of the macro), use Medallion of Heroism
19: If less than 13k hp, use Offering of Sacrifice (trinket)