adding text samples to list command
This commit is contained in:
parent
e72b79d28e
commit
27e64af308
|
@ -1,6 +1,6 @@
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import random
|
import textwrap
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
from types import ModuleType
|
from types import ModuleType
|
||||||
|
|
||||||
|
@ -9,7 +9,6 @@ import language
|
||||||
import typer
|
import typer
|
||||||
from rich.logging import RichHandler
|
from rich.logging import RichHandler
|
||||||
from rich.console import Console
|
from rich.console import Console
|
||||||
from rich.markdown import Markdown
|
|
||||||
|
|
||||||
app = typer.Typer()
|
app = typer.Typer()
|
||||||
|
|
||||||
|
@ -58,23 +57,7 @@ def main(
|
||||||
@app.command()
|
@app.command()
|
||||||
def text(count: int = typer.Option(50, help="The number of words to generate.")):
|
def text(count: int = typer.Option(50, help="The number of words to generate.")):
|
||||||
|
|
||||||
phrases = []
|
paragraph = app_state["language"].Language.text(count)
|
||||||
phrase = []
|
|
||||||
for word in app_state["language"].Language.word(count):
|
|
||||||
phrase.append(str(word))
|
|
||||||
if len(phrase) >= random.randint(1, 12):
|
|
||||||
phrases.append(' '.join(phrase))
|
|
||||||
phrase = []
|
|
||||||
if phrase:
|
|
||||||
phrases.append(' '.join(phrase))
|
|
||||||
|
|
||||||
paragraph = phrases[0].capitalize()
|
|
||||||
for phrase in phrases[1:]:
|
|
||||||
if random.choice([0, 0, 1]):
|
|
||||||
paragraph = paragraph + random.choice('?!.') + ' ' + phrase.capitalize()
|
|
||||||
else:
|
|
||||||
paragraph = paragraph + ', ' + phrase
|
|
||||||
paragraph = paragraph + random.choice('?!.')
|
|
||||||
|
|
||||||
console = Console(width=80)
|
console = Console(width=80)
|
||||||
console.print(paragraph)
|
console.print(paragraph)
|
||||||
|
@ -92,9 +75,9 @@ def names(
|
||||||
|
|
||||||
@app.command()
|
@app.command()
|
||||||
def list():
|
def list():
|
||||||
console = Console(width=80)
|
|
||||||
for lang, module in supported_languages.items():
|
for lang, module in supported_languages.items():
|
||||||
console.print(Markdown(module.__doc__))
|
text = textwrap.shorten(module.Language.text(count=20), width=70, placeholder='')
|
||||||
|
print(f"{lang.title():15s}: {text}")
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
@ -131,57 +131,6 @@ class Language:
|
||||||
)
|
)
|
||||||
>>> Common.word()
|
>>> Common.word()
|
||||||
reibing
|
reibing
|
||||||
|
|
||||||
How Words Are Constructed:
|
|
||||||
|
|
||||||
The main interface for callers is word(), which returns a
|
|
||||||
randomly-generated word in the language according to the following
|
|
||||||
algorithm:
|
|
||||||
|
|
||||||
1. Choose a random syllable from the syllable set
|
|
||||||
2. For each grapheme in the syllable
|
|
||||||
3. Choose a random grapheme template
|
|
||||||
4. Choose a random sequence from the language for that grapheme
|
|
||||||
5. Validate the word against the language rules
|
|
||||||
6. Repeat 1-5 until a valid word is generated
|
|
||||||
7. Add a prefix and suffix, if they are defined
|
|
||||||
|
|
||||||
The following graphemes are supported by default:
|
|
||||||
- vowel
|
|
||||||
- consonant
|
|
||||||
- prefix
|
|
||||||
- suffix
|
|
||||||
|
|
||||||
When graphemes are chosen, the following rules are applied:
|
|
||||||
- Every syllable must have at least one vowel
|
|
||||||
- A syllable may never have three consecutive consonants
|
|
||||||
|
|
||||||
How Words Are Validated:
|
|
||||||
|
|
||||||
Once a word has been constructed by populating syllable templates, it is
|
|
||||||
tested against one or more language rules.
|
|
||||||
|
|
||||||
The default rules are defined in language.rules.default_rules; they are:
|
|
||||||
- the word must contain at least one vowel
|
|
||||||
- the word must not contain 3 or more contiguous english vowels
|
|
||||||
- the word must not contain 3 or more contiguous english consonants
|
|
||||||
- the word must not consist of just one vowel, repeated
|
|
||||||
|
|
||||||
Since it is possible to craft Syllables resulting in grapheme
|
|
||||||
selections that rarely or never yield valid words, or rules that
|
|
||||||
reject every word, an ImprobableTemplateError will be thrown if
|
|
||||||
10 successive attempts to create a valid word fail.
|
|
||||||
|
|
||||||
Extending Languages:
|
|
||||||
|
|
||||||
Graphemes are populated by means of callbacks which select a member
|
|
||||||
of the associated weighted set at random. Graphemes can be any string,
|
|
||||||
so long as the Language class has a matching callback.
|
|
||||||
|
|
||||||
To add support for a new grapheme type, define a method on your
|
|
||||||
Language class called get_grapheme_TYPE, where TYPE is the string
|
|
||||||
used in your Syllable templates. Examine test cases in test_types.py
|
|
||||||
for examples.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
|
|
Loading…
Reference in New Issue
Block a user