Skip to content

Latest commit

 

History

130 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenGraph Lite Viewer v3.1.0-rc.10

The always-visible Snapshot opslaan / Snapshot openen controls save and resume the current graph, view and PLAY step as an .ogn paradata snapshot. The naming dialog can be dragged by its title bar. Config selects either a draggable, resizable Graphlite window inside the application or a new browser window. The in-app option opens immediately after file selection. The browser window option uses a second explicit Open in new window click to avoid popup blocking. Both modes have an independent viewer and PLAY state, preserve the original graph and work on static GitHub Pages without a server upload. The naming dialog combines selected views with recent graph actions and offers multiple editable filenames.

Want to test or contribute? Start with MEEDOEN.md. The same structure is used for numbered publications: one built-in README topic with its own carousel per episode. See AFLEVERINGEN_PUBLICEREN.md for the workflow and AFLEVERINGEN_PLANNING.md for the seven-episode plan and its slide-by-slide carousels.

Start here: the OGN core

Open Graph Notation writes nodes one at a time into free positions of an open grid. Every node owns one horizontal and one vertical grid line: A ≠ B ⇒ x(A) ≠ x(B) and y(A) ≠ y(B).

The fixed explanatory order is OGN Free Placement, OGN Projection, then OGN Calculated Placement. A Language Tree is a calculated application of OGN, not the definition of OGN itself. Episode 1 and its seven-slide carousel form one canonical README content unit. Language Tree, LEX, branching versus utterance order, and transformation diagrams follow in later episodes. See OGN_CORE_PLACEMENT_ARCHITECTURE.md and AFLEVERINGEN_PLANNING.md.

Then: from Language Tree to utterance

The documentation now follows the operation of Open Graph Linguistics (OGL):

  1. Tree Build constructs every kernel clause as a free Language Tree.
  2. HOR/VER space is reserved before drawing for valid placements and later LEX switches.
  3. LEX realizes word order. Only a real positional change receives a vertical arrow on the LEX axis.
  4. Flip selects another left/right or short/long rendering of the same tree when required.
  5. Utterance combines one or more kernel clauses; three or more form a Story.
  6. PLAY exposes Tree Build, Flip, and LEX step by step.

Tree Build reserves movement space

Tree Build must not obtain correct word order by moving an otherwise stationary word after the fact. It therefore reserves HOR space for free columns, branches, Flip, and vertical anaphor links, and VER space for source rows plus free LEX target rows such as V1, V2, Comp, and enabled insertions.

For HOND BIJT MAN, HOND and MAN remain on their source rows without arrows. Only BIJT switches to the pre-reserved V2 row and receives a vertical LEX-axis arrow. The result is HOND — BIJT — MAN. No movement path is drawn from the tree itself.

Publishing: when local Playwright or Chromium is missing, publish_checked.bat offers to install the pinned tools before running the checks. Answer J; local tooling stays outside Git and the release ZIP.

Flip: structure is not word order

Alongside Free Node, Flip is essential to Language Tree notation. Free Node assigns every node a free grid position; Flip selects the visible left/right and short/long variant of a binary branch. Structure remains intact, while LEX remains the ultimate result: the fully realized utterance.

Minimal Language Tree

Free branches: left/right and short/long

Smallest field with projections

Language Tree with LEX, SYN, and LOG

In the causal fixture only K2, HOND BIJT MAN, flips. This permits both HOND ↔ HOND and JAN ↔ MAN to remain vertical. LEX then independently realizes JAN SLAAT JEK OMDAT DIE HEM BEET. See UITING_EN_KERNZINNEN.md and the technical FLIP_CONSTRAINT_SOLVER.md.

Utterances and kernel clauses

An utterance consists of one or more linked kernel clauses. This build adds Jan wast zichzelf, Jan slaat Jek omdat die hem beet, and Ken uzelf as selectable utterances. Their referents, coreference, causal relation, role flip, and implicit addressee are recorded in UITING_EN_KERNZINNEN.md and samples/uitingen-kernzinnen.v1.json. Each utterance now opens as two independently calculated kernel-clause trees, K1 above K2, with declared vertical anaphor connections and one shared LEX axis for the realized utterance. The causal source trees align both HOND ↔ HOND and JAN ↔ MAN, realized on LEX as forms such as die and hem; the imperative keeps its implicit subject off LEX. The original S1/S2 anaphor demonstration remains available separately. The causal K2 source node HOND is directly clickable and cycles its LEX form through hij / die / die hond / de hond / Jek. All five refer to Jek; both DIE HOND and DE HOND remain one subject NP while LEX displays their two words separately. Horizontal and vertical actual grid-cell sizes can be configured independently between 60% and 200%. K2 must flip locally when JAN and JEK exchange subject/object roles and both coreference links must remain vertical. The visible Play bar builds each composition in five content phases: K1, K2 before Flip, the visible FLIP K2, vertical alignment, and the realized LEX utterance. During the Flip phase the old K2 remains as a faded red ghost behind the new K2, while dotted guides show the moved nodes. Previous, Next, and Reset remain available. The active test utterance remains visible above the graph. Kernel syntax consistently uses S → NP, VP and VP → NP, V; LEX independently realizes surface word order. Every binary node visibly branches left and right. Config independently controls compact horizontal and vertical branch spacing, tree color, branch weight, and an explicit Flip. Flip mirrors both trees without changing syntax, realized LEX word order, or vertical anaphors: structure, visible orientation, and word order are separate properties. The optional global Flip mirrors both trees; unlike the necessary local K2 flip, it is a display choice rather than a role-alignment requirement. Every branch connects two free OpenGraph nodes with distinct horizontal and vertical coordinates. Even short branches remain slanted; compact node shapes and labels are sized to keep their connections visible. Tree branches are compact, clearly visible, strong blue lines by default.

OpenGraph Lite Viewer is a viewer and test environment for general Open Graph Notation. This release is built exclusively on the uploaded v2.0.0-rc.26 source through rc.27; rc.28 restores the documented OGN/UI contracts without importing source files from the abandoned alternate version line.

Dutch documentation: LEESMIJ.md.

The minimal functional contrast DE MUZIEK ONTROERT ANNA preserves the syntax (S → NP VP; VP → NP V) while the Functional CLAUSE labels the subject as STIMULUS and the object as EXPERIENCER. This prevents subject/object from being conflated with agent/patient. The role contrast is grounded in Belletti & Rizzi (1988), Psych-Verbs and Theta-Theory.

General Flip and V-cluster Flip are distinct. A general Flip only changes the free graphical realization of a binary subtree and must preserve node identity, structure, roles, LEX, the OGN uniqueness invariant, and required anaphor alignments. A V-cluster Flip swaps the actual syntactic daughters and therefore rebuilds their derived LEX order; it is enabled only for a genuine multi-member cluster in a subordinate input with a registered alternative.

Validation status: rc.45 was manually approved on 2 August 2026, including the Greedy Grow reconstruction, its evidence boundary, desktop, mobile and publication carousel. Automated checks continue to verify the geometry and feature invariants.

New calculated application: Anaphor · multi-OGN

The fixed first example connects two independently calculated OGN trees: S1: Ik zie een man. S2: Hij draagt een hoed. MAN is the antecedent and HIJ the anaphor; both are coreferential. After both trees pass the OGN grid invariant separately, S1 is placed above S2 and the complete S2 is translated rigidly until MAN and HIJ share one declared column. A shared LEX axis orders S1 before S2. The MAN–HIJ connection is a straight vertical line without an arrow or direction. See MULTI_OGN_ANAPHOR.md.

OGN Core: free placement first

Open Graph Notation writes nodes one at a time into free positions on an open grid. Every node owns one horizontal and one vertical grid line.

Hard rule — A ≠ B: two different nodes may never occupy the same horizontal or vertical grid line.

A ≠ B  ⇒  x(A) ≠ x(B)  and  y(A) ≠ y(B)

A new node may therefore be written only when both its row and its column are unused. This also applies to applications. If placement cannot find a valid row and column, no fallback node is rendered.

A violation is called grid-line reuse: horizontal reuse shares a row; vertical reuse shares a column. Both are always invalid.

current occupancy
→ free positions
→ rule set
→ search strategy tests candidates
→ write the first valid position immediately

A rule set determines which free candidates are valid. A Search Strategy determines the order in which candidates are tested. Direct placement writes the first valid position found immediately; another search order may therefore produce another picture.

Greedy Grow has an accepted reconstruction. It starts at the central grid point and writes one dot per step without storing a future layout. The historical four-arm order reproduces the preserved 12-, 31- and 96-node demos exactly; four recovered experimental search orders make their different growth pictures inspectable. Field size and perimeter are shown as diagnostics, not as a proven global optimum. Open greedy-grow.html and see the technical reconstruction. Publication slide 5 is derived directly from the same accepted engine.

The explanatory order is fixed:

  1. OGN Free Placement — write nodes one by one into free grid positions;
  2. OGN Projection — derive markers or orderings from already placed source nodes;
  3. OGN Calculated Placement — let an application calculate a placement plan first.

See OGN_CORE_PLACEMENT_ARCHITECTURE.md.

Placement methods and configurable lines

The Language Tree menu now contains the placement hierarchy itself. Language Tree remains the prominent, primary calculated application; Anaphor · multi-OGN is the second calculated application. Greedy Grow and Random appear below it as smaller direct OGN illustrations. In a direct mode, every arrow/Play step immediately writes one node on a currently unused row and column; language-only menus are hidden and the Language Tree data is left unchanged. Random uses a separate seeded engine, so it cannot alter the accepted Greedy Grow reconstruction.

Config now has strictly separated contexts: General, Calculated → Language Tree / Anaphor · multi-OGN, and Direct → Shared / Greedy Grow / Random. General holds only application-independent interface, README, and file settings; pre-config, tree, examples, LEX, SYNT, and LOG exist only under Language Tree. All irrelevant settings are no-show within a context. Greedy shows only strategy and orientation; Random only its own seed, reset policy, model, placement, grid size, conditional fixed dimensions, speed, iterations and axis image. Every visible field has a compact expandable explanation inside Config. A larger seed is not more random and does not change speed; 20260802 is merely the memorable date 2 August 2026. See CONFIG_UI_EXPLANATION_STANDARD.md.

When Config is opened from an active Greedy Grow or Random mode, the application bar itself is also no-show. Only Back to Main, that method's own fields with Explanation, and Config save remain visible. Select another application in Main first.

A new default Config uses Uniform v1.0, Anywhere in available space and Interface · available space. Impure uniform v0.1 is a functional alternative that mixes in a 20% preference for axis positions hit more often in completed earlier rounds. Fixed grid, Compact, Balanced, Wide and the growing content field remain available. v0.2 and v0.3 remain no-show until they genuinely work. Play and Next cross run boundaries until all configured iterations are complete; Previous can cross back. For example, 10 completed iterations with 31 nodes produce 10 × 30 = 300 projection hits per axis; the centre node is excluded. A round adds its rows as WEST hit spots and its columns as SOUTH hit spots only after its final node is written. A repeated hit makes the existing spot darker and heavier. Occupancy mode scales against the configured round total, while Relative mode scales against the highest count among completed rounds. No future round is generated for this axis image. Uniform Random predicts an increasingly even distribution, while v0.1 can mildly reinforce early differences; an axis with exactly N lines for N nodes is hit at every non-central position in every round. An unchanged Greedy strategy is deterministic and is therefore not repeated. See DIRECT_PLACEMENT_CONFIG.md.

Under Config → View → Line appearance, grid color and the weights of grid, projection and box lines can be set independently. LEX, SYNT and LOG also have independent colors—blue, green and purple by default—and matching axes, projection lines and boxes follow their own color. These are presentation settings only; they never change coordinates or placement validity. See LINE_STYLE_AND_PLACEMENT_MODES.md for the complete mapping and the structural EOF/EOL policy used by publication.

Current calculated application: Two-Pass Language Tree

The current viewer implements a Two-Pass Language Tree as one calculated OGN application. Its OGN Base profile contains the ordinary Syntax/Functional tree, grid, the named LEX/SYNT/LOG projections with S/O/V majors, and examples without optional insertions. The profile name means “base of this language application”; it is not the definition of OGN Core. Insertion defaults to off on LEX, SYNT and LOG.

Config → Pre-config enables insertion independently per axis without adding linguistic content. Config → Applications then provides Adverbs as the first application. It becomes available only after insertion on LEX + LOG is enabled. When Adverbs is off, its examples, LOG minors, direct LEX insertions, controls, runtime data, documentation links, and export fields are absent. OGN exports record profile: "base", extras: [], and all three axis switches.

Config also shows three disabled reservations for later applications: Question sentence, Emphasis (for example juist díe trui), and Incomplete sentence. They are deliberately outside the active feature catalogue and therefore add no state, samples, insertions, documentation, storage, export fields, or rendering behaviour.

Editable README topics and carousels

Config → README topics edits the complete README item, not just its images. Every topic has a Show: yes/no switch, NL/EN navigation titles, and NL/EN content in limited safe HTML. No hides the topic without deleting it, so it remains available in Config. Scripts, forms, styles, frames, event attributes, and unsafe link schemes are removed before custom content is rendered.

The same editor manages the topic carousel: add/remove active slide, previous/next, wide/narrow shape, NL/EN alt text and captions, live preview, and full topic reset. A normal path or https URL remains supported. Config → Files & export can additionally insert a local PNG, JPEG, WebP, or GIF directly as an embedded slide. The limit is 1.25 MB per image and the combined embedded payload is bounded to protect browser storage. A manually typed data: URL remains blocked; only images created by the trusted file insertion route are accepted.

The shared Config Save bar now appears above every Config section. It stores topic text, visibility, and carousel overrides together. Graph shortcuts stay inactive while Config or README is open and while a form control has focus.

Default, project-user, and browser Config

Every full project zip contains both config/default-config.json and config/user-config.json. The viewer applies the bundled default first and then the enabled user file as an override. The default is never physically replaced.

When running through start_local_viewer.bat, choose Config → Files & export → Write current Config to project. The local, allow-listed save endpoint writes the current snapshot to config/user-config.json; this file is then included in the next full-source zip. On a regular web server, use Download user config and put that file in config/ manually.

Precedence is:

code defaults → config/default-config.json → config/user-config.json
→ browser-local saved Config

The final browser-local snapshot remains device-specific until it is written to the project user file.

LEX orientation and test-material lists

The viewer starts with LEX on West. After project and browser Config have loaded, every page load resets East, North or South to West. All four sides remain available during the current session. This applies both through the local server and on GitHub Pages. West/East keep the tree fixed and only exchange the projection sides. North/South rotate the complete graph as one rigid unit; branches, node shapes, circles and labels therefore remain connected.

The established LEX orientation control contains West, East, North and South. Config offers one to four real test-material list panels independently for desktop and mobile. A group always remains inside one panel; desktop starts with the Sentence and Utterance families separated across two panels. For North/South, LEX can also be enabled or disabled separately for kernel clauses K1 through K8.

A verbal-cluster flip is available only when the input has subordinate-clause order and contains a real syntactic V-CLUSTER, for example with dat, omdat, or hoewel. Click the V-CLUSTER node itself to exchange its two daughters: OMDAT VROUW TRUI HEEFT GEBREID ↔ OMDAT VROUW TRUI GEBREID HEEFT. There is no separate flip button beside the input.

The pipeline is input → syntactic analysis → reconstructed LEX utterance. Initially, LEX reconstructs the input. A flip first changes the V-CLUSTER subtree; LEX is then derived again from that tree. SYN displays the changed structure, while Functional and LOG remain unchanged when functions, roles, and interpretation do not change. Main clauses and single finite forms such as BEET receive no cluster flip. The action never changes an anaphor's referent.

Ready-to-upload publication carousel

Every project zip includes seven numbered 1080 × 1080 PNG slides under publicatie-carrousel/slides/ and their single editable, self-contained publicatie-carrousel/index.html source. Upload files 01 through 07 in order as one image gallery.

Slide 4 shows nodes projecting to WEST, SOUTH and EAST. Slide 5 is the Direct — Greedy Grow example; slide 6 is the Calculated — Language Tree example, with HOND · BIJT · MAN on the west LEX axis. Both example slides refer to github.com/kruin/graphlite.

The carousel is always derived. Never edit a PNG or carousel ZIP directly. If you only want to publish the supplied PNGs, no installation or batch file is needed. To edit the source on Windows, work in the extracted full project ZIP, run installeer-carrousel-tools.bat once, edit only publicatie-carrousel/index.html, and then run maak-publicatie-carrousel.bat. The installer pins Playwright and its matching Chromium browser; Node.js 18 or newer is required. The build exports all seven slides, writes publicatie-carrousel/derived-manifest.json, verifies the source/exporter/PNG hashes, and replaces the sibling carousel ZIP. Run maak-volledige-zip.bat afterwards to put the result into a new full project ZIP. Local node_modules and browser files are never packaged. The standalone carousel ZIP is also rebuildable, but rebuilding it does not modify a separate full project folder. The full-source ZIP build stops when the derivation proof is missing or stale. A final visual check remains required.

PUBLICATIE_README.md supplies the exact order, per-slide alt text, Reddit instructions, and ready-to-copy Dutch and English text for other platforms. Replace the marked live/source/video URLs before posting. rc.45 remains a release candidate by version name and was manually approved on 2 August 2026. Use RC45_OGN_CORE_EXPLANATION_TEST.md for the core explanation and carousel check; the inherited rc.43 Config checks remain in RC43_CONFIG_README_PROJECT_TEST.md.

Recursive content-sized layout

The structural tree is still placed bottom-up on the HOR/VER grid. Before drawing, a second recursive pass measures each subtree from its actual node shapes, labels, child boxes and caption. A small unary box such as NP → HOND therefore uses only its required width and height; larger S, VP and Functional structures expand independently.

Applications declare abstract layout demands rather than SVG coordinates. Adverbs, for example, declares that it can add wide LEX insertion content. The central layout policy reserves the corresponding space. Handheld MAX includes the complete LEX content and the complete Syntax and Functional rule boxes in portrait, landscape and forced desktop. LEX reserves only its active slots and movement lanes, while Syntax and Functional share one stable east axis over their combined structural grid envelope. See RECURSIVE_LAYOUT_AND_APPLICATION_CONTRACT.md.

What is recursive now—and what is not

Stage rc.42 behaviour
Structure and config Decide which nodes, axes, majors, minors and application contributions exist.
Grid placement Places structural nodes and subtrees on the HOR/VER cell grid. This is not yet text-aware pixel packing.
Visual subtree measurement Measures node shapes, labels, descendant bounds, caption and central padding bottom-up. Only the visible subtree rectangle uses this result.
West/LEX placement Starts from the measured left edge of the active root subtree, then reserves the active LEX slots and movement lanes plus a small clearance.
East/SYNT placement Uses one shared structural grid envelope for Syntax and Functional, followed by the complete rule boxes. It is not derived from the measured right edge of every subtree.
Viewport fit Keeps complete LEX content, the central structure, complete rule boxes and LOG inside a stable Syntax/Functional frame.
Rendering Draws the resolved result; it does not add linguistic content or choose new positions.

This distinction matters. rc.42 has recursive box measurement, but it is not yet a general collision solver that repositions every node when a label becomes wider. In portrait, the complete left-to-right composition uses the available width; because that composition is intrinsically wide, text can remain smaller and vertical whitespace can remain. Pan/zoom is available. A stacked portrait composition would be a separate future layout decision.

For manual approval, use RC41_RECURSIVE_LAYOUT_TEST.md.

Lexical usage profiles and user disambiguation

This section applies when the Adverbs application is enabled.

OGN does not store an ambiguous form as uncontrolled duplicate dictionary entries. The lexicon stores one lemma with multiple possible usage profiles; the concrete sentence instance selects the applicable profile.

A profile records origin, function, scope and preferred interval. Origin is LOG, LEX or LOG+LEX. Only LOG-containing profiles create a south-axis minor, while all origins receive a destination in the precomputed LEX plan.

Multiword constructions such as misschien wel refer to existing lemmas and may retain one visible LEX slot. When alternatives change OGN notation, the viewer asks the user. The choice applies only to that sentence instance and does not rewrite the global lexicon. Config can clear the choices for the active example.

See LEXICON_USAGE_PROFILES_AND_DISAMBIGUATION.md.

Projection contract

source node → horizontal LEX projection at source height → only an explicit switch may move it

S, O and V are majors. An adverbial insertion may be a LOG minor, a direct LEX insertion, or a group combining both origins. Every minor adds one fixed slot to the distance between its bounding majors. LOG plans possible LEX positions but does not thereby move a source node: every lexical source projects horizontally at source height. Only an explicit target that is actually higher than that visible source may perform a switch. In HOND BIJT MAN, MAN therefore stays exactly at MAN source height; only BIJT can switch upward to V2. LOG reservations never replace this source reference. See projectie-master-spec.md.

Active LEX profile and sentence type

LEX currently contains upward switches, application-specific insertions, and directly written Comp only. Generic empty positions before, after, or between active rows and every downward/post-V2 switch are no-show: no Config control, rendering, or new storage. Their possible use will be evaluated separately.

Sentence type is a separate Language Tree choice: declarative main clause, yes/no question, dat-clause, or omdat-clause. A question uses V1; DAT and OMDAT are written directly in Comp. Perfect is a verb form, not a sentence type. See LEX_MOVEMENT_RULES.md.

Start

index.html

Or run locally:

localserver.bat

localserver.bat is the familiar short name and delegates directly to start_local_viewer.bat. That checked launcher uses one detected Python 3 installation. First choose Extract all for the downloaded ZIP; do not run the BAT from inside the compressed folder. The BAT only checks that extraction is complete and starts start_local_viewer.py. That Python launcher controls server detection, starting, waiting, version validation and opening the browser. It opens reset-cache.html only after port 8088 serves both the exact version and the exact SOURCE_BUILD.txt identity from the current folder. This also catches an older source package carrying the same rc.45 version number. If the launcher reports another source, close the old OpenGraph local server window and start the BAT again. The concrete reason remains visible before Press any key.

On a large screen, the local LOKAAL selector appears at the bottom right. mobile portrait stays inside a 390 × 844 frame and mobile landscape inside an 844 × 390 frame. The large automatic view returns only after selecting auto.

Build the full source ZIP on Windows

Continue in a new ChatGPT conversation

After all local changes have been pushed, GitHub's automatically generated ZIP of branch main is the standard hand-off. It contains the checked SQLite database, source references, configuration, tests and PROJECT_MEMORY.md. Upload that ZIP to the new conversation and ask it to read PROJECT_MEMORY.md before changing the project. ChatGPT account memory and earlier conversation text are not repository files and are therefore not transferred. Local browser snapshots, logs, database backups, SQLite WAL/SHM, node_modules, Playwright browser binaries and unpushed changes are also not included and are not required to reconstruct the checked source.

See PROJECT_MEMORY.md and GitHub's source archive documentation.

Rename the project directory to the intended release name and double-click:

maak-volledige-zip.bat

The batch file derives the ZIP name from its own containing directory. A directory named OpenGraph_Lite_Viewer_v2.0.0-rc.45 therefore produces the sibling file OpenGraph_Lite_Viewer_v2.0.0-rc.45_full_source.zip. An existing ZIP with that exact name is replaced safely; the script never invents a (1) suffix.

Files matching *_full_source*.zip are generated release artifacts, not project source. This includes a browser download such as OpenGraph_Lite_Viewer_v2.0.0-rc.45_full_source (1).zip. Such copies are ignored by the manifest and publication checks, are not staged for GitHub Pages, and are excluded when a new full-source ZIP is built. They may therefore remain locally without blocking publication, although deleting old copies keeps the project folder clearer.

GitHub Pages:

https://kruin.github.io/graphlite/index.html?ogv=v2.0.0-rc.45

Cache reset:

https://kruin.github.io/graphlite/reset-cache.html?ogv=v2.0.0-rc.45

Desktop view

The readable full-window view is the default. It is shown first under Config → View:

Tree spacing = MAX · large text / low tree
Window fit   = MAX · use full window

MAX fits the actually drawn tree and projections to all available desktop space. The invisible stability frame, grid and helper labels no longer make the graph and its text artificially small. The same MAX frame remains stable throughout the phased Play sequence.

Mobile MAX

On a physical phone, MAX includes the complete LEX content, central structure, SYNT axis and full rule boxes in both portrait and landscape. Landscape uses a genuinely lower, wider layout and a contain fit, so the grid top and the complete LEX, SYNT and LOG axes remain visible at the same time. Two compact menu rows, the SVG and the Play bar use separate vertical zones. This also applies when Interface → Desktop is forced on the phone. Pan and pinch zoom remain available for closer inspection.

The grid itself now ends at LEX on the left, SYNT on the right and LOG at the bottom; it no longer continues past those axes.

Config tabs

Config follows the dependency order and links to these focused sections:

  1. Pre-config: insertion independently on LEX, SYNT and LOG;
  2. Applications: Adverbs requires LEX + LOG;
  3. Overview and JaN · TODO;
  4. Save & export: LinkedIn/Play/SVG first, followed by OGN, Config save/restore and example management;
  5. View: MAX, Syntax / Functional, tree layout and projection colours;
  6. LOG & LEX: core LEX order and, when enabled, optional insertions;
  7. Advanced: legacy branch-extension and top-menu placement options.

Window fit means how the tree uses the available app window. It is not a second application window.

Social export

Open Config → Save & export. The first, highlighted card provides three local exports:

  • LinkedIn PNG: a white 1200 × 627 image for an image post;
  • Play video: an automatic 1200 × 628, fixed-30-fps recording of the complete phased Play sequence;
  • Graph as SVG: a self-contained vector file of the complete current graph.

The recorder now prefers MP4/H.264 when the browser supports it and otherwise uses WebM. It actively requests all 30 frames per second; the old recorder captured only changed canvas frames and could therefore fall below LinkedIn's 10-fps minimum. Keep the browser window active until the recording downloads, then upload it through LinkedIn's Video action. See docs/SOCIAL_EXPORT.md.

Read me / README

The README / LEESMIJ button opens immediately on Start · OGN Core. The topic list and active text remain independently scrollable in every interface mode.

The first carousel explains the application-neutral core in four steps: free grid positions, sequential node writing, search order, and the fixed layer order. It introduces no specialized extension.

OGN core: free grid positions

OGN core: write one node at a time

OGN core: different search orders produce different direct placements

OGN layers: free placement, projection, calculated placement

The external example-search link opens in a separate browser window. Closing that window returns the user to the still-open app.

Play sequence

After the central tree has been built, Play presents the projection process in two explicit phases:

1. draw the LOG axis and place majors/minors
2. project lexical sources horizontally at source height and perform only
   explicit upward switches to topic, V1, or V2

LOG may plan candidate positions but does not itself move a source. SYNT and the remaining projection panels appear in the final step. There is no separate empty space phase. The previous-step button now reverses the same sequence exactly: the final projection layer disappears first, followed by LEX, LOG and then the central tree.

Central views

1. Syntax
2. Functional

Syntax shows the syntactic tree. Functional shows the functional roles for the same approved kernel-clause analysis, including CLAUSE, ARG-STRUCT, PRED, AGENS and PATIENS where available. LOG is not a central view. The prominent Syntax | Functional switch is outside the placement-method menu and applies to every kernel clause in an utterance, story or anaphor composition. It is not shown for Greedy Grow, Random or bare Direct views.

Compact is placed next to this switch. It selects the safe compact recursive layout, compact horizontal and vertical kernel branches, and clears previous manual stretching. Text, labels and node symbols keep their readable size.

The complete input-to-analysis, Functional, SQLite and Compact contract is in FUNCTIONAL_DATABASE_COMPACT.md.

Named projections

LEX    west axis
SYNT   east axis
LOG    south axis

LEX, SYNT and LOG are visible by default. Each projection can be disabled independently. Geen shows only the central Syntax or Functional view; Alle and Reset restore every projection. Switching projections does not alter the central graph, viewport or scale.

Adverbial insertions do not mutate Syntax or Functional. The selected usage profile determines origin: LOG and LOG+LEX produce a south-axis minor, while a direct LEX insertion does not. Source nodes project horizontally to LEX and every origin receives a precomputed neutral LEX target. An explicit topic/V2 rule can replace that target before one direct visible move is drawn.

The active sentence is printed above the graph, with clear space below it for a possible future north axis.

Limited multiword adverbials

The adverb list now includes four deliberately bounded multiword units: MISSCHIEN WEL, AF EN TOE, OP DIT MOMENT, and MET VEEL AANDACHT. Each complete phrase currently acts as one visible LEX unit. Its usage profile determines whether it also has a LOG minor, a direct LEX origin, or a mixed origin; internal syntax is not expanded yet. The set samples modality, frequency, time, and manner without claiming a complete inventory of adverbial phrases. See docs/TALIGE_UITBREIDINGEN.md.

Top menu

OGN Base: Sentence · Syntax/Functional · Interface · Projections · LOG order · Language · README · Config
Adverbs on: Sentence · Adverb · Syntax/Functional · Interface · Projections · LOG order · Language · README · Config

There is no generic Menu button and there are no nested submenus. Choice items open their own wide panel directly.

OGN storage

.ogn is the primary round-trip document format. It separates:

metadata    document identity, format and generator

data        graph, projections and analysis choices

paradata    optional workspace and local session events

Paradata may be omitted during export. Older JSON files remain readable as a migration format; Legacy JSON export remains temporarily available for debugging. See OGN_STORAGE_FORMAT.md.

Only .ogn supports a complete round trip. SVG, PNG, and Play video are derived export formats and cannot reconstruct the analysis. In Config → Export folder and output, one folder can be selected for OGN, SVG, PNG, video, Legacy JSON, and logs. The browser stores the directory handle locally and remains in control of permission. If the directory API is unavailable or writing fails, Graphlite falls back to the normal browser download. Open .ogn from export folder starts in that folder where the browser supports it.

Version source

VERSION.txt is authoritative for HTML, JavaScript, the service worker, cache queries, the publication script and the release ZIP name.

Validation

node --check viewer.js
check_release.bat

Examples and file controls (rc.18)

  • The viewer contains 14 example sentences, including two examples with multiple LOG minors.
  • With automatic placement, an explicit sentence-instance landing position such as post-object-pre-vcluster takes priority over a broad class default. Scope and linear position remain separate.
  • Opslaan als .ogn downloads the current analysis.
  • Importeer .ogn opens a previously exported document.
  • Paradata is optional.

What problem OGN solves

A classical planar constituent tree often makes one geometric ordering perform two representational tasks. Formally, those tasks must be distinguished:

  • branching order is the structural ordering of nodes, determined by dominance and precedence among sister branches;
  • utterance order is the total linear ordering of realized lexical elements.

When the left-to-right order of the terminals must encode both, the two orderings are conflated. OGN separates those tasks.

central branching under S = branching order
LEX projection            = utterance order

The same central structure can therefore support different surface strings without mirroring or rebuilding the tree, or treating word order as a transformation of the central tree.

Placement plan before rendering

The viewer calculates one complete placement plan before drawing:

  1. determine structural hosts;
  2. determine lexical insertions and landing positions;
  3. reserve grid space and exchange corridors;
  4. place the central tree;
  5. fill the core sentence lexically;
  6. fix projections, traces and exchange paths;
  7. assign growth/render steps;
  8. render the fixed result.

The renderer does not choose new positions or reserve new space. Play/Growth reveals the precomputed layout step by step.

JaN TODO

  • Working notation: S:np-VP, explicitly not S:NP-VP.
  • Research notation: S+ np-VP.
  • Binary trees first; non-binary multi-branching trees later.
  • V-clusterflip: verwissel de twee dochters van de V-CLUSTER-subboom; LEX wordt daarna opnieuw uit die boom afgeleid (heeft gebetengebeten heeft).

Tijdsvorming zonder dubbele testzinnen

Een testitem vertegenwoordigt voortaan een zinsfamilie. De keuze Tijdsvorm bouwt zin, Language Tree en alle projecties opnieuw op:

  • OTT — onvoltooid tegenwoordige tijd;
  • OVT — onvoltooid verleden tijd;
  • VTT — voltooid tegenwoordige tijd;
  • VVT — voltooid verleden tijd.

HOND BIJT MAN, HOND BEET MAN, HOND HEEFT MAN GEBETEN en HOND HAD MAN GEBETEN zijn dus geen vier testitems meer. Hetzelfde geldt voor terugbrengt/terugbracht/heeft teruggebracht/had teruggebracht. De intransitieve controlefamilie HOND VALT gebruikt in de voltooide tijden correct zijn: HOND IS GEVALLEN en HOND WAS GEVALLEN. Ook de functionele testcase DE MUZIEK ONTROERT ANNA is een tijdsfamilie; de rollen blijven Stimulus/Experiencer terwijl de tijdsvorm verandert. Bij meervoudige uitingen is K1 de bedieningsbron: na een expliciete tijdskeuze volgen K2 en K3 dezelfde tijd en worden al hun bomen en projecties herbouwd. De oorspronkelijke input blijft de onaangetaste beginweergave.

Tijdsvorming is een formatieve/morfosyntactische bewerking, geen Flip. Vraagvorming en passief worden later als afzonderlijke formaties toegevoegd; ze worden niet in de tijdsvormknop verstopt. Zie TIJDSVORMING_EN_FORMATIE.md.

Resizable README panel

In the built-in README, drag the separator between the topic list and the selected text to enlarge or reduce the text panel. The separator works horizontally on desktop/landscape and vertically on portrait screens.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages