User Tools

Site Tools


font:wordconstuct

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
font:wordconstuct [2026/01/17 14:54] – glyph hint/formatting wikaraifont:wordconstuct [2026/03/24 22:28] (current) – external edit A User Not Logged in
Line 244: Line 244:
         <div style="display:flex; gap:20px;">         <div style="display:flex; gap:20px;">
             <div>             <div>
-                <div class="preview-label">Separate Characters</div>+                <div class="preview-label">Separate Glyphs</div>
                 <div id="glyph-preview" class="yiv-font" style="font-size: 6em; margin-bottom: 10px; min-height: 1.2em;"></div>                 <div id="glyph-preview" class="yiv-font" style="font-size: 6em; margin-bottom: 10px; min-height: 1.2em;"></div>
             </div>             </div>
Line 258: Line 258:
         </div>         </div>
                  
-        <div class="preview-label">Compound Meaning</div>+        <div class="preview-label">Compound Meanings</div>
         <div id="meaning-preview"></div>         <div id="meaning-preview"></div>
                  
Line 465: Line 465:
         .catch(() => { glossSet = null; glossMap = null; });         .catch(() => { glossSet = null; glossMap = null; });
  
-    moreLink.addEventListener('click', (evt) => { +    // `more` link behavior is set when rendering previews below.
-        evt.preventDefault(); +
-        loadNextChunk(); +
-    });+
  
     Object.keys(data).forEach(init => {     Object.keys(data).forEach(init => {
Line 561: Line 558:
         }         }
                  
-        // n ↔ m mapping +        // n ↔ m mapping removed: avoid producing m-substituted variants
-        if (modified.includes('n') || modified.includes('N')) { +
-            const toggled = modified.replace(/n/g, '§').replace(/N/g, 'Ƶ').replace(/§/g, 'm').replace(/Ƶ/g, 'M'); +
-            if (toggled !== modified) variants.push(toggled); +
-        }+
                  
         // f ↔ p mapping         // f ↔ p mapping
Line 715: Line 708:
         }         }
  
-        // Render collapsible readings: measure-render a preview that fills up to 4 full lines +        // Render a simple preview: show up to `previewLimit` items, then reveal more on demand.
-        const readingList = document.getElementById('reading-list'); +
-        const maxLines = 4;+
         const separator = ', ';         const separator = ', ';
- +        const previewLimit 50;
-        // Create an offscreen measurement element with same width/typography +
-        const measure document.createElement('div'); +
-        measure.style.position = 'absolute'; +
-        measure.style.visibility = 'hidden'; +
-        measure.style.whiteSpace = 'normal'; +
-        measure.style.boxSizing = 'border-box'; +
-        measure.style.width = (readingList.clientWidth || readingList.offsetWidth) + 'px'; +
-        const computed = window.getComputedStyle(readingItems); +
-        measure.style.fontFamily = computed.fontFamily; +
-        measure.style.fontSize = computed.fontSize; +
-        measure.style.lineHeight = computed.lineHeight; +
-        measure.style.padding = computed.padding; +
-        document.body.appendChild(measure); +
- +
-        // Build preview by adding full items until height would exceed maxLines +
-        let previewText = ''; +
-        let lastGoodText = ''; +
-        for (let i = 0; i < shuffledCombos.length; i++) { +
-            const candidate = (lastGoodText ? lastGoodText + separator : '') + shuffledCombos[i]; +
-            measure.textContent = candidate; +
-            const lineHeightPx = parseFloat(window.getComputedStyle(measure).lineHeight) || (parseFloat(window.getComputedStyle(measure).fontSize) * 1.2); +
-            const maxHeightPx = lineHeightPx * maxLines; +
-            if (measure.scrollHeight > maxHeightPx) { +
-                break; +
-            } +
-            lastGoodText = candidate; +
-        } +
- +
-        // Clean up measurement element +
-        document.body.removeChild(measure);+
  
         let line = readingItems.querySelector('.reading-chunk');         let line = readingItems.querySelector('.reading-chunk');
Line 758: Line 719:
         }         }
  
-        if (!lastGoodText) { +        const previewCount = Math.min(previewLimit, shuffledCombos.length); 
-            // Fallback: nothing fit (very narrow); show a small stable preview +        line.textContent = shuffledCombos.slice(0, previewCount).join(separator); 
-            const preview = shuffledCombos.slice(0, Math.min(20, shuffledCombos.length)).join(separator); + 
-            line.textContent = preview; +        if (shuffledCombos.length > previewCount) { 
-            if (shuffledCombos.length > 20) { +            moreLink.style.display = 'inline-block'; 
-                moreLink.style.display = 'inline-block'; +            moreLink.textContent = 'more...'; 
-                moreLink.textContent = 'more...'; +            moreLink.onclick = (e) => { e.preventDefault(); line.textContent = shuffledCombos.join(separator); moreLink.style.display = 'none'; };
-                moreLink.onclick = (e) => { e.preventDefault(); line.textContent = shuffledCombos.join(separator); moreLink.style.display = 'none'; }; +
-            } else { +
-                moreLink.style.display = 'none'; +
-            }+
         } else {         } else {
-            // Show the measured preview (full items that fit within 4 lines) +            moreLink.style.display = 'none';
-            line.textContent = lastGoodText; +
-            if (lastGoodText.length < shuffledCombos.join(separator).length) { +
-                moreLink.style.display = 'inline-block'; +
-                moreLink.textContent = 'more...'; +
-                moreLink.onclick = (e) => { e.preventDefault(); line.textContent = shuffledCombos.join(separator); moreLink.style.display = 'none'; }; +
-            } else { +
-                moreLink.style.display = 'none'; +
-            }+
         }         }
     }     }
Line 876: Line 825:
  
 ===== Linguistic Construction: From Glyph to Phonology ===== ===== Linguistic Construction: From Glyph to Phonology =====
-In Yivalese, the transition from visual glyphs to spoken phonology is an interpretive process. Once you have selected a compound of glyphs to represent a concept - such as GxDl (desire+tell = song) - you may derive the pronunciation by extracting specific characters from those pairs. It is also fine to mix and match to keep the resulting pronunciation natural. 
  
 +Writing Yivalese from the spoken form into its written one is an interpretive process. This is due to phonetic and semantic drift from its original source which was fairly consistent, until it wasn't. For example, Niwiden, the word for Nest, has over time been crunched to Nuden, which can be written in a few ways (XWwy (<html><span class="yiv-font">XWwy</span></html>) for its logographic form, NyWyDn (<html><span class="yiv-font">NyWyDn</span></html>) for historic purposes, and NwDn (<html><span class="yiv-font">NwDn</span></html>) for a shorthand version (think through vs thru)).
 +
 +Once you have selected a compound of glyphs to represent a concept - such as GxDl (<html><span class="yiv-font">GxDl</span></html> desire+tell = song) - you may backform the pronunciation by extracting specific characters from those pairs. It is also fine to mix and match to keep the resulting pronunciation natural, with the guiding principle to use semantically related character wherever possible.
font/wordconstuct.1768690450.txt.gz · Last modified: (external edit)