Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,15 @@ HyperFormula doesn't assume any existing user interface, making it a general-pur

- [Function syntax compatible with Microsoft Excel](https://hyperformula.handsontable.com/guide/compatibility-with-microsoft-excel.html) and [Google Sheets](https://hyperformula.handsontable.com/guide/compatibility-with-google-sheets.html)
- High-speed parsing and evaluation of spreadsheet formulas
- [A library of ~400 built-in functions](https://hyperformula.handsontable.com/guide/built-in-functions.html)
- [A library of over 400 built-in functions](https://hyperformula.handsontable.com/guide/built-in-functions.html)
- [Support for custom functions](https://hyperformula.handsontable.com/guide/custom-functions.html)
- [Support for Node.js](https://hyperformula.handsontable.com/guide/server-side-installation.html#install-with-npm-or-yarn)
- [Support for undo/redo](https://hyperformula.handsontable.com/guide/undo-redo.html)
- [Support for CRUD operations](https://hyperformula.handsontable.com/guide/basic-operations.html)
- [Support for clipboard](https://hyperformula.handsontable.com/guide/clipboard-operations.html)
- [Support for named expressions](https://hyperformula.handsontable.com/guide/named-expressions.html)
- [Support for data sorting](https://hyperformula.handsontable.com/guide/sorting-data.html)
- [Support for formula localization with 17 built-in languages](https://hyperformula.handsontable.com/guide/i18n-features.html)
- [Support for formula localization with 18 built-in languages](https://hyperformula.handsontable.com/guide/i18n-features.html)
- Easy integration with any front-end or back-end application
- GPLv3 or a [commercial license](https://handsontable.com/get-a-quote)
- Maintained by the team that stands behind the [Handsontable](https://handsontable.com/) data grid
Expand Down
31 changes: 31 additions & 0 deletions docs/.vuepress/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,35 @@ const footnotePlugin = require('markdown-it-footnote');
const searchBoxPlugin = require('./plugins/search-box');
const examples = require('./plugins/examples/examples');
const HyperFormula = require('../../dist/hyperformula.full');
const fs = require('fs');
const path = require('path');

// HF-282: count HF built-in languages from the i18n export barrel (source of truth):
// one `export {default as xxYY}` line per shipped language. Read once at config load —
// no dist/ dependency, so it resolves identically in `docs:dev` and `docs:build`.
const languagesCount = (
fs.readFileSync(path.resolve(__dirname, '../../src/i18n/languages/index.ts'), 'utf8')
.match(/^export \{\s*default as \w+\}/gm) || []
).length;
if (!languagesCount) {
throw new Error('HF-282: derived languagesCount is 0 — src/i18n/languages/index.ts barrel format changed; fix the regex in docs/.vuepress/config.js.');
}

// HF-282: the root README.md is rendered by GitHub and npm, not VuePress, so it cannot
// use the `{{ $page.languagesCount }}` interpolation and states the count literally.
// Assert it against the barrel so it cannot rot unnoticed — it already did once, when
// the Indonesian pack (#1674) left the README saying 17. The function count needs no
// such check: "over 400" stays true as functions are added.
const readmeLanguagesMatch = fs
.readFileSync(path.resolve(__dirname, '../../README.md'), 'utf8')
.match(/(\d+) built-in languages/);
if (!readmeLanguagesMatch) {
throw new Error('HF-282: could not find the "<n> built-in languages" phrase in README.md — if the wording changed on purpose, update this check in docs/.vuepress/config.js.');
}
if (Number(readmeLanguagesMatch[1]) !== languagesCount) {
throw new Error(`HF-282: README.md says ${readmeLanguagesMatch[1]} built-in languages but src/i18n/languages/index.ts exports ${languagesCount} — update README.md.`);
}

const includeCodeSnippet = require('./plugins/markdown-it-include-code-snippet');
const mdCompanions = require('./plugins/md-companions');

Expand Down Expand Up @@ -104,6 +133,8 @@ module.exports = {
$page.releaseDate = HyperFormula.releaseDate
// inject current HF function count as {{ $page.functionsCount }} variable
$page.functionsCount = HyperFormula.getRegisteredFunctionNames('enGB').length
// inject current HF built-in language count as {{ $page.languagesCount }} variable
$page.languagesCount = languagesCount
Comment thread
cursor[bot] marked this conversation as resolved.

if (searchPattern.test($page.path)) {
$page.frontmatter.editLink = false
Expand Down
2 changes: 1 addition & 1 deletion docs/.vuepress/plugins/md-companions/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ const { stripVuePressSyntax } = require('./strip');
*/
function resolvePageVars(md, page) {
return md.replace(
/\{\{\s*\$page\.(version|buildDate|buildDateURIEncoded|releaseDate|functionsCount)\s*\}\}/g,
/\{\{\s*\$page\.(version|buildDate|buildDateURIEncoded|releaseDate|functionsCount|languagesCount)\s*\}\}/g,
(m, key) => (page && page[key] != null ? String(page[key]) : m)
);
}
Expand Down
2 changes: 1 addition & 1 deletion docs/guide/ai-sdk.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ If you'd like to try it, [join the early access list](https://2fmjvg.share-eu1.h
- **Evaluate formulas deterministically** — your agent runs any Excel-compatible formula through HyperFormula instead of asking the LLM to do math. Results are exact, reproducible, and auditable.
- **Read and write cells and ranges** — the agent inspects, populates, or modifies sheet data through typed tool calls.
- **Trace dependencies** — precedents and dependents are surfaced so the agent can explain how every value was derived.
- **400+ built-in functions out of the box** — the agent has access to the full Excel-compatible function set (`SUM`, `VLOOKUP`, `IRR`, `INDEX/MATCH`, and the rest), no implementation work required.
- **{{ $page.functionsCount }} built-in functions out of the box** — the agent has access to the full Excel-compatible function set (`SUM`, `VLOOKUP`, `IRR`, `INDEX/MATCH`, and the rest), no implementation work required.

## Example

Expand Down
2 changes: 1 addition & 1 deletion docs/guide/built-in-functions.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ spreadsheet software. That is because a spreadsheet is probably the most
universal software ever created. We wanted the same flexibility for HyperFormula
but without the constraints of the spreadsheet UI.

Each of HyperFormula's built-in function names is available in [17 languages](localizing-functions.md#list-of-supported-languages) and [custom language packs](localizing-functions.md) can be added.
Each of HyperFormula's built-in function names is available in [{{ $page.languagesCount }} languages](localizing-functions.md#list-of-supported-languages) and [custom language packs](localizing-functions.md) can be added.

The latest version of HyperFormula has an extensive collection of
**{{ $page.functionsCount }}** functions grouped into categories:
Expand Down
2 changes: 1 addition & 1 deletion docs/guide/i18n-features.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Configure HyperFormula to match the languages and regions of your users.

## Function names and errors

Each of HyperFormula's [built-in functions](built-in-functions.md) and [errors](types-of-errors.md) is available in [18 languages](localizing-functions.md#list-of-supported-languages).
Each of HyperFormula's [built-in functions](built-in-functions.md) and [errors](types-of-errors.md) is available in [{{ $page.languagesCount }} languages](localizing-functions.md#list-of-supported-languages).

You can easily [switch between languages](localizing-functions.md) ([`language`](../api/interfaces/configparams.md#language)).

Expand Down
2 changes: 1 addition & 1 deletion docs/guide/integration-with-langchain.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ If you'd like to try it, [join the early access list](https://2fmjvg.share-eu1.h
- **Evaluate formulas deterministically** — your agent runs any Excel-compatible formula through HyperFormula instead of asking the LLM to do math. Results are exact, reproducible, and auditable.
- **Read and write cells and ranges** — the agent inspects, populates, or modifies sheet data through typed tool calls.
- **Trace dependencies** — precedents and dependents are surfaced so the agent can explain how every value was derived.
- **400+ built-in functions out of the box** — the agent has access to the full Excel-compatible function set (`SUM`, `VLOOKUP`, `IRR`, `INDEX/MATCH`, and the rest), no implementation work required.
- **{{ $page.functionsCount }} built-in functions out of the box** — the agent has access to the full Excel-compatible function set (`SUM`, `VLOOKUP`, `IRR`, `INDEX/MATCH`, and the rest), no implementation work required.

## Example

Expand Down
2 changes: 1 addition & 1 deletion docs/guide/localizing-functions.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Localizing functions

You can localize a function's ID and error
messages. Currently, HyperFormula supports 18 languages, with British English
messages. Currently, HyperFormula supports {{ $page.languagesCount }} languages, with British English
as the default.

To change the language all you need to do is import and
Expand Down
2 changes: 1 addition & 1 deletion docs/guide/mcp-server.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ If you'd like to try it, [join the early access list](https://2fmjvg.share-eu1.h
- **Evaluate formulas deterministically** — your agent runs any Excel-compatible formula through HyperFormula instead of asking the LLM to do math. Results are exact, reproducible, and auditable.
- **Read and write cells and ranges** — the agent inspects, populates, or modifies sheet data through typed tool calls.
- **Trace dependencies** — precedents and dependents are surfaced so the agent can explain how every value was derived.
- **400+ built-in functions out of the box** — the agent has access to the full Excel-compatible function set (`SUM`, `VLOOKUP`, `IRR`, `INDEX/MATCH`, and the rest), no implementation work required.
- **{{ $page.functionsCount }} built-in functions out of the box** — the agent has access to the full Excel-compatible function set (`SUM`, `VLOOKUP`, `IRR`, `INDEX/MATCH`, and the rest), no implementation work required.

## Example

Expand Down
4 changes: 2 additions & 2 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,15 +45,15 @@ HyperFormula doesn't assume any existing user interface, making it a general-pur

- [Function syntax compatible with Microsoft Excel](guide/compatibility-with-microsoft-excel.md) and [Google Sheets](guide/compatibility-with-google-sheets.md)
- High-speed parsing and evaluation of spreadsheet formulas
- [A library of ~400 built-in functions](guide/built-in-functions.md)
- [A library of {{ $page.functionsCount }} built-in functions](guide/built-in-functions.md)
- [Support for custom functions](guide/custom-functions.md)
- [Support for Node.js](guide/server-side-installation.md#install-with-npm-or-yarn)
- [Support for undo/redo](guide/undo-redo.md)
- [Support for CRUD operations](guide/basic-operations.md)
- [Support for clipboard](guide/clipboard-operations.md)
- [Support for named expressions](guide/named-expressions.md)
- [Support for data sorting](guide/sorting-data.md)
- [Support for formula localization with 17 built-in languages](guide/i18n-features.md)
- [Support for formula localization with {{ $page.languagesCount }} built-in languages](guide/i18n-features.md)
- Easy integration with any front-end or back-end application
- GPLv3 or a [commercial license](https://handsontable.com/get-a-quote)
- Maintained by the team that stands behind the [Handsontable](https://handsontable.com/) data grid
Expand Down
Loading