Skip to main content

Created: 13-06-2026 · Last updated: 05-09-2026

Change Files

Corrections are expressed as change files applied by updateByLine.py:

python updateByLine.py <input_file> <changefile> <output_file>

Format​

Paired lines, with ; introducing a comment:

1234 old original line text here
1234 new replacement line text here

Supported operations:

KeywordEffect
newReplace the numbered line with the following text
insInsert the following text after the numbered line
delDelete the numbered line

All files must be UTF-8 (no BOM — see the BOM rule in Corrections Workflow).

The line number is not just a note for the reviewer. updateByLine.py uses it to find the exact line, and the old text should match the current source line before the replacement is accepted.

Worked example​

To fix a typo on line 1234 of a dictionary:

; fix headword typo: krsna -> kfzRa (SLP1)
1234 old <H1><h><key1>krsna</key1>...
1234 new <H1><h><key1>kfzRa</key1>...

Then run the full workflow: snapshot → apply → validate XML → diff to audit change file → commit csl-orig + csl-corrections.

Replace, insert, delete​

Most typo fixes are replacements:

1234 old original line
1234 new corrected line

Insertions add a line after the numbered line:

1234 old line before the insertion
1234 ins inserted line

Deletions remove the numbered line:

1234 old line to delete
1234 del

After any insertion or deletion, the old and new files have different line counts, so the audit step must use diff_to_changes.py, not diff_to_changes_dict.py.

Insertions and deletions​

diff_to_changes_dict.py (used to regenerate the audit change file) assumes equal line counts. If your change adds or removes lines, use diff_to_changes.py instead, which handles differing line counts.

Encoding and BOM check​

All source and change files should be UTF-8 without a byte-order mark. When Python writes a file, use:

open(path, 'w', encoding='utf-8')

Do not use utf-8-sig. After a generated or bulk edit, verify the first bytes:

python -c "with open('ap.txt','rb') as f: print(f.read(3).hex())"

The result must not be efbbbf.

Dr. Mārcis Gasūns