@qgustavor/ass-parser
Advanced tools
Comparing version 0.2.2 to 0.3.0
11
index.js
@@ -55,2 +55,13 @@ import parseDescriptor from './src/descriptor.js' | ||
const detectStringifyOptions = (text) => { | ||
// If text includes '\r\n' assume it uses it for new lines | ||
const lineBreak = text.includes('\r\n') ? '\r\n' : '\n' | ||
// Use a Regex to detect which joiner the subtitle uses | ||
const formatJoiner = text.match(/^Format: \S+$/m) ? ',' : ', ' | ||
return { lineBreak, formatJoiner } | ||
} | ||
export default parseAss | ||
export { detectStringifyOptions } |
{ | ||
"name": "@qgustavor/ass-parser", | ||
"version": "0.2.2", | ||
"version": "0.3.0", | ||
"description": "Parse SSA/ASS subtitle format", | ||
@@ -13,3 +13,4 @@ "author": "Eugene Sharygin <eush77@gmail.com>", | ||
"scripts": { | ||
"test": "tape test/*.js" | ||
"test": "standard && tape test/*.js", | ||
"test-fix": "standard --fix && tape test/*.js" | ||
}, | ||
@@ -37,4 +38,5 @@ "files": [ | ||
"devDependencies": { | ||
"standard": "^17.0.0", | ||
"tape": "^5.5.3" | ||
} | ||
} |
196
README.md
@@ -1,184 +0,15 @@ | ||
[![npm](https://nodei.co/npm/ass-parser.png)](https://nodei.co/npm/ass-parser/) | ||
# ass-parser | ||
[![Build Status][travis-badge]][travis] [![Dependency Status][david-badge]][david] | ||
Parse SSA/ASS subtitle format. Forked from [eush77/ass-parser](https://github.com/eush77/ass-parser). | ||
Parse SSA/ASS subtitle format. | ||
## Changes: | ||
[travis]: https://travis-ci.org/eush77/ass-parser | ||
[travis-badge]: https://travis-ci.org/eush77/ass-parser.svg | ||
[david]: https://david-dm.org/eush77/ass-parser | ||
[david-badge]: https://david-dm.org/eush77/ass-parser.png | ||
- All dependencies replaced with native modern JavaScript functions. | ||
- ES Modules instead of CommonJS. | ||
- Add `detectStringifyOptions` helper function. | ||
## Example | ||
## Demo | ||
For the ASS subtitle below (from the [Wikipedia page](http://en.wikipedia.org/wiki/SubStation_Alpha)) | ||
[https://codepen.io/qgustavor/full/YzaRXeX](https://codepen.io/qgustavor/full/YzaRXeX) | ||
``` | ||
[Script Info] | ||
; This is a Sub Station Alpha v4 script. | ||
; For Sub Station Alpha info and downloads, | ||
; go to http://www.eswat.demon.co.uk/ | ||
Title: Neon Genesis Evangelion - Episode 26 (neutral Spanish) | ||
Original Script: RoRo | ||
Script Updated By: version 2.8.01 | ||
ScriptType: v4.00 | ||
Collisions: Normal | ||
PlayResY: 600 | ||
PlayDepth: 0 | ||
Timer: 100,0000 | ||
[V4 Styles] | ||
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding | ||
Style: DefaultVCD, Arial,28,11861244,11861244,11861244,-2147483640,-1,0,1,1,2,2,30,30,30,0,0 | ||
[Events] | ||
Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text | ||
Dialogue: Marked=0,0:00:01.18,0:00:06.85,DefaultVCD, NTP,0000,0000,0000,,{\pos(400,570)}Like an angel with pity on nobody | ||
``` | ||
`assParser(text, { comments: true })` returns the following: | ||
```js | ||
[ | ||
{ | ||
"section": "Script Info", | ||
"body": [ | ||
{ | ||
"type": "comment", | ||
"value": " This is a Sub Station Alpha v4 script." | ||
}, | ||
{ | ||
"type": "comment", | ||
"value": " For Sub Station Alpha info and downloads," | ||
}, | ||
{ | ||
"type": "comment", | ||
"value": " go to http://www.eswat.demon.co.uk/" | ||
}, | ||
{ | ||
"key": "Title", | ||
"value": "Neon Genesis Evangelion - Episode 26 (neutral Spanish)" | ||
}, | ||
{ | ||
"key": "Original Script", | ||
"value": "RoRo" | ||
}, | ||
{ | ||
"key": "Script Updated By", | ||
"value": "version 2.8.01" | ||
}, | ||
{ | ||
"key": "ScriptType", | ||
"value": "v4.00" | ||
}, | ||
{ | ||
"key": "Collisions", | ||
"value": "Normal" | ||
}, | ||
{ | ||
"key": "PlayResY", | ||
"value": "600" | ||
}, | ||
{ | ||
"key": "PlayDepth", | ||
"value": "0" | ||
}, | ||
{ | ||
"key": "Timer", | ||
"value": "100,0000" | ||
} | ||
] | ||
}, | ||
{ | ||
"section": "V4 Styles", | ||
"body": [ | ||
{ | ||
"key": "Format", | ||
"value": [ | ||
"Name", | ||
"Fontname", | ||
"Fontsize", | ||
"PrimaryColour", | ||
"SecondaryColour", | ||
"TertiaryColour", | ||
"BackColour", | ||
"Bold", | ||
"Italic", | ||
"BorderStyle", | ||
"Outline", | ||
"Shadow", | ||
"Alignment", | ||
"MarginL", | ||
"MarginR", | ||
"MarginV", | ||
"AlphaLevel", | ||
"Encoding" | ||
] | ||
}, | ||
{ | ||
"key": "Style", | ||
"value": { | ||
"Name": "DefaultVCD", | ||
"Fontname": "Arial", | ||
"Fontsize": "28", | ||
"PrimaryColour": "11861244", | ||
"SecondaryColour": "11861244", | ||
"TertiaryColour": "11861244", | ||
"BackColour": "-2147483640", | ||
"Bold": "-1", | ||
"Italic": "0", | ||
"BorderStyle": "1", | ||
"Outline": "1", | ||
"Shadow": "2", | ||
"Alignment": "2", | ||
"MarginL": "30", | ||
"MarginR": "30", | ||
"MarginV": "30", | ||
"AlphaLevel": "0", | ||
"Encoding": "0" | ||
} | ||
} | ||
] | ||
}, | ||
{ | ||
"section": "Events", | ||
"body": [ | ||
{ | ||
"key": "Format", | ||
"value": [ | ||
"Marked", | ||
"Start", | ||
"End", | ||
"Style", | ||
"Name", | ||
"MarginL", | ||
"MarginR", | ||
"MarginV", | ||
"Effect", | ||
"Text" | ||
] | ||
}, | ||
{ | ||
"key": "Dialogue", | ||
"value": { | ||
"Marked": "Marked=0", | ||
"Start": "0:00:01.18", | ||
"End": "0:00:06.85", | ||
"Style": "DefaultVCD", | ||
"Name": "NTP", | ||
"MarginL": "0000", | ||
"MarginR": "0000", | ||
"MarginV": "0000", | ||
"Effect": "", | ||
"Text": "{\\pos(400,570)}Like an angel with pity on nobody" | ||
} | ||
} | ||
] | ||
} | ||
] | ||
``` | ||
## API | ||
@@ -188,3 +19,3 @@ | ||
Returns the parse tree. | ||
Default export. Returns the parse tree. | ||
@@ -199,5 +30,6 @@ Comments are ignored unless `options.comments` is set. | ||
Subtitle is a list of sections, each of them has `section` and `body` properties. The `body` is a list of key-value bindings (descriptors), with `key` and `value` properties (`type == 'comment'` and `value` for comments). | ||
Subtitle is a list of sections, each of them has `section` and `body` properties. The `body` is a list of key-value bindings (descriptors), with `key` and `value` properties (`type === 'comment'` and `value` for comments). | ||
`value` can be one of the following: | ||
- array if the descriptor key is `"Format"`; | ||
@@ -207,10 +39,14 @@ - object if there is a `"Format"` descriptor above in the section; | ||
### `detectStringifyOptions(text)` | ||
Named export. Returns an options object to be passed to `stringify` in order to parse then stringify a subtitle with the minimal differences possible. | ||
## References | ||
- [Wikipedia page](http://en.wikipedia.org/wiki/SubStation_Alpha) | ||
- [format specification](http://www.perlfu.co.uk/projects/asa/ass-specs.doc) | ||
- [Format specification](http://www.perlfu.co.uk/projects/asa/ass-specs.doc) | ||
## Related | ||
- [ass-stringify](https://www.npmjs.com/packages/ass-stringify) - stringify SSA/ASS parse tree. | ||
- [@qgustavor/ass-stringify](https://www.npmjs.com/package/@qgustavor/ass-stringify) - stringify SSA/ASS parse tree. | ||
@@ -217,0 +53,0 @@ ## Install |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
102
6569
2
59