decklist parser outline
This commit is contained in:
parent
0a5df6accc
commit
e52f82477a
1 changed files with 92 additions and 0 deletions
|
@ -61,6 +61,97 @@ export default {
|
|||
this.goHome()
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
parseDecklist() {
|
||||
let fileContent = `--Generated By FF Decks (www.ffdecks.com)--
|
||||
Deck Name: Ashe turbo
|
||||
Created by: hawks1997
|
||||
|
||||
|
||||
Forward(26):
|
||||
3 Garland (6-002)
|
||||
3 Rain (8-134)
|
||||
3 Garnet (3-129)
|
||||
2 Zidane (8-115)
|
||||
3 Ashe (2-121)
|
||||
3 Basch (2-014)
|
||||
3 Steiner (4-129)
|
||||
3 Vivi (3-017)
|
||||
3 Cecil (2-129)
|
||||
|
||||
Summon(8):
|
||||
2 Cuchulainn, the Impure (2-133)
|
||||
2 Bahamut (4-016)
|
||||
1 Phoenix (5-019)
|
||||
3 Leviathan (6-125)
|
||||
|
||||
Backup(16):
|
||||
2 Sage (2-005)
|
||||
2 Vermilion Bird l'Cie Caetuna (6-010)
|
||||
2 Yotsuyu (8-020)
|
||||
2 Rasler (5-166)
|
||||
2 Red Mage (1-003)
|
||||
3 Hilda (6-122)
|
||||
3 Astrologian (2-130)
|
||||
|
||||
Monster(0):`
|
||||
|
||||
// select the line containing 'deck name:'
|
||||
// and its successor
|
||||
let metaRE = /^deck name: (.+)$[\s]*?^(.+)$/im
|
||||
let metaData = metaRE.exec(fileContent)
|
||||
|
||||
// extract matches
|
||||
let deckData = {
|
||||
name: metaData[1],
|
||||
note: metaData[2],
|
||||
cards: []
|
||||
}
|
||||
|
||||
// select all lines containing card serial numbers
|
||||
let cardLinesRE = /^.*\b\d-\d{3}[A-Z]?\b.*$/gm
|
||||
let cardLines = fileContent.match(cardLinesRE)
|
||||
|
||||
cardLines.forEach(cardLine => {
|
||||
// extract serial (guaranteed to be in here!)
|
||||
let serialRE = /\b(\d-\d{3})[A-Z]?\b/i
|
||||
let serial = serialRE.exec(cardLine)[1]
|
||||
|
||||
// strip out serial number
|
||||
cardLine = cardLine.replace(serialRE, '')
|
||||
|
||||
let countREs = [
|
||||
// prioritize a count with "times" symbol *, x, ×
|
||||
/\b([1-3])(?:[*×]|[x]\b)/,
|
||||
/(?:[*×]|\b[x])([1-3])\b/,
|
||||
// next priority: with whitespace
|
||||
/\s+([1-3])\s+/,
|
||||
/\s+([1-3])\b/,
|
||||
/\b([1-3])\s+/,
|
||||
// least priority: any single digit
|
||||
/\b([1-3])\b/
|
||||
]
|
||||
|
||||
// fallback value
|
||||
let count = '0'
|
||||
for (let i = 0; i < countREs.length; i++) {
|
||||
let data = countREs[i].exec(cardLine)
|
||||
|
||||
if (data) {
|
||||
count = data[1]
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
// push card data into deck
|
||||
deckData.cards.push({
|
||||
serial: serial,
|
||||
count: count
|
||||
})
|
||||
})
|
||||
|
||||
console.log(deckData)
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -69,6 +160,7 @@ export default {
|
|||
},
|
||||
|
||||
mounted() {
|
||||
this.parseDecklist()
|
||||
|
||||
axios
|
||||
.post('/user/info', {
|
||||
|
|
Reference in a new issue