Skip to content

Commit

Permalink
Added aon functionality (thanks to zmon!)
Browse files Browse the repository at this point in the history
  • Loading branch information
Adam Bogg committed Apr 10, 2019
2 parents ed1a27f + 9a4e50c commit e43a5a2
Show file tree
Hide file tree
Showing 4 changed files with 211 additions and 75 deletions.
55 changes: 49 additions & 6 deletions PFSpells/GeneratorWindow.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

222 changes: 157 additions & 65 deletions PFSpells/GeneratorWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,28 @@
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Web;

namespace PFSpells
{
public partial class GeneratorWindow : Form
{
enum DataSource
{
AoN,
D20
}

public GeneratorWindow()
{
InitializeComponent();
}

private StringWriter writer;
private List<string> failedSpells;
private HtmlWeb web;
private string[] spellNames;

private void Form1_Load(object sender, EventArgs e)
{

Expand All @@ -36,88 +48,168 @@ private void listBox1_SelectedIndexChanged(object sender, EventArgs e)

}

private void button1_Click(object sender, EventArgs e)
private void InsertHead()
{
progressBar1.Value = 0;
button1.Enabled = false;
Cursor.Current = Cursors.WaitCursor;
string[] spellNames = textBox1.Lines;
string charName = textBox2.Lines[0];
StringWriter writer = new StringWriter();
writer.WriteLine("<!DOCTYPE html>");
writer.WriteLine("<html>");
writer.WriteLine("<head>");
writer.WriteLine("<title>" + charName + "</title>");
writer.WriteLine("<link rel='stylesheet' id='ogncustom-css-css' href='https://www.d20pfsrd.com/wp-content/plugins/ogncustom/css/ogncustom.css?ver=1551434665' type='text/css' media='all' />");
writer.WriteLine("<link rel='stylesheet' id='toc-screen-css' href='https://www.d20pfsrd.com/wp-content/plugins/table-of-contents-plus/screen.min.css?ver=1509' type='text/css' media='all' />");
writer.WriteLine("<link rel='stylesheet' id='quickstrap-css' href='https://www.d20pfsrd.com/wp-content/themes/quickstrap/style.css?ver=741751694b0c23cb369738b3058aae5a' type='text/css' media='all' />");
writer.WriteLine("<link rel='stylesheet' id='child-style-css' href='https://www.d20pfsrd.com/wp-content/themes/srdtheme/css/style.css?ver=1.5.2.7' type='text/css' media='all' />");
writer.WriteLine("<link rel='stylesheet' id='quickstrap-bootstrap-css' href='https://www.d20pfsrd.com/wp-content/themes/quickstrap/css/bootstrap.min.css?ver=3.3.6' type='text/css' media='all' />");
writer.WriteLine("<link rel='stylesheet' id='child-dynamic-css' href='https://www.d20pfsrd.com/wp-content/themes/srdtheme/css/sites/12.css?ver=1546817288' type='text/css' media='all' />");
writer.WriteLine("<link rel='stylesheet' id='quickstrap-fontawesome-css' href='https://www.d20pfsrd.com/wp-content/themes/quickstrap/font-awesome/css/font-awesome.min.css?ver=4.5.0' type='text/css' media='all' />");
if (d20Radio.Checked)
{
writer.WriteLine("<link rel='stylesheet' id='ogncustom-css-css' href='https://www.d20pfsrd.com/wp-content/plugins/ogncustom/css/ogncustom.css?ver=1551434665' type='text/css' media='all' />");
writer.WriteLine("<link rel='stylesheet' id='toc-screen-css' href='https://www.d20pfsrd.com/wp-content/plugins/table-of-contents-plus/screen.min.css?ver=1509' type='text/css' media='all' />");
writer.WriteLine("<link rel='stylesheet' id='quickstrap-css' href='https://www.d20pfsrd.com/wp-content/themes/quickstrap/style.css?ver=741751694b0c23cb369738b3058aae5a' type='text/css' media='all' />");
writer.WriteLine("<link rel='stylesheet' id='child-style-css' href='https://www.d20pfsrd.com/wp-content/themes/srdtheme/css/style.css?ver=1.5.2.7' type='text/css' media='all' />");
writer.WriteLine("<link rel='stylesheet' id='quickstrap-bootstrap-css' href='https://www.d20pfsrd.com/wp-content/themes/quickstrap/css/bootstrap.min.css?ver=3.3.6' type='text/css' media='all' />");
writer.WriteLine("<link rel='stylesheet' id='child-dynamic-css' href='https://www.d20pfsrd.com/wp-content/themes/srdtheme/css/sites/12.css?ver=1546817288' type='text/css' media='all' />");
writer.WriteLine("<link rel='stylesheet' id='quickstrap-fontawesome-css' href='https://www.d20pfsrd.com/wp-content/themes/quickstrap/font-awesome/css/font-awesome.min.css?ver=4.5.0' type='text/css' media='all' />");
}

else
{
writer.WriteLine("<link href='https://aonprd.com/Styles/layout.css' rel='stylesheet' type='text/css' />");
writer.WriteLine("<link href='https://aonprd.com/Styles/typography.css' rel='stylesheet' type='text/css' />");
writer.WriteLine("<link href='https://fonts.googleapis.com/css?family=Julee' rel='stylesheet' type='text/css' />");
writer.WriteLine("<link href='http://fonts.googleapis.com/css?family=Julee' rel='stylesheet' type='text/css' />");
}

writer.WriteLine("<script>function show(id){var x=document.getElementById(id);if(x.style.display===\"none\"){x.style.display=\"block\"}else{x.style.display=\"none\"}}</script>");
writer.WriteLine("</head>");
writer.WriteLine("<body>");
}

HtmlWeb web = new HtmlWeb();
List<string> failedSpells = new List<string>();
for (int i = 0; i < spellNames.Length; i++, progressBar1.Increment(((i + 1) / spellNames.Length) * 100))
private void InsertData(string spellName)
{
if (d20Radio.Checked)
InsertDataD20(spellName);
else
InsertDataAoN(spellName);
}

private void InsertDataD20(string spellName)
{
string nameForURL = Regex.Replace(spellName, "[^0-9a-zA-Z'’ ]", "");
nameForURL = Regex.Replace(nameForURL, "['’ ]", "-");
string url;
try
{
string name = spellNames[i];
string nameForURL = Regex.Replace(name, "[^0-9a-zA-Z'’ ]", "");
nameForURL = Regex.Replace(nameForURL, "['’ ]", "-");
string url;
try
url = "https://www.d20pfsrd.com/magic/all-spells/" + nameForURL[0] + "/" + nameForURL;
}
catch (IndexOutOfRangeException)
{
failedSpells.Add(spellName);
return;
}
url = url.ToLower();

HtmlAgilityPack.HtmlDocument htmlDoc = web.Load(url);
HtmlNode spellNode = htmlDoc.DocumentNode.SelectSingleNode("//div[contains(@class, 'article-content')]");
if (spellNode == null)
{
nameForURL = spellName.ToLower();
string[] toRemove = { ", greater", ", lesser", ", communal", ", mass" };

foreach (string term in toRemove)
{
url = "https://www.d20pfsrd.com/magic/all-spells/" + nameForURL[0] + "/" + nameForURL;
if (nameForURL.Contains(term))
{
nameForURL = nameForURL.Remove(nameForURL.IndexOf(term), term.Length);
}
}
catch (IndexOutOfRangeException)

string[] levelRemovals = { " I", " II", " III", " IV", " V", " VI", " VII", " VIII", " IX" };
foreach (string term in levelRemovals)
{
continue;
if (nameForURL.Contains(term.ToLower()))
{
nameForURL = nameForURL.Remove(nameForURL.IndexOf(term.ToLower()), term.Length);
break;
}
}
url = url.ToLower();

HtmlAgilityPack.HtmlDocument htmlDoc = web.Load(url);
HtmlNode spellNode = htmlDoc.DocumentNode.SelectSingleNode("//div[contains(@class, 'article-content')]");
url = "https://www.d20pfsrd.com/magic/all-spells/" + nameForURL[0] + "/" + nameForURL;
htmlDoc = web.Load(url);
spellNode = htmlDoc.DocumentNode.SelectSingleNode("//div[contains(@class, 'article-content')]");
if (spellNode == null)
{
nameForURL = name.ToLower();
string[] toRemove = { ", greater", ", lesser", ", communal", ", mass" };
failedSpells.Add(spellName);
return;
}
}

foreach (string term in toRemove)
{
if (nameForURL.Contains(term))
{
nameForURL = nameForURL.Remove(nameForURL.IndexOf(term), term.Length);
}
}
HtmlNode productNode = htmlDoc.DocumentNode.SelectSingleNode("//div[contains(@class, 'product-right')]");
if (productNode != null)
productNode.Remove();

string[] levelRemovals = { " I", " II", " III", " IV", " V", " VI", " VII", " VIII", " IX" };
foreach (string term in levelRemovals)
{
if (nameForURL.Contains(term.ToLower()))
{
nameForURL = nameForURL.Remove(nameForURL.IndexOf(term.ToLower()), term.Length);
break;
}
}
int id = Array.FindIndex<string>(spellNames, name => name == spellName);
writer.WriteLine("<h1 class=\"spell-name\" onclick=\"show(" + id + ")\">" + spellName + "</h1>");
writer.WriteLine("<div id=" + id + ">");
spellNode.WriteTo(writer);
writer.WriteLine("</div>");
}

private void InsertDataAoN(string spellName)
{
string nameForURL = HttpUtility.UrlEncode(spellName);
string url = "https://aonprd.com/SpellDisplay.aspx?ItemName=" + nameForURL;

HtmlAgilityPack.HtmlDocument htmlDoc = web.Load(url);
HtmlNode spellNode = htmlDoc.DocumentNode.SelectSingleNode("//table[contains(@id, 'ctl00_MainContent_DataListTypes')]");

url = "https://www.d20pfsrd.com/magic/all-spells/" + nameForURL[0] + "/" + nameForURL;
htmlDoc = web.Load(url);
spellNode = htmlDoc.DocumentNode.SelectSingleNode("//div[contains(@class, 'article-content')]");
if (spellNode == null)
if (spellNode == null)
{
nameForURL = spellName.ToLower();
var levelReplacements = new Dictionary<string, int>();
levelReplacements.Add("i", 1);
levelReplacements.Add("ii", 2);
levelReplacements.Add("iii", 3);
levelReplacements.Add("iv", 4);
levelReplacements.Add("v", 5);
levelReplacements.Add("vi", 6);
levelReplacements.Add("vii", 7);
levelReplacements.Add("viii", 8);
levelReplacements.Add("ix", 9);
foreach (var level in levelReplacements)
{
if (nameForURL.Contains(level.Key))
{
failedSpells.Add(name);
continue;
nameForURL = nameForURL.Remove(nameForURL.IndexOf(level.Key), level.Key.Length).Insert(nameForURL.IndexOf(level.Key), level.Value.ToString());
break;
}
}
HtmlNode productNode = htmlDoc.DocumentNode.SelectSingleNode("//div[contains(@class, 'product-right')]");
if (productNode != null)
productNode.Remove();
writer.WriteLine("<h1 class=\"spell-name\" onclick=\"show(" + i + ")\">" + name + "</h1>");
writer.WriteLine("<div id=" + i + ">");
spellNode.WriteTo(writer);
writer.WriteLine("</div>");

url = "https://aonprd.com/SpellDisplay.aspx?ItemName=" + nameForURL;
htmlDoc = web.Load(url);
spellNode = htmlDoc.DocumentNode.SelectSingleNode("//table[contains(@id, 'ctl00_MainContent_DataListTypes')]");
if (spellNode == null)
{
failedSpells.Add(spellName);
return;
}
}

int id = Array.FindIndex<string>(spellNames, name => name == spellName);
writer.WriteLine("<h1 class=\"spell-name\" onclick=\"show(" + id + ")\">" + spellName + "</h1>");
writer.WriteLine("<div id=" + id + ">");
spellNode.WriteTo(writer);
writer.WriteLine("</div>");
}

private void button1_Click(object sender, EventArgs e)
{
progressBar1.Value = 0;
button1.Enabled = false;
Cursor.Current = Cursors.WaitCursor;
spellNames = textBox1.Lines;
string charName = textBox2.Lines[0];
writer = new StringWriter();
writer.WriteLine("<!DOCTYPE html>");
writer.WriteLine("<html>");
writer.WriteLine("<head>");
writer.WriteLine("<title>" + charName + "</title>");
InsertHead();
writer.WriteLine("</head>");
writer.WriteLine("<body>");

web = new HtmlWeb();
failedSpells = new List<string>();
for (int i = 0; i < spellNames.Length; i++, progressBar1.Increment(((i + 1) / spellNames.Length) * 100))
{
InsertData(spellNames[i]);
}

writer.WriteLine("</body>");
Expand Down
1 change: 1 addition & 0 deletions PFSpells/PFSpells.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Web" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
Expand Down
Loading

0 comments on commit e43a5a2

Please sign in to comment.