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:36] – ↷ Page name changed from font:glyphcon to font:wordconstuct wikaraifont:wordconstuct [2026/03/24 22:28] (current) – external edit A User Not Logged in
Line 125: Line 125:
     @media (max-width: 600px) {     @media (max-width: 600px) {
         .workflow-grid {         .workflow-grid {
-            display: flex; +            /* keep grid layout but tighten minimum widths so cards always fit */ 
-            flex-wrap: nowrap; +            grid-template-columnsrepeat(auto-fit, minmax(90px, 1fr))
-            overflow-x: auto+            gap: 6px;
-            -webkit-overflow-scrolling: touch+
-            gap: 8px;+
             padding-bottom: 6px;             padding-bottom: 6px;
         }         }
         .workflow-card {         .workflow-card {
-            min-width: 120px+            min-width: 0/* allow flexible shrinking */ 
-            flex0 0 auto+            padding6px
-            padding8px;+            font-size0.95em;
         }         }
         .workflow-label {         .workflow-label {
-            font-size: 0.75em;+            font-size: 0.72em;
         }         }
         .workflow-example {         .workflow-example {
-            font-size: 0.9em;+            font-size: 0.88em;
         }         }
     }     }
Line 232: Line 230:
     </div>     </div>
     <div class="preview-label">Glyph Pairs</div>     <div class="preview-label">Glyph Pairs</div>
 +    <div class="reading-hint" style="margin-bottom:8px;">Click desired glyphs below to construct word/compound.</div>
     <div id="mobile-menu" class="mobile-menu"></div>     <div id="mobile-menu" class="mobile-menu"></div>
     <div id="matrix-root" class="matrix-grid"></div>     <div id="matrix-root" class="matrix-grid"></div>
Line 245: 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 259: 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 466: 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 562: 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 666: Line 658:
         const existingNote = document.getElementById('existing-note');         const existingNote = document.getElementById('existing-note');
         if (existingItems) existingItems.innerHTML = '';         if (existingItems) existingItems.innerHTML = '';
 +        // ensure matchedCombos exists even if glossSet is unavailable
 +        let matchedCombos = new Set();
         if (glossSet && existingItems) {         if (glossSet && existingItems) {
             // collect the actual DB keys that matched any fuzzy variant             // collect the actual DB keys that matched any fuzzy variant
             const foundDB = new Set();             const foundDB = new Set();
-            const matchedCombos = new Set();+            matchedCombos = new Set();
             for (const combo of shuffledCombos) {             for (const combo of shuffledCombos) {
                 const checks = generateFuzzyCandidates(combo);                 const checks = generateFuzzyCandidates(combo);
Line 714: 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 757: 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 875: 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.1768689364.txt.gz · Last modified: (external edit)