Repository files navigation

JSyntaxTree

Output

Download Here

A small Java program to build syntax trees and morphology trees, according to how my current morphology class prescribes.

Inspired by yohasebe's RSyntaxTree, which came into frequent use, however I unfortunately was pressed to make something new as the features required for my class surpassed the capabilities his program.

Legge qui per informazione italiana

CLI Options:

Syntax Default Desc
-i <STRING>	- input file path (required)
-o <STRING>	OUTPUT.png	output file path (include the .png, .jpg, etc.)
-f <STRING>	Doulos SIL	font name
-fs <INT>	48 font size
-l <FLOAT>	3.0 stroke size (for the lines)
-sx <INT>	50 spacing between adjacent nodes horizontally
-sy <INT>	150 spacing between adjacent nodes vertically
-c - color the tree
-q - quits right after generation - no preview window
-b <INT>	50 adds padding around the tree
-a - auto-subscript - will add a numerical subscript to node types

Movement Syntax

Movement is fairly simple: it always "moves" in the left direction, however by using a negative number you may switch the arrow.

The main syntax follows:

...
[TYPE^1 value]
...

The ^ operator (no spaces) indicates that movement stems from that node, and moves over 1 element to the left. The number can be changed to any number as long as there exists an element for it to move up to. The operator may also be duplicated:

...
[TYPE^1^2^3 value]
...

This syntax makes three individual movement arrows going 1 element over, 2 elements over, and 3 elements over.

...
[TYPE^1,2 value]
...

Having two numbers seperated by a comma indicates that the movement occurs at one of the parent nodes. Here with ^1,2 the syntax indicates that the movement goes 1 element to the left, and then rises to the node 2 parents above. In this way you may have end nodes with children (see Examples/chomsky.txt for a working example).

As stated previously, negating the movement value will cause the arrow to reverse, so, let's say that one wished to indicate movement right-ward, they would they need to place the ^ operation on the 'end' node and use -x steps:

...
[TYPE^-1,2 value]
...

Options

Nodes can be given special parameters using {} brackets after the node name:

[TYPE {
content:"value";
color:"255,255,0";
line-color:"255,0,255";
content-color:"0,255,255";
move-color:"0,255,0";
}]

Values can be applied to non-end nodes (without the content parameter, of course) likewise:

[TYPE
{
...
}
[
...
]
]

Options must come before sub-nodes.

Text Syntax

Generally just bracket notation, with some text effects:

\n newline

[TYPE value 1\nvalue 2]

_WORDS_ subscript

[TYPE_SUBTYPE_]

*WORDS* bold

[TYPE *value*]

%WORDS% italic

[TYPE %value%]

$WORDS$ smaller font

[TYPE BIG$SMALL$]

-WORDS- underline

[TYPE -value-]

#WORDS# highlight

[TYPE #value#]

=WORDS= strikethrough

[TYPE =value=]

At the end of a node, i.e. the @ in [N value value@] you may place these additions to determine what the connecting bar should be:

^ triangle

[TYPE value^]

| full bar

[TYPE value|]

If you need to have multiple words in a token, use the ` around the words.

Of course, all combinations are acceptable.

(e.g. $*%_W_O_R_D_S_%*$)

The program defaults to the Doulos SIL font (https://software.sil.org/doulos/), so you should probably have that installed. Not entirely sure what Java defaults to automatically.

Will build web interface at some point?

Currently there's a shoddy GUI interface I built for those who don't want to use the command line.

Examples

  1. Danube river steam ship driving company captain cabin door danube

  2. Troiae ab Oris troiae_ab_oris

  3. Colorless green ideas sleep furiously chompy

  4. あなたはユニコードの書物を使える あなたはユニコードの書物を使える If your font has the characters, you can use any unicode characters in data files. (This example uses Unifont)

About

A small but powerful java program for generating complex linguistic syntax trees

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

JSyntaxTree

Output

Download Here

A small Java program to build syntax trees and morphology trees, according to how my current morphology class prescribes.

Inspired by yohasebe's RSyntaxTree, which came into frequent use, however I unfortunately was pressed to make something new as the features required for my class surpassed the capabilities his program.

Legge qui per informazione italiana

CLI Options:

Syntax Default Desc
-i <STRING>	- input file path (required)
-o <STRING>	OUTPUT.png	output file path (include the .png, .jpg, etc.)
-f <STRING>	Doulos SIL	font name
-fs <INT>	48 font size
-l <FLOAT>	3.0 stroke size (for the lines)
-sx <INT>	50 spacing between adjacent nodes horizontally
-sy <INT>	150 spacing between adjacent nodes vertically
-c - color the tree
-q - quits right after generation - no preview window
-b <INT>	50 adds padding around the tree
-a - auto-subscript - will add a numerical subscript to node types

Movement Syntax

Movement is fairly simple: it always "moves" in the left direction, however by using a negative number you may switch the arrow.

The main syntax follows:

...
[TYPE^1 value]
...

The ^ operator (no spaces) indicates that movement stems from that node, and moves over 1 element to the left. The number can be changed to any number as long as there exists an element for it to move up to. The operator may also be duplicated:

...
[TYPE^1^2^3 value]
...

This syntax makes three individual movement arrows going 1 element over, 2 elements over, and 3 elements over.

...
[TYPE^1,2 value]
...

Having two numbers seperated by a comma indicates that the movement occurs at one of the parent nodes. Here with ^1,2 the syntax indicates that the movement goes 1 element to the left, and then rises to the node 2 parents above. In this way you may have end nodes with children (see Examples/chomsky.txt for a working example).

As stated previously, negating the movement value will cause the arrow to reverse, so, let's say that one wished to indicate movement right-ward, they would they need to place the ^ operation on the 'end' node and use -x steps:

...
[TYPE^-1,2 value]
...

Options

Nodes can be given special parameters using {} brackets after the node name:

[TYPE {
content:"value";
color:"255,255,0";
line-color:"255,0,255";
content-color:"0,255,255";
move-color:"0,255,0";
}]

Values can be applied to non-end nodes (without the content parameter, of course) likewise:

[TYPE
{
...
}
[
...
]
]

Options must come before sub-nodes.

Text Syntax

Generally just bracket notation, with some text effects:

\n newline

[TYPE value 1\nvalue 2]

_WORDS_ subscript

[TYPE_SUBTYPE_]

*WORDS* bold

[TYPE *value*]

%WORDS% italic

[TYPE %value%]

$WORDS$ smaller font

[TYPE BIG$SMALL$]

-WORDS- underline

[TYPE -value-]

#WORDS# highlight

[TYPE #value#]

=WORDS= strikethrough

[TYPE =value=]

At the end of a node, i.e. the @ in [N value value@] you may place these additions to determine what the connecting bar should be:

^ triangle

[TYPE value^]

| full bar

[TYPE value|]

If you need to have multiple words in a token, use the ` around the words.

Of course, all combinations are acceptable.

(e.g. $*%_W_O_R_D_S_%*$)

The program defaults to the Doulos SIL font (https://software.sil.org/doulos/), so you should probably have that installed. Not entirely sure what Java defaults to automatically.

Will build web interface at some point?

Currently there's a shoddy GUI interface I built for those who don't want to use the command line.

Examples

  1. Danube river steam ship driving company captain cabin door danube

  2. Troiae ab Oris troiae_ab_oris

  3. Colorless green ideas sleep furiously chompy

  4. あなたはユニコードの書物を使える あなたはユニコードの書物を使える If your font has the characters, you can use any unicode characters in data files. (This example uses Unifont)

About

A small but powerful java program for generating complex linguistic syntax trees

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

JSyntaxTree

Output

Download Here

A small Java program to build syntax trees and morphology trees, according to how my current morphology class prescribes.

Inspired by yohasebe's RSyntaxTree, which came into frequent use, however I unfortunately was pressed to make something new as the features required for my class surpassed the capabilities his program.

Legge qui per informazione italiana

CLI Options:

Syntax Default Desc
-i <STRING>	- input file path (required)
-o <STRING>	OUTPUT.png	output file path (include the .png, .jpg, etc.)
-f <STRING>	Doulos SIL	font name
-fs <INT>	48 font size
-l <FLOAT>	3.0 stroke size (for the lines)
-sx <INT>	50 spacing between adjacent nodes horizontally
-sy <INT>	150 spacing between adjacent nodes vertically
-c - color the tree
-q - quits right after generation - no preview window
-b <INT>	50 adds padding around the tree
-a - auto-subscript - will add a numerical subscript to node types

Movement Syntax

Movement is fairly simple: it always "moves" in the left direction, however by using a negative number you may switch the arrow.

The main syntax follows:

...
[TYPE^1 value]
...

The ^ operator (no spaces) indicates that movement stems from that node, and moves over 1 element to the left. The number can be changed to any number as long as there exists an element for it to move up to. The operator may also be duplicated:

...
[TYPE^1^2^3 value]
...

This syntax makes three individual movement arrows going 1 element over, 2 elements over, and 3 elements over.

...
[TYPE^1,2 value]
...

Having two numbers seperated by a comma indicates that the movement occurs at one of the parent nodes. Here with ^1,2 the syntax indicates that the movement goes 1 element to the left, and then rises to the node 2 parents above. In this way you may have end nodes with children (see Examples/chomsky.txt for a working example).

As stated previously, negating the movement value will cause the arrow to reverse, so, let's say that one wished to indicate movement right-ward, they would they need to place the ^ operation on the 'end' node and use -x steps:

...
[TYPE^-1,2 value]
...

Options

Nodes can be given special parameters using {} brackets after the node name:

[TYPE {
content:"value";
color:"255,255,0";
line-color:"255,0,255";
content-color:"0,255,255";
move-color:"0,255,0";
}]

Values can be applied to non-end nodes (without the content parameter, of course) likewise:

[TYPE
{
...
}
[
...
]
]

Options must come before sub-nodes.

Text Syntax

Generally just bracket notation, with some text effects:

\n newline

[TYPE value 1\nvalue 2]

_WORDS_ subscript

[TYPE_SUBTYPE_]

*WORDS* bold

[TYPE *value*]

%WORDS% italic

[TYPE %value%]

$WORDS$ smaller font

[TYPE BIG$SMALL$]

-WORDS- underline

[TYPE -value-]

#WORDS# highlight

[TYPE #value#]

=WORDS= strikethrough

[TYPE =value=]

At the end of a node, i.e. the @ in [N value value@] you may place these additions to determine what the connecting bar should be:

^ triangle

[TYPE value^]

| full bar

[TYPE value|]

If you need to have multiple words in a token, use the ` around the words.

Of course, all combinations are acceptable.

(e.g. $*%_W_O_R_D_S_%*$)

The program defaults to the Doulos SIL font (https://software.sil.org/doulos/), so you should probably have that installed. Not entirely sure what Java defaults to automatically.

Will build web interface at some point?

Currently there's a shoddy GUI interface I built for those who don't want to use the command line.

Examples

  1. Danube river steam ship driving company captain cabin door danube

  2. Troiae ab Oris troiae_ab_oris

  3. Colorless green ideas sleep furiously chompy

  4. あなたはユニコードの書物を使える あなたはユニコードの書物を使える If your font has the characters, you can use any unicode characters in data files. (This example uses Unifont)

About

A small but powerful java program for generating complex linguistic syntax trees

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

JSyntaxTree

Output

Download Here

A small Java program to build syntax trees and morphology trees, according to how my current morphology class prescribes.

Inspired by yohasebe's RSyntaxTree, which came into frequent use, however I unfortunately was pressed to make something new as the features required for my class surpassed the capabilities his program.

Legge qui per informazione italiana

CLI Options:

Syntax Default Desc
-i <STRING>	- input file path (required)
-o <STRING>	OUTPUT.png	output file path (include the .png, .jpg, etc.)
-f <STRING>	Doulos SIL	font name
-fs <INT>	48 font size
-l <FLOAT>	3.0 stroke size (for the lines)
-sx <INT>	50 spacing between adjacent nodes horizontally
-sy <INT>	150 spacing between adjacent nodes vertically
-c - color the tree
-q - quits right after generation - no preview window
-b <INT>	50 adds padding around the tree
-a - auto-subscript - will add a numerical subscript to node types

Movement Syntax

Movement is fairly simple: it always "moves" in the left direction, however by using a negative number you may switch the arrow.

The main syntax follows:

...
[TYPE^1 value]
...

The ^ operator (no spaces) indicates that movement stems from that node, and moves over 1 element to the left. The number can be changed to any number as long as there exists an element for it to move up to. The operator may also be duplicated:

...
[TYPE^1^2^3 value]
...

This syntax makes three individual movement arrows going 1 element over, 2 elements over, and 3 elements over.

...
[TYPE^1,2 value]
...

Having two numbers seperated by a comma indicates that the movement occurs at one of the parent nodes. Here with ^1,2 the syntax indicates that the movement goes 1 element to the left, and then rises to the node 2 parents above. In this way you may have end nodes with children (see Examples/chomsky.txt for a working example).

As stated previously, negating the movement value will cause the arrow to reverse, so, let's say that one wished to indicate movement right-ward, they would they need to place the ^ operation on the 'end' node and use -x steps:

...
[TYPE^-1,2 value]
...

Options

Nodes can be given special parameters using {} brackets after the node name:

[TYPE {
content:"value";
color:"255,255,0";
line-color:"255,0,255";
content-color:"0,255,255";
move-color:"0,255,0";
}]

Values can be applied to non-end nodes (without the content parameter, of course) likewise:

[TYPE
{
...
}
[
...
]
]

Options must come before sub-nodes.

Text Syntax

Generally just bracket notation, with some text effects:

\n newline

[TYPE value 1\nvalue 2]

_WORDS_ subscript

[TYPE_SUBTYPE_]

*WORDS* bold

[TYPE *value*]

%WORDS% italic

[TYPE %value%]

$WORDS$ smaller font

[TYPE BIG$SMALL$]

-WORDS- underline

[TYPE -value-]

#WORDS# highlight

[TYPE #value#]

=WORDS= strikethrough

[TYPE =value=]

At the end of a node, i.e. the @ in [N value value@] you may place these additions to determine what the connecting bar should be:

^ triangle

[TYPE value^]

| full bar

[TYPE value|]

If you need to have multiple words in a token, use the ` around the words.

Of course, all combinations are acceptable.

(e.g. $*%_W_O_R_D_S_%*$)

The program defaults to the Doulos SIL font (https://software.sil.org/doulos/), so you should probably have that installed. Not entirely sure what Java defaults to automatically.

Will build web interface at some point?

Currently there's a shoddy GUI interface I built for those who don't want to use the command line.

Examples

  1. Danube river steam ship driving company captain cabin door danube

  2. Troiae ab Oris troiae_ab_oris

  3. Colorless green ideas sleep furiously chompy

  4. あなたはユニコードの書物を使える あなたはユニコードの書物を使える If your font has the characters, you can use any unicode characters in data files. (This example uses Unifont)

About

A small but powerful java program for generating complex linguistic syntax trees

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

JSyntaxTree

Output

Download Here

A small Java program to build syntax trees and morphology trees, according to how my current morphology class prescribes.

Inspired by yohasebe's RSyntaxTree, which came into frequent use, however I unfortunately was pressed to make something new as the features required for my class surpassed the capabilities his program.

Legge qui per informazione italiana

CLI Options:

Syntax Default Desc
-i <STRING>	- input file path (required)
-o <STRING>	OUTPUT.png	output file path (include the .png, .jpg, etc.)
-f <STRING>	Doulos SIL	font name
-fs <INT>	48 font size
-l <FLOAT>	3.0 stroke size (for the lines)
-sx <INT>	50 spacing between adjacent nodes horizontally
-sy <INT>	150 spacing between adjacent nodes vertically
-c - color the tree
-q - quits right after generation - no preview window
-b <INT>	50 adds padding around the tree
-a - auto-subscript - will add a numerical subscript to node types

Movement Syntax

Movement is fairly simple: it always "moves" in the left direction, however by using a negative number you may switch the arrow.

The main syntax follows:

...
[TYPE^1 value]
...

The ^ operator (no spaces) indicates that movement stems from that node, and moves over 1 element to the left. The number can be changed to any number as long as there exists an element for it to move up to. The operator may also be duplicated:

...
[TYPE^1^2^3 value]
...

This syntax makes three individual movement arrows going 1 element over, 2 elements over, and 3 elements over.

...
[TYPE^1,2 value]
...

Having two numbers seperated by a comma indicates that the movement occurs at one of the parent nodes. Here with ^1,2 the syntax indicates that the movement goes 1 element to the left, and then rises to the node 2 parents above. In this way you may have end nodes with children (see Examples/chomsky.txt for a working example).

As stated previously, negating the movement value will cause the arrow to reverse, so, let's say that one wished to indicate movement right-ward, they would they need to place the ^ operation on the 'end' node and use -x steps:

...
[TYPE^-1,2 value]
...

Options

Nodes can be given special parameters using {} brackets after the node name:

[TYPE {
content:"value";
color:"255,255,0";
line-color:"255,0,255";
content-color:"0,255,255";
move-color:"0,255,0";
}]

Values can be applied to non-end nodes (without the content parameter, of course) likewise:

[TYPE
{
...
}
[
...
]
]

Options must come before sub-nodes.

Text Syntax

Generally just bracket notation, with some text effects:

\n newline

[TYPE value 1\nvalue 2]

_WORDS_ subscript

[TYPE_SUBTYPE_]

*WORDS* bold

[TYPE *value*]

%WORDS% italic

[TYPE %value%]

$WORDS$ smaller font

[TYPE BIG$SMALL$]

-WORDS- underline

[TYPE -value-]

#WORDS# highlight

[TYPE #value#]

=WORDS= strikethrough

[TYPE =value=]

At the end of a node, i.e. the @ in [N value value@] you may place these additions to determine what the connecting bar should be:

^ triangle

[TYPE value^]

| full bar

[TYPE value|]

If you need to have multiple words in a token, use the ` around the words.

Of course, all combinations are acceptable.

(e.g. $*%_W_O_R_D_S_%*$)

The program defaults to the Doulos SIL font (https://software.sil.org/doulos/), so you should probably have that installed. Not entirely sure what Java defaults to automatically.

Will build web interface at some point?

Currently there's a shoddy GUI interface I built for those who don't want to use the command line.

Examples

  1. Danube river steam ship driving company captain cabin door danube

  2. Troiae ab Oris troiae_ab_oris

  3. Colorless green ideas sleep furiously chompy

  4. あなたはユニコードの書物を使える あなたはユニコードの書物を使える If your font has the characters, you can use any unicode characters in data files. (This example uses Unifont)

About

A small but powerful java program for generating complex linguistic syntax trees

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

JSyntaxTree

Output

Download Here

A small Java program to build syntax trees and morphology trees, according to how my current morphology class prescribes.

Inspired by yohasebe's RSyntaxTree, which came into frequent use, however I unfortunately was pressed to make something new as the features required for my class surpassed the capabilities his program.

Legge qui per informazione italiana

CLI Options:

Syntax Default Desc
-i <STRING>	- input file path (required)
-o <STRING>	OUTPUT.png	output file path (include the .png, .jpg, etc.)
-f <STRING>	Doulos SIL	font name
-fs <INT>	48 font size
-l <FLOAT>	3.0 stroke size (for the lines)
-sx <INT>	50 spacing between adjacent nodes horizontally
-sy <INT>	150 spacing between adjacent nodes vertically
-c - color the tree
-q - quits right after generation - no preview window
-b <INT>	50 adds padding around the tree
-a - auto-subscript - will add a numerical subscript to node types

Movement Syntax

Movement is fairly simple: it always "moves" in the left direction, however by using a negative number you may switch the arrow.

The main syntax follows:

...
[TYPE^1 value]
...

The ^ operator (no spaces) indicates that movement stems from that node, and moves over 1 element to the left. The number can be changed to any number as long as there exists an element for it to move up to. The operator may also be duplicated:

...
[TYPE^1^2^3 value]
...

This syntax makes three individual movement arrows going 1 element over, 2 elements over, and 3 elements over.

...
[TYPE^1,2 value]
...

Having two numbers seperated by a comma indicates that the movement occurs at one of the parent nodes. Here with ^1,2 the syntax indicates that the movement goes 1 element to the left, and then rises to the node 2 parents above. In this way you may have end nodes with children (see Examples/chomsky.txt for a working example).

As stated previously, negating the movement value will cause the arrow to reverse, so, let's say that one wished to indicate movement right-ward, they would they need to place the ^ operation on the 'end' node and use -x steps:

...
[TYPE^-1,2 value]
...

Options

Nodes can be given special parameters using {} brackets after the node name:

[TYPE {
content:"value";
color:"255,255,0";
line-color:"255,0,255";
content-color:"0,255,255";
move-color:"0,255,0";
}]

Values can be applied to non-end nodes (without the content parameter, of course) likewise:

[TYPE
{
...
}
[
...
]
]

Options must come before sub-nodes.

Text Syntax

Generally just bracket notation, with some text effects:

\n newline

[TYPE value 1\nvalue 2]

_WORDS_ subscript

[TYPE_SUBTYPE_]

*WORDS* bold

[TYPE *value*]

%WORDS% italic

[TYPE %value%]

$WORDS$ smaller font

[TYPE BIG$SMALL$]

-WORDS- underline

[TYPE -value-]

#WORDS# highlight

[TYPE #value#]

=WORDS= strikethrough

[TYPE =value=]

At the end of a node, i.e. the @ in [N value value@] you may place these additions to determine what the connecting bar should be:

^ triangle

[TYPE value^]

| full bar

[TYPE value|]

If you need to have multiple words in a token, use the ` around the words.

Of course, all combinations are acceptable.

(e.g. $*%_W_O_R_D_S_%*$)

The program defaults to the Doulos SIL font (https://software.sil.org/doulos/), so you should probably have that installed. Not entirely sure what Java defaults to automatically.

Will build web interface at some point?

Currently there's a shoddy GUI interface I built for those who don't want to use the command line.

Examples

  1. Danube river steam ship driving company captain cabin door danube

  2. Troiae ab Oris troiae_ab_oris

  3. Colorless green ideas sleep furiously chompy

  4. あなたはユニコードの書物を使える あなたはユニコードの書物を使える If your font has the characters, you can use any unicode characters in data files. (This example uses Unifont)

About

A small but powerful java program for generating complex linguistic syntax trees

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

JSyntaxTree

Output

Download Here

A small Java program to build syntax trees and morphology trees, according to how my current morphology class prescribes.

Inspired by yohasebe's RSyntaxTree, which came into frequent use, however I unfortunately was pressed to make something new as the features required for my class surpassed the capabilities his program.

Legge qui per informazione italiana

CLI Options:

Syntax Default Desc
-i <STRING>	- input file path (required)
-o <STRING>	OUTPUT.png	output file path (include the .png, .jpg, etc.)
-f <STRING>	Doulos SIL	font name
-fs <INT>	48 font size
-l <FLOAT>	3.0 stroke size (for the lines)
-sx <INT>	50 spacing between adjacent nodes horizontally
-sy <INT>	150 spacing between adjacent nodes vertically
-c - color the tree
-q - quits right after generation - no preview window
-b <INT>	50 adds padding around the tree
-a - auto-subscript - will add a numerical subscript to node types

Movement Syntax

Movement is fairly simple: it always "moves" in the left direction, however by using a negative number you may switch the arrow.

The main syntax follows:

...
[TYPE^1 value]
...

The ^ operator (no spaces) indicates that movement stems from that node, and moves over 1 element to the left. The number can be changed to any number as long as there exists an element for it to move up to. The operator may also be duplicated:

...
[TYPE^1^2^3 value]
...

This syntax makes three individual movement arrows going 1 element over, 2 elements over, and 3 elements over.

...
[TYPE^1,2 value]
...

Having two numbers seperated by a comma indicates that the movement occurs at one of the parent nodes. Here with ^1,2 the syntax indicates that the movement goes 1 element to the left, and then rises to the node 2 parents above. In this way you may have end nodes with children (see Examples/chomsky.txt for a working example).

As stated previously, negating the movement value will cause the arrow to reverse, so, let's say that one wished to indicate movement right-ward, they would they need to place the ^ operation on the 'end' node and use -x steps:

...
[TYPE^-1,2 value]
...

Options

Nodes can be given special parameters using {} brackets after the node name:

[TYPE {
content:"value";
color:"255,255,0";
line-color:"255,0,255";
content-color:"0,255,255";
move-color:"0,255,0";
}]

Values can be applied to non-end nodes (without the content parameter, of course) likewise:

[TYPE
{
...
}
[
...
]
]

Options must come before sub-nodes.

Text Syntax

Generally just bracket notation, with some text effects:

\n newline

[TYPE value 1\nvalue 2]

_WORDS_ subscript

[TYPE_SUBTYPE_]

*WORDS* bold

[TYPE *value*]

%WORDS% italic

[TYPE %value%]

$WORDS$ smaller font

[TYPE BIG$SMALL$]

-WORDS- underline

[TYPE -value-]

#WORDS# highlight

[TYPE #value#]

=WORDS= strikethrough

[TYPE =value=]

At the end of a node, i.e. the @ in [N value value@] you may place these additions to determine what the connecting bar should be:

^ triangle

[TYPE value^]

| full bar

[TYPE value|]

If you need to have multiple words in a token, use the ` around the words.

Of course, all combinations are acceptable.

(e.g. $*%_W_O_R_D_S_%*$)

The program defaults to the Doulos SIL font (https://software.sil.org/doulos/), so you should probably have that installed. Not entirely sure what Java defaults to automatically.

Will build web interface at some point?

Currently there's a shoddy GUI interface I built for those who don't want to use the command line.

Examples

  1. Danube river steam ship driving company captain cabin door danube

  2. Troiae ab Oris troiae_ab_oris

  3. Colorless green ideas sleep furiously chompy

  4. あなたはユニコードの書物を使える あなたはユニコードの書物を使える If your font has the characters, you can use any unicode characters in data files. (This example uses Unifont)

About

A small but powerful java program for generating complex linguistic syntax trees

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

JSyntaxTree

Output

Download Here

A small Java program to build syntax trees and morphology trees, according to how my current morphology class prescribes.

Inspired by yohasebe's RSyntaxTree, which came into frequent use, however I unfortunately was pressed to make something new as the features required for my class surpassed the capabilities his program.

Legge qui per informazione italiana

CLI Options:

Syntax Default Desc
-i <STRING>	- input file path (required)
-o <STRING>	OUTPUT.png	output file path (include the .png, .jpg, etc.)
-f <STRING>	Doulos SIL	font name
-fs <INT>	48 font size
-l <FLOAT>	3.0 stroke size (for the lines)
-sx <INT>	50 spacing between adjacent nodes horizontally
-sy <INT>	150 spacing between adjacent nodes vertically
-c - color the tree
-q - quits right after generation - no preview window
-b <INT>	50 adds padding around the tree
-a - auto-subscript - will add a numerical subscript to node types

Movement Syntax

Movement is fairly simple: it always "moves" in the left direction, however by using a negative number you may switch the arrow.

The main syntax follows:

...
[TYPE^1 value]
...

The ^ operator (no spaces) indicates that movement stems from that node, and moves over 1 element to the left. The number can be changed to any number as long as there exists an element for it to move up to. The operator may also be duplicated:

...
[TYPE^1^2^3 value]
...

This syntax makes three individual movement arrows going 1 element over, 2 elements over, and 3 elements over.

...
[TYPE^1,2 value]
...

Having two numbers seperated by a comma indicates that the movement occurs at one of the parent nodes. Here with ^1,2 the syntax indicates that the movement goes 1 element to the left, and then rises to the node 2 parents above. In this way you may have end nodes with children (see Examples/chomsky.txt for a working example).

As stated previously, negating the movement value will cause the arrow to reverse, so, let's say that one wished to indicate movement right-ward, they would they need to place the ^ operation on the 'end' node and use -x steps:

...
[TYPE^-1,2 value]
...

Options

Nodes can be given special parameters using {} brackets after the node name:

[TYPE {
content:"value";
color:"255,255,0";
line-color:"255,0,255";
content-color:"0,255,255";
move-color:"0,255,0";
}]

Values can be applied to non-end nodes (without the content parameter, of course) likewise:

[TYPE
{
...
}
[
...
]
]

Options must come before sub-nodes.

Text Syntax

Generally just bracket notation, with some text effects:

\n newline

[TYPE value 1\nvalue 2]

_WORDS_ subscript

[TYPE_SUBTYPE_]

*WORDS* bold

[TYPE *value*]

%WORDS% italic

[TYPE %value%]

$WORDS$ smaller font

[TYPE BIG$SMALL$]

-WORDS- underline

[TYPE -value-]

#WORDS# highlight

[TYPE #value#]

=WORDS= strikethrough

[TYPE =value=]

At the end of a node, i.e. the @ in [N value value@] you may place these additions to determine what the connecting bar should be:

^ triangle

[TYPE value^]

| full bar

[TYPE value|]

If you need to have multiple words in a token, use the ` around the words.

Of course, all combinations are acceptable.

(e.g. $*%_W_O_R_D_S_%*$)

The program defaults to the Doulos SIL font (https://software.sil.org/doulos/), so you should probably have that installed. Not entirely sure what Java defaults to automatically.

Will build web interface at some point?

Currently there's a shoddy GUI interface I built for those who don't want to use the command line.

Examples

  1. Danube river steam ship driving company captain cabin door danube

  2. Troiae ab Oris troiae_ab_oris

  3. Colorless green ideas sleep furiously chompy

  4. あなたはユニコードの書物を使える あなたはユニコードの書物を使える If your font has the characters, you can use any unicode characters in data files. (This example uses Unifont)

About

A small but powerful java program for generating complex linguistic syntax trees

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages