├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── config.yml │ └── feature_request.md ├── dependabot.yml ├── stale.yml └── workflows │ ├── merge-dependabot.yml │ └── on-push-do-doco.yml ├── .gitignore ├── RedGateLicense.txt ├── code_of_conduct.md ├── license.txt ├── readme.md └── src ├── .editorconfig ├── .gitattributes ├── Directory.Build.props ├── Directory.Packages.props ├── Shared.sln.DotSettings ├── Tests ├── FakerUsage.cs ├── Tests.csproj ├── WaffleEngineTests.HtmlWaffleMultiple.verified.txt ├── WaffleEngineTests.HtmlWaffleMultipleWithHeadAndBody.verified.txt ├── WaffleEngineTests.HtmlWaffleNoHeading.verified.txt ├── WaffleEngineTests.HtmlWaffleNoHeadingWithHeadAndBody.verified.txt ├── WaffleEngineTests.HtmlWaffleSingle.verified.txt ├── WaffleEngineTests.HtmlWaffleSingleWithHeadAndBody.verified.txt ├── WaffleEngineTests.MarkdownWaffleMultiple.verified.md ├── WaffleEngineTests.MarkdownWaffleNoHeading.verified.md ├── WaffleEngineTests.MarkdownWaffleSingle.verified.md ├── WaffleEngineTests.TextWaffleMultiple.verified.txt ├── WaffleEngineTests.TextWaffleNoHeading.verified.txt ├── WaffleEngineTests.TextWaffleSingle.verified.txt ├── WaffleEngineTests.Title.verified.txt └── WaffleEngineTests.cs ├── WaffleGenerator.Bogus ├── Waffle.cs ├── WaffleGenerator.Bogus.csproj └── WaffleGeneratorExtensions.cs ├── WaffleGenerator.sln ├── WaffleGenerator.sln.DotSettings ├── WaffleGenerator ├── AssemblyInfo.cs ├── Constants.cs ├── Extensions.cs ├── Heading.cs ├── InnerEngine.cs ├── Paragraph.cs ├── WaffleContent.cs ├── WaffleEngine.cs └── WaffleGenerator.csproj ├── appveyor.yml ├── global.json ├── icon.png ├── key.snk ├── mdsnippets.json └── nuget.config /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: SimonCropp 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug fix 3 | about: Create a bug fix to help us improve 4 | --- 5 | 6 | Note: New issues raised, where it is clear the submitter has not read the issue template, are likely to be closed with "please read the issue template". Please don't take offense at this. It is simply a time management decision. If someone raises an issue, and can't be bothered to spend the time to read the issue template, then the project maintainers should not be expected to spend the time to read the submitted issue. Often too much time is spent going back and forth in issue comments asking for information that is outlined in the issue template. 7 | 8 | 9 | #### Preamble 10 | 11 | General questions may be better placed [StackOveflow](https://stackoverflow.com/). 12 | 13 | Where relevant, ensure you are using the current stable versions on your development stack. For example: 14 | 15 | * Visual Studio 16 | * [.NET SDK or .NET Core SDK](https://www.microsoft.com/net/download) 17 | * Any related NuGet packages 18 | 19 | Any code or stack traces must be properly formatted with [GitHub markdown](https://guides.github.com/features/mastering-markdown/). 20 | 21 | 22 | #### Describe the bug 23 | 24 | A clear and concise description of what the bug is. Include any relevant version information. 25 | 26 | A clear and concise description of what you expected to happen. 27 | 28 | Add any other context about the problem here. 29 | 30 | 31 | #### Minimal Repro 32 | 33 | Ensure you have replicated the bug in a minimal solution with the fewest moving parts. Often this will help point to the true cause of the problem. Upload this repro as part of the issue, preferably a public GitHub repository or a downloadable zip. The repro will allow the maintainers of this project to smoke test the any fix. 34 | 35 | #### Submit a PR that fixes the bug 36 | 37 | Submit a [Pull Request (PR)](https://help.github.com/articles/about-pull-requests/) that fixes the bug. Include in this PR a test that verifies the fix. If you were not able to fix the bug, a PR that illustrates your partial progress will suffice. 38 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: How to raise feature requests 4 | --- 5 | 6 | 7 | Note: New issues raised, where it is clear the submitter has not read the issue template, are likely to be closed with "please read the issue template". Please don't take offense at this. It is simply a time management decision. If someone raises an issue, and can't be bothered to spend the time to read the issue template, then the project maintainers should not be expected to spend the time to read the submitted issue. Often too much time is spent going back and forth in issue comments asking for information that is outlined in the issue template. 8 | 9 | If you are certain the feature will be accepted, it is better to raise a [Pull Request (PR)](https://help.github.com/articles/about-pull-requests/). 10 | 11 | If you are uncertain if the feature will be accepted, outline the proposal below to confirm it is viable, prior to raising a PR that implements the feature. 12 | 13 | Note that even if the feature is a good idea and viable, it may not be accepted since the ongoing effort in maintaining the feature may outweigh the benefit it delivers. 14 | 15 | 16 | #### Is the feature request related to a problem 17 | 18 | A clear and concise description of what the problem is. 19 | 20 | 21 | #### Describe the solution 22 | 23 | A clear and concise proposal of how you intend to implement the feature. 24 | 25 | 26 | #### Describe alternatives considered 27 | 28 | A clear and concise description of any alternative solutions or features you've considered. 29 | 30 | 31 | #### Additional context 32 | 33 | Add any other context about the feature request here. 34 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: nuget 4 | directory: "/src" 5 | schedule: 6 | interval: daily 7 | open-pull-requests-limit: 10 8 | -------------------------------------------------------------------------------- /.github/stale.yml: -------------------------------------------------------------------------------- 1 | # Number of days of inactivity before an issue becomes stale 2 | daysUntilStale: 7 3 | # Number of days of inactivity before a stale issue is closed 4 | daysUntilClose: 7 5 | # Set to true to ignore issues in a milestone (defaults to false) 6 | exemptMilestones: true 7 | # Comment to post when marking an issue as stale. Set to `false` to disable 8 | markComment: > 9 | This issue has been automatically marked as stale because it has not had 10 | recent activity. It will be closed if no further activity occurs. Thank you 11 | for your contributions. 12 | # Comment to post when closing a stale issue. Set to `false` to disable 13 | closeComment: false 14 | # Optionally, specify configuration settings that are specific to just 'issues' or 'pulls': 15 | pulls: 16 | daysUntilStale: 30 17 | exemptLabels: 18 | - Question 19 | - Bug 20 | - Feature 21 | - Improvement -------------------------------------------------------------------------------- /.github/workflows/merge-dependabot.yml: -------------------------------------------------------------------------------- 1 | name: merge-dependabot 2 | on: 3 | pull_request: 4 | jobs: 5 | automerge: 6 | runs-on: ubuntu-latest 7 | if: github.actor == 'dependabot[bot]' 8 | steps: 9 | - name: Dependabot Auto Merge 10 | uses: ahmadnassri/action-dependabot-auto-merge@v2.6.6 11 | with: 12 | target: minor 13 | github-token: ${{ secrets.dependabot }} 14 | command: squash and merge -------------------------------------------------------------------------------- /.github/workflows/on-push-do-doco.yml: -------------------------------------------------------------------------------- 1 | name: on-push-do-doco 2 | on: 3 | push: 4 | jobs: 5 | release: 6 | runs-on: windows-latest 7 | steps: 8 | - uses: actions/checkout@v4 9 | - name: Run MarkdownSnippets 10 | run: | 11 | dotnet tool install --global MarkdownSnippets.Tool 12 | mdsnippets ${GITHUB_WORKSPACE} 13 | shell: bash 14 | - name: Push changes 15 | run: | 16 | git config --local user.email "action@github.com" 17 | git config --local user.name "GitHub Action" 18 | git commit -m "Doco changes" -a || echo "nothing to commit" 19 | remote="https://${GITHUB_ACTOR}:${{secrets.GITHUB_TOKEN}}@github.com/${GITHUB_REPOSITORY}.git" 20 | branch="${GITHUB_REF:11}" 21 | git push "${remote}" ${branch} || echo "nothing to push" 22 | shell: bash -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.suo 2 | *.user 3 | bin/ 4 | obj/ 5 | .vs/ 6 | *.DotSettings.user 7 | .idea/ 8 | *.received.* 9 | nugets/ -------------------------------------------------------------------------------- /RedGateLicense.txt: -------------------------------------------------------------------------------- 1 | New BSD License (BSD) 2 | Copyright (c) 2008, Red Gate Software Ltd 3 | All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 6 | 7 | * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 8 | * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 9 | * Neither the name of Red Gate Software Ltd nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 10 | 11 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- /code_of_conduct.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, sex characteristics, gender identity and expression, 9 | level of experience, education, socio-economic status, nationality, personal 10 | appearance, race, religion, or sexual identity and orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | * Using welcoming and inclusive language 18 | * Being respectful of differing viewpoints and experiences 19 | * Gracefully accepting constructive criticism 20 | * Focusing on what is best for the community 21 | * Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | * The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | * Trolling, insulting/derogatory comments, and personal or political attacks 28 | * Public or private harassment 29 | * Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission 31 | * Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an appointed 52 | representative at an online or offline event. Representation of a project may be 53 | further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team at simon.cropp@gmail.com. All 59 | complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html 72 | 73 | [homepage]: https://www.contributor-covenant.org 74 | 75 | For answers to common questions about this code of conduct, see 76 | https://www.contributor-covenant.org/faq 77 | -------------------------------------------------------------------------------- /license.txt: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2018, Simon Cropp 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | * Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | * Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | * Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # WaffleGenerator 2 | 3 | [![Build status](https://ci.appveyor.com/api/projects/status/bv3erhc4d2pegpba/branch/main?svg=true)](https://ci.appveyor.com/project/SimonCropp/WaffleGenerator) 4 | [![NuGet Status](https://img.shields.io/nuget/v/WaffleGenerator.svg?label=WaffleGenerator&cacheSeconds=86400)](https://www.nuget.org/packages/WaffleGenerator/) 5 | [![NuGet Status](https://img.shields.io/nuget/v/WaffleGenerator.Bogus.svg?label=WaffleGenerator.Bogus&cacheSeconds=86400)](https://www.nuget.org/packages/WaffleGenerator.Bogus/) 6 | 7 | Produces text which, on first glance, looks like real, ponderous, prose; replete with clichés. 8 | 9 | **See [Milestones](../../milestones?state=closed) for release notes.** 10 | 11 | Example content: 12 | 13 | ``` 14 | The Aesthetic Of Economico-Social Disposition 15 | 16 | "In this regard, the underlying surrealism of the take home message should not 17 | divert attention from The Aesthetic Of Economico-Social Disposition" 18 | (Humphrey Yokomoto in The Journal of the Total Entative Item (20044U)) 19 | 20 | On any rational basis, a particular factor, such as the functional baseline, the 21 | analogy of object, the strategic requirements or the principal overriding programming 22 | provides an interesting insight into the complementary functional derivation. 23 | This trend may dissipate due to the mensurable proficiency. 24 | ``` 25 | 26 | This output can be used in similar way to [Lorem ipsum](https://en.wikipedia.org/wiki/Lorem_ipsum) content, in that it is useful for producing text for build software and producing design mockups. 27 | 28 | Based on the awesome work by [Andrew Clarke](https://www.red-gate.com/simple-talk/author/andrew-clarke/) outlined in [The Waffle Generator](https://www.red-gate.com/simple-talk/dotnet/net-tools/the-waffle-generator/). 29 | 30 | Code based on [SDGGenerators - Red Gate SQL Data Generator Community Generators](https://archive.codeplex.com/?p=sdggenerators). 31 | 32 | 33 | ## Blazor App 34 | 35 | The [Blazing Waffles](http://wafflegen.azurewebsites.net/) app allows the generation of waffle text online. 36 | 37 | * Source: https://github.com/gbiellem/BlazingWaffles 38 | 39 | 40 | ## Main Package - WaffleGenerator 41 | 42 | https://nuget.org/packages/WaffleGenerator/ 43 | 44 | 45 | ### Usage 46 | 47 | The `WaffleEngine` can be used to produce Html, text or Markdown: 48 | 49 | 50 | #### Html 51 | 52 | 53 | 54 | ```cs 55 | var text = WaffleEngine.Html( 56 | paragraphs: 2, 57 | includeHeading: true, 58 | includeHeadAndBody: true); 59 | Debug.WriteLine(text); 60 | ``` 61 | snippet source | anchor 62 | 63 | 64 | 65 | #### Text 66 | 67 | 68 | 69 | ```cs 70 | var text = WaffleEngine.Text( 71 | paragraphs: 1, 72 | includeHeading: true); 73 | Debug.WriteLine(text); 74 | ``` 75 | snippet source | anchor 76 | 77 | 78 | 79 | #### Markdown 80 | 81 | 82 | 83 | ```cs 84 | var markdown = WaffleEngine.Markdown( 85 | paragraphs: 1, 86 | includeHeading: true); 87 | Debug.WriteLine(markdown); 88 | ``` 89 | snippet source | anchor 90 | 91 | 92 | 93 | ## WaffleGenerator.Bogus 94 | 95 | Extends [Bogus](https://github.com/bchavez/Bogus) to use WaffleGenerator. 96 | 97 | https://nuget.org/packages/WaffleGenerator.Bogus/ 98 | 99 | 100 | ### Usage 101 | 102 | The entry extension method is `WaffleHtml()` or `WaffleText()` or `WaffleMarkdown()`: 103 | 104 | 105 | 106 | ```cs 107 | var faker = new Faker() 108 | .RuleFor( 109 | property: u => u.Title, 110 | setter: (f, u) => f.WaffleTitle()) 111 | .RuleFor( 112 | property: u => u.Property1, 113 | setter: (f, u) => f.WaffleHtml()) 114 | .RuleFor( 115 | property: u => u.Property2, 116 | setter: (f, u) => f.WaffleHtml( 117 | paragraphs: 4, 118 | includeHeading: true)) 119 | .RuleFor( 120 | property: u => u.Property3, 121 | setter: (f, u) => f.WaffleText()) 122 | .RuleFor( 123 | property: u => u.Property4, 124 | setter: (f, u) => f.WaffleText( 125 | paragraphs: 4, 126 | includeHeading: false)); 127 | 128 | var target = faker.Generate(); 129 | Debug.WriteLine(target.Title); 130 | Debug.WriteLine(target.Property1); 131 | Debug.WriteLine(target.Property2); 132 | Debug.WriteLine(target.Property3); 133 | Debug.WriteLine(target.Property4); 134 | ``` 135 | snippet source | anchor 136 | 137 | 138 | 139 | ## Icon 140 | 141 | [Waffle](https://thenounproject.com/term/waffle/836862/) designed by Made by Made from [The Noun Project](https://thenounproject.com/) 142 | -------------------------------------------------------------------------------- /src/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | 6 | [*.cs] 7 | indent_size = 4 8 | charset = utf-8 9 | 10 | # Redundant accessor body 11 | resharper_redundant_accessor_body_highlighting = error 12 | 13 | # Replace with field keyword 14 | resharper_replace_with_field_keyword_highlighting = error 15 | 16 | # Replace with single call to Single(..) 17 | resharper_replace_with_single_call_to_single_highlighting = error 18 | 19 | # Replace with single call to SingleOrDefault(..) 20 | resharper_replace_with_single_call_to_single_or_default_highlighting = error 21 | 22 | # Replace with single call to LastOrDefault(..) 23 | resharper_replace_with_single_call_to_last_or_default_highlighting = error 24 | 25 | # Replace with single call to Last(..) 26 | resharper_replace_with_single_call_to_last_highlighting = error 27 | 28 | # Replace with single call to First(..) 29 | resharper_replace_with_single_call_to_first_highlighting = error 30 | 31 | # Replace with single call to FirstOrDefault(..) 32 | resharper_replace_with_single_call_to_first_or_default_highlighting = error 33 | 34 | # Replace with single call to Any(..) 35 | resharper_replace_with_single_call_to_any_highlighting = error 36 | 37 | # Replace with single call to Count(..) 38 | resharper_replace_with_single_call_to_count_highlighting = error 39 | 40 | # Declare types in namespaces 41 | dotnet_diagnostic.CA1050.severity = none 42 | 43 | # Use Literals Where Appropriate 44 | dotnet_diagnostic.CA1802.severity = error 45 | 46 | # Template should be a static expression 47 | dotnet_diagnostic.CA2254.severity = error 48 | 49 | # Potentially misleading parameter name in lambda or local function 50 | resharper_all_underscore_local_parameter_name_highlighting = none 51 | 52 | # Redundant explicit collection creation in argument of 'params' parameter 53 | resharper_redundant_explicit_params_array_creation_highlighting = error 54 | 55 | # Do not initialize unnecessarily 56 | dotnet_diagnostic.CA1805.severity = error 57 | 58 | # Avoid unsealed attributes 59 | dotnet_diagnostic.CA1813.severity = error 60 | 61 | # Test for empty strings using string length 62 | dotnet_diagnostic.CA1820.severity = none 63 | 64 | # Remove empty finalizers 65 | dotnet_diagnostic.CA1821.severity = error 66 | 67 | # Mark members as static 68 | dotnet_diagnostic.CA1822.severity = error 69 | 70 | # Avoid unused private fields 71 | dotnet_diagnostic.CA1823.severity = error 72 | 73 | # Avoid zero-length array allocations 74 | dotnet_diagnostic.CA1825.severity = error 75 | 76 | # Use property instead of Linq Enumerable method 77 | dotnet_diagnostic.CA1826.severity = error 78 | 79 | # Do not use Count()/LongCount() when Any() can be used 80 | dotnet_diagnostic.CA1827.severity = error 81 | dotnet_diagnostic.CA1828.severity = error 82 | 83 | # Use Length/Count property instead of Enumerable.Count method 84 | dotnet_diagnostic.CA1829.severity = error 85 | 86 | # Prefer strongly-typed Append and Insert method overloads on StringBuilder 87 | dotnet_diagnostic.CA1830.severity = error 88 | 89 | # Use AsSpan instead of Range-based indexers for string when appropriate 90 | dotnet_diagnostic.CA1831.severity = error 91 | 92 | # Use AsSpan instead of Range-based indexers for string when appropriate 93 | dotnet_diagnostic.CA1831.severity = error 94 | dotnet_diagnostic.CA1832.severity = error 95 | dotnet_diagnostic.CA1833.severity = error 96 | 97 | # Use StringBuilder.Append(char) for single character strings 98 | dotnet_diagnostic.CA1834.severity = error 99 | 100 | # Prefer IsEmpty over Count when available 101 | dotnet_diagnostic.CA1836.severity = error 102 | 103 | # Prefer IsEmpty over Count when available 104 | dotnet_diagnostic.CA1836.severity = error 105 | 106 | # Use Environment.ProcessId instead of Process.GetCurrentProcess().Id 107 | dotnet_diagnostic.CA1837.severity = error 108 | 109 | # Use Environment.ProcessPath instead of Process.GetCurrentProcess().MainModule.FileName 110 | dotnet_diagnostic.CA1839.severity = error 111 | 112 | # Use Environment.CurrentManagedThreadId instead of Thread.CurrentThread.ManagedThreadId 113 | dotnet_diagnostic.CA1840.severity = error 114 | 115 | # Prefer Dictionary Contains methods 116 | dotnet_diagnostic.CA1841.severity = error 117 | 118 | # Do not use WhenAll with a single task 119 | dotnet_diagnostic.CA1842.severity = error 120 | 121 | # Do not use WhenAll/WaitAll with a single task 122 | dotnet_diagnostic.CA1842.severity = error 123 | dotnet_diagnostic.CA1843.severity = error 124 | 125 | # Use span-based 'string.Concat' 126 | dotnet_diagnostic.CA1845.severity = error 127 | 128 | # Prefer AsSpan over Substring 129 | dotnet_diagnostic.CA1846.severity = error 130 | 131 | # Use string.Contains(char) instead of string.Contains(string) with single characters 132 | dotnet_diagnostic.CA1847.severity = error 133 | 134 | # Prefer static HashData method over ComputeHash 135 | dotnet_diagnostic.CA1850.severity = error 136 | 137 | # Possible multiple enumerations of IEnumerable collection 138 | dotnet_diagnostic.CA1851.severity = error 139 | 140 | # Unnecessary call to Dictionary.ContainsKey(key) 141 | dotnet_diagnostic.CA1853.severity = error 142 | 143 | # Prefer the IDictionary.TryGetValue(TKey, out TValue) method 144 | dotnet_diagnostic.CA1854.severity = error 145 | 146 | # Use Span.Clear() instead of Span.Fill() 147 | dotnet_diagnostic.CA1855.severity = error 148 | 149 | # Incorrect usage of ConstantExpected attribute 150 | dotnet_diagnostic.CA1856.severity = error 151 | 152 | # The parameter expects a constant for optimal performance 153 | dotnet_diagnostic.CA1857.severity = error 154 | 155 | # Use StartsWith instead of IndexOf 156 | dotnet_diagnostic.CA1858.severity = error 157 | 158 | # Avoid using Enumerable.Any() extension method 159 | dotnet_diagnostic.CA1860.severity = error 160 | 161 | # Avoid constant arrays as arguments 162 | dotnet_diagnostic.CA1861.severity = error 163 | 164 | # Use the StringComparison method overloads to perform case-insensitive string comparisons 165 | dotnet_diagnostic.CA1862.severity = error 166 | 167 | # Prefer the IDictionary.TryAdd(TKey, TValue) method 168 | dotnet_diagnostic.CA1864.severity = error 169 | 170 | # Use string.Method(char) instead of string.Method(string) for string with single char 171 | dotnet_diagnostic.CA1865.severity = error 172 | dotnet_diagnostic.CA1866.severity = error 173 | dotnet_diagnostic.CA1867.severity = error 174 | 175 | # Unnecessary call to 'Contains' for sets 176 | dotnet_diagnostic.CA1868.severity = error 177 | 178 | # Cache and reuse 'JsonSerializerOptions' instances 179 | dotnet_diagnostic.CA1869.severity = error 180 | 181 | # Use a cached 'SearchValues' instance 182 | dotnet_diagnostic.CA1870.severity = error 183 | 184 | # Microsoft .NET properties 185 | trim_trailing_whitespace = true 186 | csharp_preferred_modifier_order = public, private, protected, internal, new, static, abstract, virtual, sealed, readonly, override, extern, unsafe, volatile, async:suggestion 187 | resharper_namespace_body = file_scoped 188 | dotnet_naming_rule.private_constants_rule.severity = warning 189 | dotnet_naming_rule.private_constants_rule.style = lower_camel_case_style 190 | dotnet_naming_rule.private_constants_rule.symbols = private_constants_symbols 191 | dotnet_naming_rule.private_instance_fields_rule.severity = warning 192 | dotnet_naming_rule.private_instance_fields_rule.style = lower_camel_case_style 193 | dotnet_naming_rule.private_instance_fields_rule.symbols = private_instance_fields_symbols 194 | dotnet_naming_rule.private_static_fields_rule.severity = warning 195 | dotnet_naming_rule.private_static_fields_rule.style = lower_camel_case_style 196 | dotnet_naming_rule.private_static_fields_rule.symbols = private_static_fields_symbols 197 | dotnet_naming_rule.private_static_readonly_rule.severity = warning 198 | dotnet_naming_rule.private_static_readonly_rule.style = lower_camel_case_style 199 | dotnet_naming_rule.private_static_readonly_rule.symbols = private_static_readonly_symbols 200 | dotnet_naming_style.lower_camel_case_style.capitalization = camel_case 201 | dotnet_naming_style.upper_camel_case_style.capitalization = pascal_case 202 | dotnet_naming_symbols.private_constants_symbols.applicable_accessibilities = private 203 | dotnet_naming_symbols.private_constants_symbols.applicable_kinds = field 204 | dotnet_naming_symbols.private_constants_symbols.required_modifiers = const 205 | dotnet_naming_symbols.private_instance_fields_symbols.applicable_accessibilities = private 206 | dotnet_naming_symbols.private_instance_fields_symbols.applicable_kinds = field 207 | dotnet_naming_symbols.private_static_fields_symbols.applicable_accessibilities = private 208 | dotnet_naming_symbols.private_static_fields_symbols.applicable_kinds = field 209 | dotnet_naming_symbols.private_static_fields_symbols.required_modifiers = static 210 | dotnet_naming_symbols.private_static_readonly_symbols.applicable_accessibilities = private 211 | dotnet_naming_symbols.private_static_readonly_symbols.applicable_kinds = field 212 | dotnet_naming_symbols.private_static_readonly_symbols.required_modifiers = static, readonly 213 | dotnet_style_parentheses_in_arithmetic_binary_operators = never_if_unnecessary:none 214 | dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:none 215 | dotnet_style_parentheses_in_relational_binary_operators = never_if_unnecessary:none 216 | 217 | # ReSharper properties 218 | resharper_object_creation_when_type_not_evident = target_typed 219 | 220 | # ReSharper inspection severities 221 | resharper_arrange_object_creation_when_type_evident_highlighting = error 222 | resharper_arrange_object_creation_when_type_not_evident_highlighting = error 223 | resharper_arrange_redundant_parentheses_highlighting = error 224 | resharper_arrange_static_member_qualifier_highlighting = error 225 | resharper_arrange_this_qualifier_highlighting = error 226 | resharper_arrange_type_member_modifiers_highlighting = none 227 | resharper_built_in_type_reference_style_for_member_access_highlighting = hint 228 | resharper_built_in_type_reference_style_highlighting = hint 229 | resharper_check_namespace_highlighting = none 230 | resharper_convert_to_using_declaration_highlighting = error 231 | resharper_css_not_resolved_highlighting = warning 232 | resharper_field_can_be_made_read_only_local_highlighting = none 233 | resharper_merge_into_logical_pattern_highlighting = warning 234 | resharper_merge_into_pattern_highlighting = error 235 | resharper_method_has_async_overload_highlighting = warning 236 | # because stop rider giving errors before source generators have run 237 | resharper_partial_type_with_single_part_highlighting = warning 238 | resharper_redundant_base_qualifier_highlighting = warning 239 | resharper_redundant_cast_highlighting = error 240 | resharper_redundant_empty_object_creation_argument_list_highlighting = error 241 | resharper_redundant_empty_object_or_collection_initializer_highlighting = error 242 | resharper_redundant_name_qualifier_highlighting = error 243 | resharper_redundant_suppress_nullable_warning_expression_highlighting = error 244 | resharper_redundant_using_directive_highlighting = error 245 | resharper_redundant_verbatim_string_prefix_highlighting = error 246 | resharper_redundant_lambda_signature_parentheses_highlighting = error 247 | resharper_replace_substring_with_range_indexer_highlighting = warning 248 | resharper_suggest_var_or_type_built_in_types_highlighting = error 249 | resharper_suggest_var_or_type_elsewhere_highlighting = error 250 | resharper_suggest_var_or_type_simple_types_highlighting = error 251 | resharper_unnecessary_whitespace_highlighting = error 252 | resharper_use_await_using_highlighting = warning 253 | resharper_use_deconstruction_highlighting = warning 254 | 255 | # Sort using and Import directives with System.* appearing first 256 | dotnet_sort_system_directives_first = true 257 | 258 | # Avoid "this." and "Me." if not necessary 259 | dotnet_style_qualification_for_field = false:error 260 | dotnet_style_qualification_for_property = false:error 261 | dotnet_style_qualification_for_method = false:error 262 | dotnet_style_qualification_for_event = false:error 263 | 264 | # Use language keywords instead of framework type names for type references 265 | dotnet_style_predefined_type_for_locals_parameters_members = true:error 266 | dotnet_style_predefined_type_for_member_access = true:error 267 | 268 | # Suggest more modern language features when available 269 | dotnet_style_object_initializer = true:error 270 | dotnet_style_collection_initializer = true:error 271 | dotnet_style_coalesce_expression = false:error 272 | dotnet_style_null_propagation = true:error 273 | dotnet_style_explicit_tuple_names = true:error 274 | 275 | # Prefer "var" everywhere 276 | csharp_style_var_for_built_in_types = true:error 277 | csharp_style_var_when_type_is_apparent = true:error 278 | csharp_style_var_elsewhere = true:error 279 | 280 | # Prefer method-like constructs to have a block body 281 | csharp_style_expression_bodied_methods = true:error 282 | csharp_style_expression_bodied_local_functions = true:error 283 | csharp_style_expression_bodied_constructors = true:error 284 | csharp_style_expression_bodied_operators = true:error 285 | resharper_place_expr_method_on_single_line = false 286 | 287 | # Prefer property-like constructs to have an expression-body 288 | csharp_style_expression_bodied_properties = true:error 289 | csharp_style_expression_bodied_indexers = true:error 290 | csharp_style_expression_bodied_accessors = true:error 291 | 292 | # Suggest more modern language features when available 293 | csharp_style_pattern_matching_over_is_with_cast_check = true:error 294 | csharp_style_pattern_matching_over_as_with_null_check = true:error 295 | csharp_style_inlined_variable_declaration = true:suggestion 296 | csharp_style_throw_expression = true:suggestion 297 | csharp_style_conditional_delegate_call = true:suggestion 298 | 299 | # Newline settings 300 | #csharp_new_line_before_open_brace = all:error 301 | resharper_max_array_initializer_elements_on_line = 1 302 | csharp_new_line_before_else = true 303 | csharp_new_line_before_catch = true 304 | csharp_new_line_before_finally = true 305 | csharp_new_line_before_members_in_object_initializers = true 306 | csharp_new_line_before_members_in_anonymous_types = true 307 | resharper_wrap_before_first_type_parameter_constraint = true 308 | resharper_wrap_extends_list_style = chop_always 309 | resharper_wrap_after_dot_in_method_calls = false 310 | resharper_wrap_before_binary_pattern_op = false 311 | resharper_wrap_object_and_collection_initializer_style = chop_always 312 | resharper_place_simple_initializer_on_single_line = false 313 | 314 | # space 315 | resharper_space_around_lambda_arrow = true 316 | 317 | dotnet_style_require_accessibility_modifiers = never:error 318 | resharper_place_type_constraints_on_same_line = false 319 | resharper_blank_lines_inside_namespace = 0 320 | resharper_blank_lines_after_file_scoped_namespace_directive = 1 321 | resharper_blank_lines_inside_type = 0 322 | 323 | insert_final_newline = false 324 | resharper_place_attribute_on_same_line = false 325 | resharper_space_around_lambda_arrow = true 326 | resharper_place_constructor_initializer_on_same_line = false 327 | 328 | #braces https://www.jetbrains.com/help/resharper/EditorConfig_CSHARP_CSharpCodeStylePageImplSchema.html#Braces 329 | resharper_braces_for_ifelse = required 330 | resharper_braces_for_foreach = required 331 | resharper_braces_for_while = required 332 | resharper_braces_for_dowhile = required 333 | resharper_braces_for_lock = required 334 | resharper_braces_for_fixed = required 335 | resharper_braces_for_for = required 336 | 337 | resharper_return_value_of_pure_method_is_not_used_highlighting = error 338 | 339 | resharper_all_underscore_local_parameter_name_highlighting = none 340 | 341 | resharper_misleading_body_like_statement_highlighting = error 342 | 343 | resharper_redundant_record_class_keyword_highlighting = error 344 | 345 | resharper_redundant_extends_list_entry_highlighting = error 346 | 347 | # Xml files 348 | [*.{xml,config,nuspec,resx,vsixmanifest,csproj,targets,props,fsproj}] 349 | indent_size = 2 350 | # https://www.jetbrains.com/help/resharper/EditorConfig_XML_XmlCodeStylePageSchema.html#resharper_xml_blank_line_after_pi 351 | resharper_blank_line_after_pi = false 352 | resharper_space_before_self_closing = true 353 | ij_xml_space_inside_empty_tag = true 354 | 355 | [*.json] 356 | indent_size = 2 357 | 358 | # Verify settings 359 | [*.{received,verified}.{txt,xml,json,md,sql,csv,html,htm,md}] 360 | charset = utf-8-bom 361 | end_of_line = lf 362 | indent_size = unset 363 | indent_style = unset 364 | insert_final_newline = false 365 | tab_width = unset 366 | trim_trailing_whitespace = false -------------------------------------------------------------------------------- /src/.gitattributes: -------------------------------------------------------------------------------- 1 | * text 2 | *.png binary 3 | *.snk binary 4 | 5 | 6 | *.verified.txt text eol=lf working-tree-encoding=UTF-8 7 | *.verified.xml text eol=lf working-tree-encoding=UTF-8 8 | *.verified.json text eol=lf working-tree-encoding=UTF-8 9 | 10 | .editorconfig text eol=lf working-tree-encoding=UTF-8 11 | Shared.sln.DotSettings text eol=lf working-tree-encoding=UTF-8 -------------------------------------------------------------------------------- /src/Directory.Build.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CS1591;NU1608;NU1109 5 | 4.3.0 6 | 1.0.0 7 | preview 8 | WaffleGenerator, Bogus 9 | enable 10 | enable 11 | true 12 | true 13 | true 14 | true 15 | 16 | -------------------------------------------------------------------------------- /src/Directory.Packages.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | true 4 | true 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/Shared.sln.DotSettings: -------------------------------------------------------------------------------- 1 |  2 | False 3 | Quiet 4 | True 5 | True 6 | True 7 | DO_NOT_SHOW 8 | ERROR 9 | ERROR 10 | ERROR 11 | WARNING 12 | ERROR 13 | ERROR 14 | ERROR 15 | ERROR 16 | ERROR 17 | ERROR 18 | ERROR 19 | ERROR 20 | ERROR 21 | ERROR 22 | ERROR 23 | ERROR 24 | ERROR 25 | ERROR 26 | ERROR 27 | ERROR 28 | ERROR 29 | ERROR 30 | ERROR 31 | ERROR 32 | ERROR 33 | ERROR 34 | ERROR 35 | ERROR 36 | ERROR 37 | ERROR 38 | ERROR 39 | ERROR 40 | ERROR 41 | ERROR 42 | ERROR 43 | DO_NOT_SHOW 44 | DO_NOT_SHOW 45 | ERROR 46 | ERROR 47 | ERROR 48 | ERROR 49 | ERROR 50 | ERROR 51 | ERROR 52 | ERROR 53 | ERROR 54 | ERROR 55 | ERROR 56 | ERROR 57 | C90+,E79+,S14+ 58 | ERROR 59 | ERROR 60 | ERROR 61 | ERROR 62 | ERROR 63 | ERROR 64 | ERROR 65 | ERROR 66 | ERROR 67 | ERROR 68 | ERROR 69 | ERROR 70 | ERROR 71 | ERROR 72 | ERROR 73 | ERROR 74 | ERROR 75 | ERROR 76 | ERROR 77 | ERROR 78 | ERROR 79 | ERROR 80 | ERROR 81 | ERROR 82 | ERROR 83 | ERROR 84 | ERROR 85 | ERROR 86 | ERROR 87 | ERROR 88 | ERROR 89 | ERROR 90 | ERROR 91 | ERROR 92 | ERROR 93 | ERROR 94 | ERROR 95 | ERROR 96 | ERROR 97 | ERROR 98 | ERROR 99 | ERROR 100 | ERROR 101 | ERROR 102 | ERROR 103 | ERROR 104 | ERROR 105 | ERROR 106 | ERROR 107 | ERROR 108 | ERROR 109 | ERROR 110 | ERROR 111 | ERROR 112 | ERROR 113 | ERROR 114 | ERROR 115 | ERROR 116 | ERROR 117 | ERROR 118 | ERROR 119 | ERROR 120 | ERROR 121 | ERROR 122 | DO_NOT_SHOW 123 | *.received.* 124 | *.verified.* 125 | ERROR 126 | ERROR 127 | DO_NOT_SHOW 128 | ECMAScript 2016 129 | <?xml version="1.0" encoding="utf-16"?><Profile name="c# Cleanup"><AspOptimizeRegisterDirectives>True</AspOptimizeRegisterDirectives><CSCodeStyleAttributes ArrangeVarStyle="True" ArrangeTypeAccessModifier="True" ArrangeTypeMemberAccessModifier="True" SortModifiers="True" RemoveRedundantParentheses="True" AddMissingParentheses="True" ArrangeBraces="True" ArrangeAttributes="True" ArrangeCodeBodyStyle="True" ArrangeTrailingCommas="True" ArrangeObjectCreation="True" ArrangeDefaultValue="True" ArrangeNamespaces="True" /><CssAlphabetizeProperties>True</CssAlphabetizeProperties><JSStringLiteralQuotesDescriptor>True</JSStringLiteralQuotesDescriptor><CorrectVariableKindsDescriptor>True</CorrectVariableKindsDescriptor><VariablesToInnerScopesDescriptor>True</VariablesToInnerScopesDescriptor><StringToTemplatesDescriptor>True</StringToTemplatesDescriptor><JsInsertSemicolon>True</JsInsertSemicolon><RemoveRedundantQualifiersTs>True</RemoveRedundantQualifiersTs><OptimizeImportsTs>True</OptimizeImportsTs><OptimizeReferenceCommentsTs>True</OptimizeReferenceCommentsTs><PublicModifierStyleTs>True</PublicModifierStyleTs><ExplicitAnyTs>True</ExplicitAnyTs><TypeAnnotationStyleTs>True</TypeAnnotationStyleTs><RelativePathStyleTs>True</RelativePathStyleTs><AsInsteadOfCastTs>True</AsInsteadOfCastTs><RemoveCodeRedundancies>True</RemoveCodeRedundancies><CSUseAutoProperty>True</CSUseAutoProperty><CSMakeFieldReadonly>True</CSMakeFieldReadonly><CSMakeAutoPropertyGetOnly>True</CSMakeAutoPropertyGetOnly><CSArrangeQualifiers>True</CSArrangeQualifiers><CSFixBuiltinTypeReferences>True</CSFixBuiltinTypeReferences><CssReformatCode>True</CssReformatCode><JsReformatCode>True</JsReformatCode><JsFormatDocComments>True</JsFormatDocComments><CSOptimizeUsings><OptimizeUsings>True</OptimizeUsings></CSOptimizeUsings><CSShortenReferences>True</CSShortenReferences><CSReformatCode>True</CSReformatCode><CSharpFormatDocComments>True</CSharpFormatDocComments><FormatAttributeQuoteDescriptor>True</FormatAttributeQuoteDescriptor><HtmlReformatCode>True</HtmlReformatCode><XAMLCollapseEmptyTags>False</XAMLCollapseEmptyTags><IDEA_SETTINGS>&lt;profile version="1.0"&gt; 130 | &lt;option name="myName" value="c# Cleanup" /&gt; 131 | &lt;/profile&gt;</IDEA_SETTINGS><RIDER_SETTINGS>&lt;profile&gt; 132 | &lt;Language id="EditorConfig"&gt; 133 | &lt;Reformat&gt;false&lt;/Reformat&gt; 134 | &lt;/Language&gt; 135 | &lt;Language id="HTML"&gt; 136 | &lt;OptimizeImports&gt;false&lt;/OptimizeImports&gt; 137 | &lt;Reformat&gt;false&lt;/Reformat&gt; 138 | &lt;Rearrange&gt;false&lt;/Rearrange&gt; 139 | &lt;/Language&gt; 140 | &lt;Language id="JSON"&gt; 141 | &lt;Reformat&gt;false&lt;/Reformat&gt; 142 | &lt;/Language&gt; 143 | &lt;Language id="RELAX-NG"&gt; 144 | &lt;Reformat&gt;false&lt;/Reformat&gt; 145 | &lt;/Language&gt; 146 | &lt;Language id="XML"&gt; 147 | &lt;OptimizeImports&gt;false&lt;/OptimizeImports&gt; 148 | &lt;Reformat&gt;false&lt;/Reformat&gt; 149 | &lt;Rearrange&gt;false&lt;/Rearrange&gt; 150 | &lt;/Language&gt; 151 | &lt;/profile&gt;</RIDER_SETTINGS></Profile> 152 | ExpressionBody 153 | ExpressionBody 154 | ExpressionBody 155 | False 156 | NEVER 157 | NEVER 158 | False 159 | False 160 | False 161 | True 162 | False 163 | CHOP_ALWAYS 164 | False 165 | False 166 | RemoveIndent 167 | RemoveIndent 168 | False 169 | True 170 | True 171 | True 172 | True 173 | True 174 | ERROR 175 | DoNothing 176 | -------------------------------------------------------------------------------- /src/Tests/FakerUsage.cs: -------------------------------------------------------------------------------- 1 | using Bogus; 2 | 3 | // ReSharper disable RedundantArgumentDefaultValue 4 | // ReSharper disable UnusedParameter.Local 5 | 6 | [TestFixture] 7 | public class FakerUsage 8 | { 9 | [Test] 10 | public void Sample() 11 | { 12 | #region BogusUsage 13 | 14 | var faker = new Faker() 15 | .RuleFor( 16 | property: u => u.Title, 17 | setter: (f, u) => f.WaffleTitle()) 18 | .RuleFor( 19 | property: u => u.Property1, 20 | setter: (f, u) => f.WaffleHtml()) 21 | .RuleFor( 22 | property: u => u.Property2, 23 | setter: (f, u) => f.WaffleHtml( 24 | paragraphs: 4, 25 | includeHeading: true)) 26 | .RuleFor( 27 | property: u => u.Property3, 28 | setter: (f, u) => f.WaffleText()) 29 | .RuleFor( 30 | property: u => u.Property4, 31 | setter: (f, u) => f.WaffleText( 32 | paragraphs: 4, 33 | includeHeading: false)); 34 | 35 | var target = faker.Generate(); 36 | Debug.WriteLine(target.Title); 37 | Debug.WriteLine(target.Property1); 38 | Debug.WriteLine(target.Property2); 39 | Debug.WriteLine(target.Property3); 40 | Debug.WriteLine(target.Property4); 41 | 42 | #endregion 43 | } 44 | 45 | [Test] 46 | public void Run() 47 | { 48 | var faker = new Faker() 49 | .RuleFor(u => u.Title, (f, u) => f.WaffleTitle()) 50 | .RuleFor(u => u.Property1, (f, u) => f.WaffleHtml()) 51 | .RuleFor(u => u.Property2, (f, u) => f.WaffleText()); 52 | 53 | var target = faker.Generate(); 54 | Trace.WriteLine(target.Title); 55 | Trace.WriteLine(target.Property1); 56 | Trace.WriteLine(target.Property2); 57 | NotNull(target.Title); 58 | IsNotEmpty(target.Title); 59 | NotNull(target.Property1); 60 | IsNotEmpty(target.Property1); 61 | NotNull(target.Property2); 62 | IsNotEmpty(target.Property2); 63 | } 64 | 65 | public class Target 66 | { 67 | public string? Property1 { get; set; } 68 | public string? Property2 { get; set; } 69 | public string? Property3 { get; set; } 70 | public string? Property4 { get; set; } 71 | public string? Title { get; set; } 72 | } 73 | } -------------------------------------------------------------------------------- /src/Tests/Tests.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | net9.0 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/Tests/WaffleEngineTests.HtmlWaffleMultiple.verified.txt: -------------------------------------------------------------------------------- 1 | 

The Aesthetic Of Economico-Social Disposition

2 |
'In this regard, the underlying surrealism of the take home message should not divert attention from The Aesthetic Of Economico-Social Disposition'
3 | Humphrey Yokomoto in The Journal of the Total Entative Item (20114U)
4 |

causation of milieu.

5 |

6 | On any rational basis, a particular factor, such as the functional baseline, the analogy of object, the strategic requirements or the principal overriding programming provides an interesting insight into the complementary functional derivation. This trend may dissipate due to the mensurable proficiency. 7 |

8 |

9 |

The Potential Economic Competence.

10 | On the other hand, the integrated dominant specification and the resources needed to support it are mandatory. It can be forcibly emphasized that efforts are already underway in the development of the inductive extrinsic rationalization. Albeit, the target population for an implementation strategy for fully interactive phylogenetic value focuses our attention on what is beginning to be termed the "set of constraints". 11 |

12 |

13 | To coin a phrase, the operations scenario in its relation to the separate roles and significances of the ad-hoc politico-strategical time-phase identifies the probability of project success and the strategic overriding competence. We need to be able to rationalize The major theme of the optical reproducible reconstruction. The advent of the set of constraints rigorously posits the work being done at the 'coal-face'. 14 |

15 |

16 |

The Dynamic Effective Partnership.

17 | Focussing on the agreed facts, we can say that the dangers inherent in the essential conjectural determinism focuses our attention on the greater objective inductive attitude of the quasi-effectual empirical correspondence. 18 |

19 |

20 |

The Corporate Procedure.

21 | firstly, subdivisions of what amounts to the consultative consistent baseline significantly alters the importance of the work being done at the 'coal-face'. 22 |

23 |

24 | The religious analogy is taken to be a alternative immediate contingency. Presumably, the core business is reciprocated by the applicability and value of the access to corporate systems. 25 |

26 |

27 | To recapitulate, the feasibility of the directive subjective morality relates stringently to any impact on overall performance. Conversely, the feasibility of the inductive resonant monologism could go the extra mile for any commonality between the integrated auxiliary antithesis and the crucial test option. 28 |

29 |

30 | The the criterion of non-viable expressive resources provides us with a win-win situation. Especially if one considers that a concept of what we have come to call the strategic goals underlines the essential paradigm of the proactive sanctioned item. This may explain why the dominant factor clearly supplements the strategic framework. This should be considered in the light of the necessity for budgetary control. 31 |

32 |

33 | Similarly, the question of a preponderance of the compatible transitional disposition generally maximizes the truly global universal algorithm in its relationship with the multilingual cynicism. 34 |

35 |

36 | Note that:- 37 | 38 | 1. The constraints of the knock-on effect stresses the importance of other systems and the necessity for what is beginning to be termed the "critical privileged impulse".. 39 | 2. A psychic operation of what has been termed the definitive resources is reciprocated by the overall game-plan.. 40 | 3. A primary interrelationship between system and/or subsystem technologies exceeds the functionality of the feedback process. One must therefore dedicate resources to the quality driven unprejudiced matrix immediately.. 41 | 4. The adequate functionality of the strategic plan must be considered proactively, rather than reactively, in the light of the resource planning. 42 | 5. The principle of the ongoing specific programming relates presumably to any adequate resource level. Conversely, any fundamental dichotomies of the calculus of consequence probably delineates the necessity for budgetary control. This trend may dissipate due to the comprehensive hierarchical theme. 43 | 6. A persistent instability in the principle of the spatio-temporal reciprocity rivals, in terms of resource implications, any discrete or objective configuration mode. 44 | 45 | Any fundamental dichotomies of the benchmark inherently sustains the maintenance of current standards and the politico-strategical integration. This may rigorously flounder on the non-viable hypothetical dimension. 46 |

47 |

48 | An initial appraisal makes it evident that the principle of the the bottom line generally reflects the privileged directive resources and the vibrant pure familiarisation. This should be considered in the light of the critical subsystem mobility. 49 |

50 | -------------------------------------------------------------------------------- /src/Tests/WaffleEngineTests.HtmlWaffleMultipleWithHeadAndBody.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | The Aesthetic Of Economico-Social Disposition 4 | 5 | 6 |

The Aesthetic Of Economico-Social Disposition

7 |
'In this regard, the underlying surrealism of the take home message should not divert attention from The Aesthetic Of Economico-Social Disposition'
8 | Humphrey Yokomoto in The Journal of the Total Entative Item (20114U)
9 |

causation of milieu.

10 |

11 | On any rational basis, a particular factor, such as the functional baseline, the analogy of object, the strategic requirements or the principal overriding programming provides an interesting insight into the complementary functional derivation. This trend may dissipate due to the mensurable proficiency. 12 |

13 |

14 |

The Potential Economic Competence.

15 | On the other hand, the integrated dominant specification and the resources needed to support it are mandatory. It can be forcibly emphasized that efforts are already underway in the development of the inductive extrinsic rationalization. Albeit, the target population for an implementation strategy for fully interactive phylogenetic value focuses our attention on what is beginning to be termed the "set of constraints". 16 |

17 |

18 | To coin a phrase, the operations scenario in its relation to the separate roles and significances of the ad-hoc politico-strategical time-phase identifies the probability of project success and the strategic overriding competence. We need to be able to rationalize The major theme of the optical reproducible reconstruction. The advent of the set of constraints rigorously posits the work being done at the 'coal-face'. 19 |

20 |

21 |

The Dynamic Effective Partnership.

22 | Focussing on the agreed facts, we can say that the dangers inherent in the essential conjectural determinism focuses our attention on the greater objective inductive attitude of the quasi-effectual empirical correspondence. 23 |

24 |

25 |

The Corporate Procedure.

26 | firstly, subdivisions of what amounts to the consultative consistent baseline significantly alters the importance of the work being done at the 'coal-face'. 27 |

28 |

29 | The religious analogy is taken to be a alternative immediate contingency. Presumably, the core business is reciprocated by the applicability and value of the access to corporate systems. 30 |

31 |

32 | To recapitulate, the feasibility of the directive subjective morality relates stringently to any impact on overall performance. Conversely, the feasibility of the inductive resonant monologism could go the extra mile for any commonality between the integrated auxiliary antithesis and the crucial test option. 33 |

34 |

35 | The the criterion of non-viable expressive resources provides us with a win-win situation. Especially if one considers that a concept of what we have come to call the strategic goals underlines the essential paradigm of the proactive sanctioned item. This may explain why the dominant factor clearly supplements the strategic framework. This should be considered in the light of the necessity for budgetary control. 36 |

37 |

38 | Similarly, the question of a preponderance of the compatible transitional disposition generally maximizes the truly global universal algorithm in its relationship with the multilingual cynicism. 39 |

40 |

41 | Note that:- 42 | 43 | 1. The constraints of the knock-on effect stresses the importance of other systems and the necessity for what is beginning to be termed the "critical privileged impulse".. 44 | 2. A psychic operation of what has been termed the definitive resources is reciprocated by the overall game-plan.. 45 | 3. A primary interrelationship between system and/or subsystem technologies exceeds the functionality of the feedback process. One must therefore dedicate resources to the quality driven unprejudiced matrix immediately.. 46 | 4. The adequate functionality of the strategic plan must be considered proactively, rather than reactively, in the light of the resource planning. 47 | 5. The principle of the ongoing specific programming relates presumably to any adequate resource level. Conversely, any fundamental dichotomies of the calculus of consequence probably delineates the necessity for budgetary control. This trend may dissipate due to the comprehensive hierarchical theme. 48 | 6. A persistent instability in the principle of the spatio-temporal reciprocity rivals, in terms of resource implications, any discrete or objective configuration mode. 49 | 50 | Any fundamental dichotomies of the benchmark inherently sustains the maintenance of current standards and the politico-strategical integration. This may rigorously flounder on the non-viable hypothetical dimension. 51 |

52 |

53 | An initial appraisal makes it evident that the principle of the the bottom line generally reflects the privileged directive resources and the vibrant pure familiarisation. This should be considered in the light of the critical subsystem mobility. 54 |

55 | 56 | -------------------------------------------------------------------------------- /src/Tests/WaffleEngineTests.HtmlWaffleNoHeading.verified.txt: -------------------------------------------------------------------------------- 1 | 

The Aesthetic Of Economico-Social Disposition

2 |
'In this regard, the underlying surrealism of the take home message should not divert attention from The Aesthetic Of Economico-Social Disposition'
3 | Humphrey Yokomoto in The Journal of the Total Entative Item (20114U)
4 |

causation of milieu.

5 |

6 | On any rational basis, a particular factor, such as the functional baseline, the analogy of object, the strategic requirements or the principal overriding programming provides an interesting insight into the complementary functional derivation. This trend may dissipate due to the mensurable proficiency. 7 |

8 | -------------------------------------------------------------------------------- /src/Tests/WaffleEngineTests.HtmlWaffleNoHeadingWithHeadAndBody.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | The Aesthetic Of Economico-Social Disposition 4 | 5 | 6 |

The Aesthetic Of Economico-Social Disposition

7 |
'In this regard, the underlying surrealism of the take home message should not divert attention from The Aesthetic Of Economico-Social Disposition'
8 | Humphrey Yokomoto in The Journal of the Total Entative Item (20114U)
9 |

causation of milieu.

10 |

11 | On any rational basis, a particular factor, such as the functional baseline, the analogy of object, the strategic requirements or the principal overriding programming provides an interesting insight into the complementary functional derivation. This trend may dissipate due to the mensurable proficiency. 12 |

13 | 14 | -------------------------------------------------------------------------------- /src/Tests/WaffleEngineTests.HtmlWaffleSingle.verified.txt: -------------------------------------------------------------------------------- 1 | 

The Aesthetic Of Economico-Social Disposition

2 |
'In this regard, the underlying surrealism of the take home message should not divert attention from The Aesthetic Of Economico-Social Disposition'
3 | Humphrey Yokomoto in The Journal of the Total Entative Item (20114U)
4 |

causation of milieu.

5 |

6 | On any rational basis, a particular factor, such as the functional baseline, the analogy of object, the strategic requirements or the principal overriding programming provides an interesting insight into the complementary functional derivation. This trend may dissipate due to the mensurable proficiency. 7 |

8 | -------------------------------------------------------------------------------- /src/Tests/WaffleEngineTests.HtmlWaffleSingleWithHeadAndBody.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | The Aesthetic Of Economico-Social Disposition 4 | 5 | 6 |

The Aesthetic Of Economico-Social Disposition

7 |
'In this regard, the underlying surrealism of the take home message should not divert attention from The Aesthetic Of Economico-Social Disposition'
8 | Humphrey Yokomoto in The Journal of the Total Entative Item (20114U)
9 |

causation of milieu.

10 |

11 | On any rational basis, a particular factor, such as the functional baseline, the analogy of object, the strategic requirements or the principal overriding programming provides an interesting insight into the complementary functional derivation. This trend may dissipate due to the mensurable proficiency. 12 |

13 | 14 | -------------------------------------------------------------------------------- /src/Tests/WaffleEngineTests.MarkdownWaffleMultiple.verified.md: -------------------------------------------------------------------------------- 1 | # The Aesthetic Of Economico-Social Disposition 2 | 3 | > In this regard, the underlying surrealism of the take home message should not divert attention from The Aesthetic Of Economico-Social Disposition 4 | 5 | * Humphrey Yokomoto in The Journal of the Total Entative Item (20114U) 6 | 7 | ## causation of milieu. 8 | 9 | On any rational basis, a particular factor, such as the functional baseline, the analogy of object, the strategic requirements or the principal overriding programming provides an interesting insight into the complementary functional derivation. This trend may dissipate due to the mensurable proficiency. 10 | 11 | ## The Potential Economic Competence. 12 | 13 | On the other hand, the integrated dominant specification and the resources needed to support it are mandatory. It can be forcibly emphasized that efforts are already underway in the development of the inductive extrinsic rationalization. Albeit, the target population for an implementation strategy for fully interactive phylogenetic value focuses our attention on what is beginning to be termed the "set of constraints". 14 | 15 | To coin a phrase, the operations scenario in its relation to the separate roles and significances of the ad-hoc politico-strategical time-phase identifies the probability of project success and the strategic overriding competence. We need to be able to rationalize The major theme of the optical reproducible reconstruction. The advent of the set of constraints rigorously posits the work being done at the 'coal-face'. 16 | 17 | ## The Dynamic Effective Partnership. 18 | 19 | Focussing on the agreed facts, we can say that the dangers inherent in the essential conjectural determinism focuses our attention on the greater objective inductive attitude of the quasi-effectual empirical correspondence. 20 | 21 | ## The Corporate Procedure. 22 | 23 | firstly, subdivisions of what amounts to the consultative consistent baseline significantly alters the importance of the work being done at the 'coal-face'. 24 | 25 | The religious analogy is taken to be a alternative immediate contingency. Presumably, the core business is reciprocated by the applicability and value of the access to corporate systems. 26 | 27 | To recapitulate, the feasibility of the directive subjective morality relates stringently to any impact on overall performance. Conversely, the feasibility of the inductive resonant monologism could go the extra mile for any commonality between the integrated auxiliary antithesis and the crucial test option. 28 | 29 | The the criterion of non-viable expressive resources provides us with a win-win situation. Especially if one considers that a concept of what we have come to call the strategic goals underlines the essential paradigm of the proactive sanctioned item. This may explain why the dominant factor clearly supplements the strategic framework. This should be considered in the light of the necessity for budgetary control. 30 | 31 | Similarly, the question of a preponderance of the compatible transitional disposition generally maximizes the truly global universal algorithm in its relationship with the multilingual cynicism. 32 | 33 | Note that:- 34 | 35 | 1. The constraints of the knock-on effect stresses the importance of other systems and the necessity for what is beginning to be termed the "critical privileged impulse".. 36 | 2. A psychic operation of what has been termed the definitive resources is reciprocated by the overall game-plan.. 37 | 3. A primary interrelationship between system and/or subsystem technologies exceeds the functionality of the feedback process. One must therefore dedicate resources to the quality driven unprejudiced matrix immediately.. 38 | 4. The adequate functionality of the strategic plan must be considered proactively, rather than reactively, in the light of the resource planning. 39 | 5. The principle of the ongoing specific programming relates presumably to any adequate resource level. Conversely, any fundamental dichotomies of the calculus of consequence probably delineates the necessity for budgetary control. This trend may dissipate due to the comprehensive hierarchical theme. 40 | 6. A persistent instability in the principle of the spatio-temporal reciprocity rivals, in terms of resource implications, any discrete or objective configuration mode. 41 | 42 | Any fundamental dichotomies of the benchmark inherently sustains the maintenance of current standards and the politico-strategical integration. This may rigorously flounder on the non-viable hypothetical dimension. 43 | 44 | An initial appraisal makes it evident that the principle of the the bottom line generally reflects the privileged directive resources and the vibrant pure familiarisation. This should be considered in the light of the critical subsystem mobility. 45 | 46 | -------------------------------------------------------------------------------- /src/Tests/WaffleEngineTests.MarkdownWaffleNoHeading.verified.md: -------------------------------------------------------------------------------- 1 | Only in the case of the performance objectives can one state that an overall understanding of any ad-hoc implicit delivery shows an interesting ambivalence with the parallel entative delivery or the three-tier resonant teleology. 2 | 3 | -------------------------------------------------------------------------------- /src/Tests/WaffleEngineTests.MarkdownWaffleSingle.verified.md: -------------------------------------------------------------------------------- 1 | # The Aesthetic Of Economico-Social Disposition 2 | 3 | > In this regard, the underlying surrealism of the take home message should not divert attention from The Aesthetic Of Economico-Social Disposition 4 | 5 | * Humphrey Yokomoto in The Journal of the Total Entative Item (20114U) 6 | 7 | ## causation of milieu. 8 | 9 | On any rational basis, a particular factor, such as the functional baseline, the analogy of object, the strategic requirements or the principal overriding programming provides an interesting insight into the complementary functional derivation. This trend may dissipate due to the mensurable proficiency. 10 | 11 | -------------------------------------------------------------------------------- /src/Tests/WaffleEngineTests.TextWaffleMultiple.verified.txt: -------------------------------------------------------------------------------- 1 | The Aesthetic Of Economico-Social Disposition 2 | 3 | 'In this regard, the underlying surrealism of the take home message should not divert attention from The Aesthetic Of Economico-Social Disposition' 4 | 5 | - Humphrey Yokomoto in The Journal of the Total Entative Item (20114U) 6 | 7 | causation of milieu. 8 | 9 | On any rational basis, a particular factor, such as the functional baseline, the analogy of object, the strategic requirements or the principal overriding programming provides an interesting insight into the complementary functional derivation. This trend may dissipate due to the mensurable proficiency. 10 | 11 | The Potential Economic Competence. 12 | 13 | On the other hand, the integrated dominant specification and the resources needed to support it are mandatory. It can be forcibly emphasized that efforts are already underway in the development of the inductive extrinsic rationalization. Albeit, the target population for an implementation strategy for fully interactive phylogenetic value focuses our attention on what is beginning to be termed the "set of constraints". 14 | 15 | To coin a phrase, the operations scenario in its relation to the separate roles and significances of the ad-hoc politico-strategical time-phase identifies the probability of project success and the strategic overriding competence. We need to be able to rationalize The major theme of the optical reproducible reconstruction. The advent of the set of constraints rigorously posits the work being done at the 'coal-face'. 16 | 17 | The Dynamic Effective Partnership. 18 | 19 | Focussing on the agreed facts, we can say that the dangers inherent in the essential conjectural determinism focuses our attention on the greater objective inductive attitude of the quasi-effectual empirical correspondence. 20 | 21 | The Corporate Procedure. 22 | 23 | firstly, subdivisions of what amounts to the consultative consistent baseline significantly alters the importance of the work being done at the 'coal-face'. 24 | 25 | The religious analogy is taken to be a alternative immediate contingency. Presumably, the core business is reciprocated by the applicability and value of the access to corporate systems. 26 | 27 | To recapitulate, the feasibility of the directive subjective morality relates stringently to any impact on overall performance. Conversely, the feasibility of the inductive resonant monologism could go the extra mile for any commonality between the integrated auxiliary antithesis and the crucial test option. 28 | 29 | The the criterion of non-viable expressive resources provides us with a win-win situation. Especially if one considers that a concept of what we have come to call the strategic goals underlines the essential paradigm of the proactive sanctioned item. This may explain why the dominant factor clearly supplements the strategic framework. This should be considered in the light of the necessity for budgetary control. 30 | 31 | Similarly, the question of a preponderance of the compatible transitional disposition generally maximizes the truly global universal algorithm in its relationship with the multilingual cynicism. 32 | 33 | Note that:- 34 | 35 | 1. The constraints of the knock-on effect stresses the importance of other systems and the necessity for what is beginning to be termed the "critical privileged impulse".. 36 | 2. A psychic operation of what has been termed the definitive resources is reciprocated by the overall game-plan.. 37 | 3. A primary interrelationship between system and/or subsystem technologies exceeds the functionality of the feedback process. One must therefore dedicate resources to the quality driven unprejudiced matrix immediately.. 38 | 4. The adequate functionality of the strategic plan must be considered proactively, rather than reactively, in the light of the resource planning. 39 | 5. The principle of the ongoing specific programming relates presumably to any adequate resource level. Conversely, any fundamental dichotomies of the calculus of consequence probably delineates the necessity for budgetary control. This trend may dissipate due to the comprehensive hierarchical theme. 40 | 6. A persistent instability in the principle of the spatio-temporal reciprocity rivals, in terms of resource implications, any discrete or objective configuration mode. 41 | 42 | Any fundamental dichotomies of the benchmark inherently sustains the maintenance of current standards and the politico-strategical integration. This may rigorously flounder on the non-viable hypothetical dimension. 43 | 44 | An initial appraisal makes it evident that the principle of the the bottom line generally reflects the privileged directive resources and the vibrant pure familiarisation. This should be considered in the light of the critical subsystem mobility. 45 | -------------------------------------------------------------------------------- /src/Tests/WaffleEngineTests.TextWaffleNoHeading.verified.txt: -------------------------------------------------------------------------------- 1 | Only in the case of the performance objectives can one state that an overall understanding of any ad-hoc implicit delivery shows an interesting ambivalence with the parallel entative delivery or the three-tier resonant teleology. 2 | -------------------------------------------------------------------------------- /src/Tests/WaffleEngineTests.TextWaffleSingle.verified.txt: -------------------------------------------------------------------------------- 1 | The Aesthetic Of Economico-Social Disposition 2 | 3 | 'In this regard, the underlying surrealism of the take home message should not divert attention from The Aesthetic Of Economico-Social Disposition' 4 | 5 | - Humphrey Yokomoto in The Journal of the Total Entative Item (20114U) 6 | 7 | causation of milieu. 8 | 9 | On any rational basis, a particular factor, such as the functional baseline, the analogy of object, the strategic requirements or the principal overriding programming provides an interesting insight into the complementary functional derivation. This trend may dissipate due to the mensurable proficiency. 10 | -------------------------------------------------------------------------------- /src/Tests/WaffleEngineTests.Title.verified.txt: -------------------------------------------------------------------------------- 1 | The Aesthetic Of Economico-Social Disposition -------------------------------------------------------------------------------- /src/Tests/WaffleEngineTests.cs: -------------------------------------------------------------------------------- 1 | using WaffleGenerator; 2 | 3 | [TestFixture] 4 | public class WaffleEngineTests 5 | { 6 | [Test] 7 | public void TextWaffleSample() 8 | { 9 | #region textUsage 10 | 11 | var text = WaffleEngine.Text( 12 | paragraphs: 1, 13 | includeHeading: true); 14 | Debug.WriteLine(text); 15 | 16 | #endregion 17 | } 18 | 19 | [Test] 20 | public void MarkdownWaffleSample() 21 | { 22 | #region markdownUsage 23 | 24 | var markdown = WaffleEngine.Markdown( 25 | paragraphs: 1, 26 | includeHeading: true); 27 | Debug.WriteLine(markdown); 28 | 29 | #endregion 30 | } 31 | 32 | [Test] 33 | public void HtmlWaffleSample() 34 | { 35 | #region htmlUsage 36 | 37 | var text = WaffleEngine.Html( 38 | paragraphs: 2, 39 | includeHeading: true, 40 | includeHeadAndBody: true); 41 | Debug.WriteLine(text); 42 | 43 | #endregion 44 | } 45 | 46 | [Test] 47 | public Task TextWaffleSingle() 48 | { 49 | var random = new Random(0); 50 | var text = WaffleEngine.Text(random, 1, true); 51 | return Verify(text); 52 | } 53 | 54 | [Test] 55 | public void EndsWith() 56 | { 57 | True(new StringBuilder("a").EndsWith('a')); 58 | True(new StringBuilder("ba").EndsWith('a')); 59 | True(new StringBuilder("ba").EndsWith('b', 'a')); 60 | True(new StringBuilder("a ").EndsWith('a')); 61 | True(new StringBuilder("ba ").EndsWith('a')); 62 | True(new StringBuilder("ba ").EndsWith('b', 'a')); 63 | True(new StringBuilder("a ").EndsWith('a')); 64 | True(new StringBuilder("ba ").EndsWith('a')); 65 | True(new StringBuilder("ba ").EndsWith('b', 'a')); 66 | 67 | False(new StringBuilder("a").EndsWith('c')); 68 | False(new StringBuilder("ba").EndsWith('c')); 69 | False(new StringBuilder("ba").EndsWith('c', 'd')); 70 | False(new StringBuilder("a ").EndsWith('c')); 71 | False(new StringBuilder("ba ").EndsWith('c')); 72 | False(new StringBuilder("ba ").EndsWith('c', 'd')); 73 | False(new StringBuilder("a ").EndsWith('c')); 74 | False(new StringBuilder("ba ").EndsWith('c')); 75 | False(new StringBuilder("ba ").EndsWith('c', 'd')); 76 | False(new StringBuilder(" ").EndsWith('c')); 77 | False(new StringBuilder(" ").EndsWith('c')); 78 | False(new StringBuilder("").EndsWith('c')); 79 | False(new StringBuilder("").EndsWith('c')); 80 | } 81 | 82 | [Test] 83 | public void MultiTextShouldNotDuplicate() 84 | { 85 | var text1 = WaffleEngine.Text(1, true); 86 | var text2 = WaffleEngine.Text(1, true); 87 | AreNotEqual(text1, text2); 88 | } 89 | 90 | [Test] 91 | public void MultiHtmlShouldNotDuplicate() 92 | { 93 | var text1 = WaffleEngine.Html(1, true, true); 94 | var text2 = WaffleEngine.Html(1, true, true); 95 | AreNotEqual(text1, text2); 96 | } 97 | 98 | [Test] 99 | public void MultiMarkdownShouldNotDuplicate() 100 | { 101 | var text1 = WaffleEngine.Markdown(1, true); 102 | var text2 = WaffleEngine.Markdown(1, true); 103 | AreNotEqual(text1, text2); 104 | } 105 | 106 | [Test] 107 | public Task MarkdownWaffleSingle() 108 | { 109 | var random = new Random(0); 110 | var text = WaffleEngine.Markdown(random, 1, true); 111 | return Verify(text, "md"); 112 | } 113 | 114 | [Test] 115 | public Task Title() 116 | { 117 | var random = new Random(0); 118 | var title = WaffleEngine.Title(random); 119 | return Verify(title); 120 | } 121 | 122 | [Test] 123 | public Task HtmlWaffleSingle() 124 | { 125 | var random = new Random(0); 126 | var html = WaffleEngine.Html(random, 1, true, false); 127 | return Verify(html); 128 | } 129 | 130 | [Test] 131 | public Task HtmlWaffleSingleWithHeadAndBody() 132 | { 133 | var random = new Random(0); 134 | var html = WaffleEngine.Html(random, 1, true, true); 135 | return Verify(html); 136 | } 137 | 138 | [Test] 139 | public Task TextWaffleMultiple() 140 | { 141 | var random = new Random(0); 142 | var text = WaffleEngine.Text(random, 11, true); 143 | return Verify(text); 144 | } 145 | 146 | [Test] 147 | public Task MarkdownWaffleMultiple() 148 | { 149 | var random = new Random(0); 150 | var text = WaffleEngine.Markdown(random, 11, true); 151 | return Verify(text, "md"); 152 | } 153 | 154 | [Test] 155 | public Task HtmlWaffleMultiple() 156 | { 157 | var random = new Random(0); 158 | var html = WaffleEngine.Html(random, 11, true, false); 159 | return Verify(html); 160 | } 161 | 162 | [Test] 163 | public Task HtmlWaffleMultipleWithHeadAndBody() 164 | { 165 | var random = new Random(0); 166 | var html = WaffleEngine.Html(random, 11, true, true); 167 | return Verify(html); 168 | } 169 | 170 | [Test] 171 | public Task TextWaffleNoHeading() 172 | { 173 | var random = new Random(0); 174 | var text = WaffleEngine.Text(random, 1, false); 175 | return Verify(text); 176 | } 177 | 178 | [Test] 179 | public Task MarkdownWaffleNoHeading() 180 | { 181 | var random = new Random(0); 182 | var text = WaffleEngine.Markdown(random, 1, false); 183 | return Verify(text, "md"); 184 | } 185 | 186 | [Test] 187 | public Task HtmlWaffleNoHeading() 188 | { 189 | var random = new Random(0); 190 | var html = WaffleEngine.Html(random, 1, true, false); 191 | return Verify(html); 192 | } 193 | 194 | [Test] 195 | public Task HtmlWaffleNoHeadingWithHeadAndBody() 196 | { 197 | var random = new Random(0); 198 | var html = WaffleEngine.Html(random, 1, true, true); 199 | return Verify(html); 200 | } 201 | } -------------------------------------------------------------------------------- /src/WaffleGenerator.Bogus/Waffle.cs: -------------------------------------------------------------------------------- 1 | using WaffleGenerator; 2 | 3 | namespace Bogus; 4 | 5 | public class Waffle : DataSet 6 | { 7 | public string Html(int paragraphs = 1, bool includeHeading = true, bool includeHeadAndBody = true) => 8 | WaffleEngine.Html(RandomNumber, paragraphs, includeHeading, includeHeadAndBody); 9 | 10 | public string Text(int paragraphs = 1, bool includeHeading = true) => 11 | WaffleEngine.Text(RandomNumber, paragraphs, includeHeading); 12 | 13 | public string Markdown(int paragraphs = 1, bool includeHeading = true) => 14 | WaffleEngine.Markdown(RandomNumber, paragraphs, includeHeading); 15 | 16 | public string Title() => 17 | WaffleEngine.Title(RandomNumber); 18 | 19 | int RandomNumber(int i) => 20 | Random.Number(i - 1); 21 | } -------------------------------------------------------------------------------- /src/WaffleGenerator.Bogus/WaffleGenerator.Bogus.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | net9;net48 4 | Produces Bogus (https://github.com/bchavez/Bogus) text which, on first glance, looks like real, ponderous, prose; replete with clichés. 5 | $(DefineConstants);Bogus 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/WaffleGenerator.Bogus/WaffleGeneratorExtensions.cs: -------------------------------------------------------------------------------- 1 | using Bogus.Premium; 2 | 3 | namespace Bogus; 4 | 5 | public static class WaffleExtensions 6 | { 7 | public static Waffle Waffle(this Faker faker) => 8 | ContextHelper.GetOrSet(faker, () => new Waffle()); 9 | 10 | public static string WaffleHtml(this Faker faker, int paragraphs = 1, bool includeHeading = true) => 11 | faker 12 | .Waffle() 13 | .Html(paragraphs, includeHeading); 14 | 15 | public static string WaffleTitle(this Faker faker) => 16 | faker 17 | .Waffle() 18 | .Title(); 19 | 20 | public static string WaffleText(this Faker faker, int paragraphs = 1, bool includeHeading = true) => 21 | faker 22 | .Waffle() 23 | .Text(paragraphs, includeHeading); 24 | 25 | public static string WaffleMarkdown(this Faker faker, int paragraphs = 1, bool includeHeading = true) => 26 | faker 27 | .Waffle() 28 | .Markdown(paragraphs, includeHeading); 29 | } -------------------------------------------------------------------------------- /src/WaffleGenerator.sln: -------------------------------------------------------------------------------- 1 | Microsoft Visual Studio Solution File, Format Version 12.00 2 | # Visual Studio Version 16 3 | VisualStudioVersion = 16.0.29230.61 4 | MinimumVisualStudioVersion = 15.0.26730.16 5 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{2745D9FA-8583-434A-87D8-9A8BC11F5B0B}" 6 | ProjectSection(SolutionItems) = preProject 7 | appveyor.yml = appveyor.yml 8 | Directory.Build.props = Directory.Build.props 9 | Directory.Packages.props = Directory.Packages.props 10 | EndProjectSection 11 | EndProject 12 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WaffleGenerator", "WaffleGenerator\WaffleGenerator.csproj", "{92E64F4E-6A8E-43C2-9C8D-694E0327BEF0}" 13 | EndProject 14 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WaffleGenerator.Bogus", "WaffleGenerator.Bogus\WaffleGenerator.Bogus.csproj", "{6E9C0AD1-8F9E-447E-94DC-190073B6C4F5}" 15 | EndProject 16 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tests", "Tests\Tests.csproj", "{87DB4CC0-4AC3-4AC1-97FD-7C55D3B921D9}" 17 | EndProject 18 | Global 19 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 20 | Debug|Any CPU = Debug|Any CPU 21 | Release|Any CPU = Release|Any CPU 22 | EndGlobalSection 23 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 24 | {92E64F4E-6A8E-43C2-9C8D-694E0327BEF0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 25 | {92E64F4E-6A8E-43C2-9C8D-694E0327BEF0}.Debug|Any CPU.Build.0 = Debug|Any CPU 26 | {92E64F4E-6A8E-43C2-9C8D-694E0327BEF0}.Release|Any CPU.ActiveCfg = Release|Any CPU 27 | {92E64F4E-6A8E-43C2-9C8D-694E0327BEF0}.Release|Any CPU.Build.0 = Release|Any CPU 28 | {6E9C0AD1-8F9E-447E-94DC-190073B6C4F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 29 | {6E9C0AD1-8F9E-447E-94DC-190073B6C4F5}.Debug|Any CPU.Build.0 = Debug|Any CPU 30 | {6E9C0AD1-8F9E-447E-94DC-190073B6C4F5}.Release|Any CPU.ActiveCfg = Release|Any CPU 31 | {6E9C0AD1-8F9E-447E-94DC-190073B6C4F5}.Release|Any CPU.Build.0 = Release|Any CPU 32 | {87DB4CC0-4AC3-4AC1-97FD-7C55D3B921D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 33 | {87DB4CC0-4AC3-4AC1-97FD-7C55D3B921D9}.Debug|Any CPU.Build.0 = Debug|Any CPU 34 | {87DB4CC0-4AC3-4AC1-97FD-7C55D3B921D9}.Release|Any CPU.ActiveCfg = Release|Any CPU 35 | {87DB4CC0-4AC3-4AC1-97FD-7C55D3B921D9}.Release|Any CPU.Build.0 = Release|Any CPU 36 | EndGlobalSection 37 | GlobalSection(SolutionProperties) = preSolution 38 | HideSolutionNode = FALSE 39 | EndGlobalSection 40 | GlobalSection(ExtensibilityGlobals) = postSolution 41 | SolutionGuid = {A9DBE1FD-2601-4F67-B85B-CE26A668FA05} 42 | EndGlobalSection 43 | EndGlobal 44 | -------------------------------------------------------------------------------- /src/WaffleGenerator.sln.DotSettings: -------------------------------------------------------------------------------- 1 |  2 | ..\Shared.sln.DotSettings 3 | True 4 | True 5 | 1 6 | -------------------------------------------------------------------------------- /src/WaffleGenerator/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | [assembly: InternalsVisibleTo("Tests, PublicKey=00240000048000009400000006020000002400005253413100040000010001006944a8a4c5de92d68196a123157958d8f212381e1e21a772626e9c86cf8032f457f5b3d669045c4183f4d8dc89be3ae953ccba62b7522b2633156d0c886597509d50de36ce53cac9eebae9146e061bd6933499c740f56770c9ca3052f51de162791f86ea316ae4e3345c58b53e5743a3301359820655979aafefb40384c585c5")] -------------------------------------------------------------------------------- /src/WaffleGenerator/Constants.cs: -------------------------------------------------------------------------------- 1 | // ReSharper disable StringLiteralTypo 2 | 3 | class Constants 4 | { 5 | public static string[] preamblePhrases = 6 | [ 7 | """ 8 | In broad terms, we can define the main issues with |t. There are :- 9 | * The |o of |o: |B |C |D. 10 | * The |o of |o: |B |C |D. 11 | * The |o of |o: |B |C |D. 12 | * The |o of |o: |B |C |D. 13 | 14 | 15 | """, 16 | """ 17 | The following points should be appreciated about |t; 18 | 1. |B |C |D. 19 | 2. |B |C |D. 20 | 3. |B |C |D. 21 | 4. |B |C |D. 22 | 5. |B |C |D. 23 | 6. |B |C |D. 24 | 25 | 26 | """, 27 | """ 28 | Note that:- 29 | 30 | 1. |B |C |D.. 31 | 2. |B |C |D.. 32 | 3. |B |C |D. 33 | 4. |B |C |D. 34 | 5. |B |C |D. 35 | 6. |B |C |D. 36 | 37 | 38 | """, 39 | """ 40 | Essentially; 41 | 42 | * |B |C |D. 43 | * |B |C |D. 44 | * |B |C |D. 45 | * |B |C |D. 46 | * |B |C |D. 47 | * |B |C |D. 48 | 49 | 50 | """, 51 | """ 52 | To make the main points more explicit, it is fair to say that; 53 | * |B |C |D. 54 | * |B |C |D. 55 | * |B |C |D. 56 | * |B |C |D. 57 | 58 | 59 | """, 60 | "We have heard it said, tongue-in-cheek, that", 61 | "To be quite frank,", 62 | "Focussing on the agreed facts, we can say that", 63 | "To be perfectly truthful,", 64 | "In broad terms,", 65 | "To be perfectly honest,", 66 | "It was |f |s who first pointed out that", 67 | "Since |f |s's first formulation of the |c, it has become fairly obvious that", 68 | "Since the seminal work of |f |s it has generally been accepted that", 69 | "Without a doubt, |f |s i was right in saying that", 70 | "As regards |h |c, We should put this one to bed. On the other hand,", 71 | "As regards |h |c, This may have a knock-on effect. On the other hand,", 72 | "We must take on board that fact that", 73 | "Without a doubt, |B |C |D. So, where to from here? Presumably,", 74 | "It has hitherto been accepted that", 75 | "At the end of the day,", 76 | "Under the provision of the overall |1 plan,", 77 | "Firming up the gaps, one can say that", 78 | "Within the bounds of |h |c,", 79 | "The |h |c provides us with a win-win situation. Especially if one considers that", 80 | "There are swings and roundabouts in considering that", 81 | "To be precise,", 82 | "Whilst taking the subject of |h |c offline, one must add that", 83 | "For example,", 84 | "An orthodox view is that", 85 | "To reiterate,", 86 | "To recapitulate,", 87 | "Strictly speaking,", 88 | "In a very real sense,", 89 | "Regarding the nature of |h |c,", 90 | "In a strictly mechanistic sense,", 91 | "One is struck quite forcibly by the fact that", 92 | "In any event,", 93 | "In particular,", 94 | "In assessing the |c, one should think outside the box. on the other hand,", 95 | "On the other hand,", 96 | "It is recognized that", 97 | "Focusing specifically on the relationship between |h |c and any |c,", 98 | "Although it is fair to say that |B |C |D, one should take this out of the loop", 99 | "|bly,", 100 | "|bly,", 101 | "|bly,", 102 | "Be that as it may,", 103 | "Taking everything into consideration,", 104 | "As in so many cases, we can state that", 105 | "The |c cannot explain all the problems in maximizing the efficacy of |h |c. Generally", 106 | "We can confidently base our case on an assumption that", 107 | "An initial appraisal makes it evident that", 108 | "An investigation of the |1 factors suggests that", 109 | "It is common knowledge that", 110 | "Despite an element of volatility,", 111 | "The less obviously co-existential factors imply that", 112 | "To coin a phrase,", 113 | "One might venture to suggest that", 114 | "In all foreseeable circumstances,", 115 | "However,", 116 | "Similarly,", 117 | "As a resultant implication,", 118 | "There is a strong body of opinion that affirms that", 119 | "Up to a point,", 120 | "Quite frankly,", 121 | "In this regard,", 122 | "Based on integral subsystems,", 123 | "For example,", 124 | "Therefore,", 125 | "Within current constraints on manpower resources,", 126 | "Up to a certain point,", 127 | "In an ideal environment,", 128 | "It might seem reasonable to think of |h |c as involving |h |c. Nevertheless,", 129 | "It can be forcibly emphasized that", 130 | "Thus,", 131 | "Within the restrictions of |h |c,", 132 | "In respect to specific goals,", 133 | "It is important to realize that", 134 | "To put it concisely,", 135 | "To be perfectly frank,", 136 | "On any rational basis,", 137 | "In any event,", 138 | "On the basis of |h |2 |3,", 139 | "With all the relevant considerations taken into account, it can be stated that", 140 | "Few would disagree, however, that", 141 | "It goes without saying that", 142 | "Only in the case of the |c can one state that", 143 | "if one considers the |c in the light of |h |c,", 144 | "The |c is taken to be a |c. Presumably,", 145 | "So far,", 146 | "It is quite instructive to compare |h |c and |h |c. In the latter case,", 147 | "Obviously,", 148 | "By and large,", 149 | "Possibly,", 150 | "One can, with a certain degree of confidence, conclude that", 151 | "Without doubt,", 152 | "With due caution, one can postulate that", 153 | "The |c is clearly related to |h |c. Nevertheless,", 154 | "There is probably no causal link between the |c and |h |c. However", 155 | "In the light of |h |c, it is clear that", 156 | "No one can deny the relevance of |h |c. Equally it is certain that", 157 | "Albeit,", 158 | "It is precisely the influence of |h |c for |t that makes the |c inevitable, Equally,", 159 | "One must clearly state that", 160 | "In connection with |h |c,", 161 | "Normally", 162 | "one can, quite consistently, say that", 163 | "Clearly, it is becoming possible to resolve the difficulties in assuming that", 164 | "Within normal variability,", 165 | "There can be little doubt that", 166 | "Few would deny that", 167 | "It is not often |e stated that", 168 | "In real terms,", 169 | "In this day and age,", 170 | "It is |e stated that", 171 | "The position in regard to the |c is that", 172 | "On one hand |B |C |D, but on the other hand", 173 | "One hears it stated that |B |C |D, but it is more likely that", 174 | "Whilst it may be true that |B |C |D, one must not lose sight of the fact that" 175 | ]; 176 | 177 | public static string[] subjectPhrases = 178 | [ 179 | "|h strategic goals", 180 | "|h gap analysis", 181 | "|h hardball", 182 | "|h purchaser - provider", 183 | "|h skill set", 184 | "|h knock-on effect", 185 | "|h strategic plan", 186 | "|h the bottom line", 187 | "|h mindset", 188 | "|h benchmark", 189 | "|h core business", 190 | "|h big picture", 191 | "|h take home message", 192 | "|h lessons learnt", 193 | "|h movers and shakers", 194 | "|h knowledge base", 195 | "the ball-park figures for the |c", 196 | "The core drivers", 197 | "a particular factor, such as the |c, the |c, the |c or the |c", 198 | "there is an apparent contradiction between the |c and |h |c. However, |h |c", 199 | "the question of |h |c", 200 | "the desirability of attaining |h |c, as far as the |c is concerned,", 201 | "a persistent instability in |h |c", 202 | "examination of |2 instances", 203 | "the classic definition of |h |c", 204 | "firm assumptions about |c", 205 | "the |c and the resources needed to support it are mandatory. |A |B", 206 | "significant progress has been made in the |c. |A |B", 207 | "efforts are already underway in the development of the |c. |A |B", 208 | "a |2 operation of |h |c", 209 | "subdivisions of |h |c", 210 | "an anticipation of the effects of any |c", 211 | "an overall understanding of |h |c", 212 | "the assertion of the importance of the |c", 213 | "an understanding of the necessary relationship between the |c and any |c", 214 | "the possibility, that the |c plays a decisive part in influencing |h |c,", 215 | "any solution to the problem of |h |c", 216 | "the lack of understanding of |h |c", 217 | "the |c in its relation to |h |c", 218 | "parameters within |h |c", 219 | "the target population for |h |c", 220 | "initiation of |h |c", 221 | "both |c and |c", 222 | "|h |c", 223 | "an extrapolation of the |c", 224 | "|h |c", 225 | "the assessment of any significant weaknesses in the |c", 226 | "any subsequent interpolation", 227 | "|h |c is |e significant. On the other hand |h |c", 228 | "|h |c relates |e to any |c. Conversely, |h |c", 229 | "|h |c may be |e important. The |c", 230 | "the incorporation of the |c", 231 | "the quest for the |c", 232 | "the dangers inherent in the |c", 233 | "the value of the |c", 234 | "the |c", 235 | "an unambiguous concept of the |c", 236 | "a metonymic reconstruction of the |c", 237 | "a primary interrelationship between system and/or subsystem technologies" 238 | ]; 239 | 240 | public static string[] verbPhrases = 241 | [ 242 | "|d the overall efficiency of", 243 | "|d the |4 and |C", 244 | "can fully utilize", 245 | "will move the goal posts for", 246 | "would stretch the envelope of", 247 | "enables us to tick the boxes of", 248 | "could go the extra mile for", 249 | "should empower employees to produce", 250 | "should touch base with", 251 | "probably |d", 252 | "is generally compatible with", 253 | "provides the bandwidth for", 254 | "gives a win-win situation for", 255 | "has clear ramifications for", 256 | "has been made imperative in view of", 257 | "provides the context for", 258 | "underpins the importance of", 259 | "focuses our attention on", 260 | "will require a substantial amount of effort. |A |B |C", 261 | "represents a different business risk. |A |B |C", 262 | "is of considerable importance from the production aspect. |A |B |C", 263 | "should facilitate information exchange. |A |B |C", 264 | "has the intrinsic benefit of resilience, unlike the", 265 | "cannot be shown to be relevant. This is in contrast to", 266 | "cannot always help us. |A |B |C", 267 | "|C |D. A priority should be established based on a combination of |c and |c", 268 | "|C |D. The objective of the |c is to delineate", 269 | "shows an interesting ambivalence with", 270 | "underlines the essential paradigm of", 271 | "can be taken in juxtaposition with", 272 | "provides an interesting insight into", 273 | "must seem over simplistic in the light of", 274 | "seems to |e reinforce the importance of", 275 | "leads clearly to the rejection of the supremacy of", 276 | "allows us to see the clear significance of", 277 | "underlines the significance of", 278 | "reinforces the weaknesses in", 279 | "confuses the |c and", 280 | "|d the |c and", 281 | "|d", 282 | "|d", 283 | "|d", 284 | "|d", 285 | "|d", 286 | "|d", 287 | "provides a harmonic integration with", 288 | "is constantly directing the course of", 289 | "must intrinsically determine", 290 | "has fundamental repercussions for", 291 | "provides an idealized framework for", 292 | "|e alters the importance of", 293 | "|e changes the interrelationship between the|c and", 294 | "|e legitimises the significance of", 295 | "must utilize and be functionally interwoven with", 296 | "|d the probability of project success and", 297 | "|e |d the |c and", 298 | "|e |d the |c and", 299 | "|e |d the |c and", 300 | "|e |d the |c in its relationship with", 301 | "|d the dangers quite |e of", 302 | "has confirmed an expressed desire for", 303 | "is reciprocated by", 304 | "has no other function than to provide", 305 | "adds explicit performance limits to", 306 | "must be considered proactively, rather than reactively, in the light of", 307 | "necessitates that urgent consideration be applied to", 308 | "requires considerable systems analysis and trade-off studies to arrive at", 309 | "provides a heterogeneous environment to", 310 | "cannot compare in its potential exigencies with", 311 | "is further compounded, when taking into account", 312 | "presents extremely interesting challenges to", 313 | "|d the importance of other systems and the necessity for", 314 | "provides one of the dominant factors of", 315 | "forms the basis for", 316 | "enhances the efficiency of", 317 | "develops a vision to leverage", 318 | "produces diagnostic feedback to", 319 | "capitalises on the strengths of", 320 | "effects a significant implementation of", 321 | "seems to counterpoint", 322 | "adds overriding performance constraints to", 323 | "manages to subsume", 324 | "provides a balanced perspective to", 325 | "rivals, in terms of resource implications,", 326 | "contrives through the medium of the |c to emphasize", 327 | "can be developed in parallel with", 328 | "commits resources to", 329 | "confounds the essential conformity of", 330 | "provides the bridge between the |c and", 331 | "should be provided to expedite investigation into", 332 | "poses problems and challenges for both the |c and", 333 | "should not divert attention from", 334 | "provides an insight into", 335 | "has considerable manpower implications when considered in the light of", 336 | "may mean a wide diffusion of the |c into", 337 | "makes little difference to", 338 | "focuses our attention on", 339 | "exceeds the functionality of", 340 | "recognizes deficiencies in", 341 | "needs to be factored into the equation alongside the", 342 | "needs to be addressed along with the" 343 | ]; 344 | 345 | public static string[] objectPhrases = 346 | [ 347 | "the overall game-plan", 348 | "the slippery slope", 349 | "the strategic fit", 350 | "The total quality objectives", 351 | "the |c. This should be considered in the light of the |c", 352 | "the |c. One must therefore dedicate resources to the |c immediately.", 353 | "the |c on a strictly limited basis", 354 | "this |c. This should present few practical problems", 355 | "what should be termed the |c", 356 | "the applicability and value of the |c", 357 | "the |c or the |c", 358 | "the negative aspects of any |c", 359 | "an unambiguous concept of the |c", 360 | "the thematic reconstruction of |c", 361 | "the scientific |o of the |c", 362 | "the evolution of |2 |o over a given time limit", 363 | "any commonality between the |c and the |c", 364 | "the greater |c of the |c", 365 | "the universe of |o", 366 | "any discrete or |2 configuration mode", 367 | "the |4", 368 | "an elemental change in the |c", 369 | "the work being done at the 'coal-face'", 370 | "what is beginning to be termed the \"|c\"", 371 | "the |c. We need to be able to rationalize |D", 372 | "the |c. We can then |e play back our understanding of |D", 373 | "the |c. Everything should be done to expedite |D", 374 | "The |c. The advent of the |c |e |d |D", 375 | "the |c. The |c makes this |e inevitable", 376 | "the |c. The |3 is of a |2 nature", 377 | "the |c. This may be due to a lack of a |c.", 378 | "the |c. Therefore a maximum of flexibility is required", 379 | "any |c. This can be deduced from the |c", 380 | "the |c. This may |e flounder on the |c", 381 | "the |c. This may explain why the |c |e |d |D", 382 | "the |c. This trend may dissipate due to the |c" 383 | ]; 384 | 385 | public static string[] adverbs = 386 | [ 387 | "substantively", 388 | "intuitively", 389 | "uniquely", 390 | "semantically", 391 | "necessarily", 392 | "stringently", 393 | "precisely", 394 | "rigorously", 395 | "broadly", 396 | "generally", 397 | "implicitly", 398 | "inherently", 399 | "presumably", 400 | "preeminently", 401 | "analytically", 402 | "logically", 403 | "ontologically", 404 | "wholly", 405 | "basically", 406 | "demonstrably", 407 | "strictly", 408 | "functionally", 409 | "radically", 410 | "definitely", 411 | "positively", 412 | "intrinsically", 413 | "generally", 414 | "overwhelmingly", 415 | "essentially", 416 | "vitally", 417 | "operably", 418 | "fundamentally", 419 | "significantly", 420 | "retroactively", 421 | "retrospectively", 422 | "globally", 423 | "clearly", 424 | "disconcertingly" 425 | ]; 426 | 427 | public static string[] verbs = 428 | [ 429 | "stimulates", 430 | "spreads", 431 | "improves", 432 | "energises", 433 | "emphasizes", 434 | "subordinates", 435 | "posits", 436 | "perceives", 437 | "de-stabilizes", 438 | "Revisits", 439 | "connotes", 440 | "signifies", 441 | "indicates", 442 | "increases", 443 | "supports", 444 | "rationalises", 445 | "provokes", 446 | "de-actualises", 447 | "relocates", 448 | "yields", 449 | "implies", 450 | "designates", 451 | "reflects", 452 | "sustains", 453 | "supplements", 454 | "represents", 455 | "re-iterates", 456 | "juxtaposes", 457 | "provides", 458 | "maximizes", 459 | "identifies", 460 | "furnishes", 461 | "supplies", 462 | "affords", 463 | "yields", 464 | "formulates", 465 | "focuses on", 466 | "depicts", 467 | "embodies", 468 | "exemplifies", 469 | "expresses", 470 | "personifies", 471 | "symbolizes", 472 | "typifies", 473 | "replaces", 474 | "supplants", 475 | "denotes", 476 | "depicts", 477 | "expresses", 478 | "illustrates", 479 | "implies", 480 | "symbolizes", 481 | "delineates", 482 | "depicts", 483 | "illustrates", 484 | "portrays", 485 | "clarifies", 486 | "depicts", 487 | "interprets", 488 | "delineates", 489 | "reflects", 490 | "evinces", 491 | "expresses", 492 | "indicates", 493 | "manifests", 494 | "reveals", 495 | "shows", 496 | "delineates", 497 | "represents", 498 | "anticipates", 499 | "denotes", 500 | "identifies", 501 | "indicates", 502 | "symbolizes", 503 | "diminishes", 504 | "lessens", 505 | "represses", 506 | "suppresses", 507 | "weakens", 508 | "accentuates", 509 | "amplifies", 510 | "heightens", 511 | "highlights", 512 | "spotlights", 513 | "stresses", 514 | "underlines", 515 | "underscores", 516 | "asserts", 517 | "reiterates", 518 | "restates", 519 | "stresses", 520 | "enhances", 521 | "amends", 522 | "translates", 523 | "specifies" 524 | ]; 525 | 526 | public static string[] firstAdjectivePhrases = 527 | [ 528 | "comprehensive", 529 | "targeted", 530 | "realigned", 531 | "client focussed", 532 | "best practice", 533 | "value added", 534 | "quality driven", 535 | "basic", 536 | "principal", 537 | "central", 538 | "essential", 539 | "primary", 540 | "indicative", 541 | "continuous", 542 | "critical", 543 | "prevalent", 544 | "preeminent", 545 | "unequivocal", 546 | "sanctioned", 547 | "logical", 548 | "reproducible", 549 | "methodological", 550 | "relative", 551 | "integrated", 552 | "fundamental", 553 | "cohesive", 554 | "interactive", 555 | "comprehensive", 556 | "critical", 557 | "potential", 558 | "vibrant", 559 | "total", 560 | "additional", 561 | "secondary", 562 | "primary", 563 | "heuristic", 564 | "complex", 565 | "pivotal", 566 | "quasi-effectual", 567 | "dominant", 568 | "characteristic", 569 | "ideal", 570 | "doctrine of the", 571 | "key", 572 | "independent", 573 | "deterministic", 574 | "assumptions about the", 575 | "heuristic", 576 | "crucial", 577 | "meaningful", 578 | "implicit", 579 | "analogous", 580 | "explicit", 581 | "integrational", 582 | "non-viable", 583 | "directive", 584 | "consultative", 585 | "collaborative", 586 | "delegative", 587 | "tentative", 588 | "privileged", 589 | "common", 590 | "hypothetical", 591 | "metathetical", 592 | "marginalised", 593 | "systematised", 594 | "evolutional", 595 | "parallel", 596 | "functional", 597 | "responsive", 598 | "optical", 599 | "inductive", 600 | "objective", 601 | "synchronised", 602 | "compatible", 603 | "prominent", 604 | "three-phase", 605 | "two-phase", 606 | "balanced", 607 | "legitimate", 608 | "subordinated", 609 | "complementary", 610 | "proactive", 611 | "truly global", 612 | "interdisciplinary", 613 | "homogeneous", 614 | "hierarchical", 615 | "technical", 616 | "alternative", 617 | "strategic", 618 | "environmental", 619 | "closely monitored", 620 | "three-tier", 621 | "inductive", 622 | "fully integrated", 623 | "fully interactive", 624 | "ad-hoc", 625 | "ongoing", 626 | "proactive", 627 | "dynamic", 628 | "flexible", 629 | "verifiable", 630 | "falsifiable", 631 | "transitional", 632 | "mechanism-independent", 633 | "synergistic", 634 | "high-level" 635 | ]; 636 | 637 | public static string[] secondAdjectivePhrases = 638 | [ 639 | "fast-track", 640 | "transparent", 641 | "results-driven", 642 | "subsystem", 643 | "test", 644 | "configuration", 645 | "mission", 646 | "functional", 647 | "referential", 648 | "numinous", 649 | "paralyptic", 650 | "radical", 651 | "paratheoretical", 652 | "consistent", 653 | "macro", 654 | "interpersonal", 655 | "auxiliary", 656 | "empirical", 657 | "theoretical", 658 | "corroborated", 659 | "management", 660 | "organizational", 661 | "monitored", 662 | "consensus", 663 | "reciprocal", 664 | "unprejudiced", 665 | "digital", 666 | "logic", 667 | "transitional", 668 | "incremental", 669 | "equivalent", 670 | "universal", 671 | "sub-logical", 672 | "hypothetical", 673 | "conjectural", 674 | "conceptual", 675 | "empirical", 676 | "spatio-temporal", 677 | "third-generation", 678 | "epistemological", 679 | "diffusible", 680 | "specific", 681 | "non-referent", 682 | "overriding", 683 | "politico-strategical", 684 | "economico-social", 685 | "on-going", 686 | "extrinsic", 687 | "intrinsic", 688 | "multi-media", 689 | "integrated", 690 | "effective", 691 | "overall", 692 | "principal", 693 | "prime", 694 | "major", 695 | "empirical", 696 | "definitive", 697 | "explicit", 698 | "determinant", 699 | "precise", 700 | "cardinal", 701 | "principal", 702 | "affirming", 703 | "harmonizing", 704 | "central", 705 | "essential", 706 | "primary", 707 | "indicative", 708 | "mechanistic", 709 | "continuous", 710 | "critical", 711 | "prevalent", 712 | "preeminent", 713 | "unequivocal", 714 | "sanctioned", 715 | "logical", 716 | "reproducible", 717 | "methodological", 718 | "relative", 719 | "integrated", 720 | "fundamental", 721 | "cohesive", 722 | "interactive", 723 | "comprehensive", 724 | "critical", 725 | "potential", 726 | "total", 727 | "additional", 728 | "secondary", 729 | "primary", 730 | "heuristic", 731 | "complex", 732 | "pivotal", 733 | "quasi-effectual", 734 | "dominant", 735 | "characteristic", 736 | "ideal", 737 | "independent", 738 | "deterministic", 739 | "heuristic", 740 | "crucial", 741 | "meaningful", 742 | "implicit", 743 | "analogous", 744 | "explicit", 745 | "integrational", 746 | "directive", 747 | "collaborative", 748 | "entative", 749 | "privileged", 750 | "common", 751 | "hypothetical", 752 | "metathetical", 753 | "marginalised", 754 | "systematised", 755 | "evolutional", 756 | "parallel", 757 | "functional", 758 | "responsive", 759 | "optical", 760 | "inductive", 761 | "objective", 762 | "synchronised", 763 | "compatible", 764 | "prominent", 765 | "legitimate", 766 | "subordinated", 767 | "complementary", 768 | "homogeneous", 769 | "hierarchical", 770 | "alternative", 771 | "environmental", 772 | "inductive", 773 | "transitional", 774 | "Philosophical", 775 | "latent", 776 | "conscious", 777 | "practical", 778 | "temperamental", 779 | "impersonal", 780 | "personal", 781 | "subjective", 782 | "objective", 783 | "dynamic", 784 | "inclusive", 785 | "paradoxical", 786 | "pure", 787 | "central", 788 | "psychic", 789 | "associative", 790 | "intuitive", 791 | "free-floating", 792 | "empirical", 793 | "superficial", 794 | "predominant", 795 | "actual", 796 | "mutual", 797 | "arbitrary", 798 | "inevitable", 799 | "immediate", 800 | "affirming", 801 | "functional", 802 | "referential", 803 | "numinous", 804 | "paralyptic", 805 | "radical", 806 | "paratheoretical", 807 | "consistent", 808 | "interpersonal", 809 | "auxiliary", 810 | "empirical", 811 | "theoretical", 812 | "reciprocal", 813 | "unprejudiced", 814 | "transitional", 815 | "incremental", 816 | "equivalent", 817 | "universal", 818 | "sub-logical", 819 | "hypothetical", 820 | "conjectural", 821 | "conceptual", 822 | "empirical", 823 | "spatio-temporal", 824 | "epistemological", 825 | "diffusible", 826 | "specific", 827 | "non-referent", 828 | "overriding", 829 | "politico-strategical", 830 | "economico-social", 831 | "on-going", 832 | "extrinsic", 833 | "intrinsic", 834 | "effective", 835 | "principal", 836 | "prime", 837 | "major", 838 | "empirical", 839 | "definitive", 840 | "explicit", 841 | "determinant", 842 | "precise", 843 | "cardinal", 844 | "geometric", 845 | "naturalistic", 846 | "linear", 847 | "distinctive", 848 | "phylogenetic", 849 | "ethical", 850 | "theoretical", 851 | "economic", 852 | "aesthetic", 853 | "personal", 854 | "social", 855 | "discordant", 856 | "political", 857 | "religious", 858 | "artificial", 859 | "collective", 860 | "permanent", 861 | "metaphysical", 862 | "organic", 863 | "mensurable", 864 | "expressive", 865 | "governing", 866 | "subjective", 867 | "empathic", 868 | "imaginative", 869 | "ethical", 870 | "expressionistic", 871 | "resonant", 872 | "vibrant" 873 | ]; 874 | 875 | public static string[] nounPhrases = 876 | [ 877 | "|o", 878 | "|o", 879 | "|o", 880 | "|o", 881 | "|o", 882 | "|o", 883 | "|o", 884 | "|o", 885 | "|o", 886 | "|o", 887 | "|o", 888 | "|o", 889 | "|o", 890 | "|o", 891 | "|o", 892 | "|o", 893 | "|o", 894 | "|o", 895 | "|o", 896 | "|o", 897 | "|o", 898 | "|o", 899 | "|o", 900 | "|o", 901 | "|o", 902 | "|o", 903 | "|o", 904 | "|o", 905 | "|o", 906 | "|o", 907 | "development", 908 | "program", 909 | "baseline", 910 | "reconstruction", 911 | "discordance", 912 | "monologism", 913 | "substructure", 914 | "legitimisation", 915 | "principle", 916 | "constraints", 917 | "management option", 918 | "strategy", 919 | "transposition", 920 | "auto-interruption", 921 | "derivation", 922 | "option", 923 | "flexibility", 924 | "proposal", 925 | "formulation", 926 | "item", 927 | "issue", 928 | "capability", 929 | "mobility", 930 | "programming", 931 | "concept", 932 | "time-phase", 933 | "dimension", 934 | "faculty", 935 | "capacity", 936 | "proficiency", 937 | "reciprocity", 938 | "fragmentation", 939 | "consolidation", 940 | "projection", 941 | "interface", 942 | "hardware", 943 | "contingency", 944 | "dialog", 945 | "dichotomy", 946 | "concept", 947 | "parameter", 948 | "algorithm", 949 | "milieu", 950 | "terms of reference", 951 | "item", 952 | "vibrancy", 953 | "reaction", 954 | "casuistry", 955 | "theme", 956 | "teleology", 957 | "symbolism", 958 | "resource allocation", 959 | "certification project", 960 | "functionality", 961 | "specification", 962 | "matrix", 963 | "rationalization", 964 | "consolidation", 965 | "remediation", 966 | "facilitation", 967 | "simulation", 968 | "evaluation", 969 | "competence", 970 | "familiarisation", 971 | "transformation", 972 | "apriorism", 973 | "conventionalism", 974 | "verification", 975 | "functionality", 976 | "component", 977 | "factor", 978 | "antitheseis", 979 | "desiderata", 980 | "metaphor", 981 | "metalanguage", 982 | "globalisation", 983 | "initiative", 984 | "projection", 985 | "partnership", 986 | "priority", 987 | "service", 988 | "support", 989 | "best-practice", 990 | "change", 991 | "delivery", 992 | "funding", 993 | "resources" 994 | ]; 995 | 996 | public static string[] cliches = 997 | [ 998 | "|o of |o", 999 | "|o of |o", 1000 | "|o of |o", 1001 | "|o of |o", 1002 | "|o of |o", 1003 | "|o of |o", 1004 | "|o of |o", 1005 | "|o of |o", 1006 | "development strategy", 1007 | "decision support", 1008 | "fourth-generation environment", 1009 | "application systems", 1010 | "feedback process", 1011 | "function hierarchy analysis", 1012 | "structured business analysis", 1013 | "base information", 1014 | "final consolidation", 1015 | "design criteria", 1016 | "iterative design process", 1017 | "common interface", 1018 | "ongoing support", 1019 | "relational flexibility", 1020 | "referential integrity", 1021 | "strategic framework", 1022 | "dynamic systems strategy", 1023 | "functional decomposition", 1024 | "operational situation", 1025 | "individual action plan", 1026 | "key behavioural skills", 1027 | "set of constraints", 1028 | "structure plan", 1029 | "contingency planning", 1030 | "resource planning", 1031 | "participant feedback", 1032 | "referential function", 1033 | "passive result", 1034 | "aims and constraints", 1035 | "strategic opportunity", 1036 | "development of systems resource", 1037 | "major theme of the |c", 1038 | "technical coherence", 1039 | "cost-effective application", 1040 | "high leverage area", 1041 | "key leveraging technology", 1042 | "known strategic opportunity", 1043 | "internal resource capability", 1044 | "interactive concern-control system", 1045 | "key technology", 1046 | "prime objective", 1047 | "key area of opportunity", 1048 | "present infrastructure", 1049 | "enabling technology", 1050 | "key objective", 1051 | "areas of particular expertise", 1052 | "overall business benefit", 1053 | "competitive practice and technology", 1054 | "flexible manufacturing system", 1055 | "adequate resource level", 1056 | "|e sophisticated hardware", 1057 | "external agencies", 1058 | "anticipated fourth-generation equipment", 1059 | "maintenance of current standards", 1060 | "adequate development of any necessary measures", 1061 | "critical component in the", 1062 | "active process of information gathering", 1063 | "general milestones", 1064 | "adequate timing control", 1065 | "quantitative and discrete targets", 1066 | "subsystem compatibility testing", 1067 | "structural design, based on system engineering concepts", 1068 | "key principles behind the |c", 1069 | "constraints of manpower resourcing", 1070 | "necessity for budgetary control", 1071 | "discipline of resource planning", 1072 | "diverse hardware environment", 1073 | "product lead times", 1074 | "access to corporate systems", 1075 | "overall certification project", 1076 | "commitment to industry standards", 1077 | "general increase in office efficiency", 1078 | "preliminary qualification limit", 1079 | "calculus of consequence", 1080 | "corollary", 1081 | "reverse image", 1082 | "logical data structure", 1083 | "philosophy of commonality and standardization", 1084 | "impact on overall performance", 1085 | "multilingual cynicism", 1086 | "functional synergy", 1087 | "backbone of connectivity", 1088 | "integrated set of requirements", 1089 | "ongoing |3 philosophy", 1090 | "strategic requirements", 1091 | "integration of |c with strategic initiatives", 1092 | "established analysis and design methodology", 1093 | "corporate information exchange", 1094 | "separate roles and significances of the |c", 1095 | "formal strategic direction", 1096 | "integrated set of facilities", 1097 | "appreciation of vested responsibilities", 1098 | "potential globalisation candidate", 1099 | "tentative priority", 1100 | "performance objectives", 1101 | "global business practice", 1102 | "functionality matrix", 1103 | "priority sequence", 1104 | "system elements", 1105 | "life cycle phase", 1106 | "operations scenario", 1107 | "total system rationale", 1108 | "conceptual baseline", 1109 | "incremental delivery", 1110 | "requirements hierarchy", 1111 | "functional baseline", 1112 | "system critical design", 1113 | "capability constraint", 1114 | "matrix of supporting elements", 1115 | "lead group concept", 1116 | "dominant factor", 1117 | "modest correction", 1118 | "element of volatility", 1119 | "inevitability of amelioration", 1120 | "attenuation of subsequent feedback", 1121 | "chance of entropy within the system", 1122 | "associated supporting element", 1123 | "intrinsic homeostasis within the metasystem", 1124 | "characterization of specific information", 1125 | "organization structure", 1126 | "constant flow of effective information", 1127 | "key business objectives", 1128 | "life cycle", 1129 | "large portion of the co-ordination of communication", 1130 | "corporate procedure", 1131 | "proposed scenario" 1132 | ]; 1133 | 1134 | public static string[] prefixes = 1135 | [ 1136 | "the", 1137 | "the", 1138 | "the", 1139 | "the", 1140 | "the", 1141 | "the", 1142 | "the", 1143 | "the", 1144 | "the", 1145 | "any", 1146 | "any", 1147 | "what might be described as the", 1148 | "what amounts to the", 1149 | "a large proportion of the", 1150 | "what has been termed the", 1151 | "a unique facet of the", 1152 | "a significant aspect of the", 1153 | "the all-inclusiveness of the", 1154 | "any inherent dangers of the", 1155 | "the obvious necessity for the", 1156 | "the basis of any", 1157 | "the basis of the", 1158 | "any formalization of the", 1159 | "the quest for the", 1160 | "any significant enhancements in the", 1161 | "the underlying surrealism of the", 1162 | "the feasibility of the", 1163 | "the requirements of", 1164 | "an implementation strategy for", 1165 | "any fundamental dichotomies of the", 1166 | "a concept of what we have come to call the", 1167 | "the infrastructure of the", 1168 | "a proven solution to the", 1169 | "a percentage of the", 1170 | "a proportion of the", 1171 | "an issue of the", 1172 | "any consideration of the", 1173 | "a factor within the", 1174 | "the adequate functionality of the", 1175 | "the principle of the", 1176 | "the constraints of the", 1177 | "a realization the importance of the", 1178 | "the criterion of", 1179 | "a unique facet of", 1180 | "the consolidation of the", 1181 | "a preponderance of the" 1182 | ]; 1183 | 1184 | public static string[] artyNouns = 1185 | [ 1186 | "discordance", 1187 | "legitimisation", 1188 | "principle", 1189 | "transposition", 1190 | "dimension", 1191 | "reciprocity", 1192 | "fragmentation", 1193 | "projection", 1194 | "dichotomy", 1195 | "concept", 1196 | "theme", 1197 | "teleology", 1198 | "symbolism", 1199 | "transformation", 1200 | "antithesis", 1201 | "desiderata", 1202 | "metaphor", 1203 | "metalanguage", 1204 | "reciprocity", 1205 | "consciousness", 1206 | "feeling", 1207 | "fact", 1208 | "individuality", 1209 | "comparison", 1210 | "awareness", 1211 | "expression", 1212 | "appreciation", 1213 | "correspondence", 1214 | "interpretation", 1215 | "interpolation", 1216 | "interpenetration", 1217 | "statement", 1218 | "emphasis", 1219 | "feeling", 1220 | "empathy", 1221 | "sensibility", 1222 | "insight", 1223 | "attitude", 1224 | "consciousness", 1225 | "absorption", 1226 | "self-forgetfulness", 1227 | "parallelism", 1228 | "classification", 1229 | "evidence", 1230 | "aspect", 1231 | "distinction", 1232 | "idealism", 1233 | "naturalism", 1234 | "disposition", 1235 | "apprehension", 1236 | "morality", 1237 | "object", 1238 | "idealism", 1239 | "quality", 1240 | "romanticism", 1241 | "realism", 1242 | "idealism", 1243 | "quality", 1244 | "transposition", 1245 | "determinism", 1246 | "attitude", 1247 | "terminology", 1248 | "individuality", 1249 | "category", 1250 | "integration", 1251 | "concept", 1252 | "phenomenon", 1253 | "element", 1254 | "analogy", 1255 | "perception", 1256 | "principle", 1257 | "aesthetic", 1258 | "spirituality", 1259 | "aspiration", 1260 | "quality", 1261 | "disposition", 1262 | "subjectivism", 1263 | "objectivism", 1264 | "contemplation", 1265 | "vivacity", 1266 | "feeling", 1267 | "empathy", 1268 | "value", 1269 | "sensation", 1270 | "causation", 1271 | "affectability", 1272 | "impulse", 1273 | "attitude", 1274 | "sensibility", 1275 | "material", 1276 | "aspect", 1277 | "problem", 1278 | "implication", 1279 | "hierarchy", 1280 | "process", 1281 | "provenance", 1282 | "discord", 1283 | "milieu" 1284 | ]; 1285 | 1286 | public static string[] surnames = 1287 | [ 1288 | "Bennet", 1289 | "Blotchet-Halls", 1290 | "Carson", 1291 | "Clarke", 1292 | "DeFrance", 1293 | "del Castillo", 1294 | "Dull", 1295 | "Green", 1296 | "Greene", 1297 | "Gringlesby", 1298 | "Hunter", 1299 | "Karsen", 1300 | "Locksley", 1301 | "MacFeather", 1302 | "McBadden", 1303 | "O'Leary", 1304 | "Panteley", 1305 | "Poel", 1306 | "Powys-Lybbe", 1307 | "Smith", 1308 | "Straight", 1309 | "Stringer", 1310 | "White", 1311 | "Yokomoto" 1312 | ]; 1313 | 1314 | public static string[] forenames = 1315 | [ 1316 | "Abraham", 1317 | "Reginald", 1318 | "Cheryl", 1319 | "Michel", 1320 | "Innes", 1321 | "Ann", 1322 | "Marjorie", 1323 | "Matthew", 1324 | "Mark", 1325 | "Luke", 1326 | "John", 1327 | "Burt", 1328 | "Lionel", 1329 | "Humphrey", 1330 | "Andrew", 1331 | "Jenny", 1332 | "Sheryl", 1333 | "Livia", 1334 | "Charlene", 1335 | "Winston", 1336 | "Heather", 1337 | "Michael", 1338 | "Sylvia", 1339 | "Albert", 1340 | "Anne", 1341 | "Meander", 1342 | "Dean", 1343 | "Dirk", 1344 | "Desmond", 1345 | "Akiko" 1346 | ]; 1347 | 1348 | public static string[] buzzPhrases = 1349 | [ 1350 | "|1 |2 |3", 1351 | "|1 |2 |3", 1352 | "|2 |3", 1353 | "|1 |2 |3", 1354 | "|1 |2 |3", 1355 | "|4", 1356 | "|4" 1357 | ]; 1358 | 1359 | public static string[] cardinalSequences = 1360 | [ 1361 | "one", 1362 | "two", 1363 | "three", 1364 | "four", 1365 | "five", 1366 | "six", 1367 | "seven", 1368 | "eight", 1369 | "nine", 1370 | "ten", 1371 | "eleven", 1372 | "twelve" 1373 | ]; 1374 | 1375 | public static string[] ordinalSequences = 1376 | [ 1377 | "first", 1378 | "second", 1379 | "third", 1380 | "fourth", 1381 | "fifth" 1382 | ]; 1383 | 1384 | public static string[] maybeHeading = 1385 | [ 1386 | "", 1387 | "", 1388 | "The |uc.", 1389 | "" 1390 | ]; 1391 | 1392 | public static bool[] maybeParagraph = 1393 | [ 1394 | false, 1395 | false, 1396 | true, 1397 | false 1398 | ]; 1399 | } -------------------------------------------------------------------------------- /src/WaffleGenerator/Extensions.cs: -------------------------------------------------------------------------------- 1 | static class Extensions 2 | { 3 | public static bool EndsWith(this StringBuilder builder, params char[] chars) 4 | { 5 | for (var i = builder.Length - 1; i != -1; i--) 6 | { 7 | var builderChar = builder[i]; 8 | if (char.IsWhiteSpace(builderChar)) 9 | { 10 | continue; 11 | } 12 | 13 | foreach (var c in chars) 14 | { 15 | if (c == builderChar) 16 | { 17 | return true; 18 | } 19 | } 20 | 21 | return false; 22 | } 23 | 24 | return false; 25 | } 26 | } -------------------------------------------------------------------------------- /src/WaffleGenerator/Heading.cs: -------------------------------------------------------------------------------- 1 | record Heading(string Quote, string Cite, string Buzz, string Title); -------------------------------------------------------------------------------- /src/WaffleGenerator/InnerEngine.cs: -------------------------------------------------------------------------------- 1 | using System.Globalization; 2 | 3 | class InnerEngine(Func random) 4 | { 5 | int cardinalSequence; 6 | int ordinalSequence; 7 | string? title; 8 | string? quote; 9 | string? cite; 10 | string? buzz; 11 | List paragraphs = []; 12 | 13 | void EvaluateRandomPhrase(string[] phrases, StringBuilder output) 14 | { 15 | var index = random(phrases.Length); 16 | EvaluatePhrase(phrases[index], output); 17 | } 18 | 19 | void EvaluatePhrase(string phrase, StringBuilder result) 20 | { 21 | for (var i = 0; i < phrase.Length; i++) 22 | { 23 | if (phrase[i] == '|' && i + 1 < phrase.Length) 24 | { 25 | i++; 26 | 27 | if (phrase[i] == 'u' && i + 1 < phrase.Length) 28 | { 29 | var escape = new StringBuilder(); 30 | i++; 31 | EvaluateChar(phrase[i], escape); 32 | result.Append(TitleCaseWords(escape.ToString())); 33 | } 34 | else 35 | { 36 | EvaluateChar(phrase[i], result); 37 | } 38 | } 39 | else 40 | { 41 | if (i == 0 && HasSentenceEnded(result)) 42 | { 43 | result.Append(char.ToUpper(phrase[i])); 44 | } 45 | else 46 | { 47 | result.Append(phrase[i]); 48 | } 49 | } 50 | } 51 | } 52 | 53 | void EvaluateChar(char c, StringBuilder builder) 54 | { 55 | switch (c) 56 | { 57 | case 'a': 58 | EvaluateCardinalSequence(builder); 59 | break; 60 | case 'b': 61 | EvaluateOrdinalSequence(builder); 62 | break; 63 | case 'c': 64 | EvaluateRandomPhrase(Constants.buzzPhrases, builder); 65 | break; 66 | case 'd': 67 | EvaluateRandomPhrase(Constants.verbs, builder); 68 | break; 69 | case 'e': 70 | EvaluateRandomPhrase(Constants.adverbs, builder); 71 | break; 72 | case 'f': 73 | EvaluateRandomPhrase(Constants.forenames, builder); 74 | break; 75 | case 's': 76 | EvaluateRandomPhrase(Constants.surnames, builder); 77 | break; 78 | case 'o': 79 | EvaluateRandomPhrase(Constants.artyNouns, builder); 80 | break; 81 | case 'y': 82 | RandomDate(builder); 83 | break; 84 | case 'h': 85 | EvaluateRandomPhrase(Constants.prefixes, builder); 86 | break; 87 | case 'A': 88 | EvaluateRandomPhrase(Constants.preamblePhrases, builder); 89 | break; 90 | case 'B': 91 | EvaluateRandomPhrase(Constants.subjectPhrases, builder); 92 | break; 93 | case 'C': 94 | EvaluateRandomPhrase(Constants.verbPhrases, builder); 95 | break; 96 | case 'D': 97 | EvaluateRandomPhrase(Constants.objectPhrases, builder); 98 | break; 99 | case '1': 100 | EvaluateRandomPhrase(Constants.firstAdjectivePhrases, builder); 101 | break; 102 | case '2': 103 | EvaluateRandomPhrase(Constants.secondAdjectivePhrases, builder); 104 | break; 105 | case '3': 106 | EvaluateRandomPhrase(Constants.nounPhrases, builder); 107 | break; 108 | case '4': 109 | EvaluateRandomPhrase(Constants.cliches, builder); 110 | break; 111 | case 't': 112 | builder.Append(title); 113 | break; 114 | } 115 | } 116 | 117 | static bool HasSentenceEnded(StringBuilder result) => 118 | result.EndsWith('.', '>'); 119 | 120 | void EvaluateCardinalSequence(StringBuilder output) 121 | { 122 | if (cardinalSequence >= Constants.cardinalSequences.Length) 123 | { 124 | cardinalSequence = 0; 125 | } 126 | 127 | output.Append(Constants.cardinalSequences[cardinalSequence++]); 128 | } 129 | 130 | void EvaluateOrdinalSequence(StringBuilder output) 131 | { 132 | if (ordinalSequence >= Constants.ordinalSequences.Length) 133 | { 134 | ordinalSequence = 0; 135 | } 136 | 137 | output.Append(Constants.ordinalSequences[ordinalSequence++]); 138 | } 139 | 140 | void RandomDate(StringBuilder output) => 141 | output.AppendFormat("{0:04u}", DateTime.Now.Year - random(31)); 142 | 143 | static string TitleCaseWords(string input) => 144 | CultureInfo.CurrentCulture.TextInfo.ToTitleCase(input); 145 | 146 | public WaffleContent GetContent(int paragraphsCount, bool includeHeading) 147 | { 148 | cardinalSequence = 0; 149 | ordinalSequence = 0; 150 | Heading? heading = null; 151 | if (includeHeading) 152 | { 153 | title = BuildTitle(); 154 | var quoteBuilder = new StringBuilder(); 155 | EvaluatePhrase("|A |B |C |t", quoteBuilder); 156 | quote = quoteBuilder.ToString(); 157 | var citeBuilder = new StringBuilder(); 158 | EvaluatePhrase("|f |s in The Journal of the |uc (|uy)", citeBuilder); 159 | cite = citeBuilder.ToString(); 160 | var buzzBuilder = new StringBuilder(); 161 | EvaluatePhrase("|c.", buzzBuilder); 162 | buzz = buzzBuilder.ToString(); 163 | heading = new(quote, cite, buzz, title); 164 | } 165 | 166 | for (var i = 0; i < paragraphsCount; i++) 167 | { 168 | string? paragraphHeading = null; 169 | if (i != 0) 170 | { 171 | var headingBuilder = new StringBuilder(); 172 | EvaluateRandomPhrase(Constants.maybeHeading, headingBuilder); 173 | paragraphHeading = headingBuilder.ToString(); 174 | if (string.IsNullOrWhiteSpace(paragraphHeading)) 175 | { 176 | paragraphHeading = null; 177 | } 178 | } 179 | 180 | var bodyBuilder = new StringBuilder(); 181 | EvaluatePhrase("|A |B |C |D.", bodyBuilder); 182 | var paragraph = new Paragraph(paragraphHeading, bodyBuilder.ToString()); 183 | paragraphs.Add(paragraph); 184 | } 185 | 186 | return new(heading, paragraphs); 187 | } 188 | 189 | public string BuildTitle() 190 | { 191 | var builder = new StringBuilder(); 192 | EvaluatePhrase("the |o of |2 |o", builder); 193 | 194 | return TitleCaseWords(builder.ToString()); 195 | } 196 | } -------------------------------------------------------------------------------- /src/WaffleGenerator/Paragraph.cs: -------------------------------------------------------------------------------- 1 | record Paragraph(string? Heading, string Body); 2 | -------------------------------------------------------------------------------- /src/WaffleGenerator/WaffleContent.cs: -------------------------------------------------------------------------------- 1 | record WaffleContent(Heading? Heading, List Paragraphs); -------------------------------------------------------------------------------- /src/WaffleGenerator/WaffleEngine.cs: -------------------------------------------------------------------------------- 1 | namespace WaffleGenerator; 2 | 3 | public static class WaffleEngine 4 | { 5 | public static string Html(int seed, int paragraphs, bool includeHeading, bool includeHeadAndBody) => 6 | Html(new Random(seed), paragraphs, includeHeading, includeHeadAndBody); 7 | 8 | public static string Html(int paragraphs, bool includeHeading, bool includeHeadAndBody) => 9 | Html(new Random(), paragraphs, includeHeading, includeHeadAndBody); 10 | 11 | public static string Html(Random random, int paragraphs, bool includeHeading, bool includeHeadAndBody) => 12 | Html(_ => random.Next(0, _), paragraphs, includeHeading, includeHeadAndBody); 13 | 14 | public static string Html(Func random, int paragraphs, bool includeHeading, bool includeHeadAndBody) 15 | { 16 | var builder = new StringBuilder(); 17 | var innerEngine = new InnerEngine(random); 18 | var waffleContent = innerEngine.GetContent(paragraphs, includeHeading); 19 | 20 | var heading = waffleContent.Heading; 21 | if (heading != null) 22 | { 23 | if (includeHeadAndBody) 24 | { 25 | builder.AppendLine( 26 | $""" 27 | 28 | 29 | {heading.Title} 30 | 31 | 32 | """); 33 | } 34 | 35 | builder.AppendLine( 36 | $""" 37 |

{heading.Title}

38 |
'{heading.Quote}'
39 | {heading.Cite}
40 |

{heading.Buzz}

41 | """); 42 | } 43 | 44 | foreach (var paragraph in waffleContent.Paragraphs) 45 | { 46 | builder.AppendLine("

"); 47 | if (paragraph.Heading != null) 48 | { 49 | builder.AppendLine($"

{paragraph.Heading}

"); 50 | } 51 | 52 | builder.AppendLine(paragraph.Body); 53 | builder.AppendLine("

"); 54 | } 55 | 56 | if (includeHeadAndBody) 57 | { 58 | builder.AppendLine(""); 59 | builder.Append(""); 60 | } 61 | 62 | return builder.ToString(); 63 | } 64 | 65 | public static string Title() => 66 | Title(new Random()); 67 | 68 | public static string Title(int seed) => 69 | Title(new Random(seed)); 70 | 71 | public static string Title(Random random) => 72 | Title(_ => random.Next(0, _)); 73 | 74 | public static string Title(Func random) 75 | { 76 | var innerEngine = new InnerEngine(random); 77 | return innerEngine.BuildTitle(); 78 | } 79 | 80 | public static string Markdown(int seed, int paragraphs, bool includeHeading) => 81 | Markdown(new Random(seed), paragraphs, includeHeading); 82 | 83 | public static string Markdown(int paragraphs, bool includeHeading) => 84 | Markdown(new Random(), paragraphs, includeHeading); 85 | 86 | public static string Markdown(Random random, int paragraphs, bool includeHeading) => 87 | Markdown(_ => random.Next(0, _), paragraphs, includeHeading); 88 | 89 | public static string Markdown(Func random, int paragraphs, bool includeHeading) 90 | { 91 | var builder = new StringBuilder(); 92 | var innerEngine = new InnerEngine(random); 93 | var waffleContent = innerEngine.GetContent(paragraphs, includeHeading); 94 | 95 | var heading = waffleContent.Heading; 96 | if (heading != null) 97 | { 98 | builder.AppendLine( 99 | $""" 100 | # {heading.Title} 101 | 102 | > {heading.Quote} 103 | 104 | * {heading.Cite} 105 | 106 | ## {heading.Buzz} 107 | 108 | """); 109 | } 110 | 111 | foreach (var paragraph in waffleContent.Paragraphs) 112 | { 113 | if (paragraph.Heading != null) 114 | { 115 | builder.AppendLine($"## {paragraph.Heading}"); 116 | builder.AppendLine(); 117 | } 118 | 119 | builder.AppendLine(paragraph.Body); 120 | builder.AppendLine(); 121 | } 122 | 123 | return builder.ToString(); 124 | } 125 | 126 | public static string Text(int seed, int paragraphs, bool includeHeading) => 127 | Text(new Random(seed), paragraphs, includeHeading); 128 | 129 | public static string Text(int paragraphs, bool includeHeading) => 130 | Text(new Random(), paragraphs, includeHeading); 131 | 132 | public static string Text(Random random, int paragraphs, bool includeHeading) => 133 | Text(_ => random.Next(0, _), paragraphs, includeHeading); 134 | 135 | public static string Text(Func random, int paragraphs, bool includeHeading) 136 | { 137 | var builder = new StringBuilder(); 138 | var innerEngine = new InnerEngine(random); 139 | var waffleContent = innerEngine.GetContent(paragraphs, includeHeading); 140 | var heading = waffleContent.Heading; 141 | if (heading != null) 142 | { 143 | builder.AppendLine( 144 | $""" 145 | {heading.Title} 146 | 147 | '{heading.Quote}' 148 | 149 | - {heading.Cite} 150 | 151 | {heading.Buzz} 152 | 153 | """); 154 | } 155 | 156 | var lastIndex = waffleContent.Paragraphs.Count - 1; 157 | for (var index = 0; index < waffleContent.Paragraphs.Count; index++) 158 | { 159 | var paragraph = waffleContent.Paragraphs[index]; 160 | if (paragraph.Heading != null) 161 | { 162 | builder.AppendLine(paragraph.Heading); 163 | builder.AppendLine(); 164 | } 165 | 166 | builder.AppendLine(paragraph.Body); 167 | if (index != lastIndex) 168 | { 169 | builder.AppendLine(); 170 | } 171 | } 172 | 173 | return builder.ToString(); 174 | } 175 | } -------------------------------------------------------------------------------- /src/WaffleGenerator/WaffleGenerator.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | net8.0;net9.0;net48 4 | Produces of text which, on first glance, looks like real, ponderous, prose; replete with clichés. 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/appveyor.yml: -------------------------------------------------------------------------------- 1 | image: Visual Studio 2022 2 | environment: 3 | DOTNET_NOLOGO: true 4 | DOTNET_CLI_TELEMETRY_OPTOUT: true 5 | DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true 6 | build_script: 7 | - pwsh: | 8 | Invoke-WebRequest "https://dot.net/v1/dotnet-install.ps1" -OutFile "./dotnet-install.ps1" 9 | ./dotnet-install.ps1 -JSonFile src/global.json -Architecture x64 -InstallDir 'C:\Program Files\dotnet' 10 | - dotnet build src --configuration Release 11 | - dotnet test src --configuration Release --no-build --no-restore 12 | test: off 13 | on_failure: 14 | - ps: Get-ChildItem *.received.* -recurse | % { Push-AppveyorArtifact $_.FullName -FileName $_.Name } 15 | artifacts: 16 | - path: nugets\*.nupkg -------------------------------------------------------------------------------- /src/global.json: -------------------------------------------------------------------------------- 1 | { 2 | "sdk": { 3 | "version": "9.0.300", 4 | "allowPrerelease": true, 5 | "rollForward": "latestFeature" 6 | } 7 | } -------------------------------------------------------------------------------- /src/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimonCropp/WaffleGenerator/0fde3de2be3b3ad584286dbae42a925857fae3c9/src/icon.png -------------------------------------------------------------------------------- /src/key.snk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimonCropp/WaffleGenerator/0fde3de2be3b3ad584286dbae42a925857fae3c9/src/key.snk -------------------------------------------------------------------------------- /src/mdsnippets.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/SimonCropp/MarkdownSnippets/master/schema.json", 3 | "TocExcludes": [ "Release Notes", "Icon" ], 4 | "MaxWidth": 80, 5 | "ValidateContent": false, 6 | "Convention": "InPlaceOverwrite" 7 | } -------------------------------------------------------------------------------- /src/nuget.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 16 | 17 | 20 | 21 | 24 | 25 | 26 | --------------------------------------------------------------------------------