Skip to content

Commit

Permalink
Added stats generation
Browse files Browse the repository at this point in the history
  • Loading branch information
brwarner committed Nov 16, 2024
1 parent 6765ae1 commit 8ac230f
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 0 deletions.
8 changes: 8 additions & 0 deletions src/compiler/Compiler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { Story as ParsedStory } from "./Parser/ParsedHierarchy/Story";
import { DebugMetadata } from "../engine/DebugMetadata";
import { StringValue } from "../engine/Value";
import { asOrNull } from "../engine/TypeAssertion";
import { GenerateStoryStats, Stats } from "./Stats";

export { CompilerOptions } from "./CompilerOptions";
export { InkParser } from "./Parser/InkParser";
Expand Down Expand Up @@ -113,6 +114,13 @@ export class Compiler {
}
};

public readonly GenerateStats = (): Stats | null => {
if (this._parsedStory === null) {
return null;
}
return GenerateStoryStats(this._parsedStory);
};

public readonly DebugMetadataForContentAtOffset = (
offset: number
): DebugMetadata | null => {
Expand Down
52 changes: 52 additions & 0 deletions src/compiler/Stats.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import { Choice } from "./Parser/ParsedHierarchy/Choice";
import { Divert } from "./Parser/ParsedHierarchy/Divert/Divert";
import { Gather } from "./Parser/ParsedHierarchy/Gather/Gather";
import { Knot } from "./Parser/ParsedHierarchy/Knot";
import { Stitch } from "./Parser/ParsedHierarchy/Stitch";
import { Story } from "./Parser/ParsedHierarchy/Story";
import { Text } from "./Parser/ParsedHierarchy/Text";

export interface Stats {
words: number;
knots: number;
stitches: number;
functions: number;
choices: number;
gathers: number;
diverts: number;
}

export function GenerateStoryStats(story: Story): Stats {
let allText = story.FindAll(Text)();
let words = 0;
for (const text of allText) {
let wordsInThisStr = 0;
let wasWhiteSpace = true;
for (const c of text.text) {
if (c == " " || c == "\t" || c == "\n" || c == "\r") {
wasWhiteSpace = true;
} else if (wasWhiteSpace) {
wordsInThisStr++;
wasWhiteSpace = false;
}
}

words += wordsInThisStr;
}

const knots = story.FindAll(Knot)();
const stitches = story.FindAll(Stitch)();
const choices = story.FindAll(Choice)();
const gathers = story.FindAll(Gather)((g) => g.debugMetadata != null);
const diverts = story.FindAll(Divert)();

return {
words,
knots: knots.length,
functions: knots.filter((k) => k.isFunction).length,
stitches: stitches.length,
gathers: gathers.length,
diverts: diverts.length - 1,
choices: choices.length,
};
}

0 comments on commit 8ac230f

Please sign in to comment.