Repository navigation
Comparing changes
Open a pull request
base repository: libraz/formulon
base: v0.11.0
head repository: libraz/formulon
compare: v0.11.1
- 12 commits
- 74 files changed
- 1 contributor
Commits on Aug 22, 2026
-
feat(io): carry phonetic guides through the xlsb shared-string table
- decode the BrtSSTItem phonetic tail in src/io/xlsb/reader.cpp: the kana is stored once and each PhRun names where its slice starts, so a run's reading ends where the next run's begins and the last runs to the end - treat an empty run array with a non-empty reading as the whole-string case Excel writes when it elides the runs, the same shape <rPh> takes when it spans the entire surface text - emit that tail from src/io/xlsb/sst_writer.cpp behind the RichStr phonetic flag bit, writing the concatenated kana followed by a running ichFirst offset per run - key SstBuilder::intern on the guide as well as the text, so two cells that read the same kanji differently no longer collapse onto a single SST entry - pass cell.phonetic_runs into EmitLiteralCellRecord in cell_writer.cpp so a Text payload carries its guide into the table - add tests/unit/io/xlsb_phonetic_test.cpp over the new xlsb_phonetic fixtures, plus sst_writer cases for the interner key and the tail
Configuration menu - View commit details
-
Copy full SHA for 71e2135 - Browse repository at this point
Copy the full SHA 71e2135View commit details -
feat(bindings): expose phonetic run spans and the default font
- add fm_workbook_set_cell_phonetic_runs plus fm_workbook_get_cell_phonetic_run_count and fm_workbook_get_cell_phonetic_run to src/c_api/formulon_c.h: each <rPh> block travels as an ordered partition of the surface text, spanned in UTF-16 code units - the core has kept one run per <rPh> since 0.11.0 while the bindings carried a single string in each direction, so reading a partially annotated cell and writing it back collapsed every span into one whole-cell annotation - surface the runs as setCellPhoneticRuns / getCellPhoneticRuns on WASM and the Node addon and as set_phonetic_runs / get_phonetic_runs in Python; the flattening getCellPhonetic is unchanged and still returns the readings concatenated - give the native Node addon getCellPhonetic / setCellPhonetic, the last cell-level pair that existed on WASM and Python only, and shrink the WASM-only list in tools/dev/check_binding_drift.py and the npm-native README method counts to match - add fm_styles_set_font, which overwrites an existing font slot in place, and fm_workbook_set_default_font, which declares font 0 -- the record every unstyled cell resolves to, seeded as Calibri 11 -- that fm_styles_add_font could never reach because it only appends - surface those as setFont / setDefaultFont (WASM + Node addon) and set_font / set_default_font (Python); the current default reads back through the existing getFont(0) - extend the C API, WASM, Node and Python test surfaces to cover the new entry points
Configuration menu - View commit details
-
Copy full SHA for 04c6734 - Browse repository at this point
Copy the full SHA 04c6734View commit details -
docs(changelog): note the phonetic run spans, xlsb guides and default…
… font - record the Unreleased Added entries for fm_workbook_set_cell_phonetic_runs and the two run readers, the native Node addon gaining getCellPhonetic / setCellPhonetic, the BrtSSTItem phonetic tail surviving an xlsb round trip, and fm_workbook_set_default_font / fm_styles_set_font - name the binding-level spelling of each entry point alongside the C ABI one, so a reader on any surface can find it
Configuration menu - View commit details
-
Copy full SHA for 7dc8e61 - Browse repository at this point
Copy the full SHA 7dc8e61View commit details -
fix(io): carry the phonetic properties block through both containers
- add PhoneticProperties to src/phonetic.h -- ruby font id, kana form and alignment as ordinals -- hang it off Cell beside phonetic_runs, and give Sheet a set_cell_phonetic_props that is independent of the readings, so editing the kana does not reset how it renders - only the <rPh> runs were carried before, so a guide set to hiragana or to a distributed layout came back as Excel's default halfwidth katakana on the next save - read the element in the DOM, SAX and shared-string paths, and emit it beside every non-empty run list with all three attributes spelled out rather than left to be inferred, which is what Excel writes - an absent <phoneticPr> resolves to halfwidthKatakana / noControl while a bare one falls back per attribute to fullwidthKatakana / left; the two states are different and are now read apart - put the OOXML attribute vocabulary in the new src/io/phonetic_pr.h so the model header stays free of XML; XLSB packs the same ordinals into BrtSSTItem's trailing (ifnt, flags) pair, so the binary path shares the struct without a mapping table - decode that pair in src/io/xlsb/reader.cpp leniently -- a record stopping short of it keeps the defaults rather than failing the load -- and emit the entry's own values from sst_writer.cpp in place of a fixed 0x0030 - key both shared-string interners on the properties as well as the text and the runs, so one reading rendered as hiragana and another as katakana stay separate string items - compare the font record's theme scheme in the xlsb fidelity and cross-format symmetry checks
Configuration menu - View commit details
-
Copy full SHA for 5b057f5 - Browse repository at this point
Copy the full SHA 5b057f5View commit details -
fix(io): round-trip a font's theme scheme link
- read <scheme val="major|minor"> into the new FontRecord::scheme and write it back as the last child of <font>, after <family> and <charset>, which is the order Excel emits them in - a ja-JP workbook's Normal font carries scheme="minor", which is what makes Excel show it as the body font and re-resolve it when the theme changes; the element was dropped on read, so re-saving rewrote the font as a literal name - collapse an unrecognised value to 0, which emits no element at all: writing an uninterpretable link back would leave a theme reference Excel cannot resolve - decode BrtFont's bFontScheme into the same field and emit it from the xlsb writer instead of a hardcoded 0; the ordinals match, so the binary path needs no mapping table and the field is no longer listed among the record's unmodelled ones - cover minor, major, an unrecognised value and a font with no link on both the reader and the writer
Configuration menu - View commit details
-
Copy full SHA for d22e056 - Browse repository at this point
Copy the full SHA d22e056View commit details -
feat(bindings): expose the font theme scheme on every surface
- add scheme to fm_font_record and carry it through font_to_c and font_from_c, so a read-modify-write of a font over the C ABI no longer unlinks it from the workbook theme - project it as scheme on WASM and the native Node addon and as FontRecord.scheme in Python, defaulting to 0 (no link) on each - the struct grew by one field, so the Python layout expectations for FONT_RECORD and DXF_RECORD and the C ABI offset assertions move with it - state on fm_styles_set_default_font that a workbook Formulon created carries no theme part, so leave scheme at 0 there; a package loaded with its own theme keeps that part, and preserving the link is what keeps Excel showing the font as the theme's body font - exercise the read-modify-write path over the ABI, down to the <scheme> element in the saved styles part
Configuration menu - View commit details
-
Copy full SHA for 89ed9e7 - Browse repository at this point
Copy the full SHA 89ed9e7View commit details -
docs(print): record what the column-width constants assume
- state in src/print/pagination.cpp that MDW is a property of the Normal font, so a workbook whose Normal style names a different one resolves a different number of points per character - record the measured scope: at 11 pt the family does not move the width (Calibri, Yu Gothic and MS PGothic resolve a 30-unit column alike), while the point size does move it roughly in proportion and the family starts to matter away from 11 pt - note that those observations are Mac Excel's, a different column-geometry regime from the Windows primary oracle the constants come from, so they establish the dependency without supplying the numbers to model it - until a Windows capture over the same sweep exists, a workbook whose Normal font is not 11 pt paginates against the 11 pt geometry
Configuration menu - View commit details
-
Copy full SHA for 9a879b7 - Browse repository at this point
Copy the full SHA 9a879b7View commit details -
docs(changelog): note the font scheme and phonetic properties fixes
- add an Unreleased Fixed entry for the <scheme> theme link surviving a load and save through both containers and reaching the record projections on WASM, the native Node addon and Python - add the <phoneticPr> entry: the ruby font, kana form and distribution now round-trip, and an absent element is read apart from a bare one
Configuration menu - View commit details
-
Copy full SHA for f3f1bc3 - Browse repository at this point
Copy the full SHA f3f1bc3View commit details -
feat(bindings): expose phonetic guide rendering on every surface
- add fm_workbook_set_cell_phonetic_properties / fm_workbook_get_cell_phonetic_properties, carrying the OOXML <phoneticPr> triple: the font that draws the ruby, the kana form (FM_PHONETIC_TYPE_*) and how the kana is distributed over the characters it covers (FM_PHONETIC_ALIGNMENT_*); scalar arguments rather than a new struct, matching fm_workbook_set_iterative - project it as setCellPhoneticProperties / getCellPhoneticProperties on WASM and the native Node addon, and as set_phonetic_properties / get_phonetic_properties with a PhoneticProperties dataclass on Python - keep it independent of the run entry points in both directions: editing the readings does not reset the rendering, and setting the rendering does not touch the readings; a value-setting call still clears both - reject an out-of-range type, alignment or font_id rather than truncate it, since each of the two enumerations occupies two bits of the XLSB record's trailing flags word and the font id sixteen - report the defaults beside a failure status in the read result instead of dropping the payload keys the return type declares - the core already round-tripped these properties, so this adds only the authoring surface
Configuration menu - View commit details
-
Copy full SHA for ad0edf7 - Browse repository at this point
Copy the full SHA ad0edf7View commit details -
docs(divergence): record that column geometry assumes one normal font
- add the non-oracle deferred-feature entry pagination_column_width_calibrated_to_one_normal_font - Excel resolves a column's width in points from its stored character-unit width times the Normal font's maximum digit width, so the conversion is a property of that font and pagination carries one calibration for it - measured against Mac Excel 365 16.112.1 by opening workbooks that differ only in font 0: at 11 pt the family is not observable, since Calibri and both Japanese body faces resolve the same width; the point size is, and the family becomes observable away from 11 pt - closing it needs the same sweep captured on the Windows primary oracle, whose column geometry is a different regime from the Mac numbers
Configuration menu - View commit details
-
Copy full SHA for 9a1c2b2 - Browse repository at this point
Copy the full SHA 9a1c2b2View commit details -
docs(changelog): note the phonetic properties authoring surface
- record under Unreleased / Added that how a phonetic guide renders can now be authored, not only round-tripped, naming the C ABI pair and its WASM, Node addon and Python projections - state that it stays separate from the run entry points in both directions and that a value write still clears both
Configuration menu - View commit details
-
Copy full SHA for 4752fe6 - Browse repository at this point
Copy the full SHA 4752fe6View commit details -
docs(release): prepare release v0.11.1
- Bump the version to 0.11.1 across CMake, both npm packages, the Python project and the embedded version header - Close the changelog's unreleased section as 0.11.1 and add its compare link - Index v0.11.1 as the latest release
Configuration menu - View commit details
-
Copy full SHA for 66a53ac - Browse repository at this point
Copy the full SHA 66a53acView commit details
This comparison is taking too long to generate.
Unfortunately it looks like we can’t render this comparison for you right now. It might be too big, or there might be something weird with your repository.
You can try running this command locally to see the comparison on your machine:
git diff v0.11.0...v0.11.1